From ef00402976efa95f9f375472e0cc39072d372ee9 Mon Sep 17 00:00:00 2001 From: Sean M Date: Mon, 25 Jun 2018 21:37:03 -0400 Subject: [PATCH 01/43] Fix configuration load/save for board and sensor alignment, craft name, DShot Beacon, ESC/Motor features, beeper, mixer, accelerometer, barometer and magnetometer --- src/js/backup_restore.js | 35 ++++++++++++++++++++++++++++------- src/js/msp/MSPHelper.js | 5 +++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js index bffcf65e..59d2f56e 100644 --- a/src/js/backup_restore.js +++ b/src/js/backup_restore.js @@ -141,6 +141,11 @@ function configuration_backup(callback) { configuration.SERIAL_CONFIG = jQuery.extend(true, {}, SERIAL_CONFIG); configuration.LED_STRIP = jQuery.extend(true, [], LED_STRIP); configuration.LED_COLORS = jQuery.extend(true, [], LED_COLORS); + configuration.BOARD_ALIGNMENT_CONFIG = jQuery.extend(true, {}, BOARD_ALIGNMENT_CONFIG); + configuration.CRAFT_NAME = CONFIG.name; + configuration.MIXER_CONFIG = jQuery.extend(true, {}, MIXER_CONFIG); + configuration.SENSOR_CONFIG = jQuery.extend(true, {}, SENSOR_CONFIG); + configuration.PID_ADVANCED_CONFIG = jQuery.extend(true, {}, PID_ADVANCED_CONFIG); if (semver.gte(CONFIG.apiVersion, "1.19.0")) { configuration.LED_MODE_COLORS = jQuery.extend(true, [], LED_MODE_COLORS); @@ -165,6 +170,9 @@ function configuration_backup(callback) { configuration.GPS_CONFIG = jQuery.extend(true, {}, GPS_CONFIG); configuration.COMPASS_CONFIG = jQuery.extend(true, {}, COMPASS_CONFIG); } + if (semver.gte(CONFIG.apiVersion, "1.36.0")) { + configuration.BEEPER_CONFIG = jQuery.extend(true, {}, BEEPER_CONFIG); + } save(); } @@ -303,26 +311,21 @@ function configuration_restore(callback) { // validate - if (typeof configuration.generatedBy !== 'undefined' && compareVersions(configuration.generatedBy, CONFIGURATOR.backupFileMinVersionAccepted)) { - + if (typeof configuration.generatedBy !== 'undefined' && compareVersions(configuration.generatedBy, CONFIGURATOR.backupFileMinVersionAccepted)) { if (!compareVersions(configuration.generatedBy, "1.14.0") && !migrate(configuration)) { GUI.log(i18n.getMessage('backupFileUnmigratable')); return; } - - if (configuration.FEATURE_CONFIG.features._featureMask) { + if (typeof configuration.FEATURE_CONFIG != 'undefined' && configuration.FEATURE_CONFIG.features._featureMask) { var features = new Features(CONFIG); features.setMask(configuration.FEATURE_CONFIG.features._featureMask); configuration.FEATURE_CONFIG.features = features; } configuration_upload(configuration, callback); - } else { GUI.log(i18n.getMessage('backupFileIncompatible')); } - - } }; @@ -763,6 +766,13 @@ function configuration_restore(callback) { ]; function update_unique_data_list() { + uniqueData.push(MSPCodes.MSP_SET_NAME); + uniqueData.push(MSPCodes.MSP_SET_SENSOR_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_MIXER_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_BEEPER_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG); + uniqueData.push(MSPCodes.MSP_SET_ADVANCED_CONFIG); + if (semver.gte(CONFIG.apiVersion, "1.8.0")) { uniqueData.push(MSPCodes.MSP_SET_LOOP_TIME); uniqueData.push(MSPCodes.MSP_SET_ARMING_CONFIG); @@ -803,6 +813,17 @@ function configuration_restore(callback) { GPS_CONFIG = configuration.GPS_CONFIG; COMPASS_CONFIG = configuration.COMPASS_CONFIG; RSSI_CONFIG = configuration.RSSI_CONFIG; + BOARD_ALIGNMENT_CONFIG = configuration.BOARD_ALIGNMENT_CONFIG; + CONFIG.name = configuration.CRAFT_NAME; + MIXER_CONFIG = configuration.MIXER_CONFIG; + SENSOR_CONFIG = configuration.SENSOR_CONFIG; + PID_ADVANCED_CONFIG = configuration.PID_ADVANCED_CONFIG; + + BEEPER_CONFIG.beepers = new Beepers(CONFIG); + BEEPER_CONFIG.beepers.setMask(configuration.BEEPER_CONFIG.beepers._beeperMask); + BEEPER_CONFIG.dshotBeaconTone = configuration.BEEPER_CONFIG.dshotBeaconTone; + BEEPER_CONFIG.dshotBeaconConditions = new Beepers(CONFIG, [ "RX_LOST", "RX_SET" ]); + BEEPER_CONFIG.dshotBeaconConditions.setMask(configuration.BEEPER_CONFIG.dshotBeaconConditions._beeperMask); } function send_unique_data_item() { diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index b82c5c76..4ebe8498 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -1109,7 +1109,9 @@ MspHelper.prototype.process_data = function(dataHandler) { case MSPCodes.MSP_SET_ADJUSTMENT_RANGE: console.log('Adjustment range saved'); break; - + case MSPCodes.MSP_SET_BOARD_ALIGNMENT_CONFIG: + console.log('Board alignment saved'); + break; case MSPCodes.MSP_PID_CONTROLLER: PID.controller = data.readU8(); break; @@ -1875,7 +1877,6 @@ MspHelper.prototype.sendCurrentConfig = function(onCompleteCallback) { } - MspHelper.prototype.sendLedStripConfig = function(onCompleteCallback) { var nextFunction = send_next_led_strip_config; From 70c839eb3a3f869672af15992e883774d5497a00 Mon Sep 17 00:00:00 2001 From: Sean Moriarty Date: Thu, 28 Jun 2018 13:36:54 -0700 Subject: [PATCH 02/43] Check for valid PID_ADVANCED values --- src/js/backup_restore.js | 62 ++++++++++++++++++++++++++++++++++-- src/js/serial_backend.js | 2 ++ src/js/tabs/configuration.js | 1 + 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js index 59d2f56e..b76ed955 100644 --- a/src/js/backup_restore.js +++ b/src/js/backup_restore.js @@ -177,9 +177,65 @@ function configuration_backup(callback) { save(); } } + + if (GUI.configuration_loaded === true) { + return fetch_unique_data_item(); + } + var promises = [ getAdvancedConfig(), getSensorConfig(), getCraftName(), getBoardAlignmentConfig(), getMixerConfig(), getBeeperConfig() ]; + Promise.all(promises). + then(function () { + fetch_unique_data_item(); + }); + - // start fetching - fetch_unique_data_item(); + } + + function getAdvancedConfig() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, function() { + resolve(); + }); + }); + } + + function getSensorConfig() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_SENSOR_CONFIG, false, false, function() { + resolve(); + }); + }); + } + + function getCraftName() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_NAME, false, false, function() { + resolve(); + }); + }); + } + + function getBoardAlignmentConfig() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG, false, false, function() { + resolve(); + }); + }); + } + + function getMixerConfig() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, function() { + resolve(); + }); + }); + } + + function getBeeperConfig() { + return new Promise(function (resolve, reject) { + MSP.send_message(MSPCodes.MSP_BEEPER_CONFIG, false, false, function() { + resolve(); + }); + }); } function save() { @@ -316,7 +372,7 @@ function configuration_restore(callback) { GUI.log(i18n.getMessage('backupFileUnmigratable')); return; } - if (typeof configuration.FEATURE_CONFIG != 'undefined' && configuration.FEATURE_CONFIG.features._featureMask) { + if (configuration.FEATURE_CONFIG.features._featureMask) { var features = new Features(CONFIG); features.setMask(configuration.FEATURE_CONFIG.features._featureMask); configuration.FEATURE_CONFIG.features = features; diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index e811c7ee..30128eb9 100755 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -43,6 +43,8 @@ function initializeSerialBackend() { thisElement.data("clicks", !clicks); }; + GUI.configuration_loaded = false; + var selected_baud = parseInt($('div#port-picker #baud').val()); var selected_port = $('div#port-picker #port option:selected').data().isManual ? $('#port-override').val() : diff --git a/src/js/tabs/configuration.js b/src/js/tabs/configuration.js index 6ca6cc23..7cc86354 100644 --- a/src/js/tabs/configuration.js +++ b/src/js/tabs/configuration.js @@ -10,6 +10,7 @@ TABS.configuration.initialize = function (callback, scrollPosition) { if (GUI.active_tab != 'configuration') { GUI.active_tab = 'configuration'; + GUI.configuration_loaded = true; } if (semver.lt(CONFIG.apiVersion, "1.36.0")) { From 6443401e32c7125248835420263686f5fd71b61c Mon Sep 17 00:00:00 2001 From: Sean M Date: Mon, 9 Jul 2018 10:56:00 -0400 Subject: [PATCH 03/43] Remove async on promises --- src/js/backup_restore.js | 65 ++++++++-------------------------------- 1 file changed, 12 insertions(+), 53 deletions(-) diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js index b76ed955..32b973ca 100644 --- a/src/js/backup_restore.js +++ b/src/js/backup_restore.js @@ -181,60 +181,19 @@ function configuration_backup(callback) { if (GUI.configuration_loaded === true) { return fetch_unique_data_item(); } - var promises = [ getAdvancedConfig(), getSensorConfig(), getCraftName(), getBoardAlignmentConfig(), getMixerConfig(), getBeeperConfig() ]; - Promise.all(promises). - then(function () { - fetch_unique_data_item(); - }); - - } - - function getAdvancedConfig() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_ADVANCED_CONFIG, false, false, function() { - resolve(); - }); - }); - } - - function getSensorConfig() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_SENSOR_CONFIG, false, false, function() { - resolve(); - }); - }); - } - - function getCraftName() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_NAME, false, false, function() { - resolve(); - }); - }); - } - - function getBoardAlignmentConfig() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG, false, false, function() { - resolve(); - }); - }); - } - - function getMixerConfig() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, function() { - resolve(); - }); - }); - } - - function getBeeperConfig() { - return new Promise(function (resolve, reject) { - MSP.send_message(MSPCodes.MSP_BEEPER_CONFIG, false, false, function() { - resolve(); - }); + MSP.promise(MSPCodes.MSP_ADVANCED_CONFIG).then(function() { + return MSP.promise(MSPCodes.MSP_SENSOR_CONFIG); + }).then(function() { + return MSP.promise(MSPCodes.MSP_NAME); + }).then(function() { + return MSP.promise(MSPCodes.MSP_BOARD_ALIGNMENT_CONFIG); + }).then(function() { + return MSP.promise(MSPCodes.MSP_MIXER_CONFIG); + }).then(function() { + return MSP.promise(MSPCodes.MSP_BEEPER_CONFIG); + }).then(function() { + return fetch_unique_data_item(); }); } From b9358083d95b31bf7ef57dce91875e3c76607749 Mon Sep 17 00:00:00 2001 From: mikeller Date: Sun, 15 Jul 2018 23:39:18 +1200 Subject: [PATCH 04/43] Added buttons for reboot into boot loader and MSC modes. --- locales/en/messages.json | 23 ++++++++++++++++++++++- src/js/main.js | 14 +++++++++++++- src/js/msp/MSPHelper.js | 23 ++++++++++++++++++++++- src/js/tabs/setup.js | 24 +++++++++++++++++++++++- src/main.html | 10 ++++++++++ src/tabs/setup.html | 12 ++++++++++++ 6 files changed, 102 insertions(+), 4 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index ef0fa052..acf7a1a8 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -9,12 +9,21 @@ "error": { "message": "Error: {{errorMessage}}" }, + "errorTitle": { + "message": "Error" + }, "warningTitle": { "message": "Warning" }, "noticeTitle": { "message": "Notice" }, + "operationNotSupported": { + "message": "This operation is not supported by your hardware." + }, + "storageDeviceNotReady": { + "message": "The storage device is not ready. In the case of a microSD card, make sure it is properly recognised by your flight controller." + }, "options_title": { "message": "Application Options" }, @@ -598,8 +607,20 @@ "initialSetupButtonRestore": { "message": "Restore" }, + "initialSetupButtonRebootBootloader": { + "message": "Activate Boot Loader / DFU" + }, + "initialSetupButtonRebootMsc": { + "message": "Activate Mass Storage Device Mode" + }, "initialSetupBackupRestoreText": { - "message": "Backup your configuration in case of an accident, CLI settings are not included - See 'dump' cli command" + "message": "Backup your configuration in case of an accident, CLI settings are not included - use the command 'diff all' in CLI for this." + }, + "initialSetupRebootBootloaderText": { + "message": "Reboot into boot loader / DFU mode." + }, + "initialSetupRebootMscText": { + "message": "Reboot into mass storage device (MSC) mode. Once activated, the onboard flash or SD card on your flight controller will be recognised as a storage device by your computer, and allow you to download your log files. Eject and power cycel your flight controller to leave mass storage device mode." }, "initialSetupBackupSuccess": { "message": "Backup saved successfully" diff --git a/src/js/main.js b/src/js/main.js index 326921c2..9ebe303a 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -642,4 +642,16 @@ function openNewWindowsInExternalBrowser() { } catch (ex) { console.log("require does not exist, maybe inside chrome"); } -} \ No newline at end of file +} + +function showErrorDialog(message) { + var dialog = $('.dialogError')[0]; + + $('.dialogError-content').html(message); + + $('.dialogError-closebtn').click(function() { + dialog.close(); + }); + + dialog.showModal(); +} diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index b82c5c76..ba13a314 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -27,6 +27,12 @@ function MspHelper () { 'RUNCAM_DEVICE_CONTROL': 14, // support communitate with RunCam Device 'LIDAR_TF': 15 }; + + self.REBOOT_TYPES = { + FIRMWARE: 0, + BOOTLOADER: 1, + MSC: 2 + }; } MspHelper.prototype.reorderPwmProtocols = function (protocol) { @@ -617,6 +623,17 @@ MspHelper.prototype.process_data = function(dataHandler) { break; case MSPCodes.MSP_SET_REBOOT: + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + var rebootType = data.read8(); + if (rebootType === self.REBOOT_TYPES.MSC) { + if (data.read8() === 0) { + console.log('Storage device not ready.'); + + showErrorDialog(i18n.getMessage('storageDeviceNotReady')); + break; + } + } + } console.log('Reboot request accepted'); break; @@ -1185,6 +1202,11 @@ MspHelper.prototype.process_data = function(dataHandler) { console.log('Unknown code detected: ' + code); } else { console.log('FC reports unsupported message error: ' + code); + + switch (code) { + case MSPCodes.MSP_SET_REBOOT: + showErrorDialog(i18n.getMessage('operationNotSupported')); + } } } // trigger callbacks, cleanup/remove callback after trigger @@ -1207,7 +1229,6 @@ MspHelper.prototype.process_data = function(dataHandler) { } } - /** * Encode the request body for the MSP request with the given code and return it as an array of bytes. */ diff --git a/src/js/tabs/setup.js b/src/js/tabs/setup.js index 686b0698..6682c6db 100755 --- a/src/js/tabs/setup.js +++ b/src/js/tabs/setup.js @@ -59,9 +59,31 @@ TABS.setup.initialize = function (callback) { self.initializeInstruments(); - $('#arming-disable-flag-row').attr('title', i18n.getMessage('initialSetupArmingDisableFlagsTooltip')); + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + if (isExpertModeEnabled()) { + $('.initialSetupRebootBootloader').show(); + } else { + $('.initialSetupRebootBootloader').hide(); + } + + $('a.rebootBootloader').click(function () { + var buffer = []; + buffer.push(1); + MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); + }); + + $('a.rebootMsc').click(function () { + var buffer = []; + buffer.push(2); + MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); + }); + } else { + $('.initialSetupRebootBootloader').hide(); + $('.initialSetupRebootMsc').hide(); + } + // UI Hooks $('a.calibrateAccel').click(function () { var self = $(this); diff --git a/src/main.html b/src/main.html index cdd9775b..94b1652e 100755 --- a/src/main.html +++ b/src/main.html @@ -323,5 +323,15 @@ + +

+
+
+
+
+ +
+
+ diff --git a/src/tabs/setup.html b/src/tabs/setup.html index e531d071..c8d03858 100644 --- a/src/tabs/setup.html +++ b/src/tabs/setup.html @@ -46,6 +46,12 @@ +
+ +
+
+ +
@@ -61,6 +67,12 @@
+
+ +
+
+ +
From 7fddb38fb7b466f63206f8f8da45eea67ec523f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiripolszky=20K=C3=A1roly?= Date: Mon, 16 Jul 2018 17:18:39 +0200 Subject: [PATCH 05/43] fix throttle position preview --- src/js/tabs/osd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js index d5c87efb..719c6adf 100755 --- a/src/js/tabs/osd.js +++ b/src/js/tabs/osd.js @@ -342,7 +342,7 @@ OSD.constants = { default_position: -9, draw_order: 110, positionable: true, - preview: FONT.symbol(SYM.THR) + FONT.symbol(SYM.THR1) + '69' + preview: FONT.symbol(SYM.THR) + FONT.symbol(SYM.THR1) + ' 69' }, CPU_LOAD: { name: 'CPU_LOAD', From eec1388a2d7767f0ad278ad9b7d3b4bacd95275c Mon Sep 17 00:00:00 2001 From: mikeller Date: Tue, 17 Jul 2018 22:01:18 +1200 Subject: [PATCH 06/43] Set file type descriptions for open / save dialogs. --- package-lock.json | 2 +- src/js/LogoManager.js | 2 +- src/js/backup_restore.js | 4 ++-- src/js/tabs/cli.js | 2 +- src/js/tabs/firmware_flasher.js | 4 ++-- src/js/tabs/logging.js | 2 +- src/js/tabs/onboard_logging.js | 2 +- src/js/tabs/osd.js | 4 ++-- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73e36700..77427281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "betaflight-configurator", - "version": "10.3.0", + "version": "10.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/js/LogoManager.js b/src/js/LogoManager.js index d80ecb64..a7d9aa01 100644 --- a/src/js/LogoManager.js +++ b/src/js/LogoManager.js @@ -26,7 +26,7 @@ var LogoManager = LogoManager || { }, // config for logo image selection dialog acceptFileTypes: [ - { extensions: ['png', 'bmp'] }, + { description: 'images', extensions: ['png', 'bmp'] }, ], }; diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js index 32b973ca..7e106a2b 100644 --- a/src/js/backup_restore.js +++ b/src/js/backup_restore.js @@ -206,7 +206,7 @@ function configuration_backup(callback) { var filename = generateFilename(prefix, suffix); var accepts = [{ - extensions: [suffix] + description: suffix.toUpperCase() + ' files', extensions: [suffix] }]; // create or load the file @@ -277,7 +277,7 @@ function configuration_restore(callback) { var chosenFileEntry = null; var accepts = [{ - extensions: ['json'] + description: 'JSON files', extensions: ['json'] }]; // load up the file diff --git a/src/js/tabs/cli.js b/src/js/tabs/cli.js index 608f12e9..db34a4aa 100644 --- a/src/js/tabs/cli.js +++ b/src/js/tabs/cli.js @@ -67,7 +67,7 @@ TABS.cli.initialize = function (callback) { var filename = generateFilename(prefix, suffix); var accepts = [{ - extensions: [suffix], + description: suffix.toUpperCase() + ' files', extensions: [suffix], }]; chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, accepts: accepts}, function(entry) { diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js index 3ca6f215..a518fbf5 100755 --- a/src/js/tabs/firmware_flasher.js +++ b/src/js/tabs/firmware_flasher.js @@ -325,7 +325,7 @@ TABS.firmware_flasher.initialize = function (callback) { // UI Hooks $('a.load_file').click(function () { - chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{extensions: ['hex']}]}, function (fileEntry) { + chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{description: 'HEX files', extensions: ['hex']}]}, function (fileEntry) { if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); @@ -465,7 +465,7 @@ TABS.firmware_flasher.initialize = function (callback) { $(document).on('click', 'span.progressLabel a.save_firmware', function () { var summary = $('select[name="firmware_version"] option:selected').data('summary'); - chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: summary.file, accepts: [{extensions: ['hex']}]}, function (fileEntry) { + chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: summary.file, accepts: [{description: 'HEX files', extensions: ['hex']}]}, function (fileEntry) { if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); return; diff --git a/src/js/tabs/logging.js b/src/js/tabs/logging.js index a7eb269c..5b3d65d0 100644 --- a/src/js/tabs/logging.js +++ b/src/js/tabs/logging.js @@ -236,7 +236,7 @@ TABS.logging.initialize = function (callback) { var filename = generateFilename(prefix, suffix); var accepts = [{ - extensions: [suffix], + description: suffix.toUpperCase() + ' files', extensions: [suffix], }]; // create or load the file diff --git a/src/js/tabs/onboard_logging.js b/src/js/tabs/onboard_logging.js index 68dc1d12..cd8e72fb 100644 --- a/src/js/tabs/onboard_logging.js +++ b/src/js/tabs/onboard_logging.js @@ -445,7 +445,7 @@ TABS.onboard_logging.initialize = function (callback) { var filename = generateFilename(prefix, suffix); chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: filename, - accepts: [{extensions: [suffix]}]}, function(fileEntry) { + accepts: [{description: suffix.toUpperCase() + ' files', extensions: [suffix]}]}, function(fileEntry) { var error = chrome.runtime.lastError; if (error) { diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js index 719c6adf..8e40d93b 100755 --- a/src/js/tabs/osd.js +++ b/src/js/tabs/osd.js @@ -129,7 +129,7 @@ FONT.parseMCMFontFile = function(data) { FONT.openFontFile = function($preview) { return new Promise(function(resolve) { - chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{extensions: ['mcm']}]}, function (fileEntry) { + chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{description: 'MCM files', extensions: ['mcm']}]}, function (fileEntry) { FONT.data.loaded_font_file = fileEntry.name; if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); @@ -2047,7 +2047,7 @@ TABS.osd.initialize = function (callback) { }) $(document).on('click', 'span.progressLabel a.save_font', function () { - chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: 'baseflight', accepts: [{extensions: ['mcm']}]}, function (fileEntry) { + chrome.fileSystem.chooseEntry({type: 'saveFile', suggestedName: 'baseflight', accepts: [{description: 'MCM files', extensions: ['mcm']}]}, function (fileEntry) { if (chrome.runtime.lastError) { console.error(chrome.runtime.lastError.message); return; From 3caf2d8ff55ee4cc2e975b9f62eb763b8adeb08f Mon Sep 17 00:00:00 2001 From: mikeller Date: Wed, 18 Jul 2018 01:00:12 +1200 Subject: [PATCH 07/43] Moved MSC button to blackbox tab. --- locales/en/messages.json | 18 ++++++++++++------ src/css/tabs/onboard_logging.css | 18 +++++++++++++++++- src/js/tabs/onboard_logging.js | 26 ++++++++++++++++++++++++++ src/js/tabs/setup.js | 7 ------- src/tabs/onboard_logging.html | 17 +++++++++++++++++ src/tabs/setup.html | 6 ------ 6 files changed, 72 insertions(+), 20 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index acf7a1a8..c29bba7b 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -610,18 +610,12 @@ "initialSetupButtonRebootBootloader": { "message": "Activate Boot Loader / DFU" }, - "initialSetupButtonRebootMsc": { - "message": "Activate Mass Storage Device Mode" - }, "initialSetupBackupRestoreText": { "message": "Backup your configuration in case of an accident, CLI settings are not included - use the command 'diff all' in CLI for this." }, "initialSetupRebootBootloaderText": { "message": "Reboot into boot loader / DFU mode." }, - "initialSetupRebootMscText": { - "message": "Reboot into mass storage device (MSC) mode. Once activated, the onboard flash or SD card on your flight controller will be recognised as a storage device by your computer, and allow you to download your log files. Eject and power cycel your flight controller to leave mass storage device mode." - }, "initialSetupBackupSuccess": { "message": "Backup saved successfully" }, @@ -3597,6 +3591,18 @@ "onboardLoggingOnboardSDCard": { "message": "Onboard SD card" }, + "onboardLoggingMsc": { + "message": "Mass Storage Mode" + }, + "onboardLoggingMscNote": { + "message": "Reboot into mass storage device (MSC) mode. Once activated, the onboard flash or SD card on your flight controller will be recognised as a storage device by your computer, and allow you to download your log files. Eject and power cycel your flight controller to leave mass storage device mode." + }, + "onboardLoggingRebootMscText": { + "message": "Activate Mass Storage Device Mode" + }, + "onboardLoggingMscNotReady": { + "message": "Mass storage mode can not be activated because the storage device is not ready." + }, "dialogConfirmResetTitle": { "message": "Confirm" }, diff --git a/src/css/tabs/onboard_logging.css b/src/css/tabs/onboard_logging.css index 87d48452..11e5b431 100644 --- a/src/css/tabs/onboard_logging.css +++ b/src/css/tabs/onboard_logging.css @@ -206,6 +206,22 @@ display: none; } +.require-msc-supported { + display: none; +} + +.tab-onboard_logging.msc-supported .require-msc-supported { + display: block; +} + +.require-msc-not-ready { + display: none; +} + +.tab-onboard_logging.msc-not-ready .require-msc-not-ready { + display: block; +} + @media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) { .tab-onboard_logging table thead tr:first-child { font-size: 12px; @@ -300,4 +316,4 @@ pointer-events: none; text-shadow: none; opacity: 0.5; -} \ No newline at end of file +} diff --git a/src/js/tabs/onboard_logging.js b/src/js/tabs/onboard_logging.js index 68dc1d12..688ab7ca 100644 --- a/src/js/tabs/onboard_logging.js +++ b/src/js/tabs/onboard_logging.js @@ -145,6 +145,20 @@ TABS.onboard_logging.initialize = function (callback) { $("div.blackboxRate").show(); } }).change(); + + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + if (SDCARD.supported || DATAFLASH.supported) { + + $(".tab-onboard_logging") + .toggleClass("msc-supported", true); + + $('a.onboardLoggingRebootMsc').click(function () { + var buffer = []; + buffer.push(2); + MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); + }); + } + } update_html(); @@ -296,6 +310,18 @@ TABS.onboard_logging.initialize = function (callback) { .toggleClass("sdcard-error", SDCARD.state === MSP.SDCARD_STATE_FATAL) .toggleClass("sdcard-initializing", SDCARD.state === MSP.SDCARD_STATE_CARD_INIT || SDCARD.state === MSP.SDCARD_STATE_FS_INIT) .toggleClass("sdcard-ready", SDCARD.state === MSP.SDCARD_STATE_READY); + + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + var mscIsReady = (DATAFLASH.totalSize > 0) || (SDCARD.state === MSP.SDCARD_STATE_READY); + $(".tab-onboard_logging") + .toggleClass("msc-not-ready", !mscIsReady); + + if (!mscIsReady) { + $('a.onboardLoggingRebootMsc').addClass('disabled'); + } else { + $('a.onboardLoggingRebootMsc').removeClass('disabled'); + } + } switch (SDCARD.state) { case MSP.SDCARD_STATE_NOT_PRESENT: diff --git a/src/js/tabs/setup.js b/src/js/tabs/setup.js index 6682c6db..c3f6663f 100755 --- a/src/js/tabs/setup.js +++ b/src/js/tabs/setup.js @@ -73,15 +73,8 @@ TABS.setup.initialize = function (callback) { buffer.push(1); MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); }); - - $('a.rebootMsc').click(function () { - var buffer = []; - buffer.push(2); - MSP.send_message(MSPCodes.MSP_SET_REBOOT, buffer, false); - }); } else { $('.initialSetupRebootBootloader').hide(); - $('.initialSetupRebootMsc').hide(); } // UI Hooks diff --git a/src/tabs/onboard_logging.html b/src/tabs/onboard_logging.html index 2a70b0b5..ca85163b 100644 --- a/src/tabs/onboard_logging.html +++ b/src/tabs/onboard_logging.html @@ -133,6 +133,23 @@ +
+
+
+
+
+
+
+

+ +
+ +
+
+ +

+
+
diff --git a/src/tabs/setup.html b/src/tabs/setup.html index c8d03858..1e93dbd8 100644 --- a/src/tabs/setup.html +++ b/src/tabs/setup.html @@ -49,9 +49,6 @@
-
- -
@@ -70,9 +67,6 @@
-
- -
From 2f3cd09740526b9e1fa00fd867454881801d00ad Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Fri, 20 Jul 2018 16:18:18 +0200 Subject: [PATCH 08/43] Fix dynamic adjustments with version --- src/js/tabs/adjustments.js | 25 ++++++++++++++++--------- src/tabs/adjustments.html | 33 +++++---------------------------- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/src/js/tabs/adjustments.js b/src/js/tabs/adjustments.js index e5f723d8..490a1632 100644 --- a/src/js/tabs/adjustments.js +++ b/src/js/tabs/adjustments.js @@ -20,7 +20,6 @@ TABS.adjustments.initialize = function (callback) { } function load_html() { - self.adjust_template(); $('#content').load("./tabs/adjustments.html", process_html); } @@ -153,6 +152,8 @@ TABS.adjustments.initialize = function (callback) { function process_html() { + self.adjust_template(); + var auxChannelCount = RC.active_channels - 4; var modeTableBodyElement = $('.tab-adjustments .adjustments tbody'); @@ -272,14 +273,20 @@ TABS.adjustments.cleanup = function (callback) { }; TABS.adjustments.adjust_template = function () { - var availableFunctionCount; - if (semver.lt(CONFIG.apiVersion, "1.31.0")) { - availableFunctionCount = 21; // Available in betaflight 2.9 + + var selectFunction = $('#functionSelectionSelect'); + var elementsNumber; + + if (semver.gte(CONFIG.apiVersion, "1.39.0")) { + elementsNumber = 26; // PID Audio + } else if (semver.gte(CONFIG.apiVersion, "1.37.0")) { + elementsNumber = 25; // Horizon Strength } else { - availableFunctionCount = 24; // RC rate Yaw / D setpoint / D setpoint transition added to 3.1.0 + elementsNumber = 24; // Setpoint transition } - var template = $('#tab-adjustments-templates .adjustments .adjustment'); - var functionList = $(template).find('.functionSelection .function'); - var functionListOptions = $(functionList).find('option').slice(0,availableFunctionCount); - functionList.empty().append(functionListOptions); + + for (let i = 0; i < elementsNumber; i++) { + selectFunction.append(new Option(i18n.getMessage('adjustmentsFunction' + i), i)); + } + }; diff --git a/src/tabs/adjustments.html b/src/tabs/adjustments.html index 14c08aae..4cf8260b 100644 --- a/src/tabs/adjustments.html +++ b/src/tabs/adjustments.html @@ -66,34 +66,11 @@
- + + + @@ -322,8 +322,60 @@ + + + + + +
+ +
+
+ + + + + + + +
+ +
+
+ + + + + + + +
+ +
+
+ + + + + + +
+ +
+
+ + + - +
+ + + + +
+ +
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + From 1488f1c6c074166ab2d7b1923d15ecc7b82b44c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiripolszky=20K=C3=A1roly?= Date: Thu, 19 Jul 2018 22:23:20 +0200 Subject: [PATCH 10/43] Add option to reopen last tab on connect --- locales/en/messages.json | 3 +++ src/js/gui.js | 16 ++++++++++++++++ src/js/main.js | 16 +++++++++++++++- src/js/serial_backend.js | 2 +- src/main.html | 4 +++- src/tabs/options.html | 3 +++ 6 files changed, 41 insertions(+), 3 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 64349869..0ac830f5 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -60,6 +60,9 @@ "permanentExpertMode": { "message": "Permanently enable Expert Mode" }, + "rememberLastTab": { + "message": "Reopen last tab on connect" + }, "userLanguageSelect": { "message": "Language (need to restart the application for the changes to take effect)" }, diff --git a/src/js/gui.js b/src/js/gui.js index b3261d54..54e24712 100644 --- a/src/js/gui.js +++ b/src/js/gui.js @@ -321,5 +321,21 @@ GUI_control.prototype.content_ready = function (callback) { if (callback) callback(); } +GUI_control.prototype.selectDefaultTabWhenConnected = function() { + chrome.storage.local.get(['rememberLastTab', 'lastTab'], function (result) { + let fallbackTab = '#tabs ul.mode-connected .tab_setup a'; + if (!(result.rememberLastTab && !!result.lastTab)) { + $(fallbackTab).click(); + return; + } + let $savedTab = $("#tabs ul.mode-connected ." + result.lastTab + " a"); + if (!!$savedTab.data("ignore-reopen")) { + $(fallbackTab).click(); + } else { + $savedTab.click(); + } + }); +}; + // initialize object into GUI variable var GUI = new GUI_control(); diff --git a/src/js/main.js b/src/js/main.js index 9ebe303a..979724ee 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -91,7 +91,14 @@ function startProcess() { GUI.tab_switch_cleanup(function () { // disable previously active tab highlight $('li', ui_tabs).removeClass('active'); - + + // store last active tab only when connected + if (GUI.connected_to) { + chrome.storage.local.set({ + lastTab: $(self).parent().attr("class") + }); + } + // Highlight selected tab $(self).parent().addClass('active'); @@ -217,6 +224,13 @@ function startProcess() { }).change(); }); + chrome.storage.local.get('rememberLastTab', function (result) { + $('div.rememberLastTab input') + .prop('checked', !!result.rememberLastTab) + .change(function() { chrome.storage.local.set({rememberLastTab: $(this).is(':checked')}) }) + .change(); + }); + if (GUI.operating_system !== 'ChromeOS') { chrome.storage.local.get('checkForConfiguratorUnstableVersions', function (result) { if (result.checkForConfiguratorUnstableVersions) { diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js index 30128eb9..b225d6b0 100755 --- a/src/js/serial_backend.js +++ b/src/js/serial_backend.js @@ -299,7 +299,7 @@ function finishOpen() { onConnect(); - $('#tabs ul.mode-connected .tab_setup a').click(); + GUI.selectDefaultTabWhenConnected(); } function connectCli() { diff --git a/src/main.html b/src/main.html index 94b1652e..85d235fa 100755 --- a/src/main.html +++ b/src/main.html @@ -268,7 +268,9 @@ -->
    -
  • +
  • + +
diff --git a/src/tabs/options.html b/src/tabs/options.html index d79dca35..1de44b98 100644 --- a/src/tabs/options.html +++ b/src/tabs/options.html @@ -4,6 +4,9 @@
+
+ +
From c4e9d1778c822bdc7d1cd123599e4b7a3a8f035e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiripolszky=20K=C3=A1roly?= Date: Sun, 22 Jul 2018 10:49:04 +0200 Subject: [PATCH 12/43] load mixer config on demand --- src/js/gui.js | 10 ++-------- src/js/main.js | 2 +- src/js/tabs/motors.js | 6 +++++- src/js/tabs/pid_tuning.js | 6 +++++- src/js/tabs/receiver.js | 6 +++++- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/js/gui.js b/src/js/gui.js index 54e24712..b29d2cc2 100644 --- a/src/js/gui.js +++ b/src/js/gui.js @@ -323,17 +323,11 @@ GUI_control.prototype.content_ready = function (callback) { GUI_control.prototype.selectDefaultTabWhenConnected = function() { chrome.storage.local.get(['rememberLastTab', 'lastTab'], function (result) { - let fallbackTab = '#tabs ul.mode-connected .tab_setup a'; if (!(result.rememberLastTab && !!result.lastTab)) { - $(fallbackTab).click(); + $('#tabs ul.mode-connected .tab_setup a').click(); return; } - let $savedTab = $("#tabs ul.mode-connected ." + result.lastTab + " a"); - if (!!$savedTab.data("ignore-reopen")) { - $(fallbackTab).click(); - } else { - $savedTab.click(); - } + $("#tabs ul.mode-connected ." + result.lastTab + " a").click(); }); }; diff --git a/src/js/main.js b/src/js/main.js index b4c66ad1..0d8c308a 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -98,7 +98,7 @@ function startProcess() { GUI.tab_switch_cleanup(function () { // disable previously active tab highlight $('li', ui_tabs).removeClass('active'); - + // Highlight selected tab $(self).parent().addClass('active'); diff --git a/src/js/tabs/motors.js b/src/js/tabs/motors.js index d90e3fa4..d8d6e4d5 100644 --- a/src/js/tabs/motors.js +++ b/src/js/tabs/motors.js @@ -45,7 +45,11 @@ TABS.motors.initialize = function (callback) { } function load_motor_data() { - MSP.send_message(MSPCodes.MSP_MOTOR, false, false, load_html); + MSP.send_message(MSPCodes.MSP_MOTOR, false, false, load_mixer_config); + } + + function load_mixer_config() { + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, load_html); } function load_html() { diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index c29c574b..ca60d0ca 100755 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -39,9 +39,13 @@ TABS.pid_tuning.initialize = function (callback) { }).then(function() { return MSP.promise(MSPCodes.MSP_RC_DEADBAND); }).then(function() { - $('#content').load("./tabs/pid_tuning.html", process_html); + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, load_html); }); + function load_html() { + $('#content').load("./tabs/pid_tuning.html", process_html); + } + function pid_and_rc_to_form() { self.setProfile(); if (semver.gte(CONFIG.apiVersion, "1.20.0")) { diff --git a/src/js/tabs/receiver.js b/src/js/tabs/receiver.js index 2347065a..3d252bef 100644 --- a/src/js/tabs/receiver.js +++ b/src/js/tabs/receiver.js @@ -40,7 +40,7 @@ TABS.receiver.initialize = function (callback) { } function load_rx_config() { - var next_callback = load_html; + var next_callback = load_mixer_config; if (semver.gte(CONFIG.apiVersion, "1.20.0")) { MSP.send_message(MSPCodes.MSP_RX_CONFIG, false, false, next_callback); } else { @@ -48,6 +48,10 @@ TABS.receiver.initialize = function (callback) { } } + function load_mixer_config() { + MSP.send_message(MSPCodes.MSP_MIXER_CONFIG, false, false, load_html); + } + function load_html() { $('#content').load("./tabs/receiver.html", process_html); } From 25e4e7f6caf27c5305ebd598f3d452305c059bdf Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Mon, 9 Jul 2018 18:17:08 +0200 Subject: [PATCH 13/43] Add feedforward support --- locales/en/messages.json | 9 ++++++++ src/css/tabs/pid_tuning.css | 6 ++--- src/js/fc.js | 4 ++++ src/js/msp/MSPHelper.js | 37 +++++++++++++++++++++---------- src/js/tabs/pid_tuning.js | 44 ++++++++++++++++++++++++++++++++++--- src/tabs/pid_tuning.html | 23 ++++++++++++++++--- 6 files changed, 103 insertions(+), 20 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 64349869..35410767 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -1276,6 +1276,12 @@ "receiverRcInterpolationInterval": { "message": "RC Interpolation Interval [ms]" }, + "pidTuningFeedforwardTransition": { + "message": "Feedforward transition" + }, + "pidTuningFeedforwardTransitionHelp": { + "message": "With this parameter, the Feedforward term can be reduced near the center of the sticks, which results in smoother end of flips and rolls.
The value represents a point of stick deflection: 0 - stick centered, 1 - full deflection. When the stick is above that point, Feedforward is kept constant at its configured value. When the stick is positioned below that point, Feedforward is reduced proportionally, reaching 0 at the stick center position.
Value of 1 gives maximum smoothing effect, while value of 0 keeps the Feedforward fixed at its configured value over the whole stick range." + }, "pidTuningDtermSetpointTransition": { "message": "D Setpoint transition" }, @@ -1300,6 +1306,9 @@ "pidTuningDerivative": { "message": "Derivative" }, + "pidTuningFeedforward": { + "message": "Feedforward" + }, "pidTuningRcRate": { "message": "RC Rate" }, diff --git a/src/css/tabs/pid_tuning.css b/src/css/tabs/pid_tuning.css index 8879ab88..01b254be 100644 --- a/src/css/tabs/pid_tuning.css +++ b/src/css/tabs/pid_tuning.css @@ -244,12 +244,12 @@ padding: 5px; text-align: left; border-right: 1px solid #ccc; - width: 12.5%; + width: calc(100% / 9); } .tab-pid_tuning .pid_titlebar th:first-child { text-align: left; - width: 12.5%; + width: calc(100% / 9); } .tab-pid_tuning .pid_titlebar th:last-child { @@ -336,7 +336,7 @@ .tab-pid_tuning table td { padding: 1px; padding-left: 5px; - width: 12.5%; + width: calc(100% / 9); border-right: 1px solid #ccc; } diff --git a/src/js/fc.js b/src/js/fc.js index 7dfe0a9d..084ea1b9 100644 --- a/src/js/fc.js +++ b/src/js/fc.js @@ -376,6 +376,10 @@ var FC = { absoluteControlGain: 0, throttleBoost: 0, acroTrainerAngleLimit: 0, + feedforwardRoll: 0, + feedforwardPitch: 0, + feedforwardYaw: 0, + feedforwardTransition: 0, }; SENSOR_CONFIG = { diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index 3f5964b3..5f046469 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -878,7 +878,11 @@ MspHelper.prototype.process_data = function(dataHandler) { ADVANCED_TUNING.deltaMethod = data.readU8(); ADVANCED_TUNING.vbatPidCompensation = data.readU8(); if (semver.gte(CONFIG.apiVersion, "1.20.0")) { - ADVANCED_TUNING.dtermSetpointTransition = data.readU8(); + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + ADVANCED_TUNING.feedforwardTransition = data.readU8(); + } else { + ADVANCED_TUNING.dtermSetpointTransition = data.readU8(); + } ADVANCED_TUNING.dtermSetpointWeight = data.readU8(); ADVANCED_TUNING.toleranceBand = data.readU8(); ADVANCED_TUNING.toleranceBandReduction = data.readU8(); @@ -904,6 +908,9 @@ MspHelper.prototype.process_data = function(dataHandler) { ADVANCED_TUNING.absoluteControlGain = data.readU8(); ADVANCED_TUNING.throttleBoost = data.readU8(); ADVANCED_TUNING.acroTrainerAngleLimit = data.readU8(); + ADVANCED_TUNING.feedforwardRoll = data.readU16(); + ADVANCED_TUNING.feedforwardPitch = data.readU16(); + ADVANCED_TUNING.feedforwardYaw = data.readU16(); } } } @@ -1542,14 +1549,20 @@ MspHelper.prototype.crunch = function(code) { .push16(ADVANCED_TUNING.yawItermIgnoreRate) .push16(ADVANCED_TUNING.yaw_p_limit) .push8(ADVANCED_TUNING.deltaMethod) - .push8(ADVANCED_TUNING.vbatPidCompensation) - .push8(ADVANCED_TUNING.dtermSetpointTransition) - .push8(Math.min(ADVANCED_TUNING.dtermSetpointWeight, 254)) - .push8(ADVANCED_TUNING.toleranceBand) - .push8(ADVANCED_TUNING.toleranceBandReduction) - .push8(ADVANCED_TUNING.itermThrottleGain) - .push16(ADVANCED_TUNING.pidMaxVelocity) - .push16(ADVANCED_TUNING.pidMaxVelocityYaw); + .push8(ADVANCED_TUNING.vbatPidCompensation); + + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + buffer.push8(ADVANCED_TUNING.feedforwardTransition); + } else { + buffer.push8(ADVANCED_TUNING.dtermSetpointTransition); + } + + buffer.push8(Math.min(ADVANCED_TUNING.dtermSetpointWeight, 254)) + .push8(ADVANCED_TUNING.toleranceBand) + .push8(ADVANCED_TUNING.toleranceBandReduction) + .push8(ADVANCED_TUNING.itermThrottleGain) + .push16(ADVANCED_TUNING.pidMaxVelocity) + .push16(ADVANCED_TUNING.pidMaxVelocityYaw); if (semver.gte(CONFIG.apiVersion, "1.24.0")) { buffer.push8(ADVANCED_TUNING.levelAngleLimit) @@ -1569,9 +1582,11 @@ MspHelper.prototype.crunch = function(code) { .push8(ADVANCED_TUNING.itermRelaxType) .push8(ADVANCED_TUNING.absoluteControlGain) .push8(ADVANCED_TUNING.throttleBoost) - .push8(ADVANCED_TUNING.acroTrainerAngleLimit); + .push8(ADVANCED_TUNING.acroTrainerAngleLimit) + .push16(ADVANCED_TUNING.feedforwardRoll) + .push16(ADVANCED_TUNING.feedforwardPitch) + .push16(ADVANCED_TUNING.feedforwardYaw); } - } } } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index c29c574b..16a81cf5 100755 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -370,6 +370,28 @@ TABS.pid_tuning.initialize = function (callback) { }); acroTrainerAngleLimitNumberElement.val(ADVANCED_TUNING.acroTrainerAngleLimit).change(); + // Yaw D + $('.pid_tuning .YAW input[name="d"]').val(PIDs[2][2]); // PID Yaw D + + // Feedforward + $('.pid_tuning .ROLL input[name="f"]').val(ADVANCED_TUNING.feedforwardRoll); + $('.pid_tuning .PITCH input[name="f"]').val(ADVANCED_TUNING.feedforwardPitch); + $('.pid_tuning .YAW input[name="f"]').val(ADVANCED_TUNING.feedforwardYaw); + + var feedforwardTransitionNumberElement = $('input[name="feedforwardTransition-number"]'); + var feedforwardTransitionRangeElement = $('input[name="feedforwardTransition-range"]'); + + feedforwardTransitionNumberElement.val(ADVANCED_TUNING.feedforwardTransition / 100); + feedforwardTransitionRangeElement.val(ADVANCED_TUNING.feedforwardTransition / 100); + + feedforwardTransitionNumberElement.change(function () { + feedforwardTransitionRangeElement.val($(this).val()); + }); + feedforwardTransitionRangeElement.change(function () { + feedforwardTransitionNumberElement.val($(this).val()); + }); + + } else { $('.itermrotation').hide(); $('.smartfeedforward').hide(); @@ -377,6 +399,11 @@ TABS.pid_tuning.initialize = function (callback) { $('.absoluteControlGain').hide(); $('.throttleBoost').hide(); $('.acroTrainerAngleLimit').hide(); + $('.pid_tuning .YAW input[name="d"]').hide(); + $('.pid_tuning .ROLL input[name="f"]').hide(); + $('.pid_tuning .PITCH input[name="f"]').hide(); + $('.pid_tuning .YAW input[name="f"]').hide(); + $('#pid-tuning .feedForwardTransition').hide(); } $('input[id="gyroNotch1Enabled"]').change(function() { @@ -609,6 +636,7 @@ TABS.pid_tuning.initialize = function (callback) { } if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + ADVANCED_TUNING.itermRotation = $('input[id="itermrotation"]').is(':checked') ? 1 : 0; ADVANCED_TUNING.smartFeedforward = $('input[id="smartfeedforward"]').is(':checked') ? 1 : 0; @@ -620,8 +648,13 @@ TABS.pid_tuning.initialize = function (callback) { ADVANCED_TUNING.throttleBoost = $('input[name="throttleBoost-number"]').val(); ADVANCED_TUNING.acroTrainerAngleLimit = $('input[name="acroTrainerAngleLimit-number"]').val(); - } + ADVANCED_TUNING.feedforwardRoll = parseInt($('.pid_tuning .ROLL input[name="f"]').val()); + ADVANCED_TUNING.feedforwardPitch = parseInt($('.pid_tuning .PITCH input[name="f"]').val()); + ADVANCED_TUNING.feedforwardYaw = parseInt($('.pid_tuning .YAW input[name="f"]').val()); + + ADVANCED_TUNING.feedforwardTransition = parseInt($('input[name="feedforwardTransition-number"]').val() * 100); + } } function showAllPids() { @@ -1467,8 +1500,13 @@ TABS.pid_tuning.updatePidControllerParameters = function () { } else { $('.pid_tuning .YAW_JUMP_PREVENTION').hide(); - $('#pid-tuning .dtermSetpointTransition').show(); - $('#pid-tuning .dtermSetpoint').show(); + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + $('#pid-tuning .dtermSetpointTransition').hide(); + $('#pid-tuning .dtermSetpoint').hide(); + } else { + $('#pid-tuning .dtermSetpointTransition').show(); + $('#pid-tuning .dtermSetpoint').show(); + } $('#pid-tuning .delta').hide(); } diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index f22496a3..8512dcca 100755 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -72,6 +72,7 @@ + @@ -80,7 +81,7 @@ - + + @@ -119,7 +122,8 @@ - + + @@ -293,7 +297,7 @@ - + + + + + + + From 1e1952b16b02e13c479b5d44aabe00f780a64450 Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Tue, 10 Jul 2018 09:26:06 +0200 Subject: [PATCH 14/43] Refactor PID table --- src/css/tabs/pid_tuning.css | 4 +--- src/js/tabs/pid_tuning.js | 11 +++++++---- src/tabs/pid_tuning.html | 12 +++++------- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/css/tabs/pid_tuning.css b/src/css/tabs/pid_tuning.css index 01b254be..e6352152 100644 --- a/src/css/tabs/pid_tuning.css +++ b/src/css/tabs/pid_tuning.css @@ -222,6 +222,7 @@ margin: 0px; border-collapse: collapse; width: 100%; + table-layout: fixed; } .tab-pid_tuning .gui_box { @@ -244,12 +245,10 @@ padding: 5px; text-align: left; border-right: 1px solid #ccc; - width: calc(100% / 9); } .tab-pid_tuning .pid_titlebar th:first-child { text-align: left; - width: calc(100% / 9); } .tab-pid_tuning .pid_titlebar th:last-child { @@ -336,7 +335,6 @@ .tab-pid_tuning table td { padding: 1px; padding-left: 5px; - width: calc(100% / 9); border-right: 1px solid #ccc; } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index 16a81cf5..2a033c21 100755 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -399,11 +399,14 @@ TABS.pid_tuning.initialize = function (callback) { $('.absoluteControlGain').hide(); $('.throttleBoost').hide(); $('.acroTrainerAngleLimit').hide(); + $('.pid_tuning .YAW input[name="d"]').hide(); - $('.pid_tuning .ROLL input[name="f"]').hide(); - $('.pid_tuning .PITCH input[name="f"]').hide(); - $('.pid_tuning .YAW input[name="f"]').hide(); - $('#pid-tuning .feedForwardTransition').hide(); + + // Feedforward column + $('#pid_main tr :nth-child(5)').hide(); + $('#pid_main .pid_titlebar2 th').attr("colspan", 8); + + $('#pid-tuning .feedforwardTransition').hide(); } $('input[id="gyroNotch1Enabled"]').change(function() { diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index 8512dcca..db58cb63 100755 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -66,8 +66,8 @@
-
+
@@ -93,6 +94,7 @@
@@ -111,6 +113,7 @@
@@ -323,6 +327,19 @@
+
+ +
+
+
- +
+ @@ -78,9 +78,7 @@ -
- - +
@@ -492,7 +490,7 @@
- +
-
@@ -505,7 +503,7 @@
+
From 19f4145965a231a24f539aa5529278dc9d7d8869 Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Sat, 21 Jul 2018 08:52:00 +0200 Subject: [PATCH 15/43] Add PID F inflight adjustments --- locales/en/messages.json | 15 +++++++++++++++ src/js/tabs/adjustments.js | 18 +++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 35410767..354db4f4 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -1636,15 +1636,30 @@ "adjustmentsFunction22": { "message": "D Setpoint" }, + "adjustmentsFunction22_2": { + "message": "Pitch & Roll F Adjustment" + }, "adjustmentsFunction23": { "message": "D Setpoint Transition" }, + "adjustmentsFunction23_2": { + "message": "Feedforward Transition" + }, "adjustmentsFunction24": { "message": "Horizon Strength Adjustment" }, "adjustmentsFunction25": { "message": "PID-Audio Selection" }, + "adjustmentsFunction26": { + "message": "Pitch F Adjustment" + }, + "adjustmentsFunction27": { + "message": "Roll F Adjustment" + }, + "adjustmentsFunction28": { + "message": "Yaw F Adjustment" + }, "adjustmentsSave": { "message": "Save" }, diff --git a/src/js/tabs/adjustments.js b/src/js/tabs/adjustments.js index 490a1632..38be7ab5 100644 --- a/src/js/tabs/adjustments.js +++ b/src/js/tabs/adjustments.js @@ -277,7 +277,9 @@ TABS.adjustments.adjust_template = function () { var selectFunction = $('#functionSelectionSelect'); var elementsNumber; - if (semver.gte(CONFIG.apiVersion, "1.39.0")) { + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + elementsNumber = 29; // PID Audio + } else if (semver.gte(CONFIG.apiVersion, "1.39.0")) { elementsNumber = 26; // PID Audio } else if (semver.gte(CONFIG.apiVersion, "1.37.0")) { elementsNumber = 25; // Horizon Strength @@ -288,5 +290,19 @@ TABS.adjustments.adjust_template = function () { for (let i = 0; i < elementsNumber; i++) { selectFunction.append(new Option(i18n.getMessage('adjustmentsFunction' + i), i)); } + + // For 1.40, the D Setpoint has been replaced, so we replace it with the correct values + if (semver.gte(CONFIG.apiVersion, "1.40.0")) { + var element22 = selectFunction.find("option[value='22']"); + var element23 = selectFunction.find("option[value='23']"); + + // Change the "text" + element22.text(i18n.getMessage('adjustmentsFunction22_2')); + element23.text(i18n.getMessage('adjustmentsFunction23_2')); + + // Reorder, we insert it with the other FF elements to be coherent... + element22.insertAfter(selectFunction.find("option[value='25']")); + element23.insertAfter(selectFunction.find("option[value='28']")); + } }; From b6b5608aee288d3564d13856766f7f489486eee1 Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Mon, 23 Jul 2018 09:19:50 +0200 Subject: [PATCH 16/43] Remove unused PIDs --- src/js/tabs/pid_tuning.js | 280 ++++++++++---------------------------- src/tabs/pid_tuning.html | 49 +++---- 2 files changed, 94 insertions(+), 235 deletions(-) mode change 100755 => 100644 src/js/tabs/pid_tuning.js mode change 100755 => 100644 src/tabs/pid_tuning.html diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js old mode 100755 new mode 100644 index 2a033c21..a5f8005e --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -49,142 +49,19 @@ TABS.pid_tuning.initialize = function (callback) { } // Fill in the data from PIDs array - var i = 0; - $('.pid_tuning .ROLL input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[0][i++]); - break; - case 1: - $(this).val(PIDs[0][i++]); - break; - case 2: - $(this).val(PIDs[0][i++]); - break; - } - }); - i = 0; - $('.pid_tuning .PITCH input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[1][i++]); - break; - case 1: - $(this).val(PIDs[1][i++]); - break; - case 2: - $(this).val(PIDs[1][i++]); - break; - } - }); + // For each pid name + PID_names.forEach(function(elementPid, indexPid) { - i = 0; - $('.pid_tuning .YAW input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[2][i++]); - break; - case 1: - $(this).val(PIDs[2][i++]); - break; - } - }); - $('.pid_tuning .YAW_JUMP_PREVENTION input').each(function () { - switch (i) { - case 2: - $(this).val(PIDs[2][i++]); - break; - } - }); + // Look into the PID table to a row with the name of the pid + var searchRow = $('.pid_tuning .' + elementPid + ' input'); - i = 0; - $('.pid_tuning .ALT input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[3][i++]); - break; - case 1: - $(this).val(PIDs[3][i++]); - break; - case 2: - $(this).val(PIDs[3][i++]); - break; - } - }); - - i = 0; - $('.pid_tuning .Pos input').each(function () { - $(this).val(PIDs[4][i++]); - }); - - i = 0; - $('.pid_tuning .PosR input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[5][i++]); - break; - case 1: - $(this).val(PIDs[5][i++]); - break; - case 2: - $(this).val(PIDs[5][i++]); - break; - } - }); - - i = 0; - $('.pid_tuning .NavR input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[6][i++]); - break; - case 1: - $(this).val(PIDs[6][i++]); - break; - case 2: - $(this).val(PIDs[6][i++]); - break; - } - }); - - i = 0; - $('.pid_tuning .ANGLE input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[7][i++]); - break; - } - }); - $('.pid_tuning .HORIZON input').each(function () { - switch (i) { - case 1: - $(this).val(PIDs[7][i++]); - break; - case 2: - $(this).val(PIDs[7][i++]); - break; - } - }); - - i = 0; - $('.pid_tuning .MAG input').each(function () { - $(this).val(PIDs[8][i++]); - }); - - i = 0; - $('.pid_tuning .Vario input').each(function () { - switch (i) { - case 0: - $(this).val(PIDs[9][i++]); - break; - case 1: - $(this).val(PIDs[9][i++]); - break; - case 2: - $(this).val(PIDs[9][i++]); - break; - } + // Assign each value + searchRow.each(function (indexInput) { + if (PIDs[indexPid][indexInput] !== undefined) { + $(this).val(PIDs[indexPid][indexInput]); + } + }); }); // Fill in data from RC_tuning object @@ -519,60 +396,19 @@ TABS.pid_tuning.initialize = function (callback) { function form_to_pid_and_rc() { // Fill in the data from PIDs array // Catch all the changes and stuff the inside PIDs array - var i = 0; - $('table.pid_tuning tr.ROLL .pid_data input').each(function () { - PIDs[0][i++] = parseFloat($(this).val()); - }); - i = 0; - $('table.pid_tuning tr.PITCH .pid_data input').each(function () { - PIDs[1][i++] = parseFloat($(this).val()); - }); + // For each pid name + PID_names.forEach(function(elementPid, indexPid) { - i = 0; - $('table.pid_tuning tr.YAW .pid_data input').each(function () { - PIDs[2][i++] = parseFloat($(this).val()); - }); - $('table.pid_tuning tr.YAW_JUMP_PREVENTION .pid_data input').each(function () { - PIDs[2][i++] = parseFloat($(this).val()); - }); + // Look into the PID table to a row with the name of the pid + var searchRow = $('.pid_tuning .' + elementPid + ' input'); - i = 0; - $('table.pid_tuning tr.ALT input').each(function () { - PIDs[3][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('table.pid_tuning tr.Vario input').each(function () { - PIDs[9][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('table.pid_tuning tr.Pos input').each(function () { - PIDs[4][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('table.pid_tuning tr.PosR input').each(function () { - PIDs[5][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('table.pid_tuning tr.NavR input').each(function () { - PIDs[6][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('div.pid_tuning tr.ANGLE input').each(function () { - PIDs[7][i++] = parseFloat($(this).val()); - }); - $('div.pid_tuning tr.HORIZON input').each(function () { - PIDs[7][i++] = parseFloat($(this).val()); - }); - - i = 0; - $('div.pid_tuning tr.MAG input').each(function () { - PIDs[8][i++] = parseFloat($(this).val()); + // Assign each value + searchRow.each(function (indexInput) { + if ($(this).val()) { + PIDs[indexPid][indexInput] = parseFloat($(this).val()); + } + }); }); // catch RC_tuning changes @@ -661,37 +497,54 @@ TABS.pid_tuning.initialize = function (callback) { } function showAllPids() { - $('.tab-pid_tuning .pid_tuning').show(); + + // Hide all optional elements + $('.pid_optional tr').hide(); // Hide all rows + $('.pid_optional table').hide(); // Hide tables + $('.pid_optional').hide(); // Hide general div + + // Only show rows supported by the firmware + PID_names.forEach(function(elementPid) { + // Show rows for the PID + $('.pid_tuning .' + elementPid).show(); + + // Show titles and other elements needed by the PID + $('.needed_by_' + elementPid).show(); + }); + + // Special case + if (semver.lt(CONFIG.apiVersion, "1.24.0")) { + $('#pid_sensitivity').hide(); + } + } function hideUnusedPids() { - $('.tab-pid_tuning .pid_tuning').hide(); - $('#pid_main').show(); - - if (have_sensor(CONFIG.activeSensors, 'acc')) { - $('#pid_accel').show(); - $('#pid_level').show(); - $('#pid_sensitivity').show(); + if (!have_sensor(CONFIG.activeSensors, 'acc')) { + $('#pid_accel').hide(); } - var showTitle = false; - if (have_sensor(CONFIG.activeSensors, 'baro') || - have_sensor(CONFIG.activeSensors, 'sonar')) { - $('#pid_baro').show(); - showTitle = true; - } - if (have_sensor(CONFIG.activeSensors, 'mag')) { - $('#pid_mag').show(); - showTitle = true; - } - if (FEATURE_CONFIG.features.isEnabled('GPS')) { - $('#pid_gps').show(); - showTitle = true; + var hideSensorPid = function(element, sensorReady) { + var isVisible = element.is(":visible"); + if (!isVisible || !sensorReady) { + element.hide(); + isVisible = false; + } + + return isVisible; } - if (showTitle) { - $('#pid_optional').show(); + var isVisibleBaroMagGps = false; + + isVisibleBaroMagGps |= hideSensorPid($('#pid_baro'), have_sensor(CONFIG.activeSensors, 'baro') || have_sensor(CONFIG.activeSensors, 'sonar')); + + isVisibleBaroMagGps |= hideSensorPid($('#pid_mag'), have_sensor(CONFIG.activeSensors, 'mag')); + + isVisibleBaroMagGps |= hideSensorPid($('#pid_gps'), have_sensor(CONFIG.activeSensors, 'GPS')); + + if (!isVisibleBaroMagGps) { + $('#pid_baro_mag_gps').hide(); } } @@ -873,6 +726,7 @@ TABS.pid_tuning.initialize = function (callback) { } } + showAllPids(); updatePidDisplay(); showAllButton.on('click', function(){ @@ -981,12 +835,16 @@ TABS.pid_tuning.initialize = function (callback) { $('.tab-pid_tuning .note').hide(); } + // Add a name to each row of PIDs if empty $('.pid_tuning tr').each(function(){ - for(i = 0; i < PID_names.length; i++) { - if($(this).hasClass(PID_names[i])) { - $(this).find('td:first').text(PID_names[i]); + for(i = 0; i < PID_names.length; i++) { + if($(this).hasClass(PID_names[i])) { + var firstColumn = $(this).find('td:first'); + if (!firstColumn.text()) { + firstColumn.text(PID_names[i]); + } + } } - } }); diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html old mode 100755 new mode 100644 index db58cb63..afe4673b --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -33,7 +33,7 @@
-
+
@@ -139,17 +139,17 @@
-
- - +
+
+
- - +
+ @@ -161,16 +161,16 @@ - + - +
VEL
- - +
+ @@ -183,8 +183,8 @@
- - +
+ @@ -213,9 +213,9 @@
-
- - +
+
+
@@ -224,42 +224,43 @@
- - +
+
- - +
+ - +
- - +
+
- - +
+
+
From 16c5f9feb5d6649647e1d460a2c313ab472c9b4b Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Mon, 23 Jul 2018 11:50:47 +0200 Subject: [PATCH 17/43] Add Anti Gravity Mode --- locales/en/messages.json | 11 +++++++++++ src/js/fc.js | 1 + src/js/msp/MSPHelper.js | 4 +++- src/js/tabs/pid_tuning.js | 21 +++++++++++++++++++++ src/tabs/pid_tuning.html | 15 +++++++++++++-- 5 files changed, 49 insertions(+), 3 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 354db4f4..d02e6509 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -1242,6 +1242,17 @@ "message": "Profile independent PID Controller Settings" }, + "pidTuningAntiGravityMode": { + "message": "Anti Gravity Mode" + }, + "pidTuningAntiGravityModeOptionSmooth": { + "message": "Smooth", + "description": "One of the modes of anti gravity" + }, + "pidTuningAntiGravityModeOptionStep": { + "message": "Step", + "description": "One of the modes of anti gravity" + }, "pidTuningAntiGravityGain": { "message": "Anti Gravity Gain" }, diff --git a/src/js/fc.js b/src/js/fc.js index 084ea1b9..a3cd969c 100644 --- a/src/js/fc.js +++ b/src/js/fc.js @@ -380,6 +380,7 @@ var FC = { feedforwardPitch: 0, feedforwardYaw: 0, feedforwardTransition: 0, + antiGravityMode: 0, }; SENSOR_CONFIG = { diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js index 5f046469..59b1ccea 100644 --- a/src/js/msp/MSPHelper.js +++ b/src/js/msp/MSPHelper.js @@ -911,6 +911,7 @@ MspHelper.prototype.process_data = function(dataHandler) { ADVANCED_TUNING.feedforwardRoll = data.readU16(); ADVANCED_TUNING.feedforwardPitch = data.readU16(); ADVANCED_TUNING.feedforwardYaw = data.readU16(); + ADVANCED_TUNING.antiGravityMode = data.readU8(); } } } @@ -1585,7 +1586,8 @@ MspHelper.prototype.crunch = function(code) { .push8(ADVANCED_TUNING.acroTrainerAngleLimit) .push16(ADVANCED_TUNING.feedforwardRoll) .push16(ADVANCED_TUNING.feedforwardPitch) - .push16(ADVANCED_TUNING.feedforwardYaw); + .push16(ADVANCED_TUNING.feedforwardYaw) + .push8(ADVANCED_TUNING.antiGravityMode); } } } diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index 2a033c21..a278ddef 100755 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -391,6 +391,22 @@ TABS.pid_tuning.initialize = function (callback) { feedforwardTransitionNumberElement.val($(this).val()); }); + // AntiGravity Mode + var antiGravityModeSelect = $('.antigravity select[id="antiGravityMode"]'); + antiGravityModeSelect.change(function () { + var antiGravityModeValue = $('.antigravity select[id="antiGravityMode"]').val(); + + // Smooth + if (antiGravityModeValue == 0) { + $('.antigravity table th:nth-child(3)').hide(); + $('.antigravity table td:nth-child(3)').hide(); + } else { + $('.antigravity table th:nth-child(3)').show(); + $('.antigravity table td:nth-child(3)').show(); + } + }); + + antiGravityModeSelect.val(ADVANCED_TUNING.antiGravityMode).change(); } else { $('.itermrotation').hide(); @@ -407,6 +423,9 @@ TABS.pid_tuning.initialize = function (callback) { $('#pid_main .pid_titlebar2 th').attr("colspan", 8); $('#pid-tuning .feedforwardTransition').hide(); + + $('.antigravity table th:first-child').hide(); + $('.antigravity table td:first-child').hide(); } $('input[id="gyroNotch1Enabled"]').change(function() { @@ -657,6 +676,8 @@ TABS.pid_tuning.initialize = function (callback) { ADVANCED_TUNING.feedforwardYaw = parseInt($('.pid_tuning .YAW input[name="f"]').val()); ADVANCED_TUNING.feedforwardTransition = parseInt($('input[name="feedforwardTransition-number"]').val() * 100); + + ADVANCED_TUNING.antiGravityMode = $('select[id="antiGravityMode"]').val(); } } diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index db58cb63..2c51edb3 100755 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -455,14 +455,25 @@
+ - - + + +
+ + + + + +
From c6849b1b60eb30a3873fb50c3331f001ab3a0b58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiripolszky=20K=C3=A1roly?= Date: Mon, 23 Jul 2018 17:43:06 +0200 Subject: [PATCH 18/43] add switch to show/hide unused modes --- locales/en/messages.json | 3 +++ src/js/tabs/auxiliary.js | 26 ++++++++++++++++++++++++-- src/tabs/auxiliary.html | 6 ++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 21c8579a..1b3e9f77 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -1504,6 +1504,9 @@ "auxiliaryHelp": { "message": "Use ranges to define the switches on your transmitter and corresponding mode assignments. A receiver channel that gives a reading between a range min/max will activate the mode. Remember to save your settings using the Save button." }, + "auxiliaryToggleUnused": { + "message": "Show/hide unused modes" + }, "auxiliaryMin": { "message": "Min" }, diff --git a/src/js/tabs/auxiliary.js b/src/js/tabs/auxiliary.js index ce987c5d..c5dbeed5 100644 --- a/src/js/tabs/auxiliary.js +++ b/src/js/tabs/auxiliary.js @@ -244,8 +244,9 @@ TABS.auxiliary.initialize = function (callback) { } function update_ui() { - for (var i = 0; i < AUX_CONFIG.length; i++) { - var modeElement = $('#mode-' + i); + let hasUsedMode = false; + for (let i = 0; i < AUX_CONFIG.length; i++) { + let modeElement = $('#mode-' + i); if (modeElement.find(' .range').length == 0) { // if the mode is unused, skip it modeElement.removeClass('off').removeClass('on'); @@ -257,8 +258,17 @@ TABS.auxiliary.initialize = function (callback) { } else { $('.mode .name').eq(i).data('modeElement').removeClass('on').addClass('off'); } + hasUsedMode = true; } + let hideUnused = hideUnusedModes && hasUsedMode; + for (let i = 0; i < AUX_CONFIG.length; i++) { + let modeElement = $('#mode-' + i); + if (modeElement.find(' .range').length == 0) { + modeElement.toggle(!hideUnused); + } + } + auto_select_channel(RC.channels); var auxChannelCount = RC.active_channels - 4; @@ -306,6 +316,18 @@ TABS.auxiliary.initialize = function (callback) { return fillPrevChannelsValues(); } + let hideUnusedModes = false; + chrome.storage.local.get('hideUnusedModes', function (result) { + $("input#switch-toggle-unused") + .change(function() { + hideUnusedModes = $(this).prop("checked"); + chrome.storage.local.set({ hideUnusedModes: hideUnusedModes }); + update_ui(); + }) + .prop("checked", !!result.hideUnusedModes) + .change(); + }); + // update ui instantly on first load update_ui(); diff --git a/src/tabs/auxiliary.html b/src/tabs/auxiliary.html index b4fb11bf..90a44f4a 100644 --- a/src/tabs/auxiliary.html +++ b/src/tabs/auxiliary.html @@ -7,6 +7,12 @@

+

+

+ + +
+

From ce37a5343b72e1c0c1903a9bd6f8d837bb31120c Mon Sep 17 00:00:00 2001 From: Miguel Angel Mulero Martinez Date: Wed, 25 Jul 2018 15:18:15 +0200 Subject: [PATCH 19/43] Simplify Acro Trainer Slider Limit the range to 10-80 (actually was 0, 10-80) --- locales/en/messages.json | 2 +- src/js/tabs/pid_tuning.js | 13 ++----------- src/tabs/pid_tuning.html | 4 ++-- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 1b3e9f77..8ae441ee 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -2829,7 +2829,7 @@ "message": "Acro Trainer Angle Limit" }, "pidTuningAcroTrainerAngleLimitHelp": { - "message": "Adds a new angle limiting mode for pilots who are learning to fly in acro mode. The range valid is 10-80 (a value of 0 deactivates it)" + "message": "Adds a new angle limiting mode for pilots who are learning to fly in acro mode. The range valid is 10-80 and must be activated with a switch in the $t(tabAuxiliary.message) tab." }, "configHelp2": { diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js index 15ef3eb4..3a193795 100644 --- a/src/js/tabs/pid_tuning.js +++ b/src/js/tabs/pid_tuning.js @@ -234,20 +234,11 @@ TABS.pid_tuning.initialize = function (callback) { var acroTrainerAngleLimitNumberElement = $('input[name="acroTrainerAngleLimit-number"]'); var acroTrainerAngleLimitRangeElement = $('input[name="acroTrainerAngleLimit-range"]'); - var validateAcroTrainerAngle = function(value) { - // The minimum acro trainer angle is 10, but we must let zero too to deactivate it - if (value > 0 && value < 10) { - value = 10; - } - acroTrainerAngleLimitRangeElement.val(value); - acroTrainerAngleLimitNumberElement.val(value); - } - acroTrainerAngleLimitNumberElement.change(function () { - validateAcroTrainerAngle($(this).val()); + acroTrainerAngleLimitRangeElement.val($(this).val()); }); acroTrainerAngleLimitRangeElement.change(function () { - validateAcroTrainerAngle($(this).val()); + acroTrainerAngleLimitNumberElement.val($(this).val()); }); acroTrainerAngleLimitNumberElement.val(ADVANCED_TUNING.acroTrainerAngleLimit).change(); diff --git a/src/tabs/pid_tuning.html b/src/tabs/pid_tuning.html index afe4673b..d1d91db5 100644 --- a/src/tabs/pid_tuning.html +++ b/src/tabs/pid_tuning.html @@ -340,8 +340,8 @@ - - + + From 498160e829bfcbdae298d77cdadf9a9e3d911401 Mon Sep 17 00:00:00 2001 From: TheIsotopes Date: Sat, 28 Jul 2018 15:29:53 +0200 Subject: [PATCH 22/43] new open source disclaimer @McGiverGim @mikeller superseded #1130 --- locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en/messages.json b/locales/en/messages.json index 82ee8156..afb992ec 100644 --- a/locales/en/messages.json +++ b/locales/en/messages.json @@ -532,7 +532,7 @@ "message": "Open Source / Donation Notice" }, "defaultDonateText": { - "message": "This utility is fully open source and is available free of charge to all Betaflight users.
If you found the Betaflight or Betaflight configurator useful, please consider supporting its development by donating." + "message": "Betaflight is a flight controller software that is open source and is available free of charge without warranty to all users.
If you found the Betaflight or Betaflight configurator useful, please consider supporting its development by donating." }, "defaultDonate": { "message": "Donate" From ccc5296c9a3a5415049f773d3085fecde24465a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiripolszky=20K=C3=A1roly?= Date: Mon, 30 Jul 2018 21:10:40 +0200 Subject: [PATCH 23/43] reopen next tab when explicitly leaving CLI, otherwise open setup tab --- src/js/gui.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/js/gui.js b/src/js/gui.js index b29d2cc2..c285a9dd 100644 --- a/src/js/gui.js +++ b/src/js/gui.js @@ -323,7 +323,9 @@ GUI_control.prototype.content_ready = function (callback) { GUI_control.prototype.selectDefaultTabWhenConnected = function() { chrome.storage.local.get(['rememberLastTab', 'lastTab'], function (result) { - if (!(result.rememberLastTab && !!result.lastTab)) { + if (!(result.rememberLastTab + && !!result.lastTab + && result.lastTab.substring(4) != "cli")) { $('#tabs ul.mode-connected .tab_setup a').click(); return; } From 7c3bcef7e8e2c795bfe67c6fe2cd7ec70f5066aa Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Tue, 31 Jul 2018 18:13:41 +0100 Subject: [PATCH 24/43] Add vision font from inav --- resources/osd/vision.mcm | 16385 +++++++++++++++++++++++++++++++++++++ 1 file changed, 16385 insertions(+) create mode 100644 resources/osd/vision.mcm diff --git a/resources/osd/vision.mcm b/resources/osd/vision.mcm new file mode 100644 index 00000000..9f95ac51 --- /dev/null +++ b/resources/osd/vision.mcm @@ -0,0 +1,16385 @@ +MAX7456 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01000000 +10100001 +01010101 +00101000 +10100001 +01010101 +00101000 +10100001 +01010000 +00101000 +10100001 +01001010 +00101000 +10100001 +01001010 +00101000 +10100001 +01001010 +00101000 +10100001 +01010000 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100001 +01010101 +01010100 +10100001 +01010101 +01010010 +10100001 +01010101 +01001010 +10100001 +01010101 +00101010 +10100001 +01010101 +00101010 +10100001 +01010101 +01001010 +10100001 +01010101 +01010010 +10100001 +01010101 +01010100 +10100001 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01001000 +01010101 +01010101 +01001010 +00010101 +01010101 +01001010 +10000101 +01010101 +01001010 +10100001 +01010101 +01001010 +10101000 +01010101 +01001010 +10101000 +01010101 +01001010 +10100001 +01010101 +01001010 +10000101 +01010101 +01001010 +00010101 +01010101 +01001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +01010101 +01010101 +00101010 +01010101 +01010100 +10000001 +01010101 +01010110 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +01101001 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +10010101 +01010101 +01000010 +00010101 +01010101 +10101000 +01010101 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010100 +10101010 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +00010101 +01010100 +10000100 +10000101 +01010100 +10000100 +10000101 +01010100 +10000000 +10000101 +01010100 +10000010 +00010101 +01010100 +10000010 +00010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010001 +01000101 +00010001 +10001001 +00100000 +10001000 +10101000 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +10101000 +10101000 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +00010001 +00010001 +00010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000101 +01010101 +01001010 +10100001 +01010101 +01010000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010100 +10101010 +10100001 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000101 +01010101 +01001010 +10100001 +01010101 +01010000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01011010 +10100101 +01010101 +01010100 +01010101 +01010101 +01010010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010010 +10100001 +01010101 +01010010 +10101000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101000 +01010101 +01010010 +10100001 +01010101 +01010010 +10000101 +01010101 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01011010 +10100101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01011010 +10100101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010010 +10000101 +01010101 +01001010 +10000101 +01010101 +00101010 +10000101 +01010100 +10101010 +10000101 +01010101 +00101010 +10000101 +01010101 +01001010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01011010 +10100101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010001 +01010101 +01010100 +10001000 +01010101 +01010100 +10101000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010101 +00010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +00000101 +01001010 +10000010 +10100001 +01001000 +10000010 +00000101 +01001010 +10000010 +00000101 +01010000 +00010010 +10100001 +01010101 +01010010 +00000101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +00000101 +01001010 +10000010 +10100001 +01001000 +10000010 +00000101 +01001010 +10000010 +00010101 +01010000 +00010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +10100001 +01010101 +01010100 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010100 +00000101 +01001010 +10000010 +10100001 +01001000 +00010100 +10000101 +01001000 +00010100 +10000101 +01001010 +10000100 +10000101 +01001000 +00010100 +10000101 +01001000 +01010100 +10000101 +01001000 +01010100 +10000101 +01010001 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101000 +01010101 +01010101 +10000001 +01010101 +01010101 +10000100 +00000101 +00010001 +00010010 +10100000 +10001000 +01010010 +00000100 +10101000 +01010010 +00000100 +10101000 +01010010 +00100000 +10001000 +00010010 +10100000 +10001000 +10000100 +00000101 +00010001 +10000001 +01010101 +01010101 +10101000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00101010 +01010101 +01010101 +01000010 +01000001 +01010001 +01010010 +00101000 +01001000 +01010100 +00100010 +00001000 +01010101 +00101000 +01001000 +01010101 +00100010 +00001000 +00010101 +00101000 +01001010 +10000100 +01000001 +01010000 +00010010 +01010101 +01010101 +01000010 +01010101 +01010101 +00101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00010101 +00000001 +00101010 +10000100 +10101000 +01001010 +00010101 +00100001 +01001010 +10000101 +00100001 +01001000 +10100001 +00100001 +01001000 +00101000 +00100001 +01001000 +01001010 +00100001 +01001000 +01010010 +10100001 +01001000 +01010100 +10100001 +01001000 +01010101 +00100001 +01001000 +01010101 +00100001 +00101010 +00010100 +10101000 +01000000 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01001010 +00000010 +10100001 +01001000 +01010100 +00100001 +01001000 +01010101 +01000101 +01001010 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +10100001 +01000101 +01010101 +00100001 +00100000 +01010101 +00100001 +00101010 +00000000 +10100001 +01001010 +10101010 +10000101 +01010000 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01001010 +00000000 +10100001 +01001000 +01010101 +00000101 +01001000 +01010001 +01010101 +01001000 +00001000 +01010101 +01001010 +10101000 +01010101 +01001000 +00001000 +01010101 +01001000 +01010001 +01000101 +01001000 +01010101 +00100001 +01001010 +00000000 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +01010101 +00000001 +00101010 +00010100 +10101000 +01001000 +01010101 +00100001 +01001000 +01010101 +00100001 +01001000 +01010101 +00100001 +01001000 +01000001 +00100001 +01001000 +00101000 +00100001 +01001010 +00101000 +10100001 +01010010 +00101000 +10000101 +01010010 +10101010 +10000101 +01010100 +10000010 +00010101 +01010100 +10000010 +00010101 +01010101 +00010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01001000 +01010000 +00000000 +00001010 +01001010 +10101010 +10001010 +01001001 +10011001 +10001010 +01001010 +10101010 +10101010 +01001001 +10011001 +10001010 +01001010 +10101010 +10001010 +01010000 +00000000 +00010010 +01010101 +01010101 +01010100 +01010101 +01010101 +00000000 +01010101 +01010101 +10101010 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +01010101 +01010110 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +10100000 +00000000 +00000101 +10100010 +10101010 +10100001 +10100010 +01100110 +01100001 +10101010 +10101010 +10100001 +10100010 +01100110 +01100001 +10100010 +10101010 +10100001 +10000100 +00000000 +00000101 +00010101 +01010101 +01010101 +00000000 +01010101 +01010101 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010101 +10101010 +10010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010000 +00010000 +00010101 +10001010 +10001010 +10000101 +10001000 +10001000 +10000101 +10001000 +10001000 +10000101 +10001000 +10001000 +10000101 +10001010 +10001010 +10000101 +00010000 +00010000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000001 +00000001 +00000001 +10101000 +10101000 +10101000 +10000000 +10001000 +10001000 +10101000 +10001000 +10001000 +00001000 +10001000 +10001000 +10101000 +10101000 +10101000 +00000001 +00000001 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +00000001 +10101000 +00010000 +10101000 +00001000 +10001000 +10000001 +10101000 +10100000 +10101000 +10000000 +10100001 +00001000 +10101000 +10001000 +10101000 +00000001 +00010001 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010001 +01000101 +00010001 +10001000 +00100000 +10001000 +10101000 +10001000 +10001000 +10001000 +10101000 +00100001 +10001000 +10001000 +10001000 +10001000 +10001000 +10001000 +00010001 +00010001 +00010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010101 +01000001 +01001010 +00010101 +00100001 +01001010 +00010100 +10000101 +01010000 +01010010 +00010101 +01010101 +01001000 +01010101 +01010101 +00100001 +01010101 +01010100 +10000101 +00000101 +01010010 +00010100 +10100001 +01001000 +01010100 +10100001 +01000001 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01011010 +10101010 +10101010 +01010000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10100101 +00000000 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010101 +00000101 +01001010 +00010100 +10100001 +01010010 +10000010 +10000101 +01010000 +10101010 +00000101 +01001010 +10101010 +10100001 +01010000 +10101010 +00000101 +01010010 +10000010 +10000101 +01001010 +00010100 +10100001 +01010000 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010100 +00101000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00101000 +00010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001000 +01010101 +01010101 +00101000 +01010101 +01010101 +00100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010101 +01010101 +01001010 +00010101 +01010101 +00101010 +00010101 +01010100 +10101010 +00010101 +01010101 +00001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +00001010 +00000101 +01010100 +10101010 +10100001 +01010100 +10101010 +10100001 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010100 +00010100 +10100001 +01010101 +01010010 +10000101 +01010101 +01001010 +10000101 +01010101 +00101010 +00010101 +01010100 +10101000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10100001 +01010100 +00000000 +10100001 +01010101 +01010000 +10100001 +01010101 +01001010 +10100001 +01010101 +01001010 +10100001 +01010101 +01010000 +10100001 +01010100 +00000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10100001 +01010101 +00000000 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +00000101 +01010010 +10000000 +00010101 +01010010 +10101010 +10000101 +01010100 +10101010 +10100001 +01010101 +00000000 +10100001 +01010100 +00000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010100 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +00000101 +01010010 +10000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +10100001 +01010101 +01010100 +10100001 +01010101 +01010010 +10100001 +01010101 +01010010 +10000101 +01010101 +01001010 +10000101 +01010101 +01001010 +00010101 +01010101 +00101010 +00010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000000 +10100001 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10100001 +01010101 +00000000 +10100001 +01010100 +00000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010010 +10000101 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01010010 +10000101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010010 +00000000 +10000101 +01001000 +00000000 +00100001 +00100000 +10100010 +00001000 +00100010 +00001010 +00001000 +00100010 +00000010 +00001000 +00100010 +00001010 +00001000 +00100000 +10100010 +00100000 +00100000 +00000000 +10000001 +00001000 +00000100 +00000101 +01000010 +00000000 +00100001 +01010000 +10101010 +10000001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +01010101 +01010101 +00101010 +00010101 +01010100 +10101010 +10000101 +01010010 +10100010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000101 +00000101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +00000101 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000010 +10100001 +01010010 +10101010 +10000101 +01010010 +10101010 +00010101 +01010100 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010100 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +00000101 +01010010 +10000000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +00010101 +01010010 +10000000 +01010101 +01010010 +10000000 +00000101 +01010010 +10101010 +10100001 +01010100 +10101010 +10100001 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +00000101 +01010010 +10000101 +01010101 +01010010 +10000000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +00010101 +01010010 +10000000 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010100 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +00000101 +01010010 +10000100 +00000101 +01010010 +10000010 +10100001 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00101000 +00010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010100 +00101000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000101 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010100 +00010100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000010 +10100001 +01010010 +10001010 +10000101 +01010010 +10101010 +00010101 +01010010 +10101000 +01010101 +01010010 +10101010 +00010101 +01010010 +10001010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000000 +00000001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10100010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10001000 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10100000 +10100001 +01010010 +10101000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10001010 +10100001 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010010 +10000000 +00010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000010 +10100001 +01010010 +10001010 +10000101 +01010010 +10101010 +10000101 +01010100 +10101010 +10100001 +01010101 +00000000 +10100001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010010 +10101010 +10100001 +01010010 +10000000 +10100001 +01010010 +10000100 +10100001 +01010010 +10000010 +10000101 +01010010 +10001010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010100 +10101010 +10000101 +01010010 +10101010 +10000101 +01010010 +10000000 +00000101 +01010010 +10000000 +00010101 +01010100 +10101010 +10000101 +01010101 +00000010 +10100001 +01010101 +01010100 +10100001 +01010100 +00000000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000000 +00000101 +01001010 +10101010 +10100001 +01001010 +10101010 +10100001 +01010000 +00101000 +00000101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010100 +10101010 +10000101 +01010101 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +10100010 +10000101 +01010100 +10100010 +10000101 +01010101 +00101010 +00010101 +01010101 +00101010 +00010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000000 +10100001 +01010010 +10001000 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10100010 +10100001 +01010010 +10000100 +10100001 +01010010 +00010101 +00100001 +01010100 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +00000101 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10100010 +10100001 +01010100 +10101010 +10000101 +01010101 +00101010 +00010101 +01010100 +10101010 +10000101 +01010010 +10100010 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010010 +10000100 +10100001 +01010100 +00010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010101 +00000101 +01001010 +00010100 +10100001 +01001010 +00010100 +10100001 +01001010 +10000010 +10100001 +01010010 +10000010 +10000101 +01010010 +10101010 +10000101 +01010100 +10101010 +00010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +10100001 +01010101 +01010010 +10100001 +01010101 +01001010 +10000101 +01010101 +00101010 +00010101 +01010100 +10101000 +01010101 +01010010 +10100000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10000000 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000000 +01010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +10000101 +01010101 +01010100 +10100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010101 +00000010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010101 +00000010 +00010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010100 +10101010 +00010101 +01010010 +10000010 +10000101 +01010010 +00010100 +10000101 +01010100 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000000 +00000101 +01001010 +10101010 +10100001 +01001010 +10101010 +10100001 +01010000 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01000101 +00100001 +01010101 +00100001 +00101000 +01010100 +10100001 +01001010 +00010010 +10000101 +01001010 +10001010 +10000101 +01010010 +10101010 +00010101 +01010010 +10101010 +00010101 +01010100 +10101000 +01010101 +01010100 +10101000 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01000101 +01010100 +10000101 +00100000 +00010010 +10000101 +01001010 +10000010 +10000101 +01010010 +10101010 +10000101 +01010100 +10101010 +10000101 +01010101 +00101010 +10000101 +01010101 +01001010 +10000101 +01010101 +01010010 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01001000 +01010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01000000 +00001010 +10000101 +00101010 +10101010 +10000101 +01001010 +10101010 +10000101 +01010000 +00101010 +10100001 +01010101 +01000000 +10100001 +01010101 +01010101 +00001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010010 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10100001 +01010101 +01010100 +10101000 +01010101 +01010101 +00101010 +00010101 +01010100 +00101010 +10000101 +01000010 +10101010 +10100001 +00101010 +10101010 +10101000 +01000000 +00000000 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +00010101 +01010101 +01001010 +10000001 +01010101 +01000010 +10101000 +00010101 +01010000 +10101010 +10000001 +01010100 +00101010 +10101000 +01010000 +10101010 +10000001 +01000010 +10101000 +00010101 +01001010 +10000001 +01010101 +00101000 +00010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00000000 +00000001 +00101010 +10101010 +10101000 +01000010 +10101010 +10100001 +01010100 +00101010 +10000101 +01010101 +00101010 +00010101 +01010100 +10101000 +01010101 +01010100 +10100001 +01010101 +01010100 +10000101 +01010101 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +00001000 +01010101 +01000000 +10100001 +01010000 +00101010 +10100001 +01001010 +10101010 +10000101 +00101010 +10101010 +10000101 +01000000 +00001010 +10000101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010010 +10000101 +01010101 +01001010 +10000101 +01010101 +00101010 +10000101 +01010100 +10101010 +10000101 +01010010 +10101010 +10000101 +01001010 +10000010 +10000101 +00100000 +00010010 +10000101 +01000101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010100 +10101000 +01010101 +01010100 +10101000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +00010101 +01001010 +10001010 +10000101 +01001010 +00010010 +10000101 +00101000 +01010100 +10100001 +00100001 +01010101 +00100001 +01000101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010010 +10100001 +01010101 +01010010 +10101000 +01010101 +01010010 +10101010 +00010101 +01010010 +10101010 +10000101 +01010010 +10000010 +10100001 +01010010 +10000100 +00001000 +01010010 +00010101 +01010001 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100000 +01010101 +01010101 +01001010 +00000001 +01010101 +01001010 +10101000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10101000 +01010010 +10100000 +00000001 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00000000 +00000001 +00101010 +10101010 +10101000 +01001010 +10101010 +10000001 +01010010 +10101000 +00010101 +01010100 +10101000 +01010101 +01010101 +00101010 +00010101 +01010101 +01001010 +00010101 +01010101 +01010010 +00010101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010100 +00101000 +01010101 +01000010 +10100001 +01010100 +00101010 +10000101 +01000010 +10101010 +00010101 +00101010 +10101000 +01010101 +01000010 +10101010 +00010101 +01010100 +00101010 +10000101 +01010101 +01000010 +10100001 +01010101 +01010100 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010010 +00010101 +01010101 +01001010 +00010101 +01010101 +00101010 +00010101 +01010100 +10101000 +01010101 +01010010 +10101000 +00010101 +01001010 +10101010 +10000001 +00101010 +10101010 +10101000 +01000000 +00000000 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +00100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010010 +10100000 +00000001 +01010010 +10101010 +10101000 +01010010 +10101010 +10100001 +01001010 +10101000 +00000101 +01001010 +00000001 +01010101 +00100000 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010010 +00010101 +01010101 +01010010 +00010101 +01010001 +01010010 +10000100 +00001000 +01010010 +10000010 +10100001 +01010010 +10101010 +10000101 +01010010 +10101010 +00010101 +01010010 +10101000 +01010101 +01010010 +10100001 +01010101 +01010010 +10000101 +01010101 +01010010 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +01010101 +01001010 +10001010 +00010101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001010 +10001000 +10000101 +01010000 +00010000 +00010101 +01001000 +10001010 +00010101 +01001000 +10001000 +10000101 +01001010 +10001010 +00010101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01010001 +00010001 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010001 +01010101 +01001010 +10001000 +01010101 +01001000 +01001000 +01010101 +01001010 +00001000 +01010101 +01001000 +01001000 +00010101 +01001000 +01001010 +10000101 +01010000 +00010000 +00010101 +01001000 +10001010 +00010101 +01001000 +10001000 +10000101 +01001010 +10001010 +00010101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01010001 +00010001 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +00100001 +01010101 +01010100 +10101000 +01010101 +01010010 +10101010 +00010101 +01010100 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000001 +01010101 +01010010 +10101000 +01010101 +01010100 +10101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10100001 +01010101 +01010100 +10101000 +01010101 +01010100 +10100001 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01001000 +01010101 +01010101 +00101000 +01010101 +01010100 +10101000 +01010101 +01010010 +10101000 +01010101 +01010100 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +01010101 +01010010 +10101010 +00010101 +01010100 +10101000 +01010101 +01010101 +00100001 +01010101 +01010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10100001 +01010101 +01010100 +10101000 +01010101 +01010100 +10101010 +00010101 +01010101 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01001000 +01010101 +01010101 +00101000 +01010101 +01010100 +10101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01001000 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010100 +10101010 +00010101 +01010100 +10101000 +01010101 +01010100 +10100001 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +00101000 +01010101 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010010 +10000101 +01010101 +01010100 +10100001 +01010101 +01010101 +00101000 +01010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +01001010 +00010101 +01010101 +00101000 +01010101 +01010100 +10100001 +01010101 +01010010 +10000101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10000101 +01010101 +01010010 +00100001 +01010101 +01001000 +01001000 +01010101 +00100001 +01010010 +00010100 +10000101 +01010100 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +00010101 +01010010 +00010100 +10000101 +01001000 +01010101 +00100001 +00100001 +01010101 +01001000 +10000101 +01010101 +01010010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +00010101 +01010101 +01010100 +10000101 +01010101 +01010100 +10000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00010101 +01010010 +10101010 +10000101 +01010100 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00101010 +01010101 +01010101 +01000010 +01010101 +01010101 +01010010 +01010100 +10000101 +01010100 +01010000 +10000001 +01010101 +01011010 +10101001 +01010101 +01010000 +10000001 +01010101 +01010100 +10000101 +01010100 +01010101 +01010101 +01010010 +01010101 +01010101 +01000010 +01010101 +01010101 +00101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010101 +01010101 +01001010 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001000 +01010101 +01010101 +01001010 +01010101 +01010101 +01010000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +10101010 +10100001 +01010101 +10101010 +10100001 +01010101 +10101010 +10100001 +01010101 +10101010 +10100001 +01010101 +10101010 +10100001 +01010101 +10101010 +10100001 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00000000 +00000000 +00000000 +10101010 +10101010 +10101010 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +10100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +00100001 +01010101 +01010101 +10100001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000101 +01010010 +10000000 +10100001 +01010010 +10101010 +10100001 +01010010 +00101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00101010 +10100001 +01010010 +10101010 +10100001 +01010010 +00000000 +00100001 +01010010 +00100010 +10100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010010 +10001000 +10100001 +01010010 +00100010 +00100001 +01010010 +00100010 +00100001 +01010010 +00000000 +00100001 +01010010 +10101010 +10100001 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101000 +01010101 +01010101 +10000001 +01010101 +01010101 +10000100 +00000101 +00010001 +00010010 +10100000 +10001000 +01010010 +00000000 +10001000 +01010010 +10100000 +10101000 +01010010 +00100001 +00100001 +00010010 +10100001 +00100001 +10000100 +01000101 +01000101 +10000001 +01010101 +01010101 +10101000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +00010101 +01001010 +10001010 +10000101 +01001000 +00010010 +00010101 +01001010 +00010010 +00010101 +01001000 +01010010 +00010101 +01001000 +01010010 +00010101 +01010000 +00000000 +00010101 +01001010 +10101010 +10000101 +01010000 +00000000 +00010101 +01010100 +00101000 +01010101 +01010100 +10000001 +01010101 +01010100 +10101000 +01010101 +01010101 +00001000 +01010101 +01010100 +10101000 +01010101 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +00101000 +01010101 +01010100 +10000010 +00010101 +01010100 +10000010 +00010101 +01010100 +10101010 +00010101 +01010100 +10000010 +00010101 +01010100 +10000010 +00010101 +01010100 +10000010 +00010101 +01010101 +00010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +01010101 +01001010 +10001010 +00010101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001010 +10001000 +10000101 +01010000 +00010000 +00010101 +01001000 +10001010 +00010101 +01001010 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01010001 +00010001 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00010000 +01010101 +01001010 +10001000 +01010101 +01001000 +00001000 +01010101 +01001010 +10001000 +01010101 +01001000 +00001000 +00010101 +01001000 +01001010 +10000101 +01010000 +00010000 +00010101 +01001000 +10001010 +00010101 +01001010 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01001000 +10001000 +10000101 +01010001 +00010001 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101000 +01010101 +01010101 +10000000 +00000101 +01000000 +10000010 +10100001 +00101010 +00010010 +00001000 +01000010 +01010010 +00001000 +01010010 +01010010 +10100000 +01010010 +01010010 +00001000 +01010010 +00010010 +00001000 +01010010 +10000010 +00001000 +01010010 +10000000 +01010001 +01010100 +10101000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00101010 +00000101 +00010100 +01000010 +10100000 +10000010 +00010010 +00000100 +10000010 +00010000 +00010100 +10000010 +00001000 +00010100 +10101010 +00010001 +00010100 +10000010 +00001000 +00010100 +10000010 +00010000 +00010100 +10000010 +00010010 +01010101 +00010100 +01000010 +01010101 +01010101 +00101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010001 +01010101 +01010100 +10001000 +01010101 +01010100 +10101000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010100 +10001000 +01010101 +01010000 +00000000 +00010101 +01001010 +10101010 +10000101 +01010000 +00000000 +00010101 +01010100 +00101000 +01010101 +01010100 +10000001 +01010101 +01010100 +10101000 +01010101 +01010101 +00001000 +01010101 +01010100 +10101000 +01010101 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000001 +01010101 +01010101 +01010000 +00010101 +01010101 +01010000 +00000101 +01010101 +01010000 +00000000 +01010101 +01010100 +01010000 +00000101 +01010100 +00010101 +00000000 +01010101 +00010101 +01010000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +00000101 +01010100 +01000000 +00000101 +01010101 +01010000 +00000101 +01010101 +01010000 +00000001 +01010101 +01010100 +01010101 +01010101 +01010100 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00000101 +01010101 +01010101 +01000001 +01010101 +01010101 +01010001 +01010101 +01010101 +01010000 +01010101 +01010101 +01010100 +01010101 +01010101 +01010100 +00010101 +01010101 +01010101 +00000101 +01010101 +01010101 +01000101 +01010101 +01010101 +01010000 +01010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000001 +01010101 +01010101 +01000000 +00010101 +01010101 +01010100 +00000001 +01010101 +01010101 +01000000 +00010101 +01010101 +01010000 +00000101 +01010101 +01010101 +00000000 +01010101 +01010101 +01010000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010101 +01000001 +01010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +00000000 +01010101 +01010101 +01010000 +00010101 +01010101 +01010100 +00000001 +01010101 +01010101 +01000000 +00010101 +01010101 +01010100 +00000001 +00010101 +01010101 +01000000 +00000000 +01010101 +01010100 +01010000 +00000101 +01010100 +01010101 +00000000 +01010100 +01010101 +01010000 +00001010 +01010101 +01010010 +00101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +01010000 +01010101 +01010101 +01010000 +01010101 +01010101 +00000000 +01010101 +01010100 +00000000 +00010101 +01010100 +00000000 +00000101 +01010100 +00000000 +10101010 +01010100 +00000000 +00101010 +00000000 +00000000 +10101010 +10000000 +00000000 +10100000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000101 +01010101 +01010101 +00000001 +01010101 +01010101 +00000000 +00010101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000001 +01010101 +00000001 +01000000 +01010101 +00000101 +01010100 +00010101 +00000101 +01010101 +00000101 +00000001 +01010101 +01000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10100101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10010101 +01100101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01011001 +01010101 +01011010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010110 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000000 +01010101 +01010101 +01000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00000000 +10101010 +00000000 +00000110 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +01101010 +01010101 +01010101 +01101010 +01010101 +01010101 +01000000 +01010101 +01010100 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000000 +01010101 +00100000 +00000000 +01010101 +10101010 +00100000 +01010101 +10101010 +10101010 +01010101 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10100000 +00000000 +00000000 +10000000 +00000000 +00000000 +10000000 +00000000 +00000101 +10000000 +00000000 +00000101 +10000000 +00000000 +00010101 +10000000 +00000000 +00010101 +10100000 +00000001 +01010101 +10000000 +00000101 +01010101 +00000000 +01010101 +01010101 +00000000 +00010101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000000 +01010101 +00000000 +00000000 +00000101 +00000000 +00000000 +00000001 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +10000000 +00000000 +00000000 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +01010101 +01010001 +00000000 +00000101 +01010000 +00000000 +00000000 +00010000 +01010000 +00000000 +00000000 +01010101 +01010101 +01010000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00000001 +01010101 +01010101 +00000000 +00000101 +00000000 +00000000 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010000 +01010101 +01010101 +00000001 +01010101 +01010101 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010110 +01010101 +01010101 +01010110 +01010101 +01010101 +01010110 +01010101 +01010101 +01011010 +01010101 +01010101 +01011010 +01010101 +01010101 +01011010 +01010101 +01010101 +01101010 +01010101 +01010101 +01101010 +01010101 +01010101 +01101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010110 +10101010 +01010101 +01010110 +10101010 +01010101 +01010110 +10101010 +01010101 +01011010 +10101010 +01010101 +01011010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10010101 +01011010 +10101010 +10010101 +01010110 +10101010 +01010101 +01010110 +10101010 +01010101 +01011010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10100101 +01010101 +01101010 +10100101 +01010101 +01101010 +10010101 +01010101 +01101010 +10010101 +01010101 +10101010 +10010101 +01011010 +10101010 +10101010 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10010101 +01010110 +10101010 +10010101 +01010110 +10101010 +10100101 +01010110 +10101010 +10010101 +01011010 +10101010 +10010101 +01011010 +10101010 +10010101 +01011010 +10101010 +01010101 +01101010 +10101001 +01010101 +01101010 +10100101 +01010101 +01101010 +10100101 +01010101 +10101010 +10100101 +01010101 +10101010 +10101001 +01010101 +10101010 +10101001 +01010110 +10101010 +10101001 +01010110 +10101010 +10101001 +01011010 +10101010 +10101001 +01011010 +10101010 +10100101 +01011010 +10101010 +10100101 +01101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +01010101 +01010101 +10101001 +01010101 +01010101 +10101001 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10010101 +01010101 +01010101 +10010101 +01010101 +01010101 +10010101 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10010101 +10101010 +10101010 +10010101 +10101010 +10101010 +10010110 +10101010 +10101010 +01010110 +10101010 +10101010 +01010110 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10100101 +01010101 +01010101 +10010101 +01010101 +01010110 +10010101 +01010101 +01010110 +01010101 +01010101 +01010110 +01010101 +01010101 +01011010 +01010101 +01010101 +01011010 +01010101 +01010101 +01101010 +01010101 +01010101 +01101010 +01010101 +01010101 +01101010 +01010101 +01010101 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +01101010 +10101001 +01010101 +10101010 +10101001 +01010101 +10101010 +10100101 +01010101 +10101010 +10100101 +01010101 +10101010 +10100101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010110 +10101001 +01010101 +01010110 +10101001 +01010101 +01011010 +10101001 +01010101 +01101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101001 +01010101 +01101010 +10101001 +01010101 +01101010 +10100101 +01010101 +10101010 +10100101 +01010110 +10101010 +10100101 +01011010 +10101010 +01010101 +01011010 +10101010 +01010101 +01101010 +10101010 +01010101 +10101010 +10101010 +01010101 +10101010 +10010110 +01010110 +10101010 +10010110 +01011010 +10101010 +01010110 +01011010 +10101001 +01010110 +01101010 +10101001 +01010110 +10101010 +10100101 +01010110 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010101 +10101010 +10010101 +01010100 +10101010 +10010101 +01010100 +10101010 +10010101 +01010100 +10101010 +10010101 +01010000 +10101010 +10010101 +01010000 +10101010 +10010101 +01010000 +10101010 +10010101 +01000000 +10101010 +10010101 +01000000 +10101010 +10010101 +01000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +00000000 +01010000 +00000000 +00000000 +01010000 +00000000 +00000000 +01010000 +00000000 +00000000 +01000000 +00000000 +00000000 +01000000 +00000001 +01010101 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +00010101 +01010101 +00000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000001 +01010101 +01010101 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000001 +01010100 +00000000 +00000001 +01010000 +00000000 +00000001 +01010000 +00000000 +00000101 +01000000 +00000000 +00000101 +01000000 +01010101 +01010101 +01000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000000 +00000001 +01010101 +00000000 +00000001 +01010100 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +00000000 +00000101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010101 +00000000 +00010101 +01010101 +00000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000001 +01010101 +01010101 +00000001 +01010101 +01010101 +00000101 +01010101 +01010101 +00000101 +01010101 +01010101 +00000101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +00000000 +00010101 +01010000 +00000000 +00010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010100 +01000000 +00000001 +01010100 +01000000 +00000001 +01010100 +00000000 +00000001 +01010100 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +01010101 +01010100 +00000000 +01010101 +01000000 +00000000 +01010101 +00000000 +00000000 +01010100 +00000000 +00000001 +01010100 +00000000 +00000101 +01010000 +00000000 +00010101 +01000000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000001 +01010101 +00000000 +00000000 +01010101 +00000000 +00000000 +00000000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +00000000 +00000000 +00000101 +00000000 +00000000 +00000101 +01010100 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00000000 +00000101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +00000000 +00000001 +01010100 +00000000 +00000001 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +00000000 +00010101 +01010100 +00000000 +00000000 +01010000 +00000000 +00000000 +01010000 +00000000 +00000000 +01010000 +00000000 +00000000 +01000000 +00000000 +00000000 +01000000 +00000000 +00000000 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010100 +00000000 +01010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +01000000 +00000001 +00000000 +00000000 +00000101 +00000000 +00000000 +00000101 +00000000 +00000000 +00000101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +00000000 +00000000 +00010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +01000000 +00000001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +00000000 +00000000 +00010100 +00000000 +00000000 +01010100 +00000000 +00000000 +01010100 +00000000 +00000000 +01010000 +00000000 +00000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000000 +01010101 +01010101 +00000000 +01010101 +01010100 +00000000 +01010101 +01010100 +00000000 +01010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01010000 +00000000 +01010101 +01000000 +00000000 +01010101 +01000000 +00000001 +01010101 +01000000 +00000001 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000001 +00000000 +00000000 +00000101 +00000000 +00000000 +00000101 +00000000 +00000000 +00000101 +00000000 +00000000 +00010101 +00000001 +01010101 +01010101 +00000101 +01010101 +01010101 +00000101 +01010101 +01010101 +00000101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +01010101 +00100010 +10100000 +01010101 +01101000 +00000000 +01010101 +01000000 +00000010 +01010101 +01010000 +00101000 +01010101 +01010100 +00101010 +01010101 +01010101 +00101010 +01010101 +01010101 +01010110 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00100000 +00000000 +00001000 +10100000 +00000000 +00100010 +10000000 +00000000 +10101010 +10100000 +00000000 +10101010 +00000000 +00000010 +10101010 +10000000 +00101010 +10101000 +10000000 +10001010 +10101000 +00000000 +00001001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +01010100 +00000000 +00000000 +01010000 +00000000 +00000000 +00000101 +00000000 +00000000 +00010101 +00000000 +00000001 +01010101 +00000000 +00010101 +01010101 +10000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01011010 +10101010 +01010101 +01101010 +10101010 +01010101 +01101010 +10101010 +01010101 +01101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10101010 +10100101 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10010101 +01101010 +10101010 +01010101 +01101010 +10101010 +01010101 +10101010 +10101010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10101010 +10101001 +10101010 +10101010 +10101001 +10101010 +10101010 +10101001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +01010101 +01010101 +10101010 +01010101 +01010110 +10101010 +01010101 +01010110 +10010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10100101 +01010101 +01101010 +10100101 +01010101 +10101010 +10100101 +01010110 +10101010 +10010101 +01010110 +01010110 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101001 +01010101 +01011010 +10100101 +01010101 +01011010 +10100101 +01010101 +01011010 +10010101 +01010101 +01011010 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +10101010 +10010101 +00000000 +10101010 +10010101 +00000000 +10101010 +10010101 +00000000 +01010110 +10010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000001 +01010101 +01010101 +00000101 +01010101 +01010101 +00000101 +01010101 +01010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +01010101 +00000000 +00000000 +01010100 +00000000 +00000000 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +01010100 +00000000 +00000000 +01010100 +00000000 +00000000 +01010000 +01010101 +01010001 +01010000 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010101 +00000000 +00010101 +01010101 +00000000 +00010101 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000000 +00000000 +00000000 +00000000 +00000000 +01010000 +00000000 +00000000 +01010100 +00000000 +00000101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000001 +01010100 +00000000 +00000101 +01010000 +01010000 +00000101 +01010000 +01010001 +00010101 +01010001 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00010101 +01010101 +00000000 +00010101 +01010101 +00000000 +01010101 +01010100 +01010100 +01010101 +01010100 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000001 +01010101 +00000000 +00000101 +01010101 +00000000 +00000101 +01010101 +00010101 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +00000000 +00000101 +01010100 +00000000 +00000101 +01010100 +00000000 +00010101 +01010100 +01010100 +00010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 +01010101 \ No newline at end of file From 8b59d051072bde27ba6ffbc50201114926c02bb8 Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Tue, 31 Jul 2018 21:21:16 +0100 Subject: [PATCH 25/43] Added vision font to OSD tab. --- src/js/tabs/osd.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js index 8e40d93b..a66151f1 100755 --- a/src/js/tabs/osd.js +++ b/src/js/tabs/osd.js @@ -913,7 +913,8 @@ OSD.constants = { { file: "extra_large", name: "Extra Large" }, { file: "betaflight", name: "Betaflight" }, { file: "digital", name: "Digital" }, - { file: "clarity", name: "Clarity" } + { file: "clarity", name: "Clarity" }, + { file: "vision", name: "Vision" } ] }; From 4d582f45c8ad705545cecca697f0c3e96c6a90eb Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Tue, 31 Jul 2018 21:57:47 +0100 Subject: [PATCH 26/43] Change Extra Large font name to X-Large to fix UI overflow. --- src/js/tabs/osd.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js index a66151f1..51ff1021 100755 --- a/src/js/tabs/osd.js +++ b/src/js/tabs/osd.js @@ -910,7 +910,7 @@ OSD.constants = { { file: "default", name: "Default" }, { file: "bold", name: "Bold" }, { file: "large", name: "Large" }, - { file: "extra_large", name: "Extra Large" }, + { file: "extra_large", name: "X-Large" }, { file: "betaflight", name: "Betaflight" }, { file: "digital", name: "Digital" }, { file: "clarity", name: "Clarity" }, From 3d1ad1088f038bc04fd16b2c7623eeebd769d116 Mon Sep 17 00:00:00 2001 From: mikeller Date: Wed, 1 Aug 2018 21:22:12 +1200 Subject: [PATCH 27/43] Removed cleaning steps from 'debug' build. --- gulpfile.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 9b210773..91e8ec9b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -60,13 +60,14 @@ gulp.task('clean-release', clean_release); gulp.task('clean-cache', clean_cache); -var distBuild = gulp.series(clean_dist, dist_src, dist_locale, dist_libraries, dist_resources); -gulp.task('dist', distBuild); +var distBuild = gulp.series(dist_src, dist_locale, dist_libraries, dist_resources); +var distRebuild = gulp.series(clean_dist, distBuild); +gulp.task('dist', distRebuild); -var appsBuild = gulp.series(gulp.parallel(clean_apps, distBuild), apps, gulp.parallel(listPostBuildTasks(APPS_DIR))); +var appsBuild = gulp.series(gulp.parallel(clean_apps, distRebuild), apps, gulp.parallel(listPostBuildTasks(APPS_DIR))); gulp.task('apps', appsBuild); -var debugBuild = gulp.series(gulp.parallel(clean_debug, distBuild), debug, gulp.parallel(listPostBuildTasks(DEBUG_DIR)), start_debug) +var debugBuild = gulp.series(distBuild, debug, gulp.parallel(listPostBuildTasks(DEBUG_DIR)), start_debug) gulp.task('debug', debugBuild); var releaseBuild = gulp.series(gulp.parallel(clean_release, appsBuild), gulp.parallel(listReleaseTasks())); From 40cf5667710a2ede2bbdc0ef3b0ab3de3169ab5e Mon Sep 17 00:00:00 2001 From: Richard Cooper Date: Wed, 1 Aug 2018 22:46:51 +0100 Subject: [PATCH 28/43] Change font presets to new dropdown UI. --- src/css/tabs/osd.css | 6 +++++- src/js/tabs/osd.js | 34 +++++++++++++++++++--------------- src/tabs/osd.html | 6 +++++- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/css/tabs/osd.css b/src/css/tabs/osd.css index d45af866..6084a4f6 100644 --- a/src/css/tabs/osd.css +++ b/src/css/tabs/osd.css @@ -402,13 +402,17 @@ button { cursor: pointer; } -.fontbuttons { +.fontpresets_wrapper { display: inline-block; position: absolute; right: 1.2em; top: .8em; } +.fontpresets { + border: 1px solid #cccccc; +} + .tab-osd .switchable-field { padding: 3px; border: 1px solid transparent; diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js index 51ff1021..7c84282d 100755 --- a/src/js/tabs/osd.js +++ b/src/js/tabs/osd.js @@ -910,7 +910,7 @@ OSD.constants = { { file: "default", name: "Default" }, { file: "bold", name: "Bold" }, { file: "large", name: "Large" }, - { file: "extra_large", name: "X-Large" }, + { file: "extra_large", name: "Extra Large" }, { file: "betaflight", name: "Betaflight" }, { file: "digital", name: "Digital" }, { file: "clarity", name: "Clarity" }, @@ -1471,17 +1471,18 @@ TABS.osd.initialize = function (callback) { } $('#content').load("./tabs/osd.html", function () { - - // Generate font type buttons - var fontbuttons = $('.fontbuttons'); + // Generate font type select element + var fontselect = $('.fontpresets'); OSD.constants.FONT_TYPES.forEach(function(e, i) { - var button = $('