diff --git a/SDK/$PLUGINSDIR/LangDLL.dll b/SDK/$PLUGINSDIR/LangDLL.dll new file mode 100644 index 0000000..1e28c76 Binary files /dev/null and b/SDK/$PLUGINSDIR/LangDLL.dll differ diff --git a/SDK/$PLUGINSDIR/System.dll b/SDK/$PLUGINSDIR/System.dll new file mode 100644 index 0000000..921bc86 Binary files /dev/null and b/SDK/$PLUGINSDIR/System.dll differ diff --git a/SDK/$PLUGINSDIR/UserInfo.dll b/SDK/$PLUGINSDIR/UserInfo.dll new file mode 100644 index 0000000..24094c2 Binary files /dev/null and b/SDK/$PLUGINSDIR/UserInfo.dll differ diff --git a/SDK/$PLUGINSDIR/modern-wizard.bmp b/SDK/$PLUGINSDIR/modern-wizard.bmp new file mode 100644 index 0000000..5524eef Binary files /dev/null and b/SDK/$PLUGINSDIR/modern-wizard.bmp differ diff --git a/SDK/$PLUGINSDIR/nsDialogs.dll b/SDK/$PLUGINSDIR/nsDialogs.dll new file mode 100644 index 0000000..90740b3 Binary files /dev/null and b/SDK/$PLUGINSDIR/nsDialogs.dll differ diff --git a/SDK/$PLUGINSDIR/nsisos.dll b/SDK/$PLUGINSDIR/nsisos.dll new file mode 100644 index 0000000..7c59fea Binary files /dev/null and b/SDK/$PLUGINSDIR/nsisos.dll differ diff --git a/SDK/$TEMP/$R0 b/SDK/$TEMP/$R0 new file mode 100644 index 0000000..e7c1997 Binary files /dev/null and b/SDK/$TEMP/$R0 differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/Bonjour.msi b/SDK/$TEMP/L502-E502-E16-SDK/Bonjour.msi new file mode 100644 index 0000000..dd310df Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/Bonjour.msi differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/Bonjour64.msi b/SDK/$TEMP/L502-E502-E16-SDK/Bonjour64.msi new file mode 100644 index 0000000..8495e68 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/Bonjour64.msi differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/DIFxAPI.dll b/SDK/$TEMP/L502-E502-E16-SDK/DIFxAPI.dll new file mode 100644 index 0000000..9de2917 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/DIFxAPI.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/WdfCoInstaller01009.dll b/SDK/$TEMP/L502-E502-E16-SDK/WdfCoInstaller01009.dll new file mode 100644 index 0000000..30e81af Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/WdfCoInstaller01009.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/amd64/WdfCoInstaller01009.dll b/SDK/$TEMP/L502-E502-E16-SDK/amd64/WdfCoInstaller01009.dll new file mode 100644 index 0000000..1731b96 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/amd64/WdfCoInstaller01009.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/amd64/winusbcoinstaller2.dll b/SDK/$TEMP/L502-E502-E16-SDK/amd64/winusbcoinstaller2.dll new file mode 100644 index 0000000..30e5502 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/amd64/winusbcoinstaller2.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/gacutil.exe b/SDK/$TEMP/L502-E502-E16-SDK/gacutil.exe new file mode 100644 index 0000000..0b5bb8f Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/gacutil.exe differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.cat b/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.cat new file mode 100644 index 0000000..816b636 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.cat differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.inf b/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.inf new file mode 100644 index 0000000..7e7f080 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lcard_libusb.inf differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lpcie.cat b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.cat new file mode 100644 index 0000000..2709166 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.cat differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lpcie.inf b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.inf new file mode 100644 index 0000000..45ea44d --- /dev/null +++ b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.inf @@ -0,0 +1,149 @@ +[Version] +Signature="$WINDOWS NT$" +Class=LPCIE +ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC} +Provider=%LCardMfg% +CatalogFile=lpcie.cat +;PnpLockDown=1 +DriverPackageDisplayName=%PkgName% +DriverPackageType=PlugAndPlay +DriverVer=11/16/2016,1.0.11.0 + + +[SourceDisksFiles] +lpcie.sys=1 + +[SourceDisksNames] +1=%DISK_NAME%,,,. + +[PreCopySection] +HKR,,NoSetupUI,,1 + +[DestinationDirs] +DefaultDestDir = 12 ;%SystemRoot%\system32\drivers + +; ================= Class section ===================== + +[ClassInstall32] +Addreg=LpcieClassReg + +[LpcieClassReg] +HKR,,,0,%ClassName% +HKR,,Icon,,-5 +HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens +;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin. +;[HKR,,Exclusive,0x10001,1] +;[HKR,,SilentInstall,,1] + +; ================= Device Install section ===================== + +[ControlFlags] +ExcludeFromSelect=* + +[Manufacturer] +%LCardMfg%=LCardMfg,NTx86 + + + +; For Win2K +[LCardMfg] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + +; For XP and later +[LCardMfg.NTx86] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + + +[lpcie_inst.HW] +AddReg = lpcie_hw_addreg + +[lpcie_inst.NT.HW] +AddReg = lpcie_hw_addreg + +; , MSI +[lpcie_hw_addreg] +HKR, Interrupt Management,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1 + + + + +[lpcie_inst] +CopyFiles=Lpcie.CopyFiles + +[lpcie_inst.NT] +CopyFiles=Lpcie.CopyFiles + +[Lpcie.CopyFiles] +lpcie.sys + + +[lpcie_inst.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_inst.NT.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_service] +DisplayName = %LPCIE.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 1 ; SERVICE_AUTO_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\lpcie.sys +;AddReg = Pci9x5x_Parameters_AddReg + +;-------------- Coinstaller installation +[DestinationDirs] +CoInstaller_CopyFiles = 11 + + +[lpcie_inst.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[lpcie_inst.NT.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + + +[lpcie_inst.Wdf] +KmdfService = lpcie, lpcie_wdfsect + +[lpcie_inst.NT.Wdf] +KmdfService = lpcie, lpcie_wdfsect +[lpcie_wdfsect] +KmdfLibraryVersion = 1.9 + +[Strings] +LCardMfg = "L Card" +L502.DeviceDescr = "L-502" +ClassName = "'L Card' PCI Express devices" +LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices" +PkgName = "driver for PCI Express boards" +DISK_NAME = "'L Card' Software Install Disk" + +[Strings.0419] +LCardMfg=" " +L502.DeviceDescr = "L-502" +LPCIE.SVCDESC="KMDF PCI Express ' '" +PkgName = " PCI Express" +ClassName="PCI Express ' '" +DISK_NAME = " ' '" + + diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lpcie.sys b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.sys new file mode 100644 index 0000000..fc367e7 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lpcie.sys differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lpcieNet.dll b/SDK/$TEMP/L502-E502-E16-SDK/lpcieNet.dll new file mode 100644 index 0000000..16d5b58 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lpcieNet.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/lpcie_inst.exe b/SDK/$TEMP/L502-E502-E16-SDK/lpcie_inst.exe new file mode 100644 index 0000000..999ac20 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/lpcie_inst.exe differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/x86/WdfCoInstaller01009.dll b/SDK/$TEMP/L502-E502-E16-SDK/x86/WdfCoInstaller01009.dll new file mode 100644 index 0000000..30e81af Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/x86/WdfCoInstaller01009.dll differ diff --git a/SDK/$TEMP/L502-E502-E16-SDK/x86/winusbcoinstaller2.dll b/SDK/$TEMP/L502-E502-E16-SDK/x86/winusbcoinstaller2.dll new file mode 100644 index 0000000..fc450d2 Binary files /dev/null and b/SDK/$TEMP/L502-E502-E16-SDK/x86/winusbcoinstaller2.dll differ diff --git a/SDK/bin/x64/e502api.dll b/SDK/bin/x64/e502api.dll new file mode 100644 index 0000000..c5e88f1 Binary files /dev/null and b/SDK/bin/x64/e502api.dll differ diff --git a/SDK/bin/x64/l502api.dll b/SDK/bin/x64/l502api.dll new file mode 100644 index 0000000..8733cbe Binary files /dev/null and b/SDK/bin/x64/l502api.dll differ diff --git a/SDK/bin/x64/x502api.dll b/SDK/bin/x64/x502api.dll new file mode 100644 index 0000000..8ad3702 Binary files /dev/null and b/SDK/bin/x64/x502api.dll differ diff --git a/SDK/bin/x86/e502api.dll b/SDK/bin/x86/e502api.dll new file mode 100644 index 0000000..7f87872 Binary files /dev/null and b/SDK/bin/x86/e502api.dll differ diff --git a/SDK/bin/x86/l502api.dll b/SDK/bin/x86/l502api.dll new file mode 100644 index 0000000..cd37d06 Binary files /dev/null and b/SDK/bin/x86/l502api.dll differ diff --git a/SDK/bin/x86/x502api.dll b/SDK/bin/x86/x502api.dll new file mode 100644 index 0000000..e7c1997 Binary files /dev/null and b/SDK/bin/x86/x502api.dll differ diff --git a/SDK/changelog.txt b/SDK/changelog.txt new file mode 100644 index 0000000..abbc019 --- /dev/null +++ b/SDK/changelog.txt @@ -0,0 +1,80 @@ +История изменений L-Card L502/E502 SDK: + +1.0.4 (24.10.2012): + - обновление описания, билиотеки l502api и драйвера (исправления ошибок, добавлен режим циклического вывода) + - добавлена обертка dotNet с возможностью установки в GAC + - добавлены примеры для delphi, C#, LabView + - добавлен приемер режима циклического генератора для С + - добавлена утилита для обновления прошивки ПЛИС с версией прошивки 0.2 + +1.0.5 (21.02.2013) + - добавлено низкоуровневое описание для модуля L502 + - добавлен исходный код прошивки BlackFin (устанавливается вместе с файлами для разработчика) + - обновлены библиотека и драйвер (исправления и изменения для работы с сигнальным процессором) + - включена версия 0.3 прошивки ПЛИС для модуля L502 + +1.0.6 (27.02.2013) + - добавлена новая прошивка ПЛИС модуля L502 (версия 0.4) + - добавлен файл firm_versions.txt с описаниями изменений в прошивках ПЛИС + - незначительные коррекции драйвера и библиотеки +1.1.0 (29.05.2015) + - обновление драйвера для L502 (1.0.8) с критическим исправлением зависания на некоторых ПК + - включение поддержки модуля E502, добавлено новое API для возможности работать с обоими модулями + (добавлен драйвер USB, обновлены библиотеки и описание, изменены все примеры для работы как с L502, так и E502) + - включена опция установки службы Bonjour для поиска в сети модулей E502 + - утилита lpcie-firm-update переименована в lxfw-update и включена возможность обновлять прошивки ПЛИС модуля E502. +1.1.1 (08.06.2015) + - обновление библиотеки до версии 1.1.1 (исправлены ошибки в функциях обнаружения устройств в сети и утечка памяти) +1.1.2 (08.07.2015) + - обновление библиотеки до версии 1.1.2, драйвера L502 до версии 1.0.9 и документации (для поддержки флага + X502_OUT_CYCLE_FLAGS_WAIT_DONE и функции X502_OutCycleCheckSetupDone()) +1.1.3 (21.07.2015) + - обновление библиотеки до версии 1.1.3 (исправлена ошибка при загрузке прошивки BlackFin в L502) +1.1.4 (28.07.2015) + - обновление библиотеки до версии 1.1.4 (добавлены функции X502_SetExtRefFreqValue() и X502_GetRefFreqValue()) +1.1.5 (22.12.2015) + - в примере на C# исправлена установка режима синхронизации старта +1.1.6 (23.06.2016) + - в lxfw_update обновлена прошивка ПЛИС модуля E502 до версии 0.2 (рекомендуется обновить в модулях с прошивкой ARM) + - обновление библиотеки до версии 1.1.5 (добавлены функции для изменения портов E502 при работе по TCP/IP) + - добавлен пример LabView с выводом на ЦАП в циклическом режиме, а также более корректное завершение при ошибке в примерах +1.1.7 (05.07.2016) + - в lxfw_update обновлены прошивки ПЛИС: модуля L502 до версии 0.5, а модуля E502 до версии 0.3 + - обновление библиотеки до версии 1.1.6 (проверка возможности установки делителя частоты вывода, добавление функций + X502_CheckFeature() и X502_OutGetStatusFlags(), выставление шага прерывнаия на вывода) + - Обновление драйвера L502 до версии 1.0.10 (включена возможность настройки шага прерывания в циклическом выводе для низких частот вывода) +1.1.8 (04.08.2016) + - добавлен пример для Visual Basic 6 +1.1.9 (24.08.2016) + - обновлено низкоуровневое описание программиcта (добавлены сведения по E502) + - обновление библиотеки до версии 1.1.7 (исправление привязки первого отсчета АЦП к моменту запуска + исправления некоторых команд в режиме с DSP) + - исправления и небольшие дополнения примера прошивки BlackFin + - в lxfw_update обновлены прошивки ПЛИС: модуля L502 до версии 0.7 и модуля E502 до версии 0.11 +1.1.10 (05.09.2016) + - обновлена библиотека до версии 1.1.8 (включена в экспортируемые функции ранее забытая X502_GetEnabledStreams()) +1.1.11 (16.11.2016) + - обновление x502api до 1.1.9 (включены функции X502_CalcAdcFreq, X502_CalcDinFreq и X502_CalcOutFreq) и описания программиста + - обновление низкоуровнего описания (включена версия с описанием протокола обмена с модулем E502) +1.1.12 (27.02.2017) + - обновление x502api до 1.1.10 (исправлены коды режимов синхронизации для Pascal и C#, а также работа функции X502_OutGetStatusFlags) + - в lxfw_update обновлена прошивка ПЛИС модулей L502 и E502 до версий 0.8 и 0.13 соответственно, добавлена прошивка для индустриального исполнения модуля E502 +1.1.13 (12.10.2017) + - в lxfw_update обновлена прошивка ПЛИС модуля L502 до версии 0.9 + - обновление x502api до 1.1.11 (незначительные коррекции библиотеки) + - в низкоуровневом описании исправлены адреса Flash-памяти, по которым хранится информация о модуле +1.1.14 (11.12.2017) + - обновление x502api до 1.1.12 - исправлена проблема работы с одновременной работой с 4 и более модулями E502, подключенными по USB, из одной программы +1.1.15 (13.03.2018) + - обновление x502api до 1.1.13 (исправлена утечка памяти при закрытии соединения по TCP). +1.1.16 (10.08.2018) + - в lxfw_update обновлена прошивка ПЛИС модулей L502 и E502 до версий 0.10 и 0.14 соответственно +1.1.17 (28.08.2018) + - обновление lpcieNet до версии 1.1.7.0 - исправление возможного падения в 64-битных приложениях при получении списка записей о найденных устройствах +1.1.18 (20.11.2019) + - в lxfw_update обновлена прошивка ПЛИС модуля E502 до версии 0.15 +1.1.19 (25.12.2019) + - обновление x502api до версии 1.1.14 и ее документации до версии 1.1.9, а также обновление низкоуровневого описания до версии 1.0.5. + +1.1.33 (22.01.2025) + - поддержка модулей E16 diff --git a/SDK/drivers/pci/x64/WdfCoInstaller01009.dll b/SDK/drivers/pci/x64/WdfCoInstaller01009.dll new file mode 100644 index 0000000..1731b96 Binary files /dev/null and b/SDK/drivers/pci/x64/WdfCoInstaller01009.dll differ diff --git a/SDK/drivers/pci/x64/lpcie.cat b/SDK/drivers/pci/x64/lpcie.cat new file mode 100644 index 0000000..6c610cd Binary files /dev/null and b/SDK/drivers/pci/x64/lpcie.cat differ diff --git a/SDK/drivers/pci/x64/lpcie.inf b/SDK/drivers/pci/x64/lpcie.inf new file mode 100644 index 0000000..2ea7dea --- /dev/null +++ b/SDK/drivers/pci/x64/lpcie.inf @@ -0,0 +1,149 @@ +[Version] +Signature="$WINDOWS NT$" +Class=LPCIE +ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC} +Provider=%LCardMfg% +CatalogFile=lpcie.cat +;PnpLockDown=1 +DriverPackageDisplayName=%PkgName% +DriverPackageType=PlugAndPlay +DriverVer=11/16/2016,1.0.11.0 + + +[SourceDisksFiles] +lpcie.sys=1 + +[SourceDisksNames] +1=%DISK_NAME%,,,. + +[PreCopySection] +HKR,,NoSetupUI,,1 + +[DestinationDirs] +DefaultDestDir = 12 ;%SystemRoot%\system32\drivers + +; ================= Class section ===================== + +[ClassInstall32] +Addreg=LpcieClassReg + +[LpcieClassReg] +HKR,,,0,%ClassName% +HKR,,Icon,,-5 +HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens +;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin. +;[HKR,,Exclusive,0x10001,1] +;[HKR,,SilentInstall,,1] + +; ================= Device Install section ===================== + +[ControlFlags] +ExcludeFromSelect=* + +[Manufacturer] +%LCardMfg%=LCardMfg,NTAMD64 + + + +; For Win2K +[LCardMfg] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + +; For XP and later +[LCardMfg.NTAMD64] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + + +[lpcie_inst.HW] +AddReg = lpcie_hw_addreg + +[lpcie_inst.NT.HW] +AddReg = lpcie_hw_addreg + +; , MSI +[lpcie_hw_addreg] +HKR, Interrupt Management,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1 + + + + +[lpcie_inst] +CopyFiles=Lpcie.CopyFiles + +[lpcie_inst.NT] +CopyFiles=Lpcie.CopyFiles + +[Lpcie.CopyFiles] +lpcie.sys + + +[lpcie_inst.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_inst.NT.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_service] +DisplayName = %LPCIE.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 1 ; SERVICE_AUTO_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\lpcie.sys +;AddReg = Pci9x5x_Parameters_AddReg + +;-------------- Coinstaller installation +[DestinationDirs] +CoInstaller_CopyFiles = 11 + + +[lpcie_inst.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[lpcie_inst.NT.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + + +[lpcie_inst.Wdf] +KmdfService = lpcie, lpcie_wdfsect + +[lpcie_inst.NT.Wdf] +KmdfService = lpcie, lpcie_wdfsect +[lpcie_wdfsect] +KmdfLibraryVersion = 1.9 + +[Strings] +LCardMfg = "L Card" +L502.DeviceDescr = "L-502" +ClassName = "'L Card' PCI Express devices" +LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices" +PkgName = "driver for PCI Express boards" +DISK_NAME = "'L Card' Software Install Disk" + +[Strings.0419] +LCardMfg=" " +L502.DeviceDescr = "L-502" +LPCIE.SVCDESC="KMDF PCI Express ' '" +PkgName = " PCI Express" +ClassName="PCI Express ' '" +DISK_NAME = " ' '" + + diff --git a/SDK/drivers/pci/x64/lpcie.sys b/SDK/drivers/pci/x64/lpcie.sys new file mode 100644 index 0000000..3dcf6cd Binary files /dev/null and b/SDK/drivers/pci/x64/lpcie.sys differ diff --git a/SDK/drivers/pci/x86/WdfCoInstaller01009.dll b/SDK/drivers/pci/x86/WdfCoInstaller01009.dll new file mode 100644 index 0000000..30e81af Binary files /dev/null and b/SDK/drivers/pci/x86/WdfCoInstaller01009.dll differ diff --git a/SDK/drivers/pci/x86/lpcie.cat b/SDK/drivers/pci/x86/lpcie.cat new file mode 100644 index 0000000..2709166 Binary files /dev/null and b/SDK/drivers/pci/x86/lpcie.cat differ diff --git a/SDK/drivers/pci/x86/lpcie.inf b/SDK/drivers/pci/x86/lpcie.inf new file mode 100644 index 0000000..45ea44d --- /dev/null +++ b/SDK/drivers/pci/x86/lpcie.inf @@ -0,0 +1,149 @@ +[Version] +Signature="$WINDOWS NT$" +Class=LPCIE +ClassGuid={73FE9311-0D50-4FCD-A895-571CA87A26DC} +Provider=%LCardMfg% +CatalogFile=lpcie.cat +;PnpLockDown=1 +DriverPackageDisplayName=%PkgName% +DriverPackageType=PlugAndPlay +DriverVer=11/16/2016,1.0.11.0 + + +[SourceDisksFiles] +lpcie.sys=1 + +[SourceDisksNames] +1=%DISK_NAME%,,,. + +[PreCopySection] +HKR,,NoSetupUI,,1 + +[DestinationDirs] +DefaultDestDir = 12 ;%SystemRoot%\system32\drivers + +; ================= Class section ===================== + +[ClassInstall32] +Addreg=LpcieClassReg + +[LpcieClassReg] +HKR,,,0,%ClassName% +HKR,,Icon,,-5 +HKR,,DeviceCharacteristics,0x10001,0x100 ;Use same security checks on relative opens +;HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GA;;;BA)" ;Allow generic all access to system and built-in Admin. +;[HKR,,Exclusive,0x10001,1] +;[HKR,,SilentInstall,,1] + +; ================= Device Install section ===================== + +[ControlFlags] +ExcludeFromSelect=* + +[Manufacturer] +%LCardMfg%=LCardMfg,NTx86 + + + +; For Win2K +[LCardMfg] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + +; For XP and later +[LCardMfg.NTx86] +; DisplayName Section DeviceId +; ----------- ------- -------- +%L502.DeviceDescr% = lpcie_inst, PCI\VEN_1172&DEV_0502&SUBSYS_4C353032 + + + +[lpcie_inst.HW] +AddReg = lpcie_hw_addreg + +[lpcie_inst.NT.HW] +AddReg = lpcie_hw_addreg + +; , MSI +[lpcie_hw_addreg] +HKR, Interrupt Management,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties,, 0x00000010 +HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, 0x00010001, 1 + + + + +[lpcie_inst] +CopyFiles=Lpcie.CopyFiles + +[lpcie_inst.NT] +CopyFiles=Lpcie.CopyFiles + +[Lpcie.CopyFiles] +lpcie.sys + + +[lpcie_inst.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_inst.NT.Services] +AddService=lpcie,0x00000002,lpcie_service + +[lpcie_service] +DisplayName = %LPCIE.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 1 ; SERVICE_AUTO_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\lpcie.sys +;AddReg = Pci9x5x_Parameters_AddReg + +;-------------- Coinstaller installation +[DestinationDirs] +CoInstaller_CopyFiles = 11 + + +[lpcie_inst.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[lpcie_inst.NT.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + + +[lpcie_inst.Wdf] +KmdfService = lpcie, lpcie_wdfsect + +[lpcie_inst.NT.Wdf] +KmdfService = lpcie, lpcie_wdfsect +[lpcie_wdfsect] +KmdfLibraryVersion = 1.9 + +[Strings] +LCardMfg = "L Card" +L502.DeviceDescr = "L-502" +ClassName = "'L Card' PCI Express devices" +LPCIE.SVCDESC = "KMDF driver for 'L-Card' PCI Express devices" +PkgName = "driver for PCI Express boards" +DISK_NAME = "'L Card' Software Install Disk" + +[Strings.0419] +LCardMfg=" " +L502.DeviceDescr = "L-502" +LPCIE.SVCDESC="KMDF PCI Express ' '" +PkgName = " PCI Express" +ClassName="PCI Express ' '" +DISK_NAME = " ' '" + + diff --git a/SDK/drivers/pci/x86/lpcie.sys b/SDK/drivers/pci/x86/lpcie.sys new file mode 100644 index 0000000..fc367e7 Binary files /dev/null and b/SDK/drivers/pci/x86/lpcie.sys differ diff --git a/SDK/drivers/usb/amd64/WdfCoInstaller01009.dll b/SDK/drivers/usb/amd64/WdfCoInstaller01009.dll new file mode 100644 index 0000000..1731b96 Binary files /dev/null and b/SDK/drivers/usb/amd64/WdfCoInstaller01009.dll differ diff --git a/SDK/drivers/usb/amd64/winusbcoinstaller2.dll b/SDK/drivers/usb/amd64/winusbcoinstaller2.dll new file mode 100644 index 0000000..30e5502 Binary files /dev/null and b/SDK/drivers/usb/amd64/winusbcoinstaller2.dll differ diff --git a/SDK/drivers/usb/lcard_libusb.cat b/SDK/drivers/usb/lcard_libusb.cat new file mode 100644 index 0000000..50d37e0 Binary files /dev/null and b/SDK/drivers/usb/lcard_libusb.cat differ diff --git a/SDK/drivers/usb/lcard_libusb.inf b/SDK/drivers/usb/lcard_libusb.inf new file mode 100644 index 0000000..7e7f080 Binary files /dev/null and b/SDK/drivers/usb/lcard_libusb.inf differ diff --git a/SDK/drivers/usb/x86/WdfCoInstaller01009.dll b/SDK/drivers/usb/x86/WdfCoInstaller01009.dll new file mode 100644 index 0000000..30e81af Binary files /dev/null and b/SDK/drivers/usb/x86/WdfCoInstaller01009.dll differ diff --git a/SDK/drivers/usb/x86/winusbcoinstaller2.dll b/SDK/drivers/usb/x86/winusbcoinstaller2.dll new file mode 100644 index 0000000..fc450d2 Binary files /dev/null and b/SDK/drivers/usb/x86/winusbcoinstaller2.dll differ diff --git a/SDK/examples/CppBuilder/x502_general/readme.txt b/SDK/examples/CppBuilder/x502_general/readme.txt new file mode 100644 index 0000000..fe19cf0 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/readme.txt @@ -0,0 +1,18 @@ + L502 E502 "Borland C++ Builder". + "Borland C++ Builder 6" (x502_example.dpr) + "Embarcadero C++ Builder XE" (x502_example.cbproj) + + , , + x502api.h, e502api.h, l502api.h lcard_pstdint.h + x502api.lib, e5l502api.lib l502api.lib , ( SDK_DIR/lib/borland). + + L502 E502, + C++ Builder. + + + , + / , . + + (X502_ProcessThread), + . , + ( ). \ No newline at end of file diff --git a/SDK/examples/CppBuilder/x502_general/unit.cpp b/SDK/examples/CppBuilder/x502_general/unit.cpp new file mode 100644 index 0000000..958ab24 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/unit.cpp @@ -0,0 +1,526 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop + +#include "unit.h" +#include +//--------------------------------------------------------------------------- +#pragma package(smart_init) +#pragma resource "*.dfm" +TForm1 *Form1; + +/* , */ +void TForm1::updateControls() { + /* */ + btnRefreshDeviceList->Enabled = (hnd==NULL); + cbbDevList->Enabled = (hnd==NULL); + + btnOpen->Caption = hnd == NULL ? " " : + " "; + btnOpen->Enabled = (hnd!=NULL) || (cbbDevList->ItemIndex >= 0); + btnOpenByIP->Enabled = (hnd==NULL); + edtIpAddr->Enabled = (hnd==NULL); + + chkSyncDin->Enabled = (hnd!=NULL) && !threadRunning; + btnStart->Enabled = (hnd!=NULL) && !threadRunning; + btnStop->Enabled = (hnd!=NULL) && threadRunning; + + btnSetAdcFreq->Enabled = (hnd!=NULL) && !threadRunning; + + btnAsyncDigOut->Enabled = (hnd!=NULL); + btnAsyncDigIn->Enabled = (hnd!=NULL); + btnAsyncDac1->Enabled = (hnd!=NULL) && chkDacPresent->Checked; + btnAsyncDac2->Enabled = (hnd!=NULL) && chkDacPresent->Checked; + btnAsyncAdcFrame->Enabled = (hnd!=NULL) && !threadRunning; + +} + +void TForm1::freeDevList() { + if (devrecList.Length != 0) { + X502_FreeDevRecordList(&devrecList[0], devrecList.Length); + devrecList.Length = 0; + } + cbbDevList->Items->Clear(); +} + + + +/* L502 E502*/ +void TForm1::refreshDeviceList(void) { + uint32_t pci_devcnt = 0; + uint32_t usb_devcnt = 0; + int32_t fnd_devcnt = 0; + + int old_index = cbbDevList->ItemIndex; + + /* , */ + freeDevList(); + + /* PCI USB */ + L502_GetDevRecordsList(NULL, 0, 0, &pci_devcnt); + E502_UsbGetDevRecordsList(NULL, 0, 0, &usb_devcnt); + + if ((pci_devcnt+usb_devcnt) != 0) { + /* + */ + devrecList.Length = pci_devcnt + usb_devcnt; + + /* L502, pci_devcnt */ + if (pci_devcnt!=0) { + int32_t res = L502_GetDevRecordsList(&devrecList[fnd_devcnt], + pci_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + /* E502, USB, */ + if (usb_devcnt!=0) { + int32_t res = E502_UsbGetDevRecordsList(&devrecList[fnd_devcnt], + usb_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + + devrecList.Length = fnd_devcnt; + if (fnd_devcnt > 0) { + /* ComboBox' */ + for (int32_t i=0; i < fnd_devcnt; i++) { + cbbDevList->Items->Add(AnsiString(devrecList[i].devname) + ", " + AnsiString(devrecList[i].serial)); + } + /* - */ + cbbDevList->ItemIndex = (old_index >= 0) && (old_index < fnd_devcnt) ? old_index : 0; + } + } + updateControls(); +} + + +/* GUI */ +int32_t TForm1::setupParams() { + int32_t err = 0; + uint32_t lch_cnt = cbbLChCnt->ItemIndex+1; + /* ComboBox */ + static uint32_t f_mode_tbl[] = {X502_LCH_MODE_COMM, X502_LCH_MODE_DIFF, X502_LCH_MODE_ZERO}; + /* ComboBox */ + static uint32_t f_range_tbl[] = {X502_ADC_RANGE_10, X502_ADC_RANGE_5, X502_ADC_RANGE_2, + X502_ADC_RANGE_1, X502_ADC_RANGE_05, X502_ADC_RANGE_02}; + /* ComboBox */ + static uint32_t f_sync_tbl[] = {X502_SYNC_INTERNAL, X502_SYNC_EXTERNAL_MASTER, + X502_SYNC_DI_SYN1_RISE, X502_SYNC_DI_SYN2_RISE, + X502_SYNC_DI_SYN1_FALL, X502_SYNC_DI_SYN2_FALL}; + + /* - */ + err = X502_SetLChannelCount(hnd, lch_cnt); + if (err == X502_ERR_OK) { + err = X502_SetLChannel(hnd, 0, cbbLCh1_Channel->ItemIndex, + f_mode_tbl[cbbLCh1_Mode->ItemIndex], f_range_tbl[cbbLCh1_Range->ItemIndex],0); + } + if ((err == X502_ERR_OK) && (lch_cnt>=2)) { + err = X502_SetLChannel(hnd, 1, cbbLCh2_Channel->ItemIndex, + f_mode_tbl[cbbLCh2_Mode->ItemIndex], f_range_tbl[cbbLCh2_Range->ItemIndex],0); + } + if ((err == X502_ERR_OK) && (lch_cnt>=3)) { + err = X502_SetLChannel(hnd, 2, cbbLCh3_Channel->ItemIndex, + f_mode_tbl[cbbLCh3_Mode->ItemIndex], f_range_tbl[cbbLCh3_Range->ItemIndex],0); + } + + /* */ + if (err == X502_ERR_OK) + err = X502_SetSyncMode(hnd, f_sync_tbl[cbbSyncMode->ItemIndex]); + if (err == X502_ERR_OK) + err = X502_SetSyncStartMode(hnd, f_sync_tbl[cbbSyncStartMode->ItemIndex]); + + /* */ + if (err == X502_ERR_OK) + err = setAdcFreq(); + + /* */ + if (err == X502_ERR_OK) + err = X502_Configure(hnd, 0); + + return err; +} + + +int32_t TForm1::setAdcFreq() { + double f_acq = StrToFloat(edtAdcFreq->Text); + double f_lch = StrToFloat(edtAdcFreqLch->Text); + double f_din = StrToFloat(edtDinFreq->Text); + /* . */ + int32_t err = X502_SetAdcFreq(hnd, &f_acq, &f_lch); + if (err == X502_ERR_OK) { + /* , + */ + edtAdcFreq->Text = FloatToStr(f_acq); + edtAdcFreqLch->Text = FloatToStr(f_lch); + + /* */ + err = X502_SetDinFreq(hnd, &f_din); + if (err == X502_ERR_OK) + edtDinFreq->Text = FloatToStr(f_din); + } + return err; +} + + +int32_t TForm1::setSyncDinStream() { + int32_t err; + /* + */ + if (chkSyncDin->Checked) { + err = X502_StreamsEnable(hnd, X502_STREAM_DIN); + } else { + err = X502_StreamsDisable(hnd, X502_STREAM_DIN); + } + return err; +} + +void __fastcall TForm1::OnThreadTerminate(TObject *obj) { + if (thread->err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(thread->err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + + threadRunning = false; + updateControls(); +} + + + +//--------------------------------------------------------------------------- +__fastcall TForm1::TForm1(TComponent* Owner) + : TForm(Owner), hnd(NULL) { + refreshDeviceList(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::btnRefreshDeviceListClick(TObject *Sender) { + refreshDeviceList(); +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnStartClick(TObject *Sender) { + /* */ + int32_t err = setupParams(); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + + /* */ + if (err == X502_ERR_OK) + err = X502_StreamsEnable(hnd, X502_STREAM_ADC); + /* */ + if (err == X502_ERR_OK) + err = setSyncDinStream(); + + + if (err == X502_ERR_OK) { + /* - */ + if (thread) { + delete thread; + thread = NULL; + } + // + thread = new X502_ProcessThread(true); + thread->hnd = hnd; + + // + thread->lchResEdits[0] = edtLCh1_Result; + thread->lchResEdits[1] = edtLCh2_Result; + thread->lchResEdits[2] = edtLCh3_Result; + thread->dinResEdit = edtDin_Result; + + edtLCh1_Result->Text=""; + edtLCh2_Result->Text=""; + edtLCh3_Result->Text=""; + edtDin_Result->Text=""; + + /* ( + , - + ) */ + thread->OnTerminate = OnThreadTerminate; + thread->Resume(); // + threadRunning = true; + + updateControls(); + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnStopClick(TObject *Sender) { + /* */ + if (threadRunning) + thread->stop = true; + btnStop->Enabled = false; +} + + +void TForm1::showDevInfo(void) { + t_x502_info info; + int32_t err = X502_GetDevInfo(hnd, &info); + if (err == X502_ERR_OK) { + chkDacPresent->Checked = info.devflags & X502_DEVFLAGS_DAC_PRESENT; + chkGalPresent->Checked = info.devflags & X502_DEVFLAGS_GAL_PRESENT; + chkDspPresent->Checked = info.devflags & X502_DEVFLAGS_BF_PRESENT; + chkEthPresent->Checked = info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_ETH; + + edtPldaVer->Text = IntToStr(info.plda_ver); + edtFpgaVer->Text = IntToStr((info.fpga_ver>>8)&0xFF) + "." + + IntToStr(info.fpga_ver & 0xFF); + if (info.mcu_firmware_ver != 0) { + edtMcuVer->Text = IntToStr((int)(info.mcu_firmware_ver>>24)&0xFF) + "." + + IntToStr((int)(info.mcu_firmware_ver>>16)&0xFF) + "." + + IntToStr((int)(info.mcu_firmware_ver>>8)&0xFF) + "." + + IntToStr((int)info.mcu_firmware_ver & 0xFF); + } else { + edtMcuVer->Text = ""; + } + } else { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + + X502_Close(hnd); + X502_Free(hnd); + hnd = NULL; + } +} +/* , + */ +void __fastcall TForm1::btnOpenClick(TObject *Sender) { + + /* - */ + if (hnd==NULL) { + int idx = cbbDevList->ItemIndex; + if ((idx >= 0) && (idx < devrecList.Length)) { + hnd = X502_Create(); + if (hnd==NULL) { + MessageDlg(" ", mtError, TMsgDlgButtons() << mbOK,NULL); + } else { + /* , */ + int32_t err = X502_OpenByDevRecord(hnd, &devrecList[idx]); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + X502_Free(hnd); + hnd = NULL; + } else { + showDevInfo(); + } + } + } + } else { + /* - */ + closeDevice(); + } + updateControls(); +} + +uint32_t TForm1::parseIpAddr(AnsiString addr) { + int a[4],i; + if (sscanf(addr.c_str(), "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3])!=4) { + throw new Exception(" IP-!!"); + } + + for (i=0; i < 4; i++) { + if ((a[i]<0) || (a[i] > 255)) { + throw new Exception(" IP-!!"); + } + } + + + return (a[0] << 24) | (a[1]<<16) | (a[2]<<8) | a[3]; +} +void __fastcall TForm1::btnOpenByIPClick(TObject *Sender) { + t_x502_devrec devrec; + int32_t err = E502_MakeDevRecordByIpAddr(&devrec, parseIpAddr(edtIpAddr->Text), 0, 5000); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } else { + hnd = X502_Create(); + if (hnd==NULL) { + MessageDlg(" ", mtError, TMsgDlgButtons() << mbOK,NULL); + } else { + /* */ + int32_t err = X502_OpenByDevRecord(hnd, &devrec); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + X502_Free(hnd); + hnd = NULL; + } else { + showDevInfo(); + } + } + } + updateControls(); +} + + +//--------------------------------------------------------------------------- + +void TForm1::closeDevice() { + if (hnd != NULL) { + /* - */ + if (threadRunning) { + thread->stop=1; + thread->WaitFor(); + } + /* */ + X502_Close(hnd); + /* */ + X502_Free(hnd); + hnd = NULL; + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { + closeDevice(); + freeDevList(); + if (thread) + delete thread; +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnAsyncDigOutClick(TObject *Sender) { + if (hnd!=NULL) { + uint32_t val = StrToInt(edtAsyncDigOut->Text); + int32_t err = X502_AsyncOutDig(hnd, val, 0); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::adcFreqEditChange(TObject *Sender) { + if (hnd != NULL) { + /* - , + */ + int32_t err = X502_SetLChannelCount(hnd, cbbLChCnt->ItemIndex+1); + if (err == X502_ERR_OK) + err = setAdcFreq(); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::chkSyncDinClick(TObject *Sender) { + if (hnd != NULL) { + int32_t err = setSyncDinStream(); + if (err != X502_ERR_OK) { + MessageDlg(" / : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnAsyncDigInClick(TObject *Sender) { + if (hnd != NULL) { + uint32_t din; + int32_t err = X502_AsyncInDig(hnd, &din); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } else { + edtAsyncDigIn->Text = IntToHex((int)din&0x3FFFF, 5); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnAsyncDac1Click(TObject *Sender) { + if (hnd != NULL) { + double val = StrToFloat(edtAsyncDac1->Text);; + int32_t err; + err = X502_AsyncOutDac(hnd, X502_DAC_CH1, val, X502_DAC_FLAGS_CALIBR | + X502_DAC_FLAGS_VOLT); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnAsyncDac2Click(TObject *Sender) { + if (hnd != NULL) { + double val = StrToFloat(edtAsyncDac2->Text);; + int32_t err; + err = X502_AsyncOutDac(hnd, X502_DAC_CH2, val, X502_DAC_FLAGS_CALIBR | + X502_DAC_FLAGS_VOLT); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + } +} +//--------------------------------------------------------------------------- + +void __fastcall TForm1::btnAsyncAdcFrameClick(TObject *Sender) { + if (hnd != NULL) { + uint32_t lch_cnt; + /* */ + int32_t err = setupParams(); + if (err == X502_ERR_OK) + err = X502_GetLChannelCount(hnd, &lch_cnt); + + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } + + if (err == X502_ERR_OK) { + /* 3 - + */ + double adc_data[3]; + err = X502_AsyncGetAdcFrame(hnd, X502_PROC_FLAGS_VOLT, 1000, adc_data); + if (err != X502_ERR_OK) { + MessageDlg(" : " + String(X502_GetErrorString(err)), + mtError, TMsgDlgButtons() << mbOK,NULL); + } else { + edtLCh1_Result->Text = FloatToStrF(adc_data[0], ffFixed, 4, 8); + if (lch_cnt>=2) { + edtLCh2_Result->Text = FloatToStrF(adc_data[1], ffFixed, 4, 8); + } else { + edtLCh2_Result->Text =""; + } + + if (lch_cnt>=3) { + edtLCh3_Result->Text = FloatToStrF(adc_data[2], ffFixed, 4, 8); + } else { + edtLCh3_Result->Text = ""; + } + } + } + } +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::cbbDevListChange(TObject *Sender) { + //refreshDeviceList(); +} +//--------------------------------------------------------------------------- + + +void __fastcall TForm1::cbbLChCntChange(TObject *Sender) { + if (cbbLChCnt->ItemIndex < 0) + cbbLChCnt->ItemIndex = 0; +} +//--------------------------------------------------------------------------- + + + +//--------------------------------------------------------------------------- + diff --git a/SDK/examples/CppBuilder/x502_general/unit.dfm b/SDK/examples/CppBuilder/x502_general/unit.dfm new file mode 100644 index 0000000..fbcf246 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/unit.dfm @@ -0,0 +1,669 @@ +object Form1: TForm1 + Left = 599 + Top = 94 + Caption = 'L502/E502 test' + ClientHeight = 702 + ClientWidth = 577 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + PixelsPerInch = 96 + TextHeight = 13 + object btnRefreshDeviceList: TButton + Left = 16 + Top = 8 + Width = 217 + Height = 25 + Caption = #1054#1073#1085#1086#1074#1080#1090#1100' '#1089#1087#1080#1089#1082#1086' '#1091#1089#1090#1088#1086#1081#1089#1090#1074 + TabOrder = 0 + OnClick = btnRefreshDeviceListClick + end + object cbbDevList: TComboBox + Left = 264 + Top = 8 + Width = 225 + Height = 21 + TabOrder = 1 + OnChange = cbbDevListChange + end + object btnStart: TButton + Left = 16 + Top = 88 + Width = 217 + Height = 25 + Caption = #1047#1072#1087#1091#1089#1082' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + TabOrder = 2 + OnClick = btnStartClick + end + object GroupBox1: TGroupBox + Left = 16 + Top = 376 + Width = 513 + Height = 153 + Caption = #1050#1072#1085#1072#1083#1099 + TabOrder = 3 + object Label2: TLabel + Left = 8 + Top = 40 + Width = 31 + Height = 13 + Caption = #1050#1072#1085#1072#1083 + end + object Label1: TLabel + Left = 64 + Top = 40 + Width = 51 + Height = 13 + Caption = #1044#1080#1072#1087#1072#1079#1086#1085 + end + object Label3: TLabel + Left = 152 + Top = 40 + Width = 94 + Height = 13 + Caption = #1056#1077#1078#1080#1084' '#1080#1079#1084#1077#1088#1077#1085#1080#1103 + end + object Label4: TLabel + Left = 336 + Top = 40 + Width = 52 + Height = 13 + Caption = #1056#1077#1079#1091#1083#1100#1090#1072#1090 + end + object Label9: TLabel + Left = 16 + Top = 16 + Width = 164 + Height = 13 + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1083#1086#1075#1080#1095#1077#1089#1082#1080#1093' '#1082#1072#1085#1072#1083#1086#1074 + end + object cbbLCh1_Channel: TComboBox + Left = 8 + Top = 56 + Width = 41 + Height = 21 + ItemIndex = 0 + TabOrder = 0 + Text = '1' + Items.Strings = ( + '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') + end + object cbbLCh1_Range: TComboBox + Left = 64 + Top = 56 + Width = 57 + Height = 21 + ItemIndex = 0 + TabOrder = 1 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh1_Mode: TComboBox + Left = 136 + Top = 56 + Width = 169 + Height = 21 + ItemIndex = 1 + TabOrder = 2 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh1_Result: TEdit + Left = 328 + Top = 56 + Width = 121 + Height = 21 + TabOrder = 3 + end + object cbbLCh2_Channel: TComboBox + Left = 8 + Top = 80 + Width = 41 + Height = 21 + ItemIndex = 1 + TabOrder = 4 + Text = '2' + Items.Strings = ( + '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') + end + object cbbLCh2_Range: TComboBox + Left = 64 + Top = 80 + Width = 57 + Height = 21 + ItemIndex = 0 + TabOrder = 5 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh2_Mode: TComboBox + Left = 136 + Top = 80 + Width = 169 + Height = 21 + ItemIndex = 1 + TabOrder = 6 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh2_Result: TEdit + Left = 328 + Top = 80 + Width = 121 + Height = 21 + TabOrder = 7 + end + object cbbLCh3_Channel: TComboBox + Left = 8 + Top = 104 + Width = 41 + Height = 21 + ItemIndex = 2 + TabOrder = 8 + Text = '3' + Items.Strings = ( + '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') + end + object cbbLCh3_Range: TComboBox + Left = 64 + Top = 104 + Width = 57 + Height = 21 + ItemIndex = 0 + TabOrder = 9 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh3_Mode: TComboBox + Left = 136 + Top = 104 + Width = 169 + Height = 21 + ItemIndex = 1 + TabOrder = 10 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh3_Result: TEdit + Left = 328 + Top = 104 + Width = 121 + Height = 21 + TabOrder = 11 + end + object chkSyncDin: TCheckBox + Left = 120 + Top = 128 + Width = 185 + Height = 17 + Caption = #1056#1072#1079#1088#1072#1096#1077#1085#1080#1077' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072 + TabOrder = 12 + OnClick = chkSyncDinClick + end + object edtDin_Result: TEdit + Left = 328 + Top = 128 + Width = 121 + Height = 21 + TabOrder = 13 + end + object cbbLChCnt: TComboBox + Left = 192 + Top = 16 + Width = 73 + Height = 21 + ItemIndex = 2 + TabOrder = 14 + Text = '3' + OnChange = cbbLChCntChange + Items.Strings = ( + '1' + '2' + '3') + end + end + object btnStop: TButton + Left = 16 + Top = 120 + Width = 217 + Height = 25 + Caption = #1054#1089#1090#1072#1085#1086#1074' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + Enabled = False + TabOrder = 4 + OnClick = btnStopClick + end + object btnOpen: TButton + Left = 16 + Top = 56 + Width = 217 + Height = 25 + Caption = #1054#1090#1082#1088#1099#1090#1100' '#1091#1089#1090#1088#1086#1081#1089#1090#1074#1086 + TabOrder = 5 + OnClick = btnOpenClick + end + object btnAsyncDigOut: TButton + Left = 16 + Top = 600 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1094#1080#1092#1088#1086#1074#1099#1093' '#1083#1080#1085#1080#1081 + TabOrder = 6 + OnClick = btnAsyncDigOutClick + end + object edtAsyncDigOut: TEdit + Left = 248 + Top = 600 + Width = 121 + Height = 21 + TabOrder = 7 + Text = '0x0000' + end + object edtAsyncDigIn: TEdit + Left = 248 + Top = 568 + Width = 121 + Height = 21 + Enabled = False + TabOrder = 8 + Text = '0x0000' + end + object btnAsyncDigIn: TButton + Left = 16 + Top = 568 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1094#1080#1092#1088#1086#1099#1093' '#1083#1080#1085#1080#1081 + TabOrder = 9 + OnClick = btnAsyncDigInClick + end + object GroupBox2: TGroupBox + Left = 264 + Top = 40 + Width = 257 + Height = 169 + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1086' '#1084#1086#1076#1091#1083#1077 + TabOrder = 10 + object Label6: TLabel + Left = 112 + Top = 93 + Width = 124 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' '#1055#1051#1048#1057 + end + object labelPldaVer: TLabel + Left = 112 + Top = 117 + Width = 121 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' PLDA' + end + object lbl11: TLabel + Left = 112 + Top = 144 + Width = 117 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' ARM' + end + object chkDacPresent: TCheckBox + Left = 16 + Top = 24 + Width = 97 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1062#1040#1055 + Enabled = False + TabOrder = 0 + end + object edtFpgaVer: TEdit + Left = 16 + Top = 93 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 1 + end + object edtPldaVer: TEdit + Left = 16 + Top = 117 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 2 + end + object edtMcuVer: TEdit + Left = 16 + Top = 144 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 3 + end + object chkEthPresent: TCheckBox + Left = 16 + Top = 72 + Width = 209 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1077#1090#1077#1074#1086#1075#1086' '#1080#1085#1090#1077#1088#1092#1077#1081#1089#1072 + Enabled = False + TabOrder = 4 + end + end + object chkGalPresent: TCheckBox + Left = 280 + Top = 80 + Width = 169 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1075#1072#1083#1100#1074#1072#1085#1086#1088#1072#1079#1074#1103#1079#1082#1080 + Enabled = False + TabOrder = 11 + end + object chkDspPresent: TCheckBox + Left = 280 + Top = 96 + Width = 209 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1080#1075#1085#1072#1083#1100#1085#1086#1075#1086' '#1087#1088#1086#1094#1077#1089#1089#1086#1088#1072 + Enabled = False + TabOrder = 12 + end + object edtAsyncDac1: TEdit + Left = 248 + Top = 640 + Width = 81 + Height = 21 + TabOrder = 13 + Text = '5' + end + object btnAsyncDac1: TButton + Left = 16 + Top = 640 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'1 ('#1042#1086#1083#1100#1090#1099')' + TabOrder = 14 + OnClick = btnAsyncDac1Click + end + object btnAsyncDac2: TButton + Left = 16 + Top = 672 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'2 ('#1042#1086#1083#1100#1090#1099')' + TabOrder = 15 + OnClick = btnAsyncDac2Click + end + object edtAsyncDac2: TEdit + Left = 248 + Top = 672 + Width = 81 + Height = 21 + TabOrder = 16 + Text = '5' + end + object btnAsyncAdcFrame: TButton + Left = 16 + Top = 536 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1082#1072#1076#1088#1072' '#1040#1062#1055 + TabOrder = 17 + OnClick = btnAsyncAdcFrameClick + end + object GroupBox3: TGroupBox + Left = 16 + Top = 240 + Width = 513 + Height = 65 + Caption = #1063#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + TabOrder = 18 + object Label5: TLabel + Left = 16 + Top = 20 + Width = 136 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093' ('#1043#1094')' + end + object Label7: TLabel + Left = 168 + Top = 20 + Width = 111 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1085#1072' '#1082#1072#1085#1072#1083' ('#1043#1094')' + end + object Label8: TLabel + Left = 296 + Top = 20 + Width = 163 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072' ('#1043#1094')' + end + object btnSetAdcFreq: TButton + Left = 432 + Top = 32 + Width = 73 + Height = 25 + Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100 + TabOrder = 0 + OnClick = adcFreqEditChange + end + object edtAdcFreq: TEdit + Left = 16 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 1 + Text = '2000000' + end + object edtAdcFreqLch: TEdit + Left = 176 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 2 + Text = '2000000' + end + object edtDinFreq: TEdit + Left = 296 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 3 + Text = '2000000' + end + end + object GroupBox4: TGroupBox + Left = 16 + Top = 311 + Width = 513 + Height = 65 + Caption = #1057#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1103 + TabOrder = 19 + object Label10: TLabel + Left = 16 + Top = 20 + Width = 172 + Height = 13 + Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1095#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1080 + end + object Label11: TLabel + Left = 264 + Top = 20 + Width = 238 + Height = 13 + Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1079#1072#1087#1091#1089#1082#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072'/'#1074#1099#1074#1086#1076#1072 + end + object cbbSyncMode: TComboBox + Left = 16 + Top = 38 + Width = 169 + Height = 21 + ItemIndex = 0 + TabOrder = 0 + Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + Items.Strings = ( + #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + #1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072 + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2') + end + object cbbSyncStartMode: TComboBox + Left = 264 + Top = 38 + Width = 169 + Height = 21 + ItemIndex = 0 + TabOrder = 1 + Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + Items.Strings = ( + #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + #1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072 + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2') + end + end + object btnOpenByIP: TButton + Left = 16 + Top = 168 + Width = 217 + Height = 25 + Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1077' '#1087#1086' IP-'#1072#1076#1088#1077#1089#1091 + TabOrder = 20 + OnClick = btnOpenByIPClick + end + object edtIpAddr: TEdit + Left = 16 + Top = 200 + Width = 217 + Height = 21 + TabOrder = 21 + Text = '192.168.0.1' + end +end diff --git a/SDK/examples/CppBuilder/x502_general/unit.h b/SDK/examples/CppBuilder/x502_general/unit.h new file mode 100644 index 0000000..cba87be --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/unit.h @@ -0,0 +1,122 @@ +//--------------------------------------------------------------------------- + +#ifndef unitH +#define unitH + +#include "l502api.h" +#include "e502api.h" +#include "x502_thread.h" + +//--------------------------------------------------------------------------- +#include +#include +#include +#include + +//--------------------------------------------------------------------------- +class TForm1 : public TForm +{ +__published: // IDE-managed Components + TButton *btnRefreshDeviceList; + TComboBox *cbbDevList; + TButton *btnStart; + TGroupBox *GroupBox1; + TLabel *Label2; + TLabel *Label1; + TComboBox *cbbLCh1_Channel; + TComboBox *cbbLCh1_Range; + TComboBox *cbbLCh1_Mode; + TEdit *edtLCh1_Result; + TComboBox *cbbLCh2_Channel; + TComboBox *cbbLCh2_Range; + TComboBox *cbbLCh2_Mode; + TEdit *edtLCh2_Result; + TComboBox *cbbLCh3_Channel; + TComboBox *cbbLCh3_Range; + TComboBox *cbbLCh3_Mode; + TComboBox *cbbSyncMode; + TComboBox *cbbSyncStartMode; + TEdit *edtLCh3_Result; + TButton *btnStop; + TLabel *Label3; + TLabel *Label4; + TCheckBox *chkSyncDin; + TEdit *edtDin_Result; + TButton *btnOpen; + TButton *btnAsyncDigOut; + TEdit *edtAsyncDigOut; + TEdit *edtAsyncDigIn; + TButton *btnAsyncDigIn; + TGroupBox *GroupBox2; + TCheckBox *chkDacPresent; + TCheckBox *chkGalPresent; + TCheckBox *chkDspPresent; + TEdit *edtFpgaVer; + TLabel *Label6; + TEdit *edtPldaVer; + TLabel *labelPldaVer; + TEdit *edtAsyncDac1; + TButton *btnAsyncDac1; + TButton *btnAsyncDac2; + TEdit *edtAsyncDac2; + TButton *btnAsyncAdcFrame; + TGroupBox *GroupBox3; + TButton *btnSetAdcFreq; + TLabel *Label5; + TEdit *edtAdcFreq; + TEdit *edtAdcFreqLch; + TEdit *edtDinFreq; + TLabel *Label7; + TLabel *Label8; + TComboBox *cbbLChCnt; + TLabel *Label9; + TLabel *lbl11; + TEdit *edtMcuVer; + TCheckBox *chkEthPresent; + TButton *btnOpenByIP; + TEdit *edtIpAddr; + + void __fastcall btnRefreshDeviceListClick(TObject *Sender); + void __fastcall btnStartClick(TObject *Sender); + void __fastcall btnStopClick(TObject *Sender); + void __fastcall btnOpenClick(TObject *Sender); + void __fastcall FormClose(TObject *Sender, TCloseAction &Action); + void __fastcall btnAsyncDigOutClick(TObject *Sender); + void __fastcall adcFreqEditChange(TObject *Sender); + void __fastcall chkSyncDinClick(TObject *Sender); + void __fastcall btnAsyncDigInClick(TObject *Sender); + void __fastcall btnAsyncDac1Click(TObject *Sender); + void __fastcall btnAsyncDac2Click(TObject *Sender); + void __fastcall btnAsyncAdcFrameClick(TObject *Sender); + void __fastcall cbbDevListChange(TObject *Sender); + void __fastcall cbbLChCntChange(TObject *Sender); + void __fastcall btnOpenByIPClick(TObject *Sender); +private: // User declarations + t_x502_hnd hnd; // + bool threadRunning; //, + X502_ProcessThread *thread; // + + DynamicArray devrecList; + void freeDevList(); + void refreshDeviceList(); + void closeDevice(); + void showDevInfo(); + uint32_t parseIpAddr(AnsiString addr); + + int32_t setSyncDinStream(); + int32_t setAdcFreq(); + int32_t setupParams(); + + void updateControls(); + + __fastcall void OnThreadTerminate(TObject *obj); + + + +public: // User declarations + __fastcall TForm1(TComponent* Owner); +}; +//--------------------------------------------------------------------------- +extern PACKAGE TForm1 *Form1; +//--------------------------------------------------------------------------- +#endif diff --git a/SDK/examples/CppBuilder/x502_general/x502_example.bpr b/SDK/examples/CppBuilder/x502_general/x502_example.bpr new file mode 100644 index 0000000..974e8c6 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/x502_example.bpr @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1049 +CodePage=1251 + +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= + +[Excluded Packages] +c:\program files (x86)\borland\cbuilder6\Bin\dclite60.bpl=Borland Integrated Translation Environment + +[HistoryLists\hlIncludePath] +Count=5 +Item0=$(BCB)\include;$(BCB)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include +Item1=C:\Program Files (x86)\Borland\CBuilder6\Projects;C:\Program Files (x86)\L-Card\lpcie\include +Item2=C:\Program Files (x86)\Borland\CBuilder6\Projects; +Item3=$(BCB)\include;$(BCB)\include\vcl; +Item4=$(BCB)\include;$(BCB)\include\vcl + +[HistoryLists\hlLibraryPath] +Count=2 +Item0=C:\Program Files (x86)\Borland\CBuilder6\Projects +Item1=$(BCB)\lib\obj;$(BCB)\lib + +[HistoryLists\hlDebugSourcePath] +Count=1 +Item0=$(BCB)\source\vcl + +[HistoryLists\hlConditionals] +Count=1 +Item0=_DEBUG + +[Debugging] +DebugSourceDirs=$(BCB)\source\vcl + +[Parameters] +RunParams= +Launcher= +UseLauncher=0 +DebugCWD= +HostApplication= +RemoteHost= +RemotePath= +RemoteLauncher= +RemoteCWD= +RemoteDebug=0 + +[Compiler] +ShowInfoMsgs=0 +LinkDebugVcl=0 +LinkCGLIB=0 + +[CORBA] +AddServerUnit=1 +AddClientUnit=1 +PrecompiledHeaders=1 + + \ No newline at end of file diff --git a/SDK/examples/CppBuilder/x502_general/x502_example.cbproj b/SDK/examples/CppBuilder/x502_general/x502_example.cbproj new file mode 100644 index 0000000..9d95a69 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/x502_example.cbproj @@ -0,0 +1,294 @@ + + + {52F5121E-CB05-4B98-8B26-2A5FA28782E4} + CppVCLApplication + x502_example.cpp + True + Debug + 1 + Application + VCL + 15.4 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + true + Cfg_2 + true + true + + + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + x502_example + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + 1049 + vcl.lib;rtl.lib + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_UnitSearchPath) + . + /w2 + true + $(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(BRCC_IncludePath) + true + -M + false + true + Windows + JPHNE + .\;$(BDS)\lib;$(BDS)\lib\obj;$(DCC_IncludePath) + $(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(BCC_IncludePath) + $(BDS)\include;$(BDS)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include;$(TASM_IncludePath) + true + true + C:\Program Files (x86)\Borland\CBuilder6\Projects;$(BDS)\lib\obj;$(BDS)\lib;$(BDS)\lib\psdk;$(ILINK_LibraryPath) + true + true + true + vcl.bpi;rtl.bpi;dbrtl.bpi;adortl.bpi;vcldb.bpi;vclx.bpi;bdertl.bpi;vcldbx.bpi;ibxpress.bpi;dsnap.bpi;dsnap.bpi;dsnapcon.bpi;teeui.bpi;teedb.bpi;tee.bpi;dss.bpi;dsnapcon.bpi;bcbsmp.bpi;vclie.bpi;xmlrtl.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;inetdb.bpi;webdsnap.bpi;bcbie.bpi;websnap.bpi;soaprtl.bpi;dbexpress.bpi;dbxcds.bpi;indycore.bpi;indysystem.bpi;bcboffice2k.bpi;$(PackageImports) + + + -tWM -Vx -r- -k -Ve + 1033 + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + $(BDS)\bin\default_app.manifest + .exe + _DEBUG;$(BRCC_Defines) + true + _DEBUG;$(TASM_Defines) + C:\Program Files (x86)\L-Card\lpcie\lib\borland\;$(ILINK_LibraryPath) + + + $(BDSINCLUDE)\windows\vcl;$(IncludePath) + _DEBUG;$(TASM_Defines) + _DEBUG;$(BRCC_Defines) + + + Debug_Build + -M -V + true + Full + DEBUG;$(DCC_Define);$(DCC_Define) + true + true + $(BDS)\lib\debug;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + + + 1033 + -tWM -Vx -r- -k -Ve -k + _DEBUG;$(BCC_Defines);$(BCC_Defines) + vcl.bpi;rtl.bpi + exe + true + $(BDS)\lib\win32\release\;$(ILINK_LibraryPath) + + + _DEBUG;$(BCC_Defines);$(BCC_Defines) + + + Level2 + -M -$O+ + $(BDS)\lib\release;$(ILINK_LibraryPath);$(ILINK_LibraryPath) + None + Release_Build + true + + + NDEBUG;$(BCC_Defines);$(BCC_Defines) + -tWM -Vx -r- -k -Ve -r + + + NDEBUG;$(BCC_Defines);$(BCC_Defines) + + + + 8 +
Form1
+ unit.h + 6 +
+ + 5 + 5 + + + 2 + 4 + + + 11 + 3 + + + 4 + true + + + 5 + true + + + 6 + true + + + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + + CPlusPlusBuilder.Personality.12 + CppVCLApplication + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + Borland Integrated Translation Environment + + + 5 + $(BCB)\include;$(BCB)\include\vcl;C:\Program Files (x86)\L-Card\lpcie\include + C:\Program Files (x86)\Borland\CBuilder6\Projects;C:\Program Files (x86)\L-Card\lpcie\include + C:\Program Files (x86)\Borland\CBuilder6\Projects; + $(BCB)\include;$(BCB)\include\vcl; + $(BCB)\include;$(BCB)\include\vcl + + + 2 + C:\Program Files (x86)\Borland\CBuilder6\Projects + $(BCB)\lib\obj;$(BCB)\lib + + + 1 + $(BCB)\source\vcl + + + 1 + _DEBUG + + + $(BCB)\source\vcl + + + + + 0 + + + + + + + 0 + + + 0 + 0 + 0 + + + 1 + 1 + 1 + + + False + True + True + False + + + Embarcadero C++Builder Office 2000 Servers Package + Embarcadero C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + x502_example.cpp + + + + True + False + + + 12 + + + +
diff --git a/SDK/examples/CppBuilder/x502_general/x502_example.cpp b/SDK/examples/CppBuilder/x502_general/x502_example.cpp new file mode 100644 index 0000000..ebc28ec --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/x502_example.cpp @@ -0,0 +1,40 @@ +//--------------------------------------------------------------------------- + +#include +#pragma hdrstop +//--------------------------------------------------------------------------- + + + + + + + +USEFORM("unit.cpp", Form1); +//--------------------------------------------------------------------------- +WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) +{ + try + { + Application->Initialize(); + Application->CreateForm(__classid(TForm1), &Form1); + Application->Run(); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + catch (...) + { + try + { + throw Exception(""); + } + catch (Exception &exception) + { + Application->ShowException(&exception); + } + } + return 0; +} +//--------------------------------------------------------------------------- diff --git a/SDK/examples/CppBuilder/x502_general/x502_example.res b/SDK/examples/CppBuilder/x502_general/x502_example.res new file mode 100644 index 0000000..7b0f1a2 Binary files /dev/null and b/SDK/examples/CppBuilder/x502_general/x502_example.res differ diff --git a/SDK/examples/CppBuilder/x502_general/x502_thread.cpp b/SDK/examples/CppBuilder/x502_general/x502_thread.cpp new file mode 100644 index 0000000..c017c25 --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/x502_thread.cpp @@ -0,0 +1,100 @@ +//--------------------------------------------------------------------------- + + +#pragma hdrstop + +#include "x502_thread.h" + + +//--------------------------------------------------------------------------- + +#pragma package(smart_init) + +#define RECV_BUF_SIZE 8*1024*1024 +#define RECV_TOUT 250 + + + __fastcall X502_ProcessThread::X502_ProcessThread(bool CreateSuspended) + : TThread(CreateSuspended), stop(false), err (X502_ERR_OK) { + + } + +/* . + Syncronize, + VCL */ +void __fastcall X502_ProcessThread::updateData() { + uint32_t lch_cnt; + err = X502_GetLChannelCount(hnd, &lch_cnt); + if (err == X502_ERR_OK) { + /* */ + for (uint32_t i=0; (i < lch_cnt) && (i < adcSize); i++) + lchResEdits[(firstLch + i)%lch_cnt]->Text = FloatToStrF(adcData[i], ffFixed, 4, 8); + + /* , + */ + if (dinSize) { + dinResEdit->Text = IntToHex((int)dinData[0]&0x3FFFF, 5); + } else { + dinResEdit->Text = ""; + } + } +} + + void __fastcall X502_ProcessThread::Execute() { + /* */ + uint32_t *rcv_buf = new uint32_t[RECV_BUF_SIZE]; + dinData = new uint32_t[RECV_BUF_SIZE]; + adcData = new double[RECV_BUF_SIZE]; + + + if (!rcv_buf || !dinData || !adcData) { + err = X502_ERR_MEMORY_ALLOC; + } else { + /* */ + err = X502_StreamsStart(hnd); + if (err == X502_ERR_OK) { + /* + */ + while (!stop && (err == X502_ERR_OK)) { + /* */ + int32_t rcv_size = X502_Recv(hnd, rcv_buf, RECV_BUF_SIZE, RECV_TOUT); + /* ... */ + if (rcv_size < 0) { + err = rcv_size; + } else if (rcv_size>0) { + /* - */ + dinSize=RECV_BUF_SIZE; + adcSize=RECV_BUF_SIZE; + /* . , + , + */ + err = X502_GetNextExpectedLchNum(hnd, &firstLch); + if (err == X502_ERR_OK) { + /* + */ + err = X502_ProcessData(hnd, rcv_buf, rcv_size, L502_PROC_FLAGS_VOLT, + adcData, &adcSize, dinData, &dinSize); + } + + if (err == X502_ERR_OK) { + /* */ + Synchronize(updateData); + } + } + } + + /* . + ( ) + */ + int32_t stop_err = X502_StreamsStop(hnd); + if (err == X502_ERR_OK) + err = stop_err; + } + } + + + /* */ + delete rcv_buf; + delete dinData; + delete adcData; + } diff --git a/SDK/examples/CppBuilder/x502_general/x502_thread.h b/SDK/examples/CppBuilder/x502_general/x502_thread.h new file mode 100644 index 0000000..07e89ab --- /dev/null +++ b/SDK/examples/CppBuilder/x502_general/x502_thread.h @@ -0,0 +1,41 @@ +//--------------------------------------------------------------------------- + +#ifndef X502_THREAD_H +#define X502_THREAD_H + + +#include "l502api.h" +#include "e502api.h" + +#include + + +class X502_ProcessThread : public TThread { + +protected: + void __fastcall Execute(); + +public: + bool stop; // ( ) + int err; // + + t_x502_hnd hnd; // + TEdit* lchResEdits[X502_LTABLE_MAX_CH_CNT]; + TEdit* dinResEdit; + + __fastcall X502_ProcessThread(bool CreateSuspended); + +private: + void __fastcall updateData() ; + double* adcData; + uint32_t firstLch; /* */ + uint32_t adcSize; + uint32_t* dinData; + uint32_t dinSize; + +}; + + + +//--------------------------------------------------------------------------- +#endif diff --git a/SDK/examples/Delphi/x502_general/MainUnit.dfm b/SDK/examples/Delphi/x502_general/MainUnit.dfm new file mode 100644 index 0000000..ac14a9a --- /dev/null +++ b/SDK/examples/Delphi/x502_general/MainUnit.dfm @@ -0,0 +1,681 @@ +object MainForm: TMainForm + Left = 630 + Top = 162 + Width = 585 + Height = 774 + Caption = 'X502 Example' + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + OnClose = FormClose + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object btnRefreshDeviceList: TButton + Left = 8 + Top = 8 + Width = 217 + Height = 25 + Caption = #1054#1073#1085#1086#1074#1080#1090#1100' '#1089#1087#1080#1089#1086#1082' '#1091#1089#1090#1088#1086#1081#1089#1090#1074 + TabOrder = 0 + OnClick = btnRefreshDeviceListClick + end + object cbbDevList: TComboBox + Left = 256 + Top = 8 + Width = 241 + Height = 21 + ItemHeight = 13 + TabOrder = 1 + end + object btnOpen: TButton + Left = 8 + Top = 48 + Width = 217 + Height = 25 + Caption = #1054#1090#1082#1088#1099#1090#1100' '#1091#1089#1090#1088#1086#1081#1089#1090#1074#1086 + TabOrder = 2 + OnClick = btnOpenClick + end + object grpDevInfo: TGroupBox + Left = 256 + Top = 40 + Width = 241 + Height = 169 + Caption = #1048#1085#1092#1086#1088#1084#1072#1094#1080#1103' '#1086' '#1084#1086#1076#1091#1083#1077 + TabOrder = 3 + object lbl1: TLabel + Left = 104 + Top = 96 + Width = 119 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' '#1055#1051#1048#1057 + end + object lbl2: TLabel + Left = 104 + Top = 120 + Width = 116 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' PLDA' + end + object lbl11: TLabel + Left = 104 + Top = 144 + Width = 113 + Height = 13 + Caption = #1042#1077#1088#1089#1080#1103' '#1087#1088#1086#1096#1080#1074#1082#1080' ARM' + end + object chkDacPresent: TCheckBox + Left = 8 + Top = 24 + Width = 97 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1062#1040#1055 + Enabled = False + TabOrder = 0 + end + object chkGalPresent: TCheckBox + Left = 8 + Top = 40 + Width = 177 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1075#1072#1083#1100#1074#1072#1085#1086#1088#1072#1079#1074#1103#1079#1082#1080 + Enabled = False + TabOrder = 1 + end + object chkDspPresent: TCheckBox + Left = 8 + Top = 56 + Width = 209 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1080#1075#1085#1072#1083#1100#1085#1086#1075#1086' '#1087#1088#1086#1094#1077#1089#1089#1086#1088#1072 + Enabled = False + TabOrder = 2 + end + object edtFpgaVer: TEdit + Left = 8 + Top = 96 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 3 + end + object edtPldaVer: TEdit + Left = 8 + Top = 120 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 4 + end + object chkEthPresent: TCheckBox + Left = 8 + Top = 72 + Width = 209 + Height = 17 + Caption = #1053#1072#1083#1080#1095#1080#1077' '#1089#1077#1090#1077#1074#1086#1075#1086' '#1080#1085#1090#1077#1088#1092#1077#1081#1089#1072 + Enabled = False + TabOrder = 5 + end + object edtMcuVer: TEdit + Left = 8 + Top = 144 + Width = 89 + Height = 21 + ReadOnly = True + TabOrder = 6 + end + end + object btnAsyncDigIn: TButton + Left = 8 + Top = 560 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1094#1080#1092#1088#1086#1099#1093' '#1083#1080#1085#1080#1081 + TabOrder = 4 + OnClick = btnAsyncDigInClick + end + object edtAsyncDigIn: TEdit + Left = 248 + Top = 560 + Width = 121 + Height = 21 + Enabled = False + TabOrder = 5 + Text = '0x0000' + end + object btnAsyncDigOut: TButton + Left = 8 + Top = 592 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1094#1080#1092#1088#1086#1074#1099#1093' '#1083#1080#1085#1080#1081 + TabOrder = 6 + OnClick = btnAsyncDigOutClick + end + object edtAsyncDigOut: TEdit + Left = 248 + Top = 592 + Width = 121 + Height = 21 + TabOrder = 7 + Text = '0x0000' + end + object grp1: TGroupBox + Left = 8 + Top = 224 + Width = 513 + Height = 65 + Caption = #1063#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + TabOrder = 8 + object lbl3: TLabel + Left = 16 + Top = 20 + Width = 139 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093' ('#1043#1094')' + end + object lbl4: TLabel + Left = 168 + Top = 20 + Width = 113 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1085#1072' '#1082#1072#1085#1072#1083' ('#1043#1094')' + end + object lbl5: TLabel + Left = 296 + Top = 20 + Width = 166 + Height = 13 + Caption = #1063#1072#1089#1090#1086#1090#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072' ('#1043#1094')' + end + object btnSetAdcFreq: TButton + Left = 432 + Top = 32 + Width = 73 + Height = 25 + Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100 + TabOrder = 0 + OnClick = btnSetAdcFreqClick + end + object edtAdcFreq: TEdit + Left = 16 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 1 + Text = '2000000' + end + object edtAdcFreqLch: TEdit + Left = 176 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 2 + Text = '2000000' + end + object edtDinFreq: TEdit + Left = 296 + Top = 36 + Width = 105 + Height = 21 + TabOrder = 3 + Text = '2000000' + end + end + object grp2: TGroupBox + Left = 8 + Top = 368 + Width = 513 + Height = 153 + Caption = #1050#1072#1085#1072#1083#1099 + TabOrder = 9 + object lbl6: TLabel + Left = 8 + Top = 40 + Width = 31 + Height = 13 + Caption = #1050#1072#1085#1072#1083 + end + object lbl7: TLabel + Left = 64 + Top = 40 + Width = 49 + Height = 13 + Caption = #1044#1080#1072#1087#1072#1079#1086#1085 + end + object lbl8: TLabel + Left = 152 + Top = 40 + Width = 88 + Height = 13 + Caption = #1056#1077#1078#1080#1084' '#1080#1079#1084#1077#1088#1077#1085#1080#1103 + end + object lbl9: TLabel + Left = 336 + Top = 40 + Width = 53 + Height = 13 + Caption = #1056#1077#1079#1091#1083#1100#1090#1072#1090 + end + object lbl10: TLabel + Left = 16 + Top = 16 + Width = 166 + Height = 13 + Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1083#1086#1075#1080#1095#1077#1089#1082#1080#1093' '#1082#1072#1085#1072#1083#1086#1074 + end + object cbbLCh1_Channel: TComboBox + Left = 8 + Top = 56 + Width = 41 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 0 + Text = '1' + Items.Strings = ( + '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') + end + object cbbLCh1_Range: TComboBox + Left = 64 + Top = 56 + Width = 57 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 1 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh1_Mode: TComboBox + Left = 136 + Top = 56 + Width = 169 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 2 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh1_Result: TEdit + Left = 328 + Top = 56 + Width = 121 + Height = 21 + TabOrder = 3 + end + object cbbLCh2_Channel: TComboBox + Left = 8 + Top = 80 + Width = 41 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 4 + Text = '2' + Items.Strings = ( + '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') + end + object cbbLCh2_Range: TComboBox + Left = 64 + Top = 80 + Width = 57 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 5 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh2_Mode: TComboBox + Left = 136 + Top = 80 + Width = 169 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 6 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh2_Result: TEdit + Left = 328 + Top = 80 + Width = 121 + Height = 21 + TabOrder = 7 + end + object cbbLCh3_Channel: TComboBox + Left = 8 + Top = 104 + Width = 41 + Height = 21 + ItemHeight = 13 + ItemIndex = 2 + TabOrder = 8 + Text = '3' + Items.Strings = ( + '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') + end + object cbbLCh3_Range: TComboBox + Left = 64 + Top = 104 + Width = 57 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 9 + Text = '10 '#1042 + Items.Strings = ( + '10 '#1042 + '5 '#1042 + '2 '#1042 + '1 '#1042 + '0.5 '#1042 + '0.2 '#1042) + end + object cbbLCh3_Mode: TComboBox + Left = 136 + Top = 104 + Width = 169 + Height = 21 + ItemHeight = 13 + ItemIndex = 1 + TabOrder = 10 + Text = #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + Items.Strings = ( + #1057' '#1086#1073#1097#1077#1081' '#1079#1077#1084#1083#1077#1081 + #1044#1080#1092#1092#1077#1088#1077#1085#1094#1080#1072#1083#1100#1085#1099#1081 + #1048#1079#1084#1077#1088#1077#1085#1080#1077' '#1085#1091#1083#1103) + end + object edtLCh3_Result: TEdit + Left = 328 + Top = 104 + Width = 121 + Height = 21 + TabOrder = 11 + end + object chkSyncDin: TCheckBox + Left = 120 + Top = 128 + Width = 185 + Height = 17 + Caption = #1056#1072#1079#1088#1072#1096#1077#1085#1080#1077' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072 + TabOrder = 12 + OnClick = chkSyncDinClick + end + object edtDin_Result: TEdit + Left = 328 + Top = 128 + Width = 121 + Height = 21 + TabOrder = 13 + end + object cbbLChCnt: TComboBox + Left = 192 + Top = 16 + Width = 73 + Height = 21 + ItemHeight = 13 + ItemIndex = 2 + TabOrder = 14 + Text = '3' + Items.Strings = ( + '1' + '2' + '3') + end + end + object btnAsyncAdcFrame: TButton + Left = 8 + Top = 528 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1074#1086#1076' '#1082#1072#1076#1088#1072' '#1040#1062#1055 + TabOrder = 10 + OnClick = btnAsyncAdcFrameClick + end + object btnStop: TButton + Left = 8 + Top = 112 + Width = 217 + Height = 25 + Caption = #1054#1089#1090#1072#1085#1086#1074' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + Enabled = False + TabOrder = 11 + OnClick = btnStopClick + end + object btnStart: TButton + Left = 8 + Top = 80 + Width = 217 + Height = 25 + Caption = #1047#1072#1087#1091#1089#1082' '#1089#1073#1086#1088#1072' '#1076#1072#1085#1085#1099#1093 + TabOrder = 12 + OnClick = btnStartClick + end + object btnAsyncDac1: TButton + Left = 8 + Top = 624 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'1 ('#1042#1086#1083#1100#1090#1099')' + TabOrder = 13 + OnClick = btnAsyncDac1Click + end + object edtAsyncDac1: TEdit + Left = 248 + Top = 624 + Width = 81 + Height = 21 + TabOrder = 14 + Text = '5' + end + object edtAsyncDac2: TEdit + Left = 248 + Top = 656 + Width = 81 + Height = 21 + TabOrder = 15 + Text = '5' + end + object btnAsyncDac2: TButton + Left = 8 + Top = 656 + Width = 217 + Height = 25 + Caption = #1040#1089#1080#1085#1093#1088#1086#1085#1085#1099#1081' '#1074#1099#1074#1086#1076' '#1085#1072' '#1062#1040#1055'2 ('#1042#1086#1083#1100#1090#1099')' + TabOrder = 16 + OnClick = btnAsyncDac2Click + end + object GroupBox4: TGroupBox + Left = 8 + Top = 295 + Width = 513 + Height = 65 + Caption = #1057#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1103 + TabOrder = 17 + object Label10: TLabel + Left = 16 + Top = 20 + Width = 173 + Height = 13 + Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1095#1072#1089#1090#1086#1090#1099' '#1089#1080#1085#1093#1088#1086#1085#1080#1079#1072#1094#1080#1080 + end + object Label11: TLabel + Left = 264 + Top = 20 + Width = 238 + Height = 13 + Caption = #1048#1089#1090#1086#1095#1085#1080#1082' '#1079#1072#1087#1091#1089#1082#1072' '#1089#1080#1085#1093#1088#1086#1085#1085#1086#1075#1086' '#1074#1074#1086#1076#1072'/'#1074#1099#1074#1086#1076#1072 + end + object cbbSyncMode: TComboBox + Left = 16 + Top = 38 + Width = 169 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 0 + Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + Items.Strings = ( + #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + #1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072 + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2') + end + object cbbSyncStartMode: TComboBox + Left = 264 + Top = 38 + Width = 169 + Height = 21 + ItemHeight = 13 + ItemIndex = 0 + TabOrder = 1 + Text = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + Items.Strings = ( + #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081 + #1054#1090' '#1074#1085#1077#1096#1085#1077#1075#1086' '#1084#1072#1089#1090#1077#1088#1072 + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1060#1088#1086#1085#1090' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN1' + #1057#1087#1072#1076' '#1089#1080#1075#1085#1072#1083#1072' DI_SYN2') + end + end + object btnOpenByIP: TButton + Left = 8 + Top = 160 + Width = 217 + Height = 25 + Caption = #1059#1089#1090#1072#1085#1086#1074#1080#1090#1100' '#1089#1086#1077#1076#1080#1085#1077#1085#1080#1077' '#1087#1086' IP-'#1072#1076#1088#1077#1089#1091 + TabOrder = 18 + OnClick = btnOpenByIPClick + end + object edtIpAddr: TEdit + Left = 8 + Top = 192 + Width = 217 + Height = 21 + TabOrder = 19 + Text = '192.168.0.1' + end +end diff --git a/SDK/examples/Delphi/x502_general/MainUnit.pas b/SDK/examples/Delphi/x502_general/MainUnit.pas new file mode 100644 index 0000000..bee1a8f --- /dev/null +++ b/SDK/examples/Delphi/x502_general/MainUnit.pas @@ -0,0 +1,712 @@ +unit MainUnit; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, + l502api, x502api, e502api, X502_ProcessThread; + +type + TMainForm = class(TForm) + btnRefreshDeviceList: TButton; + cbbDevList: TComboBox; + btnOpen: TButton; + grpDevInfo: TGroupBox; + chkDacPresent: TCheckBox; + chkGalPresent: TCheckBox; + chkDspPresent: TCheckBox; + edtFpgaVer: TEdit; + edtPldaVer: TEdit; + lbl1: TLabel; + lbl2: TLabel; + btnAsyncDigIn: TButton; + edtAsyncDigIn: TEdit; + btnAsyncDigOut: TButton; + edtAsyncDigOut: TEdit; + grp1: TGroupBox; + lbl3: TLabel; + lbl4: TLabel; + lbl5: TLabel; + btnSetAdcFreq: TButton; + edtAdcFreq: TEdit; + edtAdcFreqLch: TEdit; + edtDinFreq: TEdit; + grp2: TGroupBox; + lbl6: TLabel; + lbl7: TLabel; + lbl8: TLabel; + lbl9: TLabel; + lbl10: TLabel; + cbbLCh1_Channel: TComboBox; + cbbLCh1_Range: TComboBox; + cbbLCh1_Mode: TComboBox; + edtLCh1_Result: TEdit; + cbbLCh2_Channel: TComboBox; + cbbLCh2_Range: TComboBox; + cbbLCh2_Mode: TComboBox; + edtLCh2_Result: TEdit; + cbbLCh3_Channel: TComboBox; + cbbLCh3_Range: TComboBox; + cbbLCh3_Mode: TComboBox; + edtLCh3_Result: TEdit; + chkSyncDin: TCheckBox; + edtDin_Result: TEdit; + cbbLChCnt: TComboBox; + btnAsyncAdcFrame: TButton; + btnStop: TButton; + btnStart: TButton; + btnAsyncDac1: TButton; + edtAsyncDac1: TEdit; + edtAsyncDac2: TEdit; + btnAsyncDac2: TButton; + GroupBox4: TGroupBox; + Label10: TLabel; + Label11: TLabel; + cbbSyncMode: TComboBox; + cbbSyncStartMode: TComboBox; + chkEthPresent: TCheckBox; + edtMcuVer: TEdit; + lbl11: TLabel; + btnOpenByIP: TButton; + edtIpAddr: TEdit; + procedure btnRefreshDeviceListClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure btnOpenClick(Sender: TObject); + procedure btnAsyncDigInClick(Sender: TObject); + procedure btnAsyncDigOutClick(Sender: TObject); + procedure btnSetAdcFreqClick(Sender: TObject); + procedure btnAsyncAdcFrameClick(Sender: TObject); + procedure btnStartClick(Sender: TObject); + procedure btnAsyncDac1Click(Sender: TObject); + procedure btnAsyncDac2Click(Sender: TObject); + procedure btnStopClick(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure chkSyncDinClick(Sender: TObject); + procedure btnOpenByIPClick(Sender: TObject); + private + hnd : t_x502_hnd; // + devrecList : array of t_x502_devrec; + threadRunning : Boolean; //, + thread: TX502_ProcessThread; // + + procedure updateControls(); + procedure freeDevList(); + procedure refreshDeviceList(); + procedure showDevInfo(); + procedure closeDevice(); + procedure OnThreadTerminate(par : TObject); + function setAdcFreq() : LongInt; + function setupParams() : LongInt; + function setSyncDinStream() : LongInt; + function parseIpAddr(addr : string) : LongWord; + + { Private declarations } + public + { Public declarations } + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +procedure TMainForm.updateControls(); +begin + // + btnRefreshDeviceList.Enabled := hnd=nil; + cbbDevList.Enabled:= hnd=nil; + + if hnd = nil then + btnOpen.Caption := ' ' + else + btnOpen.Caption := ' '; + btnOpen.Enabled := (hnd<>nil) or (cbbDevList.ItemIndex >= 0); + btnOpenByIP.Enabled := hnd=nil; + edtIpAddr.Enabled := hnd=nil; + + chkSyncDin.Enabled := (hnd<>nil) and not threadRunning; + + btnStart.Enabled := (hnd<>nil) and not threadRunning; + btnStop.Enabled := (hnd<>nil) and threadRunning; + + btnSetAdcFreq.Enabled := (hnd<>nil) and not threadRunning; + + btnAsyncDigOut.Enabled := (hnd<>nil); + btnAsyncDigIn.Enabled := (hnd<>nil); + btnAsyncDac1.Enabled := (hnd<>nil) and chkDacPresent.Checked; + btnAsyncDac2.Enabled := (hnd<>nil) and chkDacPresent.Checked; + btnAsyncAdcFrame.Enabled := (hnd<>nil) and not threadRunning; +end; + +procedure TMainForm.freeDevList(); +begin + if Length(devrecList) <> 0 then + begin + X502_FreeDevRecordList(devrecList, Length(devrecList)); + SetLength(devrecList, 0); + end; + cbbDevList.Items.Clear; +end; + + + +{ } +procedure TMainForm.refreshDeviceList(); +var + // , + res,i, old_index : LongInt; + devcnt : LongWord; + pci_devrecs, usb_devrecs : array of t_x502_devrec; +begin + old_index := cbbDevList.ItemIndex; + + freeDevList; + + L502_GetDevRecordsList(pci_devrecs, 0, devcnt); + if devcnt > 0 then + begin + // , - + SetLength(pci_devrecs, devcnt); + // + res := L502_GetDevRecordsList(pci_devrecs, 0); + if res > 0 then + SetLength(pci_devrecs, res) + else + SetLength(pci_devrecs, 0); + end; + + E502_UsbGetDevRecordsList(usb_devrecs, 0, devcnt); + if devcnt > 0 then + begin + // , - + SetLength(usb_devrecs, devcnt); + // + res := E502_UsbGetDevRecordsList(usb_devrecs, 0); + if res > 0 then + SetLength(usb_devrecs, res) + else + SetLength(usb_devrecs, 0); + end; + + + // devrecList + SetLength(devrecList, Length(pci_devrecs) + Length(usb_devrecs)); + if Length(devrecList) > 0 then + begin + for i:=0 to Length(pci_devrecs)-1 do + devrecList[i] := pci_devrecs[i]; + for i:=0 to Length(usb_devrecs)-1 do + devrecList[i+Length(pci_devrecs)] := usb_devrecs[i]; + + + // ComboBox' + for i:=0 to Length(devrecList)-1 do + cbbDevList.Items.Add(AnsiString(devrecList[i].devname) + ', ' + AnsiString(devrecList[i].serial)); + + // - + if (old_index >= 0) and (old_index < Length(pci_devrecs)) then + cbbDevList.ItemIndex := old_index + else + cbbDevList.ItemIndex := 0; + end; + + + updateControls; +end; + + + +// GUI +function TMainForm.setupParams() : Integer; +var + err : Integer; + lch_cnt : LongWord; +const + { ComboBox } + mode_tbl: array[0..2] of LongWord = (X502_LCH_MODE_COMM, X502_LCH_MODE_DIFF, X502_LCH_MODE_ZERO); + { ComboBox } + range_tbl: array[0..5] of LongWord = (X502_ADC_RANGE_10, X502_ADC_RANGE_5, X502_ADC_RANGE_2, + X502_ADC_RANGE_1, X502_ADC_RANGE_05, X502_ADC_RANGE_02); + { ComboBox } + f_sync_tbl: array[0..5] of LongWord = (X502_SYNC_INTERNAL, X502_SYNC_EXTERNAL_MASTER, + X502_SYNC_DI_SYN1_RISE, X502_SYNC_DI_SYN2_RISE, + X502_SYNC_DI_SYN1_FALL, X502_SYNC_DI_SYN2_FALL); +begin + lch_cnt := cbbLChCnt.ItemIndex + 1; + // - + err := X502_SetLChannelCount(hnd, lch_cnt); + + // + if err = X502_ERR_OK then + begin + err := X502_SetLChannel(hnd,0, cbbLCh1_Channel.ItemIndex, + mode_tbl[cbbLCh1_Mode.ItemIndex], range_tbl[cbbLCh1_Range.ItemIndex],0); + end; + if (err = X502_ERR_OK) and (lch_cnt>=2) then + begin + err := X502_SetLChannel(hnd,1, cbbLCh2_Channel.ItemIndex, + mode_tbl[cbbLCh2_Mode.ItemIndex], range_tbl[cbbLCh2_Range.ItemIndex],0); + end; + if (err = X502_ERR_OK) and (lch_cnt>=3) then + begin + err := X502_SetLChannel(hnd,2, cbbLCh3_Channel.ItemIndex, + mode_tbl[cbbLCh3_Mode.ItemIndex], range_tbl[cbbLCh3_Range.ItemIndex],0); + end; + + // + if err = X502_ERR_OK then + err := X502_SetSyncMode(hnd, f_sync_tbl[cbbSyncMode.ItemIndex]); + if err = X502_ERR_OK then + err := X502_SetSyncStartMode(hnd, f_sync_tbl[cbbSyncStartMode.ItemIndex]); + + // + if err = X502_ERR_OK then + err := setAdcFreq(); + + // + if err = X502_ERR_OK then + err := X502_Configure(hnd, 0); + + setupParams:= err; +end; + + + +procedure TMainForm.closeDevice(); +begin + if hnd<>nil then + begin + // - + if threadRunning then + begin + thread.stop:=True; + thread.WaitFor; + end; + // + X502_Close(hnd); + // + X502_Free(hnd); + hnd := nil; + end; +end; + +// +// , +// +function TMainForm.setAdcFreq() : Integer; +var f_acq, f_lch, f_din: Double; + err : Integer; +begin + f_acq := StrToFloat(edtAdcFreq.Text); + f_lch := StrToFloat(edtAdcFreqLch.Text); + f_din := StrToFloat(edtDinFreq.Text); + // . + err := X502_SetAdcFreq(hnd, f_acq, f_lch); + if err = X502_ERR_OK then + begin + // , + // + edtAdcFreq.Text := FloatToStr(f_acq); + edtAdcFreqLch.Text := FloatToStr(f_lch); + // + err := X502_SetDinFreq(hnd, f_din); + if err = X502_ERR_OK then + edtDinFreq.Text := FloatToStr(f_din); + end; + setAdcFreq:= err; +end; + +function TMainForm.setSyncDinStream : LongInt; +var err : LongInt; +begin + { + } + if chkSyncDin.Checked then + err := X502_StreamsEnable(hnd, X502_STREAM_DIN) + else + err := X502_StreamsDisable(hnd, X502_STREAM_DIN); + + setSyncDinStream:= err; +end; + +procedure TMainForm.btnRefreshDeviceListClick(Sender: TObject); +begin + refreshDeviceList; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + hnd := nil; + refreshDeviceList; +end; + + +procedure TMainForm.showDevInfo(); +var + err : LongInt; + info : t_x502_info; +begin + // + err := X502_GetDevInfo(hnd,info); + if err <> X502_ERR_OK then + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + // + X502_Close(hnd); + X502_Free(hnd); + hnd := nil; + end + else + begin + // + chkDacPresent.Checked := (info.devflags and X502_DEVFLAGS_DAC_PRESENT) <> 0; + chkGalPresent.Checked := (info.devflags and X502_DEVFLAGS_GAL_PRESENT) <> 0; + chkDspPresent.Checked := (info.devflags and X502_DEVFLAGS_BF_PRESENT) <> 0; + chkEthPresent.Checked := (info.devflags and X502_DEVFLAGS_IFACE_SUPPORT_ETH) <> 0; + + edtPldaVer.Text := IntToStr(info.plda_ver); + edtFpgaVer.Text := IntToStr((info.fpga_ver shr 8) and $FF) + '.' + + IntToStr(info.fpga_ver and $FF); + if info.mcu_firmware_ver <> 0 then + begin + edtMcuVer.Text := IntToStr((info.mcu_firmware_ver shr 24) and $FF) + '.' + + IntToStr((info.mcu_firmware_ver shr 16) and $FF) + '.' + + IntToStr((info.mcu_firmware_ver shr 8) and $FF) + '.' + + IntToStr((info.mcu_firmware_ver) and $FF); + end + else + begin + edtMcuVer.Text := ''; + end; + end; +end; + +procedure TMainForm.btnOpenClick(Sender: TObject); +var + idx : integer; + err : LongInt; +begin + if hnd=nil then + begin + // + idx := cbbDevList.ItemIndex; + if (idx >= 0) and (idx < Length(devrecList)) then + begin + // + hnd := X502_Create(); + if hnd=nil then + MessageDlg(' ',mtError, [mbOK], 0) + else + begin + // , + err := X502_OpenByDevRecord(hnd, devrecList[idx]); + if err <> X502_ERR_OK then + begin + // => + MessageDlg(' : ' + X502_GetErrorString(err),mtError, [mbOK], 0); + X502_Free(hnd); + hnd := nil; + end + else + begin + showDevInfo; + end; + end; + end; + end + else + begin + // - + closeDevice; + end; + + updateControls; +end; + +{ ip- DWORD } +function TMainForm.parseIpAddr(addr : string) : LongWord; +var + S: TStrings; +begin + S := TStringList.Create; + S.Delimiter := '.'; + S.DelimitedText := addr; + + // do preeliminary check. The IP4 Address string must consists of 4 parts. Less or more than that would be invalid values + if S.Count<>4 then + begin + S.Free; + raise Exception.Create('Invalid IP4 Address string'); + end; + + Result := (StrToInt(S[0]) shl 24) + (StrToInt(S[1]) shl 16) + + (StrToInt(S[2]) shl 8) + (StrToInt(S[3])); + + S.Free; +end; + +procedure TMainForm.btnOpenByIPClick(Sender: TObject); +var + devrec : t_x502_devrec; + err : LongInt; +begin + // , + err := E502_MakeDevRecordByIpAddr(devrec, parseIpAddr(edtIpAddr.Text), 0, 5000); + if err <> X502_ERR_OK then + MessageDlg(' : ' + X502_GetErrorString(err),mtError, [mbOK], 0) + else + begin + // + hnd := X502_Create; + if hnd=nil then + MessageDlg(' ',mtError, [mbOK], 0) + else + begin + // + err := X502_OpenByDevRecord(hnd, devrec); + if err <> X502_ERR_OK then + begin + // => + MessageDlg(' : ' + X502_GetErrorString(err),mtError, [mbOK], 0); + X502_Free(hnd); + hnd := nil; + end + else + begin + showDevInfo; + end; + end; + + X502_FreeDevRecordList(devrec); + end; + updateControls(); +end; + +procedure TMainForm.btnAsyncDigInClick(Sender: TObject); +var din: Cardinal; +var err: Integer; +begin + if hnd<>nil then + begin + err := X502_AsyncInDig(hnd, din); + if err<>X502_ERR_OK then + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0) + else + edtAsyncDigIn.Text := IntToHex(din and $3FFFF, 5); + end; +end; + +procedure TMainForm.btnAsyncDigOutClick(Sender: TObject); +var dout: Cardinal; +var err: Integer; +begin + if hnd<>nil then + begin + dout:= StrToInt(edtAsyncDigOut.Text); + err := X502_AsyncOutDig(hnd, dout, 0); + if err <> X502_ERR_OK then + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0) + end; +end; + +procedure TMainForm.btnSetAdcFreqClick(Sender: TObject); +var err : Integer; +begin + { - , + } + err := X502_SetLChannelCount(hnd, cbbLChCnt.ItemIndex+1); + if err = X502_ERR_OK then + err := setAdcFreq(); + if err <> X502_ERR_OK then + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0) +end; + +procedure TMainForm.btnAsyncAdcFrameClick(Sender: TObject); +var err : Integer; + adc_data : array of double; + lch_cnt : LongWord; + +begin + if hnd <> nil then + begin + // + err := setupParams(); + if err = X502_ERR_OK then + err := X502_GetLChannelCount(hnd, lch_cnt); + + if err = X502_ERR_OK then + begin + // + SetLength(adc_data, lch_cnt); + err := X502_AsyncGetAdcFrame(hnd, X502_PROC_FLAGS_VOLT, 1000, adc_data); + + if err = X502_ERR_OK then + begin + // + edtLCh1_Result.Text := FloatToStrF(adc_data[0], ffFixed, 4, 8); + if lch_cnt >= 2 then + edtLCh2_Result.Text := FloatToStrF(adc_data[1], ffFixed, 4, 8) + else + edtLCh2_Result.Text := ''; + + if lch_cnt >= 3 then + edtLCh3_Result.Text := FloatToStrF(adc_data[2], ffFixed, 4, 8) + else + edtLCh3_Result.Text := ''; + + end + else + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end + end + else + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end; + end; +end; + +procedure TMainForm.btnStartClick(Sender: TObject); +var + err : LongInt; +begin + // + err := setupParams(); + // + if err = X502_ERR_OK then + err := X502_StreamsEnable(hnd, X502_STREAM_ADC); + + // + if err = X502_ERR_OK then + err := setSyncDinStream(); + + if err <> X502_ERR_OK then + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end + else + begin + if thread <> nil then + begin + FreeAndNil(thread); + end; + + thread := TX502_ProcessThread.Create(True); + thread.hnd := hnd; + SetLength(thread.LChEdits, 3); + thread.LChEdits[0] := edtLCh1_Result; + thread.LChEdits[1] := edtLCh2_Result; + thread.LChEdits[2] := edtLCh3_Result; + thread.dinResEdit := edtDin_Result; + + edtLCh1_Result.Text:= ''; + edtLCh2_Result.Text:= ''; + edtLCh3_Result.Text:= ''; + edtDin_Result.Text:= ''; + { ( + , - + ) } + thread.OnTerminate := OnThreadTerminate; + thread.Resume; // Delphi 2010 Start + threadRunning := True; + + updateControls; + end; + +end; + +//, +// , thread_run +procedure TMainForm.OnThreadTerminate(par : TObject); +begin + if thread.err <> X502_ERR_OK then + begin + MessageDlg(' : ' + X502_GetErrorString(thread.err), + mtError, [mbOK], 0); + end; + + threadRunning := false; + updateControls(); +end; + +procedure TMainForm.btnAsyncDac1Click(Sender: TObject); +var + err : LongInt; + val : Double; +begin + if hnd<>nil then + begin + val := StrToFloat(edtAsyncDac1.Text);; + err := X502_AsyncOutDac(hnd, X502_DAC_CH1, val, X502_DAC_FLAGS_CALIBR or + X502_DAC_FLAGS_VOLT); + if err <> X502_ERR_OK then + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end; + end; +end; + +procedure TMainForm.btnAsyncDac2Click(Sender: TObject); +var + err : LongInt; + val : Double; +begin + if hnd<>nil then + begin + val := StrToFloat(edtAsyncDac2.Text);; + err := X502_AsyncOutDac(hnd, X502_DAC_CH2, val, X502_DAC_FLAGS_CALIBR or + X502_DAC_FLAGS_VOLT); + if err <> X502_ERR_OK then + begin + MessageDlg(' : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end; + end; +end; + +procedure TMainForm.btnStopClick(Sender: TObject); +begin + // + if threadRunning then + thread.stop:=True; + btnStop.Enabled:= False; +end; + +procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + closeDevice; + freeDevList; + if thread <> nil then + FreeAndNil(thread); +end; + +procedure TMainForm.chkSyncDinClick(Sender: TObject); +var err : LongInt; +begin + if hnd<>nil then + begin + err := setSyncDinStream(); + if err <> X502_ERR_OK then + begin + MessageDlg(' / : ' + X502_GetErrorString(err), + mtError, [mbOK], 0); + end; + end; +end; + + + + +end. diff --git a/SDK/examples/Delphi/x502_general/X502_ProcessThread.pas b/SDK/examples/Delphi/x502_general/X502_ProcessThread.pas new file mode 100644 index 0000000..88aff1c --- /dev/null +++ b/SDK/examples/Delphi/x502_general/X502_ProcessThread.pas @@ -0,0 +1,123 @@ +unit X502_ProcessThread; + +interface +uses Classes, Math, SyncObjs,StdCtrls,SysUtils, x502api; + const RECV_BUF_SIZE = 8*1024*1024; + const RECV_TOUT = 250; + +type TX502_ProcessThread = class(TThread) + public + LChEdits : array of TEdit; + dinResEdit : TEdit; + hnd: t_x502_hnd; // + + err : LongInt; // + stop : Boolean; // ( ) + + constructor Create(SuspendCreate : Boolean); + destructor Free(); + + private + { Private declarations } + adcData : array [0..RECV_BUF_SIZE-1] of double; + dinData : array [0..RECV_BUF_SIZE-1] of LongWord; + adcSize, dinSize, firstLch : LongWord; + + + procedure updateData; + protected + procedure Execute; override; + end; +implementation + + + constructor TX502_ProcessThread.Create(SuspendCreate : Boolean); + begin + Inherited Create(SuspendCreate); + stop:=False; + hnd:=Nil; + err:=X502_ERR_OK; + end; + + destructor TX502_ProcessThread.Free(); + begin + Inherited Free(); + end; + + { . + Syncronize, + VCL } + procedure TX502_ProcessThread.updateData; + var + lch_cnt, i : LongWord; + err : LongInt; + begin + err := X502_GetLChannelCount(hnd, lch_cnt); + if err=X502_ERR_OK then + begin + // + for i:=0 to Min(lch_cnt, adcSize) do + LChEdits[(firstLch + i) mod lch_cnt].Text := FloatToStrF(adcData[i], ffFixed, 4, 8); + + { , + } + if dinSize <> 0 then + dinResEdit.Text := IntToHex(dinData[0] and $3FFFF, 5) + else + dinResEdit.Text := ''; + + end; + end; + + procedure TX502_ProcessThread.Execute; + var + stoperr, rcv_size : LongInt; + rcv_buf : array of LongWord; + begin + setlength(rcv_buf, RECV_BUF_SIZE); + // + err:= X502_StreamsStart(hnd); + if err = X502_ERR_OK then + begin + { + } + while not stop and (err = X502_ERR_OK) do + begin + // + rcv_size := X502_Recv(hnd, rcv_buf, RECV_BUF_SIZE, RECV_TOUT); + // ... + if rcv_size < 0 then + err := rcv_size + else if rcv_size>0 then + begin + // - + dinSize:=RECV_BUF_SIZE; + adcSize:=RECV_BUF_SIZE; + { . , + , + } + err:=X502_GetNextExpectedLchNum(hnd, firstLch); + if err = X502_ERR_OK then + begin + { + } + err := X502_ProcessData(hnd, rcv_buf, rcv_size, X502_PROC_FLAGS_VOLT, + adcData, adcSize, dinData, dinSize); + if err = X502_ERR_OK then + begin + // + Synchronize(updateData); + end; + end; + end + end; + + { . + ( ) + } + stoperr:= X502_StreamsStop(hnd); + if err = X502_ERR_OK then + err:= stoperr; + end; + end; +end. diff --git a/SDK/examples/Delphi/x502_general/readme.txt b/SDK/examples/Delphi/x502_general/readme.txt new file mode 100644 index 0000000..bf11d9e --- /dev/null +++ b/SDK/examples/Delphi/x502_general/readme.txt @@ -0,0 +1,24 @@ + L502 E502 Delphi. + "Delphi 7" (x502_example.dpr) + "Embarcadero Delphi XE" (x502_example.dproj). + Win64, 64- . + + x502api.pas, l502api.pas e502api.pas, + SDK SDK_DIR/pas + + : + Delphi 7 - "Project->Options->Directories/Conditionals->Search path", + Delphi XE - "Project->Options->Delphi Compiler->Search path" + + + + L502 E502, + Delphi. + + "Borland C++ Builder" + , + / , . + + (TX502_ProcessThread), + . , + ( ). \ No newline at end of file diff --git a/SDK/examples/Delphi/x502_general/x502_example.dof b/SDK/examples/Delphi/x502_general/x502_example.dof new file mode 100644 index 0000000..68c8f70 --- /dev/null +++ b/SDK/examples/Delphi/x502_general/x502_example.dof @@ -0,0 +1,141 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=1 +UnsafeCode=1 +UnsafeCast=1 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir= +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=c:\Program Files (x86)\L-Card\lpcie\pas\ +Packages=vcl;rtl;dbrtl;inet;inetdb;dsnap;bdertl;vclx;vcldb;vcldbx;visualclx;visualdbclx;vclactnband;vclshlctrls;vclie;xmlrtl;inetdbbde;inetdbxpress;webdsnap;soaprtl;websnap;adortl;dbexpress;dsnapcon;dbxcds;ibxpress;teeui;teedb;tee;dss;indy;VclSmp;qrpt;teeqr;Rave50CLX;Rave50VCL;IntrawebDB_50_70;Intraweb_50_70;VclNewlyext +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir= +[Version Info] +IncludeVerInfo=1 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=1 +Item0=c:\Program Files (x86)\L-Card\lpcie\pas\ diff --git a/SDK/examples/Delphi/x502_general/x502_example.dpr b/SDK/examples/Delphi/x502_general/x502_example.dpr new file mode 100644 index 0000000..14f4ff4 --- /dev/null +++ b/SDK/examples/Delphi/x502_general/x502_example.dpr @@ -0,0 +1,14 @@ +program x502_example; + +uses + Forms, + MainUnit in 'MainUnit.pas' {MainForm}, + X502_ProcessThread in 'X502_ProcessThread.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; +end. diff --git a/SDK/examples/Delphi/x502_general/x502_example.dproj b/SDK/examples/Delphi/x502_general/x502_example.dproj new file mode 100644 index 0000000..339789f --- /dev/null +++ b/SDK/examples/Delphi/x502_general/x502_example.dproj @@ -0,0 +1,119 @@ + + + {7C3D1E6C-FE9D-4A33-89CC-FFA83DED1261} + x502_example.dpr + True + Debug + 3 + Application + VCL + 15.4 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + x502_example + false + vcl;rtl;dbrtl;inet;inetdb;dsnap;bdertl;vclx;vcldb;vcldbx;visualclx;visualdbclx;vclactnband;vclshlctrls;vclie;xmlrtl;inetdbbde;inetdbxpress;webdsnap;soaprtl;websnap;adortl;dbexpress;dsnapcon;dbxcds;ibxpress;teeui;teedb;tee;dss;indy;VclSmp;qrpt;teeqr;Rave50CLX;Rave50VCL;IntrawebDB_50_70;Intraweb_50_70;VclNewlyext;$(DCC_UsePackage) + 1 + false + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace) + 00400000 + false + 1033 + true + 1 + true + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0 + true + c:\Program Files (x86)\L-Card\lpcie\pas\;$(DCC_UnitSearchPath) + true + false + + + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + $(BDS)\bin\default_app.manifest + true + x502_example_Icon.ico + + + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + x502_example_Icon.ico + $(BDS)\bin\default_app.manifest + + + 0 + 0 + RELEASE;$(DCC_Define) + false + + + false + true + DEBUG;$(DCC_Define) + + + + MainSource + + +
MainForm
+
+ + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + + + + + x502_example.dpr + + + + True + True + + + 12 + + + +
diff --git a/SDK/examples/Delphi/x502_general/x502_example.res b/SDK/examples/Delphi/x502_general/x502_example.res new file mode 100644 index 0000000..53113d5 Binary files /dev/null and b/SDK/examples/Delphi/x502_general/x502_example.res differ diff --git a/SDK/examples/Delphi/x502_general/x502_example_Icon.ico b/SDK/examples/Delphi/x502_general/x502_example_Icon.ico new file mode 100644 index 0000000..cfd8992 Binary files /dev/null and b/SDK/examples/Delphi/x502_general/x502_example_Icon.ico differ diff --git a/SDK/examples/LabView/x502_recv/10.0/x502_err_sub.vi b/SDK/examples/LabView/x502_recv/10.0/x502_err_sub.vi new file mode 100644 index 0000000..f382317 Binary files /dev/null and b/SDK/examples/LabView/x502_recv/10.0/x502_err_sub.vi differ diff --git a/SDK/examples/LabView/x502_recv/10.0/x502_recv.vi b/SDK/examples/LabView/x502_recv/10.0/x502_recv.vi new file mode 100644 index 0000000..9f3a4e7 Binary files /dev/null and b/SDK/examples/LabView/x502_recv/10.0/x502_recv.vi differ diff --git a/SDK/examples/LabView/x502_recv/8.0/x502_err_sub.vi b/SDK/examples/LabView/x502_recv/8.0/x502_err_sub.vi new file mode 100644 index 0000000..435178e Binary files /dev/null and b/SDK/examples/LabView/x502_recv/8.0/x502_err_sub.vi differ diff --git a/SDK/examples/LabView/x502_recv/8.0/x502_recv.vi b/SDK/examples/LabView/x502_recv/8.0/x502_recv.vi new file mode 100644 index 0000000..bd3ee80 Binary files /dev/null and b/SDK/examples/LabView/x502_recv/8.0/x502_recv.vi differ diff --git a/SDK/examples/LabView/x502_recv/readme.txt b/SDK/examples/LabView/x502_recv/readme.txt new file mode 100644 index 0000000..09ee654 --- /dev/null +++ b/SDK/examples/LabView/x502_recv/readme.txt @@ -0,0 +1,9 @@ + DIN LabView L502 E502. + , PCIe USB . + Ethernet IP-. + . + + lpcieNet.dll, ( GAC), + x502api.dll, l502api.dll e502api.dll ( SDK) + + LabView 8 LabView 2010 ( LabView LabView 8) \ No newline at end of file diff --git a/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_err_sub.vi b/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_err_sub.vi new file mode 100644 index 0000000..66b6392 Binary files /dev/null and b/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_err_sub.vi differ diff --git a/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_recv_out_cycle.vi b/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_recv_out_cycle.vi new file mode 100644 index 0000000..4704602 Binary files /dev/null and b/SDK/examples/LabView/x502_recv_out_cycle/10.0/x502_recv_out_cycle.vi differ diff --git a/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_err_sub.vi b/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_err_sub.vi new file mode 100644 index 0000000..a13438f Binary files /dev/null and b/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_err_sub.vi differ diff --git a/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_recv_out_cycle.vi b/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_recv_out_cycle.vi new file mode 100644 index 0000000..3d597a8 Binary files /dev/null and b/SDK/examples/LabView/x502_recv_out_cycle/8.0/x502_recv_out_cycle.vi differ diff --git a/SDK/examples/LabView/x502_recv_out_cycle/readme.txt b/SDK/examples/LabView/x502_recv_out_cycle/readme.txt new file mode 100644 index 0000000..e28f0c5 --- /dev/null +++ b/SDK/examples/LabView/x502_recv_out_cycle/readme.txt @@ -0,0 +1,11 @@ + DIN + LabView L502 E502. + + , PCIe USB . + Ethernet IP-. + . + + lpcieNet.dll, ( GAC), + x502api.dll, l502api.dll e502api.dll ( SDK) + + LabView 8 LabView 2010 ( LabView LabView 8) \ No newline at end of file diff --git a/SDK/examples/c/e502_eth_svc_browse/CMakeLists.txt b/SDK/examples/c/e502_eth_svc_browse/CMakeLists.txt new file mode 100644 index 0000000..3dcdfdd --- /dev/null +++ b/SDK/examples/c/e502_eth_svc_browse/CMakeLists.txt @@ -0,0 +1,29 @@ +# cmake. +# cmake make- +# . +# +# , : +# +# cmake -DX502API_INCLUDE_DIR=< x502api> -DX502API_LIBRARIES_DIR=< x502api (.lib, .a .so)> -G < > < ( )> +# +# cmake +# +# / , +# -DX502API_INCLUDE_DIR -DX502API_LIBRARIES_DIR +# + +cmake_minimum_required(VERSION 2.8.12) + +set(PROJECT e502_eth_svc_browse) + +project(${PROJECT} C) + +set(SOURCES main.c) +set(HEADERS ) + +include_directories(${X502API_INCLUDE_DIR}) +link_directories(${X502API_LIBRARIES_DIR}) + +add_executable(${PROJECT} ${HEADERS} ${SOURCES}) + +target_link_libraries(${PROJECT} x502api e502api) diff --git a/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.sln b/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.sln new file mode 100644 index 0000000..dda89e1 --- /dev/null +++ b/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "e502_eth_svc_browse", "e502_eth_svc_browse.vcproj", "{D9460CE1-B571-4A69-A4C1-0676BF57EB04}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Debug|Win32.ActiveCfg = Debug|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Debug|Win32.Build.0 = Debug|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Release|Win32.ActiveCfg = Release|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.vcproj b/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.vcproj new file mode 100644 index 0000000..3e2a637 --- /dev/null +++ b/SDK/examples/c/e502_eth_svc_browse/e502_eth_svc_browse.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDK/examples/c/e502_eth_svc_browse/main.c b/SDK/examples/c/e502_eth_svc_browse/main.c new file mode 100644 index 0000000..e180c31 --- /dev/null +++ b/SDK/examples/c/e502_eth_svc_browse/main.c @@ -0,0 +1,205 @@ +/* C, + , E502 . + + ( ) + , . + + Windows CTRL+C Linux. + + Visual Studio 2008, + gcc Linux mingw Windows makefile cmake ( + ). + + Visual Studio, + ( (Project) -> (Properties) -> (Configuration Properties) + -> /++ -> (General) -> (Additional Include Directories)) + , x502api.h e502api.h + ( (Project) -> (Properties) -> (Configuration Properties) -> + (Linker) -> (General) -> (Additional Library Directories)). + + !!: Visual Studio ( SDK), + + UTF-8: + (File) -> (Advanced Save Options)... + (Encoding) (UTF8, )/Unicode (UTF-8 with signature) + . + + */ + +#include "e502api.h" + +#ifdef _WIN32 +#include +#include +#else +#include +#include + +#endif + +#include +#include +#include + + +#ifdef _WIN32 + #define INST_NAME_PRINT_FMT "%ls" +#else + #define INST_NAME_PRINT_FMT "%s" +#endif + +/* */ +static int f_out = 0; + +#ifndef _WIN32 +/* Linux */ +static void f_abort_handler(int sig) { + f_out = 1; +} +#endif + + + + + + +int main(int argc, char** argv) { + int32_t err = X502_ERR_OK; + int32_t stop_err; + uint32_t ver; + t_e502_eth_svc_browse_hnd browse_hnd; +#ifndef _WIN32 + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + /* Linux , + */ + sa.sa_handler = f_abort_handler; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGABRT, &sa, NULL); +#endif +#ifdef _WIN32 + /* Windows CP1251 OEM */ + setlocale(LC_CTYPE, ""); +#endif + /* */ + ver = X502_GetLibraryVersion(); + printf(" : %d.%d.%d\n", (ver >> 24)&0xFF, (ver>>16)&0xFF, (ver>>8)&0xFF); + + + /* */ + err = E502_EthSvcBrowseStart(&browse_hnd, 0); + if (err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s\n", + err, X502_GetErrorString(err)); + } else { + printf(" . %s\n", +#ifdef _WIN32 + " " +#else + "CTRL+C" +#endif + ); + while (!f_out && (err == X502_ERR_OK)) { + t_e502_eth_svc_record_hnd svc_rec; + uint32_t event; + /* , + * */ + err = E502_EthSvcBrowseGetEvent(browse_hnd, &svc_rec, &event, NULL, 300); + if (err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s\n", + err, X502_GetErrorString(err)); + } else if (event != E502_ETH_SVC_EVENT_NONE) { + char inst_name[X502_INSTANCE_NAME_SIZE]; + char dev_serial[X502_SERIAL_SIZE]; + uint32_t addr; + int32_t cur_err; +#ifdef _WIN32 + WCHAR inst_name_w[X502_INSTANCE_NAME_SIZE]; +#endif + + /* , E502_ETH_SVC_EVENT_NONE, + * , . + * . , + * */ + cur_err = E502_EthSvcRecordGetInstanceName(svc_rec, inst_name); + if (cur_err == X502_ERR_OK) + cur_err = E502_EthSvcRecordGetDevSerial(svc_rec, dev_serial); +#ifdef _WIN32 + if (cur_err == X502_ERR_OK) { + /* UTF-8. Windows + * UTF16 + * WCHAR. + * */ + if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, inst_name, + -1, inst_name_w, X502_INSTANCE_NAME_SIZE)==0) { + cur_err = X502_ERR_INSTANCE_NAME_ENCODING; + } + } +#endif + + if (cur_err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s\n", + cur_err, X502_GetErrorString(cur_err)); + } else { + if ((event == E502_ETH_SVC_EVENT_ADD) || + (event == E502_ETH_SVC_EVENT_CHANGED)) { + /* ADD CHANGE , , + * IP- */ + cur_err = E502_EthSvcRecordResolveIPv4Addr(svc_rec, &addr, 4000); + + if (cur_err == X502_ERR_OK) { + printf("%s: " INST_NAME_PRINT_FMT ", S/N: %s, = %d.%d.%d.%d\n", + event == E502_ETH_SVC_EVENT_ADD ? " " : ". ", +#ifdef _WIN32 + inst_name_w, +#else + inst_name, +#endif + dev_serial, + (addr >> 24) & 0xFF, (addr >> 16) & 0xFF, + (addr >> 8) & 0xFF, addr & 0xFF + ); + + fflush(stdout); + } else { + fprintf(stderr, " (%d): %s\n", + cur_err, X502_GetErrorString(cur_err)); + } + } else if (event == E502_ETH_SVC_EVENT_REMOVE) { + printf(" : " INST_NAME_PRINT_FMT ", S/N: %s\n", +#ifdef _WIN32 + inst_name_w, +#else + inst_name, +#endif + dev_serial); + } + } + + /* , NONE, , + * */ + E502_EthSvcRecordFree(svc_rec); + } + +#ifdef _WIN32 + /* */ + if (err == X502_ERR_OK) { + if (_kbhit()) + f_out = 1; + } +#endif + } + stop_err = E502_EthSvcBrowseStop(browse_hnd); + if (stop_err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s\n", + stop_err, X502_GetErrorString(stop_err)); + if (err == X502_ERR_OK) + err = stop_err; + } else { + printf(" !\n"); + } + } + + return err; +} diff --git a/SDK/examples/c/e502_eth_svc_browse/makefile b/SDK/examples/c/e502_eth_svc_browse/makefile new file mode 100644 index 0000000..44842ee --- /dev/null +++ b/SDK/examples/c/e502_eth_svc_browse/makefile @@ -0,0 +1,48 @@ +# makefile для сборки примера с помощью компиляторов mingw (под Windows) +# или GCC (под Linux). Необходимо определить 3 переменные: +# +# CC - имя команды для вызова компилятора +# X502API_LIBRARIES_DIR - путь к файлм .a или .so библиотек l502api, e502api, x502api (если не стандартный) +# X502API_INCLUDE_DIR - путь к заголовочным файлам l502api.h, e502api.h, x502api.h +# +# Ниже приведено несколько примеров в закоментированном виде + +#--- Linux с заголовками и библиотекой в стандартных директориях: компилятор GCC +#CC = gcc + +#--- Вариант запуска из MSYS со стандартным 32-битным mingw +#CC = gcc +#X502API_LIBRARIES_DIR = "/c/Program Files/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/c/Program Files/L-Card/lpcie/include" + + +#--- 64-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = x86_64-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw64" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = i686-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw, идущий вместе с cygwin -------- +#CC = i686-pc-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + + +FLAGS = + +ifdef X502API_LIBRARIES_DIR + FLAGS += -L $(X502API_LIBRARIES_DIR) +endif + +ifdef X502API_INCLUDE_DIR + FLAGS += -I $(X502API_INCLUDE_DIR) +endif + + + +all: + $(CC) main.c $(FLAGS) -lx502api -le502api -o e502_eth_svc_browse diff --git a/SDK/examples/c/e502_timestamp_stream/CMakeLists.txt b/SDK/examples/c/e502_timestamp_stream/CMakeLists.txt new file mode 100644 index 0000000..5f21494 --- /dev/null +++ b/SDK/examples/c/e502_timestamp_stream/CMakeLists.txt @@ -0,0 +1,29 @@ +# cmake. +# cmake make- +# . +# +# , : +# +# cmake -DX502API_INCLUDE_DIR=< x502api> -DX502API_LIBRARIES_DIR=< x502api (.lib, .a .so)> -G < > < ( )> +# +# cmake +# +# / , +# -DX502API_INCLUDE_DIR -DX502API_LIBRARIES_DIR +# + +cmake_minimum_required(VERSION 2.6) + +set(PROJECT e502_timestamp_stream) + +project(${PROJECT} C) + +set(SOURCES main.c) +set(HEADERS ) + +include_directories(${X502API_INCLUDE_DIR}) +link_directories(${X502API_LIBRARIES_DIR}) + +add_executable(${PROJECT} ${HEADERS} ${SOURCES}) + +target_link_libraries(${PROJECT} x502api l502api e502api) diff --git a/SDK/examples/c/e502_timestamp_stream/main.c b/SDK/examples/c/e502_timestamp_stream/main.c new file mode 100644 index 0000000..76e9b8c --- /dev/null +++ b/SDK/examples/c/e502_timestamp_stream/main.c @@ -0,0 +1,681 @@ +/* + E502-P1 PTP. + + C, + + , . + + , USB, + , . + Ethernet IP- + , + . + , 192.168.1.5 192.168.1.6, + : + x502_stream_read 192.168.1.5 192.168.1.6 + . + + , .. + . + - f_channels/f_ch_modes/f_ch_ranges. + + . + Windows CTRL+C Linux. + + , + X502_ProcessData() . + + Visual Studio 2008, + gcc Linux mingw Windows makefile cmake ( + ). + + Visual Studio, + ( (Project) -> (Properties) -> (Configuration Properties) + -> /++ -> (General) -> (Additional Include Directories)) + , x502api.h, l502api.h e502api.h + ( (Project) -> (Properties) -> (Configuration Properties) -> + (Linker) -> (General) -> (Additional Library Directories)). + + !!: Visual Studio ( SDK), + + UTF-8: + (File) -> (Advanced Save Options)... + (Encoding) (UTF8, )/Unicode (UTF-8 with signature) + . + + */ + +#include "l502api.h" +#include "e502api.h" +#include "x502tstp.h" + +#include "../../devs/e502/e502_fpga_regs.h" + +#ifdef _WIN32 +#include +#include + +#else +#include +#include +#include +#include +#include +#endif + +#include +#include +#include +#include +#include + +#include "x502api_private.h" + +#define STREAM_IN_WRD_TYPE(wrd) wrd & 0x80000000 ? STREAM_IN_WRD_ADC : \ + (wrd & 0xFF000000) == 0x0 ? STREAM_IN_WRD_DIN : \ + (wrd & 0xF0000000) == 0x40000000 ? STREAM_IN_WRD_TSP : \ + ((wrd & 0xFF000000)>>24) == 0x01 ? STREAM_IN_WRD_MSG : STREAM_IN_WRD_USR + +#ifdef _WIN32 + +#define CLOCK_MONOTONIC 1 + +int clock_gettime(int a, struct timespec *spec) { + __int64 wintime; GetSystemTimeAsFileTime((FILETIME*)&wintime); + wintime -=116444736000000000i64; //1jan1601 to 1jan1970 + spec->tv_sec =wintime / 10000000i64; //seconds + spec->tv_nsec =wintime % 10000000i64 *100; //nano-seconds + return 0; +} +#endif + +#define NSEC_PER_SEC 1000000000 + +void timespec_diff(struct timespec *a, struct timespec *b, + struct timespec *result) { + result->tv_sec = a->tv_sec - b->tv_sec; + result->tv_nsec = a->tv_nsec - b->tv_nsec; + if (result->tv_nsec < 0) { + --result->tv_sec; + result->tv_nsec += NSEC_PER_SEC; + } +} + +double timespec_to_double(struct timespec *ts) +{ + return ((double)(ts->tv_sec) + ((double)(ts->tv_nsec) / NSEC_PER_SEC)); +} + + +/* */ +static int f_out = 0; + +/* */ +#define ADC_LCH_CNT 1 + +/* */ +#define ADC_FREQ 1000000 +#define ADC_FRAME_FREQ (ADC_FREQ/ADC_LCH_CNT) +/* */ +#define DIN_FREQ 1000000 + +#define ENABLE_ADC +#define ENABLE_DIN + +// ADC_FREQ==2000000 DIN_FREQ==1000000 Ethernet X502_STREAM_IN_MSG_OVERFLOW + + +#define TCP_CONNECTION_TOUT 5000 + + +/* */ +#define READ_BLOCK_SIZE 4096*66*3 +/* () */ +#define READ_TIMEOUT 2000 + + +/* */ +static uint32_t f_channels[ADC_LCH_CNT] = {0}; +/* */ +static uint32_t f_ch_modes[ADC_LCH_CNT] = {X502_LCH_MODE_DIFF}; +/* */ +static uint32_t f_ch_ranges[ADC_LCH_CNT] = {X502_ADC_RANGE_10}; + + +t_x502_hnd g_hnd = NULL; + +#ifndef _WIN32 +/* Linux */ +static void f_abort_handler(int sig) { + f_out = 1; +} +#endif + + +/* PCI-Express USB + * . + * IP- + * . + * , , + * pdevrec_list, ( + * X502_FreeDevRecordList()) + * */ +static uint32_t f_get_all_devrec(t_x502_devrec **pdevrec_list, uint32_t *ip_addr_list, unsigned ip_cnt) { + int32_t fnd_devcnt = 0; + uint32_t pci_devcnt = 0; + uint32_t usb_devcnt = 0; + + t_x502_devrec *rec_list = NULL; + + /* PCI USB */ + //L502_GetDevRecordsList(NULL, 0, 0, &pci_devcnt); + E502_UsbGetDevRecordsList(NULL, 0, 0, &usb_devcnt); + + if ((pci_devcnt + usb_devcnt + ip_cnt) != 0) { + /* */ + rec_list = malloc((pci_devcnt + usb_devcnt + ip_cnt) * sizeof(t_x502_devrec)); + + if (rec_list != NULL) { + unsigned i; + /* L502, pci_devcnt */ + if (pci_devcnt!=0) { + int32_t res = L502_GetDevRecordsList(&rec_list[fnd_devcnt], pci_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + /* E502, USB, */ + if (usb_devcnt!=0) { + int32_t res = E502_UsbGetDevRecordsList(&rec_list[fnd_devcnt], usb_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + + /* ip- */ + for (i=0; i < ip_cnt; i++) { + if (E502_MakeDevRecordByIpAddr(&rec_list[fnd_devcnt], ip_addr_list[i],0, TCP_CONNECTION_TOUT) == X502_ERR_OK) { + fnd_devcnt++; + } + } + } + } + + if (fnd_devcnt != 0) { + /* , */ + *pdevrec_list = rec_list; + } else { + *pdevrec_list = NULL; + free(rec_list); + } + + return fnd_devcnt; +} + + +static t_x502_hnd f_dev_select_open(int argc, char** argv) { + uint32_t fnd_devcnt,i, dev_ind; + t_x502_devrec *devrec_list = NULL; + uint32_t *ip_addr_list = NULL; + uint32_t ip_cnt = 0; + t_x502_hnd hnd = NULL; + + /* , , + ip- . */ + if (argc > 1) { + ip_addr_list = malloc((argc-1) * sizeof(ip_addr_list[0])); + if (ip_addr_list == NULL) { + fprintf(stderr, " !\n"); + } else { + for (i=1; (int)i < argc; i++) { + int a[4]; + if (sscanf(argv[i], "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3])==4) { + ip_addr_list[ip_cnt++] = ((a[0] & 0xFF) << 24) | + ((a[1] & 0xFF) << 16) | + ((a[2] & 0xFF) << 8) | + (a[3] & 0xFF); + } + } + } + } + + /* */ + fnd_devcnt = f_get_all_devrec(&devrec_list, ip_addr_list, ip_cnt); + + if (fnd_devcnt == 0) { + printf(" \n"); + } else { + /* */ + printf(" :\n"); + for (i=0; i < fnd_devcnt; i++) { + printf(" %d: %s, %-9s", i, devrec_list[i].devname, + devrec_list[i].iface == X502_IFACE_PCI ? "PCI/PCIe" : + devrec_list[i].iface == X502_IFACE_USB ? "USB" : + devrec_list[i].iface == X502_IFACE_ETH ? "Ethernet" : "?"); + + /* IP- + . location + */ + if (devrec_list[i].iface != X502_IFACE_ETH) { + printf(". : %s\n", devrec_list[i].serial); + } else { + printf(": %s\n", devrec_list[i].location); + } + } + + /* */ + printf(" , ( 0 %d)\n", fnd_devcnt-1); + fflush(stdout); + scanf("%d", &dev_ind); + + if (dev_ind >= fnd_devcnt) { + printf(" ...\n"); + } else { + /* - */ + hnd = X502_Create(); + if (hnd==NULL) { + fprintf(stderr, " !"); + } else { + /* */ + int32_t err = X502_OpenByDevRecord(hnd, &devrec_list[dev_ind]); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + X502_Free(hnd); + hnd = NULL; + } + } + } + + /* */ + X502_FreeDevRecordList(devrec_list, fnd_devcnt); + /* */ + free(devrec_list); + } + + /* IP- ( ) */ + free(ip_addr_list); + + return hnd; +} + +/* */ +int32_t f_setup_params(t_x502_hnd hnd) { + int32_t err = X502_ERR_OK, i; + + /* */ + err = X502_SetLChannelCount(hnd, ADC_LCH_CNT); + for (i=0; (i < ADC_LCH_CNT) && (err == X502_ERR_OK); i++) + err = X502_SetLChannel(hnd, i, f_channels[i], f_ch_modes[i], f_ch_ranges[i], 0); + + /* */ + if (err == X502_ERR_OK) { + double f_adc = ADC_FREQ, f_frame = ADC_FRAME_FREQ, f_din = DIN_FREQ; + + err = X502_SetAdcFreq(hnd, &f_adc, &f_frame); + if (err == X502_ERR_OK) + err = X502_SetDinFreq(hnd, &f_din); + if (err == X502_ERR_OK) { + /* - */ + printf(" :\n = %0.0f\n" + " . = %0.0f\n = %0.0f\n", + f_adc, f_frame, f_din); + } + } + + /* */ + if (err == X502_ERR_OK) + err = X502_Configure(hnd, 0); + + /* */ + if (err == X502_ERR_OK) { + int streams = 0; +#ifdef ENABLE_ADC + streams |= X502_STREAM_ADC; +#endif +#ifdef ENABLE_DIN + streams |= X502_STREAM_DIN; +#endif + err = X502_StreamsEnable(hnd, streams); + } + return err; +} + +int main(int argc, char** argv) { + int32_t err = X502_ERR_OK; + uint32_t ver; +#ifndef _WIN32 + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + /* Linux , + */ + sa.sa_handler = f_abort_handler; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGABRT, &sa, NULL); +#endif +#ifdef _WIN32 + /* Windows CP1251 OEM */ + setlocale(LC_CTYPE, ""); +#endif + /* */ + ver = X502_GetLibraryVersion(); + printf(" : %d.%d.%d\n", (ver >> 24)&0xFF, (ver>>16)&0xFF, (ver>>8)&0xFF); + + /********** , ******************/ + g_hnd = f_dev_select_open(argc, argv); + + /********************************** **************************/ + /* - */ + if (g_hnd != NULL) { + /* */ + t_x502_info info; + err = X502_GetDevInfo(g_hnd, &info); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + } else { + /* */ + printf(" :\n"); + printf(" : %s\n", info.serial); + printf(" : %s\n", info.devflags & X502_DEVFLAGS_DAC_PRESENT ? "" : ""); + printf(" BlackFin : %s\n", info.devflags & X502_DEVFLAGS_BF_PRESENT ? "" : ""); + printf(" : %s\n", info.devflags & X502_DEVFLAGS_GAL_PRESENT ? "" : ""); + printf(" . : %s\n", info.devflags & X502_DEVFLAGS_INDUSTRIAL ? "" : ""); + printf(" . PCI/PCIe: %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_PCI ? "" : ""); + printf(" . USB : %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_USB ? "" : ""); + printf(" . Ethernet: %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_ETH ? "" : ""); + printf(" : %d.%d\n", (info.fpga_ver >> 8) & 0xFF, info.fpga_ver & 0xFF); + printf(" PLDA : %d\n", info.plda_ver); + if (info.mcu_firmware_ver != 0) { + printf(" ARM : %d.%d.%d.%d\n", + (info.mcu_firmware_ver >> 24) & 0xFF, + (info.mcu_firmware_ver >> 16) & 0xFF, + (info.mcu_firmware_ver >> 8) & 0xFF, + info.mcu_firmware_ver & 0xFF); + } + } + + if (err == X502_ERR_OK) { + /* */ + err = f_setup_params(g_hnd); + if (err != X502_ERR_OK) + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + } + + /*err = X502_FpgaRegRead(g_hnd, E502_REGS_ARM_BLOCK, &val); + if (err) { + printf("X502_FpgaRegRead err=%d\n", err); + } else { + printf("X502_FpgaRegRead(E502_REGS_ARM_BLOCK) = %d\n", val); + } */ + + // + X502_FpgaRegWrite(g_hnd, E502_REGS_ARM_TIME_CTRL, 1); + + X502_FpgaRegWrite(g_hnd, E502_REGS_IOHARD_GO_SYNC_IO, 0); + X502_FpgaRegWrite(g_hnd, E502_REGS_BF_CTL, X502_REGBIT_BF_CTL_BF_RESET_Msk); + + X502_SetSyncMode(g_hnd, X502_SYNC_INTERNAL); + + /* - */ + if (err == X502_ERR_OK) { + err = X502_StreamsStart(g_hnd); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s!\n", X502_GetErrorString(err)); + } + } + + if (err == X502_ERR_OK) { + int block; + int32_t stop_err; + + printf(" . %s\n", +#ifdef _WIN32 + " " +#else + "CTRL+C" +#endif + ); + fflush(stdout); + + struct timespec start_time; + + clock_gettime(CLOCK_MONOTONIC, &start_time); + + int32_t g_rcv_cnt = 0; + int cntr = 0; + int rcv_cntr = 0; + + t_x502_tstp_state tstp_state; + + X502_tstp_init(&tstp_state, ADC_FREQ, DIN_FREQ); + + + for (block = 0; (err == X502_ERR_OK) && !f_out; block++) { + int32_t rcv_size; + uint32_t adc_size, din_size; + uint32_t adc_wrd_num = 0; + uint32_t din_wrd_num = 0; + + /* */ + static uint32_t rcv_buf[READ_BLOCK_SIZE]; + static uint32_t snd_buf[READ_BLOCK_SIZE]; + static double adc_data[READ_BLOCK_SIZE]; + static uint32_t din_data[READ_BLOCK_SIZE]; + + int i; + + struct timespec cur_time; + clock_gettime(CLOCK_MONOTONIC, &cur_time); + + /* ( ) */ + rcv_size = X502_Recv(g_hnd, rcv_buf, READ_BLOCK_SIZE, READ_TIMEOUT); + if (rcv_size < 0) { + err = rcv_size; + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + continue; + } + adc_size = sizeof(adc_data)/sizeof(adc_data[0]); + din_size = sizeof(din_data)/sizeof(din_data[0]); + + /* , */ + err = X502_ProcessData(g_hnd, rcv_buf, rcv_size, X502_PROC_FLAGS_VOLT, + adc_data, &adc_size, din_data, &din_size); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + continue; + } + + g_rcv_cnt += rcv_size; + int error = 0; + + clock_gettime(CLOCK_MONOTONIC, &cur_time); + + if (cur_time.tv_sec - start_time.tv_sec >= 5) { + //printf("rcv speed=%lld wrds/sec cntr=%x\n", (g_rcv_cnt) / (cur_time.tv_sec - start_time.tv_sec), rcv_cntr); + start_time.tv_sec = cur_time.tv_sec; + g_rcv_cnt = 0; + } + + for (i = 0; i < rcv_size; i++) { + uint32_t cur_wrd = rcv_buf[i]; + uint64_t cur_wrd_time; + t_stream_in_wrd_type type = STREAM_IN_WRD_TYPE(cur_wrd); + + X502_tstp_process_wrd(&tstp_state, cur_wrd); + X502_tstp_get_curwrd_time(&tstp_state, &cur_wrd_time) ; + + /* - */ + if (type == STREAM_IN_WRD_DIN) { + uint16_t din_wrd; + static bool last_din_wrd_initialized = false; + static uint16_t last_din_wrd; + + if (!tstp_state.tstp_mark_rcvd) { + fprintf(stderr, "No timestamp received, DIN wrd unexpected!\n"); + break; + } + + din_wrd = din_data[din_wrd_num]; + din_wrd_num++; + + #define DIN_PPS_MASK 1 + + if (!last_din_wrd_initialized) { + last_din_wrd = din_wrd; + last_din_wrd_initialized = true; + } else + if ((din_wrd & DIN_PPS_MASK) != (last_din_wrd & DIN_PPS_MASK) && (din_wrd & DIN_PPS_MASK)) { + // PPS DI1 + static bool last_pps_edge_time_initialized = false; + static uint64_t last_pps_edge_time = 0; + + X502_tstp_get_curwrd_time(&tstp_state, &cur_wrd_time); + + { + static uint32_t nsec_max = 0; + static uint32_t nsec_min = -1; + uint64_t sec_time; + uint64_t ns_time; + sec_time = cur_wrd_time - TSTP_SEC_TO_SSEC(TSTP_SECSSEC_TO_SEC(cur_wrd_time)); + ns_time = TSTP_SSEC_TO_NSEC(sec_time); + if (ns_time > 500000000) { + ns_time = NSEC_PER_SEC - ns_time; + } + if (ns_time > nsec_max) { + nsec_max = ns_time; + } + if (ns_time < nsec_min) { + nsec_min = ns_time; + } + printf("DIN PPS positive edge: %ld ns (max - min = %d)\n", ns_time, nsec_max - nsec_min); + } + + if (last_pps_edge_time_initialized ) { + uint64_t pps_period; + pps_period = cur_wrd_time - last_pps_edge_time; + printf("DIN PPS positive edge pediod = %d.%09d\n", TSTP_SECSSEC_TO_SEC(pps_period), TSTP_SSEC_TO_NSEC(pps_period)); + } else { + last_pps_edge_time_initialized = true; + } + + last_pps_edge_time = cur_wrd_time; + } + last_din_wrd = din_wrd; + } else + if (type == STREAM_IN_WRD_ADC) { + static uint16_t last_adc_wrd; + register uint32_t wrd = rcv_buf[i]; + double adc_val; + static bool adc_wait_for_edge = false; + + if (!tstp_state.tstp_mark_rcvd) { + fprintf(stderr, "No timestamp received, ADC wrd unexpected!\n"); + break; + } + + adc_val = adc_data[adc_wrd_num]; + adc_wrd_num++; + + X502_tstp_get_curwrd_time(&tstp_state, &cur_wrd_time); + + if (adc_wait_for_edge) { + if (adc_val > 2.4) { + // PPS 1 ADC + static bool last_pps_edge_time_initialized = false; + static uint64_t last_pps_edge_time = 0; + + adc_wait_for_edge = false; + + { + static uint32_t nsec_max = 0; + static uint32_t nsec_min = -1; + uint64_t sec_time; + uint64_t ns_time; + sec_time = cur_wrd_time - TSTP_SEC_TO_SSEC(TSTP_SECSSEC_TO_SEC(cur_wrd_time)); + ns_time = TSTP_SSEC_TO_NSEC(sec_time); + if (ns_time > 500000000) { + ns_time = NSEC_PER_SEC - ns_time; + } + if (ns_time > nsec_max) { + nsec_max = ns_time; + } + if (ns_time < nsec_min) { + nsec_min = ns_time; + } + printf("ADC PPS positive edge: %ld ns (max - min = %d)\n", ns_time, nsec_max - nsec_min); + } + + if (last_pps_edge_time_initialized ) { + uint64_t pps_period; + pps_period = cur_wrd_time - last_pps_edge_time; + + printf("ADC PPS positive edge period = %d.%09d\n", TSTP_SECSSEC_TO_SEC(pps_period), + TSTP_SSEC_TO_NSEC(pps_period)); + + } else { + last_pps_edge_time_initialized = true; + } + + last_pps_edge_time = cur_wrd_time; + } + } else + if (adc_val < 2.3) { + adc_wait_for_edge = true; + } + } + + rcv_cntr++; + } +#if 0 + adc_size = sizeof(adc_data)/sizeof(adc_data[0]); + din_size = sizeof(din_data)/sizeof(din_data[0]); + int adc_data_num = 0; + + /* , */ + err = X502_ProcessData(g_hnd, rcv_buf, rcv_size, X502_PROC_FLAGS_VOLT, + adc_data, &adc_size, din_data, &din_size); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + continue; + } +#endif + + if ((tstp_state.dinwrds_after_tstp / DIN_FREQ) > 2) + { + printf("Warning: timestamp mark undetected after %d seconds\n", tstp_state.dinwrds_after_tstp / DIN_FREQ); + } + if ((tstp_state.adcwrds_after_tstp / ADC_FREQ) > 2) + { + printf("Warning: timestamp mark undetected after %d seconds\n", tstp_state.adcwrds_after_tstp / ADC_FREQ); + } + + continue; + +#ifdef _WIN32 + /* */ + if (_kbhit()) + f_out = 1; +#endif + } + + /* ( , ) */ + stop_err = X502_StreamsStop(g_hnd); + if (stop_err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + if (err == X502_ERR_OK) + err = stop_err; + } else { + printf(" \n"); + } + + // + X502_FpgaRegWrite(g_hnd, E502_REGS_ARM_TIME_CTRL, 0); + } + + /* */ + X502_Close(g_hnd); + /* */ + X502_Free(g_hnd); + } + return err; +} diff --git a/SDK/examples/c/x502_cycle_out/CMakeLists.txt b/SDK/examples/c/x502_cycle_out/CMakeLists.txt new file mode 100644 index 0000000..8b0f3a9 --- /dev/null +++ b/SDK/examples/c/x502_cycle_out/CMakeLists.txt @@ -0,0 +1,33 @@ +# cmake. +# cmake make- +# . +# +# , : +# +# cmake -DL502API_INCLUDE_DIR=< l502api> -DL502API_LIBRARIES_DIR=< l502api (.lib, .a .so)> -G < > < ( )> +# +# cmake +# +# / , +# -DL502API_INCLUDE_DIR -DL502API_LIBRARIES_DIR +# + +cmake_minimum_required(VERSION 2.8.12) + +set(PROJECT x502_cycle_out) + +project(${PROJECT} C) + +set(SOURCES main.c ../common/dev_funcs.c) +set(HEADERS ) + +include_directories(${X502API_INCLUDE_DIR} ../common) +link_directories(${X502API_LIBRARIES_DIR}) + +add_executable(${PROJECT} ${HEADERS} ${SOURCES}) + +target_link_libraries(${PROJECT} x502api l502api e502api) + +if(CMAKE_COMPILER_IS_GNUCC) + target_link_libraries(${PROJECT} m) +endif(CMAKE_COMPILER_IS_GNUCC) diff --git a/SDK/examples/c/x502_cycle_out/main.c b/SDK/examples/c/x502_cycle_out/main.c new file mode 100644 index 0000000..ca3e7e1 --- /dev/null +++ b/SDK/examples/c/x502_cycle_out/main.c @@ -0,0 +1,296 @@ +/* + E16 / E502 / L502 ( ). + + , + . + ( ), ' + . + + , Enter - + . + + . + , + , L502_OutCycleSetup() + + . + + + Visual Studio 2008, + gcc Linux mingw Windows makefile cmake ( + ). + + Visual Studio, + ( (Project) -> (Properties) -> (Configuration Properties) + -> /++ -> (General) -> (Additional Include Directories)) + , l502api.h + ( (Project) -> (Properties) -> (Configuration Properties) -> + (Linker) -> (General) -> (Additional Library Directories)). + + !!: Visual Studio ( SDK), + + UTF-8: + (File) -> (Advanced Save Options)... + (Encoding) (UTF8, )/Unicode (UTF-8 with signature) + . + */ + +#include "l502api.h" +#include "e502api.h" +#include +#include +#include +#include +#include +#include "dev_funcs.h" + +#define TCP_CONNECTION_TOUT 5000 +#define OUT_SIGNAL_SIZE 2000 +#define OUT_BLOCK_SIZE 256 +#define SEND_TOUT 500 + +#ifndef M_PI + #define M_PI 3.14159265358979323846 +#endif + +typedef double (*f_gen_sig_word)(uint32_t cntr, uint32_t total_size, double amp); +typedef uint32_t (*f_gen_dout_word)(uint32_t cntr, uint32_t total_size); +/* , 2- /1 +1 DOUT */ +typedef struct { + uint32_t size; /* */ + double amp_dac1; /* 1 */ + f_gen_sig_word gen_func_dac1; /* 1 */ + double amp_dac2; /* 2 */ + f_gen_sig_word gen_func_dac2; /* 2 */ + f_gen_dout_word gen_dout; /* */ +} t_sig_struct; + + +/* */ +static double f_gen_saw(uint32_t cntr, uint32_t total_size, double amp) { + return amp*( (int32_t)(cntr%total_size)-(int32_t)total_size/2)/(total_size/2); +} + +/* */ +static double f_gen_sin(uint32_t cntr, uint32_t total_size, double amp) { + return amp*sin(2*M_PI*cntr/total_size); +} + +/* */ +static double f_gen_cntr(uint32_t cntr, uint32_t total_size, double amp) { + return cntr + 0x123; +} + +/* */ +static double f_gen_sin2(uint32_t cntr, uint32_t total_size, double amp) { + return amp*sin(2*2*M_PI*cntr/total_size); +} + +/* 0xAA, 0x55 */ +static uint32_t f_gen_dout_meander(uint32_t cntr, uint32_t total_size) { + return cntr < total_size/2 ? 0xAA : 0x55; +} + +/* */ +static uint32_t f_gen_dout_cntr(uint32_t cntr, uint32_t total_size) { + return cntr; +} + + +/* , */ +/* E16 2 , .. 500 1 E502 */ +static t_sig_struct f_sig_tbl[] = { + {100000, X502_DAC_RANGE, f_gen_saw, 0, NULL, NULL}, /* 10 */ + {2000, X502_DAC_RANGE, f_gen_sin, 0, NULL, NULL}, /* 500 */ + {100, X502_DAC_RANGE/2, f_gen_sin, X502_DAC_RANGE, f_gen_saw, NULL}, /* . 2.5 10 */ + {50, 0, NULL, X502_DAC_RANGE, f_gen_sin, f_gen_dout_cntr}, /* 20 */ + {2550, 1.5, f_gen_sin, 2.5, f_gen_sin2, f_gen_dout_meander}, /* 2 . */ +}; + + +/* + cntr - , + size - (.. ch_cnt*size ) + sig - + ch_cnt - - ( - f_sig_tbl[sig], + , , */ +static int32_t f_load_block(t_x502_hnd hnd, uint32_t cntr, uint32_t size, uint32_t sig, uint32_t ch_cnt) { + static double dac_data1[OUT_BLOCK_SIZE], dac_data2[OUT_BLOCK_SIZE]; + static uint32_t dout_data[OUT_BLOCK_SIZE]; + /* - + ( 3- - 2 + DOUT) */ + static uint32_t sbuf[3*OUT_BLOCK_SIZE]; + uint32_t i; + int32_t err = 0; + + /* */ + for (i=0; i < size; i++) { + if (f_sig_tbl[sig].gen_func_dac1 != NULL) { + dac_data1[i] = f_sig_tbl[sig].gen_func_dac1(cntr+i, f_sig_tbl[sig].size, f_sig_tbl[sig].amp_dac1); + } + if (f_sig_tbl[sig].gen_func_dac2 != NULL) { + dac_data2[i] = f_sig_tbl[sig].gen_func_dac2(cntr+i, f_sig_tbl[sig].size, f_sig_tbl[sig].amp_dac2); + } + if (f_sig_tbl[sig].gen_dout != NULL) { + dout_data[i] = f_sig_tbl[sig].gen_dout(cntr+i, f_sig_tbl[sig].size); + } + } + + /* , , + * . - + * NULL */ + err = X502_PrepareData(hnd, + f_sig_tbl[sig].gen_func_dac1 ? dac_data1 : NULL, + f_sig_tbl[sig].gen_func_dac2 ? dac_data2 : NULL, + f_sig_tbl[sig].gen_dout ? dout_data : NULL, + size, X502_DAC_FLAGS_VOLT | X502_DAC_FLAGS_CALIBR, + sbuf); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", + X502_GetErrorString(err)); + } else { + /* */ + int32_t snd_cnt = X502_Send(hnd, sbuf, size*ch_cnt, SEND_TOUT); + if (snd_cnt < 0) { + err = snd_cnt; + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + } else if ((uint32_t)snd_cnt != size*ch_cnt) { + /* , + */ + fprintf(stderr, " : = %d, = %d\n", + size*ch_cnt, snd_cnt); + err = X502_ERR_SEND_INSUFFICIENT_WORDS; + } + } + return err; +} + +static int32_t f_load_cycle_signal(t_x502_hnd hnd, int sig) { + int32_t err = 0; + uint32_t cntr = 0; + uint32_t ch_cnt=0; + + /* , */ + if (f_sig_tbl[sig].gen_func_dac1) + ch_cnt++; + if (f_sig_tbl[sig].gen_func_dac2) + ch_cnt++; + if (f_sig_tbl[sig].gen_dout) + ch_cnt++; + + + /* ! */ + err = X502_OutCycleLoadStart(hnd, f_sig_tbl[sig].size*ch_cnt); + if (err != X502_ERR_OK) + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + + /* , , + * . + * L502_Send() */ + while ((cntr != f_sig_tbl[sig].size) && (err == X502_ERR_OK)) { + uint32_t block_size = OUT_BLOCK_SIZE; + /* , + * */ + if (block_size >(f_sig_tbl[sig].size-cntr)) + block_size=f_sig_tbl[sig].size-cntr; + + err = f_load_block(hnd, cntr, block_size, sig, ch_cnt); + if (!err) + cntr+=block_size; + } + + /* */ + if (err == X502_ERR_OK) { + err = X502_OutCycleSetup(hnd, X502_OUT_CYCLE_FLAGS_WAIT_DONE); + if (err != X502_ERR_OK) + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + } + return err; +} + +int main(int argc, char **argv) { + int32_t err = 0; + uint32_t ver; + t_x502_hnd hnd = NULL; + +#ifdef _WIN32 + /* , - CP1251 OEM */ + setlocale(LC_CTYPE, ""); +#endif + + /********** , ******************/ + hnd = select_dev_from_list(argc, argv, 0); + + /********************************** **************************/ + /* - */ + if (hnd != NULL) { + /* ( + ), + L502_PrepareData */ + err = X502_StreamsEnable(hnd, X502_STREAM_ALL_OUT); + if (err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s!", err, + X502_GetErrorString(err)); + } + + if (err == X502_ERR_OK) { + /* , + * . , , + L502_StreamsStart() */ + err = f_load_cycle_signal(hnd, 1); + + /* . + * . + * , + * + * */ + if (err == X502_ERR_OK) + err = X502_StreamsStart(hnd); + + if (err == X502_ERR_OK) { + int exit = 0; + + printf(" :\n"); + printf(" 1 %d - \n", + (int)(sizeof(f_sig_tbl)/sizeof(f_sig_tbl[0]))); + printf(" s stop - \n"); + printf(" e exit - \n"); + + /* */ + while (!err && !exit) { + char cmd[512]; + printf(">"); + fflush(stdout); + scanf("%s", cmd); + if (!strcmp(cmd, "exit") || !strcmp(cmd,"e")) { + exit=1; + } else if (!strcmp(cmd, "stop")||!strcmp(cmd,"s")) { + err = X502_OutCycleStop(hnd, X502_OUT_CYCLE_FLAGS_WAIT_DONE); + if (err != X502_ERR_OK) { + fprintf(stderr, " (%d): %s\n", + err, X502_GetErrorString(err)); + } + } else { + int sig = atoi(cmd); + if ((sig <= 0) || (sig > (int)(sizeof(f_sig_tbl)/sizeof(f_sig_tbl[0])))) { + fprintf(stderr, " \n"); + } else { + err = f_load_cycle_signal(hnd, sig-1); + } + } + } + + X502_StreamsStop(hnd); + } + } + + /* */ + X502_Close(hnd); + /* */ + X502_Free(hnd); + } + return err; +} + + diff --git a/SDK/examples/c/x502_cycle_out/makefile b/SDK/examples/c/x502_cycle_out/makefile new file mode 100644 index 0000000..6c34bb7 --- /dev/null +++ b/SDK/examples/c/x502_cycle_out/makefile @@ -0,0 +1,48 @@ +# makefile для сборки примера с помощью компиляторов mingw (под Windows) +# или GCC (под Linux). Необходимо определить 3 переменные: +# +# CC - имя команды для вызова компилятора +# X502API_LIBRARIES_DIR - путь к файлм .a или .so библиотек l502api, e502api, x502api (если не стандартный) +# X502API_INCLUDE_DIR - путь к заголовочным файлам l502api.h, e502api.h, x502api.h +# +# Ниже приведено несколько примеров в закоментированном виде + +#--- Linux с заголовками и библиотекой в стандартных директориях: компилятор GCC +#CC = gcc + +#--- Вариант запуска из MSYS со стандартным 32-битным mingw +#CC = gcc +#X502API_LIBRARIES_DIR = "/c/Program Files/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/c/Program Files/L-Card/lpcie/include" + + +#--- 64-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = x86_64-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw64" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = i686-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw, идущий вместе с cygwin -------- +#CC = i686-pc-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + + +FLAGS = + +ifdef X502API_LIBRARIES_DIR + FLAGS += -L $(X502API_LIBRARIES_DIR) +endif + +ifdef X502API_INCLUDE_DIR + FLAGS += -I $(X502API_INCLUDE_DIR) +endif + + + +all: + $(CC) main.c $(FLAGS) -ll502api -le502api -lx502api -o x502_cycle_out diff --git a/SDK/examples/c/x502_cycle_out/x502_cycle_out.sln b/SDK/examples/c/x502_cycle_out/x502_cycle_out.sln new file mode 100644 index 0000000..0568663 --- /dev/null +++ b/SDK/examples/c/x502_cycle_out/x502_cycle_out.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x502_cycle_out", "x502_cycle_out.vcproj", "{CA9882D8-F21E-47DD-87A6-44AD55ED0ED2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CA9882D8-F21E-47DD-87A6-44AD55ED0ED2}.Debug|Win32.ActiveCfg = Debug|Win32 + {CA9882D8-F21E-47DD-87A6-44AD55ED0ED2}.Debug|Win32.Build.0 = Debug|Win32 + {CA9882D8-F21E-47DD-87A6-44AD55ED0ED2}.Release|Win32.ActiveCfg = Release|Win32 + {CA9882D8-F21E-47DD-87A6-44AD55ED0ED2}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SDK/examples/c/x502_cycle_out/x502_cycle_out.vcproj b/SDK/examples/c/x502_cycle_out/x502_cycle_out.vcproj new file mode 100644 index 0000000..b5d5e0b --- /dev/null +++ b/SDK/examples/c/x502_cycle_out/x502_cycle_out.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDK/examples/c/x502_stream_read/CMakeLists.txt b/SDK/examples/c/x502_stream_read/CMakeLists.txt new file mode 100644 index 0000000..b0b2c91 --- /dev/null +++ b/SDK/examples/c/x502_stream_read/CMakeLists.txt @@ -0,0 +1,29 @@ +# cmake. +# cmake make- +# . +# +# , : +# +# cmake -DX502API_INCLUDE_DIR=< x502api> -DX502API_LIBRARIES_DIR=< x502api (.lib, .a .so)> -G < > < ( )> +# +# cmake +# +# / , +# -DX502API_INCLUDE_DIR -DX502API_LIBRARIES_DIR +# + +cmake_minimum_required(VERSION 2.8.12) + +set(PROJECT x502_stream_read) + +project(${PROJECT} C) + +set(SOURCES main.c) +set(HEADERS ) + +include_directories(${X502API_INCLUDE_DIR} ../common) +link_directories(${X502API_LIBRARIES_DIR}) + +add_executable(${PROJECT} ${HEADERS} ${SOURCES}) + +target_link_libraries(${PROJECT} x502api l502api e502api) diff --git a/SDK/examples/c/x502_stream_read/main.c b/SDK/examples/c/x502_stream_read/main.c new file mode 100644 index 0000000..50fa2d9 --- /dev/null +++ b/SDK/examples/c/x502_stream_read/main.c @@ -0,0 +1,501 @@ +/* C, + E16, L502 E502 + . + + , PCI-Express USB, + , . + Ethernet IP- + , + . + , 192.168.1.5 192.168.1.6, + : + x502_stream_read 192.168.1.5 E16:192.168.1.6 + . + ip E16, , : E16:192.168.1.6 + + , .. + . + - f_channels/f_ch_modes/f_ch_ranges. + + . + Windows CTRL+C Linux. + + , + X502_ProcessData() . + + Visual Studio 2008, + gcc Linux mingw Windows makefile cmake ( + ). + + Visual Studio, + ( (Project) -> (Properties) -> (Configuration Properties) + -> /++ -> (General) -> (Additional Include Directories)) + , x502api.h, l502api.h e502api.h + ( (Project) -> (Properties) -> (Configuration Properties) -> + (Linker) -> (General) -> (Additional Library Directories)). + + !!: Visual Studio ( SDK), + + UTF-8: + (File) -> (Advanced Save Options)... + (Encoding) (UTF8, )/Unicode (UTF-8 with signature) + . + + */ + +#include +#include "e502api.h" +//#include "dev_funcs.h" + +#ifdef _WIN32 +#include +#include +#else +#include +#include +#include +#endif + +#include +#include + +/* */ +#define ADC_LCH_CNT 3 + +/* */ +#define ADC_FREQ 500000 +/* ( ). ADC_FREQ/ADC_LCH_CNT - */ +#define ADC_FRAME_FREQ (ADC_FREQ/ADC_LCH_CNT) +/* */ +#define DIN_FREQ 500000 + + +#define TCP_CONNECTION_TOUT 5000 + + +/* */ +#define READ_BLOCK_SIZE 4096*200 +/* () */ +#define READ_TIMEOUT 2000 + + +/* */ +static uint32_t f_channels[ADC_LCH_CNT] = {0,4,6}; +/* */ +static uint32_t f_ch_modes[ADC_LCH_CNT] = {X502_LCH_MODE_DIFF, X502_LCH_MODE_DIFF, X502_LCH_MODE_DIFF}; +/* */ +static uint32_t f_ch_ranges[ADC_LCH_CNT] = {X502_ADC_RANGE_10, X502_ADC_RANGE_10, X502_ADC_RANGE_10}; + + + +/* */ +static int f_out = 0; + +#ifndef _WIN32 +/* Linux */ +static void f_abort_handler(int sig) { + f_out = 1; +} +#endif + +char const *DEV_E502 = "E502"; +char const *DEV_E16 = "E16"; + +typedef struct { + uint32_t ip_addr; + char const *devname; +} ip_dev_list_t; + +/* PCI-Express USB + * . + * IP- + * . + * , , + * pdevrec_list, ( + * X502_FreeDevRecordList()) + * */ +static uint32_t f_get_all_devrec(t_x502_devrec **pdevrec_list, ip_dev_list_t *ip_dev_list, unsigned ip_cnt) { + int32_t fnd_devcnt = 0; + uint32_t pci_devcnt = 0; + uint32_t usb_devcnt = 0; + uint32_t e16_usb_devcnt = 0; + + t_x502_devrec *rec_list = NULL; + + /* PCI USB */ + L502_GetDevRecordsList(NULL, 0, 0, &pci_devcnt); + E502_UsbGetDevRecordsList(NULL, 0, 0, &usb_devcnt); + E16_UsbGetDevRecordsList(NULL, 0, 0, &e16_usb_devcnt); + + if ((pci_devcnt+usb_devcnt + e16_usb_devcnt + ip_cnt) != 0) { + /* */ + rec_list = malloc((pci_devcnt + usb_devcnt +e16_usb_devcnt + ip_cnt) * sizeof(t_x502_devrec)); + + if (rec_list != NULL) { + unsigned i; + /* L502, pci_devcnt */ + if (pci_devcnt!=0) { + int32_t res = L502_GetDevRecordsList(&rec_list[fnd_devcnt], pci_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + /* E502, USB, */ + if (usb_devcnt!=0) { + int32_t res = E502_UsbGetDevRecordsList(&rec_list[fnd_devcnt], usb_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + + /* E16, USB, */ + if (e16_usb_devcnt!=0) { + int32_t res = E16_UsbGetDevRecordsList(&rec_list[fnd_devcnt], e16_usb_devcnt, 0, NULL); + if (res >= 0) { + fnd_devcnt += res; + } + } + + /* ip- */ + for (i=0; i < ip_cnt; i++) { + if (E502_MakeDevRecordByIpAddr2(&rec_list[fnd_devcnt], ip_dev_list[i].ip_addr, 0, TCP_CONNECTION_TOUT, ip_dev_list[i].devname) == X502_ERR_OK) { + fnd_devcnt++; + } + } + } + } + + if (fnd_devcnt != 0) { + /* , */ + *pdevrec_list = rec_list; + } else { + *pdevrec_list = NULL; + free(rec_list); + } + + return fnd_devcnt; +} + + +static t_x502_hnd f_dev_select_open(int argc, char** argv) { + t_x502_hnd hnd = NULL; + uint32_t fnd_devcnt,i, dev_ind; + t_x502_devrec *devrec_list = NULL; + ip_dev_list_t *ip_dev_list = NULL; + uint32_t ip_cnt = 0; + + /* , , + ip- . */ + if (argc > 1) { + ip_dev_list = malloc((argc - 1) * sizeof(ip_dev_list[0])); + if (ip_dev_list == NULL) { + fprintf(stderr, " !\n"); + } else { + for (i=1; (int)i < argc; i++) { + int a[4]; + if (sscanf(argv[i], "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3])==4) { + ip_dev_list[ip_cnt].devname = DEV_E502; + ip_dev_list[ip_cnt++].ip_addr = ((a[0] & 0xFF) << 24) | + ((a[1] & 0xFF) << 16) | + ((a[2] & 0xFF) << 8) | + (a[3] & 0xFF); + } else + if (sscanf(argv[i], "E16:%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3])==4) { + ip_dev_list[ip_cnt].devname = DEV_E16; + ip_dev_list[ip_cnt++].ip_addr = ((a[0] & 0xFF) << 24) | + ((a[1] & 0xFF) << 16) | + ((a[2] & 0xFF) << 8) | + (a[3] & 0xFF); + } + } + } + } + + /* */ + fnd_devcnt = f_get_all_devrec(&devrec_list, ip_dev_list, ip_cnt); + + if (fnd_devcnt == 0) { + printf(" \n"); + } else { + /* */ + printf(" :\n"); + for (i=0; i < fnd_devcnt; i++) { + printf(" %d: %s, %-9s", i, devrec_list[i].devname, + devrec_list[i].iface == X502_IFACE_PCI ? "PCI/PCIe" : + devrec_list[i].iface == X502_IFACE_USB ? "USB" : + devrec_list[i].iface == X502_IFACE_ETH ? "Ethernet" : "?"); + + /* IP- + . location + */ + if (devrec_list[i].iface != X502_IFACE_ETH) { + printf(". : %s\n", devrec_list[i].serial); + } else { + printf(": %s\n", devrec_list[i].location); + } + } + + /* */ + printf(" , ( 0 %d)\n", fnd_devcnt-1); + fflush(stdout); + scanf("%d", &dev_ind); + + if (dev_ind >= fnd_devcnt) { + printf(" ...\n"); + } else { + /* - */ + hnd = X502_Create(); + if (hnd==NULL) { + fprintf(stderr, " !"); + } else { + /* */ + int32_t err = X502_OpenByDevRecord(hnd, &devrec_list[dev_ind]); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + X502_Free(hnd); + hnd = NULL; + } + } + } + + /* */ + X502_FreeDevRecordList(devrec_list, fnd_devcnt); + /* */ + free(devrec_list); + } + + /* IP- ( ) */ + free(ip_dev_list); + + return hnd; +} + + +/* */ +int32_t f_setup_params(t_x502_hnd hnd) { + int32_t err = X502_ERR_OK, i; + + /* */ + err = X502_SetLChannelCount(hnd, ADC_LCH_CNT); + for (i=0; (i < ADC_LCH_CNT) && (err == X502_ERR_OK); i++) + err = X502_SetLChannel(hnd, i, f_channels[i], f_ch_modes[i], f_ch_ranges[i], 0); + + /* */ + if (err == X502_ERR_OK) { + double f_adc = ADC_FREQ, f_frame = ADC_FRAME_FREQ, f_din = DIN_FREQ; + err = X502_SetAdcFreq(hnd, &f_adc, &f_frame); + if (err == X502_ERR_OK) + err = X502_SetDinFreq(hnd, &f_din); + if (err == X502_ERR_OK) { + /* - */ + printf(" :\n = %0.0f\n" + " . = %0.0f\n = %0.0f\n", + f_adc, f_frame, f_din); + } + } + + /* */ + if (err == X502_ERR_OK) + err = X502_Configure(hnd, 0); + + /* */ + if (err == X502_ERR_OK) { + err = X502_StreamsEnable(hnd, X502_STREAM_ADC | X502_STREAM_DIN); + } + + return err; +} + +int main(int argc, char** argv) { + int32_t err = X502_ERR_OK; + uint32_t ver; + t_x502_hnd hnd = NULL; +#ifndef _WIN32 + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + /* Linux , + */ + sa.sa_handler = f_abort_handler; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGABRT, &sa, NULL); +#endif +#ifdef _WIN32 + /* Windows CP1251 OEM */ + setlocale(LC_CTYPE, ""); +#endif + /* */ + ver = X502_GetLibraryVersion(); + printf(" : %d.%d.%d\n", (ver >> 24)&0xFF, (ver>>16)&0xFF, (ver>>8)&0xFF); + + /********** , ******************/ + hnd = f_dev_select_open(argc, argv); + + /********************************** **************************/ + /* - */ + if (hnd != NULL) { + /* */ + t_x502_info info; + err = X502_GetDevInfo(hnd, &info); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + } else { + /* */ + printf(" :\n"); + printf(" : %s\n", info.serial); + printf(" : %s\n", info.devflags & X502_DEVFLAGS_DAC_PRESENT ? "" : ""); + printf(" BlackFin : %s\n", info.devflags & X502_DEVFLAGS_BF_PRESENT ? "" : ""); + printf(" : %s\n", info.devflags & X502_DEVFLAGS_GAL_PRESENT ? "" : ""); + printf(" . : %s\n", info.devflags & X502_DEVFLAGS_INDUSTRIAL ? "" : ""); + printf(" . PCI/PCIe: %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_PCI ? "" : ""); + printf(" . USB : %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_USB ? "" : ""); + printf(" . Ethernet: %s\n", info.devflags & X502_DEVFLAGS_IFACE_SUPPORT_ETH ? "" : ""); + printf(" : %d.%d\n", (info.fpga_ver >> 8) & 0xFF, info.fpga_ver & 0xFF); + printf(" PLDA : %d\n", info.plda_ver); + if (info.mcu_firmware_ver != 0) { + printf(" ARM : %d.%d.%d.%d\n", + (info.mcu_firmware_ver >> 24) & 0xFF, + (info.mcu_firmware_ver >> 16) & 0xFF, + (info.mcu_firmware_ver >> 8) & 0xFF, + info.mcu_firmware_ver & 0xFF); + } + } + + + if (err == X502_ERR_OK) { + /* */ + err = f_setup_params(hnd); + if (err != X502_ERR_OK) + fprintf(stderr, " : %s!", X502_GetErrorString(err)); + } + + + /* - */ + if (err == X502_ERR_OK) { + err = X502_StreamsStart(hnd); + if (err != X502_ERR_OK) + fprintf(stderr, " : %s!\n", X502_GetErrorString(err)); + } + + + if (err == X502_ERR_OK) { + int block; + int32_t stop_err; + + printf(" . %s\n", +#ifdef _WIN32 + " " +#else + "CTRL+C" +#endif + ); + fflush(stdout); + + + + for (block = 0; (err == X502_ERR_OK) && !f_out; block++) { + int32_t rcv_size; + uint32_t adc_size, din_size; + + /* */ + static uint32_t rcv_buf[READ_BLOCK_SIZE]; + static double adc_data[READ_BLOCK_SIZE]; + static uint32_t din_data[READ_BLOCK_SIZE]; + + /* ( ) */ + rcv_size = X502_Recv(hnd, rcv_buf, READ_BLOCK_SIZE, READ_TIMEOUT); + /* */ + if (rcv_size < 0) { + err = rcv_size; + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + } else if (rcv_size > 0) { + uint32_t first_lch; + /* , */ + X502_GetNextExpectedLchNum(hnd, &first_lch); + + adc_size = sizeof(adc_data)/sizeof(adc_data[0]); + din_size = sizeof(din_data)/sizeof(din_data[0]); + + /* , */ + err = X502_ProcessData(hnd, rcv_buf, rcv_size, X502_PROC_FLAGS_VOLT, + adc_data, &adc_size, din_data, &din_size); + if (err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + } else { + uint32_t lch; + + printf(" %3d. = %d, = %d\n", + block, adc_size, din_size); + /* - */ + if (din_size != 0) + printf(" din_data = 0x%05X\n", din_data[0]); + + /* . + , + */ + for (lch=0; lch < ADC_LCH_CNT; lch++) { + /* , : + , */ + uint32_t pos = lch >= first_lch ? lch - first_lch : ADC_LCH_CNT-first_lch + lch; + if (pos <= adc_size) { + printf(" lch[%d]=%6.4f\n", lch, adc_data[pos]); + } else { + printf(" lch[%d]= ---- \n", lch); + } + } + printf("\n"); + fflush(stdout); + } + } +#ifdef _WIN32 + /* */ + if (err == X502_ERR_OK) { + if (_kbhit()) + f_out = 1; + } +#else + { + // Enter / ADC + fd_set fds; + struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; + + FD_ZERO(&fds); + FD_SET(STDIN_FILENO, &fds); + if (select(1, &fds, NULL, NULL, &tv) == 1) { + int x; + static int adc_disabled = 0; + int ch; + + if (adc_disabled) { + X502_StreamsEnable(hnd, X502_STREAM_ADC); + } else { + X502_StreamsDisable(hnd, X502_STREAM_ADC); + } + adc_disabled = !adc_disabled; + + while(select(1, &fds, NULL, NULL, &tv) == 1) { + read(STDIN_FILENO, &ch, 1); + } + } + } +#endif + } + + /* ( , ) */ + stop_err = X502_StreamsStop(hnd); + if (stop_err != X502_ERR_OK) { + fprintf(stderr, " : %s\n", X502_GetErrorString(err)); + if (err == X502_ERR_OK) + err = stop_err; + } else { + printf(" \n"); + } + } + + /* */ + X502_Close(hnd); + /* */ + X502_Free(hnd); + } + return err; +} diff --git a/SDK/examples/c/x502_stream_read/makefile b/SDK/examples/c/x502_stream_read/makefile new file mode 100644 index 0000000..ab4a271 --- /dev/null +++ b/SDK/examples/c/x502_stream_read/makefile @@ -0,0 +1,48 @@ +# makefile для сборки примера с помощью компиляторов mingw (под Windows) +# или GCC (под Linux). Необходимо определить 3 переменные: +# +# CC - имя команды для вызова компилятора +# X502API_LIBRARIES_DIR - путь к файлм .a или .so библиотек l502api, e502api, x502api (если не стандартный) +# X502API_INCLUDE_DIR - путь к заголовочным файлам l502api.h, e502api.h, x502api.h +# +# Ниже приведено несколько примеров в закоментированном виде + +#--- Linux с заголовками и библиотекой в стандартных директориях: компилятор GCC +#CC = gcc + +#--- Вариант запуска из MSYS со стандартным 32-битным mingw +#CC = gcc +#X502API_LIBRARIES_DIR = "/c/Program Files/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/c/Program Files/L-Card/lpcie/include" + + +#--- 64-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = x86_64-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw64" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw w64, идущий вместе с cygwin -------- +#CC = i686-w64-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + +#--- 32-битный вариант mingw, идущий вместе с cygwin -------- +#CC = i686-pc-mingw32-gcc +#X502API_LIBRARIES_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/lib/mingw" +#X502API_INCLUDE_DIR = "/cygdrive/c/Program Files (x86)/L-Card/lpcie/include" + + +FLAGS = + +ifdef X502API_LIBRARIES_DIR + FLAGS += -L $(X502API_LIBRARIES_DIR) +endif + +ifdef X502API_INCLUDE_DIR + FLAGS += -I $(X502API_INCLUDE_DIR) +endif + + + +all: + $(CC) main.c $(FLAGS) -ll502api -le502api -lx502api -o x502_stream_read diff --git a/SDK/examples/c/x502_stream_read/x502_stream_read.sln b/SDK/examples/c/x502_stream_read/x502_stream_read.sln new file mode 100644 index 0000000..a3168cc --- /dev/null +++ b/SDK/examples/c/x502_stream_read/x502_stream_read.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "x502_stream_read", "x502_stream_read.vcproj", "{D9460CE1-B571-4A69-A4C1-0676BF57EB04}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Debug|Win32.ActiveCfg = Debug|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Debug|Win32.Build.0 = Debug|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Release|Win32.ActiveCfg = Release|Win32 + {D9460CE1-B571-4A69-A4C1-0676BF57EB04}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SDK/examples/c/x502_stream_read/x502_stream_read.vcproj b/SDK/examples/c/x502_stream_read/x502_stream_read.vcproj new file mode 100644 index 0000000..86381ac --- /dev/null +++ b/SDK/examples/c/x502_stream_read/x502_stream_read.vcproj @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SDK/examples/cs/e502_eth_svc_browse/Program.cs b/SDK/examples/cs/e502_eth_svc_browse/Program.cs new file mode 100644 index 0000000..b26230f --- /dev/null +++ b/SDK/examples/cs/e502_eth_svc_browse/Program.cs @@ -0,0 +1,84 @@ +using System; +using System.Net; +using lpcieapi; +using x502api; + +/* Данный пример представляет из себя консольную программу на языке C#, + демонстрирующую, как можно выполнить поиск устройств E502 в локальной сети. + + Пример запускается и непрерывно отслеживает появление (или исчезновение) + устройств в локальной сети, выводя информацию на консоль. + + Поиск выполняется до нажатия любой клавиши. */ +namespace e502_eth_svc_browse +{ + class Program + { + static void Main(string[] args) + { + /* функции для поиска представлены в виде методов отдельного класса EthSvcBrowser */ + E502.EthSvcBrowser sb = new E502.EthSvcBrowser(); + /* запуск поиска сервисов */ + lpcie.Errs err = sb.Start(); + if (err != lpcie.Errs.OK) + { + Console.WriteLine("Ошибка запуска поиска устройств в сети {0}: {1}", err, X502.GetErrorString(err)); + } + else + { + bool end = false; + Console.WriteLine("Запущен поиск устройств в локальной сети. Для останова нажмите любую клавишу"); + + while (!end && (err == lpcie.Errs.OK)) + { + E502.EthSvcEvent svc_evt; + /* Метод EthSvcRecord предоставляет доступ ко функциям для работы с описателем сервиса. + * В отличие от С не нужно освобождать память вручную, т.к. освобождение выполняется + * в деструкторе */ + E502.EthSvcRecord svc_rec; + err = sb.GetEvent(out svc_rec, out svc_evt, 300); + if (err != lpcie.Errs.OK) + { + Console.WriteLine("Ошибка получения записи о найденном устройстве {0}: {1}", err, X502.GetErrorString(err)); + } + else if (svc_evt != E502.EthSvcEvent.NONE) + { + /* Адрес мы можем получить только для присутствующего устройства */ + if ((svc_evt == E502.EthSvcEvent.ADD) || (svc_evt == E502.EthSvcEvent.CHANGED)) + { + IPAddress addr; + lpcie.Errs cur_err = svc_rec.ResolveIPv4Addr(out addr, 2000); + if (cur_err != lpcie.Errs.OK) + { + Console.WriteLine("Ошибка получения IP-адреса устройтсва {0}: {1}", cur_err, X502.GetErrorString(cur_err)); + } + else + { + Console.WriteLine("{0}: {1}, S/N: {2}, Адрес = {3}", svc_evt == E502.EthSvcEvent.ADD ? + "Новое устройтсво" : "Изм. параметров", svc_rec.InstanceName, svc_rec.DevSerial, addr.ToString()); + } + } + else if (svc_evt == E502.EthSvcEvent.REMOVE) + { + Console.WriteLine("Устройство отключено: {0}, S/N: {1}", svc_rec.InstanceName, svc_rec.DevSerial); + } + } + + /* вход по нажатию клавиши */ + if (Console.KeyAvailable) + end = true; + } + + lpcie.Errs stop_err = sb.Stop(); + if (stop_err != lpcie.Errs.OK) + { + Console.WriteLine("Ошибка останова поиска сервисов {0}: {1}", stop_err, X502.GetErrorString(stop_err)); + } + else + { + Console.WriteLine("Останов поиска сервисов выполнен успешно!\n"); + } + } + } + } +} diff --git a/SDK/examples/cs/e502_eth_svc_browse/Properties/AssemblyInfo.cs b/SDK/examples/cs/e502_eth_svc_browse/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0977c15 --- /dev/null +++ b/SDK/examples/cs/e502_eth_svc_browse/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("e502_eth_svc_browse")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("e502_eth_svc_browse")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c7548c80-fc0f-4cb6-a4ed-355b7e40c86d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SDK/examples/cs/e502_eth_svc_browse/e502_eth_svc_browse.csproj b/SDK/examples/cs/e502_eth_svc_browse/e502_eth_svc_browse.csproj new file mode 100644 index 0000000..0f6c019 --- /dev/null +++ b/SDK/examples/cs/e502_eth_svc_browse/e502_eth_svc_browse.csproj @@ -0,0 +1,55 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {714093CB-3EAA-464F-9D27-8E91381E0651} + Exe + Properties + e502_eth_svc_browse + e502_eth_svc_browse + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\..\..\..\lpcieNet\bin\Release\lpcieNet.dll + + + + 3.5 + + + + + + + + + \ No newline at end of file diff --git a/SDK/examples/cs/x502_general/MainForm.Designer.cs b/SDK/examples/cs/x502_general/MainForm.Designer.cs new file mode 100644 index 0000000..66c7418 --- /dev/null +++ b/SDK/examples/cs/x502_general/MainForm.Designer.cs @@ -0,0 +1,955 @@ +namespace x502_example +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.btnRefreshDeviceList = new System.Windows.Forms.Button(); + this.cbbSerialList = new System.Windows.Forms.ComboBox(); + this.btnOpen = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.label2 = new System.Windows.Forms.Label(); + this.edtPldaVer = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.edtFpgaVer = new System.Windows.Forms.TextBox(); + this.chkBfPresent = new System.Windows.Forms.CheckBox(); + this.chkGalPresent = new System.Windows.Forms.CheckBox(); + this.chkDacPresent = new System.Windows.Forms.CheckBox(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.btnSetAdcFreq = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.edtDinFreq = new System.Windows.Forms.TextBox(); + this.edtAdcFreqLch = new System.Windows.Forms.TextBox(); + this.edtAdcFreq = new System.Windows.Forms.TextBox(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.chkSyncDin = new System.Windows.Forms.CheckBox(); + this.edtDin_Result = new System.Windows.Forms.TextBox(); + this.edtLCh3_Result = new System.Windows.Forms.TextBox(); + this.edtLCh2_Result = new System.Windows.Forms.TextBox(); + this.cbbLCh3_Mode = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.cbbLCh3_Range = new System.Windows.Forms.ComboBox(); + this.cbbLCh2_Mode = new System.Windows.Forms.ComboBox(); + this.cbbLCh3_Channel = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.cbbLCh2_Range = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.cbbLCh2_Channel = new System.Windows.Forms.ComboBox(); + this.edtLCh1_Result = new System.Windows.Forms.TextBox(); + this.cbbLCh1_Mode = new System.Windows.Forms.ComboBox(); + this.cbbLCh1_Range = new System.Windows.Forms.ComboBox(); + this.label7 = new System.Windows.Forms.Label(); + this.cbbLCh1_Channel = new System.Windows.Forms.ComboBox(); + this.label6 = new System.Windows.Forms.Label(); + this.cbbLChCnt = new System.Windows.Forms.ComboBox(); + this.btnStart = new System.Windows.Forms.Button(); + this.btnStop = new System.Windows.Forms.Button(); + this.btnAsyncAdcFrame = new System.Windows.Forms.Button(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.cbbSyncStartMode = new System.Windows.Forms.ComboBox(); + this.label12 = new System.Windows.Forms.Label(); + this.cbbSyncMode = new System.Windows.Forms.ComboBox(); + this.label11 = new System.Windows.Forms.Label(); + this.btnAsyncDigIn = new System.Windows.Forms.Button(); + this.btnAsyncDigOut = new System.Windows.Forms.Button(); + this.btnAsyncDac1 = new System.Windows.Forms.Button(); + this.btnAsyncDac2 = new System.Windows.Forms.Button(); + this.edtAsyncDigIn = new System.Windows.Forms.TextBox(); + this.edtAsyncDigOut = new System.Windows.Forms.TextBox(); + this.edtAsyncDac1 = new System.Windows.Forms.TextBox(); + this.edtAsyncDac2 = new System.Windows.Forms.TextBox(); + this.chkEthSupport = new System.Windows.Forms.CheckBox(); + this.label13 = new System.Windows.Forms.Label(); + this.edtMcuVer = new System.Windows.Forms.TextBox(); + this.edtIpAddr = new System.Windows.Forms.TextBox(); + this.btnOpenByIP = new System.Windows.Forms.Button(); + this.groupBox1.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox3.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.SuspendLayout(); + // + // btnRefreshDeviceList + // + this.btnRefreshDeviceList.Location = new System.Drawing.Point(27, 12); + this.btnRefreshDeviceList.Name = "btnRefreshDeviceList"; + this.btnRefreshDeviceList.Size = new System.Drawing.Size(212, 23); + this.btnRefreshDeviceList.TabIndex = 0; + this.btnRefreshDeviceList.Text = "Обновить список модулей"; + this.btnRefreshDeviceList.UseVisualStyleBackColor = true; + this.btnRefreshDeviceList.Click += new System.EventHandler(this.btnRefreshDeviceList_Click); + // + // cbbSerialList + // + this.cbbSerialList.FormattingEnabled = true; + this.cbbSerialList.Location = new System.Drawing.Point(258, 14); + this.cbbSerialList.Name = "cbbSerialList"; + this.cbbSerialList.Size = new System.Drawing.Size(139, 21); + this.cbbSerialList.TabIndex = 1; + // + // btnOpen + // + this.btnOpen.Location = new System.Drawing.Point(27, 55); + this.btnOpen.Name = "btnOpen"; + this.btnOpen.Size = new System.Drawing.Size(212, 23); + this.btnOpen.TabIndex = 2; + this.btnOpen.Text = "Установить связь с модулем"; + this.btnOpen.UseVisualStyleBackColor = true; + this.btnOpen.Click += new System.EventHandler(this.btnOpen_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.edtMcuVer); + this.groupBox1.Controls.Add(this.chkEthSupport); + this.groupBox1.Controls.Add(this.label2); + this.groupBox1.Controls.Add(this.edtPldaVer); + this.groupBox1.Controls.Add(this.label1); + this.groupBox1.Controls.Add(this.edtFpgaVer); + this.groupBox1.Controls.Add(this.chkBfPresent); + this.groupBox1.Controls.Add(this.chkGalPresent); + this.groupBox1.Controls.Add(this.chkDacPresent); + this.groupBox1.Location = new System.Drawing.Point(258, 40); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(230, 183); + this.groupBox1.TabIndex = 3; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Информация о модуле"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(74, 131); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(128, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Версия прошивки PLDA"; + // + // edtPldaVer + // + this.edtPldaVer.Enabled = false; + this.edtPldaVer.Location = new System.Drawing.Point(6, 128); + this.edtPldaVer.Name = "edtPldaVer"; + this.edtPldaVer.Size = new System.Drawing.Size(62, 20); + this.edtPldaVer.TabIndex = 7; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(74, 105); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(131, 13); + this.label1.TabIndex = 6; + this.label1.Text = "Версия прошивки ПЛИС"; + // + // edtFpgaVer + // + this.edtFpgaVer.Enabled = false; + this.edtFpgaVer.Location = new System.Drawing.Point(6, 102); + this.edtFpgaVer.Name = "edtFpgaVer"; + this.edtFpgaVer.Size = new System.Drawing.Size(62, 20); + this.edtFpgaVer.TabIndex = 5; + // + // chkBfPresent + // + this.chkBfPresent.AutoSize = true; + this.chkBfPresent.Enabled = false; + this.chkBfPresent.Location = new System.Drawing.Point(6, 65); + this.chkBfPresent.Name = "chkBfPresent"; + this.chkBfPresent.Size = new System.Drawing.Size(199, 17); + this.chkBfPresent.TabIndex = 4; + this.chkBfPresent.Text = "Наличие сигнального процессора"; + this.chkBfPresent.UseVisualStyleBackColor = true; + // + // chkGalPresent + // + this.chkGalPresent.AutoSize = true; + this.chkGalPresent.Enabled = false; + this.chkGalPresent.Location = new System.Drawing.Point(6, 42); + this.chkGalPresent.Name = "chkGalPresent"; + this.chkGalPresent.Size = new System.Drawing.Size(167, 17); + this.chkGalPresent.TabIndex = 1; + this.chkGalPresent.Text = "Наличие гальваноразвязки"; + this.chkGalPresent.UseVisualStyleBackColor = true; + // + // chkDacPresent + // + this.chkDacPresent.AutoSize = true; + this.chkDacPresent.Enabled = false; + this.chkDacPresent.Location = new System.Drawing.Point(6, 19); + this.chkDacPresent.Name = "chkDacPresent"; + this.chkDacPresent.Size = new System.Drawing.Size(95, 17); + this.chkDacPresent.TabIndex = 0; + this.chkDacPresent.Text = "Наличие ЦАП"; + this.chkDacPresent.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.btnSetAdcFreq); + this.groupBox2.Controls.Add(this.label5); + this.groupBox2.Controls.Add(this.label4); + this.groupBox2.Controls.Add(this.label3); + this.groupBox2.Controls.Add(this.edtDinFreq); + this.groupBox2.Controls.Add(this.edtAdcFreqLch); + this.groupBox2.Controls.Add(this.edtAdcFreq); + this.groupBox2.Location = new System.Drawing.Point(27, 247); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(518, 60); + this.groupBox2.TabIndex = 4; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "Частоты синхронного сбора"; + // + // btnSetAdcFreq + // + this.btnSetAdcFreq.Location = new System.Drawing.Point(437, 32); + this.btnSetAdcFreq.Name = "btnSetAdcFreq"; + this.btnSetAdcFreq.Size = new System.Drawing.Size(75, 23); + this.btnSetAdcFreq.TabIndex = 10; + this.btnSetAdcFreq.Text = "Установить"; + this.btnSetAdcFreq.UseVisualStyleBackColor = true; + this.btnSetAdcFreq.Click += new System.EventHandler(this.btnSetAdcFreq_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(291, 16); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(170, 13); + this.label5.TabIndex = 9; + this.label5.Text = "Частота синхронного ввода (Гц)"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(159, 15); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(118, 13); + this.label4.TabIndex = 8; + this.label4.Text = "Частота на канал (Гц)"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(7, 15); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(143, 13); + this.label3.TabIndex = 7; + this.label3.Text = "Частота сбора данных (Гц)"; + // + // edtDinFreq + // + this.edtDinFreq.Location = new System.Drawing.Point(294, 34); + this.edtDinFreq.Name = "edtDinFreq"; + this.edtDinFreq.Size = new System.Drawing.Size(126, 20); + this.edtDinFreq.TabIndex = 6; + this.edtDinFreq.Text = "2000000"; + // + // edtAdcFreqLch + // + this.edtAdcFreqLch.Location = new System.Drawing.Point(162, 34); + this.edtAdcFreqLch.Name = "edtAdcFreqLch"; + this.edtAdcFreqLch.Size = new System.Drawing.Size(126, 20); + this.edtAdcFreqLch.TabIndex = 5; + this.edtAdcFreqLch.Text = "2000000"; + // + // edtAdcFreq + // + this.edtAdcFreq.Location = new System.Drawing.Point(6, 34); + this.edtAdcFreq.Name = "edtAdcFreq"; + this.edtAdcFreq.Size = new System.Drawing.Size(126, 20); + this.edtAdcFreq.TabIndex = 0; + this.edtAdcFreq.Text = "2000000"; + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.chkSyncDin); + this.groupBox3.Controls.Add(this.edtDin_Result); + this.groupBox3.Controls.Add(this.edtLCh3_Result); + this.groupBox3.Controls.Add(this.edtLCh2_Result); + this.groupBox3.Controls.Add(this.cbbLCh3_Mode); + this.groupBox3.Controls.Add(this.label10); + this.groupBox3.Controls.Add(this.cbbLCh3_Range); + this.groupBox3.Controls.Add(this.cbbLCh2_Mode); + this.groupBox3.Controls.Add(this.cbbLCh3_Channel); + this.groupBox3.Controls.Add(this.label9); + this.groupBox3.Controls.Add(this.cbbLCh2_Range); + this.groupBox3.Controls.Add(this.label8); + this.groupBox3.Controls.Add(this.cbbLCh2_Channel); + this.groupBox3.Controls.Add(this.edtLCh1_Result); + this.groupBox3.Controls.Add(this.cbbLCh1_Mode); + this.groupBox3.Controls.Add(this.cbbLCh1_Range); + this.groupBox3.Controls.Add(this.label7); + this.groupBox3.Controls.Add(this.cbbLCh1_Channel); + this.groupBox3.Controls.Add(this.label6); + this.groupBox3.Controls.Add(this.cbbLChCnt); + this.groupBox3.Location = new System.Drawing.Point(27, 377); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(518, 166); + this.groupBox3.TabIndex = 5; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Каналы АЦП"; + // + // chkSyncDin + // + this.chkSyncDin.AutoSize = true; + this.chkSyncDin.Location = new System.Drawing.Point(182, 140); + this.chkSyncDin.Name = "chkSyncDin"; + this.chkSyncDin.Size = new System.Drawing.Size(189, 17); + this.chkSyncDin.TabIndex = 17; + this.chkSyncDin.Text = "Разрешение синхронного ввода"; + this.chkSyncDin.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.chkSyncDin.UseVisualStyleBackColor = true; + // + // edtDin_Result + // + this.edtDin_Result.Location = new System.Drawing.Point(380, 138); + this.edtDin_Result.Name = "edtDin_Result"; + this.edtDin_Result.Size = new System.Drawing.Size(107, 20); + this.edtDin_Result.TabIndex = 16; + // + // edtLCh3_Result + // + this.edtLCh3_Result.Location = new System.Drawing.Point(380, 112); + this.edtLCh3_Result.Name = "edtLCh3_Result"; + this.edtLCh3_Result.Size = new System.Drawing.Size(107, 20); + this.edtLCh3_Result.TabIndex = 15; + // + // edtLCh2_Result + // + this.edtLCh2_Result.Location = new System.Drawing.Point(380, 85); + this.edtLCh2_Result.Name = "edtLCh2_Result"; + this.edtLCh2_Result.Size = new System.Drawing.Size(107, 20); + this.edtLCh2_Result.TabIndex = 11; + // + // cbbLCh3_Mode + // + this.cbbLCh3_Mode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh3_Mode.FormattingEnabled = true; + this.cbbLCh3_Mode.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh3_Mode.Items.AddRange(new object[] { + "С общей землей", + "Дифференциальный", + "Измерение нуля"}); + this.cbbLCh3_Mode.Location = new System.Drawing.Point(182, 111); + this.cbbLCh3_Mode.Name = "cbbLCh3_Mode"; + this.cbbLCh3_Mode.Size = new System.Drawing.Size(175, 21); + this.cbbLCh3_Mode.TabIndex = 14; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(386, 41); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(59, 13); + this.label10.TabIndex = 10; + this.label10.Text = "Результат"; + // + // cbbLCh3_Range + // + this.cbbLCh3_Range.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh3_Range.FormattingEnabled = true; + this.cbbLCh3_Range.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh3_Range.Items.AddRange(new object[] { + "10 В", + "5 В", + "2 В", + "1 В", + "0.5 В", + "0.2 В"}); + this.cbbLCh3_Range.Location = new System.Drawing.Point(73, 111); + this.cbbLCh3_Range.Name = "cbbLCh3_Range"; + this.cbbLCh3_Range.Size = new System.Drawing.Size(75, 21); + this.cbbLCh3_Range.TabIndex = 13; + // + // cbbLCh2_Mode + // + this.cbbLCh2_Mode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh2_Mode.FormattingEnabled = true; + this.cbbLCh2_Mode.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh2_Mode.Items.AddRange(new object[] { + "С общей землей", + "Дифференциальный", + "Измерение нуля"}); + this.cbbLCh2_Mode.Location = new System.Drawing.Point(182, 84); + this.cbbLCh2_Mode.Name = "cbbLCh2_Mode"; + this.cbbLCh2_Mode.Size = new System.Drawing.Size(175, 21); + this.cbbLCh2_Mode.TabIndex = 10; + // + // cbbLCh3_Channel + // + this.cbbLCh3_Channel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh3_Channel.FormattingEnabled = true; + this.cbbLCh3_Channel.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh3_Channel.Items.AddRange(new object[] { + "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"}); + this.cbbLCh3_Channel.Location = new System.Drawing.Point(8, 111); + this.cbbLCh3_Channel.Name = "cbbLCh3_Channel"; + this.cbbLCh3_Channel.Size = new System.Drawing.Size(46, 21); + this.cbbLCh3_Channel.TabIndex = 12; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(185, 41); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(101, 13); + this.label9.TabIndex = 9; + this.label9.Text = "Режим измерения"; + // + // cbbLCh2_Range + // + this.cbbLCh2_Range.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh2_Range.FormattingEnabled = true; + this.cbbLCh2_Range.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh2_Range.Items.AddRange(new object[] { + "10 В", + "5 В", + "2 В", + "1 В", + "0.5 В", + "0.2 В"}); + this.cbbLCh2_Range.Location = new System.Drawing.Point(73, 84); + this.cbbLCh2_Range.Name = "cbbLCh2_Range"; + this.cbbLCh2_Range.Size = new System.Drawing.Size(75, 21); + this.cbbLCh2_Range.TabIndex = 9; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(72, 41); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(58, 13); + this.label8.TabIndex = 8; + this.label8.Text = "Диапазон"; + // + // cbbLCh2_Channel + // + this.cbbLCh2_Channel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh2_Channel.FormattingEnabled = true; + this.cbbLCh2_Channel.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh2_Channel.Items.AddRange(new object[] { + "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"}); + this.cbbLCh2_Channel.Location = new System.Drawing.Point(8, 84); + this.cbbLCh2_Channel.Name = "cbbLCh2_Channel"; + this.cbbLCh2_Channel.Size = new System.Drawing.Size(46, 21); + this.cbbLCh2_Channel.TabIndex = 8; + // + // edtLCh1_Result + // + this.edtLCh1_Result.Location = new System.Drawing.Point(380, 58); + this.edtLCh1_Result.Name = "edtLCh1_Result"; + this.edtLCh1_Result.Size = new System.Drawing.Size(107, 20); + this.edtLCh1_Result.TabIndex = 7; + // + // cbbLCh1_Mode + // + this.cbbLCh1_Mode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh1_Mode.FormattingEnabled = true; + this.cbbLCh1_Mode.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh1_Mode.Items.AddRange(new object[] { + "С общей землей", + "Дифференциальный", + "Измерение нуля"}); + this.cbbLCh1_Mode.Location = new System.Drawing.Point(182, 57); + this.cbbLCh1_Mode.Name = "cbbLCh1_Mode"; + this.cbbLCh1_Mode.Size = new System.Drawing.Size(175, 21); + this.cbbLCh1_Mode.TabIndex = 6; + // + // cbbLCh1_Range + // + this.cbbLCh1_Range.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh1_Range.FormattingEnabled = true; + this.cbbLCh1_Range.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh1_Range.Items.AddRange(new object[] { + "10 В", + "5 В", + "2 В", + "1 В", + "0.5 В", + "0.2 В"}); + this.cbbLCh1_Range.Location = new System.Drawing.Point(73, 57); + this.cbbLCh1_Range.Name = "cbbLCh1_Range"; + this.cbbLCh1_Range.Size = new System.Drawing.Size(75, 21); + this.cbbLCh1_Range.TabIndex = 5; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(6, 41); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(38, 13); + this.label7.TabIndex = 4; + this.label7.Text = "Канал"; + // + // cbbLCh1_Channel + // + this.cbbLCh1_Channel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLCh1_Channel.FormattingEnabled = true; + this.cbbLCh1_Channel.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbLCh1_Channel.Items.AddRange(new object[] { + "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"}); + this.cbbLCh1_Channel.Location = new System.Drawing.Point(8, 57); + this.cbbLCh1_Channel.Name = "cbbLCh1_Channel"; + this.cbbLCh1_Channel.Size = new System.Drawing.Size(46, 21); + this.cbbLCh1_Channel.TabIndex = 2; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(25, 22); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(171, 13); + this.label6.TabIndex = 1; + this.label6.Text = "Количество логических каналов"; + // + // cbbLChCnt + // + this.cbbLChCnt.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbLChCnt.FormattingEnabled = true; + this.cbbLChCnt.Items.AddRange(new object[] { + "1", + "2", + "3"}); + this.cbbLChCnt.Location = new System.Drawing.Point(211, 14); + this.cbbLChCnt.Name = "cbbLChCnt"; + this.cbbLChCnt.Size = new System.Drawing.Size(49, 21); + this.cbbLChCnt.TabIndex = 0; + // + // btnStart + // + this.btnStart.Location = new System.Drawing.Point(27, 92); + this.btnStart.Name = "btnStart"; + this.btnStart.Size = new System.Drawing.Size(212, 23); + this.btnStart.TabIndex = 6; + this.btnStart.Text = "Запуск сбора данных"; + this.btnStart.UseVisualStyleBackColor = true; + this.btnStart.Click += new System.EventHandler(this.btnStart_Click); + // + // btnStop + // + this.btnStop.Location = new System.Drawing.Point(27, 121); + this.btnStop.Name = "btnStop"; + this.btnStop.Size = new System.Drawing.Size(212, 23); + this.btnStop.TabIndex = 7; + this.btnStop.Text = "Останов сбора данных"; + this.btnStop.UseVisualStyleBackColor = true; + this.btnStop.Click += new System.EventHandler(this.btnStop_Click); + // + // btnAsyncAdcFrame + // + this.btnAsyncAdcFrame.Location = new System.Drawing.Point(27, 549); + this.btnAsyncAdcFrame.Name = "btnAsyncAdcFrame"; + this.btnAsyncAdcFrame.Size = new System.Drawing.Size(212, 23); + this.btnAsyncAdcFrame.TabIndex = 8; + this.btnAsyncAdcFrame.Text = "Асинхронный ввод кадра АЦП"; + this.btnAsyncAdcFrame.UseVisualStyleBackColor = true; + this.btnAsyncAdcFrame.Click += new System.EventHandler(this.btnAsyncAdcFrame_Click); + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.cbbSyncStartMode); + this.groupBox4.Controls.Add(this.label12); + this.groupBox4.Controls.Add(this.cbbSyncMode); + this.groupBox4.Controls.Add(this.label11); + this.groupBox4.Location = new System.Drawing.Point(27, 307); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(518, 64); + this.groupBox4.TabIndex = 9; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "Синхронизация"; + // + // cbbSyncStartMode + // + this.cbbSyncStartMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbSyncStartMode.FormattingEnabled = true; + this.cbbSyncStartMode.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbSyncStartMode.Items.AddRange(new object[] { + "Внутренний", + "От внешнего мастера", + "Фронт сигнала DI_SYN1", + "Фронт сигнала DI_SYN2", + "Спад сигнала DI_SYN1", + "Спад сигнала DI_SYN2"}); + this.cbbSyncStartMode.Location = new System.Drawing.Point(228, 37); + this.cbbSyncStartMode.Name = "cbbSyncStartMode"; + this.cbbSyncStartMode.Size = new System.Drawing.Size(176, 21); + this.cbbSyncStartMode.TabIndex = 11; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(228, 16); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(242, 13); + this.label12.TabIndex = 10; + this.label12.Text = "Источник запуска синхронного ввода/вывода"; + // + // cbbSyncMode + // + this.cbbSyncMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.cbbSyncMode.FormattingEnabled = true; + this.cbbSyncMode.ImeMode = System.Windows.Forms.ImeMode.Hiragana; + this.cbbSyncMode.Items.AddRange(new object[] { + "Внутренний", + "От внешнего мастера", + "Фронт сигнала DI_SYN1", + "Фронт сигнала DI_SYN2", + "Спад сигнала DI_SYN1", + "Спад сигнала DI_SYN2"}); + this.cbbSyncMode.Location = new System.Drawing.Point(10, 37); + this.cbbSyncMode.Name = "cbbSyncMode"; + this.cbbSyncMode.Size = new System.Drawing.Size(176, 21); + this.cbbSyncMode.TabIndex = 9; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(7, 16); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(179, 13); + this.label11.TabIndex = 8; + this.label11.Text = "Источник частоты синхронизации"; + // + // btnAsyncDigIn + // + this.btnAsyncDigIn.Location = new System.Drawing.Point(27, 578); + this.btnAsyncDigIn.Name = "btnAsyncDigIn"; + this.btnAsyncDigIn.Size = new System.Drawing.Size(212, 23); + this.btnAsyncDigIn.TabIndex = 10; + this.btnAsyncDigIn.Text = "Асинхронный ввод цифровых линий"; + this.btnAsyncDigIn.UseVisualStyleBackColor = true; + this.btnAsyncDigIn.Click += new System.EventHandler(this.btnAsyncDigIn_Click); + // + // btnAsyncDigOut + // + this.btnAsyncDigOut.Location = new System.Drawing.Point(27, 607); + this.btnAsyncDigOut.Name = "btnAsyncDigOut"; + this.btnAsyncDigOut.Size = new System.Drawing.Size(212, 23); + this.btnAsyncDigOut.TabIndex = 11; + this.btnAsyncDigOut.Text = "Асинхронный вывод цифровых линий"; + this.btnAsyncDigOut.UseVisualStyleBackColor = true; + this.btnAsyncDigOut.Click += new System.EventHandler(this.btnAsyncDigOut_Click); + // + // btnAsyncDac1 + // + this.btnAsyncDac1.Location = new System.Drawing.Point(27, 636); + this.btnAsyncDac1.Name = "btnAsyncDac1"; + this.btnAsyncDac1.Size = new System.Drawing.Size(212, 23); + this.btnAsyncDac1.TabIndex = 12; + this.btnAsyncDac1.Text = "Асинхронный вывод на ЦАП1 (Вольты)"; + this.btnAsyncDac1.UseVisualStyleBackColor = true; + this.btnAsyncDac1.Click += new System.EventHandler(this.btnAsyncDac1_Click); + // + // btnAsyncDac2 + // + this.btnAsyncDac2.Location = new System.Drawing.Point(27, 665); + this.btnAsyncDac2.Name = "btnAsyncDac2"; + this.btnAsyncDac2.Size = new System.Drawing.Size(212, 23); + this.btnAsyncDac2.TabIndex = 13; + this.btnAsyncDac2.Text = "Асинхронный вывод на ЦАП2 (Вольты)"; + this.btnAsyncDac2.UseVisualStyleBackColor = true; + this.btnAsyncDac2.Click += new System.EventHandler(this.btnAsyncDac2_Click); + // + // edtAsyncDigIn + // + this.edtAsyncDigIn.Location = new System.Drawing.Point(255, 580); + this.edtAsyncDigIn.Name = "edtAsyncDigIn"; + this.edtAsyncDigIn.Size = new System.Drawing.Size(101, 20); + this.edtAsyncDigIn.TabIndex = 14; + // + // edtAsyncDigOut + // + this.edtAsyncDigOut.Location = new System.Drawing.Point(255, 610); + this.edtAsyncDigOut.Name = "edtAsyncDigOut"; + this.edtAsyncDigOut.Size = new System.Drawing.Size(101, 20); + this.edtAsyncDigOut.TabIndex = 15; + this.edtAsyncDigOut.Text = "0x0000"; + // + // edtAsyncDac1 + // + this.edtAsyncDac1.Location = new System.Drawing.Point(255, 639); + this.edtAsyncDac1.Name = "edtAsyncDac1"; + this.edtAsyncDac1.Size = new System.Drawing.Size(58, 20); + this.edtAsyncDac1.TabIndex = 16; + this.edtAsyncDac1.Text = "5"; + // + // edtAsyncDac2 + // + this.edtAsyncDac2.Location = new System.Drawing.Point(255, 665); + this.edtAsyncDac2.Name = "edtAsyncDac2"; + this.edtAsyncDac2.Size = new System.Drawing.Size(58, 20); + this.edtAsyncDac2.TabIndex = 17; + this.edtAsyncDac2.Text = "5"; + // + // chkEthSupport + // + this.chkEthSupport.AutoSize = true; + this.chkEthSupport.Enabled = false; + this.chkEthSupport.Location = new System.Drawing.Point(6, 85); + this.chkEthSupport.Name = "chkEthSupport"; + this.chkEthSupport.Size = new System.Drawing.Size(182, 17); + this.chkEthSupport.TabIndex = 9; + this.chkEthSupport.Text = "Наличие сетевого интерфейса"; + this.chkEthSupport.UseVisualStyleBackColor = true; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(74, 157); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(124, 13); + this.label13.TabIndex = 11; + this.label13.Text = "Версия прошивки ARM"; + // + // edtMcuVer + // + this.edtMcuVer.Enabled = false; + this.edtMcuVer.Location = new System.Drawing.Point(6, 154); + this.edtMcuVer.Name = "edtMcuVer"; + this.edtMcuVer.Size = new System.Drawing.Size(62, 20); + this.edtMcuVer.TabIndex = 10; + // + // edtIpAddr + // + this.edtIpAddr.Location = new System.Drawing.Point(27, 203); + this.edtIpAddr.Name = "edtIpAddr"; + this.edtIpAddr.Size = new System.Drawing.Size(212, 20); + this.edtIpAddr.TabIndex = 18; + this.edtIpAddr.Text = "192.168.0.1"; + // + // btnOpenByIP + // + this.btnOpenByIP.Location = new System.Drawing.Point(27, 174); + this.btnOpenByIP.Name = "btnOpenByIP"; + this.btnOpenByIP.Size = new System.Drawing.Size(212, 23); + this.btnOpenByIP.TabIndex = 19; + this.btnOpenByIP.Text = "Установить соединение по IP-адресу"; + this.btnOpenByIP.UseVisualStyleBackColor = true; + this.btnOpenByIP.Click += new System.EventHandler(this.btnOpenByIP_Click); + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(553, 736); + this.Controls.Add(this.btnOpenByIP); + this.Controls.Add(this.edtIpAddr); + this.Controls.Add(this.edtAsyncDac2); + this.Controls.Add(this.edtAsyncDac1); + this.Controls.Add(this.edtAsyncDigOut); + this.Controls.Add(this.edtAsyncDigIn); + this.Controls.Add(this.btnAsyncDac2); + this.Controls.Add(this.btnAsyncDac1); + this.Controls.Add(this.btnAsyncDigOut); + this.Controls.Add(this.btnAsyncDigIn); + this.Controls.Add(this.groupBox4); + this.Controls.Add(this.btnAsyncAdcFrame); + this.Controls.Add(this.btnStop); + this.Controls.Add(this.btnStart); + this.Controls.Add(this.groupBox3); + this.Controls.Add(this.groupBox2); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.btnOpen); + this.Controls.Add(this.cbbSerialList); + this.Controls.Add(this.btnRefreshDeviceList); + this.Name = "MainForm"; + this.Text = "L502/E502 example"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox3.ResumeLayout(false); + this.groupBox3.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnRefreshDeviceList; + private System.Windows.Forms.ComboBox cbbSerialList; + private System.Windows.Forms.Button btnOpen; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.CheckBox chkBfPresent; + private System.Windows.Forms.CheckBox chkGalPresent; + private System.Windows.Forms.CheckBox chkDacPresent; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox edtPldaVer; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox edtFpgaVer; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.Button btnSetAdcFreq; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox edtDinFreq; + private System.Windows.Forms.TextBox edtAdcFreqLch; + private System.Windows.Forms.TextBox edtAdcFreq; + private System.Windows.Forms.GroupBox groupBox3; + private System.Windows.Forms.ComboBox cbbLChCnt; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox cbbLCh1_Channel; + private System.Windows.Forms.ComboBox cbbLCh1_Mode; + private System.Windows.Forms.ComboBox cbbLCh1_Range; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.CheckBox chkSyncDin; + private System.Windows.Forms.TextBox edtDin_Result; + private System.Windows.Forms.TextBox edtLCh3_Result; + private System.Windows.Forms.TextBox edtLCh2_Result; + private System.Windows.Forms.ComboBox cbbLCh3_Mode; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox cbbLCh3_Range; + private System.Windows.Forms.ComboBox cbbLCh2_Mode; + private System.Windows.Forms.ComboBox cbbLCh3_Channel; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox cbbLCh2_Range; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.ComboBox cbbLCh2_Channel; + private System.Windows.Forms.TextBox edtLCh1_Result; + private System.Windows.Forms.Button btnStart; + private System.Windows.Forms.Button btnStop; + private System.Windows.Forms.Button btnAsyncAdcFrame; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.ComboBox cbbSyncStartMode; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.ComboBox cbbSyncMode; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Button btnAsyncDigIn; + private System.Windows.Forms.Button btnAsyncDigOut; + private System.Windows.Forms.Button btnAsyncDac1; + private System.Windows.Forms.Button btnAsyncDac2; + private System.Windows.Forms.TextBox edtAsyncDigIn; + private System.Windows.Forms.TextBox edtAsyncDigOut; + private System.Windows.Forms.TextBox edtAsyncDac1; + private System.Windows.Forms.TextBox edtAsyncDac2; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox edtMcuVer; + private System.Windows.Forms.CheckBox chkEthSupport; + private System.Windows.Forms.TextBox edtIpAddr; + private System.Windows.Forms.Button btnOpenByIP; + } +} + diff --git a/SDK/examples/cs/x502_general/MainForm.cs b/SDK/examples/cs/x502_general/MainForm.cs new file mode 100644 index 0000000..28dd939 --- /dev/null +++ b/SDK/examples/cs/x502_general/MainForm.cs @@ -0,0 +1,592 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.Net; + +using x502api; +using lpcieapi; + +namespace x502_example +{ + public partial class MainForm : Form + { + const uint RECV_BUF_SIZE = 8*1024*1024; + const uint RECV_TOUT = 250; + + X502.DevRec[] devrecs; + + X502 hnd; /* Описатель модуля с которым работаем (null, если связи нет) */ + Thread thread; /* Объект потока для синхронного сбора */ + bool reqStop; /* Запрос на останов потока сбора данных */ + bool threadRunning; /* Признак, идет ли сбор данных в отдельном потоке */ + + UInt32[] rcv_buf; /* буфер для приема сырых данных */ + double[] adcData; /* буфер для данных АЦП */ + UInt32[] dinData; /* буфер для отсчетов цифровых входов */ + UInt32 adcSize, dinSize; /* размер действительных данных в adcData и dinData */ + UInt32 firstLch; /* номер логического канала, которому соответствует отсчет в adcData[0] */ + + + + + + private delegate void finishThreadDelegate(lpcie.Errs err); + private delegate void updateDateDelegate(); + + /* Обновление элементов управления, значениями, снятыми при синхронном вводе. + * Так работа с интерфейсом может быть только из основного потока, а + * фунция вызывается из потока сбора данных, то если мы находимся + * в потоке сбора данных, планируем ее выполнение в основном потоке */ + private void UpdateData() + { + if (this.InvokeRequired) + { + this.Invoke(new updateDateDelegate(this.UpdateData)); + } + else + { + TextBox[] lchResEdits = {edtLCh1_Result, edtLCh2_Result, edtLCh3_Result}; + UInt32 lch_cnt = hnd.LChannelCount; + /* устанавливаем в индикаторах значение первого отсчета из массива */ + for (uint i = 0; (i < lch_cnt) && (i < adcSize); i++) + lchResEdits[(firstLch + i) % lch_cnt].Text = adcData[i].ToString("F7"); + + /* если есть данные цифрового выхода, то устанавливаем индикатор + в соответствии с первым значением */ + if (dinSize>0) + edtDin_Result.Text = dinData[0].ToString("X5"); + else + edtDin_Result.Text = ""; + } + } + + /* Функция, вызываемая по завершению потока сбора данных. + * Так как она работает с интерфейсом, то при вызове из другого потока, + * она планируется на выполнения в основном потоке, как и UpdateData */ + private void finishThread(lpcie.Errs err) + { + if (this.InvokeRequired) + this.Invoke(new finishThreadDelegate(this.finishThread), err); + else + { + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Сбор данных завершен с ошибкой", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + threadRunning = false; + updateControls(); + } + } + + + /* Функция синхронного сбора данных. Выполняется в отдельном потоке */ + private void threadFunc() + { + reqStop = false; + /* запускаем синхронные потоки ввода-вывода*/ + lpcie.Errs err = hnd.StreamsStart(); + if (err == lpcie.Errs.OK) + { + /* выполняем прием пока не произойдет ошибка или + не будет запроса на останов от основного приложения */ + while (!reqStop && (err == lpcie.Errs.OK)) + { + /* принимаем данные синхронного ввода */ + Int32 rcv_size = hnd.Recv(rcv_buf, RECV_BUF_SIZE, RECV_TOUT); + /* значение меньше нуля означает ошибку... */ + if (rcv_size < 0) + err = (lpcie.Errs)rcv_size; + else if (rcv_size > 0) + { + /* если больше нуля - значит приняли новые данные */ + dinSize = RECV_BUF_SIZE; + adcSize = RECV_BUF_SIZE; + /* получаем номер лог. какнала, соответствующий первому + отсчету АЦП, так как до этого могли обработать + некратное количество кадров */ + firstLch = hnd.NextExpectedLchNum; + + /* разбираем данные на синхронный ввод и отсчеты АЦП и + переводим АЦП в Вольты */ + err = hnd.ProcessData(rcv_buf, (uint)rcv_size, X502.ProcFlags.VOLT, + adcData, ref adcSize, dinData, ref dinSize); + + if (err == lpcie.Errs.OK) + { + /* обновляем значения элементов управления */ + UpdateData(); + } + } + } + + /* по выходу из цикла отсанавливаем поток. + Чтобы не сбросить код ошибки (если вышли по ошибке) + результат останова сохраняем в отдельную переменную */ + lpcie.Errs stop_err = hnd.StreamsStop(); + if (err == lpcie.Errs.OK) + err = stop_err; + } + + /* завершаем поток */ + finishThread(err); + } + + + + + + /* обновление состояния элементов управления (какие разрешены, какие нет) */ + private void updateControls() + { + btnRefreshDeviceList.Enabled = hnd==null; + cbbSerialList.Enabled = hnd==null; + + btnOpen.Text = hnd==null ? "Установить связь с устройством" : + "Разорвать связь с устройством"; + + btnOpen.Enabled = (hnd!=null) || (cbbSerialList.SelectedItem != null); + btnOpenByIP.Enabled = (hnd == null); + edtIpAddr.Enabled = (hnd == null); + + chkSyncDin.Enabled = (hnd != null) && !threadRunning; + btnStart.Enabled = (hnd != null) && !threadRunning; + btnStop.Enabled = (hnd != null) && threadRunning; + + btnSetAdcFreq.Enabled = (hnd != null) && !threadRunning; + + btnAsyncDigOut.Enabled = (hnd != null); + btnAsyncDigIn.Enabled = (hnd != null); + btnAsyncDac1.Enabled = (hnd != null) && chkDacPresent.Checked; + btnAsyncDac2.Enabled = (hnd != null) && chkDacPresent.Checked; + btnAsyncAdcFrame.Enabled = (hnd != null) && !threadRunning; + } + + + private void deviceClose() + { + if (hnd != null) + { + //останов сбора данных + if (threadRunning) + { + reqStop = true; + + /* ожидаем завершения потока. Так как + * поток работает с GUI и планирует выполнение части + * функций в основном потоке, то мы не можем сдесь просто + * сделать Join, вызываем Application.DoEvents(), чтобы + * в нем обработать запланированные UpdateData()/finishThread() */ + while (threadRunning) + { + Application.DoEvents(); + } + } + + // закрытие связи с модулем + hnd.Close(); + // память освободится диспетчером мусора, т.к. нет больше ссылок + hnd = null; + } + } + + private void refreshDevList() + { + cbbSerialList.Items.Clear(); + + //получаем список серийных номеров + X502.DevRec[] pci_devrecs; + X502.DevRec[] usb_devrecs; + Int32 res = L502.GetDevRecordsList(out pci_devrecs, 0); + res = E502.UsbGetDevRecordsList(out usb_devrecs, 0); + + devrecs = new X502.DevRec[pci_devrecs.Length + usb_devrecs.Length]; + pci_devrecs.CopyTo(devrecs, 0); + usb_devrecs.CopyTo(devrecs, pci_devrecs.Length); + + + /* заполняем полученные серийные номера в ComboBox */ + for (int i = 0; i < devrecs.Length; i++) + cbbSerialList.Items.Add(devrecs[i].DevName + ", " + devrecs[i].Serial); + if (devrecs.Length > 0) + cbbSerialList.SelectedIndex = 0; + + + updateControls(); + } + + /* установка частот сбора данных из элементов управления и обновление их реально + * установленными значениями */ + lpcie.Errs setAdcFreq() + { + lpcie.Errs err = lpcie.Errs.OK; + double f_acq, f_lch, f_din; + + f_acq = Convert.ToDouble(edtAdcFreq.Text); + f_lch = Convert.ToDouble(edtAdcFreqLch.Text); + f_din = Convert.ToDouble(edtDinFreq.Text); + + // устанавливаем требуемую частоту сбора. + err = hnd.SetAdcFreq(ref f_acq, ref f_lch); + if (err == lpcie.Errs.OK) + { + // обновляем значение индикатора, для отображения + // реально установившейся частоты + edtAdcFreq.Text = f_acq.ToString(); + edtAdcFreqLch.Text = f_lch.ToString(); + // Устанавливаем частоту синхронного сбора + err = hnd.SetDinFreq(ref f_din); + if (err == lpcie.Errs.OK) + edtDinFreq.Text = f_din.ToString(); + } + + return err; + } + + /* настройка параметров модуля значениями из элементов управления */ + lpcie.Errs setupParams() + { + lpcie.Errs err = lpcie.Errs.OK; + /* таблица соответствия индексов в ComboBox и кодов режима измерения */ + X502.LchMode[] f_mode_tbl = {X502.LchMode.COMM, X502.LchMode.DIFF, X502.LchMode.ZERO}; + /* таблица соответствия индексов в ComboBox и кодов диапазонов АЦП */ + X502.AdcRange[] f_range_tbl = {X502.AdcRange.RANGE_10, X502.AdcRange.RANGE_5, X502.AdcRange.RANGE_2, + X502.AdcRange.RANGE_1, X502.AdcRange.RANGE_05, X502.AdcRange.RANGE_02}; + /* таблица соответствия индексов в ComboBox и кодов источника синхронизации */ + X502.Sync[] f_sync_tbl = {X502.Sync.INTERNAL, X502.Sync.EXTERNAL_MASTER, + X502.Sync.DI_SYN1_RISE, X502.Sync.DI_SYN2_RISE, + X502.Sync.DI_SYN1_FALL, X502.Sync.DI_SYN2_FALL}; + + UInt32 lch_cnt = Convert.ToUInt32(cbbLChCnt.Text); + + /* Устанавливаем кол-во логических каналов */ + hnd.LChannelCount = lch_cnt; + + /* Настраниваем таблицу логических каналов */ + err = hnd.SetLChannel(0, Convert.ToUInt32(cbbLCh1_Channel.Text) - 1, + f_mode_tbl[cbbLCh1_Mode.SelectedIndex], f_range_tbl[cbbLCh1_Range.SelectedIndex], 0); + if ((err == lpcie.Errs.OK) && (lch_cnt >= 2)) + { + err = hnd.SetLChannel(1, Convert.ToUInt32(cbbLCh2_Channel.Text) - 1, + f_mode_tbl[cbbLCh2_Mode.SelectedIndex], f_range_tbl[cbbLCh2_Range.SelectedIndex], 0); + } + if ((err == lpcie.Errs.OK) && (lch_cnt >= 3)) + { + err = hnd.SetLChannel(2, Convert.ToUInt32(cbbLCh3_Channel.Text) - 1, + f_mode_tbl[cbbLCh3_Mode.SelectedIndex], f_range_tbl[cbbLCh3_Range.SelectedIndex], 0); + } + + /* Настраиваем источник частоты синхронизации и запуска сбора */ + if (err == lpcie.Errs.OK) + { + hnd.SyncMode = f_sync_tbl[cbbSyncMode.SelectedIndex]; + hnd.SyncStartMode = f_sync_tbl[cbbSyncStartMode.SelectedIndex]; + } + + /* настраиваем частоту сбора с АЦП */ + if (err == lpcie.Errs.OK) + err = setAdcFreq(); + + /* Записываем настройки в модуль */ + if (err == lpcie.Errs.OK) + err = hnd.Configure(0); + + return err; + } + + lpcie.Errs setSyncDinStream() + { + lpcie.Errs err; + /* разрешаем или запрещаем поток синхронного ввода + с цифровых линий в зависимости от состояния переключателя */ + if (chkSyncDin.Checked) + err = hnd.StreamsEnable(X502.Streams.DIN); + else + err = hnd.StreamsDisable(X502.Streams.DIN); + return err; + } + + + + public MainForm() + { + InitializeComponent(); + + cbbLChCnt.SelectedIndex = 2; + cbbLCh1_Channel.SelectedIndex = 0; + cbbLCh2_Channel.SelectedIndex = 1; + cbbLCh3_Channel.SelectedIndex = 2; + + cbbLCh1_Range.SelectedIndex = 0; + cbbLCh2_Range.SelectedIndex = 0; + cbbLCh3_Range.SelectedIndex = 0; + + cbbLCh1_Mode.SelectedIndex = 1; + cbbLCh2_Mode.SelectedIndex = 1; + cbbLCh3_Mode.SelectedIndex = 1; + + cbbSyncMode.SelectedIndex = 0; + cbbSyncStartMode.SelectedIndex = 0; + + rcv_buf = new UInt32[RECV_BUF_SIZE]; + dinData = new UInt32[RECV_BUF_SIZE]; + adcData = new double[RECV_BUF_SIZE]; + + + threadRunning = false; + + + refreshDevList(); + } + + private void btnRefreshDeviceList_Click(object sender, EventArgs e) + { + refreshDevList(); + } + + private void showDevInfo() + { + /* получаем информацию о модуле */ + X502.Info devinfo = hnd.DevInfo; + /* отображаем ее на панели */ + chkBfPresent.Checked = (devinfo.DevFlags & X502.DevFlags.BF_PRESENT) != 0; + chkDacPresent.Checked = (devinfo.DevFlags & X502.DevFlags.DAC_PRESENT) != 0; + chkGalPresent.Checked = (devinfo.DevFlags & X502.DevFlags.GAL_PRESENT) != 0; + chkEthSupport.Checked = (devinfo.DevFlags & X502.DevFlags.IFACE_SUPPORT_ETH) != 0; + + edtFpgaVer.Text = devinfo.FpgaVerString; + edtPldaVer.Text = string.Format("{0}", devinfo.PldaVer); + edtMcuVer.Text = devinfo.McuFirmwareVerString; + } + + + private void btnOpen_Click(object sender, EventArgs e) + { + if (hnd == null) + { + lpcie.Errs res; + + int idx = cbbSerialList.SelectedIndex; + if (idx >= 0) + { + /* создаем описатель модуля */ + hnd = X502.Create(devrecs[idx].DevName); + /* устанавливаем связь по выбранному серийному номеру */ + res = hnd.Open(devrecs[idx]); + if (res == lpcie.Errs.OK) + { + showDevInfo(); + } + else + { + MessageBox.Show(X502.GetErrorString(res), "Ошибка открытия модуля", MessageBoxButtons.OK, + MessageBoxIcon.Error); + hnd = null; + } + } + } + else + { + deviceClose(); + } + + updateControls(); + } + + private void btnOpenByIP_Click(object sender, EventArgs e) + { + /* создаем запись, соответствующую заданному адресу */ + X502.DevRec rec = E502.MakeDevRecordByIpAddr(IPAddress.Parse(edtIpAddr.Text), 0, 5000); + if (rec != null) + { + /* создание объекта */ + hnd = X502.Create(rec.DevName); + /* станавливаем связь устанавливаем связь по созданной записи */ + lpcie.Errs res = hnd.Open(rec); + if (res == lpcie.Errs.OK) + { + showDevInfo(); + } + else + { + MessageBox.Show(X502.GetErrorString(res), "Ошибка открытия модуля", MessageBoxButtons.OK, + MessageBoxIcon.Error); + hnd = null; + } + } + updateControls(); + + } + + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) + { + deviceClose(); + } + + private void btnSetAdcFreq_Click(object sender, EventArgs e) + { + if (hnd != null) + { + hnd.LChannelCount = Convert.ToUInt32(cbbLChCnt.Text); + + lpcie.Errs err = setAdcFreq(); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка установки частоты сбора", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void btnAsyncAdcFrame_Click(object sender, EventArgs e) + { + if (hnd != null) + { + /* устанавливаем параметры модуля */ + lpcie.Errs err = setupParams(); + + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка настройки параметров АЦП", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + if (err == lpcie.Errs.OK) + { + UInt32 lch_cnt = hnd.LChannelCount; + /* Создаем массив для приема количества отсчетов, равному количеству + * логических каналов */ + double[] adc_data = new double[lch_cnt]; + err = hnd.AsyncGetAdcFrame(X502.ProcFlags.VOLT, 1000, adc_data); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка приема кадра АЦП", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + /* выводим результат */ + edtLCh1_Result.Text = adc_data[0].ToString("F7"); + if (lch_cnt >= 2) + edtLCh2_Result.Text = adc_data[1].ToString("F7"); + else + edtLCh2_Result.Text = ""; + + if (lch_cnt >= 3) + edtLCh3_Result.Text = adc_data[2].ToString("F7"); + else + edtLCh3_Result.Text = ""; + + } + } + + } + + } + + private void btnAsyncDigIn_Click(object sender, EventArgs e) + { + if (hnd != null) + { + UInt32 din; + lpcie.Errs err = hnd.AsyncInDig(out din); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного ввода с цифровых линий", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + edtAsyncDigIn.Text = din.ToString("X5"); + } + } + } + + private void btnAsyncDigOut_Click(object sender, EventArgs e) + { + if (hnd != null) + { + UInt32 val = Convert.ToUInt32(edtAsyncDigOut.Text, 16); + lpcie.Errs err = hnd.AsyncOutDig(val, 0); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка асинхронного вывода на цифровые линии", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void btnAsyncDac1_Click(object sender, EventArgs e) + { + if (hnd != null) + { + double val = Convert.ToDouble(edtAsyncDac1.Text); ; + lpcie.Errs err = hnd.AsyncOutDac(X502.DacCh.CH1, val, X502.DacOutFlags.CALIBR | + X502.DacOutFlags.VOLT); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка вывода на ЦАП", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + } + + private void btnAsyncDac2_Click(object sender, EventArgs e) + { + if (hnd != null) + { + double val = Convert.ToDouble(edtAsyncDac2.Text); ; + lpcie.Errs err = hnd.AsyncOutDac(X502.DacCh.CH2, val, X502.DacOutFlags.CALIBR | + X502.DacOutFlags.VOLT); + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка вывода на ЦАП", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + + private void btnStart_Click(object sender, EventArgs e) + { + /* настраиваем все параметры в соответствии с элементами управления */ + lpcie.Errs err = setupParams(); + + + /* разрешаем синхронный ввод АЦП */ + if (err == lpcie.Errs.OK) + err = hnd.StreamsEnable(X502.Streams.ADC); + /* разрешаем синхронный ввод с цифровых линий в зависимости от переключателя */ + if (err == lpcie.Errs.OK) + err = setSyncDinStream(); + + if (err != lpcie.Errs.OK) + { + MessageBox.Show(X502.GetErrorString(err), "Ошибка настройки параметров модуля", + MessageBoxButtons.OK, MessageBoxIcon.Error); + } + else + { + /* создаем новый поток для сбора в нем данных */ + thread = new Thread(this.threadFunc); + threadRunning = true; + thread.Start(); + updateControls(); + } + } + + private void btnStop_Click(object sender, EventArgs e) + { + if (threadRunning) + reqStop = true; + btnStop.Enabled = false; + } + + + } +} diff --git a/SDK/examples/cs/x502_general/MainForm.resx b/SDK/examples/cs/x502_general/MainForm.resx new file mode 100644 index 0000000..5ea0895 --- /dev/null +++ b/SDK/examples/cs/x502_general/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SDK/examples/cs/x502_general/Program.cs b/SDK/examples/cs/x502_general/Program.cs new file mode 100644 index 0000000..8a7209b --- /dev/null +++ b/SDK/examples/cs/x502_general/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace x502_example +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/SDK/examples/cs/x502_general/Properties/AssemblyInfo.cs b/SDK/examples/cs/x502_general/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..31eab8b --- /dev/null +++ b/SDK/examples/cs/x502_general/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("l502_example")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("l502_example")] +[assembly: AssemblyCopyright("Copyright © 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d011dc13-469b-4bd3-9597-97af3ea785db")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SDK/examples/cs/x502_general/Properties/Resources.Designer.cs b/SDK/examples/cs/x502_general/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c239edf --- /dev/null +++ b/SDK/examples/cs/x502_general/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.269 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace l502_example.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("l502_example.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/SDK/examples/cs/x502_general/Properties/Resources.resx b/SDK/examples/cs/x502_general/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/SDK/examples/cs/x502_general/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SDK/examples/cs/x502_general/Properties/Settings.Designer.cs b/SDK/examples/cs/x502_general/Properties/Settings.Designer.cs new file mode 100644 index 0000000..9fd6525 --- /dev/null +++ b/SDK/examples/cs/x502_general/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.269 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace l502_example.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SDK/examples/cs/x502_general/x502_general.csproj b/SDK/examples/cs/x502_general/x502_general.csproj new file mode 100644 index 0000000..553e4de --- /dev/null +++ b/SDK/examples/cs/x502_general/x502_general.csproj @@ -0,0 +1,105 @@ + + + + Debug + x86 + 9.0.21022 + 2.0 + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE} + WinExe + Properties + x502_example + x502_example + v2.0 + + + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + DEBUG;TRACE + prompt + 4 + + + true + bin\Debug\ + DEBUG;TRACE + full + AnyCPU + prompt + + + bin\Release\ + DEBUG;TRACE + true + pdbonly + AnyCPU + prompt + + + + False + ..\..\..\..\lpcieNet\bin\Debug\lpcieNet.dll + + + + + + + + + + Form + + + MainForm.cs + + + + + MainForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/SDK/examples/cs/x502_general/x502_general.sln b/SDK/examples/cs/x502_general/x502_general.sln new file mode 100644 index 0000000..65c0697 --- /dev/null +++ b/SDK/examples/cs/x502_general/x502_general.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "x502_general", "x502_general.csproj", "{491BEE22-2D65-4112-B6A8-90FE8F15E5AE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Debug|x86.ActiveCfg = Debug|x86 + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Debug|x86.Build.0 = Debug|x86 + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Release|Any CPU.Build.0 = Release|Any CPU + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Release|x86.ActiveCfg = Release|x86 + {491BEE22-2D65-4112-B6A8-90FE8F15E5AE}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SDK/examples/vb6/l502_recv/MainForm.frm b/SDK/examples/vb6/l502_recv/MainForm.frm new file mode 100644 index 0000000..545a302 --- /dev/null +++ b/SDK/examples/vb6/l502_recv/MainForm.frm @@ -0,0 +1,225 @@ +VERSION 5.00 +Begin VB.Form MainForm + Caption = "L502. " + ClientHeight = 3240 + ClientLeft = 120 + ClientTop = 450 + ClientWidth = 6810 + LinkTopic = "1" + ScaleHeight = 3240 + ScaleWidth = 6810 + StartUpPosition = 3 'Windows Default + Begin VB.ListBox ResultList + Height = 1425 + ItemData = "MainForm.frx":0000 + Left = 3720 + List = "MainForm.frx":0002 + TabIndex = 3 + Top = 1440 + Width = 2775 + End + Begin VB.CommandButton GetDevlistBtn + Caption = " " + Height = 375 + Left = 480 + TabIndex = 2 + Top = 480 + Width = 2775 + End + Begin VB.ComboBox DevListBox + Height = 315 + Left = 3720 + TabIndex = 1 + Text = "DevListBox" + Top = 480 + Width = 2655 + End + Begin VB.CommandButton GetSamples + Caption = " " + Height = 375 + Left = 480 + TabIndex = 0 + Top = 1080 + Width = 2775 + End + Begin VB.Label 2 + Caption = " ( )" + Height = 255 + Left = 3720 + TabIndex = 5 + Top = 1080 + Width = 2775 + End + Begin VB.Label 1 + Caption = " " + Height = 255 + Left = 3720 + TabIndex = 4 + Top = 120 + Width = 2775 + End +End +Attribute VB_Name = "MainForm" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False + +Private Sub Form_Load() + GetDevlistBtn_Click +End Sub + +Private Sub GetDevlistBtn_Click() + Dim ret As Long + Dim serials() As String + + ret = TEST_SERIAL_SIZE + DevListBox.Clear + ' . + ' + ' < 0 - , - - + ret = L502_GetSerialList(serials, 0) + If ret < 0 Then + MsgBox (" : " + L502_GetErrorString(ret)) + Else + If ret > 0 Then + For i = 0 To ret - 1 + DevListBox.AddItem (serials(i)) + Next + DevListBox.ListIndex = 0 + End If + End If + +End Sub + + +Private Sub GetSamples_Click() + Dim err As Long + Dim hnd As Long + Dim adc_freq, frame_freq As Double + + ' + Const ch_points = 1000 + ' + Const ch_cnt = 3 + + + ResultList.Clear + + ' + hnd = L502_Create() + ' ( DevListBox) + ' , "" + err = L502_Open(hnd, DevListBox.Text) + If err <> L502_ERR_OK Then + MsgBox (" : " + L502_GetErrorString(err)) + Else + ' - + err = L502_SetLChannelCount(hnd, ch_cnt) + ' , , + ' . 10, 3- 1 , 32- 0.2 + If err = L502_ERR_OK Then + err = L502_SetLChannel(hnd, 0, 0, L502_LCH_MODE_DIFF, L502_ADC_RANGE_10, 0) + End If + If err = L502_ERR_OK Then + err = L502_SetLChannel(hnd, 1, 2, L502_LCH_MODE_COMM, L502_ADC_RANGE_1, 0) + End If + If err = L502_ERR_OK Then + err = L502_SetLChannel(hnd, 2, 31, L502_LCH_MODE_COMM, L502_ADC_RANGE_02, 0) + End If + + If err = L502_ERR_OK Then + ' . = 2 , . (2 /lch_cnt) + f_adc = 2000000 + f_frame = 0 + err = L502_SetAdcFreq(hnd, f_adc, f_frame) + End If + + + If err = L502_ERR_OK Then + ' + err = L502_Configure(hnd, 0) + End If + + If err = L502_ERR_OK Then + ' + err = L502_StreamsEnable(hnd, L502_STREAM_ADC) + End If + + If err <> L502_ERR_OK Then + MsgBox (" : " + L502_GetErrorString(err)) + Else + Dim recv_size As Long + + ' ch_points , + '.. ch_cnt * ch_points + ' CLng Long - vb + ' Integer - + ' 32*1024 + recv_size = CLng(ch_cnt) * ch_points + + + ' + err = L502_StreamsStart(hnd) + If err <> L502_ERR_OK Then + MsgBox (" : " + L502_GetErrorString(err)) + Else + Dim recv_wrds() As Long + Dim recv_vals() As Double + Dim recvd_cnt As Long + + ReDim recv_wrds(0 To recv_size - 1) + ReDim recv_vals(0 To recv_size - 1) + + ' + recvd_cnt = L502_Recv(hnd, recv_wrds, recv_size, 5000) + ' + If recvd_cnt < 0 Then + err = recvd_cnt + MsgBox (" : " + L502_GetErrorString(err)) + Else + ' + If recvd_cnt < recv_size Then + err = L502_ERR_RECV_INSUFFICIENT_WORDS + MsgBox (" ") + End If + End If + + If err = L502_ERR_OK Then + ' - + err = L502_ProcessAdcData(hnd, recv_wrds, recv_vals, recvd_cnt, L502_PROC_FLAGS_VOLT) + If err <> L502_ERR_OK Then + MsgBox (" : " + L502_GetErrorString(err)) + Else + ' + For ch = 0 To ch_cnt - 1 + Dim avg As Double + avg = 0 + ' , .. + ' , .... ... + '.. i- i*ch_cnt + ch + For i = 0 To recvd_cnt / ch_cnt - 1 + avg = avg + recv_vals(i * ch_cnt + ch) + Next + avg = avg / (recvd_cnt / ch_cnt) + + ' + ResultList.AddItem (FormatNumber(avg, 6) + " ") + Next + End If + End If + + ' + L502_StreamsStop (hnd) + End If + End If + + + + ' + err = L502_Close(hnd) + End If + + ' L502_Create() + L502_Free (hnd) +End Sub diff --git a/SDK/examples/vb6/l502_recv/l502_recv.vbp b/SDK/examples/vb6/l502_recv/l502_recv.vbp new file mode 100644 index 0000000..8d5a91e --- /dev/null +++ b/SDK/examples/vb6/l502_recv/l502_recv.vbp @@ -0,0 +1,30 @@ +Type=Exe +Form=MainForm.frm +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation +Module=l502api; l502api.bas +IconForm="MainForm" +Startup="MainForm" +Command32="" +Name="l502_recv_example" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 diff --git a/SDK/examples/vb6/l502_recv/l502_recv.vbw b/SDK/examples/vb6/l502_recv/l502_recv.vbw new file mode 100644 index 0000000..1dedffd --- /dev/null +++ b/SDK/examples/vb6/l502_recv/l502_recv.vbw @@ -0,0 +1,2 @@ +MainForm = 81, -9, 1373, 638, , 25, 25, 1317, 672, C +l502api = -98, 78, 1194, 725, Z diff --git a/SDK/examples/vb6/l502_recv/l502api.bas b/SDK/examples/vb6/l502_recv/l502api.bas new file mode 100644 index 0000000..36c9cd6 --- /dev/null +++ b/SDK/examples/vb6/l502_recv/l502api.bas @@ -0,0 +1,613 @@ +Attribute VB_Name = "l502api" +' , L502 + +' +Const L502_LTABLE_MAX_CH_CNT = 256 +' +Const L502_ADC_RANGE_CNT = 6 +' +Const L502_LCH_AVG_SIZE_MAX = 128 +' +Const L502_ADC_FREQ_DIV_MAX = 1024& * 1024& +' +Const L502_DIN_FREQ_DIV_MAX = 1024& * 1024& + +' +Const L502_ADC_INTERFRAME_DELAY_MAX = &H1FFFFF + +' BlackFin +Const L502_BF_CMD_DEFAULT_TOUT = 500 + +' , +Const L502_ADC_SCALE_CODE_MAX = 6000000 +' , +Const L502_DAC_SCALE_CODE_MAX = 30000 + +' +Const L502_DEVNAME_SIZE = 32 +' +Const L502_SERIAL_SIZE = 32 + +' +Const L502_EXT_REF_FREQ_MAX = 2000000 +' Flash- +Const L502_FLASH_USER_SIZE = &H100000 + +'C BlackFin +Const L502_BF_REQ_TOUT = 500 + +' +Const L502_DAC_RANGE = 5# + +' +Const L502_DAC_CH_CNT = 2 + +' , , +Const L502_STREAM_IN_MSG_OVERFLOW = &H1010000 + + + + +Public Enum t_lpcie_errs + L502_ERR_OK = 0 + ' + L502_ERR_INVALID_HANDLE = -1 + ' + L502_ERR_MEMORY_ALLOC = -2 + ' + L502_ERR_ALREADY_OPENED = -3 + ' + L502_ERR_DEVICE_NOT_FOUND = -4 + ' ( - , ) + L502_ERR_DEVICE_ACCESS_DENIED = -5 + ' + L502_ERR_DEVICE_OPEN = -6 + ' + L502_ERR_INVALID_POINTER = -7 + ' + L502_ERR_STREAM_IS_RUNNING = -8 + ' + L502_ERR_RECV = -9 + ' + L502_ERR_SEND = -10 + ' + L502_ERR_STREAM_OVERFLOW = -11 + ' + L502_ERR_UNSUP_STREAM_MSG = -12 + ' + L502_ERR_MUTEX_CREATE = -13 + ' + L502_ERR_MUTEX_INVALID_HANDLE = -14 + ' + L502_ERR_MUTEX_LOCK_TOUT = -15 + ' + L502_ERR_MUTEX_RELEASE = -16 + ' + L502_ERR_INSUFFICIENT_SYSTEM_RESOURCES = -17 + ' + L502_ERR_NOT_IMPLEMENTED = -18 + ' + L502_ERR_INSUFFICIENT_ARRAY_SIZE = -19 + ' FPGA + L502_ERR_FPGA_REG_READ = -20 + ' FPGA + L502_ERR_FPGA_REG_WRITE = -21 + ' + L502_ERR_STREAM_IS_NOT_RUNNING = -22 + ' + L502_ERR_INVALID_LTABLE_SIZE = -102 + ' + L502_ERR_INVALID_LCH_NUMBER = -103 + ' + L502_ERR_INVALID_LCH_RANGE = -104 + ' + L502_ERR_INVALID_LCH_MODE = -105 + ' + L502_ERR_INVALID_LCH_PHY_NUMBER = -106 + ' + L502_ERR_INVALID_LCH_AVG_SIZE = -107 + ' + L502_ERR_INVALID_ADC_FREQ_DIV = -108 + ' + L502_ERR_INVALID_DIN_FREQ_DIV = -108 + ' L502 + L502_ERR_INVALID_MODE = -109 + ' + L502_ERR_INVALID_DAC_CHANNEL = -110 + ' + L502_ERR_INVALID_REF_FREQ = -111 + ' + L502_ERR_INVALID_INTERFRAME_DELAY = -112 + ' + L502_ERR_INVALID_SYNC_MODE = -113 + ' DMA + L502_ERR_INVALID_DMA_CH = -114 + + ' + L502_ERR_REF_FREQ_NOT_LOCKED = -131 + ' + L502_ERR_IOCTL_FAILD = -132 + ' + L502_ERR_IOCTL_TIMEOUT = -133 + ' + L502_ERR_GET_INFO = -134 + ' + L502_ERR_DIG_IN_NOT_RDY = -135 + ' + L502_ERR_RECV_INSUFFICIENT_WORDS = -136 + ' , , + L502_ERR_DAC_NOT_PRESENT = -137 + ' + L502_ERR_PROC_INVALID_CH_NUM = -140 + ' + L502_ERR_PROC_INVALID_CH_RANGE = -141 + ' Flash- + L502_ERR_FLASH_INVALID_ADDR = -142 + ' Flash- + L502_ERR_FLASH_INVALID_SIZE = -143 + ' Flash- + L502_ERR_FLASH_WRITE_TOUT = -144 + ' Flash- + L502_ERR_FLASH_ERASE_TOUT = -145 + ' Flash- 4 + L502_ERR_FLASH_SECTOR_BOUNDARY = -146 + ' BlackFin + L502_ERR_LDR_FILE_OPEN = -180 + ' BlackFin + L502_ERR_LDR_FILE_READ = -181 + ' BlackFin + L502_ERR_LDR_FILE_FORMAT = -182 + ' LDR-, BlackFin HDMA + L502_ERR_LDR_FILE_UNSUP_FEATURE = -183 + ' BlackFin + L502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184 + ' / BlackFin + L502_ERR_BF_REQ_TIMEOUT = -185 + ' BlackFin + L502_ERR_BF_CMD_IN_PROGRESS = -186 + ' BlackFin + L502_ERR_BF_CMD_TIMEOUT = -187 + ' BlackFin + L502_ERR_BF_CMD_RETURN_INSUF_DATA = -188 + ' BlackFin + L502_ERR_BF_LOAD_RDY_TOUT = -189 + ' + ' + L502_ERR_BF_NOT_PRESENT = -190 + ' BlackFin HDMA + L502_ERR_BF_INVALID_ADDR = -191 + ' , BlackFin + L502_ERR_BF_INVALID_CMD_DATA_SIZE = -192 +End Enum + + +', +Public Enum t_l502_getdevs_flags + ' , , + L502_GETDEVS_FLAGS_ONLY_NOT_OPENED = &H1& +End Enum + + +' . +Public Enum t_l502_digout_word_flags + L502_DIGOUT_WORD_DIS_H = &H20000 ' ( ) + L502_DIGOUT_WORD_DIS_L = &H10000 ' +End Enum + +' +Public Enum t_l502_ref_freq + L502_REF_FREQ_2000KHZ = 2000000 ' 2 + L502_REF_FREQ_1500KHZ = 1500000 ' 1.5 +End Enum + +' +Public Enum t_l502_adc_range + L502_ADC_RANGE_10 = 0 ' +/-10V + L502_ADC_RANGE_5 = 1 ' +/-5V + L502_ADC_RANGE_2 = 2 ' +/-2V + L502_ADC_RANGE_1 = 3 ' +/-1V + L502_ADC_RANGE_05 = 4 ' +/-0.5V + L502_ADC_RANGE_02 = 5 ' +/-0.2V +End Enum + +' +Public Enum t_l502_lch_mode + L502_LCH_MODE_COMM = 0 ' + L502_LCH_MODE_DIFF = 1 ' + L502_LCH_MODE_ZERO = 2 ' +End Enum + +' . +Public Enum t_l502_sync_mode + L502_SYNC_INTERNAL = 0 ' + L502_SYNC_EXTERNAL_MASTER = 1 ' + L502_SYNC_DI_SYN1_RISE = 2 ' DI_SYN1 + L502_SYNC_DI_SYN2_RISE = 3 ' DI_SYN2 + L502_SYNC_DI_SYN1_FALL = 6 ' DI_SYN1 + L502_SYNC_DI_SYN2_FALL = 7 ' DI_SYN2 +End Enum + +', +Public Enum t_l502_proc_flags + ', + L502_PROC_FLAGS_VOLT = &H1& + ' , + ' . + ' BlackFin + ' . + L502_PROC_FLAGS_DONT_CHECK_CH = &H10000 +End Enum + +' +Public Enum t_l502_streams + L502_STREAM_ADC = &H1& ' + L502_STREAM_DIN = &H2& ' + L502_STREAM_DAC1 = &H10& ' + L502_STREAM_DAC2 = &H20& ' + L502_STREAM_DOUT = &H40& ' + ' , + L502_STREAM_ALL_IN = L502_STREAM_ADC Or L502_STREAM_DIN + ' , + L502_STREAM_ALL_OUT = L502_STREAM_DAC1 Or L502_STREAM_DAC2 Or L502_STREAM_DOUT +End Enum + +', +Public Enum t_stream_out_wrd_type + L502_STREAM_OUT_WORD_TYPE_DOUT = &H0& ' + L502_STREAM_OUT_WORD_TYPE_DAC1 = &H40000000 ' 1- + L502_STREAM_OUT_WORD_TYPE_DAC2 = &H80000000 ' 2- +End Enum + +' L502 +Public Enum t_l502_mode + L502_MODE_FPGA = 0 ' + ' BlackFin + L502_MODE_DSP = 1 ' + ', + ' + L502_MODE_DEBUG = 2 ' +End Enum + +' . +Public Enum t_l502_dac_ch + L502_DAC_CH1 = 0 ' + L502_DAC_CH2 = 1 ' +End Enum + +', . + Public Enum t_l502_dacout_flags + ', + ' . , , + ' + L502_DAC_FLAGS_VOLT = &H1& + ', + ' . + L502_DAC_FLAGS_CALIBR = &H2& +End Enum + +' DMA +Public Enum t_l502_dma_ch + L502_DMA_CH_IN = 0 ' DMA + L502_DMA_CH_OUT = 1 ' DMA +End Enum + +' , +Public Enum t_l502_pullups + L502_PULLUPS_DI_H = &H1& ' + L502_PULLUPS_DI_L = &H2& ' + L502_PULLUPS_DI_SYN1 = &H4& ' SYN1 + L502_PULLUPS_DI_SYN2 = &H8& ' SYN2 +End Enum + +', +Public Enum t_l502_dev_flags + ' + L502_DEVFLAGS_DAC_PRESENT = &H1& + ' + L502_DEVFLAGS_GAL_PRESENT = &H2& + ' BlackFin + L502_DEVFLAGS_BF_PRESENT = &H4& + ', Flash- + L502_DEVFLAGS_FLASH_DATA_VALID = &H10000 + ', Flash- + ' + L502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = &H20000 + ', Flash- + ' + L502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = &H40000 +End Enum + +' +Public Enum t_l502_out_cycle_flags + L502_OUT_CYCLE_FLAGS_FORCE = &H1& +End Enum + + + + +' +Public Type t_l502_cbr_coef + offs As Double ' + k As Double ' +End Type + + +' +Public Type t_l502_cbr + adc(0 To L502_ADC_RANGE_CNT - 1) As t_l502_cbr_coef ' + res1(0 To 64 - 1) As Long ' + dac(0 To L502_DAC_CH_CNT - 1) As t_l502_cbr_coef ' + res2(0 To 20 - 1) As Long +End Type + + +Public Type t_l502_info + DevName(0 To L502_DEVNAME_SIZE - 1) As Byte + Serial(0 To L502_SERIAL_SIZE - 1) As Byte ' + devflags As Long ' #t_l502_dev_flags, + fpga_ver As Integer ' ( - , - ) + plda_ver As Byte ' , + board_rev As Byte ' + res(0 To 120 - 1) As Byte ' + cbr As t_l502_cbr ' ( Flash-) +End Type + + + +Private Declare Function tmp_L502_GetSerialList Lib "l502api" Alias "L502_GetSerialList" (ByVal serials As Long, ByVal size As Long, ByVal flags As Long, ByRef devcnt As Long) As Long + + +Public Declare Function L502_Create Lib "l502api" () As Long +Public Declare Function L502_Free Lib "l502api" (ByVal hnd As Long) As Long +Public Declare Function L502_Open Lib "l502api" (ByVal hnd As Long, ByVal Serial As String) As Long +Public Declare Function L502_Close Lib "l502api" (ByVal hnd As Long) As Long +Public Declare Function L502_GetDevInfo Lib "l502api" (ByVal hnd As Long, ByRef info As t_l502_info) As Long + + +Public Declare Function L502_Configure Lib "l502api" (ByVal hnd As Long, ByVal flags As Long) As Long +Public Declare Function L502_SetLChannel Lib "l502api" (ByVal hnd As Long, ByVal lch As Long, ByVal phy_ch As Long, ByVal mode As Long, ByVal range As Long, ByVal avg As Long) As Long +' . +Public Declare Function L502_SetLChannelCount Lib "l502api" (ByVal hnd As Long, ByVal lch_cnt As Long) As Long +' . +Public Declare Function L502_GetLChannelCount Lib "l502api" (ByVal hnd As Long, ByRef lch_cnt As Long) As Long +' +Public Declare Function L502_SetAdcFreqDivider Lib "l502api" (ByVal hnd As Long, ByVal adc_freq_div As Long) As Long +' . +Public Declare Function L502_SetAdcInterframeDelay Lib "l502api" (ByVal hnd As Long, ByVal delay As Long) As Long +' . +Public Declare Function L502_SetDinFreqDivider Lib "l502api" (ByVal hnd As Long, ByVal din_freq_div As Long) As Long +' . +Public Declare Function L502_SetAdcFreq Lib "l502api" (ByVal hnd As Long, ByRef f_acq As Double, ByRef f_frame As Double) As Long +' . +Public Declare Function L502_SetDinFreq Lib "l502api" (ByVal hnd As Long, ByRef f_din As Double) As Long +' +Public Declare Function L502_GetAdcFreq Lib "l502api" (ByVal hnd As Long, ByRef f_acq As Double, ByRef f_frame As Double) As Long +' . +Public Declare Function L502_SetRefFreq Lib "l502api" (ByVal hnd As Long, ByVal freq As Long) As Long +' . +Public Declare Function L502_SetSyncMode Lib "l502api" (ByVal hnd As Long, ByVal sync_mode As Long) As Long +' +Public Declare Function L502_SetSyncStartMode Lib "l502api" (ByVal hnd As Long, ByVal sync_start_mode As Long) As Long +' . +Public Declare Function L502_SetMode Lib "l502api" (ByVal hnd As Long, ByVal mode As Long) As Long +' . +Public Declare Function L502_GetMode Lib "l502api" (ByVal hnd As Long, ByRef mode As Long) As Long +' +Public Declare Function L502_SetAdcCoef Lib "l502api" (ByVal hnd As Long, ByVal range As Long, ByVal k As Double, ByVal offs As Double) As Long +' . +Public Declare Function L502_GetAdcCoef Lib "l502api" (ByVal hnd As Long, ByVal range As Long, ByRef k As Double, ByRef offs As Double) As Long +' . +Public Declare Function L502_SetDacCoef Lib "l502api" (ByVal hnd As Long, ByVal ch As Long, ByVal k As Double, ByVal offs As Double) As Long +' +Public Declare Function L502_GetDacCoef Lib "l502api" (ByVal hnd As Long, ByVal ch As Long, ByRef k As Double, ByRef offs As Double) As Long + +' . +Public Declare Function L502_AsyncOutDac Lib "l502api" (ByVal hnd As Long, ByVal ch As Long, ByVal data As Double, ByVal flags As Long) As Long +' . +Public Declare Function L502_AsyncOutDig Lib "l502api" (ByVal hnd As Long, ByVal val As Long, ByVal msk As Long) As Long +' . +Public Declare Function L502_AsyncInDig Lib "l502api" (ByVal hnd As Long, ByRef din As Long) As Long + +Private Declare Function tmp_L502_AsyncGetAdcFrame Lib "l502api" Alias "L502_AsyncGetAdcFrame" (ByVal hnd As Long, ByVal flags As Long, ByVal tout As Long, ByRef data As Double) As Long + +' /. +Public Declare Function L502_StreamsEnable Lib "l502api" (ByVal hnd As Long, ByVal streams As Long) As Long +' /. +Public Declare Function L502_StreamsDisable Lib "l502api" (ByVal hnd As Long, ByVal streams As Long) As Long +' /. +Public Declare Function L502_StreamsStart Lib "l502api" (ByVal hnd As Long) As Long +' /. +Public Declare Function L502_StreamsStop Lib "l502api" (ByVal hnd As Long) As Long +', / +Public Declare Function L502_IsRunning Lib "l502api" (ByVal hnd As Long) As Long +' . +Private Declare Function tmp_L502_Recv Lib "l502api" Alias "L502_Recv" (ByVal hnd As Long, ByRef buf As Long, ByVal size As Long, ByVal tout As Long) As Long +' . +Private Declare Function tmp_L502_Send Lib "l502api" Alias "L502_Send" (ByVal hnd As Long, ByRef buf As Long, ByVal size As Long, ByVal tout As Long) As Long +' . +Private Declare Function tmp_L502_ProcessAdcData Lib "l502api" Alias "L502_ProcessAdcData" (ByVal hnd As Long, ByRef src As Long, ByRef dest As Double, ByRef size As Long, ByVal flags As Long) As Long +' . +Private Declare Function tmp_L502_ProcessData Lib "l502api" Alias "L502_ProcessData" (ByVal hnd As Long, ByRef src As Long, ByVal flags As Long, ByRef adc_data As Double, ByRef adc_data_size As Long, ByRef din_data As Long, ByRef din_data_size As Long) As Long +' . +Private Declare Function tmp_L502_ProcessDataWithUserExt Lib "l502api" Alias "L502_ProcessDataWithUserExt" (ByVal hnd As Long, ByRef src As Long, ByVal size As Long, ByVal flags As Long, ByRef adc_data As Double, ByRef adc_data_size As Long, ByRef din_data As Long, ByRef din_data_size As Long, ByRef usr_data As Long, ByRef usr_data_size As Long) As Long +' . +Private Declare Function tmp_L502_PrepareData Lib "l502api" Alias "L502_PrepareData" (ByVal hnd As Long, ByRef dac1 As Double, ByRef dac2 As Double, ByRef digout As Long, ByVal size As Long, ByVal flags As Long, ByRef out_buf As Long) As Long + +' . +Public Declare Function L502_GetRecvReadyCountLib Lib "l502api" (ByVal hnd As Long, ByRef rdy_cnt As Long) As Long +' . +Public Declare Function L502_GetSendReadyCount Lib "l502api" (ByVal hnd As Long, ByRef rdy_cnt As Long) As Long +' . +Public Declare Function L502_GetNextExpectedLchNum Lib "l502api" (ByVal hnd As Long, ByRef lch As Long) As Long +' +Public Declare Function L502_PreloadStart Lib "l502api" (ByVal hnd As Long) As Long +' +Public Declare Function L502_OutCycleLoadStart Lib "l502api" (ByVal hnd As Long, ByVal size As Long) As Long +' +Public Declare Function L502_OutCycleSetup Lib "l502api" (ByVal hnd As Long, ByVal flags As Long) As Long +' +Public Declare Function L502_OutCycleStop Lib "l502api" (ByVal hnd As Long, ByVal flags As Long) As Long +' . +Public Declare Function L502_SetDmaBufSize Lib "l502api" (ByVal hnd As Long, ByVal dma_ch As Long, ByVal size As Long) As Long +' DMA. +Public Declare Function L502_SetDmaIrqStep Lib "l502api" (ByVal hnd As Long, ByVal dma_ch As Long, ByVal step As Long) As Long + +' BlackFin. +Public Declare Function L502_BfLoadFirmware Lib "l502api" (ByVal hnd As Long, ByVal filename As String) As Long +', BlackFIn. +Public Declare Function L502_BfCheckFirmwareIsLoaded Lib "l502api" (ByVal hnd As Long, ByRef version As Long) As Long +' . +Private Declare Function tmp_L502_BfMemRead Lib "l502api" Alias "L502_BfMemRead" (ByVal hnd As Long, ByVal addr As Long, ByRef regs As Long, ByVal size As Long) As Long +' . +Private Declare Function tmp_L502_BfMemWrite Lib "l502api" Alias "L502_BfMemWrite" (ByVal hnd As Long, ByVal addr As Long, ByRef regs As Long, ByVal size As Long) As Long +' . +Private Declare Function tmp_L502_BfExecCmd Lib "l502api" Alias "L502_BfExecCmd" (ByVal hnd As Long, ByVal cmd_code As Integer, ByVal par As Long, ByRef snd_data As Long, ByVal snd_size As Long, ByRef rcv_data As Long, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + +' Flash-. + Private Declare Function tmp_L502_FlashRead Lib "l502api" Alias "L502_FlashRead" (ByVal hnd As Long, ByVal addr As Long, ByRef data As Byte, ByVal size As Long) As Long + ' Flash- . + Private Declare Function tmp_L502_FlashWrite Lib "l502api" Alias "L502_FlashWrite" (ByVal hnd As Long, ByVal addr As Long, ByRef data As Byte, ByVal size As Long) As Long +' Flash-. + Public Declare Function L502_FlashErase Lib "l502api" (ByVal hnd As Long, ByVal addr As Long, ByVal size As Long) As Long + ' Flash-. + Public Declare Function L502_FlashWriteEnable Lib "l502api" (ByVal hnd As Long) As Long + ' Flash-. + Public Declare Function L502_FlashWriteDisable Lib "l502api" (ByVal hnd As Long) As Long + + ' . +Public Declare Function L502_GetDllVersion Lib "l502api" () As Long +' . +Public Declare Function L502_GetDriverVersion Lib "l502api" (ByVal hnd As Long, ByRef ver As Long) As Long +' . +Public Declare Function L502_LedBlink Lib "l502api" (ByVal hnd As Long) As Long +' . +Public Declare Function L502_SetDigInPullup Lib "l502api" (ByVal hnd As Long, ByVal pullups As Long) As Long + + +Private Declare Function tmp_L502_GetErrorString Lib "l502api" Alias "L502_GetErrorString" (ByVal Error_Code As Long) As Long + + +Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long +Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) +Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long +Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long + + +Public Function L502_AsyncGetAdcFrame(ByVal hnd As Long, ByVal flags As Long, ByVal tout As Long, ByRef data() As Double) As Long + L502_AsyncGetAdcFrame = tmp_L502_AsyncGetAdcFrame(hnd, flags, tout, data(0)) +End Function + +Public Function L502_Recv(ByVal hnd As Long, ByRef buf() As Long, ByVal size As Long, ByVal tout As Long) As Long + L502_Recv = tmp_L502_Recv(hnd, buf(0), size, tout) +End Function + +Public Function L502_Send(ByVal hnd As Long, ByRef buf() As Long, ByVal size As Long, ByVal tout As Long) As Long + L502_Send = tmp_L502_Send(hnd, buf(0), size, tout) +End Function + + +Public Function L502_ProcessAdcData(ByVal hnd As Long, ByRef src() As Long, ByRef dest() As Double, ByRef size As Long, ByVal flags As Long) As Long + L502_ProcessAdcData = tmp_L502_ProcessAdcData(hnd, src(0), dest(0), size, flags) +End Function + +Public Function L502_ProcessData(ByVal hnd As Long, ByRef src() As Long, ByVal flags As Long, ByRef adc_data() As Double, ByRef adc_data_size As Long, ByRef din_data() As Long, ByRef din_data_size As Long) As Long + L502_ProcessData = tmp_L502_ProcessData(hnd, src(0), flags, adc_data(0), adc_data_size, din_data(0), din_data_size) +End Function + +Public Function L502_ProcessDataWithUserExt(ByVal hnd As Long, ByRef src() As Long, ByVal size As Long, ByVal flags As Long, ByRef adc_data() As Double, ByRef adc_data_size As Long, ByRef din_data() As Long, ByRef din_data_size As Long, ByRef usr_data() As Long, ByRef usr_data_size As Long) As Long + L502_ProcessDataWithUserExt = tmp_L502_ProcessDataWithUserExt(hnd, src(0), size, flags, adc_data(0), adc_data_size, din_data(0), din_data_size, usr_data(0), usr_data_size) +End Function + +Public Function L502_PrepareData(ByVal hnd As Long, ByRef dac1() As Double, ByRef dac2() As Double, ByRef digout() As Long, ByVal size As Long, ByVal flags As Long, ByRef out_buf() As Long) As Long + L502_PrepareData = tmp_L502_PrepareData(hnd, dac1(0), dac2(0), digout(0), size, flags, out_buf(0)) +End Function + +Public Function L502_BfMemRead(ByVal hnd As Long, ByVal addr As Long, ByRef regs() As Long, ByVal size As Long) As Long + L502_BfMemRead = tmp_L502_BfMemRead(hnd, addr, regs(0), size) +End Function + +Public Function L502_BfMemWrite(ByVal hnd As Long, ByVal addr As Long, ByRef regs() As Long, ByVal size As Long) As Long + L502_BfMemWrite = tmp_L502_BfMemWrite(hnd, addr, regs(0), size) +End Function + +Public Function L502_BfExecCmd(ByVal hnd As Long, ByVal cmd_code As Integer, ByVal par As Long, ByRef snd_data() As Long, ByVal snd_size As Long, ByRef rcv_data() As Long, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + L502_BfExecCmd = tmp_L502_BfExecCmd(hnd, cmd_code, par, snd_data(0), snd_size, rcv_data(0), rcv_size, tout, recvd_size) +End Function + +Public Function L502_FlashRead(ByVal hnd As Long, ByVal addr As Long, ByRef data() As Byte, ByVal size As Long) As Long + L502_FlashRead = tmp_L502_FlashRead(hnd, addr, data(0), size) +End Function + + Public Function L502_FlashWrite(ByVal hnd As Long, ByVal addr As Long, ByRef data() As Byte, ByVal size As Long) As Long + L502_FlashWrite = tmp_L502_FlashWrite(hnd, addr, data(0), size) + End Function + +Public Function StrFromPtr(ByVal lpStr As Long) As String + Dim bStr() As Byte + Dim cChars As Long + On Error Resume Next + ' Get the number of characters in the buffer + cChars = lstrlen(lpStr) + If cChars Then + ' Resize the byte array + ReDim bStr(0 To cChars - 1) As Byte + ' Grab the ANSI buffer + Call CopyMemory(bStr(0), ByVal lpStr, cChars) + End If + ' Now convert to a VB Unicode string + StrFromPtr = StrConv(bStr, vbUnicode) +End Function + +Public Function L502_GetErrorString(ByVal Error_Code As Long) As String + Dim Ptr As Long + Ptr = tmp_L502_GetErrorString(Error_Code) + L502_GetErrorString = StrFromPtr(Ptr) +End Function + +Public Function L502_GetSerialList(ByRef serials() As String, ByVal flags As Long) As Long + Dim tmp As Long + Dim cnt As Long + Dim ret_cnt As Long + Dim dummy As Long + Dim err As Long + + ret_cnt = 0 + tmp = 0 + + ret_cnt = tmp_L502_GetSerialList(tmp, 0, flags, cnt) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If cnt = 0 Then + ReDim serials(0) + Else + tmp = GlobalAlloc(0, L502_SERIAL_SIZE * cnt) + If tmp = 0 Then + err = L502_ERR_MEMORY_ALLOC + Else + ret_cnt = tmp_L502_GetSerialList(tmp, cnt, flags, dummy) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If ret_cnt = 0 Then + ReDim serials(0) + Else + ReDim serials(0 To ret_cnt - 1) + For i = 0 To ret_cnt - 1 + serials(i) = StrFromPtr(tmp) + Next + End If + End If + GlobalFree (tmp) + End If + End If + End If + + If err = L502_ERR_OK Then + err = ret_cnt + End If + L502_GetSerialList = err +End Function + diff --git a/SDK/examples/vb6/l502_recv/readme.txt b/SDK/examples/vb6/l502_recv/readme.txt new file mode 100644 index 0000000..7c968c7 --- /dev/null +++ b/SDK/examples/vb6/l502_recv/readme.txt @@ -0,0 +1,5 @@ + L502 Visual Basic. + , E502, + . + x502_general, + L502, E502 diff --git a/SDK/examples/vb6/x502_general/e502api.bas b/SDK/examples/vb6/x502_general/e502api.bas new file mode 100644 index 0000000..869f9af --- /dev/null +++ b/SDK/examples/vb6/x502_general/e502api.bas @@ -0,0 +1,200 @@ +Attribute VB_Name = "e502api" +' , , E502 + +' +Public Enum t_e502_eth_svc_event + E502_ETH_SVC_EVENT_NONE = 0 ' + E502_ETH_SVC_EVENT_ADD = 1 ' + E502_ETH_SVC_EVENT_REMOVE = 2 ' + E502_ETH_SVC_EVENT_CHANGED = 3 ' +End Enum + + + +Private Declare Function tmp_E502_UsbGetSerialList Lib "e502api" Alias "E502_UsbGetSerialList" (ByVal serials As Long, ByVal size As Long, ByVal flags As Long, ByRef devcnt As Long) As Long + +Public Declare Function E502_OpenUsb Lib "e502api" (ByVal hnd As Long, ByVal serial As String) As Long +Public Declare Function E502_OpenByIpAddr Lib "e502api" (ByVal hnd As Long, ByVal ip_addr As Long, ByVal flags As Long, ByVal tout As Long) As Long + +Private Declare Function tmp_E502_UsbGetDevRecordsList Lib "e502api" Alias "E502_UsbGetDevRecordsList" (ByRef list As t_x502_devrec, ByVal size As Long, ByVal flags As Long, ByRef devcnt As Long) As Long + +Public Declare Function E502_MakeDevRecordByIpAddr Lib "e502api" (ByRef devrec As t_x502_devrec, ByVal ip_addr As Long, ByVal flags As Long, ByVal tout As Long) As Long +Public Declare Function E502_EthDevRecordSetCmdPort Lib "e502api" (ByRef devrec As t_x502_devrec, ByVal cmd_port As Integer) As Long +Public Declare Function E502_EthDevRecordSetDataPort Lib "e502api" (ByRef devrec As t_x502_devrec, ByVal data_port As Integer) As Long +Public Declare Function E502_MakeDevRecordByEthSvc Lib "e502api" (ByRef devrec As t_x502_devrec, ByVal svc As Long, ByVal flags As Long, ByVal tout As Long) As Long + +Public Declare Function E502_GetIpAddr Lib "e502api" (ByVal hnd As Long, ByRef ip_addr As Long) As Long + + +Public Declare Function E502_EthConfigCreate Lib "e502api" () As Long +Public Declare Function E502_EthConfigFree Lib "e502api" (ByVal cfg As Long) As Long +Public Declare Function E502_EthConfigRead Lib "e502api" (ByVal hnd As Long, ByVal cfg As Long) As Long +Public Declare Function E502_EthConfigWrite Lib "e502api" (ByVal hnd As Long, ByVal cfg As Long, ByVal passwd As String) As Long +Public Declare Function E502_EthConfigCopy Lib "e502api" (ByVal src_cfg As Long, ByVal dst_cfg As Long) As Long +Public Declare Function E502_EthConfigGetEnabled Lib "e502api" (ByVal cfg As Long, ByRef en As Long) As Long +Public Declare Function E502_EthConfigSetEnabled Lib "e502api" (ByVal cfg As Long, ByVal en As Long) As Long +Public Declare Function E502_EthConfigGetAutoIPEnabled Lib "e502api" (ByVal cfg As Long, ByRef en As Long) As Long +Public Declare Function E502_EthConfigSetAutoIPEnabled Lib "e502api" (ByVal cfg As Long, ByVal en As Long) As Long +Public Declare Function E502_EthConfigGetUserMACEnabled Lib "e502api" (ByVal cfg As Long, ByRef en As Long) As Long +Public Declare Function E502_EthConfigSetUserMACEnabled Lib "e502api" (ByVal cfg As Long, ByVal en As Long) As Long +Public Declare Function E502_EthConfigGetIPv4Addr Lib "e502api" (ByVal cfg As Long, ByRef ip_addr As Long) As Long +Public Declare Function E502_EthConfigSetIPv4Addr Lib "e502api" (ByVal cfg As Long, ByVal ip_addr As Long) As Long +Public Declare Function E502_EthConfigGetIPv4Mask Lib "e502api" (ByVal cfg As Long, ByRef mask As Long) As Long +Public Declare Function E502_EthConfigSetIPv4Mask Lib "e502api" (ByVal cfg As Long, ByVal mask As Long) As Long +Public Declare Function E502_EthConfigGetIPv4Gate Lib "e502api" (ByVal cfg As Long, ByRef gate As Long) As Long +Public Declare Function E502_EthConfigSetIPv4Gate Lib "e502api" (ByVal cfg As Long, ByVal gate As Long) As Long +Private Declare Function tmp_E502_EthConfigGetUserMac Lib "e502api" Alias "EthConfigGetUserMac" (ByVal cfg As Long, ByRef mac As Byte) As Long +Private Declare Function tmp_E502_EthConfigSetUserMac Lib "e502api" Alias "E502_EthConfigSetUserMac" (ByVal cfg As Long, ByRef mac As Byte) As Long +Private Declare Function tmp_E502_EthConfigGetFactoryMac Lib "e502api" Alias "E502_EthConfigGetFactoryMac" (ByVal cfg As Long, ByRef mac As Byte) As Long +Public Declare Function tmp_E502_EthConfigGetInstanceName Lib "e502api" Alias "E502_EthConfigGetInstanceName" (ByVal cfg As Long, ByRef name As Byte) As Long +Public Declare Function E502_EthConfigSetInstanceName Lib "e502api" (ByVal cfg As Long, ByVal name As String) As Long +Public Declare Function E502_EthConfigSetNewPassword Lib "e502api" (ByVal cfg As Long, ByVal new_passwd As String) As Long + + +Public Declare Function E502_SwitchToBootloader Lib "e502api" (ByVal hnd As Long) As Long +Public Declare Function E502_ReloadFPGA Lib "e502api" (ByVal hnd As Long) As Long +Private Declare Function tmp_E502_CortexExecCmd Lib "e502api" Alias "E502_CortexExecCmd" (ByVal hnd As Long, ByVal cmd_code As Long, ByVal par As Long, ByRef snd_data As Byte, ByVal snd_size As Long, ByRef rcv_data As Byte, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + + +Public Declare Function E502_EthSvcBrowseStart Lib "e502api" (ByVal pcontext As Long, ByVal flags As Long) As Long +Public Declare Function E502_EthSvcBrowseGetEvent Lib "e502api" (ByVal context As Long, ByVal svc As Long, ByRef svcevent As Long, ByRef flags As Long, ByVal tout As Long) As Long +Public Declare Function E502_EthSvcBrowseStop Lib "e502api" (ByVal context As Long) As Long +Public Declare Function E502_EthSvcRecordFree Lib "e502api" (ByVal svc As Long) As Long + +Private Declare Function tmp_E502_EthSvcRecordGetInstanceName Lib "e502api" Alias "E502_EthSvcRecordGetInstanceName" (ByVal svc As Long, ByRef name As Byte) As Long +Public Declare Function E502_EthSvcRecordGetDevSerial Lib "e502api" (ByVal svc As Long, ByVal serial As String) As Long +Public Declare Function E502_EthSvcRecordResolveIPv4Addr Lib "e502api" (ByVal svc As Long, ByRef addr As Long, ByVal tout As Long) As Long +Public Declare Function E502_EthSvcRecordIsSameInstance Lib "e502api" (ByVal svc1 As Long, ByVal svc2 As Long) As Long + + +Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long +Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long +Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) + + + + +Public Function E502_EthConfigGetUserMac(ByVal cfg As Long, ByRef mac() As Byte) As Long + E502_EthConfigGetUserMac = tmp_E502_EthConfigGetUserMac(cfg, mac(0)) +End Function +Public Function E502_EthConfigSetUserMac(ByVal cfg As Long, ByRef mac() As Byte) As Long + E502_EthConfigSetUserMac = tmp_E502_EthConfigSetUserMac(cfg, mac(0)) +End Function +Public Function E502_EthConfigGetFactoryMac(ByVal cfg As Long, ByRef mac() As Byte) As Long + E502_EthConfigGetFactoryMac = tmp_E502_EthConfigGetFactoryMac(cfg, mac(0)) +End Function + + + +Public Function E502_EthConfigGetInstanceName(ByVal cfg As Long, ByRef name As String) As Long + Dim str_arr(0 To X502_INSTANCE_NAME_SIZE) As Byte + Dim err As Long + err = tmp_E502_EthConfigGetInstanceName(cfg, str_arr(0)) + ' ASCII + ' UTF-8 MultiByteToWideChar + If err = X502_ERR_OK Then + name = StrConv(str_arr, vbUnicode) + End If + E502_EthConfigGetInstanceName = err +End Function + +Public Function E502_EthSvcRecordGetInstanceName(ByVal svc As Long, ByRef name As String) As Long + Dim str_arr(0 To X502_INSTANCE_NAME_SIZE) As Byte + Dim err As Long + err = tmp_E502_EthSvcRecordGetInstanceName(svc, str_arr(0)) + ' ASCII + ' UTF-8 MultiByteToWideChar + If err = X502_ERR_OK Then + name = StrConv(str_arr, vbUnicode) + End If + E502_EthConfigGetInstanceName = err +End Function + + +Public Function E502_CortexExecCmd(ByVal hnd As Long, ByVal cmd_code As Long, ByVal par As Long, ByRef snd_data() As Byte, ByVal snd_size As Long, ByRef rcv_data() As Byte, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + E502_CortexExecCmd = tmp_E502_CortexExecCmd(hnd, cmd_code, par, snd_data(0), snd_size, rcv_data(0), rcv_size, tout, recvd_size) +End Function + + +Public Function E502_UsbGetSerialList(ByRef serials() As String, ByVal flags As Long) As Long + Dim tmp As Long + Dim cnt As Long + Dim ret_cnt As Long + Dim dummy As Long + Dim err As Long + + ret_cnt = 0 + tmp = 0 + + ret_cnt = tmp_E502_UsbGetSerialList(tmp, 0, flags, cnt) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If cnt = 0 Then + ReDim serials(0) + Else + tmp = GlobalAlloc(0, X502_SERIAL_SIZE * cnt) + If tmp = 0 Then + err = X502_ERR_MEMORY_ALLOC + Else + ret_cnt = tmp_E502_UsbGetSerialList(tmp, cnt, flags, dummy) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If ret_cnt = 0 Then + ReDim serials(0) + Else + ReDim serials(0 To ret_cnt - 1) + For i = 0 To ret_cnt - 1 + serials(i) = X502_StrFromPtr(tmp + i * X502_SERIAL_SIZE) + Next + End If + End If + GlobalFree (tmp) + End If + End If + End If + + If err = L502_ERR_OK Then + err = ret_cnt + End If + E502_UsbGetSerialList = err +End Function + +Public Function E502_UsbGetDevRecordsList(ByRef list() As t_x502_devrec, ByVal flags As Long) As Long + Dim ret_cnt As Long + Dim err As Long + Dim devcnt As Long + Dim tmp As t_x502_devrec + Dim dummy As Long + + ret_cnt = tmp_E502_UsbGetDevRecordsList(tmp, 0, flags, devcnt) + If ret_cnt < 0 Then + err = ret_cnt + ReDim list(0) + Else + If devcnt = 0 Then + ReDim list(0) + Else + ReDim list(0 To devcnt - 1) + ret_cnt = tmp_E502_UsbGetDevRecordsList(list(0), devcnt, flags, dummy) + If ret_cnt < 0 Then + err = ret_cnt + ReDim list(0) + Else + If ret_cnt = 0 Then + ReDim list(0) + ElseIf ret_cnt <> devcnt Then + ReDim Preserve list(0 To ret_cnt - 1) + End If + End If + End If + End If + + If err = L502_ERR_OK Then + err = ret_cnt + End If + E502_UsbGetDevRecordsList = err +End Function diff --git a/SDK/examples/vb6/x502_general/l502api.bas b/SDK/examples/vb6/x502_general/l502api.bas new file mode 100644 index 0000000..8e7c707 --- /dev/null +++ b/SDK/examples/vb6/x502_general/l502api.bas @@ -0,0 +1,94 @@ +Attribute VB_Name = "l502api" +' , , L502 + + +Private Declare Function tmp_L502_GetSerialList Lib "l502api" Alias "L502_GetSerialList" (ByVal serials As Long, ByVal size As Long, ByVal flags As Long, ByRef devcnt As Long) As Long + +Public Declare Function L502_Open Lib "l502api" (ByVal hnd As Long, ByVal serial As String) As Long + +Private Declare Function tmp_L502_GetDevRecordsList Lib "l502api" Alias "L502_GetDevRecordsList" (ByRef list As t_x502_devrec, ByVal size As Long, ByVal flags As Long, ByRef devcnt As Long) As Long + +Public Declare Function L502_GetDriverVersion Lib "l502api" (ByVal hnd As Long, ByRef ver As Long) As Long + +Public Function L502_GetSerialList(ByRef serials() As String, ByVal flags As Long) As Long + Dim tmp As Long + Dim cnt As Long + Dim ret_cnt As Long + Dim dummy As Long + Dim err As Long + + ret_cnt = 0 + tmp = 0 + + ret_cnt = tmp_L502_GetSerialList(tmp, 0, flags, cnt) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If cnt = 0 Then + ReDim serials(0) + Else + tmp = GlobalAlloc(0, X502_SERIAL_SIZE * cnt) + If tmp = 0 Then + err = X502_ERR_MEMORY_ALLOC + Else + ret_cnt = tmp_L502_GetSerialList(tmp, cnt, flags, dummy) + If ret_cnt < 0 Then + err = ret_cnt + ReDim serials(0) + Else + If ret_cnt = 0 Then + ReDim serials(0) + Else + ReDim serials(0 To ret_cnt - 1) + For i = 0 To ret_cnt - 1 + serials(i) = X502_StrFromPtr(tmp + i * X502_SERIAL_SIZE) + Next + End If + End If + GlobalFree (tmp) + End If + End If + End If + + If err = L502_ERR_OK Then + err = ret_cnt + End If + L502_GetSerialList = err +End Function + +Public Function L502_GetDevRecordsList(ByRef list() As t_x502_devrec, ByVal flags As Long) As Long + Dim ret_cnt As Long + Dim err As Long + Dim devcnt As Long + Dim tmp As t_x502_devrec + Dim dummy As Long + + ret_cnt = tmp_L502_GetDevRecordsList(tmp, 0, flags, devcnt) + If ret_cnt < 0 Then + err = ret_cnt + ReDim list(0) + Else + If devcnt = 0 Then + ReDim list(0) + Else + ReDim list(0 To devcnt - 1) + ret_cnt = tmp_L502_GetDevRecordsList(list(0), devcnt, flags, dummy) + If ret_cnt < 0 Then + err = ret_cnt + ReDim list(0) + Else + If ret_cnt = 0 Then + ReDim list(0) + ElseIf ret_cnt <> devcnt Then + ReDim Preserve list(0 To ret_cnt - 1) + End If + End If + End If + End If + + If err = L502_ERR_OK Then + err = ret_cnt + End If + L502_GetDevRecordsList = err +End Function diff --git a/SDK/examples/vb6/x502_general/readme.txt b/SDK/examples/vb6/x502_general/readme.txt new file mode 100644 index 0000000..2441994 --- /dev/null +++ b/SDK/examples/vb6/x502_general/readme.txt @@ -0,0 +1,10 @@ + L502 E502 Visual Basic 6. + + x502api.bas, e502api.bas l502api.bas + x502api +( ). + + , ( ), + . + (.. + , ). diff --git a/SDK/examples/vb6/x502_general/x502_example.frm b/SDK/examples/vb6/x502_general/x502_example.frm new file mode 100644 index 0000000..1b5dc2b --- /dev/null +++ b/SDK/examples/vb6/x502_general/x502_example.frm @@ -0,0 +1,355 @@ +VERSION 5.00 +Begin VB.Form MainForm + Caption = "X502 Example" + ClientHeight = 3405 + ClientLeft = 120 + ClientTop = 450 + ClientWidth = 7395 + LinkTopic = "Form1" + ScaleHeight = 3405 + ScaleWidth = 7395 + StartUpPosition = 3 'Windows Default + Begin VB.CheckBox checkUseIP + Caption = " IP " + Height = 375 + Left = 3480 + TabIndex = 6 + Top = 840 + Width = 2775 + End + Begin VB.TextBox edtIpAddr + Height = 375 + Left = 3480 + TabIndex = 5 + Text = "192.168.12.233" + Top = 1200 + Width = 2775 + End + Begin VB.ListBox ResultList + Height = 1425 + ItemData = "x502_example.frx":0000 + Left = 240 + List = "x502_example.frx":0002 + TabIndex = 3 + Top = 1800 + Width = 2775 + End + Begin VB.CommandButton btnRecvData + Caption = " " + Height = 375 + Left = 240 + TabIndex = 2 + Top = 960 + Width = 2655 + End + Begin VB.ComboBox cbbDevList + Height = 315 + Left = 3480 + TabIndex = 1 + Top = 360 + Width = 2895 + End + Begin VB.CommandButton btnRefreshDeviceList + Caption = " " + Height = 375 + Left = 240 + TabIndex = 0 + Top = 360 + Width = 2655 + End + Begin VB.Label 2 + Caption = " ( )" + Height = 255 + Left = 240 + TabIndex = 4 + Top = 1440 + Width = 2775 + End +End +Attribute VB_Name = "MainForm" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False + +', USB PCI +Dim devlist() As t_x502_devrec +', devlist +Dim devlist_valid As Boolean + +Private Type ipBytes + B1 As Byte + B2 As Byte + B3 As Byte + B4 As Byte +End Type + +Private Type ipLong + Val As Long +End Type + +' Convert a dotted quad IP string to a Long. +Public Function IP2Long(IP As String) As Long + ReDim parse(0 To 3) As String + Dim B As ipBytes + Dim L As ipLong + + parse = Split(IP, ".") + + B.B4 = Val(parse(0)) + B.B3 = Val(parse(1)) + B.B2 = Val(parse(2)) + B.B1 = Val(parse(3)) + LSet L = B + IP2Long = L.Val +End Function + + +' +Private Sub freeDevlist() + If devlist_valid Then + Dim devcnt As Long + devcnt = UBound(devlist) + 1 + If devcnt <> 0 Then + Call X502_FreeDevRecordList(devlist, devcnt) + End If + ReDim devlist(0) + + cbbDevList.Clear + devlist_valid = False + End If +End Sub + +Private Sub refreshDeviceList() + Dim usbrec_cnt As Long, pcirec_cnt As Long + Dim usbreclist() As t_x502_devrec + Dim pcireclist() As t_x502_devrec + Dim devcnt As Long + + Dim old_idx As Long + + old_idx = cbbDevList.ListIndex + + + + Call freeDevlist + + ' USB PCI + usbrec_cnt = E502_UsbGetDevRecordsList(usbreclist, 0) + If usbrec_cnt < 0 Then + MsgBox (" USB-: " + X502_GetErrorString(usbrec_cnt)) + usbrec_cnt = 0 + End If + pcirec_cnt = L502_GetDevRecordsList(pcireclist, 0) + If (pcirec_cnt < 0) Then + MsgBox (" PCI-: " + X502_GetErrorString(pcirec_cnt)) + pcirec_cnt = 0 + End If + + ' + devcnt = usbrec_cnt + pcirec_cnt + + If devcnt > 0 Then + ReDim devlist(0 To devcnt - 1) + + For i = 0 To usbrec_cnt - 1 + devlist(i) = usbreclist(i) + Next + For i = 0 To pcirec_cnt - 1 + devlist(i + usbrec_cnt) = pcireclist(i) + Next + + ' combobox + For i = 0 To devcnt - 1 + cbbDevList.AddItem (X502_StrConvert(devlist(i).DevName) + ", " + X502_StrConvert(devlist(i).serial)) + Next + + devlist_valid = True + + ' , , + ' + + If old_idx >= devcnt Or old_idx < 0 Then + old_idx = 0 + End If + cbbDevList.ListIndex = old_idx + End If +End Sub + +Private Sub adcSampleBlock(ByRef devrec As t_x502_devrec) + Dim err As Long + Dim hnd As Long + Dim adc_freq, frame_freq As Double + + ' + Const ch_points = 1000 + ' + Const ch_cnt = 3 + + + ResultList.Clear + + ' + hnd = X502_Create() + ' , + err = X502_OpenByDevRecord(hnd, devrec) + + If err <> X502_ERR_OK Then + MsgBox (" : " + X502_GetErrorString(err)) + Else + ' - + err = X502_SetLChannelCount(hnd, ch_cnt) + ' , , + ' . 10, 3- 1 , 32- 0.2 + If err = X502_ERR_OK Then + err = X502_SetLChannel(hnd, 0, 0, X502_LCH_MODE_DIFF, X502_ADC_RANGE_10, 0) + End If + If err = X502_ERR_OK Then + err = X502_SetLChannel(hnd, 1, 2, X502_LCH_MODE_COMM, X502_ADC_RANGE_1, 0) + End If + If err = X502_ERR_OK Then + err = X502_SetLChannel(hnd, 2, 31, X502_LCH_MODE_COMM, X502_ADC_RANGE_02, 0) + End If + + If err = X502_ERR_OK Then + ' . = 2 , . (2 /lch_cnt) + f_adc = 2000000 + f_frame = 0 + err = X502_SetAdcFreq(hnd, f_adc, f_frame) + End If + + + If err = X502_ERR_OK Then + ' + err = X502_Configure(hnd, 0) + End If + + If err = X502_ERR_OK Then + ' + err = X502_StreamsEnable(hnd, X502_STREAM_ADC) + End If + + If err <> X502_ERR_OK Then + MsgBox (" : " + X502_GetErrorString(err)) + Else + Dim recv_size As Long + + ' ch_points , + '.. ch_cnt * ch_points + ' CLng Long - vb + ' Integer - + ' 32*1024 + recv_size = CLng(ch_cnt) * ch_points + + + ' + err = X502_StreamsStart(hnd) + If err <> X502_ERR_OK Then + MsgBox (" : " + X502_GetErrorString(err)) + Else + Dim recv_wrds() As Long + Dim recv_vals() As Double + Dim recvd_cnt As Long + + ReDim recv_wrds(0 To recv_size - 1) + ReDim recv_vals(0 To recv_size - 1) + + ' + recvd_cnt = X502_Recv(hnd, recv_wrds, recv_size, 5000) + ' + If recvd_cnt < 0 Then + err = recvd_cnt + MsgBox (" : " + X502_GetErrorString(err)) + Else + ' + If recvd_cnt < recv_size Then + err = X502_ERR_RECV_INSUFFICIENT_WORDS + MsgBox (" ") + End If + End If + + If err = X502_ERR_OK Then + ' - + err = X502_ProcessAdcData(hnd, recv_wrds, recv_vals, recvd_cnt, X502_PROC_FLAGS_VOLT) + If err <> X502_ERR_OK Then + MsgBox (" : " + X502_GetErrorString(err)) + Else + ' + For ch = 0 To ch_cnt - 1 + Dim avg As Double + avg = 0 + ' , .. + ' , .... ... + '.. i- i*ch_cnt + ch + For i = 0 To recvd_cnt / ch_cnt - 1 + avg = avg + recv_vals(i * ch_cnt + ch) + Next + avg = avg / (recvd_cnt / ch_cnt) + + ' + ResultList.AddItem (FormatNumber(avg, 6) + " ") + Next + End If + End If + + ' + X502_StreamsStop (hnd) + End If + End If + + + + X502_Close (hnd) + End If + X502_Free (hnd) +End Sub + + +Private Sub btnRecvData_Click() + ' , Ethernet IP- + If checkUseIP.Value = vbChecked Then + Dim ip_addr As Long + Dim devrec As t_x502_devrec + Dim err As Long + + ip_addr = IP2Long(edtIpAddr.Text) + err = E502_MakeDevRecordByIpAddr(devrec, ip_addr, 0, 5000) + If err = X502_ERR_OK Then + Call adcSampleBlock(devrec) + ' + ' - X502_FreeDevRecordList + Call X502_FreeDevRecord(devrec) + End If + Else + ' + Dim devidx As Long + + devidx = cbbDevList.ListIndex + If devlist_valid Then + If devidx >= 0 And devidx <= UBound(devlist) Then + Call adcSampleBlock(devlist(devidx)) + Else + MsgBox (" ") + End If + Else + MsgBox (" ") + End If + End If +End Sub + + +Private Sub btnRefreshDeviceList_Click() + Call refreshDeviceList +End Sub + + + + +Private Sub Form_Load() + devlist_valid = False + Call refreshDeviceList +End Sub + +Private Sub Form_Unload(Cancel As Integer) + Call freeDevlist +End Sub diff --git a/SDK/examples/vb6/x502_general/x502_example.frx b/SDK/examples/vb6/x502_general/x502_example.frx new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/SDK/examples/vb6/x502_general/x502_example.frx differ diff --git a/SDK/examples/vb6/x502_general/x502_example.vbp b/SDK/examples/vb6/x502_general/x502_example.vbp new file mode 100644 index 0000000..d6ac9f7 --- /dev/null +++ b/SDK/examples/vb6/x502_general/x502_example.vbp @@ -0,0 +1,33 @@ +Type=Exe +Form=x502_example.frm +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation +Module=e502api; e502api.bas +Module=x502api; x502api.bas +Module=l502api; l502api.bas +IconForm="MainForm" +Startup="MainForm" +HelpFile="" +Command32="" +Name="Project1" +HelpContextID="0" +CompatibleMode="0" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=0 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 diff --git a/SDK/examples/vb6/x502_general/x502_example.vbw b/SDK/examples/vb6/x502_general/x502_example.vbw new file mode 100644 index 0000000..1d5fbbe --- /dev/null +++ b/SDK/examples/vb6/x502_general/x502_example.vbw @@ -0,0 +1,4 @@ +MainForm = 50, 50, 768, 666, , 25, 25, 743, 641, C +e502api = 125, 125, 935, 679, +x502api = 200, 200, 918, 816, +l502api = 75, 75, 871, 691, diff --git a/SDK/examples/vb6/x502_general/x502api.bas b/SDK/examples/vb6/x502_general/x502api.bas new file mode 100644 index 0000000..bd9badd --- /dev/null +++ b/SDK/examples/vb6/x502_general/x502api.bas @@ -0,0 +1,789 @@ +Attribute VB_Name = "x502api" +' , , L502 E502 + +' +Public Const X502_LTABLE_MAX_CH_CNT = 256 +' +Public Const X502_ADC_RANGE_CNT = 6 + +' +Public Const X502_ADC_COMM_CH_CNT = 32 + +' +Public Const X502_ADC_DIFF_CH_CNT = 16 + +' +Public Const X502_LCH_AVG_SIZE_MAX = 128 +' +Public Const X502_ADC_FREQ_DIV_MAX = 1024& * 1024& +' +Public Const X502_DIN_FREQ_DIV_MAX = 1024& * 1024& + +' +Public Const X502_OUT_FREQ_DIV_MIN = 2 +' +Public Const X502_OUT_FREQ_DIV_MAX = 1024 +' ( +' L502 0.5) +Public Const X502_OUT_FREQ_DIV_DEFAULT = 2 + +' +Public Const X502_ADC_INTERFRAME_DELAY_MAX = &H1FFFFF + +' BlackFin +Public Const X502_BF_CMD_DEFAULT_TOUT = 500 + +' , +Public Const X502_ADC_SCALE_CODE_MAX = 6000000 +' , +Public Const X502_DAC_SCALE_CODE_MAX = 30000 + +' +Public Const X502_DEVNAME_SIZE = 32 +' +Public Const X502_SERIAL_SIZE = 32 +' +Public Const X502_LOCATION_STR_SIZE = 64 +' MAC- Ethernet +Public Const X502_MAC_ADDR_SIZE = 6 +' +Public Const X502_INSTANCE_NAME_SIZE = 64 +' +Public Const X502_PASSWORD_SIZE = 32 + +' +Public Const X502_EXT_REF_FREQ_MAX = 1500000 +' Flash- +Public Const X502_FLASH_USER_SIZE = &H100000 + +'C BlackFin +Public Const X502_BF_REQ_TOUT = 500 + +' +Public Const X502_DAC_RANGE = 5# + +' +Public Const X502_DAC_CH_CNT = 2 + +' +Public Const X502_DOUT_LINES_CNT = 16 +' , , +Public Const X502_STREAM_IN_MSG_OVERFLOW = &H1010000 + +' #t_x502_devrec. +Public Const X502_DEVREC_SIGN = &H4C524543 + +' +Public Enum t_lpcie_errs + ' + X502_ERR_OK = 0 + ' + X502_ERR_INVALID_HANDLE = -1 + ' + X502_ERR_MEMORY_ALLOC = -2 + ' + X502_ERR_ALREADY_OPENED = -3 + ' + X502_ERR_DEVICE_NOT_FOUND = -4 + ' ( - , ) + X502_ERR_DEVICE_ACCESS_DENIED = -5 + ' + X502_ERR_DEVICE_OPEN = -6 + ' + X502_ERR_INVALID_POINTER = -7 + ' + X502_ERR_STREAM_IS_RUNNING = -8 + ' + X502_ERR_RECV = -9 + ' + X502_ERR_SEND = -10 + ' + X502_ERR_STREAM_OVERFLOW = -11 + ' + X502_ERR_UNSUP_STREAM_MSG = -12 + ' + X502_ERR_MUTEX_CREATE = -13 + ' + X502_ERR_MUTEX_INVALID_HANDLE = -14 + ' + X502_ERR_MUTEX_LOCK_TOUT = -15 + ' + X502_ERR_MUTEX_RELEASE = -16 + ' + X502_ERR_INSUFFICIENT_SYSTEM_RESOURCES = -17 + ' + X502_ERR_NOT_IMPLEMENTED = -18 + ' + X502_ERR_INSUFFICIENT_ARRAY_SIZE = -19 + ' FPGA + X502_ERR_FPGA_REG_READ = -20 + ' FPGA + X502_ERR_FPGA_REG_WRITE = -21 + ' + X502_ERR_STREAM_IS_NOT_RUNNING = -22 + ' + X502_ERR_INTERFACE_RELEASE = -23 + ' + X502_ERR_THREAD_START = -24 + ' + X502_ERR_THREAD_STOP = -25 + ' + X502_ERR_DEVICE_DISCONNECTED = -26 + ' + X502_ERR_IOCTL_INVALID_RESP_SIZE = -27 + ' + X502_ERR_INVALID_DEVICE = -28 + ' + X502_ERR_INVALID_DEVICE_RECORD = -29 + ' + X502_ERR_INVALID_CONFIG_HANDLE = -30 + ' + X502_ERR_DEVICE_NOT_OPENED = -31 + ' + X502_ERR_INVALID_OP_FOR_IFACE = -32 + ' + X502_ERR_FPGA_NOT_LOADED = -33 + ' USB- + X502_ERR_INVALID_USB_CONFIGURATION = -34 + ' + X502_ERR_INVALID_SVC_BROWSE_HANDLE = -35 + ' + X502_ERR_INVALID_SVC_RECORD_HANDLE = -36 + ' + X502_ERR_DNSSD_NOT_RUNNING = -37 + ' + X502_ERR_DNSSD_COMMUNICATION = -38 + ' + X502_ERR_SVC_RESOLVE_TIMEOUT = -39 + ' + X502_ERR_INSTANCE_NAME_ENCODING = -40 + ' + X502_ERR_INSTANCE_MISMATCH = -41 + ' + X502_ERR_NOT_SUP_BY_FIRMWARE = -42 + ' + X502_ERR_NOT_SUP_BY_DRIVER = -43 + ' + X502_ERR_OUT_CYCLE_SETUP_TOUT = -44 + ' + X502_ERR_UNKNOWN_FEATURE_CODE = -45 + + + ' + X502_ERR_INVALID_LTABLE_SIZE = -102 + ' + X502_ERR_INVALID_LCH_NUMBER = -103 + ' + X502_ERR_INVALID_LCH_RANGE = -104 + ' + X502_ERR_INVALID_LCH_MODE = -105 + ' + X502_ERR_INVALID_LCH_PHY_NUMBER = -106 + ' + X502_ERR_INVALID_LCH_AVG_SIZE = -107 + ' + X502_ERR_INVALID_ADC_FREQ_DIV = -108 + ' + X502_ERR_INVALID_DIN_FREQ_DIV = -109 + ' X502 + X502_ERR_INVALID_MODE = -110 + ' + X502_ERR_INVALID_DAC_CHANNEL = -111 + ' + X502_ERR_INVALID_REF_FREQ = -112 + ' + X502_ERR_INVALID_INTERFRAME_DELAY = -113 + ' + X502_ERR_INVALID_SYNC_MODE = -114 + ' + X502_ERR_INVALID_STREAM_CH = -115 + ' + X502_ERR_INVALID_OUT_FREQ_DIV = -116 + + ' + X502_ERR_REF_FREQ_NOT_LOCKED = -131 + ' + X502_ERR_IOCTL_FAILD = -132 + ' + X502_ERR_IOCTL_TIMEOUT = -133 + ' + X502_ERR_GET_INFO = -134 + ' + X502_ERR_DIG_IN_NOT_RDY = -135 + ' + X502_ERR_RECV_INSUFFICIENT_WORDS = -136 + ' , , + X502_ERR_DAC_NOT_PRESENT = -137 + ' + X502_ERR_SEND_INSUFFICIENT_WORDS = -138 + ' + X502_ERR_NO_CMD_RESPONSE = -139 + + ' + X502_ERR_PROC_INVALID_CH_NUM = -140 + ' + X502_ERR_PROC_INVALID_CH_RANGE = -141 + ' Flash- + X502_ERR_FLASH_INVALID_ADDR = -142 + ' Flash- + X502_ERR_FLASH_INVALID_SIZE = -143 + ' Flash- + X502_ERR_FLASH_WRITE_TOUT = -144 + ' Flash- + X502_ERR_FLASH_ERASE_TOUT = -145 + ' Flash- 4 + X502_ERR_FLASH_SECTOR_BOUNDARY = -146 + + ' + X502_ERR_SOCKET_OPEN = -147 + ' + X502_ERR_CONNECTION_TOUT = -148 + ' + X502_ERR_CONNECTION_CLOSED_BY_DEV = -149 + ' + X502_ERR_SOCKET_SET_BUF_SIZE = -150 + ' + X502_ERR_NO_DATA_CONNECTION = -151 + ' + X502_ERR_NO_STREAM_END_MSG = -152 + ' + X502_ERR_CONNECTION_RESET = -153 + ' + X502_ERR_HOST_UNREACHABLE = -154 + ' TCP- + X502_ERR_TCP_CONNECTION_ERROR = -155 + + ' BlackFin + X502_ERR_LDR_FILE_OPEN = -180 + ' BlackFin + X502_ERR_LDR_FILE_READ = -181 + ' BlackFin + X502_ERR_LDR_FILE_FORMAT = -182 + ' LDR-, BlackFin HDMA + X502_ERR_LDR_FILE_UNSUP_FEATURE = -183 + ' BlackFin + X502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184 + ' / BlackFin + X502_ERR_BF_REQ_TIMEOUT = -185 + ' BlackFin + X502_ERR_BF_CMD_IN_PROGRESS = -186 + ' BlackFin + X502_ERR_BF_CMD_TIMEOUT = -187 + ' BlackFin + X502_ERR_BF_CMD_RETURN_INSUF_DATA = -188 + ' BlackFin + X502_ERR_BF_LOAD_RDY_TOUT = -189 + ' + X502_ERR_BF_NOT_PRESENT = -190 + ' BlackFin HDMA + X502_ERR_BF_INVALID_ADDR = -191 + ' , BlackFin + X502_ERR_BF_INVALID_CMD_DATA_SIZE = -192 +End Enum + + +' +Public Enum t_x502_iface + X502_IFACE_UNKNOWN = 0 ' + X502_IFACE_USB = 1 ' USB + X502_IFACE_ETH = 2 ' Ethernet TCP/IP + X502_IFACE_PCI = 3 ' PCI/PCIe +End Enum + +', +Public Enum t_x502_getdevs_flags + ' , , + X502_GETDEVS_FLAGS_ONLY_NOT_OPENED = &H1& +End Enum + + +' . +Public Enum t_x502_digout_word_flags + X502_DIGOUT_WORD_DIS_H = &H20000 ' ( ) + X502_DIGOUT_WORD_DIS_L = &H10000 ' +End Enum + +' +Public Enum t_x502_ref_freq + X502_REF_FREQ_2000KHZ = 2000000 ' 2 + X502_REF_FREQ_1500KHZ = 1500000 ' 1.5 +End Enum + +' +Public Enum t_x502_adc_range + X502_ADC_RANGE_10 = 0 ' +/-10V + X502_ADC_RANGE_5 = 1 ' +/-5V + X502_ADC_RANGE_2 = 2 ' +/-2V + X502_ADC_RANGE_1 = 3 ' +/-1V + X502_ADC_RANGE_05 = 4 ' +/-0.5V + X502_ADC_RANGE_02 = 5 ' +/-0.2V +End Enum + +' +Public Enum t_x502_lch_mode + X502_LCH_MODE_COMM = 0 ' + X502_LCH_MODE_DIFF = 1 ' + X502_LCH_MODE_ZERO = 2 ' +End Enum + +' . +Public Enum t_x502_sync_mode + X502_SYNC_INTERNAL = 0 ' + X502_SYNC_EXTERNAL_MASTER = 1 ' + X502_SYNC_DI_SYN1_RISE = 2 ' DI_SYN1 + X502_SYNC_DI_SYN1_FALL = 3 ' DI_SYN2 + X502_SYNC_DI_SYN2_RISE = 6 ' DI_SYN1 + X502_SYNC_DI_SYN2_FALL = 7 ' DI_SYN2 +End Enum + +', +Public Enum t_x502_proc_flags + ', + X502_PROC_FLAGS_VOLT = &H1& + ' , + ' . + ' BlackFin + ' . + X502_PROC_FLAGS_DONT_CHECK_CH = &H10000 +End Enum + +' +Public Enum t_x502_streams + X502_STREAM_ADC = &H1& ' + X502_STREAM_DIN = &H2& ' + X502_STREAM_DAC1 = &H10& ' + X502_STREAM_DAC2 = &H20& ' + X502_STREAM_DOUT = &H40& ' + ' , + X502_STREAM_ALL_IN = X502_STREAM_ADC Or X502_STREAM_DIN + ' , + X502_STREAM_ALL_OUT = X502_STREAM_DAC1 Or X502_STREAM_DAC2 Or X502_STREAM_DOUT +End Enum + +', +Public Enum t_x502_stream_out_wrd_type + X502_STREAM_OUT_WORD_TYPE_DOUT = &H0& ' + X502_STREAM_OUT_WORD_TYPE_DAC1 = &H40000000 ' 1- + X502_STREAM_OUT_WORD_TYPE_DAC2 = &H80000000 ' 2- +End Enum + +' +Public Enum t_x502_mode + X502_MODE_FPGA = 0 ' + ' BlackFin + X502_MODE_DSP = 1 ' + ', + ' + X502_MODE_DEBUG = 2 ' +End Enum + +' . +Public Enum t_x502_dac_ch + X502_DAC_CH1 = 0 ' + X502_DAC_CH2 = 1 ' +End Enum + +', . + Public Enum t_x502_dacout_flags + ', + ' . , , + ' + X502_DAC_FLAGS_VOLT = &H1& + ', + ' . + X502_DAC_FLAGS_CALIBR = &H2& +End Enum + +' +Public Enum t_x502_stream_ch + X502_STREAM_CH_IN = 0 ' + X502_STREAM_CH_OUT = 1 ' +End Enum + +' , +Public Enum t_x502_pullups + X502_PULLUPS_DI_H = &H1 ' ( L502) + X502_PULLUPS_DI_L = &H2 ' ( L502) + X502_PULLUPS_DI_SYN1 = &H4 ' SYN1 + X502_PULLUPS_DI_SYN2 = &H8 ' SYN2 + X502_PULLDOWN_CONV_IN = &H10 ' 0 + ' CONV_IN ( E502) + X502_PULLDOWN_START_IN = &H20 ' 0 + ' START_IN ( E502) +End Enum + +', +Public Enum t_x502_dev_flags + ' + X502_DEVFLAGS_DAC_PRESENT = &H1& + ' + X502_DEVFLAGS_GAL_PRESENT = &H2& + ' BlackFin + X502_DEVFLAGS_BF_PRESENT = &H4& + + ', USB + X502_DEVFLAGS_IFACE_SUPPORT_USB = &H100& + ', Ethernet + X502_DEVFLAGS_IFACE_SUPPORT_ETH = &H200& + ', PCI/PCI-Express + X502_DEVFLAGS_IFACE_SUPPORT_PCI = &H400& + + ', + X502_DEVFLAGS_INDUSTRIAL = &H8000& + + ', Flash- + X502_DEVFLAGS_FLASH_DATA_VALID = &H10000 + ', Flash- + X502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = &H20000 + ', Flash- + X502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = &H40000 + + ', + X502_DEVFLAGS_FPGA_LOADED = &H800000 + ', ( t_x502_devrec) + X502_DEVFLAGS_DEVREC_OPENED = &H1000000 +End Enum + +Public Enum t_x502_location_type + ' + X502_LOCATION_TYPE_NONE = 0 + ' + X502_LOCATION_TYPE_ADDR = 1 + ' + X502_LOCATION_TYPE_INSTANCE_NAME = 2 +End Enum + +' +Public Enum t_x502_out_cycle_flags + ' + X502_OUT_CYCLE_FLAGS_FORCE = &H1& + ' + ' ( X502_OutCycleSetup()) + ' ( X502_OutCycleStop()) + X502_OUT_CYCLE_FLAGS_WAIT_DONE = &H2& +End Enum + +' , , . +Public Enum t_x502_features + ' , X502_OUT_FREQ_DIV_DEFAULT + X502_FEATURE_OUT_FREQ_DIV = 1 + ' X502_OutGetStatusFlags() + X502_FEATURE_OUT_STATUS_FLAGS = 2 +End Enum + +' +Public Enum t_x502_out_status_flags + ' , + X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = &H1& + ' , + ' - + ' X502_OutGetStatusFlags() ( , ) + X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = &H2& +End Enum + +'--------------- --------------- + +' +Public Type t_x502_devrec + sign As Long ' + DevName(0 To X502_DEVNAME_SIZE - 1) As Byte ' + serial(0 To X502_SERIAL_SIZE - 1) As Byte ' + location(0 To X502_LOCATION_STR_SIZE - 1) As Byte ' ( ) + flags As Long ' #t_x502_dev_flags, + iface As Byte ', + location_type As Byte ', location ( #t_x502_location_type) + res(0 To 122 - 1) As Byte ' + internal As Long ' +End Type + + +' +Public Type t_x502_cbr_coef + offs As Double ' + k As Double ' +End Type + + +' +Public Type t_x502_cbr + adc(0 To X502_ADC_RANGE_CNT - 1) As t_x502_cbr_coef ' + res1(0 To 64 - 1) As Long ' + dac(0 To X502_DAC_CH_CNT - 1) As t_x502_cbr_coef ' + res2(0 To 20 - 1) As Long +End Type + +' L502/E502 +Public Type t_x502_info + DevName(0 To X502_DEVNAME_SIZE - 1) As Byte ' ("L502" "E502") + serial(0 To X502_SERIAL_SIZE - 1) As Byte ' + devflags As Long ' #t_x502_dev_flags, + fpga_ver As Integer ' ( - , - ) + plda_ver As Byte ' , + board_rev As Byte ' + mcu_firmware_ver As Long ' Cortex-M4. E502 + factory_mac(0 To X502_MAC_ADDR_SIZE - 1) As Byte ' MAC- --- + ' Ethernet- */ + res(0 To 110 - 1) As Byte ' + cbr As t_x502_cbr ' ( Flash-) +End Type + + +Public Declare Function X502_Create Lib "x502api" () As Long +Public Declare Function X502_Free Lib "x502api" (ByVal hnd As Long) As Long + +Public Declare Function X502_OpenByDevRecord Lib "x502api" (ByVal hnd As Long, ByRef devrec As t_x502_devrec) As Long +Private Declare Function tmp_X502_FreeDevRecordList Lib "x502api" Alias "X502_FreeDevRecordList" (ByRef list As t_x502_devrec, ByVal size As Long) As Long + + +Public Declare Function X502_Close Lib "x502api" (ByVal hnd As Long) As Long +Public Declare Function X502_GetDevInfo Lib "x502api" (ByVal hnd As Long, ByRef info As t_x502_info) As Long + + +Public Declare Function X502_Configure Lib "x502api" (ByVal hnd As Long, ByVal flags As Long) As Long +Public Declare Function X502_SetLChannel Lib "x502api" (ByVal hnd As Long, ByVal lch As Long, ByVal phy_ch As Long, ByVal mode As Long, ByVal range As Long, ByVal avg As Long) As Long +' . +Public Declare Function X502_SetLChannelCount Lib "x502api" (ByVal hnd As Long, ByVal lch_cnt As Long) As Long +' . +Public Declare Function X502_GetLChannelCount Lib "x502api" (ByVal hnd As Long, ByRef lch_cnt As Long) As Long +' +Public Declare Function X502_SetAdcFreqDivider Lib "x502api" (ByVal hnd As Long, ByVal adc_freq_div As Long) As Long +' . +Public Declare Function X502_SetAdcInterframeDelay Lib "x502api" (ByVal hnd As Long, ByVal delay As Long) As Long +' . +Public Declare Function X502_SetDinFreqDivider Lib "x502api" (ByVal hnd As Long, ByVal din_freq_div As Long) As Long +' +Public Declare Function X502_SetOutFreqDivider Lib "x502api" (ByVal hnd As Long, ByVal out_freq_div As Long) As Long +' . +Public Declare Function X502_SetAdcFreq Lib "x502api" (ByVal hnd As Long, ByRef f_acq As Double, ByRef f_frame As Double) As Long +' . +Public Declare Function X502_SetDinFreq Lib "x502api" (ByVal hnd As Long, ByRef f_din As Double) As Long +' . +Public Declare Function X502_SetOutFreq Lib "x502api" (ByVal hnd As Long, ByRef f_dout As Double) As Long +' +Public Declare Function X502_GetAdcFreq Lib "x502api" (ByVal hnd As Long, ByRef f_acq As Double, ByRef f_frame As Double) As Long +' . +Public Declare Function X502_SetRefFreq Lib "x502api" (ByVal hnd As Long, ByVal freq As Long) As Long +' +Public Declare Function X502_SetExtRefFreqValue Lib "x502api" (ByVal hnd As Long, ByVal freq As Double) As Long +' +Public Declare Function X502_GetRefFreqValue Lib "x502api" (ByVal hnd As Long, ByRef freq As Double) As Long +' . +Public Declare Function X502_SetSyncMode Lib "x502api" (ByVal hnd As Long, ByVal sync_mode As Long) As Long +' +Public Declare Function X502_SetSyncStartMode Lib "x502api" (ByVal hnd As Long, ByVal sync_start_mode As Long) As Long +' . +Public Declare Function X502_SetMode Lib "x502api" (ByVal hnd As Long, ByVal mode As Long) As Long +' . +Public Declare Function X502_GetMode Lib "x502api" (ByVal hnd As Long, ByRef mode As Long) As Long +' +Public Declare Function X502_SetAdcCoef Lib "x502api" (ByVal hnd As Long, ByVal range As Long, ByVal k As Double, ByVal offs As Double) As Long +' . +Public Declare Function X502_GetAdcCoef Lib "x502api" (ByVal hnd As Long, ByVal range As Long, ByRef k As Double, ByRef offs As Double) As Long +' . +Public Declare Function X502_SetDacCoef Lib "x502api" (ByVal hnd As Long, ByVal ch As Long, ByVal k As Double, ByVal offs As Double) As Long +' +Public Declare Function X502_GetDacCoef Lib "x502api" (ByVal hnd As Long, ByVal ch As Long, ByRef k As Double, ByRef offs As Double) As Long + +' . +Public Declare Function X502_AsyncOutDac Lib "x502api" (ByVal hnd As Long, ByVal ch As Long, ByVal data As Double, ByVal flags As Long) As Long +' . +Public Declare Function X502_AsyncOutDig Lib "x502api" (ByVal hnd As Long, ByVal Val As Long, ByVal msk As Long) As Long +' . +Public Declare Function X502_AsyncInDig Lib "x502api" (ByVal hnd As Long, ByRef din As Long) As Long + +Private Declare Function tmp_X502_AsyncGetAdcFrame Lib "x502api" Alias "X502_AsyncGetAdcFrame" (ByVal hnd As Long, ByVal flags As Long, ByVal tout As Long, ByRef data As Double) As Long + +' /. +Public Declare Function X502_StreamsEnable Lib "x502api" (ByVal hnd As Long, ByVal streams As Long) As Long +' /. +Public Declare Function X502_StreamsDisable Lib "x502api" (ByVal hnd As Long, ByVal streams As Long) As Long +' , +Public Declare Function X502_GetEnabledStreams Lib "x502api" (ByVal hnd As Long, ByRef streams As Long) As Long +' /. +Public Declare Function X502_StreamsStart Lib "x502api" (ByVal hnd As Long) As Long +' /. +Public Declare Function X502_StreamsStop Lib "x502api" (ByVal hnd As Long) As Long +', / +Public Declare Function X502_IsRunning Lib "x502api" (ByVal hnd As Long) As Long +' . +Private Declare Function tmp_X502_Recv Lib "x502api" Alias "X502_Recv" (ByVal hnd As Long, ByRef buf As Long, ByVal size As Long, ByVal tout As Long) As Long +' . +Private Declare Function tmp_X502_Send Lib "x502api" Alias "X502_Send" (ByVal hnd As Long, ByRef buf As Long, ByVal size As Long, ByVal tout As Long) As Long +' . +Private Declare Function tmp_X502_ProcessAdcData Lib "x502api" Alias "X502_ProcessAdcData" (ByVal hnd As Long, ByRef src As Long, ByRef dest As Double, ByRef size As Long, ByVal flags As Long) As Long +' . +Private Declare Function tmp_X502_ProcessData Lib "x502api" Alias "X502_ProcessData" (ByVal hnd As Long, ByRef src As Long, ByVal flags As Long, ByRef adc_data As Double, ByRef adc_data_size As Long, ByRef din_data As Long, ByRef din_data_size As Long) As Long +' . +Private Declare Function tmp_X502_ProcessDataWithUserExt Lib "x502api" Alias "X502_ProcessDataWithUserExt" (ByVal hnd As Long, ByRef src As Long, ByVal size As Long, ByVal flags As Long, ByRef adc_data As Double, ByRef adc_data_size As Long, ByRef din_data As Long, ByRef din_data_size As Long, ByRef usr_data As Long, ByRef usr_data_size As Long) As Long +' . +Private Declare Function tmp_X502_PrepareData Lib "x502api" Alias "X502_PrepareData" (ByVal hnd As Long, ByRef dac1 As Double, ByRef dac2 As Double, ByRef digout As Long, ByVal size As Long, ByVal flags As Long, ByRef out_buf As Long) As Long + +' . +Public Declare Function X502_GetRecvReadyCount Lib "x502api" (ByVal hnd As Long, ByRef rdy_cnt As Long) As Long +' . +Public Declare Function X502_GetSendReadyCount Lib "x502api" (ByVal hnd As Long, ByRef rdy_cnt As Long) As Long +' . +Public Declare Function X502_GetNextExpectedLchNum Lib "x502api" (ByVal hnd As Long, ByRef lch As Long) As Long +' +Public Declare Function X502_PreloadStart Lib "x502api" (ByVal hnd As Long) As Long +' +Public Declare Function X502_OutCycleLoadStart Lib "x502api" (ByVal hnd As Long, ByVal size As Long) As Long +' +Public Declare Function X502_OutCycleSetup Lib "x502api" (ByVal hnd As Long, ByVal flags As Long) As Long +' +Public Declare Function X502_OutCycleStop Lib "x502api" (ByVal hnd As Long, ByVal flags As Long) As Long +', +Public Declare Function X502_OutCycleCheckSetupDone Lib "x502api" (ByVal hnd As Long, ByRef done As Long) As Long +' +Public Declare Function X502_OutGetStatusFlags Lib "x502api" (ByVal hnd As Long, ByRef status As Long) As Long +' . +Public Declare Function X502_SetStreamBufSize Lib "x502api" (ByVal hnd As Long, ByVal dma_ch As Long, ByVal size As Long) As Long +' DMA. +Public Declare Function X502_SetStreamStep Lib "x502api" (ByVal hnd As Long, ByVal dma_ch As Long, ByVal step As Long) As Long + +' BlackFin. +Public Declare Function X502_BfLoadFirmware Lib "x502api" (ByVal hnd As Long, ByVal filename As String) As Long +', BlackFIn. +Public Declare Function X502_BfCheckFirmwareIsLoaded Lib "x502api" (ByVal hnd As Long, ByRef version As Long) As Long +' . +Private Declare Function tmp_X502_BfMemRead Lib "x502api" Alias "X502_BfMemRead" (ByVal hnd As Long, ByVal addr As Long, ByRef regs As Long, ByVal size As Long) As Long +' . +Private Declare Function tmp_X502_BfMemWrite Lib "x502api" Alias "X502_BfMemWrite" (ByVal hnd As Long, ByVal addr As Long, ByRef regs As Long, ByVal size As Long) As Long +' . +Private Declare Function tmp_X502_BfExecCmd Lib "x502api" Alias "X502_BfExecCmd" (ByVal hnd As Long, ByVal cmd_code As Integer, ByVal par As Long, ByRef snd_data As Long, ByVal snd_size As Long, ByRef rcv_data As Long, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + +' Flash-. + Private Declare Function tmp_X502_FlashRead Lib "x502api" Alias "X502_FlashRead" (ByVal hnd As Long, ByVal addr As Long, ByRef data As Byte, ByVal size As Long) As Long + ' Flash- . + Private Declare Function tmp_X502_FlashWrite Lib "x502api" Alias "X502_FlashWrite" (ByVal hnd As Long, ByVal addr As Long, ByRef data As Byte, ByVal size As Long) As Long +' Flash-. + Public Declare Function X502_FlashErase Lib "x502api" (ByVal hnd As Long, ByVal addr As Long, ByVal size As Long) As Long + ' Flash-. + Public Declare Function X502_FlashWriteEnable Lib "x502api" (ByVal hnd As Long) As Long + ' Flash-. + Public Declare Function X502_FlashWriteDisable Lib "x502api" (ByVal hnd As Long) As Long + + ' . +Public Declare Function X502_GetLibraryVersion Lib "x502api" () As Long +' . +Public Declare Function X502_LedBlink Lib "x502api" (ByVal hnd As Long) As Long +' . +Public Declare Function X502_SetDigInPullup Lib "x502api" (ByVal hnd As Long, ByVal pullups As Long) As Long +' +Public Declare Function X502_CheckFeature Lib "x502api" (ByVal hnd As Long, ByVal feature As Long) As Long + + +Private Declare Function tmp_X502_GetErrorString Lib "x502api" Alias "X502_GetErrorString" (ByVal Error_Code As Long) As Long + + +Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long +Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) +Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long +Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long + + + + +Public Function X502_FreeDevRecordList(ByRef list() As t_x502_devrec, ByVal size As Long) As Long + X502_FreeDevRecordList = tmp_X502_FreeDevRecordList(list(0), size) +End Function + +Public Function X502_FreeDevRecord(ByRef rec As t_x502_devrec) As Long + Dim list(0 To 0) As t_x502_devrec + list(0) = rec + X502_FreeDevRecord = X502_FreeDevRecordList(list, 1) +End Function + + + +Public Function X502_AsyncGetAdcFrame(ByVal hnd As Long, ByVal flags As Long, ByVal tout As Long, ByRef data() As Double) As Long + X502_AsyncGetAdcFrame = tmp_X502_AsyncGetAdcFrame(hnd, flags, tout, data(0)) +End Function + +Public Function X502_Recv(ByVal hnd As Long, ByRef buf() As Long, ByVal size As Long, ByVal tout As Long) As Long + X502_Recv = tmp_X502_Recv(hnd, buf(0), size, tout) +End Function + +Public Function X502_Send(ByVal hnd As Long, ByRef buf() As Long, ByVal size As Long, ByVal tout As Long) As Long + X502_Send = tmp_X502_Send(hnd, buf(0), size, tout) +End Function + + +Public Function X502_ProcessAdcData(ByVal hnd As Long, ByRef src() As Long, ByRef dest() As Double, ByRef size As Long, ByVal flags As Long) As Long + X502_ProcessAdcData = tmp_X502_ProcessAdcData(hnd, src(0), dest(0), size, flags) +End Function + +Public Function X502_ProcessData(ByVal hnd As Long, ByRef src() As Long, ByVal flags As Long, ByRef adc_data() As Double, ByRef adc_data_size As Long, ByRef din_data() As Long, ByRef din_data_size As Long) As Long + X502_ProcessData = tmp_X502_ProcessData(hnd, src(0), flags, adc_data(0), adc_data_size, din_data(0), din_data_size) +End Function + +Public Function X502_ProcessDataWithUserExt(ByVal hnd As Long, ByRef src() As Long, ByVal size As Long, ByVal flags As Long, ByRef adc_data() As Double, ByRef adc_data_size As Long, ByRef din_data() As Long, ByRef din_data_size As Long, ByRef usr_data() As Long, ByRef usr_data_size As Long) As Long + X502_ProcessDataWithUserExt = tmp_X502_ProcessDataWithUserExt(hnd, src(0), size, flags, adc_data(0), adc_data_size, din_data(0), din_data_size, usr_data(0), usr_data_size) +End Function + +Public Function X502_PrepareData(ByVal hnd As Long, ByRef dac1() As Double, ByRef dac2() As Double, ByRef digout() As Long, ByVal size As Long, ByVal flags As Long, ByRef out_buf() As Long) As Long + X502_PrepareData = tmp_X502_PrepareData(hnd, dac1(0), dac2(0), digout(0), size, flags, out_buf(0)) +End Function + +Public Function X502_BfMemRead(ByVal hnd As Long, ByVal addr As Long, ByRef regs() As Long, ByVal size As Long) As Long + X502_BfMemRead = tmp_X502_BfMemRead(hnd, addr, regs(0), size) +End Function + +Public Function X502_BfMemWrite(ByVal hnd As Long, ByVal addr As Long, ByRef regs() As Long, ByVal size As Long) As Long + X502_BfMemWrite = tmp_X502_BfMemWrite(hnd, addr, regs(0), size) +End Function + +Public Function X502_BfExecCmd(ByVal hnd As Long, ByVal cmd_code As Integer, ByVal par As Long, ByRef snd_data() As Long, ByVal snd_size As Long, ByRef rcv_data() As Long, ByVal rcv_size As Long, ByVal tout As Long, ByRef recvd_size As Long) As Long + X502_BfExecCmd = tmp_X502_BfExecCmd(hnd, cmd_code, par, snd_data(0), snd_size, rcv_data(0), rcv_size, tout, recvd_size) +End Function + +Public Function X502_FlashRead(ByVal hnd As Long, ByVal addr As Long, ByRef data() As Byte, ByVal size As Long) As Long + X502_FlashRead = tmp_X502_FlashRead(hnd, addr, data(0), size) +End Function + + Public Function X502_FlashWrite(ByVal hnd As Long, ByVal addr As Long, ByRef data() As Byte, ByVal size As Long) As Long + X502_FlashWrite = tmp_X502_FlashWrite(hnd, addr, data(0), size) + End Function + + +Public Function X502_StrConvert(ByRef str_arr() As Byte) As String + Dim psCString As String + Dim sReturn As String + Dim iNullCharPos As Integer + + psCString = StrConv(str_arr, vbUnicode) + + iNullCharPos = InStr(psCString, vbNullChar) + + If iNullCharPos > 0 Then + sReturn = Left(psCString, iNullCharPos - 1) + Else + sReturn = psCString + End If + + X502_StrConvert = sReturn + +End Function + + +Public Function X502_StrFromPtr(ByVal lpStr As Long) As String + Dim bStr() As Byte + Dim cChars As Long + On Error Resume Next + ' Get the number of characters in the buffer + cChars = lstrlen(lpStr) + If cChars Then + ' Resize the byte array + ReDim bStr(0 To cChars - 1) As Byte + ' Grab the ANSI buffer + Call CopyMemory(bStr(0), ByVal lpStr, cChars) + End If + ' Now convert to a VB Unicode string + X502_StrFromPtr = StrConv(bStr, vbUnicode) +End Function + +Public Function X502_GetErrorString(ByVal Error_Code As Long) As String + Dim Ptr As Long + Ptr = tmp_X502_GetErrorString(Error_Code) + X502_GetErrorString = X502_StrFromPtr(Ptr) +End Function diff --git a/SDK/include/e502api.h b/SDK/include/e502api.h new file mode 100644 index 0000000..c46cfd9 --- /dev/null +++ b/SDK/include/e502api.h @@ -0,0 +1,1015 @@ +#ifndef E502API_H +#define E502API_H + +#include "x502api.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************//** + @addtogroup const_list + @{ + *****************************************************************************/ +/** @brief + + , , + E502_EthSvcBrowseGetEvent() */ +typedef enum { + E502_ETH_SVC_EVENT_NONE = 0, /**< */ + E502_ETH_SVC_EVENT_ADD = 1, /**< */ + E502_ETH_SVC_EVENT_REMOVE = 2, /**< + */ + E502_ETH_SVC_EVENT_CHANGED = 3 /**< + */ +} t_e502_eth_svc_event; + +/** @} */ + +/***************************************************************************//** + @addtogroup type_list + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + , + E-502. + , + . + E502_EthConfigCreate() + E502_EthConfigFree(). + , + E502_EthConfigRead(), + + E502_EthConfigWrite() + *****************************************************************************/ +typedef struct st_e502_eth_config_state* t_e502_eth_config_hnd; + +/**************************************************************************//** + @brief + + + . + E502_EthSvcBrowseStart() E502_EthSvcBrowseStop() + *****************************************************************************/ +typedef struct st_e502_eth_svc_browse_context *t_e502_eth_svc_browse_hnd; +/**************************************************************************//** + @brief + + , + E-502. + . E502_EthSvcBrowseGetEvent() + E502_EthSvcRecordFree() + *****************************************************************************/ +typedef struct st_e502_eth_svc_record *t_e502_eth_svc_record_hnd; + +/** @} */ + +/***************************************************************************//** + @addtogroup func_open + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief E-502, USB + + E-502, + , . + + #X502_GETDEVS_FLAGS_ONLY_NOT_OPENED. + + @param[in] serials size*#X502_SERIAL_SIZE , + . + NULL, size=0, devcnt!=NULL, , + . + @param[in] size , + serial. + size . + 0, serials=NULL + @param[in] flags #t_x502_getdevs_flags, + . + @param[out] devcnt devcnt!=NULL, + E502 + ( size). + @return <0 - , + serials ( <= size) +*******************************************************************************/ +X502_EXPORT(int32_t) E502_UsbGetSerialList(char serials[][X502_SERIAL_SIZE], uint32_t size, + uint32_t flags, uint32_t *devcnt); + +/***************************************************************************//** + @brief E502_UsbGetSerialList, E16 + ******************************************************************************/ +X502_EXPORT(int32_t) E16_UsbGetSerialList(char serials[][X502_SERIAL_SIZE], uint32_t size, + uint32_t flags, uint32_t *devcnt); + +/***************************************************************************//** + @brief E-502, USB, + + E-502, USB, + . + + , + . + X502_Close() + ( #X502_ERR_DEVICE_ACCESS_DENIED). + + NULL , + , + . + , + #X502_ERR_DEVICE_NOT_FOUND. E-502, + , + , + . + + + X502_Close(). + + @param[in] hnd . + @param[in] serial + NULL. + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_OpenUsb(t_x502_hnd hnd, const char *serial); + +/***************************************************************************//** + @brief E502_OpenUsb, E16 + ******************************************************************************/ +X502_EXPORT(int32_t) E16_OpenUsb(t_x502_hnd hnd, const char *serial); + +/***************************************************************************//** + @brief E-502 IP- + + E-502, Ethernet, + IPv4. + + + X502_Close(). + + @param[in] hnd . + @param[in] ip_addr IPv4 32- . + "a.b.c.d" ip_addr = (a<<24)|(b<<16)|(c<<8)|d. + @param[in] flags , . , 0. + @param[in] tout . + , . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_OpenByIpAddr(t_x502_hnd hnd, uint32_t ip_addr, + uint32_t flags, uint32_t tout); + +/***************************************************************************//** + @brief E-16 IP- + + E-16, Ethernet, + IPv4. + + + X502_Close(). + + @param[in] hnd . + @param[in] ip_addr IPv4 32- . + "a.b.c.d" ip_addr = (a<<24)|(b<<16)|(c<<8)|d. + @param[in] flags , . , 0. + @param[in] tout . + , . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E16_OpenByIpAddr(t_x502_hnd hnd, uint32_t ip_addr, + uint32_t flags, uint32_t tout); + + +/** @} */ + +/***************************************************************************//** + @addtogroup func_devrec + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief , E502 + + USB E-502 + + ( ). + + X502_FreeDevRecordList() ( + E502_UsbGetDevRecordsList() , , + , ). + + @param[out] list . + size . + NULL, size=0, devcnt!=NULL, , + . + @param[in] size , + list. + size , . + @param[in] flags #t_x502_getdevs_flags, + . + @param[out] devcnt , + E-502, + USB ( size). + @return <0 --- , + ( <= size). + + X502_FreeDevRecordList() , + , . + ******************************************************************************/ +X502_EXPORT(int32_t) E502_UsbGetDevRecordsList(t_x502_devrec* list, uint32_t size, + uint32_t flags, uint32_t* devcnt) ; + + +/***************************************************************************//** + @brief E502_UsbGetDevRecordsList, , E16 + ******************************************************************************/ +X502_EXPORT(int32_t) E16_UsbGetDevRecordsList(t_x502_devrec* list, uint32_t size, + uint32_t flags, uint32_t* devcnt) ; + +/***************************************************************************//** + @brief E502_UsbGetDevRecordsList, , E14-440 + ******************************************************************************/ +X502_EXPORT(int32_t) E440_UsbGetDevRecordsList(t_x502_devrec* list, uint32_t size, + uint32_t flags, uint32_t* devcnt) ; + + +/***************************************************************************//** + @brief , E502 + + E502_UsbGetDevRecordsList, idVendor idProduct USB + +@param[in] idVendor idVendor +@param[in] idProduct idProduct + @return <0 --- , + ( <= size). + + X502_FreeDevRecordList() , + , . + ******************************************************************************/ +X502_EXPORT(int32_t) E502_UsbGetDevRecordsList2(t_x502_devrec *list, uint32_t size, + uint32_t flags, uint32_t *devcnt, uint16_t idVendor, uint16_t idProduct); + +/***************************************************************************//** + @brief IP- + + , + Ethernet, IPv4 . , + . + X502_OpenByDevRecord(). + + @param[out] devrec , + . + @param[in] ip_addr IPv4 32- ( + ip_addr E502_OpenByIpAddr()). + @param[in] flags . , 0. + @param[in] tout . + + X502_OpenByDevRecord(). + , + X502_OpenByDevRecord() . + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_MakeDevRecordByIpAddr(t_x502_devrec *devrec, uint32_t ip_addr, + uint32_t flags, uint32_t tout); + +/***************************************************************************//** + @brief IP- + + E502_MakeDevRecordByIpAddr. + E16 *devname. + + @param[out] devrec , + . + @param[in] ip_addr IPv4 32- ( + ip_addr E502_OpenByIpAddr()). + @param[in] flags . , 0. + @param[in] tout . + + X502_OpenByDevRecord(). + , + X502_OpenByDevRecord() . + @param[in] devname "E16" "E502". + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_MakeDevRecordByIpAddr2(t_x502_devrec *devrec, uint32_t ip_addr, + uint32_t flags, uint32_t tout, char const *devname); + + +/***************************************************************************//** + @brief TCP- + + TCP- + E-502. , E-502 , + , + E-502 . + E-502, . + , + TCP-, . + , + , E502_EthDevRecordSetDataPort(). + + , + E502_MakeDevRecordByIpAddr() + X502_OpenByDevRecord(). + + @param[in] devrec , + TCP-. + @param[in] cmd_port TCP- + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthDevRecordSetCmdPort(t_x502_devrec *devrec, uint16_t cmd_port); + +/***************************************************************************//** + @brief TCP- + + E502_EthDevRecordSetCmdPort(), TCP- + , -. + + @param[in] devrec , + TCP-. + @param[in] data_port TCP- + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthDevRecordSetDataPort(t_x502_devrec *devrec, uint16_t data_port); + + + +/***************************************************************************//** + @brief + + , + Ethernet, , + . + , E-502, . + , + . + X502_OpenByDevRecord(). + + , .. + E502_EthSvcRecordFree(). + + @param[out] devrec , + . + @param[in] svc , + E502_EthSvcBrowseGetEvent(). + @param[in] flags . , 0. + @param[in] tout . + + X502_OpenByDevRecord(). + , + X502_OpenByDevRecord() . + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_MakeDevRecordByEthSvc(t_x502_devrec *devrec, t_e502_eth_svc_record_hnd svc, + uint32_t flags, uint32_t tout); + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_eth_config E502 + @{ +*******************************************************************************/ + + + + +/***************************************************************************//** + @brief IP- + + IP- . + , + Ethernet. + @param[in] hnd + @param[out] ip_addr IPv4 32- ( + ip_addr E502_OpenByIpAddr()). + + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_GetIpAddr(t_x502_hnd hnd, uint32_t *ip_addr); + + + +/***************************************************************************//** + @brief + + . + + -. + @return NULL , - +*******************************************************************************/ +X502_EXPORT(t_e502_eth_config_hnd) E502_EthConfigCreate(void); + +/***************************************************************************//** + @brief . + + , + E502_EthConfigCreate(). + , + ! + @param[in] cfg + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigFree(t_e502_eth_config_hnd cfg); + + + +/***************************************************************************//** + @brief + + , + E502_EthConfigCreate() + . + + , + . + + @param[in] hnd + @param[in,out] cfg + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigRead(t_x502_hnd hnd, t_e502_eth_config_hnd cfg); + + +/***************************************************************************//** + @brief + + , + . + + Ethernet-, + , + , + --- + . + + + ( , ). USB + + ( , ). + + @param[in] hnd + @param[in] cfg + @param[in] passwd + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigWrite(t_x502_hnd hnd, t_e502_eth_config_hnd cfg, + const char *passwd); + + +/***************************************************************************//** + @brief + + + , . + + @param[in] src_cfg , + . + @param[out] dst_cfg , + + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigCopy(t_e502_eth_config_hnd src_cfg, + t_e502_eth_config_hnd dst_cfg); + +/***************************************************************************//** + @brief , Ethernet + + , Ethernet . + , Ethernet . + @param[in] cfg + @param[out] en , 1, + --- 0 + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetEnabled(t_e502_eth_config_hnd cfg, uint32_t *en); + +/***************************************************************************//** + @brief Ethernet + + , Ethernet. + , Ethernet . + @param[in] cfg + @param[in] en 0 Ethernet, 1 --- + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetEnabled(t_e502_eth_config_hnd cfg, uint32_t en); +/***************************************************************************//** + @brief , IP + + , IP + (IP-, , ) DHCP/linklocal + . + @param[in] cfg + @param[out] en , + 1, --- 0 + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetAutoIPEnabled(t_e502_eth_config_hnd cfg, uint32_t *en); +/***************************************************************************//** + @brief IP + + , IP + (IP-, , ) DHCP/linklocal + . + @param[in] cfg + @param[in] en , + 1, --- 0 + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetAutoIPEnabled(t_e502_eth_config_hnd cfg, uint32_t en); +/***************************************************************************//** + @brief IP + + , IP + (IP-, , ) DHCP/linklocal + @param[in] cfg + @param[out] state IP + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetAutoIPState(t_e502_eth_config_hnd cfg, uint32_t *state); + +/***************************************************************************//** + @brief , MAC- + + , MAC-, , + MAC-. + + @param[in] cfg . + @param[out] en MAC-, + 1, ( ) --- 0 + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetUserMACEnabled(t_e502_eth_config_hnd cfg, uint32_t *en); +/***************************************************************************//** + @brief , MAC- + + , MAC-, , + MAC-. + + @param[in] cfg . + @param[in] en MAC-, + 1, ( ) --- 0 + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetUserMACEnabled(t_e502_eth_config_hnd cfg, uint32_t en); + +/***************************************************************************//** + @brief IP- + + IP-, + , IP-. + + @param[in] cfg . + @param[out] ip_addr IP- 32- ( + ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetIPv4Addr(t_e502_eth_config_hnd cfg, uint32_t *ip_addr); +/***************************************************************************//** + @brief IP- + + IP-, + , IP-. + + @param[in] cfg . + @param[in] ip_addr IP- 32- ( + ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetIPv4Addr(t_e502_eth_config_hnd cfg, uint32_t ip_addr); + +/***************************************************************************//** + @brief + + , + , IP-. + + @param[in] cfg . + @param[out] mask 32- ( + ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetIPv4Mask(t_e502_eth_config_hnd cfg, uint32_t *mask); +/***************************************************************************//** + @brief + + , + , IP-. + + @param[in] cfg . + @param[in] mask 32- + ( ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetIPv4Mask(t_e502_eth_config_hnd cfg, uint32_t mask); + +/***************************************************************************//** + @brief + + , + , IP-. + + @param[in] cfg . + @param[out] gate 32- ( + ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetIPv4Gate(t_e502_eth_config_hnd cfg, uint32_t *gate); +/***************************************************************************//** + @brief + + , + , IP-. + + @param[in] cfg . + @param[in] gate 32- + ( ip_addr E502_OpenByIpAddr()). + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetIPv4Gate(t_e502_eth_config_hnd cfg, uint32_t gate); + +/***************************************************************************//** + @brief MAC- + + MAC-, + (. + E502_EthConfigSetUserMACEnabled()). + + @param[in] cfg . + @param[out] mac MAC- + #X502_MAC_ADDR_SIZE + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetUserMac(t_e502_eth_config_hnd cfg, uint8_t *mac); +/***************************************************************************//** + @brief MAC- + + MAC-, + (. + E502_EthConfigSetUserMACEnabled()). + + @param[in] cfg . + @param[in] mac MAC- + #X502_MAC_ADDR_SIZE + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetUserMac(t_e502_eth_config_hnd cfg, const uint8_t *mac); +/***************************************************************************//** + @brief MAC- + + MAC- , + . + MAC-, -, + ( " ") + . + MAC- , + MAC- E502_EthConfigGetUserMac() + E502_EthConfigSetUserMACEnabled(). + MAC-. + + + @param[in] cfg . + @param[out] mac MAC- + #X502_MAC_ADDR_SIZE + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetFactoryMac(t_e502_eth_config_hnd cfg, uint8_t *mac); + + +/***************************************************************************//** + @brief + + . + . , + , . + . + + @param[in] cfg . + @param[out] name + UTF-8. #X502_INSTANCE_NAME_SIZE + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigGetInstanceName(t_e502_eth_config_hnd cfg, char *name); +/***************************************************************************//** + @brief + + , + . + + @param[in] cfg . + @param[in] name + UTF-8. ( ) + #X502_INSTANCE_NAME_SIZE . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetInstanceName(t_e502_eth_config_hnd cfg, const char *name); + + +/***************************************************************************//** + @brief + + , + E502_EthConfigWrite(). + + + E502_EthConfigWrite() + , . + , E502_EthConfigWrite() + . + + @param[in] cfg . + @param[in] new_passwd , + . + ( ) + #X502_PASSWORD_SIZE . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthConfigSetNewPassword(t_e502_eth_config_hnd cfg, const char *new_passwd); + + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_misc + @{ +*******************************************************************************/ + + +/***************************************************************************//** + @brief E-502 + + + Cortex-M4 E-502 lboot. + + , + USB ( + USB) TFTP ( Ethernet). + + , + .. X502_Close(). + + 30 , + . + + . + + + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_SwitchToBootloader(t_x502_hnd hnd); + +/***************************************************************************//** + @brief + + Cortex-M4 E-502 + Flash-. + + , + . + + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_ReloadFPGA(t_x502_hnd hnd); + + + +/***************************************************************************//** + @brief Cortex-M4. + + + Cortex-M4. + + + @param[in] hnd . + @param[in] cmd_code - , . + @param[in] par , ( + ). + @param[in] snd_data , . + , + snd_size = 0. + @param[in] snd_size , snd_data + @param[out] rcv_data , , + . + , + , rcv_size = 0. + @param[in] rcv_size , , + . + rcv_data + . + @param[in] tout , + . + , + . + @param[out] recvd_size , + , + + ( , + rcv_size). , + + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_CortexExecCmd(t_x502_hnd hnd, uint32_t cmd_code, uint32_t par, + const uint8_t* snd_data, uint32_t snd_size, + uint8_t* rcv_data, uint32_t rcv_size, + uint32_t tout, uint32_t* recvd_size); + + +/** @} */ + + + +/***************************************************************************//** + @addtogroup func_eth_svc_browse + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + , + E-502, . + E502_EthSvcBrowseGetEvent(). + E502_EthSvcBrowseStop(). + () --- + Bonjour Windows Avahi Linux. + @param[out] pcontext , + . + @param[in] flags (). 0. + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcBrowseStart(t_e502_eth_svc_browse_hnd *pcontext, + uint32_t flags); + +/***************************************************************************//** + @brief + + + ( ) , + . + + . + ( , , + ) , . + + E502_EthSvcBrowseStart() + . + E-502, + E502_EthSvcBrowseGetEvent() #E502_ETH_SVC_EVENT_ADD, + . + + , + #E502_ETH_SVC_EVENT_NONE. + + + . + + @param[in] context , + E502_EthSvcBrowseStart(). + @param[out] svc #E502_ETH_SVC_EVENT_NONE, + + , . + + E502_EthSvcRecordFree(). + @param[out] event ( + #t_e502_eth_svc_event). + , + #E502_ETH_SVC_EVENT_NONE. + @param[out] flags + (). , + . + @param[in] tout ( ) + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcBrowseGetEvent(t_e502_eth_svc_browse_hnd context, + t_e502_eth_svc_record_hnd *svc , + uint32_t *event, uint32_t *flags, + uint32_t tout); + +/***************************************************************************//** + @brief + + , + , . , + E502_EthSvcBrowseStart() . + . + E502_EthSvcBrowseStart() + E502_EthSvcBrowseStop() . + + @param[in] context , + E502_EthSvcBrowseStart(). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcBrowseStop(t_e502_eth_svc_browse_hnd context); + + + +/***************************************************************************//** + @brief + + , + E502_EthSvcBrowseGetEvent(). + + @param[in] svc + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordFree(t_e502_eth_svc_record_hnd svc); + +/***************************************************************************//** + @brief + + . , + , + , E502_EthConfigSetInstanceName(). + , , , + UTF-8, ASCII + . + . + + @param[in] svc + @param[out] name #X502_INSTANCE_NAME_SIZE , + + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordGetInstanceName(t_e502_eth_svc_record_hnd svc, char *name); + +/***************************************************************************//** + @brief + + E-502, + , . + . + + @param[in] svc + @param[out] serial #X502_SERIAL_SIZE , + + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordGetDevSerial(t_e502_eth_svc_record_hnd svc, char *serial); + +/***************************************************************************//** + @brief + + ("E502" "E16"), + , . + . + + @param[in] svc + @param[out] devname #X502_DEVNAME_SIZE , + + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordGetDevName(t_e502_eth_svc_record_hnd rec, char *devname); + + +/***************************************************************************//** + @brief IP + + IP- E-502, + , . + , + . + + @param[in] svc + @param[out] addr IP- 32- ( + ip_addr E502_OpenByIpAddr()) + @param[in] tout + . + @return +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordResolveIPv4Addr(t_e502_eth_svc_record_hnd svc, + uint32_t *addr, uint32_t tout); + + +/***************************************************************************//** + @brief , + + , + . + , , , + #E502_ETH_SVC_EVENT_REMOVE #E502_ETH_SVC_EVENT_CHANGED, , + (.. + E502_EthSvcBrowseGetEvent() , + , #E502_ETH_SVC_EVENT_ADD) + + @param[in] svc1 + @param[in] svc2 + @return . #X502_ERR_OK, + . +*******************************************************************************/ +X502_EXPORT(int32_t) E502_EthSvcRecordIsSameInstance(t_e502_eth_svc_record_hnd svc1, + t_e502_eth_svc_record_hnd svc2); + +/** @} */ +#ifdef __cplusplus +} +#endif + +#endif // E502API_H diff --git a/SDK/include/l502api.h b/SDK/include/l502api.h new file mode 100644 index 0000000..c6e1a24 --- /dev/null +++ b/SDK/include/l502api.h @@ -0,0 +1,162 @@ +/***************************************************************************//** + @file l502api.h + , + L-502 . + @date 11.03.2012 + @author Borisov Alexey + ******************************************************************************/ + +#ifndef L502_API_H +#define L502_API_H + +#include "l502api_compat.h" +#include "x502api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************//** + @addtogroup func_open + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief L-502 + + L-502, + , . + + , ( + , ), + #X502_GETDEVS_FLAGS_ONLY_NOT_OPENED. + + @param[in] serials size*#X502_SERIAL_SIZE , + . + NULL, size=0, devcnt!=NULL, , + . + @param[in] size , + serial. + size . + 0, serials=NULL + @param[in] flags #t_x502_getdevs_flags, + . + @param[out] devcnt devcnt!=NULL, + L502 + ( size). + @return <0 - , + serials ( <= size) +*******************************************************************************/ +X502_EXPORT(int32_t) L502_GetSerialList(char serials[][X502_SERIAL_SIZE], uint32_t size, + uint32_t flags, uint32_t *devcnt); + +/***************************************************************************//** + @brief L-502 + + L-502 . + , + . + X502_Close() + ( #X502_ERR_DEVICE_ACCESS_DENIED). + + NULL , + , + . + , + #X502_ERR_DEVICE_NOT_FOUND. L-502, + , + , + . + + + X502_Close(). + + @param[in] hnd . + @param[in] serial + NULL. + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) L502_Open(t_x502_hnd hnd, const char *serial); + + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_devrec + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief , L502 + + L-502 + + ( ). + + X502_FreeDevRecordList() ( + L502_GetDevRecordsList() , , + , ). + + @param[in] list . + size . + NULL, size=0, devcnt!=NULL, , + . + @param[in] size , + list. + size , . + @param[in] flags #t_x502_getdevs_flags, + . + @param[out] devcnt , + L-502 ( size). + @return <0 --- , + ( <= size). + + X502_FreeDevRecordList() , + , . + ******************************************************************************/ +X502_EXPORT(int32_t) L502_GetDevRecordsList(t_x502_devrec *list, uint32_t size, + uint32_t flags, uint32_t *devcnt) ; +/** @} */ + + + + +/***************************************************************************//** + @addtogroup func_misc + @{ +*******************************************************************************/ + +/**************************************************************************//** + @brief L-502 + + , + . + 32- . + - , + , - . + + - , - , + - , - ( - 0). + + , Windows + modinfo Linux. + + PCI/PCI-Express (L502) + + @param[in] hnd . + @param[out] ver 32- , + @return . + *****************************************************************************/ +X502_EXPORT(int32_t) L502_GetDriverVersion(t_x502_hnd hnd, uint32_t* ver); + +/** @} */ + + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/SDK/include/l502api_compat.h b/SDK/include/l502api_compat.h new file mode 100644 index 0000000..cb93312 --- /dev/null +++ b/SDK/include/l502api_compat.h @@ -0,0 +1,1834 @@ +/***************************************************************************//** + @file l502api_compat.h + L502, + 1.0.x ( E502). + x502api.h, + X502_xxx x502api + + @note , L502_OpenByListItem, + LPCIE_GetDevInfoList LPCIE_FreeDevInfoList + @author Borisov Alexey + ******************************************************************************/ + +#ifndef L502API_COMPAT_H +#define L502API_COMPAT_H + + +#include "x502api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define LPCIE_EXPORT(type) X502_EXPORT(type) + +/***************************************************************************//** + @addtogroup const_list . + @{ + *****************************************************************************/ + +/** */ +#define L502_LTABLE_MAX_CH_CNT 256 +/** */ +#define L502_ADC_RANGE_CNT 6 + +/** */ +#define L502_LCH_AVG_SIZE_MAX 128 +/** */ +#define L502_ADC_FREQ_DIV_MAX (1024*1024) +/** */ +#define L502_DIN_FREQ_DIV_MAX (1024*1024) + +/** */ +#define L502_ADC_INTERFRAME_DELAY_MAX (0x1FFFFF) + +/** BlackFin*/ +#define L502_BF_CMD_DEFAULT_TOUT 500 + +/** , */ +#define L502_ADC_SCALE_CODE_MAX 6000000 +/** , */ +#define L502_DAC_SCALE_CODE_MAX 30000 + +/** */ +#define L502_DEVNAME_SIZE 32 +/** */ +#define L502_SERIAL_SIZE 32 + +/** */ +#define L502_EXT_REF_FREQ_MAX 2000000 + + +/** Flash- */ +#define L502_FLASH_USER_SIZE 0x100000 + +/** BlackFin */ +#define L502_BF_REQ_TOUT 500 + + +/** */ +#define L502_DAC_RANGE 5. + +/** */ +#define L502_DAC_CH_CNT 2 + + +/** , , */ +#define L502_STREAM_IN_MSG_OVERFLOW 0x01010000 + + +/** */ +typedef enum { + /** */ + L502_ERR_OK = 0, + /** */ + L502_ERR_INVALID_HANDLE = -1, + /** */ + L502_ERR_MEMORY_ALLOC = -2, + /** */ + L502_ERR_ALREADY_OPENED = -3, + /** */ + L502_ERR_DEVICE_NOT_FOUND = -4, + /** ( - , + ) */ + L502_ERR_DEVICE_ACCESS_DENIED = -5, + /** */ + L502_ERR_DEVICE_OPEN = -6, + /** */ + L502_ERR_INVALID_POINTER = -7, + /** */ + L502_ERR_STREAM_IS_RUNNING = -8, + /** */ + L502_ERR_RECV = -9, + /** */ + L502_ERR_SEND = -10, + /** */ + L502_ERR_STREAM_OVERFLOW = -11, + /** */ + L502_ERR_UNSUP_STREAM_MSG = -12, + /** */ + L502_ERR_MUTEX_CREATE = -13, + /** */ + L502_ERR_MUTEX_INVALID_HANDLE = -14, + /** */ + L502_ERR_MUTEX_LOCK_TOUT = -15, + /** */ + L502_ERR_MUTEX_RELEASE = -16, + /** */ + L502_ERR_INSUFFICIENT_SYSTEM_RESOURCES= -17, + /** */ + L502_ERR_NOT_IMPLEMENTED = -18, + /** */ + L502_ERR_INSUFFICIENT_ARRAY_SIZE = -19, + /** FPGA */ + L502_ERR_FPGA_REG_READ = -20, + /** FPGA */ + L502_ERR_FPGA_REG_WRITE = -21, + /** */ + L502_ERR_STREAM_IS_NOT_RUNNING = -22, + /** */ + L502_ERR_INVALID_LTABLE_SIZE = -102, + /** */ + L502_ERR_INVALID_LCH_NUMBER = -103, + /** */ + L502_ERR_INVALID_LCH_RANGE = -104, + /** */ + L502_ERR_INVALID_LCH_MODE = -105, + /** */ + L502_ERR_INVALID_LCH_PHY_NUMBER = -106, + /** */ + L502_ERR_INVALID_LCH_AVG_SIZE = -107, + /** */ + L502_ERR_INVALID_ADC_FREQ_DIV = -108, + /** */ + L502_ERR_INVALID_DIN_FREQ_DIV = -108, + /** L502 */ + L502_ERR_INVALID_MODE = -109, + /** */ + L502_ERR_INVALID_DAC_CHANNEL = -110, + /** */ + L502_ERR_INVALID_REF_FREQ = -111, + /** */ + L502_ERR_INVALID_INTERFRAME_DELAY = -112, + /** */ + L502_ERR_INVALID_SYNC_MODE = -113, + /** DMA */ + L502_ERR_INVALID_DMA_CH = -114, + + /** */ + L502_ERR_REF_FREQ_NOT_LOCKED = -131, + /** */ + L502_ERR_IOCTL_FAILD = -132, + /** */ + L502_ERR_IOCTL_TIMEOUT = -133, + /** */ + L502_ERR_GET_INFO = -134, + /** */ + L502_ERR_DIG_IN_NOT_RDY = -135, + /** */ + L502_ERR_RECV_INSUFFICIENT_WORDS = -136, + /** , , */ + L502_ERR_DAC_NOT_PRESENT = -137, + /** */ + L502_ERR_PROC_INVALID_CH_NUM = -140, + /** */ + L502_ERR_PROC_INVALID_CH_RANGE = -141, + /** Flash- */ + L502_ERR_FLASH_INVALID_ADDR = -142, + /** Flash- */ + L502_ERR_FLASH_INVALID_SIZE = -143, + /** Flash- */ + L502_ERR_FLASH_WRITE_TOUT = -144, + /** Flash- */ + L502_ERR_FLASH_ERASE_TOUT = -145, + /** Flash- 4 */ + L502_ERR_FLASH_SECTOR_BOUNDARY = -146, + /** BlackFin */ + L502_ERR_LDR_FILE_OPEN = -180, + /** BlackFin */ + L502_ERR_LDR_FILE_READ = -181, + /** BlackFin */ + L502_ERR_LDR_FILE_FORMAT = -182, + /** LDR-, + BlackFin HDMA */ + L502_ERR_LDR_FILE_UNSUP_FEATURE = -183, + /** BlackFin */ + L502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184, + /** / BlackFin */ + L502_ERR_BF_REQ_TIMEOUT = -185, + /** BlackFin */ + L502_ERR_BF_CMD_IN_PROGRESS = -186, + /** BlackFin */ + L502_ERR_BF_CMD_TIMEOUT = -187, + /** BlackFin */ + L502_ERR_BF_CMD_RETURN_INSUF_DATA = -188, + /** BlackFin */ + L502_ERR_BF_LOAD_RDY_TOUT = -189, + /** + */ + L502_ERR_BF_NOT_PRESENT = -190, + /** BlackFin HDMA */ + L502_ERR_BF_INVALID_ADDR = -191, + /** , BlackFin */ + L502_ERR_BF_INVALID_CMD_DATA_SIZE = -192 +} t_lpcie_errs; + +/** , */ +typedef enum { + /** , , + */ + L502_GETDEVS_FLAGS_ONLY_NOT_OPENED = X502_GETDEVS_FLAGS_ONLY_NOT_OPENED +} t_l502_getdevs_flags; + + + +/** @brief . + + . + Ȕ + L502_AsyncOutDig() L502_PrepareData() .*/ +typedef enum { + L502_DIGOUT_WORD_DIS_H = X502_DIGOUT_WORD_DIS_H, /**< ( ) + */ + L502_DIGOUT_WORD_DIS_L = X502_DIGOUT_WORD_DIS_L /**< + */ +} t_l502_digout_word_flags; + + +/** */ +typedef enum { + L502_REF_FREQ_2000KHZ = X502_REF_FREQ_2000KHZ, /**< 2 */ + L502_REF_FREQ_1500KHZ = X502_REF_FREQ_1500KHZ /**< 1.5 */ +} t_l502_ref_freq; + + +/** */ +typedef enum { + L502_ADC_RANGE_10 = X502_ADC_RANGE_10, /**< +/-10V */ + L502_ADC_RANGE_5 = X502_ADC_RANGE_5, /**< +/-5V */ + L502_ADC_RANGE_2 = X502_ADC_RANGE_2, /**< +/-2V */ + L502_ADC_RANGE_1 = X502_ADC_RANGE_1, /**< +/-1V */ + L502_ADC_RANGE_05 = X502_ADC_RANGE_05, /**< +/-0.5V */ + L502_ADC_RANGE_02 = X502_ADC_RANGE_02 /**< +/-0.2V */ +} t_l502_adc_range; + +/** */ +typedef enum { + L502_LCH_MODE_COMM = X502_LCH_MODE_COMM, /**< */ + L502_LCH_MODE_DIFF = X502_LCH_MODE_DIFF, /**< */ + L502_LCH_MODE_ZERO = X502_LCH_MODE_ZERO /**< */ +} t_l502_lch_mode; + +/** @brief . + + + - */ +typedef enum { + L502_SYNC_INTERNAL = 0, /**< */ + L502_SYNC_EXTERNAL_MASTER = 1, /**< */ + L502_SYNC_DI_SYN1_RISE = 2, /**< DI_SYN1 */ + L502_SYNC_DI_SYN2_RISE = 3, /**< DI_SYN2 */ + L502_SYNC_DI_SYN1_FALL = 6, /**< DI_SYN1 */ + L502_SYNC_DI_SYN2_FALL = 7 /**< DI_SYN2 */ +} t_l502_sync_mode; + +/** , */ +typedef enum { + /** , */ + L502_PROC_FLAGS_VOLT = X502_PROC_FLAGS_VOLT, + /** , + . + BlackFin + . */ + L502_PROC_FLAGS_DONT_CHECK_CH = X502_PROC_FLAGS_DONT_CHECK_CH +} t_l502_proc_flags; + + +/** */ +typedef enum { + L502_STREAM_ADC = X502_STREAM_ADC, /**< */ + L502_STREAM_DIN = X502_STREAM_DIN, /**< */ + L502_STREAM_DAC1 = X502_STREAM_DAC1, /**< */ + L502_STREAM_DAC2 = X502_STREAM_DAC2, /**< */ + L502_STREAM_DOUT = X502_STREAM_DOUT, /**< */ + /** , */ + L502_STREAM_ALL_IN = X502_STREAM_ALL_IN, + /** , */ + L502_STREAM_ALL_OUT = X502_STREAM_ALL_OUT +} t_l502_streams; + +/** , */ +typedef enum { + L502_STREAM_OUT_WORD_TYPE_DOUT = X502_STREAM_OUT_WORD_TYPE_DOUT, /**< */ + L502_STREAM_OUT_WORD_TYPE_DAC1 = X502_STREAM_OUT_WORD_TYPE_DAC1, /**< 1- */ + L502_STREAM_OUT_WORD_TYPE_DAC2 = X502_STREAM_OUT_WORD_TYPE_DAC2 /**< 2- */ +} t_l502_stream_out_wrd_type; + +/** L502 */ +typedef enum { + L502_MODE_FPGA = X502_MODE_FPGA, /**< + BlackFin */ + L502_MODE_DSP = X502_MODE_DSP, /**< + , + */ + L502_MODE_DEBUG = X502_MODE_DEBUG /**< */ +} t_l502_mode; + +/** @brief . + + L502_AsyncOutDac() */ +typedef enum { + L502_DAC_CH1 = X502_DAC_CH1, /**< */ + L502_DAC_CH2 = X502_DAC_CH2 /**< */ +} t_l502_dac_ch; + +/** @brief , . + + , L502_AsyncOutDac() + L502_PrepareData(), , + */ +typedef enum { + /** , + . , , + */ + L502_DAC_FLAGS_VOLT = X502_DAC_FLAGS_VOLT, + /** , + . */ + L502_DAC_FLAGS_CALIBR = X502_DAC_FLAGS_CALIBR +} t_l502_dacout_flags; + + +/** DMA */ +typedef enum { + L502_DMA_CH_IN = X502_STREAM_CH_IN, /**< DMA */ + L502_DMA_CH_OUT = X502_STREAM_CH_OUT /**< DMA */ +} t_l502_dma_ch; + + +/** @brief , + + , + */ +typedef enum { + L502_PULLUPS_DI_H = X502_PULLUPS_DI_H, /**< */ + L502_PULLUPS_DI_L = X502_PULLUPS_DI_L, /**< */ + L502_PULLUPS_DI_SYN1 = X502_PULLUPS_DI_SYN1, /**< SYN1 */ + L502_PULLUPS_DI_SYN2 = X502_PULLUPS_DI_SYN2 /**< SYN2 */ +} t_l502_pullups; + + +/** , */ +typedef enum { + /** */ + L502_DEVFLAGS_DAC_PRESENT = X502_DEVFLAGS_DAC_PRESENT, + /** */ + L502_DEVFLAGS_GAL_PRESENT = X502_DEVFLAGS_GAL_PRESENT, + /** BlackFin */ + L502_DEVFLAGS_BF_PRESENT = X502_DEVFLAGS_BF_PRESENT, + /** , Flash- */ + L502_DEVFLAGS_FLASH_DATA_VALID = X502_DEVFLAGS_FLASH_DATA_VALID, + /** , Flash- + */ + L502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = X502_DEVFLAGS_FLASH_ADC_CALIBR_VALID, + /** , Flash- + */ + L502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = X502_DEVFLAGS_FLASH_DAC_CALIBR_VALID +} t_l502_dev_flags; + + +/** @brief + + L502_OutCycleSetup() L502_OutCycleStop() */ +typedef enum { + /** , + . + ( 256 , + ), + */ + L502_OUT_CYCLE_FLAGS_FORCE = X502_OUT_CYCLE_FLAGS_FORCE +} t_l502_out_cycle_flags; + +/** @} */ + +/***************************************************************************//** + @addtogroup type_list . + @{ + *****************************************************************************/ + +/** @brief . + + , + . + , + . + . + L502_Create() + L502_Free(). */ +typedef t_x502_hnd t_l502_hnd; + + + +/** @brief + + , + . */ +typedef t_x502_serial_list t_l502_serial_list; + + +/** @brief . + + + . + (val-offs)*k, val - */ +typedef struct { + double offs; /**< */ + double k; /**< */ +} t_l502_cbr_coef; + + +/** @brief . + + , , + L502 */ +typedef struct { + /** */ + t_l502_cbr_coef adc[L502_ADC_RANGE_CNT]; + uint32_t res1[64]; /**< */ + /** */ + t_l502_cbr_coef dac[L502_DAC_CH_CNT]; + uint32_t res2[20]; /**< */ +} t_l502_cbr; + +/** @brief L502. + + , L502, + */ +typedef struct { + char name[L502_DEVNAME_SIZE]; /**< ("L502") */ + char serial[L502_SERIAL_SIZE]; /**< */ + uint32_t devflags; /**< #t_l502_dev_flags, + */ + uint16_t fpga_ver; /**< ( - , - ) */ + uint8_t plda_ver; /**< , */ + uint8_t board_rev; /**< */ + uint8_t res[120]; /**< */ + t_l502_cbr cbr; /**< ( Flash-) */ +} t_l502_info; + +/** @} */ + + +/** @addtogroup func_list . + @{ **/ + +/***************************************************************************//** + @addtogroup func_hnd . + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief . + + , L502. + + -. + @return NULL , - +*******************************************************************************/ +LPCIE_EXPORT(t_l502_hnd) L502_Create(void); + +/***************************************************************************//** + @brief . + + , L502_Create(). + , + ! + @param[in] hnd + @return +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_Free(t_l502_hnd hnd); +/** @} */ + + +/***************************************************************************//** + @addtogroup func_open . + @{ +*******************************************************************************/ + + +/***************************************************************************//** + @brief . + + L502, + ( ). + . + L502_Free(). + @param[in] hnd . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_Close(t_l502_hnd hnd); + + +/***************************************************************************//** + @brief . + + L502, . + @param[in] hnd . + @param[out] info ( #t_l502_info). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetDevInfo(t_l502_hnd hnd, t_l502_info* info); + + + +/** @} */ + +/***************************************************************************//** + @addtogroup func_config + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief . + + ( + L502_SetXXX) . + . + @param[in] hnd . + @param[in] flags ( - 0). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_Configure(t_l502_hnd hnd, uint32_t flags); + +/***************************************************************************//** + @brief . + + + . + @param[in] hnd . + @param[in] lch . + ( 0 #L502_LTABLE_MAX_CH_CNT-1) + @param[in] phy_ch , 0 + (0-15 , + 0-31 ) + @param[in] mode ( #t_l502_lch_mode) + @param[in] range ( #t_l502_adc_range) + @param[in] avg . + , + . + 1 ( ) + #L502_LCH_AVG_SIZE_MAX. + + , + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetLChannel(t_l502_hnd hnd, uint32_t lch, uint32_t phy_ch, + uint32_t mode, uint32_t range, uint32_t avg); + +/***************************************************************************//** + @brief . + + . + @param[in] hnd + @param[in] lch_cnt + ( 1 #L502_LTABLE_MAX_CH_CNT) + @return +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetLChannelCount(t_l502_hnd hnd, uint32_t lch_cnt); + + +/***************************************************************************//** + @brief . + + L502_SetLChannelCount() + . + @param[in] hnd + @param[out] lch_cnt + @return +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetLChannelCount(t_l502_hnd hnd, uint32_t* lch_cnt); + +/***************************************************************************//** + @brief . + + + ( , ) , + . + + L502_SetAdcFreq(), + . + + @param[in] hnd . + @param[in] adc_freq_div ( 1 #L502_ADC_FREQ_DIV_MAX). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetAdcFreqDivider(t_l502_hnd hnd, uint32_t adc_freq_div); + +/***************************************************************************//** + @brief . + + , + , + + , . + + L502_SetAdcFreq(), + + ( ). + + @param[in] hnd . + @param[in] delay ( 0 + #L502_ADC_INTERFRAME_DELAY_MAX) + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetAdcInterframeDelay(t_l502_hnd hnd, uint32_t delay); + +/***************************************************************************//** + @brief . + + + , + . + + L502_SetDinFreq(), + + . + + @param[in] hnd . + @param[in] din_freq_div ( 1 #L502_DIN_FREQ_DIV_MAX). + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDinFreqDivider(t_l502_hnd hnd, uint32_t din_freq_div); + + +/***************************************************************************//** + @brief . + + , + f_acq. + , . + + , + ( ) + . + f_frame ( + ). + f_frame , + . + + , + L502_SetRefFreq(), + . + + , + , + L502_SetLChannelCount(). + + + , + , L502_SetRefFreq(). + + + @param[in] hnd . + @param[in,out] f_acq + . + . + @param[in,out] f_frame + ( ) + . + . + , + ( ). + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetAdcFreq(t_l502_hnd hnd, double *f_acq, double *f_frame); + + + + + + +/***************************************************************************//** + @brief . + + , + . + , . + + , + L502_SetRefFreq(), + . + + + , + , L502_SetRefFreq(). + + @param[in] hnd . + @param[in,out] f_din + . + . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDinFreq(t_l502_hnd hnd, double *f_din); + + +/***************************************************************************//** + @brief + + + ( ) , + L502_SetAdcFreq() + L502_SetAdcFreqDivider()/L502_SetAdcInterframeDelay(). + + @param[in] hnd . + @param[out] f_acq NULL, + . + @param[out] f_frame NULL, + . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetAdcFreq(t_l502_hnd hnd, double *f_acq, double *f_frame); + + + +/***************************************************************************//** + @brief . + + , + / + . + + : + 2 1.5 (2 -), + #t_l502_ref_freq. + + , + + L502_SetAdcFreq()/L502_SetDinFreq() + - DMA , + . + + @param[in] hnd . + @param[in] freq #t_l502_ref_freq, + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetRefFreq(t_l502_hnd hnd, uint32_t freq); + +/***************************************************************************//** + @brief . + + - + . + + #L502_SYNC_INTERNAL + , L502_SetRefFreq(). + L502_StreamsStart() + , L502_SetSyncStartMode(), + L502_StreamsStop(). + + + . + + @param[in] hnd . + @param[in] sync_mode #t_l502_sync_mode, + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetSyncMode(t_l502_hnd hnd, uint32_t sync_mode); + +/***************************************************************************//** + @brief . + + / . + + L502_SetSyncMode() + #L502_SYNC_INTERNAL, + , + + (.. + ). + + , + (. #t_l502_sync_mode). + #L502_SYNC_INTERNAL + L502_StreamsStart(), - + L502_StreamsStart() . + .. , + L502_StreamsStart(). + + @param[in] hnd . + @param[in] sync_start_mode #t_l502_sync_mode, + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetSyncStartMode(t_l502_hnd hnd, uint32_t sync_start_mode); + + +/***************************************************************************//** + @brief . + + , + BlackFin. + . + L502_BfLoadFirmware() + . + + , + , + , + (, JTAG ). + + @param[in] hnd . + @param[in] mode #t_l502_mode. + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetMode(t_l502_hnd hnd, uint32_t mode); +/***************************************************************************//** + @brief . + + . + @param[in] hnd . + @param[out] mode + ( #t_l502_mode). + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetMode(t_l502_hnd hnd, uint32_t* mode); +/***************************************************************************//** + @brief . + + . + , + Flash- + . + + (val+offs)*k, val - + . + + , + . + , Flash- + . + + @param[in] hnd . + @param[in] range ( #t_l502_adc_range). + @param[in] k . + @param[in] offs . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetAdcCoef(t_l502_hnd hnd, uint32_t range, double k, double offs); + +/***************************************************************************//** + @brief . + + + . , + Flash- , , + L502_SetAdcCoef() . + + @param[in] hnd . + @param[in] range ( #t_l502_adc_range). + @param[in] k + . + @param[in] offs . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetAdcCoef(t_l502_hnd hnd, uint32_t range, double* k, double* offs); + + + +/***************************************************************************//** + @brief . + + , + l502api + , #L502_DAC_FLAGS_CALIBR. + + + (val+offs)*k, val - ( ). + + , + Flash- . + + + . Flash-, .. + + Flash-. + + @param[in] hnd . + @param[in] ch ( #t_l502_dac_ch). + @param[in] k . + @param[in] offs . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDacCoef(t_l502_hnd hnd, uint32_t ch, double k, double offs); + + +/***************************************************************************//** + @brief . + + . + , + Flash- , , + L502_SetDacCoef() . + + @param[in] hnd . + @param[in] ch ( #t_l502_dac_ch). + @param[in] k + . + @param[in] offs . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetDacCoef(t_l502_hnd hnd, uint32_t ch, double* k, double* offs); + + + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_async - + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief . + + . + , , + ( ). + + , + , + . + + @param[in] hnd . + @param[in] ch ( #t_l502_dac_ch). + @param[in] data ( ) + @param[in] flags #t_l502_dacout_flags. + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_AsyncOutDac(t_l502_hnd hnd, uint32_t ch, double data, uint32_t flags); + +/***************************************************************************//** + @brief . + + . + L502_PrepareData() - 16 + , - ( + ). + + , + , . + + , , + , , + , + . + + @param[in] hnd . + @param[in] val - , - + #t_l502_digout_word_flags. + @param[in] msk - + ( + val). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_AsyncOutDig(t_l502_hnd hnd, uint32_t val, uint32_t msk); + + +/***************************************************************************//** + @brief . + + . + ( + #L502_STREAM_DIN). + + L502 , + / + L502_StreamsStart(), + + . + + @param[in] hnd . + @param[out] din + . + 18 , 14 - . + + , , + ! + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_AsyncInDig(t_l502_hnd hnd, uint32_t* din); + + + + + + + + + +/***************************************************************************//** + @brief . + + + . + L502_SetAdcFreq(). + . , + L502_AsyncGetAdcFrame() + . + + , + L502_ProcessAdcData(), , + L502_ProcessAdcData(). + + + . + + , + , + . + + @param[in] hnd . + @param[in] flags t_l502_proc_flags + @param[in] tout + @param[out] data , + . , + double , + + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_AsyncGetAdcFrame(t_l502_hnd hnd, uint32_t flags, + uint32_t tout, double* data); + +/** @} */ + + + + +/***************************************************************************//** + @addtogroup func_streams - + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief /. + + / + . + L502_Configure(), . + L502_StreamsStart(). + + + , + , + (. @ref sect_sync_mode_buf) + @param[in] hnd . + @param[in] streams #t_l502_streams, , + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_StreamsEnable(t_l502_hnd hnd, uint32_t streams); +/****************************************************************************//** + @brief /. + + . + . + , L502_StreamsEnable(). + @param[in] hnd . + @param[in] streams #t_l502_streams, , + . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_StreamsDisable(t_l502_hnd hnd, uint32_t streams); + +/***************************************************************************//** + @brief /. + + . + . , + , + + . + + DMA , + , + DMA , + , L502_PreloadStart() ( + ). + + @param[in] hnd . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_StreamsStart(t_l502_hnd hnd); + +/***************************************************************************//** + @brief /. + + / . + ( + ) + . + @param[in] hnd . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_StreamsStop(t_l502_hnd hnd); + + +/***************************************************************************//** + @brief , /. + + L502_StreamsStart() + - BlackFin. + , + #L502_ERR_STREAM_IS_NOT_RUNNING, , + + @param[in] hnd . + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_IsRunning(t_l502_hnd hnd); + +/***************************************************************************//** + @brief . + + , DMA + . , + , ( + ) ( , ). + L502_ProcessData(). + + , , + + . + , . + + + L502_GetRecvReadyCount(). + + L502_Recv() + L502_StreamsStart(). + + @param[in] hnd . + @param[out] buf , . + @param[in] size (32- ). + @param[in] tout . + @return < 0 - . + >= 0 - . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_Recv(t_l502_hnd hnd, uint32_t* buf, uint32_t size, uint32_t tout); + + +/***************************************************************************//** + @brief . + + , + DMA . + , , + ( , 1 2). + L502_PrepareData(). + + , + . + + L502_GetSendReadyCount(). + + , + . + + + L502_PreloadStart(). + + @param[in] hnd . + @param[in] buf , + @param[in] size (32- ). + @param[in] tout ( ) . + @return < 0 - . + >= 0 - . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_Send(t_l502_hnd hnd, const uint32_t* buf, uint32_t size, uint32_t tout); + + + +/***************************************************************************//** + @brief . + + , L502_Recv(). + + , ( #L502_PROC_FLAGS_VOLT). + + , + ( + - ). + + , + L502_ProcessData(), + . + + @param[in] hnd . + @param[in] src , L502_Recv(). + @param[out] dest , + . + @param[in,out] size - src, - + + dest + @param[in] flags #t_l502_proc_flags + @return . + ****************************************************************************/ +LPCIE_EXPORT(int32_t) L502_ProcessAdcData(t_l502_hnd hnd, const uint32_t* src, double *dest, + uint32_t *size, uint32_t flags); + + +/***************************************************************************//** + @brief . + + , L502_Recv(). + , + - , double, + . + + . + , + . + , + #L502_ADC_SCALE_CODE_MAX + . + + , , + (, ). + @param[in] hnd . + @param[in] src , L502_Recv(). + @param[in] size (32- ) src. + @param[in] flags #t_l502_proc_flags, + . + "". + @param[out] adc_data , , + . + NULL, + ( adc_data_size NULL, + 0). + @param[in,out] adc_data_size + adc_data. + adc_data_size, adc_data + adc_data_size . + + + . + NULL, adc_data = NULL + @param[out] din_data , + . 18 + , 14 - . + NULL, + . + @param[in,out] din_data_size adc_data_size + din_data , + + . NULL, + din_data = NULL. + @return . + ****************************************************************************/ +LPCIE_EXPORT(int32_t) L502_ProcessData(t_l502_hnd hnd, const uint32_t* src, uint32_t size, + uint32_t flags, double *adc_data, uint32_t *adc_data_size, + uint32_t *din_data, uint32_t *din_data_size); + +/***************************************************************************//** + @brief . + + L502_ProcessData(), + . + , , + . + usr_data + ( ). + , + BlackFin. + @param[in] hnd . + @param[in] src , + L502_Recv(). + @param[in] size (32- ) src. + @param[in] flags #t_l502_proc_flags. + @param[out] adc_data , + (. L502_ProcessData()). + @param[in,out] adc_data_size . L502_ProcessData() + @param[out] din_data , + . . L502_ProcessData(). + @param[in,out] din_data_size . L502_ProcessData(). + @param[out] usr_data , + . + @param[in,out] usr_data_size usr_data + + . + NULL usr_data = NULL. + @return . + ****************************************************************************/ +LPCIE_EXPORT(int32_t) L502_ProcessDataWithUserExt(t_l502_hnd hnd, const uint32_t* src, uint32_t size, + uint32_t flags, double *adc_data, + uint32_t *adc_data_size, uint32_t *din_data, + uint32_t *din_data_size, + uint32_t *usr_data, uint32_t *usr_data_size); + + + +/***************************************************************************//** + @brief . + + - , + . + , . + + , . + + n*size , n - + ( 1 3). + + 32- , 16- + , - + #t_l502_digout_word_flags, + ( ) . + + , , + , + . + , + #L502_DAC_SCALE_CODE_MAX , +5V. + + @param[in] hnd . + @param[in] dac1 + NULL, . + @param[in] dac2 + NULL, . + @param[in] digout + NULL, . + @param[in] size . + @param[in] flags , , + #t_l502_dacout_flags. + @param[out] out_buf , + . + n*size (n - + ) + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_PrepareData(t_l502_hnd hnd, const double* dac1, const double* dac2, + const uint32_t* digout, uint32_t size, int32_t flags, + uint32_t* out_buf); + +/***************************************************************************//** + @brief . + + , + + L502_Recv(). + L502_Recv() , , + L502_Recv() ( + ). + @param[in] hnd . + @param[out] rdy_cnt . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetRecvReadyCount(t_l502_hnd hnd, uint32_t *rdy_cnt); + + +/***************************************************************************//** + @brief . + + , + . + L502_Send() + . + @param[in] hnd . + @param[out] rdy_cnt + . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetSendReadyCount(t_l502_hnd hnd, uint32_t *rdy_cnt); + + +/***************************************************************************//** + @brief + . + + , + L502_ProcessData()/ + L502_ProcessAdcData() , . + + , , + . + + . + L502_ProcessData() , + , , + L502_ProcessData(). + + , 7 , L502_ProcessData() + 7 , + L502_GetNextExpectedLchNum() 0 ( + ). + L502_ProcessData() 7*n + 5 , + 5 ( + 0,1,2,3,4 ). + + @param[in] hnd . + @param[out] lch ( ). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_GetNextExpectedLchNum(t_l502_hnd hnd, uint32_t *lch); + + +/***************************************************************************//** + @brief + + + . + , + L502_StreamsStart(). + + DMA . + + L502_Send(). + + @param[in] hnd . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_PreloadStart(t_l502_hnd hnd); + + + +/***************************************************************************//** + @brief + + + . + L502_Send(). + + ( + ) - .. + L502_OutCycleSetup(). + . + + @param[in] hnd . + @param[in] size + . + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_OutCycleLoadStart(t_l502_hnd hnd, uint32_t size); + +/***************************************************************************//** + @brief + + . + - ( L502_StreamsStart()), + , + -. + + , + , + #L502_OUT_CYCLE_FLAGS_FORCE. + + L502_OutCycleLoadStart() + ! + + @param[in] hnd . + @param[in] flags #t_l502_out_cycle_flags. + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_OutCycleSetup(t_l502_hnd hnd, uint32_t flags); + + +/***************************************************************************//** + @brief + + + L502_OutCycleSetup(). + ( + , ), + . + + L502_StreamsStop() ( + L502_StreamsDisable()) + . + + @param[in] hnd . + @param[in] flags #t_l502_out_cycle_flags. + @return . + ***************************************************************************/ +LPCIE_EXPORT(int32_t) L502_OutCycleStop(t_l502_hnd hnd, uint32_t flags); + + + + + +/***************************************************************************//** + @brief . + + , + . + , - + - + + @param[in] hnd . + @param[in] dma_ch , + ( #t_l502_dma_ch). + @param[in] size 32- + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDmaBufSize(t_l502_hnd hnd, uint32_t dma_ch, uint32_t size); + +/***************************************************************************//** + @brief DMA. + + + . + DMA + , + . + , + . + + @param[in] hnd . + @param[in] dma_ch , + ( #t_l502_dma_ch). + @param[in] step 32- + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDmaIrqStep(t_l502_hnd hnd, uint32_t dma_ch, uint32_t step); + +/** @} */ + + + + +/***************************************************************************//** + @addtogroup func_dsp + @{ +*******************************************************************************/ +/***************************************************************************//** + @brief BlackFin. + + + , + ( ). + LDR. + @param[in] hnd . + @param[in] filename . + @return . + *****************************************************************************/ +LPCIE_EXPORT(int32_t) L502_BfLoadFirmware(t_l502_hnd hnd, const char* filename); + + + +/***************************************************************************//** + @brief , BlackFIn. + + BlackFin + . , + BlackFin . + ( , + ..) . + DSP. + + + ( ) + JTAG-. + + @param[in] hnd . + @param[out] version , + BlackFin + . + @return . + *****************************************************************************/ +LPCIE_EXPORT(int32_t) L502_BfCheckFirmwareIsLoaded(t_l502_hnd hnd, uint32_t *version); + +/***************************************************************************//** + @brief . + + . + , (L1), SDRAM. + BlackFin . + + , + . + + @param[in] hnd . + @param[in] addr , + . + @param[out] regs , + . + @param[in] size 32- . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_BfMemRead(t_l502_hnd hnd, uint32_t addr, uint32_t* regs, + uint32_t size); + +/***************************************************************************//** + @brief . + + BlackFin. + 8 32- (32 ). + (L1), SDRAM. + BlackFin . + + , + . + + @note , .. , + . + + @param[in] hnd . + @param[in] addr , + . + @param[out] regs . + @param[in] size 32- + ( 8). + @return . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_BfMemWrite(t_l502_hnd hnd, uint32_t addr, + const uint32_t* regs, uint32_t size); + + +/***************************************************************************//** + @brief . + + + , BlackFin. + + + , + . + . + + , l502api + , . + L502_BF_CMD_CODE_USER (0x8000). + + @param[in] hnd . + @param[in] cmd_code - , . + @param[in] par , ( + ). + @param[in] snd_data , . + , + snd_size = 0. + @param[in] snd_size 32- , snd_data + @param[out] rcv_data , , + . + , + , rcv_size = 0. + @param[in] rcv_size 32- , , + . + rcv_data + . + @param[in] tout , + . + , + . + @param[out] recvd_size , + 32- , + + ( , + rcv_size). + @return . + , + . +*******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_BfExecCmd(t_l502_hnd hnd, uint16_t cmd_code, uint32_t par, + const uint32_t* snd_data, uint32_t snd_size, + uint32_t* rcv_data, uint32_t rcv_size, uint32_t tout, uint32_t* recvd_size); +/** @} */ + + + +/***************************************************************************//** + @addtogroup func_flash Flash- + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief Flash-. + + Flash- , + . - + . + @param[in] hnd . + @param[in] addr . + @param[out] data , + ( size ). + @param[in] size . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_FlashRead(t_l502_hnd hnd, uint32_t addr, uint8_t* data, + uint32_t size); +/***************************************************************************//** + @brief Flash- . + + Flash- . + L502_FlashErase() + L502_FlashWriteEnable(), + Flash-. + #L502_FLASH_USER_SIZE + Flash-. + @param[in] hnd . + @param[in] addr . + @param[in] data c ( + size ). + @param[in] size . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_FlashWrite(t_l502_hnd hnd, uint32_t addr, + const uint8_t* data, uint32_t size); +/***************************************************************************//** + @brief Flash-. + + Flash- ( + 0xFF). 4096 ! + + L502_FlashWriteEnable(). + @param[in] hnd . + @param[in] addr ( 4K). + @param[in] size ( 4K). + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_FlashErase(t_l502_hnd hnd, uint32_t addr, uint32_t size); +/***************************************************************************//** + @brief Flash-. + + Flash- ( + #L502_FLASH_USER_SIZE ). , + L502_FlashErase() L502_FlashWrite() + . + L502_FlashWriteDisable(). + @param[in] hnd . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_FlashWriteEnable(t_l502_hnd hnd); +/***************************************************************************//** + @brief Flash-. + + Flash- + ( #L502_FLASH_USER_SIZE ). , + + L502_FlashErase() L502_FlashWrite(), + . + @param[in] hnd . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_FlashWriteDisable(t_l502_hnd hnd); + +/** @} */ + +/***************************************************************************//** + @addtogroup func_misc . + @{ +*******************************************************************************/ +/**************************************************************************//** + @brief . + + l502api.dll. + 32- . + - , + , - . + + - , - , + - , - ( - 0) + + @return 32- , + *****************************************************************************/ +LPCIE_EXPORT(uint32_t) L502_GetDllVersion(void); + + + +/***************************************************************************//** + @brief . + + , . + ( + ). + + @note , Windows + Windows CP1251, Linux + UTF-8. + @param[in] err , . + @return , + ******************************************************************************/ +LPCIE_EXPORT(const char*) L502_GetErrorString(int32_t err); + + +/***************************************************************************//** + @brief . + + , /, + . + + . + + / + . + + @param[in] hnd . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_LedBlink(t_l502_hnd hnd); + +/***************************************************************************//** + @brief . + + + . + , , SYN1 + SYN2. , + . + . + + @param[in] hnd . + @param[in] pullups ( #t_l502_pullups), , + . + @return . + ******************************************************************************/ +LPCIE_EXPORT(int32_t) L502_SetDigInPullup(t_l502_hnd hnd, uint32_t pullups); + +/** @} */ +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/SDK/include/lcard_pstdint.h b/SDK/include/lcard_pstdint.h new file mode 100644 index 0000000..ebc63ab --- /dev/null +++ b/SDK/include/lcard_pstdint.h @@ -0,0 +1,810 @@ +/* A portable stdint.h + **************************************************************************** + * BSD License: + **************************************************************************** + * + * Copyright (c) 2005-2011 Paul Hsieh + * 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. + * 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 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. + * + **************************************************************************** + * + * Version 0.1.12 + * + * The ANSI C standard committee, for the C99 standard, specified the + * inclusion of a new standard include file called stdint.h. This is + * a very useful and long desired include file which contains several + * very precise definitions for integer scalar types that is + * critically important for making portable several classes of + * applications including cryptography, hashing, variable length + * integer libraries and so on. But for most developers its likely + * useful just for programming sanity. + * + * The problem is that most compiler vendors have decided not to + * implement the C99 standard, and the next C++ language standard + * (which has a lot more mindshare these days) will be a long time in + * coming and its unknown whether or not it will include stdint.h or + * how much adoption it will have. Either way, it will be a long time + * before all compilers come with a stdint.h and it also does nothing + * for the extremely large number of compilers available today which + * do not include this file, or anything comparable to it. + * + * So that's what this file is all about. Its an attempt to build a + * single universal include file that works on as many platforms as + * possible to deliver what stdint.h is supposed to. A few things + * that should be noted about this file: + * + * 1) It is not guaranteed to be portable and/or present an identical + * interface on all platforms. The extreme variability of the + * ANSI C standard makes this an impossibility right from the + * very get go. Its really only meant to be useful for the vast + * majority of platforms that possess the capability of + * implementing usefully and precisely defined, standard sized + * integer scalars. Systems which are not intrinsically 2s + * complement may produce invalid constants. + * + * 2) There is an unavoidable use of non-reserved symbols. + * + * 3) Other standard include files are invoked. + * + * 4) This file may come in conflict with future platforms that do + * include stdint.h. The hope is that one or the other can be + * used with no real difference. + * + * 5) In the current verison, if your platform can't represent + * int32_t, int16_t and int8_t, it just dumps out with a compiler + * error. + * + * 6) 64 bit integers may or may not be defined. Test for their + * presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX. + * Note that this is different from the C99 specification which + * requires the existence of 64 bit support in the compiler. If + * this is not defined for your platform, yet it is capable of + * dealing with 64 bits then it is because this file has not yet + * been extended to cover all of your system's capabilities. + * + * 7) (u)intptr_t may or may not be defined. Test for its presence + * with the test: #ifdef PTRDIFF_MAX. If this is not defined + * for your platform, then it is because this file has not yet + * been extended to cover all of your system's capabilities, not + * because its optional. + * + * 8) The following might not been defined even if your platform is + * capable of defining it: + * + * WCHAR_MIN + * WCHAR_MAX + * (u)int64_t + * PTRDIFF_MIN + * PTRDIFF_MAX + * (u)intptr_t + * + * 9) The following have not been defined: + * + * WINT_MIN + * WINT_MAX + * + * 10) The criteria for defining (u)int_least(*)_t isn't clear, + * except for systems which don't have a type that precisely + * defined 8, 16, or 32 bit types (which this include file does + * not support anyways). Default definitions have been given. + * + * 11) The criteria for defining (u)int_fast(*)_t isn't something I + * would trust to any particular compiler vendor or the ANSI C + * committee. It is well known that "compatible systems" are + * commonly created that have very different performance + * characteristics from the systems they are compatible with, + * especially those whose vendors make both the compiler and the + * system. Default definitions have been given, but its strongly + * recommended that users never use these definitions for any + * reason (they do *NOT* deliver any serious guarantee of + * improved performance -- not in this file, nor any vendor's + * stdint.h). + * + * 12) The following macros: + * + * PRINTF_INTMAX_MODIFIER + * PRINTF_INT64_MODIFIER + * PRINTF_INT32_MODIFIER + * PRINTF_INT16_MODIFIER + * PRINTF_LEAST64_MODIFIER + * PRINTF_LEAST32_MODIFIER + * PRINTF_LEAST16_MODIFIER + * PRINTF_INTPTR_MODIFIER + * + * are strings which have been defined as the modifiers required + * for the "d", "u" and "x" printf formats to correctly output + * (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t, + * (u)least32_t, (u)least16_t and (u)intptr_t types respectively. + * PRINTF_INTPTR_MODIFIER is not defined for some systems which + * provide their own stdint.h. PRINTF_INT64_MODIFIER is not + * defined if INT64_MAX is not defined. These are an extension + * beyond what C99 specifies must be in stdint.h. + * + * In addition, the following macros are defined: + * + * PRINTF_INTMAX_HEX_WIDTH + * PRINTF_INT64_HEX_WIDTH + * PRINTF_INT32_HEX_WIDTH + * PRINTF_INT16_HEX_WIDTH + * PRINTF_INT8_HEX_WIDTH + * PRINTF_INTMAX_DEC_WIDTH + * PRINTF_INT64_DEC_WIDTH + * PRINTF_INT32_DEC_WIDTH + * PRINTF_INT16_DEC_WIDTH + * PRINTF_INT8_DEC_WIDTH + * + * Which specifies the maximum number of characters required to + * print the number of that type in either hexadecimal or decimal. + * These are an extension beyond what C99 specifies must be in + * stdint.h. + * + * Compilers tested (all with 0 warnings at their highest respective + * settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32 + * bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio + * .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3 + * + * This file should be considered a work in progress. Suggestions for + * improvements, especially those which increase coverage are strongly + * encouraged. + * + * Acknowledgements + * + * The following people have made significant contributions to the + * development and testing of this file: + * + * Chris Howie + * John Steele Scott + * Dave Thorup + * John Dill + * + */ + +#ifndef LCARD_PSTDINT +#define LCARD_PSTDINT + +#include +#include + +/* + * For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and + * do nothing else. On the Mac OS X version of gcc this is _STDINT_H_. + */ + +#if ((defined(__STDC__) && __STDC__ && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) \ + || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || (__WATCOMC__ >= 1250))) \ + || (defined(__GNUC__)) \ + || (defined (_MSC_VER) && (_MSC_VER >= 1600)) \ + || (defined (__BORLANDC__) && (__BORLANDC__ >= 0x560))) && !defined (_PSTDINT_H_INCLUDED) +#include +#define _PSTDINT_H_INCLUDED +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER +# endif +# ifndef PRINTF_INT64_HEX_WIDTH +# define PRINTF_INT64_HEX_WIDTH "16" +# endif +# ifndef PRINTF_INT32_HEX_WIDTH +# define PRINTF_INT32_HEX_WIDTH "8" +# endif +# ifndef PRINTF_INT16_HEX_WIDTH +# define PRINTF_INT16_HEX_WIDTH "4" +# endif +# ifndef PRINTF_INT8_HEX_WIDTH +# define PRINTF_INT8_HEX_WIDTH "2" +# endif +# ifndef PRINTF_INT64_DEC_WIDTH +# define PRINTF_INT64_DEC_WIDTH "20" +# endif +# ifndef PRINTF_INT32_DEC_WIDTH +# define PRINTF_INT32_DEC_WIDTH "10" +# endif +# ifndef PRINTF_INT16_DEC_WIDTH +# define PRINTF_INT16_DEC_WIDTH "5" +# endif +# ifndef PRINTF_INT8_DEC_WIDTH +# define PRINTF_INT8_DEC_WIDTH "3" +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH +# endif + +/* + * Something really weird is going on with Open Watcom. Just pull some of + * these duplicated definitions from Open Watcom's stdint.h file for now. + */ + +# if defined (__WATCOMC__) && __WATCOMC__ >= 1250 +# if !defined (INT64_C) +# define INT64_C(x) (x + (INT64_MAX - INT64_MAX)) +# endif +# if !defined (UINT64_C) +# define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX)) +# endif +# if !defined (INT32_C) +# define INT32_C(x) (x + (INT32_MAX - INT32_MAX)) +# endif +# if !defined (UINT32_C) +# define UINT32_C(x) (x + (UINT32_MAX - UINT32_MAX)) +# endif +# if !defined (INT16_C) +# define INT16_C(x) (x) +# endif +# if !defined (UINT16_C) +# define UINT16_C(x) (x) +# endif +# if !defined (INT8_C) +# define INT8_C(x) (x) +# endif +# if !defined (UINT8_C) +# define UINT8_C(x) (x) +# endif +# if !defined (UINT64_MAX) +# define UINT64_MAX 18446744073709551615ULL +# endif +# if !defined (INT64_MAX) +# define INT64_MAX 9223372036854775807LL +# endif +# if !defined (UINT32_MAX) +# define UINT32_MAX 4294967295UL +# endif +# if !defined (INT32_MAX) +# define INT32_MAX 2147483647L +# endif +# if !defined (INTMAX_MAX) +# define INTMAX_MAX INT64_MAX +# endif +# if !defined (INTMAX_MIN) +# define INTMAX_MIN INT64_MIN +# endif +# endif +#endif + +#ifndef _PSTDINT_H_INCLUDED +#define _PSTDINT_H_INCLUDED + +#ifndef SIZE_MAX +# define SIZE_MAX (~(size_t)0) +#endif + +/* + * Deduce the type assignments from limits.h under the assumption that + * integer sizes in bits are powers of 2, and follow the ANSI + * definitions. + */ + +#ifndef UINT8_MAX +# define UINT8_MAX 0xff +#endif +#ifndef uint8_t +# if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S) + typedef unsigned char uint8_t; +# define UINT8_C(v) ((uint8_t) v) +# else +# error "Platform not supported" +# endif +#endif + +#ifndef INT8_MAX +# define INT8_MAX 0x7f +#endif +#ifndef INT8_MIN +# define INT8_MIN INT8_C(0x80) +#endif +#ifndef int8_t +# if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S) + typedef signed char int8_t; +# define INT8_C(v) ((int8_t) v) +# else +# error "Platform not supported" +# endif +#endif + +#ifndef UINT16_MAX +# define UINT16_MAX 0xffff +#endif +#ifndef uint16_t +#if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S) + typedef unsigned int uint16_t; +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "" +# endif +# define UINT16_C(v) ((uint16_t) (v)) +#elif (USHRT_MAX == UINT16_MAX) + typedef unsigned short uint16_t; +# define UINT16_C(v) ((uint16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef INT16_MAX +# define INT16_MAX 0x7fff +#endif +#ifndef INT16_MIN +# define INT16_MIN INT16_C(0x8000) +#endif +#ifndef int16_t +#if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S) + typedef signed int int16_t; +# define INT16_C(v) ((int16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "" +# endif +#elif (SHRT_MAX == INT16_MAX) + typedef signed short int16_t; +# define INT16_C(v) ((int16_t) (v)) +# ifndef PRINTF_INT16_MODIFIER +# define PRINTF_INT16_MODIFIER "h" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef UINT32_MAX +# define UINT32_MAX (0xffffffffUL) +#endif +#ifndef uint32_t +#if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S) + typedef unsigned long uint32_t; +# define UINT32_C(v) v ## UL +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +#elif (UINT_MAX == UINT32_MAX) + typedef unsigned int uint32_t; +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +# define UINT32_C(v) v ## U +#elif (USHRT_MAX == UINT32_MAX) + typedef unsigned short uint32_t; +# define UINT32_C(v) ((unsigned short) (v)) +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#else +#error "Platform not supported" +#endif +#endif + +#ifndef INT32_MAX +# define INT32_MAX (0x7fffffffL) +#endif +#ifndef INT32_MIN +# define INT32_MIN INT32_C(0x80000000) +#endif +#ifndef int32_t +#if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S) + typedef signed long int32_t; +# define INT32_C(v) v ## L +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "l" +# endif +#elif (INT_MAX == INT32_MAX) + typedef signed int int32_t; +# define INT32_C(v) v +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#elif (SHRT_MAX == INT32_MAX) + typedef signed short int32_t; +# define INT32_C(v) ((short) (v)) +# ifndef PRINTF_INT32_MODIFIER +# define PRINTF_INT32_MODIFIER "" +# endif +#else +#error "Platform not supported" +#endif +#endif + +/* + * The macro stdint_int64_defined is temporarily used to record + * whether or not 64 integer support is available. It must be + * defined for any 64 integer extensions for new platforms that are + * added. + */ + +#undef stdint_int64_defined +#if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S) +# if (__STDC__ && __STDC_VERSION__ >= 199901L) || defined (S_SPLINT_S) +# define stdint_int64_defined + typedef long long int64_t; + typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# endif +#endif + +#if !defined (stdint_int64_defined) +# if defined(__GNUC__) +# define stdint_int64_defined + __extension__ typedef long long int64_t; + __extension__ typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S) +# define stdint_int64_defined + typedef long long int64_t; + typedef unsigned long long uint64_t; +# define UINT64_C(v) v ## ULL +# define INT64_C(v) v ## LL +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "ll" +# endif +# elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC) +# define stdint_int64_defined + typedef __int64 int64_t; + typedef unsigned __int64 uint64_t; +# define UINT64_C(v) v ## UI64 +# define INT64_C(v) v ## I64 +# ifndef PRINTF_INT64_MODIFIER +# define PRINTF_INT64_MODIFIER "I64" +# endif +# endif +#endif + +#if !defined (LONG_LONG_MAX) && defined (INT64_C) +# define LONG_LONG_MAX INT64_C (9223372036854775807) +#endif +#ifndef ULONG_LONG_MAX +# define ULONG_LONG_MAX UINT64_C (18446744073709551615) +#endif + +#if !defined (INT64_MAX) && defined (INT64_C) +# define INT64_MAX INT64_C (9223372036854775807) +#endif +#if !defined (INT64_MIN) && defined (INT64_C) +# define INT64_MIN INT64_C (-9223372036854775808) +#endif +#if !defined (UINT64_MAX) && defined (INT64_C) +# define UINT64_MAX UINT64_C (18446744073709551615) +#endif + +/* + * Width of hexadecimal for number field. + */ + +#ifndef PRINTF_INT64_HEX_WIDTH +# define PRINTF_INT64_HEX_WIDTH "16" +#endif +#ifndef PRINTF_INT32_HEX_WIDTH +# define PRINTF_INT32_HEX_WIDTH "8" +#endif +#ifndef PRINTF_INT16_HEX_WIDTH +# define PRINTF_INT16_HEX_WIDTH "4" +#endif +#ifndef PRINTF_INT8_HEX_WIDTH +# define PRINTF_INT8_HEX_WIDTH "2" +#endif + +#ifndef PRINTF_INT64_DEC_WIDTH +# define PRINTF_INT64_DEC_WIDTH "20" +#endif +#ifndef PRINTF_INT32_DEC_WIDTH +# define PRINTF_INT32_DEC_WIDTH "10" +#endif +#ifndef PRINTF_INT16_DEC_WIDTH +# define PRINTF_INT16_DEC_WIDTH "5" +#endif +#ifndef PRINTF_INT8_DEC_WIDTH +# define PRINTF_INT8_DEC_WIDTH "3" +#endif + +/* + * Ok, lets not worry about 128 bit integers for now. Moore's law says + * we don't need to worry about that until about 2040 at which point + * we'll have bigger things to worry about. + */ + +#ifdef stdint_int64_defined + typedef int64_t intmax_t; + typedef uint64_t uintmax_t; +# define INTMAX_MAX INT64_MAX +# define INTMAX_MIN INT64_MIN +# define UINTMAX_MAX UINT64_MAX +# define UINTMAX_C(v) UINT64_C(v) +# define INTMAX_C(v) INT64_C(v) +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH +# endif +#else + typedef int32_t intmax_t; + typedef uint32_t uintmax_t; +# define INTMAX_MAX INT32_MAX +# define UINTMAX_MAX UINT32_MAX +# define UINTMAX_C(v) UINT32_C(v) +# define INTMAX_C(v) INT32_C(v) +# ifndef PRINTF_INTMAX_MODIFIER +# define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER +# endif +# ifndef PRINTF_INTMAX_HEX_WIDTH +# define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH +# endif +# ifndef PRINTF_INTMAX_DEC_WIDTH +# define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH +# endif +#endif + +/* + * Because this file currently only supports platforms which have + * precise powers of 2 as bit sizes for the default integers, the + * least definitions are all trivial. Its possible that a future + * version of this file could have different definitions. + */ + +#ifndef stdint_least_defined + typedef int8_t int_least8_t; + typedef uint8_t uint_least8_t; + typedef int16_t int_least16_t; + typedef uint16_t uint_least16_t; + typedef int32_t int_least32_t; + typedef uint32_t uint_least32_t; +# define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER +# define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER +# define UINT_LEAST8_MAX UINT8_MAX +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST16_MAX UINT16_MAX +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST32_MAX UINT32_MAX +# define INT_LEAST32_MAX INT32_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST32_MIN INT32_MIN +# ifdef stdint_int64_defined + typedef int64_t int_least64_t; + typedef uint64_t uint_least64_t; +# define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER +# define UINT_LEAST64_MAX UINT64_MAX +# define INT_LEAST64_MAX INT64_MAX +# define INT_LEAST64_MIN INT64_MIN +# endif +#endif +#undef stdint_least_defined + +/* + * The ANSI C committee pretending to know or specify anything about + * performance is the epitome of misguided arrogance. The mandate of + * this file is to *ONLY* ever support that absolute minimum + * definition of the fast integer types, for compatibility purposes. + * No extensions, and no attempt to suggest what may or may not be a + * faster integer type will ever be made in this file. Developers are + * warned to stay away from these types when using this or any other + * stdint.h. + */ + +typedef int_least8_t int_fast8_t; +typedef uint_least8_t uint_fast8_t; +typedef int_least16_t int_fast16_t; +typedef uint_least16_t uint_fast16_t; +typedef int_least32_t int_fast32_t; +typedef uint_least32_t uint_fast32_t; +#define UINT_FAST8_MAX UINT_LEAST8_MAX +#define INT_FAST8_MAX INT_LEAST8_MAX +#define UINT_FAST16_MAX UINT_LEAST16_MAX +#define INT_FAST16_MAX INT_LEAST16_MAX +#define UINT_FAST32_MAX UINT_LEAST32_MAX +#define INT_FAST32_MAX INT_LEAST32_MAX +#define INT_FAST8_MIN INT_LEAST8_MIN +#define INT_FAST16_MIN INT_LEAST16_MIN +#define INT_FAST32_MIN INT_LEAST32_MIN +#ifdef stdint_int64_defined + typedef int_least64_t int_fast64_t; + typedef uint_least64_t uint_fast64_t; +# define UINT_FAST64_MAX UINT_LEAST64_MAX +# define INT_FAST64_MAX INT_LEAST64_MAX +# define INT_FAST64_MIN INT_LEAST64_MIN +#endif + +#undef stdint_int64_defined + +/* + * Whatever piecemeal, per compiler thing we can do about the wchar_t + * type limits. + */ + +#if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__) +# include +# ifndef WCHAR_MIN +# define WCHAR_MIN 0 +# endif +# ifndef WCHAR_MAX +# define WCHAR_MAX ((wchar_t)-1) +# endif +#endif + +/* + * Whatever piecemeal, per compiler/platform thing we can do about the + * (u)intptr_t types and limits. + */ + +#if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED) +# define STDINT_H_UINTPTR_T_DEFINED +#elif defined (_CVI_) +# define STDINT_H_UINTPTR_T_DEFINED +#endif + +#ifndef STDINT_H_UINTPTR_T_DEFINED +# if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64) +# define stdint_intptr_bits 64 +# elif defined (__WATCOMC__) || defined (__TURBOC__) +# if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__) +# define stdint_intptr_bits 16 +# else +# define stdint_intptr_bits 32 +# endif +# elif defined (__i386__) || defined (_WIN32) || defined (WIN32) +# define stdint_intptr_bits 32 +# elif defined (__INTEL_COMPILER) +/* TODO -- what did Intel do about x86-64? */ +# endif + +# ifdef stdint_intptr_bits +# define stdint_intptr_glue3_i(a,b,c) a##b##c +# define stdint_intptr_glue3(a,b,c) stdint_intptr_glue3_i(a,b,c) +# ifndef PRINTF_INTPTR_MODIFIER +# define PRINTF_INTPTR_MODIFIER stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER) +# endif +# ifndef PTRDIFF_MAX +# define PTRDIFF_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX) +# endif +# ifndef PTRDIFF_MIN +# define PTRDIFF_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN) +# endif +# ifndef UINTPTR_MAX +# define UINTPTR_MAX stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX) +# endif +# ifndef INTPTR_MAX +# define INTPTR_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX) +# endif +# ifndef INTPTR_MIN +# define INTPTR_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN) +# endif +# ifndef INTPTR_C +# define INTPTR_C(x) stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x) +# endif +# ifndef UINTPTR_C +# define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x) +# endif + typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t; + typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t; +# else +/* TODO -- This following is likely wrong for some platforms, and does + nothing for the definition of uintptr_t. */ + typedef ptrdiff_t intptr_t; +# endif +# define STDINT_H_UINTPTR_T_DEFINED +#endif + +/* + * Assumes sig_atomic_t is signed and we have a 2s complement machine. + */ + +#ifndef SIG_ATOMIC_MAX +# define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1) +#endif + +#endif + +#if defined (__TEST_PSTDINT_FOR_CORRECTNESS) + +/* + * Please compile with the maximum warning settings to make sure macros are not + * defined more than once. + */ + +#include +#include +#include + +#define glue3_aux(x,y,z) x ## y ## z +#define glue3(x,y,z) glue3_aux(x,y,z) + +#define DECLU(bits) glue3(uint,bits,_t) glue3(u,bits,=) glue3(UINT,bits,_C) (0); +#define DECLI(bits) glue3(int,bits,_t) glue3(i,bits,=) glue3(INT,bits,_C) (0); + +#define DECL(us,bits) glue3(DECL,us,) (bits) + +#define TESTUMAX(bits) glue3(u,bits,=) glue3(~,u,bits); if (glue3(UINT,bits,_MAX) glue3(!=,u,bits)) printf ("Something wrong with UINT%d_MAX\n", bits) + +int main () { + DECL(I,8) + DECL(U,8) + DECL(I,16) + DECL(U,16) + DECL(I,32) + DECL(U,32) +#ifdef INT64_MAX + DECL(I,64) + DECL(U,64) +#endif + intmax_t imax = INTMAX_C(0); + uintmax_t umax = UINTMAX_C(0); + char str0[256], str1[256]; + + sprintf (str0, "%d %x\n", 0, ~0); + + sprintf (str1, "%d %x\n", i8, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i8 : %s\n", str1); + sprintf (str1, "%u %x\n", u8, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u8 : %s\n", str1); + sprintf (str1, "%d %x\n", i16, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i16 : %s\n", str1); + sprintf (str1, "%u %x\n", u16, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u16 : %s\n", str1); + sprintf (str1, "%" PRINTF_INT32_MODIFIER "d %x\n", i32, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i32 : %s\n", str1); + sprintf (str1, "%" PRINTF_INT32_MODIFIER "u %x\n", u32, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with u32 : %s\n", str1); +#ifdef INT64_MAX + sprintf (str1, "%" PRINTF_INT64_MODIFIER "d %x\n", i64, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with i64 : %s\n", str1); +#endif + sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "d %x\n", imax, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with imax : %s\n", str1); + sprintf (str1, "%" PRINTF_INTMAX_MODIFIER "u %x\n", umax, ~0); + if (0 != strcmp (str0, str1)) printf ("Something wrong with umax : %s\n", str1); + + TESTUMAX(8); + TESTUMAX(16); + TESTUMAX(32); +#ifdef INT64_MAX + TESTUMAX(64); +#endif + + return EXIT_SUCCESS; +} + +#endif + +#endif diff --git a/SDK/include/x502api.h b/SDK/include/x502api.h new file mode 100644 index 0000000..8b5465d --- /dev/null +++ b/SDK/include/x502api.h @@ -0,0 +1,2700 @@ +#ifndef X502API_H +#define X502API_H + + + +#include "lcard_pstdint.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #include "Windows.h" + + #define X502_EXPORT(type) type APIENTRY +#else + #ifndef APIENTRY + #define APIENTRY + #endif + + #if __GNUC__ >= 4 + #define X502_EXPORT(type) __attribute__ ((visibility("default"))) type + #else + #define X502_EXPORT(type) type + #endif +#endif + + +/***************************************************************************//** + @addtogroup const_list + @{ + *****************************************************************************/ + + +/** */ +#define X502_LTABLE_MAX_CH_CNT 256 + +/** E16 */ +#define E16_LTABLE_MAX_CH_CNT 128 + +/** */ +#define X502_ADC_RANGE_CNT 6 +#define E16_ADC_RANGE_CNT 4 + +/** */ +#define X502_ADC_COMM_CH_CNT 32 + +/** */ +#define X502_ADC_DIFF_CH_CNT 16 + + +/** */ +#define X502_LCH_AVG_SIZE_MAX 128 +/** */ +#define X502_ADC_FREQ_DIV_MAX (1024*1024) +/** + * E16 E16_REF_FREQ_48000KHZ */ +#define E16_ADC_FREQ_DIV_MAX (0x800000) +/** */ +#define X502_DIN_FREQ_DIV_MAX (1024*1024) +/** + * E16 E16_REF_FREQ_48000KHZ */ +#define E16_DIN_FREQ_DIV_MAX (0x800000) + +/** , + * X502_SetAdcFreq X502_CalcAdcFreq2 f_acq = 0 */ +#define E16_ADC_FREQ_DEFAULT 500000 +/** DIN , + * X502_SetDinFreq X502_CalcDinFreq2 f_din = 0 */ +#define E16_DIN_FREQ_DEFAULT 500000 +/** , + * X502_SetOutFreq X502_CalcOutFreq2 f_dout = 0 */ +#define E16_OUT_FREQ_DEFAULT 500000 + + +/** */ +#define X502_OUT_FREQ_DIV_MIN 2 +/** */ +#define X502_OUT_FREQ_DIV_MAX 1024 +/** + * E16 E16_REF_FREQ_48000KHZ */ +#define E16_OUT_FREQ_DIV_MAX 0x8000 +/** ( + L-502 0.5) */ +#define X502_OUT_FREQ_DIV_DEFAULT 2 + +/** + #X502_OUT_FREQ_REF_LF_VAL */ +#define X502_OUT_FREQ_DIV_MIN_REF_LF 1 +/** , + #X502_OUT_FREQ_DIV_MIN_REF_LF */ +#define X502_OUT_FREQ_REF_LF_VAL 700000 + + +/** */ +#define X502_ADC_INTERFRAME_DELAY_MAX (0x1FFFFF) + +/** BlackFin*/ +#define X502_BF_CMD_DEFAULT_TOUT 500 + +/** , */ +#define X502_ADC_SCALE_CODE_MAX 6000000 +/** , */ +#define E16_ADC_SCALE_CODE_MAX (0x80 * 0x7fff) +/** , */ +#define X502_DAC_SCALE_CODE_MAX 30000 +#define E16_DAC_SCALE_CODE_MAX 0x7fff + +/** */ +#define X502_DEVNAME_SIZE 32 +/** */ +#define X502_SERIAL_SIZE 32 +/** board implementation */ +#define X502_IMPLEMENTATION_SIZE 16 +/** */ +#define X502_LOCATION_STR_SIZE 64 +/** MAC- Ethernet */ +#define X502_MAC_ADDR_SIZE 6 +/** */ +#define X502_INSTANCE_NAME_SIZE 64 +/** */ +#define X502_PASSWORD_SIZE 32 + +/** */ +#define X502_EXT_REF_FREQ_MAX 1500000 + +/** E502-P1 */ +#define E502_P1_EXT_REF_FREQ_MAX 2000000 + + +/** Flash- */ +#define X502_FLASH_USER_SIZE 0x100000 + +/** BlackFin */ +#define X502_BF_REQ_TOUT 500 + + +/** */ +#define X502_DAC_RANGE 5. +#define E16_DAC_RANGE 10. + +/** */ +#define X502_DAC_CH_CNT 2 + +/** */ +#define X502_DOUT_LINES_CNT 16 + + +/** , , */ +#define X502_STREAM_IN_MSG_OVERFLOW 0x01010000 + + +/** #t_x502_devrec. , + ( + ) */ +#define X502_DEVREC_SIGN 0x4C524543 + + +/** */ +typedef enum { + /** */ + X502_ERR_OK = 0, + /** */ + X502_ERR_INVALID_HANDLE = -1, + /** */ + X502_ERR_MEMORY_ALLOC = -2, + /** */ + X502_ERR_ALREADY_OPENED = -3, + /** */ + X502_ERR_DEVICE_NOT_FOUND = -4, + /** ( - , + ) */ + X502_ERR_DEVICE_ACCESS_DENIED = -5, + /** */ + X502_ERR_DEVICE_OPEN = -6, + /** */ + X502_ERR_INVALID_POINTER = -7, + /** */ + X502_ERR_STREAM_IS_RUNNING = -8, + /** */ + X502_ERR_RECV = -9, + /** */ + X502_ERR_SEND = -10, + /** */ + X502_ERR_STREAM_OVERFLOW = -11, + /** */ + X502_ERR_UNSUP_STREAM_MSG = -12, + /** */ + X502_ERR_MUTEX_CREATE = -13, + /** */ + X502_ERR_MUTEX_INVALID_HANDLE = -14, + /** */ + X502_ERR_MUTEX_LOCK_TOUT = -15, + /** */ + X502_ERR_MUTEX_RELEASE = -16, + /** */ + X502_ERR_INSUFFICIENT_SYSTEM_RESOURCES= -17, + /** */ + X502_ERR_NOT_IMPLEMENTED = -18, + /** */ + X502_ERR_INSUFFICIENT_ARRAY_SIZE = -19, + /** FPGA */ + X502_ERR_FPGA_REG_READ = -20, + /** FPGA */ + X502_ERR_FPGA_REG_WRITE = -21, + /** */ + X502_ERR_STREAM_IS_NOT_RUNNING = -22, + /** */ + X502_ERR_INTERFACE_RELEASE = -23, + /** */ + X502_ERR_THREAD_START = -24, + /** */ + X502_ERR_THREAD_STOP = -25, + /** */ + X502_ERR_DEVICE_DISCONNECTED = -26, + /** */ + X502_ERR_IOCTL_INVALID_RESP_SIZE = -27, + /** */ + X502_ERR_INVALID_DEVICE = -28, + /** */ + X502_ERR_INVALID_DEVICE_RECORD = -29, + /** */ + X502_ERR_INVALID_CONFIG_HANDLE = -30, + /** */ + X502_ERR_DEVICE_NOT_OPENED = -31, + /** */ + X502_ERR_INVALID_OP_FOR_IFACE = -32, + /** */ + X502_ERR_FPGA_NOT_LOADED = -33, + /** USB- */ + X502_ERR_INVALID_USB_CONFIGURATION = -34, + /** */ + X502_ERR_INVALID_SVC_BROWSE_HANDLE = -35, + /** */ + X502_ERR_INVALID_SVC_RECORD_HANDLE = -36, + /** */ + X502_ERR_DNSSD_NOT_RUNNING = -37, + /** */ + X502_ERR_DNSSD_COMMUNICATION = -38, + /** */ + X502_ERR_SVC_RESOLVE_TIMEOUT = -39, + /** */ + X502_ERR_INSTANCE_NAME_ENCODING = -40, + /** */ + X502_ERR_INSTANCE_MISMATCH = -41, + /** */ + X502_ERR_NOT_SUP_BY_FIRMWARE = -42, + /** */ + X502_ERR_NOT_SUP_BY_DRIVER = -43, + /** */ + X502_ERR_OUT_CYCLE_SETUP_TOUT = -44, + /** */ + X502_ERR_UNKNOWN_FEATURE_CODE = -45, + + + /** */ + X502_ERR_INVALID_LTABLE_SIZE = -102, + /** */ + X502_ERR_INVALID_LCH_NUMBER = -103, + /** */ + X502_ERR_INVALID_LCH_RANGE = -104, + /** */ + X502_ERR_INVALID_LCH_MODE = -105, + /** */ + X502_ERR_INVALID_LCH_PHY_NUMBER = -106, + /** */ + X502_ERR_INVALID_LCH_AVG_SIZE = -107, + /** */ + X502_ERR_INVALID_ADC_FREQ_DIV = -108, + /** */ + X502_ERR_INVALID_DIN_FREQ_DIV = -109, + /** */ + X502_ERR_INVALID_MODE = -110, + /** */ + X502_ERR_INVALID_DAC_CHANNEL = -111, + /** */ + X502_ERR_INVALID_REF_FREQ = -112, + /** */ + X502_ERR_INVALID_INTERFRAME_DELAY = -113, + /** */ + X502_ERR_INVALID_SYNC_MODE = -114, + /** */ + X502_ERR_INVALID_STREAM_CH = -115, + /** */ + X502_ERR_INVALID_OUT_FREQ_DIV = -116, + + /** */ + X502_ERR_REF_FREQ_NOT_LOCKED = -131, + /** */ + X502_ERR_IOCTL_FAILD = -132, + /** */ + X502_ERR_IOCTL_TIMEOUT = -133, + /** */ + X502_ERR_GET_INFO = -134, + /** */ + X502_ERR_DIG_IN_NOT_RDY = -135, + /** */ + X502_ERR_RECV_INSUFFICIENT_WORDS = -136, + /** , , */ + X502_ERR_DAC_NOT_PRESENT = -137, + /** */ + X502_ERR_SEND_INSUFFICIENT_WORDS = -138, + /** */ + X502_ERR_NO_CMD_RESPONSE = -139, + + /** */ + X502_ERR_PROC_INVALID_CH_NUM = -140, + /** */ + X502_ERR_PROC_INVALID_CH_RANGE = -141, + /** Flash- */ + X502_ERR_FLASH_INVALID_ADDR = -142, + /** Flash- */ + X502_ERR_FLASH_INVALID_SIZE = -143, + /** Flash- */ + X502_ERR_FLASH_WRITE_TOUT = -144, + /** Flash- */ + X502_ERR_FLASH_ERASE_TOUT = -145, + /** Flash- 4 */ + X502_ERR_FLASH_SECTOR_BOUNDARY = -146, + + /** */ + X502_ERR_SOCKET_OPEN = -147, + /** */ + X502_ERR_CONNECTION_TOUT = -148, + /** */ + X502_ERR_CONNECTION_CLOSED_BY_DEV = -149, + /** */ + X502_ERR_SOCKET_SET_BUF_SIZE = -150, + /** */ + X502_ERR_NO_DATA_CONNECTION = -151, + /** */ + X502_ERR_NO_STREAM_END_MSG = -152, + /** */ + X502_ERR_CONNECTION_RESET = -153, + /** */ + X502_ERR_HOST_UNREACHABLE = -154, + /** TCP- */ + X502_ERR_TCP_CONNECTION_ERROR = -155, + + + + + /** BlackFin */ + X502_ERR_LDR_FILE_OPEN = -180, + /** BlackFin */ + X502_ERR_LDR_FILE_READ = -181, + /** BlackFin */ + X502_ERR_LDR_FILE_FORMAT = -182, + /** LDR-, + BlackFin HDMA */ + X502_ERR_LDR_FILE_UNSUP_FEATURE = -183, + /** BlackFin */ + X502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184, + /** / BlackFin */ + X502_ERR_BF_REQ_TIMEOUT = -185, + /** BlackFin */ + X502_ERR_BF_CMD_IN_PROGRESS = -186, + /** BlackFin */ + X502_ERR_BF_CMD_TIMEOUT = -187, + /** BlackFin */ + X502_ERR_BF_CMD_RETURN_INSUF_DATA = -188, + /** BlackFin */ + X502_ERR_BF_LOAD_RDY_TOUT = -189, + /** + */ + X502_ERR_BF_NOT_PRESENT = -190, + /** BlackFin HDMA */ + X502_ERR_BF_INVALID_ADDR = -191, + /** , BlackFin */ + X502_ERR_BF_INVALID_CMD_DATA_SIZE = -192 +} t_x502_errs; + + +/** */ +typedef enum { + X502_IFACE_UNKNOWN = 0, /**< */ + X502_IFACE_USB = 1, /**< USB */ + X502_IFACE_ETH = 2, /**< Ethernet TCP/IP */ + X502_IFACE_PCI = 3 /**< PCI/PCIe */ +} t_x502_iface; + +/** , */ +typedef enum { + /** , , + */ + X502_GETDEVS_FLAGS_ONLY_NOT_OPENED = 1 +} t_x502_getdevs_flags; + + + +/** @brief + + . + Ȕ + X502_AsyncOutDig() X502_PrepareData() .*/ +typedef enum { + X502_DIGOUT_WORD_DIS_H = 0x00020000, /**< ( ) + */ + X502_DIGOUT_WORD_DIS_L = 0x00010000, /**< + */ + E16_DIGOUT_WORD_DIS = 0x00030000 /**< E16 + */ +} t_x502_digout_word_flags; + +/** */ +typedef enum { + E16_REF_FREQ_48000KHZ = 48000000, /**< 48 E16 */ + X502_REF_FREQ_2000KHZ = 2000000, /**< 2 */ + X502_REF_FREQ_1500KHZ = 1500000 /**< 1.5 */ +} t_x502_ref_freq; + + +/** io_mode io_hard */ +typedef enum { + X502_MODE_REF_FREQ_2000 = 0, /**< 2 */ + X502_MODE_REF_FREQ_1500 = 2, /**< 1.5 */ + E16_MODE_REF_FREQ_48000 = 3 /**< 48 E16*/ +} t_x502_io_mode; + +/** */ +typedef enum { + X502_ADC_RANGE_10 = 0, /**< +/-10V */ + X502_ADC_RANGE_5 = 1, /**< +/-5V */ + X502_ADC_RANGE_2 = 2, /**< +/-2V */ + X502_ADC_RANGE_1 = 3, /**< +/-1V */ + X502_ADC_RANGE_05 = 4, /**< +/-0.5V */ + X502_ADC_RANGE_02 = 5 /**< +/-0.2V */ +} t_x502_adc_range; + +/** E16 */ +typedef enum { + E16_ADC_RANGE_10000 = 0, /**< +/-10V */ + E16_ADC_RANGE_2500 = 1, /**< +/-2.5V */ + E16_ADC_RANGE_625 = 2, /**< +/-0.625V */ + E16_ADC_RANGE_156 = 3, /**< +/-0.156V */ +} t_e16_adc_range; + +/** */ +typedef enum { + X502_LCH_MODE_COMM = 0, /**< */ + X502_LCH_MODE_DIFF = 1, /**< */ + X502_LCH_MODE_ZERO = 2 /**< */ +} t_x502_lch_mode; + +/** @brief + + + - */ +typedef enum { + X502_SYNC_INTERNAL = 0, /**< */ + X502_SYNC_EXTERNAL_MASTER = 1, /**< */ + X502_SYNC_DI_SYN1_RISE = 2, /**< DI_SYN1 */ + X502_SYNC_DI_SYN1_FALL = 3, /**< DI_SYN1 */ + X502_SYNC_DI_SYN2_RISE = 6, /**< DI_SYN2 */ + X502_SYNC_DI_SYN2_FALL = 7, /**< DI_SYN2 */ + /** E16! + TRIG INT + E16_MODE_TRIG_OUTPUT E16_MODE_INT_OUTPUT + */ + E16_SYNC_TRIG_RISE = 2, /**< TRIG */ + E16_SYNC_TRIG_FALL = 3, /**< TRIG */ + E16_SYNC_INT_RISE = 6, /**< INT */ + E16_SYNC_INT_FALL = 7, /**< INT */ + /** , E16*/ + E16_SYNC_ADC_ABOVE_LEVEL = 8, /**< */ + E16_SYNC_ADC_BELOW_LEVEL = 9, /**< */ + E16_SYNC_ADC_EDGE_RISE = 10, /**< */ + E16_SYNC_ADC_EDGE_FALL = 11 /**< */ +} t_x502_sync_mode; + +/** , */ +typedef enum { + /** , */ + X502_PROC_FLAGS_VOLT = 0x00000001, + /** , + . + BlackFin + . */ + X502_PROC_FLAGS_DONT_CHECK_CH = 0x00010000 +} t_x502_proc_flags; + + +/** */ +typedef enum { + X502_STREAM_ADC = 0x01, /**< */ + X502_STREAM_DIN = 0x02, /**< */ + X502_STREAM_DAC1 = 0x10, /**< */ + X502_STREAM_DAC2 = 0x20, /**< */ + X502_STREAM_DOUT = 0x40, /**< */ + /** , */ + X502_STREAM_ALL_IN = X502_STREAM_ADC | X502_STREAM_DIN, + /** , */ + X502_STREAM_ALL_OUT = X502_STREAM_DAC1 | X502_STREAM_DAC2 | X502_STREAM_DOUT +} t_x502_streams; + +/** , */ +typedef enum { + X502_STREAM_OUT_WORD_TYPE_DOUT = 0x0, /**< */ + X502_STREAM_OUT_WORD_TYPE_DAC1 = 0x40000000, /**< 1- */ + X502_STREAM_OUT_WORD_TYPE_DAC2 = 0x80000000 /**< 2- */ +} t_x502_stream_out_wrd_type; + +/** */ +typedef enum { + X502_MODE_FPGA = 0, /**< + BlackFin */ + X502_MODE_DSP = 1, /**< + , + */ + X502_MODE_DEBUG = 2 /**< */ +} t_x502_mode; + +/** @brief + + X502_AsyncOutDac() */ +typedef enum { + X502_DAC_CH1 = 0, /**< */ + X502_DAC_CH2 = 1 /**< */ +} t_x502_dac_ch; + +/** @brief , + + , X502_AsyncOutDac() + X502_PrepareData(), , + */ +typedef enum { + /** , + . , , + */ + X502_DAC_FLAGS_VOLT = 0x0001, + /** , + . */ + X502_DAC_FLAGS_CALIBR = 0x0002 +} t_x502_dacout_flags; + + + +/** */ +typedef enum { + X502_STREAM_CH_IN = 0, /**< */ + X502_STREAM_CH_OUT = 1 /**< */ +} t_x502_stream_ch; + + +/** @brief , + + , + . . */ +typedef enum { + X502_PULLUPS_DI_H = 0x01, /**< ( L502) */ + X502_PULLUPS_DI_L = 0x02, /**< ( L502) */ + X502_PULLUPS_DI_SYN1 = 0x04, /**< SYN1 */ + X502_PULLUPS_DI_SYN2 = 0x08, /**< SYN2 */ + X502_PULLDOWN_CONV_IN = 0x10, /**< 0 + CONV_IN ( E502) */ + X502_PULLDOWN_START_IN = 0x20, /**< 0 + START_IN ( E502) */ + + E16_MODE_TRIG_OUTPUT = 0x04, /**< E16: TRIG , */ + E16_MODE_INT_OUTPUT = 0x08, /**< E16: INT , */ + E16_MODE_TRIG_START_OUTPUT = 0x10, /**< E16: START TRIG, CONV (TRIG ) */ + E16_MODE_INT_START_OUTPUT = 0x20, /**< E16: START INT, CONV (INT ) */ + E16_MODE_RELAY_ON = 0x40, /**< E16: */ +} t_x502_pullups; + + +/** , */ +typedef enum { + /** */ + X502_DEVFLAGS_DAC_PRESENT = 0x00000001, + /** */ + X502_DEVFLAGS_GAL_PRESENT = 0x00000002, + /** BlackFin */ + X502_DEVFLAGS_BF_PRESENT = 0x00000004, + /** 3 , / (0 --- ADSP-BF523) */ + X502_DEVFLAGS_PROC_TYPE = 0x00000038, + /** 2 , (0 --- AD5542AARUZ, 1 --- DAC8581IPW) */ + X502_DEVFLAGS_DAC_TYPE = 0x000000C0, + + /** , USB */ + X502_DEVFLAGS_IFACE_SUPPORT_USB = 0x00000100, + /** , Ethernet */ + X502_DEVFLAGS_IFACE_SUPPORT_ETH = 0x00000200, + /** , PCI/PCI-Express */ + X502_DEVFLAGS_IFACE_SUPPORT_PCI = 0x00000400, + + /** , */ + X502_DEVFLAGS_INDUSTRIAL = 0x00008000, + + /** , Flash- */ + X502_DEVFLAGS_FLASH_DATA_VALID = 0x00010000, + /** , Flash- + */ + X502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = 0x00020000, + /** , Flash- + */ + X502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = 0x00040000, + + /** , */ + X502_DEVFLAGS_FPGA_LOADED = 0x00800000, + /** , ( t_x502_devrec) */ + X502_DEVFLAGS_DEVREC_OPENED = 0x01000000, + /** , GD32 */ + X502_DEVFLAGS_FPGA_AWAITING_GD32 = 0x02000000, + /** , GD32 E502-P1 */ + X502_DEVFLAGS_GD_PRESENT = 0x02000000 +} t_x502_dev_flags; + +/** @brief + + location #t_x502_devrec */ +typedef enum { + /** */ + X502_LOCATION_TYPE_NONE = 0, + /** */ + X502_LOCATION_TYPE_ADDR = 1, + /** */ + X502_LOCATION_TYPE_INSTANCE_NAME = 2 +} t_x502_location_type; + + +/** @brief + + X502_OutCycleSetup() X502_OutCycleStop() */ +typedef enum { + /** , + . + ( 256 , + ), + */ + X502_OUT_CYCLE_FLAGS_FORCE = 0x01, + /** , + ( X502_OutCycleSetup()) + ( X502_OutCycleStop()). + , . + + + ( + #X502_OUT_CYCLE_FLAGS_FORCE). + X502_OutCycleCheckSetupDone(). + , + X502_OutCycleCheckSetupDone(), . */ + X502_OUT_CYCLE_FLAGS_WAIT_DONE = 0x02 +} t_x502_out_cycle_flags; + + + +/** @brief + + , + , .. */ +typedef enum { + /** , #X502_OUT_FREQ_DIV_DEFAULT */ + X502_FEATURE_OUT_FREQ_DIV = 1, + /** X502_OutGetStatusFlags() */ + X502_FEATURE_OUT_STATUS_FLAGS = 2 +} t_x502_features; + +/** */ +typedef enum { + /** , */ + X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = 0x01, + /** , + - + X502_OutGetStatusFlags() ( , ) */ + X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = 0x02 +} t_x502_out_status_flags; + + +/** @} */ + + +/***************************************************************************//** + @addtogroup type_list + @{ + *****************************************************************************/ + +/** @brief + + , + . , + , + X502_OpenByDevRecord() */ +typedef struct st_x502_devrec_inptr t_x502_devrec_inptr; + +/** @brief + + , , */ +typedef struct { + uint32_t sign; /**< . + ( - ), + #X502_DEVREC_SIGN) */ + char devname[X502_DEVNAME_SIZE]; /**< */ + char serial[X502_SERIAL_SIZE]; /**< */ + char location[X502_LOCATION_STR_SIZE]; /**< ( ) */ + uint32_t flags; /**< #t_x502_dev_flags, */ + uint8_t iface; /**< , */ + uint8_t location_type; /**< , location + ( #t_x502_location_type) */ + char res[122]; /**< */ + t_x502_devrec_inptr* internal; /**< + , + */ +} t_x502_devrec; + + +/** @brief + + , + . + , + . + . + X502_Create() + X502_Free(). */ +typedef struct st_x502* t_x502_hnd; + +/** @brief + + , + . */ +typedef char (*t_x502_serial_list)[X502_SERIAL_SIZE]; + +/** @brief . + + + . + (val - offs) * k, val - */ +typedef struct { + double offs; /**< */ + double k; /**< */ +} t_x502_cbr_coef; + + +/** @brief + + , , + L-502/E-502 */ +typedef struct { + /** */ + t_x502_cbr_coef adc[X502_ADC_RANGE_CNT]; + uint32_t res1[64]; /**< */ + /** */ + t_x502_cbr_coef dac[X502_DAC_CH_CNT]; + uint32_t res2[20]; /**< */ +} t_x502_cbr; + +/** @brief L-502/E-502 + + , L-502/E-502, + */ +typedef struct { + char name[X502_DEVNAME_SIZE]; /**< ("L502" "E502" "E16") */ + char serial[X502_SERIAL_SIZE]; /**< */ + + uint32_t devflags; /**< #t_x502_dev_flags, + */ + uint16_t fpga_ver; /**< ( - , - ) */ + uint8_t plda_ver; /**< , */ + uint8_t board_rev; /**< */ + uint32_t mcu_firmware_ver; /**< Cortex-M4. E-502 */ + uint32_t flash_size; /**< flash- */ + uint8_t factory_mac[X502_MAC_ADDR_SIZE]; /**< MAC- --- + Ethernet- */ + uint8_t res[106]; /**< */ + t_x502_cbr cbr; /**< ( Flash-) */ +} t_x502_info; + +/** @} */ + + +/** @addtogroup func_list + @{ **/ + +/***************************************************************************//** + @addtogroup func_hnd + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + , E-502 L-502. + + . + @return NULL , - +*******************************************************************************/ +X502_EXPORT(t_x502_hnd) X502_Create(void); + +/***************************************************************************//** + @brief + + , X502_Create(). + , + ! + @param[in] hnd + @return +*******************************************************************************/ +X502_EXPORT(int32_t) X502_Free(t_x502_hnd hnd); +/** @} */ + + + + + + + +/***************************************************************************//** + @addtogroup func_devrec + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + E-502 L-502 . + , + . + ( ) + . + + @param[in] hnd . + @param[in] devrec , + + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_OpenByDevRecord(t_x502_hnd hnd, const t_x502_devrec *devrec); + +/***************************************************************************//** + @brief + + , + , . + + , + . + X502_OpenByDevRecord() + , . + ( + , 1). + + @param[in] list + , () . + @param[in] size + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_FreeDevRecordList(t_x502_devrec *list, uint32_t size); + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_open + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + E-502/L-502, + ( ). + . + X502_Free(). + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_Close(t_x502_hnd hnd); + + +/***************************************************************************//** + @brief , + + , . + , #X502_ERR_OK. , + #X502_ERR_DEVICE_NOT_OPENED. + + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_IsOpened(t_x502_hnd hnd); + + + +/***************************************************************************//** + @brief + + L-502/E-502, . + @param[in] hnd . + @param[out] info ( #t_x502_info). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetDevInfo(t_x502_hnd hnd, t_x502_info* info); + + +/** @} */ + +/***************************************************************************//** + @addtogroup func_config + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + ( + X502_SetXXX) . + . + @param[in] hnd . + @param[in] flags ( - 0). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_Configure(t_x502_hnd hnd, uint32_t flags); + + +/***************************************************************************//** + @brief + + + . + @param[in] hnd . + @param[in] lch . + ( 0 #X502_LTABLE_MAX_CH_CNT-1 #E16_LTABLE_MAX_CH_CNT-1 E16) + @param[in] phy_ch , 0 + (0-15 , + 0-31 ) + @param[in] mode ( #t_x502_lch_mode) + @param[in] range ( #t_x502_adc_range) + @param[in] avg ( E16). + , + . + 1 ( ) + #X502_LCH_AVG_SIZE_MAX. + + , + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetLChannel(t_x502_hnd hnd, uint32_t lch, uint32_t phy_ch, + uint32_t mode, uint32_t range, uint32_t avg); + + +/***************************************************************************//** + @brief E16 + + : + double ranges[] = {10, 2.5, 0.625, 0.15625}; + + @param[in] ranges_len + @return double ranges_len NULL . +*******************************************************************************/ +X502_EXPORT(double const*) E16_GetAdcRanges(uint32_t *ranges_len); + +/***************************************************************************//** + @brief E502 + + : + double ranges[] = {10., 5., 2., 1., 0.5, 0.2}; + + @param[in] ranges_len + @return double ranges_len NULL . +*******************************************************************************/ +X502_EXPORT(double const*) E502_GetAdcRanges(uint32_t *ranges_len); + +/***************************************************************************//** + @brief + + E16: + double ranges[] = {10, 2.5, 0.625, 0.15625}; + E502: + double ranges[] = {10., 5., 2., 1., 0.5, 0.2}; + + @param[in] hnd . + @param[in] ranges_len + @return double ranges_len NULL . +*******************************************************************************/ +X502_EXPORT(double const*) X502_GetAdcRanges(t_x502_hnd hnd, uint32_t *ranges_len); + +/***************************************************************************//** + @brief + + . + @param[in] hnd + @param[in] lch_cnt + ( 1 #X502_LTABLE_MAX_CH_CNT #E16_LTABLE_MAX_CH_CNT E16) + @return +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetLChannelCount(t_x502_hnd hnd, uint32_t lch_cnt); + + +/***************************************************************************//** + @brief + + X502_SetLChannelCount() + . + @param[in] hnd + @param[out] lch_cnt + @return +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetLChannelCount(t_x502_hnd hnd, uint32_t* lch_cnt); + +/***************************************************************************//** + @brief + + + ( , ) , + . + + X502_SetAdcFreq(), + . + + @param[in] hnd . + @param[in] adc_freq_div ( 1 #X502_ADC_FREQ_DIV_MAX). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetAdcFreqDivider(t_x502_hnd hnd, uint32_t adc_freq_div); + +/***************************************************************************//** + @brief + + , + , + + , . + + X502_SetAdcFreq(), + + ( ). + + @param[in] hnd . + @param[in] delay ( 0 + #X502_ADC_INTERFRAME_DELAY_MAX) + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetAdcInterframeDelay(t_x502_hnd hnd, uint32_t delay); + +/***************************************************************************//** + @brief . + + + , + . + + X502_SetDinFreq(), + + . + + @param[in] hnd . + @param[in] din_freq_div + ( 1 #X502_DIN_FREQ_DIV_MAX). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetDinFreqDivider(t_x502_hnd hnd, uint32_t din_freq_div); + + + +/***************************************************************************//** + @brief + + + , . + + ( ). + . + + X502_SetOutFreq(), + . + + @note L-502, , + #X502_OUT_FREQ_DIV_DEFAULT, 0.5 . + E-502 . + X502_CheckFeature(). + + @param[in] hnd . + @param[in] out_freq_div + ( #X502_OUT_FREQ_DIV_MIN #X502_OUT_FREQ_DIV_MAX). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetOutFreqDivider(t_x502_hnd hnd, uint32_t out_freq_div); + + + +/***************************************************************************//** + @brief + + , + f_acq. + , . + + , + ( ) + . + f_frame ( + ). + f_frame , + . + + , + X502_SetSyncMode() X502_SetRefFreq() / X502_SetExtRefFreqValue(), + . + + , + , + X502_SetLChannelCount(). + + + , + , X502_SetRefFreq(). + + + @param[in] hnd . + @param[in,out] f_acq + . + . + @param[in,out] f_frame + ( ) + . + . + , + ( ). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetAdcFreq(t_x502_hnd hnd, double *f_acq, double *f_frame); + + +/***************************************************************************//** + @brief + + , + . + , . + + , + X502_SetSyncMode() + X502_SetRefFreq()/ X502_SetExtRefFreqValue(), + . + + + , + , X502_SetRefFreq(). + + @param[in] hnd . + @param[in,out] f_din + . + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetDinFreq(t_x502_hnd hnd, double *f_din); + + + +/***************************************************************************//** + @brief + + , + . + , . + + , + X502_SetSyncMode() + X502_SetRefFreq() / X502_SetExtRefFreqValue(), + . + + + , + , X502_SetRefFreq(). + + @note L-502, , + , #X502_OUT_FREQ_DIV_DEFAULT, + 0.5 . + E-502 . + + X502_CheckFeature(). + + + @param[in] hnd . + @param[in,out] f_dout + . + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetOutFreq(t_x502_hnd hnd, double *f_dout); + + + +/***************************************************************************//** + @brief + + + ( ) , + X502_SetAdcFreq() + X502_SetAdcFreqDivider() / X502_SetAdcInterframeDelay(). + + @param[in] hnd . + @param[out] f_acq NULL, + . + @param[out] f_frame NULL, + . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_GetAdcFreq(t_x502_hnd hnd, double *f_acq, double *f_frame); + + +/***************************************************************************//** + @brief + + , + / + . + + + 2 1.5 (2 ), + #t_x502_ref_freq. + + + X502_SetExtRefFreqValue(). + + E-502 1.5 + PLDA 1 . + + @param[in] hnd . + @param[in] freq #t_x502_ref_freq, + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetRefFreq(t_x502_hnd hnd, uint32_t freq); + +/***************************************************************************//** + @brief + + ( X502_SetSyncMode() , + #X502_SYNC_INTERNAL) + , , + 1.5 . + + , + + X502_SetAdcFreq(), X502_SetDinFreq() X502_SetOutFreq(), + + . + + 1.1.4 . + + @param[in] hnd . + @param[in] freq . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetExtRefFreqValue(t_x502_hnd hnd, double freq); + +/***************************************************************************//** + @brief ( E16) + + @param[in] hnd . + @param[in] phy_ch , 0 + (0-15 , + 0-31 ) + @param[in] mode ( #t_x502_lch_mode) + @param[in] range ( #t_x502_adc_range) + @param[in] value . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetAdcSyncStartValue(t_x502_hnd hnd, uint32_t phy_ch, uint32_t mode, uint32_t range, double value); + +/***************************************************************************//** + @brief + + , + X502_SetAdcFreq(), X502_SetDinFreq() + X502_SetOutFreq(), + . + + , + X502_SetRefFreq() (1.5 2 ), --- , + X502_SetExtRefFreqValue(). + + 1.1.4 . + + @param[in] hnd . + @param[in] freq . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetRefFreqValue(t_x502_hnd hnd, double *freq); + + + + +/***************************************************************************//** + @brief + + - + . + + #X502_SYNC_INTERNAL + , X502_SetRefFreq(). + X502_StreamsStart() + , X502_SetSyncStartMode(), + X502_StreamsStop(). + + + . + + @param[in] hnd . + @param[in] sync_mode #t_x502_sync_mode, + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetSyncMode(t_x502_hnd hnd, uint32_t sync_mode); + +/***************************************************************************//** + @brief + + / . + + X502_SetSyncMode() + #X502_SYNC_INTERNAL, + , + + (.. + ). + + , + (. #t_x502_sync_mode). + #X502_SYNC_INTERNAL + X502_StreamsStart(), - + X502_StreamsStart() . + .. , + X502_StreamsStart(). + + @param[in] hnd . + @param[in] sync_start_mode #t_x502_sync_mode, + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetSyncStartMode(t_x502_hnd hnd, uint32_t sync_start_mode); + + +/***************************************************************************//** + @brief + + , + BlackFin. + . + X502_BfLoadFirmware() + . + + , + , + , + (, JTAG ). + + @param[in] hnd . + @param[in] mode #t_x502_mode. + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_SetMode(t_x502_hnd hnd, uint32_t mode); +/***************************************************************************//** + @brief + + . + @param[in] hnd . + @param[out] mode + ( #t_x502_mode). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_GetMode(t_x502_hnd hnd, uint32_t* mode); +/***************************************************************************//** + @brief + + . + , + Flash- + . + + (val - offs) * k, val --- + . + + , + . + , Flash- + . + + @param[in] hnd . + @param[in] range ( #t_x502_adc_range). + @param[in] k . + @param[in] offs . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_SetAdcCoef(t_x502_hnd hnd, uint32_t range, double k, double offs); + +/***************************************************************************//** + @brief + + + . , + Flash- , , + X502_SetAdcCoef() . + + @param[in] hnd . + @param[in] range ( #t_x502_adc_range). + @param[in] k + . + @param[in] offs . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetAdcCoef(t_x502_hnd hnd, uint32_t range, double* k, double* offs); + + + +/***************************************************************************//** + @brief + + , + x502api + , #X502_DAC_FLAGS_CALIBR. + + + (val + offs) * k, val --- ( ). + + , + Flash- . + + + . Flash-, .. + + Flash-. + + @param[in] hnd . + @param[in] ch ( #t_x502_dac_ch). + @param[in] k . + @param[in] offs . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_SetDacCoef(t_x502_hnd hnd, uint32_t ch, double k, double offs); + + +/***************************************************************************//** + @brief + + . + , + Flash- , , + X502_SetDacCoef() . + + @param[in] hnd . + @param[in] ch ( #t_x502_dac_ch). + @param[in] k + . + @param[in] offs . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetDacCoef(t_x502_hnd hnd, uint32_t ch, double* k, double* offs); + + + +/***************************************************************************//** + @brief + + , + , + , . + + X502_SetAdcFreq(), + + , . + + E16 ref_freq E16_REF_FREQ_48000KHZ, + X502_CalcAdcFreq2! + + + @param[in] ref_freq ( ) + @param[in] lch_cnt , . + . + f_frame , + 0. + @param[in,out] f_acq + . + , . + @param[in,out] f_frame + ( ) + . . + , + . + , + + ( ). + @param[out] result_freq_div + . + , + . + @param[out] result_frame_delay + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcAdcFreq(double ref_freq, uint32_t lch_cnt, double *f_acq, + double *f_frame, uint32_t *result_freq_div, uint32_t *result_frame_delay); + + /***************************************************************************//** + @brief + + , + , + , . + + X502_SetAdcFreq(), + , . + E16 X502. + + + @param[in] hnd . + @param[in] ref_freq ( ) + @param[in] lch_cnt , . + . + f_frame , + 0. + @param[in,out] f_acq + . + , . + @param[in,out] f_frame + ( ) + . . + , + . + , + + ( ). + @param[out] result_freq_div + . + , + . + @param[out] result_frame_delay + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcAdcFreq2(t_x502_hnd hnd, double ref_freq, uint32_t lch_cnt, double *f_acq, + double *f_frame, uint32_t *adc_freq_div, uint32_t *adc_frame_delay); + +/***************************************************************************//** + @brief + + , + , , + . + + X502_SetDinFreq(), + + , . + + E16 ref_freq E16_REF_FREQ_48000KHZ, + X502_CalcDinFreq2! + + @param[in] ref_freq ( ) + @param[in,out] f_din + . + , + . + @param[out] result_freq_div + + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcDinFreq(double ref_freq, double *f_din, uint32_t *result_freq_div); + +/***************************************************************************//** + @brief + + , + , , + . + + X502_SetDinFreq(), , . + + @param[in] hnd . + @param[in] ref_freq ( ) + @param[in,out] f_din + . + , + . + @param[out] result_freq_div + + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcDinFreq2(t_x502_hnd hnd, double ref_freq, double *f_din, uint32_t *result_freq_div); + +/***************************************************************************//** + @brief + + , + , , + . + + X502_SetOutFreq(), + + , . + + , + (. X502_SetOutFreq()). + + E16 ref_freq E16_REF_FREQ_48000KHZ, + X502_CalcOutFreq2! + + @param[in] ref_freq ( ) + @param[in,out] f_dout + . + , + . + @param[out] result_freq_div + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcOutFreq(double ref_freq, double *f_dout, uint32_t *result_freq_div); + +/***************************************************************************//** + @brief + + , + , , + . + + X502_SetOutFreq(), + + , . + + , + (. X502_SetOutFreq()). + + @param[in] hnd . + @param[in] ref_freq ( ) + @param[in,out] f_dout + . + , + . + @param[out] result_freq_div + . + , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CalcOutFreq2(t_x502_hnd hnd, double ref_freq, double *f_dout, uint32_t *result_freq_div); + +/** @} */ + + +/***************************************************************************//** + @addtogroup func_async - + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief + + . + , , + ( ). + + , + , + . + + @note , + ( X502_StreamsStart() + , ). + + @param[in] hnd . + @param[in] ch ( #t_x502_dac_ch). + @param[in] data ( ) + @param[in] flags #t_x502_dacout_flags. + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_AsyncOutDac(t_x502_hnd hnd, uint32_t ch, double data, uint32_t flags); + +/***************************************************************************//** + @brief + + . + X502_PrepareData() - 16 + , - ( + ). + + , + , . + + , , + , , + , + . + + @note , + ( X502_StreamsStart() + , ). + + @param[in] hnd . + @param[in] val - , - + #t_x502_digout_word_flags. + @param[in] msk - + ( + val). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_AsyncOutDig(t_x502_hnd hnd, uint32_t val, uint32_t msk); + + +/***************************************************************************//** + @brief + + . + ( + #X502_STREAM_DIN). + + E-502/L-502 , + / + X502_StreamsStart(), + + , E16 . + + E16 17 - INT, 18 - TRIG + + @note , + ( X502_StreamsStart() + , ). + + @param[in] hnd . + @param[out] din + . + 18 , 14 - . + , + . + + E-502 L-502. + + , , + ! + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_AsyncInDig(t_x502_hnd hnd, uint32_t* din); + + +/***************************************************************************//** + @brief + + + . , + X502_SetAdcFreq(). + . , + X502_AsyncGetAdcFrame() + . + + , + X502_ProcessAdcData(), , + X502_ProcessAdcData(). + + + . + + , + , + . + + @param[in] hnd . + @param[in] flags t_x502_proc_flags + @param[in] tout + @param[out] data , + . , + double , + + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_AsyncGetAdcFrame(t_x502_hnd hnd, uint32_t flags, + uint32_t tout, double* data); + +/** @} */ + + + + + +/***************************************************************************//** + @addtogroup func_streams - + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief / + + / + . + X502_Configure(), . + X502_StreamsStart(). + + + , + , + (. @ref sect_sync_mode_buf) + @param[in] hnd . + @param[in] streams #t_x502_streams, , + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_StreamsEnable(t_x502_hnd hnd, uint32_t streams); +/****************************************************************************//** + @brief / + + . + . + , X502_StreamsEnable(). + @param[in] hnd . + @param[in] streams #t_x502_streams, , + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_StreamsDisable(t_x502_hnd hnd, uint32_t streams); + +/****************************************************************************//** + @brief , + + , , + . + + @param[in] hnd . + @param[out] streams #t_x502_streams, , + . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetEnabledStreams(t_x502_hnd hnd, uint32_t* streams); + +/***************************************************************************//** + @brief / + + . + . , + , + + . + + DMA , + , + DMA , + , X502_PreloadStart() ( + ). + + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_StreamsStart(t_x502_hnd hnd); + +/***************************************************************************//** + @brief / + + / . + ( + ) + . + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_StreamsStop(t_x502_hnd hnd); + + +/***************************************************************************//** + @brief , / + + X502_StreamsStart() + - BlackFin. + , + #X502_ERR_STREAM_IS_NOT_RUNNING, , + + @param[in] hnd . + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_IsRunning(t_x502_hnd hnd); + + + +/***************************************************************************//** + @brief + + , + . + , + , ( + ) ( , ). + X502_ProcessData(). + + , , + + . + , . + + + X502_GetRecvReadyCount(). + + X502_Recv() + X502_StreamsStart(). + + @param[in] hnd . + @param[out] buf , . + @param[in] size (32- ). + @param[in] tout . + @return < 0 - . + >= 0 - . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_Recv(t_x502_hnd hnd, uint32_t* buf, uint32_t size, uint32_t tout); + + +/***************************************************************************//** + @brief + + , + . + , , + ( , 1 2). + X502_PrepareData(). + + , + . + + X502_GetSendReadyCount(). + + , , + . + + + X502_PreloadStart(). + + @param[in] hnd . + @param[in] buf , + @param[in] size (32- ). + @param[in] tout ( ) . + @return < 0 - . + >= 0 - . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_Send(t_x502_hnd hnd, const uint32_t* buf, uint32_t size, uint32_t tout); + + + +/***************************************************************************//** + @brief + + , X502_Recv(). + + , ( #X502_PROC_FLAGS_VOLT). + + , + ( + - ). + + , + X502_ProcessData(), + . + + @param[in] hnd . + @param[in] src , X502_Recv(). + @param[out] dest , + . + @param[in,out] size - src, - + + dest + @param[in] flags #t_x502_proc_flags + @return . + ****************************************************************************/ +X502_EXPORT(int32_t) X502_ProcessAdcData(t_x502_hnd hnd, const uint32_t* src, + double *dest, uint32_t *size, uint32_t flags); + +/***************************************************************************//** + @brief + + , X502_Recv(). + , + - , double, + . + + . + , + . + , + #X502_ADC_SCALE_CODE_MAX + . + + , , + (, ). + @param[in] hnd . + @param[in] src , X502_Recv(). + @param[in] size (32- ) src. + @param[in] flags #t_x502_proc_flags, + . + "". + @param[out] adc_data , , + . + NULL, + ( adc_data_size NULL, + 0). + @param[in,out] adc_data_size + adc_data. + adc_data_size, adc_data + adc_data_size . + + + . + NULL, adc_data = NULL + @param[out] din_data , + . + , + X502_AsyncInDig(). + @param[in,out] din_data_size adc_data_size + din_data , + + . NULL, + din_data = NULL. + @return . + ****************************************************************************/ +X502_EXPORT(int32_t) X502_ProcessData(t_x502_hnd hnd, const uint32_t* src, uint32_t size, + uint32_t flags, double *adc_data, uint32_t *adc_data_size, + uint32_t *din_data, uint32_t *din_data_size); + +/***************************************************************************//** + @brief + + X502_ProcessData(), + . + , , + . + usr_data + ( ). + , + BlackFin. + @param[in] hnd . + @param[in] src , + X502_Recv(). + @param[in] size (32- ) src. + @param[in] flags #t_x502_proc_flags. + @param[out] adc_data , + (. X502_ProcessData()). + @param[in,out] adc_data_size . X502_ProcessData() + @param[out] din_data , + . . X502_ProcessData(). + @param[in,out] din_data_size . X502_ProcessData(). + @param[out] usr_data , + . + @param[in,out] usr_data_size usr_data + + . + NULL usr_data = NULL. + @return . + ****************************************************************************/ +X502_EXPORT(int32_t) X502_ProcessDataWithUserExt(t_x502_hnd hnd, const uint32_t* src, uint32_t size, + uint32_t flags, double *adc_data, + uint32_t *adc_data_size, uint32_t *din_data, + uint32_t *din_data_size, + uint32_t *usr_data, uint32_t *usr_data_size); + + + +/***************************************************************************//** + @brief + + - , + . + , . + + , . + + n*size , n - + ( 1 3). + + 32- , 16- + , - + #t_x502_digout_word_flags, + ( ) . + + , , + , + . + , + #X502_DAC_SCALE_CODE_MAX , +5V. + + @param[in] hnd . + @param[in] dac1 + NULL, . + @param[in] dac2 + NULL, . + @param[in] digout + NULL, . + @param[in] size . + @param[in] flags , , + #t_x502_dacout_flags. + @param[out] out_buf , + . + n*size (n - + ) + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_PrepareData(t_x502_hnd hnd, const double* dac1, const double* dac2, + const uint32_t* digout, uint32_t size, int32_t flags, + uint32_t* out_buf); + +/***************************************************************************//** + @brief + + , + X502_Recv(). + X502_Recv() , , + X502_Recv() ( + ). + Ethernet + Windows. + @param[in] hnd . + @param[out] rdy_cnt . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_GetRecvReadyCount(t_x502_hnd hnd, uint32_t *rdy_cnt); + + +/***************************************************************************//** + @brief + + , + . + + X502_Send() . + Ethernet (TCP). + @param[in] hnd . + @param[out] rdy_cnt , + . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_GetSendReadyCount(t_x502_hnd hnd, uint32_t *rdy_cnt); + +/***************************************************************************//** + @brief + + + , + X502_ProcessData()/ + X502_ProcessAdcData() , . + + , , + . + + . + X502_ProcessData() , + , , + X502_ProcessData(). + + , 7 , X502_ProcessData() + 7 , + X502_GetNextExpectedLchNum() 0 ( + ). + X502_ProcessData() 7*n + 5 , + 5 ( + 0,1,2,3,4 ). + + @param[in] hnd . + @param[out] lch ( ). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_GetNextExpectedLchNum(t_x502_hnd hnd, uint32_t *lch); + + + +/***************************************************************************//** + @brief + + + . + , + X502_StreamsStart(). + + . + + X502_Send(). + + @param[in] hnd . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_PreloadStart(t_x502_hnd hnd); + + + +/***************************************************************************//** + @brief + + ( L502) + ( E502) . + + X502_Send(). + + ( + ) - .. + X502_OutCycleSetup(). + . + + L-502 , + . + E-502 . + E-502 L-502. + + @param[in] hnd . + @param[in] size + . + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_OutCycleLoadStart(t_x502_hnd hnd, uint32_t size); + +/***************************************************************************//** + @brief + + . + - ( X502_StreamsStart()), + , + -. + + , + , + #X502_OUT_CYCLE_FLAGS_FORCE. + + #X502_OUT_CYCLE_FLAGS_WAIT_DONE, + , + . + + , , + - X502_StreamsStart(). + + X502_OutCycleLoadStart() + ! + + @param[in] hnd . + @param[in] flags #t_x502_out_cycle_flags. + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_OutCycleSetup(t_x502_hnd hnd, uint32_t flags); + + +/***************************************************************************//** + @brief + + + X502_OutCycleSetup(). + , + . + + X502_StreamsStop() ( + X502_StreamsDisable()) + . + + , + , . X502_StreamsStop() + , , .. + , + #X502_OUT_CYCLE_FLAGS_WAIT_DONE. + + @param[in] hnd . + @param[in] flags #t_x502_out_cycle_flags. + @return . + ***************************************************************************/ +X502_EXPORT(int32_t) X502_OutCycleStop(t_x502_hnd hnd, uint32_t flags); + + +/***************************************************************************//** + @brief , + + , + X502_OutCycleSetup() + X502_OutCycleStop(). + #X502_OUT_CYCLE_FLAGS_WAIT_DONE , + ( ). + + , 1.1.2, + ARM 1.0.2 E-502 + 1.0.9 L-502. , + , #X502_ERR_NOT_SUP_BY_FIRMWARE + #X502_ERR_NOT_SUP_BY_DRIVER. + + X502_OutCycleSetup() + X502_StreamsStart(), , + , + .. + ( E502). + + X502_OutCycleSetup() + + . , + , + . + + X502_OutCycleStop() + X502_StreamsStop(), ( ), + + . + + @param[in] hnd . + @param[out] done 0, + , 1 --- ( + , ) + @return . + ****************************************************************************/ +X502_EXPORT(int32_t) X502_OutCycleCheckSetupDone(t_x502_hnd hnd, uint32_t *done); + + + +/***************************************************************************//** + @brief + + . + #X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY , + , + , - + . + + @param[in] hnd . + @param[out] status --- #t_x502_out_status_flags, + Ȕ. + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_OutGetStatusFlags(t_x502_hnd hnd, uint32_t *status); + + +/***************************************************************************//** + @brief + + , + . + , - + . + + X502_SetStreamBufSize , + X502_StreamsStart + X502_StreamsEnable , + X502_SetStreamBufSize + X502_StreamsStart X502_StreamsEnable. + + @param[in] hnd . + @param[in] ch , + ( #t_x502_stream_ch). + @param[in] size 32- , + 0 - + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetStreamBufSize(t_x502_hnd hnd, uint32_t ch, uint32_t size); + +/***************************************************************************//** + @brief + + ( + PCI-Express USB) + . + , + . + + @param[in] hnd . + @param[in] dma_ch , + ( #t_x502_stream_ch). + @param[in] step 32- + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetStreamStep(t_x502_hnd hnd, uint32_t dma_ch, uint32_t step); + +/** @} */ + + + +/***************************************************************************//** + @addtogroup func_dsp + @{ +*******************************************************************************/ +/***************************************************************************//** + @brief BlackFin + + + , + ( ). + LDR. + @param[in] hnd . + @param[in] filename . + @return . + *****************************************************************************/ +X502_EXPORT(int32_t) X502_BfLoadFirmware(t_x502_hnd hnd, const char* filename); + + + +/***************************************************************************//** + @brief , BlackFin + + BlackFin + . , + BlackFin . + ( , + ..) . + DSP. + + , + ( ) + JTAG-. + + @param[in] hnd . + @param[out] version , + BlackFin + . + @return . + *****************************************************************************/ +X502_EXPORT(int32_t) X502_BfCheckFirmwareIsLoaded(t_x502_hnd hnd, uint32_t *version); + +/***************************************************************************//** + @brief + + . + , (L1), SDRAM. + BlackFin . + + , + . + + @param[in] hnd . + @param[in] addr , + . + @param[out] regs , + . + @param[in] size 32- . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_BfMemRead(t_x502_hnd hnd, uint32_t addr, uint32_t* regs, + uint32_t size); + +/***************************************************************************//** + @brief + + BlackFin. + 8 32- (32 ). + (L1), SDRAM. + BlackFin . + + , + . + + @note , .. , + . + + @param[in] hnd . + @param[in] addr , + . + @param[out] regs . + @param[in] size 32- + ( 8). + @return . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_BfMemWrite(t_x502_hnd hnd, uint32_t addr, + const uint32_t* regs, uint32_t size); + + +/***************************************************************************//** + @brief + + + , BlackFin. + + + , + . + . + + , x502api + , + . + X502_BF_CMD_CODE_USER (0x8000). + + @param[in] hnd . + @param[in] cmd_code - , . + @param[in] par , ( + ). + @param[in] snd_data , . + , + snd_size = 0. + @param[in] snd_size 32- , snd_data + @param[out] rcv_data , , + . + , + , rcv_size = 0. + @param[in] rcv_size 32- , , + . + rcv_data + . + @param[in] tout , + . + , + . + @param[out] recvd_size , + 32- , + + ( , + rcv_size). + @return . + , + . +*******************************************************************************/ +X502_EXPORT(int32_t) X502_BfExecCmd(t_x502_hnd hnd, uint16_t cmd_code, uint32_t par, + const uint32_t* snd_data, uint32_t snd_size, + uint32_t* rcv_data, uint32_t rcv_size, + uint32_t tout, uint32_t* recvd_size); +/** @} */ + + + + + + +/***************************************************************************//** + @addtogroup func_flash Flash- + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief Flash- + + Flash- , + . - + . + @param[in] hnd . + @param[in] addr . + @param[out] data , + ( size ). + @param[in] size . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_FlashRead(t_x502_hnd hnd, uint32_t addr, uint8_t* data, + uint32_t size); +/***************************************************************************//** + @brief Flash- + + Flash- . + X502_FlashErase() + X502_FlashWriteEnable(), + Flash-. + #X502_FLASH_USER_SIZE + Flash-. + @param[in] hnd . + @param[in] addr . + @param[in] data ( + size ). + @param[in] size . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_FlashWrite(t_x502_hnd hnd, uint32_t addr, + const uint8_t* data, uint32_t size); +/***************************************************************************//** + @brief Flash- + + Flash- ( + 0xFF). 4096 ! + + X502_FlashWriteEnable(). + @param[in] hnd . + @param[in] addr ( 4K). + @param[in] size ( 4K). + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_FlashErase(t_x502_hnd hnd, uint32_t addr, uint32_t size); +/***************************************************************************//** + @brief Flash- + + Flash- ( + #X502_FLASH_USER_SIZE ). , + X502_FlashErase() X502_FlashWrite() + . + X502_FlashWriteDisable(). + @param[in] hnd . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_FlashWriteEnable(t_x502_hnd hnd); +/***************************************************************************//** + @brief Flash- + + Flash- + ( #X502_FLASH_USER_SIZE ). , + + X502_FlashErase() X502_FlashWrite(), + . + @param[in] hnd . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_FlashWriteDisable(t_x502_hnd hnd); + +/** @} */ + + + + + +/***************************************************************************//** + @addtogroup func_misc + @{ +*******************************************************************************/ +/**************************************************************************//** + @brief + + x502api. + 32- . + --- , + , --- . + + --- , --- , + --- , --- ( --- 0) + + @return 32- , + *****************************************************************************/ +X502_EXPORT(uint32_t) X502_GetLibraryVersion(void); + +/***************************************************************************//** + @brief + + , . + ( + ). + + @note , Windows + Windows CP1251, Linux + UTF-8. + @param[in] err , . + @return , + ******************************************************************************/ +X502_EXPORT(const char*) X502_GetErrorString(int32_t err); + +/***************************************************************************//** + @brief + + , /, + + L-502 LED1 E-502. + + . + + / + . + + @param[in] hnd . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_LedBlink(t_x502_hnd hnd); + + +/***************************************************************************//** + @brief + + + . + . E-502 L-502 SYN1 SYN2. + L-502 + . E-502 + . + E-16 TRIG INT , START CONV. + + , + . + + . + + @param[in] hnd . + @param[in] pullups ( #t_x502_pullups), , + . + @return . + ******************************************************************************/ +X502_EXPORT(int32_t) X502_SetDigInPullup(t_x502_hnd hnd, uint32_t pullups); + + +/***************************************************************************//** + @brief + + , + #t_x502_features . + + , #X502_ERR_OK. + + 1.1.6 . + + @param[in] hnd . + @param[in] feature #t_x502_features, , + . + @return , + #X502_ERR_OK, --- + ******************************************************************************/ +X502_EXPORT(int32_t) X502_CheckFeature(t_x502_hnd hnd, uint32_t feature); + +/** @} */ +/** @} */ + +#ifdef __cplusplus +} +#endif + + +#endif // X502API_H diff --git a/SDK/include/x502tstp.h b/SDK/include/x502tstp.h new file mode 100644 index 0000000..b203ced --- /dev/null +++ b/SDK/include/x502tstp.h @@ -0,0 +1,140 @@ +#ifndef E502TSTP_H +#define E502TSTP_H + +#include "x502api.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup tstpfunc_list Функции для работы с метками времени + @{ **/ + +/***************************************************************************//** + @addtogroup tstptype_list Константы и перечисления + @{ + *****************************************************************************/ + +#define TSP_NSEC_PER_SEC (1000000000) + +#define TSP_WRD1_SSEC_LEN (24) +#define TSP_WRD2_SSEC_LEN (7) +#define TSP_WRD2_SEC_LEN (19) +#define TSP_WRD3_SEC_LEN (13) +#define TSP_SSEC_WIDTH (31) + + +#define TSP_WRD_NUM(wrd) (((wrd) >> 26) & 3) +#define TSP_WRD0_ADC_CLK_NUM_MASK (0x3ffffff) +#define TSP_WRD1_LOCK_MASK (1 << 25) +#define TSP_WRD1_FMARK_MASK (1 << 24) +#define TSP_WRD1_SSEC_MASK ((1 << TSP_WRD1_SSEC_LEN) - 1) +#define TSP_WRD2_SEC_MASK (0x3ffff80) +#define TSP_WRD2_SSEC_MASK ((1 << TSP_WRD2_SSEC_LEN) - 1) +#define TSP_WRD2_SECSSEC_MASK ((1 << (TSP_WRD2_SEC_LEN + TSP_WRD2_SSEC_LEN)) - 1) +#define TSP_WRD3_SEC_MASK ((1 << TSP_WRD3_SEC_LEN) - 1) + +#define TSP_WRD1_IS_FMARK(wrd) (!!((wrd) & TSP_WRD1_FMARK_MASK)) +#define TSP_WRD1_IS_LOCK(wrd) (!!((wrd) & TSP_WRD1_LOCK_MASK)) +#define TSP_WRD1_GET_SSEC(wrd) ((wrd) & TSP_WRD1_SSEC_MASK) +#define TSP_WRD2_GET_SECSSEC(wrd) ((uint64_t)((wrd) & TSP_WRD2_SECSSEC_MASK) << TSP_WRD1_SSEC_LEN) +#define TSP_WRD2_GET_SSEC(wrd) ((wrd) & TSP_WRD2_SSEC_MASK) +#define TSP_WRD3_GET_SEC(wrd) ((uint64_t)((wrd) & TSP_WRD3_SEC_MASK) << (TSP_WRD1_SSEC_LEN + TSP_WRD2_SSEC_LEN + TSP_WRD2_SEC_LEN)) +#define SSEC_MAX (0x7fffffff) +#define TSTP_SSEC_TO_NSEC(time) (time > 0 ? ((uint32_t)((((double)((time) & SSEC_MAX)) / (1U << TSP_SSEC_WIDTH)) * TSP_NSEC_PER_SEC)) : ((uint32_t)((((double)((time*(-1)) & SSEC_MAX)) / (1U << TSP_SSEC_WIDTH)) * TSP_NSEC_PER_SEC))) +#define TSTP_SECSSEC_TO_SEC(time) (time > 0 ? (uint32_t)((time) >> TSP_SSEC_WIDTH) : (uint32_t)((time * -1) >> TSP_SSEC_WIDTH)) +#define TSTP_SECSSEC_TO_SEC_DOUBLE(time) (((double)(time)) / (1U << TSP_SSEC_WIDTH)) +#define TSTP_SEC_TO_SSEC(time) (((uint64_t)(time)) << TSP_SSEC_WIDTH) + +/** Тип данных для хранения времени + * Время хранится в секундах прошедшее с начала этой эпохи (00:00:00 UTC, 1 Января 1970 года) + * Дробный формат хранения 32.31: 32 целых бит, 31 дробных бит, + * старшие 32 бита - секунды, младшие 31 бит сабсекунды = 1 / (1<<31) секунд + + сабсекунды, + */ +typedef uint64_t t_x502_tstptime; + +/** Структура для хранения контекста при обработке потока слов "на ввод" с включенными метками времени */ +typedef struct { + /** значение слов последней метки времени */ + uint32_t wrd[4]; + /** частота АЦП */ + uint32_t adc_freq; + /** частота DIN */ + uint32_t din_freq; + /** время первой метки времени */ + t_x502_tstptime tstp_start_time; + /** признак, что первая метка времени получена */ + bool tstp_mark_rcvd; + /** значение текущего обрабатываемого слова */ + uint32_t cur_wrd; + /** кол-во обработанных слов из потока */ + uint32_t processed_wrds; + /** кол-во слов АЦП после последней метки времени */ + uint32_t adcwrds_after_tstp; + /** кол-во слов DIN после последней метки времени */ + uint32_t dinwrds_after_tstp; + /** общее кол-во слов после последней метки времени */ + uint32_t wrds_after_tstp; + /** время последней метки времени */ + t_x502_tstptime last_tstp_time; +} t_x502_tstp_state; + +/** @} */ + +/***************************************************************************//** + @addtogroup func_tstp Функции для работы с метками времени + @{ +*******************************************************************************/ + +/***************************************************************************//** + @brief Инициализация tstp_state, в нем хранится текущий контекст для операций с метками времени из потока "на ввод" + + Данная функция инициализирует структуру в которой хранится контекст для работы с метками времени + Необходимо указывать на частоту АЦП и DIN т.к. время для слов между двумя метками + будет считаться в зависимости от частоты. + + @param[in] tstp_state Указатель на существующую струтуру t_x502_tstp_state + @param[in] adc_freq Частота АЦП + @param[in] din_freq Частота DIN +*******************************************************************************/ +X502_EXPORT(void) X502_tstp_init(t_x502_tstp_state *tstp_state, uint32_t adc_freq, uint32_t din_freq); + +/** @brief Обработать очередное слово wrd из потока "на ввод" +* +* Функция должна быть вызвана только один раз и последовательно для каждого слова полученного из X502_Recv +* +* @param[in] tstp_state Указатель на струтуру t_x502_tstp_state предварительно инициализированную через tstp_init() +* @param[in] wrd Слово из потока "на ввод" +*/ +X502_EXPORT(void) X502_tstp_process_wrd(t_x502_tstp_state *tstp_state, uint32_t wrd); + +/** @brief Узнать время текущего обработанного слова +* +* Узнать время текущего слова которое до этого было обработано функцией tstp_process_wrd() +* Формат времени: 32бита - секунды, 31 бит сабсекунды = 1 / (1<<31) секунд +* +* @param[in] tstp_state Указатель на струтуру t_x502_tstp_state предварительно инициализированную через tstp_init() +* @param[in] ret Указатель на t_x502_tstptime по которому будет сохранено расчитанное значение времени для текущего слова +*/ +X502_EXPORT(void) X502_tstp_get_curwrd_time(t_x502_tstp_state *tstp_state, t_x502_tstptime *ret); + +/** @brief Возвращает признак того что часы синхронизированы +* +* Возвращает признак "захват PTP" для текущего обработанного слова +* +* @param[in] tstp_state Указатель на струтуру t_x502_tstp_state предварительно инициализированную через tstp_init() +* +* @return true: присутствует признак "захват PTP" для текущего обработанного слова, false: признак "захват PTP" отсутствует +*/ +X502_EXPORT(bool) X502_tstp_get_lock(t_x502_tstp_state *tstp_state); + +/** @} */ +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif //E502TSTP_H diff --git a/SDK/lib/msvc/e502api.lib b/SDK/lib/msvc/e502api.lib new file mode 100644 index 0000000..7319d56 Binary files /dev/null and b/SDK/lib/msvc/e502api.lib differ diff --git a/SDK/lib/msvc/l502api.lib b/SDK/lib/msvc/l502api.lib new file mode 100644 index 0000000..44e43f0 Binary files /dev/null and b/SDK/lib/msvc/l502api.lib differ diff --git a/SDK/lib/msvc/x502api.lib b/SDK/lib/msvc/x502api.lib new file mode 100644 index 0000000..ecb0880 Binary files /dev/null and b/SDK/lib/msvc/x502api.lib differ diff --git a/SDK/lib/msvc64/e502api.lib b/SDK/lib/msvc64/e502api.lib new file mode 100644 index 0000000..4349d7d Binary files /dev/null and b/SDK/lib/msvc64/e502api.lib differ diff --git a/SDK/lib/msvc64/l502api.lib b/SDK/lib/msvc64/l502api.lib new file mode 100644 index 0000000..7fd9fef Binary files /dev/null and b/SDK/lib/msvc64/l502api.lib differ diff --git a/SDK/lib/msvc64/x502api.lib b/SDK/lib/msvc64/x502api.lib new file mode 100644 index 0000000..d8a2c47 Binary files /dev/null and b/SDK/lib/msvc64/x502api.lib differ diff --git a/SDK/lpcieNet/v2.0/lpcieNet.dll b/SDK/lpcieNet/v2.0/lpcieNet.dll new file mode 100644 index 0000000..16d5b58 Binary files /dev/null and b/SDK/lpcieNet/v2.0/lpcieNet.dll differ diff --git a/SDK/lpcieNet/v3.5/lpcieNet.dll b/SDK/lpcieNet/v3.5/lpcieNet.dll new file mode 100644 index 0000000..5ea03f3 Binary files /dev/null and b/SDK/lpcieNet/v3.5/lpcieNet.dll differ diff --git a/SDK/lpcieNet/v4.0/lpcieNet.dll b/SDK/lpcieNet/v4.0/lpcieNet.dll new file mode 100644 index 0000000..b5abe6a Binary files /dev/null and b/SDK/lpcieNet/v4.0/lpcieNet.dll differ diff --git a/SDK/manuals/x502api.pdf b/SDK/manuals/x502api.pdf new file mode 100644 index 0000000..4751a6c Binary files /dev/null and b/SDK/manuals/x502api.pdf differ diff --git a/SDK/pas/e502api.pas b/SDK/pas/e502api.pas new file mode 100644 index 0000000..cb4bdf2 --- /dev/null +++ b/SDK/pas/e502api.pas @@ -0,0 +1,294 @@ +unit e502api; +interface +uses Windows, SysUtils, x502api; + + const + { } + E502_ETH_SVC_EVENT_NONE = 0; // + E502_ETH_SVC_EVENT_ADD = 1; // + E502_ETH_SVC_EVENT_REMOVE = 2; // + E502_ETH_SVC_EVENT_CHANGED = 3; // + + // . + type st_e502_eth_config_state = record + end; + type t_e502_eth_config_hnd = ^st_e502_eth_config_state; + + type t_e502_mac_addr = array[0..X502_MAC_ADDR_SIZE-1] of byte; + + // + type st_e502_eth_svc_browse_context = record + end; + type t_e502_eth_svc_browse_hnd = ^st_e502_eth_svc_browse_context; + // + type st_e502_eth_svc_record = record + end; + type t_e502_eth_svc_record_hnd = ^st_e502_eth_svc_record; + + // E502, USB + function E502_UsbGetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; + function E502_UsbGetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; + // E502, USB, . + function E502_OpenUsb(hnd: t_x502_hnd; serial: string): LongInt; stdcall; + // E502 IP- + function E502_OpenByIpAddr(hnd : t_x502_hnd; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; + + // , E502 + function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; + function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; + // IP- + function E502_MakeDevRecordByIpAddr(var devrec: t_x502_devrec; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; + // TCP- + function E502_EthDevRecordSetCmdPort(var devrec: t_x502_devrec; cmd_port: Word) : LongInt; stdcall; + // TCP- + function E502_EthDevRecordSetDataPort(var devrec: t_x502_devrec; data_port: Word) : LongInt; stdcall; + + // + function E502_MakeDevRecordByEthSvc(var devrec: t_x502_devrec; svc : t_e502_eth_svc_record_hnd; flags : LongWord; tout: LongWord) : LongInt; stdcall; + + + // IP- + function E502_GetIpAddr(hnd: t_x502_hnd; out ip_addr : LongWord) : LongInt; stdcall; + + + + // . + function E502_EthConfigCreate() : t_e502_eth_config_hnd; stdcall; + // . + function E502_EthConfigFree(cfg: t_e502_eth_config_hnd): LongInt; stdcall; + // + function E502_EthConfigRead(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd): LongInt; stdcall; + // + function E502_EthConfigWrite(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd; passwd : string): LongInt; stdcall; + // + function E502_EthConfigCopy(src_cfg: t_e502_eth_config_hnd; dst_cfg: t_e502_eth_config_hnd): LongInt; stdcall; + // , Ethernet + function E502_EthConfigGetEnabled(cfg: t_e502_eth_config_hnd; out en : LongBool): LongInt; stdcall; + // Ethernet + function E502_EthConfigSetEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; + // , IP + function E502_EthConfigGetAutoIPEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; + // IP + function E502_EthConfigSetAutoIPEnabled(cfg: t_e502_eth_config_hnd; en: LongBool): LongInt; stdcall; + // , MAC- + function E502_EthConfigGetUserMACEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; + // , MAC- + function E502_EthConfigSetUserMACEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; + // IP- + function E502_EthConfigGetIPv4Addr(cfg: t_e502_eth_config_hnd; out ip_addr : LongWord): LongInt; stdcall; + // IP- + function E502_EthConfigSetIPv4Addr(cfg: t_e502_eth_config_hnd; ip_addr: LongWord): LongInt; stdcall; + // + function E502_EthConfigGetIPv4Mask(cfg: t_e502_eth_config_hnd; out mask : LongWord): LongInt; stdcall; + // + function E502_EthConfigSetIPv4Mask(cfg: t_e502_eth_config_hnd; mask : LongWord): LongInt; stdcall; + // + function E502_EthConfigGetIPv4Gate(cfg: t_e502_eth_config_hnd; out gate: LongWord): LongInt; stdcall; + // + function E502_EthConfigSetIPv4Gate(cfg: t_e502_eth_config_hnd; gate: LongWord): LongInt; stdcall; + // MAC- + function E502_EthConfigGetUserMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; + // MAC- + function E502_EthConfigSetUserMac(cfg: t_e502_eth_config_hnd; mac: t_e502_mac_addr): LongInt; stdcall; + // MAC- + function E502_EthConfigGetFactoryMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; + // + function E502_EthConfigGetInstanceName(cfg: t_e502_eth_config_hnd; out name: string): LongInt; stdcall; + // + function E502_EthConfigSetInstanceName(cfg: t_e502_eth_config_hnd; const name: string): LongInt; stdcall; + // + function E502_EthConfigSetNewPassword(cfg: t_e502_eth_config_hnd; const new_passwd: string): LongInt; stdcall; + + // E502 + function E502_SwitchToBootloader(hnd: t_x502_hnd): LongInt; stdcall; + // + function E502_ReloadFPGA(hnd: t_x502_hnd): LongInt; stdcall; + // Cortex-M4. + function E502_CortexExecCmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; + const snd_data : array of byte; snd_size : LongWord; + rcv_data : array of byte; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + + // + function E502_EthSvcBrowseStart(out context : t_e502_eth_svc_browse_hnd; flags : LongWord): LongInt; stdcall; + // + function E502_EthSvcBrowseGetEvent(context : t_e502_eth_svc_browse_hnd; out svc: t_e502_eth_svc_record_hnd; out event: LongWord; out flags : LongWord; tout : LongWord): LongInt; stdcall; + // + function E502_EthSvcBrowseStop(context : t_e502_eth_svc_browse_hnd): LongInt; stdcall; + // + function E502_EthSvcRecordFree(svc : t_e502_eth_svc_record_hnd): LongInt; stdcall; + // + function E502_EthSvcRecordGetInstanceName(svc : t_e502_eth_svc_record_hnd; out name: string): LongInt; stdcall; + // + function E502_EthSvcRecordGetDevSerial(svc : t_e502_eth_svc_record_hnd; out serial : string): LongInt; stdcall; + // IP + function E502_EthSvcRecordResolveIPv4Addr(svc : t_e502_eth_svc_record_hnd; out addr :LongWord; tout : LongWord): LongInt; stdcall; + // , + function E502_EthSvcRecordIsSameInstance(svc1 : t_e502_eth_svc_record_hnd; svc2 : t_e502_eth_svc_record_hnd): LongInt; stdcall; + +implementation + + function _get_serials( ser_arr: p_x502_serial_array; size:LongWord; + flags:LongWord; out devcnt: LongWord) : LongInt; + stdcall; external 'e502api.dll' name 'E502_UsbGetSerialList'; + function _get_dev_records_list(out list; size:LongWord; + flags : LongWord; out devcnt: LongWord) : LongInt; + stdcall; external 'e502api.dll' name 'E502_UsbGetDevRecordsList'; + + function _open_usb(hnd: t_x502_hnd; serial: PAnsiChar) : LongInt; stdcall; external 'e502api.dll' name 'E502_OpenUsb'; + function E502_OpenByIpAddr(hnd : t_x502_hnd; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; + function E502_MakeDevRecordByIpAddr(var devrec: t_x502_devrec; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; + function E502_EthDevRecordSetCmdPort(var devrec: t_x502_devrec; cmd_port: Word) : LongInt; stdcall; external 'e502api.dll'; + function E502_EthDevRecordSetDataPort(var devrec: t_x502_devrec; data_port: Word) : LongInt; stdcall; external 'e502api.dll'; + function E502_MakeDevRecordByEthSvc(var devrec: t_x502_devrec; svc : t_e502_eth_svc_record_hnd; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; + function E502_GetIpAddr(hnd: t_x502_hnd; out ip_addr : LongWord) : LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigCreate() : t_e502_eth_config_hnd; stdcall; external 'e502api.dll'; + function E502_EthConfigFree(cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigRead(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigWrite(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd; passwd : string): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigCopy(src_cfg: t_e502_eth_config_hnd; dst_cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetEnabled(cfg: t_e502_eth_config_hnd; out en : LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetAutoIPEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetAutoIPEnabled(cfg: t_e502_eth_config_hnd; en: LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetUserMACEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetUserMACEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetIPv4Addr(cfg: t_e502_eth_config_hnd; out ip_addr : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetIPv4Addr(cfg: t_e502_eth_config_hnd; ip_addr: LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetIPv4Mask(cfg: t_e502_eth_config_hnd; out mask : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetIPv4Mask(cfg: t_e502_eth_config_hnd; mask : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetIPv4Gate(cfg: t_e502_eth_config_hnd; out gate: LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetIPv4Gate(cfg: t_e502_eth_config_hnd; gate: LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetUserMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigSetUserMac(cfg: t_e502_eth_config_hnd; mac: t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; + function E502_EthConfigGetFactoryMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; + + function _eth_config_get_instance_name(cfg: t_e502_eth_config_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigGetInstanceName'; + function _eth_config_set_instance_name(cfg: t_e502_eth_config_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigSetInstanceName'; + function _eth_config_set_new_password(cfg: t_e502_eth_config_hnd; new_passwd: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigSetNewPassword'; + + function E502_SwitchToBootloader(hnd: t_x502_hnd): LongInt; stdcall; external 'e502api.dll'; + function E502_ReloadFPGA(hnd: t_x502_hnd): LongInt; stdcall; external 'e502api.dll'; + function _cortex_exec_cmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; + const snd_data; snd_size : LongWord; + out rcv_data; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; external 'e502api.dll' name 'E502_CortexExecCmd'; + + function E502_EthSvcBrowseStart(out context : t_e502_eth_svc_browse_hnd; flags : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthSvcBrowseGetEvent(context : t_e502_eth_svc_browse_hnd; out svc: t_e502_eth_svc_record_hnd; out event: LongWord; out flags : LongWord; tout : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthSvcBrowseStop(context : t_e502_eth_svc_browse_hnd): LongInt; stdcall; external 'e502api.dll'; + function E502_EthSvcRecordFree(svc : t_e502_eth_svc_record_hnd): LongInt; stdcall; external 'e502api.dll'; + function _eth_svc_record_get_instance_name(svc : t_e502_eth_svc_record_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthSvcRecordGetInstanceName'; + function _eth_svc_record_get_dev_serial(svc : t_e502_eth_svc_record_hnd; serial : PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthSvcRecordGetDevSerial'; + function E502_EthSvcRecordResolveIPv4Addr(svc : t_e502_eth_svc_record_hnd; out addr :LongWord; tout : LongWord): LongInt; stdcall; external 'e502api.dll'; + function E502_EthSvcRecordIsSameInstance(svc1 : t_e502_eth_svc_record_hnd; svc2 : t_e502_eth_svc_record_hnd): LongInt; stdcall; external 'e502api.dll'; + + + + function E502_UsbGetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; + var + ser_arr : p_x502_serial_array; + res, i : LongInt; + begin + if (Length(serials) > 0) then + begin + ser_arr:=GetMemory(Length(serials)*X502_SERIAL_SIZE); + // + res := _get_serials(ser_arr, Length(serials), flags, devcnt); + if res >= 0 then + begin + // + for i:=0 to res-1 do + serials[i] := string(ser_arr[i]); + end; + // , + FreeMemory(ser_arr); + end + else + begin + res:= _get_serials(nil, 0, flags, devcnt); + end; + E502_UsbGetSerialList:=res; + end; + + function E502_UsbGetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; + begin + E502_UsbGetSerialList:= E502_UsbGetSerialList(serials, flags, PCardinal(nil)^); + end; + + function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; + begin + E502_UsbGetDevRecordsList := _get_dev_records_list(list, Length(list), flags, devcnt); + end; + function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; + begin + E502_UsbGetDevRecordsList:= E502_UsbGetDevRecordsList(list, flags, PCardinal(nil)^); + end; + + function E502_OpenUsb(hnd: t_x502_hnd; serial: string) : LongInt; + begin + E502_OpenUsb:=_open_usb(hnd, PAnsiChar(AnsiString(serial))); + end; + + function E502_EthConfigGetInstanceName(cfg: t_e502_eth_config_hnd; out name: string): LongInt; stdcall; + var + strptr: PAnsiChar; + res: LongInt; + begin + strptr:=GetMemory(X502_INSTANCE_NAME_SIZE); + res:=_eth_config_get_instance_name(cfg, strptr); + if res = X502_ERR_OK then + name:=string(Utf8Decode(strptr)); + FreeMemory(strptr); + E502_EthConfigGetInstanceName:= res; + end; + + + function E502_EthConfigSetInstanceName(cfg: t_e502_eth_config_hnd; const name: string): LongInt; stdcall; + begin + E502_EthConfigSetInstanceName:=_eth_config_set_instance_name(cfg, PAnsiChar(Utf8Encode(AnsiString(name)))); + end; + + function E502_EthConfigSetNewPassword(cfg: t_e502_eth_config_hnd; const new_passwd: string): LongInt; stdcall; + begin + E502_EthConfigSetNewPassword:=_eth_config_set_new_password(cfg, PAnsiChar(AnsiString(new_passwd))); + end; + + function E502_CortexExecCmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; + const snd_data : array of byte; snd_size : LongWord; + rcv_data : array of byte; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(snd_data)) < snd_size) or + (LongWord(Length(rcv_data)) < rcv_size) then + E502_CortexExecCmd := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + E502_CortexExecCmd:=_cortex_exec_cmd(hnd, cmd_code, par, snd_data, snd_size, rcv_data, rcv_size, tout, recvd_size); + end; + + function E502_EthSvcRecordGetInstanceName(svc : t_e502_eth_svc_record_hnd; out name: string): LongInt; stdcall; + var + strptr: PAnsiChar; + res: LongInt; + begin + strptr:=GetMemory(X502_INSTANCE_NAME_SIZE); + res:=_eth_svc_record_get_instance_name(svc, strptr); + if res = X502_ERR_OK then + name:=string(Utf8Decode(strptr)); + FreeMemory(strptr); + E502_EthSvcRecordGetInstanceName:= res; + end; + + function E502_EthSvcRecordGetDevSerial(svc : t_e502_eth_svc_record_hnd; out serial : string): LongInt; stdcall; + var + strptr: PAnsiChar; + res: LongInt; + begin + strptr:=GetMemory(X502_SERIAL_SIZE); + res:=_eth_svc_record_get_dev_serial(svc, strptr); + if res = X502_ERR_OK then + serial:=string(strptr); + FreeMemory(strptr); + E502_EthSvcRecordGetDevSerial:= res; + end; +end. diff --git a/SDK/pas/l502api.pas b/SDK/pas/l502api.pas new file mode 100644 index 0000000..a94168b --- /dev/null +++ b/SDK/pas/l502api.pas @@ -0,0 +1,805 @@ +unit l502api; +interface +uses Windows, SysUtils, x502api; + + + + // + function L502_GetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; + function L502_GetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; + // + function L502_Open(hnd: t_x502_hnd; serial: string): LongInt; stdcall; + + function L502_GetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; + function L502_GetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; + + + +{ ----------- , ----------} +const + // + L502_LTABLE_MAX_CH_CNT = 256; + // + L502_ADC_RANGE_CNT = 6; + // + L502_LCH_AVG_SIZE_MAX = 128; + // + L502_ADC_FREQ_DIV_MAX = (1024*1024); + // + L502_DIN_FREQ_DIV_MAX = (1024*1024); + // + L502_ADC_INTERFRAME_DELAY_MAX = $1FFFFF; + // BlackFin + L502_BF_CMD_DEFAULT_TOUT = 500; + + // , + L502_ADC_SCALE_CODE_MAX = 6000000; + // , + L502_DAC_SCALE_CODE_MAX = 30000; + + // + L502_DEVNAME_SIZE = X502_DEVNAME_SIZE; + // + L502_SERIAL_SIZE = X502_SERIAL_SIZE; + + // Flash- + L502_FLASH_USER_SIZE = $100000; + // BlackFin + L502_BF_REQ_TOUT = 500; + // + L502_DAC_RANGE = 5; + // + L502_DAC_CH_CNT = 2; + + // , , + L502_STREAM_IN_MSG_OVERFLOW = $01010000; + + // + L502_EXT_REF_FREQ_MAX = 2000000; + + + { ----------------- ---------------------------} + // + L502_ERR_OK = 0; + // + L502_ERR_INVALID_HANDLE = -1; + // + L502_ERR_MEMORY_ALLOC = -2; + // + L502_ERR_ALREADY_OPENED = -3; + // + L502_ERR_DEVICE_NOT_FOUND = -4; + // ( - , ) + L502_ERR_DEVICE_ACCESS_DENIED = -5; + // + L502_ERR_DEVICE_OPEN = -6; + // + L502_ERR_INVALID_POINTER = -7; + // + L502_ERR_STREAM_IS_RUNNING = -8; + // + L502_ERR_RECV = -9; + // + L502_ERR_SEND = -10; + // + L502_ERR_STREAM_OVERFLOW = -11; + // + L502_ERR_UNSUP_STREAM_MSG = -12; + // + L502_ERR_MUTEX_CREATE = -13; + // + L502_ERR_MUTEX_INVALID_HANDLE = -14; + // + L502_ERR_MUTEX_LOCK_TOUT = -15; + // + L502_ERR_MUTEX_RELEASE = -16; + // + L502_ERR_INSUFFICIENT_SYSTEM_RESOURCES= -17; + // + L502_ERR_NOT_IMPLEMENTED = -18; + // + L502_ERR_INSUFFICIENT_ARRAY_SIZE = -19; + // FPGA + L502_ERR_FPGA_REG_READ = -20; + // FPGA + L502_ERR_FPGA_REG_WRITE = -21; + // + L502_ERR_STREAM_IS_NOT_RUNNING = -22; + // + L502_ERR_INVALID_LTABLE_SIZE = -102; + // + L502_ERR_INVALID_LCH_NUMBER = -103; + // + L502_ERR_INVALID_LCH_RANGE = -104; + // + L502_ERR_INVALID_LCH_MODE = -105; + // + L502_ERR_INVALID_LCH_PHY_NUMBER = -106; + // + L502_ERR_INVALID_LCH_AVG_SIZE = -107; + // + L502_ERR_INVALID_ADC_FREQ_DIV = -108; + // + L502_ERR_INVALID_DIN_FREQ_DIV = -108; + // L502 + L502_ERR_INVALID_MODE = -109; + // + L502_ERR_INVALID_DAC_CHANNEL = -110; + // + L502_ERR_INVALID_REF_FREQ = -111; + // + L502_ERR_INVALID_INTERFRAME_DELAY = -112; + // + L502_ERR_INVALID_SYNC_MODE = -113; + // DMA + L502_ERR_INVALID_DMA_CH = -114; + // + L502_ERR_REF_FREQ_NOT_LOCKED = -131; + // + L502_ERR_IOCTL_FAILD = -132; + // + L502_ERR_IOCTL_TIMEOUT = -133; + // + L502_ERR_GET_INFO = -134; + // + L502_ERR_DIG_IN_NOT_RDY = -135; + // + L502_ERR_RECV_INSUFFICIENT_WORDS = -136; + // , , + L502_ERR_DAC_NOT_PRESENT = -137; + // + L502_ERR_PROC_INVALID_CH_NUM = -140; + // + L502_ERR_PROC_INVALID_CH_RANGE = -141; + // Flash- + L502_ERR_FLASH_INVALID_ADDR = -142; + // Flash- + L502_ERR_FLASH_INVALID_SIZE = -143; + // Flash- + L502_ERR_FLASH_WRITE_TOUT = -144; + // Flash- + L502_ERR_FLASH_ERASE_TOUT = -145; + // Flash- 4 + L502_ERR_FLASH_SECTOR_BOUNDARY = -146; + // BlackFin + L502_ERR_LDR_FILE_OPEN = -180; + // BlackFin + L502_ERR_LDR_FILE_READ = -181; + // BlackFin + L502_ERR_LDR_FILE_FORMAT = -182; + // LDR-, BlackFin HDMA + L502_ERR_LDR_FILE_UNSUP_FEATURE = -183; + // BlackFin + L502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184; + // / BlackFin + L502_ERR_BF_REQ_TIMEOUT = -185; + // BlackFin + L502_ERR_BF_CMD_IN_PROGRESS = -186; + // BlackFin + L502_ERR_BF_CMD_TIMEOUT = -187; + // BlackFin + L502_ERR_BF_CMD_RETURN_INSUF_DATA = -188; + // BlackFin + L502_ERR_BF_LOAD_RDY_TOUT = -189; + // + // + L502_ERR_BF_NOT_PRESENT = -190; + // BlackFin HDMA + L502_ERR_BF_INVALID_ADDR = -191; + // , BlackFin + L502_ERR_BF_INVALID_CMD_DATA_SIZE = -192; + + + {-------- , ------} + // , , + // + L502_GETDEVS_FLAGS_ONLY_NOT_OPENED = X502_GETDEVS_FLAGS_ONLY_NOT_OPENED; + + + + {-------- . ---------------} + // ( ) + L502_DIGOUT_WORD_DIS_H = $00020000; + // + L502_DIGOUT_WORD_DIS_L = $00010000; + + + {-------- -------------------} + L502_REF_FREQ_2000KHZ = 2000000; // 2 + L502_REF_FREQ_1500KHZ = 1500000; // 1.5 + + {-------- ----------------------} + L502_ADC_RANGE_10 = 0; // +/-10V + L502_ADC_RANGE_5 = 1; // +/-5V + L502_ADC_RANGE_2 = 2; // +/-2V + L502_ADC_RANGE_1 = 3; // +/-1V + L502_ADC_RANGE_05 = 4; // +/-0.5V + L502_ADC_RANGE_02 = 5; // +/-0.2V + + + {-------- ------------------} + L502_LCH_MODE_COMM = 0; // + L502_LCH_MODE_DIFF = 1; // + L502_LCH_MODE_ZERO = 2; // + + + {-------- ------------------------------------} + L502_SYNC_INTERNAL = 0; // + L502_SYNC_EXTERNAL_MASTER = 1; // + L502_SYNC_DI_SYN1_RISE = 2; // DI_SYN1 + L502_SYNC_DI_SYN2_RISE = 3; // DI_SYN2 + L502_SYNC_DI_SYN1_FALL = 6; // DI_SYN1 + L502_SYNC_DI_SYN2_FALL = 7; // DI_SYN2 + + {-------- , -------------------} + L502_PROC_FLAGS_VOLT = 1; // , + // + + {-------- -----------------} + L502_STREAM_ADC = $01; // + L502_STREAM_DIN = $02; // + L502_STREAM_DAC1 = $10; // + L502_STREAM_DAC2 = $20; // + L502_STREAM_DOUT = $40; // + // , + L502_STREAM_ALL_IN = L502_STREAM_ADC or L502_STREAM_DIN; + // , + L502_STREAM_ALL_OUT = L502_STREAM_DAC1 or L502_STREAM_DAC2 or L502_STREAM_DOUT; + + + {--- , -----} + L502_STREAM_OUT_WORD_TYPE_DOUT = $0; // + L502_STREAM_OUT_WORD_TYPE_DAC1 = $40000000; // 1- + L502_STREAM_OUT_WORD_TYPE_DAC2 = $80000000; // 2- + + {------------------ L502 ------------------------------} + L502_MODE_FPGA = 0; // + // BlackFin + L502_MODE_DSP = 1; // + // , + // + L502_MODE_DEBUG = 2; // + + {------------------- -----------------------------------} + L502_DAC_CH1 = 0; // + L502_DAC_CH2 = 1; // + + {----------- , -----------------} + // , + // . , , + // + L502_DAC_FLAGS_VOLT = $0001; + // , + // . + L502_DAC_FLAGS_CALIBR = $0002; + + {------------------ DMA ------------------------------------} + L502_DMA_CH_IN = 0; // DMA + L502_DMA_CH_OUT = 1; // DMA + + {--- , ----} + L502_PULLUPS_DI_H = $01; // + L502_PULLUPS_DI_L = $02; // + L502_PULLUPS_DI_SYN1 = $04; // SYN1 + L502_PULLUPS_DI_SYN2 = $08; // SYN2 + + + + {--------------- , ---------------} + // + L502_DEVFLAGS_DAC_PRESENT = X502_DEVFLAGS_DAC_PRESENT; + // BlackFin + L502_DEVFLAGS_BF_PRESENT = X502_DEVFLAGS_BF_PRESENT; + // + L502_DEVFLAGS_GAL_PRESENT = X502_DEVFLAGS_GAL_PRESENT; + // , Flash- + L502_DEVFLAGS_FLASH_DATA_VALID = $00010000; + // , Flash- + // + L502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = $00020000; + // , Flash- + // + L502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = $00040000; + + {---------------- ----------------------} + // , + // . + L502_OUT_CYCLE_FLAGS_FORCE = $01; + + +type + // - + t_l502_hnd = t_x502_hnd; + + + { } + t_l502_cbr_coef = record + offs: Double; // + k : Double; // + end; + + + { . } + t_l502_cbr = record + // + adc: array[0..L502_ADC_RANGE_CNT-1] of t_l502_cbr_coef; + res1: array[0..63] of LongWord; + // + dac: array[0..L502_DAC_CH_CNT-1] of t_l502_cbr_coef; + res2: array[0..19] of LongWord; + end; + + { L502.} + t_l502_info = record + name: array[0..L502_DEVNAME_SIZE-1] of AnsiChar; // ("L502") + serial: array[0..L502_SERIAL_SIZE-1] of AnsiChar; // + devflags: LongWord; // + fpga_ver : Word; // ( - , - ) + plda_ver : Byte; // , + res : array[0..120] of Byte; // + cbr : t_l502_cbr; // ( Flash-) + end; + + function L502_Create(): t_l502_hnd; stdcall; + function L502_Free(hnd: t_l502_hnd): LongInt; stdcall; + + // + function L502_Close(hnd: t_l502_hnd): LongInt; stdcall; + // + function L502_GetDevInfo(hnd: t_l502_hnd; out info: t_l502_info) : LongInt; stdcall; + + // + function L502_Configure(hnd: t_l502_hnd; flags: LongWord): LongInt; stdcall; + // + function L502_SetLChannel(hnd: t_l502_hnd; lch, phy_ch, mode, range, avg: LongWord): LongInt; stdcall; + // + function L502_SetLChannelCount(hnd: t_l502_hnd; lch_cnt : LongWord): LongInt; stdcall; + // + function L502_GetLChannelCount(hnd: t_l502_hnd; out lch_cnt: LongWord): LongInt; stdcall; + // + function L502_SetAdcFreqDivider(hnd: t_l502_hnd; adc_freq_div : LongWord): LongInt; stdcall; + // + function L502_SetAdcInterframeDelay(hnd: t_l502_hnd; delay : LongWord): LongInt; stdcall; + // + function L502_SetDinFreqDivider(hnd: t_l502_hnd; din_freq_div: LongWord): LongInt; stdcall; + // + function L502_SetAdcFreq(hnd: t_l502_hnd; var f_acq, f_frame: Double): LongInt; stdcall; + // + function L502_SetDinFreq(hnd: t_l502_hnd; var f_din: Double): LongInt; stdcall; + // + function L502_GetAdcFreq(hnd: t_l502_hnd; out f_acq, f_frame: Double): LongInt; stdcall; + // . + function L502_SetRefFreq(hnd: t_l502_hnd; freq: LongWord): LongInt; stdcall; + // . + function L502_SetSyncMode(hnd: t_l502_hnd; sync_mode: LongWord): LongInt; stdcall; + // . + function L502_SetSyncStartMode(hnd: t_l502_hnd; sync_start_mode: LongWord): LongInt; stdcall; + // + function L502_SetMode(hnd: t_l502_hnd; mode: LongWord): LongInt; stdcall; + // . + function L502_GetMode(hnd: t_l502_hnd; out mode: LongWord): LongInt; stdcall; + // . + function L502_SetAdcCoef(hnd: t_l502_hnd; range: LongWord; k, offs: Double): LongInt; stdcall; + // . + function L502_GetAdcCoef(hnd: t_l502_hnd; range: LongWord; out k, offs: Double): LongInt; stdcall; + + + {----------------------- - ------------------} + // . + function L502_AsyncOutDac(hnd: t_l502_hnd; ch: LongWord; data: Double; flags: LongWord): LongInt; stdcall; + // . + function L502_AsyncOutDig(hnd: t_l502_hnd; val, msk: LongWord): LongInt; stdcall; + // . + function L502_AsyncInDig(hnd: t_l502_hnd; out din: LongWord): LongInt; stdcall; + // . + function L502_AsyncGetAdcFrame(hnd: t_l502_hnd; flags: LongWord; tout: LongWord; out data: array of Double): LongInt; stdcall; + + + {-------------- - ----} + // /. + function L502_StreamsEnable(hnd: t_l502_hnd; streams: LongWord): LongInt; stdcall; + // /. + function L502_StreamsDisable(hnd: t_l502_hnd; streams: LongWord): LongInt; stdcall; + // /. + function L502_StreamsStart(hnd: t_l502_hnd): LongInt; stdcall; + // /. + function L502_StreamsStop(hnd: t_l502_hnd): LongInt; stdcall; + // , + function L502_IsRunning(hnd: t_l502_hnd): LongInt; stdcall; + + + // . + function L502_Recv(hnd: t_l502_hnd; out buf : array of LongWord; size: LongWord; tout : LongWord): LongInt; stdcall; + // . + function L502_Send(hnd: t_l502_hnd; const buf : array of LongWord; size: LongWord; tout: LongWord): LongInt; stdcall; + // . + function L502_ProcessAdcData(hnd: t_l502_hnd; const src: array of LongWord; + out dest: array of Double; var size : LongWord; + flags : LongWord): LongInt; stdcall; + // . + function L502_ProcessData(hnd: t_l502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord):LongInt; stdcall; + // . + function L502_ProcessDataWithUserExt(hnd: t_l502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord; + out usr_data: array of LongWord; var usr_data_size: LongWord):LongInt; stdcall; + // . + function L502_PrepareData(hnd: t_l502_hnd; const dac1, dac2: array of Double; + const digout: array of LongWord; size, flags : LongWord; + out out_buf: array of LongWord):LongInt; stdcall; + + // . + function L502_GetRecvReadyCount(hnd: t_l502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; + // . + function L502_GetSendReadyCount(hnd: t_l502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; + // . + function L502_GetNextExpectedLchNum(hnd: t_l502_hnd; out lch: LongWord):LongInt; stdcall; + // + function L502_PreloadStart(hnd: t_l502_hnd): LongInt; stdcall; + + // + function L502_OutCycleLoadStart(hnd: t_l502_hnd; size: LongWord):LongInt; stdcall; + // + function L502_OutCycleSetup(hnd: t_l502_hnd; flags: LongWord):LongInt; stdcall; + // + function L502_OutCycleStop(hnd: t_l502_hnd; flags: LongWord):LongInt; stdcall; + + // . + function L502_SetDmaBufSize(hnd: t_l502_hnd; dma_ch, size: LongWord): LongInt; stdcall; + // DMA. + function L502_SetDmaIrqStep(hnd: t_l502_hnd; dma_ch, step: LongWord): LongInt; stdcall; + + {------------ -------------------} + function L502_BfCheckFirmwareIsLoaded(hnd: t_l502_hnd; out version: LongWord): LongInt; stdcall; + /// BlackFin. + function L502_BfLoadFirmware(hnd: t_l502_hnd; filename: string): LongInt; stdcall; + /// . + function L502_BfMemRead(hnd: t_l502_hnd; addr : LongWord; out regs: array of LongWord; + size: LongWord): LongInt; stdcall; + /// . + function L502_BfMemWrite(hnd: t_l502_hnd; addr : LongWord; + const regs: array of LongWord; size: LongWord): LongInt; stdcall; + /// . + function L502_BfExecCmd(hnd: t_l502_hnd; cmd_code : Word; par : LongWord; + const snd_data : array of LongWord; snd_size : LongWord; + out rcv_data : array of LongWord; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + + {------------------- Flash- -------------} + /// Flash- . + function L502_FlashRead(hnd: t_l502_hnd; addr: LongWord; + out data: array of Byte; size: LongWord): LongInt; stdcall; + /// Flash- . + function L502_FlashWrite(hnd: t_l502_hnd; addr: LongWord; + const data: array of Byte; size: LongWord): LongInt; stdcall; + /// Flash-. + function L502_FlashErase(hnd: t_l502_hnd; addr: LongWord; size: LongWord): LongInt; stdcall; + /// Flash-. + function L502_FlashWriteEnable(hnd: LongWord): LongInt; stdcall; + /// Flash-. + function L502_FlashWriteDisable(hnd: t_l502_hnd): LongInt; stdcall; + + {----------------- ------------------} + // . + function L502_GetDllVersion() : LongWord; stdcall; + // + function L502_GetDriverVersion(hnd: t_l502_hnd; out ver: LongWord): LongInt; stdcall; + // + function L502_GetErrorString(err: LongInt) : string; stdcall; + // . + function L502_LedBlink(hnd: t_l502_hnd): LongInt; stdcall; + // . + function L502_SetDigInPullup(hnd: t_l502_hnd; pullups : LongWord): LongInt; stdcall; + + + + + + + + + +implementation + function L502_Create() : t_l502_hnd; stdcall; external 'l502api.dll'; + function L502_Free(hnd: t_l502_hnd) : LongInt; stdcall; external 'l502api.dll'; + function _get_serials( ser_arr: p_x502_serial_array; size:LongWord; + flags:LongWord; out devcnt: LongWord) : LongInt; + stdcall; external 'l502api.dll' name 'L502_GetSerialList'; + function _get_dev_records_list(out list; size:LongWord; + flags : LongWord; out devcnt: LongWord) : LongInt; + stdcall; external 'l502api.dll' name 'L502_GetDevRecordsList'; + + function _open(hnd: t_l502_hnd; serial: PAnsiChar) : LongInt; stdcall; external 'l502api.dll' name 'L502_Open'; + function L502_Close(hnd : t_l502_hnd) : LongInt; stdcall; external 'l502api.dll'; + function L502_GetDevInfo(hnd : t_l502_hnd; out info : t_l502_info) : LongInt; stdcall; external 'l502api.dll'; + + function L502_Configure(hnd: t_l502_hnd; flags: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetLChannel(hnd: t_l502_hnd; lch, phy_ch, mode, range, avg: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetLChannelCount(hnd: t_l502_hnd; lch_cnt : LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_GetLChannelCount(hnd: t_l502_hnd; out lch_cnt: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetAdcFreqDivider(hnd: t_l502_hnd; adc_freq_div : LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetAdcInterframeDelay(hnd: t_l502_hnd; delay : LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetDinFreqDivider(hnd: t_l502_hnd; din_freq_div: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetAdcFreq(hnd: t_l502_hnd; var f_acq, f_frame: Double): LongInt; stdcall; external 'l502api.dll'; + function L502_SetDinFreq(hnd: t_l502_hnd; var f_din: Double): LongInt; stdcall; external 'l502api.dll'; + function L502_GetAdcFreq(hnd: t_l502_hnd; out f_acq, f_frame: Double): LongInt; stdcall; external 'l502api.dll'; + function L502_SetRefFreq(hnd: t_l502_hnd; freq: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetSyncMode(hnd: t_l502_hnd; sync_mode: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetSyncStartMode(hnd: t_l502_hnd; sync_start_mode: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetMode(hnd: t_l502_hnd; mode: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_GetMode(hnd: t_l502_hnd; out mode: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetAdcCoef(hnd: t_l502_hnd; range: LongWord; k, offs: Double): LongInt; stdcall; external 'l502api.dll'; + function L502_GetAdcCoef(hnd: t_l502_hnd; range: LongWord; out k, offs: Double): LongInt; stdcall; external 'l502api.dll'; + + function L502_AsyncOutDac(hnd: t_l502_hnd; ch: LongWord; data: Double; flags: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_AsyncOutDig(hnd: t_l502_hnd; val, msk: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_AsyncInDig(hnd: t_l502_hnd; out din: LongWord): LongInt; stdcall; external 'l502api.dll'; + function _get_adc_frame(hnd: t_l502_hnd; flags: LongWord; tout: LongWord; out data): LongInt; stdcall; external 'l502api.dll' name 'L502_AsyncGetAdcFrame'; + + function L502_StreamsEnable(hnd: t_l502_hnd; streams: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_StreamsDisable(hnd: t_l502_hnd; streams: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_StreamsStart(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + function L502_IsRunning(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + function L502_StreamsStop(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + function _recv(hnd: t_l502_hnd; out buf; size: LongWord; tout : LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_Recv'; + function _send(hnd: t_l502_hnd; const buf; size: LongWord; tout : LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_Send'; + function _process_adc_data(hnd: t_l502_hnd; const src; out dest; var size : LongWord; + flags : LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_ProcessAdcData'; + function _process_data(hnd: t_l502_hnd; const src; size: LongWord; + flags : LongWord; out adc_data; var adc_data_size : LongWord; + out din_data; var din_data_size: LongWord):LongInt; stdcall; external 'l502api.dll' name 'L502_ProcessData'; + + function _process_data_usr(hnd: t_l502_hnd; const src; size: LongWord; + flags : LongWord; out adc_data; var adc_data_size : LongWord; + out din_data; var din_data_size: LongWord; + out usr_data; var usr_data_size: LongWord):LongInt; stdcall; external 'l502api.dll' name 'L502_ProcessDataWithUserExt'; + function _prepare_data(hnd: t_l502_hnd; const dac1, dac2; const digout; size, flags : LongWord; + out out_buf):LongInt; stdcall; external 'l502api.dll' name 'L502_PrepareData'; + function L502_GetRecvReadyCount(hnd: t_l502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_GetSendReadyCount(hnd: t_l502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_GetNextExpectedLchNum(hnd: t_l502_hnd; out lch: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_PreloadStart(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + function L502_OutCycleLoadStart(hnd: t_l502_hnd; size: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_OutCycleSetup(hnd: t_l502_hnd; flags: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_OutCycleStop(hnd: t_l502_hnd; flags: LongWord):LongInt; stdcall; external 'l502api.dll'; + function L502_SetDmaBufSize(hnd: t_l502_hnd; dma_ch, size: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_SetDmaIrqStep(hnd: t_l502_hnd; dma_ch, step: LongWord): LongInt; stdcall; external 'l502api.dll'; + + function L502_BfCheckFirmwareIsLoaded(hnd: t_l502_hnd; out version: LongWord): LongInt; stdcall; external 'l502api.dll'; + function _bf_load_firm(hnd: t_l502_hnd; filename: PAnsiChar): LongInt; stdcall; external 'l502api.dll' name 'L502_BfLoadFirmware'; + function _bf_mem_read(hnd: t_l502_hnd; addr : LongWord; out regs; size: LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_BfMemRead'; + function _bf_mem_write(hnd: t_l502_hnd; addr : LongWord; const regs; size: LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_BfMemWrite'; + function _bf_exec_cmd(hnd: t_l502_hnd; cmd_code : Word; par : LongWord; + const snd_data; snd_size : LongWord; out rcv_data; rcv_size : LongWord; + tout: LongWord; out recved_size: LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_BfExecCmd'; + + function _flash_read(hnd: t_l502_hnd; addr: LongWord; out data; size: LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_FlashRead'; + function _flash_write(hnd: t_l502_hnd; addr: LongWord; const data; size: LongWord): LongInt; stdcall; external 'l502api.dll' name 'L502_FlashWrite'; + function L502_FlashErase(hnd: t_l502_hnd; addr: LongWord; size: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_FlashWriteEnable(hnd: LongWord): LongInt; stdcall; external 'l502api.dll'; + function L502_FlashWriteDisable(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + + function L502_GetDllVersion() : LongWord; stdcall; external 'l502api.dll'; + function L502_GetDriverVersion(hnd: t_l502_hnd; out ver: LongWord): LongInt; stdcall; external 'l502api.dll'; + function _get_err_str(err : LongInt) : PAnsiChar; stdcall; external 'l502api.dll' name 'L502_GetErrorString'; + function L502_LedBlink(hnd: t_l502_hnd): LongInt; stdcall; external 'l502api.dll'; + function L502_SetDigInPullup(hnd: t_l502_hnd; pullups : LongWord): LongInt; stdcall; external 'l502api.dll'; + + + { + function L502_GetSerialList(out serials: t_l502_serial_list; flags: LongWord) : LongInt; overload; + var + ser_arr : p_l502_serial_array; + devcnt: LongWord; + res, i : LongInt; + begin + // + res := _get_serials(nil, 0, flags, devcnt); + if (res >= 0) and (devcnt>0) then + begin + // devcnt + ser_arr:=GetMemory(devcnt*L502_SERIAL_SIZE); + // + res:= _get_serials(ser_arr, devcnt, flags, PLongWord(nil)^); + if (res > 0) then + begin + // + SetLength(serials, res); + // + for i:=0 to res-1 do + serials[i] := string(ser_arr[i]); + end; + // , + FreeMemory(ser_arr); + end; + L502_GetSerialList:= res; + end; + } + + function L502_GetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; + var + ser_arr : p_x502_serial_array; + res, i : LongInt; + begin + if (Length(serials) > 0) then + begin + ser_arr:=GetMemory(Length(serials)*X502_SERIAL_SIZE); + // + res := _get_serials(ser_arr, Length(serials), flags, devcnt); + if res >= 0 then + begin + // + for i:=0 to res-1 do + serials[i] := string(ser_arr[i]); + end; + // , + FreeMemory(ser_arr); + end + else + begin + res:= _get_serials(nil, 0, flags, devcnt); + end; + L502_GetSerialList:=res; + end; + + function L502_GetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; + begin + L502_GetSerialList:= L502_GetSerialList(serials, flags, PCardinal(nil)^); + end; + + function L502_GetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; + begin + if (Length(list) > 0) then + begin + L502_GetDevRecordsList := _get_dev_records_list(list, Length(list), flags, devcnt); + end + else + begin + L502_GetDevRecordsList:= _get_dev_records_list(PCardinal(nil)^, 0, flags, devcnt); + end; + end; + function L502_GetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; + begin + L502_GetDevRecordsList:= L502_GetDevRecordsList(list, flags, PCardinal(nil)^); + end; + + function L502_Open(hnd: t_l502_hnd; serial: string) : LongInt; + begin + L502_Open:=_open(hnd, PAnsiChar(AnsiString(serial))); + end; + + function L502_GetErrorString(err: LongInt) : string; + begin + L502_GetErrorString:= string(_get_err_str(err)); + end; + + function L502_AsyncGetAdcFrame(hnd: t_l502_hnd; flags: LongWord; tout: LongWord; out data: array of Double): LongInt; stdcall; + var err: LongInt; + lch_cnt: LongWord; + begin + err:= L502_GetLChannelCount(hnd, lch_cnt); + if err=L502_ERR_OK then + begin + if LongWord(Length(data)) < lch_cnt then + err:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + err:=_get_adc_frame(hnd,flags,tout,data); + end; + L502_AsyncGetAdcFrame:=err; + end; + + function L502_Recv(hnd: t_l502_hnd; out buf : array of LongWord; size: LongWord; tout : LongWord): LongInt; stdcall; + begin + if LongWord(Length(buf)) < size then + L502_Recv:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_Recv:=_recv(hnd, buf, size, tout); + end; + + function L502_Send(hnd: t_l502_hnd; const buf : array of LongWord; size: LongWord; tout: LongWord): LongInt; stdcall; + begin + if LongWord(Length(buf)) < size then + L502_Send:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_Send:=_send(hnd,buf,size,tout); + end; + + + function L502_ProcessAdcData(hnd: t_l502_hnd; const src: array of LongWord; + out dest: array of Double; var size : LongWord; + flags : LongWord): LongInt; stdcall; + begin + if (LongWord(Length(src)) < size) or (LongWord(Length(dest)) < size) then + L502_ProcessAdcData:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_ProcessAdcData:=_process_adc_data(hnd, src, dest, size, flags); + end; + + function L502_ProcessData(hnd: t_l502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord):LongInt; stdcall; + begin + if (LongWord(Length(adc_data)) < adc_data_size) or (LongWord(Length(din_data)) < din_data_size) + or (LongWord(Length(src)) < size) then + L502_ProcessData:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_ProcessData:=_process_data(hnd, src, size, flags, adc_data, adc_data_size, din_data, din_data_size); + end; + + function L502_ProcessDataWithUserExt(hnd: t_l502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord; + out usr_data: array of LongWord; var usr_data_size: LongWord):LongInt; stdcall; + begin + if (LongWord(Length(adc_data)) < adc_data_size) or (LongWord(Length(din_data)) < din_data_size) + or (LongWord(Length(src)) < size) or (LongWord(Length(usr_data)) < usr_data_size) then + L502_ProcessDataWithUserExt:=L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_ProcessDataWithUserExt:=_process_data_usr(hnd, src,size,flags,adc_data, + adc_data_size, din_data, din_data_size, usr_data, usr_data_size); + end; + + function L502_PrepareData(hnd: t_l502_hnd; const dac1, dac2: array of Double; + const digout: array of LongWord; size, flags : LongWord; + out out_buf: array of LongWord):LongInt; stdcall; + begin + L502_PrepareData:=_prepare_data(hnd, dac1, dac2, digout, size, flags, out_buf); + end; + + function L502_BfLoadFirmware(hnd: t_l502_hnd; filename: string): LongInt; stdcall; + begin + L502_BfLoadFirmware:=_bf_load_firm(hnd, PAnsiChar(AnsiString(filename))); + end; + + function L502_BfMemRead(hnd: t_l502_hnd; addr : LongWord; out regs: array of LongWord; + size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(regs)) < size) then + L502_BfMemRead := L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_BfMemRead:=_bf_mem_read(hnd, addr, regs, size); + end; + + function L502_BfMemWrite(hnd: t_l502_hnd; addr : LongWord; + const regs: array of LongWord; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(regs)) < size) then + L502_BfMemWrite := L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_BfMemWrite:=_bf_mem_write(hnd, addr, regs, size); + end; + + function L502_BfExecCmd(hnd: t_l502_hnd; cmd_code : Word; par : LongWord; + const snd_data : array of LongWord; snd_size : LongWord; + out rcv_data : array of LongWord; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(snd_data)) < snd_size) or + (LongWord(Length(rcv_data)) < rcv_size) then + L502_BfExecCmd := L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_BfExecCmd:=_bf_exec_cmd(hnd, cmd_code, par, snd_data, snd_size, + rcv_data, rcv_size, tout, recvd_size); + end; + + function L502_FlashRead(hnd: t_l502_hnd; addr: LongWord; + out data: array of Byte; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(data)) < size) then + L502_FlashRead := L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_FlashRead:=_bf_mem_write(hnd, addr, data, size); + end; + /// Flash- . + function L502_FlashWrite(hnd: t_l502_hnd; addr: LongWord; + const data: array of Byte; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(data)) < size) then + L502_FlashWrite := L502_ERR_INSUFFICIENT_ARRAY_SIZE + else + L502_FlashWrite:=_bf_mem_write(hnd, addr, data, size); + end; +end. + diff --git a/SDK/pas/x502api.pas b/SDK/pas/x502api.pas new file mode 100644 index 0000000..94fa4d8 --- /dev/null +++ b/SDK/pas/x502api.pas @@ -0,0 +1,915 @@ +unit x502api; +interface +uses Windows, SysUtils; + +const + // + X502_LTABLE_MAX_CH_CNT = 256; + // + X502_ADC_RANGE_CNT = 6; + + // + X502_ADC_COMM_CH_CNT = 32; + // + X502_ADC_DIFF_CH_CNT = 16; + + // + X502_LCH_AVG_SIZE_MAX = 128; + // + X502_ADC_FREQ_DIV_MAX = (1024*1024); + // + X502_DIN_FREQ_DIV_MAX = (1024*1024); + + // + X502_OUT_FREQ_DIV_MIN = 2; + // + X502_OUT_FREQ_DIV_MAX = 1024; + // ( + // L502 0.5) + X502_OUT_FREQ_DIV_DEFAULT = 2; + + // + X502_ADC_INTERFRAME_DELAY_MAX = $1FFFFF; + // BlackFin + X502_BF_CMD_DEFAULT_TOUT = 500; + + // , + X502_ADC_SCALE_CODE_MAX = 6000000; + // , + X502_DAC_SCALE_CODE_MAX = 30000; + + // + X502_DEVNAME_SIZE = 32; + // + X502_SERIAL_SIZE = 32; + + // + X502_LOCATION_STR_SIZE = 64; + // MAC- Ethernet + X502_MAC_ADDR_SIZE = 6; + // + X502_INSTANCE_NAME_SIZE = 64; + // + X502_PASSWORD_SIZE = 32; + + // + X502_EXT_REF_FREQ_MAX = 1500000; + + + // Flash- + X502_FLASH_USER_SIZE = $100000; + // BlackFin + X502_BF_REQ_TOUT = 500; + // + X502_DAC_RANGE = 5; + // + X502_DAC_CH_CNT = 2; + // + X502_DOUT_LINES_CNT = 16; + + // , , + X502_STREAM_IN_MSG_OVERFLOW = $01010000; + + X502_DEVREC_SIGN = $4C524543; + + { ----------------- ---------------------------} + // + X502_ERR_OK = 0; + // + X502_ERR_INVALID_HANDLE = -1; + // + X502_ERR_MEMORY_ALLOC = -2; + // + X502_ERR_ALREADY_OPENED = -3; + // + X502_ERR_DEVICE_NOT_FOUND = -4; + // ( - , ) + X502_ERR_DEVICE_ACCESS_DENIED = -5; + // + X502_ERR_DEVICE_OPEN = -6; + // + X502_ERR_INVALID_POINTER = -7; + // + X502_ERR_STREAM_IS_RUNNING = -8; + // + X502_ERR_RECV = -9; + // + X502_ERR_SEND = -10; + // + X502_ERR_STREAM_OVERFLOW = -11; + // + X502_ERR_UNSUP_STREAM_MSG = -12; + // + X502_ERR_MUTEX_CREATE = -13; + // + X502_ERR_MUTEX_INVALID_HANDLE = -14; + // + X502_ERR_MUTEX_LOCK_TOUT = -15; + // + X502_ERR_MUTEX_RELEASE = -16; + // + X502_ERR_INSUFFICIENT_SYSTEM_RESOURCES= -17; + // + X502_ERR_NOT_IMPLEMENTED = -18; + // + X502_ERR_INSUFFICIENT_ARRAY_SIZE = -19; + // FPGA + X502_ERR_FPGA_REG_READ = -20; + // FPGA + X502_ERR_FPGA_REG_WRITE = -21; + // + X502_ERR_STREAM_IS_NOT_RUNNING = -22; + // + X502_ERR_INTERFACE_RELEASE = -23; + // + X502_ERR_THREAD_START = -24; + // + X502_ERR_THREAD_STOP = -25; + // + X502_ERR_DEVICE_DISCONNECTED = -26; + // + X502_ERR_IOCTL_INVALID_RESP_SIZE = -27; + // + X502_ERR_INVALID_DEVICE = -28; + // + X502_ERR_INVALID_DEVICE_RECORD = -29; + // + X502_ERR_INVALID_CONFIG_HANDLE = -30; + // + X502_ERR_DEVICE_NOT_OPENED = -31; + // + X502_ERR_INVALID_OP_FOR_IFACE = -32; + // + X502_ERR_FPGA_NOT_LOADED = -33; + // USB- + X502_ERR_INVALID_USB_CONFIGURATION = -34; + // + X502_ERR_INVALID_LTABLE_SIZE = -102; + // + X502_ERR_INVALID_LCH_NUMBER = -103; + // + X502_ERR_INVALID_LCH_RANGE = -104; + // + X502_ERR_INVALID_LCH_MODE = -105; + // + X502_ERR_INVALID_LCH_PHY_NUMBER = -106; + // + X502_ERR_INVALID_LCH_AVG_SIZE = -107; + // + X502_ERR_INVALID_ADC_FREQ_DIV = -108; + // + X502_ERR_INVALID_DIN_FREQ_DIV = -109; + // L502 + X502_ERR_INVALID_MODE = -110; + // + X502_ERR_INVALID_DAC_CHANNEL = -111; + // + X502_ERR_INVALID_REF_FREQ = -112; + // + X502_ERR_INVALID_INTERFRAME_DELAY = -113; + // + X502_ERR_INVALID_SYNC_MODE = -114; + // + X502_ERR_INVALID_STREAM_CH = -115; + // + X502_ERR_INVALID_OUT_FREQ_DIV = -116; + // + X502_ERR_REF_FREQ_NOT_LOCKED = -131; + // + X502_ERR_IOCTL_FAILD = -132; + // + X502_ERR_IOCTL_TIMEOUT = -133; + // + X502_ERR_GET_INFO = -134; + // + X502_ERR_DIG_IN_NOT_RDY = -135; + // + X502_ERR_RECV_INSUFFICIENT_WORDS = -136; + // , , + X502_ERR_DAC_NOT_PRESENT = -137; + // + X502_ERR_PROC_INVALID_CH_NUM = -140; + // + X502_ERR_PROC_INVALID_CH_RANGE = -141; + // Flash- + X502_ERR_FLASH_INVALID_ADDR = -142; + // Flash- + X502_ERR_FLASH_INVALID_SIZE = -143; + // Flash- + X502_ERR_FLASH_WRITE_TOUT = -144; + // Flash- + X502_ERR_FLASH_ERASE_TOUT = -145; + // Flash- 4 + X502_ERR_FLASH_SECTOR_BOUNDARY = -146; + // + X502_ERR_SOCKET_OPEN = -147; + // + X502_ERR_CONNECTION_TOUT = -148; + // + X502_ERR_CONNECTION_CLOSED_BY_DEV = -149; + // + X502_ERR_SOCKET_SET_BUF_SIZE = -150; + // + X502_ERR_NO_DATA_CONNECTION = -151; + // + X502_ERR_NO_STREAM_END_MSG = -152; + // + X502_ERR_CONNECTION_RESET = -153; + // + X502_ERR_HOST_UNREACHABLE = -154; + // TCP- + X502_ERR_TCP_CONNECTION_ERROR = -155; + // BlackFin + X502_ERR_LDR_FILE_OPEN = -180; + // BlackFin + X502_ERR_LDR_FILE_READ = -181; + // BlackFin + X502_ERR_LDR_FILE_FORMAT = -182; + // LDR-, BlackFin HDMA + X502_ERR_LDR_FILE_UNSUP_FEATURE = -183; + // BlackFin + X502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184; + // / BlackFin + X502_ERR_BF_REQ_TIMEOUT = -185; + // BlackFin + X502_ERR_BF_CMD_IN_PROGRESS = -186; + // BlackFin + X502_ERR_BF_CMD_TIMEOUT = -187; + // BlackFin + X502_ERR_BF_CMD_RETURN_INSUF_DATA = -188; + // BlackFin + X502_ERR_BF_LOAD_RDY_TOUT = -189; + // + // + X502_ERR_BF_NOT_PRESENT = -190; + // BlackFin HDMA + X502_ERR_BF_INVALID_ADDR = -191; + // , BlackFin + X502_ERR_BF_INVALID_CMD_DATA_SIZE = -192; + + {--------------- ------------------} + X502_IFACE_UNKNOWN = 0; // + X502_IFACE_USB = 1; // USB + X502_IFACE_ETH = 2; // Ethernet TCP/IP + X502_IFACE_PCI = 3; // PCI/PCIe + + {-------- , ------} + // , , + // + X502_GETDEVS_FLAGS_ONLY_NOT_OPENED = 1; + + + + {-------- . ---------------} + // ( ) + X502_DIGOUT_WORD_DIS_H = $00020000; + // + X502_DIGOUT_WORD_DIS_L = $00010000; + + + {-------- -------------------} + X502_REF_FREQ_2000KHZ = 2000000; // 2 + X502_REF_FREQ_1500KHZ = 1500000; // 1.5 + + {-------- ----------------------} + X502_ADC_RANGE_10 = 0; // +/-10V + X502_ADC_RANGE_5 = 1; // +/-5V + X502_ADC_RANGE_2 = 2; // +/-2V + X502_ADC_RANGE_1 = 3; // +/-1V + X502_ADC_RANGE_05 = 4; // +/-0.5V + X502_ADC_RANGE_02 = 5; // +/-0.2V + + + {-------- ------------------} + X502_LCH_MODE_COMM = 0; // + X502_LCH_MODE_DIFF = 1; // + X502_LCH_MODE_ZERO = 2; // + + + {-------- ------------------------------------} + X502_SYNC_INTERNAL = 0; // + X502_SYNC_EXTERNAL_MASTER = 1; // + X502_SYNC_DI_SYN1_RISE = 2; // DI_SYN1 + X502_SYNC_DI_SYN1_FALL = 3; // DI_SYN1 + X502_SYNC_DI_SYN2_RISE = 6; // DI_SYN2 + X502_SYNC_DI_SYN2_FALL = 7; // DI_SYN2 + + {-------- , -------------------} + X502_PROC_FLAGS_VOLT = $00000001; // , + // + X502_PROC_FLAGS_DONT_CHECK_CH = $00010000; // , + + {-------- -----------------} + X502_STREAM_ADC = $01; // + X502_STREAM_DIN = $02; // + X502_STREAM_DAC1 = $10; // + X502_STREAM_DAC2 = $20; // + X502_STREAM_DOUT = $40; // + // , + X502_STREAM_ALL_IN = X502_STREAM_ADC or X502_STREAM_DIN; + // , + X502_STREAM_ALL_OUT = X502_STREAM_DAC1 or X502_STREAM_DAC2 or X502_STREAM_DOUT; + + + {--- , -----} + X502_STREAM_OUT_WORD_TYPE_DOUT = $0; // + X502_STREAM_OUT_WORD_TYPE_DAC1 = $40000000; // 1- + X502_STREAM_OUT_WORD_TYPE_DAC2 = $80000000; // 2- + + {------------------ L502 ------------------------------} + X502_MODE_FPGA = 0; // + // BlackFin + X502_MODE_DSP = 1; // + // , + // + X502_MODE_DEBUG = 2; // + + {------------------- -----------------------------------} + X502_DAC_CH1 = 0; // + X502_DAC_CH2 = 1; // + + {----------- , -----------------} + // , + // . , , + // + X502_DAC_FLAGS_VOLT = $0001; + // , + // . + X502_DAC_FLAGS_CALIBR = $0002; + + {---------- --------------------} + X502_STREAM_CH_IN = 0; // + X502_STREAM_CH_OUT = 1; // + + {--- , ----} + X502_PULLUPS_DI_H = $01; // ( L502) + X502_PULLUPS_DI_L = $02; // ( L502) + X502_PULLUPS_DI_SYN1 = $04; // SYN1 + X502_PULLUPS_DI_SYN2 = $08; // SYN2 + X502_PULLDOWN_CONV_IN = $10; // 0 + // CONV_IN ( E502) + X502_PULLDOWN_START_IN = $20; // 0 + // START_IN ( E502) + + + + {--------------- , ---------------} + // + X502_DEVFLAGS_DAC_PRESENT = $00000001; + // + X502_DEVFLAGS_GAL_PRESENT = $00000002; + // BlackFin + X502_DEVFLAGS_BF_PRESENT = $00000004; + + // , USB + X502_DEVFLAGS_IFACE_SUPPORT_USB = $00000100; + // , Ethernet + X502_DEVFLAGS_IFACE_SUPPORT_ETH = $00000200; + // , PCI/PCI-Express + X502_DEVFLAGS_IFACE_SUPPORT_PCI = $00000400; + + // , + X502_DEVFLAGS_INDUSTRIAL = $00008000; + + // , Flash- + X502_DEVFLAGS_FLASH_DATA_VALID = $00010000; + // , Flash- + X502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = $00020000; + // , Flash- + X502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = $00040000; + + // , + X502_DEVFLAGS_FPGA_LOADED = $00800000; + // , ( t_x502_devrec) + X502_DEVFLAGS_DEVREC_OPENED = $01000000; + + + { } + // + X502_LOCATION_TYPE_NONE = 0; + // + X502_LOCATION_TYPE_ADDR = 1; + // + X502_LOCATION_TYPE_INSTANCE_NAME = 2; + + {---------------- ----------------------} + // , + // . + X502_OUT_CYCLE_FLAGS_FORCE = $01; + + // , + // ( X502_OutCycleSetup()) + // ( X502_OutCycleStop()) + X502_OUT_CYCLE_FLAGS_WAIT_DONE = $02; + + + { ----- , + , .. -------------} + // , #X502_OUT_FREQ_DIV_DEFAULT + X502_FEATURE_OUT_FREQ_DIV = 1; + // X502_OutGetStatusFlags() + X502_FEATURE_OUT_STATUS_FLAGS = 2; + + { --------------- ------------------} + // , + X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = $01; + // , + // - + // X502_OutGetStatusFlags() ( , ) + X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = $02; + +type + st_x502_devrec_inptr = record + end; + t_x502_devrec_inptr_hnd = ^st_x502_devrec_inptr; + + // , , + t_x502_devrec = record + sign : LongWord; { . + ( - ), + #X502_DEVREC_SIGN) } + devname : array [0..X502_DEVNAME_SIZE-1] of AnsiChar; // + serial : array [0..X502_SERIAL_SIZE-1] of AnsiChar; // + location: array [0..X502_LOCATION_STR_SIZE-1] of AnsiChar; // ( ) + flags : LongWord; // #t_x502_dev_flags, + iface : Byte; // , + location_type : Byte; // , location + res : array [0..122-1] of Byte; // + internal : t_x502_devrec_inptr_hnd; { + + . } + end; + + + // - + t_x502_hnd = ^st_x502; + st_x502 = record + end; + + { } + t_x502_cbr_coef = record + offs: Double; // + k : Double; // + end; + + + { . } + t_x502_cbr = record + // + adc: array[0..X502_ADC_RANGE_CNT-1] of t_x502_cbr_coef; + res1: array[0..63] of LongWord; + // + dac: array[0..X502_DAC_CH_CNT-1] of t_x502_cbr_coef; + res2: array[0..19] of LongWord; + end; + + { } + t_x502_info = record + name: array[0..X502_DEVNAME_SIZE-1] of AnsiChar; // ("L502") + serial: array[0..X502_SERIAL_SIZE-1] of AnsiChar; // + devflags: LongWord; // + fpga_ver : Word; // ( - , - ) + plda_ver : Byte; // , + board_rev: Byte; // + mcu_firmware_ver : LongWord; // Cortex-M4. E502 + factory_mac : array[0..X502_MAC_ADDR_SIZE-1] of byte; { MAC- --- + Ethernet- } + res : array[0..110-1] of Byte; // + cbr : t_x502_cbr; // ( Flash-) + end; + + + type t_x502_serial_array = array[0..0] of array[0..X502_SERIAL_SIZE-1] of AnsiChar; + type p_x502_serial_array = ^t_x502_serial_array; + type t_x502_devrec_array = array[0..0] of t_x502_devrec; + type p_x502_devrec_array = ^t_x502_devrec_array; + + + function X502_Create(): t_x502_hnd; stdcall; + function X502_Free(hnd: t_x502_hnd): LongInt; stdcall; + + function X502_OpenByDevRecord(hnd: t_x502_hnd; var devrec : t_x502_devrec) : LongInt; stdcall; + function X502_FreeDevRecordList(list : array of t_x502_devrec; size : LongWord) : LongInt; stdcall; overload; + function X502_FreeDevRecordList(var rec : t_x502_devrec) : LongInt; stdcall; overload; + + function X502_IsOpened(hnd: t_x502_hnd): LongInt; stdcall; + // + function X502_Close(hnd: t_x502_hnd): LongInt; stdcall; + // + function X502_GetDevInfo(hnd: t_x502_hnd; out info: t_x502_info) : LongInt; stdcall; + + // + function X502_Configure(hnd: t_x502_hnd; flags: LongWord): LongInt; stdcall; + // + function X502_SetLChannel(hnd: t_x502_hnd; lch, phy_ch, mode, range, avg: LongWord): LongInt; stdcall; + // + function X502_SetLChannelCount(hnd: t_x502_hnd; lch_cnt : LongWord): LongInt; stdcall; + // + function X502_GetLChannelCount(hnd: t_x502_hnd; out lch_cnt: LongWord): LongInt; stdcall; + // + function X502_SetAdcFreqDivider(hnd: t_x502_hnd; adc_freq_div : LongWord): LongInt; stdcall; + // + function X502_SetAdcInterframeDelay(hnd: t_x502_hnd; delay : LongWord): LongInt; stdcall; + // + function X502_SetDinFreqDivider(hnd: t_x502_hnd; din_freq_div: LongWord): LongInt; stdcall; + // + function X502_SetOutFreqDivider(hnd: t_x502_hnd; out_freq_div : LongWord): LongInt; stdcall; + // + function X502_SetAdcFreq(hnd: t_x502_hnd; var f_acq, f_frame: Double): LongInt; stdcall; + // + function X502_SetDinFreq(hnd: t_x502_hnd; var f_din: Double): LongInt; stdcall; + // . + function X502_SetOutFreq(hnd: t_x502_hnd; var f_dout: Double): LongInt; stdcall; + // + function X502_GetAdcFreq(hnd: t_x502_hnd; out f_acq, f_frame: Double): LongInt; stdcall; + // + function X502_SetRefFreq(hnd: t_x502_hnd; freq: LongWord): LongInt; stdcall; + // + function X502_SetExtRefFreqValue(hnd: t_x502_hnd; freq : Double): LongInt; stdcall; + // + function X502_GetRefFreqValue(hnd: t_x502_hnd; out freq : Double): LongInt; stdcall; + + // . + function X502_SetSyncMode(hnd: t_x502_hnd; sync_mode: LongWord): LongInt; stdcall; + // . + function X502_SetSyncStartMode(hnd: t_x502_hnd; sync_start_mode: LongWord): LongInt; stdcall; + // + function X502_SetMode(hnd: t_x502_hnd; mode: LongWord): LongInt; stdcall; + // . + function X502_GetMode(hnd: t_x502_hnd; out mode: LongWord): LongInt; stdcall; + // . + function X502_SetAdcCoef(hnd: t_x502_hnd; range: LongWord; k, offs: Double): LongInt; stdcall; + // . + function X502_GetAdcCoef(hnd: t_x502_hnd; range: LongWord; out k, offs: Double): LongInt; stdcall; + // . + function X502_SetDacCoef(hnd: t_x502_hnd; ch : LongWord; k, double: Double): LongInt; stdcall; + // . + function X502_GetDacCoef(hnd: t_x502_hnd; ch : LongWord; out k, double: Double): LongInt; stdcall; + + // + function X502_CalcAdcFreq(ref_freq: Double; lch_cnt: LongWord; var f_acq, f_frame: Double; out result_freq_div : LongWord; out result_frame_delay: LongWord): LongInt; stdcall; + // . + function X502_CalcDinFreq(ref_freq: Double; var f_din : Double; out result_freq_div : LongWord): LongInt; stdcall; + // + function X502_CalcOutFreq(ref_freq: Double; var f_dout : Double; out result_freq_div : LongWord): LongInt; stdcall; + {----------------------- - ------------------} + // . + function X502_AsyncOutDac(hnd: t_x502_hnd; ch: LongWord; data: Double; flags: LongWord): LongInt; stdcall; + // . + function X502_AsyncOutDig(hnd: t_x502_hnd; val, msk: LongWord): LongInt; stdcall; + // . + function X502_AsyncInDig(hnd: t_x502_hnd; out din: LongWord): LongInt; stdcall; + // . + function X502_AsyncGetAdcFrame(hnd: t_x502_hnd; flags: LongWord; tout: LongWord; out data: array of Double): LongInt; stdcall; + + + {-------------- - ----} + // /. + function X502_StreamsEnable(hnd: t_x502_hnd; streams: LongWord): LongInt; stdcall; + // /. + function X502_StreamsDisable(hnd: t_x502_hnd; streams: LongWord): LongInt; stdcall; + // , . + function X502_GetEnabledStreams(hnd: t_x502_hnd; out streams: LongWord): LongInt; stdcall; + // /. + function X502_StreamsStart(hnd: t_x502_hnd): LongInt; stdcall; + // /. + function X502_StreamsStop(hnd: t_x502_hnd): LongInt; stdcall; + // , + function X502_IsRunning(hnd: t_x502_hnd): LongInt; stdcall; + + + // . + function X502_Recv(hnd: t_x502_hnd; out buf : array of LongWord; size: LongWord; tout : LongWord): LongInt; stdcall; + // . + function X502_Send(hnd: t_x502_hnd; const buf : array of LongWord; size: LongWord; tout: LongWord): LongInt; stdcall; + // . + function X502_ProcessAdcData(hnd: t_x502_hnd; const src: array of LongWord; + out dest: array of Double; var size : LongWord; + flags : LongWord): LongInt; stdcall; + // . + function X502_ProcessData(hnd: t_x502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord):LongInt; stdcall; + // . + function X502_ProcessDataWithUserExt(hnd: t_x502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord; + out usr_data: array of LongWord; var usr_data_size: LongWord):LongInt; stdcall; + // . + function X502_PrepareData(hnd: t_x502_hnd; const dac1, dac2: array of Double; + const digout: array of LongWord; size, flags : LongWord; + out out_buf: array of LongWord):LongInt; stdcall; + + // . + function X502_GetRecvReadyCount(hnd: t_x502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; + // . + function X502_GetSendReadyCount(hnd: t_x502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; + // . + function X502_GetNextExpectedLchNum(hnd: t_x502_hnd; out lch: LongWord):LongInt; stdcall; + // + function X502_PreloadStart(hnd: t_x502_hnd): LongInt; stdcall; + + // + function X502_OutCycleLoadStart(hnd: t_x502_hnd; size: LongWord):LongInt; stdcall; + // + function X502_OutCycleSetup(hnd: t_x502_hnd; flags: LongWord):LongInt; stdcall; + // + function X502_OutCycleStop(hnd: t_x502_hnd; flags: LongWord):LongInt; stdcall; + // , + function X502_OutCycleCheckSetupDone(hnd: t_x502_hnd; out done : LongBool):LongInt; stdcall; + // + function X502_OutGetStatusFlags(hnd: t_x502_hnd; out status : LongWord): LongInt; stdcall; + + // . + function X502_SetStreamBufSize(hnd: t_x502_hnd; dma_ch, size: LongWord): LongInt; stdcall; + // . + function X502_SetStreamStep(hnd: t_x502_hnd; dma_ch, step: LongWord): LongInt; stdcall; + + {------------ -------------------} + + // BlackFin. + function X502_BfLoadFirmware(hnd: t_x502_hnd; filename: string): LongInt; stdcall; + // , BlackFIn + function X502_BfCheckFirmwareIsLoaded(hnd: t_x502_hnd; out version: LongWord): LongInt; stdcall; + /// . + function X502_BfMemRead(hnd: t_x502_hnd; addr : LongWord; out regs: array of LongWord; + size: LongWord): LongInt; stdcall; + /// . + function X502_BfMemWrite(hnd: t_x502_hnd; addr : LongWord; + const regs: array of LongWord; size: LongWord): LongInt; stdcall; + /// . + function X502_BfExecCmd(hnd: t_x502_hnd; cmd_code : Word; par : LongWord; + const snd_data : array of LongWord; snd_size : LongWord; + out rcv_data : array of LongWord; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + + {------------------- Flash- -------------} + /// Flash- . + function X502_FlashRead(hnd: t_x502_hnd; addr: LongWord; + out data: array of Byte; size: LongWord): LongInt; stdcall; + /// Flash- . + function X502_FlashWrite(hnd: t_x502_hnd; addr: LongWord; + const data: array of Byte; size: LongWord): LongInt; stdcall; + /// Flash-. + function X502_FlashErase(hnd: t_x502_hnd; addr: LongWord; size: LongWord): LongInt; stdcall; + /// Flash-. + function X502_FlashWriteEnable(hnd: t_x502_hnd): LongInt; stdcall; + /// Flash-. + function X502_FlashWriteDisable(hnd: t_x502_hnd): LongInt; stdcall; + + {----------------- ------------------} + // . + function X502_GetLibraryVersion() : LongWord; stdcall; + // + function X502_GetErrorString(err: LongInt) : string; stdcall; + // . + function X502_LedBlink(hnd: t_x502_hnd): LongInt; stdcall; + // . + function X502_SetDigInPullup(hnd: t_x502_hnd; pullups : LongWord): LongInt; stdcall; + // + function X502_CheckFeature(hnd: t_x502_hnd; feature : LongWord) : LongInt; stdcall; + + + + + + + + +implementation + function X502_Create() : t_x502_hnd; stdcall; external 'x502api.dll'; + function X502_Free(hnd: t_x502_hnd) : LongInt; stdcall; external 'x502api.dll'; + + function X502_OpenByDevRecord(hnd: t_x502_hnd; var devrec : t_x502_devrec) : LongInt; stdcall; external 'x502api.dll'; + function _free_dev_record_list(var list ; size : LongWord) : LongInt; stdcall; external 'x502api.dll' name 'X502_FreeDevRecordList'; + function X502_IsOpened(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_Close(hnd : t_x502_hnd) : LongInt; stdcall; external 'x502api.dll'; + function X502_GetDevInfo(hnd : t_x502_hnd; out info : t_x502_info) : LongInt; stdcall; external 'x502api.dll'; + + function X502_Configure(hnd: t_x502_hnd; flags: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetLChannel(hnd: t_x502_hnd; lch, phy_ch, mode, range, avg: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetLChannelCount(hnd: t_x502_hnd; lch_cnt : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_GetLChannelCount(hnd: t_x502_hnd; out lch_cnt: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetAdcFreqDivider(hnd: t_x502_hnd; adc_freq_div : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetAdcInterframeDelay(hnd: t_x502_hnd; delay : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetDinFreqDivider(hnd: t_x502_hnd; din_freq_div: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetOutFreqDivider(hnd: t_x502_hnd; out_freq_div : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetAdcFreq(hnd: t_x502_hnd; var f_acq, f_frame: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_SetDinFreq(hnd: t_x502_hnd; var f_din: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_SetOutFreq(hnd: t_x502_hnd; var f_dout: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_GetAdcFreq(hnd: t_x502_hnd; out f_acq, f_frame: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_SetRefFreq(hnd: t_x502_hnd; freq: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetExtRefFreqValue(hnd: t_x502_hnd; freq : Double): LongInt; stdcall; external 'x502api.dll'; + function X502_GetRefFreqValue(hnd: t_x502_hnd; out freq : Double): LongInt; stdcall; external 'x502api.dll'; + function X502_SetSyncMode(hnd: t_x502_hnd; sync_mode: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetSyncStartMode(hnd: t_x502_hnd; sync_start_mode: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetMode(hnd: t_x502_hnd; mode: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_GetMode(hnd: t_x502_hnd; out mode: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetAdcCoef(hnd: t_x502_hnd; range: LongWord; k, offs: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_GetAdcCoef(hnd: t_x502_hnd; range: LongWord; out k, offs: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_SetDacCoef(hnd: t_x502_hnd; ch : LongWord; k, double: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_GetDacCoef(hnd: t_x502_hnd; ch : LongWord; out k, double: Double): LongInt; stdcall; external 'x502api.dll'; + function X502_CalcAdcFreq(ref_freq: Double; lch_cnt: LongWord; var f_acq, f_frame: Double; out result_freq_div : LongWord; out result_frame_delay: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_CalcDinFreq(ref_freq: Double; var f_din : Double; out result_freq_div : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_CalcOutFreq(ref_freq: Double; var f_dout : Double; out result_freq_div : LongWord): LongInt; stdcall; external 'x502api.dll'; + + function X502_AsyncOutDac(hnd: t_x502_hnd; ch: LongWord; data: Double; flags: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_AsyncOutDig(hnd: t_x502_hnd; val, msk: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_AsyncInDig(hnd: t_x502_hnd; out din: LongWord): LongInt; stdcall; external 'x502api.dll'; + function _get_adc_frame(hnd: t_x502_hnd; flags: LongWord; tout: LongWord; out data): LongInt; stdcall; external 'x502api.dll' name 'X502_AsyncGetAdcFrame'; + + function X502_StreamsEnable(hnd: t_x502_hnd; streams: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_StreamsDisable(hnd: t_x502_hnd; streams: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_GetEnabledStreams(hnd: t_x502_hnd; out streams: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_StreamsStart(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_IsRunning(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_StreamsStop(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function _recv(hnd: t_x502_hnd; out buf; size: LongWord; tout : LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_Recv'; + function _send(hnd: t_x502_hnd; const buf; size: LongWord; tout : LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_Send'; + function _process_adc_data(hnd: t_x502_hnd; const src; out dest; var size : LongWord; + flags : LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_ProcessAdcData'; + function _process_data(hnd: t_x502_hnd; const src; size: LongWord; + flags : LongWord; out adc_data; var adc_data_size : LongWord; + out din_data; var din_data_size: LongWord):LongInt; stdcall; external 'x502api.dll' name 'X502_ProcessData'; + + function _process_data_usr(hnd: t_x502_hnd; const src; size: LongWord; + flags : LongWord; out adc_data; var adc_data_size : LongWord; + out din_data; var din_data_size: LongWord; + out usr_data; var usr_data_size: LongWord):LongInt; stdcall; external 'x502api.dll' name 'X502_ProcessDataWithUserExt'; + function _prepare_data(hnd: t_x502_hnd; const dac1, dac2; const digout; size, flags : LongWord; + out out_buf):LongInt; stdcall; external 'x502api.dll' name 'X502_PrepareData'; + function X502_GetRecvReadyCount(hnd: t_x502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_GetSendReadyCount(hnd: t_x502_hnd; out rdy_cnt: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_GetNextExpectedLchNum(hnd: t_x502_hnd; out lch: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_PreloadStart(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_OutCycleLoadStart(hnd: t_x502_hnd; size: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_OutCycleSetup(hnd: t_x502_hnd; flags: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_OutCycleStop(hnd: t_x502_hnd; flags: LongWord):LongInt; stdcall; external 'x502api.dll'; + function X502_OutCycleCheckSetupDone(hnd: t_x502_hnd; out done : LongBool):LongInt; stdcall; external 'x502api.dll'; + function X502_OutGetStatusFlags(hnd: t_x502_hnd; out status : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetStreamBufSize(hnd: t_x502_hnd; dma_ch, size: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_SetStreamStep(hnd: t_x502_hnd; dma_ch, step: LongWord): LongInt; stdcall; external 'x502api.dll'; + + function X502_BfCheckFirmwareIsLoaded(hnd: t_x502_hnd; out version: LongWord): LongInt; stdcall; external 'x502api.dll'; + function _bf_load_firm(hnd: t_x502_hnd; filename: PAnsiChar): LongInt; stdcall; external 'x502api.dll' name 'X502_BfLoadFirmware'; + function _bf_mem_read(hnd: t_x502_hnd; addr : LongWord; out regs; size: LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_BfMemRead'; + function _bf_mem_write(hnd: t_x502_hnd; addr : LongWord; const regs; size: LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_BfMemWrite'; + function _bf_exec_cmd(hnd: t_x502_hnd; cmd_code : Word; par : LongWord; + const snd_data; snd_size : LongWord; out rcv_data; rcv_size : LongWord; + tout: LongWord; out recved_size: LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_BfExecCmd'; + + function _flash_read(hnd: t_x502_hnd; addr: LongWord; out data; size: LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_FlashRead'; + function _flash_write(hnd: t_x502_hnd; addr: LongWord; const data; size: LongWord): LongInt; stdcall; external 'x502api.dll' name 'X502_FlashWrite'; + function X502_FlashErase(hnd: t_x502_hnd; addr: LongWord; size: LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_FlashWriteEnable(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_FlashWriteDisable(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + + function X502_GetLibraryVersion() : LongWord; stdcall; external 'x502api.dll'; + function _get_err_str(err : LongInt) : PAnsiChar; stdcall; external 'x502api.dll' name 'X502_GetErrorString'; + function X502_LedBlink(hnd: t_x502_hnd): LongInt; stdcall; external 'x502api.dll'; + function X502_SetDigInPullup(hnd: t_x502_hnd; pullups : LongWord): LongInt; stdcall; external 'x502api.dll'; + function X502_CheckFeature(hnd: t_x502_hnd; feature : LongWord) : LongInt; stdcall; external 'x502api.dll'; + + + function X502_FreeDevRecordList(list : array of t_x502_devrec; size : LongWord) : LongInt; stdcall; overload; + begin + X502_FreeDevRecordList:=_free_dev_record_list(list, size); + end; + function X502_FreeDevRecordList(var rec : t_x502_devrec) : LongInt; stdcall; overload; + begin + X502_FreeDevRecordList:=_free_dev_record_list(rec, 1); + end; + + function X502_GetErrorString(err: LongInt) : string; + begin + X502_GetErrorString:= string(_get_err_str(err)); + end; + + function X502_AsyncGetAdcFrame(hnd: t_x502_hnd; flags: LongWord; tout: LongWord; out data: array of Double): LongInt; stdcall; + var err: LongInt; + lch_cnt: LongWord; + begin + err := X502_GetLChannelCount(hnd, lch_cnt); + if err = X502_ERR_OK then + begin + if LongWord(Length(data)) < lch_cnt then + err := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + err := _get_adc_frame(hnd,flags,tout,data); + end; + X502_AsyncGetAdcFrame := err; + end; + + function X502_Recv(hnd: t_x502_hnd; out buf : array of LongWord; size: LongWord; tout : LongWord): LongInt; stdcall; + begin + if LongWord(Length(buf)) < size then + X502_Recv := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_Recv := _recv(hnd, buf, size, tout); + end; + + function X502_Send(hnd: t_x502_hnd; const buf : array of LongWord; size: LongWord; tout: LongWord): LongInt; stdcall; + begin + if LongWord(Length(buf)) < size then + X502_Send:=X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_Send:=_send(hnd,buf,size,tout); + end; + + + function X502_ProcessAdcData(hnd: t_x502_hnd; const src: array of LongWord; + out dest: array of Double; var size : LongWord; + flags : LongWord): LongInt; stdcall; + begin + if (LongWord(Length(src)) < size) or (LongWord(Length(dest)) < size) then + X502_ProcessAdcData:=X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_ProcessAdcData:=_process_adc_data(hnd, src, dest, size, flags); + end; + + function X502_ProcessData(hnd: t_x502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord):LongInt; stdcall; + begin + if (LongWord(Length(adc_data)) < adc_data_size) or (LongWord(Length(din_data)) < din_data_size) + or (LongWord(Length(src)) < size) then + X502_ProcessData:=X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_ProcessData:=_process_data(hnd, src, size, flags, adc_data, adc_data_size, din_data, din_data_size); + end; + + function X502_ProcessDataWithUserExt(hnd: t_x502_hnd; const src: array of LongWord; size: LongWord; + flags : LongWord; out adc_data: array of Double; var adc_data_size : LongWord; + out din_data: array of LongWord; var din_data_size: LongWord; + out usr_data: array of LongWord; var usr_data_size: LongWord):LongInt; stdcall; + begin + if (LongWord(Length(adc_data)) < adc_data_size) or (LongWord(Length(din_data)) < din_data_size) + or (LongWord(Length(src)) < size) or (LongWord(Length(usr_data)) < usr_data_size) then + X502_ProcessDataWithUserExt:=X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_ProcessDataWithUserExt:=_process_data_usr(hnd, src,size,flags,adc_data, + adc_data_size, din_data, din_data_size, usr_data, usr_data_size); + end; + + function X502_PrepareData(hnd: t_x502_hnd; const dac1, dac2: array of Double; + const digout: array of LongWord; size, flags : LongWord; + out out_buf: array of LongWord):LongInt; stdcall; + begin + X502_PrepareData:=_prepare_data(hnd, dac1, dac2, digout, size, flags, out_buf); + end; + + function X502_BfLoadFirmware(hnd: t_x502_hnd; filename: string): LongInt; stdcall; + begin + X502_BfLoadFirmware:=_bf_load_firm(hnd, PAnsiChar(AnsiString(filename))); + end; + + function X502_BfMemRead(hnd: t_x502_hnd; addr : LongWord; out regs: array of LongWord; + size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(regs)) < size) then + X502_BfMemRead := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_BfMemRead:=_bf_mem_read(hnd, addr, regs, size); + end; + + function X502_BfMemWrite(hnd: t_x502_hnd; addr : LongWord; + const regs: array of LongWord; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(regs)) < size) then + X502_BfMemWrite := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_BfMemWrite:=_bf_mem_write(hnd, addr, regs, size); + end; + + function X502_BfExecCmd(hnd: t_x502_hnd; cmd_code : Word; par : LongWord; + const snd_data : array of LongWord; snd_size : LongWord; + out rcv_data : array of LongWord; rcv_size : LongWord; + tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(snd_data)) < snd_size) or + (LongWord(Length(rcv_data)) < rcv_size) then + X502_BfExecCmd := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_BfExecCmd:=_bf_exec_cmd(hnd, cmd_code, par, snd_data, snd_size, + rcv_data, rcv_size, tout, recvd_size); + end; + + function X502_FlashRead(hnd: t_x502_hnd; addr: LongWord; + out data: array of Byte; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(data)) < size) then + X502_FlashRead := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_FlashRead:=_bf_mem_write(hnd, addr, data, size); + end; + /// Flash- . + function X502_FlashWrite(hnd: t_x502_hnd; addr: LongWord; + const data: array of Byte; size: LongWord): LongInt; stdcall; + begin + if (LongWord(Length(data)) < size) then + X502_FlashWrite := X502_ERR_INSUFFICIENT_ARRAY_SIZE + else + X502_FlashWrite:=_bf_mem_write(hnd, addr, data, size); + end; +end. + diff --git a/SDK/readme.txt b/SDK/readme.txt new file mode 100644 index 0000000..0a4a651 --- /dev/null +++ b/SDK/readme.txt @@ -0,0 +1,76 @@ +L-CARD L502/E502 SDK. + +Данная установка содержит все файлы, которые необходимы для разработки программ для модулей L502 и E502 от "Л Кард", а также примеры для программистов (если при установке были выбраны соответствующие пункты). + +Содержимое директорий: +/bin - Содержит копию бинарных библиотек (32-битную и 64-битную версии). При указании соответствующего + пункта установщик SDK уже ставит необходимые библиотеки в системные папки, + поэтому файлы в данной директории нужны главным образом при создании своего дистрибутива, + не зависящего от дистрибутива "LCARD PCI-Express SDK". +/driver - Содержит копию бинарных файлов драйверов (32 и 64 битные версии) для включения при необходимости + в свой дистрибутив. +/firmware - Содержит исходники прошивки для сигнального процессора +/examples - Примеры написания программ для работы с модулями PCI-Express фирмы "Л Кард" + /c - Консольные примеры для работы с платой. Содержат: + - демонстрационные проекты для среды "Microsoft Visual Studio 2008". + - makefile для сборки mingw (под Windows) или gcc (под Linux) + - файл CMakeList.txt для сборки с помощью CMake файлов для любой поддерживаемой им системы сборки + /CppBorland - Примеры для Borland C++ Builder. Содержит демонстрационные проекты для сред + "Borland C++ Builder 6" и "Embarcadero C++ Builder XE2". + /Delphi - Примеры на языке Delphi. Содержит демонстрационные проекты для сред + "Delphi 7" и ""Embarcadero Delphi XE2" + /cs - Пример для С#. Содержит проекты для среды "Microsoft Visual Studio 2008". + /LabView - Примеры на LabView, содержит vi как для верисии 8.0, так и для версии 10.0 + (который лучше использовать в 10.0 и выше) + /vb6 - Примеры для Visual Basic 6 + + +/include - Содержит заголовочные файлы, необходимые для разработки программ на C/C++ +/lib - Содержит .lib файлы для различных компиляторов, необходимыхе для линковки с библиотекой при написании + программ на C/C++. Эти файлы должны быть включены в проект или указаны в настройках + среды для проекта. +/lpcieNet - Библиотека-оболочка для NetFramework. Собрана под несколько версий NetFramework. +/manuals - Документация по API библиотеки и низкоуровневое описание +/pas - Файлы для включения в проекты на Delphi/Object Pascal +/tools - Дополнительные утилиты для работы с модулями + /lxfw-update - Утилита для обновления прошивок ПЛИС модулей + + +#Сборка с символами для отладки: +cmake -G="MinGW Makefiles" -DBUILD_ALL=1 -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_C_FLAGS_DEBUG="-g -O0" ../ +cmake -G="MinGW Makefiles" -DBUILD_ALL=1 -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_C_FLAGS_DEBUG="-g -O0" -DLIBXML2_LIBRARY="c:\lcard-repo\common\libxml2-v2.10.3\build" -DLIBXML2_INCLUDE_DIR="c:\lcard-repo\common\libxml2-v2.10.3\include" ../ + +#Сборка libxml2: +cmake -G="MinGW Makefiles" -D LIBXML2_WITH_LZMA=OFF -D LIBXML2_WITH_ICONV=OFF -D LIBXML2_WITH_PYTHON=OFF -D LIBXML2_WITH_ZLIB=OFF ..\ + +# Сборка libxml2 под Windows +cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE="Release" -D LIBXML2_WITH_LZMA=OFF -D LIBXML2_WITH_ICONV=OFF -D LIBXML2_WITH_PYTHON=OFF -D LIBXML2_WITH_ZLIB=OFF .. + +# Сборка lpcie_sdk +cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE="Release" -DBUILD_ALL=1 -DLIBXML2_LIBRARY="c:\libxml_install\lib\libxml2.lib" -DLIBXML2_INCLUDE_DIR="c:\libxml_install\include\libxml2" .. + +# сборка под linux +sudo apt-get install libavahi-client-dev +sudo apt install qtbase5-dev +cmake -DBUILD_ALL=1 -DCMAKE_BUILD_TYPE="Debug" -DCMAKE_C_FLAGS_DEBUG="-g -O0" /home/ruslan/lcard-repo/lpcie_sdk + + +# сборка документации под Ubuntu +sudo apt install texlive-latex-base +sudo apt-get install libavahi-client-dev +sudo apt-get install libxml2-dev +sudo apt install build-essential +sudo apt-get install libusb-1.0-0-dev +sudo apt install qtbase5-dev +sudo apt-get install doxygen +sudo apt install latex2html +sudo apt install imagemagick +sudo apt install texlive-lang-cyrillic +sudo apt-get install pandoc texlive-latex-base texlive-fonts-recommended texlive-extra-utils texlive-latex-extra + +cmake -DBUILD_DOC=ON -DBUILD_ALL=ON +cmake --build . --target x502api_pdf + +cmake --build . --target x502_low_level_pdf + +cmake -DBUILD_ALL=1 -DLIBXML2_LIBRARY="c:\libxml_install\lib\libxml2.lib" -DLIBXML2_INCLUDE_DIR="c:\libxml_install\include\libxml2" -DLCARD_SDK_MAKE_INSTALLER=1 -DWIN_INSTALLER_NOSIGN=1 c:\lcard-repo\lpcie_sdk \ No newline at end of file diff --git a/SDK/tools/lxfw-update/e502-fpga-update-all.bat b/SDK/tools/lxfw-update/e502-fpga-update-all.bat new file mode 100644 index 0000000..1c62e2b --- /dev/null +++ b/SDK/tools/lxfw-update/e502-fpga-update-all.bat @@ -0,0 +1,2 @@ +lxfw-update --all firmware/e502_fpga_c.lxfw firmware/e502_fpga_i.lxfw +pause diff --git a/SDK/tools/lxfw-update/firm_versions.txt b/SDK/tools/lxfw-update/firm_versions.txt new file mode 100644 index 0000000..399087f --- /dev/null +++ b/SDK/tools/lxfw-update/firm_versions.txt @@ -0,0 +1,51 @@ +Данный файл содержит список изменений в различных версиях прошивок. + +L502 (ПЛИС): + - 0.1: Первая версия прошивки + - 0.2: Исправлены критические ошибки: + - Установка некоторых частот сбора и следования кадров АЦП приводила к ошибочному + увеличению амплитуды сигнала в первом логическом канале в 2 раза + - Асинхронный вывод на ЦАП на фоне синхронного ввода мог приводить к порче данных + на DOUT или просто не устанавливал новое значение + - При использовании внешней частоты синхронизации по некоторым внешним импульсам + преобразование могло не выполняться + - 0.3: - Исправлена ошибка, что при одновременном потоковом выводе для обоих каналов ЦАП + и DOUT частота вывода падала в 2 раза + - Введено отдельное прерывание для остановки потока ввода по флагу от BlackFin с + автоостановом DMA. + - 0.4: Исправлен ClassCode устройства на 0x1180 (для класса 0 плата не определялась + под QNX) + - 0.5: Добавлена возможность настройки делителя частоты вывода (аналогично E502) + - 0.7: Исправлены следующие проблемы: + - при синхронном выводе при опустошении буфера последний отсчет не выводился. + при этом это также приводило к сдвигу диаграммы вывода следущего запуска + на один период ЦАП. + - запрет и разрешение потока ввода АЦП до запуска сбора могло приводит к + откидыванию первого кадра АЦП, из-за чего первый отсчет сдвигался по времени + относительно момента старта синхронизации + - при синхронном выводе в Blackfin при досылки оставшихся данных, не кратных + шагу, могли передаваться мусорные данные или даже зависание интерфейса + HostDMA (могло проявляется если вывод не непрерывный или при низкой частоте + вывода). + - 0.8: Исправлено зависание модуля при асинхронном выводе в момент ожидания внешнего + сигнала запуска синхронного ввода-вывода (операция не выполняется, но не + приводит к зависанию). + - 0.9: Исправлена ошибка в чтении регистров модуля по PCIe, которая привадила к + некорректной работе модуля на отдельных материнских платах. + - 0.10: Исправлена ошибка асинхронного вывода при установленной низкой частоте синхронного + вывода. + + +E502 (ПЛИС): + - 0.1: Первая версия прошивки + - 0.2: Исправления возможной ошибочного чтения счетчика, что могло привести к сбою в данных + на частотах сбора ниже 100 КГц. требуется также обновление прошивки ARM до версии + не ниже 1.0.11 + - 0.3: Исправлена проблема обращения к регистрам FPGA, которая проявлялась в том, что + асинхронный вывод на фоне синхронного ввода изредка заканчивался с ошибкой + - 0.11: Внесены все исправления, что и для версии 0.7 L502, а также исправлена проблема + разрыва данных при синхронном выводе через BlackFin + - 0.12: Поддержка новой ревизии платы и индустриального варианта исполнения + - 0.13: Исправления, аналогичные версии 0.8 для L502 + - 0.14: Исправления, аналогичные версии 0.10 для L502 + - 0.15: исправление временных параметров (могли приводить к ошибкам интерфейса SPI на некоторых модулях) \ No newline at end of file diff --git a/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw b/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw new file mode 100644 index 0000000..03936ae --- /dev/null +++ b/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw @@ -0,0 +1,7 @@ + + + + + + //////////////////////////////////////////9q9/f39/f38/vz+/v58fn5/f39///9+fn/+/v7+f39/fn5+fn9+/v7+xNf//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFBQUFBQUFBQAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUFBQUFBQUFAQEBAQEBAQEBAQEBBQUFBQUFBQUFBQUFBAQEBAQEBAQEBAQEBAQEBAUFBQUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAQEBAUFBQUEBAQEBAQEBAQEBAQEFBQUFBQUFBQEBAQEBAQEBAQEBAQUFBQUFBQUFBQUFBUVFRUUFBQUFBQUFBQUFBQVEREREBAQEBEREREQkJCQkJCQkJGRkZGQkJCQkBAQEBAQEBAQEBAQEQEBAQGBgYGBgYGBgICAgICAgICAgICAgAQEBAQEBAQFAQEBAAAAAACAgICAhISEhISEhISEhISEhISEhAQEBAQUFBQUBAQEBERERESEhISFhYWFhISEhISEhISEhISEhQUFBQQEBAQFBQUFBAQEBASAgICBgYGBgICAgICAgICAgICAgAAAAAEBAQEBAQEBAQEBAQCAgICAgICAgICAgICAgICAgICAgQEBAQAAAAAAAAAAAAAAAACAgICAgICAgISEhISAgICAkJCQkAAAAAAAAAAAAAAAAQEBAQCAgICAwMDAwICAgIGBgYGAgICAgQEBAQAAA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AAAAAAAAACEmAQAAAAAAAAAAgAIQggIoAAAAACEAAAAAAAAAAAAAAACIAAAAAAAAABAEAPB7EgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn/wPAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2kAAAAAAAAAAAAAACQIhQAAAAAAAAAAAAAEAIAAAAAACEAAAAAAAAAAAAAAACIAAAAAAAAAEAEAPC2IQAAAAAAAAAAAAAiAAAAAAAAIgAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAB87CSAIAAAAAAAAAAAAAAAAACIAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUsMwJAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/BBiAIAAAAAAAAAAAAAAAAAAAAKgIAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0NgGAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/ZASAIAAAAAAAAAAAAgAIAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf9oEAAAAAAAAACgAAAAiAAAgAgAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAEAEAAAAAAAAAAAAP+oPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQPGP6QAAAAAAAAAAgAIAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAA4C8FAAAAAAAAAAAAAAAAIAKAAgCAAgAAACiAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA8SH2IAgAAAAAAAAogAIAKIACAAAAACgAKIACKAAAgAIgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAN88DYgAAAAAAAAAoCIAgAIAIgAgAgAAgAIAKgIAAAAqAgAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAQ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AAAAAAAAAAAAAAAAAAAAj/wDAAAAAAAAAAAAAAAAAAAAAAAAAAAAIhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCT2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAACACAAAAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAggAAAAAAAPDCgwAAAAAAAAAAAAAAgAIAAAAAAAAAACACAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAA8OkSAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAACvfw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIAAAAAAAAX84DAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB94CiAIAAAAAAAAAAAAAAAAAAAgAgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU8M9qAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/pAkAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZB4IAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUL4kEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9IAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSfkggAAAAAAAAAAAAAAAAAAAAAKACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8OUlgAiIAAAAAAAAAAAAAAAAAAAAACgiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQsVyBASSIESEUAAAAAAAAAAAAACAISoiCJCGCgWIiEBFCAQAAAAAAAAAAAACCoIQoSBIiGEEkRBEhFAAAAAAAAAAAAAAgCEqIggQ/0w8AAAAAAAAAAAAAAAAAAAAAIAIgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsEEKAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI95BCAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTwjXIAAAAAAAAAAAAAAAAAAAAAAAAoIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9iCAAAAAAAAAAAAAAAAAAAAAAAgCICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwI4YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHABBCAQAAAAAAAAAAAAAAiIAEIhgAACEUAAAAAAAAAAAAAACACEggggFABCEUAAAAAAAAAAAAAACACEgg8vKzAAAhFAAAAAAAAAAAAAAAgAhIIIIBABBCAQAAAAAAAAAAAAAAiIAEIhgARBBCAQAAAAAAAAAAAAAAiIAEIi8/CwAQQgEAAAAAAAAAAAAAAIiABCIYAAAhFAAAAAAAAAAAAAAAgAhIIIIBQAQhFAAAAAAAAAAAAAAAgAhIYBI/M0fiEpIRGmQkKpIRLyFkFBsiGC8hZBQboorxEkJGsSGqGC8hZBQboorxEkJGsSGqGC8hZBQbIopxEuIUuIGCdFLiErqBoUFGoqIbGC8hZBQboorxEkJGsSGqGC8hZBQboorxEkJG8SGkSxgvIWQUH0K6hPESQkbxISRLGCchToEfSJJEJyUuoRsYS0FG4kK6hfESQkbxIaRLGC8hZBQfQrqE8RJCRvEhpEPYImQUH0I6hC1CQi6kQ9giJORCMoQlooSOJJfDAAAAAAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTPVQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn2ACIAIAAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEaCwAAAAAAAAAAACIAAAAAAAAAAAAAAAAoAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAQAIAAAAA8MukAACCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHDVDAAAAAAAABIAAAAAAAAAAAAAKACCAAAAABgiAAAiAAAqAgAAAIACAAAAAAAAAAAgAgAAAAAoAAAAAE/bDAAAAAAAAAAAAAAgAQCCAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAAAAAAAEEAAAAAAAAA8CWRAAAAAAAAgAEAAAAAAAAgCAAAAIAIAAAAoCEAACgAAKAiAAAAAAAoAAAAAAAAAAAAAAAAACgAAAAi8EUkAAAgAQCAAQCIAAAoAAAAAAAAAAAAgAIAAAAAAAAAACACAAAAAAAAAAAgAgAAIAIAKIACAAAAAAAAf7sNAAAYAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAACIAACIoAAAAAAAA8JGdAAAAAAASAAAAAAAAAAAAAAAAAAAoAAAAAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAADwLBQAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/VBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAgAgAAACgAACIoAAAiAAAgAgAAAAAAAAAAAACPbg0gCAAAEgAAAAAAAAAAACAIAAAAAAAAAAAAAAAoACgAKAAgAgAAAAAAIAIqAgAioCIAAAAogAIAAAAAFPAjNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAIgAAAAAAAAAAAAAAIAIAAAAAIu+6BQAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAgAgAAAAAoKAAAAAAAAN9BDwAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAgAgCAAgAgAgAiAAAAAAAAAAAoAAAAAAAAAAAAAPDzYwAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIigAACIAAACAAiIAIiACIqAiACACACACAAAAAAAA/8ECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgogAIAKAAAACACAACAAiiAAigAgAIAAAAAAAAAAACwpw4AAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAoQOF+AwAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAIgAAACIAAAAAAAAAAAAAAAAAAAAA8IZ6AAAAgCEJAAAAAAAAAAAAAAAAAAAAAAAAAAAogAKAAqAiACACACIAAAAoIAIqAiigIigoAAAAKKAiAAAAAAAULYQAAAAgKQgAAAAAAAAAAAAAAAAAAAAAAAAAACigIqAioCKgIgAiKgIgAgAqAioCKKAioCKgIqAiKCggAgCAggIiAAAAgALwP6wYiAAAIAEAACAIAAAAAAAAAIgAAAAAAAAAAAAAoCIAKCoCACoiAqAiIigAACoiAqAiAKAiAKAiAAAAKCoCAAAAAAAR+7gAJBARQoEBAACgiAAAAAAAACAIQihIEiIYQAIRIRQAAAAAgIIiAiACAACgKCJKCEgSIhhBJEQRIRQAAIAiAgAAgKIiAAAAgrBBiIIEn6kMAAAAGiEIAACKCAAAAAAAAAAAAAAAAAAAAAAAAACAggIAAIAiAgAAKCIAACIAAICiIiIAAIAiAgAAAAAA0PUDAAAAAAAAoIgAAAAAAAAAAAAAAAAAAAAAAACAIgIAAAAAKCIiAAAAAAAAAAAoIgAAACgAAAAAAADw1dUAggAAAAAAoIgAAAAAAAAAAAAAAAAAAAAAAACAIgIAAAAAKCoCAAAAAAAAAAAoIgAAAAAAAAAAABTQtQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCICAAAAAIACAACAIgIgAgAAAAAAAAAAAAAAAABwggUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAIAiAgAAgAIAIgAAACgiAAAAAAAAv5cOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAKAoiIiAAAAAAAAgAIAAIAiAgAAAAAAAAAAAPA/1wAAIRQAAAAAAAAAAAAAAIAISCCCAQAQQgEAAAAAACgiAACAoiIAgApIIIIBQAQhFAAoIgAoIgAAAAAAAACACEgg8kjMAAAhFCABAAAAAAAAAAAAAIiABCIYAAAhFAAAAAAAIAIAIAIAAIAISICCAShEEOISAoCCAgAgAgAAACIAAACIgAQiP9QGABBCAQAAAAAAAAAAAAAAiIAEIhgAACEUAAAAAACAAgAAACIAgAhIIIIBIkQQQgEAAAAqAgAAAAAAAACIgAQm8cGzJC4hGaFBRqIiGfESQkaxIYLxEkJGsSGqGC8hZBQboorxEkJGsSGqGC8hZBQboorxEkJGsSGiGCchToEbKEgnJS6hGxgaZCQquoHxEkJGsSGqGC8hZBQboorxEkJGsSGqGC8hZhQfQrqE8RJCRvEhpEsYLyNmFB9CsoRxMuIU+IEkSXRS4hK6gbE0ZCQupFsYLyFkFB9CuoTxEkJG8SGkSxgvIWQUH0I6hC1CRvEhpEPYIiTkQjqELUJCLiRDWCJK6EjydocAAAAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAACAAiIAAAAAAAAAgAIAAAAAAAAUTyoKAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8bCogAAAAAgAgSEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAABQAABF7EQAkAAAAiACAASEAAAAAAAAAAAAAAAAAAAAAAIACKAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAQAQAA320DACCIAQAAggAAAAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwqksAAACAAQAAAAAiIAIiKAAAACIYAACAAhIAACgAGAAAAAAAKBABAAAAAAAAACACICECAAAAACggAgAAFAAoAM9KDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAIABAAAAACIAACgAAIACEgAAACIAAIACIAEAAAAAACIUAAAAAAAAAIACABIiAAAAAICCAgAAQAEAIvDK7AAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAIBQCAAAAAAAAACiAAgAAAAAAAIIAAAAAAADwcjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALYOAAAAIAEAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACKAAAAAAAAAAAAAAAAADArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAQAAAAAEAIAAAAAAAAAAAAAABACAAAgCAAAABQAAPAzjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABv9wLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFL/VCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAA8DEXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAPDLgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA8Vu9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAABE+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ACoCABIiGCoCEigqgiEBKoIhASqCIYEiAgAoIgAqAoCiIgAQ8Vb8AB4SghEhFBoBABoBIKERKCgigKIiIgAgAooCSghIEoCjIiQQkSIUAAAAIAKgIhohASIaAYCiEyAoopUaggQAQ2IhRBEpYhEaASISGgEqIoGBIgIAIAIoKiICiiKihChI8KKBABIAABoBABgAGoEBKCKAoiIiACgAAAAAIigiIoACIgAAgCICACg6gQEoIhoBABoBKCIYAACAoREoABoBKDohgSKiEoACAIAiAigiACgAAPCygwAaAQCgEQCgEQASGgEoIoACIgAiIgAgAgCAAgAAACgAACIAAIABABqBoiIiGgEAGAAAKCoBABIaAQAAKBIYKCIAACKAoiIigCICAPBYOgCSAAAaAQAYAIABKCIAAAAqIgKAAgAAIAKAAgAAACgiAIAiIgEoOgEoIhoBgKITEgAAKDIagQKgEYAiAigiOgEoAAAAgCICgAIAFPAmSgAaAQAYAKARGgGgERoBAIACIgAAAAAAACgiIoCiIgAAIgAiACgigIEiIqIRKCgiGoEiIoIBACgiIhqBoiIygCIiA4Aig4EiAgAoIgAgAigiAACPmQygEQAAAKARGgGgERoBAAAqAgAAAAAAAIAiAigiAAAAKCIAoCIgASoCACgAoCIiEgAAIgAoKgIAKiIiASIYgCICACgiAACAIgJAAV8hDgAAoBEAAACgEQAgAiggAgAAACIAAAAAAAAAACACgCKiERqBIgIagaIioBEoIqARAICiIiqhEYAioxEoIgCAohEYAACAIgIAAAAAAF+/DgAYIRQAAAAAAAAAAAAgAgCIgAQiGAAiEEIBAACAIgKAoiI6oREoKqITGoECGqERKCqoExoFIhgoIjYEIRyiExgoIiKAIqITGgEAAAAAAACogAQiv8ELABBCAQAAAAAAAAAAACACgCiCBIABABBCIQIAAAAAABIYABIYABIYgKgRWCACAEwhEUKBgQEAAAASAAAAAAAAgCiCBCryqNgAIBFCgQEAGAAAACgAAAAgAgCogAQiGIACEGISACACACIAACABgCEBgAGACEggggFABCEUGAAAAIAhAQAAAAAoAIAKSCDyY98kLiEZoUFGoiIZ8RJCRrEhgvESQkaxIaoYLyFmFBuiivESYkaxIaoYLyNkFBuiivESYkaxIaIYJyFOgRsoaCclLqEbGBpkJCq6gfESQkaxIaoYLyNkFBuiivEyQkaxIaoYLyFkFB9CuoTxEkJG8SGkSxgvIWQUH0KyhHES4hT4gSRJdFLiErqBsRRkJC6kWxgvIWQUH0O6hPESQk4RH0K6hPESQkbxIaRD2CJkFB9COoQtQkIfQjqELUJCLiRDWCJK6EjybSUAAAAAGAAAACgAAAAAAIACAAAAAAAAAAAgAgAqAgAqAgAqAgAqAgAiACgAIAIAKgISoCIYACKAAioCIoACAAAAALBnAwAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDhpw2IAACCAAAAABIogAIoAAAiIiIoAAAAACIgAiIgAiIgIiICACggISIhASIogAEoIAEAoBIAGCIYgCGCARgiGAAAAAAAKIACIAIRT0sGAAAYiAAAAAAAAAAAACgoAAAAAAAAAACAAgAAAAAAAAAiABIAAAAAEgAAAAAAAAAAAAAAACIgAgDwX30AIAEAAAAAGICBAiiAAgAoAIACAAAAIAIiIAIiAKAiIAIAKKAhICEBgAIAKCABACACgCGCARgiGIAhggEAAAAAAAAAIgArrQAAACABABIAGAAAIAIoEgAqIaEhGIACEgAAAAAiAAASIIIhgQE4oDQoGBEqASgSADiAAYAiARqCIgEiACABRCISgAIoAAApAoACAAAugQAAABgggQEAACCDAQAoEogAAAAgAhgAAAAiACABAAAgggIiAIACIIIBIAKAAoABAAAAACIAAACAAgAAABEAIiACn4IIAAAgASABGAAYIAGAAiggC6ASEigSICKCAQAAKAAAACCBAhoCEiIqAxqCoiEUGgIoEiCCASgSgCEBEiISKAAogAFJAhiAgoICABACFKAiAADPhg0YIgAiIAEgAQAAAKAiAAAoGIAjARIiACgAACIYKBggAhoiiIECACIiIgCgIRIoIAIaAgBgIigAIjIgAhIqgQIYSBIiACKAAgAAAAAiAP2MgAIAABIAAAAAAICCAQAgAxgAGAAAACIAEqASIgA4ACACACIiAAAYKAAAIgAoJCCCAjIoAAAgAoACAAAAIgAAAAAATAMAgAIAABgAAAAAIgAAAAAqASgAACIAAAAAAAAYAKAiAAAgAgAoABgAAAAAACABGBIAABIAKAAAAAAAAADwe2aAAQAAAAAAAAAAAIACAAAAAAAAACgAACgAIAiAAQAgAQA4ACABAACAAQAAAAAiABJCAAAAKAAAABQAIgC/NgUAAAAYAAASAAAYAAAAACgAKgIiAAAAIgAAEjIYKAAgoRIyAACAASAiAiIgAgAgggIoACIAIAEYABIAACIAACACAADQtQcgCBKAARgAAAAoKCgAACoCAIADABgAIIICAAAqAgAiACgAACIAACoBIAEgAoABIgAAGAAYIhgiIKISGCgAAACAAgAAIEIBnfYgARIgIQEYEiCBIQESKAAAAACAAgAAgAEYACCCAhIAAAAgAgAgIiECIAEgAhIAABgogAIgggMoAACAIoECKIACKCgogAIoAADfQQUAAAAAAAAAIAEAAAAiKAAAAAAAAACAAhKgEgAgAhgiIhIAAAAYIoABEiIAIAEYAAAgASACAAAAAAAAAAAgAvBLQYABAAAAAAAAIAIoGAAigAIAgAIAAAAAIgAAAAAAIAIYKCgoGKAjACg4ACABGCgYgCGCggE4gAE4gAMAAIACAAAAIgAA7skYIAESGIABIIEBGBgYAAAAAAAAACgAACABACIAACACGCABACABACABACiAASgoAAAAACIgAgCAIQIqAiKAAiKAAiIgAgAfaQIAAAAAAAAAABoCgAIAACKAggEAAAAoAACAggKAAgCAgiIBGCgAIAKAgQIAAKAjgAIoAICCAxIigAIAIAIAAAAAALD6DIIgAQAAAAAAIAEYACIAAAAiAAAAACIAIiAhAgAiAAASAAAAICIBGACAAQCAASCBIQESABgAIgAgAgAiACKAAgBA8Rj6ABgAAAASEgAgAQAoKACAAgAAAAAAIgAAKAAAAIACACABEiIgAwASABgAOAAAAAAAAAAAAAAAAAAAAAAA8Fs8IIgBGCAhAYABABIoEigoAIACACI6AiCiEoABgAIAIig4EqAyACgoEigAGBgSABgYOCAioxIYMjgggqEhGCigEiI6AioiIYEhIYEBIIICACgAIgAgAhSjAxiAAQAAAIABGCg4IKISKCiAAiggoiI4AAAgAioCIigoEjoCIKIiKIAhgoEBKoKhEqASEhgYOBIqgQE4oCIYGgIqgoGBgYOBATgSGBISIiACIgCgIgAgggIAb8cOiBgSABgSABgSABgSoCIaIQEqAgAqAhKgIhgAEoChIhgAKgISoCIYACqCIQEqgiEBKqIREqAiGBKgIhgaAhIiGCqCoRGgIhgSoCIYEqAiGBoBKgIAKgIAKgIAKkKBAhH/0YEBJBARwhEYAAAAGBIAGqERKCoiAigqIqIRgih6iYIEIigiHhKQISNCoREAGICiIjqhESgqIoKBoiI6IYGCIoKhKCqihhhIAChDYiNEGZIiNqERKKATGCgiOgGgIgAgAgAqAiAoooSABIeVABgSABISABgaASCBASgaoRGgIiKAIgIaASgaAQCAIqIRgCICGCgoOgEoKqITACgYACqiEQAiAKAiACABoCIYACqiERIoKqISEqAiACggAigoACgoIoCCIgIAj/4GAACAgQEAAIAhASoiohEoIgCAIgIoKqITAAAoIhoBKCgiAACAIqITEigqohMagaIiIoCCIoKBoiIiGACAIiIDKCgygAIigCKiEwAqAgAiAKAiACBCAQB/awcgCAASEgCgEQASGCgoIhoBIgAoIgCgIhoBAIAiohOAoiKAASgaAYCiEwAoGAAqohEAIgCgIiABAKAiAKAiIIGiIiohASoiIYECIoACACggAigoIkAB72sHoBEaAaARGgGgERgAGqERKCISACACgCKiEYAiAgCAIgKAAgAoIhgAKCKAAhqBAaARgCIiggEAGAAAKCKAIgKAAiIYgCICKCoiAigqIgIoKgKAIiICAE+WCoAhAQASABgSAACAggGgIgAAoBEAAACAIgIAIgAooBGAIgIAKqIRACoCACgAoCIAAAAiAIACAAAAIgAAAIACAAAAKAAAP4oGoBEaAYABABoBABgSKCISACACgAIAKCIAAIAiAigAAAAAIAIooBEAAIAiIoIBAAAoACgyGoEiAoACIgAoIgAqAgAqIgKgIgAgAgDwWagAGqERIRQSEgAaoREAEhgAGAAqAgAAACoKSCCCASACISYBAKARAAAAKqIRACoCACgSGgEqKoEEKoIBIkQaEcIhAAAAIAKAAiKAgiICKCACKKgiSCDynpQAACEUAAAAAACgIhIAIgAAIgAqCEgAIAEikCIUIhgoIAEoICIBIAEAGBIAAIAISAAgAUQSIRQAAAAAEhIAAAAAAACACEgg0vwBggAhFAAAAAAAgIIBoCIAIAIAiIAEIhggAhBiEgCAAgAqAgCAAQAYAIAhAYgYSCCCAUAEIRQA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RIkCGCKJQSihEqAiAJAoAAAiAIEAAABACACLgiACKoISCCJQiBgmKAYgIQIoGAAohBIAKgQoKEigMoCmFACwKIECAACJIQIRiQIqAYlBiAIAb+ULAAAAAIEiEiISkBg6goICAIkCACACAAAgAhgAACiBIiKAghKIggKBGCJCABgAKCACKIABKEIAKEIoGgIiAAAyIAEAEAgAAAAgEggAr3sBAAAShBiFhAEAgQAAAAAAAAAAgwIAAAAQCIAIwCgAAIACgYQyACACgAEiQAgAgJIoAAASaBoEAImCAiAEgANAiQIqAYkBKADwQ8gQBABACBgAIAEggrQUgpJcIGKCFgiBg9SIQggAIEQIAIwBFggAiRIYCIACIo1okChggoxCCEgoUkhChCiAAYwCEoChUoEiIkIAGEISKIESgwUiIiIgtCiGhGGEACiA8RqYACACgCNhxhCIIYIigSIBElCIEgCAASKAEQgiiQEAhEAIAIkBAMAoEhIggqESEkJSEoAhh0IIYhiEKB5ISBgoSIqUKCA0GBhIgaASAEaoIgBCSoikJAAAIAIgItFdB0QoAACBLkQAGDIgoyJKkRQuOEbMKDhASAiHhCiFKBEIhFhACJAYhIwBgBFoggAAMiiJdhioEjIuSBgigKdBKiGCYoQSgOKBhKQSoEIaXIjghAJSjASgQ0AoFpgYIKYsSEIuSEoihAEiSCAisfQMGCAyJBiLEokSxBgAEiCBERhoQRgSIAIygISCggEiQIgCgCKkISCRGBgYLhguSECIkRgog7EowiiGyEigEhIAGGphhBIgIYQCGFgiMiaIAiCCBToigTEYoEEoKICEJIICIhoCACJA+N1aAAAYAAAAACAhEQgAIAQAKAAAAAAAAEIAGCAjgZFIACABQgAShIChIUAIYkIyAAAggQEAACISSIEAEokBQioiAYABgCIBIiABAHtlIAEYRIQqASISACIAYIEiSQESIAISIAEoAAAAIiAiggIAACIogS4oGACNKAAiSCACgAIShCghACACAKASiQKgIhKAAgCAASACSCIAIAEAAPBKTQCgIoCBEkhEiAESAAAAEgCAAoAEIhiBIgCBSAAgAZBYIIICAISAggEmKBgIABCIAQAgIQQAQioiAQAAgCKBAQAAAEIAKAAiACAChM2RAAAAGEyhI6ASgEJERAhERBAIhAAAQCgE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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QdCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA+KLHIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgvegxCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA+KLHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafYCEhIQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICEhISEhISEhISEhISEhISEhAQAAAAAAAAAAACIiIiIiIiIiIiI97sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn2gRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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KgEAKIkhAhgAACACABIiAEUIgAFIgxEoAiIgggEoAEgYKCAB0I0PEgCEFkgIFCCSEiphgYQAFoiBFBzoQQQAGCADRCABAACBgEEowRgSgAEAIAOEhDIAwBggQQiEAACAAQAQCBqCIQE4KBgoSgIYGBiAAWgggQEAhADw7xUAEiKAQggSANCEgYKCIQEijIIhAUQAQAiMAowCEgAAAIMCEjAYIBIYAYAEgAIiKCCCBCgAAABACAAAhAAAACAGSBgSGqQSoCZKAToGAABKAXAkDQCAISEBACoiASKJQSgCGoYBkGgSABgSKgE4oBIYIDJIEiIqASiBEoQSixQiIjIiGCACiSUhAgAoAIEqBIBCiCIBEiIAwCiAAQCgJIFCQgBKASgAACqEgQQg8aPOEAQAEi4YAICCkRQiizKEEoBCiIGBFgQgwRhAiEaoEhggIoQCJigCg2GBhB4oaMAhEiAEQKgyEiggIgQiJggAoCGEgAEaAgCBAACAIoQihISFJKMUaFiAByAESBIAP8YOKACNKBgAMChQiBJYKIWEkThD8SgYYotCKIkBMh4ojCGjJSgAAIADGCARaEGDsTiCtRiiIYeFMERgglhIgAgYKEAIKACAAShIKFhCIBQISACLgaAkSSIhgoQEEhgghAEgISEEAPCMigBACAAAMBgASCgAYEGMgQIQiAE4jAESKAAAACISgAFNGJAYYhIYYoAEIkohBACAAoQAACABgARKAWCEAAAAIkoDIiIAIoAEAEggAUIAGPBknwAiwCgYhAAAhQgShGCBGoKCIpFIKoIBIgAYSACJASACACKEGCAhQgiAAQAYAACgFCABEiACAAAiIAIgAgAAixgAAABIoEEYIAQAABIAAH/UBAAAAMAoACgSAEQAECgEACABgSIoGAAAgAEQCAAihBIgUojAJEAIABqIAQAAAAAAAABCAABIAAAQhAFIAAAgIgEAGAAA8HdNAEAoQYhBCCACQAgANogEIiAFIAOEgAQoIIKiJCABABIAACAhAQAAACgAAAAAACABIAKABACAAgAgBCAhAVIaJAEgJAFCgAQAXyuDIigYCACBABhAiCEiAiBBCCoCSIEoAAAAEgAgBIACIAEigIICAAAASAAAIAEoAAAgAgAAAAAAIAUAIARIACCCAiABQgBGAf9MC4oCKBiLIoACEhoCGCABIgAYKIAC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KqEiSSMRhCGBISKCAksUaBrmhAE4KAAqkigSg+TCg3QYKFKEIAIog1GIhFgojTgoILEoskiiIY04RSg0SEigIihIJqFBKEKDhoIGoCGAgoIEIigQCAAAaigipGJIQihKISQkJKQiUoCkIkgwKEjnsiAhAuCCAYCCgoECIiAjoSawaOFGQShihoDViASDtkgSCISQKEgSjCQSeGiIkiiJNkiMwiiM4oRD6IMEi0KLYYkBWKAkIKQkGGIAIhBIpEKApCQSKoEjhCSmIiAjJIKiKRJig4OEBGKISCgSRigCAEg6AgAAEAgAEqAiSIABQCiSVAAAEBioQgAAAEgAhChGCBIoQiiBKEYIGDAojCIBAEIAIIIEKAAAAEhCEqAhWAAQCEIAGijCSCCEBEoCSgGAJAIAQoYPEgAAACggAiCRKCgaAiKEIjAohCABhBYoJAIYhQgAKIEQSAgiEkAIg+GCwkjghIIBAAAgggQYQgAQGCQEgAIiAABKASIAAEgoGAAAgoACIAQiAE8TCCACKBgAAAAAAIAESgFIIIaChgRACACAAhJCAIBCyEgAIAIAAEiAhIWCAkgYGgIAEgAgAgCAIQJIYioCEiCCAhIiAIACAIAhEggA8GvOACCCAQAAABIyQhJCIgAAWEoxSACAARhIIAIigYMBGACEhIAkIlKIAABIIIShFEIAAIACGBgoKICBAyAhgYGBgaESWICEgYEEoCQAACIAIIYEIPSe3wCCACABIKIhKAAYQiCBhITEGAASIAZCACIyACiBAAAygIJCSIghQijESAAqBACABABCAAAAACIAAAAoQgAAACAkAgAAoCSABAAUcJ8JgAEgAigSABgYoBIoGIDCGBIigIIBAIEiIioUCAAoSgJIhCCyaCEEhEqhIgAAIAIAIAJIKABCAIABIAQAQoAkBCIiIIICIigAIARIAAAAACLeWIACACACgKESAAAAKIACKAAAKAAAAEiDJESIwSgSSEgAEAgASIQiKCABKACAAQAAICImhAQAQkgSAAAAACAkBEgAIAKAAgAAAN9oCAAiGCADAAAAIiIAhAAAhCgAABAIACIoAAAgASDCGEKABACJAiAiAQAAACIAIAIgARgAgAIAQoAEOAAAKCAEKAAAAADwZIoAAAAAgAKAAgAAIAEoiQFACEIYSBggIQIAAAAAACgAhAAAgAEAgIIC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AoGABACAAgAohAAAoEIoQAhCAAAAIAQAoEJAiCECGoQhBBIYAABIAAASIAIAICSCAiiIggCAigighGgAALBMARIiAJAkSCgYGgQSEgAoGGigQoEqIYYCACKJNBgAhIAGhIQ4QIgBIFaIKGCCIIKFJAEiAIQYKgKAAgCAggQgBmYEYkigI0KACEIASABIGACAoiEAIEIIPxsNACg4ABABIAIATCGCBBggEggiSIGJAQAAgAISKABSKKAigYACmCgSECgjAjggBgAgggEAAACAIwEAKACgIQCISEgghgIAgAQAAADw9c8gASAhgQYgARhCGCIAKEISACaoJIACAKBCKgQAKJAoIAJIACJCSIACIkAIKIACACISoEIAACoCAAAiAIAhAiIAAICCAsKCgkgAAIAIACr4l1YooCgYAABIKBgAIiAmBMBIQAgiSIAUSEgIhACBgAIAKAAAJsgoAFCIACACgAUiAAAAIgAAKAAgIgIiAACCSCKAKAgAIigAiAAoABTwmvsAEiAGIAJCWIACUhISACaoQiJIAAA4KBIAACAWiAEAAGJCIAIAQEgIAAAAAAAiIkgAAIACKAAAKEIogigoaEgAoCJCAIggJgSIACDy1VoYKEIAaBISIgAAACIigAEAABgAgAWEhLBIIQQSRgiNWIwEECiCAYSEGCgYIAIAAEIAAAAAIKISIAEAAAAAAIggCEIAAEIAACIAiIJIz92CgoECAAAAICSBBCiAAgAAACKAA4AiIQQAIAIoGAAAIAQSKBgQiAIAAAAAACgAAAAAAABYAAAoAAAgBiAEIgAAIIgCQs9hAQAAABISKAAiAIACAACJQggAYoRIABAIgQAAgIICKIQAAAAAKEIoAIACACABGCIoACIAAAAAAAAgAgAAACAIqAAiAPB+nIACAAAAAAAYACBECIRIgAJIhACEAIASCAAgkigAhACEaCAUCAAYAAAYgAQYAAAYAAAAAKAiAAAAgiACiEgogAgAgKhCAEjwrrMgCAAoIIQBoBISIAISGKAigAEAOgIioCIQCIACABIAhFKAASIiiQIAKAAAAACAgoIiBAAYAKAiAEgAAIAEQkKAJAQAAIAkggQiIAIU3yMFQoAEACggAQAAGCggASgokBiJEQggAQAAAEoBSBIAJggggQEig4EiJQKAAiggAgAAAAAgJIIEEqASIgAiAACA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIiACIAIAAAAAAAAAAAAAAAAAby0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAiAAAAAAAAAAAAAAAAAADfXQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIiIAIgAgAAAAAAAAAAAAAAAABvLQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoACIAAAAAAAAAAAAAAAAAAN9dAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAogAIoACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp0gAAAAAAAAAAAAAAAAAAAAAACiAAigAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnSAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIbwAAAAAAAAAAAAAAAAAKCgoKCgoKCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAXCwAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//AsAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr3kGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAKIACKICCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCKHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAACAgoKCgoKCgoICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH2xAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDDvwAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmmcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIbwAAAAAAAAAAAAAAAAAKCgoKCgoKCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAXCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAACAAiiAAigoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/oAQAAAAAAAAAAAAAAAAAAAACAAiiAAoACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcIoEAAAAAAAAAAAAAAAAAAAAKAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANC6DQAAAAAAAAAAAAAAAICCgoKCgoKCggIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfbEAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8MO/AAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCaZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAIACKIACKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr+gBAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+rAQAAAAAAAAAAAAAAAICCgoKCgoKCggIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfbEAAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8MO/AAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCaZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAgAIAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACt2wAAAAAAAAAAAAAAAAAoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BcLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHgAGBgRgAACABEAhD0YxBBBJEhRQEAEAEAIwBEhYkQYgTHAwQhAIgMiiNLExxNChBJEIIgQAAgIICEIiCgYIhARiQGAAogCEhgwKQOCASCIEAIgCEAIsSgX8sBxgwGMAUQUAUCIABAEwRHEQkQUgcBCiAAWCDQASAQgiJEgQWCBDIJAAogcQgEogBUIgAoCIAgMEogAGgEhA4GCAChACAgQIiGCCCIQGEgAIAADAoQPg4XhAUGCRBCAAAABiERIBxGAhEEgBMAiACEkQqEVhIRAAgAQAAAICCgbEowhRJIxEkAwAAAIsygQASIAIQKAIAAAAiIhISKACDoSIQCAAAKCCiEgASP0oMABAEhMQQBAAAAAAAAACAASoBgUEAEAgQBADMEQQAAAAAAAAAICKBARYIAIQAAEAIGBAIAAAAAAAAAACgEhiBAIDyskIAAACAAUAEAAAAAAAAAEBICAASAEEoKAAaAgAAAAAAAAAAAAAAQCgBAIEAKCgQCAAAAAAAAAAAABiEgAESABteGIzBGBaUHBLDkRyFREQEAAAAAAAAKCgYIoPzGCxM0YxxFJgUwckhsijSSCHxPCgWZEGFRAQAAAAAAACAAhgqMTiHgyiDMRiQKIE2qCOPgSIxKIMzGIUIAAAAAAAAAAAagpM4jRguGBKHgrBDCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAEAEQBgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAG4RRABgQYHMIVGIRE0YSIQmCMlCBEyCETgYgBEUCEmRGEMCABAIIoQgAkEaJFNIJqwhiyESKElCDKAygYSEOAAWqCGBIolDCAAgwihAKIMTSEjIOBCIghIIIKKScBioIhggQigjJQIiAC8ZRoQBhRQ0ShZMSJREEgCEEDQkwCQYSImBwRhEgRJFCCIYAEGQJAA4QQBIMskSRCgDKEFDAsAYKoKC8SgYIiIShSgCIiIAgCKBghER6IGCASaoIYSMA4wCACKKAYmBgpEoIBGoNAAighJaDgAgASABgcRIsChBCAAihAAAACAjQQQYQAggAYEARIkRBIQYKBISQAggAhAIAICBQigBgQAiAIEgAxCYKIQSgAIAACIgMigAgCIBABIY8HRSICEBACCCEQiBEoAxGBIoAEoCAIACgAIiKACBIAKAAgBEICGCAhIiIAIAAKAiIAEqAoACACIAgAIAEAggBEIqJAIAAABIACCCAkIosFsFABAFGAAygIECIiACGDgRGEgogRIAABIYgwIAIAIAICICABIoACKAggIAAAAAIAIAAAAiAAAiECSCAiIAgAEgBCCCQgEAAABvzQsYABUEOECIAYMhIWKDOBIoEhriFAIAIjgAKIBFKIIBgAIAIiBiQiAhAiIiIiIiKCACgAIggYKCAgAoAIACKAAohJAkgIaCJCYCACAEIIICAIAEIvChJABACDKAQYhhwigYIkqSJACEOBhggSIoEiIYGIkiARIAIiIAMiohIgKLIUySFDakEoGMAUCoEiiAAioCIoAiAQAAACCjEiKgISgYkChEIhJIIkIoAIMEIKI0KABCAID0qkggAQBMIQgAQSAhAioBhIQYGACFCBggwhggQwiAAoABAACAASCBEYgRCBAIAKAiAIACAAAAAAAAABKAQgSAJAIAhAAAAAAAAPCKwgBAiAJgQSg4gAIgBSIAIAJEIiggAgBEgAGAAoACQWCCILIkgkMEABCoIQASAIACABISACACIKESIgCAAhAIgAEAAAAAIhgiIoAEKID0uCQAAAAAEMgYAADEAAAQKIECABgAABAIAECoIRIiAIEQhAIAIgASKACDAhgAACiBAAAAwDgAOAAogAIAgAQigIQCgAQAAADw4cWgGIqKAjgAMhgiAAAAABoCAAAAACACAKAiACgAACgAIAEoAACAAgAAKAAiKAAiIAIAIiACIiIiIAIgBkIAgIICIyIEAAAoAJ9SASAIAAAoADISIAEAIiChIxQSAIABAAAgAgAAIAMAAAAiAIACACCCAgAAAACAAgAAAAAgAiCCAgAAAACgIoACEUBB4UIEICgBAAAggQIgAoARAQAAoCEAIhgAEgAAIhIAACIaAqASIgCAAiIiACggggIAAAAAKAAAAAAAAAAAgAQAACAEIiIAAC5ZgCIBABgSAACAARIqARIgARIgAxIgARIqAQAgAgAYEgAiEhgAoCMSAAAgIgIgAoACAAAAACACIgAAAEIqBCAGAABCSAAAACDyNdsAIAIYIAMAGAASABIAESImIQEiAAAAAAAAACoCACCCAgAAAAAiAAAAACACIgCAAiIoAAAAAEgASEgASABIAAAAACbx5UoAIAEUAAAgggOAAQAAGCggAgAoABIgAoACAICCggQAAIACAAAoAAAAgAIAgAIiAAAAIiIggoICICIiIiICACACYgAAAC/yDCIAFCgAKBgAIAEoKIACIgAAoCIAIAIAAKAkAAAAGAAAAAAAAAAAAAAAgAIAAAAAAIACAAAAIAQAAEggRAIAKC/7DSACQIECIhQSAAAAgAIAACCCIgESAAAogIECKAAAgAIgAoABACIAACCCAgAAAAAAIAIAAAAAgAQoAEoCECIiggQgAoD0ns4AigEAGQEAIgAAFBgiIgAAIgASKCACAAAAACIAIgAAACIAAAAAKAAAAAAiAAAiAIACgAIAAAAAQiggBABAIgIAAM+UDRi6AiIaQqEyGoqiIYCBoRISIhiAIYHCISCiEhgoKCiAASiAAiIoKCgaAiISIiohAQAYIIICIAIiIAIgIgIAgAIiKKAiIIICKCgAKiQkIiSGBCqGQqJCYhOiJiACIAJPI4KCgoIRoSEooCITISIiISGxEYICPiEoFoHjEYIhARqCoyESGgISACoCKCgAOgJoIIGCAyoCEgAiKAAooCIoIAIAIigoKIACgIICIgCgIiCEpCRCaoIkJCQEQiqkJiQqhhICgPLbmCgqiiEBKBgS8CEhGBpBoSIYEqAiGBIoGyIYEqAiKiEBKoKhIQAAKoKhQSgqggFCKoIhASoCEqAiAKAiAKAiACgqAgAAoCIiACoCACoCACoCSEIqAkhCKgIsNEIqciHSMiSkIpAiEPGXNjhLIo8j4UEBIR4RGoHyISEyGlERKDqhESgdIRqhESgTohMagSKiExqhKCh6qRFIEiaIkySPI+FFlSEhPhGgZCqiExgoKCIagSICgCIiAigqIgKKoiJqiIIkYYI4Q1IoRBErIiYBKCoiAigiIoCEIqJESoQiokQoKCIfJLTCpiJugiFIEm8kBCgiGgEgoREoHxKiERgVgSKDgaIiOiHREbIhohMagaIiKqERKCqiExoBAAA6oVUoKqISoGQoOiGBIiIigaIiIoCCIgIoIiKAoiKAAgAAACgqAgAAACgiSqRkKiICQigiSgQiIk5CK2QoJpIiACddKCoiA4CiExhQERIYFQEaoREdISgaARURoREagQIiGoGCIqIRAICCohNKhAIASgQ6oREoAAAAgAIigKIiIoCCIgIAgCICACgigAIigCIiAkggIqREIOIklCIiJlMiK2QoJhJSERRrTYCiGgAoIAEfEqIRGB0hIhLQEfIhISCBMiEiAKASACIaAQCAIqIRSoQiohKgZCgAKCIiEoACACIAKCIiACoCAAAoIgCAIgIoKiICKCKApEQASEIo4CSUQmAiJyQrRCpiIiEU8BHpKCqiEwAAElAREhpRESgy0BEiAhqBQiECIKITAKARAAAoIKIRKCI6ASgigIGCIqIRAAAoKiICACIAKgIAACgAACgigKIiIoCiIiKApiKgRCgoQJIiKCJKhCICQAE/3Y6iIiIAIIEBHSEAFYGiEhgVgaITEhWBohEagaIiGBqBgiICAAAgohGAggEAGiEBABKAIgIoKCKAoiIAKCACAAAqIgKgIgAAAIAiAkqiIiIAIiIkISKgRCgAAPDcQSgqIgOAIgIAEhgVAQBQEQAdIRQAACIAABoBACggAgAAACIagQIAAAAAAAAAAACAAgAAAAAoIAIAAGgiACgAJCkiYiIhAAAAn5QLicIUENIRIgKAAtARIgIAKCBREQAAgAGACEgAGBBIBCEUGAAoAAAgASgAAAAgAgCIgAQoGBBIBCEUAAAAAABCAAAiQBICJCGACACQ9hDIFBBCEQGAggEAAAAYEgAYEgASEoCoEhoEKBgogUQQQiEBICKBASiAASIAKAAAIAKACEgAGDAoRBDCIQAAACACgCICQigoAAAgBIgAQihf1QSLKEQQQgESABgSIIIBFCoCACIAoCIAgAhIIIIBiUIEISYBACgAIAIAAAAoAAAAgApIIIIBgUQQYhIAoCIAgAIgpCIAAEAipCIAoIKABCIvIkvikpIRS0GPpOFCkhUvI3ZI+SEkSfETQoeUH0K6hPESQoeUH0K6hPESQoeUH0K6hPESQoeUH0K6hPESQoeUH0KyhHES8kiJH0iSRCclLqkbGEtBh6QupFsYLyF0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oYIqgoKDgoGCgYKGAiIoIAEigIOCAxgAMqASIAIiKoKCAigoIAIAIiiAggIAIqAiICICAAAiACggAiAiAiCEJiQiggRIKABIQiokpEIgAkrysqUYKgqAqCIAKCoCACoCEigqIoIEKgIAKgIAKgIoAAAqAgAqohIAKiICQioCgKIiIgAqAoCiIgCgIoACAKAiAKAiAIACAABIIAIAACAEgCQEQgARbpsQ9DgSFpQhI2IRACABKCqiE4AiIqJEKCABgCIBiqIieglIEiaIMySPIWFBGTIiNgEgIgJKhiICKCoiAigiACgiIqAoIkoISBImiDMkhyJEGbIiYhIAAAAASEoEAEoGgIQCAIoigoiCJPH0aSgqAhiKIoKhEQAYGoGiIiIagYIiokQAGBoBoBIaASgiGgEAKCKAgaIiMoAiAqBEKCKAoiIigIIiAigqIgIoIgAAACgigKIiAAAAACCkRABKBCoiIqREKiIiBCgiAHBkCyCCgSKCoREAGBqBAgAoIiJKhAIYGgEoGBqBIiKiEQCAIgIYKCIygCICoGQoIoCiIiKAIgKAoiIigCICAAAoKiICgCICAAAAAIAiokSgIiJCoCIiACgiAPAxhoCiGRIoIhIAIAEgohEaAQBKBCISACADABoBAIAiohESKCoiASgiAEqEIgIoIgAoKAAoKiICIAIAAAAAgAIAAAAAACgioGQASEoGIIQiAgDww7ooIIKBIgIaASCiESgqIqIRKCIAABIAKCIAKCIAACgiIIECAAAAAACAIgIoAIACIoAiAgAAKCACKCoCAAAAAEoEKCIAKCJISoQiokRKhCICAD7MKCoiIgEiAKAiAKAiIoCiIiIAgKERKCgiGgEoIhoBACgigAEqohIAAAAAACgAgCICIAKAIgIAACgqIgIoIgCAIgIAAIAiokQAIAQASgQAAPAzFSggohEoIiqhESgiKqERKCCiESgiAAAYGgEoMhoBoBEaAQAaIqIRGgEAAAAAAICiIiKAAgAgAgAoIgAAKAAAKAAAAACgREoEoERKpCIiSqREKiICgCICgPKx4ZAoHhQakSImIaERICKhESCiEQAAACCjEYCiEhoBiKBRABgSg2JCGhFCgQEAAAAAKCIiACgigAIAoIKABIABgUQQQgEAAAAAoGQASoSCIqJEKCgiQigqKgKA8q3nEEgEKcIhAAAAAAAAIgAiAAAAgCiCBCgYEEgEIRQAICICAAAAAKAiAAAAgCiCBCgYEEgEIRQAAAAAACgAIAQAAABCiAAAvx8PiypEEGISAACACAAAKACgIgCgIgCggoAEIhiQKEQQQgEAIgAAAAAAIAIAKACggoAEIhiwKEIEIRQAAAAAgCQEgAQASEIAIIQISCDy9MUkPikZsRT0SBo+JFnxEmKPlPExJEnxMmKPlPExpEsYLyP2SBkfQrqE8RJCh5QfQrqE8RJCh5QfQrqE8RJCh5QfQrKEcRLySIkfSJJkJyUuqRsYS0GHpC6kWxgvI3RI+SGkSxgvIXZI+SGkSxgvI3ZI+SGkSxgvI3ZI+SGkSxgvIXZI+SGkSxgvIXRI+SEkSxgnIY+U+IEkSXRS4pK6gbEUdEjqQrqF8RJCh5QfQrqE8TJCh5QfQrqE8RJCh5QfQrqE8TJih5QfQrqE8TJih4QupEscLyN2SOhCsoRxMvJIiI4knscgiSGBIYEhgSGBIYEhgaEhGChCIiCBIYEhgSGBIYEhgQEoIIGhIRgSGCKAAioCSAAAgAIiAAAAAAAAAAAoACACACIAAIACKgIqAioCKgIqAioCIgAcBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQQCAAAAAAgAgAAAAAAAAAAAAAAAAAAAAAAQAIA0I8HiAAqCBIiGCKAqCMAKIACKoWCASABgAMAEgCAAiohAQCgIgCgIiAEoCIoAAAAgAIiKCACAAAiAIACAAAiAEhCgAIAgIImBGIAAAD9GCABABgogAMgiAIAACJqAVgAEgAYAIABQAgog4EhAgAAAAAAIiIgAgAAoCKgIiACAACAAgAgAgAoAChIACIiAABIAAAAADDJAACiYBEoAIAiAQATAgAoAAAiACIgIgIAKAAAKICCAiigIoAEgAIAAAAAAAAqAgCAAiACAAAAAABCAAAAKChCKEKABADwsu4AgCGhIoIYEgAiEhIaAhIAAAAgAgAiIIICAAAAAAAiACIgIgIAACgAAAAAAAAAAAAAACgAACAEIiACIiACSAAAAEoC8LiPQAiCAAAiAACEAAAAAAAAAAAAIgAAgQAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAEJCAIAEIAIAAIAEIvDmIgAgIYEiKKESgAIYFqghgAEAAAAAAIACIAIAEAgAACoCKAAoAAAAKAAAAAAAAAAAgQAAgAIAAEhoACIoQigAQgAAgAQi0NoCIAIyGCgYQhISoCMAAAAiIoEoKAAoACIgAoACoCIgBIwCAAAAiAAAIAgAAAAqggIAAAAAACIAAEIAAEIQIQJCKEKABABIAAB/1gQgAgCAIYQBoCEAGAAAhIACIgAiKAAAAAAqAgAoAAAgAgAAAAAAAAAAAAAAAAAAAABIAABIQCECSEoCIAQASAAAzyMPAACAAgASKCABAAAAAAAAKAAoAAAiAABACAAAAAAAAAAAAAAqAiIAAAAAACIAAAAAAEIAEgBIAAAAAADPxIMBgCKBAQAAAAAAgAIiAAAAAAAAAAAASAAAAAAgiAIAIAiAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/hQkAIoACEgAAhBBICAAAAAAAgAIAgSgAgAIQCAAAAAAiAAAAAAAAAAAAAAAAAAAAAIAEKCABQiABUhJIAAAA8LKGICgIIqAYhABwGAgYMBiAAgAAAAAAhAAAgAIAIAIAAAAQCAAAAAAAAAAAAAAAAAAAAAAASIAHGIABGCJKAkIiKBjAQdAYC6KDIQKAgoKSGIACKEAoEgggAkAIIiIAACIAKKAiAChACAAoAAAAhAAAAAAAAAAAAAAAAAAAQAiAggQSACADEoCBhAQAAI9GjQEiGBIAAAAAgAIShIQAAAAAAIQQCIEAAIFACEAIEAiEEAiBAAAAAAAAAAAAAAAAAAAAAEIgIgQAACACAIAEQkj/sQuCIhAoAiAC0IghAiIgIkJICCIAQAgAIAIAAAAAIAIAACgAIgAAAAAAAAAAAAAAAAAAAAAAIIQiJIQDAIAEIIICIIH0H7IAAIABABISAEAIAACEIAIAKAAAACIAiQIiIgCBgQAAAEAIAAAAAAAAAAAAAAAAAAAAIAQAoCKgNACAggIAAADelgCCIAKDAYSEACAjgQGBAAAAgAIAACgQCACEAAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAASSICEgoQhBCiAAgBpARiAAQAiYIIiAACAQgiAAqAiAAAAjAIAKEAIAACQKEAIhAAAAAAAAAAAAAAAAAAAAAAAhAAgAoCEAQAAEhKABAAm0R4DACABACCIASACgAGAAgAAAIQiAAAAAAAAAACBAAAAhAAAAAAAAAAAAAAAAAAAAAAAEgAAgAEiIIICICIC7tsAIhgiKBoiUYgYjRgWKAIiiyGNGCKBKCACIgAikCgQGAiJAiiQKIGMAkAIIoGBAIkSSAiBAAAAAAAAAAAAAAAAAACEAEhieBhYGoShEhgqpSZYaiKkJlgiQhSveYEjqaIYgTaIIcIoKIkROCjggqIhjRgihYhSiCIiEAiLIiACh4IohAAoYIIiKkJICIEAImCCMCiEEAgAAAAAAAAAAAAAAAAAQAhCQmgSGFhYEkohoRI6pEEqhwIgohZIH+QHKqoREqAiGiFRiCqCIVGIiyIYEoWoIgCBKiICoCIAjKIiIiiFCISgIgCNKCoCUIgAUIiJAlCIAAAAAAAAAAAAAAAAAAAAhABIQiqCoUFKoiIYGiSkIhhIQioihII0ES+XibMkcihCHBniE6ERiYIioxGgIiKEhIkiQliIgSKEjSiLIiLwiCgiakjYiDQYIjhDUijEnSirIiZBCIsiIkCYKEBYiAAAAAAAIAhKiIIkYYIYQYVCFBFCAQAAAABCKDJKhKIiOoGBoiIYSqRoKDoIAB9fCSgAhIESHhigIiIagQIAhZgoIoSNKIkCACgihIyiIiKEhRgIKCJAmCgqIgKMAgAoKgKEhRgIAAAAAAAAAAAAAAAAAAAAAEgoKqFEgKISEigqIoIkhKISGoEEX2sMIIJImCg6AY0oKDIaERgIhIUIAAAigKIiIoSMIiICAIAiAoCiIiKEiQJAmCgqAkAYCAAAAAAAAAAAAAAAAAAAACAkhKITWoSiIjIagYKCoVWAohIaAfCRvaAogoSJoiIihISLIiIaQQgAgQAAKEBYiIEAjSgqAgAAIAIAKiICgSoiQhiIAkAYCAAAAAAAAAAAAAAAAAAAAABIKCqBBCgqIYGEIqNVgCIDFBQ/PgiCOgEAOuGBgSIioREoIgCEiSJCGIgiQhiIIgKBiyIiEAiAoiIAjDIoADAoQFiIIAKEgQAAAAAAAAAAAAAAAAAAQBgIoEQoIkqEoiI6oUQoIhqhVUgoIgDw89WAohFAGKgRGhEoAhqBIgLAKIkiAoAiAoAiQoiCIkIIAIAiAigiAIwCQJgoIgCEgQAAAAAAAAAAAAAAAAAAQBgIoEQAWoSiIiJKhCICWiWEIqIRAP/tCII6QdiIsiiiE4QoIkCIMihggYUYCEAYKEJYiIFAGBgoAgCAoiIigCICgIIiQtiIIiIChIEAAAAAAAAAAAAAAAAAAAAASiQEGqFEKCKgVUIoGqFEgCKjUUDxqOOQKEQYLSiPEiICgSIAhKARAABAmChAGAhAGIgKSAAYkCgmBCEUACAChIkiAkAYCAAAAAAAiIAEIhgQSAQhFAAAAAAASCIASgSgREgoOqFEgIqhUSgiv9kPh4KmBCnKIQAoIIEBKCCBAgAgAgAAAIiABICBMigmBCEUAIEAAAAAAAAAAAAAiIAEIhgQSAQhFAAAAACgREIAACgAQiIiSEiIIiAk8j1bEEgkUYoUAIGAAYWoIhgAAFCIAFCIKACFiAhIgYABgUQQQgEQCACBAEAIAAAAAACACEggggGBRBBCAQAAAAAgJAISQigAABgSQogYGgQir7RH4pKSEUtBh6QuJFnxEmKPlPEhJEnxMkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxMkKHlB9CuoTxEmKHlB9CsoRxMvJIiR9IkkQnJS6pGxhLYYekLqRbGC8hdkj5IaRLGC8jdkj5IaRLGC8jdEj5IaRLGC8hdEj5IaRLGC8hdEj5IaRLGC8hdEj5ISRLGCchj5T4gSRJdFLikrqBsRR0SOpCuoXxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxEkKHhC6kSxgvIXRI6EKyhHES8kiIjiSfQwcAAACAIQIihAAAAAAAKgIAKAAAAAAAKACgIqAigSoCKhIoAgAAAAAAAAAAAAAAAAAAAACBAAAAAAAAKAAAAM+aB4KIAAAAAAAAAAAAAAAAIgAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAAAAAAAAAAgBAAAAAAAQOGLBRooIiICACIohCACoCIQCCYIACgSIgAAAAAAIgAwKAAAgYMCgSKDAoEAAKAiAAAAAAAAAAAAgQAAAIFISEgSgCECSCAGKgRiABDxlPggAQAAEiIgEogBKAAAIkgAIAIAAAAAgAIAKEgAwCgaAiIAAAAAAAAAAIAIAAAAAEAIAABACEhCSAASAEIgBkgAAID06ikoIKIiAAAAgAIoACKBQAgAgAMAAIACAAAAEAgAAIEQqCKBEAgAgAIiAAAAAAAAAAAAAAAAhAAgASACAAAiKEIASPB0ygAAgKgoAIQAIAKEQMgYAAAAAAAAKAAAACBCCAAAAIRACAAAAAAAAAAAEAgAAAAAAAAAQkIYQgAYoBQAACAEQgA2g0IIAAAAIAkAAACAAiIAAAAAACIAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAABgAAEgAAIAEAP8hikIIAIIgAhAIIAKEAI0YIAIAAAAAAAAAEIgChCgAAAAQSAgAAAAAAAAAABAIAAAAAAAAgCSEJAEAEiAlBAAgBADQtgYiABIgBKAiACIAGAAAABIAIiIAAAAAAIQgEQgQCACC4IICAEgAAAAAAAAAAAAAAAAAAIAkBIAkBkIAQhJoSIADACD09WgoACgAiAAAAAAAAAAAAACAAgAAAAAAgQAAAAAqAgAAAAAAAAAAAAAAAAAAAABIAAAASABCIIQEAAAAx8MAABIAAAAoAIABAAAAgAIiAAAAAAAQCAAoAABACAAAAAAAAAAAAAAAAAAAAAAAKgQAKgQAAAAAKAAASP9+DIABAEKAAqIAAAAAAIABAAAAAAAAACgYAIQAAIIAgQBCAAAAAAAAAAAAAAAiAAAAAABIACAEgAEiIAEAAF84BwAAgAIAACiBAAAAgQAAAIQAAIEAABAIAEAIEAgQCAAAAAAAAAAAAAAAAAAAAAAAAAAAGACAAQAAIAHeTiAoCAAihDAogQAgAgAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKFBAIAEQgAU4FeKIggogQCJAgAqggIAAAAQCIEAAAAAAAAAAIQAAACBAACBAAAAAAAAAAAAAAAAAAAAICQEEkJCgISEBEhCQgAAgPSNZQAiAIACKEAIACgAAIEAAAAAIgAAAAAAAIQAAACBIgAAAAAAAAAAAAAAAAAAAAAAAEhCAEiAAQAAAABI0L0BgoMCEAgAIAIAAACEAABACAAoAAAAAAAAAAAAhIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAABISAEoBAEIvcwEAAAAAACACAAAAgQAAAAAAACKBAAAAAACBABAIAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAQgAA0EIFIKgiAIGEEBgIEHgoCAAAAIGBAABACAAAABAIAIEAAAAAAIEAAAAAAAAAAAAAAAAAAABCAAAgBABIABgAABjwPFYoQAiCIBKIiAgAhCgAgQAAAAAAIgAAAAAAAEAIAABgggAAAAAAAAAAAAAAAAAAAAAAgIQEAIABGAAYAICkQUDRVQEAIoEAKAAAAAAAAABACAAAAAAAAAAAAFCIhAAAAAAAAAAAAAAAAAAAAAAAAAAAgISEBCAEGCAEAAAA7zUMIiASiMIogiiEACACAEAIhQgQGAgAgwIAgQAAhABACIRACIQwKEAIAAAAAAAAAAAAAAAAAAAAAEJISCAEICSFgYEhBEIAGBz0NvigKo2oKIUIiTKIooMiAjAojAKEQAiBEBhICAAqAoEAEAhACACFCBBYiISEsCgCQAgAAAAAAAAAAAAAAAAAAABCSABIGiQEWBhIElgaBBhIElJCT0UKKgqEjYgqAoKNiCoiAoQqAlCIAFCIABAIACACKIQAAACFGAhQiABQiCgAhQgAAAAAAAAAAAAAAAAAAAAASEIAGiQEGBqkRIChQUoESqERMBFPPIizJHIoQpyhI2IShpgoiSICjBIIhIUYCEAYCISEgQCHiIFKCIkkYYIYQYVCVIGhFIQAAIQoIoSFGAgAAAAAIAhKiIIkYYIYQYVCFBFCAQAAAKBEAKBVSgQaoRRKBBIapUigkRqDBO+4gaIiIoSJoiJA2IioIiJAuCgChIUYCAAAUIiBQAgAhISBAAAAAFCIAISFGAiEgQAAAAAAAAAAAAAAAAAAAACgREIAWgWAIaFEABqhRKAREgAvdIyiIiKEAIKEjSgqIgIoiyIihIUYCAAAAACEKCJACAAAAAAAEAiEhRgIhIEAAAAAAAAAAAAAAAAAAAAAAEoEoFUAEhhKBBIaAaAREgCflo2iKqIAAISBKCJAqCIihIUYCAAAAABQiIEAhRgIAACEgQCEgUBYiIFAGAgAAAAAAAAAAAAAAAAAAAAAoEQAWgWAIaFEgKERABoBFPC9HiiKIgKEgSKEKIMCwCiBAAAAhIEAAACBAFCIgQAAQBgIhIEAQBgIQBgIAAAAAAAAAAAAAAAAAAAAoEQAgAQggQGgEaBEABgALymMoiIAAACFiCIChCoCAACEAAAAQAgAhAAAAAAAhIEAQBgIAAAAAAAAAAAAAAAAAAAAAACgREIAAIAhoUSgEaBEABIA//2FoigiQBgIgCICgBIIAAAAAEAYCISFGAiEhRgIAEAYCEAIgQCEgQAAAAAAAAAAAAAAAAAAAAAAAEIAAACgEQAaAUIAALCjA4FEEEIBEAgAhCoCAAAAAEAYCISBiMBIgYABgUSEpVgYAIUIQFiIgQAAAAAAAACACEggggGBRBBCAQAAAABKJAQAABgaAaARAIggBCJvUQ2FaEpQghSCAAAAAAAAEAgAAACACEgAGBBIBCEUAABACIEAAAAAAAAAgAhIIIIBgUQQQgEAAAAAAAAAAAAASIAISCDytKgQSAQhJgFQiCIAhCoCAAAAAEAIAISIgAQiGBBIBKEUAIUIAIQAAAAAAAAAAIiABCIYEEgEIRQAAAAAgAQAAIAhAYABgAhIYBKP7kPikpIRS0GHpC4kWfEyQoeUH0KSFC8jdEj5IaRLGC8hdEj5IaRLGC8hdEj5IaRLGC8hdEj5IaRLGC8hdkj5ISRLGCchj5T4gSRJdFLikrqBsRR0SOpCuoXxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CuoTxEkKHlB9CsoRxEvJIiR9IkkQnJS6pGxhLQYekLqRbGC8hdEj5IaRLGC8hdEj5IaRLGC8hdEj5IeRLHC8hdEj5IeRLHC8hdEjoQr6E8RJCh4QuJEsYJyGPhOhM8mnbAAAAAACEEAgAAIEAUIgAQAgAhAAQCAAAEAgAAACEABAIAAAAAAAAAAAAAAAAAAAAAIABAAAAAAAAGBR/HQiCiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P3OgAhACIQoEgAAIhAIgSgAAAAgAgCBAAAAAAAAAAAQCAAAAAAAAAAAAAAAIAIAAAAAAABISEiABEIAAAAAEPHRXQAAABAoAgAAAAAgAgAAIAJACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCSICBBAAAAAAA8HZIAAAQCKCBAAAqAoEQCAAAAAAAAAAAAAAAAAAAEAgAAAAAKAAAAAAAAIACAAAAAAAAACAEAEIAAAAAIPQiGgAAgYACgAEAAACEAAAAAAAAIAIAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAAAAAACABCAE8NudQAgAAAAAAAAAAAAAAAAAgQAAKAAAAAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAIABQgBIAHDIDIQAgQAiAAAAAACBAAAAAAAAIAIoAIEhAAAAAAAAAAAAJAAAAAAAAAAAAAAAAABCAAAAAAASIIQESCACn5oOwBgAAAAAAAAAEAQQCAAgAgAAAAAAAAAAAAAAAAAQAgCACAAAAAAAIgAAAAAAAAAAAAAgAkhCIASAAV25AAAAACACAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAIgBCAAAA/2gNgBEIAAAAAAAYAAAQCAAgAgAAAAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAACABAAAEvDoIgAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAgAQAcIUKAAAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAACAEAAAAAAAgARiA8aqLoCiCACIAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAAEJCAAAAABTwKicgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8OhJAKAiAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAgAQAEgAASPAfPCAIAAAYAAAAABAIAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAPBcIwCBAIUIhQgAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAAAAAAAAAABCAABIgAIAAAAA8L7jgCIIIiIqAiACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgASEhIIAQgBABIAAAutgAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAgBABCAABIABJIAAAUH4UFAACQKISQiIEAAIGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAIAEAFgAGAAYGPCk/ICCggIigSoSKBIIABAYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEJCSEiABEiABEggIYEBgEHxPeegKIkKIoNyKOiCwSiCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAACAJCSEhCSEJISEhAWAhAQSQvBkFIAaCISLIiIWWIgiAAAAhQgAAAAAEAIAAAAAAAAAAACEKAAAQBICAAAAAAAAAAAAAAAAAABIQgBISgSApEQiGBolBEISMBFP1YwRREJUgSEmoREAAABAGAgAAAAAJCGCoIQoSBImiBFUKEQRIRQAAECYKCIAACQhAAAAIAhKiIIkYYIYQYVCFBFCAQAAAKBESgQAAABKIqIRGiEIiChI8Ll1AACQKCIaAQAAAISBAAAAAEASAgAAAAAAAAAAAISJIgIAQBICAAAAAAAAAAAAAAAAAABCAABIAEhKJqIRGqFEAADwhiOAIgIAIh4YgSIAAEAYCAAAAAAkIQAAAAAAAAAAAECYKCIAAAAAAAAAAAAAAAAAAAAAAABKBAAAAEomohESAAAAdyEAgkCIAh4YgQAAAISBAAAAAEASAgAAAAAAAAAAAISJIgIAAAAAAAAAAAAAAAAAAAAAAAAAgAQghCKiERhKBAAU8O0sAACEIgCEAAAAhISBAAAAACQhAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAABKpEQAQkoEAEIASgUAEgAfLA0AgIIiAhAIAABQiIEAAAAAJCEAAAAAAAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAEIAAEoEgKREAFoEABgAH7EBKAAQCISEIgAAQFiIgQAAAAAkIQAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAIAQgBAAgBKBEAAAArycHgUTQgkIBhBAIAACEhRgIAAAAQBICiIAEIhgQSAQhFAAAAAAAAAAhAAAAAIiABCIYEEgEIRQAAAAAAAAAAAAAoESACAAirzEFhUgEIRQAAAAAQAgAAAAAAACIgAQiGBBIBEABAAAAAAAAAAAAAACIgAQiGBBIBCEUAAAAAAAAAACABAAYgAgAIq+oCosoRBBiEgCEIgAAAAAAAAAAAIAISCCCAYFEEEIBAAAAAAAAAAAAAACIgAQiGBBIBCEUAAAAAABCAAAAAAAghAgaBCbxGz8kLikZsRR0SOpCkhUvI3RI+SEkSfESQoeUH0K6hPESQoeUH0K6hPESQoeUH0K6hPESQoeUH2K6hPESQoeUH0KyhHES8kiJH0iSRCclLqkbGEtBh6QupFsYLyF0SPkhpEsYLyF0SPkhpEsYLyF0SPkhpEsYLyF0SPkjpEsYLyF0SPkhpEsYLyF0SPkhJEsYJyGPlPiBJEl0UuKSuoGxFHRI6kK6hfESQoeUH0K6hPESQoeUH0K6xPESQoeUH0K6xPESQoeUH0K+hPESQoeELuRLHC8hdEjoQrKEcRLySIiOJB9uC4IAAIUoggEAAAAAgQAAACQAAAAAAAAAAAAAABAoAgAAIQAAAAAAAAAAAAAAAAAAAAAASIACSCCBARgAFB+eCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPNQOIAAASIgAgCIMEAAAAgBQCISKABAAAACABAAAAIgAAKAAAAAAAAAAAAAAAAAAAAAAAALBBAiCCBABCIAIAEPH4xwAAACiAAgAAAAAAABBCAgAAAAAiACgAAAAAAAAAAAAAAACBAAAAAAAAAAAAAAAAgAQASACAJQQAAPBxuAAAABIAAIgwSAAAAABIACgASAAAAAASAAAAICICACACAAAAAAAAAAAAAAAAAAAAAADAIYACAAAAIgAA8OUXAAAAgQAAACAEIAEAAAAAAAAAAAAAAAAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA8H9LAAAAAACABIABAAAAgAIAAAAAAAAAAAAAgCQIAAAAAAAAACEAAAAAAAAAAACIAAAAAAAAACIAAADf6g8AAAAAAEgAUgAYAAAAIgAAAAAAAAAAAACAJAgAAIgAAAAAAAAAAAAAAAAAAIIAAAAAAAAAEgAAAI2hIBECACggggEAAAAAAAApAoAhAhgiECKEAgBACAAAIgAAAAAAAIIQCAAAAAAAAEQiAAAAAEhAAgCCAMJIIAQQCCIAT4IJEgAAgAIAAAAAAAAAAIACGAAAQiACJAAAAAAAAAAAAAAAAAAAAAAAACACAAAAAEACAAAAAAAAAABPyQ8QAgAoAAAAAAAAAEACAAAAAAAAAAAAACgAAAAAAAAAAAAAABAIRAAQBAAAAABIQgAAAIAoBEgiAAAAb/UHAAAAABgAAAAAAIAEIAISABoCEAIAAEAIAAAAAAAAAAAgSAgAAAAAAAAAAAAAAAAAACAIIAQAQAggAvCiSQAhQAgAAACEAAAAAAAAAAAAAABAAgAAAAAAiAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAEAEAADwUloAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAiAAAAAAAAAPD1kQAAAAAAAAAAACABAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAIASBAAAAB/NCgAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAKAAAAAAmBAAAAH8+BwAgARgAACABGAAAQgAAACAEAAAAAAAaAhgAAAAAggAAAAAAAABEAAAAAAAAAAAAIAgAACIAACgAIgAAcwoAEgAAAAAAAAAAAABCAAAAAAAAISIAAAAAAAAAAABBAAAAABAEAAAAAAAhAABBEAQAAEEQhAIAAADwT0YAAAAAAAAAAIAEAAAASAAAAAAAABIAAAAAAACACAAAAAAAAAAAAAAAAAAAAACACCIAAAAAAAAAT68EAAAAAAAAAAAAAAAAAAAAAACAAgAAAAAAIAgAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAABLwTZMAAEAIAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3lAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAgAIgAAAAAAAADwqUMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHABgSkBgAACABGCAkBEgAAEhCgAQAAAAAKyIYGgIYAAAAICgIggAAQQAAAAAQBAAAAAAkAAAAhiQYpCgAIAIQhIICIAKAAd84CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAIAIAAAAoAAAAAAAAEEQCABgARBCCBCIAAABCKAAAQAKAAhIAAACAAQAQAgAAAIIgBADP7kOIIQFACBAIGkEIhCQhSoQiAgAASEIqAgAAJQKgIhgSQBRUIgCgEQBF5CgYokQoIgDQRCiIJKQiAEAUVCIAKoIhAQAlAgAaAVBEjoIhgCICEtBEKIkkpCIaIQFEQSDxuR0QGAIAjBEIAACBIAEAJCAEAAAASAAAABACIIIBAAAAAAAgCAAAAIgAAAAAAAAAAAAAAAAAghiAAgAAACAC8KOeAAAAAAAAAAAAAAAoAAAAACIAAAAAAABEEAIAEgBBJCCUJAAAQYAEQwIARBACIIIBAABABBIAQSQARAAASQhIAADPjgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAEAEAAAAAAAAAABBAAAAAEEAAAAAAPBatAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAQQAAQQAAAEAEAAAAAAAAAABBAAAAAEEAAADXZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAQAQAAAAAAAAAAEEAAAAAQQAAAF/LAhgAAAAAEgAAIAQAAABIAAAAAAAiGAAAAAAAAIIAAAAAAAAAAAAAAAAAAAAAAIIAKAAAAAAiAAAA8F3agAEAAAAAAAASQgAAAAAAAEgAAAAQAiCCAQAAAAAAIAgAAACIAAAAAAAAAAAAIQCCAAAAgAIAAAAgAvDknoABAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAA8CzroBEhAACAAQAAQhJCACQAIAQAAEgkAIACEiEAIhgAACAIAAAgCAAAAAAAAAAAAAAAAACCIIgCAACAAigAAAAiAB9kDAAAAAAAAAASAAAAAACACEgAAAAQAiCCAQAAAAAAIAgQBACACEAEAAAAFAAAABACQQAAAABJAgAAACAC8Dj0//////////////////////////////////////////////////////////////////////////////////////////////////8= + \ No newline at end of file diff --git a/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw.sig b/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw.sig new file mode 100644 index 0000000..58ac269 Binary files /dev/null and b/SDK/tools/lxfw-update/firmware/e502_fpga_c.lxfw.sig differ diff --git a/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw b/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw new file mode 100644 index 0000000..3e09545 --- /dev/null +++ b/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw @@ -0,0 +1,7 @@ + + + + + + //////////////////////////////////////////9q9/f39/f38/vz+/r48Pn4/P38/v/5/fz7+v/6/fj9/Pj4+Pj8+vr6+tSe//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFBQUFBQUFBQAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQUFBQUFBQUFAQEBAQEBAQEBAQEBBQUFBQUFBQUFBQUFBAQEBAQEBAQEBAQEBAQEBAUFBQUEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAQEBAUFBQUEBAQEBAQEBAQEBAQEFBQUFBQUFBQEBAQEBAQEBAQEBAQUFBQUFBQUFBQUFBUVFRUUFBQUFBQUFBQUFBQVEREREBAQEBEREREQkJCQkJCQkJGRkZGQkJCQkBAQEBAQEBAQEBAQEQEBAQGBgYGBgYGBgICAgICAgICAgICAgAQEBAQEBAQFAQEBAAAAAACAgICAhISEhISEhISEhISEhISEhAQEBAQUFBQUBAQEBERERESEhISFhYWFhISEhISEhISEhISEhQUFBQQEBAQFBQUFBAQEBASAgICBgYGBgICAgICAgICAgICAgAAAAAEBAQEBAQEBAQEBAQCAgICAgICAgICAgICAgICAgICAgQEBAQAAAAAAAAAAAAAAAACAgICAgICAgISEhISAgICAkJCQkAAAAAAAAAAAAAAAAQEBAQCAgICAwMDAwICAgIGBgYGAgICAgQEBAQAAA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AgAAKgIAIiACABgAAAAAAAAAAAAAACABIIEBAAAAAAAAAEABAADPLwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAA38cBAAAAAAAAABIAACgAIgAAAAAAACACAAAoACgAIgCAAQAAAAAAAAAoAAAAgAEgIQEAAAAAAAAAQAEAAC9XBwAAAAAAACAIAAAAAAAAAAAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwpQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAIAgAAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAC39gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEABv9wLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAA8MuBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAACPWAwAAAAAAAAAAIACAAAAAAAAgAEAAAAAAAAAIgAAAAAQAYAEgAEAAAAAAAAAAAAAEQAAAAAAAAAAe88AAAAAAAAAAAAAAIAIGAAAIAKAAQAAAAAAKAAAAAAAAAAAAAAYAAAAAACAIQEAAAAAAAAAABEAAPAsHgAAAAAAAAAAACACAIIgAQAAIgAYAAAAAAAAgAIAAAAAQAEAABKAAQAAAAAAAAAAABEAAAAAABQAAPA/aAAAAAAAAAAAAICEASQgAQAYAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+KAAAAAAAAAAAAAASAGARAIABAAAAAAAAAAAAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCYDAAAAAAAAAAAAEgAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAAAAAAAAA9/sAAAAAAAAAAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAAP/7BwAAAAAAAAAAAAAAAAAgAQAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwwy0AggAAAAAAAAAAAAAYICGBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAB32gDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAEiABEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwS2sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAABgYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCynAAAAAAAAAAAAAAAIAEAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/zQLggAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQvUQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAGAAAAAAAAABAAS8mAQAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAYAAAAGIABAAAAGAAAAAAAAAAAAAAAAC/5BQAAAAAAACEAAAAAAAAAAAAAAAAAAAAAEgAAACABAAAAAAAAAAAAAAAAAAAAAAAAQAREQAREAAB+/wAAEAIAABACAAAAAAAAAAAAGBgAGAAAAAAYGACAAQAAAAASIAGAIQEAACABEgAAAAAAAAAAAAAAAAAAn6MMAAAAACUCAAAAGAAAAAAAAAAAIAEAAAAAAIABAAAAGAAAABIAIAEAgAESIAEAAAAAAAAAAAAAAAAAzxcCABACQAIAAAAAACABABgAAAAAAAASgAEAEgAAAAAAgAEAABgAAAAAAAAAAAAYgAEAGAAAABAEAAAAAE+bC4IAAAAQAgAAAAAAAAASAAAAABgAGAASIAEAIAEAACABAAAgAQASABIAEgASAAASEiABgAEAAAAAFABBAADwGzUAAAAAAAAkAAAAAAAAABgYABgYAACAAQAAGBgAAAAAgAESAAAggQEgAQAAACABACABAAAAAEAEAEQARAAAv10FggAAACQAAAAAAACAARIYEoABGIABABgYgIEhgSEBGBIYABgAgIEBGAASEhIYIAEYACCBARKAAYAhARIAgAEAAABABABEAACPdwkAAAAQAgAhAAASABgAICEBAACAgQEYEgAYEhgSABgSACABAAASACABEhgSGBIYAAAYEhgSGACAIQEAGAAAAEFARAFABABA8eqUgAgAACQAUCIhAAAAAAASABgaAaARGgEAABgaAYChEQAaIQGAIQEAEgAYAIAhAaAREgCAARgaAYABABgaAQAaAQAAUEQARVREAEUEABHvPYMRVChEESEUAAAkIQAAABoBgCEBACAIWomCBCaIEdQoQRQR4hEBAAAAGqERAIABAACgESAISqkxSBImCEGHIUQRIRQAgKERAAAAAABFBFBERCBYREqIgiTx9zcAAAAAIQAAAAAAACAhAQAAoBEAAAASACABAAAAGqERACABAACgEQAgIQEAAAAAAAAAAAAAAAAAAEUEAAAAT34HAAAAAAAQAgAAGgEAEhIAEgAgAQAAAACgEQAAAKARAAAAAACgEQAAGgEAACABAAAAGACAAQAAUEQAREQAQQAAO64AggAAAAAAAACg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IQBACCSBJCQAhBAIIQAAIAQAAAAAAEACABgAAAAYAAAAAAAAAAAAAAAAAAAAABgAAAAQBCgQBAAAAADwjJOAARiEABKAARiQGIARkhgAEoAhAQAAGBIAACABAAAYAAAAIARCIIQEIARCSABCAAAAQkiABEgAQkiABAAooCGAIyEBKBIogAIaAgDPjQIgpCIAACHAIhACQRKMAYACKgIghgJLFAAAgAGABJAkACIAKCiAJCEEAEgAAAAAQAQgAQBIAAAAEAEAQgAaggOCkBQYigUoRChIAABIz2hOCCKQGDAoABAIhIQYAEIAEiAhBAAgBhoEgYCBBBpEAShIIIEBgIQCGABCAAAAAKAkQAEAAAAUSACABEAIRCAEQkJOGKAkABgAEiABKACvN06IAiaYEoQiJEDIIhASmBQYgAQoGCCBJAaAASABgRIgBFIRRCJCIhgYACoEGBIAQkgAAAAAIMJBAAASSBAhBABIFEAIRgRIGGhCSgFLFBISEihBKABCIAJfPQIigCFiYYMDkBiMY4EjQgIAgKgSABggAUgggSQhAQCAAQAAAABggUhgQUJSKACgElKgFEggJIQBAICEJAQAQiAEQkIAAICUIUJDggygIUIAMoABEvCaZChACAAiABKwGBIIAACAAZAUIgCMBhhIGAAAgAEAACChEiggoRQYGEgASAAqIwRCEIiEhAEAgCQEAAASSAAQJAQAAEiACCIoAAAgAQDfWA8AGCKMkRKBhCISEAIlCACCIkIYACAEAAAAAAAAAACAAgAAAEIoAAAYgAEAAAAAAEIAgAQAQgAAAEIoKEyBBCABACAEgAH/awUAAEEAACgAgQAAAAAAGAAAABgAAAAAAEgAGEAIQAQYAIAEAIAEAAAAAAAAAEIAIAQAAEABAAAgBCADAACPeYmhIRISEpAYIKEhEhISICGhQYACAAAoACIAAEIiIAKAoiEAGAAASgJCAACABCAkBEIAAAAYAAAAAIAEAABIKCiAA0qCgiIEKCgoOABIEvC1vwCCgQAAEAiJAigAKgKABIAGIgAAgAEgAgAoAIAhIgIgIQIiQgBISABCAAAghIICAAAAAAAAAIAEIAQASICBBICBAUggohIU8KNqAAAigwESACgAAIGBKiIBAEAkoSJCACgAAIACAEgoIAIgAYABIgAAAAAAAACABAAAQoAESABCAAAA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JJIUQhKgIlIASsIUehKBIYKBkiKAoiQrIRiACEgoSoIipTSEOEKAgSghqBQagqVSSEqCJYEkDEqhJKAUQhIAcLgHAAAQAgASICIEQoRIIkKNSABIgRKETIGlQRhBQAQAACJCAABYQhIYGBgghIIBGSQBEiACKCABGACAgoQiAYAFGIAIiBKAgoUEEgCAAShIGCABAB2ZIGGDjMIoIBKoIoA6GKAhhACAgQEgAhhIKCgAQTAYAEEYgIUiEYSCAkEAICICgARIAABCMCgAIAOCgAQAoBQAABIAgISCBABISqFjAFhIgBQBAEjv5g0AGIABABgASBAIAIkCKEgAACoEACIAAABKQigBIIQEIAIAQgDAJDiAAkACAEYiAgAAgAJCKIQoSIAEEhgggQGgJACghCACAEIAAL9SDxgYAIQAACiABYEiABigFABCAEwERACABEQooEKAAhJJwRQoAEkSRAREgARIMqAUABIAEigAIiIgAQAgggIgJAISIIIkAyIgAmKgQoACKoaSRAB/P84iIDgYgYFggoQAEhAIgyQUKIQEACAiAYAEGICBAiABEAREgAQYAABCQhKABACABICBBUoBAACAgSECAACAggIaJARCagFDJQRgQhiAgYGBARTwcjcYACYoUYIhhUgiAgAgQgiMEgKAIQZCABggIaFBEmIoSAAgAgCgFEgoAEgAYEESAEIAgASEAAAASgJCAIAigSFECIQoEgAAGCoBEARCABJBgARD82v4AIEAACEhQAgSMEIiIAESAAAAIgAAACAGIJEUSBokBAAogAQAAAAAACCBAhgAAEJCABKApEFIoCQgQgiEoCYAGoIEKgIAQAREAEAE3ycCQIgBg4ICACABgxQCKIACAAAASyIARIACEASgIgAWBBY0FABCKExEBEEAgAEAIAIAAAAAAAASACgAICYmAgAgAgAAIEGEBEJKAQClCwAAQAgAQAIwKAAoEiABKAAgMUSAJAQggUEEAEMBEgAAIAEAIkFgQQASEhgAQoAESAAiACABEgAAIgAAGEIqBQAYaIACGAAiEATwjfMoJBgQAgAhgYkCgSNCCoRCEAIaBBIoSCARBAAAAAAAIgCQJIABAEQgBSKABQBIIAEgAQAgAQAAIAEAAIAEAAAQBABEIklBBCDiQgR/OQyKASISIgAoADBIACACEAIogAIYQARMAQCA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAACACIiACIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw4rEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAKAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDZvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAIAIiIAIgAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDisQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAoACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Nm/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAEIgBEIAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADw3tcAAAAAAAAAAAAAAAAAAAAAIARCIAQgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADvfQ0AAAAAAAAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv30FAAAAAAAAAAAAAAAAQkJCQkJCQkJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb4QAAAAAAAAAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmJoAAAAAAAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Iy9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAQiAEQiAkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPfAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAgJCQkJCQkJCQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALARDgAAAAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPqQkAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz9gLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv30FAAAAAAAAAAAAAAAAQkJCQkJCQkJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAgBEIgBEJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDIFwAAAAAAAAAAAAAAAAAAAAAgBEIgBCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO99DQAAAAAAAAAAAAAAAAAAIAQAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwbycAAAAAAAAAAAAAAAAgJCQkJCQkJCQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALARDgAAAAAAAAAAAAAAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPqQkAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz9gLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAgBEIgBEJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPDIFwAAAAAAAAAAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwLg0AAAAAAAAAAAAAAABCQkJCQkJCQkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvhAAAAAAAAAAAAAAAAAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCYmgAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwjL0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAEIAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/3YCAAAAAAAAAAAAAAAAQkJCQkJCQkJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAA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BEESKBAkUZQAjUQiKBIAFoQBhBoEAEEAAAAiAESBGBjJAgAiKCiwKKEyRighgYNigYQYIAG/yQ5EFgiJAcwRBIQARGBBJCiEABgAYCEAABgAAAAYIAEYgQASGAASYBEAgAEAECQBUEggBIEAQASAIYQBACYIABgoEqASGEAIAAASoCHghALgqwNEHiggAUSFRBRchIRFSNRIAQAWRDYUQwFDUiQQBEEsYUQSIAGAEzgSgBEYBEOBQYQhAUyBERUosUQCIBGEYUEShQSDRQhABAAgISQCQBQIFoiCASAiIgOJMShCGBgSKBbIGBJOKAB/50kkoRIgEYgSDCgo8BgkQRAUJFGEIBIMACoBAIUkAUQATAQiEBSEASAhAQCAQoKFQSJBCEEYEgCABABFCEQAhElkQoFFKCEBMBwSsERhSBguSBhEhKAiGIGPggNHgTAcIhjw12kAEiAxFIBBAgAwFIUIAAAQBAAAAABEAAAAAEQAhAAAAABIQYABgwIAQCQBABAEAACJFARBAABEAEEAKiQCAKASQowBACAC8K8pACYIEIhCBCACTAIQBBhEgSYIAAAAEAxABBAEJkhIBBgAEhIAACgAEhACAAAYAEIAAIFBGABMAoEQCAASEoCRhECIgcGIKABEgSISMBQAhJ+qARIAAIQAACKDQQJABAAAAEyCAQAgAQBESAAAAAAAAAAAKQEAAEQYGAAAAAAAABgAABISAIEAQoABEAQAECgCRIUIgAHf+AIAEiZECACEQAgAg0EEEhhEAIFBQMQUQQAAAAAAEgAAIAEAAJBIAFgARABIICEEAEgASgEAAAAQBEwEAICRHBCIASKAgYKBgaFBAODFDCAYDACBEAgAhQQgQQgAGIABGABABICBAQAgASABAACEQQBIAABCEgBCEgAgARJBIAQSSFJBABYEgCEhlBSQRIGAIwEqARIoAIACGBaB5qqFgWFBhBKBREMhEQRBICEBFggAAEMBEiABABIgAcAUAAAQAgAAAAASGIABEoCBgQEYgAFJAQBABBgAgAFJASCBARhASAgogSiDAYAGSACAAU/LDwAAEgAAEAgAAJAUgAEAAACAAQAAABhAAgAAGAAAAEIYAAAAAEhSgARCAABISABGCIEgBCAEACACABgAEBiIARYIIuCFCgAAiQIogRKBiUHIHBAIgYEAEiABEgAAIAEA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSAAAAAAAAAAAAAAAAAADwTrIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAIQEAAAAAAAAAAAAAAAAAAO8kCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSAAAAAAAAAAAAAAAAAADwTrIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9EBgYGBgYGBgYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIGBgYGBgYGBgYGBgYEBAAAAAAAAAAAYGBgYGBgYGBiPJwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr9kHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Jp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK/ZBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPCafQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACv2QcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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SAAAAAAAgBECIAIAACAIggAAAAAAAAAAAAAAAAAAAACCAAAAggAoAAAAACIAXXYgAQCAARgAACAkAQAAAEIAgAgAAIACEiEAIgAAAAAAAAAAAACACAAAAABAAQAAACEAgAIAggAogAIAACAC8Iv4//////////////////////////////////////////////////////////////////////////////////////////////////8= + \ No newline at end of file diff --git a/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw.sig b/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw.sig new file mode 100644 index 0000000..437716a Binary files /dev/null and b/SDK/tools/lxfw-update/firmware/e502_fpga_i.lxfw.sig differ diff --git a/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw b/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw new file mode 100644 index 0000000..657e546 --- /dev/null +++ b/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw @@ -0,0 +1,7 @@ + + + + + + //////////////////////////////////////////9q9/f39/f38/vz6vv68Pn5/Pz8/Pr5/Pz4/Pn8/P39/fz8+Pz8+vr6+jV3////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAgICAgEBAQEAAAAAAQEBAQAAAAABAQEBAQEBAQAAAAABAQEBAQEBAQEBAQEAAAAAAgICAgAAAAACAgICAQEBAQEBAQEAAAAAAgICAgEBAQEAAAAAAAAAAAICAgIAAAAAAAAAAAMDAwMAAAAAAgICAgEBAQEAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMCAgICAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAwMDAwMDAwMDAwMDAQEBAQEBAQEBAQEBAQEBAQMDAwMDAwMDAgICAgICAgIDAwMDAAAAAAEBAQEBAQEBAAAAAAICAgICAgICAgICAgICAgICAgICAAAAAAEBAQEAAAAAAAAAAAICAgICAgICAwMDAwICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAwMDAwICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIAAAAAAQEBAQEBAQEAAAAAAQEBAQEBAQEAAAAAAgICAgAAAAAAAAAAAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAgICAgAAAABCQkJCmZmZmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgIDAwMDAAAAAAICAgIDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAACAgICAgICAgAAAAAAAAAAAQEBAQAAAAADAwMDAQEBAQAAAAACAgICAwMDAwEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgAAAAACAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAQEBAQEBAQEAAAAAAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgAAAAADAwMDAAAAAAMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAABAQEBAQEBAQAAAAABAQEBAwMDAwAAAAABAQEBAQEBAQAAAAABAQEBAAAAAAAAAAABAQEBAQEBAQEBAQECAgICAAAAAAAAAAAAAAAAAQEBAQAAAAABAQEBAQEBAQEBAQEBAQEB0NDQ0BcXFxcAAAAAAQEBAQICAgIAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAQEBAQEBAQEAAAAAAQEBAQAAAAACAgICAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAAAQEBAQICAgIAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEAAAAAAAAAAAMDAwMAAAAAAAAAAAICAgIAAAAAAQEBAQAAAAABAQEBAAAAAAEBAQEBAQEBAQEBAQAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAABAQEBAwMDAwAAAAACAgICAAAAAAAAAAADAwMDAgICAgAAAAAAAAAAAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgAAAAAAAAAAAQEBAQAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAACAgICAAAAAAICAgICAgICAgICAgICAgICAgICAQEBAQICAgICAgICAgICAgICAgICAgICAAAAAAICAgICAgICAgICAgICAgICAgICAwMDAwAAAAAAAAAAAgICAgAAAAACAgICAwMDAwMDAwMCAgICAwMDAwICAgIDAwMDAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAQEBAQAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAgICAgAAAAACAgICAgICAgICAgIAAAAAAgICAgICAgICAgICAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAgMDAwMCAgICAgICAgMDAwMDAwMDAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIAAAAAAQEBAQICAgIAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAACAgICAAAAAAICAgICAgICAAAAAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkJAFBQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAICAgICAgICAgICAgMDAwMCAgICAgICAgICAgIDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAACAgICAgICAgAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgMDAwMDAwMDAgICAgICAgICAgICAwMDAwICAgICAgICAgICAgICAgIDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAwMDAwICAgIDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADW1tbWo6OjowAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARUVFRUVFRUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADo6OjqRkZGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAgICAgICAgICAgICAwMDAwICAgICAgICAgICAgICAgICAgICAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgIDAwMDAwMDAwICAgICAgICAgICAgMDAwMCAgICAgICAgICAgICAgICAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgEBAQECAgICAwMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAAAAAAAAgICAgICAgICAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTk5OT7+/v7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvLy8vDg4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEAAAAAAAAAAAAAAAAICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAkJCQkICAgIAAAAAAEBAQEAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgIAAAAAAkJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAoKCgoAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCgoKAAAAAAoKCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsbGxvU1NTUAAAAAAAAAAACAgICAAAAAAAAAAACAgICAAAAAAAAAAAKCgoKAAAAAAICAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgIAgICAgAAAAAAAAAAAgICAgAAAAAAAAAAAgICAgAAAAAKCgoKCAgICAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAgICAgAAAAACAgICAQEBAQAAAAAAAAAAAAAAAAAAAAACAgICAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgIAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgIAAAAAAAAAAAgICAgAAAAAAAAAAAgICAgCAgICAAAAAAICAgIAAAAACgoKCgkJCQkLCwsLAQEBAQAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQAAAAACAgICAgICAgsLCwsAAAAAAgICAgICAgICAgICAQEBAQoKCgoKCgoKCgoKCgICAgICAgICAgICAgICAgICAgICAgICAgoKCgoCAgICCgoKCgICAgIKCgoKAgICAgoKCgoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAAAAgICAgICAgICAgICAgICAgAAAAACAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIAAAAAAgICAgMDAwMAAAAAAQEBAQAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICCgoKCgICAgICAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAERERERAQEBAAAAAAAgICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgICAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQICAgIKCgoKAgICAhAQEBACAgICAgICAgICAgIAAAAAAgICAgYGBgYGBgYGAgICAgICAgJCQkJCQkJCQgICAgIKCgoKAgICAgICAgIKCgoKAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCgoKCgoKCgoCAgICAgICAgAAAAACAgICAgICAgICAgICAgICAgICAgAAAAACAgICEhISEgICAgIGBgYGBgYGBgICAgICAgICAgICAgICAgL7+/v7z8/PzwAAAAACAgICAgICAkpKSkoKCgoKAgICAgICAgICAgICAgICAgICAgIDAwMDAgICAgICAgIAAAAAAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiIiAgICAiIiIiISEhISAgICAg4ODg4AAAAAAAAAAAQEBARAQEBABAQEBAAAAAAEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAABAQEBAICAgICAgICAgICAgICAgIAAAAACAgICAAAAAAAAAAAAgICAgICAgIiIiIiAgICAgICAgIAAAAAAAAAAAAAAAAEBAQEAgICAhAQEBAODg4OQEBAQAQEBAQICAgIDAwMDAgICAgAAAAAAgICAgICAgIKCgoKBAQEBAQEBAQMDAwMKCgoKAwMDAwAAAAAAAAAACAgICAAAAAAAgICAgAAAAAQEBAQAQEBAQAAAAAAAAAAAAAAAAICAgIAAAAAAAAAACAgICAAAAAADAwMDCAgICAAAAAABAQEBGBgYGAkJCQkMDAwMAQEBAQAAAAAAAAAACAgICAAAAAAAAAAACQkJCQkJCQkJCQkJAAAAAAEBAQEAAAAAAAAAAAAAAAAAgICAgoKCgoCAgICAgICAgICAgIAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICEhISEgYGBgYAAAAAAAAAAAwMDAxA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AAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvbMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAoBEAAIABAAASABiAIQEAwC/jBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEgAQAaAQAAEhIAABIAgAEaAQAA8DrkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAABhCgAEAAAAAgAQgJCQESEhISAAAAAAYAIAESgQASEgAAAAAAAAASCAEAIAEgAEAIAQAAAAAAAAAAEgAAAC8OlwAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAASAAAAAAAAEIAAAAAAAAAIAQAAAAAAAAAQgAAAEIAAAAAAAAAAAAAAAAAAAAA36MOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAMA1IwcAAAAAAAAAAAAAAAAAAAAA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GqQpR0xiQiAxdIskSC/hNbksAfAUIWAlE2FCIcAkIiKNIiq8hhSkIUQnQsJIEiMUQpqKiSQER4kSScIYGLIYS1gSmCyIsTh4OJJiSImIaChJyJo4K5LSKVgkiKy4QipviBpWwoEoypEqS8IwgmOZNoYiIowBlnKIImFqIiIuUiOKqKEiI4wpmsQrSUiq5EGEioECThgQJJmCgh6IY+pIpEhIHkqD6CixjEVGJJgUwkUSBECiFoT2AoKgIU4kT4TxfCsAQBECISQoKQJJAgAAIAIqCABAAooCACQohBoooRFACIIhFkgSCACIJBAiooGEkEJQIoNIhAwAAACAgRISggwAhoIBQYAkAYKSiABEAEggoRgAiECECIgYYEQAQAgQBIhEIApBACkCGgRgRCAo9EghghgQFARKgREEoEKggiWImIYSGIhkQkgYaCRgJKwEkISABIACRgSByKChGGhIpIglKJiYEiwqgUiECEiChBiFFIiCSbJECCN4gjREggAAKTGIEAKQIiMCQEKCCUgrQUiiACgiYEQAEIIS6CiCLCxEKGgpGkyUJCAkBACIIESogQAAbBLUXgohQRgiABkCAAASKgZCQRCGAkAiCIUISIARaEEAiACaQSIBACaCCIKAFASABCHAiOCCIyQoEiKCRKgyAAASIMISAACooCIAgiigQoAKigjARCACwBiAAhKCcIQEQIJVIkAIKQggQRQCACCBUoKMCCgS4PE8LEiQIaAkEiQAAEAhDCCBEYIFIAEAggBIK0gAEiQAIxHkqAQpgYSBJIQIIYEkAKAkRiIJiAApOCiBTAQYhIASEoIDkkhDEcIkgKJILKaCQAQgCMCUKABMiARBEIIBEgCGXIQsBIQSADCEGCGKEQghREBEgphCwoghIkFIr3VLhBIBJgFBaCAEKCAqURIAIgApSAIQAkAiBEFChsIUJIiEIAGGpBQAgaGACC0YACQgCKARwBKDjARKASQqiAiCGkKCBACIQRA0ggCwhAogqBFAAhqBggGCEhIAIChCJARQJCSAJEg0iDCIIMIUAEjgQhaIgYPERJBMKlI4QSgQkiJDBBQwUihGooSAMiEmUhKIgiJEIiIQJAgSIAIAAISACAAwEmAoACFBEBIoiAgQQgIlCACIgChEwjgngigAiEIQghKyhAIpwhQSIgCACAASKSSIBAAeRoIARCEWCIAIhigEh0gsFKgUAABMkURBw4gUAgCBECjxzxYwEkJKBDBEFEQbQgBgGIAxgSIrREE4JBIgAYAEAACACEJAIixdgoiQEkACiQFKBCFhhB4YKgQwKKASIAEiKQgsCIAIQYghAEESAAAAQSoDKJAkQooIgFREIwgAACgAwRCUSEwYSCIRCIUERDCIgoIglBiLhIGQMrAoAY1OggBBAEAhJKEkIYayQSFEBEUSAQAqCEgAAABgJIhgKIMBAIEQgoQ0iEgArBiCCEgkKUECL4iEAqJHLkAMIpBIAIIAI0ICQAIAAMCCqIAGIAGACABAAgAkgoCBlIiJiIhIBEFgJACCQAQogwUlBAAYIBgE38QFGyEAFyQZIZIiABGgJCGIgAmCKmgloIEwgrDECAAjhAgAEoJnKBiCGCB4iAQkIAmYgIgoASAkAThFAomEpkhAIgJBEkIAwBIwhIIYQipoQuIgAQAYgqAkgIElCBoBIQAAQgBAGEQIQARMyBYoQkCCWCIAABhtQigplIRG5IgxfSUEGQJBACEAGQIgwVJSICUBABJAEgJApBiIECQIAIAUQoQFAEzISIJSwBgkEAiQRBIjEaIUYCIkGIFBKABBLIMpCAAYJjQiiAAAgAlJIzYkgkKARiQJEES0FAhERIgQBBIjkRJDGCgYCIgkiEhBGgSDCIdBJTRIEEgSiPQkRSjAEkYDAENRIQBCGsSBHCGagiIpoiwYgBoCAAAAIIEBEAIAMIKBACkILCgBgEgCbKaIIieISIgisGgIkBKLgnCCInKCooIaCkhIJaIoiCEkICSIggQjAiIAyBiIAABgQSCMiEgYBIIAAE0SEFJEiInBKIQgWEIaAmQAQZBEIMJWgwJMBIDBQSgkEwJJYyJEKEioERkiASIjBCmBSBICgIIhCCGAmEKMSCLhQQQkLCUFoUCoSUQAiDAYACnIGAApkSSoiEgiGBiKASQrJESCQgApGBQCokQwlIoBJKASICIRMhRGBKCEIIgSJGgoGIGIGACCgAFA0iSICABSgAgQpMEARK+SzVQvEpIkPzTGQUdCFsFhLVQz4iaixCYhrp89EaIa50i2EsU2LOEqoxgpSAKCQitELsJJKKQYUCSQgixVJBbiYSG0ksGIToKNipitGoq0mrQeyIJQIsOpghitIpq6GO6BekJqxW6EOqPYI3Ii8ogiKIbiSuohpBolAi8p2CRDsoRaIo7mGK6EKoKDoimGYkOII4SopERGZEgSQVYkDCDaRF1IhYhcLokMi0GI7YxGdIjoSJgSptiEAWM4xEGHhk7ISCsh3kQp9DhMLhSPhORCKRMm9kYhTiMbQUsUUSwyEhySNSm+FbhB8oUSjmJbGDkvpDgyRqKCXoJBRySCEKQ4gpbChCQjKORkaCiIJ42WdNLYgj0WFmJIToqG8oJE1qKBiExNwvJuGEzcKC18FqhDVrYiaOIqdYK4hJSoQ8I4bC6ioSuEY7ySxIYvSoGS9EyqSksliExBlKaAo0JBKqxJjhIatETpTGFELGFBTCglGDQmwUzUhEmclC0YY0xkaYnIRoGvQbjCE+5IdILkQtEk4U7RSrSEUWiFohSWkkzQSPH/2UwR9CIiSvQVNVAiSvQVFTrSIqFEVaWqJaJVV1GqWiJaVUSqWmJaBYpYIkpMggJapYgtQqARiliqSuRBoYilokRPQaGILRJKBIrYIqFVhIp4grJYBapYYloFqloiXtQkKiL4VFSK+Cpq8BQUivgiIkhFpIglIlREqtoioURFtKRaIkxVRKoqqFVFpKqgVaCK8FRUJCD4VlSKiAZPQaGIhbhI9BSUiliqSvQUFIpYqkpUREuppapVRaSoJaJVRfSoiC1GWgWPiloiT0VN8ihWM9JExCErZF9BcRFUIk5iT0FxJCSyQtRV9IW1Lyq4EvFURM9KuIJ6QvpERE9KqKhapVVEjoIvJNREBIheRk9J+YKCIRX0lNQl4STkRbQkGPJIakdBT0n5gohOSkr0hJQlaKRORE9IGLJSxURPyEIaokSG7KhoJEnEKIRPZfUUlI2iI3IV9JTULxhiIk1ET0vhKKgkRfSUtK6CTkJFpLgvKlgiWvSMhCXyUkha5Uq6orhEoVWuhCuIWuFNBfBUVE9N/YKCKhKVRC2Jr4SkRE9K6SjYIvJUVB4UcBKyRAStKi8l9VRUS4iq+hJKQ7SkSPISUlrxqCzwUhZLFSryy7hEQS5CbhRTUSEp9EJVT0GSJCRc9EWFTyr6ghJM9EQkTYIuQi9E9ESkS4iqtVIlhdgitEIEwERa6Sl4gkKEKYn0QkRehABORE9F+JSCgamkhJBIr0QkZCgs5UUhMailgqQki4qnSGUEg9JI9VSUT4H4IiqHQk2ERyiiJdREuIQ4gk4UT0G6pLii9EJESeIq+KISL0H1RKRPKrIitELlRaioLyixQqSliviCUi9EJAVYT0W91EhSQkXUhNiC9EpET0Q5hC1CL0S1VDEUJC1EQqzSKvVSREdEimoqL0XEhK6CjlIrUR4oj4rCUm9BhOJSO3FFdCJiIk9BMRElEvIUFBrTIuIkVFVfWviCol4ST0X0hKSugkKgqK6CK1VaBSn4RkYAKjIUmvmCgiRBmgkrREtBSQhKBE9J+YiCi0RPRKSIgaMUpIgkXlJBgxpKokSLKKuqZRQ0KIOiRU2Eq4IkT0HxhJSmMiIa8YSEK4jwFBRPSLqCuEJURIqqqi8hoUVPSCriJaREjoSOoi8kpUWijoIvJKVVAE9F8dRUiCWyFFFErPhIStBE4ShYIk9BsZQBLyREVESnqq+l9VRUjoQqclLCRI9ICickGlWIKfIWUh5U0MVI1CSSYi0UQ1EhJcJVSxE2MiIl1VX6hIIj2kJ0VLQlmlIYGqiqK1haJcWCbHRGFIQi8hSUTyk4giFNlEPZIiTURIhoiIPkRPiUiCXIRE9EWISsJFREQ5hSI/UULEeoSCtETiiuioZiRIxCqEJexE+kSthK0US5hFIiGB6UTykoSNRE+7SCrkJGlCSqYiop5USyJOIqpEROpK6CqiSkISyoWEokBRhPRf3UgimiEkdBTYKOSoPEFEEl0kLxFBQSJCFNhE+o+KpaL0W0RLiE4iI0EkukS4iGMkJGmChsMVJD1Cg65EV0IuImtEEUASFK9BQ0LSIkSrShiGIkGqGoroInJEXUROIqqBEaIbiCWERIoCJDpIiKSEKkiI+oWIoWRFSIcBSkEY8oqERFpIiBI+REhEhCshQxKCuIJBC4ophCRIOiIkWkEa+KaCISmukqOCJPQaGIK4gQ9IQkK6ohoKgvKghMIQgrEU9B8SQkiqpESqWqijhUGABPRKSIiqgioBmIpbhUpZklCE9EFCRI6ETURPiCIrAUQQRa4UHlSviIii8hhKQqKEnkQaUix21ETSIpskIUEUGC5FRxNTIiKaQkiiiSEhIqeoLyQhRFtCT6ghIaIWEoREkEKCJLhIoo2EIBjoiHqIWkEYSF2Eg0VBq4glRIQUDyWERCEJISSyEkgSHAgodqQShQSEnpIdqIMioaqaknKEyxFOgoCBgeJE8qaiqA4iK4gmFBQYIYL0FxFJSEppJCSqiILLRCAcBES4SKSFJCGBpI2Eq1VCiI5ER0RASCSE9E2CQ6gkRJWCQphLFUeKTSIjQSSqKqhiS0ROJyM+keFCgpokQAJPAxESIpBBuoqjhCGiG6gioEIorqIQGCJFBEAEdET0ykiCFF9ISEj4hYqEdBRIVYiBKK+IqIjyQET0hYiIckT0HRRBgSchTUzPKIgisR0IjyKKJPYeFB0YiyKKJFiI+oOiISiriC6iICmukoCBrxlBSOgiTwhISqqhEYinIiUiJPQfEkJCuKLySkRKqyglgiACCkiC8o+CIiGmFIK4iluhShkSGFSEQ0iEoUpIEvKFKIT0ERBBq1VDEkj4h4UqIV0CJiREsVIs9OxRQTYSImEYEiEsIxGyEshKGBqmooGBshLDgoGBoCqgFBgiEAhlJCS0RCJERLhB+oWIillISEgwKInoKHiKEScIj4ShRDQXKIQjQUh4KlIrEU0oj4qkRpIXGouiqkhYivojIoUh8oqCojgqiII5ISEkuoIxJiQUuIiiGBYiinIiVURElaIiFBiniCEgKCIUuEikiSElIZeIKaEhooaIKBQUUiSKSRqCeIgUUEoU5UFiQS4kUUhKpITUTg6hwxRBciaBGA4iIEGUECICkiJAGEWCCCiCEBAEJgKoAMAI6BhIGggaxCiqEYJZhIoIGsGAqQgoFIiTKIJBiDSDhSWhFoqFJKOIomqkEWIQhIkisoJBKSKQhKIYMIFoRoiCyBMSSCGBJLKCQsIQGCIYgpaCJIHhGhIUTAIoFEiCkIGEzoKEJIBIyYSACJmEJMNISLgkRC8EneWBEnIsAVYCJIESIhSmQRKkgCFaGIgVgAJQJBighFBIIhR0WIAEdEGRiCdBSkiCJKBIgkcBQEoBVFpIiBGEUkSKIVQYhQRCAaggQqAkITKAISICJURCoSAhakKiABgqEQhFoiShSECEdEIBgyRADwVBQbiISgEYo4KEKgiIUoZEEAAIoYqhVBg1oiWhEkGIIEj6I9fUPVobI65FSxFUS6L+RUsRVi4vlkVHuhtp9eVpX1ppZe1teFeuiWUlbRhXqo0kJ1VNOBMqgtVE8V+IE6o8MUS4UfqLMq5NSxHWio60JOHVuhpp7KxrUdbqupZdVZbiupfdjVhXqoktKHHV2ohyotXMcVHSjD2kL1VIEf6LIuyBxLhR/osi7kVLEVaOirQs4VW6Gmmk5GtRdq6ulldVlqaqltXV2oh2opZRVdqIcqLVRHFR0og9pC9VSBH+gyKkyxVPiBKqtCzhV7gYa+Kux0sRVqqqlsdFuhpppaVpelppJaVtaEeqiS0lJNqIcqLVRHJYzyqT5EgAEgRAEZARYBNBgRGCABEAIAoESAESIBABIASIUIhQiFCIGIhIiEylGIEoFKCY6IsIgIjqhwiAiHghAIIoiEEAgAOgGAqBGCREAGRaQhQUocpIpEEAQAAIABGgFDAYBEiEiiiGkBKxGIEoJESgEaESIFIsCIIAQYoBHg8TdJAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAACfhgsoQlEUSEghQikBMCEfJITYMSEkuLKBjIwW4igBACCBAYOVEoIpSViCEDiIqTGKqYHYiAQjaKiM2KLkqIgF4IjiiEzyGIgrhq2IIoXYomSCGIeEQikCKTgYJgKIkIJSTIjUIiI8giuEIUIkosoFyiiDEQISiBhCAIgQhJgShigYKCGRgoElhNhEGHiGDIrISqwJRiaJInxENJhWqBGIEkJLES6ZgykBFBCBFAIREhERwCITtEGCyCIaBBACEoggGAIgQQIgQYhImIiEK4EkAEoIiUjIgkYIEiCEiAiDkpKDGAhGCCBEgoKImSJAAqBBJACCkEKAAiyqhIoBKigcAiSIgAQAAAAShIISiCKDCCAIRCAoYaTGgogByEiIwBiIIAQq8TrjgCIUBABCQiEioEIZhAgjAZKISoyijCQAABKgQYuIGIoVYiiEAFCCkBhwiMiCQELIgqSqBCMk+ChIpBockihAWCImCI+FCAClCCSAJJmCQKRIJSI2gjCCQgCgxCCBASCBmBIAGGBJgBgiKBgMEiFQQtDECCfIAIpBqEFkgkyCWESLQRIYiBIwFLw63ywSpCQAEieEEUQhhCM5ihOMiDiI4GIBgjpEBhKCGKIoAIoEUoSCwIgpwRhBSQhE8DSIJKMS4oHiiMQagi9BIqgUgk8kAhKLQSCRFDAcIkchEoshIkkERRIUhBEiiJGyxhISIsWEISORIuqxIiQSpBSCquEkoZQhWKAYIQAYGEVyRGJD4Eg1UoaExBQiTcgiSpISi8FAokgiS4TKgkwotBikEmP5VPpAAgAiACpikSjAJFBIILEsCBgAj0iCSCgkAoIrMUYEKCgYcFiIAoJwIkgkZIFDSCRoQQCERiIHKyQjGMhohviGgiYocYIYMmxKAYkUCoQAICgiDCa0igEgVChISMiIgAEwNCoCgAghIiAkMkKIhQLKASACIsCYACABgMRIMgAWBKCIEiDU4hnoJFJCSgKAIZQhLhQlqRKGgmqUhqSBRQgvQgGIjJokiE4YKggoNiJEpEgoKoGhSYSCLEEIYERMwYzM0iSYOCSJkUiptaI1Fkq4cmiILJYo7DjyhCnZaJFkw6EhpIckEihEEGZIREoIKniEqoGOQikUwhJMhMQSKSjhJIFiQkohiMFSikEiB0pJQgKWmBJGtkYhgcKUHiKGJHSIhFKEGGgjocFIq2FKCNJDrISMqEEWqBZNEj5H0EgjtDhBWoQhTMIaGbFE4hTCpCWIyCaPOIKIGOZCByGOEorENqgAGMEsEmihSaIYLyphwoLLgksRQoiNgoWkQYm4KMgYqlSCKxiCQ0j0qIKDAiO6KCK0PEyoJIsRTSzC601DwpQkKJohOEKaFKKIhQKIIKKEQmdIiHaC5GJK5CahlIC0gsrCLIFEhIgU5CQ4FIpJohTOEqrIkkgopbiiOBTCREyFIYgkKqQoSNCEtBKiUUwIqrEi5FI964RIEEgUCEAoIRJCEgiBQognSCAEjEgiBCCExCiQIhAEimNDhsQkREggEYIEAKhACILAKIQwiCJIEmIggqEsI6RBoIEkKIoBQAIAACgAiCGCoCQhkFIQgqSCToIkQkQQJHSEAidISIIng4AoJCISCAAAhGJBgiJCQ4iBISUIKPBTpgBLIhphJCBBBBMRRKGiSQSGZBIrEgAiRQIgQSICgAGEIJGCUIIAiEAEgoqBFKiIICHIkkwBIzGCISQmCCYUYiiPhAFFiBgUVEgAgi1CiIDIgoEgCEhgJIAiBERmEoQBiAAYAKBIIoASBEgSikgiASWoGIoIQCQhgQgAACAEsEToJARuHYMFGEUIhCQwIiFIQgAALAgAYIMAiJAcoigQhIIBhCgQQhiIgQGBhESIgwLBLJSGIgBBshgAwCgAQRDEGCkCABIALIEEQAKCAIhEQRIjAYhowIJABgAAABIYghIhAABAGBKERBQkhAiAhIRBiFEoIgAiGPCdsgCEcBZogsAoHSQjASloFCkGQoYBkIQAQKIUIoQqIkEIgkgoGoGBCBjAEoBowoQeGIRCQAKJKCKoJIomCEGHIY6CQYIAQkhBGIYCACYCQiBWQgBGAkKACCAISgQkgjBIiCAOIkIhIYKoAIxCBpAkRYRigYKNGEIhAKAUQNJI0iISKFKCJSgBrB8CISYk1CQxEhtBQxSREiIAgAgkHARWCMIkEohCiEMUhISBBIIigCQKLJ6ESEI4SgoiRmohgRoERCEYJIFAEgTEmgKQSIirgURMI0hCBOBBBIwIACggJAIkAACIgASCEAIAyEIjJAEgggigSCwEKQgkgFhCkEgoQoMoKARGSDiESgjw/cMYyaFEIUGMgRQSURgAkBiCgkSogyEiApCEgUGBABgAAIoBIYgaIzQUjKESAIMBACKIKhhyKIQUgkMCQoWiJESB0IRIIoEayCISoJFCQwEjATBMLYhGhiIBEiAFIiCBKIIEgSGQIhAELAiBxgKAbIEhQAQgBCFoiEAkAhihgDQkAEPSlDPsLAIYAELJAqAkREUCQKRCAEJBgAImIqQpxghOIihgQ4IhwGQigAhGQhQ0wkEnQoKASESSJACEKCCBiLgokYKQFIFBhEEkgkFJSRI0QoKgEiEoTAFKiZgSAACYICQEACREQktJgrCClIQQEhKIQgiIiIBEJLhCASAoBEIQJAiGAkiIWCE/9AmJhAEagZQSwEFIIohGCKAiLMJiGRh0WCQhpIQoHliAFARIGqIUTKGCIqaCBKBEGoQESIoESRSECDISIEKoKBAiJJFEIRKJASSkEiwCI4GICEggARJIJBCiISM0GIKgiB5kSBYo4UgilEIYKEwCgkMEgAJKIhQCSI2ESGiACCCoSEciKESIgFSESaqFEALAIyNFBoPSgiQEYIIkhEUIYIRGBCAJKC5IGCgSACQioKUATAIhgUFDISgBEpASKIKJwSKPIkwyhCGGAkIkGmiIJ0IhIiCCeEQCGEJLIRiQwjBCKoECgmAoJACEgoggJASIKYgIoEIQBIABiChgiDCIAChgIYiIAEAYCMCEgsASAACAQQjPlgcaEpsiQETCEqASKSJEpIwRGEMsDImICIgAioKDCAAAQgBpRAKIYMggMiQAIAgWCEiMiIEBQiqIBEKBSRICiACIqEoCKyGQEiD4QiIoSgIiAACIgAIAMEKIiAApBUoiQQRIKIAxyIIjyCgoRYJChkgEMIIiQkC0iAFChCnDTBhC+HMsIoEEZAArQYkBIDKBFACBAKCBQCICQQAoAEEoISSwIjgoKKQAw4gYBEOqGEBUQoEpQyIKgIGBJAgQzIJFMkRDBEAkYUpJAYpiSIBCJCIESIgAAEAKEmwCIITGRMAkQASGBBoYRCIYgiLEKABDRhYYUiQAgAQoQIwqRATwMbsAh0IAg0QBSAAjlEYiIiJNgWYCoknkggrqBIggAUJBoIFDAQBBSAAAEkJEUkIqESgBEqgkjBHEKACDAS5CICEiiEgCQCQCIgApAgAAKIJCQsBCgkoCsEQBMBIAMgAAJICSwgBgRIRIgowSRKhIKhmEOhRBJoxB6CgFQCxIxBSMOJsnQW4YTyYxFMckUlsUXySxN6QWSiJ06aJaTKQkTcMvEqEopqhKisZGXoiSi0EqmERPIuSBhmhDqIIjY2IpKCv8xBJDZIRN2FhNeK1Uy2hOgisSxK9NshZyhLJCmMKLSuDBMpJPofTEMk+owi7BhphOL4R4lDqWQ+tJsiJI8jTCYUPsJdgogsIkWI5iQ6RLjiKSIRJCGkyowZIuQjBCyG6EHmRm5ETKwo5G4GFoiGayKnwieIziKGTmLcyuRCuFw/qIRlZ6gvgShIpkjmJK0kh4irSadljCiCeCJWzJQ0LyK6sswxKbQj4ob8HFEs0SnPQSGh+m8hFEbI5cgcqYRE8xzPEt5Ez1iChLOcq6QrWiokG6qEVDqLJD5EXjRKwhmqFKreLIKgUr3CnXREziRJ1IHsTgJLSY+BaIbyLZKCRiKG4yy1iCrWKaXSJPpKJUTSStNEb0iBKOzrC2kpJvYmQpTPhSUiqEUSIycMoiphYrVKr6EliCiEqIoywvJGGISxQtJDiKTKYhTKI0hqRDK6hJiMwiStosHojMRI2II3RItILSJNZE8YKqQ/SGhCaiZk2kSCxxiCJarE7CzSaG9MhIwFzjNRSssmr0RBRDU6ip9EQVWzEmmkpGlKWmimVF2XqiwlheRE+COqgppUXMOqgtVEdNKIPCVEOlKCPGFEnoqrIq5EXxNISGqkROFEuhJyoaZERJ6yrSImVFz0h6otKCZUVLqCcqKSXFpC8q2EY11Cmigky1VGiopyZNFEuBjiIvIuRE8bSEhpJCThRPQWoqLyFkRElqKiklhWgoKaUVSSqIJaWig4p11KQiKthk9USEiipWRIiOKItGRrQkaIiJZERJaoqrQUaUpKaaSkaUpKayQmRFTYiHqmklxainKkx1VNSC8nO6THFUeCKaWF4UR4EtSosWT1HxNSqNWodETYRPq7qK5UXxFIVbqoJM8VSMz4q6iLVS5IWyKHKI1kbxFCIm+IgUT0G1RChiUkX0RCqdaq9G0UToiHiI6EL0FKRPiGqKRkR0JNii5UX0VISqklInRU/B8iSIqiXkhOqK2mL1VERPhOKC4kL1VpRPqeio8igVQUbyoWJOFE9FoYGG+GJUT0X5tIiHKkx0RPQUiItaGuWFaCgtQqnhxRIEKxReKEuiKxonRU8koiIuVE9BudS6onIitRTojbqr8mJET0R5lFiKq0ZLJDZ4ilpISuKj8iJIj0XkweIqeILyUlRGHKgSWqGhz4i6qPUUlB4oh8IT+xQULPIqKBISJKtES1RfUXMq+EpIRF9KeCqqVU9F9YWlKghEz8j6qIgeUkr0KCimWGZPQYVSiEX0VFQoJlJEcCpYqk0UjoSPiOiERLSkuIgYWERNJIWySqVFTOIq6CVVRM9CkihKJLEo8qiCT2GxVBW4KOJFtRSxivgqKE9BAYqyYuRF4UGBaKRPReVJ+4KipXhEVESq+khIWgUvKHhColFPwnKKykJa4YLyqCoeUk1EoCJPRfXUlC4iLiJHQZKPqOIi9lRUT0hYqI1KHhRPQ3KoWopJ9CQkL6LyWEhDtaRaIi8h5EX0jIgiLyGlVY+IuCJiRE9B8SgoP/OK4SHCKKtSGmEhgSnBMReBp4KhTPgkiItKThReoRuIqqERHqRPiLiopUFKAq5GYxSkIia0FJUkKCYUVISvovRqFEnoiDiKh0RKuKS4iPRIREzSJLIodUq0FGooLlJSTNIsuookhPoogo9i5EQklSiPQuVF6YU4gi0UREuhivRiVFrpKXiC8khES7RLqYaYSkqioq5IiaSEgiyxUsQkxdoqhaUljyLqKqVBQSJMhPzEoq4iLhQYLOIqxFRLhYbCSo1UWkP6iEqLREniivIiWIsUT0TqIviCUik1REmoSBga6ojyqBReREeEjfSTqhEngiQSEFIoSvUxESxSqERPSoiiRFp1oYGqEUTHwo+IqlGAqihltkQkoiJFpFUiKyJFFNSo8mpKTRSK+IiKi0RES6muqIROREdCL4LipAWqmCIrVdDEciKqROCC8oKoZFrkguKC4kWlEY8oaCJERaSKTmJeVJpZIqP0VFS6+aqKJEKqeoioVUoEivgSUkLPQiI4QloR+CooKxVDBOBEtMS8IrIiwhQYKyoj9EREmhlySrhE1ERxivhKSEb0JKQvovJKWEyVJCXyQhJLRY6EiiikVYq6opJETkSF2CSF4SGSKCdCGBbCSKcUXTVTsSLUQrRE6ii4oiHFpEOoSkb0FKiJKIJlhYuCquRFpSUuKIOiUUrCIiJEQSsiKsWEijiCgU9EqIqPiCSEwqKq0ULkRULiKkQ0RI0qKQGIh6gqMRZBhYgUlIStKKsSQUkquCL1VJSGUqIYHqRPKFKCrURNJE8i+KJaowUkIUqEYqKtQqCkpviKQkwkgYL1VMTKKAhLgY6oq2oiTHiE2CpUSE4kSeiItEJURE+oOIoSS6RD6iI0Ek+B+IyCK1hIToiPiPiIFEq0VOIyOm4SI1KoACXYKHRFcTXVqOIkJKSor6iiEfCkhIoCoIKKClCIqOBFhfIoKEqkVSIAisgiKqJVjoSOgotEoKiqCkEiL4LSKOFFZEIrKCl0RAQnIhgAK6hrEUsRKgJIQ8GChRoEoiwi4UhYIiWoEa6EIiRF9CQkLyr6QkIAJyhIQqCIQkKqKihkRaAiQY6EjoIhQ6GIj4ryYiga8YSEhSi0VAGOgi+kZESIJ6gSTORIqiInJUGPyPiCgkoBj4gYmFRPRaQir2iOIfEiQk4UGiHRIiSE4SNCAqiogkQUHyqCJISoooIpJaUig6hBQoAkFSQSAiwCWCDISEJK6qjyKkiDJOSC+IISgYiqsoIU4oRyqLgoAYSNKKEhjHIomEjgKFgoGIhLiK4iWFopCKkhcSRyIppIQiQtWqsVEoAloYSHiIWyQgSFWiojJIWCoZEegoIpIeGhuqqyQqERllIiKxRPQXoUYogl5ETxhIiK4UGkIUPCEidFFiyYGkqkJISJVURDwXtDSNEosiJmQfAoIqlE8RExIxKiFCiiABsoJqhEgKqKJESKaIKgRIgkIIECGuQYuCIISoWhIk5IoIKvKEiIoSiF2ooBqKbKQkKBjMISRIGmGgKJWKJIGhEyIkgcqKgjohGKqSKFohEojSinhFqhiKeor6SkEUCoFUiBp6gsVESBISykQYgkoJEtgiWiVR6Br4rSoqQRipiiLORBIXGCUqJJpYGkGjFUTEL4ElJEQ1giWEWEGuJEMRSIjy2CRHEoKhIU9CgoRDgVKAK4EziIREDCGEhJMogsBExogiJEgNoigaEkihKC1CGiKEiYTYIqMkgWZIEwSEnhgmgig8EkQAjQiNgioUFM2KjCQkFBj4pYYlgQGLJU1SFCgtFESSISyIQmihSqEa4ohjJIiBCIAYeKLRJCTFioJEYEiCzVRGEkJBhLxBchjDRCGukoiLJK1USogSU4QkFFgoFhRCpIKGVBKCyB1MQKihE0VMwicRQBSEohgZJCHIECKeREkSGAJJShJogkgQJgRSCIJYRiIkhBgoDVFAhIGBqoKGBEGmoqIKSBABaEaKpIUqgAFgSiIIFIgpSEhiKC1BQoKCKE6CiSQhggkkJKgWIoGBJgiBhCiIJgRCiAJIFqIoAoCEgUjigiACgAIIqkFElIGEKUhKYIRE2IhyohRFAoTCSE2OPDVBz0KipK9BUd0OqiRF9RoSbnoUrUXaGq5apdVaWrZapdVfXouGXyWFgV9ei8JfJUVBXxPKws+FxUHxj4Ki7wFFSOga/jo0Tf0aHM7SpK9BUVqlqqStRdoerlqlV1pb5lrlVV9aioZbJYVXGPylsiT0VVE4+CS/JUXB8Y+Cou8BxUjoGvoqJEX1GhiO0uSvQVF6p6Gq5EfRWqWq5aXXeqWqJaVVWPilomWldTj4paIk9PVROPgkryVHYfGPgqKoJvYeUY+CouSvQfH4rYrqJEf1GhquWqRF0Vqlqq2lV1qlqiWlVGj4paIlpF9rioJfJ0fPAozFMLQklEBIRApEFMAQCWBJASZCCEYkEghDQUGEWCEUSICEEggTMUThjBQokEIaShpGDKqUiSxCRBwoxcaIRQgocoLUQkhIOFFEgYQgwQIpiEkESQRiwRRgJGlkIkKQggAUQhJoICKVokKEA0JoaSgmwSQpJOJCFkISLBRIGEAKiEIYAEEEgoFUKCMiTQnA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAA/DZFLMIqJEQQGNQSF7g4RMHEJxiDSMKCKbmUJpKkQk0YjAiKQggYKkEsS4i4gqKSjRRoQoN4hojRghikGEspi0iIi4QuFoFjsSKII6QUgq9CZSgjZCKMNC5KgUSohEElGDqCRKGOQocpRIPJSEkk4UjEwikWsiI0QocoI5wkIyXhKCEjcsLoIki6gkQGQwFtGIZCqBgkTyg0hocpI2SkiIZEhCQ0ikFKgbiEAVYEQwJGhHzoooGCSEoR9DH2KCRABISAEhI6FKCEQEKhGCCtIoCENIhCIoKiGIACIHgiIhEISSgRqIGJCCwYNEiJlCgtiCATAmhgiEuCKSRxIojCWEiEiBAUuIoIJQIjFAIgJKkRQUKIKIglIthChJgiShmigSKGIhIUAkQSRBYCYcDGIicoiVSiQiBIJGikEARLiEGwRIQCSoJIMsgSgKFEHDZJISZIEggQZBWwSEKTrSUxiIgkI5okkIRCTRgAiMSAIUKsgYQigirIFIkmFJiGiCRMgqkhgoiISQFhojhIiQFOElCCSExUhoACQpCCMBJBgUM4mCW0GEiYRCDMgilGwkJCgaqEokFMgSQCrIRIqiwlBIBcgoiEGhgCRJJDCIJDdIKUQiSIGEoBOCAhGARGJISCKIgUQvQ/+gCEJgKDBEaEMhwYiBCECoRJJSjWgSKhJkFKiFSIGkoCRCCEFgQATJFIhFgAgKGKLDJESQEQCkGQIkYMiiLxSBgthhhghkgmmIKBEhASBACPiBFSKiiLIUKJqCIpRBgCWIBGOCKESkaYIoZGKIRVhIwCYChAigGgUbAUCEcjsGaIEoQxSBqUQqBEIIIkIYRI5tEqiQJIIijBhSQCgBIikkgaxISMARIgCMGMCIKAqBQaQogBAEiBKoUCKEMogYEIQgAikCjAYgAhJiJiZCFCiEYCAEJCq4IsiwEsJKQkgCSEhARIGEJMAVIgCJISYhgSoEiAo4QggQUYgAGJBI2EQYwSKAEQBIKghIkCAEGDBEwqY0QkH86FBKAmJUjYhESkEkGggy0khIgykNxogKJIRC5IisiIQhoiOFIWDFIoQSCExTSJRKhCQRIaiApMMhJJIUIIaEEkJCaIIuilhHFKgpQiQonESkiPKPKIEiQQpERILohIFjhCSrUoBokCJ0JWkliAIQS+GGtCjAFyqSiSFkrERIAyWGApACGDpZJJVYRPgYgDZGoIQ6IYSuihBkJCRIyEoYRLMkhF1OI2o00oKYISKJRIRZIUhUZEJCIoZihLwhI6CFiOWE4kiamCjDSkStpIEoi0iBK8jAFD0YShQ6wySikIAEQvQnFIhAgvhLFIaKJwRIL4mGKBLRSEJ4FCjSI2lEqDhqGCSxKNFMwaBEOBxYgtVCSIK5StJGsU4iuCIUqSEowkSSI6iEIeIieBJqLCxyRiQCSEUkI+RrAiIZFyEoxB+oJITPgkykrCGM3CQwSMjhFiQxoCzIS2FDQYgwJBiEY0bC8kB4kBgEQIGCGBAAAiKEKgg0gaCUoIhLCIJghghFCIgkQoGEKEQgAAQXBIBIQSgTJEgCZBAhBiKIs6EIIkITIkQAQtFEgAUkKKFRi4QiIEAIAJqAAiGCGIZEKCgARAUoQYIjgAkEgSgMIU0EYCoBKAAUAIQhIAgAJNTC5aIUEoKCYIGlQkIsAURCBoRCyYnCAIEBg0GCaIRBRCTAiIRiRBIsEUYKIhhoIBgnA0AqYCAKMIIwSEjDQUhIwrBEFIgYAJQcwCQYABZABgQhKIKCSQEoEQAi4YQmkBIkIAEAQoZEoDgBEiASmYioIrQwCGiARGiIgkggJJhJJEGChgQYIk8JqBcCICAABERCGAAhIghAEAKgQiIAgiIAIgQgSBkChIACAEABAELIQMAIgwggAiAEKEaAAwGIuBAACEghBCIhgSRCIIYiRCACAIIoWiKLAoJAIAAEACIMQYRIBRxIpEiAQAhkICQUMBGMCIkBiABELMOIksEZxIFCkWgkFCJAKKAjIoiiUkgQKBRCAjCAAoQBgIGIKKAiAhKSEBAIAaAoQYKgFSYCIYQgAhRIEhIIaEASEplBQjAUA0QiaEkhIiiICE4YKIIiQiDABIiCGIQQCAJAEAEiAkAZjAEkMZRFSGQUMSFEQUMkghSoIpAgBIGPc/RBQYIJRFEptEMBEAEZKCESoCSEgqBoGKhDQkSiYohGFEGEIoggAwJADKhCphiMqGBKBGIEQEKiUKihISEiIJIUEAEMKEFgiCABgQBK1oAEqihIChRAAaAkYIJAAARChAiOKIgQOFCAAQAoRPLIbEiFigVCkBI4EIAJBEAIIj4UHCONPLIYAWQhgiNCJCFIEQKAQRhCggCCqExISQiEAoMiSEgAgihIuEIAkghsFIgQAQAipIIggkABISIMQSWJAoGCiCkBQgAQAYQk4UgCGGIooBIGiIAJgSHiQgiIiFAYCsEiwCKILYIhiEgCiKCKA0IKEUSoKhSDCiSBoIQMQ0iADvwUWIBSFgQRACQAGBEYwBgITCGACShggoGqSBIoSAAkSBRERISCAC4ESBAoMIiBACGGYiDChCIAIAhCBVKBJwEsIUSIAEEkIaiCZBAkiABDg4GEISIBIoiaSBaBAkBQCqiAOggSHIgKEkQAiAIgiAEQIQhEQIMEgsEuSiE8EoEAixkBEgohIUQAgmKIGCKAEAKBg6iCSCAoiCwBQqEaQkSIyBGAQAhCggKCQCAGCBScJSGCJABAAARAAAIUJiQSggghQYCEIAEhAoJQgAIAiCgCKGIgJCACACghggJDIUcIQYBEoYCEFJE4gigqISSgKGiKJCQa+0AkMRLCKCIQIQiEICECEEAIRACBCEAgBgQhgAQCgoIgiCUgAAKEQiIIGhUiQYQiwEJQJCgASCIWKgEqAUAHBSqMRFAmAoQgBYgoJEiIACrCQCgwKBABiAAhiAJMFIIohCFiQhiAEjIREEGEkEABAUCIFIQVYowVIjByMCSEhANCgYUIQTKKJKgktISEPCSJqigoKAhASIEkJGqEGDjAKCEoIiYoCSFKIigkhIIRhJhIQUAgBEAKAaQAIaAhpaJAAQBmAhMBgsKCESghICIIEEKBKggSABAACCGBiYIhgAkowCSBACSSSEtiI0HEOIooJCI4wMQ8WCABjBRCeBHt6ANSIAAIyEgkGCoiFEWIqCgcESEITCJCgAgBQIIMEkhBAEABgAAAAAEikBJiIEgAWgEUIhICOCdIiKBCIrggAwQkEgggIhSIgAsMIqhEIqCAAAKACgQogaBIiJCCQqiAFACACCgAgkgIKIVCSIgAQASAD8NVYkQJIiIHQoAkigEoEUFgEgiESIBACMKIFJBEYkgQRKCCIQBCAEABhIRICuSCaCiciiwIKACCAEJIwYCIgkggCDyIKMmRJIQESihAAAAEACQsiYYIOAAdBCJAQohEJAIqJIoEKEgyikQSKAKGiCgYiIiAASaEOIghEoQgjwKouMkkS3oypWI5cmGvFJYoW0EcEhidiRIbixuDnkg6xRKtZIgfJItEKK5UiiiCjC4k9EpBNJskj4JISDsYRaRMqSFMokIaEkXoSMqiSLpEr1goJGIuYooXhLGE6iSpSiWuEmIrFCeFKEVIhJfSjiJOEmidFC8YISx0TatJK0FKFUGG9E2qLhiLUitCKoJNjghQtKrFE4ymSBEo8hAZohxBJFpBQqi7UoDYsp8BiCQqpiiB6ImODP+EIkmtRIzFQuFI9OcoKktCWEjNJCErJU+kQohESLQatxSeKROdWnQyeGMCJGmhRWb4JG6BGyIVESERzji+RBgoRopYshgihCiqThOizrhqEkyjHYiuRByjgmpCGJgoHiSKFBSYThhZIoQyTUJDZSI4WnJSzxGIJpvhLUJEUiNEYaKCEGTjiJtYJjYinCliFNUjqE5KSxROlC9SLUq5asNWKKYirCKaU4K9JSiqFamItojOKKAaJKCWLI4kZoJYSiwpoksTI0GFJOiDrsQqFIaZlkRXiE+BhCTLIUtGRRSBYyZMvBZsJoRE0YT4axFPIkEj/PwhTwKypK9BE10KqkRF9RoSKFChWhqoWoVRWoqiy0WCX0qKhEWiX0rKig1SiPgiKoVYr4KGjgQamIj4KiRE9BIQhq9BQUqlqISnREpKolqlWEqloiWgWqWmIrVaCiJaLVJI+CAlrlLPgiYiEaoYitakrkQYNYqkq0VOEqUiorREqoiiWqVUSqmhKLVUKuqKBV8Kyo4EUNKgJapYiPggYa4Yj4qGhKpBWKWIhK9BQUS6otGotERaSrp6JaVUSqWiJaVUSPilpiWiX0KKgkT0U1RI+SOS9YqyKnhhtEHxFRqC+E9lVVXSWHghLgSvOIqI+F9VFBT0iiii8h5UHxqKyPiqgRWqWojSgeVB5UrShQJEP0iKiHglsRS9GPmFiIRfSklKBET0X1tLSLio+FVERPSrmiWIhKxCSOoiWoQU9IqoojpBEuJCbyUlQeFI+C8iioJE9I6CKyIrIVsZTVuPhoKkFBr6jYitJEpDMuIlKgui2CLUrwLCQvKvgSEloFqvhUUkr0qKiPouIktBQ1IirqJaSYh4KPojIRiu268kpqSqWbjyj4SmpPRaSyqvJKSkqUhC8qelr6RFTwoqInpE9BVYyvovpSEhpRyI6ILyGkGCsij8MKjOKitkjUEVGBrUJOVVdFT4JSiMAkroiPgvRIREOhqo5CL0VhwY2oiaVViKb4KFQeFBY4KEREToiPitJI4UHpgfIoKI9C8RSEQwhOVE9FOZQuSIdETaRPKGiKgUQqUiJES6GOoicoWqEhJuJi5UThgfIoKIdCQSgvIuJC4UHhidiK8ioUHhQeiqeogSg6EgIoJlKiIUzyJCIvKLVSJeUo+oJSWuSE+qgqjyqlVRIoKqTE1vqqKomBYaGMtkikhIZSiI9EtESoKK5Kq0ROhCz6olqvRbVUiOoi9EJUR8XNqq8itRJhgY2IhjREYDJTiwGPpLIRUVWlSPJVVRcTjShQREP4qIiF+BVFoor6ElJLEcuqj4gKWvWoiCJBSxGHgipC5EHxqIiNKB4US5Gq+igoUESgRE9EpBGKqkRF9ISkjqIvJNREkaQriiRFpIooJAAm8hQSQY+C8igoRaTMKyIuIh4UnhStiK+CxkRJ8YqKjUpDpIEjUiKgIi8o2KKEVEQtIhqhESrygqIrVfCoqK+CslKFJAJKBK+i8ioogLEi8igoGJCKj4TURKQiinhCmkRM2IjyWkpPRAUvIrJC9BRURI2ILyGkVYUIJyRKBJ9BCCgvgrRq9RERFdqI9EJVWyWEh4JESfKkqIWYSB4kS4iuUisRQ9GMOCgYHqiLKBhLEU+BkigqEdSEeoi4KPEUlBKEiWFBQUhGlDQ6kkhG1ES4pPqCQidESXgkIhLiQXikMiIjASQqEdaEciiYSEx0RIKyIrEU8ZSKjSqD8hQUrHiKGJokHiIkIcCCJ6ghTHqEsiIlgaKKqjVSjPqoKKOaQoCiQlKMcigYiqEhLSqjgijYqvRKREsxKmioK0SISeqo8RoUT0GIaiotFEdBTaiHIitUVpiIjkRJNEQue8PfRGEiTmIbRBoR8khCcCWFUqpFJKKKGvVRUSIoSmREIoqqEaCKh4JLVSCiIkJEqCgaQfSoqGpWRIKgREr1hISMUohKpCiOoqXaRKSCI0IioYonIiRaoSIp4mWlVYVYiKBFISTgQRESAkRAUkQakSIlggTggQGKqKiApCItIqBEihiiRE9BoSIqggEnIiiAUYKPhKZVEIKkVLq4IpJIQkz4KqJST0QFLyj4UhJKVMwvIqpBSuSC8qioZ2RK9CgoT5vGFEEwIhlBgrRC5EQSZIKFFIQq6EGxFAIqZERKooIqJYXqiBIYhILiQqSEiijiQiGBKEi0FCgIWF6kSyqEi0Sgqi+o8UpESUoiUkJLgaoCKxEaoiItVCtUVliIjVRLQVYCLRQSFkLiRCEBkEIYHiIkISDCGBqhgYIqgYQiqhJISii4guVFpSUqgiQkhAJAGAIAIUhKqCgjGoj4JCKjwkRCKshSI8UozaIjqEROKCqiQkhK4lI4r0U0KSOyUVVEJCHQESJSImBCKBpUVU0kIotERXQopIoAioryREREKIRGVEQqKEJEVIhKhAQoSqRFqiKiRCA6IkqE5ELIIisVR0FNJC0iIVoBK6hvQUFUiI0oTUTgKhhCVEQkJEREEAIaQQIAikgIiihSKlhwIhKCoYglslJFJIICGC8iEiKBUSKPhqZVUCJIIBKCJDQkrapa9ERUIiXyEhJK1ESIKgWEj4LSZgSF+Ef9RBXLIhgbESgnIotEoCKEHOFBESFiQUEq0ohkREWUqIIQJGpKRQSiJfREhIqKQrREmCEqokISIAJgiCqkRBpjKCqlREyKUioWtBQCJoIxFKgvaHEUBI+o0kJ0RJSEJypER0URKVRCQSgmgqEVHighSBIq6IiBoYGKUqgpJcEioSkR5Cg4giUEqpJSQhYSkhJCFVIiIUDyIkIpAUuDIwgW5CISCkEijRIjwYSoSERFCCAEjl3jKnQiyEJIwCKDAhoiQhjVFKKCgDSkoEVMdIQoChp0hCjIREEij4iSVIqECENhXIOIhIGIokISisKISCCoKCtFTKQoKSiRVJCCI4EVtCKSFkB4qPISVFpoKCFJdMRhKEhMZUEo4EWhgaliJEgyIKQUoCgaBCiFMhIWBBBCBIIjhBQCSFZRgqmEASgjIgSCRkjkQaIoGpQUSQKJhAQgYURDIhK0FFSIz/zPFBEAHhRgIkoEQAoXEYKgFUEigUggAkJBgwIaBKYYwhSCIiAVgYKkESCCBCKAJIFSIkpBBIWiFESCIBSECEwEEEIEIiAVUSJIACJCIEIiJKGIgAWihYIFigIYQYIhUqAqIRqhiCQgtYFogkgYijgq4EGhiIAkIRiKBIpYKBJEqgpIQY2IIAWqNcRD1aGyKuTUMR1Guj7kVLEdYuKpZFzboaaaWtadpaaS2tbXhX+o0oJlFV2ohyotfMcVHTjD2kL1XIEfqLIu6MizdPiBPutCTh1bgYa+LuxUsRXq6pHu5rUVauqpZdVZaiqpb1d9qIcqKWcXfaiHKi1URxcdKIPaQvVUgR+oMiqONsuFH+izKuzUsR1oqKvCTh1boaaaSsa3F2qrqWX1eWsrqWVVXaiHKil9WNGFeqjSwnVU0YEzqC1UzxX4gSqjwhzLhR+oszrsVLEdaKjrQk4d+6GmnkpGvxVqq6ll1VlrK6l1WNSEe6jSgnVY0oR7qNJCNVTM8vwtAJRQEUidEUIXkRAFIFiYiBGCoFQh3hiABACDAodDEIRYyIr4JCSCQyEUiAiCGIgSKgbCAIEqCCpCAiWiJiRIIWggAUhwQgInwop8GKhEhQiFqESBQiWCXCLKQagUpaIRQRoESgSOKHBICIMCUuCEAoUIixLIg6FMNqhEhYRS6FCOIiE4JDpRKhoRYoMgAY1IMBgkTUQhTZRTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAIEA8PsvkCiEHTgQuRxUIXAhyCQdaI4iiiTiiCQKKgIqWkiIjCZhgowetCjCFBiAIjGkj4GbJELNqBASLCjiREOowoAGGEcoKPAiHEbmRkaoMiVqgqIisDihRIkosWoIK6FIIWPIwqBBIyiiKUoMLYIoi4QoSqIYIks9GGLIICqkEkRKpBMYzkQYgGghEoucsEpBKMkUqsjISUhkQo9CMlIAeIJCIlqF4SaESCZUJIP0FJ4zRUJIigJJ0Si0ImQiGESLwiKMIaiCgoCCMUhBgkhA1IQIQIQBgUwaOIRABBAsKAKKQQgQEsiEJCNBMhhHJks0YiljKIEoIoOFFCjRgmQoIYIjJIishBLCIIgkNGLASICEgiOhEhoESIqiSCISSBAERKggCImEmUqgGCFBwIwQZMhDARA4RABKwRSySJBEyyRCQj8nDIkCHRhQiRABFYgSwYIgxkgAIigogoEwOCKLKEKLIiABqBKBHhgqItSIShIIUIROJImCJIiiFIwBKPAoRACEQKiiACggISQogqMoQDJEJEACIhIihoQYooKgggDDDCKIAAAiSYeBJSgkARo4EoIAFiiEoYp4iKAiLCIEEiiaBCIgZiSIJMCCiVHkYwhACBABEUgRJhgSCKYYESgiDERQQoGBACKAUoEigSGpmCgeioQhgQBFMSShUYTiSCghhEREQUOKlGYAQChSGEyxRBFEBCASFDJUQUQAFhLCEkIoigRCEIQCGEMkMRRaKAYqOEIYQhCUJEEYgEFIiGSIALCIgQhgpIhNSiABXiJJxCQgATAigv+nzlQhABgqwRQjBBIkQUGABCQSJAAhAJAiKAAwFAAAEUIoAGCCAAAiRABQgQAZBBNEgULYhEIBAACMomQAFCISACIgQQREAMgQwcEpREQCsEQCjJkUQUEtKJAUQYiIkIRITRKAASUEgBMUIgQARJZIBOBBASJIABg8N5cnREAIkBFFEiFBwT4hAI5oEYQwwhAEQBgKADAkAIEhrIjigcgoQAiERCKkRISqgQQ0gUFESFtCQjyGQswoAJESSQVCQgBMYiFBREkCEikRZiFBgIzIQSAkFmQhYEEqIe3IAkMoRGhEQaBKiBYES0GHIYEadohCBKCCLIgEhySQRoY0GEQrFFJJI4IhBIDx1n8kgRYDOgQYjRwnIrAUFMwhJSHSQpFCImtBYRrNFEbogSnCGE0oOI1ILhSXhEtBFgiHQo2Ei0FNnEwiwYwU4KKEUoRJJHKK7BKihShERCwGyEPihgJOJICSOKBBGCtCI1FIEihMgaESQAUhgRqIAiFcOBInTmohwhKKyBIig6gSQjpC4kWEkWSCK0IeJOCBgZUUGI+CCCOVlCGKZIEpAhgmJCiDgeOIgpEiIKwhoJPwckgumXKEAAAAEoAxSoMyI1Ep0iSBIkGEgRWEASQWBCQiGJBCAEEkQDgoABEoRYhCCAAgCIhEAACIkBQAIhiQIhKEABAkgwERABgAAESISBgwgoAVBAAoIUEYjEICRBoCTAEogygEAIAkAgCAAYIAAABJAigiP2kPIZAzSACDQRIIAACAREICiCKHhCBJaIKENkjhhAGHgRCYiEFKwRTASIJAAkFBamhEFBIoACQioGKgQoBBCAAYEIIBKEEjAUJAAoEAgMQRIyQkIgIaBIQATAEYSgRJjCEiASChFBiBEMIiEiAEgCSBIgE4aIGgQoQrYRgYpuKFxJMjBBgSABhwJghERAAoABAkFAISkGgAIiBEHASAgsIYRIYEEAQgBAChiSIGQARIwNQQCCiAIhE0SCAkSAQAABAEAIIiJCCYIkQgCIIsohgoUigAAABGhAKBAAASRIJMiGGiAEkyhAAYABYCggAAAB9vjgWAkiEAgEEoBCQTViIiEGQhQ+JmBGKQJEQi4IQiASwCIkCCgpQiKQRGBUYi4iJSRAAQMWZEIihAVEIoQhFEQBRIBBhRR0FEGgFCwERMASIAAAAkgiSgEgBGBIIAIAIYsEIRAgAqCAAkErBEAUghQyhEiAEiWqIUQkJKggEAhE538UQSYIFIEUAUhDFEYUQiwBgAEhA4EhgeJBIYLIEhBCgQFIICpQREQUSAIgQgBhACQwIAJ0IAEEQEQBGEBIGEEpBBIIUDgIQEIAiAKBEhCEhEgohCIgAgoyGCGCqEIsgikikGgoiAlIKoLLgoSJioiSG0JITELCCiKBiBi4IQCEQvgwKBEjIAgKRCACAkBEEAgQAAYQCEAFQqUpFACCASggTASBQAUDFEYEIUIDJIIgAAMCgSEARiIAGgJAAiQAQAEUgRiCAoiAgggoSBgREEGkQCAKASAIAEoIIAgSMqiAgYAAAAgAiIEoYEAEjcLw6BIGRBsBQSAgAoIAEkgAIhAIQhIgAmREFISAQiMExCRQgpAgAiAIGABAAAQMEiAAAAADAkABiQFBgYQQAAAEhUUkEkoCQgCAAoIAwYGBACiEyBgoEChgIAAElECEAMiQIAghAIMCiE4IIEf5EPwBQiQARBgQAwKIwCABggIgJMgpEUSQSgJBIUAAAhQUQoLCQBREoEISEohCIAERRIgIQCgARCIqBEgIECACAEHASAhUQEJAAAJIAYAiEwQkghIAQAkgAgCCkEACACAIRCIIIEgCIkBIQAgUjA2uMvAaBSGCEYKBACLMQhIAOEQSFEJBACFIBCQogChCSAAhwEJQQsAhAEIgAAYwQAAIBERIECAABAIQEWARJAASIiAAAREhEAGEIAmABCKBgyEAQQAkAIAIchgkQSRogCIQAAQCgEACgiAACIP3cMEAYhSgEYQ4QkcUQFISdBACCkEYAEEoQAEgDAQiiEEEQoAhRFRIECgQAAIAIAicIoQoACRBYBgEGBQRg0TIFBKBkCGCJaASIQAQCIWhEhIoEJiCgaS6SBgAIaKoHCgoigEoSKCEggiQLMAsKqCMOIgoQioSiABCBJZIEqwc1jgwIAEAgRMCEAADASAEACIgAgQoJBAURAIkJECIAEISZEBACAAkGMQoiEAhWCQgkoFAAUFIRJBBSEQESEgmERSEJMAmAYwEEAQIEcohhABBCiWEGABiGCoiABgAJAggWCIYAkIogIKEQAKghABAAS30QPRQQAQYABEgAALAEAIoFApCEoIwQWxCIQJAQiJFAiIiQiAAAkLETBIhQAJxIAJgQAGQIAkEhBAAAAKCAEABAhAQCIMIJApEGCQVIk4CEIUoIAgII8JIBChCQoU0IAhiKoQiigIoCCZEKIwBgQpCQhgiyGASH8OX1HhBaEsVHiQgVJsUGRFIsUIPImQSlTQqkRhHMSpEJtSGtDSyEgYUItFE1yXHUkWBStJE0iJkrUQjJoo/QkQiskSCIuRCMkEjNmREpyJNM4JpJkIEJTNCasJFnSFBEUFGVWQ8Q0GMcRR4EawhRSWjIUTxEkpRYbJEDhFDiBPDmEkBEcqkIpmYQpwZQsrBYewlqIoxIYsEKrHB6EkDI65CRoKIKCjZIpvMaiwYa6aCjqiJSYTihLFDA0yDKLhBiDuCRJOBiMchT4P8xwNFRKPkI6lBRtJGyjFGgalGTFEvEYJBiAVSQYY5ISbihPIWRROuUishjBOOAW0qhEQupiwmQc1kiC5DIRFLRFFJRMJCZKwShMkkJFsShCgUKxSMIhQiKbIhahREOCBR1EHhWM4YLBFEzFESoBTNERheFCA0RCLIjhGMhSihnx8lQquUKkmSFJmxLKM0bKs0YBGlEiTy1JIkgs6KbBQo6aSehkoVgryPBEhiTKxIhNjHBIhMY0TijCQcqxQuhC2oiGEaQSjDIUQ8EoIk5UQwPgRLEUIrJCZFRZYiIpIQEiLVhSKCaSUlIdJCIpJdWBsiiCZBQuKqsmFRTEKqtCRnQ1RJJIRrUkYiIpdESVJSIpZFTdJCJOSEbVRWIiSEbRQSLSRHVElSEiTVRHFR0og9JFsRSEokJeFVdBgOZUsRUCSEaVhYJKZRVbiKJYVoQoiCXlSCraQjVUKSLCVEvFjqIjwhRLgY4qryakFEuBhtoq5ESRpKa6WmRESWqKiWREySqKZUSMOqhJBIw6KEjSjPLCukzxVCifotJCNVUVSHIi1EHxFSguUkRF9DQqh6IlVIQoLlJeFEfBLMIUGuWVEslWL0VpMZ+C8ohEL1R0QfoqKoFFZKQ/ovRqRE8UcRHCSIdWV0RPotIq9UJBV1RXg4+iZFRVtSGCZFRVfSm4IuQUdEH5KSguVE9V/EUrH4KiWm9V9EUhm2KPQnEUtBSyIeZU9UU1U4HEVV9VMTUYXHRFNZUp9EJBF9VRK1KvRbVUqIgtVCtFWqqoL0r1RNRLJeBI9UbES4UvKPYiFU9B+dQqv6i2auVF8xSKr6h0avRUNE+i+IpCRnRE9LQorliPRPVEhEuoqvRYRE/F0oz6qEIj5YG6LLIitEJ0RMJVQ9tE8SIiJvhFVBElWohbRFdBL6LySkgfVNRE4iJSokVURChKpRHEh6JJoUUXUo+C8kJWHhQdKSJORB9U1KpyKEpE1KLySmpPRPQVFSXySEhfFNREcir6SEhfFNRVgvJCSBQdJSJKVFUdJayiRB8U1BHigvJUVF9U9CEpLihLVR8U9CEpKvIUFEEqokZfVPURFID0FRVfUQPwRUVVNYJOQh8V9IWFLOIl9VRUiCReQhqE4irSZvVUVCgiT0X0RFQvKNIi8hQURdSq8kpKWvUUlKeor6R0RITzqoovJPRERIKM8khYTRRPSKqoSvUURM/I2ojSIoUxKCsib0S0RAS/bsUUT6EyKo9ScRRVJKVYWBzjI3Iq+khESyQkI5IaFpQkLlIrFVpyLLoqpVVW8SEoi1JLFUN1KLgotET0RCilOipFxChIbkRNERchSE5ETiRF8iJKpxQdIRkCrURPFBIhQpUlLJJIRpEhGfIoRE5BWySTklheRVcUjSguFDAU4FbxFRFTgeQU0UEzFEAUVSGOEh5BF0VdIixhQUnIgo4SElIs4krxFERDBEz0RIRBLygyIkx5lHiIuirlRXEU2ip0QvREJE+DeIhCdET0pCiHiodBT0G4hCrqRXFEmKiqpRSM+igiLkZHREbYqDS7TRQq0ipSVEUVWCJF4RKyKBLyQUEip6KpoREAXlJPRbEs0iKiRErUmQJvJLRU0ZGCskT0RUGHgq0qREQmqGRORB9RQQIfFHQkhPJCQnAhcShYKE5BFxIoUFWHgqOiRBVxKbgo4kT0RUGbIoFa9UFBlCpCFARKVlUbEaBEHRFPQwFQRREkKxEfFVRFI7IS9VRUiCEjIYGyotJm9ERUKPBEREV0gvIiIlBEh4inolr1FJSl+kJCR0ESj4hYIk1E4IJyGHgU9ISEiqoUTVSNKCoiISHiIuIkZESF+JGfGEeBhegSoRESwFVPRDIkSCXRUdIlUoIAIAJMYiIiGBIqItJC5JVSgYNC1SESciIErNKIFmpERcJIh1QbJCgkKfREJEnCSCcUHSSgQkrkRNKhgqRETiGESEdEFIwiskTxFCgTgnEUJIGkVkYVhGRETxUSgeQUZFRFYigYFoGiGBokBSmlFBoCLVIrFRoCAEYCLhRD4SHyIkIjAoiGGsoUTYIrSIPkRDiEKrRIIYSiUlhKaoiDIoVyKBKIpSEue6OxFFEijOIVBSVSiE5BT0JSIo+EJHQlBYRQRCgALiSNKqARKIUIXlQiKEB0IoICYCKPgiRURCGPhKREIiKl+EVBR0IiTkoUJoSiRHAhdCIISmQShEFEFC4oS0RDsSESuBQhAShKxRQARXQhAeAUVFSGAhIUppJCSgSwQiUBoBEaAQBCAE9BIVEiLyIEAKUKOC2Ci0RCigiPhIQBKIChiIWIJLEoUihNFBgq8rOpREehrSKtERdVRVqipVUVpCVYGhPkgtKoUUpFFGSCJXRE3IQSiOGBUoiFVEJPhMIohUQUpCIlBISLYiFERYJkRGCih4KBYIKHooUEKoKkREZ4KbgqJER4KJhIQoSEgWCBgAESKEphEUEqJCQhgiQEUCIpASQqMRISJCOYEkDSIjRCABiIVgKAKMlCIwJAEkK0FKhIQk6ER4iJkRhSgAVWFMQSI+VBUigtFkl1FMiy41oUJTIoHxFB8SIqhVgRFCVaiEqBAo0YRVREhIFCRXwoSOJBIfIoKERPRaGCJkJURCgiSBQtIiokVEQqAoDSqFKIGCgopUiFYoJKBBnSqAJEKIUIwIiFqkQSQIhlESCiEYACgAKAASEkAC0qLUIAISVSRBACgEgioRQASBYBK0IAKCGggYqoRBhAmBgaAYQgUURwEuJBEVQiT2GRFIz4l/hYEYQuQRIRh4IlITEhqVQSEhEuGBJEIFJCTMIoABaUKEBEqColBCBCpEQRiyJEACoCIFKIRBNhghAKQYQARTIowCwmCEUEh4gpFASBibFEFQEqQQQiSCgAgKGIJBKAWChKAYgYwCTAEgCoJBqoJABKFWEoQgAqkkIaiiIYgoMIAIAh5EGCyFIYiCIlAkXokj5ZRUESAkPBImBEGgKBThQopCEWBIQYQoxCklJEKIEtFFIZSAJFwSIjglQULJJCRhTEIkhGhUISggEiYFQoJogk1IECSEQRgAUZSAJDEQFIRYGCBBOBgoQBgMQRGWgoWBIZaKoYgGgoIVaEaChIEqgkoIGGIoLEgYoiAogoABKCqaQUqCaYGFIohCCEKAJEhIFEQqgvL85cFK/iokRfUSHU6qJEX1GhYuWqRF0VqlquWlVVqlrmWlVVj4paJlpVUY/KWiJPRVURz8JK8lxcHxj4LirwHFyOge+iokTfUaGIrSpK9B0VqlruStRVoarlqlVVpaplrlVV9aioZaJVFfWorCXyVFQV8Sy8JE9H9YGBr+ICT0HlGPg6Pkr0FRWK2K6iRF9Roarn4UrUVaGqpa7VVaWqZa5VVfWoqGWi1RX1qKwl8lRUFfEoqCRPZfWBga+iI/gWVo6B76OjxP/xoYiv4aJE//GhquWuRH0Vqlru2lVVqlrm2lVEj4paIovVRI+KWiJPRQWPMhcaSBgkhARBRCCEBABAFEQURJQUREEAQURBTDIsxMHMMiiEQcRIhEEYAChEQAREAEGQRBAEAEhAFIQkwSSABEQSGEOBkUQAABgASIBkSMhEAEkkBIKIgAJIQiDkKIQIEkIpZIiJLJSChMFGlEIiSWJMiBBElKREIEgoiAgoAK/zCwAAAAAAAAAAABIAAAAAAAAAAABABAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAIAEAAABEAAAAAAAAAAAAAAAAAAAAAAAAADw9LSIoIkCiFEmkJCgSQAQiIAxkwCEgRDgiJpiSSBYEQxIokiRFMiyBgWShQkCCslMIJ4Iq2CQCgQAiMEKQaCglCShHpIPCGIRGmCiM0SiBIUEEIjASEBQEACASAQCAkUQYGoKDggRIQoAi40RDBCUIAISQiKgmokJITySoQiIiECQiBADIAACA9G2BgAIiJCCUJCgYAOCBAiBGBBABxISEEAJBMCRgQiJpkhSEEAQAIDLCKKmoImEQCCDCQoCCAoJgisAYUIRggjAYIEGEAgCAAoAiZCEQAQAgEsQ0oCKQREggBCIuFGJBEAIAgYiBIioEQksoTmgoAEEqBAAsKCQBAMBnE4ICAICBJAQARAAgCCEgAkKQIiiSKmQhAIEAEEgYRFKCSEAStCEBAACAAgAAgwSVAtAkNigQiEQoESKBFARIYCFARIQERCACAAAaiCQBGEhCgIECIAEAhCggBIggGIICIwQAAAAYSCIAKgQASL/zRwQhQAgkEBICSRFEBERABiZEARAEACLREBQYFAgQFAiAARAEMBEAQAIAhCFABBgARgQUSBAFRCCBAigAREIQhARkEkRAhARIIkFEYEQgAcMhQgSAARhCJUQ0IsIAJ0FGwkQAQCJUSAAQBEEpAhIAjDQ/JihCBHxCAkARmBIZAigQQgkQAiJBIRADIQBAAiTAEgAAIQAkQSREGABBcBIEQQAALERGEkJCBJBCEEIERAAoJBEYIBEEAGBBFECUFMAUIAFBAEEoIAFEEAiDASgwHDAYEkAUDIGQEkJNGFCGQYyFVIJgQUHvxAsiJgT0JgJAERK4FhIBQwJhhZQiEAYmBCEUIcQhIYQQBiEZEQYAGCFEEFIkEUESQBRCFEIUCABQRCFEISFJBEhAQmQREAQgUhJLFJAUEAQjQQRFBEJIR0MYQSAVNBQYQWBCGIABMFghh0EgTngUQrQYEVJExEAILFGERjgUpEXESCPhJhEIR0ElNjtBIhYIRIQQBmUBQUVSgaEwUiEiQIRUGhkE7EIiAkTEYCIQEgiMERQGQEMEzBICQAJhQDIUAIxBMiIhZBJEwBhMQTIpIxN4JMgSQCYBGI1BmKQkIIEBRxEoQUkTCBIAgYABjRRKAgAQaIESQBIUKBS4SFIoACiEAEwESYR0NKhBKEIig0EI/zsIQQBBTRhAAgAAhCEhAChAApQhAIEQSAREREACgAEQBhAERCRFBFBBABAigRFiIYIhABIAAEAChIQhQQAYRJgQAgDAFCgQpIFACACBIEGIAgAAAEuBEBIEhIQAAAAAAAApJAEAhMDzQ0kIGCQAMBRABEFEAKBBABCEBBGQJCEoAIUEIgCEAEEAQEEEIgAAAABBAAAAQRAEgEFCgQJDggElBCRglCBCAhISEGEhKEMSCBgAAIACRghAhAKJAQBggUigQqEAABiQRIAETAKABBYoBI8mBCgQCAAAEAMkFBBIQgIQBABCJAAAABYCgwJgggCEACEkFQgkACEQFgIAEIhCAiEAjAFBsCgBgQAYjAEAQAgAgUgAAAAAAACAEQQAAIGAAgAAJAAAIoEAQARKEQgiIALAefMHjBMCQGghEEgYBACBEIQCAAAAAEAYFAgAEgAAABJAAQAAEAKAAREhAACAEQERJYEBABABFBARhBECAEAEGCKAARoiAhgAIkRAJAEAgAIAGEAEAAAARABgREEAgAIgBH+lSwghACwBGEEwIoFgEoESQQBE4BFBEQiFAUABgYARAQAAEAQUAAAUABEkEAIAgEECGBEiIAIAIRggIRElYSEkEEIGAEABREQSAAASAAAgAQAgAiACgAEgAUEAoCIAAACgZEggJMEUfBdPGEoCcBgCGIEhhCASSEhEBEAkQUEIEAEQQRwIABgAAABAAQAQARQkISQSQAEgEQIYEhQQESJBAhIYFhEUATRkGCElBABEgMEkRAAYAAAAQRhEACACgAIAEkQSAAAgAgCQREGAhIImJIFkQc+iBIACQAJBAIQAAAAAAEABABQAQAgARAAAAABAAQAQAkACAAARIQAAAAAAAAAAAAAAIQAAIAEAKAAAAAAoAACAAUQAAABBAEQASAAYAEgAAODROhIAACQhACEAACCCAgAAIAEAgRAIAAAAQUMBRAAAABERFAAAAAAgAQAAACIgAQAAQEICABBCAQAgAgAAAACAAQAAQAQAAAAAAAAAAAAAAAAYgPRuKwAAKAAAkBIkEQBBhCACgEEEAIBYKISEAEgUAAAoAACAAQAAhAAAQCQBABlIAgCARBGEARgpAkBCQoJBAUAElACAARaEARISiBYCAIBEAQBBKAAAgAEAAIQiAABEGIABmCRcOjVKFAEgAioSAiABGoECEAiFiAKQJFBEECEYooghAEZYQU5EFQEgAioCABKgEQBQGFCIABAEQQCCIYpYIhggFKFFFRECIqAiACABGgEAiUJRiAAQBEUEIBiiiCUCIDQhSlRRAEMCKgIAEqARACiBEAgSGEFwFAQgOBJvxgxAAgAQAgAgAQAAgSIAAEEAAAAQCIQAAEAEAAAgARABEAEAAAAAACEAgAEAACACACQgAQBABBgAAAAAAAAAAAAAEAQAABIAAAAAABAEAMBjYhtEFYFBAiIoAEAigQEAEEgIIAJJQRQIILiCSAIAQhtEFAAgoiIAABIYAACBhQggAUFFBACCK5gsARggtEFEAUAiggIAIIERESECgYUIABBEBACCK4glggIwRBtEFQEAIigAABIYAACJQigBAEFEACD4eepIJgEAIigkAAAYACIAhAAAIkQAgIFYKACEkEgUAECBAgAAGAAAQAgAACUEgAGIJACAgUQBAMAiAAAkGEABAIQiABBEBACASAIAgEQBACJJAgAogAEAGGCBABISQKQRABIcM/40ABCiIwAAoBEAACKHgigAQFhMEhKEwIRFAwCARBEEACgAAKAREBEBFIQAAECEAQAaWCIAIJFCNAAALiEAJAAaAREAQAkoEhgSTRQYAIBIAgCAVBRBAEQqAgAAGgEAAIQAgAJFBCABSfhsmEgfFBFBAiQiIwIQAhISACoBgxEIABAUBACKeIIaEgigRBNUQQBBSyIiAAASEgAAhRgIAFBEQQCgiDMYAhKgRBOUESQAIiIAABITAUABhRgIgAJBQRIAiniCMiIAKEp0QREBACIiAAASEgAAjSiBAABBQQDgiDZdQhEAAAAAwBoYAACEIAIiQEQEwBggGAIAYBQSAAAiAAAYGQEAGBKBAABQRBIAYCgA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AAAQEREREQEAAAAAAAAAABACAEBCEhICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBEAhACBAYCIEA/3YIAAAAAAAAAAAAAAAAAAAQAgAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEAABASAiEANw2JwAAAAARAAAAAAAAAAAAEAIAQEISEgIhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIgQCEEAiBgQDQZgEAAAAAAAAAAAAAJAAAJEBCQgIAUCIkJCUCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRACAAAhISEAMCqcwIAAAAAAAAAAAAAAAAAEAIAABASEgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAiBQAhAGBgYGAjwz8UAAAAAAAAAAAAAAEBCAiRAAgAAJCEhEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIAACEhISEAKw9SQAAAAAUEQAAAAAAAABAAhACIQAhIVAiISEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAiBAIQQGAIAEPKkSAAAAAAAAAAAAAAAJCQAJEACAAAlAgAlAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEQAgAQAgAAMDjM0ZBAQAAERABAAAAAAAAAAAQAgAAJUICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCIEAhBAIAIEAzTQAAAAAAAAAAAAAAAAAACQAAFAiEEISAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEQAgAQAgAhAD8N2IAAAAAAAAAAAAAAAAAACEAACQhABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEQCEAIgRAYCABPew0AAAAAAAAAAAAAAAAAQAIhAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIAEAIQAgA/DW5AAAAAAAAAAAAAAAAAAAhAAAkISQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCIFACFCIAIGBAM/6BQAAAAAAAAAAAAAAACQkEBJCAgAkQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRACABACEBICMCbow0AAAAAAAAAAAAAAAAhIQAQAgAhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEQCEAIgRAIANCqBgAAAAAAAAAAAAAAAEACISEAACRAAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEAACEQAgAwF+jCgAAAAAAAAAAAAAAABBCUiIAJBACJCElEgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgRAIQAiBEAiBAJ/aBgAAAAAAAAAAAAAAAAAAIQAAJEBCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACIQAAIRACIQAvDUkAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAiBAIQQCIGBAPB+/gAAAAAAAAAAAAAAAAAAEAIAQAIkJCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEAACEQEgIACw+JAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIgQCEEAiBgYEA/2cLAAAAAAAAAAAAAAAAAEBCQkICQEJCQgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEAACEQEhICMDK8wMAAAAAAAAAAAAAAAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBEAhACIGBAADwH20AAAAAAAAAAAAAAAAAJAAAAEBCAkACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRACABASAgAAIw66QAAAAAAAAAAAAAAAAAhAAAAIRACIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgRAIQAiBgQCBAD/fDQAAAAAAAAAAAAAAAEACEAIAQEICJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIAEBICEAIQD/JAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAACPSAEAAAAAAAAAAAAAAABAAhACAEBCAiQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAhEAIQEgIhIQAKLMEAAAAAAAAAAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGBgIgYEA8IwyAAAAAAAAAAAAAAAAAAAQAgBAQkICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIQEhICADATIMNAAAAAAAAAAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGBgIgYEA8IwyAAAAAAAAAAAAAAAAAAAQAgBAQkICJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEAISEhEAIwPTjBwAAAAAAAAAAAAAAAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBgYCIGBAPCMMgAAAAAAAAAAAAAAAAAAJCQkJAAkJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIQEhISAgAzD2hAAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYGBEBgIAM8oAwAAAAAAAAAAAAAAAAAhJEACQEICJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEAIQAiEAISEhISEAHwlBQAAAAAAAAAAAAAAAAAQEhICACEhISEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBgRAYCAB3HQAAAAAAAAAAAAAAAAAAQEJCAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAhACEQAhASEhISAjA2vMGAAAAAAAAAAAAAAAAJAAhEAIQEgIhISEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFACBAIgRAIgQAAAPAbJAAAAAAAAAAAAAAAAAAQQgIkACQkQEJCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACABACIRACIQAAACAMsUAAAAAAAAAAAAAAAAAACEQAhACABACAAAAAAAAAAAAAAAAAAAAAAAAEhIAAAAYAAAAAAAAAAAAAAAAAAAAgUAIEAiBEAiBAACBAE8VBgAAAAAAAAAAAAAAAEACAABAAgAkAAAAAAAAAAAAAAAAAAAAAAAAABiAAQAAABIYAAAAAAAAAAAAAAAAAEAIAEAIhEAIhAAAhAAcN3UAAAAAAAAAAAAAAAAAACEQAhASAiEhIQAAAAAAAAAAAAAAAAAAAAAAACABAAAAAAAgAQAAAAAAAAAAAAAAAIFAGAiEEAiBEEgIEAgALzEDAAAAAAAAAAAAAAAAQAIAAEACACQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAIUIEEgIhFCIAEAIAKw7wwAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISAAAAGAAAAAAAAAAAAAAAAAAAAIEAAIUIgRAIhQgAgYEA/9oBAAAAAAAAAAAAAAAAQAIkQFIiQAJAAgAAAAAAAAAAAAAAAAAAAAAAAICBARgAAAAggQEAAAAAAAAAAAAAAAAAhAAAhIGEQAiEAEBICMDEgQAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhIAAAAAAAASAAAAAAAAAAAAAAAAEAgAAAAAgYGBEAiBAE/4BgAAAAAAAAAAAAAAAABAAiQkQAJAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEBICEAIQAiEACQzAwAAAAAAAAAAAAAAAAAQEgIAIQAhEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGBgIgYEA8JxBAAAAAAAAAAAAAAAAAAAkQAJAQgIkJCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACACEhACEAISEAMBOkwQAAAAAAAAAAAAAAAAAEBICIRACEBICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAgYEAgYGBAACwiQsAAAAAAAAAAAAAAAAhACRAAkBCAiQkJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEAIQAhIQAwLoTBQAAAAAAAAAAAAAAAEACIRACEBICISEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAgYGBEAgQGBgI4LsKAAAAAAAAAAAAAAAAAEASAgAkUCIAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACISEhEAIhAAAwMRTCAAAAAAAAAAAAAAAAAAQAgAQAiQhISEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAiBgYEQCIGBgYEAz64PAAAAAAAAAAAAAAAAAAAhAEACJRICJQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEBISAiEQAgAAOw4FQAAAAAAAAAAAAAAAAAAIQAAISQhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgRBYiIEQSBgIEAjgWQIAAAAAAAAAAAAAAAAAQEJCQgIkISQkJCUCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRASFiIQAiFCEAIwIrjDAAAAAAAAAAAAAAAAAAQAgAQQlIiACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIUIgYGBhIEQCIEA8G9NAAAAAAAAAAAAAAAAACQAIQBAAiRAQgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhRhISEgIhQiEQAgA/DM/AAAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAIGEgYGBhIEQCIGBAP+JBAAAAAAAAAAAAAAAAEACJCEAISRAUiIQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEUIiEhFCIQAiEhAB4IwIAAAAAAAAAAAAAAAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhABAWIiEgYGBhIEQGAgA0F4NAAAAAAAAAAAAAAAAAEASAgAkUCIkUCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIiBhUhICIUIhIQAALw2OQAAAAAAAAAAAAAAAAAAIQAAIVAiIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEgIQAiBEBgYSBgIgYEQCOBvBwAAAAAAAAAAAAAAAABAEgIAJFAiJUISAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBICISEhFCIQEgIhADMNWcAAAAAAAAAAAAAAAAAACEAACEkISEQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACEAIgRAYGEgYCIGBgQCwkgYAAAAAAAAAAAAAAAAAQEJCQgIkISQkJCUCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEgIhISEUIhASEgIALw5zAAAAAAAAAAAAAAAAAAAIQAAISQlEhICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhBBICISBgYGFCBAIgQDwJY4AAAAAAAAAAAAAAAAAEEICJAAkJEBSIiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiEhIRACISEhIQATD1xAAAAAAAAAAAAAAAAAAAhAAAlEkICJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgRBYiIUIgYUIAADwxCIAAAAA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AIRASEhICAAAhABsOnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAQCIGBhRgIhACBAPBanQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEAIhISEhQgQCIQAwFrTCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIQFiIEBgYWIgAAIGBAO99BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAIUYSEhISBgIAISEAOw9ZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBABBIGBgYWIgAEAgAkHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhABACIVISEgYCEAIAEAqBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIQFiIhIGBgYUIAIEQCPD0YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACACFGFiIhISEgQCEQAjAiBMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACIFACIEQGBhYiAAQGAgAz4YDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgQSAiEhISEgQCEhACAMlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBEBEBEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIRQiEAIgRAYGFiIABAYGAhwcwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhACBhEBISEgYCEBISAjAXSIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEEAiEEAiBgYGFCBAIAADdqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAIGEQEhISBgIhAAAwEGzDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREQAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEEAiEEAiBgYGBhBAIEAig2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACBBICISEhIQQSAhACMCzcwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgUAIgVCIhISEgUAIhADAljMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIGEgYGBgYQQCIGBAJ89DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIhQiISEhBBICISEAEw+TwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAISEAISEQAjAsdMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBgYEQGAgAH7sDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAACEhACEhIQAwLszDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBEBgIAAAAH5sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAACEhACEhIQAwLszDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAgYEAgYGBgQDHOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAQEgIhIQAAMAhcwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAIGBEAgAAOCMCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAhIRACAAAgDy4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAhRgIhQgAgQDH0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEQAgAhAD4EwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAIGFCIEAgQDwRtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEBICIQAhADAweMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQSAgQWIgQCBAYCPDt3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAQEgIhACEhADIYwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAIGFCIEQCACwxgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEBICIRACADAWNMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAgYUIgRAIgQC9nwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEBICIRACIQAzDhdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAgYUIgRAYCAAv4Q4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEQAiEhACANPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBABBYiBAIgYGBAG/sBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAhIRACISEhAAcNLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACAAAAM8qCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEQEgIAADcLgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCACFGAiFGAgQCPARQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEQEgIQAjA9XMPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCACBhQiBgRAIAHc6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhABASAiEhEAIACgTDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEgIEFiIEBgIgYEAxQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAISEQEgIhIQAHDKJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAQWIgQGBgIAPAnTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAQEgIhISEAACo0wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAIGFCIGBgRAIcCYHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACACEhEBISAiEABw6xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAEFiIEBgYGAgAb5IOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACACEhEBISEgIABw6KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAEFiIEBgYGBgI8CehAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhABASAiEhISEhACoMwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAAAAX9sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAEAIhIQAAIQA7DtRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGBgIgYEA8LE7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACACEQEgIAEAIwL4TBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCAAQCIGBABAIAE/7DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAhACISEAEBICMCmcwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIEAiBgRAIgQCwRgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIQAiEhABASAjApnMLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCFCIEBhICIEAAB87CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAhAGEhICIGEAAAcO7MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAIFQiIEAgRAI8KE5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhACEQFiIAIRACMChkwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAACBhBAIhRgIEBgIAP9TBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAiBhEBYiACEhABAO50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIAAAQCBAIhRgIEBgYCPCUdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAhEBYiACEhIQAqPMJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAhUgIgVCIgRAIAAAfGgsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGBhICISFCIQAAMB8gwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhBAIhRgIgQCBAE8ZAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgYSAiEhQiEAIQATDkRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAgVCIgYEAgYEA/0ULAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABACEAIhIRACIQAwEYiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQCFSBgYSBgIgYEAN5MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAISBhUgIhQiEhAA8EwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIEAiFGAiBgQAAH+QKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBEAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAhACISFCISEAACMOl8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBhBAIhRgIgYEQCPDqrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQQSAiEhQiEhEAIwOrDCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIEAiFGAiBgYEA8EX+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhACEQFiIQEhICABIgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAFCIhBAIhRgIgYGBgQAutQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISBgYRAWIhASEhICMAU0wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAACFSAiBUIiBgQAAAJ9kCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgYSAiEhUgIAADAfeMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAhUgIgVCIgYEAEAjwSO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgYGEQFiIhABACMB8YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhBAIhRgYCBAIAL+EDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQVBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgYGEQFiIhACEAEA0VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEQUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgQCBUIiBgQCBgQC/rwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFBQUBEUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIAIRAWIiEAISEADw4mQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBQUFBREEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAgRBYiIEQCADwPaYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAIRASFiIQAgAwCbTBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAirMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEREEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABffAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERQRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASEgIhIQAwGIjAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERERERAFAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYGBEBgIAK8RAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBEREQERQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCmwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvbMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvbMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvbMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L0bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAvbMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L0b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J0SFCiWyGFSkRyhNFswBTRJBQRggtERBonQkLkhA9GhHY4cTyhgqgQEUKBSMAkGChUEhASiCYYxJIYEiA4aREgCQEoiEAIQhJICICBQSFACASD4SIQAALAIQBAASKggYACQAIoIhkBpDggEAAMFANCQoSCESjCgUBBAYJAIooBJFIgMhggAlBDBETYjBIAhEECSBFAIghAIYQ7L1TQhGFBFEEWohJBAUwSJGguKYBBVEBIEAJWgYIAJPghYFQkNCggImAkkCIUASWCTAKAAaEiUCQCRIBIQhEYiBgQCgQRAUxBQjFAiAGESDGBQEQaAmISIAIRBEg4EhCChCACUEJkQoIsQokMiEKIXCGgBQIhKFFKJCAABJQThCJBJAyG1jAhIAkERABEAIgSIQJoEIEAGBEQAYABRJAhYiAYYCEYRIVUJhGIIgFEGSgRIgAlASgIIBQigRIRAEEAI6SAhEgkQAiAAkiQIaggEkAAAoAIACEIQBiSEBAAASQBIEABACREwhZCFBEQBIIiADgwRC618gAiZCBpAjhAAAABGCEUBBAkABHAEQBACiACwBQIERrCkAgojARAA4UBgagkRkxCAIzMhEgCEkoigAACiQIikhNBpOqECIAkqiRBqhVCAhNkgARgQYSTpEAACMQgRACIRIgkKkgBVSgpBChggoKECoIolRIaIYhbJEBIGBrDjWIyE0EioEglIXJIBsgjARHIkqhBgBEogWQkJChIJjISQiEkQoRCKipiIoAgDgEiFokoiiUBIAIpo0JAAAIUpCYiSAwSSBKIACAIwIgqU0QkgAAIggAjAkQhoCJBAIKB5CGEyCCCBoiIqBCGCIACskgEESBBiKRGhkQyIohAKMAQCCYvBN3RABQUABgAEAEAQUAIYiKDiBADIUACJEEhgAIRCJEgghMIMwLCQARgSigkBCBEREMIjAJABQQuAhAkQpAYREQqkBIoRBSZIoACABIwEYQ7ISAQAhgxFWiEglEkQSBAAAEKIkEAIQhDFIJEGITAUhGlEqAACBABwxZEEgBBFEABQwQgCACBARAUAaATkRYjKBABGEJiQBADEoAIQAAErSIQEAEY5BQWAkACJEIZAyEkwEIwhFIgiIRABCQDgSLAuDeGiCApAoIARMKCKsNBoIGiICAEtBQAgihEAIJBgWSGiogiYISIRCAAAwGIIAIgDw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IhgoLSKBKMBVYwwgIhEiARAFACAxIkCBASJAIQFgERIAVCIAgEGCkSEAEgAAJIAiIQKQJACDAiIgAoABACiAIiIBKBEAgAIAAAAgAgBCIAEAIjAkACgSpCIgggIAgJISAAAgAgAkGJAoJBoEgAIin/wDGgERKQGQFAAAQIEBQUSAAQAYOAA5ghEhgkFEAUREAEABRAASEBiEASgYAAAAGBAEQWBDAEAEKABAAcAkIEERQgiBgwIoAEEiAABlVIiwGAIhAACAAgAsAaAiMCgAISQgAiIQAkAyKDAivBgCgAFAARGAAQBEIAERAIABACCCAQARGCEmggIAAACAAgAQAQAAACSEUBIoKBQRACgAKAAAGBBGggIoIiABJAAoQCSSIiSJAgAAAACMAgBAAkEARggiAIQigAIiQioBJgIA8OzXAIABAEMBQQAQBABMERJEBCMCEASQJFTAEUESSRICQEgRFAEAgHISgQIYEUSEwBTAIkCRKIFRGkEIgIIDEAEhIUdBGBABIkAIQKISESLAJCEmVIhBhBACjBQERCkCRI0iQBRICCQAAEKBJggAgBIiAiACAMDe0wgSABIARBJBAEAEAABEAAAiSSKBUkM4IBIhAgAAQEQxGACUAAAAOAAxKABAgQEAAACEHAIUABABAISEgAIAACIAQAQqlBgAQBQEACEQBCCRQgAAIgBCKAAkAIGDAiQYgILy47sAAAAoIAEAIAGAEQKJAjEAIkGDARIAEAEhEJERIiCBkSgUSRJUEgAQQQSgEkCCASISACIAjAEAEIICFAAUUEQgIgIAFghgggCBAAAoAAAkABgiAABCACgAKIwEAIACABBohAAiQD8bABgAAABBAABEREGAgQEQAQAYABABAEEoQAkAACIjAQCQIiIAISIAEAgSABJJEigCgRAIAEABIiIAIAIhABIgAQAAGCBEggGhgQAAIiBBCCYiAwAAKCCCAgAAgAIpgQGPpA4QgQFgQQAgAkSAARFABCABIMEkEkUEERZBBBBCCBBJNBgZEhgBEAoZQQEWBAAoIQCBFMGQIRAIhUFUGBgxERIAKAAAEAgAGABILMESRBCUFIFkIlAogAIAEiGFKBQIQBLIIoCUSFCIQgCAAoEhgSAEgbw+piABEAQRABgAAEQiAABRFIACAABRgAKAISECSQJAQcgSQAEQwRQhQEgEFQTA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAKIACKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P65AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA39YDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAKIACKAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8P65AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANw7GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA39YDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwxEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEw8QwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATzwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwL2zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC9GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcOxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37sBAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBgYGBgYGBgYGBgYGBgYGBgYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAYGBgYGBgYGBgYGBgYCMAakwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAACAEQiAEIAQAAAAAhQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwmjkAAAAAAAAAAAAAAAAAAAAAAABIgARIAEgAAAAAAFCIQAiEQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAIhEAIhEAIhAAsOB4AAAAAAAAAAAAAAAAAAAAAAAAAQgAAAAAAAAAAhIGFCISBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIhIGFCISBhQiEgYVIGAjwuucAAAAAAAAAAAAAAAAAAEhISEhISEhISAAAAAAAAAAAAFCIAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAhACEAIQAhADAGJMHAAAAAAAAAAAAAAAAAAAAAAAAAEIAAAAAAAAAAISFGBhICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAIgYVYiACEhRgYSEgYCAAfNQkAAAAAAAAAAAAAAAAAAAAAAAAAAIAEAAAAAAAAUIhQiISFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFCIFQiFCIhIUIhQiBAIw9wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgUAYGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQiBBYiACEgUAYGFiIgQDf1wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQgAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAhABACADAKbMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISFWIiBgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASEgYGBhYiISEEEgIAP+DCgAAAAAAAAAAAAAAAAAAAAAAgARIgARISAAAAAAAAACFWIhACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBYiISEhRgIhIGFCBBYiADcMuYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBhYiIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhEAYGAiEQFiIhQiEEAhwtwEAAAAAAAAAAAAAAAAAgISEhISEhISEBAAAAAAAAAAAAACFCIVICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIhQiBEEgYSFiIEFiIAGw5WAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAAAAAAAAAhIFQiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhFCIhRgYCIUIgYVYiIQA4NsHAAAAAAAAAAAAAAAAAAAAAAAAAACABAAAAAAAAACFCFCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBYiISEgYSEgYQQCIUIwO/zDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIGBUIgAgYUYGAiFGBgIsIoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAhAAAhAAAPB4GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBYiIUYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISBgQCEhISFGBgYWIgAAD9TDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhViIhQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhFCIgYEAUIiFWIhACMD70wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFiIgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgYVYiISFCIGFCIUIAADwXUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIGBhBAYCFCIhQiFCADsM5cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISFGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVYiIGBgUBYiIGBAAD3dwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIhQiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFWIiEhQiEEAiBgYVIGAjANoMFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAYSBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIFQiIEAQAiFSBhYiIEAX/UBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFCIUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVIWIgQSBgIhUgYCIUIwCqTDgAAAAAAAAAAAAAAAAAAAAAAACAEAAAAAAAAAAAAhIGEgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhViIhUgIhQiFWIiFGAgAKxEAAAAAAAAAAAAAAAAAAEhISEhISEhISAAAAAAAAAAAAAAAhQiEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBgRBYiEAIgRAIhABYkwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISBhUhYiISBhISBhACBAPCZdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUIhIFAWIiEhIFAGAgAjD+oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIUYWIiBgYSFWIiFSAgAAN8bAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUIhFCIhEBYiACEgQC8M68AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGBgIUIgAgVCIgYEA72wCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAEAIAADAPEMIAAAAAAAAAAAAAAAAAAAAAAAgBEIgBEJCAAAAAAAAAEBYiIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAWIiFGBgIAISEhUhICADgwgIAAAAAAAAAAAAAAAAAAAAAAIAESIAEgAQAAAAAAAAAUIiFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhQiEAIUYGBhICISBAPw6ZAAAAAAAAAAAAAAAAAAAAAAgBAAgBAAAAAAAAAAAAEBYiIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGEgYWIgQCIGBhUhIWIiBAB86BwAAAAAAAAAAAAAAAACAhISEhISEhIQEAAAAAAAAAAAAAACFWIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhQhAWIiBhUgIEBhYiIQATDQ3AAAAAAAAAAAAAAAAAAAAAAAAACAEAAAAAAAAAAAAhIUYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhIRACISFGFiIAAAALy4BAAAAAAAAAAAAAAAAAAAAAAAAAACABAAAAAAAAAAAhViIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhIGFGBhISFiIUIgAABw9OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFiIgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgVCIAIGBQEgYWIiBAL/KCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIiFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQiIVISBhYiIQQWIgQCMCF8wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISFGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIiEhUhIGAiEhIUYCAA/TgQAAAAAAAAAAAAAAAAAAAAAAIAESIAESEgAAAAAAAAAAIVYiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBhYiEBICIGFSAgA3DdrAAAAAAAAAAAAAAAAAAAAACAEAAAAAAAAAAAAAAAAhIGBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhISEgIhIGBAEBIGAjwR9kAAAAAAAAAAAAAAAAAAEhISEhISEhISAAAAAAAAAAAAAAAUIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIiFWIiEgQCEgYSBgYUYCMBsMwcAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAAAAAAAAAEAYCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBYiIGFSAgAAIUIhViIgQBvGAcAAAAAAAAAAAAAAAAAAAAAAAAAAIAEAAAAAAAAAACFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFWIhAGAgAEEgYWIiEAKw0gQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBhYiISEAIQQSFiIgQAArxwLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQiFCIhIEQSFiIhIGEhViIAEw6yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBgIhUhICIGFGEhYiISEAPDdOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUIQBhYiIGFSFiIhIVYiIUIwORTDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAEEgIhIGBgUAIAO+aBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVYiIVIWIiBAISBEEgIwBkzCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQFiIgYUIhACEEAiFCABPNQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFSBgYWIiBEFiIhIVISAjAItMNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGEgYGEhIWIiEgUAIAPAROgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIAIVISBgIhIUIhIUIwHIiAAAAAAAAAAAAAAAAAAAAACAEACAEAAAAAAAAAAAAQBgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCIhISEhIGFWIiFGBgYCACvEQYAAAAAAAAAAAAAAAAAgISEhISEhISEBAAAAAAAAAAAAAAAhQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIVYiISBQFiIhViIgYEAwDXDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISBhQiEhEBIGAiEgQBr8gAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3DsbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMC9swEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvRsAAAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAgAQAAAAAAAMBdkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAMSTBwAoAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAA8I7K//////////////////////////////////////////////////////////////////////////////////////////////////8= + \ No newline at end of file diff --git a/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw.sig b/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw.sig new file mode 100644 index 0000000..96134ed Binary files /dev/null and b/SDK/tools/lxfw-update/firmware/l502_fpga.lxfw.sig differ diff --git a/SDK/tools/lxfw-update/iconv.dll b/SDK/tools/lxfw-update/iconv.dll new file mode 100644 index 0000000..df71882 Binary files /dev/null and b/SDK/tools/lxfw-update/iconv.dll differ diff --git a/SDK/tools/lxfw-update/l502-fpga-update-all.bat b/SDK/tools/lxfw-update/l502-fpga-update-all.bat new file mode 100644 index 0000000..465af1b --- /dev/null +++ b/SDK/tools/lxfw-update/l502-fpga-update-all.bat @@ -0,0 +1,2 @@ +lxfw-update --all firmware/l502_fpga.lxfw +pause \ No newline at end of file diff --git a/SDK/tools/lxfw-update/libxml2.dll b/SDK/tools/lxfw-update/libxml2.dll new file mode 100644 index 0000000..4d99bb6 Binary files /dev/null and b/SDK/tools/lxfw-update/libxml2.dll differ diff --git a/SDK/tools/lxfw-update/lxfw-update.exe b/SDK/tools/lxfw-update/lxfw-update.exe new file mode 100644 index 0000000..7905286 Binary files /dev/null and b/SDK/tools/lxfw-update/lxfw-update.exe differ diff --git a/SDK/tools/lxfw-update/readme.txt b/SDK/tools/lxfw-update/readme.txt new file mode 100644 index 0000000..586f8cd --- /dev/null +++ b/SDK/tools/lxfw-update/readme.txt @@ -0,0 +1,4 @@ +Для обновления прошики необходимо: +- остановить все программы, использующие модули L502 или E502. +- запустить l502-fpga-update-all.bat или e502-fpga-update-all.bat для Windows, l502-fpga-update-all.sh или e502-fpga-update-all.sh для Linux +- Для модуля L502 требуется завершить работу компьютера (не просто перезагрузить, а выключить ПК и снова включить. Светодиод на передней панели L502 должен погаснуть). При следующим включении ПЛИС будет загружен уже новой прошивкой. Для E502 новая прошивка ПЛИС загружается сразу и перезагрузка не требуется. diff --git a/SDK/tools/lxfw-update/zlib1.dll b/SDK/tools/lxfw-update/zlib1.dll new file mode 100644 index 0000000..82913fb Binary files /dev/null and b/SDK/tools/lxfw-update/zlib1.dll differ diff --git a/SDK/uninstall.exe b/SDK/uninstall.exe new file mode 100644 index 0000000..712658b Binary files /dev/null and b/SDK/uninstall.exe differ