From 80488a2b721727f4bc9615263feb7515ae87728a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 19:34:56 +0000 Subject: [PATCH 001/313] Bump aioesphomeapi from 23.2.0 to 24.0.0 (#6544) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4abc4d98d2..7424267d08 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ platformio==6.1.13 # When updating platformio, also update Dockerfile esptool==4.7.0 click==8.1.7 esphome-dashboard==20240412.0 -aioesphomeapi==23.2.0 +aioesphomeapi==24.0.0 zeroconf==0.131.0 python-magic==0.4.27 ruamel.yaml==0.18.6 # dashboard_import From 7d99676fe88858ef29e7bd21c81eb5b1bebb8349 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 19:50:22 +0000 Subject: [PATCH 002/313] Bump pyupgrade from 3.15.1 to 3.15.2 (#6543) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- requirements_test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7865c52abd..69aafd4d15 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: - --branch=release - --branch=beta - repo: https://github.com/asottile/pyupgrade - rev: v3.15.1 + rev: v3.15.2 hooks: - id: pyupgrade args: [--py39-plus] diff --git a/requirements_test.txt b/requirements_test.txt index 16e9ec7422..767018d07a 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,7 +1,7 @@ pylint==3.1.0 flake8==7.0.0 # also change in .pre-commit-config.yaml when updating black==24.4.0 # also change in .pre-commit-config.yaml when updating -pyupgrade==3.15.1 # also change in .pre-commit-config.yaml when updating +pyupgrade==3.15.2 # also change in .pre-commit-config.yaml when updating pre-commit # Unit tests From 6a1ea0674469a5c487ee3b83da40e96f6dac792f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 11:04:10 +1200 Subject: [PATCH 003/313] Add enum option to typed_schema (#6546) * Add enum option to typed_schema * Assert keys all match --- esphome/config_validation.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 358608cd35..bc58979f33 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -1590,6 +1590,10 @@ def typed_schema(schemas, **kwargs): """Create a schema that has a key to distinguish between schemas""" key = kwargs.pop("key", CONF_TYPE) default_schema_option = kwargs.pop("default_type", None) + enum_mapping = kwargs.pop("enum", None) + if enum_mapping is not None: + assert isinstance(enum_mapping, dict) + assert set(enum_mapping.keys()) == set(schemas.keys()) key_validator = one_of(*schemas, **kwargs) def validator(value): @@ -1600,6 +1604,9 @@ def typed_schema(schemas, **kwargs): if schema_option is None: raise Invalid(f"{key} not specified!") key_v = key_validator(schema_option) + if enum_mapping is not None: + key_v = add_class_to_obj(key_v, core.EnumValue) + key_v.enum_value = enum_mapping[key_v] value = Schema(schemas[key_v])(value) value[key] = key_v return value From f2a12589f3619601ade5f698a9c2f75f1d980ba3 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 13:08:27 +1200 Subject: [PATCH 004/313] Bump version to 2024.4.0 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 66da96bc82..76320e6c71 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.4.0b3" +__version__ = "2024.4.0" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 0af26fdfd41671b571755ea906c744f7d1a3fc2c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 14:43:29 +1200 Subject: [PATCH 005/313] Move esphome-fork startup script to main repo. (#6523) Co-authored-by: Blair McBride --- .../etc/cont-init.d/30-esphome-fork.sh | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 docker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh diff --git a/docker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh b/docker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh new file mode 100755 index 0000000000..03dbb34c8f --- /dev/null +++ b/docker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh @@ -0,0 +1,47 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# This file installs the user ESPHome fork if specified. +# The fork must be up to date with the latest ESPHome dev branch +# and have no conflicts. +# This config option only exists in the ESPHome Dev add-on. +# ============================================================================== + +declare esphome_fork + +if bashio::config.has_value 'esphome_fork'; then + esphome_fork=$(bashio::config 'esphome_fork') + # format: [username][/repository]:ref + if [[ "$esphome_fork" =~ ^(([^/]+)(/([^:]+))?:)?([^:/]+)$ ]]; then + username="${BASH_REMATCH[2]:-esphome}" + repository="${BASH_REMATCH[4]:-esphome}" + ref="${BASH_REMATCH[5]}" + else + bashio::exit.nok "Invalid esphome_fork format: $esphome_fork" + fi + full_url="https://github.com/${username}/${repository}/archive/${ref}.tar.gz" + bashio::log.info "Checking forked ESPHome" + dev_version=$(python3 -c "from esphome.const import __version__; print(__version__)") + bashio::log.info "Downloading ESPHome from fork '${esphome_fork}' (${full_url})..." + curl -L -o /tmp/esphome.tar.gz "${full_url}" -qq || + bashio::exit.nok "Failed downloading ESPHome fork." + bashio::log.info "Installing ESPHome from fork '${esphome_fork}' (${full_url})..." + rm -rf /esphome || bashio::exit.nok "Failed to remove ESPHome." + mkdir /esphome + tar -zxf /tmp/esphome.tar.gz -C /esphome --strip-components=1 || + bashio::exit.nok "Failed installing ESPHome from fork." + pip install -U -e /esphome || bashio::exit.nok "Failed installing ESPHome from fork." + rm -f /tmp/esphome.tar.gz + fork_version=$(python3 -c "from esphome.const import __version__; print(__version__)") + + if [[ "$fork_version" != "$dev_version" ]]; then + bashio::log.error "############################" + bashio::log.error "Uninstalled fork as version does not match" + bashio::log.error "Update (or ask the author to update) the branch" + bashio::log.error "This is important as the dev addon and the dev ESPHome" + bashio::log.error "branch can have changes that are not compatible with old forks" + bashio::log.error "and get reported as bugs which we cannot solve easily." + bashio::log.error "############################" + bashio::exit.nok + fi + bashio::log.info "Installed ESPHome from fork '${esphome_fork}' (${full_url})..." +fi From ca5d38f413f3b7d723ed376a2f7a0da968c95669 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 15:32:19 +1200 Subject: [PATCH 006/313] Call workflow for addon with dev version (#6549) --- .github/workflows/release.yml | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7c0ec0270b..2e1177d13f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,14 +17,16 @@ jobs: runs-on: ubuntu-latest outputs: tag: ${{ steps.tag.outputs.tag }} + branch_build: ${{ steps.tag.outputs.branch_build }} steps: - uses: actions/checkout@v4.1.1 - name: Get tag id: tag # yamllint disable rule:line-length run: | - if [[ "$GITHUB_EVENT_NAME" = "release" ]]; then - TAG="${GITHUB_REF#refs/tags/}" + if [[ "${{ github.event_name }}" = "release" ]]; then + TAG="${{ github.event.release.tag_name}}" + BRANCH_BUILD="false" else TAG=$(cat esphome/const.py | sed -n -E "s/^__version__\s+=\s+\"(.+)\"$/\1/p") today="$(date --utc '+%Y%m%d')" @@ -32,9 +34,13 @@ jobs: BRANCH=${GITHUB_REF#refs/heads/} if [[ "$BRANCH" != "dev" ]]; then TAG="${TAG}-${BRANCH}" + BRANCH_BUILD="true" + else + BRANCH_BUILD="false" fi fi echo "tag=${TAG}" >> $GITHUB_OUTPUT + echo "branch_build=${BRANCH_BUILD}" >> $GITHUB_OUTPUT # yamllint enable rule:line-length deploy-pypi: @@ -197,22 +203,28 @@ jobs: $(printf '${{ steps.tags.outputs.image }}@sha256:%s ' *) deploy-ha-addon-repo: - if: github.repository == 'esphome/esphome' && github.event_name == 'release' + if: github.repository == 'esphome/esphome' && needs.init.outputs.branch_build == 'false' runs-on: ubuntu-latest - needs: [deploy-manifest] + needs: + - init + - deploy-manifest steps: - name: Trigger Workflow uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.DEPLOY_HA_ADDON_REPO_TOKEN }} script: | + let description = "ESPHome"; + if (context.eventName == "release") { + description = ${{ toJSON(github.event.release.body) }}; + } github.rest.actions.createWorkflowDispatch({ owner: "esphome", repo: "home-assistant-addon", workflow_id: "bump-version.yml", ref: "main", inputs: { - version: "${{ github.event.release.tag_name }}", - content: ${{ toJSON(github.event.release.body) }} + version: "${{ needs.init.outputs.tag }}", + content: description } }) From 83feae4eb2b043f63e710acdc2959143cb746fc8 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:55:13 +1200 Subject: [PATCH 007/313] Use trusted publishing token for pypi (#6545) --- .github/workflows/release.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2e1177d13f..72b06ab4fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,6 +47,9 @@ jobs: name: Build and publish to PyPi if: github.repository == 'esphome/esphome' && github.event_name == 'release' runs-on: ubuntu-latest + permissions: + contents: read + id-token: write steps: - uses: actions/checkout@v4.1.1 - name: Set up Python @@ -56,16 +59,11 @@ jobs: - name: Set up python environment env: ESPHOME_NO_VENV: 1 - run: | - script/setup - pip install twine + run: script/setup - name: Build run: python setup.py sdist bdist_wheel - - name: Upload - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: twine upload dist/* + - name: Publish + uses: pypa/gh-action-pypi-publish@v1.8.14 deploy-docker: name: Build ESPHome ${{ matrix.platform }} From 6104e7591eb02d1e530241998600c89c0a8a2869 Mon Sep 17 00:00:00 2001 From: luar123 <49960470+luar123@users.noreply.github.com> Date: Wed, 17 Apr 2024 06:57:26 +0200 Subject: [PATCH 008/313] Fix uart to work with new enum definition in esp-idf-v5.2.1 (#6487) --- esphome/components/logger/logger_esp32.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/esphome/components/logger/logger_esp32.cpp b/esphome/components/logger/logger_esp32.cpp index 740e086f92..b0f1051d34 100644 --- a/esphome/components/logger/logger_esp32.cpp +++ b/esphome/components/logger/logger_esp32.cpp @@ -120,30 +120,28 @@ void Logger::pre_setup() { switch (this->uart_) { case UART_SELECTION_UART0: this->uart_num_ = UART_NUM_0; + init_uart(this->uart_num_, baud_rate_, tx_buffer_size_); break; case UART_SELECTION_UART1: this->uart_num_ = UART_NUM_1; + init_uart(this->uart_num_, baud_rate_, tx_buffer_size_); break; #ifdef USE_ESP32_VARIANT_ESP32 case UART_SELECTION_UART2: this->uart_num_ = UART_NUM_2; + init_uart(this->uart_num_, baud_rate_, tx_buffer_size_); break; #endif #ifdef USE_LOGGER_USB_CDC case UART_SELECTION_USB_CDC: - this->uart_num_ = -1; break; #endif #ifdef USE_LOGGER_USB_SERIAL_JTAG case UART_SELECTION_USB_SERIAL_JTAG: - this->uart_num_ = -1; init_usb_serial_jtag_(); break; #endif } - if (this->uart_num_ >= 0) { - init_uart(this->uart_num_, baud_rate_, tx_buffer_size_); - } #endif // USE_ESP_IDF } From 717cea548f99b0953853378bdaec889d2c0812b4 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 17:42:40 +1200 Subject: [PATCH 009/313] Housecleaning: Use walrus operator in datetime (#6552) --- esphome/components/datetime/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/datetime/__init__.py b/esphome/components/datetime/__init__.py index b255a27303..a22c60aae9 100644 --- a/esphome/components/datetime/__init__.py +++ b/esphome/components/datetime/__init__.py @@ -106,8 +106,8 @@ def datetime_schema(class_: MockObjClass) -> cv.Schema: async def setup_datetime_core_(var, config): await setup_entity(var, config) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) for conf in config.get(CONF_ON_VALUE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) From 2fc2d5839fabdd47fdf2154d4d216a9a8adc5b2b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:22:52 +1200 Subject: [PATCH 010/313] Housecleaning: Use walrus operator in text (#6560) --- esphome/components/text/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/text/__init__.py b/esphome/components/text/__init__.py index 21c23ce73b..c0140ff082 100644 --- a/esphome/components/text/__init__.py +++ b/esphome/components/text/__init__.py @@ -73,8 +73,8 @@ async def setup_text_core_( trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(cg.std_string, "x")], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) From 3f015562d7109d3c245fcf38ab9bc150390dbce8 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:26:36 +1200 Subject: [PATCH 011/313] Housecleaning: Use walrus operator in light (#6556) --- esphome/components/light/__init__.py | 34 +++++++++++++--------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/esphome/components/light/__init__.py b/esphome/components/light/__init__.py index ba3a26ebe5..fdc4676758 100644 --- a/esphome/components/light/__init__.py +++ b/esphome/components/light/__init__.py @@ -137,18 +137,16 @@ async def setup_light_core_(light_var, output_var, config): cg.add(light_var.set_restore_mode(config[CONF_RESTORE_MODE])) - if CONF_DEFAULT_TRANSITION_LENGTH in config: - cg.add( - light_var.set_default_transition_length( - config[CONF_DEFAULT_TRANSITION_LENGTH] - ) - ) - if CONF_FLASH_TRANSITION_LENGTH in config: - cg.add( - light_var.set_flash_transition_length(config[CONF_FLASH_TRANSITION_LENGTH]) - ) - if CONF_GAMMA_CORRECT in config: - cg.add(light_var.set_gamma_correct(config[CONF_GAMMA_CORRECT])) + if ( + default_transition_length := config.get(CONF_DEFAULT_TRANSITION_LENGTH) + ) is not None: + cg.add(light_var.set_default_transition_length(default_transition_length)) + if ( + flash_transition_length := config.get(CONF_FLASH_TRANSITION_LENGTH) + ) is not None: + cg.add(light_var.set_flash_transition_length(flash_transition_length)) + if (gamma_correct := config.get(CONF_GAMMA_CORRECT)) is not None: + cg.add(light_var.set_gamma_correct(gamma_correct)) effects = await cg.build_registry_list( EFFECTS_REGISTRY, config.get(CONF_EFFECTS, []) ) @@ -164,15 +162,15 @@ async def setup_light_core_(light_var, output_var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], light_var) await auto.build_automation(trigger, [], conf) - if CONF_COLOR_CORRECT in config: - cg.add(output_var.set_correction(*config[CONF_COLOR_CORRECT])) + if (color_correct := config.get(CONF_COLOR_CORRECT)) is not None: + cg.add(output_var.set_correction(*color_correct)) - if CONF_POWER_SUPPLY in config: - var_ = await cg.get_variable(config[CONF_POWER_SUPPLY]) + if (power_supply_id := config.get(CONF_POWER_SUPPLY)) is not None: + var_ = await cg.get_variable(power_supply_id) cg.add(output_var.set_power_supply(var_)) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], light_var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, light_var) await mqtt.register_mqtt_component(mqtt_, config) From 8eff3435e74194a02aa5b16c2508e996c1c90416 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:26:49 +1200 Subject: [PATCH 012/313] Housecleaning: Use walrus operator in select (#6557) --- esphome/components/select/__init__.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/esphome/components/select/__init__.py b/esphome/components/select/__init__.py index 760f7600b7..7ad14f2440 100644 --- a/esphome/components/select/__init__.py +++ b/esphome/components/select/__init__.py @@ -95,8 +95,8 @@ async def setup_select_core_(var, config, *, options: list[str]): trigger, [(cg.std_string, "x"), (cg.size_t, "i")], conf ) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) @@ -223,14 +223,14 @@ async def select_set_index_to_code(config, action_id, template_arg, args): async def select_operation_to_code(config, action_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, paren) - if CONF_OPERATION in config: - op_ = await cg.templatable(config[CONF_OPERATION], args, SelectOperation) + if (operation := config.get(CONF_OPERATION)) is not None: + op_ = await cg.templatable(operation, args, SelectOperation) cg.add(var.set_operation(op_)) - if CONF_CYCLE in config: - cycle_ = await cg.templatable(config[CONF_CYCLE], args, bool) - cg.add(var.set_cycle(cycle_)) - if CONF_MODE in config: - cg.add(var.set_operation(SELECT_OPERATION_OPTIONS[config[CONF_MODE]])) - if CONF_CYCLE in config: - cg.add(var.set_cycle(config[CONF_CYCLE])) + if (cycle := config.get(CONF_CYCLE)) is not None: + template_ = await cg.templatable(cycle, args, bool) + cg.add(var.set_cycle(template_)) + if (mode := config.get(CONF_MODE)) is not None: + cg.add(var.set_operation(SELECT_OPERATION_OPTIONS[mode])) + if (cycle := config.get(CONF_CYCLE)) is not None: + cg.add(var.set_cycle(cycle)) return var From 21e3faad3876fdbc194b344da4bace6ff01d82d7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:27:04 +1200 Subject: [PATCH 013/313] Housecleaning: Use walrus operator in number (#6561) --- esphome/components/number/__init__.py | 39 ++++++++++++++------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/esphome/components/number/__init__.py b/esphome/components/number/__init__.py index ecc2ab2ee7..6d7ec97c90 100644 --- a/esphome/components/number/__init__.py +++ b/esphome/components/number/__init__.py @@ -239,13 +239,14 @@ async def setup_number_core_( cg.add(trigger.set_max(template_)) await automation.build_automation(trigger, [(float, "x")], conf) - if CONF_UNIT_OF_MEASUREMENT in config: - cg.add(var.traits.set_unit_of_measurement(config[CONF_UNIT_OF_MEASUREMENT])) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (unit_of_measurement := config.get(CONF_UNIT_OF_MEASUREMENT)) is not None: + cg.add(var.traits.set_unit_of_measurement(unit_of_measurement)) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.traits.set_device_class(device_class)) + + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_DEVICE_CLASS in config: - cg.add(var.traits.set_device_class(config[CONF_DEVICE_CLASS])) async def register_number( @@ -284,10 +285,10 @@ async def number_in_range_to_code(config, condition_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(condition_id, template_arg, paren) - if CONF_ABOVE in config: - cg.add(var.set_min(config[CONF_ABOVE])) - if CONF_BELOW in config: - cg.add(var.set_max(config[CONF_BELOW])) + if (above := config.get(CONF_ABOVE)) is not None: + cg.add(var.set_min(above)) + if (below := config.get(CONF_BELOW)) is not None: + cg.add(var.set_max(below)) return var @@ -391,14 +392,14 @@ async def number_set_to_code(config, action_id, template_arg, args): async def number_to_to_code(config, action_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, paren) - if CONF_OPERATION in config: - to_ = await cg.templatable(config[CONF_OPERATION], args, NumberOperation) + if (operation := config.get(CONF_OPERATION)) is not None: + to_ = await cg.templatable(operation, args, NumberOperation) cg.add(var.set_operation(to_)) - if CONF_CYCLE in config: - cycle_ = await cg.templatable(config[CONF_CYCLE], args, bool) - cg.add(var.set_cycle(cycle_)) - if CONF_MODE in config: - cg.add(var.set_operation(NUMBER_OPERATION_OPTIONS[config[CONF_MODE]])) - if CONF_CYCLE in config: - cg.add(var.set_cycle(config[CONF_CYCLE])) + if (cycle := config.get(CONF_CYCLE)) is not None: + template_ = await cg.templatable(cycle, args, bool) + cg.add(var.set_cycle(template_)) + if (mode := config.get(CONF_MODE)) is not None: + cg.add(var.set_operation(NUMBER_OPERATION_OPTIONS[mode])) + if (cycle := config.get(CONF_CYCLE)) is not None: + cg.add(var.set_cycle(cycle)) return var From fa1adf752816555e28fc4a055161430730d26c8a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:28:01 +1200 Subject: [PATCH 014/313] Housecleaning: Use walrus operator in cover (#6562) --- esphome/components/cover/__init__.py | 48 +++++++++++++--------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/esphome/components/cover/__init__.py b/esphome/components/cover/__init__.py index 90e5ee1f03..8e0371017d 100644 --- a/esphome/components/cover/__init__.py +++ b/esphome/components/cover/__init__.py @@ -122,8 +122,8 @@ COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).ex async def setup_cover_core_(var, config): await setup_entity(var, config) - if CONF_DEVICE_CLASS in config: - cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.set_device_class(device_class)) for conf in config.get(CONF_ON_OPEN, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) @@ -132,24 +132,20 @@ async def setup_cover_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_POSITION_STATE_TOPIC in config: - cg.add( - mqtt_.set_custom_position_state_topic(config[CONF_POSITION_STATE_TOPIC]) - ) - if CONF_POSITION_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_position_command_topic( - config[CONF_POSITION_COMMAND_TOPIC] - ) - ) - if CONF_TILT_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_tilt_state_topic(config[CONF_TILT_STATE_TOPIC])) - if CONF_TILT_COMMAND_TOPIC in config: - cg.add(mqtt_.set_custom_tilt_command_topic(config[CONF_TILT_COMMAND_TOPIC])) + if (position_state_topic := config.get(CONF_POSITION_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_position_state_topic(position_state_topic)) + if ( + position_command_topic := config.get(CONF_POSITION_COMMAND_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_position_command_topic(position_command_topic)) + if (tilt_state_topic := config.get(CONF_TILT_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_tilt_state_topic(tilt_state_topic)) + if (tilt_command_topic := config.get(CONF_TILT_COMMAND_TOPIC)) is not None: + cg.add(mqtt_.set_custom_tilt_command_topic(tilt_command_topic)) async def register_cover(var, config): @@ -205,17 +201,17 @@ COVER_CONTROL_ACTION_SCHEMA = cv.Schema( async def cover_control_to_code(config, action_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, paren) - if CONF_STOP in config: - template_ = await cg.templatable(config[CONF_STOP], args, bool) + if (stop := config.get(CONF_STOP)) is not None: + template_ = await cg.templatable(stop, args, bool) cg.add(var.set_stop(template_)) - if CONF_STATE in config: - template_ = await cg.templatable(config[CONF_STATE], args, float) + if (state := config.get(CONF_STATE)) is not None: + template_ = await cg.templatable(state, args, float) cg.add(var.set_position(template_)) - if CONF_POSITION in config: - template_ = await cg.templatable(config[CONF_POSITION], args, float) + if (position := config.get(CONF_POSITION)) is not None: + template_ = await cg.templatable(position, args, float) cg.add(var.set_position(template_)) - if CONF_TILT in config: - template_ = await cg.templatable(config[CONF_TILT], args, float) + if (tilt := config.get(CONF_TILT)) is not None: + template_ = await cg.templatable(tilt, args, float) cg.add(var.set_tilt(template_)) return var From 77ade12ee9e3a62b708fad712d90e9364a9cedfa Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 18:58:20 +1200 Subject: [PATCH 015/313] Housecleaning: Use walrus operator in climate (#6551) --- esphome/components/climate/__init__.py | 218 +++++++++++++------------ 1 file changed, 118 insertions(+), 100 deletions(-) diff --git a/esphome/components/climate/__init__.py b/esphome/components/climate/__init__.py index c9c3900a0c..7b0a27feae 100644 --- a/esphome/components/climate/__init__.py +++ b/esphome/components/climate/__init__.py @@ -244,122 +244,150 @@ async def setup_climate_core_(var, config): await setup_entity(var, config) visual = config[CONF_VISUAL] - if CONF_MIN_TEMPERATURE in visual: - cg.add(var.set_visual_min_temperature_override(visual[CONF_MIN_TEMPERATURE])) - if CONF_MAX_TEMPERATURE in visual: - cg.add(var.set_visual_max_temperature_override(visual[CONF_MAX_TEMPERATURE])) - if CONF_TEMPERATURE_STEP in visual: + if (min_temp := visual.get(CONF_MIN_TEMPERATURE)) is not None: + cg.add(var.set_visual_min_temperature_override(min_temp)) + if (max_temp := visual.get(CONF_MAX_TEMPERATURE)) is not None: + cg.add(var.set_visual_max_temperature_override(max_temp)) + if (temp_step := visual.get(CONF_TEMPERATURE_STEP)) is not None: cg.add( var.set_visual_temperature_step_override( - visual[CONF_TEMPERATURE_STEP][CONF_TARGET_TEMPERATURE], - visual[CONF_TEMPERATURE_STEP][CONF_CURRENT_TEMPERATURE], + temp_step[CONF_TARGET_TEMPERATURE], + temp_step[CONF_CURRENT_TEMPERATURE], ) ) - if CONF_MIN_HUMIDITY in visual: - cg.add(var.set_visual_min_humidity_override(visual[CONF_MIN_HUMIDITY])) - if CONF_MAX_HUMIDITY in visual: - cg.add(var.set_visual_max_humidity_override(visual[CONF_MAX_HUMIDITY])) + if (min_humidity := visual.get(CONF_MIN_HUMIDITY)) is not None: + cg.add(var.set_visual_min_humidity_override(min_humidity)) + if (max_humidity := visual.get(CONF_MAX_HUMIDITY)) is not None: + cg.add(var.set_visual_max_humidity_override(max_humidity)) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_ACTION_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_action_state_topic(config[CONF_ACTION_STATE_TOPIC])) - if CONF_AWAY_COMMAND_TOPIC in config: - cg.add(mqtt_.set_custom_away_command_topic(config[CONF_AWAY_COMMAND_TOPIC])) - if CONF_AWAY_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_away_state_topic(config[CONF_AWAY_STATE_TOPIC])) - if CONF_CURRENT_TEMPERATURE_STATE_TOPIC in config: + if (action_state_topic := config.get(CONF_ACTION_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_action_state_topic(action_state_topic)) + if (away_command_topic := config.get(CONF_AWAY_COMMAND_TOPIC)) is not None: + cg.add(mqtt_.set_custom_away_command_topic(away_command_topic)) + if (away_state_topic := config.get(CONF_AWAY_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_away_state_topic(away_state_topic)) + if ( + current_temperature_state_topic := config.get( + CONF_CURRENT_TEMPERATURE_STATE_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_current_temperature_state_topic( - config[CONF_CURRENT_TEMPERATURE_STATE_TOPIC] + current_temperature_state_topic ) ) - if CONF_CURRENT_HUMIDITY_STATE_TOPIC in config: + if ( + current_humidity_state_topic := config.get( + CONF_CURRENT_HUMIDITY_STATE_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_current_humidity_state_topic( - config[CONF_CURRENT_HUMIDITY_STATE_TOPIC] + current_humidity_state_topic ) ) - if CONF_FAN_MODE_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_fan_mode_command_topic( - config[CONF_FAN_MODE_COMMAND_TOPIC] - ) + if ( + fan_mode_command_topic := config.get(CONF_FAN_MODE_COMMAND_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_fan_mode_command_topic(fan_mode_command_topic)) + if (fan_mode_state_topic := config.get(CONF_FAN_MODE_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_fan_mode_state_topic(fan_mode_state_topic)) + if (mode_command_topic := config.get(CONF_MODE_COMMAND_TOPIC)) is not None: + cg.add(mqtt_.set_custom_mode_command_topic(mode_command_topic)) + if (mode_state_topic := config.get(CONF_MODE_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_mode_state_topic(mode_state_topic)) + if (preset_command_topic := config.get(CONF_PRESET_COMMAND_TOPIC)) is not None: + cg.add(mqtt_.set_custom_preset_command_topic(preset_command_topic)) + if (preset_state_topic := config.get(CONF_PRESET_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_preset_state_topic(preset_state_topic)) + if ( + swing_mode_command_topic := config.get(CONF_SWING_MODE_COMMAND_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_swing_mode_command_topic(swing_mode_command_topic)) + if ( + swing_mode_state_topic := config.get(CONF_SWING_MODE_STATE_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_swing_mode_state_topic(swing_mode_state_topic)) + if ( + target_temperature_command_topic := config.get( + CONF_TARGET_TEMPERATURE_COMMAND_TOPIC ) - if CONF_FAN_MODE_STATE_TOPIC in config: - cg.add( - mqtt_.set_custom_fan_mode_state_topic(config[CONF_FAN_MODE_STATE_TOPIC]) - ) - if CONF_MODE_COMMAND_TOPIC in config: - cg.add(mqtt_.set_custom_mode_command_topic(config[CONF_MODE_COMMAND_TOPIC])) - if CONF_MODE_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_mode_state_topic(config[CONF_MODE_STATE_TOPIC])) - if CONF_PRESET_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_preset_command_topic(config[CONF_PRESET_COMMAND_TOPIC]) - ) - if CONF_PRESET_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_preset_state_topic(config[CONF_PRESET_STATE_TOPIC])) - if CONF_SWING_MODE_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_swing_mode_command_topic( - config[CONF_SWING_MODE_COMMAND_TOPIC] - ) - ) - if CONF_SWING_MODE_STATE_TOPIC in config: - cg.add( - mqtt_.set_custom_swing_mode_state_topic( - config[CONF_SWING_MODE_STATE_TOPIC] - ) - ) - if CONF_TARGET_TEMPERATURE_COMMAND_TOPIC in config: + ) is not None: cg.add( mqtt_.set_custom_target_temperature_command_topic( - config[CONF_TARGET_TEMPERATURE_COMMAND_TOPIC] + target_temperature_command_topic ) ) - if CONF_TARGET_TEMPERATURE_STATE_TOPIC in config: + if ( + target_temperature_state_topic := config.get( + CONF_TARGET_TEMPERATURE_STATE_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_temperature_state_topic( - config[CONF_TARGET_TEMPERATURE_STATE_TOPIC] + target_temperature_state_topic ) ) - if CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC in config: + if ( + target_temperature_high_command_topic := config.get( + CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_temperature_high_command_topic( - config[CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC] + target_temperature_high_command_topic ) ) - if CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC in config: + if ( + target_temperature_high_state_topic := config.get( + CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_temperature_high_state_topic( - config[CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC] + target_temperature_high_state_topic ) ) - if CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC in config: + if ( + target_temperature_low_command_topic := config.get( + CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_temperature_low_command_topic( - config[CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC] + target_temperature_low_command_topic ) ) - if CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC in config: + if ( + target_temperature_low_state_topic := config.get( + CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_temperature_state_topic( - config[CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC] + target_temperature_low_state_topic ) ) - if CONF_TARGET_HUMIDITY_COMMAND_TOPIC in config: + if ( + target_humidity_command_topic := config.get( + CONF_TARGET_HUMIDITY_COMMAND_TOPIC + ) + ) is not None: cg.add( mqtt_.set_custom_target_humidity_command_topic( - config[CONF_TARGET_HUMIDITY_COMMAND_TOPIC] + target_humidity_command_topic ) ) - if CONF_TARGET_HUMIDITY_STATE_TOPIC in config: + if ( + target_humidity_state_topic := config.get(CONF_TARGET_HUMIDITY_STATE_TOPIC) + ) is not None: cg.add( mqtt_.set_custom_target_humidity_state_topic( - config[CONF_TARGET_HUMIDITY_STATE_TOPIC] + target_humidity_state_topic ) ) @@ -411,45 +439,35 @@ CLIMATE_CONTROL_ACTION_SCHEMA = cv.Schema( async def climate_control_to_code(config, action_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, paren) - if CONF_MODE in config: - template_ = await cg.templatable(config[CONF_MODE], args, ClimateMode) + if (mode := config.get(CONF_MODE)) is not None: + template_ = await cg.templatable(mode, args, ClimateMode) cg.add(var.set_mode(template_)) - if CONF_TARGET_TEMPERATURE in config: - template_ = await cg.templatable(config[CONF_TARGET_TEMPERATURE], args, float) + if (target_temp := config.get(CONF_TARGET_TEMPERATURE)) is not None: + template_ = await cg.templatable(target_temp, args, float) cg.add(var.set_target_temperature(template_)) - if CONF_TARGET_TEMPERATURE_LOW in config: - template_ = await cg.templatable( - config[CONF_TARGET_TEMPERATURE_LOW], args, float - ) + if (target_temp_low := config.get(CONF_TARGET_TEMPERATURE_LOW)) is not None: + template_ = await cg.templatable(target_temp_low, args, float) cg.add(var.set_target_temperature_low(template_)) - if CONF_TARGET_TEMPERATURE_HIGH in config: - template_ = await cg.templatable( - config[CONF_TARGET_TEMPERATURE_HIGH], args, float - ) + if (target_temp_high := config.get(CONF_TARGET_TEMPERATURE_HIGH)) is not None: + template_ = await cg.templatable(target_temp_high, args, float) cg.add(var.set_target_temperature_high(template_)) - if CONF_TARGET_HUMIDITY in config: - template_ = await cg.templatable(config[CONF_TARGET_HUMIDITY], args, float) + if (target_humidity := config.get(CONF_TARGET_HUMIDITY)) is not None: + template_ = await cg.templatable(target_humidity, args, float) cg.add(var.set_target_humidity(template_)) - if CONF_FAN_MODE in config: - template_ = await cg.templatable(config[CONF_FAN_MODE], args, ClimateFanMode) + if (fan_mode := config.get(CONF_FAN_MODE)) is not None: + template_ = await cg.templatable(fan_mode, args, ClimateFanMode) cg.add(var.set_fan_mode(template_)) - if CONF_CUSTOM_FAN_MODE in config: - template_ = await cg.templatable( - config[CONF_CUSTOM_FAN_MODE], args, cg.std_string - ) + if (custom_fan_mode := config.get(CONF_CUSTOM_FAN_MODE)) is not None: + template_ = await cg.templatable(custom_fan_mode, args, cg.std_string) cg.add(var.set_custom_fan_mode(template_)) - if CONF_PRESET in config: - template_ = await cg.templatable(config[CONF_PRESET], args, ClimatePreset) + if (preset := config.get(CONF_PRESET)) is not None: + template_ = await cg.templatable(preset, args, ClimatePreset) cg.add(var.set_preset(template_)) - if CONF_CUSTOM_PRESET in config: - template_ = await cg.templatable( - config[CONF_CUSTOM_PRESET], args, cg.std_string - ) + if (custom_preset := config.get(CONF_CUSTOM_PRESET)) is not None: + template_ = await cg.templatable(custom_preset, args, cg.std_string) cg.add(var.set_custom_preset(template_)) - if CONF_SWING_MODE in config: - template_ = await cg.templatable( - config[CONF_SWING_MODE], args, ClimateSwingMode - ) + if (swing_mode := config.get(CONF_SWING_MODE)) is not None: + template_ = await cg.templatable(swing_mode, args, ClimateSwingMode) cg.add(var.set_swing_mode(template_)) return var From 214c237c8dc978970fcff7cf958043c3abe36ef2 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:03:57 +1200 Subject: [PATCH 016/313] Housecleaning: Use walrus operator in fan (#6555) Co-authored-by: Keith Burzinski --- esphome/components/fan/__init__.py | 62 ++++++++++++++---------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/esphome/components/fan/__init__.py b/esphome/components/fan/__init__.py index 05e276d987..14cf6cc9c9 100644 --- a/esphome/components/fan/__init__.py +++ b/esphome/components/fan/__init__.py @@ -180,40 +180,34 @@ async def setup_fan_core_(var, config): cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE])) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_OSCILLATION_STATE_TOPIC in config: + if ( + oscillation_state_topic := config.get(CONF_OSCILLATION_STATE_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_oscillation_state_topic(oscillation_state_topic)) + if ( + oscillation_command_topic := config.get(CONF_OSCILLATION_COMMAND_TOPIC) + ) is not None: cg.add( - mqtt_.set_custom_oscillation_state_topic( - config[CONF_OSCILLATION_STATE_TOPIC] - ) + mqtt_.set_custom_oscillation_command_topic(oscillation_command_topic) ) - if CONF_OSCILLATION_COMMAND_TOPIC in config: + if ( + speed_level_state_topic := config.get(CONF_SPEED_LEVEL_STATE_TOPIC) + ) is not None: + cg.add(mqtt_.set_custom_speed_level_state_topic(speed_level_state_topic)) + if ( + speed_level_command_topic := config.get(CONF_SPEED_LEVEL_COMMAND_TOPIC) + ) is not None: cg.add( - mqtt_.set_custom_oscillation_command_topic( - config[CONF_OSCILLATION_COMMAND_TOPIC] - ) - ) - if CONF_SPEED_LEVEL_STATE_TOPIC in config: - cg.add( - mqtt_.set_custom_speed_level_state_topic( - config[CONF_SPEED_LEVEL_STATE_TOPIC] - ) - ) - if CONF_SPEED_LEVEL_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_speed_level_command_topic( - config[CONF_SPEED_LEVEL_COMMAND_TOPIC] - ) - ) - if CONF_SPEED_STATE_TOPIC in config: - cg.add(mqtt_.set_custom_speed_state_topic(config[CONF_SPEED_STATE_TOPIC])) - if CONF_SPEED_COMMAND_TOPIC in config: - cg.add( - mqtt_.set_custom_speed_command_topic(config[CONF_SPEED_COMMAND_TOPIC]) + mqtt_.set_custom_speed_level_command_topic(speed_level_command_topic) ) + if (speed_state_topic := config.get(CONF_SPEED_STATE_TOPIC)) is not None: + cg.add(mqtt_.set_custom_speed_state_topic(speed_state_topic)) + if (speed_command_topic := config.get(CONF_SPEED_COMMAND_TOPIC)) is not None: + cg.add(mqtt_.set_custom_speed_command_topic(speed_command_topic)) for conf in config.get(CONF_ON_STATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) @@ -288,14 +282,14 @@ async def fan_turn_off_to_code(config, action_id, template_arg, args): async def fan_turn_on_to_code(config, action_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, paren) - if CONF_OSCILLATING in config: - template_ = await cg.templatable(config[CONF_OSCILLATING], args, bool) + if (oscillating := config.get(CONF_OSCILLATING)) is not None: + template_ = await cg.templatable(oscillating, args, bool) cg.add(var.set_oscillating(template_)) - if CONF_SPEED in config: - template_ = await cg.templatable(config[CONF_SPEED], args, int) + if (speed := config.get(CONF_SPEED)) is not None: + template_ = await cg.templatable(speed, args, int) cg.add(var.set_speed(template_)) - if CONF_DIRECTION in config: - template_ = await cg.templatable(config[CONF_DIRECTION], args, FanDirection) + if (direction := config.get(CONF_DIRECTION)) is not None: + template_ = await cg.templatable(direction, args, FanDirection) cg.add(var.set_direction(template_)) return var From 7733781e091199d3638e1fa78a181eefff4b2b19 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:51:33 +1200 Subject: [PATCH 017/313] Housecleaning: Use walrus operator in text_sensor (#6559) --- esphome/components/text_sensor/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/components/text_sensor/__init__.py b/esphome/components/text_sensor/__init__.py index cf7d23aec7..6c28b57b3d 100644 --- a/esphome/components/text_sensor/__init__.py +++ b/esphome/components/text_sensor/__init__.py @@ -186,8 +186,8 @@ async def build_filters(config): async def setup_text_sensor_core_(var, config): await setup_entity(var, config) - if CONF_DEVICE_CLASS in config: - cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.set_device_class(device_class)) if config.get(CONF_FILTERS): # must exist and not be empty filters = await build_filters(config[CONF_FILTERS]) @@ -201,8 +201,8 @@ async def setup_text_sensor_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(cg.std_string, "x")], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) From 987ffcbaba01be4642c36b68fc14e02bae553103 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 17 Apr 2024 16:09:42 -0500 Subject: [PATCH 018/313] Bump zeroconf to 0.132.2 (#6548) --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7424267d08..68041675f6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ esptool==4.7.0 click==8.1.7 esphome-dashboard==20240412.0 aioesphomeapi==24.0.0 -zeroconf==0.131.0 +zeroconf==0.132.2 python-magic==0.4.27 ruamel.yaml==0.18.6 # dashboard_import From 51ed6d62d928ec66496bb972ec3c1be36c6f8bb3 Mon Sep 17 00:00:00 2001 From: zry98 Date: Wed, 17 Apr 2024 23:31:20 +0200 Subject: [PATCH 019/313] [Tuya Climate] Fix compilation error caused by codegen (#6568) --- esphome/components/tuya/climate/__init__.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/esphome/components/tuya/climate/__init__.py b/esphome/components/tuya/climate/__init__.py index b3d401e5a4..56eb377ed7 100644 --- a/esphome/components/tuya/climate/__init__.py +++ b/esphome/components/tuya/climate/__init__.py @@ -208,7 +208,7 @@ async def to_code(config): cg.add(var.set_switch_id(switch_datapoint)) if active_state_config := config.get(CONF_ACTIVE_STATE): - cg.add(var.set_active_state_id(CONF_DATAPOINT)) + cg.add(var.set_active_state_id(active_state_config.get(CONF_DATAPOINT))) if (heating_value := active_state_config.get(CONF_HEATING_VALUE)) is not None: cg.add(var.set_active_state_heating_value(heating_value)) if (cooling_value := active_state_config.get(CONF_COOLING_VALUE)) is not None: @@ -219,14 +219,10 @@ async def to_code(config): cg.add(var.set_active_state_fanonly_value(fanonly_value)) else: if heating_state_pin_config := config.get(CONF_HEATING_STATE_PIN): - heating_state_pin = await cg.gpio_pin_expression( - config(heating_state_pin_config) - ) + heating_state_pin = await cg.gpio_pin_expression(heating_state_pin_config) cg.add(var.set_heating_state_pin(heating_state_pin)) if cooling_state_pin_config := config.get(CONF_COOLING_STATE_PIN): - cooling_state_pin = await cg.gpio_pin_expression( - config(cooling_state_pin_config) - ) + cooling_state_pin = await cg.gpio_pin_expression(cooling_state_pin_config) cg.add(var.set_cooling_state_pin(cooling_state_pin)) if target_temperature_datapoint := config.get(CONF_TARGET_TEMPERATURE_DATAPOINT): @@ -254,11 +250,11 @@ async def to_code(config): if preset_config := config.get(CONF_PRESET, {}): if eco_config := preset_config.get(CONF_ECO, {}): - cg.add(var.set_eco_id(CONF_DATAPOINT)) + cg.add(var.set_eco_id(eco_config.get(CONF_DATAPOINT))) if eco_temperature := eco_config.get(CONF_TEMPERATURE): cg.add(var.set_eco_temperature(eco_temperature)) - if CONF_SLEEP in preset_config: - cg.add(var.set_sleep_id(CONF_DATAPOINT)) + if sleep_config := preset_config.get(CONF_SLEEP, {}): + cg.add(var.set_sleep_id(sleep_config.get(CONF_DATAPOINT))) if swing_mode_config := config.get(CONF_SWING_MODE): if swing_vertical_datapoint := swing_mode_config.get(CONF_VERTICAL_DATAPOINT): @@ -268,7 +264,7 @@ async def to_code(config): ): cg.add(var.set_swing_horizontal_id(swing_horizontal_datapoint)) if fan_mode_config := config.get(CONF_FAN_MODE): - cg.add(var.set_fan_speed_id(CONF_DATAPOINT)) + cg.add(var.set_fan_speed_id(fan_mode_config.get(CONF_DATAPOINT))) if (fan_auto_value := fan_mode_config.get(CONF_AUTO_VALUE)) is not None: cg.add(var.set_fan_speed_auto_value(fan_auto_value)) if (fan_low_value := fan_mode_config.get(CONF_LOW_VALUE)) is not None: From c8cdb30459146c9e1e854098328d7cdf817df448 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:43:00 +1200 Subject: [PATCH 020/313] Housecleaning: Use walrus operator in switch (#6558) --- esphome/components/switch/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/esphome/components/switch/__init__.py b/esphome/components/switch/__init__.py index 21cbe3dfe4..e997ec7ca5 100644 --- a/esphome/components/switch/__init__.py +++ b/esphome/components/switch/__init__.py @@ -138,8 +138,8 @@ SWITCH_SCHEMA = switch_schema() # for compatibility async def setup_switch_core_(var, config): await setup_entity(var, config) - if CONF_INVERTED in config: - cg.add(var.set_inverted(config[CONF_INVERTED])) + if (inverted := config.get(CONF_INVERTED)) is not None: + cg.add(var.set_inverted(inverted)) for conf in config.get(CONF_ON_TURN_ON, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) @@ -147,12 +147,12 @@ async def setup_switch_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_DEVICE_CLASS in config: - cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.set_device_class(device_class)) cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE])) From 72c1c3f0910ff12448857574f2386ff72de3682b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:43:11 +1200 Subject: [PATCH 021/313] Housecleaning: Use walrus operator in lock (#6554) Co-authored-by: Keith Burzinski --- esphome/components/lock/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/lock/__init__.py b/esphome/components/lock/__init__.py index f659c48a6e..457ffa278a 100644 --- a/esphome/components/lock/__init__.py +++ b/esphome/components/lock/__init__.py @@ -57,8 +57,8 @@ async def setup_lock_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if mqtt_id := config.get(CONF_MQTT_ID): + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) From 4559e963b340e2dae8a0edd3bc9893b0d4e140d0 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:43:18 +1200 Subject: [PATCH 022/313] Housecleaning: Use walrus operator in sensor (#6553) Co-authored-by: Keith Burzinski --- esphome/components/sensor/__init__.py | 42 +++++++++++++-------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py index 46295fe958..ece232e1a6 100644 --- a/esphome/components/sensor/__init__.py +++ b/esphome/components/sensor/__init__.py @@ -732,14 +732,14 @@ async def build_filters(config): async def setup_sensor_core_(var, config): await setup_entity(var, config) - if CONF_DEVICE_CLASS in config: - cg.add(var.set_device_class(config[CONF_DEVICE_CLASS])) - if CONF_STATE_CLASS in config: - cg.add(var.set_state_class(config[CONF_STATE_CLASS])) - if CONF_UNIT_OF_MEASUREMENT in config: - cg.add(var.set_unit_of_measurement(config[CONF_UNIT_OF_MEASUREMENT])) - if CONF_ACCURACY_DECIMALS in config: - cg.add(var.set_accuracy_decimals(config[CONF_ACCURACY_DECIMALS])) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.set_device_class(device_class)) + if (state_class := config.get(CONF_STATE_CLASS)) is not None: + cg.add(var.set_state_class(state_class)) + if (unit_of_measurement := config.get(CONF_UNIT_OF_MEASUREMENT)) is not None: + cg.add(var.set_unit_of_measurement(unit_of_measurement)) + if (accuracy_decimals := config.get(CONF_ACCURACY_DECIMALS)) is not None: + cg.add(var.set_accuracy_decimals(accuracy_decimals)) cg.add(var.set_force_update(config[CONF_FORCE_UPDATE])) if config.get(CONF_FILTERS): # must exist and not be empty filters = await build_filters(config[CONF_FILTERS]) @@ -754,23 +754,23 @@ async def setup_sensor_core_(var, config): for conf in config.get(CONF_ON_VALUE_RANGE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await cg.register_component(trigger, conf) - if CONF_ABOVE in conf: - template_ = await cg.templatable(conf[CONF_ABOVE], [(float, "x")], float) + if (above := conf.get(CONF_ABOVE)) is not None: + template_ = await cg.templatable(above, [(float, "x")], float) cg.add(trigger.set_min(template_)) - if CONF_BELOW in conf: - template_ = await cg.templatable(conf[CONF_BELOW], [(float, "x")], float) + if (below := conf.get(CONF_BELOW)) is not None: + template_ = await cg.templatable(below, [(float, "x")], float) cg.add(trigger.set_max(template_)) await automation.build_automation(trigger, [(float, "x")], conf) - if CONF_MQTT_ID in config: - mqtt_ = cg.new_Pvariable(config[CONF_MQTT_ID], var) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: + mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) - if CONF_EXPIRE_AFTER in config: - if config[CONF_EXPIRE_AFTER] is None: + if (expire_after := config.get(CONF_EXPIRE_AFTER, _UNDEF)) is not _UNDEF: + if expire_after is None: cg.add(mqtt_.disable_expire_after()) else: - cg.add(mqtt_.set_expire_after(config[CONF_EXPIRE_AFTER])) + cg.add(mqtt_.set_expire_after(expire_after)) async def register_sensor(var, config): @@ -803,10 +803,10 @@ async def sensor_in_range_to_code(config, condition_id, template_arg, args): paren = await cg.get_variable(config[CONF_ID]) var = cg.new_Pvariable(condition_id, template_arg, paren) - if CONF_ABOVE in config: - cg.add(var.set_min(config[CONF_ABOVE])) - if CONF_BELOW in config: - cg.add(var.set_max(config[CONF_BELOW])) + if (above := config.get(CONF_ABOVE)) is not None: + cg.add(var.set_min(above)) + if (below := config.get(CONF_BELOW)) is not None: + cg.add(var.set_max(below)) return var From 09def255dd70c8f406e046b87fe1cd77953fd9ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:02:37 +1200 Subject: [PATCH 023/313] Bump pytest-mock from 3.12.0 to 3.14.0 (#6572) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index 767018d07a..78820765f4 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -7,7 +7,7 @@ pre-commit # Unit tests pytest==8.1.1 pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-mock==3.14.0 pytest-asyncio==0.23.6 asyncmock==0.4.2 hypothesis==6.92.1 From 6075067e843788eb7fae90333ae8ff7f59b25a8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Apr 2024 11:02:54 +1200 Subject: [PATCH 024/313] Bump peter-evans/create-pull-request from 6.0.3 to 6.0.4 (#6569) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/sync-device-classes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-device-classes.yml b/.github/workflows/sync-device-classes.yml index 62b9c7df9b..c9614618d5 100644 --- a/.github/workflows/sync-device-classes.yml +++ b/.github/workflows/sync-device-classes.yml @@ -36,7 +36,7 @@ jobs: python ./script/sync-device_class.py - name: Commit changes - uses: peter-evans/create-pull-request@v6.0.3 + uses: peter-evans/create-pull-request@v6.0.4 with: commit-message: "Synchronise Device Classes from Home Assistant" committer: esphomebot From 8c323e2e4c9941f3e300ba4aa98887a3a09bfda7 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 18 Apr 2024 01:07:05 +0200 Subject: [PATCH 025/313] Nextion - Review set_protocol_reparse_mode() (#6567) --- esphome/components/nextion/nextion.h | 22 ++++++++++---- .../components/nextion/nextion_commands.cpp | 29 ++++++++++--------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index f9f01de72c..d84f1df3de 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -878,12 +878,24 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ void sleep(bool sleep); /** - * Sets Nextion Protocol Reparse mode between active or passive - * @param True or false. - * active_mode=true to enter active protocol reparse mode - * active_mode=false to enter passive protocol reparse mode. + * @brief Sets the Nextion display's protocol reparse mode. + * + * This function toggles the Nextion display's protocol reparse mode between active and passive. + * In active mode, the display actively parses incoming data. + * In passive mode, it does not parse data unless specifically instructed to do so. + * This is useful for managing how the Nextion display interprets incoming commands, + * especially during initialization or in scenarios where precise control over command processing is needed. + * + * @param active_mode A boolean value indicating the desired reparse mode. + * - true to set the display to active protocol reparse mode, where it actively parses incoming commands. + * - false to set the display to passive protocol reparse mode, where command parsing is done only on explicit + * instruction. + * + * @return bool Returns true if all commands were sent successfully to the Nextion display, indicating that the mode + * was set as expected. Returns false if any of the commands failed to send, indicating that the desired reparse mode + * may not be correctly set. */ - void set_protocol_reparse_mode(bool active_mode); + bool set_protocol_reparse_mode(bool active_mode); // ========== INTERNAL METHODS ========== // (In most use cases you won't need these) diff --git a/esphome/components/nextion/nextion_commands.cpp b/esphome/components/nextion/nextion_commands.cpp index e378111376..a2325861a3 100644 --- a/esphome/components/nextion/nextion_commands.cpp +++ b/esphome/components/nextion/nextion_commands.cpp @@ -36,22 +36,23 @@ void Nextion::sleep(bool sleep) { // End sleep safe commands // Protocol reparse mode -void Nextion::set_protocol_reparse_mode(bool active_mode) { - const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF}; +bool Nextion::set_protocol_reparse_mode(bool active_mode) { + ESP_LOGV(TAG, "Set Nextion protocol reparse mode: %s", YESNO(active_mode)); + this->ignore_is_setup_ = true; // if not in reparse mode setup will fail, so it should be ignored + bool all_commands_sent = true; if (active_mode) { // Sets active protocol reparse mode - this->write_str( - "recmod=1"); // send_command_ cannot be used as Nextion might not be setup if incorrect reparse mode - this->write_array(to_send, sizeof(to_send)); - } else { // Sets passive protocol reparse mode - this->write_str("DRAKJHSUYDGBNCJHGJKSHBDN"); // To exit active reparse mode this sequence must be sent - this->write_array(to_send, sizeof(to_send)); - this->write_str("recmod=0"); // Sending recmode=0 twice is recommended - this->write_array(to_send, sizeof(to_send)); - this->write_str("recmod=0"); - this->write_array(to_send, sizeof(to_send)); + all_commands_sent &= this->send_command_("recmod=1"); + } else { // Sets passive protocol reparse mode + all_commands_sent &= + this->send_command_("DRAKJHSUYDGBNCJHGJKSHBDN"); // To exit active reparse mode this sequence must be sent + all_commands_sent &= this->send_command_("recmod=0"); // Sending recmode=0 twice is recommended + all_commands_sent &= this->send_command_("recmod=0"); } - this->write_str("connect"); - this->write_array(to_send, sizeof(to_send)); + if (!this->nextion_reports_is_setup_) { // No need to connect if is already setup + all_commands_sent &= this->send_command_("connect"); + } + this->ignore_is_setup_ = false; + return all_commands_sent; } void Nextion::set_exit_reparse_on_start(bool exit_reparse) { this->exit_reparse_on_start_ = exit_reparse; } From abc09a15c38b4c77a1316ccad32b97a4638b03d8 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 17 Apr 2024 18:47:34 -0500 Subject: [PATCH 026/313] Allow component final_validate (#6475) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/config.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/esphome/config.py b/esphome/config.py index c5764dd4f2..1f6867eb59 100644 --- a/esphome/config.py +++ b/esphome/config.py @@ -333,10 +333,11 @@ class LoadValidationStep(ConfigValidationStep): if load not in result: result.add_validation_step(AutoLoadValidationStep(load)) + result.add_validation_step( + MetadataValidationStep([self.domain], self.domain, self.conf, component) + ) + if not component.is_platform_component: - result.add_validation_step( - MetadataValidationStep([self.domain], self.domain, self.conf, component) - ) return # This is a platform component, proceed to reading platform entries @@ -520,8 +521,6 @@ class SchemaValidationStep(ConfigValidationStep): self.comp = comp def run(self, result: Config) -> None: - if self.comp.config_schema is None: - return token = path_context.set(self.path) with result.catch_error(self.path): if self.comp.is_platform: @@ -536,7 +535,7 @@ class SchemaValidationStep(ConfigValidationStep): validated["platform"] = platform_val validated.move_to_end("platform", last=False) result.set_by_path(self.path, validated) - else: + elif self.comp.config_schema is not None: schema = cv.Schema(self.comp.config_schema) validated = schema(self.conf) result.set_by_path(self.path, validated) From 5a093acbf509f958fb79af5d4d705f6e49befbd4 Mon Sep 17 00:00:00 2001 From: Cossid <83468485+Cossid@users.noreply.github.com> Date: Wed, 17 Apr 2024 19:03:59 -0500 Subject: [PATCH 027/313] SM2135 - Use standard channel ordering. (#6573) --- esphome/components/sm2135/sm2135.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/esphome/components/sm2135/sm2135.cpp b/esphome/components/sm2135/sm2135.cpp index 9a576859ac..ee5948bb3a 100644 --- a/esphome/components/sm2135/sm2135.cpp +++ b/esphome/components/sm2135/sm2135.cpp @@ -106,23 +106,23 @@ void SM2135::loop() { delay(1); this->sm2135_start_(); this->write_byte_(SM2135_ADDR_C); - this->write_byte_(this->pwm_amounts_[4]); // Warm - this->write_byte_(this->pwm_amounts_[3]); // Cold + this->write_byte_(this->pwm_amounts_[3]); + this->write_byte_(this->pwm_amounts_[4]); } else { // Color this->write_byte_(SM2135_RGB); - this->write_byte_(this->pwm_amounts_[1]); // Green - this->write_byte_(this->pwm_amounts_[0]); // Red - this->write_byte_(this->pwm_amounts_[2]); // Blue + this->write_byte_(this->pwm_amounts_[0]); + this->write_byte_(this->pwm_amounts_[1]); + this->write_byte_(this->pwm_amounts_[2]); } } else { this->write_byte_(SM2135_RGB); - this->write_byte_(this->pwm_amounts_[1]); // Green - this->write_byte_(this->pwm_amounts_[0]); // Red - this->write_byte_(this->pwm_amounts_[2]); // Blue - this->write_byte_(this->pwm_amounts_[4]); // Warm - this->write_byte_(this->pwm_amounts_[3]); // Cold + this->write_byte_(this->pwm_amounts_[0]); + this->write_byte_(this->pwm_amounts_[1]); + this->write_byte_(this->pwm_amounts_[2]); + this->write_byte_(this->pwm_amounts_[3]); + this->write_byte_(this->pwm_amounts_[4]); } this->sm2135_stop_(); From 39deb8910868d72ab043e579f861eef0e8227508 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 18 Apr 2024 02:05:37 +0200 Subject: [PATCH 028/313] Nextion - Do not refresh sensors while updating (#6566) --- .../binary_sensor/nextion_binarysensor.cpp | 4 ++-- esphome/components/nextion/nextion.cpp | 2 ++ esphome/components/nextion/nextion.h | 20 +++++++++++++++++++ esphome/components/nextion/nextion_base.h | 2 ++ .../nextion/sensor/nextion_sensor.cpp | 4 ++-- .../nextion/switch/nextion_switch.cpp | 4 ++-- .../text_sensor/nextion_textsensor.cpp | 4 ++-- 7 files changed, 32 insertions(+), 8 deletions(-) diff --git a/esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp b/esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp index bf6e74cb38..499cd901c0 100644 --- a/esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +++ b/esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp @@ -27,7 +27,7 @@ void NextionBinarySensor::process_touch(uint8_t page_id, uint8_t component_id, b } void NextionBinarySensor::update() { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (this->variable_name_.empty()) // This is a touch component @@ -37,7 +37,7 @@ void NextionBinarySensor::update() { } void NextionBinarySensor::set_state(bool state, bool publish, bool send_to_nextion) { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (this->component_id_ == 0) // This is a legacy touch component diff --git a/esphome/components/nextion/nextion.cpp b/esphome/components/nextion/nextion.cpp index 29dcfa6cef..ac8a96fa7f 100644 --- a/esphome/components/nextion/nextion.cpp +++ b/esphome/components/nextion/nextion.cpp @@ -1137,5 +1137,7 @@ void Nextion::set_writer(const nextion_writer_t &writer) { this->writer_ = write ESPDEPRECATED("set_wait_for_ack(bool) is deprecated and has no effect", "v1.20") void Nextion::set_wait_for_ack(bool wait_for_ack) { ESP_LOGE(TAG, "This command is deprecated"); } +bool Nextion::is_updating() { return this->is_updating_; } + } // namespace nextion } // namespace esphome diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index d84f1df3de..0769b3f93f 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -1031,6 +1031,26 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ size_t queue_size() { return this->nextion_queue_.size(); } + /** + * @brief Check if the TFT update process is currently running. + * + * This method provides a way to determine if the Nextion display is in the + * process of updating its TFT firmware. When a TFT update is in progress, + * certain operations or commands may be restricted or could interfere with the + * update process. By checking the state of the update process, the system can + * make informed decisions about performing actions that involve communication + * with the Nextion display. + * + * @return true if the TFT update process is active, indicating that the Nextion + * display is currently updating its firmware. This implies that caution + * should be taken with commands sent to the display to avoid interrupting + * the update process. + * @return false if the TFT update process is not active, indicating that the Nextion + * display is not currently updating its firmware and is in a normal operational + * state, ready to receive and process commands as usual. + */ + bool is_updating() override; + protected: std::deque nextion_queue_; std::deque waveform_queue_; diff --git a/esphome/components/nextion/nextion_base.h b/esphome/components/nextion/nextion_base.h index b5729a1df1..f16eabc003 100644 --- a/esphome/components/nextion/nextion_base.h +++ b/esphome/components/nextion/nextion_base.h @@ -48,6 +48,8 @@ class NextionBase { virtual void show_component(const char *component) = 0; virtual void hide_component(const char *component) = 0; + virtual bool is_updating() { return false; } + bool is_sleeping() { return this->is_sleeping_; } bool is_setup() { return this->is_setup_; } bool is_detected() { return this->is_detected_; } diff --git a/esphome/components/nextion/sensor/nextion_sensor.cpp b/esphome/components/nextion/sensor/nextion_sensor.cpp index 566dd30acf..6cc641fcf3 100644 --- a/esphome/components/nextion/sensor/nextion_sensor.cpp +++ b/esphome/components/nextion/sensor/nextion_sensor.cpp @@ -30,7 +30,7 @@ void NextionSensor::add_to_wave_buffer(float state) { } void NextionSensor::update() { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (this->wave_chan_id_ == UINT8_MAX) { @@ -45,7 +45,7 @@ void NextionSensor::update() { } void NextionSensor::set_state(float state, bool publish, bool send_to_nextion) { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (std::isnan(state)) diff --git a/esphome/components/nextion/switch/nextion_switch.cpp b/esphome/components/nextion/switch/nextion_switch.cpp index 1f32ad3425..63c1882b48 100644 --- a/esphome/components/nextion/switch/nextion_switch.cpp +++ b/esphome/components/nextion/switch/nextion_switch.cpp @@ -18,13 +18,13 @@ void NextionSwitch::process_bool(const std::string &variable_name, bool on) { } void NextionSwitch::update() { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; this->nextion_->add_to_get_queue(this); } void NextionSwitch::set_state(bool state, bool publish, bool send_to_nextion) { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (send_to_nextion) { diff --git a/esphome/components/nextion/text_sensor/nextion_textsensor.cpp b/esphome/components/nextion/text_sensor/nextion_textsensor.cpp index 08f032df74..a3fc9390f5 100644 --- a/esphome/components/nextion/text_sensor/nextion_textsensor.cpp +++ b/esphome/components/nextion/text_sensor/nextion_textsensor.cpp @@ -16,13 +16,13 @@ void NextionTextSensor::process_text(const std::string &variable_name, const std } void NextionTextSensor::update() { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; this->nextion_->add_to_get_queue(this); } void NextionTextSensor::set_state(const std::string &state, bool publish, bool send_to_nextion) { - if (!this->nextion_->is_setup()) + if (!this->nextion_->is_setup() || this->nextion_->is_updating()) return; if (send_to_nextion) { From 197f9d6d0322210984de4c50681a7afb72cd0105 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 18 Apr 2024 02:10:10 +0200 Subject: [PATCH 029/313] Nextion - Review types (#6565) --- esphome/components/nextion/display.py | 4 +- esphome/components/nextion/nextion.cpp | 12 +- esphome/components/nextion/nextion.h | 137 ++++++++++++------ esphome/components/nextion/nextion_base.h | 4 +- .../components/nextion/nextion_commands.cpp | 137 ++++++++++-------- 5 files changed, 183 insertions(+), 111 deletions(-) diff --git a/esphome/components/nextion/display.py b/esphome/components/nextion/display.py index 27f2030f0d..6487c12f36 100644 --- a/esphome/components/nextion/display.py +++ b/esphome/components/nextion/display.py @@ -68,8 +68,8 @@ CONFIG_SCHEMA = ( } ), cv.Optional(CONF_TOUCH_SLEEP_TIMEOUT): cv.int_range(min=3, max=65535), - cv.Optional(CONF_WAKE_UP_PAGE): cv.positive_int, - cv.Optional(CONF_START_UP_PAGE): cv.positive_int, + cv.Optional(CONF_WAKE_UP_PAGE): cv.uint8_t, + cv.Optional(CONF_START_UP_PAGE): cv.uint8_t, cv.Optional(CONF_AUTO_WAKE_ON_TOUCH, default=True): cv.boolean, cv.Optional(CONF_EXIT_REPARSE_ON_START, default=False): cv.boolean, } diff --git a/esphome/components/nextion/nextion.cpp b/esphome/components/nextion/nextion.cpp index ac8a96fa7f..8de5ca9143 100644 --- a/esphome/components/nextion/nextion.cpp +++ b/esphome/components/nextion/nextion.cpp @@ -138,11 +138,11 @@ void Nextion::dump_config() { } if (this->wake_up_page_ != -1) { - ESP_LOGCONFIG(TAG, " Wake Up Page: %d", this->wake_up_page_); + ESP_LOGCONFIG(TAG, " Wake Up Page: %" PRId16, this->wake_up_page_); } if (this->start_up_page_ != -1) { - ESP_LOGCONFIG(TAG, " Start Up Page: %d", this->start_up_page_); + ESP_LOGCONFIG(TAG, " Start Up Page: %" PRId16, this->start_up_page_); } } @@ -1024,23 +1024,23 @@ bool Nextion::add_no_result_to_queue_with_printf_(const std::string &variable_na * @param is_sleep_safe The command is safe to send when the Nextion is sleeping */ -void Nextion::add_no_result_to_queue_with_set(NextionComponentBase *component, int state_value) { +void Nextion::add_no_result_to_queue_with_set(NextionComponentBase *component, int32_t state_value) { this->add_no_result_to_queue_with_set(component->get_variable_name(), component->get_variable_name_to_send(), state_value); } void Nextion::add_no_result_to_queue_with_set(const std::string &variable_name, - const std::string &variable_name_to_send, int state_value) { + const std::string &variable_name_to_send, int32_t state_value) { this->add_no_result_to_queue_with_set_internal_(variable_name, variable_name_to_send, state_value); } void Nextion::add_no_result_to_queue_with_set_internal_(const std::string &variable_name, - const std::string &variable_name_to_send, int state_value, + const std::string &variable_name_to_send, int32_t state_value, bool is_sleep_safe) { if ((!this->is_setup() && !this->ignore_is_setup_) || (!is_sleep_safe && this->is_sleeping())) return; - this->add_no_result_to_queue_with_ignore_sleep_printf_(variable_name, "%s=%d", variable_name_to_send.c_str(), + this->add_no_result_to_queue_with_ignore_sleep_printf_(variable_name, "%s=%" PRId32, variable_name_to_send.c_str(), state_value); } diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index 0769b3f93f..bc75df3ce6 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -50,6 +50,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will set the `txt` property of the component `textview` to `Hello World`. */ void set_component_text(const char *component, const char *text); + /** * Set the text of a component to a formatted string * @param component The component name. @@ -66,6 +67,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * For example when `uptime_sensor` = 506, then, `The uptime is: 506` will be displayed. */ void set_component_text_printf(const char *component, const char *format, ...) __attribute__((format(printf, 3, 4))); + /** * Set the integer value of a component * @param component The component name. @@ -78,7 +80,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * * This will change the property `value` of the component `gauge` to 50. */ - void set_component_value(const char *component, int value); + void set_component_value(const char *component, int32_t value); + /** * Set the picture of an image component. * @param component The component name. @@ -92,6 +95,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the image of the component `pic` to the image with ID `4`. */ void set_component_picture(const char *component, uint8_t picture_id); + /** * Set the background color of a component. * @param component The component name. @@ -107,6 +111,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_background_color(const char *component, uint16_t color); + /** * Set the background color of a component. * @param component The component name. @@ -121,6 +126,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_background_color(const char *component, const char *color); + /** * Set the background color of a component. * @param component The component name. @@ -135,6 +141,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the background color of the component `button` to blue. */ void set_component_background_color(const char *component, Color color) override; + /** * Set the pressed background color of a component. * @param component The component name. @@ -151,6 +158,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_pressed_background_color(const char *component, uint16_t color); + /** * Set the pressed background color of a component. * @param component The component name. @@ -166,6 +174,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_pressed_background_color(const char *component, const char *color); + /** * Set the pressed background color of a component. * @param component The component name. @@ -181,6 +190,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * is shown when the component is pressed. */ void set_component_pressed_background_color(const char *component, Color color) override; + /** * Set the foreground color of a component. * @param component The component name. @@ -196,6 +206,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_foreground_color(const char *component, uint16_t color); + /** * Set the foreground color of a component. * @param component The component name. @@ -210,6 +221,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_foreground_color(const char *component, const char *color); + /** * Set the foreground color of a component. * @param component The component name. @@ -223,6 +235,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the foreground color of the component `button` to black. */ void set_component_foreground_color(const char *component, Color color) override; + /** * Set the pressed foreground color of a component. * @param component The component name. @@ -239,6 +252,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_pressed_foreground_color(const char *component, uint16_t color); + /** * Set the pressed foreground color of a component. * @param component The component name. @@ -254,6 +268,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_pressed_foreground_color(const char *component, const char *color); + /** * Set the pressed foreground color of a component. * @param component The component name. @@ -283,6 +298,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the picture id of the component `textview`. */ void set_component_pic(const char *component, uint8_t pic_id); + /** * Set the background picture id of component. * @param component The component name. @@ -312,6 +328,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_font_color(const char *component, uint16_t color); + /** * Set the font color of a component. * @param component The component name. @@ -326,6 +343,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_font_color(const char *component, const char *color); + /** * Set the font color of a component. * @param component The component name. @@ -339,6 +357,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the font color of the component `textview` to black. */ void set_component_font_color(const char *component, Color color) override; + /** * Set the pressed font color of a component. * @param component The component name. @@ -354,6 +373,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Nextion HMI colors. */ void set_component_pressed_font_color(const char *component, uint16_t color); + /** * Set the pressed font color of a component. * @param component The component name. @@ -368,6 +388,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ void set_component_pressed_font_color(const char *component, const char *color); + /** * Set the pressed font color of a component. * @param component The component name. @@ -381,6 +402,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * This will change the pressed font color of the component `button` to black. */ void set_component_pressed_font_color(const char *component, Color color) override; + /** * Set the coordinates of a component on screen. * @param component The component name. @@ -394,7 +416,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * * This will move the position of the component `pic` to the x coordinate `55` and y coordinate `100`. */ - void set_component_coordinates(const char *component, int x, int y); + void set_component_coordinates(const char *component, uint16_t x, uint16_t y); + /** * Set the font id for a component. * @param component The component name. @@ -408,6 +431,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Changes the font of the component named `textveiw`. Font IDs are set in the Nextion Editor. */ void set_component_font(const char *component, uint8_t font_id) override; + /** * Send the current time to the nextion display. * @param time The time instance to send (get this with id(my_time).now() ). @@ -426,6 +450,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Switches to the page named `main`. Pages are named in the Nextion Editor. */ void goto_page(const char *page); + /** * Show the page with a given id. * @param page The id of the page. @@ -438,6 +463,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Switches to the page named `main`. Pages are named in the Nextion Editor. */ void goto_page(uint8_t page); + /** * Hide a component. * @param component The component name. @@ -450,6 +476,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Hides the component named `button`. */ void hide_component(const char *component) override; + /** * Show a component. * @param component The component name. @@ -462,6 +489,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Shows the component named `button`. */ void show_component(const char *component) override; + /** * Enable touch for a component. * @param component The component name. @@ -474,6 +502,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Enables touch for component named `button`. */ void enable_component_touch(const char *component); + /** * Disable touch for a component. * @param component The component name. @@ -486,14 +515,17 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Disables touch for component named `button`. */ void disable_component_touch(const char *component); + /** * Add waveform data to a waveform component * @param component_id The integer component id. * @param channel_number The channel number to write to. * @param value The value to write. */ - void add_waveform_data(int component_id, uint8_t channel_number, uint8_t value); - void open_waveform_channel(int component_id, uint8_t channel_number, uint8_t value); + void add_waveform_data(uint8_t component_id, uint8_t channel_number, uint8_t value); + + void open_waveform_channel(uint8_t component_id, uint8_t channel_number, uint8_t value); + /** * Display a picture at coordinates. * @param picture_id The picture id. @@ -507,7 +539,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * * Displays the picture who has the id `2` at the x coordinates `15` and y coordinates `25`. */ - void display_picture(int picture_id, int x_start, int y_start); + void display_picture(uint16_t picture_id, uint16_t x_start, uint16_t y_start); + /** * Fill a rectangle with a color. * @param x1 The starting x coordinate. @@ -526,7 +559,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use this [color picker](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to convert color codes to * Nextion HMI colors. */ - void fill_area(int x1, int y1, int width, int height, uint16_t color); + void fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, uint16_t color); + /** * Fill a rectangle with a color. * @param x1 The starting x coordinate. @@ -544,7 +578,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * the red color. * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ - void fill_area(int x1, int y1, int width, int height, const char *color); + void fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, const char *color); + /** * Fill a rectangle with a color. * @param x1 The starting x coordinate. @@ -562,7 +597,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Fills an area that starts at x coordinate `50` and y coordinate `50` with a height of `100` and width of `100` with * blue color. */ - void fill_area(int x1, int y1, int width, int height, Color color); + void fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, Color color); + /** * Draw a line on the screen. * @param x1 The starting x coordinate. @@ -581,7 +617,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use this [color picker](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to convert color codes to * Nextion HMI colors. */ - void line(int x1, int y1, int x2, int y2, uint16_t color); + void line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); + /** * Draw a line on the screen. * @param x1 The starting x coordinate. @@ -599,7 +636,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * `75` with the blue color. * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ - void line(int x1, int y1, int x2, int y2, const char *color); + void line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, const char *color); + /** * Draw a line on the screen. * @param x1 The starting x coordinate. @@ -617,7 +655,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Makes a line that starts at x coordinate `50` and y coordinate `50` and ends at x coordinate `75` and y coordinate * `75` with blue color. */ - void line(int x1, int y1, int x2, int y2, Color color); + void line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, Color color); + /** * Draw a rectangle outline. * @param x1 The starting x coordinate. @@ -636,7 +675,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use this [color picker](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to convert color codes to * Nextion HMI colors. */ - void rectangle(int x1, int y1, int width, int height, uint16_t color); + void rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, uint16_t color); + /** * Draw a rectangle outline. * @param x1 The starting x coordinate. @@ -654,7 +694,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * length of `50` with the blue color. * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ - void rectangle(int x1, int y1, int width, int height, const char *color); + void rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, const char *color); + /** * Draw a rectangle outline. * @param x1 The starting x coordinate. @@ -672,7 +713,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Makes a outline of a rectangle that starts at x coordinate `25` and y coordinate `35` and has a width of `40` and a * length of `50` with blue color. */ - void rectangle(int x1, int y1, int width, int height, Color color); + void rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, Color color); + /** * Draw a circle outline * @param center_x The center x coordinate. @@ -682,7 +724,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use this [color picker](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to convert color codes to * Nextion HMI colors. */ - void circle(int center_x, int center_y, int radius, uint16_t color); + void circle(uint16_t center_x, uint16_t center_y, uint16_t radius, uint16_t color); + /** * Draw a circle outline * @param center_x The center x coordinate. @@ -691,7 +734,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @param color The color to draw with (as a string). * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ - void circle(int center_x, int center_y, int radius, const char *color); + void circle(uint16_t center_x, uint16_t center_y, uint16_t radius, const char *color); + /** * Draw a circle outline * @param center_x The center x coordinate. @@ -699,7 +743,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @param radius The circle radius. * @param color The color to draw with (as Color). */ - void circle(int center_x, int center_y, int radius, Color color); + void circle(uint16_t center_x, uint16_t center_y, uint16_t radius, Color color); + /** * Draw a filled circled. * @param center_x The center x coordinate. @@ -716,7 +761,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Use this [color picker](https://nodtem66.github.io/nextion-hmi-color-convert/index.html) to convert color codes to * Nextion HMI colors. */ - void filled_circle(int center_x, int center_y, int radius, uint16_t color); + void filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, uint16_t color); + /** * Draw a filled circled. * @param center_x The center x coordinate. @@ -732,7 +778,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Makes a filled circle at the x coordinate `25` and y coordinate `25` with a radius of `10` with the blue color. * Use [Nextion Instruction Set](https://nextion.tech/instruction-set/#s5) for a list of Nextion HMI colors constants. */ - void filled_circle(int center_x, int center_y, int radius, const char *color); + void filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, const char *color); + /** * Draw a filled circled. * @param center_x The center x coordinate. @@ -748,7 +795,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * * Makes a filled circle at the x coordinate `25` and y coordinate `25` with a radius of `10` with blue color. */ - void filled_circle(int center_x, int center_y, int radius, Color color); + void filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, Color color); /** * Draws a QR code in the screen @@ -768,8 +815,9 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * * Draws a QR code with a Wi-Fi network credentials starting at the given coordinates (25,25). */ - void qrcode(int x1, int y1, const char *content, int size = 200, uint16_t background_color = 65535, - uint16_t foreground_color = 0, int logo_pic = -1, uint8_t border_width = 8); + void qrcode(uint16_t x1, uint16_t y1, const char *content, uint16_t size = 200, uint16_t background_color = 65535, + uint16_t foreground_color = 0, uint8_t logo_pic = -1, uint8_t border_width = 8); + /** * Draws a QR code in the screen * @param x1 The top left x coordinate to start the QR code. @@ -791,8 +839,9 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Draws a QR code with a Wi-Fi network credentials starting at the given coordinates (25,25) with size of 150px in * red on a blue background. */ - void qrcode(int x1, int y1, const char *content, int size, Color background_color = Color(255, 255, 255), - Color foreground_color = Color(0, 0, 0), int logo_pic = -1, uint8_t border_width = 8); + void qrcode(uint16_t x1, uint16_t y1, const char *content, uint16_t size, + Color background_color = Color(255, 255, 255), Color foreground_color = Color(0, 0, 0), + uint8_t logo_pic = -1, uint8_t border_width = 8); /** Set the brightness of the backlight. * @@ -806,6 +855,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Changes the brightness of the display to 30%. */ void set_backlight_brightness(float brightness); + /** * Set the touch sleep timeout of the display. * @param timeout Timeout in seconds. @@ -819,6 +869,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * `thup`. */ void set_touch_sleep_timeout(uint16_t timeout); + /** * Sets which page Nextion loads when exiting sleep mode. Note this can be set even when Nextion is in sleep mode. * @param page_id The page id, from 0 to the lage page in Nextion. Set 255 (not set to any existing page) to @@ -832,6 +883,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * The display will wake up to page 2. */ void set_wake_up_page(uint8_t page_id = 255); + /** * Sets which page Nextion loads when connecting to ESPHome. * @param page_id The page id, from 0 to the lage page in Nextion. Set 255 (not set to any existing page) to @@ -859,6 +911,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * The display will wake up by touch. */ void set_auto_wake_on_touch(bool auto_wake); + /** * Sets if Nextion should exit the active reparse mode before the "connect" command is sent * @param exit_reparse True or false. When exit_reparse is true, the exit reparse command @@ -872,11 +925,13 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * The display will be requested to leave active reparse mode before setup. */ void set_exit_reparse_on_start(bool exit_reparse); + /** * Sets Nextion mode between sleep and awake * @param True or false. Sleep=true to enter sleep mode or sleep=false to exit sleep mode. */ void sleep(bool sleep); + /** * @brief Sets the Nextion display's protocol reparse mode. * @@ -928,7 +983,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Set the tft file URL. https seems problematic with arduino.. */ void set_tft_url(const std::string &tft_url) { this->tft_url_ = tft_url; } - #endif /** @@ -992,9 +1046,9 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void set_nextion_sensor_state(NextionQueueType queue_type, const std::string &name, float state); void set_nextion_text_state(const std::string &name, const std::string &state); - void add_no_result_to_queue_with_set(NextionComponentBase *component, int state_value) override; + void add_no_result_to_queue_with_set(NextionComponentBase *component, int32_t state_value) override; void add_no_result_to_queue_with_set(const std::string &variable_name, const std::string &variable_name_to_send, - int state_value) override; + int32_t state_value) override; void add_no_result_to_queue_with_set(NextionComponentBase *component, const std::string &state_value) override; void add_no_result_to_queue_with_set(const std::string &variable_name, const std::string &variable_name_to_send, @@ -1070,8 +1124,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void process_serial_(); bool is_updating_ = false; uint32_t touch_sleep_timeout_ = 0; - int wake_up_page_ = -1; - int start_up_page_ = -1; + int16_t wake_up_page_ = -1; + int16_t start_up_page_ = -1; bool auto_wake_on_touch_ = true; bool exit_reparse_on_start_ = false; @@ -1089,7 +1143,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe __attribute__((format(printf, 3, 4))); void add_no_result_to_queue_with_set_internal_(const std::string &variable_name, - const std::string &variable_name_to_send, int state_value, + const std::string &variable_name_to_send, int32_t state_value, bool is_sleep_safe = false); void add_no_result_to_queue_with_set_internal_(const std::string &variable_name, @@ -1099,13 +1153,21 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void check_pending_waveform_(); #ifdef USE_NEXTION_TFT_UPLOAD + uint32_t content_length_ = 0; + int tft_size_ = 0; + uint32_t original_baud_rate_ = 0; + bool upload_first_chunk_sent_ = false; + + std::string tft_url_; + uint8_t *transfer_buffer_{nullptr}; + size_t transfer_buffer_size_; + #ifdef USE_ESP8266 WiFiClient *wifi_client_{nullptr}; BearSSL::WiFiClientSecure *wifi_client_secure_{nullptr}; WiFiClient *get_wifi_client_(); #endif - int content_length_ = 0; - int tft_size_ = 0; + #ifdef ARDUINO /** * will request chunk_size chunks from the web server @@ -1178,13 +1240,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void remove_front_no_sensors_(); -#ifdef USE_NEXTION_TFT_UPLOAD - std::string tft_url_; - uint8_t *transfer_buffer_{nullptr}; - size_t transfer_buffer_size_; - bool upload_first_chunk_sent_ = false; -#endif - #ifdef NEXTION_PROTOCOL_LOG void print_queue_members_(); #endif @@ -1192,8 +1247,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe std::string command_data_; bool is_connected_ = false; - uint32_t startup_override_ms_ = 8000; - uint32_t max_q_age_ms_ = 8000; + const uint16_t startup_override_ms_ = 8000; + const uint16_t max_q_age_ms_ = 8000; uint32_t started_ms_ = 0; bool sent_setup_commands_ = false; }; diff --git a/esphome/components/nextion/nextion_base.h b/esphome/components/nextion/nextion_base.h index f16eabc003..b88dd399f8 100644 --- a/esphome/components/nextion/nextion_base.h +++ b/esphome/components/nextion/nextion_base.h @@ -24,9 +24,9 @@ class NextionBase; class NextionBase { public: - virtual void add_no_result_to_queue_with_set(NextionComponentBase *component, int state_value) = 0; + virtual void add_no_result_to_queue_with_set(NextionComponentBase *component, int32_t state_value) = 0; virtual void add_no_result_to_queue_with_set(const std::string &variable_name, - const std::string &variable_name_to_send, int state_value) = 0; + const std::string &variable_name_to_send, int32_t state_value) = 0; virtual void add_no_result_to_queue_with_set(NextionComponentBase *component, const std::string &state_value) = 0; virtual void add_no_result_to_queue_with_set(const std::string &variable_name, diff --git a/esphome/components/nextion/nextion_commands.cpp b/esphome/components/nextion/nextion_commands.cpp index a2325861a3..fdd6c74d99 100644 --- a/esphome/components/nextion/nextion_commands.cpp +++ b/esphome/components/nextion/nextion_commands.cpp @@ -144,11 +144,11 @@ void Nextion::set_component_pressed_font_color(const char *component, Color colo // Set picture void Nextion::set_component_pic(const char *component, uint8_t pic_id) { - this->add_no_result_to_queue_with_printf_("set_component_pic", "%s.pic=%d", component, pic_id); + this->add_no_result_to_queue_with_printf_("set_component_pic", "%s.pic=%" PRIu8, component, pic_id); } void Nextion::set_component_picc(const char *component, uint8_t pic_id) { - this->add_no_result_to_queue_with_printf_("set_component_pic", "%s.picc=%d", component, pic_id); + this->add_no_result_to_queue_with_printf_("set_component_pic", "%s.picc=%" PRIu8, component, pic_id); } void Nextion::set_component_text_printf(const char *component, const char *format, ...) { @@ -179,7 +179,7 @@ void Nextion::set_auto_wake_on_touch(bool auto_wake) { // General Component void Nextion::set_component_font(const char *component, uint8_t font_id) { - this->add_no_result_to_queue_with_printf_("set_component_font", "%s.font=%d", component, font_id); + this->add_no_result_to_queue_with_printf_("set_component_font", "%s.font=%" PRIu8, component, font_id); } void Nextion::hide_component(const char *component) { @@ -199,113 +199,130 @@ void Nextion::disable_component_touch(const char *component) { } void Nextion::set_component_picture(const char *component, uint8_t picture_id) { - this->add_no_result_to_queue_with_printf_("set_component_picture", "%s.pic=%d", component, picture_id); + this->add_no_result_to_queue_with_printf_("set_component_picture", "%s.pic=%" PRIu8, component, picture_id); } void Nextion::set_component_text(const char *component, const char *text) { this->add_no_result_to_queue_with_printf_("set_component_text", "%s.txt=\"%s\"", component, text); } -void Nextion::set_component_value(const char *component, int value) { - this->add_no_result_to_queue_with_printf_("set_component_value", "%s.val=%d", component, value); +void Nextion::set_component_value(const char *component, int32_t value) { + this->add_no_result_to_queue_with_printf_("set_component_value", "%s.val=%" PRId32, component, value); } -void Nextion::add_waveform_data(int component_id, uint8_t channel_number, uint8_t value) { - this->add_no_result_to_queue_with_printf_("add_waveform_data", "add %d,%u,%u", component_id, channel_number, value); +void Nextion::add_waveform_data(uint8_t component_id, uint8_t channel_number, uint8_t value) { + this->add_no_result_to_queue_with_printf_("add_waveform_data", "add %" PRIu8 ",%" PRIu8 ",%" PRIu8, component_id, + channel_number, value); } -void Nextion::open_waveform_channel(int component_id, uint8_t channel_number, uint8_t value) { - this->add_no_result_to_queue_with_printf_("open_waveform_channel", "addt %d,%u,%u", component_id, channel_number, - value); +void Nextion::open_waveform_channel(uint8_t component_id, uint8_t channel_number, uint8_t value) { + this->add_no_result_to_queue_with_printf_("open_waveform_channel", "addt %" PRIu8 ",%" PRIu8 ",%" PRIu8, component_id, + channel_number, value); } -void Nextion::set_component_coordinates(const char *component, int x, int y) { - this->add_no_result_to_queue_with_printf_("set_component_coordinates command 1", "%s.xcen=%d", component, x); - this->add_no_result_to_queue_with_printf_("set_component_coordinates command 2", "%s.ycen=%d", component, y); +void Nextion::set_component_coordinates(const char *component, uint16_t x, uint16_t y) { + this->add_no_result_to_queue_with_printf_("set_component_coordinates command 1", "%s.xcen=%" PRIu16, component, x); + this->add_no_result_to_queue_with_printf_("set_component_coordinates command 2", "%s.ycen=%" PRIu16, component, y); } // Drawing -void Nextion::display_picture(int picture_id, int x_start, int y_start) { - this->add_no_result_to_queue_with_printf_("display_picture", "pic %d, %d, %d", x_start, y_start, picture_id); +void Nextion::display_picture(uint16_t picture_id, uint16_t x_start, uint16_t y_start) { + this->add_no_result_to_queue_with_printf_("display_picture", "pic %" PRIu16 ", %" PRIu16 ", %" PRIu16, x_start, + y_start, picture_id); } -void Nextion::fill_area(int x1, int y1, int width, int height, uint16_t color) { - this->add_no_result_to_queue_with_printf_("fill_area", "fill %d,%d,%d,%d,%" PRIu16, x1, y1, width, height, color); +void Nextion::fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, uint16_t color) { + this->add_no_result_to_queue_with_printf_( + "fill_area", "fill %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, y1, width, height, color); } -void Nextion::fill_area(int x1, int y1, int width, int height, const char *color) { - this->add_no_result_to_queue_with_printf_("fill_area", "fill %d,%d,%d,%d,%s", x1, y1, width, height, color); +void Nextion::fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, const char *color) { + this->add_no_result_to_queue_with_printf_("fill_area", "fill %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%s", x1, + y1, width, height, color); } -void Nextion::fill_area(int x1, int y1, int width, int height, Color color) { - this->add_no_result_to_queue_with_printf_("fill_area", "fill %d,%d,%d,%d,%d", x1, y1, width, height, - display::ColorUtil::color_to_565(color)); +void Nextion::fill_area(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, Color color) { + this->add_no_result_to_queue_with_printf_("fill_area", + "fill %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, y1, + width, height, display::ColorUtil::color_to_565(color)); } -void Nextion::line(int x1, int y1, int x2, int y2, uint16_t color) { - this->add_no_result_to_queue_with_printf_("line", "line %d,%d,%d,%d,%" PRIu16, x1, y1, x2, y2, color); +void Nextion::line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { + this->add_no_result_to_queue_with_printf_("line", "line %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, + y1, x2, y2, color); } -void Nextion::line(int x1, int y1, int x2, int y2, const char *color) { - this->add_no_result_to_queue_with_printf_("line", "line %d,%d,%d,%d,%s", x1, y1, x2, y2, color); +void Nextion::line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, const char *color) { + this->add_no_result_to_queue_with_printf_("line", "line %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%s", x1, y1, + x2, y2, color); } -void Nextion::line(int x1, int y1, int x2, int y2, Color color) { - this->add_no_result_to_queue_with_printf_("line", "line %d,%d,%d,%d,%d", x1, y1, x2, y2, - display::ColorUtil::color_to_565(color)); +void Nextion::line(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, Color color) { + this->add_no_result_to_queue_with_printf_("line", "line %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, + y1, x2, y2, display::ColorUtil::color_to_565(color)); } -void Nextion::rectangle(int x1, int y1, int width, int height, uint16_t color) { - this->add_no_result_to_queue_with_printf_("draw", "draw %d,%d,%d,%d,%" PRIu16, x1, y1, x1 + width, y1 + height, +void Nextion::rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, uint16_t color) { + this->add_no_result_to_queue_with_printf_("draw", "draw %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, + y1, static_cast(x1 + width), static_cast(y1 + height), color); } -void Nextion::rectangle(int x1, int y1, int width, int height, const char *color) { - this->add_no_result_to_queue_with_printf_("draw", "draw %d,%d,%d,%d,%s", x1, y1, x1 + width, y1 + height, color); +void Nextion::rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, const char *color) { + this->add_no_result_to_queue_with_printf_("draw", "draw %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%s", x1, y1, + static_cast(x1 + width), static_cast(y1 + height), + color); } -void Nextion::rectangle(int x1, int y1, int width, int height, Color color) { - this->add_no_result_to_queue_with_printf_("draw", "draw %d,%d,%d,%d,%d", x1, y1, x1 + width, y1 + height, +void Nextion::rectangle(uint16_t x1, uint16_t y1, uint16_t width, uint16_t height, Color color) { + this->add_no_result_to_queue_with_printf_("draw", "draw %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, x1, + y1, static_cast(x1 + width), static_cast(y1 + height), display::ColorUtil::color_to_565(color)); } -void Nextion::circle(int center_x, int center_y, int radius, uint16_t color) { - this->add_no_result_to_queue_with_printf_("cir", "cir %d,%d,%d,%" PRIu16, center_x, center_y, radius, color); +void Nextion::circle(uint16_t center_x, uint16_t center_y, uint16_t radius, uint16_t color) { + this->add_no_result_to_queue_with_printf_("cir", "cir %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, center_x, + center_y, radius, color); } -void Nextion::circle(int center_x, int center_y, int radius, const char *color) { - this->add_no_result_to_queue_with_printf_("cir", "cir %d,%d,%d,%s", center_x, center_y, radius, color); +void Nextion::circle(uint16_t center_x, uint16_t center_y, uint16_t radius, const char *color) { + this->add_no_result_to_queue_with_printf_("cir", "cir %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%s", center_x, center_y, + radius, color); } -void Nextion::circle(int center_x, int center_y, int radius, Color color) { - this->add_no_result_to_queue_with_printf_("cir", "cir %d,%d,%d,%d", center_x, center_y, radius, - display::ColorUtil::color_to_565(color)); +void Nextion::circle(uint16_t center_x, uint16_t center_y, uint16_t radius, Color color) { + this->add_no_result_to_queue_with_printf_("cir", "cir %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, center_x, + center_y, radius, display::ColorUtil::color_to_565(color)); } -void Nextion::filled_circle(int center_x, int center_y, int radius, uint16_t color) { - this->add_no_result_to_queue_with_printf_("cirs", "cirs %d,%d,%d,%" PRIu16, center_x, center_y, radius, color); +void Nextion::filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, uint16_t color) { + this->add_no_result_to_queue_with_printf_("cirs", "cirs %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, center_x, + center_y, radius, color); } -void Nextion::filled_circle(int center_x, int center_y, int radius, const char *color) { - this->add_no_result_to_queue_with_printf_("cirs", "cirs %d,%d,%d,%s", center_x, center_y, radius, color); +void Nextion::filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, const char *color) { + this->add_no_result_to_queue_with_printf_("cirs", "cirs %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%s", center_x, center_y, + radius, color); } -void Nextion::filled_circle(int center_x, int center_y, int radius, Color color) { - this->add_no_result_to_queue_with_printf_("cirs", "cirs %d,%d,%d,%d", center_x, center_y, radius, - display::ColorUtil::color_to_565(color)); +void Nextion::filled_circle(uint16_t center_x, uint16_t center_y, uint16_t radius, Color color) { + this->add_no_result_to_queue_with_printf_("cirs", "cirs %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16, center_x, + center_y, radius, display::ColorUtil::color_to_565(color)); } -void Nextion::qrcode(int x1, int y1, const char *content, int size, uint16_t background_color, - uint16_t foreground_color, int logo_pic, uint8_t border_width) { - this->add_no_result_to_queue_with_printf_("qrcode", "qrcode %d,%d,%d,%d,%d,%d,%d,\"%s\"", x1, y1, size, - background_color, foreground_color, logo_pic, border_width, content); -} - -void Nextion::qrcode(int x1, int y1, const char *content, int size, Color background_color, Color foreground_color, - int logo_pic, uint8_t border_width) { +void Nextion::qrcode(uint16_t x1, uint16_t y1, const char *content, uint16_t size, uint16_t background_color, + uint16_t foreground_color, uint8_t logo_pic, uint8_t border_width) { this->add_no_result_to_queue_with_printf_( - "qrcode", "qrcode %d,%d,%d,%d,%d,%d,%d,\"%s\"", x1, y1, size, display::ColorUtil::color_to_565(background_color), - display::ColorUtil::color_to_565(foreground_color), logo_pic, border_width, content); + "qrcode", "qrcode %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu8 ",%" PRIu8 ",\"%s\"", x1, + y1, size, background_color, foreground_color, logo_pic, border_width, content); +} + +void Nextion::qrcode(uint16_t x1, uint16_t y1, const char *content, uint16_t size, Color background_color, + Color foreground_color, uint8_t logo_pic, uint8_t border_width) { + this->add_no_result_to_queue_with_printf_( + "qrcode", "qrcode %" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu16 ",%" PRIu8 ",%" PRIu8 ",\"%s\"", x1, + y1, size, display::ColorUtil::color_to_565(background_color), display::ColorUtil::color_to_565(foreground_color), + logo_pic, border_width, content); } void Nextion::set_nextion_rtc_time(ESPTime time) { From 2fed6955de41aad58f353d3feed5e5fcb1e70ddc Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:11:00 +1000 Subject: [PATCH 030/313] On failure, dump the output of preceding jobs in CI status (#6564) --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7df57acb08..d3ac7981d3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -472,6 +472,7 @@ jobs: - compile-tests - clang-tidy - test-build-components + - list-components if: always() steps: - name: Success @@ -479,4 +480,8 @@ jobs: run: exit 0 - name: Failure if: ${{ contains(needs.*.result, 'failure') }} - run: exit 1 + env: + JSON_DOC: ${{ toJSON(needs) }} + run: | + echo $JSON_DOC | jq + exit 1 From 2e7ac26adacd5a7c1aa02ff47de785f4b9e79fee Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 18 Apr 2024 04:16:49 +0200 Subject: [PATCH 031/313] Nextion `send_command` method (#6540) This is a simplified version of `send_command_printf` without the `printf` support. Manually send a raw command to the display. param command The pcommand, like "page 0" return Whether the send was successful. --- esphome/components/nextion/nextion.cpp | 11 +++++++++++ esphome/components/nextion/nextion.h | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/esphome/components/nextion/nextion.cpp b/esphome/components/nextion/nextion.cpp index 8de5ca9143..ddbd3328ef 100644 --- a/esphome/components/nextion/nextion.cpp +++ b/esphome/components/nextion/nextion.cpp @@ -194,6 +194,17 @@ void Nextion::update_all_components() { } } +bool Nextion::send_command(const char *command) { + if ((!this->is_setup() && !this->ignore_is_setup_) || this->is_sleeping()) + return false; + + if (this->send_command_(command)) { + this->add_no_result_to_queue_("send_command"); + return true; + } + return false; +} + bool Nextion::send_command_printf(const char *format, ...) { if ((!this->is_setup() && !this->ignore_is_setup_) || this->is_sleeping()) return false; diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index bc75df3ce6..a8f0ea8ba9 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -970,6 +970,12 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe // This function has been deprecated void set_wait_for_ack(bool wait_for_ack); + /** + * Manually send a raw command to the display. + * @param command The pcommand, like "page 0" + * @return Whether the send was successful. + */ + bool send_command(const char *command); /** * Manually send a raw formatted command to the display. * @param format The printf-style command format, like "vis %s,0" From 8c31aea94fca4d83e7357593c0567e0b381135d0 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 18 Apr 2024 15:03:15 +1000 Subject: [PATCH 032/313] Fix some printf formats for size_t. (#6542) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/select/select.cpp | 2 +- esphome/components/select/select_call.cpp | 2 +- esphome/components/sensor/filter.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/esphome/components/select/select.cpp b/esphome/components/select/select.cpp index f4583b4e2e..806882ad94 100644 --- a/esphome/components/select/select.cpp +++ b/esphome/components/select/select.cpp @@ -12,7 +12,7 @@ void Select::publish_state(const std::string &state) { if (index.has_value()) { this->has_state_ = true; this->state = state; - ESP_LOGD(TAG, "'%s': Sending state %s (index %d)", name, state.c_str(), index.value()); + ESP_LOGD(TAG, "'%s': Sending state %s (index %zu)", name, state.c_str(), index.value()); this->state_callback_.call(state, index.value()); } else { ESP_LOGE(TAG, "'%s': invalid state for publish_state(): %s", name, state.c_str()); diff --git a/esphome/components/select/select_call.cpp b/esphome/components/select/select_call.cpp index 6ee41b1029..85f755645c 100644 --- a/esphome/components/select/select_call.cpp +++ b/esphome/components/select/select_call.cpp @@ -71,7 +71,7 @@ void SelectCall::perform() { return; } if (this->index_.value() >= options.size()) { - ESP_LOGW(TAG, "'%s' - Index value %d out of bounds", name, this->index_.value()); + ESP_LOGW(TAG, "'%s' - Index value %zu out of bounds", name, this->index_.value()); return; } target_value = options[this->index_.value()]; diff --git a/esphome/components/sensor/filter.cpp b/esphome/components/sensor/filter.cpp index 6d7acad7e0..3f67af59be 100644 --- a/esphome/components/sensor/filter.cpp +++ b/esphome/components/sensor/filter.cpp @@ -79,7 +79,7 @@ SkipInitialFilter::SkipInitialFilter(size_t num_to_ignore) : num_to_ignore_(num_ optional SkipInitialFilter::new_value(float value) { if (num_to_ignore_ > 0) { num_to_ignore_--; - ESP_LOGV(TAG, "SkipInitialFilter(%p)::new_value(%f) SKIPPING, %u left", this, value, num_to_ignore_); + ESP_LOGV(TAG, "SkipInitialFilter(%p)::new_value(%f) SKIPPING, %zu left", this, value, num_to_ignore_); return {}; } From 655dbc48b5f7e53a4ceee83f4aa159e276d8b864 Mon Sep 17 00:00:00 2001 From: Samuel Sieb Date: Thu, 18 Apr 2024 14:52:22 -0700 Subject: [PATCH 033/313] remove delay from tmp102 (#6577) Co-authored-by: Samuel Sieb --- esphome/components/tmp102/tmp102.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/esphome/components/tmp102/tmp102.cpp b/esphome/components/tmp102/tmp102.cpp index be60a2d8d4..f35fbf5d4b 100644 --- a/esphome/components/tmp102/tmp102.cpp +++ b/esphome/components/tmp102/tmp102.cpp @@ -28,23 +28,24 @@ void TMP102Component::dump_config() { } void TMP102Component::update() { - int16_t raw_temperature; if (this->write(&TMP102_REGISTER_TEMPERATURE, 1) != i2c::ERROR_OK) { this->status_set_warning(); return; } - delay(50); // NOLINT - if (this->read(reinterpret_cast(&raw_temperature), 2) != i2c::ERROR_OK) { - this->status_set_warning(); - return; - } - raw_temperature = i2c::i2ctohs(raw_temperature); - raw_temperature = raw_temperature >> 4; - float temperature = raw_temperature * TMP102_CONVERSION_FACTOR; - ESP_LOGD(TAG, "Got Temperature=%.1f°C", temperature); + this->set_timeout("read_temp", 50, [this]() { + int16_t raw_temperature; + if (this->read(reinterpret_cast(&raw_temperature), 2) != i2c::ERROR_OK) { + this->status_set_warning(); + return; + } + raw_temperature = i2c::i2ctohs(raw_temperature); + raw_temperature = raw_temperature >> 4; + float temperature = raw_temperature * TMP102_CONVERSION_FACTOR; + ESP_LOGD(TAG, "Got Temperature=%.1f°C", temperature); - this->publish_state(temperature); - this->status_clear_warning(); + this->publish_state(temperature); + this->status_clear_warning(); + }); } float TMP102Component::get_setup_priority() const { return setup_priority::DATA; } From 45ae78de03cbed77809f51ee89f461d68fd66907 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 22 Apr 2024 10:29:56 +1200 Subject: [PATCH 034/313] =?UTF-8?q?Create=20``component=5Fdir``=20substitu?= =?UTF-8?q?tion=20for=20local=20files=20to=20be=20included=20in=E2=80=A6?= =?UTF-8?q?=20(#6575)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/ci-custom.py | 2 +- tests/components/font/Monocraft.ttf | Bin 0 -> 202764 bytes tests/components/font/common.yaml | 38 ++++++++++++++++ tests/components/font/test.esp32-c3-idf.yaml | 24 +++------- tests/components/font/test.esp32-c3.yaml | 24 +++------- tests/components/font/test.esp32-idf.yaml | 24 +++------- tests/components/font/test.esp32.yaml | 43 +++--------------- tests/components/font/test.esp8266.yaml | 24 +++------- tests/components/font/test.rp2040.yaml | 24 +++------- .../build_components_base.bk72xx.yaml | 1 + .../build_components_base.esp32-ard.yaml | 1 + .../build_components_base.esp32-c3-ard.yaml | 1 + .../build_components_base.esp32-c3-idf.yaml | 1 + .../build_components_base.esp32-idf.yaml | 1 + .../build_components_base.esp32-s2-ard.yaml | 1 + .../build_components_base.esp32-s2-idf.yaml | 1 + .../build_components_base.esp32-s3-ard.yaml | 1 + .../build_components_base.esp32-s3-idf.yaml | 1 + .../build_components_base.esp8266.yaml | 1 + .../build_components_base.host.yaml | 1 + .../build_components_base.rp2040.yaml | 1 + 21 files changed, 87 insertions(+), 128 deletions(-) create mode 100644 tests/components/font/Monocraft.ttf create mode 100644 tests/components/font/common.yaml diff --git a/script/ci-custom.py b/script/ci-custom.py index 3be7be76a2..c3cfc7a331 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -58,7 +58,7 @@ file_types = ( ) cpp_include = ("*.h", "*.c", "*.cpp", "*.tcc") py_include = ("*.py",) -ignore_types = (".ico", ".png", ".woff", ".woff2", "") +ignore_types = (".ico", ".png", ".woff", ".woff2", "", ".ttf", ".otf") LINT_FILE_CHECKS = [] LINT_CONTENT_CHECKS = [] diff --git a/tests/components/font/Monocraft.ttf b/tests/components/font/Monocraft.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4066b0a9889c2505d31b953487ac1d48fafaf9e9 GIT binary patch literal 202764 zcmeF44VYC|b@%s~xs#xvfxslFWHNjP4JMd?AqFFfsHhl;qN1V_LliA4Dk>@}T58Zn zMWuCAtVGeEMT;p`RIF6dqNR0eX~l{OCPbsfc3w*>8erbvf33aG+2`Inkl;t3=Y4yJ zbwAHupZ~S?+WVY)2}KBDBzKJv9{>1-PxzpZ)b7KHm~T?>SF>`o)(_yY~M~3ZYoX=S!}C z*>x+P`{+4;9l}G7hA@1@^{-vo8zyyZ4dDW$g~p4od-aOJ!O+S0)w~||;^nV@(c88@ z>yJaYYFy|jCM~<+x}|S;?bL4gjo|Y~F5`_CjCuYics-Zbla{?~<*Gm2{_MMX4Lx|| z@>g7cUDwKMH^6@wugARXx>YOA_)f=UK3~T1y)VD+Wj8$S$$xiq=(u`L2px-7yyDd> z&t3nLCxwo=eIeZXqaa^&hA{VAFCX)Qvu6KS7~Yu0JK^A`U-|C%_}&l(M?NPsw()vc z=&%v6$Czz{Bg1vi;ca~$-`60!ov~K$oUyhz67FYjbZ}qTQFFpY_D-XtzgQo-(Ce=| zj_}S0{ITPVFta$9cS9GN>2@ew^VNC74&D>Ors;aU;6;yH8rFo~!Q-8~2G@n_&~0Ez zC@#}y9g8~W@z5K3i<<&*K`5T+=r7|D5vA zejm@1@6+S&L+0;OhI}jA+C8?@Bga{KKGb8o@xP1rlKkH`Z~5fj@VvLjos3tWpUruc zVsoGJshah&|tj!wrH|I;zZ=f7tCn?KX*=414_ z`M7q+b*%iXI>qA($B!p*84?#Qo|10UIIs-N?G=}|{Geui?ac0;O-W;|TXBCr+hZoa}D~ox>Gm7hq8;VyJZzRr^fA#|7!fID|9`x zYhBknyWZ3F*InQ2`dQbJGxv=A#>l@N`S&9SyMNUE>vP7Ov+11e=Nvuntn((E_qy}m z+tb-Iyk}z11wD`Gd0fx4d#>yGgPu3_+}QKpo)7kXwC5{5|JgHm{^!pB;`#r0{`b%S z(fL2^ozi<*@1uLK?tNPCvwC0I`{v$v_kObXv%Oy(fA07R<1ZOMcl?vbUpxL;<6kiT z9pg8Q-#vcc`2U*Fm@s0(=m|X&E}C%JgoP7cIN`<#TPA#E!Z#;&Onk`1?@auUiN`13 zJoyWg|7P-cChwp8<0)rM88&6il-?JI|${$Vnz?4r+*)!!kQ|`W?}SeDXyPzUZQhW?gjE zMNgi7_9G_W^3Yozamy9AJolE@-}2U5K6T5sd%Es9|DFr)nR(9@_sqTLn!(|N$2pIx z^L(4aXN$9osYL3M;;LePv8Y&DEGt$PZ!O+ke5kmENPVIBGLiawB6Uac?;T@1CUsoY zaY@IcIhBsLQkyJN{bi&+cFtd&7tR}Nk?QEVe@{=(l%DB5SN1IIS<>^; zp4B~TdfwUdfu0Zd?CkkP&(T_>M)gkby_`tRBT_4RSN5*y-PHT3-fb~bR}rZNHsQ+?zCJNb9808rI`Kb=)UA_uPX4Av zD#S=lpK|$>B~xB9WzCfJQ*NHJJB!p9i`4aHq^^C~*DX>%n|8yrmpwdOG?qxsEF(4L zmg%=#e#>)+)S6qi-0~OqgnP~-Qjf4mJ;@_Ac<12P2LER8tAk$|{PN(J26qg8e()~` zKR5UngP-B-@n-1#gEtMX8@zGwZG&$ad>wHOgHIWJ^5EkJA3Hc_@XEnQ56&LEV(?Le zvj#64ylAj@aO7a)#F7(>PCWI*H7A~M;*lrLJ~8qH=a-KkIR4$^-#-4$<6k`fh2x(; z{+Gu;bNo%m-+25D$6tG#bHc|jKR)B0>wfXhU%cZNYk%>!pWpoRcl>$7)lxogv1>+gE^T{qoz<6UpR>!o)+k~7h7Ikf7~ zb%&mF=;?>%^J?^=vkyIx$BsLHcIVx9{^ZVoxpUv0|8(c-J70C@^&#B(lslhz=e#?g zaA(h*WAFIs9k<`{)jK{P!W~=h;A}pRuZOOI&ey9De#ANdgTK6ep})HQ!rOap@4CHl z+pli>_uFm{;kK{bw)3{F{@HEIZ(DfV6}Qd2?GYjT@Wc;)`NJRm@Z~@F*$>wI;6eZT ztABmR_fLHPm*0QU{-1}i|5+h??^@`p@6Gz>SM6KkqeFQ9x#?L5_kT6?qWeFeGxZyJ zSG916Tfy}Jg^tN?MPKpB?B%_DTDH;pa0ilOyZKdRvB2;GVu{#d^s z;@wZ%h^+-zaui>Kc0>O_wcpR<0sHJw@$bdaCSJ$6n!8Y3R9sxpsqyR)#UuUthhkQ7 zIrG&s?cHZl4WC^+r+99$xOkr4;mGF~FW`O&GujL7_4UQlj#V9?5zcSuc%wb8?s!w@ znR?batkbOJ*$+E!;~p$_9_;*4=N&wfH=Tz%@8bT)oj>WkTgUVKr=36R{I||yoyR** zbPnnrs%X)8SmQ!_KCSWa#zl>b8{|^sGQZY@XO}k~)wqJk*^NgxuH^ACjX900bUe?m zZd}`VTI1;r%Z$b|8d%nNR%21)PwmqWG`_^^FE@5Jh*0Ajjc+#omd8Ez*|!?sZu}ju z_BQ^3`|mXVh5PR{h#-&OZ~V|6Z);#t<6z@Q+~3i-vvF60K7i*xY24lTY2&{ezqD6J z8^3D&y214)d~&RDym6vomeHf@t$;@tQXXe?&9wI( z*>#y7d1qGFn|SA4 zUGJtxcyHJHy58Tlq3ch&{*HOUyQnx_pX}Na z&Jfy&zWwtf;(fv8HhxQwwU4tG4CdBJSi8a*bW6jyzUTg7co-2L5FQxL3M0d)aCR6S z#)R&0PB=G=4G#(r4iBNnIxqBu^FwbKA0~u}T$?jFObHi+so|mFVd26sjRng^;o>ko zJR)2YE)6rn%<#x?S(p_r50460gxTTI;mYusFeh9Ut`3h4bHn4pEr10c0 zKRhK|6P_9tglogo!qdaT@Qm=x@T{;XJe#G=bHn2Byzu<+g0Li9hyH&Q-X7M4cZT1!e4}K;nuJ{{AKuj_(J%r@a6EOurqw6 z@tE++ur%BdUII>E7dC}gggrCYUS)oIad>Ux3yrUkTW5mG<>8IR zFT*Y2i(yT;KD^wH(A~?z>c-XKh2gDXZTQpT%wm{w!?Jfc_&OX3>r{5E^wH6bK;dRObw6IkXd^4m5b(SOf98aSZIu zfmTAhm}eRg_3VsA&?bmnJ#!?)>oYe(`&gBXffhjU7`7GSz58*@{bobUpbgM|=qR(- z3}^+k1>(Koz0hK4GX(G9M?x4e9YVhmynX=kA21K%^#eHO0lfFX0F8s@K&zqc&_D=h zO@)?1eb7Eu-oqet7`YPSn2`rU7&Qjsy-~b3Y8!MogtNy%i=dkzjyoG(qtR>hDqp#e z=9n>)AmokVy)le4+8;tU?{_1!dj~7ekr2Gk*#PnS+y=z!b2mY|LKw^Vv5TSg5OzEW z{j?+SpcN3uJP3XdI>L2<WHdOyv2*ZO{<_Hw#(~?FnJ>NQg0$ z;V~H=Q>HnhxS6NpuOyF41?xE9QUw2AzU~PS`O_9 zVH!S~hTLh}*#Y7C!;$-Nct3n6bS#967 zLu;Y^?4Y2>CF`LBAzV5Y;{8hxhA?9qgxnchpd;+E%z^qKct3I+v>4*ENAlTa^P$bq zF?M1WLR%r;zkD{d4noeOCP6Eq-M&+E1!Jy2))jk0n2pb7&x3e9o7ayX1Hu2%+e5f= z7{q5+u7P$!heLQwFSG>O3>{#{XB@Nw+Qzk}0h$e=>s1FsxOytYXICTlv16fC5cDOk1|1IJN$`5o z3TOwrO?>v`#SpsBNB8+0H=pC4!tk5H>F!3$21U z{(0jdct4NhpO4MYUkq)8j)d@nMbI|rSO`ntyM*JGaNKnqcOAU0+XBJkg?#qH6%fb1 z@Ms9v&wZs7F|jJ<)eHw=XEqF!hT)CckTi+TOxWe_^Q_)rMT zCP93@jN_Lb4&f!!p_R~f2w5+k2O;aF==IVgA^gECh|m9ER|v}+&|GK@#OE&y&}?WG z#A{7@FP{OehIT;c^9uOC0{O4l3?XmDBxnJ&0on&4^OeYW3Sc zt42Z#piK~;zn<5xp9igj_J;5V3Ga&e{f#(|Ddn?Dh zbt<$J+8)B&MndTDHa>sbz7YPf7g_;v>>o0I?E+{ugv_-EX@>axkCs3j|3`a5cssA( zz6e6*+jl^Wxe=K+a?FhzpaUVS59A>_Ra`S0q7c<#=Rdt?_UNn?)})Y0ofZCL%iOwKZHLS3(bO7KwF_B zA^hnaXf?#=AK>#3%!SrKeExw$A@mJ{c(0H5`Zh!G{oo{sF(2fZ4>ImU9P=Ugdr04M3G!|L} z!D|z*Z-)2H@Vw&2Sx%b?vMdjpy4qX4@9%a0s891HtQa$h(!#Zk++Ggz)jL z2SfPFUT7Y)3c`-RJQl+CsSxjNUjy|A+IR>(K7SL$F`qvY!e32-RzRDeLm_-&B(w

aqJ zL-?Bj!S`<%^EbO7Z2Q_cXaU4AU)v5L>+2&S-upVbf4x71-BY0@&_;-H-$2$kCPDKd zbo>V6zHu;wZ=%yTXG6=Nwa^xb@qddhf7=VqftEv?AoSTY0)qD*WbIi8?SYPl@U7_( z$9;?O-#Qe+w}(ND{q_n7oxZ&b;{Csa@88XUc>nLVLcF&Zo_iNUt02bjJsiT{Ple_| zYoI+L`~%1Q1N{DBJ+vD_=68_!oyE`wXnzR(y%2o*8PmTF8VKPZ@zpWLe4*}hPH>WFF?HBcN4TLgn#DsKhJ>}|IY_P_?M~B3W#I>1^(Zg z0rA=Q;I*I6_OFB(_x%R61lj=c*}qPQ)Ub4zl|<7g`1F zV25xR1i#z%gm630Z(j^;XHOAd99#%(fUxOD;PoARe#cs9H@lW2p+yij z-O1;N8qholIfvkP=x+8#r$Ni0t?Zlf`HyEqE1|t1{A3J-zCY=M82^)_A>55Ucdvs6 zLij0Tf6C`S-3%QI;b&8!rO9Mu@L^7WBz+HbTEWpj)7J|y#D3k5RT4( zmO>nV6j{H5$FF8X=<=)e&`t;*zee9*Bj?wfpaUV?6QF4j$K3<3d*FR+9K`EmJJ`|Y z^W(Fjwa`xJSO_QPK^q|C45G*2B4~3cIJ96dq+nm82**NE%!AfL2SU*?23id9S;yf} zu%0hE*Fd{M(crVj5{P3P{h{cZ4)MI}P$~cDzp+}+(hI}Tnudu#Uyl^v;^Y) zNk>C5c_9S<$@@Yvr5Cyhf*0RAEG}To1=~U~6<$+ULK~s|p?D}f9=ZbB8;XZbgEoZX zLi~2&G6+7?=0RIR@$fOw+E84?XBVx3j)dak+0b@qAQaOXJDoApH$#U*@rYT_P0*fD zT*8=3=0K~V{!m;x7DAs(`=CRim;vt@yq>W$6f-$?=28fmGj~JBLh;B2&_?J$C@z}> z&4<=P9Dmu}p_s+^S<9hK(7sSyJ`&=X%Q@z9m(6j#FUO7yw%a3~&w9gkTBG43(PLNN!vbKo-vxmWc<$h~SM zv=Q0^4TR!qcwIdU;<&4ihT^efpxMw;2%R3wadR8cbZ9x$2f^=gjCLa|^j#ODjvLwiDTEyr97 zziXF6yCC>K4PQKMF|-9@%+r@ZTcJatShxVX+vyq8L-C9?P=6?%36E#4gV5nwi=a)R zSTqvi_(gr8c=l9?W1o#4&lv`x=W{sjIU7Uq+y*os+5jC0#o|fOa)@J}2ao5W%kwzy zc?U!B{IL)`pAXOH^Z5$`G#gqAZG#SnVhQ7yEP>Ex$u8(vD6Zp}>sCTrq5YwF;Rt9R zv;x`=q4)K3Azoh(@9X!3f+?j~IvrXHZGjGj;s$u%uoyzt4ZMEQNN6qu?-#-QMeuns zvR=F#g71qDgksq+s25rWZG`$m@e(&ec56NU0;ShFX#A|FNYZaa%_IZFbICHSO#r^4u)dIScvyltcG?&@OVpo2 zV(oNjHMA!be>4VK0&RtkhT`pWq4m&#P~12bS_$pqtLP)3MbKtwAQbPI4XuOrh2ovP z&~j);DE_zsEr2#ccZcGp8PFPNZz$e17Fr5zgN}vb-SeOg(7{l!7BAkj3fdit^&_Fh z&=%-ODBe29Q$3pSJvCs@?0kj-i2W^ISK?k6t zq4>}k2>u^J-iMI?p|#K^XeYEEIueQx^Vx^tyK!+SKEm-IIUI^VI~0nKBI9QGf9$4E zY;J_&6B|Qu%fe86YFa4%d{QVrGdmQ2u`(2&+Z&4Qb3^f02SV}14WZb%JQQDD8j7#2 z4h8F~;#(s^v3G4K`p1RhpZ0~~ds{>CgUt|j9GC{(1RV>-57&g^wlUDoP~5&U6bI*o z;zx|RgYkDlhk8SC7jk~QIut+I9g3gw`e%$i%x6E}7>fVk_<?q`(Bx(H}a)nc&xuzV*yAies~HE%g4SqsEWA;L=eOCl$TN_V4fLKR$g@$GQN|0eCL!oM$}4)`sxMa98%T){CDb=*OY>sU0vO~>d!eaF9(bBST} z%uBmFp-X38I&-3tkD1tgX}1W@wVPy~=z|mQilH8?H+G&6;XDRh#A`f%lCHl?yT|i) zscU?quQ+IIi)ANzoA`73E7R{x&U&ID7C_F|cpFdgm074$YA7S|#=t85*SGS=jqyo3o9qgo(g9D~y)Xyr3XmP9DrA*cU%7@ zKf3G`2UGB=a88yK_vZMpaQuRJex!z;u^ zS!$W;(UClYVL6FBm!o)=H3&&AH-@i8l-^K^Kqs#V z46d{K1U9=2ljs66jThClW6_CTc^DEOO$|&`LaX^O@`$>CEzPwaTTlrn4P>N20(AE( z*BLq8WtTPx*VGneggo#0VL@eRWY7z*vfQxGRAI{VO5>Y;&%l6k*DTf1m0tIgKhlxl*i#%uns|<~yr!zid)Th5 zmi9_RIgJs#I?<=BX0k|`dN=(z|#Moqj6Y0($lHgz7 z+&Nx)hZyS`nvShwPxN)pGl*+&6+_iaWX60@d`iC=s9mhEQuoONEEh5~8$K)(dId6W z2&&|GT{QIO(qw6LS6tcq(qXx4a*scxO~2paHhjcW+$uilS*ls-wH}#K zoAk1ISo%1Y#n0yAI7-O!+wm>+7+aiFDgCeP&fw&b5IACp#ldsXdm=eUYZ=7|PZA|+ z-hjFub6$!t^kilY`CJC@8F^393f=o{-F%&%QD@rsUi ziAd$(R4|Z8=|FLB=NMeoKIeb3zO5c-o?Bu#$Um1d8X-LecaX1~P zEhw0!BpuV}m87Gs&5;!QK_UnK6Ph{BMjhLMini93eo2<*x0yn|=JITQgU5C`Fy73W z_PjV~@lWIF1C(p7Wyd(FC~2M&$qybgi*V%$MwQ$xO}%nkL5Tiiob?&8?}{B)s`4CJ z9e1j^ER`(>1mj|C!SA_X$*ji<@tI3X(2s?ns`J&@F0a~#40%y_%n*!J>k7>+)p`lL z5-!~D-S{4Fl(;a*)a*-nX1I^@m!nXSw?@ign0%VW*nFdUh!klGo`_UD5Eap`%oD(C zy}sfq96?qU4Moh!CMxrL)azvP7s%CUzb|tGAAoZ4H?5K!(<*hIq*Z>r<}4!B2CZh9 z-mll$ ztz{hAdoL<&1(@3WBk=fsp7{*co%3u;BNlK@^N#sP-k7QUcYnYq1v_JDF=Qu-IH1dA zGu^A|t9*1mUpaim1U1-Ov^A*jSNd8N-|mma_1T6b@-EseyU7jN z9hc=AteYd(r$D_%r4&o^JGk_^p$v07lNUV((oXYsoM*(tgruiyyG$M*Wq@I zjv^*!Dk_uB_KBk`laPsD%N50d2HI??PL|OGO7kT-;;Rd-`I*z;HC&Yun-vSRzO-8% z5!q<9SlaSUQ%@`SNKbvkpFPOYe6PiH$RfaKJda+@@A*nyX2b~F({^_;&M3?NBp%aRvn%+4N-7obRfFbjjJRh@4@A#kjMJN+a^r_Dmk}ae+-Mj>)H{$_iE#iIG z4-a?`KsLH|vd}-nU-GNGibT^)vb#N+IFYrx?MDgp3^AX2J+W9!u10w*e0NvdpbYST zHcoRfOBH05XsF9m#`{LTq@uj2ym>vc@ze{KS|4w*#A6W&8q?(u?=ggP>sM7f6j^a4eqQ%HiF|!0A+TW_j+OV- z*DHfyFA0&SYAAc+ri0t5n3zlKPO3(qsP1zd8K!OnsWB7fK}}Ru+&qWQQbli$w&fAx zN^Qw-d!jIVNUE4!$c=Mqr?O0_8f~_y_9vSxLl~RtiBHPT zTLMxXIuD|D)w0s@taKhT`V8BL;@g&UD{nHK1X|RXW&8IrGV*D&ww5h& z>&YGJHAnGLzY?S3$hE8h&3YtGM9Hd(dBHtF+^hJc_w!n&xuRQqwbHl#2kZ!=Xv``^ zXGvBKSi)JW;3%-w4|)xbw7G_h?mTm=p3dfc%Q71w3mt^YQdoNZ)ozs4z$zYRdcATC zGK1Mlg&xN7r&{Iv%L#pMu)5zC9*(=y zm^guhoRedqiBXLWcB%LuwET1~@VHdxglz6n|6o2wDP?)-7)y0_Yg@* zHgm1vrBb$uo#6%ntPO}d>s#fuXSSYO?8!_X^}diGolbf4p3M7WbTmAA?S!|yO5dXW zI=Uh)axCOt`YiTzUfLSVF;mNLIDi)8km04mN_hrh$l7PPyYD>O?!O`WCCvRKBLD#r~v>S>h*D`7Q24s3tS#u?AwEGcME){^Hyj z=VG@~rxk@A^;wJ|#^?IZudmsNFj}bcXx>c=dMm>7QgTbS@6E(GckZIkV#Z9hLF-%V zu|S<>URJn@Hg{1Ks}QNdGM||}$u|{0_sDO7-*A2_qCWSv=onE@?XfHO(o*{P^i0i6 z&$IaLiI$q%s;~3L1?{=3`N;W4tPvkwFX5i`dA3Ds8`hR>on_LQ9?o<&+!^w~9dT;a z*HAx!!_o-iK9~ z@|sA;q6~4Is_#e`)ylZUX~Jl%b1+SQtoTKY{^tBzG1|g2VYH2s3P+}9>ebp{sD*39 zP#dOome}s+MU?OC7L@s}SwTI9&f^F#3UBE;bEo{)G&cF|K8+o&&Yn2{Bq@&SJkxkT zpQBSPNw~QripL-6oQ`tJwHG!s4#j3^pE0P;L>VSyo%Ov)uaw3?`6FaozvlJMcMS~Y zsUuSI$D4<-oa4aKSwgzoWqvW+%GFibu?gF0X)0dIKnt5@f}G!d>eZ@HiG82yULEJw zt$4i9(Q438ecvf~okp+b96gq8^*ileEpcw)U9Z3QrB`cfzU89#YQi3SU7*%>8@q%* z?VDLouZbOK@Q+wl^|ZAQ6Y9KX)%!3neK62P0Zn+w^R?cEF-jOss_X2OEsX1Uvhguz z@B8@Hye)ZnGI*LsB@~cMjiy?b=WfZxlB>p~&O&wDdLGrTW<1A!vg}k)DQ0cl2C|dO zsd=&UHL-u9=Zfc7yW90#3I#=A;Mg455XT4u&6vtHP?@kqCn)4%dlk|=WP38!jgD`# z8zYs=lve*Zx^m*K!rEfcb4a|w*}*E_TI2kk#EwE zcTS??F8I=2K`zGH=KD@s*GhA1w^Qt;E^4P-u{?1+ zWc^CUr&}|FaHUmP6DKX8;AO~_YTRl*w5$E2t!W=r*XE$7??p)&aY#{43wc&9sJMtb z&Ol{6t!K&C95a>AO;=vF@JzPC%>*hnYI+W@_8Zfj+{#z6uA=Svm94af()YA^yVh3O z+v}}8o0x^nY3=;b;@Khnsy_Wb@RDxotWM_79OFaiCx^D^s5ghyQ~5*payqFY_Ii|R}rS|>TkpUz70%(Q^Vz<|~e z$G32utfAi_S*wY5Mvz*T@3&eN%Xc{OlwrD*?dKU&9cTn!=~}I^TWen%{Ys8mxz1yU^DOyF9hC>>D|N!Pz3IAMnXA&+YR<5+Xw$Tw5{D)| zYObp4FEg0c-%JD5Ock-@90DcfW4uz2r23uKiCS}lwVD>G?$#8sx@(^DLeyN(nsD6Y z7kRMm8@-Wo<{*{(zmJZH0g^*3b111NtUKF_pKJ? zL+IPgx2|u=_ulKPoUj^T=O3H(lt=42D)#O4Qyt6rH0foL=`}2sKCJt%$`4kD=Ynqj znzYf{QxT~Ya$M*7q`so;e{Dy}>a^A97QKvJlV(I=hnfoYv(2$3U#Rt9#OMFGZtW%$ z1HpKst9<+Hc{k+Cd=Mzj9 z$5b9gxLPFRH*m0}thY_MliO71Q!BB4p|kj;^^2WJCkH)OtX5d(L|jxk^ju-_n@@lS zNvWwDCkE_e(viJ~+3?l%64qy7JV|%TfwbJ*L^Zw3BKUk*vC}zqEcZHr%C1sWzr>Qus-!R42+kYR5?@ zt9f+7qYikFUrh3R7q!Z%(V9C{S(|k!^C@ZL7^tga7Q2nHN4=los}9ZeD7m;Q=2%}^ z2pQaR|Fo>z?uCz%mjsuS`KhIrH~T7<#Inh&?K($)=lf7r!@LW{TGiERP6IoA3SL>+ zy|R|J+L|KnXPt_VqNjPzrb{svsFFTy_Mk?q&e!xZNaAdtH_}xLE!tI>YT4I1HP2MH zn>0=5lXWeG?Oiq1Y6p`Z)78y@fpUJK+>)wNVuH0`US;Fjua<Nj{K)wqB@q}G?kf{jh=YV=83*kgvj^g1)EG# zjN0x==DfS9AFX_2Eh4ANo5JHbvbk_#eH{_AsYPeh^^07}b@{nvj~xDTd&pWzIuJi|%dt59Qw+A2!EWU2y&53M46` z?><*LDm}Qwv|9gk#%nss1+RLl-0BrN##su;WgY!&QQGuG@w3WQ$sb}}O1;!s2lyn< zOCQBD>EeYxyDq7ko7%5UTRCc{BGo48SwB&hbS&3rT4Ppv<#V}ovSt|$TG^Db(;6+U zPfPhWvXY%kO)}fAPjlI+T;(3AX;9Vx!%uTRoathmaBl93T%}|SwZvj&SO+OYnYk|R z3&mI^%y{i1R`cXm-Lz%W8Y{a7C+)#xJc~-dn8hkgxrR-_s`n6C2VLtSl9rmy1go@A z9uiVby+hIzt4qF>rim*Z=1DXy<6^a$RVBHMCpE+SZ@hSy&3Z%cz&+t#UgVZ^CD?kE zed)i#|M2P>3g;_-CVnZS;+!6*=HyRpzcXXm^pVXWO?r;jTyGk~l}D`$T+d3|N>R1k zezS`+(6e0g6RF((Jilr?tmaX5C24xLEjVif`e2>nWW9GhTc{X;&NiBw<;{xv${z6FgQ1Ie?e>wt3F4cvqY)r>vnfw#tXpO-X{^ zGM?rG%K&s5TGw`(4y~u^nDu%&&zg>{8aA~gnLmf?N?ofX79(5V5A9QHpW1lUO0LY0 z$jf}tZqBTHQPW!tT6NdE&HC4V8-f`QbdjCRXmL)o-rc^7M4bR5RvCnq*kgkcFf&R= z3%GvIW?EFBteu))eI1a#i&pVq6`|SH7qL-o+lba^va1?r`w-}WbXMBpkc~}Wcu)Nv zUoXqY>)an*f!P4YrFYrc0&7*bDBDxpjL2lCvD91SrcUTo*YCUTlFfBNS}imGtEXny zMd^gjY?PaDyUxJYbaB5$c1ArJ<$0NkJDO^D3Z-3Ht_UJ#fTfa0wxl?jzStZ2$@X-O zw{?`V-EO{d2=)>$YMSE3Y|nm1vKtG)CpFbvWHo`xCE2<=$nort`F@dVy`;IkB*YXq z5t+W);UuCqQ=qBMMS5hcQ+|!RuQ$mNe-atH{i?(C!~6ySzi&W{wI_p@%wcku{BAY7 z@>Pnh)jl+@dD~G@Iy?U4V$Ii7k?3njrSl<^lAkRzSaC*Ar?lW@#Rr{DkMUOD6f4hZ z+o4m#jtM0Pw>Za)=^!l>XGSw#zEp1MVk-@Z5sPE3#P~j6x^@ZqoTv3!6}*_|)%7l_ zCYEw)g=M8XF}J-%#>DJY9Vyq#Cd#ne%XqE0@x9HLhIQ6Lj7l?)GCLvEf|U{*2GYZ9 zL39fbMpe0q?xpujthy7pr(^eiAnJkdsV!QQsjgY3nE#RxF>Ik{Jhr3yO$i)e``w<`H47}F{?!MjIV&H2ryjPF4gVp3 zcb2|JHJfQilDITZhnX9Oh?Ln&PNoEw}1r^d_Y&_E{Zb+ZCt}{))q1V7!JX3S6IA#~# z##}FJM8cWXEYEVAabl-o*i*`8*s{LdR*yp_BSuT6Piz6WQjtA-Tc zc@vB3l8X!`hB~FQn`Pi%{*aK#P@UEHC+fG#Go@e>Qxf8O*nDpBY{EO* z$L=Q0_9gPOIY05gXOHq-GScK9`CAUO@;A*Re`aK_`KG#f#Kya?N(wLFin(7?nZ>-ux7&NwW}aLnV{aKF=N5U<2=t6(Z^TONq)JDQz!cZU3nexI|g;$~(ufL#< zs5^p(-ODrd;HiphsC*Ealn560k{|OQzG%;{4Y#C``5@lq_;2Zn;(0&Sp{D+=R->yc z=Biw3f1c0lKiOIFlR^AT^^yseK91F*%(sGH`L6xCm`EMlQT?`W>~Eu=m9^f}5;M&} zc$jq#o{m+|qzi!V55J;Bt&fx{ap&Jjrd#0Ge2AO>d6l+m1J|@tON^|m69$Nx zt=AHtii`2+LntgP<$T_d8r;e{rSl)G4(Ku3{%(whN`C+(pWch_)zFcY{gb27P^dUK zA0pA_Yc(m>nLai@2+gWfy1t^kW-j%tObp(G)caNSPSK{5^N4*?W@ODTHs_5WVwc%} z7r?#gu8}H!V^;-x;+zt7Q6EQ5i2beNWSyJ&SLpO6$R?)bD6bc*;x&EoS}VsOm;rTC zyu9hhfq9YYL+8AN4ewy64(3N6>3F4yC|L|xJCNE6;R{q~4+}2{UC8x&JK+0+v!-EGs(u$@{#wZa(>+f#stvMv6p+Ns`Yb_OAFAI~^i!X@72 zqyJ`u*_E!PH@muHcLzWDRQ`2t-iTP@mQ2!D4x?^yPf)WF+Nn0+n~r|-B4f1kO6KTS z{-Rv`sl5!JbMXf<8KXQwrbSZ|1~)4qsa)55k?k+VdXHQi>s6i*I4Ax83`uUewvnDl z^~{V2isO8)VWzRr>(2H(nG>*1$n~+hCl37Cj;2s=yF#f_^h$e~9d9^8+X>=ldj*as z^MLr6^)bUegM6s5z!2M;h#3Kk%8z8Y;BR@Fm zG{ih$w)<0b_j;nS<+&RE&xjTdWepMwB{?-Ap#fl+4%8*_v3Y~2;xpCPghF;X`)zgM z^3jGVG5wM|uiTH~fggya?UTxSyf2^FoXEXZ7`Yx3OaoI59dyfmfgX|%!YX8m*Qj`r zhs7RHsjG_j`A}2C1jjphC+bjQ5?}hrh)MVmRqd)VTmz(f zRKVCI9n>S>3-6ukxQ2(Sl>VBrt%?u7yn;vHs#j0>Duh+}CWN>*lT%C)g^RGH+=ycp zQAGvMdQ_x=dBVS8;&F+XsAReqEVq^Qg7PMaw50?O2u{l~LwB zGT6t&k;t_c+Dd%lfzB}}%IcKmL^VD-OmE~pP}a99kKAt8K(<$2&I=PPjGdTCk9uB^ z%{A{4!F~or2MPzZA2zRI7jw&MJUFg%aTKH|z>udF(Uv$^&BcfOp@$wN)8gJ|xe#3e zgVxx49im@n~tv*Ev)?Ea%Ez$K_jP ztn1L{$zT9P5zj`qUws(tl}Fy0*HyILMP6Psbq>Znz7jy9{K?@QZFZpwN? zqGm=kaQ~^-^t{(Oq!tcxn&R$72N33CtK9cmgU87|cz7RV1>9EDinLM*C z)6M?aQ_1jy#7XDCXJRd0M*FIFP2SCGtNGVvHu1N4+WZ^4R3H#<@~>^%Sb$PqRXx0A zRW;spt$L2c#rh?CL5#Kb(C^lA7Rcs#$@CdZ=a}RRubYcfKcT$AD%s{JM2b}oN1(w@ z4mq~N-J0P@-x^Tv3JY#2(rl)1)zq5B0#eEKdBgBijxjEAzKuis%b~oHbY`seKnXw6 z+3^>3w#p_BW$F4!vlBeZ4TBeKE1-C$F5=GSaqwYkJlSDQ@`O-g%Ut*|B8SzWcfw7J=| zcC0f5(5Xw-nQ_NonxibsOMFll(;Th%#x6;Cw*1YrMh>@|7c4!EvtGno^odPk^u5M_(UXty>+P(hW--Qpj(xNRV}=m!t8O5Z#?vy^s>hlORHN{odCX#l ze )jc(0-5Vb+MlV%``i^5}vS3RfIdychhJIFG!&aUq0GYER0QC>3?=LV}cXaaA# z3jWfs&ic&YlY#F;uES7n8p@LIycSn|TN`=uie@9j1+3+H4KKy<)Z%4(EIxPJwGUQ-RGG_q z$C19SMq?FouZ{5XTKUd|$4*UNM_ve0GtX zs3m^lueQ=A$T|gw9IK{jKho^=>v@Ta=e|YC;-!fB#)rI#m9Z3?w&EkaRX8vCDB2OP zaImNwpDI%{*vq={5}$bf1OGojol+ssyG=x(>6I!xx8y}0jiLTane+_32IBvp!Btv{ zCN9vA3AxVpfB$gx5}z@5=`#kVG0cPc7`HS2e?j*DV6Ykx$I)@5qlw-;^45QE1Li6o zQq(__p|KAu>${>=VbW89*4fv%P3Hkr-@%X0qIf1KFWcm!xX37O<-V=tf+tlV^*vnr ziimVhFzRLe!8?|zR%y;cw`wf`4v3;Qv>fyKHHx;T)9ge1k&u=vbjPMiO%KayS>S)d ztI(@IN4knpiZ4bOOk&@WeCU0m=F{AN7*?J@tuXbQ)IvgMYe=(CeU8@=X=iEgl~Vz( zasm5nzL$0>vt*s(?6#Ou@F?S?UuLNBAQpJXVt`L$OlsFYD+Vf_iih`P$u}BX^&2i( zvdfz*t(ss6$#qX-sg^>T^f$e0V{2c=2k8+%^kuW!dp2b}p#eyiD9_G4Dp zh3;~GFrekLQ?4tS=y~LwydZsix?TQR#lm{8JX<_pg9l z716r?(My>iq!1oXX(^lA`pmCAMP$qKmW1}jE?!wy_JXcx8+F)f4VJ;jd@UWKr;?u-Xwy;6 zMdqK_6X5Ui|5sGR%qJGFZq3eyC{!^frcajT{-4&Ok9eWa`QB&8`Br{SvFAB>;6CY< zJSx`Jb2%#6hkxN`=oXiVrmWWh4W3I;J7a^2B|qt0@k2kw3)IU>VP95?Qa#VQJ>%s# zihe3>bL)%;^0Co)m~Et-2~XKqYEoHP@kF2Y*Qt;jnj!M_PsCb8iO;IOW-wGJ;rn8< zrp(H}zo8nhIa_%PPQXWuLE4IPfBy!*Yg6T#VOnuEOj^|3$5m~&m{>+AIM!HH_+cKp z*Z<#_@MiIBsWUZmFqnkGBF*hC8rx4MhD zsJ+c-n>197N%NR?2+cz$u}wO-EuUK=U zZC2YEC4@W56V4Smzf~%FOl!HwJYnZ{O6<1cN|~N`Wsm0X?6oG$%J*Q@_8v;jWK~@^ z)q979=~d3Rwx8tlp{l3#Nq#SXqK)TrjFvs1hFhuT$zp1{WIeD&E@FW3>Q7bw;?dHC z=Xw>VABN&5dV8*OKK=g(D)v$Fd%pOjkp56XKW*CZXt5URbuNIPM%^VPbcL|Au@*Ao zQT@KoDWE?{!85Aq>PS>w$S|Erq&bli z59Fp9+iOMXacS-QJ<8(T|IR}*y=9`+8Z^*jtTzI;V$cT(fB~RV2|Mvc0 zC;8gsDYtT6(J+3^r_AAaeq0ezE%R(NKhe9HSGcpThSqty*@=+@JQc*qnTS*N)tWgN zTIkXe%B?z<9CX$x8;_rnZdwRq?r+6AecL^`*iL|gF5{{RH^&JxeuWcq7Mr{eaqRFs zUh7)wl)jOmYbmYJ%UrlSc5~jg4Pjz3l$#bLJheIt&K?-!!ddBB})6cS!+~ltuD@#?+s?km3hukxW_ETe+ zYl*yd`N-j~8*b)7k9y}W$_?!rDO=WU+Xu0nscKv5G0hg@SHml4FuW^kz?k6+Y&bre z*CyT;Sc@6^s1vyaN{WF|s*Y+O z8uO?a*XEkv$^JlIKdox0M$u;pW$415N!$9VnxP}zBh@)yT`FTuLDT+2JU&VAP^|Le z>;g2U5*PH*+>FoT`EDfW51snu84F|7s?@BCr^ia3rWP=c%(K~q`h!K>fd@a=9rGVq z_WSp;B-Jw;DVw}-q9*f)4{q-5=+N?dUY(N`I?5rHepO#ZZpM1YT%f8WJsnfA+PRaw zKg)9{uPK)430ZlbtKzZw4%!X(^w_mJZat}TJ=I<1vCS8t&H^X^dYQ0gUCJ5OS2}lx zuWa6oRv2PpN zYS_L{IgjEHOSZIkp*(Qg;yjvp*8I{(JdGtkHAb9>Z5fm36SJx6Cw#XCMn#4>FOx0ulzb%&n6GN{X-r%= zrRzbWkA|2_1qM6kk;ha%(A-`5Kr*xaSD#xvO%slCIqJvi=S8w}ov|hm|1`fSTJ7di z7vq_b>(?@uDu0ynv5pGQ*pT*MgaOML*&v>=%m8cLC6DEM<32X#*vaQr@iJg#acY@Y zt-AF(#$v8njjww4mU)%JRi=*F9mj!zd|q|0$hq|)kgnH1F^T=s8hk~10A0+PwMk0BMc{mEQPQsfA7ou z>A3W;<^E1J#44MzJIZZ z3^x;8;WzaO=3(n`x~uw9_8G(~-H1{8ef9Wzn)0T1kkplFXe^VZv-X4h_fCG(|K}21 zsHRyQ$vEWcdKY!OJX8OGc1i?Er3F}~)jPU4a9#p*O&gy$u^0pbO?Z#T| z@$s7Dkm#f1Z0a%9s2FOBktVt5V|4aBGUvj?xs&@SBqQs zt`c&h80je0YJBO2@Td6^zWS?mGKNC)iQOfRyr{P|;%PBbUt>JoQ;N@Mj}`H%R)wg< zKLxFVcnn@jzx=6j%TI9q*pJRQ?ar`#iE_B#cxTj>#b0R8-mY#-|k{JGG_vlutoh)&jX3O7_(G+_no-+bs( zIFPO1k(T_jPDbC<#}V_Uak_-q(O%U@<%)Dv?Bq-H=BchNiS{zK>*QmluUrN-?X_qf z$k>|KT{e2u1s@rUKG!*QiqwLt;&@D`!;il z@L^+GRBid;kH`;v>6$lcMB>+8OK;nnb*%lGUfrjrVL}8m44sv7!Ma%Yr)qe94w$Jv zI}4oSp!&@t!yLSn3Fbjr4EKs7Pm?bzKYIN5AkQnG&n+e~9%xw2$O;Rk%uM#>h^|u9 zbeM9J+N%A$nI%@Ts4CUcXa&Onq!8BQXqI^#$*LiA5k91QrI5of{(1_$qhdqHw5^WL zw^B60*xpYH*Y%xP;Y7cZce2bk*p_!mV^4T1L@^sl`nukk3_ALgW_-!so+SNamRHF> zqz&$K!)44#Re3PQ998B~^1bi*BtzUuCRd@cxpGK5tYXe=lA~-LT23;?B$Rhmj?Kbr zmSgsNh45A^K$8Bb`uJH|`As@g06)rmB?DN2Wf{(~ptH;*?surW`*VzBPY&Qj&Fbed)ss zvP!*A(${OdGOa1!yrMQ`b*%JW{pztjUEWQ4J4#dT*?dl2(<{-_Up2G@(@R>U@>8pLWq5mJUQ}K7*jlcGsG6yI9Rkza>c8*i3 zHM>r9G3B*!QQcHAuUmd%cJspc@8wLt;aJ<=Hs)m)i^)@UR&?kIIv?qaqNY`ow`rmkZ70Q zRb#C0HNQw#`BVO(VrCL8+SUQFXe1uFf4H9AyrUl6z9r?dB&c?tTrsP8(e~wHD{Hdq zKBVR_^P-V-O4oe4Kk+{vr=cU0bvM{v7!B!gVQ)p|!aRi&eJLzgXTy zFQuwvy%80-hBvuQi~ue7@gd{ovK48fB)phxJ61awwS8>aNS>se$JhL6M@^%Bq-4eY zJESE)^KR~^9OsO*!#KpRSjuXf}JIAG&NUz}|;>wYMo%~sB zI1VopS7CrFB2rz=WhX>|0p*3^xvW=m6@q2ByN)+hwW5z>eN|U4Z$&h@%?2h5t_`ip z#z&TiadsAKiHJ_B<3Y!gU*2J6=b<$>QMGFIv&4?@=~;$P@uiP;If|PZTorsWTbW~RUPh{0U>?I})lhSnX(9%A$ty!XUieG32_4cJ zuk^C&Nx7`c4Bo@x0nj!6MZ1pSu0;Z zX0)tCinzo>;1RzQj{oz|rMlrlGW6Yn{BvTc@phgh8(-5QGBAH99$*U@hOMNBG%>5} zoQrn3k;Ob%2npn)CTCOu?#X|?N2aQV&lGvtL=H+{-B69Rr$qAH&O^o;8^=k$&zw{# zRk)Z48Y*#qjw;rfYX4u??Fc2M_L3-^7&0VQ40KC5!q|9zOV`J!5?7J7-1KVW<82D@ zrc9wTgV8(kpq@t_)G6W2oQrHjJaO2pU-)wM@`@KJrjP%I`)rg)v1(5mWY*@$20nuzDCE_<7u%sS;%CROLX@N3vnzp z$bU~sb}Bx0pP@qDw40t7D(n>;t5{Y2mG3F%ou2!;PdcE2WtLRIoXQ3;OD!-x5+cD? zbd^bUKyspFj&f4Jp#~noxnB=t$^gF{JMbh9k*8zUtuoHW+YPZrS?YvMLYXV@upY{) zj8I5Ky#~boue)5^mEE6WTcO$AZp9?}+-*I@@ALTuMs4~)GPcUv%ts2aBJg3afu1Ku@*Dr*MSj!icX8KzA~RVlYupw*nB0%gnD z6yK7saYaWv56afPm$KOERk>n$?RBi|r)|DY=#i9s$`i^|dZnA@7k+=<`IlitI%N~oOB;$X5;aO)lVL+@`GH5Havtr;w|Bs_u(tL>VJ{75>zevh_rtxNJ9 zUWvDTx6}GwpZhdQ9Oq`)45c8n>_#2Y zQ3oYgS(-ejqdv-It?y@2k>wLr7>lg!4kZ&*SK{_k!Vvzj{9#1n6{EBc#-$)?~#0 zR}MYw|E(*~do(1++gvS$TwetaF8b{Q`Nw84&Pka(i&L*3$GyqY-VeU?e$9?H@2EdW zMMh4Qj;?e1O@TOG^;&Td_Nn)(H4zGqigNAZ{+IV%mi!|rcGaJ8=gwsy4D~Af;d}KP zl7K%nYsf9y1&QaX;oW5xqXAlg2lpMwQAq*jOtJi~6HL`l;9nhsf;!Cok^EN5vTIIY zkVIwr;9GTFh}Pmz)@tUca(74dQ@NUISHuPL ziO+ws-EzU>ZL^>!nC6D)U<6tdgdbwhM~u`vNpU5z>5*dOdWawSkGcTUZ0(b}nLkSZ z$8H4Q#p4hy$?fWv!nS5oD!UH%8)KDsa+dg{+)Hs%U!sgq_C-%|H6O#{{FX3> zvX+CDo{9z|qMqPZ8-><(Netxn<@3GOGqMODn}_SyN+HzC8C_J(H^fJ>@{D&YmBFzt z(JE-P-;`@n?gQf07mU_?ryM>r#>y*}7+A$HC)MOyetEU<)I4Y*>CNLteOG=OKCubA z)UlDseXfcZV4{v|@^SPCnk_v8gbgXrF{VX{koX(amTRsJvb2{Bb0t=)2~Ee1Mw5c$ zERf1go!wR>IZg#B@l*CH62?!*`FE~XDZ@DiiI=(8ZGXWW>^6X5J_ieY-W{VVUgdYG z%%iZYY-TRBy_pgNAjf*g_`l8*eVMPD0ikK1h_TigbX#>LmbThSIb#3oi;uO6AZJ@` zv))88vfOYEs^#NH>GuddNCJDm^;vo+8yDv#(^JROsN1nLh9r5co!I5;2~`e5navbL zHswazXf5+tiq?7%+PEXy;4~B7{39IU)+!Lr7g)O#*ZnrO{z7c8CQ~Aah9!vf5 z^9YKMd(7r#1;+RSLv8t(>k^jA|H}hAgkG`_PqbQwmowAU&DU*9|33<-@aji>sO+0k*nfwxg6(M`mWT6;}sjvti!Mh&!)fkU(#C^m?cTJ^2lW&&ZV1Rn23|S zEWcB#vKR>$;$o=7p19`lg(H(vTsWpNX1ig@Rw-nJa)N_=y#erSqLjnxax9m`U-O0P zp0dddH0K(Kw5w{VpXG?p_Z+Qi=_6zsh|PN6mR&{NN*Zxd(pC-Q`5Gbhc<)fiQLt6f5he}l*;f`O$8QH@AAO#yVjrho4X$XOGyE7}9LPVWTso)No>aRO$TBc%X~^yv!@i=5b>~ zTy@K84SksV9vw6rf>*ouF`C*12h8Cys~=t~H9}cx@`N?-=JCG{x6HC0QmtR?T+>uf*-pnxfY2;1* zqnlSzc-QkcX~m@h7sw7{R{#JewV{pO<<_6gnedMpKH!nF5Gw(ON%=MKqhlkb0INvA#kUbV*7{v5( z!|bK-5`BXF$|oM3I?|+paY(+X#l`kGFKmvvd|;K%V=lWa?)JXwQ<;OMeg2NQJALTB z&#>*eY4Im+;wn$UIj&Xvzz~D1Vev`DoW&dU9M5}a>Kb#>OvS*t;5GdkRoP*x@ivYb z4}4DivCw8SBB!Y5@vFzK0+fRscUHJ&UajL2yJV5w+w+L$zKV@(bXVDf&9Sw3VvGD^ zXq07%j|VaZ)Gy!Ql?q|zXL4B4OIVh7A~rSe!3*w&uQGa;y~f=9@5<>@SZ992R-doT zSL!>&r?M}y@y;<}H2vQ*8iQ=}wcppqyDn~^6)E1x+lUPF?(ZsIik?NV^pi7_{(X8{ zRV#N@#_NK5{xoR_UqwOhCOgG1-5lYSx1_OdiGS?5gsn86Rk75uJ`Hg0!SuAdG!~3< zKCxbl%Q(7LF>jJKdMvAOm5(ugO*J^5*~|QM4)PImT%SXsDgJ(rv(@)#lpu6YgK1^TNK-?2 zrH^`CkC%_m>XQXbh*CE$Xj!>R@gmj{OR@nT5tW9hsEK`opKKkOz?rP7LYLmLtB;Uc z+FHp_ujJ$%PUU^%);bNCnWoM(c_4`>A7h_i_HoAF@_T0L9yGRWJ$xl;Id0b>G|fYb zLYX(Q8IOLqSo#bi-^D)FaTRTnZ7Gg=tmidI;MUHP$WP~YnA5D*Req8_k@QI^!)AdB zq4J1TiPAOY6D!*KPDILym{aJ^`k>n*qI<9Y>6u~^vFl2Eq>ZiTm_fUa>9UXW?yt!U z+IdOE!}CG{a-3N0aE%O&_|tg!J+D$dBhMMzrepGONMRs!^BH6{JB3#e7!fb-U$3S7KCJvjb*+Pm{`YU z5KI!IrubUlns}HOZQe_JA5|jDPXCXtYxT);Lv|%ZcubWc`4yN6(c)q@mA+55n9o61 z$p;VF`rTVaW8l@-EYY358?uVs<%9A64q<;{G|^{X={^&RJ!T4-V@UhVx(6OPNIk&gOui*g=GCY7Xby#L8j!N;D z`AMsYxyUp2>Sga@{g3U)ISyi7GdKVW7`ZO7Hrbv|HOAL}I!wE!?D}~@sA`$!5Or{L zxAsW9gu7~-%VTt0597wXe`7u~yy7=uMx#Z_hRTmvidMXlmX}`Bk%gS$H#r>A~%6x2-K+QkqXIsNDLYx~+Z6dxPy z*l6}qKDstGmyegDz4uza^%>NC5S~WIvGTX)dbBR>@8(9O=V_sUn=*fTESmYo^I2)A z9_<3SDh_E})vYU2(%fwWW2esZ4Cl7qk{$YUy!d0;^&1~!&~#TuITe4afwAs*?si+8 zjql0%c|9x{RaoY_KKU|bplJy|s{`tiYdI0Yn)IZ=Sln$6;haA{noP76Z?h50#Mx(^ zG$=i~j|{J#Po)l6Qc86n6bEbg((%5om*v7ld3=-=_qL<26ubKI(kzR4gbK-C+q3l8 z&1~|HOGL8Xm;7W=_NbhW9icy|%^CEc@(_QFcF*Ilq`Ad|E$ffA5B**-! z9CkS+Pv)J>TZ~8`ORhtlLw6m&ZF|lKG_anmhXQkukuYn8t?Pn$0CdFoZv+FH<)-^_OKQl87u z+T7w%j*(as@2EM^YhzQrMvnQ-tk&85>~MK2w>6hj*_d=o1LZRH^FCHavBjQUV`TrS zRI?7Y!WGZjXo3hgFzV~M4o4?OL^O~t^ z`(Z9f+b8d`nqg=pWjv{eRYQEKJ}7wR!)p85rjILM^gN|g8A1yyD>I?AG0npp`4ivE z$;O-zC4URGZ_As=7cJN${-j@#tYAp|&74BW$bIGYBz#js^mgL#J}y#^Khms=r|g~A zlkKv07@#)jTa)zvNDr+AiQcDYY!BSt;^2H2m7H^#d@R<_EexzPEt}*a{r8J zXY5{iQq36M0L{*qjCH8dS__ecS9rDbf(FqDa&v2!I$u!xkp9I= z3jMQpF%kL7#VNtCxdtRflp-f?>^1%Ck9<2?tgbaS;#*}&v~28FBQp;&(L~tknlz|Q zQueleA89FKuw%6VnS%)(!jQvKyJ1VT*FTPPIlFR|d-R4p>tvmK8*M-yY{fmGVT=1YUPJ=j zUpYTIPi)H~P@b7=%!q5t40UB@G)dW?8AfB0u;$B%v++H?qWbZLAcFZe?{GgcZV><^+oFWSu6&RN!WtOZgsq6hqP zn-anwa4CNaB?I`6QY;y=!l>1m;%wm)9UdF$M z16iSBjF&ttXyo!R9sTm-lj<5YgL9ita2x-?hi|OQQD=e}kEm5a94dE-9mwsG&nOnq zMCKAbvNQn=GkzJ~v-V;yh#@jAC_SW6w#dDeF)hU?M1OTg!-F`C|D;E*JC*fAW|4?H zloPI5-NP&ZYm+7S6Krw$lg2c}Oj%DfR1k;ZPrq{Z#_J}mEY$|+eVh#lsbbwCua2Bf z=W^r@f8do|vM=+8qkWVna5_G!cfe;GRu5t~W{j6v66aRLqqb#)D&z=?ODoafY}fZP zy<~RCaSrq-okYuzk!Vax%mPJ$7UXZ}mn}7uf)}Gx%0-rHbdAxj$(pzUzoH$8G(fvZ zLB==op){b(SXL$)6X&=uV#lu=ag4D^Y!O?vxfZA*76(_f!+zia@^s!T zIufc#nMa-(N!ZByUWQ||YGOL%y&Q9c77OAfhgY{`kq={Ek;KR!1J>S)iHM7~@O_DU~xGIgMfv<%e=J{lNAmw%P0BI7aB1 z0Tcg;&t(@Q9TBFZv5=R7cky^hUR|A>&N&`g9z@=PYH4w{C6Pp=%oZK~Cmh3xX=WK8 z+LrneAE5nHQ}`8*voBZ>nlS!KYEBtSuI-NOnmUy>Bu{;1 zmc2yiU958{R8e6yAj;z=<=u^l{RtsHqrKc{Va4i8v7j|p3e_(XsJt%*eoRZFF%7%W~SK);}RX)5x}JCX^?L=-uB z7@b6*h?FgYUMWu1V#X8SJ0-8lEbs(xv9gr72DuumF#53Vd7}>HYHT9P^f5yMzKEkm9QN?t5A#8LAQas;PHkku2P0f@{La%EfE2s9-~IAU~e zG1_6%qh7_fxsS!B?(`$4BQiY@7uiOEX4nOFDUl?j z*EY|nRol`e-O>uhz{dEjLPR7FCgswJh!ds6<~`bo1fpjdS&H^=G$baYg*d#1%1LaY4O<9X_DBipW{s zi7dWs?QM}*86tyeZymtKX=7xhiv-x1Kz-$H0PTSYneh4~*)sf)9uuuqY4>cEq=m+X zl>+Mre3m4#0rl-pn$#sNMOnbh(?cCueV5SEK}k6sX6!NXsY57N&M~vWZ%nG60NNCJgSVR4;F%4~GRAaEXOyuq6p!b4^j04*&tWcY+lxO z3_plL_X1yyn>}!$Nj0J0Ir@#ysGmgOp)+H&W?)EFqCqe|cqGRiTrlpAn`*C+1>~6J zDwKnuSx6f)?L-D6c21X_G5w&@rm<$fX)BJm#uF$zd1f}a6|K_-IEu-bYvh& znBtpN&1%GMIweOm3+aNlA*m|4XIJtbs>4I`P}$BgP)id>8cfnb9zZ?`FT+4A@)H+RTAfmKt9P$`2&x z#+Hs}b9am|%yP4(VrvVzQ6@jG&92}op@5nY34n9Tp*yyc1nWkYJQCRDpVSZLbna=~ zIb6sB$OT;yS7b;2nfEyGj)#exXDY~i(Tv6P5a^9|g8@_>n(f_r8Cj!*#ZjYLSH8ic zt~rYI?b;v+Q5JC&LZNeJ=kkg(Q)$l?LaRM8!B1g*5u=rvLvmJ1-a!NBrRc`Ag+-BI zWgaF3%H5g~tjA=S;)}FUiD$&3RWXYZUo>Q(e*h^-qy<|zpJU@Ua|(jVV)5Q!;2}vyHIQq%Q4d(J1e-zJWkD#Jxi(PiefVLX(!=FQWXcWdkjs3M`lE6+< zsV|9flx-G2^7<9OB9kikg~N~- zr0pfaSGu%uw$S4G2WRNh^(*m*HZ4{T8?{l_P{ALifm;eLJ_=dwz`7(X8`u2n8VgY1 zWr8Sv2P{&cTD9^*eo6PWyP3_&crO{)BChelR}5#c7;MShpV8Vh#1HS)HnCd6hq3OC zaZko8zW2qB&1S7bnAEuE8F}jKRhJ-TM1OpPUSBbc~51-{TykyL?v=|!Ll0Gl> zC05EB6xXxJ2WKwu`K-@u4wb3M#tZ4o(2VgRvlO6Y?Nz3>XU(Kc|LP;zcn^BJbuGMG z1z1W7j%%(r(sPjH+EUKYjQ@>rhb!alhg5(qi?+G4Xq&!DN6KJGay|;{>d-LtD%TFk zkSW&_mz6W5qF;HoD9(bSJ+Gv*?P&=VJO1wyT|x3{K~hKR(Rlfh^Gn>2Yl`-zKI_t8 ziI3-8?Lz;+*ZYsU@da9{vp(Y$^a;z+ST8v(Af zE>c3p=@;Ai&lO9aiJqCgRQ0?R`X(O!5{z^sOMIq;}wXVcIj!#;f)aXA_um4~( zD?vpTsyJ!n6+1$mS$m;M_!L+q+S|mYNr#Et4qa*T_Mju6r8D0J#m4}`FOk7C&v}Lx zrn3uY{nQ1o2m;NB)y9tcNTJF@wL(4Hk88^#)QO`9Qbap5Pu7YQiS$vVNhQI$mSu-q zMw4x$eb{!S!nL(D@t&juxSl+B9s0#$2k1*U(h(!yCwr2Q)%(hv-md`DXve=r=2z!A z9D5|%6Srt-a)c7$KeaqK4gT{+968}_d+hjSWK`qKnP^8H?!xwIKpNlGJ}W%O%6~X> z)kjXzkx5T+c3tm25~g$UdM+)6S6ZlzNUqt3z1+E4>nmug9t_9Fwz!9UQC7Te_`#Hu z%EMY5dG{TIXQCI%OevLmk^=~Le2srZn0{ub~lJH-bd3^eZU((|(L zi@r`h2%}_HS(Ys@ZqMhhmbfe)F&DfEIn)e8DCO_+4!M?muBQjzG1seh$nP?RgMz&6 zW84u+Kn*Mk62LDq7IVKMflRu=J1)7}E_6y9llU&92IY|b36feS{iypopkj<-7mRa- zdm$zJ$+ABvjVgoQC@`Dt@wzC`WMYlV6m}yrl|TS(>-8{sZ16@KhR=XD<~Nibfnl+- zCF55oJ+Mz%&&C-_v>`p5Iul<-Py3|)Tsz3sT!TfMf=s1PZ7T-IFMimxqb=-FV=k{m z(Flmj@LGJMnY5HV#>foWv-X9a*jLud^+_Jp@NK{Bo1ZS4RrUtM#ujO9HDDSFzmS}a zFOnr^{o7SJQ3g9Pb&;pRcaWuIxh0GrWw3jLW3F*qgga+#_Ngb1L4ox@>Ky&y8aZRH zW}GFHY9YilIg-|eJWWPz=Q;VRlmT-*WOI<4i zXqwg0M(M_C1Fzia@CEHH=L<$Y@CC?}w#jdwFBm%WzTot6ELzD-s?!(1r1J$+zeGOP zC)6M*9P?L@P>xrnxtA}P>_7!;>#Dvh45!Yt+&|;}^1E_zdDYbSzv@b2`$| z!pV{Tnd^xBrlw*MzmjX-aP}ehe016X{+aLqwjdClmdhah+l3^9w3zwHBF)Gn$U{9x ztf`L{(Va!m6O!}n2){96c~eatSs z-DOsm64uI{-;n1(&6KMRC9e`xcoO;HGg)Og5H_$Nv6^QRAsKvOQBBvW^!h5SA)iW} zTkiFjTIy4av16=Q3?$2o3$wUHQBXv*MSMixi;c}frlN0Pck3LsEFn#s8zGa!;>Y5W zR`??%*+*?>$dIq0{3szsS`!WE#tN{5BC!KUqpqQmGWmnlL{pTZiknkWf*H!>M}6Az zsBtKh9C*xV5q`O!$%#<%0gxCGzB1^7ed78OwISy*lFyPpwHPEA08#s32Qm#X@M<59 zPklc~rU6T>`b>^nON^xvzh-cvGw1yW+BNjS(yV@&bK~E#oCndit>s!MpyvI^&jgD zx3oXxlF3>@O zYC}|6WL53LW^jX6tx32Vj+MK#5xG+~R<9~|6T{S&(V@!Q^sJJS z?+lB+YU~cOrksU0YkP{PoypE7q8I|V;tRbm(5kJ1wv;wWaYuzg31ZgDPUg-FgFKcESi*1nV?OPRq1s*pq4 z)a4DlC6d1g_{A7-4%7n;%%!DhUV|-(p`=yh2fkU#a`>%vC3ayt5INAMaSS}=YZ!l) zdoL+p%*?p{$H+)*)je!leLaNcriEi{_mM>S-9^c!3_T;zrei z{CMrR@CeJJpY!@u@dWU}v>z=vK1!D&rd-@X-X{{ERZ^1}rAaZ#$$z-$P>5H!V!_6K zX@~Y`&41jYT(fT@HLHFHOV+t(f2}`Jj;9*BfMbx79KEx@tm8r99V0`oedcVB>x|i`-1GbAx19*1VzqqhD|QE2|ZGnai@8m_IKg5{bf8FzY`j~{W`UgjAG}OFmjyl9~LtW zzghoI#wEQQLHjy4QYiKf&zPofNZyQa;_qesX3Q1jP0{1e_`8htoXb$N@~>N)LZt5Ohb;XV@7y^cla~P*J>VbA&kWuc zO@ECaxwe`)8`^|AJA;=7`D~!8t;$T=GEe60$kx|1#`Rs&mZO}mT`0}20k$jywr#Wx z{6b%}5Th@pdztD@`8HCsKl-aar`Pe|d?)<+aLyb8>ISVzdw`M4&YPH-BiZ6&h$aOR zhe(`_^97oa+g-d2xsS@DPjE<+AnT}PRx#wl9f2_v5i|R!T{_(WFT?7ydPRPui;7t@ zZdiJ(Oio?Z zux&-JkYTA_AzS9OSqK-(Gf5FO{w*2_pFl*#*ygc@mvFoF-$Ka&I+ z+H@VotWih?jqH)uCo>>ORpg>ZA)62oGgxZZ`YF~AK?`zFlS5dKgYD}YhgK#585!t4 zm%qw<5Z0v`KJ5(hps(`V(7+B!2dKa%2NqHwR#w0|9CXMkFJ;Q-D)LH9niSJ+wvh1; ztC-m}qUO5i3;QDUiI@rFE5 zsz4_8pLxjBzSB=J8ZCWR8$$;ldYQcsjMs03wd zd+J3JcSt2lj7NYdK5*?~X<^Punzbi?`~{`75Xw#C1gVjawj^DWe~4YdujLvJ8*Ywn&|kKV>R%2XSObX*6muyZB*b zf#n+cm}{8=@W(%nywD^5!?qX()fGsKw~f?C8|Hso*i1twTd|E?^B{WAe#9qCFQzwb znSFymhJQ3?+dX14xweog+VQ*%fA!`X{kEZ&O|3pOFXQMf(qfO$AvH;Rhlos8D#F5- zX~!{3@==cZ`L-qoNqae`A{ctE+6tVs^J8hSV-9fWb);NI97Y5Bug$Kw#dbW_*;eDA ziGi>byMClGPfFj3?Gs#HKOsWpQ3Rc1&Q)>_}XIE}V@6w>vf)J6uLg z>PERCtlc7>*%oMa0bCa|c`X~F3r03l3hJn5Mq{(i%i&EBz%d&8+H$;rmM}K5Ep0+u zGxBz{B|jP?a5fNmBmU7}Wl0&X$V;t-=d2FT3c-GOt)YMkcxN48;2)@#I4EcZ9QeHU zmFrLYqyl04A`k6Tu7TqCVLTmHtWijK6Kj!1d^mv>G7mV}D2};LMXmvceu|Nhk`Wa7 zqWh}L>oFta4jdm%b`&&N-9XNMnEP;KH+N5nmbRds21#5!54p?pyZ8HAAn8Nq6>c6# z`H9bT+N}7Y=#;jr{|xocXz5&;*-B~gh^t9^bp10|ujf8zqBCbt*asF;XfL@DbS(V}_3E*C_mqZ|iRuGnD+b0onOEm%P$Y8FCz|b~Lojf46$K&0c(7=5 zw3;GSjCIA2Vi>wK{27^2HW6n|+4YK!E_tt`q{~FpV4?&ufQmo3b7>OCXs>SAm5TDULtFl$@(zQs6(EF43il>N^BnQd|G6A zF{E@X{zxc>U`d@sn(Bi*5AD|@V+20NS6PqNoatNrgVDz5T}jkN^b55q#uxem`Y70x z)FWRV@c?~f^&okX7G&jMwT;MKOd?00@X>8&mJw$^mY1xq`V@MjglU_iR?`r?m^rND zCGSh-RR*vZbMga0bze7J_Wr+3}N4A~F&(R2(iM&ap#4(GJWr6P;;7wR?ioOyvJw1uzWml?WVtuDu< zM2<-rYcS_xeZ(yZ@se9&Ku3~iMjEj+d13?;K$Vny3%l47j_nTiGn*7T&3b~fD&Y>j zGS)59+`;4uyd#zNPjr53+CbX?&s=+ft$`0YQ)V&{iSmpKlFI=RddR5|-ldAfPe!4x zqsZ82aL-a)`iuPasqBjNU)?m0{w-gXb$ReWjt6x&Uq)WzkksbUSx+Wh)6iPZ7wn8(tXlIl_E#i?F{TT7H6MRTsXCJu!hO!mw7er{3deB}l z=T!T2GQMZ4wMHWpK1j#e3eJ#Gs`LYuBdEl-V3KBMIXsRdK(RndCia~DWSTZCh=H1Q z0Bf6~!)3%4iO4UuVLy_8oAo0DAc0@wG9@B;!$KLyJnJ|*Th=UDZ^z-NY8(`RVq2Pz zKC?C_%kw?i$Ffaw65**jwN+u^2M~-0$GD$sh!7Qd*GAbcimB@b?Z^;0Qwvm(Z zQM6~+H$6xKIc*tnho>4O01=6IM&|XLYp;=rkyLY7@dX)fivVcv;uvjhuH>|^ct)29 z6zG=3vCQ&85wSAorSTUjk~rW0nFCB>PzE@Y_KnBtmUiyUX~3I@pMo2PJgy)FBILZ+q{Mi;_SnBP?um z$+k;IMY%YMK%F^SL@#JtltrqdE=ee@gt4f!Gk-A4apfaf_8VK|pkj=4gf z&0+LhD&`loP@#{ts8|{7c|E+VD`OA!fN@>CgJY=H=QW&MKZj%C2ZJR}w^9bOo-6Gl zuIC1b8G($v$hD;7YZnkbb3C)2~Er*)E(jwY}~4 zucgbb32ML0qjUZDX`W6Uf*twfS=1x+x9r*oSjyaGZtMk*W&~CL)fNO3Jc5~lSY#&$ zsZ-#YbAPZi#vJ7wmI4hKYvCCw;K4cs)y&HXNqdpVM!OLkF>`6mZzRtEk0M)@a-ZRy z`anNiH^|nXB&P6-6Jt#}M6K*Z|IoS0()5AxoHIM~k82U=OEJa5fUWf68>hr_7Grx* zek3*;8$Dd#xg}Jiy;=K!WMt$3{pbVRif^c7C%RNG?qcj;<<4Z5<>q`>fqs#ZNSvrD z6Z{%WmEP6!aXw%hL5%#d0YI{YQ9+L9%P1o=9?2RMSNP4Sr#2??(ltf2vtj`Qc2i7{ zC#KZr#h=cTv6XZ>S`DS79RH*Q*s@113g>%Brv12n>=E;ui!q>D{R6nb!avh5Vs~DV zkO?e?2IBIV>|C}`gLdTDV1PPqNqzRJ79hXeB#`x2;rlY7L%1t&Y48LW+hWi1tN0>g z$bx+p={2l&{8%y!L2j1^^09ZZ#$F#SYC|3T89?pMaHz+MIYIu}6X1hbs#o`(07EiG z#7+G*w27>o&LoNm1}zW&)KkR81x96}LCDHm;v+^yG@>2)(%ySZEzi1awJF| zBM4U`i6v*JWvU_%T=L`%995ZVRPo1OwnG01Y?`RR`ehgHs-q`;2*uGh%yZzW0VER9 zlE@Ejk=r6AZmXpiflC24}1G{H>`=Ua3d+3X2k*N=$`NC|A9N2^;yg2zDHs zb2>##L3`erN-9Yb8uJGo^W25isnCb{8|^>qRV*U+o<%wntwEuTZqTRU4LTuj__MsB zDmwh_LZd^DEuc+gARJNeq6N{PQpFW=UQU5SCZ=Sx31yH7__0!f08}2B8X1wxP^fl8 z+R&%2n~*xOn7r;JGHx-tqmZnaI($Sdh6wxz?L!h$lUH`p@TAjDdFnil)Mo!UkIUS` zUWO)?YkZQnD(fhk1=Ewc3_`UTl|wMrC&1egB2W4Q{0`Y{RvQFH+bBr%XXlAV9ug~z zmZ1m!%X}6BF#KR$LkV*>g8s}so$7zo^A;sc(+Krd+5>zB;~4%)bRcEAMSfP($)GmQ zY0L-gQ7lLfa<&4!!B(<=;BOguR5fWsuqadtr8rdZH;flDM-pohEzpk z*N|^g=kUNg^a7uhY=kz5ApxS@1HJIu`mghc%w~+W$Y>5j$zmGiB$zIq8Hs`r4ZI9X zjt11H|G-CGi$c6cZAcf+Es~WO#(1K%Gb^L#F#j|5n;F%fYz@N1AKDc>*|f-MO#`Jk zo2bj!E&JfLTQ+)7(wVIDlD5_*vry6r_N>mqA8ZrrDCS?m%b_aDT0B<$O~RM;1+=BT zh?UVtsi!QyAk>O(7qUHdPGj@SR%|wtueDWcsTw+Ira7AJJX!jLjk0&`pE8ht>=J#- zTs1EZIZA>=%~qDGXOV)99@LqVEs;(I!DT8-N2X)#xu|0{rG_Q{k$7sy2+#^CEo1ax z3=`>YL3I(=7SLS8r$5@U*V(G|La(jntkw9O3R6ZCHPw#z#PK$>BTBQ=l5F5mZ7{%D zhlMR6FB2Q)`4f}x&xKBip}Jrck$j&E={v*}yd==tiN;4Ag&E_NW@bbxHyuGC>4of4KiU@e@X7O|^ZG$wXek)7C7h#? z9eYG$sy8uQ!85c7o;0ugs4GLusOJH987=tj<4va`Hw0j9av(Wf~`75sYFuqB1s(7`zy7 z@F6WSh&o@Eb8L*sT-fAUH%TgS4vzkdScLT(=FgzX%myT1c6mJW|3yj%ETT_r0&-9u z@V$(g826}k(U-Y7f!jFXw1pj!jI%Q{=OZfZO|@@hgyMlEG*hF`q?F~-kgduHbZC?T zhOv1Q;gk$eA=1JZEeb!G9jlz#KeWPV0sjXEIHCs$&C(R)Z`vbI8&O+yI+isGu60m5 zlFzB6C>7Bia80CRxT8?A44YKxl6 zG)fZ&H5zSkl$n?rx1i%}+_K{xeU^-%M6YAkIxvMfzAbAkbHP~v zZA&D=Hg$g?bPi6$c)^LfgQj`FF!9^q2yGZSE=F67g0LNW+9J%!ObkTlAd>@*FbAG! zc#H|cle9zsQh^oeq|~S2n|cNxXHIhXsI1mdfY)}CkIDOfkTdYSE8B7OWZW?8cc2L4 ziXn}2>Mi-$1Nvx#@CkSoERlTSn=5wgm@dg5Ws(h*uZGAK5rsL%ae=IQWdan&^702? z0dP?_Qk9?@dx&z;}<D#kmZ0@Ge$>z(#xsK^xU0F1(pIHx$<_vbY1|A?=Wqd?>Lk*wTG|>z3$j zQ?kU`gz|-}td{(0C;yC)Y3o?uuI|m}kGvL3|EhcU&ai)!Ah7XY^P6M|^dfnR_%nQ( zbn8Fnqf9!XQ@&eUV z+tnF+_qwBzhv6^tD^vei3WYw&}4JuC`cTy<^eJuWWVu zMXXb9n;vWN5{vcaou|zI(r&k3#5(<^>9J1TYq7pKVi}m^C zXKel4O1EFcI;S!{)>&ID)@K@L-+K2Zw_n6MZ^!gl=Qb?Xr?;H9ddD4Zzle3g?bBnO zzuaPdYWoFCKDpEF7qOO&O^$daMWTv{)Zoa`E=<%iVqv z>%nuT$9m8m7V9IcFWK_phTAV0skeyiIrVqLdwdaP?#TdcRGq3QPpnLjwR(%idQIaAx4wFl+b?3dJV&!f%^;cS@gK7&$)k`nF-6~NL5sg# zc}`EPnLB^J{IKo6$dus4a(PZqtXX&bq;bTSpRO)q*gZp+%X4~S&EE8*Epr-sGNZL9 z`fIRUp3@WS=#@X%K6m*Kw-zz%p22c?PEV}9`QP0;Z^rj_+t$TjgXQv^o><53{?3y5 zJ9p17V%R-{gjGyY-|^UoS#rdj`wpIX$r! zuKvo_MJvC0N7lTsVX$1D(-Uj)k}vH(W&W3U79g@6gXQv^o>-^u{lfgyc7Jh3*1WJ` zuw0(g6Kl!#&#gRT>*tpjAhI2UPn583p=EtfX#x;1NF*f3Zw z&*_PE*~$-WU$K1K)&fMfW3XJF(-Z6R`S06%#f#CqhdZ@=}LP46fmxE+J#@|>Pn*RFoc z*6UWj^$yoQzh$sop3@U+)si>uzJC6jcjgh?w!w0FPEV}I?0v)h8+N~OhHIbSGFUFp z>528Y?XO*V;55yn53UZhcL|wa;%EESKk$uWh;YoK1Ugsos)D z;dZvRRlc6%*2!k>%$ooF&cjw^J7y!pa(PZUUAgs}pX@pU3)sa^hUM~{a;)6?&7L{4 zby+h9mtna)ryMJ{e)Gc>M{mo)$YzG+@|<$4-1^P;#`(sqj^Do?X+E}(@HZrPvMTfh0-wlh|gV!1r094ohebN8OJ z=agc(Jf|Ehw|?{Kh3D=n#d3L0IaY4{=2NTAzq1s}5Jf|Ehw|?{1rPuB##d3L0IaY4{=FK;)y1f+35X;twjXvWuoKJWIlZy^Zu?%BVRd4; zJf}C-{F}aW`*iYhc}{Pv1xvrVV>&FC=k&%psq*#8bXYFW>5a8;$5)q5hvo8|-dKxo z|ME@KVYxh~H`ZxmU$|{LESKl>#yVrg=eA9U5X;Swrwk>!*Y2}Z>-C2d;i#UST4`$jdkTs@40##*`bT|1`3 za(PZ~tZORos7#0D@|@mS*Y0@h(&?~Vp3@s^)$MP-X*w*I=k&(9VeAdJO^4<3oZeVB zu6XUX>9Aa$(;Mpvb6<H&)P?G3MS6F=OnPx8Y(nF3{kbsGxE93Riacil1%EmmN9B zl^r?f$MQ@A+iuP-S2kzYk8mBH!<>7kE1P@g4_4*N=H24T=H2q$Tk>Vct#W0@t@`$z z`LYvm5hAaQ3vk8K2@AimD_?ff9#?kKp0CZxmo3`n$`)<=%8Gp1DYv<@Q*QgxSibD^ zn_SuHH|@MVUv}nFS9a#o&+f>Vol|jT=Tz>l{M<~TR(3tjt6Un!klTKAdWBHc2d8rUDY_nZEne3bIC-~1H$lDS>` zK=?Xf{-))#C$9(0Z;@}Ahd%4x@O`iO-zPatD~o$AkD^>;PW|G8A(w+DpM93oKFR8! z$*U+gSwDE?!IaxUm*0NLai3**(B)Z_tE{EG?NG?|kjZzy<-A|AK4kJP%3ao-?mCom zKjiX1AU*82E)Kaqih7YXyu0rUz1(N|Ibb~!shgFZFhx>+fFa@ql%C zpX;-zS6RFM>HVSC`%S<1TF>`N*Y}&gi+bmIh9J5>^?twW|Df2xy|#t>-5!c|!E;8z z+}{Vg_`R`@gJvfO#a4cA?4@WoJU>K}}~7VVbTLj?nWNOt=NXTOKkjt`kF|H0XF(XM%IUeNwSwCg`u`#$7$en@To z57yp`cF*fbgJ=CA+x;KB{of~kaL9e(58fY&e!**^gBSlX_{ATMf81w&a-aChAC12h z{f5{72e15N@|!<8|G7{7=sxqMKRSOZ`W5em3EuX{=vRNV{&k=G*?sD3f3*Hq^gG@+ z7Top6?00|k{&&Cl;eGClfAs!X^h@4@8QlG+;Fo_g{&~Oo>HXrXe=`1B^jqHV9DL(X z$#4JU{P%wK;`8YF7E-?82``W3Yo7EE8~O|n^NuOJw@2F++ZQl0m<-8a@kic=wCS+z zpkr|!s~fKqGY^|X&aeetpGmvvh%LZBs}tYfho_&8t_r>7`g8ou;X4yA^z~QXr@!Cs zt~+`!^q=Q>?sCxZ;4&I|(@{!`mz*w&I%slonKuJ8UD1oC>FMf4TN!yC3cF~`%WnQo z(0R>tbnY9i)6m<4WG~eox}AI%+yT08*cZC@o%ZSJ@6AF97hXQ{Iyh+)czM#k^0I&Y z>=RGZvQ^4i32#nMi&lcSf&Jla|M}Zj9`}XK9-Nl)n%Cti^TF@>{pI(-c-{}b_mTCU z-1p$$>HDG`E{bWS(Ni9In>b@DWb(8FmC3!6%YMsdzr-`Ggr<>^ zvzxPTg^ZqcZ)9}u<#Zsj+Fx<)gT$tlS>CqJTMfBA|K7^&;K=R(<#zxg+$SmSgB+dx zU9bdleDT4Me#sWd|Mdr3{)a{f2SE?_QWg89js4Jv^M^|t z(8t>jg+30QP7aPmpS;hkSPmV%_fYBR(CX=+>FS`UYri$NpE`4Xb;S(m z?5;zpvqP`9gQ>fNrM?5u;C|~c?|WD7gdRU}sP%Z?=<*=z^B}79fV6r5dUgJ}@($?r z?)yTo_nmGJzJ3p`iVslB2c+k`4_~thy8hCArR)1v--kr!2VLz4toZ}fz4P!aiKQxM4T! z&*^Vlw2B(@?eP<>=s%W;?0O3mRrS#qk$ZuC5GL#w&IF zYgZOlR#s~GZR2~iayIrGl?nVC!;woW=i%Q_rHTDUWwNrSaxSiOXjMjVG>>sLS`OgY zwJ00K-vH2Sm9=P9xq5KCUT-g4S!=gzqh~K{OiYZmFFEhLq2@$ma?QB|t&#Jz#?_+( z=Uv+xZ4Hdq)}omQDOdU!P(B2DhSAG-rSh2i(ByCp8&^sH6Y@Kb8g+1U0cc)|-%Ie< zjjG4bM~!nT55(UE*t&q%dR^5Tow%wsK2%?L!MRHpUa~Oj9oy$GJ?DYvT(I;4RO?2p zWHl?58$rQ1W5zMR{5gb;TU71rk3idL$a!jSKGOu!MWq#$j%JG#2l@lr_;$7M&Ln@0Z z52!2-4i9DpM+8R(vx7OoQNhu{+~Am?FPIk`8_W-m3yu#K1SbS11}6n42MdEm!2^QD z!70J1mCJ(Dg3~LP2TOu8f-{4&g0q8jf^&oOf~CRv!3DvE!9~Hc;DN!#!Sdii!6m_i zgNFo{1`iD`3swXV3oZ|?2p%3>8C(@SB3Kz*9Xv9)CU{hEZE#)i=wMZFeejszhTyT4 zF9webZVVnDtPY+KJTZ7u@Z`!@f~N#e4f=zdf?BX97zhS~dayPa3K~H(SQo4hhJ%q{ zG-w55!Og*V&<-Yo$zVgUG1wGL1)GDX1%DPiJ^1tB8Nn^VUj)w#o)tVh_{-oq!E=LK zgXaZ*6+Az9LGahX-voaf+!nkrcv0};;3dJ|1%Ds>L$D?I$KaoWmj*8j{yF%U;9rB= zgO>-d2woYyD)_hH)xm3mJA&5+uM1uuydijF@TTC+!JWZdg0}{53*H{QBY0=bU&!Ck?Jf)58D2|gNZ4?Y%rJorTLpTQ@CPX+%K><#`e_*L-h;GW<&!Eb}#g_SS}!!Qct zFbUJJ8qNr3hKGfRhqJ;X!Xv}k;hgZO@aS-Ecud$A&I^wX=ZD9I$A=5T6T%b2lfsk3 zh2f&`0pa5ClwD9zBNq9zhW_VV3c6d&BZg^g}G(11NAiOZVC|njkFuXWi9zH0% zBz$oAknqy*q2XoWitu6K<>3|K!^11XtHMWwE5ob9M~2sgj|#61uL~a?t_rUY9~0gX zJ~n(@cw_kZaCP{E@QLA*!Y7AM37;DFhc|__a7{Q64utSHiD`yTY%9Uk|?#elz@5`0emJ;qLIe;rGJt zhd&5^82)egqi|37wyqBu&T zG^$23qM6ZQ(c#go=!odZXm&IwIx0Fknj0Mx^+ofdW25=eanbS7g6M?k#OS2xk1mKVj4q0nMGuTFj+RFciY|#B z96cnuGgbWtHPNG@YoqI;M@Oro>!Zg+H$;z( z9v9shJw93;Jt2Bx^rYy?(Nm(QM*Y!EQ7u{%4Mc-cJz5(LMUAK#t&7%2!_i1I8nvRa z=;mlVYDW{%WV9jL7;TECqRr9MqCbnC9{qXrjOdo=FQR8g&x)QM{blr==(*9Y(et9e zik=_6Ao}a*Z=%1AZi`+Ry(oHd^pfcBqQ8&+A=(oCWAsnaOQV-X{~Y~G^smwF(aWP( zM6Zlq75!WE>gYAm9nou}*F~?7-VnVpdQ5t`cAYv`fl{S==;$R zq8~>88~rHS6a6^)N%Yg`XVK52Uqru*_D25~{VMu(bWik~=(o}D;z}IEVI0MAoWyBd zjc3F&^<5}?$@saWDcuss&d~`fFJ|^yq=f%gy^W)><XN%6_?!gx{q zfOv6yN_=X3T6}uEBt9cPGd?RmJ3c2qH$E?38lN9u5MLNy6fcV(7+)MOj~^6Y5yQIsFN^;<{+IY)pz|2_Udye< z2PY3nE=?YqT$Zdz9+q65T#-CHxiYybc|@`@xjK1da!vB6$qmV4 zlgA}DCXY{6Cr?P8m^>+Ya`KeqsY!owQ&LOTBm>D{Qcu<(-j=*Qc}McjOWvRSd-8!~Tk;>t2a~&!4<#Q?K9YPi*`9nX`FQe)I@;}K}lCLJalCLFSPri|SGx=8X?c_Vj?&Q14 z_mb}?KS+L<{BQE3WKZ(ryWm=_%={>1pZd>5}w}^vv|E^z8JU^xX8kbZL5idO><&dQrM8ePDWVx;%YQ zdP(}=^dae`=|j`Y(iQ2$(#z8;(ub#4rdOqpNLQv;r;kjpNgtJ7n_ibbI$f1spFSqN zA$@H6xb(*K@#*UH3F#BlC#6qLpOQW`?N4t?Yw4PFARSEW>DqKCZKTa~UAjIUPDj$w zw3UvfH>cxiJDo@;(+%mybW=K&Zcd+;{#p9;^v~00q_?Dhkv=nhR{HGpFVp9w&rNSl zpO^ks`uy|->0hURlm2abTl&KEMd^#vm!yA}{(brn>6Y{#(|<}|n!YUk=k#CFe@$;s zU!J}qeP#Np^xx7~r>{xxNMD=2E`5FahV+f;o6(x0Y3OMjmJBK>8$H~qi#SLv_Qd(z*ezfFHvtyF_*SdFT2 zHL0f6YIR0+X7#Y@;ni8yBdSMMXIJM`kE$MBom)Mo+E<-dJ+?Z(dR+DR>VoPC)f1~H zRZp%itS+iPpt`tvO7+z0Y1PxKOR8s7&#azRJ-d2N_1x-t)uq+*s~1!+tX@=IR()Xg z;_CA1gQ}NQA6$J%_0sA?tCv+*R3BEoyn03T;ngdvS5+TTU0J=l`pD`v)kjsYtzK7s zbahqr`s!n6eO&d%>f@`ct52vtvHGOyldDguKDF9ky{THOu9;KcG%#EnsZC&F z)jv`jUw`DyldTE2d-&+&$eQ|if4ey}diY>#81qHho;6kwZh`T!)xt(82omKh{uJIil@EsiV9jyBfuJs)p@*QmW4mN!U*ZB^v_Z=Me z9USo;9Q7S+`3{cx4&LlLIPN>x_8s)EZ0OpXsviHX%` zZK#h=GzSpH*3`yL%*z!UQ=4cG57v(yZJo1byk1-1-yW+C)Q@Y9vTc2^zcU!m%tGv8 zW39>2L5Z1102RS?U`qC8Ow~ta zhmAA`##@3kYpgkp?TyOuNON!ybPcv93W%-I`hpR7_T;daxiigpv=7`Z*f2Rfgb{Bo zVu%P7&=}=vP}cZ-UstReC` ztrx~Xb9`WOWbJT$Q%@i<&{KN>W%kswyKx#$ZB1)K{a8O(eX;lWfO0%gA8aDo@RM4f zRw|}O52=_MPAYz$O|^_?KS9lD2{JW$5M*jhN06zO5j5W`#rj0UPwA*qDq8l}XidwD zsnLTMQ^WDnv#TB^XMi$p=Z;JcPc+Ad8K#)AGSWQ2D*@B8J;A8x?|yPxPECy-oSGVr zQ@F#(hR}+oa_^2r=Bq!}gZG5c1eX_PH6xDKU_9&NLPbqKjSnL5J zsx*%6BO(((kB(gA=<`uym05rHIi2*)v(=hWfe_%A>V5EjTYSbsGLIr=IGF6bn zZm9cM$d~t|qBVq!YJCqXw1S@sf39M~MwS}+!ctcye~35Lkc?{DY|T$UsQBUq_}!rlaF@Xv^f^9I8!BVwJ18 z&P=n6)ZKBvtk>;}th*|in3naf%eCtbR$1DcG;4TA3rZ?0QFsBev|kr9+bA)7W>u z+%E-FqjXrxm-`Xg)6kGF_lFZx!_5(WiBwl5zlGXr<>ACzqeHH?PML+~%l%TBFk!6> zAz$uCFxh_TAe1lndx@!0?j?l^J*g=55(6RSe(jnXZes4!ZdWD0$C+x=d0ct54n1!) zTI!inbyf27X(mv;t+=a_f8g$%jQMr5c^c2lm;3uMHL?W3_*5Z$b=K)gOKBW2C{k{s zU!j-b7FK-QW?<{k(i-Kn(Q2(f(Hn>-xU$}EZd%}(x_6XyK)1$l(xY{f7qzx_94m#R z{evb2>}bmA>v)^zUHq$U?SaO|nxUwpsq|X+GrP8n*`l1Z80Tq>MvJAjku`&6{;a8j z@uNa5Gro$*^>oH?eaP={X6!QON+cHbPyx=yl&Sz_C9BQthLOKHf$s#{ZuAegT4R1e zZE%7r0p47)j9uT{=(nBt())b*32GXKG%%sPs&M^wBNn%|xuI^_7G$3lo?8IUPU{Q} zwpI^Tz^XfTgh@U+zaR6PHqie7PUN=&2MTU+zaRgGebtzT9i| zljEa|4*oo)X6E}kI2#HImg23^5lHOBxGc-am;1T2ldCd>e7Tt9nJZf*2M`0iSMG@D=cM(eKSm)%rrs8L)ZP?_?$U#5AR@M%0>ex_F*-cia#+=8Rn z^+;Sz;U6hX?!o-Q*FIP5&yq~M>X{{V*6|~msM8avvyR{5OomvV+ZQVM*tTm95Sy>q zh@Tgs_=>INpx95K5r__y{wiicyL?TfP{E&t87`0yo#nM6Lnlsa;ADY}tL3M3^JA~i zX7lBKj!dSi9Qo72NnT@9l0)f;vB8gR28?oP6)N~KOq?ypC{*xERDJJemwok5)SAP- znL}qCKTT$Zp`4~d1wV!{_Hv9ug&w1I&3DeMHaym-`3wS!rySy?+~*{@iHmQ}Q*)+n<$>WAr(PXxe3Ko-+TnV;-CwY5pVUkSL8~}EQuFu_>vBjC97BTqPyu^wltA7KlSs8%?9B5@PtqN zrr6CUNUSfF7)F-ZLqa1yD=^XJ&NYB~`D& z5&U_PW6Kv#j8V5n>O=M-_JTo-HJUvngzGNla`-|MBOwz)t%Q7uWw9oO;PvC8sC!gd z+iW+8Vg``{Rhiowx@_HE(zNRxX6mYV*736G^Z5B5A$UUoE=U~|UHgQ=3%w^?bg8!+ zKL5gD6$j&V56yTT!z3m}bMggbNf>-rZB34~o6xAw+;eLqJ?Prdqikc3vZ-Ern)1w;*T1}j(!u7Xu!QTcuFqw*( z&E&C+0<4iuKs^HuU>n1VIU;o6#}T~z5Mjx|2UtfO=B(VjB0UCK=Z)~<5_zE>v= zU;MUn>hV^aLnV`i9y(p$3*Vb%CLWYIBJk>vR1S+n0WiggyH!XBeg}Hg_uwGXBXM?+U}XzENm{XHD8ZwtaDdX&(UMG(N_ON zeYoDN9j^zhW=xlo`W@#jT2r4WX*5&=fquL}45PIZym)nWcYkM_(b;@|vob1hf7L|I zkJiLZTz>l2*T%+5if|*?VC`5h4I`8Od*! zBD9Ixq@My4bNxMGeD)U%loddwe%d4lFkpqDQw+`spin?_^ED7-^A(7xncfRX#?XA7 z(9Gtkii=JBeT#|taA;sYn#8<(1!7!%o}Nc0eMd*VM>knv7ic#|<%1b(`j~}5o#dfp zt=t8ZH>yH6Qs9Gwt@*TIEX~&fcIG<_EAt(Ojrk-h7G~VPNazIp;?x1$>@$qB37xlB zHqA1Ftd<^MTC267tY~muy|ip-UHz1@c9Xcu2X`Fdgj};6U~qGNX&JzpDJ-gvbL;>{ z4y}}lsb*tK0zAm&>F+TuMrPq`YXfRQ#>d zMq}k%*T+j+)!U^-6Xmj+ENxU@TUykpmHPTbyWBvKbCC$zWMQ zvkVKKR)V#;UcyMz>8n7N@v#!P^=16mhf7-2N6HFDODJoVG#D%65qEC-l~Qk)6ik#! zWwN9}eQilWqvi~+AV+voNeTR@qy%2%Jgk7$Zor3JTr8Aj9^@RpP)`3TX_|RYi7Lt@ zK2;{CsoG+{Dhe4&i7cC~61gBdDJem2@&JE_xm+R_0SbcQ@OrMlby-?cLitp)q@a{= zBqSv)Ass1EB$JVnMo2|U zct%#SgTnRpe6@viyc8h2>Xjm5DN9a9WJH!AcGYvn)IlRwjcW4nm&t`08wKKA1?O6& z79R^4SVq5s zqBu2X3aCObkw}1=Q|}rEay^`o1N!#I3sOm1{uR(JM#FG?1_3nCRfw#QTif z65HskR*Gk@e6g&S;B{7W(V>Grd#>#yzmeGD^RnWS_8s~^C#zpjs)g&QUCM2zVoSK~ ztX8U5b3I~Dy%y?}Qf6vRr`OJEXJvBfkfW_=9t6YtWSqShWaz2s9J2!zxoxSa3!vQ< zODSdk+5uWZsi$UXGO->@jQxZ41-0>!x-4LIa8jFEQ(CsBK3ZBf)Eqg!40Etn+N?g% zC~da6R$5dqZ&jZtZ8gyFuIG)%gPh>pK9qxQqV^$(3OkMlJc~Gau+8X9#P51P! zg&9C0+?unn2x_kHLWS}Y1iO+p2zB%Q-3``Cnjp-TG}&A$DX5pVs85u%m}r&sj^I{O zg3#uKS`Z8aTS+5?wGs*j%J@e}D{0bbl@zSYMTr7s3}z)nGnADOjX+k?(Nwdf34&Nj z2|`#2*oHD4Abgd8A$XOr!_ZaI&v+Rc!d6K?2wElmFl3c9Lcl7aU?4XV74*YkRnied zRY^w(R3#m?${0eB>T-Mgv;a6_9%s#(S zN5t9KKQ=i!FoEl_^dYl1*VdlkDZug~9vj=9y!j+g;ppUOf1|c`a($zAv?9!W zs(1(|(&rYBAo$dWJB|(3fH0?6uTk%S+EClj(QI>VsyW(G3)f+E9GU1kGSwP9w%D1T zZeCyOBp*jQ`oy{Oy1(^EeWasj9P#!833k-PkzD#~p2DLcarvTsbS2bya##G7i4%pP6e>K|<4-97zvu7({yRL2`~cnZ677BRY@ ztY}TGylkjP*w9o8Tx*w-IntxuXl=Zd^Hw=` zcyRRzWm4IUlP9ILjMwU=Wq5~EY1u>%Iwwa9}8k7hksXtc^9 zr^>}y!$6!-X@|(sxt)g)Pr8mFj&vPE{OE$KcUMEa=xT~M(RB>*p$pE_6!D;|DdIra zG5CMiG5CE~7p?AU@bhCjg+l-C!h>IT9fLo29fKct^@{al@UyOp^sg>N_*Iv58r_10A9YpR=&9x*1^&|2 zbZxWi(9~#Or%LL>xCYsIy>S{d3HCV!E@E?G35Ha|g=GwmvM+T?lw57&k!p_3up;^HNJxJWvdhCyf13~{VT^B_EIbN?V5 zv460rp%&u)FjzsfgekO&IQ80i@j$aRUi5;2jbewz2#Qx)3>2f(0B+41C{}7Cvn!4n zdGSq+7yU9Px~YzEg!{d~0Nz8<-#LQZT(qc7##hX{hjMdr)0cTvd_BMVWNZSDK1M{y zH8D!4jStr*@er%2ku@!=u89pzs22lV;V7Q&F~m{I94(TzzBmN58^!%r$M}M`ON_4P z(A~y+YB0nU{i;~n>{(iG^lDohC|YO{nZshQJIHFi3VXI3?A5Z~jWRxVeXfhs>jA3QN(shY!dt zw!H7q+#hIpH3BeCN62o&^WB);S;voL`s|6+S;voLp1#%-sk4r`3A%$jbL(dL16m3d z{M4A+i+fVjS*JIWy|l(BYl~#-_#fNzqUXt#t zxy=4jwL_>s($dwN=6XC40oTJ1v!dOqy6tCEj$Yp0fS-xF<(#Ct#X z))4M0`5rtXxp1eGnVabgLvNvC@qt(75o@K@8#uLuXHN3jSSB0j7|w7qimwRrJ)lBv zB=)4y(A^*tgZSA2@+?qa#`TisJriqo`GM<-p?7JIOG_jMlXR4-I#Ez@CvZ*!A!9&Cvh z%u{jhC|uQLYgN?7hhLvApK?Ls1Nc8Q-+x}PTS7K#ICuyC68mR;|^-vf89P3D>eNi zxSv{IY1qfz3Gj+Z;3Q55=xS{;HjWDoW*IQunZR2P(MWcV%pRE`yM5VizJ)uQZ+eCm zh`e3bzPr%(O2#uy&5qX``l^DSwK#u0I#8D@&5ku>biRi2aJ&byK0e;UNu!||HNNDr z*&aDAyU47w`f>RKSuMU?cn;Q%T5|m?*RQck;dsrz*l`wBWcpcubS9)W-d8!$LWo?* zhxpp^HXhyvFf9JrXM+q+_3?T*JY|H>cgekW5|0EL9G}dzF(?1p$<6ig*24S&&r^t+ zg%)dDljFq$c%n(+MU;4+b>Y>PZ9H#!v~WbO2PlB>g`9nPIQ}m${}CO@0@G$+d-8 za&1K@xqT5yt}z8N*L9VNBiBTP0ijuPa-uli9qkmv0$0=}hNJ6~c;jf{MXQI2>B(hH zM-1ScM;)dtdq=IM2jSERPaw#VnZwQTnr<;-$kt(_HG6QzM)RJs*`v5Ns@zuB!^Y)RvfP}B$5tCE*EA;v z5YnW^acz0i?Rb4aUQ0XFpS`tqHaHp7NF_Drm=za0fUaF&4j>+b4MeH6*%dZJJ<6sm zP;CTJox$Au-d8cyiN>tUoNB@>P2_~7xKZ5Y6$r0s=U+gv-*@HUc?_6c2h z@`_n4^diFNCK_FA@e$_`C5qZzy^$^P#m0&L-n6ir76CPdT}?%Z2Dd#AE~D?&#arfa z0tTl}`_XL|nT$k6T(jxL8*z3NVIL#X#v>-ja(i>ck#h%T54JXr=Jxfi&Fb#b{?yJE z{di+7A4gT_WpS>S86%~&W=)!O&vR|^RgSR)<_{iQf;Z2RTc|FfOR3HuKhsrLavTY` zmeO`CMb)*CEl$fJij80Z#C5$B$KY)B1V>0bf=jXh?##l80|bNmCcMkJeT?o5w(9ME zzUNtv9>p!5Vo;QRT(md9RH+G{tKo|E`Up<$9G|r@Wv*!UC^UzlHHjx^@q$pi-Pyhu z`e@w*rCF4pIWW1V-ap=IO&rca1?R}PJ$non%;St1nuGp{*5N$yj?_%Hak2$ZiyP+B z~8WaI8hY zh;$SEO+L6^dYov@a%xN!S*+xqi?x#2a#@`R?hBB5oz3?6Fy>|Z0Nvfn->l+^Ooh`^@ zpjFl)Tjl(R1Bc-eSL-$>Mf?jU<Bo%D{Z+o6PPEpyifEa&zF~xPjc==Ojy1k%gwVHCFV9+I2bOwa zS5PMIrRk}WuAmT~3Yx=jS7&&3Vxm&sS6=K}_}p&qHI|j~HYqJv0}G$%^%X1F{q7yj zpBdU$VR-lC?1(cvi6?Jt`$<=D;sOB{1G1N^oq+-F@=o6odBX$MXXRT5(9<)MD{7Xt zED?B(08cA@m7VawTk`Q1NQW^NS9;I{K*&k&niwk&;R(hKvnGaimKDb6_)NJstPzy0 zDB*?~SsGRXx|C=7!kkHjfpSz))UbqI9qaWgHj3dNao2U*MuAs7L1huM)>%PQgjsM7 zcqXq+33`*$(^HE^%XnX>AKZ4-Q*L0pO9q^k+3~9D=Z^-!JGdkxC{O|@I^AO}@r|}m z%npZbDs!3m3ZYDVhLVY2P(72yHD@t~lo$D7l^l%Ay~AaBDj^_e8Kcse z&t5V)TR}WNibq-x=zDw`G5Kum*}(N#!5pCs)JJg6U$*SF{<)->OXlX1`MG3aE?Eq& zKa_f1a8=4A$z4{{Gu_@52KOs_5$0FY=z>XXU|Z_VV(yv7D>Q=#jy|tX0Ik@1R_~s^ z;F|ZY;OSY^3irVB;6lUKZg78im$7`^oV^R*(+NP&U-y?!U)X3kG149M@^)|SY7*` z?ZAI^)?NPv2yc$I=@%e|bPEc>vR2?O-mJZ%zVB0+lN}0e2vr1_fScPYsz|U+H9~?p zg@|Ip`%ab2u$wy~GwkV(kYN8$L@|+>VaHcQW(Y7NBpB!-B-mOT;lOm137#6}w*4wC zAa{aCl!N`?5fTJ|5fTi+5x&ia&dVqs$bI4w&dJ^45hA%~Ji-U;9FH)P`^O_hau<0- ze%L-7A;FIF2nm2RvY^NY#~$+tBe~N&q9p86jc9S4>eb(M7!o2(_C}gSI*r}vef8Iq zho;Y$`Ku&#tdXb3#w*L~bKLW$%l)sD)F-~Xf(b5vnPP4=!8`ulh3HAnZTrGS@>n?@ zQsq$7JB+90$?4JQ+J0_K=jp!^CBI0a`?N!dUz=?Uwg6T4>%J>j-QR3S(r7bbMVH^u z9vx)k;GQ=!gqCYC2nI`Y^ZdkcK3zo+T-(N`+-!BB-WF3Ev+^5zBTXT{*}K^%^dHCy zmV~E=C&tn7!RoDU0a>fqtQB`Rb#>n7J8Fj}M@QAZuk*(v_!H`4a$SFPJSaYB<(eQ^ z-mcb;O9s~vj#dU8IX*MK8&Q*YXc((H{4&gp-~Ok$Xy2Ufpu z>a)7GmWwaPk>KE-Ltt4MnZL$C&hW(uymgDyK3*S(V60CY7^6Xv19mzk=V=bd1YGviNW1#l5i za!M-W&lZF^KBNSkW%4UL8SF5g%1qDryi9dkzL{D+yfp|qWx$4`=6Fn71$bzCXGIY)K8|1!-4QO~J4R5ed<8xNW?AI}cj+xUj^Ezfh$1LiY13G3&$JEtG z=xQW%H4?fS30;kZu0}#vBcZF2(A7xjY9w?u%4K`zV#V6E*2of#tXv~2-^eO7vWktY zfksxTku})c=xSEO>(}svhL_Xu@)}-2!z*fd0~%gQ!_(A5XzC#}^$?nR2u(eNrXE65 z522}t(9}a{>LE1s$Yr~Hyz+kwg~};ZUZDyKRaB?}g(@l3V0XB@{;W#&tE5oLoJ!_Z zvY?Vhl^jsXl1i#x3Dqm1dL>k^gzA-0y%MTdLiI|hUJ2DJp?Za`!W#?9)r|kUU!jCT z0BtC52XvCbTO132&GG*^x)!9 zS=lhrA0|YY$c2e~m?(saVwe~R6QwW__CSO^5Md8Q*aH#vK!iOIVGl&u0}=K>ggp>p z4{}+{`lpouk-e;|iYfT5y53x$7_gbstSkevX$F@tP_gE|2 zwW0&oiuP>i-PT#{SkQiJdF%SL&sx^1HeHWvwxw30y;g54nzYC2G3(K+wbZ0VRm*Lz zLltXDGYy()D&1{$MagLwutVD}G;J-?NodOIY~<6V)iIw-6Tk~4Z`uj$2ytkKM2^}I zja#gq9s}Zd61on!f)tGcSGuiD)_$PMnZ%~V{=~hB)5&adNAeTNQ>nhxWvPRyBdMqC zRrVJ9fPI(!2y3rHsRr)v`rBie!y(WEO`pR@QeM|aq`b7Fv`n1#O zWSqQnsdJSx;T&*oc5ZVHIY*rPoClqg&MD_fS`1Wk7x2UBwLrB6D=`AJT^>;kD^8bS+-S2b zVr|=Sx)@_kTjh}5rUj>qFgmqS2Bq54=kyAUW-aGW$u_h(y&Pj-i+NL`WnE62Fiy6V zFIg>Wa(Wp?)E4q&&$pz<=|YUW#{Ag-TF~M&i1FEw7yGYKhf~Rz%Nc_PrvZ%eO?+Yh zX)5Pb#P}F#&;H#+%Bg@DA;OmZD^kWOkN81r$DWIjaLOUF(AcnlYWbW5B8~=q_74r0 zQ$OO6dAjWH4LnX+#3qU!J3WuX>7|HPLOSek3eD*PL@#wYdp1OIdI@5gK*s)BPjlLc zxW?nNXMz-`7bC&}kNw5_%h_iU>2T{J>!5W!VJ9{xK9D$$2fIzl>yvjUpH6K^U7fl$ z^+4*3owbMUkJ=~f(`-H4$_}tY>>+lBHqaKDL7a1p9#1FJ8`7K8Bk3E{x2KP#A5K5( zEOs_Ho1810F~m5xICmhzIf3}*3FjH-Oo!9a)3K&wL&wIBe8+`!{sQA2m;G5j4=&_~ zUbLWy$7O$l{Q^9o^A-^Exa?_I$1a^-7(425*&ksWvt&9qX58blKfp3psdP@P$j4>B zhh2;kX+wspS2T=r||wwN=W-C`W%vL~R~Qm(YNrAWwSzk*&1IntUIVj-734lQGD zwAvUAx$KwFG2}$XXBPGtM#ZMN(8{I}k;@*1yh#ou=dXin%Kx?4};sFO}!1#k;{Gt-aJj}nHL|q?5E%; zTC`M&kX-f?&>;|1S(WSrgK#@NK!H(MTWI6KkeD8kt{S{fZVJKh5B zbM|#3rgL_m0kJvzT2n;k?5j;Mm$R=#;wopyBG8kwFKbbfv!fb3C!uZH!Wz=mB1UL9=#oSW6+|v0dJb>&|85wO*H5&z?(=py%~5DA*CyT zH(D9J33#KC&{p701E1aqyqU+P%YiovkKO>h32|r(@TN}F>wz}`MVA3@yfnQIID-^j z3S7CwN+1WhrsjGP2?wXPFJPl}fwC`P1@!O_`vT^61xSYcmyo|6+w$m5^6%q^cYiqe H`;q?xJ@PKt literal 0 HcmV?d00001 diff --git a/tests/components/font/common.yaml b/tests/components/font/common.yaml new file mode 100644 index 0000000000..a81457a05d --- /dev/null +++ b/tests/components/font/common.yaml @@ -0,0 +1,38 @@ +font: + - file: "gfonts://Roboto" + id: roboto + size: 20 + glyphs: "0123456789." + extras: + - file: "gfonts://Roboto" + glyphs: ["\u00C4", "\u00C5", "\U000000C7"] + - file: "gfonts://Roboto" + id: roboto_web + size: 20 + - file: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf" + id: monocraft + size: 20 + - file: + type: web + url: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf" + id: monocraft2 + size: 24 + - file: $component_dir/Monocraft.ttf + id: monocraft3 + size: 28 + +i2c: + scl: ${i2c_scl} + sda: ${i2c_sda} + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: ${display_reset_pin} + lambda: |- + it.print(0, 0, id(roboto), "Hello, World!"); + it.print(0, 20, id(roboto_web), "Hello, World!"); + it.print(0, 40, id(monocraft), "Hello, World!"); + it.print(0, 60, id(monocraft2), "Hello, World!"); + it.print(0, 80, id(monocraft3), "Hello, World!"); diff --git a/tests/components/font/test.esp32-c3-idf.yaml b/tests/components/font/test.esp32-c3-idf.yaml index b63b4d025a..ad14a2e9a6 100644 --- a/tests/components/font/test.esp32-c3-idf.yaml +++ b/tests/components/font/test.esp32-c3-idf.yaml @@ -1,19 +1,7 @@ -i2c: - - id: i2c_font - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + display_reset_pin: GPIO3 -display: - - platform: ssd1306_i2c - id: ssd1306_display - model: SSD1306_128X64 - reset_pin: 3 - pages: - - id: page1 - lambda: |- - it.rectangle(0, 0, it.get_width(), it.get_height()); - -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 +packages: + common: !include common.yaml diff --git a/tests/components/font/test.esp32-c3.yaml b/tests/components/font/test.esp32-c3.yaml index b63b4d025a..ad14a2e9a6 100644 --- a/tests/components/font/test.esp32-c3.yaml +++ b/tests/components/font/test.esp32-c3.yaml @@ -1,19 +1,7 @@ -i2c: - - id: i2c_font - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + display_reset_pin: GPIO3 -display: - - platform: ssd1306_i2c - id: ssd1306_display - model: SSD1306_128X64 - reset_pin: 3 - pages: - - id: page1 - lambda: |- - it.rectangle(0, 0, it.get_width(), it.get_height()); - -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 +packages: + common: !include common.yaml diff --git a/tests/components/font/test.esp32-idf.yaml b/tests/components/font/test.esp32-idf.yaml index dcf8fb49d5..d98600a51b 100644 --- a/tests/components/font/test.esp32-idf.yaml +++ b/tests/components/font/test.esp32-idf.yaml @@ -1,19 +1,7 @@ -i2c: - - id: i2c_font - scl: 16 - sda: 17 +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 + display_reset_pin: GPIO13 -display: - - platform: ssd1306_i2c - id: ssd1306_display - model: SSD1306_128X64 - reset_pin: 13 - pages: - - id: page1 - lambda: |- - it.rectangle(0, 0, it.get_width(), it.get_height()); - -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 +packages: + common: !include common.yaml diff --git a/tests/components/font/test.esp32.yaml b/tests/components/font/test.esp32.yaml index d142463893..d98600a51b 100644 --- a/tests/components/font/test.esp32.yaml +++ b/tests/components/font/test.esp32.yaml @@ -1,38 +1,7 @@ -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 - glyphs: "0123456789." - extras: - - file: "gfonts://Roboto" - glyphs: ["\u00C4", "\u00C5", "\U000000C7"] - - file: "gfonts://Roboto" - id: roboto_web - size: 20 - - file: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf" - id: monocraft - size: 20 - - file: - type: web - url: "https://github.com/IdreesInc/Monocraft/releases/download/v3.0/Monocraft.ttf" - id: monocraft2 - size: 24 - -spi: - clk_pin: 14 - mosi_pin: 13 - -display: - - id: my_display - platform: ili9xxx - dimensions: 480x320 - model: ST7796 - cs_pin: 15 - dc_pin: 21 - reset_pin: 22 - transform: - swap_xy: true - mirror_x: true - mirror_y: true - auto_clear_enabled: false +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 + display_reset_pin: GPIO13 +packages: + common: !include common.yaml diff --git a/tests/components/font/test.esp8266.yaml b/tests/components/font/test.esp8266.yaml index b63b4d025a..ad14a2e9a6 100644 --- a/tests/components/font/test.esp8266.yaml +++ b/tests/components/font/test.esp8266.yaml @@ -1,19 +1,7 @@ -i2c: - - id: i2c_font - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + display_reset_pin: GPIO3 -display: - - platform: ssd1306_i2c - id: ssd1306_display - model: SSD1306_128X64 - reset_pin: 3 - pages: - - id: page1 - lambda: |- - it.rectangle(0, 0, it.get_width(), it.get_height()); - -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 +packages: + common: !include common.yaml diff --git a/tests/components/font/test.rp2040.yaml b/tests/components/font/test.rp2040.yaml index b63b4d025a..ad14a2e9a6 100644 --- a/tests/components/font/test.rp2040.yaml +++ b/tests/components/font/test.rp2040.yaml @@ -1,19 +1,7 @@ -i2c: - - id: i2c_font - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + display_reset_pin: GPIO3 -display: - - platform: ssd1306_i2c - id: ssd1306_display - model: SSD1306_128X64 - reset_pin: 3 - pages: - - id: page1 - lambda: |- - it.rectangle(0, 0, it.get_width(), it.get_height()); - -font: - - file: "gfonts://Roboto" - id: roboto - size: 20 +packages: + common: !include common.yaml diff --git a/tests/test_build_components/build_components_base.bk72xx.yaml b/tests/test_build_components/build_components_base.bk72xx.yaml index 7fdaebc768..d74cc651eb 100644 --- a/tests/test_build_components/build_components_base.bk72xx.yaml +++ b/tests/test_build_components/build_components_base.bk72xx.yaml @@ -16,3 +16,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-ard.yaml b/tests/test_build_components/build_components_base.esp32-ard.yaml index f460c57298..e345adcafc 100644 --- a/tests/test_build_components/build_components_base.esp32-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-ard.yaml @@ -18,3 +18,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-c3-ard.yaml b/tests/test_build_components/build_components_base.esp32-c3-ard.yaml index 8a52e0c916..136ee62d4b 100644 --- a/tests/test_build_components/build_components_base.esp32-c3-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-c3-ard.yaml @@ -18,3 +18,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-c3-idf.yaml b/tests/test_build_components/build_components_base.esp32-c3-idf.yaml index 6b4b61fe58..4e809dd7ce 100644 --- a/tests/test_build_components/build_components_base.esp32-c3-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-c3-idf.yaml @@ -18,3 +18,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-idf.yaml b/tests/test_build_components/build_components_base.esp32-idf.yaml index ab1bda2a19..3c4532a958 100644 --- a/tests/test_build_components/build_components_base.esp32-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-idf.yaml @@ -18,3 +18,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s2-ard.yaml b/tests/test_build_components/build_components_base.esp32-s2-ard.yaml index ffb912d3d9..db62cdff6a 100644 --- a/tests/test_build_components/build_components_base.esp32-s2-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-s2-ard.yaml @@ -19,3 +19,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml index 4d1378b2b2..19fb657d8b 100644 --- a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml @@ -19,3 +19,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s3-ard.yaml b/tests/test_build_components/build_components_base.esp32-s3-ard.yaml index c850c9665f..39e12de08c 100644 --- a/tests/test_build_components/build_components_base.esp32-s3-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-s3-ard.yaml @@ -19,3 +19,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml index a43a2a6736..95c73f917e 100644 --- a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml @@ -19,3 +19,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp8266.yaml b/tests/test_build_components/build_components_base.esp8266.yaml index d7bdc03659..0019298ef0 100644 --- a/tests/test_build_components/build_components_base.esp8266.yaml +++ b/tests/test_build_components/build_components_base.esp8266.yaml @@ -16,3 +16,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.host.yaml b/tests/test_build_components/build_components_base.host.yaml index 00b252da2d..ec7570d99a 100644 --- a/tests/test_build_components/build_components_base.host.yaml +++ b/tests/test_build_components/build_components_base.host.yaml @@ -16,3 +16,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.rp2040.yaml b/tests/test_build_components/build_components_base.rp2040.yaml index a02942ea35..cb1cb6359b 100644 --- a/tests/test_build_components/build_components_base.rp2040.yaml +++ b/tests/test_build_components/build_components_base.rp2040.yaml @@ -19,3 +19,4 @@ packages: test_name: $test_name target_platform: $target_platform component_test_file: $component_test_file + component_dir: "../../components/$component_name" From 16e0b78c643867e94fde5fe912f08c77f5ab6921 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:05:50 +0200 Subject: [PATCH 035/313] Define `USE_ESP32_BLE` (#6585) --- esphome/components/esp32_ble/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/esp32_ble/__init__.py b/esphome/components/esp32_ble/__init__.py index 57a7341505..088a3b6d1e 100644 --- a/esphome/components/esp32_ble/__init__.py +++ b/esphome/components/esp32_ble/__init__.py @@ -65,6 +65,8 @@ async def to_code(config): add_idf_sdkconfig_option("CONFIG_BT_ENABLED", True) add_idf_sdkconfig_option("CONFIG_BT_BLE_42_FEATURES_SUPPORTED", True) + cg.add_define("USE_ESP32_BLE") + @automation.register_condition("ble.enabled", BLEEnabledCondition, cv.Schema({})) async def ble_enabled_to_code(config, condition_id, template_arg, args): From 927caf062bab2e08e483666b3d67b94c4a6fb764 Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Mon, 22 Apr 2024 22:48:06 +0200 Subject: [PATCH 036/313] wifi: fix reconnect issue due to enablement of fast connect (#6598) --- esphome/components/wifi/wifi_component.cpp | 8 ++++++-- esphome/components/wifi/wifi_component.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 8f46bf29a0..075e683bb5 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -128,7 +128,7 @@ void WiFiComponent::loop() { case WIFI_COMPONENT_STATE_COOLDOWN: { this->status_set_warning(); if (millis() - this->action_started_ > 5000) { - if (this->fast_connect_) { + if (this->fast_connect_ || this->retry_hidden_) { this->start_connecting(this->sta_[0], false); } else { this->start_scanning(); @@ -591,6 +591,9 @@ void WiFiComponent::check_connecting_finished() { return; } + // We won't retry hidden networks unless a reconnect fails more than three times again + this->retry_hidden_ = false; + ESP_LOGI(TAG, "WiFi Connected!"); this->print_connect_params_(); @@ -668,10 +671,11 @@ void WiFiComponent::retry_connect() { this->wifi_mode_(false, {}); delay(100); // NOLINT this->num_retried_ = 0; + this->retry_hidden_ = false; } else { // Try hidden networks after 3 failed retries ESP_LOGD(TAG, "Retrying with hidden networks..."); - this->fast_connect_ = true; + this->retry_hidden_ = true; this->num_retried_++; } } else { diff --git a/esphome/components/wifi/wifi_component.h b/esphome/components/wifi/wifi_component.h index d9cb6a9ae2..133fa2970c 100644 --- a/esphome/components/wifi/wifi_component.h +++ b/esphome/components/wifi/wifi_component.h @@ -371,6 +371,7 @@ class WiFiComponent : public Component { std::vector sta_priorities_; WiFiAP selected_ap_; bool fast_connect_{false}; + bool retry_hidden_{false}; bool has_ap_{false}; WiFiAP ap_; From 50e3ce4c809489a5cd2b0166d7120d1c990d0c0d Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:59:06 +0000 Subject: [PATCH 037/313] Calibrate Beken internal temperature (#6599) --- .../internal_temperature/internal_temperature.cpp | 8 +++++--- tests/components/internal_temperature/test.bk72xx.yaml | 3 +++ .../internal_temperature/test.esp32-c3-idf.yaml | 3 +++ tests/components/internal_temperature/test.esp32-c3.yaml | 3 +++ tests/components/internal_temperature/test.esp32-idf.yaml | 3 +++ tests/components/internal_temperature/test.esp32.yaml | 3 +++ tests/components/internal_temperature/test.rp2040.yaml | 3 +++ 7 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 tests/components/internal_temperature/test.bk72xx.yaml create mode 100644 tests/components/internal_temperature/test.esp32-c3-idf.yaml create mode 100644 tests/components/internal_temperature/test.esp32-c3.yaml create mode 100644 tests/components/internal_temperature/test.esp32-idf.yaml create mode 100644 tests/components/internal_temperature/test.esp32.yaml create mode 100644 tests/components/internal_temperature/test.rp2040.yaml diff --git a/esphome/components/internal_temperature/internal_temperature.cpp b/esphome/components/internal_temperature/internal_temperature.cpp index 255d95f6f8..47f516f568 100644 --- a/esphome/components/internal_temperature/internal_temperature.cpp +++ b/esphome/components/internal_temperature/internal_temperature.cpp @@ -55,11 +55,13 @@ void InternalTemperatureSensor::update() { uint32_t raw, result; result = temp_single_get_current_temperature(&raw); success = (result == 0); -#ifdef USE_LIBRETINY_VARIANT_BK7231T +#if defined(USE_LIBRETINY_VARIANT_BK7231N) + temperature = raw * -0.38f + 156.0f; +#elif defined(USE_LIBRETINY_VARIANT_BK7231T) temperature = raw * 0.04f; -#else +#else // USE_LIBRETINY_VARIANT temperature = raw * 0.128f; -#endif // USE_LIBRETINY_VARIANT_BK7231T +#endif // USE_LIBRETINY_VARIANT #endif // USE_BK72XX if (success && std::isfinite(temperature)) { this->publish_state(temperature); diff --git a/tests/components/internal_temperature/test.bk72xx.yaml b/tests/components/internal_temperature/test.bk72xx.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.bk72xx.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-c3-idf.yaml b/tests/components/internal_temperature/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-c3.yaml b/tests/components/internal_temperature/test.esp32-c3.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-idf.yaml b/tests/components/internal_temperature/test.esp32-idf.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32.yaml b/tests/components/internal_temperature/test.esp32.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.rp2040.yaml b/tests/components/internal_temperature/test.rp2040.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.rp2040.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" From a9a9be32d3a6869aab78d37bb77b6d385c95837b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:14:56 +1200 Subject: [PATCH 038/313] Bump aioesphomeapi from 24.0.0 to 24.3.0 (#6602) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 68041675f6..df94b8b77c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ platformio==6.1.13 # When updating platformio, also update Dockerfile esptool==4.7.0 click==8.1.7 esphome-dashboard==20240412.0 -aioesphomeapi==24.0.0 +aioesphomeapi==24.3.0 zeroconf==0.132.2 python-magic==0.4.27 ruamel.yaml==0.18.6 # dashboard_import From 7c893aa3309bcd7756432c6ba5b96a8c57d9e4ff Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Mon, 22 Apr 2024 15:48:29 -0600 Subject: [PATCH 039/313] fix streaming logs from MQTT for ESP32 devices using TLS (#6605) --- esphome/mqtt.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/esphome/mqtt.py b/esphome/mqtt.py index 166301005d..667a20bcf8 100644 --- a/esphome/mqtt.py +++ b/esphome/mqtt.py @@ -10,6 +10,7 @@ import paho.mqtt.client as mqtt from esphome.const import ( CONF_BROKER, + CONF_CERTIFICATE_AUTHORITY, CONF_DISCOVERY_PREFIX, CONF_ESPHOME, CONF_LOG_TOPIC, @@ -99,7 +100,9 @@ def prepare( elif username: client.username_pw_set(username, password) - if config[CONF_MQTT].get(CONF_SSL_FINGERPRINTS): + if config[CONF_MQTT].get(CONF_SSL_FINGERPRINTS) or config[CONF_MQTT].get( + CONF_CERTIFICATE_AUTHORITY + ): if sys.version_info >= (2, 7, 13): tls_version = ssl.PROTOCOL_TLS # pylint: disable=no-member else: From c7bfd9b46b63a52ad4ccd45e35e36cd4b073dbd9 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:04:56 +1000 Subject: [PATCH 040/313] Disallow variant/family override for known boards (#6512) --- esphome/components/esp32/__init__.py | 25 +++++++++++++------ esphome/components/libretiny/__init__.py | 31 +++++++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 50d6d229f9..8ae6262f2f 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -316,17 +316,26 @@ def _parse_platform_version(value): def _detect_variant(value): - if CONF_VARIANT not in value: - board = value[CONF_BOARD] - if board not in BOARDS: + board = value[CONF_BOARD] + if board in BOARDS: + variant = BOARDS[board][KEY_VARIANT] + if CONF_VARIANT in value and variant != value[CONF_VARIANT]: raise cv.Invalid( - "This board is unknown, please set the variant manually", + f"Option '{CONF_VARIANT}' does not match selected board.", + path=[CONF_VARIANT], + ) + value = value.copy() + value[CONF_VARIANT] = variant + else: + if CONF_VARIANT not in value: + raise cv.Invalid( + "This board is unknown, if you are sure you want to compile with this board selection, " + f"override with option '{CONF_VARIANT}'", path=[CONF_BOARD], ) - - value = value.copy() - value[CONF_VARIANT] = BOARDS[board][KEY_VARIANT] - + _LOGGER.warning( + "This board is unknown. Make sure the chosen chip component is correct.", + ) return value diff --git a/esphome/components/libretiny/__init__.py b/esphome/components/libretiny/__init__.py index 34aff0ae16..a8034f8fab 100644 --- a/esphome/components/libretiny/__init__.py +++ b/esphome/components/libretiny/__init__.py @@ -1,6 +1,10 @@ import json import logging -from os.path import dirname, isfile, join +from os.path import ( + dirname, + isfile, + join, +) import esphome.codegen as cg import esphome.config_validation as cv @@ -55,15 +59,25 @@ def _detect_variant(value): component: LibreTinyComponent = CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA] board = value[CONF_BOARD] # read board-default family if not specified - if CONF_FAMILY not in value: - if board not in component.boards: + if board not in component.boards: + if CONF_FAMILY not in value: raise cv.Invalid( - "This board is unknown, please set the family manually. " - "Also, make sure the chosen chip component is correct.", + "This board is unknown, if you are sure you want to compile with this board selection, " + f"override with option '{CONF_FAMILY}'", path=[CONF_BOARD], ) + _LOGGER.warning( + "This board is unknown. Make sure the chosen chip component is correct.", + ) + else: + family = component.boards[board][KEY_FAMILY] + if CONF_FAMILY in value and family != value[CONF_FAMILY]: + raise cv.Invalid( + f"Option '{CONF_FAMILY}' does not match selected board.", + path=[CONF_FAMILY], + ) value = value.copy() - value[CONF_FAMILY] = component.boards[board][KEY_FAMILY] + value[CONF_FAMILY] = family # read component name matching this family value[CONF_COMPONENT_ID] = FAMILY_COMPONENT[value[CONF_FAMILY]] # make sure the chosen component matches the family @@ -72,11 +86,6 @@ def _detect_variant(value): f"The chosen family doesn't belong to '{component.name}' component. The correct component is '{value[CONF_COMPONENT_ID]}'", path=[CONF_FAMILY], ) - # warn anyway if the board wasn't found - if board not in component.boards: - _LOGGER.warning( - "This board is unknown. Make sure the chosen chip component is correct.", - ) return value From 7510468a9bd9956b097d5bd4f00ef8e751c97b17 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:10:07 +1000 Subject: [PATCH 041/313] Add yamllint and clang-format to pre-commit hooks (#6578) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .pre-commit-config.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 69aafd4d15..15e59b7eb7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,3 +31,12 @@ repos: hooks: - id: pyupgrade args: [--py39-plus] + - repo: https://github.com/adrienverge/yamllint.git + rev: v1.35.1 + hooks: + - id: yamllint + - repo: https://github.com/pre-commit/mirrors-clang-format + rev: v13.0.1 + hooks: + - id: clang-format + From aee2a49cad466232b087dc0a690e0cd50f10a802 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Tue, 23 Apr 2024 00:17:00 +0200 Subject: [PATCH 042/313] esp32_ble: Consider ESP_BT_STATUS_DONE a successful state (#6493) Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp index a5bbd85b47..a5209c764a 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp @@ -364,7 +364,11 @@ void ESP32BLETracker::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_ga } void ESP32BLETracker::gap_scan_set_param_complete_(const esp_ble_gap_cb_param_t::ble_scan_param_cmpl_evt_param ¶m) { - this->scan_set_param_failed_ = param.status; + if (param.status == ESP_BT_STATUS_DONE) { + this->scan_set_param_failed_ = ESP_BT_STATUS_SUCCESS; + } else { + this->scan_set_param_failed_ = param.status; + } } void ESP32BLETracker::gap_scan_start_complete_(const esp_ble_gap_cb_param_t::ble_scan_start_cmpl_evt_param ¶m) { From 0874440a317bc8541b79f829a253209608be9568 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:48:30 -0400 Subject: [PATCH 043/313] Fix or filter (#6574) Co-authored-by: Jonathan Swoboda --- esphome/components/sensor/filter.cpp | 6 +++++- esphome/components/sensor/filter.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/esphome/components/sensor/filter.cpp b/esphome/components/sensor/filter.cpp index 3f67af59be..eaa909429b 100644 --- a/esphome/components/sensor/filter.cpp +++ b/esphome/components/sensor/filter.cpp @@ -359,11 +359,15 @@ OrFilter::OrFilter(std::vector filters) : filters_(std::move(filters)) OrFilter::PhiNode::PhiNode(OrFilter *or_parent) : or_parent_(or_parent) {} optional OrFilter::PhiNode::new_value(float value) { - this->or_parent_->output(value); + if (!this->or_parent_->has_value_) { + this->or_parent_->output(value); + this->or_parent_->has_value_ = true; + } return {}; } optional OrFilter::new_value(float value) { + this->has_value_ = false; for (Filter *filter : this->filters_) filter->input(value); diff --git a/esphome/components/sensor/filter.h b/esphome/components/sensor/filter.h index 1a08699d7b..c13cb3420a 100644 --- a/esphome/components/sensor/filter.h +++ b/esphome/components/sensor/filter.h @@ -388,6 +388,7 @@ class OrFilter : public Filter { }; std::vector filters_; + bool has_value_{false}; PhiNode phi_; }; From 496b7f45db59958eb5e3c75ebc19f24fc752b698 Mon Sep 17 00:00:00 2001 From: zry98 Date: Wed, 17 Apr 2024 23:31:20 +0200 Subject: [PATCH 044/313] [Tuya Climate] Fix compilation error caused by codegen (#6568) --- esphome/components/tuya/climate/__init__.py | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/esphome/components/tuya/climate/__init__.py b/esphome/components/tuya/climate/__init__.py index b3d401e5a4..56eb377ed7 100644 --- a/esphome/components/tuya/climate/__init__.py +++ b/esphome/components/tuya/climate/__init__.py @@ -208,7 +208,7 @@ async def to_code(config): cg.add(var.set_switch_id(switch_datapoint)) if active_state_config := config.get(CONF_ACTIVE_STATE): - cg.add(var.set_active_state_id(CONF_DATAPOINT)) + cg.add(var.set_active_state_id(active_state_config.get(CONF_DATAPOINT))) if (heating_value := active_state_config.get(CONF_HEATING_VALUE)) is not None: cg.add(var.set_active_state_heating_value(heating_value)) if (cooling_value := active_state_config.get(CONF_COOLING_VALUE)) is not None: @@ -219,14 +219,10 @@ async def to_code(config): cg.add(var.set_active_state_fanonly_value(fanonly_value)) else: if heating_state_pin_config := config.get(CONF_HEATING_STATE_PIN): - heating_state_pin = await cg.gpio_pin_expression( - config(heating_state_pin_config) - ) + heating_state_pin = await cg.gpio_pin_expression(heating_state_pin_config) cg.add(var.set_heating_state_pin(heating_state_pin)) if cooling_state_pin_config := config.get(CONF_COOLING_STATE_PIN): - cooling_state_pin = await cg.gpio_pin_expression( - config(cooling_state_pin_config) - ) + cooling_state_pin = await cg.gpio_pin_expression(cooling_state_pin_config) cg.add(var.set_cooling_state_pin(cooling_state_pin)) if target_temperature_datapoint := config.get(CONF_TARGET_TEMPERATURE_DATAPOINT): @@ -254,11 +250,11 @@ async def to_code(config): if preset_config := config.get(CONF_PRESET, {}): if eco_config := preset_config.get(CONF_ECO, {}): - cg.add(var.set_eco_id(CONF_DATAPOINT)) + cg.add(var.set_eco_id(eco_config.get(CONF_DATAPOINT))) if eco_temperature := eco_config.get(CONF_TEMPERATURE): cg.add(var.set_eco_temperature(eco_temperature)) - if CONF_SLEEP in preset_config: - cg.add(var.set_sleep_id(CONF_DATAPOINT)) + if sleep_config := preset_config.get(CONF_SLEEP, {}): + cg.add(var.set_sleep_id(sleep_config.get(CONF_DATAPOINT))) if swing_mode_config := config.get(CONF_SWING_MODE): if swing_vertical_datapoint := swing_mode_config.get(CONF_VERTICAL_DATAPOINT): @@ -268,7 +264,7 @@ async def to_code(config): ): cg.add(var.set_swing_horizontal_id(swing_horizontal_datapoint)) if fan_mode_config := config.get(CONF_FAN_MODE): - cg.add(var.set_fan_speed_id(CONF_DATAPOINT)) + cg.add(var.set_fan_speed_id(fan_mode_config.get(CONF_DATAPOINT))) if (fan_auto_value := fan_mode_config.get(CONF_AUTO_VALUE)) is not None: cg.add(var.set_fan_speed_auto_value(fan_auto_value)) if (fan_low_value := fan_mode_config.get(CONF_LOW_VALUE)) is not None: From 1a152169e0fb6ea0d1cd0873b9f140c201ae4def Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Mon, 22 Apr 2024 22:48:06 +0200 Subject: [PATCH 045/313] wifi: fix reconnect issue due to enablement of fast connect (#6598) --- esphome/components/wifi/wifi_component.cpp | 8 ++++++-- esphome/components/wifi/wifi_component.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 8f46bf29a0..075e683bb5 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -128,7 +128,7 @@ void WiFiComponent::loop() { case WIFI_COMPONENT_STATE_COOLDOWN: { this->status_set_warning(); if (millis() - this->action_started_ > 5000) { - if (this->fast_connect_) { + if (this->fast_connect_ || this->retry_hidden_) { this->start_connecting(this->sta_[0], false); } else { this->start_scanning(); @@ -591,6 +591,9 @@ void WiFiComponent::check_connecting_finished() { return; } + // We won't retry hidden networks unless a reconnect fails more than three times again + this->retry_hidden_ = false; + ESP_LOGI(TAG, "WiFi Connected!"); this->print_connect_params_(); @@ -668,10 +671,11 @@ void WiFiComponent::retry_connect() { this->wifi_mode_(false, {}); delay(100); // NOLINT this->num_retried_ = 0; + this->retry_hidden_ = false; } else { // Try hidden networks after 3 failed retries ESP_LOGD(TAG, "Retrying with hidden networks..."); - this->fast_connect_ = true; + this->retry_hidden_ = true; this->num_retried_++; } } else { diff --git a/esphome/components/wifi/wifi_component.h b/esphome/components/wifi/wifi_component.h index d9cb6a9ae2..133fa2970c 100644 --- a/esphome/components/wifi/wifi_component.h +++ b/esphome/components/wifi/wifi_component.h @@ -371,6 +371,7 @@ class WiFiComponent : public Component { std::vector sta_priorities_; WiFiAP selected_ap_; bool fast_connect_{false}; + bool retry_hidden_{false}; bool has_ap_{false}; WiFiAP ap_; From a29e634af103baa07dbcdaf02cd898e638d79d3a Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Mon, 22 Apr 2024 20:59:06 +0000 Subject: [PATCH 046/313] Calibrate Beken internal temperature (#6599) --- .../internal_temperature/internal_temperature.cpp | 8 +++++--- tests/components/internal_temperature/test.bk72xx.yaml | 3 +++ .../internal_temperature/test.esp32-c3-idf.yaml | 3 +++ tests/components/internal_temperature/test.esp32-c3.yaml | 3 +++ tests/components/internal_temperature/test.esp32-idf.yaml | 3 +++ tests/components/internal_temperature/test.esp32.yaml | 3 +++ tests/components/internal_temperature/test.rp2040.yaml | 3 +++ 7 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 tests/components/internal_temperature/test.bk72xx.yaml create mode 100644 tests/components/internal_temperature/test.esp32-c3-idf.yaml create mode 100644 tests/components/internal_temperature/test.esp32-c3.yaml create mode 100644 tests/components/internal_temperature/test.esp32-idf.yaml create mode 100644 tests/components/internal_temperature/test.esp32.yaml create mode 100644 tests/components/internal_temperature/test.rp2040.yaml diff --git a/esphome/components/internal_temperature/internal_temperature.cpp b/esphome/components/internal_temperature/internal_temperature.cpp index 255d95f6f8..47f516f568 100644 --- a/esphome/components/internal_temperature/internal_temperature.cpp +++ b/esphome/components/internal_temperature/internal_temperature.cpp @@ -55,11 +55,13 @@ void InternalTemperatureSensor::update() { uint32_t raw, result; result = temp_single_get_current_temperature(&raw); success = (result == 0); -#ifdef USE_LIBRETINY_VARIANT_BK7231T +#if defined(USE_LIBRETINY_VARIANT_BK7231N) + temperature = raw * -0.38f + 156.0f; +#elif defined(USE_LIBRETINY_VARIANT_BK7231T) temperature = raw * 0.04f; -#else +#else // USE_LIBRETINY_VARIANT temperature = raw * 0.128f; -#endif // USE_LIBRETINY_VARIANT_BK7231T +#endif // USE_LIBRETINY_VARIANT #endif // USE_BK72XX if (success && std::isfinite(temperature)) { this->publish_state(temperature); diff --git a/tests/components/internal_temperature/test.bk72xx.yaml b/tests/components/internal_temperature/test.bk72xx.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.bk72xx.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-c3-idf.yaml b/tests/components/internal_temperature/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-c3.yaml b/tests/components/internal_temperature/test.esp32-c3.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32-idf.yaml b/tests/components/internal_temperature/test.esp32-idf.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.esp32.yaml b/tests/components/internal_temperature/test.esp32.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" diff --git a/tests/components/internal_temperature/test.rp2040.yaml b/tests/components/internal_temperature/test.rp2040.yaml new file mode 100644 index 0000000000..28df4a6d9f --- /dev/null +++ b/tests/components/internal_temperature/test.rp2040.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: "Internal Temperature" From dd8be524b433ddd80c68c7556b5ba156b58cf81b Mon Sep 17 00:00:00 2001 From: Cody Cutrer Date: Mon, 22 Apr 2024 15:48:29 -0600 Subject: [PATCH 047/313] fix streaming logs from MQTT for ESP32 devices using TLS (#6605) --- esphome/mqtt.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/esphome/mqtt.py b/esphome/mqtt.py index 166301005d..667a20bcf8 100644 --- a/esphome/mqtt.py +++ b/esphome/mqtt.py @@ -10,6 +10,7 @@ import paho.mqtt.client as mqtt from esphome.const import ( CONF_BROKER, + CONF_CERTIFICATE_AUTHORITY, CONF_DISCOVERY_PREFIX, CONF_ESPHOME, CONF_LOG_TOPIC, @@ -99,7 +100,9 @@ def prepare( elif username: client.username_pw_set(username, password) - if config[CONF_MQTT].get(CONF_SSL_FINGERPRINTS): + if config[CONF_MQTT].get(CONF_SSL_FINGERPRINTS) or config[CONF_MQTT].get( + CONF_CERTIFICATE_AUTHORITY + ): if sys.version_info >= (2, 7, 13): tls_version = ssl.PROTOCOL_TLS # pylint: disable=no-member else: From 03d547d2c0a0b1e89487a5fec8a4696d6afd8685 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:04:56 +1000 Subject: [PATCH 048/313] Disallow variant/family override for known boards (#6512) --- esphome/components/esp32/__init__.py | 25 +++++++++++++------ esphome/components/libretiny/__init__.py | 31 +++++++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 50d6d229f9..8ae6262f2f 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -316,17 +316,26 @@ def _parse_platform_version(value): def _detect_variant(value): - if CONF_VARIANT not in value: - board = value[CONF_BOARD] - if board not in BOARDS: + board = value[CONF_BOARD] + if board in BOARDS: + variant = BOARDS[board][KEY_VARIANT] + if CONF_VARIANT in value and variant != value[CONF_VARIANT]: raise cv.Invalid( - "This board is unknown, please set the variant manually", + f"Option '{CONF_VARIANT}' does not match selected board.", + path=[CONF_VARIANT], + ) + value = value.copy() + value[CONF_VARIANT] = variant + else: + if CONF_VARIANT not in value: + raise cv.Invalid( + "This board is unknown, if you are sure you want to compile with this board selection, " + f"override with option '{CONF_VARIANT}'", path=[CONF_BOARD], ) - - value = value.copy() - value[CONF_VARIANT] = BOARDS[board][KEY_VARIANT] - + _LOGGER.warning( + "This board is unknown. Make sure the chosen chip component is correct.", + ) return value diff --git a/esphome/components/libretiny/__init__.py b/esphome/components/libretiny/__init__.py index 34aff0ae16..a8034f8fab 100644 --- a/esphome/components/libretiny/__init__.py +++ b/esphome/components/libretiny/__init__.py @@ -1,6 +1,10 @@ import json import logging -from os.path import dirname, isfile, join +from os.path import ( + dirname, + isfile, + join, +) import esphome.codegen as cg import esphome.config_validation as cv @@ -55,15 +59,25 @@ def _detect_variant(value): component: LibreTinyComponent = CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA] board = value[CONF_BOARD] # read board-default family if not specified - if CONF_FAMILY not in value: - if board not in component.boards: + if board not in component.boards: + if CONF_FAMILY not in value: raise cv.Invalid( - "This board is unknown, please set the family manually. " - "Also, make sure the chosen chip component is correct.", + "This board is unknown, if you are sure you want to compile with this board selection, " + f"override with option '{CONF_FAMILY}'", path=[CONF_BOARD], ) + _LOGGER.warning( + "This board is unknown. Make sure the chosen chip component is correct.", + ) + else: + family = component.boards[board][KEY_FAMILY] + if CONF_FAMILY in value and family != value[CONF_FAMILY]: + raise cv.Invalid( + f"Option '{CONF_FAMILY}' does not match selected board.", + path=[CONF_FAMILY], + ) value = value.copy() - value[CONF_FAMILY] = component.boards[board][KEY_FAMILY] + value[CONF_FAMILY] = family # read component name matching this family value[CONF_COMPONENT_ID] = FAMILY_COMPONENT[value[CONF_FAMILY]] # make sure the chosen component matches the family @@ -72,11 +86,6 @@ def _detect_variant(value): f"The chosen family doesn't belong to '{component.name}' component. The correct component is '{value[CONF_COMPONENT_ID]}'", path=[CONF_FAMILY], ) - # warn anyway if the board wasn't found - if board not in component.boards: - _LOGGER.warning( - "This board is unknown. Make sure the chosen chip component is correct.", - ) return value From 44d13f2405abba7d7f21334e1364b2ca90967a07 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Tue, 23 Apr 2024 00:17:00 +0200 Subject: [PATCH 049/313] esp32_ble: Consider ESP_BT_STATUS_DONE a successful state (#6493) Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp index a5bbd85b47..a5209c764a 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp @@ -364,7 +364,11 @@ void ESP32BLETracker::gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_ga } void ESP32BLETracker::gap_scan_set_param_complete_(const esp_ble_gap_cb_param_t::ble_scan_param_cmpl_evt_param ¶m) { - this->scan_set_param_failed_ = param.status; + if (param.status == ESP_BT_STATUS_DONE) { + this->scan_set_param_failed_ = ESP_BT_STATUS_SUCCESS; + } else { + this->scan_set_param_failed_ = param.status; + } } void ESP32BLETracker::gap_scan_start_complete_(const esp_ble_gap_cb_param_t::ble_scan_start_cmpl_evt_param ¶m) { From 3e6487609714d207a69d2a984ab40f9b9c0539a5 Mon Sep 17 00:00:00 2001 From: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com> Date: Mon, 22 Apr 2024 18:48:30 -0400 Subject: [PATCH 050/313] Fix or filter (#6574) Co-authored-by: Jonathan Swoboda --- esphome/components/sensor/filter.cpp | 6 +++++- esphome/components/sensor/filter.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/esphome/components/sensor/filter.cpp b/esphome/components/sensor/filter.cpp index 6d7acad7e0..18cc10ed8b 100644 --- a/esphome/components/sensor/filter.cpp +++ b/esphome/components/sensor/filter.cpp @@ -359,11 +359,15 @@ OrFilter::OrFilter(std::vector filters) : filters_(std::move(filters)) OrFilter::PhiNode::PhiNode(OrFilter *or_parent) : or_parent_(or_parent) {} optional OrFilter::PhiNode::new_value(float value) { - this->or_parent_->output(value); + if (!this->or_parent_->has_value_) { + this->or_parent_->output(value); + this->or_parent_->has_value_ = true; + } return {}; } optional OrFilter::new_value(float value) { + this->has_value_ = false; for (Filter *filter : this->filters_) filter->input(value); diff --git a/esphome/components/sensor/filter.h b/esphome/components/sensor/filter.h index 1a08699d7b..c13cb3420a 100644 --- a/esphome/components/sensor/filter.h +++ b/esphome/components/sensor/filter.h @@ -388,6 +388,7 @@ class OrFilter : public Filter { }; std::vector filters_; + bool has_value_{false}; PhiNode phi_; }; From 7ae36b023cec67a6e183df1ee7d183c12dd1d2a2 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Apr 2024 10:50:41 +1200 Subject: [PATCH 051/313] Bump version to 2024.4.1 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 76320e6c71..69949dc086 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.4.0" +__version__ = "2024.4.1" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From a7fb2ce3e114c96b4148b27516581b3455f09f40 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Apr 2024 11:01:20 +1200 Subject: [PATCH 052/313] Use clang-format version from requirements_dev file (#6606) --- .github/workflows/ci.yml | 3 +-- requirements_dev.txt | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d3ac7981d3..15f0904df4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,6 @@ permissions: env: DEFAULT_PYTHON: "3.9" PYUPGRADE_TARGET: "--py39-plus" - CLANG_FORMAT_VERSION: "13.0.1" concurrency: # yamllint disable-line rule:line-length @@ -239,7 +238,7 @@ jobs: - name: Install clang-format run: | . venv/bin/activate - pip install clang-format==${{ env.CLANG_FORMAT_VERSION }} + pip install clang-format -c requirements_dev.txt - name: Run clang-format run: | . venv/bin/activate diff --git a/requirements_dev.txt b/requirements_dev.txt index 6bfa015c6f..eb749a861d 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,4 +1,4 @@ # Useful stuff when working in a development environment -clang-format==13.0.1 -clang-tidy==14.0.6 -yamllint==1.35.1 +clang-format==13.0.1 # also change in .pre-commit-config.yaml and Dockerfile when updating +clang-tidy==14.0.6 # When updating clang-tidy, also update Dockerfile +yamllint==1.35.1 # also change in .pre-commit-config.yaml when updating From b737fe70a6c3fc811845d0e43097a4d4a5abf88c Mon Sep 17 00:00:00 2001 From: mrtoy-me <118446898+mrtoy-me@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:16:55 +1000 Subject: [PATCH 053/313] Fix SHT3xd fails sometimes in 2024.4.0 (#6592) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/sht3xd/sht3xd.cpp | 34 +++++++++++++++++++++++----- esphome/components/sht3xd/sht3xd.h | 7 ++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/esphome/components/sht3xd/sht3xd.cpp b/esphome/components/sht3xd/sht3xd.cpp index 888e954c6b..ffaf5db322 100644 --- a/esphome/components/sht3xd/sht3xd.cpp +++ b/esphome/components/sht3xd/sht3xd.cpp @@ -6,9 +6,14 @@ namespace sht3xd { static const char *const TAG = "sht3xd"; -// use read serial number register with clock stretching disabled as per other SHT3XD_COMMAND registers -// which provides support for SHT85 sensor -// SHT85 does not support clock stretching and uses same registers as SHT3xd with clock stretching disabled +// https://sensirion.com/media/documents/E5762713/63D103C2/Sensirion_electronic_identification_code_SHT3x.pdf +// indicates two possible read serial number registers either with clock stretching enabled or disabled. +// Other SHT3XD_COMMAND registers use the clock stretching disabled register. +// To ensure compatibility, reading serial number using the register with clock stretching register enabled +// (used originally in this component) is tried first and if that fails the alternate register address +// with clock stretching disabled is read. + +static const uint16_t SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING = 0x3780; static const uint16_t SHT3XD_COMMAND_READ_SERIAL_NUMBER = 0x3682; static const uint16_t SHT3XD_COMMAND_READ_STATUS = 0xF32D; @@ -22,13 +27,19 @@ static const uint16_t SHT3XD_COMMAND_FETCH_DATA = 0xE000; void SHT3XDComponent::setup() { ESP_LOGCONFIG(TAG, "Setting up SHT3xD..."); uint16_t raw_serial_number[2]; - if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER, raw_serial_number, 2)) { - this->mark_failed(); - return; + if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING, raw_serial_number, 2)) { + this->error_code_ = READ_SERIAL_STRETCHED_FAILED; + if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER, raw_serial_number, 2)) { + this->error_code_ = READ_SERIAL_FAILED; + this->mark_failed(); + return; + } } + this->serial_number_ = (uint32_t(raw_serial_number[0]) << 16) | uint32_t(raw_serial_number[1]); if (!this->write_command(heater_enabled_ ? SHT3XD_COMMAND_HEATER_ENABLE : SHT3XD_COMMAND_HEATER_DISABLE)) { + this->error_code_ = WRITE_HEATER_MODE_FAILED; this->mark_failed(); return; } @@ -36,10 +47,21 @@ void SHT3XDComponent::setup() { void SHT3XDComponent::dump_config() { ESP_LOGCONFIG(TAG, "SHT3xD:"); + switch (this->error_code_) { + case READ_SERIAL_FAILED: + ESP_LOGD(TAG, " Error reading serial number"); + break; + case WRITE_HEATER_MODE_FAILED: + ESP_LOGD(TAG, " Error writing heater mode"); + break; + default: + break; + } if (this->is_failed()) { ESP_LOGE(TAG, " Communication with SHT3xD failed!"); return; } + ESP_LOGD(TAG, " Setup successful"); ESP_LOGD(TAG, " Serial Number: 0x%08" PRIX32, this->serial_number_); ESP_LOGD(TAG, " Heater Enabled: %s", this->heater_enabled_ ? "true" : "false"); diff --git a/esphome/components/sht3xd/sht3xd.h b/esphome/components/sht3xd/sht3xd.h index d1a3360e69..74f155121b 100644 --- a/esphome/components/sht3xd/sht3xd.h +++ b/esphome/components/sht3xd/sht3xd.h @@ -22,6 +22,13 @@ class SHT3XDComponent : public PollingComponent, public sensirion_common::Sensir void set_heater_enabled(bool heater_enabled) { heater_enabled_ = heater_enabled; } protected: + enum ErrorCode { + NONE = 0, + READ_SERIAL_STRETCHED_FAILED, + READ_SERIAL_FAILED, + WRITE_HEATER_MODE_FAILED, + } error_code_{NONE}; + sensor::Sensor *temperature_sensor_{nullptr}; sensor::Sensor *humidity_sensor_{nullptr}; bool heater_enabled_{true}; From 057f473a4a19f05de5780337cfd84de6b2ec9061 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 22:38:51 -0500 Subject: [PATCH 054/313] Add some components to the new testing framework (P) (#6213) --- .../partition/test.esp32-c3-idf.yaml | 22 ++ tests/components/partition/test.esp32-c3.yaml | 22 ++ .../components/partition/test.esp32-idf.yaml | 22 ++ tests/components/partition/test.esp32.yaml | 22 ++ .../pca6416a/test.esp32-c3-idf.yaml | 17 ++ tests/components/pca6416a/test.esp32-c3.yaml | 17 ++ tests/components/pca6416a/test.esp32-idf.yaml | 17 ++ tests/components/pca6416a/test.esp32.yaml | 17 ++ tests/components/pca6416a/test.esp8266.yaml | 17 ++ tests/components/pca6416a/test.rp2040.yaml | 17 ++ .../components/pca9554/test.esp32-c3-idf.yaml | 26 ++ tests/components/pca9554/test.esp32-c3.yaml | 26 ++ tests/components/pca9554/test.esp32-idf.yaml | 26 ++ tests/components/pca9554/test.esp32.yaml | 26 ++ tests/components/pca9554/test.esp8266.yaml | 26 ++ tests/components/pca9554/test.rp2040.yaml | 26 ++ .../components/pca9685/test.esp32-c3-idf.yaml | 34 +++ tests/components/pca9685/test.esp32-c3.yaml | 34 +++ tests/components/pca9685/test.esp32-idf.yaml | 34 +++ tests/components/pca9685/test.esp32.yaml | 34 +++ tests/components/pca9685/test.esp8266.yaml | 34 +++ tests/components/pca9685/test.rp2040.yaml | 26 ++ .../components/pcd8544/test.esp32-c3-idf.yaml | 14 + tests/components/pcd8544/test.esp32-c3.yaml | 14 + tests/components/pcd8544/test.esp32-idf.yaml | 14 + tests/components/pcd8544/test.esp32.yaml | 14 + tests/components/pcd8544/test.esp8266.yaml | 14 + tests/components/pcd8544/test.rp2040.yaml | 14 + .../pcf85063/test.esp32-c3-idf.yaml | 12 + tests/components/pcf85063/test.esp32-c3.yaml | 12 + tests/components/pcf85063/test.esp32-idf.yaml | 12 + tests/components/pcf85063/test.esp32.yaml | 12 + tests/components/pcf85063/test.esp8266.yaml | 12 + tests/components/pcf85063/test.rp2040.yaml | 12 + .../components/pcf8563/test.esp32-c3-idf.yaml | 12 + tests/components/pcf8563/test.esp32-c3.yaml | 12 + tests/components/pcf8563/test.esp32-idf.yaml | 12 + tests/components/pcf8563/test.esp32.yaml | 12 + tests/components/pcf8563/test.esp8266.yaml | 12 + tests/components/pcf8563/test.rp2040.yaml | 12 + .../components/pcf8574/test.esp32-c3-idf.yaml | 28 ++ tests/components/pcf8574/test.esp32-c3.yaml | 28 ++ tests/components/pcf8574/test.esp32-idf.yaml | 28 ++ tests/components/pcf8574/test.esp32.yaml | 28 ++ tests/components/pcf8574/test.esp8266.yaml | 28 ++ tests/components/pcf8574/test.rp2040.yaml | 28 ++ tests/components/pid/test.esp32-c3-idf.yaml | 56 ++++ tests/components/pid/test.esp32-c3.yaml | 56 ++++ tests/components/pid/test.esp32-idf.yaml | 56 ++++ tests/components/pid/test.esp32.yaml | 56 ++++ tests/components/pid/test.esp8266.yaml | 56 ++++ tests/components/pid/test.rp2040.yaml | 56 ++++ .../pipsolar/test.esp32-c3-idf.yaml | 247 ++++++++++++++++++ tests/components/pipsolar/test.esp32-c3.yaml | 247 ++++++++++++++++++ tests/components/pipsolar/test.esp32-idf.yaml | 247 ++++++++++++++++++ tests/components/pipsolar/test.esp32.yaml | 247 ++++++++++++++++++ tests/components/pipsolar/test.esp8266.yaml | 247 ++++++++++++++++++ tests/components/pipsolar/test.rp2040.yaml | 247 ++++++++++++++++++ .../components/pm1006/test.esp32-c3-idf.yaml | 10 + tests/components/pm1006/test.esp32-c3.yaml | 10 + tests/components/pm1006/test.esp32-idf.yaml | 10 + tests/components/pm1006/test.esp32.yaml | 10 + tests/components/pm1006/test.esp8266.yaml | 10 + tests/components/pm1006/test.rp2040.yaml | 10 + .../pmsa003i/test.esp32-c3-idf.yaml | 27 ++ tests/components/pmsa003i/test.esp32-c3.yaml | 27 ++ tests/components/pmsa003i/test.esp32-idf.yaml | 27 ++ tests/components/pmsa003i/test.esp32.yaml | 27 ++ tests/components/pmsa003i/test.esp8266.yaml | 27 ++ tests/components/pmsa003i/test.rp2040.yaml | 27 ++ .../components/pmsx003/test.esp32-c3-idf.yaml | 34 +++ tests/components/pmsx003/test.esp32-c3.yaml | 34 +++ tests/components/pmsx003/test.esp32-idf.yaml | 34 +++ tests/components/pmsx003/test.esp32.yaml | 34 +++ tests/components/pmsx003/test.esp8266.yaml | 34 +++ tests/components/pmsx003/test.rp2040.yaml | 34 +++ .../components/pmwcs3/test.esp32-c3-idf.yaml | 15 ++ tests/components/pmwcs3/test.esp32-c3.yaml | 15 ++ tests/components/pmwcs3/test.esp32-idf.yaml | 15 ++ tests/components/pmwcs3/test.esp32.yaml | 15 ++ tests/components/pmwcs3/test.esp8266.yaml | 15 ++ tests/components/pmwcs3/test.rp2040.yaml | 15 ++ .../pn532_i2c/test.esp32-c3-idf.yaml | 13 + tests/components/pn532_i2c/test.esp32-c3.yaml | 13 + .../components/pn532_i2c/test.esp32-idf.yaml | 13 + tests/components/pn532_i2c/test.esp32.yaml | 13 + tests/components/pn532_i2c/test.esp8266.yaml | 13 + tests/components/pn532_i2c/test.rp2040.yaml | 13 + .../pn532_spi/test.esp32-c3-idf.yaml | 15 ++ tests/components/pn532_spi/test.esp32-c3.yaml | 15 ++ .../components/pn532_spi/test.esp32-idf.yaml | 15 ++ tests/components/pn532_spi/test.esp32.yaml | 15 ++ tests/components/pn532_spi/test.esp8266.yaml | 15 ++ tests/components/pn532_spi/test.rp2040.yaml | 15 ++ .../pn7150_i2c/test.esp32-c3-idf.yaml | 35 +++ .../components/pn7150_i2c/test.esp32-c3.yaml | 35 +++ .../components/pn7150_i2c/test.esp32-idf.yaml | 35 +++ tests/components/pn7150_i2c/test.esp32.yaml | 35 +++ tests/components/pn7150_i2c/test.esp8266.yaml | 35 +++ tests/components/pn7150_i2c/test.rp2040.yaml | 35 +++ .../pn7160_i2c/test.esp32-c3-idf.yaml | 35 +++ .../components/pn7160_i2c/test.esp32-c3.yaml | 35 +++ .../components/pn7160_i2c/test.esp32-idf.yaml | 35 +++ tests/components/pn7160_i2c/test.esp32.yaml | 35 +++ tests/components/pn7160_i2c/test.esp8266.yaml | 35 +++ tests/components/pn7160_i2c/test.rp2040.yaml | 35 +++ .../pn7160_spi/test.esp32-c3-idf.yaml | 37 +++ .../components/pn7160_spi/test.esp32-c3.yaml | 37 +++ .../components/pn7160_spi/test.esp32-idf.yaml | 37 +++ tests/components/pn7160_spi/test.esp32.yaml | 37 +++ tests/components/pn7160_spi/test.esp8266.yaml | 37 +++ tests/components/pn7160_spi/test.rp2040.yaml | 37 +++ .../power_supply/test.esp32-c3-idf.yaml | 6 + .../power_supply/test.esp32-c3.yaml | 6 + .../power_supply/test.esp32-idf.yaml | 6 + tests/components/power_supply/test.esp32.yaml | 6 + .../components/power_supply/test.esp8266.yaml | 6 + .../components/power_supply/test.rp2040.yaml | 6 + .../prometheus/test.esp32-c3-idf.yaml | 21 ++ .../components/prometheus/test.esp32-c3.yaml | 21 ++ .../components/prometheus/test.esp32-idf.yaml | 21 ++ tests/components/prometheus/test.esp32.yaml | 21 ++ tests/components/prometheus/test.esp8266.yaml | 21 ++ tests/components/psram/test.esp32-c3-idf.yaml | 3 + tests/components/psram/test.esp32-c3.yaml | 3 + tests/components/psram/test.esp32-idf.yaml | 3 + tests/components/psram/test.esp32.yaml | 3 + .../pulse_counter/test.esp32-c3-idf.yaml | 9 + .../pulse_counter/test.esp32-c3.yaml | 9 + .../pulse_counter/test.esp32-idf.yaml | 9 + .../components/pulse_counter/test.esp32.yaml | 9 + .../pulse_counter/test.esp8266.yaml | 9 + .../components/pulse_counter/test.rp2040.yaml | 9 + .../pulse_meter/test.esp32-c3-idf.yaml | 13 + .../components/pulse_meter/test.esp32-c3.yaml | 13 + .../pulse_meter/test.esp32-idf.yaml | 13 + tests/components/pulse_meter/test.esp32.yaml | 13 + .../components/pulse_meter/test.esp8266.yaml | 13 + tests/components/pulse_meter/test.rp2040.yaml | 13 + .../pulse_width/test.esp32-c3-idf.yaml | 4 + .../components/pulse_width/test.esp32-c3.yaml | 4 + .../pulse_width/test.esp32-idf.yaml | 4 + tests/components/pulse_width/test.esp32.yaml | 4 + .../components/pulse_width/test.esp8266.yaml | 4 + tests/components/pulse_width/test.rp2040.yaml | 4 + .../pvvx_mithermometer/test.esp32-c3-idf.yaml | 44 ++++ .../pvvx_mithermometer/test.esp32-c3.yaml | 44 ++++ .../pvvx_mithermometer/test.esp32-idf.yaml | 44 ++++ .../pvvx_mithermometer/test.esp32.yaml | 44 ++++ .../pylontech/test.esp32-c3-idf.yaml | 48 ++++ tests/components/pylontech/test.esp32-c3.yaml | 48 ++++ .../components/pylontech/test.esp32-idf.yaml | 48 ++++ tests/components/pylontech/test.esp32.yaml | 48 ++++ tests/components/pylontech/test.esp8266.yaml | 48 ++++ tests/components/pylontech/test.rp2040.yaml | 48 ++++ .../pzem004t/test.esp32-c3-idf.yaml | 14 + tests/components/pzem004t/test.esp32-c3.yaml | 14 + tests/components/pzem004t/test.esp32-idf.yaml | 14 + tests/components/pzem004t/test.esp32.yaml | 14 + tests/components/pzem004t/test.esp8266.yaml | 14 + tests/components/pzem004t/test.rp2040.yaml | 14 + .../components/pzemac/test.esp32-c3-idf.yaml | 28 ++ tests/components/pzemac/test.esp32-c3.yaml | 28 ++ tests/components/pzemac/test.esp32-idf.yaml | 28 ++ tests/components/pzemac/test.esp32.yaml | 28 ++ tests/components/pzemac/test.esp8266.yaml | 28 ++ tests/components/pzemac/test.rp2040.yaml | 28 ++ .../components/pzemdc/test.esp32-c3-idf.yaml | 23 ++ tests/components/pzemdc/test.esp32-c3.yaml | 23 ++ tests/components/pzemdc/test.esp32-idf.yaml | 23 ++ tests/components/pzemdc/test.esp32.yaml | 23 ++ tests/components/pzemdc/test.esp8266.yaml | 23 ++ tests/components/pzemdc/test.rp2040.yaml | 23 ++ 173 files changed, 5245 insertions(+) create mode 100644 tests/components/partition/test.esp32-c3-idf.yaml create mode 100644 tests/components/partition/test.esp32-c3.yaml create mode 100644 tests/components/partition/test.esp32-idf.yaml create mode 100644 tests/components/partition/test.esp32.yaml create mode 100644 tests/components/pca6416a/test.esp32-c3-idf.yaml create mode 100644 tests/components/pca6416a/test.esp32-c3.yaml create mode 100644 tests/components/pca6416a/test.esp32-idf.yaml create mode 100644 tests/components/pca6416a/test.esp32.yaml create mode 100644 tests/components/pca6416a/test.esp8266.yaml create mode 100644 tests/components/pca6416a/test.rp2040.yaml create mode 100644 tests/components/pca9554/test.esp32-c3-idf.yaml create mode 100644 tests/components/pca9554/test.esp32-c3.yaml create mode 100644 tests/components/pca9554/test.esp32-idf.yaml create mode 100644 tests/components/pca9554/test.esp32.yaml create mode 100644 tests/components/pca9554/test.esp8266.yaml create mode 100644 tests/components/pca9554/test.rp2040.yaml create mode 100644 tests/components/pca9685/test.esp32-c3-idf.yaml create mode 100644 tests/components/pca9685/test.esp32-c3.yaml create mode 100644 tests/components/pca9685/test.esp32-idf.yaml create mode 100644 tests/components/pca9685/test.esp32.yaml create mode 100644 tests/components/pca9685/test.esp8266.yaml create mode 100644 tests/components/pca9685/test.rp2040.yaml create mode 100644 tests/components/pcd8544/test.esp32-c3-idf.yaml create mode 100644 tests/components/pcd8544/test.esp32-c3.yaml create mode 100644 tests/components/pcd8544/test.esp32-idf.yaml create mode 100644 tests/components/pcd8544/test.esp32.yaml create mode 100644 tests/components/pcd8544/test.esp8266.yaml create mode 100644 tests/components/pcd8544/test.rp2040.yaml create mode 100644 tests/components/pcf85063/test.esp32-c3-idf.yaml create mode 100644 tests/components/pcf85063/test.esp32-c3.yaml create mode 100644 tests/components/pcf85063/test.esp32-idf.yaml create mode 100644 tests/components/pcf85063/test.esp32.yaml create mode 100644 tests/components/pcf85063/test.esp8266.yaml create mode 100644 tests/components/pcf85063/test.rp2040.yaml create mode 100644 tests/components/pcf8563/test.esp32-c3-idf.yaml create mode 100644 tests/components/pcf8563/test.esp32-c3.yaml create mode 100644 tests/components/pcf8563/test.esp32-idf.yaml create mode 100644 tests/components/pcf8563/test.esp32.yaml create mode 100644 tests/components/pcf8563/test.esp8266.yaml create mode 100644 tests/components/pcf8563/test.rp2040.yaml create mode 100644 tests/components/pcf8574/test.esp32-c3-idf.yaml create mode 100644 tests/components/pcf8574/test.esp32-c3.yaml create mode 100644 tests/components/pcf8574/test.esp32-idf.yaml create mode 100644 tests/components/pcf8574/test.esp32.yaml create mode 100644 tests/components/pcf8574/test.esp8266.yaml create mode 100644 tests/components/pcf8574/test.rp2040.yaml create mode 100644 tests/components/pid/test.esp32-c3-idf.yaml create mode 100644 tests/components/pid/test.esp32-c3.yaml create mode 100644 tests/components/pid/test.esp32-idf.yaml create mode 100644 tests/components/pid/test.esp32.yaml create mode 100644 tests/components/pid/test.esp8266.yaml create mode 100644 tests/components/pid/test.rp2040.yaml create mode 100644 tests/components/pipsolar/test.esp32-c3-idf.yaml create mode 100644 tests/components/pipsolar/test.esp32-c3.yaml create mode 100644 tests/components/pipsolar/test.esp32-idf.yaml create mode 100644 tests/components/pipsolar/test.esp32.yaml create mode 100644 tests/components/pipsolar/test.esp8266.yaml create mode 100644 tests/components/pipsolar/test.rp2040.yaml create mode 100644 tests/components/pm1006/test.esp32-c3-idf.yaml create mode 100644 tests/components/pm1006/test.esp32-c3.yaml create mode 100644 tests/components/pm1006/test.esp32-idf.yaml create mode 100644 tests/components/pm1006/test.esp32.yaml create mode 100644 tests/components/pm1006/test.esp8266.yaml create mode 100644 tests/components/pm1006/test.rp2040.yaml create mode 100644 tests/components/pmsa003i/test.esp32-c3-idf.yaml create mode 100644 tests/components/pmsa003i/test.esp32-c3.yaml create mode 100644 tests/components/pmsa003i/test.esp32-idf.yaml create mode 100644 tests/components/pmsa003i/test.esp32.yaml create mode 100644 tests/components/pmsa003i/test.esp8266.yaml create mode 100644 tests/components/pmsa003i/test.rp2040.yaml create mode 100644 tests/components/pmsx003/test.esp32-c3-idf.yaml create mode 100644 tests/components/pmsx003/test.esp32-c3.yaml create mode 100644 tests/components/pmsx003/test.esp32-idf.yaml create mode 100644 tests/components/pmsx003/test.esp32.yaml create mode 100644 tests/components/pmsx003/test.esp8266.yaml create mode 100644 tests/components/pmsx003/test.rp2040.yaml create mode 100644 tests/components/pmwcs3/test.esp32-c3-idf.yaml create mode 100644 tests/components/pmwcs3/test.esp32-c3.yaml create mode 100644 tests/components/pmwcs3/test.esp32-idf.yaml create mode 100644 tests/components/pmwcs3/test.esp32.yaml create mode 100644 tests/components/pmwcs3/test.esp8266.yaml create mode 100644 tests/components/pmwcs3/test.rp2040.yaml create mode 100644 tests/components/pn532_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/pn532_i2c/test.esp32-c3.yaml create mode 100644 tests/components/pn532_i2c/test.esp32-idf.yaml create mode 100644 tests/components/pn532_i2c/test.esp32.yaml create mode 100644 tests/components/pn532_i2c/test.esp8266.yaml create mode 100644 tests/components/pn532_i2c/test.rp2040.yaml create mode 100644 tests/components/pn532_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/pn532_spi/test.esp32-c3.yaml create mode 100644 tests/components/pn532_spi/test.esp32-idf.yaml create mode 100644 tests/components/pn532_spi/test.esp32.yaml create mode 100644 tests/components/pn532_spi/test.esp8266.yaml create mode 100644 tests/components/pn532_spi/test.rp2040.yaml create mode 100644 tests/components/pn7150_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/pn7150_i2c/test.esp32-c3.yaml create mode 100644 tests/components/pn7150_i2c/test.esp32-idf.yaml create mode 100644 tests/components/pn7150_i2c/test.esp32.yaml create mode 100644 tests/components/pn7150_i2c/test.esp8266.yaml create mode 100644 tests/components/pn7150_i2c/test.rp2040.yaml create mode 100644 tests/components/pn7160_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/pn7160_i2c/test.esp32-c3.yaml create mode 100644 tests/components/pn7160_i2c/test.esp32-idf.yaml create mode 100644 tests/components/pn7160_i2c/test.esp32.yaml create mode 100644 tests/components/pn7160_i2c/test.esp8266.yaml create mode 100644 tests/components/pn7160_i2c/test.rp2040.yaml create mode 100644 tests/components/pn7160_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/pn7160_spi/test.esp32-c3.yaml create mode 100644 tests/components/pn7160_spi/test.esp32-idf.yaml create mode 100644 tests/components/pn7160_spi/test.esp32.yaml create mode 100644 tests/components/pn7160_spi/test.esp8266.yaml create mode 100644 tests/components/pn7160_spi/test.rp2040.yaml create mode 100644 tests/components/power_supply/test.esp32-c3-idf.yaml create mode 100644 tests/components/power_supply/test.esp32-c3.yaml create mode 100644 tests/components/power_supply/test.esp32-idf.yaml create mode 100644 tests/components/power_supply/test.esp32.yaml create mode 100644 tests/components/power_supply/test.esp8266.yaml create mode 100644 tests/components/power_supply/test.rp2040.yaml create mode 100644 tests/components/prometheus/test.esp32-c3-idf.yaml create mode 100644 tests/components/prometheus/test.esp32-c3.yaml create mode 100644 tests/components/prometheus/test.esp32-idf.yaml create mode 100644 tests/components/prometheus/test.esp32.yaml create mode 100644 tests/components/prometheus/test.esp8266.yaml create mode 100644 tests/components/psram/test.esp32-c3-idf.yaml create mode 100644 tests/components/psram/test.esp32-c3.yaml create mode 100644 tests/components/psram/test.esp32-idf.yaml create mode 100644 tests/components/psram/test.esp32.yaml create mode 100644 tests/components/pulse_counter/test.esp32-c3-idf.yaml create mode 100644 tests/components/pulse_counter/test.esp32-c3.yaml create mode 100644 tests/components/pulse_counter/test.esp32-idf.yaml create mode 100644 tests/components/pulse_counter/test.esp32.yaml create mode 100644 tests/components/pulse_counter/test.esp8266.yaml create mode 100644 tests/components/pulse_counter/test.rp2040.yaml create mode 100644 tests/components/pulse_meter/test.esp32-c3-idf.yaml create mode 100644 tests/components/pulse_meter/test.esp32-c3.yaml create mode 100644 tests/components/pulse_meter/test.esp32-idf.yaml create mode 100644 tests/components/pulse_meter/test.esp32.yaml create mode 100644 tests/components/pulse_meter/test.esp8266.yaml create mode 100644 tests/components/pulse_meter/test.rp2040.yaml create mode 100644 tests/components/pulse_width/test.esp32-c3-idf.yaml create mode 100644 tests/components/pulse_width/test.esp32-c3.yaml create mode 100644 tests/components/pulse_width/test.esp32-idf.yaml create mode 100644 tests/components/pulse_width/test.esp32.yaml create mode 100644 tests/components/pulse_width/test.esp8266.yaml create mode 100644 tests/components/pulse_width/test.rp2040.yaml create mode 100644 tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml create mode 100644 tests/components/pvvx_mithermometer/test.esp32-c3.yaml create mode 100644 tests/components/pvvx_mithermometer/test.esp32-idf.yaml create mode 100644 tests/components/pvvx_mithermometer/test.esp32.yaml create mode 100644 tests/components/pylontech/test.esp32-c3-idf.yaml create mode 100644 tests/components/pylontech/test.esp32-c3.yaml create mode 100644 tests/components/pylontech/test.esp32-idf.yaml create mode 100644 tests/components/pylontech/test.esp32.yaml create mode 100644 tests/components/pylontech/test.esp8266.yaml create mode 100644 tests/components/pylontech/test.rp2040.yaml create mode 100644 tests/components/pzem004t/test.esp32-c3-idf.yaml create mode 100644 tests/components/pzem004t/test.esp32-c3.yaml create mode 100644 tests/components/pzem004t/test.esp32-idf.yaml create mode 100644 tests/components/pzem004t/test.esp32.yaml create mode 100644 tests/components/pzem004t/test.esp8266.yaml create mode 100644 tests/components/pzem004t/test.rp2040.yaml create mode 100644 tests/components/pzemac/test.esp32-c3-idf.yaml create mode 100644 tests/components/pzemac/test.esp32-c3.yaml create mode 100644 tests/components/pzemac/test.esp32-idf.yaml create mode 100644 tests/components/pzemac/test.esp32.yaml create mode 100644 tests/components/pzemac/test.esp8266.yaml create mode 100644 tests/components/pzemac/test.rp2040.yaml create mode 100644 tests/components/pzemdc/test.esp32-c3-idf.yaml create mode 100644 tests/components/pzemdc/test.esp32-c3.yaml create mode 100644 tests/components/pzemdc/test.esp32-idf.yaml create mode 100644 tests/components/pzemdc/test.esp32.yaml create mode 100644 tests/components/pzemdc/test.esp8266.yaml create mode 100644 tests/components/pzemdc/test.rp2040.yaml diff --git a/tests/components/partition/test.esp32-c3-idf.yaml b/tests/components/partition/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..77cfc5ad44 --- /dev/null +++ b/tests/components/partition/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +light: + - platform: esp32_rmt_led_strip + id: part_leds + default_transition_length: 500ms + chipset: ws2812 + rgb_order: GRB + num_leds: 256 + pin: 2 + rmt_channel: 0 + - platform: partition + name: Partition Light + segments: + - id: part_leds + from: 0 + to: 0 + - id: part_leds + from: 1 + to: 10 + - id: part_leds + from: 20 + to: 25 + - single_light_id: part_leds diff --git a/tests/components/partition/test.esp32-c3.yaml b/tests/components/partition/test.esp32-c3.yaml new file mode 100644 index 0000000000..77cfc5ad44 --- /dev/null +++ b/tests/components/partition/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +light: + - platform: esp32_rmt_led_strip + id: part_leds + default_transition_length: 500ms + chipset: ws2812 + rgb_order: GRB + num_leds: 256 + pin: 2 + rmt_channel: 0 + - platform: partition + name: Partition Light + segments: + - id: part_leds + from: 0 + to: 0 + - id: part_leds + from: 1 + to: 10 + - id: part_leds + from: 20 + to: 25 + - single_light_id: part_leds diff --git a/tests/components/partition/test.esp32-idf.yaml b/tests/components/partition/test.esp32-idf.yaml new file mode 100644 index 0000000000..77cfc5ad44 --- /dev/null +++ b/tests/components/partition/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +light: + - platform: esp32_rmt_led_strip + id: part_leds + default_transition_length: 500ms + chipset: ws2812 + rgb_order: GRB + num_leds: 256 + pin: 2 + rmt_channel: 0 + - platform: partition + name: Partition Light + segments: + - id: part_leds + from: 0 + to: 0 + - id: part_leds + from: 1 + to: 10 + - id: part_leds + from: 20 + to: 25 + - single_light_id: part_leds diff --git a/tests/components/partition/test.esp32.yaml b/tests/components/partition/test.esp32.yaml new file mode 100644 index 0000000000..c8eae67d40 --- /dev/null +++ b/tests/components/partition/test.esp32.yaml @@ -0,0 +1,22 @@ +light: + - platform: fastled_clockless + id: part_leds + chipset: WS2812B + pin: 2 + num_leds: 256 + rgb_order: GRB + default_transition_length: 0s + color_correct: [50%, 50%, 50%] + - platform: partition + name: Partition Light + segments: + - id: part_leds + from: 0 + to: 0 + - id: part_leds + from: 1 + to: 10 + - id: part_leds + from: 20 + to: 25 + - single_light_id: part_leds diff --git a/tests/components/pca6416a/test.esp32-c3-idf.yaml b/tests/components/pca6416a/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fe940c44cc --- /dev/null +++ b/tests/components/pca6416a/test.esp32-c3-idf.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 5 + sda: 4 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca6416a/test.esp32-c3.yaml b/tests/components/pca6416a/test.esp32-c3.yaml new file mode 100644 index 0000000000..fe940c44cc --- /dev/null +++ b/tests/components/pca6416a/test.esp32-c3.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 5 + sda: 4 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca6416a/test.esp32-idf.yaml b/tests/components/pca6416a/test.esp32-idf.yaml new file mode 100644 index 0000000000..669e9416e4 --- /dev/null +++ b/tests/components/pca6416a/test.esp32-idf.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 16 + sda: 17 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca6416a/test.esp32.yaml b/tests/components/pca6416a/test.esp32.yaml new file mode 100644 index 0000000000..669e9416e4 --- /dev/null +++ b/tests/components/pca6416a/test.esp32.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 16 + sda: 17 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca6416a/test.esp8266.yaml b/tests/components/pca6416a/test.esp8266.yaml new file mode 100644 index 0000000000..fe940c44cc --- /dev/null +++ b/tests/components/pca6416a/test.esp8266.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 5 + sda: 4 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca6416a/test.rp2040.yaml b/tests/components/pca6416a/test.rp2040.yaml new file mode 100644 index 0000000000..fe940c44cc --- /dev/null +++ b/tests/components/pca6416a/test.rp2040.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_pca6416a + scl: 5 + sda: 4 + +pca6416a: + - id: pca6416a_hub + address: 0x21 + +binary_sensor: + - platform: gpio + name: PCA6416A Binary Sensor + pin: + pca6416a: pca6416a_hub + number: 15 + mode: INPUT + inverted: true diff --git a/tests/components/pca9554/test.esp32-c3-idf.yaml b/tests/components/pca9554/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0ff453e64f --- /dev/null +++ b/tests/components/pca9554/test.esp32-c3-idf.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 5 + sda: 4 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9554/test.esp32-c3.yaml b/tests/components/pca9554/test.esp32-c3.yaml new file mode 100644 index 0000000000..0ff453e64f --- /dev/null +++ b/tests/components/pca9554/test.esp32-c3.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 5 + sda: 4 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9554/test.esp32-idf.yaml b/tests/components/pca9554/test.esp32-idf.yaml new file mode 100644 index 0000000000..8fe9686303 --- /dev/null +++ b/tests/components/pca9554/test.esp32-idf.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 16 + sda: 17 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9554/test.esp32.yaml b/tests/components/pca9554/test.esp32.yaml new file mode 100644 index 0000000000..8fe9686303 --- /dev/null +++ b/tests/components/pca9554/test.esp32.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 16 + sda: 17 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9554/test.esp8266.yaml b/tests/components/pca9554/test.esp8266.yaml new file mode 100644 index 0000000000..0ff453e64f --- /dev/null +++ b/tests/components/pca9554/test.esp8266.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 5 + sda: 4 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9554/test.rp2040.yaml b/tests/components/pca9554/test.rp2040.yaml new file mode 100644 index 0000000000..0ff453e64f --- /dev/null +++ b/tests/components/pca9554/test.rp2040.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 5 + sda: 4 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pca9685/test.esp32-c3-idf.yaml b/tests/components/pca9685/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e532f323be --- /dev/null +++ b/tests/components/pca9685/test.esp32-c3-idf.yaml @@ -0,0 +1,34 @@ +i2c: + - id: i2c_pca9685 + scl: 5 + sda: 4 + +pca9685: + frequency: 500 + address: 0x0 + +output: + - platform: pca9685 + id: pca_0 + channel: 0 + - platform: pca9685 + id: pca_1 + channel: 1 + - platform: pca9685 + id: pca_2 + channel: 2 + - platform: pca9685 + id: pca_3 + channel: 3 + - platform: pca9685 + id: pca_4 + channel: 4 + - platform: pca9685 + id: pca_5 + channel: 5 + - platform: pca9685 + id: pca_6 + channel: 6 + - platform: pca9685 + id: pca_7 + channel: 7 diff --git a/tests/components/pca9685/test.esp32-c3.yaml b/tests/components/pca9685/test.esp32-c3.yaml new file mode 100644 index 0000000000..e532f323be --- /dev/null +++ b/tests/components/pca9685/test.esp32-c3.yaml @@ -0,0 +1,34 @@ +i2c: + - id: i2c_pca9685 + scl: 5 + sda: 4 + +pca9685: + frequency: 500 + address: 0x0 + +output: + - platform: pca9685 + id: pca_0 + channel: 0 + - platform: pca9685 + id: pca_1 + channel: 1 + - platform: pca9685 + id: pca_2 + channel: 2 + - platform: pca9685 + id: pca_3 + channel: 3 + - platform: pca9685 + id: pca_4 + channel: 4 + - platform: pca9685 + id: pca_5 + channel: 5 + - platform: pca9685 + id: pca_6 + channel: 6 + - platform: pca9685 + id: pca_7 + channel: 7 diff --git a/tests/components/pca9685/test.esp32-idf.yaml b/tests/components/pca9685/test.esp32-idf.yaml new file mode 100644 index 0000000000..d02a16bcd1 --- /dev/null +++ b/tests/components/pca9685/test.esp32-idf.yaml @@ -0,0 +1,34 @@ +i2c: + - id: i2c_pca9685 + scl: 16 + sda: 17 + +pca9685: + frequency: 500 + address: 0x0 + +output: + - platform: pca9685 + id: pca_0 + channel: 0 + - platform: pca9685 + id: pca_1 + channel: 1 + - platform: pca9685 + id: pca_2 + channel: 2 + - platform: pca9685 + id: pca_3 + channel: 3 + - platform: pca9685 + id: pca_4 + channel: 4 + - platform: pca9685 + id: pca_5 + channel: 5 + - platform: pca9685 + id: pca_6 + channel: 6 + - platform: pca9685 + id: pca_7 + channel: 7 diff --git a/tests/components/pca9685/test.esp32.yaml b/tests/components/pca9685/test.esp32.yaml new file mode 100644 index 0000000000..d02a16bcd1 --- /dev/null +++ b/tests/components/pca9685/test.esp32.yaml @@ -0,0 +1,34 @@ +i2c: + - id: i2c_pca9685 + scl: 16 + sda: 17 + +pca9685: + frequency: 500 + address: 0x0 + +output: + - platform: pca9685 + id: pca_0 + channel: 0 + - platform: pca9685 + id: pca_1 + channel: 1 + - platform: pca9685 + id: pca_2 + channel: 2 + - platform: pca9685 + id: pca_3 + channel: 3 + - platform: pca9685 + id: pca_4 + channel: 4 + - platform: pca9685 + id: pca_5 + channel: 5 + - platform: pca9685 + id: pca_6 + channel: 6 + - platform: pca9685 + id: pca_7 + channel: 7 diff --git a/tests/components/pca9685/test.esp8266.yaml b/tests/components/pca9685/test.esp8266.yaml new file mode 100644 index 0000000000..e532f323be --- /dev/null +++ b/tests/components/pca9685/test.esp8266.yaml @@ -0,0 +1,34 @@ +i2c: + - id: i2c_pca9685 + scl: 5 + sda: 4 + +pca9685: + frequency: 500 + address: 0x0 + +output: + - platform: pca9685 + id: pca_0 + channel: 0 + - platform: pca9685 + id: pca_1 + channel: 1 + - platform: pca9685 + id: pca_2 + channel: 2 + - platform: pca9685 + id: pca_3 + channel: 3 + - platform: pca9685 + id: pca_4 + channel: 4 + - platform: pca9685 + id: pca_5 + channel: 5 + - platform: pca9685 + id: pca_6 + channel: 6 + - platform: pca9685 + id: pca_7 + channel: 7 diff --git a/tests/components/pca9685/test.rp2040.yaml b/tests/components/pca9685/test.rp2040.yaml new file mode 100644 index 0000000000..0ff453e64f --- /dev/null +++ b/tests/components/pca9685/test.rp2040.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_pca9554 + scl: 5 + sda: 4 + +pca9554: + - id: pca9554_hub + pin_count: 8 + address: 0x3F + +binary_sensor: + - platform: gpio + id: pca9554_input + name: PCA9554 Binary Sensor + pin: + pca9554: pca9554_hub + number: 1 + mode: INPUT + inverted: true + - platform: gpio + id: pca9554_output + pin: + pca9554: pca9554_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcd8544/test.esp32-c3-idf.yaml b/tests/components/pcd8544/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..57771d2d73 --- /dev/null +++ b/tests/components/pcd8544/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: pcd8544 + cs_pin: 2 + dc_pin: 3 + reset_pin: 1 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcd8544/test.esp32-c3.yaml b/tests/components/pcd8544/test.esp32-c3.yaml new file mode 100644 index 0000000000..57771d2d73 --- /dev/null +++ b/tests/components/pcd8544/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: pcd8544 + cs_pin: 2 + dc_pin: 3 + reset_pin: 1 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcd8544/test.esp32-idf.yaml b/tests/components/pcd8544/test.esp32-idf.yaml new file mode 100644 index 0000000000..20c05c407f --- /dev/null +++ b/tests/components/pcd8544/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: pcd8544 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcd8544/test.esp32.yaml b/tests/components/pcd8544/test.esp32.yaml new file mode 100644 index 0000000000..20c05c407f --- /dev/null +++ b/tests/components/pcd8544/test.esp32.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: pcd8544 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcd8544/test.esp8266.yaml b/tests/components/pcd8544/test.esp8266.yaml new file mode 100644 index 0000000000..6e6022c6d2 --- /dev/null +++ b/tests/components/pcd8544/test.esp8266.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: pcd8544 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcd8544/test.rp2040.yaml b/tests/components/pcd8544/test.rp2040.yaml new file mode 100644 index 0000000000..7181f99fb1 --- /dev/null +++ b/tests/components/pcd8544/test.rp2040.yaml @@ -0,0 +1,14 @@ +spi: + - id: spi_pcd8544 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: pcd8544 + cs_pin: 6 + dc_pin: 5 + reset_pin: 7 + contrast: 60 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); diff --git a/tests/components/pcf85063/test.esp32-c3-idf.yaml b/tests/components/pcf85063/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9e1a3da81e --- /dev/null +++ b/tests/components/pcf85063/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 5 + sda: 4 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf85063/test.esp32-c3.yaml b/tests/components/pcf85063/test.esp32-c3.yaml new file mode 100644 index 0000000000..9e1a3da81e --- /dev/null +++ b/tests/components/pcf85063/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 5 + sda: 4 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf85063/test.esp32-idf.yaml b/tests/components/pcf85063/test.esp32-idf.yaml new file mode 100644 index 0000000000..9cce415103 --- /dev/null +++ b/tests/components/pcf85063/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 16 + sda: 17 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf85063/test.esp32.yaml b/tests/components/pcf85063/test.esp32.yaml new file mode 100644 index 0000000000..9cce415103 --- /dev/null +++ b/tests/components/pcf85063/test.esp32.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 16 + sda: 17 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf85063/test.esp8266.yaml b/tests/components/pcf85063/test.esp8266.yaml new file mode 100644 index 0000000000..9e1a3da81e --- /dev/null +++ b/tests/components/pcf85063/test.esp8266.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 5 + sda: 4 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf85063/test.rp2040.yaml b/tests/components/pcf85063/test.rp2040.yaml new file mode 100644 index 0000000000..9e1a3da81e --- /dev/null +++ b/tests/components/pcf85063/test.rp2040.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf85063.read_time + - pcf85063.write_time + +i2c: + - id: i2c_pcf85063 + scl: 5 + sda: 4 + +time: + - platform: pcf85063 diff --git a/tests/components/pcf8563/test.esp32-c3-idf.yaml b/tests/components/pcf8563/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f91a465e0f --- /dev/null +++ b/tests/components/pcf8563/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8563/test.esp32-c3.yaml b/tests/components/pcf8563/test.esp32-c3.yaml new file mode 100644 index 0000000000..f91a465e0f --- /dev/null +++ b/tests/components/pcf8563/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8563/test.esp32-idf.yaml b/tests/components/pcf8563/test.esp32-idf.yaml new file mode 100644 index 0000000000..e95b487b19 --- /dev/null +++ b/tests/components/pcf8563/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 16 + sda: 17 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8563/test.esp32.yaml b/tests/components/pcf8563/test.esp32.yaml new file mode 100644 index 0000000000..e95b487b19 --- /dev/null +++ b/tests/components/pcf8563/test.esp32.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 16 + sda: 17 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8563/test.esp8266.yaml b/tests/components/pcf8563/test.esp8266.yaml new file mode 100644 index 0000000000..f91a465e0f --- /dev/null +++ b/tests/components/pcf8563/test.esp8266.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8563/test.rp2040.yaml b/tests/components/pcf8563/test.rp2040.yaml new file mode 100644 index 0000000000..f91a465e0f --- /dev/null +++ b/tests/components/pcf8563/test.rp2040.yaml @@ -0,0 +1,12 @@ +esphome: + on_boot: + - pcf8563.read_time + - pcf8563.write_time + +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +time: + - platform: pcf8563 diff --git a/tests/components/pcf8574/test.esp32-c3-idf.yaml b/tests/components/pcf8574/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..551e425892 --- /dev/null +++ b/tests/components/pcf8574/test.esp32-c3-idf.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcf8574/test.esp32-c3.yaml b/tests/components/pcf8574/test.esp32-c3.yaml new file mode 100644 index 0000000000..551e425892 --- /dev/null +++ b/tests/components/pcf8574/test.esp32-c3.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcf8574/test.esp32-idf.yaml b/tests/components/pcf8574/test.esp32-idf.yaml new file mode 100644 index 0000000000..aeed55f4fe --- /dev/null +++ b/tests/components/pcf8574/test.esp32-idf.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 16 + sda: 17 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcf8574/test.esp32.yaml b/tests/components/pcf8574/test.esp32.yaml new file mode 100644 index 0000000000..aeed55f4fe --- /dev/null +++ b/tests/components/pcf8574/test.esp32.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 16 + sda: 17 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcf8574/test.esp8266.yaml b/tests/components/pcf8574/test.esp8266.yaml new file mode 100644 index 0000000000..551e425892 --- /dev/null +++ b/tests/components/pcf8574/test.esp8266.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pcf8574/test.rp2040.yaml b/tests/components/pcf8574/test.rp2040.yaml new file mode 100644 index 0000000000..551e425892 --- /dev/null +++ b/tests/components/pcf8574/test.rp2040.yaml @@ -0,0 +1,28 @@ +i2c: + - id: i2c_pcf8563 + scl: 5 + sda: 4 + +pcf8574: + - id: pcf8574_hub + address: 0x21 + pcf8575: false + +binary_sensor: + - platform: gpio + id: pcf8574_binary_sensor + name: PCF Binary Sensor + pin: + pcf8574: pcf8574_hub + number: 1 + mode: INPUT + inverted: true + +output: + - platform: gpio + id: pcf8574_output + pin: + pcf8574: pcf8574_hub + number: 0 + mode: OUTPUT + inverted: false diff --git a/tests/components/pid/test.esp32-c3-idf.yaml b/tests/components/pid/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.esp32-c3-idf.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.esp32-c3.yaml b/tests/components/pid/test.esp32-c3.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.esp32-c3.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.esp32-idf.yaml b/tests/components/pid/test.esp32-idf.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.esp32-idf.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.esp32.yaml b/tests/components/pid/test.esp32.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.esp32.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.esp8266.yaml b/tests/components/pid/test.esp8266.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.esp8266.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.rp2040.yaml b/tests/components/pid/test.rp2040.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/test.rp2040.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pipsolar/test.esp32-c3-idf.yaml b/tests/components/pipsolar/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..12e9266343 --- /dev/null +++ b/tests/components/pipsolar/test.esp32-c3-idf.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pipsolar/test.esp32-c3.yaml b/tests/components/pipsolar/test.esp32-c3.yaml new file mode 100644 index 0000000000..12e9266343 --- /dev/null +++ b/tests/components/pipsolar/test.esp32-c3.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pipsolar/test.esp32-idf.yaml b/tests/components/pipsolar/test.esp32-idf.yaml new file mode 100644 index 0000000000..fcd4575739 --- /dev/null +++ b/tests/components/pipsolar/test.esp32-idf.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pipsolar/test.esp32.yaml b/tests/components/pipsolar/test.esp32.yaml new file mode 100644 index 0000000000..fcd4575739 --- /dev/null +++ b/tests/components/pipsolar/test.esp32.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pipsolar/test.esp8266.yaml b/tests/components/pipsolar/test.esp8266.yaml new file mode 100644 index 0000000000..12e9266343 --- /dev/null +++ b/tests/components/pipsolar/test.esp8266.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pipsolar/test.rp2040.yaml b/tests/components/pipsolar/test.rp2040.yaml new file mode 100644 index 0000000000..12e9266343 --- /dev/null +++ b/tests/components/pipsolar/test.rp2040.yaml @@ -0,0 +1,247 @@ +esphome: + on_boot: + then: + - output.pipsolar.set_level: + id: inverter0_battery_recharge_voltage_out + value: 48.0 + +uart: + - id: uart_pipsolar + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pipsolar: + id: inverter0 + +binary_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + add_sbu_priority_version: + id: inverter0_add_sbu_priority_version + name: inverter0_add_sbu_priority_version + configuration_status: + id: inverter0_configuration_status + name: inverter0_configuration_status + scc_firmware_version: + id: inverter0_scc_firmware_version + name: inverter0_scc_firmware_version + load_status: + id: inverter0_load_status + name: inverter0_load_status + battery_voltage_to_steady_while_charging: + id: inverter0_battery_voltage_to_steady_while_charging + name: inverter0_battery_voltage_to_steady_while_charging + charging_status: + id: inverter0_charging_status + name: inverter0_charging_status + scc_charging_status: + id: inverter0_scc_charging_status + name: inverter0_scc_charging_status + ac_charging_status: + id: inverter0_ac_charging_status + name: inverter0_ac_charging_status + charging_to_floating_mode: + id: inverter0_charging_to_floating_mode + name: inverter0_charging_to_floating_mode + switch_on: + id: inverter0_switch_on + name: inverter0_switch_on + dustproof_installed: + id: inverter0_dustproof_installed + name: inverter0_dustproof_installed + silence_buzzer_open_buzzer: + id: inverter0_silence_buzzer_open_buzzer + name: inverter0_silence_buzzer_open_buzzer + overload_bypass_function: + id: inverter0_overload_bypass_function + name: inverter0_overload_bypass_function + lcd_escape_to_default: + id: inverter0_lcd_escape_to_default + name: inverter0_lcd_escape_to_default + overload_restart_function: + id: inverter0_overload_restart_function + name: inverter0_overload_restart_function + over_temperature_restart_function: + id: inverter0_over_temperature_restart_function + name: inverter0_over_temperature_restart_function + backlight_on: + id: inverter0_backlight_on + name: inverter0_backlight_on + +output: + - platform: pipsolar + pipsolar_id: inverter0 + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage_out + +sensor: + - platform: pipsolar + pipsolar_id: inverter0 + grid_rating_voltage: + id: inverter0_grid_rating_voltage + name: inverter0_grid_rating_voltage + grid_rating_current: + id: inverter0_grid_rating_current + name: inverter0_grid_rating_current + ac_output_rating_voltage: + id: inverter0_ac_output_rating_voltage + name: inverter0_ac_output_rating_voltage + ac_output_rating_frequency: + id: inverter0_ac_output_rating_frequency + name: inverter0_ac_output_rating_frequency + ac_output_rating_current: + id: inverter0_ac_output_rating_current + name: inverter0_ac_output_rating_current + ac_output_rating_apparent_power: + id: inverter0_ac_output_rating_apparent_power + name: inverter0_ac_output_rating_apparent_power + ac_output_rating_active_power: + id: inverter0_ac_output_rating_active_power + name: inverter0_ac_output_rating_active_power + battery_rating_voltage: + id: inverter0_battery_rating_voltage + name: inverter0_battery_rating_voltage + battery_recharge_voltage: + id: inverter0_battery_recharge_voltage + name: inverter0_battery_recharge_voltage + battery_under_voltage: + id: inverter0_battery_under_voltage + name: inverter0_battery_under_voltage + battery_bulk_voltage: + id: inverter0_battery_bulk_voltage + name: inverter0_battery_bulk_voltage + battery_float_voltage: + id: inverter0_battery_float_voltage + name: inverter0_battery_float_voltage + battery_type: + id: inverter0_battery_type + name: inverter0_battery_type + current_max_ac_charging_current: + id: inverter0_current_max_ac_charging_current + name: inverter0_current_max_ac_charging_current + current_max_charging_current: + id: inverter0_current_max_charging_current + name: inverter0_current_max_charging_current + input_voltage_range: + id: inverter0_input_voltage_range + name: inverter0_input_voltage_range + output_source_priority: + id: inverter0_output_source_priority + name: inverter0_output_source_priority + charger_source_priority: + id: inverter0_charger_source_priority + name: inverter0_charger_source_priority + parallel_max_num: + id: inverter0_parallel_max_num + name: inverter0_parallel_max_num + machine_type: + id: inverter0_machine_type + name: inverter0_machine_type + topology: + id: inverter0_topology + name: inverter0_topology + output_mode: + id: inverter0_output_mode + name: inverter0_output_mode + battery_redischarge_voltage: + id: inverter0_battery_redischarge_voltage + name: inverter0_battery_redischarge_voltage + pv_ok_condition_for_parallel: + id: inverter0_pv_ok_condition_for_parallel + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + id: inverter0_pv_power_balance + name: inverter0_pv_power_balance + grid_voltage: + id: inverter0_grid_voltage + name: inverter0_grid_voltage + grid_frequency: + id: inverter0_grid_frequency + name: inverter0_grid_frequency + ac_output_voltage: + id: inverter0_ac_output_voltage + name: inverter0_ac_output_voltage + ac_output_frequency: + id: inverter0_ac_output_frequency + name: inverter0_ac_output_frequency + ac_output_apparent_power: + id: inverter0_ac_output_apparent_power + name: inverter0_ac_output_apparent_power + ac_output_active_power: + id: inverter0_ac_output_active_power + name: inverter0_ac_output_active_power + output_load_percent: + id: inverter0_output_load_percent + name: inverter0_output_load_percent + bus_voltage: + id: inverter0_bus_voltage + name: inverter0_bus_voltage + battery_voltage: + id: inverter0_battery_voltage + name: inverter0_battery_voltage + battery_charging_current: + id: inverter0_battery_charging_current + name: inverter0_battery_charging_current + battery_capacity_percent: + id: inverter0_battery_capacity_percent + name: inverter0_battery_capacity_percent + inverter_heat_sink_temperature: + id: inverter0_inverter_heat_sink_temperature + name: inverter0_inverter_heat_sink_temperature + pv_input_current_for_battery: + id: inverter0_pv_input_current_for_battery + name: inverter0_pv_input_current_for_battery + pv_input_voltage: + id: inverter0_pv_input_voltage + name: inverter0_pv_input_voltage + battery_voltage_scc: + id: inverter0_battery_voltage_scc + name: inverter0_battery_voltage_scc + battery_discharge_current: + id: inverter0_battery_discharge_current + name: inverter0_battery_discharge_current + battery_voltage_offset_for_fans_on: + id: inverter0_battery_voltage_offset_for_fans_on + name: inverter0_battery_voltage_offset_for_fans_on + eeprom_version: + id: inverter0_eeprom_version + name: inverter0_eeprom_version + pv_charging_power: + id: inverter0_pv_charging_power + name: inverter0_pv_charging_power + +switch: + - platform: pipsolar + pipsolar_id: inverter0 + output_source_priority_utility: + name: inverter0_output_source_priority_utility + output_source_priority_solar: + name: inverter0_output_source_priority_solar + output_source_priority_battery: + name: inverter0_output_source_priority_battery + input_voltage_range: + name: inverter0_input_voltage_range + pv_ok_condition_for_parallel: + name: inverter0_pv_ok_condition_for_parallel + pv_power_balance: + name: inverter0_pv_power_balance + +text_sensor: + - platform: pipsolar + pipsolar_id: inverter0 + device_mode: + id: inverter0_device_mode + name: inverter0_device_mode + last_qpigs: + id: inverter0_last_qpigs + name: inverter0_last_qpigs + last_qpiri: + id: inverter0_last_qpiri + name: inverter0_last_qpiri + last_qmod: + id: inverter0_last_qmod + name: inverter0_last_qmod + last_qflag: + id: inverter0_last_qflag + name: inverter0_last_qflag diff --git a/tests/components/pm1006/test.esp32-c3-idf.yaml b/tests/components/pm1006/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..15ee077f3e --- /dev/null +++ b/tests/components/pm1006/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pm1006/test.esp32-c3.yaml b/tests/components/pm1006/test.esp32-c3.yaml new file mode 100644 index 0000000000..15ee077f3e --- /dev/null +++ b/tests/components/pm1006/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pm1006/test.esp32-idf.yaml b/tests/components/pm1006/test.esp32-idf.yaml new file mode 100644 index 0000000000..635af37b25 --- /dev/null +++ b/tests/components/pm1006/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pm1006/test.esp32.yaml b/tests/components/pm1006/test.esp32.yaml new file mode 100644 index 0000000000..635af37b25 --- /dev/null +++ b/tests/components/pm1006/test.esp32.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pm1006/test.esp8266.yaml b/tests/components/pm1006/test.esp8266.yaml new file mode 100644 index 0000000000..15ee077f3e --- /dev/null +++ b/tests/components/pm1006/test.esp8266.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pm1006/test.rp2040.yaml b/tests/components/pm1006/test.rp2040.yaml new file mode 100644 index 0000000000..15ee077f3e --- /dev/null +++ b/tests/components/pm1006/test.rp2040.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_pm1006 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pm1006 + pm_2_5: + name: Particulate Matter 2.5µm Concentration diff --git a/tests/components/pmsa003i/test.esp32-c3-idf.yaml b/tests/components/pmsa003i/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..70e28303a2 --- /dev/null +++ b/tests/components/pmsa003i/test.esp32-c3-idf.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 5 + sda: 4 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsa003i/test.esp32-c3.yaml b/tests/components/pmsa003i/test.esp32-c3.yaml new file mode 100644 index 0000000000..70e28303a2 --- /dev/null +++ b/tests/components/pmsa003i/test.esp32-c3.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 5 + sda: 4 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsa003i/test.esp32-idf.yaml b/tests/components/pmsa003i/test.esp32-idf.yaml new file mode 100644 index 0000000000..d8d96400f6 --- /dev/null +++ b/tests/components/pmsa003i/test.esp32-idf.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 16 + sda: 17 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsa003i/test.esp32.yaml b/tests/components/pmsa003i/test.esp32.yaml new file mode 100644 index 0000000000..d8d96400f6 --- /dev/null +++ b/tests/components/pmsa003i/test.esp32.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 16 + sda: 17 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsa003i/test.esp8266.yaml b/tests/components/pmsa003i/test.esp8266.yaml new file mode 100644 index 0000000000..70e28303a2 --- /dev/null +++ b/tests/components/pmsa003i/test.esp8266.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 5 + sda: 4 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsa003i/test.rp2040.yaml b/tests/components/pmsa003i/test.rp2040.yaml new file mode 100644 index 0000000000..70e28303a2 --- /dev/null +++ b/tests/components/pmsa003i/test.rp2040.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_pmsa003i + scl: 5 + sda: 4 + +sensor: + - platform: pmsa003i + pm_1_0: + name: PMSA003i PM1.0 + pm_2_5: + name: PMSA003i PM2.5 + pm_10_0: + name: PMSA003i PM10.0 + pmc_0_3: + name: PMSA003i PMC <0.3µm + pmc_0_5: + name: PMSA003i PMC <0.5µm + pmc_1_0: + name: PMSA003i PMC <1µm + pmc_2_5: + name: PMSA003i PMC <2.5µm + pmc_5_0: + name: PMSA003i PMC <5µm + pmc_10_0: + name: PMSA003i PMC <10µm + address: 0x12 + standard_units: true diff --git a/tests/components/pmsx003/test.esp32-c3-idf.yaml b/tests/components/pmsx003/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..58adc9390a --- /dev/null +++ b/tests/components/pmsx003/test.esp32-c3-idf.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmsx003/test.esp32-c3.yaml b/tests/components/pmsx003/test.esp32-c3.yaml new file mode 100644 index 0000000000..58adc9390a --- /dev/null +++ b/tests/components/pmsx003/test.esp32-c3.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmsx003/test.esp32-idf.yaml b/tests/components/pmsx003/test.esp32-idf.yaml new file mode 100644 index 0000000000..5e7ebbbb2e --- /dev/null +++ b/tests/components/pmsx003/test.esp32-idf.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmsx003/test.esp32.yaml b/tests/components/pmsx003/test.esp32.yaml new file mode 100644 index 0000000000..5e7ebbbb2e --- /dev/null +++ b/tests/components/pmsx003/test.esp32.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmsx003/test.esp8266.yaml b/tests/components/pmsx003/test.esp8266.yaml new file mode 100644 index 0000000000..58adc9390a --- /dev/null +++ b/tests/components/pmsx003/test.esp8266.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmsx003/test.rp2040.yaml b/tests/components/pmsx003/test.rp2040.yaml new file mode 100644 index 0000000000..58adc9390a --- /dev/null +++ b/tests/components/pmsx003/test.rp2040.yaml @@ -0,0 +1,34 @@ +uart: + - id: uart_pmsx003 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: pmsx003 + type: PMSX003 + pm_1_0: + name: PM 1.0 Concentration + pm_2_5: + name: PM 2.5 Concentration + pm_10_0: + name: PM 10.0 Concentration + pm_1_0_std: + name: PM 1.0 Standard Atmospher Concentration + pm_2_5_std: + name: PM 2.5 Standard Atmospher Concentration + pm_10_0_std: + name: PM 10.0 Standard Atmospher Concentration + pm_0_3um: + name: Particulate Count >0.3um + pm_0_5um: + name: Particulate Count >0.5um + pm_1_0um: + name: Particulate Count >1.0um + pm_2_5um: + name: Particulate Count >2.5um + pm_5_0um: + name: Particulate Count >5.0um + pm_10_0um: + name: Particulate Count >10.0um + update_interval: 30s diff --git a/tests/components/pmwcs3/test.esp32-c3-idf.yaml b/tests/components/pmwcs3/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..7e7e72692d --- /dev/null +++ b/tests/components/pmwcs3/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 5 + sda: 4 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pmwcs3/test.esp32-c3.yaml b/tests/components/pmwcs3/test.esp32-c3.yaml new file mode 100644 index 0000000000..7e7e72692d --- /dev/null +++ b/tests/components/pmwcs3/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 5 + sda: 4 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pmwcs3/test.esp32-idf.yaml b/tests/components/pmwcs3/test.esp32-idf.yaml new file mode 100644 index 0000000000..787eaca650 --- /dev/null +++ b/tests/components/pmwcs3/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 16 + sda: 17 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pmwcs3/test.esp32.yaml b/tests/components/pmwcs3/test.esp32.yaml new file mode 100644 index 0000000000..787eaca650 --- /dev/null +++ b/tests/components/pmwcs3/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 16 + sda: 17 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pmwcs3/test.esp8266.yaml b/tests/components/pmwcs3/test.esp8266.yaml new file mode 100644 index 0000000000..7e7e72692d --- /dev/null +++ b/tests/components/pmwcs3/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 5 + sda: 4 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pmwcs3/test.rp2040.yaml b/tests/components/pmwcs3/test.rp2040.yaml new file mode 100644 index 0000000000..7e7e72692d --- /dev/null +++ b/tests/components/pmwcs3/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_pmwcs3 + scl: 5 + sda: 4 + +sensor: + - platform: pmwcs3 + e25: + name: pmwcs3_e25 + ec: + name: pmwcs3_ec + temperature: + name: pmwcs3_temperature + vwc: + name: pmwcs3_vwc diff --git a/tests/components/pn532_i2c/test.esp32-c3-idf.yaml b/tests/components/pn532_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..62816d2ace --- /dev/null +++ b/tests/components/pn532_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 5 + sda: 4 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_i2c/test.esp32-c3.yaml b/tests/components/pn532_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..62816d2ace --- /dev/null +++ b/tests/components/pn532_i2c/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 5 + sda: 4 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_i2c/test.esp32-idf.yaml b/tests/components/pn532_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..a50533b1d0 --- /dev/null +++ b/tests/components/pn532_i2c/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 16 + sda: 17 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_i2c/test.esp32.yaml b/tests/components/pn532_i2c/test.esp32.yaml new file mode 100644 index 0000000000..a50533b1d0 --- /dev/null +++ b/tests/components/pn532_i2c/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 16 + sda: 17 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_i2c/test.esp8266.yaml b/tests/components/pn532_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..62816d2ace --- /dev/null +++ b/tests/components/pn532_i2c/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 5 + sda: 4 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_i2c/test.rp2040.yaml b/tests/components/pn532_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..62816d2ace --- /dev/null +++ b/tests/components/pn532_i2c/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_pn532 + scl: 5 + sda: 4 + +pn532_i2c: + id: pn532_nfcc + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.esp32-c3-idf.yaml b/tests/components/pn532_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d21d50aa5c --- /dev/null +++ b/tests/components/pn532_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +pn532_spi: + id: pn532_nfcc + cs_pin: 4 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.esp32-c3.yaml b/tests/components/pn532_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..d21d50aa5c --- /dev/null +++ b/tests/components/pn532_spi/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +pn532_spi: + id: pn532_nfcc + cs_pin: 4 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.esp32-idf.yaml b/tests/components/pn532_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..18a382a007 --- /dev/null +++ b/tests/components/pn532_spi/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +pn532_spi: + id: pn532_nfcc + cs_pin: 12 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.esp32.yaml b/tests/components/pn532_spi/test.esp32.yaml new file mode 100644 index 0000000000..18a382a007 --- /dev/null +++ b/tests/components/pn532_spi/test.esp32.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +pn532_spi: + id: pn532_nfcc + cs_pin: 12 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.esp8266.yaml b/tests/components/pn532_spi/test.esp8266.yaml new file mode 100644 index 0000000000..1dba38e63e --- /dev/null +++ b/tests/components/pn532_spi/test.esp8266.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +pn532_spi: + id: pn532_nfcc + cs_pin: 15 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn532_spi/test.rp2040.yaml b/tests/components/pn532_spi/test.rp2040.yaml new file mode 100644 index 0000000000..ab02b2cc47 --- /dev/null +++ b/tests/components/pn532_spi/test.rp2040.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_pn532 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +pn532_spi: + id: pn532_nfcc + cs_pin: 6 + +binary_sensor: + - platform: pn532 + pn532_id: pn532_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/pn7150_i2c/test.esp32-c3-idf.yaml b/tests/components/pn7150_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..aee1886cd4 --- /dev/null +++ b/tests/components/pn7150_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7150_i2c/test.esp32-c3.yaml b/tests/components/pn7150_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..aee1886cd4 --- /dev/null +++ b/tests/components/pn7150_i2c/test.esp32-c3.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7150_i2c/test.esp32-idf.yaml b/tests/components/pn7150_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..23d1061608 --- /dev/null +++ b/tests/components/pn7150_i2c/test.esp32-idf.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 16 + sda: 17 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7150_i2c/test.esp32.yaml b/tests/components/pn7150_i2c/test.esp32.yaml new file mode 100644 index 0000000000..23d1061608 --- /dev/null +++ b/tests/components/pn7150_i2c/test.esp32.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 16 + sda: 17 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7150_i2c/test.esp8266.yaml b/tests/components/pn7150_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..6017d548ca --- /dev/null +++ b/tests/components/pn7150_i2c/test.esp8266.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7150_i2c/test.rp2040.yaml b/tests/components/pn7150_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..aee1886cd4 --- /dev/null +++ b/tests/components/pn7150_i2c/test.rp2040.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7150 + - tag.set_format_mode: nfcc_pn7150 + - tag.set_read_mode: nfcc_pn7150 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7150 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7150 + - tag.emulation_on: nfcc_pn7150 + - tag.polling_off: nfcc_pn7150 + - tag.polling_on: nfcc_pn7150 + +i2c: + - id: i2c_pn7150 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7150 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.esp32-c3-idf.yaml b/tests/components/pn7160_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d1d7947352 --- /dev/null +++ b/tests/components/pn7160_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 5 + sda: 4 + +pn7160_i2c: + id: nfcc_pn7160 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.esp32-c3.yaml b/tests/components/pn7160_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..d1d7947352 --- /dev/null +++ b/tests/components/pn7160_i2c/test.esp32-c3.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 5 + sda: 4 + +pn7160_i2c: + id: nfcc_pn7160 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.esp32-idf.yaml b/tests/components/pn7160_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..d1a3cf5c77 --- /dev/null +++ b/tests/components/pn7160_i2c/test.esp32-idf.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 16 + sda: 17 + +pn7150_i2c: + id: nfcc_pn7160 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.esp32.yaml b/tests/components/pn7160_i2c/test.esp32.yaml new file mode 100644 index 0000000000..d1a3cf5c77 --- /dev/null +++ b/tests/components/pn7160_i2c/test.esp32.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 16 + sda: 17 + +pn7150_i2c: + id: nfcc_pn7160 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.esp8266.yaml b/tests/components/pn7160_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..57bd965fc9 --- /dev/null +++ b/tests/components/pn7160_i2c/test.esp8266.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7160 + irq_pin: 12 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_i2c/test.rp2040.yaml b/tests/components/pn7160_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..5224b465ed --- /dev/null +++ b/tests/components/pn7160_i2c/test.rp2040.yaml @@ -0,0 +1,35 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +i2c: + - id: i2c_pn7160 + scl: 5 + sda: 4 + +pn7150_i2c: + id: nfcc_pn7160 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.esp32-c3-idf.yaml b/tests/components/pn7160_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fd19a53b2b --- /dev/null +++ b/tests/components/pn7160_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 4 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.esp32-c3.yaml b/tests/components/pn7160_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..fd19a53b2b --- /dev/null +++ b/tests/components/pn7160_spi/test.esp32-c3.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 4 + irq_pin: 2 + ven_pin: 3 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.esp32-idf.yaml b/tests/components/pn7160_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..0319648f13 --- /dev/null +++ b/tests/components/pn7160_spi/test.esp32-idf.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 12 + irq_pin: 14 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.esp32.yaml b/tests/components/pn7160_spi/test.esp32.yaml new file mode 100644 index 0000000000..0319648f13 --- /dev/null +++ b/tests/components/pn7160_spi/test.esp32.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 12 + irq_pin: 14 + ven_pin: 13 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.esp8266.yaml b/tests/components/pn7160_spi/test.esp8266.yaml new file mode 100644 index 0000000000..fa356d5610 --- /dev/null +++ b/tests/components/pn7160_spi/test.esp8266.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 15 + irq_pin: 4 + ven_pin: 5 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/pn7160_spi/test.rp2040.yaml b/tests/components/pn7160_spi/test.rp2040.yaml new file mode 100644 index 0000000000..b36650032f --- /dev/null +++ b/tests/components/pn7160_spi/test.rp2040.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - tag.set_clean_mode: nfcc_pn7160 + - tag.set_format_mode: nfcc_pn7160 + - tag.set_read_mode: nfcc_pn7160 + - tag.set_write_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.set_write_mode: nfcc_pn7160 + - tag.set_emulation_message: + message: https://www.home-assistant.io/tag/pulse + include_android_app_record: false + - tag.emulation_off: nfcc_pn7160 + - tag.emulation_on: nfcc_pn7160 + - tag.polling_off: nfcc_pn7160 + - tag.polling_on: nfcc_pn7160 + +spi: + - id: spi_pn7160 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +pn7160_spi: + id: nfcc_pn7160 + cs_pin: 6 + irq_pin: 7 + ven_pin: 5 + emulation_message: https://www.home-assistant.io/tag/pulse_ce + tag_ttl: 1000ms + on_tag: + - logger.log: "Tag" + on_tag_removed: + - logger.log: "Tag removed" + on_emulated_tag_scan: + - logger.log: "Tag emulated" diff --git a/tests/components/power_supply/test.esp32-c3-idf.yaml b/tests/components/power_supply/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.esp32-c3-idf.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.esp32-c3.yaml b/tests/components/power_supply/test.esp32-c3.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.esp32-c3.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.esp32-idf.yaml b/tests/components/power_supply/test.esp32-idf.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.esp32-idf.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.esp32.yaml b/tests/components/power_supply/test.esp32.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.esp32.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.esp8266.yaml b/tests/components/power_supply/test.esp8266.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.esp8266.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.rp2040.yaml b/tests/components/power_supply/test.rp2040.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/test.rp2040.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/prometheus/test.esp32-c3-idf.yaml b/tests/components/prometheus/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/test.esp32-c3-idf.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/prometheus/test.esp32-c3.yaml b/tests/components/prometheus/test.esp32-c3.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/test.esp32-c3.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/prometheus/test.esp32-idf.yaml b/tests/components/prometheus/test.esp32-idf.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/test.esp32-idf.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/prometheus/test.esp32.yaml b/tests/components/prometheus/test.esp32.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/test.esp32.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/prometheus/test.esp8266.yaml b/tests/components/prometheus/test.esp8266.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/test.esp8266.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/psram/test.esp32-c3-idf.yaml b/tests/components/psram/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..cfd39f77fe --- /dev/null +++ b/tests/components/psram/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +psram: + mode: octal + speed: 80MHz diff --git a/tests/components/psram/test.esp32-c3.yaml b/tests/components/psram/test.esp32-c3.yaml new file mode 100644 index 0000000000..cfd39f77fe --- /dev/null +++ b/tests/components/psram/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +psram: + mode: octal + speed: 80MHz diff --git a/tests/components/psram/test.esp32-idf.yaml b/tests/components/psram/test.esp32-idf.yaml new file mode 100644 index 0000000000..cfd39f77fe --- /dev/null +++ b/tests/components/psram/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +psram: + mode: octal + speed: 80MHz diff --git a/tests/components/psram/test.esp32.yaml b/tests/components/psram/test.esp32.yaml new file mode 100644 index 0000000000..cfd39f77fe --- /dev/null +++ b/tests/components/psram/test.esp32.yaml @@ -0,0 +1,3 @@ +psram: + mode: octal + speed: 80MHz diff --git a/tests/components/pulse_counter/test.esp32-c3-idf.yaml b/tests/components/pulse_counter/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.esp32-c3.yaml b/tests/components/pulse_counter/test.esp32-c3.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.esp32-idf.yaml b/tests/components/pulse_counter/test.esp32-idf.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.esp32.yaml b/tests/components/pulse_counter/test.esp32.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.esp32.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.esp8266.yaml b/tests/components/pulse_counter/test.esp8266.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.esp8266.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.rp2040.yaml b/tests/components/pulse_counter/test.rp2040.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/test.rp2040.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_meter/test.esp32-c3-idf.yaml b/tests/components/pulse_meter/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.esp32-c3.yaml b/tests/components/pulse_meter/test.esp32-c3.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.esp32-idf.yaml b/tests/components/pulse_meter/test.esp32-idf.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.esp32.yaml b/tests/components/pulse_meter/test.esp32.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.esp32.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.esp8266.yaml b/tests/components/pulse_meter/test.esp8266.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.esp8266.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.rp2040.yaml b/tests/components/pulse_meter/test.rp2040.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/test.rp2040.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_width/test.esp32-c3-idf.yaml b/tests/components/pulse_width/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.esp32-c3-idf.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.esp32-c3.yaml b/tests/components/pulse_width/test.esp32-c3.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.esp32-c3.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.esp32-idf.yaml b/tests/components/pulse_width/test.esp32-idf.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.esp32-idf.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.esp32.yaml b/tests/components/pulse_width/test.esp32.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.esp32.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.esp8266.yaml b/tests/components/pulse_width/test.esp8266.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.esp8266.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.rp2040.yaml b/tests/components/pulse_width/test.rp2040.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/test.rp2040.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml b/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..972f23122c --- /dev/null +++ b/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml @@ -0,0 +1,44 @@ +wifi: + ssid: MySSID + password: password1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: pvvx_ble_display + +display: + - platform: pvvx_mithermometer + ble_client_id: pvvx_ble_display + time_id: sntp_time + disconnect_delay: 3s + update_interval: 10min + validity_period: 20min + lambda: |- + it.print_bignum(188.8); + it.print_unit(pvvx_mithermometer::UNIT_DEG_E); + it.print_smallnum(88); + it.print_percent(true); + it.print_happy(true); + it.print_sad(true); + it.print_bracket(true); + it.print_battery(true); + +sensor: + - platform: pvvx_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: PVVX Temperature + humidity: + name: PVVX Humidity + battery_level: + name: PVVX Battery-Level + battery_voltage: + name: PVVX Battery-Voltage + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org diff --git a/tests/components/pvvx_mithermometer/test.esp32-c3.yaml b/tests/components/pvvx_mithermometer/test.esp32-c3.yaml new file mode 100644 index 0000000000..972f23122c --- /dev/null +++ b/tests/components/pvvx_mithermometer/test.esp32-c3.yaml @@ -0,0 +1,44 @@ +wifi: + ssid: MySSID + password: password1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: pvvx_ble_display + +display: + - platform: pvvx_mithermometer + ble_client_id: pvvx_ble_display + time_id: sntp_time + disconnect_delay: 3s + update_interval: 10min + validity_period: 20min + lambda: |- + it.print_bignum(188.8); + it.print_unit(pvvx_mithermometer::UNIT_DEG_E); + it.print_smallnum(88); + it.print_percent(true); + it.print_happy(true); + it.print_sad(true); + it.print_bracket(true); + it.print_battery(true); + +sensor: + - platform: pvvx_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: PVVX Temperature + humidity: + name: PVVX Humidity + battery_level: + name: PVVX Battery-Level + battery_voltage: + name: PVVX Battery-Voltage + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org diff --git a/tests/components/pvvx_mithermometer/test.esp32-idf.yaml b/tests/components/pvvx_mithermometer/test.esp32-idf.yaml new file mode 100644 index 0000000000..972f23122c --- /dev/null +++ b/tests/components/pvvx_mithermometer/test.esp32-idf.yaml @@ -0,0 +1,44 @@ +wifi: + ssid: MySSID + password: password1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: pvvx_ble_display + +display: + - platform: pvvx_mithermometer + ble_client_id: pvvx_ble_display + time_id: sntp_time + disconnect_delay: 3s + update_interval: 10min + validity_period: 20min + lambda: |- + it.print_bignum(188.8); + it.print_unit(pvvx_mithermometer::UNIT_DEG_E); + it.print_smallnum(88); + it.print_percent(true); + it.print_happy(true); + it.print_sad(true); + it.print_bracket(true); + it.print_battery(true); + +sensor: + - platform: pvvx_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: PVVX Temperature + humidity: + name: PVVX Humidity + battery_level: + name: PVVX Battery-Level + battery_voltage: + name: PVVX Battery-Voltage + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org diff --git a/tests/components/pvvx_mithermometer/test.esp32.yaml b/tests/components/pvvx_mithermometer/test.esp32.yaml new file mode 100644 index 0000000000..972f23122c --- /dev/null +++ b/tests/components/pvvx_mithermometer/test.esp32.yaml @@ -0,0 +1,44 @@ +wifi: + ssid: MySSID + password: password1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: pvvx_ble_display + +display: + - platform: pvvx_mithermometer + ble_client_id: pvvx_ble_display + time_id: sntp_time + disconnect_delay: 3s + update_interval: 10min + validity_period: 20min + lambda: |- + it.print_bignum(188.8); + it.print_unit(pvvx_mithermometer::UNIT_DEG_E); + it.print_smallnum(88); + it.print_percent(true); + it.print_happy(true); + it.print_sad(true); + it.print_bracket(true); + it.print_battery(true); + +sensor: + - platform: pvvx_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: PVVX Temperature + humidity: + name: PVVX Humidity + battery_level: + name: PVVX Battery-Level + battery_voltage: + name: PVVX Battery-Voltage + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org diff --git a/tests/components/pylontech/test.esp32-c3-idf.yaml b/tests/components/pylontech/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f7ec493422 --- /dev/null +++ b/tests/components/pylontech/test.esp32-c3-idf.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pylontech/test.esp32-c3.yaml b/tests/components/pylontech/test.esp32-c3.yaml new file mode 100644 index 0000000000..f7ec493422 --- /dev/null +++ b/tests/components/pylontech/test.esp32-c3.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pylontech/test.esp32-idf.yaml b/tests/components/pylontech/test.esp32-idf.yaml new file mode 100644 index 0000000000..a4c168fb47 --- /dev/null +++ b/tests/components/pylontech/test.esp32-idf.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pylontech/test.esp32.yaml b/tests/components/pylontech/test.esp32.yaml new file mode 100644 index 0000000000..a4c168fb47 --- /dev/null +++ b/tests/components/pylontech/test.esp32.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pylontech/test.esp8266.yaml b/tests/components/pylontech/test.esp8266.yaml new file mode 100644 index 0000000000..f7ec493422 --- /dev/null +++ b/tests/components/pylontech/test.esp8266.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pylontech/test.rp2040.yaml b/tests/components/pylontech/test.rp2040.yaml new file mode 100644 index 0000000000..f7ec493422 --- /dev/null +++ b/tests/components/pylontech/test.rp2040.yaml @@ -0,0 +1,48 @@ +uart: + - id: uart_pylontech0 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +pylontech: + - id: pylontech0 + - id: pylontech1 + +sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + voltage: + id: pyl01_voltage + current: + id: pyl01_current + coulomb: + id: pyl01_soc + mos_temperature: + id: pyl01_mos_temperature + - platform: pylontech + pylontech_id: pylontech1 + battery: 1 + voltage: + id: pyl13_voltage + temperature_low: + id: pyl13_temperature_low + temperature_high: + id: pyl13_temperature_high + voltage_low: + id: pyl13_voltage_low + voltage_high: + id: pyl13_voltage_high + +text_sensor: + - platform: pylontech + pylontech_id: pylontech0 + battery: 1 + base_state: + id: pyl0_base_state + voltage_state: + id: pyl0_voltage_state + current_state: + id: pyl0_current_state + temperature_state: + id: pyl0_temperature_state diff --git a/tests/components/pzem004t/test.esp32-c3-idf.yaml b/tests/components/pzem004t/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b9c93f8761 --- /dev/null +++ b/tests/components/pzem004t/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzem004t/test.esp32-c3.yaml b/tests/components/pzem004t/test.esp32-c3.yaml new file mode 100644 index 0000000000..b9c93f8761 --- /dev/null +++ b/tests/components/pzem004t/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzem004t/test.esp32-idf.yaml b/tests/components/pzem004t/test.esp32-idf.yaml new file mode 100644 index 0000000000..23f2bd0eca --- /dev/null +++ b/tests/components/pzem004t/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzem004t/test.esp32.yaml b/tests/components/pzem004t/test.esp32.yaml new file mode 100644 index 0000000000..23f2bd0eca --- /dev/null +++ b/tests/components/pzem004t/test.esp32.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzem004t/test.esp8266.yaml b/tests/components/pzem004t/test.esp8266.yaml new file mode 100644 index 0000000000..b9c93f8761 --- /dev/null +++ b/tests/components/pzem004t/test.esp8266.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzem004t/test.rp2040.yaml b/tests/components/pzem004t/test.rp2040.yaml new file mode 100644 index 0000000000..b9c93f8761 --- /dev/null +++ b/tests/components/pzem004t/test.rp2040.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_pzem004t + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: pzem004t + voltage: + name: PZEM004T Voltage + current: + name: PZEM004T Current + power: + name: PZEM004T Power diff --git a/tests/components/pzemac/test.esp32-c3-idf.yaml b/tests/components/pzemac/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..6d9abbebe9 --- /dev/null +++ b/tests/components/pzemac/test.esp32-c3-idf.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemac/test.esp32-c3.yaml b/tests/components/pzemac/test.esp32-c3.yaml new file mode 100644 index 0000000000..6d9abbebe9 --- /dev/null +++ b/tests/components/pzemac/test.esp32-c3.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemac/test.esp32-idf.yaml b/tests/components/pzemac/test.esp32-idf.yaml new file mode 100644 index 0000000000..ce431a6100 --- /dev/null +++ b/tests/components/pzemac/test.esp32-idf.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemac/test.esp32.yaml b/tests/components/pzemac/test.esp32.yaml new file mode 100644 index 0000000000..ce431a6100 --- /dev/null +++ b/tests/components/pzemac/test.esp32.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemac/test.esp8266.yaml b/tests/components/pzemac/test.esp8266.yaml new file mode 100644 index 0000000000..6d9abbebe9 --- /dev/null +++ b/tests/components/pzemac/test.esp8266.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemac/test.rp2040.yaml b/tests/components/pzemac/test.rp2040.yaml new file mode 100644 index 0000000000..6d9abbebe9 --- /dev/null +++ b/tests/components/pzemac/test.rp2040.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - pzemac.reset_energy: pzemac1 + +uart: + - id: uart_pzemac + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + +sensor: + - platform: pzemac + id: pzemac1 + voltage: + name: PZEMAC Voltage + current: + name: PZEMAC Current + power: + name: PZEMAC Power + energy: + name: PZEMAC Energy + frequency: + name: PZEMAC Frequency + power_factor: + name: PZEMAC Power Factor diff --git a/tests/components/pzemdc/test.esp32-c3-idf.yaml b/tests/components/pzemdc/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..02114b781d --- /dev/null +++ b/tests/components/pzemdc/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy diff --git a/tests/components/pzemdc/test.esp32-c3.yaml b/tests/components/pzemdc/test.esp32-c3.yaml new file mode 100644 index 0000000000..02114b781d --- /dev/null +++ b/tests/components/pzemdc/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy diff --git a/tests/components/pzemdc/test.esp32-idf.yaml b/tests/components/pzemdc/test.esp32-idf.yaml new file mode 100644 index 0000000000..9cc61137de --- /dev/null +++ b/tests/components/pzemdc/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy diff --git a/tests/components/pzemdc/test.esp32.yaml b/tests/components/pzemdc/test.esp32.yaml new file mode 100644 index 0000000000..9cc61137de --- /dev/null +++ b/tests/components/pzemdc/test.esp32.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy diff --git a/tests/components/pzemdc/test.esp8266.yaml b/tests/components/pzemdc/test.esp8266.yaml new file mode 100644 index 0000000000..02114b781d --- /dev/null +++ b/tests/components/pzemdc/test.esp8266.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy diff --git a/tests/components/pzemdc/test.rp2040.yaml b/tests/components/pzemdc/test.rp2040.yaml new file mode 100644 index 0000000000..02114b781d --- /dev/null +++ b/tests/components/pzemdc/test.rp2040.yaml @@ -0,0 +1,23 @@ +esphome: + on_boot: + then: + - pzemdc.reset_energy: pzemdc1 + +uart: + - id: uart_pzemdc + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + stop_bits: 2 + +sensor: + - platform: pzemdc + id: pzemdc1 + voltage: + name: PZEMDC Voltage + current: + name: PZEMDC Current + power: + name: PZEMDC Power + energy: + name: PZEMDC Energy From 2b215fecc953496d62db17407ec04f85d27abe23 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 22:45:12 -0500 Subject: [PATCH 055/313] Add some components to the new testing framework (M part 1) (#6207) --- .../matrix_keypad/test.esp32-c3-idf.yaml | 19 ++++++++ .../matrix_keypad/test.esp32-c3.yaml | 19 ++++++++ .../matrix_keypad/test.esp32-idf.yaml | 19 ++++++++ .../components/matrix_keypad/test.esp32.yaml | 19 ++++++++ .../matrix_keypad/test.esp8266.yaml | 19 ++++++++ .../components/matrix_keypad/test.rp2040.yaml | 19 ++++++++ .../max31855/test.esp32-c3-idf.yaml | 13 ++++++ tests/components/max31855/test.esp32-c3.yaml | 13 ++++++ tests/components/max31855/test.esp32-idf.yaml | 13 ++++++ tests/components/max31855/test.esp32.yaml | 13 ++++++ tests/components/max31855/test.esp8266.yaml | 13 ++++++ tests/components/max31855/test.rp2040.yaml | 13 ++++++ .../max31856/test.esp32-c3-idf.yaml | 12 +++++ tests/components/max31856/test.esp32-c3.yaml | 12 +++++ tests/components/max31856/test.esp32-idf.yaml | 12 +++++ tests/components/max31856/test.esp32.yaml | 12 +++++ tests/components/max31856/test.esp8266.yaml | 12 +++++ tests/components/max31856/test.rp2040.yaml | 12 +++++ .../max31865/test.esp32-c3-idf.yaml | 13 ++++++ tests/components/max31865/test.esp32-c3.yaml | 13 ++++++ tests/components/max31865/test.esp32-idf.yaml | 13 ++++++ tests/components/max31865/test.esp32.yaml | 13 ++++++ tests/components/max31865/test.esp8266.yaml | 13 ++++++ tests/components/max31865/test.rp2040.yaml | 13 ++++++ .../max44009/test.esp32-c3-idf.yaml | 12 +++++ tests/components/max44009/test.esp32-c3.yaml | 12 +++++ tests/components/max44009/test.esp32-idf.yaml | 12 +++++ tests/components/max44009/test.esp32.yaml | 12 +++++ tests/components/max44009/test.esp8266.yaml | 12 +++++ tests/components/max44009/test.rp2040.yaml | 12 +++++ .../components/max6675/test.esp32-c3-idf.yaml | 11 +++++ tests/components/max6675/test.esp32-c3.yaml | 11 +++++ tests/components/max6675/test.esp32-idf.yaml | 11 +++++ tests/components/max6675/test.esp32.yaml | 11 +++++ tests/components/max6675/test.esp8266.yaml | 11 +++++ tests/components/max6675/test.rp2040.yaml | 11 +++++ .../components/max6956/test.esp32-c3-idf.yaml | 19 ++++++++ tests/components/max6956/test.esp32-c3.yaml | 19 ++++++++ tests/components/max6956/test.esp32-idf.yaml | 19 ++++++++ tests/components/max6956/test.esp32.yaml | 19 ++++++++ tests/components/max6956/test.esp8266.yaml | 19 ++++++++ tests/components/max6956/test.rp2040.yaml | 19 ++++++++ .../components/max7219/test.esp32-c3-idf.yaml | 12 +++++ tests/components/max7219/test.esp32-c3.yaml | 12 +++++ tests/components/max7219/test.esp32-idf.yaml | 12 +++++ tests/components/max7219/test.esp32.yaml | 12 +++++ tests/components/max7219/test.esp8266.yaml | 12 +++++ tests/components/max7219/test.rp2040.yaml | 12 +++++ .../max7219digit/test.esp32-c3-idf.yaml | 16 +++++++ .../max7219digit/test.esp32-c3.yaml | 16 +++++++ .../max7219digit/test.esp32-idf.yaml | 16 +++++++ tests/components/max7219digit/test.esp32.yaml | 16 +++++++ .../components/max7219digit/test.esp8266.yaml | 16 +++++++ .../components/max7219digit/test.rp2040.yaml | 16 +++++++ .../components/max9611/test.esp32-c3-idf.yaml | 18 ++++++++ tests/components/max9611/test.esp32-c3.yaml | 18 ++++++++ tests/components/max9611/test.esp32-idf.yaml | 18 ++++++++ tests/components/max9611/test.esp32.yaml | 18 ++++++++ tests/components/max9611/test.esp8266.yaml | 18 ++++++++ tests/components/max9611/test.rp2040.yaml | 18 ++++++++ .../mcp23008/test.esp32-c3-idf.yaml | 23 ++++++++++ tests/components/mcp23008/test.esp32-c3.yaml | 23 ++++++++++ tests/components/mcp23008/test.esp32-idf.yaml | 23 ++++++++++ tests/components/mcp23008/test.esp32.yaml | 23 ++++++++++ tests/components/mcp23008/test.esp8266.yaml | 23 ++++++++++ tests/components/mcp23008/test.rp2040.yaml | 23 ++++++++++ .../mcp23016/test.esp32-c3-idf.yaml | 23 ++++++++++ tests/components/mcp23016/test.esp32-c3.yaml | 23 ++++++++++ tests/components/mcp23016/test.esp32-idf.yaml | 23 ++++++++++ tests/components/mcp23016/test.esp32.yaml | 23 ++++++++++ tests/components/mcp23016/test.esp8266.yaml | 23 ++++++++++ tests/components/mcp23016/test.rp2040.yaml | 23 ++++++++++ .../mcp23017/test.esp32-c3-idf.yaml | 23 ++++++++++ tests/components/mcp23017/test.esp32-c3.yaml | 23 ++++++++++ tests/components/mcp23017/test.esp32-idf.yaml | 23 ++++++++++ tests/components/mcp23017/test.esp32.yaml | 23 ++++++++++ tests/components/mcp23017/test.esp8266.yaml | 23 ++++++++++ tests/components/mcp23017/test.rp2040.yaml | 23 ++++++++++ .../mcp23s08/test.esp32-c3-idf.yaml | 10 +++++ tests/components/mcp23s08/test.esp32-c3.yaml | 10 +++++ tests/components/mcp23s08/test.esp32-idf.yaml | 10 +++++ tests/components/mcp23s08/test.esp32.yaml | 10 +++++ tests/components/mcp23s08/test.esp8266.yaml | 10 +++++ tests/components/mcp23s08/test.rp2040.yaml | 10 +++++ .../mcp23s17/test.esp32-c3-idf.yaml | 10 +++++ tests/components/mcp23s17/test.esp32-c3.yaml | 10 +++++ tests/components/mcp23s17/test.esp32-idf.yaml | 10 +++++ tests/components/mcp23s17/test.esp32.yaml | 10 +++++ tests/components/mcp23s17/test.esp8266.yaml | 10 +++++ tests/components/mcp23s17/test.rp2040.yaml | 10 +++++ .../components/mcp2515/test.esp32-c3-idf.yaml | 44 +++++++++++++++++++ tests/components/mcp2515/test.esp32-c3.yaml | 44 +++++++++++++++++++ tests/components/mcp2515/test.esp32-idf.yaml | 44 +++++++++++++++++++ tests/components/mcp2515/test.esp32.yaml | 44 +++++++++++++++++++ tests/components/mcp2515/test.esp8266.yaml | 44 +++++++++++++++++++ tests/components/mcp2515/test.rp2040.yaml | 44 +++++++++++++++++++ .../components/mcp3008/test.esp32-c3-idf.yaml | 17 +++++++ tests/components/mcp3008/test.esp32-c3.yaml | 17 +++++++ tests/components/mcp3008/test.esp32-idf.yaml | 17 +++++++ tests/components/mcp3008/test.esp32.yaml | 17 +++++++ tests/components/mcp3008/test.esp8266.yaml | 17 +++++++ tests/components/mcp3008/test.rp2040.yaml | 17 +++++++ .../components/mcp3204/test.esp32-c3-idf.yaml | 16 +++++++ tests/components/mcp3204/test.esp32-c3.yaml | 16 +++++++ tests/components/mcp3204/test.esp32-idf.yaml | 16 +++++++ tests/components/mcp3204/test.esp32.yaml | 16 +++++++ tests/components/mcp3204/test.esp8266.yaml | 16 +++++++ tests/components/mcp3204/test.rp2040.yaml | 16 +++++++ .../components/mcp4725/test.esp32-c3-idf.yaml | 8 ++++ tests/components/mcp4725/test.esp32-c3.yaml | 8 ++++ tests/components/mcp4725/test.esp32-idf.yaml | 8 ++++ tests/components/mcp4725/test.esp32.yaml | 8 ++++ tests/components/mcp4725/test.esp8266.yaml | 8 ++++ tests/components/mcp4725/test.rp2040.yaml | 8 ++++ .../components/mcp4728/test.esp32-c3-idf.yaml | 31 +++++++++++++ tests/components/mcp4728/test.esp32-c3.yaml | 31 +++++++++++++ tests/components/mcp4728/test.esp32-idf.yaml | 31 +++++++++++++ tests/components/mcp4728/test.esp32.yaml | 31 +++++++++++++ tests/components/mcp4728/test.esp8266.yaml | 31 +++++++++++++ tests/components/mcp4728/test.rp2040.yaml | 31 +++++++++++++ .../components/mcp47a1/test.esp32-c3-idf.yaml | 8 ++++ tests/components/mcp47a1/test.esp32-c3.yaml | 8 ++++ tests/components/mcp47a1/test.esp32-idf.yaml | 8 ++++ tests/components/mcp47a1/test.esp32.yaml | 8 ++++ tests/components/mcp47a1/test.esp8266.yaml | 8 ++++ tests/components/mcp47a1/test.rp2040.yaml | 8 ++++ .../components/mcp9600/test.esp32-c3-idf.yaml | 12 +++++ tests/components/mcp9600/test.esp32-c3.yaml | 12 +++++ tests/components/mcp9600/test.esp32-idf.yaml | 12 +++++ tests/components/mcp9600/test.esp32.yaml | 12 +++++ tests/components/mcp9600/test.esp8266.yaml | 12 +++++ tests/components/mcp9600/test.rp2040.yaml | 12 +++++ .../components/mcp9808/test.esp32-c3-idf.yaml | 8 ++++ tests/components/mcp9808/test.esp32-c3.yaml | 8 ++++ tests/components/mcp9808/test.esp32-idf.yaml | 8 ++++ tests/components/mcp9808/test.esp32.yaml | 8 ++++ tests/components/mcp9808/test.esp8266.yaml | 8 ++++ tests/components/mcp9808/test.rp2040.yaml | 8 ++++ tests/components/mdns/test.esp32-c3-idf.yaml | 6 +++ tests/components/mdns/test.esp32-c3.yaml | 6 +++ tests/components/mdns/test.esp32-idf.yaml | 6 +++ tests/components/mdns/test.esp32.yaml | 6 +++ tests/components/mdns/test.esp8266.yaml | 6 +++ tests/components/mdns/test.rp2040.yaml | 6 +++ tests/components/media_player/test.esp32.yaml | 32 ++++++++++++++ tests/components/mhz19/test.esp32-c3-idf.yaml | 14 ++++++ tests/components/mhz19/test.esp32-c3.yaml | 14 ++++++ tests/components/mhz19/test.esp32-idf.yaml | 14 ++++++ tests/components/mhz19/test.esp32.yaml | 14 ++++++ tests/components/mhz19/test.esp8266.yaml | 14 ++++++ tests/components/mhz19/test.rp2040.yaml | 14 ++++++ 151 files changed, 2420 insertions(+) create mode 100644 tests/components/matrix_keypad/test.esp32-c3-idf.yaml create mode 100644 tests/components/matrix_keypad/test.esp32-c3.yaml create mode 100644 tests/components/matrix_keypad/test.esp32-idf.yaml create mode 100644 tests/components/matrix_keypad/test.esp32.yaml create mode 100644 tests/components/matrix_keypad/test.esp8266.yaml create mode 100644 tests/components/matrix_keypad/test.rp2040.yaml create mode 100644 tests/components/max31855/test.esp32-c3-idf.yaml create mode 100644 tests/components/max31855/test.esp32-c3.yaml create mode 100644 tests/components/max31855/test.esp32-idf.yaml create mode 100644 tests/components/max31855/test.esp32.yaml create mode 100644 tests/components/max31855/test.esp8266.yaml create mode 100644 tests/components/max31855/test.rp2040.yaml create mode 100644 tests/components/max31856/test.esp32-c3-idf.yaml create mode 100644 tests/components/max31856/test.esp32-c3.yaml create mode 100644 tests/components/max31856/test.esp32-idf.yaml create mode 100644 tests/components/max31856/test.esp32.yaml create mode 100644 tests/components/max31856/test.esp8266.yaml create mode 100644 tests/components/max31856/test.rp2040.yaml create mode 100644 tests/components/max31865/test.esp32-c3-idf.yaml create mode 100644 tests/components/max31865/test.esp32-c3.yaml create mode 100644 tests/components/max31865/test.esp32-idf.yaml create mode 100644 tests/components/max31865/test.esp32.yaml create mode 100644 tests/components/max31865/test.esp8266.yaml create mode 100644 tests/components/max31865/test.rp2040.yaml create mode 100644 tests/components/max44009/test.esp32-c3-idf.yaml create mode 100644 tests/components/max44009/test.esp32-c3.yaml create mode 100644 tests/components/max44009/test.esp32-idf.yaml create mode 100644 tests/components/max44009/test.esp32.yaml create mode 100644 tests/components/max44009/test.esp8266.yaml create mode 100644 tests/components/max44009/test.rp2040.yaml create mode 100644 tests/components/max6675/test.esp32-c3-idf.yaml create mode 100644 tests/components/max6675/test.esp32-c3.yaml create mode 100644 tests/components/max6675/test.esp32-idf.yaml create mode 100644 tests/components/max6675/test.esp32.yaml create mode 100644 tests/components/max6675/test.esp8266.yaml create mode 100644 tests/components/max6675/test.rp2040.yaml create mode 100644 tests/components/max6956/test.esp32-c3-idf.yaml create mode 100644 tests/components/max6956/test.esp32-c3.yaml create mode 100644 tests/components/max6956/test.esp32-idf.yaml create mode 100644 tests/components/max6956/test.esp32.yaml create mode 100644 tests/components/max6956/test.esp8266.yaml create mode 100644 tests/components/max6956/test.rp2040.yaml create mode 100644 tests/components/max7219/test.esp32-c3-idf.yaml create mode 100644 tests/components/max7219/test.esp32-c3.yaml create mode 100644 tests/components/max7219/test.esp32-idf.yaml create mode 100644 tests/components/max7219/test.esp32.yaml create mode 100644 tests/components/max7219/test.esp8266.yaml create mode 100644 tests/components/max7219/test.rp2040.yaml create mode 100644 tests/components/max7219digit/test.esp32-c3-idf.yaml create mode 100644 tests/components/max7219digit/test.esp32-c3.yaml create mode 100644 tests/components/max7219digit/test.esp32-idf.yaml create mode 100644 tests/components/max7219digit/test.esp32.yaml create mode 100644 tests/components/max7219digit/test.esp8266.yaml create mode 100644 tests/components/max7219digit/test.rp2040.yaml create mode 100644 tests/components/max9611/test.esp32-c3-idf.yaml create mode 100644 tests/components/max9611/test.esp32-c3.yaml create mode 100644 tests/components/max9611/test.esp32-idf.yaml create mode 100644 tests/components/max9611/test.esp32.yaml create mode 100644 tests/components/max9611/test.esp8266.yaml create mode 100644 tests/components/max9611/test.rp2040.yaml create mode 100644 tests/components/mcp23008/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp23008/test.esp32-c3.yaml create mode 100644 tests/components/mcp23008/test.esp32-idf.yaml create mode 100644 tests/components/mcp23008/test.esp32.yaml create mode 100644 tests/components/mcp23008/test.esp8266.yaml create mode 100644 tests/components/mcp23008/test.rp2040.yaml create mode 100644 tests/components/mcp23016/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp23016/test.esp32-c3.yaml create mode 100644 tests/components/mcp23016/test.esp32-idf.yaml create mode 100644 tests/components/mcp23016/test.esp32.yaml create mode 100644 tests/components/mcp23016/test.esp8266.yaml create mode 100644 tests/components/mcp23016/test.rp2040.yaml create mode 100644 tests/components/mcp23017/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp23017/test.esp32-c3.yaml create mode 100644 tests/components/mcp23017/test.esp32-idf.yaml create mode 100644 tests/components/mcp23017/test.esp32.yaml create mode 100644 tests/components/mcp23017/test.esp8266.yaml create mode 100644 tests/components/mcp23017/test.rp2040.yaml create mode 100644 tests/components/mcp23s08/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp23s08/test.esp32-c3.yaml create mode 100644 tests/components/mcp23s08/test.esp32-idf.yaml create mode 100644 tests/components/mcp23s08/test.esp32.yaml create mode 100644 tests/components/mcp23s08/test.esp8266.yaml create mode 100644 tests/components/mcp23s08/test.rp2040.yaml create mode 100644 tests/components/mcp23s17/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp23s17/test.esp32-c3.yaml create mode 100644 tests/components/mcp23s17/test.esp32-idf.yaml create mode 100644 tests/components/mcp23s17/test.esp32.yaml create mode 100644 tests/components/mcp23s17/test.esp8266.yaml create mode 100644 tests/components/mcp23s17/test.rp2040.yaml create mode 100644 tests/components/mcp2515/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp2515/test.esp32-c3.yaml create mode 100644 tests/components/mcp2515/test.esp32-idf.yaml create mode 100644 tests/components/mcp2515/test.esp32.yaml create mode 100644 tests/components/mcp2515/test.esp8266.yaml create mode 100644 tests/components/mcp2515/test.rp2040.yaml create mode 100644 tests/components/mcp3008/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp3008/test.esp32-c3.yaml create mode 100644 tests/components/mcp3008/test.esp32-idf.yaml create mode 100644 tests/components/mcp3008/test.esp32.yaml create mode 100644 tests/components/mcp3008/test.esp8266.yaml create mode 100644 tests/components/mcp3008/test.rp2040.yaml create mode 100644 tests/components/mcp3204/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp3204/test.esp32-c3.yaml create mode 100644 tests/components/mcp3204/test.esp32-idf.yaml create mode 100644 tests/components/mcp3204/test.esp32.yaml create mode 100644 tests/components/mcp3204/test.esp8266.yaml create mode 100644 tests/components/mcp3204/test.rp2040.yaml create mode 100644 tests/components/mcp4725/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp4725/test.esp32-c3.yaml create mode 100644 tests/components/mcp4725/test.esp32-idf.yaml create mode 100644 tests/components/mcp4725/test.esp32.yaml create mode 100644 tests/components/mcp4725/test.esp8266.yaml create mode 100644 tests/components/mcp4725/test.rp2040.yaml create mode 100644 tests/components/mcp4728/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp4728/test.esp32-c3.yaml create mode 100644 tests/components/mcp4728/test.esp32-idf.yaml create mode 100644 tests/components/mcp4728/test.esp32.yaml create mode 100644 tests/components/mcp4728/test.esp8266.yaml create mode 100644 tests/components/mcp4728/test.rp2040.yaml create mode 100644 tests/components/mcp47a1/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp47a1/test.esp32-c3.yaml create mode 100644 tests/components/mcp47a1/test.esp32-idf.yaml create mode 100644 tests/components/mcp47a1/test.esp32.yaml create mode 100644 tests/components/mcp47a1/test.esp8266.yaml create mode 100644 tests/components/mcp47a1/test.rp2040.yaml create mode 100644 tests/components/mcp9600/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp9600/test.esp32-c3.yaml create mode 100644 tests/components/mcp9600/test.esp32-idf.yaml create mode 100644 tests/components/mcp9600/test.esp32.yaml create mode 100644 tests/components/mcp9600/test.esp8266.yaml create mode 100644 tests/components/mcp9600/test.rp2040.yaml create mode 100644 tests/components/mcp9808/test.esp32-c3-idf.yaml create mode 100644 tests/components/mcp9808/test.esp32-c3.yaml create mode 100644 tests/components/mcp9808/test.esp32-idf.yaml create mode 100644 tests/components/mcp9808/test.esp32.yaml create mode 100644 tests/components/mcp9808/test.esp8266.yaml create mode 100644 tests/components/mcp9808/test.rp2040.yaml create mode 100644 tests/components/mdns/test.esp32-c3-idf.yaml create mode 100644 tests/components/mdns/test.esp32-c3.yaml create mode 100644 tests/components/mdns/test.esp32-idf.yaml create mode 100644 tests/components/mdns/test.esp32.yaml create mode 100644 tests/components/mdns/test.esp8266.yaml create mode 100644 tests/components/mdns/test.rp2040.yaml create mode 100644 tests/components/media_player/test.esp32.yaml create mode 100644 tests/components/mhz19/test.esp32-c3-idf.yaml create mode 100644 tests/components/mhz19/test.esp32-c3.yaml create mode 100644 tests/components/mhz19/test.esp32-idf.yaml create mode 100644 tests/components/mhz19/test.esp32.yaml create mode 100644 tests/components/mhz19/test.esp8266.yaml create mode 100644 tests/components/mhz19/test.rp2040.yaml diff --git a/tests/components/matrix_keypad/test.esp32-c3-idf.yaml b/tests/components/matrix_keypad/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d15e6af21a --- /dev/null +++ b/tests/components/matrix_keypad/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 1 + - pin: 2 + columns: + - pin: 3 + - pin: 4 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/matrix_keypad/test.esp32-c3.yaml b/tests/components/matrix_keypad/test.esp32-c3.yaml new file mode 100644 index 0000000000..d15e6af21a --- /dev/null +++ b/tests/components/matrix_keypad/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 1 + - pin: 2 + columns: + - pin: 3 + - pin: 4 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/matrix_keypad/test.esp32-idf.yaml b/tests/components/matrix_keypad/test.esp32-idf.yaml new file mode 100644 index 0000000000..c8e9b54534 --- /dev/null +++ b/tests/components/matrix_keypad/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 12 + - pin: 13 + columns: + - pin: 14 + - pin: 15 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/matrix_keypad/test.esp32.yaml b/tests/components/matrix_keypad/test.esp32.yaml new file mode 100644 index 0000000000..c8e9b54534 --- /dev/null +++ b/tests/components/matrix_keypad/test.esp32.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 12 + - pin: 13 + columns: + - pin: 14 + - pin: 15 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/matrix_keypad/test.esp8266.yaml b/tests/components/matrix_keypad/test.esp8266.yaml new file mode 100644 index 0000000000..c8e9b54534 --- /dev/null +++ b/tests/components/matrix_keypad/test.esp8266.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 12 + - pin: 13 + columns: + - pin: 14 + - pin: 15 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/matrix_keypad/test.rp2040.yaml b/tests/components/matrix_keypad/test.rp2040.yaml new file mode 100644 index 0000000000..d15e6af21a --- /dev/null +++ b/tests/components/matrix_keypad/test.rp2040.yaml @@ -0,0 +1,19 @@ +binary_sensor: + - platform: matrix_keypad + id: key4 + row: 1 + col: 1 + - platform: matrix_keypad + id: key1 + key: 1 + +matrix_keypad: + id: keypad + rows: + - pin: 1 + - pin: 2 + columns: + - pin: 3 + - pin: 4 + keys: "1234" + has_pulldowns: true diff --git a/tests/components/max31855/test.esp32-c3-idf.yaml b/tests/components/max31855/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e7c8f3f824 --- /dev/null +++ b/tests/components/max31855/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 8 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31855/test.esp32-c3.yaml b/tests/components/max31855/test.esp32-c3.yaml new file mode 100644 index 0000000000..e7c8f3f824 --- /dev/null +++ b/tests/components/max31855/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 8 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31855/test.esp32-idf.yaml b/tests/components/max31855/test.esp32-idf.yaml new file mode 100644 index 0000000000..25fee986d2 --- /dev/null +++ b/tests/components/max31855/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 12 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31855/test.esp32.yaml b/tests/components/max31855/test.esp32.yaml new file mode 100644 index 0000000000..25fee986d2 --- /dev/null +++ b/tests/components/max31855/test.esp32.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 12 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31855/test.esp8266.yaml b/tests/components/max31855/test.esp8266.yaml new file mode 100644 index 0000000000..7e02d41fce --- /dev/null +++ b/tests/components/max31855/test.esp8266.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 15 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31855/test.rp2040.yaml b/tests/components/max31855/test.rp2040.yaml new file mode 100644 index 0000000000..379d4d33d6 --- /dev/null +++ b/tests/components/max31855/test.rp2040.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31855 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +sensor: + - platform: max31855 + name: MAX31855 Temperature + cs_pin: 6 + update_interval: 15s + reference_temperature: + name: MAX31855 Internal Temperature diff --git a/tests/components/max31856/test.esp32-c3-idf.yaml b/tests/components/max31856/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2794866c59 --- /dev/null +++ b/tests/components/max31856/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 8 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31856/test.esp32-c3.yaml b/tests/components/max31856/test.esp32-c3.yaml new file mode 100644 index 0000000000..2794866c59 --- /dev/null +++ b/tests/components/max31856/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 8 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31856/test.esp32-idf.yaml b/tests/components/max31856/test.esp32-idf.yaml new file mode 100644 index 0000000000..5561903207 --- /dev/null +++ b/tests/components/max31856/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 12 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31856/test.esp32.yaml b/tests/components/max31856/test.esp32.yaml new file mode 100644 index 0000000000..5561903207 --- /dev/null +++ b/tests/components/max31856/test.esp32.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 12 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31856/test.esp8266.yaml b/tests/components/max31856/test.esp8266.yaml new file mode 100644 index 0000000000..dfd9572ca9 --- /dev/null +++ b/tests/components/max31856/test.esp8266.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 15 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31856/test.rp2040.yaml b/tests/components/max31856/test.rp2040.yaml new file mode 100644 index 0000000000..0abc8a081b --- /dev/null +++ b/tests/components/max31856/test.rp2040.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max31856 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +sensor: + - platform: max31856 + name: MAX31856 Temperature + cs_pin: 6 + update_interval: 15s + mains_filter: 50Hz diff --git a/tests/components/max31865/test.esp32-c3-idf.yaml b/tests/components/max31865/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..45de22331e --- /dev/null +++ b/tests/components/max31865/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 8 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max31865/test.esp32-c3.yaml b/tests/components/max31865/test.esp32-c3.yaml new file mode 100644 index 0000000000..45de22331e --- /dev/null +++ b/tests/components/max31865/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 8 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max31865/test.esp32-idf.yaml b/tests/components/max31865/test.esp32-idf.yaml new file mode 100644 index 0000000000..8326a578ee --- /dev/null +++ b/tests/components/max31865/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 12 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max31865/test.esp32.yaml b/tests/components/max31865/test.esp32.yaml new file mode 100644 index 0000000000..8326a578ee --- /dev/null +++ b/tests/components/max31865/test.esp32.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 12 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max31865/test.esp8266.yaml b/tests/components/max31865/test.esp8266.yaml new file mode 100644 index 0000000000..4828019acc --- /dev/null +++ b/tests/components/max31865/test.esp8266.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 15 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max31865/test.rp2040.yaml b/tests/components/max31865/test.rp2040.yaml new file mode 100644 index 0000000000..5af64b41ad --- /dev/null +++ b/tests/components/max31865/test.rp2040.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_max31865 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +sensor: + - platform: max31865 + name: MAX31865 Temperature + cs_pin: 6 + update_interval: 15s + reference_resistance: 430 Ω + rtd_nominal_resistance: 100 Ω diff --git a/tests/components/max44009/test.esp32-c3-idf.yaml b/tests/components/max44009/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..593d4bd48c --- /dev/null +++ b/tests/components/max44009/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 5 + sda: 4 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max44009/test.esp32-c3.yaml b/tests/components/max44009/test.esp32-c3.yaml new file mode 100644 index 0000000000..593d4bd48c --- /dev/null +++ b/tests/components/max44009/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 5 + sda: 4 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max44009/test.esp32-idf.yaml b/tests/components/max44009/test.esp32-idf.yaml new file mode 100644 index 0000000000..56eecebc4a --- /dev/null +++ b/tests/components/max44009/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 16 + sda: 17 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max44009/test.esp32.yaml b/tests/components/max44009/test.esp32.yaml new file mode 100644 index 0000000000..56eecebc4a --- /dev/null +++ b/tests/components/max44009/test.esp32.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 16 + sda: 17 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max44009/test.esp8266.yaml b/tests/components/max44009/test.esp8266.yaml new file mode 100644 index 0000000000..593d4bd48c --- /dev/null +++ b/tests/components/max44009/test.esp8266.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 5 + sda: 4 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max44009/test.rp2040.yaml b/tests/components/max44009/test.rp2040.yaml new file mode 100644 index 0000000000..593d4bd48c --- /dev/null +++ b/tests/components/max44009/test.rp2040.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_max44009 + scl: 5 + sda: 4 + +sensor: + - platform: max44009 + name: MAX44009 Brightness + internal: true + mode: low_power + address: 0x4A + update_interval: 30s diff --git a/tests/components/max6675/test.esp32-c3-idf.yaml b/tests/components/max6675/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2f05102ca1 --- /dev/null +++ b/tests/components/max6675/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 8 + update_interval: 15s diff --git a/tests/components/max6675/test.esp32-c3.yaml b/tests/components/max6675/test.esp32-c3.yaml new file mode 100644 index 0000000000..2f05102ca1 --- /dev/null +++ b/tests/components/max6675/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 8 + update_interval: 15s diff --git a/tests/components/max6675/test.esp32-idf.yaml b/tests/components/max6675/test.esp32-idf.yaml new file mode 100644 index 0000000000..9771bf9d5f --- /dev/null +++ b/tests/components/max6675/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 12 + update_interval: 15s diff --git a/tests/components/max6675/test.esp32.yaml b/tests/components/max6675/test.esp32.yaml new file mode 100644 index 0000000000..9771bf9d5f --- /dev/null +++ b/tests/components/max6675/test.esp32.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 12 + update_interval: 15s diff --git a/tests/components/max6675/test.esp8266.yaml b/tests/components/max6675/test.esp8266.yaml new file mode 100644 index 0000000000..f67e9e04a8 --- /dev/null +++ b/tests/components/max6675/test.esp8266.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 15 + update_interval: 15s diff --git a/tests/components/max6675/test.rp2040.yaml b/tests/components/max6675/test.rp2040.yaml new file mode 100644 index 0000000000..89c0932f94 --- /dev/null +++ b/tests/components/max6675/test.rp2040.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_max6675 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +sensor: + - platform: max6675 + name: Temperature + cs_pin: 6 + update_interval: 15s diff --git a/tests/components/max6956/test.esp32-c3-idf.yaml b/tests/components/max6956/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..690941784c --- /dev/null +++ b/tests/components/max6956/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 5 + sda: 4 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max6956/test.esp32-c3.yaml b/tests/components/max6956/test.esp32-c3.yaml new file mode 100644 index 0000000000..690941784c --- /dev/null +++ b/tests/components/max6956/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 5 + sda: 4 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max6956/test.esp32-idf.yaml b/tests/components/max6956/test.esp32-idf.yaml new file mode 100644 index 0000000000..abd1404634 --- /dev/null +++ b/tests/components/max6956/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 16 + sda: 17 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max6956/test.esp32.yaml b/tests/components/max6956/test.esp32.yaml new file mode 100644 index 0000000000..abd1404634 --- /dev/null +++ b/tests/components/max6956/test.esp32.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 16 + sda: 17 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max6956/test.esp8266.yaml b/tests/components/max6956/test.esp8266.yaml new file mode 100644 index 0000000000..690941784c --- /dev/null +++ b/tests/components/max6956/test.esp8266.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 5 + sda: 4 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max6956/test.rp2040.yaml b/tests/components/max6956/test.rp2040.yaml new file mode 100644 index 0000000000..690941784c --- /dev/null +++ b/tests/components/max6956/test.rp2040.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_max6956 + scl: 5 + sda: 4 + +max6956: + - id: max6956_1 + address: 0x40 + +binary_sensor: + - platform: gpio + name: Max Input Pin 4 + pin: + max6956: max6956_1 + number: 4 + mode: + input: true + pullup: true + inverted: false diff --git a/tests/components/max7219/test.esp32-c3-idf.yaml b/tests/components/max7219/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fa1ac15f33 --- /dev/null +++ b/tests/components/max7219/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max7219 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: max7219 + cs_pin: 8 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219/test.esp32-c3.yaml b/tests/components/max7219/test.esp32-c3.yaml new file mode 100644 index 0000000000..fa1ac15f33 --- /dev/null +++ b/tests/components/max7219/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max7219 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: max7219 + cs_pin: 8 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219/test.esp32-idf.yaml b/tests/components/max7219/test.esp32-idf.yaml new file mode 100644 index 0000000000..2985345a48 --- /dev/null +++ b/tests/components/max7219/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max6675 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: max7219 + cs_pin: 12 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219/test.esp32.yaml b/tests/components/max7219/test.esp32.yaml new file mode 100644 index 0000000000..2985345a48 --- /dev/null +++ b/tests/components/max7219/test.esp32.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max6675 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: max7219 + cs_pin: 12 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219/test.esp8266.yaml b/tests/components/max7219/test.esp8266.yaml new file mode 100644 index 0000000000..a8c280daff --- /dev/null +++ b/tests/components/max7219/test.esp8266.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max6675 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: max7219 + cs_pin: 15 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219/test.rp2040.yaml b/tests/components/max7219/test.rp2040.yaml new file mode 100644 index 0000000000..37b2220649 --- /dev/null +++ b/tests/components/max7219/test.rp2040.yaml @@ -0,0 +1,12 @@ +spi: + - id: spi_max6675 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: max7219 + cs_pin: 6 + num_chips: 1 + lambda: |- + it.print("01234567"); diff --git a/tests/components/max7219digit/test.esp32-c3-idf.yaml b/tests/components/max7219digit/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0c04784380 --- /dev/null +++ b/tests/components/max7219digit/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: max7219digit + cs_pin: 8 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max7219digit/test.esp32-c3.yaml b/tests/components/max7219digit/test.esp32-c3.yaml new file mode 100644 index 0000000000..0c04784380 --- /dev/null +++ b/tests/components/max7219digit/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: max7219digit + cs_pin: 8 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max7219digit/test.esp32-idf.yaml b/tests/components/max7219digit/test.esp32-idf.yaml new file mode 100644 index 0000000000..7f3aed964a --- /dev/null +++ b/tests/components/max7219digit/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: max7219digit + cs_pin: 12 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max7219digit/test.esp32.yaml b/tests/components/max7219digit/test.esp32.yaml new file mode 100644 index 0000000000..7f3aed964a --- /dev/null +++ b/tests/components/max7219digit/test.esp32.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: max7219digit + cs_pin: 12 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max7219digit/test.esp8266.yaml b/tests/components/max7219digit/test.esp8266.yaml new file mode 100644 index 0000000000..52587e8b0e --- /dev/null +++ b/tests/components/max7219digit/test.esp8266.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: max7219digit + cs_pin: 15 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max7219digit/test.rp2040.yaml b/tests/components/max7219digit/test.rp2040.yaml new file mode 100644 index 0000000000..f986483ec2 --- /dev/null +++ b/tests/components/max7219digit/test.rp2040.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_max7219digit + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: max7219digit + cs_pin: 6 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); diff --git a/tests/components/max9611/test.esp32-c3-idf.yaml b/tests/components/max9611/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..00f8330280 --- /dev/null +++ b/tests/components/max9611/test.esp32-c3-idf.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 5 + sda: 4 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/max9611/test.esp32-c3.yaml b/tests/components/max9611/test.esp32-c3.yaml new file mode 100644 index 0000000000..00f8330280 --- /dev/null +++ b/tests/components/max9611/test.esp32-c3.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 5 + sda: 4 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/max9611/test.esp32-idf.yaml b/tests/components/max9611/test.esp32-idf.yaml new file mode 100644 index 0000000000..5c480cc815 --- /dev/null +++ b/tests/components/max9611/test.esp32-idf.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 16 + sda: 17 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/max9611/test.esp32.yaml b/tests/components/max9611/test.esp32.yaml new file mode 100644 index 0000000000..5c480cc815 --- /dev/null +++ b/tests/components/max9611/test.esp32.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 16 + sda: 17 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/max9611/test.esp8266.yaml b/tests/components/max9611/test.esp8266.yaml new file mode 100644 index 0000000000..00f8330280 --- /dev/null +++ b/tests/components/max9611/test.esp8266.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 5 + sda: 4 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/max9611/test.rp2040.yaml b/tests/components/max9611/test.rp2040.yaml new file mode 100644 index 0000000000..00f8330280 --- /dev/null +++ b/tests/components/max9611/test.rp2040.yaml @@ -0,0 +1,18 @@ +i2c: + - id: i2c_max9611 + scl: 5 + sda: 4 + +sensor: + - platform: max9611 + shunt_resistance: 0.2 ohm + gain: 1X + voltage: + name: Max9611 Voltage + current: + name: Max9611 Current + power: + name: Max9611 Watts + temperature: + name: Max9611 Temp + update_interval: 1s diff --git a/tests/components/mcp23008/test.esp32-c3-idf.yaml b/tests/components/mcp23008/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..eabd5a7311 --- /dev/null +++ b/tests/components/mcp23008/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 5 + sda: 4 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23008/test.esp32-c3.yaml b/tests/components/mcp23008/test.esp32-c3.yaml new file mode 100644 index 0000000000..eabd5a7311 --- /dev/null +++ b/tests/components/mcp23008/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 5 + sda: 4 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23008/test.esp32-idf.yaml b/tests/components/mcp23008/test.esp32-idf.yaml new file mode 100644 index 0000000000..cbf03f371c --- /dev/null +++ b/tests/components/mcp23008/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 16 + sda: 17 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23008/test.esp32.yaml b/tests/components/mcp23008/test.esp32.yaml new file mode 100644 index 0000000000..cbf03f371c --- /dev/null +++ b/tests/components/mcp23008/test.esp32.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 16 + sda: 17 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23008/test.esp8266.yaml b/tests/components/mcp23008/test.esp8266.yaml new file mode 100644 index 0000000000..eabd5a7311 --- /dev/null +++ b/tests/components/mcp23008/test.esp8266.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 5 + sda: 4 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23008/test.rp2040.yaml b/tests/components/mcp23008/test.rp2040.yaml new file mode 100644 index 0000000000..eabd5a7311 --- /dev/null +++ b/tests/components/mcp23008/test.rp2040.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23008 + scl: 5 + sda: 4 + +mcp23008: + id: mcp23008_hub + +binary_sensor: + - platform: gpio + id: mcp23008_binary_sensor + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23008_switch + pin: + mcp23xxx: mcp23008_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.esp32-c3-idf.yaml b/tests/components/mcp23016/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2211931e3d --- /dev/null +++ b/tests/components/mcp23016/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 5 + sda: 4 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.esp32-c3.yaml b/tests/components/mcp23016/test.esp32-c3.yaml new file mode 100644 index 0000000000..2211931e3d --- /dev/null +++ b/tests/components/mcp23016/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 5 + sda: 4 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.esp32-idf.yaml b/tests/components/mcp23016/test.esp32-idf.yaml new file mode 100644 index 0000000000..48574a9b01 --- /dev/null +++ b/tests/components/mcp23016/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 16 + sda: 17 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.esp32.yaml b/tests/components/mcp23016/test.esp32.yaml new file mode 100644 index 0000000000..48574a9b01 --- /dev/null +++ b/tests/components/mcp23016/test.esp32.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 16 + sda: 17 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.esp8266.yaml b/tests/components/mcp23016/test.esp8266.yaml new file mode 100644 index 0000000000..2211931e3d --- /dev/null +++ b/tests/components/mcp23016/test.esp8266.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 5 + sda: 4 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23016/test.rp2040.yaml b/tests/components/mcp23016/test.rp2040.yaml new file mode 100644 index 0000000000..2211931e3d --- /dev/null +++ b/tests/components/mcp23016/test.rp2040.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23016 + scl: 5 + sda: 4 + +mcp23016: + id: mcp23016_hub + +binary_sensor: + - platform: gpio + id: mcp23016_binary_sensor + pin: + mcp23016: mcp23016_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23016_switch + pin: + mcp23016: mcp23016_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.esp32-c3-idf.yaml b/tests/components/mcp23017/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..863b2b8f0b --- /dev/null +++ b/tests/components/mcp23017/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 5 + sda: 4 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.esp32-c3.yaml b/tests/components/mcp23017/test.esp32-c3.yaml new file mode 100644 index 0000000000..863b2b8f0b --- /dev/null +++ b/tests/components/mcp23017/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 5 + sda: 4 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.esp32-idf.yaml b/tests/components/mcp23017/test.esp32-idf.yaml new file mode 100644 index 0000000000..9b7c45eb8a --- /dev/null +++ b/tests/components/mcp23017/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 16 + sda: 17 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.esp32.yaml b/tests/components/mcp23017/test.esp32.yaml new file mode 100644 index 0000000000..9b7c45eb8a --- /dev/null +++ b/tests/components/mcp23017/test.esp32.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 16 + sda: 17 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.esp8266.yaml b/tests/components/mcp23017/test.esp8266.yaml new file mode 100644 index 0000000000..863b2b8f0b --- /dev/null +++ b/tests/components/mcp23017/test.esp8266.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 5 + sda: 4 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23017/test.rp2040.yaml b/tests/components/mcp23017/test.rp2040.yaml new file mode 100644 index 0000000000..863b2b8f0b --- /dev/null +++ b/tests/components/mcp23017/test.rp2040.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_mcp23017 + scl: 5 + sda: 4 + +mcp23017: + id: mcp23017_hub + +binary_sensor: + - platform: gpio + id: mcp23017_binary_sensor + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: INPUT + +switch: + - platform: gpio + id: mcp23017_switch + pin: + mcp23xxx: mcp23017_hub + number: 1 + mode: OUTPUT diff --git a/tests/components/mcp23s08/test.esp32-c3-idf.yaml b/tests/components/mcp23s08/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f1af8a71a9 --- /dev/null +++ b/tests/components/mcp23s08/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 8 + deviceaddress: 0 diff --git a/tests/components/mcp23s08/test.esp32-c3.yaml b/tests/components/mcp23s08/test.esp32-c3.yaml new file mode 100644 index 0000000000..f1af8a71a9 --- /dev/null +++ b/tests/components/mcp23s08/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 8 + deviceaddress: 0 diff --git a/tests/components/mcp23s08/test.esp32-idf.yaml b/tests/components/mcp23s08/test.esp32-idf.yaml new file mode 100644 index 0000000000..0b26035c3e --- /dev/null +++ b/tests/components/mcp23s08/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 12 + deviceaddress: 0 diff --git a/tests/components/mcp23s08/test.esp32.yaml b/tests/components/mcp23s08/test.esp32.yaml new file mode 100644 index 0000000000..0b26035c3e --- /dev/null +++ b/tests/components/mcp23s08/test.esp32.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 12 + deviceaddress: 0 diff --git a/tests/components/mcp23s08/test.esp8266.yaml b/tests/components/mcp23s08/test.esp8266.yaml new file mode 100644 index 0000000000..eff856aca9 --- /dev/null +++ b/tests/components/mcp23s08/test.esp8266.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 15 + deviceaddress: 0 diff --git a/tests/components/mcp23s08/test.rp2040.yaml b/tests/components/mcp23s08/test.rp2040.yaml new file mode 100644 index 0000000000..1b23d2d3b5 --- /dev/null +++ b/tests/components/mcp23s08/test.rp2040.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s08 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +mcp23s08: + - id: mcp23s08_hub + cs_pin: 6 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.esp32-c3-idf.yaml b/tests/components/mcp23s17/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d83f66d3b1 --- /dev/null +++ b/tests/components/mcp23s17/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 8 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.esp32-c3.yaml b/tests/components/mcp23s17/test.esp32-c3.yaml new file mode 100644 index 0000000000..d83f66d3b1 --- /dev/null +++ b/tests/components/mcp23s17/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 8 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.esp32-idf.yaml b/tests/components/mcp23s17/test.esp32-idf.yaml new file mode 100644 index 0000000000..9a42c12e85 --- /dev/null +++ b/tests/components/mcp23s17/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 12 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.esp32.yaml b/tests/components/mcp23s17/test.esp32.yaml new file mode 100644 index 0000000000..9a42c12e85 --- /dev/null +++ b/tests/components/mcp23s17/test.esp32.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 12 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.esp8266.yaml b/tests/components/mcp23s17/test.esp8266.yaml new file mode 100644 index 0000000000..36dac63f6f --- /dev/null +++ b/tests/components/mcp23s17/test.esp8266.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 15 + deviceaddress: 0 diff --git a/tests/components/mcp23s17/test.rp2040.yaml b/tests/components/mcp23s17/test.rp2040.yaml new file mode 100644 index 0000000000..2730f6a9d6 --- /dev/null +++ b/tests/components/mcp23s17/test.rp2040.yaml @@ -0,0 +1,10 @@ +spi: + - id: spi_mcp23s17 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +mcp23s17: + - id: mcp23s17_hub + cs_pin: 6 + deviceaddress: 0 diff --git a/tests/components/mcp2515/test.esp32-c3-idf.yaml b/tests/components/mcp2515/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3ceeea268f --- /dev/null +++ b/tests/components/mcp2515/test.esp32-c3-idf.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 8 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp2515/test.esp32-c3.yaml b/tests/components/mcp2515/test.esp32-c3.yaml new file mode 100644 index 0000000000..3ceeea268f --- /dev/null +++ b/tests/components/mcp2515/test.esp32-c3.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 8 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp2515/test.esp32-idf.yaml b/tests/components/mcp2515/test.esp32-idf.yaml new file mode 100644 index 0000000000..07fae36cc3 --- /dev/null +++ b/tests/components/mcp2515/test.esp32-idf.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 12 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp2515/test.esp32.yaml b/tests/components/mcp2515/test.esp32.yaml new file mode 100644 index 0000000000..07fae36cc3 --- /dev/null +++ b/tests/components/mcp2515/test.esp32.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 12 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp2515/test.esp8266.yaml b/tests/components/mcp2515/test.esp8266.yaml new file mode 100644 index 0000000000..1096a0e809 --- /dev/null +++ b/tests/components/mcp2515/test.esp8266.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 15 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp2515/test.rp2040.yaml b/tests/components/mcp2515/test.rp2040.yaml new file mode 100644 index 0000000000..678c817d3d --- /dev/null +++ b/tests/components/mcp2515/test.rp2040.yaml @@ -0,0 +1,44 @@ +spi: + - id: spi_mcp2515 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +canbus: + - platform: mcp2515 + id: mcp2515_can + cs_pin: 6 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("can_id 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: "x[0] == 0x11" + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + // to be continued... + } diff --git a/tests/components/mcp3008/test.esp32-c3-idf.yaml b/tests/components/mcp3008/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9e66372e4f --- /dev/null +++ b/tests/components/mcp3008/test.esp32-c3-idf.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp3008: + - id: mcp3008_hub + cs_pin: 8 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3008/test.esp32-c3.yaml b/tests/components/mcp3008/test.esp32-c3.yaml new file mode 100644 index 0000000000..9e66372e4f --- /dev/null +++ b/tests/components/mcp3008/test.esp32-c3.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp3008: + - id: mcp3008_hub + cs_pin: 8 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3008/test.esp32-idf.yaml b/tests/components/mcp3008/test.esp32-idf.yaml new file mode 100644 index 0000000000..a66fbeb7a1 --- /dev/null +++ b/tests/components/mcp3008/test.esp32-idf.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp3008: + - id: mcp3008_hub + cs_pin: 12 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3008/test.esp32.yaml b/tests/components/mcp3008/test.esp32.yaml new file mode 100644 index 0000000000..a66fbeb7a1 --- /dev/null +++ b/tests/components/mcp3008/test.esp32.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp3008: + - id: mcp3008_hub + cs_pin: 12 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3008/test.esp8266.yaml b/tests/components/mcp3008/test.esp8266.yaml new file mode 100644 index 0000000000..eaccca0765 --- /dev/null +++ b/tests/components/mcp3008/test.esp8266.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +mcp3008: + - id: mcp3008_hub + cs_pin: 15 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3008/test.rp2040.yaml b/tests/components/mcp3008/test.rp2040.yaml new file mode 100644 index 0000000000..8ab9630553 --- /dev/null +++ b/tests/components/mcp3008/test.rp2040.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_mcp3008 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +mcp3008: + - id: mcp3008_hub + cs_pin: 6 + +sensor: + - platform: mcp3008 + id: mcp3008_sensor + mcp3008_id: mcp3008_hub + number: 0 + reference_voltage: 3.19 + update_interval: 5s diff --git a/tests/components/mcp3204/test.esp32-c3-idf.yaml b/tests/components/mcp3204/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..5bf5ba81e1 --- /dev/null +++ b/tests/components/mcp3204/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp3204: + - id: mcp3204_hub + cs_pin: 8 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp3204/test.esp32-c3.yaml b/tests/components/mcp3204/test.esp32-c3.yaml new file mode 100644 index 0000000000..5bf5ba81e1 --- /dev/null +++ b/tests/components/mcp3204/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +mcp3204: + - id: mcp3204_hub + cs_pin: 8 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp3204/test.esp32-idf.yaml b/tests/components/mcp3204/test.esp32-idf.yaml new file mode 100644 index 0000000000..c340797c8e --- /dev/null +++ b/tests/components/mcp3204/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp3204: + - id: mcp3204_hub + cs_pin: 12 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp3204/test.esp32.yaml b/tests/components/mcp3204/test.esp32.yaml new file mode 100644 index 0000000000..c340797c8e --- /dev/null +++ b/tests/components/mcp3204/test.esp32.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +mcp3204: + - id: mcp3204_hub + cs_pin: 12 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp3204/test.esp8266.yaml b/tests/components/mcp3204/test.esp8266.yaml new file mode 100644 index 0000000000..d208e3e06c --- /dev/null +++ b/tests/components/mcp3204/test.esp8266.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +mcp3204: + - id: mcp3204_hub + cs_pin: 15 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp3204/test.rp2040.yaml b/tests/components/mcp3204/test.rp2040.yaml new file mode 100644 index 0000000000..63f30e3621 --- /dev/null +++ b/tests/components/mcp3204/test.rp2040.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_mcp3204 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +mcp3204: + - id: mcp3204_hub + cs_pin: 6 + +sensor: + - platform: mcp3204 + id: mcp3204_sensor + mcp3204_id: mcp3204_hub + number: 0 + update_interval: 5s diff --git a/tests/components/mcp4725/test.esp32-c3-idf.yaml b/tests/components/mcp4725/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..5fc799203d --- /dev/null +++ b/tests/components/mcp4725/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 5 + sda: 4 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4725/test.esp32-c3.yaml b/tests/components/mcp4725/test.esp32-c3.yaml new file mode 100644 index 0000000000..5fc799203d --- /dev/null +++ b/tests/components/mcp4725/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 5 + sda: 4 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4725/test.esp32-idf.yaml b/tests/components/mcp4725/test.esp32-idf.yaml new file mode 100644 index 0000000000..a523ad95e1 --- /dev/null +++ b/tests/components/mcp4725/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 16 + sda: 17 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4725/test.esp32.yaml b/tests/components/mcp4725/test.esp32.yaml new file mode 100644 index 0000000000..a523ad95e1 --- /dev/null +++ b/tests/components/mcp4725/test.esp32.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 16 + sda: 17 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4725/test.esp8266.yaml b/tests/components/mcp4725/test.esp8266.yaml new file mode 100644 index 0000000000..5fc799203d --- /dev/null +++ b/tests/components/mcp4725/test.esp8266.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 5 + sda: 4 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4725/test.rp2040.yaml b/tests/components/mcp4725/test.rp2040.yaml new file mode 100644 index 0000000000..5fc799203d --- /dev/null +++ b/tests/components/mcp4725/test.rp2040.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp4725 + scl: 5 + sda: 4 + +output: + - platform: mcp4725 + id: mcp4725_dac_output diff --git a/tests/components/mcp4728/test.esp32-c3-idf.yaml b/tests/components/mcp4728/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2f24dd0b8c --- /dev/null +++ b/tests/components/mcp4728/test.esp32-c3-idf.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 5 + sda: 4 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp4728/test.esp32-c3.yaml b/tests/components/mcp4728/test.esp32-c3.yaml new file mode 100644 index 0000000000..2f24dd0b8c --- /dev/null +++ b/tests/components/mcp4728/test.esp32-c3.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 5 + sda: 4 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp4728/test.esp32-idf.yaml b/tests/components/mcp4728/test.esp32-idf.yaml new file mode 100644 index 0000000000..b29a6ee53c --- /dev/null +++ b/tests/components/mcp4728/test.esp32-idf.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 16 + sda: 17 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp4728/test.esp32.yaml b/tests/components/mcp4728/test.esp32.yaml new file mode 100644 index 0000000000..b29a6ee53c --- /dev/null +++ b/tests/components/mcp4728/test.esp32.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 16 + sda: 17 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp4728/test.esp8266.yaml b/tests/components/mcp4728/test.esp8266.yaml new file mode 100644 index 0000000000..2f24dd0b8c --- /dev/null +++ b/tests/components/mcp4728/test.esp8266.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 5 + sda: 4 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp4728/test.rp2040.yaml b/tests/components/mcp4728/test.rp2040.yaml new file mode 100644 index 0000000000..2f24dd0b8c --- /dev/null +++ b/tests/components/mcp4728/test.rp2040.yaml @@ -0,0 +1,31 @@ +i2c: + - id: i2c_mcp4728 + scl: 5 + sda: 4 + +mcp4728: + - id: mcp4728_dac + +output: + - platform: mcp4728 + id: mcp4728_dac_output_a + channel: A + vref: vdd + power_down: normal + - platform: mcp4728 + id: mcp4728_dac_output_b + channel: B + vref: internal + gain: X1 + power_down: gnd_1k + - platform: mcp4728 + id: mcp4728_dac_output_c + channel: C + vref: vdd + power_down: gnd_100k + - platform: mcp4728 + id: mcp4728_dac_output_d + channel: D + vref: internal + gain: X2 + power_down: gnd_500k diff --git a/tests/components/mcp47a1/test.esp32-c3-idf.yaml b/tests/components/mcp47a1/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..68273e00eb --- /dev/null +++ b/tests/components/mcp47a1/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 5 + sda: 4 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp47a1/test.esp32-c3.yaml b/tests/components/mcp47a1/test.esp32-c3.yaml new file mode 100644 index 0000000000..68273e00eb --- /dev/null +++ b/tests/components/mcp47a1/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 5 + sda: 4 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp47a1/test.esp32-idf.yaml b/tests/components/mcp47a1/test.esp32-idf.yaml new file mode 100644 index 0000000000..9e2133de66 --- /dev/null +++ b/tests/components/mcp47a1/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 16 + sda: 17 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp47a1/test.esp32.yaml b/tests/components/mcp47a1/test.esp32.yaml new file mode 100644 index 0000000000..9e2133de66 --- /dev/null +++ b/tests/components/mcp47a1/test.esp32.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 16 + sda: 17 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp47a1/test.esp8266.yaml b/tests/components/mcp47a1/test.esp8266.yaml new file mode 100644 index 0000000000..68273e00eb --- /dev/null +++ b/tests/components/mcp47a1/test.esp8266.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 5 + sda: 4 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp47a1/test.rp2040.yaml b/tests/components/mcp47a1/test.rp2040.yaml new file mode 100644 index 0000000000..68273e00eb --- /dev/null +++ b/tests/components/mcp47a1/test.rp2040.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp47a1 + scl: 5 + sda: 4 + +output: + - platform: mcp47a1 + id: output_mcp47a1 diff --git a/tests/components/mcp9600/test.esp32-c3-idf.yaml b/tests/components/mcp9600/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b07f4589ce --- /dev/null +++ b/tests/components/mcp9600/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9600/test.esp32-c3.yaml b/tests/components/mcp9600/test.esp32-c3.yaml new file mode 100644 index 0000000000..b07f4589ce --- /dev/null +++ b/tests/components/mcp9600/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9600/test.esp32-idf.yaml b/tests/components/mcp9600/test.esp32-idf.yaml new file mode 100644 index 0000000000..0c94f099ae --- /dev/null +++ b/tests/components/mcp9600/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 16 + sda: 17 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9600/test.esp32.yaml b/tests/components/mcp9600/test.esp32.yaml new file mode 100644 index 0000000000..0c94f099ae --- /dev/null +++ b/tests/components/mcp9600/test.esp32.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 16 + sda: 17 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9600/test.esp8266.yaml b/tests/components/mcp9600/test.esp8266.yaml new file mode 100644 index 0000000000..b07f4589ce --- /dev/null +++ b/tests/components/mcp9600/test.esp8266.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9600/test.rp2040.yaml b/tests/components/mcp9600/test.rp2040.yaml new file mode 100644 index 0000000000..b07f4589ce --- /dev/null +++ b/tests/components/mcp9600/test.rp2040.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mcp9600 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9600 + thermocouple_type: K + hot_junction: + name: Thermocouple Temperature + cold_junction: + name: Ambient Temperature diff --git a/tests/components/mcp9808/test.esp32-c3-idf.yaml b/tests/components/mcp9808/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..86b4d7f181 --- /dev/null +++ b/tests/components/mcp9808/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mcp9808/test.esp32-c3.yaml b/tests/components/mcp9808/test.esp32-c3.yaml new file mode 100644 index 0000000000..86b4d7f181 --- /dev/null +++ b/tests/components/mcp9808/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mcp9808/test.esp32-idf.yaml b/tests/components/mcp9808/test.esp32-idf.yaml new file mode 100644 index 0000000000..1e5affdac0 --- /dev/null +++ b/tests/components/mcp9808/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 16 + sda: 17 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mcp9808/test.esp32.yaml b/tests/components/mcp9808/test.esp32.yaml new file mode 100644 index 0000000000..1e5affdac0 --- /dev/null +++ b/tests/components/mcp9808/test.esp32.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 16 + sda: 17 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mcp9808/test.esp8266.yaml b/tests/components/mcp9808/test.esp8266.yaml new file mode 100644 index 0000000000..86b4d7f181 --- /dev/null +++ b/tests/components/mcp9808/test.esp8266.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mcp9808/test.rp2040.yaml b/tests/components/mcp9808/test.rp2040.yaml new file mode 100644 index 0000000000..86b4d7f181 --- /dev/null +++ b/tests/components/mcp9808/test.rp2040.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_mcp9808 + scl: 5 + sda: 4 + +sensor: + - platform: mcp9808 + name: MCP9808 Temperature diff --git a/tests/components/mdns/test.esp32-c3-idf.yaml b/tests/components/mdns/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.esp32-c3-idf.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.esp32-c3.yaml b/tests/components/mdns/test.esp32-c3.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.esp32-c3.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.esp32-idf.yaml b/tests/components/mdns/test.esp32-idf.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.esp32-idf.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.esp32.yaml b/tests/components/mdns/test.esp32.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.esp32.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.esp8266.yaml b/tests/components/mdns/test.esp8266.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.esp8266.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.rp2040.yaml b/tests/components/mdns/test.rp2040.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/test.rp2040.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/media_player/test.esp32.yaml b/tests/components/media_player/test.esp32.yaml new file mode 100644 index 0000000000..24b85cd474 --- /dev/null +++ b/tests/components/media_player/test.esp32.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +i2s_audio: + i2s_lrclk_pin: 13 + i2s_bclk_pin: 14 + i2s_mclk_pin: 15 + +media_player: + - platform: i2s_audio + name: None + dac_type: external + i2s_dout_pin: 18 + mute_pin: 19 + on_state: + - media_player.play: + - media_player.play_media: http://localhost/media.mp3 + - media_player.play_media: !lambda 'return "http://localhost/media.mp3";' + on_idle: + - media_player.pause: + on_play: + - media_player.stop: + on_pause: + - media_player.toggle: + - wait_until: + media_player.is_idle: + - wait_until: + media_player.is_playing: + - media_player.volume_up: + - media_player.volume_down: + - media_player.volume_set: 50% diff --git a/tests/components/mhz19/test.esp32-c3-idf.yaml b/tests/components/mhz19/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..1edfa49c23 --- /dev/null +++ b/tests/components/mhz19/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s diff --git a/tests/components/mhz19/test.esp32-c3.yaml b/tests/components/mhz19/test.esp32-c3.yaml new file mode 100644 index 0000000000..1edfa49c23 --- /dev/null +++ b/tests/components/mhz19/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s diff --git a/tests/components/mhz19/test.esp32-idf.yaml b/tests/components/mhz19/test.esp32-idf.yaml new file mode 100644 index 0000000000..0e30713b54 --- /dev/null +++ b/tests/components/mhz19/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s diff --git a/tests/components/mhz19/test.esp32.yaml b/tests/components/mhz19/test.esp32.yaml new file mode 100644 index 0000000000..0e30713b54 --- /dev/null +++ b/tests/components/mhz19/test.esp32.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s diff --git a/tests/components/mhz19/test.esp8266.yaml b/tests/components/mhz19/test.esp8266.yaml new file mode 100644 index 0000000000..1edfa49c23 --- /dev/null +++ b/tests/components/mhz19/test.esp8266.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s diff --git a/tests/components/mhz19/test.rp2040.yaml b/tests/components/mhz19/test.rp2040.yaml new file mode 100644 index 0000000000..1edfa49c23 --- /dev/null +++ b/tests/components/mhz19/test.rp2040.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_mhz19 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: mhz19 + co2: + name: MH-Z19 CO2 Value + temperature: + name: MH-Z19 Temperature + automatic_baseline_calibration: false + update_interval: 15s From c0dc9c20fc7b383659d962cf4ef6de283ca45ba1 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 22:45:25 -0500 Subject: [PATCH 056/313] Add some components to the new testing framework (M part 2) (#6208) --- .../micronova/test.esp32-c3-idf.yaml | 49 +++++++++++++++ tests/components/micronova/test.esp32-c3.yaml | 49 +++++++++++++++ .../components/micronova/test.esp32-idf.yaml | 49 +++++++++++++++ tests/components/micronova/test.esp32.yaml | 49 +++++++++++++++ tests/components/micronova/test.esp8266.yaml | 49 +++++++++++++++ tests/components/micronova/test.rp2040.yaml | 49 +++++++++++++++ .../microphone/test.esp32-c3-idf.yaml | 11 ++++ .../components/microphone/test.esp32-c3.yaml | 11 ++++ .../components/microphone/test.esp32-idf.yaml | 15 +++++ tests/components/microphone/test.esp32.yaml | 15 +++++ .../mics_4514/test.esp32-c3-idf.yaml | 20 +++++++ tests/components/mics_4514/test.esp32-c3.yaml | 20 +++++++ .../components/mics_4514/test.esp32-idf.yaml | 20 +++++++ tests/components/mics_4514/test.esp32.yaml | 20 +++++++ tests/components/mics_4514/test.esp8266.yaml | 20 +++++++ tests/components/mics_4514/test.rp2040.yaml | 20 +++++++ tests/components/midea/test.esp32-c3.yaml | 59 +++++++++++++++++++ tests/components/midea/test.esp32.yaml | 59 +++++++++++++++++++ tests/components/midea/test.esp8266.yaml | 59 +++++++++++++++++++ .../midea_ir/test.esp32-c3-idf.yaml | 8 +++ tests/components/midea_ir/test.esp32-c3.yaml | 8 +++ tests/components/midea_ir/test.esp32-idf.yaml | 8 +++ tests/components/midea_ir/test.esp32.yaml | 8 +++ tests/components/midea_ir/test.esp8266.yaml | 8 +++ .../mitsubishi/test.esp32-c3-idf.yaml | 7 +++ .../components/mitsubishi/test.esp32-c3.yaml | 7 +++ .../components/mitsubishi/test.esp32-idf.yaml | 7 +++ tests/components/mitsubishi/test.esp32.yaml | 7 +++ tests/components/mitsubishi/test.esp8266.yaml | 7 +++ .../mlx90393/test.esp32-c3-idf.yaml | 20 +++++++ tests/components/mlx90393/test.esp32-c3.yaml | 20 +++++++ tests/components/mlx90393/test.esp32-idf.yaml | 20 +++++++ tests/components/mlx90393/test.esp32.yaml | 20 +++++++ tests/components/mlx90393/test.esp8266.yaml | 20 +++++++ tests/components/mlx90393/test.rp2040.yaml | 20 +++++++ .../mlx90614/test.esp32-c3-idf.yaml | 12 ++++ tests/components/mlx90614/test.esp32-c3.yaml | 12 ++++ tests/components/mlx90614/test.esp32-idf.yaml | 12 ++++ tests/components/mlx90614/test.esp32.yaml | 12 ++++ tests/components/mlx90614/test.esp8266.yaml | 12 ++++ tests/components/mlx90614/test.rp2040.yaml | 12 ++++ .../components/mmc5603/test.esp32-c3-idf.yaml | 14 +++++ tests/components/mmc5603/test.esp32-c3.yaml | 14 +++++ tests/components/mmc5603/test.esp32-idf.yaml | 14 +++++ tests/components/mmc5603/test.esp32.yaml | 14 +++++ tests/components/mmc5603/test.esp8266.yaml | 14 +++++ tests/components/mmc5603/test.rp2040.yaml | 14 +++++ .../components/mmc5983/test.esp32-c3-idf.yaml | 16 +++++ tests/components/mmc5983/test.esp32-c3.yaml | 16 +++++ tests/components/mmc5983/test.esp32-idf.yaml | 16 +++++ tests/components/mmc5983/test.esp32.yaml | 16 +++++ tests/components/mmc5983/test.esp8266.yaml | 16 +++++ tests/components/mmc5983/test.rp2040.yaml | 16 +++++ .../components/modbus/test.esp32-c3-idf.yaml | 9 +++ tests/components/modbus/test.esp32-c3.yaml | 9 +++ tests/components/modbus/test.esp32-idf.yaml | 9 +++ tests/components/modbus/test.esp32.yaml | 9 +++ tests/components/modbus/test.esp8266.yaml | 9 +++ tests/components/modbus/test.rp2040.yaml | 9 +++ .../modbus_controller/test.esp32-c3-idf.yaml | 14 +++++ .../modbus_controller/test.esp32-c3.yaml | 14 +++++ .../modbus_controller/test.esp32-idf.yaml | 14 +++++ .../modbus_controller/test.esp32.yaml | 14 +++++ .../modbus_controller/test.esp8266.yaml | 14 +++++ .../modbus_controller/test.rp2040.yaml | 14 +++++ .../monochromatic/test.esp32-c3-idf.yaml | 40 +++++++++++++ .../monochromatic/test.esp32-c3.yaml | 40 +++++++++++++ .../monochromatic/test.esp32-idf.yaml | 40 +++++++++++++ .../components/monochromatic/test.esp32.yaml | 40 +++++++++++++ .../monochromatic/test.esp8266.yaml | 40 +++++++++++++ .../components/monochromatic/test.rp2040.yaml | 40 +++++++++++++ .../mopeka_ble/test.esp32-c3-idf.yaml | 3 + .../components/mopeka_ble/test.esp32-c3.yaml | 3 + .../components/mopeka_ble/test.esp32-idf.yaml | 3 + tests/components/mopeka_ble/test.esp32.yaml | 3 + .../mopeka_pro_check/test.esp32-c3-idf.yaml | 16 +++++ .../mopeka_pro_check/test.esp32-c3.yaml | 16 +++++ .../mopeka_pro_check/test.esp32-idf.yaml | 16 +++++ .../mopeka_pro_check/test.esp32.yaml | 16 +++++ .../mopeka_std_check/test.esp32-c3-idf.yaml | 16 +++++ .../mopeka_std_check/test.esp32-c3.yaml | 16 +++++ .../mopeka_std_check/test.esp32-idf.yaml | 16 +++++ .../mpl3115a2/test.esp32-c3-idf.yaml | 12 ++++ tests/components/mpl3115a2/test.esp32-c3.yaml | 12 ++++ .../components/mpl3115a2/test.esp32-idf.yaml | 12 ++++ tests/components/mpl3115a2/test.esp32.yaml | 12 ++++ tests/components/mpl3115a2/test.esp8266.yaml | 12 ++++ tests/components/mpl3115a2/test.rp2040.yaml | 12 ++++ .../components/mpr121/test.esp32-c3-idf.yaml | 26 ++++++++ tests/components/mpr121/test.esp32-c3.yaml | 26 ++++++++ tests/components/mpr121/test.esp32-idf.yaml | 26 ++++++++ tests/components/mpr121/test.esp32.yaml | 26 ++++++++ tests/components/mpr121/test.esp8266.yaml | 26 ++++++++ tests/components/mpr121/test.rp2040.yaml | 26 ++++++++ .../components/mpu6050/test.esp32-c3-idf.yaml | 22 +++++++ tests/components/mpu6050/test.esp32-c3.yaml | 22 +++++++ tests/components/mpu6050/test.esp32-idf.yaml | 22 +++++++ tests/components/mpu6050/test.esp32.yaml | 22 +++++++ tests/components/mpu6050/test.esp8266.yaml | 22 +++++++ tests/components/mpu6050/test.rp2040.yaml | 22 +++++++ .../components/mpu6886/test.esp32-c3-idf.yaml | 22 +++++++ tests/components/mpu6886/test.esp32-c3.yaml | 22 +++++++ tests/components/mpu6886/test.esp32-idf.yaml | 22 +++++++ tests/components/mpu6886/test.esp32.yaml | 22 +++++++ tests/components/mpu6886/test.esp8266.yaml | 22 +++++++ tests/components/mpu6886/test.rp2040.yaml | 22 +++++++ tests/components/mqtt/test.esp32-c3-idf.yaml | 16 +++++ tests/components/mqtt/test.esp32-c3.yaml | 15 +++++ tests/components/mqtt/test.esp32-idf.yaml | 16 +++++ tests/components/mqtt/test.esp32.yaml | 15 +++++ tests/components/mqtt/test.esp8266.yaml | 15 +++++ .../mqtt_subscribe/test.esp32-c3-idf.yaml | 37 ++++++++++++ .../mqtt_subscribe/test.esp32-c3.yaml | 36 +++++++++++ .../mqtt_subscribe/test.esp32-idf.yaml | 37 ++++++++++++ .../components/mqtt_subscribe/test.esp32.yaml | 36 +++++++++++ .../mqtt_subscribe/test.esp8266.yaml | 36 +++++++++++ .../components/ms5611/test.esp32-c3-idf.yaml | 13 ++++ tests/components/ms5611/test.esp32-c3.yaml | 13 ++++ tests/components/ms5611/test.esp32-idf.yaml | 13 ++++ tests/components/ms5611/test.esp32.yaml | 13 ++++ tests/components/ms5611/test.esp8266.yaml | 13 ++++ tests/components/ms5611/test.rp2040.yaml | 13 ++++ .../components/my9231/test.esp32-c3-idf.yaml | 26 ++++++++ tests/components/my9231/test.esp32-c3.yaml | 26 ++++++++ tests/components/my9231/test.esp32-idf.yaml | 26 ++++++++ tests/components/my9231/test.esp32.yaml | 26 ++++++++ tests/components/my9231/test.esp8266.yaml | 26 ++++++++ tests/components/my9231/test.rp2040.yaml | 26 ++++++++ 128 files changed, 2577 insertions(+) create mode 100644 tests/components/micronova/test.esp32-c3-idf.yaml create mode 100644 tests/components/micronova/test.esp32-c3.yaml create mode 100644 tests/components/micronova/test.esp32-idf.yaml create mode 100644 tests/components/micronova/test.esp32.yaml create mode 100644 tests/components/micronova/test.esp8266.yaml create mode 100644 tests/components/micronova/test.rp2040.yaml create mode 100644 tests/components/microphone/test.esp32-c3-idf.yaml create mode 100644 tests/components/microphone/test.esp32-c3.yaml create mode 100644 tests/components/microphone/test.esp32-idf.yaml create mode 100644 tests/components/microphone/test.esp32.yaml create mode 100644 tests/components/mics_4514/test.esp32-c3-idf.yaml create mode 100644 tests/components/mics_4514/test.esp32-c3.yaml create mode 100644 tests/components/mics_4514/test.esp32-idf.yaml create mode 100644 tests/components/mics_4514/test.esp32.yaml create mode 100644 tests/components/mics_4514/test.esp8266.yaml create mode 100644 tests/components/mics_4514/test.rp2040.yaml create mode 100644 tests/components/midea/test.esp32-c3.yaml create mode 100644 tests/components/midea/test.esp32.yaml create mode 100644 tests/components/midea/test.esp8266.yaml create mode 100644 tests/components/midea_ir/test.esp32-c3-idf.yaml create mode 100644 tests/components/midea_ir/test.esp32-c3.yaml create mode 100644 tests/components/midea_ir/test.esp32-idf.yaml create mode 100644 tests/components/midea_ir/test.esp32.yaml create mode 100644 tests/components/midea_ir/test.esp8266.yaml create mode 100644 tests/components/mitsubishi/test.esp32-c3-idf.yaml create mode 100644 tests/components/mitsubishi/test.esp32-c3.yaml create mode 100644 tests/components/mitsubishi/test.esp32-idf.yaml create mode 100644 tests/components/mitsubishi/test.esp32.yaml create mode 100644 tests/components/mitsubishi/test.esp8266.yaml create mode 100644 tests/components/mlx90393/test.esp32-c3-idf.yaml create mode 100644 tests/components/mlx90393/test.esp32-c3.yaml create mode 100644 tests/components/mlx90393/test.esp32-idf.yaml create mode 100644 tests/components/mlx90393/test.esp32.yaml create mode 100644 tests/components/mlx90393/test.esp8266.yaml create mode 100644 tests/components/mlx90393/test.rp2040.yaml create mode 100644 tests/components/mlx90614/test.esp32-c3-idf.yaml create mode 100644 tests/components/mlx90614/test.esp32-c3.yaml create mode 100644 tests/components/mlx90614/test.esp32-idf.yaml create mode 100644 tests/components/mlx90614/test.esp32.yaml create mode 100644 tests/components/mlx90614/test.esp8266.yaml create mode 100644 tests/components/mlx90614/test.rp2040.yaml create mode 100644 tests/components/mmc5603/test.esp32-c3-idf.yaml create mode 100644 tests/components/mmc5603/test.esp32-c3.yaml create mode 100644 tests/components/mmc5603/test.esp32-idf.yaml create mode 100644 tests/components/mmc5603/test.esp32.yaml create mode 100644 tests/components/mmc5603/test.esp8266.yaml create mode 100644 tests/components/mmc5603/test.rp2040.yaml create mode 100644 tests/components/mmc5983/test.esp32-c3-idf.yaml create mode 100644 tests/components/mmc5983/test.esp32-c3.yaml create mode 100644 tests/components/mmc5983/test.esp32-idf.yaml create mode 100644 tests/components/mmc5983/test.esp32.yaml create mode 100644 tests/components/mmc5983/test.esp8266.yaml create mode 100644 tests/components/mmc5983/test.rp2040.yaml create mode 100644 tests/components/modbus/test.esp32-c3-idf.yaml create mode 100644 tests/components/modbus/test.esp32-c3.yaml create mode 100644 tests/components/modbus/test.esp32-idf.yaml create mode 100644 tests/components/modbus/test.esp32.yaml create mode 100644 tests/components/modbus/test.esp8266.yaml create mode 100644 tests/components/modbus/test.rp2040.yaml create mode 100644 tests/components/modbus_controller/test.esp32-c3-idf.yaml create mode 100644 tests/components/modbus_controller/test.esp32-c3.yaml create mode 100644 tests/components/modbus_controller/test.esp32-idf.yaml create mode 100644 tests/components/modbus_controller/test.esp32.yaml create mode 100644 tests/components/modbus_controller/test.esp8266.yaml create mode 100644 tests/components/modbus_controller/test.rp2040.yaml create mode 100644 tests/components/monochromatic/test.esp32-c3-idf.yaml create mode 100644 tests/components/monochromatic/test.esp32-c3.yaml create mode 100644 tests/components/monochromatic/test.esp32-idf.yaml create mode 100644 tests/components/monochromatic/test.esp32.yaml create mode 100644 tests/components/monochromatic/test.esp8266.yaml create mode 100644 tests/components/monochromatic/test.rp2040.yaml create mode 100644 tests/components/mopeka_ble/test.esp32-c3-idf.yaml create mode 100644 tests/components/mopeka_ble/test.esp32-c3.yaml create mode 100644 tests/components/mopeka_ble/test.esp32-idf.yaml create mode 100644 tests/components/mopeka_ble/test.esp32.yaml create mode 100644 tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml create mode 100644 tests/components/mopeka_pro_check/test.esp32-c3.yaml create mode 100644 tests/components/mopeka_pro_check/test.esp32-idf.yaml create mode 100644 tests/components/mopeka_pro_check/test.esp32.yaml create mode 100644 tests/components/mopeka_std_check/test.esp32-c3-idf.yaml create mode 100644 tests/components/mopeka_std_check/test.esp32-c3.yaml create mode 100644 tests/components/mopeka_std_check/test.esp32-idf.yaml create mode 100644 tests/components/mpl3115a2/test.esp32-c3-idf.yaml create mode 100644 tests/components/mpl3115a2/test.esp32-c3.yaml create mode 100644 tests/components/mpl3115a2/test.esp32-idf.yaml create mode 100644 tests/components/mpl3115a2/test.esp32.yaml create mode 100644 tests/components/mpl3115a2/test.esp8266.yaml create mode 100644 tests/components/mpl3115a2/test.rp2040.yaml create mode 100644 tests/components/mpr121/test.esp32-c3-idf.yaml create mode 100644 tests/components/mpr121/test.esp32-c3.yaml create mode 100644 tests/components/mpr121/test.esp32-idf.yaml create mode 100644 tests/components/mpr121/test.esp32.yaml create mode 100644 tests/components/mpr121/test.esp8266.yaml create mode 100644 tests/components/mpr121/test.rp2040.yaml create mode 100644 tests/components/mpu6050/test.esp32-c3-idf.yaml create mode 100644 tests/components/mpu6050/test.esp32-c3.yaml create mode 100644 tests/components/mpu6050/test.esp32-idf.yaml create mode 100644 tests/components/mpu6050/test.esp32.yaml create mode 100644 tests/components/mpu6050/test.esp8266.yaml create mode 100644 tests/components/mpu6050/test.rp2040.yaml create mode 100644 tests/components/mpu6886/test.esp32-c3-idf.yaml create mode 100644 tests/components/mpu6886/test.esp32-c3.yaml create mode 100644 tests/components/mpu6886/test.esp32-idf.yaml create mode 100644 tests/components/mpu6886/test.esp32.yaml create mode 100644 tests/components/mpu6886/test.esp8266.yaml create mode 100644 tests/components/mpu6886/test.rp2040.yaml create mode 100644 tests/components/mqtt/test.esp32-c3-idf.yaml create mode 100644 tests/components/mqtt/test.esp32-c3.yaml create mode 100644 tests/components/mqtt/test.esp32-idf.yaml create mode 100644 tests/components/mqtt/test.esp32.yaml create mode 100644 tests/components/mqtt/test.esp8266.yaml create mode 100644 tests/components/mqtt_subscribe/test.esp32-c3-idf.yaml create mode 100644 tests/components/mqtt_subscribe/test.esp32-c3.yaml create mode 100644 tests/components/mqtt_subscribe/test.esp32-idf.yaml create mode 100644 tests/components/mqtt_subscribe/test.esp32.yaml create mode 100644 tests/components/mqtt_subscribe/test.esp8266.yaml create mode 100644 tests/components/ms5611/test.esp32-c3-idf.yaml create mode 100644 tests/components/ms5611/test.esp32-c3.yaml create mode 100644 tests/components/ms5611/test.esp32-idf.yaml create mode 100644 tests/components/ms5611/test.esp32.yaml create mode 100644 tests/components/ms5611/test.esp8266.yaml create mode 100644 tests/components/ms5611/test.rp2040.yaml create mode 100644 tests/components/my9231/test.esp32-c3-idf.yaml create mode 100644 tests/components/my9231/test.esp32-c3.yaml create mode 100644 tests/components/my9231/test.esp32-idf.yaml create mode 100644 tests/components/my9231/test.esp32.yaml create mode 100644 tests/components/my9231/test.esp8266.yaml create mode 100644 tests/components/my9231/test.rp2040.yaml diff --git a/tests/components/micronova/test.esp32-c3-idf.yaml b/tests/components/micronova/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ec9699909e --- /dev/null +++ b/tests/components/micronova/test.esp32-c3-idf.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +micronova: + enable_rx_pin: 6 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/micronova/test.esp32-c3.yaml b/tests/components/micronova/test.esp32-c3.yaml new file mode 100644 index 0000000000..ec9699909e --- /dev/null +++ b/tests/components/micronova/test.esp32-c3.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +micronova: + enable_rx_pin: 6 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/micronova/test.esp32-idf.yaml b/tests/components/micronova/test.esp32-idf.yaml new file mode 100644 index 0000000000..9156f7d6a9 --- /dev/null +++ b/tests/components/micronova/test.esp32-idf.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +micronova: + enable_rx_pin: 18 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/micronova/test.esp32.yaml b/tests/components/micronova/test.esp32.yaml new file mode 100644 index 0000000000..9156f7d6a9 --- /dev/null +++ b/tests/components/micronova/test.esp32.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +micronova: + enable_rx_pin: 18 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/micronova/test.esp8266.yaml b/tests/components/micronova/test.esp8266.yaml new file mode 100644 index 0000000000..d10ab7ad7a --- /dev/null +++ b/tests/components/micronova/test.esp8266.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +micronova: + enable_rx_pin: 16 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/micronova/test.rp2040.yaml b/tests/components/micronova/test.rp2040.yaml new file mode 100644 index 0000000000..ec9699909e --- /dev/null +++ b/tests/components/micronova/test.rp2040.yaml @@ -0,0 +1,49 @@ +uart: + - id: uart_micronova + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +micronova: + enable_rx_pin: 6 + +button: + - platform: micronova + custom_button: + name: Custom Micronova Button + memory_location: 0xA0 + memory_address: 0x7D + memory_data: 0x0F + +number: + - platform: micronova + thermostat_temperature: + name: Micronova Thermostaat + step: 1 + power_level: + name: Micronova Power level + +sensor: + - platform: micronova + room_temperature: + name: Room Temperature + fumes_temperature: + name: Fumes Temperature + water_temperature: + name: Water temperature + water_pressure: + name: Water pressure + stove_power: + name: Stove Power + fan_speed: + fan_rpm_offset: 240 + name: Fan RPM + memory_address_sensor: + memory_location: 0x20 + memory_address: 0x7d + name: Adres sensor + +switch: + - platform: micronova + stove: + name: Stove on/off diff --git a/tests/components/microphone/test.esp32-c3-idf.yaml b/tests/components/microphone/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..706a38f910 --- /dev/null +++ b/tests/components/microphone/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +i2s_audio: + i2s_lrclk_pin: 6 + i2s_bclk_pin: 7 + i2s_mclk_pin: 8 + +microphone: + - platform: i2s_audio + id: mic_id_external + i2s_din_pin: 3 + adc_type: external + pdm: false diff --git a/tests/components/microphone/test.esp32-c3.yaml b/tests/components/microphone/test.esp32-c3.yaml new file mode 100644 index 0000000000..706a38f910 --- /dev/null +++ b/tests/components/microphone/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +i2s_audio: + i2s_lrclk_pin: 6 + i2s_bclk_pin: 7 + i2s_mclk_pin: 8 + +microphone: + - platform: i2s_audio + id: mic_id_external + i2s_din_pin: 3 + adc_type: external + pdm: false diff --git a/tests/components/microphone/test.esp32-idf.yaml b/tests/components/microphone/test.esp32-idf.yaml new file mode 100644 index 0000000000..166eedb54d --- /dev/null +++ b/tests/components/microphone/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2s_audio: + i2s_lrclk_pin: 13 + i2s_bclk_pin: 14 + i2s_mclk_pin: 15 + +microphone: + - platform: i2s_audio + id: mic_id_adc + adc_pin: 32 + adc_type: internal + - platform: i2s_audio + id: mic_id_external + i2s_din_pin: 33 + adc_type: external + pdm: false diff --git a/tests/components/microphone/test.esp32.yaml b/tests/components/microphone/test.esp32.yaml new file mode 100644 index 0000000000..166eedb54d --- /dev/null +++ b/tests/components/microphone/test.esp32.yaml @@ -0,0 +1,15 @@ +i2s_audio: + i2s_lrclk_pin: 13 + i2s_bclk_pin: 14 + i2s_mclk_pin: 15 + +microphone: + - platform: i2s_audio + id: mic_id_adc + adc_pin: 32 + adc_type: internal + - platform: i2s_audio + id: mic_id_external + i2s_din_pin: 33 + adc_type: external + pdm: false diff --git a/tests/components/mics_4514/test.esp32-c3-idf.yaml b/tests/components/mics_4514/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..72369bec01 --- /dev/null +++ b/tests/components/mics_4514/test.esp32-c3-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 5 + sda: 4 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/mics_4514/test.esp32-c3.yaml b/tests/components/mics_4514/test.esp32-c3.yaml new file mode 100644 index 0000000000..72369bec01 --- /dev/null +++ b/tests/components/mics_4514/test.esp32-c3.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 5 + sda: 4 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/mics_4514/test.esp32-idf.yaml b/tests/components/mics_4514/test.esp32-idf.yaml new file mode 100644 index 0000000000..234839c91c --- /dev/null +++ b/tests/components/mics_4514/test.esp32-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 16 + sda: 17 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/mics_4514/test.esp32.yaml b/tests/components/mics_4514/test.esp32.yaml new file mode 100644 index 0000000000..234839c91c --- /dev/null +++ b/tests/components/mics_4514/test.esp32.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 16 + sda: 17 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/mics_4514/test.esp8266.yaml b/tests/components/mics_4514/test.esp8266.yaml new file mode 100644 index 0000000000..72369bec01 --- /dev/null +++ b/tests/components/mics_4514/test.esp8266.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 5 + sda: 4 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/mics_4514/test.rp2040.yaml b/tests/components/mics_4514/test.rp2040.yaml new file mode 100644 index 0000000000..72369bec01 --- /dev/null +++ b/tests/components/mics_4514/test.rp2040.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mics_4514 + scl: 5 + sda: 4 + +sensor: + - platform: mics_4514 + update_interval: 60s + nitrogen_dioxide: + name: MICS-4514 NO2 + carbon_monoxide: + name: MICS-4514 CO + methane: + name: MICS-4514 CH4 + hydrogen: + name: MICS-4514 H2 + ethanol: + name: MICS-4514 C2H5OH + ammonia: + name: MICS-4514 NH3 diff --git a/tests/components/midea/test.esp32-c3.yaml b/tests/components/midea/test.esp32-c3.yaml new file mode 100644 index 0000000000..bcb8635eaf --- /dev/null +++ b/tests/components/midea/test.esp32-c3.yaml @@ -0,0 +1,59 @@ +wifi: + ssid: MySSID + password: password1 + +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +uart: + - id: uart_midea + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +climate: + - platform: midea + id: midea_unit + name: Midea Climate + on_control: + - logger.log: Control message received! + - lambda: |- + x.set_mode(CLIMATE_MODE_FAN_ONLY); + on_state: + - logger.log: State changed! + transmitter_id: + period: 1s + num_attempts: 5 + timeout: 2s + beeper: false + autoconf: true + visual: + min_temperature: 17 °C + max_temperature: 30 °C + temperature_step: 0.5 °C + supported_modes: + - FAN_ONLY + - HEAT_COOL + - COOL + - HEAT + - DRY + custom_fan_modes: + - SILENT + - TURBO + supported_presets: + - ECO + - BOOST + - SLEEP + custom_presets: + - FREEZE_PROTECTION + supported_swing_modes: + - VERTICAL + - HORIZONTAL + - BOTH + outdoor_temperature: + name: Temp + power_usage: + name: Power + humidity_setpoint: + name: Humidity diff --git a/tests/components/midea/test.esp32.yaml b/tests/components/midea/test.esp32.yaml new file mode 100644 index 0000000000..5c638b9613 --- /dev/null +++ b/tests/components/midea/test.esp32.yaml @@ -0,0 +1,59 @@ +wifi: + ssid: MySSID + password: password1 + +remote_transmitter: + pin: 18 + carrier_duty_percent: 50% + +uart: + - id: uart_midea + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +climate: + - platform: midea + id: midea_unit + name: Midea Climate + on_control: + - logger.log: Control message received! + - lambda: |- + x.set_mode(CLIMATE_MODE_FAN_ONLY); + on_state: + - logger.log: State changed! + transmitter_id: + period: 1s + num_attempts: 5 + timeout: 2s + beeper: false + autoconf: true + visual: + min_temperature: 17 °C + max_temperature: 30 °C + temperature_step: 0.5 °C + supported_modes: + - FAN_ONLY + - HEAT_COOL + - COOL + - HEAT + - DRY + custom_fan_modes: + - SILENT + - TURBO + supported_presets: + - ECO + - BOOST + - SLEEP + custom_presets: + - FREEZE_PROTECTION + supported_swing_modes: + - VERTICAL + - HORIZONTAL + - BOTH + outdoor_temperature: + name: Temp + power_usage: + name: Power + humidity_setpoint: + name: Humidity diff --git a/tests/components/midea/test.esp8266.yaml b/tests/components/midea/test.esp8266.yaml new file mode 100644 index 0000000000..b0ed7eb472 --- /dev/null +++ b/tests/components/midea/test.esp8266.yaml @@ -0,0 +1,59 @@ +wifi: + ssid: MySSID + password: password1 + +remote_transmitter: + pin: 12 + carrier_duty_percent: 50% + +uart: + - id: uart_midea + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +climate: + - platform: midea + id: midea_unit + name: Midea Climate + on_control: + - logger.log: Control message received! + - lambda: |- + x.set_mode(CLIMATE_MODE_FAN_ONLY); + on_state: + - logger.log: State changed! + transmitter_id: + period: 1s + num_attempts: 5 + timeout: 2s + beeper: false + autoconf: true + visual: + min_temperature: 17 °C + max_temperature: 30 °C + temperature_step: 0.5 °C + supported_modes: + - FAN_ONLY + - HEAT_COOL + - COOL + - HEAT + - DRY + custom_fan_modes: + - SILENT + - TURBO + supported_presets: + - ECO + - BOOST + - SLEEP + custom_presets: + - FREEZE_PROTECTION + supported_swing_modes: + - VERTICAL + - HORIZONTAL + - BOTH + outdoor_temperature: + name: Temp + power_usage: + name: Power + humidity_setpoint: + name: Humidity diff --git a/tests/components/midea_ir/test.esp32-c3-idf.yaml b/tests/components/midea_ir/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/midea_ir/test.esp32-c3.yaml b/tests/components/midea_ir/test.esp32-c3.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/midea_ir/test.esp32-idf.yaml b/tests/components/midea_ir/test.esp32-idf.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/midea_ir/test.esp32.yaml b/tests/components/midea_ir/test.esp32.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/test.esp32.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/midea_ir/test.esp8266.yaml b/tests/components/midea_ir/test.esp8266.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/test.esp8266.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/mitsubishi/test.esp32-c3-idf.yaml b/tests/components/mitsubishi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mitsubishi/test.esp32-c3.yaml b/tests/components/mitsubishi/test.esp32-c3.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mitsubishi/test.esp32-idf.yaml b/tests/components/mitsubishi/test.esp32-idf.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mitsubishi/test.esp32.yaml b/tests/components/mitsubishi/test.esp32.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/test.esp32.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mitsubishi/test.esp8266.yaml b/tests/components/mitsubishi/test.esp8266.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/test.esp8266.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mlx90393/test.esp32-c3-idf.yaml b/tests/components/mlx90393/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..549eea8032 --- /dev/null +++ b/tests/components/mlx90393/test.esp32-c3-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90393/test.esp32-c3.yaml b/tests/components/mlx90393/test.esp32-c3.yaml new file mode 100644 index 0000000000..549eea8032 --- /dev/null +++ b/tests/components/mlx90393/test.esp32-c3.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90393/test.esp32-idf.yaml b/tests/components/mlx90393/test.esp32-idf.yaml new file mode 100644 index 0000000000..089fd136f4 --- /dev/null +++ b/tests/components/mlx90393/test.esp32-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 16 + sda: 17 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90393/test.esp32.yaml b/tests/components/mlx90393/test.esp32.yaml new file mode 100644 index 0000000000..089fd136f4 --- /dev/null +++ b/tests/components/mlx90393/test.esp32.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 16 + sda: 17 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90393/test.esp8266.yaml b/tests/components/mlx90393/test.esp8266.yaml new file mode 100644 index 0000000000..549eea8032 --- /dev/null +++ b/tests/components/mlx90393/test.esp8266.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90393/test.rp2040.yaml b/tests/components/mlx90393/test.rp2040.yaml new file mode 100644 index 0000000000..549eea8032 --- /dev/null +++ b/tests/components/mlx90393/test.rp2040.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_mlx90393 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 diff --git a/tests/components/mlx90614/test.esp32-c3-idf.yaml b/tests/components/mlx90614/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a863e0ee2e --- /dev/null +++ b/tests/components/mlx90614/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mlx90614/test.esp32-c3.yaml b/tests/components/mlx90614/test.esp32-c3.yaml new file mode 100644 index 0000000000..a863e0ee2e --- /dev/null +++ b/tests/components/mlx90614/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mlx90614/test.esp32-idf.yaml b/tests/components/mlx90614/test.esp32-idf.yaml new file mode 100644 index 0000000000..8c1ee68f42 --- /dev/null +++ b/tests/components/mlx90614/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 16 + sda: 17 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mlx90614/test.esp32.yaml b/tests/components/mlx90614/test.esp32.yaml new file mode 100644 index 0000000000..8c1ee68f42 --- /dev/null +++ b/tests/components/mlx90614/test.esp32.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 16 + sda: 17 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mlx90614/test.esp8266.yaml b/tests/components/mlx90614/test.esp8266.yaml new file mode 100644 index 0000000000..a863e0ee2e --- /dev/null +++ b/tests/components/mlx90614/test.esp8266.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mlx90614/test.rp2040.yaml b/tests/components/mlx90614/test.rp2040.yaml new file mode 100644 index 0000000000..a863e0ee2e --- /dev/null +++ b/tests/components/mlx90614/test.rp2040.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mlx90614 + scl: 5 + sda: 4 + +sensor: + - platform: mlx90614 + ambient: + name: Ambient + object: + name: Object + emissivity: 1.0 diff --git a/tests/components/mmc5603/test.esp32-c3-idf.yaml b/tests/components/mmc5603/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..834591bb39 --- /dev/null +++ b/tests/components/mmc5603/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5603/test.esp32-c3.yaml b/tests/components/mmc5603/test.esp32-c3.yaml new file mode 100644 index 0000000000..834591bb39 --- /dev/null +++ b/tests/components/mmc5603/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5603/test.esp32-idf.yaml b/tests/components/mmc5603/test.esp32-idf.yaml new file mode 100644 index 0000000000..fbb83cd9f8 --- /dev/null +++ b/tests/components/mmc5603/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 16 + sda: 17 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5603/test.esp32.yaml b/tests/components/mmc5603/test.esp32.yaml new file mode 100644 index 0000000000..fbb83cd9f8 --- /dev/null +++ b/tests/components/mmc5603/test.esp32.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 16 + sda: 17 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5603/test.esp8266.yaml b/tests/components/mmc5603/test.esp8266.yaml new file mode 100644 index 0000000000..834591bb39 --- /dev/null +++ b/tests/components/mmc5603/test.esp8266.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5603/test.rp2040.yaml b/tests/components/mmc5603/test.rp2040.yaml new file mode 100644 index 0000000000..834591bb39 --- /dev/null +++ b/tests/components/mmc5603/test.rp2040.yaml @@ -0,0 +1,14 @@ +i2c: + - id: i2c_mmc5603 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5603 + address: 0x30 + field_strength_x: + name: HMC5883L Field Strength X + field_strength_y: + name: HMC5883L Field Strength Y + field_strength_z: + name: HMC5883L Field Strength Z diff --git a/tests/components/mmc5983/test.esp32-c3-idf.yaml b/tests/components/mmc5983/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..68d821e9a5 --- /dev/null +++ b/tests/components/mmc5983/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/mmc5983/test.esp32-c3.yaml b/tests/components/mmc5983/test.esp32-c3.yaml new file mode 100644 index 0000000000..68d821e9a5 --- /dev/null +++ b/tests/components/mmc5983/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/mmc5983/test.esp32-idf.yaml b/tests/components/mmc5983/test.esp32-idf.yaml new file mode 100644 index 0000000000..6104be9b83 --- /dev/null +++ b/tests/components/mmc5983/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 16 + sda: 17 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/mmc5983/test.esp32.yaml b/tests/components/mmc5983/test.esp32.yaml new file mode 100644 index 0000000000..6104be9b83 --- /dev/null +++ b/tests/components/mmc5983/test.esp32.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 16 + sda: 17 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/mmc5983/test.esp8266.yaml b/tests/components/mmc5983/test.esp8266.yaml new file mode 100644 index 0000000000..68d821e9a5 --- /dev/null +++ b/tests/components/mmc5983/test.esp8266.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/mmc5983/test.rp2040.yaml b/tests/components/mmc5983/test.rp2040.yaml new file mode 100644 index 0000000000..68d821e9a5 --- /dev/null +++ b/tests/components/mmc5983/test.rp2040.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_mmc5983 + scl: 5 + sda: 4 + +sensor: + - platform: mmc5983 + field_strength_x: + name: "Magnet X" + id: magnet_x + field_strength_y: + name: "Magnet Y" + id: magnet_y + field_strength_z: + name: "Magnet Z" + id: magnet_z diff --git a/tests/components/modbus/test.esp32-c3-idf.yaml b/tests/components/modbus/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d22b507be0 --- /dev/null +++ b/tests/components/modbus/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 diff --git a/tests/components/modbus/test.esp32-c3.yaml b/tests/components/modbus/test.esp32-c3.yaml new file mode 100644 index 0000000000..d22b507be0 --- /dev/null +++ b/tests/components/modbus/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 diff --git a/tests/components/modbus/test.esp32-idf.yaml b/tests/components/modbus/test.esp32-idf.yaml new file mode 100644 index 0000000000..20cf238b1b --- /dev/null +++ b/tests/components/modbus/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 15 diff --git a/tests/components/modbus/test.esp32.yaml b/tests/components/modbus/test.esp32.yaml new file mode 100644 index 0000000000..20cf238b1b --- /dev/null +++ b/tests/components/modbus/test.esp32.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 15 diff --git a/tests/components/modbus/test.esp8266.yaml b/tests/components/modbus/test.esp8266.yaml new file mode 100644 index 0000000000..560c044766 --- /dev/null +++ b/tests/components/modbus/test.esp8266.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 12 diff --git a/tests/components/modbus/test.rp2040.yaml b/tests/components/modbus/test.rp2040.yaml new file mode 100644 index 0000000000..d22b507be0 --- /dev/null +++ b/tests/components/modbus/test.rp2040.yaml @@ -0,0 +1,9 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 diff --git a/tests/components/modbus_controller/test.esp32-c3-idf.yaml b/tests/components/modbus_controller/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..476e65ecb0 --- /dev/null +++ b/tests/components/modbus_controller/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/modbus_controller/test.esp32-c3.yaml b/tests/components/modbus_controller/test.esp32-c3.yaml new file mode 100644 index 0000000000..476e65ecb0 --- /dev/null +++ b/tests/components/modbus_controller/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/modbus_controller/test.esp32-idf.yaml b/tests/components/modbus_controller/test.esp32-idf.yaml new file mode 100644 index 0000000000..c5fe3fd057 --- /dev/null +++ b/tests/components/modbus_controller/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 15 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/modbus_controller/test.esp32.yaml b/tests/components/modbus_controller/test.esp32.yaml new file mode 100644 index 0000000000..c5fe3fd057 --- /dev/null +++ b/tests/components/modbus_controller/test.esp32.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 15 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/modbus_controller/test.esp8266.yaml b/tests/components/modbus_controller/test.esp8266.yaml new file mode 100644 index 0000000000..67cac65d1b --- /dev/null +++ b/tests/components/modbus_controller/test.esp8266.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 12 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/modbus_controller/test.rp2040.yaml b/tests/components/modbus_controller/test.rp2040.yaml new file mode 100644 index 0000000000..476e65ecb0 --- /dev/null +++ b/tests/components/modbus_controller/test.rp2040.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_modbus + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +modbus: + id: mod_bus1 + flow_control_pin: 6 + +modbus_controller: + - id: modbus_controller1 + address: 0x2 + modbus_id: mod_bus1 diff --git a/tests/components/monochromatic/test.esp32-c3-idf.yaml b/tests/components/monochromatic/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9524efcb2d --- /dev/null +++ b/tests/components/monochromatic/test.esp32-c3-idf.yaml @@ -0,0 +1,40 @@ +output: + - platform: ledc + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/monochromatic/test.esp32-c3.yaml b/tests/components/monochromatic/test.esp32-c3.yaml new file mode 100644 index 0000000000..9524efcb2d --- /dev/null +++ b/tests/components/monochromatic/test.esp32-c3.yaml @@ -0,0 +1,40 @@ +output: + - platform: ledc + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/monochromatic/test.esp32-idf.yaml b/tests/components/monochromatic/test.esp32-idf.yaml new file mode 100644 index 0000000000..9524efcb2d --- /dev/null +++ b/tests/components/monochromatic/test.esp32-idf.yaml @@ -0,0 +1,40 @@ +output: + - platform: ledc + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/monochromatic/test.esp32.yaml b/tests/components/monochromatic/test.esp32.yaml new file mode 100644 index 0000000000..9524efcb2d --- /dev/null +++ b/tests/components/monochromatic/test.esp32.yaml @@ -0,0 +1,40 @@ +output: + - platform: ledc + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/monochromatic/test.esp8266.yaml b/tests/components/monochromatic/test.esp8266.yaml new file mode 100644 index 0000000000..94d849581d --- /dev/null +++ b/tests/components/monochromatic/test.esp8266.yaml @@ -0,0 +1,40 @@ +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/monochromatic/test.rp2040.yaml b/tests/components/monochromatic/test.rp2040.yaml new file mode 100644 index 0000000000..093577e256 --- /dev/null +++ b/tests/components/monochromatic/test.rp2040.yaml @@ -0,0 +1,40 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 4 + +light: + - platform: monochromatic + name: Monochromatic Light + id: monochromatic_light + output: light_output_1 + gamma_correct: 2.8 + default_transition_length: 2s + effects: + - strobe: + - flicker: + - flicker: + name: My Flicker + alpha: 98% + intensity: 1.5% + - lambda: + name: My Custom Effect + update_interval: 1s + lambda: |- + static int state = 0; + state += 1; + if (state == 4) + state = 0; + - pulse: + transition_length: 10s + update_interval: 20s + min_brightness: 10% + max_brightness: 90% + - pulse: + name: pulse2 + transition_length: + on_length: 10s + off_length: 5s + update_interval: 15s + min_brightness: 10% + max_brightness: 90% diff --git a/tests/components/mopeka_ble/test.esp32-c3-idf.yaml b/tests/components/mopeka_ble/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a115404f1c --- /dev/null +++ b/tests/components/mopeka_ble/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +mopeka_ble: diff --git a/tests/components/mopeka_ble/test.esp32-c3.yaml b/tests/components/mopeka_ble/test.esp32-c3.yaml new file mode 100644 index 0000000000..a115404f1c --- /dev/null +++ b/tests/components/mopeka_ble/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +mopeka_ble: diff --git a/tests/components/mopeka_ble/test.esp32-idf.yaml b/tests/components/mopeka_ble/test.esp32-idf.yaml new file mode 100644 index 0000000000..a115404f1c --- /dev/null +++ b/tests/components/mopeka_ble/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +mopeka_ble: diff --git a/tests/components/mopeka_ble/test.esp32.yaml b/tests/components/mopeka_ble/test.esp32.yaml new file mode 100644 index 0000000000..a115404f1c --- /dev/null +++ b/tests/components/mopeka_ble/test.esp32.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +mopeka_ble: diff --git a/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml b/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..147cbcb9de --- /dev/null +++ b/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + - platform: mopeka_pro_check + mac_address: D3:75:F2:DC:16:91 + tank_type: CUSTOM + custom_distance_full: 40cm + custom_distance_empty: 10mm + temperature: + name: Propane test temp + level: + name: Propane test level + distance: + name: Propane test distance + battery_level: + name: Propane test battery level diff --git a/tests/components/mopeka_pro_check/test.esp32-c3.yaml b/tests/components/mopeka_pro_check/test.esp32-c3.yaml new file mode 100644 index 0000000000..147cbcb9de --- /dev/null +++ b/tests/components/mopeka_pro_check/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + - platform: mopeka_pro_check + mac_address: D3:75:F2:DC:16:91 + tank_type: CUSTOM + custom_distance_full: 40cm + custom_distance_empty: 10mm + temperature: + name: Propane test temp + level: + name: Propane test level + distance: + name: Propane test distance + battery_level: + name: Propane test battery level diff --git a/tests/components/mopeka_pro_check/test.esp32-idf.yaml b/tests/components/mopeka_pro_check/test.esp32-idf.yaml new file mode 100644 index 0000000000..147cbcb9de --- /dev/null +++ b/tests/components/mopeka_pro_check/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + - platform: mopeka_pro_check + mac_address: D3:75:F2:DC:16:91 + tank_type: CUSTOM + custom_distance_full: 40cm + custom_distance_empty: 10mm + temperature: + name: Propane test temp + level: + name: Propane test level + distance: + name: Propane test distance + battery_level: + name: Propane test battery level diff --git a/tests/components/mopeka_pro_check/test.esp32.yaml b/tests/components/mopeka_pro_check/test.esp32.yaml new file mode 100644 index 0000000000..147cbcb9de --- /dev/null +++ b/tests/components/mopeka_pro_check/test.esp32.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + - platform: mopeka_pro_check + mac_address: D3:75:F2:DC:16:91 + tank_type: CUSTOM + custom_distance_full: 40cm + custom_distance_empty: 10mm + temperature: + name: Propane test temp + level: + name: Propane test level + distance: + name: Propane test distance + battery_level: + name: Propane test battery level diff --git a/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..830adf952f --- /dev/null +++ b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + # Example using 11kg 100% propane tank. + - platform: mopeka_std_check + mac_address: D3:75:F2:DC:16:91 + tank_type: Europe_11kg + temperature: + name: "Propane test temp" + level: + name: "Propane test level" + distance: + name: "Propane test distance" + battery_level: + name: "Propane test battery level" + diff --git a/tests/components/mopeka_std_check/test.esp32-c3.yaml b/tests/components/mopeka_std_check/test.esp32-c3.yaml new file mode 100644 index 0000000000..830adf952f --- /dev/null +++ b/tests/components/mopeka_std_check/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + # Example using 11kg 100% propane tank. + - platform: mopeka_std_check + mac_address: D3:75:F2:DC:16:91 + tank_type: Europe_11kg + temperature: + name: "Propane test temp" + level: + name: "Propane test level" + distance: + name: "Propane test distance" + battery_level: + name: "Propane test battery level" + diff --git a/tests/components/mopeka_std_check/test.esp32-idf.yaml b/tests/components/mopeka_std_check/test.esp32-idf.yaml new file mode 100644 index 0000000000..830adf952f --- /dev/null +++ b/tests/components/mopeka_std_check/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + # Example using 11kg 100% propane tank. + - platform: mopeka_std_check + mac_address: D3:75:F2:DC:16:91 + tank_type: Europe_11kg + temperature: + name: "Propane test temp" + level: + name: "Propane test level" + distance: + name: "Propane test distance" + battery_level: + name: "Propane test battery level" + diff --git a/tests/components/mpl3115a2/test.esp32-c3-idf.yaml b/tests/components/mpl3115a2/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9cbe08d920 --- /dev/null +++ b/tests/components/mpl3115a2/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 5 + sda: 4 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpl3115a2/test.esp32-c3.yaml b/tests/components/mpl3115a2/test.esp32-c3.yaml new file mode 100644 index 0000000000..9cbe08d920 --- /dev/null +++ b/tests/components/mpl3115a2/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 5 + sda: 4 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpl3115a2/test.esp32-idf.yaml b/tests/components/mpl3115a2/test.esp32-idf.yaml new file mode 100644 index 0000000000..5e9d6d190d --- /dev/null +++ b/tests/components/mpl3115a2/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 16 + sda: 17 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpl3115a2/test.esp32.yaml b/tests/components/mpl3115a2/test.esp32.yaml new file mode 100644 index 0000000000..5e9d6d190d --- /dev/null +++ b/tests/components/mpl3115a2/test.esp32.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 16 + sda: 17 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpl3115a2/test.esp8266.yaml b/tests/components/mpl3115a2/test.esp8266.yaml new file mode 100644 index 0000000000..9cbe08d920 --- /dev/null +++ b/tests/components/mpl3115a2/test.esp8266.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 5 + sda: 4 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpl3115a2/test.rp2040.yaml b/tests/components/mpl3115a2/test.rp2040.yaml new file mode 100644 index 0000000000..9cbe08d920 --- /dev/null +++ b/tests/components/mpl3115a2/test.rp2040.yaml @@ -0,0 +1,12 @@ +i2c: + - id: i2c_mpl3115a2 + scl: 5 + sda: 4 + +sensor: + - platform: mpl3115a2 + temperature: + name: MPL3115A2 Temperature + pressure: + name: MPL3115A2 Pressure + update_interval: 10s diff --git a/tests/components/mpr121/test.esp32-c3-idf.yaml b/tests/components/mpr121/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..517e092560 --- /dev/null +++ b/tests/components/mpr121/test.esp32-c3-idf.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 5 + sda: 4 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpr121/test.esp32-c3.yaml b/tests/components/mpr121/test.esp32-c3.yaml new file mode 100644 index 0000000000..517e092560 --- /dev/null +++ b/tests/components/mpr121/test.esp32-c3.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 5 + sda: 4 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpr121/test.esp32-idf.yaml b/tests/components/mpr121/test.esp32-idf.yaml new file mode 100644 index 0000000000..96996fd8ee --- /dev/null +++ b/tests/components/mpr121/test.esp32-idf.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 16 + sda: 17 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpr121/test.esp32.yaml b/tests/components/mpr121/test.esp32.yaml new file mode 100644 index 0000000000..96996fd8ee --- /dev/null +++ b/tests/components/mpr121/test.esp32.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 16 + sda: 17 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpr121/test.esp8266.yaml b/tests/components/mpr121/test.esp8266.yaml new file mode 100644 index 0000000000..517e092560 --- /dev/null +++ b/tests/components/mpr121/test.esp8266.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 5 + sda: 4 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpr121/test.rp2040.yaml b/tests/components/mpr121/test.rp2040.yaml new file mode 100644 index 0000000000..517e092560 --- /dev/null +++ b/tests/components/mpr121/test.rp2040.yaml @@ -0,0 +1,26 @@ +i2c: + - id: i2c_mpr121 + scl: 5 + sda: 4 + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 3 diff --git a/tests/components/mpu6050/test.esp32-c3-idf.yaml b/tests/components/mpu6050/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..39c8506d2b --- /dev/null +++ b/tests/components/mpu6050/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6050/test.esp32-c3.yaml b/tests/components/mpu6050/test.esp32-c3.yaml new file mode 100644 index 0000000000..39c8506d2b --- /dev/null +++ b/tests/components/mpu6050/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6050/test.esp32-idf.yaml b/tests/components/mpu6050/test.esp32-idf.yaml new file mode 100644 index 0000000000..45bca55dea --- /dev/null +++ b/tests/components/mpu6050/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 16 + sda: 17 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6050/test.esp32.yaml b/tests/components/mpu6050/test.esp32.yaml new file mode 100644 index 0000000000..45bca55dea --- /dev/null +++ b/tests/components/mpu6050/test.esp32.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 16 + sda: 17 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6050/test.esp8266.yaml b/tests/components/mpu6050/test.esp8266.yaml new file mode 100644 index 0000000000..39c8506d2b --- /dev/null +++ b/tests/components/mpu6050/test.esp8266.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6050/test.rp2040.yaml b/tests/components/mpu6050/test.rp2040.yaml new file mode 100644 index 0000000000..39c8506d2b --- /dev/null +++ b/tests/components/mpu6050/test.rp2040.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6050 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6050 + address: 0x68 + accel_x: + name: MPU6050 Accel X + accel_y: + name: MPU6050 Accel Y + accel_z: + name: MPU6050 Accel z + gyro_x: + name: MPU6050 Gyro X + gyro_y: + name: MPU6050 Gyro Y + gyro_z: + name: MPU6050 Gyro z + temperature: + name: MPU6050 Temperature diff --git a/tests/components/mpu6886/test.esp32-c3-idf.yaml b/tests/components/mpu6886/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fad51a80b4 --- /dev/null +++ b/tests/components/mpu6886/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mpu6886/test.esp32-c3.yaml b/tests/components/mpu6886/test.esp32-c3.yaml new file mode 100644 index 0000000000..fad51a80b4 --- /dev/null +++ b/tests/components/mpu6886/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mpu6886/test.esp32-idf.yaml b/tests/components/mpu6886/test.esp32-idf.yaml new file mode 100644 index 0000000000..84e4d56739 --- /dev/null +++ b/tests/components/mpu6886/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 16 + sda: 17 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mpu6886/test.esp32.yaml b/tests/components/mpu6886/test.esp32.yaml new file mode 100644 index 0000000000..84e4d56739 --- /dev/null +++ b/tests/components/mpu6886/test.esp32.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 16 + sda: 17 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mpu6886/test.esp8266.yaml b/tests/components/mpu6886/test.esp8266.yaml new file mode 100644 index 0000000000..fad51a80b4 --- /dev/null +++ b/tests/components/mpu6886/test.esp8266.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mpu6886/test.rp2040.yaml b/tests/components/mpu6886/test.rp2040.yaml new file mode 100644 index 0000000000..fad51a80b4 --- /dev/null +++ b/tests/components/mpu6886/test.rp2040.yaml @@ -0,0 +1,22 @@ +i2c: + - id: i2c_mpu6886 + scl: 5 + sda: 4 + +sensor: + - platform: mpu6886 + address: 0x68 + accel_x: + name: MPU6886 Accel X + accel_y: + name: MPU6886 Accel Y + accel_z: + name: MPU6886 Accel z + gyro_x: + name: MPU6886 Gyro X + gyro_y: + name: MPU6886 Gyro Y + gyro_z: + name: MPU6886 Gyro z + temperature: + name: MPU6886 Temperature diff --git a/tests/components/mqtt/test.esp32-c3-idf.yaml b/tests/components/mqtt/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..7702ed5610 --- /dev/null +++ b/tests/components/mqtt/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + idf_send_async: false + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test diff --git a/tests/components/mqtt/test.esp32-c3.yaml b/tests/components/mqtt/test.esp32-c3.yaml new file mode 100644 index 0000000000..692d504d6d --- /dev/null +++ b/tests/components/mqtt/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test diff --git a/tests/components/mqtt/test.esp32-idf.yaml b/tests/components/mqtt/test.esp32-idf.yaml new file mode 100644 index 0000000000..7702ed5610 --- /dev/null +++ b/tests/components/mqtt/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + idf_send_async: false + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test diff --git a/tests/components/mqtt/test.esp32.yaml b/tests/components/mqtt/test.esp32.yaml new file mode 100644 index 0000000000..692d504d6d --- /dev/null +++ b/tests/components/mqtt/test.esp32.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test diff --git a/tests/components/mqtt/test.esp8266.yaml b/tests/components/mqtt/test.esp8266.yaml new file mode 100644 index 0000000000..692d504d6d --- /dev/null +++ b/tests/components/mqtt/test.esp8266.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test diff --git a/tests/components/mqtt_subscribe/test.esp32-c3-idf.yaml b/tests/components/mqtt_subscribe/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..070672f15c --- /dev/null +++ b/tests/components/mqtt_subscribe/test.esp32-c3-idf.yaml @@ -0,0 +1,37 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + idf_send_async: false + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test + +sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(the_sensor).state; + root["greeting"] = "Hello World"; + +text_sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: "the/topic" + qos: 2 + on_value: + - logger.log: "Text sensor got value" diff --git a/tests/components/mqtt_subscribe/test.esp32-c3.yaml b/tests/components/mqtt_subscribe/test.esp32-c3.yaml new file mode 100644 index 0000000000..13ed311b17 --- /dev/null +++ b/tests/components/mqtt_subscribe/test.esp32-c3.yaml @@ -0,0 +1,36 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test + +sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(the_sensor).state; + root["greeting"] = "Hello World"; + +text_sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: "the/topic" + qos: 2 + on_value: + - logger.log: "Text sensor got value" diff --git a/tests/components/mqtt_subscribe/test.esp32-idf.yaml b/tests/components/mqtt_subscribe/test.esp32-idf.yaml new file mode 100644 index 0000000000..070672f15c --- /dev/null +++ b/tests/components/mqtt_subscribe/test.esp32-idf.yaml @@ -0,0 +1,37 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + idf_send_async: false + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test + +sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(the_sensor).state; + root["greeting"] = "Hello World"; + +text_sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: "the/topic" + qos: 2 + on_value: + - logger.log: "Text sensor got value" diff --git a/tests/components/mqtt_subscribe/test.esp32.yaml b/tests/components/mqtt_subscribe/test.esp32.yaml new file mode 100644 index 0000000000..13ed311b17 --- /dev/null +++ b/tests/components/mqtt_subscribe/test.esp32.yaml @@ -0,0 +1,36 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test + +sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(the_sensor).state; + root["greeting"] = "Hello World"; + +text_sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: "the/topic" + qos: 2 + on_value: + - logger.log: "Text sensor got value" diff --git a/tests/components/mqtt_subscribe/test.esp8266.yaml b/tests/components/mqtt_subscribe/test.esp8266.yaml new file mode 100644 index 0000000000..13ed311b17 --- /dev/null +++ b/tests/components/mqtt_subscribe/test.esp8266.yaml @@ -0,0 +1,36 @@ +wifi: + ssid: MySSID + password: password1 + +mqtt: + broker: test.mosquitto.org + port: 1883 + discovery: true + discovery_prefix: homeassistant + log_topic: + on_message: + topic: testing/sensor/testing_sensor/state + qos: 0 + then: + - logger.log: Mqtt Test + +sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(the_sensor).state; + root["greeting"] = "Hello World"; + +text_sensor: + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: "the/topic" + qos: 2 + on_value: + - logger.log: "Text sensor got value" diff --git a/tests/components/ms5611/test.esp32-c3-idf.yaml b/tests/components/ms5611/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..8f18501eef --- /dev/null +++ b/tests/components/ms5611/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 5 + sda: 4 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/ms5611/test.esp32-c3.yaml b/tests/components/ms5611/test.esp32-c3.yaml new file mode 100644 index 0000000000..8f18501eef --- /dev/null +++ b/tests/components/ms5611/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 5 + sda: 4 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/ms5611/test.esp32-idf.yaml b/tests/components/ms5611/test.esp32-idf.yaml new file mode 100644 index 0000000000..b090eeaa93 --- /dev/null +++ b/tests/components/ms5611/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 16 + sda: 17 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/ms5611/test.esp32.yaml b/tests/components/ms5611/test.esp32.yaml new file mode 100644 index 0000000000..b090eeaa93 --- /dev/null +++ b/tests/components/ms5611/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 16 + sda: 17 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/ms5611/test.esp8266.yaml b/tests/components/ms5611/test.esp8266.yaml new file mode 100644 index 0000000000..8f18501eef --- /dev/null +++ b/tests/components/ms5611/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 5 + sda: 4 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/ms5611/test.rp2040.yaml b/tests/components/ms5611/test.rp2040.yaml new file mode 100644 index 0000000000..8f18501eef --- /dev/null +++ b/tests/components/ms5611/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_ms5611 + scl: 5 + sda: 4 + +sensor: + - platform: ms5611 + temperature: + name: Outside Temperature + pressure: + name: Outside Pressure + address: 0x77 + update_interval: 15s diff --git a/tests/components/my9231/test.esp32-c3-idf.yaml b/tests/components/my9231/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.esp32-c3-idf.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.esp32-c3.yaml b/tests/components/my9231/test.esp32-c3.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.esp32-c3.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.esp32-idf.yaml b/tests/components/my9231/test.esp32-idf.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.esp32-idf.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.esp32.yaml b/tests/components/my9231/test.esp32.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.esp32.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.esp8266.yaml b/tests/components/my9231/test.esp8266.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.esp8266.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.rp2040.yaml b/tests/components/my9231/test.rp2040.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/test.rp2040.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 From 6806cb28f616287a4db61eb18ea1f6206e35a50f Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 22:45:59 -0500 Subject: [PATCH 057/313] Add some components to the new testing framework (O) (#6211) --- tests/components/ota/test.esp32-c3-idf.yaml | 30 +++++++++++++++++++ tests/components/ota/test.esp32-c3.yaml | 30 +++++++++++++++++++ tests/components/ota/test.esp32-idf.yaml | 30 +++++++++++++++++++ tests/components/ota/test.esp32.yaml | 30 +++++++++++++++++++ tests/components/ota/test.esp8266.yaml | 30 +++++++++++++++++++ tests/components/ota/test.rp2040.yaml | 30 +++++++++++++++++++ .../components/output/test.esp32-c3-idf.yaml | 13 ++++++++ tests/components/output/test.esp32-c3.yaml | 13 ++++++++ tests/components/output/test.esp32-idf.yaml | 13 ++++++++ tests/components/output/test.esp32.yaml | 13 ++++++++ tests/components/output/test.esp8266.yaml | 13 ++++++++ tests/components/output/test.rp2040.yaml | 13 ++++++++ 12 files changed, 258 insertions(+) create mode 100644 tests/components/ota/test.esp32-c3-idf.yaml create mode 100644 tests/components/ota/test.esp32-c3.yaml create mode 100644 tests/components/ota/test.esp32-idf.yaml create mode 100644 tests/components/ota/test.esp32.yaml create mode 100644 tests/components/ota/test.esp8266.yaml create mode 100644 tests/components/ota/test.rp2040.yaml create mode 100644 tests/components/output/test.esp32-c3-idf.yaml create mode 100644 tests/components/output/test.esp32-c3.yaml create mode 100644 tests/components/output/test.esp32-idf.yaml create mode 100644 tests/components/output/test.esp32.yaml create mode 100644 tests/components/output/test.esp8266.yaml create mode 100644 tests/components/output/test.rp2040.yaml diff --git a/tests/components/ota/test.esp32-c3-idf.yaml b/tests/components/ota/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.esp32-c3-idf.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.esp32-c3.yaml b/tests/components/ota/test.esp32-c3.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.esp32-c3.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.esp32-idf.yaml b/tests/components/ota/test.esp32-idf.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.esp32-idf.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.esp32.yaml b/tests/components/ota/test.esp32.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.esp32.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.esp8266.yaml b/tests/components/ota/test.esp8266.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.esp8266.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.rp2040.yaml b/tests/components/ota/test.rp2040.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/test.rp2040.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/output/test.esp32-c3-idf.yaml b/tests/components/output/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c56d85c296 --- /dev/null +++ b/tests/components/output/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: ledc + id: light_output_1 + pin: 1 diff --git a/tests/components/output/test.esp32-c3.yaml b/tests/components/output/test.esp32-c3.yaml new file mode 100644 index 0000000000..c56d85c296 --- /dev/null +++ b/tests/components/output/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: ledc + id: light_output_1 + pin: 1 diff --git a/tests/components/output/test.esp32-idf.yaml b/tests/components/output/test.esp32-idf.yaml new file mode 100644 index 0000000000..480f9dfe1f --- /dev/null +++ b/tests/components/output/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: ledc + id: light_output_1 + pin: 12 diff --git a/tests/components/output/test.esp32.yaml b/tests/components/output/test.esp32.yaml new file mode 100644 index 0000000000..480f9dfe1f --- /dev/null +++ b/tests/components/output/test.esp32.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: ledc + id: light_output_1 + pin: 12 diff --git a/tests/components/output/test.esp8266.yaml b/tests/components/output/test.esp8266.yaml new file mode 100644 index 0000000000..d9cb353636 --- /dev/null +++ b/tests/components/output/test.esp8266.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 12 diff --git a/tests/components/output/test.rp2040.yaml b/tests/components/output/test.rp2040.yaml new file mode 100644 index 0000000000..399259fdd9 --- /dev/null +++ b/tests/components/output/test.rp2040.yaml @@ -0,0 +1,13 @@ +esphome: + on_boot: + then: + - output.turn_off: light_output_1 + - output.turn_on: light_output_1 + - output.set_level: + id: light_output_1 + level: 50% + +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 12 From fa8d09aca9dc26befd101df0720d4563dd8c1577 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Apr 2024 16:20:37 +1200 Subject: [PATCH 058/313] [mopeka_std_check] Fix test file indentation (#6610) --- tests/components/mopeka_std_check/test.esp32-c3-idf.yaml | 9 ++++----- tests/components/mopeka_std_check/test.esp32-c3.yaml | 9 ++++----- tests/components/mopeka_std_check/test.esp32-idf.yaml | 9 ++++----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml index 830adf952f..383e2e2a19 100644 --- a/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml +++ b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml @@ -6,11 +6,10 @@ sensor: mac_address: D3:75:F2:DC:16:91 tank_type: Europe_11kg temperature: - name: "Propane test temp" + name: "Propane test temp" level: - name: "Propane test level" + name: "Propane test level" distance: - name: "Propane test distance" + name: "Propane test distance" battery_level: - name: "Propane test battery level" - + name: "Propane test battery level" diff --git a/tests/components/mopeka_std_check/test.esp32-c3.yaml b/tests/components/mopeka_std_check/test.esp32-c3.yaml index 830adf952f..383e2e2a19 100644 --- a/tests/components/mopeka_std_check/test.esp32-c3.yaml +++ b/tests/components/mopeka_std_check/test.esp32-c3.yaml @@ -6,11 +6,10 @@ sensor: mac_address: D3:75:F2:DC:16:91 tank_type: Europe_11kg temperature: - name: "Propane test temp" + name: "Propane test temp" level: - name: "Propane test level" + name: "Propane test level" distance: - name: "Propane test distance" + name: "Propane test distance" battery_level: - name: "Propane test battery level" - + name: "Propane test battery level" diff --git a/tests/components/mopeka_std_check/test.esp32-idf.yaml b/tests/components/mopeka_std_check/test.esp32-idf.yaml index 830adf952f..383e2e2a19 100644 --- a/tests/components/mopeka_std_check/test.esp32-idf.yaml +++ b/tests/components/mopeka_std_check/test.esp32-idf.yaml @@ -6,11 +6,10 @@ sensor: mac_address: D3:75:F2:DC:16:91 tank_type: Europe_11kg temperature: - name: "Propane test temp" + name: "Propane test temp" level: - name: "Propane test level" + name: "Propane test level" distance: - name: "Propane test distance" + name: "Propane test distance" battery_level: - name: "Propane test battery level" - + name: "Propane test battery level" From eb89d99999941a6de6872d3bea01d2ef3c684924 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 23:47:03 -0500 Subject: [PATCH 059/313] Add valve component (#6447) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 1 + esphome/components/api/api.proto | 51 ++++ esphome/components/api/api_connection.cpp | 42 +++ esphome/components/api/api_connection.h | 5 + esphome/components/api/api_pb2.cpp | 247 ++++++++++++++++++ esphome/components/api/api_pb2.h | 57 ++++ esphome/components/api/api_pb2_service.cpp | 42 +++ esphome/components/api/api_pb2_service.h | 15 ++ esphome/components/api/api_server.cpp | 9 + esphome/components/api/api_server.h | 3 + esphome/components/api/list_entities.cpp | 3 + esphome/components/api/list_entities.h | 3 + esphome/components/api/subscribe_state.cpp | 3 + esphome/components/api/subscribe_state.h | 3 + esphome/components/mqtt/__init__.py | 1 + esphome/components/mqtt/mqtt_valve.cpp | 90 +++++++ esphome/components/mqtt/mqtt_valve.h | 41 +++ esphome/components/template/valve/__init__.py | 118 +++++++++ .../template/valve/template_valve.cpp | 131 ++++++++++ .../template/valve/template_valve.h | 60 +++++ esphome/components/valve/__init__.py | 186 +++++++++++++ esphome/components/valve/automation.h | 129 +++++++++ esphome/components/valve/valve.cpp | 179 +++++++++++++ esphome/components/valve/valve.h | 152 +++++++++++ esphome/components/valve/valve_traits.h | 27 ++ .../components/web_server/list_entities.cpp | 9 + esphome/components/web_server/list_entities.h | 3 + esphome/components/web_server/web_server.cpp | 74 ++++++ esphome/components/web_server/web_server.h | 10 + esphome/core/application.h | 19 ++ esphome/core/component_iterator.cpp | 15 ++ esphome/core/component_iterator.h | 6 + esphome/core/controller.cpp | 6 + esphome/core/controller.h | 6 + esphome/core/defines.h | 1 + script/ci-custom.py | 1 + tests/components/template/test.all.yaml | 17 ++ 37 files changed, 1765 insertions(+) create mode 100644 esphome/components/mqtt/mqtt_valve.cpp create mode 100644 esphome/components/mqtt/mqtt_valve.h create mode 100644 esphome/components/template/valve/__init__.py create mode 100644 esphome/components/template/valve/template_valve.cpp create mode 100644 esphome/components/template/valve/template_valve.h create mode 100644 esphome/components/valve/__init__.py create mode 100644 esphome/components/valve/automation.h create mode 100644 esphome/components/valve/valve.cpp create mode 100644 esphome/components/valve/valve.h create mode 100644 esphome/components/valve/valve_traits.h diff --git a/CODEOWNERS b/CODEOWNERS index 9f770d4efc..28ce8e7b6a 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -390,6 +390,7 @@ esphome/components/ufire_ec/* @pvizeli esphome/components/ufire_ise/* @pvizeli esphome/components/ultrasonic/* @OttoWinter esphome/components/uponor_smatrix/* @kroimon +esphome/components/valve/* @esphome/core esphome/components/vbus/* @ssieb esphome/components/veml3235/* @kbx81 esphome/components/veml7700/* @latonita diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index 8d5459e717..12b7ef0958 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -43,6 +43,7 @@ service APIConnection { rpc select_command (SelectCommandRequest) returns (void) {} rpc button_command (ButtonCommandRequest) returns (void) {} rpc lock_command (LockCommandRequest) returns (void) {} + rpc valve_command (ValveCommandRequest) returns (void) {} rpc media_player_command (MediaPlayerCommandRequest) returns (void) {} rpc date_command (DateCommandRequest) returns (void) {} rpc time_command (TimeCommandRequest) returns (void) {} @@ -1700,3 +1701,53 @@ message TimeCommandRequest { uint32 minute = 3; uint32 second = 4; } + + +// ==================== VALVE ==================== +message ListEntitiesValveResponse { + option (id) = 109; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_VALVE"; + + string object_id = 1; + fixed32 key = 2; + string name = 3; + string unique_id = 4; + + string icon = 5; + bool disabled_by_default = 6; + EntityCategory entity_category = 7; + string device_class = 8; + + bool assumed_state = 9; + bool supports_position = 10; + bool supports_stop = 11; +} + +enum ValveOperation { + VALVE_OPERATION_IDLE = 0; + VALVE_OPERATION_IS_OPENING = 1; + VALVE_OPERATION_IS_CLOSING = 2; +} +message ValveStateResponse { + option (id) = 110; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_VALVE"; + option (no_delay) = true; + + fixed32 key = 1; + float position = 2; + ValveOperation current_operation = 3; +} + +message ValveCommandRequest { + option (id) = 111; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VALVE"; + option (no_delay) = true; + + fixed32 key = 1; + bool has_position = 2; + float position = 3; + bool stop = 4; +} diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index e51fa8c154..47136fff98 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -915,6 +915,48 @@ void APIConnection::lock_command(const LockCommandRequest &msg) { } #endif +#ifdef USE_VALVE +bool APIConnection::send_valve_state(valve::Valve *valve) { + if (!this->state_subscription_) + return false; + + ValveStateResponse resp{}; + resp.key = valve->get_object_id_hash(); + resp.position = valve->position; + resp.current_operation = static_cast(valve->current_operation); + return this->send_valve_state_response(resp); +} +bool APIConnection::send_valve_info(valve::Valve *valve) { + auto traits = valve->get_traits(); + ListEntitiesValveResponse msg; + msg.key = valve->get_object_id_hash(); + msg.object_id = valve->get_object_id(); + if (valve->has_own_name()) + msg.name = valve->get_name(); + msg.unique_id = get_default_unique_id("valve", valve); + msg.icon = valve->get_icon(); + msg.disabled_by_default = valve->is_disabled_by_default(); + msg.entity_category = static_cast(valve->get_entity_category()); + msg.device_class = valve->get_device_class(); + msg.assumed_state = traits.get_is_assumed_state(); + msg.supports_position = traits.get_supports_position(); + msg.supports_stop = traits.get_supports_stop(); + return this->send_list_entities_valve_response(msg); +} +void APIConnection::valve_command(const ValveCommandRequest &msg) { + valve::Valve *valve = App.get_valve_by_key(msg.key); + if (valve == nullptr) + return; + + auto call = valve->make_call(); + if (msg.has_position) + call.set_position(msg.position); + if (msg.stop) + call.set_command_stop(); + call.perform(); +} +#endif + #ifdef USE_MEDIA_PLAYER bool APIConnection::send_media_player_state(media_player::MediaPlayer *media_player) { if (!this->state_subscription_) diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index 5c0a78015d..af2dd9e681 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -101,6 +101,11 @@ class APIConnection : public APIServerConnection { bool send_lock_info(lock::Lock *a_lock); void lock_command(const LockCommandRequest &msg) override; #endif +#ifdef USE_VALVE + bool send_valve_state(valve::Valve *valve); + bool send_valve_info(valve::Valve *valve); + void valve_command(const ValveCommandRequest &msg) override; +#endif #ifdef USE_MEDIA_PLAYER bool send_media_player_state(media_player::MediaPlayer *media_player); bool send_media_player_info(media_player::MediaPlayer *media_player); diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 884396bda3..508947ba24 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -537,6 +537,20 @@ template<> const char *proto_enum_to_string(enums::TextMode val } } #endif +#ifdef HAS_PROTO_MESSAGE_DUMP +template<> const char *proto_enum_to_string(enums::ValveOperation value) { + switch (value) { + case enums::VALVE_OPERATION_IDLE: + return "VALVE_OPERATION_IDLE"; + case enums::VALVE_OPERATION_IS_OPENING: + return "VALVE_OPERATION_IS_OPENING"; + case enums::VALVE_OPERATION_IS_CLOSING: + return "VALVE_OPERATION_IS_CLOSING"; + default: + return "UNKNOWN"; + } +} +#endif bool HelloRequest::decode_varint(uint32_t field_id, ProtoVarInt value) { switch (field_id) { case 2: { @@ -7695,6 +7709,239 @@ void TimeCommandRequest::dump_to(std::string &out) const { out.append("}"); } #endif +bool ListEntitiesValveResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 6: { + this->disabled_by_default = value.as_bool(); + return true; + } + case 7: { + this->entity_category = value.as_enum(); + return true; + } + case 9: { + this->assumed_state = value.as_bool(); + return true; + } + case 10: { + this->supports_position = value.as_bool(); + return true; + } + case 11: { + this->supports_stop = value.as_bool(); + return true; + } + default: + return false; + } +} +bool ListEntitiesValveResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { + switch (field_id) { + case 1: { + this->object_id = value.as_string(); + return true; + } + case 3: { + this->name = value.as_string(); + return true; + } + case 4: { + this->unique_id = value.as_string(); + return true; + } + case 5: { + this->icon = value.as_string(); + return true; + } + case 8: { + this->device_class = value.as_string(); + return true; + } + default: + return false; + } +} +bool ListEntitiesValveResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 2: { + this->key = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void ListEntitiesValveResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_string(1, this->object_id); + buffer.encode_fixed32(2, this->key); + buffer.encode_string(3, this->name); + buffer.encode_string(4, this->unique_id); + buffer.encode_string(5, this->icon); + buffer.encode_bool(6, this->disabled_by_default); + buffer.encode_enum(7, this->entity_category); + buffer.encode_string(8, this->device_class); + buffer.encode_bool(9, this->assumed_state); + buffer.encode_bool(10, this->supports_position); + buffer.encode_bool(11, this->supports_stop); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void ListEntitiesValveResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("ListEntitiesValveResponse {\n"); + out.append(" object_id: "); + out.append("'").append(this->object_id).append("'"); + out.append("\n"); + + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" name: "); + out.append("'").append(this->name).append("'"); + out.append("\n"); + + out.append(" unique_id: "); + out.append("'").append(this->unique_id).append("'"); + out.append("\n"); + + out.append(" icon: "); + out.append("'").append(this->icon).append("'"); + out.append("\n"); + + out.append(" disabled_by_default: "); + out.append(YESNO(this->disabled_by_default)); + out.append("\n"); + + out.append(" entity_category: "); + out.append(proto_enum_to_string(this->entity_category)); + out.append("\n"); + + out.append(" device_class: "); + out.append("'").append(this->device_class).append("'"); + out.append("\n"); + + out.append(" assumed_state: "); + out.append(YESNO(this->assumed_state)); + out.append("\n"); + + out.append(" supports_position: "); + out.append(YESNO(this->supports_position)); + out.append("\n"); + + out.append(" supports_stop: "); + out.append(YESNO(this->supports_stop)); + out.append("\n"); + out.append("}"); +} +#endif +bool ValveStateResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 3: { + this->current_operation = value.as_enum(); + return true; + } + default: + return false; + } +} +bool ValveStateResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 1: { + this->key = value.as_fixed32(); + return true; + } + case 2: { + this->position = value.as_float(); + return true; + } + default: + return false; + } +} +void ValveStateResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_fixed32(1, this->key); + buffer.encode_float(2, this->position); + buffer.encode_enum(3, this->current_operation); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void ValveStateResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("ValveStateResponse {\n"); + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" position: "); + sprintf(buffer, "%g", this->position); + out.append(buffer); + out.append("\n"); + + out.append(" current_operation: "); + out.append(proto_enum_to_string(this->current_operation)); + out.append("\n"); + out.append("}"); +} +#endif +bool ValveCommandRequest::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 2: { + this->has_position = value.as_bool(); + return true; + } + case 4: { + this->stop = value.as_bool(); + return true; + } + default: + return false; + } +} +bool ValveCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 1: { + this->key = value.as_fixed32(); + return true; + } + case 3: { + this->position = value.as_float(); + return true; + } + default: + return false; + } +} +void ValveCommandRequest::encode(ProtoWriteBuffer buffer) const { + buffer.encode_fixed32(1, this->key); + buffer.encode_bool(2, this->has_position); + buffer.encode_float(3, this->position); + buffer.encode_bool(4, this->stop); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void ValveCommandRequest::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("ValveCommandRequest {\n"); + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" has_position: "); + out.append(YESNO(this->has_position)); + out.append("\n"); + + out.append(" position: "); + sprintf(buffer, "%g", this->position); + out.append(buffer); + out.append("\n"); + + out.append(" stop: "); + out.append(YESNO(this->stop)); + out.append("\n"); + out.append("}"); +} +#endif } // namespace api } // namespace esphome diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 2ae6fd2bb6..950ffcdc88 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -216,6 +216,11 @@ enum TextMode : uint32_t { TEXT_MODE_TEXT = 0, TEXT_MODE_PASSWORD = 1, }; +enum ValveOperation : uint32_t { + VALVE_OPERATION_IDLE = 0, + VALVE_OPERATION_IS_OPENING = 1, + VALVE_OPERATION_IS_CLOSING = 2, +}; } // namespace enums @@ -1969,6 +1974,58 @@ class TimeCommandRequest : public ProtoMessage { bool decode_32bit(uint32_t field_id, Proto32Bit value) override; bool decode_varint(uint32_t field_id, ProtoVarInt value) override; }; +class ListEntitiesValveResponse : public ProtoMessage { + public: + std::string object_id{}; + uint32_t key{0}; + std::string name{}; + std::string unique_id{}; + std::string icon{}; + bool disabled_by_default{false}; + enums::EntityCategory entity_category{}; + std::string device_class{}; + bool assumed_state{false}; + bool supports_position{false}; + bool supports_stop{false}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; +class ValveStateResponse : public ProtoMessage { + public: + uint32_t key{0}; + float position{0.0f}; + enums::ValveOperation current_operation{}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; +class ValveCommandRequest : public ProtoMessage { + public: + uint32_t key{0}; + bool has_position{false}; + float position{0.0f}; + bool stop{false}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; } // namespace api } // namespace esphome diff --git a/esphome/components/api/api_pb2_service.cpp b/esphome/components/api/api_pb2_service.cpp index 7a97df1ce0..4b8b8cf5ae 100644 --- a/esphome/components/api/api_pb2_service.cpp +++ b/esphome/components/api/api_pb2_service.cpp @@ -557,6 +557,24 @@ bool APIServerConnectionBase::send_time_state_response(const TimeStateResponse & #endif #ifdef USE_DATETIME_TIME #endif +#ifdef USE_VALVE +bool APIServerConnectionBase::send_list_entities_valve_response(const ListEntitiesValveResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_list_entities_valve_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 109); +} +#endif +#ifdef USE_VALVE +bool APIServerConnectionBase::send_valve_state_response(const ValveStateResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_valve_state_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 110); +} +#endif +#ifdef USE_VALVE +#endif bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) { switch (msg_type) { case 1: { @@ -1019,6 +1037,17 @@ bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, ESP_LOGVV(TAG, "on_voice_assistant_audio: %s", msg.dump().c_str()); #endif this->on_voice_assistant_audio(msg); +#endif + break; + } + case 111: { +#ifdef USE_VALVE + ValveCommandRequest msg; + msg.decode(msg_data, msg_size); +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "on_valve_command_request: %s", msg.dump().c_str()); +#endif + this->on_valve_command_request(msg); #endif break; } @@ -1282,6 +1311,19 @@ void APIServerConnection::on_lock_command_request(const LockCommandRequest &msg) this->lock_command(msg); } #endif +#ifdef USE_VALVE +void APIServerConnection::on_valve_command_request(const ValveCommandRequest &msg) { + if (!this->is_connection_setup()) { + this->on_no_setup_connection(); + return; + } + if (!this->is_authenticated()) { + this->on_unauthenticated_access(); + return; + } + this->valve_command(msg); +} +#endif #ifdef USE_MEDIA_PLAYER void APIServerConnection::on_media_player_command_request(const MediaPlayerCommandRequest &msg) { if (!this->is_connection_setup()) { diff --git a/esphome/components/api/api_pb2_service.h b/esphome/components/api/api_pb2_service.h index 095ce51b0f..9f1d711257 100644 --- a/esphome/components/api/api_pb2_service.h +++ b/esphome/components/api/api_pb2_service.h @@ -279,6 +279,15 @@ class APIServerConnectionBase : public ProtoService { #endif #ifdef USE_DATETIME_TIME virtual void on_time_command_request(const TimeCommandRequest &value){}; +#endif +#ifdef USE_VALVE + bool send_list_entities_valve_response(const ListEntitiesValveResponse &msg); +#endif +#ifdef USE_VALVE + bool send_valve_state_response(const ValveStateResponse &msg); +#endif +#ifdef USE_VALVE + virtual void on_valve_command_request(const ValveCommandRequest &value){}; #endif protected: bool read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) override; @@ -331,6 +340,9 @@ class APIServerConnection : public APIServerConnectionBase { #ifdef USE_LOCK virtual void lock_command(const LockCommandRequest &msg) = 0; #endif +#ifdef USE_VALVE + virtual void valve_command(const ValveCommandRequest &msg) = 0; +#endif #ifdef USE_MEDIA_PLAYER virtual void media_player_command(const MediaPlayerCommandRequest &msg) = 0; #endif @@ -423,6 +435,9 @@ class APIServerConnection : public APIServerConnectionBase { #ifdef USE_LOCK void on_lock_command_request(const LockCommandRequest &msg) override; #endif +#ifdef USE_VALVE + void on_valve_command_request(const ValveCommandRequest &msg) override; +#endif #ifdef USE_MEDIA_PLAYER void on_media_player_command_request(const MediaPlayerCommandRequest &msg) override; #endif diff --git a/esphome/components/api/api_server.cpp b/esphome/components/api/api_server.cpp index 4c809126e6..457eeb1229 100644 --- a/esphome/components/api/api_server.cpp +++ b/esphome/components/api/api_server.cpp @@ -300,6 +300,15 @@ void APIServer::on_lock_update(lock::Lock *obj) { } #endif +#ifdef USE_VALVE +void APIServer::on_valve_update(valve::Valve *obj) { + if (obj->is_internal()) + return; + for (auto &c : this->clients_) + c->send_valve_state(obj); +} +#endif + #ifdef USE_MEDIA_PLAYER void APIServer::on_media_player_update(media_player::MediaPlayer *obj) { if (obj->is_internal()) diff --git a/esphome/components/api/api_server.h b/esphome/components/api/api_server.h index 8a9c26af73..d64643b961 100644 --- a/esphome/components/api/api_server.h +++ b/esphome/components/api/api_server.h @@ -81,6 +81,9 @@ class APIServer : public Component, public Controller { #ifdef USE_LOCK void on_lock_update(lock::Lock *obj) override; #endif +#ifdef USE_VALVE + void on_valve_update(valve::Valve *obj) override; +#endif #ifdef USE_MEDIA_PLAYER void on_media_player_update(media_player::MediaPlayer *obj) override; #endif diff --git a/esphome/components/api/list_entities.cpp b/esphome/components/api/list_entities.cpp index 18685ee4d1..d6ff8e5557 100644 --- a/esphome/components/api/list_entities.cpp +++ b/esphome/components/api/list_entities.cpp @@ -38,6 +38,9 @@ bool ListEntitiesIterator::on_text_sensor(text_sensor::TextSensor *text_sensor) #ifdef USE_LOCK bool ListEntitiesIterator::on_lock(lock::Lock *a_lock) { return this->client_->send_lock_info(a_lock); } #endif +#ifdef USE_VALVE +bool ListEntitiesIterator::on_valve(valve::Valve *valve) { return this->client_->send_valve_info(valve); } +#endif bool ListEntitiesIterator::on_end() { return this->client_->send_list_info_done(); } ListEntitiesIterator::ListEntitiesIterator(APIConnection *client) : client_(client) {} diff --git a/esphome/components/api/list_entities.h b/esphome/components/api/list_entities.h index 95a09fc25b..5d0c243f4a 100644 --- a/esphome/components/api/list_entities.h +++ b/esphome/components/api/list_entities.h @@ -61,6 +61,9 @@ class ListEntitiesIterator : public ComponentIterator { #ifdef USE_LOCK bool on_lock(lock::Lock *a_lock) override; #endif +#ifdef USE_VALVE + bool on_valve(valve::Valve *valve) override; +#endif #ifdef USE_MEDIA_PLAYER bool on_media_player(media_player::MediaPlayer *media_player) override; #endif diff --git a/esphome/components/api/subscribe_state.cpp b/esphome/components/api/subscribe_state.cpp index 5eb40cfa7e..7aa8e8ffac 100644 --- a/esphome/components/api/subscribe_state.cpp +++ b/esphome/components/api/subscribe_state.cpp @@ -59,6 +59,9 @@ bool InitialStateIterator::on_select(select::Select *select) { #ifdef USE_LOCK bool InitialStateIterator::on_lock(lock::Lock *a_lock) { return this->client_->send_lock_state(a_lock, a_lock->state); } #endif +#ifdef USE_VALVE +bool InitialStateIterator::on_valve(valve::Valve *valve) { return this->client_->send_valve_state(valve); } +#endif #ifdef USE_MEDIA_PLAYER bool InitialStateIterator::on_media_player(media_player::MediaPlayer *media_player) { return this->client_->send_media_player_state(media_player); diff --git a/esphome/components/api/subscribe_state.h b/esphome/components/api/subscribe_state.h index 447f1707d2..8d50e0d89a 100644 --- a/esphome/components/api/subscribe_state.h +++ b/esphome/components/api/subscribe_state.h @@ -58,6 +58,9 @@ class InitialStateIterator : public ComponentIterator { #ifdef USE_LOCK bool on_lock(lock::Lock *a_lock) override; #endif +#ifdef USE_VALVE + bool on_valve(valve::Valve *valve) override; +#endif #ifdef USE_MEDIA_PLAYER bool on_media_player(media_player::MediaPlayer *media_player) override; #endif diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index b2c03c1546..72ee81dbbc 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -119,6 +119,7 @@ MQTTTextComponent = mqtt_ns.class_("MQTTTextComponent", MQTTComponent) MQTTSelectComponent = mqtt_ns.class_("MQTTSelectComponent", MQTTComponent) MQTTButtonComponent = mqtt_ns.class_("MQTTButtonComponent", MQTTComponent) MQTTLockComponent = mqtt_ns.class_("MQTTLockComponent", MQTTComponent) +MQTTValveComponent = mqtt_ns.class_("MQTTValveComponent", MQTTComponent) MQTTDiscoveryUniqueIdGenerator = mqtt_ns.enum("MQTTDiscoveryUniqueIdGenerator") MQTT_DISCOVERY_UNIQUE_ID_GENERATOR_OPTIONS = { diff --git a/esphome/components/mqtt/mqtt_valve.cpp b/esphome/components/mqtt/mqtt_valve.cpp new file mode 100644 index 0000000000..07eeca08d6 --- /dev/null +++ b/esphome/components/mqtt/mqtt_valve.cpp @@ -0,0 +1,90 @@ +#include "mqtt_valve.h" +#include "esphome/core/log.h" + +#include "mqtt_const.h" + +#ifdef USE_MQTT +#ifdef USE_VALVE + +namespace esphome { +namespace mqtt { + +static const char *const TAG = "mqtt.valve"; + +using namespace esphome::valve; + +MQTTValveComponent::MQTTValveComponent(Valve *valve) : valve_(valve) {} +void MQTTValveComponent::setup() { + auto traits = this->valve_->get_traits(); + this->valve_->add_on_state_callback([this]() { this->publish_state(); }); + this->subscribe(this->get_command_topic_(), [this](const std::string &topic, const std::string &payload) { + auto call = this->valve_->make_call(); + call.set_command(payload.c_str()); + call.perform(); + }); + if (traits.get_supports_position()) { + this->subscribe(this->get_position_command_topic(), [this](const std::string &topic, const std::string &payload) { + auto value = parse_number(payload); + if (!value.has_value()) { + ESP_LOGW(TAG, "Invalid position value: '%s'", payload.c_str()); + return; + } + auto call = this->valve_->make_call(); + call.set_position(*value / 100.0f); + call.perform(); + }); + } +} + +void MQTTValveComponent::dump_config() { + ESP_LOGCONFIG(TAG, "MQTT valve '%s':", this->valve_->get_name().c_str()); + auto traits = this->valve_->get_traits(); + bool has_command_topic = traits.get_supports_position(); + LOG_MQTT_COMPONENT(true, has_command_topic) + if (traits.get_supports_position()) { + ESP_LOGCONFIG(TAG, " Position State Topic: '%s'", this->get_position_state_topic().c_str()); + ESP_LOGCONFIG(TAG, " Position Command Topic: '%s'", this->get_position_command_topic().c_str()); + } +} +void MQTTValveComponent::send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) { + if (!this->valve_->get_device_class().empty()) + root[MQTT_DEVICE_CLASS] = this->valve_->get_device_class(); + + auto traits = this->valve_->get_traits(); + if (traits.get_is_assumed_state()) { + root[MQTT_OPTIMISTIC] = true; + } + if (traits.get_supports_position()) { + root[MQTT_POSITION_TOPIC] = this->get_position_state_topic(); + root[MQTT_SET_POSITION_TOPIC] = this->get_position_command_topic(); + } +} + +std::string MQTTValveComponent::component_type() const { return "valve"; } +const EntityBase *MQTTValveComponent::get_entity() const { return this->valve_; } + +bool MQTTValveComponent::send_initial_state() { return this->publish_state(); } +bool MQTTValveComponent::publish_state() { + auto traits = this->valve_->get_traits(); + bool success = true; + if (traits.get_supports_position()) { + std::string pos = value_accuracy_to_string(roundf(this->valve_->position * 100), 0); + if (!this->publish(this->get_position_state_topic(), pos)) + success = false; + } + const char *state_s = this->valve_->current_operation == VALVE_OPERATION_OPENING ? "opening" + : this->valve_->current_operation == VALVE_OPERATION_CLOSING ? "closing" + : this->valve_->position == VALVE_CLOSED ? "closed" + : this->valve_->position == VALVE_OPEN ? "open" + : traits.get_supports_position() ? "open" + : "unknown"; + if (!this->publish(this->get_state_topic_(), state_s)) + success = false; + return success; +} + +} // namespace mqtt +} // namespace esphome + +#endif +#endif // USE_MQTT diff --git a/esphome/components/mqtt/mqtt_valve.h b/esphome/components/mqtt/mqtt_valve.h new file mode 100644 index 0000000000..63a0462193 --- /dev/null +++ b/esphome/components/mqtt/mqtt_valve.h @@ -0,0 +1,41 @@ +#pragma once + +#include "esphome/core/defines.h" +#include "mqtt_component.h" + +#ifdef USE_MQTT +#ifdef USE_VALVE + +#include "esphome/components/valve/valve.h" + +namespace esphome { +namespace mqtt { + +class MQTTValveComponent : public mqtt::MQTTComponent { + public: + explicit MQTTValveComponent(valve::Valve *valve); + + void setup() override; + void send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) override; + + MQTT_COMPONENT_CUSTOM_TOPIC(position, command) + MQTT_COMPONENT_CUSTOM_TOPIC(position, state) + + bool send_initial_state() override; + + bool publish_state(); + + void dump_config() override; + + protected: + std::string component_type() const override; + const EntityBase *get_entity() const override; + + valve::Valve *valve_; +}; + +} // namespace mqtt +} // namespace esphome + +#endif +#endif // USE_MQTT diff --git a/esphome/components/template/valve/__init__.py b/esphome/components/template/valve/__init__.py new file mode 100644 index 0000000000..89d776dfdd --- /dev/null +++ b/esphome/components/template/valve/__init__.py @@ -0,0 +1,118 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import automation +from esphome.components import valve +from esphome.const import ( + CONF_ASSUMED_STATE, + CONF_CLOSE_ACTION, + CONF_CURRENT_OPERATION, + CONF_ID, + CONF_LAMBDA, + CONF_OPEN_ACTION, + CONF_OPTIMISTIC, + CONF_POSITION, + CONF_POSITION_ACTION, + CONF_RESTORE_MODE, + CONF_STATE, + CONF_STOP_ACTION, +) +from .. import template_ns + +TemplateValve = template_ns.class_("TemplateValve", valve.Valve, cg.Component) + +TemplateValveRestoreMode = template_ns.enum("TemplateValveRestoreMode") +RESTORE_MODES = { + "NO_RESTORE": TemplateValveRestoreMode.VALVE_NO_RESTORE, + "RESTORE": TemplateValveRestoreMode.VALVE_RESTORE, + "RESTORE_AND_CALL": TemplateValveRestoreMode.VALVE_RESTORE_AND_CALL, +} + +CONF_HAS_POSITION = "has_position" +CONF_TOGGLE_ACTION = "toggle_action" + +CONFIG_SCHEMA = valve.VALVE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(TemplateValve), + cv.Optional(CONF_LAMBDA): cv.returning_lambda, + cv.Optional(CONF_OPTIMISTIC, default=False): cv.boolean, + cv.Optional(CONF_ASSUMED_STATE, default=False): cv.boolean, + cv.Optional(CONF_HAS_POSITION, default=False): cv.boolean, + cv.Optional(CONF_OPEN_ACTION): automation.validate_automation(single=True), + cv.Optional(CONF_CLOSE_ACTION): automation.validate_automation(single=True), + cv.Optional(CONF_STOP_ACTION): automation.validate_automation(single=True), + cv.Optional(CONF_TOGGLE_ACTION): automation.validate_automation(single=True), + cv.Optional(CONF_POSITION_ACTION): automation.validate_automation(single=True), + cv.Optional(CONF_RESTORE_MODE, default="NO_RESTORE"): cv.enum( + RESTORE_MODES, upper=True + ), + } +).extend(cv.COMPONENT_SCHEMA) + + +async def to_code(config): + var = await valve.new_valve(config) + await cg.register_component(var, config) + if lambda_config := config.get(CONF_LAMBDA): + template_ = await cg.process_lambda( + lambda_config, [], return_type=cg.optional.template(float) + ) + cg.add(var.set_state_lambda(template_)) + if open_action_config := config.get(CONF_OPEN_ACTION): + await automation.build_automation( + var.get_open_trigger(), [], open_action_config + ) + if close_action_config := config.get(CONF_CLOSE_ACTION): + await automation.build_automation( + var.get_close_trigger(), [], close_action_config + ) + if stop_action_config := config.get(CONF_STOP_ACTION): + await automation.build_automation( + var.get_stop_trigger(), [], stop_action_config + ) + cg.add(var.set_has_stop(True)) + if toggle_action_config := config.get(CONF_TOGGLE_ACTION): + await automation.build_automation( + var.get_toggle_trigger(), [], toggle_action_config + ) + cg.add(var.set_has_toggle(True)) + if position_action_config := config.get(CONF_POSITION_ACTION): + await automation.build_automation( + var.get_position_trigger(), [(float, "pos")], position_action_config + ) + cg.add(var.set_has_position(True)) + else: + cg.add(var.set_has_position(config[CONF_HAS_POSITION])) + cg.add(var.set_optimistic(config[CONF_OPTIMISTIC])) + cg.add(var.set_assumed_state(config[CONF_ASSUMED_STATE])) + cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE])) + + +@automation.register_action( + "valve.template.publish", + valve.ValvePublishAction, + cv.Schema( + { + cv.Required(CONF_ID): cv.use_id(valve.Valve), + cv.Exclusive(CONF_STATE, "pos"): cv.templatable(valve.validate_valve_state), + cv.Exclusive(CONF_POSITION, "pos"): cv.templatable(cv.percentage), + cv.Optional(CONF_CURRENT_OPERATION): cv.templatable( + valve.validate_valve_operation + ), + } + ), +) +async def valve_template_publish_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + var = cg.new_Pvariable(action_id, template_arg, paren) + if state_config := config.get(CONF_STATE): + template_ = await cg.templatable(state_config, args, float) + cg.add(var.set_position(template_)) + if (position_config := config.get(CONF_POSITION)) is not None: + template_ = await cg.templatable(position_config, args, float) + cg.add(var.set_position(template_)) + if current_operation_config := config.get(CONF_CURRENT_OPERATION): + template_ = await cg.templatable( + current_operation_config, args, valve.ValveOperation + ) + cg.add(var.set_current_operation(template_)) + return var diff --git a/esphome/components/template/valve/template_valve.cpp b/esphome/components/template/valve/template_valve.cpp new file mode 100644 index 0000000000..f943e19da9 --- /dev/null +++ b/esphome/components/template/valve/template_valve.cpp @@ -0,0 +1,131 @@ +#include "template_valve.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace template_ { + +using namespace esphome::valve; + +static const char *const TAG = "template.valve"; + +TemplateValve::TemplateValve() + : open_trigger_(new Trigger<>()), + close_trigger_(new Trigger<>), + stop_trigger_(new Trigger<>()), + toggle_trigger_(new Trigger<>()), + position_trigger_(new Trigger()) {} + +void TemplateValve::setup() { + ESP_LOGCONFIG(TAG, "Setting up template valve '%s'...", this->name_.c_str()); + switch (this->restore_mode_) { + case VALVE_NO_RESTORE: + break; + case VALVE_RESTORE: { + auto restore = this->restore_state_(); + if (restore.has_value()) + restore->apply(this); + break; + } + case VALVE_RESTORE_AND_CALL: { + auto restore = this->restore_state_(); + if (restore.has_value()) { + restore->to_call(this).perform(); + } + break; + } + } +} + +void TemplateValve::loop() { + bool changed = false; + + if (this->state_f_.has_value()) { + auto s = (*this->state_f_)(); + if (s.has_value()) { + auto pos = clamp(*s, 0.0f, 1.0f); + if (pos != this->position) { + this->position = pos; + changed = true; + } + } + } + + if (changed) + this->publish_state(); +} + +void TemplateValve::set_optimistic(bool optimistic) { this->optimistic_ = optimistic; } +void TemplateValve::set_assumed_state(bool assumed_state) { this->assumed_state_ = assumed_state; } +void TemplateValve::set_state_lambda(std::function()> &&f) { this->state_f_ = f; } +float TemplateValve::get_setup_priority() const { return setup_priority::HARDWARE; } + +Trigger<> *TemplateValve::get_open_trigger() const { return this->open_trigger_; } +Trigger<> *TemplateValve::get_close_trigger() const { return this->close_trigger_; } +Trigger<> *TemplateValve::get_stop_trigger() const { return this->stop_trigger_; } +Trigger<> *TemplateValve::get_toggle_trigger() const { return this->toggle_trigger_; } + +void TemplateValve::dump_config() { + LOG_VALVE("", "Template Valve", this); + ESP_LOGCONFIG(TAG, " Has position: %s", YESNO(this->has_position_)); + ESP_LOGCONFIG(TAG, " Optimistic: %s", YESNO(this->optimistic_)); +} + +void TemplateValve::control(const ValveCall &call) { + if (call.get_stop()) { + this->stop_prev_trigger_(); + this->stop_trigger_->trigger(); + this->prev_command_trigger_ = this->stop_trigger_; + this->publish_state(); + } + if (call.get_toggle().has_value()) { + this->stop_prev_trigger_(); + this->toggle_trigger_->trigger(); + this->prev_command_trigger_ = this->toggle_trigger_; + this->publish_state(); + } + if (call.get_position().has_value()) { + auto pos = *call.get_position(); + this->stop_prev_trigger_(); + + if (pos == VALVE_OPEN) { + this->open_trigger_->trigger(); + this->prev_command_trigger_ = this->open_trigger_; + } else if (pos == VALVE_CLOSED) { + this->close_trigger_->trigger(); + this->prev_command_trigger_ = this->close_trigger_; + } else { + this->position_trigger_->trigger(pos); + } + + if (this->optimistic_) { + this->position = pos; + } + } + + this->publish_state(); +} + +ValveTraits TemplateValve::get_traits() { + auto traits = ValveTraits(); + traits.set_is_assumed_state(this->assumed_state_); + traits.set_supports_stop(this->has_stop_); + traits.set_supports_toggle(this->has_toggle_); + traits.set_supports_position(this->has_position_); + return traits; +} + +Trigger *TemplateValve::get_position_trigger() const { return this->position_trigger_; } + +void TemplateValve::set_has_stop(bool has_stop) { this->has_stop_ = has_stop; } +void TemplateValve::set_has_toggle(bool has_toggle) { this->has_toggle_ = has_toggle; } +void TemplateValve::set_has_position(bool has_position) { this->has_position_ = has_position; } + +void TemplateValve::stop_prev_trigger_() { + if (this->prev_command_trigger_ != nullptr) { + this->prev_command_trigger_->stop_action(); + this->prev_command_trigger_ = nullptr; + } +} + +} // namespace template_ +} // namespace esphome diff --git a/esphome/components/template/valve/template_valve.h b/esphome/components/template/valve/template_valve.h new file mode 100644 index 0000000000..5e3fb6aff3 --- /dev/null +++ b/esphome/components/template/valve/template_valve.h @@ -0,0 +1,60 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/automation.h" +#include "esphome/components/valve/valve.h" + +namespace esphome { +namespace template_ { + +enum TemplateValveRestoreMode { + VALVE_NO_RESTORE, + VALVE_RESTORE, + VALVE_RESTORE_AND_CALL, +}; + +class TemplateValve : public valve::Valve, public Component { + public: + TemplateValve(); + + void set_state_lambda(std::function()> &&f); + Trigger<> *get_open_trigger() const; + Trigger<> *get_close_trigger() const; + Trigger<> *get_stop_trigger() const; + Trigger<> *get_toggle_trigger() const; + Trigger *get_position_trigger() const; + void set_optimistic(bool optimistic); + void set_assumed_state(bool assumed_state); + void set_has_stop(bool has_stop); + void set_has_position(bool has_position); + void set_has_toggle(bool has_toggle); + void set_restore_mode(TemplateValveRestoreMode restore_mode) { restore_mode_ = restore_mode; } + + void setup() override; + void loop() override; + void dump_config() override; + + float get_setup_priority() const override; + + protected: + void control(const valve::ValveCall &call) override; + valve::ValveTraits get_traits() override; + void stop_prev_trigger_(); + + TemplateValveRestoreMode restore_mode_{VALVE_NO_RESTORE}; + optional()>> state_f_; + bool assumed_state_{false}; + bool optimistic_{false}; + Trigger<> *open_trigger_; + Trigger<> *close_trigger_; + bool has_stop_{false}; + bool has_toggle_{false}; + Trigger<> *stop_trigger_; + Trigger<> *toggle_trigger_; + Trigger<> *prev_command_trigger_{nullptr}; + Trigger *position_trigger_; + bool has_position_{false}; +}; + +} // namespace template_ +} // namespace esphome diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py new file mode 100644 index 0000000000..22d617cc36 --- /dev/null +++ b/esphome/components/valve/__init__.py @@ -0,0 +1,186 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import automation +from esphome.automation import maybe_simple_id, Condition +from esphome.components import mqtt +from esphome.const import ( + CONF_DEVICE_CLASS, + CONF_ID, + CONF_MQTT_ID, + CONF_ON_OPEN, + CONF_POSITION, + CONF_POSITION_COMMAND_TOPIC, + CONF_POSITION_STATE_TOPIC, + CONF_STATE, + CONF_STOP, + CONF_TRIGGER_ID, +) +from esphome.core import CORE, coroutine_with_priority +from esphome.cpp_helpers import setup_entity + +IS_PLATFORM_COMPONENT = True + +CODEOWNERS = ["@esphome/core"] + +valve_ns = cg.esphome_ns.namespace("valve") + +Valve = valve_ns.class_("Valve", cg.EntityBase) + +VALVE_OPEN = valve_ns.VALVE_OPEN +VALVE_CLOSED = valve_ns.VALVE_CLOSED + +VALVE_STATES = { + "OPEN": VALVE_OPEN, + "CLOSED": VALVE_CLOSED, +} +validate_valve_state = cv.enum(VALVE_STATES, upper=True) + +ValveOperation = valve_ns.enum("ValveOperation") +VALVE_OPERATIONS = { + "IDLE": ValveOperation.VALVE_OPERATION_IDLE, + "OPENING": ValveOperation.VALVE_OPERATION_OPENING, + "CLOSING": ValveOperation.VALVE_OPERATION_CLOSING, +} +validate_valve_operation = cv.enum(VALVE_OPERATIONS, upper=True) + +# Actions +OpenAction = valve_ns.class_("OpenAction", automation.Action) +CloseAction = valve_ns.class_("CloseAction", automation.Action) +StopAction = valve_ns.class_("StopAction", automation.Action) +ToggleAction = valve_ns.class_("ToggleAction", automation.Action) +ControlAction = valve_ns.class_("ControlAction", automation.Action) +ValvePublishAction = valve_ns.class_("ValvePublishAction", automation.Action) +ValveIsOpenCondition = valve_ns.class_("ValveIsOpenCondition", Condition) +ValveIsClosedCondition = valve_ns.class_("ValveIsClosedCondition", Condition) + +# Triggers +ValveOpenTrigger = valve_ns.class_("ValveOpenTrigger", automation.Trigger.template()) +ValveClosedTrigger = valve_ns.class_( + "ValveClosedTrigger", automation.Trigger.template() +) + +CONF_ON_CLOSED = "on_closed" + +VALVE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( + { + cv.GenerateID(): cv.declare_id(Valve), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTValveComponent), + cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_ON_OPEN): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveOpenTrigger), + } + ), + cv.Optional(CONF_ON_CLOSED): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveClosedTrigger), + } + ), + } +) + + +async def setup_valve_core_(var, config): + await setup_entity(var, config) + + if device_class_config := config.get(CONF_DEVICE_CLASS): + cg.add(var.set_device_class(device_class_config)) + + for conf in config.get(CONF_ON_OPEN, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) + for conf in config.get(CONF_ON_CLOSED, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) + + if mqtt_id_config := config.get(CONF_MQTT_ID): + mqtt_ = cg.new_Pvariable(mqtt_id_config, var) + await mqtt.register_mqtt_component(mqtt_, config) + + if position_state_topic_config := config.get(CONF_POSITION_STATE_TOPIC): + cg.add(mqtt_.set_custom_position_state_topic(position_state_topic_config)) + if position_command_topic_config := config.get(CONF_POSITION_COMMAND_TOPIC): + cg.add( + mqtt_.set_custom_position_command_topic(position_command_topic_config) + ) + + +async def register_valve(var, config): + if not CORE.has_id(config[CONF_ID]): + var = cg.Pvariable(config[CONF_ID], var) + cg.add(cg.App.register_valve(var)) + await setup_valve_core_(var, config) + + +async def new_valve(config, *args): + var = cg.new_Pvariable(config[CONF_ID], *args) + await register_valve(var, config) + return var + + +VALVE_ACTION_SCHEMA = maybe_simple_id( + { + cv.Required(CONF_ID): cv.use_id(Valve), + } +) + + +@automation.register_action("valve.open", OpenAction, VALVE_ACTION_SCHEMA) +async def valve_open_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + return cg.new_Pvariable(action_id, template_arg, paren) + + +@automation.register_action("valve.close", CloseAction, VALVE_ACTION_SCHEMA) +async def valve_close_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + return cg.new_Pvariable(action_id, template_arg, paren) + + +@automation.register_action("valve.stop", StopAction, VALVE_ACTION_SCHEMA) +async def valve_stop_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + return cg.new_Pvariable(action_id, template_arg, paren) + + +@automation.register_action("valve.toggle", ToggleAction, VALVE_ACTION_SCHEMA) +def valve_toggle_to_code(config, action_id, template_arg, args): + paren = yield cg.get_variable(config[CONF_ID]) + yield cg.new_Pvariable(action_id, template_arg, paren) + + +VALVE_CONTROL_ACTION_SCHEMA = cv.Schema( + { + cv.Required(CONF_ID): cv.use_id(Valve), + cv.Optional(CONF_STOP): cv.templatable(cv.boolean), + cv.Exclusive(CONF_STATE, "pos"): cv.templatable(validate_valve_state), + cv.Exclusive(CONF_POSITION, "pos"): cv.templatable(cv.percentage), + } +) + + +@automation.register_action("valve.control", ControlAction, VALVE_CONTROL_ACTION_SCHEMA) +async def valve_control_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + var = cg.new_Pvariable(action_id, template_arg, paren) + if stop_config := config.get(CONF_STOP): + template_ = await cg.templatable(stop_config, args, bool) + cg.add(var.set_stop(template_)) + if state_config := config.get(CONF_STATE): + template_ = await cg.templatable(state_config, args, float) + cg.add(var.set_position(template_)) + if (position_config := config.get(CONF_POSITION)) is not None: + template_ = await cg.templatable(position_config, args, float) + cg.add(var.set_position(template_)) + return var + + +@coroutine_with_priority(100.0) +async def to_code(config): + cg.add_define("USE_VALVE") + cg.add_global(valve_ns.using) diff --git a/esphome/components/valve/automation.h b/esphome/components/valve/automation.h new file mode 100644 index 0000000000..24c94a5570 --- /dev/null +++ b/esphome/components/valve/automation.h @@ -0,0 +1,129 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/automation.h" +#include "valve.h" + +namespace esphome { +namespace valve { + +template class OpenAction : public Action { + public: + explicit OpenAction(Valve *valve) : valve_(valve) {} + + void play(Ts... x) override { this->valve_->make_call().set_command_open().perform(); } + + protected: + Valve *valve_; +}; + +template class CloseAction : public Action { + public: + explicit CloseAction(Valve *valve) : valve_(valve) {} + + void play(Ts... x) override { this->valve_->make_call().set_command_close().perform(); } + + protected: + Valve *valve_; +}; + +template class StopAction : public Action { + public: + explicit StopAction(Valve *valve) : valve_(valve) {} + + void play(Ts... x) override { this->valve_->make_call().set_command_stop().perform(); } + + protected: + Valve *valve_; +}; + +template class ToggleAction : public Action { + public: + explicit ToggleAction(Valve *valve) : valve_(valve) {} + + void play(Ts... x) override { this->valve_->make_call().set_command_toggle().perform(); } + + protected: + Valve *valve_; +}; + +template class ControlAction : public Action { + public: + explicit ControlAction(Valve *valve) : valve_(valve) {} + + TEMPLATABLE_VALUE(bool, stop) + TEMPLATABLE_VALUE(float, position) + + void play(Ts... x) override { + auto call = this->valve_->make_call(); + if (this->stop_.has_value()) + call.set_stop(this->stop_.value(x...)); + if (this->position_.has_value()) + call.set_position(this->position_.value(x...)); + call.perform(); + } + + protected: + Valve *valve_; +}; + +template class ValvePublishAction : public Action { + public: + ValvePublishAction(Valve *valve) : valve_(valve) {} + TEMPLATABLE_VALUE(float, position) + TEMPLATABLE_VALUE(ValveOperation, current_operation) + + void play(Ts... x) override { + if (this->position_.has_value()) + this->valve_->position = this->position_.value(x...); + if (this->current_operation_.has_value()) + this->valve_->current_operation = this->current_operation_.value(x...); + this->valve_->publish_state(); + } + + protected: + Valve *valve_; +}; + +template class ValveIsOpenCondition : public Condition { + public: + ValveIsOpenCondition(Valve *valve) : valve_(valve) {} + bool check(Ts... x) override { return this->valve_->is_fully_open(); } + + protected: + Valve *valve_; +}; + +template class ValveIsClosedCondition : public Condition { + public: + ValveIsClosedCondition(Valve *valve) : valve_(valve) {} + bool check(Ts... x) override { return this->valve_->is_fully_closed(); } + + protected: + Valve *valve_; +}; + +class ValveOpenTrigger : public Trigger<> { + public: + ValveOpenTrigger(Valve *a_valve) { + a_valve->add_on_state_callback([this, a_valve]() { + if (a_valve->is_fully_open()) { + this->trigger(); + } + }); + } +}; + +class ValveClosedTrigger : public Trigger<> { + public: + ValveClosedTrigger(Valve *a_valve) { + a_valve->add_on_state_callback([this, a_valve]() { + if (a_valve->is_fully_closed()) { + this->trigger(); + } + }); + } +}; + +} // namespace valve +} // namespace esphome diff --git a/esphome/components/valve/valve.cpp b/esphome/components/valve/valve.cpp new file mode 100644 index 0000000000..d1ec17945a --- /dev/null +++ b/esphome/components/valve/valve.cpp @@ -0,0 +1,179 @@ +#include "valve.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace valve { + +static const char *const TAG = "valve"; + +const float VALVE_OPEN = 1.0f; +const float VALVE_CLOSED = 0.0f; + +const char *valve_command_to_str(float pos) { + if (pos == VALVE_OPEN) { + return "OPEN"; + } else if (pos == VALVE_CLOSED) { + return "CLOSE"; + } else { + return "UNKNOWN"; + } +} +const char *valve_operation_to_str(ValveOperation op) { + switch (op) { + case VALVE_OPERATION_IDLE: + return "IDLE"; + case VALVE_OPERATION_OPENING: + return "OPENING"; + case VALVE_OPERATION_CLOSING: + return "CLOSING"; + default: + return "UNKNOWN"; + } +} + +Valve::Valve() : position{VALVE_OPEN} {} + +ValveCall::ValveCall(Valve *parent) : parent_(parent) {} +ValveCall &ValveCall::set_command(const char *command) { + if (strcasecmp(command, "OPEN") == 0) { + this->set_command_open(); + } else if (strcasecmp(command, "CLOSE") == 0) { + this->set_command_close(); + } else if (strcasecmp(command, "STOP") == 0) { + this->set_command_stop(); + } else if (strcasecmp(command, "TOGGLE") == 0) { + this->set_command_toggle(); + } else { + ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command); + } + return *this; +} +ValveCall &ValveCall::set_command_open() { + this->position_ = VALVE_OPEN; + return *this; +} +ValveCall &ValveCall::set_command_close() { + this->position_ = VALVE_CLOSED; + return *this; +} +ValveCall &ValveCall::set_command_stop() { + this->stop_ = true; + return *this; +} +ValveCall &ValveCall::set_command_toggle() { + this->toggle_ = true; + return *this; +} +ValveCall &ValveCall::set_position(float position) { + this->position_ = position; + return *this; +} +void ValveCall::perform() { + ESP_LOGD(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + auto traits = this->parent_->get_traits(); + this->validate_(); + if (this->stop_) { + ESP_LOGD(TAG, " Command: STOP"); + } + if (this->position_.has_value()) { + if (traits.get_supports_position()) { + ESP_LOGD(TAG, " Position: %.0f%%", *this->position_ * 100.0f); + } else { + ESP_LOGD(TAG, " Command: %s", valve_command_to_str(*this->position_)); + } + } + if (this->toggle_.has_value()) { + ESP_LOGD(TAG, " Command: TOGGLE"); + } + this->parent_->control(*this); +} +const optional &ValveCall::get_position() const { return this->position_; } +const optional &ValveCall::get_toggle() const { return this->toggle_; } +void ValveCall::validate_() { + auto traits = this->parent_->get_traits(); + if (this->position_.has_value()) { + auto pos = *this->position_; + if (!traits.get_supports_position() && pos != VALVE_OPEN && pos != VALVE_CLOSED) { + ESP_LOGW(TAG, "'%s' - This valve device does not support setting position!", this->parent_->get_name().c_str()); + this->position_.reset(); + } else if (pos < 0.0f || pos > 1.0f) { + ESP_LOGW(TAG, "'%s' - Position %.2f is out of range [0.0 - 1.0]", this->parent_->get_name().c_str(), pos); + this->position_ = clamp(pos, 0.0f, 1.0f); + } + } + if (this->toggle_.has_value()) { + if (!traits.get_supports_toggle()) { + ESP_LOGW(TAG, "'%s' - This valve device does not support toggle!", this->parent_->get_name().c_str()); + this->toggle_.reset(); + } + } + if (this->stop_) { + if (this->position_.has_value()) { + ESP_LOGW(TAG, "Cannot set position when stopping a valve!"); + this->position_.reset(); + } + if (this->toggle_.has_value()) { + ESP_LOGW(TAG, "Cannot set toggle when stopping a valve!"); + this->toggle_.reset(); + } + } +} +ValveCall &ValveCall::set_stop(bool stop) { + this->stop_ = stop; + return *this; +} +bool ValveCall::get_stop() const { return this->stop_; } + +ValveCall Valve::make_call() { return {this}; } + +void Valve::add_on_state_callback(std::function &&f) { this->state_callback_.add(std::move(f)); } +void Valve::publish_state(bool save) { + this->position = clamp(this->position, 0.0f, 1.0f); + + ESP_LOGD(TAG, "'%s' - Publishing:", this->name_.c_str()); + auto traits = this->get_traits(); + if (traits.get_supports_position()) { + ESP_LOGD(TAG, " Position: %.0f%%", this->position * 100.0f); + } else { + if (this->position == VALVE_OPEN) { + ESP_LOGD(TAG, " State: OPEN"); + } else if (this->position == VALVE_CLOSED) { + ESP_LOGD(TAG, " State: CLOSED"); + } else { + ESP_LOGD(TAG, " State: UNKNOWN"); + } + } + ESP_LOGD(TAG, " Current Operation: %s", valve_operation_to_str(this->current_operation)); + + this->state_callback_.call(); + + if (save) { + ValveRestoreState restore{}; + memset(&restore, 0, sizeof(restore)); + restore.position = this->position; + this->rtc_.save(&restore); + } +} +optional Valve::restore_state_() { + this->rtc_ = global_preferences->make_preference(this->get_object_id_hash()); + ValveRestoreState recovered{}; + if (!this->rtc_.load(&recovered)) + return {}; + return recovered; +} + +bool Valve::is_fully_open() const { return this->position == VALVE_OPEN; } +bool Valve::is_fully_closed() const { return this->position == VALVE_CLOSED; } + +ValveCall ValveRestoreState::to_call(Valve *valve) { + auto call = valve->make_call(); + call.set_position(this->position); + return call; +} +void ValveRestoreState::apply(Valve *valve) { + valve->position = this->position; + valve->publish_state(); +} + +} // namespace valve +} // namespace esphome diff --git a/esphome/components/valve/valve.h b/esphome/components/valve/valve.h new file mode 100644 index 0000000000..0e14a8d8f0 --- /dev/null +++ b/esphome/components/valve/valve.h @@ -0,0 +1,152 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/entity_base.h" +#include "esphome/core/helpers.h" +#include "esphome/core/preferences.h" +#include "valve_traits.h" + +namespace esphome { +namespace valve { + +const extern float VALVE_OPEN; +const extern float VALVE_CLOSED; + +#define LOG_VALVE(prefix, type, obj) \ + if ((obj) != nullptr) { \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + auto traits_ = (obj)->get_traits(); \ + if (traits_.get_is_assumed_state()) { \ + ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ + } \ + if (!(obj)->get_device_class().empty()) { \ + ESP_LOGCONFIG(TAG, "%s Device Class: '%s'", prefix, (obj)->get_device_class().c_str()); \ + } \ + } + +class Valve; + +class ValveCall { + public: + ValveCall(Valve *parent); + + /// Set the command as a string, "STOP", "OPEN", "CLOSE", "TOGGLE". + ValveCall &set_command(const char *command); + /// Set the command to open the valve. + ValveCall &set_command_open(); + /// Set the command to close the valve. + ValveCall &set_command_close(); + /// Set the command to stop the valve. + ValveCall &set_command_stop(); + /// Set the command to toggle the valve. + ValveCall &set_command_toggle(); + /// Set the call to a certain target position. + ValveCall &set_position(float position); + /// Set whether this valve call should stop the valve. + ValveCall &set_stop(bool stop); + + /// Perform the valve call. + void perform(); + + const optional &get_position() const; + bool get_stop() const; + const optional &get_toggle() const; + + protected: + void validate_(); + + Valve *parent_; + bool stop_{false}; + optional position_{}; + optional toggle_{}; +}; + +/// Struct used to store the restored state of a valve +struct ValveRestoreState { + float position; + + /// Convert this struct to a valve call that can be performed. + ValveCall to_call(Valve *valve); + /// Apply these settings to the valve + void apply(Valve *valve); +} __attribute__((packed)); + +/// Enum encoding the current operation of a valve. +enum ValveOperation : uint8_t { + /// The valve is currently idle (not moving) + VALVE_OPERATION_IDLE = 0, + /// The valve is currently opening. + VALVE_OPERATION_OPENING, + /// The valve is currently closing. + VALVE_OPERATION_CLOSING, +}; + +const char *valve_operation_to_str(ValveOperation op); + +/** Base class for all valve devices. + * + * Valves currently have three properties: + * - position - The current position of the valve from 0.0 (fully closed) to 1.0 (fully open). + * For valves with only binary OPEN/CLOSED position this will always be either 0.0 or 1.0 + * - current_operation - The operation the valve is currently performing, this can + * be one of IDLE, OPENING and CLOSING. + * + * For users: All valve operations must be performed over the .make_call() interface. + * To command a valve, use .make_call() to create a call object, set all properties + * you wish to set, and activate the command with .perform(). + * For reading out the current values of the valve, use the public .position, etc. + * properties (these are read-only for users) + * + * For integrations: Integrations must implement two methods: control() and get_traits(). + * Control will be called with the arguments supplied by the user and should be used + * to control all values of the valve. Also implement get_traits() to return what operations + * the valve supports. + */ +class Valve : public EntityBase, public EntityBase_DeviceClass { + public: + explicit Valve(); + + /// The current operation of the valve (idle, opening, closing). + ValveOperation current_operation{VALVE_OPERATION_IDLE}; + /** The position of the valve from 0.0 (fully closed) to 1.0 (fully open). + * + * For binary valves this is always equals to 0.0 or 1.0 (see also VALVE_OPEN and + * VALVE_CLOSED constants). + */ + float position; + + /// Construct a new valve call used to control the valve. + ValveCall make_call(); + + void add_on_state_callback(std::function &&f); + + /** Publish the current state of the valve. + * + * First set the .position, etc. values and then call this method + * to publish the state of the valve. + * + * @param save Whether to save the updated values in RTC area. + */ + void publish_state(bool save = true); + + virtual ValveTraits get_traits() = 0; + + /// Helper method to check if the valve is fully open. Equivalent to comparing .position against 1.0 + bool is_fully_open() const; + /// Helper method to check if the valve is fully closed. Equivalent to comparing .position against 0.0 + bool is_fully_closed() const; + + protected: + friend ValveCall; + + virtual void control(const ValveCall &call) = 0; + + optional restore_state_(); + + CallbackManager state_callback_{}; + + ESPPreferenceObject rtc_; +}; + +} // namespace valve +} // namespace esphome diff --git a/esphome/components/valve/valve_traits.h b/esphome/components/valve/valve_traits.h new file mode 100644 index 0000000000..7e9aab2f26 --- /dev/null +++ b/esphome/components/valve/valve_traits.h @@ -0,0 +1,27 @@ +#pragma once + +namespace esphome { +namespace valve { + +class ValveTraits { + public: + ValveTraits() = default; + + bool get_is_assumed_state() const { return this->is_assumed_state_; } + void set_is_assumed_state(bool is_assumed_state) { this->is_assumed_state_ = is_assumed_state; } + bool get_supports_position() const { return this->supports_position_; } + void set_supports_position(bool supports_position) { this->supports_position_ = supports_position; } + bool get_supports_toggle() const { return this->supports_toggle_; } + void set_supports_toggle(bool supports_toggle) { this->supports_toggle_ = supports_toggle; } + bool get_supports_stop() const { return this->supports_stop_; } + void set_supports_stop(bool supports_stop) { this->supports_stop_ = supports_stop; } + + protected: + bool is_assumed_state_{false}; + bool supports_position_{false}; + bool supports_toggle_{false}; + bool supports_stop_{false}; +}; + +} // namespace valve +} // namespace esphome diff --git a/esphome/components/web_server/list_entities.cpp b/esphome/components/web_server/list_entities.cpp index dd9fd4afe4..13e396dc82 100644 --- a/esphome/components/web_server/list_entities.cpp +++ b/esphome/components/web_server/list_entities.cpp @@ -86,6 +86,15 @@ bool ListEntitiesIterator::on_lock(lock::Lock *a_lock) { } #endif +#ifdef USE_VALVE +bool ListEntitiesIterator::on_valve(valve::Valve *valve) { + if (this->web_server_->events_.count() == 0) + return true; + this->web_server_->events_.send(this->web_server_->valve_json(valve, DETAIL_ALL).c_str(), "state"); + return true; +} +#endif + #ifdef USE_CLIMATE bool ListEntitiesIterator::on_climate(climate::Climate *climate) { if (this->web_server_->events_.count() == 0) diff --git a/esphome/components/web_server/list_entities.h b/esphome/components/web_server/list_entities.h index fc48186b32..d0b8dda233 100644 --- a/esphome/components/web_server/list_entities.h +++ b/esphome/components/web_server/list_entities.h @@ -56,6 +56,9 @@ class ListEntitiesIterator : public ComponentIterator { #ifdef USE_LOCK bool on_lock(lock::Lock *a_lock) override; #endif +#ifdef USE_VALVE + bool on_valve(valve::Valve *valve) override; +#endif #ifdef USE_ALARM_CONTROL_PANEL bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; #endif diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 2e6206b691..412f8816ee 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -1260,6 +1260,68 @@ void WebServer::handle_lock_request(AsyncWebServerRequest *request, const UrlMat } #endif +#ifdef USE_VALVE +void WebServer::on_valve_update(valve::Valve *obj) { + if (this->events_.count() == 0) + return; + this->events_.send(this->valve_json(obj, DETAIL_STATE).c_str(), "state"); +} +void WebServer::handle_valve_request(AsyncWebServerRequest *request, const UrlMatch &match) { + for (valve::Valve *obj : App.get_valves()) { + if (obj->get_object_id() != match.id) + continue; + + if (request->method() == HTTP_GET && match.method.empty()) { + std::string data = this->valve_json(obj, DETAIL_STATE); + request->send(200, "application/json", data.c_str()); + continue; + } + + auto call = obj->make_call(); + if (match.method == "open") { + call.set_command_open(); + } else if (match.method == "close") { + call.set_command_close(); + } else if (match.method == "stop") { + call.set_command_stop(); + } else if (match.method == "toggle") { + call.set_command_toggle(); + } else if (match.method != "set") { + request->send(404); + return; + } + + auto traits = obj->get_traits(); + if (request->hasParam("position") && !traits.get_supports_position()) { + request->send(409); + return; + } + + if (request->hasParam("position")) { + auto position = parse_number(request->getParam("position")->value().c_str()); + if (position.has_value()) { + call.set_position(*position); + } + } + + this->schedule_([call]() mutable { call.perform(); }); + request->send(200); + return; + } + request->send(404); +} +std::string WebServer::valve_json(valve::Valve *obj, JsonDetail start_config) { + return json::build_json([obj, start_config](JsonObject root) { + set_json_icon_state_value(root, obj, "valve-" + obj->get_object_id(), obj->is_fully_closed() ? "CLOSED" : "OPEN", + obj->position, start_config); + root["current_operation"] = valve::valve_operation_to_str(obj->current_operation); + + if (obj->get_traits().get_supports_position()) + root["position"] = obj->position; + }); +} +#endif + #ifdef USE_ALARM_CONTROL_PANEL void WebServer::on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj) { if (this->events_.count() == 0) @@ -1394,6 +1456,11 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) { return true; #endif +#ifdef USE_VALVE + if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "valve") + return true; +#endif + #ifdef USE_ALARM_CONTROL_PANEL if (request->method() == HTTP_GET && match.domain == "alarm_control_panel") return true; @@ -1535,6 +1602,13 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) { } #endif +#ifdef USE_VALVE + if (match.domain == "valve") { + this->handle_valve_request(request, match); + return; + } +#endif + #ifdef USE_ALARM_CONTROL_PANEL if (match.domain == "alarm_control_panel") { this->handle_alarm_control_panel_request(request, match); diff --git a/esphome/components/web_server/web_server.h b/esphome/components/web_server/web_server.h index 1935f8d076..9f807efc43 100644 --- a/esphome/components/web_server/web_server.h +++ b/esphome/components/web_server/web_server.h @@ -276,6 +276,16 @@ class WebServer : public Controller, public Component, public AsyncWebHandler { std::string lock_json(lock::Lock *obj, lock::LockState value, JsonDetail start_config); #endif +#ifdef USE_VALVE + void on_valve_update(valve::Valve *obj) override; + + /// Handle a valve request under '/valve//'. + void handle_valve_request(AsyncWebServerRequest *request, const UrlMatch &match); + + /// Dump the valve state as a JSON string. + std::string valve_json(valve::Valve *obj, JsonDetail start_config); +#endif + #ifdef USE_ALARM_CONTROL_PANEL void on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj) override; diff --git a/esphome/core/application.h b/esphome/core/application.h index 73330d27e3..ee931282a6 100644 --- a/esphome/core/application.h +++ b/esphome/core/application.h @@ -54,6 +54,9 @@ #ifdef USE_LOCK #include "esphome/components/lock/lock.h" #endif +#ifdef USE_VALVE +#include "esphome/components/valve/valve.h" +#endif #ifdef USE_MEDIA_PLAYER #include "esphome/components/media_player/media_player.h" #endif @@ -147,6 +150,10 @@ class Application { void register_lock(lock::Lock *a_lock) { this->locks_.push_back(a_lock); } #endif +#ifdef USE_VALVE + void register_valve(valve::Valve *valve) { this->valves_.push_back(valve); } +#endif + #ifdef USE_MEDIA_PLAYER void register_media_player(media_player::MediaPlayer *media_player) { this->media_players_.push_back(media_player); } #endif @@ -348,6 +355,15 @@ class Application { return nullptr; } #endif +#ifdef USE_VALVE + const std::vector &get_valves() { return this->valves_; } + valve::Valve *get_valve_by_key(uint32_t key, bool include_internal = false) { + for (auto *obj : this->valves_) + if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal())) + return obj; + return nullptr; + } +#endif #ifdef USE_MEDIA_PLAYER const std::vector &get_media_players() { return this->media_players_; } media_player::MediaPlayer *get_media_player_by_key(uint32_t key, bool include_internal = false) { @@ -429,6 +445,9 @@ class Application { #ifdef USE_LOCK std::vector locks_{}; #endif +#ifdef USE_VALVE + std::vector valves_{}; +#endif #ifdef USE_MEDIA_PLAYER std::vector media_players_{}; #endif diff --git a/esphome/core/component_iterator.cpp b/esphome/core/component_iterator.cpp index 228cf64d54..b00154c685 100644 --- a/esphome/core/component_iterator.cpp +++ b/esphome/core/component_iterator.cpp @@ -277,6 +277,21 @@ void ComponentIterator::advance() { } break; #endif +#ifdef USE_VALVE + case IteratorState::VALVE: + if (this->at_ >= App.get_valves().size()) { + advance_platform = true; + } else { + auto *valve = App.get_valves()[this->at_]; + if (valve->is_internal() && !this->include_internal_) { + success = true; + break; + } else { + success = this->on_valve(valve); + } + } + break; +#endif #ifdef USE_MEDIA_PLAYER case IteratorState::MEDIA_PLAYER: if (this->at_ >= App.get_media_players().size()) { diff --git a/esphome/core/component_iterator.h b/esphome/core/component_iterator.h index d7f19f2850..3fbbc0bc19 100644 --- a/esphome/core/component_iterator.h +++ b/esphome/core/component_iterator.h @@ -72,6 +72,9 @@ class ComponentIterator { #ifdef USE_LOCK virtual bool on_lock(lock::Lock *a_lock) = 0; #endif +#ifdef USE_VALVE + virtual bool on_valve(valve::Valve *valve) = 0; +#endif #ifdef USE_MEDIA_PLAYER virtual bool on_media_player(media_player::MediaPlayer *media_player); #endif @@ -135,6 +138,9 @@ class ComponentIterator { #ifdef USE_LOCK LOCK, #endif +#ifdef USE_VALVE + VALVE, +#endif #ifdef USE_MEDIA_PLAYER MEDIA_PLAYER, #endif diff --git a/esphome/core/controller.cpp b/esphome/core/controller.cpp index db5818d455..eab818bdb4 100644 --- a/esphome/core/controller.cpp +++ b/esphome/core/controller.cpp @@ -91,6 +91,12 @@ void Controller::setup_controller(bool include_internal) { obj->add_on_state_callback([this, obj]() { this->on_lock_update(obj); }); } #endif +#ifdef USE_VALVE + for (auto *obj : App.get_valves()) { + if (include_internal || !obj->is_internal()) + obj->add_on_state_callback([this, obj]() { this->on_valve_update(obj); }); + } +#endif #ifdef USE_MEDIA_PLAYER for (auto *obj : App.get_media_players()) { if (include_internal || !obj->is_internal()) diff --git a/esphome/core/controller.h b/esphome/core/controller.h index 9b1cfd93c6..94a4acb7c7 100644 --- a/esphome/core/controller.h +++ b/esphome/core/controller.h @@ -46,6 +46,9 @@ #ifdef USE_LOCK #include "esphome/components/lock/lock.h" #endif +#ifdef USE_VALVE +#include "esphome/components/valve/valve.h" +#endif #ifdef USE_MEDIA_PLAYER #include "esphome/components/media_player/media_player.h" #endif @@ -100,6 +103,9 @@ class Controller { #ifdef USE_LOCK virtual void on_lock_update(lock::Lock *obj){}; #endif +#ifdef USE_VALVE + virtual void on_valve_update(valve::Valve *obj){}; +#endif #ifdef USE_MEDIA_PLAYER virtual void on_media_player_update(media_player::MediaPlayer *obj){}; #endif diff --git a/esphome/core/defines.h b/esphome/core/defines.h index f13ae968f0..2064ca1356 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -54,6 +54,7 @@ #define USE_TIME #define USE_TOUCHSCREEN #define USE_UART_DEBUGGER +#define USE_VALVE #define USE_WIFI #define USE_WIFI_AP #define USE_GRAPHICAL_DISPLAY_MENU diff --git a/script/ci-custom.py b/script/ci-custom.py index c3cfc7a331..c591bfe5c3 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -638,6 +638,7 @@ def lint_trailing_whitespace(fname, match): "esphome/components/stepper/stepper.h", "esphome/components/switch/switch.h", "esphome/components/text_sensor/text_sensor.h", + "esphome/components/valve/valve.h", "esphome/core/component.h", "esphome/core/gpio.h", "esphome/core/log.h", diff --git a/tests/components/template/test.all.yaml b/tests/components/template/test.all.yaml index 29dc83b649..64faec36c2 100644 --- a/tests/components/template/test.all.yaml +++ b/tests/components/template/test.all.yaml @@ -125,6 +125,23 @@ lock: open_action: - logger.log: open_action +valve: + - platform: template + name: "Template Valve" + lambda: |- + if (id(some_binary_sensor).state) { + return VALVE_OPEN; + } else { + return VALVE_CLOSED; + } + open_action: + - logger.log: open_action + close_action: + - logger.log: close_action + stop_action: + - logger.log: stop_action + optimistic: true + text: - platform: template name: "Template text" From 7e5b100b7778ba451d2ebda597ca7c4dc37ac3c1 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 22 Apr 2024 23:53:13 -0500 Subject: [PATCH 060/313] Add some components to the new testing framework (R) (#6219) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../radon_eye_ble/test.esp32-c3-idf.yaml | 3 ++ .../radon_eye_ble/test.esp32-c3.yaml | 3 ++ .../radon_eye_ble/test.esp32-idf.yaml | 3 ++ .../components/radon_eye_ble/test.esp32.yaml | 3 ++ .../radon_eye_rd200/test.esp32-c3-idf.yaml | 14 ++++++++ .../radon_eye_rd200/test.esp32-c3.yaml | 14 ++++++++ .../radon_eye_rd200/test.esp32-idf.yaml | 14 ++++++++ .../radon_eye_rd200/test.esp32.yaml | 14 ++++++++ .../rc522_i2c/test.esp32-c3-idf.yaml | 17 +++++++++ tests/components/rc522_i2c/test.esp32-c3.yaml | 17 +++++++++ .../components/rc522_i2c/test.esp32-idf.yaml | 17 +++++++++ tests/components/rc522_i2c/test.esp32.yaml | 17 +++++++++ tests/components/rc522_i2c/test.esp8266.yaml | 17 +++++++++ tests/components/rc522_i2c/test.rp2040.yaml | 17 +++++++++ .../rc522_spi/test.esp32-c3-idf.yaml | 15 ++++++++ tests/components/rc522_spi/test.esp32-c3.yaml | 15 ++++++++ .../components/rc522_spi/test.esp32-idf.yaml | 15 ++++++++ tests/components/rc522_spi/test.esp32.yaml | 15 ++++++++ tests/components/rc522_spi/test.esp8266.yaml | 15 ++++++++ tests/components/rc522_spi/test.rp2040.yaml | 15 ++++++++ .../components/rdm6300/test.esp32-c3-idf.yaml | 12 +++++++ tests/components/rdm6300/test.esp32-c3.yaml | 12 +++++++ tests/components/rdm6300/test.esp32-idf.yaml | 12 +++++++ tests/components/rdm6300/test.esp32.yaml | 12 +++++++ tests/components/rdm6300/test.esp8266.yaml | 12 +++++++ tests/components/rdm6300/test.rp2040.yaml | 12 +++++++ .../components/resistance/test.esp32-c3.yaml | 12 +++++++ .../components/resistance/test.esp32-idf.yaml | 12 +++++++ .../components/resistance/test.esp32-s2.yaml | 12 +++++++ .../components/resistance/test.esp32-s3.yaml | 12 +++++++ tests/components/resistance/test.esp32.yaml | 12 +++++++ tests/components/resistance/test.esp8266.yaml | 11 ++++++ tests/components/resistance/test.rp2040.yaml | 12 +++++++ .../components/restart/test.esp32-c3-idf.yaml | 7 ++++ tests/components/restart/test.esp32-c3.yaml | 7 ++++ tests/components/restart/test.esp32-idf.yaml | 7 ++++ tests/components/restart/test.esp32.yaml | 7 ++++ tests/components/restart/test.esp8266.yaml | 7 ++++ tests/components/restart/test.rp2040.yaml | 7 ++++ .../rf_bridge/test.esp32-c3-idf.yaml | 35 +++++++++++++++++++ tests/components/rf_bridge/test.esp32-c3.yaml | 35 +++++++++++++++++++ .../components/rf_bridge/test.esp32-idf.yaml | 35 +++++++++++++++++++ tests/components/rf_bridge/test.esp32.yaml | 35 +++++++++++++++++++ tests/components/rf_bridge/test.esp8266.yaml | 35 +++++++++++++++++++ tests/components/rf_bridge/test.rp2040.yaml | 35 +++++++++++++++++++ tests/components/rgb/test.esp32-c3-idf.yaml | 18 ++++++++++ tests/components/rgb/test.esp32-c3.yaml | 18 ++++++++++ tests/components/rgb/test.esp32-idf.yaml | 18 ++++++++++ tests/components/rgb/test.esp32.yaml | 18 ++++++++++ tests/components/rgb/test.esp8266.yaml | 18 ++++++++++ tests/components/rgb/test.rp2040.yaml | 18 ++++++++++ tests/components/rgbct/test.esp32-c3-idf.yaml | 28 +++++++++++++++ tests/components/rgbct/test.esp32-c3.yaml | 28 +++++++++++++++ tests/components/rgbct/test.esp32-idf.yaml | 28 +++++++++++++++ tests/components/rgbct/test.esp32.yaml | 28 +++++++++++++++ tests/components/rgbct/test.esp8266.yaml | 28 +++++++++++++++ tests/components/rgbct/test.rp2040.yaml | 28 +++++++++++++++ tests/components/rgbw/test.esp32-c3-idf.yaml | 22 ++++++++++++ tests/components/rgbw/test.esp32-c3.yaml | 22 ++++++++++++ tests/components/rgbw/test.esp32-idf.yaml | 22 ++++++++++++ tests/components/rgbw/test.esp32.yaml | 22 ++++++++++++ tests/components/rgbw/test.esp8266.yaml | 22 ++++++++++++ tests/components/rgbw/test.rp2040.yaml | 22 ++++++++++++ tests/components/rgbww/test.esp32-c3-idf.yaml | 28 +++++++++++++++ tests/components/rgbww/test.esp32-c3.yaml | 28 +++++++++++++++ tests/components/rgbww/test.esp32-idf.yaml | 28 +++++++++++++++ tests/components/rgbww/test.esp32.yaml | 28 +++++++++++++++ tests/components/rgbww/test.esp8266.yaml | 28 +++++++++++++++ tests/components/rgbww/test.rp2040.yaml | 28 +++++++++++++++ .../rotary_encoder/test.esp32-c3-idf.yaml | 25 +++++++++++++ .../rotary_encoder/test.esp32-c3.yaml | 25 +++++++++++++ .../rotary_encoder/test.esp32-idf.yaml | 25 +++++++++++++ .../components/rotary_encoder/test.esp32.yaml | 25 +++++++++++++ .../rotary_encoder/test.esp8266.yaml | 25 +++++++++++++ .../rotary_encoder/test.rp2040.yaml | 25 +++++++++++++ .../rp2040_pio_led_strip/test.rp2040.yaml | 18 ++++++++++ tests/components/rp2040_pwm/test.rp2040.yaml | 7 ++++ tests/components/rtttl/test.esp32-c3-idf.yaml | 16 +++++++++ tests/components/rtttl/test.esp32-c3.yaml | 16 +++++++++ tests/components/rtttl/test.esp32-idf.yaml | 16 +++++++++ tests/components/rtttl/test.esp32.yaml | 16 +++++++++ tests/components/rtttl/test.esp8266.yaml | 15 ++++++++ tests/components/rtttl/test.rp2040.yaml | 15 ++++++++ .../ruuvi_ble/test.esp32-c3-idf.yaml | 3 ++ tests/components/ruuvi_ble/test.esp32-c3.yaml | 3 ++ .../components/ruuvi_ble/test.esp32-idf.yaml | 3 ++ tests/components/ruuvi_ble/test.esp32.yaml | 3 ++ .../ruuvitag/test.esp32-c3-idf.yaml | 27 ++++++++++++++ tests/components/ruuvitag/test.esp32-c3.yaml | 27 ++++++++++++++ tests/components/ruuvitag/test.esp32-idf.yaml | 27 ++++++++++++++ tests/components/ruuvitag/test.esp32.yaml | 27 ++++++++++++++ 91 files changed, 1632 insertions(+) create mode 100644 tests/components/radon_eye_ble/test.esp32-c3-idf.yaml create mode 100644 tests/components/radon_eye_ble/test.esp32-c3.yaml create mode 100644 tests/components/radon_eye_ble/test.esp32-idf.yaml create mode 100644 tests/components/radon_eye_ble/test.esp32.yaml create mode 100644 tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml create mode 100644 tests/components/radon_eye_rd200/test.esp32-c3.yaml create mode 100644 tests/components/radon_eye_rd200/test.esp32-idf.yaml create mode 100644 tests/components/radon_eye_rd200/test.esp32.yaml create mode 100644 tests/components/rc522_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/rc522_i2c/test.esp32-c3.yaml create mode 100644 tests/components/rc522_i2c/test.esp32-idf.yaml create mode 100644 tests/components/rc522_i2c/test.esp32.yaml create mode 100644 tests/components/rc522_i2c/test.esp8266.yaml create mode 100644 tests/components/rc522_i2c/test.rp2040.yaml create mode 100644 tests/components/rc522_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/rc522_spi/test.esp32-c3.yaml create mode 100644 tests/components/rc522_spi/test.esp32-idf.yaml create mode 100644 tests/components/rc522_spi/test.esp32.yaml create mode 100644 tests/components/rc522_spi/test.esp8266.yaml create mode 100644 tests/components/rc522_spi/test.rp2040.yaml create mode 100644 tests/components/rdm6300/test.esp32-c3-idf.yaml create mode 100644 tests/components/rdm6300/test.esp32-c3.yaml create mode 100644 tests/components/rdm6300/test.esp32-idf.yaml create mode 100644 tests/components/rdm6300/test.esp32.yaml create mode 100644 tests/components/rdm6300/test.esp8266.yaml create mode 100644 tests/components/rdm6300/test.rp2040.yaml create mode 100644 tests/components/resistance/test.esp32-c3.yaml create mode 100644 tests/components/resistance/test.esp32-idf.yaml create mode 100644 tests/components/resistance/test.esp32-s2.yaml create mode 100644 tests/components/resistance/test.esp32-s3.yaml create mode 100644 tests/components/resistance/test.esp32.yaml create mode 100644 tests/components/resistance/test.esp8266.yaml create mode 100644 tests/components/resistance/test.rp2040.yaml create mode 100644 tests/components/restart/test.esp32-c3-idf.yaml create mode 100644 tests/components/restart/test.esp32-c3.yaml create mode 100644 tests/components/restart/test.esp32-idf.yaml create mode 100644 tests/components/restart/test.esp32.yaml create mode 100644 tests/components/restart/test.esp8266.yaml create mode 100644 tests/components/restart/test.rp2040.yaml create mode 100644 tests/components/rf_bridge/test.esp32-c3-idf.yaml create mode 100644 tests/components/rf_bridge/test.esp32-c3.yaml create mode 100644 tests/components/rf_bridge/test.esp32-idf.yaml create mode 100644 tests/components/rf_bridge/test.esp32.yaml create mode 100644 tests/components/rf_bridge/test.esp8266.yaml create mode 100644 tests/components/rf_bridge/test.rp2040.yaml create mode 100644 tests/components/rgb/test.esp32-c3-idf.yaml create mode 100644 tests/components/rgb/test.esp32-c3.yaml create mode 100644 tests/components/rgb/test.esp32-idf.yaml create mode 100644 tests/components/rgb/test.esp32.yaml create mode 100644 tests/components/rgb/test.esp8266.yaml create mode 100644 tests/components/rgb/test.rp2040.yaml create mode 100644 tests/components/rgbct/test.esp32-c3-idf.yaml create mode 100644 tests/components/rgbct/test.esp32-c3.yaml create mode 100644 tests/components/rgbct/test.esp32-idf.yaml create mode 100644 tests/components/rgbct/test.esp32.yaml create mode 100644 tests/components/rgbct/test.esp8266.yaml create mode 100644 tests/components/rgbct/test.rp2040.yaml create mode 100644 tests/components/rgbw/test.esp32-c3-idf.yaml create mode 100644 tests/components/rgbw/test.esp32-c3.yaml create mode 100644 tests/components/rgbw/test.esp32-idf.yaml create mode 100644 tests/components/rgbw/test.esp32.yaml create mode 100644 tests/components/rgbw/test.esp8266.yaml create mode 100644 tests/components/rgbw/test.rp2040.yaml create mode 100644 tests/components/rgbww/test.esp32-c3-idf.yaml create mode 100644 tests/components/rgbww/test.esp32-c3.yaml create mode 100644 tests/components/rgbww/test.esp32-idf.yaml create mode 100644 tests/components/rgbww/test.esp32.yaml create mode 100644 tests/components/rgbww/test.esp8266.yaml create mode 100644 tests/components/rgbww/test.rp2040.yaml create mode 100644 tests/components/rotary_encoder/test.esp32-c3-idf.yaml create mode 100644 tests/components/rotary_encoder/test.esp32-c3.yaml create mode 100644 tests/components/rotary_encoder/test.esp32-idf.yaml create mode 100644 tests/components/rotary_encoder/test.esp32.yaml create mode 100644 tests/components/rotary_encoder/test.esp8266.yaml create mode 100644 tests/components/rotary_encoder/test.rp2040.yaml create mode 100644 tests/components/rp2040_pio_led_strip/test.rp2040.yaml create mode 100644 tests/components/rp2040_pwm/test.rp2040.yaml create mode 100644 tests/components/rtttl/test.esp32-c3-idf.yaml create mode 100644 tests/components/rtttl/test.esp32-c3.yaml create mode 100644 tests/components/rtttl/test.esp32-idf.yaml create mode 100644 tests/components/rtttl/test.esp32.yaml create mode 100644 tests/components/rtttl/test.esp8266.yaml create mode 100644 tests/components/rtttl/test.rp2040.yaml create mode 100644 tests/components/ruuvi_ble/test.esp32-c3-idf.yaml create mode 100644 tests/components/ruuvi_ble/test.esp32-c3.yaml create mode 100644 tests/components/ruuvi_ble/test.esp32-idf.yaml create mode 100644 tests/components/ruuvi_ble/test.esp32.yaml create mode 100644 tests/components/ruuvitag/test.esp32-c3-idf.yaml create mode 100644 tests/components/ruuvitag/test.esp32-c3.yaml create mode 100644 tests/components/ruuvitag/test.esp32-idf.yaml create mode 100644 tests/components/ruuvitag/test.esp32.yaml diff --git a/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml b/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..85638d5c0e --- /dev/null +++ b/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +radon_eye_ble: diff --git a/tests/components/radon_eye_ble/test.esp32-c3.yaml b/tests/components/radon_eye_ble/test.esp32-c3.yaml new file mode 100644 index 0000000000..85638d5c0e --- /dev/null +++ b/tests/components/radon_eye_ble/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +radon_eye_ble: diff --git a/tests/components/radon_eye_ble/test.esp32-idf.yaml b/tests/components/radon_eye_ble/test.esp32-idf.yaml new file mode 100644 index 0000000000..85638d5c0e --- /dev/null +++ b/tests/components/radon_eye_ble/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +radon_eye_ble: diff --git a/tests/components/radon_eye_ble/test.esp32.yaml b/tests/components/radon_eye_ble/test.esp32.yaml new file mode 100644 index 0000000000..85638d5c0e --- /dev/null +++ b/tests/components/radon_eye_ble/test.esp32.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +radon_eye_ble: diff --git a/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml b/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d06979be6f --- /dev/null +++ b/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_blec + +sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_blec + radon: + name: RD200 Radon + radon_long_term: + name: RD200 Radon Long Term + update_interval: 10min diff --git a/tests/components/radon_eye_rd200/test.esp32-c3.yaml b/tests/components/radon_eye_rd200/test.esp32-c3.yaml new file mode 100644 index 0000000000..d06979be6f --- /dev/null +++ b/tests/components/radon_eye_rd200/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_blec + +sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_blec + radon: + name: RD200 Radon + radon_long_term: + name: RD200 Radon Long Term + update_interval: 10min diff --git a/tests/components/radon_eye_rd200/test.esp32-idf.yaml b/tests/components/radon_eye_rd200/test.esp32-idf.yaml new file mode 100644 index 0000000000..d06979be6f --- /dev/null +++ b/tests/components/radon_eye_rd200/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_blec + +sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_blec + radon: + name: RD200 Radon + radon_long_term: + name: RD200 Radon Long Term + update_interval: 10min diff --git a/tests/components/radon_eye_rd200/test.esp32.yaml b/tests/components/radon_eye_rd200/test.esp32.yaml new file mode 100644 index 0000000000..d06979be6f --- /dev/null +++ b/tests/components/radon_eye_rd200/test.esp32.yaml @@ -0,0 +1,14 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_blec + +sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_blec + radon: + name: RD200 Radon + radon_long_term: + name: RD200 Radon Long Term + update_interval: 10min diff --git a/tests/components/rc522_i2c/test.esp32-c3-idf.yaml b/tests/components/rc522_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..8c8819e257 --- /dev/null +++ b/tests/components/rc522_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 5 + sda: 4 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_i2c/test.esp32-c3.yaml b/tests/components/rc522_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..8c8819e257 --- /dev/null +++ b/tests/components/rc522_i2c/test.esp32-c3.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 5 + sda: 4 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_i2c/test.esp32-idf.yaml b/tests/components/rc522_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..69b7d892a4 --- /dev/null +++ b/tests/components/rc522_i2c/test.esp32-idf.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 16 + sda: 17 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_i2c/test.esp32.yaml b/tests/components/rc522_i2c/test.esp32.yaml new file mode 100644 index 0000000000..69b7d892a4 --- /dev/null +++ b/tests/components/rc522_i2c/test.esp32.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 16 + sda: 17 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_i2c/test.esp8266.yaml b/tests/components/rc522_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..8c8819e257 --- /dev/null +++ b/tests/components/rc522_i2c/test.esp8266.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 5 + sda: 4 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_i2c/test.rp2040.yaml b/tests/components/rc522_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..8c8819e257 --- /dev/null +++ b/tests/components/rc522_i2c/test.rp2040.yaml @@ -0,0 +1,17 @@ +i2c: + - id: i2c_rc522 + scl: 5 + sda: 4 + +rc522_i2c: + - id: rc522_nfcc + update_interval: 1s + on_tag: + - lambda: |- + ESP_LOGD("main", "Found tag %s", x.c_str()); + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: RC522 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.esp32-c3-idf.yaml b/tests/components/rc522_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..8bcab84700 --- /dev/null +++ b/tests/components/rc522_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +rc522_spi: + id: rc522_nfcc + cs_pin: 4 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.esp32-c3.yaml b/tests/components/rc522_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..8bcab84700 --- /dev/null +++ b/tests/components/rc522_spi/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +rc522_spi: + id: rc522_nfcc + cs_pin: 4 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.esp32-idf.yaml b/tests/components/rc522_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..5c0b698a08 --- /dev/null +++ b/tests/components/rc522_spi/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +rc522_spi: + id: rc522_nfcc + cs_pin: 12 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.esp32.yaml b/tests/components/rc522_spi/test.esp32.yaml new file mode 100644 index 0000000000..5c0b698a08 --- /dev/null +++ b/tests/components/rc522_spi/test.esp32.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +rc522_spi: + id: rc522_nfcc + cs_pin: 12 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.esp8266.yaml b/tests/components/rc522_spi/test.esp8266.yaml new file mode 100644 index 0000000000..3c33311266 --- /dev/null +++ b/tests/components/rc522_spi/test.esp8266.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +rc522_spi: + id: rc522_nfcc + cs_pin: 15 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rc522_spi/test.rp2040.yaml b/tests/components/rc522_spi/test.rp2040.yaml new file mode 100644 index 0000000000..ed2827dbb9 --- /dev/null +++ b/tests/components/rc522_spi/test.rp2040.yaml @@ -0,0 +1,15 @@ +spi: + - id: spi_rc522 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +rc522_spi: + id: rc522_nfcc + cs_pin: 6 + +binary_sensor: + - platform: rc522 + rc522_id: rc522_nfcc + name: PN532 NFC Tag + uid: 74-10-37-94 diff --git a/tests/components/rdm6300/test.esp32-c3-idf.yaml b/tests/components/rdm6300/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b92fce06e2 --- /dev/null +++ b/tests/components/rdm6300/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/rdm6300/test.esp32-c3.yaml b/tests/components/rdm6300/test.esp32-c3.yaml new file mode 100644 index 0000000000..b92fce06e2 --- /dev/null +++ b/tests/components/rdm6300/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/rdm6300/test.esp32-idf.yaml b/tests/components/rdm6300/test.esp32-idf.yaml new file mode 100644 index 0000000000..4159248124 --- /dev/null +++ b/tests/components/rdm6300/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/rdm6300/test.esp32.yaml b/tests/components/rdm6300/test.esp32.yaml new file mode 100644 index 0000000000..4159248124 --- /dev/null +++ b/tests/components/rdm6300/test.esp32.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/rdm6300/test.esp8266.yaml b/tests/components/rdm6300/test.esp8266.yaml new file mode 100644 index 0000000000..b92fce06e2 --- /dev/null +++ b/tests/components/rdm6300/test.esp8266.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/rdm6300/test.rp2040.yaml b/tests/components/rdm6300/test.rp2040.yaml new file mode 100644 index 0000000000..b92fce06e2 --- /dev/null +++ b/tests/components/rdm6300/test.rp2040.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_rdm6300 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rdm6300: + +binary_sensor: + - platform: rdm6300 + uid: 7616525 + name: RDM6300 NFC Tag diff --git a/tests/components/resistance/test.esp32-c3.yaml b/tests/components/resistance/test.esp32-c3.yaml new file mode 100644 index 0000000000..84e23d5115 --- /dev/null +++ b/tests/components/resistance/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + pin: 4 + attenuation: 11db + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.esp32-idf.yaml b/tests/components/resistance/test.esp32-idf.yaml new file mode 100644 index 0000000000..b1ffc64972 --- /dev/null +++ b/tests/components/resistance/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + pin: 32 + attenuation: 11db + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.esp32-s2.yaml b/tests/components/resistance/test.esp32-s2.yaml new file mode 100644 index 0000000000..4ebd6b5c49 --- /dev/null +++ b/tests/components/resistance/test.esp32-s2.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + pin: 1 + attenuation: 11db + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.esp32-s3.yaml b/tests/components/resistance/test.esp32-s3.yaml new file mode 100644 index 0000000000..4ebd6b5c49 --- /dev/null +++ b/tests/components/resistance/test.esp32-s3.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + pin: 1 + attenuation: 11db + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.esp32.yaml b/tests/components/resistance/test.esp32.yaml new file mode 100644 index 0000000000..b1ffc64972 --- /dev/null +++ b/tests/components/resistance/test.esp32.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + pin: 32 + attenuation: 11db + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.esp8266.yaml b/tests/components/resistance/test.esp8266.yaml new file mode 100644 index 0000000000..f723f7c7c7 --- /dev/null +++ b/tests/components/resistance/test.esp8266.yaml @@ -0,0 +1,11 @@ +sensor: + - platform: adc + id: my_sensor + pin: VCC + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/resistance/test.rp2040.yaml b/tests/components/resistance/test.rp2040.yaml new file mode 100644 index 0000000000..5cc643926a --- /dev/null +++ b/tests/components/resistance/test.rp2040.yaml @@ -0,0 +1,12 @@ +sensor: + - platform: adc + id: my_sensor + name: VSYS + pin: VCC + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist diff --git a/tests/components/restart/test.esp32-c3-idf.yaml b/tests/components/restart/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.esp32-c3.yaml b/tests/components/restart/test.esp32-c3.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.esp32-idf.yaml b/tests/components/restart/test.esp32-idf.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.esp32.yaml b/tests/components/restart/test.esp32.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.esp32.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.esp8266.yaml b/tests/components/restart/test.esp8266.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.esp8266.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.rp2040.yaml b/tests/components/restart/test.rp2040.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/test.rp2040.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/rf_bridge/test.esp32-c3-idf.yaml b/tests/components/rf_bridge/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..95a7aa861a --- /dev/null +++ b/tests/components/rf_bridge/test.esp32-c3-idf.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rf_bridge/test.esp32-c3.yaml b/tests/components/rf_bridge/test.esp32-c3.yaml new file mode 100644 index 0000000000..95a7aa861a --- /dev/null +++ b/tests/components/rf_bridge/test.esp32-c3.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rf_bridge/test.esp32-idf.yaml b/tests/components/rf_bridge/test.esp32-idf.yaml new file mode 100644 index 0000000000..9ade7f0ac0 --- /dev/null +++ b/tests/components/rf_bridge/test.esp32-idf.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rf_bridge/test.esp32.yaml b/tests/components/rf_bridge/test.esp32.yaml new file mode 100644 index 0000000000..9ade7f0ac0 --- /dev/null +++ b/tests/components/rf_bridge/test.esp32.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rf_bridge/test.esp8266.yaml b/tests/components/rf_bridge/test.esp8266.yaml new file mode 100644 index 0000000000..95a7aa861a --- /dev/null +++ b/tests/components/rf_bridge/test.esp8266.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rf_bridge/test.rp2040.yaml b/tests/components/rf_bridge/test.rp2040.yaml new file mode 100644 index 0000000000..95a7aa861a --- /dev/null +++ b/tests/components/rf_bridge/test.rp2040.yaml @@ -0,0 +1,35 @@ +uart: + - id: uart_rf_bridge + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +rf_bridge: + on_code_received: + - lambda: |- + uint32_t test; + test = data.sync; + test = data.low; + test = data.high; + test = data.code; + - rf_bridge.send_code: + sync: 0x1234 + low: 0x1234 + high: 0x1234 + code: 0x123456 + - rf_bridge.learn + on_advanced_code_received: + - lambda: |- + uint32_t test; + std::string test_code; + test = data.length; + test = data.protocol; + test_code = data.code; + - rf_bridge.start_advanced_sniffing: + - rf_bridge.stop_advanced_sniffing: + - rf_bridge.send_advanced_code: + length: 0x04 + protocol: 0x01 + code: "ABC123" + - rf_bridge.send_raw: + raw: "AAA5070008001000ABC12355" diff --git a/tests/components/rgb/test.esp32-c3-idf.yaml b/tests/components/rgb/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..30ff1527b4 --- /dev/null +++ b/tests/components/rgb/test.esp32-c3-idf.yaml @@ -0,0 +1,18 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgb/test.esp32-c3.yaml b/tests/components/rgb/test.esp32-c3.yaml new file mode 100644 index 0000000000..30ff1527b4 --- /dev/null +++ b/tests/components/rgb/test.esp32-c3.yaml @@ -0,0 +1,18 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgb/test.esp32-idf.yaml b/tests/components/rgb/test.esp32-idf.yaml new file mode 100644 index 0000000000..2173e718be --- /dev/null +++ b/tests/components/rgb/test.esp32-idf.yaml @@ -0,0 +1,18 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgb/test.esp32.yaml b/tests/components/rgb/test.esp32.yaml new file mode 100644 index 0000000000..2173e718be --- /dev/null +++ b/tests/components/rgb/test.esp32.yaml @@ -0,0 +1,18 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgb/test.esp8266.yaml b/tests/components/rgb/test.esp8266.yaml new file mode 100644 index 0000000000..60c5a7e04f --- /dev/null +++ b/tests/components/rgb/test.esp8266.yaml @@ -0,0 +1,18 @@ +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 12 + - platform: esp8266_pwm + id: light_output_2 + pin: 13 + - platform: esp8266_pwm + id: light_output_3 + pin: 14 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgb/test.rp2040.yaml b/tests/components/rgb/test.rp2040.yaml new file mode 100644 index 0000000000..fd6519707b --- /dev/null +++ b/tests/components/rgb/test.rp2040.yaml @@ -0,0 +1,18 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 12 + - platform: rp2040_pwm + id: light_output_2 + pin: 13 + - platform: rp2040_pwm + id: light_output_3 + pin: 14 + +light: + - platform: rgb + name: RGB Light + id: rgb_light + red: light_output_1 + green: light_output_2 + blue: light_output_3 diff --git a/tests/components/rgbct/test.esp32-c3-idf.yaml b/tests/components/rgbct/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..426c4b8937 --- /dev/null +++ b/tests/components/rgbct/test.esp32-c3-idf.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + - platform: ledc + id: light_output_5 + pin: 5 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbct/test.esp32-c3.yaml b/tests/components/rgbct/test.esp32-c3.yaml new file mode 100644 index 0000000000..426c4b8937 --- /dev/null +++ b/tests/components/rgbct/test.esp32-c3.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + - platform: ledc + id: light_output_5 + pin: 5 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbct/test.esp32-idf.yaml b/tests/components/rgbct/test.esp32-idf.yaml new file mode 100644 index 0000000000..d9758c9ec7 --- /dev/null +++ b/tests/components/rgbct/test.esp32-idf.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + - platform: ledc + id: light_output_5 + pin: 16 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbct/test.esp32.yaml b/tests/components/rgbct/test.esp32.yaml new file mode 100644 index 0000000000..d9758c9ec7 --- /dev/null +++ b/tests/components/rgbct/test.esp32.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + - platform: ledc + id: light_output_5 + pin: 16 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbct/test.esp8266.yaml b/tests/components/rgbct/test.esp8266.yaml new file mode 100644 index 0000000000..b7008c9ae3 --- /dev/null +++ b/tests/components/rgbct/test.esp8266.yaml @@ -0,0 +1,28 @@ +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 12 + - platform: esp8266_pwm + id: light_output_2 + pin: 13 + - platform: esp8266_pwm + id: light_output_3 + pin: 14 + - platform: esp8266_pwm + id: light_output_4 + pin: 15 + - platform: esp8266_pwm + id: light_output_5 + pin: 16 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbct/test.rp2040.yaml b/tests/components/rgbct/test.rp2040.yaml new file mode 100644 index 0000000000..e7e959b2a4 --- /dev/null +++ b/tests/components/rgbct/test.rp2040.yaml @@ -0,0 +1,28 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 12 + - platform: rp2040_pwm + id: light_output_2 + pin: 13 + - platform: rp2040_pwm + id: light_output_3 + pin: 14 + - platform: rp2040_pwm + id: light_output_4 + pin: 15 + - platform: rp2040_pwm + id: light_output_5 + pin: 16 + +light: + - platform: rgbct + name: RGBCT Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + color_temperature: light_output_4 + white_brightness: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbw/test.esp32-c3-idf.yaml b/tests/components/rgbw/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c5d4fceb9d --- /dev/null +++ b/tests/components/rgbw/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbw/test.esp32-c3.yaml b/tests/components/rgbw/test.esp32-c3.yaml new file mode 100644 index 0000000000..c5d4fceb9d --- /dev/null +++ b/tests/components/rgbw/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbw/test.esp32-idf.yaml b/tests/components/rgbw/test.esp32-idf.yaml new file mode 100644 index 0000000000..6e9e92a03c --- /dev/null +++ b/tests/components/rgbw/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbw/test.esp32.yaml b/tests/components/rgbw/test.esp32.yaml new file mode 100644 index 0000000000..6e9e92a03c --- /dev/null +++ b/tests/components/rgbw/test.esp32.yaml @@ -0,0 +1,22 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbw/test.esp8266.yaml b/tests/components/rgbw/test.esp8266.yaml new file mode 100644 index 0000000000..54098613e4 --- /dev/null +++ b/tests/components/rgbw/test.esp8266.yaml @@ -0,0 +1,22 @@ +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 12 + - platform: esp8266_pwm + id: light_output_2 + pin: 13 + - platform: esp8266_pwm + id: light_output_3 + pin: 14 + - platform: esp8266_pwm + id: light_output_4 + pin: 15 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbw/test.rp2040.yaml b/tests/components/rgbw/test.rp2040.yaml new file mode 100644 index 0000000000..6a4437b898 --- /dev/null +++ b/tests/components/rgbw/test.rp2040.yaml @@ -0,0 +1,22 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 12 + - platform: rp2040_pwm + id: light_output_2 + pin: 13 + - platform: rp2040_pwm + id: light_output_3 + pin: 14 + - platform: rp2040_pwm + id: light_output_4 + pin: 15 + +light: + - platform: rgbw + name: RGBW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + white: light_output_4 + color_interlock: true diff --git a/tests/components/rgbww/test.esp32-c3-idf.yaml b/tests/components/rgbww/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..49e9c7f331 --- /dev/null +++ b/tests/components/rgbww/test.esp32-c3-idf.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + - platform: ledc + id: light_output_5 + pin: 5 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbww/test.esp32-c3.yaml b/tests/components/rgbww/test.esp32-c3.yaml new file mode 100644 index 0000000000..49e9c7f331 --- /dev/null +++ b/tests/components/rgbww/test.esp32-c3.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 1 + - platform: ledc + id: light_output_2 + pin: 2 + - platform: ledc + id: light_output_3 + pin: 3 + - platform: ledc + id: light_output_4 + pin: 4 + - platform: ledc + id: light_output_5 + pin: 5 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbww/test.esp32-idf.yaml b/tests/components/rgbww/test.esp32-idf.yaml new file mode 100644 index 0000000000..c24b6b7746 --- /dev/null +++ b/tests/components/rgbww/test.esp32-idf.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + - platform: ledc + id: light_output_5 + pin: 16 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbww/test.esp32.yaml b/tests/components/rgbww/test.esp32.yaml new file mode 100644 index 0000000000..c24b6b7746 --- /dev/null +++ b/tests/components/rgbww/test.esp32.yaml @@ -0,0 +1,28 @@ +output: + - platform: ledc + id: light_output_1 + pin: 12 + - platform: ledc + id: light_output_2 + pin: 13 + - platform: ledc + id: light_output_3 + pin: 14 + - platform: ledc + id: light_output_4 + pin: 15 + - platform: ledc + id: light_output_5 + pin: 16 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbww/test.esp8266.yaml b/tests/components/rgbww/test.esp8266.yaml new file mode 100644 index 0000000000..4ea26e6526 --- /dev/null +++ b/tests/components/rgbww/test.esp8266.yaml @@ -0,0 +1,28 @@ +output: + - platform: esp8266_pwm + id: light_output_1 + pin: 12 + - platform: esp8266_pwm + id: light_output_2 + pin: 13 + - platform: esp8266_pwm + id: light_output_3 + pin: 14 + - platform: esp8266_pwm + id: light_output_4 + pin: 15 + - platform: esp8266_pwm + id: light_output_5 + pin: 16 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rgbww/test.rp2040.yaml b/tests/components/rgbww/test.rp2040.yaml new file mode 100644 index 0000000000..0986f06e78 --- /dev/null +++ b/tests/components/rgbww/test.rp2040.yaml @@ -0,0 +1,28 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 12 + - platform: rp2040_pwm + id: light_output_2 + pin: 13 + - platform: rp2040_pwm + id: light_output_3 + pin: 14 + - platform: rp2040_pwm + id: light_output_4 + pin: 15 + - platform: rp2040_pwm + id: light_output_5 + pin: 16 + +light: + - platform: rgbww + name: RGBWW Light + red: light_output_1 + green: light_output_2 + blue: light_output_3 + cold_white: light_output_4 + warm_white: light_output_5 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + color_interlock: true diff --git a/tests/components/rotary_encoder/test.esp32-c3-idf.yaml b/tests/components/rotary_encoder/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..59f8b56abf --- /dev/null +++ b/tests/components/rotary_encoder/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 3 + pin_b: 4 + pin_reset: 5 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rotary_encoder/test.esp32-c3.yaml b/tests/components/rotary_encoder/test.esp32-c3.yaml new file mode 100644 index 0000000000..59f8b56abf --- /dev/null +++ b/tests/components/rotary_encoder/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 3 + pin_b: 4 + pin_reset: 5 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rotary_encoder/test.esp32-idf.yaml b/tests/components/rotary_encoder/test.esp32-idf.yaml new file mode 100644 index 0000000000..da3843f82d --- /dev/null +++ b/tests/components/rotary_encoder/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 13 + pin_b: 14 + pin_reset: 15 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rotary_encoder/test.esp32.yaml b/tests/components/rotary_encoder/test.esp32.yaml new file mode 100644 index 0000000000..da3843f82d --- /dev/null +++ b/tests/components/rotary_encoder/test.esp32.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 13 + pin_b: 14 + pin_reset: 15 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rotary_encoder/test.esp8266.yaml b/tests/components/rotary_encoder/test.esp8266.yaml new file mode 100644 index 0000000000..da3843f82d --- /dev/null +++ b/tests/components/rotary_encoder/test.esp8266.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 13 + pin_b: 14 + pin_reset: 15 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rotary_encoder/test.rp2040.yaml b/tests/components/rotary_encoder/test.rp2040.yaml new file mode 100644 index 0000000000..da3843f82d --- /dev/null +++ b/tests/components/rotary_encoder/test.rp2040.yaml @@ -0,0 +1,25 @@ +sensor: + - platform: rotary_encoder + name: Rotary Encoder + id: rotary_encoder1 + pin_a: 13 + pin_b: 14 + pin_reset: 15 + filters: + - or: + - debounce: 0.1s + - delta: 10 + resolution: 4 + min_value: -10 + max_value: 30 + on_value: + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: 10 + - sensor.rotary_encoder.set_value: + id: rotary_encoder1 + value: !lambda "return -1;" + on_clockwise: + - logger.log: Clockwise + on_anticlockwise: + - logger.log: Anticlockwise diff --git a/tests/components/rp2040_pio_led_strip/test.rp2040.yaml b/tests/components/rp2040_pio_led_strip/test.rp2040.yaml new file mode 100644 index 0000000000..b9b1436cdb --- /dev/null +++ b/tests/components/rp2040_pio_led_strip/test.rp2040.yaml @@ -0,0 +1,18 @@ +light: + - platform: rp2040_pio_led_strip + id: led_strip + pin: 4 + num_leds: 60 + pio: 0 + rgb_order: GRB + chipset: WS2812 + - platform: rp2040_pio_led_strip + id: led_strip_custom_timings + pin: 5 + num_leds: 60 + pio: 1 + rgb_order: GRB + bit0_high: .1us + bit0_low: 1.2us + bit1_high: .69us + bit1_low: .4us diff --git a/tests/components/rp2040_pwm/test.rp2040.yaml b/tests/components/rp2040_pwm/test.rp2040.yaml new file mode 100644 index 0000000000..45c039106f --- /dev/null +++ b/tests/components/rp2040_pwm/test.rp2040.yaml @@ -0,0 +1,7 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 2 + - platform: rp2040_pwm + id: light_output_2 + pin: 3 diff --git a/tests/components/rtttl/test.esp32-c3-idf.yaml b/tests/components/rtttl/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c525f417de --- /dev/null +++ b/tests/components/rtttl/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: ledc + id: rtttl_output + pin: 1 + frequency: 1500Hz + channel: 14 + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/rtttl/test.esp32-c3.yaml b/tests/components/rtttl/test.esp32-c3.yaml new file mode 100644 index 0000000000..c525f417de --- /dev/null +++ b/tests/components/rtttl/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: ledc + id: rtttl_output + pin: 1 + frequency: 1500Hz + channel: 14 + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/rtttl/test.esp32-idf.yaml b/tests/components/rtttl/test.esp32-idf.yaml new file mode 100644 index 0000000000..367a670741 --- /dev/null +++ b/tests/components/rtttl/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: ledc + id: rtttl_output + pin: 13 + frequency: 1500Hz + channel: 14 + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/rtttl/test.esp32.yaml b/tests/components/rtttl/test.esp32.yaml new file mode 100644 index 0000000000..367a670741 --- /dev/null +++ b/tests/components/rtttl/test.esp32.yaml @@ -0,0 +1,16 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: ledc + id: rtttl_output + pin: 13 + frequency: 1500Hz + channel: 14 + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/rtttl/test.esp8266.yaml b/tests/components/rtttl/test.esp8266.yaml new file mode 100644 index 0000000000..c3b87c0f72 --- /dev/null +++ b/tests/components/rtttl/test.esp8266.yaml @@ -0,0 +1,15 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: esp8266_pwm + id: rtttl_output + pin: 13 + frequency: 1500Hz + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/rtttl/test.rp2040.yaml b/tests/components/rtttl/test.rp2040.yaml new file mode 100644 index 0000000000..ea240aa34d --- /dev/null +++ b/tests/components/rtttl/test.rp2040.yaml @@ -0,0 +1,15 @@ +esphome: + on_boot: + then: + - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e' + - rtttl.stop + +output: + - platform: rp2040_pwm + id: rtttl_output + pin: 3 + frequency: 1500Hz + max_power: 0.5 + +rtttl: + output: rtttl_output diff --git a/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml b/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..1f155fd8e1 --- /dev/null +++ b/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +ruuvi_ble: diff --git a/tests/components/ruuvi_ble/test.esp32-c3.yaml b/tests/components/ruuvi_ble/test.esp32-c3.yaml new file mode 100644 index 0000000000..1f155fd8e1 --- /dev/null +++ b/tests/components/ruuvi_ble/test.esp32-c3.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +ruuvi_ble: diff --git a/tests/components/ruuvi_ble/test.esp32-idf.yaml b/tests/components/ruuvi_ble/test.esp32-idf.yaml new file mode 100644 index 0000000000..1f155fd8e1 --- /dev/null +++ b/tests/components/ruuvi_ble/test.esp32-idf.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +ruuvi_ble: diff --git a/tests/components/ruuvi_ble/test.esp32.yaml b/tests/components/ruuvi_ble/test.esp32.yaml new file mode 100644 index 0000000000..1f155fd8e1 --- /dev/null +++ b/tests/components/ruuvi_ble/test.esp32.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +ruuvi_ble: diff --git a/tests/components/ruuvitag/test.esp32-c3-idf.yaml b/tests/components/ruuvitag/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..7990617710 --- /dev/null +++ b/tests/components/ruuvitag/test.esp32-c3-idf.yaml @@ -0,0 +1,27 @@ +esp32_ble_tracker: + +sensor: + - platform: ruuvitag + mac_address: FF:56:D3:2F:7D:E8 + humidity: + name: RuuviTag Humidity + temperature: + name: RuuviTag Temperature + pressure: + name: RuuviTag Pressure + acceleration: + name: RuuviTag Acceleration + acceleration_x: + name: RuuviTag Acceleration X + acceleration_y: + name: RuuviTag Acceleration Y + acceleration_z: + name: RuuviTag Acceleration Z + battery_voltage: + name: RuuviTag Battery Voltage + tx_power: + name: RuuviTag TX Power + movement_counter: + name: RuuviTag Movement Counter + measurement_sequence_number: + name: RuuviTag Measurement Sequence Number diff --git a/tests/components/ruuvitag/test.esp32-c3.yaml b/tests/components/ruuvitag/test.esp32-c3.yaml new file mode 100644 index 0000000000..7990617710 --- /dev/null +++ b/tests/components/ruuvitag/test.esp32-c3.yaml @@ -0,0 +1,27 @@ +esp32_ble_tracker: + +sensor: + - platform: ruuvitag + mac_address: FF:56:D3:2F:7D:E8 + humidity: + name: RuuviTag Humidity + temperature: + name: RuuviTag Temperature + pressure: + name: RuuviTag Pressure + acceleration: + name: RuuviTag Acceleration + acceleration_x: + name: RuuviTag Acceleration X + acceleration_y: + name: RuuviTag Acceleration Y + acceleration_z: + name: RuuviTag Acceleration Z + battery_voltage: + name: RuuviTag Battery Voltage + tx_power: + name: RuuviTag TX Power + movement_counter: + name: RuuviTag Movement Counter + measurement_sequence_number: + name: RuuviTag Measurement Sequence Number diff --git a/tests/components/ruuvitag/test.esp32-idf.yaml b/tests/components/ruuvitag/test.esp32-idf.yaml new file mode 100644 index 0000000000..7990617710 --- /dev/null +++ b/tests/components/ruuvitag/test.esp32-idf.yaml @@ -0,0 +1,27 @@ +esp32_ble_tracker: + +sensor: + - platform: ruuvitag + mac_address: FF:56:D3:2F:7D:E8 + humidity: + name: RuuviTag Humidity + temperature: + name: RuuviTag Temperature + pressure: + name: RuuviTag Pressure + acceleration: + name: RuuviTag Acceleration + acceleration_x: + name: RuuviTag Acceleration X + acceleration_y: + name: RuuviTag Acceleration Y + acceleration_z: + name: RuuviTag Acceleration Z + battery_voltage: + name: RuuviTag Battery Voltage + tx_power: + name: RuuviTag TX Power + movement_counter: + name: RuuviTag Movement Counter + measurement_sequence_number: + name: RuuviTag Measurement Sequence Number diff --git a/tests/components/ruuvitag/test.esp32.yaml b/tests/components/ruuvitag/test.esp32.yaml new file mode 100644 index 0000000000..7990617710 --- /dev/null +++ b/tests/components/ruuvitag/test.esp32.yaml @@ -0,0 +1,27 @@ +esp32_ble_tracker: + +sensor: + - platform: ruuvitag + mac_address: FF:56:D3:2F:7D:E8 + humidity: + name: RuuviTag Humidity + temperature: + name: RuuviTag Temperature + pressure: + name: RuuviTag Pressure + acceleration: + name: RuuviTag Acceleration + acceleration_x: + name: RuuviTag Acceleration X + acceleration_y: + name: RuuviTag Acceleration Y + acceleration_z: + name: RuuviTag Acceleration Z + battery_voltage: + name: RuuviTag Battery Voltage + tx_power: + name: RuuviTag TX Power + movement_counter: + name: RuuviTag Movement Counter + measurement_sequence_number: + name: RuuviTag Measurement Sequence Number From 8cb809d84de843a5866760ccb05ba7d5a266347f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Apr 2024 17:22:14 +1200 Subject: [PATCH 061/313] [sn74hc595] Enforce type field to distinguish gpio vs spi mode (#6609) --- esphome/components/sn74hc595/__init__.py | 69 +++++++++---------- .../sn74hc595/test.esp32-c3-idf.yaml | 27 ++++++++ tests/components/sn74hc595/test.esp32-c3.yaml | 27 ++++++++ .../components/sn74hc595/test.esp32-idf.yaml | 27 ++++++++ tests/components/sn74hc595/test.esp32.yaml | 27 ++++++++ tests/components/sn74hc595/test.esp8266.yaml | 27 ++++++++ tests/components/sn74hc595/test.rp2040.yaml | 27 ++++++++ tests/test1.yaml | 1 + 8 files changed, 197 insertions(+), 35 deletions(-) create mode 100644 tests/components/sn74hc595/test.esp32-c3-idf.yaml create mode 100644 tests/components/sn74hc595/test.esp32-c3.yaml create mode 100644 tests/components/sn74hc595/test.esp32-idf.yaml create mode 100644 tests/components/sn74hc595/test.esp32.yaml create mode 100644 tests/components/sn74hc595/test.esp8266.yaml create mode 100644 tests/components/sn74hc595/test.rp2040.yaml diff --git a/esphome/components/sn74hc595/__init__.py b/esphome/components/sn74hc595/__init__.py index 11a6747656..e0cd5e70ad 100644 --- a/esphome/components/sn74hc595/__init__.py +++ b/esphome/components/sn74hc595/__init__.py @@ -4,14 +4,13 @@ from esphome import pins from esphome.components import spi from esphome.const import ( CONF_ID, - CONF_SPI_ID, CONF_NUMBER, CONF_INVERTED, CONF_DATA_PIN, CONF_CLOCK_PIN, CONF_OUTPUT, + CONF_TYPE, ) -from esphome.core import EsphomeError MULTI_CONF = True @@ -34,53 +33,53 @@ CONF_LATCH_PIN = "latch_pin" CONF_OE_PIN = "oe_pin" CONF_SR_COUNT = "sr_count" -CONFIG_SCHEMA = cv.Any( - cv.Schema( - { - cv.Required(CONF_ID): cv.declare_id(SN74HC595GPIOComponent), - cv.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema, - cv.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema, - cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, - cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, - cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), - } - ).extend(cv.COMPONENT_SCHEMA), - cv.Schema( - { - cv.Required(CONF_ID): cv.declare_id(SN74HC595SPIComponent), - cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, - cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, - cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), - } - ) - .extend(cv.COMPONENT_SCHEMA) - .extend(spi.spi_device_schema(cs_pin_required=False)) - .extend( - { - cv.Required(CONF_SPI_ID): cv.use_id(spi.SPIComponent), - } - ), - msg='Either "data_pin" and "clock_pin" must be set or "spi_id" must be set.', +TYPE_GPIO = "gpio" +TYPE_SPI = "spi" + +_COMMON_SCHEMA = cv.Schema( + { + cv.Required(CONF_LATCH_PIN): pins.gpio_output_pin_schema, + cv.Optional(CONF_OE_PIN): pins.gpio_output_pin_schema, + cv.Optional(CONF_SR_COUNT, default=1): cv.int_range(min=1, max=256), + } +) + +CONFIG_SCHEMA = cv.typed_schema( + { + TYPE_GPIO: _COMMON_SCHEMA.extend( + { + cv.Required(CONF_ID): cv.declare_id(SN74HC595GPIOComponent), + cv.Required(CONF_DATA_PIN): pins.gpio_output_pin_schema, + cv.Required(CONF_CLOCK_PIN): pins.gpio_output_pin_schema, + } + ).extend(cv.COMPONENT_SCHEMA), + TYPE_SPI: _COMMON_SCHEMA.extend( + { + cv.Required(CONF_ID): cv.declare_id(SN74HC595SPIComponent), + } + ) + .extend(cv.COMPONENT_SCHEMA) + .extend(spi.spi_device_schema(cs_pin_required=False)), + }, + default_type=TYPE_GPIO, ) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) - if CONF_DATA_PIN in config: + if config[CONF_TYPE] == TYPE_GPIO: data_pin = await cg.gpio_pin_expression(config[CONF_DATA_PIN]) cg.add(var.set_data_pin(data_pin)) clock_pin = await cg.gpio_pin_expression(config[CONF_CLOCK_PIN]) cg.add(var.set_clock_pin(clock_pin)) - elif CONF_SPI_ID in config: - await spi.register_spi_device(var, config) else: - raise EsphomeError("Not supported") + await spi.register_spi_device(var, config) latch_pin = await cg.gpio_pin_expression(config[CONF_LATCH_PIN]) cg.add(var.set_latch_pin(latch_pin)) - if CONF_OE_PIN in config: - oe_pin = await cg.gpio_pin_expression(config[CONF_OE_PIN]) + if oe_pin := config.get(CONF_OE_PIN): + oe_pin = await cg.gpio_pin_expression(oe_pin) cg.add(var.set_oe_pin(oe_pin)) cg.add(var.set_sr_count(config[CONF_SR_COUNT])) diff --git a/tests/components/sn74hc595/test.esp32-c3-idf.yaml b/tests/components/sn74hc595/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9b093899d3 --- /dev/null +++ b/tests/components/sn74hc595/test.esp32-c3-idf.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 0 + data_pin: 1 + latch_pin: 2 + oe_pin: 3 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 8 + oe_pin: 9 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/components/sn74hc595/test.esp32-c3.yaml b/tests/components/sn74hc595/test.esp32-c3.yaml new file mode 100644 index 0000000000..9b093899d3 --- /dev/null +++ b/tests/components/sn74hc595/test.esp32-c3.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 0 + data_pin: 1 + latch_pin: 2 + oe_pin: 3 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 8 + oe_pin: 9 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/components/sn74hc595/test.esp32-idf.yaml b/tests/components/sn74hc595/test.esp32-idf.yaml new file mode 100644 index 0000000000..f695395797 --- /dev/null +++ b/tests/components/sn74hc595/test.esp32-idf.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 12 + data_pin: 13 + latch_pin: 14 + oe_pin: 18 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 21 + oe_pin: 22 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/components/sn74hc595/test.esp32.yaml b/tests/components/sn74hc595/test.esp32.yaml new file mode 100644 index 0000000000..f695395797 --- /dev/null +++ b/tests/components/sn74hc595/test.esp32.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 12 + data_pin: 13 + latch_pin: 14 + oe_pin: 18 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 21 + oe_pin: 22 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/components/sn74hc595/test.esp8266.yaml b/tests/components/sn74hc595/test.esp8266.yaml new file mode 100644 index 0000000000..64bf5d1925 --- /dev/null +++ b/tests/components/sn74hc595/test.esp8266.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 0 + data_pin: 2 + latch_pin: 4 + oe_pin: 5 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 15 + oe_pin: 16 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/components/sn74hc595/test.rp2040.yaml b/tests/components/sn74hc595/test.rp2040.yaml new file mode 100644 index 0000000000..de8e192659 --- /dev/null +++ b/tests/components/sn74hc595/test.rp2040.yaml @@ -0,0 +1,27 @@ +spi: + - id: spi_sn74hc595 + clk_pin: 6 + mosi_pin: 5 + miso_pin: 4 + +sn74hc595: + - id: sn74hc595_hub + clock_pin: 0 + data_pin: 1 + latch_pin: 2 + oe_pin: 3 + sr_count: 2 + - id: sn74hc595_hub_2 + latch_pin: 8 + oe_pin: 9 + spi_id: spi_sn74hc595 + type: spi + sr_count: 2 + +switch: + - platform: gpio + name: SN74HC595 Pin 0 + pin: + sn74hc595: sn74hc595_hub_2 + number: 0 + inverted: false diff --git a/tests/test1.yaml b/tests/test1.yaml index c8ae9691c2..09994afa42 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -3996,6 +3996,7 @@ sn74hc595: number: GPIO32 sr_count: 2 spi_id: spi_bus + type: spi rtttl: output: gpio_19 From 06d3829b45911952a01c47b8a3961623ff1dab0b Mon Sep 17 00:00:00 2001 From: Samuel Sieb Date: Mon, 22 Apr 2024 23:43:11 -0700 Subject: [PATCH 062/313] allow defaults with no include vars (#6613) --- esphome/yaml_util.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/esphome/yaml_util.py b/esphome/yaml_util.py index c7aa78201f..06bfd8b217 100644 --- a/esphome/yaml_util.py +++ b/esphome/yaml_util.py @@ -321,8 +321,9 @@ class ESPHomeLoaderMixin: file, vars = node.value, None result = _load_yaml_internal(self._rel_path(file)) - if vars: - result = substitute_vars(result, vars) + if not vars: + vars = {} + result = substitute_vars(result, vars) return result @_add_data_ref From b1839702f914621a90cc4c30644c449d32e006f1 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 23 Apr 2024 21:19:10 +1200 Subject: [PATCH 063/313] [tests] Run yaml tests in groups if over 100 to run (#6612) --- .github/workflows/ci.yml | 81 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 15f0904df4..fd7a45ff50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -398,7 +398,8 @@ jobs: - common if: github.event_name == 'pull_request' outputs: - matrix: ${{ steps.set-matrix.outputs.matrix }} + components: ${{ steps.list-components.outputs.components }} + count: ${{ steps.list-components.outputs.count }} steps: - name: Check out code from GitHub uses: actions/checkout@v4.1.1 @@ -419,10 +420,18 @@ jobs: python-version: ${{ env.DEFAULT_PYTHON }} cache-key: ${{ needs.common.outputs.cache-key }} - name: Find changed components - id: set-matrix + id: list-components run: | . venv/bin/activate - echo "matrix=$(script/list-components.py --changed --branch ${{ steps.target-branch.outputs.branch }} | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT + components=$(script/list-components.py --changed --branch ${{ steps.target-branch.outputs.branch }}) + output_components=$(echo "$components" | jq -R -s -c 'split("\n")[:-1] | map(select(length > 0))') + count=$(echo "$output_components" | jq length) + + echo "components=$output_components" >> $GITHUB_OUTPUT + echo "count=$count" >> $GITHUB_OUTPUT + + echo "$count Components:" + echo "$output_components" | jq test-build-components: name: Component test ${{ matrix.file }} @@ -430,12 +439,12 @@ jobs: needs: - common - list-components - if: ${{ github.event_name == 'pull_request' && needs.list-components.outputs.matrix != '[]' && needs.list-components.outputs.matrix != '' }} + if: github.event_name == 'pull_request' && fromJSON(needs.list-components.outputs.count) > 0 && fromJSON(needs.list-components.outputs.count) < 100 strategy: fail-fast: false max-parallel: 2 matrix: - file: ${{ fromJson(needs.list-components.outputs.matrix) }} + file: ${{ fromJson(needs.list-components.outputs.components) }} steps: - name: Install libsodium run: sudo apt-get install libsodium-dev @@ -456,6 +465,64 @@ jobs: . venv/bin/activate ./script/test_build_components -e compile -c ${{ matrix.file }} + test-build-components-splitter: + name: Split components for testing into 20 groups maximum + runs-on: ubuntu-latest + needs: + - common + - list-components + if: github.event_name == 'pull_request' && fromJSON(needs.list-components.outputs.count) >= 100 + outputs: + matrix: ${{ steps.split.outputs.components }} + steps: + - name: Check out code from GitHub + uses: actions/checkout@v4.1.1 + - name: Split components into 20 groups + id: split + run: | + components=$(echo '${{ needs.list-components.outputs.components }}' | jq -c '.[]' | shuf | jq -s -c '[_nwise(20) | join(" ")]') + echo "components=$components" >> $GITHUB_OUTPUT + + test-build-components-split: + name: Test split components + runs-on: ubuntu-latest + needs: + - common + - list-components + - test-build-components-splitter + if: github.event_name == 'pull_request' && fromJSON(needs.list-components.outputs.count) >= 100 + strategy: + fail-fast: false + max-parallel: 4 + matrix: + components: ${{ fromJson(needs.test-build-components-splitter.outputs.matrix) }} + steps: + - name: List components + run: echo ${{ matrix.components }} + + - name: Install libsodium + run: sudo apt-get install libsodium-dev + + - name: Check out code from GitHub + uses: actions/checkout@v4.1.1 + - name: Restore Python + uses: ./.github/actions/restore-python + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache-key: ${{ needs.common.outputs.cache-key }} + - name: Validate config + run: | + . venv/bin/activate + for component in ${{ matrix.components }}; do + ./script/test_build_components -e config -c $component + done + - name: Compile config + run: | + . venv/bin/activate + for component in ${{ matrix.components }}; do + ./script/test_build_components -e compile -c $component + done + ci-status: name: CI Status runs-on: ubuntu-latest @@ -470,8 +537,10 @@ jobs: - pyupgrade - compile-tests - clang-tidy - - test-build-components - list-components + - test-build-components + - test-build-components-splitter + - test-build-components-split if: always() steps: - name: Success From 18149bc2762b284c17a0a0030691fa7566a9d1c4 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 23 Apr 2024 04:36:30 -0500 Subject: [PATCH 064/313] Add some components to the new testing framework (I) (#6185) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- tests/components/i2c/test.esp32-c3-idf.yaml | 4 ++ tests/components/i2c/test.esp32-c3.yaml | 4 ++ tests/components/i2c/test.esp32-idf.yaml | 4 ++ tests/components/i2c/test.esp32.yaml | 4 ++ tests/components/i2c/test.esp8266.yaml | 4 ++ tests/components/i2c/test.rp2040.yaml | 4 ++ .../i2s_audio/test.esp32-c3-idf.yaml | 4 ++ tests/components/i2s_audio/test.esp32-c3.yaml | 4 ++ .../components/i2s_audio/test.esp32-idf.yaml | 4 ++ tests/components/i2s_audio/test.esp32.yaml | 4 ++ .../components/iaqcore/test.esp32-c3-idf.yaml | 11 ++++ tests/components/iaqcore/test.esp32-c3.yaml | 11 ++++ tests/components/iaqcore/test.esp32-idf.yaml | 11 ++++ tests/components/iaqcore/test.esp32.yaml | 11 ++++ tests/components/iaqcore/test.esp8266.yaml | 11 ++++ tests/components/iaqcore/test.rp2040.yaml | 11 ++++ .../components/ili9xxx/test.esp32-c3-idf.yaml | 35 +++++++++++ tests/components/ili9xxx/test.esp32-c3.yaml | 35 +++++++++++ tests/components/ili9xxx/test.esp32-idf.yaml | 35 +++++++++++ tests/components/ili9xxx/test.esp32.yaml | 37 ++++++++--- tests/components/ili9xxx/test.esp8266.yaml | 35 +++++++++++ tests/components/ili9xxx/test.rp2040.yaml | 35 +++++++++++ tests/components/image/test.esp32-c3-idf.yaml | 52 ++++++++++++++++ tests/components/image/test.esp32-c3.yaml | 52 ++++++++++++++++ tests/components/image/test.esp32-idf.yaml | 52 ++++++++++++++++ tests/components/image/test.esp32.yaml | 52 ++++++++++++++++ tests/components/image/test.esp8266.yaml | 52 ++++++++++++++++ tests/components/image/test.rp2040.yaml | 52 ++++++++++++++++ .../improv_serial/test.esp32-c3-idf.yaml | 5 ++ .../improv_serial/test.esp32-c3.yaml | 5 ++ .../improv_serial/test.esp32-idf.yaml | 5 ++ .../components/improv_serial/test.esp32.yaml | 5 ++ .../improv_serial/test.esp8266.yaml | 5 ++ .../components/improv_serial/test.rp2040.yaml | 5 ++ .../components/ina219/test.esp32-c3-idf.yaml | 20 ++++++ tests/components/ina219/test.esp32-c3.yaml | 20 ++++++ tests/components/ina219/test.esp32-idf.yaml | 20 ++++++ tests/components/ina219/test.esp32.yaml | 20 ++++++ tests/components/ina219/test.esp8266.yaml | 20 ++++++ tests/components/ina219/test.rp2040.yaml | 20 ++++++ .../components/ina226/test.esp32-c3-idf.yaml | 19 ++++++ tests/components/ina226/test.esp32-c3.yaml | 19 ++++++ tests/components/ina226/test.esp32-idf.yaml | 19 ++++++ tests/components/ina226/test.esp32.yaml | 19 ++++++ tests/components/ina226/test.esp8266.yaml | 19 ++++++ tests/components/ina226/test.rp2040.yaml | 19 ++++++ .../components/ina260/test.esp32-c3-idf.yaml | 15 +++++ tests/components/ina260/test.esp32-c3.yaml | 15 +++++ tests/components/ina260/test.esp32-idf.yaml | 15 +++++ tests/components/ina260/test.esp32.yaml | 15 +++++ tests/components/ina260/test.esp8266.yaml | 15 +++++ tests/components/ina260/test.rp2040.yaml | 15 +++++ .../components/ina3221/test.esp32-c3-idf.yaml | 19 ++++++ tests/components/ina3221/test.esp32-c3.yaml | 19 ++++++ tests/components/ina3221/test.esp32-idf.yaml | 19 ++++++ tests/components/ina3221/test.esp32.yaml | 19 ++++++ tests/components/ina3221/test.esp8266.yaml | 19 ++++++ tests/components/ina3221/test.rp2040.yaml | 19 ++++++ .../test.esp32-c3-idf.yaml | 11 ++++ .../inkbird_ibsth1_mini/test.esp32-c3.yaml | 11 ++++ .../inkbird_ibsth1_mini/test.esp32-idf.yaml | 11 ++++ .../inkbird_ibsth1_mini/test.esp32.yaml | 11 ++++ tests/components/inkplate6/test.esp32.yaml | 62 +++++++++++++++++++ .../components/integration/test.esp32-c3.yaml | 9 +++ .../integration/test.esp32-idf.yaml | 9 +++ .../components/integration/test.esp32-s2.yaml | 9 +++ .../components/integration/test.esp32-s3.yaml | 9 +++ tests/components/integration/test.esp32.yaml | 9 +++ .../components/integration/test.esp8266.yaml | 8 +++ tests/components/integration/test.rp2040.yaml | 8 +++ .../internal_temperature/test.esp32-c3.yaml | 2 +- .../internal_temperature/test.esp32-idf.yaml | 2 +- .../internal_temperature/test.esp32-s2.yaml | 3 + .../internal_temperature/test.esp32-s3.yaml | 7 +++ .../internal_temperature/test.esp32.yaml | 2 +- .../internal_temperature/test.rp2040.yaml | 2 +- .../interval/test.esp32-c3-idf.yaml | 4 ++ tests/components/interval/test.esp32-c3.yaml | 4 ++ tests/components/interval/test.esp32-idf.yaml | 4 ++ tests/components/interval/test.esp32.yaml | 4 ++ tests/components/interval/test.esp8266.yaml | 4 ++ tests/components/interval/test.rp2040.yaml | 4 ++ 82 files changed, 1296 insertions(+), 11 deletions(-) create mode 100644 tests/components/i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/i2c/test.esp32-c3.yaml create mode 100644 tests/components/i2c/test.esp32-idf.yaml create mode 100644 tests/components/i2c/test.esp32.yaml create mode 100644 tests/components/i2c/test.esp8266.yaml create mode 100644 tests/components/i2c/test.rp2040.yaml create mode 100644 tests/components/i2s_audio/test.esp32-c3-idf.yaml create mode 100644 tests/components/i2s_audio/test.esp32-c3.yaml create mode 100644 tests/components/i2s_audio/test.esp32-idf.yaml create mode 100644 tests/components/i2s_audio/test.esp32.yaml create mode 100644 tests/components/iaqcore/test.esp32-c3-idf.yaml create mode 100644 tests/components/iaqcore/test.esp32-c3.yaml create mode 100644 tests/components/iaqcore/test.esp32-idf.yaml create mode 100644 tests/components/iaqcore/test.esp32.yaml create mode 100644 tests/components/iaqcore/test.esp8266.yaml create mode 100644 tests/components/iaqcore/test.rp2040.yaml create mode 100644 tests/components/ili9xxx/test.esp32-c3-idf.yaml create mode 100644 tests/components/ili9xxx/test.esp32-c3.yaml create mode 100644 tests/components/ili9xxx/test.esp32-idf.yaml create mode 100644 tests/components/ili9xxx/test.esp8266.yaml create mode 100644 tests/components/ili9xxx/test.rp2040.yaml create mode 100644 tests/components/image/test.esp32-c3-idf.yaml create mode 100644 tests/components/image/test.esp32-c3.yaml create mode 100644 tests/components/image/test.esp32-idf.yaml create mode 100644 tests/components/image/test.esp32.yaml create mode 100644 tests/components/image/test.esp8266.yaml create mode 100644 tests/components/image/test.rp2040.yaml create mode 100644 tests/components/improv_serial/test.esp32-c3-idf.yaml create mode 100644 tests/components/improv_serial/test.esp32-c3.yaml create mode 100644 tests/components/improv_serial/test.esp32-idf.yaml create mode 100644 tests/components/improv_serial/test.esp32.yaml create mode 100644 tests/components/improv_serial/test.esp8266.yaml create mode 100644 tests/components/improv_serial/test.rp2040.yaml create mode 100644 tests/components/ina219/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina219/test.esp32-c3.yaml create mode 100644 tests/components/ina219/test.esp32-idf.yaml create mode 100644 tests/components/ina219/test.esp32.yaml create mode 100644 tests/components/ina219/test.esp8266.yaml create mode 100644 tests/components/ina219/test.rp2040.yaml create mode 100644 tests/components/ina226/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina226/test.esp32-c3.yaml create mode 100644 tests/components/ina226/test.esp32-idf.yaml create mode 100644 tests/components/ina226/test.esp32.yaml create mode 100644 tests/components/ina226/test.esp8266.yaml create mode 100644 tests/components/ina226/test.rp2040.yaml create mode 100644 tests/components/ina260/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina260/test.esp32-c3.yaml create mode 100644 tests/components/ina260/test.esp32-idf.yaml create mode 100644 tests/components/ina260/test.esp32.yaml create mode 100644 tests/components/ina260/test.esp8266.yaml create mode 100644 tests/components/ina260/test.rp2040.yaml create mode 100644 tests/components/ina3221/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina3221/test.esp32-c3.yaml create mode 100644 tests/components/ina3221/test.esp32-idf.yaml create mode 100644 tests/components/ina3221/test.esp32.yaml create mode 100644 tests/components/ina3221/test.esp8266.yaml create mode 100644 tests/components/ina3221/test.rp2040.yaml create mode 100644 tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml create mode 100644 tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml create mode 100644 tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml create mode 100644 tests/components/inkbird_ibsth1_mini/test.esp32.yaml create mode 100644 tests/components/inkplate6/test.esp32.yaml create mode 100644 tests/components/integration/test.esp32-c3.yaml create mode 100644 tests/components/integration/test.esp32-idf.yaml create mode 100644 tests/components/integration/test.esp32-s2.yaml create mode 100644 tests/components/integration/test.esp32-s3.yaml create mode 100644 tests/components/integration/test.esp32.yaml create mode 100644 tests/components/integration/test.esp8266.yaml create mode 100644 tests/components/integration/test.rp2040.yaml create mode 100644 tests/components/internal_temperature/test.esp32-s2.yaml create mode 100644 tests/components/internal_temperature/test.esp32-s3.yaml create mode 100644 tests/components/interval/test.esp32-c3-idf.yaml create mode 100644 tests/components/interval/test.esp32-c3.yaml create mode 100644 tests/components/interval/test.esp32-idf.yaml create mode 100644 tests/components/interval/test.esp32.yaml create mode 100644 tests/components/interval/test.esp8266.yaml create mode 100644 tests/components/interval/test.rp2040.yaml diff --git a/tests/components/i2c/test.esp32-c3-idf.yaml b/tests/components/i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a881438faa --- /dev/null +++ b/tests/components/i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 5 + sda: 4 diff --git a/tests/components/i2c/test.esp32-c3.yaml b/tests/components/i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..a881438faa --- /dev/null +++ b/tests/components/i2c/test.esp32-c3.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 5 + sda: 4 diff --git a/tests/components/i2c/test.esp32-idf.yaml b/tests/components/i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..19114a9e5d --- /dev/null +++ b/tests/components/i2c/test.esp32-idf.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 16 + sda: 17 diff --git a/tests/components/i2c/test.esp32.yaml b/tests/components/i2c/test.esp32.yaml new file mode 100644 index 0000000000..19114a9e5d --- /dev/null +++ b/tests/components/i2c/test.esp32.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 16 + sda: 17 diff --git a/tests/components/i2c/test.esp8266.yaml b/tests/components/i2c/test.esp8266.yaml new file mode 100644 index 0000000000..a881438faa --- /dev/null +++ b/tests/components/i2c/test.esp8266.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 5 + sda: 4 diff --git a/tests/components/i2c/test.rp2040.yaml b/tests/components/i2c/test.rp2040.yaml new file mode 100644 index 0000000000..a881438faa --- /dev/null +++ b/tests/components/i2c/test.rp2040.yaml @@ -0,0 +1,4 @@ +i2c: + - id: i2c_i2c + scl: 5 + sda: 4 diff --git a/tests/components/i2s_audio/test.esp32-c3-idf.yaml b/tests/components/i2s_audio/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..08cd56b1a7 --- /dev/null +++ b/tests/components/i2s_audio/test.esp32-c3-idf.yaml @@ -0,0 +1,4 @@ +i2s_audio: + i2s_bclk_pin: 7 + i2s_lrclk_pin: 6 + i2s_mclk_pin: 5 diff --git a/tests/components/i2s_audio/test.esp32-c3.yaml b/tests/components/i2s_audio/test.esp32-c3.yaml new file mode 100644 index 0000000000..08cd56b1a7 --- /dev/null +++ b/tests/components/i2s_audio/test.esp32-c3.yaml @@ -0,0 +1,4 @@ +i2s_audio: + i2s_bclk_pin: 7 + i2s_lrclk_pin: 6 + i2s_mclk_pin: 5 diff --git a/tests/components/i2s_audio/test.esp32-idf.yaml b/tests/components/i2s_audio/test.esp32-idf.yaml new file mode 100644 index 0000000000..938dd5c25f --- /dev/null +++ b/tests/components/i2s_audio/test.esp32-idf.yaml @@ -0,0 +1,4 @@ +i2s_audio: + i2s_bclk_pin: 27 + i2s_lrclk_pin: 26 + i2s_mclk_pin: 25 diff --git a/tests/components/i2s_audio/test.esp32.yaml b/tests/components/i2s_audio/test.esp32.yaml new file mode 100644 index 0000000000..938dd5c25f --- /dev/null +++ b/tests/components/i2s_audio/test.esp32.yaml @@ -0,0 +1,4 @@ +i2s_audio: + i2s_bclk_pin: 27 + i2s_lrclk_pin: 26 + i2s_mclk_pin: 25 diff --git a/tests/components/iaqcore/test.esp32-c3-idf.yaml b/tests/components/iaqcore/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a1809dffd7 --- /dev/null +++ b/tests/components/iaqcore/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 5 + sda: 4 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/iaqcore/test.esp32-c3.yaml b/tests/components/iaqcore/test.esp32-c3.yaml new file mode 100644 index 0000000000..a1809dffd7 --- /dev/null +++ b/tests/components/iaqcore/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 5 + sda: 4 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/iaqcore/test.esp32-idf.yaml b/tests/components/iaqcore/test.esp32-idf.yaml new file mode 100644 index 0000000000..26b01dadf9 --- /dev/null +++ b/tests/components/iaqcore/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 16 + sda: 17 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/iaqcore/test.esp32.yaml b/tests/components/iaqcore/test.esp32.yaml new file mode 100644 index 0000000000..26b01dadf9 --- /dev/null +++ b/tests/components/iaqcore/test.esp32.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 16 + sda: 17 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/iaqcore/test.esp8266.yaml b/tests/components/iaqcore/test.esp8266.yaml new file mode 100644 index 0000000000..a1809dffd7 --- /dev/null +++ b/tests/components/iaqcore/test.esp8266.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 5 + sda: 4 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/iaqcore/test.rp2040.yaml b/tests/components/iaqcore/test.rp2040.yaml new file mode 100644 index 0000000000..a1809dffd7 --- /dev/null +++ b/tests/components/iaqcore/test.rp2040.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_iaqcore + scl: 5 + sda: 4 + +sensor: + - platform: iaqcore + co2: + name: iAQ Core CO2 Sensor + tvoc: + name: iAQ Core TVOC Sensor diff --git a/tests/components/ili9xxx/test.esp32-c3-idf.yaml b/tests/components/ili9xxx/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9526ae1f6b --- /dev/null +++ b/tests/components/ili9xxx/test.esp32-c3-idf.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ili9xxx + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 8 + dc_pin: 9 + reset_pin: 10 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/ili9xxx/test.esp32-c3.yaml b/tests/components/ili9xxx/test.esp32-c3.yaml new file mode 100644 index 0000000000..9526ae1f6b --- /dev/null +++ b/tests/components/ili9xxx/test.esp32-c3.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ili9xxx + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 8 + dc_pin: 9 + reset_pin: 10 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/ili9xxx/test.esp32-idf.yaml b/tests/components/ili9xxx/test.esp32-idf.yaml new file mode 100644 index 0000000000..0d7bda8ac6 --- /dev/null +++ b/tests/components/ili9xxx/test.esp32-idf.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ili9xxx + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 25 + dc_pin: 26 + reset_pin: 27 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/ili9xxx/test.esp32.yaml b/tests/components/ili9xxx/test.esp32.yaml index 1095d565d2..ecee21686e 100644 --- a/tests/components/ili9xxx/test.esp32.yaml +++ b/tests/components/ili9xxx/test.esp32.yaml @@ -1,11 +1,34 @@ spi: - mosi_pin: GPIO23 - clk_pin: GPIO18 + - id: spi_main_lcd + clk_pin: 16 + mosi_pin: 17 display: - platform: ili9xxx - model: gc9a01a - id: gca901_display - cs_pin: GPIO5 - dc_pin: GPIO22 - reset_pin: GPIO21 + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 25 + dc_pin: 26 + reset_pin: 27 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/ili9xxx/test.esp8266.yaml b/tests/components/ili9xxx/test.esp8266.yaml new file mode 100644 index 0000000000..0791c25aca --- /dev/null +++ b/tests/components/ili9xxx/test.esp8266.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ili9xxx + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 5 + dc_pin: 15 + reset_pin: 16 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 2 + dc_pin: 4 + reset_pin: 0 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/ili9xxx/test.rp2040.yaml b/tests/components/ili9xxx/test.rp2040.yaml new file mode 100644 index 0000000000..54083ebce8 --- /dev/null +++ b/tests/components/ili9xxx/test.rp2040.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ili9xxx + invert_colors: true + dimensions: 320x240 + transform: + swap_xy: true + mirror_x: true + mirror_y: false + model: TFT 2.4 + color_palette: GRAYSCALE + cs_pin: 5 + dc_pin: 15 + reset_pin: 16 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: ili9xxx + dimensions: + width: 320 + height: 240 + offset_width: 20 + offset_height: 10 + model: TFT 2.4 + cs_pin: 20 + dc_pin: 21 + reset_pin: 22 + auto_clear_enabled: false + rotation: 90 + lambda: |- + it.fill(Color::WHITE); diff --git a/tests/components/image/test.esp32-c3-idf.yaml b/tests/components/image/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c083a97c94 --- /dev/null +++ b/tests/components/image/test.esp32-c3-idf.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 8 + dc_pin: 9 + reset_pin: 10 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/image/test.esp32-c3.yaml b/tests/components/image/test.esp32-c3.yaml new file mode 100644 index 0000000000..c083a97c94 --- /dev/null +++ b/tests/components/image/test.esp32-c3.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 8 + dc_pin: 9 + reset_pin: 10 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/image/test.esp32-idf.yaml b/tests/components/image/test.esp32-idf.yaml new file mode 100644 index 0000000000..ff9adde6b1 --- /dev/null +++ b/tests/components/image/test.esp32-idf.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 12 + dc_pin: 13 + reset_pin: 21 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/image/test.esp32.yaml b/tests/components/image/test.esp32.yaml new file mode 100644 index 0000000000..ff9adde6b1 --- /dev/null +++ b/tests/components/image/test.esp32.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 12 + dc_pin: 13 + reset_pin: 21 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/image/test.esp8266.yaml b/tests/components/image/test.esp8266.yaml new file mode 100644 index 0000000000..3632b95485 --- /dev/null +++ b/tests/components/image/test.esp8266.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 5 + dc_pin: 15 + reset_pin: 16 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/image/test.rp2040.yaml b/tests/components/image/test.rp2040.yaml new file mode 100644 index 0000000000..b79c8a9195 --- /dev/null +++ b/tests/components/image/test.rp2040.yaml @@ -0,0 +1,52 @@ +spi: + - id: spi_main_lcd + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 20 + dc_pin: 21 + reset_pin: 22 + +image: + - id: binary_image + file: ../../pnglogo.png + type: BINARY + dither: FloydSteinberg + - id: transparent_transparent_image + file: ../../pnglogo.png + type: TRANSPARENT_BINARY + - id: rgba_image + file: ../../pnglogo.png + type: RGBA + resize: 50x50 + - id: rgb24_image + file: ../../pnglogo.png + type: RGB24 + use_transparency: yes + - id: rgb565_image + file: ../../pnglogo.png + type: RGB565 + use_transparency: no + - id: web_svg_image + file: https://raw.githubusercontent.com/esphome/esphome-docs/a62d7ab193c1a464ed791670170c7d518189109b/images/logo.svg + resize: 256x48 + type: TRANSPARENT_BINARY + - id: web_tiff_image + file: https://upload.wikimedia.org/wikipedia/commons/b/b6/SIPI_Jelly_Beans_4.1.07.tiff + type: RGB24 + resize: 48x48 + - id: web_redirect_image + file: https://avatars.githubusercontent.com/u/3060199?s=48&v=4 + type: RGB24 + resize: 48x48 + - id: mdi_alert + file: mdi:alert-circle-outline + resize: 50x50 + - id: another_alert_icon + file: mdi:alert-outline + type: BINARY diff --git a/tests/components/improv_serial/test.esp32-c3-idf.yaml b/tests/components/improv_serial/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.esp32-c3-idf.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.esp32-c3.yaml b/tests/components/improv_serial/test.esp32-c3.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.esp32-c3.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.esp32-idf.yaml b/tests/components/improv_serial/test.esp32-idf.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.esp32.yaml b/tests/components/improv_serial/test.esp32.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.esp32.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.esp8266.yaml b/tests/components/improv_serial/test.esp8266.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.esp8266.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.rp2040.yaml b/tests/components/improv_serial/test.rp2040.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/test.rp2040.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/ina219/test.esp32-c3-idf.yaml b/tests/components/ina219/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..586add9d16 --- /dev/null +++ b/tests/components/ina219/test.esp32-c3-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 5 + sda: 4 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina219/test.esp32-c3.yaml b/tests/components/ina219/test.esp32-c3.yaml new file mode 100644 index 0000000000..586add9d16 --- /dev/null +++ b/tests/components/ina219/test.esp32-c3.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 5 + sda: 4 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina219/test.esp32-idf.yaml b/tests/components/ina219/test.esp32-idf.yaml new file mode 100644 index 0000000000..affbec67c4 --- /dev/null +++ b/tests/components/ina219/test.esp32-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 16 + sda: 17 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina219/test.esp32.yaml b/tests/components/ina219/test.esp32.yaml new file mode 100644 index 0000000000..affbec67c4 --- /dev/null +++ b/tests/components/ina219/test.esp32.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 16 + sda: 17 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina219/test.esp8266.yaml b/tests/components/ina219/test.esp8266.yaml new file mode 100644 index 0000000000..586add9d16 --- /dev/null +++ b/tests/components/ina219/test.esp8266.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 5 + sda: 4 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina219/test.rp2040.yaml b/tests/components/ina219/test.rp2040.yaml new file mode 100644 index 0000000000..586add9d16 --- /dev/null +++ b/tests/components/ina219/test.rp2040.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina219 + scl: 5 + sda: 4 + +sensor: + - platform: ina219 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA219 Current + power: + name: INA219 Power + bus_voltage: + name: INA219 Bus Voltage + shunt_voltage: + name: INA219 Shunt Voltage + max_voltage: 32.0V + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.esp32-c3-idf.yaml b/tests/components/ina226/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..6581763294 --- /dev/null +++ b/tests/components/ina226/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 5 + sda: 4 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.esp32-c3.yaml b/tests/components/ina226/test.esp32-c3.yaml new file mode 100644 index 0000000000..6581763294 --- /dev/null +++ b/tests/components/ina226/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 5 + sda: 4 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.esp32-idf.yaml b/tests/components/ina226/test.esp32-idf.yaml new file mode 100644 index 0000000000..feab5e146c --- /dev/null +++ b/tests/components/ina226/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 16 + sda: 17 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.esp32.yaml b/tests/components/ina226/test.esp32.yaml new file mode 100644 index 0000000000..feab5e146c --- /dev/null +++ b/tests/components/ina226/test.esp32.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 16 + sda: 17 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.esp8266.yaml b/tests/components/ina226/test.esp8266.yaml new file mode 100644 index 0000000000..6581763294 --- /dev/null +++ b/tests/components/ina226/test.esp8266.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 5 + sda: 4 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina226/test.rp2040.yaml b/tests/components/ina226/test.rp2040.yaml new file mode 100644 index 0000000000..6581763294 --- /dev/null +++ b/tests/components/ina226/test.rp2040.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina226 + scl: 5 + sda: 4 + +sensor: + - platform: ina226 + address: 0x40 + shunt_resistance: 0.1 ohm + current: + name: INA226 Current + power: + name: INA226 Power + bus_voltage: + name: INA226 Bus Voltage + shunt_voltage: + name: INA226 Shunt Voltage + max_current: 3.2A + update_interval: 15s diff --git a/tests/components/ina260/test.esp32-c3-idf.yaml b/tests/components/ina260/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a1da63351d --- /dev/null +++ b/tests/components/ina260/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 5 + sda: 4 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina260/test.esp32-c3.yaml b/tests/components/ina260/test.esp32-c3.yaml new file mode 100644 index 0000000000..a1da63351d --- /dev/null +++ b/tests/components/ina260/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 5 + sda: 4 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina260/test.esp32-idf.yaml b/tests/components/ina260/test.esp32-idf.yaml new file mode 100644 index 0000000000..be6cf73bff --- /dev/null +++ b/tests/components/ina260/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 16 + sda: 17 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina260/test.esp32.yaml b/tests/components/ina260/test.esp32.yaml new file mode 100644 index 0000000000..be6cf73bff --- /dev/null +++ b/tests/components/ina260/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 16 + sda: 17 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina260/test.esp8266.yaml b/tests/components/ina260/test.esp8266.yaml new file mode 100644 index 0000000000..a1da63351d --- /dev/null +++ b/tests/components/ina260/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 5 + sda: 4 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina260/test.rp2040.yaml b/tests/components/ina260/test.rp2040.yaml new file mode 100644 index 0000000000..a1da63351d --- /dev/null +++ b/tests/components/ina260/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ina260 + scl: 5 + sda: 4 + +sensor: + - platform: ina260 + address: 0x40 + current: + name: INA260 Current + power: + name: INA260 Power + bus_voltage: + name: INA260 Voltage + update_interval: 60s diff --git a/tests/components/ina3221/test.esp32-c3-idf.yaml b/tests/components/ina3221/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..55990871a0 --- /dev/null +++ b/tests/components/ina3221/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 5 + sda: 4 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/ina3221/test.esp32-c3.yaml b/tests/components/ina3221/test.esp32-c3.yaml new file mode 100644 index 0000000000..55990871a0 --- /dev/null +++ b/tests/components/ina3221/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 5 + sda: 4 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/ina3221/test.esp32-idf.yaml b/tests/components/ina3221/test.esp32-idf.yaml new file mode 100644 index 0000000000..ad9cf79e38 --- /dev/null +++ b/tests/components/ina3221/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 16 + sda: 17 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/ina3221/test.esp32.yaml b/tests/components/ina3221/test.esp32.yaml new file mode 100644 index 0000000000..ad9cf79e38 --- /dev/null +++ b/tests/components/ina3221/test.esp32.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 16 + sda: 17 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/ina3221/test.esp8266.yaml b/tests/components/ina3221/test.esp8266.yaml new file mode 100644 index 0000000000..55990871a0 --- /dev/null +++ b/tests/components/ina3221/test.esp8266.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 5 + sda: 4 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/ina3221/test.rp2040.yaml b/tests/components/ina3221/test.rp2040.yaml new file mode 100644 index 0000000000..55990871a0 --- /dev/null +++ b/tests/components/ina3221/test.rp2040.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_ina3221 + scl: 5 + sda: 4 + +sensor: + - platform: ina3221 + address: 0x40 + channel_1: + shunt_resistance: 0.1 ohm + current: + name: INA3221 Channel 1 Current + power: + name: INA3221 Channel 1 Power + bus_voltage: + name: INA3221 Channel 1 Bus Voltage + shunt_voltage: + name: INA3221 Channel 1 Shunt Voltage + update_interval: 15s diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ba46b7dbf6 --- /dev/null +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: inkbird_ibsth1_mini + mac_address: 38:81:D7:0A:9C:11 + temperature: + name: Inkbird IBS-TH1 Temperature + humidity: + name: Inkbird IBS-TH1 Humidity + battery_level: + name: Inkbird IBS-TH1 Battery Level diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml new file mode 100644 index 0000000000..ba46b7dbf6 --- /dev/null +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: inkbird_ibsth1_mini + mac_address: 38:81:D7:0A:9C:11 + temperature: + name: Inkbird IBS-TH1 Temperature + humidity: + name: Inkbird IBS-TH1 Humidity + battery_level: + name: Inkbird IBS-TH1 Battery Level diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml new file mode 100644 index 0000000000..ba46b7dbf6 --- /dev/null +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: inkbird_ibsth1_mini + mac_address: 38:81:D7:0A:9C:11 + temperature: + name: Inkbird IBS-TH1 Temperature + humidity: + name: Inkbird IBS-TH1 Humidity + battery_level: + name: Inkbird IBS-TH1 Battery Level diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32.yaml new file mode 100644 index 0000000000..ba46b7dbf6 --- /dev/null +++ b/tests/components/inkbird_ibsth1_mini/test.esp32.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: inkbird_ibsth1_mini + mac_address: 38:81:D7:0A:9C:11 + temperature: + name: Inkbird IBS-TH1 Temperature + humidity: + name: Inkbird IBS-TH1 Humidity + battery_level: + name: Inkbird IBS-TH1 Battery Level diff --git a/tests/components/inkplate6/test.esp32.yaml b/tests/components/inkplate6/test.esp32.yaml new file mode 100644 index 0000000000..31b14e6c73 --- /dev/null +++ b/tests/components/inkplate6/test.esp32.yaml @@ -0,0 +1,62 @@ +i2c: + - id: i2c_inkplate6 + scl: 16 + sda: 17 + +display: + - platform: inkplate6 + id: inkplate_display + greyscale: false + partial_updating: false + update_interval: 60s + display_data_0_pin: + number: 1 + allow_other_uses: true + display_data_1_pin: + number: 1 + allow_other_uses: true + display_data_2_pin: + number: 1 + allow_other_uses: true + display_data_3_pin: + number: 1 + allow_other_uses: true + display_data_5_pin: + number: 1 + allow_other_uses: true + display_data_4_pin: + number: 1 + allow_other_uses: true + display_data_6_pin: + number: 1 + allow_other_uses: true + display_data_7_pin: + number: 1 + allow_other_uses: true + ckv_pin: + number: 1 + allow_other_uses: true + sph_pin: + number: 1 + allow_other_uses: true + gmod_pin: + number: 1 + allow_other_uses: true + gpio0_enable_pin: + number: 1 + allow_other_uses: true + oe_pin: + number: 1 + allow_other_uses: true + spv_pin: + number: 1 + allow_other_uses: true + powerup_pin: + number: 1 + allow_other_uses: true + wakeup_pin: + number: 1 + allow_other_uses: true + vcom_pin: + number: 1 + allow_other_uses: true diff --git a/tests/components/integration/test.esp32-c3.yaml b/tests/components/integration/test.esp32-c3.yaml new file mode 100644 index 0000000000..b68cb9f87d --- /dev/null +++ b/tests/components/integration/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: adc + id: my_sensor + pin: 4 + attenuation: 11db + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.esp32-idf.yaml b/tests/components/integration/test.esp32-idf.yaml new file mode 100644 index 0000000000..0095fdb1ff --- /dev/null +++ b/tests/components/integration/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: adc + id: my_sensor + pin: A0 + attenuation: 2.5db + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.esp32-s2.yaml b/tests/components/integration/test.esp32-s2.yaml new file mode 100644 index 0000000000..1415952571 --- /dev/null +++ b/tests/components/integration/test.esp32-s2.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: adc + id: my_sensor + pin: 1 + attenuation: 11db + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.esp32-s3.yaml b/tests/components/integration/test.esp32-s3.yaml new file mode 100644 index 0000000000..1415952571 --- /dev/null +++ b/tests/components/integration/test.esp32-s3.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: adc + id: my_sensor + pin: 1 + attenuation: 11db + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.esp32.yaml b/tests/components/integration/test.esp32.yaml new file mode 100644 index 0000000000..0095fdb1ff --- /dev/null +++ b/tests/components/integration/test.esp32.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: adc + id: my_sensor + pin: A0 + attenuation: 2.5db + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.esp8266.yaml b/tests/components/integration/test.esp8266.yaml new file mode 100644 index 0000000000..51d3e19077 --- /dev/null +++ b/tests/components/integration/test.esp8266.yaml @@ -0,0 +1,8 @@ +sensor: + - platform: adc + id: my_sensor + pin: VCC + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/integration/test.rp2040.yaml b/tests/components/integration/test.rp2040.yaml new file mode 100644 index 0000000000..51d3e19077 --- /dev/null +++ b/tests/components/integration/test.rp2040.yaml @@ -0,0 +1,8 @@ +sensor: + - platform: adc + id: my_sensor + pin: VCC + - platform: integration + sensor: my_sensor + name: Integration Sensor + time_unit: s diff --git a/tests/components/internal_temperature/test.esp32-c3.yaml b/tests/components/internal_temperature/test.esp32-c3.yaml index 28df4a6d9f..19f740339d 100644 --- a/tests/components/internal_temperature/test.esp32-c3.yaml +++ b/tests/components/internal_temperature/test.esp32-c3.yaml @@ -1,3 +1,3 @@ sensor: - platform: internal_temperature - name: "Internal Temperature" + name: Internal Temperature diff --git a/tests/components/internal_temperature/test.esp32-idf.yaml b/tests/components/internal_temperature/test.esp32-idf.yaml index 28df4a6d9f..19f740339d 100644 --- a/tests/components/internal_temperature/test.esp32-idf.yaml +++ b/tests/components/internal_temperature/test.esp32-idf.yaml @@ -1,3 +1,3 @@ sensor: - platform: internal_temperature - name: "Internal Temperature" + name: Internal Temperature diff --git a/tests/components/internal_temperature/test.esp32-s2.yaml b/tests/components/internal_temperature/test.esp32-s2.yaml new file mode 100644 index 0000000000..19f740339d --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-s2.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: internal_temperature + name: Internal Temperature diff --git a/tests/components/internal_temperature/test.esp32-s3.yaml b/tests/components/internal_temperature/test.esp32-s3.yaml new file mode 100644 index 0000000000..9eb1ec0b0f --- /dev/null +++ b/tests/components/internal_temperature/test.esp32-s3.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: internal_temperature + name: Internal Temperature + +esp32: + framework: + version: 2.0.9 diff --git a/tests/components/internal_temperature/test.esp32.yaml b/tests/components/internal_temperature/test.esp32.yaml index 28df4a6d9f..19f740339d 100644 --- a/tests/components/internal_temperature/test.esp32.yaml +++ b/tests/components/internal_temperature/test.esp32.yaml @@ -1,3 +1,3 @@ sensor: - platform: internal_temperature - name: "Internal Temperature" + name: Internal Temperature diff --git a/tests/components/internal_temperature/test.rp2040.yaml b/tests/components/internal_temperature/test.rp2040.yaml index 28df4a6d9f..19f740339d 100644 --- a/tests/components/internal_temperature/test.rp2040.yaml +++ b/tests/components/internal_temperature/test.rp2040.yaml @@ -1,3 +1,3 @@ sensor: - platform: internal_temperature - name: "Internal Temperature" + name: Internal Temperature diff --git a/tests/components/interval/test.esp32-c3-idf.yaml b/tests/components/interval/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.esp32-c3-idf.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.esp32-c3.yaml b/tests/components/interval/test.esp32-c3.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.esp32-c3.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.esp32-idf.yaml b/tests/components/interval/test.esp32-idf.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.esp32-idf.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.esp32.yaml b/tests/components/interval/test.esp32.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.esp32.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.esp8266.yaml b/tests/components/interval/test.esp8266.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.esp8266.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.rp2040.yaml b/tests/components/interval/test.rp2040.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/test.rp2040.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick From ed381b45eb99c0774edf619b4239b7a35a1984e9 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 23 Apr 2024 04:49:03 -0500 Subject: [PATCH 065/313] Add some components to the new testing framework (T) (#6229) --- tests/components/t6615/test.esp32-c3-idf.yaml | 10 ++ tests/components/t6615/test.esp32-c3.yaml | 10 ++ tests/components/t6615/test.esp32-idf.yaml | 10 ++ tests/components/t6615/test.esp32.yaml | 10 ++ tests/components/t6615/test.esp8266.yaml | 10 ++ tests/components/t6615/test.rp2040.yaml | 10 ++ .../tca9548a/test.esp32-c3-idf.yaml | 15 +++ tests/components/tca9548a/test.esp32-c3.yaml | 15 +++ tests/components/tca9548a/test.esp32-idf.yaml | 15 +++ tests/components/tca9548a/test.esp32.yaml | 15 +++ tests/components/tca9548a/test.esp8266.yaml | 15 +++ tests/components/tca9548a/test.rp2040.yaml | 15 +++ .../components/tcl112/test.esp32-c3-idf.yaml | 15 +++ tests/components/tcl112/test.esp32-c3.yaml | 15 +++ tests/components/tcl112/test.esp32-idf.yaml | 15 +++ tests/components/tcl112/test.esp32.yaml | 15 +++ tests/components/tcl112/test.esp8266.yaml | 15 +++ .../tcs34725/test.esp32-c3-idf.yaml | 21 ++++ tests/components/tcs34725/test.esp32-c3.yaml | 21 ++++ tests/components/tcs34725/test.esp32-idf.yaml | 21 ++++ tests/components/tcs34725/test.esp32.yaml | 21 ++++ tests/components/tcs34725/test.esp8266.yaml | 21 ++++ tests/components/tcs34725/test.rp2040.yaml | 21 ++++ .../components/tee501/test.esp32-c3-idf.yaml | 9 ++ tests/components/tee501/test.esp32-c3.yaml | 9 ++ tests/components/tee501/test.esp32-idf.yaml | 9 ++ tests/components/tee501/test.esp32.yaml | 9 ++ tests/components/tee501/test.esp8266.yaml | 9 ++ tests/components/tee501/test.rp2040.yaml | 9 ++ .../teleinfo/test.esp32-c3-idf.yaml | 42 +++++++ tests/components/teleinfo/test.esp32-c3.yaml | 42 +++++++ tests/components/teleinfo/test.esp32-idf.yaml | 42 +++++++ tests/components/teleinfo/test.esp32.yaml | 42 +++++++ tests/components/teleinfo/test.esp8266.yaml | 42 +++++++ tests/components/teleinfo/test.rp2040.yaml | 42 +++++++ .../thermostat/test.esp32-c3-idf.yaml | 93 ++++++++++++++ .../components/thermostat/test.esp32-c3.yaml | 93 ++++++++++++++ .../components/thermostat/test.esp32-idf.yaml | 93 ++++++++++++++ tests/components/thermostat/test.esp32.yaml | 93 ++++++++++++++ tests/components/thermostat/test.esp8266.yaml | 93 ++++++++++++++ tests/components/thermostat/test.rp2040.yaml | 93 ++++++++++++++ tests/components/time/test.esp32-c3-idf.yaml | 10 ++ tests/components/time/test.esp32-c3.yaml | 10 ++ tests/components/time/test.esp32-idf.yaml | 10 ++ tests/components/time/test.esp32.yaml | 10 ++ tests/components/time/test.esp8266.yaml | 10 ++ tests/components/time/test.rp2040.yaml | 10 ++ .../time_based/test.esp32-c3-idf.yaml | 12 ++ .../components/time_based/test.esp32-c3.yaml | 12 ++ .../components/time_based/test.esp32-idf.yaml | 12 ++ tests/components/time_based/test.esp32.yaml | 12 ++ tests/components/time_based/test.esp8266.yaml | 12 ++ tests/components/time_based/test.rp2040.yaml | 12 ++ .../tlc59208f/test.esp32-c3-idf.yaml | 50 ++++++++ tests/components/tlc59208f/test.esp32-c3.yaml | 50 ++++++++ .../components/tlc59208f/test.esp32-idf.yaml | 50 ++++++++ tests/components/tlc59208f/test.esp32.yaml | 50 ++++++++ tests/components/tlc59208f/test.esp8266.yaml | 50 ++++++++ tests/components/tlc59208f/test.rp2040.yaml | 50 ++++++++ .../components/tm1621/test.esp32-c3-idf.yaml | 12 ++ tests/components/tm1621/test.esp32-c3.yaml | 12 ++ tests/components/tm1621/test.esp32-idf.yaml | 12 ++ tests/components/tm1621/test.esp32.yaml | 12 ++ tests/components/tm1621/test.esp8266.yaml | 12 ++ tests/components/tm1621/test.rp2040.yaml | 12 ++ .../components/tm1637/test.esp32-c3-idf.yaml | 7 ++ tests/components/tm1637/test.esp32-c3.yaml | 7 ++ tests/components/tm1637/test.esp32-idf.yaml | 7 ++ tests/components/tm1637/test.esp32.yaml | 7 ++ tests/components/tm1637/test.esp8266.yaml | 7 ++ tests/components/tm1637/test.rp2040.yaml | 7 ++ .../components/tm1638/test.esp32-c3-idf.yaml | 118 ++++++++++++++++++ tests/components/tm1638/test.esp32-c3.yaml | 118 ++++++++++++++++++ tests/components/tm1638/test.esp32-idf.yaml | 118 ++++++++++++++++++ tests/components/tm1638/test.esp32.yaml | 118 ++++++++++++++++++ tests/components/tm1638/test.esp8266.yaml | 118 ++++++++++++++++++ tests/components/tm1638/test.rp2040.yaml | 118 ++++++++++++++++++ tests/components/tm1651/test.esp32-c3.yaml | 21 ++++ tests/components/tm1651/test.esp32.yaml | 21 ++++ tests/components/tm1651/test.esp8266.yaml | 21 ++++ tests/components/tm1651/test.rp2040.yaml | 21 ++++ .../components/tmp102/test.esp32-c3-idf.yaml | 8 ++ tests/components/tmp102/test.esp32-c3.yaml | 8 ++ tests/components/tmp102/test.esp32-idf.yaml | 8 ++ tests/components/tmp102/test.esp32.yaml | 8 ++ tests/components/tmp102/test.esp8266.yaml | 8 ++ tests/components/tmp102/test.rp2040.yaml | 8 ++ .../components/tmp1075/test.esp32-c3-idf.yaml | 16 +++ tests/components/tmp1075/test.esp32-c3.yaml | 16 +++ tests/components/tmp1075/test.esp32-idf.yaml | 16 +++ tests/components/tmp1075/test.esp32.yaml | 16 +++ tests/components/tmp1075/test.esp8266.yaml | 16 +++ tests/components/tmp1075/test.rp2040.yaml | 16 +++ .../components/tmp117/test.esp32-c3-idf.yaml | 9 ++ tests/components/tmp117/test.esp32-c3.yaml | 9 ++ tests/components/tmp117/test.esp32-idf.yaml | 9 ++ tests/components/tmp117/test.esp32.yaml | 9 ++ tests/components/tmp117/test.esp8266.yaml | 9 ++ tests/components/tmp117/test.rp2040.yaml | 9 ++ .../tof10120/test.esp32-c3-idf.yaml | 9 ++ tests/components/tof10120/test.esp32-c3.yaml | 9 ++ tests/components/tof10120/test.esp32-idf.yaml | 9 ++ tests/components/tof10120/test.esp32.yaml | 9 ++ tests/components/tof10120/test.esp8266.yaml | 9 ++ tests/components/tof10120/test.rp2040.yaml | 9 ++ .../components/toshiba/test.esp32-c3-idf.yaml | 7 ++ tests/components/toshiba/test.esp32-c3.yaml | 7 ++ tests/components/toshiba/test.esp32-idf.yaml | 7 ++ tests/components/toshiba/test.esp32.yaml | 7 ++ tests/components/toshiba/test.esp8266.yaml | 7 ++ .../total_daily_energy/test.esp32-c3-idf.yaml | 32 +++++ .../total_daily_energy/test.esp32-c3.yaml | 32 +++++ .../total_daily_energy/test.esp32-idf.yaml | 32 +++++ .../total_daily_energy/test.esp32.yaml | 32 +++++ .../total_daily_energy/test.esp8266.yaml | 32 +++++ .../total_daily_energy/test.rp2040.yaml | 32 +++++ .../components/tsl2561/test.esp32-c3-idf.yaml | 13 ++ tests/components/tsl2561/test.esp32-c3.yaml | 13 ++ tests/components/tsl2561/test.esp32-idf.yaml | 13 ++ tests/components/tsl2561/test.esp32.yaml | 13 ++ tests/components/tsl2561/test.esp8266.yaml | 13 ++ tests/components/tsl2561/test.rp2040.yaml | 13 ++ .../components/tsl2591/test.esp32-c3-idf.yaml | 25 ++++ tests/components/tsl2591/test.esp32-c3.yaml | 25 ++++ tests/components/tsl2591/test.esp32-idf.yaml | 25 ++++ tests/components/tsl2591/test.esp32.yaml | 25 ++++ tests/components/tsl2591/test.esp8266.yaml | 25 ++++ tests/components/tsl2591/test.rp2040.yaml | 25 ++++ .../components/tt21100/test.esp32-c3-idf.yaml | 25 ++++ tests/components/tt21100/test.esp32-c3.yaml | 25 ++++ tests/components/tt21100/test.esp32-idf.yaml | 25 ++++ tests/components/tt21100/test.esp32.yaml | 25 ++++ tests/components/tt21100/test.esp8266.yaml | 25 ++++ tests/components/tt21100/test.rp2040.yaml | 25 ++++ .../ttp229_bsf/test.esp32-c3-idf.yaml | 8 ++ .../components/ttp229_bsf/test.esp32-c3.yaml | 8 ++ .../components/ttp229_bsf/test.esp32-idf.yaml | 8 ++ tests/components/ttp229_bsf/test.esp32.yaml | 8 ++ tests/components/ttp229_bsf/test.esp8266.yaml | 8 ++ tests/components/ttp229_bsf/test.rp2040.yaml | 8 ++ .../ttp229_lsf/test.esp32-c3-idf.yaml | 11 ++ .../components/ttp229_lsf/test.esp32-c3.yaml | 11 ++ .../components/ttp229_lsf/test.esp32-idf.yaml | 11 ++ tests/components/ttp229_lsf/test.esp32.yaml | 11 ++ tests/components/ttp229_lsf/test.esp8266.yaml | 11 ++ tests/components/ttp229_lsf/test.rp2040.yaml | 11 ++ tests/components/tuya/test.esp32-c3-idf.yaml | 78 ++++++++++++ tests/components/tuya/test.esp32-c3.yaml | 78 ++++++++++++ tests/components/tuya/test.esp32-idf.yaml | 78 ++++++++++++ tests/components/tuya/test.esp32.yaml | 78 ++++++++++++ tests/components/tuya/test.esp8266.yaml | 78 ++++++++++++ tests/components/tuya/test.rp2040.yaml | 78 ++++++++++++ tests/components/tx20/test.esp32-c3-idf.yaml | 7 ++ tests/components/tx20/test.esp32-c3.yaml | 7 ++ tests/components/tx20/test.esp32-idf.yaml | 7 ++ tests/components/tx20/test.esp32.yaml | 7 ++ tests/components/tx20/test.esp8266.yaml | 7 ++ tests/components/tx20/test.rp2040.yaml | 7 ++ 158 files changed, 4034 insertions(+) create mode 100644 tests/components/t6615/test.esp32-c3-idf.yaml create mode 100644 tests/components/t6615/test.esp32-c3.yaml create mode 100644 tests/components/t6615/test.esp32-idf.yaml create mode 100644 tests/components/t6615/test.esp32.yaml create mode 100644 tests/components/t6615/test.esp8266.yaml create mode 100644 tests/components/t6615/test.rp2040.yaml create mode 100644 tests/components/tca9548a/test.esp32-c3-idf.yaml create mode 100644 tests/components/tca9548a/test.esp32-c3.yaml create mode 100644 tests/components/tca9548a/test.esp32-idf.yaml create mode 100644 tests/components/tca9548a/test.esp32.yaml create mode 100644 tests/components/tca9548a/test.esp8266.yaml create mode 100644 tests/components/tca9548a/test.rp2040.yaml create mode 100644 tests/components/tcl112/test.esp32-c3-idf.yaml create mode 100644 tests/components/tcl112/test.esp32-c3.yaml create mode 100644 tests/components/tcl112/test.esp32-idf.yaml create mode 100644 tests/components/tcl112/test.esp32.yaml create mode 100644 tests/components/tcl112/test.esp8266.yaml create mode 100644 tests/components/tcs34725/test.esp32-c3-idf.yaml create mode 100644 tests/components/tcs34725/test.esp32-c3.yaml create mode 100644 tests/components/tcs34725/test.esp32-idf.yaml create mode 100644 tests/components/tcs34725/test.esp32.yaml create mode 100644 tests/components/tcs34725/test.esp8266.yaml create mode 100644 tests/components/tcs34725/test.rp2040.yaml create mode 100644 tests/components/tee501/test.esp32-c3-idf.yaml create mode 100644 tests/components/tee501/test.esp32-c3.yaml create mode 100644 tests/components/tee501/test.esp32-idf.yaml create mode 100644 tests/components/tee501/test.esp32.yaml create mode 100644 tests/components/tee501/test.esp8266.yaml create mode 100644 tests/components/tee501/test.rp2040.yaml create mode 100644 tests/components/teleinfo/test.esp32-c3-idf.yaml create mode 100644 tests/components/teleinfo/test.esp32-c3.yaml create mode 100644 tests/components/teleinfo/test.esp32-idf.yaml create mode 100644 tests/components/teleinfo/test.esp32.yaml create mode 100644 tests/components/teleinfo/test.esp8266.yaml create mode 100644 tests/components/teleinfo/test.rp2040.yaml create mode 100644 tests/components/thermostat/test.esp32-c3-idf.yaml create mode 100644 tests/components/thermostat/test.esp32-c3.yaml create mode 100644 tests/components/thermostat/test.esp32-idf.yaml create mode 100644 tests/components/thermostat/test.esp32.yaml create mode 100644 tests/components/thermostat/test.esp8266.yaml create mode 100644 tests/components/thermostat/test.rp2040.yaml create mode 100644 tests/components/time/test.esp32-c3-idf.yaml create mode 100644 tests/components/time/test.esp32-c3.yaml create mode 100644 tests/components/time/test.esp32-idf.yaml create mode 100644 tests/components/time/test.esp32.yaml create mode 100644 tests/components/time/test.esp8266.yaml create mode 100644 tests/components/time/test.rp2040.yaml create mode 100644 tests/components/time_based/test.esp32-c3-idf.yaml create mode 100644 tests/components/time_based/test.esp32-c3.yaml create mode 100644 tests/components/time_based/test.esp32-idf.yaml create mode 100644 tests/components/time_based/test.esp32.yaml create mode 100644 tests/components/time_based/test.esp8266.yaml create mode 100644 tests/components/time_based/test.rp2040.yaml create mode 100644 tests/components/tlc59208f/test.esp32-c3-idf.yaml create mode 100644 tests/components/tlc59208f/test.esp32-c3.yaml create mode 100644 tests/components/tlc59208f/test.esp32-idf.yaml create mode 100644 tests/components/tlc59208f/test.esp32.yaml create mode 100644 tests/components/tlc59208f/test.esp8266.yaml create mode 100644 tests/components/tlc59208f/test.rp2040.yaml create mode 100644 tests/components/tm1621/test.esp32-c3-idf.yaml create mode 100644 tests/components/tm1621/test.esp32-c3.yaml create mode 100644 tests/components/tm1621/test.esp32-idf.yaml create mode 100644 tests/components/tm1621/test.esp32.yaml create mode 100644 tests/components/tm1621/test.esp8266.yaml create mode 100644 tests/components/tm1621/test.rp2040.yaml create mode 100644 tests/components/tm1637/test.esp32-c3-idf.yaml create mode 100644 tests/components/tm1637/test.esp32-c3.yaml create mode 100644 tests/components/tm1637/test.esp32-idf.yaml create mode 100644 tests/components/tm1637/test.esp32.yaml create mode 100644 tests/components/tm1637/test.esp8266.yaml create mode 100644 tests/components/tm1637/test.rp2040.yaml create mode 100644 tests/components/tm1638/test.esp32-c3-idf.yaml create mode 100644 tests/components/tm1638/test.esp32-c3.yaml create mode 100644 tests/components/tm1638/test.esp32-idf.yaml create mode 100644 tests/components/tm1638/test.esp32.yaml create mode 100644 tests/components/tm1638/test.esp8266.yaml create mode 100644 tests/components/tm1638/test.rp2040.yaml create mode 100644 tests/components/tm1651/test.esp32-c3.yaml create mode 100644 tests/components/tm1651/test.esp32.yaml create mode 100644 tests/components/tm1651/test.esp8266.yaml create mode 100644 tests/components/tm1651/test.rp2040.yaml create mode 100644 tests/components/tmp102/test.esp32-c3-idf.yaml create mode 100644 tests/components/tmp102/test.esp32-c3.yaml create mode 100644 tests/components/tmp102/test.esp32-idf.yaml create mode 100644 tests/components/tmp102/test.esp32.yaml create mode 100644 tests/components/tmp102/test.esp8266.yaml create mode 100644 tests/components/tmp102/test.rp2040.yaml create mode 100644 tests/components/tmp1075/test.esp32-c3-idf.yaml create mode 100644 tests/components/tmp1075/test.esp32-c3.yaml create mode 100644 tests/components/tmp1075/test.esp32-idf.yaml create mode 100644 tests/components/tmp1075/test.esp32.yaml create mode 100644 tests/components/tmp1075/test.esp8266.yaml create mode 100644 tests/components/tmp1075/test.rp2040.yaml create mode 100644 tests/components/tmp117/test.esp32-c3-idf.yaml create mode 100644 tests/components/tmp117/test.esp32-c3.yaml create mode 100644 tests/components/tmp117/test.esp32-idf.yaml create mode 100644 tests/components/tmp117/test.esp32.yaml create mode 100644 tests/components/tmp117/test.esp8266.yaml create mode 100644 tests/components/tmp117/test.rp2040.yaml create mode 100644 tests/components/tof10120/test.esp32-c3-idf.yaml create mode 100644 tests/components/tof10120/test.esp32-c3.yaml create mode 100644 tests/components/tof10120/test.esp32-idf.yaml create mode 100644 tests/components/tof10120/test.esp32.yaml create mode 100644 tests/components/tof10120/test.esp8266.yaml create mode 100644 tests/components/tof10120/test.rp2040.yaml create mode 100644 tests/components/toshiba/test.esp32-c3-idf.yaml create mode 100644 tests/components/toshiba/test.esp32-c3.yaml create mode 100644 tests/components/toshiba/test.esp32-idf.yaml create mode 100644 tests/components/toshiba/test.esp32.yaml create mode 100644 tests/components/toshiba/test.esp8266.yaml create mode 100644 tests/components/total_daily_energy/test.esp32-c3-idf.yaml create mode 100644 tests/components/total_daily_energy/test.esp32-c3.yaml create mode 100644 tests/components/total_daily_energy/test.esp32-idf.yaml create mode 100644 tests/components/total_daily_energy/test.esp32.yaml create mode 100644 tests/components/total_daily_energy/test.esp8266.yaml create mode 100644 tests/components/total_daily_energy/test.rp2040.yaml create mode 100644 tests/components/tsl2561/test.esp32-c3-idf.yaml create mode 100644 tests/components/tsl2561/test.esp32-c3.yaml create mode 100644 tests/components/tsl2561/test.esp32-idf.yaml create mode 100644 tests/components/tsl2561/test.esp32.yaml create mode 100644 tests/components/tsl2561/test.esp8266.yaml create mode 100644 tests/components/tsl2561/test.rp2040.yaml create mode 100644 tests/components/tsl2591/test.esp32-c3-idf.yaml create mode 100644 tests/components/tsl2591/test.esp32-c3.yaml create mode 100644 tests/components/tsl2591/test.esp32-idf.yaml create mode 100644 tests/components/tsl2591/test.esp32.yaml create mode 100644 tests/components/tsl2591/test.esp8266.yaml create mode 100644 tests/components/tsl2591/test.rp2040.yaml create mode 100644 tests/components/tt21100/test.esp32-c3-idf.yaml create mode 100644 tests/components/tt21100/test.esp32-c3.yaml create mode 100644 tests/components/tt21100/test.esp32-idf.yaml create mode 100644 tests/components/tt21100/test.esp32.yaml create mode 100644 tests/components/tt21100/test.esp8266.yaml create mode 100644 tests/components/tt21100/test.rp2040.yaml create mode 100644 tests/components/ttp229_bsf/test.esp32-c3-idf.yaml create mode 100644 tests/components/ttp229_bsf/test.esp32-c3.yaml create mode 100644 tests/components/ttp229_bsf/test.esp32-idf.yaml create mode 100644 tests/components/ttp229_bsf/test.esp32.yaml create mode 100644 tests/components/ttp229_bsf/test.esp8266.yaml create mode 100644 tests/components/ttp229_bsf/test.rp2040.yaml create mode 100644 tests/components/ttp229_lsf/test.esp32-c3-idf.yaml create mode 100644 tests/components/ttp229_lsf/test.esp32-c3.yaml create mode 100644 tests/components/ttp229_lsf/test.esp32-idf.yaml create mode 100644 tests/components/ttp229_lsf/test.esp32.yaml create mode 100644 tests/components/ttp229_lsf/test.esp8266.yaml create mode 100644 tests/components/ttp229_lsf/test.rp2040.yaml create mode 100644 tests/components/tuya/test.esp32-c3-idf.yaml create mode 100644 tests/components/tuya/test.esp32-c3.yaml create mode 100644 tests/components/tuya/test.esp32-idf.yaml create mode 100644 tests/components/tuya/test.esp32.yaml create mode 100644 tests/components/tuya/test.esp8266.yaml create mode 100644 tests/components/tuya/test.rp2040.yaml create mode 100644 tests/components/tx20/test.esp32-c3-idf.yaml create mode 100644 tests/components/tx20/test.esp32-c3.yaml create mode 100644 tests/components/tx20/test.esp32-idf.yaml create mode 100644 tests/components/tx20/test.esp32.yaml create mode 100644 tests/components/tx20/test.esp8266.yaml create mode 100644 tests/components/tx20/test.rp2040.yaml diff --git a/tests/components/t6615/test.esp32-c3-idf.yaml b/tests/components/t6615/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e8690c770f --- /dev/null +++ b/tests/components/t6615/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 4 + rx_pin: 5 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/t6615/test.esp32-c3.yaml b/tests/components/t6615/test.esp32-c3.yaml new file mode 100644 index 0000000000..e8690c770f --- /dev/null +++ b/tests/components/t6615/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 4 + rx_pin: 5 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/t6615/test.esp32-idf.yaml b/tests/components/t6615/test.esp32-idf.yaml new file mode 100644 index 0000000000..2cfaa0ae5b --- /dev/null +++ b/tests/components/t6615/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 17 + rx_pin: 16 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/t6615/test.esp32.yaml b/tests/components/t6615/test.esp32.yaml new file mode 100644 index 0000000000..2cfaa0ae5b --- /dev/null +++ b/tests/components/t6615/test.esp32.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 17 + rx_pin: 16 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/t6615/test.esp8266.yaml b/tests/components/t6615/test.esp8266.yaml new file mode 100644 index 0000000000..e8690c770f --- /dev/null +++ b/tests/components/t6615/test.esp8266.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 4 + rx_pin: 5 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/t6615/test.rp2040.yaml b/tests/components/t6615/test.rp2040.yaml new file mode 100644 index 0000000000..e8690c770f --- /dev/null +++ b/tests/components/t6615/test.rp2040.yaml @@ -0,0 +1,10 @@ +uart: + - id: uart_t6615 + tx_pin: 4 + rx_pin: 5 + baud_rate: 19200 + +sensor: + - platform: t6615 + co2: + name: CO2 Sensor diff --git a/tests/components/tca9548a/test.esp32-c3-idf.yaml b/tests/components/tca9548a/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2294530d14 --- /dev/null +++ b/tests/components/tca9548a/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 5 + sda: 4 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tca9548a/test.esp32-c3.yaml b/tests/components/tca9548a/test.esp32-c3.yaml new file mode 100644 index 0000000000..2294530d14 --- /dev/null +++ b/tests/components/tca9548a/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 5 + sda: 4 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tca9548a/test.esp32-idf.yaml b/tests/components/tca9548a/test.esp32-idf.yaml new file mode 100644 index 0000000000..7edb83c821 --- /dev/null +++ b/tests/components/tca9548a/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 16 + sda: 17 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tca9548a/test.esp32.yaml b/tests/components/tca9548a/test.esp32.yaml new file mode 100644 index 0000000000..7edb83c821 --- /dev/null +++ b/tests/components/tca9548a/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 16 + sda: 17 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tca9548a/test.esp8266.yaml b/tests/components/tca9548a/test.esp8266.yaml new file mode 100644 index 0000000000..2294530d14 --- /dev/null +++ b/tests/components/tca9548a/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 5 + sda: 4 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tca9548a/test.rp2040.yaml b/tests/components/tca9548a/test.rp2040.yaml new file mode 100644 index 0000000000..2294530d14 --- /dev/null +++ b/tests/components/tca9548a/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_tca9548a + scl: 5 + sda: 4 + +tca9548a: + - id: multiplex0 + address: 0x70 + channels: + - bus_id: multiplex0_chan0 + channel: 0 + i2c_id: i2c_tca9548a + - id: multiplex1 + address: 0x71 + i2c_id: multiplex0_chan0 diff --git a/tests/components/tcl112/test.esp32-c3-idf.yaml b/tests/components/tcl112/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..03c0e84fe5 --- /dev/null +++ b/tests/components/tcl112/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: tcl112_sensor + lambda: "return 21;" + +climate: + - platform: tcl112 + name: TCL112 Climate with Sensor + supports_heat: true + supports_cool: true + sensor: tcl112_sensor diff --git a/tests/components/tcl112/test.esp32-c3.yaml b/tests/components/tcl112/test.esp32-c3.yaml new file mode 100644 index 0000000000..03c0e84fe5 --- /dev/null +++ b/tests/components/tcl112/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: tcl112_sensor + lambda: "return 21;" + +climate: + - platform: tcl112 + name: TCL112 Climate with Sensor + supports_heat: true + supports_cool: true + sensor: tcl112_sensor diff --git a/tests/components/tcl112/test.esp32-idf.yaml b/tests/components/tcl112/test.esp32-idf.yaml new file mode 100644 index 0000000000..03c0e84fe5 --- /dev/null +++ b/tests/components/tcl112/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: tcl112_sensor + lambda: "return 21;" + +climate: + - platform: tcl112 + name: TCL112 Climate with Sensor + supports_heat: true + supports_cool: true + sensor: tcl112_sensor diff --git a/tests/components/tcl112/test.esp32.yaml b/tests/components/tcl112/test.esp32.yaml new file mode 100644 index 0000000000..03c0e84fe5 --- /dev/null +++ b/tests/components/tcl112/test.esp32.yaml @@ -0,0 +1,15 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: tcl112_sensor + lambda: "return 21;" + +climate: + - platform: tcl112 + name: TCL112 Climate with Sensor + supports_heat: true + supports_cool: true + sensor: tcl112_sensor diff --git a/tests/components/tcl112/test.esp8266.yaml b/tests/components/tcl112/test.esp8266.yaml new file mode 100644 index 0000000000..0a85536928 --- /dev/null +++ b/tests/components/tcl112/test.esp8266.yaml @@ -0,0 +1,15 @@ +remote_transmitter: + pin: 5 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: tcl112_sensor + lambda: "return 21;" + +climate: + - platform: tcl112 + name: TCL112 Climate with Sensor + supports_heat: true + supports_cool: true + sensor: tcl112_sensor diff --git a/tests/components/tcs34725/test.esp32-c3-idf.yaml b/tests/components/tcs34725/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9b459c9104 --- /dev/null +++ b/tests/components/tcs34725/test.esp32-c3-idf.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 5 + sda: 4 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tcs34725/test.esp32-c3.yaml b/tests/components/tcs34725/test.esp32-c3.yaml new file mode 100644 index 0000000000..9b459c9104 --- /dev/null +++ b/tests/components/tcs34725/test.esp32-c3.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 5 + sda: 4 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tcs34725/test.esp32-idf.yaml b/tests/components/tcs34725/test.esp32-idf.yaml new file mode 100644 index 0000000000..86ef82962e --- /dev/null +++ b/tests/components/tcs34725/test.esp32-idf.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 16 + sda: 17 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tcs34725/test.esp32.yaml b/tests/components/tcs34725/test.esp32.yaml new file mode 100644 index 0000000000..86ef82962e --- /dev/null +++ b/tests/components/tcs34725/test.esp32.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 16 + sda: 17 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tcs34725/test.esp8266.yaml b/tests/components/tcs34725/test.esp8266.yaml new file mode 100644 index 0000000000..9b459c9104 --- /dev/null +++ b/tests/components/tcs34725/test.esp8266.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 5 + sda: 4 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tcs34725/test.rp2040.yaml b/tests/components/tcs34725/test.rp2040.yaml new file mode 100644 index 0000000000..9b459c9104 --- /dev/null +++ b/tests/components/tcs34725/test.rp2040.yaml @@ -0,0 +1,21 @@ +i2c: + - id: i2c_tcs34725 + scl: 5 + sda: 4 + +sensor: + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x diff --git a/tests/components/tee501/test.esp32-c3-idf.yaml b/tests/components/tee501/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..11991a6153 --- /dev/null +++ b/tests/components/tee501/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 5 + sda: 4 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/tee501/test.esp32-c3.yaml b/tests/components/tee501/test.esp32-c3.yaml new file mode 100644 index 0000000000..11991a6153 --- /dev/null +++ b/tests/components/tee501/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 5 + sda: 4 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/tee501/test.esp32-idf.yaml b/tests/components/tee501/test.esp32-idf.yaml new file mode 100644 index 0000000000..acf6fed4bf --- /dev/null +++ b/tests/components/tee501/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 16 + sda: 17 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/tee501/test.esp32.yaml b/tests/components/tee501/test.esp32.yaml new file mode 100644 index 0000000000..acf6fed4bf --- /dev/null +++ b/tests/components/tee501/test.esp32.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 16 + sda: 17 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/tee501/test.esp8266.yaml b/tests/components/tee501/test.esp8266.yaml new file mode 100644 index 0000000000..11991a6153 --- /dev/null +++ b/tests/components/tee501/test.esp8266.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 5 + sda: 4 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/tee501/test.rp2040.yaml b/tests/components/tee501/test.rp2040.yaml new file mode 100644 index 0000000000..11991a6153 --- /dev/null +++ b/tests/components/tee501/test.rp2040.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tee501 + scl: 5 + sda: 4 + +sensor: + - platform: tee501 + name: TEE501 Temperature + address: 0x48 diff --git a/tests/components/teleinfo/test.esp32-c3-idf.yaml b/tests/components/teleinfo/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..55641e1e01 --- /dev/null +++ b/tests/components/teleinfo/test.esp32-c3-idf.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 4 + rx_pin: 5 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/teleinfo/test.esp32-c3.yaml b/tests/components/teleinfo/test.esp32-c3.yaml new file mode 100644 index 0000000000..55641e1e01 --- /dev/null +++ b/tests/components/teleinfo/test.esp32-c3.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 4 + rx_pin: 5 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/teleinfo/test.esp32-idf.yaml b/tests/components/teleinfo/test.esp32-idf.yaml new file mode 100644 index 0000000000..a5bd176143 --- /dev/null +++ b/tests/components/teleinfo/test.esp32-idf.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 17 + rx_pin: 16 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/teleinfo/test.esp32.yaml b/tests/components/teleinfo/test.esp32.yaml new file mode 100644 index 0000000000..a5bd176143 --- /dev/null +++ b/tests/components/teleinfo/test.esp32.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 17 + rx_pin: 16 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/teleinfo/test.esp8266.yaml b/tests/components/teleinfo/test.esp8266.yaml new file mode 100644 index 0000000000..55641e1e01 --- /dev/null +++ b/tests/components/teleinfo/test.esp8266.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 4 + rx_pin: 5 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/teleinfo/test.rp2040.yaml b/tests/components/teleinfo/test.rp2040.yaml new file mode 100644 index 0000000000..55641e1e01 --- /dev/null +++ b/tests/components/teleinfo/test.rp2040.yaml @@ -0,0 +1,42 @@ +uart: + - id: uart_teleinfo + tx_pin: 4 + rx_pin: 5 + baud_rate: 1200 + parity: EVEN + +button: + - platform: template + name: Poller component suspend test + on_press: + - component.suspend: test_teleinfo + - delay: 20s + - component.update: test_teleinfo + - delay: 20s + - component.resume: test_teleinfo + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: 2s + - delay: 20s + - component.resume: + id: test_teleinfo + update_interval: !lambda return 2500; + +teleinfo: + id: test_teleinfo + historical_mode: true + update_interval: 60s + +sensor: + - platform: teleinfo + name: hchc + tag_name: HCHC + teleinfo_id: test_teleinfo + unit_of_measurement: Wh + +text_sensor: + - platform: teleinfo + name: optarif + tag_name: OPTARIF + teleinfo_id: test_teleinfo diff --git a/tests/components/thermostat/test.esp32-c3-idf.yaml b/tests/components/thermostat/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.esp32-c3-idf.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.esp32-c3.yaml b/tests/components/thermostat/test.esp32-c3.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.esp32-c3.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.esp32-idf.yaml b/tests/components/thermostat/test.esp32-idf.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.esp32-idf.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.esp32.yaml b/tests/components/thermostat/test.esp32.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.esp32.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.esp8266.yaml b/tests/components/thermostat/test.esp8266.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.esp8266.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.rp2040.yaml b/tests/components/thermostat/test.rp2040.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/test.rp2040.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/time/test.esp32-c3-idf.yaml b/tests/components/time/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.esp32-c3.yaml b/tests/components/time/test.esp32-c3.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.esp32-idf.yaml b/tests/components/time/test.esp32-idf.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.esp32.yaml b/tests/components/time/test.esp32.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.esp32.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.esp8266.yaml b/tests/components/time/test.esp8266.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.esp8266.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.rp2040.yaml b/tests/components/time/test.rp2040.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/test.rp2040.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time_based/test.esp32-c3-idf.yaml b/tests/components/time_based/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.esp32-c3.yaml b/tests/components/time_based/test.esp32-c3.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.esp32-idf.yaml b/tests/components/time_based/test.esp32-idf.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.esp32.yaml b/tests/components/time_based/test.esp32.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.esp32.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.esp8266.yaml b/tests/components/time_based/test.esp8266.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.esp8266.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.rp2040.yaml b/tests/components/time_based/test.rp2040.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/test.rp2040.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/tlc59208f/test.esp32-c3-idf.yaml b/tests/components/tlc59208f/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..923ea4b4a4 --- /dev/null +++ b/tests/components/tlc59208f/test.esp32-c3-idf.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 5 + sda: 4 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tlc59208f/test.esp32-c3.yaml b/tests/components/tlc59208f/test.esp32-c3.yaml new file mode 100644 index 0000000000..923ea4b4a4 --- /dev/null +++ b/tests/components/tlc59208f/test.esp32-c3.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 5 + sda: 4 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tlc59208f/test.esp32-idf.yaml b/tests/components/tlc59208f/test.esp32-idf.yaml new file mode 100644 index 0000000000..2639de3b3d --- /dev/null +++ b/tests/components/tlc59208f/test.esp32-idf.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 16 + sda: 17 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tlc59208f/test.esp32.yaml b/tests/components/tlc59208f/test.esp32.yaml new file mode 100644 index 0000000000..2639de3b3d --- /dev/null +++ b/tests/components/tlc59208f/test.esp32.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 16 + sda: 17 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tlc59208f/test.esp8266.yaml b/tests/components/tlc59208f/test.esp8266.yaml new file mode 100644 index 0000000000..923ea4b4a4 --- /dev/null +++ b/tests/components/tlc59208f/test.esp8266.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 5 + sda: 4 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tlc59208f/test.rp2040.yaml b/tests/components/tlc59208f/test.rp2040.yaml new file mode 100644 index 0000000000..923ea4b4a4 --- /dev/null +++ b/tests/components/tlc59208f/test.rp2040.yaml @@ -0,0 +1,50 @@ +i2c: + - id: i2c_tlc59208f + scl: 5 + sda: 4 + +tlc59208f: + - address: 0x20 + id: tlc59208f_1 + - address: 0x22 + id: tlc59208f_2 + - address: 0x24 + id: tlc59208f_3 + +output: + - platform: tlc59208f + id: tlc_0 + channel: 0 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_1 + channel: 1 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_2 + channel: 2 + tlc59208f_id: tlc59208f_1 + - platform: tlc59208f + id: tlc_3 + channel: 0 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_4 + channel: 1 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_5 + channel: 2 + tlc59208f_id: tlc59208f_2 + - platform: tlc59208f + id: tlc_6 + channel: 0 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_7 + channel: 1 + tlc59208f_id: tlc59208f_3 + - platform: tlc59208f + id: tlc_8 + channel: 2 + tlc59208f_id: tlc59208f_3 diff --git a/tests/components/tm1621/test.esp32-c3-idf.yaml b/tests/components/tm1621/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..cddd64f31f --- /dev/null +++ b/tests/components/tm1621/test.esp32-c3-idf.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 7 + data_pin: 4 + read_pin: 5 + write_pin: 6 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1621/test.esp32-c3.yaml b/tests/components/tm1621/test.esp32-c3.yaml new file mode 100644 index 0000000000..cddd64f31f --- /dev/null +++ b/tests/components/tm1621/test.esp32-c3.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 7 + data_pin: 4 + read_pin: 5 + write_pin: 6 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1621/test.esp32-idf.yaml b/tests/components/tm1621/test.esp32-idf.yaml new file mode 100644 index 0000000000..8eab46f000 --- /dev/null +++ b/tests/components/tm1621/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 15 + data_pin: 14 + read_pin: 12 + write_pin: 13 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1621/test.esp32.yaml b/tests/components/tm1621/test.esp32.yaml new file mode 100644 index 0000000000..8eab46f000 --- /dev/null +++ b/tests/components/tm1621/test.esp32.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 15 + data_pin: 14 + read_pin: 12 + write_pin: 13 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1621/test.esp8266.yaml b/tests/components/tm1621/test.esp8266.yaml new file mode 100644 index 0000000000..8eab46f000 --- /dev/null +++ b/tests/components/tm1621/test.esp8266.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 15 + data_pin: 14 + read_pin: 12 + write_pin: 13 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1621/test.rp2040.yaml b/tests/components/tm1621/test.rp2040.yaml new file mode 100644 index 0000000000..cddd64f31f --- /dev/null +++ b/tests/components/tm1621/test.rp2040.yaml @@ -0,0 +1,12 @@ +display: + - platform: tm1621 + id: tm1621_display + cs_pin: 7 + data_pin: 4 + read_pin: 5 + write_pin: 6 + lambda: |- + it.printf(0, "%.1f", 20.0); + it.display_celsius(true); + it.printf(1, "%.1f", 20.0); + it.display_humidity(true); diff --git a/tests/components/tm1637/test.esp32-c3-idf.yaml b/tests/components/tm1637/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fa4c95b443 --- /dev/null +++ b/tests/components/tm1637/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 5 + dio_pin: 4 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1637/test.esp32-c3.yaml b/tests/components/tm1637/test.esp32-c3.yaml new file mode 100644 index 0000000000..fa4c95b443 --- /dev/null +++ b/tests/components/tm1637/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 5 + dio_pin: 4 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1637/test.esp32-idf.yaml b/tests/components/tm1637/test.esp32-idf.yaml new file mode 100644 index 0000000000..bf5f331cca --- /dev/null +++ b/tests/components/tm1637/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 15 + dio_pin: 14 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1637/test.esp32.yaml b/tests/components/tm1637/test.esp32.yaml new file mode 100644 index 0000000000..bf5f331cca --- /dev/null +++ b/tests/components/tm1637/test.esp32.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 15 + dio_pin: 14 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1637/test.esp8266.yaml b/tests/components/tm1637/test.esp8266.yaml new file mode 100644 index 0000000000..fa4c95b443 --- /dev/null +++ b/tests/components/tm1637/test.esp8266.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 5 + dio_pin: 4 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1637/test.rp2040.yaml b/tests/components/tm1637/test.rp2040.yaml new file mode 100644 index 0000000000..fa4c95b443 --- /dev/null +++ b/tests/components/tm1637/test.rp2040.yaml @@ -0,0 +1,7 @@ +display: + - platform: tm1637 + clk_pin: 5 + dio_pin: 4 + intensity: 3 + lambda: |- + it.print("1234"); diff --git a/tests/components/tm1638/test.esp32-c3-idf.yaml b/tests/components/tm1638/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.esp32-c3-idf.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.esp32-c3.yaml b/tests/components/tm1638/test.esp32-c3.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.esp32-c3.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.esp32-idf.yaml b/tests/components/tm1638/test.esp32-idf.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.esp32-idf.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.esp32.yaml b/tests/components/tm1638/test.esp32.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.esp32.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.esp8266.yaml b/tests/components/tm1638/test.esp8266.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.esp8266.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.rp2040.yaml b/tests/components/tm1638/test.rp2040.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/test.rp2040.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1651/test.esp32-c3.yaml b/tests/components/tm1651/test.esp32-c3.yaml new file mode 100644 index 0000000000..667648f4d6 --- /dev/null +++ b/tests/components/tm1651/test.esp32-c3.yaml @@ -0,0 +1,21 @@ +tm1651: + id: tm1651_battery + clk_pin: 5 + dio_pin: 4 + +esphome: + on_boot: + then: + - tm1651.set_level_percent: + id: tm1651_battery + level_percent: 50 + - tm1651.set_level: + id: tm1651_battery + level: 5 + - tm1651.set_brightness: + id: tm1651_battery + brightness: 2 + - tm1651.turn_on: + id: tm1651_battery + - tm1651.turn_off: + id: tm1651_battery diff --git a/tests/components/tm1651/test.esp32.yaml b/tests/components/tm1651/test.esp32.yaml new file mode 100644 index 0000000000..667648f4d6 --- /dev/null +++ b/tests/components/tm1651/test.esp32.yaml @@ -0,0 +1,21 @@ +tm1651: + id: tm1651_battery + clk_pin: 5 + dio_pin: 4 + +esphome: + on_boot: + then: + - tm1651.set_level_percent: + id: tm1651_battery + level_percent: 50 + - tm1651.set_level: + id: tm1651_battery + level: 5 + - tm1651.set_brightness: + id: tm1651_battery + brightness: 2 + - tm1651.turn_on: + id: tm1651_battery + - tm1651.turn_off: + id: tm1651_battery diff --git a/tests/components/tm1651/test.esp8266.yaml b/tests/components/tm1651/test.esp8266.yaml new file mode 100644 index 0000000000..667648f4d6 --- /dev/null +++ b/tests/components/tm1651/test.esp8266.yaml @@ -0,0 +1,21 @@ +tm1651: + id: tm1651_battery + clk_pin: 5 + dio_pin: 4 + +esphome: + on_boot: + then: + - tm1651.set_level_percent: + id: tm1651_battery + level_percent: 50 + - tm1651.set_level: + id: tm1651_battery + level: 5 + - tm1651.set_brightness: + id: tm1651_battery + brightness: 2 + - tm1651.turn_on: + id: tm1651_battery + - tm1651.turn_off: + id: tm1651_battery diff --git a/tests/components/tm1651/test.rp2040.yaml b/tests/components/tm1651/test.rp2040.yaml new file mode 100644 index 0000000000..667648f4d6 --- /dev/null +++ b/tests/components/tm1651/test.rp2040.yaml @@ -0,0 +1,21 @@ +tm1651: + id: tm1651_battery + clk_pin: 5 + dio_pin: 4 + +esphome: + on_boot: + then: + - tm1651.set_level_percent: + id: tm1651_battery + level_percent: 50 + - tm1651.set_level: + id: tm1651_battery + level: 5 + - tm1651.set_brightness: + id: tm1651_battery + brightness: 2 + - tm1651.turn_on: + id: tm1651_battery + - tm1651.turn_off: + id: tm1651_battery diff --git a/tests/components/tmp102/test.esp32-c3-idf.yaml b/tests/components/tmp102/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c1d35fca3f --- /dev/null +++ b/tests/components/tmp102/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 5 + sda: 4 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp102/test.esp32-c3.yaml b/tests/components/tmp102/test.esp32-c3.yaml new file mode 100644 index 0000000000..c1d35fca3f --- /dev/null +++ b/tests/components/tmp102/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 5 + sda: 4 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp102/test.esp32-idf.yaml b/tests/components/tmp102/test.esp32-idf.yaml new file mode 100644 index 0000000000..840bf7edb3 --- /dev/null +++ b/tests/components/tmp102/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 16 + sda: 17 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp102/test.esp32.yaml b/tests/components/tmp102/test.esp32.yaml new file mode 100644 index 0000000000..840bf7edb3 --- /dev/null +++ b/tests/components/tmp102/test.esp32.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 16 + sda: 17 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp102/test.esp8266.yaml b/tests/components/tmp102/test.esp8266.yaml new file mode 100644 index 0000000000..c1d35fca3f --- /dev/null +++ b/tests/components/tmp102/test.esp8266.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 5 + sda: 4 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp102/test.rp2040.yaml b/tests/components/tmp102/test.rp2040.yaml new file mode 100644 index 0000000000..c1d35fca3f --- /dev/null +++ b/tests/components/tmp102/test.rp2040.yaml @@ -0,0 +1,8 @@ +i2c: + - id: i2c_tmp102 + scl: 5 + sda: 4 + +sensor: + - platform: tmp102 + name: TMP102 Temperature diff --git a/tests/components/tmp1075/test.esp32-c3-idf.yaml b/tests/components/tmp1075/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..99433aa655 --- /dev/null +++ b/tests/components/tmp1075/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 5 + sda: 4 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp1075/test.esp32-c3.yaml b/tests/components/tmp1075/test.esp32-c3.yaml new file mode 100644 index 0000000000..99433aa655 --- /dev/null +++ b/tests/components/tmp1075/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 5 + sda: 4 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp1075/test.esp32-idf.yaml b/tests/components/tmp1075/test.esp32-idf.yaml new file mode 100644 index 0000000000..6c50d0da77 --- /dev/null +++ b/tests/components/tmp1075/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 16 + sda: 17 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp1075/test.esp32.yaml b/tests/components/tmp1075/test.esp32.yaml new file mode 100644 index 0000000000..6c50d0da77 --- /dev/null +++ b/tests/components/tmp1075/test.esp32.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 16 + sda: 17 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp1075/test.esp8266.yaml b/tests/components/tmp1075/test.esp8266.yaml new file mode 100644 index 0000000000..99433aa655 --- /dev/null +++ b/tests/components/tmp1075/test.esp8266.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 5 + sda: 4 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp1075/test.rp2040.yaml b/tests/components/tmp1075/test.rp2040.yaml new file mode 100644 index 0000000000..99433aa655 --- /dev/null +++ b/tests/components/tmp1075/test.rp2040.yaml @@ -0,0 +1,16 @@ +i2c: + - id: i2c_tmp1075 + scl: 5 + sda: 4 + +sensor: + - platform: tmp1075 + name: Temperature TMP1075 + conversion_rate: 27.5ms + alert: + limit_low: 50 + limit_high: 75 + fault_count: 1 + polarity: active_high + function: comparator + update_interval: 10s diff --git a/tests/components/tmp117/test.esp32-c3-idf.yaml b/tests/components/tmp117/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..61fc2cc03d --- /dev/null +++ b/tests/components/tmp117/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 5 + sda: 4 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tmp117/test.esp32-c3.yaml b/tests/components/tmp117/test.esp32-c3.yaml new file mode 100644 index 0000000000..61fc2cc03d --- /dev/null +++ b/tests/components/tmp117/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 5 + sda: 4 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tmp117/test.esp32-idf.yaml b/tests/components/tmp117/test.esp32-idf.yaml new file mode 100644 index 0000000000..03e0dd4e8e --- /dev/null +++ b/tests/components/tmp117/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 16 + sda: 17 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tmp117/test.esp32.yaml b/tests/components/tmp117/test.esp32.yaml new file mode 100644 index 0000000000..03e0dd4e8e --- /dev/null +++ b/tests/components/tmp117/test.esp32.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 16 + sda: 17 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tmp117/test.esp8266.yaml b/tests/components/tmp117/test.esp8266.yaml new file mode 100644 index 0000000000..61fc2cc03d --- /dev/null +++ b/tests/components/tmp117/test.esp8266.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 5 + sda: 4 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tmp117/test.rp2040.yaml b/tests/components/tmp117/test.rp2040.yaml new file mode 100644 index 0000000000..61fc2cc03d --- /dev/null +++ b/tests/components/tmp117/test.rp2040.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tmp117 + scl: 5 + sda: 4 + +sensor: + - platform: tmp117 + name: TMP117 Temperature + update_interval: 5s diff --git a/tests/components/tof10120/test.esp32-c3-idf.yaml b/tests/components/tof10120/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..01cde0df6a --- /dev/null +++ b/tests/components/tof10120/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 5 + sda: 4 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/tof10120/test.esp32-c3.yaml b/tests/components/tof10120/test.esp32-c3.yaml new file mode 100644 index 0000000000..01cde0df6a --- /dev/null +++ b/tests/components/tof10120/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 5 + sda: 4 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/tof10120/test.esp32-idf.yaml b/tests/components/tof10120/test.esp32-idf.yaml new file mode 100644 index 0000000000..74541ecde8 --- /dev/null +++ b/tests/components/tof10120/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 16 + sda: 17 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/tof10120/test.esp32.yaml b/tests/components/tof10120/test.esp32.yaml new file mode 100644 index 0000000000..74541ecde8 --- /dev/null +++ b/tests/components/tof10120/test.esp32.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 16 + sda: 17 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/tof10120/test.esp8266.yaml b/tests/components/tof10120/test.esp8266.yaml new file mode 100644 index 0000000000..01cde0df6a --- /dev/null +++ b/tests/components/tof10120/test.esp8266.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 5 + sda: 4 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/tof10120/test.rp2040.yaml b/tests/components/tof10120/test.rp2040.yaml new file mode 100644 index 0000000000..01cde0df6a --- /dev/null +++ b/tests/components/tof10120/test.rp2040.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_tof10120 + scl: 5 + sda: 4 + +sensor: + - platform: tof10120 + name: Distance sensor + update_interval: 5s diff --git a/tests/components/toshiba/test.esp32-c3-idf.yaml b/tests/components/toshiba/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c134c7f5bd --- /dev/null +++ b/tests/components/toshiba/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +climate: + - platform: toshiba + name: Toshiba Climate diff --git a/tests/components/toshiba/test.esp32-c3.yaml b/tests/components/toshiba/test.esp32-c3.yaml new file mode 100644 index 0000000000..c134c7f5bd --- /dev/null +++ b/tests/components/toshiba/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +climate: + - platform: toshiba + name: Toshiba Climate diff --git a/tests/components/toshiba/test.esp32-idf.yaml b/tests/components/toshiba/test.esp32-idf.yaml new file mode 100644 index 0000000000..c134c7f5bd --- /dev/null +++ b/tests/components/toshiba/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +climate: + - platform: toshiba + name: Toshiba Climate diff --git a/tests/components/toshiba/test.esp32.yaml b/tests/components/toshiba/test.esp32.yaml new file mode 100644 index 0000000000..c134c7f5bd --- /dev/null +++ b/tests/components/toshiba/test.esp32.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +climate: + - platform: toshiba + name: Toshiba Climate diff --git a/tests/components/toshiba/test.esp8266.yaml b/tests/components/toshiba/test.esp8266.yaml new file mode 100644 index 0000000000..8730a5d4ab --- /dev/null +++ b/tests/components/toshiba/test.esp8266.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 5 + carrier_duty_percent: 50% + +climate: + - platform: toshiba + name: Toshiba Climate diff --git a/tests/components/total_daily_energy/test.esp32-c3-idf.yaml b/tests/components/total_daily_energy/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..71afa45ed5 --- /dev/null +++ b/tests/components/total_daily_energy/test.esp32-c3-idf.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 5 + cf_pin: 4 + cf1_pin: 3 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/total_daily_energy/test.esp32-c3.yaml b/tests/components/total_daily_energy/test.esp32-c3.yaml new file mode 100644 index 0000000000..71afa45ed5 --- /dev/null +++ b/tests/components/total_daily_energy/test.esp32-c3.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 5 + cf_pin: 4 + cf1_pin: 3 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/total_daily_energy/test.esp32-idf.yaml b/tests/components/total_daily_energy/test.esp32-idf.yaml new file mode 100644 index 0000000000..34d452aae5 --- /dev/null +++ b/tests/components/total_daily_energy/test.esp32-idf.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 15 + cf_pin: 14 + cf1_pin: 13 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/total_daily_energy/test.esp32.yaml b/tests/components/total_daily_energy/test.esp32.yaml new file mode 100644 index 0000000000..34d452aae5 --- /dev/null +++ b/tests/components/total_daily_energy/test.esp32.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 15 + cf_pin: 14 + cf1_pin: 13 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/total_daily_energy/test.esp8266.yaml b/tests/components/total_daily_energy/test.esp8266.yaml new file mode 100644 index 0000000000..34d452aae5 --- /dev/null +++ b/tests/components/total_daily_energy/test.esp8266.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 15 + cf_pin: 14 + cf1_pin: 13 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/total_daily_energy/test.rp2040.yaml b/tests/components/total_daily_energy/test.rp2040.yaml new file mode 100644 index 0000000000..71afa45ed5 --- /dev/null +++ b/tests/components/total_daily_energy/test.rp2040.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + +sensor: + - platform: hlw8012 + sel_pin: 5 + cf_pin: 4 + cf1_pin: 3 + current: + name: HLW8012 Current + voltage: + name: HLW8012 Voltage + power: + name: HLW8012 Power + id: hlw8012_power + energy: + name: HLW8012 Energy + id: hlw8012_energy + update_interval: 15s + current_resistor: 0.001 ohm + voltage_divider: 2351 + change_mode_every: "never" + initial_mode: VOLTAGE + model: hlw8012 + - platform: total_daily_energy + name: HLW8012 Total Daily Energy + power_id: hlw8012_power diff --git a/tests/components/tsl2561/test.esp32-c3-idf.yaml b/tests/components/tsl2561/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..1ea768c5d9 --- /dev/null +++ b/tests/components/tsl2561/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2561/test.esp32-c3.yaml b/tests/components/tsl2561/test.esp32-c3.yaml new file mode 100644 index 0000000000..1ea768c5d9 --- /dev/null +++ b/tests/components/tsl2561/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2561/test.esp32-idf.yaml b/tests/components/tsl2561/test.esp32-idf.yaml new file mode 100644 index 0000000000..8d43c62414 --- /dev/null +++ b/tests/components/tsl2561/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 16 + sda: 17 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2561/test.esp32.yaml b/tests/components/tsl2561/test.esp32.yaml new file mode 100644 index 0000000000..8d43c62414 --- /dev/null +++ b/tests/components/tsl2561/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 16 + sda: 17 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2561/test.esp8266.yaml b/tests/components/tsl2561/test.esp8266.yaml new file mode 100644 index 0000000000..1ea768c5d9 --- /dev/null +++ b/tests/components/tsl2561/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2561/test.rp2040.yaml b/tests/components/tsl2561/test.rp2040.yaml new file mode 100644 index 0000000000..1ea768c5d9 --- /dev/null +++ b/tests/components/tsl2561/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_tsl2561 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2561 + name: TSL2561 Ambient Light + address: 0x39 + is_cs_package: true + integration_time: 402ms + gain: 16x + update_interval: 15s diff --git a/tests/components/tsl2591/test.esp32-c3-idf.yaml b/tests/components/tsl2591/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..de57ef548a --- /dev/null +++ b/tests/components/tsl2591/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tsl2591/test.esp32-c3.yaml b/tests/components/tsl2591/test.esp32-c3.yaml new file mode 100644 index 0000000000..de57ef548a --- /dev/null +++ b/tests/components/tsl2591/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tsl2591/test.esp32-idf.yaml b/tests/components/tsl2591/test.esp32-idf.yaml new file mode 100644 index 0000000000..14f9311ae6 --- /dev/null +++ b/tests/components/tsl2591/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 16 + sda: 17 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tsl2591/test.esp32.yaml b/tests/components/tsl2591/test.esp32.yaml new file mode 100644 index 0000000000..14f9311ae6 --- /dev/null +++ b/tests/components/tsl2591/test.esp32.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 16 + sda: 17 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tsl2591/test.esp8266.yaml b/tests/components/tsl2591/test.esp8266.yaml new file mode 100644 index 0000000000..de57ef548a --- /dev/null +++ b/tests/components/tsl2591/test.esp8266.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tsl2591/test.rp2040.yaml b/tests/components/tsl2591/test.rp2040.yaml new file mode 100644 index 0000000000..de57ef548a --- /dev/null +++ b/tests/components/tsl2591/test.rp2040.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tsl2591 + scl: 5 + sda: 4 + +sensor: + - platform: tsl2591 + id: test_tsl2591 + address: 0x29 + integration_time: 600ms + gain: high + visible: + name: tsl2591 visible + id: tsl2591_vis + unit_of_measurement: pH + infrared: + name: tsl2591 infrared + id: tsl2591_ir + full_spectrum: + name: tsl2591 full_spectrum + id: tsl2591_fs + calculated_lux: + name: tsl2591 calculated_lux + id: tsl2591_cl + update_interval: 15s diff --git a/tests/components/tt21100/test.esp32-c3-idf.yaml b/tests/components/tt21100/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..17b8c8065a --- /dev/null +++ b/tests/components/tt21100/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 3 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 6 + reset_pin: 7 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/tt21100/test.esp32-c3.yaml b/tests/components/tt21100/test.esp32-c3.yaml new file mode 100644 index 0000000000..17b8c8065a --- /dev/null +++ b/tests/components/tt21100/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 3 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 6 + reset_pin: 7 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/tt21100/test.esp32-idf.yaml b/tests/components/tt21100/test.esp32-idf.yaml new file mode 100644 index 0000000000..2419b0ad6a --- /dev/null +++ b/tests/components/tt21100/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 16 + sda: 17 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 13 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 14 + reset_pin: 15 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/tt21100/test.esp32.yaml b/tests/components/tt21100/test.esp32.yaml new file mode 100644 index 0000000000..2419b0ad6a --- /dev/null +++ b/tests/components/tt21100/test.esp32.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 16 + sda: 17 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 13 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 14 + reset_pin: 15 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/tt21100/test.esp8266.yaml b/tests/components/tt21100/test.esp8266.yaml new file mode 100644 index 0000000000..1393019417 --- /dev/null +++ b/tests/components/tt21100/test.esp8266.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 13 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 14 + reset_pin: 15 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/tt21100/test.rp2040.yaml b/tests/components/tt21100/test.rp2040.yaml new file mode 100644 index 0000000000..17b8c8065a --- /dev/null +++ b/tests/components/tt21100/test.rp2040.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_tt21100 + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + id: ssd1306_display + model: SSD1306_128X64 + reset_pin: 3 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + +touchscreen: + - platform: tt21100 + display: ssd1306_display + interrupt_pin: 6 + reset_pin: 7 + +binary_sensor: + - platform: tt21100 + name: Home Button + index: 1 diff --git a/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml b/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2006061c6e --- /dev/null +++ b/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 5 + sdo_pin: 4 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_bsf/test.esp32-c3.yaml b/tests/components/ttp229_bsf/test.esp32-c3.yaml new file mode 100644 index 0000000000..2006061c6e --- /dev/null +++ b/tests/components/ttp229_bsf/test.esp32-c3.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 5 + sdo_pin: 4 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_bsf/test.esp32-idf.yaml b/tests/components/ttp229_bsf/test.esp32-idf.yaml new file mode 100644 index 0000000000..edee6d164e --- /dev/null +++ b/tests/components/ttp229_bsf/test.esp32-idf.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 16 + sdo_pin: 17 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_bsf/test.esp32.yaml b/tests/components/ttp229_bsf/test.esp32.yaml new file mode 100644 index 0000000000..edee6d164e --- /dev/null +++ b/tests/components/ttp229_bsf/test.esp32.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 16 + sdo_pin: 17 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_bsf/test.esp8266.yaml b/tests/components/ttp229_bsf/test.esp8266.yaml new file mode 100644 index 0000000000..2006061c6e --- /dev/null +++ b/tests/components/ttp229_bsf/test.esp8266.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 5 + sdo_pin: 4 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_bsf/test.rp2040.yaml b/tests/components/ttp229_bsf/test.rp2040.yaml new file mode 100644 index 0000000000..2006061c6e --- /dev/null +++ b/tests/components/ttp229_bsf/test.rp2040.yaml @@ -0,0 +1,8 @@ +ttp229_bsf: + scl_pin: 5 + sdo_pin: 4 + +binary_sensor: + - platform: ttp229_bsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml b/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3927aff40e --- /dev/null +++ b/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 5 + sda: 4 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.esp32-c3.yaml b/tests/components/ttp229_lsf/test.esp32-c3.yaml new file mode 100644 index 0000000000..3927aff40e --- /dev/null +++ b/tests/components/ttp229_lsf/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 5 + sda: 4 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.esp32-idf.yaml b/tests/components/ttp229_lsf/test.esp32-idf.yaml new file mode 100644 index 0000000000..81fb965883 --- /dev/null +++ b/tests/components/ttp229_lsf/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 16 + sda: 17 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.esp32.yaml b/tests/components/ttp229_lsf/test.esp32.yaml new file mode 100644 index 0000000000..81fb965883 --- /dev/null +++ b/tests/components/ttp229_lsf/test.esp32.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 16 + sda: 17 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.esp8266.yaml b/tests/components/ttp229_lsf/test.esp8266.yaml new file mode 100644 index 0000000000..3927aff40e --- /dev/null +++ b/tests/components/ttp229_lsf/test.esp8266.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 5 + sda: 4 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/ttp229_lsf/test.rp2040.yaml b/tests/components/ttp229_lsf/test.rp2040.yaml new file mode 100644 index 0000000000..3927aff40e --- /dev/null +++ b/tests/components/ttp229_lsf/test.rp2040.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_ttp229_lsf + scl: 5 + sda: 4 + +ttp229_lsf: + +binary_sensor: + - platform: ttp229_lsf + name: TTP229 Channel 0 + channel: 0 diff --git a/tests/components/tuya/test.esp32-c3-idf.yaml b/tests/components/tuya/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..4892e807b1 --- /dev/null +++ b/tests/components/tuya/test.esp32-c3-idf.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +tuya: + status_pin: + number: 6 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tuya/test.esp32-c3.yaml b/tests/components/tuya/test.esp32-c3.yaml new file mode 100644 index 0000000000..4892e807b1 --- /dev/null +++ b/tests/components/tuya/test.esp32-c3.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +tuya: + status_pin: + number: 6 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tuya/test.esp32-idf.yaml b/tests/components/tuya/test.esp32-idf.yaml new file mode 100644 index 0000000000..9105522dcd --- /dev/null +++ b/tests/components/tuya/test.esp32-idf.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +tuya: + status_pin: + number: 15 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tuya/test.esp32.yaml b/tests/components/tuya/test.esp32.yaml new file mode 100644 index 0000000000..9105522dcd --- /dev/null +++ b/tests/components/tuya/test.esp32.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +tuya: + status_pin: + number: 15 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tuya/test.esp8266.yaml b/tests/components/tuya/test.esp8266.yaml new file mode 100644 index 0000000000..56177fb982 --- /dev/null +++ b/tests/components/tuya/test.esp8266.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +tuya: + status_pin: + number: 16 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tuya/test.rp2040.yaml b/tests/components/tuya/test.rp2040.yaml new file mode 100644 index 0000000000..4892e807b1 --- /dev/null +++ b/tests/components/tuya/test.rp2040.yaml @@ -0,0 +1,78 @@ +wifi: + ssid: MySSID + password: password1 + +uart: + - id: uart_tuya + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +tuya: + status_pin: + number: 6 + inverted: true + on_datapoint_update: + - sensor_datapoint: 6 + datapoint_type: raw + then: + - logger.log: Datapoint 6 updated + +binary_sensor: + - platform: tuya + id: tuya_binary_sensor + sensor_datapoint: 1 + +climate: + - platform: tuya + id: tuya_climate + switch_datapoint: 1 + target_temperature_datapoint: 3 + current_temperature_multiplier: 0.5 + target_temperature_multiplier: 0.5 + reports_fahrenheit: true + +cover: + - platform: tuya + id: tuya_cover + position_datapoint: 2 + +light: + - platform: tuya + id: tuya_light + switch_datapoint: 1 + dimmer_datapoint: 2 + min_value_datapoint: 3 + color_temperature_datapoint: 4 + min_value: 1 + max_value: 100 + cold_white_color_temperature: 153 mireds + warm_white_color_temperature: 500 mireds + gamma_correct: 1 + +number: + - platform: tuya + id: tuya_number + number_datapoint: 102 + min_value: 0 + max_value: 17 + step: 1 + +select: + - platform: tuya + id: tuya_select + enum_datapoint: 42 + options: + 0: Internal + 1: Floor + 2: Both + +sensor: + - platform: tuya + id: tuya_sensor + sensor_datapoint: 1 + +switch: + - platform: tuya + id: tuya_switch + switch_datapoint: 1 diff --git a/tests/components/tx20/test.esp32-c3-idf.yaml b/tests/components/tx20/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.esp32-c3.yaml b/tests/components/tx20/test.esp32-c3.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.esp32-idf.yaml b/tests/components/tx20/test.esp32-idf.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.esp32.yaml b/tests/components/tx20/test.esp32.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.esp32.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.esp8266.yaml b/tests/components/tx20/test.esp8266.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.esp8266.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.rp2040.yaml b/tests/components/tx20/test.rp2040.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/test.rp2040.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 From 7e8ed5c391fa773ecf8f450196f05215bb5cf3d4 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 23 Apr 2024 04:49:15 -0500 Subject: [PATCH 066/313] Add some components to the new testing framework (S part 1) (#6224) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../safe_mode/test.esp32-c3-idf.yaml | 13 +++++ tests/components/safe_mode/test.esp32-c3.yaml | 13 +++++ .../components/safe_mode/test.esp32-idf.yaml | 13 +++++ tests/components/safe_mode/test.esp32.yaml | 13 +++++ tests/components/safe_mode/test.esp8266.yaml | 13 +++++ tests/components/safe_mode/test.rp2040.yaml | 13 +++++ tests/components/scd30/test.esp32-c3-idf.yaml | 20 ++++++++ tests/components/scd30/test.esp32-c3.yaml | 20 ++++++++ tests/components/scd30/test.esp32-idf.yaml | 20 ++++++++ tests/components/scd30/test.esp32.yaml | 20 ++++++++ tests/components/scd30/test.esp8266.yaml | 20 ++++++++ tests/components/scd30/test.rp2040.yaml | 20 ++++++++ tests/components/scd4x/test.esp32-c3-idf.yaml | 20 ++++++++ tests/components/scd4x/test.esp32-c3.yaml | 20 ++++++++ tests/components/scd4x/test.esp32-idf.yaml | 20 ++++++++ tests/components/scd4x/test.esp32.yaml | 20 ++++++++ tests/components/scd4x/test.esp8266.yaml | 20 ++++++++ tests/components/scd4x/test.rp2040.yaml | 20 ++++++++ .../components/script/test.esp32-c3-idf.yaml | 26 ++++++++++ tests/components/script/test.esp32-c3.yaml | 26 ++++++++++ tests/components/script/test.esp32-idf.yaml | 26 ++++++++++ tests/components/script/test.esp32.yaml | 26 ++++++++++ tests/components/script/test.esp8266.yaml | 26 ++++++++++ tests/components/script/test.rp2040.yaml | 26 ++++++++++ .../sdm_meter/test.esp32-c3-idf.yaml | 23 +++++++++ tests/components/sdm_meter/test.esp32-c3.yaml | 23 +++++++++ .../components/sdm_meter/test.esp32-idf.yaml | 23 +++++++++ tests/components/sdm_meter/test.esp32.yaml | 23 +++++++++ tests/components/sdm_meter/test.esp8266.yaml | 23 +++++++++ tests/components/sdm_meter/test.rp2040.yaml | 23 +++++++++ tests/components/sdp3x/test.esp32-c3-idf.yaml | 11 +++++ tests/components/sdp3x/test.esp32-c3.yaml | 11 +++++ tests/components/sdp3x/test.esp32-idf.yaml | 11 +++++ tests/components/sdp3x/test.esp32.yaml | 11 +++++ tests/components/sdp3x/test.esp8266.yaml | 11 +++++ tests/components/sdp3x/test.rp2040.yaml | 11 +++++ .../components/sds011/test.esp32-c3-idf.yaml | 14 ++++++ tests/components/sds011/test.esp32-c3.yaml | 14 ++++++ tests/components/sds011/test.esp32-idf.yaml | 14 ++++++ tests/components/sds011/test.esp32.yaml | 14 ++++++ tests/components/sds011/test.esp8266.yaml | 14 ++++++ tests/components/sds011/test.rp2040.yaml | 14 ++++++ .../selec_meter/test.esp32-c3-idf.yaml | 45 +++++++++++++++++ .../components/selec_meter/test.esp32-c3.yaml | 45 +++++++++++++++++ .../selec_meter/test.esp32-idf.yaml | 45 +++++++++++++++++ tests/components/selec_meter/test.esp32.yaml | 45 +++++++++++++++++ .../components/selec_meter/test.esp8266.yaml | 45 +++++++++++++++++ tests/components/selec_meter/test.rp2040.yaml | 45 +++++++++++++++++ .../components/sen0321/test.esp32-c3-idf.yaml | 10 ++++ tests/components/sen0321/test.esp32-c3.yaml | 10 ++++ tests/components/sen0321/test.esp32-idf.yaml | 10 ++++ tests/components/sen0321/test.esp32.yaml | 10 ++++ tests/components/sen0321/test.esp8266.yaml | 10 ++++ tests/components/sen0321/test.rp2040.yaml | 10 ++++ .../sen21231/test.esp32-c3-idf.yaml | 9 ++++ tests/components/sen21231/test.esp32-c3.yaml | 9 ++++ tests/components/sen21231/test.esp32-idf.yaml | 9 ++++ tests/components/sen21231/test.esp32.yaml | 9 ++++ tests/components/sen21231/test.esp8266.yaml | 9 ++++ tests/components/sen21231/test.rp2040.yaml | 9 ++++ tests/components/sen5x/test.esp32-c3-idf.yaml | 49 +++++++++++++++++++ tests/components/sen5x/test.esp32-c3.yaml | 49 +++++++++++++++++++ tests/components/sen5x/test.esp32-idf.yaml | 49 +++++++++++++++++++ tests/components/sen5x/test.esp32.yaml | 49 +++++++++++++++++++ tests/components/sen5x/test.esp8266.yaml | 49 +++++++++++++++++++ tests/components/sen5x/test.rp2040.yaml | 49 +++++++++++++++++++ .../senseair/test.esp32-c3-idf.yaml | 19 +++++++ tests/components/senseair/test.esp32-c3.yaml | 19 +++++++ tests/components/senseair/test.esp32-idf.yaml | 19 +++++++ tests/components/senseair/test.esp32.yaml | 19 +++++++ tests/components/senseair/test.esp8266.yaml | 19 +++++++ tests/components/senseair/test.rp2040.yaml | 19 +++++++ tests/components/servo/test.esp32-c3-idf.yaml | 19 +++++++ tests/components/servo/test.esp32-c3.yaml | 19 +++++++ tests/components/servo/test.esp32-idf.yaml | 19 +++++++ tests/components/servo/test.esp32.yaml | 19 +++++++ tests/components/servo/test.esp8266.yaml | 19 +++++++ tests/components/servo/test.rp2040.yaml | 19 +++++++ tests/components/sfa30/test.esp32-c3-idf.yaml | 15 ++++++ tests/components/sfa30/test.esp32-c3.yaml | 15 ++++++ tests/components/sfa30/test.esp32-idf.yaml | 15 ++++++ tests/components/sfa30/test.esp32.yaml | 15 ++++++ tests/components/sfa30/test.esp8266.yaml | 15 ++++++ tests/components/sfa30/test.rp2040.yaml | 15 ++++++ tests/components/sgp30/test.esp32-c3-idf.yaml | 15 ++++++ tests/components/sgp30/test.esp32-c3.yaml | 15 ++++++ tests/components/sgp30/test.esp32-idf.yaml | 15 ++++++ tests/components/sgp30/test.esp32.yaml | 15 ++++++ tests/components/sgp30/test.esp8266.yaml | 15 ++++++ tests/components/sgp30/test.rp2040.yaml | 15 ++++++ tests/components/sgp4x/test.esp32-c3-idf.yaml | 27 ++++++++++ tests/components/sgp4x/test.esp32-c3.yaml | 27 ++++++++++ tests/components/sgp4x/test.esp32-idf.yaml | 27 ++++++++++ tests/components/sgp4x/test.esp32.yaml | 27 ++++++++++ tests/components/sgp4x/test.esp8266.yaml | 27 ++++++++++ tests/components/sgp4x/test.rp2040.yaml | 27 ++++++++++ .../shelly_dimmer/test.esp8266.yaml | 19 +++++++ .../components/sht3xd/test.esp32-c3-idf.yaml | 13 +++++ tests/components/sht3xd/test.esp32-c3.yaml | 13 +++++ tests/components/sht3xd/test.esp32-idf.yaml | 13 +++++ tests/components/sht3xd/test.esp32.yaml | 13 +++++ tests/components/sht3xd/test.esp8266.yaml | 13 +++++ tests/components/sht3xd/test.rp2040.yaml | 13 +++++ tests/components/sht4x/test.esp32-c3-idf.yaml | 13 +++++ tests/components/sht4x/test.esp32-c3.yaml | 13 +++++ tests/components/sht4x/test.esp32-idf.yaml | 13 +++++ tests/components/sht4x/test.esp32.yaml | 13 +++++ tests/components/sht4x/test.esp8266.yaml | 13 +++++ tests/components/sht4x/test.rp2040.yaml | 13 +++++ tests/components/shtcx/test.esp32-c3-idf.yaml | 13 +++++ tests/components/shtcx/test.esp32-c3.yaml | 13 +++++ tests/components/shtcx/test.esp32-idf.yaml | 13 +++++ tests/components/shtcx/test.esp32.yaml | 13 +++++ tests/components/shtcx/test.esp8266.yaml | 13 +++++ tests/components/shtcx/test.rp2040.yaml | 13 +++++ .../shutdown/test.esp32-c3-idf.yaml | 7 +++ tests/components/shutdown/test.esp32-c3.yaml | 7 +++ tests/components/shutdown/test.esp32-idf.yaml | 7 +++ tests/components/shutdown/test.esp32.yaml | 7 +++ tests/components/shutdown/test.esp8266.yaml | 7 +++ tests/components/shutdown/test.rp2040.yaml | 7 +++ .../sigma_delta_output/test.esp32-c3-idf.yaml | 16 ++++++ .../sigma_delta_output/test.esp32-c3.yaml | 16 ++++++ .../sigma_delta_output/test.esp32-idf.yaml | 16 ++++++ .../sigma_delta_output/test.esp32.yaml | 16 ++++++ .../sigma_delta_output/test.esp8266.yaml | 16 ++++++ .../sigma_delta_output/test.rp2040.yaml | 16 ++++++ .../components/sim800l/test.esp32-c3-idf.yaml | 37 ++++++++++++++ tests/components/sim800l/test.esp32-c3.yaml | 37 ++++++++++++++ tests/components/sim800l/test.esp32-idf.yaml | 37 ++++++++++++++ tests/components/sim800l/test.esp32.yaml | 37 ++++++++++++++ tests/components/sim800l/test.esp8266.yaml | 37 ++++++++++++++ tests/components/sim800l/test.rp2040.yaml | 37 ++++++++++++++ .../slow_pwm/test.esp32-c3-idf.yaml | 6 +++ tests/components/slow_pwm/test.esp32-c3.yaml | 6 +++ tests/components/slow_pwm/test.esp32-idf.yaml | 6 +++ tests/components/slow_pwm/test.esp32.yaml | 6 +++ tests/components/slow_pwm/test.esp8266.yaml | 6 +++ tests/components/slow_pwm/test.rp2040.yaml | 6 +++ .../components/sm16716/test.esp32-c3-idf.yaml | 16 ++++++ tests/components/sm16716/test.esp32-c3.yaml | 16 ++++++ tests/components/sm16716/test.esp32-idf.yaml | 16 ++++++ tests/components/sm16716/test.esp32.yaml | 16 ++++++ tests/components/sm16716/test.esp8266.yaml | 16 ++++++ tests/components/sm16716/test.rp2040.yaml | 16 ++++++ .../components/sm2135/test.esp32-c3-idf.yaml | 22 +++++++++ tests/components/sm2135/test.esp32-c3.yaml | 22 +++++++++ tests/components/sm2135/test.esp32-idf.yaml | 22 +++++++++ tests/components/sm2135/test.esp32.yaml | 22 +++++++++ tests/components/sm2135/test.esp8266.yaml | 22 +++++++++ tests/components/sm2135/test.rp2040.yaml | 22 +++++++++ .../components/sm2235/test.esp32-c3-idf.yaml | 22 +++++++++ tests/components/sm2235/test.esp32-c3.yaml | 22 +++++++++ tests/components/sm2235/test.esp32-idf.yaml | 22 +++++++++ tests/components/sm2235/test.esp32.yaml | 22 +++++++++ tests/components/sm2235/test.esp8266.yaml | 22 +++++++++ tests/components/sm2235/test.rp2040.yaml | 22 +++++++++ .../components/sm2335/test.esp32-c3-idf.yaml | 22 +++++++++ tests/components/sm2335/test.esp32-c3.yaml | 22 +++++++++ tests/components/sm2335/test.esp32-idf.yaml | 22 +++++++++ tests/components/sm2335/test.esp32.yaml | 22 +++++++++ tests/components/sm2335/test.esp8266.yaml | 22 +++++++++ tests/components/sm2335/test.rp2040.yaml | 22 +++++++++ .../components/sm300d2/test.esp32-c3-idf.yaml | 23 +++++++++ tests/components/sm300d2/test.esp32-c3.yaml | 23 +++++++++ tests/components/sm300d2/test.esp32-idf.yaml | 23 +++++++++ tests/components/sm300d2/test.esp32.yaml | 23 +++++++++ tests/components/sm300d2/test.esp8266.yaml | 23 +++++++++ tests/components/sm300d2/test.rp2040.yaml | 23 +++++++++ tests/components/sml/test.esp32-c3-idf.yaml | 31 ++++++++++++ tests/components/sml/test.esp32-c3.yaml | 31 ++++++++++++ tests/components/sml/test.esp32-idf.yaml | 31 ++++++++++++ tests/components/sml/test.esp32.yaml | 31 ++++++++++++ tests/components/sml/test.esp8266.yaml | 31 ++++++++++++ tests/components/sml/test.rp2040.yaml | 31 ++++++++++++ .../components/smt100/test.esp32-c3-idf.yaml | 19 +++++++ tests/components/smt100/test.esp32-c3.yaml | 19 +++++++ tests/components/smt100/test.esp32-idf.yaml | 19 +++++++ tests/components/smt100/test.esp32.yaml | 19 +++++++ tests/components/smt100/test.esp8266.yaml | 19 +++++++ tests/components/smt100/test.rp2040.yaml | 19 +++++++ 181 files changed, 3589 insertions(+) create mode 100644 tests/components/safe_mode/test.esp32-c3-idf.yaml create mode 100644 tests/components/safe_mode/test.esp32-c3.yaml create mode 100644 tests/components/safe_mode/test.esp32-idf.yaml create mode 100644 tests/components/safe_mode/test.esp32.yaml create mode 100644 tests/components/safe_mode/test.esp8266.yaml create mode 100644 tests/components/safe_mode/test.rp2040.yaml create mode 100644 tests/components/scd30/test.esp32-c3-idf.yaml create mode 100644 tests/components/scd30/test.esp32-c3.yaml create mode 100644 tests/components/scd30/test.esp32-idf.yaml create mode 100644 tests/components/scd30/test.esp32.yaml create mode 100644 tests/components/scd30/test.esp8266.yaml create mode 100644 tests/components/scd30/test.rp2040.yaml create mode 100644 tests/components/scd4x/test.esp32-c3-idf.yaml create mode 100644 tests/components/scd4x/test.esp32-c3.yaml create mode 100644 tests/components/scd4x/test.esp32-idf.yaml create mode 100644 tests/components/scd4x/test.esp32.yaml create mode 100644 tests/components/scd4x/test.esp8266.yaml create mode 100644 tests/components/scd4x/test.rp2040.yaml create mode 100644 tests/components/script/test.esp32-c3-idf.yaml create mode 100644 tests/components/script/test.esp32-c3.yaml create mode 100644 tests/components/script/test.esp32-idf.yaml create mode 100644 tests/components/script/test.esp32.yaml create mode 100644 tests/components/script/test.esp8266.yaml create mode 100644 tests/components/script/test.rp2040.yaml create mode 100644 tests/components/sdm_meter/test.esp32-c3-idf.yaml create mode 100644 tests/components/sdm_meter/test.esp32-c3.yaml create mode 100644 tests/components/sdm_meter/test.esp32-idf.yaml create mode 100644 tests/components/sdm_meter/test.esp32.yaml create mode 100644 tests/components/sdm_meter/test.esp8266.yaml create mode 100644 tests/components/sdm_meter/test.rp2040.yaml create mode 100644 tests/components/sdp3x/test.esp32-c3-idf.yaml create mode 100644 tests/components/sdp3x/test.esp32-c3.yaml create mode 100644 tests/components/sdp3x/test.esp32-idf.yaml create mode 100644 tests/components/sdp3x/test.esp32.yaml create mode 100644 tests/components/sdp3x/test.esp8266.yaml create mode 100644 tests/components/sdp3x/test.rp2040.yaml create mode 100644 tests/components/sds011/test.esp32-c3-idf.yaml create mode 100644 tests/components/sds011/test.esp32-c3.yaml create mode 100644 tests/components/sds011/test.esp32-idf.yaml create mode 100644 tests/components/sds011/test.esp32.yaml create mode 100644 tests/components/sds011/test.esp8266.yaml create mode 100644 tests/components/sds011/test.rp2040.yaml create mode 100644 tests/components/selec_meter/test.esp32-c3-idf.yaml create mode 100644 tests/components/selec_meter/test.esp32-c3.yaml create mode 100644 tests/components/selec_meter/test.esp32-idf.yaml create mode 100644 tests/components/selec_meter/test.esp32.yaml create mode 100644 tests/components/selec_meter/test.esp8266.yaml create mode 100644 tests/components/selec_meter/test.rp2040.yaml create mode 100644 tests/components/sen0321/test.esp32-c3-idf.yaml create mode 100644 tests/components/sen0321/test.esp32-c3.yaml create mode 100644 tests/components/sen0321/test.esp32-idf.yaml create mode 100644 tests/components/sen0321/test.esp32.yaml create mode 100644 tests/components/sen0321/test.esp8266.yaml create mode 100644 tests/components/sen0321/test.rp2040.yaml create mode 100644 tests/components/sen21231/test.esp32-c3-idf.yaml create mode 100644 tests/components/sen21231/test.esp32-c3.yaml create mode 100644 tests/components/sen21231/test.esp32-idf.yaml create mode 100644 tests/components/sen21231/test.esp32.yaml create mode 100644 tests/components/sen21231/test.esp8266.yaml create mode 100644 tests/components/sen21231/test.rp2040.yaml create mode 100644 tests/components/sen5x/test.esp32-c3-idf.yaml create mode 100644 tests/components/sen5x/test.esp32-c3.yaml create mode 100644 tests/components/sen5x/test.esp32-idf.yaml create mode 100644 tests/components/sen5x/test.esp32.yaml create mode 100644 tests/components/sen5x/test.esp8266.yaml create mode 100644 tests/components/sen5x/test.rp2040.yaml create mode 100644 tests/components/senseair/test.esp32-c3-idf.yaml create mode 100644 tests/components/senseair/test.esp32-c3.yaml create mode 100644 tests/components/senseair/test.esp32-idf.yaml create mode 100644 tests/components/senseair/test.esp32.yaml create mode 100644 tests/components/senseair/test.esp8266.yaml create mode 100644 tests/components/senseair/test.rp2040.yaml create mode 100644 tests/components/servo/test.esp32-c3-idf.yaml create mode 100644 tests/components/servo/test.esp32-c3.yaml create mode 100644 tests/components/servo/test.esp32-idf.yaml create mode 100644 tests/components/servo/test.esp32.yaml create mode 100644 tests/components/servo/test.esp8266.yaml create mode 100644 tests/components/servo/test.rp2040.yaml create mode 100644 tests/components/sfa30/test.esp32-c3-idf.yaml create mode 100644 tests/components/sfa30/test.esp32-c3.yaml create mode 100644 tests/components/sfa30/test.esp32-idf.yaml create mode 100644 tests/components/sfa30/test.esp32.yaml create mode 100644 tests/components/sfa30/test.esp8266.yaml create mode 100644 tests/components/sfa30/test.rp2040.yaml create mode 100644 tests/components/sgp30/test.esp32-c3-idf.yaml create mode 100644 tests/components/sgp30/test.esp32-c3.yaml create mode 100644 tests/components/sgp30/test.esp32-idf.yaml create mode 100644 tests/components/sgp30/test.esp32.yaml create mode 100644 tests/components/sgp30/test.esp8266.yaml create mode 100644 tests/components/sgp30/test.rp2040.yaml create mode 100644 tests/components/sgp4x/test.esp32-c3-idf.yaml create mode 100644 tests/components/sgp4x/test.esp32-c3.yaml create mode 100644 tests/components/sgp4x/test.esp32-idf.yaml create mode 100644 tests/components/sgp4x/test.esp32.yaml create mode 100644 tests/components/sgp4x/test.esp8266.yaml create mode 100644 tests/components/sgp4x/test.rp2040.yaml create mode 100644 tests/components/shelly_dimmer/test.esp8266.yaml create mode 100644 tests/components/sht3xd/test.esp32-c3-idf.yaml create mode 100644 tests/components/sht3xd/test.esp32-c3.yaml create mode 100644 tests/components/sht3xd/test.esp32-idf.yaml create mode 100644 tests/components/sht3xd/test.esp32.yaml create mode 100644 tests/components/sht3xd/test.esp8266.yaml create mode 100644 tests/components/sht3xd/test.rp2040.yaml create mode 100644 tests/components/sht4x/test.esp32-c3-idf.yaml create mode 100644 tests/components/sht4x/test.esp32-c3.yaml create mode 100644 tests/components/sht4x/test.esp32-idf.yaml create mode 100644 tests/components/sht4x/test.esp32.yaml create mode 100644 tests/components/sht4x/test.esp8266.yaml create mode 100644 tests/components/sht4x/test.rp2040.yaml create mode 100644 tests/components/shtcx/test.esp32-c3-idf.yaml create mode 100644 tests/components/shtcx/test.esp32-c3.yaml create mode 100644 tests/components/shtcx/test.esp32-idf.yaml create mode 100644 tests/components/shtcx/test.esp32.yaml create mode 100644 tests/components/shtcx/test.esp8266.yaml create mode 100644 tests/components/shtcx/test.rp2040.yaml create mode 100644 tests/components/shutdown/test.esp32-c3-idf.yaml create mode 100644 tests/components/shutdown/test.esp32-c3.yaml create mode 100644 tests/components/shutdown/test.esp32-idf.yaml create mode 100644 tests/components/shutdown/test.esp32.yaml create mode 100644 tests/components/shutdown/test.esp8266.yaml create mode 100644 tests/components/shutdown/test.rp2040.yaml create mode 100644 tests/components/sigma_delta_output/test.esp32-c3-idf.yaml create mode 100644 tests/components/sigma_delta_output/test.esp32-c3.yaml create mode 100644 tests/components/sigma_delta_output/test.esp32-idf.yaml create mode 100644 tests/components/sigma_delta_output/test.esp32.yaml create mode 100644 tests/components/sigma_delta_output/test.esp8266.yaml create mode 100644 tests/components/sigma_delta_output/test.rp2040.yaml create mode 100644 tests/components/sim800l/test.esp32-c3-idf.yaml create mode 100644 tests/components/sim800l/test.esp32-c3.yaml create mode 100644 tests/components/sim800l/test.esp32-idf.yaml create mode 100644 tests/components/sim800l/test.esp32.yaml create mode 100644 tests/components/sim800l/test.esp8266.yaml create mode 100644 tests/components/sim800l/test.rp2040.yaml create mode 100644 tests/components/slow_pwm/test.esp32-c3-idf.yaml create mode 100644 tests/components/slow_pwm/test.esp32-c3.yaml create mode 100644 tests/components/slow_pwm/test.esp32-idf.yaml create mode 100644 tests/components/slow_pwm/test.esp32.yaml create mode 100644 tests/components/slow_pwm/test.esp8266.yaml create mode 100644 tests/components/slow_pwm/test.rp2040.yaml create mode 100644 tests/components/sm16716/test.esp32-c3-idf.yaml create mode 100644 tests/components/sm16716/test.esp32-c3.yaml create mode 100644 tests/components/sm16716/test.esp32-idf.yaml create mode 100644 tests/components/sm16716/test.esp32.yaml create mode 100644 tests/components/sm16716/test.esp8266.yaml create mode 100644 tests/components/sm16716/test.rp2040.yaml create mode 100644 tests/components/sm2135/test.esp32-c3-idf.yaml create mode 100644 tests/components/sm2135/test.esp32-c3.yaml create mode 100644 tests/components/sm2135/test.esp32-idf.yaml create mode 100644 tests/components/sm2135/test.esp32.yaml create mode 100644 tests/components/sm2135/test.esp8266.yaml create mode 100644 tests/components/sm2135/test.rp2040.yaml create mode 100644 tests/components/sm2235/test.esp32-c3-idf.yaml create mode 100644 tests/components/sm2235/test.esp32-c3.yaml create mode 100644 tests/components/sm2235/test.esp32-idf.yaml create mode 100644 tests/components/sm2235/test.esp32.yaml create mode 100644 tests/components/sm2235/test.esp8266.yaml create mode 100644 tests/components/sm2235/test.rp2040.yaml create mode 100644 tests/components/sm2335/test.esp32-c3-idf.yaml create mode 100644 tests/components/sm2335/test.esp32-c3.yaml create mode 100644 tests/components/sm2335/test.esp32-idf.yaml create mode 100644 tests/components/sm2335/test.esp32.yaml create mode 100644 tests/components/sm2335/test.esp8266.yaml create mode 100644 tests/components/sm2335/test.rp2040.yaml create mode 100644 tests/components/sm300d2/test.esp32-c3-idf.yaml create mode 100644 tests/components/sm300d2/test.esp32-c3.yaml create mode 100644 tests/components/sm300d2/test.esp32-idf.yaml create mode 100644 tests/components/sm300d2/test.esp32.yaml create mode 100644 tests/components/sm300d2/test.esp8266.yaml create mode 100644 tests/components/sm300d2/test.rp2040.yaml create mode 100644 tests/components/sml/test.esp32-c3-idf.yaml create mode 100644 tests/components/sml/test.esp32-c3.yaml create mode 100644 tests/components/sml/test.esp32-idf.yaml create mode 100644 tests/components/sml/test.esp32.yaml create mode 100644 tests/components/sml/test.esp8266.yaml create mode 100644 tests/components/sml/test.rp2040.yaml create mode 100644 tests/components/smt100/test.esp32-c3-idf.yaml create mode 100644 tests/components/smt100/test.esp32-c3.yaml create mode 100644 tests/components/smt100/test.esp32-idf.yaml create mode 100644 tests/components/smt100/test.esp32.yaml create mode 100644 tests/components/smt100/test.esp8266.yaml create mode 100644 tests/components/smt100/test.rp2040.yaml diff --git a/tests/components/safe_mode/test.esp32-c3-idf.yaml b/tests/components/safe_mode/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.esp32-c3.yaml b/tests/components/safe_mode/test.esp32-c3.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.esp32-idf.yaml b/tests/components/safe_mode/test.esp32-idf.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.esp32.yaml b/tests/components/safe_mode/test.esp32.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.esp32.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.esp8266.yaml b/tests/components/safe_mode/test.esp8266.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.esp8266.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.rp2040.yaml b/tests/components/safe_mode/test.rp2040.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/test.rp2040.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/scd30/test.esp32-c3-idf.yaml b/tests/components/scd30/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..80f02a1b87 --- /dev/null +++ b/tests/components/scd30/test.esp32-c3-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 5 + sda: 4 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd30/test.esp32-c3.yaml b/tests/components/scd30/test.esp32-c3.yaml new file mode 100644 index 0000000000..80f02a1b87 --- /dev/null +++ b/tests/components/scd30/test.esp32-c3.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 5 + sda: 4 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd30/test.esp32-idf.yaml b/tests/components/scd30/test.esp32-idf.yaml new file mode 100644 index 0000000000..b48f8054c8 --- /dev/null +++ b/tests/components/scd30/test.esp32-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 16 + sda: 17 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd30/test.esp32.yaml b/tests/components/scd30/test.esp32.yaml new file mode 100644 index 0000000000..b48f8054c8 --- /dev/null +++ b/tests/components/scd30/test.esp32.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 16 + sda: 17 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd30/test.esp8266.yaml b/tests/components/scd30/test.esp8266.yaml new file mode 100644 index 0000000000..80f02a1b87 --- /dev/null +++ b/tests/components/scd30/test.esp8266.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 5 + sda: 4 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd30/test.rp2040.yaml b/tests/components/scd30/test.rp2040.yaml new file mode 100644 index 0000000000..80f02a1b87 --- /dev/null +++ b/tests/components/scd30/test.rp2040.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd30 + scl: 5 + sda: 4 + +sensor: + - platform: scd30 + co2: + name: SCD30 CO2 + temperature: + id: scd30_temperature + name: SCD30 Temperature + humidity: + name: SCD30 Humidity + address: 0x61 + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.esp32-c3-idf.yaml b/tests/components/scd4x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..353293be65 --- /dev/null +++ b/tests/components/scd4x/test.esp32-c3-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 5 + sda: 4 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.esp32-c3.yaml b/tests/components/scd4x/test.esp32-c3.yaml new file mode 100644 index 0000000000..353293be65 --- /dev/null +++ b/tests/components/scd4x/test.esp32-c3.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 5 + sda: 4 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.esp32-idf.yaml b/tests/components/scd4x/test.esp32-idf.yaml new file mode 100644 index 0000000000..02cec921d2 --- /dev/null +++ b/tests/components/scd4x/test.esp32-idf.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 16 + sda: 17 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.esp32.yaml b/tests/components/scd4x/test.esp32.yaml new file mode 100644 index 0000000000..02cec921d2 --- /dev/null +++ b/tests/components/scd4x/test.esp32.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 16 + sda: 17 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.esp8266.yaml b/tests/components/scd4x/test.esp8266.yaml new file mode 100644 index 0000000000..353293be65 --- /dev/null +++ b/tests/components/scd4x/test.esp8266.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 5 + sda: 4 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/scd4x/test.rp2040.yaml b/tests/components/scd4x/test.rp2040.yaml new file mode 100644 index 0000000000..353293be65 --- /dev/null +++ b/tests/components/scd4x/test.rp2040.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_scd4x + scl: 5 + sda: 4 + +sensor: + - platform: scd4x + id: scd40 + co2: + name: SCD4X CO2 + temperature: + id: scd4x_temperature + name: SCD4X Temperature + humidity: + name: SCD4X Humidity + automatic_self_calibration: true + altitude_compensation: 10m + ambient_pressure_compensation: 961mBar + temperature_offset: 4.2C + update_interval: 15s diff --git a/tests/components/script/test.esp32-c3-idf.yaml b/tests/components/script/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3872c690ff --- /dev/null +++ b/tests/components/script/test.esp32-c3-idf.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' diff --git a/tests/components/script/test.esp32-c3.yaml b/tests/components/script/test.esp32-c3.yaml new file mode 100644 index 0000000000..3872c690ff --- /dev/null +++ b/tests/components/script/test.esp32-c3.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' diff --git a/tests/components/script/test.esp32-idf.yaml b/tests/components/script/test.esp32-idf.yaml new file mode 100644 index 0000000000..3872c690ff --- /dev/null +++ b/tests/components/script/test.esp32-idf.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' diff --git a/tests/components/script/test.esp32.yaml b/tests/components/script/test.esp32.yaml new file mode 100644 index 0000000000..3872c690ff --- /dev/null +++ b/tests/components/script/test.esp32.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' diff --git a/tests/components/script/test.esp8266.yaml b/tests/components/script/test.esp8266.yaml new file mode 100644 index 0000000000..ce0e40e7ee --- /dev/null +++ b/tests/components/script/test.esp8266.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD(prefix.c_str(), "Hello World! %i %i", param2, param3);' diff --git a/tests/components/script/test.rp2040.yaml b/tests/components/script/test.rp2040.yaml new file mode 100644 index 0000000000..3872c690ff --- /dev/null +++ b/tests/components/script/test.rp2040.yaml @@ -0,0 +1,26 @@ +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: int + param3: bool + then: + - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' diff --git a/tests/components/sdm_meter/test.esp32-c3-idf.yaml b/tests/components/sdm_meter/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0c2144f983 --- /dev/null +++ b/tests/components/sdm_meter/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdm_meter/test.esp32-c3.yaml b/tests/components/sdm_meter/test.esp32-c3.yaml new file mode 100644 index 0000000000..0c2144f983 --- /dev/null +++ b/tests/components/sdm_meter/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdm_meter/test.esp32-idf.yaml b/tests/components/sdm_meter/test.esp32-idf.yaml new file mode 100644 index 0000000000..eb3958db19 --- /dev/null +++ b/tests/components/sdm_meter/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdm_meter/test.esp32.yaml b/tests/components/sdm_meter/test.esp32.yaml new file mode 100644 index 0000000000..eb3958db19 --- /dev/null +++ b/tests/components/sdm_meter/test.esp32.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdm_meter/test.esp8266.yaml b/tests/components/sdm_meter/test.esp8266.yaml new file mode 100644 index 0000000000..0c2144f983 --- /dev/null +++ b/tests/components/sdm_meter/test.esp8266.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdm_meter/test.rp2040.yaml b/tests/components/sdm_meter/test.rp2040.yaml new file mode 100644 index 0000000000..0c2144f983 --- /dev/null +++ b/tests/components/sdm_meter/test.rp2040.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sdm_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sdm_meter + phase_a: + current: + name: Phase A Current + voltage: + name: Phase A Voltage + active_power: + name: Phase A Power + power_factor: + name: Phase A Power Factor + apparent_power: + name: Phase A Apparent Power + reactive_power: + name: Phase A Reactive Power + phase_angle: + name: Phase A Phase Angle diff --git a/tests/components/sdp3x/test.esp32-c3-idf.yaml b/tests/components/sdp3x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..42b90f1b81 --- /dev/null +++ b/tests/components/sdp3x/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 5 + sda: 4 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sdp3x/test.esp32-c3.yaml b/tests/components/sdp3x/test.esp32-c3.yaml new file mode 100644 index 0000000000..42b90f1b81 --- /dev/null +++ b/tests/components/sdp3x/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 5 + sda: 4 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sdp3x/test.esp32-idf.yaml b/tests/components/sdp3x/test.esp32-idf.yaml new file mode 100644 index 0000000000..00666082eb --- /dev/null +++ b/tests/components/sdp3x/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 16 + sda: 17 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sdp3x/test.esp32.yaml b/tests/components/sdp3x/test.esp32.yaml new file mode 100644 index 0000000000..00666082eb --- /dev/null +++ b/tests/components/sdp3x/test.esp32.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 16 + sda: 17 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sdp3x/test.esp8266.yaml b/tests/components/sdp3x/test.esp8266.yaml new file mode 100644 index 0000000000..42b90f1b81 --- /dev/null +++ b/tests/components/sdp3x/test.esp8266.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 5 + sda: 4 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sdp3x/test.rp2040.yaml b/tests/components/sdp3x/test.rp2040.yaml new file mode 100644 index 0000000000..42b90f1b81 --- /dev/null +++ b/tests/components/sdp3x/test.rp2040.yaml @@ -0,0 +1,11 @@ +i2c: + - id: i2c_sdp3x + scl: 5 + sda: 4 + +sensor: + - platform: sdp3x + id: filter_pressure + name: HVAC Filter Pressure drop + accuracy_decimals: 3 + update_interval: 5s diff --git a/tests/components/sds011/test.esp32-c3-idf.yaml b/tests/components/sds011/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e680a62dfe --- /dev/null +++ b/tests/components/sds011/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/sds011/test.esp32-c3.yaml b/tests/components/sds011/test.esp32-c3.yaml new file mode 100644 index 0000000000..e680a62dfe --- /dev/null +++ b/tests/components/sds011/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/sds011/test.esp32-idf.yaml b/tests/components/sds011/test.esp32-idf.yaml new file mode 100644 index 0000000000..275390f14c --- /dev/null +++ b/tests/components/sds011/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/sds011/test.esp32.yaml b/tests/components/sds011/test.esp32.yaml new file mode 100644 index 0000000000..275390f14c --- /dev/null +++ b/tests/components/sds011/test.esp32.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 17 + rx_pin: 16 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/sds011/test.esp8266.yaml b/tests/components/sds011/test.esp8266.yaml new file mode 100644 index 0000000000..e680a62dfe --- /dev/null +++ b/tests/components/sds011/test.esp8266.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/sds011/test.rp2040.yaml b/tests/components/sds011/test.rp2040.yaml new file mode 100644 index 0000000000..e680a62dfe --- /dev/null +++ b/tests/components/sds011/test.rp2040.yaml @@ -0,0 +1,14 @@ +uart: + - id: uart_sdm_sds011 + tx_pin: 4 + rx_pin: 5 + baud_rate: 115200 + +sensor: + - platform: sds011 + pm_2_5: + name: SDS011 PM2.5 + pm_10_0: + name: SDS011 PM10.0 + rx_only: false + update_interval: 5min diff --git a/tests/components/selec_meter/test.esp32-c3-idf.yaml b/tests/components/selec_meter/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..5f6e69f96f --- /dev/null +++ b/tests/components/selec_meter/test.esp32-c3-idf.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/selec_meter/test.esp32-c3.yaml b/tests/components/selec_meter/test.esp32-c3.yaml new file mode 100644 index 0000000000..5f6e69f96f --- /dev/null +++ b/tests/components/selec_meter/test.esp32-c3.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/selec_meter/test.esp32-idf.yaml b/tests/components/selec_meter/test.esp32-idf.yaml new file mode 100644 index 0000000000..648adc1757 --- /dev/null +++ b/tests/components/selec_meter/test.esp32-idf.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/selec_meter/test.esp32.yaml b/tests/components/selec_meter/test.esp32.yaml new file mode 100644 index 0000000000..648adc1757 --- /dev/null +++ b/tests/components/selec_meter/test.esp32.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/selec_meter/test.esp8266.yaml b/tests/components/selec_meter/test.esp8266.yaml new file mode 100644 index 0000000000..5f6e69f96f --- /dev/null +++ b/tests/components/selec_meter/test.esp8266.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/selec_meter/test.rp2040.yaml b/tests/components/selec_meter/test.rp2040.yaml new file mode 100644 index 0000000000..5f6e69f96f --- /dev/null +++ b/tests/components/selec_meter/test.rp2040.yaml @@ -0,0 +1,45 @@ +uart: + - id: uart_selec_meter + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: selec_meter + total_active_energy: + name: SelecEM2M Total Active Energy + import_active_energy: + name: SelecEM2M Import Active Energy + export_active_energy: + name: SelecEM2M Export Active Energy + total_reactive_energy: + name: SelecEM2M Total Reactive Energy + import_reactive_energy: + name: SelecEM2M Import Reactive Energy + export_reactive_energy: + name: SelecEM2M Export Reactive Energy + apparent_energy: + name: SelecEM2M Apparent Energy + active_power: + name: SelecEM2M Active Power + reactive_power: + name: SelecEM2M Reactive Power + apparent_power: + name: SelecEM2M Apparent Power + voltage: + name: SelecEM2M Voltage + current: + name: SelecEM2M Current + power_factor: + name: SelecEM2M Power Factor + frequency: + name: SelecEM2M Frequency + maximum_demand_active_power: + name: SelecEM2M Maximum Demand Active Power + disabled_by_default: true + maximum_demand_reactive_power: + name: SelecEM2M Maximum Demand Reactive Power + disabled_by_default: true + maximum_demand_apparent_power: + name: SelecEM2M Maximum Demand Apparent Power + disabled_by_default: true diff --git a/tests/components/sen0321/test.esp32-c3-idf.yaml b/tests/components/sen0321/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..7fa461a7fa --- /dev/null +++ b/tests/components/sen0321/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 5 + sda: 4 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen0321/test.esp32-c3.yaml b/tests/components/sen0321/test.esp32-c3.yaml new file mode 100644 index 0000000000..7fa461a7fa --- /dev/null +++ b/tests/components/sen0321/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 5 + sda: 4 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen0321/test.esp32-idf.yaml b/tests/components/sen0321/test.esp32-idf.yaml new file mode 100644 index 0000000000..44f76bf5e6 --- /dev/null +++ b/tests/components/sen0321/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 16 + sda: 17 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen0321/test.esp32.yaml b/tests/components/sen0321/test.esp32.yaml new file mode 100644 index 0000000000..44f76bf5e6 --- /dev/null +++ b/tests/components/sen0321/test.esp32.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 16 + sda: 17 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen0321/test.esp8266.yaml b/tests/components/sen0321/test.esp8266.yaml new file mode 100644 index 0000000000..7fa461a7fa --- /dev/null +++ b/tests/components/sen0321/test.esp8266.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 5 + sda: 4 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen0321/test.rp2040.yaml b/tests/components/sen0321/test.rp2040.yaml new file mode 100644 index 0000000000..7fa461a7fa --- /dev/null +++ b/tests/components/sen0321/test.rp2040.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sen0321 + scl: 5 + sda: 4 + +sensor: + - platform: sen0321 + name: Workshop Ozone Sensor + id: sen0321_ozone + update_interval: 10s diff --git a/tests/components/sen21231/test.esp32-c3-idf.yaml b/tests/components/sen21231/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..efd7843f56 --- /dev/null +++ b/tests/components/sen21231/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 5 + sda: 4 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen21231/test.esp32-c3.yaml b/tests/components/sen21231/test.esp32-c3.yaml new file mode 100644 index 0000000000..efd7843f56 --- /dev/null +++ b/tests/components/sen21231/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 5 + sda: 4 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen21231/test.esp32-idf.yaml b/tests/components/sen21231/test.esp32-idf.yaml new file mode 100644 index 0000000000..3173683f17 --- /dev/null +++ b/tests/components/sen21231/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 16 + sda: 17 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen21231/test.esp32.yaml b/tests/components/sen21231/test.esp32.yaml new file mode 100644 index 0000000000..3173683f17 --- /dev/null +++ b/tests/components/sen21231/test.esp32.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 16 + sda: 17 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen21231/test.esp8266.yaml b/tests/components/sen21231/test.esp8266.yaml new file mode 100644 index 0000000000..efd7843f56 --- /dev/null +++ b/tests/components/sen21231/test.esp8266.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 5 + sda: 4 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen21231/test.rp2040.yaml b/tests/components/sen21231/test.rp2040.yaml new file mode 100644 index 0000000000..efd7843f56 --- /dev/null +++ b/tests/components/sen21231/test.rp2040.yaml @@ -0,0 +1,9 @@ +i2c: + - id: i2c_sen21231 + scl: 5 + sda: 4 + +sensor: + - platform: sen21231 + id: sen21231_sensor1 + name: Person Sensor diff --git a/tests/components/sen5x/test.esp32-c3-idf.yaml b/tests/components/sen5x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3352a59b17 --- /dev/null +++ b/tests/components/sen5x/test.esp32-c3-idf.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 5 + sda: 4 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/sen5x/test.esp32-c3.yaml b/tests/components/sen5x/test.esp32-c3.yaml new file mode 100644 index 0000000000..3352a59b17 --- /dev/null +++ b/tests/components/sen5x/test.esp32-c3.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 5 + sda: 4 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/sen5x/test.esp32-idf.yaml b/tests/components/sen5x/test.esp32-idf.yaml new file mode 100644 index 0000000000..b8f89c435f --- /dev/null +++ b/tests/components/sen5x/test.esp32-idf.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 16 + sda: 17 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/sen5x/test.esp32.yaml b/tests/components/sen5x/test.esp32.yaml new file mode 100644 index 0000000000..b8f89c435f --- /dev/null +++ b/tests/components/sen5x/test.esp32.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 16 + sda: 17 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/sen5x/test.esp8266.yaml b/tests/components/sen5x/test.esp8266.yaml new file mode 100644 index 0000000000..3352a59b17 --- /dev/null +++ b/tests/components/sen5x/test.esp8266.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 5 + sda: 4 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/sen5x/test.rp2040.yaml b/tests/components/sen5x/test.rp2040.yaml new file mode 100644 index 0000000000..3352a59b17 --- /dev/null +++ b/tests/components/sen5x/test.rp2040.yaml @@ -0,0 +1,49 @@ +i2c: + - id: i2c_sen5x + scl: 5 + sda: 4 + +sensor: + - platform: sen5x + id: sen54 + temperature: + name: Temperature + accuracy_decimals: 1 + humidity: + name: Humidity + accuracy_decimals: 0 + pm_1_0: + name: PM <1µm Weight concentration + id: pm_1_0 + accuracy_decimals: 1 + pm_2_5: + name: PM <2.5µm Weight concentration + id: pm_2_5 + accuracy_decimals: 1 + pm_4_0: + name: PM <4µm Weight concentration + id: pm_4_0 + accuracy_decimals: 1 + pm_10_0: + name: PM <10µm Weight concentration + id: pm_10_0 + accuracy_decimals: 1 + nox: + name: NOx + voc: + name: VOC + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + temperature_compensation: + offset: 0 + normalized_offset_slope: 0 + time_constant: 0 + auto_cleaning_interval: 604800s + acceleration_mode: low + store_baseline: true + address: 0x69 diff --git a/tests/components/senseair/test.esp32-c3-idf.yaml b/tests/components/senseair/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..41a441f496 --- /dev/null +++ b/tests/components/senseair/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/senseair/test.esp32-c3.yaml b/tests/components/senseair/test.esp32-c3.yaml new file mode 100644 index 0000000000..41a441f496 --- /dev/null +++ b/tests/components/senseair/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/senseair/test.esp32-idf.yaml b/tests/components/senseair/test.esp32-idf.yaml new file mode 100644 index 0000000000..daa4645f59 --- /dev/null +++ b/tests/components/senseair/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/senseair/test.esp32.yaml b/tests/components/senseair/test.esp32.yaml new file mode 100644 index 0000000000..daa4645f59 --- /dev/null +++ b/tests/components/senseair/test.esp32.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/senseair/test.esp8266.yaml b/tests/components/senseair/test.esp8266.yaml new file mode 100644 index 0000000000..41a441f496 --- /dev/null +++ b/tests/components/senseair/test.esp8266.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/senseair/test.rp2040.yaml b/tests/components/senseair/test.rp2040.yaml new file mode 100644 index 0000000000..41a441f496 --- /dev/null +++ b/tests/components/senseair/test.rp2040.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_senseair + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: senseair + id: senseair0 + co2: + name: SenseAir CO2 Value + on_value: + then: + - senseair.background_calibration: senseair0 + - senseair.background_calibration_result: senseair0 + - senseair.abc_get_period: senseair0 + - senseair.abc_enable: senseair0 + - senseair.abc_disable: senseair0 + update_interval: 15s diff --git a/tests/components/servo/test.esp32-c3-idf.yaml b/tests/components/servo/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..29ebea3359 --- /dev/null +++ b/tests/components/servo/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: ledc + id: servo_output_1 + pin: 1 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/servo/test.esp32-c3.yaml b/tests/components/servo/test.esp32-c3.yaml new file mode 100644 index 0000000000..29ebea3359 --- /dev/null +++ b/tests/components/servo/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: ledc + id: servo_output_1 + pin: 1 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/servo/test.esp32-idf.yaml b/tests/components/servo/test.esp32-idf.yaml new file mode 100644 index 0000000000..e769f055b4 --- /dev/null +++ b/tests/components/servo/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: ledc + id: servo_output_1 + pin: 12 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/servo/test.esp32.yaml b/tests/components/servo/test.esp32.yaml new file mode 100644 index 0000000000..e769f055b4 --- /dev/null +++ b/tests/components/servo/test.esp32.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: ledc + id: servo_output_1 + pin: 12 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/servo/test.esp8266.yaml b/tests/components/servo/test.esp8266.yaml new file mode 100644 index 0000000000..48b4421641 --- /dev/null +++ b/tests/components/servo/test.esp8266.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: esp8266_pwm + id: servo_output_1 + pin: 12 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/servo/test.rp2040.yaml b/tests/components/servo/test.rp2040.yaml new file mode 100644 index 0000000000..75efa9407e --- /dev/null +++ b/tests/components/servo/test.rp2040.yaml @@ -0,0 +1,19 @@ +esphome: + on_boot: + then: + - servo.write: + id: test_servo + level: -100.0% + - servo.detach: test_servo + +output: + - platform: rp2040_pwm + id: servo_output_1 + pin: 12 + +servo: + id: test_servo + output: servo_output_1 + restore: true + min_level: 4% + max_level: 8% diff --git a/tests/components/sfa30/test.esp32-c3-idf.yaml b/tests/components/sfa30/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..119059e4e2 --- /dev/null +++ b/tests/components/sfa30/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 5 + sda: 4 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sfa30/test.esp32-c3.yaml b/tests/components/sfa30/test.esp32-c3.yaml new file mode 100644 index 0000000000..119059e4e2 --- /dev/null +++ b/tests/components/sfa30/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 5 + sda: 4 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sfa30/test.esp32-idf.yaml b/tests/components/sfa30/test.esp32-idf.yaml new file mode 100644 index 0000000000..dc7e4988e5 --- /dev/null +++ b/tests/components/sfa30/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 16 + sda: 17 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sfa30/test.esp32.yaml b/tests/components/sfa30/test.esp32.yaml new file mode 100644 index 0000000000..dc7e4988e5 --- /dev/null +++ b/tests/components/sfa30/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 16 + sda: 17 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sfa30/test.esp8266.yaml b/tests/components/sfa30/test.esp8266.yaml new file mode 100644 index 0000000000..119059e4e2 --- /dev/null +++ b/tests/components/sfa30/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 5 + sda: 4 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sfa30/test.rp2040.yaml b/tests/components/sfa30/test.rp2040.yaml new file mode 100644 index 0000000000..119059e4e2 --- /dev/null +++ b/tests/components/sfa30/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sfa30 + scl: 5 + sda: 4 + +sensor: + - platform: sfa30 + formaldehyde: + name: "SFA30 formaldehyde" + temperature: + name: "SFA30 temperature" + humidity: + name: "SFA30 humidity" + address: 0x5D + update_interval: 30s diff --git a/tests/components/sgp30/test.esp32-c3-idf.yaml b/tests/components/sgp30/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..45de67e94b --- /dev/null +++ b/tests/components/sgp30/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 5 + sda: 4 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp30/test.esp32-c3.yaml b/tests/components/sgp30/test.esp32-c3.yaml new file mode 100644 index 0000000000..45de67e94b --- /dev/null +++ b/tests/components/sgp30/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 5 + sda: 4 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp30/test.esp32-idf.yaml b/tests/components/sgp30/test.esp32-idf.yaml new file mode 100644 index 0000000000..6ea23c25cd --- /dev/null +++ b/tests/components/sgp30/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 16 + sda: 17 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp30/test.esp32.yaml b/tests/components/sgp30/test.esp32.yaml new file mode 100644 index 0000000000..6ea23c25cd --- /dev/null +++ b/tests/components/sgp30/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 16 + sda: 17 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp30/test.esp8266.yaml b/tests/components/sgp30/test.esp8266.yaml new file mode 100644 index 0000000000..45de67e94b --- /dev/null +++ b/tests/components/sgp30/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 5 + sda: 4 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp30/test.rp2040.yaml b/tests/components/sgp30/test.rp2040.yaml new file mode 100644 index 0000000000..45de67e94b --- /dev/null +++ b/tests/components/sgp30/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sgp30 + scl: 5 + sda: 4 + +sensor: + - platform: sgp30 + eco2: + name: Workshop eCO2 + accuracy_decimals: 1 + tvoc: + name: Workshop TVOC + accuracy_decimals: 1 + address: 0x58 + update_interval: 5s diff --git a/tests/components/sgp4x/test.esp32-c3-idf.yaml b/tests/components/sgp4x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b2876478bd --- /dev/null +++ b/tests/components/sgp4x/test.esp32-c3-idf.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 5 + sda: 4 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/sgp4x/test.esp32-c3.yaml b/tests/components/sgp4x/test.esp32-c3.yaml new file mode 100644 index 0000000000..b2876478bd --- /dev/null +++ b/tests/components/sgp4x/test.esp32-c3.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 5 + sda: 4 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/sgp4x/test.esp32-idf.yaml b/tests/components/sgp4x/test.esp32-idf.yaml new file mode 100644 index 0000000000..c7380b5a10 --- /dev/null +++ b/tests/components/sgp4x/test.esp32-idf.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 16 + sda: 17 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/sgp4x/test.esp32.yaml b/tests/components/sgp4x/test.esp32.yaml new file mode 100644 index 0000000000..c7380b5a10 --- /dev/null +++ b/tests/components/sgp4x/test.esp32.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 16 + sda: 17 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/sgp4x/test.esp8266.yaml b/tests/components/sgp4x/test.esp8266.yaml new file mode 100644 index 0000000000..b2876478bd --- /dev/null +++ b/tests/components/sgp4x/test.esp8266.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 5 + sda: 4 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/sgp4x/test.rp2040.yaml b/tests/components/sgp4x/test.rp2040.yaml new file mode 100644 index 0000000000..b2876478bd --- /dev/null +++ b/tests/components/sgp4x/test.rp2040.yaml @@ -0,0 +1,27 @@ +i2c: + - id: i2c_sgp4x + scl: 5 + sda: 4 + +sensor: + - platform: sgp4x + voc: + name: VOC Index + id: sgp40_voc_index + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + nox: + name: NOx + algorithm_tuning: + index_offset: 100 + learning_time_offset_hours: 12 + learning_time_gain_hours: 12 + gating_max_duration_minutes: 180 + std_initial: 50 + gain_factor: 230 + update_interval: 5s diff --git a/tests/components/shelly_dimmer/test.esp8266.yaml b/tests/components/shelly_dimmer/test.esp8266.yaml new file mode 100644 index 0000000000..3acd0260d5 --- /dev/null +++ b/tests/components/shelly_dimmer/test.esp8266.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_shelly_dimmer + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +light: + - platform: shelly_dimmer + name: Shelly Dimmer Light + power: + name: Shelly Dimmer Power + voltage: + name: Shelly Dimmer Voltage + current: + name: Shelly Dimmer Current + max_brightness: 500 + firmware: "51.6" + nrst_pin: 13 + boot0_pin: 14 diff --git a/tests/components/sht3xd/test.esp32-c3-idf.yaml b/tests/components/sht3xd/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0409ff65c6 --- /dev/null +++ b/tests/components/sht3xd/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 5 + sda: 4 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht3xd/test.esp32-c3.yaml b/tests/components/sht3xd/test.esp32-c3.yaml new file mode 100644 index 0000000000..0409ff65c6 --- /dev/null +++ b/tests/components/sht3xd/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 5 + sda: 4 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht3xd/test.esp32-idf.yaml b/tests/components/sht3xd/test.esp32-idf.yaml new file mode 100644 index 0000000000..2b6ee50760 --- /dev/null +++ b/tests/components/sht3xd/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 16 + sda: 17 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht3xd/test.esp32.yaml b/tests/components/sht3xd/test.esp32.yaml new file mode 100644 index 0000000000..2b6ee50760 --- /dev/null +++ b/tests/components/sht3xd/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 16 + sda: 17 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht3xd/test.esp8266.yaml b/tests/components/sht3xd/test.esp8266.yaml new file mode 100644 index 0000000000..0409ff65c6 --- /dev/null +++ b/tests/components/sht3xd/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 5 + sda: 4 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht3xd/test.rp2040.yaml b/tests/components/sht3xd/test.rp2040.yaml new file mode 100644 index 0000000000..0409ff65c6 --- /dev/null +++ b/tests/components/sht3xd/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht3xd + scl: 5 + sda: 4 + +sensor: + - platform: sht3xd + temperature: + name: SHT3XD Temperature + humidity: + name: SHT3XD Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.esp32-c3-idf.yaml b/tests/components/sht4x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0bcdd864f6 --- /dev/null +++ b/tests/components/sht4x/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 5 + sda: 4 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.esp32-c3.yaml b/tests/components/sht4x/test.esp32-c3.yaml new file mode 100644 index 0000000000..0bcdd864f6 --- /dev/null +++ b/tests/components/sht4x/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 5 + sda: 4 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.esp32-idf.yaml b/tests/components/sht4x/test.esp32-idf.yaml new file mode 100644 index 0000000000..13ec524d7d --- /dev/null +++ b/tests/components/sht4x/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 16 + sda: 17 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.esp32.yaml b/tests/components/sht4x/test.esp32.yaml new file mode 100644 index 0000000000..13ec524d7d --- /dev/null +++ b/tests/components/sht4x/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 16 + sda: 17 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.esp8266.yaml b/tests/components/sht4x/test.esp8266.yaml new file mode 100644 index 0000000000..0bcdd864f6 --- /dev/null +++ b/tests/components/sht4x/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 5 + sda: 4 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/sht4x/test.rp2040.yaml b/tests/components/sht4x/test.rp2040.yaml new file mode 100644 index 0000000000..0bcdd864f6 --- /dev/null +++ b/tests/components/sht4x/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_sht4x + scl: 5 + sda: 4 + +sensor: + - platform: sht4x + temperature: + name: SHT4X Temperature + humidity: + name: SHT4X Humidity + address: 0x44 + update_interval: 15s diff --git a/tests/components/shtcx/test.esp32-c3-idf.yaml b/tests/components/shtcx/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c1c7a2a63f --- /dev/null +++ b/tests/components/shtcx/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 5 + sda: 4 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shtcx/test.esp32-c3.yaml b/tests/components/shtcx/test.esp32-c3.yaml new file mode 100644 index 0000000000..c1c7a2a63f --- /dev/null +++ b/tests/components/shtcx/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 5 + sda: 4 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shtcx/test.esp32-idf.yaml b/tests/components/shtcx/test.esp32-idf.yaml new file mode 100644 index 0000000000..619bac9548 --- /dev/null +++ b/tests/components/shtcx/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 16 + sda: 17 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shtcx/test.esp32.yaml b/tests/components/shtcx/test.esp32.yaml new file mode 100644 index 0000000000..619bac9548 --- /dev/null +++ b/tests/components/shtcx/test.esp32.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 16 + sda: 17 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shtcx/test.esp8266.yaml b/tests/components/shtcx/test.esp8266.yaml new file mode 100644 index 0000000000..c1c7a2a63f --- /dev/null +++ b/tests/components/shtcx/test.esp8266.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 5 + sda: 4 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shtcx/test.rp2040.yaml b/tests/components/shtcx/test.rp2040.yaml new file mode 100644 index 0000000000..c1c7a2a63f --- /dev/null +++ b/tests/components/shtcx/test.rp2040.yaml @@ -0,0 +1,13 @@ +i2c: + - id: i2c_shtcx + scl: 5 + sda: 4 + +sensor: + - platform: shtcx + temperature: + name: SHTCX Temperature + humidity: + name: SHTCX Humidity + address: 0x70 + update_interval: 15s diff --git a/tests/components/shutdown/test.esp32-c3-idf.yaml b/tests/components/shutdown/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.esp32-c3.yaml b/tests/components/shutdown/test.esp32-c3.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.esp32-idf.yaml b/tests/components/shutdown/test.esp32-idf.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.esp32.yaml b/tests/components/shutdown/test.esp32.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.esp32.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.esp8266.yaml b/tests/components/shutdown/test.esp8266.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.esp8266.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.rp2040.yaml b/tests/components/shutdown/test.rp2040.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/test.rp2040.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml b/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.esp32-c3.yaml b/tests/components/sigma_delta_output/test.esp32-c3.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.esp32-idf.yaml b/tests/components/sigma_delta_output/test.esp32-idf.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.esp32.yaml b/tests/components/sigma_delta_output/test.esp32.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.esp32.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.esp8266.yaml b/tests/components/sigma_delta_output/test.esp8266.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.esp8266.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.rp2040.yaml b/tests/components/sigma_delta_output/test.rp2040.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/test.rp2040.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sim800l/test.esp32-c3-idf.yaml b/tests/components/sim800l/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..7ff359d1e7 --- /dev/null +++ b/tests/components/sim800l/test.esp32-c3-idf.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/sim800l/test.esp32-c3.yaml b/tests/components/sim800l/test.esp32-c3.yaml new file mode 100644 index 0000000000..7ff359d1e7 --- /dev/null +++ b/tests/components/sim800l/test.esp32-c3.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/sim800l/test.esp32-idf.yaml b/tests/components/sim800l/test.esp32-idf.yaml new file mode 100644 index 0000000000..c116548c6f --- /dev/null +++ b/tests/components/sim800l/test.esp32-idf.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/sim800l/test.esp32.yaml b/tests/components/sim800l/test.esp32.yaml new file mode 100644 index 0000000000..c116548c6f --- /dev/null +++ b/tests/components/sim800l/test.esp32.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/sim800l/test.esp8266.yaml b/tests/components/sim800l/test.esp8266.yaml new file mode 100644 index 0000000000..7ff359d1e7 --- /dev/null +++ b/tests/components/sim800l/test.esp8266.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/sim800l/test.rp2040.yaml b/tests/components/sim800l/test.rp2040.yaml new file mode 100644 index 0000000000..7ff359d1e7 --- /dev/null +++ b/tests/components/sim800l/test.rp2040.yaml @@ -0,0 +1,37 @@ +esphome: + on_boot: + then: + - sim800l.send_sms: + recipient: '+15551234567' + message: Hello there + - sim800l.dial: + recipient: '+15551234567' + - sim800l.connect + - sim800l.disconnect + - sim800l.send_ussd: + ussd: test_ussd + +uart: + - id: uart_sim800l + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sim800l: + on_sms_received: + - lambda: |- + std::string str; + str = sender; + str = message; + - sim800l.send_sms: + message: hello you + recipient: "+1234" + - sim800l.dial: + recipient: "+1234" + on_incoming_call: + - logger.log: + format: "Incoming call from '%s'" + args: ["caller_id.c_str()"] + - sim800l.disconnect + on_ussd_received: + - logger.log: "ussd_received" diff --git a/tests/components/slow_pwm/test.esp32-c3-idf.yaml b/tests/components/slow_pwm/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.esp32-c3-idf.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.esp32-c3.yaml b/tests/components/slow_pwm/test.esp32-c3.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.esp32-c3.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.esp32-idf.yaml b/tests/components/slow_pwm/test.esp32-idf.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.esp32-idf.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.esp32.yaml b/tests/components/slow_pwm/test.esp32.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.esp32.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.esp8266.yaml b/tests/components/slow_pwm/test.esp8266.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.esp8266.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.rp2040.yaml b/tests/components/slow_pwm/test.rp2040.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/test.rp2040.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/sm16716/test.esp32-c3-idf.yaml b/tests/components/sm16716/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.esp32-c3-idf.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.esp32-c3.yaml b/tests/components/sm16716/test.esp32-c3.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.esp32-c3.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.esp32-idf.yaml b/tests/components/sm16716/test.esp32-idf.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.esp32-idf.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.esp32.yaml b/tests/components/sm16716/test.esp32.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.esp32.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.esp8266.yaml b/tests/components/sm16716/test.esp8266.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.esp8266.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.rp2040.yaml b/tests/components/sm16716/test.rp2040.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/test.rp2040.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm2135/test.esp32-c3-idf.yaml b/tests/components/sm2135/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.esp32-c3.yaml b/tests/components/sm2135/test.esp32-c3.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.esp32-idf.yaml b/tests/components/sm2135/test.esp32-idf.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.esp32.yaml b/tests/components/sm2135/test.esp32.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.esp32.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.esp8266.yaml b/tests/components/sm2135/test.esp8266.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.esp8266.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.rp2040.yaml b/tests/components/sm2135/test.rp2040.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/test.rp2040.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2235/test.esp32-c3-idf.yaml b/tests/components/sm2235/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.esp32-c3.yaml b/tests/components/sm2235/test.esp32-c3.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.esp32-idf.yaml b/tests/components/sm2235/test.esp32-idf.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.esp32.yaml b/tests/components/sm2235/test.esp32.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.esp32.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.esp8266.yaml b/tests/components/sm2235/test.esp8266.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.esp8266.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.rp2040.yaml b/tests/components/sm2235/test.rp2040.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/test.rp2040.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp32-c3-idf.yaml b/tests/components/sm2335/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.esp32-c3-idf.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp32-c3.yaml b/tests/components/sm2335/test.esp32-c3.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.esp32-c3.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp32-idf.yaml b/tests/components/sm2335/test.esp32-idf.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.esp32-idf.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp32.yaml b/tests/components/sm2335/test.esp32.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.esp32.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp8266.yaml b/tests/components/sm2335/test.esp8266.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.esp8266.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.rp2040.yaml b/tests/components/sm2335/test.rp2040.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/test.rp2040.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm300d2/test.esp32-c3-idf.yaml b/tests/components/sm300d2/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..bcd0a728b2 --- /dev/null +++ b/tests/components/sm300d2/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sm300d2/test.esp32-c3.yaml b/tests/components/sm300d2/test.esp32-c3.yaml new file mode 100644 index 0000000000..bcd0a728b2 --- /dev/null +++ b/tests/components/sm300d2/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sm300d2/test.esp32-idf.yaml b/tests/components/sm300d2/test.esp32-idf.yaml new file mode 100644 index 0000000000..92dba4fb3b --- /dev/null +++ b/tests/components/sm300d2/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sm300d2/test.esp32.yaml b/tests/components/sm300d2/test.esp32.yaml new file mode 100644 index 0000000000..92dba4fb3b --- /dev/null +++ b/tests/components/sm300d2/test.esp32.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sm300d2/test.esp8266.yaml b/tests/components/sm300d2/test.esp8266.yaml new file mode 100644 index 0000000000..bcd0a728b2 --- /dev/null +++ b/tests/components/sm300d2/test.esp8266.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sm300d2/test.rp2040.yaml b/tests/components/sm300d2/test.rp2040.yaml new file mode 100644 index 0000000000..bcd0a728b2 --- /dev/null +++ b/tests/components/sm300d2/test.rp2040.yaml @@ -0,0 +1,23 @@ +uart: + - id: uart_sm300d2 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: sm300d2 + co2: + name: SM300D2 CO2 Value + formaldehyde: + name: SM300D2 Formaldehyde Value + tvoc: + name: SM300D2 TVOC Value + pm_2_5: + name: SM300D2 PM2.5 Value + pm_10_0: + name: SM300D2 PM10 Value + temperature: + name: SM300D2 Temperature Value + humidity: + name: SM300D2 Humidity Value + update_interval: 60s diff --git a/tests/components/sml/test.esp32-c3-idf.yaml b/tests/components/sml/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..903f968c26 --- /dev/null +++ b/tests/components/sml/test.esp32-c3-idf.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/sml/test.esp32-c3.yaml b/tests/components/sml/test.esp32-c3.yaml new file mode 100644 index 0000000000..903f968c26 --- /dev/null +++ b/tests/components/sml/test.esp32-c3.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/sml/test.esp32-idf.yaml b/tests/components/sml/test.esp32-idf.yaml new file mode 100644 index 0000000000..7217199380 --- /dev/null +++ b/tests/components/sml/test.esp32-idf.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/sml/test.esp32.yaml b/tests/components/sml/test.esp32.yaml new file mode 100644 index 0000000000..7217199380 --- /dev/null +++ b/tests/components/sml/test.esp32.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/sml/test.esp8266.yaml b/tests/components/sml/test.esp8266.yaml new file mode 100644 index 0000000000..903f968c26 --- /dev/null +++ b/tests/components/sml/test.esp8266.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/sml/test.rp2040.yaml b/tests/components/sml/test.rp2040.yaml new file mode 100644 index 0000000000..903f968c26 --- /dev/null +++ b/tests/components/sml/test.rp2040.yaml @@ -0,0 +1,31 @@ +uart: + - id: uart_sml + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sml: + id: mysml + on_data: + - logger.log: "SML on_data" + +sensor: + - platform: sml + name: Total energy + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "1-0:1.8.0" + unit_of_measurement: kWh + accuracy_decimals: 1 + device_class: energy + state_class: total_increasing + filters: + - multiply: 0.0001 + +text_sensor: + - platform: sml + name: Manufacturer + sml_id: mysml + server_id: 0123456789abcdef + obis_code: "129-129:199.130.3" + format: text diff --git a/tests/components/smt100/test.esp32-c3-idf.yaml b/tests/components/smt100/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..4277f2567b --- /dev/null +++ b/tests/components/smt100/test.esp32-c3-idf.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s diff --git a/tests/components/smt100/test.esp32-c3.yaml b/tests/components/smt100/test.esp32-c3.yaml new file mode 100644 index 0000000000..4277f2567b --- /dev/null +++ b/tests/components/smt100/test.esp32-c3.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s diff --git a/tests/components/smt100/test.esp32-idf.yaml b/tests/components/smt100/test.esp32-idf.yaml new file mode 100644 index 0000000000..7c19f4bc45 --- /dev/null +++ b/tests/components/smt100/test.esp32-idf.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s diff --git a/tests/components/smt100/test.esp32.yaml b/tests/components/smt100/test.esp32.yaml new file mode 100644 index 0000000000..7c19f4bc45 --- /dev/null +++ b/tests/components/smt100/test.esp32.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s diff --git a/tests/components/smt100/test.esp8266.yaml b/tests/components/smt100/test.esp8266.yaml new file mode 100644 index 0000000000..4277f2567b --- /dev/null +++ b/tests/components/smt100/test.esp8266.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s diff --git a/tests/components/smt100/test.rp2040.yaml b/tests/components/smt100/test.rp2040.yaml new file mode 100644 index 0000000000..4277f2567b --- /dev/null +++ b/tests/components/smt100/test.rp2040.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_smt100 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +sensor: + - platform: smt100 + counts: + name: Counts + dielectric_constant: + name: Dielectric Constant + temperature: + name: Temperature + moisture: + name: Moisture + voltage: + name: Voltage + update_interval: 60s From 06829b53fe134cb74a06afd00d618c85cc189052 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 23 Apr 2024 14:40:20 -0500 Subject: [PATCH 067/313] Add some components to the new testing framework (S part 2) (#6227) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../sn74hc165/test.esp32-c3-idf.yaml | 14 ++++ tests/components/sn74hc165/test.esp32-c3.yaml | 14 ++++ .../components/sn74hc165/test.esp32-idf.yaml | 14 ++++ tests/components/sn74hc165/test.esp32.yaml | 14 ++++ tests/components/sn74hc165/test.esp8266.yaml | 14 ++++ tests/components/sn74hc165/test.rp2040.yaml | 14 ++++ tests/components/sntp/test.esp32-c3-idf.yaml | 15 ++++ tests/components/sntp/test.esp32-c3.yaml | 15 ++++ tests/components/sntp/test.esp32-idf.yaml | 15 ++++ tests/components/sntp/test.esp32.yaml | 15 ++++ tests/components/sntp/test.esp8266.yaml | 15 ++++ tests/components/sntp/test.rp2040.yaml | 15 ++++ .../components/sonoff_d1/test.esp32-idf.yaml | 12 +++ tests/components/sonoff_d1/test.esp32.yaml | 12 +++ tests/components/sonoff_d1/test.esp8266.yaml | 12 +++ .../components/speaker/test.esp32-c3-idf.yaml | 17 ++++ tests/components/speaker/test.esp32-c3.yaml | 17 ++++ tests/components/speaker/test.esp32-idf.yaml | 17 ++++ tests/components/speaker/test.esp32.yaml | 17 ++++ tests/components/speed/test.esp32-c3-idf.yaml | 9 ++ tests/components/speed/test.esp32-c3.yaml | 9 ++ tests/components/speed/test.esp32-idf.yaml | 9 ++ tests/components/speed/test.esp32.yaml | 9 ++ tests/components/speed/test.esp8266.yaml | 9 ++ tests/components/speed/test.rp2040.yaml | 9 ++ tests/components/spi/test.esp32-c3-idf.yaml | 5 ++ tests/components/spi/test.esp32-c3.yaml | 5 ++ tests/components/spi/test.esp32-idf.yaml | 5 ++ tests/components/spi/test.esp32.yaml | 5 ++ tests/components/spi/test.esp8266.yaml | 5 ++ tests/components/spi/test.rp2040.yaml | 5 ++ .../spi_device/test.esp32-c3-idf.yaml | 11 +++ .../components/spi_device/test.esp32-c3.yaml | 11 +++ .../components/spi_device/test.esp32-idf.yaml | 11 +++ tests/components/spi_device/test.esp32.yaml | 11 +++ tests/components/spi_device/test.esp8266.yaml | 11 +++ tests/components/spi_device/test.rp2040.yaml | 11 +++ .../spi_led_strip/test.esp32-c3-idf.yaml | 13 +++ .../spi_led_strip/test.esp32-c3.yaml | 13 +++ .../spi_led_strip/test.esp32-idf.yaml | 13 +++ .../components/spi_led_strip/test.esp32.yaml | 13 +++ .../spi_led_strip/test.esp8266.yaml | 13 +++ .../components/spi_led_strip/test.rp2040.yaml | 13 +++ .../sprinkler/test.esp32-c3-idf.yaml | 83 +++++++++++++++++++ tests/components/sprinkler/test.esp32-c3.yaml | 83 +++++++++++++++++++ .../components/sprinkler/test.esp32-idf.yaml | 83 +++++++++++++++++++ tests/components/sprinkler/test.esp32.yaml | 83 +++++++++++++++++++ tests/components/sprinkler/test.esp8266.yaml | 83 +++++++++++++++++++ tests/components/sprinkler/test.rp2040.yaml | 83 +++++++++++++++++++ tests/components/sps30/test.esp32-c3-idf.yaml | 36 ++++++++ tests/components/sps30/test.esp32-c3.yaml | 36 ++++++++ tests/components/sps30/test.esp32-idf.yaml | 36 ++++++++ tests/components/sps30/test.esp32.yaml | 36 ++++++++ tests/components/sps30/test.esp8266.yaml | 36 ++++++++ tests/components/sps30/test.rp2040.yaml | 36 ++++++++ .../ssd1306_i2c/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1306_i2c/test.esp32-c3.yaml | 25 ++++++ .../ssd1306_i2c/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1306_i2c/test.esp32.yaml | 25 ++++++ .../components/ssd1306_i2c/test.esp8266.yaml | 25 ++++++ tests/components/ssd1306_i2c/test.rp2040.yaml | 25 ++++++ .../ssd1306_spi/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1306_spi/test.esp32-c3.yaml | 25 ++++++ .../ssd1306_spi/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1306_spi/test.esp32.yaml | 25 ++++++ .../components/ssd1306_spi/test.esp8266.yaml | 25 ++++++ tests/components/ssd1306_spi/test.rp2040.yaml | 25 ++++++ .../ssd1322_spi/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1322_spi/test.esp32-c3.yaml | 25 ++++++ .../ssd1322_spi/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1322_spi/test.esp32.yaml | 25 ++++++ .../components/ssd1322_spi/test.esp8266.yaml | 25 ++++++ tests/components/ssd1322_spi/test.rp2040.yaml | 25 ++++++ .../ssd1325_spi/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1325_spi/test.esp32-c3.yaml | 25 ++++++ .../ssd1325_spi/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1325_spi/test.esp32.yaml | 25 ++++++ .../components/ssd1325_spi/test.esp8266.yaml | 25 ++++++ tests/components/ssd1325_spi/test.rp2040.yaml | 25 ++++++ .../ssd1327_i2c/test.esp32-c3-idf.yaml | 24 ++++++ .../components/ssd1327_i2c/test.esp32-c3.yaml | 24 ++++++ .../ssd1327_i2c/test.esp32-idf.yaml | 24 ++++++ tests/components/ssd1327_i2c/test.esp32.yaml | 24 ++++++ .../components/ssd1327_i2c/test.esp8266.yaml | 24 ++++++ tests/components/ssd1327_i2c/test.rp2040.yaml | 24 ++++++ .../ssd1327_spi/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1327_spi/test.esp32-c3.yaml | 25 ++++++ .../ssd1327_spi/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1327_spi/test.esp32.yaml | 25 ++++++ .../components/ssd1327_spi/test.esp8266.yaml | 25 ++++++ tests/components/ssd1327_spi/test.rp2040.yaml | 25 ++++++ .../ssd1331_spi/test.esp32-c3-idf.yaml | 24 ++++++ .../components/ssd1331_spi/test.esp32-c3.yaml | 24 ++++++ .../ssd1331_spi/test.esp32-idf.yaml | 24 ++++++ tests/components/ssd1331_spi/test.esp32.yaml | 24 ++++++ .../components/ssd1331_spi/test.esp8266.yaml | 24 ++++++ tests/components/ssd1331_spi/test.rp2040.yaml | 24 ++++++ .../ssd1351_spi/test.esp32-c3-idf.yaml | 25 ++++++ .../components/ssd1351_spi/test.esp32-c3.yaml | 25 ++++++ .../ssd1351_spi/test.esp32-idf.yaml | 25 ++++++ tests/components/ssd1351_spi/test.esp32.yaml | 25 ++++++ .../components/ssd1351_spi/test.esp8266.yaml | 25 ++++++ tests/components/ssd1351_spi/test.rp2040.yaml | 25 ++++++ .../st7567_i2c/test.esp32-c3-idf.yaml | 23 +++++ .../components/st7567_i2c/test.esp32-c3.yaml | 23 +++++ .../components/st7567_i2c/test.esp32-idf.yaml | 23 +++++ tests/components/st7567_i2c/test.esp32.yaml | 23 +++++ tests/components/st7567_i2c/test.esp8266.yaml | 23 +++++ tests/components/st7567_i2c/test.rp2040.yaml | 23 +++++ .../st7567_spi/test.esp32-c3-idf.yaml | 24 ++++++ .../components/st7567_spi/test.esp32-c3.yaml | 24 ++++++ .../components/st7567_spi/test.esp32-idf.yaml | 24 ++++++ tests/components/st7567_spi/test.esp32.yaml | 24 ++++++ tests/components/st7567_spi/test.esp8266.yaml | 24 ++++++ tests/components/st7567_spi/test.rp2040.yaml | 24 ++++++ .../components/st7735/test.esp32-c3-idf.yaml | 29 +++++++ tests/components/st7735/test.esp32-c3.yaml | 29 +++++++ tests/components/st7735/test.esp32-idf.yaml | 29 +++++++ tests/components/st7735/test.esp32.yaml | 29 +++++++ tests/components/st7735/test.esp8266.yaml | 29 +++++++ tests/components/st7735/test.rp2040.yaml | 29 +++++++ .../components/st7789v/test.esp32-c3-idf.yaml | 25 ++++++ tests/components/st7789v/test.esp32-c3.yaml | 25 ++++++ tests/components/st7789v/test.esp32-idf.yaml | 25 ++++++ tests/components/st7789v/test.esp32.yaml | 25 ++++++ tests/components/st7789v/test.esp8266.yaml | 25 ++++++ tests/components/st7789v/test.rp2040.yaml | 25 ++++++ .../components/st7920/test.esp32-c3-idf.yaml | 24 ++++++ tests/components/st7920/test.esp32-c3.yaml | 24 ++++++ tests/components/st7920/test.esp32-idf.yaml | 24 ++++++ tests/components/st7920/test.esp32.yaml | 24 ++++++ tests/components/st7920/test.esp8266.yaml | 24 ++++++ tests/components/st7920/test.rp2040.yaml | 24 ++++++ .../components/status/test.esp32-c3-idf.yaml | 10 +++ tests/components/status/test.esp32-c3.yaml | 10 +++ tests/components/status/test.esp32-idf.yaml | 10 +++ tests/components/status/test.esp32.yaml | 10 +++ tests/components/status/test.esp8266.yaml | 10 +++ tests/components/status/test.rp2040.yaml | 10 +++ .../status_led/test.esp32-c3-idf.yaml | 10 +++ .../components/status_led/test.esp32-c3.yaml | 10 +++ .../components/status_led/test.esp32-idf.yaml | 10 +++ tests/components/status_led/test.esp32.yaml | 10 +++ tests/components/status_led/test.esp8266.yaml | 10 +++ tests/components/status_led/test.rp2040.yaml | 10 +++ .../components/stepper/test.esp32-c3-idf.yaml | 27 ++++++ tests/components/stepper/test.esp32-c3.yaml | 27 ++++++ tests/components/stepper/test.esp32-idf.yaml | 27 ++++++ tests/components/stepper/test.esp32.yaml | 27 ++++++ tests/components/stepper/test.esp8266.yaml | 27 ++++++ tests/components/stepper/test.rp2040.yaml | 27 ++++++ tests/components/sts3x/test.esp32-c3-idf.yaml | 10 +++ tests/components/sts3x/test.esp32-c3.yaml | 10 +++ tests/components/sts3x/test.esp32-idf.yaml | 10 +++ tests/components/sts3x/test.esp32.yaml | 10 +++ tests/components/sts3x/test.esp8266.yaml | 10 +++ tests/components/sts3x/test.rp2040.yaml | 10 +++ tests/components/sun/test.esp32-c3-idf.yaml | 38 +++++++++ tests/components/sun/test.esp32-c3.yaml | 38 +++++++++ tests/components/sun/test.esp32-idf.yaml | 38 +++++++++ tests/components/sun/test.esp32.yaml | 38 +++++++++ tests/components/sun/test.esp8266.yaml | 38 +++++++++ tests/components/sun/test.rp2040.yaml | 38 +++++++++ .../components/sx1509/test.esp32-c3-idf.yaml | 15 ++++ tests/components/sx1509/test.esp32-c3.yaml | 15 ++++ tests/components/sx1509/test.esp32-idf.yaml | 15 ++++ tests/components/sx1509/test.esp32.yaml | 15 ++++ tests/components/sx1509/test.esp8266.yaml | 15 ++++ tests/components/sx1509/test.rp2040.yaml | 15 ++++ 169 files changed, 3818 insertions(+) create mode 100644 tests/components/sn74hc165/test.esp32-c3-idf.yaml create mode 100644 tests/components/sn74hc165/test.esp32-c3.yaml create mode 100644 tests/components/sn74hc165/test.esp32-idf.yaml create mode 100644 tests/components/sn74hc165/test.esp32.yaml create mode 100644 tests/components/sn74hc165/test.esp8266.yaml create mode 100644 tests/components/sn74hc165/test.rp2040.yaml create mode 100644 tests/components/sntp/test.esp32-c3-idf.yaml create mode 100644 tests/components/sntp/test.esp32-c3.yaml create mode 100644 tests/components/sntp/test.esp32-idf.yaml create mode 100644 tests/components/sntp/test.esp32.yaml create mode 100644 tests/components/sntp/test.esp8266.yaml create mode 100644 tests/components/sntp/test.rp2040.yaml create mode 100644 tests/components/sonoff_d1/test.esp32-idf.yaml create mode 100644 tests/components/sonoff_d1/test.esp32.yaml create mode 100644 tests/components/sonoff_d1/test.esp8266.yaml create mode 100644 tests/components/speaker/test.esp32-c3-idf.yaml create mode 100644 tests/components/speaker/test.esp32-c3.yaml create mode 100644 tests/components/speaker/test.esp32-idf.yaml create mode 100644 tests/components/speaker/test.esp32.yaml create mode 100644 tests/components/speed/test.esp32-c3-idf.yaml create mode 100644 tests/components/speed/test.esp32-c3.yaml create mode 100644 tests/components/speed/test.esp32-idf.yaml create mode 100644 tests/components/speed/test.esp32.yaml create mode 100644 tests/components/speed/test.esp8266.yaml create mode 100644 tests/components/speed/test.rp2040.yaml create mode 100644 tests/components/spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/spi/test.esp32-c3.yaml create mode 100644 tests/components/spi/test.esp32-idf.yaml create mode 100644 tests/components/spi/test.esp32.yaml create mode 100644 tests/components/spi/test.esp8266.yaml create mode 100644 tests/components/spi/test.rp2040.yaml create mode 100644 tests/components/spi_device/test.esp32-c3-idf.yaml create mode 100644 tests/components/spi_device/test.esp32-c3.yaml create mode 100644 tests/components/spi_device/test.esp32-idf.yaml create mode 100644 tests/components/spi_device/test.esp32.yaml create mode 100644 tests/components/spi_device/test.esp8266.yaml create mode 100644 tests/components/spi_device/test.rp2040.yaml create mode 100644 tests/components/spi_led_strip/test.esp32-c3-idf.yaml create mode 100644 tests/components/spi_led_strip/test.esp32-c3.yaml create mode 100644 tests/components/spi_led_strip/test.esp32-idf.yaml create mode 100644 tests/components/spi_led_strip/test.esp32.yaml create mode 100644 tests/components/spi_led_strip/test.esp8266.yaml create mode 100644 tests/components/spi_led_strip/test.rp2040.yaml create mode 100644 tests/components/sprinkler/test.esp32-c3-idf.yaml create mode 100644 tests/components/sprinkler/test.esp32-c3.yaml create mode 100644 tests/components/sprinkler/test.esp32-idf.yaml create mode 100644 tests/components/sprinkler/test.esp32.yaml create mode 100644 tests/components/sprinkler/test.esp8266.yaml create mode 100644 tests/components/sprinkler/test.rp2040.yaml create mode 100644 tests/components/sps30/test.esp32-c3-idf.yaml create mode 100644 tests/components/sps30/test.esp32-c3.yaml create mode 100644 tests/components/sps30/test.esp32-idf.yaml create mode 100644 tests/components/sps30/test.esp32.yaml create mode 100644 tests/components/sps30/test.esp8266.yaml create mode 100644 tests/components/sps30/test.rp2040.yaml create mode 100644 tests/components/ssd1306_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1306_i2c/test.esp32-c3.yaml create mode 100644 tests/components/ssd1306_i2c/test.esp32-idf.yaml create mode 100644 tests/components/ssd1306_i2c/test.esp32.yaml create mode 100644 tests/components/ssd1306_i2c/test.esp8266.yaml create mode 100644 tests/components/ssd1306_i2c/test.rp2040.yaml create mode 100644 tests/components/ssd1306_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1306_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1306_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1306_spi/test.esp32.yaml create mode 100644 tests/components/ssd1306_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1306_spi/test.rp2040.yaml create mode 100644 tests/components/ssd1322_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1322_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1322_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1322_spi/test.esp32.yaml create mode 100644 tests/components/ssd1322_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1322_spi/test.rp2040.yaml create mode 100644 tests/components/ssd1325_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1325_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1325_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1325_spi/test.esp32.yaml create mode 100644 tests/components/ssd1325_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1325_spi/test.rp2040.yaml create mode 100644 tests/components/ssd1327_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1327_i2c/test.esp32-c3.yaml create mode 100644 tests/components/ssd1327_i2c/test.esp32-idf.yaml create mode 100644 tests/components/ssd1327_i2c/test.esp32.yaml create mode 100644 tests/components/ssd1327_i2c/test.esp8266.yaml create mode 100644 tests/components/ssd1327_i2c/test.rp2040.yaml create mode 100644 tests/components/ssd1327_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1327_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1327_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1327_spi/test.esp32.yaml create mode 100644 tests/components/ssd1327_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1327_spi/test.rp2040.yaml create mode 100644 tests/components/ssd1331_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1331_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1331_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1331_spi/test.esp32.yaml create mode 100644 tests/components/ssd1331_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1331_spi/test.rp2040.yaml create mode 100644 tests/components/ssd1351_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ssd1351_spi/test.esp32-c3.yaml create mode 100644 tests/components/ssd1351_spi/test.esp32-idf.yaml create mode 100644 tests/components/ssd1351_spi/test.esp32.yaml create mode 100644 tests/components/ssd1351_spi/test.esp8266.yaml create mode 100644 tests/components/ssd1351_spi/test.rp2040.yaml create mode 100644 tests/components/st7567_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/st7567_i2c/test.esp32-c3.yaml create mode 100644 tests/components/st7567_i2c/test.esp32-idf.yaml create mode 100644 tests/components/st7567_i2c/test.esp32.yaml create mode 100644 tests/components/st7567_i2c/test.esp8266.yaml create mode 100644 tests/components/st7567_i2c/test.rp2040.yaml create mode 100644 tests/components/st7567_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/st7567_spi/test.esp32-c3.yaml create mode 100644 tests/components/st7567_spi/test.esp32-idf.yaml create mode 100644 tests/components/st7567_spi/test.esp32.yaml create mode 100644 tests/components/st7567_spi/test.esp8266.yaml create mode 100644 tests/components/st7567_spi/test.rp2040.yaml create mode 100644 tests/components/st7735/test.esp32-c3-idf.yaml create mode 100644 tests/components/st7735/test.esp32-c3.yaml create mode 100644 tests/components/st7735/test.esp32-idf.yaml create mode 100644 tests/components/st7735/test.esp32.yaml create mode 100644 tests/components/st7735/test.esp8266.yaml create mode 100644 tests/components/st7735/test.rp2040.yaml create mode 100644 tests/components/st7789v/test.esp32-c3-idf.yaml create mode 100644 tests/components/st7789v/test.esp32-c3.yaml create mode 100644 tests/components/st7789v/test.esp32-idf.yaml create mode 100644 tests/components/st7789v/test.esp32.yaml create mode 100644 tests/components/st7789v/test.esp8266.yaml create mode 100644 tests/components/st7789v/test.rp2040.yaml create mode 100644 tests/components/st7920/test.esp32-c3-idf.yaml create mode 100644 tests/components/st7920/test.esp32-c3.yaml create mode 100644 tests/components/st7920/test.esp32-idf.yaml create mode 100644 tests/components/st7920/test.esp32.yaml create mode 100644 tests/components/st7920/test.esp8266.yaml create mode 100644 tests/components/st7920/test.rp2040.yaml create mode 100644 tests/components/status/test.esp32-c3-idf.yaml create mode 100644 tests/components/status/test.esp32-c3.yaml create mode 100644 tests/components/status/test.esp32-idf.yaml create mode 100644 tests/components/status/test.esp32.yaml create mode 100644 tests/components/status/test.esp8266.yaml create mode 100644 tests/components/status/test.rp2040.yaml create mode 100644 tests/components/status_led/test.esp32-c3-idf.yaml create mode 100644 tests/components/status_led/test.esp32-c3.yaml create mode 100644 tests/components/status_led/test.esp32-idf.yaml create mode 100644 tests/components/status_led/test.esp32.yaml create mode 100644 tests/components/status_led/test.esp8266.yaml create mode 100644 tests/components/status_led/test.rp2040.yaml create mode 100644 tests/components/stepper/test.esp32-c3-idf.yaml create mode 100644 tests/components/stepper/test.esp32-c3.yaml create mode 100644 tests/components/stepper/test.esp32-idf.yaml create mode 100644 tests/components/stepper/test.esp32.yaml create mode 100644 tests/components/stepper/test.esp8266.yaml create mode 100644 tests/components/stepper/test.rp2040.yaml create mode 100644 tests/components/sts3x/test.esp32-c3-idf.yaml create mode 100644 tests/components/sts3x/test.esp32-c3.yaml create mode 100644 tests/components/sts3x/test.esp32-idf.yaml create mode 100644 tests/components/sts3x/test.esp32.yaml create mode 100644 tests/components/sts3x/test.esp8266.yaml create mode 100644 tests/components/sts3x/test.rp2040.yaml create mode 100644 tests/components/sun/test.esp32-c3-idf.yaml create mode 100644 tests/components/sun/test.esp32-c3.yaml create mode 100644 tests/components/sun/test.esp32-idf.yaml create mode 100644 tests/components/sun/test.esp32.yaml create mode 100644 tests/components/sun/test.esp8266.yaml create mode 100644 tests/components/sun/test.rp2040.yaml create mode 100644 tests/components/sx1509/test.esp32-c3-idf.yaml create mode 100644 tests/components/sx1509/test.esp32-c3.yaml create mode 100644 tests/components/sx1509/test.esp32-idf.yaml create mode 100644 tests/components/sx1509/test.esp32.yaml create mode 100644 tests/components/sx1509/test.esp8266.yaml create mode 100644 tests/components/sx1509/test.rp2040.yaml diff --git a/tests/components/sn74hc165/test.esp32-c3-idf.yaml b/tests/components/sn74hc165/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f687b23c9d --- /dev/null +++ b/tests/components/sn74hc165/test.esp32-c3-idf.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 3 + data_pin: 4 + load_pin: 5 + clock_inhibit_pin: 6 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sn74hc165/test.esp32-c3.yaml b/tests/components/sn74hc165/test.esp32-c3.yaml new file mode 100644 index 0000000000..f687b23c9d --- /dev/null +++ b/tests/components/sn74hc165/test.esp32-c3.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 3 + data_pin: 4 + load_pin: 5 + clock_inhibit_pin: 6 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sn74hc165/test.esp32-idf.yaml b/tests/components/sn74hc165/test.esp32-idf.yaml new file mode 100644 index 0000000000..55b06aec9b --- /dev/null +++ b/tests/components/sn74hc165/test.esp32-idf.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 13 + data_pin: 14 + load_pin: 15 + clock_inhibit_pin: 16 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sn74hc165/test.esp32.yaml b/tests/components/sn74hc165/test.esp32.yaml new file mode 100644 index 0000000000..55b06aec9b --- /dev/null +++ b/tests/components/sn74hc165/test.esp32.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 13 + data_pin: 14 + load_pin: 15 + clock_inhibit_pin: 16 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sn74hc165/test.esp8266.yaml b/tests/components/sn74hc165/test.esp8266.yaml new file mode 100644 index 0000000000..55b06aec9b --- /dev/null +++ b/tests/components/sn74hc165/test.esp8266.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 13 + data_pin: 14 + load_pin: 15 + clock_inhibit_pin: 16 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sn74hc165/test.rp2040.yaml b/tests/components/sn74hc165/test.rp2040.yaml new file mode 100644 index 0000000000..f687b23c9d --- /dev/null +++ b/tests/components/sn74hc165/test.rp2040.yaml @@ -0,0 +1,14 @@ +sn74hc165: + id: sn74hc165_hub + clock_pin: 3 + data_pin: 4 + load_pin: 5 + clock_inhibit_pin: 6 + sr_count: 2 + +binary_sensor: + - platform: gpio + id: sn74hc165_pin_0 + pin: + sn74hc165: sn74hc165_hub + number: 0 diff --git a/tests/components/sntp/test.esp32-c3-idf.yaml b/tests/components/sntp/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.esp32-c3.yaml b/tests/components/sntp/test.esp32-c3.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.esp32-idf.yaml b/tests/components/sntp/test.esp32-idf.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.esp32.yaml b/tests/components/sntp/test.esp32.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.esp32.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.esp8266.yaml b/tests/components/sntp/test.esp8266.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.esp8266.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.rp2040.yaml b/tests/components/sntp/test.rp2040.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/test.rp2040.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sonoff_d1/test.esp32-idf.yaml b/tests/components/sonoff_d1/test.esp32-idf.yaml new file mode 100644 index 0000000000..dc35e3b6ac --- /dev/null +++ b/tests/components/sonoff_d1/test.esp32-idf.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_sonoff_d1 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +light: + - platform: sonoff_d1 + id: d1_light + name: Sonoff D1 Dimmer + restore_mode: RESTORE_DEFAULT_OFF + use_rm433_remote: false diff --git a/tests/components/sonoff_d1/test.esp32.yaml b/tests/components/sonoff_d1/test.esp32.yaml new file mode 100644 index 0000000000..dc35e3b6ac --- /dev/null +++ b/tests/components/sonoff_d1/test.esp32.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_sonoff_d1 + tx_pin: 17 + rx_pin: 16 + baud_rate: 9600 + +light: + - platform: sonoff_d1 + id: d1_light + name: Sonoff D1 Dimmer + restore_mode: RESTORE_DEFAULT_OFF + use_rm433_remote: false diff --git a/tests/components/sonoff_d1/test.esp8266.yaml b/tests/components/sonoff_d1/test.esp8266.yaml new file mode 100644 index 0000000000..c4a62f4cb3 --- /dev/null +++ b/tests/components/sonoff_d1/test.esp8266.yaml @@ -0,0 +1,12 @@ +uart: + - id: uart_sonoff_d1 + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +light: + - platform: sonoff_d1 + id: d1_light + name: Sonoff D1 Dimmer + restore_mode: RESTORE_DEFAULT_OFF + use_rm433_remote: false diff --git a/tests/components/speaker/test.esp32-c3-idf.yaml b/tests/components/speaker/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c7809baace --- /dev/null +++ b/tests/components/speaker/test.esp32-c3-idf.yaml @@ -0,0 +1,17 @@ +esphome: + on_boot: + then: + - speaker.play: [0, 1, 2, 3] + - speaker.stop + +i2s_audio: + i2s_lrclk_pin: 6 + i2s_bclk_pin: 7 + i2s_mclk_pin: 5 + +speaker: + - platform: i2s_audio + id: speaker_id + dac_type: external + i2s_dout_pin: 3 + mode: mono diff --git a/tests/components/speaker/test.esp32-c3.yaml b/tests/components/speaker/test.esp32-c3.yaml new file mode 100644 index 0000000000..c7809baace --- /dev/null +++ b/tests/components/speaker/test.esp32-c3.yaml @@ -0,0 +1,17 @@ +esphome: + on_boot: + then: + - speaker.play: [0, 1, 2, 3] + - speaker.stop + +i2s_audio: + i2s_lrclk_pin: 6 + i2s_bclk_pin: 7 + i2s_mclk_pin: 5 + +speaker: + - platform: i2s_audio + id: speaker_id + dac_type: external + i2s_dout_pin: 3 + mode: mono diff --git a/tests/components/speaker/test.esp32-idf.yaml b/tests/components/speaker/test.esp32-idf.yaml new file mode 100644 index 0000000000..416e203d7b --- /dev/null +++ b/tests/components/speaker/test.esp32-idf.yaml @@ -0,0 +1,17 @@ +esphome: + on_boot: + then: + - speaker.play: [0, 1, 2, 3] + - speaker.stop + +i2s_audio: + i2s_lrclk_pin: 16 + i2s_bclk_pin: 17 + i2s_mclk_pin: 15 + +speaker: + - platform: i2s_audio + id: speaker_id + dac_type: external + i2s_dout_pin: 13 + mode: mono diff --git a/tests/components/speaker/test.esp32.yaml b/tests/components/speaker/test.esp32.yaml new file mode 100644 index 0000000000..416e203d7b --- /dev/null +++ b/tests/components/speaker/test.esp32.yaml @@ -0,0 +1,17 @@ +esphome: + on_boot: + then: + - speaker.play: [0, 1, 2, 3] + - speaker.stop + +i2s_audio: + i2s_lrclk_pin: 16 + i2s_bclk_pin: 17 + i2s_mclk_pin: 15 + +speaker: + - platform: i2s_audio + id: speaker_id + dac_type: external + i2s_dout_pin: 13 + mode: mono diff --git a/tests/components/speed/test.esp32-c3-idf.yaml b/tests/components/speed/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fa1920676e --- /dev/null +++ b/tests/components/speed/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +output: + - platform: ledc + id: fan_output_1 + pin: 2 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/speed/test.esp32-c3.yaml b/tests/components/speed/test.esp32-c3.yaml new file mode 100644 index 0000000000..fa1920676e --- /dev/null +++ b/tests/components/speed/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +output: + - platform: ledc + id: fan_output_1 + pin: 2 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/speed/test.esp32-idf.yaml b/tests/components/speed/test.esp32-idf.yaml new file mode 100644 index 0000000000..29a55e9edd --- /dev/null +++ b/tests/components/speed/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +output: + - platform: ledc + id: fan_output_1 + pin: 12 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/speed/test.esp32.yaml b/tests/components/speed/test.esp32.yaml new file mode 100644 index 0000000000..29a55e9edd --- /dev/null +++ b/tests/components/speed/test.esp32.yaml @@ -0,0 +1,9 @@ +output: + - platform: ledc + id: fan_output_1 + pin: 12 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/speed/test.esp8266.yaml b/tests/components/speed/test.esp8266.yaml new file mode 100644 index 0000000000..6ed9949cf5 --- /dev/null +++ b/tests/components/speed/test.esp8266.yaml @@ -0,0 +1,9 @@ +output: + - platform: esp8266_pwm + id: fan_output_1 + pin: 12 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/speed/test.rp2040.yaml b/tests/components/speed/test.rp2040.yaml new file mode 100644 index 0000000000..02b572db75 --- /dev/null +++ b/tests/components/speed/test.rp2040.yaml @@ -0,0 +1,9 @@ +output: + - platform: rp2040_pwm + id: fan_output_1 + pin: 12 + +fan: + - platform: speed + id: fan_speed + output: fan_output_1 diff --git a/tests/components/spi/test.esp32-c3-idf.yaml b/tests/components/spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f49470ad07 --- /dev/null +++ b/tests/components/spi/test.esp32-c3-idf.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 diff --git a/tests/components/spi/test.esp32-c3.yaml b/tests/components/spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..f49470ad07 --- /dev/null +++ b/tests/components/spi/test.esp32-c3.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 diff --git a/tests/components/spi/test.esp32-idf.yaml b/tests/components/spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..1cdcf461dd --- /dev/null +++ b/tests/components/spi/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 diff --git a/tests/components/spi/test.esp32.yaml b/tests/components/spi/test.esp32.yaml new file mode 100644 index 0000000000..1cdcf461dd --- /dev/null +++ b/tests/components/spi/test.esp32.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 diff --git a/tests/components/spi/test.esp8266.yaml b/tests/components/spi/test.esp8266.yaml new file mode 100644 index 0000000000..83f110921f --- /dev/null +++ b/tests/components/spi/test.esp8266.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 diff --git a/tests/components/spi/test.rp2040.yaml b/tests/components/spi/test.rp2040.yaml new file mode 100644 index 0000000000..1e39d247fe --- /dev/null +++ b/tests/components/spi/test.rp2040.yaml @@ -0,0 +1,5 @@ +spi: + - id: spi_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 diff --git a/tests/components/spi_device/test.esp32-c3-idf.yaml b/tests/components/spi_device/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..49e2733676 --- /dev/null +++ b/tests/components/spi_device/test.esp32-c3-idf.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_device/test.esp32-c3.yaml b/tests/components/spi_device/test.esp32-c3.yaml new file mode 100644 index 0000000000..49e2733676 --- /dev/null +++ b/tests/components/spi_device/test.esp32-c3.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_device/test.esp32-idf.yaml b/tests/components/spi_device/test.esp32-idf.yaml new file mode 100644 index 0000000000..cad8ca49f8 --- /dev/null +++ b/tests/components/spi_device/test.esp32-idf.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_device/test.esp32.yaml b/tests/components/spi_device/test.esp32.yaml new file mode 100644 index 0000000000..cad8ca49f8 --- /dev/null +++ b/tests/components/spi_device/test.esp32.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_device/test.esp8266.yaml b/tests/components/spi_device/test.esp8266.yaml new file mode 100644 index 0000000000..1b191bdb6a --- /dev/null +++ b/tests/components/spi_device/test.esp8266.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_device/test.rp2040.yaml b/tests/components/spi_device/test.rp2040.yaml new file mode 100644 index 0000000000..c70493c70d --- /dev/null +++ b/tests/components/spi_device/test.rp2040.yaml @@ -0,0 +1,11 @@ +spi: + - id: spi_device1 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +spi_device: + id: spi_device_test + data_rate: 2MHz + mode: 3 + bit_order: lsb_first diff --git a/tests/components/spi_led_strip/test.esp32-c3-idf.yaml b/tests/components/spi_led_strip/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..983ad2863f --- /dev/null +++ b/tests/components/spi_led_strip/test.esp32-c3-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/spi_led_strip/test.esp32-c3.yaml b/tests/components/spi_led_strip/test.esp32-c3.yaml new file mode 100644 index 0000000000..983ad2863f --- /dev/null +++ b/tests/components/spi_led_strip/test.esp32-c3.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/spi_led_strip/test.esp32-idf.yaml b/tests/components/spi_led_strip/test.esp32-idf.yaml new file mode 100644 index 0000000000..f4a760bf4c --- /dev/null +++ b/tests/components/spi_led_strip/test.esp32-idf.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/spi_led_strip/test.esp32.yaml b/tests/components/spi_led_strip/test.esp32.yaml new file mode 100644 index 0000000000..f4a760bf4c --- /dev/null +++ b/tests/components/spi_led_strip/test.esp32.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/spi_led_strip/test.esp8266.yaml b/tests/components/spi_led_strip/test.esp8266.yaml new file mode 100644 index 0000000000..8e76303b6a --- /dev/null +++ b/tests/components/spi_led_strip/test.esp8266.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/spi_led_strip/test.rp2040.yaml b/tests/components/spi_led_strip/test.rp2040.yaml new file mode 100644 index 0000000000..9d12f1592b --- /dev/null +++ b/tests/components/spi_led_strip/test.rp2040.yaml @@ -0,0 +1,13 @@ +spi: + - id: spi_spi_led_strip + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +light: + - platform: spi_led_strip + num_leds: 4 + color_correct: [80%, 60%, 100%] + id: rgb_led + name: "RGB LED" + data_rate: 8MHz diff --git a/tests/components/sprinkler/test.esp32-c3-idf.yaml b/tests/components/sprinkler/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.esp32-c3-idf.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.esp32-c3.yaml b/tests/components/sprinkler/test.esp32-c3.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.esp32-c3.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.esp32-idf.yaml b/tests/components/sprinkler/test.esp32-idf.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.esp32-idf.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.esp32.yaml b/tests/components/sprinkler/test.esp32.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.esp32.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.esp8266.yaml b/tests/components/sprinkler/test.esp8266.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.esp8266.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.rp2040.yaml b/tests/components/sprinkler/test.rp2040.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/test.rp2040.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sps30/test.esp32-c3-idf.yaml b/tests/components/sps30/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e071a00936 --- /dev/null +++ b/tests/components/sps30/test.esp32-c3-idf.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 5 + sda: 4 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/sps30/test.esp32-c3.yaml b/tests/components/sps30/test.esp32-c3.yaml new file mode 100644 index 0000000000..e071a00936 --- /dev/null +++ b/tests/components/sps30/test.esp32-c3.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 5 + sda: 4 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/sps30/test.esp32-idf.yaml b/tests/components/sps30/test.esp32-idf.yaml new file mode 100644 index 0000000000..f9d1ee4e55 --- /dev/null +++ b/tests/components/sps30/test.esp32-idf.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 16 + sda: 17 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/sps30/test.esp32.yaml b/tests/components/sps30/test.esp32.yaml new file mode 100644 index 0000000000..f9d1ee4e55 --- /dev/null +++ b/tests/components/sps30/test.esp32.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 16 + sda: 17 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/sps30/test.esp8266.yaml b/tests/components/sps30/test.esp8266.yaml new file mode 100644 index 0000000000..e071a00936 --- /dev/null +++ b/tests/components/sps30/test.esp8266.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 5 + sda: 4 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/sps30/test.rp2040.yaml b/tests/components/sps30/test.rp2040.yaml new file mode 100644 index 0000000000..e071a00936 --- /dev/null +++ b/tests/components/sps30/test.rp2040.yaml @@ -0,0 +1,36 @@ +i2c: + - id: i2c_sps30 + scl: 5 + sda: 4 + +sensor: + - platform: sps30 + pm_1_0: + name: Workshop PM <1µm Weight concentration + id: workshop_PM_1_0 + pm_2_5: + name: Workshop PM <2.5µm Weight concentration + id: workshop_PM_2_5 + pm_4_0: + name: Workshop PM <4µm Weight concentration + id: workshop_PM_4_0 + pm_10_0: + name: Workshop PM <10µm Weight concentration + id: workshop_PM_10_0 + pmc_0_5: + name: Workshop PM <0.5µm Number concentration + id: workshop_PMC_0_5 + pmc_1_0: + name: Workshop PM <1µm Number concentration + id: workshop_PMC_1_0 + pmc_2_5: + name: Workshop PM <2.5µm Number concentration + id: workshop_PMC_2_5 + pmc_4_0: + name: Workshop PM <4µm Number concentration + id: workshop_PMC_4_0 + pmc_10_0: + name: Workshop PM <10µm Number concentration + id: workshop_PMC_10_0 + address: 0x69 + update_interval: 10s diff --git a/tests/components/ssd1306_i2c/test.esp32-c3-idf.yaml b/tests/components/ssd1306_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..f4a301db51 --- /dev/null +++ b/tests/components/ssd1306_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_i2c/test.esp32-c3.yaml b/tests/components/ssd1306_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..f4a301db51 --- /dev/null +++ b/tests/components/ssd1306_i2c/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_i2c/test.esp32-idf.yaml b/tests/components/ssd1306_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..dddc67309c --- /dev/null +++ b/tests/components/ssd1306_i2c/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 16 + sda: 17 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_i2c/test.esp32.yaml b/tests/components/ssd1306_i2c/test.esp32.yaml new file mode 100644 index 0000000000..dddc67309c --- /dev/null +++ b/tests/components/ssd1306_i2c/test.esp32.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 16 + sda: 17 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_i2c/test.esp8266.yaml b/tests/components/ssd1306_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..f4a301db51 --- /dev/null +++ b/tests/components/ssd1306_i2c/test.esp8266.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_i2c/test.rp2040.yaml b/tests/components/ssd1306_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..f4a301db51 --- /dev/null +++ b/tests/components/ssd1306_i2c/test.rp2040.yaml @@ -0,0 +1,25 @@ +i2c: + - id: i2c_ssd1306_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1306_i2c + model: SSD1306_128X64 + reset_pin: 3 + address: 0x3C + id: display1 + contrast: 60% + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1306_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..01b2d0e4a8 --- /dev/null +++ b/tests/components/ssd1306_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.esp32-c3.yaml b/tests/components/ssd1306_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..01b2d0e4a8 --- /dev/null +++ b/tests/components/ssd1306_spi/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.esp32-idf.yaml b/tests/components/ssd1306_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..b0e5e0f1a2 --- /dev/null +++ b/tests/components/ssd1306_spi/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.esp32.yaml b/tests/components/ssd1306_spi/test.esp32.yaml new file mode 100644 index 0000000000..b0e5e0f1a2 --- /dev/null +++ b/tests/components/ssd1306_spi/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.esp8266.yaml b/tests/components/ssd1306_spi/test.esp8266.yaml new file mode 100644 index 0000000000..135e364bb2 --- /dev/null +++ b/tests/components/ssd1306_spi/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1306_spi/test.rp2040.yaml b/tests/components/ssd1306_spi/test.rp2040.yaml new file mode 100644 index 0000000000..94c4b85158 --- /dev/null +++ b/tests/components/ssd1306_spi/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1306_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1306_spi + model: SSD1306 128x64 + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1322_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..4fa9f86594 --- /dev/null +++ b/tests/components/ssd1322_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.esp32-c3.yaml b/tests/components/ssd1322_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..4fa9f86594 --- /dev/null +++ b/tests/components/ssd1322_spi/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.esp32-idf.yaml b/tests/components/ssd1322_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..aa6d0fbf01 --- /dev/null +++ b/tests/components/ssd1322_spi/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.esp32.yaml b/tests/components/ssd1322_spi/test.esp32.yaml new file mode 100644 index 0000000000..aa6d0fbf01 --- /dev/null +++ b/tests/components/ssd1322_spi/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.esp8266.yaml b/tests/components/ssd1322_spi/test.esp8266.yaml new file mode 100644 index 0000000000..a5aa565c09 --- /dev/null +++ b/tests/components/ssd1322_spi/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1322_spi/test.rp2040.yaml b/tests/components/ssd1322_spi/test.rp2040.yaml new file mode 100644 index 0000000000..59544e7878 --- /dev/null +++ b/tests/components/ssd1322_spi/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1322_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1322_spi + model: SSD1322 256x64 + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1325_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..0fa8cb6488 --- /dev/null +++ b/tests/components/ssd1325_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.esp32-c3.yaml b/tests/components/ssd1325_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..0fa8cb6488 --- /dev/null +++ b/tests/components/ssd1325_spi/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.esp32-idf.yaml b/tests/components/ssd1325_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..84d94eff28 --- /dev/null +++ b/tests/components/ssd1325_spi/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.esp32.yaml b/tests/components/ssd1325_spi/test.esp32.yaml new file mode 100644 index 0000000000..84d94eff28 --- /dev/null +++ b/tests/components/ssd1325_spi/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.esp8266.yaml b/tests/components/ssd1325_spi/test.esp8266.yaml new file mode 100644 index 0000000000..9d7e483585 --- /dev/null +++ b/tests/components/ssd1325_spi/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1325_spi/test.rp2040.yaml b/tests/components/ssd1325_spi/test.rp2040.yaml new file mode 100644 index 0000000000..869663c19d --- /dev/null +++ b/tests/components/ssd1325_spi/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1325_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1325_spi + model: SSD1325 128x64 + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.esp32-c3-idf.yaml b/tests/components/ssd1327_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..cd28795ff1 --- /dev/null +++ b/tests/components/ssd1327_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.esp32-c3.yaml b/tests/components/ssd1327_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..cd28795ff1 --- /dev/null +++ b/tests/components/ssd1327_i2c/test.esp32-c3.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.esp32-idf.yaml b/tests/components/ssd1327_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..e72a9c7b7a --- /dev/null +++ b/tests/components/ssd1327_i2c/test.esp32-idf.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 16 + sda: 17 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.esp32.yaml b/tests/components/ssd1327_i2c/test.esp32.yaml new file mode 100644 index 0000000000..e72a9c7b7a --- /dev/null +++ b/tests/components/ssd1327_i2c/test.esp32.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 16 + sda: 17 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.esp8266.yaml b/tests/components/ssd1327_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..cd28795ff1 --- /dev/null +++ b/tests/components/ssd1327_i2c/test.esp8266.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_i2c/test.rp2040.yaml b/tests/components/ssd1327_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..cd28795ff1 --- /dev/null +++ b/tests/components/ssd1327_i2c/test.rp2040.yaml @@ -0,0 +1,24 @@ +i2c: + - id: i2c_ssd1327_i2c + scl: 5 + sda: 4 + +display: + - platform: ssd1327_i2c + model: SSD1327_128x128 + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1327_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ec5795d716 --- /dev/null +++ b/tests/components/ssd1327_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.esp32-c3.yaml b/tests/components/ssd1327_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..ec5795d716 --- /dev/null +++ b/tests/components/ssd1327_spi/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.esp32-idf.yaml b/tests/components/ssd1327_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..e103ded187 --- /dev/null +++ b/tests/components/ssd1327_spi/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.esp32.yaml b/tests/components/ssd1327_spi/test.esp32.yaml new file mode 100644 index 0000000000..e103ded187 --- /dev/null +++ b/tests/components/ssd1327_spi/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.esp8266.yaml b/tests/components/ssd1327_spi/test.esp8266.yaml new file mode 100644 index 0000000000..30455d24ee --- /dev/null +++ b/tests/components/ssd1327_spi/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1327_spi/test.rp2040.yaml b/tests/components/ssd1327_spi/test.rp2040.yaml new file mode 100644 index 0000000000..f819ab2c41 --- /dev/null +++ b/tests/components/ssd1327_spi/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1327_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1327_spi + model: SSD1327 128x128 + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1331_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..9a35918faf --- /dev/null +++ b/tests/components/ssd1331_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1331_spi + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.esp32-c3.yaml b/tests/components/ssd1331_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..9a35918faf --- /dev/null +++ b/tests/components/ssd1331_spi/test.esp32-c3.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1331_spi + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.esp32-idf.yaml b/tests/components/ssd1331_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..e9eb8ea9ad --- /dev/null +++ b/tests/components/ssd1331_spi/test.esp32-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1331_spi + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.esp32.yaml b/tests/components/ssd1331_spi/test.esp32.yaml new file mode 100644 index 0000000000..e9eb8ea9ad --- /dev/null +++ b/tests/components/ssd1331_spi/test.esp32.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1331_spi + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.esp8266.yaml b/tests/components/ssd1331_spi/test.esp8266.yaml new file mode 100644 index 0000000000..3b319ef38e --- /dev/null +++ b/tests/components/ssd1331_spi/test.esp8266.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1331_spi + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1331_spi/test.rp2040.yaml b/tests/components/ssd1331_spi/test.rp2040.yaml new file mode 100644 index 0000000000..947685b07a --- /dev/null +++ b/tests/components/ssd1331_spi/test.rp2040.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_ssd1331_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1331_spi + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.esp32-c3-idf.yaml b/tests/components/ssd1351_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2a7266f502 --- /dev/null +++ b/tests/components/ssd1351_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.esp32-c3.yaml b/tests/components/ssd1351_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..2a7266f502 --- /dev/null +++ b/tests/components/ssd1351_spi/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.esp32-idf.yaml b/tests/components/ssd1351_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..8342cb972b --- /dev/null +++ b/tests/components/ssd1351_spi/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.esp32.yaml b/tests/components/ssd1351_spi/test.esp32.yaml new file mode 100644 index 0000000000..8342cb972b --- /dev/null +++ b/tests/components/ssd1351_spi/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.esp8266.yaml b/tests/components/ssd1351_spi/test.esp8266.yaml new file mode 100644 index 0000000000..7ed9a31dde --- /dev/null +++ b/tests/components/ssd1351_spi/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/ssd1351_spi/test.rp2040.yaml b/tests/components/ssd1351_spi/test.rp2040.yaml new file mode 100644 index 0000000000..72936d046b --- /dev/null +++ b/tests/components/ssd1351_spi/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_ssd1351_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: ssd1351_spi + model: "SSD1351 128x128" + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.esp32-c3-idf.yaml b/tests/components/st7567_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d779040500 --- /dev/null +++ b/tests/components/st7567_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 5 + sda: 4 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.esp32-c3.yaml b/tests/components/st7567_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..d779040500 --- /dev/null +++ b/tests/components/st7567_i2c/test.esp32-c3.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 5 + sda: 4 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.esp32-idf.yaml b/tests/components/st7567_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..b7aee61b68 --- /dev/null +++ b/tests/components/st7567_i2c/test.esp32-idf.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 16 + sda: 17 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.esp32.yaml b/tests/components/st7567_i2c/test.esp32.yaml new file mode 100644 index 0000000000..b7aee61b68 --- /dev/null +++ b/tests/components/st7567_i2c/test.esp32.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 16 + sda: 17 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.esp8266.yaml b/tests/components/st7567_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..d779040500 --- /dev/null +++ b/tests/components/st7567_i2c/test.esp8266.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 5 + sda: 4 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_i2c/test.rp2040.yaml b/tests/components/st7567_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..d779040500 --- /dev/null +++ b/tests/components/st7567_i2c/test.rp2040.yaml @@ -0,0 +1,23 @@ +i2c: + - id: i2c_st7567_i2c + scl: 5 + sda: 4 + +display: + - platform: st7567_i2c + reset_pin: 3 + address: 0x3C + id: display1 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, 10, 10); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.esp32-c3-idf.yaml b/tests/components/st7567_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..b799ce7302 --- /dev/null +++ b/tests/components/st7567_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7567_spi + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.esp32-c3.yaml b/tests/components/st7567_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..b799ce7302 --- /dev/null +++ b/tests/components/st7567_spi/test.esp32-c3.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7567_spi + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.esp32-idf.yaml b/tests/components/st7567_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..bb4530248f --- /dev/null +++ b/tests/components/st7567_spi/test.esp32-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7567_spi + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.esp32.yaml b/tests/components/st7567_spi/test.esp32.yaml new file mode 100644 index 0000000000..bb4530248f --- /dev/null +++ b/tests/components/st7567_spi/test.esp32.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7567_spi + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.esp8266.yaml b/tests/components/st7567_spi/test.esp8266.yaml new file mode 100644 index 0000000000..bbc47e67f6 --- /dev/null +++ b/tests/components/st7567_spi/test.esp8266.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: st7567_spi + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7567_spi/test.rp2040.yaml b/tests/components/st7567_spi/test.rp2040.yaml new file mode 100644 index 0000000000..1b491101a8 --- /dev/null +++ b/tests/components/st7567_spi/test.rp2040.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7567_spi + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: st7567_spi + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.esp32-c3-idf.yaml b/tests/components/st7735/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fc6c2421c4 --- /dev/null +++ b/tests/components/st7735/test.esp32-c3-idf.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.esp32-c3.yaml b/tests/components/st7735/test.esp32-c3.yaml new file mode 100644 index 0000000000..fc6c2421c4 --- /dev/null +++ b/tests/components/st7735/test.esp32-c3.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 2 + dc_pin: 3 + reset_pin: 4 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.esp32-idf.yaml b/tests/components/st7735/test.esp32-idf.yaml new file mode 100644 index 0000000000..fd3f6cade6 --- /dev/null +++ b/tests/components/st7735/test.esp32-idf.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.esp32.yaml b/tests/components/st7735/test.esp32.yaml new file mode 100644 index 0000000000..fd3f6cade6 --- /dev/null +++ b/tests/components/st7735/test.esp32.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.esp8266.yaml b/tests/components/st7735/test.esp8266.yaml new file mode 100644 index 0000000000..ea8fa93c36 --- /dev/null +++ b/tests/components/st7735/test.esp8266.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7735/test.rp2040.yaml b/tests/components/st7735/test.rp2040.yaml new file mode 100644 index 0000000000..828f9a3ae1 --- /dev/null +++ b/tests/components/st7735/test.rp2040.yaml @@ -0,0 +1,29 @@ +spi: + - id: spi_st7735 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: st7735 + model: "INITR_18BLACKTAB" + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + device_width: 128 + device_height: 160 + col_start: 0 + row_start: 0 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.esp32-c3-idf.yaml b/tests/components/st7789v/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..1cb8d22fcb --- /dev/null +++ b/tests/components/st7789v/test.esp32-c3-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 2 + dc_pin: 3 + reset_pin: 8 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.esp32-c3.yaml b/tests/components/st7789v/test.esp32-c3.yaml new file mode 100644 index 0000000000..1cb8d22fcb --- /dev/null +++ b/tests/components/st7789v/test.esp32-c3.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 2 + dc_pin: 3 + reset_pin: 8 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.esp32-idf.yaml b/tests/components/st7789v/test.esp32-idf.yaml new file mode 100644 index 0000000000..54a9db6da1 --- /dev/null +++ b/tests/components/st7789v/test.esp32-idf.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.esp32.yaml b/tests/components/st7789v/test.esp32.yaml new file mode 100644 index 0000000000..54a9db6da1 --- /dev/null +++ b/tests/components/st7789v/test.esp32.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 12 + dc_pin: 13 + reset_pin: 14 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.esp8266.yaml b/tests/components/st7789v/test.esp8266.yaml new file mode 100644 index 0000000000..deeceb8c9a --- /dev/null +++ b/tests/components/st7789v/test.esp8266.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 15 + dc_pin: 16 + reset_pin: 5 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7789v/test.rp2040.yaml b/tests/components/st7789v/test.rp2040.yaml new file mode 100644 index 0000000000..778aa2aa55 --- /dev/null +++ b/tests/components/st7789v/test.rp2040.yaml @@ -0,0 +1,25 @@ +spi: + - id: spi_st7789v + clk_pin: 2 + mosi_pin: 3 + miso_pin: 8 + +display: + - platform: st7789v + model: TTGO TDisplay 135x240 + cs_pin: 5 + dc_pin: 6 + reset_pin: 7 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.esp32-c3-idf.yaml b/tests/components/st7920/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..84ae88461f --- /dev/null +++ b/tests/components/st7920/test.esp32-c3-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7920 + cs_pin: 2 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.esp32-c3.yaml b/tests/components/st7920/test.esp32-c3.yaml new file mode 100644 index 0000000000..84ae88461f --- /dev/null +++ b/tests/components/st7920/test.esp32-c3.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 6 + mosi_pin: 7 + miso_pin: 5 + +display: + - platform: st7920 + cs_pin: 2 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.esp32-idf.yaml b/tests/components/st7920/test.esp32-idf.yaml new file mode 100644 index 0000000000..cdcbc85642 --- /dev/null +++ b/tests/components/st7920/test.esp32-idf.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7920 + cs_pin: 12 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.esp32.yaml b/tests/components/st7920/test.esp32.yaml new file mode 100644 index 0000000000..cdcbc85642 --- /dev/null +++ b/tests/components/st7920/test.esp32.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: st7920 + cs_pin: 12 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.esp8266.yaml b/tests/components/st7920/test.esp8266.yaml new file mode 100644 index 0000000000..0450bf1c5e --- /dev/null +++ b/tests/components/st7920/test.esp8266.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 14 + mosi_pin: 13 + miso_pin: 12 + +display: + - platform: st7920 + cs_pin: 15 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/st7920/test.rp2040.yaml b/tests/components/st7920/test.rp2040.yaml new file mode 100644 index 0000000000..f442820e7b --- /dev/null +++ b/tests/components/st7920/test.rp2040.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_st7920 + clk_pin: 2 + mosi_pin: 3 + miso_pin: 4 + +display: + - platform: st7920 + cs_pin: 5 + height: 128 + width: 64 + pages: + - id: page1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + - id: page2 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); + on_page_change: + from: page1 + to: page2 + then: + lambda: |- + ESP_LOGD("display", "1 -> 2"); diff --git a/tests/components/status/test.esp32-c3-idf.yaml b/tests/components/status/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.esp32-c3.yaml b/tests/components/status/test.esp32-c3.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.esp32-idf.yaml b/tests/components/status/test.esp32-idf.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.esp32.yaml b/tests/components/status/test.esp32.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.esp32.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.esp8266.yaml b/tests/components/status/test.esp8266.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.esp8266.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.rp2040.yaml b/tests/components/status/test.rp2040.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/test.rp2040.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status_led/test.esp32-c3-idf.yaml b/tests/components/status_led/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.esp32-c3.yaml b/tests/components/status_led/test.esp32-c3.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.esp32-idf.yaml b/tests/components/status_led/test.esp32-idf.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.esp32.yaml b/tests/components/status_led/test.esp32.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.esp32.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.esp8266.yaml b/tests/components/status_led/test.esp8266.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.esp8266.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.rp2040.yaml b/tests/components/status_led/test.rp2040.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/test.rp2040.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/stepper/test.esp32-c3-idf.yaml b/tests/components/stepper/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.esp32-c3-idf.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.esp32-c3.yaml b/tests/components/stepper/test.esp32-c3.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.esp32-c3.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.esp32-idf.yaml b/tests/components/stepper/test.esp32-idf.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.esp32-idf.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.esp32.yaml b/tests/components/stepper/test.esp32.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.esp32.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.esp8266.yaml b/tests/components/stepper/test.esp8266.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.esp8266.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.rp2040.yaml b/tests/components/stepper/test.rp2040.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/test.rp2040.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/sts3x/test.esp32-c3-idf.yaml b/tests/components/sts3x/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..87980ce3a7 --- /dev/null +++ b/tests/components/sts3x/test.esp32-c3-idf.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 5 + sda: 4 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sts3x/test.esp32-c3.yaml b/tests/components/sts3x/test.esp32-c3.yaml new file mode 100644 index 0000000000..87980ce3a7 --- /dev/null +++ b/tests/components/sts3x/test.esp32-c3.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 5 + sda: 4 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sts3x/test.esp32-idf.yaml b/tests/components/sts3x/test.esp32-idf.yaml new file mode 100644 index 0000000000..a74d61e748 --- /dev/null +++ b/tests/components/sts3x/test.esp32-idf.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 16 + sda: 17 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sts3x/test.esp32.yaml b/tests/components/sts3x/test.esp32.yaml new file mode 100644 index 0000000000..a74d61e748 --- /dev/null +++ b/tests/components/sts3x/test.esp32.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 16 + sda: 17 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sts3x/test.esp8266.yaml b/tests/components/sts3x/test.esp8266.yaml new file mode 100644 index 0000000000..87980ce3a7 --- /dev/null +++ b/tests/components/sts3x/test.esp8266.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 5 + sda: 4 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sts3x/test.rp2040.yaml b/tests/components/sts3x/test.rp2040.yaml new file mode 100644 index 0000000000..87980ce3a7 --- /dev/null +++ b/tests/components/sts3x/test.rp2040.yaml @@ -0,0 +1,10 @@ +i2c: + - id: i2c_sts3x + scl: 5 + sda: 4 + +sensor: + - platform: sts3x + id: sts3x_sensor + name: STS3X Temperature + address: 0x4A diff --git a/tests/components/sun/test.esp32-c3-idf.yaml b/tests/components/sun/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.esp32-c3-idf.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.esp32-c3.yaml b/tests/components/sun/test.esp32-c3.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.esp32-c3.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.esp32-idf.yaml b/tests/components/sun/test.esp32-idf.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.esp32-idf.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.esp32.yaml b/tests/components/sun/test.esp32.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.esp32.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.esp8266.yaml b/tests/components/sun/test.esp8266.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.esp8266.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.rp2040.yaml b/tests/components/sun/test.rp2040.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/test.rp2040.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sx1509/test.esp32-c3-idf.yaml b/tests/components/sx1509/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ced849b3df --- /dev/null +++ b/tests/components/sx1509/test.esp32-c3-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 5 + sda: 4 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 diff --git a/tests/components/sx1509/test.esp32-c3.yaml b/tests/components/sx1509/test.esp32-c3.yaml new file mode 100644 index 0000000000..ced849b3df --- /dev/null +++ b/tests/components/sx1509/test.esp32-c3.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 5 + sda: 4 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 diff --git a/tests/components/sx1509/test.esp32-idf.yaml b/tests/components/sx1509/test.esp32-idf.yaml new file mode 100644 index 0000000000..1698f2abc4 --- /dev/null +++ b/tests/components/sx1509/test.esp32-idf.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 16 + sda: 17 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 diff --git a/tests/components/sx1509/test.esp32.yaml b/tests/components/sx1509/test.esp32.yaml new file mode 100644 index 0000000000..1698f2abc4 --- /dev/null +++ b/tests/components/sx1509/test.esp32.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 16 + sda: 17 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 diff --git a/tests/components/sx1509/test.esp8266.yaml b/tests/components/sx1509/test.esp8266.yaml new file mode 100644 index 0000000000..ced849b3df --- /dev/null +++ b/tests/components/sx1509/test.esp8266.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 5 + sda: 4 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 diff --git a/tests/components/sx1509/test.rp2040.yaml b/tests/components/sx1509/test.rp2040.yaml new file mode 100644 index 0000000000..ced849b3df --- /dev/null +++ b/tests/components/sx1509/test.rp2040.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_sx1509 + scl: 5 + sda: 4 + +sx1509: + - id: sx1509_hub + address: 0x3E + +binary_sensor: + - platform: gpio + name: GPIO SX1509 Test + pin: + sx1509: sx1509_hub + number: 3 From 8027921ba3c226fd489dd8f12ccbe8f3f6f2aa80 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 24 Apr 2024 05:55:27 +1000 Subject: [PATCH 068/313] `graphical_display_menu` requires a Display, not DisplayBuffer (#6614) --- esphome/components/graphical_display_menu/__init__.py | 2 +- .../graphical_display_menu/graphical_display_menu.cpp | 3 ++- esphome/core/color.h | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/esphome/components/graphical_display_menu/__init__.py b/esphome/components/graphical_display_menu/__init__.py index dc49358efd..3849449523 100644 --- a/esphome/components/graphical_display_menu/__init__.py +++ b/esphome/components/graphical_display_menu/__init__.py @@ -38,7 +38,7 @@ CONFIG_SCHEMA = DISPLAY_MENU_BASE_SCHEMA.extend( cv.Schema( { cv.GenerateID(): cv.declare_id(GraphicalDisplayMenu), - cv.Optional(CONF_DISPLAY): cv.use_id(display.DisplayBuffer), + cv.Optional(CONF_DISPLAY): cv.use_id(display.Display), cv.Required(CONF_FONT): cv.use_id(font.Font), cv.Optional(CONF_MENU_ITEM_VALUE): cv.templatable(cv.string), cv.Optional(CONF_FOREGROUND_COLOR): cv.use_id(color.ColorStruct), diff --git a/esphome/components/graphical_display_menu/graphical_display_menu.cpp b/esphome/components/graphical_display_menu/graphical_display_menu.cpp index 2e4c14fb7b..fcbad41388 100644 --- a/esphome/components/graphical_display_menu/graphical_display_menu.cpp +++ b/esphome/components/graphical_display_menu/graphical_display_menu.cpp @@ -229,7 +229,8 @@ inline void GraphicalDisplayMenu::draw_item(display::Display *display, const dis label.append(this->menu_item_value_.value(&args)); } - display->print(bounds->x, bounds->y, this->font_, foreground_color, display::TextAlign::TOP_LEFT, label.c_str()); + display->print(bounds->x, bounds->y, this->font_, foreground_color, display::TextAlign::TOP_LEFT, label.c_str(), + ~foreground_color); } void GraphicalDisplayMenu::draw_item(const display_menu_base::MenuItem *item, const uint8_t row, const bool selected) { diff --git a/esphome/core/color.h b/esphome/core/color.h index 45b2d4c871..fb72973017 100644 --- a/esphome/core/color.h +++ b/esphome/core/color.h @@ -62,6 +62,7 @@ struct Color { return Color(esp_scale8(this->red, scale), esp_scale8(this->green, scale), esp_scale8(this->blue, scale), esp_scale8(this->white, scale)); } + inline Color operator~() const ALWAYS_INLINE { return Color(255 - this->red, 255 - this->green, 255 - this->blue); } inline Color &operator*=(uint8_t scale) ALWAYS_INLINE { this->red = esp_scale8(this->red, scale); this->green = esp_scale8(this->green, scale); From b8f0182fc5b93c45eeafb048695ac655bcf3297e Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 24 Apr 2024 06:49:14 +1000 Subject: [PATCH 069/313] Add null GPIO pin (#6611) --- .../cst226/touchscreen/cst226_touchscreen.cpp | 18 +++++++----------- .../cst226/touchscreen/cst226_touchscreen.h | 2 +- esphome/core/gpio.h | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/esphome/components/cst226/touchscreen/cst226_touchscreen.cpp b/esphome/components/cst226/touchscreen/cst226_touchscreen.cpp index d4e43d30f5..69728dc666 100644 --- a/esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +++ b/esphome/components/cst226/touchscreen/cst226_touchscreen.cpp @@ -5,17 +5,13 @@ namespace cst226 { void CST226Touchscreen::setup() { esph_log_config(TAG, "Setting up CST226 Touchscreen..."); - if (this->reset_pin_ != nullptr) { - this->reset_pin_->setup(); - this->reset_pin_->digital_write(true); - delay(5); - this->reset_pin_->digital_write(false); - delay(5); - this->reset_pin_->digital_write(true); - this->set_timeout(30, [this] { this->continue_setup_(); }); - } else { - this->continue_setup_(); - } + this->reset_pin_->setup(); + this->reset_pin_->digital_write(true); + delay(5); + this->reset_pin_->digital_write(false); + delay(5); + this->reset_pin_->digital_write(true); + this->set_timeout(30, [this] { this->continue_setup_(); }); } void CST226Touchscreen::update_touches() { diff --git a/esphome/components/cst226/touchscreen/cst226_touchscreen.h b/esphome/components/cst226/touchscreen/cst226_touchscreen.h index 9f518e5068..1b15b952c4 100644 --- a/esphome/components/cst226/touchscreen/cst226_touchscreen.h +++ b/esphome/components/cst226/touchscreen/cst226_touchscreen.h @@ -35,7 +35,7 @@ class CST226Touchscreen : public touchscreen::Touchscreen, public i2c::I2CDevice void continue_setup_(); InternalGPIOPin *interrupt_pin_{}; - GPIOPin *reset_pin_{}; + GPIOPin *reset_pin_{NULL_PIN}; uint8_t chip_id_{}; bool setup_complete_{}; }; diff --git a/esphome/core/gpio.h b/esphome/core/gpio.h index 1b6f2ba1e6..b3f6b00196 100644 --- a/esphome/core/gpio.h +++ b/esphome/core/gpio.h @@ -62,6 +62,24 @@ class GPIOPin { virtual bool is_internal() { return false; } }; +/** + * A pin to replace those that don't exist. + */ +class NullPin : public GPIOPin { + public: + void setup() override {} + + void pin_mode(gpio::Flags _) override {} + + bool digital_read() override { return false; } + + void digital_write(bool _) override {} + + std::string dump_summary() const override { return {"Not used"}; } +}; + +static GPIOPin *const NULL_PIN = new NullPin(); + /// Copy of GPIOPin that is safe to use from ISRs (with no virtual functions) class ISRInternalGPIOPin { public: From f9ce35c89443b7245b889ed728f45f964d89a439 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 24 Apr 2024 09:59:19 +1200 Subject: [PATCH 070/313] Allow UART to be AUTO LOADed (#6617) --- esphome/components/uart/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/esphome/components/uart/__init__.py b/esphome/components/uart/__init__.py index 82bc6caaa4..088227afe5 100644 --- a/esphome/components/uart/__init__.py +++ b/esphome/components/uart/__init__.py @@ -59,6 +59,7 @@ UARTWriteAction = uart_ns.class_("UARTWriteAction", automation.Action) UARTDebugger = uart_ns.class_("UARTDebugger", cg.Component, automation.Action) UARTDummyReceiver = uart_ns.class_("UARTDummyReceiver", cg.Component) MULTI_CONF = True +MULTI_CONF_NO_DEFAULT = True def validate_raw_data(value): From f8cdb087fc0eec5199312da94379c6407cdc3339 Mon Sep 17 00:00:00 2001 From: Jean Louis-Guerin Date: Wed, 24 Apr 2024 03:21:44 +0200 Subject: [PATCH 071/313] Add the WeiKai SPI/I2C UART/IO Expander components to esphome (#5218) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 11 + esphome/components/weikai/__init__.py | 108 +++ esphome/components/weikai/weikai.cpp | 615 ++++++++++++++++++ esphome/components/weikai/weikai.h | 443 +++++++++++++ esphome/components/weikai/wk_reg_def.h | 304 +++++++++ esphome/components/weikai_i2c/__init__.py | 1 + esphome/components/weikai_i2c/weikai_i2c.cpp | 177 +++++ esphome/components/weikai_i2c/weikai_i2c.h | 61 ++ esphome/components/weikai_spi/__init__.py | 1 + esphome/components/weikai_spi/weikai_spi.cpp | 189 ++++++ esphome/components/weikai_spi/weikai_spi.h | 54 ++ esphome/components/wk2132_i2c/__init__.py | 30 + esphome/components/wk2132_i2c/wk2132_i2c.cpp | 4 + esphome/components/wk2132_spi/__init__.py | 31 + esphome/components/wk2168_i2c/__init__.py | 64 ++ esphome/components/wk2168_spi/__init__.py | 62 ++ esphome/components/wk2204_i2c/__init__.py | 30 + esphome/components/wk2204_spi/__init__.py | 30 + esphome/components/wk2212_i2c/__init__.py | 64 ++ esphome/components/wk2212_spi/__init__.py | 62 ++ tests/components/wk2132_i2c/common.yaml | 20 + .../components/wk2132_i2c/test.esp32-idf.yaml | 5 + .../wk2132_i2c/test.esp32-s3-idf.yaml | 5 + .../components/wk2132_i2c/test.esp32-s3.yaml | 5 + tests/components/wk2132_i2c/test.esp32.yaml | 5 + tests/components/wk2132_spi/common.yaml | 21 + .../components/wk2132_spi/test.esp32-idf.yaml | 7 + .../wk2132_spi/test.esp32-s3-idf.yaml | 7 + .../components/wk2132_spi/test.esp32-s3.yaml | 7 + tests/components/wk2132_spi/test.esp32.yaml | 7 + tests/components/wk2168_i2c/common.yaml | 63 ++ .../components/wk2168_i2c/test.esp32-idf.yaml | 5 + .../wk2168_i2c/test.esp32-s3-idf.yaml | 5 + .../components/wk2168_i2c/test.esp32-s3.yaml | 5 + tests/components/wk2168_i2c/test.esp32.yaml | 5 + tests/components/wk2168_spi/common.yaml | 63 ++ .../components/wk2168_spi/test.esp32-idf.yaml | 7 + .../wk2168_spi/test.esp32-s3-idf.yaml | 7 + .../components/wk2168_spi/test.esp32-s3.yaml | 7 + tests/components/wk2168_spi/test.esp32.yaml | 7 + tests/components/wk2204_i2c/common.yaml | 28 + .../components/wk2204_i2c/test.esp32-idf.yaml | 5 + .../wk2204_i2c/test.esp32-s3-idf.yaml | 5 + .../components/wk2204_i2c/test.esp32-s3.yaml | 5 + tests/components/wk2204_i2c/test.esp32.yaml | 5 + tests/components/wk2204_spi/common.yaml | 29 + .../components/wk2204_spi/test.esp32-idf.yaml | 7 + .../wk2204_spi/test.esp32-s3-idf.yaml | 7 + .../components/wk2204_spi/test.esp32-s3.yaml | 7 + tests/components/wk2204_spi/test.esp32.yaml | 7 + tests/components/wk2212_i2c/common.yaml | 59 ++ .../components/wk2212_i2c/test.esp32-idf.yaml | 5 + .../wk2212_i2c/test.esp32-s3-idf.yaml | 5 + .../components/wk2212_i2c/test.esp32-s3.yaml | 5 + tests/components/wk2212_i2c/test.esp32.yaml | 5 + tests/components/wk2212_spi/common.yaml | 58 ++ .../components/wk2212_spi/test.esp32-idf.yaml | 7 + .../wk2212_spi/test.esp32-s3-idf.yaml | 7 + .../components/wk2212_spi/test.esp32-s3.yaml | 7 + tests/components/wk2212_spi/test.esp32.yaml | 7 + 60 files changed, 2874 insertions(+) create mode 100644 esphome/components/weikai/__init__.py create mode 100644 esphome/components/weikai/weikai.cpp create mode 100644 esphome/components/weikai/weikai.h create mode 100644 esphome/components/weikai/wk_reg_def.h create mode 100644 esphome/components/weikai_i2c/__init__.py create mode 100644 esphome/components/weikai_i2c/weikai_i2c.cpp create mode 100644 esphome/components/weikai_i2c/weikai_i2c.h create mode 100644 esphome/components/weikai_spi/__init__.py create mode 100644 esphome/components/weikai_spi/weikai_spi.cpp create mode 100644 esphome/components/weikai_spi/weikai_spi.h create mode 100644 esphome/components/wk2132_i2c/__init__.py create mode 100644 esphome/components/wk2132_i2c/wk2132_i2c.cpp create mode 100644 esphome/components/wk2132_spi/__init__.py create mode 100644 esphome/components/wk2168_i2c/__init__.py create mode 100644 esphome/components/wk2168_spi/__init__.py create mode 100644 esphome/components/wk2204_i2c/__init__.py create mode 100644 esphome/components/wk2204_spi/__init__.py create mode 100644 esphome/components/wk2212_i2c/__init__.py create mode 100644 esphome/components/wk2212_spi/__init__.py create mode 100644 tests/components/wk2132_i2c/common.yaml create mode 100644 tests/components/wk2132_i2c/test.esp32-idf.yaml create mode 100644 tests/components/wk2132_i2c/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2132_i2c/test.esp32-s3.yaml create mode 100644 tests/components/wk2132_i2c/test.esp32.yaml create mode 100644 tests/components/wk2132_spi/common.yaml create mode 100644 tests/components/wk2132_spi/test.esp32-idf.yaml create mode 100644 tests/components/wk2132_spi/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2132_spi/test.esp32-s3.yaml create mode 100644 tests/components/wk2132_spi/test.esp32.yaml create mode 100644 tests/components/wk2168_i2c/common.yaml create mode 100644 tests/components/wk2168_i2c/test.esp32-idf.yaml create mode 100644 tests/components/wk2168_i2c/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2168_i2c/test.esp32-s3.yaml create mode 100644 tests/components/wk2168_i2c/test.esp32.yaml create mode 100644 tests/components/wk2168_spi/common.yaml create mode 100644 tests/components/wk2168_spi/test.esp32-idf.yaml create mode 100644 tests/components/wk2168_spi/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2168_spi/test.esp32-s3.yaml create mode 100644 tests/components/wk2168_spi/test.esp32.yaml create mode 100644 tests/components/wk2204_i2c/common.yaml create mode 100644 tests/components/wk2204_i2c/test.esp32-idf.yaml create mode 100644 tests/components/wk2204_i2c/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2204_i2c/test.esp32-s3.yaml create mode 100644 tests/components/wk2204_i2c/test.esp32.yaml create mode 100644 tests/components/wk2204_spi/common.yaml create mode 100644 tests/components/wk2204_spi/test.esp32-idf.yaml create mode 100644 tests/components/wk2204_spi/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2204_spi/test.esp32-s3.yaml create mode 100644 tests/components/wk2204_spi/test.esp32.yaml create mode 100644 tests/components/wk2212_i2c/common.yaml create mode 100644 tests/components/wk2212_i2c/test.esp32-idf.yaml create mode 100644 tests/components/wk2212_i2c/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2212_i2c/test.esp32-s3.yaml create mode 100644 tests/components/wk2212_i2c/test.esp32.yaml create mode 100644 tests/components/wk2212_spi/common.yaml create mode 100644 tests/components/wk2212_spi/test.esp32-idf.yaml create mode 100644 tests/components/wk2212_spi/test.esp32-s3-idf.yaml create mode 100644 tests/components/wk2212_spi/test.esp32-s3.yaml create mode 100644 tests/components/wk2212_spi/test.esp32.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 28ce8e7b6a..8da1618636 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -400,10 +400,21 @@ esphome/components/wake_on_lan/* @willwill2will54 esphome/components/waveshare_epaper/* @clydebarrow esphome/components/web_server_base/* @OttoWinter esphome/components/web_server_idf/* @dentra +esphome/components/weikai/* @DrCoolZic +esphome/components/weikai_i2c/* @DrCoolZic +esphome/components/weikai_spi/* @DrCoolZic esphome/components/whirlpool/* @glmnet esphome/components/whynter/* @aeonsablaze esphome/components/wiegand/* @ssieb esphome/components/wireguard/* @droscy @lhoracek @thomas0bernard +esphome/components/wk2132_i2c/* @DrCoolZic +esphome/components/wk2132_spi/* @DrCoolZic +esphome/components/wk2168_i2c/* @DrCoolZic +esphome/components/wk2168_spi/* @DrCoolZic +esphome/components/wk2204_i2c/* @DrCoolZic +esphome/components/wk2204_spi/* @DrCoolZic +esphome/components/wk2212_i2c/* @DrCoolZic +esphome/components/wk2212_spi/* @DrCoolZic esphome/components/wl_134/* @hobbypunk90 esphome/components/x9c/* @EtienneMD esphome/components/xgzp68xx/* @gcormier diff --git a/esphome/components/weikai/__init__.py b/esphome/components/weikai/__init__.py new file mode 100644 index 0000000000..4248c48e35 --- /dev/null +++ b/esphome/components/weikai/__init__.py @@ -0,0 +1,108 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import uart +from esphome.const import ( + CONF_BAUD_RATE, + CONF_CHANNEL, + CONF_ID, + CONF_INPUT, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, + CONF_OUTPUT, +) + +CODEOWNERS = ["@DrCoolZic"] +AUTO_LOAD = ["uart"] + +MULTI_CONF = True +CONF_STOP_BITS = "stop_bits" +CONF_PARITY = "parity" +CONF_CRYSTAL = "crystal" +CONF_UART = "uart" +CONF_TEST_MODE = "test_mode" + +weikai_ns = cg.esphome_ns.namespace("weikai") +WeikaiComponent = weikai_ns.class_("WeikaiComponent", cg.Component) +WeikaiChannel = weikai_ns.class_("WeikaiChannel", uart.UARTComponent) + + +def check_channel_max(value, max): + channel_uniq = [] + channel_dup = [] + for x in value[CONF_UART]: + if x[CONF_CHANNEL] > max - 1: + raise cv.Invalid(f"Invalid channel number: {x[CONF_CHANNEL]}") + if x[CONF_CHANNEL] not in channel_uniq: + channel_uniq.append(x[CONF_CHANNEL]) + else: + channel_dup.append(x[CONF_CHANNEL]) + if len(channel_dup) > 0: + raise cv.Invalid(f"Duplicate channel list: {channel_dup}") + return value + + +def check_channel_max_4(value): + return check_channel_max(value, 4) + + +def check_channel_max_2(value): + return check_channel_max(value, 2) + + +WKBASE_SCHEMA = cv.Schema( + { + cv.GenerateID(): cv.declare_id(WeikaiComponent), + cv.Optional(CONF_CRYSTAL, default=14745600): cv.int_, + cv.Optional(CONF_TEST_MODE, default=0): cv.int_, + cv.Required(CONF_UART): cv.ensure_list( + { + cv.Required(CONF_ID): cv.declare_id(WeikaiChannel), + cv.Optional(CONF_CHANNEL, default=0): cv.int_range(min=0, max=3), + cv.Required(CONF_BAUD_RATE): cv.int_range(min=1), + cv.Optional(CONF_STOP_BITS, default=1): cv.one_of(1, 2, int=True), + cv.Optional(CONF_PARITY, default="NONE"): cv.enum( + uart.UART_PARITY_OPTIONS, upper=True + ), + } + ), + } +).extend(cv.COMPONENT_SCHEMA) + + +async def register_weikai(var, config): + """Register an weikai device with the given config.""" + cg.add(var.set_crystal(config[CONF_CRYSTAL])) + cg.add(var.set_test_mode(config[CONF_TEST_MODE])) + await cg.register_component(var, config) + for uart_elem in config[CONF_UART]: + chan = cg.new_Pvariable(uart_elem[CONF_ID]) + cg.add(chan.set_channel_name(str(uart_elem[CONF_ID]))) + cg.add(chan.set_parent(var)) + cg.add(chan.set_channel(uart_elem[CONF_CHANNEL])) + cg.add(chan.set_baud_rate(uart_elem[CONF_BAUD_RATE])) + cg.add(chan.set_stop_bits(uart_elem[CONF_STOP_BITS])) + cg.add(chan.set_parity(uart_elem[CONF_PARITY])) + + +def validate_pin_mode(value): + """Checks input/output mode inconsistency""" + if not (value[CONF_MODE][CONF_INPUT] or value[CONF_MODE][CONF_OUTPUT]): + raise cv.Invalid("Mode must be either input or output") + if value[CONF_MODE][CONF_INPUT] and value[CONF_MODE][CONF_OUTPUT]: + raise cv.Invalid("Mode must be either input or output") + return value + + +WEIKAI_PIN_SCHEMA = cv.Schema( + { + cv.Required(CONF_NUMBER): cv.int_range(min=0, max=7), + cv.Optional(CONF_MODE, default={}): cv.All( + { + cv.Optional(CONF_INPUT, default=False): cv.boolean, + cv.Optional(CONF_OUTPUT, default=False): cv.boolean, + }, + ), + cv.Optional(CONF_INVERTED, default=False): cv.boolean, + } +) diff --git a/esphome/components/weikai/weikai.cpp b/esphome/components/weikai/weikai.cpp new file mode 100644 index 0000000000..a04bc0a574 --- /dev/null +++ b/esphome/components/weikai/weikai.cpp @@ -0,0 +1,615 @@ +/// @file weikai.cpp +/// @brief WeiKai component family - classes implementation +/// @date Last Modified: 2024/04/06 15:13:11 +/// @details The classes declared in this file can be used by the Weikai family + +#include "weikai.h" + +namespace esphome { +namespace weikai { + +/*! @mainpage Weikai source code documentation + This documentation provides information about the implementation of the family of WeiKai Components in ESPHome. + Here is the class diagram related to Weikai family of components: + @image html weikai_class.png + + @section WKRingBuffer_ The WKRingBuffer template class +The WKRingBuffer template class has it names implies implement a simple ring buffer helper class. This straightforward +container implements FIFO functionality, enabling bytes to be pushed into one side and popped from the other in the +order of entry. Implementation is classic and therefore not described in any details. + + @section WeikaiRegister_ The WeikaiRegister class + The WeikaiRegister helper class creates objects that act as proxies to the device registers. + @details This is an abstract virtual class (interface) that provides all the necessary access to registers while hiding + the actual implementation. The access to the registers can be made through an I²C bus in for example for wk2168_i2c + component or through a SPI bus for example in the case of the wk2168_spi component. Derived classes will actually + performs the specific bus operations. + + @section WeikaiRegisterI2C_ WeikaiRegisterI2C + The weikai_i2c::WeikaiRegisterI2C class implements the virtual methods of the WeikaiRegister class for an I2C bus. + + @section WeikaiRegisterSPI_ WeikaiRegisterSPI + The weikai_spi::WeikaiRegisterSPI class implements the virtual methods of the WeikaiRegister class for an SPI bus. + + @section WeikaiComponent_ The WeikaiComponent class +The WeikaiComponent class stores the information global to a WeiKai family component and provides methods to set/access +this information. It also serves as a container for WeikaiChannel instances. This is done by maintaining an array of +references these WeikaiChannel instances. This class derives from the esphome::Component classes. This class override +esphome::Component::loop() method to facilitate the seamless transfer of accumulated bytes from the receive +FIFO into the ring buffer. This process ensures quick access to the stored bytes, enhancing the overall efficiency of +the component. + + @section WeikaiComponentI2C_ WeikaiComponentI2C + The weikai_i2c::WeikaiComponentI2C class implements the virtual methods of the WeikaiComponent class for an I2C bus. + + @section WeikaiComponentSPI_ WeikaiComponentSPI + The weikai_spi::WeikaiComponentSPI class implements the virtual methods of the WeikaiComponent class for an SPI bus. + + @section WeikaiGPIOPin_ WeikaiGPIOPin class + The WeikaiGPIOPin class is an helper class to expose the GPIO pins of WK family components as if they were internal + GPIO pins. It also provides the setup() and dump_summary() methods. + + @section WeikaiChannel_ The WeikaiChannel class + The WeikaiChannel class is used to implement all the virtual methods of the ESPHome uart::UARTComponent class. An + individual instance of this class is created for each UART channel. It has a link back to the WeikaiComponent object it + belongs to. This class derives from the uart::UARTComponent class. It collaborates through an aggregation with + WeikaiComponent. This implies that WeikaiComponent acts as a container, housing several WeikaiChannel instances. + Furthermore, the WeikaiChannel class derives from the ESPHome uart::UARTComponent class, it also has an association + relationship with the WKRingBuffer and WeikaiRegister helper classes. Consequently, when a WeikaiChannel instance is + destroyed, the associated WKRingBuffer instance is also destroyed. + +*/ + +static const char *const TAG = "weikai"; + +/// @brief convert an int to binary representation as C++ std::string +/// @param val integer to convert +/// @return a std::string +inline std::string i2s(uint8_t val) { return std::bitset<8>(val).to_string(); } +/// Convert std::string to C string +#define I2S2CS(val) (i2s(val).c_str()) + +/// @brief measure the time elapsed between two calls +/// @param last_time time of the previous call +/// @return the elapsed time in milliseconds +uint32_t elapsed_ms(uint32_t &last_time) { + uint32_t e = millis() - last_time; + last_time = millis(); + return e; +}; + +/// @brief Converts the parity enum value to a C string +/// @param parity enum +/// @return the string +const char *p2s(uart::UARTParityOptions parity) { + using namespace uart; + switch (parity) { + case UART_CONFIG_PARITY_NONE: + return "NONE"; + case UART_CONFIG_PARITY_EVEN: + return "EVEN"; + case UART_CONFIG_PARITY_ODD: + return "ODD"; + default: + return "UNKNOWN"; + } +} + +/// @brief Display a buffer in hexadecimal format (32 hex values / line) for debug +void print_buffer(const uint8_t *data, size_t length) { + char hex_buffer[100]; + hex_buffer[(3 * 32) + 1] = 0; + for (size_t i = 0; i < length; i++) { + snprintf(&hex_buffer[3 * (i % 32)], sizeof(hex_buffer), "%02X ", data[i]); + if (i % 32 == 31) { + ESP_LOGVV(TAG, " %s", hex_buffer); + } + } + if (length % 32) { + // null terminate if incomplete line + hex_buffer[3 * (length % 32) + 2] = 0; + ESP_LOGVV(TAG, " %s", hex_buffer); + } +} + +static const char *const REG_TO_STR_P0[16] = {"GENA", "GRST", "GMUT", "SPAGE", "SCR", "LCR", "FCR", "SIER", + "SIFR", "TFCNT", "RFCNT", "FSR", "LSR", "FDAT", "FWCR", "RS485"}; +static const char *const REG_TO_STR_P1[16] = {"GENA", "GRST", "GMUT", "SPAGE", "BAUD1", "BAUD0", "PRES", "RFTL", + "TFTL", "FWTH", "FWTL", "XON1", "XOFF1", "SADR", "SAEN", "RTSDLY"}; + +// method to print a register value as text: used in the log messages ... +const char *reg_to_str(int reg, bool page1) { + if (reg == WKREG_GPDAT) { + return "GPDAT"; + } else if (reg == WKREG_GPDIR) { + return "GPDIR"; + } else { + return page1 ? REG_TO_STR_P1[reg & 0x0F] : REG_TO_STR_P0[reg & 0x0F]; + } +} + +enum RegType { REG = 0, FIFO = 1 }; ///< Register or FIFO + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiRegister methods +/////////////////////////////////////////////////////////////////////////////// +WeikaiRegister &WeikaiRegister::operator=(uint8_t value) { + write_reg(value); + return *this; +} + +WeikaiRegister &WeikaiRegister::operator&=(uint8_t value) { + value &= read_reg(); + write_reg(value); + return *this; +} + +WeikaiRegister &WeikaiRegister::operator|=(uint8_t value) { + value |= read_reg(); + write_reg(value); + return *this; +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiComponent methods +/////////////////////////////////////////////////////////////////////////////// +void WeikaiComponent::loop() { + if ((this->component_state_ & COMPONENT_STATE_MASK) != COMPONENT_STATE_LOOP) + return; + + // If there are some bytes in the receive FIFO we transfers them to the ring buffers + size_t transferred = 0; + for (auto *child : this->children_) { + // we look if some characters has been received in the fifo + transferred += child->xfer_fifo_to_buffer_(); + } + if (transferred > 0) { + ESP_LOGV(TAG, "we transferred %d bytes from fifo to buffer...", transferred); + } + +#ifdef TEST_COMPONENT + static uint32_t loop_time = 0; + static uint32_t loop_count = 0; + uint32_t time = 0; + + if (test_mode_ == 1) { // test component in loopback + ESP_LOGI(TAG, "Component loop %" PRIu32 " for %s : %" PRIu32 " ms since last call ...", loop_count++, + this->get_name(), millis() - loop_time); + loop_time = millis(); + char message[64]; + elapsed_ms(time); // set time to now + for (int i = 0; i < this->children_.size(); i++) { + if (i != ((loop_count - 1) % this->children_.size())) // we do only one per loop + continue; + snprintf(message, sizeof(message), "%s:%s", this->get_name(), children_[i]->get_channel_name()); + children_[i]->uart_send_test_(message); + uint32_t const start_time = millis(); + while (children_[i]->tx_fifo_is_not_empty_()) { // wait until buffer empty + if (millis() - start_time > 1500) { + ESP_LOGE(TAG, "timeout while flushing - %d bytes left in buffer...", children_[i]->tx_in_fifo_()); + break; + } + yield(); // reschedule our thread to avoid blocking + } + bool status = children_[i]->uart_receive_test_(message); + ESP_LOGI(TAG, "Test %s => send/received %u bytes %s - execution time %" PRIu32 " ms...", message, + RING_BUFFER_SIZE, status ? "correctly" : "with error", elapsed_ms(time)); + } + } + + if (this->test_mode_ == 2) { // test component in echo mode + for (auto *child : this->children_) { + uint8_t data = 0; + if (child->available()) { + child->read_byte(&data); + ESP_LOGI(TAG, "echo mode: read -> send %02X", data); + child->write_byte(data); + } + } + } + if (test_mode_ == 3) { + test_gpio_input_(); + } + + if (test_mode_ == 4) { + test_gpio_output_(); + } +#endif +} + +#if defined(TEST_COMPONENT) +void WeikaiComponent::test_gpio_input_() { + static bool init_input{false}; + static uint8_t state{0}; + uint8_t value; + if (!init_input) { + init_input = true; + // set all pins in input mode + this->reg(WKREG_GPDIR, 0) = 0x00; + ESP_LOGI(TAG, "initializing all pins to input mode"); + state = this->reg(WKREG_GPDAT, 0); + ESP_LOGI(TAG, "initial input data state = %02X (%s)", state, I2S2CS(state)); + } + value = this->reg(WKREG_GPDAT, 0); + if (value != state) { + ESP_LOGI(TAG, "Input data changed from %02X to %02X (%s)", state, value, I2S2CS(value)); + state = value; + } +} + +void WeikaiComponent::test_gpio_output_() { + static bool init_output{false}; + static uint8_t state{0}; + if (!init_output) { + init_output = true; + // set all pins in output mode + this->reg(WKREG_GPDIR, 0) = 0xFF; + ESP_LOGI(TAG, "initializing all pins to output mode"); + this->reg(WKREG_GPDAT, 0) = state; + ESP_LOGI(TAG, "setting all outputs to 0"); + } + state = ~state; + this->reg(WKREG_GPDAT, 0) = state; + ESP_LOGI(TAG, "Flipping all outputs to %02X (%s)", state, I2S2CS(state)); + delay(100); // NOLINT +} +#endif + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiGPIOPin methods +/////////////////////////////////////////////////////////////////////////////// +bool WeikaiComponent::read_pin_val_(uint8_t pin) { + this->input_state_ = this->reg(WKREG_GPDAT, 0); + ESP_LOGVV(TAG, "reading input pin %u = %u in_state %s", pin, this->input_state_ & (1 << pin), I2S2CS(input_state_)); + return this->input_state_ & (1 << pin); +} + +void WeikaiComponent::write_pin_val_(uint8_t pin, bool value) { + if (value) { + this->output_state_ |= (1 << pin); + } else { + this->output_state_ &= ~(1 << pin); + } + ESP_LOGVV(TAG, "writing output pin %d with %d out_state %s", pin, uint8_t(value), I2S2CS(this->output_state_)); + this->reg(WKREG_GPDAT, 0) = this->output_state_; +} + +void WeikaiComponent::set_pin_direction_(uint8_t pin, gpio::Flags flags) { + if (flags == gpio::FLAG_INPUT) { + this->pin_config_ &= ~(1 << pin); // clear bit (input mode) + } else { + if (flags == gpio::FLAG_OUTPUT) { + this->pin_config_ |= 1 << pin; // set bit (output mode) + } else { + ESP_LOGE(TAG, "pin %d direction invalid", pin); + } + } + ESP_LOGVV(TAG, "setting pin %d direction to %d pin_config=%s", pin, flags, I2S2CS(this->pin_config_)); + this->reg(WKREG_GPDIR, 0) = this->pin_config_; // TODO check ~ +} + +void WeikaiGPIOPin::setup() { + ESP_LOGCONFIG(TAG, "Setting GPIO pin %d mode to %s", this->pin_, + flags_ == gpio::FLAG_INPUT ? "Input" + : this->flags_ == gpio::FLAG_OUTPUT ? "Output" + : "NOT SPECIFIED"); + // ESP_LOGCONFIG(TAG, "Setting GPIO pins mode to '%s' %02X", I2S2CS(this->flags_), this->flags_); + this->pin_mode(this->flags_); +} + +std::string WeikaiGPIOPin::dump_summary() const { + char buffer[32]; + snprintf(buffer, sizeof(buffer), "%u via WeiKai %s", this->pin_, this->parent_->get_name()); + return buffer; +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiChannel methods +/////////////////////////////////////////////////////////////////////////////// +void WeikaiChannel::setup_channel() { + ESP_LOGCONFIG(TAG, " Setting up UART %s:%s ...", this->parent_->get_name(), this->get_channel_name()); + // we enable transmit and receive on this channel + if (this->check_channel_down()) { + ESP_LOGCONFIG(TAG, " Error channel %s not working...", this->get_channel_name()); + } + this->reset_fifo_(); + this->receive_buffer_.clear(); + this->set_line_param_(); + this->set_baudrate_(); +} + +void WeikaiChannel::dump_channel() { + ESP_LOGCONFIG(TAG, " UART %s ...", this->get_channel_name()); + ESP_LOGCONFIG(TAG, " Baud rate: %" PRIu32 " Bd", this->baud_rate_); + ESP_LOGCONFIG(TAG, " Data bits: %u", this->data_bits_); + ESP_LOGCONFIG(TAG, " Stop bits: %u", this->stop_bits_); + ESP_LOGCONFIG(TAG, " Parity: %s", p2s(this->parity_)); +} + +void WeikaiChannel::reset_fifo_() { + // enable transmission and reception + this->reg(WKREG_SCR) = SCR_RXEN | SCR_TXEN; + // we reset and enable transmit and receive FIFO + this->reg(WKREG_FCR) = FCR_TFEN | FCR_RFEN | FCR_TFRST | FCR_RFRST; +} + +void WeikaiChannel::set_line_param_() { + this->data_bits_ = 8; // always equal to 8 for WeiKai (cant be changed) + uint8_t lcr = 0; + if (this->stop_bits_ == 2) + lcr |= LCR_STPL; + switch (this->parity_) { // parity selection settings + case uart::UART_CONFIG_PARITY_ODD: + lcr |= (LCR_PAEN | LCR_PAR_ODD); + break; + case uart::UART_CONFIG_PARITY_EVEN: + lcr |= (LCR_PAEN | LCR_PAR_EVEN); + break; + default: + break; // no parity 000x + } + this->reg(WKREG_LCR) = lcr; // write LCR + ESP_LOGV(TAG, " line config: %d data_bits, %d stop_bits, parity %s register [%s]", this->data_bits_, + this->stop_bits_, p2s(this->parity_), I2S2CS(lcr)); +} + +void WeikaiChannel::set_baudrate_() { + if (this->baud_rate_ > this->parent_->crystal_ / 16) { + baud_rate_ = this->parent_->crystal_ / 16; + ESP_LOGE(TAG, " Requested baudrate too high for crystal=%" PRIu32 " Hz. Has been reduced to %" PRIu32 " Bd", + this->parent_->crystal_, this->baud_rate_); + }; + uint16_t const val_int = this->parent_->crystal_ / (this->baud_rate_ * 16) - 1; + uint16_t val_dec = (this->parent_->crystal_ % (this->baud_rate_ * 16)) / (this->baud_rate_ * 16); + uint8_t const baud_high = (uint8_t) (val_int >> 8); + uint8_t const baud_low = (uint8_t) (val_int & 0xFF); + while (val_dec > 0x0A) + val_dec /= 0x0A; + uint8_t const baud_dec = (uint8_t) (val_dec); + + this->parent_->page1_ = true; // switch to page 1 + this->reg(WKREG_SPAGE) = 1; + this->reg(WKREG_BRH) = baud_high; + this->reg(WKREG_BRL) = baud_low; + this->reg(WKREG_BRD) = baud_dec; + this->parent_->page1_ = false; // switch back to page 0 + this->reg(WKREG_SPAGE) = 0; + + ESP_LOGV(TAG, " Crystal=%d baudrate=%d => registers [%d %d %d]", this->parent_->crystal_, this->baud_rate_, + baud_high, baud_low, baud_dec); +} + +inline bool WeikaiChannel::tx_fifo_is_not_empty_() { return this->reg(WKREG_FSR) & FSR_TFDAT; } + +size_t WeikaiChannel::tx_in_fifo_() { + size_t tfcnt = this->reg(WKREG_TFCNT); + if (tfcnt == 0) { + uint8_t const fsr = this->reg(WKREG_FSR); + if (fsr & FSR_TFFULL) { + ESP_LOGVV(TAG, "tx FIFO full FSR=%s", I2S2CS(fsr)); + tfcnt = FIFO_SIZE; + } + } + ESP_LOGVV(TAG, "tx FIFO contains %d bytes", tfcnt); + return tfcnt; +} + +size_t WeikaiChannel::rx_in_fifo_() { + size_t available = this->reg(WKREG_RFCNT); + uint8_t const fsr = this->reg(WKREG_FSR); + if (fsr & (FSR_RFOE | FSR_RFLB | FSR_RFFE | FSR_RFPE)) { + if (fsr & FSR_RFOE) + ESP_LOGE(TAG, "Receive data overflow FSR=%s", I2S2CS(fsr)); + if (fsr & FSR_RFLB) + ESP_LOGE(TAG, "Receive line break FSR=%s", I2S2CS(fsr)); + if (fsr & FSR_RFFE) + ESP_LOGE(TAG, "Receive frame error FSR=%s", I2S2CS(fsr)); + if (fsr & FSR_RFPE) + ESP_LOGE(TAG, "Receive parity error FSR=%s", I2S2CS(fsr)); + } + if ((available == 0) && (fsr & FSR_RFDAT)) { + // here we should be very careful because we can have something like this: + // - at time t0 we read RFCNT=0 because nothing yet received + // - at time t0+delta we might read FIFO not empty because one byte has just been received + // - so to be sure we need to do another read of RFCNT and if it is still zero -> buffer full + available = this->reg(WKREG_RFCNT); + if (available == 0) { // still zero ? + ESP_LOGV(TAG, "rx FIFO is full FSR=%s", I2S2CS(fsr)); + available = FIFO_SIZE; + } + } + ESP_LOGVV(TAG, "rx FIFO contain %d bytes - FSR status=%s", available, I2S2CS(fsr)); + return available; +} + +bool WeikaiChannel::check_channel_down() { + // to check if we channel is up we write to the LCR W/R register + // note that this will put a break on the tx line for few ms + WeikaiRegister &lcr = this->reg(WKREG_LCR); + lcr = 0x3F; + uint8_t val = lcr; + if (val != 0x3F) { + ESP_LOGE(TAG, "R/W of register failed expected 0x3F received 0x%02X", val); + return true; + } + lcr = 0; + val = lcr; + if (val != 0x00) { + ESP_LOGE(TAG, "R/W of register failed expected 0x00 received 0x%02X", val); + return true; + } + return false; +} + +bool WeikaiChannel::peek_byte(uint8_t *buffer) { + auto available = this->receive_buffer_.count(); + if (!available) + xfer_fifo_to_buffer_(); + return this->receive_buffer_.peek(*buffer); +} + +int WeikaiChannel::available() { + size_t available = this->receive_buffer_.count(); + if (!available) + available = xfer_fifo_to_buffer_(); + return available; +} + +bool WeikaiChannel::read_array(uint8_t *buffer, size_t length) { + bool status = true; + auto available = this->receive_buffer_.count(); + if (length > available) { + ESP_LOGW(TAG, "read_array: buffer underflow requested %d bytes only %d bytes available...", length, available); + length = available; + status = false; + } + // retrieve the bytes from ring buffer + for (size_t i = 0; i < length; i++) { + this->receive_buffer_.pop(buffer[i]); + } + ESP_LOGVV(TAG, "read_array(ch=%d buffer[0]=%02X, length=%d): status %s", this->channel_, *buffer, length, + status ? "OK" : "ERROR"); + return status; +} + +void WeikaiChannel::write_array(const uint8_t *buffer, size_t length) { + if (length > XFER_MAX_SIZE) { + ESP_LOGE(TAG, "Write_array: invalid call - requested %d bytes but max size %d ...", length, XFER_MAX_SIZE); + length = XFER_MAX_SIZE; + } + this->reg(0).write_fifo(const_cast(buffer), length); +} + +void WeikaiChannel::flush() { + uint32_t const start_time = millis(); + while (this->tx_fifo_is_not_empty_()) { // wait until buffer empty + if (millis() - start_time > 200) { + ESP_LOGW(TAG, "WARNING flush timeout - still %d bytes not sent after 200 ms...", this->tx_in_fifo_()); + return; + } + yield(); // reschedule our thread to avoid blocking + } +} + +size_t WeikaiChannel::xfer_fifo_to_buffer_() { + size_t to_transfer; + size_t free; + while ((to_transfer = this->rx_in_fifo_()) && (free = this->receive_buffer_.free())) { + // while bytes in fifo and some room in the buffer we transfer + if (to_transfer > XFER_MAX_SIZE) + to_transfer = XFER_MAX_SIZE; // we can only do so much + if (to_transfer > free) + to_transfer = free; // we'll do the rest next time + if (to_transfer) { + uint8_t data[to_transfer]; + this->reg(0).read_fifo(data, to_transfer); + for (size_t i = 0; i < to_transfer; i++) + this->receive_buffer_.push(data[i]); + } + } // while work to do + return to_transfer; +} + +/// +// TEST COMPONENT +// +#ifdef TEST_COMPONENT +/// @addtogroup test_ Test component information +/// @{ + +/// @brief An increment "Functor" (i.e. a class object that acts like a method with state!) +/// +/// Functors are objects that can be treated as though they are a function or function pointer. +class Increment { + public: + /// @brief constructor: initialize current value to 0 + Increment() : i_(0) {} + /// @brief overload of the parenthesis operator. + /// Returns the current value and auto increment it + /// @return the current value. + uint8_t operator()() { return i_++; } + + private: + uint8_t i_; +}; + +/// @brief Hex converter to print/display a buffer in hexadecimal format (32 hex values / line). +/// @param buffer contains the values to display +void print_buffer(std::vector buffer) { + char hex_buffer[100]; + hex_buffer[(3 * 32) + 1] = 0; + for (size_t i = 0; i < buffer.size(); i++) { + snprintf(&hex_buffer[3 * (i % 32)], sizeof(hex_buffer), "%02X ", buffer[i]); + if (i % 32 == 31) + ESP_LOGI(TAG, " %s", hex_buffer); + } + if (buffer.size() % 32) { + // null terminate if incomplete line + hex_buffer[3 * (buffer.size() % 32) + 1] = 0; + ESP_LOGI(TAG, " %s", hex_buffer); + } +} + +/// @brief test the write_array method +void WeikaiChannel::uart_send_test_(char *message) { + auto start_exec = micros(); + std::vector output_buffer(XFER_MAX_SIZE); + generate(output_buffer.begin(), output_buffer.end(), Increment()); // fill with incrementing number + size_t to_send = RING_BUFFER_SIZE; + while (to_send) { + this->write_array(&output_buffer[0], XFER_MAX_SIZE); // we send the buffer + this->flush(); + to_send -= XFER_MAX_SIZE; + } + ESP_LOGV(TAG, "%s => sent %d bytes - exec time %d µs ...", message, RING_BUFFER_SIZE, micros() - start_exec); +} + +/// @brief test read_array method +bool WeikaiChannel::uart_receive_test_(char *message) { + auto start_exec = micros(); + bool status = true; + size_t received = 0; + std::vector buffer(RING_BUFFER_SIZE); + + // we wait until we have received all the bytes + uint32_t const start_time = millis(); + status = true; + while (received < RING_BUFFER_SIZE) { + while (XFER_MAX_SIZE > this->available()) { + this->xfer_fifo_to_buffer_(); + if (millis() - start_time > 1500) { + ESP_LOGE(TAG, "uart_receive_test_() timeout: only %d bytes received...", this->available()); + break; + } + yield(); // reschedule our thread to avoid blocking + } + status = this->read_array(&buffer[received], XFER_MAX_SIZE) && status; + received += XFER_MAX_SIZE; + } + + uint8_t peek_value = 0; + this->peek_byte(&peek_value); + if (peek_value != 0) { + ESP_LOGE(TAG, "Peek first byte value error..."); + status = false; + } + + for (size_t i = 0; i < RING_BUFFER_SIZE; i++) { + if (buffer[i] != i % XFER_MAX_SIZE) { + ESP_LOGE(TAG, "Read buffer contains error...b=%x i=%x", buffer[i], i % XFER_MAX_SIZE); + print_buffer(buffer); + status = false; + break; + } + } + + ESP_LOGV(TAG, "%s => received %d bytes status %s - exec time %d µs ...", message, received, status ? "OK" : "ERROR", + micros() - start_exec); + return status; +} + +/// @} +#endif + +} // namespace weikai +} // namespace esphome diff --git a/esphome/components/weikai/weikai.h b/esphome/components/weikai/weikai.h new file mode 100644 index 0000000000..042c729162 --- /dev/null +++ b/esphome/components/weikai/weikai.h @@ -0,0 +1,443 @@ +/// @file weikai.h +/// @author DrCoolZic +/// @brief WeiKai component family - classes declaration +/// @date Last Modified: 2024/04/06 14:44:17 +/// @details The classes declared in this file can be used by the Weikai family +/// of UART and GPIO expander components. As of today it provides support for +/// wk2124_spi, wk2132_spi, wk2168_spi, wk2204_spi, wk2212_spi, +/// wk2132_i2c, wk2168_i2c, wk2204_i2c, wk2212_i2c + +#pragma once +#include +#include +#include +#include "esphome/core/component.h" +#include "esphome/components/uart/uart.h" +#include "wk_reg_def.h" + +/// When the TEST_COMPONENT flag is defined we include some auto-test methods. Used to test the software during +/// development but can also be used in situ to test if the component is working correctly. For release we do +/// not set it by default but you can set it by using the following lines in you configuration file: +/// @code +/// esphome: +/// platformio_options: +/// build_flags: +/// - -DTEST_COMPONENT +/// @endcode +// #define TEST_COMPONENT + +namespace esphome { +namespace weikai { + +/// @brief XFER_MAX_SIZE defines the maximum number of bytes allowed during one transfer. +#if defined(I2C_BUFFER_LENGTH) +constexpr size_t XFER_MAX_SIZE = I2C_BUFFER_LENGTH; +#else +constexpr size_t XFER_MAX_SIZE = 128; +#endif + +/// @brief size of the internal WeiKai FIFO +constexpr size_t FIFO_SIZE = 256; + +/// @brief size of the ring buffer set to size of the FIFO +constexpr size_t RING_BUFFER_SIZE = FIFO_SIZE; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// @brief This is an helper class that provides a simple ring buffers that works as a FIFO +/// @details This ring buffer is used to buffer the bytes received in the FIFO of the Weika device. The best way to read +/// characters from the device FIFO, is to first check how many bytes were received and then read them all at once. +/// Unfortunately in all the code I have reviewed the characters are read one by one in a while loop by checking if +/// bytes are available then reading the byte until no more byte available. This is pretty inefficient for two reasons: +/// - Fist you need to perform a test for each byte to read +/// - and second you call the read byte method for each character. +/// . +/// Assuming you need to read 100 bytes that results into 200 calls. This is to compare to 2 calls (one to find the +/// number of bytes available plus one to read all the bytes) in the best case! If the registers you read are located on +/// the micro-controller this is acceptable because the registers can be accessed fast. But when the registers are +/// located on a remote device accessing them requires several cycles on a slow bus. As it it not possible to fix this +/// problem by asking users to rewrite their code, I have implemented this ring buffer that store the bytes received +/// locally. +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +template class WKRingBuffer { + public: + /// @brief pushes an item at the tail of the fifo + /// @param item item to push + /// @return true if item has been pushed, false il item could not pushed (buffer full) + bool push(const T item) { + if (is_full()) + return false; + this->rb_[this->head_] = item; + this->head_ = (this->head_ + 1) % SIZE; + this->count_++; + return true; + } + + /// @brief return and remove the item at head of the fifo + /// @param item item read + /// @return true if an item has been retrieved, false il no item available (buffer empty) + bool pop(T &item) { + if (is_empty()) + return false; + item = this->rb_[this->tail_]; + this->tail_ = (this->tail_ + 1) % SIZE; + this->count_--; + return true; + } + + /// @brief return the value of the item at fifo's head without removing it + /// @param item pointer to item to return + /// @return true if item has been retrieved, false il no item available (buffer empty) + bool peek(T &item) { + if (is_empty()) + return false; + item = this->rb_[this->tail_]; + return true; + } + + /// @brief test is the Ring Buffer is empty ? + /// @return true if empty + inline bool is_empty() { return (this->count_ == 0); } + + /// @brief test is the ring buffer is full ? + /// @return true if full + inline bool is_full() { return (this->count_ == SIZE); } + + /// @brief return the number of item in the ring buffer + /// @return the number of items + inline size_t count() { return this->count_; } + + /// @brief returns the number of free positions in the buffer + /// @return how many items can be added + inline size_t free() { return SIZE - this->count_; } + + /// @brief clear the buffer content + inline void clear() { this->head_ = this->tail_ = this->count_ = 0; } + + protected: + std::array rb_{0}; ///< the ring buffer + int tail_{0}; ///< position of the next element to read + int head_{0}; ///< position of the next element to write + size_t count_{0}; ///< count number of element in the buffer +}; + +class WeikaiComponent; +// class WeikaiComponentSPI; +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/// @brief WeikaiRegister objects acts as proxies to access remote register independently of the bus type. +/// @details This is an abstract interface class that provides many operations to access to registers while hiding +/// the actual implementation. This allow to accesses the registers in the Weikai component abstract class independently +/// of the actual bus (I2C, SPI). The derived classes will actually implements the specific bus operations dependant of +/// the bus used. +/// @n typical usage of WeikaiRegister: +/// @code +/// WeikaiRegister reg_X {&WeikaiComponent, ADDR_REGISTER_X, CHANNEL_NUM} // declaration +/// reg_X |= 0x01; // set bit 0 of the weikai register +/// reg_X &= ~0x01; // reset bit 0 of the weikai register +/// reg_X = 10; // Set the value of weikai register +/// uint val = reg_X; // get the value of weikai register +/// @endcode +class WeikaiRegister { + public: + /// @brief WeikaiRegister constructor. + /// @param comp our parent WeikaiComponent + /// @param reg address of the register + /// @param channel the channel of this register + WeikaiRegister(WeikaiComponent *const comp, uint8_t reg, uint8_t channel) + : comp_(comp), register_(reg), channel_(channel) {} + virtual ~WeikaiRegister() {} + + /// @brief overloads the = operator. This is used to set a value into the weikai register + /// @param value to be set + /// @return this object + WeikaiRegister &operator=(uint8_t value); + + /// @brief overloads the compound &= operator. This is often used to reset bits in the weikai register + /// @param value performs an & operation with value and store the result + /// @return this object + WeikaiRegister &operator&=(uint8_t value); + + /// @brief overloads the compound |= operator. This is often used to set bits in the weikai register + /// @param value performs an | operation with value and store the result + /// @return this object + WeikaiRegister &operator|=(uint8_t value); + + /// @brief cast operator that returns the content of the weikai register + operator uint8_t() const { return read_reg(); } + + /// @brief reads the register + /// @return the value read from the register + virtual uint8_t read_reg() const = 0; + + /// @brief writes the register + /// @param value to write in the register + virtual void write_reg(uint8_t value) = 0; + + /// @brief read an array of bytes from the receiver fifo + /// @param data pointer to data buffer + /// @param length number of bytes to read + virtual void read_fifo(uint8_t *data, size_t length) const = 0; + + /// @brief write an array of bytes to the transmitter fifo + /// @param data pointer to data buffer + /// @param length number of bytes to write + virtual void write_fifo(uint8_t *data, size_t length) = 0; + + WeikaiComponent *const comp_; ///< pointer to our parent (aggregation) + uint8_t register_; ///< address of the register + uint8_t channel_; ///< channel for this register +}; + +class WeikaiChannel; // forward declaration +//////////////////////////////////////////////////////////////////////////////////// +/// @brief The WeikaiComponent class stores the information global to the WeiKai component +/// and provides methods to set/access this information. It is also the container of +/// the WeikaiChannel children objects. This class is derived from esphome::Component +/// class. +//////////////////////////////////////////////////////////////////////////////////// +class WeikaiComponent : public Component { + public: + /// @brief virtual destructor + virtual ~WeikaiComponent() {} + + /// @brief store crystal frequency + /// @param crystal frequency + void set_crystal(uint32_t crystal) { this->crystal_ = crystal; } + + /// @brief store if the component is in test mode + /// @param test_mode 0=normal mode any other values mean component in test mode + void set_test_mode(int test_mode) { this->test_mode_ = test_mode; } + + /// @brief store the name for the component + /// @param name the name as defined by the python code generator + void set_name(std::string name) { this->name_ = std::move(name); } + + /// @brief Get the name of the component + /// @return the name + const char *get_name() { return this->name_.c_str(); } + + /// @brief override the Component loop() + void loop() override; + + bool page1() { return page1_; } + + /// @brief Factory method to create a Register object + /// @param reg address of the register + /// @param channel channel associated with this register + /// @return a reference to WeikaiRegister + virtual WeikaiRegister ®(uint8_t reg, uint8_t channel) = 0; + + protected: + friend class WeikaiChannel; + + /// @brief Get the priority of the component + /// @return the priority + /// @details The priority is set below setup_priority::BUS because we use + /// the spi/i2c busses (which has a priority of BUS) to communicate and the WeiKai + /// therefore it is seen by our client almost as if it was a bus. + float get_setup_priority() const override { return setup_priority::BUS - 0.1F; } + + friend class WeikaiGPIOPin; + /// Helper method to read the value of a pin. + bool read_pin_val_(uint8_t pin); + + /// Helper method to write the value of a pin. + void write_pin_val_(uint8_t pin, bool value); + + /// Helper method to set the pin mode of a pin. + void set_pin_direction_(uint8_t pin, gpio::Flags flags); + +#ifdef TEST_COMPONENT + /// @defgroup test_ Test component information + /// @brief Contains information about the auto-tests of the component + /// @{ + void test_gpio_input_(); + void test_gpio_output_(); + /// @} +#endif + + uint8_t pin_config_{0x00}; ///< pin config mask: 1 means OUTPUT, 0 means INPUT + uint8_t output_state_{0x00}; ///< output state: 1 means HIGH, 0 means LOW + uint8_t input_state_{0x00}; ///< input pin states: 1 means HIGH, 0 means LOW + uint32_t crystal_; ///< crystal value; + int test_mode_; ///< test mode value (0 -> no tests) + bool page1_{false}; ///< set to true when in "page1 mode" + std::vector children_{}; ///< the list of WeikaiChannel UART children + std::string name_; ///< name of entity +}; + +/////////////////////////////////////////////////////////////////////////////// +/// @brief Helper class to expose a WeiKai family IO pin as an internal GPIO pin. +/////////////////////////////////////////////////////////////////////////////// +class WeikaiGPIOPin : public GPIOPin { + public: + void set_parent(WeikaiComponent *parent) { this->parent_ = parent; } + void set_pin(uint8_t pin) { this->pin_ = pin; } + void set_inverted(bool inverted) { this->inverted_ = inverted; } + void set_flags(gpio::Flags flags) { this->flags_ = flags; } + + void setup() override; + std::string dump_summary() const override; + void pin_mode(gpio::Flags flags) override { this->parent_->set_pin_direction_(this->pin_, flags); } + bool digital_read() override { return this->parent_->read_pin_val_(this->pin_) != this->inverted_; } + void digital_write(bool value) override { this->parent_->write_pin_val_(this->pin_, value != this->inverted_); } + + protected: + WeikaiComponent *parent_{nullptr}; + uint8_t pin_; + bool inverted_; + gpio::Flags flags_; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/// @brief The WeikaiChannel class is used to implement all the virtual methods of the ESPHome +/// uart::UARTComponent virtual class. This class is common to the different members of the Weikai +/// components family and therefore avoid code duplication. +/////////////////////////////////////////////////////////////////////////////////////////////////// +class WeikaiChannel : public uart::UARTComponent { + public: + /// @brief We belongs to this WeikaiComponent + /// @param parent pointer to the component we belongs to + void set_parent(WeikaiComponent *parent) { + this->parent_ = parent; + this->parent_->children_.push_back(this); // add ourself to the list (vector) + } + + /// @brief Sets the channel number + /// @param channel number + void set_channel(uint8_t channel) { this->channel_ = channel; } + + /// @brief The name as generated by the Python code generator + /// @param name of the channel + void set_channel_name(std::string name) { this->name_ = std::move(name); } + + /// @brief Get the channel name + /// @return the name + const char *get_channel_name() { return this->name_.c_str(); } + + /// @brief Setup the channel + void virtual setup_channel(); + + /// @brief dump channel information + void virtual dump_channel(); + + /// @brief Factory method to create a WeikaiRegister proxy object + /// @param reg address of the register + /// @return a reference to WeikaiRegister + WeikaiRegister ®(uint8_t reg) { return this->parent_->reg(reg, channel_); } + + // + // we implements/overrides the virtual class from UARTComponent + // + + /// @brief Writes a specified number of bytes to a serial port + /// @param buffer pointer to the buffer + /// @param length number of bytes to write + /// @details This method sends 'length' characters from the buffer to the serial line. Unfortunately (unlike the + /// Arduino equivalent) this method does not return any flag and therefore it is not possible to know if any/all bytes + /// have been transmitted correctly. Another problem is that it is not possible to know ahead of time how many bytes + /// we can safely send as there is no tx_available() method provided! To avoid overrun when using the write method you + /// can use the flush() method to wait until the transmit fifo is empty. + /// @n Typical usage could be: + /// @code + /// // ... + /// uint8_t buffer[128]; + /// // ... + /// write_array(&buffer, length); + /// flush(); + /// // ... + /// @endcode + void write_array(const uint8_t *buffer, size_t length) override; + + /// @brief Reads a specified number of bytes from a serial port + /// @param buffer buffer to store the bytes + /// @param length number of bytes to read + /// @return true if succeed, false otherwise + /// @details Typical usage: + /// @code + /// // ... + /// auto length = available(); + /// uint8_t buffer[128]; + /// if (length > 0) { + /// auto status = read_array(&buffer, length) + /// // test status ... + /// } + /// @endcode + bool read_array(uint8_t *buffer, size_t length) override; + + /// @brief Reads the first byte in FIFO without removing it + /// @param buffer pointer to the byte + /// @return true if succeed reading one byte, false if no character available + /// @details This method returns the next byte from receiving buffer without removing it from the internal fifo. It + /// returns true if a character is available and has been read, false otherwise.\n + bool peek_byte(uint8_t *buffer) override; + + /// @brief Returns the number of bytes in the receive buffer + /// @return the number of bytes available in the receiver fifo + int available() override; + + /// @brief Flush the output fifo. + /// @details If we refer to Serial.flush() in Arduino it says: ** Waits for the transmission of outgoing serial data + /// to complete. (Prior to Arduino 1.0, this the method was removing any buffered incoming serial data.). ** Therefore + /// we wait until all bytes are gone with a timeout of 100 ms + void flush() override; + + protected: + friend class WeikaiComponent; + + /// @brief this cannot happen with external uart therefore we do nothing + void check_logger_conflict() override {} + + /// @brief reset the weikai internal FIFO + void reset_fifo_(); + + /// @brief set the line parameters + void set_line_param_(); + + /// @brief set the baud rate + void set_baudrate_(); + + /// @brief Returns the number of bytes in the receive fifo + /// @return the number of bytes in the fifo + size_t rx_in_fifo_(); + + /// @brief Returns the number of bytes in the transmit fifo + /// @return the number of bytes in the fifo + size_t tx_in_fifo_(); + + /// @brief test if transmit buffer is not empty in the status register (optimization) + /// @return true if not emptygroup test_ + bool tx_fifo_is_not_empty_(); + + /// @brief transfer bytes from the weikai internal FIFO to the buffer (if any) + /// @return number of bytes transferred + size_t xfer_fifo_to_buffer_(); + + /// @brief check if channel is alive + /// @return true if OK + bool virtual check_channel_down(); + +#ifdef TEST_COMPONENT + /// @ingroup test_ + /// @{ + + /// @brief Test the write_array() method + /// @param message to display + void uart_send_test_(char *message); + + /// @brief Test the read_array() method + /// @param message to display + /// @return true if success + bool uart_receive_test_(char *message); + /// @} +#endif + + /// @brief the buffer where we store temporarily the bytes received + WKRingBuffer receive_buffer_; + WeikaiComponent *parent_; ///< our WK2168component parent + uint8_t channel_; ///< our Channel number + uint8_t data_; ///< a one byte buffer for register read storage + std::string name_; ///< name of the entity +}; + +} // namespace weikai +} // namespace esphome diff --git a/esphome/components/weikai/wk_reg_def.h b/esphome/components/weikai/wk_reg_def.h new file mode 100644 index 0000000000..f3c90b196a --- /dev/null +++ b/esphome/components/weikai/wk_reg_def.h @@ -0,0 +1,304 @@ +/// @file wk_reg_def.h +/// @author DrCoolZic +/// @brief WeiKai component family - registers' definition +/// @date Last Modified: 2024/02/18 15:49:18 +#pragma once + +namespace esphome { +namespace weikai { + +//////////////////////////////////////////////////////////////////////////////////////// +/// Definition of the WeiKai registers +//////////////////////////////////////////////////////////////////////////////////////// + +/// @defgroup wk2168_gr_ WeiKai Global Registers +/// This section groups all **Global Registers**: these registers are global to the +/// the WeiKai chip (i.e. independent of the UART channel used) +/// @note only registers and parameters used have been fully documented +/// @{ + +/// @brief Global Control Register - 00 0000 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | M0 | M1 | RSV | C4EN | C3EN | C2EN | C1EN | name +/// ------------------------------------------------------------------------- +/// | R | R | R | R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_GENA = 0x00; +/// @brief Channel 4 enable clock (0: disable, 1: enable) +constexpr uint8_t GENA_C4EN = 1 << 3; +/// @brief Channel 3 enable clock (0: disable, 1: enable) +constexpr uint8_t GENA_C3EN = 1 << 2; +/// @brief Channel 2 enable clock (0: disable, 1: enable) +constexpr uint8_t GENA_C2EN = 1 << 1; +/// @brief Channel 1 enable clock (0: disable, 1: enable) +constexpr uint8_t GENA_C1EN = 1 << 0; + +/// @brief Global Reset Register - 00 0001 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | C4SLEEP| C3SLEEP| C2SLEEP| C1SLEEP| C4RST | C3RST | C2RST | C1RST | name +/// ------------------------------------------------------------------------- +/// | R | R | R | R | W1/R0 | W1/R0 | W1/R0 | W1/R0 | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_GRST = 0x01; +/// @brief Channel 4 soft reset (0: not reset, 1: reset) +constexpr uint8_t GRST_C4RST = 1 << 3; +/// @brief Channel 3 soft reset (0: not reset, 1: reset) +constexpr uint8_t GRST_C3RST = 1 << 2; +/// @brief Channel 2 soft reset (0: not reset, 1: reset) +constexpr uint8_t GRST_C2RST = 1 << 1; +/// @brief Channel 1 soft reset (0: not reset, 1: reset) +constexpr uint8_t GRST_C1RST = 1 << 0; + +/// @brief Global Master channel control register (not used) - 000010 +constexpr uint8_t WKREG_GMUT = 0x02; + +/// Global interrupt register (not used) - 01 0000 +constexpr uint8_t WKREG_GIER = 0x10; + +/// Global interrupt flag register (not used) 01 0001 +constexpr uint8_t WKREG_GIFR = 0x11; + +/// @brief Global GPIO direction register - 10 0001 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 | name +/// ------------------------------------------------------------------------- +/// | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_GPDIR = 0x21; + +/// @brief Global GPIO data register - 11 0001 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | PV7 | PV6 | PV5 | PV4 | PV3 | PV2 | PV1 | PV0 | name +/// ------------------------------------------------------------------------- +/// | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_GPDAT = 0x31; + +/// @} +/// @defgroup WeiKai_cr_ WeiKai Channel Registers +/// @brief Definition of the register linked to a particular channel +/// @details This topic groups all the **Channel Registers**: these registers are specific +/// to the a specific channel i.e. each channel has its own set of registers +/// @note only registers and parameters used have been documented +/// @{ + +/// @defgroup cr_p0 Channel registers when SPAGE=0 +/// @brief Definition of the register linked to a particular channel when SPAGE=0 +/// @details The channel registers are further splitted into two groups. +/// This first group is defined when the Global register WKREG_SPAGE is 0 +/// @{ + +/// @brief Global Page register c0/c1 0011 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | RSV | PAGE | name +/// ------------------------------------------------------------------------- +/// | R | R | R | R | R | R | R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_SPAGE = 0x03; + +/// @brief Serial Control Register - c0/c1 0100 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | RSV | SLPEN | TXEN | RXEN | name +/// ------------------------------------------------------------------------- +/// | R | R | R | R | R | R/W | R/W | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_SCR = 0x04; +/// @brief transmission control (0: enable, 1: disable) +constexpr uint8_t SCR_TXEN = 1 << 1; +/// @brief receiving control (0: enable, 1: disable) +constexpr uint8_t SCR_RXEN = 1 << 0; + +/// @brief Line Configuration Register - c0/c1 0101 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | RSV | BREAK | IREN | PAEN | PARITY | STPL | name +/// ------------------------------------------------------------------------- +/// | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_LCR = 0x05; +/// @brief Parity enable (0: no check, 1: check) +constexpr uint8_t LCR_PAEN = 1 << 3; +/// @brief Parity force 0 +constexpr uint8_t LCR_PAR_F0 = 0 << 1; +/// @brief Parity odd +constexpr uint8_t LCR_PAR_ODD = 1 << 1; +/// @brief Parity even +constexpr uint8_t LCR_PAR_EVEN = 2 << 1; +/// @brief Parity force 1 +constexpr uint8_t LCR_PAR_F1 = 3 << 1; +/// @brief Stop length (0: 1 bit, 1: 2 bits) +constexpr uint8_t LCR_STPL = 1 << 0; + +/// @brief FIFO Control Register - c0/c1 0110 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | TFTRIG | RFTRIG | TFEN | RFEN | TFRST | RFRST | name +/// ------------------------------------------------------------------------- +/// | W/R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_FCR = 0x06; +/// @brief Transmitter FIFO enable +constexpr uint8_t FCR_TFEN = 1 << 3; +/// @brief Receiver FIFO enable +constexpr uint8_t FCR_RFEN = 1 << 2; +/// @brief Transmitter FIFO reset +constexpr uint8_t FCR_TFRST = 1 << 1; +/// @brief Receiver FIFO reset +constexpr uint8_t FCR_RFRST = 1 << 0; + +/// @brief Serial Interrupt Enable Register (not used) - c0/c1 0111 +constexpr uint8_t WKREG_SIER = 0x07; + +/// @brief Serial Interrupt Flag Register (not used) - c0/c1 1000 +constexpr uint8_t WKREG_SIFR = 0x08; + +/// @brief Transmitter FIFO Count - c0/c1 1001 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +/// ------------------------------------------------------------------------- +/// | NUMBER OF DATA IN TRANSMITTER FIFO | +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_TFCNT = 0x09; + +/// @brief Receiver FIFO count - c0/c1 1010 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +/// ------------------------------------------------------------------------- +/// | NUMBER OF DATA IN RECEIVER FIFO | +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_RFCNT = 0x0A; + +/// @brief FIFO Status Register - c0/c1 1011 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | bit +/// ------------------------------------------------------------------------- +/// | RFOE | RFLB | RFFE | RFPE | RFDAT | TFDAT | TFFULL | TBUSY | name +/// ------------------------------------------------------------------------- +/// | R | W/R | W/R | W/R | W/R | W/R | W/R | W/R | type +/// ------------------------------------------------------------------------- +/// | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | reset +/// ------------------------------------------------------------------------- +/// @endcode +/// @warning The received buffer can hold 256 bytes. However, as the RFCNT reg +/// is 8 bits, if we have 256 byte in the register this is reported as 0 ! Therefore +/// RFCNT=0 can indicate that there are 0 **or** 256 bytes in the buffer. If we +/// have RFDAT = 1 and RFCNT = 0 it should be interpreted as 256 bytes in the FIFO. +/// @note Note that in case of overflow the RFOE goes to one **but** as soon as you read +/// the FSR this bit is cleared. Therefore Overflow can be read only once. +/// @n The same problem applies to the transmit buffer but here we have to check the +/// TFFULL flag. So if TFFULL is set and TFCNT is 0 this should be interpreted as 256 +constexpr uint8_t WKREG_FSR = 0x0B; +/// @brief Receiver FIFO Overflow Error (0: no OE, 1: OE) +constexpr uint8_t FSR_RFOE = 1 << 7; +/// @brief Receiver FIFO Line Break (0: no LB, 1: LB) +constexpr uint8_t FSR_RFLB = 1 << 6; +/// @brief Receiver FIFO Frame Error (0: no FE, 1: FE) +constexpr uint8_t FSR_RFFE = 1 << 5; +/// @brief Receiver Parity Error (0: no PE, 1: PE) +constexpr uint8_t FSR_RFPE = 1 << 4; +/// @brief Receiver FIFO count (0: empty, 1: not empty) +constexpr uint8_t FSR_RFDAT = 1 << 3; +/// @brief Transmitter FIFO count (0: empty, 1: not empty) +constexpr uint8_t FSR_TFDAT = 1 << 2; +/// @brief Transmitter FIFO full (0: not full, 1: full) +constexpr uint8_t FSR_TFFULL = 1 << 1; +/// @brief Transmitter busy (0 nothing to transmit, 1: transmitter busy sending) +constexpr uint8_t FSR_TBUSY = 1 << 0; + +/// @brief Line Status Register (not used - using FIFO) +constexpr uint8_t WKREG_LSR = 0x0C; + +/// @brief FIFO Data Register (not used - does not seems to work) +constexpr uint8_t WKREG_FDAT = 0x0D; + +/// @} +/// @defgroup cr_p1 Channel registers for SPAGE=1 +/// @brief Definition of the register linked to a particular channel when SPAGE=1 +/// @details The channel registers are further splitted into two groups. +/// This second group is defined when the Global register WKREG_SPAGE is 1 +/// @{ + +/// @brief Baud rate configuration register: high byte - c0/c1 0100 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +/// ------------------------------------------------------------------------- +/// | High byte of the baud rate | +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_BRH = 0x04; + +/// @brief Baud rate configuration register: low byte - c0/c1 0101 +/// @details @code +/// ------------------------------------------------------------------------- +/// | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +/// ------------------------------------------------------------------------- +/// | Low byte of the baud rate | +/// ------------------------------------------------------------------------- +/// @endcode +constexpr uint8_t WKREG_BRL = 0x05; + +/// @brief Baud rate configuration register decimal part - c0/c1 0110 +constexpr uint8_t WKREG_BRD = 0x06; + +/// @brief Receive FIFO Interrupt trigger configuration (not used) - c0/c1 0111 +constexpr uint8_t WKREG_RFI = 0x07; + +/// @brief Transmit FIFO interrupt trigger configuration (not used) - c0/c1 1000 +constexpr uint8_t WKREG_TFI = 0x08; + +/// @} +/// @} +} // namespace weikai +} // namespace esphome diff --git a/esphome/components/weikai_i2c/__init__.py b/esphome/components/weikai_i2c/__init__.py new file mode 100644 index 0000000000..2c6a421a0a --- /dev/null +++ b/esphome/components/weikai_i2c/__init__.py @@ -0,0 +1 @@ +CODEOWNERS = ["@DrCoolZic"] diff --git a/esphome/components/weikai_i2c/weikai_i2c.cpp b/esphome/components/weikai_i2c/weikai_i2c.cpp new file mode 100644 index 0000000000..9d0c9446ec --- /dev/null +++ b/esphome/components/weikai_i2c/weikai_i2c.cpp @@ -0,0 +1,177 @@ +/// @file weikai_i2c.cpp +/// @brief WeiKai component family - classes implementation +/// @date Last Modified: 2024/04/06 14:43:31 +/// @details The classes declared in this file can be used by the Weikai family + +#include "weikai_i2c.h" + +namespace esphome { +namespace weikai_i2c { +static const char *const TAG = "weikai_i2c"; + +/// @brief Display a buffer in hexadecimal format (32 hex values / line). +void print_buffer(const uint8_t *data, size_t length) { + char hex_buffer[100]; + hex_buffer[(3 * 32) + 1] = 0; + for (size_t i = 0; i < length; i++) { + snprintf(&hex_buffer[3 * (i % 32)], sizeof(hex_buffer), "%02X ", data[i]); + if (i % 32 == 31) { + ESP_LOGVV(TAG, " %s", hex_buffer); + } + } + if (length % 32) { + // null terminate if incomplete line + hex_buffer[3 * (length % 32) + 2] = 0; + ESP_LOGVV(TAG, " %s", hex_buffer); + } +} + +static const char *const REG_TO_STR_P0[16] = {"GENA", "GRST", "GMUT", "SPAGE", "SCR", "LCR", "FCR", "SIER", + "SIFR", "TFCNT", "RFCNT", "FSR", "LSR", "FDAT", "FWCR", "RS485"}; +static const char *const REG_TO_STR_P1[16] = {"GENA", "GRST", "GMUT", "SPAGE", "BAUD1", "BAUD0", "PRES", "RFTL", + "TFTL", "FWTH", "FWTL", "XON1", "XOFF1", "SADR", "SAEN", "RTSDLY"}; +using namespace weikai; +// method to print a register value as text: used in the log messages ... +const char *reg_to_str(int reg, bool page1) { + if (reg == WKREG_GPDAT) { + return "GPDAT"; + } else if (reg == WKREG_GPDIR) { + return "GPDIR"; + } else { + return page1 ? REG_TO_STR_P1[reg & 0x0F] : REG_TO_STR_P0[reg & 0x0F]; + } +} +enum RegType { REG = 0, FIFO = 1 }; ///< Register or FIFO + +/// @brief Computes the I²C bus's address used to access the component +/// @param base_address the base address of the component - set by the A1 A0 pins +/// @param channel (0-3) the UART channel +/// @param fifo (0-1) 0 = access to internal register, 1 = direct access to fifo +/// @return the i2c address to use +inline uint8_t i2c_address(uint8_t base_address, uint8_t channel, RegType fifo) { + // the address of the device is: + // +----+----+----+----+----+----+----+----+ + // | 0 | A1 | A0 | 1 | 0 | C1 | C0 | F | + // +----+----+----+----+----+----+----+----+ + // where: + // - A1,A0 is the address read from A1,A0 switch + // - C1,C0 is the channel number (in practice only 00 or 01) + // - F is: 0 when accessing register, one when accessing FIFO + uint8_t const addr = base_address | channel << 1 | fifo << 0; + return addr; +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiRegisterI2C methods +/////////////////////////////////////////////////////////////////////////////// +uint8_t WeikaiRegisterI2C::read_reg() const { + uint8_t value = 0x00; + WeikaiComponentI2C *comp_i2c = static_cast(this->comp_); + uint8_t address = i2c_address(comp_i2c->base_address_, this->channel_, REG); + comp_i2c->set_i2c_address(address); + auto error = comp_i2c->read_register(this->register_, &value, 1); + if (error == i2c::NO_ERROR) { + this->comp_->status_clear_warning(); + ESP_LOGVV(TAG, "WeikaiRegisterI2C::read_reg() @%02X reg=%s ch=%u I2C_code:%d, buf=%02X", address, + reg_to_str(this->register_, comp_i2c->page1()), this->channel_, (int) error, value); + } else { // error + this->comp_->status_set_warning(); + ESP_LOGE(TAG, "WeikaiRegisterI2C::read_reg() @%02X reg=%s ch=%u I2C_code:%d, buf=%02X", address, + reg_to_str(this->register_, comp_i2c->page1()), this->channel_, (int) error, value); + } + return value; +} + +void WeikaiRegisterI2C::read_fifo(uint8_t *data, size_t length) const { + WeikaiComponentI2C *comp_i2c = static_cast(this->comp_); + uint8_t address = i2c_address(comp_i2c->base_address_, this->channel_, FIFO); + comp_i2c->set_i2c_address(address); + auto error = comp_i2c->read(data, length); + if (error == i2c::NO_ERROR) { + this->comp_->status_clear_warning(); +#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE + ESP_LOGVV(TAG, "WeikaiRegisterI2C::read_fifo() @%02X ch=%d I2C_code:%d len=%d buffer", address, this->channel_, + (int) error, length); + print_buffer(data, length); +#endif + } else { // error + this->comp_->status_set_warning(); + ESP_LOGE(TAG, "WeikaiRegisterI2C::read_fifo() @%02X reg=N/A ch=%d I2C_code:%d len=%d buf=%02X...", address, + this->channel_, (int) error, length, data[0]); + } +} + +void WeikaiRegisterI2C::write_reg(uint8_t value) { + WeikaiComponentI2C *comp_i2c = static_cast(this->comp_); + uint8_t address = i2c_address(comp_i2c->base_address_, this->channel_, REG); // update the i2c bus + comp_i2c->set_i2c_address(address); + auto error = comp_i2c->write_register(this->register_, &value, 1); + if (error == i2c::NO_ERROR) { + this->comp_->status_clear_warning(); + ESP_LOGVV(TAG, "WK2168Reg::write_reg() @%02X reg=%s ch=%d I2C_code:%d buf=%02X", address, + reg_to_str(this->register_, comp_i2c->page1()), this->channel_, (int) error, value); + } else { // error + this->comp_->status_set_warning(); + ESP_LOGE(TAG, "WK2168Reg::write_reg() @%02X reg=%s ch=%d I2C_code:%d buf=%d", address, + reg_to_str(this->register_, comp_i2c->page1()), this->channel_, (int) error, value); + } +} + +void WeikaiRegisterI2C::write_fifo(uint8_t *data, size_t length) { + WeikaiComponentI2C *comp_i2c = static_cast(this->comp_); + uint8_t address = i2c_address(comp_i2c->base_address_, this->channel_, FIFO); // set fifo flag + comp_i2c->set_i2c_address(address); + auto error = comp_i2c->write(data, length); + if (error == i2c::NO_ERROR) { + this->comp_->status_clear_warning(); +#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE + ESP_LOGVV(TAG, "WK2168Reg::write_fifo() @%02X ch=%d I2C_code:%d len=%d buffer", address, this->channel_, + (int) error, length); + print_buffer(data, length); +#endif + } else { // error + this->comp_->status_set_warning(); + ESP_LOGE(TAG, "WK2168Reg::write_fifo() @%02X reg=N/A, ch=%d I2C_code:%d len=%d, buf=%02X...", address, + this->channel_, (int) error, length, data[0]); + } +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiComponentI2C methods +/////////////////////////////////////////////////////////////////////////////// +void WeikaiComponentI2C::setup() { + // before any manipulation we store the address to base_address_ for future use + this->base_address_ = this->address_; + ESP_LOGCONFIG(TAG, "Setting up wk2168_i2c: %s with %d UARTs at @%02X ...", this->get_name(), this->children_.size(), + this->base_address_); + + // enable all channels + this->reg(WKREG_GENA, 0) = GENA_C1EN | GENA_C2EN | GENA_C3EN | GENA_C4EN; + // reset all channels + this->reg(WKREG_GRST, 0) = GRST_C1RST | GRST_C2RST | GRST_C3RST | GRST_C4RST; + // initialize the spage register to page 0 + this->reg(WKREG_SPAGE, 0) = 0; + this->page1_ = false; + + // we setup our children channels + for (auto *child : this->children_) { + child->setup_channel(); + } +} + +void WeikaiComponentI2C::dump_config() { + ESP_LOGCONFIG(TAG, "Initialization of %s with %d UARTs completed", this->get_name(), this->children_.size()); + ESP_LOGCONFIG(TAG, " Crystal: %" PRIu32, this->crystal_); + if (test_mode_) + ESP_LOGCONFIG(TAG, " Test mode: %d", test_mode_); + ESP_LOGCONFIG(TAG, " Transfer buffer size: %d", XFER_MAX_SIZE); + this->address_ = this->base_address_; // we restore the base_address before display (less confusing) + LOG_I2C_DEVICE(this); + + for (auto *child : this->children_) { + child->dump_channel(); + } +} + +} // namespace weikai_i2c +} // namespace esphome diff --git a/esphome/components/weikai_i2c/weikai_i2c.h b/esphome/components/weikai_i2c/weikai_i2c.h new file mode 100644 index 0000000000..0da9ed9cde --- /dev/null +++ b/esphome/components/weikai_i2c/weikai_i2c.h @@ -0,0 +1,61 @@ +/// @file weikai_i2c.h +/// @author DrCoolZic +/// @brief WeiKai component family - classes declaration +/// @date Last Modified: 2024/03/01 13:31:57 +/// @details The classes declared in this file can be used by the Weikai family +/// wk2132_i2c, wk2168_i2c, wk2204_i2c, wk2212_i2c + +#pragma once +#include +#include +#include "esphome/core/component.h" +#include "esphome/components/uart/uart.h" +#include "esphome/components/i2c/i2c.h" +#include "esphome/components/weikai/weikai.h" + +namespace esphome { +namespace weikai_i2c { + +class WeikaiComponentI2C; + +// using namespace weikai; +//////////////////////////////////////////////////////////////////////////////////// +/// @brief WeikaiRegisterI2C objects acts as proxies to access remote register through an I2C Bus +//////////////////////////////////////////////////////////////////////////////////// +class WeikaiRegisterI2C : public weikai::WeikaiRegister { + public: + uint8_t read_reg() const override; + void write_reg(uint8_t value) override; + void read_fifo(uint8_t *data, size_t length) const override; + void write_fifo(uint8_t *data, size_t length) override; + + protected: + friend WeikaiComponentI2C; + WeikaiRegisterI2C(weikai::WeikaiComponent *const comp, uint8_t reg, uint8_t channel) + : weikai::WeikaiRegister(comp, reg, channel) {} +}; + +//////////////////////////////////////////////////////////////////////////////////// +/// @brief The WeikaiComponentI2C class stores the information to the WeiKai component +/// connected through an I2C bus. +//////////////////////////////////////////////////////////////////////////////////// +class WeikaiComponentI2C : public weikai::WeikaiComponent, public i2c::I2CDevice { + public: + weikai::WeikaiRegister ®(uint8_t reg, uint8_t channel) override { + reg_i2c_.register_ = reg; + reg_i2c_.channel_ = channel; + return reg_i2c_; + } + + // + // override Component methods + // + void setup() override; + void dump_config() override; + + uint8_t base_address_; ///< base address of I2C device + WeikaiRegisterI2C reg_i2c_{this, 0, 0}; ///< init to this component +}; + +} // namespace weikai_i2c +} // namespace esphome diff --git a/esphome/components/weikai_spi/__init__.py b/esphome/components/weikai_spi/__init__.py new file mode 100644 index 0000000000..2c6a421a0a --- /dev/null +++ b/esphome/components/weikai_spi/__init__.py @@ -0,0 +1 @@ +CODEOWNERS = ["@DrCoolZic"] diff --git a/esphome/components/weikai_spi/weikai_spi.cpp b/esphome/components/weikai_spi/weikai_spi.cpp new file mode 100644 index 0000000000..22c63bbd2d --- /dev/null +++ b/esphome/components/weikai_spi/weikai_spi.cpp @@ -0,0 +1,189 @@ +/// @file weikai_spi.cpp +/// @brief WeiKai component family - classes implementation +/// @date Last Modified: 2024/04/06 14:46:09 +/// @details The classes declared in this file can be used by the Weikai family + +#include "weikai_spi.h" + +namespace esphome { +namespace weikai_spi { +using namespace weikai; +static const char *const TAG = "weikai_spi"; + +/// @brief convert an int to binary representation as C++ std::string +/// @param val integer to convert +/// @return a std::string +inline std::string i2s(uint8_t val) { return std::bitset<8>(val).to_string(); } +/// Convert std::string to C string +#define I2S2CS(val) (i2s(val).c_str()) + +/// @brief measure the time elapsed between two calls +/// @param last_time time of the previous call +/// @return the elapsed time in microseconds +uint32_t elapsed_ms(uint32_t &last_time) { + uint32_t e = millis() - last_time; + last_time = millis(); + return e; +}; + +/// @brief Converts the parity enum value to a C string +/// @param parity enum +/// @return the string +const char *p2s(uart::UARTParityOptions parity) { + using namespace uart; + switch (parity) { + case UART_CONFIG_PARITY_NONE: + return "NONE"; + case UART_CONFIG_PARITY_EVEN: + return "EVEN"; + case UART_CONFIG_PARITY_ODD: + return "ODD"; + default: + return "UNKNOWN"; + } +} + +/// @brief Display a buffer in hexadecimal format (32 hex values / line). +void print_buffer(const uint8_t *data, size_t length) { + char hex_buffer[100]; + hex_buffer[(3 * 32) + 1] = 0; + for (size_t i = 0; i < length; i++) { + snprintf(&hex_buffer[3 * (i % 32)], sizeof(hex_buffer), "%02X ", data[i]); + if (i % 32 == 31) { + ESP_LOGVV(TAG, " %s", hex_buffer); + } + } + if (length % 32) { + // null terminate if incomplete line + hex_buffer[3 * (length % 32) + 2] = 0; + ESP_LOGVV(TAG, " %s", hex_buffer); + } +} + +static const char *const REG_TO_STR_P0[16] = {"GENA", "GRST", "GMUT", "SPAGE", "SCR", "LCR", "FCR", "SIER", + "SIFR", "TFCNT", "RFCNT", "FSR", "LSR", "FDAT", "FWCR", "RS485"}; +static const char *const REG_TO_STR_P1[16] = {"GENA", "GRST", "GMUT", "SPAGE", "BAUD1", "BAUD0", "PRES", "RFTL", + "TFTL", "FWTH", "FWTL", "XON1", "XOFF1", "SADR", "SAEN", "RTSDLY"}; + +// method to print a register value as text: used in the log messages ... +const char *reg_to_str(int reg, bool page1) { + if (reg == WKREG_GPDAT) { + return "GPDAT"; + } else if (reg == WKREG_GPDIR) { + return "GPDIR"; + } else { + return page1 ? REG_TO_STR_P1[reg & 0x0F] : REG_TO_STR_P0[reg & 0x0F]; + } +} + +enum RegType { REG = 0, FIFO = 1 }; ///< Register or FIFO +enum CmdType { WRITE_CMD = 0, READ_CMD = 1 }; ///< Read or Write transfer + +/// @brief Computes the SPI command byte +/// @param transfer_type read or write command +/// @param reg (0-15) the address of the register +/// @param channel (0-3) the UART channel +/// @param fifo (0-1) 0 = access to internal register, 1 = direct access to fifo +/// @return the spi command byte +/// @details +/// +------+------+------+------+------+------+------+------+ +/// | FIFO | R/W | C1-C0 | A3-A0 | +/// +------+------+-------------+---------------------------+ +/// FIFO: 0 = register, 1 = FIFO +/// R/W: 0 = write, 1 = read +/// C1-C0: Channel (0-1) +/// A3-A0: Address (0-F) +inline static uint8_t cmd_byte(RegType fifo, CmdType transfer_type, uint8_t channel, uint8_t reg) { + return (fifo << 7 | transfer_type << 6 | channel << 4 | reg << 0); +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiRegisterSPI methods +/////////////////////////////////////////////////////////////////////////////// +uint8_t WeikaiRegisterSPI::read_reg() const { + auto *spi_comp = static_cast(this->comp_); + uint8_t cmd = cmd_byte(REG, READ_CMD, this->channel_, this->register_); + spi_comp->enable(); + spi_comp->write_byte(cmd); + uint8_t val = spi_comp->read_byte(); + spi_comp->disable(); + ESP_LOGVV(TAG, "WeikaiRegisterSPI::read_reg() cmd=%s(%02X) reg=%s ch=%d buf=%02X", I2S2CS(cmd), cmd, + reg_to_str(this->register_, this->comp_->page1()), this->channel_, val); + return val; +} + +void WeikaiRegisterSPI::read_fifo(uint8_t *data, size_t length) const { + auto *spi_comp = static_cast(this->comp_); + uint8_t cmd = cmd_byte(FIFO, READ_CMD, this->channel_, this->register_); + spi_comp->enable(); + spi_comp->write_byte(cmd); + spi_comp->read_array(data, length); + spi_comp->disable(); +#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE + ESP_LOGVV(TAG, "WeikaiRegisterSPI::read_fifo() cmd=%s(%02X) ch=%d len=%d buffer", I2S2CS(cmd), cmd, this->channel_, + length); + print_buffer(data, length); +#endif +} + +void WeikaiRegisterSPI::write_reg(uint8_t value) { + auto *spi_comp = static_cast(this->comp_); + uint8_t buf[2]{cmd_byte(REG, WRITE_CMD, this->channel_, this->register_), value}; + spi_comp->enable(); + spi_comp->write_array(buf, 2); + spi_comp->disable(); + ESP_LOGVV(TAG, "WeikaiRegisterSPI::write_reg() cmd=%s(%02X) reg=%s ch=%d buf=%02X", I2S2CS(buf[0]), buf[0], + reg_to_str(this->register_, this->comp_->page1()), this->channel_, buf[1]); +} + +void WeikaiRegisterSPI::write_fifo(uint8_t *data, size_t length) { + auto *spi_comp = static_cast(this->comp_); + uint8_t cmd = cmd_byte(FIFO, WRITE_CMD, this->channel_, this->register_); + spi_comp->enable(); + spi_comp->write_byte(cmd); + spi_comp->write_array(data, length); + spi_comp->disable(); + +#ifdef ESPHOME_LOG_HAS_VERY_VERBOSE + ESP_LOGVV(TAG, "WeikaiRegisterSPI::write_fifo() cmd=%s(%02X) ch=%d len=%d buffer", I2S2CS(cmd), cmd, this->channel_, + length); + print_buffer(data, length); +#endif +} + +/////////////////////////////////////////////////////////////////////////////// +// The WeikaiComponentSPI methods +/////////////////////////////////////////////////////////////////////////////// +void WeikaiComponentSPI::setup() { + using namespace weikai; + ESP_LOGCONFIG(TAG, "Setting up wk2168_spi: %s with %d UARTs...", this->get_name(), this->children_.size()); + this->spi_setup(); + // enable all channels + this->reg(WKREG_GENA, 0) = GENA_C1EN | GENA_C2EN | GENA_C3EN | GENA_C4EN; + // reset all channels + this->reg(WKREG_GRST, 0) = GRST_C1RST | GRST_C2RST | GRST_C3RST | GRST_C4RST; + // initialize the spage register to page 0 + this->reg(WKREG_SPAGE, 0) = 0; + this->page1_ = false; + + // we setup our children channels + for (auto *child : this->children_) { + child->setup_channel(); + } +} + +void WeikaiComponentSPI::dump_config() { + ESP_LOGCONFIG(TAG, "Initialization of %s with %d UARTs completed", this->get_name(), this->children_.size()); + ESP_LOGCONFIG(TAG, " Crystal: %" PRIu32 "", this->crystal_); + if (test_mode_) + ESP_LOGCONFIG(TAG, " Test mode: %d", test_mode_); + ESP_LOGCONFIG(TAG, " Transfer buffer size: %d", XFER_MAX_SIZE); + LOG_PIN(" CS Pin: ", this->cs_); + + for (auto *child : this->children_) { + child->dump_channel(); + } +} + +} // namespace weikai_spi +} // namespace esphome diff --git a/esphome/components/weikai_spi/weikai_spi.h b/esphome/components/weikai_spi/weikai_spi.h new file mode 100644 index 0000000000..dd0dc8d495 --- /dev/null +++ b/esphome/components/weikai_spi/weikai_spi.h @@ -0,0 +1,54 @@ +/// @file weikai.h +/// @author DrCoolZic +/// @brief WeiKai component family - classes declaration +/// @date Last Modified: 2024/02/29 17:20:32 +/// @details The classes declared in this file can be used by the Weikai family +/// wk2124_spi, wk2132_spi, wk2168_spi, wk2204_spi, wk2212_spi, + +#pragma once +#include +#include +#include "esphome/core/component.h" +#include "esphome/components/uart/uart.h" +#include "esphome/components/spi/spi.h" +#include "esphome/components/weikai/weikai.h" + +namespace esphome { +namespace weikai_spi { +//////////////////////////////////////////////////////////////////////////////////// +/// @brief WeikaiRegisterSPI objects acts as proxies to access remote register through an SPI Bus +//////////////////////////////////////////////////////////////////////////////////// +class WeikaiRegisterSPI : public weikai::WeikaiRegister { + public: + WeikaiRegisterSPI(weikai::WeikaiComponent *const comp, uint8_t reg, uint8_t channel) + : weikai::WeikaiRegister(comp, reg, channel) {} + + uint8_t read_reg() const override; + void write_reg(uint8_t value) override; + void read_fifo(uint8_t *data, size_t length) const override; + void write_fifo(uint8_t *data, size_t length) override; +}; + +//////////////////////////////////////////////////////////////////////////////////// +/// @brief The WeikaiComponentSPI class stores the information to the WeiKai component +/// connected through an SPI bus. +//////////////////////////////////////////////////////////////////////////////////// +class WeikaiComponentSPI : public weikai::WeikaiComponent, + public spi::SPIDevice { + public: + weikai::WeikaiRegister ®(uint8_t reg, uint8_t channel) override { + reg_spi_.register_ = reg; + reg_spi_.channel_ = channel; + return reg_spi_; + } + + void setup() override; + void dump_config() override; + + protected: + WeikaiRegisterSPI reg_spi_{this, 0, 0}; ///< init to this component +}; + +} // namespace weikai_spi +} // namespace esphome diff --git a/esphome/components/wk2132_i2c/__init__.py b/esphome/components/wk2132_i2c/__init__.py new file mode 100644 index 0000000000..912ab04236 --- /dev/null +++ b/esphome/components/wk2132_i2c/__init__.py @@ -0,0 +1,30 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import i2c, weikai +from esphome.const import CONF_ID + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["i2c"] +AUTO_LOAD = ["weikai", "weikai_i2c"] +MULTI_CONF = True + +weikai_i2c_ns = cg.esphome_ns.namespace("weikai_i2c") +WeikaiComponentI2C = weikai_i2c_ns.class_( + "WeikaiComponentI2C", weikai.WeikaiComponent, i2c.I2CDevice +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentI2C), + } + ).extend(i2c.i2c_device_schema(0x2C)), + weikai.check_channel_max_2, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/wk2132_i2c/wk2132_i2c.cpp b/esphome/components/wk2132_i2c/wk2132_i2c.cpp new file mode 100644 index 0000000000..aaefae6f97 --- /dev/null +++ b/esphome/components/wk2132_i2c/wk2132_i2c.cpp @@ -0,0 +1,4 @@ +/* compiling with esp-idf framework requires a .cpp file for some reason ? */ +namespace esphome { +namespace wk2132_i2c {} +} // namespace esphome diff --git a/esphome/components/wk2132_spi/__init__.py b/esphome/components/wk2132_spi/__init__.py new file mode 100644 index 0000000000..02c5fd9604 --- /dev/null +++ b/esphome/components/wk2132_spi/__init__.py @@ -0,0 +1,31 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import spi, weikai + +from esphome.const import CONF_ID + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["spi"] +AUTO_LOAD = ["weikai", "weikai_spi"] +MULTI_CONF = True + +weikai_spi_ns = cg.esphome_ns.namespace("weikai_spi") +WeikaiComponentSPI = weikai_spi_ns.class_( + "WeikaiComponentSPI", weikai.WeikaiComponent, spi.SPIDevice +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentSPI), + } + ).extend(spi.spi_device_schema()), + weikai.check_channel_max_2, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await spi.register_spi_device(var, config) diff --git a/esphome/components/wk2168_i2c/__init__.py b/esphome/components/wk2168_i2c/__init__.py new file mode 100644 index 0000000000..93a8161e8e --- /dev/null +++ b/esphome/components/wk2168_i2c/__init__.py @@ -0,0 +1,64 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import pins +from esphome.components import i2c, weikai +from esphome.const import ( + CONF_ID, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, +) + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["i2c"] +AUTO_LOAD = ["weikai", "weikai_i2c"] +MULTI_CONF = True +CONF_WK2168_I2C = "wk2168_i2c" + +weikai_ns = cg.esphome_ns.namespace("weikai") +weikai_i2c_ns = cg.esphome_ns.namespace("weikai_i2c") +WeikaiComponentI2C = weikai_i2c_ns.class_( + "WeikaiComponentI2C", weikai.WeikaiComponent, i2c.I2CDevice +) +WeikaiGPIOPin = weikai_ns.class_( + "WeikaiGPIOPin", cg.GPIOPin, cg.Parented.template(WeikaiComponentI2C) +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentI2C), + } + ).extend(i2c.i2c_device_schema(0x2C)), + weikai.check_channel_max_4, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await i2c.register_i2c_device(var, config) + + +WK2168_PIN_SCHEMA = cv.All( + weikai.WEIKAI_PIN_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiGPIOPin), + cv.Required(CONF_WK2168_I2C): cv.use_id(WeikaiComponentI2C), + } + ), + weikai.validate_pin_mode, +) + + +@pins.PIN_SCHEMA_REGISTRY.register(CONF_WK2168_I2C, WK2168_PIN_SCHEMA) +async def sc16is75x_pin_to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + parent = await cg.get_variable(config[CONF_WK2168_I2C]) + cg.add(var.set_parent(parent)) + num = config[CONF_NUMBER] + cg.add(var.set_pin(num)) + cg.add(var.set_inverted(config[CONF_INVERTED])) + cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE]))) + return var diff --git a/esphome/components/wk2168_spi/__init__.py b/esphome/components/wk2168_spi/__init__.py new file mode 100644 index 0000000000..8861a6738c --- /dev/null +++ b/esphome/components/wk2168_spi/__init__.py @@ -0,0 +1,62 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import pins +from esphome.components import spi, weikai +from esphome.const import ( + CONF_ID, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, +) + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["spi"] +AUTO_LOAD = ["weikai", "weikai_spi"] +MULTI_CONF = True +CONF_WK2168_SPI = "wk2168_spi" + +weikai_spi_ns = cg.esphome_ns.namespace("weikai_spi") +weikai_ns = cg.esphome_ns.namespace("weikai") +WeikaiComponentSPI = weikai_spi_ns.class_( + "WeikaiComponentSPI", weikai.WeikaiComponent, spi.SPIDevice +) +WeikaiGPIOPin = weikai_ns.class_( + "WeikaiGPIOPin", cg.GPIOPin, cg.Parented.template(WeikaiComponentSPI) +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + {cv.GenerateID(): cv.declare_id(WeikaiComponentSPI)} + ).extend(spi.spi_device_schema()), + weikai.check_channel_max_4, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await spi.register_spi_device(var, config) + + +WK2168_PIN_SCHEMA = cv.All( + weikai.WEIKAI_PIN_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiGPIOPin), + cv.Required(CONF_WK2168_SPI): cv.use_id(WeikaiComponentSPI), + }, + ), + weikai.validate_pin_mode, +) + + +@pins.PIN_SCHEMA_REGISTRY.register(CONF_WK2168_SPI, WK2168_PIN_SCHEMA) +async def sc16is75x_pin_to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + parent = await cg.get_variable(config[CONF_WK2168_SPI]) + cg.add(var.set_parent(parent)) + num = config[CONF_NUMBER] + cg.add(var.set_pin(num)) + cg.add(var.set_inverted(config[CONF_INVERTED])) + cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE]))) + return var diff --git a/esphome/components/wk2204_i2c/__init__.py b/esphome/components/wk2204_i2c/__init__.py new file mode 100644 index 0000000000..98eca56c4d --- /dev/null +++ b/esphome/components/wk2204_i2c/__init__.py @@ -0,0 +1,30 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import i2c, weikai +from esphome.const import CONF_ID + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["i2c"] +AUTO_LOAD = ["weikai", "weikai_i2c"] +MULTI_CONF = True + +weikai_i2c_ns = cg.esphome_ns.namespace("weikai_i2c") +WeikaiComponentI2C = weikai_i2c_ns.class_( + "WeikaiComponentI2C", weikai.WeikaiComponent, i2c.I2CDevice +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentI2C), + } + ).extend(i2c.i2c_device_schema(0x2C)), + weikai.check_channel_max_4, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/wk2204_spi/__init__.py b/esphome/components/wk2204_spi/__init__.py new file mode 100644 index 0000000000..447805375d --- /dev/null +++ b/esphome/components/wk2204_spi/__init__.py @@ -0,0 +1,30 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import spi, weikai +from esphome.const import CONF_ID + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["spi"] +AUTO_LOAD = ["weikai", "weikai_spi"] +MULTI_CONF = True + +weikai_spi_ns = cg.esphome_ns.namespace("weikai_spi") +WeikaiComponentSPI = weikai_spi_ns.class_( + "WeikaiComponentSPI", weikai.WeikaiComponent, spi.SPIDevice +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentSPI), + } + ).extend(spi.spi_device_schema()), + weikai.check_channel_max_4, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await spi.register_spi_device(var, config) diff --git a/esphome/components/wk2212_i2c/__init__.py b/esphome/components/wk2212_i2c/__init__.py new file mode 100644 index 0000000000..fd4d717b31 --- /dev/null +++ b/esphome/components/wk2212_i2c/__init__.py @@ -0,0 +1,64 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import pins +from esphome.components import i2c, weikai +from esphome.const import ( + CONF_ID, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, +) + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["i2c"] +AUTO_LOAD = ["weikai", "weikai_i2c"] +MULTI_CONF = True +CONF_WK2212_I2C = "wk2212_i2c" + +weikai_ns = cg.esphome_ns.namespace("weikai") +weikai_i2c_ns = cg.esphome_ns.namespace("weikai_i2c") +WeikaiComponentI2C = weikai_i2c_ns.class_( + "WeikaiComponentI2C", weikai.WeikaiComponent, i2c.I2CDevice +) +WeikaiGPIOPin = weikai_ns.class_( + "WeikaiGPIOPin", cg.GPIOPin, cg.Parented.template(WeikaiComponentI2C) +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiComponentI2C), + } + ).extend(i2c.i2c_device_schema(0x2C)), + weikai.check_channel_max_2, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await i2c.register_i2c_device(var, config) + + +WK2212_PIN_SCHEMA = cv.All( + weikai.WEIKAI_PIN_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiGPIOPin), + cv.Required(CONF_WK2212_I2C): cv.use_id(WeikaiComponentI2C), + } + ), + weikai.validate_pin_mode, +) + + +@pins.PIN_SCHEMA_REGISTRY.register(CONF_WK2212_I2C, WK2212_PIN_SCHEMA) +async def sc16is75x_pin_to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + parent = await cg.get_variable(config[CONF_WK2212_I2C]) + cg.add(var.set_parent(parent)) + num = config[CONF_NUMBER] + cg.add(var.set_pin(num)) + cg.add(var.set_inverted(config[CONF_INVERTED])) + cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE]))) + return var diff --git a/esphome/components/wk2212_spi/__init__.py b/esphome/components/wk2212_spi/__init__.py new file mode 100644 index 0000000000..bfeca87c22 --- /dev/null +++ b/esphome/components/wk2212_spi/__init__.py @@ -0,0 +1,62 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import pins +from esphome.components import spi, weikai +from esphome.const import ( + CONF_ID, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, +) + +CODEOWNERS = ["@DrCoolZic"] +DEPENDENCIES = ["spi"] +AUTO_LOAD = ["weikai", "weikai_spi"] +MULTI_CONF = True +CONF_WK2212_SPI = "wk2212_spi" + +weikai_ns = cg.esphome_ns.namespace("weikai") +weikai_spi_ns = cg.esphome_ns.namespace("weikai_spi") +WeikaiComponentSPI = weikai_spi_ns.class_( + "WeikaiComponentSPI", weikai.WeikaiComponent, spi.SPIDevice +) +WeikaiGPIOPin = weikai_ns.class_( + "WeikaiGPIOPin", cg.GPIOPin, cg.Parented.template(WeikaiComponentSPI) +) + +CONFIG_SCHEMA = cv.All( + weikai.WKBASE_SCHEMA.extend( + {cv.GenerateID(): cv.declare_id(WeikaiComponentSPI)} + ).extend(spi.spi_device_schema()), + weikai.check_channel_max_2, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + cg.add(var.set_name(str(config[CONF_ID]))) + await weikai.register_weikai(var, config) + await spi.register_spi_device(var, config) + + +WK2212_PIN_SCHEMA = cv.All( + weikai.WEIKAI_PIN_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(WeikaiGPIOPin), + cv.Required(CONF_WK2212_SPI): cv.use_id(WeikaiComponentSPI), + }, + ), + weikai.validate_pin_mode, +) + + +@pins.PIN_SCHEMA_REGISTRY.register(CONF_WK2212_SPI, WK2212_PIN_SCHEMA) +async def sc16is75x_pin_to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + parent = await cg.get_variable(config[CONF_WK2212_SPI]) + cg.add(var.set_parent(parent)) + num = config[CONF_NUMBER] + cg.add(var.set_pin(num)) + cg.add(var.set_inverted(config[CONF_INVERTED])) + cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE]))) + return var diff --git a/tests/components/wk2132_i2c/common.yaml b/tests/components/wk2132_i2c/common.yaml new file mode 100644 index 0000000000..f9c8ab756d --- /dev/null +++ b/tests/components/wk2132_i2c/common.yaml @@ -0,0 +1,20 @@ +i2c: + id: i2c_bus + scl: ${scl_pin} + sda: ${sda_pin} + scan: true + frequency: 600kHz + +wk2132_i2c: + - id: wk2132_i2c_id + address: 0x70 + i2c_id: i2c_bus + uart: + - id: wk2132_id_0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2132_id_1 + channel: 1 + baud_rate: 19200 diff --git a/tests/components/wk2132_i2c/test.esp32-idf.yaml b/tests/components/wk2132_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2132_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2132_i2c/test.esp32-s3-idf.yaml b/tests/components/wk2132_i2c/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2132_i2c/test.esp32-s3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2132_i2c/test.esp32-s3.yaml b/tests/components/wk2132_i2c/test.esp32-s3.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2132_i2c/test.esp32-s3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2132_i2c/test.esp32.yaml b/tests/components/wk2132_i2c/test.esp32.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2132_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2132_spi/common.yaml b/tests/components/wk2132_spi/common.yaml new file mode 100644 index 0000000000..b21e89120c --- /dev/null +++ b/tests/components/wk2132_spi/common.yaml @@ -0,0 +1,21 @@ +spi: + id: spi_bus + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +wk2132_spi: + - id: wk2132_spi_id + cs_pin: ${cs_pin} + spi_id: spi_bus + crystal: 11059200 + data_rate: 1MHz + uart: + - id: wk2132_spi_id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2132_spi_id1 + channel: 1 + baud_rate: 921600 diff --git a/tests/components/wk2132_spi/test.esp32-idf.yaml b/tests/components/wk2132_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2132_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2132_spi/test.esp32-s3-idf.yaml b/tests/components/wk2132_spi/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2132_spi/test.esp32-s3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2132_spi/test.esp32-s3.yaml b/tests/components/wk2132_spi/test.esp32-s3.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2132_spi/test.esp32-s3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2132_spi/test.esp32.yaml b/tests/components/wk2132_spi/test.esp32.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2132_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2168_i2c/common.yaml b/tests/components/wk2168_i2c/common.yaml new file mode 100644 index 0000000000..fe4689d6db --- /dev/null +++ b/tests/components/wk2168_i2c/common.yaml @@ -0,0 +1,63 @@ +i2c: + id: i2c_bus + scl: ${scl_pin} + sda: ${sda_pin} + scan: true + frequency: 600kHz + +# component declaration +wk2168_i2c: + - id: bridge_i2c + i2c_id: i2c_bus + address: 0x70 + uart: + - id: id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: id1 + channel: 1 + baud_rate: 115200 + - id: id2 + channel: 2 + baud_rate: 115200 + - id: id3 + channel: 3 + baud_rate: 115200 + +# individual binary_sensor inputs +binary_sensor: + - platform: gpio + name: "pin_0" + pin: + wk2168_i2c: bridge_i2c + number: 0 + mode: + input: true + - platform: gpio + name: "pin_1" + pin: + wk2168_i2c: bridge_i2c + number: 1 + mode: + input: true + inverted: true + +# Individual binary outputs +switch: + - platform: gpio + name: "pin_2" + pin: + wk2168_i2c: bridge_i2c + number: 2 + mode: + output: true + - platform: gpio + name: "pin_3" + pin: + wk2168_i2c: bridge_i2c + number: 3 + mode: + output: true + inverted: true diff --git a/tests/components/wk2168_i2c/test.esp32-idf.yaml b/tests/components/wk2168_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2168_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2168_i2c/test.esp32-s3-idf.yaml b/tests/components/wk2168_i2c/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2168_i2c/test.esp32-s3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2168_i2c/test.esp32-s3.yaml b/tests/components/wk2168_i2c/test.esp32-s3.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2168_i2c/test.esp32-s3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2168_i2c/test.esp32.yaml b/tests/components/wk2168_i2c/test.esp32.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2168_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2168_spi/common.yaml b/tests/components/wk2168_spi/common.yaml new file mode 100644 index 0000000000..7626e18df6 --- /dev/null +++ b/tests/components/wk2168_spi/common.yaml @@ -0,0 +1,63 @@ +spi: + id: spi_bus + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +wk2168_spi: + - id: bridge_spi + cs_pin: ${cs_pin} + spi_id: spi_bus + crystal: 11059200 + data_rate: 1MHz + uart: + - id: id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: id1 + channel: 1 + baud_rate: 115200 + - id: id2 + channel: 2 + baud_rate: 115200 + - id: id3 + channel: 3 + baud_rate: 115200 + +# individual binary_sensor inputs +binary_sensor: + - platform: gpio + name: "pin_0" + pin: + wk2168_spi: bridge_spi + number: 0 + mode: + input: true + - platform: gpio + name: "pin_1" + pin: + wk2168_spi: bridge_spi + number: 1 + mode: + input: true + inverted: true + +# Individual binary outputs +switch: + - platform: gpio + name: "pin_2" + pin: + wk2168_spi: bridge_spi + number: 2 + mode: + output: true + - platform: gpio + name: "pin_3" + pin: + wk2168_spi: bridge_spi + number: 3 + mode: + output: true + inverted: true diff --git a/tests/components/wk2168_spi/test.esp32-idf.yaml b/tests/components/wk2168_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2168_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2168_spi/test.esp32-s3-idf.yaml b/tests/components/wk2168_spi/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2168_spi/test.esp32-s3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2168_spi/test.esp32-s3.yaml b/tests/components/wk2168_spi/test.esp32-s3.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2168_spi/test.esp32-s3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2168_spi/test.esp32.yaml b/tests/components/wk2168_spi/test.esp32.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2168_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2204_i2c/common.yaml b/tests/components/wk2204_i2c/common.yaml new file mode 100644 index 0000000000..80f636c690 --- /dev/null +++ b/tests/components/wk2204_i2c/common.yaml @@ -0,0 +1,28 @@ +i2c: + id: i2c_bus + scl: ${scl_pin} + sda: ${sda_pin} + scan: true + frequency: 600kHz + +wk2204_i2c: + - id: wk2204_i2c_id + i2c_id: i2c_bus + address: 0x70 + uart: + - id: wk2204_id_0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2204_id_1 + channel: 1 + baud_rate: 19200 + - id: wk2204_id_2 + channel: 2 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2204_id_3 + channel: 3 + baud_rate: 19200 diff --git a/tests/components/wk2204_i2c/test.esp32-idf.yaml b/tests/components/wk2204_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2204_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2204_i2c/test.esp32-s3-idf.yaml b/tests/components/wk2204_i2c/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2204_i2c/test.esp32-s3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2204_i2c/test.esp32-s3.yaml b/tests/components/wk2204_i2c/test.esp32-s3.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2204_i2c/test.esp32-s3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2204_i2c/test.esp32.yaml b/tests/components/wk2204_i2c/test.esp32.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2204_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2204_spi/common.yaml b/tests/components/wk2204_spi/common.yaml new file mode 100644 index 0000000000..3bae9c9a6d --- /dev/null +++ b/tests/components/wk2204_spi/common.yaml @@ -0,0 +1,29 @@ +spi: + id: spi_bus + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +wk2204_spi: + - id: wk2204_spi_id + cs_pin: ${cs_pin} + spi_id: spi_bus + crystal: 11059200 + data_rate: 1MHz + uart: + - id: wk2204_spi_id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2204_spi_id1 + channel: 1 + baud_rate: 921600 + - id: wk2204_spi_id2 + channel: 2 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: wk2204_spi_id3 + channel: 3 + baud_rate: 921600 diff --git a/tests/components/wk2204_spi/test.esp32-idf.yaml b/tests/components/wk2204_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2204_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2204_spi/test.esp32-s3-idf.yaml b/tests/components/wk2204_spi/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2204_spi/test.esp32-s3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2204_spi/test.esp32-s3.yaml b/tests/components/wk2204_spi/test.esp32-s3.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2204_spi/test.esp32-s3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2204_spi/test.esp32.yaml b/tests/components/wk2204_spi/test.esp32.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2204_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2212_i2c/common.yaml b/tests/components/wk2212_i2c/common.yaml new file mode 100644 index 0000000000..2e891c5520 --- /dev/null +++ b/tests/components/wk2212_i2c/common.yaml @@ -0,0 +1,59 @@ +i2c: + id: i2c_bus + scl: ${scl_pin} + sda: ${sda_pin} + scan: true + frequency: 600kHz + +# component declaration +wk2212_i2c: + - id: bridge_i2c + i2c_id: i2c_bus + address: 0x70 + uart: + - id: uart_i2c_id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: uart_i2c_id1 + channel: 1 + baud_rate: 115200 + stop_bits: 1 + parity: none + +# individual binary_sensor inputs +binary_sensor: + - platform: gpio + name: "pin_0" + pin: + wk2212_i2c: bridge_i2c + number: 0 + mode: + input: true + - platform: gpio + name: "pin_1" + pin: + wk2212_i2c: bridge_i2c + number: 1 + mode: + input: true + inverted: true + +# Individual binary outputs +switch: + - platform: gpio + name: "pin_2" + pin: + wk2212_i2c: bridge_i2c + number: 2 + mode: + output: true + - platform: gpio + name: "pin_3" + pin: + wk2212_i2c: bridge_i2c + number: 3 + mode: + output: true + inverted: true diff --git a/tests/components/wk2212_i2c/test.esp32-idf.yaml b/tests/components/wk2212_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2212_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2212_i2c/test.esp32-s3-idf.yaml b/tests/components/wk2212_i2c/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2212_i2c/test.esp32-s3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2212_i2c/test.esp32-s3.yaml b/tests/components/wk2212_i2c/test.esp32-s3.yaml new file mode 100644 index 0000000000..4942e3c2b3 --- /dev/null +++ b/tests/components/wk2212_i2c/test.esp32-s3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO40 + sda_pin: GPIO41 + +<<: !include common.yaml diff --git a/tests/components/wk2212_i2c/test.esp32.yaml b/tests/components/wk2212_i2c/test.esp32.yaml new file mode 100644 index 0000000000..3b761d3fc1 --- /dev/null +++ b/tests/components/wk2212_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO22 + sda_pin: GPIO21 + +<<: !include common.yaml diff --git a/tests/components/wk2212_spi/common.yaml b/tests/components/wk2212_spi/common.yaml new file mode 100644 index 0000000000..ad9f11d9e8 --- /dev/null +++ b/tests/components/wk2212_spi/common.yaml @@ -0,0 +1,58 @@ +spi: + id: spi_bus + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +wk2212_spi: + - id: bridge_spi + cs_pin: ${cs_pin} + spi_id: spi_bus + crystal: 11059200 + data_rate: 1MHz + uart: + - id: id0 + channel: 0 + baud_rate: 115200 + stop_bits: 1 + parity: none + - id: id1 + channel: 1 + baud_rate: 115200 + +# individual binary_sensor inputs +binary_sensor: + - platform: gpio + name: "pin_0" + pin: + wk2212_spi: bridge_spi + number: 0 + mode: + input: true + - platform: gpio + name: "pin_1" + pin: + wk2212_spi: bridge_spi + number: 1 + mode: + input: true + inverted: true + +# Individual binary outputs +switch: + - platform: gpio + name: "pin_2" + pin: + wk2212_spi: bridge_spi + number: 2 + mode: + output: true + - platform: gpio + name: "pin_3" + pin: + wk2212_spi: bridge_spi + number: 3 + mode: + output: true + inverted: true + diff --git a/tests/components/wk2212_spi/test.esp32-idf.yaml b/tests/components/wk2212_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2212_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/wk2212_spi/test.esp32-s3-idf.yaml b/tests/components/wk2212_spi/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2212_spi/test.esp32-s3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2212_spi/test.esp32-s3.yaml b/tests/components/wk2212_spi/test.esp32-s3.yaml new file mode 100644 index 0000000000..b0aadf620a --- /dev/null +++ b/tests/components/wk2212_spi/test.esp32-s3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO40 + miso_pin: GPIO41 + mosi_pin: GPIO6 + cs_pin: GPIO19 + +<<: !include common.yaml diff --git a/tests/components/wk2212_spi/test.esp32.yaml b/tests/components/wk2212_spi/test.esp32.yaml new file mode 100644 index 0000000000..76e7138ab0 --- /dev/null +++ b/tests/components/wk2212_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO18 + miso_pin: GPIO19 + mosi_pin: GPIO23 + cs_pin: GPIO5 + +<<: !include common.yaml From 217988fd9937b44257794bd10ab304c72039903f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 24 Apr 2024 13:49:08 +1200 Subject: [PATCH 072/313] Sort mqtt_const alphabetically (#6619) --- esphome/components/mqtt/mqtt_const.h | 257 +++++++++++++-------------- 1 file changed, 128 insertions(+), 129 deletions(-) diff --git a/esphome/components/mqtt/mqtt_const.h b/esphome/components/mqtt/mqtt_const.h index 3d9e0b4c00..2209f96e7a 100644 --- a/esphome/components/mqtt/mqtt_const.h +++ b/esphome/components/mqtt/mqtt_const.h @@ -9,8 +9,8 @@ namespace mqtt { #ifdef USE_MQTT_ABBREVIATIONS -constexpr const char *const MQTT_ACTION_TOPIC = "act_t"; constexpr const char *const MQTT_ACTION_TEMPLATE = "act_tpl"; +constexpr const char *const MQTT_ACTION_TOPIC = "act_t"; constexpr const char *const MQTT_AUTOMATION_TYPE = "atype"; constexpr const char *const MQTT_AUX_COMMAND_TOPIC = "aux_cmd_t"; constexpr const char *const MQTT_AUX_STATE_TEMPLATE = "aux_stat_tpl"; @@ -21,60 +21,68 @@ constexpr const char *const MQTT_AVAILABILITY_TOPIC = "avty_t"; constexpr const char *const MQTT_AWAY_MODE_COMMAND_TOPIC = "away_mode_cmd_t"; constexpr const char *const MQTT_AWAY_MODE_STATE_TEMPLATE = "away_mode_stat_tpl"; constexpr const char *const MQTT_AWAY_MODE_STATE_TOPIC = "away_mode_stat_t"; +constexpr const char *const MQTT_BATTERY_LEVEL_TEMPLATE = "bat_lev_tpl"; +constexpr const char *const MQTT_BATTERY_LEVEL_TOPIC = "bat_lev_t"; constexpr const char *const MQTT_BLUE_TEMPLATE = "b_tpl"; constexpr const char *const MQTT_BRIGHTNESS_COMMAND_TOPIC = "bri_cmd_t"; constexpr const char *const MQTT_BRIGHTNESS_SCALE = "bri_scl"; constexpr const char *const MQTT_BRIGHTNESS_STATE_TOPIC = "bri_stat_t"; constexpr const char *const MQTT_BRIGHTNESS_TEMPLATE = "bri_tpl"; constexpr const char *const MQTT_BRIGHTNESS_VALUE_TEMPLATE = "bri_val_tpl"; -constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TEMPLATE = "clr_temp_cmd_tpl"; -constexpr const char *const MQTT_BATTERY_LEVEL_TOPIC = "bat_lev_t"; -constexpr const char *const MQTT_BATTERY_LEVEL_TEMPLATE = "bat_lev_tpl"; -constexpr const char *const MQTT_CONFIGURATION_URL = "cu"; -constexpr const char *const MQTT_CHARGING_TOPIC = "chrg_t"; constexpr const char *const MQTT_CHARGING_TEMPLATE = "chrg_tpl"; +constexpr const char *const MQTT_CHARGING_TOPIC = "chrg_t"; +constexpr const char *const MQTT_CLEANING_TEMPLATE = "cln_tpl"; +constexpr const char *const MQTT_CLEANING_TOPIC = "cln_t"; +constexpr const char *const MQTT_CODE_ARM_REQUIRED = "cod_arm_req"; +constexpr const char *const MQTT_CODE_DISARM_REQUIRED = "cod_dis_req"; constexpr const char *const MQTT_COLOR_MODE = "clrm"; constexpr const char *const MQTT_COLOR_MODE_STATE_TOPIC = "clrm_stat_t"; constexpr const char *const MQTT_COLOR_MODE_VALUE_TEMPLATE = "clrm_val_tpl"; +constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TEMPLATE = "clr_temp_cmd_tpl"; constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TOPIC = "clr_temp_cmd_t"; constexpr const char *const MQTT_COLOR_TEMP_STATE_TOPIC = "clr_temp_stat_t"; constexpr const char *const MQTT_COLOR_TEMP_TEMPLATE = "clr_temp_tpl"; constexpr const char *const MQTT_COLOR_TEMP_VALUE_TEMPLATE = "clr_temp_val_tpl"; -constexpr const char *const MQTT_CLEANING_TOPIC = "cln_t"; -constexpr const char *const MQTT_CLEANING_TEMPLATE = "cln_tpl"; constexpr const char *const MQTT_COMMAND_OFF_TEMPLATE = "cmd_off_tpl"; constexpr const char *const MQTT_COMMAND_ON_TEMPLATE = "cmd_on_tpl"; -constexpr const char *const MQTT_COMMAND_TOPIC = "cmd_t"; constexpr const char *const MQTT_COMMAND_RETAIN = "ret"; constexpr const char *const MQTT_COMMAND_TEMPLATE = "cmd_tpl"; -constexpr const char *const MQTT_CODE_ARM_REQUIRED = "cod_arm_req"; -constexpr const char *const MQTT_CODE_DISARM_REQUIRED = "cod_dis_req"; -constexpr const char *const MQTT_CURRENT_TEMPERATURE_TOPIC = "curr_temp_t"; -constexpr const char *const MQTT_CURRENT_TEMPERATURE_TEMPLATE = "curr_temp_tpl"; -constexpr const char *const MQTT_CURRENT_HUMIDITY_TOPIC = "curr_hum_t"; +constexpr const char *const MQTT_COMMAND_TOPIC = "cmd_t"; +constexpr const char *const MQTT_CONFIGURATION_URL = "cu"; constexpr const char *const MQTT_CURRENT_HUMIDITY_TEMPLATE = "curr_hum_tpl"; +constexpr const char *const MQTT_CURRENT_HUMIDITY_TOPIC = "curr_hum_t"; +constexpr const char *const MQTT_CURRENT_TEMPERATURE_TEMPLATE = "curr_temp_tpl"; +constexpr const char *const MQTT_CURRENT_TEMPERATURE_TOPIC = "curr_temp_t"; constexpr const char *const MQTT_DEVICE = "dev"; constexpr const char *const MQTT_DEVICE_CLASS = "dev_cla"; -constexpr const char *const MQTT_DOCKED_TOPIC = "dock_t"; +constexpr const char *const MQTT_DEVICE_CONNECTIONS = "cns"; +constexpr const char *const MQTT_DEVICE_IDENTIFIERS = "ids"; +constexpr const char *const MQTT_DEVICE_MANUFACTURER = "mf"; +constexpr const char *const MQTT_DEVICE_MODEL = "mdl"; +constexpr const char *const MQTT_DEVICE_NAME = "name"; +constexpr const char *const MQTT_DEVICE_SUGGESTED_AREA = "sa"; +constexpr const char *const MQTT_DEVICE_SW_VERSION = "sw"; constexpr const char *const MQTT_DOCKED_TEMPLATE = "dock_tpl"; -constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "en"; -constexpr const char *const MQTT_ERROR_TOPIC = "err_t"; -constexpr const char *const MQTT_ERROR_TEMPLATE = "err_tpl"; -constexpr const char *const MQTT_FAN_SPEED_TOPIC = "fanspd_t"; -constexpr const char *const MQTT_FAN_SPEED_TEMPLATE = "fanspd_tpl"; -constexpr const char *const MQTT_FAN_SPEED_LIST = "fanspd_lst"; -constexpr const char *const MQTT_FLASH_TIME_LONG = "flsh_tlng"; -constexpr const char *const MQTT_FLASH_TIME_SHORT = "flsh_tsht"; +constexpr const char *const MQTT_DOCKED_TOPIC = "dock_t"; constexpr const char *const MQTT_EFFECT_COMMAND_TOPIC = "fx_cmd_t"; constexpr const char *const MQTT_EFFECT_LIST = "fx_list"; constexpr const char *const MQTT_EFFECT_STATE_TOPIC = "fx_stat_t"; constexpr const char *const MQTT_EFFECT_TEMPLATE = "fx_tpl"; constexpr const char *const MQTT_EFFECT_VALUE_TEMPLATE = "fx_val_tpl"; +constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "en"; +constexpr const char *const MQTT_ENTITY_CATEGORY = "ent_cat"; +constexpr const char *const MQTT_ERROR_TEMPLATE = "err_tpl"; +constexpr const char *const MQTT_ERROR_TOPIC = "err_t"; constexpr const char *const MQTT_EXPIRE_AFTER = "exp_aft"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TEMPLATE = "fan_mode_cmd_tpl"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TOPIC = "fan_mode_cmd_t"; constexpr const char *const MQTT_FAN_MODE_STATE_TEMPLATE = "fan_mode_stat_tpl"; constexpr const char *const MQTT_FAN_MODE_STATE_TOPIC = "fan_mode_stat_t"; +constexpr const char *const MQTT_FAN_SPEED_LIST = "fanspd_lst"; +constexpr const char *const MQTT_FAN_SPEED_TEMPLATE = "fanspd_tpl"; +constexpr const char *const MQTT_FAN_SPEED_TOPIC = "fanspd_t"; +constexpr const char *const MQTT_FLASH_TIME_LONG = "flsh_tlng"; +constexpr const char *const MQTT_FLASH_TIME_SHORT = "flsh_tsht"; constexpr const char *const MQTT_FORCE_UPDATE = "frc_upd"; constexpr const char *const MQTT_GREEN_TEMPLATE = "g_tpl"; constexpr const char *const MQTT_HOLD_COMMAND_TEMPLATE = "hold_cmd_tpl"; @@ -86,56 +94,49 @@ constexpr const char *const MQTT_HS_STATE_TOPIC = "hs_stat_t"; constexpr const char *const MQTT_HS_VALUE_TEMPLATE = "hs_val_tpl"; constexpr const char *const MQTT_ICON = "ic"; constexpr const char *const MQTT_INITIAL = "init"; -constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TOPIC = "hum_cmd_t"; -constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TEMPLATE = "hum_cmd_tpl"; -constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TOPIC = "hum_stat_t"; -constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TEMPLATE = "hum_state_tpl"; constexpr const char *const MQTT_JSON_ATTRIBUTES = "json_attr"; -constexpr const char *const MQTT_JSON_ATTRIBUTES_TOPIC = "json_attr_t"; constexpr const char *const MQTT_JSON_ATTRIBUTES_TEMPLATE = "json_attr_tpl"; +constexpr const char *const MQTT_JSON_ATTRIBUTES_TOPIC = "json_attr_t"; constexpr const char *const MQTT_LAST_RESET_TOPIC = "lrst_t"; constexpr const char *const MQTT_LAST_RESET_VALUE_TEMPLATE = "lrst_val_tpl"; constexpr const char *const MQTT_MAX = "max"; -constexpr const char *const MQTT_MIN = "min"; constexpr const char *const MQTT_MAX_HUMIDITY = "max_hum"; -constexpr const char *const MQTT_MIN_HUMIDITY = "min_hum"; constexpr const char *const MQTT_MAX_MIREDS = "max_mirs"; -constexpr const char *const MQTT_MIN_MIREDS = "min_mirs"; constexpr const char *const MQTT_MAX_TEMP = "max_temp"; +constexpr const char *const MQTT_MIN = "min"; +constexpr const char *const MQTT_MIN_HUMIDITY = "min_hum"; +constexpr const char *const MQTT_MIN_MIREDS = "min_mirs"; constexpr const char *const MQTT_MIN_TEMP = "min_temp"; +constexpr const char *const MQTT_MODE = "mode"; constexpr const char *const MQTT_MODE_COMMAND_TEMPLATE = "mode_cmd_tpl"; constexpr const char *const MQTT_MODE_COMMAND_TOPIC = "mode_cmd_t"; -constexpr const char *const MQTT_MODE_STATE_TOPIC = "mode_stat_t"; constexpr const char *const MQTT_MODE_STATE_TEMPLATE = "mode_stat_tpl"; +constexpr const char *const MQTT_MODE_STATE_TOPIC = "mode_stat_t"; constexpr const char *const MQTT_MODES = "modes"; constexpr const char *const MQTT_NAME = "name"; constexpr const char *const MQTT_OBJECT_ID = "obj_id"; constexpr const char *const MQTT_OFF_DELAY = "off_dly"; constexpr const char *const MQTT_ON_COMMAND_TYPE = "on_cmd_type"; -constexpr const char *const MQTT_OPTIONS = "ops"; constexpr const char *const MQTT_OPTIMISTIC = "opt"; -constexpr const char *const MQTT_OSCILLATION_COMMAND_TOPIC = "osc_cmd_t"; +constexpr const char *const MQTT_OPTIONS = "ops"; constexpr const char *const MQTT_OSCILLATION_COMMAND_TEMPLATE = "osc_cmd_tpl"; +constexpr const char *const MQTT_OSCILLATION_COMMAND_TOPIC = "osc_cmd_t"; constexpr const char *const MQTT_OSCILLATION_STATE_TOPIC = "osc_stat_t"; constexpr const char *const MQTT_OSCILLATION_VALUE_TEMPLATE = "osc_val_tpl"; -constexpr const char *const MQTT_PERCENTAGE_COMMAND_TOPIC = "pct_cmd_t"; -constexpr const char *const MQTT_PERCENTAGE_COMMAND_TEMPLATE = "pct_cmd_tpl"; -constexpr const char *const MQTT_PERCENTAGE_STATE_TOPIC = "pct_stat_t"; -constexpr const char *const MQTT_PERCENTAGE_VALUE_TEMPLATE = "pct_val_tpl"; constexpr const char *const MQTT_PAYLOAD = "pl"; constexpr const char *const MQTT_PAYLOAD_ARM_AWAY = "pl_arm_away"; +constexpr const char *const MQTT_PAYLOAD_ARM_CUSTOM_BYPASS = "pl_arm_custom_b"; constexpr const char *const MQTT_PAYLOAD_ARM_HOME = "pl_arm_home"; constexpr const char *const MQTT_PAYLOAD_ARM_NIGHT = "pl_arm_nite"; constexpr const char *const MQTT_PAYLOAD_ARM_VACATION = "pl_arm_vacation"; -constexpr const char *const MQTT_PAYLOAD_ARM_CUSTOM_BYPASS = "pl_arm_custom_b"; constexpr const char *const MQTT_PAYLOAD_AVAILABLE = "pl_avail"; constexpr const char *const MQTT_PAYLOAD_CLEAN_SPOT = "pl_cln_sp"; constexpr const char *const MQTT_PAYLOAD_CLOSE = "pl_cls"; constexpr const char *const MQTT_PAYLOAD_DISARM = "pl_disarm"; constexpr const char *const MQTT_PAYLOAD_HIGH_SPEED = "pl_hi_spd"; constexpr const char *const MQTT_PAYLOAD_HOME = "pl_home"; -constexpr const char *const MQTT_PAYLOAD_LOCK = "pl_lock"; constexpr const char *const MQTT_PAYLOAD_LOCATE = "pl_loc"; +constexpr const char *const MQTT_PAYLOAD_LOCK = "pl_lock"; constexpr const char *const MQTT_PAYLOAD_LOW_SPEED = "pl_lo_spd"; constexpr const char *const MQTT_PAYLOAD_MEDIUM_SPEED = "pl_med_spd"; constexpr const char *const MQTT_PAYLOAD_NOT_AVAILABLE = "pl_not_avail"; @@ -152,20 +153,26 @@ constexpr const char *const MQTT_PAYLOAD_RESET_HUMIDITY = "pl_rst_hum"; constexpr const char *const MQTT_PAYLOAD_RESET_MODE = "pl_rst_mode"; constexpr const char *const MQTT_PAYLOAD_RESET_PERCENTAGE = "pl_rst_pct"; constexpr const char *const MQTT_PAYLOAD_RESET_PRESET_MODE = "pl_rst_pr_mode"; -constexpr const char *const MQTT_PAYLOAD_STOP = "pl_stop"; +constexpr const char *const MQTT_PAYLOAD_RETURN_TO_BASE = "pl_ret"; constexpr const char *const MQTT_PAYLOAD_START = "pl_strt"; constexpr const char *const MQTT_PAYLOAD_START_PAUSE = "pl_stpa"; -constexpr const char *const MQTT_PAYLOAD_RETURN_TO_BASE = "pl_ret"; +constexpr const char *const MQTT_PAYLOAD_STOP = "pl_stop"; constexpr const char *const MQTT_PAYLOAD_TURN_OFF = "pl_toff"; constexpr const char *const MQTT_PAYLOAD_TURN_ON = "pl_ton"; constexpr const char *const MQTT_PAYLOAD_UNLOCK = "pl_unlk"; +constexpr const char *const MQTT_PERCENTAGE_COMMAND_TEMPLATE = "pct_cmd_tpl"; +constexpr const char *const MQTT_PERCENTAGE_COMMAND_TOPIC = "pct_cmd_t"; +constexpr const char *const MQTT_PERCENTAGE_STATE_TOPIC = "pct_stat_t"; +constexpr const char *const MQTT_PERCENTAGE_VALUE_TEMPLATE = "pct_val_tpl"; constexpr const char *const MQTT_POSITION_CLOSED = "pos_clsd"; constexpr const char *const MQTT_POSITION_OPEN = "pos_open"; +constexpr const char *const MQTT_POSITION_TEMPLATE = "pos_tpl"; +constexpr const char *const MQTT_POSITION_TOPIC = "pos_t"; constexpr const char *const MQTT_POWER_COMMAND_TOPIC = "pow_cmd_t"; -constexpr const char *const MQTT_POWER_STATE_TOPIC = "pow_stat_t"; constexpr const char *const MQTT_POWER_STATE_TEMPLATE = "pow_stat_tpl"; -constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "pr_mode_cmd_t"; +constexpr const char *const MQTT_POWER_STATE_TOPIC = "pow_stat_t"; constexpr const char *const MQTT_PRESET_MODE_COMMAND_TEMPLATE = "pr_mode_cmd_tpl"; +constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "pr_mode_cmd_t"; constexpr const char *const MQTT_PRESET_MODE_STATE_TOPIC = "pr_mode_stat_t"; constexpr const char *const MQTT_PRESET_MODE_VALUE_TEMPLATE = "pr_mode_val_tpl"; constexpr const char *const MQTT_PRESET_MODES = "pr_modes"; @@ -188,36 +195,38 @@ constexpr const char *const MQTT_SEND_IF_OFF = "send_if_off"; constexpr const char *const MQTT_SET_FAN_SPEED_TOPIC = "set_fan_spd_t"; constexpr const char *const MQTT_SET_POSITION_TEMPLATE = "set_pos_tpl"; constexpr const char *const MQTT_SET_POSITION_TOPIC = "set_pos_t"; -constexpr const char *const MQTT_POSITION_TOPIC = "pos_t"; -constexpr const char *const MQTT_POSITION_TEMPLATE = "pos_tpl"; +constexpr const char *const MQTT_SOURCE_TYPE = "src_type"; constexpr const char *const MQTT_SPEED_COMMAND_TOPIC = "spd_cmd_t"; -constexpr const char *const MQTT_SPEED_STATE_TOPIC = "spd_stat_t"; -constexpr const char *const MQTT_SPEED_RANGE_MIN = "spd_rng_min"; constexpr const char *const MQTT_SPEED_RANGE_MAX = "spd_rng_max"; +constexpr const char *const MQTT_SPEED_RANGE_MIN = "spd_rng_min"; +constexpr const char *const MQTT_SPEED_STATE_TOPIC = "spd_stat_t"; constexpr const char *const MQTT_SPEED_VALUE_TEMPLATE = "spd_val_tpl"; constexpr const char *const MQTT_SPEEDS = "spds"; -constexpr const char *const MQTT_SOURCE_TYPE = "src_type"; constexpr const char *const MQTT_STATE_CLASS = "stat_cla"; constexpr const char *const MQTT_STATE_CLOSED = "stat_clsd"; constexpr const char *const MQTT_STATE_CLOSING = "stat_closing"; +constexpr const char *const MQTT_STATE_LOCKED = "stat_locked"; constexpr const char *const MQTT_STATE_OFF = "stat_off"; constexpr const char *const MQTT_STATE_ON = "stat_on"; constexpr const char *const MQTT_STATE_OPEN = "stat_open"; constexpr const char *const MQTT_STATE_OPENING = "stat_opening"; constexpr const char *const MQTT_STATE_STOPPED = "stat_stopped"; -constexpr const char *const MQTT_STATE_LOCKED = "stat_locked"; -constexpr const char *const MQTT_STATE_UNLOCKED = "stat_unlocked"; -constexpr const char *const MQTT_STATE_TOPIC = "stat_t"; constexpr const char *const MQTT_STATE_TEMPLATE = "stat_tpl"; +constexpr const char *const MQTT_STATE_TOPIC = "stat_t"; +constexpr const char *const MQTT_STATE_UNLOCKED = "stat_unlocked"; constexpr const char *const MQTT_STATE_VALUE_TEMPLATE = "stat_val_tpl"; constexpr const char *const MQTT_STEP = "step"; constexpr const char *const MQTT_SUBTYPE = "stype"; -constexpr const char *const MQTT_SUPPORTED_FEATURES = "sup_feat"; constexpr const char *const MQTT_SUPPORTED_COLOR_MODES = "sup_clrm"; +constexpr const char *const MQTT_SUPPORTED_FEATURES = "sup_feat"; constexpr const char *const MQTT_SWING_MODE_COMMAND_TEMPLATE = "swing_mode_cmd_tpl"; constexpr const char *const MQTT_SWING_MODE_COMMAND_TOPIC = "swing_mode_cmd_t"; constexpr const char *const MQTT_SWING_MODE_STATE_TEMPLATE = "swing_mode_stat_tpl"; constexpr const char *const MQTT_SWING_MODE_STATE_TOPIC = "swing_mode_stat_t"; +constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TEMPLATE = "hum_cmd_tpl"; +constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TOPIC = "hum_cmd_t"; +constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TEMPLATE = "hum_state_tpl"; +constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TOPIC = "hum_stat_t"; constexpr const char *const MQTT_TEMPERATURE_COMMAND_TEMPLATE = "temp_cmd_tpl"; constexpr const char *const MQTT_TEMPERATURE_COMMAND_TOPIC = "temp_cmd_t"; constexpr const char *const MQTT_TEMPERATURE_HIGH_COMMAND_TEMPLATE = "temp_hi_cmd_tpl"; @@ -232,15 +241,15 @@ constexpr const char *const MQTT_TEMPERATURE_STATE_TEMPLATE = "temp_stat_tpl"; constexpr const char *const MQTT_TEMPERATURE_STATE_TOPIC = "temp_stat_t"; constexpr const char *const MQTT_TEMPERATURE_UNIT = "temp_unit"; constexpr const char *const MQTT_TILT_CLOSED_VALUE = "tilt_clsd_val"; -constexpr const char *const MQTT_TILT_COMMAND_TOPIC = "tilt_cmd_t"; constexpr const char *const MQTT_TILT_COMMAND_TEMPLATE = "tilt_cmd_tpl"; +constexpr const char *const MQTT_TILT_COMMAND_TOPIC = "tilt_cmd_t"; constexpr const char *const MQTT_TILT_INVERT_STATE = "tilt_inv_stat"; constexpr const char *const MQTT_TILT_MAX = "tilt_max"; constexpr const char *const MQTT_TILT_MIN = "tilt_min"; constexpr const char *const MQTT_TILT_OPENED_VALUE = "tilt_opnd_val"; constexpr const char *const MQTT_TILT_OPTIMISTIC = "tilt_opt"; -constexpr const char *const MQTT_TILT_STATUS_TOPIC = "tilt_status_t"; constexpr const char *const MQTT_TILT_STATUS_TEMPLATE = "tilt_status_tpl"; +constexpr const char *const MQTT_TILT_STATUS_TOPIC = "tilt_status_t"; constexpr const char *const MQTT_TOPIC = "t"; constexpr const char *const MQTT_UNIQUE_ID = "uniq_id"; constexpr const char *const MQTT_UNIT_OF_MEASUREMENT = "unit_of_meas"; @@ -255,18 +264,10 @@ constexpr const char *const MQTT_XY_COMMAND_TOPIC = "xy_cmd_t"; constexpr const char *const MQTT_XY_STATE_TOPIC = "xy_stat_t"; constexpr const char *const MQTT_XY_VALUE_TEMPLATE = "xy_val_tpl"; -constexpr const char *const MQTT_DEVICE_CONNECTIONS = "cns"; -constexpr const char *const MQTT_DEVICE_IDENTIFIERS = "ids"; -constexpr const char *const MQTT_DEVICE_NAME = "name"; -constexpr const char *const MQTT_DEVICE_MANUFACTURER = "mf"; -constexpr const char *const MQTT_DEVICE_MODEL = "mdl"; -constexpr const char *const MQTT_DEVICE_SW_VERSION = "sw"; -constexpr const char *const MQTT_DEVICE_SUGGESTED_AREA = "sa"; - #else -constexpr const char *const MQTT_ACTION_TOPIC = "action_topic"; constexpr const char *const MQTT_ACTION_TEMPLATE = "action_template"; +constexpr const char *const MQTT_ACTION_TOPIC = "action_topic"; constexpr const char *const MQTT_AUTOMATION_TYPE = "automation_type"; constexpr const char *const MQTT_AUX_COMMAND_TOPIC = "aux_command_topic"; constexpr const char *const MQTT_AUX_STATE_TEMPLATE = "aux_state_template"; @@ -277,60 +278,68 @@ constexpr const char *const MQTT_AVAILABILITY_TOPIC = "availability_topic"; constexpr const char *const MQTT_AWAY_MODE_COMMAND_TOPIC = "away_mode_command_topic"; constexpr const char *const MQTT_AWAY_MODE_STATE_TEMPLATE = "away_mode_state_template"; constexpr const char *const MQTT_AWAY_MODE_STATE_TOPIC = "away_mode_state_topic"; +constexpr const char *const MQTT_BATTERY_LEVEL_TEMPLATE = "battery_level_template"; +constexpr const char *const MQTT_BATTERY_LEVEL_TOPIC = "battery_level_topic"; constexpr const char *const MQTT_BLUE_TEMPLATE = "blue_template"; constexpr const char *const MQTT_BRIGHTNESS_COMMAND_TOPIC = "brightness_command_topic"; constexpr const char *const MQTT_BRIGHTNESS_SCALE = "brightness_scale"; constexpr const char *const MQTT_BRIGHTNESS_STATE_TOPIC = "brightness_state_topic"; constexpr const char *const MQTT_BRIGHTNESS_TEMPLATE = "brightness_template"; constexpr const char *const MQTT_BRIGHTNESS_VALUE_TEMPLATE = "brightness_value_template"; -constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TEMPLATE = "color_temp_command_template"; -constexpr const char *const MQTT_BATTERY_LEVEL_TOPIC = "battery_level_topic"; -constexpr const char *const MQTT_BATTERY_LEVEL_TEMPLATE = "battery_level_template"; -constexpr const char *const MQTT_CONFIGURATION_URL = "configuration_url"; -constexpr const char *const MQTT_CHARGING_TOPIC = "charging_topic"; constexpr const char *const MQTT_CHARGING_TEMPLATE = "charging_template"; +constexpr const char *const MQTT_CHARGING_TOPIC = "charging_topic"; +constexpr const char *const MQTT_CLEANING_TEMPLATE = "cleaning_template"; +constexpr const char *const MQTT_CLEANING_TOPIC = "cleaning_topic"; +constexpr const char *const MQTT_CODE_ARM_REQUIRED = "code_arm_required"; +constexpr const char *const MQTT_CODE_DISARM_REQUIRED = "code_disarm_required"; constexpr const char *const MQTT_COLOR_MODE = "color_mode"; constexpr const char *const MQTT_COLOR_MODE_STATE_TOPIC = "color_mode_state_topic"; constexpr const char *const MQTT_COLOR_MODE_VALUE_TEMPLATE = "color_mode_value_template"; +constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TEMPLATE = "color_temp_command_template"; constexpr const char *const MQTT_COLOR_TEMP_COMMAND_TOPIC = "color_temp_command_topic"; constexpr const char *const MQTT_COLOR_TEMP_STATE_TOPIC = "color_temp_state_topic"; constexpr const char *const MQTT_COLOR_TEMP_TEMPLATE = "color_temp_template"; constexpr const char *const MQTT_COLOR_TEMP_VALUE_TEMPLATE = "color_temp_value_template"; -constexpr const char *const MQTT_CLEANING_TOPIC = "cleaning_topic"; -constexpr const char *const MQTT_CLEANING_TEMPLATE = "cleaning_template"; constexpr const char *const MQTT_COMMAND_OFF_TEMPLATE = "command_off_template"; constexpr const char *const MQTT_COMMAND_ON_TEMPLATE = "command_on_template"; -constexpr const char *const MQTT_COMMAND_TOPIC = "command_topic"; constexpr const char *const MQTT_COMMAND_RETAIN = "retain"; constexpr const char *const MQTT_COMMAND_TEMPLATE = "command_template"; -constexpr const char *const MQTT_CODE_ARM_REQUIRED = "code_arm_required"; -constexpr const char *const MQTT_CODE_DISARM_REQUIRED = "code_disarm_required"; -constexpr const char *const MQTT_CURRENT_TEMPERATURE_TOPIC = "current_temperature_topic"; -constexpr const char *const MQTT_CURRENT_TEMPERATURE_TEMPLATE = "current_temperature_template"; -constexpr const char *const MQTT_CURRENT_HUMIDITY_TOPIC = "current_humidity_topic"; +constexpr const char *const MQTT_COMMAND_TOPIC = "command_topic"; +constexpr const char *const MQTT_CONFIGURATION_URL = "configuration_url"; constexpr const char *const MQTT_CURRENT_HUMIDITY_TEMPLATE = "current_humidity_template"; +constexpr const char *const MQTT_CURRENT_HUMIDITY_TOPIC = "current_humidity_topic"; +constexpr const char *const MQTT_CURRENT_TEMPERATURE_TEMPLATE = "current_temperature_template"; +constexpr const char *const MQTT_CURRENT_TEMPERATURE_TOPIC = "current_temperature_topic"; constexpr const char *const MQTT_DEVICE = "device"; constexpr const char *const MQTT_DEVICE_CLASS = "device_class"; -constexpr const char *const MQTT_DOCKED_TOPIC = "docked_topic"; +constexpr const char *const MQTT_DEVICE_CONNECTIONS = "connections"; +constexpr const char *const MQTT_DEVICE_IDENTIFIERS = "identifiers"; +constexpr const char *const MQTT_DEVICE_MANUFACTURER = "manufacturer"; +constexpr const char *const MQTT_DEVICE_MODEL = "model"; +constexpr const char *const MQTT_DEVICE_NAME = "name"; +constexpr const char *const MQTT_DEVICE_SUGGESTED_AREA = "suggested_area"; +constexpr const char *const MQTT_DEVICE_SW_VERSION = "sw_version"; constexpr const char *const MQTT_DOCKED_TEMPLATE = "docked_template"; -constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "enabled_by_default"; -constexpr const char *const MQTT_ERROR_TOPIC = "error_topic"; -constexpr const char *const MQTT_ERROR_TEMPLATE = "error_template"; -constexpr const char *const MQTT_FAN_SPEED_TOPIC = "fan_speed_topic"; -constexpr const char *const MQTT_FAN_SPEED_TEMPLATE = "fan_speed_template"; -constexpr const char *const MQTT_FAN_SPEED_LIST = "fan_speed_list"; -constexpr const char *const MQTT_FLASH_TIME_LONG = "flash_time_long"; -constexpr const char *const MQTT_FLASH_TIME_SHORT = "flash_time_short"; +constexpr const char *const MQTT_DOCKED_TOPIC = "docked_topic"; constexpr const char *const MQTT_EFFECT_COMMAND_TOPIC = "effect_command_topic"; constexpr const char *const MQTT_EFFECT_LIST = "effect_list"; constexpr const char *const MQTT_EFFECT_STATE_TOPIC = "effect_state_topic"; constexpr const char *const MQTT_EFFECT_TEMPLATE = "effect_template"; constexpr const char *const MQTT_EFFECT_VALUE_TEMPLATE = "effect_value_template"; +constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "enabled_by_default"; +constexpr const char *const MQTT_ENTITY_CATEGORY = "entity_category"; +constexpr const char *const MQTT_ERROR_TEMPLATE = "error_template"; +constexpr const char *const MQTT_ERROR_TOPIC = "error_topic"; constexpr const char *const MQTT_EXPIRE_AFTER = "expire_after"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TEMPLATE = "fan_mode_command_template"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TOPIC = "fan_mode_command_topic"; constexpr const char *const MQTT_FAN_MODE_STATE_TEMPLATE = "fan_mode_state_template"; constexpr const char *const MQTT_FAN_MODE_STATE_TOPIC = "fan_mode_state_topic"; +constexpr const char *const MQTT_FAN_SPEED_LIST = "fan_speed_list"; +constexpr const char *const MQTT_FAN_SPEED_TEMPLATE = "fan_speed_template"; +constexpr const char *const MQTT_FAN_SPEED_TOPIC = "fan_speed_topic"; +constexpr const char *const MQTT_FLASH_TIME_LONG = "flash_time_long"; +constexpr const char *const MQTT_FLASH_TIME_SHORT = "flash_time_short"; constexpr const char *const MQTT_FORCE_UPDATE = "force_update"; constexpr const char *const MQTT_GREEN_TEMPLATE = "green_template"; constexpr const char *const MQTT_HOLD_COMMAND_TEMPLATE = "hold_command_template"; @@ -342,56 +351,49 @@ constexpr const char *const MQTT_HS_STATE_TOPIC = "hs_state_topic"; constexpr const char *const MQTT_HS_VALUE_TEMPLATE = "hs_value_template"; constexpr const char *const MQTT_ICON = "icon"; constexpr const char *const MQTT_INITIAL = "initial"; -constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TOPIC = "target_humidity_command_topic"; -constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TEMPLATE = "target_humidity_command_template"; -constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TOPIC = "target_humidity_state_topic"; -constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TEMPLATE = "target_humidity_state_template"; constexpr const char *const MQTT_JSON_ATTRIBUTES = "json_attributes"; -constexpr const char *const MQTT_JSON_ATTRIBUTES_TOPIC = "json_attributes_topic"; constexpr const char *const MQTT_JSON_ATTRIBUTES_TEMPLATE = "json_attributes_template"; +constexpr const char *const MQTT_JSON_ATTRIBUTES_TOPIC = "json_attributes_topic"; constexpr const char *const MQTT_LAST_RESET_TOPIC = "last_reset_topic"; constexpr const char *const MQTT_LAST_RESET_VALUE_TEMPLATE = "last_reset_value_template"; constexpr const char *const MQTT_MAX = "max"; -constexpr const char *const MQTT_MIN = "min"; constexpr const char *const MQTT_MAX_HUMIDITY = "max_humidity"; -constexpr const char *const MQTT_MIN_HUMIDITY = "min_humidity"; constexpr const char *const MQTT_MAX_MIREDS = "max_mireds"; -constexpr const char *const MQTT_MIN_MIREDS = "min_mireds"; constexpr const char *const MQTT_MAX_TEMP = "max_temp"; +constexpr const char *const MQTT_MIN = "min"; +constexpr const char *const MQTT_MIN_HUMIDITY = "min_humidity"; +constexpr const char *const MQTT_MIN_MIREDS = "min_mireds"; constexpr const char *const MQTT_MIN_TEMP = "min_temp"; +constexpr const char *const MQTT_MODE = "mode"; constexpr const char *const MQTT_MODE_COMMAND_TEMPLATE = "mode_command_template"; constexpr const char *const MQTT_MODE_COMMAND_TOPIC = "mode_command_topic"; -constexpr const char *const MQTT_MODE_STATE_TOPIC = "mode_state_topic"; constexpr const char *const MQTT_MODE_STATE_TEMPLATE = "mode_state_template"; +constexpr const char *const MQTT_MODE_STATE_TOPIC = "mode_state_topic"; constexpr const char *const MQTT_MODES = "modes"; constexpr const char *const MQTT_NAME = "name"; constexpr const char *const MQTT_OBJECT_ID = "object_id"; constexpr const char *const MQTT_OFF_DELAY = "off_delay"; constexpr const char *const MQTT_ON_COMMAND_TYPE = "on_command_type"; -constexpr const char *const MQTT_OPTIONS = "options"; constexpr const char *const MQTT_OPTIMISTIC = "optimistic"; -constexpr const char *const MQTT_OSCILLATION_COMMAND_TOPIC = "oscillation_command_topic"; +constexpr const char *const MQTT_OPTIONS = "options"; constexpr const char *const MQTT_OSCILLATION_COMMAND_TEMPLATE = "oscillation_command_template"; +constexpr const char *const MQTT_OSCILLATION_COMMAND_TOPIC = "oscillation_command_topic"; constexpr const char *const MQTT_OSCILLATION_STATE_TOPIC = "oscillation_state_topic"; constexpr const char *const MQTT_OSCILLATION_VALUE_TEMPLATE = "oscillation_value_template"; -constexpr const char *const MQTT_PERCENTAGE_COMMAND_TOPIC = "percentage_command_topic"; -constexpr const char *const MQTT_PERCENTAGE_COMMAND_TEMPLATE = "percentage_command_template"; -constexpr const char *const MQTT_PERCENTAGE_STATE_TOPIC = "percentage_state_topic"; -constexpr const char *const MQTT_PERCENTAGE_VALUE_TEMPLATE = "percentage_value_template"; constexpr const char *const MQTT_PAYLOAD = "payload"; constexpr const char *const MQTT_PAYLOAD_ARM_AWAY = "payload_arm_away"; +constexpr const char *const MQTT_PAYLOAD_ARM_CUSTOM_BYPASS = "payload_arm_custom_bypass"; constexpr const char *const MQTT_PAYLOAD_ARM_HOME = "payload_arm_home"; constexpr const char *const MQTT_PAYLOAD_ARM_NIGHT = "payload_arm_night"; constexpr const char *const MQTT_PAYLOAD_ARM_VACATION = "payload_arm_vacation"; -constexpr const char *const MQTT_PAYLOAD_ARM_CUSTOM_BYPASS = "payload_arm_custom_bypass"; constexpr const char *const MQTT_PAYLOAD_AVAILABLE = "payload_available"; constexpr const char *const MQTT_PAYLOAD_CLEAN_SPOT = "payload_clean_spot"; constexpr const char *const MQTT_PAYLOAD_CLOSE = "payload_close"; constexpr const char *const MQTT_PAYLOAD_DISARM = "payload_disarm"; constexpr const char *const MQTT_PAYLOAD_HIGH_SPEED = "payload_high_speed"; constexpr const char *const MQTT_PAYLOAD_HOME = "payload_home"; -constexpr const char *const MQTT_PAYLOAD_LOCK = "payload_lock"; constexpr const char *const MQTT_PAYLOAD_LOCATE = "payload_locate"; +constexpr const char *const MQTT_PAYLOAD_LOCK = "payload_lock"; constexpr const char *const MQTT_PAYLOAD_LOW_SPEED = "payload_low_speed"; constexpr const char *const MQTT_PAYLOAD_MEDIUM_SPEED = "payload_medium_speed"; constexpr const char *const MQTT_PAYLOAD_NOT_AVAILABLE = "payload_not_available"; @@ -408,20 +410,26 @@ constexpr const char *const MQTT_PAYLOAD_RESET_HUMIDITY = "payload_reset_humidit constexpr const char *const MQTT_PAYLOAD_RESET_MODE = "payload_reset_mode"; constexpr const char *const MQTT_PAYLOAD_RESET_PERCENTAGE = "payload_reset_percentage"; constexpr const char *const MQTT_PAYLOAD_RESET_PRESET_MODE = "payload_reset_preset_mode"; -constexpr const char *const MQTT_PAYLOAD_STOP = "payload_stop"; +constexpr const char *const MQTT_PAYLOAD_RETURN_TO_BASE = "payload_return_to_base"; constexpr const char *const MQTT_PAYLOAD_START = "payload_start"; constexpr const char *const MQTT_PAYLOAD_START_PAUSE = "payload_start_pause"; -constexpr const char *const MQTT_PAYLOAD_RETURN_TO_BASE = "payload_return_to_base"; +constexpr const char *const MQTT_PAYLOAD_STOP = "payload_stop"; constexpr const char *const MQTT_PAYLOAD_TURN_OFF = "payload_turn_off"; constexpr const char *const MQTT_PAYLOAD_TURN_ON = "payload_turn_on"; constexpr const char *const MQTT_PAYLOAD_UNLOCK = "payload_unlock"; +constexpr const char *const MQTT_PERCENTAGE_COMMAND_TEMPLATE = "percentage_command_template"; +constexpr const char *const MQTT_PERCENTAGE_COMMAND_TOPIC = "percentage_command_topic"; +constexpr const char *const MQTT_PERCENTAGE_STATE_TOPIC = "percentage_state_topic"; +constexpr const char *const MQTT_PERCENTAGE_VALUE_TEMPLATE = "percentage_value_template"; constexpr const char *const MQTT_POSITION_CLOSED = "position_closed"; constexpr const char *const MQTT_POSITION_OPEN = "position_open"; +constexpr const char *const MQTT_POSITION_TEMPLATE = "position_template"; +constexpr const char *const MQTT_POSITION_TOPIC = "position_topic"; constexpr const char *const MQTT_POWER_COMMAND_TOPIC = "power_command_topic"; -constexpr const char *const MQTT_POWER_STATE_TOPIC = "power_state_topic"; constexpr const char *const MQTT_POWER_STATE_TEMPLATE = "power_state_template"; -constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "preset_mode_command_topic"; +constexpr const char *const MQTT_POWER_STATE_TOPIC = "power_state_topic"; constexpr const char *const MQTT_PRESET_MODE_COMMAND_TEMPLATE = "preset_mode_command_template"; +constexpr const char *const MQTT_PRESET_MODE_COMMAND_TOPIC = "preset_mode_command_topic"; constexpr const char *const MQTT_PRESET_MODE_STATE_TOPIC = "preset_mode_state_topic"; constexpr const char *const MQTT_PRESET_MODE_VALUE_TEMPLATE = "preset_mode_value_template"; constexpr const char *const MQTT_PRESET_MODES = "preset_modes"; @@ -444,36 +452,38 @@ constexpr const char *const MQTT_SEND_IF_OFF = "send_if_off"; constexpr const char *const MQTT_SET_FAN_SPEED_TOPIC = "set_fan_speed_topic"; constexpr const char *const MQTT_SET_POSITION_TEMPLATE = "set_position_template"; constexpr const char *const MQTT_SET_POSITION_TOPIC = "set_position_topic"; -constexpr const char *const MQTT_POSITION_TOPIC = "position_topic"; -constexpr const char *const MQTT_POSITION_TEMPLATE = "position_template"; +constexpr const char *const MQTT_SOURCE_TYPE = "source_type"; constexpr const char *const MQTT_SPEED_COMMAND_TOPIC = "speed_command_topic"; -constexpr const char *const MQTT_SPEED_STATE_TOPIC = "speed_state_topic"; -constexpr const char *const MQTT_SPEED_RANGE_MIN = "speed_range_min"; constexpr const char *const MQTT_SPEED_RANGE_MAX = "speed_range_max"; +constexpr const char *const MQTT_SPEED_RANGE_MIN = "speed_range_min"; +constexpr const char *const MQTT_SPEED_STATE_TOPIC = "speed_state_topic"; constexpr const char *const MQTT_SPEED_VALUE_TEMPLATE = "speed_value_template"; constexpr const char *const MQTT_SPEEDS = "speeds"; -constexpr const char *const MQTT_SOURCE_TYPE = "source_type"; constexpr const char *const MQTT_STATE_CLASS = "state_class"; constexpr const char *const MQTT_STATE_CLOSED = "state_closed"; constexpr const char *const MQTT_STATE_CLOSING = "state_closing"; +constexpr const char *const MQTT_STATE_LOCKED = "state_locked"; constexpr const char *const MQTT_STATE_OFF = "state_off"; constexpr const char *const MQTT_STATE_ON = "state_on"; constexpr const char *const MQTT_STATE_OPEN = "state_open"; constexpr const char *const MQTT_STATE_OPENING = "state_opening"; constexpr const char *const MQTT_STATE_STOPPED = "state_stopped"; -constexpr const char *const MQTT_STATE_LOCKED = "state_locked"; -constexpr const char *const MQTT_STATE_UNLOCKED = "state_unlocked"; -constexpr const char *const MQTT_STATE_TOPIC = "state_topic"; constexpr const char *const MQTT_STATE_TEMPLATE = "state_template"; +constexpr const char *const MQTT_STATE_TOPIC = "state_topic"; +constexpr const char *const MQTT_STATE_UNLOCKED = "state_unlocked"; constexpr const char *const MQTT_STATE_VALUE_TEMPLATE = "state_value_template"; constexpr const char *const MQTT_STEP = "step"; constexpr const char *const MQTT_SUBTYPE = "subtype"; -constexpr const char *const MQTT_SUPPORTED_FEATURES = "supported_features"; constexpr const char *const MQTT_SUPPORTED_COLOR_MODES = "supported_color_modes"; +constexpr const char *const MQTT_SUPPORTED_FEATURES = "supported_features"; constexpr const char *const MQTT_SWING_MODE_COMMAND_TEMPLATE = "swing_mode_command_template"; constexpr const char *const MQTT_SWING_MODE_COMMAND_TOPIC = "swing_mode_command_topic"; constexpr const char *const MQTT_SWING_MODE_STATE_TEMPLATE = "swing_mode_state_template"; constexpr const char *const MQTT_SWING_MODE_STATE_TOPIC = "swing_mode_state_topic"; +constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TEMPLATE = "target_humidity_command_template"; +constexpr const char *const MQTT_TARGET_HUMIDITY_COMMAND_TOPIC = "target_humidity_command_topic"; +constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TEMPLATE = "target_humidity_state_template"; +constexpr const char *const MQTT_TARGET_HUMIDITY_STATE_TOPIC = "target_humidity_state_topic"; constexpr const char *const MQTT_TEMPERATURE_COMMAND_TEMPLATE = "temperature_command_template"; constexpr const char *const MQTT_TEMPERATURE_COMMAND_TOPIC = "temperature_command_topic"; constexpr const char *const MQTT_TEMPERATURE_HIGH_COMMAND_TEMPLATE = "temperature_high_command_template"; @@ -488,15 +498,15 @@ constexpr const char *const MQTT_TEMPERATURE_STATE_TEMPLATE = "temperature_state constexpr const char *const MQTT_TEMPERATURE_STATE_TOPIC = "temperature_state_topic"; constexpr const char *const MQTT_TEMPERATURE_UNIT = "temperature_unit"; constexpr const char *const MQTT_TILT_CLOSED_VALUE = "tilt_closed_value"; -constexpr const char *const MQTT_TILT_COMMAND_TOPIC = "tilt_command_topic"; constexpr const char *const MQTT_TILT_COMMAND_TEMPLATE = "tilt_command_template"; +constexpr const char *const MQTT_TILT_COMMAND_TOPIC = "tilt_command_topic"; constexpr const char *const MQTT_TILT_INVERT_STATE = "tilt_invert_state"; constexpr const char *const MQTT_TILT_MAX = "tilt_max"; constexpr const char *const MQTT_TILT_MIN = "tilt_min"; constexpr const char *const MQTT_TILT_OPENED_VALUE = "tilt_opened_value"; constexpr const char *const MQTT_TILT_OPTIMISTIC = "tilt_optimistic"; -constexpr const char *const MQTT_TILT_STATUS_TOPIC = "tilt_status_topic"; constexpr const char *const MQTT_TILT_STATUS_TEMPLATE = "tilt_status_template"; +constexpr const char *const MQTT_TILT_STATUS_TOPIC = "tilt_status_topic"; constexpr const char *const MQTT_TOPIC = "topic"; constexpr const char *const MQTT_UNIQUE_ID = "unique_id"; constexpr const char *const MQTT_UNIT_OF_MEASUREMENT = "unit_of_measurement"; @@ -511,19 +521,8 @@ constexpr const char *const MQTT_XY_COMMAND_TOPIC = "xy_command_topic"; constexpr const char *const MQTT_XY_STATE_TOPIC = "xy_state_topic"; constexpr const char *const MQTT_XY_VALUE_TEMPLATE = "xy_value_template"; -constexpr const char *const MQTT_DEVICE_CONNECTIONS = "connections"; -constexpr const char *const MQTT_DEVICE_IDENTIFIERS = "identifiers"; -constexpr const char *const MQTT_DEVICE_NAME = "name"; -constexpr const char *const MQTT_DEVICE_MANUFACTURER = "manufacturer"; -constexpr const char *const MQTT_DEVICE_MODEL = "model"; -constexpr const char *const MQTT_DEVICE_SW_VERSION = "sw_version"; -constexpr const char *const MQTT_DEVICE_SUGGESTED_AREA = "suggested_area"; #endif -// Additional MQTT fields where no abbreviation is defined in HA source -constexpr const char *const MQTT_ENTITY_CATEGORY = "entity_category"; -constexpr const char *const MQTT_MODE = "mode"; - } // namespace mqtt } // namespace esphome From b03d0f37a43e177174316f786586623629efe749 Mon Sep 17 00:00:00 2001 From: Mike La Spina Date: Tue, 23 Apr 2024 21:01:28 -0500 Subject: [PATCH 073/313] Limit Rx wait loop time to 3 seconds. (#6594) Co-authored-by: descipher --- esphome/components/ld2420/ld2420.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/esphome/components/ld2420/ld2420.cpp b/esphome/components/ld2420/ld2420.cpp index 58c9a289a3..e57fdbc84e 100644 --- a/esphome/components/ld2420/ld2420.cpp +++ b/esphome/components/ld2420/ld2420.cpp @@ -493,19 +493,16 @@ void LD2420Component::handle_ack_data_(uint8_t *buffer, int len) { } int LD2420Component::send_cmd_from_array(CmdFrameT frame) { + uint32_t start_millis = millis(); uint8_t error = 0; uint8_t ack_buffer[64]; uint8_t cmd_buffer[64]; - uint16_t loop_count; this->cmd_reply_.ack = false; if (frame.command != CMD_RESTART) this->set_cmd_active_(true); // Restart does not reply, thus no ack state required. uint8_t retry = 3; while (retry) { - // TODO setup a dynamic method e.g. millis time count etc. to tune for non ESP32 240Mhz devices - // this is ok for now since the module firmware is changing like the weather atm frame.length = 0; - loop_count = 1250; uint16_t frame_data_bytes = frame.data_length + 2; // Always add two bytes for the cmd size memcpy(&cmd_buffer[frame.length], &frame.header, sizeof(frame.header)); @@ -538,12 +535,13 @@ int LD2420Component::send_cmd_from_array(CmdFrameT frame) { this->readline_(read(), ack_buffer, sizeof(ack_buffer)); } delay_microseconds_safe(1450); - if (loop_count <= 0) { + // Wait on an Rx from the LD2420 for up to 3 1 second loops, otherwise it could trigger a WDT. + if ((millis() - start_millis) > 1000) { + start_millis = millis(); error = LD2420_ERROR_TIMEOUT; retry--; break; } - loop_count--; } if (this->cmd_reply_.ack) retry = 0; From c531a528f0fd56d0778921aad96a01df80062222 Mon Sep 17 00:00:00 2001 From: David Friedland Date: Tue, 23 Apr 2024 19:35:26 -0700 Subject: [PATCH 074/313] Event entity support (#6451) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 2 + esphome/components/api/api.proto | 26 +++ esphome/components/api/api_connection.cpp | 24 +++ esphome/components/api/api_connection.h | 5 + esphome/components/api/api_pb2.cpp | 151 ++++++++++++++++++ esphome/components/api/api_pb2.h | 34 ++++ esphome/components/api/api_pb2_service.cpp | 16 ++ esphome/components/api/api_pb2_service.h | 6 + esphome/components/api/api_server.cpp | 7 + esphome/components/api/api_server.h | 3 + esphome/components/api/list_entities.cpp | 3 + esphome/components/api/list_entities.h | 3 + esphome/components/api/subscribe_state.h | 3 + esphome/components/event/__init__.py | 134 ++++++++++++++++ esphome/components/event/automation.h | 25 +++ esphome/components/event/event.cpp | 24 +++ esphome/components/event/event.h | 37 +++++ esphome/components/mqtt/__init__.py | 1 + esphome/components/mqtt/mqtt_const.h | 4 + esphome/components/mqtt/mqtt_event.cpp | 54 +++++++ esphome/components/mqtt/mqtt_event.h | 39 +++++ esphome/components/template/event/__init__.py | 24 +++ .../template/event/template_event.h | 12 ++ .../components/web_server/list_entities.cpp | 9 ++ esphome/components/web_server/list_entities.h | 3 + esphome/components/web_server/web_server.cpp | 22 +++ esphome/components/web_server/web_server.h | 7 + esphome/const.py | 5 + esphome/core/application.h | 20 +++ esphome/core/component_iterator.cpp | 15 ++ esphome/core/component_iterator.h | 6 + esphome/core/controller.cpp | 6 + esphome/core/controller.h | 6 + esphome/core/defines.h | 1 + script/ci-custom.py | 1 + tests/components/event/test.esp32-c3-idf.yaml | 9 ++ tests/components/event/test.esp32-c3.yaml | 9 ++ tests/components/event/test.esp32-idf.yaml | 9 ++ tests/components/event/test.esp32.yaml | 9 ++ tests/components/event/test.esp8266.yaml | 9 ++ tests/components/event/test.rp2040.yaml | 9 ++ 41 files changed, 792 insertions(+) create mode 100644 esphome/components/event/__init__.py create mode 100644 esphome/components/event/automation.h create mode 100644 esphome/components/event/event.cpp create mode 100644 esphome/components/event/event.h create mode 100644 esphome/components/mqtt/mqtt_event.cpp create mode 100644 esphome/components/mqtt/mqtt_event.h create mode 100644 esphome/components/template/event/__init__.py create mode 100644 esphome/components/template/event/template_event.h create mode 100644 tests/components/event/test.esp32-c3-idf.yaml create mode 100644 tests/components/event/test.esp32-c3.yaml create mode 100644 tests/components/event/test.esp32-idf.yaml create mode 100644 tests/components/event/test.esp32.yaml create mode 100644 tests/components/event/test.esp8266.yaml create mode 100644 tests/components/event/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 8da1618636..a60a5c3099 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -119,6 +119,7 @@ esphome/components/esp32_rmt/* @jesserockz esphome/components/esp32_rmt_led_strip/* @jesserockz esphome/components/esp8266/* @esphome/core esphome/components/ethernet_info/* @gtjadsonsantos +esphome/components/event/* @nohat esphome/components/exposure_notifications/* @OttoWinter esphome/components/ezo/* @ssieb esphome/components/ezo_pmp/* @carlos-sarmiento @@ -359,6 +360,7 @@ esphome/components/tee501/* @Stock-M esphome/components/teleinfo/* @0hax esphome/components/template/alarm_control_panel/* @grahambrown11 @hwstar esphome/components/template/datetime/* @rfdarter +esphome/components/template/event/* @nohat esphome/components/template/fan/* @ssieb esphome/components/text/* @mauritskorse esphome/components/thermostat/* @kbx81 diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index 12b7ef0958..17826ea7ed 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -1702,6 +1702,32 @@ message TimeCommandRequest { uint32 second = 4; } +// ==================== EVENT ==================== +message ListEntitiesEventResponse { + option (id) = 107; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_EVENT"; + + string object_id = 1; + fixed32 key = 2; + string name = 3; + string unique_id = 4; + + string icon = 5; + bool disabled_by_default = 6; + EntityCategory entity_category = 7; + string device_class = 8; + + repeated string event_types = 9; +} +message EventResponse { + option (id) = 108; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_EVENT"; + + fixed32 key = 1; + string event_type = 2; +} // ==================== VALVE ==================== message ListEntitiesValveResponse { diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 47136fff98..ec09604d95 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -1209,6 +1209,30 @@ void APIConnection::alarm_control_panel_command(const AlarmControlPanelCommandRe } #endif +#ifdef USE_EVENT +bool APIConnection::send_event(event::Event *event, std::string event_type) { + EventResponse resp{}; + resp.key = event->get_object_id_hash(); + resp.event_type = std::move(event_type); + return this->send_event_response(resp); +} +bool APIConnection::send_event_info(event::Event *event) { + ListEntitiesEventResponse msg; + msg.key = event->get_object_id_hash(); + msg.object_id = event->get_object_id(); + if (event->has_own_name()) + msg.name = event->get_name(); + msg.unique_id = get_default_unique_id("event", event); + msg.icon = event->get_icon(); + msg.disabled_by_default = event->is_disabled_by_default(); + msg.entity_category = static_cast(event->get_entity_category()); + msg.device_class = event->get_device_class(); + for (const auto &event_type : event->get_event_types()) + msg.event_types.push_back(event_type); + return this->send_list_entities_event_response(msg); +} +#endif + bool APIConnection::send_log_message(int level, const char *tag, const char *line) { if (this->log_subscription_ < level) return false; diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index af2dd9e681..2c1d733d3e 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -153,6 +153,11 @@ class APIConnection : public APIServerConnection { void alarm_control_panel_command(const AlarmControlPanelCommandRequest &msg) override; #endif +#ifdef USE_EVENT + bool send_event(event::Event *event, std::string event_type); + bool send_event_info(event::Event *event); +#endif + void on_disconnect_response(const DisconnectResponse &value) override; void on_ping_response(const PingResponse &value) override { // we initiated ping diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 508947ba24..3f01d88c58 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -7709,6 +7709,157 @@ void TimeCommandRequest::dump_to(std::string &out) const { out.append("}"); } #endif +bool ListEntitiesEventResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 6: { + this->disabled_by_default = value.as_bool(); + return true; + } + case 7: { + this->entity_category = value.as_enum(); + return true; + } + default: + return false; + } +} +bool ListEntitiesEventResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { + switch (field_id) { + case 1: { + this->object_id = value.as_string(); + return true; + } + case 3: { + this->name = value.as_string(); + return true; + } + case 4: { + this->unique_id = value.as_string(); + return true; + } + case 5: { + this->icon = value.as_string(); + return true; + } + case 8: { + this->device_class = value.as_string(); + return true; + } + case 9: { + this->event_types.push_back(value.as_string()); + return true; + } + default: + return false; + } +} +bool ListEntitiesEventResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 2: { + this->key = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void ListEntitiesEventResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_string(1, this->object_id); + buffer.encode_fixed32(2, this->key); + buffer.encode_string(3, this->name); + buffer.encode_string(4, this->unique_id); + buffer.encode_string(5, this->icon); + buffer.encode_bool(6, this->disabled_by_default); + buffer.encode_enum(7, this->entity_category); + buffer.encode_string(8, this->device_class); + for (auto &it : this->event_types) { + buffer.encode_string(9, it, true); + } +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void ListEntitiesEventResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("ListEntitiesEventResponse {\n"); + out.append(" object_id: "); + out.append("'").append(this->object_id).append("'"); + out.append("\n"); + + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" name: "); + out.append("'").append(this->name).append("'"); + out.append("\n"); + + out.append(" unique_id: "); + out.append("'").append(this->unique_id).append("'"); + out.append("\n"); + + out.append(" icon: "); + out.append("'").append(this->icon).append("'"); + out.append("\n"); + + out.append(" disabled_by_default: "); + out.append(YESNO(this->disabled_by_default)); + out.append("\n"); + + out.append(" entity_category: "); + out.append(proto_enum_to_string(this->entity_category)); + out.append("\n"); + + out.append(" device_class: "); + out.append("'").append(this->device_class).append("'"); + out.append("\n"); + + for (const auto &it : this->event_types) { + out.append(" event_types: "); + out.append("'").append(it).append("'"); + out.append("\n"); + } + out.append("}"); +} +#endif +bool EventResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { + switch (field_id) { + case 2: { + this->event_type = value.as_string(); + return true; + } + default: + return false; + } +} +bool EventResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 1: { + this->key = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void EventResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_fixed32(1, this->key); + buffer.encode_string(2, this->event_type); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void EventResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("EventResponse {\n"); + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" event_type: "); + out.append("'").append(this->event_type).append("'"); + out.append("\n"); + out.append("}"); +} +#endif bool ListEntitiesValveResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { switch (field_id) { case 6: { diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 950ffcdc88..9a6aab254d 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -1974,6 +1974,40 @@ class TimeCommandRequest : public ProtoMessage { bool decode_32bit(uint32_t field_id, Proto32Bit value) override; bool decode_varint(uint32_t field_id, ProtoVarInt value) override; }; +class ListEntitiesEventResponse : public ProtoMessage { + public: + std::string object_id{}; + uint32_t key{0}; + std::string name{}; + std::string unique_id{}; + std::string icon{}; + bool disabled_by_default{false}; + enums::EntityCategory entity_category{}; + std::string device_class{}; + std::vector event_types{}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; +class EventResponse : public ProtoMessage { + public: + uint32_t key{0}; + std::string event_type{}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; +}; class ListEntitiesValveResponse : public ProtoMessage { public: std::string object_id{}; diff --git a/esphome/components/api/api_pb2_service.cpp b/esphome/components/api/api_pb2_service.cpp index 4b8b8cf5ae..ced81fa643 100644 --- a/esphome/components/api/api_pb2_service.cpp +++ b/esphome/components/api/api_pb2_service.cpp @@ -557,6 +557,22 @@ bool APIServerConnectionBase::send_time_state_response(const TimeStateResponse & #endif #ifdef USE_DATETIME_TIME #endif +#ifdef USE_EVENT +bool APIServerConnectionBase::send_list_entities_event_response(const ListEntitiesEventResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_list_entities_event_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 107); +} +#endif +#ifdef USE_EVENT +bool APIServerConnectionBase::send_event_response(const EventResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_event_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 108); +} +#endif #ifdef USE_VALVE bool APIServerConnectionBase::send_list_entities_valve_response(const ListEntitiesValveResponse &msg) { #ifdef HAS_PROTO_MESSAGE_DUMP diff --git a/esphome/components/api/api_pb2_service.h b/esphome/components/api/api_pb2_service.h index 9f1d711257..c8b2bc5789 100644 --- a/esphome/components/api/api_pb2_service.h +++ b/esphome/components/api/api_pb2_service.h @@ -280,6 +280,12 @@ class APIServerConnectionBase : public ProtoService { #ifdef USE_DATETIME_TIME virtual void on_time_command_request(const TimeCommandRequest &value){}; #endif +#ifdef USE_EVENT + bool send_list_entities_event_response(const ListEntitiesEventResponse &msg); +#endif +#ifdef USE_EVENT + bool send_event_response(const EventResponse &msg); +#endif #ifdef USE_VALVE bool send_list_entities_valve_response(const ListEntitiesValveResponse &msg); #endif diff --git a/esphome/components/api/api_server.cpp b/esphome/components/api/api_server.cpp index 457eeb1229..6d4e4db1e8 100644 --- a/esphome/components/api/api_server.cpp +++ b/esphome/components/api/api_server.cpp @@ -318,6 +318,13 @@ void APIServer::on_media_player_update(media_player::MediaPlayer *obj) { } #endif +#ifdef USE_EVENT +void APIServer::on_event(event::Event *obj, const std::string &event_type) { + for (auto &c : this->clients_) + c->send_event(obj, event_type); +} +#endif + float APIServer::get_setup_priority() const { return setup_priority::AFTER_WIFI; } void APIServer::set_port(uint16_t port) { this->port_ = port; } APIServer *global_api_server = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) diff --git a/esphome/components/api/api_server.h b/esphome/components/api/api_server.h index d64643b961..e9e03cde0d 100644 --- a/esphome/components/api/api_server.h +++ b/esphome/components/api/api_server.h @@ -96,6 +96,9 @@ class APIServer : public Component, public Controller { #ifdef USE_ALARM_CONTROL_PANEL void on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj) override; #endif +#ifdef USE_EVENT + void on_event(event::Event *obj, const std::string &event_type) override; +#endif bool is_connected() const; diff --git a/esphome/components/api/list_entities.cpp b/esphome/components/api/list_entities.cpp index d6ff8e5557..82bfd45333 100644 --- a/esphome/components/api/list_entities.cpp +++ b/esphome/components/api/list_entities.cpp @@ -89,6 +89,9 @@ bool ListEntitiesIterator::on_alarm_control_panel(alarm_control_panel::AlarmCont return this->client_->send_alarm_control_panel_info(a_alarm_control_panel); } #endif +#ifdef USE_EVENT +bool ListEntitiesIterator::on_event(event::Event *event) { return this->client_->send_event_info(event); } +#endif } // namespace api } // namespace esphome diff --git a/esphome/components/api/list_entities.h b/esphome/components/api/list_entities.h index 5d0c243f4a..19cd99ea01 100644 --- a/esphome/components/api/list_entities.h +++ b/esphome/components/api/list_entities.h @@ -69,6 +69,9 @@ class ListEntitiesIterator : public ComponentIterator { #endif #ifdef USE_ALARM_CONTROL_PANEL bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; +#endif +#ifdef USE_EVENT + bool on_event(event::Event *event) override; #endif bool on_end() override; diff --git a/esphome/components/api/subscribe_state.h b/esphome/components/api/subscribe_state.h index 8d50e0d89a..17d444c441 100644 --- a/esphome/components/api/subscribe_state.h +++ b/esphome/components/api/subscribe_state.h @@ -66,6 +66,9 @@ class InitialStateIterator : public ComponentIterator { #endif #ifdef USE_ALARM_CONTROL_PANEL bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; +#endif +#ifdef USE_EVENT + bool on_event(event::Event *event) override { return true; }; #endif protected: APIConnection *client_; diff --git a/esphome/components/event/__init__.py b/esphome/components/event/__init__.py new file mode 100644 index 0000000000..789f121cf3 --- /dev/null +++ b/esphome/components/event/__init__.py @@ -0,0 +1,134 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import automation +from esphome.components import mqtt +from esphome.const import ( + CONF_DEVICE_CLASS, + CONF_ENTITY_CATEGORY, + CONF_ICON, + CONF_ID, + CONF_ON_EVENT, + CONF_TRIGGER_ID, + CONF_MQTT_ID, + CONF_EVENT_TYPE, + DEVICE_CLASS_BUTTON, + DEVICE_CLASS_DOORBELL, + DEVICE_CLASS_EMPTY, + DEVICE_CLASS_MOTION, +) +from esphome.core import CORE, coroutine_with_priority +from esphome.cpp_helpers import setup_entity +from esphome.cpp_generator import MockObjClass + +CODEOWNERS = ["@nohat"] +IS_PLATFORM_COMPONENT = True + +DEVICE_CLASSES = [ + DEVICE_CLASS_BUTTON, + DEVICE_CLASS_EMPTY, + DEVICE_CLASS_DOORBELL, + DEVICE_CLASS_MOTION, +] + +event_ns = cg.esphome_ns.namespace("event") +Event = event_ns.class_("Event", cg.EntityBase) +EventPtr = Event.operator("ptr") + +TriggerEventAction = event_ns.class_("TriggerEventAction", automation.Action) + +EventTrigger = event_ns.class_("EventTrigger", automation.Trigger.template()) + +validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_") + +EVENT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTEventComponent), + cv.GenerateID(): cv.declare_id(Event), + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + cv.Optional(CONF_ON_EVENT): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(EventTrigger), + } + ), + } +) + +_UNDEF = object() + + +def event_schema( + class_: MockObjClass = _UNDEF, + *, + icon: str = _UNDEF, + entity_category: str = _UNDEF, + device_class: str = _UNDEF, +) -> cv.Schema: + schema = {} + + if class_ is not _UNDEF: + schema[cv.GenerateID()] = cv.declare_id(class_) + + for key, default, validator in [ + (CONF_ICON, icon, cv.icon), + (CONF_ENTITY_CATEGORY, entity_category, cv.entity_category), + (CONF_DEVICE_CLASS, device_class, validate_device_class), + ]: + if default is not _UNDEF: + schema[cv.Optional(key, default=default)] = validator + + return EVENT_SCHEMA.extend(schema) + + +async def setup_event_core_(var, config, *, event_types: list[str]): + await setup_entity(var, config) + + for conf in config.get(CONF_ON_EVENT, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation( + trigger, [(cg.std_string, "event_type")], conf + ) + + cg.add(var.set_event_types(event_types)) + + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: + cg.add(var.set_device_class(device_class)) + + if mqtt_id := config.get(CONF_MQTT_ID): + mqtt_ = cg.new_Pvariable(mqtt_id, var) + await mqtt.register_mqtt_component(mqtt_, config) + + +async def register_event(var, config, *, event_types: list[str]): + if not CORE.has_id(config[CONF_ID]): + var = cg.Pvariable(config[CONF_ID], var) + cg.add(cg.App.register_event(var)) + await setup_event_core_(var, config, event_types=event_types) + + +async def new_event(config, *, event_types: list[str]): + var = cg.new_Pvariable(config[CONF_ID]) + await register_event(var, config, event_types=event_types) + return var + + +TRIGGER_EVENT_SCHEMA = cv.Schema( + { + cv.Required(CONF_ID): cv.use_id(Event), + cv.Required(CONF_EVENT_TYPE): cv.templatable(cv.string_strict), + } +) + + +@automation.register_action("event.trigger", TriggerEventAction, TRIGGER_EVENT_SCHEMA) +async def event_fire_to_code(config, action_id, template_arg, args): + var = cg.new_Pvariable(action_id, template_arg) + await cg.register_parented(var, config[CONF_ID]) + templ = await cg.templatable(config[CONF_EVENT_TYPE], args, cg.std_string) + cg.add(var.set_event_type(templ)) + return var + + +@coroutine_with_priority(100.0) +async def to_code(config): + cg.add_define("USE_EVENT") + cg.add_global(event_ns.using) diff --git a/esphome/components/event/automation.h b/esphome/components/event/automation.h new file mode 100644 index 0000000000..9ebcb654a0 --- /dev/null +++ b/esphome/components/event/automation.h @@ -0,0 +1,25 @@ +#pragma once + +#include "esphome/components/event/event.h" +#include "esphome/core/automation.h" +#include "esphome/core/component.h" + +namespace esphome { +namespace event { + +template class TriggerEventAction : public Action, public Parented { + public: + TEMPLATABLE_VALUE(std::string, event_type) + + void play(Ts... x) override { this->parent_->trigger(this->event_type_.value(x...)); } +}; + +class EventTrigger : public Trigger { + public: + EventTrigger(Event *event) { + event->add_on_event_callback([this](const std::string &event_type) { this->trigger(event_type); }); + } +}; + +} // namespace event +} // namespace esphome diff --git a/esphome/components/event/event.cpp b/esphome/components/event/event.cpp new file mode 100644 index 0000000000..061afcb026 --- /dev/null +++ b/esphome/components/event/event.cpp @@ -0,0 +1,24 @@ +#include "event.h" + +#include "esphome/core/log.h" + +namespace esphome { +namespace event { + +static const char *const TAG = "event"; + +void Event::trigger(const std::string &event_type) { + if (types_.find(event_type) == types_.end()) { + ESP_LOGE(TAG, "'%s': invalid event type for trigger(): %s", this->get_name().c_str(), event_type.c_str()); + return; + } + ESP_LOGD(TAG, "'%s' Triggered event '%s'", this->get_name().c_str(), event_type.c_str()); + this->event_callback_.call(event_type); +} + +void Event::add_on_event_callback(std::function &&callback) { + this->event_callback_.add(std::move(callback)); +} + +} // namespace event +} // namespace esphome diff --git a/esphome/components/event/event.h b/esphome/components/event/event.h new file mode 100644 index 0000000000..067a867360 --- /dev/null +++ b/esphome/components/event/event.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include + +#include "esphome/core/component.h" +#include "esphome/core/entity_base.h" +#include "esphome/core/helpers.h" + +namespace esphome { +namespace event { + +#define LOG_EVENT(prefix, type, obj) \ + if ((obj) != nullptr) { \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + if (!(obj)->get_icon().empty()) { \ + ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \ + } \ + if (!(obj)->get_device_class().empty()) { \ + ESP_LOGCONFIG(TAG, "%s Device Class: '%s'", prefix, (obj)->get_device_class().c_str()); \ + } \ + } + +class Event : public EntityBase, public EntityBase_DeviceClass { + public: + void trigger(const std::string &event_type); + void set_event_types(const std::set &event_types) { this->types_ = event_types; } + std::set get_event_types() const { return this->types_; } + void add_on_event_callback(std::function &&callback); + + protected: + CallbackManager event_callback_; + std::set types_; +}; + +} // namespace event +} // namespace esphome diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index 72ee81dbbc..7a42140ef6 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -119,6 +119,7 @@ MQTTTextComponent = mqtt_ns.class_("MQTTTextComponent", MQTTComponent) MQTTSelectComponent = mqtt_ns.class_("MQTTSelectComponent", MQTTComponent) MQTTButtonComponent = mqtt_ns.class_("MQTTButtonComponent", MQTTComponent) MQTTLockComponent = mqtt_ns.class_("MQTTLockComponent", MQTTComponent) +MQTTEventComponent = mqtt_ns.class_("MQTTEventComponent", MQTTComponent) MQTTValveComponent = mqtt_ns.class_("MQTTValveComponent", MQTTComponent) MQTTDiscoveryUniqueIdGenerator = mqtt_ns.enum("MQTTDiscoveryUniqueIdGenerator") diff --git a/esphome/components/mqtt/mqtt_const.h b/esphome/components/mqtt/mqtt_const.h index 2209f96e7a..66872680bb 100644 --- a/esphome/components/mqtt/mqtt_const.h +++ b/esphome/components/mqtt/mqtt_const.h @@ -73,6 +73,8 @@ constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "en"; constexpr const char *const MQTT_ENTITY_CATEGORY = "ent_cat"; constexpr const char *const MQTT_ERROR_TEMPLATE = "err_tpl"; constexpr const char *const MQTT_ERROR_TOPIC = "err_t"; +constexpr const char *const MQTT_EVENT_TYPE = "event_type"; +constexpr const char *const MQTT_EVENT_TYPES = "evt_typ"; constexpr const char *const MQTT_EXPIRE_AFTER = "exp_aft"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TEMPLATE = "fan_mode_cmd_tpl"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TOPIC = "fan_mode_cmd_t"; @@ -330,6 +332,8 @@ constexpr const char *const MQTT_ENABLED_BY_DEFAULT = "enabled_by_default"; constexpr const char *const MQTT_ENTITY_CATEGORY = "entity_category"; constexpr const char *const MQTT_ERROR_TEMPLATE = "error_template"; constexpr const char *const MQTT_ERROR_TOPIC = "error_topic"; +constexpr const char *const MQTT_EVENT_TYPE = "event_type"; +constexpr const char *const MQTT_EVENT_TYPES = "event_types"; constexpr const char *const MQTT_EXPIRE_AFTER = "expire_after"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TEMPLATE = "fan_mode_command_template"; constexpr const char *const MQTT_FAN_MODE_COMMAND_TOPIC = "fan_mode_command_topic"; diff --git a/esphome/components/mqtt/mqtt_event.cpp b/esphome/components/mqtt/mqtt_event.cpp new file mode 100644 index 0000000000..cf0b90e3d6 --- /dev/null +++ b/esphome/components/mqtt/mqtt_event.cpp @@ -0,0 +1,54 @@ +#include "mqtt_event.h" +#include "esphome/core/log.h" + +#include "mqtt_const.h" + +#ifdef USE_MQTT +#ifdef USE_EVENT + +namespace esphome { +namespace mqtt { + +static const char *const TAG = "mqtt.event"; + +using namespace esphome::event; + +MQTTEventComponent::MQTTEventComponent(event::Event *event) : event_(event) {} + +void MQTTEventComponent::send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) { + JsonArray event_types = root.createNestedArray(MQTT_EVENT_TYPES); + for (const auto &event_type : this->event_->get_event_types()) + event_types.add(event_type); + + if (!this->event_->get_device_class().empty()) + root[MQTT_DEVICE_CLASS] = this->event_->get_device_class(); + + config.command_topic = false; +} + +void MQTTEventComponent::setup() { + this->event_->add_on_event_callback([this](const std::string &event_type) { this->publish_event_(event_type); }); +} + +void MQTTEventComponent::dump_config() { + ESP_LOGCONFIG(TAG, "MQTT Event '%s': ", this->event_->get_name().c_str()); + ESP_LOGCONFIG(TAG, "Event Types: "); + for (const auto &event_type : this->event_->get_event_types()) { + ESP_LOGCONFIG(TAG, "- %s", event_type.c_str()); + } + LOG_MQTT_COMPONENT(true, true); +} + +bool MQTTEventComponent::publish_event_(const std::string &event_type) { + return this->publish_json(this->get_state_topic_(), + [event_type](JsonObject root) { root[MQTT_EVENT_TYPE] = event_type; }); +} + +std::string MQTTEventComponent::component_type() const { return "event"; } +const EntityBase *MQTTEventComponent::get_entity() const { return this->event_; } + +} // namespace mqtt +} // namespace esphome + +#endif +#endif // USE_MQTT diff --git a/esphome/components/mqtt/mqtt_event.h b/esphome/components/mqtt/mqtt_event.h new file mode 100644 index 0000000000..4335820e53 --- /dev/null +++ b/esphome/components/mqtt/mqtt_event.h @@ -0,0 +1,39 @@ +#pragma once + +#include "esphome/core/defines.h" + +#ifdef USE_MQTT +#ifdef USE_EVENT + +#include "esphome/components/event/event.h" +#include "mqtt_component.h" + +namespace esphome { +namespace mqtt { + +class MQTTEventComponent : public mqtt::MQTTComponent { + public: + explicit MQTTEventComponent(event::Event *event); + + void send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) override; + + void setup() override; + + void dump_config() override; + + /// Events do not send a state so just return true. + bool send_initial_state() override { return true; } + + protected: + bool publish_event_(const std::string &event_type); + std::string component_type() const override; + const EntityBase *get_entity() const override; + + event::Event *event_; +}; + +} // namespace mqtt +} // namespace esphome + +#endif +#endif // USE_MQTT diff --git a/esphome/components/template/event/__init__.py b/esphome/components/template/event/__init__.py new file mode 100644 index 0000000000..2a948cfdfd --- /dev/null +++ b/esphome/components/template/event/__init__.py @@ -0,0 +1,24 @@ +import esphome.config_validation as cv + +from esphome.components import event + +import esphome.codegen as cg + +from esphome.const import CONF_EVENT_TYPES + +from .. import template_ns + +CODEOWNERS = ["@nohat"] + +TemplateEvent = template_ns.class_("TemplateEvent", event.Event, cg.Component) + +CONFIG_SCHEMA = event.event_schema(TemplateEvent).extend( + { + cv.Required(CONF_EVENT_TYPES): cv.ensure_list(cv.string_strict), + } +) + + +async def to_code(config): + var = await event.new_event(config, event_types=config[CONF_EVENT_TYPES]) + await cg.register_component(var, config) diff --git a/esphome/components/template/event/template_event.h b/esphome/components/template/event/template_event.h new file mode 100644 index 0000000000..251ae9299b --- /dev/null +++ b/esphome/components/template/event/template_event.h @@ -0,0 +1,12 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/event/event.h" + +namespace esphome { +namespace template_ { + +class TemplateEvent : public Component, public event::Event {}; + +} // namespace template_ +} // namespace esphome diff --git a/esphome/components/web_server/list_entities.cpp b/esphome/components/web_server/list_entities.cpp index 13e396dc82..8d08783c8c 100644 --- a/esphome/components/web_server/list_entities.cpp +++ b/esphome/components/web_server/list_entities.cpp @@ -159,5 +159,14 @@ bool ListEntitiesIterator::on_alarm_control_panel(alarm_control_panel::AlarmCont } #endif +#ifdef USE_EVENT +bool ListEntitiesIterator::on_event(event::Event *event) { + // Null event type, since we are just iterating over entities + const std::string null_event_type = ""; + this->web_server_->events_.send(this->web_server_->event_json(event, null_event_type, DETAIL_ALL).c_str(), "state"); + return true; +} +#endif + } // namespace web_server } // namespace esphome diff --git a/esphome/components/web_server/list_entities.h b/esphome/components/web_server/list_entities.h index d0b8dda233..af84cb1d2b 100644 --- a/esphome/components/web_server/list_entities.h +++ b/esphome/components/web_server/list_entities.h @@ -62,6 +62,9 @@ class ListEntitiesIterator : public ComponentIterator { #ifdef USE_ALARM_CONTROL_PANEL bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) override; #endif +#ifdef USE_EVENT + bool on_event(event::Event *event) override; +#endif protected: WebServer *web_server_; diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 412f8816ee..0202038ffc 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -1352,6 +1352,28 @@ void WebServer::handle_alarm_control_panel_request(AsyncWebServerRequest *reques } #endif +#ifdef USE_EVENT +void WebServer::on_event(event::Event *obj, const std::string &event_type) { + this->events_.send(this->event_json(obj, event_type, DETAIL_STATE).c_str(), "state"); +} + +std::string WebServer::event_json(event::Event *obj, const std::string &event_type, JsonDetail start_config) { + return json::build_json([obj, event_type, start_config](JsonObject root) { + set_json_id(root, obj, "event-" + obj->get_object_id(), start_config); + if (!event_type.empty()) { + root["event_type"] = event_type; + } + if (start_config == DETAIL_ALL) { + JsonArray event_types = root.createNestedArray("event_types"); + for (auto const &event_type : obj->get_event_types()) { + event_types.add(event_type); + } + root["device_class"] = obj->get_device_class(); + } + }); +} +#endif + bool WebServer::canHandle(AsyncWebServerRequest *request) { if (request->url() == "/") return true; diff --git a/esphome/components/web_server/web_server.h b/esphome/components/web_server/web_server.h index 9f807efc43..5e8f3f8236 100644 --- a/esphome/components/web_server/web_server.h +++ b/esphome/components/web_server/web_server.h @@ -297,6 +297,13 @@ class WebServer : public Controller, public Component, public AsyncWebHandler { alarm_control_panel::AlarmControlPanelState value, JsonDetail start_config); #endif +#ifdef USE_EVENT + void on_event(event::Event *obj, const std::string &event_type) override; + + /// Dump the event details with its value as a JSON string. + std::string event_json(event::Event *obj, const std::string &event_type, JsonDetail start_config); +#endif + /// Override the web handler's canHandle method. bool canHandle(AsyncWebServerRequest *request) override; /// Override the web handler's handleRequest method. diff --git a/esphome/const.py b/esphome/const.py index 8410d36708..dfb7fe464c 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -251,6 +251,8 @@ CONF_ESP8266_DISABLE_SSL_SUPPORT = "esp8266_disable_ssl_support" CONF_ESPHOME = "esphome" CONF_ETHERNET = "ethernet" CONF_EVENT = "event" +CONF_EVENT_TYPE = "event_type" +CONF_EVENT_TYPES = "event_types" CONF_EXPIRE_AFTER = "expire_after" CONF_EXPORT_ACTIVE_ENERGY = "export_active_energy" CONF_EXPORT_REACTIVE_ENERGY = "export_reactive_energy" @@ -517,6 +519,7 @@ CONF_ON_DOUBLE_CLICK = "on_double_click" CONF_ON_ENROLLMENT_DONE = "on_enrollment_done" CONF_ON_ENROLLMENT_FAILED = "on_enrollment_failed" CONF_ON_ENROLLMENT_SCAN = "on_enrollment_scan" +CONF_ON_EVENT = "on_event" CONF_ON_FINGER_SCAN_INVALID = "on_finger_scan_invalid" CONF_ON_FINGER_SCAN_MATCHED = "on_finger_scan_matched" CONF_ON_FINGER_SCAN_MISPLACED = "on_finger_scan_misplaced" @@ -1024,6 +1027,7 @@ DEVICE_CLASS_AWNING = "awning" DEVICE_CLASS_BATTERY = "battery" DEVICE_CLASS_BATTERY_CHARGING = "battery_charging" DEVICE_CLASS_BLIND = "blind" +DEVICE_CLASS_BUTTON = "button" DEVICE_CLASS_CARBON_DIOXIDE = "carbon_dioxide" DEVICE_CLASS_CARBON_MONOXIDE = "carbon_monoxide" DEVICE_CLASS_COLD = "cold" @@ -1036,6 +1040,7 @@ DEVICE_CLASS_DATA_SIZE = "data_size" DEVICE_CLASS_DATE = "date" DEVICE_CLASS_DISTANCE = "distance" DEVICE_CLASS_DOOR = "door" +DEVICE_CLASS_DOORBELL = "doorbell" DEVICE_CLASS_DURATION = "duration" DEVICE_CLASS_EMPTY = "" DEVICE_CLASS_ENERGY = "energy" diff --git a/esphome/core/application.h b/esphome/core/application.h index ee931282a6..35df350ec3 100644 --- a/esphome/core/application.h +++ b/esphome/core/application.h @@ -63,6 +63,9 @@ #ifdef USE_ALARM_CONTROL_PANEL #include "esphome/components/alarm_control_panel/alarm_control_panel.h" #endif +#ifdef USE_EVENT +#include "esphome/components/event/event.h" +#endif namespace esphome { @@ -164,6 +167,10 @@ class Application { } #endif +#ifdef USE_EVENT + void register_event(event::Event *event) { this->events_.push_back(event); } +#endif + /// Register the component in this Application instance. template C *register_component(C *c) { static_assert(std::is_base_of::value, "Only Component subclasses can be registered"); @@ -386,6 +393,16 @@ class Application { } #endif +#ifdef USE_EVENT + const std::vector &get_events() { return this->events_; } + event::Event *get_event_by_key(uint32_t key, bool include_internal = false) { + for (auto *obj : this->events_) + if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal())) + return obj; + return nullptr; + } +#endif + Scheduler scheduler; protected: @@ -409,6 +426,9 @@ class Application { #ifdef USE_BUTTON std::vector buttons_{}; #endif +#ifdef USE_EVENT + std::vector events_{}; +#endif #ifdef USE_SENSOR std::vector sensors_{}; #endif diff --git a/esphome/core/component_iterator.cpp b/esphome/core/component_iterator.cpp index b00154c685..687f1f6e23 100644 --- a/esphome/core/component_iterator.cpp +++ b/esphome/core/component_iterator.cpp @@ -321,6 +321,21 @@ void ComponentIterator::advance() { } } break; +#endif +#ifdef USE_EVENT + case IteratorState::EVENT: + if (this->at_ >= App.get_events().size()) { + advance_platform = true; + } else { + auto *event = App.get_events()[this->at_]; + if (event->is_internal() && !this->include_internal_) { + success = true; + break; + } else { + success = this->on_event(event); + } + } + break; #endif case IteratorState::MAX: if (this->on_end()) { diff --git a/esphome/core/component_iterator.h b/esphome/core/component_iterator.h index 3fbbc0bc19..8f0398cbb3 100644 --- a/esphome/core/component_iterator.h +++ b/esphome/core/component_iterator.h @@ -80,6 +80,9 @@ class ComponentIterator { #endif #ifdef USE_ALARM_CONTROL_PANEL virtual bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) = 0; +#endif +#ifdef USE_EVENT + virtual bool on_event(event::Event *event) = 0; #endif virtual bool on_end(); @@ -146,6 +149,9 @@ class ComponentIterator { #endif #ifdef USE_ALARM_CONTROL_PANEL ALARM_CONTROL_PANEL, +#endif +#ifdef USE_EVENT + EVENT, #endif MAX, } state_{IteratorState::NONE}; diff --git a/esphome/core/controller.cpp b/esphome/core/controller.cpp index eab818bdb4..eb975eaf6f 100644 --- a/esphome/core/controller.cpp +++ b/esphome/core/controller.cpp @@ -109,6 +109,12 @@ void Controller::setup_controller(bool include_internal) { obj->add_on_state_callback([this, obj]() { this->on_alarm_control_panel_update(obj); }); } #endif +#ifdef USE_EVENT + for (auto *obj : App.get_events()) { + if (include_internal || !obj->is_internal()) + obj->add_on_event_callback([this, obj](const std::string &event_type) { this->on_event(obj, event_type); }); + } +#endif } } // namespace esphome diff --git a/esphome/core/controller.h b/esphome/core/controller.h index 94a4acb7c7..da9dbc00a6 100644 --- a/esphome/core/controller.h +++ b/esphome/core/controller.h @@ -55,6 +55,9 @@ #ifdef USE_ALARM_CONTROL_PANEL #include "esphome/components/alarm_control_panel/alarm_control_panel.h" #endif +#ifdef USE_EVENT +#include "esphome/components/event/event.h" +#endif namespace esphome { @@ -112,6 +115,9 @@ class Controller { #ifdef USE_ALARM_CONTROL_PANEL virtual void on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj){}; #endif +#ifdef USE_EVENT + virtual void on_event(event::Event *obj, const std::string &event_type){}; +#endif }; } // namespace esphome diff --git a/esphome/core/defines.h b/esphome/core/defines.h index 2064ca1356..fed73098d2 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -24,6 +24,7 @@ #define USE_CLIMATE #define USE_COVER #define USE_DEEP_SLEEP +#define USE_EVENT #define USE_FAN #define USE_GRAPH #define USE_HOMEASSISTANT_TIME diff --git a/script/ci-custom.py b/script/ci-custom.py index c591bfe5c3..27fcd480f5 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -624,6 +624,7 @@ def lint_trailing_whitespace(fname, match): "esphome/components/datetime/date_entity.h", "esphome/components/datetime/time_entity.h", "esphome/components/display/display.h", + "esphome/components/event/event.h", "esphome/components/fan/fan.h", "esphome/components/i2c/i2c.h", "esphome/components/lock/lock.h", diff --git a/tests/components/event/test.esp32-c3-idf.yaml b/tests/components/event/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.esp32-c3-idf.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.esp32-c3.yaml b/tests/components/event/test.esp32-c3.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.esp32-c3.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.esp32-idf.yaml b/tests/components/event/test.esp32-idf.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.esp32-idf.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.esp32.yaml b/tests/components/event/test.esp32.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.esp32.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.esp8266.yaml b/tests/components/event/test.esp8266.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.esp8266.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.rp2040.yaml b/tests/components/event/test.rp2040.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/test.rp2040.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired From 1ac855f2e0d38564678ffddeb4a8182e2fea5721 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 24 Apr 2024 14:49:16 +1200 Subject: [PATCH 075/313] Only check c/c++ files with clang-format (#6620) --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 15e59b7eb7..6f4bb52104 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,4 +39,4 @@ repos: rev: v13.0.1 hooks: - id: clang-format - + types_or: [c, c++] From a7079f8fba599da736a033885dcb112f2dc8ee05 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 24 Apr 2024 05:07:07 +0200 Subject: [PATCH 076/313] Added base64 helper (#4866) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/core/helpers.cpp | 97 ++++++++++++++++++++++++++++++++++++++++ esphome/core/helpers.h | 10 +++++ 2 files changed, 107 insertions(+) diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index 0f7afc6a4e..4368576301 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -433,6 +433,103 @@ int8_t step_to_accuracy_decimals(float step) { return str.length() - dot_pos - 1; } +static inline bool is_base64(char c) { return (isalnum(c) || (c == '+') || (c == '/')); } + +std::string base64_encode(const std::vector &buf) { return base64_encode(buf.data(), buf.size()); } + +std::string base64_encode(const char *buf, unsigned int buf_len) { + std::string ret; + int i = 0; + int j = 0; + char char_array_3[3]; + char char_array_4[4]; + + while (buf_len--) { + char_array_3[i++] = *(buf++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (i = 0; (i < 4); i++) + ret += BASE64_CHARS[char_array_4[i]]; + i = 0; + } + } + + if (i) { + for (j = i; j < 3; j++) + char_array_3[j] = '\0'; + + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (j = 0; (j < i + 1); j++) + ret += BASE64_CHARS[char_array_4[j]]; + + while ((i++ < 3)) + ret += '='; + } + + return ret; +} + +size_t base64_decode(const std::string &encoded_string, uint8_t *buf, size_t buf_len) { + std::vector decoded = base64_decode(encoded_string); + if (decoded.size() > buf_len) { + ESP_LOGW(TAG, "Base64 decode: buffer too small, truncating"); + decoded.resize(buf_len); + } + memcpy(buf, decoded.data(), decoded.size()); + return decoded.size(); +} + +std::vector base64_decode(const std::string &encoded_string) { + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in = 0; + uint8_t char_array_4[4], char_array_3[3]; + std::vector ret; + + while (in_len-- && (encoded_string[in] != '=') && is_base64(encoded_string[in])) { + char_array_4[i++] = encoded_string[in]; + in++; + if (i == 4) { + for (i = 0; i < 4; i++) + char_array_4[i] = BASE64_CHARS.find(char_array_4[i]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret.push_back(char_array_3[i]); + i = 0; + } + } + + if (i) { + for (j = i; j < 4; j++) + char_array_4[j] = 0; + + for (j = 0; j < 4; j++) + char_array_4[j] = BASE64_CHARS.find(char_array_4[j]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) + ret.push_back(char_array_3[j]); + } + + return ret; +} + // Colors float gamma_correct(float value, float gamma) { diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index c3ed443bf0..b2d72b0fab 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -435,6 +435,16 @@ std::string value_accuracy_to_string(float value, int8_t accuracy_decimals); /// Derive accuracy in decimals from an increment step. int8_t step_to_accuracy_decimals(float step); +static const std::string BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + +std::string base64_encode(const uint8_t *buf, size_t buf_len); +std::string base64_encode(const std::vector &buf); + +std::vector base64_decode(const std::string &encoded_string); +size_t base64_decode(std::string const &encoded_string, uint8_t *buf, size_t buf_len); + ///@} /// @name Colors From e2b0d561bc02c9b9707cb06aeae46bba522145a7 Mon Sep 17 00:00:00 2001 From: rforro Date: Wed, 24 Apr 2024 05:21:08 +0200 Subject: [PATCH 077/313] Add Roomba IR protocol (#4595) Co-authored-by: Richard Forro Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/remote_base/__init__.py | 39 +++++++++++++ .../remote_base/roomba_protocol.cpp | 56 +++++++++++++++++++ .../components/remote_base/roomba_protocol.h | 35 ++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 esphome/components/remote_base/roomba_protocol.cpp create mode 100644 esphome/components/remote_base/roomba_protocol.h diff --git a/esphome/components/remote_base/__init__.py b/esphome/components/remote_base/__init__.py index 6deab63c60..8a1d50d1c6 100644 --- a/esphome/components/remote_base/__init__.py +++ b/esphome/components/remote_base/__init__.py @@ -881,6 +881,45 @@ async def pronto_action(var, config, args): cg.add(var.set_data(template_)) +# Roomba +( + RoombaData, + RoombaBinarySensor, + RoombaTrigger, + RoombaAction, + RoombaDumper, +) = declare_protocol("Roomba") +ROOMBA_SCHEMA = cv.Schema({cv.Required(CONF_DATA): cv.hex_uint8_t}) + + +@register_binary_sensor("roomba", RoombaBinarySensor, ROOMBA_SCHEMA) +def roomba_binary_sensor(var, config): + cg.add( + var.set_data( + cg.StructInitializer( + RoombaData, + ("data", config[CONF_DATA]), + ) + ) + ) + + +@register_trigger("roomba", RoombaTrigger, RoombaData) +def roomba_trigger(var, config): + pass + + +@register_dumper("roomba", RoombaDumper) +def roomba_dumper(var, config): + pass + + +@register_action("roomba", RoombaAction, ROOMBA_SCHEMA) +async def roomba_action(var, config, args): + template_ = await cg.templatable(config[CONF_DATA], args, cg.uint8) + cg.add(var.set_data(template_)) + + # Sony SonyData, SonyBinarySensor, SonyTrigger, SonyAction, SonyDumper = declare_protocol( "Sony" diff --git a/esphome/components/remote_base/roomba_protocol.cpp b/esphome/components/remote_base/roomba_protocol.cpp new file mode 100644 index 0000000000..2d2dde114a --- /dev/null +++ b/esphome/components/remote_base/roomba_protocol.cpp @@ -0,0 +1,56 @@ +#include "roomba_protocol.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace remote_base { + +static const char *const TAG = "remote.roomba"; + +static const uint8_t NBITS = 8; +static const uint32_t BIT_ONE_HIGH_US = 3000; +static const uint32_t BIT_ONE_LOW_US = 1000; +static const uint32_t BIT_ZERO_HIGH_US = BIT_ONE_LOW_US; +static const uint32_t BIT_ZERO_LOW_US = BIT_ONE_HIGH_US; + +void RoombaProtocol::encode(RemoteTransmitData *dst, const RoombaData &data) { + dst->set_carrier_frequency(38000); + dst->reserve(NBITS * 2u); + + for (uint32_t mask = 1UL << (NBITS - 1); mask != 0; mask >>= 1) { + if (data.data & mask) { + dst->item(BIT_ONE_HIGH_US, BIT_ONE_LOW_US); + } else { + dst->item(BIT_ZERO_HIGH_US, BIT_ZERO_LOW_US); + } + } +} +optional RoombaProtocol::decode(RemoteReceiveData src) { + RoombaData out{.data = 0}; + + for (uint8_t i = 0; i < (NBITS - 1); i++) { + out.data <<= 1UL; + if (src.expect_item(BIT_ONE_HIGH_US, BIT_ONE_LOW_US)) { + out.data |= 1UL; + } else if (src.expect_item(BIT_ZERO_HIGH_US, BIT_ZERO_LOW_US)) { + out.data |= 0UL; + } else { + return {}; + } + } + + // not possible to measure space on last bit, check only mark + out.data <<= 1UL; + if (src.expect_mark(BIT_ONE_HIGH_US)) { + out.data |= 1UL; + } else if (src.expect_mark(BIT_ZERO_HIGH_US)) { + out.data |= 0UL; + } else { + return {}; + } + + return out; +} +void RoombaProtocol::dump(const RoombaData &data) { ESP_LOGD(TAG, "Received Roomba: data=0x%02X", data.data); } + +} // namespace remote_base +} // namespace esphome diff --git a/esphome/components/remote_base/roomba_protocol.h b/esphome/components/remote_base/roomba_protocol.h new file mode 100644 index 0000000000..f94cb7df1b --- /dev/null +++ b/esphome/components/remote_base/roomba_protocol.h @@ -0,0 +1,35 @@ +#pragma once + +#include "remote_base.h" + +namespace esphome { +namespace remote_base { + +struct RoombaData { + uint8_t data; + + bool operator==(const RoombaData &rhs) const { return data == rhs.data; } +}; + +class RoombaProtocol : public RemoteProtocol { + public: + void encode(RemoteTransmitData *dst, const RoombaData &data) override; + optional decode(RemoteReceiveData src) override; + void dump(const RoombaData &data) override; +}; + +DECLARE_REMOTE_PROTOCOL(Roomba) + +template class RoombaAction : public RemoteTransmitterActionBase { + public: + TEMPLATABLE_VALUE(uint8_t, data) + + void encode(RemoteTransmitData *dst, Ts... x) override { + RoombaData data{}; + data.data = this->data_.value(x...); + RoombaProtocol().encode(dst, data); + } +}; + +} // namespace remote_base +} // namespace esphome From 1775c73e53f991194fdb318022ece516255c5ce6 Mon Sep 17 00:00:00 2001 From: Patrick Date: Wed, 24 Apr 2024 05:56:56 +0200 Subject: [PATCH 078/313] Fix issue when setting cw/ww brightness via temperature (#5976) --- esphome/components/light/light_call.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/esphome/components/light/light_call.cpp b/esphome/components/light/light_call.cpp index 8dc5d4fbe7..c2600d05c2 100644 --- a/esphome/components/light/light_call.cpp +++ b/esphome/components/light/light_call.cpp @@ -337,9 +337,12 @@ LightColorValues LightCall::validate_() { void LightCall::transform_parameters_() { auto traits = this->parent_->get_traits(); - // Allow CWWW modes to be set with a white value and/or color temperature. This is used by HA, - // which doesn't support CWWW modes (yet?), and for compatibility with the pre-colormode model, - // as CWWW and RGBWW lights used to represent their values as white + color temperature. + // Allow CWWW modes to be set with a white value and/or color temperature. + // This is used in three cases in HA: + // - CW/WW lights, which set the "brightness" and "color_temperature" + // - RGBWW lights with color_interlock=true, which also sets "brightness" and + // "color_temperature" (without color_interlock, CW/WW are set directly) + // - Legacy Home Assistant (pre-colormode), which sets "white" and "color_temperature" if (((this->white_.has_value() && *this->white_ > 0.0f) || this->color_temperature_.has_value()) && // (*this->color_mode_ & ColorCapability::COLD_WARM_WHITE) && // !(*this->color_mode_ & ColorCapability::WHITE) && // @@ -347,21 +350,17 @@ void LightCall::transform_parameters_() { traits.get_min_mireds() > 0.0f && traits.get_max_mireds() > 0.0f) { ESP_LOGD(TAG, "'%s' - Setting cold/warm white channels using white/color temperature values.", this->parent_->get_name().c_str()); - auto current_values = this->parent_->remote_values; if (this->color_temperature_.has_value()) { - const float white = - this->white_.value_or(fmaxf(current_values.get_cold_white(), current_values.get_warm_white())); const float color_temp = clamp(*this->color_temperature_, traits.get_min_mireds(), traits.get_max_mireds()); const float ww_fraction = (color_temp - traits.get_min_mireds()) / (traits.get_max_mireds() - traits.get_min_mireds()); const float cw_fraction = 1.0f - ww_fraction; const float max_cw_ww = std::max(ww_fraction, cw_fraction); - this->cold_white_ = white * gamma_uncorrect(cw_fraction / max_cw_ww, this->parent_->get_gamma_correct()); - this->warm_white_ = white * gamma_uncorrect(ww_fraction / max_cw_ww, this->parent_->get_gamma_correct()); - } else { - const float max_cw_ww = std::max(current_values.get_warm_white(), current_values.get_cold_white()); - this->cold_white_ = *this->white_ * current_values.get_cold_white() / max_cw_ww; - this->warm_white_ = *this->white_ * current_values.get_warm_white() / max_cw_ww; + this->cold_white_ = gamma_uncorrect(cw_fraction / max_cw_ww, this->parent_->get_gamma_correct()); + this->warm_white_ = gamma_uncorrect(ww_fraction / max_cw_ww, this->parent_->get_gamma_correct()); + } + if (this->white_.has_value()) { + this->brightness_ = *this->white_; } } } From 41b19504bc8490e318f3e35bb7e10386fd44ab0b Mon Sep 17 00:00:00 2001 From: Daniel Kent <129895318+danielkent-net@users.noreply.github.com> Date: Wed, 24 Apr 2024 00:18:54 -0400 Subject: [PATCH 079/313] Add get/set color temperature functions in Kelvin (#5006) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/light/light_color_values.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/esphome/components/light/light_color_values.h b/esphome/components/light/light_color_values.h index 10a3c2f335..bad180ce6d 100644 --- a/esphome/components/light/light_color_values.h +++ b/esphome/components/light/light_color_values.h @@ -266,6 +266,21 @@ class LightColorValues { /// Set the color temperature property of these light color values in mired. void set_color_temperature(float color_temperature) { this->color_temperature_ = color_temperature; } + /// Get the color temperature property of these light color values in kelvin. + float get_color_temperature_kelvin() const { + if (this->color_temperature_ <= 0) { + return this->color_temperature_; + } + return 1000000.0 / this->color_temperature_; + } + /// Set the color temperature property of these light color values in kelvin. + void set_color_temperature_kelvin(float color_temperature) { + if (color_temperature <= 0) { + return; + } + this->color_temperature_ = 1000000.0 / color_temperature; + } + /// Get the cold white property of these light color values. In range 0.0 to 1.0. float get_cold_white() const { return this->cold_white_; } /// Set the cold white property of these light color values. In range 0.0 to 1.0. From bdc9c66f7e781d431cc507393877944313b80046 Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Thu, 25 Apr 2024 11:50:41 +0200 Subject: [PATCH 080/313] Move CONF_PLATFORM_VERSION to global const.py (#6629) * remove duplicated definition * format --- esphome/components/esp32/__init__.py | 3 +-- esphome/components/esp8266/__init__.py | 2 +- esphome/components/rp2040/__init__.py | 3 +-- esphome/const.py | 1 + 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 8ae6262f2f..5d74838daa 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -32,6 +32,7 @@ from esphome.const import ( TYPE_GIT, TYPE_LOCAL, __version__, + CONF_PLATFORM_VERSION, ) from esphome.core import CORE, HexInt, TimePeriod import esphome.config_validation as cv @@ -365,8 +366,6 @@ def final_validate(config): return config -CONF_PLATFORM_VERSION = "platform_version" - ARDUINO_FRAMEWORK_SCHEMA = cv.All( cv.Schema( { diff --git a/esphome/components/esp8266/__init__.py b/esphome/components/esp8266/__init__.py index 00729921a3..64b127bda3 100644 --- a/esphome/components/esp8266/__init__.py +++ b/esphome/components/esp8266/__init__.py @@ -12,6 +12,7 @@ from esphome.const import ( KEY_TARGET_FRAMEWORK, KEY_TARGET_PLATFORM, PLATFORM_ESP8266, + CONF_PLATFORM_VERSION, ) from esphome.core import CORE, coroutine_with_priority import esphome.config_validation as cv @@ -146,7 +147,6 @@ def _parse_platform_version(value): return value -CONF_PLATFORM_VERSION = "platform_version" ARDUINO_FRAMEWORK_SCHEMA = cv.All( cv.Schema( { diff --git a/esphome/components/rp2040/__init__.py b/esphome/components/rp2040/__init__.py index b262a068fb..ace455add7 100644 --- a/esphome/components/rp2040/__init__.py +++ b/esphome/components/rp2040/__init__.py @@ -15,6 +15,7 @@ from esphome.const import ( KEY_TARGET_FRAMEWORK, KEY_TARGET_PLATFORM, PLATFORM_RP2040, + CONF_PLATFORM_VERSION, ) from esphome.core import CORE, coroutine_with_priority, EsphomeError from esphome.helpers import mkdir_p, write_file, copy_file_if_changed @@ -125,8 +126,6 @@ def _parse_platform_version(value): return value -CONF_PLATFORM_VERSION = "platform_version" - ARDUINO_FRAMEWORK_SCHEMA = cv.All( cv.Schema( { diff --git a/esphome/const.py b/esphome/const.py index dfb7fe464c..a64bc73f59 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -597,6 +597,7 @@ CONF_PIN_D = "pin_d" CONF_PINS = "pins" CONF_PIXEL_MAPPER = "pixel_mapper" CONF_PLATFORM = "platform" +CONF_PLATFORM_VERSION = "platform_version" CONF_PLATFORMIO_OPTIONS = "platformio_options" CONF_PM_0_3UM = "pm_0_3um" CONF_PM_0_5UM = "pm_0_5um" From 2fa58468939b1319b072f7fc3f123dcc1f916605 Mon Sep 17 00:00:00 2001 From: Joakim Plate Date: Thu, 25 Apr 2024 12:05:30 +0200 Subject: [PATCH 081/313] Ble client fixes for proxy (#6596) --- esphome/components/alpha3/alpha3.cpp | 8 +++-- .../components/am43/sensor/am43_sensor.cpp | 4 ++- .../bluetooth_proxy/bluetooth_connection.cpp | 33 +++++-------------- .../esp32_ble_client/ble_client_base.cpp | 2 +- .../display/pvvx_display.cpp | 6 ++-- 5 files changed, 21 insertions(+), 32 deletions(-) diff --git a/esphome/components/alpha3/alpha3.cpp b/esphome/components/alpha3/alpha3.cpp index 17899c31cb..344f2d5a03 100644 --- a/esphome/components/alpha3/alpha3.cpp +++ b/esphome/components/alpha3/alpha3.cpp @@ -97,9 +97,11 @@ void Alpha3::handle_geni_response_(const uint8_t *response, uint16_t length) { void Alpha3::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param) { switch (event) { case ESP_GATTC_OPEN_EVT: { - this->response_offset_ = 0; - this->response_length_ = 0; - ESP_LOGI(TAG, "[%s] connection open", this->parent_->address_str().c_str()); + if (param->open.status == ESP_GATT_OK) { + this->response_offset_ = 0; + this->response_length_ = 0; + ESP_LOGI(TAG, "[%s] connection open", this->parent_->address_str().c_str()); + } break; } case ESP_GATTC_CONNECT_EVT: { diff --git a/esphome/components/am43/sensor/am43_sensor.cpp b/esphome/components/am43/sensor/am43_sensor.cpp index 008c7768ed..4cc99001ae 100644 --- a/esphome/components/am43/sensor/am43_sensor.cpp +++ b/esphome/components/am43/sensor/am43_sensor.cpp @@ -26,7 +26,9 @@ void Am43::setup() { void Am43::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if, esp_ble_gattc_cb_param_t *param) { switch (event) { case ESP_GATTC_OPEN_EVT: { - this->logged_in_ = false; + if (param->open.status == ESP_GATT_OK) { + this->logged_in_ = false; + } break; } case ESP_GATTC_DISCONNECT_EVT: { diff --git a/esphome/components/bluetooth_proxy/bluetooth_connection.cpp b/esphome/components/bluetooth_proxy/bluetooth_connection.cpp index 97a25262cb..543752853e 100644 --- a/esphome/components/bluetooth_proxy/bluetooth_connection.cpp +++ b/esphome/components/bluetooth_proxy/bluetooth_connection.cpp @@ -25,9 +25,13 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga this->proxy_->send_connections_free(); break; } + case ESP_GATTC_CLOSE_EVT: { + this->proxy_->send_device_connection(this->address_, false, 0, param->close.reason); + this->set_address(0); + this->proxy_->send_connections_free(); + break; + } case ESP_GATTC_OPEN_EVT: { - if (param->open.conn_id != this->conn_id_) - break; if (param->open.status != ESP_GATT_OK && param->open.status != ESP_GATT_ALREADY_OPEN) { this->proxy_->send_device_connection(this->address_, false, 0, param->open.status); this->set_address(0); @@ -39,9 +43,8 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga this->seen_mtu_or_services_ = false; break; } - case ESP_GATTC_CFG_MTU_EVT: { - if (param->cfg_mtu.conn_id != this->conn_id_) - break; + case ESP_GATTC_CFG_MTU_EVT: + case ESP_GATTC_SEARCH_CMPL_EVT: { if (!this->seen_mtu_or_services_) { // We don't know if we will get the MTU or the services first, so // only send the device connection true if we have already received @@ -53,24 +56,8 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga this->proxy_->send_connections_free(); break; } - case ESP_GATTC_SEARCH_CMPL_EVT: { - if (param->search_cmpl.conn_id != this->conn_id_) - break; - if (!this->seen_mtu_or_services_) { - // We don't know if we will get the MTU or the services first, so - // only send the device connection true if we have already received - // the mtu. - this->seen_mtu_or_services_ = true; - break; - } - this->proxy_->send_device_connection(this->address_, true, this->mtu_); - this->proxy_->send_connections_free(); - break; - } case ESP_GATTC_READ_DESCR_EVT: case ESP_GATTC_READ_CHAR_EVT: { - if (param->read.conn_id != this->conn_id_) - break; if (param->read.status != ESP_GATT_OK) { ESP_LOGW(TAG, "[%d] [%s] Error reading char/descriptor at handle 0x%2X, status=%d", this->connection_index_, this->address_str_.c_str(), param->read.handle, param->read.status); @@ -89,8 +76,6 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga } case ESP_GATTC_WRITE_CHAR_EVT: case ESP_GATTC_WRITE_DESCR_EVT: { - if (param->write.conn_id != this->conn_id_) - break; if (param->write.status != ESP_GATT_OK) { ESP_LOGW(TAG, "[%d] [%s] Error writing char/descriptor at handle 0x%2X, status=%d", this->connection_index_, this->address_str_.c_str(), param->write.handle, param->write.status); @@ -131,8 +116,6 @@ bool BluetoothConnection::gattc_event_handler(esp_gattc_cb_event_t event, esp_ga break; } case ESP_GATTC_NOTIFY_EVT: { - if (param->notify.conn_id != this->conn_id_) - break; ESP_LOGV(TAG, "[%d] [%s] ESP_GATTC_NOTIFY_EVT: handle=0x%2X", this->connection_index_, this->address_str_.c_str(), param->notify.handle); api::BluetoothGATTNotifyDataResponse resp; diff --git a/esphome/components/esp32_ble_client/ble_client_base.cpp b/esphome/components/esp32_ble_client/ble_client_base.cpp index ae83715aea..98e7792792 100644 --- a/esphome/components/esp32_ble_client/ble_client_base.cpp +++ b/esphome/components/esp32_ble_client/ble_client_base.cpp @@ -142,7 +142,7 @@ bool BLEClientBase::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_ ESP_LOGW(TAG, "[%d] [%s] Connection failed, status=%d", this->connection_index_, this->address_str_.c_str(), param->open.status); this->set_state(espbt::ClientState::IDLE); - return false; + break; } auto ret = esp_ble_gattc_send_mtu_req(this->gattc_if_, param->open.conn_id); if (ret) { diff --git a/esphome/components/pvvx_mithermometer/display/pvvx_display.cpp b/esphome/components/pvvx_mithermometer/display/pvvx_display.cpp index d192e62430..1856a023cc 100644 --- a/esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +++ b/esphome/components/pvvx_mithermometer/display/pvvx_display.cpp @@ -24,8 +24,10 @@ void PVVXDisplay::gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t esp_ble_gattc_cb_param_t *param) { switch (event) { case ESP_GATTC_OPEN_EVT: - ESP_LOGV(TAG, "[%s] Connected successfully!", this->parent_->address_str().c_str()); - this->delayed_disconnect_(); + if (param->open.status == ESP_GATT_OK) { + ESP_LOGV(TAG, "[%s] Connected successfully!", this->parent_->address_str().c_str()); + this->delayed_disconnect_(); + } break; case ESP_GATTC_DISCONNECT_EVT: ESP_LOGV(TAG, "[%s] Disconnected", this->parent_->address_str().c_str()); From 0662c5e0fb3e760fe488b80ab4cc312e6bd1011c Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Fri, 26 Apr 2024 07:00:01 +1000 Subject: [PATCH 082/313] Fix for #6614- use background_color, improve anti-aliasing (#6618) --- esphome/components/font/font.cpp | 17 ++++++++++------- .../graphical_display_menu.cpp | 15 ++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/esphome/components/font/font.cpp b/esphome/components/font/font.cpp index 5a18429789..3b62b8ca66 100644 --- a/esphome/components/font/font.cpp +++ b/esphome/components/font/font.cpp @@ -129,7 +129,13 @@ void Font::print(int x_start, int y_start, display::Display *display, Color colo uint8_t bitmask = 0; uint8_t pixel_data = 0; - float bpp_max = (1 << this->bpp_) - 1; + uint8_t bpp_max = (1 << this->bpp_) - 1; + auto diff_r = (float) color.r - (float) background.r; + auto diff_g = (float) color.g - (float) background.g; + auto diff_b = (float) color.b - (float) background.b; + auto b_r = (float) background.r; + auto b_g = (float) background.g; + auto b_b = (float) background.g; for (int glyph_y = y_start + scan_y1; glyph_y != max_y; glyph_y++) { for (int glyph_x = x_at + scan_x1; glyph_x != max_x; glyph_x++) { uint8_t pixel = 0; @@ -146,12 +152,9 @@ void Font::print(int x_start, int y_start, display::Display *display, Color colo if (pixel == bpp_max) { display->draw_pixel_at(glyph_x, glyph_y, color); } else if (pixel != 0) { - float on = (float) pixel / bpp_max; - float off = 1.0 - on; - Color blended; - blended.r = color.r * on + background.r * off; - blended.g = color.r * on + background.g * off; - blended.b = color.r * on + background.b * off; + auto on = (float) pixel / (float) bpp_max; + auto blended = + Color((uint8_t) (diff_r * on + b_r), (uint8_t) (diff_g * on + b_g), (uint8_t) (diff_b * on + b_b)); display->draw_pixel_at(glyph_x, glyph_y, blended); } } diff --git a/esphome/components/graphical_display_menu/graphical_display_menu.cpp b/esphome/components/graphical_display_menu/graphical_display_menu.cpp index fcbad41388..4a4e519009 100644 --- a/esphome/components/graphical_display_menu/graphical_display_menu.cpp +++ b/esphome/components/graphical_display_menu/graphical_display_menu.cpp @@ -104,7 +104,8 @@ void GraphicalDisplayMenu::draw(display::Display *display, const display::Rect * } void GraphicalDisplayMenu::draw_menu_internal_(display::Display *display, const display::Rect *bounds) { - int total_height = 0; + int16_t total_height = 0; + int16_t max_width = 0; int y_padding = 2; bool scroll_menu_items = false; std::vector menu_dimensions; @@ -118,6 +119,7 @@ void GraphicalDisplayMenu::draw_menu_internal_(display::Display *display, const menu_dimensions.push_back(item_dimensions); total_height += item_dimensions.h + (i == 0 ? 0 : y_padding); + max_width = std::max(max_width, item_dimensions.w); if (total_height <= bounds->h) { number_items_fit_to_screen++; @@ -166,7 +168,8 @@ void GraphicalDisplayMenu::draw_menu_internal_(display::Display *display, const // Render the items into the view port display->start_clipping(*bounds); - int y_offset = bounds->y; + display->filled_rectangle(bounds->x, bounds->y, max_width, total_height, this->background_color_); + auto y_offset = bounds->y; for (size_t i = first_item_index; i <= last_item_index; i++) { const auto *item = this->displayed_item_->get_item(i); const bool selected = i == this->cursor_index_; @@ -176,7 +179,7 @@ void GraphicalDisplayMenu::draw_menu_internal_(display::Display *display, const dimensions.x = bounds->x; this->draw_item(display, item, &dimensions, selected); - y_offset = dimensions.y + dimensions.h + y_padding; + y_offset += dimensions.h + y_padding; } display->end_clipping(); @@ -219,9 +222,7 @@ inline void GraphicalDisplayMenu::draw_item(display::Display *display, const dis // int background_width = std::max(bounds->width, available_width); int background_width = bounds->w; - if (selected) { - display->filled_rectangle(bounds->x, bounds->y, background_width, bounds->h, background_color); - } + display->filled_rectangle(bounds->x, bounds->y, background_width, bounds->h, background_color); std::string label = item->get_text(); if (item->has_value()) { @@ -230,7 +231,7 @@ inline void GraphicalDisplayMenu::draw_item(display::Display *display, const dis } display->print(bounds->x, bounds->y, this->font_, foreground_color, display::TextAlign::TOP_LEFT, label.c_str(), - ~foreground_color); + background_color); } void GraphicalDisplayMenu::draw_item(const display_menu_base::MenuItem *item, const uint8_t row, const bool selected) { From de2a92e45de9444b7bcc88e8a0c8984c6240b53b Mon Sep 17 00:00:00 2001 From: chiahsing Date: Fri, 26 Apr 2024 05:01:51 +0800 Subject: [PATCH 083/313] Fix graph hangs when y <= 0 (#6593) --- esphome/components/graph/graph.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/esphome/components/graph/graph.cpp b/esphome/components/graph/graph.cpp index 0e437a3425..1178af911d 100644 --- a/esphome/components/graph/graph.cpp +++ b/esphome/components/graph/graph.cpp @@ -164,7 +164,7 @@ void Graph::draw(Display *buff, uint16_t x_offset, uint16_t y_offset, Color colo ESP_LOGV(TAG, "Updating graph. ymin %f, ymax %f", ymin, ymax); for (auto *trace : traces_) { Color c = trace->get_line_color(); - uint16_t thick = trace->get_line_thickness(); + int16_t thick = trace->get_line_thickness(); bool continuous = trace->get_continuous(); bool has_prev = false; bool prev_b = false; @@ -178,20 +178,20 @@ void Graph::draw(Display *buff, uint16_t x_offset, uint16_t y_offset, Color colo if (b) { int16_t y = (int16_t) roundf((this->height_ - 1) * (1.0 - v)) - thick / 2 + y_offset; if (!continuous || !has_prev || !prev_b || (abs(y - prev_y) <= thick)) { - for (uint16_t t = 0; t < thick; t++) { + for (int16_t t = 0; t < thick; t++) { buff->draw_pixel_at(x, y + t, c); } } else { int16_t mid_y = (y + prev_y + thick) / 2; if (y > prev_y) { - for (uint16_t t = prev_y + thick; t <= mid_y; t++) + for (int16_t t = prev_y + thick; t <= mid_y; t++) buff->draw_pixel_at(x + 1, t, c); - for (uint16_t t = mid_y + 1; t < y + thick; t++) + for (int16_t t = mid_y + 1; t < y + thick; t++) buff->draw_pixel_at(x, t, c); } else { - for (uint16_t t = prev_y - 1; t >= mid_y; t--) + for (int16_t t = prev_y - 1; t >= mid_y; t--) buff->draw_pixel_at(x + 1, t, c); - for (uint16_t t = mid_y - 1; t >= y; t--) + for (int16_t t = mid_y - 1; t >= y; t--) buff->draw_pixel_at(x, t, c); } } From 5288d5ac9539cbb1d8e67e6094c7aeb35844c66e Mon Sep 17 00:00:00 2001 From: Nico Peter Date: Thu, 25 Apr 2024 23:04:20 +0200 Subject: [PATCH 084/313] Feature add last_operation to time based cover (#6084) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/time_based/time_based_cover.h | 1 + 1 file changed, 1 insertion(+) diff --git a/esphome/components/time_based/time_based_cover.h b/esphome/components/time_based/time_based_cover.h index b7a826d237..42cf66c2ab 100644 --- a/esphome/components/time_based/time_based_cover.h +++ b/esphome/components/time_based/time_based_cover.h @@ -23,6 +23,7 @@ class TimeBasedCover : public cover::Cover, public Component { void set_has_built_in_endstop(bool value) { this->has_built_in_endstop_ = value; } void set_manual_control(bool value) { this->manual_control_ = value; } void set_assumed_state(bool value) { this->assumed_state_ = value; } + cover::CoverOperation get_last_operation() const { return this->last_operation_; } protected: void control(const cover::CoverCall &call) override; From bcef64a6fa67e8c85ae0a03f4f2986361be3e58d Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Thu, 25 Apr 2024 16:04:48 -0500 Subject: [PATCH 085/313] Add `event`, `text_sensor` and `valve` device classes to sync script (#6624) --- script/sync-device_class.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/script/sync-device_class.py b/script/sync-device_class.py index 8f91b97997..26d271535f 100755 --- a/script/sync-device_class.py +++ b/script/sync-device_class.py @@ -6,9 +6,12 @@ import re from homeassistant.components.binary_sensor import BinarySensorDeviceClass from homeassistant.components.button import ButtonDeviceClass from homeassistant.components.cover import CoverDeviceClass +from homeassistant.components.event import EventDeviceClass from homeassistant.components.number import NumberDeviceClass from homeassistant.components.sensor import SensorDeviceClass from homeassistant.components.switch import SwitchDeviceClass +from homeassistant.components.text_sensor import TextSensorDeviceClass +from homeassistant.components.valve import ValveDeviceClass # pylint: enable=import-error @@ -21,9 +24,12 @@ DOMAINS = { "binary_sensor": BinarySensorDeviceClass, "button": ButtonDeviceClass, "cover": CoverDeviceClass, + "event": EventDeviceClass, "number": NumberDeviceClass, "sensor": SensorDeviceClass, "switch": SwitchDeviceClass, + "text_sensor": TextSensorDeviceClass, + "valve": ValveDeviceClass, } From 8ef7b41c91deefe9514cf6c6130e0fcbb99ecb6d Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 26 Apr 2024 09:19:54 +1200 Subject: [PATCH 086/313] Add datetime entities (#6513) --- esphome/components/api/api.proto | 38 +++ esphome/components/api/api_connection.cpp | 38 +++ esphome/components/api/api_connection.h | 5 + esphome/components/api/api_pb2.cpp | 173 ++++++++++++ esphome/components/api/api_pb2.h | 45 ++++ esphome/components/api/api_pb2_service.cpp | 42 +++ esphome/components/api/api_pb2_service.h | 15 ++ esphome/components/api/api_server.cpp | 9 + esphome/components/api/api_server.h | 3 + esphome/components/api/list_entities.cpp | 6 + esphome/components/api/list_entities.h | 3 + esphome/components/api/subscribe_state.cpp | 5 + esphome/components/api/subscribe_state.h | 3 + esphome/components/datetime/__init__.py | 129 ++++++--- esphome/components/datetime/date_entity.cpp | 3 + esphome/components/datetime/datetime_base.h | 7 + .../components/datetime/datetime_entity.cpp | 252 ++++++++++++++++++ esphome/components/datetime/datetime_entity.h | 150 +++++++++++ esphome/components/datetime/time_entity.cpp | 6 +- esphome/components/datetime/time_entity.h | 12 +- esphome/components/mqtt/__init__.py | 1 + esphome/components/mqtt/mqtt_datetime.cpp | 84 ++++++ esphome/components/mqtt/mqtt_datetime.h | 45 ++++ .../components/template/datetime/__init__.py | 22 ++ .../template/datetime/template_datetime.cpp | 150 +++++++++++ .../template/datetime/template_datetime.h | 46 ++++ esphome/components/time/real_time_clock.cpp | 2 + .../components/web_server/list_entities.cpp | 9 + esphome/components/web_server/list_entities.h | 3 + esphome/components/web_server/web_server.cpp | 63 +++++ esphome/components/web_server/web_server.h | 9 + esphome/const.py | 1 + esphome/core/application.h | 19 ++ esphome/core/component_iterator.cpp | 15 ++ esphome/core/component_iterator.h | 6 + esphome/core/controller.cpp | 6 + esphome/core/controller.h | 6 + esphome/core/defines.h | 1 + esphome/core/time.cpp | 9 + esphome/core/time.h | 3 + script/ci-custom.py | 1 + tests/components/datetime/test.all.yaml | 2 + .../template/{test.all.yaml => common.yaml} | 22 ++ tests/components/template/test.bk72xx.yaml | 2 + .../template/test.esp32-c3-idf.yaml | 2 + tests/components/template/test.esp32-c3.yaml | 2 + tests/components/template/test.esp32-idf.yaml | 2 + .../template/test.esp32-s3-idf.yaml | 2 + tests/components/template/test.esp32.yaml | 2 + tests/components/template/test.esp8266.yaml | 2 + tests/components/template/test.rp2040.yaml | 2 + 51 files changed, 1430 insertions(+), 55 deletions(-) create mode 100644 esphome/components/datetime/datetime_entity.cpp create mode 100644 esphome/components/datetime/datetime_entity.h create mode 100644 esphome/components/mqtt/mqtt_datetime.cpp create mode 100644 esphome/components/mqtt/mqtt_datetime.h create mode 100644 esphome/components/template/datetime/template_datetime.cpp create mode 100644 esphome/components/template/datetime/template_datetime.h rename tests/components/template/{test.all.yaml => common.yaml} (88%) create mode 100644 tests/components/template/test.bk72xx.yaml create mode 100644 tests/components/template/test.esp32-c3-idf.yaml create mode 100644 tests/components/template/test.esp32-c3.yaml create mode 100644 tests/components/template/test.esp32-idf.yaml create mode 100644 tests/components/template/test.esp32-s3-idf.yaml create mode 100644 tests/components/template/test.esp32.yaml create mode 100644 tests/components/template/test.esp8266.yaml create mode 100644 tests/components/template/test.rp2040.yaml diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index 17826ea7ed..b8073abc19 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -47,6 +47,7 @@ service APIConnection { rpc media_player_command (MediaPlayerCommandRequest) returns (void) {} rpc date_command (DateCommandRequest) returns (void) {} rpc time_command (TimeCommandRequest) returns (void) {} + rpc datetime_command (DateTimeCommandRequest) returns (void) {} rpc subscribe_bluetooth_le_advertisements(SubscribeBluetoothLEAdvertisementsRequest) returns (void) {} rpc bluetooth_device_request(BluetoothDeviceRequest) returns (void) {} @@ -1777,3 +1778,40 @@ message ValveCommandRequest { float position = 3; bool stop = 4; } + +// ==================== DATETIME DATETIME ==================== +message ListEntitiesDateTimeResponse { + option (id) = 112; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_DATETIME_DATETIME"; + + string object_id = 1; + fixed32 key = 2; + string name = 3; + string unique_id = 4; + + string icon = 5; + bool disabled_by_default = 6; + EntityCategory entity_category = 7; +} +message DateTimeStateResponse { + option (id) = 113; + option (source) = SOURCE_SERVER; + option (ifdef) = "USE_DATETIME_DATETIME"; + option (no_delay) = true; + + fixed32 key = 1; + // If the datetime does not have a valid state yet. + // Equivalent to `!obj->has_state()` - inverse logic to make state packets smaller + bool missing_state = 2; + fixed32 epoch_seconds = 3; +} +message DateTimeCommandRequest { + option (id) = 114; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_DATETIME_DATETIME"; + option (no_delay) = true; + + fixed32 key = 1; + fixed32 epoch_seconds = 2; +} diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index ec09604d95..b31212bbdb 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -772,6 +772,44 @@ void APIConnection::time_command(const TimeCommandRequest &msg) { } #endif +#ifdef USE_DATETIME_DATETIME +bool APIConnection::send_datetime_state(datetime::DateTimeEntity *datetime) { + if (!this->state_subscription_) + return false; + + DateTimeStateResponse resp{}; + resp.key = datetime->get_object_id_hash(); + resp.missing_state = !datetime->has_state(); + if (datetime->has_state()) { + ESPTime state = datetime->state_as_esptime(); + resp.epoch_seconds = state.timestamp; + } + return this->send_date_time_state_response(resp); +} +bool APIConnection::send_datetime_info(datetime::DateTimeEntity *datetime) { + ListEntitiesDateTimeResponse msg; + msg.key = datetime->get_object_id_hash(); + msg.object_id = datetime->get_object_id(); + if (datetime->has_own_name()) + msg.name = datetime->get_name(); + msg.unique_id = get_default_unique_id("datetime", datetime); + msg.icon = datetime->get_icon(); + msg.disabled_by_default = datetime->is_disabled_by_default(); + msg.entity_category = static_cast(datetime->get_entity_category()); + + return this->send_list_entities_date_time_response(msg); +} +void APIConnection::datetime_command(const DateTimeCommandRequest &msg) { + datetime::DateTimeEntity *datetime = App.get_datetime_by_key(msg.key); + if (datetime == nullptr) + return; + + auto call = datetime->make_call(); + call.set_datetime(msg.epoch_seconds); + call.perform(); +} +#endif + #ifdef USE_TEXT bool APIConnection::send_text_state(text::Text *text, std::string state) { if (!this->state_subscription_) diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index 2c1d733d3e..ee466c5d10 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -82,6 +82,11 @@ class APIConnection : public APIServerConnection { bool send_time_info(datetime::TimeEntity *time); void time_command(const TimeCommandRequest &msg) override; #endif +#ifdef USE_DATETIME_DATETIME + bool send_datetime_state(datetime::DateTimeEntity *datetime); + bool send_datetime_info(datetime::DateTimeEntity *datetime); + void datetime_command(const DateTimeCommandRequest &msg) override; +#endif #ifdef USE_TEXT bool send_text_state(text::Text *text, std::string state); bool send_text_info(text::Text *text); diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 3f01d88c58..6ec1870d72 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -8093,6 +8093,179 @@ void ValveCommandRequest::dump_to(std::string &out) const { out.append("}"); } #endif +bool ListEntitiesDateTimeResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 6: { + this->disabled_by_default = value.as_bool(); + return true; + } + case 7: { + this->entity_category = value.as_enum(); + return true; + } + default: + return false; + } +} +bool ListEntitiesDateTimeResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { + switch (field_id) { + case 1: { + this->object_id = value.as_string(); + return true; + } + case 3: { + this->name = value.as_string(); + return true; + } + case 4: { + this->unique_id = value.as_string(); + return true; + } + case 5: { + this->icon = value.as_string(); + return true; + } + default: + return false; + } +} +bool ListEntitiesDateTimeResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 2: { + this->key = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void ListEntitiesDateTimeResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_string(1, this->object_id); + buffer.encode_fixed32(2, this->key); + buffer.encode_string(3, this->name); + buffer.encode_string(4, this->unique_id); + buffer.encode_string(5, this->icon); + buffer.encode_bool(6, this->disabled_by_default); + buffer.encode_enum(7, this->entity_category); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void ListEntitiesDateTimeResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("ListEntitiesDateTimeResponse {\n"); + out.append(" object_id: "); + out.append("'").append(this->object_id).append("'"); + out.append("\n"); + + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" name: "); + out.append("'").append(this->name).append("'"); + out.append("\n"); + + out.append(" unique_id: "); + out.append("'").append(this->unique_id).append("'"); + out.append("\n"); + + out.append(" icon: "); + out.append("'").append(this->icon).append("'"); + out.append("\n"); + + out.append(" disabled_by_default: "); + out.append(YESNO(this->disabled_by_default)); + out.append("\n"); + + out.append(" entity_category: "); + out.append(proto_enum_to_string(this->entity_category)); + out.append("\n"); + out.append("}"); +} +#endif +bool DateTimeStateResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 2: { + this->missing_state = value.as_bool(); + return true; + } + default: + return false; + } +} +bool DateTimeStateResponse::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 1: { + this->key = value.as_fixed32(); + return true; + } + case 3: { + this->epoch_seconds = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void DateTimeStateResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_fixed32(1, this->key); + buffer.encode_bool(2, this->missing_state); + buffer.encode_fixed32(3, this->epoch_seconds); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void DateTimeStateResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("DateTimeStateResponse {\n"); + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" missing_state: "); + out.append(YESNO(this->missing_state)); + out.append("\n"); + + out.append(" epoch_seconds: "); + sprintf(buffer, "%" PRIu32, this->epoch_seconds); + out.append(buffer); + out.append("\n"); + out.append("}"); +} +#endif +bool DateTimeCommandRequest::decode_32bit(uint32_t field_id, Proto32Bit value) { + switch (field_id) { + case 1: { + this->key = value.as_fixed32(); + return true; + } + case 2: { + this->epoch_seconds = value.as_fixed32(); + return true; + } + default: + return false; + } +} +void DateTimeCommandRequest::encode(ProtoWriteBuffer buffer) const { + buffer.encode_fixed32(1, this->key); + buffer.encode_fixed32(2, this->epoch_seconds); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void DateTimeCommandRequest::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("DateTimeCommandRequest {\n"); + out.append(" key: "); + sprintf(buffer, "%" PRIu32, this->key); + out.append(buffer); + out.append("\n"); + + out.append(" epoch_seconds: "); + sprintf(buffer, "%" PRIu32, this->epoch_seconds); + out.append(buffer); + out.append("\n"); + out.append("}"); +} +#endif } // namespace api } // namespace esphome diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 9a6aab254d..14fd95df37 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -2060,6 +2060,51 @@ class ValveCommandRequest : public ProtoMessage { bool decode_32bit(uint32_t field_id, Proto32Bit value) override; bool decode_varint(uint32_t field_id, ProtoVarInt value) override; }; +class ListEntitiesDateTimeResponse : public ProtoMessage { + public: + std::string object_id{}; + uint32_t key{0}; + std::string name{}; + std::string unique_id{}; + std::string icon{}; + bool disabled_by_default{false}; + enums::EntityCategory entity_category{}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; +class DateTimeStateResponse : public ProtoMessage { + public: + uint32_t key{0}; + bool missing_state{false}; + uint32_t epoch_seconds{0}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; +class DateTimeCommandRequest : public ProtoMessage { + public: + uint32_t key{0}; + uint32_t epoch_seconds{0}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_32bit(uint32_t field_id, Proto32Bit value) override; +}; } // namespace api } // namespace esphome diff --git a/esphome/components/api/api_pb2_service.cpp b/esphome/components/api/api_pb2_service.cpp index ced81fa643..093fe917e0 100644 --- a/esphome/components/api/api_pb2_service.cpp +++ b/esphome/components/api/api_pb2_service.cpp @@ -591,6 +591,24 @@ bool APIServerConnectionBase::send_valve_state_response(const ValveStateResponse #endif #ifdef USE_VALVE #endif +#ifdef USE_DATETIME_DATETIME +bool APIServerConnectionBase::send_list_entities_date_time_response(const ListEntitiesDateTimeResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_list_entities_date_time_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 112); +} +#endif +#ifdef USE_DATETIME_DATETIME +bool APIServerConnectionBase::send_date_time_state_response(const DateTimeStateResponse &msg) { +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "send_date_time_state_response: %s", msg.dump().c_str()); +#endif + return this->send_message_(msg, 113); +} +#endif +#ifdef USE_DATETIME_DATETIME +#endif bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) { switch (msg_type) { case 1: { @@ -1064,6 +1082,17 @@ bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, ESP_LOGVV(TAG, "on_valve_command_request: %s", msg.dump().c_str()); #endif this->on_valve_command_request(msg); +#endif + break; + } + case 114: { +#ifdef USE_DATETIME_DATETIME + DateTimeCommandRequest msg; + msg.decode(msg_data, msg_size); +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "on_date_time_command_request: %s", msg.dump().c_str()); +#endif + this->on_date_time_command_request(msg); #endif break; } @@ -1379,6 +1408,19 @@ void APIServerConnection::on_time_command_request(const TimeCommandRequest &msg) this->time_command(msg); } #endif +#ifdef USE_DATETIME_DATETIME +void APIServerConnection::on_date_time_command_request(const DateTimeCommandRequest &msg) { + if (!this->is_connection_setup()) { + this->on_no_setup_connection(); + return; + } + if (!this->is_authenticated()) { + this->on_unauthenticated_access(); + return; + } + this->datetime_command(msg); +} +#endif #ifdef USE_BLUETOOTH_PROXY void APIServerConnection::on_subscribe_bluetooth_le_advertisements_request( const SubscribeBluetoothLEAdvertisementsRequest &msg) { diff --git a/esphome/components/api/api_pb2_service.h b/esphome/components/api/api_pb2_service.h index c8b2bc5789..196d904aca 100644 --- a/esphome/components/api/api_pb2_service.h +++ b/esphome/components/api/api_pb2_service.h @@ -294,6 +294,15 @@ class APIServerConnectionBase : public ProtoService { #endif #ifdef USE_VALVE virtual void on_valve_command_request(const ValveCommandRequest &value){}; +#endif +#ifdef USE_DATETIME_DATETIME + bool send_list_entities_date_time_response(const ListEntitiesDateTimeResponse &msg); +#endif +#ifdef USE_DATETIME_DATETIME + bool send_date_time_state_response(const DateTimeStateResponse &msg); +#endif +#ifdef USE_DATETIME_DATETIME + virtual void on_date_time_command_request(const DateTimeCommandRequest &value){}; #endif protected: bool read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) override; @@ -358,6 +367,9 @@ class APIServerConnection : public APIServerConnectionBase { #ifdef USE_DATETIME_TIME virtual void time_command(const TimeCommandRequest &msg) = 0; #endif +#ifdef USE_DATETIME_DATETIME + virtual void datetime_command(const DateTimeCommandRequest &msg) = 0; +#endif #ifdef USE_BLUETOOTH_PROXY virtual void subscribe_bluetooth_le_advertisements(const SubscribeBluetoothLEAdvertisementsRequest &msg) = 0; #endif @@ -453,6 +465,9 @@ class APIServerConnection : public APIServerConnectionBase { #ifdef USE_DATETIME_TIME void on_time_command_request(const TimeCommandRequest &msg) override; #endif +#ifdef USE_DATETIME_DATETIME + void on_date_time_command_request(const DateTimeCommandRequest &msg) override; +#endif #ifdef USE_BLUETOOTH_PROXY void on_subscribe_bluetooth_le_advertisements_request(const SubscribeBluetoothLEAdvertisementsRequest &msg) override; #endif diff --git a/esphome/components/api/api_server.cpp b/esphome/components/api/api_server.cpp index 6d4e4db1e8..0725547771 100644 --- a/esphome/components/api/api_server.cpp +++ b/esphome/components/api/api_server.cpp @@ -273,6 +273,15 @@ void APIServer::on_time_update(datetime::TimeEntity *obj) { } #endif +#ifdef USE_DATETIME_DATETIME +void APIServer::on_datetime_update(datetime::DateTimeEntity *obj) { + if (obj->is_internal()) + return; + for (auto &c : this->clients_) + c->send_datetime_state(obj); +} +#endif + #ifdef USE_TEXT void APIServer::on_text_update(text::Text *obj, const std::string &state) { if (obj->is_internal()) diff --git a/esphome/components/api/api_server.h b/esphome/components/api/api_server.h index e9e03cde0d..2e1fbdf67c 100644 --- a/esphome/components/api/api_server.h +++ b/esphome/components/api/api_server.h @@ -72,6 +72,9 @@ class APIServer : public Component, public Controller { #ifdef USE_DATETIME_TIME void on_time_update(datetime::TimeEntity *obj) override; #endif +#ifdef USE_DATETIME_DATETIME + void on_datetime_update(datetime::DateTimeEntity *obj) override; +#endif #ifdef USE_TEXT void on_text_update(text::Text *obj, const std::string &state) override; #endif diff --git a/esphome/components/api/list_entities.cpp b/esphome/components/api/list_entities.cpp index 82bfd45333..a7dbf9a6e7 100644 --- a/esphome/components/api/list_entities.cpp +++ b/esphome/components/api/list_entities.cpp @@ -71,6 +71,12 @@ bool ListEntitiesIterator::on_date(datetime::DateEntity *date) { return this->cl bool ListEntitiesIterator::on_time(datetime::TimeEntity *time) { return this->client_->send_time_info(time); } #endif +#ifdef USE_DATETIME_DATETIME +bool ListEntitiesIterator::on_datetime(datetime::DateTimeEntity *datetime) { + return this->client_->send_datetime_info(datetime); +} +#endif + #ifdef USE_TEXT bool ListEntitiesIterator::on_text(text::Text *text) { return this->client_->send_text_info(text); } #endif diff --git a/esphome/components/api/list_entities.h b/esphome/components/api/list_entities.h index 19cd99ea01..c1fd8b82c4 100644 --- a/esphome/components/api/list_entities.h +++ b/esphome/components/api/list_entities.h @@ -52,6 +52,9 @@ class ListEntitiesIterator : public ComponentIterator { #ifdef USE_DATETIME_TIME bool on_time(datetime::TimeEntity *time) override; #endif +#ifdef USE_DATETIME_DATETIME + bool on_datetime(datetime::DateTimeEntity *datetime) override; +#endif #ifdef USE_TEXT bool on_text(text::Text *text) override; #endif diff --git a/esphome/components/api/subscribe_state.cpp b/esphome/components/api/subscribe_state.cpp index 7aa8e8ffac..005ab0e6da 100644 --- a/esphome/components/api/subscribe_state.cpp +++ b/esphome/components/api/subscribe_state.cpp @@ -48,6 +48,11 @@ bool InitialStateIterator::on_date(datetime::DateEntity *date) { return this->cl #ifdef USE_DATETIME_TIME bool InitialStateIterator::on_time(datetime::TimeEntity *time) { return this->client_->send_time_state(time); } #endif +#ifdef USE_DATETIME_DATETIME +bool InitialStateIterator::on_datetime(datetime::DateTimeEntity *datetime) { + return this->client_->send_datetime_state(datetime); +} +#endif #ifdef USE_TEXT bool InitialStateIterator::on_text(text::Text *text) { return this->client_->send_text_state(text, text->state); } #endif diff --git a/esphome/components/api/subscribe_state.h b/esphome/components/api/subscribe_state.h index 17d444c441..8c725e422e 100644 --- a/esphome/components/api/subscribe_state.h +++ b/esphome/components/api/subscribe_state.h @@ -49,6 +49,9 @@ class InitialStateIterator : public ComponentIterator { #ifdef USE_DATETIME_TIME bool on_time(datetime::TimeEntity *time) override; #endif +#ifdef USE_DATETIME_DATETIME + bool on_datetime(datetime::DateTimeEntity *datetime) override; +#endif #ifdef USE_TEXT bool on_text(text::Text *text) override; #endif diff --git a/esphome/components/datetime/__init__.py b/esphome/components/datetime/__init__.py index a22c60aae9..639a035159 100644 --- a/esphome/components/datetime/__init__.py +++ b/esphome/components/datetime/__init__.py @@ -1,6 +1,5 @@ import esphome.codegen as cg -# import cpp_generator as cpp import esphome.config_validation as cv from esphome import automation from esphome.components import mqtt, time @@ -13,6 +12,7 @@ from esphome.const import ( CONF_TYPE, CONF_MQTT_ID, CONF_DATE, + CONF_DATETIME, CONF_TIME, CONF_YEAR, CONF_MONTH, @@ -27,6 +27,7 @@ from esphome.cpp_helpers import setup_entity CODEOWNERS = ["@rfdarter", "@jesserockz"] +DEPENDENCIES = ["time"] IS_PLATFORM_COMPONENT = True @@ -34,10 +35,12 @@ datetime_ns = cg.esphome_ns.namespace("datetime") DateTimeBase = datetime_ns.class_("DateTimeBase", cg.EntityBase) DateEntity = datetime_ns.class_("DateEntity", DateTimeBase) TimeEntity = datetime_ns.class_("TimeEntity", DateTimeBase) +DateTimeEntity = datetime_ns.class_("DateTimeEntity", DateTimeBase) # Actions DateSetAction = datetime_ns.class_("DateSetAction", automation.Action) TimeSetAction = datetime_ns.class_("TimeSetAction", automation.Action) +DateTimeSetAction = datetime_ns.class_("DateTimeSetAction", automation.Action) DateTimeStateTrigger = datetime_ns.class_( "DateTimeStateTrigger", automation.Trigger.template(cg.ESPTime) @@ -46,6 +49,12 @@ DateTimeStateTrigger = datetime_ns.class_( OnTimeTrigger = datetime_ns.class_( "OnTimeTrigger", automation.Trigger, cg.Component, cg.Parented.template(TimeEntity) ) +OnDateTimeTrigger = datetime_ns.class_( + "OnDateTimeTrigger", + automation.Trigger, + cg.Component, + cg.Parented.template(DateTimeEntity), +) DATETIME_MODES = [ "DATE", @@ -61,45 +70,55 @@ _DATETIME_SCHEMA = cv.Schema( cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(DateTimeStateTrigger), } ), + cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock), } ).extend(cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)) def date_schema(class_: MockObjClass) -> cv.Schema: - schema = { - cv.GenerateID(): cv.declare_id(class_), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTDateComponent), - cv.Optional(CONF_TYPE, default="DATE"): cv.one_of("DATE", upper=True), - } + schema = cv.Schema( + { + cv.GenerateID(): cv.declare_id(class_), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTDateComponent), + cv.Optional(CONF_TYPE, default="DATE"): cv.one_of("DATE", upper=True), + } + ) return _DATETIME_SCHEMA.extend(schema) def time_schema(class_: MockObjClass) -> cv.Schema: - schema = { - cv.GenerateID(): cv.declare_id(class_), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTimeComponent), - cv.Optional(CONF_TYPE, default="TIME"): cv.one_of("TIME", upper=True), - cv.Inclusive( - CONF_ON_TIME, - group_of_inclusion=CONF_ON_TIME, - msg="`on_time` and `time_id` must both be specified", - ): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OnTimeTrigger), - } - ), - cv.Inclusive(CONF_TIME_ID, group_of_inclusion=CONF_ON_TIME): cv.use_id( - time.RealTimeClock - ), - } + schema = cv.Schema( + { + cv.GenerateID(): cv.declare_id(class_), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTimeComponent), + cv.Optional(CONF_TYPE, default="TIME"): cv.one_of("TIME", upper=True), + cv.Optional(CONF_ON_TIME): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OnTimeTrigger), + } + ), + } + ) return _DATETIME_SCHEMA.extend(schema) def datetime_schema(class_: MockObjClass) -> cv.Schema: - schema = { - cv.GenerateID(): cv.declare_id(class_), - cv.Optional(CONF_TYPE, default="DATETIME"): cv.one_of("DATETIME", upper=True), - } + schema = cv.Schema( + { + cv.GenerateID(): cv.declare_id(class_), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id( + mqtt.MQTTDateTimeComponent + ), + cv.Optional(CONF_TYPE, default="DATETIME"): cv.one_of( + "DATETIME", upper=True + ), + cv.Optional(CONF_ON_TIME): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OnDateTimeTrigger), + } + ), + } + ) return _DATETIME_SCHEMA.extend(schema) @@ -113,13 +132,11 @@ async def setup_datetime_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(cg.ESPTime, "x")], conf) - rtc_id = config.get(CONF_TIME_ID) - rtc = None - if rtc_id is not None: - rtc = await cg.get_variable(rtc_id) + rtc = await cg.get_variable(config[CONF_TIME_ID]) + cg.add(var.set_rtc(rtc)) + for conf in config.get(CONF_ON_TIME, []): - assert rtc is not None - trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], rtc) + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) await automation.build_automation(trigger, [], conf) await cg.register_component(trigger, conf) await cg.register_parented(trigger, var) @@ -161,16 +178,16 @@ async def datetime_date_set_to_code(config, action_id, template_arg, args): action_var = cg.new_Pvariable(action_id, template_arg) await cg.register_parented(action_var, config[CONF_ID]) - date = config[CONF_DATE] - if cg.is_template(date): - template_ = await cg.templatable(config[CONF_DATE], [], cg.ESPTime) + date_config = config[CONF_DATE] + if cg.is_template(date_config): + template_ = await cg.templatable(date_config, [], cg.ESPTime) cg.add(action_var.set_date(template_)) else: date_struct = cg.StructInitializer( cg.ESPTime, - ("day_of_month", date[CONF_DAY]), - ("month", date[CONF_MONTH]), - ("year", date[CONF_YEAR]), + ("day_of_month", date_config[CONF_DAY]), + ("month", date_config[CONF_MONTH]), + ("year", date_config[CONF_YEAR]), ) cg.add(action_var.set_date(date_struct)) return action_var @@ -194,7 +211,7 @@ async def datetime_time_set_to_code(config, action_id, template_arg, args): time_config = config[CONF_TIME] if cg.is_template(time_config): - template_ = await cg.templatable(config[CONF_TIME], [], cg.ESPTime) + template_ = await cg.templatable(time_config, [], cg.ESPTime) cg.add(action_var.set_time(template_)) else: time_struct = cg.StructInitializer( @@ -205,3 +222,35 @@ async def datetime_time_set_to_code(config, action_id, template_arg, args): ) cg.add(action_var.set_time(time_struct)) return action_var + + +@automation.register_action( + "datetime.datetime.set", + DateTimeSetAction, + cv.Schema( + { + cv.Required(CONF_ID): cv.use_id(DateTimeEntity), + cv.Required(CONF_DATETIME): cv.Any(cv.returning_lambda, cv.date_time()), + }, + ), +) +async def datetime_datetime_set_to_code(config, action_id, template_arg, args): + action_var = cg.new_Pvariable(action_id, template_arg) + await cg.register_parented(action_var, config[CONF_ID]) + + datetime_config = config[CONF_DATETIME] + if cg.is_template(datetime_config): + template_ = await cg.templatable(datetime_config, [], cg.ESPTime) + cg.add(action_var.set_datetime(template_)) + else: + datetime_struct = cg.StructInitializer( + cg.ESPTime, + ("second", datetime_config[CONF_SECOND]), + ("minute", datetime_config[CONF_MINUTE]), + ("hour", datetime_config[CONF_HOUR]), + ("day_of_month", datetime_config[CONF_DAY]), + ("month", datetime_config[CONF_MONTH]), + ("year", datetime_config[CONF_YEAR]), + ) + cg.add(action_var.set_datetime(datetime_struct)) + return action_var diff --git a/esphome/components/datetime/date_entity.cpp b/esphome/components/datetime/date_entity.cpp index 8b58a8faf7..19399c1e59 100644 --- a/esphome/components/datetime/date_entity.cpp +++ b/esphome/components/datetime/date_entity.cpp @@ -40,10 +40,13 @@ void DateCall::validate_() { if (this->year_.has_value() && (this->year_ < 1970 || this->year_ > 3000)) { ESP_LOGE(TAG, "Year must be between 1970 and 3000"); this->year_.reset(); + this->month_.reset(); + this->day_.reset(); } if (this->month_.has_value() && (this->month_ < 1 || this->month_ > 12)) { ESP_LOGE(TAG, "Month must be between 1 and 12"); this->month_.reset(); + this->day_.reset(); } if (this->day_.has_value()) { uint16_t year = 0; diff --git a/esphome/components/datetime/datetime_base.h b/esphome/components/datetime/datetime_base.h index 2f2d27e102..c8240390e3 100644 --- a/esphome/components/datetime/datetime_base.h +++ b/esphome/components/datetime/datetime_base.h @@ -5,6 +5,8 @@ #include "esphome/core/entity_base.h" #include "esphome/core/time.h" +#include "esphome/components/time/real_time_clock.h" + namespace esphome { namespace datetime { @@ -17,9 +19,14 @@ class DateTimeBase : public EntityBase { void add_on_state_callback(std::function &&callback) { this->state_callback_.add(std::move(callback)); } + void set_rtc(time::RealTimeClock *rtc) { this->rtc_ = rtc; } + time::RealTimeClock *get_rtc() const { return this->rtc_; } + protected: CallbackManager state_callback_; + time::RealTimeClock *rtc_; + bool has_state_{false}; }; diff --git a/esphome/components/datetime/datetime_entity.cpp b/esphome/components/datetime/datetime_entity.cpp new file mode 100644 index 0000000000..9a61d341e4 --- /dev/null +++ b/esphome/components/datetime/datetime_entity.cpp @@ -0,0 +1,252 @@ +#include "datetime_entity.h" + +#ifdef USE_DATETIME_DATETIME + +#include "esphome/core/log.h" + +namespace esphome { +namespace datetime { + +static const char *const TAG = "datetime.datetime_entity"; + +void DateTimeEntity::publish_state() { + if (this->year_ == 0 || this->month_ == 0 || this->day_ == 0) { + this->has_state_ = false; + return; + } + if (this->year_ < 1970 || this->year_ > 3000) { + this->has_state_ = false; + ESP_LOGE(TAG, "Year must be between 1970 and 3000"); + return; + } + if (this->month_ < 1 || this->month_ > 12) { + this->has_state_ = false; + ESP_LOGE(TAG, "Month must be between 1 and 12"); + return; + } + if (this->day_ > days_in_month(this->month_, this->year_)) { + this->has_state_ = false; + ESP_LOGE(TAG, "Day must be between 1 and %d for month %d", days_in_month(this->month_, this->year_), this->month_); + return; + } + if (this->hour_ > 23) { + this->has_state_ = false; + ESP_LOGE(TAG, "Hour must be between 0 and 23"); + return; + } + if (this->minute_ > 59) { + this->has_state_ = false; + ESP_LOGE(TAG, "Minute must be between 0 and 59"); + return; + } + if (this->second_ > 59) { + this->has_state_ = false; + ESP_LOGE(TAG, "Second must be between 0 and 59"); + return; + } + this->has_state_ = true; + ESP_LOGD(TAG, "'%s': Sending datetime %04u-%02u-%02u %02d:%02d:%02d", this->get_name().c_str(), this->year_, + this->month_, this->day_, this->hour_, this->minute_, this->second_); + this->state_callback_.call(); +} + +DateTimeCall DateTimeEntity::make_call() { return DateTimeCall(this); } + +ESPTime DateTimeEntity::state_as_esptime() const { + ESPTime obj; + obj.year = this->year_; + obj.month = this->month_; + obj.day_of_month = this->day_; + obj.hour = this->hour_; + obj.minute = this->minute_; + obj.second = this->second_; + obj.day_of_week = 1; // Required to be valid for recalc_timestamp_local but not used. + obj.day_of_year = 1; // Required to be valid for recalc_timestamp_local but not used. + obj.recalc_timestamp_local(false); + return obj; +} + +void DateTimeCall::validate_() { + if (this->year_.has_value() && (this->year_ < 1970 || this->year_ > 3000)) { + ESP_LOGE(TAG, "Year must be between 1970 and 3000"); + this->year_.reset(); + this->month_.reset(); + this->day_.reset(); + } + if (this->month_.has_value() && (this->month_ < 1 || this->month_ > 12)) { + ESP_LOGE(TAG, "Month must be between 1 and 12"); + this->month_.reset(); + this->day_.reset(); + } + if (this->day_.has_value()) { + uint16_t year = 0; + uint8_t month = 0; + if (this->month_.has_value()) { + month = *this->month_; + } else { + if (this->parent_->month != 0) { + month = this->parent_->month; + } else { + ESP_LOGE(TAG, "Month must be set to validate day"); + this->day_.reset(); + } + } + if (this->year_.has_value()) { + year = *this->year_; + } else { + if (this->parent_->year != 0) { + year = this->parent_->year; + } else { + ESP_LOGE(TAG, "Year must be set to validate day"); + this->day_.reset(); + } + } + if (this->day_.has_value() && *this->day_ > days_in_month(month, year)) { + ESP_LOGE(TAG, "Day must be between 1 and %d for month %d", days_in_month(month, year), month); + this->day_.reset(); + } + } + + if (this->hour_.has_value() && this->hour_ > 23) { + ESP_LOGE(TAG, "Hour must be between 0 and 23"); + this->hour_.reset(); + } + if (this->minute_.has_value() && this->minute_ > 59) { + ESP_LOGE(TAG, "Minute must be between 0 and 59"); + this->minute_.reset(); + } + if (this->second_.has_value() && this->second_ > 59) { + ESP_LOGE(TAG, "Second must be between 0 and 59"); + this->second_.reset(); + } +} + +void DateTimeCall::perform() { + this->validate_(); + ESP_LOGD(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + + if (this->year_.has_value()) { + ESP_LOGD(TAG, " Year: %d", *this->year_); + } + if (this->month_.has_value()) { + ESP_LOGD(TAG, " Month: %d", *this->month_); + } + if (this->day_.has_value()) { + ESP_LOGD(TAG, " Day: %d", *this->day_); + } + if (this->hour_.has_value()) { + ESP_LOGD(TAG, " Hour: %d", *this->hour_); + } + if (this->minute_.has_value()) { + ESP_LOGD(TAG, " Minute: %d", *this->minute_); + } + if (this->second_.has_value()) { + ESP_LOGD(TAG, " Second: %d", *this->second_); + } + this->parent_->control(*this); +} + +DateTimeCall &DateTimeCall::set_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, + uint8_t second) { + this->year_ = year; + this->month_ = month; + this->day_ = day; + this->hour_ = hour; + this->minute_ = minute; + this->second_ = second; + return *this; +}; + +DateTimeCall &DateTimeCall::set_datetime(ESPTime datetime) { + return this->set_datetime(datetime.year, datetime.month, datetime.day_of_month, datetime.hour, datetime.minute, + datetime.second); +}; + +DateTimeCall &DateTimeCall::set_datetime(const std::string &datetime) { + ESPTime val{}; + if (!ESPTime::strptime(datetime, val)) { + ESP_LOGE(TAG, "Could not convert the time string to an ESPTime object"); + return *this; + } + return this->set_datetime(val); +} + +DateTimeCall &DateTimeCall::set_datetime(time_t epoch_seconds) { + ESPTime val = ESPTime::from_epoch_local(epoch_seconds); + return this->set_datetime(val); +} + +DateTimeCall DateTimeEntityRestoreState::to_call(DateTimeEntity *datetime) { + DateTimeCall call = datetime->make_call(); + call.set_datetime(this->year, this->month, this->day, this->hour, this->minute, this->second); + return call; +} + +void DateTimeEntityRestoreState::apply(DateTimeEntity *time) { + time->year_ = this->year; + time->month_ = this->month; + time->day_ = this->day; + time->hour_ = this->hour; + time->minute_ = this->minute; + time->second_ = this->second; + time->publish_state(); +} + +static const int MAX_TIMESTAMP_DRIFT = 900; // how far can the clock drift before we consider + // there has been a drastic time synchronization + +void OnDateTimeTrigger::loop() { + if (!this->parent_->has_state()) { + return; + } + ESPTime time = this->parent_->rtc_->now(); + if (!time.is_valid()) { + return; + } + if (this->last_check_.has_value()) { + if (*this->last_check_ > time && this->last_check_->timestamp - time.timestamp > MAX_TIMESTAMP_DRIFT) { + // We went back in time (a lot), probably caused by time synchronization + ESP_LOGW(TAG, "Time has jumped back!"); + } else if (*this->last_check_ >= time) { + // already handled this one + return; + } else if (time > *this->last_check_ && time.timestamp - this->last_check_->timestamp > MAX_TIMESTAMP_DRIFT) { + // We went ahead in time (a lot), probably caused by time synchronization + ESP_LOGW(TAG, "Time has jumped ahead!"); + this->last_check_ = time; + return; + } + + while (true) { + this->last_check_->increment_second(); + if (*this->last_check_ >= time) + break; + + if (this->matches_(*this->last_check_)) { + this->trigger(); + break; + } + } + } + + this->last_check_ = time; + if (!time.fields_in_range()) { + ESP_LOGW(TAG, "Time is out of range!"); + ESP_LOGD(TAG, "Second=%02u Minute=%02u Hour=%02u Day=%02u Month=%02u Year=%04u", time.second, time.minute, + time.hour, time.day_of_month, time.month, time.year); + } + + if (this->matches_(time)) + this->trigger(); +} + +bool OnDateTimeTrigger::matches_(const ESPTime &time) const { + return time.is_valid() && time.year == this->parent_->year && time.month == this->parent_->month && + time.day_of_month == this->parent_->day && time.hour == this->parent_->hour && + time.minute == this->parent_->minute && time.second == this->parent_->second; +} + +} // namespace datetime +} // namespace esphome + +#endif // USE_DATETIME_TIME diff --git a/esphome/components/datetime/datetime_entity.h b/esphome/components/datetime/datetime_entity.h new file mode 100644 index 0000000000..d541fa96b1 --- /dev/null +++ b/esphome/components/datetime/datetime_entity.h @@ -0,0 +1,150 @@ +#pragma once + +#include "esphome/core/defines.h" + +#ifdef USE_DATETIME_DATETIME + +#include "esphome/core/automation.h" +#include "esphome/core/helpers.h" +#include "esphome/core/time.h" + +#include "datetime_base.h" + +namespace esphome { +namespace datetime { + +#define LOG_DATETIME_DATETIME(prefix, type, obj) \ + if ((obj) != nullptr) { \ + ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ + if (!(obj)->get_icon().empty()) { \ + ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \ + } \ + } + +class DateTimeCall; +class DateTimeEntity; + +struct DateTimeEntityRestoreState { + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + + DateTimeCall to_call(DateTimeEntity *datetime); + void apply(DateTimeEntity *datetime); +} __attribute__((packed)); + +class DateTimeEntity : public DateTimeBase { + protected: + uint16_t year_; + uint8_t month_; + uint8_t day_; + uint8_t hour_; + uint8_t minute_; + uint8_t second_; + + public: + void publish_state(); + DateTimeCall make_call(); + + ESPTime state_as_esptime() const override; + + const uint16_t &year = year_; + const uint8_t &month = month_; + const uint8_t &day = day_; + const uint8_t &hour = hour_; + const uint8_t &minute = minute_; + const uint8_t &second = second_; + + protected: + friend class DateTimeCall; + friend struct DateTimeEntityRestoreState; + friend class OnDateTimeTrigger; + + virtual void control(const DateTimeCall &call) = 0; +}; + +class DateTimeCall { + public: + explicit DateTimeCall(DateTimeEntity *parent) : parent_(parent) {} + void perform(); + DateTimeCall &set_datetime(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second); + DateTimeCall &set_datetime(ESPTime datetime); + DateTimeCall &set_datetime(const std::string &datetime); + DateTimeCall &set_datetime(time_t epoch_seconds); + + DateTimeCall &set_year(uint16_t year) { + this->year_ = year; + return *this; + } + DateTimeCall &set_month(uint8_t month) { + this->month_ = month; + return *this; + } + DateTimeCall &set_day(uint8_t day) { + this->day_ = day; + return *this; + } + DateTimeCall &set_hour(uint8_t hour) { + this->hour_ = hour; + return *this; + } + DateTimeCall &set_minute(uint8_t minute) { + this->minute_ = minute; + return *this; + } + DateTimeCall &set_second(uint8_t second) { + this->second_ = second; + return *this; + } + + optional get_year() const { return this->year_; } + optional get_month() const { return this->month_; } + optional get_day() const { return this->day_; } + optional get_hour() const { return this->hour_; } + optional get_minute() const { return this->minute_; } + optional get_second() const { return this->second_; } + + protected: + void validate_(); + + DateTimeEntity *parent_; + + optional year_; + optional month_; + optional day_; + optional hour_; + optional minute_; + optional second_; +}; + +template class DateTimeSetAction : public Action, public Parented { + public: + TEMPLATABLE_VALUE(ESPTime, datetime) + + void play(Ts... x) override { + auto call = this->parent_->make_call(); + + if (this->datetime_.has_value()) { + call.set_datetime(this->datetime_.value(x...)); + } + call.perform(); + } +}; + +class OnDateTimeTrigger : public Trigger<>, public Component, public Parented { + public: + void loop() override; + + protected: + bool matches_(const ESPTime &time) const; + + optional last_check_; +}; + +} // namespace datetime +} // namespace esphome + +#endif // USE_DATETIME_DATETIME diff --git a/esphome/components/datetime/time_entity.cpp b/esphome/components/datetime/time_entity.cpp index 98558152d7..ea5e6684d0 100644 --- a/esphome/components/datetime/time_entity.cpp +++ b/esphome/components/datetime/time_entity.cpp @@ -94,8 +94,6 @@ void TimeEntityRestoreState::apply(TimeEntity *time) { time->publish_state(); } -#ifdef USE_TIME - static const int MAX_TIMESTAMP_DRIFT = 900; // how far can the clock drift before we consider // there has been a drastic time synchronization @@ -103,7 +101,7 @@ void OnTimeTrigger::loop() { if (!this->parent_->has_state()) { return; } - ESPTime time = this->rtc_->now(); + ESPTime time = this->parent_->rtc_->now(); if (!time.is_valid()) { return; } @@ -148,8 +146,6 @@ bool OnTimeTrigger::matches_(const ESPTime &time) const { time.second == this->parent_->second; } -#endif - } // namespace datetime } // namespace esphome diff --git a/esphome/components/datetime/time_entity.h b/esphome/components/datetime/time_entity.h index 956c09e2b4..62e593d28a 100644 --- a/esphome/components/datetime/time_entity.h +++ b/esphome/components/datetime/time_entity.h @@ -10,10 +10,6 @@ #include "datetime_base.h" -#ifdef USE_TIME -#include "esphome/components/time/real_time_clock.h" -#endif - namespace esphome { namespace datetime { @@ -27,6 +23,7 @@ namespace datetime { class TimeCall; class TimeEntity; +class OnTimeTrigger; struct TimeEntityRestoreState { uint8_t hour; @@ -62,6 +59,7 @@ class TimeEntity : public DateTimeBase { protected: friend class TimeCall; friend struct TimeEntityRestoreState; + friend class OnTimeTrigger; virtual void control(const TimeCall &call) = 0; }; @@ -115,22 +113,16 @@ template class TimeSetAction : public Action, public Pare } }; -#ifdef USE_TIME - class OnTimeTrigger : public Trigger<>, public Component, public Parented { public: - explicit OnTimeTrigger(time::RealTimeClock *rtc) : rtc_(rtc) {} void loop() override; protected: bool matches_(const ESPTime &time) const; - time::RealTimeClock *rtc_; optional last_check_; }; -#endif - } // namespace datetime } // namespace esphome diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index 7a42140ef6..064362c619 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -115,6 +115,7 @@ MQTTTextSensor = mqtt_ns.class_("MQTTTextSensor", MQTTComponent) MQTTNumberComponent = mqtt_ns.class_("MQTTNumberComponent", MQTTComponent) MQTTDateComponent = mqtt_ns.class_("MQTTDateComponent", MQTTComponent) MQTTTimeComponent = mqtt_ns.class_("MQTTTimeComponent", MQTTComponent) +MQTTDateTimeComponent = mqtt_ns.class_("MQTTDateTimeComponent", MQTTComponent) MQTTTextComponent = mqtt_ns.class_("MQTTTextComponent", MQTTComponent) MQTTSelectComponent = mqtt_ns.class_("MQTTSelectComponent", MQTTComponent) MQTTButtonComponent = mqtt_ns.class_("MQTTButtonComponent", MQTTComponent) diff --git a/esphome/components/mqtt/mqtt_datetime.cpp b/esphome/components/mqtt/mqtt_datetime.cpp new file mode 100644 index 0000000000..4fa44aafb8 --- /dev/null +++ b/esphome/components/mqtt/mqtt_datetime.cpp @@ -0,0 +1,84 @@ +#include "mqtt_datetime.h" + +#include +#include "esphome/core/log.h" + +#include "mqtt_const.h" + +#ifdef USE_MQTT +#ifdef USE_DATETIME_TIME + +namespace esphome { +namespace mqtt { + +static const char *const TAG = "mqtt.datetime.time"; + +using namespace esphome::datetime; + +MQTTDateTimeComponent::MQTTDateTimeComponent(DateTimeEntity *datetime) : datetime_(datetime) {} + +void MQTTDateTimeComponent::setup() { + this->subscribe_json(this->get_command_topic_(), [this](const std::string &topic, JsonObject root) { + auto call = this->datetime_->make_call(); + if (root.containsKey("year")) { + call.set_year(root["year"]); + } + if (root.containsKey("month")) { + call.set_month(root["month"]); + } + if (root.containsKey("day")) { + call.set_day(root["day"]); + } + if (root.containsKey("hour")) { + call.set_hour(root["hour"]); + } + if (root.containsKey("minute")) { + call.set_minute(root["minute"]); + } + if (root.containsKey("second")) { + call.set_second(root["second"]); + } + call.perform(); + }); + this->datetime_->add_on_state_callback([this]() { + this->publish_state(this->datetime_->year, this->datetime_->month, this->datetime_->day, this->datetime_->hour, + this->datetime_->minute, this->datetime_->second); + }); +} + +void MQTTDateTimeComponent::dump_config() { + ESP_LOGCONFIG(TAG, "MQTT DateTime '%s':", this->datetime_->get_name().c_str()); + LOG_MQTT_COMPONENT(true, true) +} + +std::string MQTTDateTimeComponent::component_type() const { return "datetime"; } +const EntityBase *MQTTDateTimeComponent::get_entity() const { return this->datetime_; } + +void MQTTDateTimeComponent::send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) { + // Nothing extra to add here +} +bool MQTTDateTimeComponent::send_initial_state() { + if (this->datetime_->has_state()) { + return this->publish_state(this->datetime_->year, this->datetime_->month, this->datetime_->day, + this->datetime_->hour, this->datetime_->minute, this->datetime_->second); + } else { + return true; + } +} +bool MQTTDateTimeComponent::publish_state(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, + uint8_t second) { + return this->publish_json(this->get_state_topic_(), [year, month, day, hour, minute, second](JsonObject root) { + root["year"] = year; + root["month"] = month; + root["day"] = day; + root["hour"] = hour; + root["minute"] = minute; + root["second"] = second; + }); +} + +} // namespace mqtt +} // namespace esphome + +#endif // USE_DATETIME_TIME +#endif // USE_MQTT diff --git a/esphome/components/mqtt/mqtt_datetime.h b/esphome/components/mqtt/mqtt_datetime.h new file mode 100644 index 0000000000..f0d68ad2e1 --- /dev/null +++ b/esphome/components/mqtt/mqtt_datetime.h @@ -0,0 +1,45 @@ +#pragma once + +#include "esphome/core/defines.h" + +#ifdef USE_MQTT +#ifdef USE_DATETIME_TIME + +#include "esphome/components/datetime/datetime_entity.h" +#include "mqtt_component.h" + +namespace esphome { +namespace mqtt { + +class MQTTDateTimeComponent : public mqtt::MQTTComponent { + public: + /** Construct this MQTTDateTimeComponent instance with the provided friendly_name and time + * + * @param time The time entity. + */ + explicit MQTTDateTimeComponent(datetime::DateTimeEntity *time); + + // ========== INTERNAL METHODS ========== + // (In most use cases you won't need these) + /// Override setup. + void setup() override; + void dump_config() override; + + void send_discovery(JsonObject root, mqtt::SendDiscoveryConfig &config) override; + + bool send_initial_state() override; + + bool publish_state(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second); + + protected: + std::string component_type() const override; + const EntityBase *get_entity() const override; + + datetime::DateTimeEntity *datetime_; +}; + +} // namespace mqtt +} // namespace esphome + +#endif // USE_DATETIME_DATE +#endif // USE_MQTT diff --git a/esphome/components/template/datetime/__init__.py b/esphome/components/template/datetime/__init__.py index 53d9d1b9d3..bf7154ef76 100644 --- a/esphome/components/template/datetime/__init__.py +++ b/esphome/components/template/datetime/__init__.py @@ -31,6 +31,10 @@ TemplateTime = template_ns.class_( "TemplateTime", datetime.TimeEntity, cg.PollingComponent ) +TemplateDateTime = template_ns.class_( + "TemplateDateTime", datetime.DateTimeEntity, cg.PollingComponent +) + def validate(config): config = config.copy() @@ -78,6 +82,13 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_INITIAL_VALUE): cv.date_time(allowed_date=False), } ), + "DATETIME": datetime.datetime_schema(TemplateDateTime) + .extend(_BASE_SCHEMA) + .extend( + { + cv.Optional(CONF_INITIAL_VALUE): cv.date_time(), + } + ), }, upper=True, ), @@ -116,6 +127,17 @@ async def to_code(config): ("hour", initial_value[CONF_HOUR]), ) cg.add(var.set_initial_value(time_struct)) + elif config[CONF_TYPE] == "DATETIME": + datetime_struct = cg.StructInitializer( + cg.ESPTime, + ("second", initial_value[CONF_SECOND]), + ("minute", initial_value[CONF_MINUTE]), + ("hour", initial_value[CONF_HOUR]), + ("day_of_month", initial_value[CONF_DAY]), + ("month", initial_value[CONF_MONTH]), + ("year", initial_value[CONF_YEAR]), + ) + cg.add(var.set_initial_value(datetime_struct)) if CONF_SET_ACTION in config: await automation.build_automation( diff --git a/esphome/components/template/datetime/template_datetime.cpp b/esphome/components/template/datetime/template_datetime.cpp new file mode 100644 index 0000000000..3ab74e197f --- /dev/null +++ b/esphome/components/template/datetime/template_datetime.cpp @@ -0,0 +1,150 @@ +#include "template_datetime.h" + +#ifdef USE_DATETIME_DATETIME + +#include "esphome/core/log.h" + +namespace esphome { +namespace template_ { + +static const char *const TAG = "template.datetime"; + +void TemplateDateTime::setup() { + if (this->f_.has_value()) + return; + + ESPTime state{}; + + if (!this->restore_value_) { + state = this->initial_value_; + } else { + datetime::DateTimeEntityRestoreState temp; + this->pref_ = global_preferences->make_preference(194434090U ^ + this->get_object_id_hash()); + if (this->pref_.load(&temp)) { + temp.apply(this); + return; + } else { + // set to inital value if loading from pref failed + state = this->initial_value_; + } + } + + this->year_ = state.year; + this->month_ = state.month; + this->day_ = state.day_of_month; + this->hour_ = state.hour; + this->minute_ = state.minute; + this->second_ = state.second; + this->publish_state(); +} + +void TemplateDateTime::update() { + if (!this->f_.has_value()) + return; + + auto val = (*this->f_)(); + if (!val.has_value()) + return; + + this->year_ = val->year; + this->month_ = val->month; + this->day_ = val->day_of_month; + this->hour_ = val->hour; + this->minute_ = val->minute; + this->second_ = val->second; + this->publish_state(); +} + +void TemplateDateTime::control(const datetime::DateTimeCall &call) { + bool has_year = call.get_year().has_value(); + bool has_month = call.get_month().has_value(); + bool has_day = call.get_day().has_value(); + bool has_hour = call.get_hour().has_value(); + bool has_minute = call.get_minute().has_value(); + bool has_second = call.get_second().has_value(); + + ESPTime value = {}; + if (has_year) + value.year = *call.get_year(); + + if (has_month) + value.month = *call.get_month(); + + if (has_day) + value.day_of_month = *call.get_day(); + + if (has_hour) + value.hour = *call.get_hour(); + + if (has_minute) + value.minute = *call.get_minute(); + + if (has_second) + value.second = *call.get_second(); + + this->set_trigger_->trigger(value); + + if (this->optimistic_) { + if (has_year) + this->year_ = *call.get_year(); + if (has_month) + this->month_ = *call.get_month(); + if (has_day) + this->day_ = *call.get_day(); + if (has_hour) + this->hour_ = *call.get_hour(); + if (has_minute) + this->minute_ = *call.get_minute(); + if (has_second) + this->second_ = *call.get_second(); + this->publish_state(); + } + + if (this->restore_value_) { + datetime::DateTimeEntityRestoreState temp = {}; + if (has_year) { + temp.year = *call.get_year(); + } else { + temp.year = this->year_; + } + if (has_month) { + temp.month = *call.get_month(); + } else { + temp.month = this->month_; + } + if (has_day) { + temp.day = *call.get_day(); + } else { + temp.day = this->day_; + } + if (has_hour) { + temp.hour = *call.get_hour(); + } else { + temp.hour = this->hour_; + } + if (has_minute) { + temp.minute = *call.get_minute(); + } else { + temp.minute = this->minute_; + } + if (has_second) { + temp.second = *call.get_second(); + } else { + temp.second = this->second_; + } + + this->pref_.save(&temp); + } +} + +void TemplateDateTime::dump_config() { + LOG_DATETIME_DATETIME("", "Template DateTime", this); + ESP_LOGCONFIG(TAG, " Optimistic: %s", YESNO(this->optimistic_)); + LOG_UPDATE_INTERVAL(this); +} + +} // namespace template_ +} // namespace esphome + +#endif // USE_DATETIME_DATETIME diff --git a/esphome/components/template/datetime/template_datetime.h b/esphome/components/template/datetime/template_datetime.h new file mode 100644 index 0000000000..cb1fd01132 --- /dev/null +++ b/esphome/components/template/datetime/template_datetime.h @@ -0,0 +1,46 @@ +#pragma once + +#include "esphome/core/defines.h" + +#ifdef USE_DATETIME_TIME + +#include "esphome/components/datetime/datetime_entity.h" +#include "esphome/core/automation.h" +#include "esphome/core/component.h" +#include "esphome/core/preferences.h" +#include "esphome/core/time.h" + +namespace esphome { +namespace template_ { + +class TemplateDateTime : public datetime::DateTimeEntity, public PollingComponent { + public: + void set_template(std::function()> &&f) { this->f_ = f; } + + void setup() override; + void update() override; + void dump_config() override; + float get_setup_priority() const override { return setup_priority::HARDWARE; } + + Trigger *get_set_trigger() const { return this->set_trigger_; } + void set_optimistic(bool optimistic) { this->optimistic_ = optimistic; } + + void set_initial_value(ESPTime initial_value) { this->initial_value_ = initial_value; } + void set_restore_value(bool restore_value) { this->restore_value_ = restore_value; } + + protected: + void control(const datetime::DateTimeCall &call) override; + + bool optimistic_{false}; + ESPTime initial_value_{}; + bool restore_value_{false}; + Trigger *set_trigger_ = new Trigger(); + optional()>> f_; + + ESPPreferenceObject pref_; +}; + +} // namespace template_ +} // namespace esphome + +#endif // USE_DATETIME_TIME diff --git a/esphome/components/time/real_time_clock.cpp b/esphome/components/time/real_time_clock.cpp index 9b903d098b..2b9a95c6bd 100644 --- a/esphome/components/time/real_time_clock.cpp +++ b/esphome/components/time/real_time_clock.cpp @@ -13,6 +13,8 @@ #endif #include +#include + namespace esphome { namespace time { diff --git a/esphome/components/web_server/list_entities.cpp b/esphome/components/web_server/list_entities.cpp index 8d08783c8c..42af72e872 100644 --- a/esphome/components/web_server/list_entities.cpp +++ b/esphome/components/web_server/list_entities.cpp @@ -129,6 +129,15 @@ bool ListEntitiesIterator::on_time(datetime::TimeEntity *time) { } #endif +#ifdef USE_DATETIME_DATETIME +bool ListEntitiesIterator::on_datetime(datetime::DateTimeEntity *datetime) { + if (this->web_server_->events_.count() == 0) + return true; + this->web_server_->events_.send(this->web_server_->datetime_json(datetime, DETAIL_ALL).c_str(), "state"); + return true; +} +#endif + #ifdef USE_TEXT bool ListEntitiesIterator::on_text(text::Text *text) { if (this->web_server_->events_.count() == 0) diff --git a/esphome/components/web_server/list_entities.h b/esphome/components/web_server/list_entities.h index af84cb1d2b..47d427d9b5 100644 --- a/esphome/components/web_server/list_entities.h +++ b/esphome/components/web_server/list_entities.h @@ -47,6 +47,9 @@ class ListEntitiesIterator : public ComponentIterator { #ifdef USE_DATETIME_TIME bool on_time(datetime::TimeEntity *time) override; #endif +#ifdef USE_DATETIME_DATETIME + bool on_datetime(datetime::DateTimeEntity *datetime) override; +#endif #ifdef USE_TEXT bool on_text(text::Text *text) override; #endif diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 0202038ffc..6a7b4121f0 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -926,6 +926,8 @@ std::string WebServer::date_json(datetime::DateEntity *obj, JsonDetail start_con #ifdef USE_DATETIME_TIME void WebServer::on_time_update(datetime::TimeEntity *obj) { + if (this->events_.count() == 0) + return; this->events_.send(this->time_json(obj, DETAIL_STATE).c_str(), "state"); } void WebServer::handle_time_request(AsyncWebServerRequest *request, const UrlMatch &match) { @@ -970,6 +972,55 @@ std::string WebServer::time_json(datetime::TimeEntity *obj, JsonDetail start_con } #endif // USE_DATETIME_TIME +#ifdef USE_DATETIME_DATETIME +void WebServer::on_datetime_update(datetime::DateTimeEntity *obj) { + if (this->events_.count() == 0) + return; + this->events_.send(this->datetime_json(obj, DETAIL_STATE).c_str(), "state"); +} +void WebServer::handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match) { + for (auto *obj : App.get_datetimes()) { + if (obj->get_object_id() != match.id) + continue; + if (request->method() == HTTP_GET && match.method.empty()) { + std::string data = this->datetime_json(obj, DETAIL_STATE); + request->send(200, "application/json", data.c_str()); + return; + } + if (match.method != "set") { + request->send(404); + return; + } + + auto call = obj->make_call(); + + if (!request->hasParam("value")) { + request->send(409); + return; + } + + if (request->hasParam("value")) { + std::string value = request->getParam("value")->value().c_str(); + call.set_datetime(value); + } + + this->schedule_([call]() mutable { call.perform(); }); + request->send(200); + return; + } + request->send(404); +} +std::string WebServer::datetime_json(datetime::DateTimeEntity *obj, JsonDetail start_config) { + return json::build_json([obj, start_config](JsonObject root) { + set_json_id(root, obj, "datetime-" + obj->get_object_id(), start_config); + std::string value = str_sprintf("%d-%02d-%02d %02d:%02d:%02d", obj->year, obj->month, obj->day, obj->hour, + obj->minute, obj->second); + root["value"] = value; + root["state"] = value; + }); +} +#endif // USE_DATETIME_DATETIME + #ifdef USE_TEXT void WebServer::on_text_update(text::Text *obj, const std::string &state) { if (this->events_.count() == 0) @@ -1458,6 +1509,11 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) { return true; #endif +#ifdef USE_DATETIME_DATETIME + if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "datetime") + return true; +#endif + #ifdef USE_TEXT if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "text") return true; @@ -1595,6 +1651,13 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) { } #endif +#ifdef USE_DATETIME_DATETIME + if (match.domain == "datetime") { + this->handle_datetime_request(request, match); + return; + } +#endif + #ifdef USE_TEXT if (match.domain == "text") { this->handle_text_request(request, match); diff --git a/esphome/components/web_server/web_server.h b/esphome/components/web_server/web_server.h index 5e8f3f8236..dda14a7e05 100644 --- a/esphome/components/web_server/web_server.h +++ b/esphome/components/web_server/web_server.h @@ -239,6 +239,15 @@ class WebServer : public Controller, public Component, public AsyncWebHandler { std::string time_json(datetime::TimeEntity *obj, JsonDetail start_config); #endif +#ifdef USE_DATETIME_DATETIME + void on_datetime_update(datetime::DateTimeEntity *obj) override; + /// Handle a datetime request under '/datetime/'. + void handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match); + + /// Dump the datetime state with its value as a JSON string. + std::string datetime_json(datetime::DateTimeEntity *obj, JsonDetail start_config); +#endif + #ifdef USE_TEXT void on_text_update(text::Text *obj, const std::string &state) override; /// Handle a text input request under '/text/'. diff --git a/esphome/const.py b/esphome/const.py index a64bc73f59..324b32e847 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -179,6 +179,7 @@ CONF_DATA_PINS = "data_pins" CONF_DATA_RATE = "data_rate" CONF_DATA_TEMPLATE = "data_template" CONF_DATE = "date" +CONF_DATETIME = "datetime" CONF_DAY = "day" CONF_DAYS_OF_MONTH = "days_of_month" CONF_DAYS_OF_WEEK = "days_of_week" diff --git a/esphome/core/application.h b/esphome/core/application.h index 35df350ec3..7487780412 100644 --- a/esphome/core/application.h +++ b/esphome/core/application.h @@ -45,6 +45,9 @@ #ifdef USE_DATETIME_TIME #include "esphome/components/datetime/time_entity.h" #endif +#ifdef USE_DATETIME_DATETIME +#include "esphome/components/datetime/datetime_entity.h" +#endif #ifdef USE_TEXT #include "esphome/components/text/text.h" #endif @@ -141,6 +144,10 @@ class Application { void register_time(datetime::TimeEntity *time) { this->times_.push_back(time); } #endif +#ifdef USE_DATETIME_DATETIME + void register_datetime(datetime::DateTimeEntity *datetime) { this->datetimes_.push_back(datetime); } +#endif + #ifdef USE_TEXT void register_text(text::Text *text) { this->texts_.push_back(text); } #endif @@ -335,6 +342,15 @@ class Application { return nullptr; } #endif +#ifdef USE_DATETIME_DATETIME + const std::vector &get_datetimes() { return this->datetimes_; } + datetime::DateTimeEntity *get_datetime_by_key(uint32_t key, bool include_internal = false) { + for (auto *obj : this->datetimes_) + if (obj->get_object_id_hash() == key && (include_internal || !obj->is_internal())) + return obj; + return nullptr; + } +#endif #ifdef USE_TEXT const std::vector &get_texts() { return this->texts_; } text::Text *get_text_by_key(uint32_t key, bool include_internal = false) { @@ -456,6 +472,9 @@ class Application { #ifdef USE_DATETIME_TIME std::vector times_{}; #endif +#ifdef USE_DATETIME_DATETIME + std::vector datetimes_{}; +#endif #ifdef USE_SELECT std::vector selects_{}; #endif diff --git a/esphome/core/component_iterator.cpp b/esphome/core/component_iterator.cpp index 687f1f6e23..9b02bf527b 100644 --- a/esphome/core/component_iterator.cpp +++ b/esphome/core/component_iterator.cpp @@ -232,6 +232,21 @@ void ComponentIterator::advance() { } break; #endif +#ifdef USE_DATETIME_DATETIME + case IteratorState::DATETIME_DATETIME: + if (this->at_ >= App.get_datetimes().size()) { + advance_platform = true; + } else { + auto *datetime = App.get_datetimes()[this->at_]; + if (datetime->is_internal() && !this->include_internal_) { + success = true; + break; + } else { + success = this->on_datetime(datetime); + } + } + break; +#endif #ifdef USE_TEXT case IteratorState::TEXT: if (this->at_ >= App.get_texts().size()) { diff --git a/esphome/core/component_iterator.h b/esphome/core/component_iterator.h index 8f0398cbb3..2b847bc088 100644 --- a/esphome/core/component_iterator.h +++ b/esphome/core/component_iterator.h @@ -63,6 +63,9 @@ class ComponentIterator { #ifdef USE_DATETIME_TIME virtual bool on_time(datetime::TimeEntity *time) = 0; #endif +#ifdef USE_DATETIME_DATETIME + virtual bool on_datetime(datetime::DateTimeEntity *datetime) = 0; +#endif #ifdef USE_TEXT virtual bool on_text(text::Text *text) = 0; #endif @@ -132,6 +135,9 @@ class ComponentIterator { #ifdef USE_DATETIME_TIME DATETIME_TIME, #endif +#ifdef USE_DATETIME_DATETIME + DATETIME_DATETIME, +#endif #ifdef USE_TEXT TEXT, #endif diff --git a/esphome/core/controller.cpp b/esphome/core/controller.cpp index eb975eaf6f..0957329500 100644 --- a/esphome/core/controller.cpp +++ b/esphome/core/controller.cpp @@ -71,6 +71,12 @@ void Controller::setup_controller(bool include_internal) { obj->add_on_state_callback([this, obj]() { this->on_time_update(obj); }); } #endif +#ifdef USE_DATETIME_DATETIME + for (auto *obj : App.get_datetimes()) { + if (include_internal || !obj->is_internal()) + obj->add_on_state_callback([this, obj]() { this->on_datetime_update(obj); }); + } +#endif #ifdef USE_TEXT for (auto *obj : App.get_texts()) { if (include_internal || !obj->is_internal()) diff --git a/esphome/core/controller.h b/esphome/core/controller.h index da9dbc00a6..e1bf93193a 100644 --- a/esphome/core/controller.h +++ b/esphome/core/controller.h @@ -37,6 +37,9 @@ #ifdef USE_DATETIME_TIME #include "esphome/components/datetime/time_entity.h" #endif +#ifdef USE_DATETIME_DATETIME +#include "esphome/components/datetime/datetime_entity.h" +#endif #ifdef USE_TEXT #include "esphome/components/text/text.h" #endif @@ -97,6 +100,9 @@ class Controller { #ifdef USE_DATETIME_TIME virtual void on_time_update(datetime::TimeEntity *obj){}; #endif +#ifdef USE_DATETIME_DATETIME + virtual void on_datetime_update(datetime::DateTimeEntity *obj){}; +#endif #ifdef USE_TEXT virtual void on_text_update(text::Text *obj, const std::string &state){}; #endif diff --git a/esphome/core/defines.h b/esphome/core/defines.h index fed73098d2..619a956071 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -39,6 +39,7 @@ #define USE_DATETIME #define USE_DATETIME_DATE #define USE_DATETIME_TIME +#define USE_DATETIME_DATETIME #define USE_OTA #define USE_OTA_PASSWORD #define USE_OTA_STATE_CALLBACK diff --git a/esphome/core/time.cpp b/esphome/core/time.cpp index 0004fc7e8e..add671701f 100644 --- a/esphome/core/time.cpp +++ b/esphome/core/time.cpp @@ -178,6 +178,15 @@ void ESPTime::recalc_timestamp_utc(bool use_day_of_year) { this->timestamp = res; } +void ESPTime::recalc_timestamp_local(bool use_day_of_year) { + this->recalc_timestamp_utc(use_day_of_year); + this->timestamp -= ESPTime::timezone_offset(); + ESPTime temp = ESPTime::from_epoch_local(this->timestamp); + if (temp.is_dst) { + this->timestamp -= 3600; + } +} + int32_t ESPTime::timezone_offset() { int32_t offset = 0; time_t now = ::time(nullptr); diff --git a/esphome/core/time.h b/esphome/core/time.h index 4300cf26b7..bce1108d93 100644 --- a/esphome/core/time.h +++ b/esphome/core/time.h @@ -99,6 +99,9 @@ struct ESPTime { /// Recalculate the timestamp field from the other fields of this ESPTime instance (must be UTC). void recalc_timestamp_utc(bool use_day_of_year = true); + /// Recalculate the timestamp field from the other fields of this ESPTime instance assuming local fields. + void recalc_timestamp_local(bool use_day_of_year = true); + /// Convert this ESPTime instance back to a tm struct. struct tm to_c_tm(); diff --git a/script/ci-custom.py b/script/ci-custom.py index 27fcd480f5..abe004dba3 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -623,6 +623,7 @@ def lint_trailing_whitespace(fname, match): "esphome/components/cover/cover.h", "esphome/components/datetime/date_entity.h", "esphome/components/datetime/time_entity.h", + "esphome/components/datetime/datetime_entity.h", "esphome/components/display/display.h", "esphome/components/event/event.h", "esphome/components/fan/fan.h", diff --git a/tests/components/datetime/test.all.yaml b/tests/components/datetime/test.all.yaml index 3f5996bb8b..4e26b68121 100644 --- a/tests/components/datetime/test.all.yaml +++ b/tests/components/datetime/test.all.yaml @@ -1 +1,3 @@ datetime: + +time: diff --git a/tests/components/template/test.all.yaml b/tests/components/template/common.yaml similarity index 88% rename from tests/components/template/test.all.yaml rename to tests/components/template/common.yaml index 64faec36c2..ba7167157b 100644 --- a/tests/components/template/test.all.yaml +++ b/tests/components/template/common.yaml @@ -183,3 +183,25 @@ datetime: - x.hour - x.minute - x.second + - platform: template + name: DateTime + id: test_datetime + type: datetime + set_action: + - logger.log: "set_value" + on_value: + - logger.log: + format: "DateTime: %04d-%02d-%02d %02d:%02d:%02d" + args: + - x.year + - x.month + - x.day_of_month + - x.hour + - x.minute + - x.second + +time: + - platform: sntp # Required for datetime + +wifi: # Required for sntp time + ap: diff --git a/tests/components/template/test.bk72xx.yaml b/tests/components/template/test.bk72xx.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.bk72xx.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp32-c3-idf.yaml b/tests/components/template/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp32-c3-idf.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp32-c3.yaml b/tests/components/template/test.esp32-c3.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp32-c3.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp32-idf.yaml b/tests/components/template/test.esp32-idf.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp32-idf.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp32-s3-idf.yaml b/tests/components/template/test.esp32-s3-idf.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp32-s3-idf.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp32.yaml b/tests/components/template/test.esp32.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp32.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.esp8266.yaml b/tests/components/template/test.esp8266.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.esp8266.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/template/test.rp2040.yaml b/tests/components/template/test.rp2040.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/template/test.rp2040.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml From 8fcfcccbc3f3bb5edb4706a6c4b55a677a5dda99 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Thu, 25 Apr 2024 23:20:21 +0200 Subject: [PATCH 087/313] Multiple Daly-BMS support (#6615) --- esphome/components/daly_bms/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/esphome/components/daly_bms/__init__.py b/esphome/components/daly_bms/__init__.py index 2cc2c512f3..669d40a68d 100644 --- a/esphome/components/daly_bms/__init__.py +++ b/esphome/components/daly_bms/__init__.py @@ -4,6 +4,7 @@ from esphome.components import uart from esphome.const import CONF_ID, CONF_ADDRESS CODEOWNERS = ["@s1lvi0"] +MULTI_CONF = True DEPENDENCIES = ["uart"] CONF_BMS_DALY_ID = "bms_daly_id" From 3997503071bae2f208f761f668036f3cc8e62452 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Thu, 25 Apr 2024 18:03:24 -0500 Subject: [PATCH 088/313] Remove text_sensor from sync-device-class job (#6637) --- script/sync-device_class.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/script/sync-device_class.py b/script/sync-device_class.py index 26d271535f..12e1bb6a9f 100755 --- a/script/sync-device_class.py +++ b/script/sync-device_class.py @@ -10,7 +10,6 @@ from homeassistant.components.event import EventDeviceClass from homeassistant.components.number import NumberDeviceClass from homeassistant.components.sensor import SensorDeviceClass from homeassistant.components.switch import SwitchDeviceClass -from homeassistant.components.text_sensor import TextSensorDeviceClass from homeassistant.components.valve import ValveDeviceClass # pylint: enable=import-error @@ -28,7 +27,6 @@ DOMAINS = { "number": NumberDeviceClass, "sensor": SensorDeviceClass, "switch": SwitchDeviceClass, - "text_sensor": TextSensorDeviceClass, "valve": ValveDeviceClass, } From 3ecb5fa57f71c199ffd18c017ea3ebda6e05da58 Mon Sep 17 00:00:00 2001 From: esphomebot Date: Fri, 26 Apr 2024 11:40:19 +1200 Subject: [PATCH 089/313] Synchronise Device Classes from Home Assistant (#6638) --- esphome/components/event/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/event/__init__.py b/esphome/components/event/__init__.py index 789f121cf3..241e884386 100644 --- a/esphome/components/event/__init__.py +++ b/esphome/components/event/__init__.py @@ -25,8 +25,8 @@ IS_PLATFORM_COMPONENT = True DEVICE_CLASSES = [ DEVICE_CLASS_BUTTON, - DEVICE_CLASS_EMPTY, DEVICE_CLASS_DOORBELL, + DEVICE_CLASS_EMPTY, DEVICE_CLASS_MOTION, ] From 031e26ad989fae720aae645bab9b6480336ac3e2 Mon Sep 17 00:00:00 2001 From: NP v/d Spek Date: Fri, 26 Apr 2024 05:23:28 +0200 Subject: [PATCH 090/313] Display: add diagnostic test_card option (#6608) Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- esphome/components/display/__init__.py | 4 ++ esphome/components/display/display.cpp | 64 ++++++++++++++++++++++++-- esphome/components/display/display.h | 4 ++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/esphome/components/display/__init__.py b/esphome/components/display/__init__.py index 992799008a..c4bb12b75d 100644 --- a/esphome/components/display/__init__.py +++ b/esphome/components/display/__init__.py @@ -38,6 +38,7 @@ DisplayOnPageChangeTrigger = display_ns.class_( ) CONF_ON_PAGE_CHANGE = "on_page_change" +CONF_SHOW_TEST_CARD = "show_test_card" DISPLAY_ROTATIONS = { 0: display_ns.DISPLAY_ROTATION_0_DEGREES, @@ -82,6 +83,7 @@ FULL_DISPLAY_SCHEMA = BASIC_DISPLAY_SCHEMA.extend( } ), cv.Optional(CONF_AUTO_CLEAR_ENABLED, default=True): cv.boolean, + cv.Optional(CONF_SHOW_TEST_CARD): cv.boolean, } ) @@ -113,6 +115,8 @@ async def setup_display_core_(var, config): await automation.build_automation( trigger, [(DisplayPagePtr, "from"), (DisplayPagePtr, "to")], conf ) + if config.get(CONF_SHOW_TEST_CARD): + cg.add(var.show_test_card()) async def register_display(var, config): diff --git a/esphome/components/display/display.cpp b/esphome/components/display/display.cpp index 010e6eca0b..75205292f7 100644 --- a/esphome/components/display/display.cpp +++ b/esphome/components/display/display.cpp @@ -1,7 +1,7 @@ #include "display.h" - +#include "display_color_utils.h" #include - +#include "esphome/core/hal.h" #include "esphome/core/log.h" namespace esphome { @@ -507,7 +507,9 @@ void Display::do_update_() { if (this->auto_clear_enabled_) { this->clear(); } - if (this->page_ != nullptr) { + if (this->show_test_card_) { + this->test_card(); + } else if (this->page_ != nullptr) { this->page_->get_writer()(*this); } else if (this->writer_.has_value()) { (*this->writer_)(*this); @@ -608,6 +610,62 @@ bool Display::clamp_y_(int y, int h, int &min_y, int &max_y) { return min_y < max_y; } +const uint8_t TESTCARD_FONT[3][8] PROGMEM = {{0x41, 0x7F, 0x7F, 0x09, 0x19, 0x7F, 0x66, 0x00}, // 'R' + {0x1C, 0x3E, 0x63, 0x41, 0x51, 0x73, 0x72, 0x00}, // 'G' + {0x41, 0x7F, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00}}; // 'B' + +void Display::test_card() { + int w = get_width(), h = get_height(), image_w, image_h; + this->clear(); + this->show_test_card_ = false; + if (this->get_display_type() == DISPLAY_TYPE_COLOR) { + Color r(255, 0, 0), g(0, 255, 0), b(0, 0, 255); + image_w = std::min(w - 20, 310); + image_h = std::min(h - 20, 255); + + int shift_x = (w - image_w) / 2; + int shift_y = (h - image_h) / 2; + int line_w = (image_w - 6) / 6; + int image_c = image_w / 2; + for (auto i = 0; i <= image_h; i++) { + int c = esp_scale(i, image_h); + this->horizontal_line(shift_x + 0, shift_y + i, line_w, r.fade_to_white(c)); + this->horizontal_line(shift_x + line_w, shift_y + i, line_w, r.fade_to_black(c)); // + + this->horizontal_line(shift_x + image_c - line_w, shift_y + i, line_w, g.fade_to_white(c)); + this->horizontal_line(shift_x + image_c, shift_y + i, line_w, g.fade_to_black(c)); + + this->horizontal_line(shift_x + image_w - (line_w * 2), shift_y + i, line_w, b.fade_to_white(c)); + this->horizontal_line(shift_x + image_w - line_w, shift_y + i, line_w, b.fade_to_black(c)); + } + this->rectangle(shift_x, shift_y, image_w, image_h, Color(127, 127, 0)); + + uint16_t shift_r = shift_x + line_w - (8 * 3); + uint16_t shift_g = shift_x + image_c - (8 * 3); + uint16_t shift_b = shift_x + image_w - line_w - (8 * 3); + shift_y = h / 2 - (8 * 3); + for (auto i = 0; i < 8; i++) { + uint8_t ftr = progmem_read_byte(&TESTCARD_FONT[0][i]); + uint8_t ftg = progmem_read_byte(&TESTCARD_FONT[1][i]); + uint8_t ftb = progmem_read_byte(&TESTCARD_FONT[2][i]); + for (auto k = 0; k < 8; k++) { + if ((ftr & (1 << k)) != 0) { + this->filled_rectangle(shift_r + (i * 6), shift_y + (k * 6), 6, 6, COLOR_OFF); + } + if ((ftg & (1 << k)) != 0) { + this->filled_rectangle(shift_g + (i * 6), shift_y + (k * 6), 6, 6, COLOR_OFF); + } + if ((ftb & (1 << k)) != 0) { + this->filled_rectangle(shift_b + (i * 6), shift_y + (k * 6), 6, 6, COLOR_OFF); + } + } + } + } + this->rectangle(0, 0, w, h, Color(127, 0, 127)); + this->filled_rectangle(0, 0, 10, 10, Color(255, 0, 255)); + this->stop_poller(); +} + DisplayPage::DisplayPage(display_writer_t writer) : writer_(std::move(writer)) {} void DisplayPage::show() { this->parent_->show_page(this); } void DisplayPage::show_next() { this->next_->show(); } diff --git a/esphome/components/display/display.h b/esphome/components/display/display.h index a30ba976b4..4ee7ef93cb 100644 --- a/esphome/components/display/display.h +++ b/esphome/components/display/display.h @@ -631,6 +631,9 @@ class Display : public PollingComponent { */ bool clip(int x, int y); + void test_card(); + void show_test_card() { this->show_test_card_ = true; } + protected: bool clamp_x_(int x, int w, int &min_x, int &max_x); bool clamp_y_(int y, int h, int &min_y, int &max_y); @@ -659,6 +662,7 @@ class Display : public PollingComponent { std::vector on_page_change_triggers_; bool auto_clear_enabled_{true}; std::vector clipping_rectangle_; + bool show_test_card_{false}; }; class DisplayPage { From cd91c7050c00dc8d7051f7870715dc4d8abdd537 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Fri, 26 Apr 2024 10:44:58 +0200 Subject: [PATCH 091/313] waveshare_epaper: Add 2.90in-dke (#6492) Co-authored-by: The_Niz --- .../components/waveshare_epaper/display.py | 4 + .../waveshare_epaper/waveshare_epaper.cpp | 125 ++++++++++++++++++ .../waveshare_epaper/waveshare_epaper.h | 24 ++++ .../waveshare_epaper/test.esp32.yaml | 18 +++ 4 files changed, 171 insertions(+) diff --git a/esphome/components/waveshare_epaper/display.py b/esphome/components/waveshare_epaper/display.py index dc43cbf5a7..bba60efc0a 100644 --- a/esphome/components/waveshare_epaper/display.py +++ b/esphome/components/waveshare_epaper/display.py @@ -49,6 +49,9 @@ WaveshareEPaper2P9InV2R2 = waveshare_epaper_ns.class_( "WaveshareEPaper2P9InV2R2", WaveshareEPaper ) GDEY029T94 = waveshare_epaper_ns.class_("GDEY029T94", WaveshareEPaper) +WaveshareEPaper2P9InDKE = waveshare_epaper_ns.class_( + "WaveshareEPaper2P9InDKE", WaveshareEPaper +) WaveshareEPaper4P2In = waveshare_epaper_ns.class_( "WaveshareEPaper4P2In", WaveshareEPaper ) @@ -115,6 +118,7 @@ MODELS = { "2.90in-b": ("b", WaveshareEPaper2P9InB), "2.90in-bv3": ("b", WaveshareEPaper2P9InBV3), "2.90inv2-r2": ("c", WaveshareEPaper2P9InV2R2), + "2.90in-dke": ("c", WaveshareEPaper2P9InDKE), "4.20in": ("b", WaveshareEPaper4P2In), "4.20in-bv2": ("b", WaveshareEPaper4P2InBV2), "5.83in": ("b", WaveshareEPaper5P8In), diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.cpp b/esphome/components/waveshare_epaper/waveshare_epaper.cpp index cf43c4cc32..7224aa44ed 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.cpp +++ b/esphome/components/waveshare_epaper/waveshare_epaper.cpp @@ -1127,6 +1127,131 @@ void WaveshareEPaper2P9InB::dump_config() { LOG_UPDATE_INTERVAL(this); } +// DKE 2.9 +// https://www.badge.team/docs/badges/sha2017/hardware/#e-ink-display-the-dke-group-depg0290b1 +// https://www.badge.team/docs/badges/sha2017/hardware/DEPG0290B01V3.0.pdf +static const uint8_t LUT_SIZE_DKE = 70; +static const uint8_t UPDATE_LUT_DKE[LUT_SIZE_DKE] = { + 0xA0, 0x90, 0x50, 0x0, 0x0, 0x0, 0x0, 0x50, 0x90, 0xA0, 0x0, 0x0, 0x0, 0x0, 0xA0, 0x90, 0x50, 0x0, + 0x0, 0x0, 0x0, 0x50, 0x90, 0xA0, 0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0xF, + 0xF, 0x0, 0x0, 0x0, 0xF, 0xF, 0x0, 0x0, 0x02, 0xF, 0xF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +}; +static const uint8_t PART_UPDATE_LUT_DKE[LUT_SIZE_DKE] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xa0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x50, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x05, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uint8_t FULL_UPDATE_LUT_DKE[LUT_SIZE_DKE] = { + 0x90, 0x50, 0xa0, 0x50, 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa0, 0xa0, 0x80, 0x00, 0x90, 0x50, 0xa0, 0x50, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa0, 0xa0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, + 0x04, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, + 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +void WaveshareEPaper2P9InDKE::initialize() { + // Hardware reset + delay(10); + this->reset_pin_->digital_write(false); + delayMicroseconds(200); + this->reset_pin_->digital_write(true); + delayMicroseconds(200); + // Wait for busy low + this->wait_until_idle_(); + // Software reset + this->command(0x12); + // Wait for busy low + this->wait_until_idle_(); + // Set Analog Block Control + this->command(0x74); + this->data(0x54); + // Set Digital Block Control + this->command(0x7E); + this->data(0x3B); + // Set display size and driver output control + this->command(0x01); + // this->data(0x27); + // this->data(0x01); + // this->data(0x00); + this->data(this->get_height_internal() - 1); + this->data((this->get_height_internal() - 1) >> 8); + this->data(0x00); // ? GD = 0, SM = 0, TB = 0 + // Ram data entry mode + this->command(0x11); + this->data(0x03); + // Set Ram X address + this->command(0x44); + this->data(0x00); + this->data(0x0F); + // Set Ram Y address + this->command(0x45); + this->data(0x00); + this->data(0x00); + this->data(0x27); + this->data(0x01); + // Set border + this->command(0x3C); + // this->data(0x80); + this->data(0x01); + // Set VCOM value + this->command(0x2C); + this->data(0x26); + // Gate voltage setting + this->command(0x03); + this->data(0x17); + // Source voltage setting + this->command(0x04); + this->data(0x41); + this->data(0x00); + this->data(0x32); + // Frame setting 50hz + this->command(0x3A); + this->data(0x30); + this->command(0x3B); + this->data(0x0A); + // Load LUT + this->command(0x32); + for (uint8_t v : FULL_UPDATE_LUT_DKE) + this->data(v); +} + +void HOT WaveshareEPaper2P9InDKE::display() { + ESP_LOGI(TAG, "Performing e-paper update."); + // Set Ram X address counter + this->command(0x4e); + this->data(0); + // Set Ram Y address counter + this->command(0x4f); + this->data(0); + this->data(0); + // Load image (128/8*296) + this->command(0x24); + this->start_data_(); + this->write_array(this->buffer_, this->get_buffer_length_()); + this->end_data_(); + // Image update + this->command(0x22); + this->data(0xC7); + this->command(0x20); + // Wait for busy low + this->wait_until_idle_(); + // Enter deep sleep mode + this->command(0x10); + this->data(0x01); +} +int WaveshareEPaper2P9InDKE::get_width_internal() { return 128; } +int WaveshareEPaper2P9InDKE::get_height_internal() { return 296; } +void WaveshareEPaper2P9InDKE::dump_config() { + LOG_DISPLAY("", "Waveshare E-Paper", this); + ESP_LOGCONFIG(TAG, " Model: 2.9in DKE"); + LOG_PIN(" Reset Pin: ", this->reset_pin_); + LOG_PIN(" DC Pin: ", this->dc_pin_); + LOG_PIN(" Busy Pin: ", this->busy_pin_); + LOG_UPDATE_INTERVAL(this); +} +void WaveshareEPaper2P9InDKE::set_full_update_every(uint32_t full_update_every) { + this->full_update_every_ = full_update_every; +} + // ======================================================== // 2.90in Type B (LUT from OTP) // Datasheet: diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.h b/esphome/components/waveshare_epaper/waveshare_epaper.h index ffc099ca56..3c4470c30c 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.h +++ b/esphome/components/waveshare_epaper/waveshare_epaper.h @@ -373,6 +373,30 @@ class WaveshareEPaper2P9InV2R2 : public WaveshareEPaper { void reset_(); }; +class WaveshareEPaper2P9InDKE : public WaveshareEPaper { + public: + void initialize() override; + + void display() override; + + void dump_config() override; + + void deep_sleep() override { + // COMMAND DEEP SLEEP + this->command(0x10); + this->data(0x01); + } + + void set_full_update_every(uint32_t full_update_every); + + protected: + uint32_t full_update_every_{30}; + uint32_t at_update_{0}; + int get_width_internal() override; + + int get_height_internal() override; +}; + class WaveshareEPaper4P2In : public WaveshareEPaper { public: void initialize() override; diff --git a/tests/components/waveshare_epaper/test.esp32.yaml b/tests/components/waveshare_epaper/test.esp32.yaml index cc6c665e7d..2f06c5c51b 100644 --- a/tests/components/waveshare_epaper/test.esp32.yaml +++ b/tests/components/waveshare_epaper/test.esp32.yaml @@ -83,6 +83,24 @@ display: full_update_every: 30 lambda: |- it.rectangle(0, 0, it.get_width(), it.get_height()); + - platform: waveshare_epaper + model: 2.90in-dke + spi_id: spi_id_1 + cs_pin: + allow_other_uses: true + number: GPIO25 + dc_pin: + allow_other_uses: true + number: GPIO26 + busy_pin: + allow_other_uses: true + number: GPIO27 + reset_pin: + allow_other_uses: true + number: GPIO32 + full_update_every: 1 + lambda: |- + it.rectangle(0, 0, it.get_width(), it.get_height()); - platform: waveshare_epaper model: 2.70in-b spi_id: spi_id_1 From 9bfb36f58bcdaff1d5b62a2ea303d45a10af291e Mon Sep 17 00:00:00 2001 From: Alex Boyd Date: Fri, 26 Apr 2024 05:41:43 -0600 Subject: [PATCH 092/313] Extract core comments from #6241 (#6643) --- esphome/automation.py | 10 ++++++++++ esphome/config_validation.py | 2 +- esphome/core/component.h | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/esphome/automation.py b/esphome/automation.py index 8475858a9c..b25ffa5abe 100644 --- a/esphome/automation.py +++ b/esphome/automation.py @@ -18,10 +18,20 @@ from esphome.util import Registry def maybe_simple_id(*validators): + """Allow a raw ID to be specified in place of a config block. + If the value that's being validated is a dictionary, it's passed as-is to the specified validators. Otherwise, it's + wrapped in a dict that looks like ``{"id": }``, and that dict is then handed off to the specified validators. + """ return maybe_conf(CONF_ID, *validators) def maybe_conf(conf, *validators): + """Allow a raw value to be specified in place of a config block. + If the value that's being validated is a dictionary, it's passed as-is to the specified validators. Otherwise, it's + wrapped in a dict that looks like ``{: }``, and that dict is then handed off to the specified + validators. + (This is a general case of ``maybe_simple_id`` that allows the wrapping key to be something other than ``id``.) + """ validator = cv.All(*validators) @schema_extractor("maybe") diff --git a/esphome/config_validation.py b/esphome/config_validation.py index bc58979f33..198b44f38d 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -304,7 +304,7 @@ def string(value): """Validate that a configuration value is a string. If not, automatically converts to a string. Note that this can be lossy, for example the input value 60.00 (float) will be turned into - "60.0" (string). For values where this could be a problem `string_string` has to be used. + "60.0" (string). For values where this could be a problem `string_strict` has to be used. """ check_not_templatable(value) if isinstance(value, (dict, list)): diff --git a/esphome/core/component.h b/esphome/core/component.h index 4f244e5fcb..e6ffe96d1e 100644 --- a/esphome/core/component.h +++ b/esphome/core/component.h @@ -85,7 +85,7 @@ class Component { /** priority of setup(). higher -> executed earlier * - * Defaults to 0. + * Defaults to setup_priority::DATA, i.e. 600. * * @return The setup priority of this component */ From 76c55992aeee8fb416417efa0a9a33a1b5e27b25 Mon Sep 17 00:00:00 2001 From: tronikos Date: Sat, 27 Apr 2024 18:22:41 -0700 Subject: [PATCH 093/313] Revert #6458 (#6650) Reading the z-axis register is required. --- esphome/components/qmc5883l/qmc5883l.cpp | 46 ++++++++---------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/esphome/components/qmc5883l/qmc5883l.cpp b/esphome/components/qmc5883l/qmc5883l.cpp index 4946ad1b77..8541b41ff7 100644 --- a/esphome/components/qmc5883l/qmc5883l.cpp +++ b/esphome/components/qmc5883l/qmc5883l.cpp @@ -77,8 +77,17 @@ void QMC5883LComponent::dump_config() { float QMC5883LComponent::get_setup_priority() const { return setup_priority::DATA; } void QMC5883LComponent::update() { uint8_t status = false; - if (ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG) - this->read_byte(QMC5883L_REGISTER_STATUS, &status); + this->read_byte(QMC5883L_REGISTER_STATUS, &status); + + // Always request X,Y,Z regardless if there are sensors for them + // to avoid https://github.com/esphome/issues/issues/5731 + uint16_t raw_x, raw_y, raw_z; + if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_X_LSB, &raw_x) || + !this->read_byte_16_(QMC5883L_REGISTER_DATA_Y_LSB, &raw_y) || + !this->read_byte_16_(QMC5883L_REGISTER_DATA_Z_LSB, &raw_z)) { + this->status_set_warning(); + return; + } float mg_per_bit; switch (this->range_) { @@ -93,36 +102,11 @@ void QMC5883LComponent::update() { } // in µT - float x = NAN, y = NAN, z = NAN; - if (this->x_sensor_ != nullptr || this->heading_sensor_ != nullptr) { - uint16_t raw_x; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_X_LSB, &raw_x)) { - this->status_set_warning(); - return; - } - x = int16_t(raw_x) * mg_per_bit * 0.1f; - } - if (this->y_sensor_ != nullptr || this->heading_sensor_ != nullptr) { - uint16_t raw_y; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_Y_LSB, &raw_y)) { - this->status_set_warning(); - return; - } - y = int16_t(raw_y) * mg_per_bit * 0.1f; - } - if (this->z_sensor_ != nullptr) { - uint16_t raw_z; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_Z_LSB, &raw_z)) { - this->status_set_warning(); - return; - } - z = int16_t(raw_z) * mg_per_bit * 0.1f; - } + const float x = int16_t(raw_x) * mg_per_bit * 0.1f; + const float y = int16_t(raw_y) * mg_per_bit * 0.1f; + const float z = int16_t(raw_z) * mg_per_bit * 0.1f; - float heading = NAN; - if (this->heading_sensor_ != nullptr) { - heading = atan2f(0.0f - x, y) * 180.0f / M_PI; - } + float heading = atan2f(0.0f - x, y) * 180.0f / M_PI; float temp = NAN; if (this->temperature_sensor_ != nullptr) { From 0ef7781bb34f0b7f636942e16a0e638acdf597c5 Mon Sep 17 00:00:00 2001 From: optimusprimespace <62800678+optimusprimespace@users.noreply.github.com> Date: Sun, 28 Apr 2024 21:22:14 +0200 Subject: [PATCH 094/313] [hm3301] Updated the AQI based on the airnow document (#6004) --- esphome/components/hm3301/aqi_calculator.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/esphome/components/hm3301/aqi_calculator.h b/esphome/components/hm3301/aqi_calculator.h index 6c830f9bad..c1b47826a2 100644 --- a/esphome/components/hm3301/aqi_calculator.h +++ b/esphome/components/hm3301/aqi_calculator.h @@ -1,6 +1,7 @@ #pragma once #include "abstract_aqi_calculator.h" +// https://www.airnow.gov/sites/default/files/2020-05/aqi-technical-assistance-document-sept2018.pdf namespace esphome { namespace hm3301 { @@ -15,14 +16,16 @@ class AQICalculator : public AbstractAQICalculator { } protected: - static const int AMOUNT_OF_LEVELS = 6; + static const int AMOUNT_OF_LEVELS = 7; - int index_grid_[AMOUNT_OF_LEVELS][2] = {{0, 51}, {51, 100}, {101, 150}, {151, 200}, {201, 300}, {301, 500}}; + int index_grid_[AMOUNT_OF_LEVELS][2] = {{0, 50}, {51, 100}, {101, 150}, {151, 200}, + {201, 300}, {301, 400}, {401, 500}}; - int pm2_5_calculation_grid_[AMOUNT_OF_LEVELS][2] = {{0, 12}, {13, 35}, {36, 55}, {56, 150}, {151, 250}, {251, 500}}; + int pm2_5_calculation_grid_[AMOUNT_OF_LEVELS][2] = {{0, 12}, {13, 35}, {36, 55}, {56, 150}, + {151, 250}, {251, 350}, {351, 500}}; - int pm10_0_calculation_grid_[AMOUNT_OF_LEVELS][2] = {{0, 54}, {55, 154}, {155, 254}, - {255, 354}, {355, 424}, {425, 604}}; + int pm10_0_calculation_grid_[AMOUNT_OF_LEVELS][2] = {{0, 54}, {55, 154}, {155, 254}, {255, 354}, + {355, 424}, {425, 504}, {505, 604}}; int calculate_index_(uint16_t value, int array[AMOUNT_OF_LEVELS][2]) { int grid_index = get_grid_index_(value, array); From a700ae481d24ab9cb7c8ffb1b018967a25523823 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 29 Apr 2024 07:33:52 +1200 Subject: [PATCH 095/313] Fix command line substitutions without any yaml substitutions (#6644) --- esphome/components/substitutions/__init__.py | 2 +- esphome/config.py | 4 ++-- script/test_build_components | 4 ++-- tests/test_build_components/build_components_base.bk72xx.yaml | 4 ---- .../build_components_base.esp32-ard.yaml | 4 ---- .../build_components_base.esp32-c3-ard.yaml | 4 ---- .../build_components_base.esp32-c3-idf.yaml | 4 ---- .../build_components_base.esp32-idf.yaml | 4 ---- .../build_components_base.esp32-s2-ard.yaml | 4 ---- .../build_components_base.esp32-s2-idf.yaml | 4 ---- .../build_components_base.esp32-s3-ard.yaml | 4 ---- .../build_components_base.esp32-s3-idf.yaml | 4 ---- .../test_build_components/build_components_base.esp8266.yaml | 4 ---- tests/test_build_components/build_components_base.host.yaml | 4 ---- tests/test_build_components/build_components_base.rp2040.yaml | 4 ---- 15 files changed, 5 insertions(+), 53 deletions(-) diff --git a/esphome/components/substitutions/__init__.py b/esphome/components/substitutions/__init__.py index ef368015b1..2d3a79ccae 100644 --- a/esphome/components/substitutions/__init__.py +++ b/esphome/components/substitutions/__init__.py @@ -116,7 +116,7 @@ def do_substitution_pass(config, command_line_substitutions, ignore_missing=Fals if CONF_SUBSTITUTIONS not in config and not command_line_substitutions: return - substitutions = config[CONF_SUBSTITUTIONS] + substitutions = config.get(CONF_SUBSTITUTIONS) if substitutions is None: substitutions = command_line_substitutions elif command_line_substitutions: diff --git a/esphome/config.py b/esphome/config.py index 1f6867eb59..73aa7077e0 100644 --- a/esphome/config.py +++ b/esphome/config.py @@ -756,11 +756,11 @@ def validate_config( CORE.raw_config = config # 1. Load substitutions - if CONF_SUBSTITUTIONS in config: + if CONF_SUBSTITUTIONS in config or command_line_substitutions: from esphome.components import substitutions result[CONF_SUBSTITUTIONS] = { - **config[CONF_SUBSTITUTIONS], + **config.get(CONF_SUBSTITUTIONS, {}), **command_line_substitutions, } result.add_output_path([CONF_SUBSTITUTIONS], CONF_SUBSTITUTIONS) diff --git a/script/test_build_components b/script/test_build_components index 2396353198..4d91256572 100755 --- a/script/test_build_components +++ b/script/test_build_components @@ -37,9 +37,9 @@ start_esphome() { # Start esphome process echo "> [$target_component] [$test_name] [$target_platform]" - echo "esphome -s component_name $target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file" + echo "esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file" # TODO: Validate escape of Command line substitution value - esphome -s component_name $target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file + esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file } # Find all test yaml files. diff --git a/tests/test_build_components/build_components_base.bk72xx.yaml b/tests/test_build_components/build_components_base.bk72xx.yaml index d74cc651eb..9fd9431826 100644 --- a/tests/test_build_components/build_components_base.bk72xx.yaml +++ b/tests/test_build_components/build_components_base.bk72xx.yaml @@ -12,8 +12,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-ard.yaml b/tests/test_build_components/build_components_base.esp32-ard.yaml index e345adcafc..31b7067acc 100644 --- a/tests/test_build_components/build_components_base.esp32-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-ard.yaml @@ -14,8 +14,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-c3-ard.yaml b/tests/test_build_components/build_components_base.esp32-c3-ard.yaml index 136ee62d4b..8aad447693 100644 --- a/tests/test_build_components/build_components_base.esp32-c3-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-c3-ard.yaml @@ -14,8 +14,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-c3-idf.yaml b/tests/test_build_components/build_components_base.esp32-c3-idf.yaml index 4e809dd7ce..18584497f4 100644 --- a/tests/test_build_components/build_components_base.esp32-c3-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-c3-idf.yaml @@ -14,8 +14,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-idf.yaml b/tests/test_build_components/build_components_base.esp32-idf.yaml index 3c4532a958..a62a995e68 100644 --- a/tests/test_build_components/build_components_base.esp32-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-idf.yaml @@ -14,8 +14,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s2-ard.yaml b/tests/test_build_components/build_components_base.esp32-s2-ard.yaml index db62cdff6a..b8f2639127 100644 --- a/tests/test_build_components/build_components_base.esp32-s2-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-s2-ard.yaml @@ -15,8 +15,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml index 19fb657d8b..62f0f4f7bc 100644 --- a/tests/test_build_components/build_components_base.esp32-s2-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-s2-idf.yaml @@ -15,8 +15,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s3-ard.yaml b/tests/test_build_components/build_components_base.esp32-s3-ard.yaml index 39e12de08c..25cad038b6 100644 --- a/tests/test_build_components/build_components_base.esp32-s3-ard.yaml +++ b/tests/test_build_components/build_components_base.esp32-s3-ard.yaml @@ -15,8 +15,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml index 95c73f917e..b1d08fcdf8 100644 --- a/tests/test_build_components/build_components_base.esp32-s3-idf.yaml +++ b/tests/test_build_components/build_components_base.esp32-s3-idf.yaml @@ -15,8 +15,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.esp8266.yaml b/tests/test_build_components/build_components_base.esp8266.yaml index 0019298ef0..ecf9acd2ba 100644 --- a/tests/test_build_components/build_components_base.esp8266.yaml +++ b/tests/test_build_components/build_components_base.esp8266.yaml @@ -12,8 +12,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.host.yaml b/tests/test_build_components/build_components_base.host.yaml index ec7570d99a..5492cfddd2 100644 --- a/tests/test_build_components/build_components_base.host.yaml +++ b/tests/test_build_components/build_components_base.host.yaml @@ -12,8 +12,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" diff --git a/tests/test_build_components/build_components_base.rp2040.yaml b/tests/test_build_components/build_components_base.rp2040.yaml index cb1cb6359b..335642374b 100644 --- a/tests/test_build_components/build_components_base.rp2040.yaml +++ b/tests/test_build_components/build_components_base.rp2040.yaml @@ -15,8 +15,4 @@ packages: component_under_test: !include file: $component_test_file vars: - component_name: $component_name - test_name: $test_name - target_platform: $target_platform component_test_file: $component_test_file - component_dir: "../../components/$component_name" From 8334934e0825884946f0e6a18b461d015c080c54 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Sun, 28 Apr 2024 14:44:40 -0500 Subject: [PATCH 096/313] Allow platform dependencies (#6623) --- esphome/config.py | 28 +++++++++++++++++++++++++--- script/list-components.py | 8 ++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/esphome/config.py b/esphome/config.py index 73aa7077e0..36a81f677b 100644 --- a/esphome/config.py +++ b/esphome/config.py @@ -374,7 +374,10 @@ class LoadValidationStep(ConfigValidationStep): path + [CONF_ID], ) continue - result.add_str_error("No platform specified! See 'platform' key.", path) + result.add_str_error( + f"'{self.domain}' requires a 'platform' key but it was not specified.", + path, + ) continue # Remove temp output path and construct new one result.remove_output_path(path, p_domain) @@ -449,9 +452,28 @@ class MetadataValidationStep(ConfigValidationStep): success = True for dependency in self.comp.dependencies: - if dependency not in result: + dependency_parts = dependency.split(".") + if len(dependency_parts) > 2: result.add_str_error( - f"Component {self.domain} requires component {dependency}", + "Dependencies must be specified as a single component or in component.platform format only", + self.path, + ) + return + component_dep = dependency_parts[0] + platform_dep = dependency_parts[-1] + if component_dep not in result: + result.add_str_error( + f"Component {self.domain} requires component {component_dep}", + self.path, + ) + success = False + elif component_dep != platform_dep and ( + not isinstance(platform_list := result.get(component_dep), list) + or not any(CONF_PLATFORM in p for p in platform_list) + or not any(p[CONF_PLATFORM] == platform_dep for p in platform_list) + ): + result.add_str_error( + f"Component {self.domain} requires 'platform: {platform_dep}' in component '{component_dep}'", self.path, ) success = False diff --git a/script/list-components.py b/script/list-components.py index 8e2d47c6b3..5b5fa5811f 100755 --- a/script/list-components.py +++ b/script/list-components.py @@ -69,7 +69,9 @@ def create_components_graph(): sys.exit(1) for dependency in comp.dependencies: - add_item_to_components_graph(components_graph, dependency, name) + add_item_to_components_graph( + components_graph, dependency.split(".")[0], name + ) for target_config in TARGET_CONFIGURATIONS: CORE.data[KEY_CORE] = target_config @@ -87,7 +89,9 @@ def create_components_graph(): add_item_to_components_graph(components_graph, platform_name, name) for dependency in platform.dependencies: - add_item_to_components_graph(components_graph, dependency, name) + add_item_to_components_graph( + components_graph, dependency.split(".")[0], name + ) for target_config in TARGET_CONFIGURATIONS: CORE.data[KEY_CORE] = target_config From 5142d294f5204819fd6b5a858971b11a463620c3 Mon Sep 17 00:00:00 2001 From: Lucas Hartmann Date: Sun, 28 Apr 2024 16:47:15 -0300 Subject: [PATCH 097/313] [light] Add transition_length to strobe effect. (#6595) --- esphome/components/light/base_light_effects.h | 3 ++- esphome/components/light/effects.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/esphome/components/light/base_light_effects.h b/esphome/components/light/base_light_effects.h index c62ca43ca1..f7829a3f44 100644 --- a/esphome/components/light/base_light_effects.h +++ b/esphome/components/light/base_light_effects.h @@ -150,6 +150,7 @@ class AutomationLightEffect : public LightEffect { struct StrobeLightEffectColor { LightColorValues color; uint32_t duration; + uint32_t transition_length; }; class StrobeLightEffect : public LightEffect { @@ -174,7 +175,7 @@ class StrobeLightEffect : public LightEffect { } call.set_publish(false); call.set_save(false); - call.set_transition_length_if_supported(0); + call.set_transition_length_if_supported(this->colors_[this->at_color_].transition_length); call.perform(); this->last_switch_ = now; } diff --git a/esphome/components/light/effects.py b/esphome/components/light/effects.py index 5093ace949..be50f63321 100644 --- a/esphome/components/light/effects.py +++ b/esphome/components/light/effects.py @@ -266,6 +266,9 @@ async def random_effect_to_code(config, effect_id): cv.Required( CONF_DURATION ): cv.positive_time_period_milliseconds, + cv.Optional( + CONF_TRANSITION_LENGTH, default="0s" + ): cv.positive_time_period_milliseconds, } ), cv.has_at_least_one_key( @@ -310,6 +313,7 @@ async def strobe_effect_to_code(config, effect_id): ), ), ("duration", color[CONF_DURATION]), + ("transition_length", color[CONF_TRANSITION_LENGTH]), ) ) cg.add(var.set_colors(colors)) From 8b6a35845250deee6021fcd993467023f35d7f49 Mon Sep 17 00:00:00 2001 From: chiahsing Date: Mon, 29 Apr 2024 03:49:27 +0800 Subject: [PATCH 098/313] Fixed the issue that graph draws out of the boundary. (#6651) --- esphome/components/graph/graph.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/esphome/components/graph/graph.cpp b/esphome/components/graph/graph.cpp index 1178af911d..09f7557714 100644 --- a/esphome/components/graph/graph.cpp +++ b/esphome/components/graph/graph.cpp @@ -177,22 +177,26 @@ void Graph::draw(Display *buff, uint16_t x_offset, uint16_t y_offset, Color colo bool b = (trace->get_line_type() & bit) == bit; if (b) { int16_t y = (int16_t) roundf((this->height_ - 1) * (1.0 - v)) - thick / 2 + y_offset; + auto draw_pixel_at = [&buff, c, y_offset, this](int16_t x, int16_t y) { + if (y >= y_offset && y < y_offset + this->height_) + buff->draw_pixel_at(x, y, c); + }; if (!continuous || !has_prev || !prev_b || (abs(y - prev_y) <= thick)) { for (int16_t t = 0; t < thick; t++) { - buff->draw_pixel_at(x, y + t, c); + draw_pixel_at(x, y + t); } } else { int16_t mid_y = (y + prev_y + thick) / 2; if (y > prev_y) { for (int16_t t = prev_y + thick; t <= mid_y; t++) - buff->draw_pixel_at(x + 1, t, c); + draw_pixel_at(x + 1, t); for (int16_t t = mid_y + 1; t < y + thick; t++) - buff->draw_pixel_at(x, t, c); + draw_pixel_at(x, t); } else { for (int16_t t = prev_y - 1; t >= mid_y; t--) - buff->draw_pixel_at(x + 1, t, c); + draw_pixel_at(x + 1, t); for (int16_t t = mid_y - 1; t >= y; t--) - buff->draw_pixel_at(x, t, c); + draw_pixel_at(x, t); } } prev_y = y; From 9ea442f3286ecb62b72f93133afb9f9a69d44fa2 Mon Sep 17 00:00:00 2001 From: Ulrich Date: Sun, 28 Apr 2024 21:56:13 +0200 Subject: [PATCH 099/313] Fix upload command. MQTT user and password is missing from configuration. #5093 (#5766) Co-authored-by: ulrich Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/__main__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index dcd2dddb4b..b461dda4e7 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -768,7 +768,9 @@ def parse_args(argv): ) parser_upload = subparsers.add_parser( - "upload", help="Validate the configuration and upload the latest binary." + "upload", + help="Validate the configuration and upload the latest binary.", + parents=[mqtt_options], ) parser_upload.add_argument( "configuration", help="Your YAML configuration file(s).", nargs="+" From e7c1ddb4525031c90df0e76414cae81577d9d953 Mon Sep 17 00:00:00 2001 From: Matt Quigley Date: Sun, 28 Apr 2024 14:57:11 -0500 Subject: [PATCH 100/313] patch esphome cli to skip mqtt based device discovery if --device option is specified (#6371) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/__main__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index b461dda4e7..54c1aa112a 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -343,9 +343,10 @@ def upload_program(config, args, host): password = ota_conf.get(CONF_PASSWORD, "") if ( - not is_ip_address(CORE.address) + not is_ip_address(CORE.address) # pylint: disable=too-many-boolean-expressions and (get_port_type(host) == "MQTT" or config[CONF_MDNS][CONF_DISABLED]) and CONF_MQTT in config + and (not args.device or args.device == "MQTT") ): from esphome import mqtt From 80a0b5b1b109b424b85b5b00d5af84cec482c7bd Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:10:12 +1200 Subject: [PATCH 101/313] [i2s_audio.microphone] Fixing adc bug (#6654) --- .../microphone/i2s_audio_microphone.cpp | 65 +++++++++++++++++-- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp index 602d537bcb..1475df0975 100644 --- a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +++ b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp @@ -61,28 +61,57 @@ void I2SAudioMicrophone::start_() { .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT, }; + esp_err_t err; + #if SOC_I2S_SUPPORTS_ADC if (this->adc_) { config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN); - i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + + err = i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error setting ADC mode: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + err = i2s_adc_enable(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error enabling ADC: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } - i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_); - i2s_adc_enable(this->parent_->get_port()); } else #endif { if (this->pdm_) config.mode = (i2s_mode_t) (config.mode | I2S_MODE_PDM); - i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } i2s_pin_config_t pin_config = this->parent_->get_pin_config(); pin_config.data_in_num = this->din_pin_; - i2s_set_pin(this->parent_->get_port(), &pin_config); + err = i2s_set_pin(this->parent_->get_port(), &pin_config); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error setting I2S pin: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } } this->state_ = microphone::STATE_RUNNING; this->high_freq_.start(); + this->status_clear_error(); } void I2SAudioMicrophone::stop() { @@ -96,11 +125,33 @@ void I2SAudioMicrophone::stop() { } void I2SAudioMicrophone::stop_() { - i2s_stop(this->parent_->get_port()); - i2s_driver_uninstall(this->parent_->get_port()); + esp_err_t err; +#if SOC_I2S_SUPPORTS_ADC + if (this->adc_) { + err = i2s_adc_disable(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + } +#endif + err = i2s_stop(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error stopping I2S microphone: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + err = i2s_driver_uninstall(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error uninstalling I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } this->parent_->unlock(); this->state_ = microphone::STATE_STOPPED; this->high_freq_.stop(); + this->status_clear_error(); } size_t I2SAudioMicrophone::read(int16_t *buf, size_t len) { From c007593f729d96c34566d6c36a5fb9b817cbc692 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Mon, 29 Apr 2024 13:53:08 +1000 Subject: [PATCH 102/313] Fix for #4866 - inconsistent arguments (#6639) --- esphome/components/binary_sensor/automation.cpp | 6 +++--- esphome/core/helpers.cpp | 2 +- tests/components/host/test.host.yaml | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 tests/components/host/test.host.yaml diff --git a/esphome/components/binary_sensor/automation.cpp b/esphome/components/binary_sensor/automation.cpp index bfec882e07..7ac201b2db 100644 --- a/esphome/components/binary_sensor/automation.cpp +++ b/esphome/components/binary_sensor/automation.cpp @@ -51,15 +51,15 @@ void binary_sensor::MultiClickTrigger::on_state_(bool state) { MultiClickTriggerEvent evt = this->timing_[*this->at_index_]; if (evt.max_length != 4294967294UL) { - ESP_LOGV(TAG, "A i=%u min=%" PRIu32 " max=%" PRIu32, *this->at_index_, evt.min_length, evt.max_length); // NOLINT + ESP_LOGV(TAG, "A i=%zu min=%" PRIu32 " max=%" PRIu32, *this->at_index_, evt.min_length, evt.max_length); // NOLINT this->schedule_is_valid_(evt.min_length); this->schedule_is_not_valid_(evt.max_length); } else if (*this->at_index_ + 1 != this->timing_.size()) { - ESP_LOGV(TAG, "B i=%u min=%" PRIu32, *this->at_index_, evt.min_length); // NOLINT + ESP_LOGV(TAG, "B i=%zu min=%" PRIu32, *this->at_index_, evt.min_length); // NOLINT this->cancel_timeout("is_not_valid"); this->schedule_is_valid_(evt.min_length); } else { - ESP_LOGV(TAG, "C i=%u min=%" PRIu32, *this->at_index_, evt.min_length); // NOLINT + ESP_LOGV(TAG, "C i=%zu min=%" PRIu32, *this->at_index_, evt.min_length); // NOLINT this->is_valid_ = false; this->cancel_timeout("is_not_valid"); this->set_timeout("trigger", evt.min_length, [this]() { this->trigger_(); }); diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index 4368576301..fdc0eed774 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -437,7 +437,7 @@ static inline bool is_base64(char c) { return (isalnum(c) || (c == '+') || (c == std::string base64_encode(const std::vector &buf) { return base64_encode(buf.data(), buf.size()); } -std::string base64_encode(const char *buf, unsigned int buf_len) { +std::string base64_encode(const uint8_t *buf, size_t buf_len) { std::string ret; int i = 0; int j = 0; diff --git a/tests/components/host/test.host.yaml b/tests/components/host/test.host.yaml new file mode 100644 index 0000000000..3d14c190a6 --- /dev/null +++ b/tests/components/host/test.host.yaml @@ -0,0 +1,15 @@ +time: + - platform: sntp + id: esptime + timezone: Australia/Sydney + +logger: + level: VERBOSE + logs: + lvgl: INFO + display: DEBUG + sensor: INFO + vnc: DEBUG + +host: + mac_address: "62:23:45:AF:B3:DD" From 73bb4aa4d5428cd4d1034d8dd7ad9800903d632f Mon Sep 17 00:00:00 2001 From: Anton Sergunov Date: Mon, 29 Apr 2024 16:40:03 +0600 Subject: [PATCH 103/313] [template/text] Fix lambda config (#6655) Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- esphome/components/template/text/__init__.py | 2 +- tests/component_tests/text/test_text.py | 14 ++++++++++++++ tests/component_tests/text/test_text.yaml | 12 ++++++++++++ tests/components/template/common.yaml | 11 +++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/esphome/components/template/text/__init__.py b/esphome/components/template/text/__init__.py index 0f228a3c6b..f73b240197 100644 --- a/esphome/components/template/text/__init__.py +++ b/esphome/components/template/text/__init__.py @@ -28,7 +28,7 @@ def validate(config): raise cv.Invalid("optimistic cannot be used with lambda") if CONF_INITIAL_VALUE in config: raise cv.Invalid("initial_value cannot be used with lambda") - if CONF_RESTORE_VALUE in config: + if config[CONF_RESTORE_VALUE]: raise cv.Invalid("restore_value cannot be used with lambda") elif CONF_INITIAL_VALUE not in config: config[CONF_INITIAL_VALUE] = "" diff --git a/tests/component_tests/text/test_text.py b/tests/component_tests/text/test_text.py index 43f4ef2592..51fcb3d382 100644 --- a/tests/component_tests/text/test_text.py +++ b/tests/component_tests/text/test_text.py @@ -54,3 +54,17 @@ def test_text_config_value_mode_set(generate_main): # Then assert "it_1->traits.set_mode(text::TEXT_MODE_TEXT);" in main_cpp assert "it_3->traits.set_mode(text::TEXT_MODE_PASSWORD);" in main_cpp + + +def test_text_config_lamda_is_set(generate_main): + """ + Test if lambda is set for lambda mode + """ + # Given + + # When + main_cpp = generate_main("tests/component_tests/text/test_text.yaml") + + # Then + assert "it_4->set_template([=]() -> optional {" in main_cpp + assert 'return std::string{"Hello"};' in main_cpp diff --git a/tests/component_tests/text/test_text.yaml b/tests/component_tests/text/test_text.yaml index d0fdf5303f..d81c909f9d 100644 --- a/tests/component_tests/text/test_text.yaml +++ b/tests/component_tests/text/test_text.yaml @@ -31,3 +31,15 @@ text: optimistic: true internal: true max_length: 255 + + - platform: template + name: "test 4 key" + id: "it_4" + mode: text + set_action: + - then: + - logger.log: + format: Template text set to %s + args: ["x.c_str()"] + lambda: | + return std::string{"Hello"}; diff --git a/tests/components/template/common.yaml b/tests/components/template/common.yaml index ba7167157b..2b91225b5a 100644 --- a/tests/components/template/common.yaml +++ b/tests/components/template/common.yaml @@ -149,6 +149,17 @@ text: min_length: 0 max_length: 100 mode: text + - platform: template + name: "Template text lambda" + mode: text + update_interval: 1s + lambda: | + return std::string{"Hello!"}; + set_action: + then: + - logger.log: + format: Template Text set to %s + args: ["x.c_str()"] alarm_control_panel: - platform: template From 47c262832be69f7cd69ae93fde87c3e7931368eb Mon Sep 17 00:00:00 2001 From: Peter Zich Date: Mon, 29 Apr 2024 12:24:13 -0700 Subject: [PATCH 104/313] web_server: Add support for v3 local server_index (#6563) --- esphome/components/web_server/server_index.h | 605 --- .../components/web_server/server_index_v2.h | 633 +++ .../components/web_server/server_index_v3.h | 3995 +++++++++++++++++ esphome/components/web_server/web_server.cpp | 6 +- 4 files changed, 4633 insertions(+), 606 deletions(-) delete mode 100644 esphome/components/web_server/server_index.h create mode 100644 esphome/components/web_server/server_index_v2.h create mode 100644 esphome/components/web_server/server_index_v3.h diff --git a/esphome/components/web_server/server_index.h b/esphome/components/web_server/server_index.h deleted file mode 100644 index 180dffab67..0000000000 --- a/esphome/components/web_server/server_index.h +++ /dev/null @@ -1,605 +0,0 @@ -#pragma once -// Generated from https://github.com/esphome/esphome-webserver -#include "esphome/core/hal.h" -namespace esphome { - -namespace web_server { - -const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc5, 0x7d, 0xd9, 0x76, 0xe3, 0xc6, 0x92, 0xe0, 0xf3, - 0x9c, 0x33, 0x7f, 0x30, 0x2f, 0x10, 0x4a, 0xad, 0x02, 0xae, 0x40, 0x88, 0xa4, 0x6a, 0x33, 0x28, 0x90, 0x57, 0xb5, - 0xd8, 0x55, 0x76, 0x6d, 0x2e, 0xa9, 0xec, 0x6b, 0xcb, 0xb4, 0x04, 0x91, 0x49, 0x11, 0x2e, 0x10, 0xa0, 0x81, 0xa4, - 0x16, 0x53, 0xe8, 0x33, 0x4f, 0xf3, 0xd4, 0xe7, 0xcc, 0xd6, 0x0f, 0xfd, 0x30, 0x7d, 0xba, 0x1f, 0xe6, 0x23, 0xe6, - 0xb9, 0x3f, 0xe5, 0xfe, 0xc0, 0xf4, 0x27, 0x4c, 0x44, 0xe4, 0x82, 0x04, 0x17, 0x49, 0x5e, 0xba, 0xe7, 0xd8, 0x2a, - 0x12, 0xb9, 0x46, 0x44, 0x46, 0xc6, 0x96, 0x91, 0xe0, 0xde, 0xc6, 0x30, 0x1b, 0xf0, 0xab, 0x29, 0xb3, 0xc6, 0x7c, - 0x92, 0x74, 0xf7, 0xe4, 0xbf, 0x2c, 0x1a, 0x76, 0xf7, 0x92, 0x38, 0xfd, 0x64, 0xe5, 0x2c, 0x09, 0xe3, 0x41, 0x96, - 0x5a, 0xe3, 0x9c, 0x8d, 0xc2, 0x61, 0xc4, 0xa3, 0x20, 0x9e, 0x44, 0x67, 0xcc, 0xda, 0xe9, 0xee, 0x4d, 0x18, 0x8f, - 0xac, 0xc1, 0x38, 0xca, 0x0b, 0xc6, 0xc3, 0x8f, 0x87, 0x9f, 0x37, 0x9e, 0x74, 0xf7, 0x8a, 0x41, 0x1e, 0x4f, 0xb9, - 0x85, 0x43, 0x86, 0x93, 0x6c, 0x38, 0x4b, 0x58, 0xf7, 0x3c, 0xca, 0xad, 0x17, 0x3c, 0x7c, 0x77, 0xfa, 0x13, 0x1b, - 0x70, 0x7f, 0xc8, 0x46, 0x71, 0xca, 0xde, 0xe7, 0xd9, 0x94, 0xe5, 0xfc, 0xca, 0x3b, 0x58, 0x5d, 0x11, 0xb3, 0xc2, - 0x7b, 0xa6, 0xab, 0xce, 0x18, 0x7f, 0x77, 0x91, 0xaa, 0x3e, 0xcf, 0x99, 0x98, 0x24, 0xcb, 0x0b, 0xaf, 0x58, 0xd3, - 0xe6, 0xe0, 0x6a, 0x72, 0x9a, 0x25, 0x85, 0xf7, 0x49, 0xd7, 0x4f, 0xf3, 0x8c, 0x67, 0x08, 0x96, 0x3f, 0x8e, 0x0a, - 0xa3, 0xa5, 0xf7, 0x6e, 0x45, 0x93, 0xa9, 0xac, 0x7c, 0x55, 0xbc, 0x48, 0x67, 0x13, 0x96, 0x47, 0xa7, 0x09, 0xf3, - 0x72, 0x1e, 0x3a, 0xdc, 0x63, 0x5e, 0xec, 0x86, 0x5d, 0x66, 0xc5, 0xa9, 0xc5, 0x7b, 0x2f, 0x38, 0x95, 0xcc, 0x99, - 0x6e, 0x15, 0x6c, 0x34, 0x3d, 0x20, 0xd7, 0x28, 0x3e, 0x9b, 0xe9, 0xe7, 0x8b, 0x3c, 0xe6, 0xea, 0xfb, 0x79, 0x94, - 0xcc, 0x58, 0x10, 0x97, 0x6e, 0xc0, 0x8f, 0x58, 0x3f, 0x8c, 0xbd, 0x4f, 0x34, 0x28, 0x0c, 0x39, 0x1f, 0x65, 0xb9, - 0x83, 0xb4, 0x8a, 0x71, 0x6c, 0x76, 0x7d, 0xed, 0xb0, 0x70, 0x5e, 0xba, 0xee, 0x27, 0xee, 0x0f, 0xa2, 0x24, 0x71, - 0x70, 0xe2, 0xad, 0xad, 0x1c, 0x67, 0x8c, 0x3d, 0x76, 0x14, 0xf7, 0xdd, 0x4e, 0x3c, 0x72, 0x0a, 0xee, 0x56, 0xfd, - 0xb2, 0x91, 0x55, 0x70, 0x87, 0xb9, 0xee, 0xbb, 0xf5, 0x7d, 0x72, 0xc6, 0x67, 0x39, 0xc0, 0x5e, 0x7a, 0xef, 0xd4, - 0xcc, 0x07, 0x58, 0xff, 0x8c, 0x3a, 0x76, 0x00, 0xf6, 0x82, 0x5b, 0x9f, 0x87, 0x17, 0x71, 0x3a, 0xcc, 0x2e, 0xfc, - 0x83, 0x71, 0x04, 0x1f, 0x1f, 0xb2, 0x8c, 0x6f, 0x6d, 0x39, 0xe7, 0x59, 0x3c, 0xb4, 0x9a, 0x61, 0x68, 0x56, 0x5e, - 0x3d, 0x3b, 0x38, 0xb8, 0xbe, 0x5e, 0x28, 0xf0, 0xd3, 0x88, 0xc7, 0xe7, 0x4c, 0x74, 0x06, 0x00, 0x6c, 0xf8, 0x9c, - 0x72, 0x36, 0x3c, 0xe0, 0x57, 0x09, 0x94, 0x32, 0xc6, 0x0b, 0x1b, 0x70, 0x7c, 0x9e, 0x0d, 0x80, 0x6c, 0xa9, 0x41, - 0x78, 0x68, 0x9a, 0xb3, 0x69, 0x12, 0x0d, 0x18, 0xd6, 0xc3, 0x48, 0x55, 0x8f, 0xaa, 0x91, 0xf7, 0x6d, 0x28, 0x96, - 0xd7, 0x71, 0xbd, 0x94, 0x87, 0x29, 0xbb, 0xb0, 0xde, 0x44, 0xd3, 0xce, 0x20, 0x89, 0x8a, 0xc2, 0xca, 0xf8, 0x9c, - 0x50, 0xc8, 0x67, 0x03, 0x60, 0x10, 0x42, 0x70, 0x0e, 0x64, 0xe2, 0xe3, 0xb8, 0xf0, 0x8f, 0x37, 0x07, 0x45, 0xf1, - 0x81, 0x15, 0xb3, 0x84, 0x6f, 0x86, 0xb0, 0x16, 0x6c, 0x23, 0x0c, 0xbf, 0x75, 0xf9, 0x38, 0xcf, 0x2e, 0xac, 0x17, - 0x79, 0x0e, 0xcd, 0x6d, 0x98, 0x52, 0x34, 0xb0, 0xe2, 0xc2, 0x4a, 0x33, 0x6e, 0xe9, 0xc1, 0x70, 0x01, 0x7d, 0xeb, - 0x63, 0xc1, 0xac, 0x93, 0x59, 0x5a, 0x44, 0x23, 0x06, 0x4d, 0x4f, 0xac, 0x2c, 0xb7, 0x4e, 0x60, 0xd0, 0x13, 0x58, - 0xb2, 0x82, 0xc3, 0xae, 0xf1, 0x6d, 0xb7, 0x43, 0x73, 0x41, 0xe1, 0x21, 0xbb, 0xe4, 0x21, 0x2f, 0x81, 0x31, 0x61, - 0x55, 0x14, 0x1a, 0x8e, 0x3b, 0x4f, 0xa0, 0x00, 0xc0, 0x26, 0x96, 0x75, 0xcc, 0xc6, 0x7a, 0x71, 0x3e, 0xdf, 0xda, - 0xd2, 0xb4, 0x46, 0xc2, 0x43, 0xdb, 0x62, 0xa1, 0xad, 0x27, 0x10, 0xaf, 0x91, 0xc8, 0xf5, 0xb8, 0x2f, 0xc9, 0x77, - 0x70, 0x95, 0x0e, 0xea, 0x63, 0x43, 0x65, 0xc9, 0xb3, 0x03, 0x9e, 0xc7, 0xe9, 0x19, 0x00, 0xa1, 0xd8, 0xc0, 0x68, - 0x52, 0x96, 0x62, 0xf1, 0xdf, 0x03, 0xd4, 0x61, 0x17, 0x47, 0xcf, 0xb8, 0x63, 0x17, 0xd4, 0xc3, 0x06, 0x40, 0x80, - 0xf4, 0xc0, 0x60, 0xbc, 0xc7, 0x03, 0xbe, 0x6d, 0xdb, 0xde, 0xb7, 0xae, 0x77, 0x81, 0x1c, 0xe4, 0xfb, 0x3e, 0xb1, - 0xaf, 0xe8, 0x1c, 0x87, 0x2d, 0x04, 0xda, 0x4f, 0x58, 0x7a, 0xc6, 0xc7, 0x3d, 0x7e, 0xd4, 0xec, 0x07, 0x0c, 0xa0, - 0x1a, 0xce, 0x06, 0xcc, 0x41, 0x7e, 0xf4, 0x0a, 0xdc, 0x3e, 0xdb, 0x0e, 0x4c, 0x81, 0x0b, 0xb3, 0x41, 0x38, 0xd6, - 0x96, 0xc6, 0x55, 0xb0, 0x29, 0xc0, 0x90, 0xcf, 0x6d, 0xd8, 0x61, 0xa7, 0x2c, 0x37, 0xe0, 0xd0, 0xcd, 0x3a, 0xb5, - 0x15, 0x9c, 0xc1, 0x0a, 0x41, 0x3f, 0x6b, 0x34, 0x4b, 0x07, 0x3c, 0x06, 0xc1, 0x65, 0x6f, 0x03, 0xb8, 0x62, 0xe5, - 0xf4, 0xc2, 0xd9, 0x6e, 0xe9, 0x3a, 0xb1, 0xbb, 0xcd, 0x8f, 0x8a, 0xed, 0x56, 0xdf, 0x43, 0x28, 0x35, 0xf1, 0x25, - 0xe2, 0x31, 0x20, 0x58, 0x7a, 0x1f, 0xb9, 0xde, 0x9e, 0x9f, 0xf7, 0xb8, 0xbf, 0xcc, 0xc7, 0x21, 0xf3, 0x27, 0xd1, - 0x14, 0xb1, 0xe1, 0xc4, 0x03, 0x51, 0x3a, 0x40, 0xe8, 0x6a, 0xeb, 0x82, 0x14, 0xf3, 0x2b, 0x16, 0x70, 0x81, 0x20, - 0xb0, 0x67, 0x5f, 0x44, 0x83, 0x31, 0x6c, 0xf1, 0x8a, 0x70, 0x43, 0xb5, 0x1d, 0x06, 0x39, 0x8b, 0x38, 0x7b, 0x91, - 0x30, 0x7c, 0xc2, 0x15, 0x80, 0x9e, 0xb6, 0xeb, 0x15, 0x6a, 0xdf, 0x25, 0x31, 0x7f, 0x9b, 0xc1, 0x3c, 0x1d, 0xc1, - 0x24, 0xc0, 0xc5, 0xc5, 0xd6, 0x56, 0x8c, 0x2c, 0xb2, 0xcf, 0x61, 0xb5, 0x4e, 0x67, 0x9c, 0x01, 0xbd, 0xb0, 0x85, - 0x0d, 0xd4, 0xf6, 0x62, 0x9f, 0x03, 0x11, 0x9f, 0x65, 0x29, 0x87, 0xe1, 0x00, 0x5e, 0xcd, 0x41, 0x7e, 0x34, 0x9d, - 0xb2, 0x74, 0xf8, 0x6c, 0x1c, 0x27, 0x43, 0xa0, 0x46, 0x09, 0xf8, 0x26, 0x3c, 0x04, 0x3c, 0x01, 0x99, 0xe0, 0x66, - 0x8c, 0x68, 0xf9, 0x90, 0x91, 0x59, 0x68, 0xdb, 0x1d, 0x94, 0x40, 0x12, 0x0b, 0x94, 0x41, 0xb4, 0x70, 0x1f, 0x40, - 0xf4, 0x17, 0x2e, 0xdb, 0x0e, 0x63, 0xbd, 0x8c, 0x92, 0xc0, 0xef, 0x51, 0xd2, 0x00, 0xfd, 0x81, 0x10, 0xbc, 0x83, - 0x82, 0xeb, 0x4b, 0x29, 0x75, 0x22, 0xae, 0x30, 0x04, 0x02, 0x0c, 0x50, 0x82, 0x48, 0x1a, 0xbc, 0xcf, 0x92, 0xab, - 0x51, 0x9c, 0x24, 0x07, 0xb3, 0xe9, 0x34, 0xcb, 0xb9, 0xf7, 0x55, 0x38, 0xe7, 0x59, 0x85, 0x2b, 0x6d, 0xf2, 0xe2, - 0x22, 0xe6, 0x48, 0x50, 0x77, 0x3e, 0x88, 0x60, 0xa9, 0x9f, 0x66, 0x59, 0xc2, 0xa2, 0x14, 0xd0, 0xe0, 0x3d, 0xdb, - 0x0e, 0xd2, 0x59, 0x92, 0x74, 0x4e, 0x61, 0xd8, 0x4f, 0x1d, 0xaa, 0x16, 0x12, 0x3f, 0xa0, 0xef, 0xfb, 0x79, 0x1e, - 0x5d, 0x41, 0x43, 0x6c, 0x03, 0xec, 0x05, 0xab, 0xf5, 0xe5, 0xc1, 0xbb, 0xb7, 0xbe, 0x60, 0xfc, 0x78, 0x74, 0x05, - 0x80, 0x96, 0x95, 0xd4, 0x1c, 0xe5, 0xd9, 0x64, 0x61, 0x6a, 0xa4, 0x43, 0x1c, 0xf2, 0xce, 0x1a, 0x10, 0x62, 0x1a, - 0x19, 0x56, 0x89, 0x9b, 0x10, 0xbc, 0x25, 0x7e, 0x96, 0x95, 0xb8, 0x07, 0x7a, 0xf8, 0x25, 0x10, 0xc5, 0x30, 0xe5, - 0x2d, 0xd0, 0xe6, 0x57, 0xf3, 0x38, 0x24, 0x38, 0xa7, 0xa8, 0x7f, 0x11, 0xc6, 0x41, 0x04, 0xb3, 0xcf, 0xc5, 0x80, - 0xa5, 0x82, 0x38, 0x2e, 0x4b, 0x6f, 0xac, 0x99, 0x18, 0x25, 0x1e, 0x0a, 0x14, 0x16, 0x86, 0xa0, 0x60, 0x38, 0x3c, - 0xb8, 0xde, 0xd7, 0xe1, 0x3c, 0x52, 0xf8, 0xa0, 0x86, 0xc2, 0xfd, 0x15, 0x08, 0x39, 0x81, 0x9a, 0xec, 0x1c, 0xf4, - 0x20, 0xc0, 0xf9, 0x95, 0x07, 0xfa, 0x3f, 0x41, 0x28, 0x36, 0x5a, 0x1e, 0x68, 0xd0, 0x67, 0xe3, 0x28, 0x3d, 0x63, - 0xc3, 0x60, 0xcc, 0x4b, 0x29, 0x79, 0xf7, 0x2d, 0x58, 0x63, 0x60, 0xa7, 0xc2, 0x7a, 0x79, 0xf8, 0xe6, 0xb5, 0x5c, - 0xb9, 0x9a, 0x30, 0x86, 0x45, 0x9a, 0x81, 0x5a, 0x05, 0xb1, 0x2d, 0xc5, 0xf1, 0x0b, 0x2d, 0xbd, 0x45, 0x49, 0x5c, - 0x7c, 0x9c, 0x82, 0x89, 0xc1, 0xde, 0xc3, 0x30, 0x30, 0x7d, 0x08, 0x53, 0x51, 0x39, 0xcc, 0x27, 0x2a, 0x86, 0xba, - 0x08, 0x3a, 0x0b, 0x4c, 0xc5, 0x63, 0xe6, 0xb8, 0x25, 0xb0, 0x2a, 0x8f, 0x07, 0x56, 0x34, 0x1c, 0xbe, 0x4a, 0x63, - 0x1e, 0x47, 0x49, 0xfc, 0x0b, 0x51, 0x72, 0x8e, 0x3c, 0xc6, 0x3a, 0x72, 0x11, 0x00, 0x77, 0xea, 0x91, 0xb8, 0x4a, - 0xc8, 0x6e, 0x10, 0x31, 0x84, 0xb4, 0x4c, 0xc2, 0xa3, 0xbe, 0x04, 0x2f, 0xf1, 0xa7, 0xb3, 0x62, 0x8c, 0x84, 0x95, - 0x03, 0xa3, 0x20, 0xcf, 0x4e, 0x0b, 0x96, 0x9f, 0xb3, 0xa1, 0xe6, 0x80, 0x02, 0xb0, 0xa2, 0xe6, 0x60, 0xbc, 0xd0, - 0x8c, 0x8e, 0xd2, 0xa1, 0x1c, 0x86, 0xea, 0x98, 0x62, 0x96, 0x49, 0x66, 0xd6, 0x16, 0x8e, 0x96, 0x02, 0x8e, 0x30, - 0x2a, 0xa4, 0x24, 0x28, 0x42, 0x85, 0xe1, 0x18, 0xa4, 0x10, 0x73, 0x6b, 0xdb, 0x5c, 0x69, 0xb2, 0x17, 0x33, 0x52, - 0x09, 0x05, 0x74, 0x84, 0x8d, 0x4c, 0x90, 0x16, 0x2e, 0xec, 0x2a, 0x90, 0xf2, 0x12, 0x5c, 0x21, 0x45, 0x94, 0x99, - 0x83, 0x0c, 0x10, 0x7e, 0x4d, 0xba, 0x90, 0xf9, 0xd8, 0x82, 0x21, 0x1b, 0xf8, 0x7a, 0xe5, 0x81, 0xb0, 0x12, 0xef, - 0x0a, 0x11, 0x6f, 0x0d, 0xd8, 0xa4, 0x8b, 0x00, 0x30, 0x6f, 0x83, 0xf9, 0x69, 0xb6, 0x3f, 0x18, 0xb0, 0xa2, 0xc8, - 0xf2, 0xad, 0xad, 0x0d, 0x6a, 0xbf, 0xce, 0xd0, 0x02, 0x4a, 0xba, 0x5a, 0xd6, 0xd9, 0x05, 0x69, 0x70, 0x53, 0xad, - 0x28, 0x9d, 0x1e, 0xd8, 0xc7, 0xc7, 0x20, 0xb3, 0x3d, 0x49, 0x06, 0xa0, 0xfa, 0xb2, 0xe1, 0x27, 0xec, 0x99, 0x3a, - 0x65, 0x56, 0xda, 0x97, 0x4e, 0x1d, 0x24, 0x0f, 0x86, 0x75, 0x4b, 0x63, 0x41, 0x57, 0x0e, 0x8d, 0xab, 0x21, 0x15, - 0xe4, 0xfc, 0x8c, 0x54, 0xb6, 0xb1, 0x8c, 0x60, 0xb5, 0x95, 0x1e, 0x91, 0x5e, 0x61, 0x93, 0x13, 0xa0, 0x47, 0xbc, - 0xdf, 0x91, 0xf5, 0x61, 0x21, 0x28, 0x97, 0xb3, 0x9f, 0x67, 0xac, 0xe0, 0x82, 0x75, 0x61, 0xdc, 0x1c, 0xc6, 0x2d, - 0x97, 0xac, 0xc3, 0x9a, 0xed, 0xb8, 0x0a, 0xb6, 0x77, 0x53, 0xd4, 0x63, 0x05, 0x72, 0xf2, 0xcd, 0xec, 0x44, 0xf6, - 0x84, 0x7b, 0x7d, 0xfd, 0xb5, 0x1a, 0xa4, 0x5a, 0x4a, 0x6d, 0x03, 0x2d, 0xac, 0x89, 0xad, 0x9a, 0x0c, 0x6d, 0x57, - 0x2a, 0xd4, 0x8d, 0x56, 0xa7, 0xc6, 0x07, 0xb0, 0xe7, 0x9a, 0x9a, 0xa5, 0x2b, 0x63, 0xfb, 0xbd, 0xa2, 0xe9, 0x3b, - 0x31, 0x32, 0x59, 0xa3, 0xfc, 0x76, 0xee, 0x51, 0x3b, 0x1e, 0xda, 0x2e, 0xd5, 0x55, 0x82, 0x61, 0x56, 0x17, 0x0c, - 0x8b, 0x50, 0x4f, 0x75, 0x17, 0x5b, 0x33, 0x15, 0x0f, 0xd5, 0x5a, 0x2b, 0x07, 0x82, 0x85, 0x47, 0x60, 0x9c, 0xac, - 0xf4, 0x0f, 0xde, 0x46, 0x13, 0x86, 0x14, 0xf5, 0xd6, 0x35, 0x90, 0x0e, 0x04, 0x34, 0xe9, 0x2f, 0xaa, 0x37, 0xe6, - 0x0a, 0xab, 0xa9, 0xbe, 0xbf, 0x62, 0xb0, 0x22, 0xc0, 0xbe, 0x2e, 0x57, 0x2c, 0x11, 0xe9, 0x4d, 0xc9, 0xce, 0x8a, - 0x3e, 0xa2, 0x4c, 0xac, 0x09, 0x29, 0x78, 0x40, 0x1e, 0x96, 0x7f, 0x61, 0xe1, 0x54, 0x2b, 0x85, 0x23, 0x43, 0x99, - 0x02, 0x74, 0x26, 0x25, 0x00, 0xe2, 0x92, 0x3e, 0x6b, 0x1b, 0x0b, 0xc9, 0x76, 0x80, 0x7c, 0xe0, 0x8f, 0x92, 0x88, - 0x3b, 0xad, 0x9d, 0xa6, 0x0b, 0x7c, 0x08, 0x42, 0x1c, 0x74, 0x04, 0x98, 0xf7, 0x15, 0x2a, 0x1c, 0x51, 0x89, 0x5d, - 0xe6, 0x83, 0x51, 0x34, 0x8e, 0x47, 0xdc, 0x49, 0x90, 0x79, 0xdc, 0x92, 0x25, 0xa0, 0x64, 0xf4, 0xbe, 0x02, 0x65, - 0xc1, 0x84, 0x74, 0x11, 0xd5, 0x4a, 0xa0, 0x31, 0x05, 0x29, 0x49, 0x29, 0xd2, 0x82, 0x0a, 0x02, 0x43, 0xa8, 0x74, - 0x14, 0x47, 0x81, 0x7e, 0x8b, 0x7b, 0x62, 0xd0, 0x60, 0xc9, 0xa2, 0x8c, 0x7b, 0xf1, 0x72, 0x21, 0xa8, 0x61, 0x9f, - 0x67, 0xaf, 0xb3, 0x0b, 0x96, 0x3f, 0x8b, 0x10, 0xf6, 0x40, 0x74, 0x2f, 0x41, 0xd2, 0x93, 0x40, 0xe7, 0x1d, 0xc5, - 0x2b, 0xe7, 0x84, 0x34, 0x2c, 0xc4, 0x24, 0x46, 0x45, 0x08, 0x76, 0x0b, 0xd1, 0x3e, 0xc5, 0x2d, 0x45, 0x7b, 0x0f, - 0x55, 0x09, 0xd7, 0xbc, 0xb5, 0xff, 0xba, 0xce, 0x5b, 0x30, 0xc2, 0x54, 0x71, 0x6b, 0x7d, 0xc7, 0x82, 0x7b, 0x21, - 0x74, 0xb3, 0x23, 0x79, 0xcb, 0x50, 0x66, 0xa0, 0x3f, 0xae, 0xaf, 0x2b, 0x23, 0x1d, 0x94, 0xa9, 0x96, 0xe6, 0x08, - 0x81, 0xd8, 0x12, 0x6e, 0x09, 0xca, 0x08, 0x0d, 0xaf, 0x3c, 0x4b, 0x12, 0x43, 0x17, 0x79, 0x71, 0xc7, 0x59, 0x50, - 0x47, 0x00, 0xc5, 0xa4, 0xa6, 0x91, 0x7a, 0x2c, 0xd0, 0x15, 0xa8, 0x94, 0x94, 0x36, 0xf2, 0xaa, 0xb5, 0x11, 0x10, - 0xa7, 0x43, 0x96, 0x0b, 0x07, 0x4d, 0xea, 0x50, 0x98, 0x30, 0x05, 0x86, 0x66, 0x43, 0xf4, 0x1c, 0x24, 0x02, 0x60, - 0x9e, 0xf8, 0xe3, 0xac, 0xe0, 0xba, 0xce, 0x84, 0x3e, 0xbe, 0xbe, 0x8e, 0x85, 0xbf, 0x88, 0x0c, 0x90, 0xb3, 0x49, - 0x76, 0xce, 0x56, 0x40, 0xdd, 0x51, 0x83, 0x99, 0x20, 0x1b, 0xc3, 0x80, 0x12, 0x05, 0xd5, 0x32, 0x4d, 0x62, 0xb0, - 0xf4, 0x75, 0x03, 0x1f, 0x0c, 0x3a, 0x76, 0x89, 0x32, 0xc2, 0xed, 0x76, 0xbb, 0x4d, 0xaf, 0xe5, 0x96, 0x82, 0xe0, - 0xf3, 0x25, 0x8a, 0xde, 0xa0, 0x1f, 0xa5, 0x09, 0xbe, 0x4a, 0x16, 0x30, 0xd7, 0x50, 0x8a, 0xc2, 0x4f, 0x62, 0x9e, - 0x14, 0xc4, 0xae, 0x37, 0x84, 0x41, 0x39, 0x53, 0x82, 0x1b, 0x4d, 0x5c, 0xb1, 0x6d, 0x3f, 0x68, 0xb2, 0x69, 0x76, - 0x52, 0x3b, 0x4c, 0x2d, 0x8c, 0x5c, 0xf3, 0x42, 0x7b, 0xc0, 0xe6, 0xf2, 0x90, 0x4d, 0x8f, 0xd5, 0xc0, 0xeb, 0x00, - 0xa1, 0xf0, 0x74, 0x9d, 0x25, 0x94, 0xaa, 0xce, 0x52, 0x88, 0xeb, 0x0d, 0xf4, 0x51, 0x81, 0xb9, 0x8a, 0x04, 0x07, - 0x52, 0x20, 0x30, 0xf4, 0xc8, 0xc4, 0x7a, 0x3d, 0x83, 0xe5, 0x39, 0x8d, 0x06, 0x9f, 0x34, 0xb8, 0x15, 0xef, 0x2d, - 0xb2, 0x81, 0xb3, 0x50, 0x12, 0x1a, 0xe2, 0xca, 0xc4, 0x5b, 0x49, 0xe8, 0xda, 0x46, 0x01, 0x87, 0x6c, 0x89, 0xed, - 0x17, 0x17, 0x7a, 0x91, 0xdb, 0x25, 0x7b, 0x28, 0xff, 0xa9, 0xe2, 0x92, 0xf5, 0x2c, 0xc7, 0x94, 0x34, 0x60, 0x8a, - 0xf1, 0x60, 0x69, 0x16, 0x20, 0x01, 0xbe, 0x2b, 0x87, 0x71, 0xb1, 0x9e, 0x04, 0x7f, 0x28, 0x98, 0xcf, 0x8d, 0x99, - 0x6e, 0x85, 0x54, 0x4b, 0x38, 0x69, 0x06, 0x6b, 0xd0, 0xa4, 0xf1, 0xa0, 0x44, 0xcd, 0x57, 0x68, 0xa8, 0x10, 0xc7, - 0x9f, 0x89, 0x2a, 0x34, 0xc1, 0x10, 0x8c, 0xc2, 0xcb, 0x25, 0xc3, 0xa5, 0xcb, 0xa2, 0x45, 0xca, 0xd4, 0x98, 0x54, - 0xaa, 0x66, 0xb9, 0x14, 0x0c, 0x2c, 0xda, 0xad, 0xbe, 0xb4, 0xc4, 0x95, 0xc8, 0xcd, 0x42, 0x2d, 0x4c, 0x72, 0xe5, - 0x4d, 0x38, 0x05, 0xfa, 0x5d, 0xca, 0x7a, 0x37, 0xf1, 0x29, 0x14, 0x3e, 0x85, 0x6f, 0xf8, 0x50, 0x26, 0x6f, 0xe7, - 0x3d, 0x30, 0xf7, 0x6b, 0x95, 0x68, 0x9f, 0xfa, 0x28, 0x98, 0x5d, 0x2d, 0x74, 0x41, 0xa0, 0x48, 0x36, 0xc9, 0x7a, - 0x92, 0xdf, 0x50, 0x6c, 0x54, 0x9e, 0x51, 0xea, 0x8a, 0x0d, 0x52, 0xf3, 0x4a, 0x53, 0x2f, 0x73, 0x17, 0xec, 0xf7, - 0xb2, 0x94, 0x74, 0x62, 0x82, 0x32, 0xb1, 0x77, 0x13, 0x6d, 0xbc, 0x2c, 0x4c, 0x85, 0xf5, 0x2b, 0x8c, 0x9d, 0x1a, - 0x85, 0x32, 0x29, 0x02, 0x71, 0x6c, 0x7c, 0xac, 0x2c, 0x83, 0xd4, 0x5f, 0x61, 0x4f, 0x01, 0x28, 0x09, 0x2c, 0xbe, - 0xa6, 0x92, 0x17, 0x85, 0x75, 0x3a, 0x6e, 0x10, 0x1d, 0x2b, 0x11, 0x5a, 0x13, 0xf9, 0x5a, 0x9f, 0xc5, 0x7e, 0xcd, - 0x25, 0x34, 0x29, 0x59, 0xf4, 0x8a, 0xc0, 0x56, 0x81, 0x88, 0x4a, 0xb7, 0x25, 0xbd, 0x84, 0x1c, 0xd2, 0x65, 0xa2, - 0xd7, 0x46, 0x32, 0x68, 0x9d, 0x09, 0x89, 0x96, 0xf5, 0xc3, 0x08, 0xc5, 0x86, 0x58, 0x8b, 0x25, 0x42, 0x2e, 0xda, - 0x9b, 0xc4, 0x8a, 0xe8, 0x9c, 0x16, 0x68, 0xc2, 0x99, 0x3a, 0xdd, 0x71, 0x00, 0x1d, 0x10, 0xfb, 0x4b, 0xac, 0xb7, - 0xd2, 0xec, 0x74, 0xfd, 0xca, 0xe1, 0xbb, 0xbe, 0x1e, 0x73, 0xd7, 0x91, 0x06, 0x2f, 0xac, 0x59, 0x4f, 0xc9, 0xde, - 0xfd, 0xd7, 0xd8, 0x8a, 0xec, 0xcf, 0xaa, 0xa4, 0xf2, 0x14, 0x6a, 0x9c, 0x5b, 0x5f, 0xa7, 0x5a, 0x68, 0x51, 0x55, - 0x1c, 0x18, 0x52, 0xfd, 0x40, 0x29, 0xec, 0x0a, 0xe5, 0x03, 0x39, 0x74, 0xec, 0xba, 0x6e, 0x50, 0x90, 0xf3, 0xb2, - 0xb1, 0xca, 0x85, 0xdc, 0xda, 0x32, 0x7d, 0xa6, 0x73, 0x3d, 0xfc, 0x33, 0x07, 0x95, 0x73, 0x71, 0x95, 0x92, 0x05, - 0xf3, 0x4c, 0xa9, 0xa3, 0x25, 0x07, 0xb4, 0xd9, 0x41, 0x4f, 0x3b, 0xba, 0x88, 0x62, 0x6e, 0xe9, 0x51, 0x84, 0xa7, - 0x8d, 0xf2, 0x49, 0x1a, 0x1d, 0x80, 0x17, 0x9a, 0x90, 0xe4, 0x84, 0x9b, 0xb6, 0x68, 0x31, 0x18, 0x33, 0x0c, 0x81, - 0x2b, 0x7b, 0xc2, 0x94, 0x3d, 0x1b, 0x88, 0xb7, 0x1c, 0x78, 0x35, 0xec, 0xe5, 0x62, 0xf7, 0x9a, 0xf9, 0x0f, 0x6b, - 0x04, 0xb2, 0x6d, 0xa2, 0xea, 0xca, 0x85, 0x67, 0x29, 0x22, 0x31, 0xc2, 0xb6, 0x6a, 0x6c, 0x69, 0xeb, 0x77, 0x16, - 0xdc, 0xeb, 0xca, 0x31, 0xaf, 0x29, 0xd5, 0x05, 0x3d, 0xac, 0xdc, 0x1c, 0x6e, 0x3a, 0xf2, 0x62, 0x05, 0xdd, 0x8e, - 0x08, 0x0a, 0x81, 0x13, 0xa1, 0xec, 0x41, 0xcd, 0x0d, 0x44, 0x4a, 0xa6, 0xb4, 0x6a, 0x36, 0x4b, 0x86, 0x12, 0x58, - 0x70, 0x61, 0x99, 0xe4, 0xa3, 0x8b, 0x38, 0x49, 0xaa, 0xd2, 0x3f, 0x54, 0xc0, 0x8b, 0x61, 0x6f, 0x13, 0xed, 0x02, - 0xa3, 0x99, 0x02, 0xc1, 0xd5, 0x46, 0xd8, 0x47, 0xc7, 0xad, 0xd6, 0x5d, 0x44, 0x1c, 0x99, 0x19, 0x8d, 0xf8, 0x88, - 0x36, 0x64, 0xc9, 0x34, 0x6b, 0xef, 0xbf, 0xc0, 0x90, 0x9a, 0x81, 0x0f, 0xaa, 0x33, 0x2a, 0xfe, 0x55, 0xf6, 0xd4, - 0xaf, 0x44, 0xef, 0x56, 0xd5, 0xb5, 0x18, 0x50, 0x51, 0x81, 0x0f, 0x33, 0xc4, 0xd2, 0x54, 0x81, 0x80, 0x5c, 0x0f, - 0xeb, 0x70, 0xb7, 0x46, 0x1a, 0x2c, 0x28, 0x05, 0xd6, 0x5a, 0xd9, 0xbd, 0xbe, 0x2d, 0x98, 0x43, 0xa1, 0x70, 0xd1, - 0xff, 0x59, 0x36, 0x99, 0xa2, 0x65, 0xb6, 0xc0, 0xd4, 0xd0, 0xe0, 0xe3, 0x42, 0x7d, 0xb9, 0xa2, 0xac, 0xd6, 0x87, - 0x76, 0x64, 0x8d, 0x9f, 0xb4, 0xa3, 0x0c, 0x0e, 0xd5, 0x4c, 0x17, 0xd5, 0xed, 0xe6, 0x45, 0x11, 0xb3, 0x8a, 0xc7, - 0x7d, 0xd2, 0xdb, 0xda, 0x9a, 0xf4, 0x34, 0x0d, 0x48, 0x26, 0x49, 0x86, 0x37, 0x19, 0xa0, 0xac, 0x88, 0x33, 0x2f, - 0x17, 0xc8, 0x37, 0x2f, 0x4b, 0x5c, 0xbf, 0xef, 0x3b, 0xfb, 0x35, 0xcf, 0xda, 0xdb, 0x5f, 0xef, 0x22, 0x57, 0x75, - 0xd2, 0x83, 0x3c, 0xea, 0x43, 0xd1, 0x92, 0x4d, 0x19, 0xce, 0x27, 0xd9, 0x90, 0x05, 0x36, 0x74, 0x4f, 0xed, 0x52, - 0x6e, 0x9a, 0x08, 0x36, 0x07, 0xf8, 0x7f, 0xf3, 0x0f, 0xf5, 0x48, 0x6a, 0xb0, 0x0f, 0x2c, 0xa0, 0xcd, 0x85, 0x2f, - 0xc3, 0xb3, 0x24, 0x3b, 0x8d, 0x92, 0x43, 0xa1, 0xc0, 0x6b, 0x2d, 0xbf, 0x01, 0x97, 0x91, 0x2c, 0x56, 0x43, 0x49, - 0x7d, 0xd9, 0xfb, 0x32, 0xb8, 0xbd, 0x47, 0xe5, 0xad, 0xd8, 0x2d, 0xbf, 0xe9, 0xb7, 0x6c, 0x15, 0x11, 0xfb, 0xc9, - 0x9c, 0x0e, 0x34, 0x4e, 0x01, 0x94, 0x39, 0x04, 0x4d, 0x56, 0x78, 0x03, 0x1e, 0xfe, 0xd4, 0xfb, 0x49, 0xb9, 0xd4, - 0x19, 0xb8, 0x10, 0xe0, 0xe4, 0x27, 0x31, 0x6f, 0xe0, 0x79, 0xa4, 0xed, 0xcd, 0x45, 0x05, 0xc6, 0x15, 0x29, 0x2e, - 0x5d, 0x2a, 0x6f, 0xd0, 0x3b, 0x0e, 0x4f, 0xa0, 0xd9, 0xe6, 0xe6, 0xdc, 0x79, 0x13, 0xf1, 0xb1, 0x9f, 0x47, 0xe9, - 0x30, 0x9b, 0x38, 0xee, 0xb6, 0x6d, 0xbb, 0x7e, 0x41, 0x9e, 0xc8, 0x67, 0x6e, 0xb9, 0x79, 0xe2, 0x0d, 0x79, 0x68, - 0xf7, 0xec, 0xed, 0x63, 0xef, 0x90, 0x87, 0x27, 0x7b, 0x9b, 0xf3, 0x21, 0x2f, 0xbb, 0x27, 0xde, 0xa5, 0x8e, 0xb9, - 0x7b, 0xef, 0x51, 0xca, 0x40, 0xaf, 0xb0, 0x7b, 0x29, 0xc1, 0x00, 0x76, 0xa3, 0xf8, 0x3b, 0x48, 0xb9, 0x8f, 0x74, - 0x20, 0x22, 0xe3, 0xb4, 0xd7, 0xd7, 0x76, 0x46, 0x11, 0x03, 0x7b, 0x43, 0x3b, 0xab, 0x5b, 0x5b, 0x95, 0x9a, 0xaf, - 0x4a, 0xbd, 0x19, 0x0f, 0x6b, 0x9e, 0xba, 0xf7, 0x92, 0x8e, 0x56, 0xea, 0x1b, 0x79, 0x26, 0x82, 0x36, 0xcb, 0x76, - 0x82, 0x63, 0x6c, 0xf1, 0xd5, 0xdb, 0xfa, 0x48, 0x44, 0x29, 0xfc, 0x18, 0xac, 0x97, 0x08, 0xd4, 0x37, 0x38, 0x38, - 0xde, 0x61, 0xb8, 0xb3, 0xe7, 0xf4, 0x02, 0x67, 0xa3, 0xd1, 0xb8, 0xfe, 0x61, 0xe7, 0xe8, 0xc7, 0xa8, 0xf1, 0xcb, - 0x7e, 0xe3, 0xfb, 0xbe, 0x7b, 0xed, 0xfc, 0xb0, 0xd3, 0x3b, 0x92, 0x4f, 0x47, 0x3f, 0x76, 0x7f, 0x28, 0xfa, 0x7f, - 0x12, 0x85, 0x9b, 0xae, 0xbb, 0x73, 0xe6, 0x4d, 0x79, 0xb8, 0xd3, 0x68, 0x74, 0xe1, 0xdb, 0x19, 0x7c, 0xc3, 0xcf, - 0x53, 0xf8, 0xb8, 0x3e, 0xb2, 0xfe, 0xc3, 0x0f, 0xe9, 0x7f, 0xfc, 0x21, 0xef, 0xe3, 0x98, 0x47, 0x3f, 0xfe, 0x50, - 0xd8, 0xf7, 0xbb, 0xe1, 0x4e, 0x7f, 0xdb, 0x75, 0x74, 0xcd, 0x9f, 0xc2, 0xea, 0x2b, 0xb4, 0x3a, 0xfa, 0x51, 0x3e, - 0xd9, 0xf7, 0x4f, 0xf6, 0xba, 0x61, 0xff, 0xda, 0xb1, 0xaf, 0xef, 0xbb, 0xd7, 0xae, 0x7b, 0xbd, 0x89, 0xf3, 0x9c, - 0xc3, 0xe8, 0xf7, 0xe1, 0x73, 0x04, 0x9f, 0x36, 0x7c, 0x6e, 0xc2, 0xe7, 0x8f, 0xd0, 0x4d, 0xc4, 0xdf, 0xae, 0x29, - 0x16, 0x72, 0x8d, 0x07, 0x16, 0x11, 0xac, 0x82, 0xbb, 0xb9, 0x13, 0x7b, 0x13, 0x22, 0x1a, 0xec, 0x43, 0xdf, 0xf7, - 0x31, 0x4c, 0xea, 0xcc, 0x8f, 0x37, 0x61, 0xd1, 0x91, 0x73, 0x36, 0x03, 0xee, 0x89, 0xc8, 0x41, 0x11, 0x30, 0x71, - 0xb6, 0x5a, 0xe0, 0xe1, 0xaa, 0x37, 0x0c, 0x27, 0xdc, 0x01, 0xa3, 0xe0, 0x03, 0xc7, 0x2f, 0x6d, 0xd7, 0x7b, 0x21, - 0xcf, 0x0c, 0x71, 0x9f, 0x0b, 0xd6, 0x4a, 0x33, 0x61, 0xd2, 0xd8, 0xae, 0x37, 0x5d, 0x51, 0x09, 0xdb, 0x3a, 0x3d, - 0x83, 0xba, 0x63, 0x11, 0xa3, 0xfe, 0x96, 0x45, 0x9f, 0x70, 0x4b, 0xbe, 0x35, 0x0e, 0x81, 0x97, 0x2c, 0xf9, 0x45, - 0xa3, 0xd1, 0xb0, 0x11, 0x85, 0x3b, 0xf6, 0x94, 0xc1, 0x0c, 0x4b, 0x26, 0x22, 0x23, 0xa5, 0x29, 0x2c, 0x5b, 0x98, - 0xfc, 0x7d, 0x94, 0xf3, 0xcd, 0xca, 0xb0, 0x0d, 0xeb, 0x96, 0xec, 0x82, 0xa5, 0x7f, 0x87, 0x29, 0xd0, 0xb4, 0xa4, - 0xf3, 0x0f, 0x73, 0xfc, 0x30, 0x23, 0xb4, 0x3e, 0x38, 0x0c, 0x3c, 0xf4, 0x02, 0xe4, 0x8e, 0xe8, 0xe7, 0xbc, 0x47, - 0x35, 0x06, 0xff, 0xcb, 0x30, 0x83, 0x27, 0xe6, 0xc3, 0x10, 0xcd, 0xbc, 0xd4, 0xc1, 0xad, 0x0c, 0xc5, 0xfd, 0x2b, - 0xdc, 0x19, 0x59, 0xe9, 0x1d, 0x84, 0x6a, 0xc7, 0x1c, 0xe6, 0x8c, 0x7d, 0x1b, 0x25, 0x9f, 0x58, 0xee, 0x5c, 0x7a, - 0xad, 0xf6, 0x67, 0xd4, 0xd9, 0x43, 0xdb, 0xec, 0x4d, 0x75, 0x8c, 0xa6, 0xcd, 0x02, 0x79, 0x44, 0xd8, 0x68, 0x79, - 0x28, 0x31, 0x88, 0x04, 0xb9, 0x97, 0x86, 0x6d, 0xe2, 0x70, 0x7b, 0xaf, 0x38, 0x3f, 0xeb, 0xda, 0x81, 0x6d, 0x83, - 0xc5, 0x7f, 0x48, 0x61, 0x2b, 0x61, 0x58, 0x34, 0x3b, 0x6c, 0x2f, 0xee, 0xb0, 0xed, 0xed, 0x2a, 0xe0, 0x84, 0x07, - 0xe9, 0xd4, 0x3d, 0xf1, 0x22, 0x6f, 0x1c, 0xc2, 0x80, 0x03, 0x68, 0x86, 0x5d, 0x3a, 0x83, 0xbd, 0x58, 0x4e, 0x03, - 0xb2, 0x3e, 0xf3, 0x93, 0xa8, 0xe0, 0xaf, 0x30, 0x1e, 0x11, 0x0e, 0xc0, 0xd8, 0xcf, 0x7c, 0x76, 0xc9, 0x06, 0xca, - 0xce, 0x00, 0x42, 0x45, 0x6e, 0xc7, 0x1d, 0x84, 0x46, 0x33, 0x98, 0x3b, 0x0c, 0x0f, 0x7b, 0x36, 0xec, 0x25, 0xd8, - 0x95, 0x61, 0x74, 0xd4, 0xea, 0xf7, 0xb2, 0x70, 0xca, 0x03, 0x4d, 0x5b, 0x59, 0x74, 0x56, 0x2b, 0x6a, 0xf7, 0x7b, - 0xce, 0x26, 0x18, 0xe9, 0x60, 0x8b, 0x3b, 0xf8, 0x84, 0x11, 0x8a, 0x3c, 0xfc, 0xc0, 0xce, 0x5e, 0x5c, 0x4e, 0x1d, - 0x7b, 0x6f, 0xc7, 0xde, 0xc6, 0x52, 0xcf, 0x06, 0xf6, 0x02, 0x0a, 0x86, 0xa7, 0xae, 0xd9, 0x79, 0xb7, 0x8f, 0xa0, - 0x62, 0x21, 0x4e, 0x7e, 0xda, 0xb3, 0xbb, 0x62, 0xea, 0x26, 0x0c, 0x9a, 0xc9, 0xe5, 0xc7, 0x15, 0x3d, 0x24, 0x54, - 0x55, 0x57, 0x05, 0x1d, 0x94, 0xb5, 0x03, 0x67, 0x6c, 0x22, 0xd1, 0xc0, 0xc9, 0x24, 0x15, 0xc0, 0xe1, 0xc1, 0x66, - 0x30, 0xa9, 0xd1, 0x6d, 0xb7, 0xdf, 0x3b, 0x0d, 0xee, 0xdb, 0xf7, 0xd5, 0xc3, 0x08, 0x90, 0xe1, 0x62, 0xfa, 0x11, - 0x48, 0x3b, 0xfc, 0x3c, 0xe7, 0x80, 0xe4, 0x29, 0x15, 0x4d, 0x65, 0xd1, 0x19, 0x16, 0x1d, 0x06, 0x08, 0xaa, 0x97, - 0x6b, 0xeb, 0x4f, 0xac, 0xc9, 0x30, 0x24, 0xd8, 0xc1, 0x16, 0x3a, 0x62, 0xdb, 0xad, 0x3e, 0x9e, 0x37, 0xe4, 0xbc, - 0xf8, 0x36, 0xe6, 0xa0, 0x12, 0x76, 0xba, 0xb6, 0xdb, 0xb3, 0x2d, 0x5c, 0xda, 0x4e, 0xba, 0x1d, 0x0a, 0x0a, 0xc7, - 0xdb, 0x87, 0x3c, 0x18, 0x77, 0xc3, 0x66, 0xcf, 0x29, 0x64, 0xb8, 0x11, 0xcf, 0x2d, 0x85, 0x04, 0x6f, 0x7a, 0x63, - 0x10, 0xe8, 0xc8, 0xb9, 0x9b, 0xf6, 0xb6, 0x2a, 0x84, 0xa2, 0xe3, 0xed, 0xa1, 0x1b, 0xc4, 0xf0, 0xe1, 0x34, 0x90, - 0x69, 0xc6, 0xba, 0xaf, 0xd2, 0xcc, 0xcc, 0x0d, 0x86, 0xca, 0x22, 0x4f, 0xc2, 0x74, 0xdb, 0xc1, 0x08, 0x2d, 0x48, - 0xda, 0xbd, 0x1e, 0xc0, 0xb0, 0xed, 0x28, 0x4e, 0xdb, 0x51, 0xac, 0xa6, 0xec, 0xf3, 0x23, 0xbd, 0x1c, 0x03, 0xde, - 0x1b, 0xa8, 0xf3, 0x58, 0xd4, 0x3e, 0x00, 0x56, 0x90, 0x78, 0x45, 0x5f, 0x9d, 0x79, 0xbd, 0xac, 0x9d, 0x6f, 0xcd, - 0x95, 0x28, 0xe2, 0x9e, 0x21, 0xa1, 0x58, 0xa9, 0xdd, 0x30, 0x61, 0x6e, 0x4f, 0x91, 0x18, 0x9a, 0xe5, 0x43, 0xd8, - 0x63, 0xa1, 0x0a, 0xb0, 0x67, 0xe6, 0xb6, 0x48, 0xc2, 0xaa, 0xb9, 0x77, 0x04, 0xac, 0xdd, 0x0f, 0xdf, 0x08, 0x77, - 0xaa, 0xa3, 0xa2, 0xf9, 0x2c, 0x09, 0x5f, 0x2e, 0x1c, 0x17, 0x47, 0x78, 0x22, 0x74, 0xe0, 0x0f, 0x66, 0x39, 0xc8, - 0x03, 0xfe, 0x16, 0x2c, 0x83, 0x50, 0x36, 0x45, 0x47, 0x0f, 0x8f, 0x80, 0x3d, 0x42, 0x7c, 0x21, 0x6c, 0x6e, 0x54, - 0xa3, 0x45, 0x49, 0xc6, 0x0b, 0x1d, 0x0c, 0x77, 0x98, 0x74, 0xed, 0x51, 0x30, 0xc8, 0x13, 0x63, 0x07, 0xcf, 0xfc, - 0xfd, 0x01, 0x56, 0xe3, 0x04, 0x85, 0x5b, 0xd2, 0x6e, 0xab, 0xc4, 0xdf, 0x81, 0x9f, 0x82, 0x04, 0xc7, 0x3a, 0xf0, - 0xb3, 0xb6, 0xb6, 0x12, 0x89, 0xd4, 0x5e, 0xd6, 0xa1, 0x93, 0x08, 0x8c, 0x07, 0x17, 0x7e, 0x0a, 0xd5, 0x48, 0x22, - 0x2a, 0x22, 0x0b, 0xd4, 0x3c, 0x55, 0xab, 0xe0, 0x3b, 0x32, 0x23, 0xf0, 0x8c, 0x92, 0x5c, 0xd0, 0x50, 0xd4, 0x8d, - 0x45, 0x2c, 0xdf, 0x75, 0xe9, 0x68, 0x0b, 0x0f, 0x20, 0x05, 0xa3, 0x09, 0x86, 0x71, 0x29, 0x28, 0x59, 0xf1, 0xdf, - 0xb1, 0x11, 0x2b, 0x1f, 0x1f, 0xa5, 0xdb, 0xdb, 0x7d, 0x71, 0x6e, 0x41, 0x8c, 0xc3, 0x8c, 0xe8, 0x6a, 0x5c, 0x01, - 0x50, 0x9f, 0xce, 0x89, 0xeb, 0x81, 0x69, 0xc5, 0x9a, 0x2e, 0xc5, 0x3e, 0x39, 0xcc, 0x00, 0x14, 0xdc, 0x71, 0x8e, - 0xfc, 0xde, 0x9f, 0xfb, 0xe0, 0x1e, 0xfb, 0x7f, 0x72, 0x77, 0x94, 0xa0, 0xe9, 0xc8, 0x33, 0xc5, 0x39, 0x9d, 0xb1, - 0xb6, 0x3c, 0x8a, 0x8d, 0x06, 0x20, 0xf5, 0x00, 0x03, 0xd0, 0xe6, 0x20, 0x13, 0x2a, 0x0e, 0x42, 0x8e, 0x0a, 0x6c, - 0x1f, 0x37, 0x3f, 0xc3, 0x9d, 0xfd, 0x9c, 0x07, 0x60, 0xc1, 0xa8, 0xa7, 0xd7, 0xf0, 0xf4, 0x67, 0xfd, 0xf4, 0x13, - 0x0f, 0x7e, 0x29, 0x65, 0xe8, 0xbe, 0x36, 0xc5, 0x23, 0x35, 0x45, 0x29, 0x96, 0xc8, 0xa0, 0x21, 0x77, 0x97, 0x63, - 0x36, 0xcc, 0x2d, 0x81, 0x18, 0x4a, 0x74, 0x81, 0x8d, 0x16, 0x9d, 0x21, 0x71, 0x5d, 0x93, 0x14, 0x46, 0x2e, 0x81, - 0x89, 0x70, 0xc5, 0xb7, 0x48, 0x4f, 0xd6, 0x6d, 0xba, 0xf3, 0x5a, 0x5b, 0xb2, 0xef, 0xd8, 0x64, 0xca, 0xaf, 0x0e, - 0x48, 0xd1, 0x07, 0x32, 0x6d, 0x40, 0x9c, 0x9d, 0x37, 0x3b, 0xf1, 0x1e, 0xeb, 0xc4, 0x20, 0xd5, 0x0b, 0xc5, 0x62, - 0xb8, 0x57, 0xbd, 0xf7, 0x18, 0xa5, 0x34, 0x99, 0xc9, 0xab, 0xa1, 0xd7, 0x96, 0xe8, 0x6d, 0x6f, 0x03, 0x82, 0x1d, - 0xa3, 0x2b, 0x13, 0x5d, 0xcb, 0x52, 0xd0, 0x04, 0x20, 0x7a, 0x52, 0x67, 0x39, 0xe2, 0x38, 0xcc, 0x66, 0x83, 0xe2, - 0x21, 0x77, 0x57, 0x8e, 0x8a, 0x63, 0x62, 0x77, 0x99, 0xb0, 0x03, 0x98, 0x11, 0x97, 0x37, 0x5a, 0x22, 0x3a, 0x2c, - 0xfa, 0xeb, 0xf8, 0xf6, 0xb1, 0xc7, 0xb7, 0x5b, 0x2e, 0x68, 0x90, 0xda, 0x58, 0x8f, 0xab, 0xb1, 0xa0, 0x3e, 0x3c, - 0xd6, 0x54, 0x2a, 0xf3, 0xed, 0xed, 0xb2, 0x7e, 0x54, 0xab, 0x76, 0x70, 0xed, 0x34, 0xe5, 0x72, 0x31, 0x1b, 0x84, - 0x03, 0x11, 0x13, 0x28, 0xd0, 0xd2, 0xca, 0x8a, 0x01, 0x86, 0x94, 0xe5, 0x28, 0x9f, 0x42, 0xee, 0xc5, 0x65, 0xa9, - 0x53, 0x5f, 0x9e, 0xc9, 0xa0, 0x23, 0x9e, 0x7a, 0x92, 0xb1, 0x02, 0xac, 0xe6, 0x65, 0x5e, 0x42, 0x4b, 0x04, 0x98, - 0xbf, 0x50, 0x39, 0x34, 0xc2, 0x02, 0x89, 0x42, 0xc3, 0x2c, 0x51, 0xc6, 0x67, 0x1e, 0xc6, 0xa0, 0xed, 0x9f, 0xd5, - 0x62, 0x5f, 0xb9, 0x32, 0x3a, 0xf2, 0xa3, 0xa2, 0x1f, 0x50, 0xfd, 0x4c, 0x4a, 0xb0, 0x71, 0xf8, 0x11, 0xd8, 0xa8, - 0x72, 0x3c, 0x49, 0x10, 0x3e, 0x8f, 0x73, 0x46, 0x9e, 0xc2, 0xa6, 0x84, 0x59, 0x9a, 0xb6, 0x91, 0x6a, 0x17, 0x99, - 0x41, 0x28, 0x17, 0xe6, 0x1f, 0x1b, 0x67, 0x17, 0x69, 0xb8, 0xd4, 0x1a, 0xcc, 0x8f, 0x77, 0x26, 0x40, 0xe9, 0xf5, - 0x75, 0x2a, 0x7c, 0xdc, 0x88, 0xec, 0x0d, 0x5d, 0x31, 0xee, 0x29, 0xa4, 0x02, 0x27, 0x22, 0x8b, 0x87, 0xce, 0x50, - 0x68, 0x84, 0x43, 0x3a, 0x45, 0x2e, 0x5c, 0x63, 0xd3, 0x17, 0x3d, 0xed, 0x1b, 0x65, 0xa1, 0x93, 0x80, 0x10, 0x10, - 0xb8, 0x1b, 0xd6, 0x54, 0xd6, 0xcb, 0x82, 0x84, 0x4a, 0xd1, 0xcf, 0x01, 0xfc, 0xc3, 0x48, 0x52, 0x00, 0xec, 0x87, - 0x6a, 0xa4, 0x88, 0xb2, 0x2c, 0x70, 0x01, 0x68, 0xae, 0x03, 0x5c, 0x09, 0x5f, 0x18, 0xa8, 0x30, 0x3d, 0xcd, 0xca, - 0x4a, 0xa1, 0x44, 0x9e, 0xae, 0x48, 0x59, 0x23, 0x99, 0x7c, 0x8e, 0x0e, 0x9f, 0xf2, 0xae, 0xdf, 0x4a, 0x3c, 0x74, - 0xc1, 0x73, 0x58, 0x56, 0xf5, 0xfd, 0x4d, 0xc8, 0xc8, 0xb9, 0x06, 0x5d, 0x21, 0x85, 0xfe, 0x92, 0x93, 0xbc, 0xff, - 0xc6, 0xaf, 0x6a, 0xa9, 0x31, 0x94, 0x7d, 0x5c, 0xd5, 0x0c, 0xcb, 0xcb, 0x69, 0x15, 0xa6, 0x20, 0xe0, 0xe6, 0x2c, - 0x09, 0xe6, 0x52, 0x43, 0x80, 0x85, 0xed, 0x91, 0x56, 0x0a, 0x8a, 0x52, 0x87, 0x77, 0x9e, 0x83, 0x15, 0x60, 0x1c, - 0x6a, 0xa9, 0x64, 0x1a, 0x49, 0x7c, 0xa9, 0x44, 0x81, 0x29, 0x0f, 0x06, 0xe0, 0xa7, 0x2e, 0x9e, 0x74, 0x5d, 0xba, - 0x7e, 0x3c, 0xc1, 0xd4, 0x1e, 0x02, 0x3d, 0xf6, 0x36, 0xc0, 0x94, 0xa8, 0xeb, 0xb0, 0x9c, 0x38, 0x34, 0xad, 0x69, - 0x16, 0x30, 0x63, 0x9a, 0xa0, 0x25, 0x9b, 0x60, 0xcb, 0x15, 0x60, 0x1f, 0x89, 0xed, 0x59, 0xad, 0x80, 0xd0, 0x35, - 0x68, 0x60, 0xc8, 0x5d, 0x2a, 0xb4, 0x30, 0xeb, 0xb4, 0xa9, 0x08, 0xf7, 0x67, 0x8f, 0x49, 0x2b, 0x38, 0xf5, 0x52, - 0x1a, 0xf8, 0x20, 0x3e, 0x4d, 0x30, 0xf1, 0x05, 0xb1, 0x02, 0x3b, 0x38, 0x68, 0x2d, 0x36, 0x05, 0x4e, 0xc5, 0x45, - 0x4a, 0x61, 0x59, 0x51, 0x6a, 0xc3, 0x87, 0x14, 0xd9, 0xba, 0xcb, 0x23, 0xdd, 0x85, 0x58, 0x00, 0x3b, 0xfd, 0xc2, - 0xa1, 0x83, 0xac, 0x97, 0x01, 0x83, 0x73, 0xad, 0x71, 0x10, 0xf8, 0xed, 0xed, 0xa4, 0x5f, 0x66, 0x48, 0xb9, 0x25, - 0x56, 0x17, 0x90, 0xe3, 0x76, 0x58, 0xc0, 0x1d, 0x84, 0xa5, 0xb2, 0xc7, 0xf3, 0x72, 0x82, 0xcb, 0xa5, 0x2c, 0xe4, - 0xc5, 0x74, 0x2c, 0x9a, 0xcf, 0xad, 0x34, 0x9b, 0x8e, 0xb7, 0xe2, 0x83, 0x82, 0xbf, 0xe7, 0xc4, 0xd2, 0xaa, 0xa7, - 0xd4, 0x0a, 0x8f, 0x32, 0xb7, 0x64, 0x9d, 0x92, 0x5a, 0x6d, 0x37, 0x50, 0x8d, 0xf0, 0x34, 0x0d, 0x1b, 0x81, 0x10, - 0x13, 0x5c, 0xfc, 0x61, 0x91, 0x89, 0x69, 0x6f, 0x09, 0xa9, 0x23, 0xec, 0x1e, 0xca, 0x09, 0x6e, 0x6b, 0x9e, 0x7d, - 0x19, 0x4e, 0xd7, 0x33, 0xf7, 0xbe, 0xc1, 0xdc, 0x4f, 0x43, 0x66, 0x30, 0x7a, 0x2c, 0x13, 0x7e, 0x64, 0xec, 0xa3, - 0x50, 0x55, 0xcf, 0xce, 0xc2, 0x4a, 0x64, 0x89, 0x6f, 0xc6, 0x51, 0x87, 0x71, 0x2a, 0x5a, 0x13, 0x64, 0xd7, 0xd7, - 0xb9, 0xb9, 0x17, 0x28, 0x68, 0xea, 0xb1, 0x7a, 0x9c, 0xb6, 0x62, 0x67, 0x23, 0x12, 0xb9, 0xff, 0xa6, 0x16, 0x89, - 0xac, 0xf8, 0x1c, 0x47, 0x5a, 0x73, 0x90, 0xfb, 0xec, 0x6c, 0x79, 0x93, 0x0a, 0xdd, 0xa2, 0xd1, 0x36, 0xf6, 0xa8, - 0x3e, 0x90, 0xd4, 0x33, 0x2a, 0xb0, 0xaa, 0xb1, 0xb7, 0xb6, 0x5a, 0x22, 0xdd, 0x52, 0x29, 0x36, 0x0c, 0x69, 0x85, - 0xcc, 0x18, 0x05, 0x83, 0x92, 0x22, 0x03, 0x35, 0xca, 0xd7, 0x08, 0x86, 0x7d, 0x6a, 0x00, 0x8a, 0x73, 0x75, 0xf5, - 0xd3, 0x52, 0xb2, 0x85, 0x80, 0x04, 0x64, 0x13, 0x8a, 0x35, 0x62, 0x66, 0xe4, 0x93, 0x8f, 0xc0, 0x79, 0x3d, 0x8e, - 0x8e, 0x01, 0xc8, 0x60, 0xb1, 0xe9, 0xc1, 0xc4, 0xb6, 0x89, 0x28, 0xfa, 0x6c, 0xe0, 0x25, 0x00, 0x3b, 0xad, 0x42, - 0xa3, 0x1f, 0xaa, 0x14, 0x30, 0x64, 0x03, 0x37, 0xe0, 0x55, 0x58, 0x6e, 0xff, 0x25, 0xb4, 0x83, 0xc7, 0x17, 0xb2, - 0xf9, 0x26, 0xe6, 0x09, 0x56, 0xb1, 0x3b, 0xbf, 0xb2, 0xac, 0xc5, 0xb9, 0xd3, 0xe1, 0x42, 0xbd, 0xa2, 0x84, 0xa8, - 0x3d, 0xc0, 0xda, 0x97, 0x9c, 0x60, 0xc4, 0xe7, 0x37, 0x94, 0x75, 0xa8, 0xc6, 0x2d, 0xf7, 0x35, 0x5a, 0x84, 0xe9, - 0x32, 0x69, 0x0c, 0x4a, 0xd6, 0xfd, 0x64, 0xc4, 0xbd, 0x3c, 0x10, 0xb1, 0xe0, 0x0a, 0x47, 0x23, 0x6c, 0xbe, 0x80, - 0x24, 0x7d, 0xdb, 0xa7, 0x03, 0xf6, 0xcd, 0xc5, 0x5e, 0x40, 0x99, 0x8f, 0x15, 0xa9, 0x24, 0xa4, 0x34, 0xbb, 0x21, - 0x92, 0x84, 0xb5, 0x22, 0x4f, 0x9d, 0x0f, 0x1c, 0xed, 0x73, 0x2b, 0x89, 0x60, 0x04, 0x27, 0x71, 0xba, 0xf2, 0x70, - 0x51, 0x80, 0xab, 0xe8, 0x88, 0xe9, 0x9b, 0xa0, 0xfc, 0x06, 0xb9, 0xbd, 0x94, 0x5c, 0x5b, 0x68, 0x18, 0x9e, 0x21, - 0xc1, 0xaa, 0x48, 0x04, 0x3a, 0x0a, 0x80, 0xe3, 0x4a, 0xcf, 0x03, 0x4c, 0xf8, 0xda, 0xde, 0x04, 0x80, 0x44, 0x56, - 0x90, 0xb3, 0x14, 0xe8, 0x06, 0x2c, 0x57, 0xc7, 0xa9, 0x51, 0x91, 0xb8, 0xb8, 0x31, 0x5d, 0xdd, 0xd2, 0x9f, 0xa0, - 0xe5, 0x4c, 0x86, 0x98, 0x0e, 0x82, 0x80, 0x4c, 0x7d, 0xca, 0x9d, 0x9c, 0xa6, 0x13, 0xd6, 0xe7, 0xd4, 0xa9, 0x4d, - 0xdd, 0xe1, 0xd4, 0xcd, 0x93, 0xd4, 0x62, 0x75, 0xda, 0x94, 0x12, 0x31, 0x29, 0x31, 0x8f, 0x65, 0x2a, 0xb6, 0x12, - 0x77, 0x6e, 0x7d, 0xa3, 0x85, 0xb4, 0xd1, 0x8e, 0x65, 0x0e, 0xb6, 0x96, 0xf7, 0x42, 0xb4, 0xbf, 0x24, 0xc2, 0xb3, - 0x12, 0x19, 0x6b, 0x3e, 0xe3, 0x8e, 0x89, 0x60, 0xf5, 0x60, 0x2a, 0xf2, 0x0f, 0x8e, 0x4e, 0xb3, 0x37, 0xe8, 0x41, - 0xea, 0x0d, 0x24, 0x66, 0x4d, 0x7c, 0xe7, 0xd2, 0x50, 0x47, 0x08, 0x54, 0x46, 0xb5, 0x4c, 0xc7, 0x89, 0xa5, 0xe2, - 0x92, 0x7c, 0xf5, 0x5e, 0x1f, 0xe7, 0x1b, 0xdf, 0x17, 0x56, 0x23, 0x88, 0xc1, 0x5b, 0x28, 0xfa, 0x9e, 0x14, 0xe1, - 0x39, 0x2c, 0xcf, 0xf6, 0x76, 0xa7, 0xd8, 0x63, 0x55, 0x88, 0xa4, 0x82, 0x31, 0xc6, 0x8c, 0x62, 0xdc, 0x13, 0x35, - 0xb5, 0x88, 0xc4, 0x96, 0xad, 0xc3, 0x02, 0x0f, 0x00, 0xa0, 0xa5, 0x29, 0xbd, 0xcc, 0xb6, 0xea, 0x3c, 0x97, 0xf0, - 0x31, 0xf2, 0x50, 0x64, 0xe3, 0xf7, 0x6b, 0x32, 0x50, 0x10, 0xee, 0x8d, 0x96, 0x87, 0x89, 0x71, 0xb0, 0x8a, 0x42, - 0x16, 0xe8, 0x0d, 0xda, 0xa9, 0x12, 0xa1, 0xb8, 0x39, 0x59, 0x87, 0x1b, 0x4e, 0x2a, 0xd8, 0x42, 0x25, 0x2c, 0x95, - 0x16, 0xf8, 0xd5, 0x46, 0x58, 0x3c, 0x65, 0xdc, 0x7f, 0x53, 0xe1, 0x0c, 0xfa, 0x83, 0x7b, 0xcb, 0x8c, 0xfa, 0x7e, - 0xe9, 0x44, 0xa6, 0x02, 0x13, 0x37, 0xb3, 0xd4, 0x7e, 0xbf, 0xac, 0xd2, 0x7e, 0x5e, 0x2e, 0xf7, 0x39, 0x69, 0xbe, - 0xd6, 0x1d, 0x34, 0x9f, 0x0c, 0xf7, 0x2b, 0xe5, 0x87, 0x16, 0x46, 0x4d, 0xf9, 0xd5, 0x97, 0x34, 0xcc, 0x3d, 0x15, - 0xde, 0xea, 0xb6, 0x51, 0xe8, 0xa2, 0x3e, 0x07, 0x43, 0x48, 0x7f, 0x05, 0xd7, 0xd0, 0xe0, 0x41, 0x91, 0x2c, 0x16, - 0x6b, 0x17, 0xc4, 0xf5, 0x31, 0xa7, 0xda, 0xa1, 0x8c, 0x31, 0xe2, 0x69, 0xc9, 0x41, 0x92, 0xc1, 0xc1, 0xf8, 0x0d, - 0x0c, 0x88, 0x49, 0x49, 0x48, 0x87, 0xd0, 0x59, 0x99, 0x89, 0xa8, 0xdc, 0xc5, 0xdb, 0x8d, 0xcb, 0x9a, 0x42, 0x11, - 0x76, 0x82, 0x99, 0x4a, 0xa9, 0x20, 0x90, 0x26, 0xdf, 0x46, 0xab, 0x16, 0x0c, 0x05, 0xd1, 0x60, 0x28, 0x20, 0x0f, - 0xd3, 0x55, 0xc2, 0x8d, 0x8f, 0xe2, 0xe0, 0x79, 0x85, 0x1a, 0xf1, 0x52, 0x83, 0xaf, 0x61, 0xf3, 0xd7, 0x44, 0x49, - 0x11, 0x72, 0x11, 0x7b, 0x05, 0x9f, 0x08, 0xd9, 0x94, 0x87, 0x39, 0xd0, 0x0f, 0xed, 0xca, 0x4e, 0xb6, 0x97, 0x57, - 0x2e, 0x2d, 0x1a, 0x5b, 0x89, 0x9a, 0xb5, 0x38, 0x8a, 0xb7, 0xb3, 0x3e, 0x4c, 0x4d, 0x09, 0x04, 0xa4, 0xa9, 0x9c, - 0xa4, 0x9a, 0xf7, 0x28, 0xeb, 0x03, 0x48, 0xb0, 0xfb, 0x09, 0x2c, 0xf4, 0x9b, 0x12, 0x13, 0x2c, 0xaa, 0xc6, 0x6e, - 0x53, 0xd0, 0x9a, 0x53, 0xd2, 0x7c, 0x53, 0x84, 0x70, 0x5b, 0x59, 0xcf, 0x98, 0x1d, 0x60, 0xdb, 0xee, 0x76, 0x7e, - 0x94, 0x6d, 0xb7, 0xfa, 0x86, 0xe0, 0xc2, 0xe3, 0xff, 0xa4, 0xc4, 0x34, 0x90, 0x42, 0xea, 0xc6, 0x4f, 0xa8, 0xc3, - 0x3e, 0x91, 0x3a, 0x11, 0x03, 0x9a, 0xab, 0xb1, 0xe8, 0xdc, 0x6b, 0x8e, 0x92, 0xcb, 0xaa, 0xda, 0xd5, 0x12, 0x34, - 0x74, 0x23, 0x19, 0x13, 0xc5, 0x3c, 0x27, 0x00, 0x46, 0xb1, 0xf9, 0x73, 0xae, 0x93, 0xbc, 0x7f, 0x59, 0x99, 0xda, - 0xed, 0xfb, 0x7e, 0x94, 0x9f, 0xd1, 0x91, 0x8a, 0xca, 0xe6, 0x24, 0xe6, 0xdf, 0x95, 0x60, 0x1a, 0x13, 0x1f, 0xe9, - 0xb9, 0xfa, 0xa1, 0x00, 0x5f, 0xd9, 0x50, 0x6a, 0xb6, 0xd7, 0xbf, 0x75, 0xb6, 0x07, 0x72, 0x36, 0xc1, 0x02, 0x0b, - 0x74, 0x59, 0x83, 0x2f, 0x60, 0x19, 0xdc, 0x91, 0x7e, 0x0a, 0xbe, 0x9f, 0xd6, 0xc1, 0x67, 0xec, 0x7f, 0x01, 0x68, - 0x55, 0x60, 0x40, 0xf9, 0x70, 0xd1, 0xb0, 0x12, 0xe2, 0x12, 0x15, 0x66, 0x15, 0xe7, 0x8f, 0xeb, 0xbc, 0x6e, 0x5a, - 0x96, 0x18, 0x94, 0x9f, 0xba, 0x86, 0x1b, 0xdf, 0x59, 0xc8, 0x1f, 0xdf, 0x7f, 0x09, 0xba, 0x9d, 0x48, 0xbb, 0xb5, - 0x55, 0x6c, 0x90, 0x85, 0x86, 0xf7, 0xc2, 0xa6, 0xd0, 0x16, 0x2f, 0x02, 0x14, 0xea, 0x3b, 0x16, 0xe3, 0x6d, 0x11, - 0x2a, 0xc3, 0x2f, 0x58, 0x30, 0x05, 0x0c, 0xc1, 0x63, 0xa7, 0x32, 0xf9, 0x1d, 0x36, 0x9a, 0x62, 0xd7, 0x42, 0x18, - 0x7c, 0x39, 0xa8, 0x4a, 0xc9, 0x8b, 0x75, 0xb2, 0xbd, 0x38, 0x87, 0xef, 0xaf, 0xe3, 0x02, 0xa8, 0x83, 0xe8, 0x6b, - 0x2a, 0x8b, 0x0d, 0xe4, 0xe2, 0xa6, 0xac, 0xf5, 0x8a, 0x86, 0xc3, 0x1b, 0xbb, 0xf0, 0xba, 0x02, 0x1f, 0x47, 0xe9, - 0x30, 0x11, 0x93, 0x98, 0x49, 0x95, 0x2b, 0x72, 0x6d, 0x74, 0x2f, 0x6d, 0xd1, 0xbc, 0x14, 0x12, 0xbc, 0x22, 0xf0, - 0x82, 0xd0, 0x57, 0xfa, 0x72, 0xb5, 0x81, 0x82, 0x47, 0xed, 0x8b, 0x8b, 0x60, 0x62, 0xe2, 0x71, 0x43, 0x6a, 0xfa, - 0x75, 0x38, 0xb5, 0xb2, 0x58, 0x72, 0xf8, 0x75, 0xce, 0xd8, 0x82, 0x02, 0x20, 0x3e, 0x79, 0xb4, 0xde, 0x4d, 0x7a, - 0xa3, 0xb4, 0x83, 0xd2, 0x08, 0xf1, 0x5d, 0x85, 0xaf, 0x3b, 0x57, 0x7c, 0xe5, 0xaa, 0x7b, 0x5f, 0x57, 0xdc, 0xb8, - 0x60, 0xf4, 0x92, 0x4f, 0x92, 0x85, 0x6b, 0x37, 0x74, 0x57, 0xe7, 0x3b, 0xef, 0x0b, 0x99, 0xb7, 0x70, 0x05, 0x76, - 0xfe, 0x15, 0x77, 0x5e, 0x7a, 0x1f, 0x8c, 0x13, 0xe5, 0xef, 0xcd, 0x23, 0x5e, 0x39, 0xcc, 0xaa, 0x93, 0xe4, 0xef, - 0x7b, 0xdf, 0x07, 0xeb, 0x5b, 0x1a, 0x27, 0xc8, 0x6d, 0x75, 0x82, 0x4c, 0x94, 0x1b, 0xe9, 0x0d, 0xb7, 0x7f, 0x57, - 0x81, 0x20, 0x4e, 0xc5, 0xf4, 0x51, 0x39, 0xae, 0x1f, 0x2d, 0x50, 0xa9, 0x88, 0xf8, 0x5c, 0xe5, 0xae, 0xac, 0x4d, - 0x0d, 0xf5, 0x98, 0x4e, 0x66, 0xa1, 0x69, 0x56, 0xe4, 0x52, 0x2e, 0x7a, 0x8c, 0x5c, 0xb3, 0x53, 0x6d, 0x7e, 0x77, - 0xed, 0x21, 0x1d, 0xc7, 0xfb, 0x9e, 0xb5, 0x5a, 0x70, 0xbf, 0xab, 0x28, 0xbc, 0xeb, 0xc5, 0x46, 0x2a, 0x43, 0xcd, - 0x7a, 0x14, 0x7d, 0x1c, 0x77, 0x31, 0x97, 0x47, 0xd9, 0x9f, 0x35, 0x00, 0x4c, 0x47, 0x58, 0x74, 0x37, 0x3d, 0x63, - 0x4f, 0xa0, 0xa7, 0x27, 0x32, 0x48, 0xf4, 0x56, 0xe7, 0xab, 0x56, 0x89, 0xa5, 0x2b, 0x08, 0xec, 0xde, 0x90, 0xb1, - 0x2a, 0x69, 0xb7, 0x5c, 0xbf, 0x9c, 0xe7, 0xf3, 0x9c, 0x2f, 0xe5, 0xf9, 0xd4, 0x2c, 0xba, 0x8d, 0xa6, 0x7b, 0x73, - 0x6a, 0xa8, 0x98, 0x6b, 0x75, 0x93, 0xdf, 0x30, 0x5d, 0x0b, 0x43, 0x2d, 0x82, 0xcc, 0x6a, 0x57, 0xbd, 0x28, 0xcb, - 0x51, 0x3d, 0x93, 0x63, 0x24, 0x7c, 0x53, 0xe9, 0x0e, 0xd1, 0x0d, 0x53, 0x35, 0xd3, 0x77, 0x0b, 0xdb, 0x42, 0xb6, - 0x79, 0x79, 0x35, 0xcc, 0x81, 0xd2, 0x72, 0x7f, 0x99, 0x30, 0x7c, 0x77, 0x7d, 0xfd, 0x9d, 0x90, 0x53, 0x55, 0x47, - 0x6f, 0xfe, 0x5a, 0xf7, 0x0c, 0x46, 0xa5, 0x72, 0x22, 0x4e, 0xf9, 0xea, 0xc1, 0x17, 0x77, 0xaf, 0x80, 0xe5, 0x14, - 0xb0, 0x3b, 0xe5, 0xce, 0xc2, 0x50, 0xd5, 0x06, 0xfe, 0x62, 0xf5, 0x60, 0xab, 0xf6, 0xf0, 0x17, 0xbd, 0x2f, 0x82, - 0x1b, 0x1b, 0x1b, 0xdb, 0x78, 0xb7, 0x96, 0x08, 0xf2, 0x16, 0x0f, 0xf4, 0xf1, 0xea, 0xa3, 0xa0, 0xe5, 0x0a, 0xb1, - 0xcd, 0x7a, 0x0e, 0x85, 0xad, 0x41, 0xbe, 0x49, 0x99, 0x34, 0x98, 0x15, 0x3c, 0x9b, 0xc8, 0x19, 0x0a, 0x79, 0xcd, - 0xc7, 0x41, 0xdb, 0x11, 0xfe, 0x0f, 0x9c, 0xda, 0xf1, 0xf2, 0xfc, 0x13, 0xf4, 0x01, 0x4f, 0x57, 0x4a, 0x53, 0x8a, - 0x53, 0xaa, 0xa0, 0xce, 0x72, 0x9d, 0x07, 0x23, 0xc5, 0xc5, 0x18, 0x16, 0x17, 0x5c, 0x96, 0x1b, 0x67, 0x23, 0xa7, - 0xbf, 0xc4, 0xab, 0x8b, 0x74, 0xf9, 0x48, 0x64, 0xab, 0x96, 0xde, 0x2b, 0x7d, 0xba, 0x6d, 0x4f, 0x18, 0x1f, 0x67, - 0x43, 0x3a, 0x98, 0xf1, 0x71, 0x22, 0xbc, 0x3e, 0x31, 0xd4, 0x77, 0x8b, 0xc0, 0x74, 0x73, 0x6c, 0xf2, 0xc3, 0xf1, - 0x7a, 0xb3, 0x59, 0xe3, 0xf6, 0xde, 0x39, 0x9f, 0x9c, 0x79, 0x89, 0x11, 0x95, 0xb9, 0x86, 0x07, 0xb4, 0x42, 0xbc, - 0x78, 0xcf, 0x04, 0xc6, 0x65, 0x57, 0x24, 0xb5, 0xdd, 0x40, 0xe0, 0x62, 0x8f, 0x62, 0x96, 0x0c, 0x6d, 0x0f, 0xca, - 0x03, 0x7d, 0x31, 0x9a, 0x6e, 0x01, 0xd3, 0xf2, 0xda, 0xd9, 0x45, 0x6a, 0x7b, 0xd5, 0x54, 0x01, 0xcc, 0x92, 0xe5, - 0xf1, 0x19, 0xb2, 0xee, 0x57, 0xd0, 0x45, 0x0c, 0x18, 0x1b, 0x57, 0xe6, 0xdc, 0xf9, 0xaa, 0x15, 0xf1, 0x8d, 0x26, - 0xd2, 0xa4, 0x3e, 0xa2, 0xbe, 0xfd, 0xb0, 0x56, 0x57, 0x39, 0x48, 0xe0, 0x1e, 0x79, 0x77, 0xc4, 0xa5, 0xa3, 0xcf, - 0x2c, 0x36, 0xab, 0xf4, 0x2d, 0x75, 0x2d, 0x6e, 0x31, 0xec, 0x15, 0xf7, 0xc0, 0xfe, 0xc0, 0xb8, 0x45, 0x2c, 0xe2, - 0xed, 0xac, 0x96, 0xc2, 0xba, 0x30, 0x47, 0x8e, 0xb1, 0xf6, 0xe0, 0x15, 0xaf, 0xd6, 0x0c, 0xcc, 0x30, 0xe3, 0x8c, - 0xe4, 0x8d, 0x71, 0xaf, 0x6a, 0xd3, 0x91, 0xab, 0x00, 0xa2, 0x6f, 0x4e, 0x97, 0xe4, 0xf0, 0x4a, 0x96, 0xab, 0xce, - 0x90, 0x7f, 0x86, 0x75, 0xd6, 0x8b, 0x13, 0x70, 0x93, 0xa6, 0xac, 0xc4, 0xc4, 0x14, 0x71, 0xb9, 0x59, 0xc6, 0x3c, - 0x4d, 0x9f, 0x45, 0x3b, 0x38, 0x85, 0x91, 0xc0, 0x11, 0xfb, 0xc6, 0x32, 0x2c, 0x26, 0x6c, 0xc4, 0x44, 0x1a, 0x95, - 0x52, 0xc2, 0x7a, 0x72, 0xa9, 0x25, 0x7f, 0x99, 0xcb, 0xab, 0x2f, 0xb7, 0x09, 0x0e, 0x28, 0x6a, 0x60, 0x39, 0x34, - 0x8e, 0x5b, 0x06, 0x12, 0xb1, 0x18, 0x10, 0xa3, 0x56, 0xe5, 0x72, 0x32, 0xaa, 0x93, 0xfa, 0x0a, 0xb9, 0x50, 0x91, - 0x07, 0xb7, 0x04, 0x4a, 0xfe, 0x02, 0x53, 0x07, 0xd3, 0x52, 0xbb, 0x69, 0xb1, 0x49, 0xf2, 0x8e, 0x19, 0x90, 0x5c, - 0x7d, 0x0d, 0x0f, 0x8d, 0x5f, 0x86, 0x37, 0x14, 0x3d, 0x1d, 0x23, 0xe4, 0xb4, 0x34, 0xe6, 0xd2, 0x7f, 0x23, 0xcf, - 0xbe, 0x24, 0x60, 0x3f, 0x83, 0x98, 0x32, 0x70, 0x89, 0x8d, 0x0b, 0x92, 0xf2, 0x5a, 0x9e, 0xb2, 0xfb, 0x16, 0x94, - 0xef, 0x92, 0x49, 0x57, 0xa9, 0xac, 0x35, 0x56, 0xdd, 0xcf, 0x33, 0x96, 0x5f, 0x1d, 0x30, 0xcc, 0x4d, 0x46, 0x83, - 0x6c, 0xc9, 0xcc, 0xa6, 0xfc, 0x6a, 0xef, 0xc6, 0xb7, 0x3c, 0x94, 0x74, 0xa8, 0x56, 0xe9, 0xe6, 0xa5, 0x1b, 0x8e, - 0xf1, 0xc2, 0x0d, 0xc7, 0xb8, 0x43, 0xe7, 0xca, 0x15, 0xa9, 0x75, 0xfe, 0xfb, 0x52, 0xf8, 0x49, 0xec, 0xb5, 0xbe, - 0xde, 0x75, 0xfd, 0x95, 0xe9, 0xe9, 0x37, 0xa0, 0x6a, 0x64, 0x09, 0xdd, 0x84, 0x2a, 0x26, 0x23, 0x51, 0x62, 0xba, - 0x4a, 0x79, 0xd4, 0xd7, 0x88, 0x0b, 0x10, 0x37, 0x94, 0xbf, 0xf8, 0x97, 0xf0, 0xe2, 0x24, 0x40, 0x23, 0x6a, 0x3e, - 0xca, 0x52, 0xde, 0x18, 0x45, 0x93, 0x38, 0xb9, 0x0a, 0x66, 0x71, 0x63, 0x92, 0xa5, 0x59, 0x31, 0x05, 0xae, 0xf4, - 0x8a, 0x2b, 0xb0, 0xe1, 0x27, 0x8d, 0x59, 0xec, 0xbd, 0x64, 0xc9, 0x39, 0xe3, 0xf1, 0x20, 0xf2, 0xec, 0xfd, 0x1c, - 0xc4, 0x83, 0xf5, 0x36, 0xca, 0xf3, 0xec, 0xc2, 0xf6, 0x3e, 0x64, 0xa7, 0xc0, 0xb4, 0xde, 0xbb, 0xcb, 0xab, 0x33, - 0x96, 0x7a, 0x1f, 0x4f, 0x67, 0x29, 0x9f, 0x79, 0x45, 0x94, 0x16, 0x8d, 0x82, 0xe5, 0xf1, 0x08, 0xd4, 0x44, 0x92, - 0xe5, 0x0d, 0xcc, 0x7f, 0x9e, 0xb0, 0x20, 0x89, 0xcf, 0xc6, 0xdc, 0x1a, 0x46, 0xf9, 0xa7, 0x4e, 0xa3, 0x31, 0xcd, - 0xe3, 0x49, 0x94, 0x5f, 0x35, 0xa8, 0x45, 0x70, 0xaf, 0xb9, 0x1b, 0x7d, 0x36, 0x7a, 0xd0, 0xe1, 0x39, 0xf4, 0x8d, - 0x91, 0x8a, 0x01, 0x08, 0x1f, 0x6b, 0xf7, 0x61, 0x73, 0x52, 0x6c, 0x88, 0x13, 0xa5, 0x28, 0xe5, 0xe5, 0x89, 0x77, - 0x01, 0xb6, 0xed, 0x89, 0x7f, 0xca, 0x53, 0x0f, 0x7c, 0x39, 0x9e, 0xa5, 0xf3, 0xc1, 0x2c, 0x2f, 0x60, 0x80, 0x69, - 0x16, 0xa7, 0x9c, 0xe5, 0x9d, 0xd3, 0x2c, 0x07, 0xb2, 0x35, 0xf2, 0x68, 0x18, 0xcf, 0x8a, 0xe0, 0xc1, 0xf4, 0xb2, - 0x83, 0xb6, 0xc2, 0x59, 0x9e, 0xcd, 0xd2, 0xa1, 0x9c, 0x2b, 0x4e, 0x61, 0x63, 0xc4, 0xdc, 0xac, 0xa0, 0x37, 0xa1, - 0x00, 0x7c, 0x29, 0x8b, 0xf2, 0xc6, 0x19, 0x76, 0x46, 0x43, 0xbf, 0x39, 0x64, 0x67, 0x5e, 0x7e, 0x76, 0x1a, 0x39, - 0xad, 0xf6, 0x63, 0x4f, 0xfd, 0xf9, 0x0f, 0x5d, 0x30, 0xdc, 0x57, 0x16, 0xb7, 0x9a, 0xcd, 0xbf, 0x71, 0x3b, 0x0b, - 0xb3, 0x10, 0x40, 0x41, 0x6b, 0x7a, 0x69, 0x15, 0x59, 0x02, 0xeb, 0xb3, 0xaa, 0x67, 0x67, 0x0a, 0x7e, 0x53, 0x9c, - 0x9e, 0x05, 0xed, 0xe9, 0x65, 0x89, 0xd8, 0x05, 0x22, 0x21, 0x53, 0x22, 0x29, 0x9f, 0xe6, 0xbf, 0x15, 0xe2, 0x27, - 0xab, 0x21, 0x6e, 0x2b, 0x88, 0x2b, 0xaa, 0x37, 0x86, 0xb0, 0x0f, 0x88, 0xfc, 0xad, 0x42, 0x00, 0x32, 0x06, 0x27, - 0x30, 0x57, 0x70, 0xd0, 0xc3, 0x6f, 0x06, 0xa3, 0xbd, 0x1a, 0x8c, 0x27, 0xb7, 0x81, 0x91, 0xa7, 0xc3, 0x79, 0x7d, - 0x5d, 0x5b, 0xe0, 0x9c, 0x76, 0xc6, 0x0c, 0xf9, 0x29, 0x68, 0xe3, 0xf7, 0x8b, 0x78, 0xc8, 0xc7, 0xe2, 0x2b, 0xb1, - 0xf3, 0x85, 0xa8, 0x7b, 0xd8, 0x6c, 0x8a, 0xe7, 0x02, 0x14, 0x5a, 0xd0, 0xf2, 0xb1, 0x01, 0x30, 0xd1, 0xe7, 0xeb, - 0x5e, 0x62, 0xf3, 0xed, 0xad, 0x6f, 0xaa, 0xf1, 0xb8, 0xca, 0x1b, 0x14, 0x2a, 0x42, 0xbd, 0xb3, 0x05, 0x33, 0xde, - 0x8a, 0x6e, 0x4b, 0x1f, 0x54, 0xf5, 0xbe, 0xe5, 0xa4, 0xf5, 0x02, 0xe6, 0x99, 0xb9, 0x40, 0x9d, 0xac, 0x8b, 0x21, - 0xa9, 0x46, 0xc3, 0x05, 0xbd, 0xc1, 0x31, 0x84, 0x44, 0x07, 0x82, 0x4e, 0xd1, 0xcb, 0xe9, 0x9d, 0x1a, 0xa9, 0x1b, - 0xe4, 0x4e, 0xea, 0xc2, 0x96, 0x4f, 0xb5, 0x5c, 0x2f, 0xb6, 0xb6, 0xc0, 0xcb, 0xfe, 0x9c, 0xcb, 0x06, 0x20, 0xbd, - 0x2b, 0x49, 0x6b, 0xbc, 0x87, 0x44, 0xb9, 0x7c, 0xd9, 0x80, 0x28, 0x07, 0xbe, 0x3e, 0x1f, 0xa3, 0xdf, 0xad, 0xaf, - 0xae, 0x1b, 0x29, 0x35, 0x3b, 0xb6, 0xdb, 0xe3, 0x3a, 0x2b, 0x0b, 0xb3, 0xcf, 0x78, 0x89, 0xa3, 0x7c, 0xc9, 0x43, - 0x1c, 0xd1, 0x7b, 0x15, 0x0a, 0x37, 0x4d, 0x39, 0x69, 0xa3, 0xbb, 0x3a, 0x69, 0xf0, 0x35, 0xa6, 0xcc, 0x67, 0x15, - 0x27, 0x07, 0x37, 0xe6, 0x78, 0x20, 0xae, 0x20, 0x16, 0x55, 0x96, 0x7d, 0x44, 0xd0, 0x0b, 0xbf, 0x0b, 0x94, 0x14, - 0x46, 0x2e, 0xbf, 0xe2, 0xbf, 0xc3, 0xe3, 0x70, 0x34, 0xfa, 0x45, 0x36, 0xcb, 0x07, 0x78, 0x39, 0x60, 0x45, 0x28, - 0xc2, 0x26, 0x4b, 0xc0, 0xf6, 0xb8, 0x56, 0x40, 0x0c, 0xf3, 0x2c, 0xcc, 0xb7, 0x2f, 0x30, 0x3a, 0x9d, 0x11, 0x97, - 0x1f, 0x64, 0xf8, 0x45, 0xa1, 0x84, 0x3a, 0x75, 0x48, 0x89, 0x78, 0x74, 0x31, 0xd4, 0x9f, 0xa5, 0x31, 0x88, 0xe0, - 0xe3, 0x78, 0x48, 0x17, 0x62, 0xe2, 0x21, 0x9d, 0x90, 0x34, 0x28, 0x23, 0x0a, 0x43, 0xee, 0x50, 0x20, 0x17, 0x06, - 0xbf, 0xcb, 0x0c, 0x1b, 0xbb, 0x61, 0xe3, 0x29, 0x87, 0xa1, 0xc3, 0x87, 0xd9, 0x24, 0x8a, 0xd3, 0x00, 0x5f, 0x5c, - 0xe2, 0xe9, 0x11, 0x03, 0xec, 0xe2, 0xc1, 0xa7, 0x5a, 0xa3, 0x96, 0xeb, 0xff, 0x04, 0x02, 0x8e, 0xfa, 0x63, 0x32, - 0x0b, 0x91, 0x55, 0x10, 0x31, 0x54, 0x64, 0xde, 0x57, 0x7a, 0xde, 0x33, 0xab, 0x55, 0xcc, 0xb4, 0xbe, 0x0e, 0xcd, - 0x85, 0xe5, 0xd2, 0x67, 0xd8, 0xf5, 0x52, 0x10, 0xac, 0x5c, 0xe7, 0xd1, 0x53, 0x10, 0x67, 0x8f, 0xd1, 0x47, 0xaf, - 0xd1, 0x0a, 0x5a, 0xda, 0x2f, 0xaf, 0x5d, 0xb5, 0x15, 0x89, 0x3a, 0xf2, 0xba, 0x26, 0xe1, 0xa1, 0xbf, 0x0b, 0x5c, - 0xab, 0x67, 0x8d, 0xaf, 0x27, 0x37, 0x1d, 0x46, 0xa7, 0xce, 0x52, 0xa7, 0x06, 0x04, 0x1d, 0x74, 0xac, 0x99, 0xca, - 0x2d, 0x2b, 0xbc, 0xb5, 0xf1, 0x67, 0x0b, 0xcd, 0x89, 0xaf, 0x1e, 0x90, 0x33, 0xd2, 0x2b, 0x9e, 0x56, 0xf0, 0x5d, - 0x29, 0x09, 0xb2, 0x78, 0x21, 0x7f, 0xa1, 0x99, 0x00, 0xe5, 0x4a, 0x1f, 0x64, 0x2f, 0xd4, 0x8a, 0x47, 0x26, 0x22, - 0xde, 0xab, 0x9b, 0x50, 0xd6, 0xd8, 0x32, 0x5c, 0xe8, 0x8b, 0x16, 0x5c, 0xc1, 0x8f, 0x06, 0xd3, 0x88, 0xe1, 0xbd, - 0x94, 0x93, 0xcd, 0xf9, 0x97, 0xbc, 0xdc, 0xd9, 0x9c, 0xab, 0x86, 0xe2, 0x7b, 0x3c, 0xc4, 0x4f, 0x06, 0xf2, 0x6b, - 0x2e, 0xac, 0xc7, 0xc0, 0x7e, 0xff, 0xee, 0xe0, 0xd0, 0xf6, 0x4e, 0xb3, 0xe1, 0x55, 0x60, 0xc3, 0xee, 0x64, 0x76, - 0xe9, 0xfa, 0x7c, 0xcc, 0x52, 0x47, 0xb1, 0x78, 0x96, 0x30, 0x90, 0x08, 0x67, 0xe2, 0xb2, 0xe3, 0xa2, 0xe7, 0x3b, - 0x3c, 0xd9, 0xa3, 0xb7, 0x21, 0x75, 0xf7, 0xb8, 0x78, 0x51, 0x18, 0xcf, 0xf1, 0x6b, 0x17, 0x63, 0xff, 0x7b, 0x3b, - 0xf0, 0x05, 0x1f, 0x0e, 0x70, 0xcf, 0xd0, 0xd3, 0xe6, 0x7c, 0x89, 0x93, 0x7a, 0x38, 0xc4, 0xb8, 0x2b, 0x50, 0x28, - 0xa8, 0xd5, 0x49, 0x30, 0x3c, 0x39, 0x29, 0xe1, 0x2b, 0x8c, 0xb5, 0xa3, 0xc6, 0x45, 0x08, 0x55, 0x7f, 0xcd, 0x5d, - 0xf2, 0x75, 0x3b, 0x38, 0x04, 0xce, 0x3b, 0xc4, 0x06, 0xc4, 0x5d, 0xd8, 0x7b, 0xa8, 0x4b, 0x68, 0xd3, 0x8a, 0xa2, - 0x75, 0x10, 0x88, 0x86, 0x15, 0xd3, 0x8b, 0x10, 0x61, 0xb5, 0xba, 0x0a, 0xa4, 0xa1, 0x09, 0xdd, 0x89, 0x8b, 0x9f, - 0x04, 0x19, 0x7c, 0x12, 0x1d, 0x4e, 0xcc, 0x37, 0x84, 0x88, 0xcb, 0xfc, 0x9a, 0x5a, 0x47, 0x7f, 0x01, 0xdb, 0xc3, - 0xbb, 0x38, 0xa1, 0x96, 0x4a, 0x1d, 0xa1, 0x9d, 0x84, 0x6a, 0xbb, 0xa9, 0xec, 0x0e, 0xd0, 0xfd, 0x49, 0x34, 0x2d, - 0x58, 0xa0, 0xbe, 0x48, 0xcd, 0x84, 0x0a, 0x6e, 0xd9, 0x14, 0x90, 0x79, 0x31, 0xcf, 0xd0, 0x60, 0x58, 0xb6, 0x53, - 0x40, 0xf4, 0x39, 0x8d, 0xc6, 0xa0, 0x71, 0x7a, 0xe6, 0x96, 0x7c, 0x3c, 0x37, 0xf5, 0xda, 0x23, 0xd0, 0x6b, 0x98, - 0x93, 0xd7, 0x00, 0x4f, 0xed, 0x2c, 0x0d, 0x12, 0x36, 0xe2, 0x25, 0xc7, 0x4b, 0x5f, 0x73, 0x65, 0x48, 0xf8, 0xed, - 0x87, 0xa0, 0xeb, 0x2c, 0x1f, 0xff, 0xbd, 0x79, 0x62, 0xe8, 0x18, 0xa4, 0xa0, 0x9b, 0x28, 0x0b, 0x14, 0x33, 0xec, - 0x01, 0x5c, 0xf3, 0x79, 0x6e, 0x4c, 0x34, 0x60, 0x68, 0x64, 0x95, 0x1c, 0x64, 0xf2, 0xd8, 0xe3, 0xb9, 0xd9, 0x2e, - 0x75, 0xe7, 0x4b, 0x18, 0x2c, 0xeb, 0xfa, 0x5d, 0xb7, 0x2c, 0xc8, 0x64, 0x5d, 0x6e, 0xac, 0x0c, 0xa6, 0xfa, 0xd3, - 0x12, 0xf9, 0x0c, 0xd3, 0xae, 0x14, 0xc1, 0xd2, 0xb9, 0xe8, 0x71, 0x17, 0x62, 0xd6, 0x8c, 0x4e, 0xcf, 0xec, 0xe1, - 0x96, 0x71, 0x3a, 0x9d, 0xf1, 0x23, 0x0a, 0xd4, 0xe6, 0x78, 0x9d, 0xa0, 0x3f, 0x17, 0x73, 0x83, 0x17, 0x3c, 0x70, - 0x10, 0x00, 0xab, 0x61, 0x3d, 0x01, 0x6a, 0xba, 0xca, 0xf0, 0xf0, 0x1f, 0x23, 0x71, 0x4b, 0x9f, 0x5a, 0xaf, 0xa0, - 0xd2, 0x09, 0x58, 0xdd, 0x1d, 0xce, 0x9d, 0xa3, 0x37, 0x8e, 0xdb, 0xf7, 0x5e, 0x19, 0x2f, 0x2f, 0xb1, 0xd5, 0x1e, - 0xb0, 0x3d, 0xa4, 0xf7, 0xca, 0x26, 0x26, 0x93, 0x53, 0xb3, 0x57, 0x21, 0x36, 0x7c, 0xeb, 0xd8, 0xac, 0x98, 0x36, - 0x84, 0x48, 0x6a, 0x10, 0x33, 0xda, 0xd8, 0x55, 0x05, 0x56, 0xbf, 0xe2, 0x73, 0x92, 0x36, 0x5c, 0xbf, 0x29, 0xe4, - 0x88, 0xf7, 0xcd, 0x5b, 0x2d, 0xb5, 0x80, 0x3a, 0xd4, 0xb9, 0x86, 0xe4, 0x83, 0x47, 0xf9, 0xd6, 0x1b, 0x25, 0x37, - 0x4e, 0xf6, 0xeb, 0x92, 0x0c, 0xf6, 0x59, 0xa9, 0xdf, 0xa8, 0x06, 0x5a, 0x18, 0xe7, 0x87, 0x8d, 0x24, 0xf7, 0xdd, - 0x53, 0xb2, 0x12, 0x55, 0x1c, 0x9c, 0xae, 0x2c, 0xaa, 0x13, 0x0d, 0xa1, 0x50, 0x63, 0x3c, 0x77, 0xad, 0x25, 0xdd, - 0x76, 0x2a, 0x59, 0x24, 0x6c, 0x4c, 0x8b, 0xf0, 0x08, 0x6d, 0x30, 0xfa, 0x6c, 0xeb, 0xcf, 0x03, 0x50, 0x7f, 0x9f, - 0x42, 0x7b, 0x73, 0xee, 0xb8, 0xab, 0xef, 0xcd, 0x29, 0xcf, 0x50, 0x49, 0x61, 0x23, 0x63, 0xb1, 0x26, 0x5c, 0xd1, - 0x41, 0xb5, 0xbb, 0x28, 0x3e, 0xf7, 0x76, 0xc4, 0x44, 0xb0, 0xdb, 0x8f, 0xe5, 0x8b, 0x9e, 0xb8, 0x29, 0x12, 0x91, - 0xbc, 0xa2, 0xdc, 0x22, 0x36, 0x09, 0xed, 0x5b, 0x79, 0xc7, 0xb6, 0x84, 0x94, 0x42, 0x40, 0x95, 0xc0, 0x02, 0xe0, - 0x75, 0x19, 0x93, 0xb0, 0xc7, 0x92, 0x0c, 0x36, 0xce, 0x05, 0x8a, 0x00, 0x03, 0x47, 0x3c, 0x8a, 0x13, 0xd1, 0x45, - 0x06, 0xf6, 0x94, 0x03, 0xa8, 0x31, 0xc2, 0x23, 0xf5, 0x3a, 0x2e, 0x75, 0x12, 0x12, 0x66, 0x7b, 0x3b, 0x15, 0xdc, - 0x84, 0x19, 0xed, 0x32, 0xf3, 0x00, 0xab, 0xc2, 0x50, 0xd4, 0x01, 0x71, 0xe9, 0xda, 0x0c, 0x02, 0x58, 0xa8, 0x60, - 0x87, 0x97, 0xaa, 0x2b, 0x2c, 0x02, 0x96, 0x1c, 0x13, 0x85, 0xc1, 0xc8, 0x63, 0x5c, 0x13, 0x36, 0x17, 0xd9, 0x8f, - 0x0a, 0xda, 0x74, 0x09, 0xda, 0xb4, 0x0e, 0xed, 0x09, 0x12, 0xbd, 0xb7, 0x39, 0x8f, 0xcb, 0x10, 0xbe, 0xa5, 0x83, - 0x6c, 0xc8, 0x3e, 0x7e, 0x78, 0x85, 0x77, 0x00, 0xa1, 0x3d, 0x38, 0x0b, 0x99, 0x5b, 0x9e, 0xc8, 0xc5, 0x31, 0x75, - 0x82, 0xd8, 0xdb, 0x16, 0xcd, 0x45, 0x74, 0x05, 0x8a, 0xf6, 0x04, 0xe4, 0x6c, 0x48, 0x05, 0x61, 0x98, 0x53, 0x2f, - 0x0e, 0x4b, 0x2a, 0x5a, 0x0b, 0x99, 0x2e, 0x1a, 0x21, 0x11, 0x68, 0x67, 0x56, 0x34, 0xc0, 0x9c, 0x59, 0x93, 0x0e, - 0xc3, 0xf8, 0x5c, 0x73, 0x1b, 0x5d, 0x20, 0xea, 0xee, 0x01, 0x43, 0xb3, 0x04, 0xc6, 0xcc, 0xaf, 0xaf, 0x9b, 0x30, - 0x94, 0x78, 0xb4, 0xf6, 0x48, 0x36, 0x88, 0x77, 0x61, 0xc2, 0xcc, 0x2d, 0x4c, 0x4f, 0xc2, 0xab, 0x7a, 0x3d, 0x95, - 0x6f, 0x13, 0xc8, 0x01, 0x00, 0x46, 0x3a, 0xea, 0x27, 0x3e, 0xd0, 0xe6, 0x0d, 0x94, 0xc6, 0xc3, 0xe5, 0x32, 0xb0, - 0x4a, 0xa7, 0x58, 0x9a, 0x5d, 0x5f, 0xb7, 0xe0, 0x71, 0x12, 0xa7, 0xf8, 0x04, 0x33, 0xd3, 0x0d, 0x38, 0x78, 0x04, - 0xd3, 0x1c, 0xd8, 0x16, 0x6a, 0xa2, 0x4b, 0xac, 0x49, 0x55, 0x4d, 0x74, 0x09, 0xf2, 0x48, 0x54, 0x69, 0xf2, 0x14, - 0xc8, 0x70, 0xff, 0x1f, 0x16, 0x34, 0x93, 0x8b, 0x67, 0x69, 0xd2, 0x01, 0x98, 0x20, 0x2d, 0x35, 0xf1, 0xf6, 0x76, - 0x80, 0xcc, 0xb0, 0x18, 0xd2, 0xfa, 0x91, 0x3b, 0xae, 0x7a, 0x8f, 0x91, 0x90, 0x64, 0x6e, 0x2d, 0x0d, 0x81, 0x8a, - 0xd0, 0x1a, 0x04, 0xdf, 0x62, 0x78, 0x4c, 0x9b, 0x03, 0xf4, 0xbc, 0xd4, 0xfe, 0x0b, 0xb2, 0xa6, 0xea, 0xe0, 0xd9, - 0x7f, 0xfd, 0xc7, 0xbf, 0xb3, 0x3d, 0xb1, 0xb9, 0xb2, 0xd1, 0x08, 0x4c, 0x65, 0xeb, 0x0e, 0x7d, 0xfe, 0xd7, 0xdf, - 0xff, 0xdf, 0xff, 0xf3, 0x5f, 0x75, 0xb7, 0x14, 0x7a, 0x9d, 0xc8, 0x83, 0x3f, 0x25, 0x1d, 0x0c, 0x30, 0x15, 0x1a, - 0xa3, 0x28, 0x5d, 0x87, 0xc3, 0x91, 0x89, 0x43, 0x31, 0x65, 0x6c, 0xe8, 0xd9, 0x96, 0xed, 0x2d, 0x95, 0x1e, 0x27, - 0xec, 0x9c, 0xc9, 0xb7, 0x9e, 0xad, 0x9a, 0x6a, 0x45, 0x8f, 0x01, 0x28, 0x34, 0x2e, 0xcf, 0x3f, 0x25, 0x6f, 0x9b, - 0xa8, 0x48, 0xa9, 0x52, 0xeb, 0x87, 0xb4, 0xab, 0x8b, 0x0b, 0xcf, 0x36, 0xa6, 0x5f, 0x0b, 0x57, 0x6f, 0x4d, 0x79, - 0xd0, 0xf4, 0x9a, 0xeb, 0x20, 0xf3, 0xc0, 0x8f, 0xb4, 0xed, 0xbe, 0xa2, 0x11, 0x85, 0x7b, 0xcc, 0x0b, 0xec, 0xeb, - 0x68, 0x75, 0x2b, 0xf6, 0xa7, 0x39, 0x0e, 0x95, 0xb2, 0xa2, 0xb8, 0x05, 0x79, 0x58, 0x3e, 0xcf, 0xae, 0x5a, 0xdb, - 0x6b, 0x46, 0x01, 0x14, 0xda, 0x0f, 0x1f, 0x0a, 0x70, 0x3d, 0x47, 0xbb, 0x90, 0x66, 0x63, 0x36, 0x1a, 0x81, 0x10, - 0x29, 0xdc, 0x2a, 0x1f, 0x74, 0x14, 0x27, 0x1c, 0xcf, 0xb3, 0xc3, 0xae, 0xfd, 0x16, 0x36, 0x06, 0x5e, 0x0f, 0x75, - 0xa5, 0x5f, 0xaf, 0x32, 0xfd, 0x94, 0xd0, 0x5d, 0x0d, 0x97, 0x18, 0xb2, 0x0e, 0x93, 0x9c, 0xe6, 0xfa, 0x5a, 0xf9, - 0xcb, 0xb5, 0xf2, 0x3a, 0x39, 0x33, 0x72, 0x88, 0x57, 0xef, 0x9b, 0xbb, 0xec, 0x8e, 0x7f, 0xfd, 0xa7, 0xbf, 0xff, - 0x6f, 0x00, 0x06, 0x8e, 0x73, 0xb7, 0xad, 0x01, 0x1d, 0xfe, 0x27, 0x74, 0x98, 0xa5, 0x77, 0xef, 0xf2, 0xd7, 0xff, - 0xf2, 0xdf, 0xa1, 0x07, 0x5d, 0x60, 0x86, 0x7d, 0xa4, 0x40, 0x1f, 0x60, 0xd8, 0xe8, 0x77, 0xc1, 0x5e, 0x1b, 0xf7, - 0x2e, 0x70, 0xfc, 0x03, 0xa2, 0x5a, 0xf0, 0x6c, 0x7a, 0x57, 0xb8, 0x11, 0xd3, 0x41, 0x92, 0x15, 0xcc, 0x04, 0x5c, - 0x58, 0x0a, 0xbf, 0x0f, 0x72, 0x82, 0x64, 0x0a, 0x12, 0xb4, 0xb0, 0xcc, 0xa1, 0x25, 0xaf, 0xdc, 0x28, 0x08, 0x57, - 0x32, 0x54, 0xc1, 0x38, 0x91, 0x82, 0xac, 0xb9, 0x1a, 0xd3, 0x88, 0xb2, 0x25, 0x5e, 0x22, 0xe9, 0xae, 0x25, 0x97, - 0xd0, 0x58, 0xb7, 0xcc, 0xbb, 0x62, 0x7f, 0x89, 0x69, 0xc5, 0x99, 0xd7, 0xf2, 0xf0, 0xb5, 0x12, 0x50, 0x5d, 0xc7, - 0x2b, 0x4a, 0xa3, 0xcb, 0x15, 0xa5, 0xa8, 0x04, 0x35, 0x6c, 0x60, 0xed, 0x4d, 0xc4, 0x4b, 0x2f, 0xf4, 0xeb, 0x2e, - 0x6a, 0xd0, 0x91, 0x2a, 0xc3, 0x53, 0xfc, 0xfa, 0x2b, 0x00, 0xe4, 0x50, 0x42, 0xad, 0x1d, 0xe3, 0xbd, 0x1a, 0xbc, - 0x45, 0x3d, 0xcb, 0x19, 0xec, 0x99, 0x0b, 0xf3, 0x68, 0xfe, 0xe6, 0xc6, 0x63, 0x10, 0x0f, 0x3d, 0xb0, 0x27, 0xf5, - 0xaa, 0xde, 0x38, 0x6e, 0xf9, 0x2f, 0xff, 0xec, 0xfb, 0xff, 0xf2, 0xcf, 0xb7, 0x36, 0xc5, 0x51, 0xc1, 0x65, 0xe7, - 0xd5, 0xb0, 0xeb, 0xa9, 0xbb, 0x7a, 0xa6, 0x3a, 0xb9, 0x57, 0xb7, 0x59, 0xa2, 0x3f, 0xd6, 0x2f, 0x91, 0x7f, 0xa9, - 0x50, 0x50, 0xdf, 0xfa, 0x2d, 0x80, 0x21, 0x5e, 0xb7, 0x42, 0x86, 0x8d, 0x7e, 0x17, 0x68, 0x27, 0x6e, 0x70, 0xa7, - 0x15, 0xf9, 0xed, 0x14, 0xbe, 0x0d, 0x87, 0xdf, 0x09, 0xbe, 0x48, 0x07, 0x06, 0xd0, 0x4e, 0xd4, 0x8d, 0xa9, 0x5a, - 0x57, 0xbc, 0x74, 0xd9, 0x5b, 0x2a, 0x91, 0x6a, 0x25, 0x68, 0xba, 0xdd, 0xe6, 0xd6, 0x96, 0x83, 0xdd, 0xdf, 0xe0, - 0x9b, 0x21, 0xf6, 0x4e, 0x73, 0x15, 0x03, 0xb9, 0x41, 0x34, 0xe0, 0x10, 0x75, 0xac, 0x68, 0xd0, 0x25, 0xb9, 0x80, - 0xa5, 0x98, 0x61, 0x8a, 0x60, 0x7a, 0x60, 0x0e, 0x0b, 0x7b, 0xed, 0x99, 0x70, 0x6c, 0x82, 0x45, 0xd6, 0x96, 0x0e, - 0x4f, 0x8d, 0xe8, 0x9e, 0x75, 0x48, 0xf4, 0xa2, 0xc6, 0xac, 0xb2, 0x97, 0xc9, 0x4b, 0x44, 0x03, 0xf1, 0x44, 0xbc, - 0x2b, 0xe3, 0xeb, 0x75, 0xf1, 0xf6, 0xef, 0x6f, 0x8f, 0xb7, 0xc7, 0x77, 0x8c, 0xb7, 0x7f, 0xff, 0x07, 0xc7, 0xdb, - 0xbf, 0x36, 0xe3, 0xed, 0xb8, 0x88, 0x3f, 0xdf, 0x29, 0x26, 0xae, 0x22, 0x95, 0xd9, 0x45, 0x11, 0xb6, 0xa4, 0xa5, - 0x04, 0x8e, 0x34, 0x06, 0xc4, 0xff, 0xed, 0xe3, 0xdb, 0x30, 0xd1, 0x42, 0x74, 0x9b, 0xc2, 0xd9, 0x92, 0x07, 0x99, - 0x0a, 0x26, 0x37, 0x75, 0xee, 0x77, 0xe3, 0x81, 0xba, 0xec, 0x0a, 0x2e, 0x8c, 0xab, 0x0f, 0x04, 0xda, 0x2a, 0xdc, - 0x1c, 0xd0, 0xdb, 0xaa, 0x75, 0xc7, 0xf6, 0xb6, 0x4a, 0x3a, 0x36, 0x47, 0xe8, 0xa8, 0xb3, 0x64, 0x71, 0x53, 0x72, - 0x6e, 0xff, 0xa7, 0xa3, 0x56, 0x67, 0xb7, 0x35, 0x81, 0xde, 0xc0, 0x87, 0xf0, 0xd4, 0xec, 0xec, 0xee, 0xe2, 0xd3, - 0x85, 0x7a, 0x6a, 0xe3, 0x53, 0xac, 0x9e, 0x1e, 0xe2, 0xd3, 0x40, 0x3d, 0x3d, 0xc2, 0xa7, 0xa1, 0x7a, 0x7a, 0x8c, - 0x4f, 0xe7, 0x76, 0x79, 0xc4, 0x34, 0x70, 0x8f, 0xdd, 0xbe, 0x27, 0x4c, 0x51, 0x55, 0xf6, 0xd8, 0x6b, 0x61, 0x40, - 0x3b, 0x3a, 0x0b, 0x62, 0x4f, 0x38, 0xd4, 0x41, 0xe1, 0x5d, 0x8c, 0x59, 0x1a, 0x50, 0x4e, 0xf4, 0x73, 0x7c, 0x5b, - 0x10, 0xd8, 0xc0, 0x87, 0xf1, 0x84, 0xa9, 0xd7, 0xa6, 0x2b, 0xac, 0x41, 0x25, 0x1f, 0x35, 0xfb, 0x65, 0x47, 0xaf, - 0x93, 0x88, 0x84, 0xab, 0xf4, 0x4e, 0x5a, 0xb9, 0xaa, 0x4e, 0x4c, 0xd7, 0xd0, 0x2b, 0xbc, 0x26, 0xa8, 0x6a, 0xf8, - 0x95, 0x23, 0x90, 0xcd, 0x8d, 0x4b, 0x70, 0x2c, 0x57, 0x06, 0x5a, 0x11, 0x22, 0x1d, 0x68, 0x25, 0x9c, 0xf4, 0xd3, - 0x61, 0x74, 0xa6, 0xbf, 0xbf, 0x01, 0xdb, 0x21, 0x3a, 0x93, 0x2d, 0xd7, 0x07, 0x56, 0x09, 0x44, 0x33, 0xa8, 0xaa, - 0x80, 0x40, 0xc7, 0x13, 0x97, 0x06, 0xc3, 0x04, 0x32, 0x56, 0x8a, 0xd4, 0xa9, 0x87, 0x59, 0x69, 0xfa, 0x7a, 0x11, - 0x50, 0xb4, 0x2a, 0xd8, 0x03, 0x13, 0x86, 0x4a, 0x05, 0x85, 0xa1, 0x02, 0x0b, 0x44, 0xf5, 0x9a, 0x70, 0xaa, 0x72, - 0xfd, 0xd6, 0x07, 0x55, 0x2d, 0x15, 0x4f, 0x35, 0xcf, 0xa0, 0xf5, 0x01, 0xf4, 0x72, 0x14, 0xef, 0x5e, 0x6b, 0x80, - 0xff, 0xc9, 0x18, 0xe1, 0xbd, 0xd1, 0x68, 0x74, 0x63, 0x7c, 0xf5, 0xde, 0x70, 0xc4, 0xda, 0xec, 0x61, 0x07, 0xcf, - 0x27, 0x1b, 0x32, 0x6a, 0xd7, 0x2a, 0x89, 0x76, 0xf3, 0xbb, 0x35, 0xc6, 0x00, 0x1f, 0x1f, 0xcf, 0xef, 0x1e, 0x6b, - 0x2d, 0x81, 0x2a, 0xf3, 0x09, 0x48, 0xc5, 0x38, 0x0d, 0x9a, 0xa5, 0x7f, 0x2e, 0x83, 0x93, 0xf7, 0x9e, 0x3c, 0x79, - 0x52, 0xfa, 0x43, 0xf5, 0xd4, 0x1c, 0x0e, 0x4b, 0x7f, 0x30, 0xd7, 0x68, 0x34, 0x9b, 0xa3, 0x51, 0xe9, 0xc7, 0xaa, - 0x60, 0xb7, 0x3d, 0x18, 0xee, 0xb6, 0x4b, 0xff, 0xc2, 0x68, 0x51, 0xfa, 0x4c, 0x3e, 0xe5, 0x6c, 0x58, 0x3b, 0xe4, - 0x7c, 0x0c, 0xde, 0xb6, 0x2f, 0x18, 0x6d, 0x8e, 0x86, 0xb6, 0xf8, 0x1a, 0x44, 0x33, 0x9e, 0xa1, 0x00, 0xee, 0x00, - 0x9f, 0x1f, 0x6d, 0xca, 0x6b, 0xcc, 0xe2, 0xad, 0xe4, 0x25, 0x6c, 0xa1, 0x9f, 0xcd, 0x60, 0x23, 0x32, 0x33, 0x05, - 0x19, 0x63, 0x15, 0x8b, 0xac, 0x55, 0x23, 0x67, 0x51, 0xf5, 0xcf, 0x61, 0x5c, 0xc5, 0x20, 0x51, 0xda, 0x60, 0x4b, - 0x91, 0x8c, 0xf3, 0xdd, 0x3a, 0x19, 0xff, 0xc5, 0xed, 0x32, 0xfe, 0xea, 0x6e, 0x22, 0xfe, 0x8b, 0x3f, 0x58, 0xc4, - 0x7f, 0x67, 0x8a, 0x78, 0x21, 0xc4, 0xf6, 0x79, 0x68, 0x0f, 0xc6, 0x6c, 0xf0, 0xe9, 0x34, 0xbb, 0x6c, 0xe0, 0x96, - 0xc8, 0x6d, 0x92, 0x9e, 0x93, 0xdf, 0x7a, 0x20, 0xaa, 0x06, 0x33, 0x5e, 0x71, 0x4e, 0x4a, 0xf2, 0x5d, 0x1a, 0xda, - 0xef, 0x94, 0xfd, 0x2e, 0x4a, 0x46, 0x23, 0x28, 0x1a, 0x8d, 0x6c, 0x75, 0x79, 0x03, 0xc4, 0x16, 0xb5, 0x7a, 0x5b, - 0x2b, 0xa1, 0x56, 0x9f, 0x7f, 0x6e, 0x96, 0x99, 0x05, 0x32, 0x64, 0x69, 0x86, 0x27, 0x65, 0xcd, 0x30, 0x2e, 0x70, - 0xab, 0xe1, 0x9b, 0xd7, 0x97, 0x5e, 0x69, 0x25, 0x02, 0xab, 0xcb, 0x00, 0x57, 0xf1, 0x55, 0xe3, 0xed, 0xa9, 0x55, - 0x84, 0x15, 0x16, 0x54, 0x66, 0xd6, 0x3d, 0xbd, 0x7a, 0x35, 0x74, 0xf6, 0xb9, 0x5b, 0xc6, 0xc5, 0xbb, 0x74, 0x21, - 0x63, 0x59, 0xc0, 0x18, 0x86, 0x26, 0x5a, 0x25, 0xcf, 0xce, 0xce, 0x92, 0xe5, 0x1c, 0x58, 0xd1, 0xbd, 0x57, 0xc3, - 0x37, 0x30, 0x3b, 0x4a, 0x5d, 0x46, 0x3f, 0x99, 0x21, 0x52, 0xfb, 0x28, 0x27, 0x5b, 0x1d, 0xed, 0xce, 0xa5, 0xfc, - 0x97, 0x49, 0x5f, 0x8c, 0x0e, 0x51, 0x69, 0xe0, 0x61, 0x59, 0xca, 0xcc, 0x5a, 0x20, 0xc4, 0x14, 0xdf, 0xff, 0x26, - 0x7a, 0xc6, 0xb7, 0x89, 0xf0, 0xe2, 0xc2, 0x88, 0x0b, 0xd6, 0x96, 0xab, 0x54, 0x81, 0x41, 0x11, 0xdd, 0xdb, 0xc7, - 0x10, 0xa5, 0x88, 0x11, 0x2a, 0x22, 0xda, 0x56, 0x8f, 0xbe, 0xca, 0x88, 0x65, 0x85, 0x21, 0x06, 0x33, 0xf5, 0x82, - 0xa8, 0x2a, 0x55, 0x50, 0x9a, 0x81, 0x6f, 0xaa, 0x11, 0xd4, 0xa2, 0x30, 0x1b, 0xc0, 0x9e, 0x0a, 0x31, 0x0a, 0xd3, - 0x90, 0x3c, 0xd8, 0x9c, 0x57, 0x2b, 0x0f, 0x5d, 0x25, 0xd8, 0x82, 0x79, 0x41, 0x06, 0x63, 0x87, 0xae, 0x55, 0x03, - 0x3d, 0x5d, 0x8a, 0xce, 0xdd, 0x7c, 0xee, 0x75, 0xe2, 0x17, 0x17, 0x1e, 0xfc, 0x59, 0x7f, 0x9a, 0x83, 0xd0, 0x39, - 0xfd, 0x14, 0xf3, 0x06, 0x8f, 0xa6, 0x0d, 0xb4, 0xee, 0x29, 0xc8, 0x23, 0xa5, 0x33, 0xe5, 0x6f, 0x88, 0x7b, 0x96, - 0x9d, 0x59, 0x81, 0xc7, 0x63, 0x64, 0xa3, 0x06, 0x69, 0x96, 0xb2, 0x4e, 0x3d, 0x4f, 0xc7, 0x3c, 0x6d, 0x51, 0xc4, - 0xea, 0xcf, 0x33, 0x3c, 0x4e, 0xe3, 0x57, 0x41, 0x53, 0x4a, 0xf5, 0xa6, 0x3a, 0x6a, 0x69, 0xae, 0x6c, 0x1f, 0x48, - 0xda, 0x6e, 0x93, 0xf2, 0xca, 0x97, 0x8f, 0x94, 0xd6, 0x1d, 0x09, 0xdd, 0x96, 0xb5, 0x82, 0xc1, 0x21, 0xf5, 0x67, - 0xa4, 0xfb, 0x2c, 0x16, 0x53, 0xd6, 0xca, 0x5d, 0x20, 0x0b, 0xa2, 0x11, 0xbe, 0x96, 0xf4, 0x2e, 0x2d, 0x4f, 0x29, - 0x65, 0x7c, 0x8e, 0x5a, 0x26, 0x68, 0x3d, 0x99, 0x5e, 0xde, 0x7d, 0xf8, 0x9b, 0xd1, 0x2f, 0x25, 0x8d, 0xd4, 0xcd, - 0x7f, 0xdb, 0xee, 0xe0, 0x3e, 0x48, 0xa2, 0xab, 0x20, 0x4e, 0x49, 0xe5, 0x9d, 0x62, 0x94, 0xa7, 0x33, 0xcd, 0x64, - 0xfa, 0x55, 0xce, 0x12, 0xfa, 0xed, 0x1f, 0xb9, 0x14, 0xbb, 0x8f, 0xa6, 0x97, 0x6a, 0x35, 0x5a, 0x0b, 0x69, 0x55, - 0x7f, 0x68, 0xf6, 0xd4, 0xfa, 0x74, 0xad, 0x7a, 0x06, 0xd0, 0x43, 0x80, 0x41, 0xe8, 0xd9, 0x46, 0x2e, 0xa0, 0x6a, - 0x42, 0x89, 0x91, 0x3f, 0x56, 0x0d, 0x64, 0xf9, 0xbb, 0x20, 0xb9, 0xa3, 0x82, 0x75, 0xf0, 0xfd, 0xb0, 0xf1, 0x20, - 0x4a, 0xa4, 0x2e, 0x9f, 0xc4, 0xc3, 0x61, 0xc2, 0x3a, 0x4a, 0x5d, 0x5b, 0xad, 0x47, 0x98, 0x7e, 0x65, 0x2e, 0x59, - 0x7d, 0x55, 0x0c, 0xe2, 0x69, 0x3a, 0x45, 0xa7, 0x60, 0x3e, 0xe0, 0x4b, 0x5e, 0x57, 0x92, 0x53, 0xe6, 0x25, 0x35, - 0x2b, 0xe2, 0xd1, 0xf7, 0x3a, 0x2e, 0x0f, 0xc1, 0x76, 0xa1, 0x05, 0x6f, 0x76, 0x78, 0x36, 0x0d, 0x1a, 0xbb, 0x75, - 0x44, 0xb0, 0x4a, 0xa3, 0xe0, 0xad, 0x40, 0xcb, 0x43, 0x65, 0x25, 0x04, 0xb4, 0xe5, 0xb7, 0x64, 0x19, 0x0d, 0x80, - 0x2f, 0x12, 0xd5, 0x45, 0x65, 0x1d, 0x99, 0x7f, 0x9b, 0xdd, 0xf2, 0xd9, 0xea, 0xdd, 0xf2, 0x99, 0xda, 0x2d, 0x37, - 0x73, 0xec, 0xbd, 0x51, 0x0b, 0xff, 0xeb, 0x54, 0x08, 0xc1, 0xaa, 0x00, 0x39, 0x2c, 0x34, 0xd3, 0x1a, 0x6d, 0xf8, - 0x87, 0x86, 0xc6, 0x18, 0x74, 0x13, 0xf3, 0xc9, 0xbc, 0xa6, 0x85, 0x85, 0xf8, 0xd7, 0xac, 0x55, 0xb5, 0x1e, 0x60, - 0x1d, 0xf6, 0x7a, 0xb8, 0x5c, 0xd7, 0xbe, 0x79, 0xd3, 0x82, 0xbc, 0xe2, 0x4e, 0xa0, 0x84, 0x31, 0x78, 0x0e, 0xd1, - 0xe9, 0x29, 0x94, 0x8e, 0xb2, 0xc1, 0xac, 0xf8, 0x5b, 0x09, 0xbf, 0x24, 0xe2, 0x8d, 0x5b, 0x7a, 0x61, 0x1c, 0xd5, - 0x55, 0xe4, 0xf2, 0xa9, 0x11, 0xe6, 0x7a, 0x9d, 0x82, 0x02, 0x18, 0x93, 0x39, 0x6d, 0xff, 0xc1, 0x8a, 0x4d, 0xf0, - 0xef, 0xb2, 0x36, 0x2b, 0x91, 0xf9, 0xbd, 0xc4, 0xb8, 0x91, 0x08, 0xbf, 0x8a, 0x06, 0xe6, 0x1a, 0x36, 0x9f, 0xac, - 0x06, 0xf7, 0x48, 0xcd, 0xd4, 0x57, 0x4a, 0x41, 0xea, 0x1d, 0x30, 0x4a, 0xa3, 0x59, 0xc2, 0x6f, 0x1e, 0x75, 0x1d, - 0x67, 0x2c, 0x8d, 0x7a, 0x83, 0x40, 0xaf, 0xda, 0xde, 0x51, 0x4a, 0xdf, 0xfb, 0xec, 0x01, 0xfe, 0x27, 0xd2, 0x05, - 0xae, 0x2a, 0x53, 0x5d, 0xb8, 0xaa, 0x68, 0xaa, 0x4f, 0x6a, 0xb6, 0xb8, 0xd0, 0xe0, 0x64, 0x8e, 0xdf, 0xb5, 0x35, - 0x1a, 0x95, 0x77, 0x6a, 0x2e, 0x8d, 0xac, 0x5f, 0xd5, 0xfa, 0xd7, 0x0d, 0x7e, 0xc7, 0xb6, 0x03, 0x61, 0xb8, 0xd6, - 0xdb, 0xca, 0xdf, 0x61, 0x5a, 0x6a, 0xac, 0x28, 0x4e, 0xed, 0x27, 0xe1, 0x95, 0xf6, 0x50, 0xc4, 0xb9, 0x12, 0x3a, - 0x29, 0x13, 0xe1, 0xa4, 0xfc, 0x85, 0x87, 0xf7, 0xf1, 0x85, 0x84, 0xd6, 0xe5, 0x24, 0x49, 0xc1, 0x48, 0x1a, 0x73, - 0x3e, 0x0d, 0x76, 0x76, 0x2e, 0x2e, 0x2e, 0xfc, 0x8b, 0x5d, 0x3f, 0xcb, 0xcf, 0x76, 0xda, 0xcd, 0x66, 0x13, 0xdf, - 0x23, 0x67, 0x5b, 0xe7, 0x31, 0xbb, 0x78, 0x0a, 0x76, 0xb0, 0xfd, 0xd8, 0x7a, 0x62, 0x3d, 0xde, 0xb5, 0x1e, 0x3e, - 0xb2, 0x2d, 0x12, 0xe7, 0x50, 0xb2, 0x6b, 0x5b, 0x42, 0x9c, 0x87, 0x36, 0x14, 0x77, 0xf7, 0xce, 0x94, 0x45, 0x86, - 0xf7, 0x74, 0x84, 0xbd, 0x03, 0xce, 0x41, 0xf6, 0x89, 0xd5, 0x37, 0xae, 0x28, 0x6b, 0x48, 0xa5, 0xa0, 0x1e, 0x71, - 0xf7, 0x0e, 0xa2, 0x69, 0x40, 0x4c, 0x61, 0x16, 0x62, 0x0c, 0x46, 0x94, 0xd2, 0x14, 0x68, 0x65, 0x9e, 0xc2, 0x37, - 0x4c, 0xec, 0xb4, 0xe0, 0xfb, 0x9b, 0xf6, 0x63, 0xd0, 0x58, 0xe7, 0x8d, 0x07, 0x83, 0x66, 0xa3, 0x65, 0xb5, 0x1a, - 0x6d, 0xff, 0xb1, 0xd5, 0x16, 0xff, 0x82, 0xc4, 0xdb, 0xb5, 0x5a, 0xf0, 0x6d, 0xd7, 0x82, 0xe7, 0xf3, 0x07, 0xe2, - 0x00, 0x3a, 0xb2, 0x77, 0xba, 0x7b, 0xf8, 0xb3, 0x6a, 0x80, 0xd4, 0x67, 0xb6, 0xf8, 0x21, 0x48, 0xfb, 0x9e, 0x59, - 0xda, 0x7a, 0xb2, 0xb2, 0xb8, 0xfd, 0x78, 0x65, 0xf1, 0xee, 0xa3, 0x95, 0xc5, 0x0f, 0x1e, 0xd6, 0x8b, 0x77, 0xce, - 0x44, 0x95, 0xde, 0xe5, 0xa1, 0x3d, 0x89, 0x60, 0xd9, 0x2f, 0x9d, 0x16, 0xc0, 0xd9, 0xb4, 0x1a, 0xf8, 0xf1, 0xb8, - 0xed, 0xea, 0x5e, 0xa7, 0xd8, 0x4b, 0x63, 0xf9, 0xf8, 0x09, 0x60, 0xf9, 0xb2, 0xfd, 0x68, 0x80, 0xed, 0x08, 0x51, - 0xf8, 0x3b, 0xdf, 0x7d, 0x32, 0x00, 0xf9, 0x6e, 0xe1, 0x1f, 0xfc, 0x37, 0x7e, 0xd8, 0x1e, 0x88, 0x87, 0x26, 0xd6, - 0x7f, 0xd3, 0x7a, 0x5c, 0x40, 0x53, 0xfc, 0xef, 0x17, 0x6d, 0x10, 0xa3, 0x39, 0x6e, 0x8e, 0xfb, 0x00, 0x68, 0xf4, - 0x64, 0xdc, 0xf6, 0x3f, 0x3b, 0x7f, 0xec, 0x3f, 0x19, 0xb7, 0x1e, 0x7f, 0x23, 0x9e, 0x12, 0xa0, 0xe0, 0x67, 0xf8, - 0xf7, 0xcd, 0x6e, 0x13, 0xbc, 0x4b, 0xff, 0xc9, 0xf9, 0xae, 0xbf, 0x9b, 0x34, 0x1e, 0xf9, 0x4f, 0xf0, 0xaf, 0x1a, - 0x6e, 0x9c, 0x4d, 0x98, 0x6d, 0xe1, 0x7a, 0x2f, 0x78, 0x5b, 0xe6, 0x1c, 0xed, 0x07, 0xd6, 0xc3, 0x07, 0x2f, 0x9f, - 0xc0, 0x1a, 0x8d, 0x5b, 0x6d, 0xf8, 0x77, 0xdd, 0xd7, 0x6f, 0x90, 0xf0, 0x72, 0xe0, 0x88, 0x61, 0x86, 0xbd, 0x22, - 0x1c, 0xbd, 0xd3, 0xf0, 0xbe, 0x07, 0x0e, 0xd4, 0x6a, 0xef, 0x9a, 0xb1, 0xdb, 0x23, 0xa8, 0xec, 0x6e, 0xee, 0x35, - 0x63, 0x7f, 0xac, 0x7b, 0xcd, 0xd9, 0x42, 0x04, 0xf5, 0x92, 0x2f, 0x79, 0xd1, 0x8b, 0xae, 0xd7, 0x07, 0xee, 0x1c, - 0xfd, 0x85, 0xf7, 0xf1, 0x36, 0x09, 0xb4, 0x8e, 0x99, 0x19, 0x6c, 0xc8, 0x70, 0x23, 0xe3, 0x8f, 0x2b, 0xd2, 0xdd, - 0x9f, 0x75, 0x04, 0xc9, 0x6f, 0x27, 0xc8, 0x37, 0x77, 0xa3, 0x47, 0xfe, 0x07, 0xd3, 0xa3, 0x30, 0xe9, 0x51, 0x0b, - 0xe7, 0x92, 0x3b, 0x4b, 0xee, 0xe8, 0x01, 0x3d, 0x3b, 0x98, 0x84, 0xbd, 0x6d, 0xef, 0x30, 0x2c, 0x2a, 0x6c, 0x71, - 0x88, 0xf0, 0xf4, 0xd7, 0xc4, 0x9f, 0xc5, 0x8d, 0x8b, 0xd0, 0x96, 0xbe, 0xff, 0x14, 0xdf, 0xdb, 0xad, 0x1e, 0xce, - 0xc5, 0xad, 0xbe, 0x90, 0xae, 0xe4, 0x3e, 0xd4, 0x71, 0x03, 0xbc, 0x04, 0x13, 0xce, 0x33, 0x1e, 0xe1, 0x0f, 0xc3, - 0x01, 0xb9, 0xe9, 0x27, 0xe4, 0x62, 0x9e, 0x30, 0x3c, 0x24, 0x1f, 0x88, 0x77, 0x28, 0xc3, 0x57, 0x79, 0xdd, 0x16, - 0x6f, 0x71, 0x7c, 0x8d, 0x37, 0x50, 0x54, 0x60, 0x7a, 0x82, 0x2e, 0xf5, 0x1b, 0x36, 0x8c, 0x23, 0xc7, 0x76, 0xa6, - 0xb0, 0x91, 0x61, 0x96, 0x46, 0xed, 0xfa, 0x07, 0xdd, 0xfc, 0x70, 0x6d, 0xf5, 0xeb, 0x64, 0x39, 0xbe, 0xed, 0x31, - 0x3c, 0x92, 0x41, 0x2d, 0x5b, 0x9a, 0xf9, 0x30, 0xbe, 0x2a, 0xc9, 0x51, 0xa2, 0x57, 0xa6, 0x81, 0x2d, 0x6c, 0x83, - 0x96, 0xdf, 0x06, 0x5f, 0x81, 0x8a, 0xf1, 0xed, 0x79, 0xdf, 0x39, 0x8d, 0x5d, 0xb0, 0x5d, 0x8c, 0x6e, 0x7a, 0xa0, - 0xbe, 0xfe, 0xb1, 0x2b, 0xfd, 0x83, 0x8c, 0xf5, 0x3b, 0x33, 0xb6, 0xe0, 0x88, 0x7b, 0x02, 0x77, 0x5b, 0xbc, 0xa5, - 0x84, 0xa8, 0x47, 0x77, 0x46, 0xa1, 0xcc, 0x31, 0x7f, 0x98, 0x4f, 0xbc, 0x9d, 0x4f, 0xfc, 0x06, 0x67, 0x59, 0x35, - 0xe1, 0xee, 0x9c, 0x02, 0xef, 0x98, 0x64, 0x8c, 0x57, 0x75, 0x31, 0x0e, 0x1b, 0x1a, 0x34, 0xc5, 0x67, 0xb7, 0x46, - 0x64, 0xee, 0x69, 0x80, 0x88, 0xc0, 0xa1, 0xfc, 0xac, 0x8a, 0xd5, 0x17, 0x19, 0x5d, 0x01, 0xb7, 0x1d, 0x7f, 0xf9, - 0x88, 0x3e, 0x96, 0x62, 0x37, 0xe2, 0xec, 0x60, 0xa1, 0xb4, 0x1a, 0xaa, 0x8a, 0xd1, 0x14, 0x4f, 0xaf, 0x0e, 0xe5, - 0x6b, 0x3f, 0x6c, 0x0c, 0x81, 0x52, 0xe8, 0xbb, 0x7a, 0xe5, 0xe0, 0x36, 0xa8, 0x46, 0xfa, 0x21, 0x60, 0xca, 0x60, - 0x42, 0xed, 0x87, 0xb7, 0x6e, 0x2c, 0xe9, 0xf3, 0x84, 0xb6, 0xd0, 0x7d, 0x43, 0x76, 0x1e, 0x0f, 0xa4, 0x0a, 0xf3, - 0x2c, 0x79, 0x5b, 0xb0, 0x41, 0x4b, 0x13, 0xb6, 0x3c, 0xe1, 0xf5, 0xc3, 0x03, 0xea, 0xe3, 0x30, 0xcd, 0xec, 0xee, - 0xfd, 0xce, 0x3a, 0xe2, 0xe3, 0xaf, 0x12, 0x1f, 0x81, 0x97, 0xf9, 0xb7, 0xe1, 0x7d, 0xfc, 0x5d, 0xe2, 0xfb, 0x7d, - 0xdb, 0xf5, 0x49, 0x01, 0xdc, 0xaf, 0x7e, 0x9c, 0x18, 0xa5, 0xdf, 0x36, 0xe8, 0x6a, 0xef, 0xae, 0x4a, 0x5b, 0x2a, - 0xe8, 0xf6, 0xc3, 0x4a, 0x41, 0xc3, 0x77, 0x43, 0x22, 0x83, 0xb2, 0x68, 0xfb, 0x0f, 0x0d, 0xb1, 0x7f, 0xde, 0xc0, - 0xcf, 0x9a, 0xe0, 0x7f, 0x00, 0x0d, 0x94, 0xe4, 0x7f, 0x0d, 0xcd, 0x77, 0x85, 0x92, 0x81, 0x7e, 0xdf, 0x93, 0x58, - 0x96, 0x22, 0xb9, 0xb6, 0x0d, 0x56, 0x9c, 0xc6, 0x88, 0x6c, 0x2c, 0xdb, 0x73, 0xf4, 0x2f, 0x1e, 0xc9, 0x5d, 0x29, - 0xe3, 0x40, 0xcf, 0xa1, 0xaf, 0xa3, 0xdf, 0xe4, 0xbf, 0xaa, 0xce, 0xab, 0x49, 0x89, 0x15, 0x53, 0xe0, 0xbe, 0x5e, - 0x38, 0xf1, 0xe9, 0x88, 0x2b, 0x0c, 0xfa, 0x55, 0x40, 0xeb, 0x19, 0x5a, 0xde, 0x75, 0x70, 0x0d, 0x11, 0xc1, 0xe8, - 0x6d, 0xc3, 0x34, 0xc9, 0xab, 0x61, 0xb9, 0x38, 0x3f, 0xa6, 0x83, 0xe5, 0x99, 0x71, 0xa7, 0x50, 0x46, 0xef, 0x30, - 0x59, 0x74, 0x18, 0xe7, 0xf4, 0x62, 0x04, 0x05, 0x7a, 0x2d, 0x02, 0x58, 0x51, 0x89, 0xa4, 0x04, 0x2b, 0x7a, 0x36, - 0x16, 0xd9, 0x81, 0x4d, 0xe1, 0x23, 0xdb, 0x7c, 0xdd, 0xbe, 0x79, 0x73, 0x9d, 0x38, 0x99, 0x12, 0xbb, 0x71, 0xaf, - 0x22, 0x7d, 0x6c, 0x90, 0xb6, 0x6b, 0x77, 0x09, 0xd9, 0x60, 0x88, 0x6b, 0xf5, 0xfb, 0x72, 0xa6, 0x00, 0xb2, 0x4d, - 0x42, 0xeb, 0x71, 0x89, 0x84, 0xae, 0xa4, 0xd3, 0x29, 0x8b, 0xb8, 0x1f, 0xa5, 0x22, 0x0b, 0xc1, 0x10, 0x53, 0x5e, - 0x8b, 0xed, 0xba, 0x25, 0xc8, 0x46, 0x23, 0x6f, 0x42, 0xee, 0x6e, 0x28, 0x54, 0x17, 0x3d, 0x18, 0xaf, 0xe5, 0xb3, - 0x8e, 0xdb, 0xdd, 0x77, 0x87, 0xfb, 0x96, 0xd8, 0x94, 0x7b, 0x3b, 0xf0, 0xb8, 0x47, 0xfe, 0xb8, 0x48, 0xde, 0x0f, - 0x45, 0xf2, 0xbe, 0x25, 0x6f, 0x71, 0x50, 0x86, 0xe3, 0x8e, 0x40, 0xdb, 0xb6, 0x58, 0x3a, 0x10, 0x81, 0xc4, 0x09, - 0xf8, 0x2c, 0x31, 0xbe, 0xa2, 0x71, 0x07, 0xbb, 0x36, 0x70, 0xc1, 0x80, 0x9b, 0x45, 0xd4, 0x51, 0xd9, 0x35, 0x3c, - 0x55, 0x61, 0x47, 0xb0, 0x46, 0x98, 0xca, 0x40, 0x94, 0x43, 0xe9, 0xe4, 0xc5, 0xe5, 0xd6, 0xc5, 0xec, 0x74, 0x02, - 0x72, 0x52, 0xe5, 0x10, 0x7e, 0x94, 0x1d, 0xf6, 0x68, 0xaa, 0xee, 0x49, 0x29, 0xe3, 0xa2, 0xea, 0xf5, 0xf9, 0x0b, - 0x3f, 0x35, 0x2c, 0xb0, 0x97, 0x7a, 0x01, 0xb3, 0xf0, 0xc7, 0xbb, 0x5d, 0x1d, 0x89, 0x34, 0xeb, 0x4a, 0x40, 0x7d, - 0xb7, 0x7b, 0x12, 0x4c, 0xe5, 0x78, 0xaf, 0xb3, 0xa5, 0x9f, 0x2d, 0xd6, 0x72, 0xb2, 0x47, 0xd9, 0xa9, 0xe2, 0x6a, - 0x93, 0x04, 0x18, 0x56, 0x10, 0x60, 0x92, 0x26, 0x80, 0x45, 0xe7, 0xaa, 0xf6, 0xc3, 0xa6, 0x4a, 0x78, 0x85, 0x32, - 0xdc, 0x90, 0xa2, 0x8b, 0x31, 0x49, 0x2d, 0x98, 0x3b, 0x6e, 0x75, 0xf7, 0x22, 0x69, 0x5c, 0xa2, 0xf0, 0x28, 0x40, - 0x7a, 0x40, 0x67, 0xb4, 0xe0, 0xfc, 0x38, 0xdb, 0xb9, 0x60, 0xa7, 0x8d, 0x68, 0x1a, 0x57, 0x91, 0x53, 0x34, 0x35, - 0xf4, 0x94, 0x59, 0x35, 0x13, 0x7e, 0x8d, 0x16, 0x90, 0x24, 0xc1, 0x5d, 0xca, 0xb0, 0x2c, 0x59, 0xe8, 0xc0, 0x42, - 0x40, 0x61, 0x92, 0xeb, 0x2a, 0x7c, 0x2b, 0x35, 0x6e, 0x69, 0x77, 0xff, 0xfa, 0x8f, 0xff, 0x5b, 0x46, 0x64, 0x81, - 0x2a, 0x2d, 0x35, 0xd6, 0x02, 0xa1, 0xcb, 0x3d, 0xba, 0xb5, 0xa2, 0x8f, 0x10, 0xd9, 0x25, 0xb8, 0xf6, 0xf1, 0xb0, - 0x31, 0x8e, 0x92, 0x11, 0x00, 0xb6, 0x96, 0x40, 0x66, 0x52, 0xb8, 0x84, 0xba, 0x5e, 0x84, 0x2c, 0xf8, 0x9b, 0xd2, - 0x9b, 0x55, 0x96, 0x2c, 0xed, 0x56, 0x33, 0xd9, 0xb9, 0xda, 0x50, 0xb5, 0x84, 0x67, 0xf5, 0xdb, 0x7d, 0x4a, 0xa8, - 0xd5, 0xf2, 0x9c, 0xa1, 0xa5, 0x3e, 0x02, 0xf9, 0xd7, 0x7f, 0xfa, 0xbb, 0xff, 0xa1, 0x1e, 0xf1, 0x64, 0xe3, 0xaf, - 0xff, 0xf0, 0x9f, 0x31, 0x1b, 0xd3, 0xd2, 0xa7, 0x1f, 0x24, 0x27, 0xac, 0xea, 0xe8, 0x43, 0x08, 0x0c, 0x0b, 0x53, - 0x9d, 0x26, 0x20, 0x06, 0xe3, 0x41, 0x3d, 0xf3, 0xf9, 0x80, 0x26, 0xa4, 0xcd, 0x26, 0xa1, 0xa3, 0x4d, 0x5b, 0x56, - 0x3c, 0x52, 0x23, 0x39, 0xf1, 0x22, 0x54, 0x22, 0xbd, 0xef, 0x74, 0xfb, 0xc3, 0xd7, 0xab, 0x31, 0x57, 0xf1, 0x3e, - 0x2c, 0x29, 0xab, 0x72, 0x0b, 0x03, 0xf1, 0x73, 0x7c, 0x0c, 0xda, 0x46, 0x31, 0x2d, 0x5e, 0xad, 0x4f, 0xe7, 0xa7, - 0x19, 0xc0, 0x3f, 0x42, 0x8a, 0x8b, 0xa8, 0x22, 0x9d, 0x79, 0x36, 0xd0, 0xe6, 0x4b, 0xae, 0x4a, 0x1a, 0x45, 0x38, - 0x8a, 0x0f, 0x9e, 0xfc, 0x4d, 0xf9, 0xe7, 0x09, 0x5a, 0x56, 0x96, 0x33, 0x89, 0x2e, 0xa5, 0xfb, 0xf8, 0xa8, 0xd9, - 0x9c, 0x5e, 0xba, 0xf3, 0x6a, 0x06, 0x6f, 0xdd, 0x64, 0x14, 0x89, 0x34, 0x07, 0xa4, 0xc3, 0x52, 0x1d, 0xf4, 0x04, - 0x8f, 0xa9, 0x89, 0x31, 0xb2, 0xb2, 0xfc, 0xd3, 0x9c, 0xe2, 0x6e, 0xf1, 0x2f, 0x78, 0xa8, 0x29, 0x43, 0x94, 0x50, - 0x62, 0x60, 0x31, 0x37, 0x7a, 0xb5, 0x45, 0xaf, 0x71, 0x6b, 0xf9, 0xea, 0x83, 0x79, 0x28, 0x6b, 0x1e, 0xa7, 0x3e, - 0xc0, 0x03, 0xd2, 0x71, 0xcb, 0x1b, 0xb7, 0xe7, 0x7a, 0x78, 0xce, 0xb3, 0x89, 0x79, 0x0a, 0xcb, 0x22, 0x36, 0x60, - 0x23, 0x15, 0xda, 0x95, 0xf5, 0xe2, 0x84, 0xb5, 0x1c, 0xef, 0xae, 0x98, 0x4b, 0x82, 0x44, 0xa7, 0xaf, 0x00, 0xcf, - 0x3d, 0xdc, 0x80, 0x40, 0xff, 0x2c, 0xe2, 0x01, 0xf1, 0x6b, 0xc7, 0x3c, 0xcb, 0x8d, 0x50, 0xca, 0x64, 0x73, 0x03, - 0x9e, 0x8e, 0x68, 0x8a, 0x41, 0xd6, 0xfa, 0xd5, 0x93, 0xd2, 0xa7, 0xee, 0xe6, 0x50, 0x22, 0x46, 0xf3, 0x8d, 0x3c, - 0x22, 0x7d, 0x5a, 0x0b, 0x6e, 0x48, 0x15, 0xd3, 0x76, 0xbd, 0x95, 0xf5, 0x42, 0x53, 0x8b, 0xda, 0x6f, 0xb8, 0x63, - 0x13, 0x98, 0xf6, 0x62, 0x2b, 0x2a, 0xc4, 0x56, 0x4f, 0xc3, 0x6f, 0xb4, 0xeb, 0x13, 0x4d, 0xa7, 0xd4, 0xd0, 0x05, - 0x26, 0x26, 0x83, 0x15, 0x65, 0x07, 0x1d, 0xff, 0x8b, 0xd3, 0x76, 0xd9, 0x46, 0x6e, 0x04, 0xf1, 0x4d, 0x9e, 0xc3, - 0xe3, 0xaf, 0xae, 0x74, 0xff, 0x1f, 0x1c, 0x1d, 0xa5, 0x5f, 0x1b, 0x82, 0x00, 0x00}; - -} // namespace web_server -} // namespace esphome diff --git a/esphome/components/web_server/server_index_v2.h b/esphome/components/web_server/server_index_v2.h new file mode 100644 index 0000000000..21beecfff7 --- /dev/null +++ b/esphome/components/web_server/server_index_v2.h @@ -0,0 +1,633 @@ +#pragma once +// Generated from https://github.com/esphome/esphome-webserver +#ifdef USE_WEBSERVER_LOCAL +#if USE_WEBSERVER_VERSION == 2 +#include "esphome/core/hal.h" +namespace esphome { + +namespace web_server { + +const uint8_t INDEX_GZ[] PROGMEM = { + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc5, 0x7d, 0xd9, 0x92, 0xdb, 0x46, 0xb6, 0xe0, 0xf3, + 0xdc, 0xaf, 0x40, 0xc1, 0xd5, 0x25, 0x64, 0x33, 0x89, 0x22, 0x59, 0xda, 0x0c, 0x56, 0x92, 0x5d, 0x2a, 0xc9, 0x2d, + 0xbb, 0xb5, 0xd8, 0x2a, 0xc9, 0x6e, 0x9b, 0x66, 0x57, 0xa1, 0x88, 0x24, 0x99, 0x16, 0x88, 0xa4, 0x13, 0xc9, 0x5a, + 0x4c, 0xe2, 0xc6, 0x7c, 0xc0, 0x44, 0x4c, 0xc4, 0x3c, 0xcd, 0xcb, 0xc4, 0xdc, 0x87, 0xf9, 0x88, 0x79, 0xbe, 0x9f, + 0x72, 0x7f, 0x60, 0xe6, 0x13, 0x26, 0x4e, 0x2e, 0x40, 0x82, 0x4b, 0xa9, 0xbc, 0xdc, 0x3b, 0xa1, 0x90, 0x44, 0xe4, + 0x7a, 0xf2, 0xe4, 0xc9, 0xb3, 0x27, 0x70, 0xbc, 0x97, 0xf0, 0x91, 0xbc, 0x9d, 0x53, 0x6f, 0x2a, 0x67, 0x69, 0xef, + 0xd8, 0xfc, 0x4b, 0xe3, 0xa4, 0x77, 0x9c, 0xb2, 0xec, 0xa3, 0x27, 0x68, 0x4a, 0xd8, 0x88, 0x67, 0xde, 0x54, 0xd0, + 0x31, 0x49, 0x62, 0x19, 0x47, 0x6c, 0x16, 0x4f, 0xa8, 0x77, 0xd8, 0x3b, 0x9e, 0x51, 0x19, 0x7b, 0xa3, 0x69, 0x2c, + 0x72, 0x2a, 0xc9, 0x87, 0xf7, 0x5f, 0x34, 0x9f, 0xf6, 0x8e, 0xf3, 0x91, 0x60, 0x73, 0xe9, 0xc1, 0x90, 0x64, 0xc6, + 0x93, 0x45, 0x4a, 0x7b, 0x87, 0x87, 0xd7, 0xd7, 0xd7, 0xe1, 0x4f, 0xf9, 0x3f, 0x8d, 0x78, 0x96, 0x4b, 0xef, 0x15, + 0xb9, 0x66, 0x59, 0xc2, 0xaf, 0x31, 0x95, 0xe4, 0x55, 0x78, 0x36, 0x8d, 0x13, 0x7e, 0xfd, 0x8e, 0x73, 0x79, 0x70, + 0x10, 0xe8, 0xc7, 0xdb, 0xd3, 0xb3, 0x33, 0x42, 0xc8, 0x15, 0x67, 0x89, 0xd7, 0x5a, 0xad, 0xaa, 0xc2, 0x30, 0x8b, + 0x25, 0xbb, 0xa2, 0xba, 0x0b, 0x3a, 0x38, 0xf0, 0xe3, 0x84, 0xcf, 0x25, 0x4d, 0xce, 0xe4, 0x6d, 0x4a, 0xcf, 0xa6, + 0x94, 0xca, 0xdc, 0x67, 0x99, 0xf7, 0x9c, 0x8f, 0x16, 0x33, 0x9a, 0xc9, 0x70, 0x2e, 0xb8, 0xe4, 0x00, 0xc9, 0xc1, + 0x81, 0x2f, 0xe8, 0x3c, 0x8d, 0x47, 0x14, 0xea, 0x4f, 0xcf, 0xce, 0xaa, 0x1e, 0x55, 0x23, 0xcc, 0x24, 0x39, 0xbb, + 0x9d, 0x5d, 0xf2, 0x34, 0x40, 0x38, 0x95, 0x24, 0xa3, 0xd7, 0xde, 0x77, 0x34, 0xfe, 0xf8, 0x3a, 0x9e, 0x77, 0x47, + 0x69, 0x9c, 0xe7, 0xde, 0xa5, 0x5c, 0xaa, 0x25, 0x88, 0xc5, 0x48, 0x72, 0x11, 0x48, 0x4c, 0x31, 0x43, 0x4b, 0x36, + 0x0e, 0xe4, 0x94, 0xe5, 0xe1, 0xf9, 0xfe, 0x28, 0xcf, 0xdf, 0xd1, 0x7c, 0x91, 0xca, 0x7d, 0xb2, 0xd7, 0xc2, 0x6c, + 0x8f, 0x10, 0x26, 0x91, 0x9c, 0x0a, 0x7e, 0xed, 0xbd, 0x10, 0x82, 0x8b, 0xc0, 0x3f, 0x3d, 0x3b, 0xd3, 0x2d, 0x3c, + 0x96, 0x7b, 0x19, 0x97, 0x5e, 0x39, 0x5e, 0x7c, 0x99, 0xd2, 0xd0, 0xfb, 0x90, 0x53, 0xef, 0x62, 0x91, 0xe5, 0xf1, + 0x98, 0x9e, 0x9e, 0x9d, 0x5d, 0x78, 0x5c, 0x78, 0x17, 0xa3, 0x3c, 0xbf, 0xf0, 0x58, 0x96, 0x4b, 0x1a, 0x27, 0xa1, + 0x8f, 0xba, 0x6a, 0xb2, 0x51, 0x9e, 0xbf, 0xa7, 0x37, 0x92, 0x48, 0xac, 0x1e, 0x25, 0xa1, 0xc5, 0x84, 0x4a, 0x2f, + 0x2f, 0xd7, 0x15, 0xa0, 0x65, 0x4a, 0xa5, 0x27, 0x89, 0xaa, 0xe7, 0x5d, 0x8d, 0x7b, 0xaa, 0x1f, 0x65, 0x97, 0x8d, + 0x03, 0x2a, 0x0f, 0x0e, 0x64, 0x89, 0x67, 0xa4, 0x97, 0xe6, 0x31, 0x42, 0xf7, 0x6c, 0xd9, 0xc1, 0x01, 0x0d, 0x53, + 0x9a, 0x4d, 0xe4, 0x94, 0x10, 0xd2, 0xee, 0xb2, 0x83, 0x83, 0x40, 0x92, 0x54, 0x86, 0x13, 0x2a, 0x03, 0x8a, 0x10, + 0xae, 0x7a, 0x1f, 0x1c, 0x04, 0x1a, 0x09, 0x9c, 0x68, 0xc4, 0xd5, 0x70, 0x8c, 0x42, 0x83, 0xfd, 0xb3, 0xdb, 0x6c, + 0x14, 0xb8, 0xf0, 0x23, 0xcc, 0x0e, 0x0e, 0x52, 0x19, 0xe6, 0x30, 0x22, 0x96, 0x08, 0x15, 0x82, 0xca, 0x85, 0xc8, + 0x3c, 0x59, 0x48, 0x7e, 0x26, 0x05, 0xcb, 0x26, 0x01, 0x5a, 0xda, 0x32, 0xa7, 0x63, 0x51, 0x68, 0x70, 0xbf, 0x96, + 0x44, 0x90, 0x1e, 0xcc, 0x78, 0x29, 0x03, 0xd8, 0x45, 0x3e, 0xf6, 0x04, 0x21, 0x7e, 0xae, 0xfa, 0xfa, 0x7d, 0x11, + 0x89, 0x86, 0xef, 0x63, 0x0d, 0x25, 0x66, 0x12, 0xe1, 0x8f, 0x24, 0x10, 0x38, 0x0c, 0x43, 0x89, 0x48, 0x6f, 0x69, + 0xb1, 0x22, 0x9c, 0x75, 0xf6, 0xc5, 0xa0, 0x35, 0x8c, 0x64, 0x28, 0x68, 0xb2, 0x18, 0xd1, 0x20, 0x60, 0x38, 0xc7, + 0x19, 0x22, 0x3d, 0xd6, 0x08, 0x38, 0xe9, 0xc1, 0x76, 0xf3, 0xfa, 0x5e, 0x13, 0xb2, 0xd7, 0x42, 0x06, 0x46, 0x6e, + 0x01, 0x04, 0x0c, 0x1b, 0x78, 0x38, 0x21, 0x7e, 0xb6, 0x98, 0x5d, 0x52, 0xe1, 0x97, 0xcd, 0xba, 0x35, 0xb2, 0x58, + 0xe4, 0xd4, 0x1b, 0xe5, 0xb9, 0x37, 0x5e, 0x64, 0x23, 0xc9, 0x78, 0xe6, 0xf9, 0x0d, 0xde, 0xf0, 0x35, 0x39, 0x94, + 0xd4, 0xe0, 0xa3, 0x02, 0x05, 0x39, 0x6a, 0x88, 0x41, 0xd6, 0x68, 0x0f, 0x31, 0x40, 0x89, 0xba, 0x66, 0x3c, 0x83, + 0x00, 0x8a, 0x05, 0xac, 0xb1, 0xc0, 0x1f, 0x24, 0xac, 0x52, 0x2d, 0x91, 0xca, 0xbe, 0x08, 0x37, 0x0f, 0x0a, 0x91, + 0xe1, 0x2c, 0x9e, 0x07, 0x94, 0xf4, 0xa8, 0x22, 0xae, 0x38, 0x1b, 0x01, 0xac, 0xb5, 0x7d, 0xeb, 0xd3, 0x88, 0x86, + 0x15, 0x49, 0xa1, 0x48, 0x86, 0x63, 0x2e, 0x5e, 0xc4, 0xa3, 0x29, 0xf4, 0x2b, 0x09, 0x26, 0xb1, 0xe7, 0x6d, 0x24, + 0x68, 0x2c, 0xe9, 0x8b, 0x94, 0xc2, 0x53, 0xe0, 0xab, 0x9e, 0x3e, 0xc2, 0x39, 0x79, 0x15, 0xa6, 0x4c, 0xbe, 0xe1, + 0xd9, 0x88, 0x76, 0x73, 0x87, 0xba, 0x18, 0xec, 0xfb, 0x89, 0x94, 0x82, 0x5d, 0x2e, 0x24, 0x0d, 0xfc, 0x0c, 0x5a, + 0xf8, 0x38, 0x47, 0x98, 0x85, 0x92, 0xde, 0xc8, 0x53, 0x9e, 0x49, 0x9a, 0x49, 0x42, 0x2d, 0x52, 0xb1, 0x08, 0xe3, + 0xf9, 0x9c, 0x66, 0xc9, 0xe9, 0x94, 0xa5, 0x49, 0xc0, 0x50, 0x81, 0x0a, 0x1c, 0x4b, 0x02, 0x6b, 0x24, 0x3d, 0x11, + 0xc1, 0x3f, 0xbb, 0x57, 0x13, 0x48, 0xd2, 0x53, 0x87, 0x82, 0x12, 0xdf, 0xef, 0x8e, 0xb9, 0x08, 0xcc, 0x0a, 0x3c, + 0x3e, 0xf6, 0x24, 0xcc, 0xf1, 0x6e, 0x91, 0xd2, 0x1c, 0xd1, 0x06, 0x61, 0xe5, 0x36, 0x1a, 0x04, 0x7f, 0x0d, 0x14, + 0x5f, 0xa0, 0x40, 0xa0, 0x48, 0x74, 0xaf, 0x62, 0xe1, 0x7d, 0x61, 0x4e, 0xd4, 0x4f, 0x96, 0x9b, 0x4d, 0x25, 0xf9, + 0x29, 0x94, 0x62, 0x91, 0x4b, 0x9a, 0xbc, 0xbf, 0x9d, 0xd3, 0x1c, 0xbf, 0x94, 0x64, 0x2a, 0xfb, 0x53, 0x19, 0xd2, + 0xd9, 0x5c, 0xde, 0x9e, 0x29, 0xc6, 0x18, 0xf9, 0x3e, 0x1e, 0x41, 0x4b, 0x41, 0xe3, 0x11, 0x30, 0x33, 0x83, 0xad, + 0xaf, 0x79, 0x7a, 0x3b, 0x66, 0x69, 0x7a, 0xb6, 0x98, 0xcf, 0xb9, 0x90, 0xf8, 0xaf, 0x64, 0x29, 0x79, 0x85, 0x1a, + 0xd8, 0xcb, 0x65, 0x7e, 0xcd, 0xe4, 0x68, 0x1a, 0x48, 0xb4, 0x1c, 0xc5, 0x39, 0xf5, 0x9e, 0x71, 0x9e, 0xd2, 0x38, + 0x8b, 0x04, 0x11, 0xfd, 0x97, 0x32, 0xca, 0x16, 0x69, 0xda, 0xbd, 0x14, 0x34, 0xfe, 0xd8, 0x55, 0xd5, 0x6f, 0x2f, + 0x7f, 0xa2, 0x23, 0x19, 0xa9, 0xdf, 0x27, 0x42, 0xc4, 0xb7, 0xd0, 0x90, 0x10, 0x68, 0xd6, 0x17, 0xd1, 0x57, 0x67, + 0x6f, 0xdf, 0x84, 0xfa, 0x90, 0xb0, 0xf1, 0x6d, 0x20, 0xca, 0x83, 0x27, 0x0a, 0x3c, 0x16, 0x7c, 0xb6, 0x36, 0xb5, + 0xc6, 0x9a, 0xe8, 0xee, 0x00, 0x81, 0x12, 0xb1, 0xa7, 0x87, 0x76, 0x21, 0x78, 0xa3, 0x68, 0x1e, 0x2a, 0x89, 0x99, + 0x17, 0xfe, 0x89, 0x74, 0x71, 0x20, 0xd0, 0xdd, 0xd0, 0x4a, 0x71, 0xbb, 0xa4, 0x44, 0xc1, 0x39, 0x07, 0x09, 0x03, + 0x30, 0x8e, 0x62, 0x39, 0x9a, 0x2e, 0xa9, 0x1a, 0xac, 0xb0, 0x10, 0xd3, 0xa2, 0xc0, 0xd7, 0x25, 0xbd, 0xcb, 0x3d, + 0x42, 0x84, 0x62, 0x54, 0x44, 0xae, 0x56, 0x82, 0x10, 0x81, 0xf0, 0x77, 0x64, 0x19, 0xdb, 0xf5, 0x44, 0x7b, 0x2d, + 0x0c, 0xe7, 0x32, 0xd2, 0xdc, 0x05, 0x8f, 0x78, 0x76, 0x45, 0x85, 0xa4, 0x22, 0xfa, 0x2b, 0x16, 0x74, 0x9c, 0x02, + 0x14, 0x7b, 0x6d, 0x3c, 0x8d, 0xf3, 0xd3, 0x69, 0x9c, 0x4d, 0x68, 0x12, 0x5d, 0xcb, 0x02, 0xff, 0x9d, 0xf8, 0x63, + 0x96, 0xc5, 0x29, 0xfb, 0x85, 0x26, 0xbe, 0x91, 0x06, 0x27, 0x1e, 0xbd, 0x91, 0x34, 0x4b, 0x72, 0xef, 0xe5, 0xfb, + 0xd7, 0xaf, 0xcc, 0x3e, 0xd6, 0x04, 0x04, 0x5a, 0xe6, 0x8b, 0x39, 0x15, 0x01, 0xc2, 0x46, 0x40, 0xbc, 0x60, 0x8a, + 0x39, 0xbe, 0x8e, 0xe7, 0xba, 0x84, 0xe5, 0x1f, 0xe6, 0x49, 0x2c, 0xe9, 0xd7, 0x34, 0x4b, 0x58, 0x36, 0x21, 0x7b, + 0x6d, 0x5d, 0x3e, 0x8d, 0x4d, 0x45, 0x52, 0x16, 0x9d, 0xef, 0xbf, 0x48, 0xd5, 0xba, 0xcb, 0xc7, 0x45, 0x80, 0x8a, + 0x5c, 0xc6, 0x92, 0x8d, 0xbc, 0x38, 0x49, 0xbe, 0xcc, 0x98, 0x64, 0x0a, 0x40, 0x01, 0xdb, 0x03, 0x24, 0x4a, 0xb5, + 0xa8, 0xb0, 0x80, 0x07, 0x08, 0x07, 0x81, 0x11, 0x00, 0x53, 0x64, 0xf6, 0xeb, 0xe0, 0xa0, 0x62, 0xf7, 0x7d, 0x1a, + 0xe9, 0x4a, 0x32, 0x18, 0xa2, 0x70, 0xbe, 0xc8, 0x61, 0xa3, 0xed, 0x14, 0x20, 0x5d, 0xf8, 0x65, 0x4e, 0xc5, 0x15, + 0x4d, 0x4a, 0xe2, 0xc8, 0x03, 0xb4, 0x5c, 0x9b, 0xc3, 0x1c, 0x0b, 0x49, 0x06, 0xc3, 0xae, 0xcb, 0xb7, 0xa9, 0xa1, + 0x73, 0xc1, 0xe7, 0x54, 0x48, 0x46, 0xf3, 0x92, 0x95, 0x04, 0x20, 0x45, 0x4b, 0x76, 0x92, 0x13, 0xbb, 0xbe, 0x79, + 0xc0, 0x30, 0x45, 0x35, 0x86, 0x61, 0x05, 0xed, 0x8b, 0x2b, 0x25, 0x31, 0x72, 0xcc, 0x10, 0x96, 0x1a, 0xd2, 0x1c, + 0xa1, 0x02, 0x61, 0x69, 0xc1, 0xd5, 0xac, 0xc8, 0xcc, 0x76, 0x0b, 0xa2, 0x9a, 0x7c, 0xa7, 0x44, 0x35, 0x30, 0xb4, + 0x58, 0xd2, 0x83, 0x83, 0x80, 0x86, 0x25, 0x51, 0x90, 0xbd, 0xb6, 0xd9, 0x23, 0x07, 0x59, 0x3b, 0xc0, 0x86, 0x89, + 0x25, 0xa6, 0x08, 0xef, 0xd1, 0x30, 0xe3, 0x27, 0xa3, 0x11, 0xcd, 0x73, 0x2e, 0x0e, 0x0e, 0xf6, 0x54, 0xfb, 0x52, + 0x9b, 0x80, 0x3d, 0x7c, 0x7b, 0x9d, 0x55, 0x10, 0xa0, 0x4a, 0xc2, 0x1a, 0xb9, 0x20, 0x41, 0x4e, 0x29, 0x85, 0xc3, + 0xef, 0x5b, 0xc5, 0x23, 0xf2, 0xcf, 0xcf, 0xfd, 0x86, 0xc4, 0x06, 0x0d, 0x13, 0x6a, 0xa7, 0xbe, 0x7d, 0x4e, 0xb5, + 0x6a, 0xa5, 0x14, 0x8f, 0x0d, 0xcc, 0xe8, 0xf3, 0x13, 0x26, 0x74, 0xcc, 0x32, 0x67, 0xd9, 0x35, 0x90, 0xb0, 0xc4, + 0x39, 0x2a, 0x9c, 0x0d, 0xdd, 0x3a, 0xb4, 0xd2, 0x69, 0xf4, 0xce, 0x2d, 0x27, 0x4a, 0x8f, 0x70, 0xb6, 0x71, 0x40, + 0x87, 0x05, 0x56, 0xa8, 0xb7, 0xab, 0xc9, 0x14, 0xa0, 0x03, 0x39, 0xec, 0x9a, 0x7a, 0x92, 0x6b, 0xcc, 0x09, 0xfa, + 0xf3, 0x82, 0xe6, 0x52, 0xd3, 0x71, 0x20, 0x71, 0x86, 0x19, 0x2a, 0xe0, 0xb8, 0x8d, 0xd9, 0x64, 0x21, 0x40, 0xdd, + 0x81, 0xa3, 0x48, 0xb3, 0xc5, 0x8c, 0xda, 0xa7, 0x6d, 0xb0, 0xbd, 0x9d, 0x83, 0x40, 0xcc, 0x81, 0xa6, 0xef, 0x26, + 0x27, 0x80, 0x55, 0xa2, 0xd5, 0xea, 0x3b, 0x3b, 0x48, 0xb5, 0x95, 0xa5, 0x8a, 0xb6, 0xb6, 0x27, 0x7f, 0x47, 0x46, + 0x1e, 0xef, 0xb5, 0x35, 0xf4, 0x7f, 0x1f, 0x92, 0xbd, 0x56, 0x49, 0xc1, 0x06, 0xa7, 0x1a, 0x18, 0x8d, 0xc2, 0xb7, + 0x7a, 0x20, 0xa4, 0xa4, 0x7b, 0x8d, 0x58, 0xc2, 0xe9, 0x06, 0x9d, 0x4e, 0xc9, 0x00, 0xf4, 0x8c, 0x70, 0x3a, 0xdc, + 0x45, 0x4c, 0x96, 0x1b, 0x04, 0x72, 0xb3, 0xae, 0x62, 0x1a, 0x57, 0x75, 0xa6, 0xb1, 0xb6, 0x08, 0x7f, 0x5e, 0x76, + 0xf1, 0x4b, 0x1a, 0x33, 0xc7, 0xbc, 0xaa, 0xc2, 0x4c, 0x01, 0x53, 0x2d, 0xc9, 0x19, 0xe2, 0x4d, 0x3c, 0xa3, 0x79, + 0x40, 0x11, 0xde, 0xd5, 0x40, 0x13, 0x27, 0x34, 0x19, 0x3a, 0x62, 0x33, 0x07, 0xb1, 0xc9, 0x90, 0xd6, 0xca, 0xea, + 0xc7, 0x2d, 0xc7, 0x74, 0x90, 0x0f, 0x2b, 0x65, 0xce, 0x59, 0xbc, 0x92, 0xc7, 0x86, 0xba, 0x2d, 0xfe, 0x74, 0x99, + 0x46, 0x9a, 0x52, 0x1a, 0x72, 0x84, 0xf7, 0x5a, 0xeb, 0xfb, 0x68, 0x5b, 0x55, 0x6b, 0x1c, 0x0c, 0x61, 0x1f, 0x94, + 0xb8, 0x08, 0x59, 0xae, 0xfe, 0xaf, 0x9d, 0x33, 0x40, 0xdb, 0x19, 0x90, 0x45, 0x38, 0x4e, 0x63, 0x19, 0xb4, 0x0f, + 0x5b, 0xa0, 0x89, 0x5e, 0x51, 0x90, 0x26, 0x08, 0x6d, 0x2e, 0x85, 0x86, 0x8b, 0x2c, 0x9f, 0xb2, 0xb1, 0x0c, 0x62, + 0xa9, 0x18, 0x0a, 0x4d, 0x73, 0xea, 0xc9, 0x9a, 0x3e, 0xac, 0x98, 0x4d, 0x0c, 0xa4, 0x56, 0x2a, 0x5f, 0xd4, 0x42, + 0xaa, 0x98, 0x16, 0xf0, 0x86, 0x4a, 0x97, 0xae, 0x78, 0x8c, 0x6d, 0xcd, 0x40, 0x5f, 0x6c, 0xf7, 0xf5, 0x88, 0x91, + 0x61, 0x05, 0xcc, 0x51, 0x59, 0x59, 0xe4, 0xf2, 0x07, 0x53, 0x28, 0x43, 0xc9, 0x5f, 0xf1, 0x6b, 0x2a, 0x4e, 0x63, + 0x00, 0x3e, 0xd2, 0xdd, 0x0b, 0x2d, 0x06, 0x14, 0xb7, 0x97, 0x5d, 0x4b, 0x2f, 0xe7, 0x6a, 0xe1, 0x5f, 0x0b, 0x3e, + 0x63, 0x39, 0x05, 0x4d, 0x4d, 0xe3, 0x3f, 0x83, 0x53, 0xa6, 0x8e, 0x23, 0x88, 0x1a, 0x5a, 0xd2, 0xd7, 0xc9, 0xab, + 0x3a, 0x7d, 0x9d, 0xef, 0xbf, 0x98, 0x58, 0xf6, 0x57, 0x3f, 0xc4, 0x08, 0x07, 0xc6, 0x9e, 0x70, 0xa4, 0x5c, 0x38, + 0x45, 0x46, 0xbc, 0xaf, 0x56, 0xd2, 0x31, 0xdb, 0x6a, 0xba, 0x22, 0xd5, 0xc7, 0x06, 0x15, 0x71, 0x92, 0x80, 0x56, + 0x27, 0x78, 0x9a, 0x3a, 0x82, 0x0a, 0xb3, 0x6e, 0x29, 0x9a, 0xce, 0xf7, 0x5f, 0x9c, 0xdd, 0x25, 0x9d, 0xa0, 0xde, + 0x15, 0x50, 0x16, 0xd0, 0x2c, 0xa1, 0x02, 0xcc, 0x48, 0x67, 0xb7, 0x8c, 0x8c, 0x3d, 0xe5, 0x59, 0x46, 0x47, 0x92, + 0x26, 0x60, 0xa5, 0x30, 0x22, 0xc3, 0x29, 0xcf, 0x65, 0x59, 0x58, 0x41, 0xcf, 0x1c, 0xe8, 0x59, 0x38, 0x8a, 0xd3, + 0x34, 0xd0, 0x16, 0xc9, 0x8c, 0x5f, 0xd1, 0x2d, 0x50, 0x77, 0x6b, 0x20, 0x97, 0xc3, 0x50, 0x67, 0x18, 0x1a, 0xe6, + 0xf3, 0x94, 0x8d, 0x68, 0x29, 0xb8, 0xce, 0x42, 0x96, 0x25, 0xf4, 0x06, 0xf8, 0x08, 0xea, 0xf5, 0x7a, 0x2d, 0xdc, + 0x46, 0x85, 0x46, 0xf8, 0x72, 0x03, 0xb1, 0x77, 0x88, 0x4c, 0x20, 0x32, 0xd2, 0x5b, 0x6e, 0xe3, 0x07, 0x14, 0x39, + 0x72, 0x92, 0x59, 0xcb, 0x4a, 0xf3, 0x66, 0x84, 0x13, 0x9a, 0x52, 0x49, 0x2d, 0x2f, 0x07, 0xfd, 0x59, 0x1f, 0xdd, + 0x77, 0x25, 0xfe, 0x4a, 0x72, 0xb2, 0xa7, 0xcc, 0xee, 0x79, 0x5e, 0x5a, 0xea, 0xd5, 0xf6, 0x54, 0xd8, 0xee, 0x4b, + 0xbd, 0x3d, 0xb1, 0x94, 0xf1, 0x68, 0xaa, 0x4d, 0xf4, 0x60, 0x63, 0x49, 0xd5, 0x18, 0x86, 0xaf, 0x97, 0x87, 0xe8, + 0x83, 0x05, 0x73, 0x1b, 0x0a, 0xce, 0x0c, 0x53, 0xa0, 0x60, 0xf5, 0xe9, 0x6d, 0x3b, 0x8d, 0xd3, 0xf4, 0x32, 0x1e, + 0x7d, 0xac, 0x53, 0x7f, 0x45, 0x06, 0x64, 0x9d, 0x1b, 0x3b, 0x55, 0x0e, 0xcb, 0x72, 0xd7, 0x6d, 0xb9, 0x74, 0xed, + 0xa0, 0x04, 0x7b, 0xad, 0x8a, 0xec, 0xeb, 0x1b, 0xbd, 0x93, 0xda, 0x15, 0x44, 0xcc, 0xac, 0x2c, 0x00, 0x2e, 0xf0, + 0x49, 0x8a, 0xb3, 0xfc, 0xc0, 0xd0, 0x1d, 0xd8, 0x1a, 0xc5, 0x1a, 0x20, 0x12, 0x2d, 0x8b, 0x84, 0xe5, 0xbb, 0x31, + 0xf0, 0x87, 0x40, 0xf9, 0xdc, 0x99, 0xe1, 0xbe, 0x80, 0x96, 0x3c, 0xce, 0xa8, 0xcc, 0x25, 0x64, 0x46, 0x9b, 0xb0, + 0x8c, 0xe6, 0x6f, 0xa0, 0xb9, 0x28, 0x7a, 0x7f, 0xab, 0xab, 0x40, 0x27, 0x03, 0x28, 0xf2, 0xae, 0xab, 0x4c, 0xd4, + 0x28, 0xc0, 0xf0, 0x54, 0xa6, 0x44, 0x6e, 0x56, 0x33, 0x1e, 0x8d, 0xba, 0xae, 0xed, 0x6f, 0xc3, 0x72, 0x39, 0x09, + 0x82, 0x20, 0x07, 0xfb, 0xcd, 0xea, 0xf5, 0xd5, 0x22, 0xf2, 0x8d, 0x45, 0xe4, 0xa1, 0x63, 0x64, 0xa1, 0x8a, 0x96, + 0x9d, 0xee, 0xd1, 0x5f, 0x91, 0xdb, 0x08, 0x94, 0xd5, 0x10, 0xf8, 0x33, 0x2a, 0xd9, 0x6d, 0x4a, 0x24, 0xe6, 0xc6, + 0xc0, 0x31, 0x94, 0x06, 0x0c, 0xa3, 0xea, 0x92, 0x21, 0x7d, 0x34, 0x6a, 0xc6, 0x6e, 0x86, 0x39, 0x5a, 0xd3, 0xec, + 0x8b, 0xc2, 0xe0, 0x88, 0x22, 0xb3, 0x37, 0x35, 0x95, 0xd8, 0xc1, 0x0a, 0xce, 0x88, 0x51, 0x83, 0xb5, 0xd6, 0xb3, + 0x8e, 0x9b, 0x72, 0x5c, 0x38, 0xa8, 0x15, 0x6a, 0x6a, 0xfa, 0xa4, 0x55, 0xac, 0x32, 0x84, 0xa7, 0x56, 0x23, 0xe5, + 0xd5, 0xba, 0x09, 0xf1, 0xad, 0x37, 0xc2, 0xef, 0x2f, 0x6b, 0x26, 0x61, 0xe4, 0x34, 0x2b, 0x22, 0x60, 0xa9, 0x7c, + 0x1b, 0xba, 0xb7, 0xd1, 0x4c, 0x6d, 0x1c, 0x07, 0xe1, 0xdc, 0x45, 0xb8, 0x83, 0xd9, 0x4c, 0x73, 0xae, 0x6c, 0x48, + 0xa6, 0xf5, 0xbe, 0x01, 0xc5, 0x5c, 0xef, 0xc3, 0x06, 0x12, 0xd7, 0x15, 0x4f, 0x45, 0x82, 0x60, 0xc0, 0xe6, 0xa0, + 0xdc, 0xb9, 0xf2, 0x21, 0x00, 0xd8, 0xd9, 0x6a, 0xb5, 0x41, 0x74, 0x5b, 0xf5, 0x4f, 0x14, 0x56, 0x46, 0xe1, 0x6a, + 0x75, 0x2d, 0x51, 0x60, 0x34, 0x5f, 0x4c, 0x51, 0xdf, 0x72, 0xdc, 0x93, 0x57, 0xd0, 0x4a, 0x29, 0xa2, 0x55, 0x49, + 0x69, 0x32, 0xd4, 0x69, 0xb6, 0xbe, 0x4f, 0xd2, 0x61, 0xdb, 0xa7, 0x1b, 0xdc, 0x4b, 0x15, 0x1a, 0x31, 0x5d, 0x2d, + 0xf9, 0xd4, 0x0c, 0xcd, 0x10, 0x42, 0x51, 0xae, 0xac, 0x98, 0xbd, 0x6d, 0x86, 0xe5, 0xc1, 0x41, 0xee, 0x0c, 0x74, + 0x5e, 0xb2, 0x89, 0x9f, 0x02, 0x10, 0xc9, 0xf9, 0x6d, 0xa6, 0x74, 0x97, 0x9f, 0xac, 0x10, 0xda, 0x30, 0x4b, 0x5b, + 0x5d, 0xb0, 0xc6, 0xe3, 0xeb, 0x98, 0x49, 0xaf, 0x1c, 0x45, 0x5b, 0xe3, 0x01, 0x45, 0x4b, 0xa3, 0x6a, 0x84, 0x82, + 0x82, 0xf2, 0x08, 0x3c, 0xc1, 0xaa, 0xd0, 0x9a, 0xee, 0x47, 0x53, 0x0a, 0x8e, 0x60, 0xab, 0x45, 0x94, 0x76, 0xe1, + 0x9e, 0x91, 0x22, 0x66, 0xe0, 0xed, 0xb0, 0x17, 0xeb, 0xdd, 0x6b, 0x76, 0xc0, 0x9c, 0x8a, 0x31, 0x17, 0x33, 0x5b, + 0x57, 0xac, 0x3d, 0x1b, 0xce, 0xc8, 0xc6, 0xc1, 0xd6, 0xb1, 0x8d, 0xfa, 0xdf, 0x5d, 0x33, 0xba, 0x2b, 0x73, 0xbd, + 0x26, 0x4a, 0x4b, 0xe9, 0xab, 0xfd, 0x81, 0x96, 0x32, 0x73, 0xd7, 0xbc, 0x37, 0xce, 0xd4, 0xae, 0x76, 0x98, 0xec, + 0xb5, 0xbb, 0xa5, 0xcd, 0x67, 0xa9, 0xa1, 0xab, 0x1d, 0x1b, 0x46, 0xa4, 0xf2, 0x45, 0x9a, 0x18, 0x60, 0x19, 0xc2, + 0xd4, 0xd0, 0xd1, 0x35, 0x4b, 0xd3, 0xaa, 0xf4, 0xd7, 0xf0, 0xf5, 0xdc, 0xf0, 0xf5, 0xcc, 0xf2, 0x75, 0xe0, 0x14, + 0xc0, 0xd7, 0xf5, 0x70, 0x55, 0xf7, 0x6c, 0xe3, 0x74, 0x66, 0x9a, 0xa3, 0xe7, 0xca, 0x8e, 0x86, 0xf9, 0x16, 0x16, + 0x02, 0x54, 0x6a, 0x5e, 0x1f, 0x03, 0xe3, 0x84, 0x01, 0x03, 0x50, 0xbb, 0x30, 0xa9, 0xeb, 0xa2, 0xf8, 0x18, 0x20, + 0x9c, 0x17, 0xb4, 0xa4, 0xec, 0x93, 0x17, 0xe0, 0xa4, 0x73, 0x96, 0x03, 0x42, 0x4c, 0x15, 0xff, 0x2a, 0x25, 0xca, + 0xae, 0x8e, 0x99, 0xd5, 0xe5, 0x76, 0x75, 0xc0, 0xe9, 0xab, 0xd5, 0x25, 0x77, 0xf3, 0x7a, 0xb5, 0x3c, 0x56, 0x2e, + 0xaf, 0xda, 0xef, 0xd5, 0x2a, 0x58, 0x2b, 0x01, 0xff, 0xbd, 0x31, 0x51, 0x44, 0x39, 0x3a, 0xf0, 0x00, 0x17, 0x33, + 0x50, 0x50, 0xe8, 0x45, 0x97, 0x22, 0xee, 0xd5, 0xa7, 0x1c, 0x3c, 0xca, 0x4d, 0xaf, 0xfb, 0x9f, 0xf2, 0xd9, 0x1c, + 0xb4, 0xb1, 0x35, 0x92, 0x9e, 0x50, 0x33, 0x61, 0x55, 0x5f, 0x6c, 0x29, 0xab, 0xf5, 0x51, 0xe7, 0xb1, 0x46, 0x4d, + 0xa5, 0xbd, 0xbc, 0xd7, 0x2a, 0x16, 0x65, 0x51, 0xc9, 0x38, 0xb6, 0x39, 0x55, 0x4e, 0xd7, 0x5d, 0x32, 0xb6, 0xe2, + 0x6d, 0xc0, 0x34, 0x1f, 0x66, 0xc0, 0xeb, 0x1c, 0xf6, 0x63, 0xc9, 0xdd, 0xdd, 0xff, 0xa2, 0x42, 0xce, 0xb2, 0x58, + 0x43, 0xdf, 0xb2, 0x28, 0x4e, 0xb4, 0x91, 0x8d, 0x4f, 0x76, 0x5b, 0xc3, 0x55, 0x9d, 0x31, 0x16, 0x07, 0x43, 0x7c, + 0xb2, 0xa9, 0x3a, 0x92, 0xe5, 0x8c, 0x27, 0x34, 0xf2, 0xf9, 0x9c, 0x66, 0x7e, 0x01, 0x5e, 0x55, 0xb3, 0xf7, 0x23, + 0x19, 0x2c, 0xdf, 0xd5, 0xdd, 0xab, 0xd1, 0x49, 0x01, 0xde, 0xaf, 0x2f, 0x36, 0x1d, 0xaf, 0xdf, 0x52, 0x91, 0x2b, + 0x45, 0xb4, 0xd4, 0x69, 0xbf, 0xa8, 0xc4, 0xd2, 0x17, 0xd1, 0xce, 0xf6, 0x95, 0x09, 0xe2, 0xb7, 0xc3, 0xc7, 0xe1, + 0x91, 0x8f, 0x94, 0x5b, 0xf8, 0x2b, 0x73, 0xe0, 0x9f, 0x5b, 0xb7, 0xf0, 0x0b, 0xf2, 0xbc, 0xee, 0x15, 0x4e, 0x24, + 0x79, 0xd1, 0x7f, 0x61, 0x2d, 0x66, 0x9e, 0xb2, 0xd1, 0x6d, 0xe0, 0xa7, 0x4c, 0x36, 0x21, 0xf4, 0xe6, 0xe3, 0xa5, + 0xae, 0x00, 0x97, 0xa2, 0x72, 0x67, 0x17, 0xd6, 0xd6, 0xc3, 0x52, 0x12, 0x7f, 0x3f, 0x65, 0x72, 0xdf, 0xc7, 0x33, + 0x72, 0x01, 0x3f, 0xf6, 0x97, 0xc1, 0xeb, 0x58, 0x4e, 0x43, 0x11, 0x67, 0x09, 0x9f, 0x05, 0xa8, 0xe1, 0xfb, 0x28, + 0xcc, 0x95, 0xbd, 0xf1, 0x39, 0x2a, 0xf6, 0x2f, 0xf0, 0x8d, 0x24, 0x7e, 0xdf, 0x6f, 0xcc, 0xf0, 0x1b, 0x49, 0x2e, + 0x8e, 0xf7, 0x97, 0x37, 0xb2, 0xe8, 0x5d, 0xe0, 0x9b, 0xd2, 0x63, 0x8f, 0xbf, 0x26, 0x01, 0x22, 0xbd, 0x1b, 0x03, + 0xcd, 0x29, 0x9f, 0x69, 0xcf, 0xbd, 0x8f, 0xf0, 0x07, 0x88, 0xab, 0x88, 0x8a, 0xdb, 0x98, 0xd0, 0xca, 0x1e, 0xf1, + 0xb9, 0x72, 0x11, 0xf8, 0x07, 0x07, 0x4e, 0x59, 0xa9, 0x2a, 0xe0, 0x13, 0x49, 0x6a, 0x06, 0x39, 0x7e, 0xaf, 0x22, + 0x34, 0x27, 0x32, 0x10, 0xc8, 0x0e, 0x13, 0x58, 0x3f, 0xb4, 0x39, 0x9a, 0x62, 0xa0, 0x3d, 0x0c, 0x21, 0x93, 0x54, + 0xc4, 0x92, 0x8b, 0x21, 0x72, 0xd5, 0x0f, 0xfc, 0x37, 0x72, 0x31, 0xf0, 0xfe, 0xd3, 0x3f, 0xfd, 0x38, 0xfe, 0x51, + 0x0c, 0x2f, 0xf0, 0x5b, 0x72, 0x78, 0x1c, 0xf4, 0xa3, 0x60, 0xaf, 0xd9, 0x5c, 0xfd, 0x78, 0x38, 0xf8, 0x47, 0xdc, + 0xfc, 0xe5, 0xa4, 0xf9, 0xc3, 0x10, 0xad, 0x82, 0x1f, 0x0f, 0xfb, 0x03, 0xf3, 0x34, 0xf8, 0x47, 0xef, 0xc7, 0x7c, + 0xf8, 0x67, 0x5d, 0xb8, 0x8f, 0xd0, 0xe1, 0x04, 0x2f, 0x24, 0x39, 0x6c, 0x36, 0x7b, 0x87, 0x13, 0x3c, 0x97, 0xe4, + 0x10, 0xfe, 0xbf, 0x24, 0xef, 0xe8, 0xe4, 0xc5, 0xcd, 0x3c, 0xb8, 0xe8, 0xad, 0xf6, 0x97, 0x7f, 0x2b, 0x60, 0xd4, + 0xc1, 0x3f, 0x7e, 0xfc, 0x31, 0xf7, 0x1f, 0xf4, 0xc8, 0xe1, 0xb0, 0x81, 0x02, 0x28, 0xfd, 0x33, 0x51, 0xff, 0x06, + 0xfd, 0x68, 0xf0, 0x0f, 0x03, 0x85, 0xff, 0xe0, 0xc7, 0x8b, 0xe3, 0x1e, 0x19, 0xae, 0x02, 0x7f, 0xf5, 0x00, 0xad, + 0x10, 0x5a, 0xed, 0xa3, 0x0b, 0xec, 0x4f, 0x7c, 0x84, 0x27, 0x92, 0x1c, 0x3e, 0x38, 0x9c, 0xe0, 0x2b, 0x49, 0x0e, + 0xfd, 0xc3, 0x09, 0x7e, 0x21, 0xc9, 0xe1, 0x3f, 0x82, 0x7e, 0xa4, 0x3d, 0x6c, 0x2b, 0xe5, 0xde, 0x58, 0x41, 0x70, + 0x23, 0x16, 0x34, 0x5e, 0x49, 0x26, 0x53, 0x8a, 0xf6, 0x0f, 0x19, 0x3e, 0x53, 0x68, 0x0a, 0x24, 0x38, 0x61, 0xc0, + 0xb6, 0x0b, 0x96, 0xe7, 0xb0, 0xd9, 0x40, 0x33, 0xfb, 0x91, 0xc0, 0xda, 0x0f, 0x90, 0x47, 0x12, 0x5f, 0xc5, 0xe9, + 0x82, 0xe6, 0x11, 0x2d, 0x10, 0x1e, 0x91, 0x33, 0x19, 0xb4, 0x11, 0x7e, 0x27, 0xe1, 0x47, 0x07, 0xe1, 0x33, 0x13, + 0xc0, 0x84, 0x83, 0xac, 0x89, 0x2a, 0xe3, 0x5a, 0x63, 0xf1, 0x11, 0x9e, 0x6f, 0xa9, 0x94, 0x53, 0xf0, 0x2e, 0x20, + 0x3c, 0xae, 0x85, 0x3b, 0xf1, 0x35, 0xb1, 0x24, 0xf1, 0x5e, 0x50, 0xfa, 0x5d, 0x9c, 0x7e, 0xa4, 0x22, 0xb8, 0xc1, + 0xed, 0xce, 0xe7, 0x58, 0xb9, 0xa0, 0xf7, 0xda, 0xa8, 0x5b, 0xc6, 0xaa, 0x4e, 0xa5, 0x8e, 0x11, 0x80, 0x90, 0xad, + 0xfb, 0x62, 0x60, 0xc7, 0xf7, 0xc4, 0x86, 0xc3, 0x4a, 0xc4, 0xd7, 0x3e, 0xaa, 0xc7, 0x45, 0x59, 0x76, 0x15, 0xa7, + 0x2c, 0xf1, 0x24, 0x9d, 0xcd, 0xd3, 0x58, 0x52, 0xcf, 0xac, 0xd7, 0x8b, 0x61, 0x20, 0xbf, 0x54, 0x19, 0x12, 0xc7, + 0xe0, 0x4c, 0x6c, 0xc0, 0x09, 0xce, 0x4a, 0x00, 0xd1, 0x29, 0xa3, 0x76, 0xbc, 0xae, 0x82, 0x5f, 0xeb, 0xf1, 0xbd, + 0x66, 0x1b, 0x1c, 0x61, 0x43, 0x25, 0x9e, 0x73, 0x9c, 0x11, 0x10, 0xa2, 0x9d, 0xbe, 0x7f, 0x9c, 0x5f, 0x4d, 0x7a, + 0x3e, 0xc4, 0x66, 0x38, 0x79, 0xab, 0xfc, 0x42, 0xd0, 0x60, 0x4a, 0x5a, 0xdd, 0xe9, 0x31, 0xed, 0x4e, 0x1b, 0x0d, + 0xab, 0x43, 0xa7, 0x44, 0x0c, 0xa6, 0xba, 0x7b, 0x8c, 0x13, 0xbc, 0x20, 0xcd, 0x36, 0x9e, 0x90, 0x96, 0xea, 0xd2, + 0x9d, 0x1c, 0xa7, 0x66, 0x9a, 0x83, 0x83, 0x80, 0x87, 0x69, 0x9c, 0xcb, 0x2f, 0xc1, 0xd8, 0x27, 0x13, 0x9c, 0x10, + 0x1e, 0xd2, 0x1b, 0x3a, 0x0a, 0x52, 0x84, 0x13, 0xc3, 0x69, 0x50, 0x17, 0x4d, 0x88, 0xd3, 0x0c, 0x8c, 0x08, 0xf2, + 0xb6, 0x9f, 0x0c, 0xda, 0x43, 0x42, 0x88, 0xbf, 0xd7, 0x6c, 0xfa, 0x7d, 0x4e, 0x16, 0x32, 0x82, 0x12, 0x47, 0x55, + 0x26, 0x73, 0x28, 0xea, 0x38, 0x45, 0xc1, 0x0b, 0x19, 0x4a, 0x9a, 0xcb, 0x00, 0x8a, 0xc1, 0xfc, 0xcf, 0x2d, 0x61, + 0xfb, 0xc7, 0x87, 0x7e, 0x03, 0x4a, 0x15, 0x71, 0x22, 0xcc, 0xc9, 0x25, 0x8a, 0x92, 0xc1, 0xd1, 0xd0, 0xe5, 0xff, + 0xaa, 0x10, 0x26, 0xbf, 0xec, 0x27, 0x83, 0x96, 0x9a, 0xbc, 0xe7, 0xf7, 0x03, 0x4e, 0x72, 0xad, 0xa0, 0xf5, 0xf3, + 0xe8, 0xad, 0x5a, 0x2a, 0x8a, 0x0c, 0x70, 0x66, 0xde, 0x05, 0x69, 0x76, 0xa2, 0x60, 0xe1, 0x2e, 0xa2, 0x09, 0x93, + 0x19, 0x2c, 0xe0, 0x98, 0x40, 0x7b, 0xcc, 0x09, 0xcc, 0x58, 0x75, 0xbb, 0x8c, 0xcc, 0xf3, 0x03, 0xff, 0x41, 0xff, + 0x4a, 0x46, 0x13, 0xa9, 0xa7, 0xbf, 0x92, 0xab, 0x15, 0xfc, 0x3f, 0x91, 0x7d, 0x4e, 0x2e, 0x55, 0xd1, 0xc2, 0x14, + 0xcd, 0xa1, 0xe8, 0x6d, 0x04, 0xa0, 0xe2, 0xbc, 0x54, 0xb2, 0xf4, 0x9e, 0x5c, 0x11, 0x05, 0xfb, 0xc1, 0x81, 0x18, + 0x4c, 0x1b, 0xed, 0x21, 0xf8, 0xf7, 0x85, 0xcc, 0xbf, 0x63, 0x72, 0x1a, 0xf8, 0x87, 0x3d, 0x1f, 0xf5, 0x7d, 0x0f, + 0xb6, 0xb6, 0x9b, 0x35, 0x88, 0xc6, 0x70, 0xda, 0x78, 0x23, 0xa3, 0x45, 0x8f, 0xb4, 0xfa, 0x01, 0x33, 0xfe, 0x3c, + 0x84, 0x53, 0xc3, 0x38, 0x5b, 0x78, 0x81, 0x1a, 0x52, 0x36, 0xec, 0xf3, 0x02, 0x35, 0x66, 0x8d, 0x2b, 0x14, 0xa5, + 0x8d, 0x59, 0x23, 0x58, 0x10, 0x42, 0x9a, 0x9d, 0xb2, 0x9b, 0x95, 0x7e, 0x53, 0x14, 0x5d, 0x59, 0x67, 0xe7, 0x40, + 0x1d, 0x87, 0xac, 0x11, 0x88, 0x01, 0x1d, 0xae, 0x56, 0xfe, 0x71, 0xbf, 0xe7, 0xa3, 0x46, 0x60, 0x09, 0xed, 0xd0, + 0x52, 0x1a, 0x42, 0x98, 0x0d, 0x0b, 0x13, 0x4a, 0x7a, 0x59, 0x0b, 0x1b, 0x2d, 0xab, 0xc3, 0xee, 0xf0, 0x00, 0x5a, + 0x94, 0x76, 0x8c, 0xd6, 0x57, 0xe7, 0xb0, 0x4c, 0x4b, 0xcc, 0x19, 0x69, 0x61, 0x4e, 0xac, 0xef, 0x7a, 0x4a, 0x64, + 0x45, 0xf0, 0x29, 0xa9, 0x9a, 0xe3, 0x41, 0x8c, 0x93, 0x21, 0x79, 0xad, 0xed, 0x91, 0xae, 0xf5, 0x8b, 0xd3, 0x94, + 0xbc, 0x5c, 0x8b, 0xde, 0xc6, 0x10, 0x5b, 0xb9, 0x0e, 0x47, 0x0b, 0x21, 0x68, 0x26, 0xdf, 0xf0, 0xc4, 0xa8, 0x69, + 0x34, 0x05, 0x4b, 0x09, 0xc2, 0xb2, 0x18, 0x74, 0xb4, 0x8e, 0x3d, 0x19, 0x8b, 0x8d, 0xea, 0x09, 0x59, 0x68, 0xf5, + 0x49, 0x05, 0x6b, 0xbb, 0x13, 0x63, 0x17, 0x07, 0x08, 0x2f, 0x4c, 0x14, 0x37, 0x08, 0xc3, 0x70, 0x12, 0x8e, 0xa0, + 0x1a, 0x26, 0xc8, 0x51, 0xa1, 0xce, 0x51, 0x90, 0x93, 0xeb, 0x30, 0xa3, 0x37, 0x6a, 0xd6, 0x00, 0x55, 0x92, 0xd9, + 0x1e, 0xaf, 0xe3, 0x69, 0x57, 0xb1, 0x9b, 0x3c, 0xcc, 0x78, 0x42, 0x01, 0x3d, 0x10, 0xb7, 0x37, 0x45, 0xd3, 0x38, + 0x77, 0xe3, 0x53, 0x15, 0x7c, 0x03, 0xd7, 0x79, 0x3d, 0x01, 0x8f, 0xaf, 0xd2, 0xb5, 0xca, 0xc6, 0xda, 0x0d, 0x8e, + 0x10, 0x1b, 0x07, 0x93, 0x10, 0xe2, 0x7a, 0x8a, 0x84, 0x24, 0x98, 0x72, 0x13, 0x97, 0xa8, 0x66, 0xe5, 0x98, 0x57, + 0x24, 0x19, 0xf0, 0x46, 0x43, 0x79, 0xa1, 0x17, 0x9a, 0x24, 0x26, 0x08, 0x5f, 0x95, 0x67, 0xcb, 0xb6, 0x7b, 0x2b, + 0x49, 0x7d, 0xaa, 0xe0, 0xaa, 0xee, 0xce, 0x6d, 0x48, 0x89, 0x94, 0xa7, 0x50, 0x06, 0x33, 0x84, 0x9f, 0x91, 0xc3, + 0x60, 0x10, 0xf6, 0xff, 0x32, 0x44, 0xfd, 0x20, 0xfc, 0x33, 0x3a, 0xd4, 0x9c, 0xe3, 0x0a, 0x75, 0x53, 0x3d, 0xc7, + 0x52, 0xc5, 0x2f, 0xdb, 0x58, 0x79, 0x12, 0xa3, 0x0c, 0x67, 0xf1, 0x8c, 0x46, 0xcf, 0xe0, 0x90, 0x5b, 0xc2, 0x79, + 0x2b, 0x31, 0x50, 0x52, 0xf4, 0xcc, 0xf0, 0x92, 0xd0, 0xef, 0xbf, 0x92, 0xe5, 0x53, 0xdf, 0xef, 0x3f, 0xaf, 0x9e, + 0xfe, 0xe2, 0xf7, 0x7f, 0x91, 0xd1, 0xcf, 0x85, 0xf1, 0x76, 0xd7, 0xe6, 0x78, 0x6c, 0xe7, 0x28, 0xf4, 0xd6, 0x38, + 0xb8, 0x5b, 0xa0, 0x4d, 0x47, 0xc7, 0x04, 0x15, 0x6c, 0x5c, 0x32, 0xa3, 0x3c, 0x94, 0xf1, 0x04, 0x90, 0xea, 0xec, + 0x41, 0xee, 0xc6, 0xf5, 0xab, 0x15, 0x03, 0xa9, 0x58, 0x7a, 0x05, 0x64, 0x4e, 0x7a, 0x2d, 0xb4, 0xac, 0xb5, 0x55, + 0x3a, 0x53, 0x3d, 0x8e, 0x5e, 0xf2, 0xe9, 0x2b, 0xd2, 0xea, 0x5e, 0x1d, 0x4f, 0xba, 0x57, 0x8d, 0x06, 0xca, 0x2d, + 0x69, 0x2d, 0x06, 0x57, 0x43, 0xfc, 0x35, 0x38, 0xf5, 0x5c, 0x5a, 0xc2, 0xb5, 0xe5, 0x75, 0xcc, 0xf2, 0x1a, 0x8d, + 0xac, 0x40, 0x5d, 0xa7, 0xeb, 0x44, 0x77, 0x2d, 0x0a, 0x8d, 0x93, 0x75, 0x52, 0x7b, 0x8a, 0x54, 0x09, 0x24, 0x43, + 0x11, 0x42, 0x6e, 0x24, 0xda, 0x3a, 0x2a, 0x8c, 0x09, 0xdd, 0xd5, 0x99, 0x05, 0xf6, 0xa9, 0xa5, 0x44, 0x00, 0x58, + 0x80, 0xae, 0xa5, 0x27, 0x78, 0x86, 0x17, 0x8d, 0xb6, 0x22, 0xf3, 0x66, 0xbb, 0x5b, 0x1f, 0xeb, 0x49, 0x35, 0x16, + 0x5e, 0x34, 0xc8, 0xac, 0xc4, 0x52, 0x91, 0x35, 0x1a, 0x45, 0x3d, 0xd8, 0x69, 0x4f, 0x6e, 0x2d, 0x00, 0x71, 0xb3, + 0x9e, 0x94, 0x61, 0x25, 0x6c, 0x25, 0x53, 0x59, 0xc8, 0xb2, 0x8c, 0x0a, 0x90, 0xa2, 0x44, 0x62, 0x56, 0x14, 0x95, + 0x64, 0x07, 0x31, 0x8a, 0x29, 0x11, 0xc0, 0x79, 0x94, 0xdd, 0x85, 0x33, 0xcc, 0xf1, 0x54, 0xf1, 0x0d, 0x42, 0xc8, + 0x99, 0x4d, 0x67, 0x91, 0x8a, 0x07, 0xa5, 0x84, 0x39, 0x32, 0x29, 0x27, 0x34, 0x3c, 0xdf, 0x3f, 0xe5, 0x77, 0xda, + 0x64, 0x03, 0x36, 0x8c, 0x54, 0xb3, 0xd4, 0x70, 0xae, 0x98, 0x7c, 0x08, 0x24, 0x2a, 0xa3, 0x23, 0xa1, 0x62, 0x80, + 0xcf, 0x99, 0xa0, 0x4a, 0x07, 0xdf, 0xb7, 0x76, 0x5f, 0x5a, 0x57, 0x20, 0x53, 0xd7, 0x7b, 0x03, 0x88, 0x8c, 0xc1, + 0xb9, 0x93, 0x91, 0x8d, 0x66, 0xe7, 0xfb, 0x27, 0x6f, 0xb7, 0xd9, 0xc0, 0xab, 0x95, 0xb1, 0x7e, 0x95, 0x6e, 0x83, + 0xe3, 0x0a, 0xd2, 0xd4, 0xfc, 0x88, 0x82, 0x54, 0xa9, 0x48, 0x71, 0x20, 0x80, 0x8a, 0xce, 0xf7, 0x4f, 0xde, 0x07, + 0x42, 0xf9, 0x96, 0x10, 0x76, 0x97, 0x1d, 0x70, 0x12, 0x4c, 0x09, 0x45, 0x7a, 0xed, 0x25, 0xeb, 0xe2, 0x8e, 0x00, + 0x8f, 0xa6, 0xaa, 0x12, 0x2c, 0x88, 0x01, 0x1b, 0x92, 0xd4, 0x60, 0x80, 0xa4, 0x08, 0xa7, 0x35, 0xbb, 0x8c, 0xc0, + 0x06, 0xa8, 0xb9, 0xce, 0x60, 0x27, 0x42, 0xad, 0xfa, 0x21, 0x9c, 0xaa, 0x59, 0x65, 0xa1, 0x85, 0xc7, 0xb3, 0x8d, + 0xac, 0xb4, 0xca, 0x1c, 0xfd, 0x16, 0x6c, 0x27, 0xfb, 0xf0, 0x86, 0x58, 0x4b, 0xc2, 0x14, 0x3c, 0xb7, 0xe9, 0x63, + 0xe7, 0xfb, 0x27, 0xaf, 0x4d, 0x06, 0xd9, 0x3c, 0xb6, 0xfc, 0x7e, 0xc3, 0xc4, 0x3c, 0x79, 0x1d, 0x56, 0xb5, 0xaa, + 0xf1, 0xf9, 0xfe, 0xc9, 0x87, 0x6d, 0xcd, 0xa0, 0xbc, 0x58, 0x54, 0x36, 0xbe, 0x82, 0x6f, 0x49, 0xd3, 0x68, 0x69, + 0x84, 0x43, 0xc4, 0x0a, 0xac, 0x04, 0x52, 0x94, 0x17, 0xa5, 0x6b, 0xe4, 0x39, 0xce, 0x88, 0x0a, 0x03, 0xd5, 0x77, + 0xcd, 0xa8, 0x79, 0x8c, 0x67, 0x67, 0x23, 0x3e, 0xa7, 0x3b, 0x62, 0x43, 0x37, 0x28, 0x64, 0x33, 0x48, 0x9d, 0x51, + 0xa0, 0x33, 0xbc, 0xd7, 0x42, 0xdd, 0xba, 0xf8, 0xca, 0x14, 0x91, 0xf2, 0x9a, 0x6c, 0xc1, 0x53, 0xd2, 0xc2, 0x29, + 0x69, 0xe1, 0x98, 0xe4, 0x83, 0x96, 0x16, 0x10, 0xdd, 0xb8, 0x1c, 0x57, 0x8b, 0x19, 0xc8, 0x0a, 0x33, 0xa7, 0x55, + 0x0b, 0xe0, 0xa4, 0x1b, 0x2b, 0xdf, 0xa3, 0x92, 0xe9, 0x89, 0x22, 0x8b, 0xf7, 0x01, 0xc7, 0x5c, 0x0d, 0x7c, 0xc6, + 0x2e, 0x53, 0x48, 0x2c, 0x81, 0x55, 0x61, 0x89, 0xa2, 0xb2, 0x69, 0xdb, 0x34, 0x8d, 0x43, 0xb5, 0x4f, 0x1c, 0xc7, + 0x21, 0x70, 0x6e, 0x1c, 0x9b, 0x3c, 0x9c, 0x7c, 0xb3, 0xcb, 0xe3, 0x83, 0x83, 0x40, 0x77, 0xfa, 0x52, 0x06, 0xdc, + 0xd6, 0x57, 0x91, 0xbb, 0x6f, 0x35, 0xaf, 0x48, 0x90, 0x82, 0xbf, 0xd1, 0x48, 0x87, 0x05, 0x84, 0xa1, 0x83, 0xb8, + 0x8e, 0x41, 0x0b, 0xbc, 0xd2, 0xf5, 0xea, 0xcb, 0x6f, 0x34, 0xca, 0x28, 0x6d, 0x1d, 0x5b, 0x37, 0x38, 0x2b, 0xae, + 0x82, 0x32, 0xf5, 0xa7, 0xb5, 0x91, 0x2f, 0x65, 0x41, 0x40, 0xcc, 0xa5, 0x59, 0x66, 0x17, 0xe3, 0x1c, 0x09, 0x06, + 0xed, 0xbe, 0x34, 0x59, 0x0b, 0x58, 0x65, 0x57, 0x99, 0x46, 0x96, 0x9d, 0x75, 0x50, 0x64, 0x1b, 0x41, 0x54, 0x0a, + 0x1a, 0x35, 0x0a, 0x43, 0xde, 0xef, 0x37, 0x73, 0x2e, 0x71, 0x8e, 0x8c, 0x93, 0x4b, 0x41, 0xa1, 0x90, 0xd5, 0x29, + 0x91, 0xf2, 0x92, 0xcc, 0x77, 0x93, 0xfc, 0x89, 0x43, 0xf2, 0xcf, 0x08, 0x75, 0xc8, 0x5f, 0xbb, 0x38, 0x42, 0x6e, + 0x9c, 0x0b, 0xb9, 0xad, 0x3a, 0x9d, 0x13, 0x70, 0xa2, 0xd5, 0x31, 0x5a, 0x0b, 0x2b, 0xee, 0x60, 0x28, 0xee, 0x09, + 0x51, 0x6e, 0x48, 0x6c, 0x63, 0xc0, 0x41, 0x15, 0x54, 0x83, 0xa9, 0xb7, 0xf9, 0xf4, 0x5c, 0x0e, 0x78, 0xf2, 0xe1, + 0xee, 0x78, 0xe8, 0xe9, 0x7c, 0xf3, 0xe4, 0x3a, 0xb9, 0x9f, 0xb0, 0x6a, 0xe7, 0xe0, 0xd6, 0x33, 0x41, 0x61, 0xfe, + 0x32, 0x8e, 0x5d, 0x67, 0x3e, 0x6b, 0x87, 0xd0, 0xca, 0x3f, 0x80, 0xb6, 0xdd, 0x56, 0x2d, 0xa8, 0x33, 0x2c, 0xf0, + 0x23, 0x9d, 0x81, 0x1a, 0x8b, 0x1d, 0xec, 0xe3, 0x44, 0x35, 0xa0, 0x59, 0xb2, 0xbd, 0xfa, 0x59, 0x61, 0xc8, 0x44, + 0x83, 0x86, 0x96, 0xc0, 0xff, 0x34, 0xc9, 0x03, 0xdd, 0x28, 0xb9, 0x00, 0x08, 0x9a, 0x2b, 0x3c, 0x55, 0x08, 0xf3, + 0xfd, 0xca, 0xfb, 0xfe, 0x72, 0x8f, 0x90, 0x79, 0xe5, 0x7d, 0x7c, 0x57, 0xa5, 0x5e, 0x01, 0x59, 0xa0, 0x08, 0xcc, + 0xc7, 0xb2, 0x40, 0x87, 0x2f, 0xcf, 0x6c, 0x73, 0x65, 0x42, 0x86, 0x95, 0xc6, 0xed, 0x84, 0x36, 0x95, 0x5b, 0x4e, + 0xd7, 0x5b, 0x34, 0xac, 0xd5, 0xee, 0x43, 0xed, 0x7b, 0xa9, 0x60, 0x84, 0xe7, 0xf7, 0xaa, 0xb5, 0x1d, 0xb7, 0xf8, + 0xb8, 0x9e, 0xbf, 0xb2, 0xb6, 0x29, 0x21, 0xcb, 0x72, 0x2a, 0xe4, 0x33, 0x3a, 0xe6, 0x02, 0x62, 0x16, 0x25, 0x4e, + 0x50, 0xb1, 0xef, 0xf8, 0xed, 0xd4, 0xfa, 0x9c, 0x40, 0xc1, 0xda, 0x02, 0xd5, 0xaf, 0x8f, 0x2a, 0x68, 0x7d, 0xbe, + 0xde, 0x6b, 0x7e, 0x70, 0xf0, 0xa1, 0x42, 0x93, 0x81, 0x52, 0x41, 0xe1, 0x30, 0x2d, 0xad, 0xd2, 0x98, 0x48, 0xee, + 0x7e, 0x50, 0x3a, 0x01, 0x2c, 0xc3, 0x70, 0x79, 0xcf, 0x4b, 0x22, 0x8b, 0xc9, 0x3a, 0x8b, 0x37, 0xce, 0x09, 0xe6, + 0x1a, 0x2e, 0xc0, 0xe1, 0xc1, 0xd4, 0xd6, 0xde, 0xa2, 0xbc, 0x4a, 0x86, 0x2d, 0x61, 0x38, 0x05, 0x64, 0x05, 0xca, + 0x0c, 0x71, 0x28, 0x70, 0xab, 0x59, 0x72, 0x0a, 0x7a, 0xe5, 0x14, 0xe7, 0xe1, 0x14, 0xd2, 0x5f, 0x6b, 0x47, 0x16, + 0x21, 0xac, 0x13, 0x73, 0x9c, 0x54, 0x82, 0x93, 0x97, 0xdb, 0x5c, 0xca, 0x96, 0xa8, 0xa9, 0x92, 0x3a, 0xaa, 0x05, + 0x2a, 0x3b, 0x84, 0x57, 0x01, 0x33, 0x8a, 0x9b, 0x8d, 0x9b, 0x01, 0x03, 0x7e, 0x26, 0x03, 0x1d, 0x8c, 0x02, 0x99, + 0xc1, 0xc3, 0x45, 0x50, 0x9b, 0xba, 0xcb, 0x55, 0x37, 0x6c, 0x10, 0x37, 0x75, 0xd1, 0xc4, 0x55, 0x5c, 0xef, 0xb4, + 0xe2, 0xa5, 0x63, 0x9d, 0x41, 0x2d, 0x2d, 0x17, 0xac, 0x12, 0x49, 0x9c, 0xe5, 0x8f, 0x75, 0x52, 0x74, 0xd9, 0x08, + 0x53, 0x05, 0xc6, 0x4b, 0xb5, 0x07, 0xb4, 0x00, 0xfa, 0x5a, 0x9e, 0x48, 0x67, 0x47, 0xad, 0x13, 0x5b, 0xcd, 0xe9, + 0x48, 0xfd, 0x77, 0x90, 0xea, 0xb2, 0x7e, 0xe6, 0x5f, 0x2a, 0x59, 0xc8, 0x70, 0x5e, 0x63, 0xec, 0x99, 0x62, 0xec, + 0x08, 0xf4, 0x34, 0x9b, 0xf8, 0xdd, 0x37, 0x19, 0x2f, 0xcc, 0x48, 0x39, 0x43, 0x62, 0x5f, 0x97, 0xd1, 0x72, 0xe7, + 0xf7, 0xda, 0x6e, 0x44, 0x8c, 0x40, 0x16, 0x10, 0x36, 0x9c, 0x3d, 0x43, 0x38, 0x6f, 0x34, 0xba, 0xf9, 0x31, 0xad, + 0x9c, 0x24, 0x15, 0x8c, 0x0c, 0x02, 0xba, 0x40, 0xf0, 0x35, 0x19, 0x0a, 0x21, 0x7f, 0x9b, 0x99, 0x9d, 0x83, 0xaf, + 0xfd, 0xe4, 0x5d, 0xe0, 0x72, 0x35, 0xb7, 0x6d, 0x19, 0x34, 0x85, 0xf5, 0x04, 0x55, 0xc0, 0xe5, 0xeb, 0xbb, 0x13, + 0x3c, 0x00, 0xee, 0xbd, 0x36, 0x86, 0x54, 0x34, 0xd4, 0x95, 0x9a, 0x25, 0x94, 0xa7, 0xaf, 0x8b, 0xaa, 0xac, 0x44, + 0x77, 0xb2, 0xae, 0xac, 0x8c, 0x59, 0x49, 0xf2, 0xa2, 0xc8, 0x69, 0x15, 0xde, 0x5f, 0x4b, 0xbf, 0x54, 0xc2, 0x65, + 0xd3, 0xdb, 0x7e, 0x3a, 0x27, 0x12, 0x3b, 0x84, 0xfa, 0xf5, 0xae, 0xd8, 0x47, 0x05, 0x26, 0x9c, 0x6b, 0x23, 0x14, + 0x7f, 0xde, 0x26, 0x14, 0x71, 0x66, 0x8e, 0xbc, 0x12, 0x88, 0xed, 0x7b, 0x08, 0x44, 0xe3, 0x66, 0xb7, 0x32, 0x11, + 0xd4, 0x91, 0x9a, 0x4c, 0xac, 0x6f, 0x29, 0xc9, 0x30, 0x33, 0xbb, 0xd1, 0xeb, 0xac, 0x56, 0x6c, 0xd0, 0x02, 0x37, + 0x92, 0xef, 0xc3, 0xcf, 0xb6, 0xfe, 0xe9, 0x70, 0x62, 0xed, 0x06, 0x0e, 0x58, 0x69, 0xb2, 0xa0, 0x10, 0x12, 0x9c, + 0x03, 0x95, 0x94, 0xa5, 0x68, 0xda, 0x50, 0x90, 0x21, 0x70, 0xc2, 0xca, 0x30, 0x13, 0x40, 0xac, 0x64, 0x85, 0x31, + 0x20, 0x83, 0xad, 0xb9, 0x7f, 0xd6, 0xbc, 0xfc, 0xb4, 0x26, 0x5a, 0x93, 0x2b, 0x5a, 0x7d, 0xa8, 0xe5, 0x1b, 0x18, + 0x08, 0x8c, 0x7e, 0xb8, 0xa7, 0x4c, 0xd0, 0x4a, 0x94, 0x23, 0x57, 0x0e, 0xe1, 0x16, 0x38, 0xd1, 0xf6, 0x3e, 0xe8, + 0x08, 0xef, 0x16, 0x69, 0x82, 0xb9, 0x43, 0xd7, 0x2f, 0x89, 0xac, 0xb1, 0x92, 0x29, 0x31, 0x96, 0x12, 0x8e, 0x15, + 0x99, 0x4a, 0x92, 0x0d, 0x5a, 0x43, 0x50, 0x40, 0xbb, 0xe9, 0x71, 0x56, 0x99, 0xc0, 0x69, 0xa3, 0x81, 0x62, 0x3b, + 0xeb, 0x74, 0xc0, 0x1a, 0xe9, 0x10, 0x53, 0x9c, 0x6a, 0xc3, 0xe4, 0xec, 0xe0, 0x20, 0x88, 0xab, 0x79, 0x07, 0xe9, + 0x10, 0x61, 0xbe, 0x5a, 0x05, 0x0a, 0xac, 0x18, 0xad, 0x56, 0xb1, 0x0b, 0x96, 0xaa, 0x86, 0x6e, 0xf3, 0xbe, 0x24, + 0x73, 0x25, 0x00, 0xe7, 0x00, 0x61, 0x83, 0x04, 0xb1, 0x71, 0xef, 0xc5, 0xe0, 0x8e, 0x6a, 0x64, 0x83, 0xb4, 0xd1, + 0x1e, 0x3a, 0x8c, 0x6b, 0x90, 0x0e, 0x49, 0x5c, 0xf0, 0x83, 0x83, 0xbd, 0xdc, 0x88, 0xc8, 0x9f, 0x40, 0x94, 0xfd, + 0xa4, 0x24, 0x8b, 0x1e, 0xd0, 0xdd, 0x8d, 0x75, 0x67, 0x40, 0x49, 0x51, 0x66, 0x5b, 0x6d, 0xbb, 0x5a, 0x16, 0x44, + 0xd9, 0x08, 0x9b, 0x60, 0x70, 0x1f, 0x2c, 0xfb, 0x92, 0xcc, 0x5f, 0xc9, 0x32, 0xc7, 0xfa, 0xe7, 0xad, 0x99, 0xd5, + 0x61, 0x18, 0xc6, 0x62, 0xa2, 0x62, 0x19, 0x36, 0x0c, 0xab, 0x88, 0xff, 0xc8, 0x80, 0xe9, 0x4c, 0x3c, 0x28, 0xe7, + 0x1a, 0x12, 0x0d, 0xbe, 0x55, 0x6d, 0xec, 0x5d, 0x92, 0x9f, 0xb6, 0x7a, 0x19, 0x34, 0x24, 0xcf, 0x7f, 0x2b, 0x24, + 0x0f, 0x0d, 0x24, 0x9a, 0x3c, 0xd6, 0x70, 0xb6, 0x03, 0x17, 0x3f, 0xc9, 0x35, 0x9c, 0xed, 0xc6, 0xad, 0xc5, 0xd4, + 0x2f, 0xbb, 0xe0, 0x73, 0x78, 0x83, 0x06, 0xb4, 0x2a, 0x70, 0xa0, 0x7c, 0xb4, 0xae, 0x7b, 0x69, 0x56, 0x0a, 0xc2, + 0x54, 0x92, 0x80, 0xd5, 0x0f, 0x40, 0xa5, 0x8d, 0x3a, 0x86, 0x2f, 0x8b, 0xe6, 0xc8, 0x71, 0x09, 0xd4, 0x53, 0x57, + 0x80, 0x9c, 0x8c, 0xb7, 0x7d, 0x7e, 0x70, 0x00, 0xb6, 0x01, 0x28, 0x71, 0xe1, 0x28, 0x9e, 0xcb, 0x85, 0x00, 0x55, + 0x2a, 0xb7, 0xbf, 0xa1, 0x18, 0x6e, 0x81, 0xa8, 0x32, 0xf8, 0x01, 0x05, 0xf3, 0x38, 0xcf, 0xd9, 0x95, 0x2e, 0x33, + 0xbf, 0x31, 0x27, 0x96, 0x94, 0x73, 0xad, 0x13, 0x66, 0xa8, 0x9b, 0x19, 0x3a, 0xad, 0xa3, 0xed, 0xc5, 0x15, 0xcd, + 0xe4, 0x2b, 0x96, 0x4b, 0x9a, 0xc1, 0xf2, 0x2b, 0x8a, 0x83, 0x15, 0xe5, 0x08, 0x0e, 0x6c, 0xad, 0x57, 0x9c, 0x24, + 0x77, 0x76, 0x91, 0x75, 0x1d, 0x68, 0x1a, 0x67, 0x49, 0xaa, 0x27, 0x71, 0xf3, 0x19, 0x6d, 0x0e, 0x67, 0xd9, 0xd2, + 0xcd, 0xa7, 0xa9, 0x94, 0x0d, 0xc5, 0xdd, 0x03, 0x46, 0xac, 0x24, 0xb0, 0xd2, 0xf3, 0x4e, 0xad, 0x05, 0x22, 0xde, + 0x3b, 0x36, 0xc1, 0x5d, 0x09, 0x96, 0x0e, 0x47, 0x0d, 0xeb, 0x70, 0x5a, 0xba, 0xf9, 0x72, 0xeb, 0x95, 0xb6, 0x6d, + 0xc2, 0x41, 0xd1, 0xc9, 0xe3, 0xdd, 0x96, 0xd5, 0x6b, 0x2b, 0x39, 0xac, 0xb4, 0x60, 0xf7, 0x65, 0xcc, 0x68, 0x69, + 0xc9, 0x0b, 0xd9, 0xa3, 0xb8, 0x2f, 0xc9, 0x73, 0xb8, 0x33, 0xf4, 0x52, 0xce, 0xd2, 0xb5, 0xab, 0x31, 0xdd, 0xfd, + 0x52, 0xfb, 0xdf, 0x97, 0xc1, 0x4b, 0xfc, 0x1e, 0x02, 0xbb, 0x5f, 0x55, 0xcd, 0x37, 0x03, 0xba, 0x5f, 0x55, 0x08, + 0xfa, 0x2a, 0xda, 0x68, 0xe7, 0x04, 0x72, 0x3b, 0xe1, 0xd3, 0xb0, 0xe5, 0x5b, 0x6d, 0xe9, 0x67, 0x1d, 0x46, 0xd2, + 0x99, 0x96, 0xea, 0x3c, 0xe0, 0x2a, 0x4f, 0x0d, 0xf2, 0xe5, 0xea, 0x16, 0x12, 0x35, 0x19, 0x86, 0x5a, 0x87, 0xdf, + 0xb5, 0x3d, 0x46, 0xc6, 0x64, 0xda, 0xce, 0xf8, 0x3a, 0x16, 0x72, 0x1f, 0x4e, 0x19, 0xdf, 0xb8, 0x87, 0x37, 0x25, + 0xe0, 0x41, 0xbb, 0xdf, 0x14, 0x8e, 0xb1, 0x9d, 0xeb, 0x7b, 0x40, 0xee, 0xf8, 0x84, 0x5b, 0xdd, 0xad, 0x6e, 0x65, + 0x7c, 0x0d, 0xf6, 0x3f, 0xc2, 0x53, 0x7b, 0x39, 0x8e, 0x1a, 0x0e, 0x4c, 0xa3, 0x65, 0x51, 0x3a, 0x05, 0xb8, 0x56, + 0xde, 0x04, 0xc2, 0xbc, 0x50, 0x01, 0xee, 0x1f, 0xf0, 0x37, 0x86, 0x25, 0x8e, 0x4b, 0x8e, 0x73, 0x72, 0x5f, 0x8e, + 0xa8, 0xc1, 0x2f, 0xe3, 0xf7, 0x40, 0xc7, 0x8a, 0x42, 0x0b, 0x4b, 0x45, 0xcf, 0xb9, 0x59, 0xc8, 0xce, 0xb4, 0x54, + 0x4c, 0xcb, 0x94, 0x1a, 0x35, 0xcd, 0x96, 0x3c, 0x4e, 0x6b, 0x65, 0xcb, 0xf2, 0x54, 0xd5, 0xe6, 0x45, 0x3b, 0xb0, + 0x58, 0x85, 0x16, 0x57, 0xab, 0xa0, 0x8e, 0x6a, 0xc2, 0x9c, 0x48, 0x06, 0xc2, 0xcc, 0xc9, 0xa8, 0xa8, 0x69, 0xd6, + 0xba, 0x4f, 0x80, 0xd6, 0x13, 0x8a, 0xac, 0x6e, 0x5e, 0x83, 0xc3, 0x75, 0x21, 0xe8, 0xee, 0xae, 0x4f, 0x01, 0xeb, + 0xd5, 0x95, 0x13, 0x39, 0x18, 0xfa, 0xb9, 0x4c, 0x95, 0xad, 0x72, 0x5a, 0xb7, 0xe0, 0x17, 0xdd, 0x91, 0x2c, 0x6b, + 0x50, 0xb7, 0x59, 0xef, 0x24, 0x1b, 0x3d, 0xe7, 0xbb, 0x92, 0x8d, 0x6a, 0xda, 0xee, 0x5e, 0x0b, 0xdd, 0x9d, 0x96, + 0xaa, 0xe7, 0xda, 0xde, 0xe4, 0x37, 0x4c, 0xd7, 0x06, 0xda, 0xd4, 0x68, 0xb6, 0x5c, 0xe5, 0xac, 0x28, 0xc6, 0xe5, + 0x65, 0x02, 0x95, 0xbb, 0x33, 0xd6, 0xf4, 0x6f, 0xac, 0x46, 0x75, 0x1d, 0x37, 0xf8, 0x81, 0x4c, 0x52, 0x7e, 0x19, + 0xa7, 0xef, 0x61, 0xbe, 0xaa, 0xf2, 0xe5, 0x6d, 0x22, 0x62, 0x49, 0x0d, 0x77, 0xa9, 0x60, 0xf8, 0xc1, 0x81, 0xe1, + 0x07, 0xcd, 0xa7, 0xab, 0xfe, 0x78, 0xf9, 0xaa, 0x1c, 0x20, 0x1a, 0x17, 0x96, 0x65, 0x9c, 0xcb, 0xed, 0x73, 0xac, + 0xb3, 0xb0, 0xf3, 0x92, 0x85, 0x9d, 0xcb, 0x60, 0x7d, 0xa8, 0x20, 0xf8, 0x66, 0xfb, 0x28, 0x9b, 0x9c, 0xed, 0x9b, + 0xea, 0xe0, 0x7f, 0x13, 0xdd, 0xd9, 0xc7, 0xe1, 0x72, 0x47, 0xe1, 0x91, 0x4a, 0x57, 0xd1, 0x20, 0xbf, 0x83, 0xb4, + 0x03, 0x49, 0x7a, 0xce, 0x9d, 0x83, 0x4a, 0x4e, 0xd9, 0x44, 0xa0, 0x60, 0xb4, 0xc8, 0x25, 0x9f, 0x99, 0x31, 0x73, + 0x73, 0xcd, 0x48, 0x55, 0x82, 0x2b, 0x5a, 0x45, 0xdb, 0xa3, 0xfa, 0x45, 0xae, 0xe5, 0x47, 0x96, 0x25, 0x51, 0x8e, + 0x8d, 0x14, 0xc9, 0xa3, 0xac, 0x20, 0x36, 0xd9, 0x78, 0xb3, 0x0e, 0x8f, 0x59, 0xc6, 0xf2, 0x29, 0x15, 0x01, 0x47, + 0xcb, 0x5d, 0x93, 0x71, 0x08, 0xc8, 0xe8, 0xc9, 0xf0, 0xb7, 0xd5, 0x85, 0xbf, 0x10, 0x46, 0x03, 0x3f, 0xd0, 0x8c, + 0xca, 0x29, 0x4f, 0x20, 0x31, 0x25, 0x4c, 0xca, 0x1b, 0x4d, 0x07, 0x07, 0x7b, 0x81, 0xaf, 0xdc, 0x12, 0x70, 0xf5, + 0xdb, 0xad, 0x41, 0xfd, 0x25, 0x5c, 0xcf, 0xa9, 0xa6, 0xa6, 0x68, 0x49, 0xd7, 0x6f, 0xb2, 0xc8, 0xf0, 0x23, 0xbd, + 0xc5, 0x02, 0x15, 0x45, 0xa4, 0xa1, 0xf6, 0xc7, 0x8c, 0xa6, 0x89, 0x8f, 0x3f, 0xd2, 0xdb, 0xa8, 0xbc, 0x2d, 0xae, + 0x2e, 0x37, 0xab, 0x0d, 0xf4, 0xf9, 0x75, 0xe6, 0xe3, 0x6a, 0x92, 0x68, 0x59, 0x60, 0x2e, 0xd8, 0x04, 0x88, 0xf3, + 0x6f, 0xf4, 0x36, 0xd2, 0xe3, 0x31, 0xe7, 0xb2, 0x1e, 0x5a, 0x5a, 0xd4, 0x87, 0x4e, 0xb1, 0xbb, 0x0d, 0xc6, 0xa0, + 0x18, 0xa8, 0xbe, 0x43, 0x52, 0x6b, 0x57, 0x99, 0x87, 0x08, 0x15, 0xf7, 0x5d, 0x0a, 0xfe, 0xc2, 0x15, 0x6d, 0xb2, + 0x96, 0xfa, 0xba, 0xd6, 0x89, 0x42, 0x87, 0x2a, 0xd7, 0xe3, 0x3c, 0x10, 0xf6, 0xd4, 0x99, 0x3b, 0x08, 0x8e, 0x23, + 0xec, 0x0b, 0x69, 0x06, 0x8d, 0xbe, 0xd5, 0x29, 0x21, 0x55, 0x24, 0xe9, 0x75, 0xd5, 0xcf, 0x3b, 0x0f, 0x00, 0xef, + 0x90, 0xd2, 0x12, 0xab, 0xeb, 0x98, 0x85, 0x4d, 0x17, 0xfd, 0x4e, 0x92, 0x60, 0x69, 0x97, 0x10, 0x09, 0x17, 0x8b, + 0xb2, 0x00, 0x2a, 0x34, 0xf4, 0xa5, 0x33, 0x00, 0xd9, 0x38, 0x60, 0x1b, 0x52, 0x33, 0x53, 0x52, 0x33, 0x74, 0x30, + 0xbe, 0x43, 0x4a, 0x52, 0x85, 0x0c, 0xa5, 0x44, 0x2a, 0xa1, 0x67, 0x36, 0xd7, 0x90, 0x90, 0xbb, 0xa1, 0xe5, 0xf5, + 0x39, 0xbd, 0xe7, 0x59, 0x0d, 0xac, 0x40, 0x8d, 0x83, 0x8a, 0x08, 0x96, 0x44, 0x75, 0x83, 0xc2, 0xba, 0x73, 0x84, + 0xcd, 0x6f, 0x0d, 0x78, 0x68, 0x97, 0x45, 0x2c, 0x4a, 0x82, 0x29, 0x5a, 0x8a, 0x60, 0x8a, 0x33, 0xc8, 0x47, 0xe4, + 0x45, 0x09, 0x3f, 0x75, 0x77, 0xa3, 0x96, 0xad, 0xbc, 0xfd, 0x8a, 0x1f, 0x28, 0xf3, 0x12, 0x72, 0x34, 0xb1, 0xb0, + 0x3c, 0x45, 0x04, 0xea, 0xae, 0x9d, 0xb3, 0x6d, 0x5f, 0x99, 0x14, 0x1d, 0x03, 0xd8, 0x77, 0x32, 0x58, 0x3a, 0xab, + 0x70, 0xef, 0x72, 0x9b, 0x2b, 0x7f, 0x26, 0xd8, 0x57, 0x25, 0x91, 0x06, 0x39, 0x59, 0x93, 0x38, 0x77, 0xe7, 0x5a, + 0xfe, 0xbc, 0xa0, 0xe2, 0xf6, 0x8c, 0x42, 0xae, 0x33, 0x87, 0xbb, 0xbe, 0xd5, 0x36, 0x54, 0x79, 0xea, 0xfd, 0x4c, + 0x29, 0x2b, 0x45, 0xfd, 0x12, 0xe0, 0xfa, 0x15, 0xc1, 0x42, 0x45, 0x1b, 0x1d, 0x47, 0x8c, 0x3e, 0x2d, 0x74, 0xe7, + 0xe5, 0x49, 0xda, 0x65, 0xe0, 0x5f, 0xab, 0x30, 0x6d, 0x82, 0x05, 0x98, 0xbb, 0x17, 0x52, 0x07, 0xf9, 0x70, 0xdd, + 0x2b, 0x03, 0x45, 0x10, 0xbe, 0xcb, 0x76, 0x2f, 0x75, 0x5b, 0xd6, 0xec, 0xee, 0xa5, 0xd6, 0x82, 0x7e, 0x2a, 0xe5, + 0x07, 0x9b, 0x79, 0xca, 0xcb, 0xcb, 0xac, 0x28, 0x50, 0x01, 0xe0, 0x7d, 0xdf, 0x0d, 0x82, 0xef, 0x4d, 0xd2, 0x60, + 0x08, 0xb1, 0xd8, 0xb3, 0x94, 0x5b, 0x26, 0x5e, 0xcd, 0xff, 0xfd, 0xc6, 0xfc, 0xdf, 0x3b, 0x57, 0x4e, 0xc1, 0x34, + 0x9a, 0x64, 0x34, 0xb1, 0xac, 0x13, 0x69, 0x02, 0x54, 0x7a, 0x5b, 0x2e, 0xc9, 0xc7, 0x8b, 0x08, 0x34, 0xae, 0xe5, + 0x98, 0x67, 0xb2, 0x39, 0x8e, 0x67, 0x2c, 0xbd, 0x8d, 0x16, 0xac, 0x39, 0xe3, 0x19, 0xcf, 0xe7, 0xf1, 0x88, 0xe2, + 0xfc, 0x36, 0x97, 0x74, 0xd6, 0x5c, 0x30, 0xfc, 0x92, 0xa6, 0x57, 0x54, 0xb2, 0x51, 0x8c, 0xfd, 0x13, 0xc1, 0xe2, + 0xd4, 0x7b, 0x13, 0x0b, 0xc1, 0xaf, 0x7d, 0xfc, 0x8e, 0x5f, 0x72, 0xc9, 0xf1, 0xdb, 0x9b, 0xdb, 0x09, 0xcd, 0xf0, + 0x87, 0xcb, 0x45, 0x26, 0x17, 0x38, 0x8f, 0xb3, 0xbc, 0x99, 0x53, 0xc1, 0xc6, 0xdd, 0x11, 0x4f, 0xb9, 0x68, 0x42, + 0xca, 0xf6, 0x8c, 0x46, 0x29, 0x9b, 0x4c, 0xa5, 0x97, 0xc4, 0xe2, 0x63, 0xb7, 0xd9, 0x9c, 0x0b, 0x36, 0x8b, 0xc5, + 0x6d, 0x53, 0xb5, 0x88, 0x3e, 0x6b, 0x1d, 0xc5, 0x9f, 0x8f, 0x1f, 0x76, 0xa5, 0x88, 0xb3, 0x9c, 0xc1, 0x36, 0x45, + 0x71, 0x9a, 0x7a, 0x47, 0x8f, 0x5a, 0xb3, 0x7c, 0x4f, 0x07, 0xf2, 0xe2, 0x4c, 0x16, 0x17, 0xf8, 0x23, 0xc0, 0x1d, + 0x5e, 0xca, 0x0c, 0x5f, 0x2e, 0xa4, 0xe4, 0xd9, 0x72, 0xb4, 0x10, 0x39, 0x17, 0xd1, 0x9c, 0xb3, 0x4c, 0x52, 0xd1, + 0xbd, 0xe4, 0x22, 0xa1, 0xa2, 0x29, 0xe2, 0x84, 0x2d, 0xf2, 0xe8, 0xe1, 0xfc, 0xa6, 0x0b, 0x9a, 0xc5, 0x44, 0xf0, + 0x45, 0x96, 0x98, 0xb9, 0x58, 0x36, 0xa5, 0x82, 0x49, 0xb7, 0x42, 0xbd, 0xc2, 0x24, 0x4a, 0x59, 0x46, 0x63, 0xd1, + 0x9c, 0x40, 0x67, 0x30, 0x8b, 0x5a, 0x09, 0x9d, 0x60, 0x31, 0xb9, 0x8c, 0x83, 0x76, 0xe7, 0x09, 0xb6, 0x7f, 0xc3, + 0x47, 0xc8, 0x6b, 0x6d, 0x2f, 0x6e, 0xb7, 0x5a, 0x7f, 0x42, 0xdd, 0xb5, 0x59, 0x14, 0x40, 0x51, 0x7b, 0x7e, 0xe3, + 0xe5, 0x1c, 0x72, 0xda, 0xb6, 0xf5, 0xec, 0xce, 0xe3, 0x04, 0x12, 0x82, 0xa3, 0xce, 0xfc, 0xa6, 0x80, 0xd5, 0x45, + 0x3a, 0xc9, 0xd4, 0x2c, 0xd2, 0x3c, 0x2d, 0x7f, 0x2b, 0xc4, 0x4f, 0xb7, 0x43, 0xdc, 0xb1, 0x10, 0x57, 0x58, 0x6f, + 0x26, 0x0b, 0xa1, 0x62, 0xab, 0x51, 0x3b, 0xd7, 0x80, 0x4c, 0xf9, 0x15, 0x15, 0x16, 0x0e, 0xf5, 0xf0, 0x9b, 0xc1, + 0xe8, 0x6c, 0x07, 0xe3, 0xe9, 0xa7, 0xc0, 0x10, 0x59, 0xb2, 0xac, 0xef, 0x6b, 0x5b, 0xd0, 0x59, 0x77, 0x4a, 0x81, + 0x9e, 0xa2, 0x0e, 0xfc, 0xbe, 0x66, 0x89, 0x9c, 0xea, 0x9f, 0x8a, 0x9c, 0xaf, 0x75, 0xdd, 0xa3, 0x56, 0x4b, 0x3f, + 0xe7, 0xec, 0x17, 0x1a, 0xb5, 0x43, 0x68, 0x50, 0x5c, 0xe0, 0xbf, 0x95, 0x97, 0x79, 0xeb, 0xdc, 0x13, 0xff, 0xe0, + 0xde, 0xf2, 0x75, 0x92, 0x14, 0xab, 0x1b, 0xd1, 0x58, 0x58, 0x59, 0xa9, 0x85, 0x0f, 0xb8, 0xed, 0xd4, 0x79, 0x22, + 0xac, 0x57, 0xde, 0xe2, 0x64, 0xfd, 0x1f, 0x74, 0xde, 0x45, 0x04, 0x91, 0x0e, 0x27, 0xd9, 0x90, 0x77, 0xb3, 0x1e, + 0x69, 0x75, 0xb3, 0x66, 0x13, 0x05, 0x9c, 0x88, 0x41, 0x66, 0xd2, 0xf3, 0x02, 0xd6, 0xe7, 0xca, 0xd8, 0xce, 0x51, + 0xc4, 0xe1, 0xaa, 0xe9, 0x6a, 0x55, 0x85, 0x01, 0x98, 0xba, 0xae, 0xf1, 0x37, 0x69, 0x1a, 0xe0, 0xdc, 0xe1, 0xe4, + 0x99, 0x7d, 0xb1, 0x8b, 0xb0, 0xbc, 0x22, 0xe5, 0x23, 0x85, 0xb9, 0x70, 0x1e, 0xcb, 0x29, 0x78, 0x29, 0x4a, 0xf1, + 0x53, 0x25, 0x31, 0xf9, 0x87, 0x3e, 0xea, 0x8b, 0x32, 0xc3, 0x0d, 0x32, 0xf9, 0x44, 0x01, 0xa3, 0x7c, 0x23, 0x09, + 0x8c, 0x88, 0x7f, 0x21, 0xda, 0xa6, 0xb3, 0x16, 0xdd, 0xf8, 0xbe, 0x16, 0x1d, 0xcd, 0x24, 0x53, 0xb9, 0xdb, 0x36, + 0xe2, 0x30, 0x8d, 0xf3, 0xf3, 0x91, 0xbe, 0x2b, 0x99, 0x57, 0x37, 0x03, 0x62, 0x05, 0xbd, 0x36, 0xd2, 0xa8, 0x50, + 0xf6, 0xe8, 0xf7, 0x72, 0xa7, 0x7d, 0x22, 0xee, 0xb2, 0x4f, 0xca, 0x85, 0xe7, 0x7c, 0x21, 0x46, 0x10, 0x8e, 0x34, + 0x52, 0x6f, 0xd3, 0x71, 0xe3, 0x2b, 0x15, 0xc3, 0xc7, 0xd2, 0xc9, 0x04, 0x95, 0x98, 0xb9, 0x2f, 0x95, 0xa0, 0x2a, + 0xe4, 0xa5, 0xef, 0x6b, 0x18, 0x11, 0x67, 0x97, 0x04, 0x32, 0x3b, 0x51, 0x49, 0x8d, 0x41, 0x46, 0x7a, 0x59, 0xb8, + 0xc8, 0xd8, 0xcf, 0x0b, 0x7a, 0xce, 0x40, 0xd7, 0x64, 0x21, 0x4b, 0x54, 0xac, 0x09, 0x64, 0x5f, 0xb3, 0x0d, 0xc1, + 0x0b, 0x96, 0xe8, 0x8d, 0xc9, 0x54, 0xa5, 0xc9, 0x6d, 0xf2, 0x9b, 0x3e, 0xf8, 0x8b, 0x41, 0x3b, 0x60, 0x38, 0xe1, + 0xb3, 0x98, 0x65, 0x91, 0x72, 0xf9, 0x96, 0x83, 0x45, 0xd0, 0x1a, 0xb3, 0x24, 0xca, 0xcc, 0xf6, 0xb4, 0x51, 0xf8, + 0x13, 0x67, 0x99, 0xea, 0x5a, 0x74, 0xb9, 0x42, 0xa8, 0x46, 0x1f, 0xb1, 0x08, 0x3e, 0xd1, 0x72, 0x8d, 0x23, 0xec, + 0x56, 0x97, 0xd7, 0xce, 0x6b, 0x3b, 0xd0, 0x5a, 0xdb, 0x28, 0x6d, 0x04, 0xf0, 0xf5, 0xd2, 0x9c, 0x0b, 0x19, 0x04, + 0x53, 0x9c, 0x22, 0xd2, 0x9b, 0x2a, 0x67, 0xd7, 0x71, 0xaa, 0xfe, 0xeb, 0x37, 0xdb, 0x51, 0xbb, 0x34, 0xdf, 0x6b, + 0xb7, 0x81, 0x75, 0x72, 0x94, 0xb9, 0x51, 0xaa, 0x96, 0x51, 0xfe, 0xd6, 0x4b, 0xad, 0x9e, 0xcb, 0xe5, 0x62, 0x73, + 0xdc, 0xb4, 0xa8, 0x0a, 0x6a, 0x40, 0xa8, 0x60, 0xd1, 0x8e, 0xa9, 0x50, 0x51, 0xad, 0xbb, 0x54, 0x25, 0x2f, 0xb4, + 0x88, 0x3e, 0xdf, 0x5f, 0x0a, 0x33, 0x63, 0x71, 0xc1, 0xac, 0x93, 0xa9, 0x4e, 0x72, 0x85, 0xc1, 0x88, 0xa3, 0x87, + 0x6e, 0x6b, 0xa6, 0x61, 0xb9, 0x25, 0x62, 0x2b, 0xdd, 0x86, 0xfa, 0x91, 0x0a, 0x52, 0x85, 0xbb, 0x36, 0x06, 0x80, + 0x5c, 0xbd, 0x6d, 0x80, 0x81, 0xd9, 0x9a, 0x4b, 0xbb, 0x04, 0xd0, 0xc6, 0xc6, 0x14, 0x2e, 0xd2, 0x5c, 0xec, 0x2f, + 0xbf, 0x91, 0xc5, 0xa1, 0xd3, 0x54, 0xfd, 0x66, 0x09, 0xfc, 0x0f, 0x12, 0x70, 0xa9, 0x95, 0xd2, 0xc8, 0xff, 0xfa, + 0xed, 0xd9, 0x7b, 0x1f, 0x5f, 0xf2, 0xe4, 0x36, 0xf2, 0xa5, 0x58, 0x50, 0xbf, 0x40, 0xa1, 0x9c, 0xd2, 0xac, 0x7c, + 0x19, 0x0f, 0x4f, 0x69, 0x98, 0xf2, 0x89, 0xbe, 0x94, 0xb9, 0x6e, 0x24, 0x8f, 0x2e, 0x8e, 0xd5, 0x4b, 0xa6, 0x7a, + 0xc7, 0x52, 0xbf, 0xde, 0x4b, 0x0a, 0xf8, 0xd9, 0x83, 0x10, 0xca, 0xf1, 0xa1, 0x9c, 0xaa, 0x87, 0x33, 0x38, 0x30, + 0xea, 0x69, 0x7f, 0xb9, 0x41, 0x4c, 0x7d, 0x18, 0x62, 0xda, 0xd3, 0x4b, 0xc8, 0x55, 0xab, 0x8b, 0x68, 0x74, 0x71, + 0x51, 0x1c, 0x1f, 0xc2, 0x58, 0x87, 0x76, 0x5c, 0x80, 0xd0, 0xf6, 0x2f, 0x09, 0x0c, 0x5e, 0x36, 0x24, 0x48, 0x0f, + 0x86, 0x80, 0x79, 0x93, 0x1e, 0x2c, 0x12, 0x08, 0x0c, 0x7a, 0x27, 0x65, 0x89, 0x3a, 0xb1, 0xba, 0x68, 0x17, 0x04, + 0xba, 0x61, 0x45, 0xf7, 0xda, 0x9b, 0x5a, 0xed, 0xaf, 0x05, 0x29, 0x71, 0xa1, 0xbb, 0x40, 0xf0, 0xbf, 0x82, 0xec, + 0xf8, 0x50, 0xe3, 0xe1, 0xc2, 0x7d, 0xb5, 0x89, 0x7e, 0xed, 0x40, 0x89, 0xad, 0x41, 0x2e, 0xf1, 0x47, 0x89, 0x3f, + 0x5e, 0xa8, 0xa6, 0x56, 0x18, 0x81, 0x96, 0x04, 0x42, 0xbb, 0x65, 0xb5, 0x8e, 0x11, 0x4f, 0xd3, 0x78, 0x9e, 0xd3, + 0xc8, 0xfe, 0x30, 0x72, 0x09, 0xc4, 0xdb, 0xa6, 0x22, 0x60, 0xd2, 0x6b, 0x4e, 0x41, 0x5d, 0xd8, 0xd4, 0x52, 0xae, + 0x62, 0x11, 0x34, 0x9b, 0xa3, 0xe6, 0xe5, 0x04, 0x15, 0x72, 0xba, 0x74, 0xa5, 0xda, 0xe3, 0x56, 0xab, 0x0b, 0xb9, + 0x90, 0xcd, 0x38, 0x65, 0x93, 0x2c, 0x4a, 0xe9, 0x58, 0x16, 0x12, 0x6e, 0xa9, 0x2d, 0xad, 0x1a, 0x11, 0x76, 0x1e, + 0x09, 0x3a, 0xf3, 0x42, 0xf8, 0xf7, 0xee, 0x89, 0x0b, 0x99, 0x44, 0x99, 0x9c, 0x36, 0x55, 0xd6, 0x2d, 0xdc, 0x19, + 0x90, 0xd3, 0xda, 0xf3, 0xd2, 0x99, 0x68, 0x44, 0x41, 0xc5, 0x2a, 0xa4, 0xf0, 0xe4, 0x14, 0x4b, 0xe1, 0xb6, 0xcb, + 0xd0, 0x72, 0x63, 0x05, 0x9b, 0x92, 0xfe, 0x08, 0x15, 0xb9, 0x52, 0x8c, 0x37, 0x1b, 0x5b, 0x75, 0xa9, 0xfe, 0xb4, + 0x81, 0x3e, 0x47, 0xb1, 0x2b, 0xb4, 0x63, 0x79, 0xa9, 0x7b, 0xdc, 0x07, 0x99, 0x35, 0x95, 0x13, 0xbb, 0x3d, 0x50, + 0xc1, 0xb2, 0xf9, 0x42, 0x0e, 0x94, 0x53, 0x5b, 0xc0, 0x05, 0x89, 0x21, 0x76, 0x4a, 0x00, 0x07, 0xc3, 0xa5, 0x06, + 0x66, 0x14, 0xa7, 0xa3, 0x00, 0x20, 0xf2, 0x9a, 0xde, 0x53, 0x41, 0x67, 0xa8, 0x3b, 0x63, 0x59, 0x53, 0xd7, 0x3d, + 0x72, 0xd4, 0x92, 0xf0, 0x09, 0x3c, 0x15, 0xa1, 0x1a, 0x0d, 0xab, 0xdc, 0xd5, 0x2d, 0xb8, 0xbc, 0x18, 0x16, 0x45, + 0x57, 0xc8, 0x60, 0xf0, 0x3a, 0x40, 0x43, 0xfc, 0x8b, 0xf3, 0x72, 0x16, 0xdf, 0x1e, 0x15, 0x1f, 0x77, 0xd0, 0x8e, + 0x26, 0xee, 0x59, 0x50, 0xcd, 0x7e, 0x21, 0xd0, 0xf0, 0x5d, 0xe0, 0xd3, 0x7c, 0xde, 0xd4, 0xbc, 0xab, 0xa9, 0x48, + 0xd6, 0x87, 0xae, 0xc8, 0x78, 0x6a, 0xbf, 0x97, 0x4b, 0xc5, 0x96, 0xcc, 0x25, 0x0d, 0xed, 0x4c, 0x18, 0x96, 0x97, + 0x7a, 0xcc, 0xb3, 0x7b, 0x8d, 0x07, 0xd5, 0xf8, 0xc9, 0xc5, 0x49, 0x9d, 0xc7, 0x01, 0x5f, 0x2a, 0x5f, 0x60, 0x17, + 0xa7, 0x29, 0x4c, 0x78, 0x61, 0xd5, 0x17, 0xf7, 0xa5, 0x1f, 0x03, 0x39, 0x0c, 0x50, 0x61, 0xce, 0xe9, 0x33, 0xa5, + 0x52, 0x3a, 0x6f, 0xcd, 0xdb, 0x93, 0x36, 0x58, 0xa4, 0xa5, 0x2f, 0x83, 0x70, 0x77, 0x2d, 0x2f, 0xba, 0x5b, 0xf1, + 0x2e, 0xad, 0x90, 0x7a, 0x6a, 0x41, 0xc4, 0x17, 0x59, 0xe2, 0x7b, 0x7f, 0x19, 0xa5, 0x6c, 0xf4, 0x91, 0xf8, 0xfb, + 0xcb, 0x00, 0x6d, 0x5e, 0x7b, 0x54, 0x5c, 0xc1, 0x32, 0x6c, 0x54, 0x77, 0xa4, 0x67, 0xa1, 0xc3, 0x8b, 0xf5, 0x5b, + 0x71, 0xfc, 0xde, 0xfe, 0x12, 0x18, 0x8f, 0x9e, 0xa7, 0x77, 0x51, 0x9c, 0x57, 0xef, 0xba, 0xaa, 0xa0, 0x00, 0x34, + 0xeb, 0x72, 0x4f, 0x11, 0x15, 0xf1, 0x3f, 0x49, 0x69, 0xbe, 0xa7, 0x99, 0x1a, 0xc0, 0x29, 0x0d, 0x7f, 0xf3, 0xbd, + 0xbf, 0x94, 0x65, 0xb4, 0xf4, 0x68, 0xa8, 0x94, 0x0c, 0xe2, 0xc3, 0x5c, 0x60, 0xc6, 0x86, 0x09, 0x95, 0x31, 0x4b, + 0x75, 0x97, 0xae, 0x35, 0xc0, 0xd7, 0x56, 0xb4, 0x5a, 0xe5, 0xf5, 0xb5, 0xb0, 0x3a, 0x06, 0xd5, 0xca, 0x8e, 0x0f, + 0x2b, 0xb8, 0xd5, 0xca, 0xd4, 0x99, 0x74, 0x43, 0x83, 0xd5, 0x0a, 0x75, 0x9d, 0xf7, 0x97, 0x91, 0xba, 0x36, 0x04, + 0x00, 0x72, 0x03, 0x20, 0x04, 0xad, 0xf5, 0xb5, 0x98, 0x20, 0x25, 0x3c, 0x94, 0xb1, 0x98, 0x50, 0xb9, 0x86, 0xd8, + 0x54, 0xe7, 0xa8, 0x76, 0x6d, 0x80, 0x7a, 0x03, 0xda, 0xb8, 0x0e, 0xed, 0x05, 0x20, 0xbd, 0xbf, 0xbf, 0x64, 0x05, + 0xd9, 0x5f, 0xd2, 0x6c, 0xc4, 0x13, 0xfa, 0xe1, 0xdd, 0x97, 0x70, 0xc9, 0x91, 0x67, 0x60, 0x58, 0x4c, 0x11, 0x08, + 0x4e, 0xb5, 0x39, 0x5a, 0x84, 0x70, 0x25, 0x42, 0x34, 0x27, 0xf0, 0xd4, 0x5c, 0x0a, 0xc4, 0xc2, 0xf7, 0xfa, 0x1a, + 0x72, 0x9a, 0x68, 0x98, 0x49, 0xa6, 0x7a, 0xf1, 0xe2, 0xf8, 0x50, 0xb7, 0xd6, 0x22, 0x40, 0x37, 0x02, 0x24, 0xa8, + 0x73, 0x5a, 0xe1, 0x00, 0xf2, 0x9a, 0x5d, 0x3c, 0x24, 0xec, 0xaa, 0x24, 0x36, 0x75, 0x81, 0xaa, 0x77, 0x9c, 0xc6, + 0x97, 0x34, 0xed, 0xed, 0x2f, 0xb3, 0xd5, 0xaa, 0x55, 0x1c, 0x1f, 0xea, 0x47, 0xef, 0x58, 0xf1, 0x0d, 0xfd, 0xc2, + 0x4b, 0xb5, 0xc5, 0x70, 0x2b, 0x11, 0xb2, 0x3d, 0x6d, 0x9a, 0x53, 0x64, 0x06, 0x28, 0x7c, 0x4f, 0x25, 0x58, 0xa8, + 0x46, 0xa5, 0x42, 0x54, 0xf8, 0x1e, 0x4b, 0x36, 0xcb, 0x72, 0x49, 0xe7, 0x50, 0x3a, 0x5d, 0xad, 0xda, 0x85, 0xef, + 0xcd, 0x58, 0x06, 0x4f, 0xd9, 0x6a, 0xa5, 0x2e, 0xfc, 0xcd, 0x58, 0x16, 0xb4, 0x80, 0x6c, 0x7d, 0x6f, 0x16, 0xdf, + 0xa8, 0x05, 0xdb, 0x9a, 0xf8, 0x26, 0x68, 0x9b, 0xaa, 0xb0, 0xc4, 0x4f, 0x0e, 0x14, 0x57, 0xed, 0x68, 0x6a, 0x76, + 0x34, 0xc1, 0x0b, 0x7d, 0x95, 0x89, 0x04, 0x09, 0x49, 0xb7, 0xef, 0x68, 0x62, 0x77, 0x74, 0xb1, 0x63, 0x47, 0x17, + 0x77, 0xec, 0x68, 0x6c, 0x76, 0xcf, 0x2b, 0x71, 0xc7, 0x57, 0xab, 0x76, 0xab, 0xc2, 0xde, 0xf1, 0x61, 0xc2, 0xae, + 0x60, 0x37, 0x40, 0xcd, 0x93, 0x6c, 0x46, 0xb7, 0x13, 0x65, 0x1d, 0xc5, 0xf4, 0x57, 0x61, 0xb2, 0x44, 0x42, 0x56, + 0x47, 0x82, 0x4b, 0xd6, 0x65, 0xc8, 0xed, 0x8f, 0x24, 0x6c, 0x06, 0x68, 0xc8, 0x01, 0x0d, 0x53, 0x83, 0x86, 0x8b, + 0xe2, 0x1c, 0x24, 0x82, 0x5a, 0xcd, 0xbd, 0x28, 0x0f, 0x5a, 0xfb, 0xbd, 0xdd, 0x14, 0x06, 0xc1, 0xf0, 0x6b, 0x2e, + 0x12, 0x3f, 0xd2, 0x4d, 0x7f, 0x15, 0x62, 0x66, 0x2c, 0x33, 0xa9, 0x55, 0x3b, 0x29, 0xab, 0xaa, 0x77, 0xe9, 0xab, + 0xf3, 0xe8, 0x91, 0x6e, 0x31, 0x8f, 0xa5, 0xa4, 0x22, 0x33, 0x74, 0xea, 0xfb, 0x2e, 0xb6, 0xff, 0x7f, 0x91, 0xdc, + 0x16, 0x26, 0x12, 0x5b, 0x26, 0x62, 0xa9, 0xcd, 0x68, 0xe7, 0x86, 0xc1, 0x6b, 0x59, 0xb4, 0x57, 0xa9, 0xab, 0xb7, + 0xc8, 0xb5, 0x10, 0x74, 0x11, 0x18, 0x2c, 0x8b, 0x19, 0x4d, 0xce, 0x15, 0x37, 0xee, 0x8f, 0x2e, 0x8c, 0x76, 0xba, + 0x26, 0xdb, 0xaa, 0x0e, 0xd8, 0xff, 0x71, 0xd1, 0x79, 0xf2, 0xf0, 0xd4, 0xc7, 0x9a, 0xa1, 0xf3, 0xf1, 0xd8, 0x47, + 0x85, 0x77, 0xbf, 0x6e, 0xed, 0x87, 0x3f, 0x2e, 0xbe, 0x78, 0xd1, 0xfa, 0xa2, 0xec, 0x9c, 0xf9, 0xa8, 0xb8, 0x30, + 0xc1, 0x7c, 0x2b, 0x97, 0x1c, 0x78, 0xed, 0x8a, 0xc6, 0x71, 0xb6, 0x7b, 0x39, 0x03, 0x77, 0x39, 0xf9, 0x9c, 0xd2, + 0x04, 0xfb, 0x9e, 0x8f, 0x37, 0x4a, 0xcf, 0x53, 0x7a, 0x45, 0xed, 0x6b, 0x06, 0xb7, 0x4c, 0xb6, 0xa5, 0xc7, 0x88, + 0x2f, 0x32, 0x69, 0xb2, 0x1a, 0x0c, 0x5f, 0x75, 0x96, 0x74, 0xa1, 0xd6, 0xe0, 0x1a, 0x04, 0xb7, 0x5a, 0xa8, 0xd5, + 0x45, 0x55, 0x71, 0x81, 0x7d, 0x07, 0x80, 0x9d, 0x90, 0xf5, 0x77, 0x94, 0x47, 0x2d, 0xdc, 0xda, 0x05, 0x1b, 0x6e, + 0xa3, 0xc8, 0xf7, 0x87, 0x16, 0x4f, 0xca, 0x31, 0x59, 0x7b, 0x3b, 0xc4, 0x4e, 0x7c, 0x7d, 0x12, 0x03, 0x97, 0x02, + 0x06, 0xcb, 0x68, 0x9e, 0xef, 0x44, 0x40, 0xb9, 0x89, 0xd8, 0xaf, 0x5a, 0xfb, 0x3b, 0x46, 0xc1, 0x2d, 0x0c, 0x07, + 0x4c, 0x01, 0x5c, 0x86, 0x47, 0x4d, 0x2b, 0x3a, 0x1e, 0xd3, 0x51, 0xe9, 0xd7, 0x85, 0x40, 0xd7, 0x98, 0xa5, 0x12, + 0xe2, 0x3d, 0x2a, 0x10, 0xe3, 0xbf, 0xe1, 0x19, 0xf5, 0x91, 0x4d, 0xdd, 0x34, 0xf0, 0x1b, 0x61, 0xbf, 0x1d, 0x1e, + 0x3d, 0x62, 0x1d, 0x16, 0x33, 0xcb, 0x6a, 0x65, 0x7d, 0x3a, 0xb5, 0xf2, 0x3a, 0x22, 0xb9, 0x72, 0xda, 0xec, 0x3a, + 0x40, 0xf7, 0x3b, 0x26, 0xcb, 0xf6, 0x17, 0x8f, 0xda, 0xad, 0xc2, 0xc7, 0x3e, 0x0c, 0x77, 0xdf, 0x53, 0xa2, 0x7a, + 0x1d, 0x41, 0xaf, 0x45, 0xf6, 0x6b, 0xfa, 0x75, 0xda, 0x9f, 0xb7, 0x7d, 0xac, 0xdf, 0x1a, 0x80, 0x8a, 0x92, 0x19, + 0x8c, 0xc0, 0xd3, 0xf9, 0xbb, 0x97, 0x52, 0x1f, 0xfc, 0x7e, 0xf0, 0x3c, 0x6e, 0xb7, 0x7c, 0xec, 0xe7, 0x92, 0xcf, + 0x7f, 0xc5, 0x12, 0x8e, 0x7c, 0xec, 0x8f, 0x52, 0x9e, 0x53, 0x77, 0x0d, 0x5a, 0x77, 0xfd, 0xfd, 0x8b, 0xd0, 0x10, + 0xcd, 0x05, 0xcd, 0x73, 0xcf, 0x1d, 0xdf, 0x90, 0xd2, 0x27, 0x18, 0xe6, 0x56, 0x8a, 0xcb, 0xa9, 0x54, 0x78, 0xd1, + 0x17, 0xfa, 0x5d, 0xaa, 0xd2, 0x65, 0x1b, 0xc4, 0xa6, 0x44, 0x40, 0xc9, 0xd8, 0xb4, 0x2a, 0xf5, 0xc9, 0x99, 0xb7, + 0x1c, 0x3d, 0x3d, 0xb1, 0x0e, 0x00, 0x6f, 0x4e, 0x50, 0x2b, 0x99, 0xb1, 0xec, 0x7c, 0x4b, 0x69, 0x7c, 0xb3, 0xa5, + 0x14, 0xf4, 0xb3, 0x12, 0x3a, 0xf3, 0xae, 0x99, 0x4f, 0x63, 0xbd, 0xd2, 0x72, 0x5c, 0x10, 0x13, 0xe5, 0xa4, 0xfc, + 0x04, 0xa4, 0xce, 0x36, 0xa8, 0x11, 0x7e, 0xfb, 0x74, 0x50, 0xf2, 0xab, 0xa6, 0xa3, 0x37, 0x9f, 0xde, 0x73, 0x47, + 0xaf, 0xf9, 0x1d, 0xd8, 0x37, 0xf7, 0xc6, 0xd7, 0xd1, 0xbf, 0xa5, 0xd8, 0xa8, 0x1e, 0xe5, 0x16, 0x8c, 0x52, 0x36, + 0xab, 0x76, 0x61, 0x13, 0x4c, 0xa5, 0x74, 0x40, 0xf2, 0x90, 0x3b, 0x88, 0xd6, 0x3e, 0xce, 0xe1, 0x4a, 0x24, 0xbc, + 0x77, 0x62, 0x21, 0xe8, 0x79, 0xca, 0xaf, 0xd7, 0xdf, 0xa3, 0xb5, 0xbb, 0xf1, 0x94, 0x4d, 0xa6, 0xce, 0x3d, 0x27, + 0x4a, 0x4a, 0xd4, 0xdf, 0x39, 0x41, 0xf1, 0xaf, 0xff, 0x12, 0x86, 0xff, 0xfa, 0x2f, 0x9f, 0x6c, 0x0a, 0xc3, 0x17, + 0x17, 0x58, 0x56, 0xc3, 0xee, 0x26, 0xf0, 0xed, 0x33, 0xd5, 0x71, 0xbe, 0xbd, 0xcd, 0xc6, 0x26, 0x40, 0xfd, 0xc6, + 0x16, 0x6c, 0x14, 0xea, 0x03, 0xe0, 0xfd, 0x16, 0xc0, 0x60, 0x5d, 0x9f, 0x84, 0x0c, 0x1a, 0xfd, 0x2e, 0xd0, 0x2e, + 0x50, 0x74, 0xaf, 0x1d, 0xf9, 0xed, 0x18, 0xfe, 0xd4, 0x1a, 0x7e, 0x27, 0xf8, 0xc6, 0x1f, 0x30, 0xba, 0xb8, 0x28, + 0x13, 0xda, 0xdc, 0xae, 0x70, 0x61, 0xbe, 0xbf, 0x51, 0x62, 0x64, 0x7f, 0xd4, 0x42, 0x3d, 0x75, 0x1d, 0x8f, 0x8c, + 0x2e, 0x5e, 0xc3, 0x5b, 0x72, 0x8e, 0x2f, 0x85, 0x75, 0xa8, 0xde, 0xc1, 0x9f, 0x61, 0x88, 0xfa, 0xaa, 0xd4, 0xa0, + 0x1b, 0xcc, 0x19, 0x4a, 0x41, 0xe1, 0x07, 0x30, 0xf1, 0xe8, 0xc2, 0x58, 0x77, 0xa7, 0xda, 0xed, 0x11, 0xad, 0x93, + 0xb6, 0x71, 0x87, 0xd4, 0x90, 0x8e, 0xbd, 0xf7, 0x0a, 0x5f, 0xaa, 0x31, 0xad, 0xac, 0x69, 0xe5, 0x5a, 0x02, 0x55, + 0xfe, 0xa2, 0x50, 0x61, 0xf1, 0xbf, 0xee, 0x8a, 0xdc, 0xfd, 0xfd, 0xd3, 0x91, 0x3b, 0x7e, 0xaf, 0xc8, 0xdd, 0xdf, + 0xff, 0xf0, 0xc8, 0xdd, 0x5f, 0xdd, 0xc8, 0x1d, 0x6c, 0xe2, 0x97, 0xf7, 0x8a, 0xae, 0xd9, 0xc8, 0x07, 0xbf, 0xce, + 0x49, 0xdb, 0x68, 0xb2, 0x29, 0x9f, 0x40, 0x68, 0xed, 0xdf, 0x3f, 0x52, 0x96, 0xf2, 0x89, 0x1b, 0x27, 0x83, 0xb7, + 0xa4, 0x42, 0x60, 0xac, 0x6b, 0x23, 0x5a, 0x26, 0x36, 0xd5, 0x2a, 0x6f, 0x80, 0x34, 0x1f, 0xda, 0x37, 0x16, 0xf8, + 0x51, 0xf9, 0xd6, 0xa1, 0x16, 0xee, 0xd8, 0xe8, 0x55, 0xa4, 0x02, 0x5f, 0x65, 0xc7, 0x4e, 0xc3, 0x5e, 0x6f, 0x70, + 0x47, 0xe8, 0xda, 0xb7, 0xaa, 0xe8, 0xdb, 0xee, 0x4b, 0xff, 0xc7, 0x9b, 0xf6, 0xb3, 0x41, 0xbb, 0x7b, 0xd4, 0x9e, + 0xf9, 0x91, 0x0f, 0x52, 0x4a, 0x15, 0xb4, 0xba, 0x47, 0x47, 0x50, 0x70, 0xed, 0x14, 0x74, 0xa0, 0x80, 0x39, 0x05, + 0x8f, 0xa0, 0x60, 0xe4, 0x14, 0x3c, 0x86, 0x82, 0xc4, 0x29, 0x78, 0x02, 0x05, 0x57, 0x7e, 0x31, 0x60, 0x25, 0xb8, + 0x4f, 0xd0, 0x10, 0x6b, 0xe3, 0xc1, 0x96, 0x3d, 0xc1, 0x6d, 0x08, 0x99, 0xc5, 0x13, 0x95, 0xe9, 0x03, 0x0e, 0xb8, + 0x88, 0xe3, 0xeb, 0x29, 0xcd, 0x22, 0x08, 0x5a, 0x3e, 0x57, 0x32, 0x26, 0x94, 0xfc, 0x3d, 0x9b, 0x51, 0xfb, 0x7d, + 0x0a, 0x8b, 0x07, 0xcf, 0x47, 0x83, 0xd6, 0xb0, 0xe8, 0x96, 0x3b, 0xa7, 0x63, 0x6d, 0x26, 0xeb, 0x43, 0xef, 0x65, + 0x55, 0xa7, 0xa7, 0x6b, 0x96, 0x7b, 0xbe, 0x23, 0x66, 0xe3, 0x78, 0x03, 0xc6, 0x29, 0xbf, 0x6e, 0xde, 0xf8, 0xbd, + 0xed, 0x71, 0x1c, 0x80, 0xa8, 0x8c, 0xe3, 0xa8, 0x35, 0x95, 0x4f, 0xef, 0xe3, 0x49, 0xf9, 0xfb, 0x35, 0xcd, 0xf3, + 0x78, 0x62, 0x5a, 0xee, 0x8e, 0xdb, 0x28, 0x10, 0xdd, 0x98, 0x8d, 0x05, 0x02, 0x62, 0x2f, 0xb0, 0x59, 0x60, 0x4e, + 0x9b, 0x50, 0x0c, 0x60, 0xa7, 0x1e, 0xc5, 0x51, 0xd3, 0xd7, 0x8b, 0x64, 0x3c, 0xa9, 0x0a, 0x8e, 0xe7, 0x82, 0xaa, + 0x52, 0x8d, 0xe1, 0xe2, 0xf8, 0x10, 0x0a, 0x74, 0xf5, 0x8e, 0x68, 0x8d, 0xb5, 0xdd, 0x77, 0xc7, 0x6c, 0x3c, 0x1b, + 0xad, 0x71, 0xf3, 0x5b, 0xca, 0xe4, 0x96, 0xcd, 0x18, 0xc1, 0x67, 0xed, 0x11, 0xfc, 0x31, 0x11, 0x88, 0xcf, 0xc6, + 0xe3, 0xf1, 0x9d, 0xd1, 0x9b, 0xcf, 0x92, 0x31, 0xed, 0xd0, 0x47, 0x5d, 0xc8, 0x7d, 0x68, 0x1a, 0x9f, 0x7f, 0xbb, + 0x50, 0xb8, 0x5b, 0xde, 0xaf, 0x31, 0x84, 0x07, 0xe4, 0x74, 0x79, 0xff, 0x48, 0x4e, 0x31, 0x17, 0x74, 0x39, 0x8b, + 0xc5, 0x84, 0x65, 0x51, 0xab, 0x08, 0xaf, 0x4c, 0xe8, 0xe3, 0xb3, 0xa7, 0x4f, 0x9f, 0x16, 0x61, 0x62, 0x9f, 0x5a, + 0x49, 0x52, 0x84, 0xa3, 0x65, 0xb9, 0x8c, 0x56, 0x6b, 0x3c, 0x2e, 0x42, 0x66, 0x0b, 0x8e, 0x3a, 0xa3, 0xe4, 0xa8, + 0x53, 0x84, 0xd7, 0x4e, 0x8b, 0x22, 0xa4, 0xe6, 0x49, 0xd0, 0xa4, 0x96, 0x40, 0xf1, 0xa4, 0xd5, 0x2a, 0x42, 0x4d, + 0x68, 0x4b, 0xb0, 0x88, 0xf4, 0xcf, 0x28, 0x5e, 0x48, 0x0e, 0x2c, 0xb9, 0xcb, 0x65, 0x30, 0x38, 0x37, 0x2f, 0xa7, + 0xd0, 0x1f, 0x72, 0x28, 0xd0, 0x10, 0x7f, 0xe9, 0x06, 0x29, 0x80, 0x98, 0x55, 0x70, 0x82, 0xdb, 0x18, 0x46, 0xad, + 0x1a, 0x28, 0x4b, 0x55, 0x7f, 0x49, 0x78, 0x15, 0xbb, 0x00, 0xfe, 0x03, 0x2d, 0xf5, 0x5b, 0xd4, 0x24, 0xdd, 0xc1, + 0xf5, 0x29, 0xfd, 0x24, 0xd7, 0xbf, 0xbd, 0x0f, 0xd3, 0xa7, 0xf4, 0x8f, 0x66, 0xfa, 0xe6, 0x55, 0xa3, 0x9a, 0xe9, + 0x6b, 0xb6, 0x36, 0x93, 0xc4, 0x1f, 0x4d, 0xe9, 0xe8, 0xe3, 0x25, 0xbf, 0x69, 0xc2, 0x91, 0x10, 0xbe, 0xe2, 0xa7, + 0xfb, 0xbf, 0x35, 0xd9, 0xc2, 0x0e, 0xe6, 0x7c, 0x07, 0x42, 0x89, 0xcd, 0xb7, 0x19, 0xf1, 0xdf, 0x5a, 0xb3, 0x4a, + 0x97, 0x8c, 0xc7, 0xc4, 0x7f, 0x3b, 0x1e, 0xfb, 0xf6, 0x8a, 0x5d, 0x2c, 0xa9, 0x6a, 0xf5, 0xa6, 0x56, 0xa2, 0x5a, + 0x7d, 0xf1, 0x85, 0x5b, 0xe6, 0x16, 0x98, 0x10, 0x87, 0x1b, 0xce, 0x30, 0x35, 0x09, 0xcb, 0xe1, 0xa8, 0xc1, 0xe7, + 0x29, 0xea, 0xef, 0xf8, 0x13, 0xb5, 0xd7, 0x31, 0x97, 0x00, 0x6f, 0x79, 0x87, 0xf4, 0xfa, 0xfd, 0xf2, 0x09, 0xb5, + 0xe9, 0x6e, 0xcf, 0x6e, 0xbf, 0x4c, 0x82, 0x99, 0x44, 0x05, 0xcb, 0xdf, 0x66, 0x6b, 0x77, 0x47, 0x34, 0x8c, 0x84, + 0xb8, 0xcb, 0x2a, 0x24, 0x9f, 0x4c, 0x52, 0xf8, 0x40, 0xc8, 0xb2, 0xf6, 0xde, 0x51, 0xdd, 0xbd, 0x5f, 0x5b, 0x6f, + 0xe4, 0x76, 0x34, 0x6f, 0xe9, 0x54, 0xdf, 0x2b, 0xd2, 0x39, 0xc7, 0x57, 0xe6, 0xc3, 0x35, 0xca, 0x22, 0x5b, 0x1a, + 0xfe, 0xbf, 0xd4, 0x99, 0xaa, 0x12, 0xb2, 0x34, 0xf4, 0xc0, 0x49, 0x51, 0x98, 0x1c, 0xff, 0x84, 0xe5, 0x73, 0x78, + 0x1f, 0xa6, 0xee, 0x49, 0x3f, 0xc5, 0xc2, 0xf3, 0x6b, 0x27, 0x8e, 0x50, 0xdb, 0xae, 0xc2, 0x06, 0x12, 0xb4, 0xab, + 0x76, 0x26, 0x0b, 0xdf, 0x78, 0x7c, 0x2d, 0x12, 0x7d, 0x4f, 0xe3, 0x53, 0x47, 0x38, 0x9c, 0x15, 0x82, 0xab, 0xbf, + 0xdc, 0x10, 0x5b, 0x65, 0x0b, 0x0a, 0x37, 0x4e, 0xa6, 0x6a, 0x34, 0xb6, 0x94, 0x57, 0x3e, 0x9f, 0xc7, 0x99, 0x66, + 0xa3, 0xc4, 0xd7, 0xfc, 0x60, 0x7f, 0x59, 0xed, 0x7c, 0xe1, 0x5b, 0xb0, 0x35, 0xf1, 0xf6, 0x8e, 0x0f, 0xa1, 0x43, + 0xcf, 0xab, 0x81, 0x9e, 0x6d, 0x38, 0xf3, 0x3f, 0x11, 0x56, 0xbf, 0x08, 0xf3, 0x6b, 0x1c, 0xe6, 0xd7, 0xde, 0x9f, + 0x97, 0xcd, 0x6b, 0x7a, 0xf9, 0x91, 0xc9, 0xa6, 0x8c, 0xe7, 0x4d, 0x50, 0xf8, 0x95, 0x5f, 0xce, 0xb0, 0x67, 0x95, + 0x1c, 0xa6, 0x6f, 0xc8, 0x77, 0x17, 0x39, 0x44, 0xdf, 0x95, 0xda, 0x1a, 0x65, 0x3c, 0xa3, 0xdd, 0x7a, 0x12, 0xa0, + 0x1b, 0xcc, 0xb5, 0xd8, 0x1a, 0x2e, 0x39, 0x44, 0xeb, 0xe5, 0x6d, 0xd4, 0x32, 0x6c, 0xbd, 0x65, 0x23, 0xb5, 0xad, + 0xad, 0xed, 0x23, 0x83, 0xdc, 0x86, 0x92, 0x5e, 0x62, 0x33, 0x62, 0xbd, 0x2b, 0xe2, 0xfc, 0xa9, 0x94, 0x38, 0xf0, + 0xe6, 0xd9, 0xbf, 0x4e, 0x2e, 0xe1, 0x7a, 0xb1, 0x4a, 0x89, 0xbb, 0x0f, 0x64, 0x51, 0x3c, 0x96, 0x54, 0xe0, 0xfb, + 0xb4, 0xbc, 0x54, 0xb7, 0x57, 0x96, 0x20, 0x66, 0xa2, 0xf6, 0xd3, 0xf9, 0xcd, 0xfd, 0x87, 0xbf, 0x7b, 0xf9, 0x85, + 0xc1, 0x91, 0x7d, 0x9b, 0x8b, 0xef, 0x77, 0xe1, 0x20, 0xa4, 0xf1, 0x6d, 0xc4, 0x32, 0x25, 0xf3, 0x2e, 0xc1, 0x25, + 0xd7, 0x9d, 0x73, 0x93, 0xdb, 0x29, 0x68, 0xaa, 0x3e, 0xdd, 0x66, 0xb6, 0xe2, 0xe8, 0xf1, 0xfc, 0xc6, 0xee, 0x46, + 0x7b, 0x2d, 0x67, 0xf3, 0x0f, 0x4d, 0xcd, 0xdc, 0x9d, 0x0b, 0x5a, 0x4f, 0x2f, 0x7c, 0x34, 0xbf, 0xe9, 0x6a, 0x41, + 0xdb, 0x14, 0x1a, 0xaa, 0xd6, 0xfc, 0xc6, 0x4d, 0x4e, 0xad, 0x06, 0xf2, 0xc2, 0xa3, 0xdc, 0xa3, 0x71, 0x4e, 0xbb, + 0xf0, 0xbe, 0x6a, 0x36, 0x8a, 0x53, 0x23, 0xcc, 0x67, 0x2c, 0x49, 0x52, 0xda, 0xb5, 0xf2, 0xda, 0x6b, 0x3f, 0x86, + 0xdc, 0x4e, 0x77, 0xcb, 0xea, 0xbb, 0xe2, 0x20, 0xaf, 0xc4, 0x53, 0x7c, 0x99, 0xf3, 0x14, 0x3e, 0x16, 0xb1, 0x15, + 0x9d, 0x26, 0xe9, 0xb1, 0x55, 0x21, 0x4f, 0xfd, 0xae, 0xaf, 0xe5, 0x51, 0xeb, 0x4f, 0x5d, 0xb5, 0xe1, 0xad, 0xae, + 0xe4, 0xf3, 0xa8, 0x79, 0x54, 0x5f, 0x08, 0x54, 0x95, 0x4b, 0xc0, 0x5b, 0x96, 0x85, 0x41, 0x5a, 0x69, 0x3e, 0xed, + 0x85, 0x6d, 0x53, 0xa6, 0x06, 0x80, 0x17, 0x2b, 0x97, 0x45, 0x45, 0x7d, 0x31, 0xff, 0x3e, 0xa7, 0xe5, 0xf3, 0xed, + 0xa7, 0xe5, 0x73, 0x7b, 0x5a, 0xee, 0xa6, 0xd8, 0xcf, 0xc6, 0x6d, 0xf8, 0xd3, 0xad, 0x16, 0x14, 0xb5, 0xbc, 0xa3, + 0xf9, 0x8d, 0x07, 0x7a, 0x5a, 0xb3, 0x33, 0xbf, 0xd1, 0xa9, 0xb9, 0x10, 0x36, 0x68, 0x41, 0xb2, 0x2a, 0x6e, 0x79, + 0x50, 0x08, 0x7f, 0x5b, 0xb5, 0xaa, 0xf6, 0x43, 0xa8, 0x83, 0x5e, 0x8f, 0x36, 0xeb, 0x3a, 0x77, 0x1f, 0xda, 0x28, + 0xe3, 0x32, 0x88, 0x2c, 0x37, 0x46, 0xa1, 0x8c, 0x2f, 0x2f, 0x69, 0x12, 0x8d, 0xf9, 0x68, 0x91, 0xff, 0xb3, 0x81, + 0xdf, 0x20, 0xf1, 0xce, 0x23, 0xbd, 0x36, 0x8e, 0xed, 0xaa, 0x13, 0x85, 0xed, 0x08, 0xcb, 0x72, 0x9f, 0xa2, 0x7c, + 0x14, 0xa7, 0x34, 0xe8, 0x84, 0x0f, 0xb7, 0x1c, 0x82, 0xff, 0x90, 0xbd, 0xd9, 0xba, 0x98, 0xdf, 0x8b, 0x8c, 0x3b, + 0x91, 0xf0, 0xab, 0x70, 0xe0, 0xee, 0x61, 0xeb, 0xe9, 0x76, 0x70, 0x07, 0x76, 0xa6, 0xa1, 0x15, 0x0a, 0x46, 0xee, + 0x24, 0x74, 0x1c, 0x2f, 0x52, 0x79, 0xf7, 0xa8, 0xbb, 0x28, 0x63, 0x63, 0xd4, 0x3b, 0x18, 0x7a, 0xd5, 0xf6, 0x9e, + 0x5c, 0xfa, 0xb3, 0xcf, 0x1f, 0xc2, 0x1f, 0x9d, 0x67, 0x74, 0x5b, 0xe9, 0xea, 0xda, 0x56, 0x05, 0x5d, 0x7d, 0xbf, + 0xa6, 0x8c, 0x6b, 0x11, 0xae, 0xf4, 0xf1, 0xfb, 0xb6, 0x06, 0xad, 0xf2, 0x5e, 0xcd, 0x8d, 0x96, 0xf5, 0xab, 0x5a, + 0xff, 0xba, 0xc1, 0xef, 0xd9, 0x76, 0xa4, 0x35, 0xd7, 0x7a, 0x5b, 0xf3, 0xed, 0xba, 0x8d, 0xc6, 0x16, 0xe3, 0xaa, + 0xfd, 0x3e, 0xb9, 0x2d, 0x4d, 0x14, 0x1d, 0x08, 0x04, 0x2b, 0x65, 0x5f, 0x5b, 0x29, 0x8c, 0x92, 0x07, 0xf0, 0xe6, + 0x58, 0xef, 0x66, 0x96, 0x66, 0x39, 0xf1, 0xa7, 0x52, 0xce, 0x23, 0xfd, 0xb1, 0xd3, 0xeb, 0xa3, 0x90, 0x8b, 0xc9, + 0x61, 0xa7, 0xd5, 0x6a, 0xc1, 0x1b, 0x3f, 0x7d, 0xef, 0x8a, 0xd1, 0xeb, 0x67, 0xfc, 0x86, 0xf8, 0x4f, 0xbc, 0xa7, + 0xde, 0x93, 0x23, 0xef, 0xd1, 0x63, 0xdf, 0x53, 0xec, 0x9c, 0xf8, 0x4f, 0x8e, 0x7c, 0x4f, 0xb3, 0x73, 0xe2, 0x3f, + 0x7a, 0xec, 0xf7, 0x8e, 0x27, 0x56, 0x25, 0x83, 0x2b, 0x83, 0x5a, 0xdf, 0xc9, 0xa5, 0xe0, 0x1f, 0x69, 0xfd, 0xe0, + 0xea, 0x32, 0x93, 0x89, 0xd6, 0xb1, 0x8f, 0x70, 0x7a, 0x47, 0xf1, 0x3c, 0x52, 0x44, 0xe1, 0x16, 0x82, 0x5b, 0x46, + 0x97, 0xaa, 0x29, 0x40, 0xcd, 0xbc, 0xf4, 0x7b, 0xc7, 0x90, 0x35, 0xee, 0x25, 0xc4, 0x7f, 0xdd, 0x79, 0xe2, 0xb5, + 0x1f, 0x5f, 0x35, 0x1f, 0x8e, 0x5a, 0xcd, 0xb6, 0xd7, 0x6e, 0x76, 0xc2, 0x27, 0x5e, 0x47, 0xff, 0xeb, 0xb5, 0xbc, + 0x23, 0xaf, 0x1d, 0x3e, 0xf1, 0x8e, 0xbc, 0x4e, 0xf8, 0xe4, 0xea, 0xa1, 0x4e, 0x27, 0x88, 0xfd, 0xc3, 0xde, 0x31, + 0x7c, 0xb8, 0xf2, 0x86, 0xf8, 0x9f, 0xfb, 0xfa, 0xf3, 0xb0, 0xfe, 0x67, 0x6e, 0x69, 0xfb, 0xe9, 0xd6, 0xe2, 0xce, + 0x93, 0xad, 0xc5, 0x47, 0x8f, 0xb7, 0x16, 0x3f, 0x7c, 0x54, 0x2f, 0x3e, 0x9c, 0xe8, 0xaa, 0xf2, 0x94, 0x13, 0x7f, + 0x16, 0x4b, 0xc1, 0x6e, 0x82, 0xb6, 0xd7, 0xf2, 0x5a, 0x5e, 0x13, 0xfe, 0x7b, 0xd2, 0x41, 0x65, 0xaf, 0x4b, 0xe8, + 0x55, 0xae, 0xf2, 0xc9, 0x53, 0xaf, 0xfd, 0xf8, 0x65, 0xe7, 0xf1, 0x08, 0xda, 0xa9, 0x85, 0xb6, 0xbd, 0xf6, 0xd5, + 0xd1, 0xd3, 0x51, 0xcb, 0x83, 0x8e, 0x6d, 0xf8, 0x33, 0x7d, 0xd4, 0x19, 0xe9, 0x87, 0x16, 0xd4, 0x7f, 0xdb, 0x7e, + 0x92, 0xb7, 0x9a, 0x6d, 0xf8, 0xf3, 0x4b, 0xa9, 0x11, 0x83, 0x3e, 0xee, 0x8e, 0xfb, 0xb0, 0xe5, 0x1d, 0x3d, 0x9d, + 0x76, 0xc2, 0xcf, 0xaf, 0x9e, 0x84, 0x4f, 0xa7, 0xed, 0x27, 0xdf, 0xea, 0xa7, 0xb4, 0xd9, 0x09, 0x3f, 0x87, 0xbf, + 0xdf, 0x1e, 0xb5, 0xa6, 0xcd, 0x76, 0xf8, 0xf4, 0xea, 0x28, 0x3c, 0x4a, 0x9b, 0x8f, 0xc3, 0xa7, 0xf0, 0xb7, 0x1a, + 0x6e, 0xca, 0x67, 0xd4, 0xf7, 0x60, 0xbf, 0xd7, 0xcc, 0x2d, 0x77, 0x8e, 0xce, 0x43, 0xef, 0xd1, 0xc3, 0x97, 0x4f, + 0xaf, 0x9a, 0x0f, 0xa7, 0xed, 0xce, 0x55, 0x73, 0xe7, 0xcf, 0x6f, 0x01, 0xf1, 0x66, 0xe0, 0x98, 0xc2, 0xf5, 0x1d, + 0x8b, 0x38, 0xf5, 0xf6, 0xd9, 0x07, 0x38, 0xdf, 0x65, 0x5e, 0x8b, 0x4f, 0x9b, 0xd7, 0x19, 0xbd, 0x8f, 0x7d, 0x2d, + 0xfe, 0x70, 0xfb, 0x3a, 0xa7, 0x6b, 0x4e, 0xd5, 0x5b, 0xb9, 0x61, 0x46, 0xaf, 0xdb, 0x5e, 0xef, 0x64, 0x30, 0x60, + 0xf0, 0x95, 0xa3, 0xa2, 0x7b, 0x0b, 0x2f, 0xb8, 0x76, 0xbd, 0x0d, 0x1c, 0x0e, 0xf2, 0xad, 0xd4, 0x27, 0x99, 0xef, + 0x42, 0x48, 0xfa, 0x69, 0x84, 0x7c, 0x7b, 0x1f, 0x7c, 0xa4, 0x7f, 0x38, 0x3e, 0xb8, 0x8b, 0x8f, 0x9a, 0x9f, 0x57, + 0xd9, 0xb3, 0xca, 0x1e, 0x3d, 0x53, 0xcf, 0x01, 0xdc, 0xf0, 0x68, 0xf8, 0x87, 0x14, 0x8a, 0x72, 0x5f, 0xc7, 0x15, + 0xde, 0xfc, 0x1a, 0x97, 0xb4, 0xbe, 0xce, 0x45, 0x7c, 0x63, 0xfc, 0xcf, 0xe1, 0x4b, 0x06, 0xf6, 0xe1, 0x4a, 0x5f, + 0x30, 0x26, 0x7e, 0x27, 0x6c, 0x85, 0xad, 0xd2, 0x71, 0x00, 0x57, 0xf8, 0xc8, 0x92, 0xcb, 0x18, 0x3e, 0xa6, 0x99, + 0xf2, 0x89, 0xfa, 0xec, 0x26, 0xbc, 0xec, 0x5c, 0x7d, 0x00, 0x55, 0xbf, 0x67, 0x3e, 0xf2, 0x7d, 0x73, 0xf1, 0x1f, + 0xae, 0x88, 0x7d, 0x03, 0xd7, 0xe8, 0xac, 0xc7, 0x7a, 0x06, 0x36, 0xf5, 0x6b, 0x9a, 0xb0, 0x38, 0xf0, 0x83, 0xb9, + 0xa0, 0x63, 0x2a, 0xf2, 0x66, 0xed, 0x6e, 0x99, 0xba, 0x56, 0x86, 0x7c, 0xfb, 0xd9, 0x46, 0x01, 0x2f, 0xef, 0x25, + 0x03, 0xe3, 0xd5, 0xf2, 0x8d, 0x9a, 0xef, 0x17, 0xd8, 0x96, 0x08, 0xe0, 0xe8, 0x95, 0x6a, 0xe0, 0x6b, 0xdd, 0xa0, + 0x1d, 0x76, 0x1e, 0x21, 0xcd, 0x4b, 0xe0, 0xa5, 0xa8, 0xdf, 0x07, 0xcd, 0xa3, 0xd6, 0x9f, 0x90, 0xd3, 0xad, 0x1c, + 0x68, 0x68, 0x9c, 0x3a, 0xa2, 0xfa, 0xdc, 0x6d, 0xfd, 0xe2, 0x9f, 0xaf, 0x29, 0xe2, 0x33, 0xbd, 0x76, 0x78, 0xbd, + 0xaa, 0x89, 0x1f, 0xea, 0xeb, 0xeb, 0x63, 0x36, 0x09, 0xdc, 0x8f, 0x99, 0xea, 0x97, 0xae, 0xaa, 0x6f, 0x20, 0xa3, + 0xa2, 0x6a, 0x22, 0xd0, 0x52, 0xf9, 0xe2, 0x59, 0xe6, 0x89, 0xd5, 0x2a, 0x10, 0xe0, 0x88, 0x25, 0x0e, 0x4e, 0xe1, + 0x19, 0xd5, 0x90, 0x2c, 0x70, 0x09, 0x90, 0x42, 0x30, 0x11, 0xfa, 0xff, 0xaa, 0xd8, 0xfe, 0x30, 0xee, 0x95, 0x30, + 0x8d, 0xb3, 0x09, 0x50, 0x61, 0x9c, 0x4d, 0x36, 0x9c, 0x37, 0x3a, 0x9c, 0xb0, 0x56, 0x5a, 0x0d, 0x55, 0x39, 0x69, + 0xf2, 0x67, 0xb7, 0xef, 0xcd, 0xdb, 0x99, 0x7c, 0xf0, 0x81, 0x2a, 0xdf, 0x77, 0xf5, 0x26, 0xd9, 0x06, 0x79, 0xa0, + 0x3f, 0x0f, 0xae, 0xf2, 0xd1, 0x40, 0xfa, 0xc1, 0x95, 0x3e, 0xcf, 0xd8, 0x3c, 0xc4, 0xd7, 0xb2, 0x2f, 0xa1, 0x57, + 0x6c, 0x64, 0x44, 0x18, 0xf6, 0xcc, 0xb5, 0xe6, 0xa6, 0xda, 0x1a, 0xd2, 0xc6, 0xda, 0xea, 0x1f, 0xc5, 0x2a, 0xbf, + 0x98, 0x64, 0xdc, 0xef, 0x3d, 0x28, 0xbf, 0xcd, 0xb8, 0x6b, 0x13, 0xe0, 0x9b, 0xe5, 0x03, 0x41, 0xd3, 0x7f, 0x26, + 0x0f, 0xe0, 0xab, 0xe5, 0x0f, 0x86, 0xf0, 0xc1, 0xec, 0x50, 0x89, 0x82, 0x07, 0xd5, 0xc7, 0xcb, 0x81, 0x0f, 0x36, + 0x6e, 0x66, 0x29, 0xbe, 0xaf, 0xf8, 0x36, 0xa2, 0xba, 0xf3, 0xa8, 0x12, 0xd5, 0x9d, 0x47, 0xae, 0xf4, 0x6c, 0x7b, + 0xed, 0x4e, 0xf8, 0xc8, 0x11, 0x00, 0x57, 0x4d, 0xf8, 0xbf, 0x26, 0x02, 0x1e, 0x86, 0x8f, 0x4a, 0x19, 0xf0, 0xaa, + 0xdd, 0x09, 0x8f, 0xb4, 0xb8, 0xe9, 0x84, 0x8f, 0x7e, 0x50, 0x0c, 0x5a, 0x33, 0xe7, 0xfa, 0x81, 0xd8, 0x12, 0xaa, + 0xd1, 0x49, 0x75, 0x3e, 0x0e, 0xca, 0x2f, 0xc0, 0x99, 0xf3, 0x69, 0x5c, 0x42, 0xcf, 0x63, 0x01, 0x9f, 0xe1, 0xa8, + 0x9f, 0xdd, 0x5a, 0x1d, 0xae, 0xf1, 0x8b, 0x2d, 0x53, 0xc0, 0x09, 0xf7, 0xb1, 0x7b, 0x2f, 0x18, 0x2e, 0xd5, 0xaa, + 0x97, 0x16, 0xdb, 0x77, 0xb7, 0xed, 0x26, 0x6d, 0xdd, 0xd0, 0xbe, 0x1f, 0x4e, 0x31, 0x0b, 0xa6, 0x5e, 0x10, 0xaf, + 0x26, 0xf9, 0x32, 0x29, 0xd6, 0xe7, 0x87, 0xdc, 0x3e, 0xc1, 0x9d, 0xab, 0xd1, 0xb4, 0x4a, 0x3f, 0x4f, 0x18, 0x5c, + 0x66, 0x2f, 0x0a, 0x0b, 0x7a, 0xcd, 0x19, 0x58, 0x61, 0x49, 0xf1, 0x0b, 0x9a, 0xf7, 0x7d, 0x28, 0xf2, 0x23, 0x5f, + 0x39, 0x92, 0xfc, 0xf2, 0x53, 0x24, 0x25, 0x61, 0x57, 0x05, 0x58, 0x5d, 0x21, 0x81, 0x53, 0x0b, 0xf8, 0xf1, 0xd1, + 0xc1, 0xc1, 0xce, 0xf3, 0xa2, 0xb4, 0x31, 0x58, 0x6b, 0xf5, 0x09, 0x03, 0x97, 0x15, 0xf9, 0x2e, 0xa2, 0xcb, 0x71, + 0x15, 0x0a, 0x91, 0xc1, 0xd3, 0x25, 0x8d, 0x65, 0x18, 0x67, 0x3a, 0x45, 0xc1, 0x61, 0x58, 0xb8, 0x4d, 0x8f, 0x50, + 0xc1, 0x65, 0xec, 0x7c, 0xa3, 0xd4, 0x9c, 0x73, 0x2e, 0x63, 0x7b, 0xd1, 0x2f, 0x93, 0xb5, 0x4c, 0xf8, 0x69, 0xa7, + 0xf7, 0xf6, 0xfd, 0x89, 0xa7, 0x8f, 0xe7, 0xf1, 0xe1, 0xb4, 0xd3, 0x3b, 0x56, 0x96, 0xb9, 0xbe, 0x26, 0x44, 0xf4, + 0x35, 0x21, 0xcf, 0x5c, 0x19, 0x83, 0x78, 0x4d, 0x71, 0xa8, 0x97, 0xed, 0x7b, 0x34, 0x1b, 0x69, 0x9f, 0xe2, 0x6c, + 0x91, 0x4a, 0x06, 0x2f, 0xe0, 0x3d, 0x84, 0xae, 0x4d, 0xd8, 0xb0, 0x32, 0xcf, 0xd4, 0x6a, 0x38, 0x32, 0xb3, 0x1e, + 0xc8, 0x31, 0x4b, 0xa9, 0xcd, 0x2c, 0x35, 0x43, 0x95, 0x79, 0xcf, 0x9b, 0xad, 0xf3, 0xc5, 0xe5, 0x8c, 0xc9, 0x32, + 0x15, 0xf4, 0x83, 0xe9, 0x70, 0xac, 0xa6, 0xea, 0x5d, 0x14, 0xc6, 0x45, 0x6a, 0x3f, 0x36, 0xb2, 0xf6, 0x79, 0x77, + 0xbd, 0x7a, 0x23, 0x21, 0xe0, 0xbe, 0xcf, 0xf4, 0xa8, 0x57, 0x3a, 0x25, 0xdd, 0xba, 0xe2, 0xf8, 0x70, 0x7a, 0xd4, + 0xbb, 0x88, 0xe6, 0x66, 0xbc, 0x57, 0x7c, 0xe3, 0x53, 0xf1, 0x25, 0xc7, 0xec, 0xab, 0xc4, 0x76, 0x7d, 0x83, 0xd2, + 0x00, 0x3c, 0xe2, 0xa9, 0xdf, 0x3b, 0x36, 0xca, 0x80, 0xa7, 0x82, 0xae, 0xfe, 0xa3, 0x96, 0xcd, 0x95, 0x4f, 0xb9, + 0xd2, 0x96, 0x74, 0x17, 0x67, 0x92, 0x9a, 0x5f, 0x77, 0xda, 0xee, 0x1d, 0xc7, 0x46, 0xcd, 0x04, 0xe6, 0x91, 0x47, + 0x87, 0xd0, 0x19, 0x74, 0xb9, 0x90, 0xf1, 0xc3, 0x6b, 0x7a, 0xd9, 0x8c, 0xe7, 0xac, 0x72, 0xa2, 0x82, 0xd2, 0x51, + 0x4e, 0xc9, 0xab, 0x99, 0xe0, 0x67, 0xbc, 0xb6, 0x48, 0xc5, 0xc2, 0x0b, 0xe3, 0xa1, 0x55, 0xba, 0x3a, 0x8d, 0xa5, + 0xef, 0x69, 0x0e, 0x6f, 0x3d, 0xb9, 0x46, 0xf6, 0x16, 0x7e, 0xef, 0xdf, 0xfe, 0xc7, 0xff, 0x32, 0xce, 0xd9, 0xe3, + 0xc3, 0x69, 0xdb, 0x8e, 0xb5, 0x86, 0xe8, 0xe2, 0x18, 0xae, 0x97, 0x55, 0xd1, 0x44, 0x7a, 0xd3, 0x9c, 0x08, 0x96, + 0x34, 0xa7, 0x71, 0x3a, 0xf6, 0x7b, 0xbb, 0x11, 0xe4, 0xde, 0x2b, 0x31, 0x50, 0xd7, 0x8b, 0x80, 0x04, 0x7f, 0xd3, + 0xcd, 0x08, 0x9b, 0x60, 0xaf, 0x4e, 0xab, 0x7b, 0x4f, 0xa2, 0x3a, 0x50, 0xb5, 0xbb, 0x12, 0xc2, 0x7c, 0x93, 0xc8, + 0x30, 0x35, 0x51, 0xbb, 0x22, 0x51, 0xf8, 0x5e, 0x19, 0x0d, 0xf9, 0xbf, 0xff, 0xf3, 0xbf, 0xfc, 0x37, 0xfb, 0x08, + 0x41, 0x8e, 0x7f, 0xfb, 0xef, 0xff, 0xf9, 0xff, 0xfc, 0xef, 0xff, 0x0a, 0x69, 0xf5, 0x26, 0x10, 0xa2, 0xf8, 0x84, + 0x57, 0x45, 0x41, 0x34, 0xc3, 0xf0, 0x20, 0x19, 0x6d, 0xc6, 0x72, 0xc9, 0x46, 0xf5, 0x4b, 0x13, 0x67, 0x6a, 0x42, + 0x75, 0xd8, 0x0c, 0x74, 0xea, 0xd0, 0x16, 0x15, 0x8d, 0xd4, 0x50, 0xae, 0x68, 0xb1, 0x38, 0x3e, 0x04, 0x7c, 0xdf, + 0xef, 0x9e, 0x59, 0x58, 0x6e, 0xc7, 0xd2, 0xba, 0xfe, 0xa0, 0xa4, 0xa8, 0xca, 0x3d, 0x70, 0xca, 0x2f, 0xe1, 0x31, + 0xea, 0x38, 0xc5, 0x6a, 0xf7, 0x6a, 0x7d, 0xba, 0x3f, 0x2d, 0x72, 0xc9, 0xc6, 0x80, 0x72, 0xed, 0x60, 0x54, 0xf1, + 0xcf, 0x26, 0xa8, 0x7f, 0xe9, 0x6d, 0xa1, 0x46, 0xd1, 0x36, 0xe3, 0xc3, 0xa7, 0x7f, 0x2a, 0xfe, 0x32, 0x03, 0x25, + 0xcb, 0x0b, 0x66, 0xf1, 0x8d, 0xb1, 0x24, 0x1f, 0xb7, 0x5a, 0xf3, 0x1b, 0xb4, 0xac, 0x66, 0xc0, 0xbb, 0x26, 0x53, + 0x4e, 0x49, 0x77, 0x40, 0x15, 0x38, 0x2d, 0xfd, 0x9f, 0x2d, 0x0f, 0x9c, 0xa8, 0x5e, 0xab, 0x28, 0xfe, 0xbc, 0x54, + 0x2e, 0x38, 0xf6, 0x0b, 0x04, 0x38, 0x8d, 0xb7, 0xf2, 0x92, 0xbb, 0x8b, 0x5b, 0x3a, 0xbd, 0x3a, 0xba, 0xd7, 0xb4, + 0xbd, 0x79, 0x7d, 0xca, 0x0d, 0xd0, 0xba, 0xa1, 0xd5, 0x87, 0x10, 0x2c, 0x9d, 0xb6, 0xf1, 0xb4, 0xb3, 0x2c, 0x87, + 0x97, 0x92, 0xcf, 0xdc, 0x88, 0x2c, 0x8d, 0xe9, 0x88, 0x8e, 0xad, 0x97, 0xd7, 0xd4, 0xeb, 0x68, 0x6b, 0x31, 0x3d, + 0xda, 0x32, 0x97, 0x01, 0x49, 0x45, 0x62, 0xbd, 0x56, 0xf1, 0x19, 0x9c, 0xc0, 0xe5, 0x38, 0xe5, 0xb1, 0x8c, 0x14, + 0xc1, 0x76, 0xdd, 0xb8, 0x6e, 0x0c, 0x6c, 0x86, 0x2f, 0x1d, 0x78, 0xba, 0xba, 0x29, 0xf8, 0x5b, 0xeb, 0x97, 0xdc, + 0x8a, 0x50, 0x75, 0x77, 0x87, 0xd2, 0xee, 0x9a, 0x6f, 0x4d, 0xb8, 0xf4, 0x4d, 0xcd, 0xcf, 0x61, 0x64, 0x4c, 0x07, + 0x6d, 0xaf, 0xd7, 0xa2, 0x5a, 0xd7, 0x7e, 0x25, 0x03, 0x5f, 0x81, 0xe9, 0xaf, 0xb7, 0x52, 0x85, 0xd0, 0xea, 0x0d, + 0xf9, 0xb6, 0xb4, 0x82, 0xe2, 0xf9, 0x5c, 0x35, 0x44, 0xdd, 0xe3, 0x43, 0xad, 0xbc, 0x02, 0xf7, 0x50, 0xb9, 0x00, + 0x3a, 0xf4, 0x6e, 0x1a, 0x99, 0xa3, 0xa0, 0x7f, 0x99, 0xa0, 0x3c, 0x7c, 0xac, 0xaa, 0xf7, 0xff, 0x00, 0xbb, 0x9f, + 0x49, 0x8d, 0x3d, 0x86, 0x00, 0x00}; + +} // namespace web_server +} // namespace esphome +#endif +#endif diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h new file mode 100644 index 0000000000..49de0cfab6 --- /dev/null +++ b/esphome/components/web_server/server_index_v3.h @@ -0,0 +1,3995 @@ +#pragma once +// Generated from https://github.com/esphome/esphome-webserver +#ifdef USE_WEBSERVER_LOCAL +#if USE_WEBSERVER_VERSION == 3 +#include "esphome/core/hal.h" +namespace esphome { + +namespace web_server { + +const uint8_t INDEX_GZ[] PROGMEM = { + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0xeb, 0x7a, 0x1b, 0xb7, 0xb2, 0x20, 0xfa, + 0xfb, 0xcc, 0x53, 0x48, 0xbd, 0x1d, 0xa5, 0x21, 0x82, 0x2d, 0x92, 0xba, 0x58, 0x6e, 0x0a, 0xe2, 0xf8, 0x1a, 0x3b, + 0x71, 0x6c, 0xc7, 0x72, 0xec, 0xd8, 0x0c, 0xb7, 0x02, 0x36, 0x41, 0x12, 0x71, 0x13, 0x60, 0x1a, 0xa0, 0x25, 0x99, + 0xe4, 0xbb, 0x9f, 0xaf, 0x70, 0xe9, 0x46, 0x93, 0xb4, 0xd7, 0x5a, 0x73, 0x66, 0xce, 0x37, 0x3b, 0x7b, 0x59, 0x6c, + 0xdc, 0x51, 0x28, 0x14, 0xaa, 0x0a, 0x55, 0x85, 0x8b, 0xfd, 0x91, 0xcc, 0xf4, 0xdd, 0x9c, 0xed, 0x4d, 0xf5, 0x2c, + 0xbf, 0xbc, 0x70, 0xff, 0x32, 0x3a, 0xba, 0xbc, 0xc8, 0xb9, 0xf8, 0xbc, 0x57, 0xb0, 0x9c, 0xf0, 0x4c, 0x8a, 0xbd, + 0x69, 0xc1, 0xc6, 0x64, 0x44, 0x35, 0x4d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xe5, 0xc5, 0x8c, 0x69, 0xba, 0x97, + 0x4d, 0x69, 0xa1, 0x98, 0x26, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbf, 0xbc, 0x50, 0x59, 0xc1, 0xe7, 0x7a, 0x0f, 0x9a, + 0x24, 0x33, 0x39, 0x5a, 0xe4, 0xec, 0xf2, 0xe8, 0xe8, 0xe6, 0xe6, 0x26, 0xf9, 0x5b, 0xfd, 0x8f, 0x2f, 0xb4, 0xd8, + 0xfb, 0xa5, 0x20, 0xaf, 0x87, 0x7f, 0xb3, 0x4c, 0x27, 0x23, 0x36, 0xe6, 0x82, 0xbd, 0x29, 0xe4, 0x9c, 0x15, 0xfa, + 0xae, 0x0b, 0x99, 0x3f, 0x15, 0x24, 0xe6, 0x58, 0x63, 0x86, 0xc8, 0xa5, 0xde, 0xe3, 0x62, 0x8f, 0xf7, 0x7e, 0x29, + 0x4c, 0xca, 0x92, 0x89, 0xc5, 0x8c, 0x15, 0x74, 0x98, 0xb3, 0x74, 0xbf, 0x85, 0x33, 0x29, 0xc6, 0x7c, 0xb2, 0x28, + 0xbf, 0x6f, 0x0a, 0xae, 0xfd, 0xef, 0x2f, 0x34, 0x5f, 0xb0, 0x94, 0xad, 0x51, 0xca, 0xfb, 0x7a, 0x40, 0x98, 0x69, + 0xf9, 0x73, 0xd5, 0x70, 0xfc, 0x93, 0x69, 0xf2, 0x6e, 0xce, 0xe4, 0x78, 0x4f, 0xef, 0x93, 0x48, 0xdd, 0xcd, 0x86, + 0x32, 0x8f, 0x7a, 0xba, 0x11, 0x45, 0x29, 0x94, 0xc1, 0x0c, 0x75, 0x33, 0x29, 0x94, 0xde, 0x13, 0x9c, 0xdc, 0x70, + 0x31, 0x92, 0x37, 0xf8, 0x46, 0x10, 0xc1, 0x93, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x83, 0x83, 0xd8, + 0x7d, 0xdf, 0x3d, 0xbe, 0xba, 0x22, 0x84, 0x7c, 0x91, 0x7c, 0xb4, 0xd7, 0x5a, 0xad, 0x82, 0xd4, 0x44, 0x50, 0xcd, + 0xbf, 0x30, 0x5b, 0x09, 0x1d, 0x1c, 0x44, 0x74, 0x24, 0xe7, 0x9a, 0x8d, 0xae, 0xf4, 0x5d, 0xce, 0xae, 0xa6, 0x8c, + 0x69, 0x15, 0x71, 0xb1, 0xf7, 0x44, 0x66, 0x8b, 0x19, 0x13, 0x3a, 0x99, 0x17, 0x52, 0x4b, 0x18, 0xd8, 0xc1, 0x41, + 0x54, 0xb0, 0x79, 0x4e, 0x33, 0x06, 0xf9, 0x8f, 0xaf, 0xae, 0xaa, 0x1a, 0x55, 0x21, 0xfc, 0x59, 0x90, 0x2b, 0x33, + 0xf4, 0x18, 0xe1, 0x0f, 0x82, 0x08, 0x76, 0xb3, 0xf7, 0x81, 0xd1, 0xcf, 0xbf, 0xd2, 0x79, 0x37, 0xcb, 0xa9, 0x52, + 0x7b, 0xcf, 0xe4, 0xd2, 0x4c, 0xa3, 0x58, 0x64, 0x5a, 0x16, 0xb1, 0xc6, 0x0c, 0x0b, 0xb4, 0xe4, 0xe3, 0x58, 0x4f, + 0xb9, 0x4a, 0xae, 0xef, 0x65, 0x4a, 0xbd, 0x65, 0x6a, 0x91, 0xeb, 0x7b, 0x64, 0xbf, 0x85, 0xc5, 0x3e, 0x21, 0x9f, + 0x05, 0xd2, 0xd3, 0x42, 0xde, 0xec, 0x3d, 0x2d, 0x0a, 0x59, 0xc4, 0xd1, 0xe3, 0xab, 0x2b, 0x5b, 0x62, 0x8f, 0xab, + 0x3d, 0x21, 0xf5, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xd9, 0xfb, 0x5d, 0xb1, 0xbd, 0xbf, 0x16, 0x42, 0xd1, 0x31, 0x7b, + 0x7c, 0x75, 0xf5, 0xd7, 0x9e, 0x2c, 0xf6, 0xfe, 0xca, 0x94, 0xfa, 0x6b, 0x8f, 0x0b, 0xa5, 0x19, 0x1d, 0x25, 0x11, + 0xea, 0x9a, 0xce, 0x32, 0xa5, 0xde, 0xb1, 0x5b, 0x4d, 0x34, 0x36, 0x9f, 0x9a, 0xb0, 0xf5, 0x84, 0xe9, 0x3d, 0x55, + 0xce, 0x2b, 0x46, 0xcb, 0x9c, 0xe9, 0x3d, 0x4d, 0x4c, 0xbe, 0x74, 0xf0, 0x67, 0xf6, 0x53, 0x77, 0xf9, 0x38, 0xbe, + 0x11, 0x07, 0x07, 0xba, 0x04, 0x34, 0x5a, 0xba, 0x15, 0x22, 0x6c, 0xdf, 0xa7, 0x1d, 0x1c, 0xb0, 0x24, 0x67, 0x62, + 0xa2, 0xa7, 0x84, 0x90, 0x76, 0x57, 0x1c, 0x1c, 0xc4, 0x9a, 0x7c, 0x10, 0xc9, 0x84, 0xe9, 0x98, 0x21, 0x84, 0xab, + 0xda, 0x07, 0x07, 0xb1, 0x05, 0x82, 0x24, 0xda, 0x00, 0xae, 0x06, 0x63, 0x94, 0x38, 0xe8, 0x5f, 0xdd, 0x89, 0x2c, + 0x0e, 0xc7, 0x8f, 0xb0, 0x38, 0x38, 0xf8, 0x20, 0x12, 0x05, 0x2d, 0x62, 0x8d, 0xd0, 0xba, 0x60, 0x7a, 0x51, 0x88, + 0x3d, 0xbd, 0xd6, 0xf2, 0x4a, 0x17, 0x5c, 0x4c, 0x62, 0xb4, 0xf4, 0x69, 0x41, 0xc5, 0xf5, 0xda, 0x0e, 0xf7, 0xb7, + 0x82, 0x70, 0x72, 0x09, 0x3d, 0x3e, 0x93, 0xb1, 0xc3, 0x41, 0x4e, 0x48, 0xa4, 0x4c, 0xdd, 0xa8, 0xc7, 0x53, 0xde, + 0x88, 0x22, 0x6c, 0x47, 0x89, 0x3f, 0x0b, 0x84, 0xb9, 0x06, 0xd4, 0x4d, 0x92, 0x44, 0x23, 0x72, 0xb9, 0xf4, 0x60, + 0xe1, 0xc1, 0x44, 0x7b, 0xbc, 0xdf, 0x1a, 0xa4, 0x3a, 0x29, 0xd8, 0x68, 0x91, 0xb1, 0x38, 0x16, 0x58, 0x61, 0x89, + 0xc8, 0xa5, 0x68, 0xc4, 0x05, 0xb9, 0x84, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xb9, 0x41, 0x16, 0x7e, + 0x84, 0x00, 0x62, 0x37, 0xa0, 0x82, 0x90, 0x48, 0x2c, 0x66, 0x43, 0x56, 0x44, 0x65, 0xb1, 0x6e, 0x0d, 0x2f, 0x16, + 0x8a, 0xed, 0x65, 0x4a, 0xed, 0x8d, 0x17, 0x22, 0xd3, 0x5c, 0x8a, 0xbd, 0xa8, 0x51, 0x34, 0x22, 0x8b, 0x0f, 0x25, + 0x3a, 0x44, 0x68, 0x8d, 0x62, 0x85, 0x1a, 0xbc, 0x2f, 0x1b, 0xed, 0x01, 0x86, 0x51, 0xa2, 0xae, 0x6b, 0xcf, 0x41, + 0x80, 0x61, 0x0e, 0x93, 0x5c, 0xe3, 0x4f, 0x76, 0xe7, 0xc3, 0x14, 0x6f, 0x44, 0x8f, 0x27, 0xdb, 0x3b, 0x85, 0xe8, + 0x64, 0x46, 0xe7, 0x31, 0x23, 0x97, 0xcc, 0x60, 0x17, 0x15, 0x19, 0x8c, 0xb5, 0xb6, 0x70, 0x3d, 0x96, 0xb2, 0xa4, + 0xc2, 0x29, 0x94, 0xea, 0x64, 0x2c, 0x8b, 0xa7, 0x34, 0x9b, 0x42, 0xbd, 0x12, 0x63, 0x46, 0x7e, 0xc3, 0x65, 0x05, + 0xa3, 0x9a, 0x3d, 0xcd, 0x19, 0x7c, 0xc5, 0x91, 0xa9, 0x19, 0x21, 0xac, 0x60, 0xab, 0xe7, 0x5c, 0xbf, 0x92, 0x22, + 0x63, 0x5d, 0x15, 0xe0, 0x97, 0x59, 0xf9, 0x87, 0x5a, 0x17, 0x7c, 0xb8, 0xd0, 0x2c, 0x8e, 0x04, 0x94, 0x88, 0xb0, + 0x42, 0x58, 0x24, 0x9a, 0xdd, 0xea, 0xc7, 0x52, 0x68, 0x26, 0x34, 0x61, 0x1e, 0xaa, 0x98, 0x27, 0x74, 0x3e, 0x67, + 0x62, 0xf4, 0x78, 0xca, 0xf3, 0x51, 0x2c, 0xd0, 0x1a, 0xad, 0xf1, 0xef, 0x82, 0xc0, 0x24, 0xc9, 0x25, 0x4f, 0xe1, + 0x9f, 0x6f, 0x4f, 0x27, 0xd6, 0xe4, 0xd2, 0x6c, 0x0b, 0x46, 0xa2, 0xa8, 0x3b, 0x96, 0x45, 0xec, 0xa6, 0xb0, 0x07, + 0xa4, 0x0b, 0xfa, 0x78, 0xbb, 0xc8, 0x99, 0x42, 0xac, 0x41, 0x44, 0xb9, 0x8e, 0x0e, 0xc2, 0xbf, 0x15, 0x31, 0x83, + 0x05, 0xe0, 0x28, 0xe5, 0x86, 0x04, 0xbe, 0xe4, 0x6e, 0x53, 0x8d, 0x4a, 0xa2, 0xf6, 0x51, 0x90, 0x11, 0x4f, 0x74, + 0xb1, 0x50, 0x9a, 0x8d, 0xde, 0xdd, 0xcd, 0x99, 0xc2, 0x3f, 0x17, 0xe4, 0xa3, 0xe8, 0x7d, 0x14, 0x09, 0x9b, 0xcd, + 0xf5, 0xdd, 0x95, 0xa1, 0xe6, 0x69, 0x14, 0xe1, 0x7f, 0x4c, 0xd1, 0x82, 0xd1, 0x0c, 0x48, 0x9a, 0x03, 0xd9, 0x1b, + 0x99, 0xdf, 0x8d, 0x79, 0x9e, 0x5f, 0x2d, 0xe6, 0x73, 0x59, 0x68, 0xac, 0x05, 0x59, 0x6a, 0x59, 0xc1, 0x07, 0x56, + 0x74, 0xa9, 0x6e, 0xb8, 0xce, 0xa6, 0xb1, 0x46, 0xcb, 0x8c, 0x2a, 0xb6, 0xf7, 0x48, 0xca, 0x9c, 0x51, 0x91, 0x72, + 0xc2, 0x7b, 0x3f, 0x17, 0xa9, 0x58, 0xe4, 0x79, 0x77, 0x58, 0x30, 0xfa, 0xb9, 0x6b, 0xb2, 0xed, 0xe1, 0x90, 0x9a, + 0xdf, 0x0f, 0x8b, 0x82, 0xde, 0x41, 0x41, 0x42, 0xa0, 0x58, 0x8f, 0xa7, 0x3f, 0x5f, 0xbd, 0x7e, 0x95, 0xd8, 0xbd, + 0xc2, 0xc7, 0x77, 0x31, 0x2f, 0xf7, 0x1f, 0x5f, 0xe3, 0x71, 0x21, 0x67, 0x1b, 0x5d, 0x5b, 0xd0, 0xf1, 0xee, 0x37, + 0x86, 0xc0, 0x08, 0xdf, 0xb7, 0x4d, 0x87, 0x23, 0x78, 0x65, 0x30, 0x1f, 0x32, 0x89, 0xeb, 0x17, 0xfe, 0x49, 0x6d, + 0x72, 0xcc, 0xd1, 0xf7, 0x47, 0xab, 0x8b, 0xbb, 0x25, 0x23, 0x66, 0x9c, 0x73, 0x38, 0x18, 0x61, 0x8c, 0x19, 0xd5, + 0xd9, 0x74, 0xc9, 0x4c, 0x63, 0x6b, 0x3f, 0x62, 0xb6, 0x5e, 0xe3, 0xaf, 0xd2, 0x63, 0xbd, 0xde, 0x27, 0x84, 0x1b, + 0x7a, 0x45, 0xf4, 0x6a, 0xc5, 0x09, 0xe1, 0x08, 0xbf, 0xe5, 0x64, 0x49, 0xfd, 0x84, 0xe0, 0x64, 0x83, 0xed, 0x99, + 0x5a, 0x2a, 0x03, 0x27, 0xe0, 0x17, 0x56, 0x68, 0x56, 0xa4, 0x5a, 0xe0, 0x82, 0x8d, 0x73, 0x18, 0xc7, 0x7e, 0x1b, + 0x4f, 0xa9, 0x7a, 0x3c, 0xa5, 0x62, 0xc2, 0x46, 0xe9, 0x57, 0xb9, 0xc6, 0x4c, 0x90, 0x68, 0xcc, 0x05, 0xcd, 0xf9, + 0x57, 0x36, 0x8a, 0xdc, 0xb9, 0xf0, 0x48, 0xef, 0xb1, 0x5b, 0xcd, 0xc4, 0x48, 0xed, 0x3d, 0x7f, 0xf7, 0xeb, 0x4b, + 0xb7, 0x98, 0xb5, 0xb3, 0x02, 0x2d, 0xd5, 0x62, 0xce, 0x8a, 0x18, 0x61, 0x77, 0x56, 0x3c, 0xe5, 0x86, 0x4e, 0xfe, + 0x4a, 0xe7, 0x36, 0x85, 0xab, 0xdf, 0xe7, 0x23, 0xaa, 0xd9, 0x1b, 0x26, 0x46, 0x5c, 0x4c, 0xc8, 0x7e, 0xdb, 0xa6, + 0x4f, 0xa9, 0xcb, 0x18, 0x95, 0x49, 0xd7, 0xf7, 0x9e, 0xe6, 0x66, 0xee, 0xe5, 0xe7, 0x22, 0x46, 0x6b, 0xa5, 0xa9, + 0xe6, 0xd9, 0x1e, 0x1d, 0x8d, 0x5e, 0x08, 0xae, 0xb9, 0x19, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xec, 0xa9, 0xe1, + 0x47, 0x1e, 0x23, 0x1c, 0xc7, 0xee, 0x2c, 0x98, 0x22, 0xb7, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb1, 0xd4, 0x66, + 0x92, 0xfe, 0x00, 0x25, 0xf3, 0x85, 0x82, 0xc5, 0xf6, 0x5d, 0xc0, 0x41, 0x23, 0x87, 0x8a, 0x15, 0x5f, 0xd8, 0xa8, + 0x44, 0x10, 0x15, 0xa3, 0xe5, 0x46, 0x1f, 0x6e, 0x7b, 0x68, 0xd2, 0x1f, 0x74, 0x43, 0x12, 0xce, 0x1c, 0xb2, 0x5b, + 0x4e, 0x85, 0x33, 0x55, 0x12, 0x95, 0x18, 0x0e, 0xd4, 0x92, 0xb0, 0x28, 0xe2, 0xe7, 0x37, 0x8f, 0x05, 0xf0, 0x10, + 0x21, 0xe5, 0xf0, 0x67, 0xee, 0xd3, 0x2f, 0xe6, 0xf0, 0x50, 0x58, 0x20, 0xac, 0xed, 0x48, 0x15, 0x42, 0x6b, 0x84, + 0xb5, 0x1f, 0xae, 0x25, 0x4a, 0x9e, 0x2f, 0x82, 0x53, 0x9b, 0xbc, 0xe5, 0xe6, 0xd8, 0x06, 0xda, 0x46, 0x35, 0x3b, + 0x38, 0x88, 0x59, 0x52, 0x22, 0x06, 0xd9, 0x6f, 0xbb, 0x45, 0x0a, 0xa0, 0xf5, 0x8d, 0x71, 0x43, 0xcf, 0x86, 0xc1, + 0xd9, 0x67, 0x89, 0x90, 0x0f, 0xb3, 0x8c, 0x29, 0x25, 0x8b, 0x83, 0x83, 0x7d, 0x53, 0xbe, 0xe4, 0x2c, 0x60, 0x11, + 0x5f, 0xdf, 0x88, 0x6a, 0x08, 0xa8, 0x3a, 0x6d, 0x3d, 0xdf, 0x44, 0x2a, 0xbe, 0xc9, 0x33, 0x21, 0x69, 0x74, 0x7d, + 0x1d, 0x35, 0x34, 0x76, 0x70, 0x98, 0x30, 0xdf, 0xf5, 0xdd, 0x13, 0x66, 0xd9, 0x42, 0xc3, 0x84, 0x6c, 0x81, 0x66, + 0x27, 0x3f, 0x18, 0xd7, 0x87, 0x84, 0x35, 0x56, 0x68, 0x1d, 0xac, 0xe8, 0xce, 0xa6, 0x0d, 0x7f, 0x63, 0x97, 0x6e, + 0x39, 0x31, 0x3c, 0x45, 0xb0, 0x8e, 0x7d, 0x36, 0x58, 0x63, 0x03, 0x7b, 0x3f, 0x1b, 0x69, 0x06, 0xda, 0xd7, 0x83, + 0xae, 0xcb, 0x27, 0xca, 0x42, 0xae, 0x60, 0xff, 0x2c, 0x98, 0xd2, 0x16, 0x91, 0x63, 0x8d, 0x25, 0x86, 0x33, 0x6a, + 0x93, 0xe9, 0xac, 0xb1, 0xa4, 0xbb, 0xc6, 0xf6, 0x7a, 0x0e, 0x67, 0xa3, 0x02, 0xa4, 0xfe, 0x3e, 0x3e, 0xc1, 0x58, + 0x35, 0x5a, 0xad, 0xde, 0x72, 0xdf, 0x4a, 0xb5, 0x96, 0x25, 0xbf, 0xb6, 0xb1, 0x28, 0x4c, 0x20, 0x77, 0x38, 0xef, + 0xb7, 0xdd, 0xf8, 0xc5, 0x80, 0xec, 0xb7, 0x4a, 0x2c, 0x76, 0x60, 0xb5, 0xe3, 0xb1, 0x50, 0x7c, 0x6d, 0x9b, 0x42, + 0xe6, 0xac, 0xaf, 0xe1, 0x4b, 0x32, 0xdd, 0xc2, 0xd5, 0x29, 0xe9, 0x03, 0xd7, 0x91, 0x4c, 0x07, 0xdf, 0xc2, 0x27, + 0x4f, 0x11, 0x62, 0xbd, 0x9d, 0x57, 0x11, 0x8e, 0x2f, 0x75, 0xc2, 0xb1, 0x31, 0x8d, 0x68, 0x5e, 0x56, 0x89, 0x4a, + 0x34, 0x73, 0x5b, 0xbd, 0xca, 0xc2, 0xc2, 0x0c, 0xa6, 0x9a, 0x52, 0xd0, 0xc4, 0x2b, 0x3a, 0x63, 0x2a, 0x66, 0x08, + 0x7f, 0xab, 0x80, 0xc5, 0x4f, 0x28, 0x32, 0x08, 0xce, 0x50, 0x05, 0x67, 0x28, 0xb0, 0xbb, 0xc0, 0xa4, 0xd5, 0xb7, + 0x9c, 0xc2, 0xac, 0xaf, 0x06, 0x15, 0x6f, 0x17, 0x4c, 0xde, 0x1c, 0xce, 0x0e, 0xc1, 0x3d, 0xfc, 0x6c, 0x9a, 0x05, + 0x9a, 0x61, 0x21, 0x14, 0xc2, 0xfb, 0xad, 0xcd, 0x95, 0xf4, 0xa5, 0xaa, 0x39, 0xf6, 0x07, 0xb0, 0x0e, 0xe6, 0xd8, + 0x48, 0xb8, 0x32, 0x7f, 0x6b, 0x5b, 0x0d, 0xc0, 0x76, 0x05, 0x98, 0x91, 0x8c, 0x73, 0xaa, 0xe3, 0xf6, 0x51, 0x0b, + 0x18, 0xd3, 0x2f, 0x0c, 0x4e, 0x15, 0x84, 0xb6, 0xa7, 0xc2, 0x92, 0x85, 0x50, 0x53, 0x3e, 0xd6, 0xf1, 0xef, 0xc2, + 0x10, 0x15, 0x96, 0x2b, 0x06, 0x12, 0x4e, 0xc0, 0x1e, 0x1b, 0x82, 0xf3, 0xbb, 0x80, 0x7e, 0xba, 0xe5, 0x41, 0xe4, + 0x46, 0x6a, 0x08, 0x17, 0x90, 0x87, 0x8a, 0xb5, 0xae, 0xc8, 0x4c, 0xc9, 0xb8, 0x01, 0xf7, 0xd8, 0xee, 0xd9, 0x16, + 0x53, 0x47, 0x0d, 0x44, 0xc0, 0xc1, 0x8a, 0x34, 0x24, 0x11, 0x2e, 0x51, 0x27, 0x5a, 0xbe, 0x94, 0x37, 0xac, 0x78, + 0x4c, 0x61, 0xf0, 0xa9, 0xad, 0xbe, 0xb6, 0x47, 0x81, 0xa1, 0xf8, 0xba, 0xeb, 0xf1, 0xe5, 0xda, 0x4c, 0xfc, 0x4d, + 0x21, 0x67, 0x5c, 0x31, 0xe0, 0xdb, 0x2c, 0xfc, 0x05, 0x6c, 0x34, 0xb3, 0x23, 0xe1, 0xb8, 0x61, 0x25, 0x7e, 0x3d, + 0x7c, 0x59, 0xc7, 0xaf, 0xeb, 0x7b, 0x4f, 0x27, 0x9e, 0x02, 0xd6, 0xf7, 0x31, 0xc2, 0xb1, 0x13, 0x2f, 0x82, 0x93, + 0x2e, 0x99, 0x22, 0x77, 0xcc, 0xaf, 0x56, 0x3a, 0x10, 0xe3, 0x6a, 0x9c, 0x23, 0xb3, 0xdb, 0x06, 0xad, 0xe9, 0x68, + 0x04, 0x2c, 0x5e, 0x21, 0xf3, 0x3c, 0x38, 0xac, 0xb0, 0xe8, 0x96, 0xc7, 0xd3, 0xf5, 0xbd, 0xa7, 0x57, 0xdf, 0x3b, + 0xa1, 0x20, 0x3f, 0x3c, 0xa4, 0xfc, 0x40, 0xc5, 0x88, 0x15, 0x20, 0x57, 0x06, 0xab, 0xe5, 0xce, 0xd9, 0xc7, 0x52, + 0x08, 0x96, 0x69, 0x36, 0x02, 0xa1, 0x45, 0x10, 0x9d, 0x4c, 0xa5, 0xd2, 0x65, 0x62, 0x35, 0x7a, 0x11, 0x0a, 0xa1, + 0x49, 0x46, 0xf3, 0x3c, 0xb6, 0x02, 0xca, 0x4c, 0x7e, 0x61, 0x3b, 0x46, 0xdd, 0xad, 0x0d, 0xb9, 0x6c, 0x86, 0x05, + 0xcd, 0xb0, 0x44, 0xcd, 0x73, 0x9e, 0xb1, 0xf2, 0xf0, 0xba, 0x4a, 0xb8, 0x18, 0xb1, 0x5b, 0xa0, 0x23, 0xe8, 0xf2, + 0xf2, 0xb2, 0x85, 0xdb, 0x68, 0x6d, 0x01, 0xbe, 0xdc, 0x02, 0xec, 0x77, 0x8e, 0x4d, 0x2b, 0x88, 0x2f, 0x77, 0x92, + 0x35, 0x14, 0x9c, 0x95, 0xdc, 0x0b, 0x5a, 0x96, 0x3c, 0x23, 0x3c, 0x62, 0x39, 0xd3, 0xcc, 0x93, 0x73, 0x60, 0xa6, + 0xed, 0xd6, 0x7d, 0x5b, 0xc2, 0xaf, 0x44, 0x27, 0xbf, 0xcb, 0xfc, 0x9a, 0xab, 0x52, 0x74, 0xaf, 0x96, 0xa7, 0x82, + 0x76, 0x4f, 0xdb, 0xe5, 0xa1, 0x5a, 0xd3, 0x6c, 0x6a, 0x25, 0xf6, 0x78, 0x6b, 0x4a, 0x55, 0x1b, 0x8e, 0xb4, 0x97, + 0x9b, 0xe8, 0x53, 0xe1, 0x86, 0xb9, 0x0b, 0x04, 0x57, 0x8e, 0x28, 0x30, 0x10, 0x02, 0xed, 0xb2, 0x3d, 0xa6, 0x79, + 0x3e, 0xa4, 0xd9, 0xe7, 0x3a, 0xf6, 0x57, 0x68, 0x40, 0x36, 0xa9, 0x71, 0x90, 0x15, 0x90, 0xac, 0x70, 0xde, 0x9e, + 0x4a, 0xd7, 0x36, 0x4a, 0xbc, 0xdf, 0xaa, 0xd0, 0xbe, 0xbe, 0xd0, 0xdf, 0xc4, 0x76, 0x33, 0x22, 0xe1, 0x66, 0x16, + 0x03, 0x15, 0xf8, 0x97, 0x18, 0xe7, 0xe9, 0x81, 0xc3, 0x3b, 0x10, 0x3c, 0xd6, 0x1b, 0x03, 0xd1, 0x68, 0xb9, 0x1e, + 0x71, 0xf5, 0x6d, 0x08, 0xfc, 0x6f, 0x19, 0xe5, 0x93, 0xa0, 0x87, 0x7f, 0x77, 0xa0, 0x25, 0x8d, 0x73, 0x8c, 0x73, + 0x39, 0x32, 0xc7, 0x50, 0x78, 0x42, 0xf3, 0x0b, 0x30, 0x2f, 0x06, 0xdf, 0x5f, 0xdb, 0x2c, 0xc3, 0x97, 0xc1, 0x30, + 0x54, 0x37, 0x64, 0x28, 0x6a, 0x28, 0xe0, 0x88, 0xaa, 0x30, 0x67, 0xae, 0xac, 0x89, 0x92, 0x8e, 0x6b, 0xb7, 0xe2, + 0xb8, 0xa3, 0xb9, 0x05, 0x89, 0xe3, 0x58, 0x81, 0x34, 0xe7, 0xf9, 0xfb, 0x6a, 0x16, 0x6a, 0x6b, 0x16, 0x2a, 0x09, + 0xa4, 0x2d, 0x54, 0x21, 0x73, 0x50, 0x3d, 0xd5, 0x02, 0x85, 0xa5, 0x80, 0x65, 0x4d, 0x80, 0x42, 0xa3, 0x92, 0xe0, + 0xe6, 0x44, 0xe3, 0xc2, 0x89, 0x3a, 0x0e, 0xd7, 0x80, 0x64, 0x54, 0x55, 0x24, 0xb2, 0x9b, 0xa3, 0x26, 0xfb, 0x4a, + 0x5c, 0xa0, 0x0d, 0xfe, 0x7e, 0xbd, 0x76, 0x50, 0x62, 0xc8, 0xad, 0x4e, 0x8d, 0x31, 0x0e, 0xc0, 0x82, 0x25, 0x71, + 0xcc, 0xb0, 0x65, 0x7d, 0x36, 0x81, 0x53, 0xb6, 0xbb, 0x4f, 0x88, 0xac, 0x60, 0x53, 0x63, 0x2a, 0x3d, 0x77, 0x25, + 0x11, 0xa6, 0x9e, 0x2d, 0x2d, 0xaa, 0x89, 0x13, 0x12, 0x79, 0xed, 0x44, 0xd4, 0x5b, 0xd6, 0x84, 0xc3, 0x34, 0x28, + 0xb6, 0x4e, 0x81, 0xa8, 0x16, 0xbb, 0xe0, 0xbd, 0x0b, 0x6b, 0x6a, 0xed, 0x04, 0x10, 0x2f, 0x6a, 0x10, 0x0f, 0x40, + 0x2b, 0x2d, 0xf1, 0x92, 0x03, 0x42, 0xeb, 0x95, 0x63, 0x86, 0x0b, 0xbb, 0x10, 0x5b, 0x50, 0xdc, 0x64, 0x3f, 0x0d, + 0x16, 0x82, 0x2c, 0xab, 0x80, 0xbf, 0x0b, 0x8f, 0x88, 0x18, 0x06, 0x2f, 0x56, 0xab, 0x2d, 0xb4, 0xdb, 0xc9, 0x85, + 0xa2, 0xa4, 0x92, 0x0e, 0x57, 0xab, 0xaf, 0x12, 0xc5, 0x8e, 0xff, 0xc5, 0x0c, 0xf5, 0x3c, 0xd1, 0x7d, 0xf8, 0x12, + 0x4a, 0x19, 0x76, 0xb4, 0x4a, 0x29, 0x05, 0x87, 0x3a, 0xd6, 0xd6, 0x17, 0x4a, 0x07, 0x94, 0xfb, 0xf1, 0x16, 0x01, + 0x33, 0x89, 0xee, 0xa4, 0xae, 0xa6, 0xfc, 0xd8, 0x35, 0x2d, 0x10, 0x42, 0xa9, 0x32, 0xb2, 0xcc, 0xfe, 0x2e, 0xf9, + 0xf2, 0xe0, 0x40, 0x05, 0x0d, 0x5d, 0x97, 0x94, 0xe2, 0xef, 0x18, 0x4e, 0x65, 0x75, 0x27, 0x0c, 0xfb, 0xf2, 0xb7, + 0x3f, 0x87, 0xb6, 0xa4, 0xd3, 0x56, 0x17, 0x04, 0x73, 0x7a, 0x43, 0xb9, 0xde, 0x2b, 0x5b, 0xb1, 0x82, 0x79, 0xcc, + 0xd0, 0xd2, 0x71, 0x1b, 0x49, 0xc1, 0x80, 0x7f, 0x04, 0xb2, 0xe0, 0xb9, 0x68, 0x8b, 0xf8, 0xd9, 0x94, 0x81, 0x2a, + 0xdb, 0x33, 0x12, 0xa5, 0x78, 0xb8, 0xef, 0x0e, 0x12, 0xd7, 0xf0, 0xee, 0xb1, 0xaf, 0x37, 0xab, 0xd7, 0xa4, 0x81, + 0x39, 0x2b, 0xc6, 0xb2, 0x98, 0xf9, 0xbc, 0xf5, 0xc6, 0xb7, 0x23, 0x8e, 0x7c, 0x1c, 0xef, 0x6c, 0xdb, 0x89, 0x00, + 0xdd, 0x0d, 0xd9, 0xbb, 0x92, 0xda, 0x6b, 0xa7, 0x69, 0x79, 0x00, 0x5b, 0x05, 0xa1, 0xc7, 0x4c, 0x15, 0x4a, 0xf9, + 0x4e, 0xbd, 0xda, 0xb5, 0xba, 0x93, 0xfd, 0x76, 0xb7, 0x94, 0xfc, 0x3c, 0x36, 0x74, 0xad, 0x8e, 0xc3, 0x9d, 0xaa, + 0x72, 0x91, 0x8f, 0xdc, 0x60, 0x05, 0xc2, 0xcc, 0xe1, 0xd1, 0x0d, 0xcf, 0xf3, 0x2a, 0xf5, 0x3f, 0x21, 0xed, 0xca, + 0x91, 0x76, 0xe9, 0x49, 0x3b, 0x90, 0x0a, 0x20, 0xed, 0xb6, 0xb9, 0xaa, 0xba, 0xdc, 0xda, 0x9e, 0xd2, 0x12, 0x75, + 0x65, 0xc4, 0x69, 0xe8, 0x6f, 0xe1, 0x47, 0x80, 0x4a, 0xe6, 0xeb, 0x73, 0xec, 0xf4, 0x31, 0x20, 0x06, 0x5a, 0x9d, + 0x26, 0x0b, 0x35, 0x15, 0x9f, 0x63, 0x84, 0xd5, 0x9a, 0x95, 0x98, 0xfd, 0xf0, 0x29, 0x28, 0xed, 0x82, 0xe9, 0xc0, + 0x39, 0x66, 0x92, 0xff, 0x23, 0x3e, 0xca, 0xcf, 0x4e, 0xb8, 0xd9, 0x29, 0x3f, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0x46, + 0xdf, 0xa7, 0xf6, 0x66, 0x7a, 0xa2, 0x9c, 0x5e, 0xb5, 0xde, 0xab, 0x55, 0xbc, 0x91, 0x02, 0x1a, 0x7d, 0x27, 0xa5, + 0x14, 0x65, 0xeb, 0x40, 0x03, 0x42, 0xc8, 0x40, 0xc2, 0xda, 0x4e, 0xba, 0x3c, 0xe5, 0x5e, 0xfe, 0x2b, 0x3d, 0x8f, + 0x51, 0xdc, 0xdb, 0xfa, 0x8f, 0xe5, 0x6c, 0x0e, 0x0c, 0xd9, 0x06, 0x4a, 0x4f, 0x98, 0xeb, 0xb0, 0xca, 0x5f, 0xef, + 0x48, 0xab, 0xd5, 0x31, 0xfb, 0xb1, 0x86, 0x4d, 0xa5, 0xd4, 0xbc, 0xdf, 0x5a, 0x2f, 0xca, 0xa4, 0x92, 0x70, 0xec, + 0xd2, 0xad, 0x3c, 0xde, 0xd4, 0xcc, 0xf8, 0x8c, 0xd7, 0xb1, 0xb0, 0x74, 0x58, 0x00, 0xad, 0x0b, 0xc8, 0x8f, 0x47, + 0xf7, 0x70, 0xfd, 0xd7, 0x15, 0x70, 0x96, 0xeb, 0x0d, 0xf0, 0x2d, 0xd7, 0xeb, 0x47, 0xda, 0x49, 0xda, 0xf8, 0xd1, + 0x0e, 0xb9, 0xb7, 0x84, 0x5e, 0x95, 0xe9, 0x64, 0xc6, 0xfe, 0x00, 0xd2, 0xb6, 0x58, 0x48, 0xb2, 0x9c, 0xc9, 0x11, + 0x4b, 0x23, 0x39, 0x67, 0x22, 0x5a, 0x83, 0x9e, 0xd5, 0x21, 0xc0, 0x3f, 0x22, 0x5e, 0xbe, 0xad, 0xeb, 0x5b, 0xd3, + 0x47, 0x7a, 0x0d, 0xaa, 0xb0, 0x97, 0x7c, 0x87, 0x32, 0xf6, 0x3d, 0x2b, 0x94, 0xe1, 0x49, 0x4b, 0xf6, 0xf6, 0x25, + 0xaf, 0x0e, 0xa8, 0x97, 0x3c, 0xfd, 0x76, 0x95, 0x4a, 0x20, 0x89, 0xda, 0xc9, 0x59, 0x72, 0x1c, 0x21, 0xa3, 0x31, + 0x7e, 0xe6, 0x35, 0xc6, 0x8b, 0x52, 0x63, 0xfc, 0x5c, 0x93, 0xc5, 0x86, 0xc6, 0xf8, 0x0f, 0x41, 0x9e, 0xeb, 0xde, + 0x73, 0xaf, 0x4d, 0x7f, 0x23, 0x73, 0x9e, 0xdd, 0xc5, 0x51, 0xce, 0x75, 0x13, 0x6e, 0x13, 0x23, 0xbc, 0xb4, 0x19, + 0xa0, 0x6a, 0x34, 0xfa, 0xee, 0xb5, 0x97, 0xff, 0xb0, 0x10, 0x24, 0xba, 0x97, 0x73, 0x7d, 0x2f, 0xc2, 0x53, 0x4d, + 0xfe, 0x82, 0x5f, 0xf7, 0x96, 0xf1, 0xaf, 0x54, 0x4f, 0x93, 0x82, 0x8a, 0x91, 0x9c, 0xc5, 0xa8, 0x11, 0x45, 0x28, + 0x51, 0x46, 0x08, 0x79, 0x80, 0xd6, 0xf7, 0xfe, 0xc2, 0xaf, 0x24, 0x89, 0x7a, 0x51, 0x63, 0xaa, 0xb1, 0xa6, 0xe4, + 0xaf, 0x8b, 0x7b, 0xcb, 0x57, 0x72, 0x7d, 0xf9, 0x17, 0x7e, 0xaa, 0x4b, 0xb5, 0x3e, 0xbe, 0x65, 0x24, 0x46, 0xe4, + 0xf2, 0xa9, 0x1f, 0xd2, 0x63, 0x39, 0xb3, 0x0a, 0xfe, 0x08, 0xe1, 0x2f, 0xa0, 0xd7, 0xbd, 0xe4, 0x15, 0x11, 0x72, + 0x77, 0x30, 0xfb, 0x24, 0x92, 0x46, 0x79, 0x10, 0x1d, 0x1c, 0x04, 0x69, 0x25, 0x0b, 0x81, 0xff, 0x96, 0xa4, 0x26, + 0xaa, 0x63, 0x46, 0xa1, 0xa5, 0xbf, 0x65, 0xcc, 0x91, 0x6f, 0x26, 0xf6, 0x9a, 0x6a, 0xb7, 0x63, 0x79, 0xdf, 0xea, + 0x1e, 0x12, 0xae, 0x59, 0x41, 0xb5, 0x2c, 0x06, 0x28, 0x64, 0x4b, 0xf0, 0x57, 0x4e, 0xfe, 0xea, 0xef, 0xfd, 0x3f, + 0xff, 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xe0, 0x2f, 0x2c, 0x18, 0x39, 0xba, 0x88, 0x7b, 0x69, 0xbc, 0xdf, 0x6c, 0xae, + 0xfe, 0x3c, 0xea, 0xff, 0x37, 0x6d, 0x7e, 0x7d, 0xd8, 0xfc, 0x34, 0x40, 0xab, 0xf8, 0xcf, 0xa3, 0x5e, 0xdf, 0x7d, + 0xf5, 0xff, 0xfb, 0xf2, 0x4f, 0x35, 0x38, 0xb4, 0x89, 0xf7, 0x10, 0x3a, 0x9a, 0xe0, 0x5f, 0x04, 0x39, 0x6a, 0x36, + 0x2f, 0x8f, 0x26, 0xf8, 0x27, 0x41, 0x8e, 0xe0, 0xef, 0x9d, 0x26, 0x6f, 0xd9, 0xe4, 0xe9, 0xed, 0x3c, 0xfe, 0xeb, + 0x72, 0x75, 0x6f, 0xf9, 0x95, 0xaf, 0xa1, 0xdd, 0xfe, 0x7f, 0xff, 0xf9, 0xa7, 0x8a, 0x7e, 0xbc, 0x24, 0x47, 0x83, + 0x06, 0x8a, 0x4d, 0xf2, 0x21, 0xb1, 0x7f, 0xe2, 0x5e, 0xda, 0xff, 0x6f, 0x37, 0x94, 0xe8, 0xc7, 0x3f, 0xff, 0xba, + 0xb8, 0x24, 0x83, 0x55, 0x1c, 0xad, 0x7e, 0x44, 0x2b, 0x84, 0x56, 0xf7, 0xd0, 0x5f, 0x38, 0x9a, 0x44, 0x08, 0xff, + 0x26, 0xc8, 0xd1, 0x8f, 0x47, 0x13, 0xfc, 0x49, 0x90, 0xa3, 0xe8, 0x68, 0x82, 0xdf, 0x4b, 0x72, 0xf4, 0xdf, 0x71, + 0x2f, 0xb5, 0x4a, 0xb8, 0x95, 0x51, 0x7f, 0xac, 0xe0, 0x26, 0x84, 0x16, 0x8c, 0xae, 0x34, 0xd7, 0x39, 0x43, 0xf7, + 0x8e, 0x38, 0x7e, 0x24, 0x01, 0x58, 0xb1, 0x06, 0x25, 0x8d, 0xb9, 0x84, 0x5d, 0x5e, 0xc3, 0xc2, 0x03, 0x06, 0xdd, + 0x4b, 0x39, 0xb6, 0x7a, 0x02, 0x95, 0x6a, 0x7b, 0x7b, 0xab, 0xe0, 0xfa, 0x16, 0x3f, 0x26, 0x8f, 0x64, 0xdc, 0x46, + 0x98, 0x53, 0xf8, 0xd1, 0x41, 0xf8, 0x83, 0x76, 0x17, 0x9e, 0xb0, 0xcd, 0x2d, 0x86, 0x09, 0x69, 0xf9, 0x99, 0x08, + 0xe1, 0x97, 0x3b, 0x32, 0xf5, 0x14, 0xd4, 0x0f, 0x08, 0xff, 0x5c, 0xbb, 0x1e, 0xc5, 0x8f, 0x35, 0x29, 0x91, 0xe3, + 0x5d, 0xc1, 0xd8, 0x07, 0x9a, 0x7f, 0x66, 0x45, 0xfc, 0x54, 0xe3, 0x76, 0xe7, 0x01, 0x36, 0xaa, 0xea, 0xfd, 0x36, + 0xea, 0x96, 0xb7, 0x5b, 0xcf, 0xa5, 0xbd, 0x4f, 0x80, 0x53, 0xb8, 0xae, 0xaf, 0x81, 0xb5, 0xdf, 0xe7, 0x5b, 0x4a, + 0xad, 0x82, 0xde, 0x44, 0xa8, 0x7e, 0x95, 0xca, 0xc5, 0x17, 0x9a, 0xf3, 0xd1, 0x9e, 0x66, 0xb3, 0x79, 0x4e, 0x35, + 0xdb, 0x73, 0x73, 0xde, 0xa3, 0xd0, 0x50, 0x54, 0xf2, 0x14, 0x7f, 0x88, 0x6a, 0xd3, 0xfe, 0x21, 0x92, 0x6a, 0xef, + 0xc4, 0x70, 0x9f, 0xe5, 0xf8, 0x12, 0x41, 0xcb, 0xeb, 0xb2, 0xcd, 0x1b, 0xc1, 0x66, 0x1b, 0x94, 0x65, 0x03, 0x73, + 0x7e, 0x2b, 0x0c, 0xf7, 0x9b, 0x84, 0x74, 0x7a, 0xd1, 0x85, 0xfa, 0x32, 0xb9, 0x8c, 0xe0, 0x26, 0xa7, 0x20, 0x82, + 0x19, 0xe5, 0x11, 0x94, 0xa0, 0xa4, 0xd5, 0xa5, 0x17, 0xac, 0x4b, 0x1b, 0x0d, 0xcf, 0x66, 0x67, 0x84, 0xf7, 0xa9, + 0xad, 0x9f, 0xe3, 0x29, 0x1e, 0x91, 0x66, 0x1b, 0x2f, 0x48, 0xcb, 0x54, 0xe9, 0x2e, 0x2e, 0x32, 0xd7, 0xcf, 0xc1, + 0x41, 0x5c, 0x24, 0x39, 0x55, 0xfa, 0x05, 0x68, 0x04, 0xc8, 0x02, 0x4f, 0x49, 0x91, 0xb0, 0x5b, 0x96, 0xc5, 0x19, + 0xc2, 0x53, 0x47, 0x83, 0x50, 0x17, 0x2d, 0x48, 0x50, 0x0c, 0xe4, 0x0c, 0x22, 0x58, 0x6f, 0xda, 0x6f, 0x0f, 0x08, + 0x21, 0xd1, 0x7e, 0xb3, 0x19, 0xf5, 0x0a, 0xf2, 0x8b, 0x48, 0x21, 0x25, 0x60, 0xa7, 0xc9, 0x4f, 0x90, 0xd4, 0x09, + 0x92, 0xe2, 0xf7, 0x32, 0xd1, 0x4c, 0xe9, 0x18, 0x92, 0x41, 0x49, 0xa0, 0x3c, 0x86, 0x47, 0x17, 0x47, 0x51, 0x03, + 0x52, 0x0d, 0x8a, 0x22, 0x5c, 0x90, 0x3b, 0x8d, 0xd2, 0x69, 0xff, 0x78, 0x10, 0x9e, 0x11, 0x36, 0x15, 0xfa, 0xbf, + 0xd3, 0xbd, 0x69, 0xbf, 0x65, 0xfa, 0xbf, 0x8c, 0x7a, 0x71, 0x41, 0x94, 0x65, 0xe3, 0x7a, 0x2a, 0x15, 0xcc, 0xcc, + 0x17, 0xa5, 0x6e, 0x80, 0xae, 0xef, 0x11, 0x69, 0x76, 0xd2, 0x78, 0x14, 0xce, 0xa4, 0x09, 0x1d, 0x3a, 0x50, 0xe0, + 0x9c, 0x40, 0x79, 0x5c, 0x10, 0xe8, 0xb4, 0xaa, 0x76, 0xa7, 0x53, 0x97, 0xf0, 0x63, 0xf4, 0x63, 0xef, 0x93, 0x48, + 0x7f, 0x13, 0x76, 0x04, 0x9f, 0xc4, 0x6a, 0x05, 0x7f, 0x7f, 0x13, 0x3d, 0x18, 0x96, 0x49, 0xfb, 0xc5, 0xa5, 0xfd, + 0x04, 0x69, 0x82, 0xa5, 0x66, 0xc0, 0x58, 0x95, 0xfc, 0x98, 0x5d, 0x9c, 0x31, 0xb1, 0x33, 0x38, 0x38, 0xe0, 0x7d, + 0xda, 0x68, 0x0f, 0xe0, 0x46, 0xa0, 0xd0, 0xea, 0x03, 0xd7, 0xd3, 0x38, 0x3a, 0xba, 0x8c, 0x50, 0x2f, 0xda, 0x83, + 0x55, 0xee, 0xca, 0x06, 0x71, 0xb0, 0xce, 0x1a, 0x9a, 0xa6, 0xa3, 0x4b, 0xd2, 0xea, 0xc5, 0xc2, 0x12, 0xf9, 0x1c, + 0xe1, 0xcc, 0xd1, 0xd4, 0x16, 0x1e, 0xa1, 0x86, 0x10, 0x0d, 0xff, 0x3d, 0x42, 0x8d, 0xa9, 0x6e, 0x8c, 0x51, 0x9a, + 0xc1, 0xdf, 0x78, 0x44, 0x08, 0x69, 0x76, 0xca, 0x8a, 0xfe, 0xb0, 0xa4, 0x28, 0x1d, 0x7b, 0xf5, 0x68, 0xdf, 0x6c, + 0x0e, 0xd9, 0x88, 0x79, 0x9f, 0x0d, 0x56, 0xab, 0xe8, 0xa2, 0x77, 0x19, 0xa1, 0x46, 0xec, 0xd1, 0xee, 0xc8, 0xe3, + 0x1d, 0x42, 0x58, 0x0c, 0xd6, 0xee, 0x06, 0xea, 0x86, 0xd5, 0x6e, 0x9b, 0x96, 0xd5, 0xfe, 0x0f, 0xc8, 0x02, 0x5b, + 0x97, 0x72, 0x8f, 0xe5, 0x6f, 0xe7, 0x30, 0x55, 0x8f, 0xdb, 0x92, 0xb4, 0x70, 0x41, 0xbc, 0xba, 0x9b, 0x12, 0x5d, + 0xe1, 0x7f, 0x46, 0xaa, 0xe2, 0xb8, 0x9f, 0xe3, 0xe9, 0x80, 0x08, 0x6a, 0xe4, 0x97, 0xae, 0x57, 0xa6, 0xb3, 0x9c, + 0xdc, 0xb0, 0x8d, 0xfb, 0xdf, 0x1c, 0xee, 0x64, 0x1e, 0xeb, 0x24, 0x5b, 0x14, 0x05, 0x13, 0xfa, 0x95, 0x1c, 0x39, + 0xc6, 0x8e, 0xe5, 0x20, 0x5b, 0xc1, 0xc5, 0x2e, 0x06, 0xae, 0xae, 0xe3, 0x77, 0xca, 0x68, 0x2b, 0x7b, 0x41, 0x46, + 0x96, 0xe1, 0x32, 0xd7, 0xbd, 0xdd, 0x85, 0x13, 0xa5, 0x63, 0x84, 0x47, 0xee, 0x1e, 0x38, 0x4e, 0x92, 0x64, 0x91, + 0x64, 0x90, 0x0d, 0x1d, 0x28, 0xb4, 0x36, 0xfb, 0x2a, 0x56, 0xe4, 0xb1, 0x4e, 0x04, 0xbb, 0x35, 0xdd, 0xc6, 0xa8, + 0x3a, 0xc4, 0xfd, 0x7e, 0xbb, 0xa0, 0x5d, 0x43, 0x80, 0x54, 0x22, 0xe4, 0x88, 0x01, 0x84, 0xe0, 0xee, 0xdf, 0x25, + 0x4d, 0xa9, 0x0a, 0x6f, 0xb6, 0xaa, 0x01, 0xf6, 0x43, 0x95, 0xf7, 0x02, 0xf4, 0xc4, 0x86, 0x3d, 0x2b, 0x0b, 0x5b, + 0xe5, 0x39, 0x42, 0x7c, 0x1c, 0x2f, 0x12, 0xb8, 0x11, 0x34, 0x98, 0x24, 0x04, 0x5a, 0xad, 0x16, 0x21, 0x6e, 0x4d, + 0x2b, 0xc5, 0xf4, 0x98, 0x4c, 0xfb, 0x45, 0xa3, 0x61, 0x94, 0xd7, 0x23, 0x8b, 0x17, 0x0b, 0x84, 0xc7, 0xe5, 0x5e, + 0xf3, 0xe5, 0xe6, 0xa4, 0xde, 0x55, 0x3c, 0xae, 0x2b, 0x81, 0x1b, 0x42, 0x20, 0xa3, 0x5f, 0xd4, 0xd0, 0x3a, 0x9e, + 0x90, 0xa3, 0xb8, 0x9f, 0xf4, 0xfe, 0xe7, 0x00, 0xf5, 0xe2, 0xe4, 0x10, 0x1d, 0x59, 0x5a, 0x32, 0x46, 0xdd, 0xcc, + 0xf6, 0xb1, 0x34, 0xb7, 0x9f, 0x6d, 0x6c, 0x14, 0x90, 0xa9, 0xc4, 0x82, 0xce, 0x58, 0x3a, 0x81, 0x5d, 0xef, 0x91, + 0x67, 0x8e, 0x01, 0x99, 0xd2, 0x89, 0xa3, 0x2d, 0x49, 0xd4, 0x93, 0xb4, 0xfc, 0xea, 0x45, 0x3d, 0x5a, 0x7d, 0xfd, + 0xcf, 0xa8, 0x97, 0xd1, 0xf4, 0x31, 0x5f, 0x3b, 0x25, 0x79, 0xad, 0x8f, 0x33, 0xdf, 0xc7, 0xda, 0x2e, 0x4e, 0x00, + 0xbc, 0x11, 0xda, 0xd6, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0xa4, 0x12, 0x4d, 0x27, 0x00, 0xd5, 0x60, 0x11, + 0x54, 0x68, 0x1b, 0x10, 0x4c, 0x19, 0xb0, 0xc5, 0x23, 0x2d, 0x40, 0x73, 0x71, 0xd9, 0x42, 0xcb, 0x5a, 0x61, 0xc7, + 0x59, 0xd5, 0xef, 0xe2, 0x4b, 0xe2, 0x3d, 0x06, 0xaa, 0x7c, 0xb1, 0xe8, 0x8e, 0x1b, 0x0d, 0xa4, 0x3c, 0x7e, 0x8d, + 0xfa, 0xe3, 0x01, 0xbe, 0x05, 0x14, 0xc2, 0x35, 0x8c, 0xc2, 0xb5, 0x39, 0x76, 0xdc, 0x1c, 0x1b, 0x0d, 0xb9, 0x46, + 0xdd, 0xa0, 0xf2, 0xc2, 0x55, 0x5e, 0xaf, 0x2d, 0x64, 0x36, 0x31, 0xee, 0x1c, 0x99, 0x14, 0x30, 0x04, 0x23, 0x84, + 0xbc, 0x92, 0x68, 0x67, 0xb3, 0xd0, 0x28, 0x54, 0x37, 0xbb, 0x17, 0x28, 0xaa, 0x3d, 0x3d, 0x62, 0x80, 0x05, 0x54, + 0x2d, 0xd5, 0xc8, 0x53, 0x8d, 0x47, 0x8d, 0xb6, 0x41, 0xf7, 0x66, 0xbb, 0x5b, 0x6f, 0xec, 0x7e, 0xd5, 0x18, 0x1e, + 0x35, 0xc8, 0xb4, 0xda, 0xe1, 0x6b, 0xd9, 0x68, 0xac, 0xeb, 0xf7, 0xa5, 0x7e, 0x13, 0xd7, 0xee, 0x2f, 0x9e, 0x6e, + 0x99, 0x78, 0xf8, 0xd3, 0xb7, 0x3a, 0x6f, 0x45, 0xc2, 0x85, 0x60, 0x05, 0x9c, 0xb0, 0x44, 0x63, 0xb1, 0x5e, 0x97, + 0xa7, 0xfe, 0xef, 0xda, 0xda, 0x8c, 0x11, 0x0e, 0x74, 0xc8, 0x48, 0x6d, 0x58, 0xe2, 0x02, 0x53, 0x43, 0x45, 0x08, + 0x21, 0x1f, 0xb4, 0x37, 0x8f, 0xd1, 0x86, 0x24, 0x65, 0x24, 0x38, 0xbb, 0x63, 0x45, 0x58, 0x72, 0x7d, 0xef, 0xb1, + 0xfc, 0xae, 0x48, 0xd7, 0x17, 0x83, 0xd4, 0x14, 0xcb, 0x1d, 0x21, 0xcb, 0xc9, 0x17, 0x90, 0x73, 0xca, 0x0b, 0x96, + 0xc4, 0x10, 0xc4, 0x27, 0xbc, 0x60, 0x86, 0x71, 0xbf, 0xe7, 0xe5, 0xc6, 0xac, 0xce, 0x69, 0x66, 0xa1, 0xf6, 0x07, + 0xa0, 0x99, 0x83, 0x72, 0x48, 0x92, 0xad, 0x62, 0xd7, 0xf7, 0x1e, 0xbe, 0xde, 0x25, 0x43, 0xaf, 0x56, 0x4e, 0x7a, + 0xce, 0x80, 0xf5, 0xc1, 0x79, 0x35, 0xd4, 0xcc, 0xfd, 0x48, 0xe3, 0xcc, 0x30, 0x51, 0x79, 0xcc, 0x01, 0x99, 0xae, + 0xef, 0x3d, 0x7c, 0x17, 0x73, 0xa3, 0x9b, 0x42, 0x38, 0x9c, 0x77, 0x5c, 0x90, 0x98, 0x12, 0x86, 0xec, 0xe4, 0x4b, + 0x3a, 0x56, 0x04, 0xa7, 0x7b, 0x4a, 0x4d, 0x26, 0x88, 0x1d, 0x7d, 0x31, 0x20, 0x99, 0x03, 0x01, 0xc9, 0x10, 0xce, + 0x6a, 0x72, 0x1d, 0x31, 0x6b, 0x60, 0x3a, 0xbb, 0x82, 0xc5, 0x48, 0x2c, 0x7b, 0x88, 0x70, 0x66, 0xba, 0xd5, 0x6b, + 0x7b, 0x9c, 0x28, 0xba, 0x69, 0xe8, 0x56, 0xc9, 0xb3, 0xef, 0x41, 0xf0, 0xf2, 0x1f, 0xaf, 0x5c, 0xdb, 0x65, 0xc2, + 0x13, 0x6f, 0x91, 0x76, 0x7d, 0xef, 0xe1, 0xaf, 0xce, 0x28, 0x6d, 0x4e, 0x3d, 0xf9, 0xdf, 0x92, 0x51, 0x1f, 0xfe, + 0x9a, 0x54, 0xb9, 0xa6, 0xf0, 0xf5, 0xbd, 0x87, 0xbf, 0xef, 0x2a, 0x06, 0xe9, 0xeb, 0x45, 0xa5, 0x24, 0x30, 0xe3, + 0x5b, 0xb2, 0x3c, 0x5d, 0xba, 0xb3, 0x22, 0x15, 0x6b, 0x6c, 0x4e, 0xa8, 0x54, 0xad, 0x4b, 0xdd, 0xca, 0x13, 0x2c, + 0x89, 0xb9, 0x4a, 0xaa, 0x2f, 0x9b, 0x43, 0x63, 0x2e, 0xc5, 0x55, 0x26, 0xe7, 0xec, 0x1b, 0xf7, 0x4b, 0x4f, 0x35, + 0x4a, 0xf8, 0x0c, 0x0c, 0x71, 0xcc, 0xd8, 0x05, 0xde, 0x6f, 0xa1, 0xee, 0xc6, 0x79, 0x26, 0x0d, 0xa2, 0x16, 0xf5, + 0xc3, 0x06, 0x53, 0xd2, 0xc2, 0x19, 0x69, 0xe1, 0x9c, 0xa8, 0x7e, 0xcb, 0x9e, 0x18, 0xdd, 0xbc, 0x6c, 0xda, 0x9e, + 0x3b, 0xb0, 0xdd, 0x73, 0xbb, 0x6f, 0xed, 0xa1, 0x3c, 0xed, 0xe6, 0x46, 0x7f, 0x69, 0x0e, 0xfa, 0xa9, 0x41, 0x8d, + 0x27, 0x2c, 0x2e, 0x70, 0x61, 0x5a, 0xbe, 0xe2, 0xc3, 0x1c, 0xec, 0x54, 0x60, 0x66, 0x58, 0xa3, 0xb4, 0x2c, 0xdb, + 0x76, 0x65, 0xf3, 0xc4, 0xac, 0x55, 0x81, 0xf3, 0x04, 0x48, 0x39, 0xce, 0x9d, 0x5d, 0x8f, 0xda, 0xae, 0x72, 0x76, + 0x70, 0x10, 0xbb, 0x4a, 0x34, 0x2e, 0x7c, 0x7e, 0x75, 0x03, 0xf8, 0xde, 0x52, 0x8d, 0x29, 0x32, 0x13, 0x68, 0x34, + 0xb2, 0xc1, 0x9a, 0xee, 0x13, 0x12, 0xe7, 0x75, 0x28, 0xfa, 0xd1, 0x1b, 0x66, 0x70, 0x03, 0x00, 0x8d, 0x46, 0x79, + 0xdd, 0xbb, 0x01, 0xb1, 0xa7, 0x1a, 0xcb, 0xf5, 0x97, 0xb8, 0xb4, 0x26, 0x6a, 0x6d, 0xd9, 0x61, 0xf9, 0x51, 0x20, + 0x11, 0xe2, 0xae, 0xf0, 0xf3, 0x09, 0xb6, 0x86, 0x80, 0x72, 0x2f, 0x9c, 0x0d, 0x04, 0x36, 0x56, 0x5b, 0xae, 0x90, + 0x27, 0x6d, 0x1d, 0x94, 0xfa, 0x42, 0x70, 0xc1, 0x05, 0x85, 0x1a, 0x6b, 0x87, 0xe5, 0x4f, 0xd8, 0xb6, 0x39, 0x27, + 0x56, 0xc8, 0x69, 0xcb, 0xcc, 0x30, 0x0c, 0xc0, 0x3a, 0x25, 0x60, 0x9e, 0x93, 0x97, 0xdf, 0x46, 0xfd, 0x87, 0x01, + 0xea, 0x3f, 0x22, 0x2c, 0xd8, 0x06, 0x56, 0x57, 0x92, 0x48, 0xa7, 0xa0, 0x50, 0x3e, 0xeb, 0xf1, 0x9c, 0x80, 0x36, + 0xae, 0x0e, 0xd5, 0xda, 0x15, 0xe5, 0x37, 0x28, 0x4b, 0xb8, 0x53, 0x8c, 0x3e, 0x13, 0xfb, 0xfb, 0xe4, 0xb8, 0xba, + 0xa0, 0x83, 0xae, 0x77, 0x29, 0x07, 0x43, 0x52, 0xf8, 0xf0, 0xf7, 0xef, 0xdf, 0xad, 0x3e, 0x9e, 0x6f, 0xef, 0xe0, + 0xc0, 0xac, 0x14, 0x66, 0x1d, 0x6c, 0xe0, 0xba, 0x91, 0x29, 0xf4, 0x5f, 0xde, 0x89, 0xd7, 0xa9, 0xd0, 0xc6, 0x66, + 0xf4, 0xc7, 0x21, 0x8c, 0xb6, 0xdd, 0x36, 0x25, 0x58, 0xd0, 0x2c, 0xd0, 0x25, 0x6b, 0xdc, 0x4a, 0x8b, 0x6f, 0x90, + 0x91, 0x87, 0xa6, 0x00, 0x13, 0xa3, 0xdd, 0xd9, 0x8f, 0xd6, 0x0e, 0x4f, 0xec, 0xd0, 0xd0, 0xd2, 0x10, 0x42, 0x8b, + 0xf7, 0x80, 0x39, 0xf6, 0x88, 0x00, 0x10, 0xbd, 0x34, 0x90, 0xaa, 0x40, 0x16, 0x45, 0x95, 0x22, 0xff, 0xf9, 0x3e, + 0x21, 0x2f, 0x2b, 0x45, 0xe6, 0xdb, 0xca, 0x98, 0x0b, 0x10, 0x03, 0xa5, 0x70, 0x91, 0x50, 0x26, 0xd8, 0xcb, 0xd0, + 0x0f, 0xda, 0x97, 0x37, 0xd2, 0x66, 0x52, 0x71, 0xe3, 0xc1, 0x4d, 0xa9, 0x51, 0xf1, 0xd9, 0x7c, 0x0f, 0x89, 0x8d, + 0xdc, 0x7b, 0x90, 0xcb, 0xa8, 0x19, 0x24, 0x7c, 0xbf, 0x33, 0xa5, 0x7d, 0xbb, 0xeb, 0xcf, 0x9b, 0x16, 0x31, 0x1b, + 0xeb, 0x92, 0x70, 0xa1, 0x58, 0xa1, 0x1f, 0xb1, 0xb1, 0x2c, 0xe0, 0xfe, 0xa3, 0x04, 0x0b, 0x5a, 0xdf, 0x0b, 0x74, + 0x80, 0x66, 0x82, 0xc1, 0xa5, 0xc3, 0xc6, 0x0c, 0xcd, 0xaf, 0xcf, 0xe6, 0x0e, 0xfc, 0x7a, 0xb3, 0xd6, 0xcb, 0x83, + 0x83, 0x2f, 0xac, 0x02, 0x94, 0x1b, 0xa6, 0x19, 0x46, 0x40, 0xbc, 0x2c, 0x97, 0xe3, 0x6e, 0x86, 0xef, 0xc5, 0x95, + 0xca, 0xc0, 0x13, 0x8e, 0x90, 0x08, 0x3d, 0x27, 0x7a, 0x3d, 0xd9, 0xa4, 0xf7, 0x4e, 0x9b, 0x21, 0x42, 0xb1, 0x06, + 0xc8, 0x3d, 0xc8, 0xe5, 0x56, 0xc9, 0xa4, 0x2a, 0x5b, 0xdb, 0x72, 0x10, 0x8f, 0x01, 0x5c, 0xb1, 0x11, 0x52, 0x02, + 0x34, 0xdc, 0x2d, 0xb4, 0x3c, 0x97, 0xc0, 0xfe, 0x63, 0x95, 0x80, 0x48, 0x8b, 0x6a, 0x1b, 0x17, 0x21, 0x6c, 0x4d, + 0x7d, 0x02, 0xe3, 0x84, 0x87, 0xcf, 0x77, 0x69, 0xa8, 0x3d, 0x6a, 0x33, 0x73, 0x06, 0x41, 0x09, 0x89, 0xca, 0x0a, + 0xc9, 0x97, 0x58, 0x38, 0x6e, 0xce, 0xdf, 0xc3, 0x01, 0x29, 0x56, 0x34, 0xb6, 0x77, 0x5b, 0x70, 0x7c, 0x14, 0xc9, + 0x22, 0xae, 0x75, 0xdd, 0x2d, 0x4c, 0x35, 0xec, 0x40, 0x47, 0x43, 0x38, 0x15, 0xe6, 0x9e, 0xf0, 0x71, 0x45, 0x52, + 0x7f, 0xb6, 0x26, 0xda, 0xda, 0x13, 0xc3, 0xca, 0x34, 0x25, 0x98, 0xff, 0xcf, 0xd6, 0xea, 0xba, 0x2c, 0x84, 0x99, + 0x19, 0xc6, 0x8d, 0x5d, 0x05, 0xb6, 0x06, 0x1c, 0x5b, 0xfe, 0x2d, 0x83, 0x45, 0xf5, 0x4a, 0x71, 0xd3, 0x69, 0xc0, + 0x04, 0xbc, 0x05, 0xeb, 0x99, 0xcd, 0xad, 0xff, 0xdc, 0x1c, 0x8c, 0x02, 0xab, 0x1a, 0x81, 0x97, 0x86, 0xc0, 0x23, + 0x60, 0xdc, 0xbc, 0x69, 0x79, 0xcf, 0x19, 0xd1, 0x08, 0x7f, 0xe2, 0x39, 0x3c, 0xb3, 0x2c, 0xf7, 0xd6, 0xc7, 0xc6, + 0x8a, 0xa4, 0x82, 0x80, 0x6d, 0x11, 0x76, 0x44, 0x5e, 0x22, 0xac, 0x1a, 0x8d, 0xae, 0xba, 0x60, 0x95, 0x56, 0xa5, + 0x1a, 0xa6, 0x80, 0x5b, 0x62, 0xc0, 0xfb, 0xda, 0x89, 0x0a, 0x86, 0x04, 0xde, 0xfa, 0x5b, 0x81, 0xfa, 0xfe, 0xe1, + 0xdb, 0x38, 0xa4, 0x6f, 0x61, 0xd9, 0xf2, 0x22, 0x16, 0xa6, 0x14, 0x57, 0x77, 0x38, 0x6f, 0xbe, 0x6f, 0x36, 0x02, + 0xe3, 0xde, 0x6f, 0x63, 0xb0, 0x71, 0x43, 0x5d, 0x6d, 0x49, 0x43, 0xb9, 0x09, 0xbb, 0xa8, 0xb2, 0x77, 0x0c, 0x3b, + 0xeb, 0xea, 0x4a, 0xda, 0xd5, 0x44, 0xad, 0xd7, 0x8a, 0x55, 0x46, 0x03, 0x1b, 0x86, 0x9d, 0xe6, 0x98, 0xd9, 0x56, + 0xe0, 0x3f, 0x9e, 0x13, 0x8d, 0x03, 0x64, 0x7d, 0xf3, 0xad, 0xeb, 0x94, 0x6a, 0x98, 0xb0, 0xbd, 0xdd, 0xf9, 0xf8, + 0x98, 0xef, 0x3a, 0x1f, 0xb1, 0x74, 0x5b, 0xdf, 0x9c, 0x8d, 0xed, 0x7f, 0xe3, 0x6c, 0x74, 0x6a, 0x7b, 0x7f, 0x3c, + 0x02, 0x77, 0x52, 0x3b, 0x1e, 0xeb, 0x6b, 0x4a, 0x24, 0x16, 0x6e, 0x39, 0x2e, 0x3b, 0xab, 0x95, 0xe8, 0xb7, 0x40, + 0xed, 0x14, 0x45, 0xf0, 0xb3, 0x6d, 0x7f, 0x06, 0x24, 0xd9, 0xea, 0x90, 0x63, 0x51, 0x8a, 0x32, 0x28, 0x01, 0x03, + 0xea, 0xd8, 0xd8, 0x7a, 0x19, 0xc4, 0x76, 0x38, 0xe4, 0xb0, 0x9c, 0x88, 0xf2, 0xea, 0x0a, 0x46, 0x6c, 0x8e, 0x0d, + 0x27, 0x60, 0xc6, 0x3b, 0xad, 0x0a, 0xbd, 0xf8, 0xf9, 0xaf, 0x99, 0xd3, 0xda, 0x11, 0x63, 0x39, 0x89, 0x9a, 0x15, + 0x83, 0x1b, 0x81, 0x63, 0x18, 0xf7, 0x8d, 0x84, 0x5a, 0x9d, 0xea, 0xa8, 0x76, 0x24, 0xe1, 0x16, 0xa8, 0xdd, 0xf6, + 0xcd, 0xb9, 0xb4, 0x5a, 0xed, 0x3c, 0x58, 0x70, 0x11, 0xe0, 0xf6, 0x73, 0xa2, 0x6b, 0x24, 0x85, 0x12, 0x27, 0x41, + 0xe1, 0xdc, 0xa0, 0xaa, 0x26, 0xb2, 0xdf, 0x1a, 0x00, 0x4f, 0xda, 0xcd, 0x2e, 0x64, 0x25, 0x24, 0x67, 0x8d, 0x06, + 0xca, 0xcb, 0x8e, 0x69, 0x5f, 0x34, 0xb2, 0x01, 0x66, 0x38, 0xb3, 0x02, 0x0b, 0x9c, 0x5e, 0x71, 0x5e, 0x75, 0xdd, + 0xcf, 0x06, 0x08, 0x17, 0xab, 0x55, 0x6c, 0x87, 0x96, 0xa3, 0xd5, 0x2a, 0x0f, 0x87, 0x66, 0xf2, 0xa1, 0xe2, 0xcb, + 0x9e, 0x26, 0x2f, 0xcd, 0x79, 0xf8, 0x12, 0x06, 0xd9, 0x20, 0x71, 0xee, 0x54, 0x82, 0x39, 0x68, 0xae, 0x1a, 0xb2, + 0x9f, 0x35, 0xda, 0x83, 0x80, 0x86, 0xf5, 0xb3, 0x01, 0xc9, 0xd7, 0x60, 0x39, 0xab, 0xdc, 0x81, 0xf9, 0x37, 0x1c, + 0x6c, 0x7f, 0x9b, 0x73, 0xc6, 0x36, 0x18, 0xae, 0xc9, 0xa6, 0xca, 0xa0, 0xc4, 0x2b, 0xb7, 0xb8, 0xbe, 0x5c, 0xcd, + 0xc0, 0xa2, 0x2c, 0x84, 0xdd, 0x35, 0x73, 0x0f, 0x84, 0xff, 0x12, 0xdb, 0x25, 0x2d, 0x8d, 0xb8, 0x37, 0x10, 0xdf, + 0xdb, 0x6e, 0x27, 0x49, 0x42, 0x8b, 0x89, 0xb9, 0x12, 0xf1, 0x37, 0xbc, 0x66, 0x0f, 0x1c, 0xbb, 0x71, 0x06, 0x3d, + 0xf7, 0xcb, 0xce, 0x06, 0xc4, 0x8e, 0xdf, 0x33, 0x3b, 0xde, 0x71, 0xa5, 0xa0, 0xbb, 0x75, 0x11, 0x76, 0x30, 0xf4, + 0x7f, 0x79, 0x30, 0x27, 0x6e, 0x30, 0x16, 0x4d, 0x36, 0xe0, 0xf6, 0x0d, 0x78, 0x14, 0x74, 0x03, 0x6e, 0xdf, 0x86, + 0xaf, 0x87, 0x56, 0xf6, 0xcd, 0x01, 0x06, 0x64, 0xc2, 0x8e, 0xb4, 0x4a, 0x08, 0x86, 0x79, 0xba, 0xc9, 0x91, 0x59, + 0xb2, 0x0a, 0x87, 0xab, 0x26, 0xb1, 0xd8, 0xd8, 0x0b, 0x15, 0x93, 0x1a, 0x08, 0xc6, 0x22, 0x7d, 0x89, 0x42, 0xa5, + 0x41, 0xdd, 0x38, 0x06, 0xb0, 0xca, 0x69, 0xeb, 0x5f, 0x1e, 0x1c, 0x80, 0xd0, 0x00, 0xac, 0x5d, 0x92, 0xd1, 0xb9, + 0x5e, 0x14, 0xc0, 0x5f, 0x29, 0xff, 0x1b, 0x92, 0xc1, 0xed, 0xc4, 0xa4, 0xc1, 0x0f, 0x48, 0x98, 0x53, 0xa5, 0xf8, + 0x17, 0x9b, 0xe6, 0x7e, 0xe3, 0x82, 0x78, 0x8c, 0x56, 0x96, 0x53, 0x94, 0xa8, 0x2b, 0x1d, 0xba, 0xd6, 0x21, 0xf7, + 0xf4, 0x0b, 0x13, 0xfa, 0x25, 0x57, 0x9a, 0x09, 0x00, 0x40, 0x85, 0x78, 0x30, 0x25, 0x85, 0x60, 0xeb, 0xd6, 0x6a, + 0xd1, 0xd1, 0xe8, 0xbb, 0x55, 0x74, 0x9d, 0x2d, 0x9a, 0x52, 0x31, 0xca, 0x6d, 0x27, 0xa1, 0xcd, 0xa4, 0xb7, 0x13, + 0x2d, 0x4b, 0x86, 0x16, 0x3b, 0x15, 0xfb, 0x61, 0x68, 0x7d, 0x2c, 0x88, 0x3f, 0x17, 0xfc, 0x59, 0xfa, 0x5d, 0x3e, + 0x06, 0xae, 0xd4, 0xbf, 0xb1, 0x0a, 0xe1, 0x4c, 0xb0, 0x0e, 0xc8, 0x6b, 0x52, 0x1f, 0xa7, 0x47, 0x9d, 0x7c, 0x4b, + 0xb9, 0x50, 0x1a, 0x85, 0x6d, 0x9c, 0x14, 0x06, 0x53, 0xce, 0xbe, 0x2d, 0x71, 0xfd, 0xea, 0x8f, 0x11, 0x7f, 0x74, + 0x88, 0x7f, 0x97, 0x4a, 0xa3, 0x65, 0x89, 0x60, 0xc8, 0xef, 0x48, 0xad, 0xe0, 0x2a, 0x36, 0xe7, 0xfa, 0xb9, 0x9e, + 0xe5, 0x1b, 0x9e, 0x38, 0x5d, 0xad, 0x4a, 0xa9, 0x40, 0xc5, 0x37, 0x0c, 0x3f, 0x61, 0x70, 0x6f, 0xfc, 0x8c, 0x07, + 0x55, 0xb6, 0xef, 0x8b, 0x9f, 0x05, 0xf7, 0xc5, 0xcf, 0x78, 0xba, 0x5d, 0x34, 0xb8, 0x27, 0xee, 0x24, 0xe7, 0x49, + 0x2b, 0xf2, 0x7c, 0xd4, 0x94, 0x56, 0xfe, 0x95, 0x76, 0x6b, 0xe0, 0xca, 0x26, 0x0e, 0x8c, 0xf3, 0xea, 0x22, 0x14, + 0x73, 0xe6, 0x8c, 0x96, 0xc3, 0xff, 0xd6, 0x3a, 0xb9, 0x93, 0x47, 0x5a, 0x29, 0xe4, 0x0d, 0x2d, 0xf4, 0x3d, 0xd8, + 0x70, 0xc5, 0x96, 0x0f, 0x20, 0x25, 0xa0, 0x6c, 0xfb, 0xf7, 0xba, 0x08, 0xc4, 0x71, 0x65, 0x9d, 0x8f, 0xc2, 0xf6, + 0x49, 0x51, 0x72, 0x75, 0x75, 0x21, 0xe4, 0xd6, 0x68, 0x09, 0x10, 0xa6, 0xde, 0x35, 0x8f, 0x39, 0x9a, 0xcc, 0xd2, + 0xe5, 0xba, 0x54, 0x1d, 0x14, 0x96, 0xab, 0xe3, 0x08, 0x17, 0x6b, 0x73, 0x83, 0xfe, 0x8a, 0xe3, 0xbf, 0xb9, 0xa3, + 0x91, 0x9f, 0x4a, 0x0a, 0xf4, 0x68, 0xb7, 0xaf, 0xcd, 0x0e, 0x12, 0x69, 0xe7, 0x50, 0x5a, 0x0a, 0x00, 0x56, 0x1b, + 0x7c, 0x5d, 0x7b, 0x9c, 0x7a, 0x22, 0xdd, 0x6c, 0xbe, 0x69, 0x08, 0x8b, 0x59, 0x69, 0xc1, 0x63, 0xba, 0xd9, 0x61, + 0x39, 0xea, 0x65, 0x71, 0x5d, 0xee, 0xb1, 0x5a, 0xbf, 0xe8, 0x1b, 0xa0, 0xac, 0x0c, 0xd1, 0x56, 0xab, 0xb8, 0x0e, + 0x6f, 0x22, 0x82, 0x6b, 0x10, 0x84, 0x45, 0x60, 0xc0, 0x51, 0x63, 0xbc, 0x6d, 0x9d, 0x18, 0x6d, 0xda, 0x2f, 0x79, + 0xd6, 0xbd, 0x36, 0x8e, 0x50, 0xd1, 0x60, 0xab, 0x87, 0x9a, 0x07, 0x6c, 0x67, 0x57, 0x76, 0x14, 0x40, 0x68, 0x4a, + 0xbd, 0x71, 0x6e, 0x65, 0x45, 0xbb, 0x03, 0xbe, 0xe8, 0x3b, 0xe6, 0xb9, 0x0e, 0x74, 0xdb, 0xf9, 0x81, 0x6d, 0xd3, + 0x13, 0xf9, 0x2d, 0xdb, 0xa6, 0x1a, 0x27, 0xbc, 0xdf, 0x42, 0xdf, 0x37, 0x84, 0xb5, 0x7d, 0xed, 0x2e, 0xf2, 0xbf, + 0xd0, 0x5d, 0x1b, 0xd0, 0xd3, 0x82, 0xd9, 0xd3, 0x98, 0x0f, 0x7a, 0xbd, 0xfe, 0x54, 0xfa, 0x2f, 0x18, 0x5b, 0xa1, + 0x4f, 0x76, 0x17, 0x38, 0xb1, 0xd2, 0x38, 0x04, 0xc7, 0xaf, 0x38, 0x99, 0xe4, 0x72, 0x48, 0xf3, 0x77, 0xd0, 0x63, + 0x95, 0xfb, 0xfc, 0x6e, 0x54, 0x50, 0xcd, 0x1c, 0xad, 0xa9, 0x46, 0xf1, 0x8a, 0x07, 0xc3, 0x78, 0xc5, 0x2d, 0xe5, + 0xae, 0x5a, 0xc0, 0xcb, 0x97, 0x65, 0x13, 0xe9, 0xa7, 0x75, 0x29, 0x83, 0xa9, 0xdd, 0xbd, 0x6c, 0x92, 0x34, 0x56, + 0x92, 0x34, 0xa6, 0xe2, 0xcd, 0xa6, 0xe2, 0xf8, 0xef, 0x6f, 0x0c, 0x76, 0x9b, 0xcc, 0xfd, 0x1d, 0x90, 0xb9, 0xbf, + 0x79, 0xfa, 0xdd, 0x5a, 0x01, 0xc5, 0x3b, 0x4e, 0x8e, 0x8d, 0x65, 0x8c, 0x1d, 0xf5, 0x5b, 0x0d, 0x06, 0x0d, 0x9a, + 0x5c, 0x06, 0xde, 0x0e, 0xd5, 0xe9, 0xe5, 0xed, 0x8f, 0xe2, 0x6c, 0xa1, 0xb4, 0x9c, 0xb9, 0x46, 0x95, 0xf3, 0x71, + 0x32, 0x99, 0xa0, 0xc0, 0x36, 0x77, 0xf8, 0x69, 0xdd, 0x8d, 0x6c, 0xf9, 0x99, 0x8b, 0x51, 0xaa, 0xb0, 0x3b, 0x5b, + 0x54, 0x2a, 0xd7, 0xc4, 0x9b, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0x17, 0x5c, 0x4d, 0x59, 0x11, 0x17, 0x68, 0xf9, 0xad, + 0xce, 0x0a, 0xb8, 0xcd, 0xb1, 0x9d, 0xe1, 0x51, 0x69, 0x39, 0xa0, 0x13, 0x68, 0x0d, 0x74, 0x46, 0x33, 0xa6, 0xa7, + 0x72, 0x04, 0x86, 0x2f, 0xc9, 0xa8, 0x74, 0xa7, 0x3a, 0x38, 0xd8, 0x8f, 0x23, 0xa3, 0xbf, 0x00, 0x1f, 0xf4, 0x30, + 0x07, 0xf5, 0x96, 0xe0, 0x18, 0x54, 0x75, 0xcd, 0xd0, 0x92, 0x6d, 0xfa, 0xd0, 0xe8, 0xe4, 0x33, 0xbb, 0xc3, 0x1c, + 0xad, 0xd7, 0xa9, 0x1d, 0x75, 0x34, 0xe6, 0x2c, 0x1f, 0x45, 0xf8, 0x33, 0xbb, 0x4b, 0x4b, 0xb7, 0x75, 0xe3, 0x65, + 0x6d, 0x16, 0x31, 0x92, 0x37, 0x22, 0xc2, 0x55, 0x27, 0xe9, 0x72, 0x8d, 0x65, 0xc1, 0x27, 0x80, 0xa3, 0xbf, 0xb0, + 0xbb, 0xd4, 0xb5, 0x17, 0xb8, 0x0a, 0xa2, 0xa5, 0x07, 0x7d, 0x12, 0x24, 0x87, 0xcb, 0xe0, 0x04, 0x8e, 0xbe, 0xa9, + 0x3b, 0x20, 0xb5, 0x72, 0x95, 0x08, 0x89, 0xd0, 0xfa, 0xdf, 0x9d, 0x0a, 0x5e, 0x84, 0xe7, 0x9c, 0xae, 0x59, 0xdc, + 0x6e, 0x54, 0x62, 0x50, 0xa1, 0xb2, 0x20, 0xf9, 0x18, 0x73, 0xbf, 0xfb, 0x9c, 0xf7, 0x43, 0xa0, 0x33, 0x5b, 0x50, + 0xd7, 0x68, 0x3a, 0x32, 0xbf, 0x50, 0x75, 0x07, 0x35, 0xd3, 0x55, 0xc5, 0xbd, 0x8f, 0x31, 0x00, 0x1e, 0xac, 0x65, + 0xa8, 0x71, 0x08, 0x5d, 0x7b, 0x33, 0xd5, 0x31, 0x25, 0xf1, 0xd2, 0xcf, 0x21, 0xe5, 0x21, 0x18, 0xf5, 0x1a, 0xd0, + 0xd0, 0x21, 0x98, 0xb5, 0x3c, 0xe4, 0xe3, 0x58, 0x6c, 0x9d, 0xa1, 0xd2, 0x9c, 0xa1, 0x49, 0x00, 0xf2, 0x6f, 0x9c, + 0x99, 0xcc, 0x40, 0xc3, 0xf0, 0x96, 0xe6, 0x00, 0x74, 0xab, 0xeb, 0x70, 0x28, 0x5c, 0xd1, 0xd2, 0x79, 0xcf, 0x2e, + 0xba, 0xac, 0x0d, 0x2b, 0x36, 0xed, 0xa0, 0x75, 0x0a, 0x53, 0x62, 0xb6, 0xc0, 0xda, 0xeb, 0x7d, 0xb8, 0xb7, 0xab, + 0x8d, 0x8b, 0xc4, 0x4f, 0x8b, 0x78, 0x98, 0xc4, 0x14, 0x2d, 0x79, 0x4c, 0xb1, 0x04, 0x3b, 0xc8, 0x62, 0x5d, 0x8e, + 0x9f, 0x85, 0xcb, 0x51, 0xb3, 0x92, 0xde, 0xed, 0x60, 0x08, 0x5c, 0xbe, 0x06, 0xdb, 0x50, 0xcc, 0x3d, 0x61, 0xe1, + 0xb1, 0xf1, 0xf4, 0x0b, 0xd6, 0x6d, 0x6e, 0x17, 0xc4, 0xaf, 0xc0, 0x98, 0xc6, 0xcb, 0x60, 0x16, 0xa1, 0x53, 0xb9, + 0x73, 0x38, 0x74, 0xd7, 0x84, 0x95, 0xf1, 0x6a, 0xac, 0xc8, 0xc6, 0xd1, 0xf3, 0x7d, 0x1b, 0xcf, 0x7f, 0x16, 0xac, + 0xb8, 0xbb, 0x62, 0x60, 0x63, 0x2d, 0xc1, 0xdd, 0xb8, 0x5a, 0x86, 0xca, 0x40, 0xbe, 0x27, 0x0d, 0xeb, 0xb2, 0xc6, + 0xdf, 0x8d, 0x8a, 0xb1, 0x36, 0xf7, 0x94, 0x81, 0xb6, 0xc6, 0x6e, 0x17, 0xf6, 0x4d, 0xd7, 0x4d, 0xd6, 0x35, 0x8a, + 0xb8, 0x0a, 0xd2, 0xee, 0x6e, 0x01, 0x17, 0xa1, 0x3f, 0x6c, 0x5f, 0x0d, 0x36, 0x55, 0x37, 0x90, 0x04, 0xd7, 0x7e, + 0xf2, 0xdb, 0x53, 0xdd, 0x65, 0xad, 0xfb, 0xed, 0xa9, 0xd6, 0x2e, 0x0b, 0x8d, 0x21, 0x11, 0x76, 0xfd, 0x94, 0xfe, + 0xd3, 0x62, 0xbd, 0x46, 0x6b, 0x18, 0xde, 0x7b, 0xde, 0x8d, 0xe3, 0xf7, 0xde, 0x42, 0x31, 0x81, 0x8b, 0xdc, 0xab, + 0x5c, 0x7a, 0x42, 0x5e, 0x8d, 0xe0, 0x3d, 0xdf, 0x1a, 0xc2, 0x7b, 0x1e, 0x38, 0xbd, 0x82, 0xd4, 0x34, 0x11, 0x6c, + 0xe4, 0xe9, 0x27, 0xb2, 0x48, 0x68, 0xf8, 0xb8, 0xd7, 0x9c, 0x70, 0xfd, 0x57, 0x0a, 0xfc, 0x17, 0x1e, 0x2e, 0xb4, + 0x96, 0x02, 0x73, 0x31, 0x5f, 0x68, 0xac, 0xcc, 0xe8, 0x97, 0x63, 0x29, 0x74, 0x73, 0x4c, 0x67, 0x3c, 0xbf, 0x4b, + 0x17, 0xbc, 0x39, 0x93, 0x42, 0xaa, 0x39, 0xcd, 0x18, 0x56, 0x77, 0x4a, 0xb3, 0x59, 0x73, 0xc1, 0xf1, 0x73, 0x96, + 0x7f, 0x61, 0x9a, 0x67, 0x14, 0xbf, 0x95, 0x43, 0xa9, 0x25, 0x7e, 0x7d, 0x7b, 0x37, 0x61, 0x02, 0xff, 0x3e, 0x5c, + 0x08, 0xbd, 0xc0, 0x8a, 0x0a, 0xd5, 0x54, 0xac, 0xe0, 0xe3, 0x6e, 0xb3, 0x39, 0x2f, 0xf8, 0x8c, 0x16, 0x77, 0xcd, + 0x4c, 0xe6, 0xb2, 0x48, 0xff, 0xab, 0x75, 0x4c, 0x1f, 0x8c, 0x4f, 0xba, 0xba, 0xa0, 0x42, 0x71, 0x58, 0x98, 0x94, + 0xe6, 0xf9, 0xde, 0xf1, 0x69, 0x6b, 0xa6, 0xf6, 0xed, 0x85, 0x1f, 0x15, 0x7a, 0xfd, 0x17, 0xfe, 0x20, 0x61, 0x94, + 0xc9, 0x50, 0x0b, 0x37, 0xc8, 0x65, 0xb6, 0x28, 0x94, 0x2c, 0xd2, 0xb9, 0xe4, 0x42, 0xb3, 0xa2, 0x3b, 0x94, 0xc5, + 0x88, 0x15, 0xcd, 0x82, 0x8e, 0xf8, 0x42, 0xa5, 0x27, 0xf3, 0xdb, 0x6e, 0xbd, 0x07, 0x9b, 0x9f, 0x0a, 0x29, 0x58, + 0x17, 0xf8, 0x8d, 0x49, 0x21, 0x17, 0x62, 0xe4, 0x86, 0xb1, 0x10, 0x8a, 0xe9, 0xee, 0x9c, 0x8e, 0xc0, 0x0e, 0x38, + 0x3d, 0x9f, 0xdf, 0x76, 0xcd, 0xac, 0x6f, 0x18, 0x9f, 0x4c, 0x75, 0x7a, 0xda, 0x6a, 0xd9, 0x6f, 0xc5, 0xbf, 0xb2, + 0xb4, 0xdd, 0x49, 0x3a, 0xa7, 0xf3, 0x5b, 0xe0, 0xe0, 0x35, 0x2b, 0x9a, 0x00, 0x0b, 0xa8, 0xd4, 0x4e, 0x5a, 0x0f, + 0x8e, 0xef, 0x43, 0x06, 0xd8, 0x38, 0x34, 0xcd, 0x84, 0xc0, 0xd8, 0x3d, 0x5d, 0xcc, 0xe7, 0xac, 0x00, 0x2f, 0xfa, + 0xee, 0x8c, 0x16, 0x13, 0x2e, 0x9a, 0x85, 0x69, 0xb4, 0x79, 0x3e, 0xbf, 0x5d, 0xc3, 0x7c, 0x52, 0x6b, 0xb6, 0xea, + 0xa6, 0xe5, 0xbe, 0x96, 0xc1, 0x10, 0x4d, 0x4c, 0x9a, 0xb4, 0x98, 0x0c, 0x69, 0xdc, 0xee, 0xdc, 0xc7, 0xfe, 0x7f, + 0x49, 0x07, 0x05, 0x60, 0x6b, 0x8e, 0x16, 0x85, 0xb9, 0x45, 0x4d, 0xdb, 0xca, 0x36, 0x3b, 0x95, 0x5f, 0x58, 0xe1, + 0x5b, 0x35, 0x1f, 0xcb, 0xad, 0x79, 0xff, 0x27, 0x8d, 0xfe, 0x85, 0x27, 0x14, 0xd6, 0xc0, 0x20, 0x47, 0xdf, 0xc8, + 0x83, 0x30, 0xd3, 0xc1, 0xf2, 0x86, 0x8f, 0xf4, 0x34, 0x6d, 0xb7, 0x5a, 0x3f, 0x54, 0x2b, 0xd6, 0x9d, 0x5a, 0xd0, + 0xb5, 0x0b, 0x36, 0xab, 0xad, 0xe3, 0x8c, 0x96, 0xd8, 0xb6, 0x9c, 0x4b, 0xb7, 0xe4, 0x05, 0xcb, 0x4d, 0x34, 0x99, + 0xb5, 0x43, 0xb9, 0xad, 0x71, 0x72, 0x31, 0x65, 0x05, 0xd7, 0xdd, 0xfa, 0x57, 0xd5, 0xf1, 0xf6, 0xea, 0xaf, 0xad, + 0x1c, 0xba, 0xb4, 0x35, 0xdc, 0xa5, 0xe7, 0x63, 0xf8, 0xd8, 0x5e, 0xfd, 0x2f, 0xb4, 0x88, 0x37, 0x10, 0x13, 0x87, + 0x35, 0xd0, 0x3a, 0x98, 0x73, 0x01, 0x26, 0x99, 0x03, 0xfc, 0x0d, 0x28, 0x64, 0x34, 0xcf, 0x62, 0x18, 0xd1, 0x5e, + 0x73, 0xef, 0xb8, 0x60, 0x33, 0xe4, 0x01, 0x91, 0xdc, 0x3f, 0x2d, 0xd8, 0x6c, 0x9d, 0x98, 0xea, 0x4b, 0x83, 0x22, + 0x34, 0xe7, 0x13, 0x91, 0x66, 0x0c, 0xd0, 0x77, 0x9d, 0x30, 0xa1, 0xb9, 0xbe, 0x6b, 0x16, 0xf2, 0x66, 0x39, 0xe2, + 0x6a, 0x9e, 0xd3, 0xbb, 0x74, 0x9c, 0xb3, 0xdb, 0xae, 0x29, 0xd5, 0xe4, 0x9a, 0xcd, 0x94, 0x2b, 0xdb, 0x85, 0xf4, + 0xe6, 0xc8, 0x9a, 0x4d, 0x00, 0xf4, 0xe4, 0xcd, 0xe6, 0xfe, 0x49, 0x8e, 0xd5, 0x1e, 0xa3, 0x8a, 0x35, 0xe5, 0x42, + 0xef, 0xb5, 0x54, 0x77, 0xc6, 0x45, 0xd3, 0x0d, 0xe4, 0xa4, 0x35, 0xbf, 0xed, 0x6e, 0x43, 0x3e, 0xe8, 0x3f, 0x61, + 0xb7, 0x73, 0x2a, 0x46, 0x6c, 0xb4, 0x0c, 0xaa, 0x75, 0xa0, 0x5e, 0x58, 0x2a, 0x15, 0x7a, 0xda, 0x34, 0xb6, 0x5e, + 0x71, 0x47, 0xa0, 0x6f, 0xa0, 0xd6, 0x83, 0x16, 0xb6, 0xff, 0x9f, 0xb4, 0x51, 0x58, 0x79, 0x0f, 0xc2, 0x2e, 0xf1, + 0xf1, 0x5d, 0x13, 0xfe, 0x2e, 0xc1, 0xb7, 0x88, 0x67, 0x34, 0x77, 0x10, 0x99, 0xf1, 0xd1, 0x28, 0xaf, 0x8d, 0xe8, + 0x32, 0xe8, 0xac, 0x8d, 0x96, 0x30, 0xff, 0xb4, 0xb5, 0xd7, 0xda, 0x33, 0x73, 0x71, 0xdb, 0xfc, 0xe4, 0xe4, 0xfe, + 0xf1, 0x03, 0xd6, 0xcd, 0xb9, 0x60, 0xb5, 0xa9, 0x7e, 0x17, 0xd4, 0x61, 0xc3, 0x1d, 0xd7, 0x70, 0x7b, 0xaf, 0xbd, + 0x77, 0xd2, 0xfa, 0xc1, 0xef, 0xd6, 0x9c, 0x8d, 0x75, 0xda, 0x3e, 0x9b, 0xdf, 0xd6, 0xb7, 0xef, 0xb9, 0x6f, 0xfa, + 0xa6, 0xa0, 0xf3, 0x54, 0x48, 0xf8, 0xd3, 0x85, 0x4d, 0x36, 0xce, 0xe5, 0x4d, 0x3a, 0xe5, 0xa3, 0x11, 0x13, 0xb6, + 0x40, 0x99, 0xc8, 0xf2, 0x9c, 0xcf, 0x15, 0xb7, 0xab, 0xe1, 0x70, 0xf7, 0x74, 0x03, 0xaa, 0xe1, 0x80, 0x8e, 0x83, + 0x01, 0x9d, 0x56, 0x03, 0xaa, 0xfa, 0x0f, 0x47, 0xd8, 0xd9, 0x98, 0xab, 0x29, 0xd5, 0xad, 0x61, 0xd2, 0xdf, 0x0b, + 0xa5, 0x01, 0xe6, 0xde, 0x48, 0xc3, 0x50, 0xf1, 0xe6, 0x90, 0xe9, 0x1b, 0xc6, 0xc4, 0xb7, 0x07, 0x71, 0x99, 0x4a, + 0x91, 0xdf, 0xd9, 0xcf, 0x65, 0xd8, 0x25, 0x5d, 0x68, 0xb9, 0x4e, 0x86, 0x5c, 0xd0, 0xe2, 0xee, 0x5a, 0x31, 0xa1, + 0x64, 0x71, 0x2d, 0xc7, 0xe3, 0xe5, 0xb7, 0x48, 0xcb, 0x7d, 0xb4, 0x4e, 0x14, 0x17, 0x93, 0x9c, 0x59, 0xa2, 0x64, + 0x10, 0xc1, 0x11, 0x73, 0xdb, 0xae, 0x69, 0xb2, 0x36, 0xe8, 0x70, 0xe7, 0x99, 0x76, 0x07, 0x69, 0xda, 0xbc, 0x61, + 0xc3, 0xcf, 0x5c, 0x5b, 0x3c, 0x6b, 0xaa, 0x1b, 0xf0, 0x78, 0x31, 0xcb, 0x30, 0x67, 0xc5, 0xd2, 0xd3, 0xf0, 0x56, + 0x8d, 0xea, 0x5c, 0x09, 0x73, 0x7a, 0x68, 0x3a, 0x6c, 0x42, 0xfc, 0x2f, 0x56, 0x94, 0x7b, 0x8c, 0x0b, 0x83, 0x31, + 0x06, 0x40, 0x9b, 0xbb, 0x24, 0x3c, 0x03, 0x4e, 0x5a, 0x2d, 0x7f, 0x3e, 0x34, 0x6d, 0x9d, 0xb4, 0x9d, 0x9c, 0xb2, + 0xd9, 0xae, 0xfd, 0x59, 0x27, 0x46, 0xed, 0xce, 0xfc, 0x76, 0xcf, 0xfc, 0xd3, 0xda, 0x6b, 0x6d, 0x13, 0x9f, 0x6d, + 0x38, 0x1d, 0x23, 0xbf, 0xb2, 0x5a, 0xce, 0xd3, 0x36, 0x9b, 0x75, 0x17, 0x0a, 0x0e, 0x1a, 0x43, 0x1b, 0xcd, 0x01, + 0xb6, 0x36, 0x33, 0x81, 0x75, 0xa4, 0x5c, 0x00, 0x5d, 0xb7, 0x67, 0x1b, 0xf4, 0xa1, 0x24, 0x18, 0x62, 0xef, 0x6c, + 0xb4, 0x3e, 0xac, 0xd6, 0x5e, 0x35, 0x30, 0xf8, 0x67, 0xfd, 0x57, 0xc5, 0x19, 0xbe, 0x60, 0x01, 0x67, 0xce, 0x1b, + 0xc9, 0xe9, 0xaa, 0xe5, 0xb8, 0xf1, 0x91, 0xae, 0x84, 0x04, 0xe3, 0xcb, 0x30, 0xa3, 0xb7, 0xd6, 0xa9, 0x61, 0xc6, + 0x05, 0x98, 0x4c, 0x21, 0xac, 0x03, 0xe3, 0xf2, 0x69, 0xd8, 0xd0, 0x48, 0xc7, 0xd0, 0xf0, 0x61, 0x27, 0x39, 0x3d, + 0x45, 0xb8, 0x85, 0x3b, 0xa7, 0xa7, 0x81, 0x34, 0x30, 0xd6, 0xbb, 0x8a, 0xee, 0x2a, 0xa9, 0x76, 0x94, 0x3c, 0x32, + 0x8d, 0x1e, 0xb5, 0x5b, 0x2d, 0x6c, 0x1c, 0xb7, 0xcb, 0xc2, 0x5c, 0xed, 0x68, 0xb6, 0xdd, 0x6a, 0x41, 0xb3, 0xf0, + 0xc7, 0xcd, 0xeb, 0x17, 0xb2, 0x6c, 0xa5, 0x2d, 0xdc, 0x4e, 0xdb, 0xb8, 0x93, 0x76, 0xf0, 0x71, 0x7a, 0x8c, 0x4f, + 0xd2, 0x13, 0x7c, 0x9a, 0x9e, 0xe2, 0xb3, 0xf4, 0x0c, 0xdf, 0x4f, 0xef, 0xe3, 0xf3, 0xf4, 0x1c, 0x3f, 0x48, 0x1f, + 0xe0, 0x87, 0x69, 0xbb, 0x85, 0x1f, 0xa5, 0xed, 0x36, 0x7e, 0x9c, 0xb6, 0x3b, 0xf8, 0x49, 0xda, 0x3e, 0xc6, 0x4f, + 0xd3, 0xf6, 0x09, 0x7e, 0x96, 0xb6, 0x4f, 0x31, 0x85, 0xdc, 0x21, 0xe4, 0x66, 0x90, 0x3b, 0x82, 0x5c, 0x06, 0xb9, + 0xe3, 0xb4, 0x7d, 0xba, 0xc6, 0xca, 0x06, 0x7b, 0x88, 0x5a, 0xed, 0xce, 0xf1, 0xc9, 0xe9, 0xd9, 0xfd, 0xf3, 0x07, + 0x0f, 0x1f, 0x3d, 0x7e, 0xf2, 0xf4, 0x59, 0x34, 0xc0, 0x43, 0xe3, 0x73, 0xa1, 0x44, 0x9f, 0x1f, 0xb4, 0x4f, 0x07, + 0xf8, 0xda, 0x7f, 0xc6, 0xfc, 0xa0, 0x73, 0xd2, 0x42, 0x97, 0x97, 0x27, 0x83, 0x46, 0x99, 0xfb, 0xde, 0xb8, 0x7a, + 0x54, 0x59, 0x84, 0x90, 0x18, 0x72, 0x10, 0xbe, 0x33, 0xf5, 0xde, 0xb3, 0x98, 0x27, 0x05, 0x3a, 0x38, 0x30, 0x3f, + 0x26, 0xfe, 0xc7, 0xd0, 0xff, 0xa0, 0xc1, 0x22, 0xdd, 0xd2, 0xd8, 0xf9, 0xfa, 0xea, 0xd2, 0xd2, 0xbe, 0x34, 0x62, + 0xd9, 0xe3, 0xce, 0x9c, 0xfc, 0xbf, 0x22, 0x6b, 0x2e, 0x42, 0x4e, 0xac, 0x4a, 0xe6, 0xb4, 0xc7, 0xc8, 0xb2, 0x48, + 0x3b, 0xa7, 0xa7, 0x07, 0xbf, 0xf4, 0x79, 0xbf, 0x3d, 0x18, 0x1c, 0xb6, 0xef, 0xe3, 0x49, 0x99, 0xd0, 0xb1, 0x09, + 0xc3, 0x32, 0xe1, 0xd8, 0x26, 0xd0, 0xd4, 0xd6, 0x86, 0xa4, 0x13, 0x93, 0x04, 0x25, 0xd6, 0xa9, 0x69, 0xfb, 0xbe, + 0x6d, 0xfb, 0x01, 0xd8, 0x31, 0x99, 0xe6, 0x5d, 0xd3, 0x17, 0x17, 0x27, 0x2b, 0xd7, 0x28, 0x9e, 0xa4, 0xae, 0x35, + 0x9f, 0x78, 0x32, 0x18, 0xe0, 0xa1, 0x49, 0x3c, 0xad, 0x12, 0xcf, 0x06, 0x03, 0xd7, 0xd5, 0x03, 0xd3, 0xd5, 0xfd, + 0x2a, 0xeb, 0x7c, 0x30, 0x30, 0x5d, 0x22, 0xe7, 0xb5, 0xae, 0xf4, 0xde, 0x97, 0x52, 0x73, 0xc0, 0x2f, 0x3a, 0xa7, + 0xa7, 0x3d, 0xc0, 0x30, 0x63, 0x8d, 0xea, 0x61, 0x74, 0x13, 0xc0, 0xe8, 0x0e, 0x7e, 0xf7, 0x86, 0x34, 0xbd, 0xa6, + 0x25, 0x90, 0x7a, 0xd1, 0x7f, 0x45, 0x0d, 0x6d, 0x60, 0x6e, 0xfe, 0x4c, 0xec, 0x9f, 0x21, 0x6a, 0x7c, 0xa1, 0x00, + 0x6e, 0xd0, 0x85, 0x78, 0x65, 0xa6, 0xe9, 0xf1, 0x33, 0x05, 0xe7, 0x92, 0xa9, 0xca, 0x69, 0x6f, 0x35, 0xbd, 0x19, + 0xae, 0xa6, 0xea, 0x0b, 0xfa, 0x33, 0xfe, 0x53, 0x1d, 0xc6, 0xfd, 0x66, 0x23, 0x61, 0x7f, 0x8e, 0xc0, 0x8b, 0xa5, + 0x97, 0x8e, 0xd8, 0x04, 0xf5, 0xfa, 0x7f, 0x2a, 0x3c, 0x68, 0x04, 0x19, 0x3f, 0x6c, 0xa7, 0x80, 0x8f, 0xcb, 0x66, + 0x62, 0xfc, 0x03, 0xea, 0xa1, 0xde, 0x9f, 0xea, 0xf0, 0x4f, 0x74, 0xef, 0xa8, 0x9a, 0xcb, 0xef, 0xd2, 0x6d, 0xe1, + 0x2a, 0xf0, 0xcd, 0x61, 0xb9, 0x85, 0x19, 0x6e, 0x37, 0x19, 0x84, 0x09, 0x03, 0x27, 0x68, 0x12, 0xcb, 0x06, 0x3f, + 0x3a, 0x6e, 0xa1, 0x1f, 0xda, 0x1d, 0x10, 0xeb, 0x9b, 0xe2, 0x70, 0x7b, 0xd3, 0x17, 0xcd, 0x63, 0xfc, 0xa0, 0x59, + 0xe0, 0x36, 0xc2, 0xcd, 0xb6, 0xd7, 0xb7, 0xf6, 0x55, 0xdc, 0x42, 0x58, 0xc5, 0xe7, 0xf0, 0xcf, 0x09, 0x1a, 0x54, + 0x1b, 0xf2, 0x8a, 0x6e, 0xf6, 0x0e, 0x1e, 0x9b, 0x24, 0x56, 0x0d, 0x7e, 0x74, 0xd6, 0x42, 0x3f, 0x9c, 0x99, 0x8e, + 0xd8, 0xa1, 0xde, 0xd1, 0x95, 0xc4, 0x27, 0x4d, 0x09, 0x1d, 0xb5, 0xca, 0x7e, 0x44, 0x7c, 0x8a, 0xb0, 0x88, 0x8f, + 0xe1, 0x9f, 0x76, 0xd8, 0xcf, 0xaf, 0x5b, 0xfd, 0x98, 0x79, 0xb7, 0x71, 0x72, 0x6a, 0x1d, 0x40, 0x95, 0xbd, 0x8d, + 0x6d, 0xb0, 0xcb, 0xb6, 0xb9, 0x46, 0x6a, 0x1f, 0xc1, 0x07, 0xc2, 0xfa, 0x90, 0x28, 0xcc, 0x0e, 0xc1, 0x73, 0x14, + 0x0c, 0x26, 0xd4, 0xc5, 0x71, 0x57, 0x35, 0x1a, 0x48, 0xf4, 0xd5, 0xe0, 0x90, 0xb4, 0x9b, 0xba, 0xc9, 0x30, 0xfc, + 0x6e, 0x90, 0x32, 0x1c, 0x99, 0xa8, 0x7a, 0x7d, 0xec, 0x7a, 0xb5, 0x77, 0xce, 0x1e, 0x3b, 0x08, 0x21, 0xaa, 0x17, + 0xeb, 0x26, 0x43, 0x47, 0xa2, 0x11, 0xeb, 0x0b, 0xd6, 0x3b, 0x4b, 0x5b, 0xc8, 0x60, 0xa7, 0xea, 0xc5, 0xac, 0xc9, + 0x21, 0xbd, 0x93, 0xc6, 0xbc, 0xa9, 0xe1, 0xd7, 0x49, 0x30, 0x0b, 0x01, 0x78, 0x57, 0xf9, 0xc1, 0x14, 0x47, 0x9d, + 0xd3, 0x53, 0x2c, 0x08, 0x4f, 0x26, 0xe6, 0x97, 0x22, 0x3c, 0x19, 0x9a, 0x5f, 0x92, 0x94, 0xf0, 0xb2, 0xbd, 0xe3, + 0x82, 0x04, 0xab, 0x6a, 0x52, 0x28, 0x2c, 0x68, 0x81, 0x8e, 0x3a, 0xfe, 0x42, 0x1a, 0x4f, 0xfd, 0x1c, 0x40, 0x00, + 0x2f, 0x8c, 0x2d, 0xa2, 0x6c, 0x16, 0x38, 0x27, 0xf4, 0x32, 0x39, 0xed, 0x4d, 0x8f, 0xe2, 0x4e, 0x53, 0x36, 0x0b, + 0x94, 0x4e, 0x8f, 0x4c, 0x4d, 0x9c, 0x91, 0xc7, 0xd4, 0xb6, 0x86, 0xa7, 0x70, 0x8b, 0x98, 0x91, 0xec, 0xf0, 0xac, + 0xd5, 0x48, 0x4e, 0x11, 0xee, 0x67, 0xab, 0x16, 0xce, 0x57, 0xab, 0x16, 0xa6, 0xc1, 0x32, 0x3c, 0x16, 0x1e, 0x20, + 0xa5, 0x8e, 0x68, 0x33, 0x2a, 0x4c, 0x8f, 0xc7, 0x1a, 0x6e, 0xc4, 0x35, 0xf8, 0x99, 0x68, 0xf0, 0x80, 0x49, 0xb9, + 0xbb, 0x8a, 0x42, 0x26, 0x2e, 0xde, 0x38, 0xd4, 0x1a, 0xbd, 0x16, 0x7e, 0x5d, 0xbd, 0x4d, 0xa3, 0x88, 0x7f, 0x97, + 0xd8, 0xa6, 0x05, 0xc5, 0xe8, 0x76, 0xb1, 0x5f, 0xe9, 0x56, 0xb1, 0x37, 0x3b, 0x8a, 0x5d, 0x6d, 0x17, 0xfb, 0x28, + 0x03, 0x1d, 0x17, 0xff, 0xe1, 0xf8, 0xac, 0xd5, 0x38, 0x06, 0x64, 0x3d, 0x3e, 0x6b, 0x55, 0x85, 0xee, 0xd1, 0x6a, + 0xad, 0x34, 0xf9, 0x4c, 0xad, 0x95, 0x3f, 0xf7, 0xee, 0xc6, 0x66, 0xe1, 0xac, 0xb3, 0x73, 0xe9, 0xd9, 0xdc, 0x3f, + 0x05, 0x2b, 0x0a, 0x61, 0xa8, 0x9d, 0xee, 0x9f, 0x0d, 0x7a, 0x53, 0x16, 0x37, 0x20, 0x15, 0xa5, 0x63, 0xed, 0x7e, + 0xa1, 0xf2, 0x32, 0xf5, 0xa3, 0x84, 0xa4, 0xce, 0x00, 0x61, 0x49, 0x1a, 0xba, 0x7f, 0x3c, 0x30, 0xe7, 0x5d, 0x01, + 0xbf, 0x4f, 0xcc, 0xef, 0x52, 0x95, 0xe1, 0x5c, 0x01, 0xa6, 0x37, 0xc3, 0xa8, 0x27, 0xc8, 0x6b, 0x1a, 0x1b, 0xeb, + 0x6e, 0x94, 0x96, 0x19, 0xea, 0x0b, 0x64, 0xbc, 0x29, 0x33, 0x04, 0x79, 0x2d, 0xdc, 0x6f, 0xbc, 0x2c, 0x52, 0xb0, + 0xf4, 0xc0, 0x93, 0x14, 0xac, 0x3c, 0xf0, 0x30, 0x15, 0xe0, 0x89, 0x40, 0x53, 0x16, 0xd8, 0x8f, 0x3f, 0x74, 0xba, + 0x23, 0x73, 0xdf, 0x49, 0x0c, 0x96, 0x76, 0x19, 0x9c, 0x14, 0x1f, 0x65, 0x0c, 0x7f, 0x1b, 0x1a, 0x61, 0x06, 0x6d, + 0x32, 0x84, 0x79, 0x52, 0x10, 0x48, 0xc3, 0x3c, 0x99, 0x10, 0x06, 0x4d, 0xf2, 0x64, 0x48, 0x58, 0xbf, 0x13, 0xa0, + 0xc9, 0x53, 0x03, 0x3b, 0x00, 0x0e, 0xaf, 0x5f, 0x21, 0x6b, 0xdb, 0x38, 0xdc, 0x4d, 0x43, 0x13, 0x82, 0x70, 0x15, + 0xc3, 0x2c, 0x60, 0x73, 0x9a, 0x9f, 0x9d, 0x2a, 0xf0, 0x22, 0x4f, 0xa8, 0xa1, 0xde, 0x7f, 0x01, 0x59, 0x8d, 0xef, + 0x2d, 0xd9, 0x1a, 0xef, 0xdd, 0x5b, 0x8a, 0xf5, 0x0f, 0xf0, 0x47, 0xb9, 0x3f, 0xda, 0x9c, 0x7e, 0x6b, 0xf4, 0x57, + 0x0a, 0xc5, 0x76, 0x94, 0x42, 0x7f, 0x79, 0x47, 0x34, 0x45, 0x96, 0xb7, 0x69, 0x34, 0xa2, 0xc5, 0xe7, 0x08, 0x7f, + 0x4a, 0xa3, 0x1c, 0x18, 0xc1, 0x08, 0x7f, 0x4c, 0xa3, 0x82, 0x45, 0xf8, 0x8f, 0x34, 0x1a, 0xe6, 0x8b, 0x08, 0x7f, + 0x48, 0xa3, 0x49, 0x11, 0xe1, 0xf7, 0xa0, 0x26, 0x1c, 0xf1, 0xc5, 0x2c, 0xc2, 0xbf, 0xa7, 0x91, 0x32, 0x76, 0xf8, + 0xf8, 0x61, 0x1a, 0x31, 0x16, 0xe1, 0x77, 0x69, 0x24, 0xf3, 0x08, 0x5f, 0xa5, 0x91, 0x2c, 0x22, 0xfc, 0x28, 0x8d, + 0x0a, 0x1a, 0xe1, 0xc7, 0x69, 0x04, 0x85, 0x26, 0x11, 0x7e, 0x92, 0x46, 0xd0, 0xb2, 0x8a, 0xf0, 0xdb, 0x34, 0xe2, + 0x22, 0xc2, 0xbf, 0xa5, 0x91, 0x5e, 0x14, 0xff, 0x2c, 0x24, 0x57, 0x11, 0x7e, 0x9a, 0x46, 0x53, 0x1e, 0xe1, 0x37, + 0x69, 0x54, 0xc8, 0x08, 0xbf, 0x4e, 0x23, 0x9a, 0x47, 0xf8, 0x55, 0x1a, 0xe5, 0x2c, 0xc2, 0xbf, 0xa6, 0xd1, 0x88, + 0x45, 0xf8, 0x65, 0x1a, 0xdd, 0xb1, 0x3c, 0x97, 0x11, 0x7e, 0x96, 0x46, 0x4c, 0x44, 0xf8, 0x97, 0x34, 0xca, 0xa6, + 0x11, 0xfe, 0x29, 0x8d, 0x68, 0xf1, 0x59, 0x45, 0xf8, 0x79, 0x1a, 0x31, 0x1a, 0xe1, 0x17, 0xb6, 0xa3, 0x49, 0x84, + 0x7f, 0x4e, 0xa3, 0x9b, 0x69, 0xb4, 0xc6, 0x4a, 0x91, 0xe5, 0x6b, 0x9e, 0xb1, 0x3f, 0x58, 0x1a, 0x8d, 0x5b, 0xe3, + 0xf3, 0xf1, 0x38, 0xc2, 0x54, 0x68, 0xfe, 0xcf, 0x82, 0xdd, 0x3c, 0xd5, 0x90, 0x48, 0xd9, 0x70, 0x74, 0x3f, 0xc2, + 0xf4, 0x9f, 0x05, 0x4d, 0xa3, 0xf1, 0xd8, 0x14, 0xf8, 0x67, 0x41, 0x67, 0xb4, 0x78, 0xcb, 0xd2, 0xe8, 0xfe, 0x78, + 0x3c, 0x1e, 0x9d, 0x44, 0x98, 0x7e, 0x5d, 0x7c, 0x34, 0x2d, 0x98, 0x02, 0x43, 0xc6, 0x27, 0x50, 0xf7, 0x74, 0x7c, + 0x3a, 0xca, 0x22, 0x3c, 0xe4, 0xea, 0x9f, 0x05, 0x7c, 0x8f, 0xd9, 0x49, 0x76, 0x12, 0xe1, 0x61, 0x4e, 0xb3, 0xcf, + 0x69, 0xd4, 0x32, 0xbf, 0xc4, 0x2f, 0x6c, 0xf4, 0x7a, 0x26, 0x8d, 0x12, 0x7d, 0xcc, 0x86, 0xd9, 0x28, 0xc2, 0x66, + 0x30, 0x63, 0xf8, 0xfb, 0x85, 0xbf, 0x63, 0x3a, 0x8d, 0xce, 0x69, 0x67, 0xc8, 0x3a, 0x11, 0x1e, 0xbe, 0xb9, 0x11, + 0x69, 0x44, 0x4f, 0x3b, 0xb4, 0x43, 0x23, 0x3c, 0x5c, 0x14, 0xf9, 0xdd, 0x8d, 0x94, 0x23, 0x00, 0xc2, 0xf0, 0xfc, + 0xfc, 0x7e, 0x84, 0x33, 0xfa, 0xab, 0x86, 0xda, 0xa7, 0xe3, 0x07, 0x8c, 0xb6, 0x22, 0xfc, 0x0b, 0x2d, 0xf4, 0xc7, + 0x85, 0x72, 0x03, 0x6d, 0x41, 0x8a, 0xcc, 0xde, 0x81, 0x82, 0x39, 0x1a, 0x75, 0xce, 0x1e, 0xb4, 0x59, 0x84, 0xb3, + 0xab, 0xd7, 0xd0, 0xdb, 0xfd, 0xf1, 0x69, 0x0b, 0x3e, 0x04, 0x48, 0x6a, 0xac, 0x80, 0x46, 0xce, 0x4e, 0x1e, 0x9c, + 0xb2, 0x91, 0x49, 0x54, 0x3c, 0xff, 0x6c, 0x66, 0x7f, 0x0e, 0xf3, 0xc9, 0x0a, 0x3e, 0x53, 0x52, 0xa4, 0xd1, 0x28, + 0x6b, 0x9f, 0x1c, 0x43, 0xc2, 0x1d, 0x15, 0x1e, 0x38, 0xb7, 0x50, 0xf5, 0x7c, 0x18, 0xe1, 0x5b, 0x9b, 0x7a, 0x3e, + 0x34, 0x1f, 0x93, 0x77, 0xbf, 0x8a, 0x37, 0xa3, 0x34, 0x1a, 0x9e, 0x9f, 0x9f, 0xb5, 0x20, 0xe1, 0x03, 0xbd, 0x4b, + 0x23, 0xfa, 0x00, 0xfe, 0x83, 0xec, 0x8f, 0xcf, 0xa0, 0x43, 0x18, 0xe1, 0xed, 0xe4, 0x63, 0x98, 0xf3, 0x79, 0x4a, + 0x3f, 0xf3, 0x34, 0x1a, 0x8e, 0x86, 0xf7, 0xcf, 0xa0, 0xde, 0x8c, 0x4e, 0x9e, 0x69, 0x0a, 0xed, 0xb6, 0x5a, 0xa6, + 0xe5, 0x77, 0xfc, 0x0b, 0x33, 0xd5, 0x4f, 0x4f, 0xcf, 0x86, 0x1d, 0x18, 0xc1, 0x15, 0xa8, 0x18, 0x60, 0x3c, 0xe7, + 0x99, 0x69, 0xf0, 0x2a, 0x7b, 0x3a, 0x4a, 0xa3, 0x07, 0x0f, 0x8e, 0x3b, 0x59, 0x16, 0xe1, 0xdb, 0x8f, 0x23, 0x5b, + 0xdb, 0xe4, 0x29, 0x80, 0x7d, 0x1a, 0xb1, 0x07, 0x0f, 0xce, 0xee, 0x53, 0xf8, 0x7e, 0x6e, 0xda, 0x3a, 0x1f, 0x0f, + 0xb3, 0x73, 0x68, 0xeb, 0x77, 0x98, 0xce, 0xc9, 0xf9, 0xf1, 0xc8, 0xf4, 0xf5, 0xbb, 0x19, 0x75, 0x67, 0x7c, 0x32, + 0x3e, 0x31, 0x99, 0x66, 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x8d, 0x32, 0x36, 0x6a, 0x47, 0xf8, 0xd6, 0x2d, 0xdc, 0x83, + 0x93, 0x56, 0x6b, 0x74, 0x1c, 0xe1, 0xd1, 0xc3, 0xf9, 0xfc, 0xad, 0x81, 0x60, 0xfb, 0xe4, 0x81, 0xfd, 0x56, 0x9f, + 0xef, 0xa0, 0xe9, 0xa1, 0x01, 0xda, 0x88, 0xcf, 0x4c, 0xcb, 0x67, 0x0f, 0xe0, 0x3f, 0xf3, 0x6d, 0x9a, 0x2e, 0xbf, + 0xe5, 0x68, 0x62, 0x17, 0xa5, 0xcd, 0x1e, 0xb4, 0xa0, 0xc6, 0x98, 0x7f, 0x1c, 0x16, 0x1c, 0xd0, 0x68, 0xd8, 0x81, + 0xff, 0x8b, 0xf0, 0x38, 0xbf, 0x7a, 0xed, 0x70, 0x76, 0x3c, 0xa6, 0xe3, 0x56, 0x84, 0xc7, 0xf2, 0xa3, 0xd2, 0x1f, + 0x1e, 0x8a, 0x34, 0xea, 0x74, 0xce, 0x87, 0xa6, 0xcc, 0xe2, 0x17, 0xc5, 0x0d, 0x1e, 0xb7, 0x4c, 0x2b, 0x13, 0xfa, + 0x56, 0x0d, 0xaf, 0x24, 0xac, 0x24, 0xfc, 0x17, 0xe1, 0x09, 0xe8, 0xa5, 0x5c, 0x2b, 0xe7, 0x76, 0x3b, 0x4c, 0xde, + 0x19, 0xd4, 0x1c, 0xdd, 0x07, 0x78, 0xf9, 0x65, 0x1c, 0x51, 0x7a, 0xda, 0x69, 0x45, 0xd8, 0x8c, 0xfa, 0xbc, 0x05, + 0xff, 0x45, 0xd8, 0x42, 0xce, 0xc0, 0x75, 0xf2, 0xf1, 0xd9, 0xcb, 0x9b, 0x34, 0xa2, 0xa3, 0xf1, 0x18, 0x96, 0xc4, + 0x4c, 0xc6, 0x17, 0x9b, 0x4a, 0xc1, 0xee, 0x7e, 0xbd, 0x71, 0xdb, 0xc5, 0x24, 0x68, 0x07, 0x9d, 0xb3, 0x07, 0xc3, + 0x93, 0x08, 0xbf, 0x1d, 0x71, 0x2a, 0x60, 0x95, 0xb2, 0xd1, 0x69, 0x76, 0x9a, 0x99, 0x84, 0x89, 0x4c, 0xa3, 0x13, + 0x58, 0xf2, 0x4e, 0x84, 0xf9, 0x97, 0xab, 0x3b, 0x8b, 0x6e, 0x50, 0xdb, 0x21, 0xc8, 0xb8, 0xc5, 0xce, 0xce, 0xb3, + 0x08, 0xe7, 0xf4, 0xcb, 0xb3, 0x5f, 0x8b, 0x34, 0x62, 0x67, 0xec, 0x6c, 0x4c, 0xfd, 0xf7, 0x1f, 0x6a, 0x6a, 0x6a, + 0xb4, 0xc6, 0xa7, 0x90, 0x74, 0x23, 0xcc, 0x58, 0xef, 0x67, 0x63, 0x83, 0x21, 0xaf, 0x66, 0x52, 0x64, 0x4f, 0xc7, + 0x63, 0x69, 0xb1, 0x98, 0xc2, 0x26, 0xfc, 0x04, 0xd0, 0xa6, 0xa3, 0xd1, 0x39, 0x3b, 0x8b, 0xf0, 0x27, 0xbb, 0x4b, + 0xdc, 0x04, 0x3e, 0x59, 0xcc, 0x66, 0x6e, 0xb7, 0x7f, 0xb2, 0x40, 0x81, 0xf9, 0x8e, 0xe9, 0x98, 0x8e, 0x3a, 0x11, + 0xfe, 0x64, 0xe0, 0x32, 0x3a, 0x86, 0xff, 0xa0, 0x00, 0x74, 0xf6, 0xa0, 0xc5, 0xd8, 0x83, 0x96, 0xf9, 0x0a, 0xf3, + 0xdc, 0xcc, 0x87, 0x67, 0x59, 0x3b, 0xc2, 0x9f, 0x1c, 0x3a, 0x8e, 0xc7, 0xb4, 0x05, 0xe8, 0xf8, 0xc9, 0xa1, 0x63, + 0xa7, 0x35, 0xec, 0x50, 0xf3, 0x6d, 0xb1, 0xe6, 0xfc, 0x7e, 0xc6, 0x60, 0x72, 0x9f, 0x2c, 0x42, 0xde, 0xbf, 0x7f, + 0x7e, 0xfe, 0xe0, 0x01, 0x7c, 0x9a, 0xb6, 0xcb, 0x4f, 0xa5, 0x1f, 0xe6, 0x06, 0xc9, 0x5a, 0xd9, 0x09, 0xd0, 0xc9, + 0x4f, 0x66, 0x8c, 0xe3, 0xf1, 0x98, 0xb5, 0x22, 0x9c, 0xf3, 0x19, 0xb3, 0x98, 0x60, 0x7f, 0x9b, 0x8e, 0x8e, 0x3b, + 0xd9, 0xe8, 0xb8, 0x13, 0xe1, 0xfc, 0xed, 0x33, 0x33, 0x9b, 0x16, 0xcc, 0xde, 0x6f, 0x39, 0x8f, 0x35, 0x33, 0xfa, + 0x06, 0x06, 0x09, 0x2b, 0x0d, 0x95, 0xdf, 0x07, 0xf4, 0xf0, 0xec, 0x2c, 0x1b, 0xc1, 0x40, 0xdf, 0x43, 0xb7, 0x00, + 0xc6, 0xf7, 0x76, 0xf3, 0x0d, 0xe9, 0xe9, 0x29, 0x4c, 0xf7, 0xfd, 0x7c, 0x51, 0xcc, 0x5f, 0xa5, 0xd1, 0x83, 0xe3, + 0xfb, 0xad, 0xd1, 0x30, 0xc2, 0xef, 0xdd, 0x04, 0x8f, 0xb3, 0xe1, 0xf1, 0xfd, 0x76, 0x84, 0xdf, 0x9b, 0xfd, 0x76, + 0x7f, 0x78, 0x76, 0x0e, 0xe7, 0xc6, 0x7b, 0x35, 0x2f, 0xde, 0x4e, 0x4c, 0x81, 0x31, 0x7d, 0x00, 0xcd, 0xfe, 0x66, + 0x76, 0xe3, 0xa8, 0x0d, 0x1b, 0xf9, 0xbd, 0xd9, 0x64, 0x06, 0x4f, 0xee, 0xb7, 0x4f, 0xcf, 0x4f, 0x23, 0x3c, 0xe3, + 0x23, 0x01, 0x04, 0xde, 0x6c, 0x94, 0x07, 0xed, 0x07, 0xf7, 0x5b, 0x11, 0x9e, 0xbd, 0xd5, 0xd9, 0x47, 0x3a, 0x33, + 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa5, 0xef, 0xde, 0x28, 0x47, 0x8f, 0x59, 0x3b, 0xc2, 0x33, 0x99, 0x65, 0x54, + 0xbd, 0xb5, 0x09, 0xc3, 0xd3, 0x08, 0x0b, 0xfa, 0x85, 0xfe, 0x2d, 0xfd, 0x66, 0x1a, 0x31, 0x3a, 0x32, 0x69, 0x06, + 0x87, 0x23, 0xfc, 0x6e, 0x04, 0xd7, 0x60, 0x69, 0x34, 0x1e, 0x8d, 0x4f, 0x01, 0x3c, 0x40, 0x80, 0x2c, 0x76, 0x03, + 0x34, 0xe0, 0x6b, 0xf4, 0x68, 0x98, 0x46, 0x67, 0xc3, 0x73, 0xd6, 0x39, 0x8e, 0x70, 0x49, 0x8d, 0xe8, 0x29, 0xe4, + 0x9b, 0xcf, 0x8f, 0x66, 0x4b, 0x9d, 0xd8, 0x04, 0x03, 0xa0, 0x11, 0xbd, 0xdf, 0x1a, 0x9d, 0x45, 0x78, 0xfe, 0x9a, + 0xf9, 0x3d, 0xc6, 0x18, 0x3b, 0x07, 0x58, 0x42, 0x92, 0x41, 0xa0, 0xf3, 0xf1, 0xf0, 0xc1, 0xb9, 0xf9, 0x06, 0x30, + 0xd0, 0x31, 0x63, 0x00, 0xa4, 0xf9, 0x6b, 0x56, 0x02, 0x62, 0x34, 0xbc, 0xdf, 0x02, 0xfa, 0x32, 0xa7, 0x73, 0x7a, + 0x47, 0x6f, 0x9e, 0xce, 0xcd, 0x9c, 0xc6, 0xa3, 0xd3, 0x08, 0xcf, 0x9f, 0xff, 0x32, 0x5f, 0x8c, 0xc7, 0x66, 0x42, + 0x74, 0xf8, 0x20, 0xc2, 0x73, 0x56, 0x2c, 0x60, 0x8d, 0xce, 0x4f, 0x8f, 0xc7, 0x11, 0x76, 0x68, 0x98, 0xb5, 0xb2, + 0x21, 0xdc, 0xf3, 0x2d, 0x66, 0x69, 0x34, 0x1a, 0xd1, 0xd6, 0x08, 0x6e, 0xfd, 0xe4, 0xcd, 0xaf, 0x85, 0x45, 0x23, + 0x66, 0xf0, 0xc1, 0xad, 0x21, 0xcc, 0x17, 0xe0, 0xf1, 0x71, 0xc8, 0xb2, 0x8c, 0xba, 0xc4, 0xb3, 0xb3, 0xe3, 0x63, + 0xc0, 0x3d, 0x3b, 0x43, 0x8b, 0x20, 0x6f, 0xd4, 0xdd, 0xb0, 0x90, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, + 0xee, 0xb5, 0xa1, 0xab, 0xed, 0xb3, 0x07, 0xb0, 0x00, 0x8a, 0x8e, 0x46, 0xaf, 0xec, 0xe1, 0x76, 0x3e, 0x3c, 0x39, + 0x6d, 0x1f, 0x47, 0xd8, 0x6f, 0x04, 0x7a, 0xde, 0xba, 0xdf, 0x81, 0x12, 0x62, 0x74, 0x67, 0x4b, 0x8c, 0x4f, 0xe8, + 0xc9, 0x59, 0x2b, 0xc2, 0x7e, 0x6b, 0xb0, 0xf3, 0xe1, 0xe9, 0x7d, 0xf8, 0x54, 0x53, 0x96, 0xe7, 0x06, 0xbf, 0x4f, + 0x01, 0x2e, 0x8a, 0x3f, 0x13, 0x34, 0x8d, 0x68, 0xeb, 0xb4, 0xd3, 0x19, 0xc1, 0x67, 0xfe, 0x85, 0x15, 0x69, 0x94, + 0xb5, 0xe0, 0xbf, 0x08, 0x07, 0x3b, 0x89, 0x0d, 0x23, 0x6c, 0xf0, 0xee, 0x8c, 0x9e, 0x9a, 0xbd, 0xef, 0x76, 0x55, + 0xeb, 0xbc, 0x05, 0x1b, 0xd6, 0x6d, 0x2a, 0xf7, 0xa5, 0x84, 0xbc, 0x71, 0x24, 0x96, 0x46, 0x38, 0x40, 0xd0, 0xf1, + 0xfd, 0x71, 0x84, 0xfd, 0x8e, 0x3b, 0x39, 0x3b, 0xef, 0x00, 0x29, 0xd3, 0x40, 0x28, 0x46, 0x9d, 0xe1, 0x09, 0x90, + 0x26, 0xcd, 0x5e, 0x5b, 0x3c, 0x89, 0xb0, 0x7e, 0xaa, 0xf4, 0xab, 0x34, 0x1a, 0x9d, 0x0f, 0xc7, 0xa3, 0xf3, 0x08, + 0x6b, 0x39, 0xa3, 0x5a, 0x1a, 0x0a, 0x78, 0x7c, 0x72, 0x3f, 0xc2, 0x06, 0xcd, 0x5b, 0xac, 0x35, 0x6a, 0x45, 0xd8, + 0x1d, 0x25, 0x8c, 0x9d, 0x77, 0x60, 0x5a, 0x3f, 0x3f, 0xd7, 0x80, 0xcb, 0x23, 0x36, 0x3c, 0x8e, 0x70, 0x49, 0xef, + 0x0d, 0x21, 0x82, 0x2f, 0x35, 0x93, 0x9f, 0x1d, 0xeb, 0x01, 0xa4, 0xce, 0x6f, 0x78, 0x58, 0x86, 0x97, 0x37, 0x16, + 0x8d, 0xa8, 0xd9, 0xe2, 0xc1, 0x3d, 0xe8, 0x13, 0x1a, 0x7b, 0xb6, 0x9d, 0x93, 0xe5, 0x1a, 0x97, 0xe1, 0x45, 0x3f, + 0xb3, 0x3b, 0x15, 0x2b, 0x65, 0x38, 0xd9, 0x20, 0x05, 0x5c, 0x00, 0x9c, 0x41, 0xbd, 0xf3, 0x99, 0x04, 0x41, 0x52, + 0x90, 0x56, 0x57, 0x5c, 0x78, 0x3f, 0xce, 0xae, 0x80, 0xa0, 0x03, 0x90, 0x5e, 0x10, 0x4a, 0x34, 0xc4, 0x66, 0xb1, + 0xc2, 0xa4, 0x37, 0x6f, 0x37, 0x32, 0xa5, 0xb4, 0x06, 0xf3, 0x94, 0x50, 0x1f, 0x95, 0x1d, 0x2e, 0x69, 0x21, 0x6e, + 0x11, 0xea, 0x4a, 0x62, 0x62, 0x2c, 0xbf, 0x10, 0x3a, 0x56, 0xaa, 0x5f, 0x0c, 0x70, 0xfb, 0x0c, 0x61, 0x88, 0x5e, + 0x40, 0xfa, 0xf2, 0xf2, 0xb2, 0x7d, 0x76, 0x60, 0x84, 0xbe, 0xcb, 0xcb, 0x73, 0xfb, 0x03, 0xfe, 0x1d, 0x54, 0x11, + 0xa3, 0x61, 0x7c, 0x8f, 0x58, 0xa0, 0xd1, 0x33, 0xfc, 0xf5, 0x23, 0xb6, 0x5a, 0xc5, 0x8f, 0x18, 0x81, 0x19, 0xe3, + 0x47, 0x2c, 0x31, 0xb7, 0x06, 0xd6, 0x37, 0x85, 0xf4, 0x41, 0x73, 0xd6, 0xc2, 0x10, 0xc7, 0xdc, 0x73, 0xde, 0x8f, + 0x58, 0x9f, 0xd7, 0xfd, 0x9a, 0xab, 0xe0, 0xc1, 0x07, 0x07, 0xcb, 0x22, 0xd5, 0x56, 0x4c, 0xd0, 0x56, 0x4c, 0xd0, + 0x56, 0x4c, 0xd0, 0x55, 0xf8, 0xf6, 0x93, 0x1e, 0x48, 0x29, 0x46, 0xd9, 0xe2, 0x78, 0xea, 0x77, 0xa0, 0xf6, 0x00, + 0xed, 0x64, 0xaf, 0x52, 0x76, 0x94, 0xba, 0x8a, 0x9d, 0x0a, 0x8c, 0x9d, 0x89, 0x4e, 0xdb, 0x71, 0xf4, 0xef, 0xa8, + 0x3b, 0x5e, 0xd6, 0xc4, 0xb2, 0x77, 0x3b, 0xc5, 0x32, 0x58, 0x49, 0x23, 0x9a, 0xed, 0xdb, 0x48, 0x18, 0xba, 0x7f, + 0xdf, 0x08, 0x66, 0x55, 0x78, 0xb6, 0x06, 0x24, 0x75, 0x41, 0x0a, 0x39, 0x37, 0x52, 0x5a, 0x81, 0xd2, 0x91, 0x8e, + 0x0b, 0xd0, 0x50, 0x7a, 0x05, 0x65, 0x19, 0x45, 0xb4, 0x61, 0x00, 0xa2, 0xac, 0x8c, 0x66, 0x65, 0xb5, 0x53, 0x10, + 0x5d, 0x40, 0x13, 0x66, 0x24, 0x16, 0x68, 0x40, 0x98, 0x06, 0x84, 0xab, 0x0c, 0xe2, 0x8c, 0xcb, 0x3e, 0x31, 0xd9, + 0xca, 0x64, 0xab, 0x32, 0x5b, 0xfa, 0x6c, 0x2b, 0x24, 0x4a, 0x93, 0x2d, 0xcb, 0x6c, 0x90, 0xd9, 0xf0, 0x24, 0x55, + 0x78, 0x98, 0x4a, 0x2b, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0x1a, 0x6a, 0x73, 0x0f, 0x0e, 0xe2, 0x52, 0x4e, 0x32, 0x6a, + 0xe2, 0x7b, 0x4b, 0x9e, 0x14, 0x46, 0x06, 0xe2, 0xc9, 0xc4, 0xfd, 0x1d, 0xae, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfc, + 0x46, 0x49, 0xf4, 0x97, 0x57, 0xa2, 0x3e, 0xe2, 0x26, 0xfe, 0xcc, 0x05, 0x49, 0x5a, 0xad, 0xe3, 0xf6, 0x71, 0xeb, + 0xbc, 0xc7, 0x0f, 0xdb, 0x9d, 0xe4, 0x41, 0x27, 0x35, 0x8a, 0x88, 0xb9, 0xbc, 0x01, 0x05, 0xcc, 0x51, 0x27, 0x39, + 0x41, 0x87, 0xed, 0xa4, 0x75, 0x7a, 0xda, 0x84, 0x7f, 0xf0, 0x7b, 0x5d, 0x56, 0x3b, 0x69, 0x9d, 0x9c, 0xf6, 0xf8, + 0xd1, 0x46, 0xa5, 0x98, 0x37, 0xa0, 0x20, 0x3a, 0x32, 0x95, 0x30, 0xd4, 0xaf, 0x96, 0xf7, 0xd9, 0x96, 0x9e, 0xe7, + 0xbd, 0x8e, 0x95, 0x55, 0xc5, 0x01, 0x54, 0xfd, 0xd7, 0xc4, 0x00, 0xd1, 0x7f, 0x0d, 0xcb, 0x18, 0xb1, 0xcb, 0x02, + 0x44, 0xed, 0x47, 0x3c, 0x16, 0x0d, 0x76, 0x18, 0xdb, 0x7c, 0x0d, 0x75, 0x9b, 0x10, 0xb7, 0x0d, 0x4f, 0x5c, 0xae, + 0x0a, 0x73, 0x27, 0x08, 0x35, 0x15, 0xe4, 0x0e, 0x5d, 0xae, 0x0c, 0x73, 0x87, 0x08, 0x35, 0x25, 0xe4, 0xd2, 0x94, + 0x27, 0x14, 0x72, 0x74, 0x42, 0x9b, 0x06, 0x92, 0xd5, 0xa2, 0x3c, 0x67, 0x7e, 0xd8, 0x7c, 0x0c, 0xcb, 0x63, 0x08, + 0x8a, 0x13, 0xa4, 0x05, 0xbc, 0xed, 0x51, 0x6a, 0x73, 0x5a, 0xb8, 0x54, 0xe3, 0x40, 0x46, 0x03, 0xfe, 0x39, 0x64, + 0xe6, 0xc1, 0x87, 0x56, 0xef, 0xf8, 0xac, 0x95, 0xb6, 0xc1, 0x49, 0x19, 0x64, 0x6d, 0x61, 0x65, 0x6d, 0xe1, 0x65, + 0x6d, 0xe1, 0x65, 0x6d, 0x10, 0xe0, 0x83, 0xbe, 0xff, 0x91, 0x35, 0xc3, 0x0f, 0x5e, 0x5a, 0x91, 0x58, 0x33, 0x81, + 0x58, 0xaf, 0x56, 0xcb, 0x35, 0xd8, 0xf8, 0x94, 0x35, 0xa4, 0xaa, 0xd4, 0x9f, 0xcb, 0x22, 0x6d, 0xe1, 0x49, 0x0a, + 0x5a, 0xee, 0x16, 0xa6, 0x66, 0x73, 0x7b, 0xaa, 0xb0, 0x19, 0x3f, 0xa6, 0xe7, 0xd5, 0xc9, 0x97, 0xe4, 0xd8, 0x68, + 0x8f, 0x97, 0x45, 0xca, 0x2d, 0xcd, 0xe0, 0x96, 0x66, 0x70, 0x4b, 0x33, 0xa0, 0x11, 0x5c, 0x16, 0x36, 0x65, 0x13, + 0x4a, 0xe0, 0x4a, 0xa0, 0x7f, 0x3c, 0x80, 0xf0, 0x79, 0xb1, 0x26, 0x66, 0xd4, 0x1b, 0x9d, 0xb7, 0x21, 0x5c, 0x98, + 0x2d, 0xa9, 0x13, 0x6a, 0xbc, 0xa6, 0xcb, 0x31, 0x7f, 0xad, 0xa1, 0x7d, 0x02, 0x6f, 0xb9, 0x3c, 0xd4, 0x71, 0x0b, + 0x8c, 0x26, 0xa2, 0x22, 0xea, 0x19, 0xb2, 0x90, 0x1a, 0x9d, 0x8d, 0x33, 0x86, 0xfe, 0xbc, 0xe1, 0x83, 0x6a, 0x29, + 0x41, 0xf8, 0x82, 0xc1, 0x67, 0x56, 0x39, 0xc5, 0x97, 0xb6, 0x9e, 0xce, 0x50, 0xcb, 0x1e, 0x09, 0x5d, 0x30, 0xd8, + 0xf6, 0xd1, 0x96, 0x7a, 0x82, 0x48, 0x65, 0xdc, 0x05, 0x49, 0x15, 0x2f, 0x18, 0xdc, 0x67, 0xc9, 0x2d, 0x35, 0xce, + 0x24, 0x2f, 0xec, 0x9f, 0xaf, 0x34, 0xf0, 0xb6, 0x2b, 0x26, 0x43, 0xef, 0xa4, 0x7a, 0x6d, 0xa2, 0xea, 0x90, 0xfd, + 0x7d, 0x6b, 0x4b, 0x6d, 0xbe, 0x36, 0x8d, 0xa9, 0x4d, 0xa2, 0xc9, 0x86, 0x1d, 0xea, 0xd7, 0xe8, 0x1f, 0xef, 0x2b, + 0x56, 0x4c, 0x86, 0x28, 0xa0, 0xd9, 0x06, 0xac, 0xaa, 0x02, 0x96, 0x72, 0xf5, 0x4a, 0x17, 0x42, 0xe8, 0xdd, 0x8c, + 0x79, 0x5d, 0x4c, 0x86, 0x3b, 0x1f, 0xfd, 0xb0, 0x3d, 0xf6, 0xde, 0xd2, 0xa0, 0x07, 0xaf, 0xda, 0x9e, 0xb2, 0xdb, + 0xef, 0xd5, 0xb9, 0xd9, 0x59, 0x47, 0xe5, 0xdf, 0xab, 0xf3, 0x74, 0x57, 0x9d, 0x19, 0xbf, 0x8d, 0xfd, 0xde, 0xd1, + 0x81, 0x1a, 0xdb, 0x18, 0xe8, 0x4c, 0x86, 0x10, 0xa5, 0x1d, 0xfe, 0xda, 0x58, 0x2a, 0x5d, 0x4f, 0xc2, 0x61, 0x15, + 0x64, 0x2f, 0x39, 0x4d, 0x19, 0xa6, 0xa4, 0x73, 0x58, 0x98, 0x68, 0x2a, 0x22, 0xa1, 0x4d, 0x95, 0x50, 0x9c, 0x93, + 0x38, 0xa6, 0x87, 0x19, 0xc4, 0x84, 0x69, 0xf7, 0x68, 0x1a, 0xd3, 0x46, 0x86, 0x8e, 0xe2, 0x76, 0x83, 0x1e, 0x66, + 0x08, 0x35, 0xda, 0xa0, 0x33, 0x95, 0xa4, 0xdd, 0xcc, 0x21, 0x4a, 0xa4, 0x21, 0xc5, 0xf9, 0xa1, 0x48, 0x8a, 0x86, + 0x3c, 0x54, 0x49, 0xd1, 0x48, 0x4e, 0xb1, 0x48, 0x26, 0x65, 0xf2, 0xc4, 0x24, 0x4f, 0x6c, 0xf2, 0xb0, 0x4c, 0x1e, + 0x9a, 0xe4, 0xa1, 0x4d, 0xa6, 0xa4, 0x38, 0x14, 0x09, 0x6d, 0xc4, 0xed, 0x66, 0x81, 0x0e, 0x61, 0x04, 0x7e, 0xf4, + 0x44, 0x84, 0xc1, 0xb9, 0xd7, 0xc6, 0xba, 0x65, 0x2e, 0x73, 0x17, 0x2e, 0xb3, 0x02, 0x52, 0xe9, 0x72, 0x04, 0x75, + 0x9e, 0x05, 0x60, 0xc2, 0xda, 0xfe, 0xf1, 0xc1, 0xe0, 0xd6, 0x59, 0x2e, 0x45, 0xe0, 0x52, 0x05, 0x56, 0xe0, 0x9f, + 0x9d, 0x23, 0x09, 0x40, 0x75, 0x4d, 0xf3, 0xf9, 0x94, 0x6e, 0xf9, 0xad, 0x16, 0x93, 0xa1, 0xdb, 0x59, 0x65, 0x33, + 0x8c, 0x16, 0x36, 0xc8, 0x72, 0xdd, 0xc3, 0x10, 0x40, 0xed, 0xbd, 0x1a, 0x13, 0x6a, 0x94, 0xe4, 0xb6, 0xc6, 0xa4, + 0x60, 0x77, 0x2a, 0xa3, 0x39, 0x8b, 0xab, 0x03, 0xb8, 0x1a, 0x26, 0x23, 0x2f, 0xc0, 0x16, 0xbd, 0x38, 0x4c, 0x8e, + 0x1b, 0x3a, 0x99, 0x1c, 0x26, 0xa7, 0x0f, 0x1a, 0x3a, 0x19, 0x1e, 0x26, 0xed, 0x76, 0x85, 0xb3, 0x49, 0x41, 0x74, + 0x32, 0x21, 0x1a, 0x34, 0x86, 0xb6, 0x51, 0x39, 0xa7, 0x60, 0x5c, 0xf5, 0x6f, 0x0c, 0xa3, 0xe1, 0x86, 0x21, 0xd8, + 0xc4, 0xc6, 0x9b, 0xdc, 0x1a, 0x43, 0xd8, 0x4d, 0xe7, 0xf4, 0xb4, 0xa9, 0x93, 0x02, 0x6b, 0xbb, 0x92, 0x4d, 0x9d, + 0x4c, 0xb0, 0xb6, 0xcb, 0xd7, 0xd4, 0xc9, 0xd0, 0x36, 0x65, 0x74, 0x80, 0x4c, 0x04, 0xc0, 0x7a, 0xce, 0x02, 0xc8, + 0x77, 0xbc, 0x7b, 0xc8, 0x1a, 0xb4, 0x86, 0xdf, 0x2b, 0xd7, 0xf4, 0x05, 0x15, 0xd5, 0x60, 0x64, 0xc3, 0xbe, 0x55, + 0xb4, 0x5d, 0x35, 0xc9, 0xfe, 0x75, 0xd9, 0xb2, 0xd9, 0x42, 0xea, 0x7a, 0xc1, 0x87, 0x35, 0x0c, 0x71, 0xa5, 0xdc, + 0xc1, 0xfd, 0x8a, 0x92, 0x18, 0xa2, 0xca, 0x99, 0x53, 0x88, 0x13, 0xaf, 0x47, 0x86, 0x24, 0xde, 0x68, 0xac, 0x51, + 0x1c, 0x9c, 0xb7, 0x4f, 0x43, 0xaa, 0xba, 0x15, 0x6a, 0x8e, 0x90, 0x68, 0x21, 0xac, 0x31, 0xe2, 0x28, 0x0a, 0x58, + 0x10, 0xa7, 0xdd, 0xad, 0x1d, 0x10, 0x07, 0x07, 0x9b, 0xe7, 0x85, 0x0f, 0xfa, 0xbf, 0x15, 0xe8, 0xbf, 0xb2, 0x64, + 0xf3, 0x4f, 0x11, 0x59, 0x1b, 0x57, 0x1e, 0x20, 0x8a, 0x0f, 0xfa, 0x74, 0xdf, 0x50, 0xf8, 0x7e, 0x15, 0xf1, 0xce, + 0xe5, 0x34, 0xcf, 0x4c, 0x86, 0xe9, 0x6b, 0x10, 0x8c, 0xed, 0x4d, 0x38, 0xa1, 0xd2, 0x4a, 0xef, 0x5f, 0x76, 0x1c, + 0x74, 0xe2, 0x9e, 0x4a, 0x09, 0x1b, 0xfd, 0x3b, 0xb4, 0x89, 0xad, 0x60, 0xe3, 0xbc, 0xa1, 0x57, 0xab, 0xda, 0xc3, + 0x38, 0xf6, 0xf9, 0x15, 0x74, 0x70, 0xc0, 0xd5, 0x33, 0x30, 0xe3, 0x65, 0x71, 0x23, 0x3c, 0x7c, 0xff, 0xa9, 0x9d, + 0xd6, 0x7f, 0x9b, 0x73, 0x35, 0x0d, 0x0e, 0xba, 0x87, 0xb5, 0xfc, 0x9d, 0x2b, 0xd1, 0xd3, 0x29, 0x77, 0x6b, 0xfd, + 0x77, 0x65, 0x24, 0xbd, 0xf5, 0x44, 0xd3, 0xc1, 0x01, 0xaf, 0x02, 0x25, 0x45, 0x3f, 0x44, 0xa8, 0x67, 0x64, 0x90, + 0x67, 0xb9, 0xa4, 0x70, 0x23, 0x0a, 0x57, 0x0c, 0x69, 0x83, 0x1f, 0x69, 0xfc, 0x87, 0xfc, 0xff, 0xd4, 0xc8, 0xa1, + 0x4e, 0x1b, 0x3c, 0x10, 0xc0, 0x42, 0x56, 0xa8, 0x0a, 0x51, 0x68, 0x20, 0x1d, 0xda, 0x3c, 0xa3, 0xf2, 0x30, 0xa7, + 0xf3, 0x79, 0x7e, 0x67, 0x5e, 0xa9, 0x0a, 0x38, 0xaa, 0xea, 0xa2, 0xc9, 0xc5, 0x87, 0xc3, 0x05, 0xf0, 0xf4, 0x80, + 0x7b, 0xc8, 0xf8, 0x77, 0x96, 0x97, 0xdb, 0x02, 0x81, 0x64, 0xa6, 0x88, 0x6c, 0xb6, 0xbb, 0xea, 0x12, 0xe4, 0xb2, + 0x66, 0x13, 0x69, 0x17, 0x36, 0x1b, 0x73, 0x90, 0xc9, 0x94, 0xf5, 0xe1, 0xdc, 0xb3, 0x05, 0x41, 0x72, 0x93, 0x46, + 0x64, 0xdb, 0x5d, 0x8a, 0x8f, 0x63, 0x40, 0x23, 0x64, 0x05, 0xbe, 0x50, 0x58, 0xe4, 0xc0, 0x75, 0x16, 0xbe, 0xe3, + 0x6f, 0xb4, 0x54, 0xf4, 0xd5, 0x60, 0x80, 0x0b, 0xf3, 0x30, 0x43, 0x39, 0x9f, 0x42, 0x05, 0x0f, 0xfd, 0x04, 0x22, + 0x0a, 0x5f, 0xad, 0xf6, 0xe1, 0x1d, 0x1d, 0xd7, 0x26, 0x38, 0x7d, 0xba, 0x9f, 0xd5, 0x9b, 0x19, 0x30, 0x0e, 0x46, + 0x5a, 0xe6, 0xa2, 0xd0, 0xc9, 0x9b, 0xec, 0x42, 0x74, 0x1b, 0x0d, 0x66, 0x42, 0x1c, 0x11, 0x88, 0x67, 0x06, 0x1e, + 0x79, 0xf0, 0xc7, 0x46, 0x2d, 0x52, 0xcc, 0xc6, 0x7e, 0x83, 0xa0, 0xd4, 0xb5, 0x84, 0xd5, 0x4a, 0xd9, 0xd8, 0x22, + 0x26, 0xc7, 0x46, 0x19, 0x29, 0xfb, 0x29, 0x83, 0x98, 0x56, 0x66, 0x1c, 0xdc, 0x6d, 0xf5, 0xb7, 0xd5, 0x7e, 0xde, + 0xe3, 0xf6, 0x1a, 0x8f, 0x1b, 0x8f, 0x7d, 0x03, 0xa8, 0xe5, 0xc6, 0x06, 0xb7, 0x16, 0xe6, 0xb1, 0x35, 0x87, 0x65, + 0x9b, 0x10, 0x14, 0xa5, 0x87, 0xba, 0xbd, 0xb9, 0xf5, 0x11, 0xfb, 0x94, 0x99, 0x93, 0x42, 0xba, 0x0f, 0x72, 0xf4, + 0x80, 0x40, 0xe7, 0xf6, 0x67, 0x45, 0x17, 0x2a, 0x99, 0xb8, 0x1c, 0xe3, 0x2f, 0xc1, 0x6d, 0x5e, 0x3f, 0xba, 0xbe, + 0x36, 0x9b, 0xfc, 0xfa, 0x3a, 0xc2, 0xa1, 0x59, 0x77, 0x14, 0xf0, 0x82, 0xd1, 0xa0, 0x0c, 0xea, 0x64, 0x36, 0x7e, + 0xb3, 0x5d, 0x35, 0xf6, 0x9e, 0x56, 0x78, 0x07, 0xcb, 0x63, 0x1a, 0xdf, 0x72, 0x83, 0xec, 0x73, 0x80, 0x37, 0xeb, + 0xf3, 0x41, 0xf7, 0x4d, 0xac, 0xd0, 0xc1, 0xc1, 0x9b, 0x58, 0xa2, 0xde, 0x15, 0x33, 0x77, 0x6e, 0xe0, 0x07, 0xdd, + 0xe7, 0x66, 0xf8, 0x32, 0x40, 0x80, 0x2b, 0xb6, 0x29, 0xd9, 0xbc, 0x35, 0x51, 0x27, 0x52, 0x88, 0x6a, 0x0d, 0xb1, + 0x75, 0x1d, 0x48, 0xa0, 0xd7, 0x37, 0x21, 0xb4, 0xbb, 0x8c, 0x30, 0x60, 0xe1, 0x4b, 0x2f, 0x35, 0x96, 0xcc, 0x58, + 0x31, 0x61, 0xc5, 0x6a, 0xf5, 0x9e, 0x5a, 0xcf, 0xb3, 0x8d, 0x20, 0x89, 0xaa, 0xdb, 0x68, 0x50, 0x33, 0x7e, 0x10, + 0x1f, 0xe8, 0x00, 0xef, 0xbf, 0x89, 0x0b, 0x84, 0xc0, 0xc2, 0x88, 0x8b, 0x85, 0xf7, 0xb2, 0xca, 0x6a, 0xeb, 0x52, + 0xa0, 0xb2, 0x91, 0x9c, 0xb4, 0xf0, 0x94, 0x64, 0xe5, 0x1a, 0x5d, 0x4c, 0xbb, 0x8d, 0x46, 0x8e, 0x64, 0x9c, 0xf5, + 0xf3, 0x01, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0x72, 0xf3, 0x5d, 0xda, 0xb1, 0xa6, + 0x8f, 0xe8, 0x3a, 0x00, 0xc6, 0x23, 0x1a, 0x10, 0x89, 0x5d, 0x40, 0x16, 0x16, 0xc8, 0xca, 0x03, 0x59, 0x18, 0x20, + 0x2b, 0xd4, 0x9b, 0x43, 0xb8, 0x20, 0x85, 0xd2, 0x2d, 0x8a, 0x5e, 0x0f, 0x6c, 0xe9, 0x9c, 0x26, 0x30, 0x37, 0xb1, + 0x15, 0xdc, 0x72, 0x80, 0x03, 0x85, 0xf3, 0xc3, 0x53, 0x64, 0x19, 0x45, 0x26, 0xc6, 0x2b, 0xbe, 0x35, 0x7f, 0x92, + 0x5b, 0x7c, 0x67, 0x7f, 0xdc, 0x05, 0xca, 0xa4, 0xe7, 0x35, 0x6d, 0x03, 0x77, 0x11, 0xd1, 0xa2, 0x24, 0x02, 0xb4, + 0x76, 0xe1, 0xfd, 0x44, 0xfd, 0xc5, 0x33, 0x65, 0x03, 0x31, 0x88, 0x06, 0x51, 0x58, 0x04, 0xa4, 0xf3, 0xcf, 0x3f, + 0x23, 0xd4, 0x13, 0x10, 0x47, 0xc7, 0x9d, 0x6c, 0xcd, 0x36, 0x6a, 0x44, 0x49, 0x94, 0xc6, 0x3e, 0x4c, 0x03, 0xec, + 0x8c, 0x28, 0x0a, 0x5e, 0x3b, 0x29, 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x33, 0xa8, 0x2a, 0xf0, 0xc4, 0xe5, 0x72, 0x33, + 0xcc, 0x8f, 0x81, 0xaa, 0x30, 0x31, 0x56, 0x90, 0x7d, 0x02, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0xfa, 0x62, 0x10, 0xbc, + 0xe9, 0x55, 0x5d, 0x87, 0xeb, 0x70, 0xe1, 0x62, 0x0a, 0x71, 0xd6, 0x57, 0x2b, 0xfb, 0x97, 0x7c, 0x30, 0xd2, 0x0c, + 0x3c, 0xce, 0x16, 0x9c, 0xb1, 0x62, 0xb7, 0x2c, 0x96, 0x68, 0xf9, 0x3b, 0x98, 0xed, 0xb9, 0xa8, 0x79, 0xdc, 0x4d, + 0xb5, 0xed, 0xa1, 0x3e, 0x37, 0x1a, 0x85, 0x20, 0x66, 0x6d, 0x75, 0xa4, 0xe1, 0xb9, 0x0e, 0xf3, 0x6a, 0xb1, 0x67, + 0x33, 0x55, 0x86, 0x10, 0x85, 0x23, 0x25, 0x01, 0xbb, 0x6d, 0x43, 0x27, 0xe1, 0x47, 0x9d, 0x4a, 0x3a, 0x16, 0x12, + 0xa0, 0xc0, 0x91, 0xb9, 0x9c, 0x37, 0x21, 0xe2, 0x19, 0xda, 0x41, 0xe4, 0x02, 0x13, 0x9a, 0xba, 0x6c, 0xe9, 0x62, + 0x39, 0x45, 0x33, 0xb9, 0x50, 0x6c, 0x31, 0x87, 0xf3, 0xbd, 0x4c, 0xcb, 0x72, 0x9e, 0x7d, 0xae, 0xa7, 0x80, 0xfd, + 0xe5, 0xad, 0x9e, 0x31, 0xb1, 0x88, 0xdc, 0x3c, 0xbf, 0x5a, 0x71, 0xff, 0xcd, 0x0b, 0xfc, 0x88, 0x74, 0x0e, 0xbf, + 0xe2, 0x8f, 0x94, 0x3c, 0x6a, 0x7c, 0xc5, 0x13, 0x4e, 0x2c, 0x6f, 0x90, 0xbc, 0x79, 0x7d, 0xf5, 0xe2, 0xdd, 0x8b, + 0xf7, 0x4f, 0xaf, 0x5f, 0xbc, 0x7a, 0xf6, 0xe2, 0xd5, 0x8b, 0x77, 0x1f, 0xf1, 0x3f, 0x94, 0x7c, 0x3d, 0x6a, 0x9f, + 0xb7, 0xf0, 0x07, 0xf2, 0xf5, 0xa8, 0x83, 0x6f, 0x35, 0xf9, 0x7a, 0x74, 0x82, 0x73, 0x45, 0xbe, 0x1e, 0x76, 0x8e, + 0x8e, 0xf1, 0x42, 0xdb, 0x26, 0x73, 0x39, 0x69, 0xb7, 0xf0, 0x3f, 0xee, 0x0b, 0xc4, 0xfb, 0x6a, 0x16, 0x13, 0xb6, + 0x61, 0xfc, 0x60, 0xca, 0xd0, 0xa1, 0x32, 0x86, 0x28, 0x17, 0x01, 0x3a, 0x4d, 0x55, 0x88, 0x4e, 0x36, 0x88, 0x31, + 0xd8, 0x30, 0x02, 0x5a, 0x71, 0xe2, 0xda, 0xe1, 0x47, 0x6d, 0x76, 0x0c, 0xf4, 0x89, 0x97, 0xc2, 0x71, 0xa9, 0xc2, + 0x69, 0x3b, 0x2d, 0xc6, 0x38, 0x97, 0xb2, 0x88, 0x17, 0xc0, 0x08, 0x18, 0xad, 0x05, 0x3f, 0x2a, 0xa3, 0x25, 0x89, + 0x0b, 0xd2, 0xee, 0xb5, 0x53, 0x71, 0x41, 0x3a, 0xbd, 0x0e, 0xfc, 0x39, 0xed, 0x9d, 0xa6, 0xed, 0x16, 0x3a, 0x0c, + 0xc6, 0xf1, 0x47, 0x0d, 0xad, 0xfb, 0x03, 0xec, 0xba, 0x50, 0xff, 0x14, 0xda, 0xab, 0xf4, 0x84, 0x53, 0xc7, 0xb6, + 0xbb, 0xe2, 0x82, 0x19, 0x3d, 0x2c, 0xff, 0x01, 0x50, 0xdb, 0x38, 0x74, 0x94, 0x1b, 0xc7, 0xfd, 0xe2, 0x47, 0x02, + 0xd5, 0x42, 0xb2, 0xc4, 0x6c, 0xd5, 0x42, 0xc0, 0x34, 0x9a, 0x6c, 0x30, 0x07, 0x4a, 0x94, 0x2c, 0xb4, 0x0f, 0x2b, + 0xaf, 0x9a, 0x12, 0x25, 0x73, 0x39, 0x8f, 0x6b, 0xaa, 0x86, 0x5f, 0x03, 0x33, 0xc7, 0x7d, 0xae, 0x5e, 0xd1, 0x57, + 0x71, 0x8d, 0xe7, 0x09, 0x59, 0xbb, 0x70, 0x5b, 0xfc, 0xe2, 0xac, 0x28, 0x6a, 0xe0, 0x2a, 0x01, 0xeb, 0x47, 0xd5, + 0xd4, 0x17, 0xf0, 0x7e, 0x1e, 0x6b, 0xe8, 0x4b, 0x12, 0x50, 0xcf, 0x9f, 0x4a, 0x33, 0xae, 0x52, 0x19, 0xed, 0x15, + 0xd1, 0xc6, 0x2c, 0xc8, 0x2b, 0xa2, 0x2f, 0x94, 0x01, 0x82, 0x24, 0xbc, 0x2f, 0x06, 0x70, 0xe0, 0xdb, 0x01, 0x4a, + 0x43, 0xe7, 0x40, 0xad, 0x54, 0x99, 0x09, 0x99, 0x4f, 0x13, 0x1c, 0x00, 0x34, 0x4f, 0x95, 0x0a, 0xca, 0x7c, 0x62, + 0x89, 0x82, 0xa1, 0xff, 0x16, 0x6e, 0x80, 0xc3, 0xd8, 0xa0, 0x62, 0x90, 0x7d, 0x4f, 0xd4, 0xf3, 0xdb, 0xe7, 0xad, + 0xa3, 0xaf, 0x41, 0xfe, 0x48, 0x79, 0x7b, 0x8f, 0xbf, 0x03, 0x4a, 0x6e, 0xc3, 0x59, 0xb5, 0xb1, 0x8f, 0x44, 0xd6, + 0x0d, 0x01, 0x72, 0xa8, 0xd1, 0x91, 0x79, 0x4a, 0xb0, 0x8b, 0xf4, 0x21, 0x69, 0xb7, 0x20, 0x7c, 0xd8, 0x0e, 0xca, + 0xf7, 0xd3, 0x06, 0x4c, 0x75, 0x72, 0xdb, 0x04, 0x5a, 0x0d, 0xaf, 0x0b, 0xdd, 0x35, 0x79, 0x72, 0x87, 0x55, 0x80, + 0x33, 0xec, 0x90, 0x35, 0xc4, 0xa1, 0x40, 0x2e, 0xec, 0xaa, 0xdd, 0x00, 0x9a, 0x8a, 0x8e, 0x7d, 0xe5, 0xce, 0x1b, + 0x47, 0x5d, 0x34, 0x93, 0xd3, 0xc3, 0xaf, 0x07, 0x07, 0xb1, 0x6c, 0x90, 0x47, 0x08, 0x2f, 0x29, 0x58, 0x31, 0x83, + 0xd7, 0x17, 0xb7, 0x4c, 0x7c, 0xaa, 0x02, 0xea, 0xb8, 0x50, 0xb5, 0x63, 0xad, 0xea, 0xac, 0xdc, 0x0d, 0x7e, 0x4c, + 0x1d, 0xd4, 0x08, 0xd2, 0xec, 0xe8, 0x3a, 0x35, 0x28, 0xd7, 0x5c, 0xb4, 0x60, 0x5b, 0x36, 0x3e, 0x52, 0xf4, 0xc3, + 0xa3, 0xe6, 0xd7, 0x60, 0xc2, 0x35, 0xd3, 0xa4, 0x47, 0x8d, 0x47, 0xe8, 0x87, 0x47, 0x81, 0x93, 0x1d, 0xaf, 0xd8, + 0x13, 0xcf, 0x8d, 0xfc, 0x64, 0xb9, 0xd2, 0x9f, 0x40, 0xb2, 0x2f, 0xc8, 0x4f, 0x80, 0xe5, 0x94, 0xfc, 0x14, 0xcb, + 0x26, 0x04, 0x1f, 0x24, 0x3f, 0xc5, 0x05, 0xfc, 0xc8, 0xc9, 0x4f, 0x31, 0x60, 0x3b, 0x9e, 0x9a, 0x1f, 0x45, 0x09, + 0x0c, 0x70, 0xec, 0x92, 0xd6, 0xbf, 0xab, 0x58, 0xad, 0xc4, 0xc1, 0x81, 0xb4, 0xbf, 0xe8, 0x65, 0x76, 0x70, 0x90, + 0x5f, 0x4c, 0xab, 0xbe, 0x99, 0xde, 0x45, 0x5f, 0x0c, 0x42, 0xe1, 0xc0, 0x34, 0x8d, 0x87, 0x33, 0xfe, 0x14, 0x52, + 0x56, 0xd3, 0x40, 0xf3, 0xb8, 0x73, 0xff, 0xec, 0x1c, 0xc3, 0xbf, 0xf7, 0x83, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, + 0xb3, 0xe6, 0x59, 0x85, 0x6c, 0x97, 0x01, 0x3e, 0x63, 0x86, 0x9a, 0xe2, 0xe0, 0x80, 0x5f, 0x04, 0xb8, 0x8c, 0x19, + 0x6a, 0x04, 0x16, 0x7b, 0x0f, 0x4b, 0x7b, 0x32, 0xc3, 0x35, 0xc1, 0xb3, 0xb2, 0xbc, 0x5f, 0x0c, 0x2e, 0xb4, 0xa3, + 0x26, 0x61, 0xf0, 0x69, 0x45, 0x5a, 0x6e, 0x93, 0x75, 0x45, 0x53, 0x5d, 0xb6, 0xbb, 0x48, 0x12, 0xd5, 0x10, 0x97, + 0x97, 0x6d, 0x0c, 0x2a, 0xf9, 0x9e, 0x22, 0x32, 0x15, 0xc4, 0x3b, 0xc8, 0x2d, 0x73, 0x99, 0x2a, 0x3c, 0xe5, 0xa9, + 0xf0, 0x72, 0xf6, 0x6b, 0x6f, 0x3d, 0x6d, 0x5c, 0x16, 0x4d, 0xcf, 0x0c, 0x8b, 0x9e, 0x2a, 0x5d, 0xed, 0x60, 0x93, + 0xaa, 0x01, 0xbc, 0xda, 0x57, 0x62, 0x1e, 0xb3, 0xfe, 0x65, 0x0c, 0xa2, 0x22, 0xab, 0x46, 0x1b, 0x32, 0xe1, 0x73, + 0x9d, 0x2a, 0x18, 0xa8, 0x29, 0x7c, 0x01, 0x64, 0x2a, 0xab, 0x0c, 0xb3, 0x7d, 0xc3, 0x50, 0x40, 0x40, 0x81, 0x4b, + 0xc2, 0x02, 0x09, 0x1e, 0x6e, 0x3f, 0x02, 0xc2, 0x51, 0x27, 0x17, 0x76, 0x72, 0x17, 0x0a, 0xba, 0x13, 0x83, 0x0b, + 0xdd, 0x45, 0xa2, 0xd1, 0x70, 0xdc, 0xf6, 0xa5, 0x30, 0x83, 0x68, 0xb6, 0x07, 0x97, 0xac, 0x8b, 0x54, 0xb3, 0x59, + 0x1a, 0x40, 0x5e, 0xb6, 0x56, 0x2b, 0x75, 0xe1, 0x1b, 0xe9, 0xf9, 0x73, 0xdc, 0xf0, 0x5d, 0x5e, 0xf0, 0xfc, 0x4d, + 0x92, 0x7e, 0x04, 0x54, 0x15, 0xf8, 0x6c, 0x39, 0x8f, 0x70, 0x64, 0x1e, 0x74, 0x83, 0xbf, 0xe6, 0x21, 0xae, 0x08, + 0x47, 0xee, 0x8d, 0xb7, 0x68, 0x50, 0x0d, 0x96, 0x67, 0x65, 0x78, 0x72, 0x9e, 0x5c, 0x03, 0xe3, 0xa0, 0xff, 0x56, + 0x68, 0x59, 0xfd, 0x4e, 0x72, 0x17, 0xa8, 0x43, 0xf9, 0x67, 0xc7, 0xdc, 0xa8, 0xd6, 0xbb, 0x5d, 0x23, 0x39, 0x8e, + 0x7c, 0x55, 0x08, 0xdf, 0xff, 0x9d, 0x77, 0x0f, 0xdb, 0xee, 0xb9, 0xed, 0x65, 0xd9, 0x03, 0x70, 0xde, 0xeb, 0x35, + 0xc2, 0xbf, 0xc9, 0x9d, 0x6f, 0xef, 0x46, 0xd7, 0x52, 0x3c, 0xa1, 0x9a, 0x46, 0x8d, 0x37, 0xc6, 0xf0, 0xcd, 0xca, + 0x59, 0xdd, 0x6f, 0x8d, 0x83, 0xfd, 0x5b, 0xdd, 0x43, 0xe8, 0x84, 0xda, 0x33, 0x41, 0x56, 0xf6, 0x35, 0x01, 0x33, + 0x64, 0x60, 0xfa, 0xb6, 0x03, 0x1e, 0x7e, 0x8c, 0x14, 0x1c, 0x7a, 0x2d, 0x9f, 0x44, 0x21, 0x26, 0x69, 0xcd, 0x8d, + 0x18, 0x52, 0x6c, 0x1f, 0xc6, 0xe5, 0x74, 0x8d, 0x42, 0xae, 0x7b, 0xac, 0xea, 0xc4, 0xb4, 0xea, 0xc6, 0x48, 0x1d, + 0x6c, 0x93, 0x05, 0x67, 0x55, 0xef, 0x46, 0x42, 0xa9, 0x5e, 0x54, 0x33, 0xaf, 0x62, 0x36, 0xdb, 0xe6, 0x99, 0x61, + 0xfb, 0xee, 0x9a, 0x02, 0x43, 0xde, 0xfd, 0x32, 0x5c, 0xd4, 0x25, 0x1c, 0xbb, 0x71, 0x00, 0x59, 0x49, 0x2e, 0x97, + 0xee, 0x4d, 0x34, 0xde, 0x97, 0x83, 0x75, 0xf9, 0x42, 0x5a, 0x80, 0x07, 0xd5, 0x48, 0x45, 0x16, 0x72, 0x06, 0xfe, + 0x79, 0xc1, 0x9a, 0x7e, 0x88, 0x7f, 0x85, 0x03, 0xbe, 0x42, 0xd2, 0xd4, 0xaa, 0x9f, 0xe0, 0xe5, 0x22, 0x50, 0x78, + 0xdb, 0xba, 0x9f, 0x64, 0xe8, 0x22, 0x5a, 0xd7, 0xa9, 0x58, 0x2f, 0xcc, 0xba, 0x62, 0xa5, 0x2c, 0x1c, 0x1c, 0x77, + 0x31, 0x5a, 0xa7, 0xce, 0x63, 0xd3, 0x3d, 0x77, 0xf4, 0x50, 0xf0, 0x99, 0x71, 0xa4, 0x7b, 0x56, 0x40, 0xfc, 0xaa, + 0x50, 0x9f, 0xf6, 0xb3, 0x0c, 0xdf, 0xf3, 0xed, 0xc3, 0x3d, 0x61, 0xc9, 0x73, 0x96, 0x6f, 0x50, 0xc3, 0x02, 0x29, + 0xa0, 0x50, 0x0a, 0x8b, 0xd5, 0x2a, 0x16, 0x26, 0xaa, 0x81, 0x0b, 0x6a, 0xeb, 0x5e, 0xaf, 0x30, 0xfa, 0x3b, 0xa8, + 0x8b, 0xbd, 0x7a, 0xc4, 0x98, 0xb0, 0xa2, 0xf0, 0xd2, 0x49, 0x65, 0x41, 0x5f, 0xbb, 0xfa, 0x10, 0xd5, 0x94, 0x7b, + 0xb1, 0xd1, 0xf7, 0xbe, 0xe3, 0x33, 0x26, 0x17, 0xf0, 0x6c, 0x10, 0x66, 0x44, 0x31, 0xed, 0xbf, 0x81, 0x82, 0xc0, + 0xdb, 0x33, 0x3c, 0xc4, 0x47, 0xe0, 0xab, 0x3c, 0xad, 0x93, 0x99, 0x7f, 0x8c, 0x22, 0x32, 0xc1, 0x22, 0xa3, 0x5e, + 0x04, 0x5e, 0x43, 0x20, 0x42, 0x11, 0x12, 0x31, 0x31, 0x8a, 0x7a, 0x91, 0x71, 0x52, 0x8a, 0xc0, 0x6a, 0x0c, 0x94, + 0xdc, 0x11, 0x9e, 0xab, 0x8a, 0x88, 0x85, 0x35, 0x75, 0x50, 0x89, 0xa5, 0xc6, 0x4c, 0xfb, 0xa8, 0x53, 0x81, 0xb0, + 0xc8, 0x36, 0x05, 0x65, 0xbd, 0xa1, 0x2e, 0xc0, 0x92, 0x18, 0xd3, 0x5b, 0x9e, 0x5c, 0x03, 0x37, 0xc7, 0x46, 0xae, + 0xe8, 0x92, 0x5f, 0x81, 0x7a, 0x3a, 0x2d, 0xf0, 0xb5, 0x61, 0xd8, 0x46, 0x29, 0x5d, 0x13, 0x8e, 0x33, 0x52, 0x24, + 0xf4, 0x16, 0xa2, 0x3a, 0xcc, 0xb8, 0x48, 0x73, 0x3c, 0xa3, 0xb7, 0xe9, 0x14, 0xcf, 0xb8, 0x78, 0x62, 0x97, 0x3d, + 0x1d, 0x41, 0x92, 0xff, 0x58, 0xac, 0x89, 0x79, 0x94, 0xea, 0x77, 0xc5, 0x8a, 0x47, 0xc0, 0xab, 0xa8, 0x18, 0x75, + 0x47, 0xc6, 0xa6, 0x9c, 0xe9, 0xca, 0x78, 0xfd, 0xb5, 0x8e, 0x29, 0xce, 0x70, 0x8e, 0x92, 0x5c, 0x62, 0xd6, 0x13, + 0xe9, 0x6b, 0x88, 0xe8, 0x9c, 0x61, 0xfb, 0xa0, 0x15, 0xbf, 0x65, 0xf9, 0x33, 0x59, 0xbc, 0x37, 0x5b, 0x3e, 0x47, + 0x50, 0x08, 0x5c, 0x54, 0x44, 0x13, 0x6e, 0xf7, 0x16, 0x3d, 0x59, 0x35, 0x45, 0x6f, 0x6d, 0x53, 0x6e, 0x88, 0x53, + 0x08, 0x85, 0x9b, 0x4c, 0x79, 0xa3, 0x8d, 0x59, 0xaf, 0xf5, 0x9d, 0x46, 0xa7, 0xa8, 0x2c, 0x89, 0x30, 0xac, 0x55, + 0x53, 0xa5, 0x92, 0x88, 0xa6, 0x72, 0x12, 0xde, 0xd2, 0x00, 0x3b, 0x55, 0x38, 0x93, 0x0b, 0xa1, 0x53, 0x19, 0xe0, + 0x0d, 0xad, 0x36, 0xd7, 0xf2, 0xd6, 0x42, 0x4c, 0xe3, 0x3b, 0xfb, 0x83, 0xe1, 0x6b, 0xa3, 0xe2, 0x7f, 0x0b, 0x86, + 0x3d, 0x2a, 0x15, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x59, 0x7e, 0xf2, 0x16, 0xc0, 0x67, 0x59, 0xc8, 0x3b, 0x48, + 0x65, 0x26, 0xf5, 0x0e, 0x52, 0x19, 0xa4, 0x1a, 0x5f, 0xee, 0x7d, 0x51, 0x29, 0x8b, 0xc2, 0x06, 0x89, 0xc2, 0xa5, + 0x3a, 0x58, 0x12, 0x91, 0x40, 0xbb, 0x46, 0x94, 0x9b, 0x71, 0x01, 0x41, 0xfd, 0xa0, 0x71, 0xfb, 0x4d, 0x6f, 0xe1, + 0xfb, 0xce, 0xe6, 0x33, 0x9f, 0x7f, 0x67, 0xf3, 0x4d, 0x47, 0x1e, 0xe3, 0xeb, 0xb7, 0x9d, 0xc6, 0x32, 0x5e, 0x3a, + 0xac, 0xfd, 0x50, 0x3e, 0xa1, 0xd2, 0x32, 0x4f, 0x55, 0x93, 0x36, 0x9e, 0x04, 0x48, 0xd9, 0xac, 0x78, 0xb8, 0x0e, + 0x6e, 0xb7, 0x0e, 0x63, 0xde, 0x24, 0x6d, 0x84, 0x0e, 0x9d, 0x70, 0x25, 0x62, 0x23, 0x39, 0x1d, 0x3e, 0x3a, 0x82, + 0xbb, 0x97, 0x99, 0xda, 0xf0, 0x95, 0xb2, 0xd5, 0x9a, 0xed, 0xd6, 0x21, 0xdf, 0x59, 0xa5, 0xd1, 0xc6, 0x33, 0x46, + 0x96, 0xe0, 0x5c, 0x46, 0x0b, 0xab, 0x6a, 0x00, 0x27, 0xce, 0x17, 0xe2, 0xb7, 0x05, 0x1d, 0x99, 0xef, 0x43, 0x9b, + 0xf2, 0x7a, 0xa1, 0x7d, 0x52, 0x93, 0xc3, 0x20, 0x3a, 0xc8, 0x95, 0x0c, 0x72, 0x62, 0x7e, 0x44, 0x92, 0x53, 0x74, + 0xd1, 0xee, 0x25, 0xa7, 0x87, 0xfc, 0x90, 0xa7, 0xc0, 0xc3, 0xc6, 0x4d, 0x5f, 0xa1, 0xd9, 0xf6, 0x75, 0x1e, 0x2f, + 0x86, 0x3c, 0x73, 0xcd, 0x57, 0x1d, 0x94, 0xa9, 0x76, 0x8e, 0x90, 0x05, 0x28, 0xe6, 0x7b, 0x09, 0xb2, 0xeb, 0xdd, + 0x1c, 0xf2, 0x14, 0xfa, 0x81, 0x5a, 0x1d, 0x5b, 0xab, 0x1c, 0xdc, 0x6f, 0x0b, 0x40, 0x30, 0xdf, 0x51, 0x6d, 0x2e, + 0x36, 0xbd, 0x19, 0x57, 0x9d, 0x1d, 0xf2, 0x6a, 0x84, 0x61, 0x99, 0xed, 0xfe, 0xfc, 0xd4, 0xaa, 0x2e, 0x0f, 0x03, + 0x88, 0xfc, 0xb6, 0xe0, 0x22, 0xec, 0x34, 0xec, 0xd6, 0xe5, 0x84, 0x9d, 0xd6, 0x67, 0x19, 0x14, 0xd9, 0xee, 0x75, + 0x6b, 0xa6, 0xf5, 0xd9, 0x5e, 0x81, 0x8f, 0x20, 0x4c, 0xca, 0xac, 0x74, 0x06, 0x57, 0xe8, 0x87, 0x1f, 0x90, 0x6b, + 0xfd, 0xf5, 0x42, 0xfb, 0xfc, 0x12, 0x11, 0x20, 0xbb, 0xea, 0xba, 0xac, 0x0e, 0x7d, 0x94, 0x4d, 0x7c, 0x3d, 0xe4, + 0xc1, 0xca, 0x3d, 0xbd, 0x9d, 0xcb, 0xd4, 0xe3, 0x6b, 0xaf, 0x95, 0x6e, 0x21, 0x27, 0x10, 0x0f, 0xd7, 0x5d, 0x58, + 0x16, 0xe4, 0xec, 0xe6, 0x16, 0x4a, 0x86, 0x13, 0xf7, 0xa5, 0x3f, 0x30, 0x7b, 0xdd, 0xc0, 0x2f, 0x92, 0x53, 0x98, + 0xfa, 0x66, 0x0f, 0x87, 0x1d, 0xe8, 0xc3, 0xc0, 0x61, 0xb3, 0x41, 0x9f, 0x59, 0x41, 0xe4, 0x31, 0x2f, 0x2c, 0x9e, + 0x5d, 0x92, 0x76, 0x8f, 0xa7, 0x6e, 0x33, 0x19, 0xd1, 0xa8, 0xdd, 0xe4, 0xc1, 0xcc, 0x00, 0xbf, 0x5c, 0xd9, 0xb0, + 0x88, 0x5f, 0xa7, 0x00, 0x4a, 0xbe, 0x58, 0xb5, 0x3e, 0x15, 0xbc, 0xea, 0x0d, 0xa7, 0x9b, 0xe9, 0x7e, 0xdd, 0xe0, + 0x76, 0xd7, 0xc3, 0x13, 0x9e, 0x40, 0xb1, 0x68, 0xed, 0x27, 0x3e, 0x01, 0x0e, 0x28, 0x69, 0xdd, 0x3f, 0x05, 0x17, + 0xca, 0x12, 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x2c, 0x1c, 0x6d, 0xc9, 0x80, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, + 0xd8, 0xc1, 0x49, 0xbb, 0xdd, 0x39, 0xc5, 0xc9, 0xc9, 0x29, 0x0c, 0xb4, 0x91, 0x9c, 0x1e, 0xce, 0x94, 0x05, 0x60, + 0x90, 0xb3, 0x76, 0xed, 0x3e, 0x82, 0x70, 0x49, 0xa1, 0x78, 0xcd, 0x0f, 0xe3, 0xb8, 0x9d, 0xdc, 0x6f, 0xb5, 0x4f, + 0xcf, 0x1b, 0x00, 0xa0, 0xa6, 0xfb, 0x70, 0x35, 0x5e, 0x2f, 0x74, 0xbd, 0x4a, 0x89, 0xf0, 0xf5, 0x6a, 0x0d, 0x5f, + 0xad, 0xd1, 0x5e, 0x57, 0x53, 0xf0, 0x55, 0x9d, 0x70, 0x6e, 0x8b, 0x78, 0xa5, 0x4d, 0xb8, 0x2d, 0x62, 0x3b, 0x90, + 0x18, 0xa4, 0xf3, 0xe4, 0xb4, 0x73, 0x8a, 0xec, 0x58, 0xb4, 0xc3, 0x8f, 0x72, 0x9f, 0x6c, 0x15, 0x69, 0x68, 0x40, + 0x92, 0x72, 0x76, 0x72, 0x01, 0x12, 0x35, 0x27, 0x97, 0xed, 0xe6, 0x8c, 0x25, 0x7e, 0x02, 0x26, 0x15, 0x96, 0xb3, + 0x5c, 0x05, 0x97, 0x14, 0x00, 0xe2, 0x02, 0x8c, 0x8b, 0xee, 0x9f, 0xf6, 0xee, 0x27, 0xa7, 0x67, 0x1d, 0x4b, 0xf4, + 0xf8, 0x45, 0xa7, 0x96, 0x66, 0xa6, 0x9e, 0x9c, 0x9a, 0x34, 0xe8, 0x3a, 0xb9, 0x7f, 0x0a, 0x65, 0x5c, 0x4a, 0x58, + 0x0a, 0xc2, 0x3c, 0x54, 0xc5, 0x20, 0xb6, 0x43, 0x5a, 0xcb, 0x3d, 0xab, 0x65, 0x9f, 0x9f, 0x1c, 0xdf, 0x3f, 0x0d, + 0xa1, 0x56, 0xce, 0xc2, 0x2c, 0xb4, 0x9b, 0x88, 0x9f, 0x1d, 0x2c, 0x2d, 0x3a, 0x4c, 0x4e, 0xd3, 0xad, 0x09, 0xda, + 0x4d, 0x73, 0x68, 0x70, 0x20, 0x50, 0x38, 0x3e, 0x15, 0x4e, 0x5f, 0x12, 0xdc, 0x8f, 0x55, 0x86, 0x26, 0xa1, 0xc2, + 0xd9, 0xdf, 0x53, 0x06, 0x2f, 0x39, 0x86, 0x57, 0x95, 0x8f, 0xa9, 0xf8, 0x42, 0xd5, 0x1b, 0x0a, 0xb1, 0x2b, 0xc4, + 0x20, 0x72, 0x91, 0xb5, 0xeb, 0xb9, 0x3f, 0x81, 0x8b, 0x30, 0x13, 0x70, 0xa1, 0xe9, 0x95, 0xa0, 0x15, 0x2f, 0x30, + 0x0c, 0x1d, 0x6a, 0xcd, 0xb0, 0x7a, 0x3c, 0x75, 0x26, 0x05, 0xa1, 0x6e, 0xeb, 0x39, 0xff, 0x5e, 0xb9, 0xa4, 0xbc, + 0xca, 0x4e, 0x4e, 0x51, 0xe2, 0x2e, 0xcb, 0x93, 0x36, 0x4a, 0x02, 0x13, 0x12, 0x77, 0x24, 0x67, 0x19, 0xe9, 0x47, + 0xb7, 0x11, 0x8e, 0xee, 0x22, 0x1c, 0x59, 0x1f, 0xe6, 0x0f, 0xe0, 0x3c, 0x1f, 0xe1, 0xc8, 0xba, 0x32, 0x47, 0x38, + 0xd2, 0x4c, 0x40, 0x48, 0xab, 0x68, 0x80, 0x73, 0x28, 0x6d, 0x3c, 0xab, 0xcb, 0xd2, 0x8f, 0xfd, 0x57, 0xe9, 0x7a, + 0x6d, 0x53, 0x02, 0x29, 0x73, 0x6a, 0x76, 0xa8, 0x7d, 0x92, 0x39, 0xa2, 0x9e, 0x59, 0x8f, 0x30, 0x08, 0x20, 0xf4, + 0xce, 0x3f, 0xe9, 0x56, 0x45, 0xc3, 0x60, 0xc7, 0xb0, 0xd2, 0xe0, 0x67, 0x1e, 0x85, 0x67, 0x58, 0x84, 0xc7, 0xc2, + 0x17, 0x06, 0xb1, 0xc2, 0xff, 0xce, 0xa5, 0x9c, 0xfb, 0xdf, 0x5a, 0x96, 0xbf, 0xe0, 0x21, 0x10, 0x67, 0xd1, 0x02, + 0x96, 0x5b, 0x36, 0xf8, 0xce, 0x90, 0xd5, 0x47, 0x70, 0x3d, 0x76, 0x01, 0xd2, 0x40, 0x22, 0xbc, 0x36, 0x02, 0x95, + 0x97, 0x0f, 0xaf, 0x6d, 0xb0, 0x1e, 0xf3, 0x09, 0xd1, 0xba, 0x20, 0x20, 0xaf, 0x84, 0x0b, 0x8d, 0x49, 0xc1, 0x94, + 0x8a, 0x6c, 0x14, 0xbb, 0x48, 0x0a, 0xff, 0x2c, 0xa1, 0x4f, 0x19, 0x8b, 0xc8, 0x74, 0x58, 0x9f, 0xad, 0x15, 0x87, + 0x73, 0x59, 0xa8, 0xd4, 0xbe, 0x51, 0xe2, 0xc1, 0x58, 0x3d, 0x55, 0x9f, 0xe6, 0xd9, 0x1a, 0xdb, 0x3b, 0xec, 0xb2, + 0x90, 0xbb, 0xd2, 0x0e, 0x4b, 0x65, 0xd9, 0xfa, 0x5b, 0x13, 0x52, 0xb5, 0x19, 0x05, 0x13, 0xad, 0x06, 0x54, 0x85, + 0xb2, 0x80, 0xc2, 0x36, 0x1c, 0x4a, 0xba, 0x2c, 0x4b, 0xa6, 0xcb, 0x72, 0x19, 0x4e, 0x5a, 0xad, 0xf5, 0x1a, 0x17, + 0xcc, 0x84, 0x65, 0xd9, 0x59, 0x02, 0xf2, 0xd5, 0x54, 0xde, 0x04, 0xb9, 0x2a, 0x2d, 0x67, 0x69, 0x96, 0x28, 0x0a, + 0x8c, 0x60, 0xa3, 0x35, 0xfe, 0xc2, 0x15, 0x07, 0x78, 0xba, 0xd9, 0x0d, 0xa5, 0xcc, 0x19, 0x85, 0xe8, 0x5d, 0x41, + 0x93, 0x6b, 0x3c, 0xe5, 0x23, 0xb6, 0xbb, 0x4d, 0x30, 0x63, 0xfe, 0xf7, 0x5a, 0xf4, 0x08, 0x64, 0xd9, 0x3d, 0x83, + 0x3a, 0xb0, 0x88, 0x2b, 0xe8, 0x20, 0x94, 0xc1, 0x47, 0x21, 0x6e, 0xe6, 0xf4, 0x4e, 0x2e, 0x34, 0xc0, 0x65, 0xa1, + 0xe5, 0x1b, 0x17, 0xeb, 0x60, 0xbf, 0x85, 0x7d, 0xd8, 0x83, 0x25, 0x84, 0x0c, 0x68, 0x61, 0x1b, 0x23, 0xa2, 0x85, + 0x87, 0x52, 0x6b, 0x39, 0x4b, 0x5b, 0xd8, 0x04, 0x6c, 0x68, 0xad, 0xcb, 0xa8, 0x5a, 0xd7, 0xe5, 0x63, 0x8e, 0xd5, + 0x26, 0x58, 0x38, 0xe9, 0x50, 0x13, 0x1d, 0xdc, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbd, 0x7e, 0xe5, 0x62, 0x26, + 0xf3, 0x31, 0xb8, 0x6c, 0x3a, 0xd5, 0xd8, 0xb5, 0x79, 0x05, 0x29, 0xae, 0x14, 0xa5, 0x56, 0x38, 0x85, 0x96, 0x5f, + 0x08, 0x9d, 0x27, 0xf6, 0xf2, 0xe2, 0x99, 0x2c, 0x66, 0xd4, 0xde, 0x18, 0xe1, 0x6b, 0xe5, 0x9e, 0x3d, 0x37, 0x2f, + 0xab, 0x54, 0x93, 0x7c, 0xb7, 0x79, 0x15, 0xb1, 0xc8, 0x8c, 0xfc, 0x0a, 0xda, 0x00, 0x53, 0xb9, 0x7c, 0xb5, 0xb6, + 0x20, 0x2e, 0xf2, 0x7c, 0x40, 0x5e, 0xde, 0x5a, 0xea, 0x12, 0x45, 0x0d, 0x6e, 0xf0, 0x93, 0x15, 0x3c, 0x0b, 0xae, + 0x0b, 0x0d, 0x7b, 0xe4, 0xc4, 0x8b, 0xa8, 0x15, 0xd5, 0x5f, 0x7d, 0x35, 0xaa, 0x04, 0x1f, 0xb5, 0x34, 0xc9, 0x25, + 0x88, 0x1e, 0xe5, 0x03, 0x73, 0x1c, 0x44, 0x13, 0x7f, 0xf7, 0x7c, 0xd9, 0xf6, 0x74, 0x36, 0xaf, 0xd4, 0x89, 0xe5, + 0x95, 0x09, 0x78, 0x38, 0xda, 0x27, 0x5c, 0x10, 0x0e, 0x12, 0x59, 0xa9, 0x3d, 0xf4, 0xb9, 0xa8, 0x1b, 0xe7, 0x17, + 0x6d, 0xd6, 0x3c, 0x59, 0xad, 0xf2, 0xcb, 0x36, 0x6b, 0x9f, 0xda, 0x07, 0xdf, 0x22, 0x95, 0x01, 0xcd, 0xe5, 0x63, + 0x9e, 0x45, 0xa0, 0x9d, 0x1d, 0x67, 0x26, 0x9c, 0x82, 0x0f, 0x51, 0x4c, 0x16, 0xba, 0xea, 0x4b, 0x82, 0x71, 0x29, + 0xb1, 0x7a, 0xfc, 0x02, 0xf5, 0xda, 0xe9, 0xb6, 0xab, 0x74, 0xb3, 0x7d, 0x18, 0x5c, 0xb8, 0x14, 0x08, 0x77, 0x20, + 0xe4, 0x01, 0xe8, 0x77, 0x97, 0x02, 0x4c, 0x83, 0x00, 0x95, 0x15, 0x88, 0xb4, 0x7c, 0xb6, 0x98, 0x3d, 0x2b, 0xa8, + 0x59, 0x86, 0x27, 0x7c, 0xc2, 0xb5, 0x4a, 0x29, 0x48, 0xb7, 0xbb, 0xd2, 0xd7, 0xbb, 0x25, 0xa8, 0xac, 0x16, 0xf9, + 0x35, 0xd1, 0x3c, 0xfb, 0xac, 0xdc, 0xc2, 0x21, 0x6c, 0x56, 0x56, 0xe0, 0x0c, 0xad, 0x71, 0x2e, 0x27, 0xb4, 0xe0, + 0x7a, 0x3a, 0xfb, 0xb7, 0x56, 0x87, 0xf5, 0xf5, 0xc0, 0x5c, 0x58, 0x01, 0x48, 0xa8, 0x18, 0xad, 0x56, 0xfc, 0xe8, + 0xfb, 0xf7, 0x49, 0xde, 0x27, 0xbc, 0x8d, 0x3b, 0xf8, 0x18, 0x9f, 0xe2, 0x76, 0x0b, 0xb7, 0x4f, 0xe1, 0xea, 0x3e, + 0xcb, 0x17, 0x23, 0xa6, 0x62, 0x78, 0xf9, 0x4b, 0x5f, 0x26, 0xe7, 0x87, 0x65, 0xbc, 0x7b, 0x5d, 0x24, 0x0e, 0x5d, + 0x82, 0xb0, 0xeb, 0x2e, 0x5e, 0x5d, 0x14, 0x85, 0xc1, 0xd2, 0xc6, 0xa1, 0xea, 0xa4, 0xd4, 0x2f, 0x5c, 0x1e, 0xf7, + 0xc0, 0x9e, 0xdb, 0xae, 0x6c, 0x13, 0xcc, 0xbe, 0xed, 0xcf, 0xb4, 0xfa, 0xd9, 0xd4, 0x25, 0x62, 0x78, 0xe8, 0x55, + 0xe8, 0x81, 0x2e, 0x49, 0xfb, 0xe0, 0x00, 0xac, 0x8e, 0x82, 0xd9, 0x70, 0x1b, 0xfd, 0x80, 0x37, 0x6b, 0x69, 0x10, + 0xac, 0x00, 0x8c, 0x3b, 0xdf, 0x70, 0xb2, 0xb4, 0xb0, 0xd5, 0x40, 0x85, 0x75, 0x11, 0x46, 0x74, 0x0b, 0x49, 0x85, + 0x11, 0xa2, 0xe1, 0x08, 0x73, 0x91, 0x4e, 0xf6, 0x5b, 0x58, 0x8e, 0xc7, 0x8a, 0x69, 0x38, 0x3a, 0x0a, 0xf6, 0x85, + 0x15, 0xca, 0x9c, 0x22, 0x43, 0x36, 0xe1, 0xe2, 0xa1, 0xfe, 0xc4, 0x0a, 0x69, 0x3e, 0x8d, 0x06, 0x23, 0x8d, 0xcc, + 0x2a, 0x46, 0x38, 0xcb, 0xf9, 0x1c, 0xaa, 0x4e, 0x0a, 0x70, 0xfa, 0x81, 0xbf, 0x7c, 0x94, 0x86, 0x6d, 0x02, 0xf9, + 0xfa, 0x60, 0x83, 0xd9, 0xe0, 0x51, 0x41, 0x6f, 0x5e, 0x8b, 0xc7, 0xb0, 0xa3, 0x1e, 0x16, 0x8c, 0x42, 0x36, 0x24, + 0xbd, 0x83, 0xa6, 0xe0, 0x03, 0xda, 0x7c, 0x69, 0x00, 0x97, 0x9e, 0x9b, 0x0f, 0x5b, 0xd1, 0x47, 0x0d, 0x4c, 0xca, + 0xb6, 0x4c, 0xa6, 0x39, 0xa5, 0xab, 0x4c, 0x1b, 0x97, 0xa9, 0x9c, 0xc2, 0x1a, 0xbb, 0xa8, 0x27, 0xe1, 0x60, 0x46, + 0x54, 0x4d, 0xd3, 0xfe, 0xc0, 0xfc, 0x7d, 0x6d, 0x4b, 0xb6, 0xb0, 0x0b, 0xb5, 0xb3, 0xc6, 0xe6, 0xc9, 0xce, 0xa0, + 0x7c, 0x1b, 0xc3, 0x3d, 0x2c, 0xbc, 0x1b, 0x59, 0x23, 0x9f, 0x27, 0x9e, 0x6c, 0x9e, 0xac, 0xd7, 0x66, 0x20, 0x2a, + 0x05, 0x3d, 0xd0, 0x5b, 0xbf, 0x6d, 0x5a, 0xb0, 0x3d, 0xca, 0xaf, 0xd3, 0x16, 0x9e, 0x71, 0x78, 0x06, 0xd3, 0xb7, + 0x77, 0xa5, 0x0b, 0xf9, 0xd9, 0x81, 0xa4, 0x15, 0xa4, 0xd8, 0xe9, 0x04, 0x9d, 0x1d, 0xe3, 0x60, 0xe4, 0x40, 0xcf, + 0xaf, 0x3e, 0x5b, 0x58, 0xfb, 0xdf, 0x6f, 0xca, 0x82, 0x39, 0x1d, 0xb2, 0xbc, 0x9c, 0x50, 0xe6, 0xcf, 0xcf, 0x37, + 0x3c, 0xa9, 0x50, 0xc1, 0xbd, 0x1f, 0x05, 0x7b, 0xda, 0x86, 0x98, 0x9c, 0xd1, 0xbf, 0xed, 0x0f, 0x1b, 0x11, 0xa8, + 0xd4, 0xb2, 0x65, 0x85, 0x54, 0xea, 0xa1, 0x4d, 0xb3, 0x47, 0x0f, 0x1c, 0x91, 0x2f, 0xa1, 0x0b, 0xe0, 0xf5, 0x47, + 0x85, 0x9c, 0x1b, 0x44, 0x70, 0xbf, 0xdd, 0xb8, 0x8d, 0xaf, 0x00, 0x78, 0x3b, 0xec, 0x55, 0xff, 0xb4, 0x80, 0xfd, + 0x8d, 0xca, 0x92, 0x7e, 0xbc, 0x1d, 0x7b, 0xfc, 0x17, 0x12, 0xe2, 0x95, 0x5b, 0x3c, 0x4c, 0x1c, 0x3a, 0x95, 0xac, + 0x59, 0xf9, 0x73, 0xab, 0x24, 0x60, 0x58, 0xbd, 0x60, 0xc8, 0xc6, 0x6d, 0x15, 0xb7, 0x99, 0xff, 0x41, 0x05, 0x83, + 0x05, 0xdf, 0x1a, 0x49, 0xc5, 0xb2, 0xf8, 0xed, 0x53, 0xe7, 0xbf, 0xea, 0x1c, 0xd7, 0xbe, 0xae, 0xbd, 0x51, 0x39, + 0x34, 0xf1, 0x81, 0x23, 0x74, 0x70, 0xb0, 0x91, 0x41, 0xc7, 0x00, 0x78, 0xe4, 0xd8, 0x2f, 0xbf, 0x7c, 0x9e, 0x1d, + 0x33, 0x9a, 0xc7, 0x22, 0x0a, 0x99, 0x3b, 0xcf, 0xcd, 0xd9, 0x89, 0x3c, 0xa1, 0x6a, 0xea, 0x0b, 0x03, 0x1c, 0x1f, + 0x6d, 0xa5, 0x02, 0xbe, 0x47, 0xeb, 0x1d, 0x13, 0xd8, 0xe0, 0xb7, 0xec, 0xa4, 0x76, 0x15, 0xf4, 0x0b, 0xb4, 0xdc, + 0xc5, 0x54, 0x6e, 0x2c, 0x70, 0xb4, 0x39, 0x91, 0x9d, 0x43, 0xdf, 0xa8, 0x53, 0xb2, 0x1e, 0x4f, 0x76, 0x1b, 0x7d, + 0x49, 0xb1, 0x2b, 0xb9, 0xa2, 0x6d, 0x43, 0x56, 0xbd, 0x53, 0xab, 0x2b, 0x53, 0xa7, 0xea, 0x9a, 0xb7, 0xb2, 0xb4, + 0x29, 0xed, 0x92, 0xec, 0xdd, 0x16, 0x0b, 0xaf, 0xc2, 0x1b, 0x8d, 0xf2, 0x22, 0x14, 0xec, 0xb1, 0xc4, 0xa0, 0xcb, + 0x09, 0x5c, 0x2f, 0xac, 0x56, 0x31, 0xfc, 0xd9, 0x35, 0x86, 0x5d, 0xa6, 0x4b, 0x1f, 0xf8, 0x06, 0xbf, 0x12, 0x84, + 0xca, 0x75, 0x76, 0x90, 0x60, 0xdd, 0xe5, 0x06, 0x0d, 0xc7, 0x89, 0xff, 0x82, 0x87, 0x9a, 0xb5, 0x77, 0x39, 0x98, + 0x64, 0xdf, 0x78, 0xdc, 0xad, 0x64, 0x2d, 0x6b, 0x71, 0xd6, 0x37, 0x24, 0x18, 0x62, 0x37, 0xa5, 0x73, 0xdc, 0x4a, + 0xda, 0x28, 0x72, 0xc5, 0x2a, 0xf4, 0xff, 0x56, 0x91, 0xcc, 0x66, 0xfe, 0xd7, 0xd9, 0xd9, 0x99, 0x4b, 0x71, 0x36, + 0x7f, 0xca, 0x78, 0xc0, 0x99, 0x04, 0xf6, 0x85, 0x67, 0xcc, 0xe8, 0x90, 0xdf, 0xc2, 0x50, 0x88, 0x20, 0x97, 0xc2, + 0xb1, 0x4b, 0xf0, 0xce, 0x20, 0x50, 0x1e, 0x60, 0xff, 0x9e, 0x6c, 0x94, 0xf3, 0x0f, 0x15, 0xf9, 0x40, 0xbe, 0x65, + 0x83, 0xec, 0x8b, 0xf9, 0xec, 0x5b, 0x33, 0x19, 0x88, 0xcd, 0x1f, 0x61, 0xfb, 0xdb, 0xb0, 0xb4, 0xce, 0x52, 0x06, + 0x47, 0x5a, 0x2e, 0xb2, 0xa9, 0xd5, 0xfc, 0xbb, 0x0f, 0x53, 0xd6, 0x3d, 0x72, 0x03, 0x41, 0xb9, 0xc8, 0xd2, 0xc5, + 0xa3, 0x8c, 0x7e, 0x2c, 0x43, 0x4f, 0xee, 0xbd, 0x62, 0x0b, 0xf6, 0x23, 0xde, 0xab, 0x52, 0xe0, 0xe3, 0x61, 0xc1, + 0x69, 0xfe, 0x23, 0xde, 0xab, 0x42, 0x50, 0x82, 0x2b, 0xa4, 0x89, 0xe2, 0x88, 0xcd, 0x83, 0xce, 0x69, 0x24, 0x80, + 0x82, 0xe6, 0x91, 0x39, 0xc8, 0x9e, 0xbb, 0xa8, 0x85, 0x49, 0x07, 0xbb, 0xb8, 0x5f, 0x36, 0x16, 0xa9, 0x0d, 0xe1, + 0x0d, 0x91, 0xdc, 0xca, 0xd9, 0x98, 0xaf, 0x47, 0x1b, 0x0b, 0x62, 0x94, 0xc9, 0xe4, 0xf2, 0x39, 0x8f, 0xb7, 0x16, + 0x0b, 0x85, 0xd5, 0x82, 0x05, 0xaa, 0x55, 0xa9, 0xd2, 0xc3, 0xe2, 0xdb, 0x05, 0xb3, 0xa0, 0x88, 0xd9, 0x7a, 0x0f, + 0x6f, 0xb9, 0x22, 0x20, 0x25, 0xbb, 0x24, 0x78, 0x93, 0xdb, 0x60, 0xaa, 0x7f, 0x82, 0x1d, 0x08, 0x3d, 0x53, 0x3a, + 0xc2, 0x26, 0x4f, 0x41, 0x24, 0xb1, 0xfd, 0x16, 0x76, 0xac, 0xd1, 0x0b, 0xe1, 0x85, 0x14, 0x38, 0x57, 0x4d, 0x13, + 0x33, 0xca, 0x4d, 0x74, 0xb1, 0x87, 0x6a, 0xce, 0x32, 0x6d, 0x11, 0x60, 0xdf, 0xa1, 0xa1, 0x14, 0xcf, 0x0d, 0x28, + 0xcc, 0x63, 0xd2, 0x2e, 0xe5, 0x31, 0x2c, 0x5e, 0x90, 0x02, 0x44, 0x8d, 0x8b, 0x49, 0x59, 0x67, 0x9e, 0x2f, 0x26, + 0x5c, 0x54, 0xc8, 0x50, 0x30, 0x35, 0x97, 0x02, 0xde, 0x72, 0x28, 0x8b, 0x18, 0x3a, 0x54, 0xc3, 0x77, 0x4b, 0xc2, + 0xca, 0x3a, 0xe6, 0x98, 0xe2, 0xa2, 0xaa, 0x01, 0xcc, 0xc5, 0xc3, 0xf0, 0xd1, 0x77, 0xf5, 0x5a, 0xbc, 0x93, 0xf3, + 0x2a, 0xdf, 0xd3, 0x38, 0x1f, 0x32, 0xdd, 0xd9, 0x0d, 0xa3, 0xb5, 0x79, 0x6e, 0x29, 0xd8, 0xbe, 0x1f, 0x78, 0xf5, + 0x04, 0xd9, 0xda, 0x3c, 0xd8, 0x54, 0x66, 0x0d, 0x59, 0xf9, 0x3a, 0x41, 0xd5, 0x5e, 0xbd, 0xaa, 0x14, 0xb6, 0x22, + 0x40, 0xa5, 0xe0, 0xa3, 0xad, 0xfc, 0x27, 0xda, 0xe6, 0xdb, 0x73, 0xa8, 0x0c, 0x0f, 0xe4, 0xc9, 0x50, 0xd5, 0x03, + 0x2e, 0xca, 0x0f, 0x01, 0x2c, 0x7e, 0x64, 0x22, 0xd7, 0xee, 0xba, 0x40, 0xe6, 0x4c, 0xc5, 0x12, 0x2f, 0xfb, 0x74, + 0x90, 0x5a, 0x79, 0x28, 0x95, 0x60, 0xdb, 0x73, 0x53, 0x70, 0xed, 0x43, 0xe4, 0xe2, 0x3e, 0x1b, 0xa4, 0xcb, 0x7a, + 0x18, 0x5d, 0x1b, 0xc8, 0xd7, 0x9b, 0x73, 0x9a, 0xb8, 0xb3, 0x74, 0x80, 0x73, 0x02, 0xb6, 0xc7, 0x9e, 0x3d, 0x7d, + 0x13, 0x67, 0xa8, 0x57, 0xe7, 0xf0, 0x97, 0x6b, 0x9c, 0xe3, 0x0c, 0xa5, 0x0f, 0x63, 0xb8, 0xc0, 0x5a, 0x63, 0x00, + 0x5f, 0x66, 0x49, 0x15, 0x78, 0xa4, 0x66, 0x46, 0x62, 0x75, 0x17, 0x81, 0x68, 0xa9, 0xc3, 0xdb, 0x71, 0xe6, 0x03, + 0x51, 0x1b, 0xee, 0xf5, 0x99, 0x11, 0x0e, 0x27, 0x59, 0x5c, 0x3b, 0x67, 0x38, 0xb9, 0xdc, 0xe7, 0xb5, 0x13, 0x13, + 0xac, 0xbd, 0xc3, 0x53, 0x05, 0xf4, 0x68, 0x70, 0xaa, 0x58, 0x1a, 0x02, 0x31, 0x13, 0xc0, 0x9b, 0x39, 0x3c, 0xda, + 0x02, 0x9c, 0x8f, 0xd6, 0x38, 0xf8, 0x4a, 0x6b, 0x5d, 0x6d, 0x2a, 0x51, 0xd6, 0x6b, 0xdc, 0x9f, 0x66, 0x78, 0x94, + 0xe1, 0x79, 0x36, 0x08, 0x8e, 0x9b, 0x59, 0x16, 0x9a, 0x74, 0xad, 0x56, 0x4f, 0x9d, 0x19, 0x21, 0xb2, 0x3f, 0x2d, + 0xfd, 0x41, 0x3d, 0x40, 0xf8, 0x14, 0xb2, 0x80, 0x96, 0xf4, 0xdc, 0xdf, 0x86, 0x7d, 0xa7, 0x1a, 0x35, 0x62, 0x9e, + 0x58, 0x32, 0xd2, 0xf3, 0x3f, 0xca, 0x2c, 0xdb, 0x5a, 0x23, 0x9a, 0xdf, 0xee, 0x45, 0x0d, 0xdf, 0x5e, 0xa0, 0x65, + 0x2b, 0xcd, 0x76, 0x00, 0x51, 0xac, 0x71, 0x92, 0x0e, 0xd6, 0x48, 0xae, 0x56, 0xb1, 0x4d, 0x21, 0x3c, 0x99, 0x31, + 0xaa, 0x16, 0x85, 0x79, 0xba, 0x2d, 0x56, 0x28, 0x31, 0xfc, 0x2e, 0x76, 0x36, 0xa2, 0xf0, 0x52, 0x9a, 0x04, 0xc3, + 0x8d, 0x58, 0x10, 0x59, 0x13, 0xb9, 0x87, 0x59, 0x65, 0x19, 0x24, 0x88, 0x30, 0x22, 0xbf, 0xbd, 0x2e, 0x15, 0xf6, + 0x71, 0x38, 0xfb, 0xc7, 0xf8, 0x02, 0xc2, 0xcd, 0xdb, 0x84, 0x16, 0x43, 0x3a, 0x01, 0x36, 0x16, 0xe2, 0x10, 0x6e, + 0x25, 0xac, 0x56, 0xfd, 0x41, 0x57, 0x18, 0xf2, 0xec, 0x9e, 0xae, 0x2b, 0x1b, 0xda, 0xdd, 0x00, 0x5c, 0x75, 0x5b, + 0x6a, 0xae, 0x8d, 0xee, 0x87, 0x9a, 0xd7, 0xb5, 0xb8, 0x4b, 0x72, 0x0f, 0x64, 0x54, 0x6f, 0x60, 0xd7, 0x2c, 0xc0, + 0x4d, 0xe8, 0x2a, 0x3c, 0xc2, 0x0b, 0x6b, 0xc3, 0x69, 0x9e, 0x52, 0xa2, 0xe6, 0x05, 0x25, 0x78, 0xb8, 0x99, 0xb0, + 0x7e, 0x36, 0xc0, 0x23, 0x1f, 0x68, 0x7b, 0xff, 0x6d, 0x3c, 0x42, 0xa8, 0x20, 0x06, 0xa6, 0xd6, 0x65, 0x7b, 0x54, + 0xd9, 0xed, 0x9b, 0x4c, 0xc3, 0x30, 0x18, 0x23, 0xe6, 0x51, 0x68, 0xc4, 0x9c, 0x37, 0x1a, 0x68, 0x41, 0x46, 0x60, + 0xc4, 0xbc, 0x08, 0x5a, 0x5b, 0xd8, 0x67, 0x36, 0x83, 0xf6, 0x16, 0x08, 0x75, 0x39, 0xd0, 0x34, 0x0d, 0x0f, 0x6a, + 0x54, 0x0f, 0x9a, 0xfb, 0xe7, 0x9d, 0x8e, 0x3a, 0xa0, 0x48, 0x18, 0x5f, 0xfa, 0x49, 0x58, 0xd7, 0x70, 0x3b, 0xee, + 0xb1, 0x19, 0xb7, 0xb3, 0x6d, 0x50, 0x7d, 0xd9, 0xcf, 0x06, 0x83, 0xae, 0xf4, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x9e, + 0xe0, 0xa8, 0x16, 0xef, 0x8b, 0xde, 0xbc, 0xf2, 0xe6, 0xfe, 0x65, 0xcf, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, + 0x1f, 0xaa, 0xe2, 0x83, 0x1d, 0x75, 0x20, 0x0a, 0x5a, 0xda, 0xaa, 0x09, 0xa4, 0xd6, 0xcc, 0x2e, 0xd6, 0x4d, 0x85, + 0x0e, 0x05, 0x84, 0x21, 0x53, 0x55, 0x77, 0x77, 0x2a, 0x50, 0x0d, 0x71, 0x38, 0xf5, 0x1f, 0x5b, 0x23, 0xd6, 0x38, + 0xea, 0x8c, 0x22, 0x63, 0x24, 0x69, 0x97, 0x0f, 0x5e, 0xdd, 0x01, 0x2b, 0x01, 0x1f, 0xfd, 0xd8, 0x24, 0x19, 0x43, + 0x82, 0xb7, 0x2c, 0xd3, 0x86, 0x0f, 0xe1, 0x0e, 0x41, 0x79, 0x62, 0x63, 0x6d, 0xba, 0x4a, 0x16, 0x72, 0x55, 0x97, + 0xd7, 0x01, 0x7a, 0xde, 0x95, 0xbf, 0xb1, 0xe1, 0xc8, 0x82, 0x81, 0x65, 0x5b, 0xfb, 0x04, 0x3c, 0xf2, 0x71, 0x85, + 0x20, 0x7e, 0x29, 0x74, 0x62, 0x22, 0x45, 0x5f, 0xc1, 0x06, 0xc5, 0x73, 0x70, 0x10, 0x74, 0x12, 0x1c, 0x06, 0xef, + 0x32, 0xab, 0x49, 0x36, 0xb8, 0x35, 0x23, 0xf1, 0x7c, 0xb5, 0x6a, 0xa1, 0xc3, 0x7f, 0xcc, 0x63, 0xc8, 0xe3, 0x52, + 0xe1, 0x3e, 0xae, 0x14, 0xee, 0x60, 0x09, 0x48, 0xc6, 0x81, 0xae, 0x1d, 0xcb, 0x50, 0x8d, 0x0e, 0x71, 0xba, 0x5f, + 0x40, 0xd4, 0x66, 0x77, 0x2c, 0x81, 0x9e, 0x7d, 0xab, 0x80, 0xd5, 0xb5, 0x97, 0x25, 0x90, 0x11, 0xdc, 0xfd, 0x26, + 0x30, 0x2a, 0x44, 0xe3, 0xf3, 0x67, 0xde, 0x53, 0xe0, 0x89, 0xf3, 0xe7, 0x9a, 0x19, 0xd6, 0xbd, 0xa0, 0x37, 0xa6, + 0xf9, 0x78, 0x8c, 0x9b, 0x63, 0x0b, 0xce, 0xa3, 0x0e, 0xfc, 0xb4, 0x10, 0x3d, 0xea, 0x60, 0x97, 0x8a, 0xc7, 0x25, + 0x90, 0x43, 0xf4, 0x74, 0x06, 0x52, 0xc0, 0x4a, 0xc7, 0x56, 0x8b, 0x34, 0x41, 0xab, 0xd5, 0xe4, 0x82, 0xb4, 0x10, + 0x5a, 0xaa, 0x1b, 0xae, 0xb3, 0x29, 0xf8, 0x48, 0x83, 0x62, 0xe0, 0x0d, 0xd5, 0xd3, 0x18, 0xe1, 0x31, 0x5a, 0x8e, + 0xd8, 0x98, 0x2e, 0x72, 0x9d, 0xaa, 0x1e, 0x4f, 0x6c, 0x28, 0x5b, 0x66, 0x23, 0xc1, 0x1d, 0x75, 0xf0, 0xc4, 0xf0, + 0x97, 0x8f, 0x8c, 0x39, 0x48, 0x91, 0x99, 0xe4, 0x89, 0x49, 0xc0, 0x3c, 0xc9, 0x72, 0xa9, 0x98, 0x6d, 0xa6, 0x6b, + 0x6d, 0xcb, 0x21, 0x18, 0x76, 0xa4, 0x0b, 0x6e, 0xac, 0x28, 0xa3, 0x74, 0x4a, 0x54, 0x4f, 0x1d, 0x75, 0xd2, 0x09, + 0xe6, 0x09, 0x70, 0x7a, 0xef, 0x64, 0xcc, 0x1a, 0xe5, 0xad, 0xe8, 0x0c, 0x1d, 0x4e, 0xb1, 0xa8, 0x2e, 0x51, 0x67, + 0xe8, 0x70, 0x82, 0xf0, 0xac, 0x41, 0x72, 0x05, 0x1e, 0xc3, 0x5c, 0xfc, 0x1f, 0x29, 0xff, 0xcd, 0x61, 0x43, 0xd0, + 0xe5, 0xb7, 0xb0, 0x53, 0xd8, 0x28, 0x4a, 0x73, 0x02, 0x5e, 0x8b, 0xed, 0x33, 0x9c, 0x91, 0x49, 0x33, 0xf7, 0x01, + 0xf7, 0x4c, 0x2b, 0x8d, 0x5b, 0x8d, 0x0e, 0x33, 0x3c, 0xda, 0x4c, 0x8a, 0xcd, 0x5c, 0x9b, 0x79, 0x9a, 0xc1, 0xf9, + 0x5e, 0x8d, 0xc2, 0x95, 0x5f, 0x6c, 0x26, 0x85, 0xe5, 0x1d, 0x70, 0x9b, 0x23, 0x2c, 0x9a, 0x14, 0xe7, 0x78, 0xd6, + 0xfc, 0x8a, 0x67, 0xcd, 0x0f, 0x65, 0x46, 0x63, 0x81, 0x05, 0x04, 0xef, 0x83, 0x44, 0x3c, 0xab, 0x92, 0x47, 0x58, + 0x34, 0x4c, 0x79, 0x3c, 0x6b, 0x54, 0xa5, 0x9b, 0x0b, 0x2c, 0x1a, 0xa6, 0x74, 0xe3, 0x03, 0x9e, 0x35, 0xbe, 0xfe, + 0x8b, 0x49, 0x47, 0x29, 0xa0, 0xcb, 0x1c, 0x2d, 0x33, 0x3b, 0xc4, 0xab, 0xdf, 0xde, 0xbe, 0x6b, 0x5f, 0x77, 0x0e, + 0x27, 0xd8, 0xaf, 0x5f, 0x66, 0x70, 0x2c, 0xd3, 0x31, 0x6b, 0x02, 0x44, 0x33, 0xdc, 0x39, 0x9c, 0xe2, 0xce, 0x61, + 0xe6, 0x9a, 0x5a, 0xcf, 0x1a, 0xe4, 0x56, 0x87, 0x50, 0xd4, 0x51, 0x1a, 0xc2, 0xc7, 0x4f, 0x36, 0x9d, 0xa0, 0x1a, + 0x28, 0xd1, 0xe1, 0xa4, 0x06, 0x2a, 0xf8, 0x5e, 0xd4, 0xbe, 0xab, 0x7a, 0x15, 0x06, 0x59, 0x28, 0xa1, 0x70, 0xcd, + 0x0d, 0x78, 0x6a, 0x29, 0x06, 0x32, 0x61, 0x8a, 0x05, 0xca, 0x77, 0x40, 0x61, 0x94, 0x27, 0x66, 0xe8, 0xc1, 0x74, + 0x4c, 0xe2, 0xff, 0xcf, 0x93, 0x29, 0x87, 0x5e, 0x6e, 0x99, 0xad, 0xe9, 0xb9, 0xc9, 0x84, 0xc3, 0x07, 0x1e, 0xeb, + 0xff, 0xda, 0x81, 0x62, 0x03, 0x52, 0xfc, 0x7f, 0xe9, 0xe8, 0x42, 0x30, 0x42, 0x56, 0x94, 0x16, 0x0e, 0xf1, 0xbf, + 0x3f, 0xac, 0xa0, 0xfb, 0x62, 0xab, 0xfb, 0xc2, 0x74, 0x1f, 0x36, 0x6d, 0x54, 0x39, 0x69, 0x55, 0xc9, 0x92, 0xff, + 0x3a, 0xdd, 0xda, 0x02, 0x8d, 0xa8, 0xd1, 0xb3, 0x49, 0xd8, 0xe0, 0x7e, 0x3b, 0xdd, 0x81, 0xcc, 0x6b, 0x6e, 0xdf, + 0xe6, 0x84, 0xc3, 0x37, 0xb8, 0x53, 0xbd, 0x6c, 0x81, 0xf7, 0xa6, 0x32, 0xfa, 0xca, 0x38, 0xb4, 0x1c, 0x2c, 0x36, + 0x4d, 0xb9, 0x8d, 0xb1, 0x74, 0x72, 0x8a, 0x8d, 0x2b, 0x22, 0x54, 0xba, 0xbd, 0x04, 0xa5, 0xf8, 0x58, 0x37, 0x99, + 0xf9, 0xba, 0xd0, 0x89, 0xb9, 0x84, 0x6a, 0x98, 0xcf, 0xbb, 0x4b, 0x9d, 0x68, 0x39, 0xb7, 0x79, 0x77, 0x17, 0xd0, + 0x27, 0x68, 0x58, 0x1b, 0x81, 0xdd, 0x3e, 0x2b, 0x9c, 0x7e, 0xa7, 0x3a, 0x04, 0xc3, 0x03, 0xc8, 0x91, 0x16, 0xdb, + 0x07, 0x36, 0xad, 0x61, 0xd7, 0x45, 0xb3, 0x4c, 0xb4, 0xad, 0x36, 0x4d, 0xae, 0xdd, 0xc3, 0x7c, 0x1e, 0xf2, 0x14, + 0xbc, 0xb0, 0xfa, 0xf1, 0x1d, 0xec, 0xc6, 0x6d, 0x8d, 0x91, 0xa8, 0x2b, 0x99, 0x4a, 0xe8, 0x27, 0xb7, 0x98, 0x25, + 0x77, 0xc6, 0x8b, 0x51, 0x19, 0x7f, 0x1f, 0x13, 0xa9, 0x3e, 0xaa, 0x24, 0x39, 0xb0, 0xec, 0x6f, 0xb0, 0xe4, 0x16, + 0xcc, 0x13, 0xcb, 0x6a, 0x12, 0xeb, 0xe4, 0x2e, 0x58, 0x44, 0x69, 0x1a, 0x59, 0x1b, 0x06, 0xd4, 0x34, 0x63, 0xd5, + 0x83, 0xfb, 0x10, 0xe8, 0xa1, 0x57, 0x96, 0xd2, 0xae, 0xb3, 0xb4, 0xd6, 0xbd, 0x36, 0xdd, 0x6f, 0x0e, 0x28, 0xe0, + 0x0b, 0x03, 0xae, 0xe9, 0x5f, 0x4d, 0x22, 0x19, 0xb2, 0xaf, 0x9c, 0x15, 0x8f, 0x17, 0x85, 0xc1, 0x34, 0xd1, 0xd3, + 0x49, 0x36, 0x6f, 0x83, 0xa9, 0x5e, 0x36, 0xef, 0xdc, 0x62, 0xf7, 0x7d, 0x67, 0xbf, 0xef, 0xb0, 0xe8, 0x31, 0x93, + 0x91, 0x32, 0x53, 0xcc, 0x7f, 0xdf, 0xd9, 0xef, 0x3b, 0xbc, 0x3d, 0x98, 0x1b, 0x7f, 0xa1, 0x58, 0xb2, 0x33, 0x5c, + 0x82, 0x09, 0x79, 0xc0, 0xdd, 0xd4, 0xb2, 0x4c, 0x10, 0xd8, 0x5a, 0x02, 0xc4, 0xf9, 0x7c, 0x1a, 0x57, 0xbc, 0x1a, + 0x02, 0xee, 0xd3, 0xbb, 0xb6, 0x57, 0xa9, 0xc0, 0x63, 0x82, 0x46, 0xc4, 0xc4, 0xb6, 0x31, 0xef, 0x6a, 0x01, 0x97, + 0x47, 0x74, 0xa9, 0x27, 0x49, 0x80, 0x57, 0x35, 0x2a, 0x6f, 0x53, 0xa4, 0xfc, 0x22, 0x41, 0x8e, 0x2f, 0xf6, 0x88, + 0x2a, 0x06, 0xb0, 0x2a, 0x4b, 0xfa, 0x04, 0x52, 0xcf, 0x0f, 0x26, 0xfa, 0x79, 0x13, 0x79, 0xec, 0x0b, 0xb3, 0x9f, + 0x99, 0x9e, 0x16, 0x72, 0x31, 0x99, 0x82, 0x0f, 0x2d, 0xb0, 0x0c, 0x85, 0xa9, 0x57, 0xd9, 0xfa, 0xd7, 0x24, 0x37, + 0x01, 0x14, 0x4e, 0x37, 0x65, 0x42, 0x33, 0xbd, 0xa0, 0xb9, 0xb1, 0x24, 0xe5, 0x62, 0xf2, 0x48, 0xde, 0xbe, 0x04, + 0xec, 0xa6, 0x44, 0x37, 0x76, 0xe4, 0xbd, 0x85, 0x1d, 0x80, 0x33, 0xc2, 0x76, 0x55, 0x7c, 0xa8, 0x40, 0xe7, 0x8f, + 0x73, 0xc2, 0x76, 0x55, 0x7d, 0xc2, 0x6c, 0xf6, 0x94, 0x6c, 0x0c, 0xb7, 0x17, 0x67, 0x8d, 0x1c, 0x1d, 0x75, 0xd2, + 0xbc, 0xeb, 0x89, 0x81, 0x05, 0x68, 0x00, 0xdc, 0xad, 0xed, 0x59, 0xde, 0xdd, 0x10, 0xd0, 0xbb, 0x64, 0xd2, 0x5e, + 0x97, 0x9b, 0x94, 0xd5, 0xaa, 0x53, 0x51, 0xc1, 0x02, 0x4f, 0x83, 0xbd, 0x40, 0xed, 0xd7, 0x0e, 0x8a, 0x73, 0x95, + 0x6d, 0x9a, 0x9e, 0x97, 0x7d, 0x77, 0x77, 0x2c, 0x32, 0xb6, 0x69, 0x6f, 0x77, 0x10, 0x09, 0xcb, 0x09, 0xeb, 0x80, + 0x13, 0xae, 0x6a, 0x07, 0x04, 0xe8, 0x3a, 0x10, 0xb9, 0xb1, 0x24, 0xcb, 0x75, 0x65, 0x74, 0x1f, 0xf8, 0xdd, 0x52, + 0x22, 0xdd, 0x68, 0x4b, 0x82, 0xe9, 0x13, 0x8c, 0x9a, 0xce, 0x3c, 0x8a, 0x5c, 0x7b, 0xef, 0x77, 0x53, 0xb4, 0xf5, + 0xaf, 0x0f, 0x63, 0xb3, 0x3d, 0x4c, 0x0c, 0x65, 0x10, 0x03, 0xbd, 0x8f, 0x78, 0xb7, 0xd1, 0xc8, 0x10, 0x28, 0x64, + 0xb2, 0x01, 0x96, 0x89, 0xd7, 0xa2, 0x1f, 0x1c, 0x18, 0x78, 0x54, 0x09, 0x08, 0x53, 0x10, 0x42, 0xc2, 0xae, 0x0d, + 0xc2, 0x86, 0xcb, 0x55, 0xcb, 0x85, 0x8d, 0x54, 0x1b, 0x3a, 0xf8, 0x7f, 0x85, 0xcb, 0x56, 0xcf, 0x2c, 0x17, 0xc5, + 0xe0, 0x66, 0x6e, 0xc0, 0x22, 0x41, 0x7a, 0xb4, 0xd9, 0x1e, 0x8a, 0xbb, 0x73, 0xb1, 0xd9, 0x10, 0x90, 0x98, 0xc3, + 0x04, 0x45, 0xc3, 0xb9, 0x31, 0xc6, 0x2a, 0xa9, 0xb4, 0xac, 0x35, 0x89, 0x39, 0xf0, 0xa5, 0x0b, 0xd7, 0x7d, 0x79, + 0x9b, 0x32, 0x7c, 0x97, 0x0a, 0x7c, 0x03, 0x9e, 0x34, 0xa9, 0xc4, 0xee, 0xf1, 0x82, 0x62, 0x4d, 0x74, 0xd7, 0xb3, + 0xb7, 0x05, 0xac, 0xb3, 0xd9, 0x23, 0x22, 0xf8, 0x5d, 0xfd, 0x6a, 0x83, 0xef, 0x16, 0xfe, 0x0a, 0xd6, 0xcf, 0xc1, + 0x49, 0x8a, 0x45, 0x43, 0x36, 0x0b, 0x77, 0x64, 0x40, 0xb9, 0x8a, 0x5f, 0x0e, 0x53, 0xb7, 0x8a, 0xe1, 0xda, 0xc7, + 0x57, 0xfc, 0x61, 0xa3, 0xdd, 0x86, 0x2a, 0x8b, 0xdb, 0xbd, 0x29, 0x1a, 0xb2, 0x6a, 0x7a, 0x47, 0xe6, 0x46, 0x4a, + 0xfd, 0xeb, 0x03, 0x6e, 0x6d, 0xb5, 0xef, 0xa7, 0xf9, 0xd6, 0xa3, 0x73, 0xd5, 0xb4, 0x4f, 0xad, 0x15, 0xc1, 0xc1, + 0xcf, 0x16, 0x6e, 0x6e, 0x0d, 0x38, 0x80, 0x9f, 0xbf, 0xa3, 0x79, 0x9c, 0x41, 0x74, 0x7a, 0xab, 0x19, 0x5f, 0xc5, + 0x7f, 0x8e, 0x1a, 0x71, 0x2f, 0xfd, 0x33, 0xf9, 0x73, 0xd4, 0x40, 0x3d, 0x14, 0xcf, 0x6f, 0x57, 0x6c, 0xb6, 0x82, + 0x60, 0x6b, 0xf7, 0x8e, 0xf0, 0xeb, 0xb0, 0x24, 0xd7, 0x34, 0xe7, 0xd9, 0xca, 0x3d, 0x45, 0xb7, 0x72, 0xef, 0xf4, + 0xac, 0xcc, 0xeb, 0x4a, 0xab, 0x58, 0x0e, 0x73, 0x08, 0x2c, 0x1c, 0xef, 0x35, 0x7b, 0xfd, 0x56, 0xf3, 0xc1, 0xc0, + 0xfe, 0x6b, 0x22, 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x06, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, + 0xe9, 0xe3, 0x0c, 0x59, 0xdf, 0x93, 0xd5, 0x8a, 0xb9, 0x68, 0xd6, 0x4e, 0x83, 0x5f, 0xc6, 0x66, 0x3a, 0x6c, 0x27, + 0x9d, 0xae, 0x17, 0x63, 0x49, 0x03, 0x22, 0x4d, 0x63, 0x06, 0x81, 0xa4, 0x96, 0x86, 0xc3, 0x9a, 0xdf, 0x46, 0x69, + 0x75, 0x7f, 0x04, 0x29, 0x3f, 0x44, 0x29, 0x3f, 0x22, 0x10, 0x40, 0xdb, 0x32, 0x47, 0x65, 0x43, 0xde, 0x77, 0xe9, + 0x9e, 0x71, 0x66, 0x68, 0xf0, 0xd5, 0xaa, 0x55, 0x0d, 0x53, 0x14, 0xf5, 0x61, 0x2e, 0xd7, 0x58, 0x90, 0x37, 0xa0, + 0x6b, 0x56, 0x44, 0xf4, 0x42, 0x57, 0x79, 0x78, 0x89, 0x17, 0x4b, 0x02, 0x4e, 0xfa, 0x3d, 0xd1, 0x2b, 0xc8, 0xe5, + 0xc3, 0x18, 0x7c, 0xcc, 0x30, 0xef, 0xeb, 0x7e, 0x31, 0x18, 0xa0, 0xd4, 0x39, 0x9d, 0xa5, 0x26, 0xe2, 0x4a, 0xe0, + 0x97, 0x5c, 0x80, 0x5f, 0xb2, 0x42, 0xac, 0x5f, 0x0c, 0xc8, 0xbd, 0x2c, 0x96, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, + 0x61, 0x68, 0x60, 0x6a, 0x86, 0x65, 0x2e, 0xb2, 0xc1, 0x62, 0xce, 0x5a, 0x02, 0xc1, 0xcd, 0x80, 0xbb, 0xd4, 0x86, + 0x44, 0x63, 0x0d, 0x14, 0xdd, 0x46, 0xa1, 0x99, 0xd1, 0xd3, 0xad, 0x36, 0xfa, 0x91, 0xc3, 0x0b, 0x73, 0x0d, 0x63, + 0x11, 0xc8, 0x5c, 0xae, 0x7a, 0xec, 0x2f, 0x3f, 0x6c, 0x56, 0x18, 0xbc, 0xc2, 0x98, 0xec, 0x94, 0x56, 0x89, 0x66, + 0x7c, 0x95, 0x27, 0x8e, 0x21, 0xc8, 0xc4, 0x52, 0xe9, 0x86, 0x63, 0xe2, 0x4a, 0xfa, 0x4c, 0x0c, 0xd9, 0x6e, 0x78, + 0x66, 0x2e, 0x74, 0xb3, 0xfd, 0xc3, 0xb9, 0x9d, 0x73, 0xc2, 0x8d, 0x56, 0xd2, 0x68, 0xa3, 0x9e, 0x19, 0xaa, 0xea, + 0x82, 0xf9, 0x3d, 0x74, 0x5a, 0x5a, 0xec, 0x5c, 0xbd, 0xbb, 0xe1, 0xbb, 0x70, 0x65, 0xfc, 0x2d, 0x56, 0x85, 0x56, + 0x64, 0xb8, 0xdd, 0x42, 0xde, 0x9c, 0xe9, 0xa1, 0x57, 0xe4, 0x42, 0x75, 0xf8, 0x8b, 0xba, 0xc2, 0x3c, 0x15, 0x19, + 0x35, 0x84, 0x47, 0xbf, 0xd7, 0x19, 0x28, 0xff, 0x60, 0x62, 0x32, 0x67, 0xc9, 0x0d, 0x2d, 0x44, 0xfc, 0xe3, 0x0b, + 0x61, 0x62, 0x55, 0xed, 0xc1, 0x40, 0xf6, 0x4c, 0xc5, 0x3d, 0xb8, 0x35, 0xe1, 0x63, 0xce, 0x46, 0xe9, 0x5e, 0xf4, + 0x63, 0x43, 0x34, 0x7e, 0x8c, 0x7e, 0x04, 0x77, 0x67, 0xf7, 0x2e, 0x61, 0x19, 0x17, 0xc2, 0xdf, 0x63, 0x3d, 0x2c, + 0x55, 0xca, 0x58, 0x7b, 0xdd, 0x72, 0x78, 0x21, 0xf5, 0x26, 0x8b, 0x1f, 0x3a, 0x62, 0x6d, 0x53, 0xb0, 0x0e, 0x29, + 0x29, 0x3c, 0xbb, 0x62, 0x6e, 0xb5, 0x98, 0xbb, 0xd4, 0x12, 0xfe, 0xfa, 0xea, 0x61, 0xa9, 0x82, 0x86, 0x83, 0xd0, + 0x95, 0xb6, 0x90, 0x00, 0x03, 0x97, 0xd2, 0xa7, 0xd3, 0x9d, 0x49, 0x64, 0x96, 0xc5, 0xf0, 0xee, 0x41, 0x05, 0xf3, + 0xdf, 0xd9, 0x46, 0x58, 0x15, 0xb8, 0x5c, 0xa9, 0xa2, 0x5e, 0x4a, 0x02, 0x01, 0xe8, 0x4b, 0xef, 0x41, 0x79, 0x51, + 0x74, 0x1b, 0x0d, 0x09, 0x5a, 0x58, 0x6a, 0xae, 0x55, 0x31, 0xdd, 0x0f, 0xdf, 0xd3, 0x0b, 0x3e, 0xbc, 0x43, 0xda, + 0xc6, 0xa3, 0x96, 0x94, 0x50, 0xbb, 0x83, 0xf6, 0xc1, 0x2a, 0x3b, 0x28, 0xff, 0x36, 0xa6, 0xc8, 0xe6, 0xf7, 0xd9, + 0x0f, 0xd4, 0x75, 0x38, 0x70, 0x05, 0xab, 0x5e, 0xca, 0x28, 0x18, 0xc2, 0x3e, 0x60, 0x1f, 0x8b, 0x24, 0xa3, 0xd9, + 0x94, 0x81, 0xba, 0xdf, 0x16, 0xad, 0xe6, 0xf6, 0xa4, 0xee, 0x37, 0x64, 0x9c, 0x7d, 0x84, 0x71, 0xf6, 0x51, 0xe0, + 0xc5, 0x22, 0xc9, 0x1f, 0x32, 0xd6, 0x38, 0x56, 0x4d, 0x81, 0x8e, 0x3a, 0xc0, 0x9d, 0x81, 0x03, 0x0f, 0xd8, 0xa2, + 0x1c, 0x1c, 0x50, 0x67, 0x71, 0x4f, 0x1b, 0x99, 0xf7, 0xf6, 0x84, 0xda, 0x45, 0x2c, 0x70, 0xb3, 0x66, 0xa6, 0x05, + 0xad, 0x15, 0xc6, 0x79, 0x3c, 0xe0, 0x6d, 0x9e, 0xd5, 0xe2, 0x27, 0x6c, 0x58, 0x53, 0xd5, 0x6f, 0xa0, 0x39, 0xaa, + 0x05, 0xb9, 0x79, 0x62, 0xbc, 0x55, 0x49, 0x3f, 0x8a, 0x06, 0x96, 0x53, 0x21, 0x86, 0x64, 0xf4, 0x5b, 0x83, 0xe0, + 0x56, 0x7b, 0xb5, 0xe2, 0x1e, 0xf1, 0x45, 0xcd, 0x5b, 0xcd, 0xdc, 0x02, 0xd0, 0x22, 0x8e, 0xca, 0x7b, 0x93, 0x08, + 0xbc, 0x6f, 0xcb, 0x08, 0x69, 0xcb, 0xbe, 0x7d, 0x34, 0xb1, 0x54, 0x6c, 0xbe, 0xa3, 0x93, 0x41, 0x1a, 0xd9, 0x11, + 0x45, 0xf8, 0xba, 0x84, 0x24, 0x5c, 0x25, 0x5d, 0xab, 0x4c, 0xce, 0x99, 0x4a, 0x39, 0xbe, 0x2e, 0xa4, 0xd4, 0x57, + 0xf6, 0x4b, 0xe2, 0xea, 0x4e, 0x46, 0xe0, 0xeb, 0x09, 0xd3, 0xef, 0x68, 0x31, 0x61, 0xe0, 0x57, 0xe4, 0x6f, 0xc7, + 0x52, 0x4a, 0x2e, 0x9f, 0x88, 0xb8, 0x4f, 0x31, 0xbc, 0xf8, 0x39, 0xc0, 0xda, 0x84, 0x40, 0x29, 0x71, 0x11, 0x2e, + 0x88, 0xde, 0x14, 0xf2, 0xf6, 0x2e, 0x2e, 0xb0, 0x73, 0x00, 0x2c, 0x9d, 0x26, 0x01, 0xfe, 0xe5, 0x63, 0x3e, 0x56, + 0x63, 0x4e, 0x8d, 0xae, 0xdf, 0xfd, 0x4e, 0xae, 0x81, 0xde, 0x96, 0x8e, 0x82, 0xfd, 0xd6, 0x00, 0x72, 0xe1, 0x2e, + 0x0c, 0x2e, 0xbe, 0xc2, 0xda, 0xb2, 0x30, 0xde, 0x58, 0x00, 0xbd, 0xbf, 0x33, 0xb0, 0x60, 0xc3, 0x1c, 0x53, 0x78, + 0x2e, 0x75, 0xc2, 0x74, 0x10, 0x15, 0xe4, 0x49, 0xf9, 0x20, 0x66, 0xad, 0xf6, 0x5b, 0x36, 0x86, 0x3b, 0x8c, 0xe4, + 0xdb, 0x85, 0x13, 0x07, 0x1e, 0x90, 0x69, 0x32, 0xdb, 0xec, 0x1b, 0x1f, 0x79, 0xe4, 0xf5, 0x38, 0xde, 0xd5, 0x52, + 0x98, 0x6f, 0x56, 0x74, 0x8d, 0x21, 0x14, 0x45, 0xd8, 0xef, 0x17, 0x15, 0x53, 0x54, 0x19, 0xb4, 0x41, 0xc3, 0xf2, + 0x46, 0xfc, 0x02, 0x67, 0x0c, 0xad, 0x17, 0xb2, 0x77, 0x74, 0xd6, 0xe1, 0xcc, 0x61, 0xc6, 0x94, 0xc0, 0xa8, 0xb4, + 0x2c, 0xe8, 0x04, 0x1c, 0x9d, 0xab, 0x0f, 0xa2, 0xe2, 0xea, 0x58, 0x01, 0x78, 0x92, 0x29, 0xfc, 0x93, 0x6f, 0x82, + 0x75, 0xbf, 0x55, 0x33, 0x4c, 0xfd, 0x45, 0x6f, 0xbb, 0x96, 0x2f, 0x43, 0x1c, 0x69, 0x63, 0x08, 0xad, 0x73, 0x7b, + 0x07, 0x28, 0xe2, 0x82, 0x5e, 0xa4, 0x1a, 0x5f, 0xab, 0xc5, 0xd0, 0xac, 0xaf, 0x71, 0x1d, 0xd3, 0x06, 0x51, 0xac, + 0xbb, 0x26, 0xbe, 0xae, 0xde, 0x1f, 0x55, 0xa9, 0x82, 0x33, 0x48, 0x20, 0xac, 0xca, 0xcb, 0x86, 0x54, 0x92, 0x4b, + 0xd3, 0xa9, 0x34, 0x9d, 0x56, 0x08, 0xe5, 0xd2, 0x93, 0xf2, 0xfe, 0x15, 0x42, 0x18, 0x98, 0x32, 0x3b, 0xb0, 0x4a, + 0x6d, 0x61, 0x15, 0xbc, 0x7a, 0xb1, 0x81, 0x55, 0x12, 0x8e, 0xe7, 0x12, 0x8d, 0x8a, 0x0a, 0x87, 0x0c, 0xe9, 0x0b, + 0xb1, 0x08, 0x12, 0x00, 0x8b, 0xde, 0x65, 0x2e, 0xef, 0x7b, 0x38, 0x14, 0xf6, 0x24, 0x93, 0x70, 0xba, 0x09, 0xcd, + 0xe1, 0x61, 0x5a, 0xd5, 0xf3, 0x08, 0x01, 0x4b, 0xcf, 0x31, 0x3c, 0x48, 0xfc, 0xfd, 0x87, 0x50, 0x9d, 0x05, 0x79, + 0xfa, 0x2f, 0x51, 0x12, 0x1a, 0xfb, 0xcf, 0xf1, 0xd0, 0x21, 0x61, 0x38, 0xf0, 0xcd, 0x11, 0x56, 0x38, 0xb8, 0x55, + 0xc4, 0x67, 0x70, 0x87, 0x8f, 0x75, 0xe8, 0x01, 0x60, 0x09, 0xc5, 0x21, 0xc8, 0x37, 0x50, 0xcc, 0xe0, 0x80, 0x26, + 0xcb, 0xf0, 0x02, 0x17, 0xac, 0x16, 0xca, 0xfb, 0xdb, 0x96, 0x97, 0xd2, 0x6a, 0x97, 0xbc, 0xc6, 0x1c, 0xa8, 0xfc, + 0x0c, 0x2f, 0x7c, 0x85, 0x79, 0x29, 0xd9, 0x7d, 0xe1, 0x6b, 0x07, 0xf4, 0x14, 0x02, 0x46, 0xba, 0xdf, 0x6b, 0xc2, + 0x3d, 0x45, 0x2f, 0x73, 0x71, 0xd8, 0x76, 0xd0, 0xbd, 0xc0, 0x5c, 0x5d, 0x55, 0x59, 0x73, 0x30, 0x85, 0x06, 0x07, + 0x55, 0x38, 0x23, 0x30, 0x57, 0x2f, 0xca, 0x82, 0x73, 0x10, 0xef, 0x7b, 0xc2, 0xe4, 0x94, 0xd1, 0x00, 0x5e, 0x64, + 0xe5, 0xa3, 0x53, 0x3d, 0x0e, 0x2e, 0xe3, 0x86, 0x4d, 0x7c, 0x21, 0x7c, 0x2a, 0xb0, 0x92, 0xd6, 0x38, 0x34, 0xa2, + 0x23, 0x3a, 0x07, 0xb3, 0x0d, 0xa0, 0xe0, 0xee, 0x7c, 0xd8, 0x58, 0xa8, 0xe0, 0x31, 0xd8, 0xda, 0xdb, 0xcd, 0x84, + 0x38, 0x93, 0xa6, 0xe0, 0x6e, 0xdb, 0x20, 0x83, 0x37, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, + 0x84, 0x27, 0x28, 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xa2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x3a, 0x6a, 0x20, + 0x2a, 0x6a, 0xa0, 0x02, 0x6a, 0x20, 0xeb, 0xdb, 0xbf, 0x80, 0x85, 0xb0, 0x11, 0xaa, 0x44, 0x10, 0x10, 0x61, 0xae, + 0x0d, 0x1f, 0x50, 0x24, 0x21, 0xe4, 0x0d, 0xa0, 0x62, 0x4a, 0x5e, 0x82, 0xd1, 0x38, 0xbc, 0xde, 0x03, 0xee, 0x97, + 0x96, 0x61, 0xf0, 0x9c, 0x82, 0xc9, 0x7f, 0xeb, 0xf3, 0xa1, 0x7a, 0xb9, 0x3a, 0x08, 0xe1, 0x17, 0x10, 0x2b, 0xc2, + 0xf1, 0x17, 0xbf, 0x00, 0xd9, 0x54, 0x58, 0x1e, 0x1c, 0x48, 0x10, 0xf8, 0x21, 0x8a, 0x70, 0xc0, 0x33, 0xbc, 0xcc, + 0x36, 0x88, 0x9e, 0x9f, 0x95, 0xaa, 0x66, 0x25, 0x83, 0x59, 0x15, 0x9e, 0xc6, 0xd1, 0x35, 0x61, 0x20, 0xb8, 0x50, + 0xbb, 0x6f, 0x10, 0x02, 0x65, 0xcb, 0x8d, 0xa1, 0x4b, 0x4f, 0xc1, 0x7c, 0x34, 0x8e, 0xde, 0x32, 0x78, 0xd2, 0xd6, + 0x98, 0xfc, 0x33, 0x6d, 0x1e, 0xb8, 0x4f, 0xf7, 0xa2, 0x46, 0xe0, 0xa4, 0x4e, 0x51, 0xf2, 0xb7, 0xe4, 0x22, 0x8e, + 0x9a, 0x97, 0x11, 0x6a, 0xc0, 0xbf, 0x0d, 0x8e, 0xba, 0x34, 0xa1, 0xa3, 0x91, 0x0f, 0x7e, 0x93, 0x11, 0xb3, 0xc9, + 0x56, 0x2b, 0x51, 0x11, 0xf4, 0xc4, 0x6e, 0x30, 0x60, 0x25, 0x5e, 0x00, 0xfb, 0x60, 0x39, 0x58, 0xf2, 0x4e, 0xc4, + 0xca, 0x9f, 0x52, 0x18, 0xac, 0x9e, 0x33, 0x84, 0x70, 0x16, 0xc4, 0x6c, 0xfc, 0xcf, 0x67, 0x1a, 0xae, 0x9f, 0x9f, + 0xaf, 0x63, 0x44, 0xa4, 0x0f, 0x22, 0x57, 0x63, 0x47, 0x44, 0x10, 0xb6, 0x4c, 0xf7, 0x5d, 0x99, 0x1f, 0xbc, 0x75, + 0xf5, 0xc0, 0x86, 0x8b, 0x03, 0x03, 0x6a, 0x14, 0x18, 0xad, 0xe0, 0x9c, 0x94, 0x03, 0x07, 0x25, 0x84, 0x66, 0x45, + 0x3c, 0x25, 0x97, 0x10, 0x09, 0x2f, 0x43, 0x5d, 0x30, 0x2c, 0x08, 0x24, 0xa8, 0x29, 0x48, 0x50, 0x99, 0xaf, 0x3d, + 0x82, 0x59, 0xe7, 0x66, 0xb6, 0x53, 0xd4, 0x75, 0x41, 0x7e, 0x7e, 0xd1, 0xf1, 0x08, 0x58, 0xda, 0x83, 0x83, 0x02, + 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, 0xc0, 0x40, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0xda, 0x78, 0x1d, 0x18, 0x5b, + 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x3d, 0x9d, 0x6e, 0x47, 0x48, 0xec, 0x7d, 0xd4, + 0x26, 0xd0, 0x98, 0x23, 0xdd, 0xd5, 0xc6, 0xfc, 0x5a, 0xd3, 0x23, 0x56, 0x93, 0x90, 0x2e, 0x48, 0x97, 0xe7, 0xd3, + 0x9e, 0xc1, 0x15, 0xab, 0x34, 0x72, 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x17, + 0x49, 0xc9, 0x86, 0x61, 0x06, 0x61, 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0xb3, 0x7f, 0x4a, 0x1f, + 0x6c, 0xba, 0xf6, 0xe6, 0x11, 0x40, 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x36, 0x2a, 0xb3, 0xb0, 0x96, 0xb1, 0x95, + 0xdb, 0xf6, 0x18, 0x7b, 0x27, 0xb6, 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x88, 0x75, 0x6d, + 0xc8, 0x46, 0x1b, 0xda, 0x37, 0x4f, 0xc2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x39, 0x2e, 0xc1, 0x21, 0xbc, 0xf0, 0x08, + 0x7f, 0x0b, 0x2c, 0x52, 0x81, 0x19, 0x96, 0xab, 0x15, 0xd4, 0xf3, 0x78, 0x9f, 0x6d, 0x06, 0x27, 0x95, 0x1b, 0x63, + 0x97, 0x76, 0xe2, 0x71, 0xd9, 0x84, 0xc4, 0x19, 0xf4, 0xeb, 0x2b, 0xa2, 0xde, 0x7e, 0x3b, 0x7d, 0xe2, 0xdf, 0x2b, + 0x73, 0x3b, 0x10, 0x1b, 0xd6, 0x1b, 0xac, 0x3e, 0x80, 0x96, 0xbf, 0xca, 0xfc, 0x43, 0x65, 0xc1, 0x4d, 0x82, 0xda, + 0x5c, 0xc4, 0x2e, 0xeb, 0x22, 0x46, 0x6a, 0x8b, 0xbb, 0x43, 0x88, 0x7f, 0xb5, 0x15, 0xc5, 0x80, 0x27, 0x15, 0xff, + 0x1c, 0xa3, 0x2e, 0x84, 0xa2, 0xb6, 0x1e, 0x36, 0x40, 0x69, 0x97, 0xeb, 0x4a, 0x8c, 0x0c, 0x09, 0xe4, 0x5b, 0x17, + 0x5e, 0xd0, 0x9c, 0x44, 0x0a, 0xe4, 0xe4, 0x20, 0x2a, 0x69, 0xb6, 0x21, 0xcc, 0x75, 0xb7, 0x70, 0xcc, 0x5c, 0x6d, + 0xd0, 0x22, 0x7e, 0x01, 0xec, 0x0c, 0x37, 0x92, 0xa5, 0x03, 0x9f, 0xaa, 0x81, 0xcf, 0xaf, 0xb9, 0xa1, 0x28, 0x0a, + 0xf5, 0xde, 0xd9, 0x47, 0xe6, 0xe0, 0x77, 0x1a, 0x88, 0x8f, 0xd4, 0xe9, 0x48, 0x36, 0x42, 0xad, 0x39, 0x3b, 0x5e, + 0xb6, 0x19, 0x61, 0x50, 0xd8, 0xe8, 0x7d, 0x15, 0xb2, 0x8a, 0x9d, 0x9d, 0x8a, 0x60, 0x4e, 0x5f, 0x54, 0xe5, 0x9c, + 0xca, 0x2d, 0xa3, 0x5a, 0x6a, 0x1a, 0x20, 0xc2, 0x95, 0x4f, 0x24, 0xef, 0x33, 0x13, 0xfe, 0xc1, 0x60, 0x5c, 0x3d, + 0x52, 0xf8, 0xfb, 0x5d, 0xb1, 0x43, 0xb6, 0xa3, 0xc3, 0x6d, 0x04, 0xcd, 0x0b, 0x15, 0x3c, 0xe0, 0xa8, 0x64, 0x09, + 0x91, 0x22, 0x97, 0xfb, 0xaa, 0x66, 0xca, 0x76, 0x1d, 0x21, 0x84, 0xb4, 0xc7, 0x59, 0x37, 0xb4, 0x7a, 0xe8, 0x91, + 0x2a, 0xca, 0xe1, 0x16, 0xcd, 0x75, 0x01, 0x2a, 0x8c, 0x40, 0xba, 0xfc, 0xcc, 0xee, 0x52, 0x09, 0xd1, 0xcb, 0xd7, + 0x2e, 0x84, 0xb1, 0xb3, 0xb2, 0xc4, 0x85, 0x19, 0xb5, 0x0d, 0xa3, 0xeb, 0x36, 0x86, 0xb3, 0x81, 0x31, 0xd3, 0xa0, + 0xa4, 0x05, 0xa1, 0xae, 0xbb, 0xf4, 0x22, 0x33, 0x81, 0x1e, 0x73, 0x42, 0x1b, 0x0c, 0x4f, 0x89, 0x06, 0xcb, 0xa6, + 0x02, 0x2c, 0xf8, 0x96, 0x45, 0x6a, 0x6d, 0x36, 0x59, 0xfc, 0x51, 0xc7, 0xe6, 0x69, 0xbf, 0xbc, 0x62, 0x9e, 0x0b, + 0x47, 0xdd, 0x9e, 0x67, 0x3e, 0x1e, 0xdd, 0xd3, 0x37, 0x57, 0x2f, 0x5e, 0xbe, 0x7e, 0xb5, 0x5a, 0xb5, 0x59, 0xb3, + 0x7d, 0x82, 0x7f, 0xd2, 0x65, 0x3c, 0xd8, 0x32, 0x0a, 0xd0, 0xc1, 0xc1, 0x3e, 0x37, 0x2e, 0x3c, 0x9f, 0xf9, 0x1c, + 0xe2, 0x06, 0xe9, 0x01, 0xce, 0x8a, 0x32, 0x26, 0xc8, 0x6d, 0xd4, 0x8b, 0xee, 0x22, 0x50, 0x42, 0x55, 0xe4, 0xef, + 0xc3, 0xe6, 0xec, 0xf7, 0x20, 0x30, 0x11, 0xd4, 0x87, 0x08, 0x20, 0x10, 0xaf, 0x14, 0x17, 0x84, 0xf9, 0x04, 0x88, + 0xe2, 0xbd, 0x00, 0xce, 0xd4, 0x44, 0xad, 0x5a, 0xa8, 0xb8, 0x00, 0x92, 0x68, 0xc3, 0x51, 0xd2, 0x23, 0x13, 0xc0, + 0x1b, 0x82, 0x52, 0xda, 0x5f, 0xdd, 0xdc, 0xb9, 0x4b, 0xe5, 0xa8, 0xd7, 0x4a, 0x73, 0x3c, 0x75, 0x9f, 0x53, 0xf8, + 0x9c, 0x76, 0xfd, 0xe9, 0x20, 0x0e, 0x73, 0xbc, 0x20, 0xe2, 0xd0, 0x3f, 0x8b, 0xb8, 0x9c, 0x17, 0xec, 0x0b, 0x97, + 0x0b, 0x95, 0x2e, 0x6f, 0x53, 0x99, 0xdc, 0x36, 0x47, 0x87, 0x71, 0x91, 0xdc, 0x36, 0x55, 0x72, 0x8b, 0xf0, 0x5d, + 0x2a, 0x93, 0x3b, 0x9b, 0x72, 0xd7, 0x54, 0x70, 0xf3, 0x85, 0x05, 0x1c, 0x8a, 0xb6, 0x68, 0x63, 0xb1, 0x59, 0xd4, + 0xa6, 0xb8, 0xa2, 0x01, 0x06, 0xff, 0xbe, 0x63, 0xe3, 0x87, 0xe1, 0x4b, 0x70, 0x69, 0xd2, 0x44, 0x7e, 0x02, 0xe9, + 0xa7, 0x55, 0x19, 0xb8, 0x4f, 0x49, 0xab, 0x3b, 0xbd, 0x10, 0xcd, 0x76, 0xb7, 0xd1, 0x98, 0xc2, 0xde, 0xcd, 0x48, + 0xee, 0x8b, 0x4d, 0x1b, 0x26, 0xbe, 0xce, 0x7e, 0xb6, 0x5a, 0xed, 0xe7, 0xc8, 0x6c, 0xb8, 0x09, 0x8b, 0x75, 0x7f, + 0x3a, 0xc0, 0x2d, 0xfc, 0x3c, 0x43, 0x68, 0xc9, 0xfa, 0xd3, 0x01, 0x61, 0xfd, 0x69, 0xa3, 0x3d, 0xb0, 0x86, 0x76, + 0x66, 0x2b, 0xae, 0x21, 0x84, 0xe6, 0x74, 0x70, 0x64, 0x4a, 0x4a, 0x97, 0x6f, 0xbf, 0x68, 0x15, 0xd0, 0x4f, 0xd5, + 0x82, 0x97, 0x49, 0xdc, 0x81, 0xbe, 0xe8, 0x85, 0x7d, 0xba, 0xb5, 0x20, 0xc7, 0x47, 0x95, 0xab, 0x3d, 0x45, 0xd8, + 0xf4, 0xa4, 0x0e, 0x8b, 0x43, 0xd3, 0x8c, 0xeb, 0x52, 0xba, 0xef, 0x50, 0x33, 0xf2, 0xd1, 0xc1, 0x02, 0x10, 0xa4, + 0x82, 0x47, 0x56, 0xb8, 0x70, 0x4a, 0x21, 0x5c, 0x1c, 0x54, 0xb6, 0x60, 0x92, 0x93, 0x56, 0x37, 0x37, 0x96, 0xfe, + 0xb9, 0x8b, 0x68, 0x4a, 0x31, 0x25, 0x99, 0x2f, 0x99, 0x1b, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x00, + 0x8f, 0x08, 0xc4, 0x43, 0xea, 0x16, 0xc6, 0xc0, 0x2b, 0x9e, 0x36, 0x8b, 0x3e, 0x1b, 0xa0, 0xa3, 0x63, 0x4c, 0xfb, + 0x7f, 0x65, 0xf3, 0x36, 0x3c, 0x16, 0xf8, 0xd7, 0x80, 0x4c, 0x9b, 0xb2, 0x4c, 0x10, 0x90, 0x30, 0x6a, 0xca, 0x43, + 0xd8, 0x4b, 0x08, 0x67, 0xb6, 0x62, 0xd6, 0x67, 0x83, 0xe6, 0xb4, 0xac, 0xd8, 0xf1, 0x15, 0x1b, 0xb2, 0x4c, 0xb0, + 0x15, 0x1b, 0xae, 0x62, 0xf8, 0x3a, 0x83, 0x01, 0x41, 0x08, 0x00, 0x06, 0x00, 0xd0, 0x28, 0x88, 0xe6, 0x8b, 0x15, + 0xf1, 0x9b, 0xdd, 0xde, 0xe3, 0xb7, 0xc0, 0x02, 0xad, 0xb6, 0xff, 0x77, 0xa1, 0x0c, 0xd8, 0x53, 0x16, 0x26, 0x66, + 0x6e, 0x61, 0x55, 0x74, 0x00, 0x95, 0x12, 0x61, 0x0a, 0x03, 0x99, 0xfd, 0xcc, 0x40, 0x2d, 0xd0, 0x1a, 0xe4, 0x7d, + 0x3d, 0x68, 0x66, 0x70, 0xc4, 0xc0, 0x3b, 0x34, 0x64, 0x6a, 0x8c, 0x09, 0xe3, 0x1c, 0xa6, 0x98, 0x19, 0xf0, 0x4c, + 0xd3, 0xd6, 0x5a, 0x1a, 0x59, 0xae, 0x97, 0xf7, 0xfe, 0xd1, 0xb1, 0xea, 0x17, 0xcd, 0xf6, 0x00, 0xed, 0x13, 0x62, + 0x3f, 0x06, 0xb0, 0xc9, 0x5c, 0x6a, 0xc3, 0x7c, 0x1f, 0x75, 0x52, 0xfb, 0x09, 0x7f, 0x06, 0x6b, 0xb3, 0x03, 0x40, + 0x47, 0x86, 0xcd, 0xfa, 0xcb, 0x9a, 0xca, 0xeb, 0xe3, 0xce, 0x28, 0x95, 0xbb, 0xde, 0x9d, 0x0e, 0x34, 0xc5, 0xa1, + 0xb7, 0x1e, 0x2e, 0x1f, 0xea, 0x21, 0x60, 0xc6, 0x60, 0x6e, 0x99, 0xd1, 0xf7, 0x42, 0x24, 0x17, 0x44, 0x62, 0x69, + 0xb0, 0x86, 0xc1, 0xde, 0x3a, 0x38, 0x30, 0xd5, 0x58, 0x03, 0x9e, 0x27, 0x45, 0x20, 0x18, 0xf8, 0x08, 0xca, 0x80, + 0x26, 0xca, 0xdc, 0x86, 0x93, 0x8f, 0xcc, 0xfd, 0xc2, 0xe5, 0xed, 0x63, 0xe1, 0xb4, 0xad, 0xe6, 0x7a, 0xbc, 0x2c, + 0x70, 0x57, 0xde, 0x4b, 0x5a, 0x05, 0x37, 0xb2, 0x37, 0x79, 0xca, 0xdc, 0xad, 0xfb, 0x52, 0x9d, 0xdd, 0xcd, 0x74, + 0xca, 0x66, 0x3a, 0xdb, 0xcd, 0x84, 0x9a, 0x99, 0x6f, 0x59, 0x45, 0x9a, 0x93, 0x35, 0x51, 0x73, 0x2a, 0x7e, 0xa2, + 0x73, 0xd0, 0x8e, 0x72, 0x7b, 0xaf, 0x0a, 0x27, 0x57, 0x4e, 0x2e, 0xf7, 0x73, 0x43, 0x5c, 0x91, 0xb9, 0x50, 0x87, + 0x00, 0x2f, 0x2f, 0xca, 0xc7, 0x07, 0xb8, 0x14, 0xbf, 0xca, 0x91, 0x8b, 0x72, 0x2a, 0xa4, 0x96, 0x82, 0x45, 0xc8, + 0xa0, 0xaa, 0x8b, 0x81, 0xbd, 0xb4, 0x7b, 0x4f, 0xf4, 0x78, 0xbf, 0x8a, 0x98, 0x37, 0x30, 0xcf, 0x7d, 0x7c, 0x4f, + 0x53, 0xec, 0xd4, 0xc4, 0x19, 0xf9, 0x90, 0xc5, 0x39, 0xc8, 0x66, 0xfd, 0xea, 0xb5, 0xdf, 0x46, 0x1b, 0x17, 0xcd, + 0x58, 0xf4, 0xcc, 0x13, 0x27, 0x3f, 0x14, 0xc6, 0x38, 0xc0, 0x3a, 0xfa, 0x23, 0x4c, 0x2d, 0xd8, 0xb3, 0xc4, 0x53, + 0xe8, 0xe4, 0xd6, 0xa6, 0xdd, 0x85, 0x69, 0x77, 0x26, 0xad, 0x03, 0xe5, 0x80, 0x34, 0xbb, 0x32, 0x9d, 0x3b, 0xff, + 0x7d, 0x07, 0x2f, 0xdd, 0xae, 0x21, 0x12, 0xf7, 0xfc, 0x91, 0x31, 0x86, 0x78, 0x03, 0x36, 0xa2, 0xea, 0xe0, 0xe0, + 0x0f, 0xe7, 0x7d, 0x5b, 0xc9, 0x7d, 0xdf, 0x0a, 0x07, 0xb6, 0xc1, 0x54, 0xba, 0xbc, 0x91, 0xcc, 0x16, 0x60, 0xd7, + 0xb9, 0xff, 0x8d, 0x78, 0xf8, 0x22, 0x64, 0x5a, 0xac, 0xab, 0xf8, 0x2b, 0x39, 0x2a, 0x3d, 0x44, 0x35, 0x44, 0x20, + 0xad, 0xac, 0x4b, 0x43, 0xd3, 0xd1, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x81, 0x7d, 0x91, 0x5b, 0x27, + 0xf0, 0x68, 0x61, 0x8d, 0xa1, 0xb9, 0x2b, 0xbd, 0x93, 0x6c, 0x40, 0xd4, 0xfa, 0xb8, 0x43, 0x49, 0x24, 0x16, 0xd5, + 0x5d, 0x08, 0x87, 0xbb, 0x10, 0xcc, 0xcb, 0xa0, 0x6d, 0x10, 0xbb, 0xdd, 0x05, 0x6d, 0x03, 0xa7, 0x6e, 0x1b, 0xb8, + 0x3d, 0x18, 0x2c, 0xec, 0x7d, 0x78, 0x39, 0x96, 0x63, 0xe1, 0xaf, 0xc9, 0xec, 0x03, 0x40, 0xa0, 0xf6, 0x61, 0xc5, + 0x13, 0x07, 0x82, 0xc4, 0x19, 0x8e, 0xbe, 0xe7, 0xec, 0xc6, 0x5a, 0x0e, 0xcf, 0xe6, 0x0b, 0xcd, 0x46, 0xe6, 0x8e, + 0x1a, 0x54, 0x7c, 0x75, 0x3f, 0xaf, 0x9f, 0xb2, 0x9a, 0x6e, 0xfc, 0x1e, 0x84, 0x91, 0x70, 0xca, 0x0e, 0xa3, 0x90, + 0xb0, 0xc1, 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0x6d, 0xc2, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x08, 0xdb, + 0x78, 0x63, 0x41, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x45, 0xcd, 0xa8, 0xc1, 0x52, + 0x17, 0x94, 0xd9, 0x47, 0x18, 0x57, 0x17, 0x27, 0x26, 0x4e, 0x7b, 0xa9, 0x57, 0xff, 0x2d, 0x03, 0x03, 0x7c, 0x01, + 0x5e, 0x62, 0x61, 0x74, 0xd7, 0xbe, 0x6e, 0x40, 0x7d, 0xd9, 0x60, 0x03, 0xb4, 0x5a, 0xb5, 0xca, 0x67, 0xa0, 0xdc, + 0x35, 0x97, 0xb0, 0xd7, 0x5c, 0xc2, 0x5d, 0x73, 0x09, 0x7f, 0xcd, 0x25, 0xcc, 0x35, 0x97, 0xf0, 0xd7, 0x5c, 0x1e, + 0x84, 0x9f, 0x82, 0x38, 0x8e, 0x31, 0x87, 0xb8, 0x8a, 0xda, 0x46, 0xc6, 0x83, 0x0b, 0xcf, 0x7d, 0x96, 0xa8, 0x72, + 0xf9, 0xc3, 0x18, 0x72, 0x5b, 0xb6, 0x12, 0xc6, 0x6d, 0x8a, 0x29, 0x88, 0x9c, 0x7e, 0x70, 0x50, 0xba, 0x3b, 0x83, + 0x8f, 0x7a, 0xca, 0xf1, 0xd2, 0x3a, 0xd1, 0xfe, 0x01, 0x3a, 0x79, 0xf3, 0xeb, 0x63, 0x2a, 0xd7, 0x44, 0x38, 0x93, + 0xfb, 0xfd, 0xb6, 0xa7, 0x14, 0x9f, 0x32, 0x13, 0x9e, 0x9c, 0x27, 0xda, 0x88, 0x20, 0x08, 0x51, 0xa2, 0x70, 0x46, + 0xa4, 0xdd, 0xef, 0xde, 0x15, 0xde, 0xa8, 0xa2, 0xbc, 0x59, 0xc9, 0xe3, 0x1c, 0x9c, 0xd8, 0x8d, 0x15, 0x06, 0xea, + 0x82, 0x0b, 0x41, 0x66, 0x12, 0xfe, 0x68, 0xe6, 0x96, 0x9c, 0x65, 0x65, 0xd2, 0xc7, 0x66, 0x6e, 0x08, 0x58, 0x41, + 0xf6, 0x3d, 0xcc, 0x96, 0xb7, 0x29, 0xc5, 0x77, 0x69, 0x86, 0x87, 0xf2, 0x36, 0x2d, 0x42, 0x5b, 0x10, 0x7f, 0xf1, + 0x37, 0x8e, 0x23, 0x41, 0xc1, 0xdf, 0x27, 0xe2, 0x62, 0x8f, 0x6f, 0x78, 0x01, 0x2e, 0x33, 0x63, 0x51, 0x9d, 0x32, + 0xfc, 0x0d, 0x4b, 0x78, 0x08, 0x4e, 0xa6, 0xb1, 0x22, 0xf7, 0x38, 0xb0, 0x13, 0x92, 0x80, 0xc3, 0xd5, 0xed, 0x15, + 0xff, 0x0a, 0x17, 0x5f, 0xa5, 0xb3, 0x65, 0x73, 0x28, 0x6f, 0x23, 0x5c, 0x90, 0x37, 0xf0, 0xfa, 0xd6, 0xff, 0xcb, + 0xde, 0xdb, 0x36, 0xb7, 0x6d, 0x64, 0xeb, 0xa2, 0x7f, 0x45, 0x62, 0xd9, 0x0c, 0x60, 0x36, 0x29, 0xca, 0xe7, 0xcc, + 0x54, 0x5d, 0x50, 0x6d, 0x96, 0x63, 0xc7, 0x13, 0x67, 0x22, 0xdb, 0x63, 0x79, 0x32, 0xc9, 0xb0, 0x78, 0x19, 0x08, + 0x68, 0x0a, 0x70, 0x40, 0x80, 0x01, 0x40, 0x89, 0x34, 0x89, 0xff, 0x7e, 0x6a, 0xad, 0xd5, 0xaf, 0x20, 0x28, 0x7b, + 0xf6, 0x3e, 0xfb, 0xd3, 0xbd, 0x5f, 0x6c, 0xb1, 0xd1, 0x68, 0xf4, 0x7b, 0xaf, 0x5e, 0x2f, 0xcf, 0xd3, 0x93, 0xb1, + 0xba, 0x3d, 0x70, 0xd6, 0xa5, 0x14, 0x1d, 0x6f, 0x8a, 0xc3, 0xdb, 0xf3, 0xd9, 0x7e, 0x1b, 0x44, 0x6c, 0x17, 0x64, + 0x58, 0xeb, 0xa4, 0xe1, 0x3f, 0xd1, 0xd6, 0xc1, 0x62, 0x84, 0xfd, 0x5f, 0xd6, 0x03, 0x2f, 0x21, 0x35, 0x14, 0xb8, + 0x18, 0x6c, 0x38, 0x5a, 0xdb, 0x65, 0x1a, 0xb8, 0xa9, 0x41, 0xaf, 0xef, 0x29, 0x44, 0x79, 0xc9, 0x68, 0x6e, 0x04, + 0xeb, 0xc6, 0x90, 0x8b, 0xc3, 0x71, 0xb3, 0x1c, 0xf2, 0x92, 0xa6, 0xd3, 0x20, 0x94, 0xee, 0x2c, 0x6b, 0x48, 0xa2, + 0xec, 0x83, 0x50, 0xbb, 0xb6, 0xec, 0xb7, 0x81, 0xed, 0xcb, 0x1f, 0x0d, 0x63, 0xff, 0x62, 0xf9, 0x4c, 0x48, 0x17, + 0xf1, 0x1c, 0x04, 0x51, 0xfb, 0x79, 0x36, 0xdc, 0xf8, 0x17, 0xeb, 0x67, 0x42, 0xf9, 0x8d, 0xe7, 0xb6, 0x1c, 0x52, + 0x67, 0x2d, 0x7c, 0x61, 0x3c, 0x3c, 0xb8, 0x32, 0xb4, 0x1d, 0x0e, 0x42, 0xff, 0x6d, 0xd6, 0x08, 0x6e, 0x6c, 0x68, + 0x9f, 0x2f, 0x7c, 0xd8, 0xda, 0x68, 0xac, 0x29, 0xa6, 0x5b, 0xe8, 0xdf, 0x64, 0xb6, 0xb4, 0xa7, 0x51, 0xc9, 0x8b, + 0x53, 0xd3, 0x88, 0x85, 0x30, 0x60, 0xe8, 0x27, 0xf3, 0x01, 0x54, 0x73, 0xc7, 0x23, 0x90, 0xc9, 0x07, 0x7a, 0xb0, + 0x26, 0xb5, 0xea, 0xaf, 0x61, 0x26, 0xff, 0x8f, 0x54, 0x58, 0x8c, 0xee, 0xb6, 0x61, 0xa6, 0xfe, 0x88, 0xe4, 0x1f, + 0x2c, 0xe7, 0xbb, 0xd4, 0x0b, 0xb5, 0x1f, 0x0b, 0x2b, 0x30, 0x28, 0x51, 0x35, 0xa0, 0x07, 0x22, 0xa8, 0xca, 0x20, + 0xcd, 0xb0, 0x3a, 0x07, 0xfd, 0xee, 0x69, 0xd5, 0x91, 0x1c, 0xd2, 0x5a, 0x0d, 0xa9, 0x60, 0xaa, 0xd4, 0x20, 0x3f, + 0x1c, 0xee, 0x52, 0xa6, 0xcb, 0x80, 0x4b, 0xfa, 0x5d, 0xaa, 0x94, 0xc2, 0x7f, 0x22, 0x00, 0x9d, 0x83, 0x7b, 0x7c, + 0x39, 0x06, 0xd2, 0x0c, 0x0b, 0xbf, 0x35, 0x3b, 0xbe, 0x26, 0xe1, 0x36, 0x09, 0x2e, 0x06, 0x38, 0x47, 0x57, 0x61, + 0x79, 0x97, 0x42, 0x04, 0x55, 0x09, 0xf5, 0xad, 0x4c, 0x83, 0xd2, 0x56, 0x83, 0xb0, 0x26, 0xa1, 0xce, 0x24, 0x1b, + 0x95, 0xb6, 0x1b, 0x85, 0xd9, 0x22, 0xae, 0x67, 0x84, 0x35, 0x67, 0x33, 0xd5, 0xc0, 0xa4, 0xe1, 0xb8, 0x69, 0xb4, + 0x16, 0x15, 0x6a, 0x0a, 0xf3, 0x1a, 0x57, 0x95, 0xaa, 0xee, 0xe6, 0xd4, 0x52, 0x5a, 0xb6, 0x57, 0xdd, 0x24, 0x1b, + 0x72, 0x19, 0xca, 0x30, 0xd8, 0xc8, 0x11, 0x4c, 0x20, 0x49, 0xce, 0xfc, 0x8d, 0xfc, 0x43, 0x6d, 0xba, 0x16, 0x30, + 0xc7, 0x98, 0x65, 0xc3, 0x82, 0x5e, 0x81, 0x7b, 0xa0, 0x95, 0x9e, 0x4f, 0xb3, 0x8b, 0x3c, 0x48, 0x86, 0x85, 0x5e, + 0x36, 0x19, 0xff, 0x53, 0x18, 0x69, 0x32, 0x63, 0x25, 0x8b, 0x6c, 0x57, 0xa7, 0xc4, 0x79, 0x9c, 0xc0, 0xf6, 0x68, + 0x7a, 0xcb, 0xf7, 0x19, 0x44, 0x05, 0x81, 0x82, 0x19, 0xf3, 0x65, 0x17, 0xcf, 0x7d, 0x9f, 0x59, 0xa6, 0xee, 0xc3, + 0xc1, 0x98, 0xb1, 0xfd, 0x7e, 0x3f, 0xef, 0xf7, 0xd5, 0x7c, 0xeb, 0xf7, 0x93, 0x17, 0xe6, 0x6f, 0x0f, 0x18, 0x14, + 0xe4, 0x44, 0x34, 0x15, 0x22, 0xf8, 0x87, 0xe4, 0x19, 0x92, 0xd1, 0x1d, 0xf7, 0xb9, 0xe5, 0x6c, 0x59, 0x1d, 0x81, + 0x60, 0x1e, 0x0e, 0x97, 0x0a, 0xec, 0x5a, 0xa2, 0x48, 0xc8, 0xf2, 0x9f, 0x81, 0xf1, 0xcc, 0x7d, 0x80, 0x25, 0x03, + 0x10, 0xb6, 0xca, 0xd3, 0xf5, 0x9e, 0xaf, 0x82, 0x77, 0x3a, 0xde, 0x35, 0x56, 0x64, 0x20, 0x6e, 0x81, 0x8d, 0x58, + 0x6b, 0x0f, 0xc8, 0x99, 0x02, 0x1c, 0x2f, 0x0e, 0x87, 0x73, 0xf9, 0x4b, 0x37, 0x5b, 0x27, 0x50, 0x29, 0x70, 0x7b, + 0x74, 0x72, 0xf0, 0xdf, 0x81, 0x66, 0x50, 0x0e, 0xf3, 0x7a, 0xfb, 0x3b, 0x73, 0xf2, 0xd3, 0x53, 0xfc, 0x13, 0x1e, + 0xa2, 0xd3, 0x6f, 0xf7, 0xe6, 0x0f, 0x8a, 0xca, 0xc3, 0x41, 0x2d, 0xfe, 0x73, 0xce, 0x2b, 0xf8, 0x85, 0x6f, 0x02, + 0xb3, 0xc9, 0xd4, 0x3b, 0xf9, 0x26, 0xcf, 0x99, 0x7a, 0x8d, 0x57, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xed, + 0xc8, 0x89, 0x76, 0xca, 0x31, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, + 0x96, 0x78, 0x96, 0xce, 0x2f, 0x27, 0x75, 0xb9, 0xd3, 0x8a, 0xa7, 0x3d, 0xb0, 0xb8, 0xad, 0xc1, 0x0b, 0xe0, 0xde, + 0x62, 0xeb, 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, + 0x40, 0x30, 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, + 0x77, 0xf9, 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0x65, 0x6f, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, + 0x52, 0x3c, 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfc, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xbd, 0x7d, + 0x72, 0x61, 0x20, 0x81, 0xa6, 0x03, 0xf0, 0xe3, 0x55, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, + 0x05, 0xf7, 0xe9, 0x67, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa3, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x3c, + 0xfb, 0xa6, 0x02, 0x72, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, + 0x53, 0x71, 0x75, 0xa9, 0xd3, 0xc5, 0x8b, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, + 0x07, 0xf1, 0xb6, 0xb6, 0xa3, 0x3f, 0x76, 0x10, 0xe9, 0xb8, 0x27, 0x17, 0xea, 0x4b, 0x48, 0x25, 0x17, 0xea, 0x06, + 0x62, 0x17, 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0x75, 0x8d, 0x82, 0x95, 0x80, 0x33, 0xed, 0x1a, 0x0c, 0x36, 0xb0, + 0x6e, 0x59, 0x06, 0x7f, 0xc3, 0x35, 0x4d, 0xe0, 0x86, 0x45, 0xd6, 0x7b, 0x83, 0xad, 0x74, 0x0d, 0x8e, 0x96, 0x89, + 0x73, 0x29, 0xc9, 0xca, 0x16, 0x19, 0x57, 0x8f, 0x42, 0xaa, 0xa6, 0xfb, 0x5b, 0x51, 0x3f, 0x08, 0x91, 0x07, 0xab, + 0x94, 0x45, 0xc5, 0x0a, 0x64, 0xf6, 0xe0, 0x1f, 0x21, 0x23, 0x47, 0x39, 0x70, 0x14, 0xfa, 0x5b, 0x13, 0xe8, 0x3c, + 0x3f, 0x85, 0x3a, 0x8f, 0x04, 0x5b, 0xa9, 0x87, 0xc2, 0xca, 0x0b, 0x88, 0x0e, 0xb6, 0x30, 0x56, 0x79, 0x12, 0x2a, + 0x36, 0x65, 0x22, 0x8f, 0x83, 0x5a, 0x02, 0xc6, 0x0a, 0x82, 0x39, 0xcb, 0xa5, 0x0b, 0x52, 0xd5, 0xe8, 0x61, 0x91, + 0xb9, 0x9f, 0x0a, 0xca, 0xff, 0x54, 0xe5, 0x84, 0xeb, 0xcb, 0x10, 0xe0, 0x68, 0x9f, 0x82, 0x28, 0x31, 0xd6, 0x2f, + 0x5a, 0xbc, 0x93, 0x99, 0xb3, 0xa9, 0xed, 0x25, 0xc8, 0xd8, 0x0e, 0xbf, 0x42, 0x68, 0xb5, 0x50, 0x64, 0xd1, 0x70, + 0xc1, 0x74, 0x7b, 0x4a, 0xab, 0xee, 0x61, 0xc3, 0xb3, 0xd2, 0x43, 0xa5, 0xbe, 0x8d, 0x09, 0x2c, 0xab, 0x94, 0xe1, + 0xdb, 0x09, 0x55, 0x27, 0x06, 0x15, 0xeb, 0x86, 0x2d, 0xe1, 0x10, 0x8b, 0x49, 0x63, 0x9d, 0x0d, 0x78, 0xc4, 0x12, + 0xf8, 0x67, 0xc3, 0xc7, 0x6c, 0xc9, 0xa3, 0xc9, 0xe6, 0x6a, 0xd9, 0xef, 0x97, 0x5e, 0xe8, 0xd5, 0xb3, 0xec, 0x69, + 0x34, 0x9f, 0xe5, 0x73, 0x1f, 0x15, 0x17, 0x93, 0xc1, 0x60, 0xe3, 0x67, 0xc3, 0x21, 0x4b, 0x86, 0xc3, 0x49, 0xf6, + 0x14, 0x5e, 0x7b, 0xca, 0x23, 0xb5, 0xa4, 0x92, 0xab, 0x0c, 0xf6, 0xf7, 0x01, 0x8f, 0x7c, 0xd6, 0xf9, 0x69, 0xd9, + 0x74, 0xe9, 0x7e, 0x66, 0xc7, 0x5d, 0xe8, 0x0e, 0xb0, 0xf1, 0xb6, 0x41, 0x47, 0xfe, 0xf5, 0x0e, 0x29, 0x75, 0x93, + 0x01, 0xd8, 0x8d, 0x06, 0x38, 0x64, 0xaa, 0x97, 0x22, 0xab, 0x97, 0x32, 0xd5, 0x4b, 0xb2, 0x72, 0x09, 0x16, 0x12, + 0x53, 0xe5, 0x36, 0xb2, 0x72, 0xcb, 0x86, 0xeb, 0xe1, 0x60, 0x6b, 0xc5, 0x65, 0x73, 0x07, 0xf7, 0x85, 0x15, 0x05, + 0xfe, 0xdf, 0xb2, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x35, 0x3a, 0x26, 0xc1, 0x05, 0xe2, 0x9e, 0xdd, 0x82, 0x1d, 0x16, + 0xfe, 0x82, 0xeb, 0xe4, 0x98, 0xed, 0xf0, 0x51, 0xe8, 0x15, 0xec, 0xd6, 0x27, 0xa0, 0x5d, 0xb0, 0x35, 0x40, 0x36, + 0xb6, 0xc5, 0x47, 0x77, 0x87, 0xc3, 0xb5, 0xe7, 0xb3, 0x07, 0xfc, 0x71, 0x7e, 0x77, 0x38, 0xec, 0x3c, 0xa3, 0xde, + 0xbb, 0xe1, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xcd, 0x15, 0x8f, 0x27, 0x83, 0xc1, 0x8d, 0xbf, 0xe0, 0xf5, 0xec, 0x06, + 0xb4, 0x03, 0xe7, 0x0b, 0xa9, 0x6b, 0xf6, 0x6e, 0x79, 0xe6, 0x2d, 0x70, 0x6c, 0x6e, 0xe1, 0xe8, 0xed, 0xf7, 0xbd, + 0x3b, 0x1e, 0x79, 0xb7, 0xa4, 0x62, 0x5a, 0x71, 0xc5, 0xf1, 0xb6, 0xc5, 0xfd, 0x74, 0xc5, 0x43, 0x78, 0x84, 0x55, + 0x99, 0xde, 0x04, 0xef, 0x7d, 0xb6, 0xd2, 0x2c, 0x70, 0x0f, 0x98, 0x63, 0x4d, 0x76, 0x42, 0x33, 0xf1, 0x57, 0xd8, + 0x3f, 0x37, 0xaa, 0x7f, 0x68, 0xfe, 0x97, 0xba, 0x9f, 0xc0, 0xed, 0x8b, 0x2c, 0x48, 0xec, 0x3d, 0xbf, 0x61, 0xf7, + 0xdc, 0xb0, 0xcd, 0x9e, 0x99, 0xb2, 0x4f, 0x94, 0x1a, 0x3f, 0x52, 0xea, 0xda, 0x32, 0xac, 0x64, 0xee, 0xbe, 0x8c, + 0xc0, 0xe1, 0x80, 0xfc, 0x74, 0x87, 0x38, 0x08, 0xad, 0x9b, 0xac, 0xe6, 0x8a, 0x72, 0x2e, 0xb4, 0x65, 0xe6, 0xe5, + 0xc0, 0x62, 0x96, 0x52, 0x68, 0x2c, 0x00, 0x10, 0x4c, 0x0a, 0xad, 0xbd, 0x97, 0x01, 0xe4, 0x04, 0x0d, 0x7f, 0x6c, + 0xae, 0x8a, 0xb2, 0x96, 0x2d, 0x09, 0x51, 0xb6, 0xeb, 0xe1, 0x25, 0x42, 0xa6, 0xf5, 0xfb, 0xe7, 0x44, 0xb2, 0x36, + 0xa9, 0xae, 0x6a, 0xb4, 0x04, 0x54, 0x64, 0x09, 0x98, 0xf8, 0x95, 0xe6, 0x13, 0x80, 0x27, 0x1d, 0x0f, 0xaa, 0xa7, + 0xbc, 0x66, 0x82, 0xc8, 0x36, 0x2a, 0x7f, 0x52, 0xbc, 0x40, 0x32, 0x82, 0xe2, 0x69, 0xad, 0x32, 0x16, 0x86, 0x79, + 0xa0, 0x80, 0xbc, 0x7b, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, + 0xe8, 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x39, 0x89, 0xae, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, + 0x67, 0xd1, 0xd3, 0x6a, 0x3e, 0x21, 0x25, 0xd9, 0xe1, 0x90, 0x8d, 0xaa, 0xba, 0x58, 0x4f, 0x43, 0xf9, 0xd3, 0x43, + 0xf0, 0xf5, 0x82, 0x7a, 0x4d, 0x56, 0xa9, 0x7e, 0x4a, 0x95, 0xf2, 0xa2, 0xe1, 0xa5, 0xff, 0xb4, 0x92, 0xfb, 0x1e, + 0x90, 0xd6, 0xf2, 0x92, 0xcb, 0xf7, 0x23, 0xc4, 0x18, 0xf1, 0x03, 0xaf, 0xe4, 0x11, 0x0b, 0xd5, 0x14, 0xae, 0x79, + 0x84, 0x20, 0x6f, 0x99, 0x0e, 0xfe, 0xd6, 0x13, 0xa7, 0xfb, 0x13, 0xa5, 0x5d, 0x7c, 0x61, 0x51, 0xf7, 0x64, 0x6d, + 0xdd, 0x80, 0x1c, 0x6c, 0x98, 0x2e, 0x0a, 0xb2, 0x4d, 0x69, 0x04, 0x6d, 0xb4, 0x1c, 0xd8, 0x70, 0x2a, 0xb5, 0xe1, + 0xcc, 0x35, 0x04, 0xf7, 0xf9, 0x79, 0x3a, 0x5a, 0xc0, 0x87, 0x54, 0xb7, 0x97, 0xf8, 0xf9, 0xb0, 0xe1, 0x11, 0x90, + 0xd9, 0x11, 0x9f, 0xd9, 0x44, 0xd2, 0x49, 0x9d, 0x2b, 0x60, 0xb7, 0xb3, 0x6b, 0x90, 0x23, 0x66, 0xee, 0x2b, 0x54, + 0xdf, 0xa2, 0x01, 0x57, 0xc6, 0xda, 0xd7, 0x24, 0x63, 0xe1, 0x55, 0x39, 0x0d, 0x07, 0x00, 0x43, 0x97, 0xd1, 0xd7, + 0x96, 0x9b, 0x2c, 0xfb, 0xb9, 0x80, 0x20, 0x88, 0x92, 0x78, 0x7c, 0xc0, 0xfb, 0xb2, 0x1a, 0x6a, 0x94, 0x7c, 0x2c, + 0x1b, 0xa9, 0xf4, 0x4a, 0xf4, 0x77, 0x63, 0x2e, 0x31, 0xe0, 0x75, 0xd5, 0x16, 0x14, 0xce, 0xf3, 0xc3, 0xe1, 0x3c, + 0x1f, 0x19, 0xcf, 0x32, 0x50, 0xad, 0x4c, 0xeb, 0x20, 0x36, 0xf3, 0xc5, 0xc2, 0x5f, 0xec, 0x9c, 0x44, 0x44, 0x41, + 0x60, 0x47, 0xc2, 0x83, 0x48, 0xfd, 0xaa, 0xf2, 0x74, 0xa7, 0xfa, 0x6c, 0xbf, 0xb0, 0x89, 0xf4, 0x82, 0x92, 0xc9, + 0x27, 0xc1, 0x5e, 0xf5, 0x77, 0x10, 0x36, 0x84, 0x37, 0xaf, 0x7a, 0x9d, 0x65, 0x6a, 0x56, 0x82, 0x84, 0x19, 0x73, + 0x04, 0x8f, 0xc3, 0x4e, 0x63, 0x1b, 0x1e, 0x5b, 0x70, 0x74, 0xde, 0x9a, 0xdd, 0xb1, 0x15, 0xbb, 0x55, 0x75, 0x5a, + 0xf0, 0x70, 0x3a, 0xbc, 0x0c, 0x70, 0xf5, 0xad, 0xcf, 0x39, 0xbf, 0xa3, 0x13, 0x6c, 0x3d, 0xe0, 0xd1, 0x44, 0xcc, + 0xd6, 0x4f, 0x23, 0xb5, 0x78, 0xd6, 0x43, 0xbe, 0xa0, 0xf5, 0x27, 0x66, 0x77, 0x26, 0xf9, 0x6e, 0xc0, 0x17, 0x93, + 0xf5, 0xd3, 0x08, 0x5e, 0x7d, 0x0a, 0x56, 0x8c, 0xcc, 0x99, 0x65, 0xeb, 0xa7, 0x11, 0x8e, 0xd9, 0xdd, 0xd3, 0x88, + 0x46, 0x6d, 0x25, 0xf7, 0xa5, 0xdb, 0x06, 0x84, 0x95, 0x5b, 0x16, 0xc3, 0x6b, 0x20, 0x9e, 0x69, 0x23, 0xe9, 0x5a, + 0x1a, 0x7a, 0x63, 0x1e, 0x4e, 0xe3, 0x60, 0x4d, 0xad, 0x90, 0x67, 0x86, 0x98, 0xc5, 0x4f, 0xa3, 0x39, 0x5b, 0x61, + 0x45, 0x36, 0x3c, 0x1e, 0x5c, 0x4e, 0x36, 0x57, 0x7c, 0x0d, 0xe4, 0x67, 0x93, 0x8d, 0xd9, 0xa2, 0x6e, 0xb9, 0x98, + 0x6d, 0x9e, 0x46, 0xf3, 0xc9, 0x0a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x0d, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, + 0x3d, 0xb6, 0x1e, 0x07, 0x77, 0x6c, 0x7d, 0x19, 0xdc, 0xb2, 0xf5, 0x18, 0x88, 0x38, 0xa8, 0xdf, 0xbd, 0x0d, 0x2c, + 0xbe, 0x88, 0xad, 0x2f, 0x4d, 0xda, 0xe6, 0x69, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xc9, 0xbc, 0x15, 0x83, + 0x4b, 0xc8, 0xd2, 0x8b, 0xd9, 0x66, 0x78, 0xc9, 0xd6, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0xee, 0xf8, 0x2d, 0x4b, 0xf8, + 0xaa, 0x89, 0xaf, 0x36, 0xa0, 0x11, 0x3d, 0xca, 0xa0, 0xaf, 0xa0, 0x66, 0xe6, 0xbc, 0xb2, 0x30, 0x2a, 0xf7, 0x2d, + 0x38, 0xa0, 0x20, 0x6d, 0x03, 0x04, 0x49, 0x3c, 0xbb, 0x57, 0xe1, 0xfa, 0x46, 0x0a, 0x03, 0x6e, 0x02, 0x33, 0x60, + 0x60, 0xfa, 0x19, 0xfc, 0xb0, 0xd2, 0x25, 0x42, 0x9c, 0xfd, 0x94, 0x92, 0x64, 0x9e, 0x9f, 0x8a, 0x34, 0x77, 0x0b, + 0xd7, 0x29, 0xcc, 0x8a, 0x02, 0xd5, 0x4f, 0x49, 0x69, 0x60, 0xa1, 0x12, 0x99, 0x4a, 0xc1, 0x2f, 0x9b, 0xf3, 0x28, + 0x3b, 0x46, 0xe7, 0x3a, 0xbf, 0x9c, 0x38, 0xa7, 0x93, 0xbe, 0xff, 0xc0, 0x31, 0x6c, 0x21, 0x03, 0x17, 0xfe, 0xd4, + 0x13, 0xc6, 0xa9, 0x15, 0x88, 0xa9, 0xe4, 0xd9, 0x53, 0xf8, 0x4c, 0x68, 0x75, 0x74, 0xe1, 0xfb, 0x41, 0xa1, 0x4d, + 0xd2, 0x2d, 0x48, 0x52, 0xf0, 0x14, 0x3d, 0xe7, 0xbc, 0x0d, 0x54, 0x8a, 0x11, 0x2d, 0x88, 0xb4, 0xb5, 0xcc, 0x1c, + 0xa4, 0x2d, 0xcd, 0x77, 0x4d, 0xfc, 0x1c, 0x16, 0x70, 0x11, 0x2d, 0x6c, 0x0d, 0x8f, 0xaa, 0x58, 0xb9, 0x37, 0x79, + 0x8e, 0x70, 0x46, 0x97, 0x32, 0x01, 0x70, 0xbd, 0x5f, 0x87, 0xb5, 0xc2, 0x2b, 0x6a, 0x16, 0x79, 0x51, 0xd3, 0x27, + 0x5b, 0xe0, 0x3e, 0x16, 0x25, 0x0a, 0x9c, 0xb5, 0x60, 0xc0, 0x56, 0x58, 0xb2, 0x93, 0xc2, 0xa6, 0x68, 0x09, 0xbd, + 0x3d, 0x7e, 0x3a, 0xa8, 0x99, 0x0c, 0xa0, 0x09, 0xa0, 0xf1, 0xf8, 0x17, 0x80, 0x9a, 0xde, 0xd4, 0x62, 0x5d, 0x05, + 0xa5, 0x52, 0x6e, 0xc2, 0xcf, 0xc0, 0x30, 0xc3, 0x0f, 0x85, 0xdc, 0x26, 0x4a, 0xe4, 0xfc, 0x58, 0x94, 0x62, 0x59, + 0x8a, 0x2a, 0x69, 0x37, 0x14, 0x3c, 0x22, 0xdc, 0x06, 0x8d, 0x99, 0xdb, 0x13, 0x5d, 0xb4, 0x22, 0x94, 0x63, 0xb3, + 0x8e, 0x91, 0x46, 0x99, 0x9d, 0xec, 0x3a, 0x59, 0x68, 0xbf, 0xaf, 0x72, 0xc8, 0x3a, 0x60, 0x8d, 0xe4, 0xeb, 0x35, + 0x87, 0x6e, 0x1b, 0xe5, 0xc5, 0x83, 0xe7, 0x2b, 0x38, 0xcd, 0xf1, 0xc4, 0xee, 0x7a, 0xdd, 0x29, 0x12, 0xf1, 0x0a, + 0x27, 0x55, 0x3e, 0x92, 0x85, 0xe3, 0xce, 0x9d, 0xd6, 0x62, 0x55, 0xb9, 0xac, 0xa7, 0x16, 0x47, 0x04, 0x3e, 0x95, + 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, 0x11, + 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0x8b, 0x5c, 0x0f, + 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, 0x3c, + 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, 0x5d, + 0x28, 0xe7, 0x4c, 0xc5, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, 0x8c, + 0x8e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x96, 0xab, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, 0xc6, + 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, 0x98, + 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x7b, 0x59, 0x14, 0x38, 0x80, 0xab, + 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0xf6, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, 0xcc, + 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, 0xb4, + 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x8f, 0x5f, 0xa7, + 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7e, 0x41, 0x11, 0x17, 0x35, 0xb8, 0xf2, + 0x4e, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, 0x0e, + 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x44, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xcc, 0x59, 0x35, 0x5a, 0xa8, 0xcc, 0x08, + 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xe3, 0x3d, 0xba, 0xab, 0xce, 0x32, + 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, 0x77, + 0x9d, 0xe5, 0xab, 0x9b, 0xad, 0xa1, 0xa8, 0xd4, 0x4a, 0x52, 0x1c, 0x64, 0xb8, 0x6e, 0x2b, 0x1f, 0x2e, 0x2e, 0xa0, + 0x67, 0x8c, 0x44, 0xe6, 0xf9, 0x13, 0xf9, 0x12, 0x9c, 0x33, 0xce, 0x0a, 0x81, 0x09, 0x63, 0xf5, 0xae, 0xb5, 0x54, + 0x1a, 0x52, 0x8c, 0x1d, 0x8d, 0xb2, 0xac, 0xb2, 0x74, 0x99, 0xad, 0x25, 0x6c, 0x59, 0x4e, 0x6e, 0x61, 0xcb, 0x4c, + 0x56, 0xf3, 0x7d, 0xc5, 0x1d, 0x94, 0x6f, 0xb6, 0xce, 0xf8, 0x5e, 0x22, 0x7b, 0xb7, 0x81, 0x12, 0x5e, 0x8c, 0xfe, + 0x82, 0xf4, 0xdb, 0x0c, 0xe3, 0x94, 0xdb, 0x4a, 0x5a, 0x80, 0xd3, 0x3f, 0x1c, 0xde, 0x57, 0x18, 0x34, 0x38, 0xc2, + 0x38, 0xb2, 0x7e, 0xff, 0xb6, 0xf2, 0x6a, 0x4c, 0xd4, 0xf1, 0x59, 0xfd, 0x7e, 0x45, 0x0f, 0xa7, 0xd5, 0x68, 0x95, + 0x6e, 0x91, 0x9d, 0xd0, 0xc6, 0xca, 0x0f, 0x6a, 0x05, 0xcc, 0xde, 0xfa, 0x7c, 0x3a, 0x00, 0x1d, 0x0b, 0x90, 0x68, + 0x36, 0x13, 0x89, 0x39, 0xe9, 0x9e, 0x84, 0xc7, 0x07, 0x16, 0x38, 0xc0, 0x54, 0xfc, 0x9f, 0xc2, 0x9b, 0x81, 0x0d, + 0x1a, 0x25, 0xfa, 0x1a, 0x5d, 0xd5, 0xe6, 0x46, 0xc7, 0x4b, 0x4f, 0x21, 0x91, 0x15, 0xac, 0x9a, 0xfb, 0x72, 0x03, + 0xa7, 0x3d, 0xd4, 0x1c, 0x2a, 0x4b, 0xf0, 0xb7, 0x5f, 0xe6, 0x87, 0xc3, 0x3a, 0x83, 0xc2, 0x76, 0x6b, 0xa1, 0xbd, + 0x31, 0x4b, 0x35, 0x54, 0x84, 0x83, 0xce, 0x57, 0x62, 0x56, 0x8f, 0xe8, 0xef, 0xf9, 0xe1, 0xb0, 0x22, 0x30, 0xe0, + 0xb0, 0x94, 0x99, 0x68, 0xa1, 0x58, 0x5a, 0x67, 0x33, 0xaa, 0x03, 0x0f, 0x4c, 0xcc, 0x59, 0xb8, 0x03, 0xd0, 0x26, + 0xb5, 0x0a, 0xf4, 0x2a, 0xa2, 0x9f, 0xb8, 0x5f, 0xdb, 0xaf, 0xd7, 0x23, 0xb3, 0x74, 0xe4, 0xc6, 0x58, 0x00, 0x70, + 0xe0, 0x79, 0x4d, 0xf2, 0x9c, 0x7c, 0x0d, 0xed, 0x9e, 0x5c, 0xc8, 0x9f, 0xa0, 0x6c, 0xe1, 0xb9, 0x6a, 0x5a, 0x59, + 0xac, 0xb8, 0xaa, 0x5e, 0x5d, 0xf0, 0xca, 0x64, 0x5a, 0xa5, 0x95, 0xa8, 0x94, 0x60, 0x40, 0x5d, 0xe2, 0xb5, 0xa6, + 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x7e, 0x69, 0x1c, 0x3e, + 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0x2b, 0x1f, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, 0xc5, 0xc4, + 0xee, 0xd0, 0xbc, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, 0x01, 0x2f, + 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x2a, 0x26, 0xc0, 0x0f, + 0x4a, 0xad, 0xe9, 0xbd, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, 0xe7, 0xe3, + 0xf9, 0xa5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x79, 0xab, 0x7f, 0x98, 0xea, 0x5b, 0xe8, 0x4e, + 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, 0x1c, 0xec, + 0x0d, 0x70, 0xe2, 0x97, 0x87, 0x83, 0xb8, 0xca, 0x7d, 0x76, 0xde, 0x35, 0xb2, 0x72, 0x00, 0x2b, 0x88, 0x82, 0x71, + 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xd5, 0xf8, 0xf8, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0xe4, 0x4f, 0x9f, + 0x03, 0x69, 0x59, 0xbf, 0x1f, 0xbd, 0xb8, 0x9c, 0x3e, 0x1f, 0x46, 0x01, 0x38, 0x76, 0xd9, 0xcb, 0xcb, 0x98, 0xaf, + 0x2e, 0x99, 0x65, 0x0a, 0x8b, 0x7c, 0x33, 0xa0, 0xba, 0x64, 0xb5, 0x74, 0xbd, 0x02, 0x2c, 0x5d, 0x7e, 0xf3, 0x10, + 0xa6, 0x06, 0x34, 0xb2, 0xe6, 0xee, 0x34, 0xd7, 0x02, 0xa5, 0x9e, 0xf7, 0x33, 0x43, 0xbe, 0x2e, 0x83, 0xae, 0x20, + 0xdd, 0xf3, 0x88, 0xf4, 0x72, 0x2f, 0x9d, 0xee, 0xf7, 0xa5, 0x00, 0x4b, 0x7d, 0x29, 0x3e, 0x83, 0xc2, 0xa2, 0xf1, + 0x8d, 0x00, 0x6d, 0x0d, 0xd5, 0xb4, 0x57, 0x8a, 0xaa, 0x17, 0xf4, 0x4a, 0xf1, 0xb9, 0xa7, 0x87, 0xca, 0x7c, 0x59, + 0x3a, 0xfa, 0x9f, 0x50, 0x73, 0xc1, 0x09, 0x31, 0x13, 0x73, 0x00, 0x95, 0xa0, 0x8d, 0x6f, 0x75, 0xb4, 0xf1, 0xa9, + 0x5e, 0xc5, 0x4d, 0x9f, 0xd7, 0xd6, 0x32, 0x27, 0x84, 0x4d, 0xf7, 0x12, 0xa0, 0x22, 0xaf, 0x84, 0x47, 0xb0, 0xfc, + 0xf2, 0x87, 0x3c, 0x5d, 0x21, 0x5a, 0xc7, 0x3d, 0xcb, 0x5c, 0x1a, 0xfb, 0x37, 0x06, 0xd3, 0xd7, 0xb7, 0xdb, 0x22, + 0x3f, 0x35, 0x31, 0x61, 0x3d, 0x56, 0xf4, 0xcd, 0xbb, 0x70, 0x25, 0x50, 0xe0, 0x50, 0x22, 0xb1, 0x4d, 0x15, 0x8a, + 0x78, 0x90, 0xf4, 0xe9, 0xa2, 0xf5, 0x69, 0x80, 0xa9, 0xb5, 0x1c, 0x98, 0x43, 0xb8, 0x8a, 0x0b, 0x1f, 0x3d, 0x7d, + 0x8b, 0x59, 0x38, 0x9f, 0x78, 0x1f, 0xbd, 0x62, 0x64, 0x3e, 0xee, 0xa3, 0x52, 0x49, 0xff, 0x3c, 0x1c, 0x66, 0xd5, + 0xdc, 0x77, 0xe8, 0x23, 0x3d, 0x54, 0xb9, 0xa0, 0xec, 0x8d, 0x31, 0x89, 0x40, 0x69, 0x8c, 0xf7, 0x71, 0x70, 0x9c, + 0xf7, 0x69, 0x00, 0xa9, 0x7d, 0xe2, 0x3d, 0x29, 0x39, 0x3c, 0xe7, 0x98, 0x13, 0x4a, 0x2b, 0xc2, 0x2a, 0xbe, 0xc8, + 0x50, 0xae, 0x3b, 0xa5, 0x60, 0x92, 0x43, 0x82, 0xe1, 0xaf, 0x9a, 0x37, 0xb1, 0x02, 0x61, 0xd7, 0xcc, 0xab, 0xd1, + 0x93, 0x2a, 0x09, 0x4b, 0x01, 0x47, 0x65, 0xe6, 0x19, 0xf6, 0x86, 0x27, 0x86, 0x91, 0x83, 0xe5, 0xfe, 0xa8, 0x4e, + 0x44, 0xee, 0xd1, 0x05, 0x46, 0x65, 0xe1, 0x79, 0x43, 0x57, 0x1a, 0x54, 0x92, 0x1d, 0x7f, 0xc5, 0x35, 0xa0, 0xb6, + 0xc6, 0x88, 0xa1, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, 0x95, 0xdc, 0xf5, + 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, 0x2c, 0x85, 0x23, + 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, 0x42, 0x9a, 0x6c, + 0x5f, 0xcf, 0xdf, 0x1b, 0x41, 0x56, 0x6e, 0x39, 0xc7, 0xc3, 0xe2, 0x1b, 0x67, 0x5f, 0xe5, 0xe4, 0x29, 0x66, 0x19, + 0xe9, 0x9d, 0x62, 0x5e, 0xc0, 0x9f, 0xca, 0x52, 0x9f, 0xa3, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, 0x97, 0xde, 0xa6, + 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0xf7, 0xf1, 0x48, 0x9e, 0x61, 0x1b, 0x96, 0xb0, 0xd0, 0x2a, 0x18, 0x03, 0x48, + 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x0e, 0x87, 0xf3, 0x8d, 0x39, 0x4b, 0xf6, 0xe0, 0xfa, 0xca, 0x13, 0xf3, 0x0e, + 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x1b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, 0x62, 0xad, 0x63, + 0xa9, 0xac, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0xbf, 0x77, 0x83, 0xab, 0x6b, 0x63, 0x50, + 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0xb3, 0x9c, 0x7c, 0xf9, 0xad, 0x9d, 0x03, 0x82, + 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, 0x33, 0xd8, 0xc4, + 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, 0xab, 0x85, 0x48, + 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, 0x5e, 0x27, 0x68, + 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, 0x7b, 0x99, 0x13, + 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, 0x74, 0x28, 0x59, + 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, 0x0a, 0x5c, 0x08, + 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xf9, 0xb4, 0x90, 0xa6, 0x81, 0x7c, 0x5a, 0x39, 0xe6, + 0x81, 0x9d, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0xe5, 0x1c, 0xab, 0x88, 0xde, 0xe7, 0x1f, 0x2a, 0x7b, + 0xfa, 0x20, 0xc2, 0x46, 0x05, 0x1a, 0x4b, 0x89, 0xb1, 0x91, 0xe3, 0xdf, 0x12, 0x65, 0x43, 0x86, 0x80, 0x10, 0xd2, + 0x46, 0x4e, 0x3f, 0xac, 0x2f, 0x6f, 0x33, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, 0xa9, 0x47, 0x3c, + 0x5e, 0x6b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, 0x28, 0x17, 0x3c, + 0xe7, 0x15, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xc8, 0xe9, 0xf3, 0x15, 0xf0, 0x4c, 0x40, 0xa0, 0x63, + 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0x37, 0x48, 0x94, 0xfa, 0x9a, + 0x94, 0xa4, 0xd7, 0xa2, 0xc6, 0x2b, 0xb1, 0x8a, 0x48, 0x20, 0x43, 0x0d, 0x11, 0xab, 0xea, 0xa9, 0x7b, 0x55, 0x4c, + 0x06, 0x83, 0xca, 0x97, 0xd3, 0x13, 0x6f, 0x68, 0xa8, 0xbc, 0xeb, 0x8a, 0x76, 0x7a, 0xa2, 0x95, 0xf2, 0x16, 0xd2, + 0x12, 0x34, 0x0d, 0x23, 0xcd, 0xa1, 0xd4, 0x95, 0x74, 0x37, 0x06, 0xf1, 0x25, 0x13, 0x3d, 0xdb, 0xa9, 0x1d, 0xa5, + 0x2d, 0x69, 0x0f, 0x21, 0x3d, 0x77, 0xc9, 0xc7, 0x2c, 0xe4, 0xea, 0x4e, 0x39, 0x29, 0xaf, 0x42, 0x74, 0x72, 0xdf, + 0x63, 0x48, 0x04, 0xfa, 0x9c, 0x63, 0x58, 0x17, 0x0d, 0x75, 0x0e, 0x2b, 0xc4, 0x6c, 0xa1, 0x84, 0xf9, 0x92, 0xf1, + 0x54, 0x32, 0x68, 0x00, 0x64, 0xc0, 0x67, 0x2f, 0x03, 0xcb, 0x5f, 0x41, 0xfc, 0x68, 0xe3, 0xc3, 0xe1, 0xcf, 0x9a, + 0x42, 0x6c, 0xff, 0x84, 0xcd, 0x10, 0x1e, 0xd5, 0x03, 0x9e, 0xf9, 0x26, 0x4e, 0xd0, 0x0a, 0x48, 0xca, 0xec, 0x68, + 0x22, 0x7b, 0xd5, 0x43, 0x38, 0x95, 0x15, 0xa8, 0xa3, 0xac, 0xb3, 0x12, 0x7e, 0x84, 0xa9, 0x6e, 0x25, 0xd6, 0x02, + 0x6d, 0xae, 0x56, 0xac, 0x05, 0x70, 0xe0, 0xe7, 0x10, 0x3c, 0x91, 0xcf, 0xc1, 0xc5, 0xa0, 0x00, 0x9f, 0x03, 0xe0, + 0x45, 0xee, 0xc2, 0x83, 0x79, 0x64, 0x59, 0x8d, 0x30, 0x1c, 0x55, 0xc4, 0xfa, 0x35, 0xdb, 0x91, 0x0f, 0xdc, 0x8e, + 0xf1, 0xb9, 0xf6, 0x58, 0xb2, 0x1c, 0x8c, 0x32, 0xf7, 0x6a, 0x89, 0x9e, 0x37, 0x69, 0xdc, 0x8c, 0x9e, 0xec, 0x6b, + 0xf9, 0xbf, 0xa0, 0x97, 0x41, 0x7f, 0x0b, 0xb7, 0xbc, 0xe6, 0x77, 0x0b, 0x22, 0xcd, 0xf4, 0x0a, 0x22, 0x65, 0xd4, + 0x88, 0x8c, 0x21, 0x6c, 0x52, 0xdd, 0xdc, 0x26, 0xd5, 0x85, 0x80, 0xa7, 0x23, 0x52, 0x5d, 0x0b, 0x69, 0x23, 0x9f, + 0xd6, 0x81, 0x8c, 0x45, 0x7a, 0xf7, 0xc3, 0xdf, 0x5e, 0x7e, 0x7a, 0xfb, 0xcb, 0x0f, 0x8b, 0xb7, 0xef, 0xde, 0xbc, + 0x7d, 0xf7, 0xf6, 0xd3, 0x6f, 0x04, 0xe1, 0x31, 0x15, 0x2a, 0xc3, 0x87, 0xf7, 0x37, 0x6f, 0x9d, 0x0c, 0xb6, 0x37, + 0x43, 0xd6, 0xbe, 0x91, 0x83, 0x21, 0x10, 0xd9, 0x20, 0x64, 0x90, 0x9d, 0xda, 0xf6, 0x67, 0x62, 0x8e, 0xb1, 0x77, + 0x02, 0x93, 0x2d, 0xe0, 0x1c, 0xcb, 0xbc, 0x64, 0x44, 0xae, 0x0a, 0xad, 0x1f, 0xd0, 0x82, 0x6b, 0x70, 0x91, 0x49, + 0xf3, 0xbb, 0x5f, 0x08, 0x62, 0x9f, 0x56, 0x52, 0xee, 0xab, 0x6d, 0xcd, 0xf3, 0xed, 0xfd, 0x5e, 0xc2, 0xf9, 0xcf, + 0xa5, 0x11, 0xb5, 0x00, 0x07, 0xe0, 0x73, 0xf8, 0xe3, 0x4a, 0x5b, 0xd2, 0x64, 0x16, 0xed, 0x67, 0x0c, 0x41, 0x97, + 0x06, 0x1f, 0xc4, 0x1e, 0x79, 0xa9, 0x4f, 0x16, 0x12, 0xb8, 0x23, 0x86, 0x4f, 0x2b, 0x82, 0x5e, 0x31, 0xa2, 0xb8, + 0xe4, 0x0a, 0x95, 0x52, 0xf2, 0x6f, 0x94, 0x5d, 0x54, 0xc8, 0x59, 0xc1, 0xee, 0x15, 0x39, 0x32, 0x7e, 0x10, 0x4c, + 0x7c, 0x39, 0xb8, 0xff, 0x12, 0xef, 0x70, 0xa6, 0x38, 0x92, 0x13, 0xfe, 0x90, 0x61, 0x60, 0x7f, 0x0e, 0x3e, 0xaf, + 0x0e, 0xf3, 0xf2, 0x46, 0x9f, 0x72, 0x4b, 0x3e, 0x9e, 0x2c, 0xaf, 0xc0, 0x60, 0xbf, 0x54, 0xcd, 0x5d, 0xf3, 0x7a, + 0xb6, 0x9c, 0xb3, 0xfd, 0x2c, 0x9a, 0x07, 0x77, 0x6c, 0x96, 0xcd, 0x83, 0x55, 0xc3, 0xd7, 0xec, 0x96, 0xaf, 0xad, + 0xaa, 0xad, 0xed, 0xaa, 0x4d, 0x36, 0xfc, 0x16, 0x24, 0x84, 0x9b, 0xcc, 0x03, 0xde, 0xe3, 0x3b, 0x9f, 0x6d, 0x40, + 0xa2, 0x5d, 0xb1, 0x0d, 0x5c, 0xc4, 0xd6, 0xfc, 0x87, 0xca, 0xdb, 0xb0, 0x92, 0x9d, 0x8f, 0x59, 0x8e, 0xf3, 0xcf, + 0x87, 0x07, 0xb4, 0x17, 0xea, 0x67, 0x97, 0xea, 0xd9, 0x44, 0xd9, 0xcd, 0x36, 0xa3, 0xc5, 0x7d, 0x5a, 0x6d, 0xc2, + 0x0c, 0x3d, 0xcb, 0xe1, 0xa3, 0xad, 0x14, 0xfc, 0xf4, 0x02, 0xbf, 0x64, 0x47, 0x6d, 0xa5, 0x6d, 0xbb, 0x2a, 0xb1, + 0x15, 0xb4, 0x28, 0xb2, 0x5a, 0xe1, 0x81, 0x39, 0x7f, 0x01, 0x0b, 0x18, 0x7b, 0x8e, 0x73, 0x5e, 0xfb, 0x23, 0x64, + 0xbc, 0x77, 0x00, 0xd0, 0x32, 0xc7, 0x01, 0x1e, 0xb1, 0x62, 0x14, 0x0d, 0xde, 0xf9, 0xa5, 0xb2, 0x5a, 0x69, 0x4e, + 0x42, 0xdb, 0x88, 0x55, 0xcb, 0x91, 0xaa, 0x19, 0x91, 0x3e, 0x48, 0xcf, 0xfb, 0x1e, 0x51, 0x0d, 0xf6, 0x64, 0x5e, + 0x07, 0xf6, 0xe9, 0x55, 0x6b, 0x55, 0x77, 0x7e, 0x4f, 0x95, 0x2e, 0x39, 0xb2, 0xe5, 0xa7, 0xcb, 0xf0, 0x41, 0xfd, + 0x29, 0xb9, 0x3e, 0x14, 0x38, 0xc2, 0x63, 0x15, 0x70, 0xbe, 0x5e, 0x89, 0x76, 0x27, 0xc2, 0xae, 0x5c, 0x02, 0x42, + 0x7c, 0x49, 0xd3, 0x1c, 0x8f, 0x23, 0x9a, 0x88, 0xb0, 0x89, 0xd1, 0x5f, 0xd8, 0x7d, 0x28, 0xb1, 0x9c, 0xe7, 0x1a, + 0x94, 0x5c, 0x32, 0x78, 0x4f, 0xda, 0x6b, 0xd0, 0x2c, 0xaf, 0x4a, 0x4d, 0x26, 0x72, 0x50, 0x3e, 0x1c, 0x0a, 0xd8, + 0x4b, 0x8d, 0x9f, 0x26, 0xfc, 0x84, 0xe5, 0xad, 0xbd, 0x35, 0xa5, 0xa8, 0xa4, 0x01, 0x2a, 0xf0, 0x31, 0x83, 0xff, + 0xdd, 0x19, 0x62, 0xc1, 0x14, 0x1d, 0x3f, 0x9c, 0x89, 0xb9, 0xf5, 0xdc, 0x2a, 0xeb, 0x28, 0x5b, 0xa3, 0x9c, 0x80, + 0x7f, 0x4b, 0x75, 0x9c, 0x24, 0xc2, 0xa9, 0xf7, 0x88, 0x8b, 0xba, 0x97, 0x43, 0xd4, 0x0d, 0x7b, 0x5b, 0xe9, 0x60, + 0xcb, 0x69, 0x1a, 0x1c, 0x89, 0x5f, 0xa9, 0xcf, 0xde, 0x67, 0x16, 0x8f, 0x3a, 0xb2, 0x11, 0x25, 0x69, 0x1c, 0x8b, + 0x1c, 0xb6, 0xf7, 0x85, 0xdc, 0xff, 0xfb, 0x7d, 0x08, 0x27, 0xad, 0x82, 0xa4, 0xf4, 0x04, 0x22, 0xc2, 0xd1, 0xe1, + 0x47, 0x84, 0x27, 0x52, 0x55, 0xf8, 0xa4, 0x3e, 0x71, 0x63, 0x76, 0x2f, 0xcc, 0x51, 0xbd, 0x05, 0x18, 0xc6, 0x7a, + 0x6b, 0x11, 0x92, 0x68, 0xa5, 0x19, 0x6d, 0x3d, 0x20, 0x46, 0xbc, 0x5f, 0x5b, 0x64, 0x30, 0xd6, 0x96, 0x44, 0x02, + 0xf8, 0x1d, 0x09, 0x19, 0xda, 0x36, 0x02, 0x33, 0x86, 0xb7, 0xb3, 0xe2, 0xd2, 0x75, 0xd8, 0xe6, 0x1c, 0xbe, 0x90, + 0x85, 0x66, 0x1d, 0x51, 0x9a, 0x20, 0xe4, 0x1f, 0x70, 0xb2, 0x50, 0x18, 0xcd, 0xeb, 0xa3, 0x74, 0x92, 0x58, 0xdf, + 0x77, 0x95, 0x0a, 0x36, 0x9b, 0x1b, 0xd4, 0x97, 0x1d, 0x25, 0xbf, 0x02, 0x27, 0x1d, 0x27, 0x59, 0xe4, 0x20, 0x6a, + 0x51, 0x39, 0x37, 0x49, 0x58, 0xda, 0xd5, 0xa9, 0x36, 0xeb, 0x75, 0x51, 0xd6, 0xd5, 0x6b, 0x11, 0x29, 0x7a, 0x1f, + 0xf5, 0xe8, 0x89, 0x84, 0x54, 0x68, 0x55, 0x6a, 0x97, 0x47, 0xe0, 0xb6, 0xa9, 0x15, 0xdb, 0x72, 0x09, 0x4b, 0xd4, + 0xf8, 0x4f, 0xd0, 0x47, 0xb9, 0x78, 0x90, 0x01, 0x1a, 0x1d, 0x4f, 0xcd, 0x5b, 0x8f, 0xbc, 0x72, 0x94, 0x5f, 0x5a, + 0x6d, 0xd2, 0x2f, 0x80, 0xcc, 0x68, 0xff, 0x68, 0x29, 0x81, 0xcc, 0xc0, 0x4c, 0x5a, 0x1a, 0x12, 0x39, 0x8a, 0x59, + 0x9a, 0xff, 0x81, 0x2b, 0xb6, 0x42, 0xa4, 0x61, 0x35, 0xf7, 0xf8, 0xcb, 0xca, 0xab, 0xe5, 0x5a, 0x66, 0x9a, 0x9b, + 0x25, 0x8e, 0x15, 0x8b, 0x8b, 0x7a, 0x5d, 0x89, 0x2c, 0x10, 0xe2, 0x08, 0xd3, 0x58, 0x4f, 0xbd, 0x51, 0x5a, 0x7d, + 0x40, 0x42, 0x99, 0x1f, 0xb0, 0xb7, 0x63, 0xaf, 0x07, 0x59, 0x88, 0x63, 0xcb, 0xc1, 0x66, 0xeb, 0x7d, 0x2a, 0x53, + 0x11, 0x9f, 0xd5, 0xc5, 0xd9, 0xa6, 0x12, 0x67, 0x75, 0x22, 0xce, 0xbe, 0x83, 0x9c, 0xdf, 0x9d, 0x51, 0xd1, 0x67, + 0x0f, 0x69, 0x9d, 0x14, 0x9b, 0x9a, 0x9e, 0xbc, 0xc1, 0x32, 0xbe, 0x3b, 0x23, 0xae, 0x9a, 0x33, 0x1a, 0xc9, 0x78, + 0x74, 0xf6, 0x21, 0x03, 0x92, 0xd7, 0xb3, 0x74, 0x05, 0x83, 0x77, 0x16, 0xe6, 0xf1, 0x59, 0x29, 0xee, 0xc0, 0xe2, + 0x54, 0x76, 0xbe, 0x07, 0x19, 0x56, 0xe1, 0x1f, 0xe2, 0x0c, 0xa0, 0x5d, 0xcf, 0xd2, 0xfa, 0x2c, 0xad, 0xce, 0xf2, + 0xa2, 0x3e, 0x53, 0x52, 0x38, 0x84, 0xf1, 0xc3, 0x7b, 0xfa, 0xca, 0x2e, 0x6f, 0xb3, 0xb8, 0xcb, 0x22, 0x7f, 0x8a, + 0x5e, 0x45, 0xc4, 0xa4, 0x51, 0x09, 0xaf, 0xdd, 0xdf, 0x36, 0xf7, 0x0f, 0xaf, 0x1b, 0xbb, 0x9f, 0xdd, 0x31, 0xa2, + 0x0b, 0xea, 0xf1, 0x4a, 0x52, 0x2a, 0x28, 0x20, 0x70, 0xa2, 0x59, 0xe3, 0xc1, 0x1d, 0x07, 0xbc, 0x1a, 0xd8, 0x92, + 0xad, 0x7d, 0xfe, 0x22, 0x96, 0x61, 0xda, 0x9b, 0x00, 0xff, 0x2a, 0x7b, 0xd3, 0x75, 0xb0, 0xc4, 0xfb, 0x16, 0xb2, + 0x0d, 0xbd, 0x7d, 0xcd, 0x5f, 0x7a, 0xb9, 0xfa, 0x9b, 0xfd, 0x13, 0x80, 0x30, 0x20, 0x66, 0xd5, 0x47, 0x13, 0xf7, + 0xce, 0xca, 0xb2, 0x73, 0xb2, 0xec, 0x7a, 0xe8, 0xd7, 0x24, 0x46, 0xa5, 0x95, 0xa5, 0x74, 0xb2, 0x94, 0x90, 0x05, + 0x7c, 0x62, 0x34, 0xb5, 0x11, 0x40, 0xd8, 0x8e, 0x52, 0xf9, 0x42, 0xe5, 0x45, 0x14, 0xce, 0x09, 0x9e, 0x27, 0x62, + 0x74, 0x6f, 0x25, 0x03, 0x86, 0x43, 0x08, 0xe6, 0xa0, 0x2d, 0xf6, 0x86, 0x6e, 0x22, 0xfe, 0x7a, 0x53, 0x94, 0x6f, + 0x63, 0xf2, 0x29, 0xd8, 0x9d, 0x7c, 0x5c, 0xc2, 0xe3, 0xf2, 0xe4, 0xe3, 0x10, 0x3d, 0x12, 0x4e, 0x3e, 0x06, 0xdf, + 0x23, 0x39, 0xaf, 0xbb, 0x1e, 0x27, 0xc8, 0x2d, 0xa4, 0xfb, 0xdb, 0x31, 0x09, 0xd0, 0xbc, 0x86, 0xe5, 0xa8, 0xa9, + 0xb8, 0x66, 0x66, 0x8c, 0xe7, 0x8d, 0xde, 0x1f, 0x3b, 0xde, 0x32, 0x85, 0x62, 0x16, 0xf3, 0x1a, 0x7e, 0xcf, 0xaa, + 0x40, 0xdd, 0xf5, 0x36, 0xc9, 0x2d, 0xb3, 0x7a, 0x8e, 0x76, 0xdf, 0xf7, 0x75, 0x22, 0xa8, 0xfd, 0x1d, 0xf6, 0x3c, + 0xb3, 0xde, 0x55, 0x31, 0x70, 0xa9, 0x92, 0x1d, 0x32, 0x55, 0x4d, 0x0f, 0x54, 0x4a, 0x83, 0xa7, 0x97, 0xd6, 0xe5, + 0x4b, 0xa5, 0x8d, 0x3c, 0xd3, 0xfc, 0x06, 0xf0, 0x62, 0xea, 0xb2, 0xd8, 0x7d, 0x75, 0x5f, 0xc1, 0x6d, 0xbc, 0xdf, + 0x5f, 0x56, 0x9e, 0xf9, 0x89, 0x0b, 0xc0, 0xde, 0x54, 0x68, 0x9d, 0x40, 0xa9, 0x61, 0x1d, 0xbe, 0x4a, 0x44, 0xf4, + 0x47, 0xbb, 0x5c, 0x67, 0xae, 0x03, 0x46, 0x14, 0xf1, 0xdb, 0x78, 0xf4, 0x07, 0x28, 0xae, 0x8d, 0x3d, 0x20, 0xac, + 0x43, 0x42, 0x9f, 0x11, 0x80, 0xd4, 0x63, 0x8e, 0x12, 0xd0, 0xac, 0x68, 0xee, 0x98, 0xfc, 0x5c, 0x5f, 0x29, 0xfd, + 0xfd, 0xb2, 0xf2, 0xc8, 0x9c, 0xd2, 0x36, 0xd3, 0x58, 0xad, 0xa9, 0x04, 0xc2, 0x2b, 0x2a, 0x59, 0x85, 0xcf, 0xe6, + 0x8d, 0xe8, 0xf7, 0xe5, 0x11, 0x9e, 0x56, 0x3f, 0x6c, 0x31, 0xbe, 0x15, 0x10, 0x8d, 0x04, 0x40, 0x3f, 0x01, 0xcc, + 0x8b, 0x6c, 0x66, 0xf7, 0x71, 0x40, 0x95, 0x12, 0x4d, 0xe3, 0x6c, 0x9e, 0xdf, 0xd2, 0x9b, 0xb2, 0x83, 0x4e, 0x9d, + 0x2a, 0x70, 0xc1, 0x55, 0xc9, 0x78, 0x65, 0x3d, 0x91, 0xcf, 0x6f, 0x6e, 0x37, 0x69, 0x16, 0xbf, 0x2f, 0xff, 0x89, + 0x63, 0xab, 0xeb, 0xf0, 0xc8, 0xd4, 0xe9, 0xda, 0x79, 0xa4, 0xb5, 0x17, 0x02, 0x22, 0xda, 0x35, 0xd4, 0x7a, 0x61, + 0xa1, 0x47, 0x7a, 0x22, 0x9c, 0x93, 0x44, 0x4d, 0x3b, 0xd0, 0xd2, 0x08, 0x7d, 0x7d, 0xcd, 0xe9, 0x2f, 0x0c, 0xd6, + 0x3e, 0x1f, 0x33, 0x20, 0x2b, 0xd1, 0x8f, 0xd5, 0x43, 0x63, 0x33, 0x87, 0x9e, 0xb5, 0x2a, 0xcf, 0xbc, 0xea, 0x70, + 0x40, 0x7c, 0x18, 0xfd, 0x25, 0xbf, 0xdf, 0x7f, 0x4d, 0xf3, 0x8f, 0x09, 0x35, 0x7e, 0xb6, 0x19, 0xa0, 0x6b, 0xdf, + 0x95, 0x07, 0xa2, 0x9e, 0x6b, 0x95, 0x20, 0xc4, 0x1b, 0xc4, 0x44, 0x33, 0x62, 0x0e, 0x4e, 0x3b, 0xd4, 0xfc, 0x93, + 0xd4, 0x80, 0x10, 0x25, 0x5e, 0xc7, 0x94, 0x05, 0x39, 0x6d, 0xe2, 0x48, 0x3f, 0x0a, 0x27, 0xf2, 0xa3, 0xa8, 0x8a, + 0xec, 0x1e, 0x2e, 0x18, 0x4c, 0xbd, 0xa7, 0xfd, 0x12, 0xfd, 0x96, 0x70, 0xe4, 0x1c, 0xad, 0x0a, 0x41, 0xe4, 0x84, + 0xb0, 0xd6, 0x10, 0x26, 0x88, 0x0d, 0xe2, 0x65, 0xdf, 0x25, 0x19, 0x8e, 0x14, 0x5c, 0xd6, 0xb1, 0x63, 0xcc, 0xd5, + 0x51, 0xf5, 0x1a, 0xc0, 0x78, 0xe5, 0x08, 0x9a, 0x8d, 0x22, 0xbb, 0x84, 0xa8, 0x22, 0xc7, 0x13, 0x50, 0x3b, 0x28, + 0x8d, 0xcd, 0xf4, 0x7c, 0x1c, 0xe4, 0xa3, 0x45, 0x85, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x73, 0xd5, 0xcf, + 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x8a, 0xe9, 0x72, + 0x60, 0xdc, 0x37, 0xbc, 0xa2, 0x38, 0xc3, 0x8f, 0x1e, 0x6c, 0x71, 0xfe, 0x74, 0x43, 0xed, 0xc7, 0xdc, 0xa8, 0x87, + 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, 0xfc, 0x43, + 0x99, 0xae, 0x52, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, 0xa2, 0xac, + 0xdf, 0x87, 0xdf, 0x57, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, 0x93, 0x41, + 0x0d, 0xda, 0xf0, 0x0d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, 0xec, 0x4f, + 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xe3, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xc7, 0x97, 0xfc, 0x06, 0xbd, + 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, 0x8f, 0x51, + 0xc9, 0x62, 0x4b, 0x8f, 0x55, 0xd1, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x05, 0xc1, 0x12, 0x18, + 0x17, 0xb1, 0xe6, 0x9b, 0x41, 0xce, 0xe2, 0xd9, 0x66, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1c, 0x0a, 0x09, 0x36, 0x93, + 0xcd, 0xd6, 0x73, 0xb6, 0xf6, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, 0x35, 0x58, + 0xad, 0xa6, 0x6c, 0x55, 0x53, 0x76, 0x4e, 0x53, 0x8e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, 0x88, 0x4d, + 0xa2, 0xab, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, 0x50, 0x85, + 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, 0xbe, 0xa5, + 0x8e, 0x7b, 0x94, 0x6d, 0xfe, 0x2e, 0x76, 0x41, 0x88, 0xdc, 0x8d, 0x3b, 0xf5, 0x33, 0xe2, 0xbd, 0xdd, 0x11, 0xc6, + 0x4f, 0x76, 0xdc, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8b, 0x79, 0x35, 0x49, 0x50, 0xcb, 0x92, 0xf8, 0x1b, + 0x9e, 0x0c, 0x72, 0xb6, 0x04, 0x0f, 0xda, 0x39, 0xcb, 0x00, 0x7f, 0xc5, 0x6a, 0xd1, 0x6f, 0xb5, 0xb7, 0x04, 0xf9, + 0x69, 0x63, 0x37, 0x0a, 0x13, 0x23, 0x48, 0xd4, 0xed, 0xca, 0x40, 0x7e, 0xf8, 0x80, 0xd3, 0xf1, 0xd8, 0x53, 0xc6, + 0xdc, 0xca, 0xf4, 0x32, 0x9d, 0x2b, 0xf9, 0x46, 0xee, 0xa5, 0x8f, 0xbd, 0x04, 0x3b, 0x07, 0xbc, 0x81, 0xb4, 0x81, + 0x37, 0xb0, 0x5d, 0x78, 0x6d, 0x90, 0x30, 0x23, 0xc0, 0x16, 0xc7, 0xc7, 0x48, 0x09, 0x0c, 0xe1, 0x38, 0x4b, 0x01, + 0x98, 0x46, 0x5f, 0x66, 0x2b, 0xfb, 0x32, 0xab, 0x35, 0x5b, 0x2a, 0xa7, 0x7b, 0xe7, 0xd6, 0xed, 0x7c, 0x22, 0x01, + 0xc0, 0xa4, 0xce, 0x81, 0x38, 0x33, 0xc1, 0x2e, 0x4d, 0x22, 0xcb, 0xc7, 0x30, 0xbf, 0x13, 0x6f, 0xca, 0x62, 0xa5, + 0xba, 0xa2, 0xed, 0x33, 0x93, 0xcf, 0x48, 0x27, 0xa1, 0x02, 0x0a, 0x0a, 0xb9, 0xd6, 0xa7, 0xef, 0xc2, 0x77, 0x41, + 0xa1, 0x81, 0xd9, 0x2a, 0xdc, 0xd3, 0x64, 0x8d, 0xd4, 0x1b, 0x55, 0xbf, 0x4f, 0xae, 0x81, 0x54, 0x67, 0x0e, 0x2d, + 0x7b, 0x52, 0x61, 0x80, 0xd8, 0x51, 0x9f, 0x91, 0x50, 0x07, 0x52, 0x0f, 0x18, 0x42, 0xb4, 0x4d, 0x1f, 0x7f, 0x32, + 0x24, 0xba, 0x00, 0x5b, 0x88, 0x36, 0xf0, 0xe3, 0x4f, 0xb0, 0xcf, 0x82, 0xf0, 0x98, 0xe6, 0xd7, 0x90, 0x74, 0x6c, + 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0xb9, 0x94, + 0xea, 0x58, 0xa9, 0xb7, 0x6d, 0xed, 0x07, 0xd1, 0x16, 0x1c, 0x59, 0xc4, 0xdf, 0x67, 0x88, 0x08, 0x66, 0x06, 0x11, + 0x76, 0x2d, 0xd4, 0xdd, 0x9e, 0x52, 0xcb, 0xa2, 0xde, 0xf6, 0x94, 0x52, 0xb7, 0x61, 0xf8, 0x6e, 0x82, 0x99, 0xe2, + 0x86, 0xff, 0x91, 0x79, 0xa1, 0xde, 0x78, 0x2c, 0x0a, 0x74, 0xcf, 0xdf, 0x2f, 0x79, 0x35, 0xdb, 0x28, 0x13, 0xe6, + 0x1d, 0x5f, 0xce, 0x42, 0xd9, 0xd5, 0xd2, 0xb8, 0xf3, 0xd9, 0x5b, 0xaa, 0xf9, 0xe0, 0x1f, 0x0e, 0x09, 0xc4, 0x1b, + 0xc5, 0x57, 0x77, 0x8d, 0xdc, 0xba, 0x26, 0x9b, 0xab, 0x12, 0x50, 0xbf, 0xcf, 0xd7, 0xb8, 0xdf, 0x62, 0xfd, 0xbb, + 0xa7, 0x41, 0xc6, 0x6a, 0x86, 0x2b, 0xa6, 0xf0, 0x29, 0x00, 0x0c, 0x0e, 0xa7, 0x82, 0xb4, 0xc0, 0x1b, 0x5e, 0x0e, + 0x2f, 0x27, 0x1b, 0x32, 0xe9, 0x6e, 0x7c, 0xe4, 0xce, 0x02, 0x55, 0xef, 0x37, 0x14, 0x27, 0x0d, 0x12, 0x8d, 0xbd, + 0x06, 0x5f, 0x66, 0x19, 0xe5, 0xa2, 0x89, 0xfb, 0x98, 0x7c, 0xa5, 0x07, 0x30, 0x57, 0xa1, 0x04, 0x88, 0x7e, 0x63, + 0x59, 0x6c, 0x44, 0xdb, 0x62, 0x03, 0x4b, 0xa9, 0x9a, 0xeb, 0xd5, 0xf4, 0xd9, 0x2b, 0xd1, 0xbc, 0x8f, 0x66, 0x9c, + 0xd2, 0x68, 0xc0, 0x71, 0x1a, 0x85, 0xdb, 0xf7, 0xf7, 0xa2, 0x5c, 0x66, 0x60, 0xc9, 0x56, 0xe1, 0x14, 0x97, 0x8d, + 0x3a, 0x23, 0x5e, 0xe6, 0xb1, 0x02, 0xe8, 0x78, 0x4c, 0x00, 0x54, 0x17, 0x04, 0x54, 0x44, 0x4b, 0xe9, 0xad, 0xd0, + 0x62, 0xa1, 0xde, 0x70, 0x94, 0xc2, 0x1f, 0xe9, 0xcf, 0x83, 0x7c, 0x0a, 0x40, 0xec, 0xfa, 0x38, 0x7a, 0x53, 0x94, + 0xf4, 0xa9, 0x62, 0x96, 0xcb, 0xc1, 0x04, 0x76, 0x75, 0x22, 0x43, 0xad, 0x20, 0x6f, 0xd5, 0x95, 0xb7, 0x32, 0x79, + 0x1b, 0xe3, 0x94, 0xfc, 0xc8, 0x4d, 0xc7, 0x1a, 0x31, 0xf0, 0xca, 0xd3, 0x3a, 0x4d, 0x90, 0x26, 0x17, 0xc0, 0x30, + 0xc4, 0xb7, 0x99, 0xf7, 0xd2, 0x73, 0xa4, 0x2a, 0x48, 0x66, 0xbb, 0xcc, 0x53, 0x17, 0x51, 0x7d, 0xe5, 0xd4, 0xd2, + 0x99, 0xd3, 0x8f, 0x00, 0xde, 0x63, 0x6a, 0xd2, 0x90, 0x8f, 0x70, 0x5b, 0x8a, 0xaf, 0xb7, 0xea, 0x1a, 0x2f, 0x8d, + 0xce, 0xdd, 0xcb, 0x97, 0xee, 0x34, 0xe8, 0xa7, 0x20, 0x28, 0xe7, 0xcb, 0x52, 0xc0, 0x9e, 0x32, 0x9b, 0xeb, 0xd5, + 0xaa, 0x15, 0x5a, 0x87, 0xc3, 0x58, 0x3b, 0x0a, 0x69, 0x75, 0x16, 0xb0, 0xd5, 0x48, 0xa7, 0x04, 0x08, 0xc1, 0x71, + 0x1a, 0x76, 0x82, 0x71, 0x97, 0x4e, 0x23, 0xb2, 0x5e, 0x29, 0x49, 0x17, 0x66, 0x90, 0xfc, 0x93, 0xbc, 0x9e, 0x01, + 0x2d, 0x01, 0x1c, 0x8a, 0x58, 0xc2, 0xc3, 0x49, 0x72, 0x05, 0xd0, 0xe9, 0x70, 0x50, 0x69, 0x68, 0xce, 0x6a, 0x96, + 0xcc, 0x27, 0xb1, 0x54, 0x55, 0x1e, 0x0e, 0x9e, 0x72, 0x33, 0xe8, 0xf7, 0xb3, 0x69, 0xa9, 0x5c, 0x00, 0x82, 0x58, + 0x17, 0x06, 0x88, 0x47, 0x5a, 0x78, 0xb2, 0xe8, 0x53, 0x12, 0xbf, 0x9c, 0x25, 0x73, 0x93, 0x0d, 0xef, 0xc0, 0x08, + 0x36, 0xe3, 0xba, 0xa4, 0x4c, 0x7b, 0x54, 0x7e, 0xcf, 0xe8, 0xa9, 0xed, 0x6b, 0xad, 0xb6, 0x88, 0x75, 0x1d, 0x5c, + 0x95, 0xa8, 0xa7, 0xf8, 0xa0, 0x24, 0xc1, 0xfb, 0xb5, 0x73, 0x33, 0x52, 0xbe, 0x16, 0xb9, 0x1f, 0xb4, 0x33, 0xb5, + 0x72, 0xe0, 0x08, 0xe4, 0x58, 0x45, 0x25, 0xaf, 0x77, 0x1d, 0x82, 0x47, 0x77, 0xa5, 0x02, 0xe5, 0xe0, 0x17, 0x20, + 0x46, 0xd7, 0x57, 0x9d, 0x35, 0xd4, 0x4c, 0xa3, 0xca, 0x23, 0xe8, 0xd4, 0x01, 0x3c, 0x29, 0x78, 0xa9, 0xd5, 0x8f, + 0x87, 0x83, 0x67, 0x7e, 0xf0, 0x57, 0x99, 0xbe, 0x85, 0x98, 0x28, 0xa7, 0x1a, 0x21, 0x71, 0xa5, 0x24, 0x11, 0x1f, + 0x2f, 0x5a, 0x56, 0x8c, 0xca, 0xf0, 0x81, 0x57, 0xaa, 0x7c, 0x75, 0xaa, 0xf2, 0x62, 0xa4, 0x6d, 0x09, 0xbc, 0x26, + 0xff, 0x10, 0xb9, 0xe6, 0xad, 0xaf, 0xbb, 0xca, 0xd0, 0x6b, 0x59, 0x81, 0x8e, 0x60, 0x2b, 0x4b, 0xc9, 0x01, 0x9f, + 0x54, 0x77, 0xd5, 0xaa, 0xf5, 0x39, 0x65, 0x1b, 0xe1, 0x26, 0xbf, 0x8e, 0x1d, 0x1c, 0x29, 0xbf, 0xc1, 0x73, 0x01, + 0xec, 0x35, 0x60, 0x6f, 0xce, 0x59, 0xd1, 0x3c, 0x3a, 0xa4, 0x6d, 0x81, 0x46, 0x66, 0x6e, 0xe7, 0xea, 0xbe, 0x2d, + 0x8f, 0xd2, 0x18, 0x22, 0xd3, 0x1e, 0x99, 0x0e, 0x36, 0xa3, 0xfc, 0xb7, 0x94, 0xdf, 0x2a, 0x1c, 0x03, 0xdf, 0x4e, + 0xbd, 0x03, 0xa8, 0x7a, 0xda, 0x20, 0x63, 0xcd, 0x30, 0xb4, 0xb2, 0xcb, 0xa5, 0xd0, 0x12, 0xb4, 0xd4, 0x4d, 0x10, + 0x9c, 0x1f, 0x11, 0xe5, 0x08, 0x40, 0x17, 0x29, 0x60, 0x82, 0x9f, 0xd2, 0x76, 0xf7, 0xfb, 0xeb, 0xd4, 0x23, 0xf7, + 0xae, 0x50, 0xa3, 0x84, 0x12, 0x8c, 0xfd, 0x44, 0x63, 0x06, 0x1d, 0x5d, 0x91, 0x13, 0x9e, 0xb5, 0x3a, 0xac, 0xeb, + 0xa6, 0x0c, 0xca, 0xe2, 0x98, 0x57, 0xd3, 0xd9, 0xef, 0x4f, 0xf6, 0x75, 0x83, 0x2c, 0xe4, 0xbf, 0xb3, 0x1e, 0x92, + 0x41, 0xf7, 0x20, 0x14, 0xa2, 0x37, 0x0f, 0x66, 0xf8, 0x1f, 0xdb, 0xf0, 0xec, 0x1b, 0x6e, 0xd4, 0x09, 0x60, 0x8e, + 0xb8, 0x5e, 0x7a, 0x8a, 0xb6, 0x1e, 0x6e, 0x81, 0x6c, 0x8d, 0x97, 0xb7, 0xf6, 0x1a, 0xc8, 0x29, 0x8e, 0xff, 0x8e, + 0x67, 0x6a, 0x65, 0x83, 0x9f, 0x9e, 0xb2, 0x1d, 0x78, 0x78, 0x11, 0x02, 0x8a, 0x61, 0xd9, 0xf8, 0x3b, 0xcb, 0x71, + 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, 0x5b, 0x79, 0x77, 0xe4, + 0x94, 0x79, 0xa7, 0x87, 0xd1, 0x75, 0x49, 0xfa, 0x26, 0xf9, 0xd8, 0x1a, 0xb6, 0xdf, 0xb5, 0xfb, 0xcd, 0x10, 0x41, + 0x08, 0xe5, 0xf8, 0x39, 0xa3, 0x13, 0x1a, 0x1f, 0x56, 0xb3, 0xd3, 0xeb, 0xf7, 0xce, 0xf1, 0x82, 0xad, 0xd1, 0x00, + 0x8f, 0x87, 0x2e, 0xe6, 0x89, 0x1a, 0x3a, 0x5d, 0xd7, 0xce, 0xc1, 0x03, 0x83, 0x2c, 0x4f, 0xbe, 0x61, 0x58, 0x62, + 0x7f, 0x12, 0xf1, 0xa4, 0xad, 0xda, 0xd8, 0x1c, 0xa9, 0x36, 0x6a, 0x06, 0x7e, 0xf0, 0x0a, 0x0a, 0x8c, 0x2e, 0x48, + 0x2b, 0x30, 0x0e, 0x47, 0x00, 0xb2, 0x62, 0x1c, 0x8f, 0x0c, 0x26, 0x30, 0xa4, 0x1b, 0x8a, 0x02, 0xf0, 0xf0, 0x38, + 0x1e, 0x84, 0x0c, 0x20, 0x5d, 0xf0, 0xd0, 0xb0, 0x4d, 0x42, 0xca, 0xcf, 0xf3, 0xbc, 0x56, 0x43, 0xe8, 0x3b, 0x0b, + 0xd5, 0xb1, 0x1f, 0x69, 0xaf, 0x58, 0xd7, 0xaa, 0x74, 0x64, 0xab, 0x03, 0xf4, 0x0d, 0x19, 0xf8, 0xd6, 0xb1, 0x05, + 0x40, 0xb4, 0xc4, 0x6f, 0xa9, 0x57, 0xfb, 0x32, 0x66, 0x85, 0x7a, 0x7d, 0x61, 0xda, 0xf5, 0x5a, 0x5a, 0x14, 0x50, + 0x71, 0xdb, 0xaa, 0xed, 0x91, 0x9c, 0xff, 0xf8, 0xae, 0xa3, 0x1d, 0x9f, 0x9d, 0x1a, 0x5b, 0x42, 0x99, 0x5b, 0x3c, + 0x91, 0xd5, 0xd1, 0x96, 0xea, 0x54, 0x1f, 0x70, 0xa9, 0x49, 0x75, 0x66, 0x60, 0x78, 0x8d, 0x00, 0xe5, 0x16, 0x22, + 0x69, 0x1c, 0xf6, 0xce, 0x27, 0x83, 0x82, 0xb9, 0x45, 0x02, 0x12, 0xd8, 0xc6, 0xd6, 0x2e, 0x9a, 0xeb, 0xd7, 0x6f, + 0xa9, 0x57, 0xb5, 0xa9, 0xea, 0xc1, 0x1b, 0x2f, 0x70, 0xf6, 0x4e, 0x6b, 0x01, 0x01, 0x14, 0xb6, 0x96, 0xe5, 0xe0, + 0xdc, 0xed, 0xaa, 0x96, 0x8a, 0x32, 0xea, 0xf7, 0xcf, 0x7f, 0x4b, 0x51, 0x11, 0x7b, 0xaa, 0x38, 0x65, 0xfd, 0x76, + 0xcb, 0x5c, 0x54, 0x96, 0xbc, 0x41, 0x15, 0xad, 0xd5, 0x51, 0x53, 0xb9, 0x6e, 0xae, 0x5a, 0x32, 0x41, 0x8c, 0xee, + 0xd3, 0xb5, 0xce, 0x9d, 0x7a, 0xef, 0x55, 0x1c, 0x31, 0x10, 0xdc, 0x74, 0x8f, 0x0f, 0x0e, 0x42, 0xa3, 0xa2, 0x5c, + 0x70, 0xa3, 0xb4, 0xaa, 0xa4, 0x14, 0xf2, 0x56, 0x45, 0x73, 0xa6, 0x8f, 0x00, 0x88, 0x00, 0xab, 0x44, 0xfd, 0x1f, + 0xbe, 0x34, 0xc6, 0x83, 0x07, 0xbe, 0x26, 0xd7, 0xb1, 0xf5, 0xfe, 0x69, 0x8d, 0xb4, 0xda, 0x38, 0x26, 0xb5, 0xea, + 0x65, 0xab, 0x78, 0xd9, 0xbd, 0x4e, 0xc5, 0xe0, 0xf9, 0xff, 0xdc, 0x07, 0xa8, 0x11, 0x2d, 0x65, 0x70, 0xeb, 0x6a, + 0x80, 0xc6, 0x87, 0x63, 0xe1, 0x1b, 0x3f, 0x64, 0x9c, 0x0f, 0x66, 0xe8, 0xa8, 0x36, 0x07, 0x07, 0x04, 0x47, 0x75, + 0x8f, 0xc6, 0x84, 0x59, 0x38, 0xf7, 0x20, 0x50, 0x7d, 0xe2, 0x3e, 0xe3, 0xda, 0x0b, 0xda, 0x04, 0x3e, 0x59, 0xd7, + 0x35, 0x45, 0x80, 0x8b, 0xd8, 0x98, 0x88, 0x21, 0x2e, 0x9b, 0x44, 0xea, 0x9b, 0x31, 0x28, 0x00, 0x8a, 0x17, 0x15, + 0xc9, 0xa5, 0x8b, 0x34, 0xaf, 0x44, 0x59, 0xeb, 0x66, 0x54, 0xac, 0x18, 0x02, 0xc0, 0x43, 0x50, 0x5c, 0x55, 0x66, + 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x6a, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, 0xd2, 0x3b, 0x1f, 0xb7, 0xce, + 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, 0x3f, 0xe3, 0x2f, 0x08, 0x4c, + 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x82, 0x97, 0x93, 0x70, 0x38, 0xf4, 0x41, 0x1f, + 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, 0x10, 0xd1, 0x42, 0x43, 0x1f, + 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, 0xda, 0xd0, 0x22, 0xc5, 0x45, + 0xa3, 0xcc, 0x66, 0xb9, 0xec, 0x84, 0x8d, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, 0x54, 0xad, 0xa7, 0x7a, 0x3d, + 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa4, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, 0xa3, 0x6a, 0x9d, 0xa5, 0x11, + 0x55, 0x6e, 0x92, 0xbb, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0x97, 0x29, 0x3b, 0x5b, 0x83, 0x13, 0x47, 0x9e, 0x4b, 0x6e, + 0xf9, 0xee, 0xbc, 0xa2, 0xbb, 0x53, 0xed, 0x5b, 0x80, 0x7b, 0x33, 0x6c, 0xc8, 0x9c, 0xd7, 0xd8, 0x69, 0x10, 0x26, + 0x81, 0x1f, 0xb1, 0x8f, 0x19, 0xb2, 0xc1, 0x80, 0x8e, 0x42, 0xfa, 0x5f, 0x5b, 0xe6, 0x48, 0xc0, 0xe4, 0xaf, 0xe7, + 0x7e, 0xb3, 0x28, 0x72, 0x58, 0x8c, 0x1f, 0x36, 0x18, 0x69, 0xac, 0xd6, 0x60, 0x58, 0xde, 0x21, 0xf2, 0xa7, 0x76, + 0xc7, 0x34, 0xd5, 0xf1, 0x66, 0xbd, 0xd6, 0xfc, 0xea, 0xe9, 0x53, 0x5d, 0x9f, 0xff, 0xf6, 0xfd, 0x65, 0x58, 0x33, + 0xfb, 0x43, 0x10, 0x4a, 0xbb, 0x77, 0x8b, 0x73, 0x47, 0xa2, 0x77, 0xac, 0x34, 0xb3, 0x4b, 0xbb, 0x64, 0x97, 0xa6, + 0xb4, 0x1b, 0x72, 0xbd, 0xfa, 0x4a, 0x79, 0x63, 0xe7, 0x15, 0xd3, 0xfd, 0x7b, 0xa1, 0x77, 0x94, 0x53, 0x35, 0x81, + 0x88, 0x26, 0xed, 0x48, 0xdc, 0xee, 0x95, 0xe1, 0xf3, 0x49, 0xde, 0x2e, 0xe1, 0xa8, 0x6b, 0x58, 0x6e, 0xbe, 0xfd, + 0xcf, 0xbc, 0xea, 0xac, 0x70, 0xfb, 0xa5, 0x31, 0x6b, 0x7f, 0x0a, 0xe2, 0xaa, 0xfe, 0xf0, 0x9e, 0xd4, 0x4c, 0xc9, + 0xff, 0x55, 0x8f, 0x81, 0xab, 0x9f, 0x4c, 0x3b, 0xba, 0xa7, 0x10, 0x36, 0x98, 0xfd, 0xfc, 0xf8, 0xa1, 0x05, 0xab, + 0xea, 0x02, 0x45, 0x72, 0x00, 0x9d, 0xbb, 0x64, 0x84, 0xf7, 0x3b, 0xc6, 0xb9, 0x7f, 0xf5, 0xbd, 0x9a, 0x1c, 0x21, + 0xa2, 0x5d, 0x84, 0x03, 0x80, 0xb8, 0xd3, 0x54, 0xd6, 0xa1, 0x06, 0xe8, 0x03, 0x02, 0xeb, 0xd0, 0xb7, 0x19, 0xc0, + 0x41, 0x1f, 0x6d, 0x9e, 0x45, 0x20, 0xaf, 0x7b, 0xf7, 0xec, 0x9a, 0xed, 0x7c, 0xfe, 0x62, 0x95, 0x7a, 0xf7, 0xe8, + 0x10, 0x7c, 0x3e, 0xf6, 0xa7, 0x97, 0x81, 0xc1, 0x85, 0x66, 0xd7, 0xcf, 0x04, 0xdb, 0xb1, 0xdd, 0x33, 0x44, 0x2a, + 0xea, 0xce, 0x3f, 0xbc, 0x34, 0xd1, 0xf3, 0xce, 0x0b, 0x77, 0x7c, 0x09, 0xe0, 0x81, 0x2c, 0x06, 0x14, 0x9f, 0xa5, + 0xf7, 0x2f, 0x96, 0x80, 0x9a, 0xfc, 0x96, 0xaf, 0xbd, 0x2f, 0x94, 0xba, 0x80, 0x3f, 0x07, 0x94, 0x3e, 0xc9, 0xb9, + 0x77, 0x37, 0xbc, 0xf5, 0x2f, 0x9e, 0x83, 0xf3, 0xc4, 0x6a, 0xb8, 0x80, 0xbf, 0x0a, 0x3e, 0xf4, 0xee, 0x06, 0x98, + 0x58, 0xf2, 0xa1, 0xb7, 0x1a, 0x40, 0xaa, 0xc2, 0x85, 0xc4, 0xd8, 0x87, 0x5f, 0x83, 0x9c, 0xe1, 0x1f, 0xbf, 0x69, + 0x0c, 0xd6, 0x5f, 0x83, 0x42, 0xa3, 0xb1, 0x96, 0x2a, 0x64, 0x29, 0x16, 0x67, 0x02, 0x6c, 0xc2, 0x71, 0xb7, 0x2f, + 0x56, 0xb5, 0x59, 0x0b, 0xfa, 0xf3, 0x11, 0xdf, 0xa3, 0xb1, 0xba, 0x2a, 0xe7, 0xa2, 0xfc, 0x88, 0xf4, 0xa9, 0x8e, + 0x8f, 0x51, 0xb1, 0xa9, 0xbb, 0xd3, 0xa9, 0x56, 0x1d, 0x69, 0xbf, 0x29, 0xd7, 0x60, 0xc7, 0xeb, 0xe4, 0xc8, 0x52, + 0x78, 0xd6, 0x61, 0xe7, 0xa5, 0x53, 0xa2, 0xc3, 0x30, 0xde, 0x6d, 0xd5, 0x33, 0x86, 0xf2, 0xdc, 0x60, 0x4c, 0x17, + 0x3c, 0xe2, 0x2f, 0x06, 0xb9, 0x0c, 0x8d, 0xf9, 0x80, 0x6c, 0x18, 0xca, 0x87, 0x16, 0x19, 0x12, 0x22, 0xde, 0x43, + 0x25, 0x60, 0xdb, 0x82, 0x32, 0x29, 0xe0, 0x2c, 0x1a, 0xfc, 0x56, 0x7b, 0x39, 0xf0, 0x1e, 0x44, 0x7e, 0x23, 0x5d, + 0xca, 0x25, 0x36, 0x3a, 0x71, 0x2c, 0x0b, 0xed, 0x3c, 0xae, 0xbf, 0x8e, 0x41, 0xfd, 0x5e, 0xe9, 0x37, 0x28, 0x67, + 0x7f, 0x94, 0xac, 0xd3, 0xc6, 0x13, 0xe3, 0x1f, 0xae, 0xf2, 0x4f, 0xd1, 0x52, 0x0f, 0xff, 0x9f, 0x31, 0x85, 0xd2, + 0xbf, 0x4a, 0xcb, 0x68, 0xb3, 0x5a, 0x8a, 0x52, 0xe4, 0x91, 0x38, 0xf9, 0x5a, 0x64, 0xe7, 0xf2, 0x9d, 0x4f, 0xa1, + 0x5f, 0x00, 0x5a, 0xf6, 0x09, 0x32, 0xfa, 0x7b, 0x26, 0xf8, 0xf0, 0x7b, 0xed, 0x5c, 0x9b, 0xf3, 0xf1, 0x24, 0xbf, + 0xb2, 0xf6, 0x6e, 0xc7, 0x8b, 0xc4, 0x28, 0xc6, 0x72, 0x5f, 0x75, 0xb3, 0x72, 0xa2, 0x92, 0x03, 0x23, 0x5d, 0x93, + 0xbd, 0x5c, 0xc9, 0xba, 0x9d, 0x6e, 0x25, 0x10, 0x51, 0x05, 0xde, 0x63, 0x5c, 0xc5, 0x3e, 0x82, 0xe9, 0xba, 0xe3, + 0x32, 0xda, 0xf1, 0x9e, 0xf1, 0xea, 0x44, 0x59, 0xc1, 0xed, 0x46, 0xb4, 0x27, 0x74, 0xf4, 0xd3, 0xa4, 0xb6, 0x2c, + 0x1c, 0x80, 0xdc, 0x25, 0x8c, 0x65, 0x43, 0xb0, 0x62, 0x50, 0xfa, 0x7a, 0x4d, 0xc9, 0xb2, 0x00, 0x8b, 0xce, 0x2e, + 0x23, 0x10, 0xc3, 0xba, 0x69, 0x4e, 0xe8, 0x78, 0xe9, 0xe2, 0xbc, 0xd7, 0x2a, 0x52, 0xf0, 0x8c, 0x16, 0x1d, 0x73, + 0xd3, 0x91, 0x6e, 0x8c, 0xf6, 0xf6, 0x7b, 0x83, 0x90, 0xe2, 0xf9, 0x03, 0x5b, 0xad, 0x8b, 0x8b, 0xc4, 0x2b, 0x64, + 0xa2, 0x05, 0xb1, 0x14, 0x81, 0x19, 0x2f, 0x34, 0x8d, 0x30, 0x41, 0x99, 0x12, 0x2c, 0x5a, 0xa3, 0x43, 0xfb, 0xc3, + 0x12, 0x76, 0x8f, 0x31, 0x02, 0x04, 0xaa, 0x4c, 0x9f, 0xc3, 0xd6, 0x84, 0xd9, 0xd4, 0xc5, 0x06, 0x68, 0xab, 0x18, + 0x1a, 0x84, 0xb5, 0x21, 0xe6, 0x63, 0x9a, 0xdf, 0xfd, 0x0b, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, 0xde, 0xed, 0x9a, 0x84, + 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xa8, 0x1d, 0x6b, 0xa9, 0x77, 0xac, 0xb5, + 0xde, 0xb1, 0xee, 0x1a, 0xfe, 0x21, 0xf3, 0x62, 0x96, 0x80, 0x7e, 0x77, 0xc5, 0x55, 0x83, 0xa0, 0x19, 0x1b, 0x76, + 0x0b, 0xbf, 0x25, 0xd6, 0x6e, 0xe9, 0x5f, 0x2c, 0xd9, 0xc2, 0xf4, 0x81, 0x6e, 0x1d, 0x60, 0x19, 0x51, 0x93, 0xef, + 0x91, 0x77, 0xd3, 0x59, 0x51, 0xb8, 0x3d, 0xb1, 0x85, 0xcf, 0xae, 0xcd, 0x9b, 0xf7, 0xcf, 0x22, 0xc8, 0xbd, 0xe3, + 0xde, 0xfd, 0xf0, 0xda, 0xbf, 0xd0, 0x2d, 0x90, 0x93, 0x59, 0xce, 0x40, 0xea, 0x88, 0x4f, 0x10, 0xad, 0xec, 0x29, + 0xdf, 0x09, 0xb9, 0xb3, 0xad, 0x9f, 0xdd, 0xbb, 0xdb, 0xda, 0xdd, 0xb3, 0x7b, 0x56, 0x8d, 0x28, 0x56, 0x9c, 0xa6, + 0x48, 0x98, 0x45, 0x1b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xdd, 0xb3, 0x8e, 0x8e, 0x97, 0x73, 0xc0, + 0xee, 0xfe, 0xa3, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0x77, 0xcf, 0x32, 0x8d, 0xe7, 0x70, 0x24, 0x9f, 0x8e, + 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, 0xd6, 0x35, 0x6f, 0xaf, + 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, 0x70, 0xbc, 0xe4, 0xb1, + 0xef, 0xd3, 0x2c, 0xad, 0x77, 0xa8, 0xb5, 0xa8, 0x2c, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, 0x61, 0xa9, 0xe9, 0x9f, + 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2b, 0x2e, 0xbe, 0x3f, 0x2d, 0x94, 0x6b, 0x37, 0x6f, 0xe3, + 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x8e, 0x94, 0x5d, 0x2c, 0xe1, 0x1e, + 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf1, 0x9c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, 0x62, 0x5b, 0xb8, 0x78, + 0xce, 0x36, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0x8d, 0x6a, 0x8e, 0x35, 0xd4, 0x6c, 0x6d, + 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0xee, 0xda, 0x8a, 0x8f, 0x95, 0xb5, 0x2e, 0xdd, 0xeb, 0x3d, 0xaa, 0x0b, 0x60, + 0xeb, 0xbf, 0x3d, 0x5e, 0xb9, 0x9e, 0xcf, 0x08, 0xe0, 0x6b, 0xc1, 0xc7, 0x93, 0x05, 0x7a, 0x95, 0x2c, 0xfc, 0xdb, + 0x81, 0x1a, 0x7f, 0xa7, 0x73, 0x17, 0x00, 0x5d, 0x49, 0x79, 0x05, 0xe4, 0x1d, 0xe4, 0x98, 0x5b, 0x76, 0xe5, 0xfd, + 0xc9, 0x77, 0xd8, 0x35, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x81, 0x53, 0x41, 0x32, 0xb0, 0x97, 0x15, 0xdb, 0x05, 0xb1, + 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x84, 0x20, 0xae, 0xe0, 0x16, 0xe2, 0xf0, 0xe4, 0x9f, 0x83, 0xfb, 0xd6, 0x66, + 0x7d, 0xcf, 0xac, 0xce, 0x09, 0xd6, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0x56, 0xfd, 0xbe, 0xb7, 0xd3, 0x8e, 0x4f, + 0x77, 0x52, 0x27, 0x76, 0x5a, 0xab, 0xb5, 0x60, 0xd7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x40, 0xfc, 0x74, 0x3b, 0xe0, + 0xf7, 0x1d, 0x6b, 0xcb, 0xbb, 0x66, 0x0b, 0xb6, 0x83, 0x4b, 0x50, 0xd3, 0x5e, 0xf6, 0x27, 0x95, 0x0b, 0xda, 0xb1, + 0x4b, 0xe2, 0xe1, 0x8c, 0x59, 0xa5, 0xcc, 0xac, 0x93, 0xea, 0x4a, 0x74, 0xc6, 0x74, 0xd6, 0x7a, 0x3e, 0x57, 0xf3, + 0x49, 0xa1, 0x41, 0xfd, 0xce, 0x89, 0x8f, 0xa8, 0xe8, 0x3c, 0x81, 0xad, 0x65, 0x05, 0xb1, 0xda, 0xe7, 0x60, 0xad, + 0xd5, 0x2e, 0xfd, 0x5e, 0x3e, 0xe0, 0x36, 0xe5, 0xb0, 0x0e, 0x0c, 0x6a, 0x4e, 0xac, 0xa8, 0xc7, 0x6c, 0xc7, 0xb8, + 0xf9, 0xe9, 0xe5, 0x0f, 0x4e, 0x58, 0xb2, 0x62, 0xb5, 0x3f, 0xfd, 0xfe, 0x99, 0xa7, 0xbf, 0x53, 0xfb, 0x17, 0xc2, + 0x0f, 0xc6, 0xff, 0xa9, 0xdd, 0xd7, 0x5a, 0x8c, 0xca, 0x56, 0x39, 0x42, 0xe3, 0x6e, 0x25, 0x4d, 0x96, 0x9f, 0x84, + 0x27, 0xac, 0x05, 0xcf, 0x72, 0xbd, 0x44, 0xb3, 0x02, 0x56, 0x58, 0xcb, 0x24, 0x5c, 0x61, 0xac, 0x96, 0xb6, 0xfa, + 0x16, 0x4d, 0x73, 0x7c, 0x38, 0xd7, 0x06, 0x65, 0xca, 0xd9, 0x19, 0xb1, 0x1a, 0x2e, 0xc3, 0xd2, 0x84, 0x22, 0x64, + 0xf7, 0x76, 0x70, 0x63, 0xa7, 0x2c, 0xa5, 0x0c, 0xe7, 0x18, 0x4c, 0x78, 0x24, 0x46, 0x55, 0xbe, 0xbf, 0x2f, 0x29, + 0x72, 0xda, 0x96, 0x83, 0x2a, 0x84, 0x7d, 0x24, 0x51, 0x02, 0xb7, 0x22, 0x2d, 0x14, 0x29, 0x8b, 0xbf, 0x1d, 0xa0, + 0x0b, 0xbc, 0x80, 0xba, 0x1a, 0x75, 0xfb, 0xc3, 0x11, 0x0f, 0x1f, 0x99, 0xfa, 0xc0, 0x88, 0x25, 0x81, 0xda, 0x5e, + 0x66, 0xe9, 0x1d, 0xa8, 0xf0, 0x7b, 0xb8, 0x9a, 0x88, 0xfd, 0xdc, 0x92, 0xa2, 0x22, 0x1b, 0xe9, 0x0d, 0xad, 0xc1, + 0x23, 0xb4, 0xa6, 0x7c, 0xef, 0xa4, 0xda, 0xa4, 0xf3, 0x8e, 0x90, 0x63, 0xf5, 0xad, 0x25, 0x8c, 0x76, 0x45, 0x2f, + 0xee, 0x1d, 0xbd, 0xe7, 0xe9, 0xaa, 0xe7, 0xfe, 0xc4, 0x15, 0xf3, 0xe4, 0x36, 0x02, 0x75, 0x2b, 0xa8, 0x6e, 0xef, + 0x55, 0x82, 0x05, 0x4b, 0xda, 0x7d, 0xfc, 0x76, 0xd6, 0x0e, 0x44, 0x65, 0xac, 0xd2, 0xd7, 0x24, 0x61, 0x4f, 0x0c, + 0x3a, 0x85, 0xaa, 0xdc, 0xee, 0x8e, 0xb6, 0xc0, 0x75, 0xcc, 0x52, 0xf4, 0xd2, 0x16, 0xb9, 0x5b, 0xfe, 0xdd, 0x73, + 0x45, 0xce, 0x7e, 0x09, 0x08, 0x4e, 0xcd, 0x57, 0xc4, 0x97, 0x23, 0x3c, 0xaa, 0x6e, 0x81, 0xe3, 0xf4, 0x1d, 0xc0, + 0x3f, 0x1c, 0x2e, 0x41, 0x13, 0x10, 0x0b, 0xd6, 0x4b, 0xe3, 0x1e, 0xeb, 0xc5, 0xc5, 0xe6, 0x2e, 0xc9, 0x37, 0xe0, + 0xcc, 0x40, 0xa9, 0x96, 0x7e, 0xe0, 0x58, 0x2d, 0xa0, 0xc2, 0xc1, 0xec, 0xa4, 0x5e, 0x58, 0x46, 0x3d, 0xa6, 0xcf, + 0xcf, 0x60, 0xef, 0x08, 0x09, 0x80, 0xfb, 0x65, 0x1f, 0x90, 0x80, 0x87, 0xce, 0xec, 0x80, 0x70, 0xc2, 0x2c, 0xaa, + 0x02, 0x89, 0xe4, 0x48, 0x3f, 0x7b, 0xcc, 0x44, 0xf2, 0x07, 0xb3, 0x9e, 0x73, 0x4a, 0xf4, 0x58, 0x4f, 0x1d, 0x21, + 0x3d, 0xd6, 0xb3, 0x8e, 0x88, 0x1e, 0xeb, 0x59, 0xc7, 0x47, 0x8f, 0xf5, 0xcc, 0xb1, 0xd3, 0x83, 0xc0, 0x04, 0x88, + 0x3c, 0x60, 0x3d, 0x9a, 0x4c, 0x3d, 0xc5, 0x3d, 0x40, 0x34, 0x08, 0xac, 0x27, 0x85, 0xf3, 0x1e, 0x20, 0x8f, 0x91, + 0x58, 0x1d, 0xf4, 0xfe, 0x32, 0x7e, 0xda, 0x33, 0x32, 0xf2, 0xb8, 0x75, 0x58, 0xfd, 0xaf, 0xbf, 0x42, 0x00, 0x1c, + 0x9e, 0x4d, 0xbd, 0xcb, 0x31, 0x64, 0x95, 0x65, 0x04, 0x92, 0x9f, 0x18, 0x7c, 0xf9, 0x02, 0xa0, 0xea, 0x33, 0x5d, + 0xab, 0xc9, 0x51, 0x7b, 0xcc, 0xa1, 0x2b, 0x06, 0x80, 0x6d, 0x58, 0xa2, 0xaa, 0x16, 0x36, 0x61, 0x71, 0xfb, 0x19, + 0x46, 0x73, 0xd9, 0xf4, 0x82, 0x06, 0xea, 0x11, 0x82, 0x5f, 0x5a, 0x0f, 0xad, 0xb5, 0x4c, 0x39, 0x74, 0x6d, 0x14, + 0x55, 0x36, 0xd4, 0x25, 0xac, 0xd6, 0x22, 0xaa, 0x89, 0x22, 0xe5, 0x92, 0x51, 0x14, 0x4b, 0x15, 0xec, 0x33, 0x71, + 0x07, 0x51, 0xf3, 0xb4, 0xd5, 0x56, 0xc1, 0xfe, 0x0e, 0x10, 0xd6, 0xc2, 0x5a, 0x48, 0x67, 0x50, 0x7b, 0xa7, 0x1f, + 0x29, 0x7f, 0x79, 0x21, 0xb7, 0x73, 0x0b, 0x45, 0xb8, 0x3d, 0x07, 0xe5, 0x4d, 0x5d, 0x95, 0x8a, 0x68, 0xb4, 0x04, + 0x4a, 0x99, 0x13, 0x44, 0x16, 0x20, 0x80, 0xe3, 0x06, 0x02, 0x9f, 0xd7, 0xf8, 0x04, 0x1a, 0x85, 0x40, 0x7e, 0x60, + 0x15, 0xae, 0x3d, 0xa4, 0xa5, 0xd6, 0x88, 0x28, 0x11, 0x3f, 0xba, 0x7a, 0x8e, 0xed, 0xab, 0xa7, 0xb1, 0xb6, 0x94, + 0x26, 0x88, 0x9f, 0x58, 0x6c, 0x21, 0x26, 0x88, 0xea, 0x10, 0x1d, 0xc1, 0x72, 0x42, 0x88, 0xc2, 0x1f, 0x42, 0x3f, + 0x35, 0xf0, 0x97, 0x6c, 0x59, 0xe4, 0x35, 0xc1, 0x62, 0x56, 0x0c, 0xd0, 0xaa, 0x08, 0x3c, 0xd3, 0xd9, 0x52, 0x99, + 0xd3, 0x3c, 0x3a, 0xb2, 0x83, 0xf3, 0xae, 0x83, 0xbd, 0xf4, 0x65, 0xec, 0x64, 0xd9, 0x34, 0x6a, 0x63, 0x43, 0x24, + 0xbc, 0x22, 0x7f, 0x95, 0xa5, 0xc6, 0x39, 0x32, 0x97, 0xeb, 0xbb, 0x2e, 0xee, 0xee, 0x68, 0x9b, 0xb0, 0x0a, 0x11, + 0xea, 0xb6, 0xa1, 0x72, 0x29, 0xcc, 0xc6, 0xa6, 0x69, 0x80, 0x2f, 0x14, 0x95, 0x4a, 0x55, 0x6a, 0x2b, 0x95, 0x9c, + 0xf0, 0xae, 0xaf, 0x6a, 0x91, 0xba, 0x22, 0xd8, 0xc6, 0x0c, 0xf5, 0x50, 0x6e, 0xd4, 0xd8, 0xd7, 0x1d, 0xab, 0xf4, + 0x0e, 0x13, 0xe4, 0x8c, 0xbc, 0xc8, 0xc1, 0x45, 0x49, 0x41, 0xe6, 0x6a, 0x08, 0xf3, 0x47, 0x0d, 0x9f, 0x16, 0x96, + 0x7b, 0x28, 0x01, 0xb3, 0xa3, 0x86, 0x97, 0x11, 0x02, 0x11, 0x97, 0xca, 0xbe, 0x62, 0xe2, 0xf7, 0x14, 0xcc, 0x92, + 0x09, 0xdd, 0x8b, 0x58, 0x18, 0xa1, 0x8d, 0x4f, 0x92, 0x64, 0xea, 0x69, 0x0a, 0x6e, 0xe4, 0x32, 0xcc, 0xd1, 0x08, + 0x2d, 0xf9, 0xc8, 0x81, 0xf4, 0xb5, 0x9c, 0x4a, 0xf0, 0x11, 0x75, 0x0a, 0x38, 0x9e, 0x9f, 0x17, 0xd6, 0x4f, 0x96, + 0x4b, 0xcc, 0x65, 0x6d, 0xfe, 0xcb, 0x8e, 0x8e, 0xc1, 0x2e, 0x4f, 0x13, 0xc7, 0xd5, 0x7f, 0x54, 0x25, 0xc5, 0xc3, + 0xcf, 0x69, 0x0e, 0x28, 0x82, 0x99, 0x3d, 0xc5, 0xf8, 0xd8, 0x67, 0x99, 0x02, 0xfe, 0x76, 0xbd, 0xb5, 0x64, 0x62, + 0x97, 0xb4, 0x9b, 0x2b, 0xe3, 0x97, 0xda, 0xb0, 0xe3, 0xe0, 0xdc, 0x00, 0x14, 0x67, 0x8d, 0x0e, 0xcb, 0x6b, 0xdd, + 0xb6, 0x2a, 0x54, 0xa0, 0xd6, 0xff, 0xd9, 0x2d, 0x4c, 0x79, 0x9b, 0x97, 0xca, 0xdb, 0x3c, 0x34, 0x01, 0x02, 0x91, + 0x19, 0xf2, 0xac, 0xe9, 0x98, 0x24, 0xee, 0x1d, 0x29, 0x69, 0xdf, 0x91, 0xe2, 0x47, 0xef, 0x48, 0xc8, 0xb7, 0x84, + 0x8e, 0xec, 0x4b, 0x4e, 0x4e, 0xa0, 0xcc, 0x60, 0x2f, 0xaf, 0x99, 0xec, 0x1f, 0xd0, 0x5e, 0x38, 0x97, 0xe5, 0x15, + 0xbf, 0x16, 0xde, 0xda, 0x9f, 0xae, 0x4f, 0xbb, 0xaa, 0xde, 0x7e, 0x65, 0x66, 0x1e, 0x0e, 0xc5, 0xe1, 0x50, 0x99, + 0xa0, 0xdd, 0x05, 0x17, 0x83, 0x9c, 0xdd, 0xbb, 0xf1, 0xf1, 0xd7, 0x1c, 0x45, 0x6c, 0xa5, 0x3c, 0x92, 0x2e, 0x54, + 0x62, 0x78, 0x69, 0xe0, 0x61, 0x76, 0x7c, 0x3c, 0xd9, 0x5d, 0xdd, 0x4f, 0x06, 0x83, 0x9d, 0xea, 0xdb, 0x2d, 0xaf, + 0x67, 0xbb, 0x39, 0x7b, 0xe0, 0xb7, 0xd3, 0x6d, 0xb0, 0x6f, 0x60, 0xdb, 0xdd, 0x5d, 0x89, 0xc3, 0x61, 0xf7, 0x82, + 0x2f, 0xfc, 0xfd, 0x03, 0x02, 0x3a, 0xf3, 0xf3, 0x71, 0x1b, 0xe3, 0xe7, 0xa6, 0xed, 0xaa, 0xb5, 0x03, 0x78, 0xfa, + 0x1f, 0xbc, 0x9b, 0xd9, 0x72, 0xee, 0xb3, 0x27, 0xfc, 0x01, 0xfc, 0xf3, 0x71, 0x93, 0x44, 0xea, 0x13, 0xed, 0x32, + 0x79, 0x03, 0x0e, 0xe4, 0x3b, 0x9f, 0xbd, 0xe5, 0x0f, 0xb3, 0xe5, 0x9c, 0x17, 0x87, 0xc3, 0xfb, 0x69, 0x88, 0x64, + 0x4d, 0x61, 0x45, 0x2c, 0x29, 0x9e, 0x1f, 0x84, 0xc7, 0xef, 0x45, 0x64, 0x88, 0xb4, 0xdc, 0xbb, 0x43, 0x76, 0xc3, + 0x22, 0x3f, 0x80, 0x0f, 0xb2, 0x9d, 0x3f, 0x91, 0x35, 0xa5, 0xfb, 0xc5, 0x13, 0xff, 0x70, 0xa0, 0xbf, 0xde, 0xfa, + 0x87, 0xc3, 0x7b, 0xf6, 0x80, 0xe0, 0xe8, 0x7c, 0x07, 0xfd, 0xa3, 0x6f, 0x1d, 0x50, 0x95, 0xe1, 0xf5, 0x6c, 0x33, + 0xf7, 0x5f, 0xac, 0xd8, 0x1d, 0x70, 0xa1, 0x28, 0x2f, 0xb4, 0x1b, 0xf6, 0x80, 0x5e, 0x67, 0xe4, 0x44, 0x34, 0xdb, + 0xcd, 0x7d, 0x16, 0xe3, 0x73, 0x75, 0x5f, 0x4c, 0xbe, 0x7a, 0x5f, 0xdc, 0xb1, 0x6d, 0xf7, 0x7d, 0x51, 0xbe, 0xe9, + 0xae, 0x9f, 0x2d, 0xdb, 0xb1, 0x07, 0x98, 0x61, 0xd7, 0xfc, 0xa6, 0x39, 0x76, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, + 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0x95, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x57, 0x0b, + 0x39, 0xf3, 0xcc, 0x40, 0xdf, 0x56, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x6a, 0xa6, + 0x6d, 0x51, 0x97, 0xdf, 0xf6, 0x9e, 0xc9, 0x6f, 0x64, 0x60, 0x0b, 0x91, 0x14, 0x8e, 0xe3, 0x8b, 0xe7, 0x27, 0xfc, + 0x57, 0x2d, 0x8f, 0x5a, 0xed, 0x17, 0x4a, 0x7d, 0xfa, 0x8a, 0x8e, 0x68, 0xe2, 0x5e, 0xb4, 0x65, 0x58, 0xa3, 0xac, + 0xa9, 0xa5, 0xc3, 0x30, 0xae, 0x61, 0x5f, 0x1e, 0x38, 0xf4, 0x1d, 0x10, 0x68, 0xab, 0x54, 0x0a, 0xb4, 0x70, 0x0c, + 0xa3, 0x30, 0x0b, 0x29, 0x8f, 0x0b, 0xb3, 0x94, 0xf7, 0x58, 0xa0, 0xc5, 0xad, 0xba, 0xc7, 0xd4, 0x76, 0x0b, 0x22, + 0xac, 0xde, 0x32, 0xce, 0x2f, 0x1b, 0x55, 0xb8, 0x2d, 0x40, 0x51, 0x04, 0x65, 0xb0, 0x27, 0xb9, 0x6d, 0xa1, 0xa4, + 0xd9, 0x28, 0xac, 0xc5, 0x5d, 0x51, 0xee, 0x7a, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, 0x75, + 0x28, 0x17, 0xe9, 0x7f, 0x64, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xe7, 0x97, 0xf4, + 0x93, 0xc1, 0x32, 0x72, 0x4a, 0x7d, 0x1f, 0x8d, 0x6e, 0xd3, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, 0x0a, + 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, 0x26, + 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, 0x90, + 0xdc, 0xa9, 0x2b, 0x7f, 0x54, 0x4e, 0xfe, 0x13, 0x0d, 0x91, 0x57, 0x5c, 0x21, 0x56, 0x16, 0x5c, 0x62, 0x31, 0x54, + 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xcb, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, 0x11, + 0x3e, 0x6e, 0xad, 0x45, 0x08, 0x56, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, 0x14, + 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xa8, 0x48, 0xcf, 0x5f, 0x9a, 0x94, 0x5c, 0x1a, + 0x33, 0x3e, 0x88, 0x32, 0x12, 0x79, 0x1d, 0xde, 0x89, 0x69, 0x81, 0x7c, 0xa3, 0xc7, 0x0f, 0x82, 0x4b, 0x78, 0x37, + 0xe4, 0x5e, 0x01, 0xb6, 0x04, 0xec, 0x00, 0xf7, 0xca, 0x8c, 0x72, 0x9d, 0xd6, 0xf5, 0x5b, 0xeb, 0xa1, 0x18, 0x86, + 0xcf, 0x2c, 0x81, 0xed, 0x68, 0x1d, 0x1d, 0xe9, 0xe1, 0xc3, 0xff, 0xba, 0xaa, 0x39, 0xea, 0x54, 0x2e, 0x67, 0xc7, + 0x13, 0x96, 0x22, 0x66, 0xd0, 0xfd, 0x75, 0xfb, 0x4a, 0x00, 0xdd, 0x2e, 0x8b, 0x79, 0x36, 0xda, 0xc9, 0xbf, 0xa5, + 0x1b, 0x2b, 0x4a, 0x9b, 0x78, 0x97, 0xf5, 0xc6, 0xfe, 0x70, 0xf4, 0x97, 0x67, 0x5f, 0x26, 0x84, 0xaa, 0xb3, 0x61, + 0x6b, 0x1d, 0xe7, 0xf2, 0xbf, 0xfe, 0x3a, 0x26, 0x2b, 0x08, 0x0a, 0xc2, 0xb2, 0x53, 0x4c, 0x54, 0x30, 0x8a, 0x14, + 0x6b, 0x3e, 0x9e, 0xac, 0x51, 0x27, 0xbc, 0xf6, 0x97, 0x5a, 0x27, 0x4c, 0x8c, 0xac, 0x54, 0xfe, 0x9a, 0x55, 0xec, + 0x4e, 0x65, 0x16, 0x90, 0x79, 0x90, 0x4f, 0xd6, 0x46, 0x83, 0xb9, 0xe2, 0xf5, 0x6c, 0x3d, 0x97, 0xca, 0x67, 0x30, + 0xe5, 0x2c, 0x07, 0x27, 0x4b, 0x61, 0xf7, 0x24, 0x50, 0xb4, 0x66, 0xe8, 0xda, 0x9f, 0x62, 0xab, 0x5e, 0xa7, 0x55, + 0x0d, 0xf0, 0x80, 0x10, 0x03, 0x43, 0xed, 0xd5, 0xc2, 0x43, 0x6b, 0x01, 0xac, 0xfd, 0x51, 0xe9, 0x07, 0xe3, 0xc9, + 0x92, 0x2f, 0x90, 0x7f, 0x39, 0x72, 0xd4, 0xee, 0xfd, 0xbe, 0x77, 0x0f, 0x52, 0x70, 0xe4, 0x5a, 0x28, 0x90, 0x08, + 0x68, 0xc1, 0x37, 0xbe, 0xf2, 0xc1, 0xb8, 0x46, 0x6d, 0x35, 0x28, 0xa8, 0x1d, 0xdd, 0xf2, 0xd8, 0xd1, 0x3b, 0xdf, + 0x9f, 0xd0, 0x57, 0x2f, 0xb4, 0x70, 0xfc, 0x95, 0x33, 0x72, 0xcd, 0x56, 0x1d, 0x72, 0x44, 0x33, 0xe9, 0x10, 0x22, + 0x56, 0x6c, 0xcd, 0xae, 0x49, 0xe5, 0xdc, 0x39, 0x64, 0xa7, 0x8f, 0x50, 0xa5, 0xd7, 0x7a, 0x7c, 0x3b, 0x51, 0xba, + 0xdb, 0xe3, 0xdd, 0xe4, 0x5b, 0x36, 0x11, 0x31, 0x18, 0xd0, 0x06, 0xe1, 0x8c, 0xac, 0x43, 0xa4, 0xd2, 0x01, 0x42, + 0xe0, 0x98, 0x80, 0xa6, 0xff, 0xf8, 0x9a, 0x44, 0x01, 0x47, 0xda, 0x08, 0x59, 0xcb, 0x0e, 0x87, 0x1c, 0x34, 0xca, + 0xcd, 0x1f, 0x5e, 0xa1, 0x4e, 0x73, 0x60, 0x9e, 0x2e, 0x61, 0xcf, 0xc1, 0x23, 0xbd, 0x38, 0x3e, 0xd2, 0xff, 0x3b, + 0x9a, 0xa8, 0xf1, 0x7f, 0xae, 0x89, 0x52, 0x5a, 0x24, 0x47, 0xb5, 0xf4, 0x4d, 0xea, 0x28, 0xb8, 0xc8, 0x3b, 0x6a, + 0x21, 0x7b, 0x96, 0x8d, 0x1b, 0xd5, 0xbc, 0xff, 0x5f, 0x2b, 0xf3, 0xff, 0x35, 0xad, 0x0c, 0x53, 0xb2, 0x63, 0xa9, + 0x66, 0x1e, 0x68, 0x15, 0xc3, 0xec, 0x67, 0x92, 0x10, 0x19, 0x2e, 0x0d, 0xf8, 0x51, 0x05, 0xfb, 0x38, 0xad, 0xd6, + 0x59, 0xb8, 0x43, 0x25, 0xea, 0xad, 0xb8, 0x4b, 0xf3, 0x97, 0xf5, 0xbf, 0x45, 0x59, 0xc0, 0xd4, 0xbe, 0x2b, 0xd3, + 0x38, 0x20, 0x0b, 0x7f, 0x16, 0x96, 0x38, 0xb9, 0xb1, 0x8d, 0x3f, 0xcb, 0xf1, 0xb4, 0x5f, 0x75, 0x66, 0x1e, 0x48, + 0xa0, 0x06, 0xe2, 0x8f, 0x9c, 0xcb, 0xca, 0xe2, 0x01, 0xa1, 0x9b, 0x7f, 0x28, 0xcb, 0xa2, 0xf4, 0x7a, 0x9f, 0x92, + 0xb4, 0x3a, 0x5b, 0x89, 0x3a, 0x29, 0x62, 0x05, 0x65, 0x93, 0x02, 0x8c, 0x3e, 0xac, 0x3c, 0x11, 0x07, 0x67, 0x08, + 0xd4, 0x70, 0x56, 0x27, 0x21, 0x00, 0x0d, 0x2b, 0x84, 0xfd, 0x33, 0x68, 0xe1, 0x59, 0x18, 0x87, 0x6b, 0x80, 0xc9, + 0x49, 0xab, 0xb3, 0x75, 0x59, 0xdc, 0xa7, 0xb1, 0x88, 0x47, 0x3d, 0x45, 0xc9, 0xf2, 0x26, 0x77, 0xe5, 0x5c, 0x7f, + 0xff, 0x07, 0x05, 0xb0, 0x1b, 0x30, 0xdb, 0x16, 0xd8, 0x01, 0x40, 0x82, 0x02, 0xd9, 0x42, 0x9d, 0x46, 0x67, 0x6a, + 0xa9, 0xc0, 0x7b, 0xae, 0x07, 0xf8, 0x9b, 0x1c, 0xb0, 0x8c, 0xeb, 0x42, 0x06, 0x8c, 0x20, 0x80, 0x11, 0x38, 0x28, + 0x01, 0x43, 0x67, 0x88, 0xdb, 0xaa, 0x9c, 0xb5, 0xd0, 0x5c, 0xe9, 0xb6, 0xe4, 0xa6, 0x51, 0xce, 0x56, 0x22, 0x80, + 0xbe, 0xba, 0x29, 0x71, 0xba, 0x5c, 0xb6, 0x92, 0xb0, 0x6f, 0xdf, 0xb7, 0x53, 0x45, 0x1e, 0x1f, 0xa5, 0x21, 0xaf, + 0xc0, 0x93, 0x8c, 0x23, 0x49, 0x94, 0x08, 0xde, 0xe4, 0x8d, 0x19, 0x87, 0x97, 0x6d, 0xca, 0xa9, 0xbd, 0x59, 0x2f, + 0x00, 0xe7, 0x09, 0xda, 0x32, 0xc0, 0x58, 0xc0, 0xe0, 0x5c, 0x88, 0x25, 0x4f, 0x11, 0xfc, 0xd2, 0x89, 0x14, 0xc6, + 0x5d, 0x0e, 0xc3, 0x3c, 0x28, 0x7a, 0x97, 0xd4, 0x1f, 0xfd, 0x3e, 0x6a, 0x93, 0xc1, 0x10, 0x54, 0x02, 0xa8, 0xac, + 0x1b, 0x24, 0x06, 0x56, 0xa5, 0x85, 0xc4, 0x25, 0xc4, 0xcb, 0x7c, 0x35, 0xad, 0xa3, 0xe0, 0x7d, 0x3d, 0x21, 0x84, + 0x13, 0x8c, 0x0f, 0x71, 0x03, 0x04, 0x0c, 0x56, 0x71, 0x81, 0x41, 0xf2, 0x5c, 0xa2, 0xfb, 0xe3, 0xf9, 0x8e, 0x01, + 0xae, 0x9c, 0xf7, 0x54, 0xbb, 0x7a, 0x60, 0x2f, 0x57, 0xe9, 0x92, 0x11, 0xc2, 0x8a, 0xff, 0x8b, 0xc8, 0xfb, 0x76, + 0x98, 0x80, 0xda, 0x46, 0xfe, 0x18, 0x24, 0xe6, 0x32, 0x51, 0x04, 0xf1, 0x28, 0x2b, 0x58, 0x92, 0x06, 0x9b, 0x51, + 0x92, 0x82, 0x46, 0x13, 0x63, 0xc8, 0x54, 0x68, 0x87, 0xa4, 0xd1, 0x6c, 0x4c, 0xf6, 0x31, 0xe4, 0x35, 0x5c, 0x2c, + 0x16, 0x78, 0xdf, 0xcf, 0x42, 0x75, 0xb0, 0x2d, 0xcd, 0x21, 0xe0, 0x24, 0xc1, 0x9e, 0xba, 0x22, 0x25, 0x61, 0x36, + 0xfa, 0x14, 0x72, 0x6e, 0x40, 0xc7, 0x49, 0x63, 0xa8, 0x3e, 0x30, 0x09, 0xaf, 0x22, 0x74, 0x52, 0x56, 0x08, 0x0b, + 0xb8, 0x6f, 0x64, 0x34, 0x5a, 0x49, 0x83, 0xc0, 0xdb, 0x0c, 0x5b, 0x81, 0x4d, 0x68, 0xf8, 0xcb, 0xcc, 0xc3, 0xb4, + 0x9a, 0x95, 0x60, 0xce, 0x37, 0x50, 0x89, 0xf1, 0x64, 0x79, 0xc5, 0x37, 0x2e, 0x56, 0x62, 0x32, 0x5b, 0xce, 0x27, + 0x6b, 0x49, 0x35, 0x97, 0x7b, 0x6b, 0x96, 0xb1, 0x25, 0xec, 0x1f, 0x06, 0x86, 0xd2, 0x81, 0x1d, 0x4d, 0x35, 0x6d, + 0x12, 0x60, 0x32, 0x9d, 0x73, 0x3e, 0xbc, 0x44, 0x34, 0x59, 0x9d, 0xba, 0x93, 0xa9, 0x6a, 0x07, 0xd7, 0xe4, 0x4c, + 0x4e, 0x8f, 0xd4, 0x53, 0xad, 0x7b, 0xc9, 0x47, 0xdb, 0x61, 0x35, 0xda, 0xfa, 0x01, 0xb8, 0x75, 0x0a, 0x3b, 0x7d, + 0x37, 0xac, 0x46, 0x3b, 0x5f, 0xc3, 0xee, 0x92, 0x42, 0xa0, 0xfa, 0xb3, 0xac, 0xc9, 0x5c, 0xbc, 0x2e, 0x1e, 0xbc, + 0x82, 0x3d, 0xf7, 0x07, 0xfa, 0x57, 0xc9, 0x9e, 0xfb, 0x36, 0x93, 0xeb, 0x9f, 0x69, 0xd7, 0x68, 0xcc, 0x74, 0xbc, + 0x76, 0x05, 0x56, 0x68, 0x80, 0xfc, 0x82, 0x1d, 0xed, 0x6d, 0x0e, 0x02, 0x01, 0xba, 0x97, 0xe0, 0x28, 0x0a, 0x88, + 0x9a, 0x56, 0x95, 0x47, 0xa7, 0x7b, 0x7f, 0x8f, 0x6f, 0x94, 0x80, 0x4d, 0x9e, 0x5a, 0xf7, 0x96, 0xb1, 0x7f, 0x38, + 0x40, 0x08, 0xbd, 0x9c, 0x7e, 0xa3, 0x2d, 0xab, 0x47, 0x3b, 0x96, 0xfb, 0x86, 0x51, 0x4f, 0xc1, 0x18, 0x86, 0x2e, + 0xac, 0x62, 0x24, 0xcf, 0x80, 0xac, 0xf1, 0x1b, 0x44, 0x17, 0xb0, 0xe8, 0xf5, 0x5e, 0x1f, 0xd1, 0x20, 0x02, 0x2a, + 0xbd, 0xe6, 0x2f, 0x45, 0x3e, 0x57, 0x85, 0xe8, 0xbd, 0xb7, 0x76, 0xde, 0xcc, 0x48, 0x96, 0x49, 0x23, 0xd5, 0x6e, + 0x65, 0xb1, 0xae, 0xbc, 0xd9, 0x09, 0xe9, 0x62, 0x8e, 0xa1, 0x32, 0x78, 0x1c, 0x80, 0xd2, 0xf3, 0x6f, 0xa1, 0x57, + 0x32, 0x64, 0x9a, 0x25, 0x9a, 0xd9, 0x5d, 0xe3, 0x4f, 0x56, 0xa9, 0x17, 0x23, 0x62, 0x36, 0xb0, 0x85, 0xb8, 0x2d, + 0x2a, 0xdd, 0x16, 0x85, 0xb2, 0x45, 0x91, 0x3e, 0xd4, 0xce, 0x74, 0x67, 0x16, 0x3e, 0xab, 0x4c, 0xfb, 0xde, 0x66, + 0x66, 0x6c, 0x80, 0xb6, 0x8b, 0xf0, 0x0d, 0x74, 0xa0, 0x42, 0xc8, 0x7f, 0x40, 0x44, 0x24, 0x02, 0x76, 0x39, 0x75, + 0x27, 0x36, 0x1d, 0x92, 0x79, 0x88, 0x59, 0xa1, 0x46, 0x79, 0xc9, 0x93, 0xa3, 0x01, 0xa9, 0x08, 0x75, 0xbb, 0xdf, + 0x3f, 0x5f, 0xba, 0xa0, 0xf6, 0x6b, 0x8a, 0x1d, 0xa3, 0x9b, 0x02, 0xce, 0x05, 0x8f, 0xf2, 0x9e, 0x7b, 0xe7, 0x80, + 0xe6, 0xd8, 0x9e, 0x22, 0x6b, 0xc0, 0xe9, 0x6d, 0x17, 0x02, 0x6c, 0x9f, 0x35, 0x5b, 0xfb, 0x93, 0xd5, 0x55, 0x34, + 0xf5, 0x4a, 0x3e, 0xd3, 0x5d, 0x94, 0xb8, 0x5d, 0x14, 0xcb, 0x2e, 0xda, 0x34, 0x10, 0xec, 0xb8, 0xf2, 0x03, 0xe0, + 0x0d, 0x8d, 0xfa, 0xfd, 0xb2, 0xd5, 0xb3, 0x27, 0x5f, 0x3b, 0xee, 0xd9, 0xcc, 0x67, 0xa5, 0xe9, 0xd9, 0x5f, 0x53, + 0xb7, 0x67, 0xe5, 0x64, 0x2f, 0x3a, 0x27, 0xfb, 0x74, 0x36, 0x0f, 0x04, 0x97, 0x3b, 0xf7, 0x79, 0x3e, 0xd5, 0xd3, + 0xae, 0xf2, 0x83, 0xd6, 0x10, 0x99, 0x2f, 0x7c, 0xaa, 0xba, 0xd7, 0x15, 0x2c, 0x60, 0x09, 0xee, 0xd6, 0x4b, 0xf3, + 0x5f, 0xb1, 0xfb, 0x7b, 0x41, 0x2f, 0xcd, 0x7f, 0xa3, 0x3f, 0x29, 0x80, 0x03, 0xd0, 0x98, 0xda, 0x2d, 0xf0, 0x10, + 0x43, 0x05, 0x85, 0xbb, 0x59, 0x39, 0xf7, 0x6a, 0x80, 0xc3, 0x24, 0x7d, 0x43, 0xab, 0x57, 0x5a, 0xec, 0x7a, 0x99, + 0xec, 0x15, 0xe0, 0xa1, 0x0a, 0x79, 0x78, 0x38, 0x44, 0x1d, 0xc3, 0x0e, 0xea, 0x08, 0x18, 0xf6, 0x10, 0x1a, 0x5b, + 0xe0, 0xf9, 0xf8, 0x29, 0xe3, 0x7b, 0x01, 0x6a, 0x23, 0x84, 0xc7, 0xab, 0x45, 0x19, 0x62, 0xcb, 0xde, 0x22, 0x95, + 0xd4, 0xcf, 0x02, 0x51, 0x46, 0xab, 0x80, 0xb6, 0xda, 0x63, 0x96, 0xc6, 0x1b, 0x08, 0x15, 0x4b, 0x7d, 0x0c, 0xa1, + 0x81, 0xc3, 0xef, 0x70, 0x00, 0x09, 0xbe, 0xe4, 0x9a, 0x6c, 0xee, 0x6d, 0x7e, 0x4f, 0xfb, 0xfc, 0xe1, 0x70, 0x7e, + 0x89, 0xa0, 0x74, 0x29, 0x7c, 0xa4, 0x12, 0x51, 0x3d, 0xc5, 0x4d, 0x09, 0xd9, 0x2c, 0x59, 0xe9, 0x07, 0xbf, 0xaa, + 0x5f, 0x00, 0x20, 0x0b, 0x81, 0x36, 0x91, 0xd9, 0x9f, 0xce, 0x54, 0x74, 0x01, 0x70, 0x88, 0x3f, 0x7e, 0x82, 0xe8, + 0x1b, 0x5a, 0xa6, 0xe5, 0xe3, 0x84, 0x87, 0xa0, 0xb5, 0x25, 0x9d, 0x44, 0xac, 0x14, 0xd8, 0x10, 0x09, 0xdf, 0xef, + 0x9f, 0xc7, 0x92, 0x0e, 0x34, 0x6a, 0x75, 0x6f, 0xdc, 0xea, 0x5e, 0xf9, 0xba, 0xee, 0xe4, 0xc6, 0x07, 0x45, 0xfb, + 0x6c, 0xde, 0xa8, 0x7c, 0xdf, 0xd6, 0x39, 0xbb, 0xd3, 0xbd, 0x23, 0xe7, 0xc4, 0xb7, 0xf7, 0x10, 0x8a, 0x1e, 0x9a, + 0x22, 0xcb, 0x92, 0x30, 0xa0, 0xb5, 0x76, 0xed, 0x59, 0x46, 0x07, 0xaf, 0x7d, 0x43, 0x88, 0xc8, 0x53, 0x7c, 0x12, + 0x72, 0x8b, 0xe3, 0x83, 0x02, 0xfd, 0x33, 0xe3, 0xcf, 0x9c, 0xf8, 0x61, 0xab, 0x5f, 0x00, 0xe7, 0xa6, 0x7b, 0xef, + 0x4e, 0xcc, 0x7a, 0x0c, 0xa5, 0x6c, 0xfc, 0xdf, 0xef, 0x13, 0x59, 0xa0, 0xd3, 0x11, 0x0d, 0x03, 0xc1, 0x5d, 0x54, + 0xff, 0xf7, 0x8a, 0xd7, 0x3d, 0x6b, 0x75, 0xbe, 0xfc, 0xd4, 0xe9, 0x49, 0xaf, 0x5e, 0xc6, 0x3d, 0xa0, 0x42, 0x07, + 0x08, 0xe7, 0x75, 0xbf, 0x61, 0xbb, 0x6f, 0x7e, 0x79, 0x77, 0xf4, 0x32, 0xb0, 0x49, 0x91, 0xd8, 0x56, 0xf2, 0x59, + 0x0f, 0x14, 0x7e, 0x3d, 0xd6, 0xab, 0x8b, 0x75, 0x8f, 0xf5, 0x50, 0x0b, 0x88, 0x1e, 0x16, 0xa0, 0xfe, 0xeb, 0xd9, + 0xa7, 0xa1, 0x70, 0x90, 0x8d, 0x53, 0x05, 0x8a, 0x2c, 0xf8, 0x0b, 0x31, 0x5a, 0x17, 0x04, 0x88, 0x6c, 0x09, 0x69, + 0xd5, 0xc9, 0xec, 0x71, 0xa9, 0x25, 0x19, 0x7c, 0x13, 0x90, 0xd9, 0x81, 0x95, 0x13, 0x94, 0x8e, 0x5b, 0x03, 0xae, + 0x6c, 0xf1, 0x68, 0xb7, 0x3f, 0x0d, 0xb2, 0xb3, 0xe6, 0xa4, 0xd1, 0x3e, 0xec, 0xd3, 0x3c, 0x40, 0x20, 0x92, 0xa9, + 0x08, 0x72, 0xcd, 0xbd, 0x25, 0x7d, 0x74, 0x38, 0xe7, 0x85, 0xfc, 0x73, 0x2a, 0x75, 0x88, 0x43, 0x89, 0x35, 0x10, + 0xa8, 0x3c, 0x43, 0x95, 0xc3, 0x06, 0x39, 0xfe, 0xd9, 0x91, 0xcc, 0x24, 0x26, 0x8b, 0xdc, 0xad, 0x99, 0x0a, 0x3f, + 0x10, 0x7c, 0xcc, 0x72, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x02, 0x7f, 0x4c, 0xe1, 0x57, 0x3c, + 0x85, 0x9d, 0x76, 0xbf, 0x2e, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, + 0x3f, 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x65, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x06, + 0x15, 0x5b, 0x17, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xaa, 0x51, 0x5a, 0xfd, 0xa8, + 0x7f, 0x02, 0xf3, 0x36, 0x15, 0xa3, 0x5a, 0xc5, 0xe4, 0x37, 0xfa, 0xfd, 0x62, 0xd0, 0xfa, 0x90, 0xc1, 0x47, 0xaf, + 0x4d, 0x83, 0x3f, 0x3a, 0x0d, 0x76, 0x98, 0x68, 0x04, 0x40, 0x32, 0xa7, 0x96, 0x3c, 0x14, 0xfd, 0x11, 0xe4, 0x58, + 0xa3, 0xca, 0x29, 0x18, 0xac, 0xff, 0x78, 0xb4, 0x03, 0x53, 0x2f, 0x8e, 0xb6, 0x64, 0x07, 0xad, 0x7c, 0x03, 0xdc, + 0xaf, 0x91, 0x2d, 0x66, 0x39, 0x40, 0xb3, 0xd7, 0x88, 0x8c, 0x4f, 0x5e, 0x00, 0x63, 0xb6, 0xce, 0xc2, 0x48, 0xc4, + 0xc1, 0x58, 0x35, 0x66, 0xcc, 0xc0, 0xc0, 0x05, 0xba, 0x96, 0x49, 0x49, 0x1a, 0xd2, 0xc1, 0x80, 0x95, 0xb2, 0x85, + 0x03, 0x5e, 0x34, 0xc7, 0xed, 0x78, 0xd3, 0xa2, 0xf1, 0xc0, 0x76, 0xb1, 0xfd, 0xfd, 0xf7, 0xc5, 0xf6, 0x3a, 0xdc, + 0x92, 0x5e, 0x21, 0x67, 0x09, 0xfd, 0xfc, 0x51, 0xf6, 0x59, 0xc3, 0xc9, 0xa9, 0xd0, 0x0c, 0x2d, 0x45, 0x42, 0x29, + 0xde, 0xe9, 0x49, 0x81, 0xb1, 0x8c, 0x85, 0xbf, 0x07, 0xce, 0xe9, 0x42, 0x11, 0xb9, 0x03, 0xc7, 0xf1, 0x0d, 0x54, + 0x30, 0x6a, 0x38, 0x78, 0x19, 0xc3, 0xb6, 0x28, 0x66, 0x21, 0xe1, 0x14, 0xc2, 0xc5, 0x2a, 0xeb, 0xf7, 0xe5, 0x2f, + 0xea, 0xa2, 0x8b, 0x4c, 0xd6, 0x7d, 0x12, 0x8e, 0xcc, 0x58, 0x4e, 0xbd, 0x90, 0x3c, 0xef, 0x79, 0x32, 0x4d, 0x9e, + 0xe5, 0x41, 0x04, 0x90, 0xcf, 0xe1, 0x7d, 0x98, 0x66, 0x60, 0x95, 0x26, 0xe5, 0x47, 0x28, 0x7d, 0xf1, 0x79, 0xe5, + 0x07, 0x3a, 0x7b, 0x6e, 0x92, 0xe1, 0xcd, 0xaa, 0xf5, 0x26, 0xb5, 0xae, 0x8b, 0x07, 0xfc, 0x8b, 0x33, 0xd8, 0x38, + 0xd7, 0x99, 0xe0, 0xc0, 0x8b, 0xa4, 0xd6, 0x6b, 0xc6, 0x5f, 0x64, 0xb8, 0x2e, 0x55, 0x1b, 0x7d, 0x14, 0xa2, 0x73, + 0xc8, 0x54, 0x80, 0x42, 0x91, 0xf6, 0x0f, 0x4a, 0xad, 0x4c, 0x2a, 0x6d, 0x24, 0x80, 0xee, 0x61, 0xd2, 0x60, 0x8b, + 0xa1, 0x8c, 0xa5, 0x49, 0x94, 0x3b, 0x0d, 0xe2, 0xca, 0xfe, 0x5c, 0x49, 0x1c, 0x5a, 0x16, 0xc9, 0xbf, 0x77, 0x3d, + 0x7d, 0x85, 0xd4, 0x9d, 0x2c, 0x90, 0x19, 0xe3, 0x65, 0x1e, 0x7f, 0x02, 0xc2, 0x6c, 0xd0, 0x46, 0x45, 0x21, 0x84, + 0x6c, 0x10, 0x83, 0xc6, 0xcb, 0x3c, 0xfe, 0x5e, 0xd1, 0x78, 0xc8, 0x47, 0x91, 0xaf, 0xfe, 0x2a, 0xf5, 0x5f, 0xa1, + 0xcf, 0x4c, 0xf0, 0x08, 0xd5, 0x44, 0xff, 0xee, 0xf9, 0xec, 0x1e, 0xd4, 0x86, 0x51, 0x98, 0x99, 0xf2, 0x2b, 0xdf, + 0x14, 0x67, 0xaf, 0xbf, 0xa2, 0xab, 0x6c, 0xeb, 0x7e, 0xf4, 0xf1, 0x88, 0xc0, 0xda, 0x18, 0x5d, 0x71, 0x63, 0x00, + 0x39, 0x4c, 0xde, 0xaf, 0x28, 0x2d, 0x87, 0x34, 0x08, 0x1d, 0x34, 0x04, 0xbd, 0x92, 0xe8, 0x03, 0x89, 0x45, 0x8c, + 0xe1, 0x85, 0x78, 0x46, 0x6a, 0x32, 0xd1, 0x10, 0xaf, 0x88, 0xfd, 0x10, 0x2d, 0x39, 0x35, 0xd1, 0x8d, 0x30, 0xc5, + 0x40, 0x62, 0x67, 0x90, 0x9c, 0x24, 0xb5, 0xf2, 0x8b, 0x67, 0x92, 0xb0, 0xc4, 0xce, 0x43, 0x0c, 0x26, 0xb5, 0x74, + 0xa7, 0x37, 0x55, 0x7a, 0x77, 0xa4, 0xe5, 0xa0, 0x7d, 0x00, 0x76, 0x29, 0xe9, 0xfd, 0x93, 0x42, 0x11, 0x1f, 0xc2, + 0x38, 0x86, 0xf0, 0x2d, 0xa2, 0xba, 0x02, 0xe7, 0x5a, 0x81, 0xc6, 0x6a, 0xe0, 0xa1, 0x99, 0x55, 0xf3, 0x21, 0xa7, + 0x9f, 0x4a, 0xcb, 0x1f, 0x23, 0x1a, 0x1b, 0xad, 0x9b, 0xc3, 0x61, 0x4f, 0xab, 0x5e, 0x3a, 0x07, 0x5d, 0x36, 0x93, + 0x98, 0xb8, 0x81, 0x74, 0xfd, 0xe8, 0x37, 0x13, 0xf6, 0x22, 0x2a, 0xe4, 0x52, 0x08, 0x0a, 0x5a, 0x1d, 0x08, 0x1c, + 0x0a, 0x6f, 0x51, 0xe6, 0x8b, 0x98, 0x36, 0x10, 0x06, 0x9f, 0x1f, 0xc8, 0xcf, 0x37, 0x05, 0xa9, 0xd8, 0xb1, 0xae, + 0xfd, 0xfe, 0xa6, 0xf4, 0x00, 0x4f, 0xce, 0x24, 0x79, 0xda, 0x0c, 0x61, 0x45, 0x00, 0x8d, 0x59, 0x4d, 0x16, 0x27, + 0x5c, 0x99, 0xc3, 0x8f, 0x95, 0x57, 0xb2, 0x94, 0xa9, 0xf3, 0x54, 0x2f, 0x80, 0xa8, 0xe3, 0x0d, 0x5a, 0x91, 0xfa, + 0x15, 0x3a, 0x7b, 0xcd, 0x4a, 0xc8, 0x78, 0x78, 0xce, 0x79, 0x3a, 0x7a, 0x60, 0x09, 0x8f, 0xf0, 0xaf, 0x64, 0xa2, + 0x0f, 0xbf, 0x07, 0x0e, 0x37, 0xe3, 0x84, 0x47, 0x6e, 0xb3, 0xf7, 0x55, 0xb8, 0x82, 0x9b, 0x69, 0x01, 0x48, 0x6e, + 0x41, 0xd2, 0x04, 0x94, 0x90, 0xc8, 0x84, 0xcc, 0x9a, 0x92, 0x9f, 0x5b, 0xda, 0x06, 0x6b, 0x98, 0x74, 0x1e, 0xf0, + 0xa2, 0xd5, 0x47, 0xab, 0x89, 0x76, 0x99, 0xe5, 0xf3, 0x21, 0xce, 0x50, 0xcd, 0x71, 0x77, 0x06, 0x3f, 0x07, 0xbc, + 0x62, 0x55, 0x93, 0x8e, 0x76, 0x03, 0x2e, 0x3c, 0xb9, 0xce, 0xd3, 0xd1, 0x16, 0x7f, 0xc9, 0xfd, 0x01, 0xa0, 0x83, + 0xa9, 0x4b, 0xe0, 0x4f, 0xd5, 0x56, 0x53, 0xa9, 0x5f, 0x5a, 0xfb, 0x75, 0xdd, 0x59, 0xad, 0xdc, 0xb3, 0x2e, 0x43, + 0x7b, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, + 0x82, 0x7b, 0xc9, 0x5f, 0xec, 0x11, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, + 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xb1, 0x34, 0x26, 0x45, + 0x05, 0xe9, 0x9c, 0x0e, 0x37, 0xaf, 0x8e, 0xf3, 0x84, 0x65, 0x7c, 0xdc, 0x3e, 0x53, 0x20, 0xc4, 0x16, 0xcf, 0x90, + 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x38, 0xd4, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, + 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1a, 0xfe, 0x2e, 0x43, 0x75, 0x77, 0x08, + 0x4c, 0x6c, 0xd9, 0x81, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x1b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, + 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x11, 0x5e, 0x25, 0x5b, 0x79, 0x38, 0x24, 0xd6, 0x5d, 0xd8, 0xd1, + 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0xe4, 0x66, 0x17, 0x12, 0x83, 0x8a, 0xa5, 0xfa, + 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xd5, 0x71, 0x9f, 0x8a, 0xd1, 0x5a, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, + 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x5c, 0x1f, 0xc7, 0x87, 0x83, 0x14, 0x33, + 0x2e, 0x8f, 0xc4, 0x8c, 0xcb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xc3, 0xe1, 0x92, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, + 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4b, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x75, 0xea, 0x65, 0xe4, + 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x2a, 0xda, 0xad, 0x4b, 0x26, + 0xec, 0x2d, 0xa5, 0x92, 0x56, 0x79, 0xf9, 0x74, 0xe3, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, + 0x12, 0xb5, 0x32, 0x4c, 0x16, 0xce, 0x4b, 0xa6, 0x9e, 0x0c, 0x78, 0xcc, 0x4a, 0x1e, 0xc9, 0x4e, 0x6f, 0x0c, 0x82, + 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x74, 0x95, 0x0b, 0x0c, 0xb7, 0x5b, 0xb3, 0x8d, + 0xaa, 0xb3, 0xdc, 0xd4, 0x2a, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0x37, 0x10, 0x8c, + 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x05, 0x96, 0xd2, 0xd1, 0x8e, 0x97, + 0xa8, 0x52, 0xf8, 0xbb, 0xe0, 0xfb, 0x30, 0x8e, 0xbf, 0x2f, 0xb6, 0xea, 0x40, 0xbc, 0x2d, 0xb6, 0x48, 0xfb, 0x22, + 0xff, 0x42, 0x1c, 0xf0, 0x5a, 0xd7, 0x94, 0xd7, 0xd6, 0x9c, 0x06, 0xb6, 0x86, 0x91, 0x92, 0xc2, 0xb9, 0xf9, 0xf3, + 0x70, 0xa0, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x44, 0x09, 0x8e, 0x5c, + 0xf2, 0xaf, 0xc3, 0x41, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0xdb, 0x7f, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, + 0x24, 0xff, 0x6a, 0x9a, 0x79, 0xc3, 0x64, 0xcd, 0x14, 0x8e, 0x43, 0xc3, 0x08, 0x69, 0x40, 0xb7, 0x41, 0x6d, 0x78, + 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0x97, 0x13, 0x71, 0x4e, 0x97, 0x24, 0xf5, 0x54, 0x42, + 0x49, 0x08, 0x76, 0xe9, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, + 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xab, + 0x78, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8a, 0x4d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, + 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xac, 0xe4, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, + 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0x1f, 0x55, 0x36, 0x76, 0x07, 0xe4, 0x90, 0x64, 0xb2, 0xb8, 0x1b, 0xdd, + 0x8a, 0x65, 0x51, 0x8a, 0x9f, 0xb1, 0x1e, 0xae, 0xd9, 0xc2, 0x7d, 0x06, 0x84, 0xf6, 0x13, 0xa5, 0xbd, 0x89, 0x34, + 0x41, 0xf7, 0x1d, 0x5b, 0x01, 0xc8, 0x00, 0x8a, 0xba, 0xda, 0xad, 0xcf, 0xf9, 0x39, 0x92, 0x66, 0x38, 0x8c, 0x6e, + 0x9f, 0xde, 0x05, 0x77, 0x83, 0x4b, 0xd4, 0x4a, 0x5f, 0xb2, 0xb8, 0x85, 0x41, 0xb5, 0x37, 0x4b, 0x38, 0xa8, 0x99, + 0xb5, 0x36, 0x02, 0xc1, 0x64, 0x0f, 0x05, 0x15, 0x73, 0x05, 0xfb, 0xa0, 0x60, 0x2d, 0x79, 0x1d, 0x1c, 0x6e, 0xed, + 0xcb, 0x4a, 0x71, 0xf1, 0xfc, 0x22, 0x69, 0x5d, 0x58, 0xca, 0x8b, 0xe7, 0x0d, 0x18, 0x5c, 0x8e, 0xb0, 0xa9, 0x2a, + 0x7f, 0xb2, 0x01, 0xd0, 0xad, 0x90, 0x22, 0x5e, 0x94, 0xc2, 0xb6, 0x95, 0xcf, 0x9c, 0xb0, 0xc1, 0x86, 0x3d, 0xc0, + 0xbd, 0x32, 0x28, 0x19, 0x5c, 0x88, 0x71, 0xbb, 0xd9, 0x05, 0xb8, 0x82, 0xa1, 0x30, 0xb6, 0xe6, 0x6f, 0x32, 0x2f, + 0x52, 0x02, 0x6e, 0x86, 0x28, 0x5f, 0x1b, 0x38, 0x99, 0xf4, 0xe4, 0x5a, 0xb2, 0x18, 0xb0, 0xa0, 0xc1, 0x77, 0xd4, + 0xfa, 0x3b, 0x93, 0x7f, 0xe3, 0xe9, 0xa1, 0x1f, 0x7c, 0xce, 0xbc, 0xa5, 0xcf, 0xde, 0x54, 0x32, 0x5a, 0x93, 0x44, + 0x79, 0xf5, 0x70, 0x09, 0x72, 0xc3, 0x72, 0xf4, 0xc0, 0x96, 0x20, 0x4e, 0x2c, 0x47, 0x09, 0x65, 0x74, 0x85, 0x7b, + 0x95, 0xd9, 0x32, 0x11, 0x48, 0x71, 0x60, 0x29, 0xe5, 0xde, 0x62, 0x1d, 0x2c, 0x71, 0x7f, 0x22, 0xb9, 0x80, 0x92, + 0x07, 0x50, 0xae, 0x14, 0x10, 0xf0, 0xe9, 0x00, 0xca, 0x97, 0xf2, 0x22, 0xfc, 0x89, 0x13, 0x35, 0x58, 0x8e, 0x1e, + 0x1a, 0xf6, 0xa3, 0x17, 0x5a, 0xf6, 0x87, 0x3b, 0xad, 0x69, 0x58, 0xf1, 0x3b, 0x98, 0x16, 0x13, 0xb7, 0x2f, 0x57, + 0x76, 0x55, 0x7c, 0xb6, 0x52, 0x67, 0x37, 0x35, 0x24, 0x61, 0x5f, 0x91, 0x55, 0x80, 0x83, 0x55, 0x11, 0xf7, 0x2c, + 0xcb, 0x7d, 0x18, 0xfd, 0xb9, 0x49, 0x4b, 0x61, 0xa1, 0x4a, 0xfa, 0xfb, 0xa6, 0x14, 0x48, 0x65, 0xa2, 0x13, 0x2d, + 0x04, 0x57, 0x60, 0x10, 0xb8, 0x17, 0x79, 0x0d, 0x80, 0x31, 0xe0, 0x52, 0xa0, 0x2c, 0xdb, 0x12, 0x42, 0xaa, 0xfb, + 0x19, 0xa8, 0xed, 0xc4, 0x7d, 0x1a, 0x91, 0xb5, 0x10, 0x7d, 0x15, 0x8c, 0x99, 0xf3, 0x52, 0xba, 0xc5, 0xa6, 0xab, + 0xcd, 0xea, 0x06, 0x9d, 0x4b, 0x5b, 0x6e, 0x7e, 0xc2, 0x16, 0x6b, 0x05, 0xca, 0x26, 0x24, 0x6d, 0xe7, 0x3c, 0x47, + 0xd9, 0x84, 0x96, 0xf6, 0x9e, 0x7a, 0x54, 0xa8, 0x4e, 0xb6, 0x5e, 0xaa, 0xa6, 0x16, 0x61, 0xb5, 0xb8, 0xa8, 0xfc, + 0x00, 0x74, 0x53, 0x69, 0xf5, 0xb2, 0xae, 0xd1, 0x14, 0x6a, 0xb5, 0x70, 0xdc, 0x68, 0x67, 0xd3, 0x65, 0x7a, 0x87, + 0x38, 0xab, 0xd2, 0x0e, 0xfd, 0x7d, 0xa6, 0x5d, 0x2f, 0x3b, 0xfa, 0xcd, 0xb8, 0xba, 0xc0, 0x85, 0xd8, 0x80, 0xcf, + 0xb9, 0xbf, 0xbc, 0xde, 0xf3, 0xb8, 0xe7, 0x1f, 0x0e, 0xc8, 0x9e, 0xd4, 0xfe, 0x50, 0x7d, 0xec, 0x0a, 0x86, 0x2c, + 0x8c, 0x52, 0x7f, 0x91, 0xf2, 0xde, 0x13, 0x1c, 0xf7, 0xcf, 0x55, 0x8f, 0xfd, 0x98, 0xf1, 0x7d, 0x5d, 0x6c, 0xa2, + 0x84, 0xa2, 0x1a, 0x7a, 0xab, 0x62, 0x53, 0x89, 0xb8, 0x78, 0xc8, 0x7b, 0x0c, 0x93, 0x61, 0x2c, 0x64, 0x2a, 0xfc, + 0x29, 0x53, 0xc1, 0x23, 0x84, 0x12, 0x37, 0xeb, 0x1e, 0x69, 0x37, 0x21, 0x4e, 0xa9, 0x16, 0xa5, 0x4c, 0xc6, 0xbf, + 0xf5, 0x13, 0x28, 0xcf, 0x29, 0x5a, 0xa6, 0x1f, 0x15, 0x2e, 0xd3, 0x37, 0xeb, 0xe3, 0xd2, 0x33, 0x11, 0xea, 0xcc, + 0xc5, 0xa6, 0xd6, 0xe9, 0x18, 0x3b, 0xa5, 0x53, 0x1b, 0xf6, 0xa5, 0x52, 0x5c, 0x56, 0x14, 0xfe, 0x8d, 0x44, 0x56, + 0x3d, 0x23, 0x8e, 0xff, 0x2b, 0x6b, 0x9f, 0x61, 0x15, 0xf8, 0x65, 0x20, 0xef, 0x17, 0x00, 0x1f, 0xd7, 0x75, 0x99, + 0xde, 0x6e, 0x80, 0x36, 0x84, 0x86, 0xbf, 0xe7, 0x23, 0x03, 0xa6, 0xfb, 0x08, 0x67, 0x48, 0x0f, 0x75, 0xce, 0xe9, + 0xac, 0x4c, 0xe7, 0x5c, 0x85, 0xb5, 0x04, 0x7b, 0x39, 0x69, 0x72, 0xb9, 0x2e, 0x41, 0xcd, 0x04, 0x6e, 0x1f, 0xda, + 0x23, 0x42, 0xa8, 0x4d, 0x59, 0x4d, 0x2f, 0xa1, 0xe6, 0x9d, 0x9c, 0x76, 0x34, 0x29, 0xc1, 0x55, 0x43, 0x67, 0xe5, + 0xfa, 0xaf, 0xc3, 0xa1, 0x77, 0x9b, 0x15, 0xd1, 0x1f, 0x3d, 0xf4, 0x77, 0xdc, 0xde, 0xa4, 0x5f, 0x20, 0x5a, 0xc6, + 0xfa, 0x1b, 0x32, 0xa0, 0xe3, 0xc9, 0xf0, 0xb6, 0xd8, 0xf6, 0xd8, 0x17, 0xd4, 0x60, 0xe9, 0xeb, 0xc7, 0x1f, 0x20, + 0xa1, 0xea, 0xda, 0x17, 0x16, 0x4f, 0x98, 0xa7, 0x44, 0xdb, 0xc2, 0x87, 0xb0, 0xd0, 0x2f, 0x10, 0x19, 0x09, 0xe1, + 0xa6, 0xb2, 0x7b, 0x94, 0xb4, 0x0b, 0x7d, 0xe9, 0x6b, 0xd9, 0x57, 0xbe, 0x73, 0x01, 0xb0, 0xb2, 0xcf, 0x6d, 0xb8, + 0x27, 0xfd, 0x29, 0xd5, 0x87, 0xed, 0x6f, 0xc9, 0x02, 0x0a, 0x2d, 0xac, 0xa7, 0x72, 0x76, 0xae, 0x4b, 0x9e, 0x66, + 0xd3, 0xfd, 0x1a, 0xf6, 0xa8, 0x7b, 0xf4, 0x9a, 0x0a, 0xce, 0x2f, 0xcd, 0xe8, 0xfd, 0xd3, 0x50, 0xa8, 0x8e, 0x3a, + 0x77, 0x90, 0x75, 0x69, 0x5d, 0x72, 0x7e, 0xb3, 0x72, 0x47, 0x61, 0x7e, 0x1f, 0x82, 0x67, 0x58, 0xf7, 0xee, 0xe2, + 0xbc, 0xf7, 0x67, 0x6b, 0x8e, 0xfc, 0x98, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0xf6, 0xdb, + 0x20, 0x87, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, + 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xdb, 0x20, 0xd7, 0x5d, 0x30, 0xcd, 0x91, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x92, 0x0a, + 0xcd, 0x22, 0x6d, 0x95, 0x8c, 0x7f, 0x47, 0xda, 0x4c, 0xc9, 0x1e, 0x5b, 0x03, 0xef, 0x25, 0x28, 0x27, 0xc3, 0x14, + 0xc3, 0x77, 0x7c, 0xbd, 0xf3, 0x98, 0x7b, 0xce, 0x31, 0xdb, 0xa4, 0xec, 0x08, 0x26, 0xc9, 0xc6, 0x37, 0x14, 0x6f, + 0xf8, 0xfe, 0xb6, 0x12, 0x25, 0x80, 0x5e, 0x16, 0xfc, 0x85, 0xb4, 0xb9, 0x42, 0xb7, 0xbb, 0x77, 0x94, 0xc2, 0x2f, + 0x79, 0x79, 0x38, 0x6c, 0x53, 0x2f, 0x84, 0xce, 0x17, 0xf1, 0x3b, 0x30, 0x87, 0x31, 0xc4, 0x66, 0x04, 0x08, 0x73, + 0x7c, 0x40, 0x1d, 0xac, 0x1f, 0x01, 0x68, 0x9c, 0x40, 0x01, 0x46, 0x5f, 0x6d, 0x0b, 0xfa, 0x96, 0x17, 0x17, 0x11, + 0xa2, 0x46, 0x01, 0x26, 0x4a, 0x9a, 0xc5, 0x30, 0x1c, 0xe8, 0xfc, 0xbe, 0xb9, 0xad, 0x4b, 0x81, 0x43, 0xef, 0x58, + 0x86, 0xff, 0xfe, 0x3f, 0xd6, 0x96, 0x56, 0x95, 0xed, 0xd6, 0x38, 0xcd, 0xfc, 0x6f, 0xb7, 0x85, 0xbe, 0xff, 0x4a, + 0x28, 0x9e, 0x77, 0xbc, 0x6e, 0xbf, 0x83, 0xe8, 0x7d, 0xdd, 0xca, 0xbb, 0x52, 0xbb, 0x61, 0xa6, 0xfc, 0x21, 0xcd, + 0xe3, 0xe2, 0x61, 0x14, 0xb7, 0x8e, 0xbc, 0x49, 0x7a, 0xce, 0xf9, 0xbb, 0xaa, 0xdf, 0xf7, 0xde, 0x01, 0x19, 0xef, + 0x2b, 0x61, 0x1c, 0x31, 0x89, 0x83, 0x6f, 0x2f, 0x46, 0xd1, 0xa6, 0x84, 0x0d, 0xb9, 0x7d, 0x5a, 0x82, 0x66, 0xa6, + 0xdf, 0x47, 0x89, 0xd2, 0x9a, 0xef, 0x7f, 0x93, 0xf3, 0xfd, 0x95, 0x90, 0x37, 0x2b, 0xf9, 0xe1, 0xa3, 0x15, 0x06, + 0xbe, 0xc7, 0xe9, 0x17, 0xd1, 0x63, 0x77, 0xa5, 0x0f, 0xdf, 0x95, 0x96, 0x3e, 0xab, 0xa8, 0x7f, 0xa0, 0xa2, 0xe6, + 0x95, 0x18, 0x11, 0xf1, 0x20, 0x68, 0x67, 0xdb, 0xa5, 0x76, 0x2d, 0x41, 0xbb, 0x60, 0x53, 0xd8, 0xbf, 0x1f, 0x1d, + 0xf2, 0x7e, 0xff, 0x63, 0xee, 0xb5, 0x78, 0xdd, 0x75, 0x68, 0xca, 0x4f, 0x85, 0x87, 0x10, 0xc0, 0x5a, 0x06, 0xca, + 0x38, 0xc2, 0xa4, 0x8b, 0xbc, 0x46, 0xd9, 0x74, 0x22, 0xf0, 0x31, 0xcb, 0xae, 0x9c, 0x64, 0x1a, 0x60, 0x46, 0x35, + 0x85, 0x99, 0x00, 0x23, 0xf5, 0x11, 0xeb, 0xa6, 0xa7, 0x55, 0x68, 0xf9, 0x1a, 0x82, 0x75, 0x91, 0x65, 0x1c, 0xc5, + 0x4c, 0x00, 0xb0, 0xf9, 0x08, 0xf2, 0x15, 0x5d, 0x1d, 0x92, 0x56, 0xaa, 0xbc, 0x5f, 0x67, 0x44, 0x46, 0x93, 0x10, + 0xcd, 0x6f, 0xe1, 0x81, 0x7d, 0xdb, 0xcc, 0xa8, 0x52, 0xcf, 0xa8, 0xca, 0x67, 0x38, 0x2c, 0x85, 0x63, 0xc4, 0xff, + 0x7b, 0xaa, 0x7a, 0x44, 0xa0, 0x57, 0x65, 0x5a, 0x45, 0x45, 0x9e, 0x8b, 0x08, 0x11, 0xaa, 0xa5, 0x73, 0x38, 0xf4, + 0x63, 0xbf, 0x8f, 0x03, 0x61, 0x5e, 0xfc, 0xe9, 0xb1, 0xae, 0xfc, 0xa9, 0xc0, 0xb5, 0x92, 0x02, 0xa7, 0xa2, 0x46, + 0x88, 0x10, 0xde, 0x9f, 0xc0, 0xb3, 0x9a, 0xfa, 0x7e, 0x63, 0x99, 0xe8, 0xfe, 0x99, 0x01, 0xe5, 0x0f, 0xc8, 0xd7, + 0x95, 0x14, 0x67, 0xea, 0xe4, 0x31, 0x71, 0xc6, 0x01, 0x88, 0xf9, 0xba, 0x44, 0xa3, 0xb1, 0xff, 0x01, 0x09, 0x86, + 0xea, 0x07, 0x3b, 0xdd, 0xd4, 0xfb, 0x57, 0x26, 0x71, 0x14, 0x7d, 0xda, 0x26, 0x8f, 0x25, 0x4b, 0xa3, 0x85, 0xa3, + 0xf7, 0x88, 0x61, 0x1c, 0x4e, 0xe7, 0x63, 0x92, 0x6d, 0x4c, 0x56, 0x01, 0xa4, 0x93, 0x99, 0x3a, 0xa6, 0xd4, 0xd1, + 0x38, 0xd7, 0x0b, 0xaa, 0xd0, 0x63, 0x5d, 0xf2, 0x1c, 0xac, 0x27, 0x3f, 0x78, 0xa5, 0x3f, 0x15, 0x72, 0x0e, 0x1b, + 0x89, 0xa0, 0xf0, 0x03, 0x5c, 0x0d, 0x56, 0x0a, 0x18, 0x4c, 0x7d, 0x0b, 0x5f, 0x13, 0xcf, 0x51, 0xf0, 0x28, 0xec, + 0x62, 0x6c, 0xad, 0x7c, 0xe7, 0x93, 0x82, 0x72, 0xcf, 0x8a, 0x39, 0xaf, 0x80, 0x73, 0x19, 0x14, 0xc2, 0x74, 0x3c, + 0xcb, 0xff, 0x99, 0xe4, 0xf5, 0xc4, 0x86, 0x00, 0x19, 0xfc, 0x29, 0x71, 0x5a, 0xba, 0x43, 0x77, 0x1e, 0x7a, 0x16, + 0x71, 0xd8, 0xe8, 0xc9, 0xba, 0x2c, 0xb6, 0x29, 0xea, 0x25, 0xcc, 0x0f, 0xe4, 0xe7, 0x2d, 0xf9, 0x3e, 0x44, 0xf1, + 0x36, 0xf8, 0x35, 0x63, 0xb1, 0xc0, 0xbf, 0xfe, 0x9e, 0x31, 0x9a, 0x68, 0xc1, 0xbf, 0xb3, 0x06, 0x89, 0x8a, 0x7f, + 0xca, 0x26, 0x00, 0xeb, 0xc8, 0xd5, 0x87, 0x4f, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x15, 0xe8, 0xd4, 0xe7, + 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x9e, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4f, 0xa9, 0x1a, 0xbf, 0x65, 0x14, + 0xbf, 0x53, 0xf9, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xe9, 0x7b, 0xc3, 0x89, 0x5d, 0xf6, 0xab, 0xb7, 0x89, 0xcc, + 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x6d, 0xbf, 0xcb, 0x0d, 0xa7, 0xc4, 0xf9, 0xb9, 0x87, 0x2b, 0x36, 0xad, 0x5e, 0xd1, + 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0x73, 0xee, 0x01, 0x04, 0x33, 0xa9, 0x09, + 0x00, 0x69, 0x21, 0x2a, 0x85, 0xc8, 0x5f, 0xe1, 0xac, 0x3e, 0xe7, 0xbd, 0x4d, 0x1e, 0x13, 0x69, 0x75, 0xaf, 0xdf, + 0x4f, 0xcf, 0xd2, 0x9c, 0x82, 0x1a, 0x8e, 0xb3, 0x4e, 0xbf, 0xcf, 0x82, 0x3a, 0x91, 0xab, 0xf4, 0x1f, 0x6e, 0x90, + 0x97, 0xf1, 0x7d, 0xdd, 0xf6, 0xfc, 0x89, 0xfa, 0x7b, 0x67, 0xfd, 0x6d, 0x81, 0xe0, 0x4e, 0x8e, 0xfd, 0x64, 0x55, + 0xca, 0x13, 0xe3, 0xd2, 0xde, 0xf3, 0x9b, 0xba, 0x28, 0xb2, 0x3a, 0x5d, 0x7f, 0x90, 0x7a, 0x1a, 0xdd, 0x17, 0x7b, + 0x30, 0x06, 0xef, 0x00, 0xf0, 0x4c, 0x87, 0x06, 0x48, 0xdf, 0x33, 0xf2, 0x70, 0x9f, 0x5b, 0xf2, 0x93, 0xca, 0xda, + 0x24, 0x61, 0x45, 0xb1, 0x19, 0xc6, 0x08, 0x25, 0xe3, 0x34, 0xb6, 0x7e, 0xbf, 0xaf, 0xfe, 0xde, 0x61, 0x14, 0x15, + 0x15, 0x77, 0x8c, 0x46, 0x65, 0x55, 0x8f, 0xb6, 0x83, 0xc3, 0xe1, 0x3c, 0xb7, 0x71, 0xb4, 0xf5, 0x0a, 0xd8, 0x5b, + 0xa1, 0x52, 0xf6, 0x4a, 0x84, 0xe5, 0x87, 0x2b, 0xbf, 0xdf, 0x87, 0x7f, 0x65, 0xa4, 0x85, 0xe7, 0x4f, 0xf1, 0xd7, + 0xa2, 0x2e, 0x30, 0x3c, 0x83, 0xd6, 0x68, 0x05, 0xc1, 0x04, 0xff, 0xe8, 0x40, 0xbd, 0xb4, 0xd2, 0x3e, 0x82, 0x6e, + 0x05, 0x7a, 0x50, 0x0f, 0x7d, 0x9a, 0xb4, 0x2f, 0x24, 0xea, 0xf6, 0x56, 0xa7, 0xd1, 0x1f, 0x15, 0x5c, 0x4e, 0x61, + 0x72, 0xb8, 0xa1, 0x4f, 0xab, 0x70, 0xfb, 0x09, 0x9e, 0xfe, 0x0c, 0x94, 0x5b, 0x87, 0x43, 0x0e, 0x62, 0x0b, 0xb8, + 0x79, 0xac, 0xc2, 0xcf, 0x45, 0x29, 0x23, 0xea, 0xe3, 0x69, 0x01, 0xda, 0xbb, 0x00, 0x1d, 0xb0, 0x34, 0x88, 0x57, + 0x48, 0x9e, 0xb3, 0x11, 0xc0, 0xb2, 0x03, 0xcb, 0x59, 0xc6, 0x29, 0xcc, 0xb3, 0x7c, 0xa1, 0x56, 0xda, 0x59, 0x99, + 0x78, 0x35, 0xcb, 0xc0, 0x59, 0xe0, 0xa2, 0xf2, 0x59, 0xa6, 0x55, 0x4f, 0x55, 0x82, 0x3e, 0xaf, 0xe4, 0x04, 0x57, + 0x82, 0x93, 0x0d, 0xc8, 0x2f, 0x40, 0x92, 0xa6, 0x94, 0x35, 0xe5, 0x8b, 0x4b, 0xba, 0x21, 0xa3, 0xe7, 0xbc, 0xe7, + 0x45, 0xc3, 0xd0, 0xbf, 0xf0, 0x4a, 0x08, 0xdf, 0xc4, 0x6d, 0x1b, 0xa5, 0xb0, 0xbf, 0x09, 0x2c, 0x3e, 0x61, 0x3f, + 0x78, 0x4b, 0x7f, 0x3a, 0x0e, 0xc2, 0x21, 0x72, 0x43, 0xc5, 0x1c, 0xd8, 0xd3, 0x80, 0xc5, 0x26, 0xbe, 0xda, 0x4c, + 0xe2, 0xc1, 0xc0, 0xd7, 0x19, 0x8b, 0x59, 0x0c, 0x34, 0xc8, 0xf1, 0xe0, 0x72, 0xae, 0x4f, 0x08, 0xfd, 0x30, 0xa2, + 0x72, 0x54, 0xa0, 0x73, 0x10, 0x0d, 0x96, 0x80, 0xa7, 0xde, 0xca, 0x06, 0x49, 0xc6, 0x24, 0x93, 0xb8, 0xd6, 0x24, + 0xd5, 0xe1, 0x84, 0xd6, 0x81, 0x8e, 0xab, 0x0b, 0xe8, 0x7c, 0x5c, 0xf7, 0x3e, 0x5e, 0x0d, 0x17, 0x54, 0xfa, 0x85, + 0x18, 0x78, 0xf5, 0x74, 0x1c, 0x5c, 0xd2, 0xad, 0x70, 0xb1, 0x0a, 0xb7, 0x3f, 0xcb, 0x07, 0x8e, 0x3b, 0x2a, 0x69, + 0x08, 0x0c, 0xde, 0x1e, 0xba, 0x9b, 0x19, 0x1a, 0xea, 0xa4, 0x7d, 0x18, 0x87, 0x72, 0x88, 0x55, 0x2b, 0x2e, 0xa4, + 0x37, 0x82, 0x6f, 0x17, 0x8a, 0xb1, 0x6c, 0xec, 0xd2, 0x50, 0x14, 0xfe, 0x0a, 0x60, 0x87, 0xda, 0x5f, 0xa9, 0xe4, + 0x63, 0x64, 0x54, 0xd3, 0x40, 0xc7, 0x00, 0x2c, 0x59, 0x9a, 0x48, 0xaa, 0x48, 0x23, 0xf1, 0x47, 0x66, 0xac, 0xa3, + 0xa6, 0xeb, 0x0b, 0xa6, 0xaa, 0x45, 0xd2, 0xed, 0x4c, 0x62, 0x39, 0x91, 0xa4, 0xb6, 0xfb, 0x88, 0x18, 0x0c, 0x7c, + 0xb0, 0x11, 0xd3, 0x4c, 0x84, 0x23, 0x1e, 0x95, 0xc8, 0xa2, 0xcb, 0x6f, 0xa3, 0x4c, 0xda, 0xbe, 0xac, 0xc8, 0x16, + 0x04, 0xd3, 0x93, 0xe8, 0x83, 0x24, 0xe5, 0x54, 0x24, 0xd2, 0x8c, 0x10, 0xe0, 0xc7, 0x93, 0xf2, 0x4a, 0x7f, 0x0e, + 0x9a, 0x56, 0x82, 0x97, 0x0c, 0x92, 0x47, 0xe2, 0x67, 0x52, 0x30, 0x8b, 0xb1, 0x6a, 0x30, 0xc0, 0x72, 0xaa, 0x67, + 0x8e, 0x49, 0xfa, 0x6f, 0x9d, 0x4e, 0xd8, 0x2f, 0xbd, 0xdc, 0xd6, 0xf2, 0xa6, 0xb9, 0xf7, 0xd2, 0xab, 0x58, 0xaa, + 0x61, 0x19, 0xf4, 0x5f, 0x13, 0xed, 0x82, 0xad, 0x2d, 0x63, 0xc2, 0xaa, 0x1f, 0x40, 0xda, 0x23, 0x5d, 0x5e, 0x35, + 0xcc, 0x99, 0xe0, 0xd1, 0x85, 0x35, 0x0f, 0xa2, 0x0b, 0xe1, 0x23, 0x97, 0xdd, 0x24, 0xb9, 0x1a, 0x4f, 0xfc, 0x70, + 0x30, 0x50, 0x00, 0xb4, 0xb4, 0x4e, 0x8a, 0x41, 0xf8, 0x4c, 0xc8, 0x81, 0x34, 0x3a, 0xaa, 0x02, 0x2c, 0x96, 0xd9, + 0x55, 0x39, 0xc9, 0x06, 0x03, 0x1f, 0xc4, 0xc6, 0xc4, 0x6e, 0x68, 0x36, 0xf7, 0xd9, 0x89, 0x82, 0xac, 0x36, 0x87, + 0xad, 0x99, 0x6e, 0x81, 0x01, 0xc0, 0x20, 0x22, 0x58, 0xee, 0x73, 0x23, 0x1f, 0x51, 0xa7, 0xa7, 0x30, 0x02, 0x82, + 0x5f, 0x4e, 0x04, 0x22, 0x17, 0x09, 0xd4, 0x03, 0xcc, 0x04, 0x98, 0x51, 0xc5, 0xf0, 0x12, 0xd8, 0xc5, 0x73, 0xf3, + 0x8a, 0x41, 0xff, 0xa2, 0x49, 0x96, 0x68, 0x2a, 0x71, 0x34, 0x46, 0x4e, 0xa5, 0x31, 0x32, 0x20, 0x76, 0x71, 0xfc, + 0x7b, 0x4a, 0x8f, 0x82, 0x94, 0x7d, 0xae, 0x0c, 0x71, 0x38, 0x8a, 0xaf, 0x60, 0xd5, 0x38, 0x1c, 0x6a, 0xf3, 0x7a, + 0x3a, 0xab, 0xe7, 0x03, 0x11, 0xc0, 0x7f, 0x43, 0xc1, 0x7e, 0xd1, 0x54, 0xe4, 0x06, 0xa9, 0xf3, 0x70, 0x48, 0x41, + 0x3e, 0xd5, 0x4d, 0xfe, 0xbe, 0x72, 0xf7, 0xd3, 0xd9, 0xdc, 0x9a, 0xa3, 0x17, 0x35, 0xae, 0x5b, 0xab, 0x1b, 0x0a, + 0x89, 0xd6, 0x34, 0x29, 0xae, 0xaa, 0x49, 0x31, 0xe0, 0xb9, 0x2f, 0x54, 0x17, 0x5b, 0x23, 0x58, 0xf8, 0x73, 0x0b, + 0x84, 0xc9, 0xb8, 0x17, 0x1f, 0x2d, 0xe4, 0x94, 0x76, 0x6d, 0xb5, 0xdb, 0x56, 0x36, 0xa4, 0x68, 0x3e, 0xbc, 0x84, + 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, 0x29, 0x86, + 0x7f, 0x95, 0xee, 0xcd, 0xa9, 0x0d, 0x72, 0x00, 0xdb, 0xbd, 0x87, 0xdb, 0x31, 0x7a, 0x20, 0x83, 0x37, 0x42, 0xce, + 0x39, 0xbf, 0x9c, 0x5a, 0x33, 0x26, 0x1a, 0x16, 0xac, 0x1c, 0x46, 0x7e, 0x80, 0x8c, 0x97, 0x53, 0x60, 0x65, 0x3f, + 0x2a, 0xe2, 0xd2, 0x1f, 0x46, 0xfe, 0xc5, 0xf3, 0x20, 0xe3, 0x5e, 0x34, 0xec, 0xf8, 0x02, 0xec, 0xd5, 0x17, 0xcf, + 0x59, 0x34, 0xe0, 0xd5, 0x55, 0x3d, 0xcd, 0x82, 0x61, 0xc6, 0xa2, 0xab, 0x62, 0x08, 0x3e, 0xb4, 0x2f, 0xca, 0x41, + 0xe8, 0xfb, 0x66, 0xe7, 0xd0, 0xdd, 0x90, 0xc8, 0x23, 0xec, 0x47, 0x70, 0xdb, 0xd5, 0x12, 0x33, 0x98, 0x6c, 0xee, + 0x22, 0x66, 0xb0, 0xe5, 0x2f, 0x9e, 0x1b, 0x2e, 0xa1, 0xea, 0x85, 0xd4, 0x6c, 0x14, 0x68, 0x4e, 0xae, 0xd0, 0x9c, + 0xac, 0x84, 0x5a, 0xf2, 0x49, 0x85, 0x13, 0x76, 0x3e, 0xc9, 0x95, 0xdd, 0x68, 0x8c, 0x81, 0x8b, 0xf6, 0xdc, 0x16, + 0x46, 0x66, 0x3a, 0x4b, 0xd1, 0x80, 0x85, 0x67, 0xe2, 0x94, 0xc6, 0x80, 0xf6, 0xe5, 0xc0, 0xd2, 0x86, 0xfc, 0x28, + 0x67, 0x06, 0xda, 0x86, 0x94, 0x46, 0xcd, 0xc0, 0x9f, 0xa9, 0x09, 0xf3, 0x2b, 0x58, 0x89, 0x20, 0xaa, 0x0b, 0x30, + 0x49, 0x72, 0x32, 0x1a, 0x29, 0x2b, 0x91, 0x9c, 0x03, 0xde, 0x47, 0xf0, 0x64, 0x11, 0xdb, 0xda, 0x9f, 0xd2, 0xff, + 0xea, 0xf0, 0xb9, 0xf4, 0x9f, 0x09, 0x60, 0x21, 0x97, 0x06, 0x91, 0x81, 0xc2, 0x21, 0x35, 0x95, 0x88, 0x13, 0xc7, + 0x33, 0xf0, 0x0d, 0x5c, 0xa0, 0x29, 0xa0, 0x3f, 0xa8, 0x19, 0x45, 0x64, 0xe1, 0xaf, 0x9e, 0xdd, 0xd4, 0x8d, 0x9e, + 0x67, 0xce, 0x6b, 0xd0, 0xcc, 0x40, 0x48, 0x8f, 0x53, 0xf5, 0x36, 0x24, 0x3a, 0x2f, 0x2f, 0xf5, 0xcb, 0x84, 0x48, + 0x56, 0x44, 0x9e, 0xbe, 0xcf, 0xc1, 0x3c, 0xa2, 0x08, 0x1d, 0x5c, 0x99, 0x87, 0xc3, 0xb9, 0xa0, 0xf0, 0x1d, 0xe5, + 0xf9, 0x80, 0xd3, 0x2c, 0x4a, 0x40, 0x1b, 0xc8, 0x72, 0x53, 0xe6, 0x3a, 0x69, 0x99, 0xba, 0xf7, 0x60, 0x25, 0xa8, + 0xd0, 0xcd, 0x29, 0x28, 0x94, 0x91, 0xa0, 0x94, 0x56, 0x83, 0x50, 0xaa, 0xc3, 0x22, 0x88, 0x1c, 0xb2, 0x10, 0x70, + 0x33, 0x15, 0x8d, 0x96, 0x34, 0x3c, 0xc2, 0xb9, 0x81, 0x42, 0x00, 0x12, 0x7b, 0xaa, 0x28, 0xe3, 0x72, 0x08, 0xf8, + 0x28, 0xe1, 0x10, 0x67, 0x4d, 0xda, 0xf2, 0x1c, 0xc4, 0xb1, 0x5c, 0xf2, 0x75, 0x85, 0x60, 0x10, 0xa1, 0xcf, 0x90, + 0x3f, 0x59, 0xce, 0xbf, 0x5b, 0x87, 0x69, 0x47, 0xf8, 0xb0, 0xab, 0x2d, 0xb8, 0x98, 0xdd, 0xce, 0x27, 0x10, 0xdf, + 0x72, 0x3b, 0x3f, 0xc6, 0x10, 0x59, 0xf8, 0x83, 0xbb, 0xa1, 0xe4, 0x8a, 0x42, 0x97, 0xf5, 0x88, 0x14, 0xd9, 0xd3, + 0x35, 0x47, 0x10, 0x1c, 0x68, 0xd5, 0x20, 0x43, 0x23, 0xf1, 0xc5, 0x73, 0xc8, 0x1a, 0xac, 0xf9, 0xe7, 0x8a, 0x9c, + 0xd5, 0xfd, 0xc9, 0x06, 0xaa, 0x49, 0x26, 0x6b, 0x45, 0xe5, 0xfc, 0xf5, 0xaa, 0x2c, 0x4f, 0x56, 0x65, 0xb8, 0x1a, + 0x74, 0x55, 0x65, 0xc9, 0x91, 0xda, 0x00, 0xad, 0xe9, 0x0a, 0x31, 0x14, 0xb2, 0x06, 0x4b, 0xab, 0x2a, 0x6b, 0xea, + 0x13, 0x08, 0xf4, 0x01, 0x96, 0x51, 0xb3, 0x9f, 0x0e, 0xff, 0x15, 0xfc, 0x4b, 0x85, 0x2c, 0xd5, 0x69, 0x9d, 0x89, + 0x5f, 0x83, 0x25, 0xc3, 0x3f, 0x7e, 0x0b, 0xd6, 0x80, 0x25, 0x40, 0x96, 0xbb, 0x8d, 0x8d, 0xd6, 0x2b, 0xaf, 0x10, + 0x5f, 0x6a, 0x7d, 0xd1, 0x6f, 0xdd, 0x26, 0x6a, 0x05, 0x18, 0xa1, 0xd0, 0x22, 0xc0, 0x56, 0x0f, 0xdc, 0x53, 0xf0, + 0x03, 0x31, 0x9c, 0x6b, 0xd2, 0x9a, 0x3a, 0xe1, 0x75, 0x36, 0x8e, 0x44, 0x54, 0x6f, 0xe1, 0xe2, 0x5e, 0x6f, 0x2d, + 0xfe, 0x46, 0x05, 0x02, 0x20, 0x8b, 0x29, 0xd6, 0xce, 0x1b, 0xd2, 0x2b, 0xc3, 0x4e, 0x42, 0xef, 0x0d, 0x3b, 0x81, + 0xbc, 0x38, 0xec, 0x14, 0xba, 0x44, 0xdb, 0x29, 0x52, 0x13, 0x6d, 0x27, 0x2d, 0x56, 0x61, 0x09, 0xc1, 0xaf, 0xda, + 0x5b, 0x47, 0xd9, 0xbe, 0xc8, 0x12, 0xa6, 0x2d, 0x60, 0x94, 0x5b, 0xf5, 0x99, 0x53, 0xc4, 0x4a, 0xd9, 0x3b, 0x9d, + 0x54, 0xb9, 0x8b, 0x7c, 0x6a, 0x35, 0x45, 0x26, 0x7f, 0x7f, 0xdc, 0x22, 0xf9, 0xe4, 0xe7, 0x76, 0xc3, 0x64, 0xfa, + 0xc7, 0xa3, 0x2f, 0xa0, 0x2b, 0xb2, 0xd3, 0x27, 0x10, 0x90, 0xa9, 0xa0, 0x5a, 0xdd, 0x2a, 0xa6, 0x79, 0xbb, 0xca, + 0x6e, 0x2f, 0x94, 0x18, 0x4e, 0x67, 0x27, 0xe1, 0xd1, 0x66, 0xc8, 0xc0, 0x21, 0x08, 0x14, 0x42, 0x45, 0x31, 0x3c, + 0x02, 0xb5, 0x46, 0xf2, 0x01, 0x7e, 0xb4, 0x3b, 0x15, 0x44, 0x6a, 0x37, 0x15, 0x37, 0x4e, 0x6e, 0xba, 0x5e, 0x0a, + 0xd4, 0x3a, 0x25, 0x2b, 0x80, 0x12, 0xa2, 0xfe, 0x24, 0xb6, 0xf5, 0x2b, 0xb8, 0x62, 0xf3, 0x7d, 0xa3, 0xe8, 0xc9, + 0xf5, 0x29, 0xea, 0x56, 0x5c, 0x9d, 0xa6, 0xad, 0xe6, 0xd8, 0x71, 0x86, 0x1c, 0x3c, 0x2b, 0x08, 0xb6, 0xa3, 0x12, + 0xe5, 0x75, 0xbb, 0xe9, 0x98, 0xd8, 0xea, 0x9f, 0x45, 0xb5, 0xb9, 0x83, 0x8a, 0x88, 0xf8, 0x28, 0xbb, 0x79, 0xd2, + 0x7e, 0x07, 0x7b, 0xac, 0xd5, 0x20, 0xb2, 0xcf, 0xe0, 0x2a, 0xd7, 0x69, 0x91, 0xdb, 0x32, 0x38, 0xff, 0xf0, 0x6a, + 0x57, 0x61, 0x93, 0x63, 0x5d, 0x5d, 0xcd, 0x54, 0x27, 0x15, 0x1b, 0x18, 0x6b, 0x5a, 0x4b, 0x35, 0x8f, 0x21, 0xe9, + 0xae, 0x2c, 0xce, 0xaa, 0xa4, 0x9b, 0x9e, 0x1b, 0x67, 0x0a, 0x31, 0x70, 0xb6, 0x1a, 0x2d, 0x67, 0x18, 0xa2, 0xeb, + 0xc3, 0x2c, 0xf1, 0x5b, 0x3d, 0xe5, 0x3e, 0x0f, 0xb7, 0x7e, 0x57, 0x2f, 0x38, 0x99, 0xec, 0x27, 0xc7, 0xb9, 0xdb, + 0x45, 0xda, 0x4f, 0x7c, 0x1b, 0xe6, 0x5f, 0xdf, 0x20, 0xee, 0x44, 0xfd, 0xcf, 0x0a, 0x80, 0x06, 0x37, 0x79, 0x2c, + 0x51, 0xea, 0xf7, 0xaa, 0xfa, 0x41, 0xcd, 0x54, 0x4d, 0x03, 0xc1, 0x9c, 0x4a, 0x01, 0x7f, 0xb8, 0x5d, 0xb8, 0xe2, + 0x11, 0x37, 0x2c, 0x8c, 0x7f, 0x7a, 0x35, 0x3b, 0x15, 0x54, 0x06, 0x6e, 0xc6, 0x7f, 0x7a, 0x82, 0x9d, 0xc2, 0x5a, + 0x01, 0x59, 0xe1, 0x4f, 0x2f, 0x7f, 0xe4, 0xfd, 0x8a, 0xff, 0xe9, 0x55, 0x8f, 0xbc, 0x8f, 0x38, 0x2f, 0x7f, 0x22, + 0xa9, 0x13, 0xa2, 0xba, 0xfc, 0x49, 0x98, 0x62, 0xab, 0x34, 0x7f, 0x4d, 0x0a, 0x9f, 0xe0, 0x33, 0xf0, 0x1d, 0xae, + 0xc2, 0xad, 0xf9, 0x0d, 0x1e, 0x3b, 0x16, 0xdb, 0x2e, 0xf5, 0x05, 0x94, 0x23, 0xb0, 0x88, 0xdc, 0x7e, 0xbb, 0xb2, + 0x5f, 0x2d, 0x8c, 0x32, 0xc6, 0xee, 0x4b, 0x56, 0xa2, 0x74, 0xd6, 0xef, 0x17, 0x52, 0x30, 0xb2, 0x0b, 0x6b, 0xb4, + 0x47, 0xa9, 0x7a, 0xf5, 0x3a, 0xac, 0xa3, 0x24, 0xcd, 0xef, 0x64, 0xf4, 0x91, 0x0c, 0x3b, 0xd2, 0x57, 0x52, 0xa2, + 0xbd, 0x56, 0x61, 0x39, 0x9a, 0xfd, 0xba, 0xe4, 0x40, 0x79, 0xdd, 0x0a, 0xca, 0x57, 0x4d, 0x00, 0xbd, 0x52, 0xed, + 0x33, 0xd0, 0x0a, 0x0a, 0x4b, 0xe5, 0xc1, 0x4a, 0x9c, 0x8b, 0x3e, 0x2b, 0x0e, 0x07, 0x75, 0x31, 0x24, 0x14, 0xa8, + 0x12, 0x27, 0xa1, 0x11, 0xcf, 0xe1, 0x42, 0x28, 0x5e, 0xe4, 0x18, 0x5b, 0x91, 0x03, 0x07, 0x32, 0xfc, 0x80, 0xc0, + 0x7b, 0xd9, 0xbf, 0x82, 0xc1, 0x30, 0xc1, 0x8d, 0x8c, 0x3a, 0x39, 0x67, 0x7f, 0x62, 0x60, 0x06, 0xf5, 0xa4, 0x76, + 0x9f, 0xdd, 0xab, 0xc0, 0x5e, 0x38, 0x03, 0xda, 0xbb, 0x31, 0xfa, 0x59, 0x15, 0x6b, 0x27, 0xfd, 0x53, 0xb1, 0x86, + 0x64, 0x3a, 0x2c, 0x8e, 0xb6, 0x69, 0x78, 0x24, 0x4f, 0x8e, 0xe3, 0x4d, 0xff, 0x70, 0x18, 0xe3, 0xc7, 0x51, 0x7e, + 0x6d, 0x01, 0xaf, 0xe2, 0x16, 0xd2, 0x58, 0xa4, 0xe8, 0x1d, 0x88, 0x39, 0x14, 0xbd, 0x64, 0xbf, 0x65, 0xbc, 0x9c, + 0x08, 0x4a, 0x49, 0x62, 0xc3, 0x3b, 0xd2, 0xd3, 0xb4, 0x1e, 0x6d, 0x65, 0xc0, 0x7e, 0x3d, 0xda, 0xd1, 0x5f, 0xa0, + 0x78, 0xb4, 0xf0, 0x97, 0xf4, 0x77, 0x71, 0x37, 0xf7, 0x9c, 0x6f, 0x1a, 0xdf, 0x11, 0x17, 0x28, 0xd6, 0xec, 0xfe, + 0x9a, 0x96, 0xce, 0x3a, 0x10, 0x1c, 0xf0, 0x16, 0xbb, 0x68, 0xdf, 0x6f, 0x5c, 0xa7, 0xa7, 0xfd, 0xb7, 0x6e, 0x8d, + 0xf2, 0xbd, 0x7f, 0x4a, 0x94, 0x83, 0xfd, 0x6b, 0x17, 0xcd, 0xdf, 0x7e, 0xca, 0x90, 0x54, 0x68, 0x6e, 0xb0, 0x9d, + 0x6c, 0x11, 0xd6, 0xc6, 0x38, 0xa8, 0xd8, 0x5d, 0x19, 0x46, 0xc0, 0xa0, 0x8e, 0xfd, 0x8f, 0x3e, 0x9b, 0x36, 0x64, + 0x1f, 0x00, 0x2a, 0x57, 0x21, 0x60, 0x0f, 0xc0, 0x89, 0x46, 0xb8, 0x01, 0x6e, 0x35, 0x5a, 0xd2, 0x41, 0xdd, 0x16, + 0x0c, 0x44, 0x4b, 0xd8, 0xc8, 0xdb, 0xae, 0x4e, 0x5f, 0x11, 0x3e, 0xd4, 0x4e, 0x4a, 0x87, 0xf2, 0x57, 0xcf, 0xd9, + 0xff, 0xec, 0xb0, 0xa6, 0xa6, 0xdc, 0x00, 0x66, 0xce, 0x4a, 0xe4, 0x15, 0x42, 0xa7, 0xc8, 0xef, 0x55, 0x5d, 0x89, + 0xe1, 0xb2, 0x16, 0x65, 0x67, 0x76, 0xeb, 0x44, 0xef, 0x9c, 0x82, 0x5a, 0x2a, 0x1b, 0xe4, 0x24, 0xd5, 0xe6, 0x23, + 0x6b, 0x05, 0x25, 0xea, 0x1a, 0x05, 0x8e, 0x4f, 0xb9, 0x76, 0xff, 0xef, 0x9c, 0x09, 0x6a, 0xb6, 0x51, 0xdd, 0x5f, + 0xeb, 0xa7, 0xaa, 0x26, 0xb1, 0x00, 0x97, 0x93, 0x34, 0xef, 0x78, 0x84, 0xd5, 0x3f, 0x4e, 0x96, 0x22, 0xd0, 0xeb, + 0x88, 0x76, 0x25, 0x20, 0x41, 0x3b, 0x39, 0x0b, 0x15, 0x81, 0x02, 0x7d, 0xfd, 0xfb, 0x4d, 0x9a, 0xc5, 0x72, 0x35, + 0xdb, 0xc3, 0x44, 0x59, 0xac, 0x87, 0x08, 0x72, 0x66, 0xea, 0x60, 0xbf, 0xa7, 0x19, 0xcd, 0xc2, 0x2b, 0x53, 0x82, + 0x4b, 0x71, 0x15, 0x15, 0x39, 0xf8, 0x1c, 0xe2, 0x0b, 0x9f, 0x0a, 0xb9, 0x41, 0x44, 0xd3, 0xef, 0x25, 0xaa, 0x1d, + 0x29, 0x90, 0x43, 0xc9, 0x4f, 0x88, 0xbf, 0x64, 0x6d, 0x8c, 0xfb, 0xa5, 0x53, 0xed, 0x57, 0x0a, 0xc1, 0xfd, 0x67, + 0x5b, 0x6c, 0x54, 0x79, 0xa2, 0x47, 0x9f, 0x62, 0xfd, 0x4f, 0x16, 0x50, 0xaa, 0xfb, 0x36, 0x38, 0x15, 0x8f, 0xc2, + 0x4d, 0x5d, 0xdc, 0x20, 0xb4, 0x40, 0x39, 0xaa, 0x8a, 0x4d, 0x19, 0x11, 0x27, 0xec, 0xa6, 0x2e, 0x7a, 0x9a, 0x03, + 0x9d, 0x3a, 0x2c, 0x4d, 0xe4, 0x89, 0xd0, 0x6e, 0x41, 0xf7, 0x34, 0xc7, 0x4a, 0xbc, 0x94, 0xa5, 0x83, 0xac, 0x13, + 0x69, 0x42, 0xe5, 0xae, 0xae, 0x3a, 0x2a, 0x95, 0xba, 0xe1, 0x4d, 0xaa, 0x19, 0x7f, 0x97, 0xe6, 0x4f, 0x2c, 0xfb, + 0x4d, 0xeb, 0xb7, 0x5a, 0xed, 0x8d, 0xd5, 0xa3, 0x92, 0x35, 0xc7, 0xd9, 0x84, 0xa4, 0xf4, 0x09, 0xdb, 0xcd, 0xa4, + 0x6b, 0x1d, 0x78, 0x12, 0x5c, 0x0e, 0x3d, 0x01, 0x15, 0x83, 0x26, 0xde, 0xee, 0x02, 0xf5, 0x08, 0x3c, 0x03, 0xe5, + 0x13, 0xb5, 0x0e, 0xf8, 0x79, 0xad, 0xe5, 0x29, 0x23, 0x0c, 0xab, 0x9d, 0x45, 0xcb, 0xc1, 0x79, 0xa7, 0x08, 0x5c, + 0xbb, 0x12, 0x78, 0x3e, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, 0xa7, + 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, 0x36, + 0x9f, 0x7d, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, 0xcf, + 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, 0x76, + 0x7c, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, 0x88, + 0xc2, 0x2c, 0xfb, 0xb1, 0x28, 0xfe, 0xa8, 0xf4, 0x1d, 0x81, 0x8e, 0xee, 0xbc, 0xa8, 0xd3, 0xe5, 0xee, 0x03, 0x61, + 0x3c, 0x79, 0xf5, 0x11, 0xd1, 0xad, 0xef, 0x33, 0xf7, 0x2b, 0xc0, 0x8d, 0xe0, 0x0e, 0xa2, 0xbd, 0x5b, 0xea, 0x93, + 0x5a, 0x7d, 0xad, 0xd7, 0xce, 0xd3, 0xf3, 0x9b, 0xce, 0xed, 0x77, 0xdf, 0x1c, 0x6d, 0xbd, 0xc7, 0x85, 0xb5, 0xb2, + 0xf4, 0x54, 0x15, 0xec, 0xcd, 0xf2, 0x54, 0x15, 0x4c, 0x1e, 0x78, 0xcd, 0x7e, 0x41, 0x83, 0x2b, 0x1d, 0x6d, 0xbc, + 0x27, 0x6a, 0xe0, 0x16, 0x85, 0xa5, 0xc3, 0x2f, 0xb9, 0x99, 0xbc, 0xc2, 0xfd, 0xa5, 0x22, 0x17, 0xfb, 0xce, 0x19, + 0xdd, 0x99, 0x59, 0xf7, 0xaa, 0xc2, 0xd5, 0x82, 0x5c, 0x1d, 0xd8, 0x5a, 0x76, 0x71, 0xb8, 0x61, 0x11, 0x05, 0x08, + 0xc4, 0xf4, 0x4a, 0xad, 0xfd, 0x11, 0x0d, 0x42, 0x3e, 0x18, 0xf8, 0x05, 0x06, 0xab, 0x02, 0x85, 0x0f, 0x14, 0xc9, + 0x5f, 0x7b, 0x02, 0x76, 0xf1, 0x0c, 0xd0, 0xad, 0xd8, 0xac, 0x18, 0x21, 0x42, 0x26, 0xcb, 0x59, 0x4d, 0x67, 0x90, + 0x4f, 0x7d, 0xf1, 0x8d, 0xad, 0x3a, 0x9d, 0xb7, 0x35, 0x55, 0x4e, 0x1d, 0x0a, 0xdd, 0xdd, 0xd4, 0x9d, 0x5b, 0x17, + 0x79, 0xea, 0x10, 0x72, 0xa5, 0x62, 0x25, 0xa6, 0xa1, 0xe6, 0x49, 0x9a, 0x51, 0x7f, 0xb1, 0xf7, 0x7b, 0x8d, 0xc2, + 0x29, 0x7f, 0x3a, 0x06, 0x55, 0xb8, 0xaa, 0x21, 0x8e, 0xa5, 0x2a, 0x1e, 0xd9, 0x20, 0xd0, 0xbc, 0xba, 0x55, 0x49, + 0x13, 0x32, 0xb9, 0x11, 0x3e, 0x35, 0x29, 0xe5, 0x69, 0xda, 0xa4, 0x95, 0x22, 0x75, 0xf0, 0x41, 0x9d, 0x6a, 0x3c, + 0x37, 0xab, 0x17, 0x00, 0x66, 0x9c, 0x5f, 0xf1, 0x4b, 0xc5, 0x65, 0xd4, 0x56, 0x66, 0xd2, 0xfe, 0xe4, 0x68, 0x6c, + 0xd4, 0xe5, 0xb4, 0x51, 0x46, 0x58, 0x29, 0xcd, 0x49, 0xb1, 0x1c, 0xcf, 0x3f, 0x60, 0xb0, 0xe6, 0x09, 0xec, 0x60, + 0xa2, 0x52, 0xde, 0x47, 0x40, 0x7c, 0x9d, 0xa4, 0x77, 0x09, 0xa4, 0x48, 0xff, 0xd2, 0x25, 0x77, 0x19, 0x1b, 0x88, + 0x31, 0x2b, 0x66, 0x46, 0xff, 0x83, 0xbb, 0xa4, 0x3f, 0x09, 0x01, 0x70, 0x13, 0x4d, 0xa1, 0x53, 0xe7, 0xc9, 0x45, + 0x1e, 0x2c, 0x2f, 0x3c, 0xb4, 0x62, 0xc4, 0x83, 0xbf, 0xbe, 0x08, 0x11, 0xc4, 0x1c, 0x53, 0x3c, 0xfd, 0xc2, 0xe8, + 0x2f, 0xc1, 0x25, 0x46, 0x10, 0xba, 0x7b, 0xe7, 0x30, 0x84, 0x9b, 0x3d, 0xc8, 0xa0, 0xfe, 0x50, 0x87, 0x44, 0x0d, + 0x7f, 0xac, 0x3c, 0xe8, 0xff, 0x3a, 0x13, 0x96, 0xda, 0x4f, 0x4f, 0x07, 0x50, 0xc1, 0xfb, 0x8a, 0xb7, 0x11, 0xf1, + 0x7d, 0xe2, 0x67, 0xf1, 0x60, 0xf3, 0x6c, 0x03, 0xd6, 0xba, 0x27, 0xb9, 0xb1, 0xae, 0x12, 0x36, 0x10, 0xf0, 0x35, + 0x8a, 0xda, 0xf3, 0xda, 0xed, 0x1e, 0xfc, 0xd5, 0xbf, 0x08, 0x19, 0x30, 0x71, 0xfa, 0x3e, 0x73, 0xb2, 0x46, 0x17, + 0x99, 0x4c, 0x1f, 0x3a, 0xe9, 0x1b, 0x9d, 0xee, 0x3b, 0xe1, 0x1f, 0x15, 0xb3, 0xf8, 0x70, 0x4b, 0x5f, 0x69, 0x52, + 0xdc, 0x01, 0x2b, 0x9b, 0x47, 0x05, 0xa1, 0xce, 0x45, 0xf4, 0x95, 0x29, 0xdf, 0x12, 0x6a, 0xf6, 0x8d, 0x25, 0xa5, + 0x74, 0xaf, 0xa1, 0x37, 0x69, 0xad, 0xdf, 0x46, 0x09, 0xc6, 0x44, 0xc7, 0x93, 0x97, 0xf1, 0x58, 0x79, 0x1f, 0x8f, + 0x1b, 0xa9, 0x90, 0x07, 0x20, 0x02, 0x15, 0xe3, 0x4f, 0x57, 0x9e, 0x9c, 0xf4, 0xc2, 0x78, 0x15, 0x4a, 0x41, 0x61, + 0x40, 0x57, 0x20, 0x05, 0x3c, 0x6a, 0x4f, 0x74, 0x16, 0x76, 0x09, 0xf7, 0xe8, 0x26, 0x60, 0xac, 0xcf, 0x3f, 0x02, + 0x9a, 0xbb, 0x70, 0x87, 0x17, 0x03, 0xd4, 0xa6, 0x5e, 0xdd, 0x7d, 0x5c, 0xab, 0x73, 0x38, 0x04, 0x07, 0xab, 0x41, + 0x04, 0xa7, 0xf3, 0xa9, 0xa3, 0x59, 0x16, 0xa0, 0x72, 0xb2, 0xdc, 0xc8, 0x9b, 0x47, 0x8b, 0x5e, 0xdd, 0xf7, 0x96, + 0x69, 0x59, 0xd5, 0x41, 0xc6, 0xb2, 0xb0, 0x02, 0x5c, 0x1d, 0x5a, 0x3f, 0x08, 0x97, 0x85, 0xf3, 0x07, 0x42, 0x10, + 0xbb, 0x57, 0xdb, 0x92, 0xe7, 0x6a, 0x0e, 0x3f, 0x7b, 0xce, 0xd6, 0x5c, 0xa2, 0x4e, 0x3a, 0x13, 0x01, 0x88, 0x3d, + 0x35, 0xab, 0xe8, 0x1a, 0x48, 0xea, 0x34, 0xab, 0xe8, 0x9a, 0x9a, 0x6d, 0x8c, 0x03, 0xf9, 0x68, 0x95, 0x02, 0xf6, + 0xdd, 0x74, 0x1c, 0xac, 0x9e, 0xc5, 0xf2, 0x3a, 0x74, 0xf7, 0x6c, 0xa3, 0x7c, 0x06, 0x75, 0xab, 0x8d, 0x31, 0xb1, + 0xdd, 0x7c, 0x39, 0xd7, 0x6f, 0x07, 0x4b, 0xdf, 0x0e, 0x9a, 0x73, 0xca, 0xbe, 0xd3, 0x65, 0xaf, 0xec, 0xb2, 0xa9, + 0xe7, 0x8e, 0x8a, 0x56, 0x63, 0x40, 0x6f, 0x60, 0xc1, 0xfa, 0x5c, 0xa4, 0xd9, 0xaa, 0x54, 0x25, 0xe0, 0x85, 0xb1, + 0x62, 0x77, 0x7e, 0x23, 0x33, 0x24, 0x61, 0x1e, 0x67, 0xe2, 0x9a, 0xee, 0xb5, 0x30, 0x39, 0x8e, 0x45, 0x32, 0x25, + 0x74, 0x4a, 0x77, 0xb6, 0xa1, 0x73, 0x15, 0x46, 0x11, 0xad, 0x95, 0x54, 0x1a, 0x09, 0x4c, 0xcd, 0x00, 0x25, 0x73, + 0x05, 0x4e, 0xe9, 0x72, 0xff, 0x3b, 0x12, 0xe3, 0xcc, 0x17, 0x25, 0x33, 0xa0, 0x5b, 0x7e, 0x5d, 0xac, 0x5b, 0x29, + 0x32, 0xc2, 0xbc, 0x39, 0x6e, 0xaf, 0xeb, 0x43, 0x20, 0x57, 0xcb, 0x1e, 0x45, 0xe3, 0xa0, 0xd0, 0xe1, 0x52, 0x25, + 0xc0, 0xbe, 0x48, 0xfc, 0x8c, 0xb0, 0xa5, 0x3d, 0x90, 0xdb, 0xa3, 0x33, 0x61, 0xce, 0x39, 0x29, 0xcb, 0xce, 0xa5, + 0x19, 0x5c, 0x4e, 0x5c, 0x09, 0x2e, 0xd2, 0xdb, 0xf6, 0x34, 0x69, 0x69, 0xfb, 0xd8, 0x70, 0x8e, 0x86, 0xb6, 0x41, + 0x77, 0xec, 0x0f, 0xcd, 0xc5, 0x22, 0xb6, 0x2e, 0x16, 0xc3, 0xce, 0xec, 0x47, 0x8b, 0x05, 0xc8, 0x01, 0xe0, 0xa8, + 0xdb, 0xf0, 0x31, 0x5b, 0x02, 0xa7, 0xd5, 0x34, 0x9b, 0x7a, 0x1b, 0x5e, 0x3d, 0x53, 0x3d, 0xbd, 0xe4, 0xf9, 0x33, + 0x61, 0xc6, 0x62, 0xc3, 0xf3, 0x67, 0xd6, 0x91, 0x53, 0x3d, 0x13, 0x4a, 0xb4, 0x2e, 0xa0, 0x19, 0x78, 0x4d, 0x01, + 0x23, 0x96, 0x4c, 0xa6, 0x54, 0x91, 0xc7, 0xbd, 0xe9, 0x46, 0x0d, 0x5e, 0x50, 0x38, 0x04, 0x52, 0x3a, 0xfd, 0xe2, + 0x39, 0xd3, 0xef, 0x5d, 0x3c, 0xef, 0x90, 0xb5, 0x0d, 0xd3, 0xe5, 0x66, 0x98, 0x0c, 0x4a, 0xff, 0x99, 0x99, 0x18, + 0x17, 0xd6, 0x24, 0x01, 0xc4, 0xbf, 0xb1, 0xdf, 0x21, 0x85, 0x9b, 0xf7, 0x97, 0xc3, 0xf8, 0x91, 0xf7, 0x63, 0x64, + 0x4f, 0xd2, 0x0c, 0xb1, 0x66, 0x52, 0x21, 0x77, 0x5f, 0xad, 0x7f, 0x4c, 0xec, 0x26, 0x7b, 0x60, 0x01, 0x88, 0xad, + 0x69, 0xab, 0x5b, 0xde, 0xef, 0x7b, 0xa6, 0x08, 0xf0, 0x83, 0xf2, 0x8f, 0xee, 0x0c, 0xc9, 0xa0, 0xec, 0xba, 0x21, + 0xc4, 0x83, 0xb2, 0x69, 0xda, 0xeb, 0x6d, 0xef, 0xcc, 0x63, 0x75, 0x9d, 0x76, 0x16, 0x57, 0x8b, 0x0c, 0xd2, 0xea, + 0x43, 0x76, 0x9c, 0xd9, 0x67, 0x47, 0x4b, 0xa5, 0xfb, 0x7d, 0x88, 0x88, 0x3b, 0xca, 0xda, 0x7e, 0xbb, 0x05, 0xd7, + 0x70, 0x34, 0x08, 0x5d, 0xd9, 0xdb, 0x65, 0xb4, 0x71, 0x21, 0x8e, 0x7b, 0xa6, 0xf3, 0x05, 0x5f, 0x1e, 0xa5, 0x9d, + 0x07, 0xa7, 0x7a, 0xa2, 0xcf, 0x4d, 0x77, 0x95, 0xc9, 0xb5, 0x0e, 0xab, 0x31, 0xa8, 0xcd, 0xc2, 0x16, 0xee, 0xc2, + 0x36, 0x3a, 0x68, 0xed, 0xcb, 0x82, 0x7f, 0xca, 0x00, 0x7c, 0xe9, 0xd9, 0xb2, 0xed, 0x35, 0x69, 0xf5, 0x46, 0x46, + 0x21, 0xb6, 0xb4, 0xbd, 0xfa, 0x74, 0x94, 0x8f, 0x9b, 0x13, 0x8a, 0x0b, 0x39, 0xca, 0x8f, 0x5e, 0x43, 0xd4, 0xb5, + 0xae, 0xe3, 0x62, 0xd1, 0xe1, 0xc6, 0x55, 0xb7, 0xdd, 0xb8, 0x7e, 0x40, 0xbc, 0x35, 0xda, 0xa4, 0x50, 0x2b, 0x63, + 0x47, 0xf0, 0xb2, 0x7c, 0x38, 0x64, 0x62, 0x38, 0x94, 0x90, 0xa9, 0x8f, 0xdd, 0x1b, 0x9a, 0xf6, 0xf9, 0x69, 0xeb, + 0x47, 0x2c, 0x35, 0x8e, 0x62, 0xc3, 0x3b, 0x7d, 0xe7, 0xb1, 0x35, 0xae, 0xe4, 0xcb, 0x60, 0xb6, 0x2b, 0xa8, 0xb6, + 0xc6, 0x1b, 0xf6, 0x72, 0xfe, 0x7d, 0x25, 0x95, 0xfc, 0xed, 0xcf, 0x70, 0x0d, 0x6f, 0x6d, 0xe9, 0xa0, 0xa9, 0x66, + 0x39, 0xcb, 0xf5, 0xbd, 0xe0, 0xf8, 0xe3, 0xee, 0x15, 0xc1, 0xe0, 0xf7, 0x74, 0x14, 0xe4, 0x62, 0xa9, 0xd6, 0x80, + 0x82, 0x74, 0x64, 0xc7, 0x54, 0x16, 0x18, 0x06, 0xf0, 0x86, 0x0c, 0x90, 0xc7, 0x14, 0xee, 0x86, 0x0a, 0x2f, 0xfc, + 0xa5, 0x22, 0xbb, 0x04, 0xb6, 0x35, 0xe3, 0x63, 0x86, 0x3b, 0x08, 0xf9, 0x47, 0xb0, 0x3b, 0xb6, 0x62, 0xb7, 0x6c, + 0xc1, 0x90, 0x6c, 0x1c, 0x87, 0x31, 0xe6, 0xe3, 0x49, 0x7c, 0x25, 0x26, 0xf1, 0x80, 0x47, 0xe8, 0x18, 0xb1, 0xe6, + 0xf5, 0x2c, 0x96, 0x03, 0xc8, 0xee, 0xb8, 0xd2, 0x01, 0x21, 0x34, 0x36, 0xb4, 0xe4, 0x4d, 0x61, 0x70, 0xb1, 0x63, + 0x9f, 0x91, 0x48, 0xc6, 0x21, 0x58, 0xb4, 0xaa, 0x81, 0x85, 0x89, 0xdd, 0xf2, 0x62, 0xb6, 0x9a, 0xe3, 0x3f, 0x87, + 0x03, 0x02, 0x60, 0x07, 0xfb, 0x86, 0xdd, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x77, 0x96, 0xa7, 0x0b, 0xbb, 0xe7, 0xd7, + 0x7c, 0xcc, 0xce, 0x7f, 0xf0, 0x20, 0x72, 0xf6, 0xfc, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xdb, 0xd4, 0xab, 0xd8, 0x2d, + 0x51, 0x10, 0xde, 0x82, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0x5e, 0xf3, 0x05, 0xc6, 0x8a, 0x9d, 0xa5, 0x4b, 0x0f, 0x33, + 0x42, 0xed, 0xe9, 0x7c, 0x59, 0xab, 0x49, 0xb8, 0xb9, 0x5a, 0x4e, 0x06, 0x83, 0x8d, 0xbf, 0xe3, 0x6b, 0xe0, 0x83, + 0x39, 0xff, 0xc1, 0xdb, 0x51, 0xb9, 0xf0, 0x9f, 0xd7, 0x59, 0xf2, 0xce, 0x67, 0xd7, 0x03, 0xbe, 0x00, 0xbc, 0x25, + 0x74, 0xe0, 0xba, 0xf7, 0x99, 0xc4, 0x6b, 0xbb, 0xd6, 0xd7, 0x08, 0x24, 0xf2, 0x05, 0x60, 0xc4, 0xc4, 0xfc, 0xbe, + 0x86, 0x08, 0x8c, 0x04, 0x7c, 0x5b, 0xb5, 0x47, 0xfc, 0x96, 0x1b, 0xc0, 0xaf, 0xcc, 0x67, 0x0f, 0x3c, 0xd4, 0x3f, + 0x13, 0x9f, 0xdd, 0xf0, 0xf7, 0xfc, 0x85, 0x27, 0x25, 0xe9, 0x72, 0xf6, 0x7e, 0x0e, 0xd7, 0x43, 0x29, 0x4f, 0x87, + 0xf4, 0xb3, 0x31, 0x18, 0x40, 0x28, 0x64, 0xde, 0x78, 0xc0, 0x9a, 0x14, 0xe2, 0x5f, 0xc0, 0xb7, 0xa3, 0x84, 0xcd, + 0x1b, 0x6f, 0xeb, 0x6b, 0x79, 0xf3, 0xc6, 0x7b, 0xf0, 0x29, 0x0a, 0xb0, 0x0a, 0x4a, 0x59, 0x60, 0x15, 0x84, 0x8d, + 0x36, 0xc2, 0x18, 0xb8, 0x7a, 0xd7, 0x18, 0xea, 0x7a, 0x8e, 0xd8, 0xb6, 0xd2, 0x77, 0xe1, 0x3b, 0xc8, 0x80, 0x0f, + 0xde, 0x14, 0x25, 0xd1, 0xe7, 0xd4, 0x14, 0x49, 0xeb, 0x9e, 0xfb, 0xad, 0x75, 0x47, 0x6b, 0x4a, 0x7d, 0xe4, 0x6a, + 0x7c, 0x38, 0xd4, 0x2f, 0x84, 0x16, 0x09, 0xa6, 0xa0, 0x71, 0x0d, 0xda, 0x02, 0x04, 0x7d, 0x1e, 0x20, 0x6b, 0x49, + 0xb1, 0xe0, 0xdb, 0x5f, 0x21, 0x06, 0xaf, 0x4c, 0xef, 0x5c, 0xae, 0x32, 0x12, 0xb6, 0x17, 0x7e, 0x39, 0xac, 0xfd, + 0x89, 0x53, 0x0b, 0x4b, 0xab, 0x39, 0xa8, 0x9f, 0xd9, 0x72, 0x9c, 0xaa, 0xda, 0xbf, 0x25, 0x49, 0xb5, 0xab, 0xb4, + 0x9c, 0xde, 0xdb, 0x37, 0x5d, 0x26, 0xd8, 0xd8, 0x0f, 0xa8, 0x3a, 0xb2, 0x1a, 0x76, 0x5f, 0xa8, 0x2f, 0x7a, 0x4a, + 0x26, 0x34, 0x1f, 0x55, 0x34, 0xcf, 0xee, 0x37, 0x3b, 0xea, 0x3f, 0xbd, 0x1c, 0x8a, 0x00, 0xc9, 0x2a, 0x2d, 0x96, + 0x22, 0x67, 0x63, 0x3f, 0x1e, 0x26, 0x99, 0x0a, 0x2f, 0x48, 0x47, 0x77, 0xbf, 0x71, 0x7f, 0xcb, 0x0d, 0x64, 0x85, + 0x56, 0x6d, 0x30, 0x56, 0x8a, 0x96, 0xc1, 0xfa, 0x6a, 0xdc, 0xef, 0x8b, 0xab, 0xf1, 0x54, 0x04, 0x35, 0x10, 0x17, + 0x89, 0x17, 0xe3, 0x69, 0x4d, 0x2c, 0xa9, 0x5d, 0x81, 0x31, 0x7a, 0x5c, 0x15, 0xb5, 0x4f, 0xfd, 0x02, 0x42, 0x91, + 0x6a, 0xcd, 0x1c, 0x6b, 0xdc, 0x18, 0x11, 0x77, 0x58, 0xb9, 0x76, 0x6a, 0xaf, 0x03, 0xb0, 0xbc, 0x1a, 0x17, 0x84, + 0x4d, 0x72, 0xec, 0x5c, 0xc0, 0x6a, 0x34, 0xa4, 0xda, 0x0d, 0xb7, 0x5e, 0x76, 0x7e, 0xf3, 0x38, 0xb1, 0xb5, 0x11, + 0x6e, 0x29, 0xa0, 0x8c, 0xf2, 0x1b, 0xcb, 0x09, 0xbb, 0x53, 0xbd, 0x23, 0x55, 0x3b, 0xe2, 0xc4, 0x05, 0x2c, 0x37, + 0x3c, 0xb5, 0xfa, 0x26, 0x06, 0x27, 0x42, 0xd5, 0x4a, 0xc7, 0x6b, 0x3f, 0xe2, 0x7e, 0x75, 0x5f, 0xf7, 0x4a, 0xf0, + 0x93, 0x90, 0xd7, 0x6f, 0x79, 0x07, 0x80, 0x15, 0x1f, 0xf2, 0x62, 0x5a, 0x38, 0x5a, 0x97, 0x41, 0x19, 0x20, 0x42, + 0x33, 0x00, 0x3a, 0xb9, 0x3a, 0x88, 0xd2, 0xc0, 0x15, 0x77, 0x88, 0xf0, 0xd3, 0xe8, 0x59, 0xfe, 0x22, 0x7c, 0x56, + 0x4d, 0xc3, 0x8b, 0x3c, 0x88, 0x2e, 0xaa, 0x20, 0x7a, 0x56, 0x5d, 0x85, 0xcf, 0xf2, 0x69, 0x74, 0x91, 0x07, 0xe1, + 0x45, 0xd5, 0xd8, 0x77, 0xed, 0xee, 0x9e, 0x90, 0xb7, 0x5d, 0xfd, 0x91, 0x73, 0x65, 0x4f, 0x99, 0x9e, 0x9f, 0xd7, + 0x7a, 0xa5, 0x76, 0x9b, 0xeb, 0x35, 0x6a, 0xa6, 0x3e, 0xca, 0xfe, 0x66, 0x1b, 0x0b, 0x8f, 0xe6, 0x10, 0xfa, 0x8c, + 0xb4, 0x98, 0x7b, 0x9c, 0xeb, 0xcd, 0x9e, 0x14, 0x06, 0x46, 0x4c, 0x2a, 0x19, 0x39, 0xbd, 0xc0, 0x45, 0xa8, 0x42, + 0x0c, 0x6b, 0xe9, 0x6a, 0x9f, 0x75, 0xe9, 0x0d, 0xd4, 0x35, 0xc5, 0xbe, 0x86, 0x0c, 0xbc, 0x68, 0x7a, 0x19, 0x8c, + 0x01, 0x39, 0x02, 0xef, 0xf8, 0x6c, 0x09, 0x07, 0xe6, 0x1a, 0xa0, 0x6f, 0x1e, 0xf5, 0x75, 0xb9, 0xe3, 0x6b, 0xd5, + 0x37, 0xd3, 0xf5, 0x48, 0x29, 0x3f, 0x56, 0xfc, 0xee, 0xe2, 0x39, 0xbb, 0xe5, 0x1a, 0x15, 0xe5, 0x17, 0xbd, 0x58, + 0xef, 0x81, 0xab, 0xee, 0x17, 0xb8, 0xcd, 0xe2, 0xb1, 0x2b, 0x0f, 0x58, 0xb6, 0x65, 0x0f, 0xec, 0x86, 0xbd, 0x67, + 0x4f, 0xd8, 0x5b, 0xf6, 0x8e, 0xfd, 0x84, 0xaa, 0x0d, 0x25, 0xe4, 0xf9, 0x0b, 0x7e, 0x2b, 0x4d, 0x8f, 0x12, 0x95, + 0xec, 0xc1, 0x36, 0xd3, 0x0c, 0x37, 0xec, 0x3d, 0x5f, 0x0c, 0x57, 0xec, 0x2d, 0x64, 0x43, 0x99, 0x78, 0xb0, 0x62, + 0x3f, 0x71, 0x05, 0x62, 0xa6, 0xcf, 0xc2, 0xd2, 0x12, 0x15, 0x4d, 0x99, 0x28, 0x43, 0xbf, 0xe5, 0xf8, 0x22, 0xfb, + 0x09, 0x8b, 0x90, 0x9f, 0x19, 0xae, 0xd8, 0x03, 0x5f, 0x0c, 0x56, 0xec, 0xbd, 0x36, 0x10, 0x0d, 0x36, 0x6e, 0x69, + 0x84, 0x64, 0xa5, 0xcb, 0x92, 0xd2, 0xf4, 0xd6, 0xbe, 0x06, 0x6e, 0xd8, 0x0d, 0xd6, 0xee, 0x09, 0x16, 0x8d, 0x02, + 0xff, 0x60, 0xc5, 0xde, 0x71, 0x09, 0xa0, 0xe6, 0x96, 0x27, 0xbd, 0x42, 0x75, 0x81, 0x74, 0x3f, 0x78, 0xc2, 0xe9, + 0x45, 0xf6, 0x0e, 0xcb, 0xa0, 0xaf, 0x0c, 0x57, 0x6c, 0x8b, 0xb5, 0xbb, 0x31, 0x96, 0x2d, 0xab, 0x7a, 0x12, 0x11, + 0x18, 0x05, 0x95, 0xd2, 0xf2, 0x6f, 0xc4, 0xb2, 0xa9, 0x9b, 0x06, 0xb5, 0xa1, 0x3f, 0x1f, 0x8c, 0xfe, 0xe2, 0xeb, + 0x77, 0x3f, 0x78, 0xa5, 0xbe, 0xf6, 0xfe, 0xe2, 0xb8, 0x56, 0x96, 0xe8, 0x5a, 0xf9, 0x2b, 0x2f, 0x67, 0xbf, 0xcc, + 0x27, 0xba, 0x96, 0xb4, 0xc3, 0x90, 0xaf, 0xe9, 0xec, 0x97, 0x0e, 0x67, 0xcb, 0x5f, 0x7d, 0xbf, 0x31, 0x5d, 0xac, + 0x3e, 0xab, 0x7b, 0xf7, 0x61, 0xb0, 0x69, 0x9c, 0x7a, 0xef, 0x4e, 0xd7, 0x1b, 0x9b, 0x59, 0x6b, 0xcf, 0xcc, 0xff, + 0xe1, 0x4a, 0x6f, 0x71, 0xe8, 0x6e, 0xf8, 0x76, 0xb8, 0xb1, 0x47, 0x41, 0x7e, 0x5f, 0x2a, 0x8d, 0xb3, 0x9a, 0xbf, + 0xf4, 0x3a, 0xa5, 0x58, 0x40, 0x34, 0xfa, 0x64, 0x24, 0xa1, 0x4b, 0x66, 0xe2, 0x19, 0xe2, 0x8b, 0x0c, 0x90, 0xb9, + 0x40, 0x34, 0xbb, 0xe7, 0xe3, 0xc9, 0xfd, 0x55, 0x3c, 0xb9, 0x1f, 0xf0, 0x4f, 0xa6, 0x05, 0xed, 0xc5, 0x76, 0xef, + 0xb3, 0x5f, 0x79, 0x61, 0x2f, 0xc7, 0x5f, 0x7c, 0xf6, 0x45, 0xb8, 0x2b, 0xf4, 0x17, 0x9f, 0xbd, 0x13, 0xfc, 0xd7, + 0x91, 0x26, 0xca, 0x60, 0xef, 0x6a, 0xfe, 0xeb, 0x08, 0x19, 0x3f, 0xd8, 0x67, 0xc1, 0xbf, 0x80, 0xef, 0x77, 0x95, + 0xa0, 0x55, 0xfc, 0x73, 0xad, 0x7e, 0xbe, 0x97, 0x71, 0x39, 0xf0, 0x26, 0xb4, 0x82, 0xde, 0xbc, 0xad, 0xe5, 0x4f, + 0xe2, 0xe1, 0x48, 0xd5, 0x53, 0xc3, 0x3f, 0x8b, 0xc5, 0x2c, 0xea, 0xa3, 0x74, 0x2a, 0x6f, 0x72, 0xcd, 0x33, 0x69, + 0x5d, 0xbe, 0x87, 0x50, 0xe0, 0x6b, 0x1b, 0xa2, 0x60, 0xc7, 0x71, 0x23, 0xb8, 0x66, 0xef, 0x84, 0xcf, 0xb2, 0xe9, + 0x96, 0xdf, 0xf0, 0x27, 0xfc, 0x1d, 0xdf, 0x05, 0x0f, 0xfc, 0x3d, 0x7f, 0xcb, 0x7f, 0xe2, 0x3b, 0xb6, 0x94, 0x68, + 0xa7, 0xf5, 0xf6, 0x32, 0xd8, 0xb2, 0x7a, 0x77, 0x19, 0x3c, 0xb0, 0x7a, 0xfb, 0x3c, 0xb8, 0x61, 0xf5, 0xee, 0x79, + 0xf0, 0x9e, 0x6d, 0x2f, 0x83, 0x27, 0x6c, 0x77, 0x19, 0xbc, 0x65, 0xdb, 0xe7, 0xc1, 0x3b, 0xb6, 0x7b, 0x1e, 0xfc, + 0x24, 0x31, 0x1e, 0xde, 0x09, 0xc9, 0x71, 0xf2, 0xae, 0x66, 0x86, 0x4f, 0x37, 0xf8, 0x2c, 0xac, 0x5f, 0x54, 0xc7, + 0xe0, 0x73, 0xcd, 0x74, 0x8b, 0x03, 0x21, 0x98, 0x6e, 0x6f, 0x70, 0x4b, 0x4f, 0x4c, 0xab, 0x82, 0x54, 0xb0, 0xae, + 0x76, 0x06, 0x8b, 0xba, 0x69, 0x9d, 0xc9, 0x8e, 0x5f, 0x62, 0xdc, 0xe1, 0x97, 0xb8, 0x60, 0xcb, 0xa6, 0xd3, 0x49, + 0xe7, 0xf4, 0x49, 0xa0, 0x37, 0x7f, 0xbd, 0xeb, 0x57, 0xd2, 0x77, 0xa6, 0x68, 0x78, 0xae, 0xb4, 0xc6, 0xad, 0x9d, + 0x3e, 0xb4, 0x76, 0x7a, 0x26, 0x55, 0x68, 0x11, 0x8b, 0xca, 0xa2, 0xaa, 0x90, 0x49, 0x3c, 0xc8, 0xb4, 0x3e, 0x2d, + 0x61, 0xa4, 0xc8, 0x04, 0x34, 0xfa, 0x82, 0x8e, 0x81, 0x9c, 0x2c, 0x0a, 0x6c, 0xc9, 0x37, 0x83, 0x84, 0xad, 0x79, + 0x3c, 0x1d, 0x26, 0xc1, 0x92, 0xdd, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x52, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, + 0x79, 0x6f, 0x95, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x56, 0xe9, 0x0d, 0x7e, 0xeb, 0xec, 0xe7, 0x6b, 0xb5, 0xbf, 0x83, + 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xaf, 0xec, 0x2d, 0x7d, 0x6b, + 0xb6, 0xe9, 0xff, 0xb4, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xc6, 0x9f, 0x3c, + 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xc7, 0x3f, 0x8d, 0xb6, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, + 0x68, 0xef, 0xe4, 0x95, 0xbd, 0x23, 0x6e, 0x79, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, + 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xab, 0xd9, 0xa7, 0xf9, 0x64, 0xcb, 0x8f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, + 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x3b, 0x7e, 0xbc, 0x89, 0x0f, 0xff, 0xe3, + 0x4a, 0xef, 0xbe, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, + 0xf8, 0x13, 0xcd, 0xd2, 0x20, 0xb2, 0x14, 0x8a, 0x3f, 0x99, 0x69, 0xa7, 0xee, 0x54, 0x59, 0xdd, 0x2d, 0xdf, 0xe2, + 0x1e, 0x7f, 0xcb, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0x6f, 0xaf, 0x16, 0x93, 0xc1, 0xe0, 0xd6, 0xdf, 0xdf, 0xf3, 0x70, + 0x76, 0x3b, 0x67, 0xd7, 0xfc, 0x9e, 0x16, 0xd3, 0x44, 0x35, 0xbd, 0x78, 0x4c, 0xf0, 0xba, 0xf5, 0xfd, 0x89, 0xc5, + 0xff, 0x6a, 0x5f, 0x34, 0x6f, 0xfd, 0x81, 0xb4, 0x46, 0xcb, 0x5d, 0xfd, 0xfd, 0xe3, 0x8a, 0x89, 0x5b, 0x10, 0x2f, + 0xde, 0xdb, 0x9a, 0x86, 0xb7, 0xfc, 0xa3, 0x77, 0xed, 0x4f, 0xaf, 0x75, 0xcc, 0xcd, 0x44, 0x1d, 0x49, 0x6f, 0x2f, + 0x9e, 0xb3, 0x5f, 0xf9, 0x27, 0x79, 0x9c, 0x7c, 0x11, 0x72, 0xd2, 0xde, 0x20, 0x77, 0x13, 0x9d, 0x12, 0xef, 0xdc, + 0x44, 0xc2, 0x82, 0x40, 0x18, 0x8e, 0x9a, 0x3f, 0x4c, 0xca, 0xa9, 0xb7, 0x03, 0x6e, 0x57, 0x6e, 0xeb, 0x9f, 0x6f, + 0x39, 0xe7, 0x8b, 0xe1, 0xe5, 0xf4, 0x5d, 0xb7, 0x4b, 0x8f, 0x8a, 0x66, 0x53, 0x81, 0x6e, 0xb7, 0x18, 0x7b, 0x75, + 0x32, 0xb3, 0xcc, 0x25, 0x5f, 0x7a, 0x57, 0x9b, 0x99, 0xc7, 0xf4, 0x7e, 0x33, 0xcd, 0x90, 0xc8, 0x17, 0x08, 0x99, + 0x0e, 0x87, 0xbb, 0x73, 0x2c, 0x8f, 0x0f, 0xdf, 0x3e, 0x7b, 0x32, 0x78, 0x82, 0x91, 0x5b, 0x56, 0x34, 0xc8, 0x3b, + 0x3e, 0xcc, 0xea, 0xd6, 0x6d, 0xe3, 0xe2, 0xf9, 0xf0, 0x17, 0xc8, 0x1b, 0x74, 0x3d, 0x34, 0x45, 0xb4, 0xca, 0xef, + 0x28, 0xfa, 0x44, 0xc9, 0x41, 0xc7, 0x13, 0xa8, 0x1d, 0x52, 0xe0, 0xbe, 0x7b, 0xc6, 0x41, 0xbf, 0x81, 0xa5, 0xf6, + 0xfb, 0xe7, 0x9f, 0x88, 0x47, 0x1a, 0xc6, 0xfb, 0xfb, 0x30, 0xfa, 0x23, 0x2e, 0x8b, 0x35, 0x9c, 0xae, 0x03, 0xf8, + 0xdc, 0x33, 0x7d, 0xfb, 0xba, 0xf3, 0x7d, 0x3f, 0xf0, 0xb6, 0xfc, 0x86, 0xbd, 0xe3, 0xde, 0xe5, 0xf0, 0xad, 0xff, + 0xec, 0x09, 0x88, 0x4e, 0x30, 0x2e, 0x9f, 0x31, 0x12, 0xb6, 0xa3, 0x18, 0xb5, 0x0a, 0x3f, 0xd7, 0x10, 0xa2, 0xf5, + 0x09, 0x19, 0xbb, 0x20, 0xfd, 0x83, 0x02, 0xf4, 0x13, 0x02, 0xab, 0x49, 0x6a, 0x14, 0x98, 0xc4, 0xb7, 0x35, 0x24, + 0x90, 0x82, 0x05, 0x42, 0x6f, 0xa0, 0xf8, 0x54, 0xf0, 0x77, 0xc3, 0xcf, 0x24, 0xf9, 0x2d, 0x6a, 0x3e, 0x86, 0xbf, + 0x61, 0x68, 0x26, 0xd5, 0x43, 0x5a, 0x47, 0x89, 0xf7, 0x93, 0xbf, 0x8f, 0xc2, 0x4a, 0xa8, 0x63, 0x21, 0x48, 0xc5, + 0x90, 0x0b, 0x71, 0xf1, 0x7c, 0x72, 0x5b, 0x8a, 0xf0, 0x8f, 0x09, 0x3e, 0x93, 0x0b, 0x4d, 0x3e, 0xa3, 0x27, 0x8d, + 0x7c, 0xff, 0x41, 0xbe, 0x2f, 0x3b, 0x35, 0x58, 0xd4, 0x43, 0x7e, 0x5b, 0xbb, 0xef, 0xcb, 0x29, 0x41, 0x8f, 0xec, + 0x07, 0x34, 0x05, 0x03, 0x35, 0x01, 0x29, 0x43, 0x70, 0x0b, 0x57, 0x7d, 0x4f, 0x15, 0xe4, 0xcb, 0xef, 0x7d, 0x16, + 0x32, 0x5c, 0x65, 0x41, 0x48, 0x72, 0xa9, 0x90, 0xc2, 0xc6, 0x6d, 0x3d, 0xf8, 0xac, 0x31, 0x49, 0x24, 0xe4, 0x94, + 0x80, 0x24, 0x69, 0x6f, 0x20, 0x49, 0xc4, 0xf4, 0x1f, 0xae, 0x93, 0xa6, 0x59, 0x49, 0xe9, 0x86, 0x38, 0x55, 0xaf, + 0x91, 0xe6, 0x2c, 0x78, 0xcf, 0x60, 0xe9, 0x48, 0xb1, 0xe2, 0x9d, 0x31, 0x18, 0xeb, 0x60, 0xa1, 0x3b, 0x59, 0xdc, + 0xaf, 0x92, 0x30, 0x8d, 0x44, 0x95, 0x2f, 0x42, 0xfe, 0xfc, 0x97, 0x12, 0x7f, 0xf4, 0x96, 0x06, 0x22, 0x10, 0xfc, + 0x00, 0xad, 0x07, 0xac, 0xf1, 0xe0, 0x27, 0x56, 0x97, 0x61, 0x5e, 0x65, 0x54, 0xde, 0x6c, 0xc7, 0xb6, 0x73, 0xa6, + 0xaa, 0x16, 0x7c, 0x16, 0x86, 0x16, 0xed, 0x6c, 0xd5, 0x9c, 0xdc, 0xe6, 0x0d, 0xbe, 0x33, 0x49, 0x22, 0xb5, 0x94, + 0x44, 0xda, 0xea, 0xfa, 0x74, 0xe9, 0x75, 0x8b, 0x0a, 0x1a, 0x23, 0x40, 0x2f, 0x49, 0x77, 0x95, 0x4f, 0x28, 0x5e, + 0x59, 0x0d, 0xab, 0xe1, 0xa5, 0x43, 0x11, 0xc6, 0xda, 0x9b, 0x2b, 0x79, 0x76, 0x07, 0xd6, 0x23, 0xb4, 0x76, 0x55, + 0xea, 0x10, 0xb6, 0x9f, 0xe8, 0x3d, 0xa7, 0x52, 0x7f, 0x03, 0xaa, 0xc0, 0xa9, 0xa3, 0xa1, 0x3e, 0x6a, 0xa7, 0x90, + 0xed, 0xdc, 0x5b, 0x12, 0x54, 0xae, 0xe4, 0xa6, 0x4a, 0x8b, 0x52, 0xca, 0x94, 0xaf, 0x65, 0xb6, 0xb2, 0xfb, 0x64, + 0x00, 0xf1, 0x6c, 0x50, 0x20, 0xb9, 0xa8, 0xad, 0xe6, 0x20, 0x7d, 0x34, 0x4b, 0x1c, 0x6b, 0x07, 0x85, 0x97, 0x55, + 0x60, 0xe6, 0x32, 0x97, 0xcb, 0x41, 0xc1, 0x72, 0xbd, 0xd5, 0x4c, 0x33, 0xd5, 0x17, 0xb9, 0xbd, 0xcd, 0x78, 0x99, + 0xfe, 0x9b, 0x25, 0x03, 0x1e, 0x5d, 0x3c, 0xf7, 0x03, 0x48, 0x93, 0xbc, 0x0e, 0x90, 0x04, 0x9b, 0x83, 0x5d, 0xec, + 0x30, 0x6c, 0x15, 0x2b, 0x7b, 0xf2, 0x74, 0xb9, 0x43, 0x53, 0x2e, 0x61, 0x24, 0x27, 0xe6, 0x52, 0xea, 0xfb, 0x92, + 0xea, 0x86, 0x82, 0x93, 0x4d, 0x13, 0x50, 0x0a, 0x68, 0xb7, 0xe0, 0xbf, 0xf0, 0xa9, 0xa1, 0xd3, 0x02, 0x2c, 0xb5, + 0xdd, 0x80, 0xff, 0x42, 0xbf, 0xd8, 0x3e, 0xa2, 0x7e, 0x60, 0x1e, 0xec, 0xcd, 0xda, 0xca, 0x18, 0x10, 0x91, 0xb8, + 0x82, 0x3c, 0x12, 0xfc, 0xa0, 0xd8, 0xd3, 0x65, 0xe2, 0xc0, 0x99, 0xe2, 0x62, 0x29, 0xb5, 0x99, 0x79, 0xed, 0xb7, + 0xd4, 0xc4, 0x9b, 0x28, 0x89, 0x0a, 0xdb, 0x21, 0x8d, 0x5e, 0x52, 0xc6, 0x54, 0xc1, 0x86, 0xe8, 0xbe, 0x6e, 0x82, + 0x29, 0xf0, 0xa6, 0xaa, 0x02, 0x22, 0xd4, 0x5e, 0x64, 0x79, 0x7e, 0xd3, 0x05, 0x56, 0x17, 0x7c, 0x6c, 0x4c, 0xb3, + 0x0b, 0x56, 0x72, 0x35, 0x93, 0x3e, 0xf3, 0x76, 0xa0, 0x85, 0xbc, 0xcb, 0xcb, 0xa2, 0x15, 0xba, 0x1e, 0x44, 0x0b, + 0x7f, 0xaf, 0x39, 0x1e, 0x3d, 0xdb, 0x56, 0x53, 0x9b, 0x7d, 0xad, 0xc5, 0x02, 0x19, 0x88, 0x86, 0xbe, 0x90, 0x33, + 0x0a, 0x77, 0x95, 0xe6, 0x6a, 0xb5, 0xaf, 0xca, 0x20, 0x81, 0x89, 0x20, 0x6b, 0x59, 0x78, 0x8f, 0xee, 0xd5, 0x23, + 0xcd, 0x2b, 0x09, 0x9e, 0xb9, 0xf8, 0x0b, 0x00, 0xa1, 0x3c, 0x49, 0xc8, 0x01, 0x39, 0x80, 0xbf, 0xa5, 0x28, 0x95, + 0x06, 0xf8, 0x67, 0x75, 0x39, 0xb6, 0xf5, 0xfd, 0x9d, 0x56, 0x31, 0xb8, 0xfe, 0x7c, 0xdd, 0xf5, 0xac, 0x1d, 0xe2, + 0x5c, 0xd9, 0xea, 0xb5, 0x65, 0x9a, 0xc7, 0x48, 0x5d, 0x03, 0x70, 0x27, 0xd2, 0x23, 0x10, 0xc9, 0x4c, 0x34, 0xc8, + 0xd9, 0x0b, 0x3e, 0x9e, 0x8a, 0xc7, 0xa4, 0xbd, 0xca, 0xf7, 0xcd, 0x85, 0x3e, 0x18, 0x63, 0xdf, 0x82, 0x06, 0xf1, + 0xd1, 0x6a, 0x6b, 0x05, 0x62, 0xbd, 0x55, 0xea, 0x43, 0x37, 0x46, 0x41, 0x07, 0x8f, 0xb8, 0x91, 0x0b, 0x8e, 0xed, + 0xae, 0xad, 0xa7, 0xf4, 0x15, 0x80, 0xb9, 0x0e, 0x54, 0x32, 0x0c, 0x52, 0xe7, 0x89, 0xc2, 0x24, 0x3f, 0x4f, 0x48, + 0x42, 0x44, 0x75, 0xb6, 0x1c, 0xa5, 0xdc, 0xb4, 0x80, 0xcb, 0x8c, 0x0c, 0x30, 0x9b, 0x34, 0xeb, 0x27, 0x97, 0x2f, + 0x41, 0x2a, 0x0d, 0x11, 0xdc, 0xb0, 0xbd, 0x64, 0x74, 0xeb, 0xa8, 0x1b, 0x54, 0x49, 0xe6, 0xfa, 0xcd, 0xed, 0x2c, + 0x52, 0xe6, 0xcd, 0x47, 0x18, 0x6b, 0xf2, 0x21, 0xac, 0x13, 0xfc, 0x36, 0x40, 0x25, 0x7d, 0x2a, 0xbc, 0x68, 0x04, + 0x10, 0xea, 0x3b, 0x55, 0xc6, 0xa7, 0xc2, 0xcb, 0x46, 0x5b, 0x96, 0x51, 0x0a, 0xd5, 0x05, 0xb3, 0x5b, 0xd3, 0x85, + 0xe8, 0x56, 0xd5, 0x40, 0x1b, 0xb8, 0x76, 0x1d, 0x28, 0xa0, 0xa1, 0xda, 0x95, 0x1b, 0x16, 0x80, 0xd5, 0x4c, 0x04, + 0x86, 0xcb, 0xbf, 0xcf, 0x5f, 0xa9, 0x18, 0x9e, 0x7e, 0x3f, 0xf4, 0xf6, 0xdb, 0x20, 0x1a, 0x6d, 0x2f, 0xd9, 0x2e, + 0x88, 0x46, 0xbb, 0xcb, 0x86, 0xd1, 0xef, 0xe7, 0xf4, 0xfb, 0x79, 0x03, 0x3a, 0x12, 0x61, 0xc2, 0xec, 0xf5, 0x1b, + 0xb5, 0x7c, 0xa5, 0xd6, 0xef, 0xd4, 0xf2, 0xa5, 0x1a, 0xde, 0xda, 0x93, 0x44, 0x10, 0x59, 0xaa, 0x9a, 0x07, 0x49, + 0x91, 0x6a, 0xe9, 0x72, 0x8c, 0x16, 0x23, 0x6a, 0x29, 0x6b, 0x8e, 0x75, 0x22, 0xed, 0x1c, 0x94, 0x0c, 0x70, 0xb4, + 0xb8, 0xaa, 0x31, 0xdd, 0xac, 0x68, 0x09, 0xc4, 0x08, 0x2b, 0xdb, 0x72, 0x71, 0x93, 0xfa, 0xe8, 0x9c, 0x7c, 0xdb, + 0x2a, 0xe5, 0xdb, 0x56, 0xf0, 0xfc, 0x2b, 0x0a, 0xe5, 0x92, 0x6b, 0xd7, 0xb2, 0x69, 0xa1, 0x14, 0xca, 0xb8, 0x06, + 0x5b, 0xfb, 0x26, 0x30, 0x64, 0x3e, 0x52, 0xd4, 0xd8, 0x5e, 0x34, 0xca, 0x21, 0xc8, 0xd6, 0xc1, 0xa8, 0x53, 0x16, + 0x2c, 0xbe, 0xdd, 0x21, 0x03, 0x19, 0xe8, 0xa8, 0x6a, 0xe3, 0xd5, 0xce, 0x4a, 0x7f, 0x58, 0x5e, 0x3c, 0x67, 0x89, + 0x95, 0x4e, 0x7e, 0x53, 0xa1, 0x3f, 0x08, 0xd1, 0x37, 0x65, 0xc3, 0xc1, 0x8b, 0x2e, 0xb6, 0x32, 0x20, 0xde, 0x30, + 0xbd, 0xb7, 0xb1, 0x92, 0xe5, 0xae, 0x29, 0x5f, 0xcc, 0x78, 0xc2, 0x71, 0xf4, 0xe5, 0x6a, 0x11, 0xd6, 0x6a, 0x91, + 0x9d, 0x00, 0x0f, 0xad, 0xd5, 0x52, 0xc8, 0xd5, 0x22, 0x9c, 0x99, 0x2e, 0xd4, 0x4c, 0xcf, 0x40, 0xf3, 0x28, 0xd4, + 0x2c, 0x4f, 0x00, 0x0b, 0x5e, 0x98, 0x19, 0x2e, 0xcc, 0x0c, 0xc7, 0x21, 0x35, 0x4e, 0x0f, 0x7a, 0xaf, 0x73, 0xcf, + 0x2d, 0x77, 0xa3, 0xd3, 0x30, 0x6f, 0x47, 0x1b, 0xcc, 0xf1, 0x41, 0x38, 0x81, 0xf8, 0xc0, 0x12, 0x01, 0x7a, 0x34, + 0xac, 0x8e, 0x1a, 0x2a, 0x47, 0xf1, 0x65, 0x01, 0x48, 0x96, 0x04, 0x20, 0xb9, 0x57, 0xe3, 0x5c, 0x5a, 0x7e, 0x5d, + 0x25, 0x21, 0x47, 0x64, 0xbc, 0x94, 0x76, 0xf7, 0x84, 0x97, 0x23, 0x23, 0x34, 0x4f, 0x16, 0xa9, 0x97, 0xb3, 0x8c, + 0x8d, 0x11, 0xb8, 0x28, 0xf4, 0x9b, 0xaa, 0xdf, 0x4f, 0x4b, 0x2f, 0xa7, 0x76, 0x7e, 0x02, 0x7f, 0xcb, 0x53, 0x67, + 0x91, 0x23, 0xe4, 0xd5, 0xc8, 0x24, 0x2c, 0x2f, 0x95, 0x7a, 0xfa, 0x12, 0x66, 0x50, 0x77, 0x6f, 0x14, 0x80, 0x6b, + 0x91, 0x4b, 0xa7, 0xda, 0x12, 0xae, 0x4c, 0xb9, 0xc1, 0x3e, 0x0f, 0x79, 0x4e, 0x42, 0xa8, 0x44, 0x1e, 0x29, 0xac, + 0xfb, 0xf6, 0xc5, 0xf3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x0e, 0x00, 0x73, 0x30, 0xf5, 0xa2, 0x01, 0x2f, + 0xd5, 0x9c, 0xf9, 0xe8, 0xe5, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x33, 0xf9, 0xc8, 0xf8, 0x96, 0xf9, + 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, 0x6c, 0x50, + 0x09, 0x36, 0x0d, 0x5f, 0x4b, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, 0x1b, 0xb3, + 0x31, 0x2b, 0xd4, 0xce, 0x93, 0xcb, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, 0x71, 0xce, + 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, 0xa6, 0x25, + 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, 0xe8, 0x95, + 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x73, 0xfe, 0x52, + 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd1, 0xb4, 0x04, 0x75, 0x80, + 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x39, 0xe7, 0x5f, 0x6a, 0x43, 0x84, 0x8c, + 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, 0xc0, 0xe3, + 0xbc, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x1c, 0xf7, 0x4e, 0xd3, 0xb0, 0xfd, 0x17, 0xa0, 0x29, 0x86, 0x72, 0x3c, 0xdf, + 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xca, 0x42, 0xda, 0x96, 0x63, 0xb4, + 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xdc, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x7d, 0xdd, 0x63, 0x36, 0xc9, 0x8a, + 0x45, 0xae, 0x22, 0x4e, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, 0x41, 0xc9, + 0x72, 0x5e, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xd5, 0x9c, 0x52, 0xa8, + 0x7d, 0xc5, 0xc3, 0xea, 0xf4, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, 0x7c, 0xe7, + 0xeb, 0xf4, 0x8e, 0x42, 0x77, 0x9c, 0x99, 0x78, 0xaa, 0x02, 0x63, 0xdf, 0xda, 0x11, 0x14, 0x0e, 0x4d, 0xd7, 0x01, + 0x87, 0x69, 0x74, 0xc2, 0xe2, 0x9f, 0xd2, 0x71, 0xf2, 0xa2, 0x56, 0x88, 0x24, 0xff, 0x10, 0x2e, 0x0c, 0x89, 0x05, + 0x79, 0x49, 0xa8, 0x23, 0x32, 0x62, 0x35, 0x2a, 0xd6, 0x42, 0x45, 0xc5, 0x29, 0x1e, 0x6f, 0x15, 0x14, 0x97, 0xa2, + 0x54, 0x29, 0x15, 0xb9, 0x51, 0x29, 0x20, 0x96, 0x0d, 0xbc, 0x5b, 0xc0, 0x01, 0x10, 0x74, 0x96, 0xbb, 0xb5, 0xed, + 0x6e, 0x23, 0xf3, 0x99, 0x69, 0x9e, 0x56, 0x1f, 0xd4, 0xdf, 0xef, 0x97, 0x18, 0x5b, 0xe3, 0xe9, 0xef, 0xdb, 0xb4, + 0xe0, 0xe6, 0x6f, 0x18, 0xa2, 0x3b, 0x40, 0xc4, 0x2c, 0xed, 0xa1, 0x90, 0x05, 0x13, 0x96, 0xa1, 0x2a, 0x4f, 0x39, + 0xea, 0xe5, 0x93, 0x5b, 0x80, 0x50, 0x43, 0xbf, 0x36, 0x3a, 0xd5, 0x55, 0x09, 0xc2, 0xf7, 0x5d, 0xa1, 0x1e, 0x9b, + 0x03, 0x9e, 0x0c, 0x80, 0xbf, 0x22, 0xaf, 0xf5, 0xd8, 0xfe, 0x41, 0x6f, 0xd4, 0x1b, 0x20, 0x88, 0xce, 0x79, 0xe1, + 0x1f, 0x71, 0xae, 0x53, 0x7f, 0xc6, 0x85, 0x20, 0xbe, 0xf5, 0x24, 0xbc, 0x17, 0x67, 0x69, 0x1c, 0x9c, 0xf5, 0x06, + 0xe6, 0x22, 0x50, 0x9c, 0xa5, 0xf9, 0x19, 0x88, 0xe5, 0x88, 0x89, 0x58, 0xb3, 0x3b, 0x80, 0x09, 0x2c, 0x75, 0x1c, + 0xb2, 0xea, 0xd8, 0x7e, 0xff, 0xcd, 0xc8, 0x90, 0xa5, 0x23, 0x0c, 0x8c, 0xfe, 0x5d, 0x81, 0x00, 0x05, 0xcb, 0xcc, + 0xf6, 0x60, 0xd2, 0xd5, 0x9e, 0xd5, 0xf3, 0x66, 0x93, 0x77, 0xf5, 0x8e, 0xd5, 0xb4, 0x9c, 0x9a, 0x56, 0x59, 0x4d, + 0x9b, 0xe4, 0x50, 0x33, 0xd1, 0xef, 0x6b, 0x50, 0xd4, 0x7c, 0x0e, 0x60, 0x6c, 0x98, 0xfc, 0x66, 0x56, 0xcd, 0xfb, + 0x7d, 0x4f, 0x3e, 0x82, 0x5f, 0xc8, 0x56, 0xe6, 0xd6, 0x58, 0x3e, 0x7d, 0x4d, 0x24, 0x66, 0x06, 0xe6, 0xe8, 0xee, + 0x08, 0xdf, 0xeb, 0x46, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x0d, 0x0c, 0x9e, 0x27, 0x7c, 0x70, 0x91, 0xa3, + 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x1b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, 0x78, 0x90, + 0xfd, 0xfe, 0x0a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0xd7, 0x75, 0x51, 0x56, 0xd0, 0xb1, 0xf4, 0xf3, + 0x56, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x92, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, 0x2e, 0x3e, + 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0xe7, 0x7c, 0xb4, 0x2e, 0xd6, 0x1e, 0xf8, 0xc1, 0xcc, 0xd2, 0xb9, + 0x22, 0xce, 0xc8, 0xfd, 0xd1, 0xe7, 0x22, 0xcd, 0x29, 0x0f, 0x70, 0x1f, 0x8a, 0xb9, 0xfd, 0x16, 0x48, 0x3f, 0xf4, + 0x16, 0xc8, 0x3e, 0x3a, 0xe7, 0xe4, 0x0d, 0x20, 0xd2, 0x21, 0x0c, 0x6e, 0x45, 0x82, 0x8e, 0x55, 0xc3, 0x5b, 0x0b, + 0xec, 0xb4, 0x97, 0xc6, 0xbd, 0x34, 0x3f, 0x4b, 0xfb, 0x7d, 0x83, 0x9a, 0x99, 0x22, 0x1c, 0x3c, 0xce, 0xc8, 0x45, + 0xd2, 0x82, 0x2d, 0xa5, 0xfd, 0x57, 0x03, 0x47, 0x10, 0xf2, 0xf7, 0x3f, 0x84, 0xf7, 0x04, 0x20, 0x36, 0x69, 0x03, + 0xae, 0x7a, 0x4c, 0x47, 0x63, 0x4b, 0xa2, 0x56, 0x9d, 0x0d, 0x90, 0x38, 0x55, 0x5a, 0x4f, 0xb9, 0x59, 0x53, 0x18, + 0xa4, 0xca, 0x42, 0xfd, 0xc6, 0x7a, 0x32, 0x59, 0xe5, 0x22, 0x23, 0x8e, 0xca, 0xf4, 0xa5, 0x66, 0x04, 0xd3, 0xa5, + 0x9f, 0x2f, 0x60, 0xc9, 0xc6, 0x1f, 0x71, 0xf2, 0x96, 0x80, 0x63, 0x3b, 0x6b, 0x57, 0xd5, 0x2e, 0xc7, 0xad, 0xdd, + 0x1c, 0xe0, 0x7b, 0xbd, 0xd1, 0x68, 0xa4, 0x9d, 0xe3, 0x04, 0x0c, 0x55, 0x4f, 0x2d, 0x85, 0x1e, 0xab, 0x15, 0xa0, + 0x6e, 0x47, 0x2e, 0xb3, 0x64, 0x30, 0x5f, 0x18, 0xc7, 0xaf, 0xcc, 0x47, 0x1f, 0x2f, 0x95, 0xb5, 0xeb, 0x88, 0xaf, + 0xff, 0x20, 0xab, 0xf5, 0x2d, 0xef, 0xaa, 0x26, 0xe0, 0x8b, 0x2a, 0xa0, 0xf4, 0x1b, 0xde, 0x93, 0xbd, 0x8b, 0xaf, + 0xdd, 0x60, 0x97, 0x7c, 0xcb, 0x5b, 0xd4, 0x79, 0xbe, 0x72, 0x70, 0xa3, 0x4a, 0xb7, 0xf7, 0x92, 0x05, 0xae, 0xbd, + 0xa3, 0xa6, 0xb1, 0x9e, 0xf9, 0xd1, 0xc3, 0x22, 0x64, 0x3b, 0x1f, 0x7b, 0x5f, 0x35, 0x4f, 0xcf, 0x1a, 0x7a, 0x93, + 0x1a, 0xfa, 0xd8, 0x8b, 0xb2, 0x7d, 0x6a, 0x1a, 0xd1, 0x6b, 0xd8, 0xd0, 0xc7, 0xde, 0x92, 0x93, 0x43, 0x22, 0xc0, + 0xa9, 0x31, 0x7f, 0x7c, 0x38, 0x9d, 0xe1, 0xef, 0x18, 0x50, 0x09, 0xc4, 0x7c, 0x7a, 0x4c, 0x3b, 0x0a, 0x30, 0xa3, + 0x4a, 0x6f, 0x9f, 0x1e, 0xd8, 0x8e, 0x97, 0xf5, 0xd0, 0xd2, 0xbb, 0x27, 0x47, 0xb7, 0xe3, 0x55, 0x35, 0xbe, 0x94, + 0x43, 0x9e, 0xe7, 0xb3, 0xd1, 0x68, 0x24, 0x0c, 0x24, 0x77, 0xa5, 0x37, 0xb0, 0x02, 0x69, 0x5b, 0x54, 0x1f, 0xca, + 0xa5, 0xb7, 0x53, 0x87, 0x76, 0xe5, 0x4f, 0xf2, 0xc3, 0xa1, 0x18, 0x99, 0x63, 0x1c, 0xc0, 0x4d, 0x0a, 0x25, 0x47, + 0xc9, 0x5a, 0x82, 0xe8, 0x94, 0xc6, 0x53, 0x59, 0xaf, 0xad, 0x88, 0xbc, 0x1a, 0x71, 0x1e, 0x82, 0x1f, 0x3d, 0x50, + 0x8b, 0xbf, 0xd0, 0x82, 0xd8, 0x63, 0x9f, 0x2a, 0xa5, 0x17, 0xbc, 0x2a, 0x20, 0x44, 0xec, 0xef, 0x06, 0xda, 0x41, + 0x09, 0x0e, 0x25, 0xdc, 0x07, 0x84, 0x85, 0x7e, 0xed, 0xe5, 0x33, 0x19, 0xa3, 0xdc, 0x1b, 0x54, 0x73, 0x06, 0x30, + 0x95, 0x3e, 0x03, 0xbf, 0x4b, 0x80, 0x3a, 0xc5, 0xa7, 0xe8, 0x54, 0x6f, 0x1e, 0x36, 0x5d, 0x9f, 0x96, 0x28, 0x8a, + 0xe8, 0xce, 0xcf, 0xc7, 0x80, 0xd8, 0xd9, 0xb5, 0x19, 0x69, 0xd7, 0x7e, 0x83, 0x06, 0x2b, 0x25, 0x89, 0x76, 0x4e, + 0x09, 0xbb, 0x9d, 0x8f, 0x6c, 0xe9, 0x47, 0x29, 0x10, 0x73, 0xc7, 0x89, 0x44, 0xf6, 0x60, 0x23, 0x27, 0x70, 0x8b, + 0xf6, 0x8e, 0x0e, 0x40, 0xe5, 0x46, 0x41, 0x7e, 0x35, 0x47, 0x72, 0xc7, 0x77, 0xbd, 0xef, 0x06, 0xf5, 0xe0, 0xbb, + 0xde, 0x59, 0x4a, 0x72, 0x47, 0x78, 0xa6, 0xa6, 0x84, 0x88, 0xcf, 0xbe, 0x1b, 0xe4, 0x03, 0x3c, 0x4b, 0xb4, 0x48, + 0x8b, 0x84, 0x6a, 0x75, 0x8d, 0x9b, 0xf0, 0x22, 0x91, 0xdc, 0x43, 0xbb, 0xce, 0x23, 0x62, 0x01, 0xc8, 0x58, 0x7c, + 0x36, 0x6f, 0x28, 0xd4, 0xdd, 0xc4, 0x6c, 0xd1, 0x5d, 0x16, 0xfb, 0xfd, 0x6d, 0x9e, 0xd6, 0x3d, 0x1d, 0x1f, 0x83, + 0x2f, 0x48, 0x35, 0x01, 0x1e, 0xed, 0xaf, 0xcd, 0xf1, 0xea, 0xd5, 0xe6, 0x48, 0x59, 0xa8, 0x12, 0xf5, 0x5b, 0xac, + 0x66, 0x3d, 0x84, 0xe1, 0xce, 0x32, 0x63, 0x6d, 0x2f, 0x78, 0x25, 0x67, 0x55, 0x6c, 0x97, 0xe3, 0x2b, 0x96, 0xda, + 0x4a, 0xa2, 0x72, 0xb4, 0x1e, 0x6b, 0x53, 0x8c, 0xfc, 0x4a, 0x21, 0x51, 0x16, 0x1d, 0x5b, 0x0b, 0x05, 0xc4, 0x0b, + 0xd0, 0x97, 0xec, 0x4c, 0x03, 0xac, 0x37, 0x7a, 0x15, 0x11, 0x5a, 0x3e, 0x52, 0xe1, 0x4d, 0x6e, 0xaa, 0xcc, 0xca, + 0x66, 0xd1, 0xee, 0xa7, 0x8a, 0x57, 0x08, 0x56, 0x6f, 0xd4, 0x1e, 0x05, 0xa8, 0x3d, 0xb4, 0x50, 0x06, 0x90, 0xd2, + 0x34, 0x03, 0x40, 0x06, 0x00, 0x99, 0x2a, 0xe2, 0x33, 0x01, 0x2a, 0x6d, 0x75, 0xa3, 0xc0, 0x89, 0xf4, 0x1a, 0x68, + 0x16, 0x58, 0xe9, 0x23, 0x05, 0x19, 0x2c, 0xb6, 0x08, 0xc0, 0xca, 0x91, 0x33, 0x4c, 0x63, 0xc8, 0x36, 0x9a, 0xb8, + 0x24, 0xcd, 0xef, 0xc3, 0x2c, 0x95, 0x78, 0x12, 0x3f, 0xc8, 0x1a, 0x23, 0x00, 0x90, 0xbe, 0x4f, 0x2f, 0x8a, 0x2c, + 0x26, 0x1c, 0x38, 0xeb, 0xa9, 0x83, 0xa2, 0x26, 0xe7, 0x5a, 0xd3, 0xea, 0x59, 0x6d, 0xf2, 0x90, 0x05, 0x3a, 0x7b, + 0x30, 0x26, 0xb5, 0x7c, 0xcf, 0x23, 0xfb, 0x2b, 0xc7, 0x33, 0xc2, 0x77, 0xdd, 0xc1, 0xa9, 0xff, 0x6e, 0x6a, 0x60, + 0x62, 0x4a, 0x00, 0x36, 0x06, 0x47, 0x13, 0xe2, 0x77, 0x3a, 0x26, 0x53, 0x9b, 0x14, 0x81, 0xc0, 0x43, 0xf0, 0x0a, + 0x9e, 0x1b, 0x2e, 0xb7, 0xdc, 0xd8, 0x59, 0xe4, 0x69, 0x02, 0x70, 0xe2, 0x05, 0xdf, 0x02, 0x1c, 0xa7, 0x5e, 0x15, + 0xb2, 0x67, 0xcf, 0xc5, 0x74, 0x36, 0x0f, 0x1e, 0x12, 0xda, 0xbf, 0x98, 0xf0, 0x9b, 0xee, 0x2a, 0xb9, 0x32, 0xb5, + 0xee, 0x4d, 0x74, 0x95, 0xcb, 0x9d, 0x3e, 0xad, 0x38, 0x86, 0x39, 0x83, 0x55, 0x40, 0xce, 0xd9, 0x90, 0xbf, 0x38, + 0x07, 0xc0, 0x96, 0x95, 0xf0, 0x22, 0xfe, 0x22, 0x94, 0xd5, 0x02, 0xb8, 0x47, 0xce, 0x23, 0xf3, 0xcb, 0x57, 0xdb, + 0xa1, 0x9c, 0x53, 0x14, 0xc6, 0x72, 0x6a, 0x5a, 0x52, 0x9c, 0x0e, 0x3d, 0x05, 0x93, 0xa9, 0x2d, 0x7f, 0x6f, 0x13, + 0x97, 0xd9, 0x9b, 0x49, 0x38, 0x5f, 0x47, 0xb6, 0xad, 0x55, 0xf7, 0xd0, 0x0d, 0xc1, 0xa0, 0x8f, 0x11, 0xb4, 0x6c, + 0xae, 0xef, 0xd6, 0x83, 0x81, 0xc2, 0xf6, 0xad, 0xe9, 0xa6, 0x45, 0xa7, 0x38, 0xe0, 0xcc, 0x5a, 0xd7, 0xa8, 0x54, + 0x15, 0x87, 0x5e, 0xf2, 0x6e, 0x59, 0x95, 0x5d, 0x96, 0x5e, 0x08, 0x52, 0xa3, 0xae, 0x22, 0x44, 0x4a, 0xc5, 0x0e, + 0xef, 0xc9, 0xaf, 0x81, 0x89, 0x67, 0x56, 0x8e, 0xd2, 0x78, 0x0e, 0x30, 0x41, 0x0a, 0x7d, 0x53, 0x7e, 0x05, 0xb8, + 0xa1, 0x8b, 0x28, 0xcc, 0xde, 0xc6, 0x55, 0x50, 0x5b, 0x4d, 0xbf, 0x77, 0x70, 0x62, 0xcf, 0xeb, 0x7e, 0x3f, 0x25, + 0x1a, 0x3f, 0x0c, 0xbd, 0xc0, 0xbf, 0xc7, 0xd3, 0x7d, 0x13, 0xa4, 0xe6, 0x95, 0x07, 0x78, 0x45, 0x97, 0x5b, 0x9b, + 0x72, 0x45, 0xe3, 0x62, 0x5e, 0x23, 0x22, 0x7c, 0xea, 0x28, 0xb6, 0xdb, 0xfc, 0x38, 0xb5, 0x31, 0x18, 0x84, 0x70, + 0xdf, 0xca, 0xf8, 0x7d, 0xe2, 0xe5, 0xb3, 0x68, 0x0e, 0x8a, 0xd2, 0x4c, 0x93, 0x84, 0x14, 0xd2, 0x4b, 0x80, 0x3e, + 0x1a, 0x84, 0x5a, 0x5d, 0xf9, 0x47, 0xe2, 0xa5, 0x6a, 0x5a, 0x9b, 0xa7, 0x58, 0xa3, 0x40, 0xcc, 0xa2, 0x79, 0xc3, + 0x32, 0x3a, 0x24, 0xd5, 0xe5, 0xd2, 0x34, 0xe3, 0x0f, 0xab, 0x19, 0xaa, 0x15, 0x47, 0x4d, 0x50, 0xa3, 0x74, 0x03, + 0x17, 0xc0, 0xbf, 0xd3, 0x1d, 0x47, 0x35, 0x8a, 0x14, 0x0d, 0xf8, 0x04, 0x81, 0x61, 0xcd, 0xe6, 0x09, 0x6b, 0x4d, + 0x5d, 0x33, 0xfa, 0x7d, 0x19, 0x27, 0x64, 0x92, 0x90, 0x9c, 0x0f, 0x97, 0xeb, 0x47, 0x52, 0x5d, 0x00, 0xa9, 0x72, + 0xc5, 0x66, 0xbd, 0xde, 0x1c, 0x30, 0x7a, 0x61, 0xfd, 0xc2, 0xc6, 0x15, 0x9c, 0x5f, 0x12, 0xe6, 0xae, 0xfa, 0x11, + 0x66, 0x19, 0x54, 0x01, 0x69, 0x7e, 0x2c, 0x78, 0xf3, 0xdc, 0x05, 0xa2, 0x7e, 0x33, 0x52, 0x17, 0x94, 0x59, 0x3a, + 0xb7, 0x88, 0x40, 0xc0, 0x6b, 0x58, 0x3d, 0x81, 0x64, 0x5f, 0x3e, 0xf6, 0x69, 0x46, 0x81, 0xea, 0x08, 0x40, 0xd9, + 0xac, 0x1f, 0xc2, 0xfe, 0x01, 0xe1, 0x84, 0xfa, 0x9b, 0x37, 0x72, 0xd6, 0x90, 0x3c, 0x90, 0x6a, 0xc2, 0x63, 0x38, + 0x35, 0x16, 0xf8, 0xd2, 0xa2, 0x37, 0x15, 0xbc, 0x26, 0x38, 0xee, 0x05, 0x5a, 0xfb, 0x16, 0x70, 0x84, 0x08, 0x2e, + 0x43, 0x13, 0xa7, 0xbd, 0x5d, 0x2f, 0x40, 0x42, 0x73, 0x0b, 0xe7, 0xfa, 0xda, 0x05, 0x2d, 0x4e, 0x91, 0x93, 0x45, + 0x17, 0x18, 0xe8, 0x82, 0xcc, 0x1b, 0xff, 0xaa, 0x60, 0xe5, 0x02, 0x64, 0x2f, 0x15, 0x2b, 0x89, 0xd8, 0x76, 0xea, + 0x8f, 0x52, 0xd9, 0x6f, 0xcf, 0xac, 0x09, 0xfc, 0x2a, 0xb1, 0x5f, 0x22, 0x93, 0x6f, 0x7a, 0x6c, 0xf2, 0x95, 0xb1, + 0xd0, 0xa9, 0x65, 0x70, 0x4e, 0x8f, 0x0c, 0xce, 0xbd, 0x9d, 0x55, 0x9b, 0x10, 0x86, 0x82, 0x24, 0xd0, 0x74, 0xe9, + 0x61, 0xdd, 0xf4, 0xe7, 0x27, 0x2d, 0x7e, 0xad, 0xda, 0xb7, 0xee, 0xc7, 0x21, 0x76, 0xf1, 0xab, 0xc4, 0x33, 0xec, + 0xa3, 0x3e, 0x70, 0x80, 0xc9, 0x88, 0x89, 0xcb, 0x7e, 0x1f, 0x0a, 0x9b, 0x8d, 0xe7, 0xa3, 0xba, 0xf8, 0xb9, 0x78, + 0x00, 0x28, 0x87, 0x0a, 0xec, 0x72, 0x28, 0x43, 0x19, 0xb1, 0xa9, 0x2d, 0xf7, 0xfc, 0xfe, 0x2a, 0xcc, 0x41, 0xde, + 0xd1, 0x98, 0x38, 0x67, 0x20, 0x86, 0xc1, 0xd7, 0xbf, 0x7b, 0xb2, 0x4f, 0x9b, 0xef, 0xce, 0xe0, 0xbb, 0xa3, 0xb3, + 0x0f, 0xc8, 0x71, 0x73, 0xb6, 0x2e, 0x8b, 0xfb, 0x34, 0x16, 0x67, 0xdf, 0x41, 0xea, 0x77, 0x67, 0x45, 0x79, 0xf6, + 0x9d, 0xaa, 0xcc, 0x77, 0x67, 0xb4, 0xe0, 0x46, 0xbf, 0x5b, 0x13, 0xef, 0x9f, 0x95, 0xa6, 0x3d, 0x5b, 0x42, 0x38, + 0x96, 0x56, 0x3f, 0x82, 0x12, 0x51, 0x91, 0xa2, 0xca, 0x50, 0x56, 0x6b, 0xc7, 0x79, 0x9f, 0x68, 0x78, 0x6c, 0x9a, + 0x90, 0xb8, 0x5a, 0xc2, 0x3a, 0xd4, 0xb3, 0xd3, 0x26, 0xd9, 0x71, 0x1e, 0xa8, 0x03, 0x22, 0xe7, 0x2f, 0xf2, 0xd1, + 0x96, 0xbe, 0x06, 0xdf, 0x3a, 0x1c, 0xf2, 0xd1, 0xce, 0xfc, 0xf4, 0xc9, 0x5a, 0x29, 0x83, 0x8d, 0x14, 0xa3, 0x10, + 0x12, 0xc5, 0x6d, 0x7b, 0x0c, 0x80, 0xff, 0xfd, 0xc3, 0x81, 0x7e, 0xef, 0xe4, 0x6f, 0xb5, 0x5b, 0x5a, 0xf5, 0xfc, + 0xd0, 0x22, 0xcc, 0x78, 0x5d, 0x1b, 0x76, 0xb6, 0xbd, 0x04, 0x94, 0xde, 0x37, 0x0d, 0x6a, 0x8a, 0xe8, 0x27, 0xac, + 0x26, 0x56, 0x71, 0x58, 0x90, 0x12, 0x87, 0x18, 0x8e, 0xd1, 0x0e, 0x3d, 0x4e, 0x17, 0x35, 0x4f, 0xee, 0x3b, 0x64, + 0xdc, 0xfa, 0x3e, 0x20, 0xb9, 0x14, 0xce, 0x3f, 0x78, 0xa1, 0xc1, 0x44, 0x2f, 0xf2, 0xaa, 0xc8, 0xc4, 0x48, 0xd0, + 0x28, 0xbf, 0x25, 0x71, 0xe6, 0x0c, 0x6b, 0x71, 0xa6, 0x10, 0xc2, 0x42, 0x42, 0xe5, 0x2e, 0x4a, 0x4a, 0x0f, 0xce, + 0x9e, 0xec, 0xcb, 0xe6, 0x77, 0xc2, 0x84, 0x18, 0x2d, 0x80, 0x06, 0x67, 0xd7, 0x2e, 0xef, 0x21, 0x2c, 0x73, 0xef, + 0xf7, 0xb7, 0x77, 0x79, 0x01, 0x71, 0x99, 0x67, 0x52, 0xb1, 0x5a, 0x9e, 0x01, 0x4d, 0x9e, 0x88, 0xcf, 0xc2, 0x4a, + 0x4e, 0x83, 0xaa, 0xa3, 0x58, 0xbd, 0x8d, 0xe7, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, 0xdd, 0x67, 0x6f, 0x94, + 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, 0xe7, 0x26, 0xc8, 0x3f, + 0xbe, 0x3e, 0xa1, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, 0x9b, 0x23, 0x35, 0x79, + 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, 0x67, 0x2b, 0x73, 0x2f, + 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xba, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, 0x62, 0x86, 0x29, 0xd6, + 0x5f, 0xd8, 0xf0, 0x9b, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x63, 0x16, 0xc2, 0xe1, 0xb0, 0x99, 0x14, + 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0x87, 0x43, 0x57, 0xcb, 0xd6, 0xc2, 0x83, 0x87, 0xaa, 0x85, 0x9b, 0x86, 0xe5, + 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, 0x1b, 0x6b, 0xe0, 0x1a, + 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, 0x09, 0xa3, 0x15, 0xc2, + 0xef, 0xbe, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, 0x4a, 0xb1, 0x34, 0x6f, + 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0x73, 0xdf, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, 0xcd, 0xe6, 0xc0, 0x7d, + 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x27, 0xcb, 0xe3, 0xf0, 0x2d, 0xfc, 0xcb, + 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xab, 0x14, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, 0x8d, 0xa8, 0x0d, 0x7f, + 0xc3, 0xbf, 0x85, 0x7d, 0x84, 0xfd, 0x86, 0x26, 0x08, 0x03, 0x58, 0x7f, 0x26, 0x10, 0x17, 0x16, 0x82, 0x04, 0x7f, + 0xab, 0x24, 0xff, 0x9c, 0xf0, 0xd9, 0xa2, 0x04, 0xb2, 0x3a, 0x8c, 0xe2, 0x13, 0x8a, 0x89, 0x42, 0x18, 0x6e, 0x09, + 0xbd, 0xa3, 0xff, 0x46, 0x94, 0x64, 0x93, 0xdc, 0x8a, 0xf5, 0x40, 0x26, 0x49, 0x30, 0xc1, 0xca, 0x0b, 0xe5, 0x4b, + 0xf7, 0x42, 0xa9, 0xb5, 0x16, 0xb4, 0x7e, 0xf9, 0x93, 0xc4, 0x33, 0xa0, 0x7b, 0x20, 0x63, 0xd0, 0x6d, 0x44, 0x35, + 0xc9, 0x31, 0x7d, 0x94, 0xce, 0x33, 0x50, 0x01, 0x9d, 0xad, 0xb3, 0xb0, 0x5e, 0x16, 0xe5, 0xaa, 0x15, 0x1e, 0x2a, + 0x4b, 0x1f, 0xa9, 0xc7, 0x98, 0x17, 0xe6, 0xc9, 0x89, 0x7c, 0xf0, 0x08, 0xd0, 0xf0, 0x28, 0x4f, 0xab, 0x8e, 0xd2, + 0xfa, 0x81, 0x65, 0xc0, 0x08, 0x9c, 0x28, 0x03, 0x1e, 0x61, 0x19, 0x98, 0xa7, 0x5d, 0x86, 0x1a, 0xc4, 0x1a, 0x55, + 0x57, 0x6a, 0x83, 0x39, 0x51, 0x94, 0x7c, 0x8a, 0xa5, 0x15, 0xc6, 0xd0, 0xd4, 0x95, 0x47, 0xd6, 0x4b, 0x4e, 0xd8, + 0x93, 0xdd, 0x40, 0xba, 0x85, 0x8d, 0x02, 0x17, 0x74, 0x2d, 0x4b, 0x94, 0x8b, 0x6e, 0x19, 0x51, 0x26, 0x42, 0xea, + 0x67, 0x0f, 0x67, 0x5a, 0xed, 0x37, 0x76, 0xd2, 0xbe, 0x3d, 0x52, 0xf4, 0x82, 0x81, 0xf8, 0xb4, 0x47, 0x4a, 0x3d, + 0x6b, 0xe4, 0x32, 0xb0, 0xa5, 0x4b, 0x55, 0xcf, 0x7f, 0x83, 0xf2, 0x1d, 0xcc, 0x8c, 0xb3, 0xd9, 0xef, 0x7a, 0x73, + 0x7b, 0xb2, 0xaf, 0x9b, 0xdf, 0x59, 0xaf, 0x07, 0x5b, 0x83, 0x4c, 0x7c, 0xa9, 0xa8, 0xa7, 0xac, 0x42, 0xac, 0xc8, + 0xec, 0x7f, 0x0b, 0xef, 0x77, 0x78, 0x6b, 0x84, 0x66, 0x65, 0x3c, 0xcc, 0x47, 0x4f, 0xf6, 0xa2, 0xf9, 0xbd, 0xb3, + 0x6c, 0x2b, 0x57, 0x25, 0xb3, 0xfd, 0x7e, 0x94, 0x34, 0x67, 0x8f, 0xd7, 0x48, 0xea, 0x00, 0x1f, 0xaf, 0xcf, 0xf0, + 0x91, 0x4a, 0x28, 0xb5, 0xa0, 0xaa, 0x41, 0xeb, 0x63, 0xbf, 0xb7, 0x9e, 0xd3, 0xc7, 0x8f, 0xe5, 0x74, 0x4b, 0x8a, + 0x30, 0x7e, 0x60, 0x30, 0x65, 0x27, 0x4e, 0x5d, 0xf2, 0x66, 0x48, 0xef, 0xba, 0x55, 0x52, 0x97, 0x3d, 0x4a, 0x04, + 0xa1, 0x0e, 0xd6, 0x2f, 0xf6, 0x43, 0x98, 0xd9, 0xa2, 0x3f, 0x6c, 0x56, 0x73, 0x42, 0x41, 0x04, 0x88, 0x56, 0x79, + 0x1f, 0x38, 0x26, 0x09, 0xb3, 0xe6, 0x86, 0x74, 0xeb, 0xcd, 0x95, 0xf6, 0x4a, 0x0a, 0xe8, 0xe7, 0x20, 0x73, 0xfb, + 0xe8, 0x96, 0xab, 0x96, 0x79, 0x2e, 0x6d, 0x39, 0x60, 0xd1, 0x42, 0x74, 0x66, 0xe7, 0xd2, 0xe1, 0xe0, 0x3f, 0xa8, + 0x2b, 0x51, 0x45, 0x04, 0x1d, 0x45, 0x0b, 0x46, 0xab, 0x55, 0xbb, 0x9c, 0x6c, 0x2a, 0x64, 0x4b, 0x22, 0x9c, 0x28, + 0xd9, 0x2b, 0xa1, 0x3e, 0xca, 0xd5, 0x9e, 0x69, 0x88, 0x3f, 0x13, 0xb0, 0x69, 0x83, 0xbf, 0x05, 0xee, 0x65, 0x70, + 0x66, 0xda, 0xa7, 0x61, 0x04, 0x44, 0xe6, 0x10, 0xec, 0xe7, 0x77, 0x3d, 0xa8, 0xe0, 0x41, 0x47, 0xfa, 0xeb, 0x7a, + 0x56, 0xe0, 0x99, 0x7b, 0xe2, 0xf9, 0x9b, 0x13, 0xe9, 0x45, 0x0e, 0x0f, 0x34, 0xf7, 0x61, 0xc6, 0x5f, 0x96, 0x65, + 0xb8, 0x1b, 0x2d, 0xcb, 0x62, 0xe5, 0x45, 0x7a, 0x1f, 0xcf, 0xa4, 0x18, 0x48, 0x74, 0x98, 0x19, 0x5d, 0xc5, 0x3a, + 0xce, 0x61, 0xdc, 0xdb, 0x93, 0xb0, 0x42, 0xfb, 0x67, 0x89, 0xbd, 0x2e, 0x00, 0xc0, 0x21, 0x6b, 0xd0, 0x0a, 0xef, + 0x74, 0x7b, 0xbb, 0xc7, 0x25, 0x25, 0x8a, 0x1b, 0x35, 0x3f, 0xab, 0xa1, 0x65, 0x82, 0x5a, 0x66, 0xdd, 0xc9, 0x64, + 0x8a, 0x24, 0xf0, 0x6d, 0xd8, 0x1b, 0x56, 0xe4, 0xf3, 0x46, 0x6e, 0x0f, 0xef, 0xc2, 0x95, 0x88, 0xb5, 0x05, 0x9d, + 0x74, 0x64, 0x1c, 0xee, 0x85, 0xe6, 0x46, 0xba, 0x7f, 0x52, 0x25, 0x61, 0x29, 0x62, 0xb8, 0x05, 0xb2, 0xbd, 0xda, + 0x56, 0x82, 0x12, 0x48, 0x60, 0x3f, 0x94, 0x62, 0x99, 0x6e, 0x05, 0x80, 0x39, 0xf0, 0x3f, 0x25, 0x0c, 0xa1, 0xbb, + 0xf3, 0x10, 0xaf, 0x1a, 0x79, 0xdf, 0x20, 0x04, 0xfb, 0x6b, 0x90, 0xd3, 0x80, 0x41, 0xa4, 0x18, 0xc9, 0x82, 0x81, + 0x04, 0x20, 0xe7, 0x6b, 0x30, 0xc9, 0x4d, 0x73, 0xcf, 0x0f, 0x72, 0xdd, 0xc1, 0xb4, 0x0f, 0xba, 0x17, 0xd7, 0x9a, + 0xe5, 0xe0, 0x15, 0x13, 0xf1, 0xbf, 0xd7, 0x5e, 0xc9, 0x72, 0x96, 0xf9, 0x8d, 0xb9, 0xe8, 0x64, 0x70, 0xd5, 0x10, + 0x7e, 0x31, 0xcb, 0xe6, 0x3c, 0x9a, 0x65, 0x3a, 0xd4, 0xbf, 0x68, 0x8e, 0x4a, 0x01, 0x0c, 0x75, 0xbc, 0x00, 0x6b, + 0xbc, 0x2b, 0xdd, 0xb4, 0xe2, 0x91, 0xc6, 0x18, 0x05, 0x15, 0x3a, 0x08, 0xfd, 0xbd, 0x06, 0x78, 0x0d, 0x26, 0xb9, + 0x11, 0x2a, 0x1f, 0x5c, 0xd0, 0x0d, 0xdd, 0x72, 0xe5, 0x12, 0xd4, 0xa4, 0x6a, 0xf9, 0xe5, 0x08, 0xf5, 0xae, 0x96, + 0x5c, 0xaa, 0xcd, 0xa7, 0x46, 0x59, 0x23, 0xc8, 0xe4, 0x28, 0xfd, 0x3e, 0xe5, 0xc2, 0xad, 0x8c, 0xc9, 0xfa, 0x70, + 0xf0, 0x0a, 0x6e, 0x6a, 0xfc, 0x3a, 0x27, 0x16, 0x51, 0x7b, 0x48, 0x84, 0xad, 0xdd, 0x0a, 0xdd, 0x7b, 0xdc, 0x28, + 0xcd, 0xa3, 0x6c, 0x13, 0x8b, 0xca, 0xeb, 0x25, 0x60, 0x2d, 0xee, 0x01, 0x19, 0x2a, 0x2d, 0xfd, 0x8a, 0x15, 0x00, + 0x19, 0x20, 0x85, 0x8d, 0x1f, 0x90, 0xf6, 0xea, 0x83, 0x97, 0xfa, 0xfd, 0xbe, 0x31, 0xe5, 0xbf, 0x7f, 0xc8, 0x81, + 0x99, 0x50, 0x94, 0xf5, 0x0e, 0x26, 0x10, 0x5c, 0x3b, 0x49, 0x7b, 0x56, 0xf3, 0x17, 0xeb, 0xda, 0x03, 0x52, 0x2b, + 0xdf, 0x62, 0xae, 0x7a, 0x6d, 0x5f, 0x6c, 0xf6, 0x69, 0x75, 0x63, 0x34, 0x0e, 0x82, 0xa5, 0xd5, 0x5b, 0xad, 0x72, + 0xc8, 0x1b, 0x5e, 0x81, 0x48, 0x65, 0x5d, 0x5d, 0x2b, 0xe7, 0xea, 0x5a, 0x70, 0x24, 0x90, 0x2d, 0x79, 0x0e, 0xff, + 0x85, 0xdc, 0x2b, 0x0f, 0x87, 0xc2, 0xef, 0xf7, 0xd3, 0x19, 0x69, 0x65, 0x81, 0x32, 0x6d, 0x5d, 0x7b, 0xa1, 0x7f, + 0x38, 0xfc, 0x00, 0x5e, 0x23, 0xfe, 0xe1, 0x50, 0xf6, 0xfb, 0x1f, 0xcd, 0x4d, 0xe6, 0x7c, 0xac, 0x94, 0xb2, 0x97, + 0xa8, 0x74, 0x7f, 0x9b, 0xf0, 0xde, 0xff, 0x1e, 0xfd, 0xef, 0xd1, 0x65, 0x4f, 0x05, 0x80, 0x25, 0x7c, 0x86, 0x37, + 0x74, 0xa6, 0x2e, 0xe7, 0x4c, 0xba, 0xbb, 0x2b, 0x3f, 0xf4, 0x9e, 0xc6, 0x87, 0xef, 0xcd, 0x4d, 0x1b, 0x7f, 0xad, + 0x8e, 0x34, 0x09, 0x1d, 0x17, 0xfd, 0xc3, 0xe1, 0x53, 0xa2, 0xf5, 0x69, 0xa9, 0xd2, 0xa7, 0x29, 0xf0, 0x24, 0xc3, + 0x86, 0xeb, 0x16, 0xa6, 0xa3, 0xf9, 0x71, 0xf3, 0x55, 0xf2, 0xe2, 0x2c, 0x85, 0x6b, 0x6f, 0x3e, 0x4b, 0xe7, 0x53, + 0xb0, 0xae, 0x0c, 0xf3, 0x59, 0x3d, 0x0f, 0x20, 0x75, 0x08, 0x69, 0xd6, 0x34, 0xfc, 0x5b, 0xe5, 0x0a, 0xde, 0xda, + 0xe3, 0xdd, 0x60, 0x44, 0xa9, 0x23, 0x7d, 0xd2, 0x86, 0xd0, 0x25, 0x95, 0xfc, 0x47, 0x91, 0xc7, 0x18, 0xb3, 0xf1, + 0x9a, 0xc8, 0x3e, 0x8b, 0xfc, 0x55, 0x01, 0x80, 0x45, 0x80, 0x80, 0x9c, 0xce, 0x1d, 0x49, 0xfc, 0xe7, 0xe4, 0xdb, + 0x3f, 0xa6, 0x4b, 0xfb, 0x50, 0x16, 0x77, 0xa5, 0xa8, 0xaa, 0xa3, 0xd2, 0x76, 0xb6, 0x5c, 0x0f, 0xf4, 0xa1, 0xfd, + 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, 0x58, 0x3f, 0xbf, + 0xdf, 0xbd, 0x8d, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, 0xc3, 0x54, 0xe2, + 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0x7f, 0x54, 0x30, 0xff, 0x75, 0x7b, 0xb0, 0x3e, + 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0x17, 0xc2, 0x22, 0xf9, 0xf5, 0xc9, 0x91, + 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x91, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9e, 0xff, 0xb9, 0x99, 0xff, 0x03, 0x74, 0x86, + 0x2c, 0x5e, 0x70, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0x2f, 0x80, 0x83, 0xf9, 0x05, + 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0x37, 0x16, 0xcf, 0x95, 0x5c, 0x10, 0xfa, + 0xba, 0x0a, 0xb3, 0x71, 0x55, 0x6c, 0x2a, 0x51, 0x6c, 0xea, 0x1e, 0xa9, 0x65, 0xf3, 0x69, 0x6d, 0x2b, 0x64, 0x7f, + 0x12, 0x2d, 0xda, 0x2e, 0x43, 0x35, 0x19, 0x65, 0xe9, 0x7a, 0x0a, 0xa4, 0x7a, 0x01, 0x9c, 0x45, 0xe6, 0x95, 0x2f, + 0xce, 0x1e, 0xb0, 0x45, 0xe3, 0x29, 0x30, 0xa2, 0xd2, 0x1f, 0x79, 0x63, 0x74, 0x7a, 0xa2, 0xdf, 0xcf, 0xa7, 0x14, + 0xf2, 0xf5, 0x13, 0x60, 0x72, 0xd5, 0x72, 0x01, 0xfa, 0x32, 0xd4, 0x41, 0x25, 0x4a, 0xad, 0x18, 0x46, 0x2c, 0xfc, + 0x24, 0x90, 0xbd, 0x99, 0x82, 0x9a, 0x55, 0x94, 0x84, 0x4a, 0x54, 0x4a, 0xb6, 0x26, 0xa8, 0xa5, 0xf7, 0x45, 0x51, + 0xef, 0x2b, 0x70, 0x94, 0x8c, 0xb4, 0x59, 0x4e, 0x99, 0x71, 0x51, 0xe6, 0xa2, 0x1f, 0xec, 0xdf, 0x95, 0xe7, 0x37, + 0x32, 0x9f, 0xe5, 0xbe, 0xa3, 0x73, 0xda, 0x8e, 0x0b, 0x94, 0xb9, 0xe5, 0xb4, 0xd5, 0x92, 0xc7, 0xe4, 0x3d, 0x0b, + 0xb6, 0xfd, 0x97, 0x09, 0xf2, 0x2a, 0xc2, 0x7c, 0x42, 0x95, 0xcd, 0x3f, 0x20, 0xcc, 0x16, 0x07, 0xf6, 0xd8, 0x85, + 0x89, 0x48, 0x6f, 0xc1, 0x92, 0x18, 0x66, 0xa5, 0x08, 0xe3, 0x1d, 0x78, 0xff, 0x6c, 0x2a, 0x31, 0x3a, 0x43, 0x27, + 0xf7, 0xb3, 0x87, 0xb4, 0x4e, 0xce, 0xde, 0xbe, 0x3e, 0xfb, 0xae, 0x37, 0x28, 0x46, 0x69, 0x3c, 0xe8, 0x7d, 0x77, + 0xb6, 0xda, 0x00, 0x44, 0xa6, 0x38, 0x8b, 0xc9, 0x94, 0x26, 0xe2, 0x33, 0x32, 0x0c, 0x9e, 0xd5, 0x89, 0x38, 0xa3, + 0x89, 0xe9, 0xbe, 0x46, 0x69, 0xf2, 0xed, 0x28, 0xcc, 0xe1, 0xe5, 0x52, 0x6c, 0x2a, 0x11, 0x83, 0x9d, 0x52, 0xcd, + 0xb3, 0xbc, 0x7d, 0x16, 0xe7, 0xa3, 0x0e, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, 0x05, 0x84, 0x1e, + 0x00, 0x27, 0x5d, 0xf9, 0xf3, 0x70, 0x10, 0x09, 0x84, 0x5a, 0x30, 0x27, 0xd3, 0x88, 0x6e, 0x48, 0xaf, 0xb0, 0xcf, + 0xc0, 0x2c, 0xa4, 0x34, 0x0f, 0x6e, 0xae, 0x16, 0x2d, 0x77, 0xc5, 0xca, 0x51, 0x58, 0xad, 0x45, 0x54, 0x23, 0xd5, + 0x31, 0x38, 0xef, 0x40, 0x04, 0x80, 0x62, 0x04, 0xcf, 0x78, 0xd4, 0xef, 0x47, 0x2a, 0x28, 0x27, 0xa1, 0x5f, 0x14, + 0xfa, 0xa5, 0x31, 0x28, 0x63, 0xfe, 0x2e, 0xd4, 0xc4, 0x00, 0xf5, 0x96, 0x87, 0x8a, 0x23, 0x00, 0x97, 0x73, 0xc4, + 0x8c, 0xf3, 0x1e, 0x77, 0xd1, 0x38, 0x15, 0xef, 0x84, 0xba, 0x0e, 0x96, 0x0a, 0x75, 0xde, 0xd4, 0x47, 0x7a, 0x4e, + 0x9a, 0x04, 0x0d, 0xe2, 0x06, 0x1e, 0xaf, 0x86, 0x80, 0x6a, 0x25, 0xa4, 0xde, 0x42, 0xa7, 0x54, 0x75, 0x08, 0xac, + 0x01, 0x2e, 0x51, 0xd8, 0x56, 0x98, 0x1c, 0xd1, 0xa6, 0x2c, 0x45, 0x7e, 0xc4, 0x06, 0xed, 0x92, 0x91, 0xa9, 0x83, + 0xcb, 0xe5, 0x72, 0x22, 0xea, 0x5f, 0xf3, 0x2d, 0x80, 0xf3, 0x42, 0x7e, 0x6b, 0x37, 0x5b, 0x26, 0xd9, 0xae, 0x2b, + 0xc3, 0x59, 0x52, 0x8a, 0x6a, 0x5d, 0xe4, 0x55, 0x7a, 0x2f, 0x7e, 0xd6, 0x0f, 0x5d, 0x02, 0x29, 0xf4, 0x23, 0xbd, + 0x6e, 0x37, 0x47, 0xaa, 0x71, 0x74, 0x39, 0xb6, 0xa7, 0xd2, 0x4e, 0xf6, 0xaa, 0xc5, 0x9b, 0x2d, 0x73, 0x25, 0x69, + 0x1c, 0x8b, 0xfc, 0x6d, 0x1e, 0xa7, 0x91, 0x95, 0x1c, 0xfe, 0x1f, 0xde, 0xbe, 0x85, 0xbb, 0x6d, 0x1b, 0x5b, 0xf7, + 0xaf, 0x58, 0xbc, 0xa9, 0x4a, 0x44, 0x90, 0x2c, 0x39, 0x49, 0x67, 0x4a, 0x19, 0xd6, 0x71, 0xf3, 0x68, 0xd3, 0x36, + 0x71, 0x1a, 0xa7, 0x9d, 0xce, 0xe8, 0xea, 0xb8, 0x34, 0x09, 0x5b, 0x6c, 0x68, 0x40, 0x25, 0x29, 0x3f, 0x22, 0xf1, + 0xbf, 0xdf, 0xb5, 0x37, 0x9e, 0xa4, 0x68, 0x27, 0x33, 0xf7, 0xdc, 0xbb, 0xb2, 0x56, 0x2c, 0x82, 0x20, 0xde, 0xd8, + 0xd8, 0xd8, 0x8f, 0x6f, 0xeb, 0x00, 0xd5, 0x2e, 0xf2, 0x95, 0x8b, 0x8d, 0xfc, 0x22, 0x2b, 0x31, 0x60, 0x70, 0xa3, + 0x51, 0xad, 0x50, 0x53, 0x26, 0xf0, 0x85, 0x7c, 0x8f, 0x11, 0xb7, 0x59, 0x99, 0x00, 0xc3, 0x8f, 0x89, 0xfa, 0x92, + 0x9e, 0x42, 0x94, 0x07, 0x15, 0x8f, 0xfb, 0x05, 0x47, 0xc4, 0x6b, 0xab, 0x32, 0x07, 0x26, 0x5b, 0xab, 0x20, 0x11, + 0xec, 0x2e, 0x9b, 0xeb, 0x45, 0xb4, 0x50, 0x77, 0xa1, 0x5e, 0xbc, 0xdd, 0xf6, 0x12, 0x45, 0x07, 0x9c, 0xfc, 0x34, + 0x78, 0x15, 0x67, 0x39, 0x4f, 0xf7, 0x2a, 0xb9, 0xa7, 0x36, 0xd4, 0x9e, 0x72, 0xe6, 0x80, 0x9d, 0xf7, 0x75, 0xb5, + 0xa7, 0xd7, 0xf4, 0x9e, 0x6e, 0xe7, 0x1e, 0x5c, 0x30, 0x70, 0xe7, 0x5e, 0x66, 0xd7, 0x5c, 0xec, 0x81, 0x32, 0xd0, + 0x1a, 0x0f, 0xd4, 0xa2, 0x1a, 0xa9, 0x89, 0xd1, 0x81, 0xab, 0x13, 0x7d, 0x30, 0x07, 0xf4, 0x7b, 0x88, 0x15, 0xde, + 0x7a, 0xbb, 0xd2, 0x07, 0x6d, 0x40, 0x7f, 0x5e, 0x9a, 0x3e, 0xe8, 0x68, 0xf1, 0x2a, 0x24, 0x70, 0x63, 0x48, 0x35, + 0x52, 0xab, 0x91, 0x55, 0xa0, 0x78, 0xc3, 0x5b, 0xbc, 0x3b, 0xd7, 0x92, 0x8d, 0xf7, 0x12, 0x81, 0xbd, 0x32, 0x51, + 0xc5, 0x99, 0x38, 0xf6, 0x52, 0x79, 0xad, 0x9d, 0x64, 0x84, 0xf1, 0x2d, 0x2b, 0xa9, 0xbf, 0x43, 0xcc, 0x2d, 0xd2, + 0x1c, 0x06, 0x2f, 0xc3, 0x8a, 0xcc, 0x78, 0xbf, 0x2f, 0x67, 0x32, 0x2a, 0x67, 0x62, 0xbf, 0x8c, 0x14, 0x42, 0xdb, + 0x7d, 0x22, 0xa0, 0x07, 0x25, 0x40, 0xbe, 0x00, 0xa8, 0x7a, 0x48, 0xf8, 0xf3, 0x90, 0xd4, 0xa7, 0x53, 0xe8, 0x53, + 0x68, 0xeb, 0x15, 0xaf, 0xa0, 0xaa, 0x6e, 0x8c, 0x6c, 0xa3, 0x82, 0x16, 0x8f, 0xe5, 0x59, 0x6d, 0x18, 0x9b, 0x53, + 0xeb, 0x5d, 0x6f, 0x36, 0x98, 0xb2, 0xb9, 0x50, 0xab, 0x30, 0x24, 0xd1, 0x4d, 0xe9, 0x85, 0x0f, 0xb1, 0x58, 0x59, + 0xad, 0xcd, 0x6f, 0x62, 0x7f, 0x64, 0x22, 0xc5, 0xfd, 0x6c, 0x89, 0x73, 0x17, 0x8f, 0xe7, 0x55, 0x5f, 0x6b, 0x69, + 0x91, 0x69, 0xf3, 0x9d, 0xbe, 0x0c, 0x69, 0x2a, 0x6a, 0x48, 0xa3, 0xce, 0x0c, 0xba, 0x6f, 0x97, 0x57, 0x54, 0x23, + 0x4c, 0x80, 0x57, 0x3a, 0x83, 0x6e, 0x34, 0x1e, 0x88, 0xa2, 0x1a, 0x15, 0x6b, 0x21, 0x10, 0x6d, 0x18, 0x72, 0xcc, + 0x2c, 0x21, 0xc9, 0x3e, 0xf1, 0xef, 0x54, 0x70, 0x85, 0x22, 0xbe, 0x31, 0x70, 0xde, 0x95, 0xf5, 0xec, 0xae, 0x23, + 0x3f, 0x27, 0x16, 0x56, 0xfb, 0x0f, 0xcd, 0xa3, 0xd6, 0x38, 0x0b, 0x68, 0x6b, 0x5a, 0xdd, 0x70, 0xb8, 0x47, 0x75, + 0x2c, 0x4a, 0x03, 0x48, 0xec, 0x91, 0xe5, 0xa2, 0x75, 0xcc, 0xa0, 0x01, 0xfd, 0x6d, 0x76, 0xb5, 0xbe, 0x42, 0xd4, + 0xb6, 0x12, 0x59, 0x27, 0xa9, 0xfc, 0x4b, 0xda, 0xa3, 0xae, 0xed, 0xa9, 0xfc, 0x6f, 0xdb, 0x54, 0x39, 0xb4, 0x40, + 0xf2, 0xd8, 0xcd, 0x59, 0xa0, 0x3a, 0x12, 0x44, 0x81, 0xda, 0x7a, 0xc1, 0xd4, 0x3b, 0x65, 0x8a, 0x0e, 0xe4, 0xe7, + 0xc2, 0x9c, 0x61, 0x5f, 0x70, 0xc4, 0x98, 0xa5, 0x12, 0x83, 0xa9, 0x8f, 0x31, 0xaa, 0x69, 0xad, 0x00, 0x5d, 0x3f, + 0xdd, 0xc0, 0x9f, 0xa8, 0xa8, 0xd1, 0x50, 0x6b, 0x24, 0x85, 0xa2, 0x89, 0x0a, 0x3a, 0x96, 0x16, 0x3a, 0x98, 0x42, + 0x27, 0x91, 0xb0, 0x04, 0x34, 0x4c, 0x88, 0x4e, 0x2a, 0xf0, 0xd6, 0x00, 0xce, 0x7c, 0x5c, 0x94, 0xeb, 0x42, 0x1b, + 0xcc, 0xfd, 0x10, 0x5f, 0xf3, 0xd7, 0x2f, 0x9c, 0x51, 0x7d, 0xcb, 0x5a, 0xdf, 0xd3, 0x82, 0xfc, 0x10, 0x72, 0x8a, + 0x0e, 0x4c, 0xec, 0x68, 0x83, 0xc6, 0x18, 0x65, 0xad, 0x43, 0x5d, 0x9c, 0xe8, 0xf8, 0x2b, 0xda, 0x04, 0xef, 0x01, + 0x4f, 0x11, 0x6d, 0x78, 0x28, 0x8c, 0x55, 0x35, 0x3e, 0x95, 0xac, 0xa5, 0x07, 0x2b, 0x78, 0xba, 0x4e, 0x78, 0x08, + 0x7a, 0x24, 0xc2, 0x8e, 0xc2, 0x62, 0x1e, 0x2f, 0xe0, 0x38, 0x29, 0x08, 0xa8, 0x1d, 0xf4, 0x15, 0x7c, 0xbe, 0x40, + 0xf7, 0x57, 0x89, 0x1e, 0x60, 0x68, 0x41, 0xdc, 0x0c, 0x7d, 0x3a, 0xba, 0x8a, 0x57, 0x0d, 0x15, 0x09, 0x9f, 0x17, + 0x60, 0x3b, 0xa4, 0xd4, 0x53, 0xa0, 0x85, 0x4a, 0x94, 0x7e, 0x18, 0xf8, 0x0e, 0x0d, 0x7c, 0xad, 0x75, 0x80, 0x86, + 0x7e, 0xc6, 0x34, 0xb5, 0xce, 0x50, 0xf9, 0xcc, 0xbb, 0x67, 0x46, 0xcb, 0x99, 0x05, 0x63, 0xd0, 0xb7, 0xd1, 0x14, + 0xc5, 0x39, 0xf9, 0x2c, 0x28, 0xe2, 0x34, 0x8b, 0x73, 0xf0, 0xdb, 0x8c, 0x0b, 0xcc, 0x98, 0xc4, 0x15, 0xbf, 0x94, + 0x05, 0x68, 0xbb, 0x73, 0x95, 0x5a, 0xd7, 0x20, 0x20, 0xfb, 0x01, 0xac, 0x5e, 0x1a, 0x3a, 0x2a, 0xe7, 0xdd, 0xa5, + 0x4d, 0x21, 0x62, 0x11, 0x82, 0x4d, 0x33, 0x5d, 0xb2, 0xe3, 0x50, 0x69, 0x73, 0x20, 0xbe, 0x11, 0x1a, 0xf7, 0x4f, + 0xc3, 0xd8, 0x6a, 0x8a, 0xad, 0xdd, 0xdb, 0x76, 0xfb, 0x7b, 0xe9, 0xa5, 0xd3, 0x9c, 0xf4, 0x18, 0xfb, 0xbd, 0x0c, + 0x8b, 0x91, 0xed, 0x08, 0x81, 0x25, 0xe7, 0x7d, 0xea, 0xbf, 0xa2, 0xe5, 0x3c, 0x01, 0xd3, 0x11, 0x1d, 0x21, 0x17, + 0x28, 0x3b, 0x46, 0x71, 0x07, 0x06, 0x57, 0xf4, 0xfb, 0x60, 0x95, 0x61, 0x2e, 0x24, 0x4b, 0x92, 0x32, 0x78, 0x9e, + 0x7a, 0x18, 0xf0, 0x6b, 0xa6, 0xcc, 0x5d, 0x94, 0xf5, 0xe9, 0x92, 0x4c, 0x53, 0x64, 0x20, 0xd6, 0xe1, 0x26, 0x4b, + 0xa3, 0x44, 0x89, 0xc8, 0x96, 0xe8, 0x1f, 0x69, 0x28, 0x96, 0x0e, 0xd7, 0x8b, 0x54, 0x89, 0x50, 0x31, 0x4f, 0xf1, + 0xa4, 0x4e, 0xeb, 0x74, 0x84, 0xf1, 0x26, 0x41, 0x29, 0x57, 0xc3, 0x40, 0x95, 0x54, 0x2f, 0x85, 0x4d, 0xb1, 0xdd, + 0xea, 0x8b, 0x95, 0x98, 0xc7, 0x0b, 0x7c, 0x29, 0x70, 0x14, 0x7f, 0xe2, 0x5e, 0xac, 0x29, 0xb5, 0x3d, 0xa8, 0x1d, + 0x51, 0x42, 0x7f, 0xe2, 0x70, 0x91, 0xf8, 0x4e, 0xea, 0xb8, 0x7f, 0x68, 0x11, 0x72, 0xa6, 0x0e, 0x52, 0xc3, 0x0d, + 0xed, 0x08, 0xff, 0x0d, 0xd7, 0x67, 0x9c, 0xd1, 0x9b, 0x6a, 0x46, 0x8d, 0xdf, 0xeb, 0xe1, 0x19, 0xa3, 0x3e, 0x1b, + 0x38, 0xac, 0x10, 0x85, 0x36, 0xec, 0xa8, 0x54, 0xa2, 0x85, 0xa1, 0x54, 0x7f, 0x09, 0x15, 0x47, 0xdc, 0x99, 0x51, + 0x96, 0x8c, 0x4f, 0xcb, 0x43, 0x31, 0x1d, 0x0c, 0x4a, 0x52, 0x19, 0x0b, 0x3d, 0xb8, 0x1e, 0x78, 0xfe, 0x3d, 0x70, + 0x0b, 0xf1, 0xe0, 0x90, 0xc5, 0x90, 0x1b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8d, 0x4a, 0x15, 0xbc, 0x9a, 0xa8, 0x16, + 0xfc, 0x54, 0x86, 0x01, 0xfa, 0x24, 0x05, 0x60, 0x32, 0x98, 0xf2, 0x5b, 0x90, 0x28, 0x9d, 0xa9, 0x1b, 0xd2, 0xaf, + 0xa2, 0xe0, 0x17, 0xbc, 0xe0, 0x22, 0x71, 0x05, 0x58, 0xde, 0xc1, 0xf6, 0x3a, 0xaa, 0xa8, 0x02, 0xe2, 0x35, 0x3d, + 0x8e, 0xb8, 0xf1, 0xfe, 0x33, 0x3d, 0xb6, 0x40, 0xad, 0xd6, 0xb1, 0xc1, 0x67, 0x8e, 0xc1, 0x05, 0x5d, 0x4b, 0x6c, + 0x0d, 0xd5, 0xb0, 0x22, 0x30, 0x70, 0x01, 0x07, 0x61, 0x89, 0xe2, 0xd8, 0x4a, 0x5e, 0x91, 0x86, 0x94, 0xf6, 0x81, + 0xe1, 0x68, 0x93, 0x1c, 0xdf, 0x66, 0xd9, 0x4d, 0xe0, 0x7c, 0xd1, 0x39, 0x69, 0x26, 0x96, 0x0d, 0xde, 0xe7, 0xcd, + 0xf9, 0x75, 0xff, 0x90, 0x50, 0x15, 0xec, 0x86, 0xb7, 0x83, 0xdd, 0x38, 0xe1, 0xd7, 0x5c, 0x2c, 0x74, 0x7c, 0x16, + 0x73, 0xc9, 0xf2, 0x5b, 0xeb, 0xdd, 0x92, 0xa4, 0x56, 0x40, 0xfb, 0x2c, 0x0b, 0x6a, 0x22, 0x00, 0xdd, 0x0f, 0x7f, + 0x81, 0xd0, 0x19, 0xfe, 0xf6, 0x18, 0x5c, 0x91, 0xc2, 0x7b, 0x87, 0x40, 0x58, 0xd3, 0xcd, 0x9d, 0xda, 0x80, 0x2f, + 0xc6, 0xfd, 0x19, 0x53, 0x4f, 0xbf, 0xcd, 0xe4, 0xae, 0xae, 0xdb, 0x23, 0xcb, 0xf0, 0x11, 0xae, 0x14, 0x00, 0xcb, + 0x84, 0xbf, 0x18, 0x5b, 0x52, 0x7d, 0x02, 0x70, 0x6a, 0x3a, 0xa2, 0x4f, 0x10, 0x18, 0x38, 0x25, 0x5a, 0x8c, 0xae, + 0x95, 0x23, 0x9a, 0x41, 0x5a, 0xd3, 0xad, 0x30, 0xde, 0x7a, 0xd0, 0x42, 0xcf, 0x34, 0x9c, 0xf8, 0x0f, 0x9a, 0x79, + 0x55, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0xd1, 0x1c, 0x21, 0x3e, 0x61, 0x49, 0x34, 0x61, 0xf1, 0x4c, 0xf1, + 0x63, 0x42, 0x37, 0x4d, 0x6d, 0xd3, 0x07, 0xa4, 0xbf, 0xb8, 0x66, 0xfd, 0x94, 0x65, 0xed, 0xdb, 0x43, 0xc5, 0x8b, + 0x69, 0x33, 0xf8, 0x61, 0xa2, 0x8a, 0xf1, 0xbf, 0xa8, 0x7c, 0xa9, 0x15, 0xc0, 0x30, 0x77, 0xd5, 0xd3, 0xef, 0x37, + 0xb3, 0xe5, 0x40, 0xa8, 0xfc, 0xce, 0x20, 0xe9, 0xd3, 0xf1, 0xfc, 0xc0, 0x26, 0x51, 0x5b, 0xe8, 0xf9, 0xe3, 0x52, + 0x37, 0xa1, 0xf2, 0xda, 0xd4, 0x88, 0x56, 0xc8, 0x50, 0xd9, 0x3a, 0x60, 0x7d, 0xff, 0x10, 0xee, 0x2e, 0x6a, 0x1a, + 0x6a, 0xdd, 0x73, 0xd7, 0xa2, 0xe0, 0xc4, 0x1f, 0x60, 0x2c, 0x2e, 0x24, 0xb5, 0x0e, 0xc2, 0xa4, 0x1f, 0x2d, 0x4e, + 0x72, 0xa3, 0xae, 0x4e, 0xce, 0x14, 0xf3, 0x04, 0x2e, 0xaa, 0x65, 0xdb, 0x5f, 0x51, 0xa9, 0x4b, 0xb9, 0xbd, 0xa2, + 0x34, 0x3d, 0xa4, 0xed, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x0b, 0x05, 0x17, 0xd6, 0xc1, 0xba, 0xe3, 0x4e, 0xd9, + 0x13, 0x9e, 0x28, 0xd3, 0xda, 0xe0, 0xae, 0x1b, 0x8c, 0x89, 0xb1, 0xdf, 0x5d, 0xf2, 0xe4, 0x23, 0xb2, 0xe0, 0xdf, + 0x65, 0x02, 0x3c, 0x93, 0xdd, 0x2b, 0x95, 0xff, 0x07, 0xff, 0x6a, 0x6b, 0xdf, 0x59, 0xf3, 0x4f, 0xcf, 0x7a, 0xb8, + 0x73, 0x98, 0xfc, 0x00, 0x9d, 0x01, 0xdd, 0x5c, 0xc9, 0x94, 0x03, 0x32, 0x80, 0xb5, 0x48, 0x46, 0x03, 0x3e, 0xb4, + 0xb2, 0x6c, 0xfb, 0x4e, 0xab, 0x0b, 0xc2, 0xbd, 0x04, 0x6e, 0x7a, 0x7f, 0x6d, 0x66, 0xe6, 0x74, 0xad, 0x44, 0xd3, + 0xa5, 0xb1, 0xb5, 0x2c, 0x55, 0xc0, 0xee, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x70, 0x39, 0xcd, 0x2d, 0x75, 0xdb, 0xb8, + 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0xb5, 0x22, 0xf4, 0x54, 0x89, 0xd0, + 0xa7, 0x69, 0xb3, 0x0f, 0x76, 0x55, 0xad, 0x1b, 0x71, 0x8e, 0x06, 0xa9, 0x66, 0xe4, 0x4f, 0xae, 0x79, 0x71, 0x91, + 0xcb, 0x1b, 0xc0, 0x40, 0x26, 0xb5, 0x51, 0x58, 0x5e, 0x81, 0x3b, 0x3f, 0x3a, 0x8e, 0x33, 0x31, 0xca, 0x31, 0x58, + 0x2b, 0xc2, 0x23, 0xeb, 0xc4, 0x19, 0x80, 0x20, 0xfb, 0x93, 0xa6, 0xe3, 0xb9, 0x16, 0x18, 0xd3, 0x17, 0xb8, 0xab, + 0x9c, 0x1d, 0x6d, 0x72, 0xbb, 0xe8, 0x9b, 0x33, 0xac, 0x3b, 0x52, 0x5a, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, 0x06, + 0x6d, 0x11, 0x4a, 0x3e, 0xe4, 0x4e, 0xda, 0x4f, 0x01, 0x0d, 0xce, 0xb2, 0xf4, 0xd6, 0x5a, 0xe5, 0x6f, 0xb4, 0x10, + 0x27, 0x8a, 0xa9, 0x13, 0xdf, 0x44, 0x89, 0x3e, 0x3f, 0x13, 0xe3, 0x06, 0x02, 0xa9, 0x3f, 0x60, 0x50, 0x8d, 0x22, + 0x4c, 0xe0, 0x3a, 0x10, 0xc5, 0xf6, 0x44, 0x6d, 0x2c, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x41, 0x19, 0xc6, 0xea, 0xe2, + 0x40, 0x1b, 0x2c, 0x7d, 0xdd, 0x5a, 0xe7, 0x86, 0x50, 0x18, 0x27, 0x30, 0xc5, 0x20, 0xa9, 0xb3, 0xce, 0x32, 0x41, + 0x95, 0x1d, 0x93, 0xce, 0xfb, 0x00, 0xdd, 0x5d, 0x8b, 0xa6, 0xf8, 0xba, 0x73, 0x07, 0xdd, 0xc7, 0xf5, 0x6b, 0x2d, + 0x72, 0x83, 0x3f, 0x6f, 0x89, 0xb0, 0x08, 0x9c, 0xb5, 0x26, 0x5f, 0x35, 0xc2, 0x81, 0x29, 0xc9, 0x34, 0xec, 0x25, + 0xca, 0xa6, 0x7b, 0xbb, 0xed, 0xf5, 0xee, 0x15, 0x71, 0xf5, 0x18, 0xab, 0xbc, 0x9b, 0xb9, 0xbd, 0x53, 0xad, 0xc5, + 0xee, 0x4d, 0xdb, 0x4f, 0xb1, 0xa3, 0xd6, 0xda, 0xed, 0x86, 0x13, 0x6a, 0xc8, 0xb7, 0xa2, 0x4a, 0xab, 0xd3, 0x8d, + 0x41, 0x3b, 0xc4, 0xb3, 0x16, 0x19, 0xdc, 0x28, 0x5f, 0x38, 0xa1, 0x93, 0x8a, 0xb3, 0xea, 0xd4, 0x05, 0x9b, 0x2b, + 0x5e, 0x2d, 0x65, 0x1a, 0x09, 0x8a, 0x36, 0xe7, 0x51, 0x49, 0x13, 0xb9, 0x16, 0x55, 0x24, 0x6b, 0xd4, 0x8b, 0x5a, + 0x8d, 0x01, 0x02, 0x32, 0x9d, 0x35, 0x3d, 0xa8, 0x82, 0xd9, 0x50, 0x46, 0x72, 0xfa, 0x1e, 0x2c, 0xed, 0x91, 0x63, + 0xad, 0xef, 0xab, 0xb3, 0xc5, 0xb7, 0x7a, 0x42, 0x30, 0x85, 0xd9, 0x03, 0x61, 0xe0, 0x9a, 0xc6, 0x90, 0xd3, 0x2e, + 0x71, 0x59, 0xd3, 0x2d, 0xe1, 0x1e, 0x6e, 0x57, 0xb2, 0x23, 0x37, 0x4f, 0x9a, 0x9b, 0x2b, 0xd8, 0x51, 0x31, 0x1f, + 0x83, 0xf6, 0x4b, 0xaa, 0x6b, 0x97, 0xe6, 0xd6, 0xe3, 0x41, 0x40, 0x83, 0x41, 0x61, 0xf8, 0xd7, 0x89, 0xf1, 0xf0, + 0xa4, 0x01, 0x41, 0x52, 0x2e, 0xc2, 0xb1, 0x6f, 0x44, 0x3f, 0x99, 0xca, 0x43, 0x8e, 0x16, 0xef, 0xd0, 0xea, 0x04, + 0xa2, 0x78, 0x89, 0x50, 0x12, 0xa3, 0x2a, 0x34, 0x22, 0x28, 0x4f, 0xcb, 0x5f, 0xaa, 0xea, 0x10, 0x50, 0x48, 0xfb, + 0x8a, 0x42, 0xd9, 0x26, 0x31, 0x34, 0xc3, 0x2f, 0xe7, 0x93, 0x85, 0x9e, 0x81, 0x81, 0x9c, 0x1f, 0x2c, 0xf4, 0x2c, + 0x0c, 0xe4, 0xfc, 0xc9, 0xa2, 0x76, 0xeb, 0x40, 0x13, 0x10, 0xcf, 0x85, 0xa3, 0x93, 0xd2, 0xaa, 0x6c, 0x01, 0xdd, + 0x3c, 0x44, 0xd0, 0x7f, 0xb2, 0x87, 0xa0, 0x93, 0x0b, 0xed, 0xc8, 0x0d, 0x68, 0x3b, 0x0e, 0x81, 0xbd, 0x62, 0x52, + 0x61, 0x02, 0x10, 0x1d, 0xb2, 0x31, 0x18, 0x62, 0xab, 0x0f, 0x0e, 0xd9, 0x78, 0xea, 0x93, 0x20, 0x60, 0x74, 0x7f, + 0x30, 0x90, 0xe0, 0xb7, 0x78, 0x95, 0x3e, 0xda, 0x08, 0x74, 0xd3, 0x77, 0x77, 0x43, 0xef, 0xe2, 0x0a, 0x4e, 0xd5, + 0xee, 0x9e, 0x84, 0x6e, 0x32, 0xed, 0x00, 0xbd, 0x86, 0xb8, 0x21, 0xbf, 0x32, 0x1a, 0x8d, 0x6c, 0x4a, 0x48, 0x88, + 0xe1, 0x1c, 0x9a, 0x39, 0x2d, 0x97, 0xaf, 0x6e, 0x3d, 0x1b, 0x90, 0x61, 0xa6, 0xb7, 0x4c, 0xd6, 0x0f, 0x50, 0x56, + 0x3d, 0x86, 0x76, 0xe8, 0x3d, 0x72, 0xfc, 0xf0, 0xe0, 0x9b, 0x8c, 0x9f, 0x39, 0x5c, 0x7b, 0x38, 0x17, 0xbe, 0xcb, + 0x9a, 0x91, 0x39, 0x74, 0x9e, 0x7d, 0x1c, 0xef, 0x61, 0x9c, 0x7c, 0x9e, 0x85, 0xf2, 0xc6, 0x6b, 0xfa, 0x1f, 0x95, + 0xde, 0xec, 0x70, 0xc8, 0xe9, 0x0a, 0x56, 0xdc, 0xac, 0x0a, 0x0d, 0x3f, 0x8b, 0xbc, 0x71, 0xc4, 0x6b, 0x12, 0x55, + 0xdd, 0xe7, 0xbd, 0x0d, 0x53, 0xda, 0x31, 0x0e, 0x00, 0x4e, 0xd4, 0xaa, 0x61, 0x57, 0x1a, 0xd7, 0xea, 0x20, 0x86, + 0xa1, 0x84, 0xad, 0x12, 0x47, 0x42, 0xf9, 0x1b, 0x80, 0xb0, 0x18, 0x8a, 0xe3, 0xad, 0x61, 0x7d, 0x80, 0xfd, 0xd0, + 0x05, 0x9a, 0xe6, 0x94, 0x6a, 0x06, 0x00, 0x49, 0xc0, 0x1f, 0x3d, 0xdd, 0x34, 0x54, 0xb6, 0x79, 0x1e, 0x5a, 0x56, + 0x57, 0xf0, 0x40, 0x4f, 0x5d, 0xc9, 0xc0, 0xb8, 0xaa, 0x63, 0x6f, 0x73, 0x7f, 0x7b, 0xb4, 0x8a, 0x7c, 0x67, 0x93, + 0xda, 0x66, 0x55, 0x68, 0xec, 0xe3, 0x09, 0x3d, 0x9d, 0x00, 0xad, 0xd7, 0x96, 0x8a, 0xf6, 0xfb, 0x28, 0x46, 0x8d, + 0x0b, 0x05, 0x56, 0x61, 0x22, 0xc1, 0x21, 0xc2, 0x08, 0xa1, 0xdf, 0x97, 0xe1, 0xc6, 0x17, 0x64, 0x10, 0x0d, 0xd7, + 0xa2, 0xe3, 0x0f, 0x39, 0x5e, 0xb4, 0x2d, 0x55, 0x35, 0x27, 0x4d, 0x5b, 0x02, 0x6f, 0xc2, 0x01, 0xb6, 0xf3, 0x4f, + 0x1b, 0x22, 0x57, 0xe1, 0xa2, 0x84, 0xef, 0x88, 0x6b, 0x41, 0x74, 0x53, 0x9b, 0x7a, 0x1b, 0x76, 0x88, 0x8e, 0xa6, + 0x78, 0x74, 0xc8, 0x3d, 0x77, 0xcf, 0x6d, 0x11, 0xdf, 0x7c, 0x86, 0xdc, 0x35, 0x9d, 0xbd, 0x14, 0x61, 0x50, 0xb7, + 0x6c, 0xa0, 0x58, 0x87, 0x4e, 0x50, 0x80, 0x51, 0x5b, 0x3e, 0x01, 0x1d, 0x1b, 0x0c, 0x2a, 0x82, 0x4f, 0x0a, 0xdb, + 0xa6, 0x41, 0xfe, 0x88, 0x77, 0x43, 0x87, 0xd7, 0x96, 0x3c, 0x10, 0xaf, 0xb0, 0xcf, 0x94, 0x70, 0xff, 0x82, 0x82, + 0xee, 0x28, 0x2f, 0x57, 0x85, 0xab, 0xd2, 0x00, 0x54, 0xd9, 0xf1, 0x5c, 0x6b, 0x4a, 0x5a, 0xc0, 0x4a, 0x49, 0xdd, + 0xf9, 0x4d, 0x44, 0xdc, 0x92, 0xa9, 0x98, 0xad, 0xba, 0x51, 0xe5, 0xa1, 0x44, 0x91, 0x8e, 0x3d, 0xdb, 0x39, 0x58, + 0x03, 0xe0, 0x29, 0x6c, 0x2f, 0xce, 0xb0, 0xa0, 0x8c, 0xcb, 0x96, 0xb9, 0x04, 0x8a, 0xfa, 0x61, 0x9c, 0x97, 0x1d, + 0x5f, 0xee, 0x8e, 0xb6, 0xf7, 0xd0, 0x1b, 0xb1, 0x31, 0x5e, 0x5f, 0x46, 0x4d, 0xbf, 0x78, 0x86, 0x2b, 0x4b, 0x41, + 0x1e, 0x68, 0xaa, 0x47, 0x18, 0x1d, 0x02, 0xd3, 0x94, 0x1f, 0xb1, 0xf1, 0x74, 0x38, 0x34, 0x64, 0xd0, 0x6b, 0x26, + 0xc6, 0xff, 0xfa, 0x02, 0x5a, 0x67, 0x26, 0xae, 0xf1, 0x69, 0xfb, 0x0a, 0x5a, 0xdd, 0xa2, 0x4c, 0xee, 0x0c, 0x0c, + 0x1f, 0x68, 0xc9, 0x14, 0x4c, 0x15, 0xde, 0x10, 0xa9, 0x64, 0x9f, 0x96, 0xd6, 0x61, 0xdf, 0x2e, 0x14, 0x5a, 0x68, + 0xe2, 0x57, 0x19, 0xe2, 0xa7, 0xae, 0x33, 0xff, 0x36, 0xed, 0x53, 0x83, 0x58, 0x58, 0x12, 0xa3, 0x10, 0xbf, 0x38, + 0x55, 0xb6, 0x13, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x55, 0xec, 0x49, 0xa1, 0xf1, 0xd4, 0x70, 0xdf, + 0x0b, 0x1d, 0xb3, 0x0e, 0xb3, 0xb8, 0xcd, 0x1a, 0x49, 0x8d, 0x71, 0x2a, 0x4c, 0x70, 0x4a, 0xb9, 0x8a, 0x04, 0x46, + 0xc7, 0xb3, 0x85, 0x41, 0x54, 0x49, 0x4c, 0x32, 0xb6, 0x16, 0xc2, 0xc4, 0xae, 0x73, 0x85, 0x69, 0xea, 0x22, 0xf5, + 0x9b, 0x81, 0xc9, 0x82, 0x86, 0xfc, 0x1e, 0x8d, 0xd6, 0x54, 0x4d, 0x01, 0x86, 0x71, 0x94, 0x6a, 0xfc, 0x5b, 0x84, + 0xda, 0x0c, 0x03, 0x00, 0xdb, 0xbc, 0x93, 0x99, 0xa8, 0x5e, 0x0b, 0x84, 0x40, 0x73, 0xf6, 0x53, 0x45, 0xb5, 0x33, + 0x0b, 0x46, 0xd1, 0x6e, 0xaf, 0x7c, 0x3e, 0x70, 0x42, 0x79, 0xac, 0x2e, 0x50, 0xaf, 0x64, 0xf1, 0x46, 0xa6, 0xbc, + 0x15, 0x17, 0x73, 0x4f, 0xb2, 0x0f, 0xf9, 0x08, 0xce, 0x2b, 0x74, 0x2a, 0x37, 0xdb, 0x44, 0x99, 0x25, 0x49, 0xc6, + 0x02, 0x63, 0xf3, 0x12, 0xcc, 0xa4, 0x66, 0xc6, 0xf0, 0x6b, 0x08, 0x2e, 0xb6, 0x73, 0x12, 0x6e, 0xee, 0xe7, 0x81, + 0x21, 0x34, 0xb9, 0x68, 0x89, 0x86, 0xad, 0x1d, 0xaf, 0x27, 0xd7, 0x84, 0xfb, 0xb0, 0x11, 0x6b, 0x32, 0xc6, 0xb8, + 0x36, 0x37, 0xb2, 0x7e, 0xb4, 0xc0, 0x83, 0x31, 0x65, 0xfd, 0x09, 0x64, 0x5a, 0x49, 0x59, 0xe7, 0x0b, 0x23, 0x66, + 0x52, 0x89, 0xde, 0xed, 0x1b, 0x9f, 0xd5, 0x5d, 0x44, 0xfd, 0xd6, 0x7e, 0x4f, 0xea, 0xe1, 0xce, 0x7f, 0x50, 0x58, + 0x83, 0xca, 0x88, 0xcb, 0x88, 0xf2, 0xcc, 0x81, 0x6e, 0x9a, 0x14, 0x71, 0x7a, 0xb6, 0x8a, 0x8b, 0x92, 0xa7, 0x50, + 0xa9, 0xa6, 0x6e, 0x51, 0x6f, 0x02, 0xf6, 0x86, 0x48, 0x92, 0xac, 0xa5, 0xb1, 0x15, 0xbb, 0x34, 0x48, 0xcf, 0xbd, + 0x61, 0x96, 0x5e, 0x55, 0x68, 0x48, 0x4b, 0xbd, 0xb3, 0x50, 0xc9, 0xfc, 0x15, 0xff, 0x19, 0xd4, 0x0a, 0x74, 0xb4, + 0x49, 0x31, 0x9e, 0x03, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x09, 0x4a, 0xbd, 0x23, 0x76, 0xfc, 0xdc, + 0xe4, 0xe1, 0x5d, 0xc8, 0x39, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0x48, 0x8c, 0xd4, 0x0c, 0xa0, 0xe9, 0xa0, + 0xcc, 0x79, 0x2c, 0x82, 0x59, 0xcf, 0x24, 0x46, 0x3d, 0xae, 0x7f, 0x81, 0x86, 0xda, 0x6f, 0x56, 0x96, 0x67, 0xd5, + 0xdd, 0x97, 0x70, 0x60, 0x53, 0x5b, 0x41, 0x8f, 0xd7, 0x95, 0xbc, 0xbc, 0x54, 0xdd, 0xf6, 0x0b, 0x31, 0x72, 0xba, + 0xc6, 0xb5, 0x74, 0x5e, 0x2d, 0x58, 0xaf, 0x3b, 0xdd, 0x2c, 0xee, 0x66, 0x19, 0x0d, 0x84, 0xb5, 0x9d, 0x4f, 0x34, + 0x7f, 0xd6, 0x6c, 0xbb, 0x8f, 0xb7, 0x20, 0x66, 0x01, 0x00, 0xa4, 0x07, 0x51, 0xb0, 0xcc, 0x52, 0x1e, 0x50, 0x79, + 0x1f, 0x47, 0x59, 0x28, 0xbd, 0x9c, 0x65, 0xfc, 0xb4, 0x69, 0xac, 0x75, 0x56, 0x28, 0x43, 0x6b, 0xa3, 0x3b, 0x5d, + 0x65, 0x88, 0xed, 0x27, 0x71, 0xb6, 0x00, 0xf7, 0xc7, 0x0c, 0x85, 0x86, 0xce, 0x32, 0xd2, 0x44, 0xc3, 0x77, 0xdd, + 0x33, 0xc8, 0x28, 0x4e, 0xd6, 0x79, 0x25, 0xdd, 0xe8, 0xb3, 0x36, 0x12, 0xe6, 0x1e, 0xa2, 0x5f, 0xc5, 0xe0, 0x51, + 0xee, 0xf3, 0xda, 0xe8, 0x64, 0x5a, 0x46, 0xda, 0x9d, 0x9f, 0xd4, 0xcb, 0x2c, 0xd5, 0x3a, 0x6c, 0x9f, 0x61, 0x6f, + 0x8d, 0x49, 0x6f, 0x42, 0x6a, 0x18, 0x89, 0xcf, 0x67, 0xd4, 0x08, 0x01, 0x6d, 0x39, 0xfe, 0x0e, 0x9f, 0x61, 0x68, + 0x0a, 0x2c, 0x55, 0xdc, 0xc2, 0x6e, 0xf8, 0x9a, 0x4f, 0x56, 0x2d, 0x00, 0x11, 0xac, 0x7c, 0xbd, 0x8b, 0x57, 0x42, + 0x7d, 0xa6, 0xcd, 0x00, 0x90, 0x05, 0xa5, 0xdc, 0xf1, 0x53, 0x2a, 0x1d, 0x2c, 0x51, 0xb4, 0xbd, 0x9c, 0xbe, 0xd1, + 0xb1, 0xf1, 0x43, 0x7a, 0x2e, 0x60, 0xbb, 0x90, 0xdf, 0xba, 0x57, 0x2f, 0x51, 0x91, 0xda, 0x36, 0xeb, 0x01, 0xbe, + 0xdc, 0xa0, 0x49, 0x18, 0x41, 0x99, 0x32, 0x05, 0x30, 0xb8, 0xa9, 0x46, 0xc1, 0xa4, 0xd5, 0x48, 0xd8, 0x52, 0x4f, + 0xb2, 0xdc, 0xf4, 0xc1, 0xa9, 0xee, 0x11, 0xf4, 0x68, 0x87, 0x93, 0x96, 0xfd, 0x5a, 0xc1, 0xd1, 0xc9, 0xd5, 0x10, + 0x35, 0xf3, 0x5e, 0xdb, 0x91, 0x21, 0xe5, 0x32, 0x0c, 0x04, 0x53, 0x8e, 0x79, 0x7a, 0x6c, 0x3d, 0x23, 0xa2, 0x07, + 0xce, 0x3e, 0xd3, 0xad, 0xba, 0x92, 0x80, 0xe8, 0xf8, 0xcd, 0xd3, 0xd7, 0x57, 0xf1, 0xa5, 0x41, 0x51, 0x6a, 0x58, + 0xc4, 0x28, 0xd3, 0xbe, 0x4a, 0xc2, 0xe0, 0xfd, 0xfa, 0xfe, 0x67, 0x95, 0xa5, 0xf6, 0x7b, 0xb0, 0xb1, 0xa2, 0xaa, + 0x5f, 0x4b, 0x5e, 0x34, 0x05, 0x58, 0xf7, 0x59, 0xa2, 0x40, 0xee, 0xf7, 0x36, 0xcd, 0x7c, 0x13, 0x35, 0x6e, 0x36, + 0xac, 0x37, 0xae, 0xdb, 0xa5, 0xb6, 0x64, 0x47, 0x56, 0x22, 0x67, 0x16, 0x83, 0x19, 0x3f, 0x2a, 0x0c, 0x4a, 0xc3, + 0x06, 0x55, 0xa9, 0xf8, 0xbd, 0x11, 0xc1, 0xa9, 0x63, 0x55, 0x61, 0x4c, 0x03, 0x66, 0x5b, 0x51, 0x6b, 0x50, 0x07, + 0xa5, 0xb4, 0x35, 0x51, 0xd8, 0x7e, 0x67, 0x05, 0x35, 0xbf, 0xff, 0x69, 0x0c, 0xf9, 0x9a, 0x52, 0x50, 0x49, 0xc0, + 0xce, 0xa0, 0xd1, 0x53, 0x25, 0x0c, 0xa4, 0x20, 0x78, 0x02, 0x94, 0x2f, 0xa2, 0xc6, 0x6a, 0xb7, 0xaf, 0x4e, 0x8d, + 0xd1, 0x16, 0x10, 0x5a, 0x48, 0x8f, 0x2e, 0xfb, 0xb8, 0x8d, 0x75, 0x20, 0xf1, 0xe0, 0x04, 0xdb, 0xb9, 0xba, 0x46, + 0x23, 0xa1, 0xf9, 0x43, 0xa3, 0x01, 0xaf, 0x69, 0x05, 0x0a, 0xf5, 0x1c, 0x47, 0x43, 0x67, 0x87, 0x14, 0x44, 0x6c, + 0xd0, 0xc2, 0xbe, 0x7b, 0x3e, 0x34, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x4d, 0xa5, 0xfb, 0xdc, 0x2d, 0x21, 0x6b, 0xd5, + 0xa1, 0xac, 0x3c, 0xc0, 0xf1, 0x42, 0xc9, 0xfc, 0x1d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x63, 0xc4, 0x02, 0x96, 0x04, + 0xed, 0xf5, 0x40, 0xfd, 0x32, 0x08, 0x15, 0xce, 0xf4, 0x44, 0xe2, 0x53, 0xca, 0xd5, 0xa7, 0x05, 0xa9, 0xa7, 0x05, + 0x73, 0xa0, 0x97, 0xbe, 0x95, 0x5f, 0xd9, 0xf8, 0x68, 0x77, 0xef, 0x9a, 0x0b, 0xeb, 0x18, 0x82, 0x61, 0x0b, 0xbf, + 0x39, 0x35, 0x05, 0x60, 0xc3, 0x63, 0x5d, 0x96, 0x6f, 0xd4, 0x44, 0x66, 0x71, 0x48, 0x22, 0x90, 0x6c, 0x37, 0x37, + 0xb7, 0x11, 0x6c, 0x7b, 0x0b, 0xb5, 0xa1, 0xfe, 0xf2, 0xb6, 0xfb, 0x3d, 0xc3, 0xcb, 0x3d, 0xb9, 0x77, 0xd3, 0x86, + 0xf2, 0x87, 0xfb, 0x57, 0xc9, 0xff, 0x55, 0x25, 0xf7, 0x5b, 0x65, 0xd6, 0x6d, 0xf1, 0x7e, 0xd7, 0x71, 0xcb, 0x31, + 0x1a, 0x04, 0xd6, 0x14, 0x18, 0x48, 0x4f, 0x1a, 0xd3, 0x44, 0x87, 0x54, 0x66, 0xcc, 0xe0, 0xd1, 0x05, 0x68, 0x0e, + 0xd3, 0x79, 0x1e, 0x03, 0x70, 0x80, 0x7f, 0xe4, 0x11, 0xea, 0x9f, 0xce, 0xf3, 0xe0, 0x2c, 0x18, 0x94, 0x83, 0x40, + 0x7f, 0xe2, 0x9a, 0x13, 0x2c, 0x40, 0xe7, 0x16, 0x33, 0x08, 0x36, 0x69, 0xcd, 0x1c, 0xe2, 0xc3, 0x64, 0x3a, 0x18, + 0xc4, 0x64, 0x03, 0x20, 0x7d, 0xf1, 0xc2, 0x3a, 0x07, 0x15, 0x7a, 0x41, 0xb6, 0xea, 0x2e, 0x9a, 0x15, 0x7b, 0xd5, + 0x4e, 0xf3, 0x7e, 0x3f, 0x9f, 0x97, 0x83, 0xa0, 0x51, 0x61, 0x61, 0xbc, 0xff, 0x68, 0xf3, 0x4b, 0xa3, 0x93, 0x26, + 0x18, 0xa6, 0xf6, 0x18, 0xd5, 0x2b, 0x9e, 0x66, 0xb4, 0x71, 0x3b, 0x56, 0xca, 0x17, 0x10, 0xc5, 0x03, 0x43, 0xd6, + 0xca, 0xbb, 0x73, 0xf0, 0xba, 0xdc, 0x78, 0x73, 0x44, 0x01, 0x76, 0x53, 0x18, 0x27, 0x35, 0x17, 0x5d, 0xd4, 0xc4, + 0x33, 0xd8, 0xe9, 0xea, 0xad, 0x44, 0xab, 0xf1, 0x5e, 0xbc, 0x6b, 0x36, 0xfe, 0x56, 0xee, 0xe9, 0x32, 0xf7, 0x2e, + 0x00, 0x71, 0x76, 0x2f, 0xae, 0xf6, 0xb0, 0xd4, 0xbd, 0x60, 0x60, 0x91, 0x43, 0xda, 0xd5, 0xea, 0xa1, 0x88, 0xd4, + 0x79, 0x0c, 0x06, 0x4c, 0xa6, 0x21, 0x35, 0x99, 0xf6, 0x0a, 0x05, 0x69, 0x63, 0xad, 0x05, 0xb4, 0xe1, 0xb0, 0xd8, + 0xb1, 0x1b, 0x76, 0xa7, 0x5b, 0x87, 0x42, 0x09, 0xa3, 0x57, 0xd7, 0xcd, 0x43, 0xad, 0xe1, 0x89, 0xa0, 0x07, 0xd5, + 0x68, 0x3f, 0x3d, 0x94, 0x27, 0xed, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0x52, 0xe0, 0x45, 0x7b, 0x07, 0x79, 0xce, + 0x7c, 0xaa, 0x7c, 0x10, 0x1b, 0x6e, 0x19, 0x3e, 0xb4, 0x8f, 0x6f, 0x05, 0x32, 0xa9, 0x3b, 0x9a, 0xda, 0xda, 0x1d, + 0x8d, 0x63, 0x02, 0xfd, 0xa6, 0x1c, 0xa5, 0x4c, 0x4c, 0x2d, 0x4b, 0x76, 0xd4, 0xcb, 0x95, 0x37, 0x54, 0xca, 0x8e, + 0x96, 0x6d, 0xce, 0x2f, 0x6d, 0x24, 0xf4, 0xfb, 0xda, 0x1d, 0x08, 0xdf, 0xa8, 0xf5, 0x86, 0xbc, 0x6c, 0x88, 0x58, + 0x0e, 0x31, 0x03, 0xc7, 0x0b, 0xa9, 0x5c, 0xbb, 0x8b, 0xa6, 0xaa, 0x6e, 0x67, 0x2b, 0x17, 0xb4, 0xc4, 0x5b, 0x29, + 0xb0, 0x8a, 0xd4, 0xe9, 0xf5, 0x54, 0xe2, 0x7d, 0x1f, 0xc5, 0xf6, 0x23, 0x60, 0x1b, 0x1b, 0x47, 0x63, 0xe3, 0x16, + 0xb1, 0xc1, 0x57, 0x51, 0x45, 0x0b, 0x0e, 0x10, 0xdc, 0x6d, 0x49, 0x2d, 0xcd, 0x1c, 0xe2, 0xbe, 0xe2, 0x01, 0xda, + 0x77, 0x71, 0xc4, 0xa9, 0x00, 0xdb, 0xba, 0xd6, 0x39, 0xab, 0xe5, 0x80, 0xcd, 0x44, 0xcf, 0x3f, 0xad, 0x1a, 0x89, + 0x18, 0x56, 0xd9, 0x48, 0x59, 0xa1, 0x3d, 0x28, 0x5d, 0xc2, 0xc5, 0x17, 0xe0, 0x65, 0xfb, 0x7e, 0x65, 0xf7, 0xd9, + 0x12, 0xfb, 0x87, 0x79, 0xd5, 0x04, 0x8f, 0xbc, 0xc6, 0xdb, 0x7b, 0x98, 0xf8, 0x52, 0x29, 0x84, 0x57, 0x29, 0x0d, + 0x25, 0x00, 0x83, 0x24, 0xa8, 0xe1, 0x4a, 0xdb, 0x66, 0x90, 0xca, 0x18, 0x76, 0xb7, 0x7a, 0xab, 0xff, 0xd3, 0x2a, + 0x5c, 0x54, 0xb2, 0x18, 0x93, 0x40, 0xe7, 0x54, 0xcb, 0x4d, 0x4c, 0xc1, 0xb3, 0x5d, 0x72, 0x04, 0x0a, 0x3b, 0x01, + 0xdc, 0x50, 0xc2, 0x7e, 0xc5, 0xdb, 0x50, 0xce, 0x5e, 0x59, 0xc9, 0x93, 0xdb, 0x97, 0x54, 0xd0, 0x84, 0x4c, 0x85, + 0xdd, 0xbf, 0xad, 0x0d, 0xfb, 0x22, 0x94, 0x23, 0x29, 0x70, 0x71, 0xd0, 0x39, 0x80, 0xfd, 0x41, 0x2e, 0x63, 0xf3, + 0x99, 0xf4, 0xfb, 0xea, 0xfd, 0xf3, 0x3c, 0x4b, 0x3e, 0xee, 0xbc, 0x37, 0x3c, 0xcd, 0x92, 0x01, 0x95, 0x88, 0xa9, + 0x75, 0x55, 0x0c, 0x97, 0xda, 0xc5, 0xb8, 0x41, 0x32, 0xe2, 0x7b, 0xa9, 0x43, 0x8c, 0x18, 0x5f, 0x64, 0x87, 0xa4, + 0xe4, 0x74, 0x59, 0x77, 0xf6, 0x5c, 0x8b, 0x66, 0xd0, 0x18, 0x6e, 0xc7, 0x7b, 0x49, 0xaf, 0x00, 0x15, 0x15, 0xba, + 0x67, 0x81, 0x6b, 0x78, 0x73, 0x49, 0x34, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xb8, 0x57, 0x26, 0x24, 0xd5, 0xc6, 0x01, + 0x16, 0xb1, 0xae, 0x3f, 0x86, 0x12, 0x80, 0x5a, 0x0d, 0xd2, 0x2b, 0x7d, 0x45, 0xa8, 0x4a, 0x42, 0x30, 0x3a, 0x91, + 0xf0, 0x32, 0xa0, 0x71, 0x66, 0x12, 0x2d, 0x6c, 0x70, 0x40, 0x5f, 0x54, 0x26, 0xd1, 0xd8, 0x90, 0x07, 0xb4, 0xb2, + 0x69, 0x00, 0x83, 0x0f, 0x92, 0x24, 0xfa, 0x7a, 0x69, 0x92, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x4b, 0xe9, 0xf9, + 0x58, 0xfe, 0xcb, 0x3b, 0x94, 0x7e, 0x08, 0x25, 0xc8, 0x14, 0x75, 0xc5, 0x34, 0x63, 0x47, 0x59, 0xb7, 0x31, 0x89, + 0xe7, 0x69, 0x77, 0x5b, 0x28, 0x97, 0x2e, 0xf0, 0x2b, 0xcb, 0x10, 0xc7, 0xfa, 0x79, 0xbc, 0x62, 0xc7, 0x21, 0xd7, + 0x78, 0xe9, 0xcf, 0xe3, 0x15, 0xce, 0x10, 0xad, 0x5a, 0x09, 0x44, 0xf9, 0xaf, 0xda, 0xc0, 0x21, 0xee, 0x13, 0x0c, + 0x72, 0x51, 0x79, 0x0f, 0x04, 0xf2, 0xb6, 0x82, 0x88, 0x34, 0xb3, 0xeb, 0x30, 0x22, 0xd5, 0x4e, 0x92, 0xf9, 0xf2, + 0x47, 0x99, 0x09, 0xef, 0x1b, 0x78, 0x6c, 0x36, 0xcb, 0xa6, 0x98, 0x2f, 0x54, 0x30, 0x07, 0xf7, 0x89, 0x8a, 0x4b, + 0x51, 0xf9, 0x4f, 0xd8, 0x05, 0x2f, 0xc6, 0x83, 0xd7, 0x6b, 0x04, 0xd8, 0xaf, 0xfc, 0x27, 0x6f, 0xcc, 0xde, 0x5a, + 0x37, 0xbe, 0xcc, 0x44, 0x7c, 0xe0, 0xa3, 0x5b, 0xca, 0x47, 0x77, 0x5e, 0xa6, 0x3f, 0x1b, 0x50, 0x22, 0xa3, 0xb2, + 0xe2, 0xab, 0x15, 0x4f, 0x67, 0xb7, 0x49, 0x94, 0x8d, 0x2a, 0x2e, 0x60, 0x7a, 0xc1, 0xf1, 0x2e, 0x59, 0x9f, 0x67, + 0xc9, 0x6b, 0x88, 0x3d, 0xb0, 0x92, 0x0a, 0x8b, 0x1f, 0x96, 0x99, 0x5a, 0xcc, 0x42, 0x56, 0x52, 0xf0, 0x60, 0x76, + 0x9d, 0x44, 0x6f, 0x97, 0x1e, 0x92, 0x9a, 0x99, 0xb2, 0x4d, 0xed, 0x08, 0xb5, 0xf1, 0x75, 0xa4, 0x1b, 0x6d, 0x01, + 0x00, 0xf7, 0x6c, 0x91, 0x46, 0x92, 0x89, 0xe1, 0xa4, 0x66, 0xdc, 0xa4, 0x17, 0x98, 0x1a, 0xd7, 0xac, 0xa2, 0x89, + 0xb3, 0x90, 0x01, 0xbd, 0x3f, 0xe0, 0xe5, 0xe0, 0x73, 0x06, 0xf7, 0x1f, 0xb4, 0x06, 0x2e, 0x0f, 0x8b, 0x7e, 0x5f, + 0x1e, 0x16, 0xdb, 0x6d, 0x79, 0x14, 0xf7, 0xfb, 0xf2, 0x28, 0x36, 0xfc, 0x83, 0x52, 0x6c, 0x1b, 0x73, 0x83, 0x84, + 0xe6, 0x12, 0xa2, 0x16, 0x8d, 0xe0, 0x0f, 0xcd, 0x72, 0x2e, 0xa2, 0xfc, 0x30, 0xe9, 0xf7, 0x7b, 0xcb, 0x99, 0x18, + 0xe4, 0xc3, 0x24, 0xca, 0x87, 0x89, 0xe7, 0x84, 0xf8, 0x9b, 0xe7, 0x84, 0xa8, 0x68, 0xe0, 0x0a, 0xce, 0x0c, 0x40, + 0x14, 0xf0, 0xe9, 0x1f, 0xd5, 0xb5, 0x14, 0xba, 0x96, 0x58, 0xd5, 0x92, 0xe8, 0x0a, 0x6a, 0x76, 0x5d, 0x84, 0x25, + 0x96, 0x42, 0x97, 0xec, 0xcf, 0x25, 0xf0, 0x44, 0x39, 0xaf, 0x36, 0xc0, 0xc0, 0x46, 0x78, 0xe7, 0x30, 0xe1, 0x24, + 0xd6, 0x35, 0xa0, 0x9d, 0x6e, 0x6a, 0x7a, 0x41, 0x57, 0xf4, 0x12, 0xf9, 0xd9, 0x0b, 0x30, 0x58, 0x3a, 0x64, 0xf9, + 0x74, 0x30, 0xb8, 0x20, 0x2b, 0x56, 0xce, 0xc3, 0x78, 0x10, 0xae, 0x67, 0xf9, 0xf0, 0x22, 0xba, 0x20, 0xe4, 0xab, + 0x62, 0x41, 0x7b, 0xab, 0x51, 0xf9, 0x31, 0x83, 0xe0, 0x7e, 0xe9, 0x2c, 0xcc, 0x4c, 0x9c, 0x8f, 0xd5, 0xe8, 0x96, + 0xae, 0x20, 0x7e, 0x0d, 0xdc, 0x48, 0x48, 0x04, 0x1d, 0xb9, 0xa4, 0x2b, 0xba, 0xa6, 0xd2, 0xcc, 0x30, 0x86, 0xe8, + 0xb6, 0xc7, 0x49, 0x02, 0x8e, 0xc9, 0xae, 0xf8, 0x68, 0xac, 0x0a, 0xef, 0xfa, 0x8e, 0xd0, 0x5e, 0x2f, 0x71, 0x83, + 0xf4, 0x5d, 0x7b, 0x90, 0x80, 0x11, 0x19, 0xa9, 0x81, 0x32, 0x23, 0x23, 0xa9, 0x99, 0x54, 0x1c, 0x92, 0xd8, 0x1f, + 0x12, 0x35, 0x0e, 0x89, 0x3f, 0x0e, 0xb9, 0x1e, 0x07, 0xe4, 0xee, 0x97, 0x6c, 0x4c, 0x53, 0x36, 0xa6, 0x6b, 0x35, + 0x2a, 0xf4, 0x8a, 0x9e, 0x6b, 0xea, 0x78, 0xc6, 0xde, 0xc0, 0x81, 0x3d, 0x08, 0xf3, 0x59, 0x3c, 0x7c, 0x13, 0xbd, + 0x21, 0xe4, 0x2b, 0x49, 0xaf, 0xd5, 0xa5, 0x0c, 0xc2, 0x20, 0x5e, 0x81, 0x73, 0xa9, 0x0b, 0x75, 0x72, 0x65, 0x76, + 0x1c, 0x3e, 0x5d, 0x36, 0x9e, 0xce, 0x21, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x05, 0x2b, 0xe7, 0x67, 0xe1, + 0x98, 0x00, 0x0e, 0x8f, 0x1e, 0xce, 0x8b, 0xd1, 0x2d, 0xbd, 0x18, 0xdd, 0x11, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0x87, + 0x2c, 0x9e, 0x0e, 0x06, 0x6b, 0xa4, 0xea, 0x2a, 0xf7, 0x9a, 0x2c, 0xe8, 0x05, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x13, + 0x6b, 0x43, 0xc3, 0xdf, 0x30, 0xf8, 0xf8, 0x8e, 0x5d, 0x8c, 0xee, 0xe8, 0x2d, 0x7b, 0xb3, 0x1d, 0x4f, 0x81, 0x99, + 0x5a, 0xcd, 0xc2, 0xbb, 0xc3, 0xcb, 0xd9, 0x25, 0xbb, 0x8b, 0xee, 0x8e, 0xa0, 0xa1, 0x57, 0xec, 0x0e, 0x01, 0x97, + 0xd2, 0xc7, 0xcb, 0xc1, 0x1b, 0xb2, 0x3f, 0x18, 0xa4, 0x24, 0x0a, 0xaf, 0x43, 0xaf, 0x95, 0x6f, 0xe8, 0x1d, 0xa1, + 0x2b, 0x76, 0x8b, 0xa3, 0x71, 0xc9, 0xf0, 0x83, 0x73, 0x76, 0x57, 0x5f, 0x87, 0xde, 0x6e, 0x4e, 0x44, 0x27, 0x88, + 0x11, 0xfa, 0x1a, 0x38, 0x9a, 0xe5, 0xc2, 0x4c, 0xc0, 0x93, 0xb9, 0xc8, 0x68, 0x51, 0x68, 0x06, 0xe2, 0xac, 0x04, + 0xc4, 0x92, 0xa8, 0xfb, 0xcd, 0x46, 0x67, 0xb0, 0x9c, 0xfb, 0xfd, 0x5e, 0x65, 0xe8, 0x01, 0x22, 0x67, 0x76, 0xd2, + 0x83, 0x9e, 0x4f, 0x0f, 0xf0, 0x13, 0xbd, 0x6a, 0x10, 0x27, 0xf3, 0xbb, 0x65, 0xf4, 0x9b, 0x47, 0x1f, 0x7e, 0xe8, + 0xa6, 0x3c, 0x22, 0xff, 0xf7, 0x29, 0x4f, 0x99, 0x47, 0x6f, 0x2a, 0x0f, 0x04, 0xcf, 0x5b, 0x93, 0x4a, 0x23, 0x51, + 0x8d, 0xce, 0x56, 0x31, 0x68, 0x23, 0x51, 0xdb, 0xa0, 0x9f, 0xd0, 0xc2, 0x0a, 0x22, 0xe4, 0x1c, 0xbc, 0x00, 0x83, + 0x54, 0x08, 0x95, 0xa3, 0x16, 0x25, 0x1a, 0x82, 0xe4, 0xb2, 0xe4, 0x2a, 0x7c, 0x0e, 0xa1, 0xea, 0xf4, 0x71, 0x26, + 0xc2, 0x86, 0x1e, 0x87, 0x3e, 0x00, 0xfc, 0xaf, 0x3b, 0xe4, 0xa2, 0xe4, 0x97, 0x78, 0x36, 0xb7, 0x09, 0x46, 0xc1, + 0x12, 0xd1, 0x0c, 0x6d, 0x83, 0xd8, 0x8f, 0x25, 0xc1, 0x7a, 0x24, 0x8d, 0x47, 0xa5, 0x39, 0x22, 0xfc, 0x28, 0x3e, + 0x8a, 0x9e, 0xc6, 0x86, 0x44, 0x72, 0x24, 0x91, 0x7c, 0x00, 0x84, 0x93, 0xa0, 0xbf, 0xb8, 0x6b, 0xb2, 0x6b, 0x21, + 0x31, 0xe8, 0x4f, 0x4b, 0xa6, 0x65, 0xf7, 0xaa, 0xc7, 0xbe, 0x22, 0xc8, 0x1d, 0xd3, 0x7f, 0x79, 0x7d, 0xf8, 0xe7, + 0x12, 0x67, 0xd0, 0x7a, 0xbe, 0xa8, 0xce, 0xcc, 0xbc, 0xc1, 0x8d, 0xbc, 0x2e, 0x6b, 0xd7, 0xe5, 0x0b, 0xbe, 0xc7, + 0x6f, 0x2b, 0x2e, 0xd2, 0x72, 0xef, 0x97, 0xaa, 0x8d, 0xe7, 0x54, 0xae, 0x57, 0x2e, 0xce, 0x8a, 0x32, 0x4e, 0xf5, + 0xa4, 0x2e, 0xc6, 0x1a, 0xb6, 0xe1, 0xf7, 0x88, 0xba, 0x92, 0x96, 0xa3, 0xa7, 0x94, 0xab, 0x66, 0xca, 0xc5, 0x3a, + 0xcf, 0x7f, 0xde, 0x49, 0xc5, 0x29, 0x6e, 0xa6, 0x20, 0x55, 0x6a, 0xb9, 0x80, 0xea, 0x39, 0x6a, 0xb9, 0x5b, 0x9a, + 0x1d, 0xe0, 0xdc, 0x36, 0xd5, 0xc7, 0xca, 0xec, 0xc2, 0x4b, 0x6e, 0xdc, 0x9f, 0x4c, 0x19, 0x16, 0x8c, 0x42, 0x9b, + 0x55, 0x57, 0xda, 0xbe, 0xd0, 0x3a, 0x0d, 0xc3, 0x95, 0x1f, 0x2f, 0x20, 0x5d, 0xc0, 0x38, 0x5e, 0x94, 0x4c, 0x8c, + 0xdb, 0xa3, 0xb7, 0x82, 0xf8, 0x92, 0xad, 0x40, 0xc0, 0x5c, 0xc3, 0xdb, 0x75, 0x1d, 0x6d, 0xf7, 0xc4, 0x29, 0xa3, + 0x72, 0x15, 0x8b, 0xef, 0xe3, 0x95, 0x81, 0x4c, 0x56, 0xc7, 0x63, 0x63, 0x4c, 0xa7, 0x3f, 0x25, 0xa1, 0x5f, 0x08, + 0x05, 0x9f, 0xf5, 0xd2, 0xca, 0x93, 0xdb, 0xc3, 0x32, 0xae, 0xd1, 0x2b, 0x71, 0xa5, 0xfb, 0x66, 0xa4, 0x90, 0x7a, + 0xe4, 0xab, 0xa6, 0x80, 0xde, 0x8c, 0x7d, 0x33, 0x15, 0xe6, 0xed, 0x9e, 0x31, 0x57, 0x08, 0x56, 0xaa, 0xec, 0xf6, + 0x9d, 0x1a, 0x53, 0x31, 0x83, 0x29, 0xb6, 0x9d, 0xc5, 0xa4, 0x5b, 0xf9, 0xa7, 0x9d, 0xfb, 0x65, 0xde, 0xe1, 0xae, + 0xa8, 0xdf, 0x02, 0x17, 0x9a, 0x15, 0x65, 0xd5, 0x96, 0x0d, 0xdb, 0xc6, 0x1b, 0x59, 0x28, 0x36, 0xc0, 0xb2, 0xe7, + 0xbe, 0x85, 0x07, 0x88, 0x9b, 0x70, 0xcf, 0x2e, 0x6a, 0xb8, 0x31, 0x7c, 0x59, 0x49, 0xbe, 0x2b, 0x8d, 0xb9, 0xf4, + 0xa9, 0xd2, 0xc4, 0x70, 0xb2, 0x18, 0x71, 0x91, 0x2e, 0xea, 0xcc, 0xae, 0x85, 0xcf, 0x78, 0x19, 0xce, 0xf9, 0xc2, + 0xe8, 0xa6, 0x74, 0xe9, 0x05, 0x8b, 0x75, 0xa7, 0x37, 0x2b, 0x8d, 0x95, 0x12, 0x71, 0x6b, 0x96, 0x09, 0x94, 0xa5, + 0xac, 0x95, 0xf0, 0xa6, 0x68, 0xd9, 0x4a, 0x1a, 0x79, 0xcf, 0x1c, 0xdc, 0xc7, 0x7e, 0x40, 0x4c, 0x64, 0x13, 0x98, + 0x14, 0x0d, 0x1d, 0xd0, 0xae, 0xba, 0xf0, 0xcd, 0xa8, 0x07, 0x83, 0xdc, 0x92, 0x44, 0xac, 0x20, 0xc5, 0x0a, 0xd6, + 0x35, 0x2b, 0xe6, 0xf9, 0x82, 0x5e, 0x30, 0x39, 0x4f, 0x17, 0x74, 0xc5, 0xe4, 0x7c, 0x8d, 0x37, 0xa1, 0x0b, 0x38, + 0x21, 0xc9, 0x26, 0x56, 0x0a, 0xd8, 0x0b, 0xbc, 0xbc, 0xe1, 0x99, 0xaa, 0x69, 0xd9, 0xa5, 0xe2, 0x00, 0xe3, 0xf3, + 0x32, 0x0c, 0xcb, 0xe1, 0x05, 0x58, 0x4b, 0xec, 0x87, 0xab, 0x39, 0x5f, 0xa8, 0xdf, 0x10, 0x70, 0x3e, 0x09, 0x15, + 0xbb, 0x60, 0xf7, 0x02, 0x99, 0x5e, 0xcd, 0xf9, 0x42, 0x8d, 0x84, 0x2e, 0xf8, 0xca, 0x1a, 0x9b, 0xc4, 0x9e, 0xa0, + 0x65, 0x16, 0xcf, 0xc7, 0x8b, 0x28, 0xae, 0x61, 0x19, 0x9e, 0xaa, 0x99, 0x69, 0xc9, 0x7f, 0x12, 0xb5, 0xa1, 0x89, + 0xbe, 0xc1, 0x2a, 0xf2, 0x87, 0xc7, 0x47, 0x97, 0x40, 0xc6, 0xce, 0xae, 0x64, 0xe6, 0x43, 0xdf, 0x47, 0x06, 0xf7, + 0xdc, 0x94, 0x33, 0xae, 0x82, 0x44, 0x19, 0xb8, 0x7b, 0x35, 0x4b, 0xc6, 0x5a, 0x84, 0xef, 0x1e, 0x15, 0x45, 0x9f, + 0x49, 0xd3, 0x80, 0xee, 0x23, 0xc1, 0x1c, 0xe8, 0xbd, 0x42, 0x87, 0xcb, 0x6a, 0x9b, 0x09, 0xf8, 0x8b, 0x04, 0xf9, + 0xad, 0xd0, 0xab, 0x1a, 0x83, 0x2a, 0xda, 0x45, 0x2c, 0xfd, 0xfb, 0x88, 0x1f, 0x65, 0xf3, 0x2f, 0x73, 0x8f, 0x57, + 0x12, 0x06, 0x3f, 0xa4, 0x66, 0x93, 0xcc, 0xdb, 0x2b, 0xf6, 0x3d, 0x74, 0xd4, 0xa3, 0xd6, 0x78, 0x5f, 0xbd, 0xe0, + 0x14, 0x62, 0x94, 0x50, 0x74, 0x12, 0x0c, 0xe0, 0x76, 0x09, 0x29, 0xee, 0x06, 0xbb, 0x69, 0x5e, 0xf3, 0xa2, 0xe0, + 0x7c, 0x5d, 0x55, 0x81, 0x1f, 0xd0, 0x70, 0xbe, 0xd8, 0x0d, 0x61, 0x38, 0xa6, 0xad, 0x6b, 0x18, 0x84, 0x19, 0xc3, + 0x48, 0x08, 0x5e, 0xff, 0xa2, 0x27, 0x34, 0x89, 0x57, 0xdf, 0xf1, 0x4f, 0x19, 0x2f, 0x14, 0x91, 0x06, 0x11, 0x52, + 0x37, 0xf1, 0x8d, 0x4c, 0x93, 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0xd8, 0xd0, 0x54, 0xfc, 0xad, 0x16, 0x1f, 0xfc, + 0xd4, 0x74, 0x3c, 0x1a, 0xd7, 0xad, 0xce, 0xa8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0x60, 0x1a, + 0x69, 0xde, 0xba, 0x87, 0xc0, 0x2b, 0xd3, 0xe2, 0x9d, 0x07, 0x74, 0x73, 0xe6, 0x83, 0x27, 0x8f, 0xe9, 0x99, 0x43, + 0x4f, 0xae, 0xd8, 0x51, 0xd5, 0x43, 0xed, 0xbd, 0x19, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0x50, 0x7b, 0x57, + 0xf7, 0x1f, 0xcb, 0x5d, 0x0e, 0xdf, 0x71, 0x96, 0x1b, 0xc0, 0x52, 0x91, 0xb5, 0x02, 0x8f, 0x02, 0xd4, 0xa5, 0x32, + 0x84, 0x2d, 0xe6, 0x70, 0xa8, 0xec, 0x56, 0xad, 0x86, 0x92, 0x1c, 0x96, 0x23, 0x70, 0x08, 0x5d, 0x97, 0x83, 0x72, + 0xb4, 0xcc, 0xaa, 0xf7, 0xf8, 0x5b, 0xb3, 0x0e, 0x49, 0x76, 0x1f, 0xeb, 0xc0, 0x2d, 0xeb, 0x30, 0xfd, 0x68, 0x90, + 0x02, 0xd0, 0x64, 0x23, 0x70, 0x09, 0xc0, 0x7b, 0xfb, 0x8f, 0x08, 0xb5, 0x32, 0xbd, 0x97, 0xb1, 0x50, 0xdf, 0x37, + 0x92, 0xa0, 0x84, 0x66, 0x42, 0xe5, 0x58, 0x0a, 0xde, 0x79, 0xa4, 0x73, 0x52, 0x67, 0xe2, 0x3d, 0x88, 0xd3, 0xc2, + 0x07, 0xf6, 0x16, 0x04, 0xe7, 0x2c, 0xe8, 0x1d, 0xde, 0x66, 0xb5, 0xd4, 0x46, 0x0f, 0x14, 0xc0, 0xef, 0x06, 0x77, + 0x08, 0xf2, 0xd5, 0x18, 0xae, 0x95, 0xbc, 0x09, 0xf9, 0xb0, 0xa0, 0x07, 0x64, 0x60, 0x9f, 0xc5, 0x30, 0xa6, 0x07, + 0xe4, 0xd0, 0x3e, 0x4b, 0x37, 0x80, 0x03, 0xa9, 0x47, 0x95, 0x1e, 0x40, 0x83, 0x7e, 0xb7, 0x2d, 0xb2, 0x24, 0xeb, + 0xc7, 0xd2, 0x28, 0x62, 0xa0, 0x4a, 0x10, 0x51, 0x8b, 0x7f, 0x3e, 0x98, 0xeb, 0x0e, 0x73, 0x81, 0x30, 0x07, 0x03, + 0x0e, 0xe2, 0x36, 0x08, 0xcd, 0x01, 0xb3, 0xb9, 0x8d, 0x04, 0xbd, 0xb3, 0x86, 0x99, 0x1d, 0xfd, 0xe1, 0x56, 0x82, + 0x6f, 0xb2, 0xd6, 0xa8, 0xf3, 0xe2, 0x10, 0x08, 0x82, 0x37, 0x85, 0xaa, 0xf6, 0xaa, 0x07, 0x36, 0xde, 0xaa, 0x1f, + 0xdb, 0xed, 0x78, 0x2a, 0xdc, 0xb5, 0x5f, 0x50, 0x38, 0xf9, 0x94, 0xfc, 0xeb, 0xbd, 0xc9, 0xe0, 0xc0, 0xc8, 0xf0, + 0xa5, 0xb7, 0x7f, 0xe1, 0x6b, 0x2d, 0xdd, 0x13, 0x83, 0x92, 0x3c, 0x3e, 0x50, 0xf4, 0xef, 0x5e, 0x59, 0xf9, 0xd4, + 0x4e, 0xff, 0x76, 0x6b, 0xd6, 0xe7, 0xe1, 0x68, 0xb2, 0xdd, 0xf6, 0xb4, 0x81, 0x2b, 0xd5, 0x2a, 0x04, 0xec, 0x42, + 0x49, 0xf6, 0x0f, 0x20, 0x2a, 0x42, 0x33, 0xee, 0x66, 0xd9, 0x90, 0xc8, 0xf8, 0x71, 0x3a, 0xcb, 0x86, 0x60, 0x87, + 0x7b, 0x51, 0x89, 0xcb, 0x51, 0x6b, 0x83, 0xd3, 0xb3, 0x24, 0x84, 0x50, 0x0e, 0x58, 0xd9, 0xad, 0xfa, 0x73, 0xa7, + 0xcc, 0x84, 0xd4, 0x64, 0x75, 0x3b, 0xa5, 0x7b, 0x98, 0xe6, 0x7b, 0x66, 0x04, 0x07, 0xdc, 0xdb, 0x5f, 0xf5, 0xc7, + 0x30, 0xc9, 0x34, 0x39, 0x45, 0xf2, 0x8b, 0xf4, 0x14, 0x92, 0x76, 0xe8, 0xa9, 0x22, 0x80, 0x13, 0x6a, 0x3f, 0x86, + 0xdf, 0x30, 0xee, 0xdf, 0x35, 0x5f, 0xbb, 0xa9, 0x88, 0x9e, 0x52, 0x2c, 0x53, 0x93, 0xd3, 0x24, 0x2b, 0x12, 0x88, + 0xda, 0xa8, 0x9a, 0x11, 0x3d, 0x71, 0x31, 0x1f, 0x15, 0xe1, 0xf3, 0x6a, 0xfd, 0x9f, 0x21, 0x7c, 0x46, 0xe1, 0x06, + 0x70, 0x79, 0xc5, 0xe5, 0x79, 0xf8, 0xec, 0x29, 0xdd, 0x9b, 0x7c, 0x73, 0x40, 0xf7, 0x0e, 0x9e, 0x3c, 0x23, 0x00, + 0x8b, 0x76, 0x79, 0x1e, 0x1e, 0x3c, 0x7b, 0x46, 0xf7, 0xbe, 0xfd, 0x96, 0xee, 0x4d, 0x9e, 0x1c, 0x34, 0xd2, 0x26, + 0xcf, 0xbe, 0xa5, 0x7b, 0xdf, 0x3c, 0x6d, 0xa4, 0x1d, 0x8c, 0x9f, 0xd1, 0xbd, 0xbf, 0x7f, 0x63, 0xd2, 0xfe, 0x06, + 0xd9, 0xbe, 0x3d, 0xc0, 0xff, 0x4c, 0xda, 0xe4, 0xd9, 0x13, 0xba, 0x37, 0x19, 0x43, 0x25, 0xcf, 0x5c, 0x25, 0xe3, + 0x09, 0x7c, 0xfc, 0x04, 0xfe, 0xfb, 0x1b, 0x09, 0x16, 0xb4, 0x92, 0x2c, 0x17, 0xa8, 0x3f, 0x43, 0x11, 0x27, 0xaa, + 0x26, 0x12, 0x1e, 0x62, 0x66, 0xf5, 0x4d, 0x1c, 0x06, 0xc4, 0xa5, 0x43, 0x41, 0x74, 0x6f, 0x3c, 0x7a, 0x46, 0x02, + 0x1f, 0x9e, 0xee, 0xc6, 0x07, 0x19, 0xcb, 0xc5, 0x3c, 0xfb, 0x2a, 0x37, 0xb1, 0x15, 0x3c, 0x00, 0xab, 0x8f, 0x7e, + 0xae, 0x4a, 0xce, 0xb3, 0xaf, 0x2a, 0xb9, 0x9b, 0xeb, 0xf7, 0x16, 0xa0, 0xbc, 0xbf, 0x6a, 0xd9, 0x4d, 0xa1, 0x42, + 0xa7, 0xb5, 0x46, 0x9f, 0x7d, 0xc4, 0xf4, 0xc1, 0xc0, 0xbb, 0x61, 0xff, 0xb4, 0x53, 0x4e, 0xeb, 0x1b, 0x8d, 0x42, + 0x8d, 0xca, 0x43, 0xc2, 0x8e, 0xa0, 0xe8, 0xc1, 0x00, 0x78, 0x02, 0x0f, 0xf7, 0xed, 0xdf, 0x2c, 0xe3, 0x63, 0x47, + 0x19, 0xbf, 0xa0, 0x0c, 0x01, 0x8d, 0x7a, 0x98, 0xdd, 0xf4, 0xb0, 0xd1, 0xad, 0x5e, 0xb2, 0x54, 0x27, 0x53, 0xd3, + 0x33, 0xd8, 0xd7, 0xba, 0x96, 0x7b, 0x46, 0x14, 0x2d, 0x2f, 0xf6, 0x52, 0x3e, 0xab, 0xd8, 0x4f, 0x4b, 0x54, 0x6f, + 0x45, 0x8d, 0x37, 0x32, 0x9b, 0x55, 0xec, 0x7b, 0xf3, 0x06, 0xb8, 0x19, 0xf6, 0xbb, 0x7a, 0xf2, 0x03, 0x67, 0x70, + 0x69, 0xdb, 0xa3, 0x4c, 0x8c, 0x00, 0x2b, 0x20, 0x03, 0x07, 0x1e, 0x00, 0x1d, 0xf4, 0x47, 0x7b, 0xbb, 0x55, 0x29, + 0xcd, 0x3e, 0x5b, 0x18, 0x40, 0xc3, 0xbc, 0x4d, 0x5c, 0xd9, 0xff, 0x6a, 0xc8, 0x4b, 0x50, 0xb8, 0xd5, 0x2c, 0x6f, + 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x65, 0x40, 0xcd, 0x96, 0x8f, 0x36, + 0x5c, 0xa9, 0x27, 0x81, 0x33, 0xb8, 0x90, 0x45, 0xc2, 0x4f, 0xb4, 0xd8, 0x1f, 0xad, 0x1f, 0x7d, 0xdf, 0x1e, 0x0f, + 0xd6, 0xbe, 0xc7, 0x47, 0xfa, 0xb3, 0xc6, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0x17, 0xb5, 0x95, 0x78, 0x94, 0xc0, 0x1b, + 0x98, 0x88, 0x14, 0x06, 0xa9, 0x16, 0x38, 0x06, 0xe5, 0x8d, 0x85, 0x58, 0xaa, 0xae, 0x6e, 0xb0, 0x05, 0x91, 0x21, + 0x78, 0xb8, 0xfd, 0x6b, 0xa9, 0x02, 0x47, 0xf5, 0xfb, 0x5c, 0xfa, 0x6e, 0x4f, 0xc6, 0x8e, 0x1c, 0xa7, 0x7e, 0x2a, + 0x1c, 0xfc, 0x37, 0xa9, 0x6b, 0x63, 0xb9, 0x92, 0x32, 0xcb, 0xb2, 0xb0, 0xa3, 0x50, 0xcb, 0x3d, 0x2a, 0x0f, 0x92, + 0x2f, 0xe4, 0x10, 0xc9, 0x02, 0xa3, 0x50, 0x90, 0xe1, 0x84, 0x8a, 0xd1, 0x5a, 0x94, 0xcb, 0xec, 0xa2, 0x0a, 0x37, + 0x4a, 0xa1, 0xcc, 0x29, 0xfa, 0x76, 0x83, 0x03, 0x09, 0x89, 0xb2, 0xf2, 0x6d, 0xfc, 0x36, 0x44, 0xb0, 0x3a, 0xae, + 0x6d, 0xa1, 0xb8, 0xb7, 0x3f, 0x79, 0xda, 0xc5, 0x1f, 0x19, 0x17, 0x50, 0x17, 0x8b, 0x69, 0x38, 0xb1, 0xb1, 0x6f, + 0xdc, 0x17, 0x56, 0xd3, 0x03, 0x50, 0xdf, 0xa5, 0x12, 0x23, 0xa8, 0xaf, 0x8c, 0x7d, 0x6c, 0x8f, 0x31, 0x39, 0x83, + 0x58, 0xc3, 0x2a, 0x67, 0xa6, 0xfa, 0x46, 0xd8, 0x11, 0x00, 0x37, 0x42, 0x6b, 0x14, 0x04, 0x1e, 0xaf, 0x42, 0x3c, + 0x2f, 0x55, 0xf8, 0xd6, 0x8c, 0xd0, 0x31, 0x78, 0x53, 0xd9, 0x46, 0x66, 0xd2, 0x17, 0x0c, 0x9a, 0x63, 0x5b, 0x47, + 0x61, 0xb5, 0x95, 0x65, 0x47, 0x00, 0x37, 0x90, 0x1d, 0x9a, 0x8b, 0xe7, 0xac, 0x9a, 0x67, 0x8b, 0xc8, 0x04, 0x05, + 0x5c, 0x0a, 0xcb, 0xa0, 0x7d, 0xba, 0x47, 0xb6, 0xe3, 0x10, 0xba, 0xe1, 0x3e, 0x82, 0xf1, 0xb4, 0x9b, 0x82, 0x15, + 0x44, 0x23, 0xc4, 0xc3, 0x8c, 0x59, 0x7c, 0xaf, 0x34, 0xe5, 0xa9, 0x6a, 0x09, 0x04, 0x8e, 0x42, 0xa8, 0x8b, 0x5d, + 0xa3, 0x04, 0x97, 0xa9, 0x11, 0xcc, 0x60, 0xc7, 0x8e, 0xd4, 0x76, 0xc9, 0x39, 0x1d, 0xaa, 0x29, 0x2d, 0xf5, 0x94, + 0x6a, 0x5f, 0x43, 0x31, 0x2f, 0xd1, 0x43, 0x0f, 0x5c, 0x0f, 0xb4, 0x43, 0x5e, 0x49, 0x27, 0x26, 0x82, 0x4e, 0xab, + 0x4d, 0xd8, 0xb9, 0x91, 0x6e, 0x59, 0x8d, 0xbc, 0x63, 0x68, 0x76, 0xc4, 0x4b, 0x3f, 0x50, 0x17, 0x40, 0x84, 0xdc, + 0xdb, 0x22, 0x73, 0x44, 0xb3, 0xac, 0x7c, 0x05, 0x65, 0x71, 0xc4, 0xd6, 0x15, 0x70, 0x2d, 0x05, 0x93, 0x4b, 0x1e, + 0xf1, 0x14, 0x11, 0x01, 0x8f, 0x95, 0x76, 0x7d, 0xa7, 0x25, 0x84, 0x66, 0x29, 0x10, 0x37, 0x17, 0xc5, 0xb9, 0xb6, + 0x81, 0x2c, 0x80, 0xbe, 0xfd, 0x9c, 0x5d, 0x79, 0xe1, 0x60, 0x37, 0x57, 0x99, 0x78, 0xc1, 0x2f, 0x32, 0xc1, 0x53, + 0x04, 0xbb, 0xba, 0x35, 0x0f, 0xdc, 0xb1, 0x6d, 0x60, 0xf9, 0xf6, 0x1d, 0x2c, 0x98, 0x32, 0xd4, 0x4a, 0x89, 0x4c, + 0x44, 0x02, 0x32, 0xfb, 0xcc, 0xdd, 0x9b, 0x4c, 0xbc, 0x89, 0x6f, 0xc1, 0x9b, 0xa2, 0xc1, 0x4f, 0x8f, 0xce, 0xf1, + 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x25, 0x68, 0x6d, 0x0d, 0x81, + 0x17, 0x7f, 0x5a, 0x75, 0xef, 0x2a, 0x13, 0xc6, 0x3e, 0xe3, 0x2a, 0xbe, 0x65, 0xa5, 0x02, 0xb3, 0xc0, 0x38, 0xf7, + 0x6d, 0x29, 0xc9, 0x55, 0x26, 0x8c, 0x80, 0xe4, 0x2a, 0xbe, 0xa5, 0x4d, 0x19, 0x87, 0xb6, 0xa2, 0xf3, 0xe2, 0xfc, + 0xee, 0x0e, 0xbf, 0xc4, 0x50, 0x2b, 0xe3, 0x7e, 0x1f, 0x24, 0x66, 0xd2, 0x36, 0x65, 0x26, 0x23, 0xa9, 0xd1, 0x42, + 0x2a, 0xca, 0x07, 0x13, 0xb2, 0xbb, 0x52, 0x2d, 0x23, 0x6a, 0xbf, 0x0a, 0xc5, 0x6c, 0x1c, 0x4d, 0x08, 0x9d, 0x74, + 0xac, 0x77, 0xd3, 0x5a, 0xc8, 0x34, 0x7a, 0x16, 0x79, 0x3e, 0x9d, 0x05, 0xab, 0xa6, 0xc5, 0x21, 0xe3, 0xd3, 0x62, + 0x30, 0x20, 0xda, 0xa5, 0x70, 0x83, 0xf5, 0x80, 0x29, 0x8d, 0x8b, 0xb7, 0x66, 0x5a, 0xfd, 0x4a, 0xaa, 0x90, 0xf4, + 0x9e, 0x01, 0x49, 0x26, 0x5d, 0xb0, 0x5b, 0x90, 0x28, 0x7a, 0xfe, 0x77, 0x6a, 0x0b, 0xee, 0x7a, 0x30, 0x36, 0xa3, + 0xfb, 0x7a, 0xc6, 0x7f, 0xa8, 0x6d, 0x41, 0xd4, 0xa7, 0x92, 0xf5, 0x3a, 0x12, 0x55, 0xc8, 0x45, 0xf8, 0xd9, 0xd1, + 0x10, 0x43, 0x54, 0x7b, 0x2c, 0x10, 0xeb, 0xab, 0x73, 0x5e, 0xe0, 0xf4, 0x33, 0x77, 0xb9, 0x82, 0x6d, 0x41, 0x2b, + 0x43, 0xa3, 0xde, 0xc6, 0x6f, 0x23, 0x7b, 0x59, 0xd0, 0x45, 0xbe, 0x40, 0x21, 0x6b, 0x1e, 0x86, 0xd5, 0xb0, 0x3d, + 0x88, 0x64, 0xbf, 0x3d, 0x09, 0x8d, 0xc6, 0xc0, 0x02, 0xd9, 0xa1, 0x11, 0xb8, 0x08, 0xad, 0xfc, 0xed, 0x10, 0x5c, + 0xb8, 0x2c, 0x22, 0xcb, 0x50, 0xc7, 0x6f, 0x6a, 0x37, 0x41, 0xf5, 0x0a, 0x9d, 0xa6, 0xb0, 0x2a, 0x65, 0x92, 0x0f, + 0xbf, 0x5e, 0xc9, 0x02, 0x33, 0x79, 0x5d, 0xf6, 0xe8, 0x6b, 0xbb, 0xbd, 0x03, 0x53, 0xb0, 0xee, 0x93, 0xf7, 0xf5, + 0xe3, 0xce, 0x9e, 0x80, 0x51, 0xac, 0xca, 0xd1, 0x14, 0x52, 0x6a, 0x1f, 0x94, 0xfa, 0x63, 0xb8, 0x14, 0x9a, 0x63, + 0xb7, 0x80, 0x49, 0xc0, 0x3e, 0x43, 0xaa, 0xc7, 0xb4, 0x63, 0x9f, 0xa3, 0x0d, 0x2c, 0x09, 0x38, 0xfc, 0xa3, 0x4c, + 0xd6, 0xfe, 0xd5, 0x5d, 0xa4, 0xcd, 0x90, 0x2d, 0xf3, 0x05, 0xf0, 0xf9, 0xb0, 0x6b, 0xa3, 0x12, 0x65, 0x13, 0x91, + 0xa4, 0xb0, 0xe5, 0x31, 0x48, 0x7b, 0x14, 0xd3, 0x55, 0xc1, 0x93, 0x0c, 0xa5, 0x14, 0x89, 0xf6, 0x09, 0xce, 0xe1, + 0x0d, 0xee, 0x47, 0x15, 0x10, 0x5e, 0x85, 0x9c, 0x8e, 0x52, 0xaa, 0x2d, 0x60, 0x14, 0xf5, 0x00, 0x51, 0x5e, 0x06, + 0x72, 0xbc, 0xed, 0x76, 0x42, 0x57, 0x6c, 0x39, 0x9c, 0x50, 0x24, 0x25, 0x97, 0x58, 0xee, 0x15, 0xe8, 0x3c, 0xce, + 0x59, 0xef, 0x25, 0x60, 0x11, 0x9c, 0xc1, 0xdf, 0x98, 0xd0, 0x6b, 0xf8, 0x9b, 0x13, 0xfa, 0x86, 0x85, 0x57, 0xc3, + 0x4b, 0xb2, 0x1f, 0xa6, 0x83, 0x89, 0x12, 0x8c, 0xdd, 0xb1, 0x65, 0x19, 0xaa, 0xc4, 0xd5, 0xfe, 0x05, 0x79, 0x7c, + 0x41, 0x6f, 0xe9, 0x0d, 0x3d, 0xa5, 0x27, 0x40, 0xf8, 0xef, 0x0e, 0x27, 0x7c, 0x38, 0x79, 0xda, 0xef, 0xf7, 0xce, + 0xfb, 0xfd, 0xde, 0x99, 0x31, 0xa0, 0xd0, 0xbb, 0xe8, 0xb2, 0xa6, 0xfa, 0xd7, 0x55, 0xbd, 0x98, 0x9e, 0xa8, 0x8d, + 0x9b, 0xf0, 0x2c, 0x0f, 0xaf, 0xf6, 0xef, 0xc8, 0x10, 0x1f, 0x2f, 0x72, 0x29, 0x8b, 0xf0, 0x72, 0xff, 0x8e, 0xd0, + 0x93, 0x23, 0xd0, 0x9b, 0x62, 0x7d, 0x27, 0x8f, 0xef, 0x74, 0x6d, 0x84, 0xbe, 0x0c, 0x13, 0xd8, 0x26, 0xb7, 0xcc, + 0xde, 0xb5, 0x27, 0x63, 0x88, 0x65, 0x72, 0xe7, 0x95, 0x77, 0xf7, 0xf8, 0x96, 0xec, 0xdf, 0x82, 0xa7, 0xa8, 0x25, + 0x7f, 0xb3, 0xf0, 0x86, 0xb5, 0x6a, 0x78, 0x7c, 0x47, 0x4f, 0x5b, 0x8d, 0x78, 0x7c, 0x47, 0xa2, 0xf0, 0x86, 0x5d, + 0xd2, 0x53, 0x76, 0x45, 0xe8, 0x79, 0xbf, 0x7f, 0xd6, 0xef, 0xcb, 0x7e, 0xff, 0xa7, 0x38, 0x0c, 0xe3, 0x61, 0x41, + 0xf6, 0x25, 0xbd, 0xdb, 0x9f, 0xf0, 0x27, 0x64, 0x16, 0xea, 0xe6, 0xab, 0x05, 0x67, 0x55, 0xde, 0x2a, 0xd7, 0x1d, + 0x05, 0x6b, 0x85, 0x3b, 0xa6, 0x9e, 0x4e, 0xe8, 0x0d, 0x2b, 0xe8, 0x29, 0x8b, 0x49, 0x74, 0x0d, 0xad, 0x38, 0x9f, + 0x15, 0xd1, 0x0d, 0x3d, 0x65, 0x67, 0xb3, 0x38, 0x3a, 0xa5, 0x27, 0x2c, 0x1f, 0x4e, 0x20, 0xef, 0xe9, 0xf0, 0x86, + 0xec, 0x9f, 0x90, 0x28, 0x3c, 0xd1, 0xbf, 0xef, 0xe8, 0x25, 0x0f, 0x4f, 0xa8, 0x57, 0xcd, 0x09, 0x31, 0xd5, 0x37, + 0x6a, 0x3f, 0x21, 0x91, 0x3f, 0x98, 0x27, 0xd6, 0x9e, 0xe6, 0x91, 0xa3, 0x8d, 0x69, 0x19, 0x82, 0xbe, 0xb9, 0x0c, + 0x6f, 0x08, 0x99, 0x36, 0xc7, 0x0e, 0x06, 0x74, 0xf6, 0x28, 0x4a, 0x08, 0xbd, 0xf1, 0x4b, 0xbd, 0xc1, 0x31, 0x34, + 0x23, 0xa4, 0xd2, 0x4e, 0x31, 0x0d, 0xd7, 0xc1, 0x6b, 0x0d, 0xd6, 0x71, 0xde, 0xef, 0x87, 0xeb, 0x7e, 0x1f, 0x22, + 0xdd, 0x17, 0x33, 0x13, 0xdb, 0xcd, 0x91, 0x4d, 0x7a, 0x03, 0xda, 0xff, 0xd7, 0x83, 0x01, 0x74, 0xc6, 0x2b, 0x29, + 0xbc, 0x19, 0xbc, 0x7e, 0x7c, 0x47, 0x54, 0x1d, 0x05, 0x15, 0x32, 0x2c, 0xe8, 0x1b, 0x9a, 0x01, 0xe0, 0xd7, 0xeb, + 0xc1, 0x80, 0x44, 0xe6, 0x33, 0x32, 0x7d, 0x7d, 0x78, 0x32, 0x1d, 0x0c, 0x5e, 0x9b, 0x6d, 0xf2, 0x96, 0xdd, 0x53, + 0x0a, 0xac, 0xbf, 0xb3, 0x7e, 0xff, 0xed, 0x51, 0x4c, 0xce, 0x0b, 0x1e, 0x7f, 0x9c, 0x36, 0xdb, 0xf2, 0xd6, 0x45, + 0x55, 0x3b, 0xeb, 0xf7, 0xd7, 0xfd, 0xfe, 0x29, 0x60, 0x17, 0xcd, 0x9c, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x8e, 0x22, + 0x69, 0x92, 0x43, 0x63, 0x68, 0x5b, 0xac, 0xda, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xa8, 0x59, 0x51, 0x5c, 0x93, 0x28, + 0xec, 0x9d, 0x6d, 0xb7, 0xa7, 0x8c, 0xb1, 0x98, 0x80, 0xf4, 0xc3, 0x7f, 0x7d, 0x5a, 0x37, 0x62, 0x88, 0x09, 0x89, + 0xcc, 0xe6, 0x66, 0x69, 0x0f, 0x81, 0x88, 0xc3, 0xa6, 0x7f, 0x6f, 0xee, 0xe5, 0xa2, 0x76, 0x7c, 0xeb, 0x2f, 0x00, + 0x42, 0x24, 0x59, 0xc8, 0x67, 0x38, 0x06, 0x65, 0x06, 0x40, 0xe6, 0x91, 0x9a, 0x79, 0x09, 0x20, 0xc0, 0x64, 0xbb, + 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb0, 0xd1, 0xdf, 0x9e, 0x3d, 0xae, 0x1e, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, + 0x61, 0x17, 0x6b, 0xb5, 0x0f, 0x46, 0xf0, 0x9a, 0x7d, 0xbc, 0xce, 0xbe, 0x98, 0x7d, 0x44, 0xc2, 0xda, 0x60, 0x1c, + 0xb9, 0x48, 0x5b, 0x7a, 0xbb, 0x7b, 0x18, 0x4c, 0x2e, 0xd2, 0xcf, 0xb0, 0x9d, 0x3e, 0xff, 0xe6, 0xc1, 0x78, 0xc2, + 0xc1, 0xe8, 0x2e, 0x0a, 0xfa, 0x4c, 0xdb, 0x6e, 0x2b, 0xff, 0x12, 0xf8, 0x16, 0x53, 0x41, 0xc7, 0x66, 0x59, 0xb8, + 0x41, 0x45, 0xd4, 0xd1, 0x32, 0xa8, 0x6a, 0x65, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0x32, 0x71, 0x0b, 0x0c, 0x43, 0x86, + 0xba, 0xdc, 0xe3, 0xea, 0x5f, 0xbc, 0x90, 0x06, 0x3e, 0xc3, 0x89, 0x08, 0x3d, 0x6e, 0x8d, 0xfb, 0xdc, 0x9a, 0xf8, + 0x0c, 0xb7, 0x56, 0x22, 0x89, 0x35, 0xb0, 0xa4, 0xe6, 0x72, 0x94, 0xb0, 0xa3, 0x92, 0xf1, 0x59, 0x19, 0x25, 0x34, + 0x86, 0x07, 0xc9, 0xc4, 0x4c, 0x46, 0x09, 0xda, 0x27, 0xba, 0x08, 0x83, 0x7f, 0x01, 0x66, 0x3f, 0xcd, 0xe1, 0xaf, + 0x24, 0xd3, 0xe4, 0x10, 0x02, 0x42, 0x1c, 0x8e, 0x67, 0x71, 0x38, 0x26, 0x51, 0x72, 0x04, 0x4f, 0xf0, 0x5f, 0x11, + 0x8e, 0x49, 0xad, 0xef, 0x30, 0x52, 0x5d, 0x6e, 0x13, 0x06, 0x70, 0x65, 0xe3, 0xd9, 0x24, 0xb2, 0xd2, 0x5d, 0xf9, + 0x78, 0x34, 0x7e, 0x46, 0xa6, 0x71, 0x28, 0x07, 0x09, 0xa1, 0xe0, 0xdd, 0x1b, 0x96, 0xc3, 0x44, 0xc3, 0xb3, 0x01, + 0x9b, 0x57, 0x3a, 0x36, 0x4f, 0xc2, 0x09, 0x08, 0xc3, 0x84, 0x1c, 0xeb, 0x3d, 0x48, 0x29, 0xfa, 0x3c, 0xc7, 0x7e, + 0xea, 0x23, 0x08, 0xb3, 0xa3, 0x96, 0x8a, 0xaf, 0x00, 0xe8, 0x12, 0x07, 0x87, 0xda, 0x33, 0x5f, 0xcc, 0xc2, 0xd2, + 0xa3, 0x52, 0xa6, 0xba, 0x7d, 0xd1, 0xa0, 0xfc, 0xa6, 0x41, 0xfb, 0x82, 0x0c, 0x26, 0xb4, 0x3c, 0x9a, 0xf0, 0x27, + 0x10, 0xc0, 0xa3, 0x11, 0xf1, 0x4b, 0xe1, 0xc4, 0x40, 0x78, 0x15, 0x64, 0xa0, 0xd2, 0x5a, 0x35, 0x66, 0x64, 0x2b, + 0xde, 0x83, 0x30, 0x29, 0x7b, 0x37, 0x72, 0x9d, 0xa7, 0x10, 0x15, 0x6c, 0x9d, 0x57, 0x7b, 0x97, 0x60, 0xc9, 0x1e, + 0x57, 0x10, 0x27, 0x6c, 0xbd, 0x02, 0xec, 0xdc, 0x47, 0x9b, 0xb2, 0xde, 0x53, 0xdf, 0xed, 0x61, 0xcb, 0xe1, 0x55, + 0x25, 0xf7, 0x26, 0xe3, 0xf1, 0x78, 0xf4, 0x07, 0x1c, 0x1d, 0x40, 0x68, 0x49, 0x64, 0xf8, 0x64, 0x80, 0xc6, 0x5d, + 0x57, 0xdc, 0x1b, 0x17, 0x8a, 0xb2, 0xd2, 0xc9, 0x84, 0x80, 0xf8, 0xd9, 0xf4, 0x0d, 0xf6, 0x15, 0xd7, 0xf1, 0x4f, + 0x76, 0x3f, 0x31, 0x2b, 0x5a, 0xad, 0xd4, 0xd1, 0xbb, 0x93, 0xd3, 0xd7, 0x1f, 0x5e, 0xff, 0xf6, 0xf2, 0xec, 0xf5, + 0xdb, 0x57, 0xaf, 0xdf, 0xbe, 0xfe, 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xdf, 0x56, 0xc4, 0x8e, 0xbd, 0x77, 0x8f, 0xf1, + 0x6a, 0xf1, 0x85, 0xb3, 0x07, 0xee, 0x16, 0x0b, 0xb0, 0x09, 0x86, 0x5b, 0x10, 0x54, 0x33, 0x1a, 0x95, 0xbe, 0x27, + 0x20, 0xa3, 0x51, 0x21, 0x1b, 0x0f, 0x2b, 0xb6, 0x42, 0x2e, 0xde, 0x31, 0x1c, 0x7c, 0x64, 0x7f, 0x2b, 0xce, 0x84, + 0xdb, 0xd1, 0xd6, 0xac, 0x08, 0xf8, 0x7c, 0xad, 0x45, 0xe5, 0x71, 0x21, 0x6a, 0x6f, 0xdb, 0xe7, 0x90, 0x50, 0x8f, + 0xc8, 0x75, 0xf0, 0xbe, 0x0d, 0xb2, 0xc7, 0x47, 0xde, 0x93, 0xf2, 0x0c, 0xf5, 0x39, 0x1a, 0x3e, 0x6a, 0x3c, 0xa3, + 0x13, 0x73, 0x6d, 0x74, 0xa8, 0x67, 0x05, 0xec, 0x6f, 0x25, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x38, 0xdd, + 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, 0x7e, 0x94, 0x6a, 0x02, 0x69, 0x51, 0xa0, 0x74, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, + 0xc2, 0xfc, 0x0c, 0x1b, 0x04, 0xd0, 0x5e, 0x76, 0x2c, 0x09, 0x34, 0x8b, 0xd7, 0xba, 0xfe, 0x79, 0xf9, 0x32, 0xd1, + 0xce, 0x17, 0xdf, 0x42, 0x88, 0x61, 0xff, 0x8a, 0xd0, 0x98, 0x70, 0x37, 0xc9, 0xee, 0xd2, 0x62, 0xee, 0x55, 0x57, + 0x31, 0x1e, 0x77, 0xf7, 0x5c, 0x29, 0x9a, 0xb7, 0x2e, 0xb0, 0x07, 0x6a, 0x5e, 0xc7, 0x4b, 0x16, 0x02, 0x36, 0xe3, + 0xbe, 0x5d, 0x24, 0xce, 0xef, 0x9d, 0x4e, 0xc8, 0xfe, 0xc1, 0x94, 0x0f, 0x59, 0x49, 0xc5, 0x80, 0x95, 0xf5, 0x0e, + 0x35, 0xe7, 0x6d, 0x42, 0x2e, 0x76, 0x69, 0xb8, 0x18, 0xf2, 0x87, 0x2e, 0x49, 0x1f, 0x78, 0xc3, 0xa1, 0xda, 0x36, + 0x17, 0x43, 0x9a, 0x72, 0xba, 0x4b, 0x65, 0x40, 0x88, 0x74, 0x15, 0x57, 0xa4, 0xd6, 0x47, 0x55, 0xea, 0x24, 0x1d, + 0xd7, 0xd9, 0xe6, 0x33, 0x97, 0x6c, 0x75, 0xbb, 0xf6, 0xaf, 0xd5, 0xed, 0x0b, 0x33, 0x90, 0xbf, 0x3f, 0x11, 0xd5, + 0xc4, 0x40, 0x74, 0x01, 0x15, 0xfc, 0x13, 0xbc, 0x3c, 0x79, 0xa4, 0x15, 0xa0, 0xf7, 0x9d, 0x1d, 0x5d, 0x7b, 0xbc, + 0x31, 0x8b, 0xad, 0x25, 0xce, 0x59, 0xe5, 0x3b, 0xcb, 0xab, 0xb2, 0x15, 0xba, 0x8e, 0x60, 0xbf, 0x84, 0x1d, 0x7d, + 0xf7, 0xb6, 0x01, 0x10, 0xa5, 0xb0, 0x72, 0x67, 0xbf, 0xf0, 0xce, 0x7e, 0x61, 0xcf, 0x7e, 0xbb, 0x09, 0x94, 0x0f, + 0x2b, 0xb4, 0xec, 0x95, 0x14, 0x95, 0x69, 0xf2, 0xb8, 0xa9, 0xcb, 0x42, 0x5a, 0xcc, 0xf7, 0x2d, 0xed, 0x7a, 0x3a, + 0xa6, 0x12, 0xd5, 0x23, 0x3f, 0x60, 0xab, 0xf6, 0x4b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0x79, 0xdf, 0xdd, + 0xee, 0xff, 0xe6, 0x42, 0x07, 0xb7, 0xb5, 0x54, 0x78, 0xea, 0xea, 0xb8, 0xc0, 0xbb, 0x5a, 0xfa, 0xf0, 0x5d, 0xed, + 0x5d, 0xa6, 0x97, 0x5d, 0x05, 0xa8, 0x41, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0xa9, 0xad, 0x42, 0xe3, 0x84, 0x43, 0x68, + 0x0f, 0xef, 0xe0, 0x02, 0x39, 0x2c, 0x21, 0xf4, 0x63, 0x65, 0x04, 0x80, 0x3e, 0x8b, 0x7d, 0xc2, 0xc3, 0x8c, 0x0c, + 0x7c, 0x89, 0x5f, 0x29, 0x7d, 0x71, 0xf1, 0xfe, 0x4e, 0x66, 0x82, 0x5e, 0x25, 0x36, 0xbb, 0x94, 0xed, 0x98, 0x1f, + 0xfe, 0x17, 0x18, 0x0d, 0xc2, 0x6b, 0x4b, 0xb6, 0x2f, 0x3a, 0x66, 0xb9, 0x82, 0xa3, 0xb6, 0x74, 0x65, 0x96, 0xad, + 0xeb, 0x67, 0x35, 0xcc, 0xf4, 0x99, 0x72, 0x02, 0xb2, 0x2f, 0xe4, 0xee, 0xa7, 0xba, 0x62, 0x41, 0x8e, 0x26, 0xe3, + 0x29, 0x11, 0x83, 0x41, 0x2b, 0xf9, 0x10, 0x93, 0x87, 0xc3, 0x1d, 0xe6, 0x52, 0xe8, 0x7e, 0x78, 0x7d, 0x80, 0xfa, + 0x1a, 0x5b, 0x92, 0x6c, 0x2a, 0xf6, 0x17, 0x98, 0xc5, 0x02, 0x71, 0x74, 0xf0, 0x8b, 0xf3, 0x05, 0x80, 0x2c, 0xc3, + 0x32, 0xd3, 0xc2, 0xa2, 0x32, 0x55, 0x3e, 0xb2, 0x05, 0x93, 0x87, 0xe3, 0x99, 0xdf, 0x73, 0xc7, 0xe0, 0x10, 0x12, + 0x4d, 0xac, 0xf1, 0x8b, 0x9f, 0x05, 0xe3, 0x38, 0x94, 0x47, 0xb2, 0xf1, 0x5d, 0x49, 0xa2, 0xb1, 0x31, 0x55, 0xd6, + 0x57, 0x89, 0x6a, 0x98, 0x90, 0xc7, 0x05, 0xd9, 0x2f, 0xe8, 0xd2, 0x1f, 0x4b, 0x4c, 0xdf, 0x8f, 0xf7, 0x27, 0x63, + 0xf2, 0x38, 0x7e, 0x3c, 0x31, 0x70, 0xc3, 0x7e, 0x8e, 0x7c, 0xb8, 0x24, 0xfb, 0xcd, 0x2a, 0xc1, 0x14, 0xd5, 0xf4, + 0xcc, 0xaf, 0x24, 0x19, 0x2c, 0x07, 0xe9, 0xe3, 0x56, 0x5e, 0xac, 0x55, 0x8f, 0xf7, 0xfa, 0x90, 0x4f, 0x89, 0x68, + 0xdc, 0x18, 0xd6, 0xf4, 0x2a, 0xfe, 0x53, 0x16, 0x51, 0x29, 0x01, 0x91, 0x10, 0xd4, 0xdb, 0xd9, 0x45, 0x96, 0xc4, + 0x22, 0x8d, 0xd2, 0x9a, 0xd0, 0xf4, 0x88, 0x4d, 0xc6, 0xb3, 0x94, 0xa5, 0x87, 0x93, 0x67, 0xb3, 0xc9, 0xb3, 0xe8, + 0x60, 0x1c, 0xa5, 0x83, 0x01, 0x24, 0x1f, 0x8c, 0xc1, 0xc5, 0x0e, 0x7e, 0xb3, 0x03, 0x18, 0xba, 0x23, 0x64, 0x09, + 0x0b, 0x68, 0xda, 0x97, 0x35, 0x49, 0x0f, 0xe7, 0x85, 0xea, 0x49, 0x7c, 0x4b, 0xd7, 0x9e, 0x83, 0x8b, 0xdf, 0xc2, + 0x0b, 0xd7, 0xc2, 0x8b, 0xdd, 0x16, 0x0a, 0x4d, 0xb6, 0x0b, 0xf9, 0xff, 0xe3, 0x86, 0x71, 0xdf, 0x5d, 0xc2, 0x2c, + 0xae, 0xeb, 0x6c, 0xb4, 0x2a, 0x64, 0x25, 0xe1, 0x36, 0xa1, 0x44, 0x61, 0xa3, 0x78, 0xb5, 0xca, 0xb5, 0x8b, 0xd8, + 0xbc, 0xa2, 0x00, 0xee, 0x02, 0x71, 0x8a, 0x81, 0x85, 0x36, 0x06, 0x72, 0x9f, 0x78, 0x21, 0x99, 0x55, 0xfb, 0x98, + 0x7b, 0xe4, 0x9f, 0x21, 0x18, 0xa3, 0x8a, 0xa3, 0xf1, 0x4c, 0x61, 0x5d, 0x7c, 0x4e, 0xde, 0xfb, 0x6f, 0x1c, 0x45, + 0xf6, 0x68, 0x06, 0x3d, 0x41, 0xe4, 0x3c, 0xe2, 0xec, 0xc9, 0xe4, 0x65, 0xe0, 0x7e, 0x06, 0x2b, 0xfd, 0x75, 0xb7, + 0x19, 0x6b, 0xdb, 0xa3, 0x7b, 0x61, 0x84, 0xa2, 0x9f, 0xf0, 0x9d, 0xa9, 0x17, 0x70, 0x09, 0xd5, 0xc0, 0xae, 0x2f, + 0x2f, 0x79, 0x09, 0x20, 0x42, 0x99, 0xe8, 0xf7, 0x7b, 0x7f, 0x1a, 0x68, 0xd2, 0x92, 0x17, 0x6f, 0x32, 0x61, 0x9d, + 0x71, 0xa0, 0xa9, 0x40, 0xfd, 0x3f, 0x56, 0xf6, 0x99, 0x8e, 0xc9, 0xcc, 0x7f, 0x1c, 0x4e, 0x48, 0xd4, 0x7c, 0x4d, + 0x3e, 0x73, 0x9a, 0x7e, 0xe6, 0x8a, 0xf6, 0x1f, 0xc8, 0xcc, 0x0d, 0x87, 0x0c, 0xf5, 0x97, 0x8e, 0x79, 0x32, 0x7a, + 0x9d, 0x98, 0x1d, 0x09, 0x56, 0xcd, 0x20, 0x0a, 0x7b, 0x01, 0x0f, 0xea, 0x5a, 0x16, 0x4f, 0x61, 0xf6, 0x41, 0x8d, + 0x28, 0x0e, 0xd9, 0x78, 0x16, 0xca, 0x70, 0x02, 0xf6, 0xbd, 0x93, 0x31, 0xdc, 0x07, 0x64, 0xf8, 0xb1, 0x0a, 0xb1, + 0x73, 0x90, 0xf6, 0xb1, 0x42, 0xc5, 0x04, 0x40, 0x04, 0x42, 0xde, 0x7e, 0x5f, 0xaa, 0x24, 0x7c, 0x5d, 0x62, 0x4a, + 0xa1, 0x3e, 0xf8, 0x4f, 0xa4, 0xea, 0x8e, 0xe9, 0x57, 0xeb, 0xc7, 0x9f, 0x09, 0xc5, 0xa7, 0xbb, 0x94, 0xf8, 0x16, + 0x82, 0x3b, 0x4b, 0xd0, 0x41, 0x54, 0x68, 0xc6, 0xf6, 0x30, 0xbf, 0x2b, 0xee, 0xe7, 0x77, 0xc5, 0xff, 0x3b, 0x7e, + 0x57, 0x3c, 0xc4, 0x18, 0x56, 0x16, 0x1a, 0x7e, 0x16, 0x8c, 0x83, 0xe8, 0x3f, 0xe7, 0x13, 0xef, 0xe5, 0xa9, 0xaf, + 0x32, 0x31, 0xbd, 0x87, 0x69, 0xf6, 0x09, 0x0a, 0xc2, 0x2a, 0xee, 0xd2, 0x93, 0x75, 0x65, 0x6f, 0xad, 0x64, 0x88, + 0x79, 0x1e, 0x60, 0x8d, 0xc2, 0xca, 0x03, 0xba, 0x47, 0xd5, 0x06, 0x71, 0x22, 0x78, 0x18, 0x33, 0x2b, 0x7d, 0xdf, + 0x6e, 0x8d, 0x0a, 0xf3, 0x41, 0x2e, 0x0a, 0xb2, 0x9b, 0x8f, 0x67, 0xe3, 0x28, 0xc4, 0x06, 0xfc, 0xc7, 0x8c, 0x55, + 0x43, 0x36, 0xdf, 0xc9, 0x48, 0xed, 0x98, 0x3c, 0x4d, 0x76, 0x49, 0xef, 0x80, 0x77, 0xc8, 0xcf, 0xeb, 0x8f, 0x61, + 0x21, 0x0d, 0xbf, 0x25, 0x2f, 0xe3, 0x22, 0xab, 0x96, 0x57, 0x59, 0x82, 0x4c, 0x17, 0xbc, 0xf8, 0x62, 0xa6, 0xcb, + 0xfb, 0x58, 0x1f, 0x30, 0x9e, 0x52, 0xbc, 0x6e, 0x88, 0xd2, 0xd7, 0x2d, 0xcf, 0x0a, 0x75, 0x79, 0x52, 0x31, 0xdb, + 0xb3, 0x12, 0x9c, 0x4e, 0xc1, 0x04, 0x5f, 0xff, 0x74, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x0b, 0xb9, 0x32, + 0x58, 0x4e, 0x16, 0xba, 0x13, 0x30, 0x43, 0xa5, 0xc0, 0x0b, 0x14, 0xfc, 0x45, 0x03, 0x23, 0xfa, 0xca, 0xfd, 0x26, + 0x03, 0x83, 0x74, 0x69, 0x4e, 0x84, 0xb1, 0xe3, 0x76, 0x8a, 0xb4, 0x15, 0xe5, 0x8c, 0xb3, 0xf7, 0xea, 0x4a, 0x01, + 0x06, 0x78, 0x9b, 0x9b, 0xe8, 0x3c, 0x41, 0xaf, 0x05, 0xa5, 0xf3, 0x06, 0xee, 0x66, 0x19, 0x19, 0xe1, 0xe2, 0xe3, + 0xca, 0x63, 0xc1, 0x3d, 0xfb, 0x85, 0x58, 0x1a, 0xcd, 0x34, 0x18, 0xb3, 0x79, 0xc1, 0x02, 0x85, 0x0a, 0x14, 0x58, + 0xce, 0xb4, 0xa5, 0x69, 0x35, 0xe4, 0xfb, 0x07, 0x68, 0x6d, 0x5a, 0x0d, 0xf8, 0xfe, 0x41, 0x1d, 0x65, 0x87, 0x90, + 0xe5, 0xc8, 0xcf, 0xa0, 0x5e, 0xd7, 0x91, 0x49, 0x31, 0xd9, 0xfd, 0xfa, 0x52, 0x7f, 0x54, 0x37, 0xe0, 0xfa, 0x01, + 0x08, 0x60, 0x03, 0x70, 0x08, 0x54, 0x83, 0xa5, 0x11, 0xc1, 0xa2, 0x4c, 0xa1, 0x7d, 0x0d, 0xbd, 0x37, 0x1a, 0xfe, + 0x0b, 0xdc, 0x45, 0xe4, 0xca, 0xff, 0x04, 0x81, 0xbf, 0xa2, 0x4c, 0x2b, 0x53, 0xfc, 0x4f, 0xb4, 0x7a, 0x85, 0x72, + 0xd6, 0xb4, 0xe6, 0x83, 0x68, 0x4d, 0x84, 0x6a, 0xc6, 0x10, 0xfc, 0x5b, 0x59, 0xa6, 0x2d, 0x55, 0x95, 0xfa, 0xd0, + 0x78, 0xad, 0x15, 0xce, 0xf2, 0x71, 0xe4, 0xbd, 0xc6, 0xd0, 0xb1, 0x89, 0xb3, 0x94, 0x53, 0xa9, 0xb3, 0x4f, 0xfb, + 0x32, 0x72, 0x80, 0xd3, 0x09, 0x1b, 0x4f, 0x93, 0x43, 0x39, 0x4d, 0x1c, 0x64, 0x7e, 0xce, 0x30, 0xb2, 0xaa, 0x01, + 0x61, 0x51, 0x36, 0x94, 0xb6, 0x00, 0x93, 0x9c, 0x10, 0x32, 0xc5, 0x50, 0x14, 0xf9, 0x48, 0xf7, 0xc3, 0x7a, 0xb3, + 0xba, 0x2f, 0xde, 0x69, 0x80, 0xd3, 0x30, 0x81, 0x40, 0xe0, 0x45, 0x7c, 0x93, 0x89, 0x4b, 0xf0, 0x18, 0x1e, 0xc0, + 0x97, 0xe0, 0x26, 0x97, 0xb2, 0xdf, 0xab, 0x30, 0xc7, 0xb5, 0x05, 0x0c, 0x1a, 0xac, 0x1e, 0x44, 0x87, 0x4b, 0x69, + 0xb3, 0xab, 0x00, 0xb1, 0x31, 0x85, 0x58, 0x16, 0x6c, 0x6d, 0xd9, 0xb3, 0xef, 0x55, 0xd3, 0xd0, 0x3a, 0xe1, 0x58, + 0x5c, 0xe6, 0x10, 0x45, 0x65, 0x10, 0x83, 0x3b, 0x92, 0xc7, 0xe7, 0x3d, 0x12, 0xe1, 0x05, 0x01, 0xb7, 0xb2, 0x58, + 0x86, 0x2b, 0xba, 0x1c, 0xdd, 0xd2, 0xf5, 0xe8, 0x86, 0x8e, 0xe9, 0xe4, 0xef, 0x63, 0xb0, 0xc8, 0xd6, 0xa9, 0x77, + 0x74, 0x3d, 0x5a, 0xd2, 0x6f, 0xc7, 0xf4, 0xe0, 0x6f, 0x60, 0xc2, 0x87, 0x87, 0x09, 0xbd, 0x00, 0xc7, 0x2e, 0x52, + 0xa3, 0xa7, 0xa6, 0x6f, 0x70, 0x58, 0x8d, 0xf2, 0x21, 0x1f, 0xe5, 0x94, 0x8f, 0x8a, 0x61, 0x35, 0x02, 0x4f, 0xc7, + 0x6a, 0xc8, 0x47, 0x15, 0xe5, 0xa3, 0xf3, 0x61, 0x35, 0x3a, 0x27, 0xcd, 0xa6, 0xbf, 0xae, 0xf8, 0x55, 0xc9, 0x52, + 0xd8, 0x16, 0xb0, 0x7c, 0x3d, 0xaf, 0xa8, 0xd4, 0x5f, 0xd5, 0xe6, 0x64, 0xb6, 0x9c, 0xbd, 0xbd, 0xee, 0x72, 0x62, + 0xf1, 0xb8, 0x6d, 0x3a, 0x5c, 0x7d, 0x39, 0x51, 0x27, 0xbd, 0x42, 0x7e, 0x18, 0x4f, 0x85, 0x3a, 0x87, 0xc0, 0x4c, + 0x62, 0x16, 0xc6, 0x0c, 0x9b, 0xa9, 0xd3, 0x40, 0x81, 0x93, 0x8d, 0x3c, 0x17, 0xc5, 0x6c, 0x94, 0x53, 0x78, 0x1f, + 0x13, 0x12, 0x09, 0x38, 0xab, 0x8e, 0xaa, 0x51, 0x01, 0x31, 0x47, 0x58, 0x88, 0x8f, 0xd0, 0x2f, 0xf5, 0x91, 0x87, + 0x04, 0x9e, 0x61, 0x5f, 0x8b, 0x41, 0x0c, 0x47, 0xbc, 0xad, 0xac, 0x9a, 0x85, 0x09, 0x54, 0x56, 0x0d, 0x4b, 0x53, + 0x59, 0x41, 0xb3, 0x51, 0xe5, 0x57, 0x56, 0xe1, 0x18, 0x25, 0x84, 0x44, 0xa5, 0xae, 0x0c, 0xd4, 0x27, 0x09, 0x0b, + 0x4b, 0x5d, 0xd9, 0xb9, 0xfa, 0xe8, 0xdc, 0xaf, 0xec, 0x1c, 0x5c, 0x48, 0x07, 0x89, 0x7f, 0x95, 0xca, 0xd3, 0xf6, + 0x75, 0xb0, 0xb1, 0xaa, 0xe8, 0x86, 0xdf, 0x56, 0x45, 0x1c, 0x95, 0xd4, 0xc5, 0x80, 0xc6, 0x85, 0x11, 0x49, 0xaa, + 0xd7, 0x28, 0xf8, 0x43, 0x82, 0xa8, 0x34, 0x06, 0xaf, 0xce, 0xa4, 0x6b, 0xa5, 0x56, 0x54, 0x0c, 0xca, 0x41, 0x01, + 0xf7, 0xa7, 0xbc, 0xb5, 0x90, 0xbe, 0x87, 0x88, 0xca, 0x50, 0xde, 0xe0, 0x1f, 0x18, 0x3c, 0x99, 0xad, 0xd2, 0x30, + 0x19, 0xdd, 0xd1, 0x78, 0xb4, 0x44, 0x38, 0x18, 0xb6, 0x4e, 0x15, 0xde, 0xfa, 0x05, 0xa4, 0xdf, 0xd2, 0x78, 0x74, + 0x43, 0x53, 0x6b, 0x73, 0x6a, 0xa0, 0xae, 0x7a, 0x63, 0x7a, 0x1b, 0xc1, 0xeb, 0xbb, 0x68, 0x49, 0x61, 0x2b, 0x1d, + 0xe7, 0xd9, 0xa5, 0x88, 0x52, 0x8a, 0x08, 0x84, 0x6b, 0x44, 0x0e, 0x5c, 0x6a, 0xb4, 0xc1, 0xf5, 0x00, 0xca, 0xd0, + 0x70, 0x81, 0xcb, 0x41, 0x3c, 0x5a, 0x7a, 0x64, 0x6a, 0xa9, 0x2f, 0xb2, 0x08, 0x1f, 0xed, 0x6c, 0xb4, 0x14, 0xcf, + 0x88, 0x85, 0x71, 0x05, 0x43, 0xa8, 0x0b, 0x2b, 0x4d, 0x41, 0xd2, 0x05, 0x8e, 0xec, 0x85, 0x45, 0x15, 0x6e, 0xc0, + 0xb4, 0xe8, 0x0e, 0xcc, 0xa3, 0x40, 0xe1, 0xe0, 0x12, 0xa4, 0x9f, 0x50, 0xb6, 0x73, 0x94, 0x26, 0x87, 0x37, 0x41, + 0xe9, 0xce, 0x04, 0x21, 0xed, 0xea, 0x26, 0x5b, 0xd2, 0x37, 0xd8, 0xde, 0xa1, 0x53, 0x51, 0x41, 0xf5, 0xb9, 0x05, + 0x93, 0x25, 0x1b, 0x84, 0x2d, 0x61, 0x7a, 0xa6, 0xd7, 0x80, 0x3d, 0xbd, 0x7f, 0xb0, 0x33, 0xdf, 0xc5, 0xec, 0xd3, + 0x7e, 0x19, 0x8d, 0x95, 0x05, 0x6f, 0x6e, 0x89, 0xdd, 0x92, 0x8d, 0xa7, 0xcb, 0xc3, 0x72, 0xba, 0x44, 0x62, 0x67, + 0xe8, 0x16, 0xe3, 0xf3, 0xe5, 0x82, 0x26, 0x78, 0xb6, 0xb1, 0x6a, 0xbe, 0x34, 0x68, 0x29, 0x29, 0xc3, 0xf5, 0xb6, + 0x44, 0xff, 0x7f, 0x75, 0xf1, 0x4b, 0x01, 0x5e, 0x82, 0xb1, 0x00, 0x10, 0xee, 0xc1, 0xb4, 0x20, 0xb5, 0x51, 0x36, + 0x96, 0x69, 0x98, 0xe2, 0x22, 0x30, 0x29, 0xfd, 0x7e, 0x98, 0xb3, 0x94, 0x78, 0xd0, 0xa1, 0xee, 0xd4, 0x4e, 0x7d, + 0x21, 0x08, 0xf0, 0x48, 0xea, 0x1c, 0x9b, 0xfc, 0x7d, 0x3c, 0x0b, 0xd4, 0x40, 0x04, 0x51, 0x76, 0x88, 0x8f, 0x18, + 0xb8, 0x28, 0xd2, 0x71, 0x3b, 0x5d, 0x11, 0x17, 0xbb, 0xc7, 0x2c, 0xc4, 0x49, 0xc2, 0x5c, 0xb3, 0x6c, 0xc8, 0xaa, + 0x08, 0x13, 0x74, 0x61, 0x60, 0x96, 0x37, 0x64, 0xd5, 0xfe, 0x01, 0x44, 0x6a, 0xb5, 0x65, 0xac, 0xba, 0xca, 0xf8, + 0x16, 0x80, 0xac, 0x19, 0x63, 0x07, 0x7f, 0x1b, 0xcf, 0xd4, 0x37, 0x51, 0xc8, 0x8f, 0x0e, 0xfe, 0x06, 0xc9, 0x87, + 0xdf, 0x22, 0x33, 0x07, 0xc9, 0x8d, 0x82, 0x2e, 0x9b, 0xb3, 0xae, 0xa1, 0x34, 0x71, 0xed, 0x95, 0x7a, 0xed, 0x49, + 0xb3, 0xf6, 0x0a, 0x74, 0xa7, 0x36, 0xbc, 0x87, 0xb2, 0x9d, 0x05, 0x13, 0x74, 0x34, 0xbb, 0x03, 0x1d, 0xbc, 0x53, + 0x04, 0xbd, 0x4c, 0x42, 0xe3, 0x11, 0xaa, 0x8c, 0x7a, 0x61, 0x47, 0x76, 0xb3, 0x2e, 0x99, 0x67, 0xc0, 0x1c, 0xdb, + 0x73, 0x48, 0x0c, 0x73, 0x75, 0x50, 0xa7, 0xac, 0x1c, 0xe6, 0x78, 0x00, 0xaf, 0x99, 0x1c, 0x8a, 0x41, 0xae, 0x51, + 0xbe, 0x2f, 0x58, 0x31, 0x2c, 0x07, 0xb9, 0xe6, 0x66, 0xa6, 0xcd, 0xd8, 0xb4, 0x89, 0x0e, 0xcf, 0xbc, 0x62, 0x47, + 0xab, 0x1e, 0xf0, 0xb1, 0xe0, 0xc9, 0xec, 0x7b, 0x3e, 0xbe, 0x01, 0x4e, 0x66, 0x73, 0x1b, 0x2d, 0xe9, 0x5d, 0x94, + 0xd2, 0x9b, 0x68, 0x4d, 0x97, 0xd1, 0x85, 0x31, 0x31, 0x4e, 0x6a, 0x38, 0x07, 0xa0, 0x55, 0x00, 0x89, 0xa7, 0x7e, + 0xbd, 0xe7, 0x49, 0x15, 0x2e, 0x69, 0x0a, 0x6e, 0xc3, 0xbe, 0x7d, 0xe6, 0x95, 0x2f, 0x91, 0xda, 0x20, 0xc6, 0x9a, + 0x35, 0x54, 0xdc, 0x78, 0xeb, 0x3e, 0x12, 0x35, 0xec, 0x5c, 0x17, 0x9b, 0xa8, 0x1a, 0x4e, 0xa6, 0x25, 0x20, 0xb6, + 0x96, 0xc3, 0xa1, 0x3b, 0x42, 0x76, 0x8f, 0x1f, 0x1d, 0xe8, 0xb9, 0x27, 0x2d, 0xb6, 0x6d, 0xcb, 0x1f, 0x18, 0xc2, + 0x94, 0x7e, 0xfe, 0xc8, 0x07, 0xc4, 0x8a, 0x4b, 0x38, 0x1b, 0x81, 0x3a, 0x5a, 0xa1, 0xd3, 0xef, 0x55, 0x58, 0xe8, + 0x03, 0x7c, 0x73, 0x1b, 0x25, 0xf4, 0x2e, 0xca, 0x3d, 0xb2, 0xb6, 0xac, 0x99, 0x9c, 0x9e, 0x65, 0x21, 0x6f, 0x1f, + 0xe8, 0xe5, 0x02, 0x40, 0xb4, 0x06, 0xb1, 0x2f, 0x75, 0x3d, 0x00, 0xa7, 0x21, 0x34, 0x09, 0x8d, 0xe0, 0xaa, 0x82, + 0x30, 0x02, 0xae, 0x24, 0xfc, 0x0d, 0x26, 0x2a, 0xf0, 0x05, 0xb8, 0xc8, 0xa4, 0x69, 0xce, 0x83, 0xda, 0x1f, 0xc9, + 0xd3, 0xa2, 0xed, 0xed, 0x0a, 0xa3, 0x09, 0xc6, 0x9e, 0x68, 0x9f, 0x47, 0xca, 0x51, 0x5c, 0x24, 0x61, 0x36, 0xba, + 0x55, 0xe7, 0x39, 0xcd, 0x46, 0x77, 0xfa, 0x57, 0x45, 0xc7, 0xf4, 0x3b, 0x1d, 0xd0, 0x46, 0x49, 0xdf, 0x3a, 0xce, + 0x06, 0xb4, 0x5e, 0x2c, 0x8d, 0xff, 0xb5, 0x1c, 0xdd, 0x52, 0x39, 0xba, 0xf3, 0x2d, 0xa9, 0x26, 0xd3, 0xe2, 0x50, + 0xa0, 0x21, 0x55, 0xe7, 0xf7, 0x05, 0xf0, 0x73, 0xa5, 0xf1, 0x9d, 0x36, 0xdf, 0x7b, 0xed, 0x3f, 0xef, 0xe4, 0x09, + 0x14, 0x4b, 0x54, 0xb0, 0x6a, 0x04, 0x76, 0xec, 0xeb, 0x3c, 0x2e, 0xcc, 0x28, 0xc5, 0xd4, 0x9a, 0xf4, 0x63, 0xe0, + 0x8a, 0x69, 0xaf, 0x00, 0x57, 0xcb, 0xed, 0x56, 0xc5, 0xd0, 0x84, 0x3d, 0x3b, 0x86, 0xa8, 0xe7, 0xc6, 0x31, 0x4a, + 0x36, 0xdc, 0x03, 0x62, 0x2d, 0xf3, 0x56, 0x2e, 0x01, 0x09, 0xbc, 0xf5, 0x30, 0x29, 0x00, 0x63, 0xb0, 0x5c, 0x12, + 0x9d, 0xc7, 0x43, 0x9f, 0x50, 0x2f, 0x34, 0xea, 0x84, 0x6c, 0x6c, 0x09, 0x1c, 0x7f, 0x58, 0x1f, 0x02, 0xc1, 0xab, + 0x3c, 0xd7, 0x5f, 0x69, 0x5d, 0x7f, 0xa9, 0xf4, 0xdc, 0xb1, 0x5c, 0xd7, 0xcf, 0xda, 0xd4, 0xe8, 0x15, 0x58, 0xf8, + 0x6e, 0x94, 0x79, 0x24, 0xb7, 0x08, 0xa9, 0x0a, 0xac, 0xd4, 0x2d, 0x24, 0x98, 0x7f, 0x25, 0x67, 0xab, 0x32, 0x5f, + 0x3d, 0xf2, 0xa0, 0x9c, 0x4d, 0x4f, 0x7f, 0x43, 0x82, 0x76, 0xd7, 0x91, 0xe6, 0xf1, 0x16, 0x1d, 0x3e, 0xbb, 0xd6, + 0x12, 0x73, 0x27, 0x51, 0xf1, 0x7c, 0x0a, 0xd8, 0xea, 0x45, 0x76, 0xa5, 0x7c, 0xac, 0x76, 0x71, 0xfc, 0xcc, 0xf9, + 0x13, 0x57, 0xe1, 0x5a, 0x34, 0x94, 0x20, 0xe0, 0xcd, 0x61, 0xec, 0x0a, 0x55, 0x40, 0x43, 0x73, 0x03, 0xc7, 0xb9, + 0x1a, 0x56, 0x9a, 0x80, 0x69, 0x29, 0x8f, 0x0e, 0x70, 0x68, 0xf2, 0xa8, 0xdd, 0x34, 0xac, 0x0c, 0x5d, 0x6b, 0xf4, + 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, 0xdf, 0x3f, 0x18, 0x54, 0xf8, 0x93, 0x34, 0x47, 0xa3, 0x9d, 0x1b, 0xee, 0x34, + 0x02, 0x33, 0x57, 0x72, 0x45, 0x76, 0x47, 0xc9, 0xcb, 0xef, 0xe9, 0x85, 0x05, 0xf4, 0xe7, 0x3f, 0x17, 0x13, 0x4e, + 0x5a, 0x62, 0x42, 0xb4, 0x74, 0xd0, 0xa2, 0x83, 0x1d, 0xe5, 0x95, 0x7d, 0x89, 0x97, 0xce, 0xf1, 0xbf, 0xaf, 0xc7, + 0xda, 0x55, 0x20, 0xb4, 0x3a, 0xb9, 0xdf, 0x9e, 0x2c, 0x10, 0x35, 0xa0, 0x9a, 0x5d, 0x95, 0xa3, 0x4c, 0x3b, 0x2b, + 0xb2, 0x69, 0xc8, 0x5c, 0x77, 0xb3, 0x34, 0x6c, 0x26, 0x3b, 0x16, 0x96, 0x19, 0x06, 0x6b, 0xa7, 0x8a, 0x3e, 0x07, + 0x2d, 0x3f, 0x82, 0x17, 0x4d, 0xe5, 0x99, 0xcf, 0x66, 0x19, 0xf1, 0x02, 0x9d, 0x73, 0x2a, 0x16, 0x4d, 0xe9, 0x58, + 0xb9, 0xdd, 0x96, 0x68, 0x2c, 0x51, 0x46, 0x41, 0x50, 0xdb, 0x20, 0xec, 0xba, 0x74, 0x4f, 0xfa, 0xb4, 0x8b, 0x4f, + 0x2b, 0xd0, 0xf7, 0xf8, 0x3e, 0x03, 0x89, 0xa9, 0x27, 0x79, 0xa8, 0x1a, 0xcd, 0xd1, 0xc9, 0xb3, 0x38, 0xd5, 0xf8, + 0xfc, 0x4a, 0x76, 0xd6, 0xbc, 0x5b, 0x8d, 0x29, 0xfe, 0x23, 0x75, 0xfb, 0xce, 0x65, 0x68, 0xa2, 0xbf, 0x96, 0x07, + 0x2d, 0x85, 0x05, 0xc7, 0x6d, 0xe3, 0xaf, 0xdf, 0x66, 0x0e, 0x31, 0x2c, 0x5d, 0x0e, 0x6f, 0x42, 0x87, 0xee, 0xae, + 0xb2, 0x33, 0xd7, 0x07, 0xd4, 0xa9, 0x8b, 0x75, 0x1b, 0x50, 0xb2, 0xe4, 0xdd, 0x3a, 0x3d, 0xb1, 0xd2, 0x77, 0xfb, + 0xe1, 0xce, 0x3c, 0x6a, 0x76, 0x77, 0xbb, 0x9d, 0x90, 0xb6, 0x7d, 0x30, 0xde, 0x97, 0xb0, 0x10, 0xe7, 0x1d, 0xb6, + 0xf7, 0x7d, 0x58, 0x3d, 0xe6, 0x83, 0x5f, 0x70, 0x9c, 0x61, 0xf4, 0x33, 0x65, 0xe8, 0xf3, 0xaa, 0x90, 0x57, 0xaa, + 0x53, 0xbe, 0xd0, 0xad, 0x65, 0xea, 0xfd, 0x36, 0x7e, 0xdb, 0x0a, 0x10, 0xe3, 0x75, 0xc5, 0x4a, 0xf1, 0x86, 0x56, + 0x18, 0xd7, 0xc0, 0x6d, 0x72, 0xa8, 0xa5, 0x5a, 0x20, 0xea, 0xf2, 0x93, 0xc7, 0x3c, 0x32, 0xea, 0x4c, 0xf8, 0xee, + 0x31, 0xf7, 0xa5, 0x6b, 0xbb, 0x4d, 0xfc, 0x5c, 0xd3, 0xf6, 0x77, 0x07, 0xba, 0xa3, 0x75, 0x0f, 0x37, 0xcf, 0xe6, + 0xe7, 0x91, 0xf9, 0x62, 0x80, 0xcd, 0xda, 0x65, 0x5c, 0x76, 0x0c, 0xf7, 0xbd, 0xe9, 0xc1, 0x58, 0x40, 0x20, 0x31, + 0x43, 0x2f, 0x03, 0x17, 0xb8, 0xc0, 0x5d, 0x61, 0xc0, 0x10, 0xd7, 0xb4, 0xe4, 0x4c, 0x5b, 0xd9, 0xfa, 0xc8, 0xdb, + 0xa8, 0x10, 0xac, 0xeb, 0x8e, 0x9b, 0x24, 0x87, 0xe0, 0x84, 0x2d, 0xf7, 0xbe, 0xf6, 0xda, 0x19, 0xfe, 0x63, 0x20, + 0x9c, 0x5b, 0xa2, 0x67, 0xd4, 0xf6, 0x58, 0xab, 0x7b, 0x0d, 0xaf, 0x72, 0x17, 0x79, 0xd6, 0x6f, 0xe6, 0xa5, 0x61, + 0x5f, 0xf0, 0x5a, 0x0a, 0x0e, 0x8d, 0xed, 0x56, 0xb8, 0xc5, 0xe2, 0x1d, 0xad, 0x56, 0xd6, 0xda, 0x6a, 0xaf, 0x95, + 0x8a, 0xde, 0xbf, 0xe6, 0x38, 0x71, 0x96, 0xc2, 0xf6, 0xc3, 0x87, 0x0b, 0x76, 0x4d, 0x00, 0x83, 0x16, 0x93, 0x05, + 0x4a, 0x50, 0xc9, 0x5a, 0xd5, 0x6e, 0xa7, 0xc4, 0x2f, 0xf7, 0x8b, 0x2e, 0xb3, 0x9d, 0xc7, 0xaf, 0x9b, 0xb4, 0xcf, + 0x7c, 0x8e, 0x7e, 0x98, 0xdf, 0x59, 0x27, 0x25, 0x67, 0x18, 0xd7, 0xf2, 0xff, 0xab, 0xe8, 0x65, 0x91, 0xa5, 0xd1, + 0xc6, 0xf0, 0x60, 0x36, 0xd4, 0xa6, 0x0f, 0x8d, 0x51, 0xb9, 0x65, 0xa3, 0x88, 0x68, 0x75, 0x0b, 0x82, 0x19, 0xc5, + 0x7d, 0x89, 0x36, 0xaf, 0x54, 0x59, 0x78, 0x87, 0xcf, 0x6c, 0xf4, 0x86, 0xed, 0x09, 0xa1, 0x7c, 0xf7, 0xb4, 0x30, + 0xab, 0x96, 0x8a, 0x06, 0xdb, 0x25, 0xbc, 0x8b, 0x51, 0xa5, 0x9f, 0x30, 0xd9, 0xb2, 0x60, 0xaa, 0xff, 0xdf, 0x17, + 0x59, 0xda, 0xa6, 0xe8, 0xc0, 0x74, 0x36, 0x7d, 0x3a, 0xe9, 0x06, 0xd7, 0x19, 0xb0, 0x88, 0x60, 0x4b, 0x85, 0xe3, + 0x51, 0x6a, 0x37, 0x48, 0x98, 0x08, 0x6e, 0xa2, 0x5e, 0x76, 0xb4, 0x4c, 0xc9, 0xaa, 0x80, 0xe7, 0x57, 0xae, 0x32, + 0x1d, 0x47, 0x43, 0xbf, 0x7f, 0x95, 0x9a, 0xd0, 0xaf, 0xd4, 0x4b, 0x55, 0x9c, 0x87, 0x51, 0x75, 0xa8, 0x30, 0x46, + 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x84, 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x82, 0x81, 0x5c, 0x6a, 0x83, 0x7a, + 0x4d, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, 0x42, 0x2f, 0x58, 0xe9, 0xdf, 0x85, 0xd6, 0x20, 0x50, 0x94, 0xcd, 0x94, + 0xe9, 0xb9, 0x6e, 0xe7, 0x05, 0x4d, 0x68, 0x41, 0x57, 0xa4, 0x06, 0x7d, 0xaf, 0x93, 0xb3, 0xa3, 0x93, 0x9d, 0x99, + 0xf5, 0x98, 0x15, 0xc3, 0xc9, 0x34, 0x86, 0x6b, 0x5a, 0xec, 0xae, 0x69, 0xcb, 0xe6, 0x8d, 0xab, 0xb1, 0x71, 0x1a, + 0xb4, 0x0b, 0xa4, 0x6d, 0x9a, 0xdb, 0x4f, 0x3d, 0x6e, 0x7f, 0x5d, 0xb3, 0xe5, 0xb4, 0xb7, 0xde, 0x6e, 0x7b, 0x29, + 0xd8, 0x88, 0x7a, 0x7c, 0xfc, 0x5a, 0x49, 0xd7, 0x2d, 0x97, 0x9f, 0xc2, 0xb3, 0xc7, 0xd7, 0x2f, 0x7d, 0x70, 0x39, + 0x5a, 0xb5, 0xb9, 0xfb, 0xe5, 0x2e, 0xb2, 0xdc, 0x17, 0x0d, 0x2d, 0xd7, 0x33, 0xd4, 0x24, 0xcf, 0x46, 0x7b, 0x87, + 0x5a, 0xb0, 0x9c, 0x75, 0x13, 0x9e, 0x18, 0xec, 0xd8, 0xab, 0xc6, 0xe6, 0xa8, 0xcc, 0x25, 0xab, 0x41, 0x02, 0x7d, + 0x92, 0x67, 0x9a, 0xfe, 0x41, 0x86, 0xf9, 0xe8, 0x96, 0xe6, 0x80, 0x2b, 0x56, 0xd9, 0x4b, 0x06, 0xa9, 0xab, 0xf6, + 0x12, 0x57, 0xbe, 0xc2, 0x21, 0xd9, 0xe0, 0x93, 0x61, 0xaa, 0x3e, 0xbb, 0xe4, 0xc1, 0xff, 0xdb, 0xaa, 0x55, 0x7a, + 0x6e, 0x92, 0x1b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, 0x4c, 0x0c, 0x12, 0xf0, 0xd4, 0x2e, 0x86, 0x6a, 0x54, 0x15, 0xb1, + 0x28, 0x73, 0x13, 0x73, 0xec, 0xde, 0xae, 0xa1, 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xe6, 0x0e, 0x6c, 0x05, 0x3a, + 0x3a, 0xd1, 0x5c, 0x86, 0x99, 0xb9, 0x0c, 0xd3, 0xae, 0xad, 0x02, 0xc3, 0xab, 0xb6, 0x4a, 0xa2, 0x5c, 0x8d, 0x7a, + 0xdc, 0xcc, 0x52, 0xb3, 0x17, 0x79, 0xf7, 0x9a, 0xf4, 0x24, 0xfe, 0x74, 0xe9, 0xc9, 0xeb, 0x61, 0x40, 0xe4, 0x97, + 0x2c, 0x0d, 0xd7, 0x28, 0x08, 0x4e, 0xad, 0x76, 0x20, 0xcd, 0x47, 0x80, 0xcc, 0x8f, 0xd3, 0xf0, 0x9d, 0x16, 0xe7, + 0x90, 0x8d, 0xd2, 0x38, 0xb1, 0xa5, 0x51, 0x0f, 0xc1, 0x9d, 0xf7, 0x8a, 0xc7, 0x10, 0xf8, 0xf0, 0x03, 0x6e, 0x06, + 0x15, 0xdd, 0x96, 0x98, 0x28, 0x6d, 0x1e, 0x75, 0xcb, 0x47, 0x0d, 0xa1, 0x92, 0x95, 0xe1, 0xc5, 0xd0, 0xde, 0x1d, + 0x81, 0x51, 0xe5, 0x04, 0x32, 0xc3, 0x62, 0xff, 0x60, 0x98, 0x2a, 0x41, 0xd1, 0x50, 0x0e, 0x97, 0x28, 0x07, 0xc4, + 0x24, 0x10, 0x18, 0x15, 0x83, 0x54, 0x57, 0xa6, 0x5e, 0x0c, 0x52, 0x7d, 0xab, 0x22, 0xf5, 0x59, 0x16, 0x56, 0x54, + 0xb7, 0x88, 0x8e, 0xe9, 0x50, 0xd2, 0xa5, 0xd9, 0xa9, 0xb9, 0x96, 0x5e, 0xa8, 0xe5, 0xf8, 0x5c, 0xa7, 0xc1, 0x28, + 0x9e, 0xba, 0x14, 0xfd, 0x56, 0xed, 0x67, 0xff, 0x2d, 0xa6, 0xd4, 0x88, 0x4d, 0xed, 0x2d, 0x62, 0x58, 0xb5, 0x1f, + 0xb2, 0x2a, 0x07, 0xed, 0x2e, 0x28, 0x1b, 0x2b, 0xe3, 0x3c, 0xdf, 0x08, 0x66, 0x0e, 0xda, 0xc6, 0xaa, 0xe9, 0x43, + 0x6f, 0xc4, 0xa8, 0xbd, 0x31, 0xd5, 0xb8, 0x27, 0xf0, 0xd3, 0x06, 0x4d, 0xf7, 0x22, 0xcf, 0x51, 0x8f, 0xbc, 0xfb, + 0x9f, 0x39, 0xb2, 0x33, 0xf9, 0x2c, 0x96, 0x49, 0xdd, 0x3e, 0x26, 0xc1, 0x42, 0xd5, 0x31, 0xba, 0x70, 0x23, 0x53, + 0xda, 0xcf, 0x9d, 0xe9, 0x47, 0x3c, 0x93, 0x87, 0xed, 0xd0, 0xa8, 0x2f, 0x0d, 0x6b, 0x49, 0x11, 0xf5, 0x05, 0xbd, + 0x35, 0xd5, 0xd1, 0x01, 0xf5, 0x3a, 0x02, 0xab, 0x2b, 0xda, 0xa0, 0x06, 0x60, 0x32, 0xae, 0x6d, 0x6d, 0x3e, 0x07, + 0x53, 0x5b, 0x55, 0xc1, 0x33, 0xba, 0x2b, 0x94, 0xee, 0x4d, 0xea, 0xba, 0x35, 0xc4, 0x16, 0x30, 0x20, 0x70, 0xa3, + 0xa7, 0xa6, 0x3f, 0x68, 0xa2, 0x02, 0xd0, 0xa0, 0x71, 0x3b, 0xd3, 0x39, 0x12, 0xfd, 0x4e, 0x6d, 0xda, 0x66, 0xaa, + 0x57, 0x95, 0x0f, 0xa0, 0xe2, 0xcf, 0xd2, 0xd9, 0x85, 0x19, 0xb1, 0x00, 0xc6, 0x3d, 0x70, 0xa6, 0x7a, 0xc7, 0x19, + 0x58, 0x4f, 0xe4, 0x79, 0x56, 0xf2, 0x44, 0x0a, 0x98, 0x11, 0x79, 0x75, 0x25, 0x05, 0x0c, 0x83, 0x1a, 0x00, 0xb4, + 0x68, 0x2e, 0xa3, 0x09, 0x7f, 0x52, 0xd3, 0xfb, 0xf2, 0xf0, 0x27, 0x3a, 0xd7, 0x37, 0xe3, 0x1a, 0x0c, 0x95, 0xd7, + 0x15, 0xdf, 0xc9, 0xf4, 0x0d, 0x7f, 0xea, 0x65, 0x5a, 0xca, 0x75, 0xb1, 0x93, 0xe5, 0xc9, 0x37, 0xfc, 0x99, 0xce, + 0x73, 0xf0, 0xb4, 0xa6, 0x69, 0x7c, 0xb7, 0x93, 0xe5, 0xef, 0xdf, 0x3c, 0xb5, 0x79, 0x9e, 0x8c, 0x6b, 0x7a, 0xc3, + 0xf9, 0x47, 0x97, 0x69, 0xa2, 0xab, 0x1a, 0x3f, 0xfd, 0xbb, 0xcd, 0xf5, 0xb4, 0xa6, 0x57, 0x52, 0x54, 0xcb, 0x9d, + 0xa2, 0x0e, 0xbe, 0x39, 0xf8, 0x3b, 0xff, 0xc6, 0x74, 0xef, 0xa0, 0xa6, 0x7f, 0xad, 0xe3, 0xa2, 0xe2, 0xc5, 0x4e, + 0x71, 0x7f, 0xfb, 0xfb, 0xdf, 0x9f, 0xda, 0x8c, 0x4f, 0x6b, 0x7a, 0xc7, 0xe3, 0x8e, 0xb6, 0x4f, 0x9e, 0x3d, 0xe5, + 0x7f, 0xab, 0x6b, 0xfa, 0x2b, 0xf3, 0x83, 0xa3, 0x1e, 0x67, 0x9e, 0x1e, 0x3e, 0x91, 0x4d, 0xd4, 0x80, 0xa1, 0x87, + 0x06, 0x90, 0x4b, 0xab, 0xa6, 0xb9, 0xc7, 0x2b, 0x17, 0xdc, 0xbe, 0xcf, 0xe2, 0x34, 0x5e, 0xc1, 0x41, 0xb0, 0x41, + 0xe3, 0xac, 0x02, 0x38, 0x55, 0xe0, 0x3d, 0xa3, 0x92, 0x66, 0xa5, 0xfc, 0x07, 0xe7, 0x1f, 0x61, 0xd0, 0x10, 0xd2, + 0x46, 0x45, 0x06, 0x3a, 0x59, 0xe9, 0xc8, 0x46, 0xe8, 0xbf, 0xd9, 0x8c, 0x83, 0xe3, 0xc3, 0xe8, 0xf5, 0xfb, 0x61, + 0xc1, 0x44, 0x58, 0x10, 0x42, 0xff, 0x0c, 0x0b, 0x70, 0x28, 0x29, 0x98, 0x97, 0xcf, 0xf8, 0x9e, 0x6b, 0xa3, 0xb0, + 0x10, 0x44, 0x77, 0x91, 0x7d, 0x40, 0xd5, 0xa3, 0xef, 0xd0, 0x0d, 0xf1, 0xb2, 0xc2, 0x82, 0xa1, 0x55, 0x0d, 0xcc, + 0x10, 0x14, 0xff, 0x86, 0x87, 0x12, 0x7c, 0xe2, 0x01, 0x3e, 0x7a, 0x4c, 0x66, 0x5c, 0x5d, 0x6b, 0x4f, 0x2e, 0xc2, + 0x82, 0x06, 0xba, 0xed, 0x10, 0x74, 0x20, 0xf2, 0x5f, 0x80, 0xa7, 0xc0, 0xc0, 0x87, 0x85, 0x5d, 0xca, 0x5d, 0x7f, + 0xf5, 0x5f, 0x0d, 0xeb, 0xe8, 0xc2, 0x8f, 0xfe, 0x6a, 0x5d, 0xd8, 0x33, 0x32, 0x95, 0x87, 0xe5, 0x70, 0x32, 0x1d, + 0x0c, 0xa4, 0x8b, 0xe3, 0x76, 0x9c, 0xcd, 0x7f, 0x9d, 0xcb, 0xc5, 0x02, 0x75, 0xdf, 0x38, 0xaf, 0x33, 0xfd, 0x37, + 0xd2, 0xce, 0x07, 0x6f, 0x8e, 0x7f, 0x3f, 0x3b, 0x3d, 0x7e, 0x05, 0xce, 0x07, 0x1f, 0x5e, 0x7e, 0xff, 0xf2, 0xbd, + 0x0a, 0xee, 0xae, 0xe6, 0xbc, 0xdf, 0x77, 0x52, 0x9f, 0x90, 0x0f, 0x2b, 0xb2, 0x1f, 0xc6, 0x8f, 0x0b, 0x65, 0xf4, + 0x40, 0x0e, 0x99, 0x85, 0x42, 0x86, 0x2a, 0x6a, 0xfb, 0xbb, 0x1c, 0x4e, 0x3c, 0x30, 0x8b, 0xbb, 0x86, 0x08, 0xd7, + 0x6f, 0xb9, 0x0d, 0xb2, 0x26, 0x8f, 0xbc, 0x7e, 0x70, 0x32, 0x95, 0x8e, 0x2d, 0x2c, 0x18, 0x94, 0x0d, 0x6d, 0x3a, + 0xce, 0xe6, 0xc5, 0xc2, 0xb6, 0xcb, 0x2d, 0x90, 0x51, 0x9a, 0x5d, 0x5c, 0x84, 0x0a, 0xba, 0xfa, 0x08, 0x34, 0x00, + 0xa6, 0x51, 0x85, 0x6b, 0x11, 0x9f, 0xf9, 0xe5, 0x47, 0x63, 0xaf, 0x79, 0xb7, 0xa8, 0x7b, 0x32, 0xcd, 0xaa, 0x1a, + 0x03, 0x3a, 0x98, 0x50, 0xee, 0x06, 0xdd, 0x04, 0x93, 0x51, 0x6d, 0xf9, 0x75, 0x5e, 0x2d, 0x4c, 0x73, 0xdc, 0x30, + 0x54, 0x5e, 0xc9, 0x6b, 0xd9, 0x40, 0x64, 0x20, 0x19, 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0x7d, 0x6f, 0xd7, 0x3b, 0x7e, + 0x93, 0x4b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x58, 0x28, 0xe7, 0x72, 0xc9, 0xf8, 0x5c, 0x2c, 0x8e, 0xc0, 0xed, + 0x7c, 0x2e, 0x16, 0x11, 0x06, 0xe5, 0xcb, 0x20, 0x56, 0x09, 0xd8, 0xbd, 0x38, 0x08, 0xdf, 0x4e, 0x68, 0x03, 0xbb, + 0x81, 0x24, 0x1b, 0x94, 0x76, 0xa5, 0x21, 0xca, 0x9d, 0xf2, 0x68, 0x83, 0xc8, 0x43, 0xac, 0x9a, 0x57, 0x6d, 0x4f, + 0x36, 0x73, 0x31, 0xc1, 0x55, 0x16, 0x33, 0x39, 0x8d, 0x0f, 0x59, 0x31, 0x8d, 0xa1, 0x94, 0x38, 0x4d, 0xc3, 0x98, + 0x4e, 0xa8, 0x20, 0x24, 0x61, 0x7c, 0x1e, 0x2f, 0x68, 0x82, 0x52, 0x82, 0x10, 0x42, 0x7e, 0x8c, 0xd0, 0x36, 0x07, + 0x96, 0xbc, 0xdd, 0x7e, 0x9e, 0x7e, 0x6e, 0xc7, 0x70, 0x19, 0x15, 0xa1, 0x1b, 0x74, 0xd6, 0xf0, 0x6f, 0x44, 0x05, + 0x8d, 0xb1, 0x62, 0x08, 0x02, 0x5e, 0x60, 0x54, 0xc2, 0x82, 0xc4, 0xac, 0x82, 0x28, 0x02, 0xe5, 0x3c, 0x5e, 0xb0, + 0x82, 0x36, 0x6d, 0x4e, 0x63, 0x6d, 0x12, 0xd4, 0x73, 0x58, 0x6a, 0x7b, 0x52, 0xa9, 0x10, 0x7b, 0x7c, 0x26, 0xa2, + 0x6b, 0x6d, 0x68, 0x00, 0x28, 0x50, 0x4a, 0x2e, 0x7e, 0xf3, 0xe5, 0x1e, 0x6e, 0x0a, 0xfa, 0x9f, 0x6d, 0x4c, 0xb4, + 0xb3, 0x5c, 0x1d, 0x7a, 0xf3, 0x05, 0x8d, 0xf3, 0x1c, 0x42, 0xb1, 0x19, 0x04, 0x72, 0x91, 0x55, 0x10, 0xd1, 0xe2, + 0x2e, 0x30, 0x21, 0xe1, 0xa0, 0x4d, 0xbf, 0x42, 0x6a, 0x43, 0x4c, 0xae, 0x3c, 0x31, 0xb0, 0xdb, 0x2a, 0x41, 0xc0, + 0x91, 0x9e, 0x67, 0x9f, 0x9a, 0x18, 0x6b, 0x9a, 0x9a, 0x99, 0x78, 0x1b, 0x0a, 0xd1, 0xa0, 0x05, 0xd1, 0x0c, 0xde, + 0x3f, 0x57, 0x1c, 0xaf, 0x3a, 0xf0, 0x03, 0xde, 0xb9, 0x38, 0xf3, 0x6a, 0xe6, 0x11, 0x39, 0xf5, 0x51, 0x8e, 0xe8, + 0x97, 0x3c, 0xac, 0x46, 0x3a, 0x19, 0x63, 0x25, 0x71, 0xd0, 0xdb, 0x60, 0xc1, 0x9c, 0xd0, 0x15, 0x0f, 0x2d, 0x1f, + 0xff, 0x0a, 0x99, 0x8c, 0x92, 0x1a, 0x2b, 0xba, 0xd2, 0x62, 0xc4, 0x79, 0x0d, 0xb3, 0x34, 0x59, 0xd1, 0xc5, 0x42, + 0x93, 0x66, 0xa1, 0x4c, 0x03, 0x7c, 0x02, 0x2d, 0x46, 0xee, 0xa1, 0xa6, 0x0d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, + 0xf7, 0xd0, 0xe1, 0xff, 0xe7, 0xd9, 0x05, 0x22, 0xed, 0xcd, 0x4d, 0x64, 0x3c, 0x52, 0x37, 0x70, 0x50, 0x8c, 0x8f, + 0x7d, 0x33, 0xf1, 0x0b, 0x67, 0xf4, 0x21, 0xa9, 0x7c, 0x87, 0x0f, 0x96, 0x3f, 0xde, 0xd4, 0xcc, 0xca, 0x08, 0xd6, + 0xc3, 0x76, 0x8b, 0x0b, 0xa2, 0xed, 0x02, 0x48, 0x3d, 0xe3, 0xd5, 0xc2, 0x37, 0x5e, 0x8d, 0xef, 0x31, 0x5e, 0x75, + 0x67, 0x6a, 0x98, 0x93, 0x0d, 0xea, 0xb3, 0x94, 0x3c, 0x3f, 0x47, 0x99, 0x60, 0xd3, 0xe5, 0xac, 0xa4, 0x2a, 0x95, + 0xd0, 0x5e, 0xec, 0x67, 0x8c, 0x6f, 0x09, 0xc6, 0x59, 0x71, 0x18, 0x09, 0x54, 0xa5, 0x92, 0x3a, 0xec, 0x15, 0xa0, + 0x1e, 0x83, 0xf7, 0x06, 0x43, 0xd4, 0xc8, 0xd8, 0x4d, 0x1b, 0x08, 0x0d, 0x8d, 0xf5, 0x68, 0xcf, 0x5a, 0x8f, 0x6e, + 0xb7, 0x95, 0xf1, 0xb7, 0x93, 0xeb, 0x22, 0x41, 0x54, 0x61, 0x35, 0x9a, 0x00, 0x6f, 0x9a, 0xd8, 0xdb, 0x92, 0x53, + 0x5a, 0x60, 0xf8, 0xec, 0x3f, 0xc3, 0xd2, 0xa9, 0x24, 0x4a, 0x32, 0x2b, 0xa3, 0x81, 0x3b, 0x07, 0x5f, 0xc4, 0x15, + 0xac, 0x01, 0x88, 0xe4, 0x88, 0x1e, 0xae, 0x7f, 0x86, 0xd2, 0x65, 0x96, 0x64, 0x26, 0x21, 0x33, 0x17, 0x69, 0x3b, + 0xeb, 0x60, 0xe2, 0x4c, 0x6a, 0xbd, 0xb1, 0x90, 0x43, 0x83, 0xfc, 0x00, 0xca, 0x10, 0x87, 0x4f, 0x3e, 0x98, 0x50, + 0xa9, 0x42, 0xa9, 0x36, 0xba, 0xd9, 0x0d, 0xbc, 0xf2, 0x21, 0xbb, 0xe2, 0x65, 0x15, 0x5f, 0xad, 0x8c, 0x25, 0x31, + 0x67, 0xf7, 0xb9, 0xed, 0x51, 0x61, 0x5e, 0xbd, 0x7d, 0xf9, 0xfd, 0x71, 0xe3, 0xd5, 0x2e, 0xe2, 0x68, 0x08, 0xb6, + 0x15, 0x63, 0x8c, 0xde, 0xe2, 0xd3, 0x60, 0xa2, 0x5c, 0x23, 0xd0, 0xbb, 0x14, 0xf4, 0xdb, 0x5f, 0xea, 0x09, 0x78, + 0xc5, 0xf5, 0xf2, 0x4b, 0x3e, 0x02, 0x96, 0xa8, 0xd0, 0xb3, 0xc2, 0xdc, 0xac, 0xcc, 0xee, 0xed, 0x56, 0x64, 0xa6, + 0x5d, 0x69, 0x64, 0x20, 0x5e, 0x6d, 0x87, 0xb1, 0x70, 0xe9, 0x9a, 0x6e, 0x07, 0xbb, 0x5a, 0x7a, 0x96, 0xc8, 0xdb, + 0x6d, 0x09, 0x1d, 0xb2, 0x03, 0xee, 0xbd, 0x8c, 0x6f, 0xe1, 0x65, 0xe9, 0x75, 0xb3, 0x19, 0x3c, 0x01, 0xcc, 0x84, + 0x0b, 0x67, 0x59, 0x1c, 0x33, 0x9e, 0x84, 0x2a, 0x36, 0x57, 0x43, 0xe4, 0xad, 0x08, 0xad, 0xd9, 0x5f, 0xa1, 0x18, + 0x81, 0xdd, 0xc9, 0xe9, 0xc7, 0x6c, 0x35, 0x5b, 0x02, 0x6a, 0xfe, 0x55, 0x26, 0x80, 0xe6, 0xda, 0xb5, 0x60, 0x9b, + 0x42, 0x9b, 0xeb, 0xfa, 0x79, 0xbc, 0x8a, 0x13, 0x50, 0xdd, 0x80, 0xb7, 0xc8, 0x9d, 0x16, 0x5d, 0x19, 0x74, 0x51, + 0xfa, 0x40, 0x39, 0x96, 0x14, 0x3a, 0xfa, 0xde, 0x13, 0xea, 0xdc, 0x33, 0x80, 0x4b, 0x1a, 0x35, 0x4f, 0xb5, 0x94, + 0xb1, 0x00, 0x58, 0xe8, 0x60, 0xa6, 0xc8, 0x56, 0x74, 0x6b, 0x30, 0x29, 0xe0, 0xad, 0x01, 0xfe, 0x10, 0x59, 0xa5, + 0xee, 0x8a, 0x65, 0x58, 0x7a, 0xf6, 0xd7, 0xfd, 0x7e, 0xec, 0xd9, 0x5f, 0x5f, 0x68, 0x5a, 0x17, 0xb7, 0x1b, 0x40, + 0x6a, 0x0c, 0x20, 0x72, 0xac, 0x07, 0xc2, 0x44, 0x14, 0x6b, 0xfa, 0xfe, 0x1d, 0x9b, 0x2c, 0x0a, 0x84, 0x7e, 0xa7, + 0x5e, 0x4f, 0x4a, 0x02, 0x3a, 0xb5, 0x8a, 0x1d, 0x0d, 0xb4, 0xd9, 0x07, 0x04, 0x44, 0xf5, 0x33, 0xb2, 0xf9, 0x42, + 0x39, 0x17, 0xab, 0xf0, 0xe1, 0x63, 0x0a, 0x01, 0x85, 0x3b, 0x6a, 0x74, 0xde, 0x86, 0x48, 0xa0, 0xac, 0x50, 0xc4, + 0x9a, 0x17, 0x6b, 0x49, 0xc8, 0x7c, 0xbc, 0x40, 0xc1, 0x95, 0x03, 0x76, 0xe5, 0x6c, 0x32, 0x2c, 0x23, 0xce, 0xc2, + 0xfb, 0xbf, 0x99, 0x2c, 0x08, 0x6a, 0xae, 0xfc, 0x40, 0x8e, 0x3b, 0x99, 0x1a, 0x7b, 0xaa, 0x51, 0x83, 0x60, 0x32, + 0x82, 0xc0, 0x70, 0xc3, 0x2f, 0xf8, 0xf8, 0x60, 0x41, 0x40, 0x45, 0x66, 0xcd, 0x42, 0xcc, 0x8b, 0xc3, 0x27, 0x80, + 0x1a, 0x33, 0x3a, 0x78, 0x06, 0xa0, 0xb0, 0x10, 0x10, 0x7d, 0x0c, 0x32, 0x5a, 0x01, 0xbf, 0x85, 0xfa, 0xdd, 0x3a, + 0xf1, 0x7d, 0xe8, 0x57, 0x41, 0x2f, 0x62, 0x60, 0x38, 0xa2, 0xc9, 0x7e, 0xc8, 0x07, 0x93, 0x01, 0x68, 0x4b, 0xbc, + 0xdd, 0xd7, 0xd2, 0x8a, 0x9b, 0xd3, 0xa5, 0xd3, 0xfd, 0x93, 0x36, 0x41, 0x12, 0xa9, 0x64, 0xa5, 0x22, 0x06, 0x10, + 0xca, 0x52, 0x6d, 0x93, 0x25, 0x58, 0x56, 0x98, 0x25, 0xcd, 0x0d, 0x4a, 0xe2, 0xee, 0x66, 0xe0, 0x18, 0x35, 0xeb, + 0x38, 0x2c, 0x5b, 0x6e, 0xd4, 0x00, 0x9f, 0x93, 0xb0, 0xc2, 0xde, 0x70, 0x66, 0xd2, 0x3b, 0xd3, 0xe1, 0xea, 0x98, + 0xb3, 0x37, 0x1c, 0xc1, 0x38, 0x12, 0xbc, 0xf1, 0xd0, 0x25, 0xd3, 0x50, 0x91, 0x29, 0xe3, 0x60, 0xda, 0x03, 0xdc, + 0x7b, 0x0e, 0xc6, 0x61, 0x6c, 0x50, 0x59, 0x52, 0x9f, 0x7a, 0x77, 0x21, 0x10, 0xa4, 0xb5, 0x5e, 0xe6, 0x33, 0x3c, + 0x3d, 0x23, 0x94, 0xfd, 0x21, 0x87, 0x2f, 0xc0, 0x8e, 0x82, 0x1c, 0x4d, 0xf8, 0xb3, 0xc7, 0xbb, 0x81, 0xaa, 0xf8, + 0x20, 0xd8, 0x8b, 0x45, 0xba, 0x17, 0x0c, 0x04, 0xfc, 0x2a, 0xf8, 0x5e, 0x25, 0xe5, 0xde, 0x45, 0x5c, 0xec, 0xc5, + 0xab, 0xb8, 0xa8, 0xf6, 0x6e, 0xb2, 0x6a, 0xb9, 0x67, 0x3a, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x7b, 0xc1, + 0xa0, 0x30, 0x53, 0xbb, 0x62, 0x65, 0xe3, 0x38, 0x33, 0x21, 0xca, 0x82, 0x66, 0x80, 0xb0, 0xc6, 0x69, 0x00, 0x7c, + 0xea, 0x9a, 0xa5, 0xf4, 0x02, 0xc3, 0x0d, 0x88, 0xe9, 0x1a, 0xfa, 0x00, 0x3c, 0xf2, 0x9a, 0xc6, 0xb0, 0x04, 0x2e, + 0x06, 0x03, 0xb2, 0x86, 0xc8, 0x05, 0x6b, 0x6a, 0x83, 0x38, 0x84, 0x6b, 0x65, 0xa7, 0xbd, 0x0b, 0xcc, 0xb4, 0xdd, + 0x02, 0xa2, 0xf2, 0x84, 0xf4, 0xfb, 0xf6, 0x1b, 0xea, 0x5f, 0xb0, 0x97, 0x60, 0x7f, 0x55, 0x54, 0x61, 0x22, 0x95, + 0xe6, 0xfb, 0x92, 0x1d, 0x0d, 0x54, 0xc4, 0xe1, 0x1d, 0x47, 0x8a, 0x36, 0x2a, 0x97, 0x65, 0x4f, 0x96, 0x0d, 0x5f, + 0x89, 0x2b, 0xee, 0xfc, 0xb8, 0x2a, 0x29, 0xf3, 0x2a, 0x5b, 0x29, 0xf6, 0x6f, 0xc6, 0x35, 0xf7, 0x07, 0xd6, 0x9f, + 0xcd, 0x57, 0x70, 0x6d, 0xf5, 0xde, 0x35, 0xb9, 0x46, 0xe4, 0x2c, 0xa1, 0x5c, 0x52, 0xdb, 0x3c, 0xbc, 0xa5, 0xef, + 0xf3, 0xab, 0x6f, 0x33, 0x9d, 0xc6, 0x67, 0x15, 0x16, 0x2e, 0x44, 0x2b, 0x82, 0x43, 0x43, 0x2e, 0x9a, 0x47, 0x80, + 0xb9, 0xf6, 0xd9, 0x0a, 0x0a, 0x52, 0x9f, 0x55, 0xe8, 0xdd, 0x0a, 0x09, 0xaf, 0x34, 0xbb, 0xf4, 0x30, 0x90, 0x32, + 0x6e, 0x0f, 0x2d, 0x61, 0xd2, 0xf2, 0x22, 0xbc, 0xf7, 0x9a, 0x9b, 0xdc, 0x8b, 0x10, 0xa3, 0x17, 0x79, 0x76, 0x02, + 0xc6, 0xba, 0x4b, 0x76, 0x36, 0x3c, 0xf1, 0x1b, 0x9e, 0xb3, 0x16, 0x8d, 0xa6, 0x4b, 0x96, 0xf4, 0xfb, 0x31, 0x98, + 0x78, 0xa7, 0x2c, 0x87, 0x5f, 0xf9, 0x82, 0xae, 0x19, 0x60, 0x8a, 0xd1, 0x0b, 0x48, 0x48, 0x11, 0x89, 0x64, 0xad, + 0x4e, 0x92, 0xcf, 0x74, 0x17, 0x80, 0xd1, 0x2f, 0x66, 0x69, 0xb4, 0xbc, 0xd7, 0xcc, 0x02, 0xc9, 0x33, 0xf4, 0x5d, + 0x07, 0xdb, 0x1b, 0xfb, 0x20, 0xe5, 0xfc, 0x50, 0x4c, 0x07, 0x03, 0x4e, 0x34, 0xdc, 0x78, 0xa9, 0xc4, 0xb5, 0xba, + 0xc5, 0x1d, 0xc3, 0x58, 0xea, 0xdb, 0x22, 0x06, 0x07, 0xec, 0xa2, 0x95, 0xdd, 0x3e, 0xc0, 0xbe, 0x72, 0xbc, 0x4b, + 0x95, 0xdd, 0xe9, 0x31, 0xd3, 0x5c, 0xb6, 0x9a, 0x74, 0x52, 0x71, 0x3f, 0x91, 0x6f, 0x72, 0x07, 0x5d, 0x2e, 0xc7, + 0x9a, 0xb7, 0x1c, 0x80, 0x8a, 0x7e, 0xa4, 0xa8, 0xee, 0x17, 0x38, 0xc2, 0x3c, 0x58, 0xb7, 0xf9, 0x64, 0xdf, 0x14, + 0x38, 0x44, 0x9e, 0xb4, 0xd1, 0x14, 0xd0, 0xbd, 0x8b, 0xc7, 0x5d, 0xfd, 0xb6, 0x74, 0x17, 0x28, 0xd1, 0x4e, 0xc5, + 0x0d, 0x3f, 0x26, 0xea, 0x74, 0xa6, 0x0d, 0xa1, 0x7f, 0x65, 0xc4, 0xfd, 0xa5, 0x71, 0x15, 0x6f, 0x7a, 0x97, 0xcf, + 0x38, 0xd4, 0xd9, 0x0d, 0xa1, 0x00, 0x5c, 0xb5, 0xa7, 0x53, 0x37, 0x86, 0xf4, 0x4a, 0x89, 0x6e, 0x83, 0x83, 0xdd, + 0xeb, 0x33, 0x8e, 0xa2, 0x1f, 0xa3, 0x46, 0xbe, 0x89, 0xc4, 0x63, 0x39, 0x88, 0x1f, 0x17, 0x74, 0x19, 0x89, 0xc7, + 0xc5, 0x20, 0x7e, 0x2c, 0xeb, 0x7a, 0xf7, 0x5c, 0xb9, 0xbf, 0x8f, 0xc8, 0xb3, 0xee, 0xec, 0xa5, 0x12, 0x36, 0x06, + 0x9e, 0x5d, 0x0b, 0x08, 0xa7, 0xe0, 0x89, 0x6c, 0x2d, 0x7d, 0xe8, 0xdc, 0xee, 0x63, 0xcb, 0x24, 0x41, 0xd0, 0xf3, + 0x36, 0x9b, 0x44, 0xb1, 0xb3, 0xcd, 0xa3, 0x0f, 0xa7, 0x40, 0x42, 0xb7, 0xdb, 0x66, 0x5d, 0xad, 0x01, 0xc5, 0x34, + 0x1c, 0xf3, 0xfd, 0x62, 0x74, 0xe3, 0xbb, 0xeb, 0xef, 0x17, 0xa3, 0x25, 0x19, 0x4e, 0xcc, 0xe4, 0xc7, 0x47, 0xe3, + 0x59, 0x1c, 0x4d, 0xea, 0x8e, 0xd3, 0x42, 0xe3, 0x9f, 0x7a, 0xb7, 0x50, 0x04, 0x4e, 0xc5, 0x08, 0x8e, 0x9c, 0x0a, + 0xe5, 0xa4, 0xd4, 0xc0, 0xf0, 0xdf, 0xab, 0x76, 0xb4, 0x69, 0x6f, 0xe2, 0x2a, 0x59, 0x66, 0xe2, 0x52, 0x87, 0x0f, + 0xd7, 0xd1, 0xc5, 0x6d, 0x40, 0x3b, 0xef, 0x32, 0xed, 0xf8, 0x75, 0xd2, 0xa0, 0x27, 0xae, 0x66, 0x06, 0xdc, 0xba, + 0x1f, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, 0xc4, 0xdc, 0xfe, 0x4d, 0xd9, 0xfc, 0x2a, 0xda, 0xe7, 0xc8, 0x48, + 0xd9, 0x26, 0x23, 0x15, 0x18, 0x61, 0x4a, 0x91, 0xc4, 0x55, 0x08, 0x81, 0xec, 0xbf, 0xa4, 0xb8, 0x16, 0x4b, 0xef, + 0x35, 0x08, 0x13, 0x6c, 0x17, 0xb4, 0x5f, 0xdd, 0xce, 0x6d, 0xa5, 0xc5, 0x1e, 0xa9, 0xef, 0x73, 0x67, 0xbb, 0xa2, + 0xc9, 0xdf, 0x97, 0x0d, 0x68, 0x03, 0x88, 0xf2, 0xbe, 0x3e, 0x2a, 0x81, 0x93, 0x11, 0x37, 0x94, 0x18, 0xbd, 0xa0, + 0xab, 0x13, 0xb9, 0x67, 0xa7, 0xe6, 0x4d, 0xc5, 0x4c, 0xc5, 0x95, 0x6f, 0xf6, 0xcc, 0x7f, 0x30, 0x14, 0x54, 0x80, + 0x81, 0xb7, 0x39, 0xe3, 0xd1, 0x81, 0xee, 0xc6, 0xe8, 0xb4, 0x60, 0xb3, 0xa0, 0x2e, 0xeb, 0xa6, 0x8d, 0x07, 0x8d, + 0x38, 0x28, 0x8a, 0x55, 0xa1, 0x46, 0xc2, 0x13, 0x81, 0x80, 0x29, 0xbb, 0xe2, 0x91, 0x11, 0xd4, 0xf4, 0x26, 0x14, + 0x36, 0x14, 0xfc, 0x55, 0xa2, 0x9a, 0xde, 0x84, 0x36, 0x99, 0x38, 0xcd, 0x20, 0x82, 0x19, 0xb1, 0xdd, 0x6f, 0x01, + 0x6d, 0x6e, 0xcd, 0x68, 0x53, 0xd7, 0x56, 0x5b, 0x85, 0x5c, 0x52, 0xa4, 0x2c, 0xff, 0x9d, 0x9a, 0x0a, 0x4a, 0x6a, + 0xb9, 0xe8, 0x4d, 0x9a, 0x2e, 0x7a, 0x3c, 0x33, 0x92, 0x40, 0xe5, 0x96, 0x3b, 0x46, 0x7f, 0x08, 0x0b, 0x3c, 0x62, + 0xe2, 0xc4, 0x82, 0xb9, 0xd5, 0x11, 0xcb, 0xe6, 0x62, 0x31, 0x5a, 0x49, 0x08, 0x1b, 0x7c, 0xc8, 0xb2, 0x79, 0xa9, + 0x1f, 0x42, 0x5f, 0x58, 0x7a, 0x02, 0x76, 0xb1, 0xc1, 0x4a, 0x96, 0x01, 0xf8, 0x5e, 0xd0, 0xcd, 0x4a, 0x96, 0x91, + 0x54, 0xdd, 0x8f, 0x6b, 0x2c, 0x41, 0xa5, 0x15, 0x2a, 0x2d, 0xa9, 0xb1, 0x20, 0xf0, 0x55, 0xd5, 0xe5, 0x43, 0xb2, + 0xab, 0x40, 0x3d, 0x75, 0xd4, 0x80, 0x53, 0xa0, 0xaa, 0xc0, 0x82, 0x24, 0xa8, 0x0c, 0x5d, 0x15, 0x98, 0x56, 0x60, + 0x9a, 0xa9, 0xc2, 0x45, 0x99, 0x1d, 0x4a, 0xb3, 0x5e, 0xf2, 0x59, 0x3c, 0x08, 0x93, 0x61, 0x4c, 0x1e, 0x23, 0xd4, + 0xfe, 0x7e, 0x1e, 0xc5, 0x5a, 0x2e, 0xb9, 0x72, 0x7e, 0xf1, 0x37, 0x9f, 0xb1, 0xd7, 0x3d, 0xc3, 0x60, 0x01, 0xce, + 0xd2, 0xf6, 0x2a, 0x13, 0xef, 0x64, 0x2b, 0x38, 0x0e, 0x66, 0x51, 0x0e, 0xab, 0x9e, 0x1c, 0xd1, 0x5c, 0xe4, 0xda, + 0xbb, 0x08, 0x91, 0x83, 0xcc, 0x1e, 0x03, 0xec, 0x46, 0xf8, 0x3a, 0xb4, 0x36, 0xb7, 0xba, 0x42, 0xfc, 0x8d, 0x12, + 0x89, 0x9f, 0xa5, 0xfc, 0xb8, 0x5e, 0xa9, 0x5c, 0x95, 0xc1, 0x63, 0xd5, 0xcd, 0xe0, 0x99, 0xf6, 0x3d, 0xd6, 0xfe, + 0xad, 0xed, 0xe6, 0x78, 0xef, 0xc1, 0x83, 0xd6, 0xff, 0xd6, 0x93, 0x10, 0xda, 0x2b, 0x27, 0xa9, 0x3b, 0x6a, 0xf4, + 0xcc, 0x64, 0x8d, 0xa8, 0x84, 0xa9, 0xdd, 0xa9, 0x1c, 0x03, 0x35, 0x1d, 0xc0, 0xb5, 0x44, 0x4d, 0xd0, 0x93, 0x82, + 0x8d, 0xe1, 0x88, 0xb3, 0x38, 0x68, 0x87, 0x31, 0x8a, 0x97, 0x73, 0x25, 0x5e, 0xce, 0x8f, 0x18, 0x07, 0x68, 0x2d, + 0x40, 0xaa, 0xd7, 0xb0, 0x9f, 0xb9, 0x82, 0x05, 0x36, 0x77, 0xbe, 0x03, 0x0b, 0x64, 0x88, 0x93, 0xcd, 0x71, 0xb2, + 0xc7, 0xb5, 0x9e, 0x7b, 0x81, 0x8f, 0x93, 0x7a, 0xe1, 0xd5, 0x55, 0xb6, 0xeb, 0x5a, 0xb2, 0x72, 0x5e, 0x0c, 0x26, + 0x10, 0x94, 0xa5, 0x9c, 0x17, 0xc3, 0xc9, 0x82, 0xe6, 0xf0, 0x63, 0xd1, 0x40, 0x87, 0x58, 0x0e, 0x12, 0xb8, 0x74, + 0xf6, 0x18, 0xf0, 0x86, 0x52, 0x8b, 0xbb, 0xb1, 0x8e, 0x1c, 0xeb, 0x28, 0xf6, 0xc3, 0x18, 0x70, 0x65, 0x9d, 0xc0, + 0xfb, 0xfe, 0xeb, 0x63, 0x13, 0x90, 0x55, 0xbb, 0xc2, 0xab, 0x51, 0xee, 0xba, 0xd2, 0xe8, 0x4b, 0x4a, 0x4f, 0x78, + 0xc1, 0x53, 0xc9, 0x76, 0xdb, 0x33, 0x70, 0xb6, 0xc4, 0x43, 0xe2, 0x1d, 0x23, 0x7a, 0x31, 0x6d, 0x64, 0xe6, 0x04, + 0xce, 0x6c, 0x77, 0xd9, 0xc6, 0xfc, 0xd8, 0x01, 0x0e, 0x16, 0x41, 0x48, 0xdc, 0x10, 0x86, 0x89, 0x1d, 0x95, 0x43, + 0x2d, 0x84, 0xeb, 0x5a, 0x78, 0x1d, 0xa7, 0x65, 0x0c, 0x2e, 0xd2, 0xda, 0x36, 0xf1, 0x1e, 0xba, 0xee, 0xf9, 0x31, + 0xb7, 0x3a, 0x46, 0x5b, 0x48, 0xbf, 0x1d, 0x9d, 0xde, 0x73, 0x18, 0x80, 0xa6, 0x07, 0xb3, 0xaa, 0x7d, 0x26, 0x71, + 0x73, 0xda, 0x09, 0x42, 0x22, 0x10, 0x45, 0xe9, 0x8c, 0x30, 0xfd, 0x3b, 0xcd, 0x65, 0x15, 0xad, 0x1e, 0xe4, 0x99, + 0x43, 0x9e, 0x85, 0xde, 0xf6, 0xa0, 0x55, 0x73, 0x37, 0x18, 0x27, 0x6e, 0xb7, 0x77, 0xfe, 0xdf, 0xb2, 0xae, 0xad, + 0xd6, 0x88, 0xc7, 0xed, 0xea, 0x07, 0x8d, 0xbd, 0xda, 0x53, 0x31, 0x60, 0x56, 0xd2, 0x3b, 0xa3, 0x4a, 0x5e, 0x64, + 0xbc, 0xc4, 0x93, 0x6a, 0xd5, 0xf0, 0xf1, 0xbe, 0xc9, 0x46, 0xe6, 0x81, 0x4c, 0x01, 0xf1, 0xfc, 0x26, 0x35, 0xea, + 0xe3, 0x14, 0x25, 0xe0, 0xef, 0x74, 0x7c, 0x23, 0xfa, 0xd1, 0xbe, 0xb8, 0xe4, 0xd5, 0xc9, 0x8d, 0x30, 0x2f, 0x5e, + 0x58, 0x9d, 0x3f, 0x7d, 0x53, 0xf8, 0xd0, 0xe1, 0xa8, 0xbd, 0x83, 0x22, 0x4b, 0x26, 0x8e, 0x26, 0x46, 0xd6, 0x26, + 0x66, 0x1f, 0x15, 0x5c, 0x4c, 0x54, 0xa1, 0x67, 0x9d, 0x3d, 0x61, 0x0a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x16, + 0x0c, 0xd4, 0x69, 0x4a, 0x88, 0x1e, 0x8a, 0x19, 0xc6, 0x2b, 0x06, 0x50, 0x98, 0x42, 0x81, 0x28, 0x3a, 0xfb, 0x70, + 0xa0, 0x09, 0xfd, 0xfe, 0x4d, 0xaa, 0x33, 0xd0, 0xb2, 0x9e, 0x4a, 0x10, 0xd5, 0x41, 0xb4, 0x55, 0x5e, 0x84, 0x3f, + 0x2e, 0x69, 0x99, 0xd1, 0xa5, 0xa0, 0xa9, 0xa0, 0x49, 0x46, 0x2f, 0xb8, 0x12, 0x15, 0x5f, 0x08, 0xa6, 0x68, 0xbb, + 0x21, 0xec, 0xff, 0x6a, 0xd0, 0xf5, 0x56, 0xac, 0x35, 0xb4, 0x3b, 0x41, 0x46, 0x68, 0xbe, 0xd0, 0x41, 0xc8, 0x50, + 0x39, 0x09, 0x5d, 0xab, 0x34, 0x5e, 0x81, 0x4b, 0xa6, 0xd9, 0x68, 0x19, 0x97, 0x61, 0x60, 0xbf, 0x0a, 0x2c, 0x26, + 0x07, 0x26, 0x9d, 0xae, 0xcf, 0x9f, 0xcb, 0xab, 0x95, 0x14, 0x5c, 0x54, 0x0a, 0xa2, 0xdf, 0xe0, 0xbe, 0x9b, 0xb8, + 0xea, 0xac, 0x59, 0x2b, 0x7d, 0xe8, 0x5b, 0x9f, 0xb5, 0x71, 0x5f, 0x18, 0x1c, 0x83, 0x9d, 0x8f, 0x88, 0x81, 0x34, + 0xa8, 0x74, 0x8b, 0x43, 0x13, 0xa0, 0x4b, 0x87, 0x14, 0xb2, 0x64, 0x2a, 0x53, 0x25, 0xa8, 0xf8, 0xc6, 0xef, 0xa5, + 0xac, 0x46, 0x7f, 0xad, 0x79, 0x71, 0x77, 0xca, 0x73, 0x8e, 0x63, 0x14, 0x24, 0xb1, 0xb8, 0x8e, 0xcb, 0x80, 0xf8, + 0x96, 0x57, 0xc1, 0x41, 0x6a, 0xc2, 0xc6, 0xec, 0x54, 0x8d, 0x5a, 0x2f, 0x89, 0xbe, 0x32, 0xca, 0x37, 0x06, 0x43, + 0x13, 0x51, 0x05, 0x7d, 0xaf, 0xd5, 0x3d, 0xad, 0x6e, 0x58, 0x40, 0xfc, 0xb9, 0xd2, 0x0b, 0xb5, 0x5e, 0x37, 0x63, + 0x6e, 0x98, 0x08, 0x41, 0xa3, 0x27, 0xf5, 0xa2, 0xf6, 0xdc, 0xd2, 0x54, 0x64, 0xdc, 0x68, 0x93, 0xf3, 0x4b, 0x90, + 0xf1, 0x39, 0x73, 0xa1, 0x49, 0x5d, 0x53, 0x05, 0x55, 0x18, 0x6d, 0x6e, 0x1b, 0xe9, 0xf4, 0x0e, 0xdc, 0xd9, 0x8c, + 0xd9, 0x91, 0x76, 0x69, 0xac, 0x69, 0xc1, 0xcb, 0x95, 0x14, 0x25, 0x84, 0x71, 0xee, 0x8d, 0xe9, 0x55, 0x9c, 0x89, + 0x2a, 0xce, 0xc4, 0x71, 0xb9, 0xe2, 0x49, 0xf5, 0x1e, 0x6e, 0x71, 0xca, 0xea, 0xa6, 0x2e, 0xe1, 0x4a, 0x97, 0xec, + 0x61, 0x30, 0x35, 0x15, 0xf7, 0xd8, 0x19, 0x5c, 0x54, 0x7f, 0x44, 0x4b, 0x89, 0xb1, 0x50, 0x75, 0xf1, 0xf1, 0x79, + 0x29, 0xf3, 0x75, 0x05, 0xda, 0xdd, 0x8b, 0x2a, 0x3a, 0x78, 0xba, 0xba, 0x9d, 0xaa, 0x1b, 0x4c, 0xf4, 0xf4, 0x60, + 0x75, 0xdb, 0xcb, 0xae, 0x56, 0xb2, 0xa8, 0x62, 0x51, 0x4d, 0x15, 0x22, 0x59, 0x12, 0xe7, 0x49, 0x38, 0x19, 0x8f, + 0xbf, 0xda, 0x1b, 0xee, 0x41, 0x06, 0x32, 0xfd, 0x34, 0x54, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x95, 0xea, 0x6e, + 0x17, 0x8d, 0x26, 0x35, 0xd6, 0x33, 0x4c, 0xf4, 0xcc, 0x8c, 0xf8, 0xed, 0x2a, 0x16, 0x29, 0xc4, 0xaf, 0xd3, 0xc5, + 0x1f, 0x3c, 0x1d, 0x37, 0xca, 0xb7, 0x9f, 0x3e, 0xab, 0xff, 0xa8, 0x4d, 0x58, 0x6b, 0xd3, 0xee, 0xe7, 0x7f, 0x1c, + 0xaa, 0xf9, 0x3e, 0x3a, 0xdc, 0xd7, 0x3f, 0xfe, 0xa8, 0xeb, 0xe9, 0x9b, 0x22, 0x9c, 0xff, 0x33, 0x54, 0xf3, 0x79, + 0x5c, 0x14, 0xf1, 0x5d, 0x0d, 0x91, 0x3c, 0x85, 0xf3, 0x26, 0xa1, 0xde, 0x36, 0xa0, 0x07, 0x64, 0x7a, 0x21, 0x18, + 0x7c, 0xf3, 0xbe, 0x0a, 0x03, 0x5e, 0xae, 0x86, 0x5c, 0x54, 0x59, 0x75, 0x37, 0xc4, 0x3c, 0x01, 0x7e, 0x6a, 0x78, + 0xb3, 0xe7, 0x85, 0x21, 0x36, 0x17, 0x05, 0xe7, 0x9f, 0x78, 0xa8, 0x8c, 0xa3, 0xc7, 0x68, 0x1c, 0x3d, 0xa6, 0x6a, + 0x30, 0x26, 0xdf, 0x50, 0xdd, 0x99, 0xc9, 0x37, 0x60, 0x82, 0x94, 0xb5, 0xbf, 0x51, 0xc6, 0x89, 0xd1, 0x98, 0x5e, + 0xbf, 0xca, 0xb3, 0x15, 0x30, 0xc1, 0x4b, 0xfd, 0xa3, 0x26, 0xf4, 0x3d, 0x6f, 0x67, 0x1f, 0x8d, 0x46, 0xcf, 0x0b, + 0x3a, 0x1a, 0x8d, 0x3e, 0x66, 0x35, 0xa1, 0x2b, 0xd1, 0xf1, 0xfe, 0x3d, 0xa7, 0xe7, 0x32, 0xbd, 0x8b, 0x82, 0x80, + 0x2e, 0xb3, 0x34, 0xe5, 0x42, 0x95, 0x75, 0x9a, 0xb6, 0xf3, 0xaa, 0x16, 0x22, 0xf0, 0x8f, 0x6e, 0x23, 0x42, 0x10, + 0x11, 0x7a, 0xb2, 0xd3, 0xb3, 0xd1, 0x68, 0x74, 0x9a, 0x9a, 0x6a, 0x1d, 0x43, 0xfe, 0x06, 0xcd, 0x07, 0x9c, 0x5d, + 0x3e, 0x58, 0xdf, 0x98, 0x68, 0x27, 0xfb, 0xff, 0x3d, 0x9c, 0xcd, 0xc7, 0xc3, 0x6f, 0x47, 0x8b, 0xc7, 0xfb, 0x34, + 0x08, 0x7c, 0xd0, 0xea, 0x50, 0x5b, 0x73, 0x4c, 0xcb, 0xc3, 0xf1, 0x94, 0x94, 0x03, 0xf6, 0xd4, 0xfa, 0xd2, 0x7c, + 0xf5, 0x14, 0x90, 0x48, 0x51, 0x84, 0x1a, 0x38, 0xe9, 0x1f, 0x5e, 0x45, 0x5e, 0x0b, 0xc0, 0x47, 0xb3, 0x91, 0x0c, + 0x8c, 0x16, 0x70, 0x1c, 0x41, 0x79, 0xb5, 0x35, 0x8d, 0xe8, 0x31, 0x96, 0x99, 0xa8, 0xa0, 0xe3, 0x69, 0x79, 0x93, + 0x55, 0xc9, 0x12, 0x03, 0x1b, 0xc5, 0x25, 0x0f, 0xbe, 0x0a, 0xa2, 0x92, 0x1d, 0x3c, 0x9b, 0x2a, 0x78, 0x5f, 0x4c, + 0x4a, 0xf9, 0x25, 0x24, 0x7e, 0x3b, 0x46, 0x08, 0x54, 0xa2, 0x3d, 0x16, 0xb1, 0xc6, 0x57, 0xb9, 0x8c, 0xc1, 0x83, + 0xb3, 0xd4, 0x3c, 0x8b, 0x3d, 0x09, 0xac, 0xfd, 0x45, 0xab, 0x39, 0x12, 0x9a, 0x13, 0x4a, 0x26, 0xf7, 0x4b, 0x2a, + 0xbf, 0x9a, 0xa0, 0x57, 0x10, 0xb8, 0x55, 0x47, 0x70, 0xdc, 0x59, 0xcb, 0x06, 0xbd, 0x7c, 0x52, 0xb6, 0x3f, 0xff, + 0xdf, 0x25, 0x5d, 0x0c, 0xf6, 0xdd, 0xd0, 0x9c, 0x68, 0xf7, 0xd5, 0x0a, 0x19, 0xa5, 0x2a, 0x7c, 0x9e, 0x12, 0x6b, + 0x7c, 0xca, 0xd9, 0xd1, 0xc6, 0x74, 0x67, 0x54, 0x15, 0xd9, 0x55, 0x48, 0x74, 0xaf, 0x1c, 0x28, 0x66, 0x10, 0x65, + 0x23, 0x5c, 0x3f, 0x60, 0x2d, 0xe2, 0x75, 0xf2, 0x9a, 0x17, 0x55, 0x96, 0xa8, 0xf7, 0xd7, 0x8d, 0xf7, 0x40, 0x0d, + 0x54, 0x83, 0xde, 0x15, 0x0c, 0xe6, 0xf9, 0xa4, 0x00, 0xd0, 0xce, 0x92, 0x17, 0xd7, 0xdc, 0xa7, 0x1b, 0x41, 0x50, + 0xbb, 0x66, 0x5e, 0x36, 0x82, 0x4d, 0xc0, 0x57, 0xef, 0x0a, 0xc0, 0xdc, 0x08, 0x41, 0x6a, 0x0a, 0xa1, 0x70, 0xe0, + 0x02, 0x5f, 0x55, 0x45, 0x76, 0xbe, 0xae, 0x38, 0x06, 0xfb, 0xf0, 0xe2, 0x26, 0x2a, 0x27, 0x3c, 0x1e, 0x06, 0xf8, + 0x23, 0xa0, 0x2a, 0xe0, 0x86, 0xf1, 0xb0, 0x83, 0x17, 0xea, 0x97, 0x7b, 0xa3, 0xf6, 0x08, 0x7b, 0x93, 0x86, 0x10, + 0x5c, 0x07, 0x1f, 0x02, 0x58, 0x52, 0x84, 0x9e, 0xe0, 0xa9, 0x1a, 0x06, 0x17, 0x79, 0xb6, 0xd2, 0x49, 0xd5, 0xa8, + 0xa3, 0xf9, 0x50, 0x6a, 0x47, 0x72, 0x40, 0xbd, 0xf4, 0x18, 0xd3, 0x0b, 0x95, 0xae, 0x8a, 0x72, 0x46, 0x28, 0xef, + 0xf4, 0xc4, 0xb8, 0x30, 0x7d, 0x1c, 0x22, 0xbf, 0xbc, 0x2b, 0x54, 0xe8, 0x17, 0xbe, 0x00, 0xf0, 0x2b, 0xb8, 0xdd, + 0xef, 0xc6, 0x77, 0x51, 0xd9, 0xcf, 0x38, 0xdb, 0xff, 0xef, 0x79, 0x3c, 0xfc, 0x34, 0x1e, 0x7e, 0xbb, 0x18, 0x84, + 0x43, 0xfb, 0x93, 0x3c, 0x7e, 0xb4, 0x4f, 0x5f, 0x71, 0xcb, 0x95, 0xc0, 0xc2, 0x6f, 0x04, 0xb7, 0x51, 0x2b, 0x21, + 0x88, 0x02, 0xbc, 0x51, 0xb8, 0xd5, 0x38, 0x01, 0x80, 0xbf, 0xe0, 0xbf, 0x02, 0x34, 0x12, 0x72, 0x17, 0x0d, 0xd0, + 0x0f, 0xa8, 0xdf, 0x47, 0x4f, 0x1a, 0x06, 0x72, 0x20, 0x9e, 0x50, 0x31, 0x50, 0x88, 0x2e, 0x63, 0xa2, 0x60, 0x7f, + 0x6d, 0xf6, 0xed, 0xb6, 0xd7, 0x96, 0xfc, 0xe0, 0x97, 0x7e, 0xa6, 0x89, 0x99, 0x77, 0xb8, 0xa1, 0xac, 0xe4, 0x2a, + 0x44, 0x6c, 0x3c, 0xfd, 0x2b, 0x67, 0x10, 0x6b, 0xf2, 0x3a, 0x03, 0x1f, 0x06, 0xfb, 0xc5, 0x78, 0x06, 0x6c, 0x03, + 0xdc, 0x71, 0x0a, 0x7e, 0x91, 0x81, 0x5b, 0xb3, 0x88, 0xf1, 0x82, 0x6d, 0x97, 0x44, 0xbf, 0xdf, 0xcb, 0xb3, 0x30, + 0xd7, 0x38, 0xcb, 0x79, 0x6d, 0xc4, 0xee, 0xa8, 0x13, 0x06, 0x71, 0xbb, 0x1e, 0x82, 0xa1, 0x1a, 0x82, 0xa2, 0xa3, + 0x2d, 0xae, 0x5e, 0x5b, 0x4f, 0x61, 0x7a, 0xab, 0xea, 0x2b, 0x46, 0x7f, 0xca, 0x4c, 0x60, 0x21, 0xed, 0x9a, 0x63, + 0x5d, 0x73, 0x8c, 0xb4, 0xa7, 0xdf, 0x17, 0x0d, 0xf2, 0xd3, 0x59, 0x78, 0x10, 0xa8, 0x52, 0xe5, 0x4e, 0x59, 0x94, + 0xdb, 0xd2, 0xbc, 0x31, 0xac, 0x69, 0x9e, 0xd9, 0xb8, 0x2e, 0xb3, 0x5e, 0x2f, 0x0c, 0xd1, 0xa1, 0x11, 0x4b, 0xc5, + 0xda, 0x20, 0xbc, 0x8f, 0x49, 0x18, 0x5d, 0x81, 0xac, 0x2e, 0x3c, 0xe3, 0x04, 0xf9, 0x32, 0x30, 0x59, 0x53, 0xd5, + 0x7a, 0x39, 0xe1, 0xb1, 0x91, 0x2f, 0x1b, 0x41, 0x83, 0xbc, 0xa4, 0xa8, 0x37, 0x71, 0x3b, 0xf6, 0x51, 0x0b, 0xa9, + 0x71, 0x53, 0x4f, 0x7b, 0x9a, 0x54, 0xf4, 0x58, 0xaf, 0x52, 0xbf, 0xc0, 0xb2, 0xc0, 0x92, 0x0f, 0x42, 0x7b, 0x9a, + 0x56, 0x60, 0x86, 0x6b, 0x9b, 0xc1, 0xd0, 0x0f, 0x87, 0xb6, 0x08, 0x9d, 0x51, 0xdb, 0x12, 0xc2, 0xb6, 0x0d, 0xc2, + 0xca, 0x7b, 0x22, 0x5f, 0x3d, 0xf5, 0x18, 0xe1, 0x90, 0x9b, 0xcd, 0x2c, 0x1a, 0x18, 0xe6, 0x57, 0xb2, 0xd9, 0x3c, + 0xdd, 0x5c, 0x2f, 0x2a, 0xa6, 0x80, 0xed, 0xb6, 0x12, 0x04, 0xff, 0x7e, 0xcc, 0x66, 0xf8, 0x37, 0xeb, 0xf7, 0x7b, + 0x21, 0xfe, 0xe2, 0x18, 0xbc, 0x67, 0x2e, 0x16, 0xec, 0x23, 0xc8, 0x54, 0x48, 0x84, 0xa9, 0xca, 0xf8, 0x8d, 0x55, + 0x60, 0x01, 0x67, 0x3e, 0x50, 0xb9, 0x30, 0x93, 0xbd, 0xbc, 0xb8, 0x86, 0x1c, 0xb7, 0xc6, 0x29, 0x1b, 0x65, 0x89, + 0x72, 0x5d, 0xc8, 0x46, 0x71, 0x9e, 0xc5, 0x25, 0x2f, 0xb7, 0x5b, 0x7d, 0x38, 0x26, 0x05, 0x07, 0xf6, 0x54, 0x51, + 0xa9, 0x92, 0x75, 0xa4, 0xba, 0xf1, 0x97, 0x61, 0x81, 0xfb, 0x94, 0xcf, 0x0b, 0x43, 0x23, 0xf6, 0xe0, 0xf2, 0xce, + 0xd4, 0xad, 0xb4, 0x17, 0x16, 0xd0, 0xbc, 0x92, 0x90, 0x0d, 0xa6, 0x7a, 0x16, 0xad, 0x31, 0x13, 0xf3, 0x62, 0x01, + 0x61, 0x64, 0x8a, 0x05, 0xd8, 0x4c, 0x71, 0x01, 0x5e, 0x24, 0x31, 0xc0, 0xc4, 0xc5, 0x64, 0x0a, 0xf1, 0xcc, 0x55, + 0x39, 0xf1, 0xc2, 0xdc, 0x2f, 0x13, 0x87, 0x94, 0x01, 0xaf, 0x6a, 0x83, 0x26, 0x66, 0x1b, 0x8e, 0x3a, 0x41, 0x4e, + 0x4c, 0x7e, 0x3f, 0x55, 0x10, 0xe2, 0x4e, 0x1c, 0x09, 0x97, 0x15, 0xdb, 0x85, 0x97, 0x1d, 0x88, 0x31, 0x6a, 0x70, + 0xca, 0xcf, 0x0c, 0x8e, 0xc6, 0xe0, 0xdc, 0x78, 0x27, 0x48, 0x11, 0xc6, 0x64, 0x23, 0xd9, 0x95, 0x0c, 0xc5, 0x3c, + 0x5e, 0x80, 0xb2, 0x2e, 0x5e, 0x80, 0x65, 0x8d, 0x31, 0xc0, 0x04, 0x79, 0x15, 0xf7, 0x42, 0x3f, 0x51, 0x5c, 0x21, + 0xd2, 0xb3, 0x72, 0x7d, 0x54, 0xb4, 0x43, 0x5f, 0xe0, 0xf5, 0x5e, 0x99, 0xe3, 0x66, 0x3d, 0x16, 0x48, 0x6c, 0x08, + 0x18, 0x1b, 0xe9, 0x34, 0xd5, 0x5a, 0xf7, 0xc6, 0xcc, 0x03, 0x9f, 0x66, 0x23, 0x21, 0xab, 0xb3, 0x0b, 0x10, 0xa1, + 0xf8, 0x68, 0xf0, 0xc8, 0x2f, 0xe2, 0xce, 0x32, 0x6f, 0x6d, 0x8b, 0x4a, 0x76, 0xb4, 0x01, 0x90, 0x3e, 0x1d, 0x2d, + 0x4a, 0xc9, 0x29, 0x4a, 0x52, 0xbb, 0x4d, 0x01, 0x2b, 0xc9, 0x5f, 0xc0, 0x10, 0x6c, 0x6c, 0x4f, 0x38, 0x9d, 0x22, + 0xc4, 0x27, 0x9a, 0x22, 0xb2, 0x62, 0x58, 0x52, 0x1c, 0xdb, 0x12, 0x51, 0x3f, 0x6d, 0x59, 0x76, 0x30, 0x4c, 0x54, + 0xdc, 0x17, 0xa9, 0x47, 0x89, 0x82, 0x80, 0xea, 0x21, 0x07, 0x89, 0xad, 0x6d, 0x20, 0x3c, 0x20, 0x8f, 0xe8, 0x8d, + 0xf5, 0xf7, 0x59, 0xe7, 0xd9, 0x85, 0xe6, 0xa8, 0x5c, 0xef, 0x0a, 0x33, 0x46, 0x78, 0x92, 0x19, 0x98, 0x7c, 0xef, + 0x3c, 0x33, 0x6a, 0x8a, 0x9e, 0x87, 0x4f, 0x76, 0x8c, 0x11, 0xe9, 0xee, 0x19, 0x74, 0x13, 0xbc, 0xaa, 0xc3, 0x46, + 0xbb, 0x52, 0x10, 0x12, 0xa6, 0x16, 0x4d, 0xcc, 0x7a, 0xd6, 0x80, 0x7a, 0xbb, 0xed, 0xe9, 0xb9, 0xba, 0x7f, 0xee, + 0xb6, 0xdb, 0x1e, 0x76, 0xeb, 0x45, 0xda, 0x6d, 0x05, 0x5e, 0xa9, 0x0f, 0xda, 0xe3, 0xcf, 0xdd, 0xf8, 0x73, 0x83, + 0xe4, 0x51, 0x3a, 0x9a, 0x69, 0xeb, 0x83, 0x70, 0xb8, 0xe9, 0x5d, 0xa3, 0x49, 0xdf, 0x67, 0xa1, 0xa4, 0x2b, 0xd1, + 0xa8, 0xae, 0x76, 0x26, 0x95, 0x0f, 0xae, 0xff, 0x87, 0x57, 0x01, 0x1e, 0x71, 0x6a, 0x67, 0xdf, 0xdb, 0xa0, 0xa2, + 0xd1, 0x16, 0x8e, 0x14, 0xa1, 0x07, 0x24, 0xe1, 0xbe, 0x96, 0xb5, 0xb8, 0xcd, 0xd3, 0xec, 0x61, 0xfa, 0xf4, 0x3a, + 0xf5, 0xad, 0xee, 0xdd, 0x32, 0xcb, 0xcc, 0x81, 0x57, 0x51, 0x1c, 0xd0, 0xa8, 0x8b, 0xf6, 0x5d, 0x65, 0x65, 0x09, + 0x5e, 0x1e, 0x70, 0x7d, 0x3e, 0xe5, 0x3e, 0xdc, 0xdc, 0x65, 0xd5, 0xdc, 0xa4, 0xa7, 0xd9, 0x3c, 0x5b, 0x6c, 0xb7, + 0x21, 0xfe, 0xed, 0x6a, 0x91, 0xa3, 0xc9, 0x73, 0xd0, 0xe1, 0x61, 0xe4, 0x1e, 0xa6, 0x1b, 0xe7, 0x6d, 0xfe, 0x4f, + 0xa2, 0xe1, 0x24, 0x70, 0x0c, 0xf4, 0x62, 0xf6, 0x08, 0x64, 0x30, 0xc6, 0xa9, 0x5f, 0xcc, 0xf4, 0x9a, 0x81, 0xe8, + 0x5b, 0x22, 0x02, 0x1c, 0x5d, 0x6c, 0x24, 0x1a, 0x59, 0x70, 0x52, 0x13, 0xb0, 0xd8, 0xb4, 0xe5, 0x7d, 0xb0, 0xb4, + 0xad, 0x2a, 0xee, 0xbc, 0x25, 0xcd, 0x71, 0x1d, 0x38, 0xdb, 0x7e, 0x33, 0xc4, 0xa6, 0xec, 0x6a, 0x81, 0xdc, 0x2f, + 0xaf, 0x69, 0x6f, 0x5c, 0x27, 0x30, 0x6b, 0x9b, 0xda, 0x32, 0x7e, 0xb6, 0xf4, 0x9f, 0xf5, 0xe0, 0x2a, 0xe3, 0xa7, + 0xb9, 0xb1, 0x4a, 0xb0, 0xfb, 0xc6, 0xf3, 0x1d, 0x80, 0x70, 0x6c, 0x3e, 0x3d, 0x3e, 0xcd, 0x3c, 0x7a, 0x0c, 0x44, + 0xc7, 0x7c, 0x54, 0xba, 0x8f, 0xec, 0xee, 0xf5, 0x03, 0xe0, 0xcd, 0xab, 0x76, 0x41, 0xf3, 0x72, 0x01, 0x81, 0x44, + 0xbd, 0xf2, 0x0a, 0xcb, 0x67, 0xc6, 0xec, 0x12, 0xc8, 0x50, 0x41, 0xc0, 0x26, 0xa9, 0xeb, 0x5c, 0x88, 0x55, 0x87, + 0x95, 0xf9, 0x48, 0xc2, 0x8e, 0x42, 0x34, 0xe7, 0x0c, 0x66, 0xc1, 0x7f, 0x05, 0x83, 0x72, 0x10, 0x44, 0x41, 0x14, + 0x04, 0x64, 0x50, 0xc0, 0x2f, 0xc4, 0x19, 0x23, 0x18, 0xa3, 0x04, 0x3a, 0xfc, 0x8e, 0x33, 0x9f, 0x11, 0x79, 0xd9, + 0x08, 0x63, 0xe9, 0x06, 0xe0, 0x5c, 0xca, 0x9c, 0xc7, 0xe8, 0x63, 0xf1, 0x8e, 0xb3, 0x8c, 0xd0, 0x77, 0xde, 0xa9, + 0xfc, 0x88, 0x37, 0x82, 0xdb, 0xed, 0x0e, 0xdb, 0x2b, 0x1e, 0x66, 0xb4, 0x37, 0xa6, 0xef, 0x38, 0x89, 0xb2, 0x86, + 0xf3, 0x30, 0x87, 0x9e, 0x55, 0x96, 0xb5, 0xa2, 0x86, 0xdc, 0xa0, 0x58, 0x17, 0x59, 0x26, 0x27, 0xc3, 0x55, 0x73, + 0x2a, 0x70, 0xdd, 0xd9, 0xf5, 0x02, 0x92, 0x32, 0xa1, 0x59, 0x3a, 0x1b, 0xbe, 0xda, 0xb6, 0xec, 0x45, 0xeb, 0x14, + 0xf2, 0x1a, 0xa2, 0xa2, 0x1f, 0x3a, 0x02, 0x6a, 0x68, 0xc5, 0x65, 0x05, 0x2e, 0xbb, 0xa6, 0x3d, 0xdc, 0xb4, 0xc7, + 0x34, 0xe3, 0x03, 0xc4, 0x88, 0xe3, 0xd8, 0x32, 0xb0, 0x9b, 0x70, 0x78, 0x36, 0xce, 0xf7, 0x65, 0x97, 0xde, 0xba, + 0x5a, 0x3c, 0xc2, 0xda, 0xf3, 0x56, 0x48, 0x08, 0x90, 0x96, 0xa6, 0xd2, 0xed, 0x36, 0x08, 0x60, 0x80, 0xfb, 0xfd, + 0x1e, 0x70, 0xad, 0x86, 0x9d, 0x34, 0xb7, 0x66, 0x4b, 0xec, 0x15, 0x85, 0xc7, 0x40, 0x94, 0x9a, 0xff, 0x0c, 0x02, + 0x8a, 0xe7, 0x6e, 0x08, 0xf6, 0x95, 0xec, 0x68, 0x53, 0xf4, 0xfb, 0x2f, 0x0a, 0x7c, 0x40, 0x39, 0x28, 0x88, 0x75, + 0x75, 0xdc, 0x0a, 0xc3, 0x3e, 0xa9, 0x0f, 0x71, 0x2c, 0xf2, 0x2c, 0x74, 0x84, 0xa5, 0x32, 0x84, 0x85, 0x2b, 0x46, + 0x3a, 0x88, 0x83, 0x9a, 0x74, 0x0e, 0x56, 0xe5, 0x82, 0x0d, 0xf7, 0x7a, 0x9f, 0x00, 0x16, 0x3c, 0xf3, 0x86, 0xe5, + 0xbd, 0x07, 0x00, 0xd6, 0xeb, 0xe1, 0x42, 0x71, 0x2f, 0x5f, 0x35, 0xd0, 0x27, 0xf1, 0xa5, 0x65, 0xd7, 0x67, 0x5a, + 0x56, 0x32, 0x1a, 0x8d, 0xaa, 0x5a, 0x49, 0x3e, 0x1c, 0x79, 0x69, 0xa1, 0x56, 0xca, 0x38, 0xe5, 0x29, 0x58, 0x7a, + 0x1b, 0x4a, 0x37, 0x5f, 0xd0, 0x15, 0x17, 0xa9, 0xfa, 0xe9, 0xa1, 0x4d, 0x36, 0x88, 0x6b, 0xd6, 0xd4, 0x59, 0xd8, + 0xe1, 0x87, 0x80, 0x8f, 0xf6, 0x61, 0xe6, 0xd2, 0x35, 0x2c, 0x2d, 0x88, 0x23, 0xe3, 0x82, 0x87, 0x2e, 0x0f, 0x60, + 0xfd, 0x99, 0x43, 0x12, 0x3f, 0x85, 0x9f, 0x33, 0x93, 0xd6, 0xf1, 0x19, 0xce, 0x66, 0x54, 0xaa, 0x1b, 0x41, 0xfb, + 0x35, 0x24, 0x12, 0x83, 0x6c, 0xdc, 0x60, 0x28, 0x5a, 0x77, 0x1b, 0xb8, 0xf2, 0x5b, 0x7a, 0xe7, 0xd3, 0x20, 0xc0, + 0xb6, 0xc6, 0x62, 0x00, 0x30, 0x14, 0x7f, 0xa0, 0xaa, 0xc6, 0x5c, 0x51, 0x4c, 0xc3, 0x54, 0xa2, 0xbd, 0xe3, 0xb8, + 0x8e, 0x1a, 0x57, 0x59, 0xc1, 0x4a, 0x6b, 0xcb, 0xeb, 0xde, 0xd2, 0xc2, 0x96, 0x80, 0x6a, 0x30, 0xdc, 0x09, 0xe0, + 0x33, 0x22, 0xd5, 0x81, 0x20, 0xbb, 0x0f, 0x0e, 0x9a, 0xb3, 0x04, 0xcf, 0xc3, 0x10, 0xfe, 0xc0, 0xc2, 0x81, 0x65, + 0xa9, 0xfa, 0xb9, 0x9c, 0xc6, 0x70, 0xee, 0xe6, 0x6a, 0x87, 0xcf, 0x96, 0xa0, 0xc8, 0x53, 0x73, 0x6a, 0x2e, 0x5f, + 0x79, 0x63, 0xbf, 0xc7, 0x04, 0xf3, 0x98, 0xd9, 0x86, 0xdf, 0x7a, 0xba, 0xad, 0x2f, 0xac, 0x1b, 0x38, 0x69, 0x2f, + 0x9c, 0xf6, 0x62, 0xbb, 0x34, 0x10, 0x77, 0x75, 0x43, 0x88, 0xf0, 0x5a, 0x13, 0x8b, 0xac, 0x21, 0xd3, 0xb1, 0xd8, + 0x18, 0xaa, 0x4d, 0xc5, 0x73, 0xad, 0x10, 0x2f, 0xa7, 0xea, 0xc2, 0xd4, 0x4a, 0x65, 0xc2, 0x20, 0xcc, 0x94, 0xb0, + 0xa8, 0x32, 0xf0, 0xd9, 0xaf, 0x90, 0xe2, 0xda, 0x7a, 0xde, 0xe2, 0xf2, 0xcd, 0x4c, 0x9b, 0xed, 0xa7, 0xaf, 0xf2, + 0xf8, 0x72, 0xbb, 0x0d, 0xbb, 0x5f, 0x80, 0xf9, 0x65, 0xa9, 0x34, 0x6a, 0xe0, 0xf4, 0x10, 0xa2, 0x9f, 0xf3, 0x3d, + 0x39, 0x27, 0x8e, 0x93, 0x6b, 0x37, 0x6f, 0xb6, 0x93, 0x62, 0x04, 0x16, 0x70, 0xe2, 0x22, 0x1d, 0x68, 0xa9, 0xe0, + 0xb4, 0x65, 0xbc, 0xb7, 0xe9, 0x1d, 0xa5, 0xc2, 0xab, 0x85, 0x26, 0x21, 0x95, 0xbb, 0x97, 0xd8, 0x51, 0x03, 0xce, + 0x49, 0xdd, 0x41, 0xc0, 0x49, 0x4d, 0x37, 0xd6, 0x2a, 0x4e, 0x4d, 0x82, 0xf7, 0x4a, 0x0f, 0x5d, 0xa2, 0x9d, 0xb8, + 0xdd, 0xb6, 0x2a, 0x5b, 0xa8, 0x8f, 0x7b, 0x39, 0x4b, 0xd4, 0xf1, 0x80, 0x42, 0x17, 0x75, 0x34, 0xe4, 0x0b, 0x52, + 0xe8, 0x95, 0xa3, 0x55, 0xab, 0xbb, 0x92, 0x81, 0x52, 0xad, 0x82, 0xbc, 0x26, 0xd6, 0x5d, 0x2b, 0x6b, 0x2c, 0xae, + 0x9c, 0x90, 0xc2, 0x26, 0x7c, 0x69, 0x29, 0x16, 0x56, 0xb0, 0x37, 0xa6, 0xbe, 0x70, 0x89, 0xd0, 0x76, 0xb7, 0x21, + 0x26, 0x19, 0xac, 0x9b, 0xed, 0xf6, 0x75, 0x11, 0xce, 0xb3, 0x05, 0x95, 0xa3, 0x2c, 0x45, 0x08, 0x31, 0xe3, 0xa1, + 0x6b, 0xbb, 0x60, 0x26, 0x86, 0xba, 0xf6, 0x78, 0x49, 0xa6, 0x58, 0x9b, 0x24, 0x47, 0xf1, 0xb9, 0x2c, 0xd4, 0x5a, + 0x23, 0x04, 0x0f, 0xf7, 0x3f, 0x53, 0x88, 0xe1, 0x66, 0xd6, 0xdd, 0x6f, 0x3b, 0x37, 0xc4, 0x3f, 0x21, 0x90, 0x40, + 0xc9, 0x5e, 0x17, 0xa3, 0xf3, 0x4c, 0xa4, 0xb8, 0x53, 0x55, 0x54, 0x5c, 0xb5, 0x0e, 0x9a, 0x2d, 0xb7, 0xf7, 0x62, + 0x4b, 0x14, 0x20, 0xae, 0xb1, 0xd0, 0x8c, 0x67, 0xe5, 0x2c, 0x45, 0x32, 0x8a, 0x0d, 0x89, 0x4a, 0x2f, 0x2a, 0xba, + 0xcf, 0xd3, 0x98, 0x1e, 0xba, 0x35, 0x08, 0xae, 0x9a, 0x3b, 0x1b, 0x69, 0xbe, 0x20, 0x44, 0x4d, 0x80, 0x84, 0x8d, + 0x6a, 0x4e, 0xad, 0x4b, 0xf1, 0x30, 0xab, 0x7c, 0xa6, 0x0f, 0xe2, 0x4b, 0x01, 0x3c, 0xac, 0xb7, 0xbd, 0xaf, 0x84, + 0xc7, 0xda, 0xe0, 0xdb, 0xed, 0xf6, 0x52, 0xcc, 0x83, 0xc0, 0x63, 0x34, 0xbf, 0x53, 0x12, 0xf3, 0xde, 0x98, 0xc2, + 0x8a, 0xf7, 0x5d, 0xda, 0xba, 0x49, 0xad, 0xb5, 0x40, 0xdd, 0xe1, 0xfa, 0x80, 0xe7, 0x29, 0x71, 0xb4, 0xa3, 0x72, + 0x2a, 0xad, 0xae, 0x1c, 0xbb, 0x22, 0x30, 0x30, 0xf4, 0x0f, 0x29, 0xdb, 0x80, 0x39, 0x1e, 0x58, 0xdb, 0xa0, 0x9f, + 0x92, 0xd2, 0xc2, 0x8c, 0xd1, 0x98, 0x45, 0xae, 0xab, 0xe8, 0x80, 0xeb, 0xe8, 0xed, 0x3c, 0xfa, 0xdb, 0xb3, 0x31, + 0x2d, 0x62, 0x91, 0xca, 0x2b, 0x50, 0x41, 0x80, 0x32, 0x04, 0x0d, 0xff, 0x35, 0x35, 0x00, 0x0d, 0x82, 0x1b, 0x80, + 0x7f, 0x74, 0x3a, 0x0d, 0xda, 0x9a, 0x7c, 0x4c, 0x52, 0x55, 0xe4, 0xac, 0x0d, 0x65, 0xa6, 0x92, 0x43, 0xf2, 0xb8, + 0x04, 0x3c, 0x47, 0x6c, 0x96, 0xb2, 0xb9, 0x50, 0x9b, 0x4d, 0xbd, 0x56, 0xec, 0xc8, 0x6d, 0xa3, 0x68, 0xb3, 0x16, + 0xb5, 0x9d, 0xc4, 0x7c, 0x31, 0xbd, 0xb5, 0xc2, 0xc0, 0xa9, 0x69, 0xcd, 0xcd, 0x0e, 0x74, 0x9a, 0xad, 0xcf, 0xe4, + 0x26, 0x40, 0x1c, 0x60, 0xb8, 0x6e, 0xe7, 0x37, 0x0b, 0x42, 0x6f, 0xd9, 0xad, 0x15, 0xab, 0xde, 0x58, 0xb9, 0x88, + 0x49, 0xbb, 0x19, 0x4c, 0xe0, 0x32, 0xce, 0x0a, 0xfb, 0x42, 0xab, 0x1b, 0x8a, 0x8e, 0xb6, 0x49, 0xfb, 0x79, 0x47, + 0xbb, 0xe1, 0x82, 0x6f, 0xc5, 0x3a, 0xce, 0x0d, 0x69, 0xaa, 0xd0, 0xa3, 0x03, 0xbd, 0x1d, 0x02, 0x9a, 0xb3, 0x31, + 0x5d, 0xd2, 0x14, 0x2f, 0xd0, 0x74, 0x0d, 0x66, 0x29, 0x17, 0xd0, 0xd7, 0x6e, 0x9f, 0xe4, 0x0b, 0xd5, 0x13, 0xe1, + 0x2d, 0x51, 0xf0, 0xe5, 0x48, 0xc1, 0x2b, 0x2b, 0xe7, 0xb1, 0x99, 0x43, 0xc0, 0x63, 0x51, 0x25, 0x7a, 0x27, 0xc5, + 0x25, 0x28, 0x53, 0xe1, 0x08, 0x34, 0x55, 0x23, 0x96, 0x70, 0x80, 0xdb, 0x8b, 0xa7, 0x01, 0xa1, 0x20, 0xd5, 0x5d, + 0xdb, 0x15, 0x79, 0xcb, 0x8e, 0x36, 0xb7, 0x60, 0x16, 0x5b, 0xad, 0xcb, 0xd6, 0x57, 0x36, 0xd9, 0x7d, 0x5c, 0x13, + 0x6c, 0xbb, 0xb7, 0x41, 0xc2, 0x5b, 0x7a, 0x43, 0x36, 0x37, 0xfd, 0x7e, 0x08, 0xfd, 0x21, 0x54, 0x77, 0xe8, 0xb6, + 0xb3, 0x43, 0xb7, 0x3e, 0xf3, 0x6b, 0xf5, 0x7c, 0xca, 0x1b, 0xe2, 0x03, 0x9a, 0x68, 0xd1, 0x55, 0x7c, 0x07, 0x9b, + 0x3a, 0xaa, 0xa8, 0xaa, 0x3c, 0x4a, 0x28, 0xa8, 0x80, 0x33, 0x5e, 0x9e, 0x72, 0x8c, 0x6d, 0xaa, 0x9f, 0xde, 0x69, + 0x5e, 0x6d, 0x6d, 0xd6, 0x66, 0xb9, 0x3e, 0x07, 0x8b, 0x80, 0x73, 0x1e, 0x5d, 0x69, 0x5a, 0x72, 0xe9, 0x31, 0xf5, + 0x67, 0x38, 0x2a, 0xc1, 0x45, 0x9c, 0xe5, 0x3c, 0x0d, 0xe8, 0x45, 0xb3, 0xff, 0xa1, 0xb6, 0x95, 0x5a, 0x36, 0xce, + 0xdc, 0xeb, 0x90, 0x6c, 0xfe, 0xc7, 0x06, 0xea, 0x4d, 0x88, 0x11, 0x51, 0xcd, 0x82, 0x3e, 0x61, 0x10, 0x1b, 0x33, + 0x28, 0xd7, 0x49, 0xc2, 0xcb, 0x32, 0x30, 0x4a, 0xad, 0x35, 0x5b, 0x9b, 0xf3, 0xec, 0x11, 0x3b, 0x7a, 0xd4, 0x63, + 0xec, 0x96, 0xd0, 0x44, 0xeb, 0x84, 0x4c, 0x8d, 0x91, 0xa7, 0x05, 0xd2, 0x1d, 0x8a, 0xb2, 0x8b, 0xf0, 0x04, 0x85, + 0x2c, 0xed, 0x7d, 0x6e, 0x4e, 0x64, 0xf5, 0x8d, 0x36, 0xba, 0x88, 0x54, 0x22, 0xc8, 0xc6, 0x6f, 0x10, 0xb0, 0x17, + 0x9a, 0x1d, 0x90, 0xcd, 0x92, 0x9d, 0xd2, 0x33, 0x6b, 0x02, 0x03, 0xaf, 0x4f, 0x54, 0xa2, 0x19, 0x65, 0x45, 0x74, + 0x95, 0x91, 0xcb, 0x5d, 0x48, 0xa2, 0xb3, 0x90, 0xf8, 0xb9, 0x61, 0x69, 0x5d, 0x87, 0x28, 0x66, 0x36, 0x1b, 0x5e, + 0x75, 0xf7, 0x51, 0x63, 0x5b, 0x19, 0x9f, 0xea, 0x5b, 0x9b, 0x46, 0xa6, 0xd0, 0xd7, 0xe1, 0xa4, 0xdf, 0x87, 0xbf, + 0x9a, 0x7e, 0xe0, 0x2d, 0x05, 0x7f, 0xb1, 0x47, 0xa4, 0x4e, 0x58, 0x00, 0x70, 0x84, 0x39, 0xaf, 0x9a, 0x13, 0xf8, + 0x88, 0x1d, 0x6d, 0x1e, 0x85, 0xa7, 0x8d, 0x99, 0xbb, 0x0b, 0xf1, 0x52, 0x95, 0xf4, 0xbc, 0x79, 0x32, 0x03, 0xb1, + 0x0a, 0xcd, 0x7e, 0xbd, 0x65, 0x56, 0x9f, 0x00, 0x44, 0xea, 0xd6, 0x3a, 0x94, 0xe2, 0xc7, 0xa6, 0xcb, 0x64, 0x93, + 0xb2, 0x36, 0x13, 0xa5, 0x54, 0x24, 0xcd, 0x45, 0x00, 0xfd, 0x86, 0xe1, 0xa8, 0x01, 0xde, 0x5b, 0x8f, 0xbd, 0x19, + 0x1a, 0x6f, 0x4c, 0x0d, 0x3d, 0xdb, 0xe8, 0xe5, 0xed, 0x28, 0x84, 0x19, 0x8b, 0xe8, 0xd6, 0x1d, 0x8b, 0xe1, 0x29, + 0x3d, 0x81, 0x0a, 0xdf, 0x84, 0x18, 0x4d, 0x97, 0xd4, 0xf5, 0x74, 0xad, 0xb6, 0xd2, 0x0d, 0xa1, 0x39, 0x46, 0xf1, + 0xf1, 0xda, 0x76, 0x47, 0x8d, 0xd0, 0x9e, 0x50, 0x1e, 0xde, 0xd2, 0x8a, 0xde, 0x58, 0x16, 0xc1, 0xc9, 0x8f, 0xbd, + 0xfc, 0x84, 0x9e, 0x7b, 0x02, 0x93, 0xa2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x3d, 0xb5, 0x52, 0x0e, 0x4f, + 0xe1, 0x4b, 0x36, 0x20, 0x57, 0xd0, 0x8b, 0x35, 0x66, 0x47, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x37, 0x29, 0x65, + 0x88, 0xd6, 0x77, 0x0e, 0xe2, 0xe9, 0x1f, 0xa0, 0xe9, 0x83, 0xb4, 0x30, 0xa5, 0x6b, 0x14, 0xf0, 0x80, 0xbe, 0xa9, + 0xdf, 0xcf, 0xf1, 0xb9, 0xf6, 0x2c, 0xb1, 0xb0, 0xc7, 0x4b, 0x42, 0x97, 0x5e, 0xdc, 0x28, 0x90, 0x36, 0x3b, 0x56, + 0x01, 0x58, 0x91, 0x04, 0x1a, 0x91, 0x80, 0xa5, 0x8e, 0x27, 0x2e, 0xdb, 0xa0, 0x01, 0x49, 0x54, 0x52, 0xc8, 0x12, + 0x49, 0xe0, 0x87, 0x11, 0x84, 0x28, 0x8a, 0x41, 0xdc, 0xab, 0x97, 0x57, 0x5c, 0x53, 0x03, 0x4e, 0x14, 0xc1, 0x04, + 0xeb, 0x74, 0x0a, 0xc4, 0x56, 0xac, 0x57, 0xe0, 0x79, 0xe9, 0x38, 0x71, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x97, 0x4e, + 0xbb, 0xe5, 0xed, 0x89, 0x96, 0x2a, 0x36, 0xf7, 0x5e, 0x2c, 0x2c, 0xf7, 0x58, 0xf9, 0xdb, 0x81, 0xf6, 0xc2, 0x6a, + 0x47, 0x44, 0x0d, 0x56, 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xea, 0x5e, 0x39, 0x26, 0xa0, 0xa2, 0xab, 0xb8, 0x5a, + 0x46, 0xd9, 0x08, 0xfe, 0x6c, 0xb7, 0xc1, 0x7e, 0x00, 0x16, 0x90, 0xbf, 0xbe, 0xff, 0x39, 0xc2, 0xf0, 0x4c, 0xbf, + 0xbe, 0xff, 0x79, 0xbb, 0x7d, 0x36, 0x1e, 0x1b, 0xae, 0xc0, 0xa9, 0x75, 0x80, 0x3f, 0x30, 0x6c, 0x83, 0x5d, 0xb2, + 0xdb, 0xed, 0x33, 0xe0, 0x20, 0x14, 0xdb, 0x60, 0x76, 0xb1, 0x72, 0xe4, 0x52, 0xac, 0x86, 0xde, 0x91, 0x80, 0x55, + 0xb7, 0xc3, 0x52, 0xec, 0x52, 0x1f, 0x15, 0x82, 0x51, 0x2f, 0xfa, 0x97, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, + 0xb2, 0xaa, 0x56, 0x65, 0xb4, 0xbf, 0x1f, 0xaf, 0xb2, 0x51, 0x99, 0xc1, 0x36, 0x2f, 0xaf, 0x2f, 0x01, 0x50, 0x21, + 0xa0, 0x8d, 0x77, 0x6b, 0x91, 0x99, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0xad, 0x6e, 0x72, + 0x4a, 0xec, 0x03, 0xd8, 0x1c, 0x6e, 0xb7, 0x0d, 0x7e, 0xe1, 0x68, 0xf4, 0x6c, 0xb6, 0xcc, 0xb4, 0x41, 0x27, 0x37, + 0xfb, 0x9f, 0x44, 0x5e, 0x1a, 0x2a, 0x3e, 0xc9, 0xf4, 0x65, 0x06, 0x7c, 0x1e, 0x7b, 0x2b, 0x42, 0x9f, 0xe5, 0x6a, + 0xb4, 0x06, 0xd8, 0xd8, 0xec, 0xe2, 0x6e, 0x94, 0x72, 0x88, 0x48, 0x11, 0x58, 0x75, 0xcd, 0x32, 0x23, 0xbe, 0x4d, + 0xc5, 0x5d, 0x4b, 0x15, 0xf6, 0x56, 0x78, 0xce, 0x2a, 0xdc, 0x38, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x12, 0x85, 0xa8, + 0x1c, 0x8d, 0xe9, 0x9c, 0x40, 0x2a, 0xf3, 0x98, 0x50, 0xcc, 0xe1, 0xde, 0xfd, 0x9a, 0x3a, 0x73, 0x19, 0x5f, 0xb8, + 0xf7, 0xd2, 0x97, 0x99, 0xdc, 0x4a, 0x00, 0x45, 0x52, 0xb5, 0xff, 0xf2, 0x19, 0xa9, 0xf1, 0x3f, 0x53, 0xad, 0x01, + 0xe8, 0xfd, 0x02, 0x35, 0x39, 0x82, 0x80, 0xad, 0x98, 0xfa, 0x68, 0xfa, 0x56, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x82, + 0x6d, 0x54, 0xfc, 0x9c, 0xa8, 0xa2, 0x05, 0x4f, 0xd7, 0x22, 0x8d, 0x45, 0x72, 0x17, 0xf1, 0x7a, 0x8a, 0x25, 0x31, + 0x1b, 0x21, 0xeb, 0x97, 0x66, 0x17, 0x7e, 0x2e, 0x1a, 0x26, 0xe0, 0xb4, 0xf4, 0xb7, 0x95, 0xb7, 0x99, 0x2c, 0xe3, + 0x8c, 0x4c, 0xb9, 0x42, 0xec, 0xb6, 0xfa, 0x1e, 0x73, 0x82, 0x3f, 0x3d, 0x78, 0x4a, 0xe8, 0xad, 0x9c, 0x96, 0x08, + 0x4a, 0x27, 0x52, 0xeb, 0xaa, 0x89, 0xfd, 0x9a, 0x42, 0x14, 0x07, 0xc1, 0x20, 0x74, 0xa7, 0x69, 0x9f, 0xe2, 0xfb, + 0x6c, 0xd9, 0x6f, 0x4d, 0xd9, 0x92, 0x6c, 0x04, 0x74, 0x4c, 0x3a, 0x6f, 0x4f, 0x6f, 0xcf, 0xce, 0xbc, 0xdf, 0xa0, + 0x09, 0x07, 0xd5, 0x0d, 0xb4, 0xab, 0x20, 0xd3, 0x18, 0xc5, 0x66, 0x31, 0xd6, 0x6e, 0x4d, 0x44, 0x10, 0x74, 0xba, + 0x9c, 0x85, 0xed, 0x76, 0x42, 0x7c, 0x09, 0x24, 0x50, 0xe0, 0xca, 0x45, 0x39, 0x09, 0x89, 0xba, 0x90, 0xe9, 0xc9, + 0xba, 0x96, 0x2c, 0xd0, 0x6b, 0xec, 0x20, 0xa0, 0xc7, 0xdc, 0x3e, 0x05, 0xf4, 0x7d, 0xc1, 0x8e, 0xf9, 0x20, 0x18, + 0x62, 0x7c, 0xd5, 0x80, 0xde, 0x48, 0xf5, 0x08, 0x1e, 0xc2, 0xc0, 0x72, 0xd1, 0x57, 0x05, 0x43, 0x58, 0xa1, 0xbf, + 0x52, 0x36, 0xf9, 0xe6, 0xef, 0x6e, 0x7e, 0xcf, 0xb5, 0x98, 0x1d, 0x84, 0xe2, 0xf6, 0x7a, 0x02, 0xc4, 0xaf, 0xe2, + 0x57, 0x60, 0x5d, 0xad, 0x25, 0xde, 0x6e, 0x7a, 0xfe, 0x14, 0xbe, 0x1c, 0xdd, 0x7e, 0x52, 0x9a, 0x4f, 0x20, 0x48, + 0x8d, 0x93, 0x94, 0xbb, 0xef, 0x3e, 0x4a, 0x57, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xdd, 0x5b, 0xc9, 0x59, 0x53, 0xf8, + 0x8f, 0x75, 0xbe, 0xc7, 0xd8, 0x21, 0xf2, 0x14, 0xa7, 0xbf, 0x01, 0x86, 0x7d, 0xe7, 0xdf, 0xca, 0xac, 0x21, 0xd1, + 0xb9, 0xfa, 0x08, 0xe8, 0xff, 0x58, 0x8f, 0xdf, 0x31, 0x4a, 0xfa, 0x92, 0x38, 0x47, 0xb8, 0x22, 0x5e, 0xa2, 0xa9, + 0x5e, 0x6f, 0x5c, 0xd3, 0x4f, 0x85, 0x79, 0xa1, 0x15, 0x1c, 0xf6, 0xad, 0x51, 0x78, 0xe0, 0x99, 0xf7, 0x9b, 0x68, + 0x08, 0xba, 0x7f, 0xc7, 0xbd, 0xf1, 0x9b, 0x60, 0x19, 0xde, 0x94, 0xb3, 0xcc, 0xdc, 0xe1, 0x6e, 0x32, 0x91, 0xca, + 0x1b, 0xc6, 0x82, 0xb5, 0x50, 0xe6, 0xab, 0x69, 0x30, 0xdb, 0xd4, 0x91, 0x4a, 0x76, 0xdf, 0xbf, 0x6d, 0x9c, 0xb0, + 0xd9, 0x20, 0x38, 0xad, 0x64, 0x11, 0x5f, 0xf2, 0x60, 0xaa, 0x55, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0xe3, + 0xb4, 0x77, 0xf0, 0x64, 0xa9, 0x99, 0x09, 0x71, 0x6d, 0x75, 0x16, 0xf0, 0xd6, 0x8c, 0xe6, 0x71, 0x05, 0xbb, 0xcc, + 0x57, 0x52, 0xfc, 0xd9, 0x92, 0x64, 0x63, 0xfd, 0x0d, 0x19, 0xb6, 0x95, 0xcf, 0x9c, 0x03, 0xc6, 0xcc, 0x8d, 0x54, + 0x41, 0xee, 0x7a, 0xc0, 0x08, 0x21, 0x11, 0x10, 0xce, 0x62, 0xe2, 0x4e, 0x98, 0xf0, 0x8f, 0x2e, 0x30, 0x4e, 0x8c, + 0x81, 0x71, 0x3e, 0xca, 0x90, 0xd3, 0x63, 0x3e, 0x48, 0x1a, 0xb3, 0xf5, 0xa7, 0x2a, 0x91, 0x5e, 0x4b, 0x42, 0xcf, + 0xe0, 0xf7, 0xb8, 0xc5, 0x03, 0x35, 0x82, 0x53, 0xba, 0x9b, 0xd3, 0xfe, 0xab, 0x82, 0x0c, 0xff, 0x02, 0xef, 0xae, + 0xd8, 0x5e, 0x96, 0x13, 0x58, 0xdc, 0xb1, 0x57, 0x3c, 0xcd, 0x55, 0x8b, 0x13, 0xe2, 0x11, 0x8b, 0xdc, 0x27, 0x16, + 0x30, 0xa2, 0x86, 0xd1, 0xf8, 0xf1, 0xf4, 0xe4, 0xad, 0xc6, 0x6c, 0xca, 0xfd, 0x0f, 0x60, 0x44, 0xb5, 0xb4, 0xdd, + 0x0e, 0xf8, 0x72, 0x84, 0x06, 0xdb, 0xa9, 0x1b, 0xec, 0x7e, 0xdf, 0xa4, 0x1d, 0x95, 0x5e, 0x36, 0x27, 0x06, 0xdd, + 0x51, 0xda, 0x2c, 0x95, 0x41, 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0x6b, 0xc4, 0xaa, 0xde, 0x87, 0xe1, 0x92, 0xc6, 0x56, + 0x56, 0x6e, 0x77, 0x13, 0x8e, 0x6c, 0x02, 0x5c, 0x9f, 0x82, 0xb2, 0x6a, 0xce, 0x41, 0x0b, 0x3a, 0x13, 0x38, 0xa2, + 0xed, 0x36, 0x84, 0x08, 0x1c, 0xc5, 0x70, 0x32, 0x0b, 0x8b, 0xe1, 0x50, 0x0d, 0x7c, 0x41, 0x48, 0xf4, 0xa9, 0x98, + 0x67, 0x0b, 0x85, 0xd8, 0xe3, 0xef, 0xa4, 0xdf, 0x0a, 0xc5, 0x29, 0xf7, 0x7e, 0x13, 0x64, 0xf3, 0x7b, 0x8a, 0x31, + 0x07, 0x9d, 0x66, 0x33, 0x03, 0x09, 0xeb, 0x71, 0x45, 0xd4, 0x3a, 0xb2, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, + 0x75, 0x8b, 0x27, 0xd6, 0x33, 0x7a, 0x0f, 0x2a, 0x41, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x3e, 0x89, 0x50, 0x52, + 0x4e, 0x9a, 0xcc, 0x8c, 0x15, 0x0d, 0x16, 0x20, 0x24, 0x8d, 0xcb, 0xea, 0x8d, 0x4c, 0xb3, 0x8b, 0x0c, 0x10, 0x13, + 0x9c, 0xff, 0x9c, 0x6c, 0xbc, 0x79, 0xae, 0xe6, 0xa5, 0x2b, 0x71, 0x66, 0x61, 0x3e, 0xba, 0xde, 0xd2, 0x82, 0x44, + 0x05, 0xd0, 0x28, 0x5f, 0xcb, 0xf3, 0xd3, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x65, 0x3b, 0xc4, 0x8f, 0x58, 0x45, + 0xbc, 0xd3, 0xba, 0x52, 0x22, 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xa8, 0xe1, 0x83, 0x30, 0x83, 0x4e, + 0xf2, 0x83, 0x9e, 0xd1, 0xb1, 0x35, 0x90, 0xf4, 0xb5, 0x08, 0xbe, 0x46, 0x47, 0x3a, 0x51, 0xa6, 0x91, 0x98, 0x42, + 0xa2, 0x5f, 0x2f, 0xb4, 0xc6, 0x32, 0xca, 0xbe, 0x22, 0xff, 0x7b, 0xdd, 0xbd, 0xdf, 0xc4, 0x76, 0x0b, 0x93, 0xec, + 0x79, 0x5c, 0xc1, 0xa6, 0x46, 0xad, 0x10, 0xce, 0xce, 0x71, 0x85, 0xda, 0xb1, 0x5e, 0x58, 0x02, 0x79, 0x00, 0x5b, + 0x91, 0x06, 0x65, 0x90, 0xec, 0x53, 0x31, 0x17, 0x0b, 0x27, 0xca, 0x91, 0x0a, 0xef, 0x4b, 0x8e, 0x52, 0x0e, 0x57, + 0xb1, 0xb0, 0x60, 0xc8, 0xaf, 0x8e, 0x2e, 0x0a, 0x79, 0x05, 0x92, 0x12, 0xc3, 0x50, 0x59, 0x5e, 0x17, 0x57, 0x6d, + 0x49, 0x68, 0xef, 0x0c, 0x40, 0x58, 0x0a, 0x10, 0xbc, 0x34, 0x6a, 0x88, 0xd9, 0x46, 0xed, 0xae, 0xe8, 0x5e, 0x72, + 0x40, 0x9d, 0xee, 0xda, 0xad, 0x37, 0x65, 0x9b, 0x6d, 0xc5, 0x85, 0x7f, 0x42, 0xe9, 0xc7, 0x7c, 0x50, 0xf8, 0x54, + 0x02, 0x37, 0xbe, 0xda, 0x64, 0xd9, 0xc5, 0x1d, 0x2e, 0xfd, 0xaa, 0x31, 0x7e, 0xfd, 0x7e, 0x4f, 0x2d, 0x84, 0x46, + 0x2a, 0x30, 0xdf, 0x3e, 0x33, 0x55, 0x19, 0x4d, 0xa9, 0xbd, 0x04, 0x57, 0xce, 0x7e, 0x04, 0x15, 0x71, 0x5d, 0x91, + 0xc9, 0xd4, 0x00, 0xed, 0x79, 0x59, 0xe1, 0x56, 0x16, 0xe0, 0xb1, 0x13, 0x90, 0xed, 0x96, 0x87, 0x81, 0x3e, 0x74, + 0x02, 0x7f, 0x4b, 0x9e, 0x22, 0xb3, 0x66, 0x1f, 0x7f, 0xd1, 0x82, 0x7f, 0x6c, 0xc1, 0xcf, 0x28, 0xee, 0xb4, 0x32, + 0xff, 0x56, 0x5a, 0xb7, 0xb8, 0x7f, 0x27, 0xd3, 0x84, 0xa2, 0x32, 0xa1, 0xf6, 0x2b, 0xfd, 0x97, 0x09, 0x96, 0xa4, + 0xb2, 0x7f, 0x90, 0xf0, 0xc1, 0xac, 0xf1, 0xc4, 0x1a, 0x4f, 0x86, 0xd3, 0xad, 0x34, 0x0c, 0x01, 0x0a, 0xfd, 0xbc, + 0xcc, 0x15, 0xd5, 0xcf, 0xbf, 0xac, 0xf9, 0x9a, 0x37, 0x5b, 0x6c, 0x93, 0x1e, 0x68, 0xb0, 0x97, 0x47, 0x53, 0x0a, + 0x27, 0x51, 0xe7, 0x46, 0xa2, 0x2e, 0x6a, 0x96, 0xa1, 0x3a, 0xc1, 0xab, 0x79, 0xaa, 0x87, 0xbd, 0x99, 0x88, 0xd6, + 0x4a, 0xca, 0x12, 0x03, 0xd6, 0x3a, 0xf2, 0x90, 0xdc, 0xad, 0x75, 0xdc, 0x69, 0xa8, 0x4b, 0x53, 0x28, 0x01, 0x56, + 0xb8, 0x00, 0x47, 0xd0, 0xcf, 0x45, 0xc8, 0xe1, 0x9a, 0xaa, 0xf4, 0x0b, 0x9a, 0x92, 0x27, 0x9e, 0xa2, 0x56, 0x2b, + 0xd2, 0xed, 0x47, 0x39, 0x76, 0xc3, 0x37, 0x4e, 0xc8, 0x89, 0x11, 0xfa, 0xbb, 0x63, 0x29, 0x67, 0x68, 0xf1, 0xa0, + 0x4e, 0xb0, 0x5e, 0xde, 0x52, 0xa0, 0x98, 0xa3, 0xcb, 0xaa, 0x6b, 0x5e, 0xa3, 0xed, 0xcb, 0xb2, 0xdf, 0xcf, 0x6d, + 0x3d, 0x29, 0x3b, 0xda, 0x2c, 0xcd, 0x3e, 0x44, 0xc5, 0x14, 0xee, 0xfa, 0x44, 0xf3, 0x57, 0xa1, 0xbe, 0x6a, 0xcb, + 0x9c, 0x8f, 0x38, 0xe2, 0x62, 0xe4, 0xa4, 0xfe, 0x45, 0x4d, 0xbd, 0x12, 0xf7, 0xab, 0x4a, 0xbe, 0x13, 0xc6, 0x8a, + 0xd1, 0x01, 0xf5, 0xa7, 0x4a, 0xe5, 0xfd, 0xb2, 0x00, 0xb8, 0x27, 0xc1, 0x3e, 0x81, 0x7d, 0x85, 0x46, 0xf8, 0x6d, + 0x09, 0xf8, 0x37, 0x8a, 0x1b, 0xb0, 0x0a, 0x0c, 0x30, 0x9a, 0x6c, 0xcf, 0x69, 0x02, 0x07, 0x9c, 0xd0, 0x2a, 0x0a, + 0x2a, 0xcc, 0xd0, 0x50, 0x5b, 0x18, 0x3d, 0x45, 0x19, 0xb7, 0xca, 0xec, 0xdd, 0x18, 0x3b, 0x2d, 0xf0, 0x1a, 0xfe, + 0x7c, 0x5e, 0xe8, 0x61, 0xa3, 0x0e, 0xd2, 0xa3, 0x93, 0x98, 0xfe, 0xb8, 0x85, 0x93, 0x9b, 0x85, 0xb3, 0xac, 0x59, + 0x02, 0xdd, 0x81, 0x0b, 0x62, 0xdc, 0xef, 0xe7, 0x70, 0x64, 0x9a, 0x91, 0x2f, 0x58, 0x4e, 0x63, 0xb6, 0xa4, 0xda, + 0xd3, 0xee, 0xb2, 0x0a, 0x73, 0xba, 0xb4, 0x32, 0xde, 0x94, 0x81, 0xca, 0x68, 0xbb, 0x0d, 0xe1, 0x4f, 0xb7, 0xb5, + 0x4b, 0x3a, 0x5f, 0x42, 0x06, 0xf8, 0x03, 0x12, 0x51, 0xc4, 0xbe, 0xfe, 0xb7, 0x1a, 0xa7, 0xf4, 0x44, 0x69, 0xcd, + 0x12, 0xba, 0x66, 0xba, 0x7e, 0x7a, 0xc1, 0xd6, 0x8d, 0xa5, 0xb0, 0xdd, 0x86, 0xcd, 0x04, 0xa6, 0x39, 0x57, 0x32, + 0xbd, 0x40, 0x9d, 0x14, 0x50, 0xb1, 0xf0, 0x02, 0x97, 0x5f, 0x4a, 0x28, 0x34, 0x77, 0xbe, 0x5c, 0x18, 0x25, 0x26, + 0xb4, 0x4a, 0x7e, 0xf9, 0x50, 0x99, 0xaf, 0x8d, 0x47, 0xdc, 0xbf, 0xd2, 0x30, 0x31, 0x45, 0xa2, 0x42, 0x74, 0xf6, + 0x1b, 0xc8, 0x72, 0x04, 0xe0, 0x58, 0x9e, 0xca, 0x9a, 0xfe, 0x98, 0x42, 0x1c, 0x74, 0x68, 0xd0, 0xbb, 0x42, 0x5e, + 0x65, 0x25, 0x0f, 0xf1, 0x9e, 0xe0, 0x69, 0x46, 0xef, 0x37, 0xf8, 0xd0, 0xd6, 0x1e, 0x3d, 0x41, 0x36, 0x9e, 0x72, + 0xbf, 0xfe, 0x4e, 0x84, 0x73, 0x88, 0x56, 0xb9, 0xa0, 0x5a, 0x5d, 0xed, 0x00, 0xa8, 0x3c, 0xdb, 0xab, 0x47, 0x70, + 0xba, 0xe9, 0xeb, 0x5b, 0x15, 0x3a, 0x73, 0x00, 0x69, 0x0f, 0xc9, 0xba, 0xe6, 0x7a, 0x07, 0xb8, 0x23, 0xb1, 0x5a, + 0x03, 0x8d, 0x75, 0x5b, 0xb3, 0xd3, 0x1e, 0xc5, 0x63, 0x22, 0x33, 0x63, 0x91, 0x62, 0xcc, 0xdd, 0x3a, 0x2d, 0x8a, + 0x36, 0x68, 0x86, 0xb0, 0x7b, 0xd7, 0xe1, 0xeb, 0x56, 0x84, 0xf5, 0xfb, 0x6d, 0x5f, 0x60, 0x34, 0x8c, 0xb9, 0x76, + 0xcf, 0x33, 0x74, 0xc3, 0x06, 0xdb, 0xc8, 0x79, 0x88, 0x7c, 0x98, 0xa9, 0x03, 0x51, 0xd6, 0xd6, 0x80, 0xed, 0x11, + 0xd7, 0x9b, 0x56, 0xf1, 0xf3, 0x2a, 0xe6, 0x6c, 0xcf, 0x1a, 0xa7, 0xb4, 0xbe, 0xc6, 0x35, 0xc7, 0x55, 0x21, 0xa2, + 0xb6, 0x9e, 0xf1, 0x30, 0xec, 0x7c, 0x81, 0x3b, 0xb3, 0xc2, 0xe0, 0x45, 0x58, 0x2a, 0xd9, 0xa9, 0x5c, 0x7f, 0x0e, + 0x5b, 0x1c, 0xa4, 0xf2, 0xa5, 0xd7, 0xdf, 0x7f, 0xf9, 0xe2, 0x0b, 0x74, 0x53, 0x73, 0x7e, 0x04, 0x41, 0x26, 0xd0, + 0x21, 0x4b, 0xa9, 0x1e, 0xbf, 0x2b, 0x80, 0xda, 0xc3, 0x3c, 0x7c, 0x57, 0x30, 0x11, 0x5f, 0x67, 0x97, 0x71, 0x25, + 0x8b, 0xd1, 0x35, 0x17, 0xa9, 0x2c, 0xac, 0xd4, 0x38, 0x38, 0x5e, 0xad, 0x72, 0x1e, 0x80, 0xa9, 0xbc, 0x65, 0x94, + 0x6d, 0x65, 0x99, 0x1e, 0x5c, 0x2d, 0x4f, 0xaf, 0xb4, 0xe8, 0xbc, 0xbc, 0xbe, 0x0c, 0x22, 0xfc, 0x75, 0x6e, 0x7e, + 0x5c, 0xc5, 0xe5, 0xc7, 0x20, 0xb2, 0x36, 0x75, 0xe6, 0x07, 0x4a, 0xe5, 0xc1, 0x7f, 0x0a, 0x64, 0xba, 0xdf, 0x15, + 0x60, 0x99, 0x6d, 0x2b, 0x3e, 0x8c, 0xb1, 0xd6, 0xe1, 0x84, 0xcc, 0x54, 0x89, 0xde, 0xbb, 0x64, 0x5d, 0x80, 0xb5, + 0x9f, 0xc2, 0x32, 0x56, 0xb9, 0x66, 0x58, 0x99, 0xaa, 0xc8, 0xcc, 0xca, 0x9a, 0xed, 0x87, 0xd6, 0x89, 0x66, 0x8e, + 0xde, 0x02, 0xfa, 0x81, 0xec, 0x5f, 0xd2, 0x72, 0xcd, 0x3c, 0x1f, 0x9b, 0xc6, 0xeb, 0x47, 0xfb, 0x97, 0x6e, 0xc1, + 0xde, 0xda, 0x3b, 0x39, 0x0a, 0x13, 0xc1, 0xb3, 0xd6, 0x8c, 0x2f, 0xf2, 0xac, 0x80, 0x95, 0x33, 0x19, 0x8f, 0xa9, + 0xb7, 0xb4, 0x5a, 0x37, 0x47, 0x87, 0xe4, 0x9a, 0x3d, 0xae, 0x1e, 0x73, 0xb2, 0xcf, 0x5b, 0xa6, 0xb6, 0x6d, 0xeb, + 0x38, 0x4f, 0x93, 0xaf, 0x4c, 0xf7, 0xc5, 0xda, 0x46, 0x44, 0x57, 0xce, 0x7d, 0xce, 0x2b, 0xb8, 0xf5, 0x4d, 0x69, + 0xe8, 0xb5, 0x04, 0x20, 0x3a, 0x6d, 0xc0, 0x5f, 0xb0, 0x72, 0x3d, 0xaa, 0x78, 0x59, 0x81, 0x84, 0x05, 0x45, 0x78, + 0x53, 0xec, 0x4d, 0xe1, 0x6e, 0x9c, 0x9e, 0xc3, 0x0e, 0x5c, 0x4c, 0xd1, 0x1d, 0x27, 0x26, 0xb3, 0xd2, 0x68, 0x45, + 0x23, 0xfd, 0xcb, 0xf5, 0x25, 0xd6, 0x7d, 0xd1, 0xca, 0x3c, 0x9b, 0x53, 0x61, 0xb1, 0xbb, 0xca, 0xa5, 0x13, 0xf5, + 0x5b, 0x26, 0x5c, 0xb9, 0x12, 0x04, 0x64, 0x5a, 0xb0, 0x5e, 0x61, 0x76, 0x91, 0x5c, 0x03, 0x21, 0x03, 0xc3, 0xd7, + 0x60, 0x2d, 0x4a, 0x6e, 0xac, 0x60, 0xbd, 0x7b, 0xbe, 0x4e, 0x10, 0x52, 0xf0, 0xc0, 0x4d, 0xd0, 0x0f, 0xad, 0x9b, + 0xb7, 0xa3, 0x44, 0x19, 0xc4, 0xe3, 0xd6, 0x4e, 0x39, 0x48, 0x20, 0x00, 0xf7, 0x54, 0x85, 0xe0, 0x50, 0x20, 0xeb, + 0xe0, 0x6a, 0xc6, 0x11, 0x5c, 0x5d, 0x39, 0x73, 0x71, 0x03, 0xb0, 0xae, 0xfc, 0xb9, 0x6c, 0x70, 0x61, 0x3d, 0xa2, + 0xca, 0x9c, 0x71, 0x8a, 0x41, 0x8c, 0x2c, 0x41, 0x5f, 0x59, 0x4a, 0x7b, 0x09, 0x9a, 0xc6, 0x2b, 0xb6, 0x52, 0x3e, + 0x00, 0xf4, 0x9c, 0xad, 0x94, 0xb1, 0x3f, 0x7e, 0x7d, 0xc6, 0x56, 0x5a, 0x1a, 0x3c, 0xbd, 0x9a, 0x9d, 0xcf, 0xce, + 0x06, 0xec, 0x20, 0x0a, 0xb5, 0x01, 0x43, 0xe0, 0x90, 0xf8, 0x83, 0x41, 0xa8, 0xf1, 0x4e, 0x06, 0x2a, 0x20, 0x16, + 0xf1, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, 0x43, 0x0c, 0x7e, 0xd5, 0x7c, 0x41, 0x02, 0x42, 0x4d, 0x69, 0xe8, 0xf2, + 0x18, 0x0e, 0x27, 0x7b, 0x13, 0x48, 0xc5, 0xcc, 0x4c, 0x15, 0xc6, 0xc6, 0x24, 0x82, 0x78, 0xa7, 0x9d, 0xf5, 0x42, + 0xb9, 0xdd, 0x35, 0x1a, 0xc8, 0x95, 0xc1, 0x17, 0x55, 0x3c, 0xd9, 0x1b, 0x76, 0x55, 0x8c, 0xa3, 0x70, 0x6d, 0x94, + 0x6f, 0x67, 0x87, 0x00, 0x5e, 0x7b, 0x36, 0xf4, 0xe5, 0x12, 0x67, 0xfb, 0x4f, 0xc9, 0xe3, 0xa7, 0x84, 0x9e, 0xb1, + 0xb3, 0xaf, 0x9e, 0xd2, 0x33, 0x45, 0x4e, 0xf6, 0x26, 0xd1, 0x35, 0xb3, 0x98, 0x2f, 0x07, 0xaa, 0x09, 0xf4, 0x72, + 0xb4, 0x16, 0x6a, 0x81, 0x69, 0x87, 0xa6, 0xf0, 0xdb, 0xf1, 0x5e, 0x30, 0xb8, 0x6e, 0x37, 0xfd, 0xba, 0xdd, 0x56, + 0xcf, 0xab, 0x6b, 0xef, 0x20, 0xda, 0x2d, 0x66, 0xf2, 0xf7, 0xf1, 0x9e, 0x9b, 0x03, 0xac, 0xef, 0xe1, 0x31, 0x31, + 0x4d, 0xda, 0x19, 0x15, 0xbf, 0xa6, 0x27, 0xd8, 0x87, 0x66, 0x91, 0x1d, 0x7d, 0x18, 0xfe, 0x5b, 0x9d, 0xa8, 0xcf, + 0xbe, 0x3a, 0x00, 0x72, 0x04, 0x32, 0x50, 0x2c, 0x11, 0xcc, 0x70, 0xa0, 0x29, 0xa0, 0x20, 0xd3, 0xe3, 0x4e, 0xf5, + 0xf0, 0xab, 0x51, 0x53, 0x33, 0x72, 0x0d, 0x53, 0x83, 0x6d, 0xc1, 0x0f, 0x54, 0x37, 0xf4, 0x37, 0x1a, 0xdd, 0x48, + 0x3b, 0x99, 0x99, 0x97, 0xd4, 0xc6, 0x75, 0xbb, 0x86, 0x00, 0xc6, 0x0e, 0x5e, 0x50, 0xb2, 0xaf, 0x0f, 0x2f, 0xf7, + 0x70, 0x15, 0x01, 0x4a, 0x16, 0x0b, 0xbe, 0x1e, 0x5c, 0xea, 0xcd, 0xbd, 0x17, 0x90, 0xc1, 0xd7, 0xc1, 0xd1, 0xd7, + 0x03, 0x39, 0x08, 0x0e, 0xf7, 0x2f, 0x8f, 0x02, 0x67, 0xdc, 0x0f, 0x21, 0x1e, 0x55, 0x45, 0x31, 0x13, 0xa6, 0x8a, + 0xc4, 0xd6, 0x9e, 0xdb, 0x7a, 0x95, 0xf1, 0x19, 0x4d, 0xa7, 0x16, 0xf9, 0x3b, 0x4c, 0x59, 0x6c, 0x7e, 0x07, 0x13, + 0x7e, 0x15, 0x44, 0x2e, 0x08, 0xea, 0x2c, 0x8f, 0x62, 0xba, 0x64, 0xb7, 0x22, 0x4c, 0x69, 0xb2, 0x9f, 0x13, 0x12, + 0x85, 0x4b, 0x05, 0x9e, 0xa7, 0x5e, 0x27, 0x10, 0xc7, 0xd5, 0x7d, 0x7e, 0x2b, 0xc2, 0x25, 0xcd, 0xf7, 0x13, 0xd2, + 0x2a, 0xc2, 0x45, 0x64, 0xd9, 0xd4, 0xf4, 0x82, 0x85, 0x2b, 0x7a, 0x09, 0xcc, 0x94, 0x5c, 0x87, 0x97, 0xc0, 0xe5, + 0xad, 0xe7, 0xab, 0x05, 0xbb, 0x6c, 0x48, 0xdf, 0x0c, 0x5f, 0x7c, 0x61, 0x7d, 0xf2, 0x80, 0x87, 0x74, 0x7e, 0x78, + 0x29, 0xd8, 0x00, 0x5c, 0x67, 0xfc, 0xe6, 0x3b, 0x79, 0xab, 0xe7, 0xa5, 0x3d, 0xc5, 0x38, 0x33, 0xed, 0xc4, 0xa4, + 0x9d, 0x90, 0xfb, 0xf7, 0xed, 0x4d, 0x6c, 0x4e, 0xf6, 0x32, 0x5a, 0x2b, 0x97, 0x55, 0xcb, 0x90, 0x14, 0x6b, 0x86, + 0xfc, 0x3d, 0x4a, 0x4e, 0xad, 0xc0, 0x93, 0x5d, 0xf0, 0x2a, 0x59, 0xfa, 0x07, 0x95, 0xb5, 0x1a, 0xb0, 0xc7, 0x88, + 0x65, 0xa1, 0x70, 0xec, 0xdf, 0x64, 0xac, 0x58, 0xfb, 0x02, 0x8d, 0x18, 0xb9, 0xb7, 0x37, 0x19, 0xf3, 0x62, 0xae, + 0x26, 0x6b, 0x2f, 0x54, 0x9d, 0x97, 0x9e, 0xb7, 0x78, 0x2f, 0xa7, 0xd4, 0x30, 0x12, 0xd1, 0xbd, 0xb1, 0x32, 0xa3, + 0x54, 0x89, 0x5a, 0x83, 0x46, 0x04, 0x1b, 0xbb, 0xe0, 0x97, 0xe0, 0x84, 0xca, 0x3d, 0x75, 0xb6, 0x6f, 0xa7, 0x54, + 0x7a, 0xc0, 0xb2, 0xd4, 0xa8, 0xca, 0xdd, 0x32, 0x93, 0xac, 0x1a, 0x04, 0xa3, 0x3f, 0x4b, 0x29, 0x66, 0x78, 0x67, + 0x64, 0xc1, 0x14, 0xac, 0x04, 0x55, 0x2d, 0xc3, 0x72, 0xc8, 0x51, 0x8b, 0x67, 0x7c, 0x52, 0xa5, 0xfe, 0xd1, 0x11, + 0x24, 0x77, 0xb9, 0x6e, 0x05, 0xc9, 0x7d, 0x3a, 0x7e, 0xaa, 0x07, 0x3a, 0x5d, 0x6b, 0xc7, 0x43, 0x9f, 0xdf, 0x46, + 0x7c, 0x6d, 0xdd, 0x7b, 0xaa, 0xb5, 0x0a, 0x65, 0xa0, 0xc5, 0x8a, 0xca, 0x95, 0x5a, 0xd2, 0xfb, 0x5d, 0x04, 0xc0, + 0x22, 0x36, 0x66, 0xe3, 0x5d, 0xdb, 0xac, 0x10, 0x34, 0xba, 0xec, 0x68, 0x13, 0x0f, 0x58, 0xa2, 0x5b, 0x3b, 0x98, + 0xd0, 0xf8, 0x88, 0x95, 0xfd, 0x7e, 0x7e, 0x04, 0xf4, 0x54, 0x1b, 0x31, 0x15, 0x70, 0xe4, 0x7f, 0x69, 0x45, 0xa6, + 0x28, 0xb0, 0x59, 0x53, 0x77, 0x6b, 0x2c, 0x23, 0xd1, 0x97, 0x29, 0x5d, 0x9e, 0xf0, 0x0c, 0x98, 0xd6, 0xeb, 0x96, + 0xe3, 0xca, 0xae, 0xe2, 0xc8, 0x53, 0x61, 0x59, 0x71, 0x5e, 0x85, 0xe3, 0xad, 0xc7, 0x37, 0xd8, 0x37, 0x6c, 0xda, + 0x85, 0x3f, 0x84, 0xb0, 0x10, 0xde, 0x64, 0x70, 0x1b, 0xd1, 0x76, 0x12, 0xa8, 0xbc, 0x31, 0xd7, 0x09, 0x65, 0x73, + 0xbb, 0x5e, 0x7b, 0x06, 0xe9, 0xc4, 0x1c, 0x28, 0xd5, 0x08, 0x5a, 0xa3, 0x59, 0x50, 0x35, 0xe2, 0x91, 0xe3, 0xe1, + 0x9d, 0x41, 0xac, 0x96, 0x2f, 0x69, 0x2a, 0x45, 0x03, 0x30, 0x2e, 0x80, 0xcb, 0xd3, 0xaf, 0xef, 0x7f, 0x3e, 0xe5, + 0x71, 0x91, 0x2c, 0xdf, 0xc5, 0x45, 0x7c, 0x55, 0x86, 0x1b, 0x35, 0x46, 0x71, 0x4d, 0xa6, 0x62, 0xc0, 0xa4, 0x59, + 0x49, 0xcd, 0x5d, 0xa9, 0x09, 0x31, 0xd6, 0x99, 0xac, 0xcb, 0x4a, 0x5e, 0x35, 0x2a, 0x5d, 0x17, 0x19, 0x7e, 0xdc, + 0xf2, 0x39, 0xdd, 0x07, 0x20, 0x4f, 0xe3, 0x42, 0x1a, 0x49, 0x5d, 0x88, 0x31, 0x17, 0xf1, 0xba, 0x3e, 0x1e, 0x37, + 0xba, 0x5e, 0xb2, 0x67, 0xe3, 0x27, 0xd3, 0x37, 0x59, 0x98, 0x0d, 0x04, 0x19, 0x55, 0x4b, 0x2e, 0x5a, 0xa6, 0x9c, + 0xca, 0x24, 0x00, 0x7d, 0x3c, 0x7b, 0x8c, 0x1d, 0x8c, 0xc7, 0x64, 0xd3, 0x16, 0x0f, 0xf0, 0x70, 0xb9, 0x0e, 0x0b, + 0x32, 0xd3, 0x75, 0x44, 0x81, 0xe0, 0xb7, 0x55, 0x00, 0x48, 0x8e, 0xb6, 0x2a, 0xc3, 0xa5, 0xb1, 0x67, 0xe3, 0x09, + 0x95, 0xd8, 0xed, 0x90, 0xd4, 0x5e, 0x85, 0x6e, 0xe6, 0xa5, 0xef, 0x51, 0x24, 0x8d, 0xcb, 0xd2, 0x4e, 0xa5, 0x52, + 0xed, 0x99, 0x99, 0xeb, 0x1a, 0xc4, 0x60, 0x08, 0x75, 0xdd, 0xa5, 0x57, 0xf7, 0x6e, 0x73, 0xad, 0xd9, 0x0e, 0x78, + 0xaf, 0x41, 0x33, 0x94, 0xbc, 0xc5, 0xbc, 0x75, 0x45, 0xd4, 0x74, 0xb5, 0x06, 0xb3, 0x62, 0x94, 0x2d, 0x45, 0xe9, + 0x9a, 0x82, 0x52, 0x30, 0xba, 0x58, 0x7b, 0x0b, 0xf7, 0x8d, 0x6c, 0x5c, 0x58, 0x32, 0xbd, 0x5a, 0x94, 0x94, 0x50, + 0xdd, 0x54, 0x8c, 0x94, 0x30, 0x52, 0x1a, 0x9e, 0xca, 0xf7, 0x02, 0x8f, 0xf3, 0x3c, 0x88, 0x5a, 0x5e, 0x60, 0xc7, + 0x15, 0x39, 0x06, 0x47, 0x2f, 0x93, 0xd3, 0x50, 0xe0, 0x1f, 0x33, 0x05, 0x62, 0x3a, 0x54, 0xf7, 0x1b, 0xdc, 0xfc, + 0xff, 0x28, 0x58, 0xe0, 0xf1, 0xad, 0x97, 0xb8, 0x8d, 0xfe, 0x51, 0xf8, 0xb4, 0xf4, 0xb9, 0xf4, 0x5d, 0x5d, 0x3c, + 0x69, 0x6f, 0x36, 0x4a, 0x96, 0x59, 0x9e, 0xbe, 0x95, 0x29, 0x07, 0x91, 0x19, 0x5a, 0x83, 0xb2, 0x23, 0xd1, 0xb8, + 0xe1, 0x81, 0x11, 0x63, 0xe3, 0xc6, 0xf7, 0x63, 0x06, 0xb2, 0x61, 0xb0, 0xfa, 0x66, 0xa9, 0x4c, 0xd6, 0x57, 0x80, + 0x29, 0xa2, 0xe4, 0x27, 0x2f, 0x73, 0x0e, 0x4f, 0xa1, 0xbe, 0x7e, 0x81, 0xdb, 0x5c, 0xe9, 0xfb, 0x9c, 0xff, 0x98, + 0xd1, 0x1f, 0x11, 0xe8, 0x24, 0x5e, 0x81, 0xdc, 0xe3, 0x39, 0xd4, 0x8d, 0x30, 0xb5, 0x1c, 0x83, 0x03, 0x21, 0x1a, + 0x88, 0xa8, 0x58, 0xa0, 0xa0, 0x2e, 0x0c, 0xb0, 0x86, 0xba, 0x60, 0x0e, 0xcf, 0x73, 0x99, 0x7c, 0x9c, 0x1a, 0x9f, + 0xf9, 0x61, 0x8c, 0x31, 0x93, 0x83, 0x41, 0x58, 0xcd, 0x82, 0xe1, 0x78, 0x34, 0x39, 0x78, 0x06, 0xe7, 0x76, 0x30, + 0x0e, 0xc8, 0x20, 0xa8, 0xcb, 0x55, 0x2c, 0x68, 0x79, 0x7d, 0x69, 0xcb, 0xc0, 0x8f, 0xeb, 0x60, 0xf0, 0x8f, 0xc2, + 0x53, 0xbc, 0x83, 0xe6, 0xe4, 0x4c, 0x86, 0x60, 0x63, 0xbf, 0x26, 0x20, 0x29, 0xeb, 0x69, 0x7e, 0x52, 0x1f, 0x6e, + 0x4c, 0x69, 0xff, 0xcc, 0xe1, 0x05, 0x87, 0x1d, 0x12, 0x28, 0x90, 0xc6, 0xd3, 0x6c, 0xf4, 0x5a, 0x29, 0x72, 0xdf, + 0x15, 0x1c, 0xee, 0xcc, 0x3d, 0x67, 0x7a, 0xe4, 0x14, 0x12, 0xcd, 0x2c, 0xe0, 0x46, 0xfe, 0x5a, 0x5c, 0xc7, 0x79, + 0x96, 0xee, 0x35, 0xdf, 0xec, 0x95, 0x77, 0xa2, 0x8a, 0x6f, 0x47, 0x81, 0xb1, 0x26, 0xe4, 0xbe, 0xea, 0x09, 0xd0, + 0x13, 0x60, 0x0b, 0x80, 0x01, 0xf1, 0x8e, 0x99, 0xc9, 0x8c, 0x47, 0xe0, 0x11, 0xd8, 0xf4, 0x81, 0x2c, 0xee, 0x9c, + 0x4b, 0x92, 0xbf, 0x99, 0x4a, 0x7b, 0xd5, 0x2b, 0x77, 0x0a, 0xb2, 0x5e, 0x6d, 0xe5, 0xae, 0x5b, 0x9f, 0x7d, 0xd3, + 0xe1, 0x15, 0x78, 0x2e, 0xc1, 0x2d, 0xb2, 0xdf, 0x6f, 0x0a, 0x2a, 0x85, 0x51, 0x11, 0xef, 0x24, 0xd7, 0xe8, 0xdf, + 0xee, 0x8d, 0x8d, 0x22, 0xb9, 0xe5, 0xc3, 0x03, 0xa8, 0x33, 0x79, 0x57, 0xdc, 0xce, 0x21, 0x6a, 0xeb, 0x6e, 0x3c, + 0xb0, 0xda, 0xa0, 0x5d, 0xd6, 0x1c, 0xc1, 0x85, 0x17, 0x7b, 0x19, 0x8c, 0x05, 0xce, 0xca, 0x48, 0xa9, 0x71, 0x0d, + 0xa9, 0x05, 0x9f, 0xe4, 0xe9, 0x3d, 0x64, 0xa9, 0x27, 0x41, 0x91, 0xe3, 0x59, 0x0c, 0x99, 0xc6, 0xdb, 0xc0, 0xe3, + 0x77, 0x32, 0x04, 0x69, 0xda, 0x76, 0xdb, 0x1c, 0x81, 0xb2, 0x7b, 0x60, 0x4a, 0x52, 0xd7, 0xc6, 0xd4, 0x40, 0x43, + 0xed, 0xa1, 0x46, 0x2a, 0xe2, 0xec, 0xe8, 0x0d, 0xe8, 0x10, 0xc1, 0xf7, 0x3b, 0xcd, 0xca, 0x8e, 0x17, 0x13, 0x82, + 0x27, 0xef, 0xcb, 0xdb, 0xac, 0xac, 0xca, 0xe8, 0x7d, 0x8a, 0x86, 0x50, 0x89, 0x14, 0xd1, 0x2b, 0x88, 0xa7, 0x57, + 0xe2, 0xef, 0x32, 0xfa, 0x39, 0xa5, 0x71, 0x9a, 0x62, 0xfa, 0x8b, 0x02, 0x7e, 0x3e, 0x07, 0x54, 0x47, 0xdc, 0x09, + 0xd1, 0xb9, 0x04, 0x7b, 0x35, 0x88, 0x66, 0x55, 0x71, 0xc0, 0xd0, 0x8c, 0x6e, 0x05, 0x45, 0x8c, 0x36, 0xcc, 0xfe, + 0x43, 0x81, 0x42, 0x21, 0x55, 0xcc, 0x77, 0xc2, 0x3e, 0x44, 0x3f, 0x62, 0x91, 0xc7, 0xef, 0x5e, 0x9b, 0x21, 0x8d, + 0xee, 0x24, 0xd5, 0x5b, 0x1b, 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xae, 0xe9, 0x59, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, + 0x4f, 0xbc, 0x7b, 0xfd, 0x5c, 0x59, 0x98, 0xbc, 0xc8, 0x40, 0x71, 0x70, 0xfc, 0xee, 0xf5, 0x1b, 0x99, 0xae, 0x73, + 0x1e, 0x9d, 0x49, 0x24, 0xad, 0xc7, 0xef, 0x5e, 0xff, 0x82, 0xe6, 0x5e, 0x3f, 0x17, 0xf0, 0xfe, 0x15, 0xf0, 0x96, + 0x51, 0xbc, 0x86, 0x3e, 0xa9, 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd5, 0x5a, 0x46, 0xbf, 0xa6, 0xb5, 0x27, 0xad, 0xfa, + 0x67, 0xe1, 0x53, 0x3b, 0x4f, 0xc0, 0x73, 0x9b, 0x67, 0xe2, 0x63, 0x64, 0x45, 0x3b, 0x41, 0xf4, 0xf5, 0xde, 0xed, + 0x55, 0x2e, 0xca, 0x08, 0x5f, 0x30, 0xb4, 0x0b, 0x8a, 0xf6, 0xf7, 0x6f, 0x6e, 0x6e, 0x46, 0x37, 0x4f, 0x46, 0xb2, + 0xb8, 0xdc, 0x9f, 0x7c, 0xfb, 0xed, 0xb7, 0xfb, 0xf8, 0x36, 0xf8, 0xba, 0xed, 0xf6, 0x5e, 0x11, 0x3e, 0x60, 0x01, + 0x22, 0x54, 0x7f, 0x0d, 0x57, 0x14, 0xd0, 0xc2, 0x0d, 0xbe, 0x0e, 0xbe, 0xd6, 0x87, 0xce, 0xd7, 0x87, 0xe5, 0xf5, + 0xa5, 0x2a, 0xbf, 0xab, 0xe4, 0x83, 0xf1, 0x78, 0xbc, 0x0f, 0x12, 0xa8, 0xaf, 0x07, 0x7c, 0x10, 0x1c, 0x05, 0x83, + 0x0c, 0x2e, 0x34, 0xe5, 0xf5, 0xe5, 0x51, 0xe0, 0x99, 0xe6, 0x36, 0x58, 0x44, 0x07, 0xe2, 0x12, 0xec, 0x5f, 0xd2, + 0xe0, 0xeb, 0x80, 0xb8, 0x94, 0xaf, 0x20, 0xe5, 0xab, 0x83, 0x67, 0x7e, 0xda, 0xff, 0x52, 0x69, 0x4f, 0xfc, 0xb4, + 0x43, 0x4c, 0x7b, 0xf2, 0xdc, 0x4f, 0x3b, 0x52, 0x69, 0x2f, 0xfd, 0xb4, 0xff, 0x5d, 0x0e, 0x20, 0x75, 0xcf, 0xb7, + 0xfe, 0x3b, 0xf7, 0x5a, 0x83, 0xa7, 0x50, 0x94, 0x5d, 0xc5, 0x97, 0x1c, 0x1a, 0x3d, 0xb8, 0xbd, 0xca, 0x69, 0x30, + 0xc0, 0xf6, 0x7a, 0x26, 0x21, 0xde, 0x07, 0x5f, 0xaf, 0x8b, 0x3c, 0x0c, 0xbe, 0x1e, 0x60, 0x21, 0x83, 0xaf, 0x03, + 0xf2, 0xb5, 0x31, 0x90, 0x11, 0x6c, 0x13, 0xb8, 0x50, 0xa4, 0x43, 0x1b, 0x20, 0xcc, 0x97, 0xc6, 0xd5, 0xf4, 0xaf, + 0xa2, 0x3b, 0x1b, 0xde, 0x12, 0x95, 0x9b, 0x6e, 0x50, 0xd3, 0x13, 0xf0, 0x4e, 0x80, 0x46, 0x45, 0xc1, 0x75, 0x5c, + 0x84, 0xc3, 0x61, 0x79, 0x7d, 0x49, 0xc0, 0x2e, 0x73, 0xc5, 0xe3, 0x2a, 0x0a, 0x84, 0x1c, 0xaa, 0x9f, 0x81, 0x8a, + 0x7c, 0x15, 0x20, 0x20, 0x12, 0xfc, 0x17, 0xd4, 0xf4, 0x9d, 0x64, 0x9b, 0x60, 0x78, 0xc3, 0xcf, 0x3f, 0x66, 0xd5, + 0x50, 0x89, 0x16, 0xaf, 0x05, 0x85, 0x1f, 0xf0, 0xd7, 0x55, 0x1d, 0xfd, 0x05, 0x6e, 0xdc, 0x4d, 0x0d, 0xfb, 0x3b, + 0xe9, 0x58, 0xd4, 0x77, 0x72, 0x9e, 0x2d, 0xa6, 0xad, 0x03, 0xfd, 0x44, 0x92, 0x6a, 0x9e, 0x0d, 0x82, 0x61, 0x30, + 0xe0, 0x0b, 0x76, 0x22, 0xe7, 0xdc, 0x33, 0x9f, 0x7a, 0x24, 0xfd, 0x69, 0x9e, 0x65, 0x03, 0xf0, 0x4d, 0x41, 0x7e, + 0x64, 0xff, 0xbf, 0xe7, 0x43, 0x14, 0x1e, 0x0e, 0x1e, 0xed, 0x93, 0x59, 0xb0, 0xba, 0x45, 0x8f, 0xce, 0x28, 0xc8, + 0xc4, 0x92, 0x17, 0x59, 0xe5, 0x2d, 0x95, 0xbb, 0x75, 0xdb, 0xcb, 0xe3, 0xde, 0xb3, 0x79, 0x15, 0x8b, 0x40, 0x9d, + 0x73, 0xa0, 0x78, 0x43, 0xd9, 0x53, 0xd9, 0x94, 0x90, 0x6a, 0x43, 0xde, 0xb0, 0x1c, 0xb0, 0xe0, 0xb0, 0x37, 0x1c, + 0xee, 0x05, 0x03, 0xa7, 0xce, 0x1d, 0x04, 0x7b, 0xc3, 0xe1, 0x51, 0xe0, 0xee, 0x43, 0xd9, 0xc8, 0xdd, 0x19, 0x69, + 0xc1, 0xfe, 0x59, 0x84, 0x25, 0x05, 0xf1, 0x98, 0xd4, 0xe2, 0x2f, 0x0d, 0x2e, 0x33, 0x00, 0xe8, 0x23, 0x25, 0x01, + 0x33, 0xb0, 0x32, 0x03, 0x08, 0xcd, 0x4d, 0x63, 0x76, 0x06, 0xcc, 0x23, 0x70, 0xcc, 0x23, 0x64, 0x1c, 0x00, 0xb1, + 0x24, 0xc0, 0xb9, 0x0b, 0xa2, 0x58, 0x17, 0xf2, 0x08, 0x40, 0xef, 0xf1, 0x27, 0x31, 0xa5, 0x60, 0x92, 0x8e, 0x55, + 0x08, 0x82, 0x38, 0x3e, 0xbb, 0x16, 0xad, 0xc9, 0x59, 0xa2, 0x83, 0x19, 0x49, 0x80, 0x0d, 0x31, 0xb0, 0x73, 0x70, + 0x3f, 0x07, 0xa5, 0x87, 0xd5, 0x3b, 0x21, 0x17, 0x7c, 0xc7, 0x3d, 0xd9, 0x2c, 0x5c, 0x3d, 0xe1, 0x20, 0xb8, 0xe3, + 0x9a, 0x05, 0x18, 0x55, 0xc5, 0xba, 0xac, 0x78, 0xfa, 0xe1, 0x6e, 0x05, 0xb1, 0xef, 0x70, 0x40, 0xdf, 0xc9, 0x3c, + 0x4b, 0xee, 0x42, 0x67, 0xcf, 0xb5, 0x51, 0xe9, 0x3f, 0x7c, 0x78, 0xf3, 0x73, 0x04, 0x22, 0xc7, 0xda, 0x50, 0xfa, + 0x3b, 0x8e, 0x67, 0x93, 0x1f, 0xe1, 0xc9, 0xdf, 0xd8, 0x77, 0xdc, 0x9e, 0x1e, 0xfd, 0x3e, 0xd4, 0x4d, 0xef, 0xf8, + 0xec, 0x8e, 0x8f, 0x5c, 0x71, 0xa8, 0xae, 0x70, 0x5f, 0xdf, 0xac, 0x7d, 0x23, 0xa4, 0x87, 0xe7, 0x99, 0xf2, 0xc6, + 0xfc, 0x68, 0x07, 0xc3, 0x20, 0x98, 0x6a, 0xa1, 0x24, 0x44, 0xdd, 0x60, 0x4a, 0xc0, 0x10, 0xed, 0xe9, 0x65, 0x35, + 0x45, 0xce, 0x4d, 0x8d, 0x2c, 0xbc, 0x1f, 0x30, 0x2d, 0x74, 0x68, 0xe4, 0x50, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc2, + 0x6f, 0x95, 0x30, 0xfd, 0x6a, 0x51, 0x39, 0x07, 0xd1, 0x3d, 0x30, 0xc6, 0x15, 0xbc, 0x80, 0xae, 0xb0, 0xeb, 0xb5, + 0x8a, 0x8a, 0x81, 0xe0, 0x71, 0xc8, 0x01, 0x7a, 0xd8, 0x05, 0x2d, 0x2b, 0x4b, 0x75, 0xab, 0x72, 0x96, 0x2a, 0xea, + 0x32, 0x94, 0x95, 0xb1, 0xc2, 0x7c, 0x2f, 0xd9, 0x0f, 0x05, 0x7a, 0x96, 0x4f, 0x45, 0x17, 0xbc, 0x10, 0x4a, 0xb0, + 0x5c, 0xd7, 0x3b, 0x11, 0x88, 0x3a, 0x3f, 0xf4, 0xae, 0xfa, 0x1a, 0xc7, 0x8e, 0xa7, 0x6f, 0x64, 0xca, 0xb5, 0x09, + 0x85, 0xe6, 0xf3, 0xa5, 0xaf, 0x98, 0x28, 0xd8, 0x0d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd6, 0x7a, 0x33, 0x28, + 0xd1, 0x31, 0xaf, 0x51, 0x70, 0xad, 0x14, 0x0a, 0x46, 0x7b, 0x1b, 0x7f, 0x86, 0x23, 0xb7, 0xba, 0x3d, 0xf4, 0x7e, + 0xab, 0xe2, 0xcb, 0xb7, 0xe8, 0xdb, 0x69, 0x7f, 0x8e, 0x2a, 0xf9, 0xeb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, + 0xe2, 0xd2, 0x42, 0x3d, 0xa7, 0xef, 0x8e, 0xdf, 0x82, 0x1f, 0x25, 0xfe, 0xfe, 0xed, 0xfb, 0xa0, 0x26, 0xd3, 0x78, + 0x56, 0x98, 0x0f, 0x6d, 0x0e, 0x08, 0x4d, 0xe2, 0xd2, 0xec, 0xfb, 0x59, 0xdc, 0x64, 0xdf, 0x35, 0x5b, 0x4f, 0x8b, + 0x26, 0x92, 0x94, 0xe1, 0xf6, 0xc1, 0x80, 0x40, 0x1f, 0x20, 0x8a, 0xb3, 0x2f, 0x68, 0x0c, 0x69, 0x3e, 0xb3, 0xef, + 0x47, 0xc4, 0x7b, 0xb9, 0x13, 0x42, 0x8c, 0x2b, 0x2c, 0x1a, 0x3d, 0xe4, 0x33, 0x1e, 0x29, 0xc3, 0xa2, 0xf7, 0x98, + 0x40, 0x9c, 0xe1, 0xb4, 0x7a, 0x8f, 0x98, 0xc7, 0x78, 0x37, 0xd0, 0xb2, 0x87, 0x28, 0xa3, 0x2e, 0x7b, 0xc3, 0xe2, + 0xfb, 0xe3, 0x3a, 0xcc, 0xac, 0xe5, 0xe5, 0x10, 0xfe, 0x06, 0xda, 0x00, 0x9c, 0x72, 0x64, 0xf9, 0x2a, 0xb3, 0xd1, + 0xd5, 0x12, 0xd3, 0x9b, 0x08, 0x62, 0xf1, 0xe8, 0x74, 0x58, 0xbb, 0x3a, 0x55, 0xef, 0x6a, 0xe7, 0x33, 0xd1, 0xab, + 0x40, 0x2b, 0xd7, 0xb6, 0xc7, 0x43, 0xb8, 0x4b, 0x2d, 0xad, 0xb0, 0x11, 0xe5, 0x5c, 0x3c, 0xdd, 0x39, 0x36, 0x27, + 0xa0, 0xc1, 0x95, 0x4c, 0x01, 0x38, 0x4b, 0xab, 0xd1, 0xa8, 0x11, 0xf6, 0x59, 0x39, 0x9f, 0xc3, 0xd6, 0x42, 0x3c, + 0x2d, 0x00, 0xc3, 0x6d, 0x62, 0x50, 0xf2, 0x6e, 0x0c, 0xca, 0xe9, 0x47, 0x05, 0x6f, 0x1d, 0x9c, 0x95, 0xcb, 0x38, + 0x95, 0x37, 0x80, 0xc5, 0x18, 0xf8, 0xa9, 0x58, 0xaa, 0x97, 0x90, 0x2c, 0x79, 0xf2, 0x11, 0xad, 0x36, 0xd2, 0x00, + 0xb8, 0xca, 0xa9, 0xb1, 0xdc, 0x53, 0x20, 0xa1, 0xae, 0x14, 0x95, 0x10, 0x57, 0x55, 0x9c, 0x2c, 0x4f, 0x31, 0x35, + 0xdc, 0x40, 0x2f, 0xa2, 0x40, 0xae, 0xb8, 0x00, 0x92, 0x9e, 0xb3, 0x7f, 0x65, 0x1a, 0x6b, 0xfc, 0xb9, 0x44, 0x01, + 0x93, 0x46, 0x0d, 0xc6, 0x4a, 0xd9, 0x4b, 0x69, 0xa2, 0xbd, 0x05, 0x41, 0xed, 0x5e, 0xfe, 0x05, 0x75, 0x3f, 0x87, + 0x56, 0x84, 0x0d, 0x30, 0x44, 0x79, 0x8e, 0x3b, 0x34, 0xb5, 0x4b, 0xce, 0x03, 0x46, 0x74, 0xde, 0x67, 0xb5, 0xdd, + 0xea, 0xcf, 0x97, 0x80, 0x6d, 0x9a, 0x1a, 0x9f, 0xc2, 0x30, 0x21, 0x26, 0x36, 0xb0, 0x55, 0x56, 0xda, 0x0d, 0x65, + 0xda, 0x49, 0x97, 0xcc, 0x6b, 0xe1, 0x34, 0xef, 0x31, 0xb6, 0x1c, 0xa9, 0xdc, 0xfd, 0x7e, 0x68, 0x7e, 0xb2, 0x9c, + 0x3e, 0xd7, 0x21, 0x9b, 0xbd, 0xf1, 0xa0, 0x39, 0xd1, 0xea, 0xaa, 0x8e, 0x7e, 0x40, 0x07, 0x60, 0xa6, 0x2d, 0x40, + 0xa6, 0x0b, 0x36, 0xed, 0x2b, 0x51, 0x71, 0x49, 0xc2, 0x52, 0x49, 0x60, 0x67, 0x37, 0x25, 0x3b, 0x9b, 0x80, 0x78, + 0x86, 0xbb, 0x9e, 0x16, 0x3b, 0x21, 0x4d, 0x78, 0x8b, 0xbd, 0x04, 0x44, 0x1d, 0xaa, 0xba, 0x84, 0x6c, 0x8c, 0xa1, + 0x8b, 0x7f, 0x51, 0x0a, 0x13, 0xd6, 0x32, 0xa9, 0x4a, 0x4c, 0x10, 0xa4, 0x72, 0xb7, 0x45, 0x60, 0x89, 0x82, 0x1d, + 0xc0, 0xde, 0xbb, 0x51, 0x37, 0xa3, 0xa6, 0xaa, 0x53, 0x2f, 0xc1, 0xc7, 0x69, 0xd6, 0x55, 0x90, 0x59, 0xd8, 0x55, + 0xb1, 0xe6, 0x81, 0x8e, 0x4d, 0xa5, 0x8c, 0x89, 0xbb, 0xb4, 0xc8, 0x10, 0x0f, 0x18, 0x63, 0xe9, 0x42, 0x20, 0xdf, + 0x6c, 0x77, 0xdc, 0xf4, 0x04, 0xa1, 0x9f, 0xb0, 0xa1, 0x04, 0x6e, 0x3a, 0xdb, 0x53, 0xd3, 0xcc, 0x07, 0x44, 0x1c, + 0x06, 0x14, 0x48, 0x36, 0x0e, 0x69, 0x8e, 0xf4, 0x05, 0x49, 0x13, 0x06, 0x86, 0x56, 0x3c, 0x27, 0xc8, 0x8a, 0x42, + 0xcf, 0xd6, 0x55, 0x1b, 0xe7, 0xca, 0x30, 0x47, 0x4b, 0x4e, 0x85, 0xcf, 0x09, 0x32, 0xb1, 0x7b, 0xda, 0x66, 0x26, + 0xc3, 0x51, 0xb2, 0xc0, 0xfc, 0x0a, 0xa2, 0xc4, 0x9d, 0x69, 0x56, 0xe5, 0x60, 0x5c, 0xc0, 0x02, 0xad, 0x7c, 0x0f, + 0xea, 0xc6, 0x1a, 0xda, 0x68, 0x18, 0x62, 0xb7, 0x3f, 0xc1, 0x7e, 0xad, 0x9d, 0xd6, 0x65, 0x8a, 0xe5, 0x65, 0x0a, + 0xd1, 0x5e, 0xc8, 0xfc, 0x46, 0x91, 0xe8, 0x4e, 0x11, 0x86, 0x84, 0x75, 0x94, 0x3d, 0x69, 0x53, 0x03, 0xe8, 0xa9, + 0x17, 0xf0, 0xbc, 0x73, 0x2d, 0xc3, 0x2e, 0xd2, 0xfd, 0x55, 0xc1, 0xa7, 0x74, 0x83, 0x20, 0x45, 0x6f, 0x52, 0x30, + 0xe7, 0xf5, 0x28, 0xa9, 0x37, 0xa7, 0x2d, 0x33, 0xaa, 0x8e, 0x8a, 0x90, 0x72, 0x82, 0xff, 0xe4, 0xa5, 0xd4, 0xc4, + 0x26, 0x4c, 0xf0, 0xc0, 0x87, 0x79, 0x86, 0x0d, 0xbc, 0xdd, 0xbe, 0x4b, 0xc3, 0xa4, 0xcd, 0x36, 0xa4, 0x20, 0xad, + 0x30, 0x71, 0x31, 0xa0, 0xb2, 0xd7, 0xb8, 0x5f, 0xb0, 0x9d, 0x34, 0x05, 0x0f, 0xc2, 0x46, 0x03, 0x13, 0xb7, 0xba, + 0xf8, 0x3a, 0x4c, 0x68, 0xb8, 0xa4, 0xda, 0xd9, 0x49, 0x4b, 0x9a, 0xdb, 0xeb, 0xf2, 0xc2, 0xf6, 0x41, 0xc7, 0x0e, + 0xeb, 0x1a, 0x1e, 0x68, 0x5e, 0xb3, 0x8b, 0x2b, 0xa6, 0x69, 0xa2, 0xb1, 0x1e, 0x52, 0x96, 0x1c, 0xeb, 0x7a, 0xba, + 0xc2, 0xd5, 0x32, 0xd3, 0xc0, 0xee, 0x12, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x81, 0xcd, 0x66, 0xab, + 0x9a, 0x4c, 0xf3, 0xfb, 0xb2, 0xe5, 0x26, 0x20, 0x9c, 0xa5, 0xbe, 0xb9, 0x4f, 0x8e, 0x35, 0x6d, 0xf3, 0x93, 0x00, + 0xc7, 0xdb, 0x2b, 0x20, 0xe9, 0x58, 0x82, 0x2e, 0xbe, 0xa5, 0x3f, 0x88, 0xd4, 0x4c, 0x05, 0xbd, 0x77, 0xbe, 0x48, + 0xdd, 0xfc, 0x02, 0x6c, 0xa3, 0x36, 0xc6, 0x34, 0x2b, 0x5b, 0x87, 0x89, 0xb2, 0xb0, 0x46, 0x16, 0x72, 0x09, 0x3e, + 0x98, 0xbb, 0x4d, 0x9d, 0x1e, 0x77, 0x10, 0x61, 0xbf, 0x8b, 0x1e, 0x8f, 0x30, 0x56, 0xac, 0x41, 0x62, 0x58, 0x85, + 0x35, 0x6d, 0x2e, 0x87, 0x28, 0xa7, 0x66, 0xc9, 0x44, 0x4b, 0xea, 0x53, 0x8a, 0x28, 0x05, 0x73, 0xe3, 0x69, 0xd9, + 0x30, 0x25, 0x44, 0xc8, 0x0a, 0xe9, 0x80, 0x6a, 0x2d, 0xb4, 0x54, 0x13, 0xf4, 0x3a, 0xf4, 0xb2, 0xd0, 0x98, 0x82, + 0xe8, 0x23, 0x32, 0xdc, 0x88, 0x23, 0xa3, 0xbb, 0x63, 0x14, 0x13, 0x08, 0x55, 0xed, 0xe5, 0x85, 0xd5, 0xa7, 0x65, + 0x5b, 0x1d, 0xc4, 0x15, 0x22, 0xdf, 0x77, 0x13, 0xd4, 0x18, 0x05, 0x6d, 0x4e, 0x37, 0xfa, 0x6b, 0x11, 0xfa, 0x76, + 0xe1, 0xd8, 0x8d, 0x82, 0x48, 0x88, 0xc0, 0xea, 0x35, 0x15, 0x03, 0xb2, 0xce, 0x63, 0x17, 0xa1, 0x49, 0x77, 0x0b, + 0x51, 0xde, 0xa8, 0xac, 0x3f, 0xae, 0x43, 0xb2, 0xdd, 0x62, 0x59, 0xe0, 0xcb, 0x7e, 0xba, 0xbe, 0x07, 0xf2, 0xfb, + 0xcd, 0xfa, 0xb3, 0x90, 0xdf, 0xaf, 0xb3, 0x2f, 0x81, 0xfc, 0x7e, 0xb3, 0xfe, 0x9f, 0x86, 0xfc, 0x3e, 0x5d, 0x7b, + 0x90, 0xdf, 0x6a, 0x30, 0x7e, 0x2f, 0x58, 0x70, 0xf2, 0x36, 0xa0, 0x2f, 0x24, 0x0b, 0x4e, 0x5e, 0xbd, 0xf2, 0x8d, + 0x40, 0x84, 0x46, 0xae, 0x37, 0xb2, 0x60, 0xc4, 0x6d, 0x81, 0x57, 0xa8, 0x75, 0xf2, 0x81, 0x8a, 0x32, 0x00, 0x5e, + 0x2f, 0xff, 0x91, 0x55, 0xcb, 0x30, 0xd8, 0x0f, 0xc8, 0xcc, 0x41, 0x82, 0x0e, 0x27, 0x70, 0x7b, 0x43, 0x23, 0xcb, + 0xea, 0x8b, 0xe0, 0xc3, 0x47, 0xa3, 0x51, 0x5c, 0x5c, 0xe2, 0xa5, 0xce, 0x6c, 0x24, 0x04, 0x3c, 0xce, 0x78, 0x69, + 0x43, 0x44, 0x2c, 0xe3, 0xf2, 0x4c, 0xc7, 0x66, 0x29, 0xed, 0x56, 0x84, 0x88, 0xf3, 0x67, 0x80, 0x53, 0x6f, 0xf7, + 0x66, 0x8c, 0xfd, 0x50, 0x1c, 0xb1, 0x0e, 0x20, 0xfb, 0x7c, 0xad, 0xdf, 0x9d, 0xc7, 0x25, 0x7f, 0x17, 0x57, 0x4b, + 0x06, 0xbd, 0x84, 0xbb, 0x88, 0xe0, 0x49, 0xe5, 0xb1, 0x4d, 0x0a, 0xa8, 0x3c, 0xd3, 0x40, 0xe5, 0x1d, 0xef, 0x69, + 0x68, 0x87, 0x45, 0xfb, 0x00, 0x1b, 0xe9, 0x72, 0x06, 0x46, 0x8b, 0x2f, 0xaf, 0xb9, 0xa8, 0x7e, 0x06, 0x3c, 0x75, + 0xc1, 0x0b, 0xb8, 0x25, 0x20, 0x17, 0xdb, 0x70, 0x42, 0xa0, 0xc2, 0xf7, 0xec, 0x50, 0x51, 0x63, 0x8c, 0x68, 0xa2, + 0xd1, 0x6f, 0xbc, 0x09, 0xa1, 0x77, 0x27, 0xe8, 0x8a, 0x30, 0x12, 0xde, 0x5f, 0x6b, 0x7e, 0x96, 0x81, 0xf9, 0xbc, + 0x00, 0x28, 0x0d, 0x84, 0x43, 0x65, 0x4a, 0x6e, 0x81, 0x09, 0x1b, 0x63, 0xae, 0x94, 0xa5, 0x1e, 0x52, 0x29, 0x55, + 0x70, 0xba, 0x82, 0xa6, 0x12, 0x70, 0xb8, 0x23, 0x09, 0x60, 0xa6, 0xb6, 0x30, 0x88, 0x6e, 0x9b, 0xd2, 0x2c, 0x8d, + 0x9c, 0x22, 0xcd, 0xe1, 0x93, 0x52, 0x05, 0x3a, 0x7d, 0x96, 0xc4, 0x15, 0xbf, 0x94, 0x05, 0x84, 0xc2, 0x6d, 0xa5, + 0x50, 0xa4, 0xdf, 0x67, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0x39, 0x5b, 0x66, 0x65, 0x05, 0xf9, 0xe6, 0xfa, 0xf4, 0x5b, + 0xd4, 0xd3, 0x02, 0xe7, 0x4d, 0x4d, 0x0a, 0x33, 0xf3, 0x78, 0xac, 0x76, 0x3a, 0xa8, 0x57, 0xbd, 0xd7, 0x06, 0xfb, + 0xbd, 0x39, 0xd1, 0xe3, 0xd6, 0x7a, 0xb0, 0x9a, 0xd4, 0x66, 0xaa, 0x82, 0x38, 0x02, 0xea, 0xc0, 0x8e, 0xe2, 0x76, + 0x33, 0x0f, 0x93, 0x76, 0xca, 0x76, 0xbb, 0x93, 0x09, 0x0e, 0xee, 0x56, 0x12, 0xdc, 0x12, 0x61, 0xc5, 0x1f, 0x2a, + 0x08, 0x96, 0xd9, 0x70, 0x12, 0x99, 0x70, 0xac, 0x05, 0xff, 0x6b, 0xcd, 0x0d, 0x16, 0x7c, 0xa8, 0x1d, 0xf2, 0x9c, + 0xe4, 0x5c, 0x0f, 0x80, 0x67, 0xc3, 0xa6, 0x67, 0x67, 0x0e, 0xf6, 0x53, 0x7e, 0xcb, 0x21, 0x60, 0x4b, 0xe7, 0x28, + 0x2e, 0xa6, 0xda, 0x9a, 0xd7, 0xb0, 0x12, 0xf4, 0xcb, 0xbe, 0xd3, 0x38, 0xb5, 0x09, 0x0f, 0x87, 0xcf, 0xc6, 0xa4, + 0xd6, 0xa6, 0xe5, 0x38, 0xcf, 0xf6, 0xb7, 0x5a, 0x0b, 0xee, 0xd9, 0xae, 0x07, 0xda, 0x74, 0x0a, 0x68, 0xd7, 0x48, + 0xc5, 0x3d, 0xdd, 0xaf, 0x49, 0xed, 0xe6, 0xd5, 0x0a, 0x7a, 0xfe, 0x50, 0x87, 0xcb, 0xd9, 0xa3, 0x4d, 0xa6, 0xab, + 0xac, 0xff, 0xc8, 0x6c, 0x58, 0xb8, 0xc6, 0x46, 0xad, 0xf5, 0x8c, 0xfb, 0xa8, 0x6c, 0x1d, 0xd9, 0xf4, 0x0c, 0xb1, + 0xac, 0x73, 0xb7, 0x8f, 0xd4, 0x23, 0x57, 0x51, 0xb2, 0xba, 0xb3, 0xf0, 0x5b, 0x9e, 0x84, 0x5d, 0x0d, 0x53, 0x8c, + 0xb8, 0xe9, 0x02, 0x02, 0x55, 0x82, 0xf8, 0x3d, 0xfc, 0xe3, 0xd1, 0xa6, 0x49, 0x3d, 0xea, 0x7d, 0xef, 0x33, 0xfc, + 0x9d, 0xa5, 0xf0, 0xb7, 0xaa, 0xff, 0xa0, 0x9b, 0x2b, 0x5e, 0x2d, 0x65, 0x1a, 0x05, 0xef, 0x4e, 0x4e, 0x3f, 0x04, + 0x1a, 0x00, 0x1d, 0xaf, 0x01, 0x46, 0xf1, 0x6b, 0xa0, 0x96, 0x40, 0x11, 0x92, 0xcb, 0x4b, 0xc4, 0x00, 0xd4, 0x20, + 0xf2, 0xa7, 0x4b, 0x79, 0x73, 0x9c, 0xe7, 0x3e, 0xaf, 0x6a, 0xe8, 0x9b, 0x66, 0xdf, 0x1a, 0xc4, 0x21, 0x04, 0x91, + 0xdb, 0x28, 0x2b, 0xcf, 0xb4, 0x92, 0x24, 0x3d, 0x3b, 0xbf, 0x3b, 0xd3, 0x82, 0x18, 0x0b, 0xc2, 0xf8, 0xfc, 0x8f, + 0xc3, 0x34, 0xbb, 0xde, 0x43, 0x22, 0xcc, 0x02, 0xb0, 0x60, 0xcf, 0xf9, 0xf9, 0xba, 0xaa, 0xa4, 0x18, 0x16, 0xf2, + 0x26, 0x38, 0x3a, 0x54, 0x0f, 0x26, 0x43, 0xac, 0x1e, 0x83, 0xbd, 0xff, 0x4a, 0xf2, 0x2c, 0xf9, 0xc8, 0x82, 0x47, + 0x9b, 0x8c, 0x1d, 0xb5, 0x48, 0xed, 0xb8, 0x0e, 0x8e, 0xa0, 0xad, 0x7b, 0xc7, 0x79, 0x7e, 0xb8, 0xaf, 0xbe, 0x38, + 0x3a, 0xdc, 0x4f, 0xb3, 0xeb, 0x23, 0x0f, 0x0f, 0xdf, 0x99, 0xb7, 0x22, 0xf2, 0x98, 0xbb, 0xbe, 0x82, 0x1f, 0x6b, + 0xc2, 0x43, 0x7b, 0xe0, 0x83, 0xd0, 0xc4, 0x44, 0x13, 0x41, 0x41, 0x4b, 0x18, 0xc3, 0xf1, 0xb6, 0xdd, 0x86, 0xd6, + 0xf6, 0x26, 0xf1, 0x80, 0x69, 0x0a, 0x60, 0x08, 0x30, 0x0b, 0x4d, 0x08, 0x4d, 0x6a, 0x12, 0x1a, 0xf8, 0x9c, 0x98, + 0xd0, 0xa2, 0xa6, 0x40, 0xf1, 0xdf, 0xc4, 0x2b, 0x23, 0x6b, 0xd2, 0x77, 0x77, 0xd3, 0xfa, 0x59, 0x63, 0x1c, 0xa3, + 0xf6, 0xa8, 0x1a, 0x40, 0xab, 0x5e, 0x79, 0xdf, 0xc0, 0x82, 0x78, 0x31, 0xac, 0x68, 0xd0, 0x22, 0x15, 0x20, 0x1e, + 0xf4, 0xa5, 0x5a, 0x9c, 0x86, 0xf3, 0x92, 0xca, 0x05, 0x61, 0x47, 0xe1, 0x06, 0xb9, 0xdb, 0x52, 0x11, 0xcb, 0x48, + 0xd6, 0x0e, 0x5d, 0x52, 0xcd, 0xce, 0xd1, 0xa3, 0x8d, 0x40, 0x40, 0xc3, 0x92, 0x1d, 0x35, 0xe7, 0xab, 0x8a, 0xcf, + 0x87, 0x4b, 0x0e, 0x6e, 0x30, 0xc1, 0xde, 0x7f, 0xa5, 0xe7, 0xb9, 0x9d, 0x14, 0xb5, 0x22, 0x97, 0xb1, 0x48, 0x73, + 0xfe, 0x21, 0x3e, 0xff, 0x01, 0xf3, 0xbc, 0x38, 0xcf, 0x9f, 0x43, 0x86, 0x3a, 0x38, 0x7a, 0xb4, 0x49, 0xaa, 0xd1, + 0xcb, 0xb7, 0x1f, 0x5e, 0x7f, 0xf8, 0xe7, 0xd9, 0xf3, 0xe3, 0x0f, 0x2f, 0xbf, 0x3f, 0x79, 0xff, 0xfa, 0xe5, 0xe9, + 0xdc, 0xfa, 0x9d, 0x2a, 0x38, 0x33, 0xb2, 0xd8, 0x6e, 0x5d, 0xbe, 0x5f, 0xdf, 0xbe, 0x78, 0xf9, 0xea, 0xf5, 0xdb, + 0x97, 0x2f, 0x6a, 0x35, 0x97, 0xed, 0x86, 0xc0, 0x0e, 0x8d, 0x33, 0xc1, 0x0b, 0x28, 0x5e, 0x07, 0x55, 0xc4, 0x66, + 0x6b, 0x14, 0xbe, 0x66, 0xd3, 0x75, 0xc0, 0x02, 0x58, 0x64, 0x7b, 0x7a, 0xb3, 0x40, 0xc3, 0xa5, 0xd9, 0x38, 0xfe, + 0x12, 0xf3, 0x7b, 0xf3, 0x12, 0xbf, 0x7b, 0x2f, 0x6f, 0x4c, 0x57, 0xf4, 0x08, 0x29, 0x80, 0xad, 0xd9, 0xf3, 0x3f, + 0x0e, 0x7d, 0xa1, 0x16, 0xde, 0xfc, 0x55, 0xb9, 0xf0, 0xab, 0x0e, 0xf6, 0xb4, 0x81, 0x5d, 0x00, 0xf1, 0x21, 0x82, + 0xa3, 0xc3, 0x7d, 0x3f, 0xf7, 0xd1, 0x1f, 0xd1, 0xcf, 0x5e, 0xe7, 0xb0, 0x54, 0x18, 0x87, 0x66, 0xda, 0xce, 0x21, + 0x04, 0x11, 0x8c, 0xdc, 0x31, 0xa5, 0x56, 0x90, 0x21, 0x57, 0x92, 0x44, 0x76, 0x12, 0x95, 0xe1, 0x88, 0x29, 0xed, + 0x0f, 0xfd, 0xd7, 0xf5, 0x19, 0x2f, 0xe2, 0x5c, 0x94, 0xb2, 0x08, 0xa0, 0x1f, 0xed, 0xb0, 0x0e, 0x7b, 0x5e, 0xf8, + 0x14, 0xec, 0x51, 0x27, 0x79, 0x87, 0x11, 0xd9, 0x6f, 0x7f, 0xea, 0x75, 0xec, 0x0f, 0xe2, 0x7e, 0xec, 0xe9, 0xce, + 0xb4, 0xc8, 0x8b, 0x6d, 0xe0, 0xfd, 0xe1, 0x37, 0xe6, 0x27, 0x19, 0xfd, 0x87, 0xa4, 0x97, 0x31, 0xbd, 0x8a, 0xe9, + 0xa9, 0x58, 0xd4, 0x9d, 0xb3, 0x63, 0x43, 0xbb, 0x50, 0x3e, 0x0d, 0x01, 0x20, 0x42, 0xb3, 0xed, 0x9a, 0x99, 0xcd, + 0x46, 0x5a, 0xa5, 0xf5, 0x21, 0x2e, 0x2e, 0xb9, 0x89, 0xa8, 0x62, 0xde, 0x56, 0x7a, 0x54, 0x88, 0x37, 0x2c, 0x80, + 0x9e, 0xd2, 0xd3, 0x9a, 0xff, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xe6, 0xaa, 0xac, 0xe4, 0x0a, 0x58, + 0xea, 0xf8, 0x52, 0x8b, 0x48, 0x68, 0xc8, 0xbf, 0xac, 0xba, 0xed, 0x96, 0x8f, 0x70, 0x49, 0x02, 0x5f, 0x36, 0xaa, + 0xe4, 0xe5, 0x65, 0xce, 0xc3, 0xc0, 0xc4, 0xf8, 0x08, 0xa8, 0xad, 0x66, 0xf6, 0x7f, 0x8a, 0x3b, 0xda, 0xe5, 0xb6, + 0x6d, 0xe4, 0xff, 0x7b, 0x0a, 0x86, 0xc9, 0xa5, 0x62, 0x42, 0xd2, 0xa4, 0x64, 0xd9, 0x8e, 0x64, 0xd9, 0x6d, 0x93, + 0x74, 0xce, 0x1d, 0xb7, 0xe9, 0x24, 0xbe, 0xcc, 0x5d, 0x5d, 0x8f, 0x45, 0x51, 0x90, 0xc4, 0x0b, 0x45, 0x6a, 0x48, + 0xca, 0x96, 0xab, 0xf2, 0x9e, 0xa5, 0xcf, 0x72, 0x4f, 0x76, 0xb3, 0xbb, 0x00, 0x08, 0x7e, 0xe8, 0xc3, 0x4d, 0x7a, + 0x37, 0x3d, 0x5f, 0x44, 0x10, 0x00, 0x81, 0x05, 0xb0, 0xbb, 0xd8, 0xcf, 0x27, 0x8e, 0x08, 0xac, 0x69, 0xe4, 0x9b, + 0x8e, 0x96, 0x98, 0x31, 0x93, 0x91, 0xe7, 0x88, 0xc1, 0x44, 0x11, 0xea, 0x1d, 0x6a, 0x21, 0xf8, 0xba, 0x14, 0x47, + 0xd7, 0x1a, 0xc7, 0xcb, 0x51, 0xc8, 0x2c, 0xdc, 0xee, 0xf0, 0xc9, 0xf5, 0x68, 0x39, 0x1a, 0x41, 0x32, 0x95, 0x27, + 0x8e, 0x09, 0xe1, 0x61, 0xe2, 0x14, 0xaf, 0x6d, 0xb9, 0xd1, 0x87, 0x49, 0xd9, 0x59, 0x75, 0xf8, 0x60, 0xd2, 0x01, + 0x12, 0x19, 0xfa, 0x40, 0x06, 0x57, 0xb4, 0x86, 0x53, 0x3b, 0xd0, 0x3f, 0xc0, 0xee, 0x4b, 0xf5, 0x7e, 0xd3, 0xd1, + 0x1f, 0x5c, 0xeb, 0x1f, 0x10, 0xc6, 0x98, 0x64, 0xf8, 0x35, 0xed, 0x5e, 0xdd, 0xd4, 0x49, 0x37, 0xbd, 0xc4, 0x74, + 0x03, 0x20, 0x9b, 0x7d, 0x13, 0x78, 0xd3, 0x28, 0x4e, 0xb3, 0xc0, 0xd7, 0x6f, 0xfa, 0x17, 0x41, 0xeb, 0x7a, 0x9e, + 0xb5, 0x8c, 0x1b, 0xd3, 0xcf, 0xd4, 0x4c, 0x25, 0x02, 0x61, 0x62, 0xa2, 0x92, 0x4d, 0x95, 0xd4, 0x13, 0xb4, 0xb5, + 0xa2, 0x40, 0xcd, 0x58, 0xc9, 0xcf, 0x06, 0x50, 0xaf, 0x92, 0xf6, 0x04, 0xf3, 0x37, 0xe9, 0xd8, 0xd2, 0xe8, 0xd3, + 0x85, 0xe2, 0xf5, 0x72, 0x8d, 0xa4, 0x3c, 0x2b, 0xa8, 0x25, 0x86, 0xea, 0x15, 0xfe, 0x2d, 0xf4, 0xfc, 0x44, 0xb5, + 0xcd, 0x2c, 0xd1, 0xdd, 0xe1, 0x37, 0x65, 0xbe, 0x00, 0xe8, 0x37, 0x18, 0x46, 0x44, 0x71, 0xa6, 0x41, 0xfc, 0x19, + 0xf8, 0xe2, 0xb0, 0x6a, 0xcb, 0xc5, 0x7b, 0x6d, 0x19, 0x39, 0x47, 0x06, 0xdf, 0x22, 0xf1, 0x6b, 0xf1, 0x28, 0x64, + 0xa5, 0x40, 0x13, 0xc4, 0xd3, 0x47, 0xb0, 0x80, 0x59, 0x7c, 0x19, 0xdf, 0x57, 0xd5, 0x15, 0xaf, 0x87, 0xbb, 0x69, + 0x2f, 0x12, 0x40, 0xd8, 0x6f, 0x22, 0xf9, 0x5e, 0x8b, 0xe7, 0x0f, 0x15, 0x8c, 0x4e, 0xe5, 0x4c, 0xa1, 0x7d, 0x86, + 0xe0, 0x61, 0x32, 0x30, 0xe7, 0x42, 0x5a, 0x00, 0x28, 0x89, 0x93, 0xe9, 0x61, 0x7e, 0x2b, 0x32, 0x1c, 0x8b, 0xfc, + 0xc2, 0x0a, 0x71, 0x06, 0xec, 0x1a, 0x2d, 0x96, 0x19, 0x46, 0xc4, 0x85, 0x01, 0xb0, 0x5c, 0xd7, 0x30, 0xc2, 0x26, + 0x60, 0xe9, 0x82, 0x4d, 0xcc, 0x75, 0x2d, 0x18, 0xd7, 0xcb, 0x88, 0xe7, 0x05, 0xdc, 0x85, 0xe8, 0x1d, 0xc5, 0x49, + 0xf0, 0x98, 0xf0, 0x59, 0xf8, 0x66, 0x11, 0x4d, 0xbe, 0xe5, 0xa3, 0xda, 0xa5, 0x01, 0x31, 0xf8, 0x84, 0xf8, 0xfa, + 0xad, 0xb0, 0x71, 0xae, 0x10, 0x24, 0xb3, 0x34, 0xcb, 0xe1, 0xb3, 0x75, 0x94, 0x9f, 0x3f, 0x5b, 0xa7, 0xf9, 0xe0, + 0xd9, 0xda, 0x03, 0x46, 0x2e, 0xd7, 0x61, 0x9e, 0x85, 0x3b, 0x4d, 0x31, 0x3b, 0xd8, 0x53, 0x54, 0xae, 0xa1, 0x3e, + 0x7d, 0xc0, 0xb5, 0xe6, 0x8b, 0x24, 0x98, 0x7b, 0xc9, 0x03, 0x29, 0xd9, 0x4d, 0x55, 0x13, 0x6f, 0xe8, 0x1a, 0xa1, + 0x75, 0x9a, 0x2e, 0x61, 0x78, 0x5d, 0xfb, 0x5a, 0x96, 0x31, 0x3e, 0x39, 0xa9, 0x69, 0x84, 0x6f, 0xdd, 0xea, 0x2f, + 0x99, 0x3d, 0x66, 0x99, 0x17, 0x84, 0xd4, 0xa4, 0x2f, 0x52, 0xc8, 0xd7, 0x66, 0x93, 0x96, 0x67, 0x13, 0x95, 0x77, + 0x0b, 0x4e, 0x86, 0x10, 0x3e, 0x8d, 0x1b, 0x67, 0x86, 0xa9, 0xa5, 0x9a, 0xd7, 0x8f, 0xde, 0xfd, 0x4f, 0xa1, 0xcf, + 0x00, 0xfa, 0x11, 0x40, 0x9f, 0x45, 0x7e, 0x3c, 0x66, 0x7f, 0x7f, 0x7f, 0x21, 0x73, 0x59, 0x81, 0x58, 0x66, 0xc8, + 0xb7, 0x61, 0x8a, 0xdc, 0x42, 0x82, 0x9c, 0x02, 0x65, 0x9d, 0x2a, 0x76, 0x4c, 0x92, 0xeb, 0xda, 0x39, 0x8d, 0x9d, + 0x8d, 0x69, 0xd4, 0x83, 0x18, 0x5b, 0x25, 0xf9, 0xe9, 0x01, 0xd5, 0x26, 0xda, 0x46, 0x95, 0x00, 0x0c, 0x09, 0xcc, + 0xb0, 0x80, 0x02, 0xa4, 0xdd, 0x1c, 0xb8, 0xc5, 0xf5, 0xc1, 0x9e, 0xa3, 0xf0, 0xdb, 0x3d, 0x2f, 0x33, 0x26, 0xd8, + 0x4a, 0x3f, 0x3b, 0xc5, 0x44, 0x5a, 0x40, 0x9d, 0x21, 0xf4, 0xc6, 0xe9, 0x01, 0x3d, 0x6a, 0x95, 0xfd, 0x5f, 0x74, + 0x22, 0x2e, 0x72, 0x3d, 0xde, 0xc1, 0xa3, 0x0e, 0x06, 0xe4, 0x6d, 0x87, 0x52, 0x2f, 0xd7, 0xb5, 0x39, 0x67, 0x84, + 0x78, 0x8c, 0x1f, 0x08, 0x00, 0xe0, 0xc0, 0x49, 0xd5, 0xb5, 0xb9, 0xb7, 0xc2, 0x99, 0x8b, 0x37, 0xde, 0xaa, 0xe5, + 0xf2, 0x57, 0xb6, 0x04, 0x54, 0x5a, 0x3e, 0x5a, 0x3e, 0x5f, 0x5c, 0xb0, 0xee, 0x17, 0x42, 0xdb, 0xd6, 0x0c, 0xb5, + 0xa6, 0x0d, 0x8b, 0x3b, 0x13, 0x8b, 0x3b, 0xde, 0xb0, 0xb8, 0xe3, 0x2d, 0x8b, 0x1b, 0xf2, 0x85, 0xd4, 0x24, 0xe8, + 0x12, 0xf4, 0xd8, 0x92, 0xc0, 0xe3, 0x6c, 0x45, 0x8f, 0x9f, 0x33, 0x84, 0x93, 0x95, 0x86, 0x60, 0xb1, 0xb4, 0x01, + 0x56, 0x4d, 0x70, 0x51, 0x00, 0xa1, 0xa2, 0x94, 0xb4, 0x74, 0xe8, 0xc4, 0xb4, 0x21, 0x2f, 0x66, 0x2b, 0xac, 0x4e, + 0x17, 0x36, 0x29, 0xe5, 0xfc, 0x6e, 0xcd, 0x36, 0x4c, 0x74, 0xb6, 0x65, 0xa2, 0x7e, 0xe9, 0xe4, 0xf2, 0x59, 0xd3, + 0x19, 0x54, 0xe7, 0x04, 0x5b, 0x10, 0x8c, 0x38, 0x71, 0xc7, 0x94, 0xb7, 0xe1, 0x66, 0x84, 0xaa, 0x6c, 0xa8, 0x85, + 0x97, 0xa6, 0xf7, 0x71, 0x02, 0x5a, 0x10, 0xe8, 0xe6, 0x71, 0x3b, 0x6a, 0x1e, 0x44, 0x3c, 0xc0, 0xca, 0xc6, 0xbd, + 0x54, 0xbc, 0x57, 0x77, 0x54, 0xbb, 0xdb, 0xa5, 0x1a, 0x0b, 0x2f, 0xcb, 0x58, 0x82, 0x30, 0xf7, 0x20, 0x12, 0x77, + 0x0d, 0xd8, 0xff, 0x97, 0x4d, 0xd6, 0x80, 0x41, 0x42, 0xa3, 0xc0, 0xe9, 0x88, 0x9f, 0x17, 0xc0, 0x47, 0x25, 0x82, + 0xe8, 0x2a, 0xb1, 0xda, 0x12, 0x09, 0xf7, 0x1f, 0xf1, 0xb0, 0xb6, 0x12, 0xc5, 0x9b, 0xc8, 0x3d, 0x32, 0xec, 0x85, + 0x37, 0xfe, 0x00, 0xba, 0xb6, 0x56, 0xdb, 0x04, 0xbb, 0x59, 0x35, 0x32, 0x5b, 0x42, 0x8c, 0x9d, 0x5f, 0xa0, 0x48, + 0xc4, 0x91, 0xdc, 0x2a, 0x09, 0x1c, 0x1a, 0x3d, 0x6b, 0x72, 0xb3, 0x6e, 0xe7, 0x07, 0xd3, 0xc0, 0xa8, 0xe1, 0x4c, + 0x40, 0x6c, 0xe1, 0xe0, 0x4c, 0xde, 0xaf, 0x42, 0xd3, 0x3d, 0x32, 0x40, 0x18, 0x7b, 0x0d, 0x29, 0x46, 0x1d, 0x71, + 0x79, 0x1d, 0x26, 0x40, 0xa2, 0xae, 0x9d, 0x9b, 0xfc, 0xf9, 0x14, 0x7f, 0xb9, 0x37, 0xf9, 0xf3, 0x11, 0xfe, 0x6a, + 0xdf, 0x60, 0x32, 0xb9, 0x86, 0x4b, 0xbb, 0x32, 0x67, 0xfd, 0xac, 0xb4, 0x9d, 0xc8, 0x24, 0xec, 0xf1, 0x04, 0xfa, + 0xe9, 0xb3, 0x75, 0x0a, 0x4e, 0x90, 0xea, 0x1c, 0x22, 0x3b, 0x31, 0xf2, 0xc6, 0xf2, 0xe9, 0x86, 0xf2, 0x91, 0xf1, + 0x3f, 0xa6, 0xf2, 0xb8, 0x4b, 0xe2, 0x82, 0xa2, 0x94, 0x45, 0x0e, 0xb7, 0xa3, 0x20, 0xf2, 0x92, 0x87, 0x5b, 0xba, + 0x4a, 0xb4, 0x04, 0x9f, 0x2e, 0x45, 0x29, 0xc4, 0x4a, 0x96, 0x35, 0x50, 0x99, 0x22, 0x73, 0x7d, 0xe0, 0x64, 0x7e, + 0xf0, 0x8f, 0x44, 0x61, 0xd1, 0x4a, 0x97, 0x4d, 0xbe, 0x20, 0xa5, 0x0f, 0xdd, 0x3e, 0x5b, 0xb7, 0x58, 0xbd, 0x9b, + 0xca, 0x6c, 0x2b, 0x3c, 0x20, 0x2c, 0x0f, 0x5e, 0x5c, 0xe7, 0xe3, 0xa0, 0x87, 0x2a, 0xa6, 0x51, 0xbc, 0xb2, 0x9e, + 0xad, 0xb3, 0x73, 0x7d, 0xee, 0x25, 0x9f, 0xd8, 0xd8, 0xf2, 0x83, 0xc4, 0x0f, 0x99, 0xde, 0xd3, 0x47, 0xa1, 0x17, + 0x7d, 0xe2, 0x8f, 0x56, 0xbc, 0xcc, 0x50, 0x69, 0xbc, 0xf3, 0x9e, 0x2b, 0x60, 0x42, 0xe2, 0x39, 0x64, 0x4c, 0x1b, + 0xa0, 0xa0, 0xbd, 0x96, 0xc2, 0xad, 0x82, 0x29, 0x2c, 0x6a, 0x99, 0x60, 0xf3, 0x08, 0x7a, 0x6c, 0x70, 0x22, 0x35, + 0x75, 0x5c, 0x2f, 0xdd, 0x54, 0xa7, 0x4a, 0x82, 0x49, 0x99, 0x05, 0xf1, 0x16, 0x7b, 0xf8, 0xe3, 0x9f, 0xa3, 0xfc, + 0xd4, 0xfb, 0x7f, 0x8e, 0x73, 0x78, 0x9b, 0x3f, 0xa8, 0x36, 0xf6, 0xd2, 0x74, 0x39, 0x67, 0x63, 0xd2, 0x97, 0x9d, + 0x17, 0x43, 0x29, 0x33, 0xf2, 0xea, 0x70, 0x7e, 0x59, 0xb6, 0x8f, 0x0f, 0x5f, 0x83, 0x1e, 0x1f, 0x38, 0xba, 0x78, + 0x32, 0xd1, 0x8b, 0x2b, 0xf5, 0x8e, 0x66, 0xee, 0xe1, 0x2f, 0xcb, 0xef, 0xde, 0x3a, 0xdf, 0xc9, 0xc6, 0x91, 0x6e, + 0xe4, 0x43, 0xa1, 0x94, 0xe4, 0x8c, 0xa9, 0x32, 0x5e, 0x31, 0xa3, 0x89, 0x17, 0x6d, 0x9e, 0xce, 0x75, 0x69, 0x97, + 0x2d, 0x18, 0x1b, 0x83, 0xbd, 0xaa, 0x59, 0x2b, 0xbd, 0x0d, 0xd9, 0x1d, 0x93, 0x0a, 0xcf, 0xfa, 0xc7, 0x1a, 0x5a, + 0x60, 0x44, 0x36, 0xae, 0x48, 0xe5, 0x6c, 0x95, 0x32, 0xa5, 0x21, 0xce, 0x81, 0xcf, 0x5c, 0xdd, 0xe5, 0x95, 0x5d, + 0x3d, 0x34, 0x75, 0x65, 0x00, 0x1b, 0x47, 0x76, 0xbe, 0xa1, 0xbc, 0x87, 0xe9, 0x98, 0x9b, 0xc7, 0x66, 0xba, 0x46, + 0x0f, 0x22, 0x58, 0x73, 0x38, 0x85, 0xb0, 0xf9, 0x5b, 0x85, 0xf4, 0x61, 0x13, 0xc4, 0x9a, 0x64, 0x52, 0xba, 0x90, + 0xf1, 0x34, 0x2e, 0x84, 0x56, 0x9e, 0xe6, 0x08, 0x73, 0x9a, 0x46, 0x2c, 0x4d, 0x37, 0x42, 0x47, 0xae, 0xb0, 0xa9, + 0x17, 0xb5, 0xcb, 0x93, 0x2f, 0xca, 0x4d, 0xc7, 0x04, 0x0a, 0x8c, 0xb3, 0xa9, 0x7e, 0x0b, 0xd1, 0xf9, 0xed, 0x9c, + 0x9b, 0x6c, 0x24, 0xd3, 0x91, 0xce, 0xd5, 0xe9, 0x9b, 0xde, 0xdf, 0xeb, 0x7c, 0x50, 0x25, 0xb2, 0xd8, 0x38, 0xb4, + 0x56, 0x09, 0xd5, 0xd5, 0x44, 0x31, 0xd8, 0x81, 0x18, 0x53, 0x05, 0x9f, 0xb1, 0xc9, 0x84, 0xf9, 0x59, 0x6a, 0x08, + 0xc1, 0x8c, 0x0c, 0xa0, 0x0a, 0x8e, 0x33, 0x4f, 0x06, 0xfa, 0x8f, 0xe0, 0x46, 0x2e, 0xe2, 0x0c, 0xf1, 0x01, 0x89, + 0x1b, 0x4a, 0x33, 0x98, 0xa8, 0xc7, 0x32, 0x88, 0xf8, 0x57, 0x20, 0x3f, 0x76, 0x43, 0x39, 0x0e, 0x8d, 0xe3, 0xfb, + 0x62, 0x13, 0xc4, 0xd2, 0xb0, 0x63, 0x3b, 0xb6, 0xd9, 0x76, 0x56, 0xd7, 0xee, 0x77, 0x5d, 0xd7, 0xc9, 0x75, 0x13, + 0xdc, 0x97, 0x3e, 0xed, 0x7b, 0xc2, 0xb1, 0x55, 0x07, 0x5a, 0x2d, 0xa3, 0xc7, 0xb4, 0x6b, 0xbb, 0xaf, 0x5c, 0xdd, + 0x24, 0xab, 0x31, 0x05, 0x91, 0xf9, 0xf1, 0x1d, 0x4b, 0x3e, 0x7b, 0x2a, 0xe5, 0xce, 0xf7, 0x1b, 0xcf, 0x91, 0xeb, + 0x00, 0xc6, 0xcd, 0xe2, 0xc5, 0x23, 0xa6, 0xd0, 0xd1, 0x4d, 0xdd, 0x0f, 0xe3, 0x94, 0xa9, 0x73, 0x20, 0x01, 0xc3, + 0x67, 0x4e, 0xe2, 0xa7, 0xf7, 0x6f, 0x3f, 0x7c, 0xd0, 0x4d, 0x4c, 0x86, 0x99, 0xaa, 0xbd, 0xf3, 0x0d, 0xb5, 0x03, + 0xd5, 0x37, 0xee, 0x3b, 0x22, 0x27, 0x74, 0x85, 0x2c, 0xef, 0x39, 0x2a, 0xab, 0x6d, 0x39, 0x4e, 0x66, 0xf8, 0x97, + 0xe9, 0xde, 0xb7, 0xd7, 0xbc, 0x1a, 0x70, 0xc3, 0x76, 0x5a, 0x56, 0x2a, 0x99, 0x07, 0xd1, 0x6d, 0x43, 0xa9, 0xb7, + 0x6a, 0x28, 0x85, 0x8b, 0x53, 0x0d, 0x57, 0x2d, 0xe3, 0xb9, 0x42, 0x8a, 0x21, 0x97, 0xf1, 0x2e, 0x70, 0x29, 0xd7, + 0x97, 0xcf, 0x18, 0x34, 0x0f, 0x66, 0x5e, 0x1d, 0x75, 0x43, 0x31, 0xbf, 0x73, 0x48, 0xd8, 0xfa, 0x21, 0xd8, 0xbc, + 0x31, 0x55, 0xe3, 0x55, 0x66, 0xd3, 0xa4, 0xc5, 0xaa, 0xd2, 0x09, 0xb1, 0x93, 0xb7, 0x19, 0x9b, 0x2f, 0x58, 0xe2, + 0x65, 0xcb, 0x84, 0xdd, 0x86, 0xf1, 0xfd, 0x93, 0xc2, 0xa2, 0x7c, 0x47, 0xe5, 0x59, 0x30, 0x9d, 0xc9, 0xda, 0xe7, + 0x2d, 0x36, 0x90, 0x0b, 0xb8, 0xf5, 0x03, 0xf9, 0x7f, 0x7e, 0xb7, 0xed, 0xff, 0xfc, 0xbe, 0xb3, 0x2a, 0x74, 0x9f, + 0x0f, 0xcd, 0x6c, 0xb0, 0xc7, 0xbe, 0x68, 0xfe, 0x52, 0x19, 0xe6, 0xcd, 0x75, 0x6a, 0x8b, 0x00, 0xef, 0x6b, 0x4b, + 0x50, 0x2b, 0x2c, 0xef, 0x9b, 0x47, 0x0d, 0x0c, 0xe6, 0xb5, 0x73, 0x64, 0x50, 0xe9, 0xb3, 0x86, 0x36, 0x34, 0x7a, + 0x7b, 0xad, 0xc8, 0x1f, 0x87, 0xf0, 0xae, 0x39, 0x7c, 0xe6, 0xf0, 0xb9, 0x14, 0xf0, 0xf5, 0x70, 0x28, 0xd3, 0xab, + 0xa9, 0x4d, 0xc1, 0xca, 0xfd, 0xbc, 0x56, 0xc2, 0x89, 0x67, 0xcf, 0x31, 0xc8, 0xfd, 0x7c, 0xf0, 0x7a, 0x88, 0xf6, + 0x58, 0xa7, 0xa3, 0xa4, 0x60, 0x56, 0x36, 0xa2, 0x36, 0xb2, 0xa7, 0xae, 0x75, 0x5a, 0xc3, 0x6b, 0x50, 0x8a, 0x39, + 0xb7, 0xf2, 0xa1, 0x61, 0xbe, 0x1e, 0x72, 0x31, 0x0e, 0x37, 0x01, 0xed, 0x55, 0xb7, 0x36, 0x17, 0x82, 0x96, 0x80, + 0x6e, 0x6a, 0xa4, 0x5b, 0xc1, 0xca, 0xac, 0x90, 0x9a, 0xa1, 0xf0, 0x1c, 0x6e, 0xf0, 0xc3, 0x1c, 0x53, 0x7e, 0xbc, + 0xdb, 0x64, 0x26, 0xf5, 0xd3, 0x6e, 0x33, 0xa9, 0xab, 0xbd, 0xcc, 0xa4, 0x7e, 0xfa, 0xe2, 0x66, 0x52, 0xef, 0x54, + 0x33, 0x29, 0x58, 0xc4, 0xb7, 0x6c, 0x2f, 0xdb, 0x25, 0x61, 0x11, 0x11, 0xdf, 0xa7, 0x03, 0x97, 0xf3, 0xaf, 0xa9, + 0x3f, 0x63, 0x70, 0x27, 0xe7, 0xab, 0x12, 0xc6, 0x53, 0xb0, 0x63, 0xfa, 0xf3, 0x2d, 0x8e, 0xc2, 0x78, 0xaa, 0xda, + 0x1b, 0x45, 0x3c, 0xe8, 0x69, 0x11, 0xc8, 0x88, 0x6c, 0x7c, 0x1c, 0x53, 0x84, 0x3d, 0xb2, 0x0e, 0x0d, 0x25, 0xb1, + 0xb3, 0x34, 0xe0, 0x6a, 0x0b, 0x2b, 0xa0, 0x1e, 0x1a, 0x10, 0xc9, 0x86, 0xed, 0x97, 0x22, 0xbc, 0x83, 0xda, 0x83, + 0x34, 0x94, 0xa5, 0x50, 0x09, 0x6b, 0xfd, 0x97, 0x95, 0xfb, 0xed, 0xb5, 0xdb, 0xef, 0xb8, 0xe0, 0x9f, 0x0c, 0x37, + 0x3a, 0x2c, 0x70, 0xfa, 0x9d, 0x0e, 0x14, 0xdc, 0x2b, 0x05, 0x6d, 0x28, 0x08, 0x94, 0x82, 0x2e, 0x14, 0xf8, 0x4a, + 0xc1, 0x11, 0x14, 0x8c, 0x95, 0x82, 0x63, 0x28, 0xb8, 0xd3, 0xf3, 0xeb, 0x48, 0x0e, 0xf7, 0xd8, 0xb8, 0x31, 0xe9, + 0x06, 0x21, 0xca, 0x8e, 0x4d, 0x17, 0x0c, 0x87, 0xbc, 0x69, 0x2f, 0x36, 0x49, 0x98, 0xd7, 0x4b, 0xcc, 0xfb, 0x19, + 0xa3, 0x58, 0xc9, 0x6f, 0x90, 0xe6, 0xd8, 0x59, 0x0c, 0xa6, 0xc3, 0x22, 0x06, 0x81, 0x80, 0x83, 0xa6, 0x1b, 0x20, + 0xa0, 0xe9, 0xcb, 0x95, 0x13, 0x71, 0x1c, 0x94, 0xb5, 0x2c, 0xde, 0xd1, 0xe7, 0x2c, 0xb9, 0x05, 0x0a, 0x6b, 0x8e, + 0x96, 0x2a, 0x04, 0xfc, 0x12, 0x3a, 0xfd, 0x37, 0x6c, 0xb4, 0x9c, 0x6a, 0x97, 0xf1, 0x74, 0xa7, 0x7a, 0x5e, 0x7d, + 0x05, 0xa3, 0xd4, 0x49, 0xd9, 0x61, 0x89, 0x6d, 0xc9, 0xbf, 0x45, 0x8f, 0x79, 0xb9, 0x7e, 0x06, 0x63, 0xd3, 0x32, + 0x32, 0x0e, 0x81, 0xef, 0x00, 0x8c, 0x14, 0xfd, 0xf8, 0x25, 0xc0, 0x59, 0x79, 0xbe, 0xf2, 0x94, 0xf1, 0x9c, 0xfd, + 0xc0, 0xd2, 0xd4, 0x9b, 0x8a, 0xfa, 0xf5, 0x71, 0x82, 0x41, 0x8c, 0xbc, 0x7f, 0x21, 0x00, 0x41, 0x72, 0x16, 0xd4, + 0xec, 0x1e, 0x92, 0xf8, 0x5e, 0x03, 0xcb, 0x1a, 0xd8, 0x50, 0x85, 0x0d, 0x40, 0x60, 0xc3, 0x12, 0x96, 0xb5, 0xf5, + 0x70, 0xf8, 0xef, 0x58, 0x58, 0x2d, 0xcc, 0xbc, 0x69, 0xb5, 0x88, 0xf6, 0x41, 0xae, 0x8e, 0x4d, 0x2a, 0xcb, 0x4b, + 0x85, 0x9f, 0xa3, 0xfd, 0x0d, 0xe3, 0xe9, 0x9f, 0xaa, 0xfa, 0xdd, 0xa2, 0xb2, 0xff, 0x10, 0x99, 0x41, 0x36, 0xb4, + 0x11, 0xc6, 0x9a, 0x0d, 0x20, 0xec, 0x45, 0xd9, 0xcc, 0x42, 0xef, 0xaa, 0x56, 0x3b, 0x32, 0x4c, 0x1b, 0xd7, 0x76, + 0x5d, 0xf5, 0x29, 0xed, 0x25, 0xd3, 0x91, 0xd7, 0x72, 0xdb, 0xc7, 0xa6, 0xf8, 0xb3, 0x9d, 0xae, 0x91, 0x63, 0x0f, + 0xda, 0x38, 0xb8, 0x5b, 0x4f, 0xe2, 0x28, 0xb3, 0x26, 0xde, 0x3c, 0x08, 0x1f, 0x7a, 0xf3, 0x38, 0x8a, 0xd3, 0x85, + 0xe7, 0xb3, 0x3e, 0x79, 0xd0, 0x81, 0x2b, 0x69, 0x1f, 0xa3, 0x15, 0x70, 0x87, 0x39, 0xd7, 0x6e, 0x27, 0x6c, 0x4e, + 0xad, 0x65, 0x30, 0x82, 0x49, 0xc8, 0x56, 0x39, 0xff, 0x7c, 0xa9, 0x32, 0x55, 0xc5, 0x2d, 0x47, 0x2d, 0x80, 0x23, + 0xe5, 0x91, 0x0e, 0x20, 0xbe, 0x4f, 0x7f, 0xe1, 0x8d, 0x31, 0x38, 0x9f, 0xdd, 0xee, 0x26, 0x6c, 0xae, 0xd9, 0xdd, + 0x8d, 0x9d, 0x27, 0xf1, 0xfd, 0x19, 0x8c, 0x16, 0x1b, 0x5b, 0x29, 0x0b, 0x27, 0xf8, 0xc6, 0x42, 0xe7, 0x0a, 0xd1, + 0x8f, 0x85, 0x17, 0x71, 0xe8, 0x8d, 0xcd, 0xfb, 0xf0, 0xba, 0xd7, 0xd6, 0x9c, 0xfe, 0x3c, 0x88, 0x2c, 0x9a, 0xce, + 0xb1, 0xb3, 0x50, 0xfa, 0x52, 0xe1, 0x67, 0xac, 0xb1, 0xba, 0xab, 0x39, 0x7d, 0xb8, 0xac, 0x4d, 0xc2, 0xf8, 0xbe, + 0x37, 0x0b, 0xc6, 0x63, 0x16, 0xf5, 0x71, 0xcc, 0xb2, 0x90, 0x85, 0x61, 0xb0, 0x48, 0x83, 0xb4, 0x3f, 0xf7, 0x56, + 0xbc, 0xd7, 0xc3, 0x4d, 0xbd, 0x76, 0x78, 0xaf, 0x9d, 0xbd, 0x7b, 0x55, 0xba, 0x01, 0x47, 0x0e, 0xea, 0x87, 0x0f, + 0xad, 0xab, 0x39, 0x95, 0x79, 0xee, 0xdd, 0xeb, 0x22, 0x61, 0xeb, 0xb9, 0x97, 0x4c, 0x83, 0xa8, 0xe7, 0xe4, 0xf6, + 0xdd, 0x9a, 0x36, 0xc6, 0xd3, 0x93, 0x93, 0x93, 0xdc, 0x1e, 0x8b, 0x27, 0x67, 0x3c, 0xce, 0x6d, 0x5f, 0x3c, 0x4d, + 0x26, 0x8e, 0x33, 0x99, 0xe4, 0x76, 0x20, 0x0a, 0x3a, 0x6d, 0x7f, 0xdc, 0x69, 0xe7, 0xf6, 0xbd, 0x52, 0x23, 0xb7, + 0x19, 0x7f, 0x4a, 0xd8, 0xb8, 0x8f, 0x1b, 0xe9, 0x9e, 0x96, 0xfe, 0xd8, 0x71, 0x72, 0xc4, 0x00, 0xd7, 0x25, 0xdc, + 0x84, 0x82, 0x9d, 0x9b, 0xf5, 0xde, 0x35, 0xb5, 0xe2, 0x73, 0xbe, 0xdf, 0x58, 0x6f, 0xec, 0x25, 0x9f, 0x6e, 0x34, + 0x65, 0x16, 0x9e, 0x47, 0xd5, 0xd6, 0x02, 0x0c, 0xd6, 0xaa, 0x07, 0x51, 0xab, 0xfa, 0xa3, 0x38, 0x81, 0x33, 0x9b, + 0x78, 0xe3, 0x60, 0x99, 0xf6, 0xdc, 0xf6, 0x62, 0x25, 0x8a, 0xf8, 0x5e, 0x2f, 0x0a, 0xf0, 0xec, 0xf5, 0xd2, 0x38, + 0x0c, 0xc6, 0xa2, 0x68, 0xd3, 0x59, 0x72, 0xdb, 0x46, 0x1f, 0x7d, 0xb6, 0x03, 0x8c, 0x3c, 0xe0, 0x85, 0xa1, 0x66, + 0x77, 0x52, 0x8d, 0x79, 0x29, 0xca, 0x73, 0x35, 0x27, 0x25, 0xb8, 0xa0, 0x7f, 0xb6, 0x7b, 0xb8, 0x58, 0xc9, 0x3d, + 0xef, 0x1e, 0x2d, 0x56, 0xf9, 0xd7, 0x73, 0x36, 0x0e, 0x3c, 0xad, 0x55, 0xec, 0x26, 0xd7, 0x01, 0x99, 0xaf, 0xb1, + 0xde, 0xb0, 0x4d, 0xc5, 0xb1, 0x80, 0xe8, 0x7e, 0x4f, 0x82, 0xf9, 0x22, 0x4e, 0x32, 0x2f, 0xca, 0xf2, 0x7c, 0x78, + 0x93, 0xe7, 0xfd, 0xab, 0xa0, 0x75, 0xfd, 0xcf, 0x16, 0xd1, 0x69, 0xd2, 0x91, 0xe4, 0xc6, 0x8d, 0xf9, 0x96, 0xa9, + 0xf6, 0x18, 0x40, 0xc6, 0xd0, 0x16, 0x43, 0xad, 0x4c, 0x54, 0xb2, 0x5e, 0x99, 0x80, 0x2c, 0xab, 0x93, 0x7d, 0x47, + 0xb9, 0x0a, 0x52, 0x20, 0xa8, 0xf0, 0x96, 0x0d, 0xae, 0x14, 0xdb, 0x0e, 0x60, 0x56, 0xb0, 0x32, 0x99, 0xd6, 0x3f, + 0xdb, 0xc4, 0x33, 0x7e, 0xb3, 0x9b, 0x67, 0xfc, 0x39, 0xdb, 0x87, 0x67, 0xfc, 0xe6, 0x8b, 0xf3, 0x8c, 0xcf, 0xea, + 0xa6, 0xf5, 0x17, 0xf1, 0x40, 0x97, 0x12, 0x7d, 0x20, 0x4d, 0x09, 0x05, 0xad, 0xb9, 0xf8, 0xc3, 0x96, 0xf0, 0xa2, + 0x37, 0x4a, 0xc3, 0x46, 0x94, 0x1b, 0x84, 0xaf, 0xef, 0xa2, 0xc1, 0x3f, 0x12, 0xf5, 0x79, 0x32, 0x19, 0xbc, 0x89, + 0x95, 0x02, 0xf9, 0xc4, 0x4d, 0x1d, 0x4a, 0x01, 0x06, 0xe8, 0x8d, 0xb0, 0x70, 0xc4, 0x14, 0x0c, 0xe0, 0x9f, 0x4c, + 0x16, 0xbd, 0x63, 0x69, 0xd9, 0xd5, 0x2f, 0x0f, 0xa1, 0x25, 0xcd, 0x29, 0x85, 0x17, 0x4a, 0x4d, 0x94, 0x38, 0x65, + 0x19, 0x77, 0x1b, 0xfd, 0xf6, 0xe1, 0x62, 0xdc, 0xba, 0x88, 0x8d, 0x3c, 0x48, 0xdf, 0x55, 0x7d, 0x40, 0xb8, 0xae, + 0x65, 0xa0, 0x4e, 0x27, 0xe7, 0xd6, 0x59, 0x6a, 0x8e, 0x65, 0x78, 0x4d, 0xcd, 0xcf, 0x4b, 0x33, 0xed, 0xa9, 0x0d, + 0x79, 0xae, 0xa7, 0x1a, 0x31, 0xe6, 0x06, 0xf8, 0x6b, 0xce, 0x01, 0x62, 0xfa, 0x2a, 0x74, 0x9d, 0x1d, 0x53, 0xf3, + 0x60, 0x9c, 0xe7, 0x46, 0x5f, 0x00, 0x42, 0x21, 0xb4, 0x6c, 0x17, 0x13, 0x97, 0xde, 0x4b, 0x0b, 0x02, 0xae, 0x91, + 0x23, 0x75, 0xdb, 0x05, 0xa8, 0xaf, 0xb9, 0x72, 0x8e, 0xc3, 0x4c, 0xd7, 0x08, 0x7c, 0x64, 0xd6, 0xa0, 0x4c, 0x08, + 0xd4, 0xfa, 0x12, 0xfe, 0xe2, 0x95, 0x28, 0xa8, 0xdb, 0x47, 0x12, 0x70, 0x50, 0xff, 0x0e, 0x8e, 0xee, 0x44, 0xfe, + 0xb9, 0x0e, 0xb0, 0xc7, 0xeb, 0xe0, 0x43, 0xae, 0x4b, 0xde, 0x0f, 0xb7, 0xdf, 0xd9, 0xe9, 0x01, 0x34, 0x38, 0xab, + 0xa8, 0xe9, 0x77, 0x58, 0xff, 0x01, 0x2b, 0x91, 0xde, 0x9b, 0x76, 0x7a, 0xaf, 0xbd, 0x58, 0x8b, 0x20, 0x11, 0x99, + 0xb7, 0xb0, 0xe0, 0x8a, 0x8f, 0xb8, 0x97, 0x63, 0x3c, 0x25, 0x1e, 0x45, 0x7f, 0x99, 0x02, 0x6e, 0xc4, 0x8b, 0x2a, + 0xe2, 0x9f, 0xbe, 0xbf, 0x4c, 0xd2, 0x38, 0xe9, 0x2d, 0xe2, 0x20, 0xca, 0x58, 0x92, 0x23, 0xa8, 0xae, 0x11, 0x3e, + 0x02, 0x3c, 0x37, 0xeb, 0x78, 0xe1, 0xf9, 0x41, 0xf6, 0xd0, 0x73, 0x38, 0x4b, 0xe1, 0xf4, 0x39, 0x77, 0xe0, 0x34, + 0xd6, 0xef, 0x71, 0x68, 0xbe, 0x44, 0xc6, 0x2f, 0xa9, 0xb3, 0x33, 0xea, 0x36, 0xef, 0x2b, 0x6f, 0x29, 0x4c, 0x06, + 0xb0, 0x1f, 0x5e, 0x62, 0x4d, 0x01, 0xcb, 0xc3, 0x52, 0x3b, 0x63, 0x36, 0x35, 0x11, 0x6b, 0x83, 0x5c, 0x5e, 0xfc, + 0xd9, 0x5d, 0x43, 0x73, 0x9a, 0x8b, 0x81, 0xe3, 0x31, 0xf6, 0x19, 0x59, 0xcf, 0x83, 0xa4, 0x52, 0xe6, 0x3e, 0x35, + 0x47, 0x6c, 0x12, 0x27, 0x8c, 0x42, 0xaa, 0xba, 0x27, 0x8b, 0xd5, 0xfe, 0xdd, 0x6f, 0x9f, 0x7e, 0x73, 0x3f, 0x51, + 0x9c, 0xb5, 0x44, 0x67, 0xc6, 0x8e, 0xde, 0xea, 0xf4, 0x0c, 0x58, 0x43, 0x82, 0xbc, 0x4f, 0xd1, 0xab, 0x7a, 0xba, + 0xde, 0x6f, 0x8c, 0x5c, 0xb5, 0x88, 0x39, 0xcd, 0x4b, 0x58, 0xe8, 0x65, 0xc1, 0x9d, 0xe0, 0x19, 0x3b, 0x47, 0x8b, + 0x95, 0x58, 0x63, 0x24, 0x78, 0x8f, 0x58, 0xa4, 0xca, 0x50, 0xc4, 0x22, 0x55, 0x8b, 0x71, 0x91, 0xfa, 0xb5, 0xd9, + 0x88, 0x60, 0x0e, 0x15, 0x4a, 0xdf, 0x5d, 0xac, 0x54, 0x12, 0x5d, 0x34, 0x93, 0x94, 0xba, 0x1a, 0x85, 0x6b, 0x1e, + 0x8c, 0xc7, 0x21, 0xcb, 0x4b, 0x0b, 0x5d, 0x5e, 0x4b, 0x05, 0x38, 0x12, 0x0e, 0xde, 0x28, 0x8d, 0xc3, 0x65, 0xc6, + 0x9a, 0xc1, 0x45, 0xc0, 0x69, 0x3b, 0x05, 0x70, 0xf0, 0x77, 0x79, 0xac, 0x5d, 0x60, 0xb7, 0x61, 0x9b, 0x38, 0x7d, + 0x08, 0xba, 0x6b, 0x75, 0xca, 0x43, 0x87, 0x57, 0x72, 0xd0, 0x66, 0xc3, 0x44, 0x4c, 0x20, 0x4b, 0x84, 0xbd, 0x35, + 0xdb, 0xe5, 0x65, 0x32, 0xf0, 0xa8, 0x2c, 0xca, 0xcb, 0x93, 0xf9, 0x73, 0xce, 0xd8, 0xab, 0xe6, 0x33, 0xf6, 0x4a, + 0x9c, 0xb1, 0xed, 0x3b, 0xf3, 0xe9, 0xc4, 0x85, 0xff, 0xfa, 0xc5, 0x84, 0x7a, 0x8e, 0xd6, 0x59, 0xac, 0x34, 0x77, + 0xb1, 0xd2, 0xac, 0xf6, 0x62, 0xa5, 0x61, 0xd7, 0x68, 0x7f, 0x61, 0xda, 0x6d, 0xc3, 0x74, 0x34, 0x28, 0x84, 0x3f, + 0xa7, 0xf4, 0xca, 0x3d, 0x84, 0x77, 0xd0, 0xaa, 0x5b, 0x7f, 0xd7, 0xde, 0x7e, 0xd4, 0xe9, 0x2c, 0x09, 0xa4, 0x6d, + 0xd8, 0x99, 0x37, 0x1a, 0xb1, 0x71, 0x6f, 0x12, 0xfb, 0xcb, 0xf4, 0xdf, 0x7c, 0xfc, 0x1c, 0x88, 0x5b, 0x11, 0x41, + 0xa5, 0x1f, 0xd1, 0x14, 0x14, 0x25, 0x77, 0x4c, 0xf4, 0xb0, 0x96, 0xeb, 0xd4, 0xa3, 0x08, 0xc1, 0x6d, 0xfb, 0xb0, + 0x61, 0x93, 0x37, 0x03, 0xfa, 0x4f, 0x5b, 0xa5, 0xcd, 0x28, 0xe6, 0x33, 0xc0, 0xb2, 0x15, 0x1c, 0x8f, 0x87, 0x06, + 0x5f, 0x4d, 0xe7, 0xa4, 0x79, 0xb8, 0xd7, 0xe2, 0x4b, 0x37, 0x82, 0xa8, 0x70, 0xba, 0xc5, 0x9d, 0x3e, 0xb6, 0xf7, + 0xba, 0x69, 0x8f, 0xd4, 0x7a, 0xdd, 0x42, 0x10, 0x8a, 0xba, 0x7b, 0x62, 0xf9, 0xa7, 0xaf, 0x0e, 0xe1, 0x3f, 0xe2, + 0xea, 0x7f, 0xce, 0x9a, 0x18, 0xf5, 0x8b, 0xb2, 0x95, 0x35, 0xb1, 0x4a, 0xc8, 0x88, 0xef, 0x5f, 0x7f, 0x32, 0x79, + 0x5c, 0x83, 0xbd, 0x6b, 0x93, 0xe9, 0x52, 0xb5, 0xf6, 0xb7, 0x71, 0x0c, 0xd9, 0x2b, 0xeb, 0xd5, 0x05, 0x78, 0xc8, + 0x90, 0x3c, 0x1b, 0x40, 0x23, 0x71, 0x8f, 0x20, 0x2d, 0xbe, 0x8e, 0x6d, 0xe8, 0x2a, 0xf1, 0x76, 0xd3, 0x55, 0xe2, + 0xcd, 0xee, 0xab, 0xc4, 0xf7, 0x7b, 0x5d, 0x25, 0xde, 0x7c, 0xf1, 0xab, 0xc4, 0xdb, 0xfa, 0x55, 0xe2, 0x2a, 0x16, + 0xd6, 0xaa, 0xe6, 0xc5, 0x92, 0xff, 0xfc, 0x48, 0x4a, 0xb9, 0xcb, 0x78, 0xd0, 0x75, 0x28, 0xea, 0xef, 0xd5, 0x1f, + 0xbe, 0x58, 0xe0, 0x46, 0x7c, 0x8f, 0xe6, 0x5b, 0xc5, 0xd5, 0x82, 0x63, 0x76, 0xfc, 0x8e, 0x52, 0x1c, 0xc6, 0xd1, + 0xf4, 0x27, 0x50, 0xca, 0x82, 0x38, 0x30, 0x51, 0x5e, 0x04, 0xe9, 0x4f, 0xf1, 0x62, 0xb9, 0xb8, 0x80, 0xbe, 0x3e, + 0x06, 0x69, 0x30, 0x0a, 0x99, 0x74, 0xc6, 0x25, 0x73, 0x33, 0x2e, 0x13, 0x07, 0xfb, 0x4e, 0xf1, 0xd3, 0x5b, 0x89, + 0x9f, 0x68, 0x01, 0xca, 0x7f, 0x93, 0x1d, 0x9b, 0xde, 0x7c, 0x11, 0x11, 0x4a, 0x40, 0x65, 0xd0, 0x8f, 0xbf, 0x8c, + 0x5c, 0xc5, 0x46, 0xc3, 0x2c, 0x85, 0xbd, 0xc3, 0xc6, 0x7e, 0x58, 0xed, 0x52, 0xb3, 0x34, 0x4c, 0x19, 0x85, 0xaa, + 0x2e, 0x86, 0x9f, 0xc7, 0xcb, 0x94, 0x8d, 0xe3, 0xfb, 0x48, 0x37, 0x23, 0x69, 0xc0, 0x0f, 0x1a, 0x4e, 0xd9, 0x06, + 0xf3, 0x27, 0x7e, 0x40, 0x46, 0x39, 0x4e, 0x5a, 0x3a, 0xa4, 0xef, 0x5c, 0x2e, 0x2c, 0x52, 0x35, 0x5b, 0x38, 0x45, + 0x5d, 0x26, 0xfa, 0x79, 0xd2, 0x6a, 0xc5, 0x83, 0xc7, 0xb5, 0x14, 0xa6, 0x1a, 0xb1, 0xcd, 0xa5, 0xc2, 0x69, 0x2b, + 0x12, 0xc2, 0x45, 0x11, 0x0a, 0xa2, 0x61, 0xe1, 0xf8, 0x1b, 0x72, 0x0b, 0x2d, 0xde, 0x42, 0x20, 0x8d, 0x7c, 0xc9, + 0xd7, 0x83, 0x07, 0x46, 0xa0, 0xc7, 0xd7, 0x0a, 0x18, 0xdf, 0xdd, 0xb1, 0x24, 0xf4, 0x1e, 0x5a, 0x46, 0x1e, 0x47, + 0x3f, 0x00, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0xf3, 0x95, 0x34, 0xec, 0xa5, 0xc6, 0x10, 0x1e, 0xe0, 0x14, + 0xa2, 0x8c, 0x00, 0x32, 0xc5, 0x4e, 0xd9, 0x3f, 0x4c, 0xfa, 0xf7, 0x9f, 0x46, 0x6e, 0x5e, 0xc6, 0xf2, 0x43, 0x7f, + 0x5f, 0xec, 0xf1, 0x99, 0xe7, 0xcf, 0x9f, 0x6c, 0x9e, 0x76, 0x39, 0x43, 0x79, 0x43, 0x6b, 0x63, 0xe3, 0x29, 0x80, + 0x51, 0x5c, 0xc5, 0x4b, 0x7f, 0x86, 0x86, 0xa5, 0x5f, 0x6e, 0xbe, 0x19, 0xf4, 0x89, 0x89, 0x3a, 0xe5, 0xd4, 0x2b, + 0x45, 0x05, 0x14, 0xf0, 0xfb, 0x6f, 0x21, 0x06, 0xe5, 0xff, 0x11, 0x0c, 0xf5, 0x5d, 0xc3, 0x6f, 0xf1, 0xc1, 0xe3, + 0x36, 0x6f, 0x1f, 0xf2, 0x49, 0xf2, 0xe8, 0x0e, 0x42, 0xb9, 0xd6, 0x8c, 0x64, 0xf2, 0x2a, 0xd0, 0xd4, 0x48, 0x6a, + 0x9b, 0x82, 0xc4, 0x89, 0xaf, 0x30, 0x9b, 0xae, 0xe9, 0xdc, 0xac, 0xdf, 0x64, 0x1c, 0x5b, 0x55, 0x90, 0x0c, 0x37, + 0x79, 0x60, 0x88, 0xbe, 0xaa, 0xef, 0xe6, 0x41, 0x64, 0x62, 0x20, 0xf4, 0xfa, 0x1b, 0x6f, 0x05, 0xa1, 0x80, 0x01, + 0xb9, 0x55, 0x5f, 0x41, 0xa1, 0xa9, 0xfa, 0xa4, 0x41, 0xb6, 0x23, 0xbd, 0x11, 0x12, 0x42, 0x8b, 0x37, 0xfc, 0x8b, + 0xa6, 0x69, 0x9a, 0xbc, 0x46, 0x68, 0xf2, 0x1e, 0x81, 0xe5, 0x78, 0x1d, 0x00, 0x6d, 0x49, 0xbe, 0x58, 0x51, 0x09, + 0xdc, 0x0c, 0x50, 0x27, 0x2b, 0x0a, 0x78, 0xb4, 0xbb, 0xae, 0x23, 0x0a, 0xc4, 0x85, 0x1e, 0x22, 0x95, 0x79, 0x09, + 0x04, 0xc5, 0xed, 0x69, 0x78, 0x61, 0xc7, 0xb7, 0x5c, 0x12, 0xac, 0x39, 0xf4, 0x38, 0xec, 0xb3, 0xe6, 0xb0, 0x68, + 0x91, 0x82, 0x05, 0x41, 0xeb, 0x50, 0x89, 0x72, 0x6c, 0xb2, 0x06, 0xdc, 0x88, 0xf7, 0xa2, 0x55, 0x36, 0x67, 0xd1, + 0x52, 0xc7, 0xb4, 0x48, 0x18, 0xa6, 0x0e, 0xea, 0xbc, 0x21, 0x66, 0x0b, 0xb0, 0x4d, 0x73, 0xcb, 0x19, 0xd1, 0xc2, + 0x94, 0xa3, 0x54, 0xcf, 0xf4, 0xb9, 0x62, 0x33, 0xe5, 0xb8, 0xad, 0x4a, 0x21, 0xf8, 0x92, 0xc6, 0x55, 0x27, 0x29, + 0xb2, 0x3c, 0x86, 0x3e, 0x28, 0x40, 0x04, 0x17, 0x17, 0x09, 0xb0, 0xb7, 0xbc, 0xea, 0xa2, 0x49, 0x8d, 0x8c, 0x57, + 0x11, 0x14, 0x25, 0x46, 0xbd, 0x1b, 0x3e, 0x4e, 0x88, 0xcd, 0xb3, 0xb1, 0x1f, 0xbf, 0xd6, 0xcf, 0x86, 0x49, 0x7f, + 0x62, 0x0f, 0x44, 0x48, 0x08, 0x54, 0x9f, 0xd8, 0x03, 0xd8, 0xfe, 0xbd, 0x05, 0x69, 0x8a, 0xbe, 0x05, 0x5d, 0x9b, + 0x10, 0xed, 0xde, 0x87, 0x78, 0x4d, 0x5b, 0x0e, 0x90, 0x93, 0x6f, 0xc1, 0xe2, 0x08, 0x62, 0x48, 0x6c, 0x2c, 0x0e, + 0x31, 0x37, 0xa9, 0x6f, 0x35, 0xc2, 0xd8, 0x6a, 0x38, 0x1a, 0xc6, 0x0b, 0xd7, 0x71, 0x0e, 0x6a, 0xf5, 0x41, 0x90, + 0xdd, 0x54, 0xdb, 0x30, 0xb3, 0x81, 0xeb, 0x58, 0xc1, 0x0b, 0xbb, 0xdd, 0xaf, 0xd1, 0x68, 0x25, 0x9c, 0xe2, 0x10, + 0xc5, 0x5f, 0x67, 0xcf, 0xd6, 0xad, 0xda, 0x81, 0x34, 0xaa, 0x26, 0xea, 0x38, 0xb6, 0x9c, 0xcb, 0xbf, 0x86, 0x75, + 0xd2, 0x4f, 0xc1, 0x1c, 0x29, 0xb5, 0xc7, 0x10, 0x02, 0x02, 0xb7, 0xe0, 0x18, 0xfd, 0x55, 0x7b, 0xa9, 0xb5, 0xe8, + 0xf8, 0x18, 0xc6, 0x50, 0x66, 0x8c, 0x16, 0x1e, 0x5c, 0x6a, 0x07, 0x95, 0x2f, 0xa6, 0x55, 0x0c, 0xc7, 0x43, 0x8f, + 0xb2, 0x42, 0xa3, 0xb7, 0x95, 0x5b, 0xc0, 0xfe, 0x37, 0x90, 0x4f, 0x7b, 0x04, 0x3e, 0xff, 0x50, 0x03, 0xc2, 0x87, + 0xef, 0xec, 0x70, 0xb9, 0x28, 0x77, 0x57, 0x26, 0x92, 0xfb, 0x77, 0x86, 0x44, 0x07, 0x75, 0x68, 0xb2, 0xbf, 0x66, + 0x72, 0xf7, 0xc8, 0x2e, 0x59, 0x34, 0x2e, 0x77, 0x58, 0xa1, 0x5f, 0xfb, 0x77, 0x57, 0xc2, 0x28, 0x10, 0x57, 0x3f, + 0x6e, 0xc0, 0x28, 0x79, 0x1c, 0xe1, 0xe6, 0xa7, 0xe3, 0x16, 0xec, 0xc5, 0xc5, 0x60, 0x03, 0x0a, 0x8a, 0x25, 0x9b, + 0x29, 0x42, 0x71, 0x08, 0xde, 0x8c, 0x2e, 0xb7, 0x2d, 0xc1, 0x88, 0x6e, 0xdc, 0x89, 0x99, 0xb0, 0x29, 0x2c, 0xda, + 0x04, 0x3c, 0x1c, 0xe3, 0xbe, 0x52, 0xeb, 0x60, 0xb7, 0xd4, 0x3a, 0xdb, 0x25, 0xb5, 0x26, 0xef, 0xa5, 0xfb, 0xc4, + 0x5b, 0x28, 0xfe, 0x6f, 0x82, 0x39, 0x57, 0xdd, 0xe0, 0x4a, 0xa2, 0x6e, 0x74, 0x76, 0x12, 0xad, 0x6a, 0xbd, 0x91, + 0x95, 0x20, 0x8a, 0xbf, 0x95, 0x0b, 0x8a, 0x50, 0xa8, 0xab, 0xb2, 0xf1, 0xab, 0x42, 0x36, 0x4e, 0xb7, 0x9a, 0xc2, + 0x71, 0x45, 0x70, 0xff, 0x8a, 0x4b, 0x98, 0xbc, 0x1d, 0x14, 0xae, 0x61, 0xc5, 0x48, 0x15, 0x6f, 0xa7, 0xe2, 0xa2, + 0xa1, 0xb8, 0xd0, 0x89, 0x5b, 0x46, 0xd9, 0x93, 0xae, 0x5c, 0xb5, 0x70, 0xa9, 0x2b, 0xca, 0x41, 0xea, 0x8e, 0x43, + 0x96, 0xc5, 0xea, 0xb6, 0x29, 0xbb, 0xbb, 0xa8, 0xaf, 0x95, 0x4d, 0x22, 0xfd, 0x52, 0x08, 0xc0, 0x42, 0x4c, 0x5f, + 0xd1, 0x6b, 0x4b, 0x1b, 0x08, 0x1c, 0x64, 0x83, 0x13, 0xdd, 0x6e, 0xe9, 0x3c, 0xa5, 0x0c, 0x28, 0xb4, 0xf0, 0xaa, + 0x0c, 0x02, 0xe1, 0x7b, 0xb3, 0x6e, 0xa0, 0xf2, 0x48, 0xe4, 0x39, 0x7d, 0x07, 0xf1, 0xa2, 0xe6, 0xa8, 0x8a, 0x7c, + 0x3c, 0x99, 0x16, 0x99, 0xe7, 0x62, 0xd5, 0x7a, 0xa7, 0x24, 0xc4, 0x59, 0x73, 0x4f, 0x94, 0xb2, 0x8c, 0x9e, 0xd7, + 0xe8, 0x89, 0xef, 0xf2, 0xad, 0x93, 0x2c, 0x23, 0x0c, 0xef, 0x6e, 0x65, 0x89, 0xe7, 0x7f, 0x52, 0x86, 0x2c, 0xe4, + 0x9c, 0x20, 0x03, 0x2e, 0x6b, 0x0a, 0xfa, 0x1e, 0x46, 0x43, 0x64, 0x3d, 0xbb, 0x9d, 0x2a, 0xd2, 0x97, 0xde, 0x53, + 0xa7, 0xe3, 0xbd, 0x9a, 0x1c, 0x56, 0x84, 0xa2, 0xed, 0x6e, 0x59, 0x64, 0xbe, 0x61, 0x1c, 0xd9, 0x6c, 0x39, 0x1f, + 0xad, 0x55, 0xd9, 0xaa, 0x22, 0x72, 0xad, 0x8b, 0x59, 0xd5, 0xcf, 0x4e, 0x26, 0x93, 0xb2, 0xa0, 0xd1, 0xd1, 0x0e, + 0x51, 0x58, 0xf8, 0xd4, 0x71, 0x9c, 0xea, 0xd8, 0xb7, 0x83, 0xdd, 0x42, 0xb9, 0xed, 0x49, 0xe3, 0x88, 0x11, 0xb6, + 0xbb, 0xe0, 0x57, 0x07, 0x47, 0x6e, 0x17, 0x27, 0xbb, 0x64, 0x16, 0xd1, 0x27, 0x63, 0x88, 0x20, 0x63, 0xf3, 0xb4, + 0xe7, 0x33, 0xd4, 0xc1, 0xd8, 0xca, 0x81, 0x46, 0xc3, 0x01, 0x6b, 0x0a, 0xa6, 0x22, 0xae, 0xd8, 0x15, 0x8e, 0x86, + 0xf2, 0xf0, 0x9a, 0xf0, 0x5e, 0x7c, 0x04, 0x0f, 0xca, 0xba, 0x2e, 0xd3, 0xc6, 0x69, 0x75, 0x9d, 0xbf, 0x96, 0xea, + 0x69, 0x40, 0x00, 0xd7, 0x42, 0xa1, 0x4d, 0xf2, 0x59, 0xfc, 0x7f, 0x29, 0xff, 0x7f, 0xb5, 0x58, 0x95, 0xed, 0x47, + 0x4e, 0x40, 0xa2, 0x5d, 0x9c, 0x16, 0x1a, 0x75, 0xd3, 0x1e, 0x90, 0x56, 0x06, 0x13, 0x55, 0x81, 0x0e, 0x4a, 0xfa, + 0x52, 0x0e, 0x8c, 0x06, 0xf1, 0x3b, 0x72, 0xcc, 0xb0, 0xc4, 0x85, 0x08, 0xb1, 0xc8, 0xe0, 0x06, 0x73, 0x30, 0x5f, + 0x9e, 0xa0, 0xfe, 0xa0, 0xb4, 0x27, 0x40, 0x1b, 0x5f, 0x9b, 0xdb, 0x5e, 0xe2, 0xfe, 0xaa, 0x5e, 0x4b, 0x74, 0x0c, + 0x20, 0x73, 0xe1, 0x10, 0xa2, 0x21, 0x81, 0x56, 0xd9, 0xdc, 0x34, 0x4a, 0xf9, 0x56, 0xd5, 0xb3, 0x89, 0x81, 0x61, + 0x77, 0xcd, 0x55, 0xa8, 0x6f, 0xa1, 0x2d, 0x80, 0xc9, 0xf2, 0xed, 0x87, 0xcf, 0x16, 0x2c, 0xb1, 0xba, 0x1f, 0x5d, + 0x5c, 0x72, 0xdc, 0xbf, 0x16, 0xd2, 0xce, 0x94, 0xce, 0x3f, 0xca, 0x17, 0xbf, 0x6f, 0x14, 0xe8, 0x5d, 0x95, 0x24, + 0x74, 0xdc, 0x5a, 0xbc, 0x6d, 0xec, 0x55, 0x7b, 0x1e, 0x44, 0xfb, 0xd7, 0xf5, 0x56, 0x7b, 0xd7, 0x05, 0x82, 0xb1, + 0x77, 0x65, 0xa0, 0x38, 0x64, 0xb9, 0x90, 0x0d, 0xbe, 0x57, 0x04, 0x8a, 0xaa, 0x93, 0xaf, 0x8e, 0xad, 0x88, 0xcb, + 0xbf, 0x5a, 0x02, 0xf3, 0xb9, 0x57, 0x8e, 0x03, 0x4d, 0xa4, 0x29, 0xd3, 0x8f, 0xb5, 0x13, 0xed, 0xb8, 0xa3, 0x1d, + 0x39, 0x3a, 0xdd, 0xc2, 0x06, 0x7a, 0xb7, 0x5d, 0x78, 0xef, 0x1d, 0x3a, 0xfa, 0xd9, 0xe9, 0x54, 0x10, 0x89, 0x49, + 0x10, 0x86, 0x84, 0x2a, 0xd2, 0x2c, 0x89, 0x3f, 0xb1, 0xb2, 0x9a, 0x85, 0xca, 0xb8, 0x11, 0x48, 0x5b, 0x3c, 0xc2, + 0xd9, 0xf1, 0xbd, 0x45, 0x0f, 0xcf, 0x86, 0x5a, 0x08, 0x06, 0x9c, 0x54, 0x8a, 0x9f, 0x00, 0x1a, 0x3c, 0xd2, 0xcf, + 0x4e, 0x21, 0x8a, 0x9f, 0x36, 0x1e, 0xe8, 0x3f, 0xb4, 0x8f, 0x35, 0xb7, 0x7b, 0x67, 0x75, 0x7c, 0xc7, 0x72, 0xed, + 0x43, 0xcd, 0xb1, 0x8f, 0xac, 0xb6, 0x7d, 0xac, 0xb5, 0xed, 0x2e, 0xfc, 0xeb, 0xbb, 0xf6, 0x2b, 0xcd, 0x81, 0x27, + 0xcd, 0xb5, 0x3b, 0xf8, 0x6f, 0xdb, 0x3e, 0xbe, 0xeb, 0x10, 0xa5, 0xf7, 0x74, 0x31, 0xe4, 0xca, 0x28, 0xc0, 0x09, + 0x44, 0x3f, 0x38, 0x3b, 0x5d, 0xa6, 0x4c, 0x5b, 0x0d, 0xf4, 0x57, 0xba, 0x36, 0x4b, 0xd8, 0x64, 0xa0, 0x3f, 0xf5, + 0x94, 0x52, 0xf7, 0xa4, 0xb1, 0xb8, 0x7d, 0xdc, 0x58, 0xdc, 0x39, 0x6a, 0x2c, 0x3e, 0xec, 0x96, 0x8b, 0x0f, 0xa6, + 0xf4, 0x4a, 0x49, 0xa2, 0x37, 0xf7, 0xb2, 0x24, 0x58, 0xb5, 0x5c, 0x0d, 0xd0, 0xb5, 0x05, 0xff, 0x1c, 0xb7, 0x0d, + 0xd9, 0x6a, 0x04, 0xad, 0x24, 0x34, 0x8e, 0x4f, 0x34, 0xf7, 0xe8, 0x6f, 0xed, 0x23, 0x1f, 0xea, 0x41, 0xca, 0x47, + 0xf8, 0xbb, 0xeb, 0x9c, 0xf8, 0x8e, 0x06, 0x0d, 0x5d, 0xf8, 0x6f, 0xd6, 0x6d, 0xfb, 0xf4, 0xe0, 0xc0, 0xfb, 0x8f, + 0xee, 0x71, 0xea, 0x58, 0x2e, 0xfc, 0xf7, 0xab, 0x54, 0xb9, 0x83, 0xc2, 0x5f, 0xed, 0xf7, 0xd0, 0xd1, 0x3a, 0x27, + 0xb3, 0xb6, 0xfd, 0xea, 0xee, 0xd8, 0x3e, 0x99, 0xb9, 0xc7, 0x1f, 0xe9, 0x29, 0xb4, 0xda, 0xf6, 0x2b, 0xf8, 0xfb, + 0xd8, 0x71, 0x66, 0x96, 0x6b, 0x9f, 0xdc, 0x75, 0xec, 0x4e, 0x68, 0x1d, 0xd9, 0x27, 0xf0, 0xf7, 0x2b, 0x80, 0x17, + 0xe0, 0xca, 0x73, 0x74, 0x6a, 0xb0, 0x31, 0x2a, 0xf6, 0x1b, 0xea, 0x47, 0xda, 0x87, 0x5a, 0xf7, 0xf0, 0x6f, 0x27, + 0x77, 0xd6, 0xe1, 0xcc, 0x6d, 0xdf, 0x59, 0x1b, 0x7f, 0x7e, 0x04, 0xc8, 0x6f, 0x5f, 0x38, 0x00, 0x23, 0x26, 0xe5, + 0xf8, 0xcb, 0xd0, 0xbc, 0xdc, 0x24, 0x46, 0x7f, 0xbf, 0x5b, 0x8c, 0xfe, 0xdd, 0x72, 0x1f, 0x31, 0xfa, 0xfb, 0x2f, + 0x2e, 0x46, 0xbf, 0xac, 0x5a, 0x71, 0xbf, 0xaf, 0x06, 0x0f, 0xff, 0x79, 0x5d, 0x65, 0x92, 0x03, 0xaf, 0x75, 0x7d, + 0xb5, 0xbc, 0x81, 0xb8, 0x3a, 0xef, 0xe3, 0xc1, 0x77, 0xcb, 0x92, 0x89, 0x52, 0x0c, 0x18, 0xe0, 0x7d, 0x4c, 0x18, + 0xe0, 0xd7, 0xe5, 0x00, 0xec, 0x22, 0x38, 0xd5, 0x0c, 0xc6, 0xd6, 0xcc, 0x0b, 0x27, 0x92, 0xe2, 0x42, 0x49, 0x1f, + 0x8b, 0xc1, 0x66, 0x1e, 0x88, 0x09, 0x28, 0x6b, 0x96, 0xf3, 0x28, 0xed, 0x1d, 0x39, 0x80, 0xe6, 0xdb, 0x93, 0x24, + 0xaf, 0x34, 0xb6, 0x45, 0x24, 0xa2, 0x5b, 0x6e, 0xd3, 0xbf, 0xf1, 0x3d, 0x9a, 0xac, 0x35, 0xf7, 0xee, 0xd6, 0xfb, + 0xd5, 0xc0, 0x16, 0x44, 0x98, 0xf4, 0x01, 0xb3, 0xd1, 0xf4, 0xbe, 0x6c, 0x38, 0x56, 0x31, 0x15, 0xdc, 0x3c, 0x52, + 0x18, 0x49, 0xb5, 0xbd, 0x5b, 0x36, 0x3c, 0xdb, 0x35, 0xcd, 0x86, 0xcf, 0x97, 0x9a, 0x6f, 0xb1, 0x7a, 0x93, 0x1d, + 0x57, 0x41, 0x55, 0x49, 0x7d, 0xd5, 0x08, 0x90, 0x82, 0xf7, 0x2c, 0x4c, 0xe3, 0x0a, 0xc6, 0xc7, 0xd1, 0x90, 0x1a, + 0x3b, 0xca, 0xbb, 0x52, 0x9f, 0xaa, 0x39, 0xdd, 0x8b, 0x35, 0xf2, 0x83, 0xc1, 0xaf, 0xc0, 0xd8, 0x70, 0x7a, 0x3c, + 0x8a, 0x55, 0x38, 0xaf, 0x95, 0x7e, 0x89, 0xd5, 0xce, 0x67, 0xee, 0xba, 0xce, 0xda, 0x6c, 0x34, 0xa4, 0x75, 0xd9, + 0x5c, 0xd0, 0x68, 0xfc, 0x3c, 0x99, 0xad, 0xe6, 0x64, 0x5a, 0x8c, 0x96, 0xb9, 0xdb, 0x3a, 0x13, 0xf5, 0x9e, 0xc2, + 0x26, 0x36, 0xf9, 0x83, 0xea, 0x25, 0xbe, 0x9e, 0x40, 0x9a, 0xe2, 0x1e, 0x32, 0x11, 0x0a, 0x07, 0xd5, 0x46, 0x1b, + 0xdb, 0xfe, 0x16, 0xf3, 0x0f, 0xb5, 0x63, 0xde, 0x09, 0xda, 0xea, 0x6e, 0xb3, 0x18, 0x91, 0xae, 0x0d, 0xeb, 0x92, + 0x02, 0xd5, 0xed, 0x1e, 0x9b, 0xee, 0x91, 0x69, 0x1f, 0x77, 0x8d, 0x5c, 0x1c, 0x38, 0xb5, 0xcb, 0x12, 0x40, 0xc0, + 0x64, 0x57, 0x0e, 0x33, 0x88, 0x82, 0x2c, 0xf0, 0xc2, 0x1c, 0x50, 0x7d, 0x99, 0xe7, 0xfd, 0xd7, 0x32, 0xcd, 0x60, + 0x8e, 0x82, 0x25, 0x43, 0x73, 0x65, 0x6b, 0xc4, 0xb2, 0x7b, 0xc6, 0xa2, 0x0d, 0xaa, 0xdc, 0xaa, 0xf5, 0xf3, 0x9f, + 0x67, 0x0b, 0x9a, 0x93, 0x9d, 0xc5, 0x28, 0x8b, 0xf8, 0xfe, 0x10, 0xa6, 0xba, 0xf9, 0xd0, 0xfc, 0x71, 0x13, 0xc2, + 0xfd, 0xd7, 0x6e, 0x84, 0x9b, 0xb1, 0x7d, 0x10, 0xee, 0xbf, 0xbe, 0x38, 0xc2, 0xfd, 0x51, 0x45, 0xb8, 0x25, 0x4f, + 0x95, 0x42, 0x26, 0xfa, 0x01, 0x9f, 0x5b, 0x10, 0x75, 0xf7, 0xa5, 0x7e, 0x40, 0xec, 0xa5, 0xae, 0x64, 0x43, 0xfd, + 0x58, 0x4a, 0xef, 0x82, 0x57, 0x76, 0x0c, 0x3f, 0x4a, 0xa9, 0x24, 0x20, 0x53, 0xa8, 0xcc, 0x79, 0x0d, 0x7d, 0x5e, + 0x44, 0x59, 0x68, 0xbf, 0xe7, 0xd7, 0x12, 0x50, 0x41, 0x7c, 0x17, 0x27, 0x73, 0x0f, 0x43, 0xaf, 0xe9, 0x98, 0x16, + 0x0e, 0x1e, 0x1c, 0xf0, 0x8e, 0xf2, 0xe3, 0x68, 0x2c, 0xe5, 0xe8, 0x6c, 0x70, 0x4d, 0xfc, 0xa0, 0xfe, 0xc0, 0xbc, + 0x44, 0x37, 0xe9, 0x35, 0x2c, 0xee, 0x8b, 0x8e, 0xf3, 0xa2, 0x7d, 0xf8, 0xe2, 0xc8, 0x81, 0xff, 0xb9, 0xac, 0x93, + 0x9b, 0xbc, 0xe2, 0x3c, 0x8e, 0x20, 0x33, 0x85, 0xa8, 0xb9, 0xa9, 0xda, 0x3d, 0x63, 0x9f, 0x8a, 0x5a, 0xc7, 0xcd, + 0x95, 0xc6, 0xde, 0x43, 0x51, 0xa7, 0xb1, 0xc6, 0x2c, 0x5e, 0x2a, 0xc3, 0x6a, 0x18, 0x4d, 0x10, 0x2d, 0x41, 0x32, + 0xa4, 0xd4, 0x50, 0x5f, 0xf3, 0xe9, 0x16, 0xf3, 0x62, 0x9d, 0xfc, 0xa6, 0x48, 0x7f, 0x23, 0xd2, 0x70, 0xec, 0x84, + 0x20, 0x17, 0xaa, 0x3b, 0x18, 0x3c, 0x1b, 0x13, 0xc0, 0x68, 0x90, 0x7c, 0xae, 0xc8, 0x71, 0x8e, 0x0b, 0x94, 0x25, + 0xcb, 0xc8, 0xa7, 0x34, 0xe6, 0xde, 0x28, 0x6d, 0x05, 0x07, 0x10, 0x97, 0x13, 0x3f, 0x6c, 0xe0, 0xaa, 0x79, 0x67, + 0x4e, 0x91, 0x2b, 0x20, 0x15, 0xab, 0xe2, 0xbd, 0xc8, 0xcc, 0x84, 0x32, 0x8c, 0xe2, 0xd2, 0x5a, 0x03, 0xef, 0x85, + 0x6c, 0xf8, 0x22, 0x33, 0x21, 0xcb, 0x27, 0x2c, 0xf7, 0xf3, 0xe7, 0x54, 0x0b, 0xf2, 0xee, 0xd1, 0xb4, 0xce, 0x7d, + 0x99, 0xab, 0x4b, 0xd7, 0xbc, 0x69, 0xac, 0x63, 0xae, 0xae, 0x9e, 0x6f, 0xc6, 0x2f, 0x5f, 0x9e, 0x0d, 0x5c, 0x83, + 0x67, 0x8d, 0x2c, 0xa5, 0x38, 0xba, 0xdc, 0x4f, 0x35, 0x6e, 0x34, 0x3a, 0x6d, 0x2d, 0x82, 0x68, 0x2a, 0x34, 0xd3, + 0x12, 0x7b, 0x41, 0xca, 0x01, 0x52, 0x81, 0x79, 0x42, 0x45, 0x2d, 0xea, 0xdc, 0xb1, 0x04, 0x32, 0x5e, 0x0e, 0xf4, + 0x8e, 0xed, 0xd8, 0x8e, 0x2e, 0x1b, 0x4e, 0x82, 0xe9, 0x60, 0x1d, 0x67, 0x1e, 0x24, 0x6f, 0x09, 0xe3, 0x29, 0x78, + 0x7e, 0x64, 0x41, 0x16, 0x42, 0x26, 0x10, 0x70, 0x01, 0x99, 0xd3, 0xad, 0x31, 0xe7, 0xf6, 0xb8, 0x5e, 0xf2, 0x09, + 0xb3, 0xc1, 0x09, 0xa7, 0x2f, 0x8c, 0x3f, 0xf3, 0x03, 0x10, 0xc3, 0x96, 0xde, 0x82, 0x5c, 0x84, 0x2c, 0x49, 0x2d, + 0xd5, 0xbe, 0xbd, 0xa7, 0x41, 0x1b, 0xc8, 0x13, 0x8e, 0x1d, 0x4c, 0x12, 0x6f, 0x0e, 0x41, 0xb3, 0xd7, 0xb9, 0xc9, + 0x31, 0xad, 0xce, 0x51, 0xad, 0xe6, 0xbe, 0x3a, 0x32, 0xb5, 0xb6, 0x6b, 0x6a, 0x0e, 0xa0, 0x5b, 0x3d, 0x37, 0xd7, + 0xf9, 0x4d, 0x7f, 0x97, 0x8a, 0x8e, 0xf0, 0xcb, 0x53, 0x9a, 0x07, 0x29, 0xe7, 0xb8, 0xf0, 0x33, 0xa3, 0xd0, 0x81, + 0x2d, 0x25, 0x9c, 0x75, 0x40, 0x62, 0xfa, 0x2b, 0xb6, 0xca, 0x0c, 0xcc, 0x94, 0xc1, 0xab, 0x04, 0xc6, 0x1a, 0x5d, + 0xd3, 0x82, 0x48, 0x0b, 0x7e, 0xfb, 0xad, 0x15, 0x80, 0xf9, 0xfd, 0x40, 0x81, 0x0f, 0x3c, 0x1b, 0x25, 0x80, 0x05, + 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0x2c, 0x7e, 0x70, 0xc5, 0x9e, 0x1d, 0x7a, 0xd1, 0x14, + 0x50, 0x9a, 0x17, 0x4d, 0x6b, 0x06, 0x04, 0xe4, 0x5d, 0x57, 0x29, 0x2d, 0xba, 0x2a, 0x94, 0xfb, 0xe9, 0xb7, 0x0f, + 0x57, 0x94, 0x09, 0x08, 0xb2, 0x4e, 0x7b, 0x63, 0x74, 0x05, 0x2b, 0x74, 0x0f, 0x2f, 0x07, 0x5f, 0x9d, 0xce, 0x59, + 0xe6, 0x91, 0xe0, 0x12, 0xae, 0x78, 0xc0, 0x0e, 0x68, 0xbe, 0xc8, 0xe2, 0x49, 0x17, 0xbc, 0x31, 0xbb, 0x0b, 0x7c, + 0x7e, 0x4f, 0x33, 0x35, 0x4e, 0xa7, 0x2c, 0xb4, 0x51, 0x1a, 0xb8, 0x26, 0x99, 0xc8, 0xfa, 0x1e, 0x06, 0x18, 0x1c, + 0x44, 0xb1, 0x7e, 0xf6, 0x95, 0xf4, 0x26, 0xda, 0xb4, 0x08, 0x90, 0x8e, 0xef, 0x3a, 0x61, 0xe1, 0xbf, 0x07, 0x5f, + 0x01, 0xe1, 0xfe, 0xea, 0x46, 0x37, 0xfa, 0x99, 0x8d, 0xf7, 0x98, 0xaf, 0x1a, 0xd2, 0xd2, 0xe1, 0x1d, 0x95, 0x5f, + 0x36, 0x3b, 0xca, 0x65, 0x13, 0x7e, 0xef, 0xbe, 0xba, 0x9e, 0x9d, 0x22, 0x41, 0x3b, 0x83, 0xdb, 0xc5, 0xba, 0x74, + 0xe7, 0x74, 0xfb, 0x78, 0x41, 0x1d, 0x85, 0x9e, 0xff, 0x49, 0xdc, 0x50, 0xd5, 0x87, 0x7d, 0xee, 0xa2, 0x92, 0xb3, + 0x6b, 0xdc, 0xcb, 0xb8, 0x95, 0xd7, 0xf8, 0x65, 0xfc, 0xd4, 0xfd, 0x2c, 0xc8, 0xe4, 0x65, 0x18, 0x1f, 0x72, 0xd0, + 0xe6, 0xe0, 0xf8, 0x8a, 0xeb, 0x0f, 0x5c, 0x50, 0xdd, 0x93, 0xbf, 0x75, 0xef, 0x5c, 0x67, 0xd6, 0x76, 0x6d, 0xb8, + 0xe6, 0xcc, 0x3a, 0xf6, 0x71, 0x68, 0x75, 0xec, 0x63, 0xf8, 0xfb, 0x08, 0x57, 0x2f, 0xab, 0x6d, 0x1f, 0x7e, 0x74, + 0xdb, 0xa1, 0x75, 0x62, 0x1f, 0xc3, 0xdf, 0x25, 0xb5, 0xfa, 0x19, 0x2f, 0x3d, 0x70, 0xe1, 0xf9, 0xaa, 0x84, 0x05, + 0x94, 0xdf, 0x52, 0x8b, 0x60, 0x96, 0xc8, 0x5b, 0x83, 0x26, 0x02, 0x50, 0x86, 0x6e, 0x8a, 0x80, 0x80, 0x51, 0xbf, + 0x05, 0x79, 0xb2, 0x31, 0xc2, 0xbb, 0x30, 0xc8, 0x88, 0x8a, 0x9c, 0xef, 0x9b, 0x8f, 0x11, 0x6f, 0xd3, 0x1c, 0x6a, + 0x5b, 0xa4, 0x0e, 0x22, 0xd5, 0xc5, 0xdf, 0x17, 0x18, 0x45, 0x47, 0x04, 0x07, 0x57, 0xb0, 0x52, 0x91, 0xbe, 0x2e, + 0xdf, 0x3d, 0x70, 0xf4, 0x1b, 0x65, 0x32, 0x7d, 0xca, 0x17, 0xed, 0x9b, 0xab, 0x33, 0x64, 0xef, 0x7f, 0xb4, 0x1f, + 0xcc, 0x1a, 0x4a, 0xfd, 0x88, 0x38, 0x9e, 0xe3, 0x20, 0x91, 0xc3, 0x53, 0x50, 0xb4, 0xdb, 0x1c, 0xa3, 0xdc, 0x80, + 0x3c, 0x13, 0x17, 0xc0, 0x25, 0xdf, 0x79, 0xa1, 0x62, 0x7a, 0xa1, 0xb4, 0x7c, 0x22, 0x31, 0xff, 0xf3, 0xe7, 0xc5, + 0xe0, 0xac, 0xca, 0xb8, 0x4f, 0xdd, 0x2e, 0x90, 0xdd, 0x2e, 0xeb, 0x6c, 0xb5, 0x02, 0xda, 0x1d, 0x08, 0xb6, 0x08, + 0x1d, 0x29, 0x34, 0xfd, 0x42, 0xc7, 0xb8, 0xd1, 0x14, 0xa9, 0xa6, 0x61, 0x84, 0x10, 0xba, 0x95, 0xab, 0x8e, 0x6e, + 0xf4, 0x23, 0xa1, 0x30, 0x8b, 0xb6, 0x04, 0xbf, 0xe5, 0x77, 0x31, 0x1d, 0x40, 0xb3, 0x65, 0x1e, 0x3b, 0x5c, 0x1a, + 0xff, 0xdf, 0x93, 0x40, 0xf7, 0x22, 0xd0, 0xf0, 0x55, 0x4e, 0x6b, 0xc9, 0xdd, 0x44, 0xd2, 0x55, 0x22, 0xa8, 0x2c, + 0x3d, 0xd7, 0xa1, 0x08, 0x12, 0x10, 0x61, 0xce, 0x31, 0x69, 0xde, 0x24, 0xa9, 0x45, 0x51, 0x60, 0x06, 0x10, 0xfd, + 0xb9, 0x25, 0x5c, 0x9d, 0x8c, 0xe7, 0xcf, 0x37, 0x12, 0x21, 0x52, 0x27, 0xab, 0xa9, 0x17, 0x75, 0x15, 0xbf, 0xe9, + 0x2a, 0x8a, 0x91, 0xfd, 0x22, 0xd6, 0x10, 0x56, 0x59, 0xb4, 0xf7, 0xf0, 0xe7, 0x88, 0x79, 0x99, 0xcd, 0xf5, 0x20, + 0x2d, 0x85, 0xb8, 0x9b, 0x2e, 0xeb, 0x80, 0x3d, 0x16, 0x0f, 0xb6, 0xc5, 0x23, 0xcb, 0x3d, 0x5b, 0x7f, 0x5c, 0x72, + 0x3f, 0x64, 0xe8, 0xe3, 0x37, 0xa7, 0x08, 0x9e, 0xf2, 0x2e, 0xf3, 0x28, 0xc2, 0x86, 0x4a, 0x72, 0xe3, 0xcc, 0x13, + 0x89, 0x3e, 0x80, 0x2f, 0xef, 0x37, 0x2a, 0x0c, 0x15, 0x5f, 0xe5, 0xb3, 0x77, 0x57, 0xdf, 0x68, 0x7c, 0xff, 0x93, + 0x7e, 0x0b, 0x2f, 0x32, 0x14, 0xef, 0x7e, 0x40, 0xf1, 0xee, 0x35, 0x9e, 0xe7, 0x01, 0xa2, 0xc6, 0xe7, 0x07, 0x04, + 0x41, 0x5d, 0x63, 0x91, 0x4f, 0x5a, 0xbf, 0xf9, 0x32, 0xcc, 0x82, 0x85, 0x97, 0x64, 0x07, 0xd0, 0xd4, 0x02, 0x24, + 0xa7, 0x6f, 0xf2, 0x60, 0x26, 0xc5, 0xa1, 0x10, 0xaa, 0x65, 0x91, 0xd0, 0x1c, 0x4e, 0x82, 0x50, 0x2a, 0x0e, 0xc5, + 0x07, 0x3c, 0xdf, 0x67, 0x8b, 0x6c, 0xa0, 0x7b, 0x0b, 0xc8, 0x7b, 0x80, 0x91, 0x8c, 0x0f, 0x62, 0x3f, 0x63, 0x99, + 0x95, 0x66, 0x09, 0xf3, 0xe6, 0xba, 0x0c, 0xeb, 0x59, 0xef, 0x2f, 0x5d, 0x8e, 0xe6, 0x41, 0x26, 0x23, 0xe3, 0xd1, + 0x04, 0x41, 0x85, 0x07, 0x43, 0x3c, 0x1b, 0xe6, 0x1c, 0x84, 0x97, 0xf1, 0xb4, 0xb2, 0xa3, 0x0a, 0xce, 0xe5, 0x1c, + 0xa3, 0xae, 0xf2, 0x58, 0xf7, 0x63, 0xf4, 0xc8, 0xb9, 0xe5, 0x5e, 0xd7, 0x32, 0x80, 0x9f, 0x7e, 0x76, 0xca, 0xaf, + 0xb7, 0x1a, 0x06, 0x0a, 0xd0, 0xbb, 0x0e, 0xc4, 0x95, 0xdd, 0xe4, 0x8f, 0x7d, 0xc0, 0x2b, 0x03, 0x69, 0xa2, 0x9e, + 0x31, 0xc2, 0x37, 0x8d, 0xe5, 0x0a, 0x18, 0xa1, 0x92, 0x8a, 0x77, 0xe6, 0x9e, 0x49, 0x07, 0x20, 0x1c, 0x15, 0xf2, + 0x4a, 0xbf, 0xfd, 0xf6, 0x7a, 0xf8, 0x9f, 0xdf, 0x21, 0x0c, 0xf9, 0xcc, 0x15, 0x5e, 0xd0, 0xd7, 0x6a, 0x2d, 0xce, + 0x7d, 0x9a, 0x43, 0x54, 0xef, 0xb3, 0xb1, 0x08, 0x0b, 0x22, 0xb6, 0x56, 0x3e, 0xbc, 0x11, 0xa1, 0x9e, 0x20, 0xd5, + 0x80, 0x21, 0x7c, 0xb5, 0x87, 0xb0, 0xbc, 0x43, 0x11, 0x22, 0x40, 0xfb, 0x65, 0xf5, 0xed, 0x31, 0xa4, 0xcd, 0xad, + 0x65, 0x00, 0x50, 0x06, 0x88, 0x7b, 0xe8, 0xec, 0xd4, 0xe3, 0xc2, 0x57, 0x60, 0x3f, 0xd2, 0xde, 0x01, 0x4c, 0x73, + 0x16, 0xcf, 0x99, 0x1d, 0xc4, 0x07, 0xf7, 0x6c, 0x64, 0x79, 0x8b, 0x80, 0xe4, 0xcb, 0x28, 0x77, 0xd3, 0x88, 0xf3, + 0x93, 0x0a, 0x5a, 0xe2, 0xaf, 0xf3, 0x02, 0x94, 0x71, 0x01, 0x28, 0xf8, 0xe9, 0x9d, 0x95, 0xa3, 0xf5, 0xd9, 0x22, + 0x36, 0x7c, 0x19, 0xcb, 0x9f, 0x53, 0xd0, 0x3d, 0x11, 0x5f, 0xaf, 0x78, 0xb0, 0xe2, 0xc9, 0x44, 0x8d, 0xb0, 0x67, + 0x97, 0xbf, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0x41, 0x5f, 0xaa, 0x7f, 0x42, 0xfe, 0x84, 0xf4, 0xb5, 0x3c, 0x18, + 0x23, 0x9c, 0xe7, 0x5a, 0xa4, 0x3e, 0x09, 0x92, 0xa7, 0x54, 0x89, 0x23, 0x8a, 0x6a, 0x0c, 0xe8, 0x0d, 0xac, 0xc9, + 0x93, 0xc1, 0x80, 0xf0, 0x58, 0x15, 0x9d, 0x01, 0x94, 0x1a, 0xe2, 0xe4, 0xc3, 0x64, 0x33, 0x68, 0x68, 0x91, 0x07, + 0x17, 0x36, 0xaa, 0x4e, 0xa7, 0x3e, 0xc6, 0x03, 0x4f, 0xec, 0xaf, 0xd2, 0x0e, 0x84, 0x9d, 0xc5, 0x17, 0x16, 0x10, + 0xb8, 0xe8, 0xa7, 0x82, 0xc7, 0xb5, 0xaf, 0x09, 0x65, 0x5b, 0xa1, 0xf7, 0x10, 0x2b, 0x9a, 0x75, 0xee, 0x64, 0x7f, + 0x89, 0xa5, 0x57, 0xc2, 0xb9, 0xad, 0x76, 0x92, 0x64, 0xac, 0xf1, 0xfa, 0x69, 0x52, 0x83, 0x83, 0xef, 0x3a, 0x4c, + 0x6a, 0xdd, 0xf2, 0x64, 0x10, 0x3b, 0xe6, 0xc5, 0x41, 0x2b, 0xbd, 0xc4, 0x73, 0x9f, 0x9f, 0x1e, 0xc0, 0xfc, 0x20, + 0x30, 0x40, 0x89, 0x33, 0x0a, 0x0c, 0x88, 0x3e, 0xe0, 0xa5, 0x64, 0x1d, 0x70, 0x31, 0x16, 0x4c, 0x1d, 0xde, 0x1c, + 0x65, 0x28, 0xd0, 0x52, 0x95, 0x3a, 0xb3, 0xe2, 0x34, 0x73, 0x79, 0xbb, 0x63, 0xf3, 0xff, 0xba, 0xc4, 0xc0, 0xfc, + 0x79, 0x3f, 0x63, 0xc2, 0xef, 0xf6, 0x32, 0xdb, 0xe0, 0x9a, 0xbb, 0xa9, 0x0a, 0x31, 0xac, 0x5b, 0x2a, 0x14, 0xfb, + 0x78, 0x5b, 0xad, 0x82, 0x35, 0x92, 0xd5, 0x16, 0x5e, 0x4b, 0x7f, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, + 0x65, 0x36, 0x80, 0xaa, 0x42, 0xd8, 0xee, 0x2d, 0x16, 0x54, 0xd9, 0xe8, 0x9f, 0x1e, 0xd0, 0xbd, 0xf3, 0x8c, 0x76, + 0xd8, 0xd9, 0x29, 0x58, 0x17, 0xd2, 0xa2, 0x7b, 0x8b, 0x05, 0x5f, 0x52, 0xfa, 0x45, 0x6f, 0x0e, 0x66, 0xd9, 0x3c, + 0x3c, 0xfb, 0x2f, 0x85, 0x07, 0xd6, 0xc5, 0xa2, 0x59, 0x03, 0x00}; + +} // namespace web_server +} // namespace esphome +#endif +#endif diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 6a7b4121f0..d72307991f 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -27,7 +27,11 @@ #endif #ifdef USE_WEBSERVER_LOCAL -#include "server_index.h" +#if USE_WEBSERVER_VERSION == 2 +#include "server_index_v2.h" +#elif USE_WEBSERVER_VERSION == 3 +#include "server_index_v3.h" +#endif #endif namespace esphome { From 989a64bdcf9ae9a1b0723d77b20ba6c26d74d89d Mon Sep 17 00:00:00 2001 From: esphomebot Date: Tue, 30 Apr 2024 09:45:03 +1200 Subject: [PATCH 105/313] Update webserver local assets to 20240429-211523 (#6657) --- .../components/captive_portal/captive_index.h | 196 +-- .../components/web_server/server_index_v2.h | 1237 +++++++++-------- .../components/web_server/server_index_v3.h | 725 +++++----- 3 files changed, 1083 insertions(+), 1075 deletions(-) diff --git a/esphome/components/captive_portal/captive_index.h b/esphome/components/captive_portal/captive_index.h index d262a89b09..8835762fb3 100644 --- a/esphome/components/captive_portal/captive_index.h +++ b/esphome/components/captive_portal/captive_index.h @@ -1,106 +1,108 @@ #pragma once // Generated from https://github.com/esphome/esphome-webserver -#include "esphome/core/hal.h" -namespace esphome { +#include "esphome/core/hal.h" + +namespace esphome { namespace captive_portal { const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdd, 0x58, 0x69, 0x6f, 0xdc, 0x36, 0x1a, 0xfe, 0xde, - 0x5f, 0xc1, 0x2a, 0x49, 0x47, 0xd3, 0x58, 0xd4, 0x35, 0x9a, 0x53, 0x9a, 0xc2, 0xf1, 0xa6, 0x68, 0x81, 0xa4, 0x0d, - 0x60, 0xb7, 0xfd, 0x10, 0x04, 0x30, 0x47, 0xa2, 0x46, 0x8c, 0x25, 0x4a, 0x2b, 0x72, 0xae, 0x0c, 0x66, 0x7f, 0xfb, - 0xbe, 0x24, 0x35, 0xe3, 0xb1, 0x37, 0x5e, 0x6c, 0x8a, 0x2d, 0x8a, 0xd6, 0x71, 0x68, 0x1e, 0xef, 0xf9, 0x88, 0xef, - 0x21, 0xc5, 0x5f, 0x67, 0x75, 0x2a, 0x77, 0x0d, 0x45, 0x85, 0xac, 0xca, 0x79, 0xac, 0x46, 0x54, 0x12, 0xbe, 0x4c, - 0x28, 0x87, 0x15, 0x25, 0xd9, 0x3c, 0xae, 0xa8, 0x24, 0x28, 0x2d, 0x48, 0x2b, 0xa8, 0x4c, 0x7e, 0xb9, 0xf9, 0xde, - 0x19, 0x23, 0x77, 0x1e, 0x97, 0x8c, 0xdf, 0xa1, 0x96, 0x96, 0x09, 0x4b, 0x6b, 0x8e, 0x8a, 0x96, 0xe6, 0x49, 0x46, - 0x24, 0x99, 0xb2, 0x8a, 0x2c, 0xa9, 0x22, 0xd0, 0x6c, 0x9c, 0x54, 0x34, 0x59, 0x33, 0xba, 0x69, 0xea, 0x56, 0x22, - 0xa0, 0x94, 0x94, 0xcb, 0xc4, 0xda, 0xb0, 0x4c, 0x16, 0x49, 0x46, 0xd7, 0x2c, 0xa5, 0x8e, 0x5e, 0x5c, 0x30, 0xce, - 0x24, 0x23, 0xa5, 0x23, 0x52, 0x52, 0xd2, 0xc4, 0xbf, 0x58, 0x09, 0xda, 0xea, 0x05, 0x59, 0xc0, 0x9a, 0xd7, 0x16, - 0x88, 0x14, 0x69, 0xcb, 0x1a, 0x89, 0x94, 0xbd, 0x49, 0x55, 0x67, 0xab, 0x92, 0xce, 0x5d, 0x97, 0x08, 0xb0, 0x4b, - 0xb8, 0x8c, 0x67, 0x74, 0x8b, 0x87, 0x61, 0x98, 0x06, 0x64, 0x94, 0xe3, 0x8f, 0xe2, 0x2b, 0xf0, 0x6c, 0x55, 0x81, - 0x3a, 0x5c, 0xd6, 0x29, 0x91, 0xac, 0xe6, 0x58, 0x50, 0xd2, 0xa6, 0x45, 0x92, 0x24, 0xd6, 0x77, 0x82, 0xac, 0xa9, - 0xf5, 0xcd, 0x37, 0xf6, 0x89, 0x68, 0x49, 0xe5, 0xeb, 0x92, 0xaa, 0xa9, 0x78, 0xb5, 0xbb, 0x21, 0xcb, 0x9f, 0xc0, - 0x72, 0xdb, 0x22, 0x82, 0x65, 0xd4, 0xea, 0xbf, 0xf7, 0x3e, 0x60, 0x21, 0x77, 0x25, 0xc5, 0x19, 0x13, 0x4d, 0x49, - 0x76, 0x89, 0xb5, 0x00, 0xa9, 0x77, 0x56, 0x7f, 0x96, 0xaf, 0x78, 0xaa, 0x84, 0x23, 0x61, 0xd3, 0xfe, 0xbe, 0xa4, - 0x60, 0x5e, 0xf2, 0x96, 0xc8, 0x02, 0x57, 0x64, 0x6b, 0x9b, 0x09, 0xe3, 0x76, 0xf0, 0xad, 0x4d, 0x5f, 0xfa, 0x9e, - 0xd7, 0xbf, 0xd0, 0x83, 0xd7, 0x77, 0xe1, 0xef, 0xac, 0xa5, 0x72, 0xd5, 0x72, 0x44, 0xec, 0xdb, 0xb8, 0x01, 0x4a, - 0x94, 0x25, 0x56, 0xe5, 0x07, 0xd8, 0xf3, 0xc6, 0xc8, 0x9f, 0xe0, 0x20, 0x72, 0x7c, 0x1f, 0x87, 0x8e, 0x1f, 0xa5, - 0x23, 0x27, 0x42, 0xfe, 0x00, 0x86, 0x20, 0xc0, 0x11, 0xf2, 0x3e, 0x59, 0x28, 0x67, 0x65, 0x99, 0x58, 0xbc, 0xe6, - 0xd4, 0x42, 0x42, 0xb6, 0xf5, 0x1d, 0x4d, 0xac, 0x74, 0xd5, 0xb6, 0x60, 0xff, 0x55, 0x5d, 0xd6, 0x2d, 0xc0, 0xf5, - 0x15, 0x7a, 0xf0, 0xf3, 0xc5, 0x2a, 0x64, 0x4b, 0xb8, 0xc8, 0xeb, 0xb6, 0x4a, 0x2c, 0xfd, 0x50, 0xec, 0xe7, 0x7b, - 0x79, 0x40, 0x6a, 0xe8, 0x9f, 0x1d, 0x3a, 0x75, 0xcb, 0x96, 0x8c, 0x27, 0x96, 0x1f, 0x20, 0x7f, 0x0c, 0x6a, 0x6f, - 0xfb, 0x87, 0x13, 0x26, 0x44, 0x61, 0xd2, 0x79, 0x59, 0xdb, 0xef, 0x6f, 0x63, 0xb1, 0x5e, 0xa2, 0x6d, 0x55, 0x72, - 0x91, 0x58, 0x85, 0x94, 0xcd, 0xd4, 0x75, 0x37, 0x9b, 0x0d, 0xde, 0x84, 0xb8, 0x6e, 0x97, 0x6e, 0xe0, 0x79, 0x9e, - 0x0b, 0x14, 0x16, 0x32, 0xf7, 0xc3, 0x0a, 0x06, 0x16, 0x2a, 0x28, 0x5b, 0x16, 0x52, 0xcf, 0xe7, 0xcf, 0xf7, 0xf4, - 0x10, 0x2b, 0x8a, 0xf9, 0xed, 0x87, 0x33, 0x2d, 0xec, 0x4c, 0x0b, 0xfd, 0xee, 0x0c, 0xcd, 0xde, 0x5b, 0x65, 0xd4, - 0x88, 0x04, 0x28, 0x40, 0x9e, 0xfe, 0x17, 0x38, 0x6a, 0xde, 0xad, 0x9c, 0x47, 0x2b, 0x74, 0xb6, 0x82, 0xbf, 0x80, - 0x5f, 0x50, 0x0d, 0x9d, 0xc9, 0x89, 0xdd, 0x57, 0xc7, 0x6b, 0xdf, 0xbb, 0xdf, 0x50, 0x3c, 0x3f, 0x0c, 0xcf, 0xd7, - 0x4e, 0xf0, 0xab, 0x22, 0x50, 0xd8, 0x9f, 0x98, 0x9c, 0xa0, 0xf0, 0x7f, 0x1d, 0x92, 0x08, 0x45, 0xdd, 0x4e, 0xe4, - 0xa8, 0xf9, 0x69, 0xa5, 0x34, 0xa1, 0x68, 0x0d, 0x54, 0x95, 0x33, 0x74, 0x22, 0x12, 0xa2, 0xb0, 0x33, 0x09, 0x66, - 0xb0, 0x3d, 0x04, 0xe6, 0xb3, 0x3d, 0x27, 0xfc, 0xd4, 0x53, 0x30, 0x4f, 0x2d, 0xeb, 0x1e, 0x83, 0xfa, 0x1c, 0x03, - 0xfc, 0xb1, 0x86, 0x3b, 0x67, 0x59, 0x80, 0x11, 0x95, 0x69, 0x61, 0x5b, 0x2e, 0x44, 0x5e, 0xce, 0x96, 0x10, 0x15, - 0x35, 0xb7, 0xfa, 0x58, 0x16, 0x94, 0xdb, 0x47, 0x56, 0xc5, 0x48, 0xf5, 0x89, 0xfd, 0xf8, 0x44, 0xf6, 0xf7, 0xa7, - 0xf8, 0x90, 0x4c, 0x42, 0x1c, 0x4a, 0xac, 0x22, 0xfa, 0xe2, 0xb4, 0xbb, 0xa8, 0xb3, 0xdd, 0x13, 0xa1, 0x53, 0xf8, - 0x26, 0x6e, 0x18, 0xe7, 0xb4, 0xbd, 0xa1, 0x5b, 0x78, 0x86, 0x6f, 0x2f, 0xaf, 0xd0, 0x65, 0x96, 0xb5, 0x54, 0x88, - 0x29, 0xb2, 0x5e, 0x4a, 0x88, 0x91, 0xf4, 0x7f, 0x97, 0xe5, 0x3f, 0x90, 0xf5, 0x1b, 0xfb, 0x9e, 0xa1, 0x9f, 0xa8, - 0xdc, 0xd4, 0xed, 0x5d, 0x27, 0x4d, 0x99, 0x36, 0x53, 0x11, 0xd8, 0x82, 0x9d, 0xa4, 0x11, 0x58, 0x94, 0x90, 0x5f, - 0x6c, 0xbf, 0x0f, 0x7a, 0x9a, 0x7b, 0xaf, 0xf8, 0x11, 0xa8, 0xdb, 0x38, 0x63, 0x6b, 0x94, 0x96, 0x90, 0x41, 0x20, - 0x94, 0x8c, 0x28, 0x0b, 0x75, 0x61, 0x53, 0xf3, 0x14, 0xb8, 0xef, 0x12, 0xeb, 0x33, 0x19, 0xe2, 0xd5, 0xee, 0xc7, - 0xcc, 0xee, 0x09, 0xc8, 0x0d, 0xbd, 0x3e, 0x5e, 0x93, 0x72, 0x45, 0x51, 0x82, 0x64, 0xc1, 0xc4, 0xbd, 0x81, 0xb3, - 0x27, 0xd9, 0x1a, 0x71, 0x07, 0x5c, 0x39, 0x1c, 0x0b, 0xbb, 0x6f, 0x1d, 0xa3, 0x34, 0x26, 0x26, 0x87, 0x5a, 0xcf, - 0xac, 0x47, 0x16, 0x39, 0x25, 0xcd, 0xa5, 0x75, 0x1f, 0xcd, 0xcf, 0xf7, 0xc2, 0xe6, 0xb8, 0x05, 0xed, 0xfd, 0xc3, - 0x69, 0x33, 0x16, 0x0d, 0xe1, 0x8f, 0x19, 0x95, 0x81, 0x2a, 0x68, 0x20, 0xf1, 0xc1, 0x4c, 0x45, 0x0e, 0x10, 0x9d, - 0x14, 0xba, 0xe4, 0x38, 0x7d, 0xbe, 0x67, 0x20, 0x51, 0xe5, 0xb3, 0x93, 0xc4, 0xd8, 0x05, 0x68, 0xe6, 0xb7, 0x87, - 0xfe, 0xbd, 0x1f, 0xff, 0x5c, 0xd1, 0x76, 0x77, 0x4d, 0x4b, 0x9a, 0xca, 0xba, 0xb5, 0xad, 0x67, 0xa0, 0x05, 0xae, - 0x92, 0x76, 0xf8, 0x87, 0x9b, 0xb7, 0x6f, 0x92, 0xda, 0x6e, 0xfb, 0x17, 0x4f, 0x51, 0xab, 0x6a, 0xf1, 0x1e, 0xaa, - 0xc5, 0xbf, 0x92, 0x9e, 0xaa, 0x17, 0xbd, 0x0f, 0xc0, 0xaa, 0xfd, 0xbd, 0xbd, 0x2f, 0x1a, 0x2a, 0xb0, 0x5f, 0x42, - 0x72, 0xb8, 0x50, 0x1e, 0x3a, 0xc3, 0xa8, 0x7f, 0x00, 0xfd, 0x60, 0x01, 0xd8, 0xad, 0xf3, 0x3e, 0xe4, 0x7f, 0x95, - 0x82, 0xe7, 0xdf, 0xee, 0x17, 0xf5, 0xd6, 0x11, 0xec, 0x13, 0xe3, 0xcb, 0x29, 0xe3, 0x05, 0x6d, 0x99, 0x3c, 0x80, - 0xb9, 0x50, 0x42, 0x9a, 0x95, 0xdc, 0x37, 0x24, 0xcb, 0xd4, 0x49, 0xd4, 0x6c, 0x67, 0x39, 0x14, 0x1c, 0x45, 0x49, - 0xa7, 0x3e, 0xad, 0x0e, 0xe6, 0x5c, 0xe7, 0x96, 0xe9, 0x24, 0x7a, 0x71, 0x50, 0x17, 0x6e, 0x2f, 0xe1, 0x61, 0x39, - 0xa4, 0x64, 0x4b, 0x3e, 0x4d, 0xc1, 0x70, 0xda, 0x1a, 0xa6, 0x9c, 0x54, 0xac, 0xdc, 0x4d, 0x05, 0x64, 0x39, 0x07, - 0x2a, 0x11, 0xcb, 0x0f, 0x8b, 0x95, 0x94, 0x35, 0x07, 0xdd, 0x6d, 0x46, 0xdb, 0xa9, 0x37, 0x33, 0x13, 0xa7, 0x25, - 0x19, 0x5b, 0x89, 0x29, 0x0e, 0x5b, 0x5a, 0xcd, 0x16, 0x24, 0xbd, 0x5b, 0xb6, 0xf5, 0x8a, 0x67, 0x4e, 0xaa, 0xb2, - 0xf0, 0xf4, 0x99, 0x9f, 0x93, 0x90, 0xa6, 0xb3, 0x6e, 0x95, 0xe7, 0xf9, 0x0c, 0xa0, 0xa0, 0x8e, 0xc9, 0x6a, 0xd3, - 0x00, 0x0f, 0x14, 0xdb, 0x99, 0x99, 0x38, 0x50, 0x1b, 0xc6, 0x46, 0x28, 0x11, 0x2f, 0x66, 0x47, 0x77, 0xbc, 0x19, - 0xa4, 0x77, 0x01, 0x42, 0x1a, 0x88, 0x6d, 0x30, 0xf3, 0x50, 0x11, 0xc6, 0xcf, 0xad, 0x57, 0xd7, 0x64, 0xd6, 0x95, - 0x27, 0x80, 0x45, 0xab, 0xd1, 0x45, 0x6a, 0x06, 0x05, 0xc8, 0x14, 0xd9, 0x69, 0x30, 0xf4, 0x9a, 0xed, 0x01, 0x77, - 0x17, 0x64, 0x7f, 0xa4, 0xce, 0x4b, 0xba, 0x9d, 0x7d, 0x5c, 0x09, 0xc9, 0xf2, 0x9d, 0xd3, 0x15, 0xe9, 0x29, 0x5c, - 0x16, 0x28, 0xce, 0x0b, 0x20, 0xa5, 0x94, 0xcf, 0xb4, 0x0e, 0x87, 0x49, 0x5a, 0x89, 0x0e, 0xa7, 0x93, 0x18, 0x7d, - 0x41, 0x1f, 0xca, 0xfa, 0x6f, 0xd4, 0xea, 0x2e, 0xee, 0x2b, 0xd2, 0x42, 0xd1, 0x70, 0x16, 0x35, 0x60, 0x5a, 0x4d, - 0x9d, 0x11, 0x3c, 0xab, 0x6e, 0x4b, 0x09, 0x03, 0xcf, 0xc1, 0x4c, 0x5d, 0x7b, 0x8f, 0x78, 0xfb, 0xcd, 0x16, 0x89, - 0xba, 0x64, 0x59, 0x47, 0xa7, 0x49, 0x90, 0x77, 0x82, 0xc7, 0x87, 0xc7, 0x8d, 0xd4, 0xde, 0x11, 0xea, 0x41, 0x3e, - 0x26, 0xbe, 0xf7, 0x99, 0x27, 0x92, 0xe5, 0x79, 0xb0, 0xc8, 0x4f, 0x48, 0xa9, 0x12, 0x7a, 0x60, 0xdd, 0xad, 0x08, - 0x06, 0x20, 0xe0, 0xf8, 0x6c, 0x60, 0x7e, 0x60, 0x3a, 0x2c, 0xf6, 0x67, 0x52, 0xf4, 0x55, 0x9d, 0xae, 0xda, 0xd2, - 0xb6, 0x3e, 0x73, 0x75, 0x5f, 0x84, 0x57, 0xf7, 0x25, 0xae, 0xf7, 0x74, 0x89, 0xeb, 0x21, 0xd5, 0x14, 0xbd, 0xaa, - 0xb7, 0x49, 0x4f, 0x17, 0x9b, 0x01, 0xfc, 0xf6, 0x5e, 0x84, 0xaf, 0x81, 0xff, 0xff, 0x52, 0xbb, 0x7e, 0x77, 0xe1, - 0xfa, 0x82, 0xaa, 0xf5, 0x85, 0x15, 0xcb, 0x78, 0xa7, 0x9c, 0x87, 0x19, 0x94, 0x26, 0x86, 0x05, 0x5b, 0xfa, 0x7f, - 0x04, 0xb4, 0xff, 0x89, 0x63, 0x78, 0xe9, 0x8f, 0xf1, 0x04, 0xe9, 0xc1, 0x40, 0x84, 0xc3, 0x31, 0x1a, 0x5d, 0x0d, - 0xf0, 0xc0, 0x47, 0xaa, 0x1d, 0x1a, 0xa2, 0x11, 0x1e, 0x03, 0xc1, 0x10, 0x87, 0x23, 0xd8, 0x40, 0x81, 0x8f, 0xa3, - 0x37, 0x41, 0x88, 0x87, 0x11, 0x50, 0x05, 0x1e, 0x0e, 0x03, 0x64, 0x68, 0x87, 0x38, 0x00, 0x71, 0x8a, 0x24, 0xac, - 0x00, 0xe8, 0x34, 0xc4, 0xde, 0x08, 0xc4, 0x0d, 0xb1, 0x37, 0xc1, 0xe3, 0x21, 0x1a, 0xe3, 0x11, 0x40, 0x87, 0x07, - 0x51, 0xe9, 0x44, 0xd8, 0x87, 0xed, 0x70, 0x48, 0xc6, 0x78, 0x10, 0x22, 0x3d, 0x18, 0x38, 0x46, 0x20, 0xc2, 0xc1, - 0x9e, 0xff, 0x26, 0xc4, 0xc1, 0x08, 0xf4, 0x0e, 0x06, 0x97, 0x20, 0x76, 0x32, 0x40, 0x66, 0x34, 0xf0, 0x82, 0x82, - 0xe8, 0x29, 0xd0, 0x82, 0xbf, 0x2f, 0x68, 0x00, 0x89, 0x8f, 0x42, 0x3c, 0x81, 0xd8, 0xf5, 0x15, 0xbf, 0x19, 0x0d, - 0x6e, 0xbe, 0x8f, 0xbc, 0xdf, 0x8d, 0x59, 0xf8, 0xf7, 0xc5, 0xcc, 0x57, 0x08, 0xc0, 0x14, 0x74, 0x83, 0x1c, 0xa4, - 0x07, 0xa3, 0x1b, 0x98, 0xc7, 0x57, 0x13, 0x34, 0x06, 0xae, 0xe1, 0x18, 0x4d, 0x50, 0xa4, 0xd0, 0x05, 0xf6, 0x81, - 0x61, 0x72, 0x80, 0xe9, 0x0b, 0x61, 0x1c, 0xfc, 0x85, 0x61, 0x7c, 0xca, 0xa7, 0xbf, 0xb0, 0x4b, 0x7f, 0x46, 0x0a, - 0x82, 0x76, 0x4c, 0xb7, 0x61, 0xb1, 0x6b, 0x3e, 0x0f, 0xa8, 0x2e, 0x0a, 0xde, 0xf6, 0xa1, 0x1b, 0x99, 0xc7, 0x85, - 0x8f, 0x58, 0x96, 0x40, 0x57, 0x3f, 0x3f, 0x6b, 0xf5, 0x81, 0xd0, 0x3f, 0x1e, 0xc1, 0xec, 0x41, 0xe3, 0x6e, 0xce, - 0x74, 0xa5, 0x9f, 0xdf, 0x14, 0x14, 0xbd, 0xbe, 0x7e, 0x07, 0x2f, 0x7f, 0x65, 0x89, 0x78, 0xbd, 0x81, 0x77, 0xcc, - 0x1d, 0x92, 0xb5, 0xfa, 0x6a, 0xc0, 0xa1, 0x8d, 0x54, 0x53, 0x78, 0x3d, 0x41, 0x5d, 0x1f, 0x81, 0x31, 0x8e, 0x17, - 0xed, 0xfc, 0x5d, 0x49, 0x89, 0xa0, 0x68, 0xc9, 0xd6, 0x14, 0x31, 0x09, 0x2d, 0x42, 0x45, 0x91, 0x64, 0x6a, 0x38, - 0x31, 0x6a, 0x3a, 0x68, 0x77, 0xb5, 0x12, 0xd3, 0x28, 0x83, 0x25, 0x20, 0x66, 0xde, 0x75, 0xc4, 0x71, 0x11, 0x1a, - 0xab, 0xae, 0xa9, 0x94, 0xd0, 0x4c, 0x28, 0xab, 0xc2, 0x79, 0xac, 0xde, 0x6e, 0x11, 0xd1, 0xef, 0x0c, 0x89, 0xbb, - 0x61, 0x39, 0x53, 0xdf, 0x0c, 0xe6, 0xb1, 0xee, 0x22, 0x95, 0x04, 0xd5, 0xc8, 0x98, 0x0f, 0x1c, 0x7a, 0x56, 0x52, - 0xbe, 0x84, 0x97, 0x56, 0x78, 0x4c, 0xd0, 0x57, 0xa4, 0xb4, 0xa8, 0x4b, 0xe8, 0x5b, 0x92, 0xeb, 0xeb, 0x1f, 0xff, - 0xa1, 0xbe, 0x86, 0x28, 0x13, 0x4e, 0x9c, 0xf0, 0x0a, 0x60, 0x18, 0xd5, 0xa4, 0xe3, 0x1b, 0x0e, 0xcc, 0x77, 0x8d, - 0x06, 0x5a, 0x78, 0xf0, 0x2f, 0x7b, 0x20, 0xe5, 0xdd, 0x71, 0xb3, 0x93, 0xa4, 0xff, 0xeb, 0x7e, 0xd4, 0x30, 0x89, - 0xd5, 0xa2, 0x62, 0x72, 0x7e, 0x0d, 0x06, 0xc6, 0xae, 0x39, 0x00, 0xe7, 0x94, 0x03, 0x86, 0xb6, 0xe8, 0x78, 0x00, - 0xec, 0x9f, 0x6f, 0x2e, 0xd1, 0x2f, 0x0d, 0x5c, 0x6e, 0x6a, 0xb0, 0xd7, 0x5e, 0x56, 0x54, 0x16, 0x75, 0x96, 0xbc, - 0xfb, 0xf9, 0xfa, 0xe6, 0xe4, 0xf1, 0x4a, 0x13, 0x21, 0xca, 0x53, 0xf3, 0xbd, 0x65, 0x55, 0x4a, 0xd6, 0x90, 0x56, - 0x6a, 0xb1, 0x8e, 0x8a, 0x8e, 0xa3, 0x47, 0xfa, 0x3c, 0x67, 0x25, 0x35, 0x4e, 0x75, 0x8c, 0xee, 0x1c, 0x7d, 0xce, - 0xc6, 0xa3, 0xee, 0x47, 0x56, 0xba, 0xe6, 0x02, 0xb9, 0xe6, 0x36, 0xb9, 0xfa, 0x6b, 0xd4, 0xbf, 0x01, 0x14, 0xee, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xdd, 0x58, 0x6d, 0x6f, 0xdb, 0x38, 0x12, 0xfe, 0xde, + 0x5f, 0x31, 0xa7, 0x36, 0x6b, 0x6b, 0x1b, 0x51, 0x22, 0xe5, 0xb7, 0xd8, 0x92, 0x16, 0x69, 0xae, 0x8b, 0x5d, 0xa0, + 0xdd, 0x2d, 0x90, 0x6c, 0xef, 0x43, 0x51, 0x20, 0xb4, 0x34, 0xb2, 0xd8, 0x48, 0xa4, 0x4e, 0xa4, 0x5f, 0x52, 0xc3, + 0xf7, 0xdb, 0x0f, 0x94, 0x6c, 0xc7, 0xe9, 0x35, 0x87, 0xeb, 0xe2, 0x0e, 0x87, 0xdd, 0x18, 0x21, 0x86, 0xe4, 0xcc, + 0x70, 0xe6, 0xf1, 0x0c, 0x67, 0xcc, 0xe8, 0x2f, 0x99, 0x4a, 0xcd, 0x7d, 0x8d, 0x50, 0x98, 0xaa, 0x4c, 0x22, 0x3b, + 0x42, 0xc9, 0xe5, 0x22, 0x46, 0x99, 0x44, 0x05, 0xf2, 0x2c, 0x89, 0x2a, 0x34, 0x1c, 0xd2, 0x82, 0x37, 0x1a, 0x4d, + 0xfc, 0xdb, 0xcd, 0x8f, 0xde, 0x04, 0xfc, 0x24, 0x2a, 0x85, 0xbc, 0x83, 0x06, 0xcb, 0x58, 0xa4, 0x4a, 0x42, 0xd1, + 0x60, 0x1e, 0x67, 0xdc, 0xf0, 0xa9, 0xa8, 0xf8, 0x02, 0x2d, 0x43, 0x2b, 0x26, 0x79, 0x85, 0xf1, 0x4a, 0xe0, 0xba, + 0x56, 0x8d, 0x81, 0x54, 0x49, 0x83, 0xd2, 0xc4, 0xce, 0x5a, 0x64, 0xa6, 0x88, 0x33, 0x5c, 0x89, 0x14, 0xbd, 0x76, + 0x72, 0x2e, 0xa4, 0x30, 0x82, 0x97, 0x9e, 0x4e, 0x79, 0x89, 0x31, 0x3d, 0x5f, 0x6a, 0x6c, 0xda, 0x09, 0x9f, 0x97, + 0x18, 0x4b, 0xe5, 0xf8, 0x49, 0xa4, 0xd3, 0x46, 0xd4, 0x06, 0xac, 0xbd, 0x71, 0xa5, 0xb2, 0x65, 0x89, 0x89, 0xef, + 0x73, 0xad, 0xd1, 0x68, 0x5f, 0xc8, 0x0c, 0x37, 0x64, 0x14, 0x86, 0x29, 0xe3, 0xe3, 0x9c, 0x7c, 0xd2, 0xcf, 0x32, + 0x95, 0x2e, 0x2b, 0x94, 0x86, 0x94, 0x2a, 0xe5, 0x46, 0x28, 0x49, 0x34, 0xf2, 0x26, 0x2d, 0xe2, 0x38, 0x76, 0x7e, + 0xd0, 0x7c, 0x85, 0xce, 0x77, 0xdf, 0xf5, 0x8f, 0x4c, 0x0b, 0x34, 0xaf, 0x4b, 0xb4, 0xa4, 0x7e, 0x75, 0x7f, 0xc3, + 0x17, 0xbf, 0xf0, 0x0a, 0xfb, 0x0e, 0xd7, 0x22, 0x43, 0xc7, 0xfd, 0x10, 0x7c, 0x24, 0xda, 0xdc, 0x97, 0x48, 0x32, + 0xa1, 0xeb, 0x92, 0xdf, 0xc7, 0xce, 0xbc, 0x54, 0xe9, 0x9d, 0xe3, 0xce, 0xf2, 0xa5, 0x4c, 0xad, 0x72, 0xd0, 0x7d, + 0x74, 0xb7, 0x25, 0x1a, 0x30, 0xf1, 0x5b, 0x6e, 0x0a, 0x52, 0xf1, 0x4d, 0xbf, 0x23, 0x84, 0xec, 0xb3, 0xef, 0xfb, + 0xf8, 0x92, 0x06, 0x81, 0x7b, 0xde, 0x0e, 0x81, 0xeb, 0xd3, 0x20, 0x98, 0x35, 0x68, 0x96, 0x8d, 0x04, 0xde, 0xbf, + 0x8d, 0x6a, 0x6e, 0x0a, 0xc8, 0x62, 0xa7, 0xa2, 0x8c, 0x04, 0xc1, 0x04, 0xe8, 0x05, 0x61, 0x43, 0x8f, 0x52, 0x12, + 0x7a, 0x74, 0x98, 0x8e, 0xbd, 0x21, 0xd0, 0x81, 0x37, 0x04, 0xc6, 0xc8, 0x10, 0x82, 0xcf, 0x0e, 0xe4, 0xa2, 0x2c, + 0x63, 0x47, 0x2a, 0x89, 0x0e, 0x68, 0xd3, 0xa8, 0x3b, 0x8c, 0x9d, 0x74, 0xd9, 0x34, 0x28, 0xcd, 0x95, 0x2a, 0x55, + 0xe3, 0xf8, 0xc9, 0x33, 0x78, 0xf4, 0xf7, 0xcd, 0x47, 0x98, 0x86, 0x4b, 0x9d, 0xab, 0xa6, 0x8a, 0x9d, 0xf6, 0x4b, + 0xe9, 0xbf, 0xd8, 0x9a, 0x1d, 0xd8, 0xc1, 0x3d, 0xd9, 0xf4, 0x54, 0x23, 0x16, 0x42, 0xc6, 0x0e, 0x65, 0x40, 0x27, + 0x8e, 0x9f, 0xdc, 0xba, 0xbb, 0x23, 0x26, 0xdc, 0x62, 0xb2, 0xf7, 0x52, 0xf5, 0x3f, 0xdc, 0x46, 0x7a, 0xb5, 0x80, + 0x4d, 0x55, 0x4a, 0x1d, 0x3b, 0x85, 0x31, 0xf5, 0xd4, 0xf7, 0xd7, 0xeb, 0x35, 0x59, 0x87, 0x44, 0x35, 0x0b, 0x9f, + 0x05, 0x41, 0xe0, 0xeb, 0xd5, 0xc2, 0x81, 0x2e, 0x3e, 0x1c, 0x36, 0x70, 0xa0, 0x40, 0xb1, 0x28, 0x4c, 0x4b, 0x27, + 0x2f, 0xb6, 0xb8, 0x8b, 0x2c, 0x47, 0x72, 0xfb, 0xf1, 0xe4, 0x14, 0x71, 0x72, 0x0a, 0xfe, 0x70, 0x82, 0x66, 0xef, + 0xad, 0x35, 0x6a, 0xcc, 0x19, 0x30, 0x08, 0xda, 0x0f, 0xf3, 0x2c, 0xbd, 0x9f, 0x79, 0x5f, 0xcc, 0xe0, 0x64, 0x06, + 0x0c, 0x9e, 0x01, 0xb0, 0x6a, 0xe4, 0x5d, 0x1c, 0xc5, 0xa9, 0xdd, 0x5e, 0xd1, 0xe0, 0x61, 0xc1, 0xca, 0xfc, 0x34, + 0x3a, 0x9d, 0x7b, 0xec, 0xbd, 0x65, 0xb0, 0xd8, 0x1f, 0x85, 0x3c, 0x56, 0xd0, 0xf7, 0x23, 0x3e, 0x84, 0xe1, 0x7e, + 0x65, 0xe8, 0x59, 0xfa, 0x38, 0xb3, 0x27, 0xc1, 0x70, 0xc5, 0x0a, 0x5a, 0x79, 0x23, 0x6f, 0xc8, 0x43, 0x08, 0xf7, + 0x26, 0x85, 0x10, 0xae, 0x58, 0x31, 0x7a, 0x3f, 0x3a, 0x5d, 0xf3, 0xc2, 0xcf, 0x3d, 0x0b, 0xf3, 0xd4, 0x71, 0x1e, + 0x30, 0x50, 0xa7, 0x18, 0x90, 0x4f, 0x4a, 0xc8, 0xbe, 0xe3, 0xb8, 0xbb, 0x1c, 0x4d, 0x5a, 0xf4, 0x1d, 0x3f, 0x55, + 0x32, 0x17, 0x0b, 0xf2, 0x49, 0x2b, 0xe9, 0xb8, 0xc4, 0x14, 0x28, 0xfb, 0x07, 0x51, 0x2b, 0x88, 0xed, 0x4e, 0xff, + 0xcb, 0x1d, 0xe3, 0x6e, 0x8f, 0xf9, 0x61, 0x84, 0x29, 0x31, 0x36, 0xc4, 0x66, 0xf4, 0xf9, 0x71, 0x75, 0xae, 0xb2, + 0xfb, 0x27, 0x52, 0xa7, 0xa0, 0x5d, 0xde, 0x08, 0x29, 0xb1, 0xb9, 0xc1, 0x8d, 0x89, 0x9d, 0xb7, 0x97, 0x57, 0x70, + 0x99, 0x65, 0x0d, 0x6a, 0x3d, 0x05, 0xe7, 0xa5, 0x21, 0x15, 0x4f, 0xff, 0x73, 0x5d, 0xf4, 0x91, 0xae, 0xbf, 0x89, + 0x1f, 0x05, 0xfc, 0x82, 0x66, 0xad, 0x9a, 0xbb, 0xbd, 0x36, 0x6b, 0xda, 0xcc, 0x66, 0x60, 0x13, 0x1b, 0xc2, 0x6b, + 0x4d, 0x74, 0x29, 0x52, 0xec, 0x53, 0x97, 0x54, 0xbc, 0x7e, 0xf0, 0x4a, 0x1e, 0x80, 0xba, 0x8d, 0x32, 0xb1, 0x82, + 0xb4, 0xe4, 0x5a, 0xc7, 0x8e, 0xec, 0x54, 0x39, 0xb0, 0x4f, 0x1b, 0x25, 0xd3, 0x52, 0xa4, 0x77, 0xb1, 0xf3, 0x95, + 0x1b, 0xe2, 0xd5, 0xfd, 0xcf, 0x59, 0xbf, 0xa7, 0xb5, 0xc8, 0x7a, 0x2e, 0x59, 0xf1, 0x72, 0x89, 0x10, 0x83, 0x29, + 0x84, 0x7e, 0x30, 0x70, 0xf6, 0xa4, 0x58, 0xad, 0xef, 0x7a, 0x2e, 0xc9, 0x55, 0xba, 0xd4, 0x7d, 0xd7, 0x39, 0x64, + 0x69, 0xc4, 0xbb, 0x3b, 0xd4, 0x79, 0xee, 0x7c, 0x61, 0x91, 0x57, 0x62, 0x6e, 0x9c, 0x87, 0x6c, 0x7e, 0xb1, 0xd5, + 0x7d, 0x49, 0x1a, 0xad, 0x85, 0xbb, 0x3b, 0x2e, 0x46, 0xba, 0xe6, 0xf2, 0x4b, 0x41, 0x6b, 0xa0, 0x4d, 0x1a, 0x49, + 0x2c, 0x65, 0x33, 0xa7, 0xe6, 0xf2, 0x78, 0xa0, 0xcf, 0x0f, 0xe4, 0x8b, 0xad, 0xe8, 0x4b, 0x7b, 0x4b, 0xde, 0x1d, + 0x35, 0x46, 0x7e, 0x26, 0x56, 0xc9, 0xed, 0xce, 0x7d, 0xf0, 0xe3, 0xef, 0x4b, 0x6c, 0xee, 0xaf, 0xb1, 0xc4, 0xd4, + 0xa8, 0xa6, 0xef, 0x3c, 0x97, 0x68, 0x1c, 0xb7, 0x73, 0xf8, 0xa7, 0x9b, 0xb7, 0x6f, 0x62, 0xd5, 0x6f, 0xdc, 0xf3, + 0xa7, 0xb8, 0x6d, 0xb5, 0xf8, 0xd0, 0x60, 0xf9, 0x8f, 0xb8, 0x67, 0xeb, 0x45, 0xef, 0xa3, 0xe3, 0x92, 0xd6, 0xdf, + 0xdb, 0x87, 0xa2, 0x61, 0x13, 0xfb, 0xe5, 0xa6, 0x2a, 0xcf, 0xad, 0x87, 0xde, 0x68, 0xe8, 0xee, 0x6e, 0x77, 0xee, + 0xce, 0x9d, 0x45, 0x7e, 0x77, 0xef, 0x27, 0x51, 0x7b, 0x05, 0x27, 0xdf, 0x6f, 0xe7, 0x6a, 0xe3, 0x69, 0xf1, 0x59, + 0xc8, 0xc5, 0x54, 0xc8, 0x02, 0x1b, 0x61, 0x76, 0x99, 0x58, 0x9d, 0x0b, 0x59, 0x2f, 0xcd, 0xb6, 0xe6, 0x59, 0x66, + 0x77, 0x86, 0xf5, 0x66, 0x96, 0x2b, 0x69, 0x2c, 0x27, 0x4e, 0x29, 0x56, 0xbb, 0x6e, 0xbf, 0xbd, 0x5b, 0xa6, 0x17, + 0xc3, 0xb3, 0x9d, 0x0d, 0xb8, 0xad, 0xc1, 0x8d, 0xf1, 0x78, 0x29, 0x16, 0x72, 0x9a, 0xa2, 0x34, 0xd8, 0x74, 0x42, + 0x39, 0xaf, 0x44, 0x79, 0x3f, 0xd5, 0x5c, 0x6a, 0x4f, 0x63, 0x23, 0xf2, 0xdd, 0x7c, 0x69, 0x8c, 0x92, 0xdb, 0xb9, + 0x6a, 0x32, 0x6c, 0xa6, 0xc1, 0xac, 0x23, 0xbc, 0x86, 0x67, 0x62, 0xa9, 0xa7, 0x24, 0x6c, 0xb0, 0x9a, 0xcd, 0x79, + 0x7a, 0xb7, 0x68, 0xd4, 0x52, 0x66, 0x5e, 0x6a, 0x6f, 0xe1, 0xe9, 0x73, 0x9a, 0xf3, 0x10, 0xd3, 0xd9, 0x7e, 0x96, + 0xe7, 0xf9, 0xac, 0x14, 0x12, 0xbd, 0xee, 0x56, 0x9b, 0x32, 0x32, 0xb0, 0x62, 0x27, 0x66, 0x12, 0x66, 0x17, 0x3a, + 0x1b, 0x69, 0x10, 0x9c, 0xcd, 0x0e, 0xee, 0x04, 0xb3, 0x74, 0xd9, 0x68, 0xd5, 0x4c, 0x6b, 0x25, 0xac, 0x99, 0xbb, + 0x8a, 0x0b, 0x79, 0x6a, 0xbd, 0x0d, 0x93, 0xd9, 0xbe, 0x3c, 0x4d, 0x85, 0x6c, 0x8f, 0x69, 0x8b, 0xd4, 0xac, 0x12, + 0xb2, 0x2b, 0xb2, 0x53, 0x36, 0x0a, 0xea, 0xcd, 0x8e, 0xec, 0x03, 0x64, 0x7b, 0xe0, 0xce, 0x4b, 0xdc, 0xcc, 0x3e, + 0x2d, 0xb5, 0x11, 0xf9, 0xbd, 0xb7, 0x2f, 0xd2, 0x53, 0x5d, 0xf3, 0x14, 0xbd, 0x39, 0x9a, 0x35, 0xa2, 0x9c, 0xb5, + 0x67, 0x78, 0xc2, 0x60, 0xa5, 0xf7, 0x38, 0x1d, 0xd5, 0xb4, 0x01, 0xfa, 0x58, 0xd7, 0xbf, 0xe3, 0xb6, 0xb1, 0xb8, + 0xad, 0x78, 0xb3, 0x10, 0xd2, 0x9b, 0x2b, 0x63, 0x54, 0x35, 0xf5, 0xc6, 0xf5, 0x66, 0xb6, 0x5f, 0xb2, 0xca, 0xa6, + 0xd4, 0x9a, 0xd9, 0xd6, 0xde, 0x03, 0xde, 0xb4, 0xde, 0x80, 0x56, 0xa5, 0xc8, 0xf6, 0x7c, 0x2d, 0x0b, 0x04, 0x47, + 0x78, 0xe8, 0xb0, 0xde, 0x80, 0x5d, 0x3b, 0x40, 0x3d, 0xc8, 0x27, 0x9c, 0x06, 0x5f, 0xf9, 0x46, 0xb2, 0x3c, 0x67, + 0xf3, 0xfc, 0x88, 0x94, 0x2d, 0xa1, 0x3b, 0xb1, 0x8f, 0x0a, 0x36, 0xa8, 0x37, 0xb3, 0xc3, 0x77, 0x33, 0xa8, 0x37, + 0x3b, 0xd1, 0xa6, 0xc5, 0xf6, 0x44, 0x4b, 0x1b, 0xaa, 0xd3, 0x65, 0x53, 0xf6, 0x9d, 0xaf, 0x84, 0xee, 0x59, 0x78, + 0xf5, 0x50, 0xe2, 0x7a, 0x4f, 0x97, 0xb8, 0x1e, 0xd8, 0xa6, 0xe8, 0x95, 0xda, 0xc4, 0xbd, 0xb6, 0xd8, 0x0c, 0x80, + 0x0d, 0x7a, 0x67, 0xe1, 0xeb, 0xb3, 0xf0, 0xea, 0xbf, 0x52, 0xbb, 0x7e, 0x77, 0xe1, 0xfa, 0x86, 0xaa, 0xf5, 0x8d, + 0x15, 0xab, 0xf3, 0xce, 0x3a, 0x7f, 0x16, 0xbe, 0x76, 0xdc, 0x9d, 0x20, 0x5a, 0x2c, 0xe8, 0xff, 0x02, 0xda, 0x7f, + 0xc5, 0x31, 0xbc, 0xa4, 0x13, 0x72, 0x01, 0xed, 0xd0, 0x41, 0x44, 0xc2, 0x09, 0x8c, 0xaf, 0x06, 0x64, 0x40, 0xc1, + 0xb6, 0x43, 0x23, 0x18, 0x93, 0xc9, 0x05, 0xd0, 0x11, 0x09, 0xc7, 0x40, 0x19, 0x30, 0x4a, 0x86, 0x6f, 0x58, 0x48, + 0x46, 0x43, 0x18, 0x5f, 0xb1, 0x80, 0x84, 0x0c, 0x3a, 0xde, 0x11, 0x61, 0x0c, 0x42, 0xcb, 0x12, 0x56, 0x01, 0xb0, + 0x34, 0x24, 0xc1, 0x18, 0x02, 0x18, 0x91, 0xe0, 0x82, 0x4c, 0x46, 0x30, 0x21, 0x63, 0x0a, 0x8c, 0x0c, 0x86, 0xa5, + 0x37, 0x24, 0x14, 0x46, 0x24, 0x1c, 0xf1, 0x09, 0x19, 0x84, 0xd0, 0x0e, 0x1d, 0x1c, 0x63, 0xc2, 0x98, 0x47, 0x02, + 0xfa, 0x26, 0x24, 0x6c, 0x0c, 0x63, 0x32, 0x18, 0x5c, 0xd2, 0x11, 0xb9, 0x18, 0x40, 0x37, 0x76, 0xf0, 0x52, 0x06, + 0xc3, 0xa7, 0x40, 0x63, 0x7f, 0x5e, 0xd0, 0x42, 0xc2, 0x28, 0x84, 0xe4, 0x62, 0xc2, 0x6d, 0x5f, 0xca, 0xa0, 0x1b, + 0x3b, 0xdc, 0x28, 0x85, 0xe0, 0x77, 0x63, 0x16, 0xfe, 0x79, 0x31, 0xa3, 0x16, 0x01, 0x46, 0x06, 0xe1, 0x25, 0x0d, + 0xc9, 0x08, 0xda, 0xa1, 0x3b, 0x9b, 0x32, 0x98, 0x5c, 0x5d, 0xc0, 0x04, 0x46, 0x64, 0x34, 0x81, 0x0b, 0x18, 0x5a, + 0x74, 0x2f, 0xc8, 0x64, 0xd0, 0x09, 0x79, 0x8c, 0x7c, 0x2b, 0x8c, 0x83, 0x3f, 0x30, 0x8c, 0x4f, 0xf9, 0xf4, 0x07, + 0x76, 0xe9, 0xff, 0x71, 0x05, 0x45, 0x7e, 0xd7, 0x86, 0x45, 0x7e, 0xf7, 0x3c, 0x60, 0xbb, 0xa8, 0x24, 0xb2, 0xdd, + 0x48, 0x12, 0x15, 0x14, 0x44, 0x16, 0x57, 0x3c, 0x4d, 0x4e, 0x5a, 0xfd, 0xc8, 0x2f, 0xe8, 0x61, 0xab, 0xa0, 0xc9, + 0xa3, 0xc6, 0xbd, 0xdb, 0x6b, 0x2b, 0x7d, 0x72, 0x53, 0x20, 0xbc, 0xbe, 0x7e, 0x07, 0x6b, 0x51, 0x96, 0x20, 0xd5, + 0x1a, 0x4c, 0x73, 0x0f, 0x46, 0xd9, 0x57, 0x03, 0x89, 0xa9, 0xb1, 0xa4, 0x29, 0x10, 0xf6, 0x7d, 0x04, 0x21, 0x24, + 0x9a, 0x37, 0xc9, 0xbb, 0x12, 0xb9, 0x46, 0x58, 0x88, 0x15, 0x82, 0x30, 0xa0, 0x55, 0x85, 0x60, 0x84, 0x1d, 0x8e, + 0x82, 0x2d, 0x5f, 0xe4, 0x77, 0x87, 0x74, 0x8d, 0xb2, 0xc8, 0x62, 0x89, 0x26, 0xd9, 0x77, 0xc4, 0x51, 0x11, 0x76, + 0x56, 0x5d, 0xa3, 0x31, 0x42, 0x2e, 0xac, 0x55, 0x61, 0x12, 0xd9, 0x5f, 0xb7, 0xc0, 0xdb, 0xdf, 0x0c, 0xb1, 0xbf, + 0x16, 0xb9, 0xb0, 0x6f, 0x06, 0x49, 0xd4, 0x76, 0x91, 0x56, 0x83, 0x6d, 0x64, 0xba, 0x07, 0x8e, 0x96, 0x2a, 0x51, + 0x2e, 0x4c, 0x11, 0x87, 0x0c, 0xea, 0x92, 0xa7, 0x58, 0xa8, 0x32, 0xc3, 0x26, 0xbe, 0xbe, 0xfe, 0xf9, 0xaf, 0xf6, + 0x35, 0xc4, 0x9a, 0x70, 0x94, 0xac, 0xf5, 0x5d, 0x27, 0x68, 0x89, 0xbd, 0xdc, 0x68, 0xd0, 0xbd, 0x6b, 0xd4, 0x5c, + 0xeb, 0xb5, 0x6a, 0xb2, 0x47, 0x5a, 0xde, 0x1d, 0x16, 0xf7, 0x9a, 0xda, 0xff, 0xb6, 0x1f, 0xed, 0x84, 0xf4, 0x72, + 0x5e, 0x09, 0x93, 0x5c, 0xf3, 0x15, 0x46, 0x7e, 0xb7, 0x91, 0x44, 0xbe, 0x75, 0xa0, 0xe3, 0x2d, 0xf6, 0x32, 0x05, + 0x4d, 0x7e, 0xbd, 0xb9, 0x84, 0xdf, 0xea, 0x8c, 0x1b, 0xec, 0xb0, 0x6f, 0xbd, 0xac, 0xd0, 0x14, 0x2a, 0x8b, 0xdf, + 0xfd, 0x7a, 0x7d, 0x73, 0xf4, 0x78, 0xd9, 0x32, 0x01, 0xca, 0xb4, 0x7b, 0x6f, 0x59, 0x96, 0x46, 0xd4, 0xbc, 0x31, + 0xad, 0x5a, 0xcf, 0x66, 0xc7, 0xc1, 0xa3, 0x76, 0x3f, 0x17, 0x25, 0x76, 0x4e, 0xed, 0x05, 0xfd, 0x04, 0xbe, 0x66, + 0xe3, 0xe1, 0xec, 0x2f, 0xac, 0xf4, 0xbb, 0x00, 0xf2, 0xbb, 0x68, 0xf2, 0xdb, 0xd7, 0xa8, 0x7f, 0x02, 0x14, 0xee, 0xbc, 0x64, 0x9d, 0x12, 0x00, 0x00}; } // namespace captive_portal diff --git a/esphome/components/web_server/server_index_v2.h b/esphome/components/web_server/server_index_v2.h index 21beecfff7..31c2d1fd85 100644 --- a/esphome/components/web_server/server_index_v2.h +++ b/esphome/components/web_server/server_index_v2.h @@ -1,633 +1,636 @@ #pragma once // Generated from https://github.com/esphome/esphome-webserver + #ifdef USE_WEBSERVER_LOCAL #if USE_WEBSERVER_VERSION == 2 -#include "esphome/core/hal.h" -namespace esphome { +#include "esphome/core/hal.h" + +namespace esphome { namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc5, 0x7d, 0xd9, 0x92, 0xdb, 0x46, 0xb6, 0xe0, 0xf3, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcd, 0x7d, 0xd9, 0x92, 0xdb, 0x46, 0xb6, 0xe0, 0xf3, 0xdc, 0xaf, 0x40, 0xc1, 0xd5, 0x25, 0x64, 0x33, 0x89, 0x22, 0x59, 0xda, 0x0c, 0x56, 0x92, 0x5d, 0x2a, 0xc9, 0x2d, 0xbb, 0xb5, 0xd8, 0x2a, 0xc9, 0x6e, 0x9b, 0x66, 0x57, 0xa1, 0x88, 0x24, 0x99, 0x16, 0x88, 0xa4, 0x13, 0xc9, 0x5a, 0x4c, 0xe2, 0xc6, 0x7c, 0xc0, 0x44, 0x4c, 0xc4, 0x3c, 0xcd, 0xcb, 0xc4, 0xdc, 0x87, 0xf9, 0x88, 0x79, 0xbe, 0x9f, - 0x72, 0x7f, 0x60, 0xe6, 0x13, 0x26, 0x4e, 0x2e, 0x40, 0x82, 0x4b, 0xa9, 0xbc, 0xdc, 0x3b, 0xa1, 0x90, 0x44, 0xe4, - 0x7a, 0xf2, 0xe4, 0xc9, 0xb3, 0x27, 0x70, 0xbc, 0x97, 0xf0, 0x91, 0xbc, 0x9d, 0x53, 0x6f, 0x2a, 0x67, 0x69, 0xef, - 0xd8, 0xfc, 0x4b, 0xe3, 0xa4, 0x77, 0x9c, 0xb2, 0xec, 0xa3, 0x27, 0x68, 0x4a, 0xd8, 0x88, 0x67, 0xde, 0x54, 0xd0, - 0x31, 0x49, 0x62, 0x19, 0x47, 0x6c, 0x16, 0x4f, 0xa8, 0x77, 0xd8, 0x3b, 0x9e, 0x51, 0x19, 0x7b, 0xa3, 0x69, 0x2c, - 0x72, 0x2a, 0xc9, 0x87, 0xf7, 0x5f, 0x34, 0x9f, 0xf6, 0x8e, 0xf3, 0x91, 0x60, 0x73, 0xe9, 0xc1, 0x90, 0x64, 0xc6, - 0x93, 0x45, 0x4a, 0x7b, 0x87, 0x87, 0xd7, 0xd7, 0xd7, 0xe1, 0x4f, 0xf9, 0x3f, 0x8d, 0x78, 0x96, 0x4b, 0xef, 0x15, - 0xb9, 0x66, 0x59, 0xc2, 0xaf, 0x31, 0x95, 0xe4, 0x55, 0x78, 0x36, 0x8d, 0x13, 0x7e, 0xfd, 0x8e, 0x73, 0x79, 0x70, - 0x10, 0xe8, 0xc7, 0xdb, 0xd3, 0xb3, 0x33, 0x42, 0xc8, 0x15, 0x67, 0x89, 0xd7, 0x5a, 0xad, 0xaa, 0xc2, 0x30, 0x8b, - 0x25, 0xbb, 0xa2, 0xba, 0x0b, 0x3a, 0x38, 0xf0, 0xe3, 0x84, 0xcf, 0x25, 0x4d, 0xce, 0xe4, 0x6d, 0x4a, 0xcf, 0xa6, - 0x94, 0xca, 0xdc, 0x67, 0x99, 0xf7, 0x9c, 0x8f, 0x16, 0x33, 0x9a, 0xc9, 0x70, 0x2e, 0xb8, 0xe4, 0x00, 0xc9, 0xc1, - 0x81, 0x2f, 0xe8, 0x3c, 0x8d, 0x47, 0x14, 0xea, 0x4f, 0xcf, 0xce, 0xaa, 0x1e, 0x55, 0x23, 0xcc, 0x24, 0x39, 0xbb, - 0x9d, 0x5d, 0xf2, 0x34, 0x40, 0x38, 0x95, 0x24, 0xa3, 0xd7, 0xde, 0x77, 0x34, 0xfe, 0xf8, 0x3a, 0x9e, 0x77, 0x47, - 0x69, 0x9c, 0xe7, 0xde, 0xa5, 0x5c, 0xaa, 0x25, 0x88, 0xc5, 0x48, 0x72, 0x11, 0x48, 0x4c, 0x31, 0x43, 0x4b, 0x36, - 0x0e, 0xe4, 0x94, 0xe5, 0xe1, 0xf9, 0xfe, 0x28, 0xcf, 0xdf, 0xd1, 0x7c, 0x91, 0xca, 0x7d, 0xb2, 0xd7, 0xc2, 0x6c, - 0x8f, 0x10, 0x26, 0x91, 0x9c, 0x0a, 0x7e, 0xed, 0xbd, 0x10, 0x82, 0x8b, 0xc0, 0x3f, 0x3d, 0x3b, 0xd3, 0x2d, 0x3c, - 0x96, 0x7b, 0x19, 0x97, 0x5e, 0x39, 0x5e, 0x7c, 0x99, 0xd2, 0xd0, 0xfb, 0x90, 0x53, 0xef, 0x62, 0x91, 0xe5, 0xf1, - 0x98, 0x9e, 0x9e, 0x9d, 0x5d, 0x78, 0x5c, 0x78, 0x17, 0xa3, 0x3c, 0xbf, 0xf0, 0x58, 0x96, 0x4b, 0x1a, 0x27, 0xa1, - 0x8f, 0xba, 0x6a, 0xb2, 0x51, 0x9e, 0xbf, 0xa7, 0x37, 0x92, 0x48, 0xac, 0x1e, 0x25, 0xa1, 0xc5, 0x84, 0x4a, 0x2f, - 0x2f, 0xd7, 0x15, 0xa0, 0x65, 0x4a, 0xa5, 0x27, 0x89, 0xaa, 0xe7, 0x5d, 0x8d, 0x7b, 0xaa, 0x1f, 0x65, 0x97, 0x8d, - 0x03, 0x2a, 0x0f, 0x0e, 0x64, 0x89, 0x67, 0xa4, 0x97, 0xe6, 0x31, 0x42, 0xf7, 0x6c, 0xd9, 0xc1, 0x01, 0x0d, 0x53, - 0x9a, 0x4d, 0xe4, 0x94, 0x10, 0xd2, 0xee, 0xb2, 0x83, 0x83, 0x40, 0x92, 0x54, 0x86, 0x13, 0x2a, 0x03, 0x8a, 0x10, - 0xae, 0x7a, 0x1f, 0x1c, 0x04, 0x1a, 0x09, 0x9c, 0x68, 0xc4, 0xd5, 0x70, 0x8c, 0x42, 0x83, 0xfd, 0xb3, 0xdb, 0x6c, - 0x14, 0xb8, 0xf0, 0x23, 0xcc, 0x0e, 0x0e, 0x52, 0x19, 0xe6, 0x30, 0x22, 0x96, 0x08, 0x15, 0x82, 0xca, 0x85, 0xc8, - 0x3c, 0x59, 0x48, 0x7e, 0x26, 0x05, 0xcb, 0x26, 0x01, 0x5a, 0xda, 0x32, 0xa7, 0x63, 0x51, 0x68, 0x70, 0xbf, 0x96, - 0x44, 0x90, 0x1e, 0xcc, 0x78, 0x29, 0x03, 0xd8, 0x45, 0x3e, 0xf6, 0x04, 0x21, 0x7e, 0xae, 0xfa, 0xfa, 0x7d, 0x11, - 0x89, 0x86, 0xef, 0x63, 0x0d, 0x25, 0x66, 0x12, 0xe1, 0x8f, 0x24, 0x10, 0x38, 0x0c, 0x43, 0x89, 0x48, 0x6f, 0x69, - 0xb1, 0x22, 0x9c, 0x75, 0xf6, 0xc5, 0xa0, 0x35, 0x8c, 0x64, 0x28, 0x68, 0xb2, 0x18, 0xd1, 0x20, 0x60, 0x38, 0xc7, - 0x19, 0x22, 0x3d, 0xd6, 0x08, 0x38, 0xe9, 0xc1, 0x76, 0xf3, 0xfa, 0x5e, 0x13, 0xb2, 0xd7, 0x42, 0x06, 0x46, 0x6e, - 0x01, 0x04, 0x0c, 0x1b, 0x78, 0x38, 0x21, 0x7e, 0xb6, 0x98, 0x5d, 0x52, 0xe1, 0x97, 0xcd, 0xba, 0x35, 0xb2, 0x58, - 0xe4, 0xd4, 0x1b, 0xe5, 0xb9, 0x37, 0x5e, 0x64, 0x23, 0xc9, 0x78, 0xe6, 0xf9, 0x0d, 0xde, 0xf0, 0x35, 0x39, 0x94, - 0xd4, 0xe0, 0xa3, 0x02, 0x05, 0x39, 0x6a, 0x88, 0x41, 0xd6, 0x68, 0x0f, 0x31, 0x40, 0x89, 0xba, 0x66, 0x3c, 0x83, - 0x00, 0x8a, 0x05, 0xac, 0xb1, 0xc0, 0x1f, 0x24, 0xac, 0x52, 0x2d, 0x91, 0xca, 0xbe, 0x08, 0x37, 0x0f, 0x0a, 0x91, - 0xe1, 0x2c, 0x9e, 0x07, 0x94, 0xf4, 0xa8, 0x22, 0xae, 0x38, 0x1b, 0x01, 0xac, 0xb5, 0x7d, 0xeb, 0xd3, 0x88, 0x86, - 0x15, 0x49, 0xa1, 0x48, 0x86, 0x63, 0x2e, 0x5e, 0xc4, 0xa3, 0x29, 0xf4, 0x2b, 0x09, 0x26, 0xb1, 0xe7, 0x6d, 0x24, - 0x68, 0x2c, 0xe9, 0x8b, 0x94, 0xc2, 0x53, 0xe0, 0xab, 0x9e, 0x3e, 0xc2, 0x39, 0x79, 0x15, 0xa6, 0x4c, 0xbe, 0xe1, - 0xd9, 0x88, 0x76, 0x73, 0x87, 0xba, 0x18, 0xec, 0xfb, 0x89, 0x94, 0x82, 0x5d, 0x2e, 0x24, 0x0d, 0xfc, 0x0c, 0x5a, - 0xf8, 0x38, 0x47, 0x98, 0x85, 0x92, 0xde, 0xc8, 0x53, 0x9e, 0x49, 0x9a, 0x49, 0x42, 0x2d, 0x52, 0xb1, 0x08, 0xe3, - 0xf9, 0x9c, 0x66, 0xc9, 0xe9, 0x94, 0xa5, 0x49, 0xc0, 0x50, 0x81, 0x0a, 0x1c, 0x4b, 0x02, 0x6b, 0x24, 0x3d, 0x11, - 0xc1, 0x3f, 0xbb, 0x57, 0x13, 0x48, 0xd2, 0x53, 0x87, 0x82, 0x12, 0xdf, 0xef, 0x8e, 0xb9, 0x08, 0xcc, 0x0a, 0x3c, - 0x3e, 0xf6, 0x24, 0xcc, 0xf1, 0x6e, 0x91, 0xd2, 0x1c, 0xd1, 0x06, 0x61, 0xe5, 0x36, 0x1a, 0x04, 0x7f, 0x0d, 0x14, - 0x5f, 0xa0, 0x40, 0xa0, 0x48, 0x74, 0xaf, 0x62, 0xe1, 0x7d, 0x61, 0x4e, 0xd4, 0x4f, 0x96, 0x9b, 0x4d, 0x25, 0xf9, - 0x29, 0x94, 0x62, 0x91, 0x4b, 0x9a, 0xbc, 0xbf, 0x9d, 0xd3, 0x1c, 0xbf, 0x94, 0x64, 0x2a, 0xfb, 0x53, 0x19, 0xd2, - 0xd9, 0x5c, 0xde, 0x9e, 0x29, 0xc6, 0x18, 0xf9, 0x3e, 0x1e, 0x41, 0x4b, 0x41, 0xe3, 0x11, 0x30, 0x33, 0x83, 0xad, - 0xaf, 0x79, 0x7a, 0x3b, 0x66, 0x69, 0x7a, 0xb6, 0x98, 0xcf, 0xb9, 0x90, 0xf8, 0xaf, 0x64, 0x29, 0x79, 0x85, 0x1a, - 0xd8, 0xcb, 0x65, 0x7e, 0xcd, 0xe4, 0x68, 0x1a, 0x48, 0xb4, 0x1c, 0xc5, 0x39, 0xf5, 0x9e, 0x71, 0x9e, 0xd2, 0x38, - 0x8b, 0x04, 0x11, 0xfd, 0x97, 0x32, 0xca, 0x16, 0x69, 0xda, 0xbd, 0x14, 0x34, 0xfe, 0xd8, 0x55, 0xd5, 0x6f, 0x2f, - 0x7f, 0xa2, 0x23, 0x19, 0xa9, 0xdf, 0x27, 0x42, 0xc4, 0xb7, 0xd0, 0x90, 0x10, 0x68, 0xd6, 0x17, 0xd1, 0x57, 0x67, - 0x6f, 0xdf, 0x84, 0xfa, 0x90, 0xb0, 0xf1, 0x6d, 0x20, 0xca, 0x83, 0x27, 0x0a, 0x3c, 0x16, 0x7c, 0xb6, 0x36, 0xb5, - 0xc6, 0x9a, 0xe8, 0xee, 0x00, 0x81, 0x12, 0xb1, 0xa7, 0x87, 0x76, 0x21, 0x78, 0xa3, 0x68, 0x1e, 0x2a, 0x89, 0x99, - 0x17, 0xfe, 0x89, 0x74, 0x71, 0x20, 0xd0, 0xdd, 0xd0, 0x4a, 0x71, 0xbb, 0xa4, 0x44, 0xc1, 0x39, 0x07, 0x09, 0x03, - 0x30, 0x8e, 0x62, 0x39, 0x9a, 0x2e, 0xa9, 0x1a, 0xac, 0xb0, 0x10, 0xd3, 0xa2, 0xc0, 0xd7, 0x25, 0xbd, 0xcb, 0x3d, - 0x42, 0x84, 0x62, 0x54, 0x44, 0xae, 0x56, 0x82, 0x10, 0x81, 0xf0, 0x77, 0x64, 0x19, 0xdb, 0xf5, 0x44, 0x7b, 0x2d, - 0x0c, 0xe7, 0x32, 0xd2, 0xdc, 0x05, 0x8f, 0x78, 0x76, 0x45, 0x85, 0xa4, 0x22, 0xfa, 0x2b, 0x16, 0x74, 0x9c, 0x02, - 0x14, 0x7b, 0x6d, 0x3c, 0x8d, 0xf3, 0xd3, 0x69, 0x9c, 0x4d, 0x68, 0x12, 0x5d, 0xcb, 0x02, 0xff, 0x9d, 0xf8, 0x63, - 0x96, 0xc5, 0x29, 0xfb, 0x85, 0x26, 0xbe, 0x91, 0x06, 0x27, 0x1e, 0xbd, 0x91, 0x34, 0x4b, 0x72, 0xef, 0xe5, 0xfb, - 0xd7, 0xaf, 0xcc, 0x3e, 0xd6, 0x04, 0x04, 0x5a, 0xe6, 0x8b, 0x39, 0x15, 0x01, 0xc2, 0x46, 0x40, 0xbc, 0x60, 0x8a, - 0x39, 0xbe, 0x8e, 0xe7, 0xba, 0x84, 0xe5, 0x1f, 0xe6, 0x49, 0x2c, 0xe9, 0xd7, 0x34, 0x4b, 0x58, 0x36, 0x21, 0x7b, - 0x6d, 0x5d, 0x3e, 0x8d, 0x4d, 0x45, 0x52, 0x16, 0x9d, 0xef, 0xbf, 0x48, 0xd5, 0xba, 0xcb, 0xc7, 0x45, 0x80, 0x8a, - 0x5c, 0xc6, 0x92, 0x8d, 0xbc, 0x38, 0x49, 0xbe, 0xcc, 0x98, 0x64, 0x0a, 0x40, 0x01, 0xdb, 0x03, 0x24, 0x4a, 0xb5, - 0xa8, 0xb0, 0x80, 0x07, 0x08, 0x07, 0x81, 0x11, 0x00, 0x53, 0x64, 0xf6, 0xeb, 0xe0, 0xa0, 0x62, 0xf7, 0x7d, 0x1a, - 0xe9, 0x4a, 0x32, 0x18, 0xa2, 0x70, 0xbe, 0xc8, 0x61, 0xa3, 0xed, 0x14, 0x20, 0x5d, 0xf8, 0x65, 0x4e, 0xc5, 0x15, - 0x4d, 0x4a, 0xe2, 0xc8, 0x03, 0xb4, 0x5c, 0x9b, 0xc3, 0x1c, 0x0b, 0x49, 0x06, 0xc3, 0xae, 0xcb, 0xb7, 0xa9, 0xa1, - 0x73, 0xc1, 0xe7, 0x54, 0x48, 0x46, 0xf3, 0x92, 0x95, 0x04, 0x20, 0x45, 0x4b, 0x76, 0x92, 0x13, 0xbb, 0xbe, 0x79, - 0xc0, 0x30, 0x45, 0x35, 0x86, 0x61, 0x05, 0xed, 0x8b, 0x2b, 0x25, 0x31, 0x72, 0xcc, 0x10, 0x96, 0x1a, 0xd2, 0x1c, - 0xa1, 0x02, 0x61, 0x69, 0xc1, 0xd5, 0xac, 0xc8, 0xcc, 0x76, 0x0b, 0xa2, 0x9a, 0x7c, 0xa7, 0x44, 0x35, 0x30, 0xb4, - 0x58, 0xd2, 0x83, 0x83, 0x80, 0x86, 0x25, 0x51, 0x90, 0xbd, 0xb6, 0xd9, 0x23, 0x07, 0x59, 0x3b, 0xc0, 0x86, 0x89, - 0x25, 0xa6, 0x08, 0xef, 0xd1, 0x30, 0xe3, 0x27, 0xa3, 0x11, 0xcd, 0x73, 0x2e, 0x0e, 0x0e, 0xf6, 0x54, 0xfb, 0x52, - 0x9b, 0x80, 0x3d, 0x7c, 0x7b, 0x9d, 0x55, 0x10, 0xa0, 0x4a, 0xc2, 0x1a, 0xb9, 0x20, 0x41, 0x4e, 0x29, 0x85, 0xc3, - 0xef, 0x5b, 0xc5, 0x23, 0xf2, 0xcf, 0xcf, 0xfd, 0x86, 0xc4, 0x06, 0x0d, 0x13, 0x6a, 0xa7, 0xbe, 0x7d, 0x4e, 0xb5, - 0x6a, 0xa5, 0x14, 0x8f, 0x0d, 0xcc, 0xe8, 0xf3, 0x13, 0x26, 0x74, 0xcc, 0x32, 0x67, 0xd9, 0x35, 0x90, 0xb0, 0xc4, - 0x39, 0x2a, 0x9c, 0x0d, 0xdd, 0x3a, 0xb4, 0xd2, 0x69, 0xf4, 0xce, 0x2d, 0x27, 0x4a, 0x8f, 0x70, 0xb6, 0x71, 0x40, - 0x87, 0x05, 0x56, 0xa8, 0xb7, 0xab, 0xc9, 0x14, 0xa0, 0x03, 0x39, 0xec, 0x9a, 0x7a, 0x92, 0x6b, 0xcc, 0x09, 0xfa, - 0xf3, 0x82, 0xe6, 0x52, 0xd3, 0x71, 0x20, 0x71, 0x86, 0x19, 0x2a, 0xe0, 0xb8, 0x8d, 0xd9, 0x64, 0x21, 0x40, 0xdd, - 0x81, 0xa3, 0x48, 0xb3, 0xc5, 0x8c, 0xda, 0xa7, 0x6d, 0xb0, 0xbd, 0x9d, 0x83, 0x40, 0xcc, 0x81, 0xa6, 0xef, 0x26, - 0x27, 0x80, 0x55, 0xa2, 0xd5, 0xea, 0x3b, 0x3b, 0x48, 0xb5, 0x95, 0xa5, 0x8a, 0xb6, 0xb6, 0x27, 0x7f, 0x47, 0x46, - 0x1e, 0xef, 0xb5, 0x35, 0xf4, 0x7f, 0x1f, 0x92, 0xbd, 0x56, 0x49, 0xc1, 0x06, 0xa7, 0x1a, 0x18, 0x8d, 0xc2, 0xb7, - 0x7a, 0x20, 0xa4, 0xa4, 0x7b, 0x8d, 0x58, 0xc2, 0xe9, 0x06, 0x9d, 0x4e, 0xc9, 0x00, 0xf4, 0x8c, 0x70, 0x3a, 0xdc, - 0x45, 0x4c, 0x96, 0x1b, 0x04, 0x72, 0xb3, 0xae, 0x62, 0x1a, 0x57, 0x75, 0xa6, 0xb1, 0xb6, 0x08, 0x7f, 0x5e, 0x76, - 0xf1, 0x4b, 0x1a, 0x33, 0xc7, 0xbc, 0xaa, 0xc2, 0x4c, 0x01, 0x53, 0x2d, 0xc9, 0x19, 0xe2, 0x4d, 0x3c, 0xa3, 0x79, - 0x40, 0x11, 0xde, 0xd5, 0x40, 0x13, 0x27, 0x34, 0x19, 0x3a, 0x62, 0x33, 0x07, 0xb1, 0xc9, 0x90, 0xd6, 0xca, 0xea, - 0xc7, 0x2d, 0xc7, 0x74, 0x90, 0x0f, 0x2b, 0x65, 0xce, 0x59, 0xbc, 0x92, 0xc7, 0x86, 0xba, 0x2d, 0xfe, 0x74, 0x99, - 0x46, 0x9a, 0x52, 0x1a, 0x72, 0x84, 0xf7, 0x5a, 0xeb, 0xfb, 0x68, 0x5b, 0x55, 0x6b, 0x1c, 0x0c, 0x61, 0x1f, 0x94, - 0xb8, 0x08, 0x59, 0xae, 0xfe, 0xaf, 0x9d, 0x33, 0x40, 0xdb, 0x19, 0x90, 0x45, 0x38, 0x4e, 0x63, 0x19, 0xb4, 0x0f, - 0x5b, 0xa0, 0x89, 0x5e, 0x51, 0x90, 0x26, 0x08, 0x6d, 0x2e, 0x85, 0x86, 0x8b, 0x2c, 0x9f, 0xb2, 0xb1, 0x0c, 0x62, - 0xa9, 0x18, 0x0a, 0x4d, 0x73, 0xea, 0xc9, 0x9a, 0x3e, 0xac, 0x98, 0x4d, 0x0c, 0xa4, 0x56, 0x2a, 0x5f, 0xd4, 0x42, - 0xaa, 0x98, 0x16, 0xf0, 0x86, 0x4a, 0x97, 0xae, 0x78, 0x8c, 0x6d, 0xcd, 0x40, 0x5f, 0x6c, 0xf7, 0xf5, 0x88, 0x91, - 0x61, 0x05, 0xcc, 0x51, 0x59, 0x59, 0xe4, 0xf2, 0x07, 0x53, 0x28, 0x43, 0xc9, 0x5f, 0xf1, 0x6b, 0x2a, 0x4e, 0x63, - 0x00, 0x3e, 0xd2, 0xdd, 0x0b, 0x2d, 0x06, 0x14, 0xb7, 0x97, 0x5d, 0x4b, 0x2f, 0xe7, 0x6a, 0xe1, 0x5f, 0x0b, 0x3e, - 0x63, 0x39, 0x05, 0x4d, 0x4d, 0xe3, 0x3f, 0x83, 0x53, 0xa6, 0x8e, 0x23, 0x88, 0x1a, 0x5a, 0xd2, 0xd7, 0xc9, 0xab, - 0x3a, 0x7d, 0x9d, 0xef, 0xbf, 0x98, 0x58, 0xf6, 0x57, 0x3f, 0xc4, 0x08, 0x07, 0xc6, 0x9e, 0x70, 0xa4, 0x5c, 0x38, - 0x45, 0x46, 0xbc, 0xaf, 0x56, 0xd2, 0x31, 0xdb, 0x6a, 0xba, 0x22, 0xd5, 0xc7, 0x06, 0x15, 0x71, 0x92, 0x80, 0x56, - 0x27, 0x78, 0x9a, 0x3a, 0x82, 0x0a, 0xb3, 0x6e, 0x29, 0x9a, 0xce, 0xf7, 0x5f, 0x9c, 0xdd, 0x25, 0x9d, 0xa0, 0xde, - 0x15, 0x50, 0x16, 0xd0, 0x2c, 0xa1, 0x02, 0xcc, 0x48, 0x67, 0xb7, 0x8c, 0x8c, 0x3d, 0xe5, 0x59, 0x46, 0x47, 0x92, - 0x26, 0x60, 0xa5, 0x30, 0x22, 0xc3, 0x29, 0xcf, 0x65, 0x59, 0x58, 0x41, 0xcf, 0x1c, 0xe8, 0x59, 0x38, 0x8a, 0xd3, - 0x34, 0xd0, 0x16, 0xc9, 0x8c, 0x5f, 0xd1, 0x2d, 0x50, 0x77, 0x6b, 0x20, 0x97, 0xc3, 0x50, 0x67, 0x18, 0x1a, 0xe6, - 0xf3, 0x94, 0x8d, 0x68, 0x29, 0xb8, 0xce, 0x42, 0x96, 0x25, 0xf4, 0x06, 0xf8, 0x08, 0xea, 0xf5, 0x7a, 0x2d, 0xdc, - 0x46, 0x85, 0x46, 0xf8, 0x72, 0x03, 0xb1, 0x77, 0x88, 0x4c, 0x20, 0x32, 0xd2, 0x5b, 0x6e, 0xe3, 0x07, 0x14, 0x39, - 0x72, 0x92, 0x59, 0xcb, 0x4a, 0xf3, 0x66, 0x84, 0x13, 0x9a, 0x52, 0x49, 0x2d, 0x2f, 0x07, 0xfd, 0x59, 0x1f, 0xdd, - 0x77, 0x25, 0xfe, 0x4a, 0x72, 0xb2, 0xa7, 0xcc, 0xee, 0x79, 0x5e, 0x5a, 0xea, 0xd5, 0xf6, 0x54, 0xd8, 0xee, 0x4b, - 0xbd, 0x3d, 0xb1, 0x94, 0xf1, 0x68, 0xaa, 0x4d, 0xf4, 0x60, 0x63, 0x49, 0xd5, 0x18, 0x86, 0xaf, 0x97, 0x87, 0xe8, - 0x83, 0x05, 0x73, 0x1b, 0x0a, 0xce, 0x0c, 0x53, 0xa0, 0x60, 0xf5, 0xe9, 0x6d, 0x3b, 0x8d, 0xd3, 0xf4, 0x32, 0x1e, - 0x7d, 0xac, 0x53, 0x7f, 0x45, 0x06, 0x64, 0x9d, 0x1b, 0x3b, 0x55, 0x0e, 0xcb, 0x72, 0xd7, 0x6d, 0xb9, 0x74, 0xed, - 0xa0, 0x04, 0x7b, 0xad, 0x8a, 0xec, 0xeb, 0x1b, 0xbd, 0x93, 0xda, 0x15, 0x44, 0xcc, 0xac, 0x2c, 0x00, 0x2e, 0xf0, - 0x49, 0x8a, 0xb3, 0xfc, 0xc0, 0xd0, 0x1d, 0xd8, 0x1a, 0xc5, 0x1a, 0x20, 0x12, 0x2d, 0x8b, 0x84, 0xe5, 0xbb, 0x31, - 0xf0, 0x87, 0x40, 0xf9, 0xdc, 0x99, 0xe1, 0xbe, 0x80, 0x96, 0x3c, 0xce, 0xa8, 0xcc, 0x25, 0x64, 0x46, 0x9b, 0xb0, - 0x8c, 0xe6, 0x6f, 0xa0, 0xb9, 0x28, 0x7a, 0x7f, 0xab, 0xab, 0x40, 0x27, 0x03, 0x28, 0xf2, 0xae, 0xab, 0x4c, 0xd4, - 0x28, 0xc0, 0xf0, 0x54, 0xa6, 0x44, 0x6e, 0x56, 0x33, 0x1e, 0x8d, 0xba, 0xae, 0xed, 0x6f, 0xc3, 0x72, 0x39, 0x09, - 0x82, 0x20, 0x07, 0xfb, 0xcd, 0xea, 0xf5, 0xd5, 0x22, 0xf2, 0x8d, 0x45, 0xe4, 0xa1, 0x63, 0x64, 0xa1, 0x8a, 0x96, - 0x9d, 0xee, 0xd1, 0x5f, 0x91, 0xdb, 0x08, 0x94, 0xd5, 0x10, 0xf8, 0x33, 0x2a, 0xd9, 0x6d, 0x4a, 0x24, 0xe6, 0xc6, - 0xc0, 0x31, 0x94, 0x06, 0x0c, 0xa3, 0xea, 0x92, 0x21, 0x7d, 0x34, 0x6a, 0xc6, 0x6e, 0x86, 0x39, 0x5a, 0xd3, 0xec, - 0x8b, 0xc2, 0xe0, 0x88, 0x22, 0xb3, 0x37, 0x35, 0x95, 0xd8, 0xc1, 0x0a, 0xce, 0x88, 0x51, 0x83, 0xb5, 0xd6, 0xb3, - 0x8e, 0x9b, 0x72, 0x5c, 0x38, 0xa8, 0x15, 0x6a, 0x6a, 0xfa, 0xa4, 0x55, 0xac, 0x32, 0x84, 0xa7, 0x56, 0x23, 0xe5, - 0xd5, 0xba, 0x09, 0xf1, 0xad, 0x37, 0xc2, 0xef, 0x2f, 0x6b, 0x26, 0x61, 0xe4, 0x34, 0x2b, 0x22, 0x60, 0xa9, 0x7c, - 0x1b, 0xba, 0xb7, 0xd1, 0x4c, 0x6d, 0x1c, 0x07, 0xe1, 0xdc, 0x45, 0xb8, 0x83, 0xd9, 0x4c, 0x73, 0xae, 0x6c, 0x48, - 0xa6, 0xf5, 0xbe, 0x01, 0xc5, 0x5c, 0xef, 0xc3, 0x06, 0x12, 0xd7, 0x15, 0x4f, 0x45, 0x82, 0x60, 0xc0, 0xe6, 0xa0, - 0xdc, 0xb9, 0xf2, 0x21, 0x00, 0xd8, 0xd9, 0x6a, 0xb5, 0x41, 0x74, 0x5b, 0xf5, 0x4f, 0x14, 0x56, 0x46, 0xe1, 0x6a, - 0x75, 0x2d, 0x51, 0x60, 0x34, 0x5f, 0x4c, 0x51, 0xdf, 0x72, 0xdc, 0x93, 0x57, 0xd0, 0x4a, 0x29, 0xa2, 0x55, 0x49, - 0x69, 0x32, 0xd4, 0x69, 0xb6, 0xbe, 0x4f, 0xd2, 0x61, 0xdb, 0xa7, 0x1b, 0xdc, 0x4b, 0x15, 0x1a, 0x31, 0x5d, 0x2d, - 0xf9, 0xd4, 0x0c, 0xcd, 0x10, 0x42, 0x51, 0xae, 0xac, 0x98, 0xbd, 0x6d, 0x86, 0xe5, 0xc1, 0x41, 0xee, 0x0c, 0x74, - 0x5e, 0xb2, 0x89, 0x9f, 0x02, 0x10, 0xc9, 0xf9, 0x6d, 0xa6, 0x74, 0x97, 0x9f, 0xac, 0x10, 0xda, 0x30, 0x4b, 0x5b, - 0x5d, 0xb0, 0xc6, 0xe3, 0xeb, 0x98, 0x49, 0xaf, 0x1c, 0x45, 0x5b, 0xe3, 0x01, 0x45, 0x4b, 0xa3, 0x6a, 0x84, 0x82, - 0x82, 0xf2, 0x08, 0x3c, 0xc1, 0xaa, 0xd0, 0x9a, 0xee, 0x47, 0x53, 0x0a, 0x8e, 0x60, 0xab, 0x45, 0x94, 0x76, 0xe1, - 0x9e, 0x91, 0x22, 0x66, 0xe0, 0xed, 0xb0, 0x17, 0xeb, 0xdd, 0x6b, 0x76, 0xc0, 0x9c, 0x8a, 0x31, 0x17, 0x33, 0x5b, - 0x57, 0xac, 0x3d, 0x1b, 0xce, 0xc8, 0xc6, 0xc1, 0xd6, 0xb1, 0x8d, 0xfa, 0xdf, 0x5d, 0x33, 0xba, 0x2b, 0x73, 0xbd, - 0x26, 0x4a, 0x4b, 0xe9, 0xab, 0xfd, 0x81, 0x96, 0x32, 0x73, 0xd7, 0xbc, 0x37, 0xce, 0xd4, 0xae, 0x76, 0x98, 0xec, - 0xb5, 0xbb, 0xa5, 0xcd, 0x67, 0xa9, 0xa1, 0xab, 0x1d, 0x1b, 0x46, 0xa4, 0xf2, 0x45, 0x9a, 0x18, 0x60, 0x19, 0xc2, - 0xd4, 0xd0, 0xd1, 0x35, 0x4b, 0xd3, 0xaa, 0xf4, 0xd7, 0xf0, 0xf5, 0xdc, 0xf0, 0xf5, 0xcc, 0xf2, 0x75, 0xe0, 0x14, - 0xc0, 0xd7, 0xf5, 0x70, 0x55, 0xf7, 0x6c, 0xe3, 0x74, 0x66, 0x9a, 0xa3, 0xe7, 0xca, 0x8e, 0x86, 0xf9, 0x16, 0x16, - 0x02, 0x54, 0x6a, 0x5e, 0x1f, 0x03, 0xe3, 0x84, 0x01, 0x03, 0x50, 0xbb, 0x30, 0xa9, 0xeb, 0xa2, 0xf8, 0x18, 0x20, - 0x9c, 0x17, 0xb4, 0xa4, 0xec, 0x93, 0x17, 0xe0, 0xa4, 0x73, 0x96, 0x03, 0x42, 0x4c, 0x15, 0xff, 0x2a, 0x25, 0xca, - 0xae, 0x8e, 0x99, 0xd5, 0xe5, 0x76, 0x75, 0xc0, 0xe9, 0xab, 0xd5, 0x25, 0x77, 0xf3, 0x7a, 0xb5, 0x3c, 0x56, 0x2e, - 0xaf, 0xda, 0xef, 0xd5, 0x2a, 0x58, 0x2b, 0x01, 0xff, 0xbd, 0x31, 0x51, 0x44, 0x39, 0x3a, 0xf0, 0x00, 0x17, 0x33, - 0x50, 0x50, 0xe8, 0x45, 0x97, 0x22, 0xee, 0xd5, 0xa7, 0x1c, 0x3c, 0xca, 0x4d, 0xaf, 0xfb, 0x9f, 0xf2, 0xd9, 0x1c, - 0xb4, 0xb1, 0x35, 0x92, 0x9e, 0x50, 0x33, 0x61, 0x55, 0x5f, 0x6c, 0x29, 0xab, 0xf5, 0x51, 0xe7, 0xb1, 0x46, 0x4d, - 0xa5, 0xbd, 0xbc, 0xd7, 0x2a, 0x16, 0x65, 0x51, 0xc9, 0x38, 0xb6, 0x39, 0x55, 0x4e, 0xd7, 0x5d, 0x32, 0xb6, 0xe2, - 0x6d, 0xc0, 0x34, 0x1f, 0x66, 0xc0, 0xeb, 0x1c, 0xf6, 0x63, 0xc9, 0xdd, 0xdd, 0xff, 0xa2, 0x42, 0xce, 0xb2, 0x58, - 0x43, 0xdf, 0xb2, 0x28, 0x4e, 0xb4, 0x91, 0x8d, 0x4f, 0x76, 0x5b, 0xc3, 0x55, 0x9d, 0x31, 0x16, 0x07, 0x43, 0x7c, - 0xb2, 0xa9, 0x3a, 0x92, 0xe5, 0x8c, 0x27, 0x34, 0xf2, 0xf9, 0x9c, 0x66, 0x7e, 0x01, 0x5e, 0x55, 0xb3, 0xf7, 0x23, - 0x19, 0x2c, 0xdf, 0xd5, 0xdd, 0xab, 0xd1, 0x49, 0x01, 0xde, 0xaf, 0x2f, 0x36, 0x1d, 0xaf, 0xdf, 0x52, 0x91, 0x2b, - 0x45, 0xb4, 0xd4, 0x69, 0xbf, 0xa8, 0xc4, 0xd2, 0x17, 0xd1, 0xce, 0xf6, 0x95, 0x09, 0xe2, 0xb7, 0xc3, 0xc7, 0xe1, - 0x91, 0x8f, 0x94, 0x5b, 0xf8, 0x2b, 0x73, 0xe0, 0x9f, 0x5b, 0xb7, 0xf0, 0x0b, 0xf2, 0xbc, 0xee, 0x15, 0x4e, 0x24, - 0x79, 0xd1, 0x7f, 0x61, 0x2d, 0x66, 0x9e, 0xb2, 0xd1, 0x6d, 0xe0, 0xa7, 0x4c, 0x36, 0x21, 0xf4, 0xe6, 0xe3, 0xa5, - 0xae, 0x00, 0x97, 0xa2, 0x72, 0x67, 0x17, 0xd6, 0xd6, 0xc3, 0x52, 0x12, 0x7f, 0x3f, 0x65, 0x72, 0xdf, 0xc7, 0x33, - 0x72, 0x01, 0x3f, 0xf6, 0x97, 0xc1, 0xeb, 0x58, 0x4e, 0x43, 0x11, 0x67, 0x09, 0x9f, 0x05, 0xa8, 0xe1, 0xfb, 0x28, - 0xcc, 0x95, 0xbd, 0xf1, 0x39, 0x2a, 0xf6, 0x2f, 0xf0, 0x8d, 0x24, 0x7e, 0xdf, 0x6f, 0xcc, 0xf0, 0x1b, 0x49, 0x2e, - 0x8e, 0xf7, 0x97, 0x37, 0xb2, 0xe8, 0x5d, 0xe0, 0x9b, 0xd2, 0x63, 0x8f, 0xbf, 0x26, 0x01, 0x22, 0xbd, 0x1b, 0x03, - 0xcd, 0x29, 0x9f, 0x69, 0xcf, 0xbd, 0x8f, 0xf0, 0x07, 0x88, 0xab, 0x88, 0x8a, 0xdb, 0x98, 0xd0, 0xca, 0x1e, 0xf1, - 0xb9, 0x72, 0x11, 0xf8, 0x07, 0x07, 0x4e, 0x59, 0xa9, 0x2a, 0xe0, 0x13, 0x49, 0x6a, 0x06, 0x39, 0x7e, 0xaf, 0x22, - 0x34, 0x27, 0x32, 0x10, 0xc8, 0x0e, 0x13, 0x58, 0x3f, 0xb4, 0x39, 0x9a, 0x62, 0xa0, 0x3d, 0x0c, 0x21, 0x93, 0x54, - 0xc4, 0x92, 0x8b, 0x21, 0x72, 0xd5, 0x0f, 0xfc, 0x37, 0x72, 0x31, 0xf0, 0xfe, 0xd3, 0x3f, 0xfd, 0x38, 0xfe, 0x51, - 0x0c, 0x2f, 0xf0, 0x5b, 0x72, 0x78, 0x1c, 0xf4, 0xa3, 0x60, 0xaf, 0xd9, 0x5c, 0xfd, 0x78, 0x38, 0xf8, 0x47, 0xdc, - 0xfc, 0xe5, 0xa4, 0xf9, 0xc3, 0x10, 0xad, 0x82, 0x1f, 0x0f, 0xfb, 0x03, 0xf3, 0x34, 0xf8, 0x47, 0xef, 0xc7, 0x7c, - 0xf8, 0x67, 0x5d, 0xb8, 0x8f, 0xd0, 0xe1, 0x04, 0x2f, 0x24, 0x39, 0x6c, 0x36, 0x7b, 0x87, 0x13, 0x3c, 0x97, 0xe4, - 0x10, 0xfe, 0xbf, 0x24, 0xef, 0xe8, 0xe4, 0xc5, 0xcd, 0x3c, 0xb8, 0xe8, 0xad, 0xf6, 0x97, 0x7f, 0x2b, 0x60, 0xd4, - 0xc1, 0x3f, 0x7e, 0xfc, 0x31, 0xf7, 0x1f, 0xf4, 0xc8, 0xe1, 0xb0, 0x81, 0x02, 0x28, 0xfd, 0x33, 0x51, 0xff, 0x06, - 0xfd, 0x68, 0xf0, 0x0f, 0x03, 0x85, 0xff, 0xe0, 0xc7, 0x8b, 0xe3, 0x1e, 0x19, 0xae, 0x02, 0x7f, 0xf5, 0x00, 0xad, - 0x10, 0x5a, 0xed, 0xa3, 0x0b, 0xec, 0x4f, 0x7c, 0x84, 0x27, 0x92, 0x1c, 0x3e, 0x38, 0x9c, 0xe0, 0x2b, 0x49, 0x0e, - 0xfd, 0xc3, 0x09, 0x7e, 0x21, 0xc9, 0xe1, 0x3f, 0x82, 0x7e, 0xa4, 0x3d, 0x6c, 0x2b, 0xe5, 0xde, 0x58, 0x41, 0x70, - 0x23, 0x16, 0x34, 0x5e, 0x49, 0x26, 0x53, 0x8a, 0xf6, 0x0f, 0x19, 0x3e, 0x53, 0x68, 0x0a, 0x24, 0x38, 0x61, 0xc0, - 0xb6, 0x0b, 0x96, 0xe7, 0xb0, 0xd9, 0x40, 0x33, 0xfb, 0x91, 0xc0, 0xda, 0x0f, 0x90, 0x47, 0x12, 0x5f, 0xc5, 0xe9, - 0x82, 0xe6, 0x11, 0x2d, 0x10, 0x1e, 0x91, 0x33, 0x19, 0xb4, 0x11, 0x7e, 0x27, 0xe1, 0x47, 0x07, 0xe1, 0x33, 0x13, - 0xc0, 0x84, 0x83, 0xac, 0x89, 0x2a, 0xe3, 0x5a, 0x63, 0xf1, 0x11, 0x9e, 0x6f, 0xa9, 0x94, 0x53, 0xf0, 0x2e, 0x20, - 0x3c, 0xae, 0x85, 0x3b, 0xf1, 0x35, 0xb1, 0x24, 0xf1, 0x5e, 0x50, 0xfa, 0x5d, 0x9c, 0x7e, 0xa4, 0x22, 0xb8, 0xc1, - 0xed, 0xce, 0xe7, 0x58, 0xb9, 0xa0, 0xf7, 0xda, 0xa8, 0x5b, 0xc6, 0xaa, 0x4e, 0xa5, 0x8e, 0x11, 0x80, 0x90, 0xad, - 0xfb, 0x62, 0x60, 0xc7, 0xf7, 0xc4, 0x86, 0xc3, 0x4a, 0xc4, 0xd7, 0x3e, 0xaa, 0xc7, 0x45, 0x59, 0x76, 0x15, 0xa7, - 0x2c, 0xf1, 0x24, 0x9d, 0xcd, 0xd3, 0x58, 0x52, 0xcf, 0xac, 0xd7, 0x8b, 0x61, 0x20, 0xbf, 0x54, 0x19, 0x12, 0xc7, - 0xe0, 0x4c, 0x6c, 0xc0, 0x09, 0xce, 0x4a, 0x00, 0xd1, 0x29, 0xa3, 0x76, 0xbc, 0xae, 0x82, 0x5f, 0xeb, 0xf1, 0xbd, - 0x66, 0x1b, 0x1c, 0x61, 0x43, 0x25, 0x9e, 0x73, 0x9c, 0x11, 0x10, 0xa2, 0x9d, 0xbe, 0x7f, 0x9c, 0x5f, 0x4d, 0x7a, - 0x3e, 0xc4, 0x66, 0x38, 0x79, 0xab, 0xfc, 0x42, 0xd0, 0x60, 0x4a, 0x5a, 0xdd, 0xe9, 0x31, 0xed, 0x4e, 0x1b, 0x0d, - 0xab, 0x43, 0xa7, 0x44, 0x0c, 0xa6, 0xba, 0x7b, 0x8c, 0x13, 0xbc, 0x20, 0xcd, 0x36, 0x9e, 0x90, 0x96, 0xea, 0xd2, - 0x9d, 0x1c, 0xa7, 0x66, 0x9a, 0x83, 0x83, 0x80, 0x87, 0x69, 0x9c, 0xcb, 0x2f, 0xc1, 0xd8, 0x27, 0x13, 0x9c, 0x10, - 0x1e, 0xd2, 0x1b, 0x3a, 0x0a, 0x52, 0x84, 0x13, 0xc3, 0x69, 0x50, 0x17, 0x4d, 0x88, 0xd3, 0x0c, 0x8c, 0x08, 0xf2, - 0xb6, 0x9f, 0x0c, 0xda, 0x43, 0x42, 0x88, 0xbf, 0xd7, 0x6c, 0xfa, 0x7d, 0x4e, 0x16, 0x32, 0x82, 0x12, 0x47, 0x55, - 0x26, 0x73, 0x28, 0xea, 0x38, 0x45, 0xc1, 0x0b, 0x19, 0x4a, 0x9a, 0xcb, 0x00, 0x8a, 0xc1, 0xfc, 0xcf, 0x2d, 0x61, - 0xfb, 0xc7, 0x87, 0x7e, 0x03, 0x4a, 0x15, 0x71, 0x22, 0xcc, 0xc9, 0x25, 0x8a, 0x92, 0xc1, 0xd1, 0xd0, 0xe5, 0xff, - 0xaa, 0x10, 0x26, 0xbf, 0xec, 0x27, 0x83, 0x96, 0x9a, 0xbc, 0xe7, 0xf7, 0x03, 0x4e, 0x72, 0xad, 0xa0, 0xf5, 0xf3, - 0xe8, 0xad, 0x5a, 0x2a, 0x8a, 0x0c, 0x70, 0x66, 0xde, 0x05, 0x69, 0x76, 0xa2, 0x60, 0xe1, 0x2e, 0xa2, 0x09, 0x93, - 0x19, 0x2c, 0xe0, 0x98, 0x40, 0x7b, 0xcc, 0x09, 0xcc, 0x58, 0x75, 0xbb, 0x8c, 0xcc, 0xf3, 0x03, 0xff, 0x41, 0xff, - 0x4a, 0x46, 0x13, 0xa9, 0xa7, 0xbf, 0x92, 0xab, 0x15, 0xfc, 0x3f, 0x91, 0x7d, 0x4e, 0x2e, 0x55, 0xd1, 0xc2, 0x14, - 0xcd, 0xa1, 0xe8, 0x6d, 0x04, 0xa0, 0xe2, 0xbc, 0x54, 0xb2, 0xf4, 0x9e, 0x5c, 0x11, 0x05, 0xfb, 0xc1, 0x81, 0x18, - 0x4c, 0x1b, 0xed, 0x21, 0xf8, 0xf7, 0x85, 0xcc, 0xbf, 0x63, 0x72, 0x1a, 0xf8, 0x87, 0x3d, 0x1f, 0xf5, 0x7d, 0x0f, - 0xb6, 0xb6, 0x9b, 0x35, 0x88, 0xc6, 0x70, 0xda, 0x78, 0x23, 0xa3, 0x45, 0x8f, 0xb4, 0xfa, 0x01, 0x33, 0xfe, 0x3c, - 0x84, 0x53, 0xc3, 0x38, 0x5b, 0x78, 0x81, 0x1a, 0x52, 0x36, 0xec, 0xf3, 0x02, 0x35, 0x66, 0x8d, 0x2b, 0x14, 0xa5, - 0x8d, 0x59, 0x23, 0x58, 0x10, 0x42, 0x9a, 0x9d, 0xb2, 0x9b, 0x95, 0x7e, 0x53, 0x14, 0x5d, 0x59, 0x67, 0xe7, 0x40, - 0x1d, 0x87, 0xac, 0x11, 0x88, 0x01, 0x1d, 0xae, 0x56, 0xfe, 0x71, 0xbf, 0xe7, 0xa3, 0x46, 0x60, 0x09, 0xed, 0xd0, - 0x52, 0x1a, 0x42, 0x98, 0x0d, 0x0b, 0x13, 0x4a, 0x7a, 0x59, 0x0b, 0x1b, 0x2d, 0xab, 0xc3, 0xee, 0xf0, 0x00, 0x5a, - 0x94, 0x76, 0x8c, 0xd6, 0x57, 0xe7, 0xb0, 0x4c, 0x4b, 0xcc, 0x19, 0x69, 0x61, 0x4e, 0xac, 0xef, 0x7a, 0x4a, 0x64, - 0x45, 0xf0, 0x29, 0xa9, 0x9a, 0xe3, 0x41, 0x8c, 0x93, 0x21, 0x79, 0xad, 0xed, 0x91, 0xae, 0xf5, 0x8b, 0xd3, 0x94, - 0xbc, 0x5c, 0x8b, 0xde, 0xc6, 0x10, 0x5b, 0xb9, 0x0e, 0x47, 0x0b, 0x21, 0x68, 0x26, 0xdf, 0xf0, 0xc4, 0xa8, 0x69, - 0x34, 0x05, 0x4b, 0x09, 0xc2, 0xb2, 0x18, 0x74, 0xb4, 0x8e, 0x3d, 0x19, 0x8b, 0x8d, 0xea, 0x09, 0x59, 0x68, 0xf5, - 0x49, 0x05, 0x6b, 0xbb, 0x13, 0x63, 0x17, 0x07, 0x08, 0x2f, 0x4c, 0x14, 0x37, 0x08, 0xc3, 0x70, 0x12, 0x8e, 0xa0, - 0x1a, 0x26, 0xc8, 0x51, 0xa1, 0xce, 0x51, 0x90, 0x93, 0xeb, 0x30, 0xa3, 0x37, 0x6a, 0xd6, 0x00, 0x55, 0x92, 0xd9, - 0x1e, 0xaf, 0xe3, 0x69, 0x57, 0xb1, 0x9b, 0x3c, 0xcc, 0x78, 0x42, 0x01, 0x3d, 0x10, 0xb7, 0x37, 0x45, 0xd3, 0x38, - 0x77, 0xe3, 0x53, 0x15, 0x7c, 0x03, 0xd7, 0x79, 0x3d, 0x01, 0x8f, 0xaf, 0xd2, 0xb5, 0xca, 0xc6, 0xda, 0x0d, 0x8e, - 0x10, 0x1b, 0x07, 0x93, 0x10, 0xe2, 0x7a, 0x8a, 0x84, 0x24, 0x98, 0x72, 0x13, 0x97, 0xa8, 0x66, 0xe5, 0x98, 0x57, - 0x24, 0x19, 0xf0, 0x46, 0x43, 0x79, 0xa1, 0x17, 0x9a, 0x24, 0x26, 0x08, 0x5f, 0x95, 0x67, 0xcb, 0xb6, 0x7b, 0x2b, - 0x49, 0x7d, 0xaa, 0xe0, 0xaa, 0xee, 0xce, 0x6d, 0x48, 0x89, 0x94, 0xa7, 0x50, 0x06, 0x33, 0x84, 0x9f, 0x91, 0xc3, - 0x60, 0x10, 0xf6, 0xff, 0x32, 0x44, 0xfd, 0x20, 0xfc, 0x33, 0x3a, 0xd4, 0x9c, 0xe3, 0x0a, 0x75, 0x53, 0x3d, 0xc7, - 0x52, 0xc5, 0x2f, 0xdb, 0x58, 0x79, 0x12, 0xa3, 0x0c, 0x67, 0xf1, 0x8c, 0x46, 0xcf, 0xe0, 0x90, 0x5b, 0xc2, 0x79, - 0x2b, 0x31, 0x50, 0x52, 0xf4, 0xcc, 0xf0, 0x92, 0xd0, 0xef, 0xbf, 0x92, 0xe5, 0x53, 0xdf, 0xef, 0x3f, 0xaf, 0x9e, - 0xfe, 0xe2, 0xf7, 0x7f, 0x91, 0xd1, 0xcf, 0x85, 0xf1, 0x76, 0xd7, 0xe6, 0x78, 0x6c, 0xe7, 0x28, 0xf4, 0xd6, 0x38, - 0xb8, 0x5b, 0xa0, 0x4d, 0x47, 0xc7, 0x04, 0x15, 0x6c, 0x5c, 0x32, 0xa3, 0x3c, 0x94, 0xf1, 0x04, 0x90, 0xea, 0xec, - 0x41, 0xee, 0xc6, 0xf5, 0xab, 0x15, 0x03, 0xa9, 0x58, 0x7a, 0x05, 0x64, 0x4e, 0x7a, 0x2d, 0xb4, 0xac, 0xb5, 0x55, - 0x3a, 0x53, 0x3d, 0x8e, 0x5e, 0xf2, 0xe9, 0x2b, 0xd2, 0xea, 0x5e, 0x1d, 0x4f, 0xba, 0x57, 0x8d, 0x06, 0xca, 0x2d, - 0x69, 0x2d, 0x06, 0x57, 0x43, 0xfc, 0x35, 0x38, 0xf5, 0x5c, 0x5a, 0xc2, 0xb5, 0xe5, 0x75, 0xcc, 0xf2, 0x1a, 0x8d, - 0xac, 0x40, 0x5d, 0xa7, 0xeb, 0x44, 0x77, 0x2d, 0x0a, 0x8d, 0x93, 0x75, 0x52, 0x7b, 0x8a, 0x54, 0x09, 0x24, 0x43, - 0x11, 0x42, 0x6e, 0x24, 0xda, 0x3a, 0x2a, 0x8c, 0x09, 0xdd, 0xd5, 0x99, 0x05, 0xf6, 0xa9, 0xa5, 0x44, 0x00, 0x58, - 0x80, 0xae, 0xa5, 0x27, 0x78, 0x86, 0x17, 0x8d, 0xb6, 0x22, 0xf3, 0x66, 0xbb, 0x5b, 0x1f, 0xeb, 0x49, 0x35, 0x16, - 0x5e, 0x34, 0xc8, 0xac, 0xc4, 0x52, 0x91, 0x35, 0x1a, 0x45, 0x3d, 0xd8, 0x69, 0x4f, 0x6e, 0x2d, 0x00, 0x71, 0xb3, - 0x9e, 0x94, 0x61, 0x25, 0x6c, 0x25, 0x53, 0x59, 0xc8, 0xb2, 0x8c, 0x0a, 0x90, 0xa2, 0x44, 0x62, 0x56, 0x14, 0x95, - 0x64, 0x07, 0x31, 0x8a, 0x29, 0x11, 0xc0, 0x79, 0x94, 0xdd, 0x85, 0x33, 0xcc, 0xf1, 0x54, 0xf1, 0x0d, 0x42, 0xc8, - 0x99, 0x4d, 0x67, 0x91, 0x8a, 0x07, 0xa5, 0x84, 0x39, 0x32, 0x29, 0x27, 0x34, 0x3c, 0xdf, 0x3f, 0xe5, 0x77, 0xda, - 0x64, 0x03, 0x36, 0x8c, 0x54, 0xb3, 0xd4, 0x70, 0xae, 0x98, 0x7c, 0x08, 0x24, 0x2a, 0xa3, 0x23, 0xa1, 0x62, 0x80, - 0xcf, 0x99, 0xa0, 0x4a, 0x07, 0xdf, 0xb7, 0x76, 0x5f, 0x5a, 0x57, 0x20, 0x53, 0xd7, 0x7b, 0x03, 0x88, 0x8c, 0xc1, - 0xb9, 0x93, 0x91, 0x8d, 0x66, 0xe7, 0xfb, 0x27, 0x6f, 0xb7, 0xd9, 0xc0, 0xab, 0x95, 0xb1, 0x7e, 0x95, 0x6e, 0x83, - 0xe3, 0x0a, 0xd2, 0xd4, 0xfc, 0x88, 0x82, 0x54, 0xa9, 0x48, 0x71, 0x20, 0x80, 0x8a, 0xce, 0xf7, 0x4f, 0xde, 0x07, - 0x42, 0xf9, 0x96, 0x10, 0x76, 0x97, 0x1d, 0x70, 0x12, 0x4c, 0x09, 0x45, 0x7a, 0xed, 0x25, 0xeb, 0xe2, 0x8e, 0x00, - 0x8f, 0xa6, 0xaa, 0x12, 0x2c, 0x88, 0x01, 0x1b, 0x92, 0xd4, 0x60, 0x80, 0xa4, 0x08, 0xa7, 0x35, 0xbb, 0x8c, 0xc0, - 0x06, 0xa8, 0xb9, 0xce, 0x60, 0x27, 0x42, 0xad, 0xfa, 0x21, 0x9c, 0xaa, 0x59, 0x65, 0xa1, 0x85, 0xc7, 0xb3, 0x8d, - 0xac, 0xb4, 0xca, 0x1c, 0xfd, 0x16, 0x6c, 0x27, 0xfb, 0xf0, 0x86, 0x58, 0x4b, 0xc2, 0x14, 0x3c, 0xb7, 0xe9, 0x63, - 0xe7, 0xfb, 0x27, 0xaf, 0x4d, 0x06, 0xd9, 0x3c, 0xb6, 0xfc, 0x7e, 0xc3, 0xc4, 0x3c, 0x79, 0x1d, 0x56, 0xb5, 0xaa, - 0xf1, 0xf9, 0xfe, 0xc9, 0x87, 0x6d, 0xcd, 0xa0, 0xbc, 0x58, 0x54, 0x36, 0xbe, 0x82, 0x6f, 0x49, 0xd3, 0x68, 0x69, - 0x84, 0x43, 0xc4, 0x0a, 0xac, 0x04, 0x52, 0x94, 0x17, 0xa5, 0x6b, 0xe4, 0x39, 0xce, 0x88, 0x0a, 0x03, 0xd5, 0x77, - 0xcd, 0xa8, 0x79, 0x8c, 0x67, 0x67, 0x23, 0x3e, 0xa7, 0x3b, 0x62, 0x43, 0x37, 0x28, 0x64, 0x33, 0x48, 0x9d, 0x51, - 0xa0, 0x33, 0xbc, 0xd7, 0x42, 0xdd, 0xba, 0xf8, 0xca, 0x14, 0x91, 0xf2, 0x9a, 0x6c, 0xc1, 0x53, 0xd2, 0xc2, 0x29, - 0x69, 0xe1, 0x98, 0xe4, 0x83, 0x96, 0x16, 0x10, 0xdd, 0xb8, 0x1c, 0x57, 0x8b, 0x19, 0xc8, 0x0a, 0x33, 0xa7, 0x55, - 0x0b, 0xe0, 0xa4, 0x1b, 0x2b, 0xdf, 0xa3, 0x92, 0xe9, 0x89, 0x22, 0x8b, 0xf7, 0x01, 0xc7, 0x5c, 0x0d, 0x7c, 0xc6, - 0x2e, 0x53, 0x48, 0x2c, 0x81, 0x55, 0x61, 0x89, 0xa2, 0xb2, 0x69, 0xdb, 0x34, 0x8d, 0x43, 0xb5, 0x4f, 0x1c, 0xc7, - 0x21, 0x70, 0x6e, 0x1c, 0x9b, 0x3c, 0x9c, 0x7c, 0xb3, 0xcb, 0xe3, 0x83, 0x83, 0x40, 0x77, 0xfa, 0x52, 0x06, 0xdc, - 0xd6, 0x57, 0x91, 0xbb, 0x6f, 0x35, 0xaf, 0x48, 0x90, 0x82, 0xbf, 0xd1, 0x48, 0x87, 0x05, 0x84, 0xa1, 0x83, 0xb8, - 0x8e, 0x41, 0x0b, 0xbc, 0xd2, 0xf5, 0xea, 0xcb, 0x6f, 0x34, 0xca, 0x28, 0x6d, 0x1d, 0x5b, 0x37, 0x38, 0x2b, 0xae, - 0x82, 0x32, 0xf5, 0xa7, 0xb5, 0x91, 0x2f, 0x65, 0x41, 0x40, 0xcc, 0xa5, 0x59, 0x66, 0x17, 0xe3, 0x1c, 0x09, 0x06, - 0xed, 0xbe, 0x34, 0x59, 0x0b, 0x58, 0x65, 0x57, 0x99, 0x46, 0x96, 0x9d, 0x75, 0x50, 0x64, 0x1b, 0x41, 0x54, 0x0a, - 0x1a, 0x35, 0x0a, 0x43, 0xde, 0xef, 0x37, 0x73, 0x2e, 0x71, 0x8e, 0x8c, 0x93, 0x4b, 0x41, 0xa1, 0x90, 0xd5, 0x29, - 0x91, 0xf2, 0x92, 0xcc, 0x77, 0x93, 0xfc, 0x89, 0x43, 0xf2, 0xcf, 0x08, 0x75, 0xc8, 0x5f, 0xbb, 0x38, 0x42, 0x6e, - 0x9c, 0x0b, 0xb9, 0xad, 0x3a, 0x9d, 0x13, 0x70, 0xa2, 0xd5, 0x31, 0x5a, 0x0b, 0x2b, 0xee, 0x60, 0x28, 0xee, 0x09, - 0x51, 0x6e, 0x48, 0x6c, 0x63, 0xc0, 0x41, 0x15, 0x54, 0x83, 0xa9, 0xb7, 0xf9, 0xf4, 0x5c, 0x0e, 0x78, 0xf2, 0xe1, - 0xee, 0x78, 0xe8, 0xe9, 0x7c, 0xf3, 0xe4, 0x3a, 0xb9, 0x9f, 0xb0, 0x6a, 0xe7, 0xe0, 0xd6, 0x33, 0x41, 0x61, 0xfe, - 0x32, 0x8e, 0x5d, 0x67, 0x3e, 0x6b, 0x87, 0xd0, 0xca, 0x3f, 0x80, 0xb6, 0xdd, 0x56, 0x2d, 0xa8, 0x33, 0x2c, 0xf0, - 0x23, 0x9d, 0x81, 0x1a, 0x8b, 0x1d, 0xec, 0xe3, 0x44, 0x35, 0xa0, 0x59, 0xb2, 0xbd, 0xfa, 0x59, 0x61, 0xc8, 0x44, - 0x83, 0x86, 0x96, 0xc0, 0xff, 0x34, 0xc9, 0x03, 0xdd, 0x28, 0xb9, 0x00, 0x08, 0x9a, 0x2b, 0x3c, 0x55, 0x08, 0xf3, - 0xfd, 0xca, 0xfb, 0xfe, 0x72, 0x8f, 0x90, 0x79, 0xe5, 0x7d, 0x7c, 0x57, 0xa5, 0x5e, 0x01, 0x59, 0xa0, 0x08, 0xcc, - 0xc7, 0xb2, 0x40, 0x87, 0x2f, 0xcf, 0x6c, 0x73, 0x65, 0x42, 0x86, 0x95, 0xc6, 0xed, 0x84, 0x36, 0x95, 0x5b, 0x4e, - 0xd7, 0x5b, 0x34, 0xac, 0xd5, 0xee, 0x43, 0xed, 0x7b, 0xa9, 0x60, 0x84, 0xe7, 0xf7, 0xaa, 0xb5, 0x1d, 0xb7, 0xf8, - 0xb8, 0x9e, 0xbf, 0xb2, 0xb6, 0x29, 0x21, 0xcb, 0x72, 0x2a, 0xe4, 0x33, 0x3a, 0xe6, 0x02, 0x62, 0x16, 0x25, 0x4e, - 0x50, 0xb1, 0xef, 0xf8, 0xed, 0xd4, 0xfa, 0x9c, 0x40, 0xc1, 0xda, 0x02, 0xd5, 0xaf, 0x8f, 0x2a, 0x68, 0x7d, 0xbe, - 0xde, 0x6b, 0x7e, 0x70, 0xf0, 0xa1, 0x42, 0x93, 0x81, 0x52, 0x41, 0xe1, 0x30, 0x2d, 0xad, 0xd2, 0x98, 0x48, 0xee, - 0x7e, 0x50, 0x3a, 0x01, 0x2c, 0xc3, 0x70, 0x79, 0xcf, 0x4b, 0x22, 0x8b, 0xc9, 0x3a, 0x8b, 0x37, 0xce, 0x09, 0xe6, - 0x1a, 0x2e, 0xc0, 0xe1, 0xc1, 0xd4, 0xd6, 0xde, 0xa2, 0xbc, 0x4a, 0x86, 0x2d, 0x61, 0x38, 0x05, 0x64, 0x05, 0xca, - 0x0c, 0x71, 0x28, 0x70, 0xab, 0x59, 0x72, 0x0a, 0x7a, 0xe5, 0x14, 0xe7, 0xe1, 0x14, 0xd2, 0x5f, 0x6b, 0x47, 0x16, - 0x21, 0xac, 0x13, 0x73, 0x9c, 0x54, 0x82, 0x93, 0x97, 0xdb, 0x5c, 0xca, 0x96, 0xa8, 0xa9, 0x92, 0x3a, 0xaa, 0x05, - 0x2a, 0x3b, 0x84, 0x57, 0x01, 0x33, 0x8a, 0x9b, 0x8d, 0x9b, 0x01, 0x03, 0x7e, 0x26, 0x03, 0x1d, 0x8c, 0x02, 0x99, - 0xc1, 0xc3, 0x45, 0x50, 0x9b, 0xba, 0xcb, 0x55, 0x37, 0x6c, 0x10, 0x37, 0x75, 0xd1, 0xc4, 0x55, 0x5c, 0xef, 0xb4, - 0xe2, 0xa5, 0x63, 0x9d, 0x41, 0x2d, 0x2d, 0x17, 0xac, 0x12, 0x49, 0x9c, 0xe5, 0x8f, 0x75, 0x52, 0x74, 0xd9, 0x08, - 0x53, 0x05, 0xc6, 0x4b, 0xb5, 0x07, 0xb4, 0x00, 0xfa, 0x5a, 0x9e, 0x48, 0x67, 0x47, 0xad, 0x13, 0x5b, 0xcd, 0xe9, - 0x48, 0xfd, 0x77, 0x90, 0xea, 0xb2, 0x7e, 0xe6, 0x5f, 0x2a, 0x59, 0xc8, 0x70, 0x5e, 0x63, 0xec, 0x99, 0x62, 0xec, - 0x08, 0xf4, 0x34, 0x9b, 0xf8, 0xdd, 0x37, 0x19, 0x2f, 0xcc, 0x48, 0x39, 0x43, 0x62, 0x5f, 0x97, 0xd1, 0x72, 0xe7, - 0xf7, 0xda, 0x6e, 0x44, 0x8c, 0x40, 0x16, 0x10, 0x36, 0x9c, 0x3d, 0x43, 0x38, 0x6f, 0x34, 0xba, 0xf9, 0x31, 0xad, - 0x9c, 0x24, 0x15, 0x8c, 0x0c, 0x02, 0xba, 0x40, 0xf0, 0x35, 0x19, 0x0a, 0x21, 0x7f, 0x9b, 0x99, 0x9d, 0x83, 0xaf, - 0xfd, 0xe4, 0x5d, 0xe0, 0x72, 0x35, 0xb7, 0x6d, 0x19, 0x34, 0x85, 0xf5, 0x04, 0x55, 0xc0, 0xe5, 0xeb, 0xbb, 0x13, - 0x3c, 0x00, 0xee, 0xbd, 0x36, 0x86, 0x54, 0x34, 0xd4, 0x95, 0x9a, 0x25, 0x94, 0xa7, 0xaf, 0x8b, 0xaa, 0xac, 0x44, - 0x77, 0xb2, 0xae, 0xac, 0x8c, 0x59, 0x49, 0xf2, 0xa2, 0xc8, 0x69, 0x15, 0xde, 0x5f, 0x4b, 0xbf, 0x54, 0xc2, 0x65, - 0xd3, 0xdb, 0x7e, 0x3a, 0x27, 0x12, 0x3b, 0x84, 0xfa, 0xf5, 0xae, 0xd8, 0x47, 0x05, 0x26, 0x9c, 0x6b, 0x23, 0x14, - 0x7f, 0xde, 0x26, 0x14, 0x71, 0x66, 0x8e, 0xbc, 0x12, 0x88, 0xed, 0x7b, 0x08, 0x44, 0xe3, 0x66, 0xb7, 0x32, 0x11, - 0xd4, 0x91, 0x9a, 0x4c, 0xac, 0x6f, 0x29, 0xc9, 0x30, 0x33, 0xbb, 0xd1, 0xeb, 0xac, 0x56, 0x6c, 0xd0, 0x02, 0x37, - 0x92, 0xef, 0xc3, 0xcf, 0xb6, 0xfe, 0xe9, 0x70, 0x62, 0xed, 0x06, 0x0e, 0x58, 0x69, 0xb2, 0xa0, 0x10, 0x12, 0x9c, - 0x03, 0x95, 0x94, 0xa5, 0x68, 0xda, 0x50, 0x90, 0x21, 0x70, 0xc2, 0xca, 0x30, 0x13, 0x40, 0xac, 0x64, 0x85, 0x31, - 0x20, 0x83, 0xad, 0xb9, 0x7f, 0xd6, 0xbc, 0xfc, 0xb4, 0x26, 0x5a, 0x93, 0x2b, 0x5a, 0x7d, 0xa8, 0xe5, 0x1b, 0x18, - 0x08, 0x8c, 0x7e, 0xb8, 0xa7, 0x4c, 0xd0, 0x4a, 0x94, 0x23, 0x57, 0x0e, 0xe1, 0x16, 0x38, 0xd1, 0xf6, 0x3e, 0xe8, - 0x08, 0xef, 0x16, 0x69, 0x82, 0xb9, 0x43, 0xd7, 0x2f, 0x89, 0xac, 0xb1, 0x92, 0x29, 0x31, 0x96, 0x12, 0x8e, 0x15, - 0x99, 0x4a, 0x92, 0x0d, 0x5a, 0x43, 0x50, 0x40, 0xbb, 0xe9, 0x71, 0x56, 0x99, 0xc0, 0x69, 0xa3, 0x81, 0x62, 0x3b, - 0xeb, 0x74, 0xc0, 0x1a, 0xe9, 0x10, 0x53, 0x9c, 0x6a, 0xc3, 0xe4, 0xec, 0xe0, 0x20, 0x88, 0xab, 0x79, 0x07, 0xe9, - 0x10, 0x61, 0xbe, 0x5a, 0x05, 0x0a, 0xac, 0x18, 0xad, 0x56, 0xb1, 0x0b, 0x96, 0xaa, 0x86, 0x6e, 0xf3, 0xbe, 0x24, - 0x73, 0x25, 0x00, 0xe7, 0x00, 0x61, 0x83, 0x04, 0xb1, 0x71, 0xef, 0xc5, 0xe0, 0x8e, 0x6a, 0x64, 0x83, 0xb4, 0xd1, - 0x1e, 0x3a, 0x8c, 0x6b, 0x90, 0x0e, 0x49, 0x5c, 0xf0, 0x83, 0x83, 0xbd, 0xdc, 0x88, 0xc8, 0x9f, 0x40, 0x94, 0xfd, - 0xa4, 0x24, 0x8b, 0x1e, 0xd0, 0xdd, 0x8d, 0x75, 0x67, 0x40, 0x49, 0x51, 0x66, 0x5b, 0x6d, 0xbb, 0x5a, 0x16, 0x44, - 0xd9, 0x08, 0x9b, 0x60, 0x70, 0x1f, 0x2c, 0xfb, 0x92, 0xcc, 0x5f, 0xc9, 0x32, 0xc7, 0xfa, 0xe7, 0xad, 0x99, 0xd5, - 0x61, 0x18, 0xc6, 0x62, 0xa2, 0x62, 0x19, 0x36, 0x0c, 0xab, 0x88, 0xff, 0xc8, 0x80, 0xe9, 0x4c, 0x3c, 0x28, 0xe7, - 0x1a, 0x12, 0x0d, 0xbe, 0x55, 0x6d, 0xec, 0x5d, 0x92, 0x9f, 0xb6, 0x7a, 0x19, 0x34, 0x24, 0xcf, 0x7f, 0x2b, 0x24, - 0x0f, 0x0d, 0x24, 0x9a, 0x3c, 0xd6, 0x70, 0xb6, 0x03, 0x17, 0x3f, 0xc9, 0x35, 0x9c, 0xed, 0xc6, 0xad, 0xc5, 0xd4, - 0x2f, 0xbb, 0xe0, 0x73, 0x78, 0x83, 0x06, 0xb4, 0x2a, 0x70, 0xa0, 0x7c, 0xb4, 0xae, 0x7b, 0x69, 0x56, 0x0a, 0xc2, - 0x54, 0x92, 0x80, 0xd5, 0x0f, 0x40, 0xa5, 0x8d, 0x3a, 0x86, 0x2f, 0x8b, 0xe6, 0xc8, 0x71, 0x09, 0xd4, 0x53, 0x57, - 0x80, 0x9c, 0x8c, 0xb7, 0x7d, 0x7e, 0x70, 0x00, 0xb6, 0x01, 0x28, 0x71, 0xe1, 0x28, 0x9e, 0xcb, 0x85, 0x00, 0x55, - 0x2a, 0xb7, 0xbf, 0xa1, 0x18, 0x6e, 0x81, 0xa8, 0x32, 0xf8, 0x01, 0x05, 0xf3, 0x38, 0xcf, 0xd9, 0x95, 0x2e, 0x33, - 0xbf, 0x31, 0x27, 0x96, 0x94, 0x73, 0xad, 0x13, 0x66, 0xa8, 0x9b, 0x19, 0x3a, 0xad, 0xa3, 0xed, 0xc5, 0x15, 0xcd, - 0xe4, 0x2b, 0x96, 0x4b, 0x9a, 0xc1, 0xf2, 0x2b, 0x8a, 0x83, 0x15, 0xe5, 0x08, 0x0e, 0x6c, 0xad, 0x57, 0x9c, 0x24, - 0x77, 0x76, 0x91, 0x75, 0x1d, 0x68, 0x1a, 0x67, 0x49, 0xaa, 0x27, 0x71, 0xf3, 0x19, 0x6d, 0x0e, 0x67, 0xd9, 0xd2, - 0xcd, 0xa7, 0xa9, 0x94, 0x0d, 0xc5, 0xdd, 0x03, 0x46, 0xac, 0x24, 0xb0, 0xd2, 0xf3, 0x4e, 0xad, 0x05, 0x22, 0xde, - 0x3b, 0x36, 0xc1, 0x5d, 0x09, 0x96, 0x0e, 0x47, 0x0d, 0xeb, 0x70, 0x5a, 0xba, 0xf9, 0x72, 0xeb, 0x95, 0xb6, 0x6d, - 0xc2, 0x41, 0xd1, 0xc9, 0xe3, 0xdd, 0x96, 0xd5, 0x6b, 0x2b, 0x39, 0xac, 0xb4, 0x60, 0xf7, 0x65, 0xcc, 0x68, 0x69, - 0xc9, 0x0b, 0xd9, 0xa3, 0xb8, 0x2f, 0xc9, 0x73, 0xb8, 0x33, 0xf4, 0x52, 0xce, 0xd2, 0xb5, 0xab, 0x31, 0xdd, 0xfd, - 0x52, 0xfb, 0xdf, 0x97, 0xc1, 0x4b, 0xfc, 0x1e, 0x02, 0xbb, 0x5f, 0x55, 0xcd, 0x37, 0x03, 0xba, 0x5f, 0x55, 0x08, - 0xfa, 0x2a, 0xda, 0x68, 0xe7, 0x04, 0x72, 0x3b, 0xe1, 0xd3, 0xb0, 0xe5, 0x5b, 0x6d, 0xe9, 0x67, 0x1d, 0x46, 0xd2, - 0x99, 0x96, 0xea, 0x3c, 0xe0, 0x2a, 0x4f, 0x0d, 0xf2, 0xe5, 0xea, 0x16, 0x12, 0x35, 0x19, 0x86, 0x5a, 0x87, 0xdf, - 0xb5, 0x3d, 0x46, 0xc6, 0x64, 0xda, 0xce, 0xf8, 0x3a, 0x16, 0x72, 0x1f, 0x4e, 0x19, 0xdf, 0xb8, 0x87, 0x37, 0x25, - 0xe0, 0x41, 0xbb, 0xdf, 0x14, 0x8e, 0xb1, 0x9d, 0xeb, 0x7b, 0x40, 0xee, 0xf8, 0x84, 0x5b, 0xdd, 0xad, 0x6e, 0x65, - 0x7c, 0x0d, 0xf6, 0x3f, 0xc2, 0x53, 0x7b, 0x39, 0x8e, 0x1a, 0x0e, 0x4c, 0xa3, 0x65, 0x51, 0x3a, 0x05, 0xb8, 0x56, - 0xde, 0x04, 0xc2, 0xbc, 0x50, 0x01, 0xee, 0x1f, 0xf0, 0x37, 0x86, 0x25, 0x8e, 0x4b, 0x8e, 0x73, 0x72, 0x5f, 0x8e, - 0xa8, 0xc1, 0x2f, 0xe3, 0xf7, 0x40, 0xc7, 0x8a, 0x42, 0x0b, 0x4b, 0x45, 0xcf, 0xb9, 0x59, 0xc8, 0xce, 0xb4, 0x54, - 0x4c, 0xcb, 0x94, 0x1a, 0x35, 0xcd, 0x96, 0x3c, 0x4e, 0x6b, 0x65, 0xcb, 0xf2, 0x54, 0xd5, 0xe6, 0x45, 0x3b, 0xb0, - 0x58, 0x85, 0x16, 0x57, 0xab, 0xa0, 0x8e, 0x6a, 0xc2, 0x9c, 0x48, 0x06, 0xc2, 0xcc, 0xc9, 0xa8, 0xa8, 0x69, 0xd6, - 0xba, 0x4f, 0x80, 0xd6, 0x13, 0x8a, 0xac, 0x6e, 0x5e, 0x83, 0xc3, 0x75, 0x21, 0xe8, 0xee, 0xae, 0x4f, 0x01, 0xeb, - 0xd5, 0x95, 0x13, 0x39, 0x18, 0xfa, 0xb9, 0x4c, 0x95, 0xad, 0x72, 0x5a, 0xb7, 0xe0, 0x17, 0xdd, 0x91, 0x2c, 0x6b, - 0x50, 0xb7, 0x59, 0xef, 0x24, 0x1b, 0x3d, 0xe7, 0xbb, 0x92, 0x8d, 0x6a, 0xda, 0xee, 0x5e, 0x0b, 0xdd, 0x9d, 0x96, - 0xaa, 0xe7, 0xda, 0xde, 0xe4, 0x37, 0x4c, 0xd7, 0x06, 0xda, 0xd4, 0x68, 0xb6, 0x5c, 0xe5, 0xac, 0x28, 0xc6, 0xe5, - 0x65, 0x02, 0x95, 0xbb, 0x33, 0xd6, 0xf4, 0x6f, 0xac, 0x46, 0x75, 0x1d, 0x37, 0xf8, 0x81, 0x4c, 0x52, 0x7e, 0x19, - 0xa7, 0xef, 0x61, 0xbe, 0xaa, 0xf2, 0xe5, 0x6d, 0x22, 0x62, 0x49, 0x0d, 0x77, 0xa9, 0x60, 0xf8, 0xc1, 0x81, 0xe1, - 0x07, 0xcd, 0xa7, 0xab, 0xfe, 0x78, 0xf9, 0xaa, 0x1c, 0x20, 0x1a, 0x17, 0x96, 0x65, 0x9c, 0xcb, 0xed, 0x73, 0xac, - 0xb3, 0xb0, 0xf3, 0x92, 0x85, 0x9d, 0xcb, 0x60, 0x7d, 0xa8, 0x20, 0xf8, 0x66, 0xfb, 0x28, 0x9b, 0x9c, 0xed, 0x9b, - 0xea, 0xe0, 0x7f, 0x13, 0xdd, 0xd9, 0xc7, 0xe1, 0x72, 0x47, 0xe1, 0x91, 0x4a, 0x57, 0xd1, 0x20, 0xbf, 0x83, 0xb4, - 0x03, 0x49, 0x7a, 0xce, 0x9d, 0x83, 0x4a, 0x4e, 0xd9, 0x44, 0xa0, 0x60, 0xb4, 0xc8, 0x25, 0x9f, 0x99, 0x31, 0x73, - 0x73, 0xcd, 0x48, 0x55, 0x82, 0x2b, 0x5a, 0x45, 0xdb, 0xa3, 0xfa, 0x45, 0xae, 0xe5, 0x47, 0x96, 0x25, 0x51, 0x8e, - 0x8d, 0x14, 0xc9, 0xa3, 0xac, 0x20, 0x36, 0xd9, 0x78, 0xb3, 0x0e, 0x8f, 0x59, 0xc6, 0xf2, 0x29, 0x15, 0x01, 0x47, - 0xcb, 0x5d, 0x93, 0x71, 0x08, 0xc8, 0xe8, 0xc9, 0xf0, 0xb7, 0xd5, 0x85, 0xbf, 0x10, 0x46, 0x03, 0x3f, 0xd0, 0x8c, - 0xca, 0x29, 0x4f, 0x20, 0x31, 0x25, 0x4c, 0xca, 0x1b, 0x4d, 0x07, 0x07, 0x7b, 0x81, 0xaf, 0xdc, 0x12, 0x70, 0xf5, - 0xdb, 0xad, 0x41, 0xfd, 0x25, 0x5c, 0xcf, 0xa9, 0xa6, 0xa6, 0x68, 0x49, 0xd7, 0x6f, 0xb2, 0xc8, 0xf0, 0x23, 0xbd, - 0xc5, 0x02, 0x15, 0x45, 0xa4, 0xa1, 0xf6, 0xc7, 0x8c, 0xa6, 0x89, 0x8f, 0x3f, 0xd2, 0xdb, 0xa8, 0xbc, 0x2d, 0xae, - 0x2e, 0x37, 0xab, 0x0d, 0xf4, 0xf9, 0x75, 0xe6, 0xe3, 0x6a, 0x92, 0x68, 0x59, 0x60, 0x2e, 0xd8, 0x04, 0x88, 0xf3, - 0x6f, 0xf4, 0x36, 0xd2, 0xe3, 0x31, 0xe7, 0xb2, 0x1e, 0x5a, 0x5a, 0xd4, 0x87, 0x4e, 0xb1, 0xbb, 0x0d, 0xc6, 0xa0, - 0x18, 0xa8, 0xbe, 0x43, 0x52, 0x6b, 0x57, 0x99, 0x87, 0x08, 0x15, 0xf7, 0x5d, 0x0a, 0xfe, 0xc2, 0x15, 0x6d, 0xb2, - 0x96, 0xfa, 0xba, 0xd6, 0x89, 0x42, 0x87, 0x2a, 0xd7, 0xe3, 0x3c, 0x10, 0xf6, 0xd4, 0x99, 0x3b, 0x08, 0x8e, 0x23, - 0xec, 0x0b, 0x69, 0x06, 0x8d, 0xbe, 0xd5, 0x29, 0x21, 0x55, 0x24, 0xe9, 0x75, 0xd5, 0xcf, 0x3b, 0x0f, 0x00, 0xef, - 0x90, 0xd2, 0x12, 0xab, 0xeb, 0x98, 0x85, 0x4d, 0x17, 0xfd, 0x4e, 0x92, 0x60, 0x69, 0x97, 0x10, 0x09, 0x17, 0x8b, - 0xb2, 0x00, 0x2a, 0x34, 0xf4, 0xa5, 0x33, 0x00, 0xd9, 0x38, 0x60, 0x1b, 0x52, 0x33, 0x53, 0x52, 0x33, 0x74, 0x30, - 0xbe, 0x43, 0x4a, 0x52, 0x85, 0x0c, 0xa5, 0x44, 0x2a, 0xa1, 0x67, 0x36, 0xd7, 0x90, 0x90, 0xbb, 0xa1, 0xe5, 0xf5, - 0x39, 0xbd, 0xe7, 0x59, 0x0d, 0xac, 0x40, 0x8d, 0x83, 0x8a, 0x08, 0x96, 0x44, 0x75, 0x83, 0xc2, 0xba, 0x73, 0x84, - 0xcd, 0x6f, 0x0d, 0x78, 0x68, 0x97, 0x45, 0x2c, 0x4a, 0x82, 0x29, 0x5a, 0x8a, 0x60, 0x8a, 0x33, 0xc8, 0x47, 0xe4, - 0x45, 0x09, 0x3f, 0x75, 0x77, 0xa3, 0x96, 0xad, 0xbc, 0xfd, 0x8a, 0x1f, 0x28, 0xf3, 0x12, 0x72, 0x34, 0xb1, 0xb0, - 0x3c, 0x45, 0x04, 0xea, 0xae, 0x9d, 0xb3, 0x6d, 0x5f, 0x99, 0x14, 0x1d, 0x03, 0xd8, 0x77, 0x32, 0x58, 0x3a, 0xab, - 0x70, 0xef, 0x72, 0x9b, 0x2b, 0x7f, 0x26, 0xd8, 0x57, 0x25, 0x91, 0x06, 0x39, 0x59, 0x93, 0x38, 0x77, 0xe7, 0x5a, - 0xfe, 0xbc, 0xa0, 0xe2, 0xf6, 0x8c, 0x42, 0xae, 0x33, 0x87, 0xbb, 0xbe, 0xd5, 0x36, 0x54, 0x79, 0xea, 0xfd, 0x4c, - 0x29, 0x2b, 0x45, 0xfd, 0x12, 0xe0, 0xfa, 0x15, 0xc1, 0x42, 0x45, 0x1b, 0x1d, 0x47, 0x8c, 0x3e, 0x2d, 0x74, 0xe7, - 0xe5, 0x49, 0xda, 0x65, 0xe0, 0x5f, 0xab, 0x30, 0x6d, 0x82, 0x05, 0x98, 0xbb, 0x17, 0x52, 0x07, 0xf9, 0x70, 0xdd, - 0x2b, 0x03, 0x45, 0x10, 0xbe, 0xcb, 0x76, 0x2f, 0x75, 0x5b, 0xd6, 0xec, 0xee, 0xa5, 0xd6, 0x82, 0x7e, 0x2a, 0xe5, - 0x07, 0x9b, 0x79, 0xca, 0xcb, 0xcb, 0xac, 0x28, 0x50, 0x01, 0xe0, 0x7d, 0xdf, 0x0d, 0x82, 0xef, 0x4d, 0xd2, 0x60, - 0x08, 0xb1, 0xd8, 0xb3, 0x94, 0x5b, 0x26, 0x5e, 0xcd, 0xff, 0xfd, 0xc6, 0xfc, 0xdf, 0x3b, 0x57, 0x4e, 0xc1, 0x34, - 0x9a, 0x64, 0x34, 0xb1, 0xac, 0x13, 0x69, 0x02, 0x54, 0x7a, 0x5b, 0x2e, 0xc9, 0xc7, 0x8b, 0x08, 0x34, 0xae, 0xe5, - 0x98, 0x67, 0xb2, 0x39, 0x8e, 0x67, 0x2c, 0xbd, 0x8d, 0x16, 0xac, 0x39, 0xe3, 0x19, 0xcf, 0xe7, 0xf1, 0x88, 0xe2, - 0xfc, 0x36, 0x97, 0x74, 0xd6, 0x5c, 0x30, 0xfc, 0x92, 0xa6, 0x57, 0x54, 0xb2, 0x51, 0x8c, 0xfd, 0x13, 0xc1, 0xe2, - 0xd4, 0x7b, 0x13, 0x0b, 0xc1, 0xaf, 0x7d, 0xfc, 0x8e, 0x5f, 0x72, 0xc9, 0xf1, 0xdb, 0x9b, 0xdb, 0x09, 0xcd, 0xf0, - 0x87, 0xcb, 0x45, 0x26, 0x17, 0x38, 0x8f, 0xb3, 0xbc, 0x99, 0x53, 0xc1, 0xc6, 0xdd, 0x11, 0x4f, 0xb9, 0x68, 0x42, - 0xca, 0xf6, 0x8c, 0x46, 0x29, 0x9b, 0x4c, 0xa5, 0x97, 0xc4, 0xe2, 0x63, 0xb7, 0xd9, 0x9c, 0x0b, 0x36, 0x8b, 0xc5, - 0x6d, 0x53, 0xb5, 0x88, 0x3e, 0x6b, 0x1d, 0xc5, 0x9f, 0x8f, 0x1f, 0x76, 0xa5, 0x88, 0xb3, 0x9c, 0xc1, 0x36, 0x45, - 0x71, 0x9a, 0x7a, 0x47, 0x8f, 0x5a, 0xb3, 0x7c, 0x4f, 0x07, 0xf2, 0xe2, 0x4c, 0x16, 0x17, 0xf8, 0x23, 0xc0, 0x1d, - 0x5e, 0xca, 0x0c, 0x5f, 0x2e, 0xa4, 0xe4, 0xd9, 0x72, 0xb4, 0x10, 0x39, 0x17, 0xd1, 0x9c, 0xb3, 0x4c, 0x52, 0xd1, - 0xbd, 0xe4, 0x22, 0xa1, 0xa2, 0x29, 0xe2, 0x84, 0x2d, 0xf2, 0xe8, 0xe1, 0xfc, 0xa6, 0x0b, 0x9a, 0xc5, 0x44, 0xf0, - 0x45, 0x96, 0x98, 0xb9, 0x58, 0x36, 0xa5, 0x82, 0x49, 0xb7, 0x42, 0xbd, 0xc2, 0x24, 0x4a, 0x59, 0x46, 0x63, 0xd1, - 0x9c, 0x40, 0x67, 0x30, 0x8b, 0x5a, 0x09, 0x9d, 0x60, 0x31, 0xb9, 0x8c, 0x83, 0x76, 0xe7, 0x09, 0xb6, 0x7f, 0xc3, - 0x47, 0xc8, 0x6b, 0x6d, 0x2f, 0x6e, 0xb7, 0x5a, 0x7f, 0x42, 0xdd, 0xb5, 0x59, 0x14, 0x40, 0x51, 0x7b, 0x7e, 0xe3, - 0xe5, 0x1c, 0x72, 0xda, 0xb6, 0xf5, 0xec, 0xce, 0xe3, 0x04, 0x12, 0x82, 0xa3, 0xce, 0xfc, 0xa6, 0x80, 0xd5, 0x45, - 0x3a, 0xc9, 0xd4, 0x2c, 0xd2, 0x3c, 0x2d, 0x7f, 0x2b, 0xc4, 0x4f, 0xb7, 0x43, 0xdc, 0xb1, 0x10, 0x57, 0x58, 0x6f, - 0x26, 0x0b, 0xa1, 0x62, 0xab, 0x51, 0x3b, 0xd7, 0x80, 0x4c, 0xf9, 0x15, 0x15, 0x16, 0x0e, 0xf5, 0xf0, 0x9b, 0xc1, - 0xe8, 0x6c, 0x07, 0xe3, 0xe9, 0xa7, 0xc0, 0x10, 0x59, 0xb2, 0xac, 0xef, 0x6b, 0x5b, 0xd0, 0x59, 0x77, 0x4a, 0x81, - 0x9e, 0xa2, 0x0e, 0xfc, 0xbe, 0x66, 0x89, 0x9c, 0xea, 0x9f, 0x8a, 0x9c, 0xaf, 0x75, 0xdd, 0xa3, 0x56, 0x4b, 0x3f, - 0xe7, 0xec, 0x17, 0x1a, 0xb5, 0x43, 0x68, 0x50, 0x5c, 0xe0, 0xbf, 0x95, 0x97, 0x79, 0xeb, 0xdc, 0x13, 0xff, 0xe0, - 0xde, 0xf2, 0x75, 0x92, 0x14, 0xab, 0x1b, 0xd1, 0x58, 0x58, 0x59, 0xa9, 0x85, 0x0f, 0xb8, 0xed, 0xd4, 0x79, 0x22, - 0xac, 0x57, 0xde, 0xe2, 0x64, 0xfd, 0x1f, 0x74, 0xde, 0x45, 0x04, 0x91, 0x0e, 0x27, 0xd9, 0x90, 0x77, 0xb3, 0x1e, - 0x69, 0x75, 0xb3, 0x66, 0x13, 0x05, 0x9c, 0x88, 0x41, 0x66, 0xd2, 0xf3, 0x02, 0xd6, 0xe7, 0xca, 0xd8, 0xce, 0x51, - 0xc4, 0xe1, 0xaa, 0xe9, 0x6a, 0x55, 0x85, 0x01, 0x98, 0xba, 0xae, 0xf1, 0x37, 0x69, 0x1a, 0xe0, 0xdc, 0xe1, 0xe4, - 0x99, 0x7d, 0xb1, 0x8b, 0xb0, 0xbc, 0x22, 0xe5, 0x23, 0x85, 0xb9, 0x70, 0x1e, 0xcb, 0x29, 0x78, 0x29, 0x4a, 0xf1, - 0x53, 0x25, 0x31, 0xf9, 0x87, 0x3e, 0xea, 0x8b, 0x32, 0xc3, 0x0d, 0x32, 0xf9, 0x44, 0x01, 0xa3, 0x7c, 0x23, 0x09, - 0x8c, 0x88, 0x7f, 0x21, 0xda, 0xa6, 0xb3, 0x16, 0xdd, 0xf8, 0xbe, 0x16, 0x1d, 0xcd, 0x24, 0x53, 0xb9, 0xdb, 0x36, - 0xe2, 0x30, 0x8d, 0xf3, 0xf3, 0x91, 0xbe, 0x2b, 0x99, 0x57, 0x37, 0x03, 0x62, 0x05, 0xbd, 0x36, 0xd2, 0xa8, 0x50, - 0xf6, 0xe8, 0xf7, 0x72, 0xa7, 0x7d, 0x22, 0xee, 0xb2, 0x4f, 0xca, 0x85, 0xe7, 0x7c, 0x21, 0x46, 0x10, 0x8e, 0x34, - 0x52, 0x6f, 0xd3, 0x71, 0xe3, 0x2b, 0x15, 0xc3, 0xc7, 0xd2, 0xc9, 0x04, 0x95, 0x98, 0xb9, 0x2f, 0x95, 0xa0, 0x2a, - 0xe4, 0xa5, 0xef, 0x6b, 0x18, 0x11, 0x67, 0x97, 0x04, 0x32, 0x3b, 0x51, 0x49, 0x8d, 0x41, 0x46, 0x7a, 0x59, 0xb8, - 0xc8, 0xd8, 0xcf, 0x0b, 0x7a, 0xce, 0x40, 0xd7, 0x64, 0x21, 0x4b, 0x54, 0xac, 0x09, 0x64, 0x5f, 0xb3, 0x0d, 0xc1, - 0x0b, 0x96, 0xe8, 0x8d, 0xc9, 0x54, 0xa5, 0xc9, 0x6d, 0xf2, 0x9b, 0x3e, 0xf8, 0x8b, 0x41, 0x3b, 0x60, 0x38, 0xe1, - 0xb3, 0x98, 0x65, 0x91, 0x72, 0xf9, 0x96, 0x83, 0x45, 0xd0, 0x1a, 0xb3, 0x24, 0xca, 0xcc, 0xf6, 0xb4, 0x51, 0xf8, - 0x13, 0x67, 0x99, 0xea, 0x5a, 0x74, 0xb9, 0x42, 0xa8, 0x46, 0x1f, 0xb1, 0x08, 0x3e, 0xd1, 0x72, 0x8d, 0x23, 0xec, - 0x56, 0x97, 0xd7, 0xce, 0x6b, 0x3b, 0xd0, 0x5a, 0xdb, 0x28, 0x6d, 0x04, 0xf0, 0xf5, 0xd2, 0x9c, 0x0b, 0x19, 0x04, - 0x53, 0x9c, 0x22, 0xd2, 0x9b, 0x2a, 0x67, 0xd7, 0x71, 0xaa, 0xfe, 0xeb, 0x37, 0xdb, 0x51, 0xbb, 0x34, 0xdf, 0x6b, - 0xb7, 0x81, 0x75, 0x72, 0x94, 0xb9, 0x51, 0xaa, 0x96, 0x51, 0xfe, 0xd6, 0x4b, 0xad, 0x9e, 0xcb, 0xe5, 0x62, 0x73, - 0xdc, 0xb4, 0xa8, 0x0a, 0x6a, 0x40, 0xa8, 0x60, 0xd1, 0x8e, 0xa9, 0x50, 0x51, 0xad, 0xbb, 0x54, 0x25, 0x2f, 0xb4, - 0x88, 0x3e, 0xdf, 0x5f, 0x0a, 0x33, 0x63, 0x71, 0xc1, 0xac, 0x93, 0xa9, 0x4e, 0x72, 0x85, 0xc1, 0x88, 0xa3, 0x87, - 0x6e, 0x6b, 0xa6, 0x61, 0xb9, 0x25, 0x62, 0x2b, 0xdd, 0x86, 0xfa, 0x91, 0x0a, 0x52, 0x85, 0xbb, 0x36, 0x06, 0x80, - 0x5c, 0xbd, 0x6d, 0x80, 0x81, 0xd9, 0x9a, 0x4b, 0xbb, 0x04, 0xd0, 0xc6, 0xc6, 0x14, 0x2e, 0xd2, 0x5c, 0xec, 0x2f, - 0xbf, 0x91, 0xc5, 0xa1, 0xd3, 0x54, 0xfd, 0x66, 0x09, 0xfc, 0x0f, 0x12, 0x70, 0xa9, 0x95, 0xd2, 0xc8, 0xff, 0xfa, - 0xed, 0xd9, 0x7b, 0x1f, 0x5f, 0xf2, 0xe4, 0x36, 0xf2, 0xa5, 0x58, 0x50, 0xbf, 0x40, 0xa1, 0x9c, 0xd2, 0xac, 0x7c, - 0x19, 0x0f, 0x4f, 0x69, 0x98, 0xf2, 0x89, 0xbe, 0x94, 0xb9, 0x6e, 0x24, 0x8f, 0x2e, 0x8e, 0xd5, 0x4b, 0xa6, 0x7a, - 0xc7, 0x52, 0xbf, 0xde, 0x4b, 0x0a, 0xf8, 0xd9, 0x83, 0x10, 0xca, 0xf1, 0xa1, 0x9c, 0xaa, 0x87, 0x33, 0x38, 0x30, - 0xea, 0x69, 0x7f, 0xb9, 0x41, 0x4c, 0x7d, 0x18, 0x62, 0xda, 0xd3, 0x4b, 0xc8, 0x55, 0xab, 0x8b, 0x68, 0x74, 0x71, - 0x51, 0x1c, 0x1f, 0xc2, 0x58, 0x87, 0x76, 0x5c, 0x80, 0xd0, 0xf6, 0x2f, 0x09, 0x0c, 0x5e, 0x36, 0x24, 0x48, 0x0f, - 0x86, 0x80, 0x79, 0x93, 0x1e, 0x2c, 0x12, 0x08, 0x0c, 0x7a, 0x27, 0x65, 0x89, 0x3a, 0xb1, 0xba, 0x68, 0x17, 0x04, - 0xba, 0x61, 0x45, 0xf7, 0xda, 0x9b, 0x5a, 0xed, 0xaf, 0x05, 0x29, 0x71, 0xa1, 0xbb, 0x40, 0xf0, 0xbf, 0x82, 0xec, - 0xf8, 0x50, 0xe3, 0xe1, 0xc2, 0x7d, 0xb5, 0x89, 0x7e, 0xed, 0x40, 0x89, 0xad, 0x41, 0x2e, 0xf1, 0x47, 0x89, 0x3f, - 0x5e, 0xa8, 0xa6, 0x56, 0x18, 0x81, 0x96, 0x04, 0x42, 0xbb, 0x65, 0xb5, 0x8e, 0x11, 0x4f, 0xd3, 0x78, 0x9e, 0xd3, - 0xc8, 0xfe, 0x30, 0x72, 0x09, 0xc4, 0xdb, 0xa6, 0x22, 0x60, 0xd2, 0x6b, 0x4e, 0x41, 0x5d, 0xd8, 0xd4, 0x52, 0xae, - 0x62, 0x11, 0x34, 0x9b, 0xa3, 0xe6, 0xe5, 0x04, 0x15, 0x72, 0xba, 0x74, 0xa5, 0xda, 0xe3, 0x56, 0xab, 0x0b, 0xb9, - 0x90, 0xcd, 0x38, 0x65, 0x93, 0x2c, 0x4a, 0xe9, 0x58, 0x16, 0x12, 0x6e, 0xa9, 0x2d, 0xad, 0x1a, 0x11, 0x76, 0x1e, - 0x09, 0x3a, 0xf3, 0x42, 0xf8, 0xf7, 0xee, 0x89, 0x0b, 0x99, 0x44, 0x99, 0x9c, 0x36, 0x55, 0xd6, 0x2d, 0xdc, 0x19, - 0x90, 0xd3, 0xda, 0xf3, 0xd2, 0x99, 0x68, 0x44, 0x41, 0xc5, 0x2a, 0xa4, 0xf0, 0xe4, 0x14, 0x4b, 0xe1, 0xb6, 0xcb, - 0xd0, 0x72, 0x63, 0x05, 0x9b, 0x92, 0xfe, 0x08, 0x15, 0xb9, 0x52, 0x8c, 0x37, 0x1b, 0x5b, 0x75, 0xa9, 0xfe, 0xb4, - 0x81, 0x3e, 0x47, 0xb1, 0x2b, 0xb4, 0x63, 0x79, 0xa9, 0x7b, 0xdc, 0x07, 0x99, 0x35, 0x95, 0x13, 0xbb, 0x3d, 0x50, - 0xc1, 0xb2, 0xf9, 0x42, 0x0e, 0x94, 0x53, 0x5b, 0xc0, 0x05, 0x89, 0x21, 0x76, 0x4a, 0x00, 0x07, 0xc3, 0xa5, 0x06, - 0x66, 0x14, 0xa7, 0xa3, 0x00, 0x20, 0xf2, 0x9a, 0xde, 0x53, 0x41, 0x67, 0xa8, 0x3b, 0x63, 0x59, 0x53, 0xd7, 0x3d, - 0x72, 0xd4, 0x92, 0xf0, 0x09, 0x3c, 0x15, 0xa1, 0x1a, 0x0d, 0xab, 0xdc, 0xd5, 0x2d, 0xb8, 0xbc, 0x18, 0x16, 0x45, - 0x57, 0xc8, 0x60, 0xf0, 0x3a, 0x40, 0x43, 0xfc, 0x8b, 0xf3, 0x72, 0x16, 0xdf, 0x1e, 0x15, 0x1f, 0x77, 0xd0, 0x8e, - 0x26, 0xee, 0x59, 0x50, 0xcd, 0x7e, 0x21, 0xd0, 0xf0, 0x5d, 0xe0, 0xd3, 0x7c, 0xde, 0xd4, 0xbc, 0xab, 0xa9, 0x48, - 0xd6, 0x87, 0xae, 0xc8, 0x78, 0x6a, 0xbf, 0x97, 0x4b, 0xc5, 0x96, 0xcc, 0x25, 0x0d, 0xed, 0x4c, 0x18, 0x96, 0x97, - 0x7a, 0xcc, 0xb3, 0x7b, 0x8d, 0x07, 0xd5, 0xf8, 0xc9, 0xc5, 0x49, 0x9d, 0xc7, 0x01, 0x5f, 0x2a, 0x5f, 0x60, 0x17, - 0xa7, 0x29, 0x4c, 0x78, 0x61, 0xd5, 0x17, 0xf7, 0xa5, 0x1f, 0x03, 0x39, 0x0c, 0x50, 0x61, 0xce, 0xe9, 0x33, 0xa5, - 0x52, 0x3a, 0x6f, 0xcd, 0xdb, 0x93, 0x36, 0x58, 0xa4, 0xa5, 0x2f, 0x83, 0x70, 0x77, 0x2d, 0x2f, 0xba, 0x5b, 0xf1, - 0x2e, 0xad, 0x90, 0x7a, 0x6a, 0x41, 0xc4, 0x17, 0x59, 0xe2, 0x7b, 0x7f, 0x19, 0xa5, 0x6c, 0xf4, 0x91, 0xf8, 0xfb, - 0xcb, 0x00, 0x6d, 0x5e, 0x7b, 0x54, 0x5c, 0xc1, 0x32, 0x6c, 0x54, 0x77, 0xa4, 0x67, 0xa1, 0xc3, 0x8b, 0xf5, 0x5b, - 0x71, 0xfc, 0xde, 0xfe, 0x12, 0x18, 0x8f, 0x9e, 0xa7, 0x77, 0x51, 0x9c, 0x57, 0xef, 0xba, 0xaa, 0xa0, 0x00, 0x34, - 0xeb, 0x72, 0x4f, 0x11, 0x15, 0xf1, 0x3f, 0x49, 0x69, 0xbe, 0xa7, 0x99, 0x1a, 0xc0, 0x29, 0x0d, 0x7f, 0xf3, 0xbd, - 0xbf, 0x94, 0x65, 0xb4, 0xf4, 0x68, 0xa8, 0x94, 0x0c, 0xe2, 0xc3, 0x5c, 0x60, 0xc6, 0x86, 0x09, 0x95, 0x31, 0x4b, - 0x75, 0x97, 0xae, 0x35, 0xc0, 0xd7, 0x56, 0xb4, 0x5a, 0xe5, 0xf5, 0xb5, 0xb0, 0x3a, 0x06, 0xd5, 0xca, 0x8e, 0x0f, - 0x2b, 0xb8, 0xd5, 0xca, 0xd4, 0x99, 0x74, 0x43, 0x83, 0xd5, 0x0a, 0x75, 0x9d, 0xf7, 0x97, 0x91, 0xba, 0x36, 0x04, - 0x00, 0x72, 0x03, 0x20, 0x04, 0xad, 0xf5, 0xb5, 0x98, 0x20, 0x25, 0x3c, 0x94, 0xb1, 0x98, 0x50, 0xb9, 0x86, 0xd8, - 0x54, 0xe7, 0xa8, 0x76, 0x6d, 0x80, 0x7a, 0x03, 0xda, 0xb8, 0x0e, 0xed, 0x05, 0x20, 0xbd, 0xbf, 0xbf, 0x64, 0x05, - 0xd9, 0x5f, 0xd2, 0x6c, 0xc4, 0x13, 0xfa, 0xe1, 0xdd, 0x97, 0x70, 0xc9, 0x91, 0x67, 0x60, 0x58, 0x4c, 0x11, 0x08, - 0x4e, 0xb5, 0x39, 0x5a, 0x84, 0x70, 0x25, 0x42, 0x34, 0x27, 0xf0, 0xd4, 0x5c, 0x0a, 0xc4, 0xc2, 0xf7, 0xfa, 0x1a, - 0x72, 0x9a, 0x68, 0x98, 0x49, 0xa6, 0x7a, 0xf1, 0xe2, 0xf8, 0x50, 0xb7, 0xd6, 0x22, 0x40, 0x37, 0x02, 0x24, 0xa8, - 0x73, 0x5a, 0xe1, 0x00, 0xf2, 0x9a, 0x5d, 0x3c, 0x24, 0xec, 0xaa, 0x24, 0x36, 0x75, 0x81, 0xaa, 0x77, 0x9c, 0xc6, - 0x97, 0x34, 0xed, 0xed, 0x2f, 0xb3, 0xd5, 0xaa, 0x55, 0x1c, 0x1f, 0xea, 0x47, 0xef, 0x58, 0xf1, 0x0d, 0xfd, 0xc2, - 0x4b, 0xb5, 0xc5, 0x70, 0x2b, 0x11, 0xb2, 0x3d, 0x6d, 0x9a, 0x53, 0x64, 0x06, 0x28, 0x7c, 0x4f, 0x25, 0x58, 0xa8, - 0x46, 0xa5, 0x42, 0x54, 0xf8, 0x1e, 0x4b, 0x36, 0xcb, 0x72, 0x49, 0xe7, 0x50, 0x3a, 0x5d, 0xad, 0xda, 0x85, 0xef, - 0xcd, 0x58, 0x06, 0x4f, 0xd9, 0x6a, 0xa5, 0x2e, 0xfc, 0xcd, 0x58, 0x16, 0xb4, 0x80, 0x6c, 0x7d, 0x6f, 0x16, 0xdf, - 0xa8, 0x05, 0xdb, 0x9a, 0xf8, 0x26, 0x68, 0x9b, 0xaa, 0xb0, 0xc4, 0x4f, 0x0e, 0x14, 0x57, 0xed, 0x68, 0x6a, 0x76, - 0x34, 0xc1, 0x0b, 0x7d, 0x95, 0x89, 0x04, 0x09, 0x49, 0xb7, 0xef, 0x68, 0x62, 0x77, 0x74, 0xb1, 0x63, 0x47, 0x17, - 0x77, 0xec, 0x68, 0x6c, 0x76, 0xcf, 0x2b, 0x71, 0xc7, 0x57, 0xab, 0x76, 0xab, 0xc2, 0xde, 0xf1, 0x61, 0xc2, 0xae, - 0x60, 0x37, 0x40, 0xcd, 0x93, 0x6c, 0x46, 0xb7, 0x13, 0x65, 0x1d, 0xc5, 0xf4, 0x57, 0x61, 0xb2, 0x44, 0x42, 0x56, - 0x47, 0x82, 0x4b, 0xd6, 0x65, 0xc8, 0xed, 0x8f, 0x24, 0x6c, 0x06, 0x68, 0xc8, 0x01, 0x0d, 0x53, 0x83, 0x86, 0x8b, - 0xe2, 0x1c, 0x24, 0x82, 0x5a, 0xcd, 0xbd, 0x28, 0x0f, 0x5a, 0xfb, 0xbd, 0xdd, 0x14, 0x06, 0xc1, 0xf0, 0x6b, 0x2e, - 0x12, 0x3f, 0xd2, 0x4d, 0x7f, 0x15, 0x62, 0x66, 0x2c, 0x33, 0xa9, 0x55, 0x3b, 0x29, 0xab, 0xaa, 0x77, 0xe9, 0xab, - 0xf3, 0xe8, 0x91, 0x6e, 0x31, 0x8f, 0xa5, 0xa4, 0x22, 0x33, 0x74, 0xea, 0xfb, 0x2e, 0xb6, 0xff, 0x7f, 0x91, 0xdc, - 0x16, 0x26, 0x12, 0x5b, 0x26, 0x62, 0xa9, 0xcd, 0x68, 0xe7, 0x86, 0xc1, 0x6b, 0x59, 0xb4, 0x57, 0xa9, 0xab, 0xb7, - 0xc8, 0xb5, 0x10, 0x74, 0x11, 0x18, 0x2c, 0x8b, 0x19, 0x4d, 0xce, 0x15, 0x37, 0xee, 0x8f, 0x2e, 0x8c, 0x76, 0xba, - 0x26, 0xdb, 0xaa, 0x0e, 0xd8, 0xff, 0x71, 0xd1, 0x79, 0xf2, 0xf0, 0xd4, 0xc7, 0x9a, 0xa1, 0xf3, 0xf1, 0xd8, 0x47, - 0x85, 0x77, 0xbf, 0x6e, 0xed, 0x87, 0x3f, 0x2e, 0xbe, 0x78, 0xd1, 0xfa, 0xa2, 0xec, 0x9c, 0xf9, 0xa8, 0xb8, 0x30, - 0xc1, 0x7c, 0x2b, 0x97, 0x1c, 0x78, 0xed, 0x8a, 0xc6, 0x71, 0xb6, 0x7b, 0x39, 0x03, 0x77, 0x39, 0xf9, 0x9c, 0xd2, - 0x04, 0xfb, 0x9e, 0x8f, 0x37, 0x4a, 0xcf, 0x53, 0x7a, 0x45, 0xed, 0x6b, 0x06, 0xb7, 0x4c, 0xb6, 0xa5, 0xc7, 0x88, - 0x2f, 0x32, 0x69, 0xb2, 0x1a, 0x0c, 0x5f, 0x75, 0x96, 0x74, 0xa1, 0xd6, 0xe0, 0x1a, 0x04, 0xb7, 0x5a, 0xa8, 0xd5, - 0x45, 0x55, 0x71, 0x81, 0x7d, 0x07, 0x80, 0x9d, 0x90, 0xf5, 0x77, 0x94, 0x47, 0x2d, 0xdc, 0xda, 0x05, 0x1b, 0x6e, - 0xa3, 0xc8, 0xf7, 0x87, 0x16, 0x4f, 0xca, 0x31, 0x59, 0x7b, 0x3b, 0xc4, 0x4e, 0x7c, 0x7d, 0x12, 0x03, 0x97, 0x02, - 0x06, 0xcb, 0x68, 0x9e, 0xef, 0x44, 0x40, 0xb9, 0x89, 0xd8, 0xaf, 0x5a, 0xfb, 0x3b, 0x46, 0xc1, 0x2d, 0x0c, 0x07, - 0x4c, 0x01, 0x5c, 0x86, 0x47, 0x4d, 0x2b, 0x3a, 0x1e, 0xd3, 0x51, 0xe9, 0xd7, 0x85, 0x40, 0xd7, 0x98, 0xa5, 0x12, - 0xe2, 0x3d, 0x2a, 0x10, 0xe3, 0xbf, 0xe1, 0x19, 0xf5, 0x91, 0x4d, 0xdd, 0x34, 0xf0, 0x1b, 0x61, 0xbf, 0x1d, 0x1e, - 0x3d, 0x62, 0x1d, 0x16, 0x33, 0xcb, 0x6a, 0x65, 0x7d, 0x3a, 0xb5, 0xf2, 0x3a, 0x22, 0xb9, 0x72, 0xda, 0xec, 0x3a, - 0x40, 0xf7, 0x3b, 0x26, 0xcb, 0xf6, 0x17, 0x8f, 0xda, 0xad, 0xc2, 0xc7, 0x3e, 0x0c, 0x77, 0xdf, 0x53, 0xa2, 0x7a, - 0x1d, 0x41, 0xaf, 0x45, 0xf6, 0x6b, 0xfa, 0x75, 0xda, 0x9f, 0xb7, 0x7d, 0xac, 0xdf, 0x1a, 0x80, 0x8a, 0x92, 0x19, - 0x8c, 0xc0, 0xd3, 0xf9, 0xbb, 0x97, 0x52, 0x1f, 0xfc, 0x7e, 0xf0, 0x3c, 0x6e, 0xb7, 0x7c, 0xec, 0xe7, 0x92, 0xcf, - 0x7f, 0xc5, 0x12, 0x8e, 0x7c, 0xec, 0x8f, 0x52, 0x9e, 0x53, 0x77, 0x0d, 0x5a, 0x77, 0xfd, 0xfd, 0x8b, 0xd0, 0x10, - 0xcd, 0x05, 0xcd, 0x73, 0xcf, 0x1d, 0xdf, 0x90, 0xd2, 0x27, 0x18, 0xe6, 0x56, 0x8a, 0xcb, 0xa9, 0x54, 0x78, 0xd1, - 0x17, 0xfa, 0x5d, 0xaa, 0xd2, 0x65, 0x1b, 0xc4, 0xa6, 0x44, 0x40, 0xc9, 0xd8, 0xb4, 0x2a, 0xf5, 0xc9, 0x99, 0xb7, - 0x1c, 0x3d, 0x3d, 0xb1, 0x0e, 0x00, 0x6f, 0x4e, 0x50, 0x2b, 0x99, 0xb1, 0xec, 0x7c, 0x4b, 0x69, 0x7c, 0xb3, 0xa5, - 0x14, 0xf4, 0xb3, 0x12, 0x3a, 0xf3, 0xae, 0x99, 0x4f, 0x63, 0xbd, 0xd2, 0x72, 0x5c, 0x10, 0x13, 0xe5, 0xa4, 0xfc, - 0x04, 0xa4, 0xce, 0x36, 0xa8, 0x11, 0x7e, 0xfb, 0x74, 0x50, 0xf2, 0xab, 0xa6, 0xa3, 0x37, 0x9f, 0xde, 0x73, 0x47, - 0xaf, 0xf9, 0x1d, 0xd8, 0x37, 0xf7, 0xc6, 0xd7, 0xd1, 0xbf, 0xa5, 0xd8, 0xa8, 0x1e, 0xe5, 0x16, 0x8c, 0x52, 0x36, - 0xab, 0x76, 0x61, 0x13, 0x4c, 0xa5, 0x74, 0x40, 0xf2, 0x90, 0x3b, 0x88, 0xd6, 0x3e, 0xce, 0xe1, 0x4a, 0x24, 0xbc, - 0x77, 0x62, 0x21, 0xe8, 0x79, 0xca, 0xaf, 0xd7, 0xdf, 0xa3, 0xb5, 0xbb, 0xf1, 0x94, 0x4d, 0xa6, 0xce, 0x3d, 0x27, - 0x4a, 0x4a, 0xd4, 0xdf, 0x39, 0x41, 0xf1, 0xaf, 0xff, 0x12, 0x86, 0xff, 0xfa, 0x2f, 0x9f, 0x6c, 0x0a, 0xc3, 0x17, - 0x17, 0x58, 0x56, 0xc3, 0xee, 0x26, 0xf0, 0xed, 0x33, 0xd5, 0x71, 0xbe, 0xbd, 0xcd, 0xc6, 0x26, 0x40, 0xfd, 0xc6, - 0x16, 0x6c, 0x14, 0xea, 0x03, 0xe0, 0xfd, 0x16, 0xc0, 0x60, 0x5d, 0x9f, 0x84, 0x0c, 0x1a, 0xfd, 0x2e, 0xd0, 0x2e, - 0x50, 0x74, 0xaf, 0x1d, 0xf9, 0xed, 0x18, 0xfe, 0xd4, 0x1a, 0x7e, 0x27, 0xf8, 0xc6, 0x1f, 0x30, 0xba, 0xb8, 0x28, - 0x13, 0xda, 0xdc, 0xae, 0x70, 0x61, 0xbe, 0xbf, 0x51, 0x62, 0x64, 0x7f, 0xd4, 0x42, 0x3d, 0x75, 0x1d, 0x8f, 0x8c, - 0x2e, 0x5e, 0xc3, 0x5b, 0x72, 0x8e, 0x2f, 0x85, 0x75, 0xa8, 0xde, 0xc1, 0x9f, 0x61, 0x88, 0xfa, 0xaa, 0xd4, 0xa0, - 0x1b, 0xcc, 0x19, 0x4a, 0x41, 0xe1, 0x07, 0x30, 0xf1, 0xe8, 0xc2, 0x58, 0x77, 0xa7, 0xda, 0xed, 0x11, 0xad, 0x93, - 0xb6, 0x71, 0x87, 0xd4, 0x90, 0x8e, 0xbd, 0xf7, 0x0a, 0x5f, 0xaa, 0x31, 0xad, 0xac, 0x69, 0xe5, 0x5a, 0x02, 0x55, - 0xfe, 0xa2, 0x50, 0x61, 0xf1, 0xbf, 0xee, 0x8a, 0xdc, 0xfd, 0xfd, 0xd3, 0x91, 0x3b, 0x7e, 0xaf, 0xc8, 0xdd, 0xdf, - 0xff, 0xf0, 0xc8, 0xdd, 0x5f, 0xdd, 0xc8, 0x1d, 0x6c, 0xe2, 0x97, 0xf7, 0x8a, 0xae, 0xd9, 0xc8, 0x07, 0xbf, 0xce, - 0x49, 0xdb, 0x68, 0xb2, 0x29, 0x9f, 0x40, 0x68, 0xed, 0xdf, 0x3f, 0x52, 0x96, 0xf2, 0x89, 0x1b, 0x27, 0x83, 0xb7, - 0xa4, 0x42, 0x60, 0xac, 0x6b, 0x23, 0x5a, 0x26, 0x36, 0xd5, 0x2a, 0x6f, 0x80, 0x34, 0x1f, 0xda, 0x37, 0x16, 0xf8, - 0x51, 0xf9, 0xd6, 0xa1, 0x16, 0xee, 0xd8, 0xe8, 0x55, 0xa4, 0x02, 0x5f, 0x65, 0xc7, 0x4e, 0xc3, 0x5e, 0x6f, 0x70, - 0x47, 0xe8, 0xda, 0xb7, 0xaa, 0xe8, 0xdb, 0xee, 0x4b, 0xff, 0xc7, 0x9b, 0xf6, 0xb3, 0x41, 0xbb, 0x7b, 0xd4, 0x9e, - 0xf9, 0x91, 0x0f, 0x52, 0x4a, 0x15, 0xb4, 0xba, 0x47, 0x47, 0x50, 0x70, 0xed, 0x14, 0x74, 0xa0, 0x80, 0x39, 0x05, - 0x8f, 0xa0, 0x60, 0xe4, 0x14, 0x3c, 0x86, 0x82, 0xc4, 0x29, 0x78, 0x02, 0x05, 0x57, 0x7e, 0x31, 0x60, 0x25, 0xb8, - 0x4f, 0xd0, 0x10, 0x6b, 0xe3, 0xc1, 0x96, 0x3d, 0xc1, 0x6d, 0x08, 0x99, 0xc5, 0x13, 0x95, 0xe9, 0x03, 0x0e, 0xb8, - 0x88, 0xe3, 0xeb, 0x29, 0xcd, 0x22, 0x08, 0x5a, 0x3e, 0x57, 0x32, 0x26, 0x94, 0xfc, 0x3d, 0x9b, 0x51, 0xfb, 0x7d, - 0x0a, 0x8b, 0x07, 0xcf, 0x47, 0x83, 0xd6, 0xb0, 0xe8, 0x96, 0x3b, 0xa7, 0x63, 0x6d, 0x26, 0xeb, 0x43, 0xef, 0x65, - 0x55, 0xa7, 0xa7, 0x6b, 0x96, 0x7b, 0xbe, 0x23, 0x66, 0xe3, 0x78, 0x03, 0xc6, 0x29, 0xbf, 0x6e, 0xde, 0xf8, 0xbd, - 0xed, 0x71, 0x1c, 0x80, 0xa8, 0x8c, 0xe3, 0xa8, 0x35, 0x95, 0x4f, 0xef, 0xe3, 0x49, 0xf9, 0xfb, 0x35, 0xcd, 0xf3, - 0x78, 0x62, 0x5a, 0xee, 0x8e, 0xdb, 0x28, 0x10, 0xdd, 0x98, 0x8d, 0x05, 0x02, 0x62, 0x2f, 0xb0, 0x59, 0x60, 0x4e, - 0x9b, 0x50, 0x0c, 0x60, 0xa7, 0x1e, 0xc5, 0x51, 0xd3, 0xd7, 0x8b, 0x64, 0x3c, 0xa9, 0x0a, 0x8e, 0xe7, 0x82, 0xaa, - 0x52, 0x8d, 0xe1, 0xe2, 0xf8, 0x10, 0x0a, 0x74, 0xf5, 0x8e, 0x68, 0x8d, 0xb5, 0xdd, 0x77, 0xc7, 0x6c, 0x3c, 0x1b, - 0xad, 0x71, 0xf3, 0x5b, 0xca, 0xe4, 0x96, 0xcd, 0x18, 0xc1, 0x67, 0xed, 0x11, 0xfc, 0x31, 0x11, 0x88, 0xcf, 0xc6, - 0xe3, 0xf1, 0x9d, 0xd1, 0x9b, 0xcf, 0x92, 0x31, 0xed, 0xd0, 0x47, 0x5d, 0xc8, 0x7d, 0x68, 0x1a, 0x9f, 0x7f, 0xbb, - 0x50, 0xb8, 0x5b, 0xde, 0xaf, 0x31, 0x84, 0x07, 0xe4, 0x74, 0x79, 0xff, 0x48, 0x4e, 0x31, 0x17, 0x74, 0x39, 0x8b, - 0xc5, 0x84, 0x65, 0x51, 0xab, 0x08, 0xaf, 0x4c, 0xe8, 0xe3, 0xb3, 0xa7, 0x4f, 0x9f, 0x16, 0x61, 0x62, 0x9f, 0x5a, - 0x49, 0x52, 0x84, 0xa3, 0x65, 0xb9, 0x8c, 0x56, 0x6b, 0x3c, 0x2e, 0x42, 0x66, 0x0b, 0x8e, 0x3a, 0xa3, 0xe4, 0xa8, - 0x53, 0x84, 0xd7, 0x4e, 0x8b, 0x22, 0xa4, 0xe6, 0x49, 0xd0, 0xa4, 0x96, 0x40, 0xf1, 0xa4, 0xd5, 0x2a, 0x42, 0x4d, - 0x68, 0x4b, 0xb0, 0x88, 0xf4, 0xcf, 0x28, 0x5e, 0x48, 0x0e, 0x2c, 0xb9, 0xcb, 0x65, 0x30, 0x38, 0x37, 0x2f, 0xa7, - 0xd0, 0x1f, 0x72, 0x28, 0xd0, 0x10, 0x7f, 0xe9, 0x06, 0x29, 0x80, 0x98, 0x55, 0x70, 0x82, 0xdb, 0x18, 0x46, 0xad, - 0x1a, 0x28, 0x4b, 0x55, 0x7f, 0x49, 0x78, 0x15, 0xbb, 0x00, 0xfe, 0x03, 0x2d, 0xf5, 0x5b, 0xd4, 0x24, 0xdd, 0xc1, - 0xf5, 0x29, 0xfd, 0x24, 0xd7, 0xbf, 0xbd, 0x0f, 0xd3, 0xa7, 0xf4, 0x8f, 0x66, 0xfa, 0xe6, 0x55, 0xa3, 0x9a, 0xe9, - 0x6b, 0xb6, 0x36, 0x93, 0xc4, 0x1f, 0x4d, 0xe9, 0xe8, 0xe3, 0x25, 0xbf, 0x69, 0xc2, 0x91, 0x10, 0xbe, 0xe2, 0xa7, - 0xfb, 0xbf, 0x35, 0xd9, 0xc2, 0x0e, 0xe6, 0x7c, 0x07, 0x42, 0x89, 0xcd, 0xb7, 0x19, 0xf1, 0xdf, 0x5a, 0xb3, 0x4a, - 0x97, 0x8c, 0xc7, 0xc4, 0x7f, 0x3b, 0x1e, 0xfb, 0xf6, 0x8a, 0x5d, 0x2c, 0xa9, 0x6a, 0xf5, 0xa6, 0x56, 0xa2, 0x5a, - 0x7d, 0xf1, 0x85, 0x5b, 0xe6, 0x16, 0x98, 0x10, 0x87, 0x1b, 0xce, 0x30, 0x35, 0x09, 0xcb, 0xe1, 0xa8, 0xc1, 0xe7, - 0x29, 0xea, 0xef, 0xf8, 0x13, 0xb5, 0xd7, 0x31, 0x97, 0x00, 0x6f, 0x79, 0x87, 0xf4, 0xfa, 0xfd, 0xf2, 0x09, 0xb5, - 0xe9, 0x6e, 0xcf, 0x6e, 0xbf, 0x4c, 0x82, 0x99, 0x44, 0x05, 0xcb, 0xdf, 0x66, 0x6b, 0x77, 0x47, 0x34, 0x8c, 0x84, - 0xb8, 0xcb, 0x2a, 0x24, 0x9f, 0x4c, 0x52, 0xf8, 0x40, 0xc8, 0xb2, 0xf6, 0xde, 0x51, 0xdd, 0xbd, 0x5f, 0x5b, 0x6f, - 0xe4, 0x76, 0x34, 0x6f, 0xe9, 0x54, 0xdf, 0x2b, 0xd2, 0x39, 0xc7, 0x57, 0xe6, 0xc3, 0x35, 0xca, 0x22, 0x5b, 0x1a, - 0xfe, 0xbf, 0xd4, 0x99, 0xaa, 0x12, 0xb2, 0x34, 0xf4, 0xc0, 0x49, 0x51, 0x98, 0x1c, 0xff, 0x84, 0xe5, 0x73, 0x78, - 0x1f, 0xa6, 0xee, 0x49, 0x3f, 0xc5, 0xc2, 0xf3, 0x6b, 0x27, 0x8e, 0x50, 0xdb, 0xae, 0xc2, 0x06, 0x12, 0xb4, 0xab, - 0x76, 0x26, 0x0b, 0xdf, 0x78, 0x7c, 0x2d, 0x12, 0x7d, 0x4f, 0xe3, 0x53, 0x47, 0x38, 0x9c, 0x15, 0x82, 0xab, 0xbf, - 0xdc, 0x10, 0x5b, 0x65, 0x0b, 0x0a, 0x37, 0x4e, 0xa6, 0x6a, 0x34, 0xb6, 0x94, 0x57, 0x3e, 0x9f, 0xc7, 0x99, 0x66, - 0xa3, 0xc4, 0xd7, 0xfc, 0x60, 0x7f, 0x59, 0xed, 0x7c, 0xe1, 0x5b, 0xb0, 0x35, 0xf1, 0xf6, 0x8e, 0x0f, 0xa1, 0x43, - 0xcf, 0xab, 0x81, 0x9e, 0x6d, 0x38, 0xf3, 0x3f, 0x11, 0x56, 0xbf, 0x08, 0xf3, 0x6b, 0x1c, 0xe6, 0xd7, 0xde, 0x9f, - 0x97, 0xcd, 0x6b, 0x7a, 0xf9, 0x91, 0xc9, 0xa6, 0x8c, 0xe7, 0x4d, 0x50, 0xf8, 0x95, 0x5f, 0xce, 0xb0, 0x67, 0x95, - 0x1c, 0xa6, 0x6f, 0xc8, 0x77, 0x17, 0x39, 0x44, 0xdf, 0x95, 0xda, 0x1a, 0x65, 0x3c, 0xa3, 0xdd, 0x7a, 0x12, 0xa0, - 0x1b, 0xcc, 0xb5, 0xd8, 0x1a, 0x2e, 0x39, 0x44, 0xeb, 0xe5, 0x6d, 0xd4, 0x32, 0x6c, 0xbd, 0x65, 0x23, 0xb5, 0xad, - 0xad, 0xed, 0x23, 0x83, 0xdc, 0x86, 0x92, 0x5e, 0x62, 0x33, 0x62, 0xbd, 0x2b, 0xe2, 0xfc, 0xa9, 0x94, 0x38, 0xf0, - 0xe6, 0xd9, 0xbf, 0x4e, 0x2e, 0xe1, 0x7a, 0xb1, 0x4a, 0x89, 0xbb, 0x0f, 0x64, 0x51, 0x3c, 0x96, 0x54, 0xe0, 0xfb, - 0xb4, 0xbc, 0x54, 0xb7, 0x57, 0x96, 0x20, 0x66, 0xa2, 0xf6, 0xd3, 0xf9, 0xcd, 0xfd, 0x87, 0xbf, 0x7b, 0xf9, 0x85, - 0xc1, 0x91, 0x7d, 0x9b, 0x8b, 0xef, 0x77, 0xe1, 0x20, 0xa4, 0xf1, 0x6d, 0xc4, 0x32, 0x25, 0xf3, 0x2e, 0xc1, 0x25, - 0xd7, 0x9d, 0x73, 0x93, 0xdb, 0x29, 0x68, 0xaa, 0x3e, 0xdd, 0x66, 0xb6, 0xe2, 0xe8, 0xf1, 0xfc, 0xc6, 0xee, 0x46, - 0x7b, 0x2d, 0x67, 0xf3, 0x0f, 0x4d, 0xcd, 0xdc, 0x9d, 0x0b, 0x5a, 0x4f, 0x2f, 0x7c, 0x34, 0xbf, 0xe9, 0x6a, 0x41, - 0xdb, 0x14, 0x1a, 0xaa, 0xd6, 0xfc, 0xc6, 0x4d, 0x4e, 0xad, 0x06, 0xf2, 0xc2, 0xa3, 0xdc, 0xa3, 0x71, 0x4e, 0xbb, - 0xf0, 0xbe, 0x6a, 0x36, 0x8a, 0x53, 0x23, 0xcc, 0x67, 0x2c, 0x49, 0x52, 0xda, 0xb5, 0xf2, 0xda, 0x6b, 0x3f, 0x86, - 0xdc, 0x4e, 0x77, 0xcb, 0xea, 0xbb, 0xe2, 0x20, 0xaf, 0xc4, 0x53, 0x7c, 0x99, 0xf3, 0x14, 0x3e, 0x16, 0xb1, 0x15, - 0x9d, 0x26, 0xe9, 0xb1, 0x55, 0x21, 0x4f, 0xfd, 0xae, 0xaf, 0xe5, 0x51, 0xeb, 0x4f, 0x5d, 0xb5, 0xe1, 0xad, 0xae, - 0xe4, 0xf3, 0xa8, 0x79, 0x54, 0x5f, 0x08, 0x54, 0x95, 0x4b, 0xc0, 0x5b, 0x96, 0x85, 0x41, 0x5a, 0x69, 0x3e, 0xed, - 0x85, 0x6d, 0x53, 0xa6, 0x06, 0x80, 0x17, 0x2b, 0x97, 0x45, 0x45, 0x7d, 0x31, 0xff, 0x3e, 0xa7, 0xe5, 0xf3, 0xed, - 0xa7, 0xe5, 0x73, 0x7b, 0x5a, 0xee, 0xa6, 0xd8, 0xcf, 0xc6, 0x6d, 0xf8, 0xd3, 0xad, 0x16, 0x14, 0xb5, 0xbc, 0xa3, - 0xf9, 0x8d, 0x07, 0x7a, 0x5a, 0xb3, 0x33, 0xbf, 0xd1, 0xa9, 0xb9, 0x10, 0x36, 0x68, 0x41, 0xb2, 0x2a, 0x6e, 0x79, - 0x50, 0x08, 0x7f, 0x5b, 0xb5, 0xaa, 0xf6, 0x43, 0xa8, 0x83, 0x5e, 0x8f, 0x36, 0xeb, 0x3a, 0x77, 0x1f, 0xda, 0x28, - 0xe3, 0x32, 0x88, 0x2c, 0x37, 0x46, 0xa1, 0x8c, 0x2f, 0x2f, 0x69, 0x12, 0x8d, 0xf9, 0x68, 0x91, 0xff, 0xb3, 0x81, - 0xdf, 0x20, 0xf1, 0xce, 0x23, 0xbd, 0x36, 0x8e, 0xed, 0xaa, 0x13, 0x85, 0xed, 0x08, 0xcb, 0x72, 0x9f, 0xa2, 0x7c, - 0x14, 0xa7, 0x34, 0xe8, 0x84, 0x0f, 0xb7, 0x1c, 0x82, 0xff, 0x90, 0xbd, 0xd9, 0xba, 0x98, 0xdf, 0x8b, 0x8c, 0x3b, - 0x91, 0xf0, 0xab, 0x70, 0xe0, 0xee, 0x61, 0xeb, 0xe9, 0x76, 0x70, 0x07, 0x76, 0xa6, 0xa1, 0x15, 0x0a, 0x46, 0xee, - 0x24, 0x74, 0x1c, 0x2f, 0x52, 0x79, 0xf7, 0xa8, 0xbb, 0x28, 0x63, 0x63, 0xd4, 0x3b, 0x18, 0x7a, 0xd5, 0xf6, 0x9e, - 0x5c, 0xfa, 0xb3, 0xcf, 0x1f, 0xc2, 0x1f, 0x9d, 0x67, 0x74, 0x5b, 0xe9, 0xea, 0xda, 0x56, 0x05, 0x5d, 0x7d, 0xbf, - 0xa6, 0x8c, 0x6b, 0x11, 0xae, 0xf4, 0xf1, 0xfb, 0xb6, 0x06, 0xad, 0xf2, 0x5e, 0xcd, 0x8d, 0x96, 0xf5, 0xab, 0x5a, - 0xff, 0xba, 0xc1, 0xef, 0xd9, 0x76, 0xa4, 0x35, 0xd7, 0x7a, 0x5b, 0xf3, 0xed, 0xba, 0x8d, 0xc6, 0x16, 0xe3, 0xaa, - 0xfd, 0x3e, 0xb9, 0x2d, 0x4d, 0x14, 0x1d, 0x08, 0x04, 0x2b, 0x65, 0x5f, 0x5b, 0x29, 0x8c, 0x92, 0x07, 0xf0, 0xe6, - 0x58, 0xef, 0x66, 0x96, 0x66, 0x39, 0xf1, 0xa7, 0x52, 0xce, 0x23, 0xfd, 0xb1, 0xd3, 0xeb, 0xa3, 0x90, 0x8b, 0xc9, - 0x61, 0xa7, 0xd5, 0x6a, 0xc1, 0x1b, 0x3f, 0x7d, 0xef, 0x8a, 0xd1, 0xeb, 0x67, 0xfc, 0x86, 0xf8, 0x4f, 0xbc, 0xa7, - 0xde, 0x93, 0x23, 0xef, 0xd1, 0x63, 0xdf, 0x53, 0xec, 0x9c, 0xf8, 0x4f, 0x8e, 0x7c, 0x4f, 0xb3, 0x73, 0xe2, 0x3f, - 0x7a, 0xec, 0xf7, 0x8e, 0x27, 0x56, 0x25, 0x83, 0x2b, 0x83, 0x5a, 0xdf, 0xc9, 0xa5, 0xe0, 0x1f, 0x69, 0xfd, 0xe0, - 0xea, 0x32, 0x93, 0x89, 0xd6, 0xb1, 0x8f, 0x70, 0x7a, 0x47, 0xf1, 0x3c, 0x52, 0x44, 0xe1, 0x16, 0x82, 0x5b, 0x46, - 0x97, 0xaa, 0x29, 0x40, 0xcd, 0xbc, 0xf4, 0x7b, 0xc7, 0x90, 0x35, 0xee, 0x25, 0xc4, 0x7f, 0xdd, 0x79, 0xe2, 0xb5, - 0x1f, 0x5f, 0x35, 0x1f, 0x8e, 0x5a, 0xcd, 0xb6, 0xd7, 0x6e, 0x76, 0xc2, 0x27, 0x5e, 0x47, 0xff, 0xeb, 0xb5, 0xbc, - 0x23, 0xaf, 0x1d, 0x3e, 0xf1, 0x8e, 0xbc, 0x4e, 0xf8, 0xe4, 0xea, 0xa1, 0x4e, 0x27, 0x88, 0xfd, 0xc3, 0xde, 0x31, - 0x7c, 0xb8, 0xf2, 0x86, 0xf8, 0x9f, 0xfb, 0xfa, 0xf3, 0xb0, 0xfe, 0x67, 0x6e, 0x69, 0xfb, 0xe9, 0xd6, 0xe2, 0xce, - 0x93, 0xad, 0xc5, 0x47, 0x8f, 0xb7, 0x16, 0x3f, 0x7c, 0x54, 0x2f, 0x3e, 0x9c, 0xe8, 0xaa, 0xf2, 0x94, 0x13, 0x7f, - 0x16, 0x4b, 0xc1, 0x6e, 0x82, 0xb6, 0xd7, 0xf2, 0x5a, 0x5e, 0x13, 0xfe, 0x7b, 0xd2, 0x41, 0x65, 0xaf, 0x4b, 0xe8, - 0x55, 0xae, 0xf2, 0xc9, 0x53, 0xaf, 0xfd, 0xf8, 0x65, 0xe7, 0xf1, 0x08, 0xda, 0xa9, 0x85, 0xb6, 0xbd, 0xf6, 0xd5, - 0xd1, 0xd3, 0x51, 0xcb, 0x83, 0x8e, 0x6d, 0xf8, 0x33, 0x7d, 0xd4, 0x19, 0xe9, 0x87, 0x16, 0xd4, 0x7f, 0xdb, 0x7e, - 0x92, 0xb7, 0x9a, 0x6d, 0xf8, 0xf3, 0x4b, 0xa9, 0x11, 0x83, 0x3e, 0xee, 0x8e, 0xfb, 0xb0, 0xe5, 0x1d, 0x3d, 0x9d, - 0x76, 0xc2, 0xcf, 0xaf, 0x9e, 0x84, 0x4f, 0xa7, 0xed, 0x27, 0xdf, 0xea, 0xa7, 0xb4, 0xd9, 0x09, 0x3f, 0x87, 0xbf, - 0xdf, 0x1e, 0xb5, 0xa6, 0xcd, 0x76, 0xf8, 0xf4, 0xea, 0x28, 0x3c, 0x4a, 0x9b, 0x8f, 0xc3, 0xa7, 0xf0, 0xb7, 0x1a, - 0x6e, 0xca, 0x67, 0xd4, 0xf7, 0x60, 0xbf, 0xd7, 0xcc, 0x2d, 0x77, 0x8e, 0xce, 0x43, 0xef, 0xd1, 0xc3, 0x97, 0x4f, - 0xaf, 0x9a, 0x0f, 0xa7, 0xed, 0xce, 0x55, 0x73, 0xe7, 0xcf, 0x6f, 0x01, 0xf1, 0x66, 0xe0, 0x98, 0xc2, 0xf5, 0x1d, - 0x8b, 0x38, 0xf5, 0xf6, 0xd9, 0x07, 0x38, 0xdf, 0x65, 0x5e, 0x8b, 0x4f, 0x9b, 0xd7, 0x19, 0xbd, 0x8f, 0x7d, 0x2d, - 0xfe, 0x70, 0xfb, 0x3a, 0xa7, 0x6b, 0x4e, 0xd5, 0x5b, 0xb9, 0x61, 0x46, 0xaf, 0xdb, 0x5e, 0xef, 0x64, 0x30, 0x60, - 0xf0, 0x95, 0xa3, 0xa2, 0x7b, 0x0b, 0x2f, 0xb8, 0x76, 0xbd, 0x0d, 0x1c, 0x0e, 0xf2, 0xad, 0xd4, 0x27, 0x99, 0xef, - 0x42, 0x48, 0xfa, 0x69, 0x84, 0x7c, 0x7b, 0x1f, 0x7c, 0xa4, 0x7f, 0x38, 0x3e, 0xb8, 0x8b, 0x8f, 0x9a, 0x9f, 0x57, - 0xd9, 0xb3, 0xca, 0x1e, 0x3d, 0x53, 0xcf, 0x01, 0xdc, 0xf0, 0x68, 0xf8, 0x87, 0x14, 0x8a, 0x72, 0x5f, 0xc7, 0x15, - 0xde, 0xfc, 0x1a, 0x97, 0xb4, 0xbe, 0xce, 0x45, 0x7c, 0x63, 0xfc, 0xcf, 0xe1, 0x4b, 0x06, 0xf6, 0xe1, 0x4a, 0x5f, - 0x30, 0x26, 0x7e, 0x27, 0x6c, 0x85, 0xad, 0xd2, 0x71, 0x00, 0x57, 0xf8, 0xc8, 0x92, 0xcb, 0x18, 0x3e, 0xa6, 0x99, - 0xf2, 0x89, 0xfa, 0xec, 0x26, 0xbc, 0xec, 0x5c, 0x7d, 0x00, 0x55, 0xbf, 0x67, 0x3e, 0xf2, 0x7d, 0x73, 0xf1, 0x1f, - 0xae, 0x88, 0x7d, 0x03, 0xd7, 0xe8, 0xac, 0xc7, 0x7a, 0x06, 0x36, 0xf5, 0x6b, 0x9a, 0xb0, 0x38, 0xf0, 0x83, 0xb9, - 0xa0, 0x63, 0x2a, 0xf2, 0x66, 0xed, 0x6e, 0x99, 0xba, 0x56, 0x86, 0x7c, 0xfb, 0xd9, 0x46, 0x01, 0x2f, 0xef, 0x25, - 0x03, 0xe3, 0xd5, 0xf2, 0x8d, 0x9a, 0xef, 0x17, 0xd8, 0x96, 0x08, 0xe0, 0xe8, 0x95, 0x6a, 0xe0, 0x6b, 0xdd, 0xa0, - 0x1d, 0x76, 0x1e, 0x21, 0xcd, 0x4b, 0xe0, 0xa5, 0xa8, 0xdf, 0x07, 0xcd, 0xa3, 0xd6, 0x9f, 0x90, 0xd3, 0xad, 0x1c, - 0x68, 0x68, 0x9c, 0x3a, 0xa2, 0xfa, 0xdc, 0x6d, 0xfd, 0xe2, 0x9f, 0xaf, 0x29, 0xe2, 0x33, 0xbd, 0x76, 0x78, 0xbd, - 0xaa, 0x89, 0x1f, 0xea, 0xeb, 0xeb, 0x63, 0x36, 0x09, 0xdc, 0x8f, 0x99, 0xea, 0x97, 0xae, 0xaa, 0x6f, 0x20, 0xa3, - 0xa2, 0x6a, 0x22, 0xd0, 0x52, 0xf9, 0xe2, 0x59, 0xe6, 0x89, 0xd5, 0x2a, 0x10, 0xe0, 0x88, 0x25, 0x0e, 0x4e, 0xe1, - 0x19, 0xd5, 0x90, 0x2c, 0x70, 0x09, 0x90, 0x42, 0x30, 0x11, 0xfa, 0xff, 0xaa, 0xd8, 0xfe, 0x30, 0xee, 0x95, 0x30, - 0x8d, 0xb3, 0x09, 0x50, 0x61, 0x9c, 0x4d, 0x36, 0x9c, 0x37, 0x3a, 0x9c, 0xb0, 0x56, 0x5a, 0x0d, 0x55, 0x39, 0x69, - 0xf2, 0x67, 0xb7, 0xef, 0xcd, 0xdb, 0x99, 0x7c, 0xf0, 0x81, 0x2a, 0xdf, 0x77, 0xf5, 0x26, 0xd9, 0x06, 0x79, 0xa0, - 0x3f, 0x0f, 0xae, 0xf2, 0xd1, 0x40, 0xfa, 0xc1, 0x95, 0x3e, 0xcf, 0xd8, 0x3c, 0xc4, 0xd7, 0xb2, 0x2f, 0xa1, 0x57, - 0x6c, 0x64, 0x44, 0x18, 0xf6, 0xcc, 0xb5, 0xe6, 0xa6, 0xda, 0x1a, 0xd2, 0xc6, 0xda, 0xea, 0x1f, 0xc5, 0x2a, 0xbf, - 0x98, 0x64, 0xdc, 0xef, 0x3d, 0x28, 0xbf, 0xcd, 0xb8, 0x6b, 0x13, 0xe0, 0x9b, 0xe5, 0x03, 0x41, 0xd3, 0x7f, 0x26, - 0x0f, 0xe0, 0xab, 0xe5, 0x0f, 0x86, 0xf0, 0xc1, 0xec, 0x50, 0x89, 0x82, 0x07, 0xd5, 0xc7, 0xcb, 0x81, 0x0f, 0x36, - 0x6e, 0x66, 0x29, 0xbe, 0xaf, 0xf8, 0x36, 0xa2, 0xba, 0xf3, 0xa8, 0x12, 0xd5, 0x9d, 0x47, 0xae, 0xf4, 0x6c, 0x7b, - 0xed, 0x4e, 0xf8, 0xc8, 0x11, 0x00, 0x57, 0x4d, 0xf8, 0xbf, 0x26, 0x02, 0x1e, 0x86, 0x8f, 0x4a, 0x19, 0xf0, 0xaa, - 0xdd, 0x09, 0x8f, 0xb4, 0xb8, 0xe9, 0x84, 0x8f, 0x7e, 0x50, 0x0c, 0x5a, 0x33, 0xe7, 0xfa, 0x81, 0xd8, 0x12, 0xaa, - 0xd1, 0x49, 0x75, 0x3e, 0x0e, 0xca, 0x2f, 0xc0, 0x99, 0xf3, 0x69, 0x5c, 0x42, 0xcf, 0x63, 0x01, 0x9f, 0xe1, 0xa8, - 0x9f, 0xdd, 0x5a, 0x1d, 0xae, 0xf1, 0x8b, 0x2d, 0x53, 0xc0, 0x09, 0xf7, 0xb1, 0x7b, 0x2f, 0x18, 0x2e, 0xd5, 0xaa, - 0x97, 0x16, 0xdb, 0x77, 0xb7, 0xed, 0x26, 0x6d, 0xdd, 0xd0, 0xbe, 0x1f, 0x4e, 0x31, 0x0b, 0xa6, 0x5e, 0x10, 0xaf, - 0x26, 0xf9, 0x32, 0x29, 0xd6, 0xe7, 0x87, 0xdc, 0x3e, 0xc1, 0x9d, 0xab, 0xd1, 0xb4, 0x4a, 0x3f, 0x4f, 0x18, 0x5c, - 0x66, 0x2f, 0x0a, 0x0b, 0x7a, 0xcd, 0x19, 0x58, 0x61, 0x49, 0xf1, 0x0b, 0x9a, 0xf7, 0x7d, 0x28, 0xf2, 0x23, 0x5f, - 0x39, 0x92, 0xfc, 0xf2, 0x53, 0x24, 0x25, 0x61, 0x57, 0x05, 0x58, 0x5d, 0x21, 0x81, 0x53, 0x0b, 0xf8, 0xf1, 0xd1, - 0xc1, 0xc1, 0xce, 0xf3, 0xa2, 0xb4, 0x31, 0x58, 0x6b, 0xf5, 0x09, 0x03, 0x97, 0x15, 0xf9, 0x2e, 0xa2, 0xcb, 0x71, - 0x15, 0x0a, 0x91, 0xc1, 0xd3, 0x25, 0x8d, 0x65, 0x18, 0x67, 0x3a, 0x45, 0xc1, 0x61, 0x58, 0xb8, 0x4d, 0x8f, 0x50, - 0xc1, 0x65, 0xec, 0x7c, 0xa3, 0xd4, 0x9c, 0x73, 0x2e, 0x63, 0x7b, 0xd1, 0x2f, 0x93, 0xb5, 0x4c, 0xf8, 0x69, 0xa7, - 0xf7, 0xf6, 0xfd, 0x89, 0xa7, 0x8f, 0xe7, 0xf1, 0xe1, 0xb4, 0xd3, 0x3b, 0x56, 0x96, 0xb9, 0xbe, 0x26, 0x44, 0xf4, - 0x35, 0x21, 0xcf, 0x5c, 0x19, 0x83, 0x78, 0x4d, 0x71, 0xa8, 0x97, 0xed, 0x7b, 0x34, 0x1b, 0x69, 0x9f, 0xe2, 0x6c, - 0x91, 0x4a, 0x06, 0x2f, 0xe0, 0x3d, 0x84, 0xae, 0x4d, 0xd8, 0xb0, 0x32, 0xcf, 0xd4, 0x6a, 0x38, 0x32, 0xb3, 0x1e, - 0xc8, 0x31, 0x4b, 0xa9, 0xcd, 0x2c, 0x35, 0x43, 0x95, 0x79, 0xcf, 0x9b, 0xad, 0xf3, 0xc5, 0xe5, 0x8c, 0xc9, 0x32, - 0x15, 0xf4, 0x83, 0xe9, 0x70, 0xac, 0xa6, 0xea, 0x5d, 0x14, 0xc6, 0x45, 0x6a, 0x3f, 0x36, 0xb2, 0xf6, 0x79, 0x77, - 0xbd, 0x7a, 0x23, 0x21, 0xe0, 0xbe, 0xcf, 0xf4, 0xa8, 0x57, 0x3a, 0x25, 0xdd, 0xba, 0xe2, 0xf8, 0x70, 0x7a, 0xd4, - 0xbb, 0x88, 0xe6, 0x66, 0xbc, 0x57, 0x7c, 0xe3, 0x53, 0xf1, 0x25, 0xc7, 0xec, 0xab, 0xc4, 0x76, 0x7d, 0x83, 0xd2, - 0x00, 0x3c, 0xe2, 0xa9, 0xdf, 0x3b, 0x36, 0xca, 0x80, 0xa7, 0x82, 0xae, 0xfe, 0xa3, 0x96, 0xcd, 0x95, 0x4f, 0xb9, - 0xd2, 0x96, 0x74, 0x17, 0x67, 0x92, 0x9a, 0x5f, 0x77, 0xda, 0xee, 0x1d, 0xc7, 0x46, 0xcd, 0x04, 0xe6, 0x91, 0x47, - 0x87, 0xd0, 0x19, 0x74, 0xb9, 0x90, 0xf1, 0xc3, 0x6b, 0x7a, 0xd9, 0x8c, 0xe7, 0xac, 0x72, 0xa2, 0x82, 0xd2, 0x51, - 0x4e, 0xc9, 0xab, 0x99, 0xe0, 0x67, 0xbc, 0xb6, 0x48, 0xc5, 0xc2, 0x0b, 0xe3, 0xa1, 0x55, 0xba, 0x3a, 0x8d, 0xa5, - 0xef, 0x69, 0x0e, 0x6f, 0x3d, 0xb9, 0x46, 0xf6, 0x16, 0x7e, 0xef, 0xdf, 0xfe, 0xc7, 0xff, 0x32, 0xce, 0xd9, 0xe3, - 0xc3, 0x69, 0xdb, 0x8e, 0xb5, 0x86, 0xe8, 0xe2, 0x18, 0xae, 0x97, 0x55, 0xd1, 0x44, 0x7a, 0xd3, 0x9c, 0x08, 0x96, - 0x34, 0xa7, 0x71, 0x3a, 0xf6, 0x7b, 0xbb, 0x11, 0xe4, 0xde, 0x2b, 0x31, 0x50, 0xd7, 0x8b, 0x80, 0x04, 0x7f, 0xd3, - 0xcd, 0x08, 0x9b, 0x60, 0xaf, 0x4e, 0xab, 0x7b, 0x4f, 0xa2, 0x3a, 0x50, 0xb5, 0xbb, 0x12, 0xc2, 0x7c, 0x93, 0xc8, - 0x30, 0x35, 0x51, 0xbb, 0x22, 0x51, 0xf8, 0x5e, 0x19, 0x0d, 0xf9, 0xbf, 0xff, 0xf3, 0xbf, 0xfc, 0x37, 0xfb, 0x08, - 0x41, 0x8e, 0x7f, 0xfb, 0xef, 0xff, 0xf9, 0xff, 0xfc, 0xef, 0xff, 0x0a, 0x69, 0xf5, 0x26, 0x10, 0xa2, 0xf8, 0x84, - 0x57, 0x45, 0x41, 0x34, 0xc3, 0xf0, 0x20, 0x19, 0x6d, 0xc6, 0x72, 0xc9, 0x46, 0xf5, 0x4b, 0x13, 0x67, 0x6a, 0x42, - 0x75, 0xd8, 0x0c, 0x74, 0xea, 0xd0, 0x16, 0x15, 0x8d, 0xd4, 0x50, 0xae, 0x68, 0xb1, 0x38, 0x3e, 0x04, 0x7c, 0xdf, - 0xef, 0x9e, 0x59, 0x58, 0x6e, 0xc7, 0xd2, 0xba, 0xfe, 0xa0, 0xa4, 0xa8, 0xca, 0x3d, 0x70, 0xca, 0x2f, 0xe1, 0x31, - 0xea, 0x38, 0xc5, 0x6a, 0xf7, 0x6a, 0x7d, 0xba, 0x3f, 0x2d, 0x72, 0xc9, 0xc6, 0x80, 0x72, 0xed, 0x60, 0x54, 0xf1, - 0xcf, 0x26, 0xa8, 0x7f, 0xe9, 0x6d, 0xa1, 0x46, 0xd1, 0x36, 0xe3, 0xc3, 0xa7, 0x7f, 0x2a, 0xfe, 0x32, 0x03, 0x25, - 0xcb, 0x0b, 0x66, 0xf1, 0x8d, 0xb1, 0x24, 0x1f, 0xb7, 0x5a, 0xf3, 0x1b, 0xb4, 0xac, 0x66, 0xc0, 0xbb, 0x26, 0x53, - 0x4e, 0x49, 0x77, 0x40, 0x15, 0x38, 0x2d, 0xfd, 0x9f, 0x2d, 0x0f, 0x9c, 0xa8, 0x5e, 0xab, 0x28, 0xfe, 0xbc, 0x54, - 0x2e, 0x38, 0xf6, 0x0b, 0x04, 0x38, 0x8d, 0xb7, 0xf2, 0x92, 0xbb, 0x8b, 0x5b, 0x3a, 0xbd, 0x3a, 0xba, 0xd7, 0xb4, - 0xbd, 0x79, 0x7d, 0xca, 0x0d, 0xd0, 0xba, 0xa1, 0xd5, 0x87, 0x10, 0x2c, 0x9d, 0xb6, 0xf1, 0xb4, 0xb3, 0x2c, 0x87, - 0x97, 0x92, 0xcf, 0xdc, 0x88, 0x2c, 0x8d, 0xe9, 0x88, 0x8e, 0xad, 0x97, 0xd7, 0xd4, 0xeb, 0x68, 0x6b, 0x31, 0x3d, - 0xda, 0x32, 0x97, 0x01, 0x49, 0x45, 0x62, 0xbd, 0x56, 0xf1, 0x19, 0x9c, 0xc0, 0xe5, 0x38, 0xe5, 0xb1, 0x8c, 0x14, - 0xc1, 0x76, 0xdd, 0xb8, 0x6e, 0x0c, 0x6c, 0x86, 0x2f, 0x1d, 0x78, 0xba, 0xba, 0x29, 0xf8, 0x5b, 0xeb, 0x97, 0xdc, - 0x8a, 0x50, 0x75, 0x77, 0x87, 0xd2, 0xee, 0x9a, 0x6f, 0x4d, 0xb8, 0xf4, 0x4d, 0xcd, 0xcf, 0x61, 0x64, 0x4c, 0x07, - 0x6d, 0xaf, 0xd7, 0xa2, 0x5a, 0xd7, 0x7e, 0x25, 0x03, 0x5f, 0x81, 0xe9, 0xaf, 0xb7, 0x52, 0x85, 0xd0, 0xea, 0x0d, - 0xf9, 0xb6, 0xb4, 0x82, 0xe2, 0xf9, 0x5c, 0x35, 0x44, 0xdd, 0xe3, 0x43, 0xad, 0xbc, 0x02, 0xf7, 0x50, 0xb9, 0x00, - 0x3a, 0xf4, 0x6e, 0x1a, 0x99, 0xa3, 0xa0, 0x7f, 0x99, 0xa0, 0x3c, 0x7c, 0xac, 0xaa, 0xf7, 0xff, 0x00, 0xbb, 0x9f, - 0x49, 0x8d, 0x3d, 0x86, 0x00, 0x00}; + 0x72, 0x7f, 0x60, 0xe6, 0x13, 0x26, 0x4e, 0x2e, 0x40, 0x82, 0x4b, 0xa9, 0xbc, 0xdc, 0x1b, 0x13, 0x0a, 0x49, 0x44, + 0xae, 0x27, 0x4f, 0x9e, 0x3c, 0x7b, 0x02, 0xc7, 0x7b, 0x09, 0x1f, 0xc9, 0xdb, 0x39, 0xf5, 0xa6, 0x72, 0x96, 0xf6, + 0x8e, 0xcd, 0xbf, 0x34, 0x4e, 0x7a, 0xc7, 0x29, 0xcb, 0x3e, 0x7a, 0x82, 0xa6, 0x84, 0x8d, 0x78, 0xe6, 0x4d, 0x05, + 0x1d, 0x93, 0x24, 0x96, 0x71, 0xc4, 0x66, 0xf1, 0x84, 0x7a, 0x87, 0xbd, 0xe3, 0x19, 0x95, 0xb1, 0x37, 0x9a, 0xc6, + 0x22, 0xa7, 0x92, 0x7c, 0x78, 0xff, 0x45, 0xf3, 0x69, 0xef, 0x38, 0x1f, 0x09, 0x36, 0x97, 0x1e, 0x0c, 0x49, 0x66, + 0x3c, 0x59, 0xa4, 0xb4, 0x77, 0x78, 0x78, 0x7d, 0x7d, 0x1d, 0xfe, 0x94, 0xff, 0xd3, 0x88, 0x67, 0xb9, 0xf4, 0x5e, + 0x91, 0x6b, 0x96, 0x25, 0xfc, 0x1a, 0x53, 0x49, 0x5e, 0x85, 0x67, 0xd3, 0x38, 0xe1, 0xd7, 0xef, 0x38, 0x97, 0x07, + 0x07, 0x81, 0x7e, 0xbc, 0x3d, 0x3d, 0x3b, 0x23, 0x84, 0x5c, 0x71, 0x96, 0x78, 0xad, 0xd5, 0xaa, 0x2a, 0x0c, 0xb3, + 0x58, 0xb2, 0x2b, 0xaa, 0xbb, 0xa0, 0x83, 0x03, 0x3f, 0x4e, 0xf8, 0x5c, 0xd2, 0xe4, 0x4c, 0xde, 0xa6, 0xf4, 0x6c, + 0x4a, 0xa9, 0xcc, 0x7d, 0x96, 0x79, 0xcf, 0xf9, 0x68, 0x31, 0xa3, 0x99, 0x0c, 0xe7, 0x82, 0x4b, 0x0e, 0x90, 0x1c, + 0x1c, 0xf8, 0x82, 0xce, 0xd3, 0x78, 0x44, 0xa1, 0xfe, 0xf4, 0xec, 0xac, 0xea, 0x51, 0x35, 0xc2, 0x4c, 0x92, 0xb3, + 0xdb, 0xd9, 0x25, 0x4f, 0x03, 0x84, 0x53, 0x49, 0x32, 0x7a, 0xed, 0x7d, 0x47, 0xe3, 0x8f, 0xaf, 0xe3, 0x79, 0x77, + 0x94, 0xc6, 0x79, 0xee, 0x5d, 0xca, 0xa5, 0x5a, 0x82, 0x58, 0x8c, 0x24, 0x17, 0x81, 0xc4, 0x14, 0x33, 0xb4, 0x64, + 0xe3, 0x40, 0x4e, 0x59, 0x1e, 0x9e, 0xef, 0x8f, 0xf2, 0xfc, 0x1d, 0xcd, 0x17, 0xa9, 0xdc, 0x27, 0x7b, 0x2d, 0xcc, + 0xf6, 0x08, 0x61, 0x12, 0xc9, 0xa9, 0xe0, 0xd7, 0xde, 0x0b, 0x21, 0xb8, 0x08, 0xfc, 0xd3, 0xb3, 0x33, 0xdd, 0xc2, + 0x63, 0xb9, 0x97, 0x71, 0xe9, 0x95, 0xe3, 0xc5, 0x97, 0x29, 0x0d, 0xbd, 0x0f, 0x39, 0xf5, 0x2e, 0x16, 0x59, 0x1e, + 0x8f, 0xe9, 0xe9, 0xd9, 0xd9, 0x85, 0xc7, 0x85, 0x77, 0x31, 0xca, 0xf3, 0x0b, 0x8f, 0x65, 0xb9, 0xa4, 0x71, 0x12, + 0xfa, 0xa8, 0xab, 0x26, 0x1b, 0xe5, 0xf9, 0x7b, 0x7a, 0x23, 0x89, 0xc4, 0xea, 0x51, 0x12, 0x5a, 0x4c, 0xa8, 0xf4, + 0xf2, 0x72, 0x5d, 0x01, 0x5a, 0xa6, 0x54, 0x7a, 0x92, 0xa8, 0x7a, 0xde, 0xd5, 0xb8, 0xa7, 0xfa, 0x51, 0x76, 0xd9, + 0x38, 0xa0, 0xf2, 0xe0, 0x40, 0x96, 0x78, 0x46, 0x7a, 0x69, 0x1e, 0x23, 0x74, 0xcf, 0x96, 0x1d, 0x1c, 0xd0, 0x30, + 0xa5, 0xd9, 0x44, 0x4e, 0x09, 0x21, 0xed, 0x2e, 0x3b, 0x38, 0x08, 0x24, 0x49, 0x65, 0x38, 0xa1, 0x32, 0xa0, 0x08, + 0xe1, 0xaa, 0xf7, 0xc1, 0x41, 0xa0, 0x91, 0xc0, 0x89, 0x46, 0x5c, 0x0d, 0xc7, 0x28, 0x34, 0xd8, 0x3f, 0xbb, 0xcd, + 0x46, 0x81, 0x0b, 0x3f, 0xc2, 0xec, 0xe0, 0x20, 0x95, 0x61, 0x0e, 0x23, 0x62, 0x89, 0x50, 0x21, 0xa8, 0x5c, 0x88, + 0xcc, 0x93, 0x85, 0xe4, 0x67, 0x52, 0xb0, 0x6c, 0x12, 0xa0, 0xa5, 0x2d, 0x73, 0x3a, 0x16, 0x85, 0x06, 0xf7, 0x6b, + 0x49, 0x04, 0xe9, 0xc1, 0x8c, 0x97, 0x32, 0x80, 0x5d, 0xe4, 0x63, 0x4f, 0x10, 0xe2, 0xe7, 0xaa, 0xaf, 0xdf, 0x17, + 0x91, 0x68, 0xf8, 0x3e, 0xd6, 0x50, 0x62, 0x26, 0x11, 0xfe, 0x48, 0x02, 0x81, 0xc3, 0x30, 0x94, 0x88, 0xf4, 0x96, + 0x16, 0x2b, 0xc2, 0x59, 0x67, 0x5f, 0x0c, 0x5a, 0xc3, 0x48, 0x86, 0x82, 0x26, 0x8b, 0x11, 0x0d, 0x02, 0x86, 0x73, + 0x9c, 0x21, 0xd2, 0x63, 0x8d, 0x80, 0x93, 0x1e, 0x6c, 0x37, 0xaf, 0xef, 0x35, 0x21, 0x7b, 0x2d, 0x64, 0x60, 0xe4, + 0x16, 0x40, 0xc0, 0xb0, 0x81, 0x87, 0x13, 0xe2, 0x67, 0x8b, 0xd9, 0x25, 0x15, 0x7e, 0xd9, 0xac, 0x5b, 0x23, 0x8b, + 0x45, 0x4e, 0xbd, 0x51, 0x9e, 0x7b, 0xe3, 0x45, 0x36, 0x92, 0x8c, 0x67, 0x9e, 0xdf, 0xe0, 0x0d, 0x5f, 0x93, 0x43, + 0x49, 0x0d, 0x3e, 0x2a, 0x50, 0x90, 0xa3, 0x86, 0x18, 0x64, 0x8d, 0xf6, 0x10, 0x03, 0x94, 0xa8, 0x6b, 0xc6, 0x33, + 0x08, 0xa0, 0x58, 0xc0, 0x1a, 0x0b, 0xfc, 0x41, 0xc2, 0x2a, 0xd5, 0x12, 0xa9, 0xec, 0x8b, 0x70, 0xf3, 0xa0, 0x10, + 0x19, 0xce, 0xe2, 0x79, 0x40, 0x49, 0x8f, 0x2a, 0xe2, 0x8a, 0xb3, 0x11, 0xc0, 0x5a, 0xdb, 0xb7, 0x3e, 0x8d, 0x68, + 0x58, 0x91, 0x14, 0x8a, 0x64, 0x38, 0xe6, 0xe2, 0x45, 0x3c, 0x9a, 0x42, 0xbf, 0x92, 0x60, 0x12, 0x7b, 0xde, 0x46, + 0x82, 0xc6, 0x92, 0xbe, 0x48, 0x29, 0x3c, 0x05, 0xbe, 0xea, 0xe9, 0x23, 0x9c, 0x93, 0x57, 0x61, 0xca, 0xe4, 0x1b, + 0x9e, 0x8d, 0x68, 0x37, 0x77, 0xa8, 0x8b, 0xc1, 0xbe, 0x9f, 0x48, 0x29, 0xd8, 0xe5, 0x42, 0xd2, 0xc0, 0xcf, 0xa0, + 0x85, 0x8f, 0x73, 0x84, 0x59, 0x28, 0xe9, 0x8d, 0x3c, 0xe5, 0x99, 0xa4, 0x99, 0x24, 0xd4, 0x22, 0x15, 0x8b, 0x30, + 0x9e, 0xcf, 0x69, 0x96, 0x9c, 0x4e, 0x59, 0x9a, 0x04, 0x0c, 0x15, 0xa8, 0xc0, 0xb1, 0x24, 0xb0, 0x46, 0xd2, 0x13, + 0x11, 0xfc, 0xb3, 0x7b, 0x35, 0x81, 0x24, 0x3d, 0x75, 0x28, 0x28, 0xf1, 0xfd, 0xee, 0x98, 0x8b, 0xc0, 0xac, 0xc0, + 0xe3, 0x63, 0x4f, 0xc2, 0x1c, 0xef, 0x16, 0x29, 0xcd, 0x11, 0x6d, 0x10, 0x56, 0x6e, 0xa3, 0x41, 0xf0, 0xd7, 0x40, + 0xf1, 0x05, 0x0a, 0x04, 0x8a, 0x44, 0xf7, 0x2a, 0x16, 0xde, 0x17, 0xe6, 0x44, 0xfd, 0x64, 0xb9, 0xd9, 0x54, 0x92, + 0x9f, 0x42, 0x29, 0x16, 0xb9, 0xa4, 0xc9, 0xfb, 0xdb, 0x39, 0xcd, 0xf1, 0x4b, 0x49, 0xa6, 0xb2, 0x3f, 0x95, 0x21, + 0x9d, 0xcd, 0xe5, 0xed, 0x99, 0x62, 0x8c, 0x91, 0xef, 0xe3, 0x11, 0xb4, 0x14, 0x34, 0x1e, 0x01, 0x33, 0x33, 0xd8, + 0xfa, 0x9a, 0xa7, 0xb7, 0x63, 0x96, 0xa6, 0x67, 0x8b, 0xf9, 0x9c, 0x0b, 0x89, 0xff, 0x4a, 0x96, 0x92, 0x57, 0xa8, + 0x81, 0xbd, 0x5c, 0xe6, 0xd7, 0x4c, 0x8e, 0xa6, 0x81, 0x44, 0xcb, 0x51, 0x9c, 0x53, 0xef, 0x19, 0xe7, 0x29, 0x8d, + 0xb3, 0x48, 0x10, 0xd1, 0x7f, 0x29, 0xa3, 0x6c, 0x91, 0xa6, 0xdd, 0x4b, 0x41, 0xe3, 0x8f, 0x5d, 0x55, 0xfd, 0xf6, + 0xf2, 0x27, 0x3a, 0x92, 0x91, 0xfa, 0x7d, 0x22, 0x44, 0x7c, 0x0b, 0x0d, 0x09, 0x81, 0x66, 0x7d, 0x11, 0x7d, 0x75, + 0xf6, 0xf6, 0x4d, 0xa8, 0x0f, 0x09, 0x1b, 0xdf, 0x06, 0xa2, 0x3c, 0x78, 0xa2, 0xc0, 0x63, 0xc1, 0x67, 0x6b, 0x53, + 0x6b, 0xac, 0x89, 0xee, 0x0e, 0x10, 0x28, 0x11, 0x7b, 0x7a, 0x68, 0x17, 0x82, 0x37, 0x8a, 0xe6, 0xa1, 0x92, 0x98, + 0x79, 0xe1, 0x9f, 0x48, 0x17, 0x07, 0x02, 0xdd, 0x0d, 0xad, 0x14, 0xb7, 0x4b, 0x4a, 0x14, 0x9c, 0x73, 0x90, 0x30, + 0x00, 0xe3, 0x28, 0x96, 0xa3, 0xe9, 0x92, 0xaa, 0xc1, 0x0a, 0x0b, 0x31, 0x2d, 0x0a, 0x7c, 0x5d, 0xd2, 0xbb, 0xdc, + 0x23, 0x44, 0x28, 0x46, 0x45, 0xe4, 0x6a, 0x25, 0x08, 0x11, 0x08, 0x7f, 0x47, 0x96, 0xb1, 0x5d, 0x4f, 0xb4, 0xd7, + 0xc2, 0x70, 0x2e, 0x23, 0xcd, 0x5d, 0xf0, 0x88, 0x67, 0x57, 0x54, 0x48, 0x2a, 0xa2, 0xbf, 0x62, 0x41, 0xc7, 0x29, + 0x40, 0xb1, 0xd7, 0xc6, 0xd3, 0x38, 0x3f, 0x9d, 0xc6, 0xd9, 0x84, 0x26, 0xd1, 0xb5, 0x2c, 0xf0, 0xdf, 0x89, 0x3f, + 0x66, 0x59, 0x9c, 0xb2, 0x5f, 0x68, 0xe2, 0x1b, 0x69, 0x70, 0xe2, 0xd1, 0x1b, 0x49, 0xb3, 0x24, 0xf7, 0x5e, 0xbe, + 0x7f, 0xfd, 0xca, 0xec, 0x63, 0x4d, 0x40, 0xa0, 0x65, 0xbe, 0x98, 0x53, 0x11, 0x20, 0x6c, 0x04, 0xc4, 0x0b, 0xa6, + 0x98, 0xe3, 0xeb, 0x78, 0xae, 0x4b, 0x58, 0xfe, 0x61, 0x9e, 0xc4, 0x92, 0x7e, 0x4d, 0xb3, 0x84, 0x65, 0x13, 0xb2, + 0xd7, 0xd6, 0xe5, 0xd3, 0xd8, 0x54, 0x24, 0x65, 0xd1, 0xf9, 0xfe, 0x8b, 0x54, 0xad, 0xbb, 0x7c, 0x5c, 0x04, 0xa8, + 0xc8, 0x65, 0x2c, 0xd9, 0xc8, 0x8b, 0x93, 0xe4, 0xcb, 0x8c, 0x49, 0xa6, 0x00, 0x14, 0xb0, 0x3d, 0x40, 0xa2, 0x54, + 0x8b, 0x0a, 0x0b, 0x78, 0x80, 0x70, 0x10, 0x18, 0x01, 0x30, 0x45, 0x66, 0xbf, 0x0e, 0x0e, 0x2a, 0x76, 0xdf, 0xa7, + 0x91, 0xae, 0x24, 0x83, 0x21, 0x0a, 0xe7, 0x8b, 0x1c, 0x36, 0xda, 0x4e, 0x01, 0xd2, 0x85, 0x5f, 0xe6, 0x54, 0x5c, + 0xd1, 0xa4, 0x24, 0x8e, 0x3c, 0x40, 0xcb, 0xb5, 0x39, 0xcc, 0xb1, 0x90, 0x64, 0x30, 0xec, 0xba, 0x7c, 0x9b, 0x1a, + 0x3a, 0x17, 0x7c, 0x4e, 0x85, 0x64, 0x34, 0x2f, 0x59, 0x49, 0x00, 0x52, 0xb4, 0x64, 0x27, 0x39, 0xb1, 0xeb, 0x9b, + 0x07, 0x0c, 0x53, 0x54, 0x63, 0x18, 0x56, 0xd0, 0xbe, 0xb8, 0x52, 0x12, 0x23, 0xc7, 0x0c, 0x61, 0xa9, 0x21, 0xcd, + 0x11, 0x2a, 0x10, 0x96, 0x16, 0x5c, 0xcd, 0x8a, 0xcc, 0x6c, 0xb7, 0x20, 0xaa, 0xc9, 0x77, 0x4a, 0x54, 0x03, 0x43, + 0x8b, 0x25, 0x3d, 0x38, 0x08, 0x68, 0x58, 0x12, 0x05, 0xd9, 0x6b, 0x9b, 0x3d, 0x72, 0x90, 0xb5, 0x03, 0x6c, 0x98, + 0x58, 0x62, 0x8a, 0xf0, 0x1e, 0x0d, 0x33, 0x7e, 0x32, 0x1a, 0xd1, 0x3c, 0xe7, 0xe2, 0xe0, 0x60, 0x4f, 0xb5, 0x2f, + 0xb5, 0x09, 0xd8, 0xc3, 0xb7, 0xd7, 0x59, 0x05, 0x01, 0xaa, 0x24, 0xac, 0x91, 0x0b, 0x12, 0xe4, 0x94, 0x52, 0x38, + 0xfc, 0xbe, 0x55, 0x3c, 0x22, 0xff, 0xfc, 0xdc, 0x6f, 0x48, 0x6c, 0xd0, 0x30, 0xa1, 0x76, 0xea, 0xdb, 0xe7, 0x54, + 0xab, 0x56, 0x4a, 0xf1, 0xd8, 0xc0, 0x8c, 0x3e, 0x3f, 0x61, 0x42, 0xc7, 0x2c, 0x73, 0x96, 0x5d, 0x03, 0x09, 0x4b, + 0x9c, 0xa3, 0xc2, 0xd9, 0xd0, 0xad, 0x43, 0x2b, 0x9d, 0x46, 0xef, 0xdc, 0x72, 0xa2, 0xf4, 0x08, 0x67, 0x1b, 0x07, + 0x74, 0x58, 0x60, 0x85, 0x7a, 0xbb, 0x9a, 0x4c, 0x01, 0x3a, 0x90, 0xc3, 0xae, 0xa9, 0x27, 0xb9, 0xc6, 0x9c, 0xa0, + 0x3f, 0x2f, 0x68, 0x2e, 0x35, 0x1d, 0x07, 0x12, 0x67, 0x98, 0xa1, 0x02, 0x8e, 0xdb, 0x98, 0x4d, 0x16, 0x02, 0xd4, + 0x1d, 0x38, 0x8a, 0x34, 0x5b, 0xcc, 0xa8, 0x7d, 0xda, 0x06, 0xdb, 0xdb, 0x39, 0x08, 0xc4, 0x1c, 0x68, 0xfa, 0x6e, + 0x72, 0x02, 0x58, 0x25, 0x5a, 0xad, 0xbe, 0xb3, 0x83, 0x54, 0x5b, 0x59, 0xaa, 0x68, 0x6b, 0x7b, 0xf2, 0x77, 0x64, + 0xe4, 0xf1, 0x5e, 0x5b, 0x43, 0xff, 0xf7, 0x21, 0xd9, 0x6b, 0x95, 0x14, 0x6c, 0x70, 0xaa, 0x81, 0xd1, 0x28, 0x7c, + 0xab, 0x07, 0x42, 0x4a, 0xba, 0xd7, 0x88, 0x25, 0x9c, 0x6e, 0xd0, 0xe9, 0x94, 0x0c, 0x40, 0xcf, 0x08, 0xa7, 0xc3, + 0x5d, 0xc4, 0x64, 0xb9, 0x41, 0x20, 0x37, 0xeb, 0x2a, 0xa6, 0x71, 0x55, 0x67, 0x1a, 0x6b, 0x8b, 0xf0, 0xe7, 0x65, + 0x17, 0xbf, 0xa4, 0x31, 0x73, 0xcc, 0xab, 0x2a, 0xcc, 0x14, 0x30, 0xd5, 0x92, 0x9c, 0x21, 0xde, 0xc4, 0x33, 0x9a, + 0x07, 0x14, 0xe1, 0x5d, 0x0d, 0x34, 0x71, 0x42, 0x93, 0xa1, 0x23, 0x36, 0x73, 0x10, 0x9b, 0x0c, 0x69, 0xad, 0xac, + 0x7e, 0xdc, 0x72, 0x4c, 0x07, 0xf9, 0xb0, 0x52, 0xe6, 0x9c, 0xc5, 0x2b, 0x79, 0x6c, 0xa8, 0xdb, 0xe2, 0x4f, 0x97, + 0x69, 0xa4, 0x29, 0xa5, 0x21, 0x47, 0x78, 0xaf, 0xb5, 0xbe, 0x8f, 0xb6, 0x55, 0xb5, 0xc6, 0xc1, 0x10, 0xf6, 0x41, + 0x89, 0x8b, 0x90, 0xe5, 0xea, 0xff, 0xda, 0x39, 0x03, 0xb4, 0x9d, 0x01, 0x59, 0x84, 0xe3, 0x34, 0x96, 0x41, 0xfb, + 0xb0, 0x05, 0x9a, 0xe8, 0x15, 0x05, 0x69, 0x82, 0xd0, 0xe6, 0x52, 0x68, 0xb8, 0xc8, 0xf2, 0x29, 0x1b, 0xcb, 0x20, + 0x96, 0x8a, 0xa1, 0xd0, 0x34, 0xa7, 0x9e, 0xac, 0xe9, 0xc3, 0x8a, 0xd9, 0xc4, 0x40, 0x6a, 0xa5, 0xf2, 0x45, 0x2d, + 0xa4, 0x8a, 0x69, 0x01, 0x6f, 0xa8, 0x74, 0xe9, 0x8a, 0xc7, 0xd8, 0xd6, 0x0c, 0xf4, 0xc5, 0x76, 0x5f, 0x8f, 0x18, + 0x19, 0x56, 0xc0, 0x1c, 0x95, 0x95, 0x45, 0x2e, 0x7f, 0x30, 0x85, 0x32, 0x94, 0xfc, 0x15, 0xbf, 0xa6, 0xe2, 0x34, + 0x06, 0xe0, 0x23, 0xdd, 0xbd, 0xd0, 0x62, 0x40, 0x71, 0x7b, 0xd9, 0xb5, 0xf4, 0x72, 0xae, 0x16, 0xfe, 0xb5, 0xe0, + 0x33, 0x96, 0x53, 0xd0, 0xd4, 0x34, 0xfe, 0x33, 0x38, 0x65, 0xea, 0x38, 0x82, 0xa8, 0xa1, 0x25, 0x7d, 0x9d, 0xbc, + 0xaa, 0xd3, 0xd7, 0xf9, 0xfe, 0x8b, 0x89, 0x65, 0x7f, 0xf5, 0x43, 0x8c, 0x70, 0x60, 0xec, 0x09, 0x47, 0xca, 0x85, + 0x53, 0x64, 0xc4, 0xfb, 0x6a, 0x25, 0x1d, 0xb3, 0xad, 0xa6, 0x2b, 0x52, 0x7d, 0x6c, 0x50, 0x11, 0x27, 0x09, 0x68, + 0x75, 0x82, 0xa7, 0xa9, 0x23, 0xa8, 0x30, 0xeb, 0x96, 0xa2, 0xe9, 0x7c, 0xff, 0xc5, 0xd9, 0x5d, 0xd2, 0x09, 0xea, + 0x5d, 0x01, 0x65, 0x01, 0xcd, 0x12, 0x2a, 0xc0, 0x8c, 0x74, 0x76, 0xcb, 0xc8, 0xd8, 0x53, 0x9e, 0x65, 0x74, 0x24, + 0x69, 0x02, 0x56, 0x0a, 0x23, 0x32, 0x9c, 0xf2, 0x5c, 0x96, 0x85, 0x15, 0xf4, 0xcc, 0x81, 0x9e, 0x85, 0xa3, 0x38, + 0x4d, 0x03, 0x6d, 0x91, 0xcc, 0xf8, 0x15, 0xdd, 0x02, 0x75, 0xb7, 0x06, 0x72, 0x39, 0x0c, 0x75, 0x86, 0xa1, 0x61, + 0x3e, 0x4f, 0xd9, 0x88, 0x96, 0x82, 0xeb, 0x2c, 0x64, 0x59, 0x42, 0x6f, 0x80, 0x8f, 0xa0, 0x5e, 0xaf, 0xd7, 0xc2, + 0x6d, 0x54, 0x68, 0x84, 0x2f, 0x37, 0x10, 0x7b, 0x87, 0xc8, 0x04, 0x22, 0x23, 0xbd, 0xe5, 0x36, 0x7e, 0x40, 0x91, + 0x23, 0x27, 0x99, 0xb5, 0xac, 0x34, 0x6f, 0x46, 0x38, 0xa1, 0x29, 0x95, 0xd4, 0xf2, 0x72, 0xd0, 0x9f, 0xf5, 0xd1, + 0x7d, 0x57, 0xe2, 0xaf, 0x24, 0x27, 0x7b, 0xca, 0xec, 0x9e, 0xe7, 0xa5, 0xa5, 0x5e, 0x6d, 0x4f, 0x85, 0xed, 0xbe, + 0xd4, 0xdb, 0x13, 0x4b, 0x19, 0x8f, 0xa6, 0xda, 0x44, 0x0f, 0x36, 0x96, 0x54, 0x8d, 0x61, 0xf8, 0x7a, 0x79, 0x88, + 0x3e, 0x58, 0x30, 0xb7, 0xa1, 0xe0, 0xcc, 0x30, 0x05, 0x0a, 0x56, 0x9f, 0xde, 0xb6, 0xd3, 0x38, 0x4d, 0x2f, 0xe3, + 0xd1, 0xc7, 0x3a, 0xf5, 0x57, 0x64, 0x40, 0xd6, 0xb9, 0xb1, 0x53, 0xe5, 0xb0, 0x2c, 0x77, 0xdd, 0x96, 0x4b, 0xd7, + 0x0e, 0x4a, 0xb0, 0xd7, 0xaa, 0xc8, 0xbe, 0xbe, 0xd1, 0x3b, 0xa9, 0x5d, 0x41, 0xc4, 0xcc, 0xca, 0x02, 0xe0, 0x02, + 0x9f, 0xa4, 0x38, 0xcb, 0x0f, 0x0c, 0xdd, 0x81, 0xad, 0x51, 0xac, 0x01, 0x22, 0xd1, 0xb2, 0x48, 0x58, 0xbe, 0x1b, + 0x03, 0x7f, 0x08, 0x94, 0xcf, 0x9d, 0x19, 0xee, 0x0b, 0x68, 0xc9, 0xe3, 0x8c, 0xca, 0x5c, 0x42, 0x66, 0xb4, 0x09, + 0xcb, 0x68, 0xfe, 0x06, 0x9a, 0x8b, 0xa2, 0xf7, 0xb7, 0xba, 0x0a, 0x74, 0x32, 0x80, 0x22, 0xef, 0xba, 0xca, 0x44, + 0x8d, 0x02, 0x0c, 0x4f, 0x65, 0x4a, 0xe4, 0x66, 0x35, 0xe3, 0xd1, 0xa8, 0xeb, 0xda, 0xfe, 0x36, 0x2c, 0x97, 0x93, + 0x20, 0x08, 0x72, 0xb0, 0xdf, 0xac, 0x5e, 0x5f, 0x2d, 0x22, 0xdf, 0x58, 0x44, 0x1e, 0x3a, 0x46, 0x16, 0xaa, 0x68, + 0xd9, 0xe9, 0x1e, 0xfd, 0x15, 0xb9, 0x8d, 0x40, 0x59, 0x0d, 0x81, 0x3f, 0xa3, 0x92, 0xdd, 0xa6, 0x44, 0x62, 0x6e, + 0x0c, 0x1c, 0x43, 0x69, 0xc0, 0x30, 0xaa, 0x2e, 0x19, 0xd2, 0x47, 0xa3, 0x66, 0xec, 0x66, 0x98, 0xa3, 0x35, 0xcd, + 0xbe, 0x28, 0x0c, 0x8e, 0x28, 0x32, 0x7b, 0x53, 0x53, 0x89, 0x1d, 0xac, 0xe0, 0x8c, 0x18, 0x35, 0x58, 0x6b, 0x3d, + 0xeb, 0xb8, 0x29, 0xc7, 0x85, 0x83, 0x5a, 0xa1, 0xa6, 0xa6, 0x4f, 0x5a, 0xc5, 0x2a, 0x43, 0x78, 0x6a, 0x35, 0x52, + 0x5e, 0xad, 0x9b, 0x10, 0xdf, 0x7a, 0x23, 0xfc, 0xfe, 0xb2, 0x66, 0x12, 0x46, 0x4e, 0xb3, 0x22, 0x02, 0x96, 0xca, + 0xb7, 0xa1, 0x7b, 0x1b, 0xcd, 0xd4, 0xc6, 0x71, 0x10, 0xce, 0x5d, 0x84, 0x3b, 0x98, 0xcd, 0x34, 0xe7, 0xca, 0x86, + 0x64, 0x5a, 0xef, 0x1b, 0x50, 0xcc, 0xf5, 0x3e, 0x6c, 0x20, 0x71, 0x5d, 0xf1, 0x54, 0x24, 0x08, 0x06, 0x6c, 0x0e, + 0xca, 0x9d, 0x2b, 0x1f, 0x02, 0x80, 0x9d, 0xad, 0x56, 0x1b, 0x44, 0xb7, 0x55, 0xff, 0x44, 0x61, 0x65, 0x14, 0xae, + 0x56, 0xd7, 0x12, 0x05, 0x46, 0xf3, 0xc5, 0x14, 0xf5, 0x2d, 0xc7, 0x3d, 0x79, 0x05, 0xad, 0x94, 0x22, 0x5a, 0x95, + 0x94, 0x26, 0x43, 0x9d, 0x66, 0xeb, 0xfb, 0x24, 0x1d, 0xb6, 0x7d, 0xba, 0xc1, 0xbd, 0x54, 0xa1, 0x11, 0xd3, 0xd5, + 0x92, 0x4f, 0xcd, 0xd0, 0x0c, 0x21, 0x14, 0xe5, 0xca, 0x8a, 0xd9, 0xdb, 0x66, 0x58, 0x1e, 0x1c, 0xe4, 0xce, 0x40, + 0xe7, 0x25, 0x9b, 0xf8, 0x29, 0x00, 0x91, 0x9c, 0xdf, 0x66, 0x4a, 0x77, 0xf9, 0xc9, 0x0a, 0xa1, 0x0d, 0xb3, 0xb4, + 0xd5, 0x05, 0x6b, 0x3c, 0xbe, 0x8e, 0x99, 0xf4, 0xca, 0x51, 0xb4, 0x35, 0x1e, 0x50, 0xb4, 0x34, 0xaa, 0x46, 0x28, + 0x28, 0x28, 0x8f, 0xc0, 0x13, 0xac, 0x0a, 0xad, 0xe9, 0x7e, 0x34, 0xa5, 0xe0, 0x08, 0xb6, 0x5a, 0x44, 0x69, 0x17, + 0xee, 0x19, 0x29, 0x62, 0x06, 0xde, 0x0e, 0x7b, 0xb1, 0xde, 0xbd, 0x66, 0x07, 0xcc, 0xa9, 0x18, 0x73, 0x31, 0xb3, + 0x75, 0xc5, 0xda, 0xb3, 0xe1, 0x8c, 0x6c, 0x1c, 0x6c, 0x1d, 0xdb, 0xa8, 0xff, 0xdd, 0x35, 0xa3, 0xbb, 0x32, 0xd7, + 0x6b, 0xa2, 0xb4, 0x94, 0xbe, 0xda, 0x1f, 0x68, 0x29, 0x33, 0x77, 0xcd, 0x7b, 0xe3, 0x4c, 0xed, 0x6a, 0x87, 0xc9, + 0x5e, 0xbb, 0x5b, 0xda, 0x7c, 0x96, 0x1a, 0xba, 0xda, 0xb1, 0x61, 0x44, 0x2a, 0x5f, 0xa4, 0x89, 0x01, 0x96, 0x21, + 0x4c, 0x0d, 0x1d, 0x5d, 0xb3, 0x34, 0xad, 0x4a, 0x7f, 0x0d, 0x5f, 0xcf, 0x0d, 0x5f, 0xcf, 0x2c, 0x5f, 0x07, 0x4e, + 0x01, 0x7c, 0x5d, 0x0f, 0x57, 0x75, 0xcf, 0x36, 0x4e, 0x67, 0xa6, 0x39, 0x7a, 0xae, 0xec, 0x68, 0x98, 0x6f, 0x61, + 0x21, 0x40, 0xa5, 0xe6, 0xf5, 0x31, 0x30, 0x4e, 0x18, 0x30, 0x00, 0xb5, 0x0b, 0x93, 0xba, 0x2e, 0x8a, 0x8f, 0x01, + 0xc2, 0x79, 0x41, 0x4b, 0xca, 0x3e, 0x79, 0x01, 0x4e, 0x3a, 0x67, 0x39, 0x20, 0xc4, 0x54, 0xf1, 0xaf, 0x52, 0xa2, + 0xec, 0xea, 0x98, 0x59, 0x5d, 0x6e, 0x57, 0x07, 0x9c, 0xbe, 0x5a, 0x5d, 0x72, 0x37, 0xaf, 0x57, 0xcb, 0x63, 0xe5, + 0xf2, 0xaa, 0xfd, 0x5e, 0xad, 0x82, 0xb5, 0x12, 0xf0, 0xdf, 0x1b, 0x13, 0x45, 0x94, 0xa3, 0x03, 0x0f, 0x70, 0x31, + 0x03, 0x05, 0x85, 0x5e, 0x74, 0x29, 0xe2, 0x5e, 0x7d, 0xca, 0xc1, 0xa3, 0xdc, 0xf4, 0xba, 0xff, 0x29, 0x9f, 0xcd, + 0x41, 0x1b, 0x5b, 0x23, 0xe9, 0x09, 0x35, 0x13, 0x56, 0xf5, 0xc5, 0x96, 0xb2, 0x5a, 0x1f, 0x75, 0x1e, 0x6b, 0xd4, + 0x54, 0xda, 0xcb, 0x7b, 0xad, 0x62, 0x51, 0x16, 0x95, 0x8c, 0x63, 0x9b, 0x53, 0xe5, 0x74, 0xdd, 0x25, 0x63, 0x2b, + 0xde, 0x06, 0x4c, 0xf3, 0x61, 0x06, 0xbc, 0xce, 0x61, 0x3f, 0x96, 0xdc, 0xdd, 0xfd, 0x2f, 0x2a, 0xe4, 0x2c, 0x8b, + 0x35, 0xf4, 0x2d, 0x8b, 0xe2, 0x44, 0x1b, 0xd9, 0xf8, 0x64, 0xb7, 0x35, 0x5c, 0xd5, 0x19, 0x63, 0x71, 0x30, 0xc4, + 0x27, 0x9b, 0xaa, 0x23, 0x59, 0xce, 0x78, 0x42, 0x23, 0x9f, 0xcf, 0x69, 0xe6, 0x17, 0xe0, 0x55, 0x35, 0x7b, 0x3f, + 0x92, 0xc1, 0xf2, 0x5d, 0xdd, 0xbd, 0x1a, 0x9d, 0x14, 0xe0, 0xfd, 0xfa, 0x62, 0xd3, 0xf1, 0xfa, 0x2d, 0x15, 0xb9, + 0x52, 0x44, 0x4b, 0x9d, 0xf6, 0x8b, 0x4a, 0x2c, 0x7d, 0x11, 0xed, 0x6c, 0x5f, 0x99, 0x20, 0x7e, 0x3b, 0x7c, 0x1c, + 0x1e, 0xf9, 0x48, 0xb9, 0x85, 0xbf, 0x32, 0x07, 0xfe, 0xb9, 0x75, 0x0b, 0xbf, 0x20, 0xcf, 0xeb, 0x5e, 0xe1, 0x44, + 0x92, 0x17, 0xfd, 0x17, 0xd6, 0x62, 0xe6, 0x29, 0x1b, 0xdd, 0x06, 0x7e, 0xca, 0x64, 0x13, 0x42, 0x6f, 0x3e, 0x5e, + 0xea, 0x0a, 0x70, 0x29, 0x2a, 0x77, 0x76, 0x61, 0x6d, 0x3d, 0x2c, 0x25, 0xf1, 0xf7, 0x53, 0x26, 0xf7, 0x7d, 0x3c, + 0x23, 0x17, 0xf0, 0x63, 0x7f, 0x19, 0xbc, 0x8e, 0xe5, 0x34, 0x14, 0x71, 0x96, 0xf0, 0x59, 0x80, 0x1a, 0xbe, 0x8f, + 0xc2, 0x5c, 0xd9, 0x1b, 0x9f, 0xa3, 0x62, 0xff, 0x02, 0xdf, 0x48, 0xe2, 0xf7, 0xfd, 0xc6, 0x0c, 0xbf, 0x91, 0xe4, + 0xe2, 0x78, 0x7f, 0x79, 0x23, 0x8b, 0xde, 0x05, 0xbe, 0x29, 0x3d, 0xf6, 0xf8, 0x6b, 0x12, 0x20, 0xd2, 0xbb, 0x31, + 0xd0, 0x9c, 0xf2, 0x99, 0xf6, 0xdc, 0xfb, 0x08, 0x7f, 0x80, 0xb8, 0x8a, 0xa8, 0xb8, 0x8d, 0x09, 0xad, 0xec, 0x11, + 0x9f, 0x2b, 0x17, 0x81, 0x7f, 0x70, 0xe0, 0x94, 0x95, 0xaa, 0x02, 0x3e, 0x91, 0xa4, 0x66, 0x90, 0xe3, 0xf7, 0x2a, + 0x42, 0x73, 0x22, 0x03, 0x81, 0xec, 0x30, 0x81, 0xf5, 0x43, 0x9b, 0xa3, 0x29, 0x06, 0xda, 0xc3, 0x10, 0x32, 0x49, + 0x45, 0x2c, 0xb9, 0x18, 0x22, 0x57, 0xfd, 0xc0, 0x7f, 0x23, 0x17, 0x03, 0xef, 0x3f, 0xfd, 0xd3, 0x8f, 0xe3, 0x1f, + 0xc5, 0xf0, 0x02, 0xbf, 0x25, 0x87, 0xc7, 0x41, 0x3f, 0x0a, 0xf6, 0x9a, 0xcd, 0xd5, 0x8f, 0x87, 0x83, 0x7f, 0xc4, + 0xcd, 0x5f, 0x4e, 0x9a, 0x3f, 0x0c, 0xd1, 0x2a, 0xf8, 0xf1, 0xb0, 0x3f, 0x30, 0x4f, 0x83, 0x7f, 0xf4, 0x7e, 0xcc, + 0x87, 0x7f, 0xd6, 0x85, 0xfb, 0x08, 0x1d, 0x4e, 0xf0, 0x42, 0x92, 0xc3, 0x66, 0xb3, 0x77, 0x38, 0xc1, 0x73, 0x49, + 0x0e, 0xe1, 0xff, 0x4b, 0xf2, 0x8e, 0x4e, 0x5e, 0xdc, 0xcc, 0x83, 0x8b, 0xde, 0x6a, 0x7f, 0xf9, 0xb7, 0x02, 0x46, + 0x1d, 0xfc, 0xe3, 0xc7, 0x1f, 0x73, 0xff, 0x41, 0x8f, 0x1c, 0x0e, 0x1b, 0x28, 0x80, 0xd2, 0x3f, 0x13, 0xf5, 0x6f, + 0xd0, 0x8f, 0x06, 0xff, 0x30, 0x50, 0xf8, 0x0f, 0x7e, 0xbc, 0x38, 0xee, 0x91, 0xe1, 0x2a, 0xf0, 0x57, 0x0f, 0xd0, + 0x0a, 0xa1, 0xd5, 0x3e, 0xba, 0xc0, 0xfe, 0xc4, 0x47, 0x78, 0x22, 0xc9, 0xe1, 0x83, 0xc3, 0x09, 0xbe, 0x92, 0xe4, + 0xd0, 0x3f, 0x9c, 0xe0, 0x17, 0x92, 0x1c, 0xfe, 0x23, 0xe8, 0x47, 0xda, 0xc3, 0xb6, 0x52, 0xee, 0x8d, 0x15, 0x04, + 0x37, 0x62, 0x41, 0xe3, 0x95, 0x64, 0x32, 0xa5, 0x68, 0xff, 0x90, 0xe1, 0x33, 0x85, 0xa6, 0x40, 0x82, 0x13, 0x06, + 0x6c, 0xbb, 0x60, 0x79, 0x0e, 0x9b, 0x0d, 0x34, 0xb3, 0x1f, 0x09, 0xac, 0xfd, 0x00, 0x79, 0x24, 0xf1, 0x55, 0x9c, + 0x2e, 0x68, 0x1e, 0xd1, 0x02, 0xe1, 0x11, 0x39, 0x93, 0x41, 0x1b, 0xe1, 0x77, 0x12, 0x7e, 0x74, 0x10, 0x3e, 0x33, + 0x01, 0x4c, 0x38, 0xc8, 0x9a, 0xa8, 0x32, 0xae, 0x35, 0x16, 0x1f, 0xe1, 0xf9, 0x96, 0x4a, 0x39, 0x05, 0xef, 0x02, + 0xc2, 0xe3, 0x5a, 0xb8, 0x13, 0x5f, 0x13, 0x4b, 0x12, 0xef, 0x05, 0xa5, 0xdf, 0xc5, 0xe9, 0x47, 0x2a, 0x82, 0x1b, + 0xdc, 0xee, 0x7c, 0x8e, 0x95, 0x0b, 0x7a, 0xaf, 0x8d, 0xba, 0x65, 0xac, 0xea, 0x54, 0xea, 0x18, 0x01, 0x08, 0xd9, + 0xba, 0x2f, 0x06, 0x76, 0x7c, 0x4f, 0x6c, 0x38, 0xac, 0x44, 0x7c, 0xed, 0xa3, 0x7a, 0x5c, 0x94, 0x65, 0x57, 0x71, + 0xca, 0x12, 0x4f, 0xd2, 0xd9, 0x3c, 0x8d, 0x25, 0xf5, 0xcc, 0x7a, 0xbd, 0x18, 0x06, 0xf2, 0x4b, 0x95, 0x21, 0x71, + 0x0c, 0xce, 0xc4, 0x06, 0x9c, 0xe0, 0xac, 0x04, 0x10, 0x9d, 0x32, 0x6a, 0xc7, 0xeb, 0x2a, 0xf8, 0xb5, 0x1e, 0xdf, + 0x6b, 0xb6, 0xc1, 0x11, 0x36, 0x54, 0xe2, 0x39, 0xc7, 0x19, 0x01, 0x21, 0xda, 0xe9, 0xfb, 0xc7, 0xf9, 0xd5, 0xa4, + 0xe7, 0x43, 0x6c, 0x86, 0x93, 0xb7, 0xca, 0x2f, 0x04, 0x0d, 0xa6, 0xa4, 0xd5, 0x9d, 0x1e, 0xd3, 0xee, 0xb4, 0xd1, + 0xb0, 0x3a, 0x74, 0x4a, 0xc4, 0x60, 0xaa, 0xbb, 0xc7, 0x38, 0xc1, 0x0b, 0xd2, 0x6c, 0xe3, 0x09, 0x69, 0xa9, 0x2e, + 0xdd, 0xc9, 0x71, 0x6a, 0xa6, 0x39, 0x38, 0x08, 0x78, 0x98, 0xc6, 0xb9, 0xfc, 0x12, 0x8c, 0x7d, 0x32, 0xc1, 0x09, + 0xe1, 0x21, 0xbd, 0xa1, 0xa3, 0x20, 0x45, 0x38, 0x31, 0x9c, 0x06, 0x75, 0xd1, 0x84, 0x38, 0xcd, 0xc0, 0x88, 0x20, + 0x6f, 0xfb, 0xc9, 0xa0, 0x3d, 0x24, 0x84, 0xf8, 0x7b, 0xcd, 0xa6, 0xdf, 0xe7, 0x64, 0x21, 0x23, 0x28, 0x71, 0x54, + 0x65, 0x32, 0x87, 0xa2, 0x8e, 0x53, 0x14, 0xbc, 0x90, 0xa1, 0xa4, 0xb9, 0x0c, 0xa0, 0x18, 0xcc, 0xff, 0xdc, 0x12, + 0xb6, 0x7f, 0x7c, 0xe8, 0x37, 0xa0, 0x54, 0x11, 0x27, 0xc2, 0x9c, 0x5c, 0xa2, 0x28, 0x19, 0x1c, 0x0d, 0x5d, 0xfe, + 0xaf, 0x0a, 0x61, 0xf2, 0xcb, 0x7e, 0x32, 0x68, 0xa9, 0xc9, 0x7b, 0x7e, 0x3f, 0xe0, 0x24, 0xd7, 0x0a, 0x5a, 0x3f, + 0x8f, 0xde, 0xaa, 0xa5, 0xa2, 0xc8, 0x00, 0x67, 0xe6, 0x5d, 0x90, 0x66, 0x27, 0x0a, 0x16, 0xee, 0x22, 0x9a, 0x30, + 0x99, 0xc1, 0x02, 0x8e, 0x09, 0xb4, 0xc7, 0x9c, 0xc0, 0x8c, 0x55, 0xb7, 0xcb, 0xc8, 0x3c, 0x3f, 0xf0, 0x1f, 0xf4, + 0xaf, 0x64, 0x34, 0x91, 0x7a, 0xfa, 0x2b, 0xb9, 0x5a, 0xc1, 0xff, 0x13, 0xd9, 0xe7, 0xe4, 0x52, 0x15, 0x2d, 0x4c, + 0xd1, 0x1c, 0x8a, 0xde, 0x46, 0x00, 0x2a, 0xce, 0x4b, 0x25, 0x4b, 0xef, 0xc9, 0x15, 0x51, 0xb0, 0x1f, 0x1c, 0x88, + 0xc1, 0xb4, 0xd1, 0x1e, 0x82, 0x7f, 0x5f, 0xc8, 0xfc, 0x3b, 0x26, 0xa7, 0x81, 0x7f, 0xd8, 0xf3, 0x51, 0xdf, 0xf7, + 0x60, 0x6b, 0xbb, 0x59, 0x83, 0x68, 0x0c, 0xa7, 0x8d, 0x37, 0x32, 0x5a, 0xf4, 0x48, 0xab, 0x1f, 0x30, 0xe3, 0xcf, + 0x43, 0x38, 0x35, 0x8c, 0xb3, 0x85, 0x17, 0xa8, 0x21, 0x65, 0xc3, 0x3e, 0x2f, 0x50, 0x63, 0xd6, 0xb8, 0x42, 0x51, + 0xda, 0x98, 0x35, 0x82, 0x05, 0x21, 0xa4, 0xd9, 0x29, 0xbb, 0x59, 0xe9, 0x37, 0x45, 0xd1, 0x95, 0x75, 0x76, 0x0e, + 0xd4, 0x71, 0xc8, 0x1a, 0x81, 0x18, 0xd0, 0xe1, 0x6a, 0xe5, 0x1f, 0xf7, 0x7b, 0x3e, 0x6a, 0x04, 0x96, 0xd0, 0x0e, + 0x2d, 0xa5, 0x21, 0x84, 0xd9, 0xb0, 0x30, 0xa1, 0xa4, 0x97, 0xb5, 0xb0, 0xd1, 0xb2, 0x3a, 0xec, 0x0e, 0x0f, 0xa0, + 0x45, 0x69, 0xc7, 0x68, 0x7d, 0x75, 0x0e, 0xcb, 0xb4, 0xc4, 0x9c, 0x91, 0x16, 0xe6, 0xc4, 0xfa, 0xae, 0xa7, 0x44, + 0x56, 0x04, 0x9f, 0x92, 0xaa, 0x39, 0x1e, 0xc4, 0x38, 0x19, 0x92, 0xd7, 0xda, 0x1e, 0xe9, 0x5a, 0xbf, 0x38, 0x4d, + 0xc9, 0xcb, 0xb5, 0xe8, 0x6d, 0x0c, 0xb1, 0x95, 0xeb, 0x70, 0xb4, 0x10, 0x82, 0x66, 0xf2, 0x0d, 0x4f, 0x8c, 0x9a, + 0x46, 0x53, 0xb0, 0x94, 0x20, 0x2c, 0x8b, 0x41, 0x47, 0xeb, 0xd8, 0x93, 0xb1, 0xd8, 0xa8, 0x9e, 0x90, 0x85, 0x56, + 0x9f, 0x54, 0xb0, 0xb6, 0x3b, 0x31, 0x76, 0x71, 0x80, 0xf0, 0xc2, 0x44, 0x71, 0x83, 0x30, 0x0c, 0x27, 0xe1, 0x08, + 0xaa, 0x61, 0x82, 0x1c, 0x15, 0xea, 0x1c, 0x05, 0x39, 0xb9, 0x0e, 0x33, 0x7a, 0xa3, 0x66, 0x0d, 0x50, 0x25, 0x99, + 0xed, 0xf1, 0x3a, 0x9e, 0x76, 0x15, 0xbb, 0xc9, 0xc3, 0x8c, 0x27, 0x14, 0xd0, 0x03, 0x71, 0x7b, 0x53, 0x34, 0x8d, + 0x73, 0x37, 0x3e, 0x55, 0xc1, 0x37, 0x70, 0x9d, 0xd7, 0x13, 0xf0, 0xf8, 0x2a, 0x5d, 0xab, 0x6c, 0xac, 0xdd, 0xe0, + 0x08, 0xb1, 0x71, 0x30, 0x09, 0x21, 0xae, 0xa7, 0x48, 0x48, 0x82, 0x29, 0x37, 0x71, 0x89, 0x6a, 0x56, 0x8e, 0x79, + 0x45, 0x92, 0x01, 0x6f, 0x34, 0x94, 0x17, 0x7a, 0xa1, 0x49, 0x62, 0x82, 0xf0, 0x55, 0x79, 0xb6, 0x6c, 0xbb, 0xb7, + 0x92, 0xd4, 0xa7, 0x0a, 0xae, 0xea, 0xee, 0xdc, 0x86, 0x94, 0x48, 0x79, 0x0a, 0x65, 0x30, 0x43, 0xf8, 0x19, 0x39, + 0x0c, 0x06, 0x61, 0xff, 0x2f, 0x43, 0xd4, 0x0f, 0xc2, 0x3f, 0xa3, 0x43, 0xcd, 0x39, 0xae, 0x50, 0x37, 0xd5, 0x73, + 0x2c, 0x55, 0xfc, 0xb2, 0x8d, 0x95, 0x27, 0x31, 0xca, 0x70, 0x16, 0xcf, 0x68, 0xf4, 0x0c, 0x0e, 0xb9, 0x25, 0x9c, + 0xb7, 0x12, 0x03, 0x25, 0x45, 0xcf, 0x0c, 0x2f, 0x09, 0xfd, 0xfe, 0x2b, 0x59, 0x3e, 0xf5, 0xfd, 0xfe, 0xf3, 0xea, + 0xe9, 0x2f, 0x7e, 0xff, 0x17, 0x19, 0xfd, 0x5c, 0x18, 0x6f, 0x77, 0x6d, 0x8e, 0xc7, 0x76, 0x8e, 0x42, 0x6f, 0x8d, + 0x83, 0xbb, 0x05, 0xda, 0x74, 0x74, 0x4c, 0x50, 0xc1, 0xc6, 0x25, 0x33, 0xca, 0x43, 0x19, 0x4f, 0x00, 0xa9, 0xce, + 0x1e, 0xe4, 0x6e, 0x5c, 0xbf, 0x5a, 0x31, 0x90, 0x8a, 0xa5, 0x57, 0x40, 0xe6, 0xa4, 0xd7, 0x42, 0xcb, 0x5a, 0x5b, + 0xa5, 0x33, 0xd5, 0xe3, 0xe8, 0x25, 0x9f, 0xbe, 0x22, 0xad, 0xee, 0xd5, 0xf1, 0xa4, 0x7b, 0xd5, 0x68, 0xa0, 0xdc, + 0x92, 0xd6, 0x62, 0x70, 0x35, 0xc4, 0x5f, 0x83, 0x53, 0xcf, 0xa5, 0x25, 0x5c, 0x5b, 0x5e, 0xc7, 0x2c, 0xaf, 0xd1, + 0xc8, 0x0a, 0xd4, 0x75, 0xba, 0x4e, 0x74, 0xd7, 0xa2, 0xd0, 0x38, 0x59, 0x27, 0xb5, 0xa7, 0x48, 0x95, 0x40, 0x32, + 0x14, 0x21, 0xe4, 0x46, 0xa2, 0xad, 0xa3, 0xc2, 0x98, 0xd0, 0x5d, 0x9d, 0x59, 0x60, 0x9f, 0x5a, 0x4a, 0x04, 0x80, + 0x05, 0xe8, 0x5a, 0x7a, 0x82, 0x67, 0x78, 0xd1, 0x68, 0x2b, 0x32, 0x6f, 0xb6, 0xbb, 0xf5, 0xb1, 0x9e, 0x54, 0x63, + 0xe1, 0x45, 0x83, 0xcc, 0x4a, 0x2c, 0x15, 0x59, 0xa3, 0x51, 0xd4, 0x83, 0x9d, 0xf6, 0xe4, 0xd6, 0x02, 0x10, 0x37, + 0xeb, 0x49, 0x19, 0x56, 0xc2, 0x56, 0x32, 0x95, 0x85, 0x2c, 0xcb, 0xa8, 0x00, 0x29, 0x4a, 0x24, 0x66, 0x45, 0x51, + 0x49, 0x76, 0x10, 0xa3, 0x98, 0x12, 0x01, 0x9c, 0x47, 0xd9, 0x5d, 0x38, 0xc3, 0x1c, 0x4f, 0x15, 0xdf, 0x20, 0x84, + 0x9c, 0xd9, 0x74, 0x16, 0xa9, 0x78, 0x50, 0x4a, 0x98, 0x23, 0x93, 0x72, 0x42, 0xc3, 0xf3, 0xfd, 0x53, 0x7e, 0xa7, + 0x4d, 0x36, 0x60, 0xc3, 0x48, 0x35, 0x4b, 0x0d, 0xe7, 0x8a, 0xc9, 0x87, 0x40, 0xa2, 0x32, 0x3a, 0x12, 0x2a, 0x06, + 0xf8, 0x9c, 0x09, 0xaa, 0x74, 0xf0, 0x7d, 0x6b, 0xf7, 0xa5, 0x75, 0x05, 0x32, 0x75, 0xbd, 0x37, 0x80, 0xc8, 0x18, + 0x9c, 0x3b, 0x19, 0xd9, 0x68, 0x76, 0xbe, 0x7f, 0xf2, 0x76, 0x9b, 0x0d, 0xbc, 0x5a, 0x19, 0xeb, 0x57, 0xe9, 0x36, + 0x38, 0xae, 0x20, 0x4d, 0xcd, 0x8f, 0x28, 0x48, 0x95, 0x8a, 0x14, 0x07, 0x02, 0xa8, 0xe8, 0x7c, 0xff, 0xe4, 0x7d, + 0x20, 0x94, 0x6f, 0x09, 0x61, 0x77, 0xd9, 0x01, 0x27, 0xc1, 0x94, 0x50, 0xa4, 0xd7, 0x5e, 0xb2, 0x2e, 0xee, 0x08, + 0xf0, 0x68, 0xaa, 0x2a, 0xc1, 0x82, 0x18, 0xb0, 0x21, 0x49, 0x0d, 0x06, 0x48, 0x8a, 0x70, 0x5a, 0xb3, 0xcb, 0x08, + 0x6c, 0x80, 0x9a, 0xeb, 0x0c, 0x76, 0x22, 0xd4, 0xaa, 0x1f, 0xc2, 0xa9, 0x9a, 0x55, 0x16, 0x5a, 0x78, 0x3c, 0xdb, + 0xc8, 0x4a, 0xab, 0xcc, 0xd1, 0x6f, 0xc1, 0x76, 0xb2, 0x0f, 0x6f, 0x88, 0xb5, 0x24, 0x4c, 0xc1, 0x73, 0x9b, 0x3e, + 0x76, 0xbe, 0x7f, 0xf2, 0xda, 0x64, 0x90, 0xcd, 0x63, 0xcb, 0xef, 0x37, 0x4c, 0xcc, 0x93, 0xd7, 0x61, 0x55, 0xab, + 0x1a, 0x9f, 0xef, 0x9f, 0x7c, 0xd8, 0xd6, 0x0c, 0xca, 0x8b, 0x45, 0x65, 0xe3, 0x2b, 0xf8, 0x96, 0x34, 0x8d, 0x96, + 0x46, 0x38, 0x44, 0xac, 0xc0, 0x4a, 0x20, 0x45, 0x79, 0x51, 0xba, 0x46, 0x9e, 0xe3, 0x8c, 0xa8, 0x30, 0x50, 0x7d, + 0xd7, 0x8c, 0x9a, 0xc7, 0x78, 0x76, 0x36, 0xe2, 0x73, 0xba, 0x23, 0x36, 0x74, 0x83, 0x42, 0x36, 0x83, 0xd4, 0x19, + 0x05, 0x3a, 0xc3, 0x7b, 0x2d, 0xd4, 0xad, 0x8b, 0xaf, 0x4c, 0x11, 0x29, 0xaf, 0xc9, 0x16, 0x3c, 0x25, 0x2d, 0x9c, + 0x92, 0x16, 0x8e, 0x49, 0x3e, 0x68, 0x69, 0x01, 0xd1, 0x8d, 0xcb, 0x71, 0xb5, 0x98, 0x81, 0xac, 0x30, 0x73, 0x5a, + 0xb5, 0x00, 0x4e, 0xba, 0xb1, 0xf2, 0x3d, 0x2a, 0x99, 0x9e, 0x28, 0xb2, 0x78, 0x1f, 0x70, 0xcc, 0xd5, 0xc0, 0x67, + 0xec, 0x32, 0x85, 0xc4, 0x12, 0x58, 0x15, 0x96, 0x28, 0x2a, 0x9b, 0xb6, 0x4d, 0xd3, 0x38, 0x54, 0xfb, 0xc4, 0x71, + 0x1c, 0x02, 0xe7, 0xc6, 0xb1, 0xc9, 0xc3, 0xc9, 0x37, 0xbb, 0x3c, 0x3e, 0x38, 0x08, 0x74, 0xa7, 0x2f, 0x65, 0xc0, + 0x6d, 0x7d, 0x15, 0xb9, 0xfb, 0x56, 0xf3, 0x8a, 0x04, 0x29, 0xf8, 0x1b, 0x8d, 0x74, 0x58, 0x40, 0x18, 0x3a, 0x88, + 0xeb, 0x18, 0xb4, 0xc0, 0x2b, 0x5d, 0xaf, 0xbe, 0xfc, 0x46, 0xa3, 0x8c, 0xd2, 0xd6, 0xb1, 0x75, 0x83, 0xb3, 0xe2, + 0x2a, 0x28, 0x53, 0x7f, 0x5a, 0x1b, 0xf9, 0x52, 0x16, 0x04, 0xc4, 0x5c, 0x9a, 0x65, 0x76, 0x31, 0xce, 0x91, 0x60, + 0xd0, 0xee, 0x4b, 0x93, 0xb5, 0x80, 0x55, 0x76, 0x95, 0x69, 0x64, 0xd9, 0x59, 0x07, 0x45, 0xb6, 0x11, 0x44, 0xa5, + 0xa0, 0x51, 0xa3, 0x30, 0xe4, 0xfd, 0x7e, 0x33, 0xe7, 0x12, 0xe7, 0xc8, 0x38, 0xb9, 0x14, 0x14, 0x0a, 0x59, 0x9d, + 0x12, 0x29, 0x2f, 0xc9, 0x7c, 0x37, 0xc9, 0x9f, 0x38, 0x24, 0xff, 0x8c, 0x50, 0x87, 0xfc, 0xb5, 0x8b, 0x23, 0xe4, + 0xc6, 0xb9, 0x90, 0xdb, 0xaa, 0xd3, 0x39, 0x01, 0x27, 0x5a, 0x1d, 0xa3, 0xb5, 0xb0, 0xe2, 0x0e, 0x86, 0xe2, 0x9e, + 0x10, 0xe5, 0x86, 0xc4, 0x36, 0x06, 0x1c, 0x54, 0x41, 0x35, 0x98, 0x7a, 0x9b, 0x4f, 0xcf, 0xe5, 0x80, 0x27, 0x1f, + 0xee, 0x8e, 0x87, 0x9e, 0xce, 0x37, 0x4f, 0xae, 0x93, 0xfb, 0x09, 0xab, 0x76, 0x0e, 0x6e, 0x3d, 0x13, 0x14, 0xe6, + 0x2f, 0xe3, 0xd8, 0x75, 0xe6, 0xb3, 0x76, 0x08, 0xad, 0xfc, 0x03, 0x68, 0xdb, 0x6d, 0xd5, 0x82, 0x3a, 0xc3, 0x02, + 0x3f, 0xd2, 0x19, 0xa8, 0xb1, 0xd8, 0xc1, 0x3e, 0x4e, 0x54, 0x03, 0x9a, 0x25, 0xdb, 0xab, 0x9f, 0x15, 0x86, 0x4c, + 0x34, 0x68, 0x68, 0x09, 0xfc, 0x4f, 0x93, 0x3c, 0xd0, 0x8d, 0x92, 0x0b, 0x80, 0xa0, 0xb9, 0xc2, 0x53, 0x85, 0x30, + 0xdf, 0xaf, 0xbc, 0xef, 0x2f, 0xf7, 0x08, 0x99, 0x57, 0xde, 0xc7, 0x77, 0x55, 0xea, 0x15, 0x90, 0x05, 0x8a, 0xc0, + 0x7c, 0x2c, 0x0b, 0x74, 0xf8, 0xf2, 0xcc, 0x36, 0x57, 0x26, 0x64, 0x58, 0x69, 0xdc, 0x4e, 0x68, 0x53, 0xb9, 0xe5, + 0x74, 0xbd, 0x45, 0xc3, 0x5a, 0xed, 0x3e, 0xd4, 0xbe, 0x97, 0x0a, 0x46, 0x78, 0x7e, 0xaf, 0x5a, 0xdb, 0x71, 0x8b, + 0x8f, 0xeb, 0xf9, 0x2b, 0x6b, 0x9b, 0x12, 0xb2, 0x2c, 0xa7, 0x42, 0x3e, 0xa3, 0x63, 0x2e, 0x20, 0x66, 0x51, 0xe2, + 0x04, 0x15, 0xfb, 0x8e, 0xdf, 0x4e, 0xad, 0xcf, 0x09, 0x14, 0xac, 0x2d, 0x50, 0xfd, 0xfa, 0xa8, 0x82, 0xd6, 0xe7, + 0xeb, 0xbd, 0xe6, 0x07, 0x07, 0x1f, 0x2a, 0x34, 0x19, 0x28, 0x15, 0x14, 0x0e, 0xd3, 0xd2, 0x2a, 0x8d, 0x89, 0xe4, + 0xee, 0x07, 0xa5, 0x13, 0xc0, 0x32, 0x0c, 0x97, 0xf7, 0xbc, 0x24, 0xb2, 0x98, 0xac, 0xb3, 0x78, 0xe3, 0x9c, 0x60, + 0xae, 0xe1, 0x02, 0x1c, 0x1e, 0x4c, 0x6d, 0xed, 0x2d, 0xca, 0xab, 0x64, 0xd8, 0x12, 0x86, 0x53, 0x40, 0x56, 0xa0, + 0xcc, 0x10, 0x87, 0x02, 0xb7, 0x9a, 0x25, 0xa7, 0xa0, 0x57, 0x4e, 0x71, 0x1e, 0x4e, 0x21, 0xfd, 0xb5, 0x76, 0x64, + 0x11, 0xc2, 0x3a, 0x31, 0xc7, 0x49, 0x25, 0x38, 0x79, 0xb9, 0xcd, 0xa5, 0x6c, 0x89, 0x9a, 0x2a, 0xa9, 0xa3, 0x5a, + 0xa0, 0xb2, 0x43, 0x78, 0x15, 0x30, 0xa3, 0xb8, 0xd9, 0xb8, 0x19, 0x30, 0xe0, 0x67, 0x32, 0xd0, 0xc1, 0x28, 0x90, + 0x19, 0x3c, 0x5c, 0x04, 0xb5, 0xa9, 0xbb, 0x5c, 0x75, 0xc3, 0x06, 0x71, 0x53, 0x17, 0x4d, 0x5c, 0xc5, 0xf5, 0x4e, + 0x2b, 0x5e, 0x3a, 0xd6, 0x19, 0xd4, 0xd2, 0x72, 0xc1, 0x2a, 0x91, 0xc4, 0x59, 0xfe, 0x58, 0x27, 0x45, 0x97, 0x8d, + 0x30, 0x55, 0x60, 0xbc, 0x54, 0x7b, 0x40, 0x0b, 0xa0, 0xaf, 0xe5, 0x89, 0x74, 0x76, 0xd4, 0x3a, 0xb1, 0xd5, 0x9c, + 0x8e, 0xd4, 0x7f, 0x07, 0xa9, 0x2e, 0xeb, 0x67, 0xfe, 0xa5, 0x92, 0x85, 0x0c, 0xe7, 0x35, 0xc6, 0x9e, 0x29, 0xc6, + 0x8e, 0x40, 0x4f, 0xb3, 0x89, 0xdf, 0x7d, 0x93, 0xf1, 0xc2, 0x8c, 0x94, 0x33, 0x24, 0xf6, 0x75, 0x19, 0x2d, 0x77, + 0x7e, 0xaf, 0xed, 0x46, 0xc4, 0x08, 0x64, 0x01, 0x61, 0xc3, 0xd9, 0x33, 0x84, 0xf3, 0x46, 0xa3, 0x9b, 0x1f, 0xd3, + 0xca, 0x49, 0x52, 0xc1, 0xc8, 0x20, 0xa0, 0x0b, 0x04, 0x5f, 0x93, 0xa1, 0x10, 0xf2, 0xb7, 0x99, 0xd9, 0x39, 0xf8, + 0xda, 0x4f, 0xde, 0x05, 0x2e, 0x57, 0x73, 0xdb, 0x96, 0x41, 0x53, 0x58, 0x4f, 0x50, 0x05, 0x5c, 0xbe, 0xbe, 0x3b, + 0xc1, 0x03, 0xe0, 0xde, 0x6b, 0x63, 0x48, 0x45, 0x43, 0x5d, 0xa9, 0x59, 0x42, 0x79, 0xfa, 0xba, 0xa8, 0xca, 0x4a, + 0x74, 0x27, 0xeb, 0xca, 0xca, 0x98, 0x95, 0x24, 0x2f, 0x8a, 0x9c, 0x56, 0xe1, 0xfd, 0xb5, 0xf4, 0x4b, 0x25, 0x5c, + 0x36, 0xbd, 0xed, 0xa7, 0x73, 0x22, 0xb1, 0x43, 0xa8, 0x5f, 0xef, 0x8a, 0x7d, 0x54, 0x60, 0xc2, 0xb9, 0x36, 0x42, + 0xf1, 0xe7, 0x6d, 0x42, 0x11, 0x67, 0xe6, 0xc8, 0x2b, 0x81, 0xd8, 0xbe, 0x87, 0x40, 0x34, 0x6e, 0x76, 0x2b, 0x13, + 0x41, 0x1d, 0xa9, 0xc9, 0xc4, 0xfa, 0x96, 0x92, 0x0c, 0x33, 0xb3, 0x1b, 0xbd, 0xce, 0x6a, 0xc5, 0x06, 0x2d, 0x70, + 0x23, 0xf9, 0x3e, 0xfc, 0x6c, 0xeb, 0x9f, 0x0e, 0x27, 0xd6, 0x6e, 0xe0, 0x80, 0x95, 0x26, 0x0b, 0x0a, 0x21, 0xc1, + 0x39, 0x50, 0x49, 0x59, 0x8a, 0xa6, 0x0d, 0x05, 0x19, 0x02, 0x27, 0xac, 0x0c, 0x33, 0x01, 0xc4, 0x4a, 0x56, 0x18, + 0x03, 0x32, 0xd8, 0x9a, 0xfb, 0x67, 0xcd, 0xcb, 0x4f, 0x6b, 0xa2, 0x35, 0xb9, 0xa2, 0xd5, 0x87, 0x5a, 0xbe, 0x81, + 0x81, 0xc0, 0xe8, 0x87, 0x7b, 0xca, 0x04, 0xad, 0x44, 0x39, 0x72, 0xe5, 0x10, 0x6e, 0x81, 0x13, 0x6d, 0xef, 0x83, + 0x8e, 0xf0, 0x6e, 0x91, 0x26, 0x98, 0x3b, 0x74, 0xfd, 0x92, 0xc8, 0x1a, 0x2b, 0x99, 0x12, 0x63, 0x29, 0xe1, 0x58, + 0x91, 0xa9, 0x24, 0xd9, 0xa0, 0x35, 0x04, 0x05, 0xb4, 0x9b, 0x1e, 0x67, 0x95, 0x09, 0x9c, 0x36, 0x1a, 0x28, 0xb6, + 0xb3, 0x4e, 0x07, 0xac, 0x91, 0x0e, 0x31, 0xc5, 0xa9, 0x36, 0x4c, 0xce, 0x0e, 0x0e, 0x82, 0xb8, 0x9a, 0x77, 0x90, + 0x0e, 0x11, 0xe6, 0xab, 0x55, 0xa0, 0xc0, 0x8a, 0xd1, 0x6a, 0x15, 0xbb, 0x60, 0xa9, 0x6a, 0xe8, 0x36, 0xef, 0x4b, + 0x32, 0x57, 0x02, 0x70, 0x0e, 0x10, 0x36, 0x48, 0x10, 0x1b, 0xf7, 0x5e, 0x0c, 0xee, 0xa8, 0x46, 0x36, 0x48, 0x1b, + 0xed, 0xa1, 0xc3, 0xb8, 0x06, 0xe9, 0x90, 0xc4, 0x05, 0x3f, 0x38, 0xd8, 0xcb, 0x8d, 0x88, 0xfc, 0x09, 0x44, 0xd9, + 0x4f, 0x4a, 0xb2, 0xe8, 0x01, 0xdd, 0xdd, 0x58, 0x77, 0x06, 0x94, 0x14, 0x65, 0xb6, 0xd5, 0xb6, 0xab, 0x65, 0x41, + 0x94, 0x8d, 0xb0, 0x09, 0x06, 0xf7, 0xc1, 0xb2, 0x2f, 0xc9, 0xfc, 0x95, 0x2c, 0x73, 0xac, 0x7f, 0xde, 0x9a, 0x59, + 0x1d, 0x86, 0x61, 0x2c, 0x26, 0x2a, 0x96, 0x61, 0xc3, 0xb0, 0x8a, 0xf8, 0x8f, 0x0c, 0x98, 0xce, 0xc4, 0x83, 0x72, + 0xae, 0x21, 0xd1, 0xe0, 0x5b, 0xd5, 0xc6, 0xde, 0x25, 0xf9, 0x69, 0xab, 0x97, 0x41, 0x43, 0xf2, 0xfc, 0xb7, 0x42, + 0xf2, 0xd0, 0x40, 0xa2, 0xc9, 0x63, 0x0d, 0x67, 0x3b, 0x70, 0xf1, 0x93, 0x5c, 0xc3, 0xd9, 0x6e, 0xdc, 0x5a, 0x4c, + 0xfd, 0xb2, 0x0b, 0x3e, 0x87, 0x37, 0x68, 0x40, 0xab, 0x02, 0x07, 0xca, 0x47, 0xeb, 0xba, 0x97, 0x66, 0xa5, 0x20, + 0x4c, 0x25, 0x09, 0x58, 0xfd, 0x00, 0x54, 0xda, 0xa8, 0x63, 0xf8, 0xb2, 0x68, 0x8e, 0x1c, 0x97, 0x40, 0x3d, 0x75, + 0x05, 0xc8, 0xc9, 0x78, 0xdb, 0xe7, 0x07, 0x07, 0x60, 0x1b, 0x80, 0x12, 0x17, 0x8e, 0xe2, 0xb9, 0x5c, 0x08, 0x50, + 0xa5, 0x72, 0xfb, 0x1b, 0x8a, 0xe1, 0x16, 0x88, 0x2a, 0x83, 0x1f, 0x50, 0x30, 0x8f, 0xf3, 0x9c, 0x5d, 0xe9, 0x32, + 0xf3, 0x1b, 0x73, 0x62, 0x49, 0x39, 0xd7, 0x3a, 0x61, 0x86, 0xba, 0x99, 0xa1, 0xd3, 0x3a, 0xda, 0x5e, 0x5c, 0xd1, + 0x4c, 0xbe, 0x62, 0xb9, 0xa4, 0x19, 0x2c, 0xbf, 0xa2, 0x38, 0x58, 0x51, 0x8e, 0xe0, 0xc0, 0xd6, 0x7a, 0xc5, 0x49, + 0x72, 0x67, 0x17, 0x59, 0xd7, 0x81, 0xa6, 0x71, 0x96, 0xa4, 0x7a, 0x12, 0x37, 0x9f, 0xd1, 0xe6, 0x70, 0x96, 0x2d, + 0xdd, 0x7c, 0x9a, 0x4a, 0xd9, 0x50, 0xdc, 0x3d, 0x60, 0xc4, 0x4a, 0x02, 0x2b, 0x3d, 0xef, 0xd4, 0x5a, 0x20, 0xe2, + 0xbd, 0x63, 0x13, 0xdc, 0x95, 0x60, 0xe9, 0x70, 0xd4, 0xb0, 0x0e, 0xa7, 0xa5, 0x9b, 0x2f, 0xb7, 0x5e, 0x69, 0xdb, + 0x26, 0x1c, 0x14, 0x9d, 0x3c, 0xde, 0x6d, 0x59, 0xbd, 0xb6, 0x92, 0xc3, 0x4a, 0x0b, 0x76, 0x5f, 0xc6, 0x8c, 0x96, + 0x96, 0xbc, 0x90, 0x3d, 0x8a, 0xfb, 0x92, 0x3c, 0x87, 0x3b, 0x43, 0x2f, 0xe5, 0x2c, 0x5d, 0xbb, 0x1a, 0xd3, 0xdd, + 0x2f, 0xb5, 0xff, 0x7d, 0x19, 0xbc, 0xc4, 0xef, 0x21, 0xb0, 0xfb, 0x55, 0xd5, 0x7c, 0x33, 0xa0, 0xfb, 0x55, 0x85, + 0xa0, 0xaf, 0xa2, 0x8d, 0x76, 0x4e, 0x20, 0xb7, 0x13, 0x3e, 0x0d, 0x5b, 0xbe, 0xd5, 0x96, 0x7e, 0xd6, 0x61, 0x24, + 0x9d, 0x69, 0xa9, 0xce, 0x03, 0xae, 0xf2, 0xd4, 0x20, 0x5f, 0xae, 0x6e, 0x21, 0x51, 0x93, 0x61, 0xa8, 0x75, 0xf8, + 0x5d, 0xdb, 0x63, 0x64, 0x4c, 0xa6, 0xed, 0x8c, 0xaf, 0x63, 0x21, 0xf7, 0xe1, 0x94, 0xf1, 0x8d, 0x7b, 0x78, 0x53, + 0x02, 0x1e, 0xb4, 0xfb, 0x4d, 0xe1, 0x18, 0xdb, 0xb9, 0xbe, 0x07, 0xe4, 0x8e, 0x4f, 0xb8, 0xd5, 0xdd, 0xea, 0x56, + 0xc6, 0xd7, 0x60, 0xff, 0x23, 0x3c, 0xb5, 0x97, 0xe3, 0xa8, 0xe1, 0xc0, 0x34, 0x5a, 0x16, 0xa5, 0x53, 0x80, 0x6b, + 0xe5, 0x4d, 0x20, 0xcc, 0x0b, 0x15, 0xe0, 0xfe, 0x01, 0x7f, 0x63, 0x58, 0xe2, 0xb8, 0xe4, 0x38, 0x27, 0xf7, 0xe5, + 0x88, 0x1a, 0xfc, 0x32, 0x7e, 0x0f, 0x74, 0xac, 0x28, 0xb4, 0xb0, 0x54, 0xf4, 0x9c, 0x9b, 0x85, 0xec, 0x4c, 0x4b, + 0xc5, 0xb4, 0x4c, 0xa9, 0x51, 0xd3, 0x6c, 0xc9, 0xe3, 0xb4, 0x56, 0xb6, 0x2c, 0x4f, 0x55, 0x6d, 0x5e, 0xb4, 0x03, + 0x8b, 0x55, 0x68, 0x71, 0xb5, 0x0a, 0xea, 0xa8, 0x26, 0xcc, 0x89, 0x64, 0x20, 0xcc, 0x9c, 0x8c, 0x8a, 0x9a, 0x66, + 0xad, 0xfb, 0x04, 0x68, 0x3d, 0xa1, 0xc8, 0xea, 0xe6, 0x35, 0x38, 0x5c, 0x17, 0x82, 0xee, 0xee, 0xfa, 0x14, 0xb0, + 0x5e, 0x5d, 0x39, 0x91, 0x83, 0xa1, 0x9f, 0xcb, 0x54, 0xd9, 0x2a, 0xa7, 0x75, 0x0b, 0x7e, 0xd1, 0x1d, 0xc9, 0xb2, + 0x06, 0x75, 0x9b, 0xf5, 0x4e, 0xb2, 0xd1, 0x73, 0xbe, 0x2b, 0xd9, 0xa8, 0xa6, 0xed, 0xee, 0xb5, 0xd0, 0xdd, 0x69, + 0xa9, 0x7a, 0xae, 0xed, 0x4d, 0x7e, 0xc3, 0x74, 0x6d, 0xa0, 0x4d, 0x8d, 0x66, 0xcb, 0x55, 0xce, 0x8a, 0x62, 0x5c, + 0x5e, 0x26, 0x50, 0xb9, 0x3b, 0x63, 0x4d, 0xff, 0xc6, 0x6a, 0x54, 0xd7, 0x71, 0x83, 0x1f, 0xc8, 0x24, 0xe5, 0x97, + 0x71, 0xfa, 0x1e, 0xe6, 0xab, 0x2a, 0x5f, 0xde, 0x26, 0x22, 0x96, 0xd4, 0x70, 0x97, 0x0a, 0x86, 0x1f, 0x1c, 0x18, + 0x7e, 0xd0, 0x7c, 0xba, 0xea, 0x8f, 0x97, 0xaf, 0xca, 0x01, 0xa2, 0x71, 0x61, 0x59, 0xc6, 0xb9, 0xdc, 0x3e, 0xc7, + 0x3a, 0x0b, 0x3b, 0x2f, 0x59, 0xd8, 0xb9, 0x0c, 0xd6, 0x87, 0x0a, 0x82, 0x6f, 0xb6, 0x8f, 0xb2, 0xc9, 0xd9, 0xbe, + 0xa9, 0x0e, 0xfe, 0x37, 0xd1, 0x9d, 0x7d, 0x1c, 0x2e, 0x77, 0x14, 0x1e, 0xa9, 0x74, 0x15, 0x0d, 0xf2, 0x3b, 0x48, + 0x3b, 0x90, 0xa4, 0xe7, 0xdc, 0x39, 0xa8, 0xe4, 0x94, 0x4d, 0x04, 0x0a, 0x46, 0x8b, 0x5c, 0xf2, 0x99, 0x19, 0x33, + 0x37, 0xd7, 0x8c, 0x54, 0x25, 0xb8, 0xa2, 0x55, 0xb4, 0x3d, 0xaa, 0x5f, 0xe4, 0x5a, 0x7e, 0x64, 0x59, 0x12, 0xe5, + 0xd8, 0x48, 0x91, 0x3c, 0xca, 0x0a, 0x62, 0x93, 0x8d, 0x37, 0xeb, 0xf0, 0x98, 0x65, 0x2c, 0x9f, 0x52, 0x11, 0x70, + 0xb4, 0xdc, 0x35, 0x19, 0x87, 0x80, 0x8c, 0x9e, 0x0c, 0x7f, 0x5b, 0x5d, 0xf8, 0x0b, 0x61, 0x34, 0xf0, 0x03, 0xcd, + 0xa8, 0x9c, 0xf2, 0x04, 0x12, 0x53, 0xc2, 0xa4, 0xbc, 0xd1, 0x74, 0x70, 0xb0, 0x17, 0xf8, 0xca, 0x2d, 0x01, 0x57, + 0xbf, 0xdd, 0x1a, 0xd4, 0x5f, 0xc2, 0xf5, 0x9c, 0x6a, 0x6a, 0x8a, 0x96, 0x74, 0xfd, 0x26, 0x8b, 0x0c, 0x3f, 0xd2, + 0x5b, 0x2c, 0x50, 0x51, 0x44, 0x1a, 0x6a, 0x7f, 0xcc, 0x68, 0x9a, 0xf8, 0xf8, 0x23, 0xbd, 0x8d, 0xca, 0xdb, 0xe2, + 0xea, 0x72, 0xb3, 0xda, 0x40, 0x9f, 0x5f, 0x67, 0x3e, 0xae, 0x26, 0x89, 0x96, 0x05, 0xe6, 0x82, 0x4d, 0x80, 0x38, + 0xff, 0x46, 0x6f, 0x23, 0x3d, 0x1e, 0x73, 0x2e, 0xeb, 0xa1, 0xa5, 0x45, 0x7d, 0xe8, 0x14, 0xbb, 0xdb, 0x60, 0x0c, + 0x8a, 0x81, 0xea, 0x3b, 0x24, 0xb5, 0x76, 0x95, 0x79, 0x88, 0x50, 0x71, 0xdf, 0xa5, 0xe0, 0x2f, 0x5c, 0xd1, 0x26, + 0x6b, 0xa9, 0xaf, 0x6b, 0x9d, 0x28, 0x74, 0xa8, 0x72, 0x3d, 0xce, 0x03, 0x61, 0x4f, 0x9d, 0xb9, 0x83, 0xe0, 0x38, + 0xc2, 0xbe, 0x90, 0x66, 0xd0, 0xe8, 0x5b, 0x9d, 0x12, 0x52, 0x45, 0x92, 0x5e, 0x57, 0xfd, 0xbc, 0xf3, 0x00, 0xf0, + 0x0e, 0x29, 0x2d, 0xb1, 0xba, 0x8e, 0x59, 0xd8, 0x74, 0xd1, 0xef, 0x24, 0x09, 0x96, 0x76, 0x09, 0x91, 0x70, 0xb1, + 0x28, 0x0b, 0xa0, 0x42, 0x43, 0x5f, 0x3a, 0x03, 0x90, 0x8d, 0x03, 0xb6, 0x21, 0x35, 0x33, 0x25, 0x35, 0x43, 0x07, + 0xe3, 0x3b, 0xa4, 0x24, 0x55, 0xc8, 0x50, 0x4a, 0xa4, 0x12, 0x7a, 0x66, 0x73, 0x0d, 0x09, 0xb9, 0x1b, 0x5a, 0x5e, + 0x9f, 0xd3, 0x7b, 0x9e, 0xd5, 0xc0, 0x0a, 0xd4, 0x38, 0xa8, 0x88, 0x60, 0x49, 0x54, 0x37, 0x28, 0xac, 0x3b, 0x47, + 0xd8, 0xfc, 0xd6, 0x80, 0x87, 0x76, 0x59, 0xc4, 0xa2, 0x24, 0x98, 0xa2, 0xa5, 0x08, 0xa6, 0x38, 0x83, 0x7c, 0x44, + 0x5e, 0x94, 0xf0, 0x53, 0x77, 0x37, 0x6a, 0xd9, 0xca, 0xdb, 0xaf, 0xf8, 0x81, 0x32, 0x2f, 0x21, 0x47, 0x13, 0x0b, + 0xcb, 0x53, 0x44, 0xa0, 0xee, 0xda, 0x39, 0xdb, 0xf6, 0x95, 0x49, 0xd1, 0x31, 0x80, 0x7d, 0x27, 0x83, 0xa5, 0xb3, + 0x0a, 0xf7, 0x2e, 0xb7, 0xb9, 0xf2, 0x67, 0x82, 0x7d, 0x55, 0x12, 0x69, 0x90, 0x93, 0x35, 0x89, 0x73, 0x77, 0xae, + 0xe5, 0xcf, 0x0b, 0x2a, 0x6e, 0xcf, 0x28, 0xe4, 0x3a, 0x73, 0xb8, 0xeb, 0x5b, 0x6d, 0x43, 0x95, 0xa7, 0xde, 0xcf, + 0x94, 0xb2, 0x52, 0xd4, 0x2f, 0x01, 0xae, 0x5f, 0x11, 0x2c, 0x54, 0xb4, 0xd1, 0x71, 0xc4, 0xe8, 0xd3, 0x42, 0x77, + 0x5e, 0x9e, 0xa4, 0x5d, 0x06, 0xfe, 0xb5, 0x0a, 0xd3, 0x26, 0x58, 0x80, 0xb9, 0x7b, 0x21, 0x75, 0x90, 0x0f, 0xd7, + 0xbd, 0x32, 0x50, 0x04, 0xe1, 0xbb, 0x6c, 0xf7, 0x52, 0xb7, 0x65, 0xcd, 0xee, 0x5e, 0x6a, 0x2d, 0xe8, 0xa7, 0x52, + 0x7e, 0xb0, 0x99, 0xa7, 0xbc, 0xbc, 0xcc, 0x8a, 0x02, 0x15, 0x00, 0xde, 0xf7, 0xdd, 0x20, 0xf8, 0xde, 0x24, 0x0d, + 0x86, 0x10, 0x8b, 0x3d, 0x4b, 0xb9, 0x65, 0xe2, 0xd5, 0xfc, 0xdf, 0x6f, 0xcc, 0xff, 0xbd, 0x73, 0xe5, 0x14, 0x4c, + 0xa3, 0x49, 0x46, 0x13, 0xcb, 0x3a, 0x91, 0x26, 0x40, 0xa5, 0xb7, 0xe5, 0x92, 0x7c, 0xbc, 0x88, 0x40, 0xe3, 0x5a, + 0x8e, 0x79, 0x26, 0x9b, 0xe3, 0x78, 0xc6, 0xd2, 0xdb, 0x68, 0xc1, 0x9a, 0x33, 0x9e, 0xf1, 0x7c, 0x1e, 0x8f, 0x28, + 0xce, 0x6f, 0x73, 0x49, 0x67, 0xcd, 0x05, 0xc3, 0x2f, 0x69, 0x7a, 0x45, 0x25, 0x1b, 0xc5, 0xd8, 0x3f, 0x11, 0x2c, + 0x4e, 0xbd, 0x37, 0xb1, 0x10, 0xfc, 0xda, 0xc7, 0xef, 0xf8, 0x25, 0x97, 0x1c, 0xbf, 0xbd, 0xb9, 0x9d, 0xd0, 0x0c, + 0x7f, 0xb8, 0x5c, 0x64, 0x72, 0x81, 0xf3, 0x38, 0xcb, 0x9b, 0x39, 0x15, 0x6c, 0xdc, 0x1d, 0xf1, 0x94, 0x8b, 0x26, + 0xa4, 0x6c, 0xcf, 0x68, 0x94, 0xb2, 0xc9, 0x54, 0x7a, 0x49, 0x2c, 0x3e, 0x76, 0x9b, 0xcd, 0xb9, 0x60, 0xb3, 0x58, + 0xdc, 0x36, 0x55, 0x8b, 0xe8, 0xb3, 0xd6, 0x51, 0xfc, 0xf9, 0xf8, 0x61, 0x57, 0x8a, 0x38, 0xcb, 0x19, 0x6c, 0x53, + 0x14, 0xa7, 0xa9, 0x77, 0xf4, 0xa8, 0x35, 0xcb, 0xf7, 0x74, 0x20, 0x2f, 0xce, 0x64, 0x71, 0x81, 0x3f, 0x02, 0xdc, + 0xe1, 0xa5, 0xcc, 0xf0, 0xe5, 0x42, 0x4a, 0x9e, 0x2d, 0x47, 0x0b, 0x91, 0x73, 0x11, 0xcd, 0x39, 0xcb, 0x24, 0x15, + 0xdd, 0x4b, 0x2e, 0x12, 0x2a, 0x9a, 0x22, 0x4e, 0xd8, 0x22, 0x8f, 0x1e, 0xce, 0x6f, 0xba, 0xa0, 0x59, 0x4c, 0x04, + 0x5f, 0x64, 0x89, 0x99, 0x8b, 0x65, 0x53, 0x2a, 0x98, 0x74, 0x2b, 0xd4, 0x2b, 0x4c, 0xa2, 0x94, 0x65, 0x34, 0x16, + 0xcd, 0x09, 0x74, 0x06, 0xb3, 0xa8, 0x95, 0xd0, 0x09, 0x16, 0x93, 0xcb, 0x38, 0x68, 0x77, 0x9e, 0x60, 0xfb, 0x37, + 0x7c, 0x84, 0xbc, 0xd6, 0xf6, 0xe2, 0x76, 0xab, 0xf5, 0x27, 0xd4, 0x5d, 0x9b, 0x45, 0x01, 0x14, 0xb5, 0xe7, 0x37, + 0x5e, 0xce, 0x21, 0xa7, 0x6d, 0x5b, 0xcf, 0xee, 0x3c, 0x4e, 0x20, 0x21, 0x38, 0xea, 0xcc, 0x6f, 0x0a, 0x58, 0x5d, + 0xa4, 0x93, 0x4c, 0xcd, 0x22, 0xcd, 0xd3, 0xf2, 0xb7, 0x42, 0xfc, 0x74, 0x3b, 0xc4, 0x1d, 0x0b, 0x71, 0x85, 0xf5, + 0x66, 0xb2, 0x10, 0x2a, 0xb6, 0x1a, 0xb5, 0x73, 0x0d, 0xc8, 0x94, 0x5f, 0x51, 0x61, 0xe1, 0x50, 0x0f, 0xbf, 0x19, + 0x8c, 0xce, 0x76, 0x30, 0x9e, 0x7e, 0x0a, 0x0c, 0x91, 0x25, 0xcb, 0xfa, 0xbe, 0xb6, 0x05, 0x9d, 0x75, 0xa7, 0x14, + 0xe8, 0x29, 0xea, 0xc0, 0xef, 0x6b, 0x96, 0xc8, 0xa9, 0xfe, 0xa9, 0xc8, 0xf9, 0x5a, 0xd7, 0x3d, 0x6a, 0xb5, 0xf4, + 0x73, 0xce, 0x7e, 0xa1, 0x51, 0x3b, 0x84, 0x06, 0xc5, 0x05, 0xfe, 0x5b, 0x79, 0x99, 0xb7, 0xce, 0x3d, 0xf1, 0x0f, + 0xee, 0x2d, 0x5f, 0x27, 0x49, 0xb1, 0xba, 0x11, 0x8d, 0x85, 0x95, 0x95, 0x5a, 0xf8, 0x80, 0xdb, 0x4e, 0x9d, 0x27, + 0xc2, 0x7a, 0xe5, 0x2d, 0x4e, 0xd6, 0xff, 0x41, 0xe7, 0x5d, 0x44, 0x10, 0xe9, 0x70, 0x92, 0x0d, 0x79, 0x37, 0xeb, + 0x91, 0x56, 0x37, 0x6b, 0x36, 0x51, 0xc0, 0x89, 0x18, 0x64, 0x26, 0x3d, 0x2f, 0x60, 0x7d, 0xae, 0x8c, 0xed, 0x1c, + 0x45, 0x1c, 0xae, 0x9a, 0xae, 0x56, 0x55, 0x18, 0x80, 0xa9, 0xeb, 0x1a, 0x7f, 0x93, 0xa6, 0x01, 0xce, 0x1d, 0x4e, + 0x9e, 0xd9, 0x17, 0xbb, 0x08, 0xcb, 0x2b, 0x52, 0x3e, 0x52, 0x98, 0x0b, 0xe7, 0xb1, 0x9c, 0x82, 0x97, 0xa2, 0x14, + 0x3f, 0x55, 0x12, 0x93, 0x7f, 0xe8, 0xa3, 0xbe, 0x28, 0x33, 0xdc, 0x20, 0x93, 0x4f, 0x14, 0x30, 0xca, 0x37, 0x92, + 0xc0, 0x88, 0xf8, 0x17, 0xa2, 0x6d, 0x3a, 0x6b, 0xd1, 0x8d, 0xef, 0x6b, 0xd1, 0xd1, 0x4c, 0x32, 0x95, 0xbb, 0x6d, + 0x23, 0x0e, 0xd3, 0x38, 0x3f, 0x1f, 0xe9, 0xbb, 0x92, 0x79, 0x75, 0x33, 0x20, 0x56, 0xd0, 0x6b, 0x23, 0x8d, 0x0a, + 0x65, 0x8f, 0x7e, 0x2f, 0x77, 0xda, 0x27, 0xe2, 0x2e, 0xfb, 0xa4, 0x5c, 0x78, 0xce, 0x17, 0x62, 0x04, 0xe1, 0x48, + 0x23, 0xf5, 0x36, 0x1d, 0x37, 0xbe, 0x52, 0x31, 0x7c, 0x2c, 0x9d, 0x4c, 0x50, 0x89, 0x99, 0xfb, 0x52, 0x09, 0xaa, + 0x42, 0x5e, 0xfa, 0xbe, 0x86, 0x11, 0x71, 0x76, 0x49, 0x20, 0xb3, 0x13, 0x95, 0xd4, 0x18, 0x64, 0xa4, 0x97, 0x85, + 0x8b, 0x8c, 0xfd, 0xbc, 0xa0, 0xe7, 0x0c, 0x74, 0x4d, 0x16, 0xb2, 0x44, 0xc5, 0x9a, 0x40, 0xf6, 0x35, 0xdb, 0x10, + 0xbc, 0x60, 0x89, 0xde, 0x98, 0x4c, 0x55, 0x9a, 0xdc, 0x26, 0xbf, 0xe9, 0x83, 0xbf, 0x18, 0xb4, 0x03, 0x86, 0x13, + 0x3e, 0x8b, 0x59, 0x16, 0x29, 0x97, 0x6f, 0x39, 0x58, 0x04, 0xad, 0x31, 0x4b, 0xa2, 0xcc, 0x6c, 0x4f, 0x1b, 0x85, + 0x3f, 0x71, 0x96, 0xa9, 0xae, 0x45, 0x97, 0x2b, 0x84, 0x6a, 0xf4, 0x11, 0x8b, 0xe0, 0x13, 0x2d, 0xd7, 0x38, 0xc2, + 0x6e, 0x75, 0x79, 0xed, 0xbc, 0xb6, 0x03, 0xad, 0xb5, 0x8d, 0xd2, 0x46, 0x00, 0x5f, 0x2f, 0xcd, 0xb9, 0x90, 0x41, + 0x30, 0xc5, 0x29, 0x22, 0xbd, 0xa9, 0x72, 0x76, 0x1d, 0xa7, 0xea, 0xbf, 0x7e, 0xb3, 0x1d, 0xb5, 0x4b, 0xf3, 0xbd, + 0x76, 0x1b, 0x58, 0x27, 0x47, 0x99, 0x1b, 0xa5, 0x6a, 0x19, 0xe5, 0x6f, 0xbd, 0xd4, 0xea, 0xb9, 0x5c, 0x2e, 0x36, + 0xc7, 0x4d, 0x8b, 0xaa, 0xa0, 0x06, 0x84, 0x0a, 0x16, 0xed, 0x98, 0x0a, 0x15, 0xd5, 0xba, 0x4b, 0x55, 0xf2, 0x42, + 0x8b, 0xe8, 0xf3, 0xfd, 0xa5, 0x30, 0x33, 0x16, 0x17, 0xcc, 0x3a, 0x99, 0xea, 0x24, 0x57, 0x18, 0x8c, 0x38, 0x7a, + 0xe8, 0xb6, 0x66, 0x1a, 0x96, 0x5b, 0x22, 0xb6, 0xd2, 0x6d, 0xa8, 0x1f, 0xa9, 0x20, 0x55, 0xb8, 0x6b, 0x63, 0x00, + 0xc8, 0xd5, 0xdb, 0x06, 0x18, 0x98, 0xad, 0xb9, 0xb4, 0x4b, 0x00, 0x6d, 0x6c, 0x4c, 0xe1, 0x22, 0xcd, 0xc5, 0xfe, + 0xf2, 0x1b, 0x59, 0x1c, 0x3a, 0x4d, 0xd5, 0x6f, 0x96, 0xc0, 0xff, 0x20, 0x01, 0x97, 0x5a, 0x29, 0x8d, 0xfc, 0xaf, + 0xdf, 0x9e, 0xbd, 0xf7, 0xf1, 0x25, 0x4f, 0x6e, 0x23, 0x5f, 0x8a, 0x05, 0xf5, 0x0b, 0x14, 0xca, 0x29, 0xcd, 0xca, + 0x97, 0xf1, 0xf0, 0x94, 0x86, 0x29, 0x9f, 0xe8, 0x4b, 0x99, 0xeb, 0x46, 0xf2, 0xe8, 0xe2, 0x58, 0xbd, 0x64, 0xaa, + 0x77, 0x2c, 0xf5, 0xeb, 0xbd, 0xa4, 0x80, 0x9f, 0x3d, 0x08, 0xa1, 0x1c, 0x1f, 0xca, 0xa9, 0x7a, 0x38, 0x83, 0x03, + 0xa3, 0x9e, 0xf6, 0x97, 0x1b, 0xc4, 0xd4, 0x87, 0x21, 0xa6, 0x3d, 0xbd, 0x84, 0x5c, 0xb5, 0xba, 0x88, 0x46, 0x17, + 0x17, 0xc5, 0xf1, 0x21, 0x8c, 0x75, 0x68, 0xc7, 0x05, 0x08, 0x6d, 0xff, 0x92, 0xc0, 0xe0, 0x65, 0x43, 0x82, 0xf4, + 0x60, 0x08, 0x98, 0x37, 0xe9, 0xc1, 0x22, 0x81, 0xc0, 0xa0, 0x77, 0x52, 0x96, 0xa8, 0x13, 0xab, 0x8b, 0x76, 0x41, + 0xa0, 0x1b, 0x56, 0x74, 0xaf, 0xbd, 0xa9, 0xd5, 0xfe, 0x5a, 0x90, 0x12, 0x17, 0xba, 0x0b, 0x04, 0xff, 0x2b, 0xc8, + 0x8e, 0x0f, 0x35, 0x1e, 0x2e, 0xdc, 0x57, 0x9b, 0xe8, 0xd7, 0x0e, 0x94, 0xd8, 0x1a, 0xe4, 0x12, 0x7f, 0x94, 0xf8, + 0xe3, 0x85, 0x6a, 0x6a, 0x85, 0x11, 0x68, 0x49, 0x20, 0xb4, 0x5b, 0x56, 0xeb, 0x18, 0xf1, 0x34, 0x8d, 0xe7, 0x39, + 0x8d, 0xec, 0x0f, 0x23, 0x97, 0x40, 0xbc, 0x6d, 0x2a, 0x02, 0x26, 0xbd, 0xe6, 0x14, 0xd4, 0x85, 0x4d, 0x2d, 0xe5, + 0x2a, 0x16, 0x41, 0xb3, 0x39, 0x6a, 0x5e, 0x4e, 0x50, 0x21, 0xa7, 0x4b, 0x57, 0xaa, 0x3d, 0x6e, 0xb5, 0xba, 0x90, + 0x0b, 0xd9, 0x8c, 0x53, 0x36, 0xc9, 0xa2, 0x94, 0x8e, 0x65, 0x21, 0xe1, 0x96, 0xda, 0xd2, 0xaa, 0x11, 0x61, 0xe7, + 0x91, 0xa0, 0x33, 0x2f, 0x84, 0x7f, 0xef, 0x9e, 0xb8, 0x90, 0x49, 0x94, 0xc9, 0x69, 0x53, 0x65, 0xdd, 0xc2, 0x9d, + 0x01, 0x39, 0xad, 0x3d, 0x2f, 0x9d, 0x89, 0x46, 0x14, 0x54, 0xac, 0x42, 0x0a, 0x4f, 0x4e, 0xb1, 0x14, 0x6e, 0xbb, + 0x0c, 0x2d, 0x37, 0x56, 0xb0, 0x29, 0xe9, 0x8f, 0x50, 0x91, 0x2b, 0xc5, 0x78, 0xb3, 0xb1, 0x55, 0x97, 0xea, 0x4f, + 0x1b, 0xe8, 0x73, 0x14, 0xbb, 0x42, 0x3b, 0x96, 0x97, 0xba, 0xc7, 0x7d, 0x90, 0x59, 0x53, 0x39, 0xb1, 0xdb, 0x03, + 0x15, 0x2c, 0x9b, 0x2f, 0xe4, 0x40, 0x39, 0xb5, 0x05, 0x5c, 0x90, 0x18, 0x62, 0xa7, 0x04, 0x70, 0x30, 0x5c, 0x6a, + 0x60, 0x46, 0x71, 0x3a, 0x0a, 0x00, 0x22, 0xaf, 0xe9, 0x3d, 0x15, 0x74, 0x86, 0xba, 0x33, 0x96, 0x35, 0x75, 0xdd, + 0x23, 0x47, 0x2d, 0x09, 0x9f, 0xc0, 0x53, 0x11, 0xaa, 0xd1, 0xb0, 0xca, 0x5d, 0xdd, 0x82, 0xcb, 0x8b, 0x61, 0x51, + 0x74, 0x85, 0x0c, 0x06, 0xaf, 0x03, 0x34, 0xc4, 0xbf, 0x38, 0x2f, 0x67, 0xf1, 0xed, 0x51, 0xf1, 0x71, 0x07, 0xed, + 0x68, 0xe2, 0x9e, 0x05, 0xd5, 0xec, 0x17, 0x02, 0x0d, 0xdf, 0x05, 0x3e, 0xcd, 0xe7, 0x4d, 0xcd, 0xbb, 0x9a, 0x8a, + 0x64, 0x7d, 0xe8, 0x8a, 0x8c, 0xa7, 0xf6, 0x7b, 0xb9, 0x54, 0x6c, 0xc9, 0x5c, 0xd2, 0xd0, 0xce, 0x84, 0x61, 0x79, + 0xa9, 0xc7, 0x3c, 0xbb, 0xd7, 0x78, 0x50, 0x8d, 0x9f, 0x5c, 0x9c, 0xd4, 0x79, 0x1c, 0xf0, 0xa5, 0xf2, 0x05, 0x76, + 0x71, 0x9a, 0xc2, 0x84, 0x17, 0x56, 0x7d, 0x71, 0x5f, 0xfa, 0x31, 0x90, 0xc3, 0x00, 0x15, 0xe6, 0x9c, 0x3e, 0x53, + 0x2a, 0xa5, 0xf3, 0xd6, 0xbc, 0x3d, 0x69, 0x83, 0x45, 0x5a, 0xfa, 0x32, 0x08, 0x77, 0xd7, 0xf2, 0xa2, 0xbb, 0x15, + 0xef, 0xd2, 0x0a, 0xa9, 0xa7, 0x16, 0x44, 0x7c, 0x91, 0x25, 0xbe, 0xf7, 0x97, 0x51, 0xca, 0x46, 0x1f, 0x89, 0xbf, + 0xbf, 0x0c, 0xd0, 0xe6, 0xb5, 0x47, 0xc5, 0x15, 0x2c, 0xc3, 0x46, 0x75, 0x47, 0x7a, 0x16, 0x3a, 0xbc, 0x58, 0xbf, + 0x15, 0xc7, 0xef, 0xed, 0x2f, 0x81, 0xf1, 0xe8, 0x79, 0x7a, 0x17, 0xc5, 0x79, 0xf5, 0xae, 0xab, 0x0a, 0x0a, 0x40, + 0xb3, 0x2e, 0xf7, 0x14, 0x51, 0x11, 0xff, 0x93, 0x94, 0xe6, 0x7b, 0x9a, 0xa9, 0x01, 0x9c, 0xd2, 0xf0, 0x37, 0xdf, + 0xfb, 0x4b, 0x59, 0x46, 0x4b, 0x8f, 0x86, 0x4a, 0xc9, 0x20, 0x3e, 0xcc, 0x05, 0x66, 0x6c, 0x98, 0x50, 0x19, 0xb3, + 0x54, 0x77, 0xe9, 0x5a, 0x03, 0x7c, 0x6d, 0x45, 0xab, 0x55, 0x5e, 0x5f, 0x0b, 0xab, 0x63, 0x50, 0xad, 0xec, 0xf8, + 0xb0, 0x82, 0x5b, 0xad, 0x4c, 0x9d, 0x49, 0x37, 0x34, 0x58, 0xad, 0x50, 0xd7, 0x79, 0x7f, 0x19, 0xa9, 0x6b, 0x43, + 0x00, 0x20, 0x37, 0x00, 0x42, 0xd0, 0x5a, 0x5f, 0x8b, 0x09, 0x52, 0xc2, 0x43, 0x19, 0x8b, 0x09, 0x95, 0x6b, 0x88, + 0x4d, 0x75, 0x8e, 0x6a, 0xd7, 0x06, 0xa8, 0x37, 0xa0, 0x8d, 0xeb, 0xd0, 0x5e, 0x00, 0xd2, 0xfb, 0xfb, 0x4b, 0x56, + 0x90, 0xfd, 0x25, 0xcd, 0x46, 0x3c, 0xa1, 0x1f, 0xde, 0x7d, 0x09, 0x97, 0x1c, 0x79, 0x06, 0x86, 0xc5, 0x14, 0x81, + 0xe0, 0x54, 0x9b, 0xa3, 0x45, 0x08, 0x57, 0x22, 0x44, 0x73, 0x02, 0x4f, 0xcd, 0xa5, 0x40, 0x2c, 0x7c, 0xaf, 0xaf, + 0x21, 0xa7, 0x89, 0x86, 0x99, 0x64, 0xaa, 0x17, 0x2f, 0x8e, 0x0f, 0x75, 0x6b, 0x2d, 0x02, 0x74, 0x23, 0x40, 0x82, + 0x3a, 0xa7, 0x15, 0x0e, 0x20, 0xaf, 0xd9, 0xc5, 0x43, 0xc2, 0xae, 0x4a, 0x62, 0x53, 0x17, 0xa8, 0x7a, 0xc7, 0x69, + 0x7c, 0x49, 0xd3, 0xde, 0xfe, 0x32, 0x5b, 0xad, 0x5a, 0xc5, 0xf1, 0xa1, 0x7e, 0xf4, 0x8e, 0x15, 0xdf, 0xd0, 0x2f, + 0xbc, 0x54, 0x5b, 0x0c, 0xb7, 0x12, 0x21, 0xdb, 0xd3, 0xa6, 0x39, 0x45, 0x66, 0x80, 0xc2, 0xf7, 0x54, 0x82, 0x85, + 0x6a, 0x54, 0x2a, 0x44, 0x85, 0xef, 0xb1, 0x64, 0xb3, 0x2c, 0x97, 0x74, 0x0e, 0xa5, 0xd3, 0xd5, 0xaa, 0x5d, 0xf8, + 0xde, 0x8c, 0x65, 0xf0, 0x94, 0xad, 0x56, 0xea, 0xc2, 0xdf, 0x8c, 0x65, 0x41, 0x0b, 0xc8, 0xd6, 0xf7, 0x66, 0xf1, + 0x8d, 0x5a, 0xb0, 0xad, 0x89, 0x6f, 0x82, 0xb6, 0xa9, 0x0a, 0x4b, 0xfc, 0xe4, 0x40, 0x71, 0xd5, 0x8e, 0xa6, 0x66, + 0x47, 0x13, 0xbc, 0xd0, 0x57, 0x99, 0x48, 0x90, 0x90, 0x74, 0xfb, 0x8e, 0x26, 0x76, 0x47, 0x17, 0x3b, 0x76, 0x74, + 0x71, 0xc7, 0x8e, 0xc6, 0x66, 0xf7, 0xbc, 0x12, 0x77, 0x7c, 0xb5, 0x6a, 0xb7, 0x2a, 0xec, 0x1d, 0x1f, 0x26, 0xec, + 0x0a, 0x76, 0x03, 0xd4, 0x3c, 0xc9, 0x66, 0x74, 0x3b, 0x51, 0xd6, 0x51, 0x4c, 0x7f, 0x15, 0x26, 0x2b, 0x2c, 0x64, + 0x75, 0x2c, 0xb8, 0x74, 0x5d, 0xc6, 0xdc, 0xfe, 0x48, 0xca, 0x66, 0x80, 0x87, 0x1c, 0xf0, 0x30, 0x35, 0x78, 0xb8, + 0x28, 0xce, 0x41, 0x24, 0xa8, 0xe5, 0xdc, 0x8b, 0xf4, 0xa0, 0xb5, 0xdf, 0xdb, 0x4d, 0x62, 0x10, 0x0d, 0xbf, 0xe6, + 0x22, 0xf1, 0x23, 0xdd, 0xf4, 0x57, 0x61, 0x66, 0xc6, 0x32, 0x93, 0x5b, 0xb5, 0x93, 0xb4, 0xaa, 0x7a, 0x97, 0xc0, + 0x3a, 0x8f, 0x1e, 0xe9, 0x16, 0xf3, 0x58, 0x4a, 0x2a, 0x32, 0x43, 0xa8, 0xbe, 0xff, 0xff, 0x05, 0xd1, 0x6d, 0x61, + 0x23, 0xb1, 0x65, 0x23, 0x96, 0xde, 0x8c, 0x7e, 0x6e, 0x58, 0xbc, 0x96, 0x46, 0x7b, 0x95, 0xc2, 0x7a, 0x8b, 0x5c, + 0x1b, 0x41, 0x17, 0x81, 0xc9, 0xb2, 0x98, 0xd1, 0xe4, 0x5c, 0xf1, 0xe3, 0xfe, 0xe8, 0xc2, 0xe8, 0xa7, 0x6b, 0xd2, + 0xad, 0xea, 0x80, 0xfd, 0x1f, 0x17, 0x9d, 0x27, 0x0f, 0x4f, 0x7d, 0xac, 0x59, 0x3a, 0x1f, 0x8f, 0x7d, 0x54, 0x78, + 0xf7, 0xeb, 0xd6, 0x7e, 0xf8, 0xe3, 0xe2, 0x8b, 0x17, 0xad, 0x2f, 0xca, 0xce, 0x99, 0x8f, 0x8a, 0x0b, 0x13, 0xce, + 0xb7, 0x92, 0xc9, 0x81, 0xd7, 0xae, 0x68, 0x1c, 0x67, 0xbb, 0x97, 0x33, 0x70, 0x97, 0x93, 0xcf, 0x29, 0x4d, 0xb0, + 0xef, 0xf9, 0x78, 0xa3, 0xf4, 0x3c, 0xa5, 0x57, 0xd4, 0xbe, 0x68, 0x70, 0xcb, 0x64, 0x5b, 0x7a, 0x8c, 0xf8, 0x22, + 0x93, 0x26, 0xaf, 0xc1, 0x70, 0x56, 0x67, 0x49, 0x17, 0x6a, 0x0d, 0xae, 0x49, 0x70, 0xab, 0xc5, 0x5a, 0x5d, 0x58, + 0x15, 0x17, 0xd8, 0x77, 0x00, 0xd8, 0x09, 0x59, 0x7f, 0x47, 0x79, 0xd4, 0xc2, 0xad, 0x5d, 0xb0, 0xe1, 0x36, 0x8a, + 0x7c, 0x7f, 0x68, 0xf1, 0xa4, 0x5c, 0x93, 0xb5, 0xf7, 0x43, 0xec, 0xc4, 0xd7, 0x27, 0x31, 0x70, 0x29, 0x60, 0xb0, + 0x8c, 0xe6, 0xf9, 0x4e, 0x04, 0x94, 0x9b, 0x88, 0xfd, 0xaa, 0xb5, 0xbf, 0x63, 0x14, 0xdc, 0xc2, 0x70, 0xc2, 0x14, + 0xc0, 0x65, 0x80, 0xd4, 0xb4, 0xa2, 0xe3, 0x31, 0x1d, 0x95, 0x9e, 0x5d, 0x08, 0x75, 0x8d, 0x59, 0x2a, 0x21, 0xe2, + 0xa3, 0x42, 0x31, 0xfe, 0x1b, 0x9e, 0x51, 0x1f, 0xd9, 0xe4, 0x4d, 0x03, 0xbf, 0x11, 0xf7, 0xdb, 0xe1, 0xd1, 0x23, + 0xd6, 0x61, 0x31, 0xb3, 0xac, 0x56, 0xd6, 0xab, 0x53, 0x2b, 0xaf, 0x23, 0x92, 0x2b, 0xb7, 0xcd, 0xae, 0x03, 0x74, + 0xbf, 0x63, 0xb2, 0x6c, 0x7f, 0xf1, 0xa8, 0xdd, 0x2a, 0x7c, 0xec, 0xc3, 0x70, 0xf7, 0x3d, 0x25, 0xaa, 0xd7, 0x11, + 0xf4, 0x5a, 0x64, 0xbf, 0xa6, 0x5f, 0xa7, 0xfd, 0x79, 0xdb, 0xc7, 0xfa, 0xbd, 0x01, 0xa8, 0x28, 0x99, 0xc1, 0x08, + 0x7c, 0x9d, 0xbf, 0x7b, 0x29, 0xf5, 0xc1, 0xef, 0x07, 0xcf, 0xe3, 0x76, 0xcb, 0xc7, 0x7e, 0x2e, 0xf9, 0xfc, 0x57, + 0x2c, 0xe1, 0xc8, 0xc7, 0xfe, 0x28, 0xe5, 0x39, 0x75, 0xd7, 0xa0, 0xb5, 0xd7, 0xdf, 0xbf, 0x08, 0x0d, 0xd1, 0x5c, + 0xd0, 0x3c, 0xf7, 0xdc, 0xf1, 0x0d, 0x29, 0x7d, 0x82, 0x61, 0x6e, 0xa5, 0xb8, 0x9c, 0x4a, 0x85, 0x17, 0x7d, 0xa5, + 0xdf, 0xa5, 0x2a, 0x5d, 0xb6, 0x41, 0x6c, 0x4a, 0x04, 0x94, 0x8c, 0x4d, 0x2b, 0x53, 0x9f, 0x9c, 0x79, 0xcb, 0xd1, + 0xd3, 0x13, 0xeb, 0x10, 0xf0, 0xe6, 0x04, 0xb5, 0x92, 0x19, 0xcb, 0xce, 0xb7, 0x94, 0xc6, 0x37, 0x5b, 0x4a, 0x41, + 0x43, 0x2b, 0xa1, 0x33, 0x6f, 0x9b, 0xf9, 0x34, 0xd6, 0x2b, 0x3d, 0xc7, 0x05, 0x31, 0x51, 0x6e, 0xca, 0x4f, 0x40, + 0xea, 0x6c, 0x83, 0x1a, 0xe1, 0xb7, 0x4f, 0x07, 0x25, 0xbf, 0x6a, 0x3a, 0x7a, 0xf3, 0xe9, 0x3d, 0x77, 0x14, 0x9b, + 0xdf, 0x81, 0x7d, 0x73, 0x73, 0x7c, 0x1d, 0xfd, 0x5b, 0x8a, 0x8d, 0xee, 0x51, 0x6e, 0xc1, 0x28, 0x65, 0xb3, 0x6a, + 0x17, 0x36, 0xc1, 0x54, 0x4a, 0x07, 0xa4, 0x0f, 0xb9, 0x83, 0x68, 0xed, 0xe3, 0x1c, 0x2e, 0x45, 0xc2, 0x9b, 0x27, + 0x16, 0x82, 0x9e, 0xa7, 0xfc, 0x7a, 0xfd, 0x4d, 0x5a, 0xbb, 0x1b, 0x4f, 0xd9, 0x64, 0xea, 0xdc, 0x74, 0xa2, 0xa4, + 0x44, 0xfd, 0x9d, 0x13, 0x14, 0xff, 0xfa, 0x2f, 0x61, 0xf8, 0xaf, 0xff, 0xf2, 0xc9, 0xa6, 0x30, 0x7c, 0x71, 0x81, + 0x65, 0x35, 0xec, 0x6e, 0x02, 0xdf, 0x3e, 0x53, 0x1d, 0xe7, 0xdb, 0xdb, 0x6c, 0x6c, 0x02, 0xd4, 0x6f, 0x6c, 0xc1, + 0x46, 0xa1, 0x3e, 0x00, 0xde, 0x6f, 0x01, 0x0c, 0xd6, 0xf5, 0x49, 0xc8, 0xa0, 0xd1, 0xef, 0x02, 0xed, 0x02, 0x45, + 0xf7, 0xda, 0x91, 0xdf, 0x8e, 0xe1, 0x4f, 0xad, 0xe1, 0x77, 0x82, 0x6f, 0x3c, 0x02, 0xa3, 0x8b, 0x8b, 0x32, 0xa5, + 0xcd, 0xed, 0x0a, 0x57, 0xe6, 0xfb, 0x1b, 0x25, 0x46, 0xf6, 0x47, 0x2d, 0xd4, 0x53, 0x17, 0xf2, 0xc8, 0xe8, 0xe2, + 0x35, 0xbc, 0x27, 0xe7, 0xf8, 0x52, 0x58, 0x97, 0xea, 0x1d, 0xfc, 0x19, 0x86, 0xa8, 0xaf, 0x4a, 0x0d, 0xba, 0xc1, + 0x9c, 0xa1, 0x14, 0x34, 0x7e, 0x00, 0x13, 0x8f, 0x2e, 0x8c, 0x7d, 0x77, 0xaa, 0x1d, 0x1f, 0xd1, 0x3a, 0x69, 0x1b, + 0x87, 0x48, 0x0d, 0xe9, 0xd8, 0x7b, 0xaf, 0xf0, 0xa5, 0x1a, 0xd3, 0xca, 0x9e, 0x56, 0xce, 0x25, 0x50, 0xe5, 0x2f, + 0x0a, 0x15, 0x18, 0xff, 0xeb, 0xae, 0xd8, 0xdd, 0xdf, 0x3f, 0x1d, 0xbb, 0xe3, 0xf7, 0x8a, 0xdd, 0xfd, 0xfd, 0x0f, + 0x8f, 0xdd, 0xfd, 0xd5, 0x8d, 0xdd, 0xc1, 0x26, 0x7e, 0x79, 0xaf, 0xf8, 0x9a, 0x8d, 0x7d, 0xf0, 0xeb, 0x9c, 0xb4, + 0x8d, 0x26, 0x9b, 0xf2, 0x09, 0x04, 0xd7, 0xfe, 0xfd, 0x63, 0x65, 0x29, 0x9f, 0xb8, 0x91, 0x32, 0x78, 0x4f, 0x2a, + 0x84, 0xc6, 0xba, 0x36, 0xa6, 0x65, 0xa2, 0x53, 0xad, 0xf2, 0x0e, 0x48, 0xf3, 0xa1, 0x7d, 0x67, 0x81, 0x1f, 0x95, + 0xef, 0x1d, 0x6a, 0xe1, 0x8e, 0x8d, 0x5f, 0x45, 0x2a, 0xf4, 0x55, 0x76, 0xec, 0x34, 0xec, 0x05, 0x07, 0x77, 0x84, + 0xae, 0x7d, 0xaf, 0x8a, 0xbe, 0xef, 0xbe, 0xf4, 0x7f, 0xbc, 0x69, 0x3f, 0x1b, 0xb4, 0xbb, 0x47, 0xed, 0x99, 0x1f, + 0xf9, 0x20, 0xa5, 0x54, 0x41, 0xab, 0x7b, 0x74, 0x04, 0x05, 0xd7, 0x4e, 0x41, 0x07, 0x0a, 0x98, 0x53, 0xf0, 0x08, + 0x0a, 0x46, 0x4e, 0xc1, 0x63, 0x28, 0x48, 0x9c, 0x82, 0x27, 0x50, 0x70, 0xe5, 0x17, 0x03, 0x56, 0x82, 0xfb, 0x04, + 0x0d, 0xb1, 0x36, 0x1e, 0x6c, 0xd9, 0x13, 0xdc, 0x86, 0xa0, 0x59, 0x3c, 0x51, 0xb9, 0x3e, 0xe0, 0x82, 0x8b, 0x38, + 0xbe, 0x9e, 0xd2, 0x2c, 0x82, 0xb0, 0xe5, 0x73, 0x25, 0x63, 0x42, 0xc9, 0xdf, 0xb3, 0x19, 0xb5, 0x5f, 0xa8, 0xb0, + 0x78, 0xf0, 0x7c, 0x34, 0x68, 0x0d, 0x8b, 0x6e, 0xb9, 0x73, 0x3a, 0xda, 0x66, 0xf2, 0x3e, 0xf4, 0x5e, 0x56, 0x75, + 0x7a, 0xba, 0x66, 0xb9, 0xe7, 0x3b, 0xa2, 0x36, 0x8e, 0x3b, 0x60, 0x9c, 0xf2, 0xeb, 0xe6, 0x8d, 0xdf, 0xdb, 0x1e, + 0xc9, 0x01, 0x88, 0xca, 0x48, 0x8e, 0x5a, 0x53, 0xf9, 0xf4, 0x3e, 0x9e, 0x94, 0xbf, 0x5f, 0xd3, 0x3c, 0x8f, 0x27, + 0xa6, 0xe5, 0xee, 0xc8, 0x8d, 0x02, 0xd1, 0x8d, 0xda, 0x58, 0x20, 0x20, 0xfa, 0x02, 0x9b, 0x05, 0xe6, 0xb4, 0x09, + 0xc6, 0x00, 0x76, 0xea, 0x71, 0x1c, 0x35, 0x7d, 0xbd, 0x48, 0xc6, 0x93, 0xaa, 0xe0, 0x78, 0x2e, 0xa8, 0x2a, 0xd5, + 0x18, 0x2e, 0x8e, 0x0f, 0xa1, 0x40, 0x57, 0xef, 0x88, 0xd7, 0x58, 0xdb, 0x7d, 0x77, 0xd4, 0xc6, 0xb3, 0xf1, 0x1a, + 0x37, 0xc3, 0xa5, 0x4c, 0x6f, 0xd9, 0x8c, 0x12, 0x7c, 0xd6, 0x1e, 0xc1, 0x1f, 0x13, 0x83, 0xf8, 0x6c, 0x3c, 0x1e, + 0xdf, 0x19, 0xbf, 0xf9, 0x2c, 0x19, 0xd3, 0x0e, 0x7d, 0xd4, 0x85, 0xec, 0x87, 0xa6, 0xf1, 0xfa, 0xb7, 0x0b, 0x85, + 0xbb, 0xe5, 0xfd, 0x1a, 0x43, 0x80, 0x40, 0x4e, 0x97, 0xf7, 0x8f, 0xe5, 0x14, 0x73, 0x41, 0x97, 0xb3, 0x58, 0x4c, + 0x58, 0x16, 0xb5, 0x8a, 0xf0, 0xca, 0x04, 0x3f, 0x3e, 0x7b, 0xfa, 0xf4, 0x69, 0x11, 0x26, 0xf6, 0xa9, 0x95, 0x24, + 0x45, 0x38, 0x5a, 0x96, 0xcb, 0x68, 0xb5, 0xc6, 0xe3, 0x22, 0x64, 0xb6, 0xe0, 0xa8, 0x33, 0x4a, 0x8e, 0x3a, 0x45, + 0x78, 0xed, 0xb4, 0x28, 0x42, 0x6a, 0x9e, 0x04, 0x4d, 0x6a, 0x29, 0x14, 0x4f, 0x5a, 0xad, 0x22, 0xd4, 0x84, 0xb6, + 0x04, 0x8b, 0x48, 0xff, 0x8c, 0xe2, 0x85, 0xe4, 0xc0, 0x92, 0xbb, 0x5c, 0x06, 0x83, 0x73, 0xf3, 0x7a, 0x0a, 0xfd, + 0x29, 0x87, 0x02, 0x0d, 0xf1, 0x97, 0x6e, 0x98, 0x02, 0x88, 0x59, 0x85, 0x27, 0xb8, 0x8d, 0x62, 0xd4, 0xaa, 0x81, + 0xb2, 0x54, 0xf5, 0x97, 0x84, 0x57, 0xd1, 0x0b, 0xe0, 0x3f, 0xd0, 0x52, 0xbf, 0x47, 0x4d, 0xd2, 0x1d, 0x5c, 0x9f, + 0xd2, 0x4f, 0x72, 0xfd, 0xdb, 0xfb, 0x30, 0x7d, 0x4a, 0xff, 0x68, 0xa6, 0x6f, 0x5e, 0x36, 0xaa, 0x99, 0xbe, 0x66, + 0x6b, 0x33, 0x49, 0xfc, 0xd1, 0x94, 0x8e, 0x3e, 0x5e, 0xf2, 0x9b, 0x26, 0x1c, 0x09, 0xe1, 0x2b, 0x7e, 0xba, 0xff, + 0x5b, 0xd3, 0x2d, 0xec, 0x60, 0xce, 0x97, 0x20, 0x94, 0xd8, 0x7c, 0x9b, 0x11, 0xff, 0xad, 0x35, 0xab, 0x74, 0xc9, + 0x78, 0x4c, 0xfc, 0xb7, 0xe3, 0xb1, 0x6f, 0x2f, 0xd9, 0xc5, 0x92, 0xaa, 0x56, 0x6f, 0x6a, 0x25, 0xaa, 0xd5, 0x17, + 0x5f, 0xb8, 0x65, 0x6e, 0x81, 0x09, 0x72, 0xb8, 0x01, 0x0d, 0x53, 0x93, 0xb0, 0x1c, 0x8e, 0x1a, 0x7c, 0xa0, 0xa2, + 0xfe, 0x96, 0x3f, 0x51, 0x7b, 0x21, 0x73, 0x09, 0xf0, 0x96, 0xb7, 0x48, 0xaf, 0xdf, 0x30, 0x9f, 0x50, 0x9b, 0xf0, + 0xf6, 0xec, 0xf6, 0xcb, 0x24, 0x98, 0x49, 0x54, 0xb0, 0xfc, 0x6d, 0xb6, 0x76, 0x7b, 0x44, 0xc3, 0x48, 0x88, 0xbb, + 0xac, 0x42, 0xf2, 0xc9, 0x24, 0x85, 0x4f, 0x84, 0x2c, 0x6b, 0x6f, 0x1e, 0xd5, 0xdd, 0xfb, 0xb5, 0xf5, 0x46, 0x6e, + 0x47, 0xf3, 0x9e, 0x4e, 0xf5, 0xc5, 0x22, 0x9d, 0x75, 0x7c, 0x65, 0x3e, 0x5d, 0xa3, 0x2c, 0xb2, 0xa5, 0xe1, 0xff, + 0x4b, 0x9d, 0xab, 0x2a, 0x21, 0x4f, 0x43, 0x0f, 0x9c, 0x14, 0x85, 0xc9, 0xf2, 0x4f, 0x58, 0x3e, 0x87, 0x37, 0x62, + 0xea, 0x9e, 0xf4, 0x53, 0x2c, 0x3c, 0xbf, 0x76, 0x22, 0x09, 0xb5, 0xed, 0x2a, 0x6c, 0x28, 0x41, 0xfb, 0x6a, 0x67, + 0xb2, 0xf0, 0x8d, 0xcb, 0xd7, 0x22, 0xd1, 0xf7, 0x34, 0x3e, 0x75, 0x8c, 0xc3, 0x59, 0x21, 0xf8, 0x5d, 0xcb, 0x0d, + 0xb1, 0x55, 0xb6, 0xa0, 0x70, 0x23, 0x65, 0xaa, 0x46, 0x63, 0x4b, 0xf9, 0xe5, 0xf3, 0x79, 0x9c, 0x69, 0x36, 0x4a, + 0x7c, 0xcd, 0x0f, 0xf6, 0x97, 0xd5, 0xce, 0x17, 0xbe, 0x05, 0x5b, 0x13, 0x6f, 0xef, 0xf8, 0x10, 0x3a, 0xf4, 0xbc, + 0x1a, 0xe8, 0xd9, 0x86, 0x3b, 0xff, 0x13, 0x81, 0xf5, 0x8b, 0x30, 0xbf, 0xc6, 0x61, 0x7e, 0xed, 0xfd, 0x79, 0xd9, + 0xbc, 0xa6, 0x97, 0x1f, 0x99, 0x6c, 0xca, 0x78, 0xde, 0x04, 0x85, 0x5f, 0xf9, 0xe5, 0x0c, 0x7b, 0x56, 0xe9, 0x61, + 0xfa, 0x8e, 0x7c, 0x77, 0x91, 0x43, 0xfc, 0x5d, 0xa9, 0xad, 0x51, 0xc6, 0x33, 0xda, 0xad, 0xa7, 0x01, 0xba, 0xe1, + 0x5c, 0x8b, 0xad, 0xe1, 0x92, 0x43, 0xbc, 0x5e, 0xde, 0x46, 0x2d, 0xc3, 0xd6, 0x5b, 0x36, 0x56, 0xdb, 0xda, 0xda, + 0x3e, 0x32, 0xc8, 0x6d, 0x28, 0xe9, 0x25, 0x36, 0x63, 0xd6, 0xbb, 0x62, 0xce, 0x9f, 0x4a, 0x8a, 0x03, 0x6f, 0x9e, + 0xfd, 0xeb, 0x64, 0x13, 0xae, 0x17, 0xab, 0xa4, 0xb8, 0xfb, 0x40, 0x16, 0xc5, 0x63, 0x49, 0x05, 0xbe, 0x4f, 0xcb, + 0x4b, 0x75, 0x7f, 0x65, 0x09, 0x62, 0x26, 0x6a, 0x3f, 0x9d, 0xdf, 0xdc, 0x7f, 0xf8, 0xbb, 0x97, 0x5f, 0x18, 0x1c, + 0xd9, 0xf7, 0xb9, 0xf8, 0x7e, 0x17, 0x0e, 0x42, 0x1a, 0xdf, 0x46, 0x2c, 0x53, 0x32, 0xef, 0x12, 0x5c, 0x72, 0xdd, + 0x39, 0x37, 0xd9, 0x9d, 0x82, 0xa6, 0xea, 0xe3, 0x6d, 0x66, 0x2b, 0x8e, 0x1e, 0xcf, 0x6f, 0xec, 0x6e, 0xb4, 0xd7, + 0xb2, 0x36, 0xff, 0xd0, 0xe4, 0xcc, 0xdd, 0xd9, 0xa0, 0xf5, 0x04, 0xc3, 0x47, 0xf3, 0x9b, 0xae, 0x16, 0xb4, 0x4d, + 0xa1, 0xa1, 0x6a, 0xcd, 0x6f, 0xdc, 0xf4, 0xd4, 0x6a, 0x20, 0x2f, 0x3c, 0xca, 0x3d, 0x1a, 0xe7, 0xb4, 0x0b, 0x6f, + 0xac, 0x66, 0xa3, 0x38, 0x35, 0xc2, 0x7c, 0xc6, 0x92, 0x24, 0xa5, 0x5d, 0x2b, 0xaf, 0xbd, 0xf6, 0x63, 0xc8, 0xee, + 0x74, 0xb7, 0xac, 0xbe, 0x2b, 0x0e, 0xf2, 0x4a, 0x3c, 0xc5, 0x97, 0x39, 0x4f, 0xe1, 0x73, 0x11, 0x5b, 0xd1, 0x69, + 0xd2, 0x1e, 0x5b, 0x15, 0xf2, 0xd4, 0xef, 0xfa, 0x5a, 0x1e, 0xb5, 0xfe, 0xd4, 0x55, 0x1b, 0xde, 0xea, 0x4a, 0x3e, + 0x8f, 0x9a, 0x47, 0xf5, 0x85, 0x40, 0x55, 0xb9, 0x04, 0xbc, 0x65, 0x59, 0x18, 0xa4, 0x95, 0xe6, 0xd3, 0x5e, 0xd8, + 0x36, 0x65, 0x6a, 0x00, 0x78, 0xb5, 0x72, 0x59, 0x54, 0xd4, 0x17, 0xf3, 0xef, 0x73, 0x5a, 0x3e, 0xdf, 0x7e, 0x5a, + 0x3e, 0xb7, 0xa7, 0xe5, 0x6e, 0x8a, 0xfd, 0x6c, 0xdc, 0x86, 0x3f, 0xdd, 0x6a, 0x41, 0x51, 0xcb, 0x3b, 0x9a, 0xdf, + 0x78, 0xa0, 0xa7, 0x35, 0x3b, 0xf3, 0x1b, 0x9d, 0x9c, 0x0b, 0x61, 0x83, 0x16, 0xa4, 0xab, 0xe2, 0x96, 0x07, 0x85, + 0xf0, 0xb7, 0x55, 0xab, 0x6a, 0x3f, 0x84, 0x3a, 0xe8, 0xf5, 0x68, 0xb3, 0xae, 0x73, 0xf7, 0xa1, 0x8d, 0x32, 0x2e, + 0x83, 0xc8, 0x72, 0x63, 0x14, 0xca, 0xf8, 0xf2, 0x92, 0x26, 0xd1, 0x98, 0x8f, 0x16, 0xf9, 0x3f, 0x1b, 0xf8, 0x0d, + 0x12, 0xef, 0x3c, 0xd2, 0x6b, 0xe3, 0xd8, 0xae, 0x3a, 0x55, 0xd8, 0x8e, 0xb0, 0x2c, 0xf7, 0x29, 0xca, 0x47, 0x71, + 0x4a, 0x83, 0x4e, 0xf8, 0x70, 0xcb, 0x21, 0xf8, 0x0f, 0xd9, 0x9b, 0xad, 0x8b, 0xf9, 0xbd, 0xc8, 0xb8, 0x13, 0x09, + 0xbf, 0x0a, 0x07, 0xee, 0x1e, 0xb6, 0x9e, 0x6e, 0x07, 0x77, 0x60, 0x67, 0x1a, 0x5a, 0xa1, 0x60, 0xe4, 0x4e, 0x42, + 0xc7, 0xf1, 0x22, 0x95, 0x77, 0x8f, 0xba, 0x8b, 0x32, 0x36, 0x46, 0xbd, 0x83, 0xa1, 0x57, 0x6d, 0xef, 0xc9, 0xa5, + 0x3f, 0xfb, 0xfc, 0x21, 0xfc, 0xd1, 0x99, 0x46, 0xb7, 0x95, 0xae, 0xae, 0x6d, 0x55, 0xd0, 0xd5, 0xf7, 0x6b, 0xca, + 0xb8, 0x16, 0xe1, 0x4a, 0x1f, 0xbf, 0x6f, 0x6b, 0xd0, 0x2a, 0xef, 0xd5, 0xdc, 0x68, 0x59, 0xbf, 0xaa, 0xf5, 0xaf, + 0x1b, 0xfc, 0x9e, 0x6d, 0x47, 0x5a, 0x73, 0xad, 0xb7, 0x35, 0x5f, 0xaf, 0xdb, 0x68, 0x6c, 0x31, 0xae, 0xda, 0xef, + 0x93, 0xdb, 0xd2, 0x44, 0xd1, 0x81, 0x40, 0xb0, 0x52, 0xf6, 0xb5, 0x95, 0xc2, 0x28, 0x79, 0x00, 0xef, 0x8e, 0xf5, + 0x6e, 0x66, 0x69, 0x96, 0x13, 0x7f, 0x2a, 0xe5, 0x3c, 0xd2, 0x9f, 0x3b, 0xbd, 0x3e, 0x0a, 0xb9, 0x98, 0x1c, 0x76, + 0x5a, 0xad, 0x16, 0xbc, 0xf3, 0xd3, 0xf7, 0xae, 0x18, 0xbd, 0x7e, 0xc6, 0x6f, 0x88, 0xff, 0xc4, 0x7b, 0xea, 0x3d, + 0x39, 0xf2, 0x1e, 0x3d, 0xf6, 0x3d, 0xc5, 0xce, 0x89, 0xff, 0xe4, 0xc8, 0xf7, 0x34, 0x3b, 0x27, 0xfe, 0xa3, 0xc7, + 0x7e, 0xef, 0x78, 0x62, 0x55, 0x32, 0xb8, 0x34, 0xa8, 0xf5, 0x9d, 0x5c, 0x0a, 0xfe, 0x91, 0xd6, 0x0f, 0xae, 0x2e, + 0x33, 0xb9, 0x68, 0x1d, 0xfb, 0x08, 0xa7, 0x77, 0x14, 0xcf, 0x23, 0x45, 0x14, 0x6e, 0x21, 0xb8, 0x65, 0x74, 0xa9, + 0x9a, 0x02, 0xd4, 0xcc, 0x4b, 0xbf, 0x77, 0x0c, 0x79, 0xe3, 0x5e, 0x42, 0xfc, 0xd7, 0x9d, 0x27, 0x5e, 0xfb, 0xf1, + 0x55, 0xf3, 0xe1, 0xa8, 0xd5, 0x6c, 0x7b, 0xed, 0x66, 0x27, 0x7c, 0xe2, 0x75, 0xf4, 0xbf, 0x5e, 0xcb, 0x3b, 0xf2, + 0xda, 0xe1, 0x13, 0xef, 0xc8, 0xeb, 0x84, 0x4f, 0xae, 0x1e, 0xea, 0x7c, 0x82, 0xd8, 0x3f, 0xec, 0x1d, 0xc3, 0xa7, + 0x2b, 0x6f, 0x88, 0xff, 0xb9, 0xaf, 0x3f, 0x10, 0xeb, 0x7f, 0xe6, 0x96, 0xb6, 0x9f, 0x6e, 0x2d, 0xee, 0x3c, 0xd9, + 0x5a, 0x7c, 0xf4, 0x78, 0x6b, 0xf1, 0xc3, 0x47, 0xf5, 0xe2, 0xc3, 0x89, 0xae, 0x2a, 0x4f, 0x39, 0xf1, 0x67, 0xb1, + 0x14, 0xec, 0x26, 0x68, 0x7b, 0x2d, 0xaf, 0xe5, 0x35, 0xe1, 0xbf, 0x27, 0x1d, 0x54, 0xf6, 0xba, 0x84, 0x5e, 0xe5, + 0x2a, 0x9f, 0x3c, 0xf5, 0xda, 0x8f, 0x5f, 0x76, 0x1e, 0x8f, 0xa0, 0x9d, 0x5a, 0x68, 0xdb, 0x6b, 0x5f, 0x1d, 0x3d, + 0x1d, 0xb5, 0x3c, 0xe8, 0xd8, 0x86, 0x3f, 0xd3, 0x47, 0x9d, 0x91, 0x7e, 0x68, 0x41, 0xfd, 0xb7, 0xed, 0x27, 0x79, + 0xab, 0xd9, 0x86, 0x3f, 0xbf, 0x94, 0x1a, 0x31, 0xe8, 0xe3, 0xee, 0xb8, 0x0f, 0x5b, 0xde, 0xd1, 0xd3, 0x69, 0x27, + 0xfc, 0xfc, 0xea, 0x49, 0xf8, 0x74, 0xda, 0x7e, 0xf2, 0xad, 0x7e, 0x4a, 0x9b, 0x9d, 0xf0, 0x73, 0xf8, 0xfb, 0xed, + 0x51, 0x6b, 0xda, 0x6c, 0x87, 0x4f, 0xaf, 0x8e, 0xc2, 0xa3, 0xb4, 0xf9, 0x38, 0x7c, 0x0a, 0x7f, 0xab, 0xe1, 0xa6, + 0x7c, 0x46, 0x7d, 0x0f, 0xf6, 0x7b, 0xcd, 0xdc, 0x72, 0xe7, 0xe8, 0x3c, 0xf4, 0x1e, 0x3d, 0x7c, 0xf9, 0xf4, 0xaa, + 0xf9, 0x70, 0xda, 0xee, 0x5c, 0x35, 0x77, 0xfe, 0xfc, 0x16, 0x10, 0x6f, 0x06, 0x8e, 0x29, 0x5c, 0xe0, 0xb1, 0x88, + 0x53, 0xef, 0x9f, 0x7d, 0x80, 0xf3, 0x5d, 0xe6, 0xb5, 0xf8, 0xb4, 0x79, 0x9d, 0xd1, 0xfb, 0xd8, 0xd7, 0xe2, 0x0f, + 0xb7, 0xaf, 0x73, 0xba, 0xe6, 0x54, 0xbd, 0x95, 0x1b, 0x66, 0xf4, 0xba, 0xed, 0xf5, 0x4e, 0x06, 0x03, 0x06, 0xdf, + 0x39, 0x2a, 0xba, 0xb7, 0xf0, 0x8a, 0x6b, 0xd7, 0xdb, 0xc0, 0xe1, 0x20, 0xdf, 0x4a, 0x7d, 0x92, 0xf9, 0x2e, 0x84, + 0xa4, 0x9f, 0x46, 0xc8, 0xb7, 0xf7, 0xc1, 0x47, 0xfa, 0x87, 0xe3, 0x83, 0xbb, 0xf8, 0xa8, 0xf9, 0x79, 0x95, 0x3d, + 0xab, 0xec, 0xd1, 0x33, 0xf5, 0x1c, 0xc0, 0x1d, 0x8f, 0x86, 0x7f, 0x48, 0xa1, 0x28, 0xf7, 0x75, 0x5c, 0xe1, 0xcd, + 0xaf, 0x71, 0x49, 0xeb, 0x0b, 0x5d, 0xc4, 0x37, 0xc6, 0xff, 0x1c, 0xbe, 0x65, 0x60, 0x1f, 0xae, 0xf4, 0x15, 0x63, + 0xe2, 0x77, 0xc2, 0x56, 0xd8, 0x2a, 0x1d, 0x07, 0x70, 0x89, 0x8f, 0x2c, 0xb9, 0x8c, 0xe1, 0x73, 0x9a, 0x29, 0x9f, + 0xa8, 0x0f, 0x6f, 0xc2, 0xeb, 0xce, 0xd5, 0x27, 0x50, 0xf5, 0x9b, 0xe6, 0x23, 0xdf, 0x37, 0x57, 0xff, 0xe1, 0x92, + 0xd8, 0x37, 0x70, 0x91, 0xce, 0x7a, 0xac, 0x67, 0x60, 0x53, 0xbf, 0xa6, 0x09, 0x8b, 0x03, 0x3f, 0x98, 0x0b, 0x3a, + 0xa6, 0x22, 0x6f, 0xd6, 0x6e, 0x97, 0xa9, 0x8b, 0x65, 0xc8, 0xb7, 0x1f, 0x6e, 0x14, 0xf0, 0xfa, 0x5e, 0x32, 0x30, + 0x5e, 0x2d, 0xdf, 0xa8, 0xf9, 0x7e, 0x81, 0x6d, 0x89, 0x00, 0x8e, 0x5e, 0xa9, 0x06, 0xbe, 0xd6, 0x0d, 0xda, 0x61, + 0xe7, 0x11, 0xd2, 0xbc, 0x04, 0x5e, 0x8b, 0xfa, 0x7d, 0xd0, 0x3c, 0x6a, 0xfd, 0x09, 0x39, 0xdd, 0xca, 0x81, 0x86, + 0xc6, 0xa9, 0x23, 0xaa, 0x0f, 0xde, 0xd6, 0xaf, 0xfe, 0xf9, 0x9a, 0x22, 0x3e, 0xd3, 0x6b, 0x87, 0x17, 0xac, 0x9a, + 0xf8, 0xa1, 0xbe, 0xc0, 0x3e, 0x66, 0x93, 0xc0, 0xfd, 0x9c, 0xa9, 0x7e, 0xed, 0xaa, 0xfa, 0x0a, 0x32, 0x2a, 0xaa, + 0x26, 0x02, 0x2d, 0x95, 0x2f, 0x9e, 0x65, 0x9e, 0x58, 0xad, 0x02, 0x01, 0x8e, 0x58, 0xe2, 0xe0, 0x14, 0x9e, 0x51, + 0x0d, 0xc9, 0x02, 0x97, 0x00, 0x29, 0x04, 0x13, 0xa1, 0xff, 0xaf, 0x8a, 0xed, 0x0f, 0xe3, 0x5e, 0x09, 0xd3, 0x38, + 0x9b, 0x00, 0x15, 0xc6, 0xd9, 0x64, 0xc3, 0x79, 0xa3, 0xc3, 0x09, 0x6b, 0xa5, 0xd5, 0x50, 0x95, 0x93, 0x26, 0x7f, + 0x76, 0xfb, 0xde, 0xbc, 0x9f, 0xc9, 0x07, 0x1f, 0xa8, 0xf2, 0x7d, 0x57, 0xef, 0x92, 0x6d, 0x90, 0x07, 0xfa, 0x03, + 0xe1, 0x2a, 0x21, 0x0d, 0xa4, 0x1f, 0x5c, 0xea, 0xf3, 0x8c, 0xcd, 0x43, 0x7c, 0x2d, 0xfb, 0x12, 0x7a, 0xc5, 0x46, + 0x46, 0x84, 0x61, 0xcf, 0x5c, 0x6c, 0x6e, 0xaa, 0xad, 0x21, 0x6d, 0xac, 0xad, 0xfe, 0x51, 0xac, 0x32, 0x8c, 0x49, + 0xc6, 0xfd, 0xde, 0x83, 0xf2, 0xeb, 0x8c, 0xbb, 0x36, 0x01, 0xbe, 0x5a, 0x3e, 0x10, 0x34, 0xfd, 0x67, 0xf2, 0x00, + 0xbe, 0x5b, 0xfe, 0x60, 0x08, 0x9f, 0xcc, 0x0e, 0x95, 0x28, 0x78, 0x50, 0x7d, 0xbe, 0x1c, 0xf8, 0x60, 0xe3, 0x66, + 0x96, 0xe2, 0xfb, 0x8a, 0x6f, 0x23, 0xaa, 0x3b, 0x8f, 0x2a, 0x51, 0xdd, 0x79, 0xe4, 0x4a, 0xcf, 0xb6, 0xd7, 0xee, + 0x84, 0x8f, 0x1c, 0x01, 0x70, 0xd5, 0x84, 0xff, 0x6b, 0x22, 0xe0, 0x61, 0xf8, 0xa8, 0x94, 0x01, 0xaf, 0xda, 0x9d, + 0xf0, 0x48, 0x8b, 0x9b, 0x4e, 0xf8, 0xe8, 0x07, 0xc5, 0xa0, 0x35, 0x73, 0xae, 0x1f, 0x88, 0x2d, 0xa1, 0x1a, 0x9d, + 0x54, 0xe7, 0xe3, 0xa0, 0xfc, 0x06, 0x9c, 0x39, 0x9f, 0xc6, 0x25, 0xf4, 0x3c, 0x16, 0xf0, 0x21, 0x8e, 0xfa, 0xd9, + 0xad, 0xd5, 0xe1, 0x1a, 0xbf, 0xd8, 0x32, 0x05, 0x9c, 0x70, 0x1f, 0xbb, 0x37, 0x83, 0xe1, 0x5a, 0xad, 0x7a, 0x6d, + 0xb1, 0x7d, 0x7b, 0xdb, 0x6e, 0xd2, 0xd6, 0x0d, 0xed, 0x1b, 0xe2, 0x14, 0xb3, 0x60, 0xea, 0x15, 0xf1, 0x6a, 0x92, + 0x2f, 0x93, 0x62, 0x7d, 0x7e, 0xc8, 0xed, 0x13, 0xdc, 0xb9, 0x1c, 0x4d, 0xab, 0x04, 0xf4, 0x84, 0xc1, 0x75, 0xf6, + 0xa2, 0xb0, 0xa0, 0xd7, 0x9c, 0x81, 0x15, 0x96, 0x14, 0xbf, 0xa0, 0x79, 0xdf, 0x87, 0x22, 0x3f, 0xf2, 0x95, 0x23, + 0xc9, 0x2f, 0x3f, 0x46, 0x52, 0x12, 0x76, 0x55, 0x80, 0xd5, 0x25, 0x12, 0x38, 0xb5, 0x80, 0x1f, 0x1f, 0x1d, 0x1c, + 0xec, 0x3c, 0x2f, 0x4a, 0x1b, 0x83, 0xb5, 0x56, 0x1f, 0x31, 0x70, 0x59, 0x91, 0xef, 0x22, 0xba, 0x1c, 0x57, 0xa1, + 0x10, 0x19, 0x3c, 0x5d, 0xd2, 0x58, 0x86, 0x71, 0xa6, 0x53, 0x14, 0x1c, 0x86, 0x85, 0xdb, 0xf4, 0x08, 0x15, 0x5c, + 0xc6, 0xce, 0x57, 0x4a, 0xcd, 0x39, 0xe7, 0x32, 0xb6, 0x57, 0xfd, 0x32, 0x59, 0xcb, 0x85, 0x9f, 0x76, 0x7a, 0x6f, + 0xdf, 0x9f, 0x78, 0xfa, 0x78, 0x1e, 0x1f, 0x4e, 0x3b, 0xbd, 0x63, 0x65, 0x99, 0xeb, 0x8b, 0x42, 0x44, 0x5f, 0x14, + 0xf2, 0xcc, 0xa5, 0x31, 0x88, 0xd7, 0x14, 0x87, 0x7a, 0xd9, 0xbe, 0x47, 0xb3, 0x91, 0xf6, 0x29, 0xce, 0x16, 0xa9, + 0x64, 0xf0, 0x0a, 0xde, 0x43, 0xe8, 0xda, 0x84, 0x0d, 0x2b, 0x13, 0x4d, 0xad, 0x86, 0x23, 0x33, 0xeb, 0x81, 0x1c, + 0xb3, 0x94, 0xda, 0xd4, 0x52, 0x33, 0x54, 0x99, 0xf9, 0xbc, 0xd9, 0x3a, 0x5f, 0x5c, 0xce, 0x98, 0xf4, 0x6d, 0x7e, + 0xf6, 0x07, 0xd3, 0xe1, 0x58, 0x4d, 0xd5, 0xbb, 0x28, 0x8c, 0x8b, 0xd4, 0x7e, 0x6e, 0x64, 0xed, 0x03, 0xef, 0x7a, + 0xf5, 0x46, 0x42, 0xc0, 0x8d, 0x9f, 0xe9, 0x51, 0xaf, 0x74, 0x4a, 0xba, 0x75, 0xc5, 0xf1, 0xe1, 0xf4, 0xa8, 0x77, + 0x11, 0xcd, 0xcd, 0x78, 0xaf, 0xf8, 0xc6, 0xc7, 0xe2, 0x4b, 0x8e, 0xd9, 0x57, 0xa9, 0xed, 0xfa, 0x0e, 0xa5, 0x01, + 0x78, 0xc4, 0x53, 0xbf, 0x77, 0x6c, 0x94, 0x01, 0x4f, 0x05, 0x5d, 0xfd, 0x47, 0x2d, 0x9b, 0x2d, 0x9f, 0x72, 0xa5, + 0x2d, 0xe9, 0x2e, 0xce, 0x24, 0x35, 0xbf, 0xee, 0xb4, 0xdd, 0x3b, 0x8e, 0x8d, 0x9a, 0x09, 0xcc, 0x23, 0x8f, 0x0e, + 0xa1, 0x33, 0xe8, 0x72, 0x21, 0xe3, 0x87, 0xd7, 0xf4, 0xb2, 0x19, 0xcf, 0x59, 0xe5, 0x44, 0x05, 0xa5, 0xa3, 0x9c, + 0x92, 0x57, 0x33, 0xc1, 0xcf, 0x78, 0x6d, 0x91, 0x8a, 0x85, 0x17, 0xc6, 0x43, 0xab, 0x74, 0x75, 0x1a, 0x4b, 0xdf, + 0xd3, 0x1c, 0xde, 0x7a, 0x72, 0x8d, 0xec, 0x2d, 0xfc, 0xde, 0xbf, 0xfd, 0x8f, 0xff, 0x65, 0x9c, 0xb3, 0xc7, 0x87, + 0xd3, 0xb6, 0x1d, 0x6b, 0x0d, 0xd1, 0xc5, 0x31, 0x5c, 0x30, 0xab, 0xa2, 0x89, 0xf4, 0xa6, 0x39, 0x11, 0x2c, 0x69, + 0x4e, 0xe3, 0x74, 0xec, 0xf7, 0x76, 0x23, 0xc8, 0xbd, 0x59, 0x62, 0xa0, 0xae, 0x17, 0x01, 0x09, 0xfe, 0xa6, 0xbb, + 0x11, 0x36, 0xc5, 0x5e, 0x9d, 0x56, 0xf7, 0xa6, 0x44, 0x75, 0xa0, 0x6a, 0xb7, 0x25, 0x84, 0xf9, 0x2a, 0x91, 0x61, + 0x6a, 0xa2, 0x76, 0x49, 0xa2, 0xf0, 0xbd, 0x32, 0x1a, 0xf2, 0x7f, 0xff, 0xe7, 0x7f, 0xf9, 0x6f, 0xf6, 0x11, 0x82, + 0x1c, 0xff, 0xf6, 0xdf, 0xff, 0xf3, 0xff, 0xf9, 0xdf, 0xff, 0x15, 0x12, 0xeb, 0x4d, 0x20, 0x44, 0xf1, 0x09, 0xaf, + 0x8a, 0x82, 0x68, 0x86, 0xe1, 0x41, 0x32, 0xda, 0x8c, 0xe5, 0x92, 0x8d, 0xea, 0xd7, 0x26, 0xce, 0xd4, 0x84, 0xea, + 0xb0, 0x19, 0xe8, 0xd4, 0xa1, 0x2d, 0x2a, 0x1a, 0xa9, 0xa1, 0x5c, 0xd1, 0x62, 0x71, 0x7c, 0x08, 0xf8, 0xbe, 0xdf, + 0x4d, 0xb3, 0xb0, 0xdc, 0x8e, 0xa5, 0x75, 0xfd, 0x41, 0x49, 0x51, 0x95, 0x7b, 0xe0, 0x94, 0x5f, 0xc2, 0x63, 0xd4, + 0x71, 0x8a, 0xd5, 0xee, 0xd5, 0xfa, 0x74, 0x7f, 0x5a, 0xe4, 0x92, 0x8d, 0x01, 0xe5, 0xda, 0xc1, 0xa8, 0xe2, 0x9f, + 0x4d, 0x50, 0xff, 0xd2, 0xdb, 0x42, 0x8d, 0xa2, 0x6d, 0xc6, 0x87, 0x4f, 0xff, 0x54, 0xfc, 0x65, 0x06, 0x4a, 0x96, + 0x17, 0xcc, 0xe2, 0x1b, 0x63, 0x49, 0x3e, 0x6e, 0xb5, 0xe6, 0x37, 0x68, 0x59, 0xcd, 0x80, 0x77, 0x4d, 0xa6, 0x9c, + 0x92, 0xee, 0x80, 0x2a, 0x70, 0x5a, 0xfa, 0x3f, 0x5b, 0x1e, 0x38, 0x51, 0xbd, 0x56, 0x51, 0xfc, 0x79, 0xa9, 0x5c, + 0x70, 0xec, 0x17, 0x08, 0x70, 0x1a, 0x6f, 0xe5, 0x25, 0x77, 0x17, 0xb7, 0x74, 0x7a, 0x75, 0x74, 0xaf, 0x69, 0x7b, + 0xf3, 0x02, 0x95, 0x1b, 0xa0, 0x75, 0x43, 0xab, 0x0f, 0x21, 0x58, 0x3a, 0x6d, 0xe3, 0x69, 0x67, 0x59, 0x0e, 0x2f, + 0x25, 0x9f, 0xb9, 0x11, 0x59, 0x1a, 0xd3, 0x11, 0x1d, 0x5b, 0x2f, 0xaf, 0xa9, 0xd7, 0xd1, 0xd6, 0x62, 0x7a, 0xb4, + 0x65, 0x2e, 0x03, 0x92, 0x8a, 0xc4, 0x7a, 0xad, 0xe2, 0x33, 0x38, 0x81, 0xcb, 0x71, 0xca, 0x63, 0x19, 0x29, 0x82, + 0xed, 0xba, 0x71, 0xdd, 0x18, 0xd8, 0x0c, 0x5f, 0x3a, 0xf0, 0x74, 0x75, 0x53, 0xf0, 0xb7, 0xd6, 0xaf, 0xb9, 0x15, + 0xa1, 0xea, 0xee, 0x0e, 0xa5, 0xdd, 0x35, 0xdf, 0x9a, 0x70, 0xe9, 0x9b, 0x9a, 0x9f, 0xc3, 0xc8, 0x98, 0x0e, 0xda, + 0x5e, 0xaf, 0x45, 0xb5, 0xae, 0xfd, 0x4a, 0x06, 0xbe, 0x02, 0xd3, 0x5f, 0x6f, 0xa5, 0x0a, 0xa1, 0xd5, 0x1b, 0xf2, + 0x6d, 0x69, 0x05, 0xc5, 0xf3, 0xb9, 0x6a, 0x88, 0xba, 0xc7, 0x87, 0x5a, 0x79, 0x05, 0xee, 0xa1, 0x72, 0x01, 0x74, + 0xe8, 0xdd, 0x34, 0x32, 0x47, 0x41, 0xff, 0x32, 0x41, 0x79, 0xf8, 0x5c, 0x55, 0xef, 0xff, 0x01, 0xb9, 0x37, 0x65, + 0xfc, 0x3f, 0x86, 0x00, 0x00}; } // namespace web_server } // namespace esphome + #endif #endif diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h index 49de0cfab6..a7ad3ab543 100644 --- a/esphome/components/web_server/server_index_v3.h +++ b/esphome/components/web_server/server_index_v3.h @@ -1,10 +1,12 @@ #pragma once // Generated from https://github.com/esphome/esphome-webserver + #ifdef USE_WEBSERVER_LOCAL #if USE_WEBSERVER_VERSION == 3 -#include "esphome/core/hal.h" -namespace esphome { +#include "esphome/core/hal.h" + +namespace esphome { namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { @@ -3629,367 +3631,368 @@ const uint8_t INDEX_GZ[] PROGMEM = { 0x46, 0x5a, 0xa5, 0xf5, 0x21, 0x2e, 0x2e, 0xb9, 0x89, 0xa8, 0x62, 0xde, 0x56, 0x7a, 0x54, 0x88, 0x37, 0x2c, 0x80, 0x9e, 0xd2, 0xd3, 0x9a, 0xff, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xe6, 0xaa, 0xac, 0xe4, 0x0a, 0x58, 0xea, 0xf8, 0x52, 0x8b, 0x48, 0x68, 0xc8, 0xbf, 0xac, 0xba, 0xed, 0x96, 0x8f, 0x70, 0x49, 0x02, 0x5f, 0x36, 0xaa, - 0xe4, 0xe5, 0x65, 0xce, 0xc3, 0xc0, 0xc4, 0xf8, 0x08, 0xa8, 0xad, 0x66, 0xf6, 0x7f, 0x8a, 0x3b, 0xda, 0xe5, 0xb6, - 0x6d, 0xe4, 0xff, 0x7b, 0x0a, 0x86, 0xc9, 0xa5, 0x62, 0x42, 0xd2, 0xa4, 0x64, 0xd9, 0x8e, 0x64, 0xd9, 0x6d, 0x93, - 0x74, 0xce, 0x1d, 0xb7, 0xe9, 0x24, 0xbe, 0xcc, 0x5d, 0x5d, 0x8f, 0x45, 0x51, 0x90, 0xc4, 0x0b, 0x45, 0x6a, 0x48, - 0xca, 0x96, 0xab, 0xf2, 0x9e, 0xa5, 0xcf, 0x72, 0x4f, 0x76, 0xb3, 0xbb, 0x00, 0x08, 0x7e, 0xe8, 0xc3, 0x4d, 0x7a, - 0x37, 0x3d, 0x5f, 0x44, 0x10, 0x00, 0x81, 0x05, 0xb0, 0xbb, 0xd8, 0xcf, 0x27, 0x8e, 0x08, 0xac, 0x69, 0xe4, 0x9b, - 0x8e, 0x96, 0x98, 0x31, 0x93, 0x91, 0xe7, 0x88, 0xc1, 0x44, 0x11, 0xea, 0x1d, 0x6a, 0x21, 0xf8, 0xba, 0x14, 0x47, - 0xd7, 0x1a, 0xc7, 0xcb, 0x51, 0xc8, 0x2c, 0xdc, 0xee, 0xf0, 0xc9, 0xf5, 0x68, 0x39, 0x1a, 0x41, 0x32, 0x95, 0x27, - 0x8e, 0x09, 0xe1, 0x61, 0xe2, 0x14, 0xaf, 0x6d, 0xb9, 0xd1, 0x87, 0x49, 0xd9, 0x59, 0x75, 0xf8, 0x60, 0xd2, 0x01, - 0x12, 0x19, 0xfa, 0x40, 0x06, 0x57, 0xb4, 0x86, 0x53, 0x3b, 0xd0, 0x3f, 0xc0, 0xee, 0x4b, 0xf5, 0x7e, 0xd3, 0xd1, - 0x1f, 0x5c, 0xeb, 0x1f, 0x10, 0xc6, 0x98, 0x64, 0xf8, 0x35, 0xed, 0x5e, 0xdd, 0xd4, 0x49, 0x37, 0xbd, 0xc4, 0x74, - 0x03, 0x20, 0x9b, 0x7d, 0x13, 0x78, 0xd3, 0x28, 0x4e, 0xb3, 0xc0, 0xd7, 0x6f, 0xfa, 0x17, 0x41, 0xeb, 0x7a, 0x9e, - 0xb5, 0x8c, 0x1b, 0xd3, 0xcf, 0xd4, 0x4c, 0x25, 0x02, 0x61, 0x62, 0xa2, 0x92, 0x4d, 0x95, 0xd4, 0x13, 0xb4, 0xb5, - 0xa2, 0x40, 0xcd, 0x58, 0xc9, 0xcf, 0x06, 0x50, 0xaf, 0x92, 0xf6, 0x04, 0xf3, 0x37, 0xe9, 0xd8, 0xd2, 0xe8, 0xd3, - 0x85, 0xe2, 0xf5, 0x72, 0x8d, 0xa4, 0x3c, 0x2b, 0xa8, 0x25, 0x86, 0xea, 0x15, 0xfe, 0x2d, 0xf4, 0xfc, 0x44, 0xb5, - 0xcd, 0x2c, 0xd1, 0xdd, 0xe1, 0x37, 0x65, 0xbe, 0x00, 0xe8, 0x37, 0x18, 0x46, 0x44, 0x71, 0xa6, 0x41, 0xfc, 0x19, - 0xf8, 0xe2, 0xb0, 0x6a, 0xcb, 0xc5, 0x7b, 0x6d, 0x19, 0x39, 0x47, 0x06, 0xdf, 0x22, 0xf1, 0x6b, 0xf1, 0x28, 0x64, - 0xa5, 0x40, 0x13, 0xc4, 0xd3, 0x47, 0xb0, 0x80, 0x59, 0x7c, 0x19, 0xdf, 0x57, 0xd5, 0x15, 0xaf, 0x87, 0xbb, 0x69, - 0x2f, 0x12, 0x40, 0xd8, 0x6f, 0x22, 0xf9, 0x5e, 0x8b, 0xe7, 0x0f, 0x15, 0x8c, 0x4e, 0xe5, 0x4c, 0xa1, 0x7d, 0x86, - 0xe0, 0x61, 0x32, 0x30, 0xe7, 0x42, 0x5a, 0x00, 0x28, 0x89, 0x93, 0xe9, 0x61, 0x7e, 0x2b, 0x32, 0x1c, 0x8b, 0xfc, - 0xc2, 0x0a, 0x71, 0x06, 0xec, 0x1a, 0x2d, 0x96, 0x19, 0x46, 0xc4, 0x85, 0x01, 0xb0, 0x5c, 0xd7, 0x30, 0xc2, 0x26, - 0x60, 0xe9, 0x82, 0x4d, 0xcc, 0x75, 0x2d, 0x18, 0xd7, 0xcb, 0x88, 0xe7, 0x05, 0xdc, 0x85, 0xe8, 0x1d, 0xc5, 0x49, - 0xf0, 0x98, 0xf0, 0x59, 0xf8, 0x66, 0x11, 0x4d, 0xbe, 0xe5, 0xa3, 0xda, 0xa5, 0x01, 0x31, 0xf8, 0x84, 0xf8, 0xfa, - 0xad, 0xb0, 0x71, 0xae, 0x10, 0x24, 0xb3, 0x34, 0xcb, 0xe1, 0xb3, 0x75, 0x94, 0x9f, 0x3f, 0x5b, 0xa7, 0xf9, 0xe0, - 0xd9, 0xda, 0x03, 0x46, 0x2e, 0xd7, 0x61, 0x9e, 0x85, 0x3b, 0x4d, 0x31, 0x3b, 0xd8, 0x53, 0x54, 0xae, 0xa1, 0x3e, - 0x7d, 0xc0, 0xb5, 0xe6, 0x8b, 0x24, 0x98, 0x7b, 0xc9, 0x03, 0x29, 0xd9, 0x4d, 0x55, 0x13, 0x6f, 0xe8, 0x1a, 0xa1, - 0x75, 0x9a, 0x2e, 0x61, 0x78, 0x5d, 0xfb, 0x5a, 0x96, 0x31, 0x3e, 0x39, 0xa9, 0x69, 0x84, 0x6f, 0xdd, 0xea, 0x2f, - 0x99, 0x3d, 0x66, 0x99, 0x17, 0x84, 0xd4, 0xa4, 0x2f, 0x52, 0xc8, 0xd7, 0x66, 0x93, 0x96, 0x67, 0x13, 0x95, 0x77, - 0x0b, 0x4e, 0x86, 0x10, 0x3e, 0x8d, 0x1b, 0x67, 0x86, 0xa9, 0xa5, 0x9a, 0xd7, 0x8f, 0xde, 0xfd, 0x4f, 0xa1, 0xcf, - 0x00, 0xfa, 0x11, 0x40, 0x9f, 0x45, 0x7e, 0x3c, 0x66, 0x7f, 0x7f, 0x7f, 0x21, 0x73, 0x59, 0x81, 0x58, 0x66, 0xc8, - 0xb7, 0x61, 0x8a, 0xdc, 0x42, 0x82, 0x9c, 0x02, 0x65, 0x9d, 0x2a, 0x76, 0x4c, 0x92, 0xeb, 0xda, 0x39, 0x8d, 0x9d, - 0x8d, 0x69, 0xd4, 0x83, 0x18, 0x5b, 0x25, 0xf9, 0xe9, 0x01, 0xd5, 0x26, 0xda, 0x46, 0x95, 0x00, 0x0c, 0x09, 0xcc, - 0xb0, 0x80, 0x02, 0xa4, 0xdd, 0x1c, 0xb8, 0xc5, 0xf5, 0xc1, 0x9e, 0xa3, 0xf0, 0xdb, 0x3d, 0x2f, 0x33, 0x26, 0xd8, - 0x4a, 0x3f, 0x3b, 0xc5, 0x44, 0x5a, 0x40, 0x9d, 0x21, 0xf4, 0xc6, 0xe9, 0x01, 0x3d, 0x6a, 0x95, 0xfd, 0x5f, 0x74, - 0x22, 0x2e, 0x72, 0x3d, 0xde, 0xc1, 0xa3, 0x0e, 0x06, 0xe4, 0x6d, 0x87, 0x52, 0x2f, 0xd7, 0xb5, 0x39, 0x67, 0x84, - 0x78, 0x8c, 0x1f, 0x08, 0x00, 0xe0, 0xc0, 0x49, 0xd5, 0xb5, 0xb9, 0xb7, 0xc2, 0x99, 0x8b, 0x37, 0xde, 0xaa, 0xe5, - 0xf2, 0x57, 0xb6, 0x04, 0x54, 0x5a, 0x3e, 0x5a, 0x3e, 0x5f, 0x5c, 0xb0, 0xee, 0x17, 0x42, 0xdb, 0xd6, 0x0c, 0xb5, - 0xa6, 0x0d, 0x8b, 0x3b, 0x13, 0x8b, 0x3b, 0xde, 0xb0, 0xb8, 0xe3, 0x2d, 0x8b, 0x1b, 0xf2, 0x85, 0xd4, 0x24, 0xe8, - 0x12, 0xf4, 0xd8, 0x92, 0xc0, 0xe3, 0x6c, 0x45, 0x8f, 0x9f, 0x33, 0x84, 0x93, 0x95, 0x86, 0x60, 0xb1, 0xb4, 0x01, - 0x56, 0x4d, 0x70, 0x51, 0x00, 0xa1, 0xa2, 0x94, 0xb4, 0x74, 0xe8, 0xc4, 0xb4, 0x21, 0x2f, 0x66, 0x2b, 0xac, 0x4e, - 0x17, 0x36, 0x29, 0xe5, 0xfc, 0x6e, 0xcd, 0x36, 0x4c, 0x74, 0xb6, 0x65, 0xa2, 0x7e, 0xe9, 0xe4, 0xf2, 0x59, 0xd3, - 0x19, 0x54, 0xe7, 0x04, 0x5b, 0x10, 0x8c, 0x38, 0x71, 0xc7, 0x94, 0xb7, 0xe1, 0x66, 0x84, 0xaa, 0x6c, 0xa8, 0x85, - 0x97, 0xa6, 0xf7, 0x71, 0x02, 0x5a, 0x10, 0xe8, 0xe6, 0x71, 0x3b, 0x6a, 0x1e, 0x44, 0x3c, 0xc0, 0xca, 0xc6, 0xbd, - 0x54, 0xbc, 0x57, 0x77, 0x54, 0xbb, 0xdb, 0xa5, 0x1a, 0x0b, 0x2f, 0xcb, 0x58, 0x82, 0x30, 0xf7, 0x20, 0x12, 0x77, - 0x0d, 0xd8, 0xff, 0x97, 0x4d, 0xd6, 0x80, 0x41, 0x42, 0xa3, 0xc0, 0xe9, 0x88, 0x9f, 0x17, 0xc0, 0x47, 0x25, 0x82, - 0xe8, 0x2a, 0xb1, 0xda, 0x12, 0x09, 0xf7, 0x1f, 0xf1, 0xb0, 0xb6, 0x12, 0xc5, 0x9b, 0xc8, 0x3d, 0x32, 0xec, 0x85, - 0x37, 0xfe, 0x00, 0xba, 0xb6, 0x56, 0xdb, 0x04, 0xbb, 0x59, 0x35, 0x32, 0x5b, 0x42, 0x8c, 0x9d, 0x5f, 0xa0, 0x48, - 0xc4, 0x91, 0xdc, 0x2a, 0x09, 0x1c, 0x1a, 0x3d, 0x6b, 0x72, 0xb3, 0x6e, 0xe7, 0x07, 0xd3, 0xc0, 0xa8, 0xe1, 0x4c, - 0x40, 0x6c, 0xe1, 0xe0, 0x4c, 0xde, 0xaf, 0x42, 0xd3, 0x3d, 0x32, 0x40, 0x18, 0x7b, 0x0d, 0x29, 0x46, 0x1d, 0x71, - 0x79, 0x1d, 0x26, 0x40, 0xa2, 0xae, 0x9d, 0x9b, 0xfc, 0xf9, 0x14, 0x7f, 0xb9, 0x37, 0xf9, 0xf3, 0x11, 0xfe, 0x6a, - 0xdf, 0x60, 0x32, 0xb9, 0x86, 0x4b, 0xbb, 0x32, 0x67, 0xfd, 0xac, 0xb4, 0x9d, 0xc8, 0x24, 0xec, 0xf1, 0x04, 0xfa, - 0xe9, 0xb3, 0x75, 0x0a, 0x4e, 0x90, 0xea, 0x1c, 0x22, 0x3b, 0x31, 0xf2, 0xc6, 0xf2, 0xe9, 0x86, 0xf2, 0x91, 0xf1, - 0x3f, 0xa6, 0xf2, 0xb8, 0x4b, 0xe2, 0x82, 0xa2, 0x94, 0x45, 0x0e, 0xb7, 0xa3, 0x20, 0xf2, 0x92, 0x87, 0x5b, 0xba, - 0x4a, 0xb4, 0x04, 0x9f, 0x2e, 0x45, 0x29, 0xc4, 0x4a, 0x96, 0x35, 0x50, 0x99, 0x22, 0x73, 0x7d, 0xe0, 0x64, 0x7e, - 0xf0, 0x8f, 0x44, 0x61, 0xd1, 0x4a, 0x97, 0x4d, 0xbe, 0x20, 0xa5, 0x0f, 0xdd, 0x3e, 0x5b, 0xb7, 0x58, 0xbd, 0x9b, - 0xca, 0x6c, 0x2b, 0x3c, 0x20, 0x2c, 0x0f, 0x5e, 0x5c, 0xe7, 0xe3, 0xa0, 0x87, 0x2a, 0xa6, 0x51, 0xbc, 0xb2, 0x9e, - 0xad, 0xb3, 0x73, 0x7d, 0xee, 0x25, 0x9f, 0xd8, 0xd8, 0xf2, 0x83, 0xc4, 0x0f, 0x99, 0xde, 0xd3, 0x47, 0xa1, 0x17, - 0x7d, 0xe2, 0x8f, 0x56, 0xbc, 0xcc, 0x50, 0x69, 0xbc, 0xf3, 0x9e, 0x2b, 0x60, 0x42, 0xe2, 0x39, 0x64, 0x4c, 0x1b, - 0xa0, 0xa0, 0xbd, 0x96, 0xc2, 0xad, 0x82, 0x29, 0x2c, 0x6a, 0x99, 0x60, 0xf3, 0x08, 0x7a, 0x6c, 0x70, 0x22, 0x35, - 0x75, 0x5c, 0x2f, 0xdd, 0x54, 0xa7, 0x4a, 0x82, 0x49, 0x99, 0x05, 0xf1, 0x16, 0x7b, 0xf8, 0xe3, 0x9f, 0xa3, 0xfc, - 0xd4, 0xfb, 0x7f, 0x8e, 0x73, 0x78, 0x9b, 0x3f, 0xa8, 0x36, 0xf6, 0xd2, 0x74, 0x39, 0x67, 0x63, 0xd2, 0x97, 0x9d, - 0x17, 0x43, 0x29, 0x33, 0xf2, 0xea, 0x70, 0x7e, 0x59, 0xb6, 0x8f, 0x0f, 0x5f, 0x83, 0x1e, 0x1f, 0x38, 0xba, 0x78, - 0x32, 0xd1, 0x8b, 0x2b, 0xf5, 0x8e, 0x66, 0xee, 0xe1, 0x2f, 0xcb, 0xef, 0xde, 0x3a, 0xdf, 0xc9, 0xc6, 0x91, 0x6e, - 0xe4, 0x43, 0xa1, 0x94, 0xe4, 0x8c, 0xa9, 0x32, 0x5e, 0x31, 0xa3, 0x89, 0x17, 0x6d, 0x9e, 0xce, 0x75, 0x69, 0x97, - 0x2d, 0x18, 0x1b, 0x83, 0xbd, 0xaa, 0x59, 0x2b, 0xbd, 0x0d, 0xd9, 0x1d, 0x93, 0x0a, 0xcf, 0xfa, 0xc7, 0x1a, 0x5a, - 0x60, 0x44, 0x36, 0xae, 0x48, 0xe5, 0x6c, 0x95, 0x32, 0xa5, 0x21, 0xce, 0x81, 0xcf, 0x5c, 0xdd, 0xe5, 0x95, 0x5d, - 0x3d, 0x34, 0x75, 0x65, 0x00, 0x1b, 0x47, 0x76, 0xbe, 0xa1, 0xbc, 0x87, 0xe9, 0x98, 0x9b, 0xc7, 0x66, 0xba, 0x46, - 0x0f, 0x22, 0x58, 0x73, 0x38, 0x85, 0xb0, 0xf9, 0x5b, 0x85, 0xf4, 0x61, 0x13, 0xc4, 0x9a, 0x64, 0x52, 0xba, 0x90, - 0xf1, 0x34, 0x2e, 0x84, 0x56, 0x9e, 0xe6, 0x08, 0x73, 0x9a, 0x46, 0x2c, 0x4d, 0x37, 0x42, 0x47, 0xae, 0xb0, 0xa9, - 0x17, 0xb5, 0xcb, 0x93, 0x2f, 0xca, 0x4d, 0xc7, 0x04, 0x0a, 0x8c, 0xb3, 0xa9, 0x7e, 0x0b, 0xd1, 0xf9, 0xed, 0x9c, - 0x9b, 0x6c, 0x24, 0xd3, 0x91, 0xce, 0xd5, 0xe9, 0x9b, 0xde, 0xdf, 0xeb, 0x7c, 0x50, 0x25, 0xb2, 0xd8, 0x38, 0xb4, - 0x56, 0x09, 0xd5, 0xd5, 0x44, 0x31, 0xd8, 0x81, 0x18, 0x53, 0x05, 0x9f, 0xb1, 0xc9, 0x84, 0xf9, 0x59, 0x6a, 0x08, - 0xc1, 0x8c, 0x0c, 0xa0, 0x0a, 0x8e, 0x33, 0x4f, 0x06, 0xfa, 0x8f, 0xe0, 0x46, 0x2e, 0xe2, 0x0c, 0xf1, 0x01, 0x89, - 0x1b, 0x4a, 0x33, 0x98, 0xa8, 0xc7, 0x32, 0x88, 0xf8, 0x57, 0x20, 0x3f, 0x76, 0x43, 0x39, 0x0e, 0x8d, 0xe3, 0xfb, - 0x62, 0x13, 0xc4, 0xd2, 0xb0, 0x63, 0x3b, 0xb6, 0xd9, 0x76, 0x56, 0xd7, 0xee, 0x77, 0x5d, 0xd7, 0xc9, 0x75, 0x13, - 0xdc, 0x97, 0x3e, 0xed, 0x7b, 0xc2, 0xb1, 0x55, 0x07, 0x5a, 0x2d, 0xa3, 0xc7, 0xb4, 0x6b, 0xbb, 0xaf, 0x5c, 0xdd, - 0x24, 0xab, 0x31, 0x05, 0x91, 0xf9, 0xf1, 0x1d, 0x4b, 0x3e, 0x7b, 0x2a, 0xe5, 0xce, 0xf7, 0x1b, 0xcf, 0x91, 0xeb, - 0x00, 0xc6, 0xcd, 0xe2, 0xc5, 0x23, 0xa6, 0xd0, 0xd1, 0x4d, 0xdd, 0x0f, 0xe3, 0x94, 0xa9, 0x73, 0x20, 0x01, 0xc3, - 0x67, 0x4e, 0xe2, 0xa7, 0xf7, 0x6f, 0x3f, 0x7c, 0xd0, 0x4d, 0x4c, 0x86, 0x99, 0xaa, 0xbd, 0xf3, 0x0d, 0xb5, 0x03, - 0xd5, 0x37, 0xee, 0x3b, 0x22, 0x27, 0x74, 0x85, 0x2c, 0xef, 0x39, 0x2a, 0xab, 0x6d, 0x39, 0x4e, 0x66, 0xf8, 0x97, - 0xe9, 0xde, 0xb7, 0xd7, 0xbc, 0x1a, 0x70, 0xc3, 0x76, 0x5a, 0x56, 0x2a, 0x99, 0x07, 0xd1, 0x6d, 0x43, 0xa9, 0xb7, - 0x6a, 0x28, 0x85, 0x8b, 0x53, 0x0d, 0x57, 0x2d, 0xe3, 0xb9, 0x42, 0x8a, 0x21, 0x97, 0xf1, 0x2e, 0x70, 0x29, 0xd7, - 0x97, 0xcf, 0x18, 0x34, 0x0f, 0x66, 0x5e, 0x1d, 0x75, 0x43, 0x31, 0xbf, 0x73, 0x48, 0xd8, 0xfa, 0x21, 0xd8, 0xbc, - 0x31, 0x55, 0xe3, 0x55, 0x66, 0xd3, 0xa4, 0xc5, 0xaa, 0xd2, 0x09, 0xb1, 0x93, 0xb7, 0x19, 0x9b, 0x2f, 0x58, 0xe2, - 0x65, 0xcb, 0x84, 0xdd, 0x86, 0xf1, 0xfd, 0x93, 0xc2, 0xa2, 0x7c, 0x47, 0xe5, 0x59, 0x30, 0x9d, 0xc9, 0xda, 0xe7, - 0x2d, 0x36, 0x90, 0x0b, 0xb8, 0xf5, 0x03, 0xf9, 0x7f, 0x7e, 0xb7, 0xed, 0xff, 0xfc, 0xbe, 0xb3, 0x2a, 0x74, 0x9f, - 0x0f, 0xcd, 0x6c, 0xb0, 0xc7, 0xbe, 0x68, 0xfe, 0x52, 0x19, 0xe6, 0xcd, 0x75, 0x6a, 0x8b, 0x00, 0xef, 0x6b, 0x4b, - 0x50, 0x2b, 0x2c, 0xef, 0x9b, 0x47, 0x0d, 0x0c, 0xe6, 0xb5, 0x73, 0x64, 0x50, 0xe9, 0xb3, 0x86, 0x36, 0x34, 0x7a, - 0x7b, 0xad, 0xc8, 0x1f, 0x87, 0xf0, 0xae, 0x39, 0x7c, 0xe6, 0xf0, 0xb9, 0x14, 0xf0, 0xf5, 0x70, 0x28, 0xd3, 0xab, - 0xa9, 0x4d, 0xc1, 0xca, 0xfd, 0xbc, 0x56, 0xc2, 0x89, 0x67, 0xcf, 0x31, 0xc8, 0xfd, 0x7c, 0xf0, 0x7a, 0x88, 0xf6, - 0x58, 0xa7, 0xa3, 0xa4, 0x60, 0x56, 0x36, 0xa2, 0x36, 0xb2, 0xa7, 0xae, 0x75, 0x5a, 0xc3, 0x6b, 0x50, 0x8a, 0x39, - 0xb7, 0xf2, 0xa1, 0x61, 0xbe, 0x1e, 0x72, 0x31, 0x0e, 0x37, 0x01, 0xed, 0x55, 0xb7, 0x36, 0x17, 0x82, 0x96, 0x80, - 0x6e, 0x6a, 0xa4, 0x5b, 0xc1, 0xca, 0xac, 0x90, 0x9a, 0xa1, 0xf0, 0x1c, 0x6e, 0xf0, 0xc3, 0x1c, 0x53, 0x7e, 0xbc, - 0xdb, 0x64, 0x26, 0xf5, 0xd3, 0x6e, 0x33, 0xa9, 0xab, 0xbd, 0xcc, 0xa4, 0x7e, 0xfa, 0xe2, 0x66, 0x52, 0xef, 0x54, - 0x33, 0x29, 0x58, 0xc4, 0xb7, 0x6c, 0x2f, 0xdb, 0x25, 0x61, 0x11, 0x11, 0xdf, 0xa7, 0x03, 0x97, 0xf3, 0xaf, 0xa9, - 0x3f, 0x63, 0x70, 0x27, 0xe7, 0xab, 0x12, 0xc6, 0x53, 0xb0, 0x63, 0xfa, 0xf3, 0x2d, 0x8e, 0xc2, 0x78, 0xaa, 0xda, - 0x1b, 0x45, 0x3c, 0xe8, 0x69, 0x11, 0xc8, 0x88, 0x6c, 0x7c, 0x1c, 0x53, 0x84, 0x3d, 0xb2, 0x0e, 0x0d, 0x25, 0xb1, - 0xb3, 0x34, 0xe0, 0x6a, 0x0b, 0x2b, 0xa0, 0x1e, 0x1a, 0x10, 0xc9, 0x86, 0xed, 0x97, 0x22, 0xbc, 0x83, 0xda, 0x83, - 0x34, 0x94, 0xa5, 0x50, 0x09, 0x6b, 0xfd, 0x97, 0x95, 0xfb, 0xed, 0xb5, 0xdb, 0xef, 0xb8, 0xe0, 0x9f, 0x0c, 0x37, - 0x3a, 0x2c, 0x70, 0xfa, 0x9d, 0x0e, 0x14, 0xdc, 0x2b, 0x05, 0x6d, 0x28, 0x08, 0x94, 0x82, 0x2e, 0x14, 0xf8, 0x4a, - 0xc1, 0x11, 0x14, 0x8c, 0x95, 0x82, 0x63, 0x28, 0xb8, 0xd3, 0xf3, 0xeb, 0x48, 0x0e, 0xf7, 0xd8, 0xb8, 0x31, 0xe9, - 0x06, 0x21, 0xca, 0x8e, 0x4d, 0x17, 0x0c, 0x87, 0xbc, 0x69, 0x2f, 0x36, 0x49, 0x98, 0xd7, 0x4b, 0xcc, 0xfb, 0x19, - 0xa3, 0x58, 0xc9, 0x6f, 0x90, 0xe6, 0xd8, 0x59, 0x0c, 0xa6, 0xc3, 0x22, 0x06, 0x81, 0x80, 0x83, 0xa6, 0x1b, 0x20, - 0xa0, 0xe9, 0xcb, 0x95, 0x13, 0x71, 0x1c, 0x94, 0xb5, 0x2c, 0xde, 0xd1, 0xe7, 0x2c, 0xb9, 0x05, 0x0a, 0x6b, 0x8e, - 0x96, 0x2a, 0x04, 0xfc, 0x12, 0x3a, 0xfd, 0x37, 0x6c, 0xb4, 0x9c, 0x6a, 0x97, 0xf1, 0x74, 0xa7, 0x7a, 0x5e, 0x7d, - 0x05, 0xa3, 0xd4, 0x49, 0xd9, 0x61, 0x89, 0x6d, 0xc9, 0xbf, 0x45, 0x8f, 0x79, 0xb9, 0x7e, 0x06, 0x63, 0xd3, 0x32, - 0x32, 0x0e, 0x81, 0xef, 0x00, 0x8c, 0x14, 0xfd, 0xf8, 0x25, 0xc0, 0x59, 0x79, 0xbe, 0xf2, 0x94, 0xf1, 0x9c, 0xfd, - 0xc0, 0xd2, 0xd4, 0x9b, 0x8a, 0xfa, 0xf5, 0x71, 0x82, 0x41, 0x8c, 0xbc, 0x7f, 0x21, 0x00, 0x41, 0x72, 0x16, 0xd4, - 0xec, 0x1e, 0x92, 0xf8, 0x5e, 0x03, 0xcb, 0x1a, 0xd8, 0x50, 0x85, 0x0d, 0x40, 0x60, 0xc3, 0x12, 0x96, 0xb5, 0xf5, - 0x70, 0xf8, 0xef, 0x58, 0x58, 0x2d, 0xcc, 0xbc, 0x69, 0xb5, 0x88, 0xf6, 0x41, 0xae, 0x8e, 0x4d, 0x2a, 0xcb, 0x4b, - 0x85, 0x9f, 0xa3, 0xfd, 0x0d, 0xe3, 0xe9, 0x9f, 0xaa, 0xfa, 0xdd, 0xa2, 0xb2, 0xff, 0x10, 0x99, 0x41, 0x36, 0xb4, - 0x11, 0xc6, 0x9a, 0x0d, 0x20, 0xec, 0x45, 0xd9, 0xcc, 0x42, 0xef, 0xaa, 0x56, 0x3b, 0x32, 0x4c, 0x1b, 0xd7, 0x76, - 0x5d, 0xf5, 0x29, 0xed, 0x25, 0xd3, 0x91, 0xd7, 0x72, 0xdb, 0xc7, 0xa6, 0xf8, 0xb3, 0x9d, 0xae, 0x91, 0x63, 0x0f, - 0xda, 0x38, 0xb8, 0x5b, 0x4f, 0xe2, 0x28, 0xb3, 0x26, 0xde, 0x3c, 0x08, 0x1f, 0x7a, 0xf3, 0x38, 0x8a, 0xd3, 0x85, - 0xe7, 0xb3, 0x3e, 0x79, 0xd0, 0x81, 0x2b, 0x69, 0x1f, 0xa3, 0x15, 0x70, 0x87, 0x39, 0xd7, 0x6e, 0x27, 0x6c, 0x4e, - 0xad, 0x65, 0x30, 0x82, 0x49, 0xc8, 0x56, 0x39, 0xff, 0x7c, 0xa9, 0x32, 0x55, 0xc5, 0x2d, 0x47, 0x2d, 0x80, 0x23, - 0xe5, 0x91, 0x0e, 0x20, 0xbe, 0x4f, 0x7f, 0xe1, 0x8d, 0x31, 0x38, 0x9f, 0xdd, 0xee, 0x26, 0x6c, 0xae, 0xd9, 0xdd, - 0x8d, 0x9d, 0x27, 0xf1, 0xfd, 0x19, 0x8c, 0x16, 0x1b, 0x5b, 0x29, 0x0b, 0x27, 0xf8, 0xc6, 0x42, 0xe7, 0x0a, 0xd1, - 0x8f, 0x85, 0x17, 0x71, 0xe8, 0x8d, 0xcd, 0xfb, 0xf0, 0xba, 0xd7, 0xd6, 0x9c, 0xfe, 0x3c, 0x88, 0x2c, 0x9a, 0xce, - 0xb1, 0xb3, 0x50, 0xfa, 0x52, 0xe1, 0x67, 0xac, 0xb1, 0xba, 0xab, 0x39, 0x7d, 0xb8, 0xac, 0x4d, 0xc2, 0xf8, 0xbe, - 0x37, 0x0b, 0xc6, 0x63, 0x16, 0xf5, 0x71, 0xcc, 0xb2, 0x90, 0x85, 0x61, 0xb0, 0x48, 0x83, 0xb4, 0x3f, 0xf7, 0x56, - 0xbc, 0xd7, 0xc3, 0x4d, 0xbd, 0x76, 0x78, 0xaf, 0x9d, 0xbd, 0x7b, 0x55, 0xba, 0x01, 0x47, 0x0e, 0xea, 0x87, 0x0f, - 0xad, 0xab, 0x39, 0x95, 0x79, 0xee, 0xdd, 0xeb, 0x22, 0x61, 0xeb, 0xb9, 0x97, 0x4c, 0x83, 0xa8, 0xe7, 0xe4, 0xf6, - 0xdd, 0x9a, 0x36, 0xc6, 0xd3, 0x93, 0x93, 0x93, 0xdc, 0x1e, 0x8b, 0x27, 0x67, 0x3c, 0xce, 0x6d, 0x5f, 0x3c, 0x4d, - 0x26, 0x8e, 0x33, 0x99, 0xe4, 0x76, 0x20, 0x0a, 0x3a, 0x6d, 0x7f, 0xdc, 0x69, 0xe7, 0xf6, 0xbd, 0x52, 0x23, 0xb7, - 0x19, 0x7f, 0x4a, 0xd8, 0xb8, 0x8f, 0x1b, 0xe9, 0x9e, 0x96, 0xfe, 0xd8, 0x71, 0x72, 0xc4, 0x00, 0xd7, 0x25, 0xdc, - 0x84, 0x82, 0x9d, 0x9b, 0xf5, 0xde, 0x35, 0xb5, 0xe2, 0x73, 0xbe, 0xdf, 0x58, 0x6f, 0xec, 0x25, 0x9f, 0x6e, 0x34, - 0x65, 0x16, 0x9e, 0x47, 0xd5, 0xd6, 0x02, 0x0c, 0xd6, 0xaa, 0x07, 0x51, 0xab, 0xfa, 0xa3, 0x38, 0x81, 0x33, 0x9b, - 0x78, 0xe3, 0x60, 0x99, 0xf6, 0xdc, 0xf6, 0x62, 0x25, 0x8a, 0xf8, 0x5e, 0x2f, 0x0a, 0xf0, 0xec, 0xf5, 0xd2, 0x38, - 0x0c, 0xc6, 0xa2, 0x68, 0xd3, 0x59, 0x72, 0xdb, 0x46, 0x1f, 0x7d, 0xb6, 0x03, 0x8c, 0x3c, 0xe0, 0x85, 0xa1, 0x66, - 0x77, 0x52, 0x8d, 0x79, 0x29, 0xca, 0x73, 0x35, 0x27, 0x25, 0xb8, 0xa0, 0x7f, 0xb6, 0x7b, 0xb8, 0x58, 0xc9, 0x3d, - 0xef, 0x1e, 0x2d, 0x56, 0xf9, 0xd7, 0x73, 0x36, 0x0e, 0x3c, 0xad, 0x55, 0xec, 0x26, 0xd7, 0x01, 0x99, 0xaf, 0xb1, - 0xde, 0xb0, 0x4d, 0xc5, 0xb1, 0x80, 0xe8, 0x7e, 0x4f, 0x82, 0xf9, 0x22, 0x4e, 0x32, 0x2f, 0xca, 0xf2, 0x7c, 0x78, - 0x93, 0xe7, 0xfd, 0xab, 0xa0, 0x75, 0xfd, 0xcf, 0x16, 0xd1, 0x69, 0xd2, 0x91, 0xe4, 0xc6, 0x8d, 0xf9, 0x96, 0xa9, - 0xf6, 0x18, 0x40, 0xc6, 0xd0, 0x16, 0x43, 0xad, 0x4c, 0x54, 0xb2, 0x5e, 0x99, 0x80, 0x2c, 0xab, 0x93, 0x7d, 0x47, - 0xb9, 0x0a, 0x52, 0x20, 0xa8, 0xf0, 0x96, 0x0d, 0xae, 0x14, 0xdb, 0x0e, 0x60, 0x56, 0xb0, 0x32, 0x99, 0xd6, 0x3f, - 0xdb, 0xc4, 0x33, 0x7e, 0xb3, 0x9b, 0x67, 0xfc, 0x39, 0xdb, 0x87, 0x67, 0xfc, 0xe6, 0x8b, 0xf3, 0x8c, 0xcf, 0xea, - 0xa6, 0xf5, 0x17, 0xf1, 0x40, 0x97, 0x12, 0x7d, 0x20, 0x4d, 0x09, 0x05, 0xad, 0xb9, 0xf8, 0xc3, 0x96, 0xf0, 0xa2, - 0x37, 0x4a, 0xc3, 0x46, 0x94, 0x1b, 0x84, 0xaf, 0xef, 0xa2, 0xc1, 0x3f, 0x12, 0xf5, 0x79, 0x32, 0x19, 0xbc, 0x89, - 0x95, 0x02, 0xf9, 0xc4, 0x4d, 0x1d, 0x4a, 0x01, 0x06, 0xe8, 0x8d, 0xb0, 0x70, 0xc4, 0x14, 0x0c, 0xe0, 0x9f, 0x4c, - 0x16, 0xbd, 0x63, 0x69, 0xd9, 0xd5, 0x2f, 0x0f, 0xa1, 0x25, 0xcd, 0x29, 0x85, 0x17, 0x4a, 0x4d, 0x94, 0x38, 0x65, - 0x19, 0x77, 0x1b, 0xfd, 0xf6, 0xe1, 0x62, 0xdc, 0xba, 0x88, 0x8d, 0x3c, 0x48, 0xdf, 0x55, 0x7d, 0x40, 0xb8, 0xae, - 0x65, 0xa0, 0x4e, 0x27, 0xe7, 0xd6, 0x59, 0x6a, 0x8e, 0x65, 0x78, 0x4d, 0xcd, 0xcf, 0x4b, 0x33, 0xed, 0xa9, 0x0d, - 0x79, 0xae, 0xa7, 0x1a, 0x31, 0xe6, 0x06, 0xf8, 0x6b, 0xce, 0x01, 0x62, 0xfa, 0x2a, 0x74, 0x9d, 0x1d, 0x53, 0xf3, - 0x60, 0x9c, 0xe7, 0x46, 0x5f, 0x00, 0x42, 0x21, 0xb4, 0x6c, 0x17, 0x13, 0x97, 0xde, 0x4b, 0x0b, 0x02, 0xae, 0x91, - 0x23, 0x75, 0xdb, 0x05, 0xa8, 0xaf, 0xb9, 0x72, 0x8e, 0xc3, 0x4c, 0xd7, 0x08, 0x7c, 0x64, 0xd6, 0xa0, 0x4c, 0x08, - 0xd4, 0xfa, 0x12, 0xfe, 0xe2, 0x95, 0x28, 0xa8, 0xdb, 0x47, 0x12, 0x70, 0x50, 0xff, 0x0e, 0x8e, 0xee, 0x44, 0xfe, - 0xb9, 0x0e, 0xb0, 0xc7, 0xeb, 0xe0, 0x43, 0xae, 0x4b, 0xde, 0x0f, 0xb7, 0xdf, 0xd9, 0xe9, 0x01, 0x34, 0x38, 0xab, - 0xa8, 0xe9, 0x77, 0x58, 0xff, 0x01, 0x2b, 0x91, 0xde, 0x9b, 0x76, 0x7a, 0xaf, 0xbd, 0x58, 0x8b, 0x20, 0x11, 0x99, - 0xb7, 0xb0, 0xe0, 0x8a, 0x8f, 0xb8, 0x97, 0x63, 0x3c, 0x25, 0x1e, 0x45, 0x7f, 0x99, 0x02, 0x6e, 0xc4, 0x8b, 0x2a, - 0xe2, 0x9f, 0xbe, 0xbf, 0x4c, 0xd2, 0x38, 0xe9, 0x2d, 0xe2, 0x20, 0xca, 0x58, 0x92, 0x23, 0xa8, 0xae, 0x11, 0x3e, - 0x02, 0x3c, 0x37, 0xeb, 0x78, 0xe1, 0xf9, 0x41, 0xf6, 0xd0, 0x73, 0x38, 0x4b, 0xe1, 0xf4, 0x39, 0x77, 0xe0, 0x34, - 0xd6, 0xef, 0x71, 0x68, 0xbe, 0x44, 0xc6, 0x2f, 0xa9, 0xb3, 0x33, 0xea, 0x36, 0xef, 0x2b, 0x6f, 0x29, 0x4c, 0x06, - 0xb0, 0x1f, 0x5e, 0x62, 0x4d, 0x01, 0xcb, 0xc3, 0x52, 0x3b, 0x63, 0x36, 0x35, 0x11, 0x6b, 0x83, 0x5c, 0x5e, 0xfc, - 0xd9, 0x5d, 0x43, 0x73, 0x9a, 0x8b, 0x81, 0xe3, 0x31, 0xf6, 0x19, 0x59, 0xcf, 0x83, 0xa4, 0x52, 0xe6, 0x3e, 0x35, - 0x47, 0x6c, 0x12, 0x27, 0x8c, 0x42, 0xaa, 0xba, 0x27, 0x8b, 0xd5, 0xfe, 0xdd, 0x6f, 0x9f, 0x7e, 0x73, 0x3f, 0x51, - 0x9c, 0xb5, 0x44, 0x67, 0xc6, 0x8e, 0xde, 0xea, 0xf4, 0x0c, 0x58, 0x43, 0x82, 0xbc, 0x4f, 0xd1, 0xab, 0x7a, 0xba, - 0xde, 0x6f, 0x8c, 0x5c, 0xb5, 0x88, 0x39, 0xcd, 0x4b, 0x58, 0xe8, 0x65, 0xc1, 0x9d, 0xe0, 0x19, 0x3b, 0x47, 0x8b, - 0x95, 0x58, 0x63, 0x24, 0x78, 0x8f, 0x58, 0xa4, 0xca, 0x50, 0xc4, 0x22, 0x55, 0x8b, 0x71, 0x91, 0xfa, 0xb5, 0xd9, - 0x88, 0x60, 0x0e, 0x15, 0x4a, 0xdf, 0x5d, 0xac, 0x54, 0x12, 0x5d, 0x34, 0x93, 0x94, 0xba, 0x1a, 0x85, 0x6b, 0x1e, - 0x8c, 0xc7, 0x21, 0xcb, 0x4b, 0x0b, 0x5d, 0x5e, 0x4b, 0x05, 0x38, 0x12, 0x0e, 0xde, 0x28, 0x8d, 0xc3, 0x65, 0xc6, - 0x9a, 0xc1, 0x45, 0xc0, 0x69, 0x3b, 0x05, 0x70, 0xf0, 0x77, 0x79, 0xac, 0x5d, 0x60, 0xb7, 0x61, 0x9b, 0x38, 0x7d, - 0x08, 0xba, 0x6b, 0x75, 0xca, 0x43, 0x87, 0x57, 0x72, 0xd0, 0x66, 0xc3, 0x44, 0x4c, 0x20, 0x4b, 0x84, 0xbd, 0x35, - 0xdb, 0xe5, 0x65, 0x32, 0xf0, 0xa8, 0x2c, 0xca, 0xcb, 0x93, 0xf9, 0x73, 0xce, 0xd8, 0xab, 0xe6, 0x33, 0xf6, 0x4a, - 0x9c, 0xb1, 0xed, 0x3b, 0xf3, 0xe9, 0xc4, 0x85, 0xff, 0xfa, 0xc5, 0x84, 0x7a, 0x8e, 0xd6, 0x59, 0xac, 0x34, 0x77, - 0xb1, 0xd2, 0xac, 0xf6, 0x62, 0xa5, 0x61, 0xd7, 0x68, 0x7f, 0x61, 0xda, 0x6d, 0xc3, 0x74, 0x34, 0x28, 0x84, 0x3f, - 0xa7, 0xf4, 0xca, 0x3d, 0x84, 0x77, 0xd0, 0xaa, 0x5b, 0x7f, 0xd7, 0xde, 0x7e, 0xd4, 0xe9, 0x2c, 0x09, 0xa4, 0x6d, - 0xd8, 0x99, 0x37, 0x1a, 0xb1, 0x71, 0x6f, 0x12, 0xfb, 0xcb, 0xf4, 0xdf, 0x7c, 0xfc, 0x1c, 0x88, 0x5b, 0x11, 0x41, - 0xa5, 0x1f, 0xd1, 0x14, 0x14, 0x25, 0x77, 0x4c, 0xf4, 0xb0, 0x96, 0xeb, 0xd4, 0xa3, 0x08, 0xc1, 0x6d, 0xfb, 0xb0, - 0x61, 0x93, 0x37, 0x03, 0xfa, 0x4f, 0x5b, 0xa5, 0xcd, 0x28, 0xe6, 0x33, 0xc0, 0xb2, 0x15, 0x1c, 0x8f, 0x87, 0x06, - 0x5f, 0x4d, 0xe7, 0xa4, 0x79, 0xb8, 0xd7, 0xe2, 0x4b, 0x37, 0x82, 0xa8, 0x70, 0xba, 0xc5, 0x9d, 0x3e, 0xb6, 0xf7, - 0xba, 0x69, 0x8f, 0xd4, 0x7a, 0xdd, 0x42, 0x10, 0x8a, 0xba, 0x7b, 0x62, 0xf9, 0xa7, 0xaf, 0x0e, 0xe1, 0x3f, 0xe2, - 0xea, 0x7f, 0xce, 0x9a, 0x18, 0xf5, 0x8b, 0xb2, 0x95, 0x35, 0xb1, 0x4a, 0xc8, 0x88, 0xef, 0x5f, 0x7f, 0x32, 0x79, - 0x5c, 0x83, 0xbd, 0x6b, 0x93, 0xe9, 0x52, 0xb5, 0xf6, 0xb7, 0x71, 0x0c, 0xd9, 0x2b, 0xeb, 0xd5, 0x05, 0x78, 0xc8, - 0x90, 0x3c, 0x1b, 0x40, 0x23, 0x71, 0x8f, 0x20, 0x2d, 0xbe, 0x8e, 0x6d, 0xe8, 0x2a, 0xf1, 0x76, 0xd3, 0x55, 0xe2, - 0xcd, 0xee, 0xab, 0xc4, 0xf7, 0x7b, 0x5d, 0x25, 0xde, 0x7c, 0xf1, 0xab, 0xc4, 0xdb, 0xfa, 0x55, 0xe2, 0x2a, 0x16, - 0xd6, 0xaa, 0xe6, 0xc5, 0x92, 0xff, 0xfc, 0x48, 0x4a, 0xb9, 0xcb, 0x78, 0xd0, 0x75, 0x28, 0xea, 0xef, 0xd5, 0x1f, - 0xbe, 0x58, 0xe0, 0x46, 0x7c, 0x8f, 0xe6, 0x5b, 0xc5, 0xd5, 0x82, 0x63, 0x76, 0xfc, 0x8e, 0x52, 0x1c, 0xc6, 0xd1, - 0xf4, 0x27, 0x50, 0xca, 0x82, 0x38, 0x30, 0x51, 0x5e, 0x04, 0xe9, 0x4f, 0xf1, 0x62, 0xb9, 0xb8, 0x80, 0xbe, 0x3e, - 0x06, 0x69, 0x30, 0x0a, 0x99, 0x74, 0xc6, 0x25, 0x73, 0x33, 0x2e, 0x13, 0x07, 0xfb, 0x4e, 0xf1, 0xd3, 0x5b, 0x89, - 0x9f, 0x68, 0x01, 0xca, 0x7f, 0x93, 0x1d, 0x9b, 0xde, 0x7c, 0x11, 0x11, 0x4a, 0x40, 0x65, 0xd0, 0x8f, 0xbf, 0x8c, - 0x5c, 0xc5, 0x46, 0xc3, 0x2c, 0x85, 0xbd, 0xc3, 0xc6, 0x7e, 0x58, 0xed, 0x52, 0xb3, 0x34, 0x4c, 0x19, 0x85, 0xaa, - 0x2e, 0x86, 0x9f, 0xc7, 0xcb, 0x94, 0x8d, 0xe3, 0xfb, 0x48, 0x37, 0x23, 0x69, 0xc0, 0x0f, 0x1a, 0x4e, 0xd9, 0x06, - 0xf3, 0x27, 0x7e, 0x40, 0x46, 0x39, 0x4e, 0x5a, 0x3a, 0xa4, 0xef, 0x5c, 0x2e, 0x2c, 0x52, 0x35, 0x5b, 0x38, 0x45, - 0x5d, 0x26, 0xfa, 0x79, 0xd2, 0x6a, 0xc5, 0x83, 0xc7, 0xb5, 0x14, 0xa6, 0x1a, 0xb1, 0xcd, 0xa5, 0xc2, 0x69, 0x2b, - 0x12, 0xc2, 0x45, 0x11, 0x0a, 0xa2, 0x61, 0xe1, 0xf8, 0x1b, 0x72, 0x0b, 0x2d, 0xde, 0x42, 0x20, 0x8d, 0x7c, 0xc9, - 0xd7, 0x83, 0x07, 0x46, 0xa0, 0xc7, 0xd7, 0x0a, 0x18, 0xdf, 0xdd, 0xb1, 0x24, 0xf4, 0x1e, 0x5a, 0x46, 0x1e, 0x47, - 0x3f, 0x00, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0xf3, 0x95, 0x34, 0xec, 0xa5, 0xc6, 0x10, 0x1e, 0xe0, 0x14, - 0xa2, 0x8c, 0x00, 0x32, 0xc5, 0x4e, 0xd9, 0x3f, 0x4c, 0xfa, 0xf7, 0x9f, 0x46, 0x6e, 0x5e, 0xc6, 0xf2, 0x43, 0x7f, - 0x5f, 0xec, 0xf1, 0x99, 0xe7, 0xcf, 0x9f, 0x6c, 0x9e, 0x76, 0x39, 0x43, 0x79, 0x43, 0x6b, 0x63, 0xe3, 0x29, 0x80, - 0x51, 0x5c, 0xc5, 0x4b, 0x7f, 0x86, 0x86, 0xa5, 0x5f, 0x6e, 0xbe, 0x19, 0xf4, 0x89, 0x89, 0x3a, 0xe5, 0xd4, 0x2b, - 0x45, 0x05, 0x14, 0xf0, 0xfb, 0x6f, 0x21, 0x06, 0xe5, 0xff, 0x11, 0x0c, 0xf5, 0x5d, 0xc3, 0x6f, 0xf1, 0xc1, 0xe3, - 0x36, 0x6f, 0x1f, 0xf2, 0x49, 0xf2, 0xe8, 0x0e, 0x42, 0xb9, 0xd6, 0x8c, 0x64, 0xf2, 0x2a, 0xd0, 0xd4, 0x48, 0x6a, - 0x9b, 0x82, 0xc4, 0x89, 0xaf, 0x30, 0x9b, 0xae, 0xe9, 0xdc, 0xac, 0xdf, 0x64, 0x1c, 0x5b, 0x55, 0x90, 0x0c, 0x37, - 0x79, 0x60, 0x88, 0xbe, 0xaa, 0xef, 0xe6, 0x41, 0x64, 0x62, 0x20, 0xf4, 0xfa, 0x1b, 0x6f, 0x05, 0xa1, 0x80, 0x01, - 0xb9, 0x55, 0x5f, 0x41, 0xa1, 0xa9, 0xfa, 0xa4, 0x41, 0xb6, 0x23, 0xbd, 0x11, 0x12, 0x42, 0x8b, 0x37, 0xfc, 0x8b, - 0xa6, 0x69, 0x9a, 0xbc, 0x46, 0x68, 0xf2, 0x1e, 0x81, 0xe5, 0x78, 0x1d, 0x00, 0x6d, 0x49, 0xbe, 0x58, 0x51, 0x09, - 0xdc, 0x0c, 0x50, 0x27, 0x2b, 0x0a, 0x78, 0xb4, 0xbb, 0xae, 0x23, 0x0a, 0xc4, 0x85, 0x1e, 0x22, 0x95, 0x79, 0x09, - 0x04, 0xc5, 0xed, 0x69, 0x78, 0x61, 0xc7, 0xb7, 0x5c, 0x12, 0xac, 0x39, 0xf4, 0x38, 0xec, 0xb3, 0xe6, 0xb0, 0x68, - 0x91, 0x82, 0x05, 0x41, 0xeb, 0x50, 0x89, 0x72, 0x6c, 0xb2, 0x06, 0xdc, 0x88, 0xf7, 0xa2, 0x55, 0x36, 0x67, 0xd1, - 0x52, 0xc7, 0xb4, 0x48, 0x18, 0xa6, 0x0e, 0xea, 0xbc, 0x21, 0x66, 0x0b, 0xb0, 0x4d, 0x73, 0xcb, 0x19, 0xd1, 0xc2, - 0x94, 0xa3, 0x54, 0xcf, 0xf4, 0xb9, 0x62, 0x33, 0xe5, 0xb8, 0xad, 0x4a, 0x21, 0xf8, 0x92, 0xc6, 0x55, 0x27, 0x29, - 0xb2, 0x3c, 0x86, 0x3e, 0x28, 0x40, 0x04, 0x17, 0x17, 0x09, 0xb0, 0xb7, 0xbc, 0xea, 0xa2, 0x49, 0x8d, 0x8c, 0x57, - 0x11, 0x14, 0x25, 0x46, 0xbd, 0x1b, 0x3e, 0x4e, 0x88, 0xcd, 0xb3, 0xb1, 0x1f, 0xbf, 0xd6, 0xcf, 0x86, 0x49, 0x7f, - 0x62, 0x0f, 0x44, 0x48, 0x08, 0x54, 0x9f, 0xd8, 0x03, 0xd8, 0xfe, 0xbd, 0x05, 0x69, 0x8a, 0xbe, 0x05, 0x5d, 0x9b, - 0x10, 0xed, 0xde, 0x87, 0x78, 0x4d, 0x5b, 0x0e, 0x90, 0x93, 0x6f, 0xc1, 0xe2, 0x08, 0x62, 0x48, 0x6c, 0x2c, 0x0e, - 0x31, 0x37, 0xa9, 0x6f, 0x35, 0xc2, 0xd8, 0x6a, 0x38, 0x1a, 0xc6, 0x0b, 0xd7, 0x71, 0x0e, 0x6a, 0xf5, 0x41, 0x90, - 0xdd, 0x54, 0xdb, 0x30, 0xb3, 0x81, 0xeb, 0x58, 0xc1, 0x0b, 0xbb, 0xdd, 0xaf, 0xd1, 0x68, 0x25, 0x9c, 0xe2, 0x10, - 0xc5, 0x5f, 0x67, 0xcf, 0xd6, 0xad, 0xda, 0x81, 0x34, 0xaa, 0x26, 0xea, 0x38, 0xb6, 0x9c, 0xcb, 0xbf, 0x86, 0x75, - 0xd2, 0x4f, 0xc1, 0x1c, 0x29, 0xb5, 0xc7, 0x10, 0x02, 0x02, 0xb7, 0xe0, 0x18, 0xfd, 0x55, 0x7b, 0xa9, 0xb5, 0xe8, - 0xf8, 0x18, 0xc6, 0x50, 0x66, 0x8c, 0x16, 0x1e, 0x5c, 0x6a, 0x07, 0x95, 0x2f, 0xa6, 0x55, 0x0c, 0xc7, 0x43, 0x8f, - 0xb2, 0x42, 0xa3, 0xb7, 0x95, 0x5b, 0xc0, 0xfe, 0x37, 0x90, 0x4f, 0x7b, 0x04, 0x3e, 0xff, 0x50, 0x03, 0xc2, 0x87, - 0xef, 0xec, 0x70, 0xb9, 0x28, 0x77, 0x57, 0x26, 0x92, 0xfb, 0x77, 0x86, 0x44, 0x07, 0x75, 0x68, 0xb2, 0xbf, 0x66, - 0x72, 0xf7, 0xc8, 0x2e, 0x59, 0x34, 0x2e, 0x77, 0x58, 0xa1, 0x5f, 0xfb, 0x77, 0x57, 0xc2, 0x28, 0x10, 0x57, 0x3f, - 0x6e, 0xc0, 0x28, 0x79, 0x1c, 0xe1, 0xe6, 0xa7, 0xe3, 0x16, 0xec, 0xc5, 0xc5, 0x60, 0x03, 0x0a, 0x8a, 0x25, 0x9b, - 0x29, 0x42, 0x71, 0x08, 0xde, 0x8c, 0x2e, 0xb7, 0x2d, 0xc1, 0x88, 0x6e, 0xdc, 0x89, 0x99, 0xb0, 0x29, 0x2c, 0xda, - 0x04, 0x3c, 0x1c, 0xe3, 0xbe, 0x52, 0xeb, 0x60, 0xb7, 0xd4, 0x3a, 0xdb, 0x25, 0xb5, 0x26, 0xef, 0xa5, 0xfb, 0xc4, - 0x5b, 0x28, 0xfe, 0x6f, 0x82, 0x39, 0x57, 0xdd, 0xe0, 0x4a, 0xa2, 0x6e, 0x74, 0x76, 0x12, 0xad, 0x6a, 0xbd, 0x91, - 0x95, 0x20, 0x8a, 0xbf, 0x95, 0x0b, 0x8a, 0x50, 0xa8, 0xab, 0xb2, 0xf1, 0xab, 0x42, 0x36, 0x4e, 0xb7, 0x9a, 0xc2, - 0x71, 0x45, 0x70, 0xff, 0x8a, 0x4b, 0x98, 0xbc, 0x1d, 0x14, 0xae, 0x61, 0xc5, 0x48, 0x15, 0x6f, 0xa7, 0xe2, 0xa2, - 0xa1, 0xb8, 0xd0, 0x89, 0x5b, 0x46, 0xd9, 0x93, 0xae, 0x5c, 0xb5, 0x70, 0xa9, 0x2b, 0xca, 0x41, 0xea, 0x8e, 0x43, - 0x96, 0xc5, 0xea, 0xb6, 0x29, 0xbb, 0xbb, 0xa8, 0xaf, 0x95, 0x4d, 0x22, 0xfd, 0x52, 0x08, 0xc0, 0x42, 0x4c, 0x5f, - 0xd1, 0x6b, 0x4b, 0x1b, 0x08, 0x1c, 0x64, 0x83, 0x13, 0xdd, 0x6e, 0xe9, 0x3c, 0xa5, 0x0c, 0x28, 0xb4, 0xf0, 0xaa, - 0x0c, 0x02, 0xe1, 0x7b, 0xb3, 0x6e, 0xa0, 0xf2, 0x48, 0xe4, 0x39, 0x7d, 0x07, 0xf1, 0xa2, 0xe6, 0xa8, 0x8a, 0x7c, - 0x3c, 0x99, 0x16, 0x99, 0xe7, 0x62, 0xd5, 0x7a, 0xa7, 0x24, 0xc4, 0x59, 0x73, 0x4f, 0x94, 0xb2, 0x8c, 0x9e, 0xd7, - 0xe8, 0x89, 0xef, 0xf2, 0xad, 0x93, 0x2c, 0x23, 0x0c, 0xef, 0x6e, 0x65, 0x89, 0xe7, 0x7f, 0x52, 0x86, 0x2c, 0xe4, - 0x9c, 0x20, 0x03, 0x2e, 0x6b, 0x0a, 0xfa, 0x1e, 0x46, 0x43, 0x64, 0x3d, 0xbb, 0x9d, 0x2a, 0xd2, 0x97, 0xde, 0x53, - 0xa7, 0xe3, 0xbd, 0x9a, 0x1c, 0x56, 0x84, 0xa2, 0xed, 0x6e, 0x59, 0x64, 0xbe, 0x61, 0x1c, 0xd9, 0x6c, 0x39, 0x1f, - 0xad, 0x55, 0xd9, 0xaa, 0x22, 0x72, 0xad, 0x8b, 0x59, 0xd5, 0xcf, 0x4e, 0x26, 0x93, 0xb2, 0xa0, 0xd1, 0xd1, 0x0e, - 0x51, 0x58, 0xf8, 0xd4, 0x71, 0x9c, 0xea, 0xd8, 0xb7, 0x83, 0xdd, 0x42, 0xb9, 0xed, 0x49, 0xe3, 0x88, 0x11, 0xb6, - 0xbb, 0xe0, 0x57, 0x07, 0x47, 0x6e, 0x17, 0x27, 0xbb, 0x64, 0x16, 0xd1, 0x27, 0x63, 0x88, 0x20, 0x63, 0xf3, 0xb4, - 0xe7, 0x33, 0xd4, 0xc1, 0xd8, 0xca, 0x81, 0x46, 0xc3, 0x01, 0x6b, 0x0a, 0xa6, 0x22, 0xae, 0xd8, 0x15, 0x8e, 0x86, - 0xf2, 0xf0, 0x9a, 0xf0, 0x5e, 0x7c, 0x04, 0x0f, 0xca, 0xba, 0x2e, 0xd3, 0xc6, 0x69, 0x75, 0x9d, 0xbf, 0x96, 0xea, - 0x69, 0x40, 0x00, 0xd7, 0x42, 0xa1, 0x4d, 0xf2, 0x59, 0xfc, 0x7f, 0x29, 0xff, 0x7f, 0xb5, 0x58, 0x95, 0xed, 0x47, - 0x4e, 0x40, 0xa2, 0x5d, 0x9c, 0x16, 0x1a, 0x75, 0xd3, 0x1e, 0x90, 0x56, 0x06, 0x13, 0x55, 0x81, 0x0e, 0x4a, 0xfa, - 0x52, 0x0e, 0x8c, 0x06, 0xf1, 0x3b, 0x72, 0xcc, 0xb0, 0xc4, 0x85, 0x08, 0xb1, 0xc8, 0xe0, 0x06, 0x73, 0x30, 0x5f, - 0x9e, 0xa0, 0xfe, 0xa0, 0xb4, 0x27, 0x40, 0x1b, 0x5f, 0x9b, 0xdb, 0x5e, 0xe2, 0xfe, 0xaa, 0x5e, 0x4b, 0x74, 0x0c, - 0x20, 0x73, 0xe1, 0x10, 0xa2, 0x21, 0x81, 0x56, 0xd9, 0xdc, 0x34, 0x4a, 0xf9, 0x56, 0xd5, 0xb3, 0x89, 0x81, 0x61, - 0x77, 0xcd, 0x55, 0xa8, 0x6f, 0xa1, 0x2d, 0x80, 0xc9, 0xf2, 0xed, 0x87, 0xcf, 0x16, 0x2c, 0xb1, 0xba, 0x1f, 0x5d, - 0x5c, 0x72, 0xdc, 0xbf, 0x16, 0xd2, 0xce, 0x94, 0xce, 0x3f, 0xca, 0x17, 0xbf, 0x6f, 0x14, 0xe8, 0x5d, 0x95, 0x24, - 0x74, 0xdc, 0x5a, 0xbc, 0x6d, 0xec, 0x55, 0x7b, 0x1e, 0x44, 0xfb, 0xd7, 0xf5, 0x56, 0x7b, 0xd7, 0x05, 0x82, 0xb1, - 0x77, 0x65, 0xa0, 0x38, 0x64, 0xb9, 0x90, 0x0d, 0xbe, 0x57, 0x04, 0x8a, 0xaa, 0x93, 0xaf, 0x8e, 0xad, 0x88, 0xcb, - 0xbf, 0x5a, 0x02, 0xf3, 0xb9, 0x57, 0x8e, 0x03, 0x4d, 0xa4, 0x29, 0xd3, 0x8f, 0xb5, 0x13, 0xed, 0xb8, 0xa3, 0x1d, - 0x39, 0x3a, 0xdd, 0xc2, 0x06, 0x7a, 0xb7, 0x5d, 0x78, 0xef, 0x1d, 0x3a, 0xfa, 0xd9, 0xe9, 0x54, 0x10, 0x89, 0x49, - 0x10, 0x86, 0x84, 0x2a, 0xd2, 0x2c, 0x89, 0x3f, 0xb1, 0xb2, 0x9a, 0x85, 0xca, 0xb8, 0x11, 0x48, 0x5b, 0x3c, 0xc2, - 0xd9, 0xf1, 0xbd, 0x45, 0x0f, 0xcf, 0x86, 0x5a, 0x08, 0x06, 0x9c, 0x54, 0x8a, 0x9f, 0x00, 0x1a, 0x3c, 0xd2, 0xcf, - 0x4e, 0x21, 0x8a, 0x9f, 0x36, 0x1e, 0xe8, 0x3f, 0xb4, 0x8f, 0x35, 0xb7, 0x7b, 0x67, 0x75, 0x7c, 0xc7, 0x72, 0xed, - 0x43, 0xcd, 0xb1, 0x8f, 0xac, 0xb6, 0x7d, 0xac, 0xb5, 0xed, 0x2e, 0xfc, 0xeb, 0xbb, 0xf6, 0x2b, 0xcd, 0x81, 0x27, - 0xcd, 0xb5, 0x3b, 0xf8, 0x6f, 0xdb, 0x3e, 0xbe, 0xeb, 0x10, 0xa5, 0xf7, 0x74, 0x31, 0xe4, 0xca, 0x28, 0xc0, 0x09, - 0x44, 0x3f, 0x38, 0x3b, 0x5d, 0xa6, 0x4c, 0x5b, 0x0d, 0xf4, 0x57, 0xba, 0x36, 0x4b, 0xd8, 0x64, 0xa0, 0x3f, 0xf5, - 0x94, 0x52, 0xf7, 0xa4, 0xb1, 0xb8, 0x7d, 0xdc, 0x58, 0xdc, 0x39, 0x6a, 0x2c, 0x3e, 0xec, 0x96, 0x8b, 0x0f, 0xa6, - 0xf4, 0x4a, 0x49, 0xa2, 0x37, 0xf7, 0xb2, 0x24, 0x58, 0xb5, 0x5c, 0x0d, 0xd0, 0xb5, 0x05, 0xff, 0x1c, 0xb7, 0x0d, - 0xd9, 0x6a, 0x04, 0xad, 0x24, 0x34, 0x8e, 0x4f, 0x34, 0xf7, 0xe8, 0x6f, 0xed, 0x23, 0x1f, 0xea, 0x41, 0xca, 0x47, - 0xf8, 0xbb, 0xeb, 0x9c, 0xf8, 0x8e, 0x06, 0x0d, 0x5d, 0xf8, 0x6f, 0xd6, 0x6d, 0xfb, 0xf4, 0xe0, 0xc0, 0xfb, 0x8f, - 0xee, 0x71, 0xea, 0x58, 0x2e, 0xfc, 0xf7, 0xab, 0x54, 0xb9, 0x83, 0xc2, 0x5f, 0xed, 0xf7, 0xd0, 0xd1, 0x3a, 0x27, - 0xb3, 0xb6, 0xfd, 0xea, 0xee, 0xd8, 0x3e, 0x99, 0xb9, 0xc7, 0x1f, 0xe9, 0x29, 0xb4, 0xda, 0xf6, 0x2b, 0xf8, 0xfb, - 0xd8, 0x71, 0x66, 0x96, 0x6b, 0x9f, 0xdc, 0x75, 0xec, 0x4e, 0x68, 0x1d, 0xd9, 0x27, 0xf0, 0xf7, 0x2b, 0x80, 0x17, - 0xe0, 0xca, 0x73, 0x74, 0x6a, 0xb0, 0x31, 0x2a, 0xf6, 0x1b, 0xea, 0x47, 0xda, 0x87, 0x5a, 0xf7, 0xf0, 0x6f, 0x27, - 0x77, 0xd6, 0xe1, 0xcc, 0x6d, 0xdf, 0x59, 0x1b, 0x7f, 0x7e, 0x04, 0xc8, 0x6f, 0x5f, 0x38, 0x00, 0x23, 0x26, 0xe5, - 0xf8, 0xcb, 0xd0, 0xbc, 0xdc, 0x24, 0x46, 0x7f, 0xbf, 0x5b, 0x8c, 0xfe, 0xdd, 0x72, 0x1f, 0x31, 0xfa, 0xfb, 0x2f, - 0x2e, 0x46, 0xbf, 0xac, 0x5a, 0x71, 0xbf, 0xaf, 0x06, 0x0f, 0xff, 0x79, 0x5d, 0x65, 0x92, 0x03, 0xaf, 0x75, 0x7d, - 0xb5, 0xbc, 0x81, 0xb8, 0x3a, 0xef, 0xe3, 0xc1, 0x77, 0xcb, 0x92, 0x89, 0x52, 0x0c, 0x18, 0xe0, 0x7d, 0x4c, 0x18, - 0xe0, 0xd7, 0xe5, 0x00, 0xec, 0x22, 0x38, 0xd5, 0x0c, 0xc6, 0xd6, 0xcc, 0x0b, 0x27, 0x92, 0xe2, 0x42, 0x49, 0x1f, - 0x8b, 0xc1, 0x66, 0x1e, 0x88, 0x09, 0x28, 0x6b, 0x96, 0xf3, 0x28, 0xed, 0x1d, 0x39, 0x80, 0xe6, 0xdb, 0x93, 0x24, - 0xaf, 0x34, 0xb6, 0x45, 0x24, 0xa2, 0x5b, 0x6e, 0xd3, 0xbf, 0xf1, 0x3d, 0x9a, 0xac, 0x35, 0xf7, 0xee, 0xd6, 0xfb, - 0xd5, 0xc0, 0x16, 0x44, 0x98, 0xf4, 0x01, 0xb3, 0xd1, 0xf4, 0xbe, 0x6c, 0x38, 0x56, 0x31, 0x15, 0xdc, 0x3c, 0x52, - 0x18, 0x49, 0xb5, 0xbd, 0x5b, 0x36, 0x3c, 0xdb, 0x35, 0xcd, 0x86, 0xcf, 0x97, 0x9a, 0x6f, 0xb1, 0x7a, 0x93, 0x1d, - 0x57, 0x41, 0x55, 0x49, 0x7d, 0xd5, 0x08, 0x90, 0x82, 0xf7, 0x2c, 0x4c, 0xe3, 0x0a, 0xc6, 0xc7, 0xd1, 0x90, 0x1a, - 0x3b, 0xca, 0xbb, 0x52, 0x9f, 0xaa, 0x39, 0xdd, 0x8b, 0x35, 0xf2, 0x83, 0xc1, 0xaf, 0xc0, 0xd8, 0x70, 0x7a, 0x3c, - 0x8a, 0x55, 0x38, 0xaf, 0x95, 0x7e, 0x89, 0xd5, 0xce, 0x67, 0xee, 0xba, 0xce, 0xda, 0x6c, 0x34, 0xa4, 0x75, 0xd9, - 0x5c, 0xd0, 0x68, 0xfc, 0x3c, 0x99, 0xad, 0xe6, 0x64, 0x5a, 0x8c, 0x96, 0xb9, 0xdb, 0x3a, 0x13, 0xf5, 0x9e, 0xc2, - 0x26, 0x36, 0xf9, 0x83, 0xea, 0x25, 0xbe, 0x9e, 0x40, 0x9a, 0xe2, 0x1e, 0x32, 0x11, 0x0a, 0x07, 0xd5, 0x46, 0x1b, - 0xdb, 0xfe, 0x16, 0xf3, 0x0f, 0xb5, 0x63, 0xde, 0x09, 0xda, 0xea, 0x6e, 0xb3, 0x18, 0x91, 0xae, 0x0d, 0xeb, 0x92, - 0x02, 0xd5, 0xed, 0x1e, 0x9b, 0xee, 0x91, 0x69, 0x1f, 0x77, 0x8d, 0x5c, 0x1c, 0x38, 0xb5, 0xcb, 0x12, 0x40, 0xc0, - 0x64, 0x57, 0x0e, 0x33, 0x88, 0x82, 0x2c, 0xf0, 0xc2, 0x1c, 0x50, 0x7d, 0x99, 0xe7, 0xfd, 0xd7, 0x32, 0xcd, 0x60, - 0x8e, 0x82, 0x25, 0x43, 0x73, 0x65, 0x6b, 0xc4, 0xb2, 0x7b, 0xc6, 0xa2, 0x0d, 0xaa, 0xdc, 0xaa, 0xf5, 0xf3, 0x9f, - 0x67, 0x0b, 0x9a, 0x93, 0x9d, 0xc5, 0x28, 0x8b, 0xf8, 0xfe, 0x10, 0xa6, 0xba, 0xf9, 0xd0, 0xfc, 0x71, 0x13, 0xc2, - 0xfd, 0xd7, 0x6e, 0x84, 0x9b, 0xb1, 0x7d, 0x10, 0xee, 0xbf, 0xbe, 0x38, 0xc2, 0xfd, 0x51, 0x45, 0xb8, 0x25, 0x4f, - 0x95, 0x42, 0x26, 0xfa, 0x01, 0x9f, 0x5b, 0x10, 0x75, 0xf7, 0xa5, 0x7e, 0x40, 0xec, 0xa5, 0xae, 0x64, 0x43, 0xfd, - 0x58, 0x4a, 0xef, 0x82, 0x57, 0x76, 0x0c, 0x3f, 0x4a, 0xa9, 0x24, 0x20, 0x53, 0xa8, 0xcc, 0x79, 0x0d, 0x7d, 0x5e, - 0x44, 0x59, 0x68, 0xbf, 0xe7, 0xd7, 0x12, 0x50, 0x41, 0x7c, 0x17, 0x27, 0x73, 0x0f, 0x43, 0xaf, 0xe9, 0x98, 0x16, - 0x0e, 0x1e, 0x1c, 0xf0, 0x8e, 0xf2, 0xe3, 0x68, 0x2c, 0xe5, 0xe8, 0x6c, 0x70, 0x4d, 0xfc, 0xa0, 0xfe, 0xc0, 0xbc, - 0x44, 0x37, 0xe9, 0x35, 0x2c, 0xee, 0x8b, 0x8e, 0xf3, 0xa2, 0x7d, 0xf8, 0xe2, 0xc8, 0x81, 0xff, 0xb9, 0xac, 0x93, - 0x9b, 0xbc, 0xe2, 0x3c, 0x8e, 0x20, 0x33, 0x85, 0xa8, 0xb9, 0xa9, 0xda, 0x3d, 0x63, 0x9f, 0x8a, 0x5a, 0xc7, 0xcd, - 0x95, 0xc6, 0xde, 0x43, 0x51, 0xa7, 0xb1, 0xc6, 0x2c, 0x5e, 0x2a, 0xc3, 0x6a, 0x18, 0x4d, 0x10, 0x2d, 0x41, 0x32, - 0xa4, 0xd4, 0x50, 0x5f, 0xf3, 0xe9, 0x16, 0xf3, 0x62, 0x9d, 0xfc, 0xa6, 0x48, 0x7f, 0x23, 0xd2, 0x70, 0xec, 0x84, - 0x20, 0x17, 0xaa, 0x3b, 0x18, 0x3c, 0x1b, 0x13, 0xc0, 0x68, 0x90, 0x7c, 0xae, 0xc8, 0x71, 0x8e, 0x0b, 0x94, 0x25, - 0xcb, 0xc8, 0xa7, 0x34, 0xe6, 0xde, 0x28, 0x6d, 0x05, 0x07, 0x10, 0x97, 0x13, 0x3f, 0x6c, 0xe0, 0xaa, 0x79, 0x67, - 0x4e, 0x91, 0x2b, 0x20, 0x15, 0xab, 0xe2, 0xbd, 0xc8, 0xcc, 0x84, 0x32, 0x8c, 0xe2, 0xd2, 0x5a, 0x03, 0xef, 0x85, - 0x6c, 0xf8, 0x22, 0x33, 0x21, 0xcb, 0x27, 0x2c, 0xf7, 0xf3, 0xe7, 0x54, 0x0b, 0xf2, 0xee, 0xd1, 0xb4, 0xce, 0x7d, - 0x99, 0xab, 0x4b, 0xd7, 0xbc, 0x69, 0xac, 0x63, 0xae, 0xae, 0x9e, 0x6f, 0xc6, 0x2f, 0x5f, 0x9e, 0x0d, 0x5c, 0x83, - 0x67, 0x8d, 0x2c, 0xa5, 0x38, 0xba, 0xdc, 0x4f, 0x35, 0x6e, 0x34, 0x3a, 0x6d, 0x2d, 0x82, 0x68, 0x2a, 0x34, 0xd3, - 0x12, 0x7b, 0x41, 0xca, 0x01, 0x52, 0x81, 0x79, 0x42, 0x45, 0x2d, 0xea, 0xdc, 0xb1, 0x04, 0x32, 0x5e, 0x0e, 0xf4, - 0x8e, 0xed, 0xd8, 0x8e, 0x2e, 0x1b, 0x4e, 0x82, 0xe9, 0x60, 0x1d, 0x67, 0x1e, 0x24, 0x6f, 0x09, 0xe3, 0x29, 0x78, - 0x7e, 0x64, 0x41, 0x16, 0x42, 0x26, 0x10, 0x70, 0x01, 0x99, 0xd3, 0xad, 0x31, 0xe7, 0xf6, 0xb8, 0x5e, 0xf2, 0x09, - 0xb3, 0xc1, 0x09, 0xa7, 0x2f, 0x8c, 0x3f, 0xf3, 0x03, 0x10, 0xc3, 0x96, 0xde, 0x82, 0x5c, 0x84, 0x2c, 0x49, 0x2d, - 0xd5, 0xbe, 0xbd, 0xa7, 0x41, 0x1b, 0xc8, 0x13, 0x8e, 0x1d, 0x4c, 0x12, 0x6f, 0x0e, 0x41, 0xb3, 0xd7, 0xb9, 0xc9, - 0x31, 0xad, 0xce, 0x51, 0xad, 0xe6, 0xbe, 0x3a, 0x32, 0xb5, 0xb6, 0x6b, 0x6a, 0x0e, 0xa0, 0x5b, 0x3d, 0x37, 0xd7, - 0xf9, 0x4d, 0x7f, 0x97, 0x8a, 0x8e, 0xf0, 0xcb, 0x53, 0x9a, 0x07, 0x29, 0xe7, 0xb8, 0xf0, 0x33, 0xa3, 0xd0, 0x81, - 0x2d, 0x25, 0x9c, 0x75, 0x40, 0x62, 0xfa, 0x2b, 0xb6, 0xca, 0x0c, 0xcc, 0x94, 0xc1, 0xab, 0x04, 0xc6, 0x1a, 0x5d, - 0xd3, 0x82, 0x48, 0x0b, 0x7e, 0xfb, 0xad, 0x15, 0x80, 0xf9, 0xfd, 0x40, 0x81, 0x0f, 0x3c, 0x1b, 0x25, 0x80, 0x05, - 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0x2c, 0x7e, 0x70, 0xc5, 0x9e, 0x1d, 0x7a, 0xd1, 0x14, - 0x50, 0x9a, 0x17, 0x4d, 0x6b, 0x06, 0x04, 0xe4, 0x5d, 0x57, 0x29, 0x2d, 0xba, 0x2a, 0x94, 0xfb, 0xe9, 0xb7, 0x0f, - 0x57, 0x94, 0x09, 0x08, 0xb2, 0x4e, 0x7b, 0x63, 0x74, 0x05, 0x2b, 0x74, 0x0f, 0x2f, 0x07, 0x5f, 0x9d, 0xce, 0x59, - 0xe6, 0x91, 0xe0, 0x12, 0xae, 0x78, 0xc0, 0x0e, 0x68, 0xbe, 0xc8, 0xe2, 0x49, 0x17, 0xbc, 0x31, 0xbb, 0x0b, 0x7c, - 0x7e, 0x4f, 0x33, 0x35, 0x4e, 0xa7, 0x2c, 0xb4, 0x51, 0x1a, 0xb8, 0x26, 0x99, 0xc8, 0xfa, 0x1e, 0x06, 0x18, 0x1c, - 0x44, 0xb1, 0x7e, 0xf6, 0x95, 0xf4, 0x26, 0xda, 0xb4, 0x08, 0x90, 0x8e, 0xef, 0x3a, 0x61, 0xe1, 0xbf, 0x07, 0x5f, - 0x01, 0xe1, 0xfe, 0xea, 0x46, 0x37, 0xfa, 0x99, 0x8d, 0xf7, 0x98, 0xaf, 0x1a, 0xd2, 0xd2, 0xe1, 0x1d, 0x95, 0x5f, - 0x36, 0x3b, 0xca, 0x65, 0x13, 0x7e, 0xef, 0xbe, 0xba, 0x9e, 0x9d, 0x22, 0x41, 0x3b, 0x83, 0xdb, 0xc5, 0xba, 0x74, - 0xe7, 0x74, 0xfb, 0x78, 0x41, 0x1d, 0x85, 0x9e, 0xff, 0x49, 0xdc, 0x50, 0xd5, 0x87, 0x7d, 0xee, 0xa2, 0x92, 0xb3, - 0x6b, 0xdc, 0xcb, 0xb8, 0x95, 0xd7, 0xf8, 0x65, 0xfc, 0xd4, 0xfd, 0x2c, 0xc8, 0xe4, 0x65, 0x18, 0x1f, 0x72, 0xd0, - 0xe6, 0xe0, 0xf8, 0x8a, 0xeb, 0x0f, 0x5c, 0x50, 0xdd, 0x93, 0xbf, 0x75, 0xef, 0x5c, 0x67, 0xd6, 0x76, 0x6d, 0xb8, - 0xe6, 0xcc, 0x3a, 0xf6, 0x71, 0x68, 0x75, 0xec, 0x63, 0xf8, 0xfb, 0x08, 0x57, 0x2f, 0xab, 0x6d, 0x1f, 0x7e, 0x74, - 0xdb, 0xa1, 0x75, 0x62, 0x1f, 0xc3, 0xdf, 0x25, 0xb5, 0xfa, 0x19, 0x2f, 0x3d, 0x70, 0xe1, 0xf9, 0xaa, 0x84, 0x05, - 0x94, 0xdf, 0x52, 0x8b, 0x60, 0x96, 0xc8, 0x5b, 0x83, 0x26, 0x02, 0x50, 0x86, 0x6e, 0x8a, 0x80, 0x80, 0x51, 0xbf, - 0x05, 0x79, 0xb2, 0x31, 0xc2, 0xbb, 0x30, 0xc8, 0x88, 0x8a, 0x9c, 0xef, 0x9b, 0x8f, 0x11, 0x6f, 0xd3, 0x1c, 0x6a, - 0x5b, 0xa4, 0x0e, 0x22, 0xd5, 0xc5, 0xdf, 0x17, 0x18, 0x45, 0x47, 0x04, 0x07, 0x57, 0xb0, 0x52, 0x91, 0xbe, 0x2e, - 0xdf, 0x3d, 0x70, 0xf4, 0x1b, 0x65, 0x32, 0x7d, 0xca, 0x17, 0xed, 0x9b, 0xab, 0x33, 0x64, 0xef, 0x7f, 0xb4, 0x1f, - 0xcc, 0x1a, 0x4a, 0xfd, 0x88, 0x38, 0x9e, 0xe3, 0x20, 0x91, 0xc3, 0x53, 0x50, 0xb4, 0xdb, 0x1c, 0xa3, 0xdc, 0x80, - 0x3c, 0x13, 0x17, 0xc0, 0x25, 0xdf, 0x79, 0xa1, 0x62, 0x7a, 0xa1, 0xb4, 0x7c, 0x22, 0x31, 0xff, 0xf3, 0xe7, 0xc5, - 0xe0, 0xac, 0xca, 0xb8, 0x4f, 0xdd, 0x2e, 0x90, 0xdd, 0x2e, 0xeb, 0x6c, 0xb5, 0x02, 0xda, 0x1d, 0x08, 0xb6, 0x08, - 0x1d, 0x29, 0x34, 0xfd, 0x42, 0xc7, 0xb8, 0xd1, 0x14, 0xa9, 0xa6, 0x61, 0x84, 0x10, 0xba, 0x95, 0xab, 0x8e, 0x6e, - 0xf4, 0x23, 0xa1, 0x30, 0x8b, 0xb6, 0x04, 0xbf, 0xe5, 0x77, 0x31, 0x1d, 0x40, 0xb3, 0x65, 0x1e, 0x3b, 0x5c, 0x1a, - 0xff, 0xdf, 0x93, 0x40, 0xf7, 0x22, 0xd0, 0xf0, 0x55, 0x4e, 0x6b, 0xc9, 0xdd, 0x44, 0xd2, 0x55, 0x22, 0xa8, 0x2c, - 0x3d, 0xd7, 0xa1, 0x08, 0x12, 0x10, 0x61, 0xce, 0x31, 0x69, 0xde, 0x24, 0xa9, 0x45, 0x51, 0x60, 0x06, 0x10, 0xfd, - 0xb9, 0x25, 0x5c, 0x9d, 0x8c, 0xe7, 0xcf, 0x37, 0x12, 0x21, 0x52, 0x27, 0xab, 0xa9, 0x17, 0x75, 0x15, 0xbf, 0xe9, - 0x2a, 0x8a, 0x91, 0xfd, 0x22, 0xd6, 0x10, 0x56, 0x59, 0xb4, 0xf7, 0xf0, 0xe7, 0x88, 0x79, 0x99, 0xcd, 0xf5, 0x20, - 0x2d, 0x85, 0xb8, 0x9b, 0x2e, 0xeb, 0x80, 0x3d, 0x16, 0x0f, 0xb6, 0xc5, 0x23, 0xcb, 0x3d, 0x5b, 0x7f, 0x5c, 0x72, - 0x3f, 0x64, 0xe8, 0xe3, 0x37, 0xa7, 0x08, 0x9e, 0xf2, 0x2e, 0xf3, 0x28, 0xc2, 0x86, 0x4a, 0x72, 0xe3, 0xcc, 0x13, - 0x89, 0x3e, 0x80, 0x2f, 0xef, 0x37, 0x2a, 0x0c, 0x15, 0x5f, 0xe5, 0xb3, 0x77, 0x57, 0xdf, 0x68, 0x7c, 0xff, 0x93, - 0x7e, 0x0b, 0x2f, 0x32, 0x14, 0xef, 0x7e, 0x40, 0xf1, 0xee, 0x35, 0x9e, 0xe7, 0x01, 0xa2, 0xc6, 0xe7, 0x07, 0x04, - 0x41, 0x5d, 0x63, 0x91, 0x4f, 0x5a, 0xbf, 0xf9, 0x32, 0xcc, 0x82, 0x85, 0x97, 0x64, 0x07, 0xd0, 0xd4, 0x02, 0x24, - 0xa7, 0x6f, 0xf2, 0x60, 0x26, 0xc5, 0xa1, 0x10, 0xaa, 0x65, 0x91, 0xd0, 0x1c, 0x4e, 0x82, 0x50, 0x2a, 0x0e, 0xc5, - 0x07, 0x3c, 0xdf, 0x67, 0x8b, 0x6c, 0xa0, 0x7b, 0x0b, 0xc8, 0x7b, 0x80, 0x91, 0x8c, 0x0f, 0x62, 0x3f, 0x63, 0x99, - 0x95, 0x66, 0x09, 0xf3, 0xe6, 0xba, 0x0c, 0xeb, 0x59, 0xef, 0x2f, 0x5d, 0x8e, 0xe6, 0x41, 0x26, 0x23, 0xe3, 0xd1, - 0x04, 0x41, 0x85, 0x07, 0x43, 0x3c, 0x1b, 0xe6, 0x1c, 0x84, 0x97, 0xf1, 0xb4, 0xb2, 0xa3, 0x0a, 0xce, 0xe5, 0x1c, - 0xa3, 0xae, 0xf2, 0x58, 0xf7, 0x63, 0xf4, 0xc8, 0xb9, 0xe5, 0x5e, 0xd7, 0x32, 0x80, 0x9f, 0x7e, 0x76, 0xca, 0xaf, - 0xb7, 0x1a, 0x06, 0x0a, 0xd0, 0xbb, 0x0e, 0xc4, 0x95, 0xdd, 0xe4, 0x8f, 0x7d, 0xc0, 0x2b, 0x03, 0x69, 0xa2, 0x9e, - 0x31, 0xc2, 0x37, 0x8d, 0xe5, 0x0a, 0x18, 0xa1, 0x92, 0x8a, 0x77, 0xe6, 0x9e, 0x49, 0x07, 0x20, 0x1c, 0x15, 0xf2, - 0x4a, 0xbf, 0xfd, 0xf6, 0x7a, 0xf8, 0x9f, 0xdf, 0x21, 0x0c, 0xf9, 0xcc, 0x15, 0x5e, 0xd0, 0xd7, 0x6a, 0x2d, 0xce, - 0x7d, 0x9a, 0x43, 0x54, 0xef, 0xb3, 0xb1, 0x08, 0x0b, 0x22, 0xb6, 0x56, 0x3e, 0xbc, 0x11, 0xa1, 0x9e, 0x20, 0xd5, - 0x80, 0x21, 0x7c, 0xb5, 0x87, 0xb0, 0xbc, 0x43, 0x11, 0x22, 0x40, 0xfb, 0x65, 0xf5, 0xed, 0x31, 0xa4, 0xcd, 0xad, - 0x65, 0x00, 0x50, 0x06, 0x88, 0x7b, 0xe8, 0xec, 0xd4, 0xe3, 0xc2, 0x57, 0x60, 0x3f, 0xd2, 0xde, 0x01, 0x4c, 0x73, - 0x16, 0xcf, 0x99, 0x1d, 0xc4, 0x07, 0xf7, 0x6c, 0x64, 0x79, 0x8b, 0x80, 0xe4, 0xcb, 0x28, 0x77, 0xd3, 0x88, 0xf3, - 0x93, 0x0a, 0x5a, 0xe2, 0xaf, 0xf3, 0x02, 0x94, 0x71, 0x01, 0x28, 0xf8, 0xe9, 0x9d, 0x95, 0xa3, 0xf5, 0xd9, 0x22, - 0x36, 0x7c, 0x19, 0xcb, 0x9f, 0x53, 0xd0, 0x3d, 0x11, 0x5f, 0xaf, 0x78, 0xb0, 0xe2, 0xc9, 0x44, 0x8d, 0xb0, 0x67, - 0x97, 0xbf, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0x41, 0x5f, 0xaa, 0x7f, 0x42, 0xfe, 0x84, 0xf4, 0xb5, 0x3c, 0x18, - 0x23, 0x9c, 0xe7, 0x5a, 0xa4, 0x3e, 0x09, 0x92, 0xa7, 0x54, 0x89, 0x23, 0x8a, 0x6a, 0x0c, 0xe8, 0x0d, 0xac, 0xc9, - 0x93, 0xc1, 0x80, 0xf0, 0x58, 0x15, 0x9d, 0x01, 0x94, 0x1a, 0xe2, 0xe4, 0xc3, 0x64, 0x33, 0x68, 0x68, 0x91, 0x07, - 0x17, 0x36, 0xaa, 0x4e, 0xa7, 0x3e, 0xc6, 0x03, 0x4f, 0xec, 0xaf, 0xd2, 0x0e, 0x84, 0x9d, 0xc5, 0x17, 0x16, 0x10, - 0xb8, 0xe8, 0xa7, 0x82, 0xc7, 0xb5, 0xaf, 0x09, 0x65, 0x5b, 0xa1, 0xf7, 0x10, 0x2b, 0x9a, 0x75, 0xee, 0x64, 0x7f, - 0x89, 0xa5, 0x57, 0xc2, 0xb9, 0xad, 0x76, 0x92, 0x64, 0xac, 0xf1, 0xfa, 0x69, 0x52, 0x83, 0x83, 0xef, 0x3a, 0x4c, - 0x6a, 0xdd, 0xf2, 0x64, 0x10, 0x3b, 0xe6, 0xc5, 0x41, 0x2b, 0xbd, 0xc4, 0x73, 0x9f, 0x9f, 0x1e, 0xc0, 0xfc, 0x20, - 0x30, 0x40, 0x89, 0x33, 0x0a, 0x0c, 0x88, 0x3e, 0xe0, 0xa5, 0x64, 0x1d, 0x70, 0x31, 0x16, 0x4c, 0x1d, 0xde, 0x1c, - 0x65, 0x28, 0xd0, 0x52, 0x95, 0x3a, 0xb3, 0xe2, 0x34, 0x73, 0x79, 0xbb, 0x63, 0xf3, 0xff, 0xba, 0xc4, 0xc0, 0xfc, - 0x79, 0x3f, 0x63, 0xc2, 0xef, 0xf6, 0x32, 0xdb, 0xe0, 0x9a, 0xbb, 0xa9, 0x0a, 0x31, 0xac, 0x5b, 0x2a, 0x14, 0xfb, - 0x78, 0x5b, 0xad, 0x82, 0x35, 0x92, 0xd5, 0x16, 0x5e, 0x4b, 0x7f, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, - 0x65, 0x36, 0x80, 0xaa, 0x42, 0xd8, 0xee, 0x2d, 0x16, 0x54, 0xd9, 0xe8, 0x9f, 0x1e, 0xd0, 0xbd, 0xf3, 0x8c, 0x76, - 0xd8, 0xd9, 0x29, 0x58, 0x17, 0xd2, 0xa2, 0x7b, 0x8b, 0x05, 0x5f, 0x52, 0xfa, 0x45, 0x6f, 0x0e, 0x66, 0xd9, 0x3c, - 0x3c, 0xfb, 0x2f, 0x85, 0x07, 0xd6, 0xc5, 0xa2, 0x59, 0x03, 0x00}; + 0xe4, 0xe5, 0x65, 0xce, 0xc3, 0xc0, 0xc4, 0xf8, 0x08, 0xa8, 0xad, 0x66, 0xf6, 0x7f, 0x9a, 0x7b, 0xfa, 0xe5, 0xb6, + 0x6d, 0xe4, 0xff, 0xbf, 0xa7, 0x60, 0x98, 0x5c, 0x2a, 0x26, 0x24, 0x4d, 0x4a, 0x96, 0xed, 0x48, 0x96, 0xdd, 0x36, + 0x49, 0xe7, 0xdc, 0x71, 0x9b, 0x4e, 0xe2, 0xcb, 0xdc, 0xd5, 0xf5, 0x58, 0x14, 0x05, 0x49, 0xbc, 0x50, 0xa4, 0x86, + 0xa4, 0x6c, 0xb9, 0x2a, 0xef, 0x59, 0xfa, 0x2c, 0xf7, 0x64, 0xbf, 0xd9, 0x5d, 0x00, 0x04, 0x3f, 0xf4, 0xe1, 0x26, + 0xbd, 0xfb, 0x4d, 0xcf, 0x17, 0x11, 0x04, 0x40, 0x60, 0x01, 0x2c, 0xf6, 0x7b, 0x9f, 0x38, 0x22, 0xb0, 0xa6, 0x91, + 0x6f, 0x3a, 0x5a, 0x62, 0xc6, 0x4c, 0x46, 0x9e, 0x23, 0x02, 0x13, 0x45, 0xa8, 0x77, 0xa8, 0x85, 0xe0, 0xeb, 0x52, + 0x1c, 0x5d, 0x6b, 0x1c, 0x2f, 0x47, 0x21, 0xb3, 0x70, 0xbb, 0xc3, 0x27, 0xd7, 0xa3, 0xe5, 0x68, 0x04, 0xc9, 0x54, + 0x9e, 0x38, 0x26, 0x84, 0x87, 0x89, 0x53, 0x64, 0xdb, 0x72, 0xa3, 0x0f, 0x93, 0xb2, 0xb3, 0xea, 0xf0, 0xc1, 0xa4, + 0x03, 0x24, 0x32, 0xf4, 0x81, 0x0c, 0x58, 0xb4, 0x86, 0x53, 0x3b, 0xd0, 0x3f, 0xc0, 0xee, 0x4b, 0xf5, 0x7e, 0xd3, + 0xd1, 0x1f, 0x5c, 0xeb, 0x1f, 0x10, 0xc6, 0x98, 0x64, 0xf8, 0x35, 0xed, 0x5e, 0xdd, 0xd4, 0x49, 0x37, 0xbd, 0xc4, + 0x74, 0x03, 0x20, 0x9b, 0x7d, 0x13, 0x78, 0xd3, 0x28, 0x4e, 0xb3, 0xc0, 0xd7, 0x6f, 0xfa, 0x17, 0x41, 0xeb, 0x7a, + 0x9e, 0xb5, 0x8c, 0x1b, 0xd3, 0xcf, 0xd4, 0x4c, 0x25, 0x02, 0x61, 0x62, 0xa2, 0x92, 0x4d, 0x95, 0xd4, 0x13, 0xb4, + 0xb5, 0xa2, 0x40, 0xcd, 0x58, 0xc9, 0xcf, 0x06, 0x50, 0xaf, 0x92, 0xf6, 0x04, 0xf3, 0x37, 0xe9, 0xd8, 0xd2, 0xe8, + 0x13, 0x43, 0xf1, 0x7a, 0xb9, 0xc6, 0xab, 0x3c, 0x2b, 0x6e, 0x4b, 0x0c, 0xd5, 0x2b, 0xfc, 0x5b, 0xe8, 0xf9, 0x89, + 0x6a, 0x9b, 0x59, 0xba, 0x77, 0x87, 0xdf, 0x94, 0xe9, 0x02, 0xb8, 0xbf, 0xc1, 0x30, 0x22, 0x8a, 0x33, 0x0d, 0xe2, + 0xcf, 0xc0, 0x17, 0x87, 0x55, 0x5b, 0x2e, 0xde, 0x6b, 0xcb, 0xc8, 0x39, 0x32, 0xf8, 0x16, 0x2f, 0xbf, 0x16, 0x8f, + 0x42, 0x56, 0x0a, 0x34, 0x41, 0x34, 0x7d, 0x04, 0x0b, 0x98, 0xc5, 0x97, 0xf1, 0x7d, 0x55, 0x5d, 0xf1, 0x7a, 0xb8, + 0xfb, 0xee, 0xc5, 0x0b, 0x10, 0xf6, 0x9b, 0x48, 0xbe, 0xd7, 0xe2, 0xf9, 0x43, 0x05, 0xa1, 0x53, 0x39, 0x53, 0x68, + 0x9f, 0x21, 0x68, 0x98, 0x0c, 0xcc, 0xb9, 0xf0, 0x2e, 0x00, 0x94, 0xc4, 0xaf, 0xe9, 0x61, 0x7e, 0x2b, 0x32, 0x1c, + 0x8b, 0xfc, 0xc2, 0xca, 0xe5, 0x0c, 0xd8, 0x35, 0x5a, 0x2c, 0x33, 0x8c, 0x88, 0x0b, 0x03, 0x60, 0xb9, 0xae, 0x61, + 0x84, 0x4d, 0xc0, 0xd2, 0x05, 0x99, 0x98, 0xeb, 0x5a, 0x30, 0xae, 0x97, 0x71, 0xa2, 0x17, 0x90, 0x17, 0xe2, 0x77, + 0x94, 0x27, 0xc1, 0x63, 0xc2, 0xa7, 0xe1, 0x9b, 0x45, 0x38, 0xf9, 0x96, 0x8f, 0x7a, 0x97, 0x06, 0xcc, 0xe0, 0x53, + 0x3f, 0xfd, 0x56, 0xd8, 0x38, 0x59, 0x88, 0x92, 0x59, 0x9a, 0xe6, 0xf0, 0xd9, 0x3a, 0xca, 0xcf, 0x9f, 0xad, 0xd3, + 0x7c, 0xf0, 0x6c, 0xed, 0x01, 0x25, 0x97, 0xeb, 0x30, 0xd1, 0xc2, 0x9f, 0xa6, 0x98, 0x1e, 0x6c, 0x2a, 0x2a, 0xd7, + 0x50, 0xa1, 0x3e, 0xe0, 0x6a, 0xf3, 0x45, 0x12, 0xcc, 0xbd, 0xe4, 0x81, 0xb4, 0xec, 0xa6, 0xaa, 0x8a, 0x37, 0x74, + 0x8d, 0xf0, 0x3a, 0xcd, 0x97, 0x50, 0xbc, 0xae, 0x7d, 0x2d, 0xcb, 0x18, 0x9f, 0x9c, 0x54, 0x35, 0xc2, 0xb7, 0x6e, + 0xf5, 0x97, 0xcc, 0x1e, 0xb3, 0xcc, 0x0b, 0x42, 0x6a, 0xd2, 0x17, 0x39, 0xe4, 0x6b, 0xb3, 0x49, 0xcb, 0xb3, 0x89, + 0xca, 0xdb, 0x05, 0x27, 0x43, 0x18, 0x9f, 0xc6, 0x8d, 0x33, 0xc3, 0xdc, 0x52, 0xcd, 0x0b, 0x48, 0xef, 0xfe, 0xab, + 0xd0, 0x67, 0x00, 0xfd, 0x08, 0xa0, 0xcf, 0x22, 0x3f, 0x1e, 0xb3, 0xbf, 0xbf, 0xbf, 0x90, 0xc9, 0xac, 0x40, 0x2e, + 0x33, 0xe4, 0xfb, 0x30, 0x45, 0x72, 0x21, 0x41, 0x52, 0x81, 0xd2, 0x4e, 0x69, 0x72, 0xc7, 0x24, 0xb9, 0xae, 0x9d, + 0xd3, 0xd8, 0xd9, 0x98, 0x46, 0x3d, 0x88, 0xb1, 0x55, 0x92, 0x9f, 0x1e, 0x50, 0x6d, 0xba, 0xdc, 0xa8, 0x12, 0x80, + 0x21, 0x81, 0x19, 0x16, 0x50, 0x80, 0xbc, 0x9b, 0x03, 0xb7, 0xe0, 0x1f, 0xec, 0x39, 0x4a, 0xbf, 0xdd, 0xf3, 0x32, + 0x65, 0x82, 0xad, 0xf4, 0xb3, 0x53, 0xcc, 0xa4, 0x05, 0xd7, 0x33, 0xc4, 0xde, 0x38, 0x3d, 0xa0, 0x47, 0xad, 0x72, + 0x00, 0x8a, 0x4e, 0x04, 0x27, 0xd7, 0xe3, 0x1d, 0x3c, 0xea, 0x64, 0x40, 0xe2, 0x76, 0x28, 0xf5, 0x72, 0x5d, 0x9b, + 0x73, 0x4a, 0x88, 0x07, 0xf9, 0x81, 0x08, 0x00, 0x0e, 0x1c, 0x55, 0x5d, 0x9b, 0x7b, 0x2b, 0x9c, 0xb9, 0x78, 0xe3, + 0xad, 0x5a, 0x2e, 0x7f, 0x55, 0x1c, 0xad, 0xb4, 0x7c, 0xb4, 0x7c, 0xbe, 0xb8, 0x60, 0xde, 0x2f, 0xa4, 0xb6, 0xad, + 0x19, 0xaa, 0x4d, 0x1b, 0x16, 0x77, 0x26, 0x16, 0x77, 0xbc, 0x61, 0x71, 0xc7, 0x5b, 0x16, 0x37, 0xe4, 0x0b, 0xa9, + 0x49, 0xd0, 0x25, 0xe8, 0xb2, 0x25, 0x81, 0xc7, 0xe9, 0x8a, 0x1e, 0x3f, 0x67, 0x08, 0x27, 0x2b, 0x0d, 0xc1, 0x64, + 0x69, 0x03, 0xac, 0x9a, 0xe0, 0xa2, 0x00, 0xa2, 0x3e, 0x71, 0x79, 0xea, 0xc4, 0xbc, 0x21, 0x33, 0x66, 0x2b, 0xac, + 0xce, 0x17, 0x76, 0x29, 0x65, 0xfd, 0x6e, 0xcd, 0x36, 0xcc, 0x74, 0xb6, 0x65, 0xa6, 0x7e, 0xe9, 0xe8, 0xf2, 0x69, + 0xd3, 0x21, 0x54, 0x27, 0x05, 0x7b, 0x10, 0xcc, 0x38, 0x71, 0xcb, 0x94, 0xf7, 0xe1, 0x66, 0x94, 0xaa, 0xec, 0xa8, + 0x85, 0x97, 0xa6, 0xf7, 0x71, 0x02, 0x7a, 0x10, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x1e, 0x44, 0x3c, 0xc4, 0xca, 0xc6, + 0xcd, 0x54, 0xbc, 0x57, 0xb7, 0x54, 0xbb, 0xdb, 0xa5, 0x1a, 0x0b, 0x2f, 0xcb, 0x58, 0x82, 0x40, 0xf7, 0x20, 0x16, + 0x77, 0xae, 0x6b, 0xff, 0x0f, 0x76, 0x59, 0x03, 0x0a, 0x09, 0x8d, 0x02, 0xa9, 0x23, 0x82, 0x5e, 0x00, 0x25, 0x95, + 0x88, 0x6b, 0x57, 0x89, 0xd6, 0x96, 0x48, 0xb8, 0xff, 0x88, 0xa7, 0xb5, 0x95, 0x28, 0xfe, 0x44, 0xee, 0x91, 0x61, + 0x2f, 0xbc, 0xf1, 0x07, 0xd0, 0xb6, 0xb5, 0xda, 0x26, 0x58, 0xce, 0xaa, 0xb1, 0xd9, 0x12, 0x22, 0xed, 0xfc, 0x02, + 0x47, 0x22, 0x92, 0xe4, 0x76, 0x49, 0xe0, 0xd2, 0xe8, 0x59, 0x93, 0x9b, 0x75, 0x3b, 0x3f, 0x98, 0x06, 0x46, 0x0d, + 0x69, 0x02, 0x66, 0x0b, 0x07, 0x67, 0x92, 0xc3, 0x0a, 0x4d, 0xf7, 0xc8, 0x00, 0x71, 0xec, 0x35, 0x24, 0x19, 0x75, + 0x04, 0xfb, 0x3a, 0x4c, 0xe0, 0x8e, 0xba, 0x76, 0x6e, 0xf2, 0xe7, 0x53, 0xfc, 0xe5, 0xde, 0xe4, 0xcf, 0x47, 0xf8, + 0xab, 0x7d, 0x83, 0xe9, 0xe4, 0x1a, 0xd8, 0x76, 0x65, 0xce, 0xfa, 0x59, 0x69, 0x3b, 0x91, 0x51, 0xd8, 0x23, 0x76, + 0x0d, 0x5f, 0xe0, 0xa7, 0xcf, 0xd6, 0x29, 0xb8, 0x41, 0xaa, 0x73, 0x88, 0xec, 0xc4, 0xc8, 0x1b, 0xcb, 0xa7, 0x1b, + 0xca, 0x47, 0xc6, 0x7f, 0xf9, 0x9a, 0xc7, 0x5d, 0x12, 0x17, 0x57, 0x4a, 0x59, 0xe8, 0x70, 0x3b, 0x0a, 0x22, 0x2f, + 0x79, 0xb8, 0x25, 0x66, 0xa2, 0x25, 0x28, 0x75, 0x29, 0x4c, 0x21, 0x62, 0xb2, 0xac, 0x83, 0xca, 0x14, 0xa9, 0xeb, + 0x03, 0xbf, 0xe7, 0x07, 0xff, 0x48, 0x14, 0x22, 0xad, 0xc4, 0x6e, 0xf2, 0x05, 0x29, 0x7d, 0xe8, 0xf6, 0xd9, 0xba, + 0xc5, 0xea, 0xdd, 0x54, 0x66, 0x5b, 0xa1, 0x02, 0x61, 0x79, 0x90, 0x75, 0x9d, 0x8f, 0x83, 0x1e, 0x2a, 0x99, 0x46, + 0xf1, 0xca, 0x7a, 0xb6, 0xce, 0xce, 0xf5, 0xb9, 0x97, 0x7c, 0x62, 0x63, 0xcb, 0x0f, 0x12, 0x3f, 0x64, 0x7a, 0x4f, + 0x1f, 0x85, 0x5e, 0xf4, 0x89, 0x3f, 0x5a, 0xf1, 0x32, 0x43, 0xb5, 0xf1, 0x4e, 0x4e, 0x57, 0xc0, 0x84, 0x04, 0x74, + 0x48, 0x9a, 0x36, 0x40, 0x41, 0x7b, 0x2d, 0xc5, 0x5b, 0x05, 0x59, 0x58, 0xd4, 0x32, 0xc1, 0xea, 0x11, 0x34, 0xd9, + 0xe0, 0x46, 0x6a, 0xea, 0xb8, 0x5e, 0xba, 0xa9, 0x4e, 0x95, 0x44, 0x93, 0x32, 0x0f, 0xe2, 0x2d, 0xf6, 0xf0, 0xc7, + 0x3f, 0x47, 0x19, 0xaa, 0xf7, 0xff, 0x1c, 0x27, 0xf1, 0x36, 0x7f, 0x50, 0x6d, 0xec, 0xa5, 0xe9, 0x72, 0xce, 0xc6, + 0xa4, 0x31, 0x3b, 0x2f, 0x86, 0x52, 0x26, 0xe5, 0xd5, 0xe1, 0xfc, 0xb2, 0x6c, 0x1f, 0x1f, 0xbe, 0x06, 0x4d, 0x3e, + 0x90, 0x74, 0xf1, 0x64, 0xa2, 0x17, 0x4c, 0xf5, 0x8e, 0x66, 0xee, 0xe1, 0x2f, 0xcb, 0xef, 0xde, 0x3a, 0xdf, 0xc9, + 0xc6, 0x91, 0x6e, 0xe4, 0x43, 0xa1, 0x96, 0xe4, 0x94, 0xa9, 0x32, 0x5e, 0x31, 0xa3, 0x89, 0x17, 0x6d, 0x9e, 0xce, + 0x75, 0x69, 0x97, 0x2d, 0x18, 0x1b, 0x83, 0xc5, 0xaa, 0x59, 0x2b, 0xbd, 0x0d, 0xd9, 0x1d, 0x93, 0x2a, 0xcf, 0xfa, + 0xc7, 0x1a, 0x5a, 0x60, 0x4c, 0x36, 0xae, 0x4a, 0xe5, 0x74, 0x95, 0x32, 0xa5, 0x21, 0xce, 0x81, 0xcf, 0x5c, 0xdd, + 0xe5, 0x95, 0x5d, 0x3d, 0x34, 0x75, 0x65, 0x00, 0x1b, 0x47, 0x76, 0xbe, 0xa1, 0xbc, 0x87, 0x09, 0x99, 0x9b, 0xc7, + 0x66, 0xba, 0x46, 0x0f, 0x62, 0x58, 0x73, 0x38, 0x85, 0xb0, 0xf9, 0x5b, 0x85, 0xfc, 0x61, 0x13, 0xc4, 0x9a, 0xa4, + 0x52, 0x3a, 0x89, 0x3b, 0x84, 0x15, 0x20, 0x9a, 0xc3, 0x0a, 0xc1, 0x4f, 0xe3, 0xda, 0x68, 0xe5, 0x99, 0x8f, 0x30, + 0xd1, 0x69, 0xc4, 0xd2, 0x74, 0x23, 0xc0, 0xe4, 0xa2, 0x9b, 0x7a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0x74, 0x4c, + 0xb8, 0x94, 0x71, 0x82, 0xd5, 0x6f, 0x21, 0x86, 0xbf, 0x9d, 0x73, 0x3b, 0x8e, 0x64, 0x3a, 0xd2, 0xb9, 0x8e, 0x7d, + 0xd3, 0xfb, 0x7b, 0x9d, 0x0f, 0xaa, 0x74, 0x53, 0x36, 0x0e, 0xad, 0x55, 0xc2, 0x7e, 0x35, 0xf9, 0x0c, 0x76, 0x20, + 0xc6, 0x54, 0x41, 0x71, 0x6c, 0x32, 0x61, 0x7e, 0x96, 0x1a, 0x42, 0x5a, 0x23, 0xa3, 0xaa, 0x82, 0x37, 0xcd, 0x93, + 0x81, 0xfe, 0x23, 0xf8, 0x96, 0x8b, 0xe0, 0x43, 0x7c, 0x40, 0x82, 0x6b, 0x69, 0x06, 0x13, 0xf5, 0x58, 0x06, 0x11, + 0xff, 0x0a, 0x24, 0xcd, 0x6e, 0x28, 0xc7, 0xa1, 0xf1, 0x2b, 0xa0, 0xd8, 0x17, 0xb1, 0xb4, 0xf6, 0xd8, 0x8e, 0x80, + 0xb6, 0x1d, 0xdf, 0xb5, 0xfb, 0x5d, 0xd7, 0x75, 0x72, 0xdd, 0x04, 0x9f, 0xa6, 0x4f, 0xfb, 0x1e, 0x7a, 0x6c, 0xd5, + 0x81, 0x56, 0xcb, 0xe8, 0x31, 0xed, 0xda, 0xee, 0x2b, 0x57, 0x37, 0xc9, 0x94, 0x4c, 0xc1, 0x6d, 0x7e, 0x7c, 0xc7, + 0x92, 0xcf, 0x9e, 0x4a, 0xb9, 0xf3, 0xfd, 0xc6, 0x73, 0xe4, 0x3a, 0x80, 0x84, 0xb3, 0x78, 0xf1, 0x88, 0x29, 0x74, + 0x74, 0x53, 0xf7, 0xc3, 0x38, 0x65, 0xea, 0x1c, 0x48, 0xea, 0xf0, 0x99, 0x93, 0xf8, 0xe9, 0xfd, 0xdb, 0x0f, 0x1f, + 0x74, 0x13, 0x33, 0x64, 0xa6, 0x6a, 0xef, 0x7c, 0x43, 0xed, 0xc0, 0xfe, 0x8d, 0xfb, 0x8e, 0x6e, 0x18, 0x62, 0x2b, + 0xcb, 0x7b, 0x8e, 0xca, 0x6a, 0x5b, 0x8e, 0xdf, 0x3c, 0xfc, 0xcb, 0xc4, 0x0b, 0xee, 0x35, 0xaf, 0x06, 0xdc, 0xb0, + 0xfd, 0x7a, 0x2b, 0x95, 0xcc, 0x83, 0xe8, 0xb6, 0xa1, 0xd4, 0x5b, 0x35, 0x94, 0x02, 0x33, 0x55, 0xc3, 0x55, 0xcb, + 0x78, 0xae, 0xdc, 0xce, 0x90, 0xe0, 0x78, 0x17, 0xb8, 0x14, 0x8e, 0xe6, 0x33, 0x06, 0xcd, 0x23, 0x9c, 0x57, 0x47, + 0xdd, 0x50, 0xcc, 0xd9, 0x10, 0x09, 0x5b, 0x3f, 0x04, 0x43, 0x38, 0xa6, 0xaa, 0xc1, 0xca, 0x94, 0x9b, 0x34, 0x63, + 0x55, 0x3a, 0x21, 0x0a, 0xf3, 0x36, 0x63, 0xf3, 0x05, 0x4b, 0xbc, 0x6c, 0x99, 0xb0, 0xdb, 0x30, 0xbe, 0x7f, 0x52, + 0x98, 0x99, 0xef, 0xa8, 0x3c, 0x0b, 0xa6, 0x33, 0x59, 0xfb, 0xbc, 0xc5, 0x06, 0x72, 0x01, 0xb7, 0x7e, 0x20, 0xff, + 0xcf, 0xef, 0xb6, 0xfd, 0x9f, 0xdf, 0x77, 0x56, 0x85, 0xee, 0xf3, 0xa1, 0x99, 0x0d, 0xf6, 0xd8, 0x17, 0xcd, 0x5f, + 0x2a, 0xc3, 0xbc, 0xb9, 0x4e, 0x6d, 0x11, 0xe0, 0x7d, 0x6d, 0x09, 0x6a, 0x85, 0xe5, 0x7d, 0xf3, 0xa8, 0x81, 0xc1, + 0xbc, 0x76, 0x8e, 0x0c, 0x2a, 0x7d, 0xd6, 0xd0, 0x86, 0x46, 0x6f, 0xaf, 0x15, 0xf9, 0xe3, 0x10, 0xde, 0x35, 0x87, + 0xcf, 0x1c, 0x3e, 0x97, 0x0c, 0xbe, 0x1e, 0x0e, 0x65, 0xce, 0x35, 0xb5, 0x29, 0x98, 0xbe, 0x9f, 0xd7, 0x4a, 0xf8, + 0xe5, 0xd9, 0x73, 0x0c, 0xf2, 0x49, 0x1f, 0xbc, 0x1e, 0xa2, 0x91, 0xd6, 0xe9, 0x28, 0x29, 0x88, 0x95, 0x8d, 0xa8, + 0x8d, 0x8c, 0xac, 0x6b, 0x9d, 0xd6, 0xf0, 0x1a, 0x94, 0x62, 0x22, 0xae, 0x7c, 0x68, 0x98, 0xaf, 0x87, 0x5c, 0xb4, + 0xc3, 0xed, 0x42, 0x7b, 0xd5, 0xad, 0xcd, 0x05, 0xa3, 0x25, 0xa0, 0x9b, 0x1a, 0x29, 0x5c, 0xb0, 0x32, 0x2b, 0x24, + 0x69, 0x28, 0x51, 0x07, 0xa6, 0x7e, 0x98, 0x63, 0x1e, 0x90, 0x77, 0x9b, 0x6c, 0xa7, 0x7e, 0xda, 0x6d, 0x3b, 0x75, + 0xb5, 0x97, 0xed, 0xd4, 0x4f, 0x5f, 0xdc, 0x76, 0xea, 0x9d, 0x6a, 0x3b, 0x05, 0x8b, 0xf8, 0x96, 0xed, 0x65, 0xd0, + 0x24, 0xcc, 0x24, 0xe2, 0xfb, 0x74, 0xe0, 0x72, 0x92, 0x36, 0xf5, 0x67, 0x0c, 0xd8, 0x74, 0xbe, 0x2a, 0x61, 0x3c, + 0x05, 0xe3, 0xa6, 0x3f, 0xdf, 0x0c, 0x29, 0x8c, 0xa7, 0xaa, 0x11, 0x52, 0xc4, 0x23, 0xa1, 0x16, 0xd1, 0x8d, 0xc8, + 0xf0, 0xc7, 0x31, 0x45, 0x2c, 0x24, 0xeb, 0xd0, 0x50, 0xb2, 0x3d, 0x4b, 0xab, 0xae, 0xb6, 0x30, 0x0d, 0xea, 0xa1, + 0x55, 0x91, 0x6c, 0xd8, 0x7e, 0x29, 0x62, 0x3e, 0xa8, 0x3d, 0x48, 0xeb, 0x59, 0x8a, 0x9f, 0xb0, 0xd6, 0x7f, 0x59, + 0xb9, 0xdf, 0x5e, 0xbb, 0xfd, 0x8e, 0x0b, 0x4e, 0xcb, 0xc0, 0xe4, 0x61, 0x81, 0xd3, 0xef, 0x74, 0xa0, 0xe0, 0x5e, + 0x29, 0x68, 0x43, 0x41, 0xa0, 0x14, 0x74, 0xa1, 0xc0, 0x57, 0x0a, 0x8e, 0xa0, 0x60, 0xac, 0x14, 0x1c, 0x43, 0xc1, + 0x9d, 0x9e, 0x5f, 0x47, 0x72, 0xb8, 0xc7, 0xc6, 0x8d, 0x49, 0x4c, 0x85, 0x28, 0x3b, 0x36, 0x5d, 0xb0, 0x26, 0xf2, + 0xa6, 0xbd, 0xd8, 0x24, 0xf9, 0x5e, 0x2f, 0x31, 0xef, 0x67, 0x8c, 0x02, 0x28, 0xbf, 0xc1, 0x3b, 0xc7, 0xce, 0x62, + 0xb0, 0x27, 0x16, 0x81, 0x09, 0x04, 0x1c, 0x34, 0xdd, 0x00, 0x99, 0x4d, 0x5f, 0xae, 0x9c, 0x08, 0xee, 0xa0, 0xac, + 0x65, 0xf1, 0x8e, 0x3e, 0x67, 0xc9, 0x2d, 0x50, 0x98, 0x78, 0xb4, 0x54, 0xb9, 0xe0, 0x97, 0x50, 0xf4, 0xbf, 0x61, + 0xa3, 0xe5, 0x54, 0xbb, 0x8c, 0xa7, 0x3b, 0x75, 0xf6, 0xea, 0x2b, 0x18, 0xa5, 0x4e, 0x0a, 0x10, 0x4b, 0x6c, 0x4b, + 0xfe, 0x2d, 0x7a, 0xcc, 0xcb, 0xf5, 0x33, 0x18, 0x9b, 0x96, 0x91, 0xc5, 0x08, 0x7c, 0x07, 0x60, 0xa4, 0x28, 0xcd, + 0x2f, 0x01, 0xce, 0xca, 0xf3, 0x95, 0xa7, 0x8c, 0xe7, 0xec, 0x07, 0x96, 0xa6, 0xde, 0x54, 0xd4, 0xaf, 0x8f, 0x13, + 0xac, 0x64, 0x24, 0xff, 0x85, 0x00, 0x04, 0x61, 0x5a, 0x50, 0x33, 0x86, 0x48, 0xe2, 0x7b, 0x0d, 0xcc, 0x6d, 0x60, + 0x43, 0x15, 0x86, 0x01, 0x81, 0x0d, 0x4b, 0x58, 0x56, 0xe1, 0xc3, 0xe1, 0xbf, 0x63, 0x61, 0xb5, 0x30, 0xf3, 0xa6, + 0xd5, 0x22, 0xda, 0x07, 0xb9, 0x3a, 0x36, 0xa9, 0x41, 0x2f, 0x15, 0x7e, 0x8e, 0x4a, 0x38, 0x8c, 0xa7, 0x7f, 0xaa, + 0x3e, 0x78, 0x8b, 0x1e, 0xff, 0x43, 0x64, 0x06, 0xd9, 0xd0, 0x46, 0x18, 0x6b, 0x36, 0x80, 0xb0, 0x17, 0x65, 0x33, + 0x0b, 0x5d, 0xae, 0x5a, 0xed, 0xc8, 0x30, 0x6d, 0x5c, 0xdb, 0x75, 0xd5, 0xd1, 0xb4, 0x97, 0x4c, 0x47, 0x5e, 0xcb, + 0x6d, 0x1f, 0x9b, 0xe2, 0xcf, 0x76, 0xba, 0x46, 0x8e, 0x3d, 0x68, 0xe3, 0xe0, 0x6e, 0x3d, 0x89, 0xa3, 0xcc, 0x9a, + 0x78, 0xf3, 0x20, 0x7c, 0xe8, 0xcd, 0xe3, 0x28, 0x4e, 0x17, 0x9e, 0xcf, 0xfa, 0x05, 0x43, 0xdd, 0xc7, 0x10, 0x06, + 0xdc, 0x8b, 0xce, 0xb5, 0xdb, 0x09, 0x9b, 0x53, 0x6b, 0x19, 0xa1, 0x60, 0x12, 0xb2, 0x55, 0xce, 0x3f, 0x5f, 0xaa, + 0x4c, 0x55, 0x71, 0xcb, 0x51, 0x0b, 0xa0, 0x48, 0x79, 0xf8, 0x03, 0x08, 0xfa, 0xd3, 0x5f, 0x78, 0x63, 0x8c, 0xd8, + 0x67, 0xb7, 0xbb, 0x09, 0x9b, 0x6b, 0x76, 0x77, 0x63, 0xe7, 0x49, 0x7c, 0x7f, 0x06, 0xa3, 0xc5, 0xc6, 0x56, 0xca, + 0xc2, 0x09, 0xbe, 0xb1, 0xd0, 0xe3, 0x42, 0xf4, 0x63, 0x21, 0x23, 0x0e, 0xbd, 0xb1, 0x79, 0x1f, 0x5e, 0xf7, 0xda, + 0x9a, 0xd3, 0x9f, 0x07, 0x91, 0x45, 0xd3, 0x39, 0x76, 0x16, 0x4a, 0x5f, 0x2a, 0xfc, 0x8c, 0x35, 0x56, 0x77, 0x35, + 0xa7, 0x0f, 0xcc, 0xda, 0x24, 0x8c, 0xef, 0x7b, 0xb3, 0x60, 0x3c, 0x66, 0x51, 0x1f, 0xc7, 0x2c, 0x0b, 0x59, 0x18, + 0x06, 0x8b, 0x34, 0x48, 0xfb, 0x73, 0x6f, 0xc5, 0x7b, 0x3d, 0xdc, 0xd4, 0x6b, 0x87, 0xf7, 0xda, 0xd9, 0xbb, 0x57, + 0xa5, 0x1b, 0xf0, 0xee, 0xa0, 0x7e, 0xf8, 0xd0, 0xba, 0x9a, 0x53, 0x99, 0xe7, 0xde, 0xbd, 0x2e, 0x12, 0xb6, 0x9e, + 0x7b, 0xc9, 0x34, 0x88, 0x7a, 0x4e, 0x6e, 0xdf, 0xad, 0x69, 0x63, 0x3c, 0x3d, 0x39, 0x39, 0xc9, 0xed, 0xb1, 0x78, + 0x72, 0xc6, 0xe3, 0xdc, 0xf6, 0xc5, 0xd3, 0x64, 0xe2, 0x38, 0x93, 0x49, 0x6e, 0x07, 0xa2, 0xa0, 0xd3, 0xf6, 0xc7, + 0x9d, 0x76, 0x6e, 0xdf, 0x2b, 0x35, 0x72, 0x9b, 0xf1, 0xa7, 0x84, 0x8d, 0xfb, 0xb8, 0x91, 0xee, 0x69, 0xe9, 0x8f, + 0x1d, 0x27, 0x47, 0x0c, 0x70, 0x5d, 0xc2, 0x4d, 0x28, 0xeb, 0xb9, 0x59, 0xef, 0x5d, 0x53, 0x2b, 0x3e, 0xe7, 0xfb, + 0x8d, 0xf5, 0xc6, 0x5e, 0xf2, 0xe9, 0x46, 0x53, 0x66, 0xe1, 0x79, 0x54, 0x6d, 0x2d, 0xc0, 0x60, 0xad, 0x7a, 0x10, + 0xca, 0xaa, 0x3f, 0x8a, 0x13, 0x38, 0xb3, 0x89, 0x37, 0x0e, 0x96, 0x69, 0xcf, 0x6d, 0x2f, 0x56, 0xa2, 0x88, 0xef, + 0xf5, 0xa2, 0x00, 0xcf, 0x5e, 0x2f, 0x8d, 0xc3, 0x60, 0x2c, 0x8a, 0x36, 0x9d, 0x25, 0xb7, 0x6d, 0xf4, 0xd1, 0x91, + 0x3b, 0xc0, 0x70, 0x04, 0x5e, 0x18, 0x6a, 0x76, 0x27, 0xd5, 0x98, 0x97, 0xa2, 0x88, 0x57, 0x73, 0x52, 0x82, 0x0b, + 0x3a, 0x6d, 0xbb, 0x87, 0x8b, 0x95, 0xdc, 0xf3, 0xee, 0xd1, 0x62, 0x95, 0x7f, 0x3d, 0x67, 0xe3, 0xc0, 0xd3, 0x5a, + 0xc5, 0x6e, 0x72, 0x1d, 0x10, 0x03, 0x1b, 0xeb, 0x0d, 0xdb, 0x54, 0x1c, 0x0b, 0x08, 0xf9, 0xf7, 0x24, 0x98, 0x2f, + 0xe2, 0x24, 0xf3, 0xa2, 0x2c, 0xcf, 0x87, 0x37, 0x79, 0xde, 0xbf, 0x0a, 0x5a, 0xd7, 0xff, 0x6c, 0xd1, 0x3d, 0x4d, + 0x6a, 0x93, 0xdc, 0xb8, 0x31, 0xdf, 0x32, 0xd5, 0x48, 0x03, 0xae, 0x31, 0x34, 0xd0, 0x50, 0x2b, 0xd3, 0x2d, 0x59, + 0xaf, 0x4c, 0x40, 0x96, 0xd5, 0xc9, 0xe8, 0xa3, 0x5c, 0x05, 0x6f, 0x20, 0xa8, 0xf0, 0x96, 0x0d, 0xae, 0x14, 0x83, + 0x0f, 0x20, 0x56, 0xb0, 0x32, 0xd9, 0xdb, 0x3f, 0xdb, 0x44, 0x33, 0x7e, 0xb3, 0x9b, 0x66, 0xfc, 0x39, 0xdb, 0x87, + 0x66, 0xfc, 0xe6, 0x8b, 0xd3, 0x8c, 0xcf, 0xea, 0xf6, 0xf6, 0x17, 0xf1, 0x40, 0x97, 0x42, 0x7e, 0xb8, 0x9a, 0x12, + 0x8a, 0x64, 0x73, 0xf1, 0x87, 0xcd, 0xe3, 0x45, 0x6f, 0x94, 0x9b, 0x8d, 0x6e, 0x6e, 0x90, 0xc7, 0xbe, 0x8b, 0x06, + 0xff, 0x48, 0xd4, 0xe7, 0xc9, 0x64, 0xf0, 0x26, 0x56, 0x0a, 0xe4, 0x13, 0x37, 0x7f, 0x28, 0x45, 0x1d, 0xa0, 0x37, + 0xc2, 0xec, 0x11, 0xf3, 0x32, 0x80, 0xd3, 0x32, 0x99, 0xf9, 0x8e, 0xa5, 0xb9, 0x57, 0xbf, 0x3c, 0x84, 0x96, 0xb4, + 0xb1, 0x14, 0xae, 0x29, 0x35, 0x51, 0xe2, 0x94, 0x65, 0xdc, 0x97, 0xf4, 0xdb, 0x87, 0x8b, 0x71, 0xeb, 0x22, 0x36, + 0xf2, 0x20, 0x7d, 0x57, 0x75, 0x0c, 0xe1, 0xea, 0x97, 0x81, 0x3a, 0x9d, 0x9c, 0x9b, 0x6c, 0xa9, 0x89, 0x97, 0xe1, + 0x35, 0x35, 0x3f, 0x2f, 0xcd, 0xb4, 0xa7, 0x36, 0xe4, 0x09, 0xa0, 0x6a, 0x97, 0x31, 0xb7, 0xca, 0x5f, 0x73, 0x0a, + 0x10, 0x73, 0x5a, 0xa1, 0x3f, 0xed, 0x98, 0x9a, 0x07, 0xe3, 0x3c, 0x37, 0xfa, 0x02, 0x10, 0xca, 0x45, 0xcb, 0x76, + 0x11, 0x71, 0xe9, 0xbd, 0xb4, 0x2a, 0xe0, 0x4a, 0x3a, 0xd2, 0xc0, 0x5d, 0x80, 0x4a, 0x9b, 0xeb, 0xeb, 0x38, 0xcc, + 0x74, 0x8d, 0xc0, 0x47, 0xa6, 0x0e, 0xca, 0x84, 0x40, 0xe3, 0x2d, 0xe1, 0x2f, 0x5e, 0x89, 0x82, 0xba, 0xd1, 0x24, + 0x01, 0x07, 0x75, 0xf2, 0xe0, 0xfd, 0x2e, 0xe4, 0xda, 0x84, 0x76, 0x78, 0x1d, 0x7c, 0xc8, 0x75, 0x49, 0xfb, 0xe1, + 0xf6, 0x3b, 0x3b, 0x3d, 0x80, 0x06, 0x67, 0x15, 0xd5, 0xfd, 0x0e, 0x93, 0x40, 0x20, 0x25, 0xd2, 0x7b, 0xd3, 0x4e, + 0xef, 0xb5, 0x17, 0x6b, 0x11, 0x39, 0x22, 0xf3, 0x16, 0x16, 0xb0, 0xf8, 0x88, 0x7b, 0x39, 0xc6, 0x53, 0x82, 0x54, + 0xf4, 0x97, 0x29, 0xe0, 0x46, 0x64, 0x54, 0x11, 0xff, 0xf4, 0xfd, 0x65, 0x92, 0xc6, 0x49, 0x6f, 0x11, 0x07, 0x51, + 0xc6, 0x92, 0x1c, 0x41, 0x75, 0x8d, 0xf0, 0x11, 0xe0, 0xb9, 0x59, 0xc7, 0x0b, 0xcf, 0x0f, 0xb2, 0x87, 0x9e, 0xc3, + 0x49, 0x0a, 0xa7, 0xcf, 0xa9, 0x03, 0xa7, 0xb1, 0x7e, 0x8f, 0x43, 0xf3, 0x25, 0x12, 0x7e, 0x49, 0x9d, 0x9c, 0x51, + 0xb7, 0x79, 0x5f, 0x79, 0x4b, 0xb1, 0x33, 0x80, 0xfc, 0xf0, 0x12, 0x6b, 0x0a, 0x58, 0x1e, 0x96, 0xda, 0x19, 0xb3, + 0xa9, 0x89, 0x58, 0x1b, 0xe4, 0xf2, 0xe2, 0xcf, 0xee, 0x1a, 0x9a, 0xd3, 0x5c, 0x0c, 0x14, 0x8f, 0xb1, 0xcf, 0xc8, + 0x7a, 0x1e, 0x64, 0x9a, 0x32, 0xf7, 0xa9, 0x39, 0x62, 0x93, 0x38, 0x61, 0x14, 0x67, 0xd5, 0x3d, 0x59, 0xac, 0xf6, + 0xef, 0x7e, 0xfb, 0xf4, 0x9b, 0xfb, 0x89, 0xe2, 0xac, 0x25, 0x3a, 0x33, 0x76, 0xf4, 0x56, 0xbf, 0xcf, 0x80, 0x34, + 0x24, 0xc8, 0xfb, 0x14, 0xd2, 0xaa, 0xa7, 0xeb, 0xfd, 0xc6, 0x70, 0x56, 0x8b, 0x98, 0xdf, 0x79, 0x09, 0x0b, 0xbd, + 0x2c, 0xb8, 0x13, 0x34, 0x63, 0xe7, 0x68, 0xb1, 0x12, 0x6b, 0x8c, 0x17, 0xde, 0x23, 0x16, 0xa9, 0x32, 0x14, 0xb1, + 0x48, 0xd5, 0x62, 0x5c, 0xa4, 0x7e, 0x6d, 0x36, 0x22, 0xc2, 0x43, 0xe5, 0xa6, 0xef, 0x2e, 0x56, 0xea, 0x15, 0x5d, + 0x34, 0x93, 0x37, 0x75, 0x35, 0x34, 0xd7, 0x3c, 0x18, 0x8f, 0x43, 0x96, 0x97, 0x16, 0xba, 0xbc, 0x96, 0x0a, 0x70, + 0x24, 0x1c, 0xbc, 0x51, 0x1a, 0x87, 0xcb, 0x8c, 0x35, 0x83, 0x8b, 0x80, 0xd3, 0x76, 0x0a, 0xe0, 0xe0, 0xef, 0xf2, + 0x58, 0xbb, 0x40, 0x6e, 0xc3, 0x36, 0x71, 0xfa, 0x10, 0x89, 0xd7, 0xea, 0x94, 0x87, 0x0e, 0xaf, 0xe4, 0xa0, 0xcd, + 0x86, 0x89, 0x98, 0x70, 0x2d, 0x11, 0xf6, 0xd6, 0x6c, 0x97, 0x97, 0xc9, 0x68, 0xa4, 0xb2, 0x28, 0x2f, 0x4f, 0xe6, + 0xcf, 0x39, 0x63, 0xaf, 0x9a, 0xcf, 0xd8, 0x2b, 0x71, 0xc6, 0xb6, 0xef, 0xcc, 0xa7, 0x13, 0x17, 0xfe, 0xeb, 0x17, + 0x13, 0xea, 0x39, 0x5a, 0x67, 0xb1, 0xd2, 0xdc, 0xc5, 0x4a, 0xb3, 0xda, 0x8b, 0x95, 0x86, 0x5d, 0xa3, 0x49, 0x86, + 0x69, 0xb7, 0x0d, 0xd3, 0xd1, 0xa0, 0x10, 0xfe, 0x9c, 0xd2, 0x2b, 0xf7, 0x10, 0xde, 0x41, 0xab, 0x6e, 0xfd, 0x5d, + 0x7b, 0xfb, 0x51, 0xa7, 0xb3, 0x24, 0x90, 0xb6, 0x61, 0x67, 0xde, 0x68, 0xc4, 0xc6, 0xbd, 0x49, 0xec, 0x2f, 0xd3, + 0x7f, 0xf3, 0xf1, 0x73, 0x20, 0x6e, 0x45, 0x04, 0x95, 0x7e, 0x44, 0x53, 0x50, 0x94, 0xdc, 0x31, 0xd1, 0xc3, 0x5a, + 0xae, 0x53, 0x8f, 0xc2, 0x06, 0xb7, 0xed, 0xc3, 0x86, 0x4d, 0xde, 0x0c, 0xe8, 0x3f, 0x6d, 0x95, 0x36, 0xa3, 0x98, + 0xcf, 0x00, 0xcb, 0x56, 0x70, 0x3c, 0x1e, 0x1a, 0x7c, 0x35, 0x9d, 0x93, 0xe6, 0xe1, 0x5e, 0x8b, 0x2f, 0xdd, 0x88, + 0x4b, 0x85, 0xdf, 0x5b, 0xdc, 0x13, 0x64, 0x7b, 0xaf, 0x9b, 0xf6, 0x48, 0xad, 0xd7, 0x2d, 0x17, 0x42, 0x51, 0x77, + 0x4f, 0x2c, 0xff, 0xf4, 0xd5, 0x21, 0xfc, 0x47, 0x54, 0xfd, 0xcf, 0x59, 0x13, 0xa1, 0x7e, 0x51, 0x36, 0xbd, 0x26, + 0x52, 0x09, 0x09, 0xf1, 0xfd, 0xeb, 0x4f, 0x26, 0x8f, 0x6b, 0xb0, 0x77, 0x6d, 0xb2, 0x66, 0xaa, 0xd6, 0xfe, 0x36, + 0x8e, 0x21, 0xa5, 0x65, 0xbd, 0xba, 0x00, 0x0f, 0x59, 0x97, 0x67, 0x03, 0x68, 0x24, 0xf8, 0x08, 0xd2, 0xe2, 0xeb, + 0xd8, 0x86, 0x58, 0x89, 0xb7, 0x9b, 0x58, 0x89, 0x37, 0xbb, 0x59, 0x89, 0xef, 0xf7, 0x62, 0x25, 0xde, 0x7c, 0x71, + 0x56, 0xe2, 0x6d, 0x9d, 0x95, 0xb8, 0x8a, 0x85, 0x05, 0xab, 0x79, 0xb1, 0xe4, 0x3f, 0x3f, 0x92, 0x52, 0xee, 0x32, + 0x1e, 0x74, 0x1d, 0x0a, 0x05, 0x7c, 0xf5, 0x87, 0x19, 0x0b, 0xdc, 0x88, 0xef, 0xd1, 0xa2, 0xab, 0x60, 0x2d, 0x38, + 0x66, 0xc7, 0xef, 0x28, 0xc5, 0x61, 0x1c, 0x4d, 0x7f, 0x02, 0xa5, 0x2c, 0x88, 0x03, 0x13, 0xe5, 0x45, 0x90, 0xfe, + 0x14, 0x2f, 0x96, 0x8b, 0x0b, 0xe8, 0xeb, 0x63, 0x90, 0x06, 0xa3, 0x90, 0x49, 0x0f, 0x5d, 0xb2, 0x40, 0xe3, 0x32, + 0x71, 0xb0, 0xf9, 0x14, 0x3f, 0xbd, 0x95, 0xf8, 0x89, 0x56, 0xa1, 0xfc, 0x37, 0x99, 0xb6, 0xe9, 0xcd, 0x8c, 0x88, + 0x50, 0x02, 0x2a, 0x83, 0x7e, 0x3c, 0x33, 0x72, 0x15, 0x1b, 0x0d, 0xb3, 0x14, 0xf6, 0x0e, 0x1b, 0xfb, 0x61, 0x35, + 0xa6, 0x66, 0x69, 0x98, 0x32, 0x34, 0x55, 0x5d, 0x0c, 0x3f, 0x8f, 0x97, 0x29, 0x1b, 0xc7, 0xf7, 0x91, 0x6e, 0x46, + 0xd2, 0xaa, 0x1f, 0x34, 0x9c, 0xb2, 0x0d, 0x26, 0x55, 0xfc, 0x80, 0x84, 0x72, 0x9c, 0xb4, 0x74, 0xc8, 0xe9, 0xb9, + 0x5c, 0x58, 0xa4, 0x6a, 0xb6, 0x70, 0x8a, 0xba, 0xcc, 0xfe, 0xf3, 0xa4, 0xd5, 0x8a, 0x07, 0x8f, 0x6b, 0x29, 0x4c, + 0x35, 0x62, 0x9b, 0x4b, 0x85, 0xd3, 0x56, 0x24, 0x84, 0x8b, 0x22, 0x3e, 0x44, 0xc3, 0xc2, 0xf1, 0x37, 0xe4, 0x2b, + 0x5a, 0xbc, 0x85, 0xe8, 0x1a, 0xf9, 0x92, 0xaf, 0x07, 0x8f, 0x96, 0x40, 0x8f, 0xaf, 0x15, 0x30, 0xbe, 0xbb, 0x63, + 0x49, 0xe8, 0x3d, 0xb4, 0x8c, 0x3c, 0x8e, 0x7e, 0x00, 0x00, 0xbc, 0x89, 0xef, 0x23, 0xb5, 0x02, 0x26, 0x31, 0x69, + 0xd8, 0x4b, 0x8d, 0x71, 0x3d, 0xc0, 0x53, 0x44, 0x19, 0x01, 0xa4, 0x8f, 0x9d, 0xb2, 0x7f, 0x98, 0xf4, 0xef, 0x3f, + 0x8d, 0xdc, 0xbc, 0x8c, 0xe5, 0x87, 0xfe, 0xbe, 0xd8, 0xe3, 0x33, 0xcf, 0x9f, 0x3f, 0xd9, 0x3c, 0xed, 0x72, 0xda, + 0xf2, 0x86, 0xd6, 0xc6, 0xc6, 0x53, 0x00, 0xa3, 0xb8, 0x8a, 0x97, 0xfe, 0x0c, 0x6d, 0x4d, 0xbf, 0xdc, 0x7c, 0x33, + 0xe8, 0x13, 0xb3, 0x77, 0xca, 0xa9, 0x57, 0x8a, 0x0a, 0x28, 0xe0, 0xf7, 0xdf, 0x42, 0x60, 0xca, 0xff, 0x21, 0x18, + 0xea, 0xbb, 0x86, 0x73, 0xf1, 0xc1, 0xe3, 0x36, 0x6f, 0x1f, 0x92, 0x4c, 0xf2, 0x90, 0x0f, 0x42, 0xb9, 0xd6, 0x8c, + 0x64, 0xf2, 0x2a, 0xd0, 0xd4, 0xf0, 0x6a, 0x9b, 0x22, 0xc7, 0x89, 0xaf, 0x30, 0x9b, 0xd8, 0x74, 0x6e, 0xea, 0x6f, + 0x32, 0x8e, 0xad, 0x2a, 0x48, 0x86, 0x9b, 0x3c, 0x30, 0x44, 0x5f, 0xd5, 0x77, 0xf3, 0x20, 0x32, 0x31, 0x3a, 0x7a, + 0xfd, 0x8d, 0xb7, 0x82, 0xf8, 0xc0, 0x80, 0xdc, 0xaa, 0xaf, 0xa0, 0xd0, 0x54, 0x1d, 0xd5, 0x20, 0x05, 0x92, 0xde, + 0x08, 0x09, 0xa1, 0xc5, 0x1b, 0xfe, 0x45, 0xd3, 0x34, 0x4d, 0xb2, 0x11, 0x9a, 0xe4, 0x23, 0xb0, 0x1c, 0xd9, 0x01, + 0xd0, 0x96, 0xe4, 0x8b, 0x15, 0x95, 0x00, 0x67, 0x80, 0x3a, 0x59, 0x51, 0xc0, 0x43, 0xe0, 0x75, 0x1d, 0x51, 0x20, + 0x18, 0x7a, 0x08, 0x5f, 0xe6, 0x25, 0x10, 0x29, 0xb7, 0xa7, 0x21, 0xc3, 0x8e, 0x6f, 0xb9, 0x24, 0x58, 0x73, 0xe8, + 0x71, 0xd8, 0x67, 0xcd, 0xb1, 0xd2, 0x22, 0x05, 0x0b, 0x82, 0xd6, 0xa1, 0x12, 0xfa, 0xd8, 0x64, 0x0d, 0xb8, 0x11, + 0xf9, 0xa2, 0x55, 0x36, 0x67, 0xd1, 0x52, 0xc7, 0x5c, 0x49, 0x18, 0xbb, 0x0e, 0xea, 0xbc, 0x21, 0x62, 0x0b, 0xb0, + 0x4d, 0x73, 0xcb, 0x19, 0xdd, 0x85, 0x29, 0x47, 0xa9, 0x9e, 0xe9, 0x73, 0xc5, 0x66, 0xca, 0x71, 0x5b, 0xf5, 0x86, + 0xe0, 0x4b, 0x1a, 0x57, 0x3d, 0xa7, 0xc8, 0x18, 0x19, 0xfa, 0xa0, 0xa8, 0x11, 0x5c, 0x5c, 0x24, 0xc0, 0xde, 0xf2, + 0xaa, 0x8b, 0x26, 0x35, 0x32, 0x5e, 0x45, 0x50, 0x94, 0x18, 0xf5, 0x6e, 0xf8, 0x38, 0x21, 0x60, 0xcf, 0xc6, 0x7e, + 0xfc, 0x5a, 0x3f, 0x1b, 0x26, 0xfd, 0x89, 0x3d, 0xd0, 0x45, 0x42, 0xa0, 0xfa, 0xc4, 0x1e, 0xc0, 0xf6, 0xef, 0x2d, + 0x48, 0x53, 0xf4, 0x2d, 0xe8, 0xda, 0x84, 0x10, 0xf8, 0x3e, 0x04, 0x71, 0xda, 0x72, 0x80, 0x9c, 0x7c, 0x0b, 0x16, + 0x47, 0x10, 0x43, 0xb6, 0x63, 0x71, 0x88, 0xb9, 0x95, 0x7d, 0xab, 0x11, 0xc6, 0x56, 0xc3, 0xd1, 0x30, 0x5e, 0xb8, + 0x8e, 0x73, 0x50, 0xab, 0x0f, 0x82, 0xec, 0xa6, 0xda, 0x86, 0x99, 0x0d, 0x5c, 0xc7, 0x0a, 0x5e, 0xd8, 0xed, 0x7e, + 0xed, 0x8e, 0x56, 0x62, 0x2c, 0x0e, 0x51, 0xfc, 0x75, 0xf6, 0x6c, 0xdd, 0xaa, 0x1d, 0x48, 0xa3, 0x6a, 0xb5, 0x8e, + 0x63, 0xcb, 0xb9, 0xfc, 0x6b, 0x58, 0xbf, 0xfa, 0x29, 0xc2, 0x23, 0xe5, 0xfb, 0x18, 0x42, 0x94, 0xe0, 0x16, 0x1c, + 0xa3, 0xbf, 0x6a, 0x2f, 0xb5, 0x16, 0x1d, 0x1f, 0xc3, 0x18, 0xca, 0x34, 0xd2, 0xc2, 0xab, 0x4b, 0xed, 0xa0, 0xf2, + 0xc5, 0xb4, 0x8a, 0xe1, 0x78, 0x3c, 0x52, 0x56, 0x68, 0xf4, 0xb6, 0x52, 0x0b, 0xd8, 0xff, 0x86, 0xeb, 0xd3, 0x1e, + 0x41, 0x20, 0x00, 0xa8, 0x01, 0x31, 0xc5, 0x77, 0x76, 0xb8, 0x5c, 0x94, 0xbb, 0x2b, 0x5f, 0x92, 0xfb, 0x77, 0x86, + 0x97, 0x0e, 0xea, 0xd0, 0x64, 0x7f, 0xcd, 0xd7, 0xdd, 0x23, 0xbb, 0x64, 0xd1, 0xb8, 0xdc, 0x61, 0xe5, 0xfe, 0xda, + 0xbf, 0xbb, 0x12, 0x46, 0x81, 0x60, 0xfb, 0x71, 0x03, 0x46, 0xc9, 0xe3, 0x08, 0x37, 0x3f, 0x1d, 0xb7, 0x60, 0x2f, + 0x2a, 0x06, 0x1b, 0x50, 0xa4, 0x2c, 0xd9, 0x4c, 0x11, 0x8a, 0x43, 0x44, 0x67, 0xf4, 0xc3, 0x6d, 0x09, 0x42, 0x74, + 0xe3, 0x4e, 0xcc, 0x84, 0x4d, 0x61, 0xd1, 0x26, 0xe0, 0x31, 0x1a, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, 0xd9, + 0x2e, 0xa9, 0x35, 0x39, 0x34, 0xdd, 0x27, 0xde, 0x42, 0xf1, 0x89, 0x13, 0xc4, 0xb9, 0xea, 0x1a, 0x57, 0x12, 0x75, + 0xa3, 0xff, 0x93, 0x68, 0x55, 0xeb, 0x8d, 0xac, 0x04, 0x51, 0xfc, 0xad, 0x30, 0x28, 0x42, 0xa1, 0xae, 0xca, 0xc6, + 0xaf, 0x0a, 0xd9, 0x38, 0x71, 0x35, 0x85, 0x2f, 0x8b, 0xa0, 0xfe, 0x15, 0x37, 0x31, 0xc9, 0x1d, 0x14, 0xee, 0x62, + 0xc5, 0x48, 0x15, 0x07, 0xa8, 0x82, 0xd1, 0x50, 0xdc, 0xea, 0x04, 0x97, 0x51, 0xf6, 0xae, 0x2b, 0x57, 0x2d, 0xbc, + 0xcd, 0x8a, 0x72, 0x90, 0xba, 0xe3, 0x90, 0x65, 0xb1, 0xba, 0x6d, 0xca, 0x1e, 0x30, 0xea, 0x6b, 0x65, 0x93, 0x48, + 0x57, 0x15, 0x02, 0xb0, 0x10, 0xd3, 0x57, 0xf4, 0xda, 0xd2, 0x06, 0x02, 0x07, 0xd9, 0xe0, 0x58, 0xb7, 0x5b, 0x3a, + 0x4f, 0x79, 0x04, 0x0a, 0x2d, 0xbc, 0x2a, 0x83, 0x40, 0xf8, 0xde, 0xac, 0x1b, 0x6e, 0x79, 0xbc, 0xe4, 0xf9, 0xfd, + 0x0e, 0xe2, 0x45, 0xcd, 0x51, 0x15, 0xf9, 0x78, 0x32, 0x2d, 0x32, 0xcf, 0xc5, 0xaa, 0xf5, 0x4e, 0x49, 0x88, 0xb3, + 0xe6, 0xce, 0x29, 0x65, 0x19, 0x3d, 0xaf, 0xd1, 0x13, 0xdf, 0xe5, 0x5b, 0x27, 0x59, 0x46, 0x18, 0xf3, 0xdd, 0xca, + 0x12, 0xcf, 0xff, 0xa4, 0x0c, 0x59, 0xc8, 0x39, 0x41, 0x06, 0x5c, 0xd6, 0x14, 0xf4, 0x3d, 0x0c, 0x91, 0xc8, 0x7a, + 0x76, 0x3b, 0x55, 0xa4, 0x2f, 0xbd, 0xa7, 0x4e, 0xc7, 0x7b, 0x35, 0x39, 0xac, 0x08, 0x45, 0xdb, 0xdd, 0xb2, 0xc8, + 0x7c, 0xc3, 0x38, 0xb2, 0xd9, 0x72, 0x3e, 0x5a, 0xab, 0xb2, 0x55, 0x45, 0xe4, 0x5a, 0x17, 0xb3, 0xaa, 0x9f, 0x9d, + 0x4c, 0x26, 0x65, 0x41, 0xa3, 0xa3, 0x1d, 0xa2, 0xb0, 0xf0, 0xa9, 0xe3, 0x38, 0xd5, 0xb1, 0x6f, 0x07, 0xbb, 0x85, + 0x72, 0xdb, 0x93, 0xc6, 0x11, 0x23, 0x6c, 0x77, 0xc1, 0xaf, 0x0e, 0x8e, 0xdc, 0x2e, 0x4e, 0x76, 0xc9, 0x2c, 0xa2, + 0x4f, 0xc6, 0x10, 0x41, 0xc6, 0xe6, 0x69, 0xcf, 0x67, 0xa8, 0x83, 0xb1, 0x95, 0x03, 0x8d, 0x86, 0x03, 0xd6, 0x14, + 0x4c, 0x45, 0x5c, 0xb1, 0x2b, 0x1c, 0x0d, 0xe5, 0xe1, 0x35, 0xe1, 0xbd, 0xf8, 0x08, 0x1e, 0x94, 0x75, 0x5d, 0xa6, + 0x8d, 0xd3, 0xea, 0x3a, 0x7f, 0x2d, 0xd5, 0xd3, 0xe0, 0x02, 0x5c, 0x0b, 0x85, 0x36, 0xc9, 0x67, 0xf1, 0xff, 0xa5, + 0xfc, 0xff, 0xd5, 0x62, 0x55, 0xb6, 0x1f, 0x39, 0x01, 0x89, 0x76, 0x71, 0x5a, 0x68, 0xd4, 0x4d, 0x7b, 0x40, 0x5a, + 0x19, 0x4c, 0x54, 0x05, 0x3a, 0x28, 0xe9, 0x4b, 0x89, 0x31, 0x1a, 0xc4, 0xef, 0x48, 0x31, 0xc3, 0x12, 0x17, 0x22, + 0xc4, 0x22, 0xad, 0x1b, 0xcc, 0xc1, 0x7c, 0x79, 0x82, 0xfa, 0x83, 0xd2, 0x9e, 0x00, 0x6d, 0x7c, 0x6d, 0x6e, 0x7b, + 0x89, 0xfb, 0xab, 0x7a, 0x2d, 0xd1, 0x31, 0x80, 0xcc, 0x85, 0x43, 0x88, 0x86, 0x04, 0x5a, 0x65, 0x73, 0xd3, 0x28, + 0xe5, 0x5b, 0x55, 0xcf, 0x26, 0x06, 0x86, 0xdd, 0x35, 0x57, 0xa1, 0xbe, 0x85, 0xb6, 0x00, 0x26, 0xcb, 0xb7, 0x1f, + 0x3e, 0x5b, 0xb0, 0xc4, 0xea, 0x7e, 0x74, 0x71, 0xc9, 0x71, 0xff, 0x5a, 0x78, 0x77, 0xa6, 0x74, 0xfe, 0x51, 0xbe, + 0xf8, 0x7d, 0xa3, 0x40, 0xef, 0xaa, 0x24, 0xa1, 0xe3, 0xd6, 0xe2, 0x6d, 0x63, 0xaf, 0xda, 0xf3, 0x20, 0xda, 0xbf, + 0xae, 0xb7, 0xda, 0xbb, 0x2e, 0x5c, 0x18, 0x7b, 0x57, 0x86, 0x1b, 0x87, 0x2c, 0x17, 0xb2, 0xc1, 0xf7, 0x8a, 0x40, + 0x51, 0xf5, 0xfb, 0xd5, 0xb1, 0x15, 0x51, 0xf9, 0x57, 0x4b, 0x20, 0x3e, 0xf7, 0x4a, 0x7c, 0xa0, 0x89, 0xdc, 0x65, + 0xfa, 0xb1, 0x76, 0xa2, 0x1d, 0x77, 0xb4, 0x23, 0x47, 0x27, 0x2e, 0x6c, 0xa0, 0x77, 0xdb, 0x85, 0x43, 0xdf, 0xa1, + 0xa3, 0x9f, 0x9d, 0x4e, 0xc5, 0x25, 0x31, 0x09, 0xc2, 0x90, 0x50, 0x45, 0x9a, 0x25, 0xf1, 0x27, 0x56, 0x56, 0xb3, + 0x50, 0x19, 0x37, 0x02, 0x69, 0x8b, 0x47, 0x38, 0x3b, 0xbe, 0xb7, 0xe8, 0xe1, 0xd9, 0x50, 0x0b, 0xc1, 0x80, 0x93, + 0x4a, 0xf1, 0x13, 0x70, 0x07, 0x8f, 0xf4, 0xb3, 0x53, 0x08, 0xed, 0xa7, 0x8d, 0x07, 0xfa, 0x0f, 0xed, 0x63, 0xcd, + 0xed, 0xde, 0x59, 0x1d, 0xdf, 0xb1, 0x5c, 0xfb, 0x50, 0x73, 0xec, 0x23, 0xab, 0x6d, 0x1f, 0x6b, 0x6d, 0xbb, 0x0b, + 0xff, 0xfa, 0xae, 0xfd, 0x4a, 0x73, 0xe0, 0x49, 0x73, 0xed, 0x0e, 0xfe, 0xdb, 0xb6, 0x8f, 0xef, 0x3a, 0x74, 0xd3, + 0x7b, 0xd2, 0xad, 0xaa, 0x32, 0x0a, 0x70, 0x02, 0xd1, 0x0f, 0xce, 0x4e, 0x97, 0x29, 0xd3, 0x56, 0x03, 0xfd, 0x95, + 0xae, 0xcd, 0x12, 0x36, 0x19, 0xe8, 0x4f, 0x3d, 0xa5, 0xd4, 0x3d, 0x69, 0x2c, 0x6e, 0x1f, 0x37, 0x16, 0x77, 0x8e, + 0x1a, 0x8b, 0x0f, 0xbb, 0xe5, 0xe2, 0x83, 0x29, 0xbd, 0x52, 0x32, 0xeb, 0xcd, 0xbd, 0x2c, 0x09, 0x56, 0x2d, 0x57, + 0x03, 0x74, 0x6d, 0xc1, 0x3f, 0xc7, 0x6d, 0x43, 0xb6, 0x1a, 0x41, 0x2b, 0x09, 0x8d, 0xe3, 0x13, 0xcd, 0x3d, 0xfa, + 0x5b, 0xfb, 0xc8, 0x87, 0x7a, 0x90, 0x07, 0x12, 0xfe, 0xee, 0x3a, 0x27, 0xbe, 0xa3, 0x41, 0x43, 0x17, 0xfe, 0x9b, + 0x75, 0xdb, 0x3e, 0x3d, 0x38, 0xf0, 0xfe, 0xa3, 0x7b, 0x9c, 0x3a, 0x96, 0x0b, 0xff, 0xfd, 0x2a, 0x55, 0xee, 0xa0, + 0xf0, 0x57, 0xfb, 0x3d, 0x74, 0xb4, 0xce, 0xc9, 0xac, 0x6d, 0xbf, 0xba, 0x3b, 0xb6, 0x4f, 0x66, 0xee, 0xf1, 0x47, + 0x7a, 0x0a, 0xad, 0xb6, 0xfd, 0x0a, 0xfe, 0x3e, 0x76, 0x9c, 0x99, 0xe5, 0xda, 0x27, 0x77, 0x1d, 0xbb, 0x13, 0x5a, + 0x47, 0xf6, 0x09, 0xfc, 0xfd, 0x0a, 0xe0, 0x05, 0xb8, 0xf2, 0xc4, 0x9d, 0x1a, 0x6c, 0x8c, 0x8a, 0xfd, 0x86, 0xfa, + 0x91, 0xf6, 0xa1, 0xd6, 0x3d, 0xfc, 0xdb, 0xc9, 0x9d, 0x75, 0x38, 0x73, 0xdb, 0x77, 0xd6, 0xc6, 0x9f, 0x1f, 0x01, + 0xf2, 0xdb, 0x17, 0x0e, 0xc0, 0x88, 0x99, 0x3a, 0xfe, 0x32, 0x34, 0x2f, 0x37, 0x89, 0xd1, 0xdf, 0xef, 0x16, 0xa3, + 0x7f, 0xb7, 0xdc, 0x47, 0x8c, 0xfe, 0xfe, 0x8b, 0x8b, 0xd1, 0x2f, 0xab, 0x56, 0xdc, 0xef, 0xab, 0x11, 0xc5, 0x7f, + 0x5e, 0x57, 0x89, 0xe4, 0xc0, 0x6b, 0x5d, 0x5f, 0x2d, 0x6f, 0x20, 0xd8, 0xce, 0xfb, 0x78, 0xf0, 0xdd, 0xb2, 0x64, + 0xa2, 0x14, 0x03, 0x06, 0x78, 0x1f, 0x13, 0x06, 0xf8, 0x75, 0x39, 0x00, 0xbb, 0x08, 0x7e, 0x6b, 0x06, 0x63, 0x6b, + 0xe6, 0x85, 0x13, 0x79, 0xe3, 0x42, 0x49, 0x1f, 0x8b, 0xc1, 0x66, 0x1e, 0x2e, 0x13, 0x50, 0xd6, 0x2c, 0xe7, 0x51, + 0xda, 0x3b, 0x72, 0x00, 0xcd, 0xb7, 0x27, 0x49, 0x5e, 0x69, 0x6c, 0x8b, 0xf0, 0x44, 0xb7, 0xdc, 0xa6, 0x7f, 0xe3, + 0x7b, 0x34, 0x59, 0x6b, 0xee, 0xdd, 0xad, 0xf7, 0xab, 0x81, 0x2d, 0x88, 0x30, 0xe9, 0x03, 0x62, 0xa3, 0xe9, 0x7d, + 0xd9, 0x70, 0xac, 0x62, 0x2a, 0xb8, 0x79, 0xa4, 0x30, 0x92, 0x6a, 0x7b, 0xb7, 0x6c, 0x78, 0xb6, 0x6b, 0x9a, 0x0d, + 0x9f, 0x2f, 0x35, 0xdf, 0x62, 0xf5, 0x26, 0x3b, 0xae, 0x82, 0xaa, 0x92, 0x0f, 0xab, 0x11, 0x20, 0x05, 0xed, 0x59, + 0x98, 0xc6, 0x15, 0x84, 0x8f, 0xa3, 0xe1, 0x6d, 0xec, 0x28, 0xef, 0x4a, 0x7d, 0xaa, 0xe6, 0x74, 0x2f, 0xd6, 0x48, + 0x0f, 0x06, 0xbf, 0x02, 0x61, 0xc3, 0xef, 0xe3, 0x51, 0xac, 0xc2, 0x79, 0xad, 0xf4, 0x4b, 0xa4, 0x76, 0x3e, 0x73, + 0xd7, 0x75, 0xd2, 0x66, 0xa3, 0x21, 0xad, 0xcb, 0xe6, 0xe2, 0x8e, 0xc6, 0xcf, 0x93, 0xd9, 0x6a, 0x4e, 0xa6, 0xc5, + 0x68, 0x99, 0xbb, 0xad, 0x33, 0x51, 0xef, 0x29, 0x6c, 0x62, 0x93, 0x3f, 0xa8, 0x8e, 0xe3, 0xeb, 0x09, 0xe4, 0x2e, + 0xee, 0x21, 0x11, 0xa1, 0x50, 0x50, 0x6d, 0xb4, 0xb1, 0xed, 0x6f, 0x31, 0xff, 0x50, 0x3b, 0xe6, 0x9d, 0xa0, 0xad, + 0xee, 0x36, 0x8b, 0x11, 0xe9, 0xda, 0xb0, 0x2e, 0x29, 0x50, 0xdd, 0xee, 0xb1, 0xe9, 0x1e, 0x99, 0xf6, 0x71, 0xd7, + 0xc8, 0xc5, 0x81, 0x53, 0xbb, 0x2c, 0x01, 0x04, 0x4c, 0x76, 0xe5, 0x30, 0x83, 0x28, 0xc8, 0x02, 0x2f, 0xcc, 0x01, + 0xd5, 0x97, 0x69, 0xde, 0x7f, 0x2d, 0xd3, 0x0c, 0xe6, 0x28, 0x48, 0x32, 0x34, 0x57, 0xb6, 0x46, 0x2c, 0xbb, 0x67, + 0x2c, 0xda, 0xa0, 0xca, 0xad, 0x5a, 0x3f, 0xff, 0x79, 0xb6, 0xa0, 0x39, 0xd9, 0x59, 0x8c, 0xb2, 0x88, 0xef, 0x0f, + 0x61, 0xaa, 0x9b, 0x0f, 0xcd, 0x1f, 0x37, 0x21, 0xdc, 0x7f, 0xed, 0x46, 0xb8, 0x19, 0xdb, 0x07, 0xe1, 0xfe, 0xeb, + 0x8b, 0x23, 0xdc, 0x1f, 0x55, 0x84, 0x5b, 0xf2, 0x54, 0x29, 0x64, 0xa2, 0x1f, 0xf0, 0xb9, 0x05, 0xa1, 0x78, 0x5f, + 0xea, 0x07, 0x44, 0x5e, 0xea, 0x4a, 0x8a, 0xd4, 0x8f, 0xa5, 0x9c, 0x2f, 0xc8, 0xb2, 0x63, 0x4c, 0x52, 0xca, 0x2f, + 0x01, 0xe9, 0x43, 0x65, 0x22, 0x6c, 0xe8, 0xf3, 0x22, 0xca, 0x42, 0xfb, 0x3d, 0x67, 0x4b, 0x40, 0x05, 0xf1, 0x5d, + 0x9c, 0xcc, 0x3d, 0x8c, 0xc7, 0xa6, 0x63, 0xae, 0x38, 0x78, 0x70, 0xc0, 0x3b, 0xca, 0x8f, 0xa3, 0xb1, 0x94, 0xa3, + 0xb3, 0xc1, 0x35, 0xd1, 0x83, 0xfa, 0x03, 0xf3, 0x12, 0xdd, 0xa4, 0xd7, 0xb0, 0xb8, 0x2f, 0x3a, 0xce, 0x8b, 0xf6, + 0xe1, 0x8b, 0x23, 0x07, 0xfe, 0xe7, 0xb2, 0x4e, 0x6e, 0xf2, 0x8a, 0xf3, 0x38, 0x82, 0x74, 0x15, 0xa2, 0xe6, 0xa6, + 0x6a, 0xf7, 0x8c, 0x7d, 0x2a, 0x6a, 0x1d, 0x37, 0x57, 0x1a, 0x7b, 0x0f, 0x45, 0x9d, 0xc6, 0x1a, 0xb3, 0x78, 0xa9, + 0x0c, 0xab, 0x61, 0x34, 0x41, 0xb4, 0x04, 0xc9, 0x90, 0x52, 0x43, 0x7d, 0xcd, 0xa7, 0x5b, 0xcc, 0x8b, 0x75, 0xf2, + 0x9b, 0x22, 0x27, 0x8e, 0xc8, 0xcd, 0xb1, 0x13, 0x82, 0x5c, 0xa8, 0xee, 0x60, 0x44, 0x6d, 0xcc, 0x0a, 0xa3, 0x41, + 0x46, 0xba, 0x22, 0xf1, 0x39, 0x2e, 0x50, 0x96, 0x2c, 0x23, 0x9f, 0x72, 0x9b, 0x7b, 0xa3, 0xb4, 0x15, 0x1c, 0x40, + 0xb0, 0x4e, 0xfc, 0xb0, 0x81, 0xab, 0xe6, 0x9d, 0x39, 0x45, 0x02, 0x81, 0x54, 0xac, 0x8a, 0xf7, 0x22, 0x33, 0x13, + 0x4a, 0x3b, 0x8a, 0x4b, 0x6b, 0x0d, 0xbc, 0x17, 0xb2, 0xe1, 0x8b, 0xcc, 0x84, 0xd4, 0x9f, 0xb0, 0xdc, 0xcf, 0x9f, + 0x53, 0x2d, 0x48, 0xc6, 0x47, 0xd3, 0x3a, 0xf7, 0x65, 0x02, 0x2f, 0x5d, 0xf3, 0xa6, 0xb1, 0x8e, 0x09, 0xbc, 0x7a, + 0xbe, 0x19, 0xbf, 0x7c, 0x79, 0x36, 0x70, 0x0d, 0x9e, 0x4a, 0xb2, 0x94, 0xf7, 0xe8, 0x72, 0x3f, 0xd5, 0xb8, 0xd1, + 0xe8, 0xb4, 0xb5, 0x08, 0xa2, 0xa9, 0xd0, 0x4c, 0x4b, 0xec, 0x05, 0x79, 0x08, 0x48, 0x05, 0xe6, 0x09, 0x15, 0xb5, + 0xa8, 0x73, 0xc7, 0x12, 0x48, 0x83, 0x39, 0xd0, 0x3b, 0xb6, 0x63, 0x3b, 0xba, 0x6c, 0x38, 0x09, 0xa6, 0x83, 0x75, + 0x9c, 0x79, 0x90, 0xd1, 0x25, 0x8c, 0xa7, 0xe0, 0xf9, 0x91, 0x05, 0x59, 0x08, 0xe9, 0x41, 0xc0, 0x05, 0x64, 0x4e, + 0x5c, 0x63, 0xce, 0xed, 0x71, 0xbd, 0xe4, 0x13, 0xa6, 0x88, 0x13, 0x4e, 0x5f, 0x18, 0x92, 0xe6, 0x07, 0xb8, 0x0c, + 0x5b, 0x7a, 0x0b, 0x12, 0x14, 0xb2, 0x24, 0xb5, 0x54, 0xfb, 0xf6, 0x9e, 0x06, 0x6d, 0x20, 0x79, 0x38, 0x76, 0x30, + 0x49, 0xbc, 0x39, 0x44, 0xd2, 0x5e, 0xe7, 0x26, 0xc7, 0xb4, 0x3a, 0x47, 0xb5, 0x9a, 0xfb, 0xea, 0xc8, 0xd4, 0xda, + 0xae, 0xa9, 0x39, 0x80, 0x6e, 0xf5, 0xdc, 0x5c, 0xe7, 0x37, 0xfd, 0x5d, 0x2a, 0x3a, 0xc2, 0x2f, 0x4f, 0x69, 0x1e, + 0xa4, 0x9c, 0xe3, 0xc2, 0xcf, 0x8c, 0xe2, 0x09, 0xb6, 0x94, 0x18, 0xd7, 0x01, 0x89, 0xe9, 0xaf, 0xd8, 0x2a, 0x33, + 0x30, 0x7d, 0x06, 0xaf, 0x12, 0x18, 0x6b, 0x74, 0x4d, 0x0b, 0x22, 0x2d, 0xf8, 0xed, 0xb7, 0x56, 0x00, 0xe6, 0xf7, + 0x03, 0x05, 0x3e, 0xf0, 0x6c, 0x94, 0x00, 0x16, 0x14, 0x8a, 0x25, 0x04, 0x16, 0xf8, 0xc6, 0xc0, 0xbf, 0x45, 0xb1, + 0xf8, 0xc1, 0x15, 0x7b, 0x76, 0xe8, 0x45, 0x53, 0x40, 0x69, 0x5e, 0x34, 0xad, 0x19, 0x10, 0x90, 0x77, 0x5d, 0xa5, + 0xb4, 0xe8, 0xaa, 0x50, 0xee, 0xa7, 0xdf, 0x3e, 0x5c, 0x51, 0x7a, 0x20, 0x48, 0x45, 0xed, 0x8d, 0xd1, 0x15, 0xac, + 0xd0, 0x3d, 0xbc, 0x1c, 0x7c, 0x75, 0x3a, 0x67, 0x99, 0x47, 0x82, 0x4b, 0x60, 0xf1, 0x80, 0x1c, 0xd0, 0x7c, 0x91, + 0xda, 0x93, 0x18, 0xbc, 0x31, 0xbb, 0x0b, 0x7c, 0xce, 0xa7, 0x99, 0x1a, 0xbf, 0xa7, 0x2c, 0xb4, 0x51, 0x1a, 0xb8, + 0x26, 0x99, 0xc8, 0xfa, 0x1e, 0x46, 0x1d, 0x1c, 0x44, 0xb1, 0x7e, 0xf6, 0x95, 0xf4, 0x26, 0xda, 0xb4, 0x08, 0x90, + 0xa3, 0xef, 0x3a, 0x61, 0xe1, 0xbf, 0x07, 0x5f, 0xc1, 0xc5, 0xfd, 0xd5, 0x8d, 0x6e, 0xf4, 0x33, 0x1b, 0xf9, 0x98, + 0xaf, 0x1a, 0x72, 0xd5, 0x21, 0x8f, 0xca, 0x99, 0xcd, 0x8e, 0xc2, 0x6c, 0xc2, 0xef, 0xdd, 0xac, 0xeb, 0xd9, 0x29, + 0x5e, 0x68, 0x67, 0xc0, 0x5d, 0xac, 0x4b, 0x3c, 0xa7, 0xdb, 0x47, 0x06, 0x75, 0x14, 0x7a, 0xfe, 0x27, 0xc1, 0xa1, + 0xaa, 0x0f, 0xfb, 0xf0, 0xa2, 0x92, 0xb2, 0x6b, 0xdc, 0xcb, 0xb8, 0x95, 0xd7, 0xf8, 0x65, 0xfc, 0xd4, 0xfd, 0x2c, + 0xc8, 0x24, 0x33, 0x8c, 0x0f, 0x39, 0x68, 0x73, 0x70, 0x7c, 0x05, 0xfb, 0x03, 0x0c, 0xaa, 0x7b, 0xf2, 0xb7, 0xee, + 0x9d, 0xeb, 0xcc, 0xda, 0xae, 0x0d, 0x6c, 0xce, 0xac, 0x63, 0x1f, 0x87, 0x56, 0xc7, 0x3e, 0x86, 0xbf, 0x8f, 0xc0, + 0x7a, 0x59, 0x6d, 0xfb, 0xf0, 0xa3, 0xdb, 0x0e, 0xad, 0x13, 0xfb, 0x18, 0xfe, 0x2e, 0xa9, 0xd5, 0xcf, 0xc8, 0xf4, + 0x00, 0xc3, 0xf3, 0x55, 0x09, 0x0b, 0x28, 0xbf, 0xa5, 0x16, 0xc1, 0x2c, 0x5d, 0x6f, 0x0d, 0x9a, 0x08, 0x40, 0x19, + 0xba, 0x29, 0x82, 0x04, 0x46, 0xfd, 0x16, 0x24, 0xcf, 0xc6, 0xb0, 0xef, 0xc2, 0x20, 0x23, 0x2a, 0x12, 0xc1, 0x6f, + 0x3e, 0x46, 0xbc, 0x4d, 0x73, 0xfc, 0x6d, 0x91, 0x4f, 0x88, 0x54, 0x17, 0x7f, 0x5f, 0x60, 0x60, 0x1d, 0x11, 0x31, + 0x5c, 0xc1, 0x4a, 0x45, 0x4e, 0xbb, 0x7c, 0xf7, 0xc0, 0xd1, 0x6f, 0x94, 0xc9, 0x9c, 0x2a, 0x5f, 0xb4, 0x6f, 0xae, + 0xce, 0x90, 0xbd, 0xff, 0xd1, 0x7e, 0x30, 0x95, 0x28, 0xf5, 0x23, 0x82, 0x7b, 0x8e, 0x83, 0x44, 0x0e, 0x4f, 0x41, + 0xd1, 0x6e, 0x73, 0xe0, 0x72, 0x03, 0x92, 0x4f, 0x5c, 0x00, 0x95, 0x7c, 0xe7, 0x85, 0x8a, 0xe9, 0x85, 0xd2, 0xf2, + 0x89, 0xc4, 0xfc, 0xcf, 0x9f, 0x17, 0x83, 0xb3, 0x2a, 0xe3, 0x3e, 0x75, 0xbb, 0x70, 0xed, 0x76, 0x59, 0x67, 0xab, + 0x15, 0xd0, 0xee, 0xe8, 0xb0, 0x45, 0x38, 0x49, 0xa1, 0xe9, 0x17, 0x3a, 0xc6, 0x8d, 0xa6, 0x48, 0x35, 0x0d, 0x23, + 0xc4, 0xd5, 0xad, 0xb0, 0x3a, 0xba, 0xd1, 0x8f, 0x84, 0xc2, 0x2c, 0xda, 0x12, 0x11, 0x97, 0xf3, 0x62, 0x3a, 0x80, + 0x66, 0xcb, 0x3c, 0x76, 0xb8, 0x34, 0xfe, 0xaf, 0x27, 0x81, 0xee, 0x45, 0xa0, 0xe1, 0xab, 0x9c, 0xd6, 0x92, 0xbb, + 0x89, 0xbc, 0x57, 0xe9, 0x42, 0x65, 0xe9, 0xb9, 0x0e, 0x45, 0x90, 0x95, 0x08, 0x13, 0x91, 0x49, 0xf3, 0x26, 0x79, + 0x5b, 0x14, 0x05, 0x66, 0x00, 0x21, 0xa1, 0x5b, 0xc2, 0xd5, 0xc9, 0x78, 0xfe, 0x7c, 0xe3, 0x25, 0x44, 0xea, 0x64, + 0x35, 0x1f, 0xa3, 0xae, 0xe2, 0x37, 0x5d, 0x45, 0x31, 0xb2, 0x5f, 0xc4, 0x1a, 0xc2, 0x2a, 0x8b, 0xf6, 0x1e, 0xfe, + 0x1c, 0x31, 0x2f, 0xb3, 0xb9, 0x1e, 0xa4, 0xa5, 0x5c, 0xee, 0xa6, 0xcb, 0x3a, 0x60, 0x8f, 0xc5, 0xe3, 0x6f, 0xf1, + 0x60, 0x73, 0xcf, 0xd6, 0x1f, 0x97, 0xdc, 0x0f, 0x19, 0xfa, 0xf8, 0xcd, 0x29, 0x82, 0xa7, 0xbc, 0xcb, 0x3c, 0x8a, + 0xb0, 0xa1, 0x5e, 0xb9, 0x71, 0xe6, 0x89, 0xec, 0x1f, 0x40, 0x97, 0xf7, 0x1b, 0x15, 0x86, 0x8a, 0xaf, 0xf2, 0xd9, + 0xbb, 0xab, 0x6f, 0x34, 0xbe, 0xff, 0x49, 0xbf, 0x85, 0x8c, 0x0c, 0x05, 0xc1, 0x1f, 0x50, 0x10, 0x7c, 0x8d, 0x27, + 0x7f, 0x80, 0x50, 0xf2, 0xf9, 0x01, 0x41, 0x50, 0xd7, 0x58, 0xe4, 0x93, 0xd6, 0x6f, 0xbe, 0x0c, 0xb3, 0x60, 0xe1, + 0x25, 0xd9, 0x01, 0x34, 0xb5, 0x00, 0xc9, 0xe9, 0x9b, 0x3c, 0x98, 0x49, 0x71, 0x28, 0x84, 0x6a, 0x59, 0x24, 0x34, + 0x87, 0x93, 0x20, 0x94, 0x8a, 0x43, 0xf1, 0x01, 0xcf, 0xf7, 0xd9, 0x22, 0x1b, 0xe8, 0xde, 0x02, 0x92, 0x21, 0x60, + 0x78, 0xe3, 0x83, 0xd8, 0xcf, 0x58, 0x66, 0xa5, 0x59, 0xc2, 0xbc, 0xb9, 0x2e, 0x43, 0x7d, 0xd6, 0xfb, 0x4b, 0x97, + 0xa3, 0x79, 0x90, 0xc9, 0x60, 0x79, 0x34, 0x41, 0x50, 0xe1, 0xc1, 0x10, 0xcf, 0x86, 0x39, 0x07, 0xe1, 0x65, 0x3c, + 0xad, 0xec, 0xa8, 0x82, 0x72, 0x39, 0xc7, 0x48, 0xac, 0x3c, 0x00, 0xfe, 0x18, 0x3d, 0x72, 0x6e, 0xb9, 0xd7, 0xb5, + 0x8c, 0xe9, 0xa7, 0x9f, 0x9d, 0x72, 0xf6, 0x56, 0xc3, 0x40, 0x01, 0x7a, 0xd7, 0x81, 0x58, 0xb3, 0x9b, 0xfc, 0xb1, + 0x0f, 0x78, 0x65, 0xb8, 0x9a, 0xa8, 0x67, 0x0c, 0xfb, 0x4d, 0x63, 0xb9, 0x02, 0x42, 0xa8, 0xa4, 0xe2, 0x9d, 0xb9, + 0x67, 0xd2, 0x01, 0x08, 0x47, 0x85, 0xb4, 0xd2, 0x6f, 0xbf, 0xbd, 0x1e, 0xfe, 0xe7, 0x77, 0x88, 0x4d, 0x3e, 0x73, + 0x85, 0x17, 0xf4, 0xb5, 0x5a, 0x8b, 0x53, 0x9f, 0xe6, 0x10, 0xd5, 0xfb, 0x6c, 0x2c, 0xc2, 0x82, 0x88, 0xad, 0x95, + 0x0f, 0x6f, 0x44, 0xa8, 0x27, 0xc8, 0x3f, 0x60, 0x08, 0x5f, 0xed, 0x21, 0x2c, 0xef, 0x50, 0x84, 0x08, 0xd0, 0x7e, + 0x59, 0x7d, 0x7b, 0x0c, 0xb9, 0x74, 0x6b, 0x69, 0x01, 0x94, 0x01, 0xe2, 0x1e, 0x3a, 0x3b, 0xf5, 0xb8, 0xf0, 0x15, + 0xc8, 0x8f, 0xb4, 0x77, 0x00, 0xd3, 0x9c, 0xc5, 0x73, 0x66, 0x07, 0xf1, 0xc1, 0x3d, 0x1b, 0x59, 0xde, 0x22, 0x20, + 0xf9, 0x32, 0xca, 0xdd, 0x34, 0xa2, 0xfc, 0xa4, 0x82, 0x96, 0xe8, 0xeb, 0xbc, 0x00, 0x65, 0x5c, 0x00, 0x0a, 0x7e, + 0x7a, 0x67, 0xe5, 0x00, 0x7e, 0xb6, 0x08, 0x18, 0x5f, 0xc6, 0xf2, 0xe7, 0x14, 0x87, 0x4f, 0x84, 0xdc, 0x2b, 0x1e, + 0xac, 0x78, 0x32, 0x51, 0x83, 0xee, 0xd9, 0xe5, 0xef, 0x4b, 0xa8, 0x14, 0x7b, 0x36, 0x5e, 0xd0, 0x97, 0xea, 0x9f, + 0x90, 0x3f, 0x21, 0xa7, 0x2d, 0x8f, 0xcf, 0x08, 0xe7, 0xb9, 0x16, 0xbc, 0x4f, 0x82, 0xe4, 0x29, 0x55, 0xe2, 0x88, + 0xa2, 0x1a, 0x18, 0x7a, 0x03, 0x69, 0xf2, 0x64, 0x30, 0x20, 0x3c, 0x56, 0x45, 0x67, 0x00, 0xa5, 0x86, 0xe0, 0xf9, + 0x30, 0xd9, 0x0c, 0x1a, 0x5a, 0xe4, 0xc1, 0x85, 0x8d, 0xaa, 0xd3, 0xa9, 0x8f, 0xf1, 0xc0, 0x13, 0xfb, 0xab, 0xb4, + 0x03, 0x61, 0x67, 0xf1, 0x85, 0x05, 0x04, 0x2e, 0xfa, 0xa9, 0xe0, 0x71, 0xed, 0x6b, 0x42, 0xd9, 0x56, 0xe8, 0x3d, + 0xc4, 0x8a, 0x66, 0x9d, 0x3b, 0xd9, 0x5f, 0x62, 0xe9, 0x95, 0x70, 0x6e, 0xab, 0x9d, 0x24, 0x19, 0x80, 0xbc, 0x7e, + 0x9a, 0xd4, 0x88, 0xe1, 0xbb, 0x0e, 0x93, 0x5a, 0xb7, 0x3c, 0x19, 0xc4, 0x8e, 0x79, 0x71, 0xd0, 0x4a, 0x2f, 0xf1, + 0xdc, 0xe7, 0xa7, 0x07, 0x30, 0x3f, 0x08, 0x0c, 0x50, 0xa2, 0x8c, 0x02, 0x03, 0xa2, 0x0f, 0x78, 0x29, 0x59, 0x07, + 0x5c, 0x8c, 0x05, 0x51, 0x87, 0x9c, 0xa3, 0x8c, 0x0e, 0x5a, 0xaa, 0x52, 0x27, 0x56, 0x9c, 0x66, 0x2a, 0x6f, 0x77, + 0xc0, 0xfe, 0x5f, 0x97, 0x18, 0xad, 0x3f, 0xef, 0x67, 0x4c, 0xf8, 0xdd, 0x5e, 0x66, 0x1b, 0x5c, 0x73, 0x37, 0x55, + 0x21, 0x82, 0x75, 0x4b, 0x85, 0x62, 0x1f, 0x6f, 0xab, 0x55, 0x90, 0x46, 0xb2, 0xda, 0xc2, 0x6b, 0xe9, 0x4f, 0x71, + 0xc7, 0xd7, 0x6a, 0x63, 0x29, 0xd4, 0xbb, 0xcc, 0x06, 0x50, 0x55, 0x08, 0xdb, 0xbd, 0xc5, 0x82, 0x2a, 0x1b, 0xfd, + 0xd3, 0x03, 0xe2, 0x3b, 0xcf, 0x68, 0x87, 0x9d, 0x9d, 0x82, 0x75, 0x21, 0x2d, 0xba, 0xb7, 0x58, 0xf0, 0x25, 0xa5, + 0x5f, 0xf4, 0xe6, 0x60, 0x96, 0xcd, 0xc3, 0xb3, 0xff, 0x03, 0x30, 0x11, 0x13, 0xf1, 0xb7, 0x59, 0x03, 0x00}; } // namespace web_server } // namespace esphome + #endif #endif From 05fbb260eea1d0f873e095aa10efdcdd8eb1e0dd Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:09:35 +0200 Subject: [PATCH 106/313] [nextion] Exit reparse before update TFT (#6589) --- esphome/components/nextion/nextion.h | 6 +++++- esphome/components/nextion/nextion_upload_arduino.cpp | 11 ++++++++++- esphome/components/nextion/nextion_upload_idf.cpp | 11 ++++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index a8f0ea8ba9..833db675fc 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -993,9 +993,13 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe /** * Upload the tft file and soft reset Nextion + * @param exit_reparse If true, the function exits reparse mode before uploading the TFT file. This parameter + * defaults to true, ensuring that the display is ready to receive and apply the new TFT file without needing + * to manually reset or reconfigure. Exiting reparse mode is recommended for most upload scenarios to ensure + * the display properly processes the uploaded file command. * @return bool True: Transfer completed successfuly, False: Transfer failed. */ - bool upload_tft(); + bool upload_tft(bool exit_reparse = true); void dump_config() override; diff --git a/esphome/components/nextion/nextion_upload_arduino.cpp b/esphome/components/nextion/nextion_upload_arduino.cpp index e3d0903d09..4f8df67006 100644 --- a/esphome/components/nextion/nextion_upload_arduino.cpp +++ b/esphome/components/nextion/nextion_upload_arduino.cpp @@ -141,8 +141,9 @@ int Nextion::upload_by_chunks_(HTTPClient *http, int range_start) { return range_end + 1; } -bool Nextion::upload_tft() { +bool Nextion::upload_tft(bool exit_reparse) { ESP_LOGD(TAG, "Nextion TFT upload requested"); + ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse)); ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str()); if (this->is_updating_) { @@ -157,6 +158,14 @@ bool Nextion::upload_tft() { this->is_updating_ = true; + if (exit_reparse) { + ESP_LOGD(TAG, "Exiting Nextion reparse mode"); + if (!this->set_protocol_reparse_mode(false)) { + ESP_LOGW(TAG, "Failed to request Nextion to exit reparse mode"); + return false; + } + } + HTTPClient http; http.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along bool begin_status = false; diff --git a/esphome/components/nextion/nextion_upload_idf.cpp b/esphome/components/nextion/nextion_upload_idf.cpp index 14b1b6cfaf..d08f970551 100644 --- a/esphome/components/nextion/nextion_upload_idf.cpp +++ b/esphome/components/nextion/nextion_upload_idf.cpp @@ -160,8 +160,9 @@ int Nextion::upload_range(const std::string &url, int range_start) { return range_end + 1; } -bool Nextion::upload_tft() { +bool Nextion::upload_tft(bool exit_reparse) { ESP_LOGD(TAG, "Nextion TFT upload requested"); + ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse)); ESP_LOGD(TAG, "url: %s", this->tft_url_.c_str()); if (this->is_updating_) { @@ -176,6 +177,14 @@ bool Nextion::upload_tft() { this->is_updating_ = true; + if (exit_reparse) { + ESP_LOGD(TAG, "Exiting Nextion reparse mode"); + if (!this->set_protocol_reparse_mode(false)) { + ESP_LOGW(TAG, "Failed to request Nextion to exit reparse mode"); + return false; + } + } + // Define the configuration for the HTTP client ESP_LOGV(TAG, "Establishing connection to HTTP server"); ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); From 33e9881830fa13b53c8a4314c91c9817747cdab1 Mon Sep 17 00:00:00 2001 From: mrtoy-me <118446898+mrtoy-me@users.noreply.github.com> Date: Tue, 23 Apr 2024 09:16:55 +1000 Subject: [PATCH 107/313] Fix SHT3xd fails sometimes in 2024.4.0 (#6592) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/sht3xd/sht3xd.cpp | 34 +++++++++++++++++++++++----- esphome/components/sht3xd/sht3xd.h | 7 ++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/esphome/components/sht3xd/sht3xd.cpp b/esphome/components/sht3xd/sht3xd.cpp index 888e954c6b..ffaf5db322 100644 --- a/esphome/components/sht3xd/sht3xd.cpp +++ b/esphome/components/sht3xd/sht3xd.cpp @@ -6,9 +6,14 @@ namespace sht3xd { static const char *const TAG = "sht3xd"; -// use read serial number register with clock stretching disabled as per other SHT3XD_COMMAND registers -// which provides support for SHT85 sensor -// SHT85 does not support clock stretching and uses same registers as SHT3xd with clock stretching disabled +// https://sensirion.com/media/documents/E5762713/63D103C2/Sensirion_electronic_identification_code_SHT3x.pdf +// indicates two possible read serial number registers either with clock stretching enabled or disabled. +// Other SHT3XD_COMMAND registers use the clock stretching disabled register. +// To ensure compatibility, reading serial number using the register with clock stretching register enabled +// (used originally in this component) is tried first and if that fails the alternate register address +// with clock stretching disabled is read. + +static const uint16_t SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING = 0x3780; static const uint16_t SHT3XD_COMMAND_READ_SERIAL_NUMBER = 0x3682; static const uint16_t SHT3XD_COMMAND_READ_STATUS = 0xF32D; @@ -22,13 +27,19 @@ static const uint16_t SHT3XD_COMMAND_FETCH_DATA = 0xE000; void SHT3XDComponent::setup() { ESP_LOGCONFIG(TAG, "Setting up SHT3xD..."); uint16_t raw_serial_number[2]; - if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER, raw_serial_number, 2)) { - this->mark_failed(); - return; + if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER_CLOCK_STRETCHING, raw_serial_number, 2)) { + this->error_code_ = READ_SERIAL_STRETCHED_FAILED; + if (!this->get_register(SHT3XD_COMMAND_READ_SERIAL_NUMBER, raw_serial_number, 2)) { + this->error_code_ = READ_SERIAL_FAILED; + this->mark_failed(); + return; + } } + this->serial_number_ = (uint32_t(raw_serial_number[0]) << 16) | uint32_t(raw_serial_number[1]); if (!this->write_command(heater_enabled_ ? SHT3XD_COMMAND_HEATER_ENABLE : SHT3XD_COMMAND_HEATER_DISABLE)) { + this->error_code_ = WRITE_HEATER_MODE_FAILED; this->mark_failed(); return; } @@ -36,10 +47,21 @@ void SHT3XDComponent::setup() { void SHT3XDComponent::dump_config() { ESP_LOGCONFIG(TAG, "SHT3xD:"); + switch (this->error_code_) { + case READ_SERIAL_FAILED: + ESP_LOGD(TAG, " Error reading serial number"); + break; + case WRITE_HEATER_MODE_FAILED: + ESP_LOGD(TAG, " Error writing heater mode"); + break; + default: + break; + } if (this->is_failed()) { ESP_LOGE(TAG, " Communication with SHT3xD failed!"); return; } + ESP_LOGD(TAG, " Setup successful"); ESP_LOGD(TAG, " Serial Number: 0x%08" PRIX32, this->serial_number_); ESP_LOGD(TAG, " Heater Enabled: %s", this->heater_enabled_ ? "true" : "false"); diff --git a/esphome/components/sht3xd/sht3xd.h b/esphome/components/sht3xd/sht3xd.h index d1a3360e69..74f155121b 100644 --- a/esphome/components/sht3xd/sht3xd.h +++ b/esphome/components/sht3xd/sht3xd.h @@ -22,6 +22,13 @@ class SHT3XDComponent : public PollingComponent, public sensirion_common::Sensir void set_heater_enabled(bool heater_enabled) { heater_enabled_ = heater_enabled; } protected: + enum ErrorCode { + NONE = 0, + READ_SERIAL_STRETCHED_FAILED, + READ_SERIAL_FAILED, + WRITE_HEATER_MODE_FAILED, + } error_code_{NONE}; + sensor::Sensor *temperature_sensor_{nullptr}; sensor::Sensor *humidity_sensor_{nullptr}; bool heater_enabled_{true}; From 5838af646b5523ab51721f09306a5242a475115d Mon Sep 17 00:00:00 2001 From: Samuel Sieb Date: Mon, 22 Apr 2024 23:43:11 -0700 Subject: [PATCH 108/313] allow defaults with no include vars (#6613) --- esphome/yaml_util.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/esphome/yaml_util.py b/esphome/yaml_util.py index c7aa78201f..06bfd8b217 100644 --- a/esphome/yaml_util.py +++ b/esphome/yaml_util.py @@ -321,8 +321,9 @@ class ESPHomeLoaderMixin: file, vars = node.value, None result = _load_yaml_internal(self._rel_path(file)) - if vars: - result = substitute_vars(result, vars) + if not vars: + vars = {} + result = substitute_vars(result, vars) return result @_add_data_ref From 9832fa4d76f75acb679360c2215eba0921e871e6 Mon Sep 17 00:00:00 2001 From: tronikos Date: Sat, 27 Apr 2024 18:22:41 -0700 Subject: [PATCH 109/313] Revert #6458 (#6650) Reading the z-axis register is required. --- esphome/components/qmc5883l/qmc5883l.cpp | 46 ++++++++---------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/esphome/components/qmc5883l/qmc5883l.cpp b/esphome/components/qmc5883l/qmc5883l.cpp index 4946ad1b77..8541b41ff7 100644 --- a/esphome/components/qmc5883l/qmc5883l.cpp +++ b/esphome/components/qmc5883l/qmc5883l.cpp @@ -77,8 +77,17 @@ void QMC5883LComponent::dump_config() { float QMC5883LComponent::get_setup_priority() const { return setup_priority::DATA; } void QMC5883LComponent::update() { uint8_t status = false; - if (ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG) - this->read_byte(QMC5883L_REGISTER_STATUS, &status); + this->read_byte(QMC5883L_REGISTER_STATUS, &status); + + // Always request X,Y,Z regardless if there are sensors for them + // to avoid https://github.com/esphome/issues/issues/5731 + uint16_t raw_x, raw_y, raw_z; + if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_X_LSB, &raw_x) || + !this->read_byte_16_(QMC5883L_REGISTER_DATA_Y_LSB, &raw_y) || + !this->read_byte_16_(QMC5883L_REGISTER_DATA_Z_LSB, &raw_z)) { + this->status_set_warning(); + return; + } float mg_per_bit; switch (this->range_) { @@ -93,36 +102,11 @@ void QMC5883LComponent::update() { } // in µT - float x = NAN, y = NAN, z = NAN; - if (this->x_sensor_ != nullptr || this->heading_sensor_ != nullptr) { - uint16_t raw_x; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_X_LSB, &raw_x)) { - this->status_set_warning(); - return; - } - x = int16_t(raw_x) * mg_per_bit * 0.1f; - } - if (this->y_sensor_ != nullptr || this->heading_sensor_ != nullptr) { - uint16_t raw_y; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_Y_LSB, &raw_y)) { - this->status_set_warning(); - return; - } - y = int16_t(raw_y) * mg_per_bit * 0.1f; - } - if (this->z_sensor_ != nullptr) { - uint16_t raw_z; - if (!this->read_byte_16_(QMC5883L_REGISTER_DATA_Z_LSB, &raw_z)) { - this->status_set_warning(); - return; - } - z = int16_t(raw_z) * mg_per_bit * 0.1f; - } + const float x = int16_t(raw_x) * mg_per_bit * 0.1f; + const float y = int16_t(raw_y) * mg_per_bit * 0.1f; + const float z = int16_t(raw_z) * mg_per_bit * 0.1f; - float heading = NAN; - if (this->heading_sensor_ != nullptr) { - heading = atan2f(0.0f - x, y) * 180.0f / M_PI; - } + float heading = atan2f(0.0f - x, y) * 180.0f / M_PI; float temp = NAN; if (this->temperature_sensor_ != nullptr) { From 4936cbec0d8428ebab0f939c83863d4810848d20 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:10:12 +1200 Subject: [PATCH 110/313] [i2s_audio.microphone] Fixing adc bug (#6654) --- .../microphone/i2s_audio_microphone.cpp | 65 +++++++++++++++++-- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp index 602d537bcb..1475df0975 100644 --- a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +++ b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp @@ -61,28 +61,57 @@ void I2SAudioMicrophone::start_() { .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT, }; + esp_err_t err; + #if SOC_I2S_SUPPORTS_ADC if (this->adc_) { config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN); - i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + + err = i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error setting ADC mode: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + err = i2s_adc_enable(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error enabling ADC: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } - i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_); - i2s_adc_enable(this->parent_->get_port()); } else #endif { if (this->pdm_) config.mode = (i2s_mode_t) (config.mode | I2S_MODE_PDM); - i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } i2s_pin_config_t pin_config = this->parent_->get_pin_config(); pin_config.data_in_num = this->din_pin_; - i2s_set_pin(this->parent_->get_port(), &pin_config); + err = i2s_set_pin(this->parent_->get_port(), &pin_config); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error setting I2S pin: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } } this->state_ = microphone::STATE_RUNNING; this->high_freq_.start(); + this->status_clear_error(); } void I2SAudioMicrophone::stop() { @@ -96,11 +125,33 @@ void I2SAudioMicrophone::stop() { } void I2SAudioMicrophone::stop_() { - i2s_stop(this->parent_->get_port()); - i2s_driver_uninstall(this->parent_->get_port()); + esp_err_t err; +#if SOC_I2S_SUPPORTS_ADC + if (this->adc_) { + err = i2s_adc_disable(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + } +#endif + err = i2s_stop(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error stopping I2S microphone: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } + err = i2s_driver_uninstall(this->parent_->get_port()); + if (err != ESP_OK) { + ESP_LOGW(TAG, "Error uninstalling I2S driver: %s", esp_err_to_name(err)); + this->status_set_error(); + return; + } this->parent_->unlock(); this->state_ = microphone::STATE_STOPPED; this->high_freq_.stop(); + this->status_clear_error(); } size_t I2SAudioMicrophone::read(int16_t *buf, size_t len) { From 516971a255407aac9878ad4e790621126858d5fd Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 30 Apr 2024 15:47:40 +1200 Subject: [PATCH 111/313] Bump version to 2024.4.2 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 69949dc086..f11345527e 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.4.1" +__version__ = "2024.4.2" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 74fd52e05fdc6f63ef64ada77f8a7b8d63de8c45 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Tue, 30 Apr 2024 11:29:57 +0200 Subject: [PATCH 112/313] [nextion] Set alternative TFT update baud rate (#6587) --- esphome/components/nextion/nextion.h | 16 +++++++++-- .../nextion/nextion_upload_arduino.cpp | 27 +++++++++++++++++-- .../components/nextion/nextion_upload_idf.cpp | 27 +++++++++++++++++-- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index 833db675fc..b6a6204cd4 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -992,14 +992,26 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe #endif /** - * Upload the tft file and soft reset Nextion + * @brief Uploads the TFT file to the Nextion display. + * + * This function initiates the upload of a TFT file to the Nextion display. Users can specify a target baud rate for + * the transfer. If the provided baud rate is not supported by Nextion, the function defaults to using the current + * baud rate set for the display. If no baud rate is specified (or if 0 is passed), the current baud rate is used. + * + * Supported baud rates are: 2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400, 250000, 256000, 512000 + * and 921600. Selecting a baud rate supported by both the Nextion display and the host hardware is essential for + * ensuring a successful upload process. + * + * @param baud_rate The desired baud rate for the TFT file transfer, specified as an unsigned 32-bit integer. + * If the specified baud rate is not supported, or if 0 is passed, the function will use the current baud rate. + * The default value is 0, which implies using the current baud rate. * @param exit_reparse If true, the function exits reparse mode before uploading the TFT file. This parameter * defaults to true, ensuring that the display is ready to receive and apply the new TFT file without needing * to manually reset or reconfigure. Exiting reparse mode is recommended for most upload scenarios to ensure * the display properly processes the uploaded file command. * @return bool True: Transfer completed successfuly, False: Transfer failed. */ - bool upload_tft(bool exit_reparse = true); + bool upload_tft(uint32_t baud_rate = 0, bool exit_reparse = true); void dump_config() override; diff --git a/esphome/components/nextion/nextion_upload_arduino.cpp b/esphome/components/nextion/nextion_upload_arduino.cpp index 4f8df67006..6e7c8b9563 100644 --- a/esphome/components/nextion/nextion_upload_arduino.cpp +++ b/esphome/components/nextion/nextion_upload_arduino.cpp @@ -141,7 +141,7 @@ int Nextion::upload_by_chunks_(HTTPClient *http, int range_start) { return range_end + 1; } -bool Nextion::upload_tft(bool exit_reparse) { +bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { ESP_LOGD(TAG, "Nextion TFT upload requested"); ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse)); ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str()); @@ -166,6 +166,15 @@ bool Nextion::upload_tft(bool exit_reparse) { } } + // Check if baud rate is supported + this->original_baud_rate_ = this->parent_->get_baud_rate(); + static const std::vector SUPPORTED_BAUD_RATES = {2400, 4800, 9600, 19200, 31250, 38400, 57600, + 115200, 230400, 250000, 256000, 512000, 921600}; + if (std::find(SUPPORTED_BAUD_RATES.begin(), SUPPORTED_BAUD_RATES.end(), baud_rate) == SUPPORTED_BAUD_RATES.end()) { + baud_rate = this->original_baud_rate_; + } + ESP_LOGD(TAG, "Baud rate: %" PRIu32, baud_rate); + HTTPClient http; http.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along bool begin_status = false; @@ -244,7 +253,7 @@ bool Nextion::upload_tft(bool exit_reparse) { // Tells the Nextion the content length of the tft file and baud rate it will be sent at // Once the Nextion accepts the command it will wait until the file is successfully uploaded // If it fails for any reason a power cycle of the display will be needed - sprintf(command, "whmi-wris %d,%d,1", this->content_length_, this->parent_->get_baud_rate()); + sprintf(command, "whmi-wris %d,%d,1", this->content_length_, baud_rate); // Clear serial receive buffer uint8_t d; @@ -254,6 +263,12 @@ bool Nextion::upload_tft(bool exit_reparse) { this->send_command_(command); + if (baud_rate != this->original_baud_rate_) { + ESP_LOGD(TAG, "Changing baud rate from %" PRIu32 " to %" PRIu32 " bps", this->original_baud_rate_, baud_rate); + this->parent_->set_baud_rate(baud_rate); + this->parent_->load_settings(); + } + App.feed_wdt(); std::string response; @@ -335,6 +350,14 @@ bool Nextion::upload_tft(bool exit_reparse) { bool Nextion::upload_end_(bool successful) { this->is_updating_ = false; + + uint32_t baud_rate = this->parent_->get_baud_rate(); + if (baud_rate != this->original_baud_rate_) { + ESP_LOGD(TAG, "Changing baud rate back from %" PRIu32 " to %" PRIu32 " bps", baud_rate, this->original_baud_rate_); + this->parent_->set_baud_rate(this->original_baud_rate_); + this->parent_->load_settings(); + } + ESP_LOGD(TAG, "Restarting Nextion"); this->soft_reset(); if (successful) { diff --git a/esphome/components/nextion/nextion_upload_idf.cpp b/esphome/components/nextion/nextion_upload_idf.cpp index d08f970551..163b497d3b 100644 --- a/esphome/components/nextion/nextion_upload_idf.cpp +++ b/esphome/components/nextion/nextion_upload_idf.cpp @@ -160,7 +160,7 @@ int Nextion::upload_range(const std::string &url, int range_start) { return range_end + 1; } -bool Nextion::upload_tft(bool exit_reparse) { +bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { ESP_LOGD(TAG, "Nextion TFT upload requested"); ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse)); ESP_LOGD(TAG, "url: %s", this->tft_url_.c_str()); @@ -185,6 +185,15 @@ bool Nextion::upload_tft(bool exit_reparse) { } } + // Check if baud rate is supported + this->original_baud_rate_ = this->parent_->get_baud_rate(); + static const std::vector SUPPORTED_BAUD_RATES = {2400, 4800, 9600, 19200, 31250, 38400, 57600, + 115200, 230400, 250000, 256000, 512000, 921600}; + if (std::find(SUPPORTED_BAUD_RATES.begin(), SUPPORTED_BAUD_RATES.end(), baud_rate) == SUPPORTED_BAUD_RATES.end()) { + baud_rate = this->original_baud_rate_; + } + ESP_LOGD(TAG, "Baud rate: %" PRIu32, baud_rate); + // Define the configuration for the HTTP client ESP_LOGV(TAG, "Establishing connection to HTTP server"); ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); @@ -254,7 +263,7 @@ bool Nextion::upload_tft(bool exit_reparse) { // Tells the Nextion the content length of the tft file and baud rate it will be sent at // Once the Nextion accepts the command it will wait until the file is successfully uploaded // If it fails for any reason a power cycle of the display will be needed - sprintf(command, "whmi-wris %d,%" PRIu32 ",1", this->content_length_, this->parent_->get_baud_rate()); + sprintf(command, "whmi-wris %d,%" PRIu32 ",1", this->content_length_, baud_rate); // Clear serial receive buffer ESP_LOGV(TAG, "Clear serial receive buffer"); @@ -268,6 +277,12 @@ bool Nextion::upload_tft(bool exit_reparse) { ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); this->send_command_(command); + if (baud_rate != this->original_baud_rate_) { + ESP_LOGD(TAG, "Changing baud rate from %" PRIu32 " to %" PRIu32 " bps", this->original_baud_rate_, baud_rate); + this->parent_->set_baud_rate(baud_rate); + this->parent_->load_settings(); + } + std::string response; ESP_LOGV(TAG, "Waiting for upgrade response"); this->recv_ret_string_(response, 5000, true); // This can take some time to return @@ -308,6 +323,14 @@ bool Nextion::upload_tft(bool exit_reparse) { bool Nextion::upload_end(bool successful) { this->is_updating_ = false; + + uint32_t baud_rate = this->parent_->get_baud_rate(); + if (baud_rate != this->original_baud_rate_) { + ESP_LOGD(TAG, "Changing baud rate back from %" PRIu32 " to %" PRIu32 " bps", baud_rate, this->original_baud_rate_); + this->parent_->set_baud_rate(this->original_baud_rate_); + this->parent_->load_settings(); + } + ESP_LOGD(TAG, "Restarting Nextion"); this->soft_reset(); vTaskDelay(pdMS_TO_TICKS(1500)); // NOLINT From 6fe328ef2bb9d50efe612d2176df8f562b8bd1a5 Mon Sep 17 00:00:00 2001 From: Anton Sergunov Date: Tue, 30 Apr 2024 16:35:41 +0600 Subject: [PATCH 113/313] [TM1637] Let turn off the display (#6656) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/tm1637/tm1637.cpp | 2 +- esphome/components/tm1637/tm1637.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/esphome/components/tm1637/tm1637.cpp b/esphome/components/tm1637/tm1637.cpp index 8d7630bd1d..2f2d4b707a 100644 --- a/esphome/components/tm1637/tm1637.cpp +++ b/esphome/components/tm1637/tm1637.cpp @@ -225,7 +225,7 @@ void TM1637Display::display() { // Write display CTRL CMND + brightness this->start_(); - this->send_byte_(TM1637_CMD_CTRL + ((this->intensity_ & 0x7) | 0x08)); + this->send_byte_(TM1637_CMD_CTRL + ((this->intensity_ & 0x7) | (this->on_ ? 0x08 : 0x00))); this->stop_(); } bool TM1637Display::send_byte_(uint8_t b) { diff --git a/esphome/components/tm1637/tm1637.h b/esphome/components/tm1637/tm1637.h index aba0071b12..d44680c623 100644 --- a/esphome/components/tm1637/tm1637.h +++ b/esphome/components/tm1637/tm1637.h @@ -49,6 +49,7 @@ class TM1637Display : public PollingComponent { void set_intensity(uint8_t intensity) { this->intensity_ = intensity; } void set_inverted(bool inverted) { this->inverted_ = inverted; } void set_length(uint8_t length) { this->length_ = length; } + void set_on(bool on) { this->on_ = on; } void display(); @@ -76,6 +77,7 @@ class TM1637Display : public PollingComponent { uint8_t intensity_; uint8_t length_; bool inverted_; + bool on_{true}; optional writer_{}; uint8_t buffer_[6] = {0}; #ifdef USE_BINARY_SENSOR From c299dff124937f4a2253956f72bac77f6c4c79ee Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Tue, 30 Apr 2024 23:43:49 +0200 Subject: [PATCH 114/313] [nextion] Use persistent http connection for TFT upload (Arduino) (#6582) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/nextion/nextion.h | 40 +- .../nextion/nextion_upload_arduino.cpp | 397 +++++++++--------- 2 files changed, 213 insertions(+), 224 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index b6a6204cd4..7938af0ea5 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -976,6 +976,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return Whether the send was successful. */ bool send_command(const char *command); + /** * Manually send a raw formatted command to the display. * @param format The printf-style command format, like "vis %s,0" @@ -989,7 +990,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Set the tft file URL. https seems problematic with arduino.. */ void set_tft_url(const std::string &tft_url) { this->tft_url_ = tft_url; } -#endif /** * @brief Uploads the TFT file to the Nextion display. @@ -1013,6 +1013,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ bool upload_tft(uint32_t baud_rate = 0, bool exit_reparse = true); +#endif + void dump_config() override; /** @@ -1134,6 +1136,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void all_components_send_state_(bool force_update = false); uint64_t comok_sent_ = 0; bool remove_from_q_(bool report_empty = true); + /** * @brief * Sends commands ignoring of the Nextion has been setup. @@ -1175,20 +1178,16 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe void check_pending_waveform_(); #ifdef USE_NEXTION_TFT_UPLOAD - uint32_t content_length_ = 0; - int tft_size_ = 0; - uint32_t original_baud_rate_ = 0; - bool upload_first_chunk_sent_ = false; - - std::string tft_url_; - uint8_t *transfer_buffer_{nullptr}; - size_t transfer_buffer_size_; - #ifdef USE_ESP8266 WiFiClient *wifi_client_{nullptr}; BearSSL::WiFiClientSecure *wifi_client_secure_{nullptr}; WiFiClient *get_wifi_client_(); #endif + std::string tft_url_; + uint32_t content_length_ = 0; + int tft_size_ = 0; + uint32_t original_baud_rate_ = 0; + bool upload_first_chunk_sent_ = false; #ifdef ARDUINO /** @@ -1198,18 +1197,8 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @param int range_start Position of next byte to transfer. * @return position of last byte transferred, -1 for failure. */ - int upload_by_chunks_(HTTPClient *http, int range_start); + int upload_by_chunks_(HTTPClient &http_client, uint32_t &range_start); - bool upload_with_range_(uint32_t range_start, uint32_t range_end); - - /** - * start update tft file to nextion. - * - * @param const uint8_t *file_buf - * @param size_t buf_size - * @return true if success, false for failure. - */ - bool upload_from_buffer_(const uint8_t *file_buf, size_t buf_size); /** * Ends the upload process, restart Nextion and, if successful, * restarts ESP @@ -1217,6 +1206,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return bool True: Transfer completed successfuly, False: Transfer failed. */ bool upload_end_(bool successful); + #elif defined(USE_ESP_IDF) /** * will request 4096 bytes chunks from the web server @@ -1226,6 +1216,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return position of last byte transferred, -1 for failure. */ int upload_range(const std::string &url, int range_start); + /** * Ends the upload process, restart Nextion and, if successful, * restarts ESP @@ -1233,7 +1224,12 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return bool True: Transfer completed successfuly, False: Transfer failed. */ bool upload_end(bool successful); -#endif // ARDUINO vs ESP-IDF +#endif // ARDUINO vs USE_ESP_IDF + /** + * Returns the ESP Free Heap memory. This is framework independent. + * @return Free Heap in bytes. + */ + uint32_t get_free_heap_(); #endif // USE_NEXTION_TFT_UPLOAD diff --git a/esphome/components/nextion/nextion_upload_arduino.cpp b/esphome/components/nextion/nextion_upload_arduino.cpp index 6e7c8b9563..b199db91b7 100644 --- a/esphome/components/nextion/nextion_upload_arduino.cpp +++ b/esphome/components/nextion/nextion_upload_arduino.cpp @@ -1,13 +1,14 @@ #include "nextion.h" -#ifdef ARDUINO #ifdef USE_NEXTION_TFT_UPLOAD +#ifdef ARDUINO #include "esphome/core/application.h" #include "esphome/core/defines.h" #include "esphome/core/util.h" #include "esphome/core/log.h" #include "esphome/components/network/util.h" +#include #ifdef USE_ESP32 #include @@ -20,124 +21,132 @@ static const char *const TAG = "nextion.upload.arduino"; // Followed guide // https://unofficialnextion.com/t/nextion-upload-protocol-v1-2-the-fast-one/1044/2 -int Nextion::upload_by_chunks_(HTTPClient *http, int range_start) { - int range_end = 0; +inline uint32_t Nextion::get_free_heap_() { +#if defined(USE_ESP32) + return heap_caps_get_free_size(MALLOC_CAP_INTERNAL); +#elif defined(USE_ESP8266) + return EspClass::getFreeHeap(); +#endif // USE_ESP32 vs USE_ESP8266 +} - if (range_start == 0 && this->transfer_buffer_size_ > 16384) { // Start small at the first run in case of a big skip - range_end = 16384 - 1; - } else { - range_end = range_start + this->transfer_buffer_size_ - 1; +int Nextion::upload_by_chunks_(HTTPClient &http_client, uint32_t &range_start) { + uint32_t range_size = this->tft_size_ - range_start; + ESP_LOGV(TAG, "Free heap: %" PRIu32, this->get_free_heap_()); + uint32_t range_end = ((upload_first_chunk_sent_ or this->tft_size_ < 4096) ? this->tft_size_ : 4096) - 1; + ESP_LOGD(TAG, "Range start: %" PRIu32, range_start); + if (range_size <= 0 or range_end <= range_start) { + ESP_LOGD(TAG, "Range end: %" PRIu32, range_end); + ESP_LOGD(TAG, "Range size: %" PRIu32, range_size); + ESP_LOGE(TAG, "Invalid range"); + return -1; } - if (range_end > this->tft_size_) - range_end = this->tft_size_; - -#ifdef USE_ESP8266 -#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0) - http->setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); -#elif USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0) - http->setFollowRedirects(true); -#endif -#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0) - http->setRedirectLimit(3); -#endif -#endif // USE_ESP8266 - - char range_header[64]; - sprintf(range_header, "bytes=%d-%d", range_start, range_end); - - ESP_LOGD(TAG, "Requesting range: %s", range_header); - - int tries = 1; - int code = 0; - bool begin_status = false; - while (tries <= 5) { -#ifdef USE_ESP32 - begin_status = http->begin(this->tft_url_.c_str()); -#endif -#ifdef USE_ESP8266 - begin_status = http->begin(*this->get_wifi_client_(), this->tft_url_.c_str()); -#endif - - ++tries; - if (!begin_status) { - ESP_LOGD(TAG, "upload_by_chunks_: connection failed"); - delay(500); // NOLINT - continue; - } - - http->addHeader("Range", range_header); - - code = http->GET(); - if (code == 200 || code == 206) { - break; - } - ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s, retries(%d/5)", this->tft_url_.c_str(), - HTTPClient::errorToString(code).c_str(), tries); - http->end(); - App.feed_wdt(); - delay(500); // NOLINT + char range_header[32]; + sprintf(range_header, "bytes=%" PRIu32 "-%" PRIu32, range_start, range_end); + ESP_LOGV(TAG, "Requesting range: %s", range_header); + http_client.addHeader("Range", range_header); + int code = http_client.GET(); + if (code != HTTP_CODE_OK and code != HTTP_CODE_PARTIAL_CONTENT) { + ESP_LOGW(TAG, "HTTP Request failed; Error: %s", HTTPClient::errorToString(code).c_str()); + return -1; } - if (tries > 5) { + // Allocate the buffer dynamically + ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); + uint8_t *buffer = allocator.allocate(4096); + if (!buffer) { + ESP_LOGE(TAG, "Failed to allocate upload buffer"); return -1; } std::string recv_string; - size_t size = 0; - int fetched = 0; - int range = range_end - range_start; - - while (fetched < range) { - size = http->getStreamPtr()->available(); - if (!size) { - App.feed_wdt(); - delay(0); - continue; - } - int c = http->getStreamPtr()->readBytes( - &this->transfer_buffer_[fetched], ((size > this->transfer_buffer_size_) ? this->transfer_buffer_size_ : size)); - fetched += c; - } - http->end(); - ESP_LOGN(TAG, "Fetched %d of %d bytes", fetched, this->content_length_); - - // upload fetched segments to the display in 4KB chunks - int write_len; - for (int i = 0; i < range; i += 4096) { + while (true) { App.feed_wdt(); - write_len = this->content_length_ < 4096 ? this->content_length_ : 4096; - this->write_array(&this->transfer_buffer_[i], write_len); - this->content_length_ -= write_len; - ESP_LOGD(TAG, "Uploaded %0.2f %%; %d bytes remaining", - 100.0 * (this->tft_size_ - this->content_length_) / this->tft_size_, this->content_length_); - - if (!this->upload_first_chunk_sent_) { - this->upload_first_chunk_sent_ = true; - delay(500); // NOLINT - } - - this->recv_ret_string_(recv_string, 4096, true); - if (recv_string[0] != 0x05) { // 0x05 == "ok" - ESP_LOGD(TAG, "recv_string [%s]", - format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); - } - - // handle partial upload request - if (recv_string[0] == 0x08 && recv_string.size() == 5) { - uint32_t result = 0; - for (int j = 0; j < 4; ++j) { - result += static_cast(recv_string[j + 1]) << (8 * j); - } - if (result > 0) { - ESP_LOGD(TAG, "Nextion reported new range %d", result); - this->content_length_ = this->tft_size_ - result; - return result; + const uint16_t buffer_size = + this->content_length_ < 4096 ? this->content_length_ : 4096; // Limits buffer to the remaining data + ESP_LOGV(TAG, "Fetching %" PRIu16 " bytes from HTTP", buffer_size); + uint16_t read_len = 0; + int partial_read_len = 0; + const uint32_t start_time = millis(); + while (read_len < buffer_size && millis() - start_time < 5000) { + if (http_client.getStreamPtr()->available() > 0) { + partial_read_len = + http_client.getStreamPtr()->readBytes(reinterpret_cast(buffer) + read_len, buffer_size - read_len); + read_len += partial_read_len; + if (partial_read_len > 0) { + App.feed_wdt(); + delay(2); + } } } - recv_string.clear(); + if (read_len != buffer_size) { + // Did not receive the full package within the timeout period + ESP_LOGE(TAG, "Failed to read full package, received only %" PRIu16 " of %" PRIu16 " bytes", read_len, + buffer_size); + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return -1; + } + ESP_LOGV(TAG, "%d bytes fetched, writing it to UART", read_len); + if (read_len > 0) { + recv_string.clear(); + this->write_array(buffer, buffer_size); + App.feed_wdt(); + this->recv_ret_string_(recv_string, upload_first_chunk_sent_ ? 500 : 5000, true); + this->content_length_ -= read_len; + const float upload_percentage = 100.0f * (this->tft_size_ - this->content_length_) / this->tft_size_; +#if defined(USE_ESP32) && defined(USE_PSRAM) + ESP_LOGD( + TAG, + "Uploaded %0.2f%%, remaining %" PRIu32 " bytes, free heap: %" PRIu32 " (DRAM) + %" PRIu32 " (PSRAM) bytes", + upload_percentage, this->content_length_, static_cast(heap_caps_get_free_size(MALLOC_CAP_INTERNAL)), + static_cast(heap_caps_get_free_size(MALLOC_CAP_SPIRAM))); +#else + ESP_LOGD(TAG, "Uploaded %0.2f%%, remaining %" PRIu32 " bytes, free heap: %" PRIu32 " bytes", upload_percentage, + this->content_length_, this->get_free_heap_()); +#endif + upload_first_chunk_sent_ = true; + if (recv_string[0] == 0x08 && recv_string.size() == 5) { // handle partial upload request + ESP_LOGD(TAG, "recv_string [%s]", + format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); + uint32_t result = 0; + for (int j = 0; j < 4; ++j) { + result += static_cast(recv_string[j + 1]) << (8 * j); + } + if (result > 0) { + ESP_LOGI(TAG, "Nextion reported new range %" PRIu32, result); + this->content_length_ = this->tft_size_ - result; + range_start = result; + } else { + range_start = range_end + 1; + } + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return range_end + 1; + } else if (recv_string[0] != 0x05 and recv_string[0] != 0x08) { // 0x05 == "ok" + ESP_LOGE(TAG, "Invalid response from Nextion: [%s]", + format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return -1; + } + + recv_string.clear(); + } else if (read_len == 0) { + ESP_LOGV(TAG, "End of HTTP response reached"); + break; // Exit the loop if there is no more data to read + } else { + ESP_LOGE(TAG, "Failed to read from HTTP client, error code: %d", read_len); + break; // Exit the loop on error + } } - + range_start = range_end + 1; + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; return range_end + 1; } @@ -147,12 +156,12 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str()); if (this->is_updating_) { - ESP_LOGD(TAG, "Currently updating"); + ESP_LOGW(TAG, "Currently uploading"); return false; } if (!network::is_connected()) { - ESP_LOGD(TAG, "network is not connected"); + ESP_LOGE(TAG, "Network is not connected"); return false; } @@ -175,43 +184,42 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { } ESP_LOGD(TAG, "Baud rate: %" PRIu32, baud_rate); - HTTPClient http; - http.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along + // Define the configuration for the HTTP client + ESP_LOGV(TAG, "Initializing HTTP client"); + ESP_LOGV(TAG, "Free heap: %" PRIu32, this->get_free_heap_()); + HTTPClient http_client; + http_client.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along + bool begin_status = false; #ifdef USE_ESP32 - begin_status = http.begin(this->tft_url_.c_str()); + begin_status = http_client.begin(this->tft_url_.c_str()); #endif #ifdef USE_ESP8266 #if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0) - http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); + http_client.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); #elif USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0) - http.setFollowRedirects(true); + http_client.setFollowRedirects(true); #endif #if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0) - http.setRedirectLimit(3); + http_client.setRedirectLimit(3); #endif - begin_status = http.begin(*this->get_wifi_client_(), this->tft_url_.c_str()); -#endif - + begin_status = http_client.begin(*this->get_wifi_client_(), this->tft_url_.c_str()); +#endif // USE_ESP8266 if (!begin_status) { this->is_updating_ = false; ESP_LOGD(TAG, "Connection failed"); - ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); - allocator.deallocate(this->transfer_buffer_, this->transfer_buffer_size_); return false; } else { ESP_LOGD(TAG, "Connected"); } - - http.addHeader("Range", "bytes=0-255"); + http_client.addHeader("Range", "bytes=0-255"); const char *header_names[] = {"Content-Range"}; - http.collectHeaders(header_names, 1); + http_client.collectHeaders(header_names, 1); ESP_LOGD(TAG, "Requesting URL: %s", this->tft_url_.c_str()); - - http.setReuse(true); + http_client.setReuse(true); // try up to 5 times. DNS sometimes needs a second try or so int tries = 1; - int code = http.GET(); + int code = http_client.GET(); delay(100); // NOLINT App.feed_wdt(); @@ -221,34 +229,41 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { delay(250); // NOLINT App.feed_wdt(); - code = http.GET(); + code = http_client.GET(); ++tries; } - if ((code != 200 && code != 206) || tries > 5) { + if (code != 200 and code != 206) { return this->upload_end_(false); } - String content_range_string = http.header("Content-Range"); + String content_range_string = http_client.header("Content-Range"); content_range_string.remove(0, 12); - this->content_length_ = content_range_string.toInt(); - this->tft_size_ = content_length_; - http.end(); + this->tft_size_ = content_range_string.toInt(); - if (this->content_length_ < 4096) { - ESP_LOGE(TAG, "Failed to get file size"); + ESP_LOGD(TAG, "TFT file size: %zu bytes", this->tft_size_); + if (this->tft_size_ < 4096) { + ESP_LOGE(TAG, "File size check failed."); + ESP_LOGD(TAG, "Close HTTP connection"); + http_client.end(); + ESP_LOGV(TAG, "Connection closed"); return this->upload_end_(false); + } else { + ESP_LOGV(TAG, "File size check passed. Proceeding..."); } + this->content_length_ = this->tft_size_; - ESP_LOGD(TAG, "Updating Nextion %s...", this->device_model_.c_str()); - // The Nextion will ignore the update command if it is sleeping + ESP_LOGD(TAG, "Uploading Nextion"); + // The Nextion will ignore the upload command if it is sleeping + ESP_LOGV(TAG, "Wake-up Nextion"); + this->ignore_is_setup_ = true; this->send_command_("sleep=0"); - this->set_backlight_brightness(1.0); + this->send_command_("dim=100"); delay(250); // NOLINT + ESP_LOGV(TAG, "Free heap: %" PRIu32, this->get_free_heap_()); App.feed_wdt(); - char command[128]; // Tells the Nextion the content length of the tft file and baud rate it will be sent at // Once the Nextion accepts the command it will wait until the file is successfully uploaded @@ -256,11 +271,12 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { sprintf(command, "whmi-wris %d,%d,1", this->content_length_, baud_rate); // Clear serial receive buffer - uint8_t d; - while (this->available()) { - this->read_byte(&d); - }; + ESP_LOGV(TAG, "Clear serial receive buffer"); + this->reset_(false); + delay(250); // NOLINT + ESP_LOGV(TAG, "Free heap: %" PRIu32, this->get_free_heap_()); + ESP_LOGV(TAG, "Send upload instruction: %s", command); this->send_command_(command); if (baud_rate != this->original_baud_rate_) { @@ -272,84 +288,60 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { App.feed_wdt(); std::string response; - ESP_LOGD(TAG, "Waiting for upgrade response"); - this->recv_ret_string_(response, 2000, true); // This can take some time to return + ESP_LOGV(TAG, "Waiting for upgrade response"); + this->recv_ret_string_(response, 5000, true); // This can take some time to return // The Nextion display will, if it's ready to accept data, send a 0x05 byte. - ESP_LOGD(TAG, "Upgrade response is [%s] - %zu bytes", + ESP_LOGD(TAG, "Upgrade response is [%s] - %zu byte(s)", format_hex_pretty(reinterpret_cast(response.data()), response.size()).c_str(), response.length()); - - for (size_t i = 0; i < response.length(); i++) { - ESP_LOGD(TAG, "Available %d : 0x%02X", i, response[i]); - } + ESP_LOGV(TAG, "Free heap: %" PRIu32, this->get_free_heap_()); if (response.find(0x05) != std::string::npos) { - ESP_LOGD(TAG, "preparation for tft update done"); + ESP_LOGV(TAG, "Preparation for TFT upload done"); } else { - ESP_LOGD(TAG, "preparation for tft update failed %d \"%s\"", response[0], response.c_str()); + ESP_LOGE(TAG, "Preparation for TFT upload failed %d \"%s\"", response[0], response.c_str()); + ESP_LOGD(TAG, "Close HTTP connection"); + http_client.end(); + ESP_LOGV(TAG, "Connection closed"); return this->upload_end_(false); } - // Nextion wants 4096 bytes at a time. Make chunk_size a multiple of 4096 -#ifdef USE_ESP32 - uint32_t chunk_size = 8192; - if (heap_caps_get_free_size(MALLOC_CAP_SPIRAM) > 0) { - chunk_size = this->content_length_; - } else { - if (ESP.getFreeHeap() > 81920) { // Ensure some FreeHeap to other things and limit chunk size - chunk_size = ESP.getFreeHeap() - 65536; - chunk_size = int(chunk_size / 4096) * 4096; - chunk_size = chunk_size > 65536 ? 65536 : chunk_size; - } else if (ESP.getFreeHeap() < 32768) { - chunk_size = 4096; - } - } -#else - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - uint32_t chunk_size = ESP.getFreeHeap() < 16384 ? 4096 : 8192; -#endif + ESP_LOGD(TAG, "Uploading TFT to Nextion:"); + ESP_LOGD(TAG, " URL: %s", this->tft_url_.c_str()); + ESP_LOGD(TAG, " File size: %d bytes", this->content_length_); + ESP_LOGD(TAG, " Free heap: %" PRIu32, this->get_free_heap_()); - if (this->transfer_buffer_ == nullptr) { - ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - ESP_LOGD(TAG, "Allocating buffer size %d, Heap size is %u", chunk_size, ESP.getFreeHeap()); - this->transfer_buffer_ = allocator.allocate(chunk_size); - if (this->transfer_buffer_ == nullptr) { // Try a smaller size - ESP_LOGD(TAG, "Could not allocate buffer size: %d trying 4096 instead", chunk_size); - chunk_size = 4096; - ESP_LOGD(TAG, "Allocating %d buffer", chunk_size); - this->transfer_buffer_ = allocator.allocate(chunk_size); + // Proceed with the content download as before - if (!this->transfer_buffer_) - return this->upload_end_(false); - } + ESP_LOGV(TAG, "Starting transfer by chunks loop"); - this->transfer_buffer_size_ = chunk_size; - } - - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - ESP_LOGD(TAG, "Updating tft from \"%s\" with a file size of %d using %zu chunksize, Heap Size %d", - this->tft_url_.c_str(), this->content_length_, this->transfer_buffer_size_, ESP.getFreeHeap()); - - int result = 0; + uint32_t position = 0; while (this->content_length_ > 0) { - result = this->upload_by_chunks_(&http, result); - if (result < 0) { - ESP_LOGD(TAG, "Error updating Nextion!"); + int upload_result = upload_by_chunks_(http_client, position); + if (upload_result < 0) { + ESP_LOGE(TAG, "Error uploading TFT to Nextion!"); + ESP_LOGD(TAG, "Close HTTP connection"); + http_client.end(); + ESP_LOGV(TAG, "Connection closed"); return this->upload_end_(false); } App.feed_wdt(); - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - ESP_LOGD(TAG, "Heap Size %d, Bytes left %d", ESP.getFreeHeap(), this->content_length_); + ESP_LOGV(TAG, "Free heap: %" PRIu32 ", Bytes left: %" PRIu32, this->get_free_heap_(), this->content_length_); } - ESP_LOGD(TAG, "Successfully updated Nextion!"); - return this->upload_end_(true); + ESP_LOGD(TAG, "Successfully uploaded TFT to Nextion!"); + + ESP_LOGD(TAG, "Close HTTP connection"); + http_client.end(); + ESP_LOGV(TAG, "Connection closed"); + return upload_end_(true); } bool Nextion::upload_end_(bool successful) { + ESP_LOGD(TAG, "Nextion TFT upload finished: %s", YESNO(successful)); this->is_updating_ = false; + this->ignore_is_setup_ = false; uint32_t baud_rate = this->parent_->get_baud_rate(); if (baud_rate != this->original_baud_rate_) { @@ -358,12 +350,12 @@ bool Nextion::upload_end_(bool successful) { this->parent_->load_settings(); } - ESP_LOGD(TAG, "Restarting Nextion"); - this->soft_reset(); if (successful) { + ESP_LOGD(TAG, "Restarting ESPHome"); delay(1500); // NOLINT - ESP_LOGD(TAG, "Restarting esphome"); - ESP.restart(); // NOLINT(readability-static-accessed-through-instance) + arch_restart(); + } else { + ESP_LOGE(TAG, "Nextion TFT upload failed"); } return successful; } @@ -386,9 +378,10 @@ WiFiClient *Nextion::get_wifi_client_() { } return this->wifi_client_; } -#endif +#endif // USE_ESP8266 + } // namespace nextion } // namespace esphome -#endif // USE_NEXTION_TFT_UPLOAD #endif // ARDUINO +#endif // USE_NEXTION_TFT_UPLOAD From c69cdec0521147ec3d1a594c9c5121cab9710c33 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 30 Apr 2024 23:49:20 -0500 Subject: [PATCH 115/313] Extend MQTT tests (#6648) --- esphome/components/mqtt/__init__.py | 7 +- tests/components/mqtt/common.yaml | 428 +++++++++++++++++++ tests/components/mqtt/test.bk72xx.yaml | 2 + tests/components/mqtt/test.esp32-c3-idf.yaml | 18 +- tests/components/mqtt/test.esp32-c3.yaml | 17 +- tests/components/mqtt/test.esp32-idf.yaml | 18 +- tests/components/mqtt/test.esp32.yaml | 17 +- tests/components/mqtt/test.esp8266.yaml | 17 +- 8 files changed, 446 insertions(+), 78 deletions(-) create mode 100644 tests/components/mqtt/common.yaml create mode 100644 tests/components/mqtt/test.bk72xx.yaml diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index 064362c619..31cbb2cf97 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -54,7 +54,12 @@ from esphome.components.esp32 import add_idf_sdkconfig_option DEPENDENCIES = ["network"] -AUTO_LOAD = ["json"] + +def AUTO_LOAD(): + if CORE.is_esp8266 or CORE.is_libretiny: + return ["async_tcp", "json"] + return ["json"] + CONF_IDF_SEND_ASYNC = "idf_send_async" CONF_SKIP_CERT_CN_CHECK = "skip_cert_cn_check" diff --git a/tests/components/mqtt/common.yaml b/tests/components/mqtt/common.yaml new file mode 100644 index 0000000000..a2a751df63 --- /dev/null +++ b/tests/components/mqtt/common.yaml @@ -0,0 +1,428 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + +mqtt: + broker: "192.168.178.84" + port: 1883 + username: debug + password: debug + client_id: someclient + use_abbreviations: false + discovery: true + discovery_retain: false + discovery_prefix: discovery + discovery_unique_id_generator: legacy + topic_prefix: helloworld + log_topic: + topic: helloworld/hi + level: INFO + birth_message: + will_message: + shutdown_message: + topic: topic/to/send/to + payload: hi + qos: 2 + retain: true + keepalive: 60s + reboot_timeout: 60s + on_message: + - topic: my/custom/topic + qos: 0 + then: + - lambda: >- + ESP_LOGD("main", "Got message %s", x.c_str()); + - topic: bedroom/ota_mode + then: + - logger.log: Got bedroom/ota_mode + - topic: livingroom/ota_mode + then: + - logger.log: Got livingroom/ota_mode + on_json_message: + topic: the/topic + then: + - if: + condition: + - wifi.connected: + - mqtt.connected: + then: + - logger.log: on_json_message + on_connect: + - mqtt.publish: + topic: some/topic + payload: Hello + on_disconnect: + - mqtt.publish: + topic: some/topic + payload: Good-bye + +binary_sensor: + - platform: template + id: some_binary_sensor + name: Garage Door Open + state_topic: some/topic/binary_sensor + qos: 2 + lambda: |- + if (id(template_sens).state > 30) { + // Garage Door is open. + return true; + } else { + // Garage Door is closed. + return false; + } + on_state: + - mqtt.publish: + topic: some/topic/binary_sensor + payload: Hello + qos: 2 + retain: true + +button: + - platform: template + name: "Template Button" + state_topic: some/topic/button + qos: 2 + on_press: + - mqtt.publish: + topic: some/topic/button + payload: Hello + qos: 2 + retain: true + +climate: + - platform: thermostat + name: Test Thermostat + sensor: template_sens + humidity_sensor: template_sens + action_state_topic: some/topicaction_state + current_temperature_state_topic: some/topiccurrent_temperature_state + current_humidity_state_topic: some/topiccurrent_humidity_state + fan_mode_state_topic: some/topicfan_mode_state + fan_mode_command_topic: some/topicfan_mode_command + mode_state_topic: some/topicmode_state + mode_command_topic: some/topicmode_command + preset_state_topic: some/topicpreset_state + preset_command_topic: some/topicpreset_command + swing_mode_state_topic: some/topicswing_mode_state + swing_mode_command_topic: some/topicswing_mode_command + target_temperature_state_topic: some/topictarget_temperature_state + target_temperature_command_topic: some/topictarget_temperature_command + target_temperature_high_state_topic: some/topictarget_temperature_high_state + target_temperature_high_command_topic: some/topictarget_temperature_high_command + target_temperature_low_state_topic: some/topictarget_temperature_low_state + target_temperature_low_command_topic: some/topictarget_temperature_low_command + target_humidity_state_topic: some/topictarget_humidity_state + target_humidity_command_topic: some/topictarget_humidity_command + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true + +cover: + - platform: template + name: Template Cover + state_topic: some/topic/cover + qos: 2 + lambda: |- + if (id(some_binary_sensor).state) { + return COVER_OPEN; + } else { + return COVER_CLOSED; + } + open_action: + - logger.log: open_action + close_action: + - logger.log: close_action + stop_action: + - logger.log: stop_action + optimistic: true + +datetime: + - platform: template + name: Date + id: test_date + type: date + state_topic: some/topic/date + qos: 2 + set_action: + - logger.log: "set_value" + on_value: + - logger.log: + format: "Date: %04d-%02d-%02d" + args: + - x.year + - x.month + - x.day_of_month + - platform: template + name: Time + id: test_time + type: time + state_topic: some/topic/time + qos: 2 + set_action: + - logger.log: "set_value" + on_value: + - logger.log: + format: "Time: %02d:%02d:%02d" + args: + - x.hour + - x.minute + - x.second + - platform: template + name: DateTime + id: test_datetime + type: datetime + state_topic: some/topic/datetime + qos: 2 + set_action: + - logger.log: set_value + on_value: + - logger.log: + format: "DateTime: %04d-%02d-%02d %02d:%02d:%02d" + args: + - x.year + - x.month + - x.day_of_month + - x.hour + - x.minute + - x.second + +event: + - platform: template + name: Template Event + state_topic: some/topic/event + qos: 2 + event_types: + - "custom_event_1" + - "custom_event_2" + +fan: + - platform: template + name: Template Fan + state_topic: some/topic/fan + qos: 2 + on_state: + - logger.log: on_state + on_speed_set: + - logger.log: on_speed_set + +light: + - platform: binary + name: Desk Lamp + output: light_output + state_topic: some/topic/light + qos: 2 + +output: + - id: light_output + platform: gpio + pin: 0 + +lock: + - platform: template + name: "Template Lock" + state_topic: some/topic/lock + qos: 2 + lambda: |- + if (id(some_binary_sensor).state) { + return LOCK_STATE_LOCKED; + } else { + return LOCK_STATE_UNLOCKED; + } + lock_action: + - logger.log: lock_action + unlock_action: + - logger.log: unlock_action + open_action: + - logger.log: open_action + +number: + - platform: template + name: "Template number" + state_topic: some/topic/number + qos: 2 + optimistic: true + min_value: 0 + max_value: 100 + step: 1 + +select: + - platform: template + name: "Template select" + state_topic: some/topic/select + qos: 2 + optimistic: true + options: + - one + - two + - three + initial_option: two + +sensor: + - platform: template + name: Template Sensor + id: template_sens + lambda: |- + if (id(some_binary_sensor).state) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + on_value: + - mqtt.publish: + topic: some/topic/sensor + payload: Hello + qos: 2 + retain: true + - platform: mqtt_subscribe + name: MQTT Subscribe Sensor + topic: mqtt/topic + id: the_sensor + qos: 2 + on_value: + - mqtt.publish_json: + topic: the/topic + payload: |- + root["key"] = id(template_sens).state; + root["greeting"] = "Hello World"; + +switch: + - platform: template + name: Template Switch + state_topic: some/topic/switch + qos: 2 + lambda: |- + if (id(some_binary_sensor).state) { + return true; + } else { + return false; + } + turn_on_action: + - logger.log: turn_on_action + turn_off_action: + - logger.log: turn_off_action + +text_sensor: + - platform: template + name: Template Text Sensor + id: tts_text + state_topic: some/topic/text_sensor + qos: 2 + - platform: mqtt_subscribe + name: MQTT Subscribe Text + topic: some/topic/text_sensor + qos: 2 + on_value: + - text_sensor.template.publish: + id: tts_text + state: Hello World + - text_sensor.template.publish: + id: tts_text + state: |- + return "Hello World2"; + +text: + - platform: template + name: Template Text + optimistic: true + min_length: 0 + max_length: 100 + mode: text + state_topic: some/topic/text + qos: 2 + +valve: + - platform: template + name: Template Valve + state_topic: some/topic/valve + qos: 2 + optimistic: true + lambda: |- + if (id(some_binary_sensor).state) { + return VALVE_OPEN; + } else { + return VALVE_CLOSED; + } diff --git a/tests/components/mqtt/test.bk72xx.yaml b/tests/components/mqtt/test.bk72xx.yaml new file mode 100644 index 0000000000..25cb37a0b4 --- /dev/null +++ b/tests/components/mqtt/test.bk72xx.yaml @@ -0,0 +1,2 @@ +packages: + common: !include common.yaml diff --git a/tests/components/mqtt/test.esp32-c3-idf.yaml b/tests/components/mqtt/test.esp32-c3-idf.yaml index 7702ed5610..25cb37a0b4 100644 --- a/tests/components/mqtt/test.esp32-c3-idf.yaml +++ b/tests/components/mqtt/test.esp32-c3-idf.yaml @@ -1,16 +1,2 @@ -wifi: - ssid: MySSID - password: password1 - -mqtt: - broker: test.mosquitto.org - port: 1883 - discovery: true - discovery_prefix: homeassistant - idf_send_async: false - log_topic: - on_message: - topic: testing/sensor/testing_sensor/state - qos: 0 - then: - - logger.log: Mqtt Test +packages: + common: !include common.yaml diff --git a/tests/components/mqtt/test.esp32-c3.yaml b/tests/components/mqtt/test.esp32-c3.yaml index 692d504d6d..25cb37a0b4 100644 --- a/tests/components/mqtt/test.esp32-c3.yaml +++ b/tests/components/mqtt/test.esp32-c3.yaml @@ -1,15 +1,2 @@ -wifi: - ssid: MySSID - password: password1 - -mqtt: - broker: test.mosquitto.org - port: 1883 - discovery: true - discovery_prefix: homeassistant - log_topic: - on_message: - topic: testing/sensor/testing_sensor/state - qos: 0 - then: - - logger.log: Mqtt Test +packages: + common: !include common.yaml diff --git a/tests/components/mqtt/test.esp32-idf.yaml b/tests/components/mqtt/test.esp32-idf.yaml index 7702ed5610..25cb37a0b4 100644 --- a/tests/components/mqtt/test.esp32-idf.yaml +++ b/tests/components/mqtt/test.esp32-idf.yaml @@ -1,16 +1,2 @@ -wifi: - ssid: MySSID - password: password1 - -mqtt: - broker: test.mosquitto.org - port: 1883 - discovery: true - discovery_prefix: homeassistant - idf_send_async: false - log_topic: - on_message: - topic: testing/sensor/testing_sensor/state - qos: 0 - then: - - logger.log: Mqtt Test +packages: + common: !include common.yaml diff --git a/tests/components/mqtt/test.esp32.yaml b/tests/components/mqtt/test.esp32.yaml index 692d504d6d..25cb37a0b4 100644 --- a/tests/components/mqtt/test.esp32.yaml +++ b/tests/components/mqtt/test.esp32.yaml @@ -1,15 +1,2 @@ -wifi: - ssid: MySSID - password: password1 - -mqtt: - broker: test.mosquitto.org - port: 1883 - discovery: true - discovery_prefix: homeassistant - log_topic: - on_message: - topic: testing/sensor/testing_sensor/state - qos: 0 - then: - - logger.log: Mqtt Test +packages: + common: !include common.yaml diff --git a/tests/components/mqtt/test.esp8266.yaml b/tests/components/mqtt/test.esp8266.yaml index 692d504d6d..25cb37a0b4 100644 --- a/tests/components/mqtt/test.esp8266.yaml +++ b/tests/components/mqtt/test.esp8266.yaml @@ -1,15 +1,2 @@ -wifi: - ssid: MySSID - password: password1 - -mqtt: - broker: test.mosquitto.org - port: 1883 - discovery: true - discovery_prefix: homeassistant - log_topic: - on_message: - topic: testing/sensor/testing_sensor/state - qos: 0 - then: - - logger.log: Mqtt Test +packages: + common: !include common.yaml From 5ddad2647605b28da208029e7959aa12701904bd Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 1 May 2024 14:17:11 -0500 Subject: [PATCH 116/313] Extend and consolidate `script` tests (#6663) --- tests/components/script/common.yaml | 55 +++++++++++++++++++ tests/components/script/test.bk72xx.yaml | 1 + .../components/script/test.esp32-c3-idf.yaml | 27 +-------- tests/components/script/test.esp32-c3.yaml | 27 +-------- tests/components/script/test.esp32-idf.yaml | 27 +-------- tests/components/script/test.esp32.yaml | 27 +-------- tests/components/script/test.esp8266.yaml | 27 +-------- tests/components/script/test.rp2040.yaml | 27 +-------- 8 files changed, 62 insertions(+), 156 deletions(-) create mode 100644 tests/components/script/common.yaml create mode 100644 tests/components/script/test.bk72xx.yaml diff --git a/tests/components/script/common.yaml b/tests/components/script/common.yaml new file mode 100644 index 0000000000..bfd5d0e7ff --- /dev/null +++ b/tests/components/script/common.yaml @@ -0,0 +1,55 @@ +esphome: + on_boot: + then: + - script.execute: my_script + - script.execute: + id: my_script_with_params + prefix: "Test" + param2: 0 + param3: true + - script.wait: my_script + - script.stop: my_script + - if: + condition: + - script.is_running: my_script + then: + - logger.log: my_script is running + +script: + - id: my_script + mode: single + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_queued + mode: queued + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_parallel + mode: parallel + max_runs: 2 + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_restart + mode: restart + then: + - lambda: 'ESP_LOGD("main", "Hello World!");' + - id: my_script_with_params + parameters: + prefix: string + param2: uint8_t + param3: bool + then: + - lambda: 'ESP_LOGD(prefix.c_str(), "Hello World! %u %u", param2, param3);' + - if: + condition: + for: + time: !lambda "return param2;" + condition: + script.is_running: my_script + then: + - lambda: 'ESP_LOGD("main", "API has stayed connected for at least %u minutes", param2);' + - repeat: + count: 5 + then: + - logger.log: looping! diff --git a/tests/components/script/test.bk72xx.yaml b/tests/components/script/test.bk72xx.yaml new file mode 100644 index 0000000000..dade44d145 --- /dev/null +++ b/tests/components/script/test.bk72xx.yaml @@ -0,0 +1 @@ +<<: !include common.yaml diff --git a/tests/components/script/test.esp32-c3-idf.yaml b/tests/components/script/test.esp32-c3-idf.yaml index 3872c690ff..dade44d145 100644 --- a/tests/components/script/test.esp32-c3-idf.yaml +++ b/tests/components/script/test.esp32-c3-idf.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' +<<: !include common.yaml diff --git a/tests/components/script/test.esp32-c3.yaml b/tests/components/script/test.esp32-c3.yaml index 3872c690ff..dade44d145 100644 --- a/tests/components/script/test.esp32-c3.yaml +++ b/tests/components/script/test.esp32-c3.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' +<<: !include common.yaml diff --git a/tests/components/script/test.esp32-idf.yaml b/tests/components/script/test.esp32-idf.yaml index 3872c690ff..dade44d145 100644 --- a/tests/components/script/test.esp32-idf.yaml +++ b/tests/components/script/test.esp32-idf.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' +<<: !include common.yaml diff --git a/tests/components/script/test.esp32.yaml b/tests/components/script/test.esp32.yaml index 3872c690ff..dade44d145 100644 --- a/tests/components/script/test.esp32.yaml +++ b/tests/components/script/test.esp32.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' +<<: !include common.yaml diff --git a/tests/components/script/test.esp8266.yaml b/tests/components/script/test.esp8266.yaml index ce0e40e7ee..dade44d145 100644 --- a/tests/components/script/test.esp8266.yaml +++ b/tests/components/script/test.esp8266.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD(prefix.c_str(), "Hello World! %i %i", param2, param3);' +<<: !include common.yaml diff --git a/tests/components/script/test.rp2040.yaml b/tests/components/script/test.rp2040.yaml index 3872c690ff..dade44d145 100644 --- a/tests/components/script/test.rp2040.yaml +++ b/tests/components/script/test.rp2040.yaml @@ -1,26 +1 @@ -script: - - id: my_script - mode: single - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_queued - mode: queued - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_parallel - mode: parallel - max_runs: 2 - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_restart - mode: restart - then: - - lambda: 'ESP_LOGD("main", "Hello World!");' - - id: my_script_with_params - parameters: - prefix: string - param2: int - param3: bool - then: - - lambda: 'ESP_LOGD("main", (prefix + " Hello World!" + to_string(param2) + " " + to_string(param3)).c_str());' +<<: !include common.yaml From a4a23d73b32b0b485ccfbd8209b787a6785d5dd9 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 2 May 2024 00:05:37 +0200 Subject: [PATCH 117/313] [nextion] Use persistent http connection for TFT upload (ESP-IDF) (#6576) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 2 +- esphome/components/nextion/display.py | 2 +- esphome/components/nextion/nextion.h | 37 +- .../components/nextion/nextion_upload_idf.cpp | 395 +++++++++--------- esphome/core/defines.h | 2 +- 5 files changed, 225 insertions(+), 213 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index a60a5c3099..d0e920fe1d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -242,7 +242,7 @@ esphome/components/mpl3115a2/* @kbickar esphome/components/mpu6886/* @fabaff esphome/components/ms8607/* @e28eta esphome/components/network/* @esphome/core -esphome/components/nextion/* @senexcrenshaw +esphome/components/nextion/* @edwardtfn @senexcrenshaw esphome/components/nextion/binary_sensor/* @senexcrenshaw esphome/components/nextion/sensor/* @senexcrenshaw esphome/components/nextion/switch/* @senexcrenshaw diff --git a/esphome/components/nextion/display.py b/esphome/components/nextion/display.py index 6487c12f36..ce45d25e7b 100644 --- a/esphome/components/nextion/display.py +++ b/esphome/components/nextion/display.py @@ -25,7 +25,7 @@ from .base_component import ( CONF_EXIT_REPARSE_ON_START, ) -CODEOWNERS = ["@senexcrenshaw"] +CODEOWNERS = ["@senexcrenshaw", "@edwardtfn"] DEPENDENCIES = ["uart"] AUTO_LOAD = ["binary_sensor", "switch", "sensor", "text_sensor"] diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index 7938af0ea5..6435e2b4e2 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -1013,7 +1013,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ bool upload_tft(uint32_t baud_rate = 0, bool exit_reparse = true); -#endif +#endif // USE_NEXTION_TFT_UPLOAD void dump_config() override; @@ -1142,6 +1142,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * Sends commands ignoring of the Nextion has been setup. */ bool ignore_is_setup_ = false; + bool nextion_reports_is_setup_ = false; uint8_t nextion_event_; @@ -1182,7 +1183,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe WiFiClient *wifi_client_{nullptr}; BearSSL::WiFiClientSecure *wifi_client_secure_{nullptr}; WiFiClient *get_wifi_client_(); -#endif +#endif // USE_ESP8266 std::string tft_url_; uint32_t content_length_ = 0; int tft_size_ = 0; @@ -1193,11 +1194,21 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe /** * will request chunk_size chunks from the web server * and send each to the nextion - * @param HTTPClient http HTTP client handler. + * @param HTTPClient http_client HTTP client handler. * @param int range_start Position of next byte to transfer. * @return position of last byte transferred, -1 for failure. */ int upload_by_chunks_(HTTPClient &http_client, uint32_t &range_start); +#elif defined(USE_ESP_IDF) + /** + * will request 4096 bytes chunks from the web server + * and send each to Nextion + * @param esp_http_client_handle_t http_client HTTP client handler. + * @param int range_start Position of next byte to transfer. + * @return position of last byte transferred, -1 for failure. + */ + int upload_by_chunks_(esp_http_client_handle_t http_client, uint32_t &range_start); +#endif // ARDUINO vs USE_ESP_IDF /** * Ends the upload process, restart Nextion and, if successful, @@ -1207,24 +1218,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ bool upload_end_(bool successful); -#elif defined(USE_ESP_IDF) - /** - * will request 4096 bytes chunks from the web server - * and send each to Nextion - * @param std::string url Full url for download. - * @param int range_start Position of next byte to transfer. - * @return position of last byte transferred, -1 for failure. - */ - int upload_range(const std::string &url, int range_start); - - /** - * Ends the upload process, restart Nextion and, if successful, - * restarts ESP - * @param bool url successful True: Transfer completed successfuly, False: Transfer failed. - * @return bool True: Transfer completed successfuly, False: Transfer failed. - */ - bool upload_end(bool successful); -#endif // ARDUINO vs USE_ESP_IDF /** * Returns the ESP Free Heap memory. This is framework independent. * @return Free Heap in bytes. @@ -1260,7 +1253,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe #ifdef NEXTION_PROTOCOL_LOG void print_queue_members_(); -#endif +#endif // NEXTION_PROTOCOL_LOG void reset_(bool reset_nextion = true); std::string command_data_; diff --git a/esphome/components/nextion/nextion_upload_idf.cpp b/esphome/components/nextion/nextion_upload_idf.cpp index 163b497d3b..448b6fc0ff 100644 --- a/esphome/components/nextion/nextion_upload_idf.cpp +++ b/esphome/components/nextion/nextion_upload_idf.cpp @@ -1,17 +1,16 @@ #include "nextion.h" -#ifdef USE_ESP_IDF #ifdef USE_NEXTION_TFT_UPLOAD +#ifdef USE_ESP_IDF #include "esphome/core/application.h" #include "esphome/core/defines.h" #include "esphome/core/util.h" #include "esphome/core/log.h" #include "esphome/components/network/util.h" - +#include #include #include -#include namespace esphome { namespace nextion { @@ -20,153 +19,147 @@ static const char *const TAG = "nextion.upload.idf"; // Followed guide // https://unofficialnextion.com/t/nextion-upload-protocol-v1-2-the-fast-one/1044/2 -int Nextion::upload_range(const std::string &url, int range_start) { - ESP_LOGVV(TAG, "url: %s", url.c_str()); - uint range_size = this->tft_size_ - range_start; - ESP_LOGVV(TAG, "tft_size_: %i", this->tft_size_); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - int range_end = (range_start == 0) ? std::min(this->tft_size_, 16383) : this->tft_size_; +int Nextion::upload_by_chunks_(esp_http_client_handle_t http_client, uint32_t &range_start) { + uint32_t range_size = this->tft_size_ - range_start; + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); + uint32_t range_end = ((upload_first_chunk_sent_ or this->tft_size_ < 4096) ? this->tft_size_ : 4096) - 1; + ESP_LOGD(TAG, "Range start: %" PRIu32, range_start); if (range_size <= 0 or range_end <= range_start) { + ESP_LOGD(TAG, "Range end: %" PRIu32, range_end); + ESP_LOGD(TAG, "Range size: %" PRIu32, range_size); ESP_LOGE(TAG, "Invalid range"); - ESP_LOGD(TAG, "Range start: %i", range_start); - ESP_LOGD(TAG, "Range end: %i", range_end); - ESP_LOGD(TAG, "Range size: %i", range_size); return -1; } - esp_http_client_config_t config = { - .url = url.c_str(), - .cert_pem = nullptr, - .disable_auto_redirect = false, - .max_redirection_count = 10, - }; - esp_http_client_handle_t client = esp_http_client_init(&config); - - char range_header[64]; - sprintf(range_header, "bytes=%d-%d", range_start, range_end); + char range_header[32]; + sprintf(range_header, "bytes=%" PRIu32 "-%" PRIu32, range_start, range_end); ESP_LOGV(TAG, "Requesting range: %s", range_header); - esp_http_client_set_header(client, "Range", range_header); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - - ESP_LOGV(TAG, "Opening http connetion"); + esp_http_client_set_header(http_client, "Range", range_header); + ESP_LOGV(TAG, "Opening HTTP connetion"); esp_err_t err; - if ((err = esp_http_client_open(client, 0)) != ESP_OK) { + if ((err = esp_http_client_open(http_client, 0)) != ESP_OK) { ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err)); - esp_http_client_cleanup(client); return -1; } ESP_LOGV(TAG, "Fetch content length"); - int content_length = esp_http_client_fetch_headers(client); - ESP_LOGV(TAG, "content_length = %d", content_length); - if (content_length <= 0) { - ESP_LOGE(TAG, "Failed to get content length: %d", content_length); - esp_http_client_cleanup(client); + const int chunk_size = esp_http_client_fetch_headers(http_client); + ESP_LOGV(TAG, "content_length = %d", chunk_size); + if (chunk_size <= 0) { + ESP_LOGE(TAG, "Failed to get chunk's content length: %d", chunk_size); return -1; } - int total_read_len = 0, read_len; - - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - ESP_LOGV(TAG, "Allocate buffer"); - uint8_t *buffer = new uint8_t[4096]; - std::string recv_string; - if (buffer == nullptr) { - ESP_LOGE(TAG, "Failed to allocate memory for buffer"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - } else { - ESP_LOGV(TAG, "Memory for buffer allocated successfully"); - - while (true) { - App.feed_wdt(); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - int read_len = esp_http_client_read(client, reinterpret_cast(buffer), 4096); - ESP_LOGVV(TAG, "Read %d bytes from HTTP client, writing to UART", read_len); - if (read_len > 0) { - this->write_array(buffer, read_len); - ESP_LOGVV(TAG, "Write to UART successful"); - this->recv_ret_string_(recv_string, 5000, true); - this->content_length_ -= read_len; - ESP_LOGD(TAG, "Uploaded %0.2f %%, remaining %d bytes, heap is %" PRIu32 " bytes", - 100.0 * (this->tft_size_ - this->content_length_) / this->tft_size_, this->content_length_, - esp_get_free_heap_size()); - - if (recv_string[0] == 0x08 && recv_string.size() == 5) { // handle partial upload request - ESP_LOGD( - TAG, "recv_string [%s]", - format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); - uint32_t result = 0; - for (int j = 0; j < 4; ++j) { - result += static_cast(recv_string[j + 1]) << (8 * j); - } - if (result > 0) { - ESP_LOGI(TAG, "Nextion reported new range %" PRIu32, result); - this->content_length_ = this->tft_size_ - result; - // Deallocate the buffer when done - ESP_LOGV(TAG, "Deallocate buffer"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - delete[] buffer; - ESP_LOGVV(TAG, "Memory for buffer deallocated"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - ESP_LOGV(TAG, "Close http client"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_close(client); - esp_http_client_cleanup(client); - ESP_LOGVV(TAG, "Client closed"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - return result; - } - } else if (recv_string[0] != 0x05) { // 0x05 == "ok" - ESP_LOGE( - TAG, "Invalid response from Nextion: [%s]", - format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); - ESP_LOGV(TAG, "Deallocate buffer"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - delete[] buffer; - ESP_LOGVV(TAG, "Memory for buffer deallocated"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - ESP_LOGV(TAG, "Close http client"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_close(client); - esp_http_client_cleanup(client); - ESP_LOGVV(TAG, "Client closed"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - return -1; - } - - recv_string.clear(); - } else if (read_len == 0) { - ESP_LOGV(TAG, "End of HTTP response reached"); - break; // Exit the loop if there is no more data to read - } else { - ESP_LOGE(TAG, "Failed to read from HTTP client, error code: %d", read_len); - break; // Exit the loop on error - } - } - - // Deallocate the buffer when done - ESP_LOGV(TAG, "Deallocate buffer"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - delete[] buffer; - ESP_LOGVV(TAG, "Memory for buffer deallocated"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + // Allocate the buffer dynamically + ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); + uint8_t *buffer = allocator.allocate(4096); + if (!buffer) { + ESP_LOGE(TAG, "Failed to allocate upload buffer"); + return -1; } - ESP_LOGV(TAG, "Close http client"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_close(client); - esp_http_client_cleanup(client); - ESP_LOGVV(TAG, "Client closed"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + + std::string recv_string; + while (true) { + App.feed_wdt(); + const uint16_t buffer_size = + this->content_length_ < 4096 ? this->content_length_ : 4096; // Limits buffer to the remaining data + ESP_LOGV(TAG, "Fetching %" PRIu16 " bytes from HTTP", buffer_size); + uint16_t read_len = 0; + int partial_read_len = 0; + uint8_t retries = 0; + // Attempt to read the chunk with retries. + while (retries < 5 && read_len < buffer_size) { + partial_read_len = + esp_http_client_read(http_client, reinterpret_cast(buffer) + read_len, buffer_size - read_len); + if (partial_read_len > 0) { + read_len += partial_read_len; // Accumulate the total read length. + // Reset retries on successful read. + retries = 0; + } else { + // If no data was read, increment retries. + retries++; + vTaskDelay(pdMS_TO_TICKS(2)); // NOLINT + } + App.feed_wdt(); // Feed the watchdog timer. + } + if (read_len != buffer_size) { + // Did not receive the full package within the timeout period + ESP_LOGE(TAG, "Failed to read full package, received only %" PRIu16 " of %" PRIu16 " bytes", read_len, + buffer_size); + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return -1; + } + ESP_LOGV(TAG, "%d bytes fetched, writing it to UART", read_len); + if (read_len > 0) { + recv_string.clear(); + this->write_array(buffer, buffer_size); + App.feed_wdt(); + this->recv_ret_string_(recv_string, upload_first_chunk_sent_ ? 500 : 5000, true); + this->content_length_ -= read_len; + const float upload_percentage = 100.0f * (this->tft_size_ - this->content_length_) / this->tft_size_; +#ifdef USE_PSRAM + ESP_LOGD( + TAG, + "Uploaded %0.2f%%, remaining %" PRIu32 " bytes, free heap: %" PRIu32 " (DRAM) + %" PRIu32 " (PSRAM) bytes", + upload_percentage, this->content_length_, static_cast(heap_caps_get_free_size(MALLOC_CAP_INTERNAL)), + static_cast(heap_caps_get_free_size(MALLOC_CAP_SPIRAM))); +#else + ESP_LOGD(TAG, "Uploaded %0.2f%%, remaining %" PRIu32 " bytes, free heap: %" PRIu32 " bytes", upload_percentage, + this->content_length_, static_cast(esp_get_free_heap_size())); +#endif + upload_first_chunk_sent_ = true; + if (recv_string[0] == 0x08 && recv_string.size() == 5) { // handle partial upload request + ESP_LOGD(TAG, "recv_string [%s]", + format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); + uint32_t result = 0; + for (int j = 0; j < 4; ++j) { + result += static_cast(recv_string[j + 1]) << (8 * j); + } + if (result > 0) { + ESP_LOGI(TAG, "Nextion reported new range %" PRIu32, result); + this->content_length_ = this->tft_size_ - result; + range_start = result; + } else { + range_start = range_end + 1; + } + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return range_end + 1; + } else if (recv_string[0] != 0x05 and recv_string[0] != 0x08) { // 0x05 == "ok" + ESP_LOGE(TAG, "Invalid response from Nextion: [%s]", + format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; + return -1; + } + + recv_string.clear(); + } else if (read_len == 0) { + ESP_LOGV(TAG, "End of HTTP response reached"); + break; // Exit the loop if there is no more data to read + } else { + ESP_LOGE(TAG, "Failed to read from HTTP client, error code: %" PRIu16, read_len); + break; // Exit the loop on error + } + } + range_start = range_end + 1; + // Deallocate buffer + allocator.deallocate(buffer, 4096); + buffer = nullptr; return range_end + 1; } bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { ESP_LOGD(TAG, "Nextion TFT upload requested"); ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse)); - ESP_LOGD(TAG, "url: %s", this->tft_url_.c_str()); + ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str()); if (this->is_updating_) { - ESP_LOGW(TAG, "Currently updating"); + ESP_LOGW(TAG, "Currently uploading"); return false; } @@ -195,8 +188,8 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { ESP_LOGD(TAG, "Baud rate: %" PRIu32, baud_rate); // Define the configuration for the HTTP client - ESP_LOGV(TAG, "Establishing connection to HTTP server"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + ESP_LOGV(TAG, "Initializing HTTP client"); + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); esp_http_client_config_t config = { .url = this->tft_url_.c_str(), .cert_pem = nullptr, @@ -205,58 +198,62 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { .disable_auto_redirect = false, .max_redirection_count = 10, }; - // Initialize the HTTP client with the configuration - ESP_LOGV(TAG, "Initializing HTTP client"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_handle_t http = esp_http_client_init(&config); - if (!http) { + esp_http_client_handle_t http_client = esp_http_client_init(&config); + if (!http_client) { ESP_LOGE(TAG, "Failed to initialize HTTP client."); - return this->upload_end(false); + return this->upload_end_(false); + } + + esp_err_t err = esp_http_client_set_header(http_client, "Connection", "keep-alive"); + if (err != ESP_OK) { + ESP_LOGE(TAG, "HTTP set header failed: %s", esp_err_to_name(err)); + esp_http_client_cleanup(http_client); + return this->upload_end_(false); } // Perform the HTTP request ESP_LOGV(TAG, "Check if the client could connect"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_err_t err = esp_http_client_perform(http); + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); + err = esp_http_client_perform(http_client); if (err != ESP_OK) { ESP_LOGE(TAG, "HTTP request failed: %s", esp_err_to_name(err)); - esp_http_client_cleanup(http); - return this->upload_end(false); + esp_http_client_cleanup(http_client); + return this->upload_end_(false); } // Check the HTTP Status Code ESP_LOGV(TAG, "Check the HTTP Status Code"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - int status_code = esp_http_client_get_status_code(http); - ESP_LOGV(TAG, "HTTP Status Code: %d", status_code); - size_t tft_file_size = esp_http_client_get_content_length(http); - ESP_LOGD(TAG, "TFT file size: %zu", tft_file_size); + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); + int status_code = esp_http_client_get_status_code(http_client); + if (status_code != 200 && status_code != 206) { + return this->upload_end_(false); + } - ESP_LOGD(TAG, "Close HTTP connection"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_close(http); - esp_http_client_cleanup(http); - ESP_LOGVV(TAG, "Connection closed"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + this->tft_size_ = esp_http_client_get_content_length(http_client); - if (tft_file_size < 4096) { - ESP_LOGE(TAG, "File size check failed. Size: %zu", tft_file_size); - return this->upload_end(false); + ESP_LOGD(TAG, "TFT file size: %zu bytes", this->tft_size_); + if (this->tft_size_ < 4096 || this->tft_size_ > 134217728) { + ESP_LOGE(TAG, "File size check failed."); + ESP_LOGD(TAG, "Close HTTP connection"); + esp_http_client_close(http_client); + esp_http_client_cleanup(http_client); + ESP_LOGV(TAG, "Connection closed"); + return this->upload_end_(false); } else { ESP_LOGV(TAG, "File size check passed. Proceeding..."); } - this->content_length_ = tft_file_size; - this->tft_size_ = tft_file_size; + this->content_length_ = this->tft_size_; - ESP_LOGD(TAG, "Updating Nextion"); + ESP_LOGD(TAG, "Uploading Nextion"); - // The Nextion will ignore the update command if it is sleeping + // The Nextion will ignore the upload command if it is sleeping ESP_LOGV(TAG, "Wake-up Nextion"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + this->ignore_is_setup_ = true; this->send_command_("sleep=0"); - this->set_backlight_brightness(1.0); + this->send_command_("dim=100"); vTaskDelay(pdMS_TO_TICKS(250)); // NOLINT + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); App.feed_wdt(); char command[128]; @@ -267,14 +264,11 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { // Clear serial receive buffer ESP_LOGV(TAG, "Clear serial receive buffer"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - uint8_t d; - while (this->available()) { - this->read_byte(&d); - }; + this->reset_(false); + vTaskDelay(pdMS_TO_TICKS(250)); // NOLINT + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); - ESP_LOGV(TAG, "Send update instruction: %s", command); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + ESP_LOGV(TAG, "Send upload instruction: %s", command); this->send_command_(command); if (baud_rate != this->original_baud_rate_) { @@ -288,41 +282,66 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { this->recv_ret_string_(response, 5000, true); // This can take some time to return // The Nextion display will, if it's ready to accept data, send a 0x05 byte. - ESP_LOGD(TAG, "Upgrade response is [%s] - %zu bytes", + ESP_LOGD(TAG, "Upgrade response is [%s] - %zu byte(s)", format_hex_pretty(reinterpret_cast(response.data()), response.size()).c_str(), response.length()); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); + ESP_LOGV(TAG, "Free heap: %" PRIu32, esp_get_free_heap_size()); if (response.find(0x05) != std::string::npos) { - ESP_LOGV(TAG, "Preparation for tft update done"); + ESP_LOGV(TAG, "Preparation for TFT upload done"); } else { - ESP_LOGE(TAG, "Preparation for tft update failed %d \"%s\"", response[0], response.c_str()); - return this->upload_end(false); + ESP_LOGE(TAG, "Preparation for TFT upload failed %d \"%s\"", response[0], response.c_str()); + ESP_LOGD(TAG, "Close HTTP connection"); + esp_http_client_close(http_client); + esp_http_client_cleanup(http_client); + ESP_LOGV(TAG, "Connection closed"); + return this->upload_end_(false); } - ESP_LOGD(TAG, "Updating tft from \"%s\" with a file size of %d, Heap Size %" PRIu32, this->tft_url_.c_str(), - content_length_, esp_get_free_heap_size()); + ESP_LOGV(TAG, "Change the method to GET before starting the download"); + esp_err_t set_method_result = esp_http_client_set_method(http_client, HTTP_METHOD_GET); + if (set_method_result != ESP_OK) { + ESP_LOGE(TAG, "Failed to set HTTP method to GET: %s", esp_err_to_name(set_method_result)); + return this->upload_end_(false); + } + + ESP_LOGD(TAG, "Uploading TFT to Nextion:"); + ESP_LOGD(TAG, " URL: %s", this->tft_url_.c_str()); + ESP_LOGD(TAG, " File size: %" PRIu32 " bytes", this->content_length_); + ESP_LOGD(TAG, " Free heap: %" PRIu32, esp_get_free_heap_size()); + + // Proceed with the content download as before ESP_LOGV(TAG, "Starting transfer by chunks loop"); - ESP_LOGVV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - int result = 0; - while (content_length_ > 0) { - result = upload_range(this->tft_url_.c_str(), result); - if (result < 0) { - ESP_LOGE(TAG, "Error updating Nextion!"); - return this->upload_end(false); + + uint32_t position = 0; + while (this->content_length_ > 0) { + int upload_result = upload_by_chunks_(http_client, position); + if (upload_result < 0) { + ESP_LOGE(TAG, "Error uploading TFT to Nextion!"); + ESP_LOGD(TAG, "Close HTTP connection"); + esp_http_client_close(http_client); + esp_http_client_cleanup(http_client); + ESP_LOGV(TAG, "Connection closed"); + return this->upload_end_(false); } App.feed_wdt(); - ESP_LOGV(TAG, "Heap Size %" PRIu32 ", Bytes left %d", esp_get_free_heap_size(), content_length_); + ESP_LOGV(TAG, "Free heap: %" PRIu32 ", Bytes left: %" PRIu32, esp_get_free_heap_size(), this->content_length_); } - ESP_LOGD(TAG, "Successfully updated Nextion!"); + ESP_LOGD(TAG, "Successfully uploaded TFT to Nextion!"); - return upload_end(true); + ESP_LOGD(TAG, "Close HTTP connection"); + esp_http_client_close(http_client); + esp_http_client_cleanup(http_client); + ESP_LOGV(TAG, "Connection closed"); + return this->upload_end_(true); } -bool Nextion::upload_end(bool successful) { +bool Nextion::upload_end_(bool successful) { + ESP_LOGD(TAG, "Nextion TFT upload finished: %s", YESNO(successful)); this->is_updating_ = false; + this->ignore_is_setup_ = false; uint32_t baud_rate = this->parent_->get_baud_rate(); if (baud_rate != this->original_baud_rate_) { @@ -331,12 +350,12 @@ bool Nextion::upload_end(bool successful) { this->parent_->load_settings(); } - ESP_LOGD(TAG, "Restarting Nextion"); - this->soft_reset(); - vTaskDelay(pdMS_TO_TICKS(1500)); // NOLINT if (successful) { ESP_LOGD(TAG, "Restarting ESPHome"); - esp_restart(); // NOLINT(readability-static-accessed-through-instance) + delay(1500); // NOLINT + arch_restart(); + } else { + ESP_LOGE(TAG, "Nextion TFT upload failed"); } return successful; } @@ -344,5 +363,5 @@ bool Nextion::upload_end(bool successful) { } // namespace nextion } // namespace esphome -#endif // USE_NEXTION_TFT_UPLOAD #endif // USE_ESP_IDF +#endif // USE_NEXTION_TFT_UPLOAD diff --git a/esphome/core/defines.h b/esphome/core/defines.h index 619a956071..b09373bcde 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -35,6 +35,7 @@ #define USE_MDNS #define USE_MEDIA_PLAYER #define USE_MQTT +#define USE_NEXTION_TFT_UPLOAD #define USE_NUMBER #define USE_DATETIME #define USE_DATETIME_DATE @@ -64,7 +65,6 @@ // Arduino-specific feature flags #ifdef USE_ARDUINO #define USE_CAPTIVE_PORTAL -#define USE_NEXTION_TFT_UPLOAD #define USE_PROMETHEUS #define USE_WEBSERVER #define USE_WEBSERVER_PORT 80 // NOLINT From 539c369eea0c07a89d0b0fbc877d3b14fe17fbdc Mon Sep 17 00:00:00 2001 From: tronikos Date: Wed, 1 May 2024 17:39:15 -0700 Subject: [PATCH 118/313] Add a function to return the loop_interval (#6666) --- esphome/core/application.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/core/application.h b/esphome/core/application.h index 7487780412..c4c745b687 100644 --- a/esphome/core/application.h +++ b/esphome/core/application.h @@ -222,6 +222,8 @@ class Application { */ void set_loop_interval(uint32_t loop_interval) { this->loop_interval_ = loop_interval; } + uint32_t get_loop_interval() const { return this->loop_interval_; } + void schedule_dump_config() { this->dump_config_at_ = 0; } void feed_wdt(); From 1b9a30e921f129f5c9aa3dd1032387722a7babc9 Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Thu, 2 May 2024 01:21:57 +0000 Subject: [PATCH 119/313] Remote receiver improvements (#4642) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../components/remote_base/remote_base.cpp | 6 +- esphome/components/remote_base/remote_base.h | 45 +++++++++-- .../components/remote_receiver/__init__.py | 75 +++++++++++++++++-- .../remote_receiver/remote_receiver.h | 6 +- .../remote_receiver/remote_receiver_esp32.cpp | 16 ++-- .../remote_receiver_esp8266.cpp | 3 +- .../remote_receiver_libretiny.cpp | 3 +- 7 files changed, 125 insertions(+), 29 deletions(-) diff --git a/esphome/components/remote_base/remote_base.cpp b/esphome/components/remote_base/remote_base.cpp index 0e9cef8cca..fdfd0b43cc 100644 --- a/esphome/components/remote_base/remote_base.cpp +++ b/esphome/components/remote_base/remote_base.cpp @@ -108,18 +108,18 @@ void RemoteReceiverBase::register_dumper(RemoteReceiverDumperBase *dumper) { void RemoteReceiverBase::call_listeners_() { for (auto *listener : this->listeners_) - listener->on_receive(RemoteReceiveData(this->temp_, this->tolerance_)); + listener->on_receive(RemoteReceiveData(this->temp_, this->tolerance_, this->tolerance_mode_)); } void RemoteReceiverBase::call_dumpers_() { bool success = false; for (auto *dumper : this->dumpers_) { - if (dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_))) + if (dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_, this->tolerance_mode_))) success = true; } if (!success) { for (auto *dumper : this->secondary_dumpers_) - dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_)); + dumper->dump(RemoteReceiveData(this->temp_, this->tolerance_, this->tolerance_mode_)); } } diff --git a/esphome/components/remote_base/remote_base.h b/esphome/components/remote_base/remote_base.h index b2a4b543ea..c31127735a 100644 --- a/esphome/components/remote_base/remote_base.h +++ b/esphome/components/remote_base/remote_base.h @@ -15,6 +15,11 @@ namespace esphome { namespace remote_base { +enum ToleranceMode : uint8_t { + TOLERANCE_MODE_PERCENTAGE = 0, + TOLERANCE_MODE_TIME = 1, +}; + using RawTimings = std::vector; class RemoteTransmitData { @@ -42,8 +47,8 @@ class RemoteTransmitData { class RemoteReceiveData { public: - explicit RemoteReceiveData(const RawTimings &data, uint8_t tolerance) - : data_(data), index_(0), tolerance_(tolerance) {} + explicit RemoteReceiveData(const RawTimings &data, uint32_t tolerance, ToleranceMode tolerance_mode) + : data_(data), index_(0), tolerance_(tolerance), tolerance_mode_(tolerance_mode) {} const RawTimings &get_raw_data() const { return this->data_; } uint32_t get_index() const { return index_; } @@ -65,13 +70,35 @@ class RemoteReceiveData { void advance(uint32_t amount = 1) { this->index_ += amount; } void reset() { this->index_ = 0; } + void set_tolerance(uint32_t tolerance, ToleranceMode tolerance_mode) { + this->tolerance_ = tolerance; + this->tolerance_mode_ = tolerance_mode; + } + uint32_t get_tolerance() { return tolerance_; } + ToleranceMode get_tolerance_mode() { return this->tolerance_mode_; } + protected: - int32_t lower_bound_(uint32_t length) const { return int32_t(100 - this->tolerance_) * length / 100U; } - int32_t upper_bound_(uint32_t length) const { return int32_t(100 + this->tolerance_) * length / 100U; } + int32_t lower_bound_(uint32_t length) const { + if (this->tolerance_mode_ == TOLERANCE_MODE_TIME) { + return int32_t(length - this->tolerance_); + } else if (this->tolerance_mode_ == TOLERANCE_MODE_PERCENTAGE) { + return int32_t(100 - this->tolerance_) * length / 100U; + } + return 0; + } + int32_t upper_bound_(uint32_t length) const { + if (this->tolerance_mode_ == TOLERANCE_MODE_TIME) { + return int32_t(length + this->tolerance_); + } else if (this->tolerance_mode_ == TOLERANCE_MODE_PERCENTAGE) { + return int32_t(100 + this->tolerance_) * length / 100U; + } + return 0; + } const RawTimings &data_; uint32_t index_; - uint8_t tolerance_; + uint32_t tolerance_; + ToleranceMode tolerance_mode_; }; class RemoteComponentBase { @@ -162,7 +189,10 @@ class RemoteReceiverBase : public RemoteComponentBase { RemoteReceiverBase(InternalGPIOPin *pin) : RemoteComponentBase(pin) {} void register_listener(RemoteReceiverListener *listener) { this->listeners_.push_back(listener); } void register_dumper(RemoteReceiverDumperBase *dumper); - void set_tolerance(uint8_t tolerance) { tolerance_ = tolerance; } + void set_tolerance(uint32_t tolerance, ToleranceMode tolerance_mode) { + this->tolerance_ = tolerance; + this->tolerance_mode_ = tolerance_mode; + } protected: void call_listeners_(); @@ -176,7 +206,8 @@ class RemoteReceiverBase : public RemoteComponentBase { std::vector dumpers_; std::vector secondary_dumpers_; RawTimings temp_; - uint8_t tolerance_; + uint32_t tolerance_{25}; + ToleranceMode tolerance_mode_{TOLERANCE_MODE_PERCENTAGE}; }; class RemoteReceiverBinarySensorBase : public binary_sensor::BinarySensorInitiallyOff, diff --git a/esphome/components/remote_receiver/__init__.py b/esphome/components/remote_receiver/__init__.py index 6a68c8b254..6fe20153f4 100644 --- a/esphome/components/remote_receiver/__init__.py +++ b/esphome/components/remote_receiver/__init__.py @@ -10,17 +10,69 @@ from esphome.const import ( CONF_IDLE, CONF_PIN, CONF_TOLERANCE, + CONF_TYPE, CONF_MEMORY_BLOCKS, CONF_RMT_CHANNEL, + CONF_VALUE, ) from esphome.core import CORE, TimePeriod +CONF_CLOCK_DIVIDER = "clock_divider" + AUTO_LOAD = ["remote_base"] remote_receiver_ns = cg.esphome_ns.namespace("remote_receiver") +remote_base_ns = cg.esphome_ns.namespace("remote_base") + +ToleranceMode = remote_base_ns.enum("ToleranceMode") + +TYPE_PERCENTAGE = "percentage" +TYPE_TIME = "time" + +TOLERANCE_MODE = { + TYPE_PERCENTAGE: ToleranceMode.TOLERANCE_MODE_PERCENTAGE, + TYPE_TIME: ToleranceMode.TOLERANCE_MODE_TIME, +} + +TOLERANCE_SCHEMA = cv.typed_schema( + { + TYPE_PERCENTAGE: cv.Schema( + {cv.Required(CONF_VALUE): cv.All(cv.percentage_int, cv.uint32_t)} + ), + TYPE_TIME: cv.Schema( + { + cv.Required(CONF_VALUE): cv.All( + cv.positive_time_period_microseconds, + cv.Range(max=TimePeriod(microseconds=4294967295)), + ) + } + ), + }, + lower=True, + enum=TOLERANCE_MODE, +) + RemoteReceiverComponent = remote_receiver_ns.class_( "RemoteReceiverComponent", remote_base.RemoteReceiverBase, cg.Component ) + +def validate_tolerance(value): + if isinstance(value, dict): + return TOLERANCE_SCHEMA(value) + + if "%" in str(value): + type_ = TYPE_PERCENTAGE + else: + type_ = TYPE_TIME + + return TOLERANCE_SCHEMA( + { + CONF_VALUE: value, + CONF_TYPE: type_, + } + ) + + MULTI_CONF = True CONFIG_SCHEMA = remote_base.validate_triggers( cv.Schema( @@ -28,9 +80,7 @@ CONFIG_SCHEMA = remote_base.validate_triggers( cv.GenerateID(): cv.declare_id(RemoteReceiverComponent), cv.Required(CONF_PIN): cv.All(pins.internal_gpio_input_pin_schema), cv.Optional(CONF_DUMP, default=[]): remote_base.validate_dumpers, - cv.Optional(CONF_TOLERANCE, default=25): cv.All( - cv.percentage_int, cv.Range(min=0) - ), + cv.Optional(CONF_TOLERANCE, default="25%"): validate_tolerance, cv.SplitDefault( CONF_BUFFER_SIZE, esp32="10000b", @@ -40,11 +90,15 @@ CONFIG_SCHEMA = remote_base.validate_triggers( ): cv.validate_bytes, cv.Optional(CONF_FILTER, default="50us"): cv.All( cv.positive_time_period_microseconds, - cv.Range(max=TimePeriod(microseconds=255)), + cv.Range(max=TimePeriod(microseconds=4294967295)), + ), + cv.SplitDefault(CONF_CLOCK_DIVIDER, esp32=80): cv.All( + cv.only_on_esp32, cv.Range(min=1, max=255) + ), + cv.Optional(CONF_IDLE, default="10ms"): cv.All( + cv.positive_time_period_microseconds, + cv.Range(max=TimePeriod(microseconds=4294967295)), ), - cv.Optional( - CONF_IDLE, default="10ms" - ): cv.positive_time_period_microseconds, cv.Optional(CONF_MEMORY_BLOCKS, default=3): cv.Range(min=1, max=8), cv.Optional(CONF_RMT_CHANNEL): esp32_rmt.validate_rmt_channel(tx=False), } @@ -61,6 +115,7 @@ async def to_code(config): ) else: var = cg.new_Pvariable(config[CONF_ID], pin, config[CONF_MEMORY_BLOCKS]) + cg.add(var.set_clock_divider(config[CONF_CLOCK_DIVIDER])) else: var = cg.new_Pvariable(config[CONF_ID], pin) @@ -73,7 +128,11 @@ async def to_code(config): cg.add(var.register_listener(trigger)) await cg.register_component(var, config) - cg.add(var.set_tolerance(config[CONF_TOLERANCE])) + cg.add( + var.set_tolerance( + config[CONF_TOLERANCE][CONF_VALUE], config[CONF_TOLERANCE][CONF_TYPE] + ) + ) cg.add(var.set_buffer_size(config[CONF_BUFFER_SIZE])) cg.add(var.set_filter_us(config[CONF_FILTER])) cg.add(var.set_idle_us(config[CONF_IDLE])) diff --git a/esphome/components/remote_receiver/remote_receiver.h b/esphome/components/remote_receiver/remote_receiver.h index f29145a59e..a1db671e5c 100644 --- a/esphome/components/remote_receiver/remote_receiver.h +++ b/esphome/components/remote_receiver/remote_receiver.h @@ -22,7 +22,7 @@ struct RemoteReceiverComponentStore { uint32_t buffer_read_at{0}; bool overflow{false}; uint32_t buffer_size{1000}; - uint8_t filter_us{10}; + uint32_t filter_us{10}; ISRInternalGPIOPin pin; }; #endif @@ -50,7 +50,7 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase, float get_setup_priority() const override { return setup_priority::DATA; } void set_buffer_size(uint32_t buffer_size) { this->buffer_size_ = buffer_size; } - void set_filter_us(uint8_t filter_us) { this->filter_us_ = filter_us; } + void set_filter_us(uint32_t filter_us) { this->filter_us_ = filter_us; } void set_idle_us(uint32_t idle_us) { this->idle_us_ = idle_us; } protected: @@ -66,7 +66,7 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase, #endif uint32_t buffer_size_{}; - uint8_t filter_us_{10}; + uint32_t filter_us_{10}; uint32_t idle_us_{10000}; }; diff --git a/esphome/components/remote_receiver/remote_receiver_esp32.cpp b/esphome/components/remote_receiver/remote_receiver_esp32.cpp index d19ab695e1..c0bfb0222f 100644 --- a/esphome/components/remote_receiver/remote_receiver_esp32.cpp +++ b/esphome/components/remote_receiver/remote_receiver_esp32.cpp @@ -20,9 +20,11 @@ void RemoteReceiverComponent::setup() { rmt.rx_config.filter_en = false; } else { rmt.rx_config.filter_en = true; - rmt.rx_config.filter_ticks_thresh = this->from_microseconds_(this->filter_us_); + rmt.rx_config.filter_ticks_thresh = static_cast( + std::min(this->from_microseconds_(this->filter_us_) * this->clock_divider_, (uint32_t) 255)); } - rmt.rx_config.idle_threshold = this->from_microseconds_(this->idle_us_); + rmt.rx_config.idle_threshold = + static_cast(std::min(this->from_microseconds_(this->idle_us_), (uint32_t) 65535)); esp_err_t error = rmt_config(&rmt); if (error != ESP_OK) { @@ -60,8 +62,9 @@ void RemoteReceiverComponent::dump_config() { ESP_LOGCONFIG(TAG, " Channel: %d", this->channel_); ESP_LOGCONFIG(TAG, " RMT memory blocks: %d", this->mem_block_num_); ESP_LOGCONFIG(TAG, " Clock divider: %u", this->clock_divider_); - ESP_LOGCONFIG(TAG, " Tolerance: %u%%", this->tolerance_); - ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %u us", this->filter_us_); + ESP_LOGCONFIG(TAG, " Tolerance: %" PRIu32 "%s", this->tolerance_, + (this->tolerance_mode_ == remote_base::TOLERANCE_MODE_TIME) ? " us" : "%"); + ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %" PRIu32 " us", this->filter_us_); ESP_LOGCONFIG(TAG, " Signal is done after %" PRIu32 " us of no changes", this->idle_us_); if (this->is_failed()) { ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); @@ -88,6 +91,7 @@ void RemoteReceiverComponent::decode_rmt_(rmt_item32_t *item, size_t len) { this->temp_.clear(); int32_t multiplier = this->pin_->is_inverted() ? -1 : 1; size_t item_count = len / sizeof(rmt_item32_t); + uint32_t filter_ticks = this->from_microseconds_(this->filter_us_); ESP_LOGVV(TAG, "START:"); for (size_t i = 0; i < item_count; i++) { @@ -112,7 +116,7 @@ void RemoteReceiverComponent::decode_rmt_(rmt_item32_t *item, size_t len) { for (size_t i = 0; i < item_count; i++) { if (item[i].duration0 == 0u) { // Do nothing - } else if (bool(item[i].level0) == prev_level) { + } else if ((bool(item[i].level0) == prev_level) || (item[i].duration0 < filter_ticks)) { prev_length += item[i].duration0; } else { if (prev_length > 0) { @@ -128,7 +132,7 @@ void RemoteReceiverComponent::decode_rmt_(rmt_item32_t *item, size_t len) { if (item[i].duration1 == 0u) { // Do nothing - } else if (bool(item[i].level1) == prev_level) { + } else if ((bool(item[i].level1) == prev_level) || (item[i].duration1 < filter_ticks)) { prev_length += item[i].duration1; } else { if (prev_length > 0) { diff --git a/esphome/components/remote_receiver/remote_receiver_esp8266.cpp b/esphome/components/remote_receiver/remote_receiver_esp8266.cpp index 8700fcf0bb..c92a134bd8 100644 --- a/esphome/components/remote_receiver/remote_receiver_esp8266.cpp +++ b/esphome/components/remote_receiver/remote_receiver_esp8266.cpp @@ -64,7 +64,8 @@ void RemoteReceiverComponent::dump_config() { "invert the signal using 'inverted: True' in the pin schema!"); } ESP_LOGCONFIG(TAG, " Buffer Size: %u", this->buffer_size_); - ESP_LOGCONFIG(TAG, " Tolerance: %u%%", this->tolerance_); + ESP_LOGCONFIG(TAG, " Tolerance: %u%s", this->tolerance_, + (this->tolerance_mode_ == remote_base::TOLERANCE_MODE_TIME) ? " us" : "%"); ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %u us", this->filter_us_); ESP_LOGCONFIG(TAG, " Signal is done after %u us of no changes", this->idle_us_); } diff --git a/esphome/components/remote_receiver/remote_receiver_libretiny.cpp b/esphome/components/remote_receiver/remote_receiver_libretiny.cpp index ac85b6b520..bfc29b4211 100644 --- a/esphome/components/remote_receiver/remote_receiver_libretiny.cpp +++ b/esphome/components/remote_receiver/remote_receiver_libretiny.cpp @@ -64,7 +64,8 @@ void RemoteReceiverComponent::dump_config() { "invert the signal using 'inverted: True' in the pin schema!"); } ESP_LOGCONFIG(TAG, " Buffer Size: %u", this->buffer_size_); - ESP_LOGCONFIG(TAG, " Tolerance: %u%%", this->tolerance_); + ESP_LOGCONFIG(TAG, " Tolerance: %u%s", this->tolerance_, + (this->tolerance_mode_ == remote_base::TOLERANCE_MODE_TIME) ? " us" : "%"); ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %u us", this->filter_us_); ESP_LOGCONFIG(TAG, " Signal is done after %u us of no changes", this->idle_us_); } From bc65e6e914ea29da8bbb02ca5f5f3d948823dbd7 Mon Sep 17 00:00:00 2001 From: tronikos Date: Wed, 1 May 2024 18:24:18 -0700 Subject: [PATCH 120/313] Make fast update intervals in qmc5883l work (#6647) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/qmc5883l/qmc5883l.cpp | 5 +++++ esphome/components/qmc5883l/qmc5883l.h | 1 + 2 files changed, 6 insertions(+) diff --git a/esphome/components/qmc5883l/qmc5883l.cpp b/esphome/components/qmc5883l/qmc5883l.cpp index 8541b41ff7..49a67d4e09 100644 --- a/esphome/components/qmc5883l/qmc5883l.cpp +++ b/esphome/components/qmc5883l/qmc5883l.cpp @@ -1,4 +1,5 @@ #include "qmc5883l.h" +#include "esphome/core/application.h" #include "esphome/core/log.h" #include "esphome/core/hal.h" #include @@ -59,6 +60,10 @@ void QMC5883LComponent::setup() { this->mark_failed(); return; } + + if (this->get_update_interval() < App.get_loop_interval()) { + high_freq_.start(); + } } void QMC5883LComponent::dump_config() { ESP_LOGCONFIG(TAG, "QMC5883L:"); diff --git a/esphome/components/qmc5883l/qmc5883l.h b/esphome/components/qmc5883l/qmc5883l.h index b0c0af40d2..dd2008d453 100644 --- a/esphome/components/qmc5883l/qmc5883l.h +++ b/esphome/components/qmc5883l/qmc5883l.h @@ -56,6 +56,7 @@ class QMC5883LComponent : public PollingComponent, public i2c::I2CDevice { COMMUNICATION_FAILED, } error_code_; bool read_byte_16_(uint8_t a_register, uint16_t *data); + HighFrequencyLoopRequester high_freq_; }; } // namespace qmc5883l From c7c0d97a5ecbaa235636ba9e527f8c9ff7b4c4b0 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Thu, 2 May 2024 03:49:01 +0200 Subject: [PATCH 121/313] SPI and I2C for BMP390 and BMP380 (#6652) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 5 +- esphome/components/bmp3xx/sensor.py | 105 +----------------- esphome/components/bmp3xx_base/__init__.py | 95 ++++++++++++++++ .../bmp3xx_base.cpp} | 7 +- .../bmp3xx.h => bmp3xx_base/bmp3xx_base.h} | 15 ++- esphome/components/bmp3xx_i2c/__init__.py | 0 esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp | 29 +++++ esphome/components/bmp3xx_i2c/bmp3xx_i2c.h | 17 +++ esphome/components/bmp3xx_i2c/sensor.py | 22 ++++ esphome/components/bmp3xx_spi/__init__.py | 0 esphome/components/bmp3xx_spi/bmp3xx_spi.cpp | 57 ++++++++++ esphome/components/bmp3xx_spi/bmp3xx_spi.h | 19 ++++ esphome/components/bmp3xx_spi/sensor.py | 22 ++++ .../components/bmp3xx/test.esp32-c3-idf.yaml | 14 --- tests/components/bmp3xx/test.esp32-c3.yaml | 14 --- tests/components/bmp3xx/test.esp32.yaml | 14 --- tests/components/bmp3xx/test.esp8266.yaml | 14 --- tests/components/bmp3xx/test.rp2040.yaml | 14 --- .../common.yaml} | 7 +- .../bmp3xx_i2c/test.esp32-c3-idf.yaml | 5 + .../components/bmp3xx_i2c/test.esp32-c3.yaml | 5 + .../components/bmp3xx_i2c/test.esp32-idf.yaml | 5 + tests/components/bmp3xx_i2c/test.esp32.yaml | 5 + tests/components/bmp3xx_i2c/test.esp8266.yaml | 5 + tests/components/bmp3xx_i2c/test.rp2040.yaml | 5 + tests/components/bmp3xx_spi/common.yaml | 16 +++ .../bmp3xx_spi/test.esp32-c3-idf.yaml | 7 ++ .../components/bmp3xx_spi/test.esp32-c3.yaml | 7 ++ .../components/bmp3xx_spi/test.esp32-idf.yaml | 7 ++ tests/components/bmp3xx_spi/test.esp32.yaml | 7 ++ tests/components/bmp3xx_spi/test.esp8266.yaml | 7 ++ tests/components/bmp3xx_spi/test.rp2040.yaml | 7 ++ tests/test11.5.yaml | 9 -- tests/test5.yaml | 9 -- 34 files changed, 375 insertions(+), 201 deletions(-) create mode 100644 esphome/components/bmp3xx_base/__init__.py rename esphome/components/{bmp3xx/bmp3xx.cpp => bmp3xx_base/bmp3xx_base.cpp} (99%) rename esphome/components/{bmp3xx/bmp3xx.h => bmp3xx_base/bmp3xx_base.h} (94%) create mode 100644 esphome/components/bmp3xx_i2c/__init__.py create mode 100644 esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp create mode 100644 esphome/components/bmp3xx_i2c/bmp3xx_i2c.h create mode 100644 esphome/components/bmp3xx_i2c/sensor.py create mode 100644 esphome/components/bmp3xx_spi/__init__.py create mode 100644 esphome/components/bmp3xx_spi/bmp3xx_spi.cpp create mode 100644 esphome/components/bmp3xx_spi/bmp3xx_spi.h create mode 100644 esphome/components/bmp3xx_spi/sensor.py delete mode 100644 tests/components/bmp3xx/test.esp32-c3-idf.yaml delete mode 100644 tests/components/bmp3xx/test.esp32-c3.yaml delete mode 100644 tests/components/bmp3xx/test.esp32.yaml delete mode 100644 tests/components/bmp3xx/test.esp8266.yaml delete mode 100644 tests/components/bmp3xx/test.rp2040.yaml rename tests/components/{bmp3xx/test.esp32-idf.yaml => bmp3xx_i2c/common.yaml} (66%) create mode 100644 tests/components/bmp3xx_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/bmp3xx_i2c/test.esp32-c3.yaml create mode 100644 tests/components/bmp3xx_i2c/test.esp32-idf.yaml create mode 100644 tests/components/bmp3xx_i2c/test.esp32.yaml create mode 100644 tests/components/bmp3xx_i2c/test.esp8266.yaml create mode 100644 tests/components/bmp3xx_i2c/test.rp2040.yaml create mode 100644 tests/components/bmp3xx_spi/common.yaml create mode 100644 tests/components/bmp3xx_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/bmp3xx_spi/test.esp32-c3.yaml create mode 100644 tests/components/bmp3xx_spi/test.esp32-idf.yaml create mode 100644 tests/components/bmp3xx_spi/test.esp32.yaml create mode 100644 tests/components/bmp3xx_spi/test.esp8266.yaml create mode 100644 tests/components/bmp3xx_spi/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index d0e920fe1d..c630db7948 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -63,7 +63,10 @@ esphome/components/bme280_base/* @esphome/core esphome/components/bme280_spi/* @apbodrov esphome/components/bme680_bsec/* @trvrnrth esphome/components/bmi160/* @flaviut -esphome/components/bmp3xx/* @martgras +esphome/components/bmp3xx/* @latonita +esphome/components/bmp3xx_base/* @latonita @martgras +esphome/components/bmp3xx_i2c/* @latonita +esphome/components/bmp3xx_spi/* @latonita esphome/components/bmp581/* @kahrendt esphome/components/bp1658cj/* @Cossid esphome/components/bp5758d/* @Cossid diff --git a/esphome/components/bmp3xx/sensor.py b/esphome/components/bmp3xx/sensor.py index 6f90173c7b..89753768c3 100644 --- a/esphome/components/bmp3xx/sensor.py +++ b/esphome/components/bmp3xx/sensor.py @@ -1,102 +1,7 @@ -import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import i2c, sensor -from esphome.const import ( - CONF_ID, - CONF_IIR_FILTER, - CONF_OVERSAMPLING, - CONF_PRESSURE, - CONF_TEMPERATURE, - DEVICE_CLASS_PRESSURE, - DEVICE_CLASS_TEMPERATURE, - STATE_CLASS_MEASUREMENT, - UNIT_CELSIUS, - UNIT_HECTOPASCAL, + +CODEOWNERS = ["@latonita"] + +CONFIG_SCHEMA = CONFIG_SCHEMA = cv.invalid( + "The bmp3xx sensor component has been renamed to bmp3xx_i2c." ) - -CODEOWNERS = ["@martgras"] -DEPENDENCIES = ["i2c"] - -bmp3xx_ns = cg.esphome_ns.namespace("bmp3xx") -Oversampling = bmp3xx_ns.enum("Oversampling") -OVERSAMPLING_OPTIONS = { - "NONE": Oversampling.OVERSAMPLING_NONE, - "2X": Oversampling.OVERSAMPLING_X2, - "4X": Oversampling.OVERSAMPLING_X4, - "8X": Oversampling.OVERSAMPLING_X8, - "16X": Oversampling.OVERSAMPLING_X16, - "32X": Oversampling.OVERSAMPLING_X32, -} - -IIRFilter = bmp3xx_ns.enum("IIRFilter") -IIR_FILTER_OPTIONS = { - "OFF": IIRFilter.IIR_FILTER_OFF, - "2X": IIRFilter.IIR_FILTER_2, - "4X": IIRFilter.IIR_FILTER_4, - "8X": IIRFilter.IIR_FILTER_8, - "16X": IIRFilter.IIR_FILTER_16, - "32X": IIRFilter.IIR_FILTER_32, - "64X": IIRFilter.IIR_FILTER_64, - "128X": IIRFilter.IIR_FILTER_128, -} - -BMP3XXComponent = bmp3xx_ns.class_( - "BMP3XXComponent", cg.PollingComponent, i2c.I2CDevice -) - -CONFIG_SCHEMA = ( - cv.Schema( - { - cv.GenerateID(): cv.declare_id(BMP3XXComponent), - cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema( - unit_of_measurement=UNIT_CELSIUS, - accuracy_decimals=1, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - ).extend( - { - cv.Optional(CONF_OVERSAMPLING, default="2X"): cv.enum( - OVERSAMPLING_OPTIONS, upper=True - ), - } - ), - cv.Optional(CONF_PRESSURE): sensor.sensor_schema( - unit_of_measurement=UNIT_HECTOPASCAL, - accuracy_decimals=1, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - ).extend( - { - cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( - OVERSAMPLING_OPTIONS, upper=True - ), - } - ), - cv.Optional(CONF_IIR_FILTER, default="OFF"): cv.enum( - IIR_FILTER_OPTIONS, upper=True - ), - } - ) - .extend(cv.polling_component_schema("60s")) - .extend(i2c.i2c_device_schema(0x77)) -) - - -async def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) - await cg.register_component(var, config) - await i2c.register_i2c_device(var, config) - cg.add(var.set_iir_filter_config(config[CONF_IIR_FILTER])) - if temperature_config := config.get(CONF_TEMPERATURE): - sens = await sensor.new_sensor(temperature_config) - cg.add(var.set_temperature_sensor(sens)) - cg.add( - var.set_temperature_oversampling_config( - temperature_config[CONF_OVERSAMPLING] - ) - ) - - if pressure_config := config.get(CONF_PRESSURE): - sens = await sensor.new_sensor(pressure_config) - cg.add(var.set_pressure_sensor(sens)) - cg.add(var.set_pressure_oversampling_config(pressure_config[CONF_OVERSAMPLING])) diff --git a/esphome/components/bmp3xx_base/__init__.py b/esphome/components/bmp3xx_base/__init__.py new file mode 100644 index 0000000000..589d170907 --- /dev/null +++ b/esphome/components/bmp3xx_base/__init__.py @@ -0,0 +1,95 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + CONF_ID, + CONF_IIR_FILTER, + CONF_OVERSAMPLING, + CONF_PRESSURE, + CONF_TEMPERATURE, + DEVICE_CLASS_PRESSURE, + DEVICE_CLASS_TEMPERATURE, + STATE_CLASS_MEASUREMENT, + UNIT_CELSIUS, + UNIT_HECTOPASCAL, +) + +CODEOWNERS = ["@martgras", "@latonita"] + +bmp3xx_ns = cg.esphome_ns.namespace("bmp3xx_base") +Oversampling = bmp3xx_ns.enum("Oversampling") +OVERSAMPLING_OPTIONS = { + "NONE": Oversampling.OVERSAMPLING_NONE, + "2X": Oversampling.OVERSAMPLING_X2, + "4X": Oversampling.OVERSAMPLING_X4, + "8X": Oversampling.OVERSAMPLING_X8, + "16X": Oversampling.OVERSAMPLING_X16, + "32X": Oversampling.OVERSAMPLING_X32, +} + +IIRFilter = bmp3xx_ns.enum("IIRFilter") +IIR_FILTER_OPTIONS = { + "OFF": IIRFilter.IIR_FILTER_OFF, + "2X": IIRFilter.IIR_FILTER_2, + "4X": IIRFilter.IIR_FILTER_4, + "8X": IIRFilter.IIR_FILTER_8, + "16X": IIRFilter.IIR_FILTER_16, + "32X": IIRFilter.IIR_FILTER_32, + "64X": IIRFilter.IIR_FILTER_64, + "128X": IIRFilter.IIR_FILTER_128, +} + + +CONFIG_SCHEMA_BASE = cv.Schema( + { + cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema( + unit_of_measurement=UNIT_CELSIUS, + accuracy_decimals=1, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + ).extend( + { + cv.Optional(CONF_OVERSAMPLING, default="2X"): cv.enum( + OVERSAMPLING_OPTIONS, upper=True + ), + } + ), + cv.Optional(CONF_PRESSURE): sensor.sensor_schema( + unit_of_measurement=UNIT_HECTOPASCAL, + accuracy_decimals=1, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + ).extend( + { + cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( + OVERSAMPLING_OPTIONS, upper=True + ), + } + ), + cv.Optional(CONF_IIR_FILTER, default="OFF"): cv.enum( + IIR_FILTER_OPTIONS, upper=True + ), + } +).extend(cv.polling_component_schema("60s")) + + +async def to_code_base(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + + cg.add(var.set_iir_filter_config(config[CONF_IIR_FILTER])) + if temperature_config := config.get(CONF_TEMPERATURE): + sens = await sensor.new_sensor(temperature_config) + cg.add(var.set_temperature_sensor(sens)) + cg.add( + var.set_temperature_oversampling_config( + temperature_config[CONF_OVERSAMPLING] + ) + ) + + if pressure_config := config.get(CONF_PRESSURE): + sens = await sensor.new_sensor(pressure_config) + cg.add(var.set_pressure_sensor(sens)) + cg.add(var.set_pressure_oversampling_config(pressure_config[CONF_OVERSAMPLING])) + + return var diff --git a/esphome/components/bmp3xx/bmp3xx.cpp b/esphome/components/bmp3xx_base/bmp3xx_base.cpp similarity index 99% rename from esphome/components/bmp3xx/bmp3xx.cpp rename to esphome/components/bmp3xx_base/bmp3xx_base.cpp index de28fd76ff..75b6812f81 100644 --- a/esphome/components/bmp3xx/bmp3xx.cpp +++ b/esphome/components/bmp3xx_base/bmp3xx_base.cpp @@ -5,13 +5,13 @@ http://github.com/MartinL1/BMP388_DEV */ -#include "bmp3xx.h" +#include "bmp3xx_base.h" #include "esphome/core/log.h" #include "esphome/core/hal.h" #include namespace esphome { -namespace bmp3xx { +namespace bmp3xx_base { static const char *const TAG = "bmp3xx.sensor"; @@ -150,7 +150,6 @@ void BMP3XXComponent::setup() { void BMP3XXComponent::dump_config() { ESP_LOGCONFIG(TAG, "BMP3XX:"); ESP_LOGCONFIG(TAG, " Type: %s (0x%X)", LOG_STR_ARG(chip_type_to_str(this->chip_id_.reg)), this->chip_id_.reg); - LOG_I2C_DEVICE(this); switch (this->error_code_) { case NONE: break; @@ -386,5 +385,5 @@ float BMP3XXComponent::bmp388_compensate_pressure_(float uncomp_press, float t_l return partial_out1 + partial_out2 + partial_data4; } -} // namespace bmp3xx +} // namespace bmp3xx_base } // namespace esphome diff --git a/esphome/components/bmp3xx/bmp3xx.h b/esphome/components/bmp3xx_base/bmp3xx_base.h similarity index 94% rename from esphome/components/bmp3xx/bmp3xx.h rename to esphome/components/bmp3xx_base/bmp3xx_base.h index d3b15f601d..50f92e04c1 100644 --- a/esphome/components/bmp3xx/bmp3xx.h +++ b/esphome/components/bmp3xx_base/bmp3xx_base.h @@ -9,10 +9,9 @@ #include "esphome/core/component.h" #include "esphome/components/sensor/sensor.h" -#include "esphome/components/i2c/i2c.h" namespace esphome { -namespace bmp3xx { +namespace bmp3xx_base { static const uint8_t BMP388_ID = 0x50; // The BMP388 device ID static const uint8_t BMP390_ID = 0x60; // The BMP390 device ID @@ -69,8 +68,8 @@ enum IIRFilter { IIR_FILTER_128 = 0x07 }; -/// This class implements support for the BMP3XX Temperature+Pressure i2c sensor. -class BMP3XXComponent : public PollingComponent, public i2c::I2CDevice { +/// This class implements support for the BMP3XX Temperature+Pressure sensor. +class BMP3XXComponent : public PollingComponent { public: void setup() override; void dump_config() override; @@ -231,7 +230,13 @@ class BMP3XXComponent : public PollingComponent, public i2c::I2CDevice { float bmp388_compensate_temperature_(float uncomp_temp); // Bosch pressure compensation function float bmp388_compensate_pressure_(float uncomp_press, float t_lin); + + // interface specific functions + virtual bool read_byte(uint8_t a_register, uint8_t *data) = 0; + virtual bool write_byte(uint8_t a_register, uint8_t data) = 0; + virtual bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) = 0; + virtual bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) = 0; }; -} // namespace bmp3xx +} // namespace bmp3xx_base } // namespace esphome diff --git a/esphome/components/bmp3xx_i2c/__init__.py b/esphome/components/bmp3xx_i2c/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp b/esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp new file mode 100644 index 0000000000..7531090185 --- /dev/null +++ b/esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp @@ -0,0 +1,29 @@ +#include "esphome/components/i2c/i2c.h" +#include "bmp3xx_i2c.h" +#include + +namespace esphome { +namespace bmp3xx_i2c { + +static const char *const TAG = "bmp3xx_i2c.sensor"; + +bool BMP3XXI2CComponent::read_byte(uint8_t a_register, uint8_t *data) { + return I2CDevice::read_byte(a_register, data); +}; +bool BMP3XXI2CComponent::write_byte(uint8_t a_register, uint8_t data) { + return I2CDevice::write_byte(a_register, data); +}; +bool BMP3XXI2CComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) { + return I2CDevice::read_bytes(a_register, data, len); +}; +bool BMP3XXI2CComponent::write_bytes(uint8_t a_register, uint8_t *data, size_t len) { + return I2CDevice::write_bytes(a_register, data, len); +}; + +void BMP3XXI2CComponent::dump_config() { + LOG_I2C_DEVICE(this); + BMP3XXComponent::dump_config(); +} + +} // namespace bmp3xx_i2c +} // namespace esphome diff --git a/esphome/components/bmp3xx_i2c/bmp3xx_i2c.h b/esphome/components/bmp3xx_i2c/bmp3xx_i2c.h new file mode 100644 index 0000000000..d8b95cf843 --- /dev/null +++ b/esphome/components/bmp3xx_i2c/bmp3xx_i2c.h @@ -0,0 +1,17 @@ +#pragma once +#include "esphome/components/i2c/i2c.h" +#include "esphome/components/bmp3xx_base/bmp3xx_base.h" + +namespace esphome { +namespace bmp3xx_i2c { + +class BMP3XXI2CComponent : public bmp3xx_base::BMP3XXComponent, public i2c::I2CDevice { + bool read_byte(uint8_t a_register, uint8_t *data) override; + bool write_byte(uint8_t a_register, uint8_t data) override; + bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) override; + bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) override; + void dump_config() override; +}; + +} // namespace bmp3xx_i2c +} // namespace esphome diff --git a/esphome/components/bmp3xx_i2c/sensor.py b/esphome/components/bmp3xx_i2c/sensor.py new file mode 100644 index 0000000000..ae59d29e89 --- /dev/null +++ b/esphome/components/bmp3xx_i2c/sensor.py @@ -0,0 +1,22 @@ +import esphome.codegen as cg +from esphome.components import i2c +from ..bmp3xx_base import to_code_base, cv, CONFIG_SCHEMA_BASE + +AUTO_LOAD = ["bmp3xx_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["i2c"] + +bmp3xx_ns = cg.esphome_ns.namespace("bmp3xx_i2c") + +BMP3XXI2CComponent = bmp3xx_ns.class_( + "BMP3XXI2CComponent", cg.PollingComponent, i2c.I2CDevice +) + +CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend( + i2c.i2c_device_schema(default_address=0x77) +).extend({cv.GenerateID(): cv.declare_id(BMP3XXI2CComponent)}) + + +async def to_code(config): + var = await to_code_base(config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/bmp3xx_spi/__init__.py b/esphome/components/bmp3xx_spi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/bmp3xx_spi/bmp3xx_spi.cpp b/esphome/components/bmp3xx_spi/bmp3xx_spi.cpp new file mode 100644 index 0000000000..2084530125 --- /dev/null +++ b/esphome/components/bmp3xx_spi/bmp3xx_spi.cpp @@ -0,0 +1,57 @@ +#include "bmp3xx_spi.h" +#include + +namespace esphome { +namespace bmp3xx_spi { + +static const char *const TAG = "bmp3xx_spi.sensor"; + +uint8_t set_bit(uint8_t num, int position) { + int mask = 1 << position; + return num | mask; +} + +uint8_t clear_bit(uint8_t num, int position) { + int mask = 1 << position; + return num & ~mask; +} + +void BMP3XXSPIComponent::setup() { + this->spi_setup(); + BMP3XXComponent::setup(); +} + +bool BMP3XXSPIComponent::read_byte(uint8_t a_register, uint8_t *data) { + this->enable(); + this->transfer_byte(set_bit(a_register, 7)); + *data = this->transfer_byte(0); + this->disable(); + return true; +} + +bool BMP3XXSPIComponent::write_byte(uint8_t a_register, uint8_t data) { + this->enable(); + this->transfer_byte(clear_bit(a_register, 7)); + this->transfer_byte(data); + this->disable(); + return true; +} + +bool BMP3XXSPIComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) { + this->enable(); + this->transfer_byte(set_bit(a_register, 7)); + this->read_array(data, len); + this->disable(); + return true; +} + +bool BMP3XXSPIComponent::write_bytes(uint8_t a_register, uint8_t *data, size_t len) { + this->enable(); + this->transfer_byte(clear_bit(a_register, 7)); + this->transfer_array(data, len); + this->disable(); + return true; +} + +} // namespace bmp3xx_spi +} // namespace esphome diff --git a/esphome/components/bmp3xx_spi/bmp3xx_spi.h b/esphome/components/bmp3xx_spi/bmp3xx_spi.h new file mode 100644 index 0000000000..2183994abe --- /dev/null +++ b/esphome/components/bmp3xx_spi/bmp3xx_spi.h @@ -0,0 +1,19 @@ +#pragma once +#include "esphome/components/bmp3xx_base/bmp3xx_base.h" +#include "esphome/components/spi/spi.h" + +namespace esphome { +namespace bmp3xx_spi { + +class BMP3XXSPIComponent : public bmp3xx_base::BMP3XXComponent, + public spi::SPIDevice { + void setup() override; + bool read_byte(uint8_t a_register, uint8_t *data) override; + bool write_byte(uint8_t a_register, uint8_t data) override; + bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) override; + bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) override; +}; + +} // namespace bmp3xx_spi +} // namespace esphome diff --git a/esphome/components/bmp3xx_spi/sensor.py b/esphome/components/bmp3xx_spi/sensor.py new file mode 100644 index 0000000000..3d1acd3c1b --- /dev/null +++ b/esphome/components/bmp3xx_spi/sensor.py @@ -0,0 +1,22 @@ +import esphome.codegen as cg +from esphome.components import spi +from ..bmp3xx_base import to_code_base, cv, CONFIG_SCHEMA_BASE + +AUTO_LOAD = ["bmp3xx_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["spi"] + +bmp3xx_ns = cg.esphome_ns.namespace("bmp3xx_spi") + +BMP3XXSPIComponent = bmp3xx_ns.class_( + "BMP3XXSPIComponent", cg.PollingComponent, spi.SPIDevice +) + +CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend(spi.spi_device_schema()).extend( + {cv.GenerateID(): cv.declare_id(BMP3XXSPIComponent)} +) + + +async def to_code(config): + var = await to_code_base(config) + await spi.register_spi_device(var, config) diff --git a/tests/components/bmp3xx/test.esp32-c3-idf.yaml b/tests/components/bmp3xx/test.esp32-c3-idf.yaml deleted file mode 100644 index 3b244eccf9..0000000000 --- a/tests/components/bmp3xx/test.esp32-c3-idf.yaml +++ /dev/null @@ -1,14 +0,0 @@ -i2c: - - id: i2c_bmp3xx - scl: 5 - sda: 4 - -sensor: - - platform: bmp3xx - address: 0x77 - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - iir_filter: 2X diff --git a/tests/components/bmp3xx/test.esp32-c3.yaml b/tests/components/bmp3xx/test.esp32-c3.yaml deleted file mode 100644 index 3b244eccf9..0000000000 --- a/tests/components/bmp3xx/test.esp32-c3.yaml +++ /dev/null @@ -1,14 +0,0 @@ -i2c: - - id: i2c_bmp3xx - scl: 5 - sda: 4 - -sensor: - - platform: bmp3xx - address: 0x77 - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - iir_filter: 2X diff --git a/tests/components/bmp3xx/test.esp32.yaml b/tests/components/bmp3xx/test.esp32.yaml deleted file mode 100644 index 677ed8a22d..0000000000 --- a/tests/components/bmp3xx/test.esp32.yaml +++ /dev/null @@ -1,14 +0,0 @@ -i2c: - - id: i2c_bmp3xx - scl: 16 - sda: 17 - -sensor: - - platform: bmp3xx - address: 0x77 - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - iir_filter: 2X diff --git a/tests/components/bmp3xx/test.esp8266.yaml b/tests/components/bmp3xx/test.esp8266.yaml deleted file mode 100644 index 3b244eccf9..0000000000 --- a/tests/components/bmp3xx/test.esp8266.yaml +++ /dev/null @@ -1,14 +0,0 @@ -i2c: - - id: i2c_bmp3xx - scl: 5 - sda: 4 - -sensor: - - platform: bmp3xx - address: 0x77 - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - iir_filter: 2X diff --git a/tests/components/bmp3xx/test.rp2040.yaml b/tests/components/bmp3xx/test.rp2040.yaml deleted file mode 100644 index 3b244eccf9..0000000000 --- a/tests/components/bmp3xx/test.rp2040.yaml +++ /dev/null @@ -1,14 +0,0 @@ -i2c: - - id: i2c_bmp3xx - scl: 5 - sda: 4 - -sensor: - - platform: bmp3xx - address: 0x77 - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - iir_filter: 2X diff --git a/tests/components/bmp3xx/test.esp32-idf.yaml b/tests/components/bmp3xx_i2c/common.yaml similarity index 66% rename from tests/components/bmp3xx/test.esp32-idf.yaml rename to tests/components/bmp3xx_i2c/common.yaml index 677ed8a22d..6641b7a1b8 100644 --- a/tests/components/bmp3xx/test.esp32-idf.yaml +++ b/tests/components/bmp3xx_i2c/common.yaml @@ -1,10 +1,11 @@ i2c: - id: i2c_bmp3xx - scl: 16 - sda: 17 + scl: ${scl_pin} + sda: ${sda_pin} sensor: - - platform: bmp3xx + - platform: bmp3xx_i2c + i2c_id: i2c_bmp3xx address: 0x77 temperature: name: BMP Temperature diff --git a/tests/components/bmp3xx_i2c/test.esp32-c3-idf.yaml b/tests/components/bmp3xx_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_i2c/test.esp32-c3.yaml b/tests/components/bmp3xx_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.esp32-c3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_i2c/test.esp32-idf.yaml b/tests/components/bmp3xx_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_i2c/test.esp32.yaml b/tests/components/bmp3xx_i2c/test.esp32.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_i2c/test.esp8266.yaml b/tests/components/bmp3xx_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.esp8266.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_i2c/test.rp2040.yaml b/tests/components/bmp3xx_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/bmp3xx_i2c/test.rp2040.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/common.yaml b/tests/components/bmp3xx_spi/common.yaml new file mode 100644 index 0000000000..8d5f897661 --- /dev/null +++ b/tests/components/bmp3xx_spi/common.yaml @@ -0,0 +1,16 @@ +spi: + - id: spi_bmp3xx + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +sensor: + - platform: bmp3xx_spi + spi_id: spi_bmp3xx + cs_pin: ${cs_pin} + temperature: + name: BMP Temperature + oversampling: 16x + pressure: + name: BMP Pressure + iir_filter: 2X diff --git a/tests/components/bmp3xx_spi/test.esp32-c3-idf.yaml b/tests/components/bmp3xx_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/bmp3xx_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/test.esp32-c3.yaml b/tests/components/bmp3xx_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/bmp3xx_spi/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/test.esp32-idf.yaml b/tests/components/bmp3xx_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/bmp3xx_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/test.esp32.yaml b/tests/components/bmp3xx_spi/test.esp32.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/bmp3xx_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/test.esp8266.yaml b/tests/components/bmp3xx_spi/test.esp8266.yaml new file mode 100644 index 0000000000..dbd158d030 --- /dev/null +++ b/tests/components/bmp3xx_spi/test.esp8266.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO14 + mosi_pin: GPIO13 + miso_pin: GPIO12 + cs_pin: GPIO15 + +<<: !include common.yaml diff --git a/tests/components/bmp3xx_spi/test.rp2040.yaml b/tests/components/bmp3xx_spi/test.rp2040.yaml new file mode 100644 index 0000000000..f6c3f1eeca --- /dev/null +++ b/tests/components/bmp3xx_spi/test.rp2040.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO2 + mosi_pin: GPIO3 + miso_pin: GPIO4 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/test11.5.yaml b/tests/test11.5.yaml index ef260d79c0..13de7f1929 100644 --- a/tests/test11.5.yaml +++ b/tests/test11.5.yaml @@ -498,15 +498,6 @@ sensor: co2: name: CO2 Sensor - - platform: bmp3xx - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - address: 0x77 - iir_filter: 2X - - platform: sen5x id: sen54 temperature: diff --git a/tests/test5.yaml b/tests/test5.yaml index 81615b24b0..afd3359098 100644 --- a/tests/test5.yaml +++ b/tests/test5.yaml @@ -474,15 +474,6 @@ sensor: co2: name: CO2 Sensor - - platform: bmp3xx - temperature: - name: BMP Temperature - oversampling: 16x - pressure: - name: BMP Pressure - address: 0x77 - iir_filter: 2X - - platform: ms8607 temperature: name: Temperature From ccbf5148aac29dade376483084bf7c092f613e35 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Sun, 5 May 2024 17:32:47 +1200 Subject: [PATCH 122/313] Set "CONF_" CI counter to fail on 3 or more definitions (#6668) --- esphome/components/ade7880/sensor.py | 2 +- esphome/components/ade7953_base/__init__.py | 2 +- esphome/components/at581x/__init__.py | 1 - esphome/components/bl0940/sensor.py | 2 +- esphome/components/bme680_bsec/__init__.py | 3 +-- esphome/components/cs5460a/sensor.py | 2 +- esphome/components/daikin_brc/climate.py | 3 +-- .../components/dfrobot_sen0395/__init__.py | 4 +--- esphome/components/emc2101/sensor/__init__.py | 2 +- esphome/components/ens160/sensor.py | 2 +- esphome/components/esp32_ble/__init__.py | 3 +-- esphome/components/esp32_camera/__init__.py | 2 +- .../graphical_display_menu/__init__.py | 3 +-- esphome/components/haier/climate.py | 4 ++-- esphome/components/haier/sensor/__init__.py | 2 +- esphome/components/hmc5883l/sensor.py | 2 +- esphome/components/inkplate6/display.py | 2 +- esphome/components/kmeteriso/sensor.py | 2 +- esphome/components/ld2410/binary_sensor.py | 6 +++--- esphome/components/ld2410/button/__init__.py | 4 ++-- .../ld2420/binary_sensor/__init__.py | 3 +-- esphome/components/ld2420/button/__init__.py | 2 +- esphome/components/mcp3008/sensor/__init__.py | 2 +- esphome/components/mcp3204/__init__.py | 3 +-- esphome/components/midea/climate.py | 2 +- esphome/components/midea_ir/climate.py | 3 +-- esphome/components/mmc5603/sensor.py | 3 +-- esphome/components/pn532/__init__.py | 9 ++++++-- esphome/components/pn7150/__init__.py | 4 ++-- esphome/components/pn7160/__init__.py | 4 ++-- esphome/components/power_supply/__init__.py | 10 ++++++--- esphome/components/qmc5883l/sensor.py | 3 +-- esphome/components/resistance/sensor.py | 2 +- esphome/components/rpi_dpi_rgb/display.py | 4 ++-- esphome/components/scd30/sensor.py | 2 +- esphome/components/scd4x/sensor.py | 2 +- esphome/components/script/__init__.py | 3 +-- .../seeed_mr24hpc1/binary_sensor.py | 2 +- .../seeed_mr24hpc1/button/__init__.py | 2 +- .../seeed_mr24hpc1/number/__init__.py | 2 +- esphome/components/sgp30/sensor.py | 2 +- esphome/components/sgp4x/sensor.py | 2 +- esphome/components/sim800l/__init__.py | 2 +- esphome/components/sn74hc595/__init__.py | 2 +- esphome/components/st7701s/display.py | 4 ++-- esphome/components/tlc5947/__init__.py | 2 +- esphome/components/touchscreen/__init__.py | 2 +- esphome/components/whynter/climate.py | 3 +-- esphome/components/wifi/__init__.py | 2 +- esphome/components/wireguard/__init__.py | 2 ++ esphome/components/wireguard/binary_sensor.py | 3 +-- esphome/components/wireguard/sensor.py | 3 +-- esphome/components/wireguard/text_sensor.py | 4 +--- esphome/const.py | 21 +++++++++++++++++++ script/ci-custom.py | 2 +- 55 files changed, 95 insertions(+), 81 deletions(-) diff --git a/esphome/components/ade7880/sensor.py b/esphome/components/ade7880/sensor.py index 42a2b0d3fc..e075adb04c 100644 --- a/esphome/components/ade7880/sensor.py +++ b/esphome/components/ade7880/sensor.py @@ -19,6 +19,7 @@ from esphome.const import ( CONF_RESET_PIN, CONF_REVERSE_ACTIVE_ENERGY, CONF_VOLTAGE, + CONF_VOLTAGE_GAIN, DEVICE_CLASS_APPARENT_POWER, DEVICE_CLASS_CURRENT, DEVICE_CLASS_ENERGY, @@ -47,7 +48,6 @@ CONF_CURRENT_GAIN = "current_gain" CONF_IRQ0_PIN = "irq0_pin" CONF_IRQ1_PIN = "irq1_pin" CONF_POWER_GAIN = "power_gain" -CONF_VOLTAGE_GAIN = "voltage_gain" CONF_NEUTRAL = "neutral" diff --git a/esphome/components/ade7953_base/__init__.py b/esphome/components/ade7953_base/__init__.py index 28014ef142..af3f629ca8 100644 --- a/esphome/components/ade7953_base/__init__.py +++ b/esphome/components/ade7953_base/__init__.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_IRQ_PIN, CONF_VOLTAGE, CONF_FREQUENCY, + CONF_VOLTAGE_GAIN, DEVICE_CLASS_CURRENT, DEVICE_CLASS_APPARENT_POWER, DEVICE_CLASS_POWER, @@ -36,7 +37,6 @@ CONF_POWER_FACTOR_B = "power_factor_b" CONF_VOLTAGE_PGA_GAIN = "voltage_pga_gain" CONF_CURRENT_PGA_GAIN_A = "current_pga_gain_a" CONF_CURRENT_PGA_GAIN_B = "current_pga_gain_b" -CONF_VOLTAGE_GAIN = "voltage_gain" CONF_CURRENT_GAIN_A = "current_gain_a" CONF_CURRENT_GAIN_B = "current_gain_b" CONF_ACTIVE_POWER_GAIN_A = "active_power_gain_a" diff --git a/esphome/components/at581x/__init__.py b/esphome/components/at581x/__init__.py index 2860d21f6c..e636510a4b 100644 --- a/esphome/components/at581x/__init__.py +++ b/esphome/components/at581x/__init__.py @@ -22,7 +22,6 @@ CONF_AT581X_ID = "at581x_id" CONF_SENSING_DISTANCE = "sensing_distance" -CONF_SENSITIVITY = "sensitivity" CONF_POWERON_SELFCHECK_TIME = "poweron_selfcheck_time" CONF_PROTECT_TIME = "protect_time" CONF_TRIGGER_BASE = "trigger_base" diff --git a/esphome/components/bl0940/sensor.py b/esphome/components/bl0940/sensor.py index fc2b04f976..5cb1472d76 100644 --- a/esphome/components/bl0940/sensor.py +++ b/esphome/components/bl0940/sensor.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_ENERGY, CONF_EXTERNAL_TEMPERATURE, CONF_ID, + CONF_INTERNAL_TEMPERATURE, CONF_POWER, CONF_VOLTAGE, DEVICE_CLASS_CURRENT, @@ -24,7 +25,6 @@ from esphome.const import ( DEPENDENCIES = ["uart"] -CONF_INTERNAL_TEMPERATURE = "internal_temperature" bl0940_ns = cg.esphome_ns.namespace("bl0940") BL0940 = bl0940_ns.class_("BL0940", cg.PollingComponent, uart.UARTDevice) diff --git a/esphome/components/bme680_bsec/__init__.py b/esphome/components/bme680_bsec/__init__.py index 15c17f4064..62ab50b8f7 100644 --- a/esphome/components/bme680_bsec/__init__.py +++ b/esphome/components/bme680_bsec/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import i2c, esp32 -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_TEMPERATURE_OFFSET CODEOWNERS = ["@trvrnrth"] DEPENDENCIES = ["i2c"] @@ -9,7 +9,6 @@ AUTO_LOAD = ["sensor", "text_sensor"] MULTI_CONF = True CONF_BME680_BSEC_ID = "bme680_bsec_id" -CONF_TEMPERATURE_OFFSET = "temperature_offset" CONF_IAQ_MODE = "iaq_mode" CONF_SUPPLY_VOLTAGE = "supply_voltage" CONF_SAMPLE_RATE = "sample_rate" diff --git a/esphome/components/cs5460a/sensor.py b/esphome/components/cs5460a/sensor.py index c27fc5fc3c..d8219e1df1 100644 --- a/esphome/components/cs5460a/sensor.py +++ b/esphome/components/cs5460a/sensor.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_ID, CONF_POWER, CONF_VOLTAGE, + CONF_VOLTAGE_GAIN, UNIT_VOLT, UNIT_AMPERE, UNIT_WATT, @@ -33,7 +34,6 @@ CONF_SAMPLES = "samples" CONF_PHASE_OFFSET = "phase_offset" CONF_PGA_GAIN = "pga_gain" CONF_CURRENT_GAIN = "current_gain" -CONF_VOLTAGE_GAIN = "voltage_gain" CONF_CURRENT_HPF = "current_hpf" CONF_VOLTAGE_HPF = "voltage_hpf" CONF_PULSE_ENERGY = "pulse_energy" diff --git a/esphome/components/daikin_brc/climate.py b/esphome/components/daikin_brc/climate.py index 3468b6533c..7a5bd9b14d 100644 --- a/esphome/components/daikin_brc/climate.py +++ b/esphome/components/daikin_brc/climate.py @@ -1,14 +1,13 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import climate_ir -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_USE_FAHRENHEIT AUTO_LOAD = ["climate_ir"] daikin_brc_ns = cg.esphome_ns.namespace("daikin_brc") DaikinBrcClimate = daikin_brc_ns.class_("DaikinBrcClimate", climate_ir.ClimateIR) -CONF_USE_FAHRENHEIT = "use_fahrenheit" CONFIG_SCHEMA = climate_ir.CLIMATE_IR_WITH_RECEIVER_SCHEMA.extend( { diff --git a/esphome/components/dfrobot_sen0395/__init__.py b/esphome/components/dfrobot_sen0395/__init__.py index 2197ee5ef8..39787ca66b 100644 --- a/esphome/components/dfrobot_sen0395/__init__.py +++ b/esphome/components/dfrobot_sen0395/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id -from esphome.const import CONF_ID +from esphome.const import CONF_FACTORY_RESET, CONF_ID, CONF_SENSITIVITY from esphome.components import uart CODEOWNERS = ["@niklasweber"] @@ -28,8 +28,6 @@ CONF_DELAY_AFTER_DETECT = "delay_after_detect" CONF_DELAY_AFTER_DISAPPEAR = "delay_after_disappear" CONF_DETECTION_SEGMENTS = "detection_segments" CONF_OUTPUT_LATENCY = "output_latency" -CONF_FACTORY_RESET = "factory_reset" -CONF_SENSITIVITY = "sensitivity" CONFIG_SCHEMA = cv.All( cv.Schema( diff --git a/esphome/components/emc2101/sensor/__init__.py b/esphome/components/emc2101/sensor/__init__.py index 9f3fbdce00..10ea3dfae6 100644 --- a/esphome/components/emc2101/sensor/__init__.py +++ b/esphome/components/emc2101/sensor/__init__.py @@ -4,6 +4,7 @@ from esphome.components import sensor from esphome.const import ( CONF_EXTERNAL_TEMPERATURE, CONF_ID, + CONF_INTERNAL_TEMPERATURE, CONF_SPEED, DEVICE_CLASS_TEMPERATURE, STATE_CLASS_MEASUREMENT, @@ -16,7 +17,6 @@ from .. import EMC2101_COMPONENT_SCHEMA, CONF_EMC2101_ID, emc2101_ns DEPENDENCIES = ["emc2101"] -CONF_INTERNAL_TEMPERATURE = "internal_temperature" CONF_DUTY_CYCLE = "duty_cycle" EMC2101Sensor = emc2101_ns.class_("EMC2101Sensor", cg.PollingComponent) diff --git a/esphome/components/ens160/sensor.py b/esphome/components/ens160/sensor.py index 393b63bae1..6572c4e397 100644 --- a/esphome/components/ens160/sensor.py +++ b/esphome/components/ens160/sensor.py @@ -2,6 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import i2c, sensor from esphome.const import ( + CONF_COMPENSATION, CONF_ECO2, CONF_HUMIDITY, CONF_ID, @@ -27,7 +28,6 @@ ENS160Component = ens160_ns.class_( ) CONF_AQI = "aqi" -CONF_COMPENSATION = "compensation" UNIT_INDEX = "index" CONFIG_SCHEMA = ( diff --git a/esphome/components/esp32_ble/__init__.py b/esphome/components/esp32_ble/__init__.py index 088a3b6d1e..d88161e3e0 100644 --- a/esphome/components/esp32_ble/__init__.py +++ b/esphome/components/esp32_ble/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.const import CONF_ID +from esphome.const import CONF_ENABLE_ON_BOOT, CONF_ID from esphome.core import CORE from esphome.components.esp32 import add_idf_sdkconfig_option, get_esp32_variant, const @@ -11,7 +11,6 @@ CONFLICTS_WITH = ["esp32_ble_beacon"] CONF_BLE_ID = "ble_id" CONF_IO_CAPABILITY = "io_capability" -CONF_ENABLE_ON_BOOT = "enable_on_boot" NO_BLUETOOTH_VARIANTS = [const.VARIANT_ESP32S2] diff --git a/esphome/components/esp32_camera/__init__.py b/esphome/components/esp32_camera/__init__.py index ee8a889f4c..462900d401 100644 --- a/esphome/components/esp32_camera/__init__.py +++ b/esphome/components/esp32_camera/__init__.py @@ -14,6 +14,7 @@ from esphome.const import ( CONF_BRIGHTNESS, CONF_CONTRAST, CONF_TRIGGER_ID, + CONF_VSYNC_PIN, ) from esphome.core import CORE from esphome.components.esp32 import add_idf_sdkconfig_option @@ -112,7 +113,6 @@ ENUM_SPECIAL_EFFECT = { } # pin assignment -CONF_VSYNC_PIN = "vsync_pin" CONF_HREF_PIN = "href_pin" CONF_PIXEL_CLOCK_PIN = "pixel_clock_pin" CONF_EXTERNAL_CLOCK = "external_clock" diff --git a/esphome/components/graphical_display_menu/__init__.py b/esphome/components/graphical_display_menu/__init__.py index 3849449523..1b3ed7f8cd 100644 --- a/esphome/components/graphical_display_menu/__init__.py +++ b/esphome/components/graphical_display_menu/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import display, font, color -from esphome.const import CONF_ID, CONF_TRIGGER_ID +from esphome.const import CONF_DISPLAY, CONF_ID, CONF_TRIGGER_ID from esphome import automation, core from esphome.components.display_menu_base import ( @@ -10,7 +10,6 @@ from esphome.components.display_menu_base import ( display_menu_to_code, ) -CONF_DISPLAY = "display" CONF_FONT = "font" CONF_MENU_ITEM_VALUE = "menu_item_value" CONF_FOREGROUND_COLOR = "foreground_color" diff --git a/esphome/components/haier/climate.py b/esphome/components/haier/climate.py index a700be8be2..b16244fd90 100644 --- a/esphome/components/haier/climate.py +++ b/esphome/components/haier/climate.py @@ -6,12 +6,14 @@ from esphome.components import uart, climate, logger from esphome import automation from esphome.const import ( CONF_BEEPER, + CONF_DISPLAY, CONF_ID, CONF_LEVEL, CONF_LOGGER, CONF_LOGS, CONF_MAX_TEMPERATURE, CONF_MIN_TEMPERATURE, + CONF_OUTDOOR_TEMPERATURE, CONF_PROTOCOL, CONF_SUPPORTED_MODES, CONF_SUPPORTED_PRESETS, @@ -43,11 +45,9 @@ CONF_ALTERNATIVE_SWING_CONTROL = "alternative_swing_control" CONF_ANSWER_TIMEOUT = "answer_timeout" CONF_CONTROL_METHOD = "control_method" CONF_CONTROL_PACKET_SIZE = "control_packet_size" -CONF_DISPLAY = "display" CONF_HORIZONTAL_AIRFLOW = "horizontal_airflow" CONF_ON_ALARM_START = "on_alarm_start" CONF_ON_ALARM_END = "on_alarm_end" -CONF_OUTDOOR_TEMPERATURE = "outdoor_temperature" CONF_VERTICAL_AIRFLOW = "vertical_airflow" CONF_WIFI_SIGNAL = "wifi_signal" diff --git a/esphome/components/haier/sensor/__init__.py b/esphome/components/haier/sensor/__init__.py index 9a4965493d..01f997baa5 100644 --- a/esphome/components/haier/sensor/__init__.py +++ b/esphome/components/haier/sensor/__init__.py @@ -2,6 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import sensor from esphome.const import ( + CONF_OUTDOOR_TEMPERATURE, CONF_POWER, CONF_HUMIDITY, DEVICE_CLASS_CURRENT, @@ -41,7 +42,6 @@ CONF_OUTDOOR_COIL_TEMPERATURE = "outdoor_coil_temperature" CONF_OUTDOOR_DEFROST_TEMPERATURE = "outdoor_defrost_temperature" CONF_OUTDOOR_IN_AIR_TEMPERATURE = "outdoor_in_air_temperature" CONF_OUTDOOR_OUT_AIR_TEMPERATURE = "outdoor_out_air_temperature" -CONF_OUTDOOR_TEMPERATURE = "outdoor_temperature" # Additional icons ICON_SNOWFLAKE_THERMOMETER = "mdi:snowflake-thermometer" diff --git a/esphome/components/hmc5883l/sensor.py b/esphome/components/hmc5883l/sensor.py index 7edd13965e..f2decea150 100644 --- a/esphome/components/hmc5883l/sensor.py +++ b/esphome/components/hmc5883l/sensor.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z, + CONF_HEADING, CONF_ID, CONF_OVERSAMPLING, CONF_RANGE, @@ -21,7 +22,6 @@ DEPENDENCIES = ["i2c"] hmc5883l_ns = cg.esphome_ns.namespace("hmc5883l") -CONF_HEADING = "heading" HMC5883LComponent = hmc5883l_ns.class_( "HMC5883LComponent", cg.PollingComponent, i2c.I2CDevice diff --git a/esphome/components/inkplate6/display.py b/esphome/components/inkplate6/display.py index bcd9580448..58a146d2fd 100644 --- a/esphome/components/inkplate6/display.py +++ b/esphome/components/inkplate6/display.py @@ -7,6 +7,7 @@ from esphome.const import ( CONF_ID, CONF_LAMBDA, CONF_MODEL, + CONF_OE_PIN, CONF_PAGES, CONF_WAKEUP_PIN, ) @@ -29,7 +30,6 @@ CONF_GREYSCALE = "greyscale" CONF_GMOD_PIN = "gmod_pin" CONF_GPIO0_ENABLE_PIN = "gpio0_enable_pin" CONF_LE_PIN = "le_pin" -CONF_OE_PIN = "oe_pin" CONF_PARTIAL_UPDATING = "partial_updating" CONF_POWERUP_PIN = "powerup_pin" CONF_SPH_PIN = "sph_pin" diff --git a/esphome/components/kmeteriso/sensor.py b/esphome/components/kmeteriso/sensor.py index e730e446ae..082a055701 100644 --- a/esphome/components/kmeteriso/sensor.py +++ b/esphome/components/kmeteriso/sensor.py @@ -3,6 +3,7 @@ import esphome.config_validation as cv from esphome.components import i2c, sensor from esphome.const import ( CONF_ID, + CONF_INTERNAL_TEMPERATURE, CONF_TEMPERATURE, DEVICE_CLASS_TEMPERATURE, STATE_CLASS_MEASUREMENT, @@ -10,7 +11,6 @@ from esphome.const import ( ENTITY_CATEGORY_DIAGNOSTIC, ) -CONF_INTERNAL_TEMPERATURE = "internal_temperature" DEPENDENCIES = ["i2c"] kmeteriso_ns = cg.esphome_ns.namespace("kmeteriso") diff --git a/esphome/components/ld2410/binary_sensor.py b/esphome/components/ld2410/binary_sensor.py index 3057480d25..e00ab93be2 100644 --- a/esphome/components/ld2410/binary_sensor.py +++ b/esphome/components/ld2410/binary_sensor.py @@ -8,13 +8,13 @@ from esphome.const import ( ENTITY_CATEGORY_DIAGNOSTIC, ICON_MOTION_SENSOR, ICON_ACCOUNT, + CONF_HAS_TARGET, + CONF_HAS_MOVING_TARGET, + CONF_HAS_STILL_TARGET, ) from . import CONF_LD2410_ID, LD2410Component DEPENDENCIES = ["ld2410"] -CONF_HAS_TARGET = "has_target" -CONF_HAS_MOVING_TARGET = "has_moving_target" -CONF_HAS_STILL_TARGET = "has_still_target" CONF_OUT_PIN_PRESENCE_STATUS = "out_pin_presence_status" CONFIG_SCHEMA = { diff --git a/esphome/components/ld2410/button/__init__.py b/esphome/components/ld2410/button/__init__.py index 3567114c2c..34b18e8bdd 100644 --- a/esphome/components/ld2410/button/__init__.py +++ b/esphome/components/ld2410/button/__init__.py @@ -2,6 +2,8 @@ import esphome.codegen as cg from esphome.components import button import esphome.config_validation as cv from esphome.const import ( + CONF_FACTORY_RESET, + CONF_RESTART, DEVICE_CLASS_RESTART, ENTITY_CATEGORY_DIAGNOSTIC, ENTITY_CATEGORY_CONFIG, @@ -15,8 +17,6 @@ QueryButton = ld2410_ns.class_("QueryButton", button.Button) ResetButton = ld2410_ns.class_("ResetButton", button.Button) RestartButton = ld2410_ns.class_("RestartButton", button.Button) -CONF_FACTORY_RESET = "factory_reset" -CONF_RESTART = "restart" CONF_QUERY_PARAMS = "query_params" CONFIG_SCHEMA = { diff --git a/esphome/components/ld2420/binary_sensor/__init__.py b/esphome/components/ld2420/binary_sensor/__init__.py index f94e4d969f..43e22d0348 100644 --- a/esphome/components/ld2420/binary_sensor/__init__.py +++ b/esphome/components/ld2420/binary_sensor/__init__.py @@ -1,14 +1,13 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor -from esphome.const import CONF_ID, DEVICE_CLASS_OCCUPANCY +from esphome.const import CONF_ID, DEVICE_CLASS_OCCUPANCY, CONF_HAS_TARGET from .. import ld2420_ns, LD2420Component, CONF_LD2420_ID LD2420BinarySensor = ld2420_ns.class_( "LD2420BinarySensor", binary_sensor.BinarySensor, cg.Component ) -CONF_HAS_TARGET = "has_target" CONFIG_SCHEMA = cv.All( cv.COMPONENT_SCHEMA.extend( diff --git a/esphome/components/ld2420/button/__init__.py b/esphome/components/ld2420/button/__init__.py index 675e041dd4..df774ad7bc 100644 --- a/esphome/components/ld2420/button/__init__.py +++ b/esphome/components/ld2420/button/__init__.py @@ -2,6 +2,7 @@ import esphome.codegen as cg from esphome.components import button import esphome.config_validation as cv from esphome.const import ( + CONF_FACTORY_RESET, DEVICE_CLASS_RESTART, ENTITY_CATEGORY_DIAGNOSTIC, ENTITY_CATEGORY_CONFIG, @@ -19,7 +20,6 @@ LD2420FactoryResetButton = ld2420_ns.class_("LD2420FactoryResetButton", button.B CONF_APPLY_CONFIG = "apply_config" CONF_REVERT_CONFIG = "revert_config" CONF_RESTART_MODULE = "restart_module" -CONF_FACTORY_RESET = "factory_reset" CONFIG_SCHEMA = { diff --git a/esphome/components/mcp3008/sensor/__init__.py b/esphome/components/mcp3008/sensor/__init__.py index c56965d517..8ae00ef29e 100644 --- a/esphome/components/mcp3008/sensor/__init__.py +++ b/esphome/components/mcp3008/sensor/__init__.py @@ -4,6 +4,7 @@ from esphome.components import sensor, voltage_sampler from esphome.const import ( CONF_ID, CONF_NUMBER, + CONF_REFERENCE_VOLTAGE, UNIT_VOLT, STATE_CLASS_MEASUREMENT, DEVICE_CLASS_VOLTAGE, @@ -22,7 +23,6 @@ MCP3008Sensor = mcp3008_ns.class_( voltage_sampler.VoltageSampler, cg.Parented.template(MCP3008), ) -CONF_REFERENCE_VOLTAGE = "reference_voltage" CONF_MCP3008_ID = "mcp3008_id" CONFIG_SCHEMA = ( diff --git a/esphome/components/mcp3204/__init__.py b/esphome/components/mcp3204/__init__.py index 0536166e56..98129fc389 100644 --- a/esphome/components/mcp3204/__init__.py +++ b/esphome/components/mcp3204/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import spi -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_REFERENCE_VOLTAGE DEPENDENCIES = ["spi"] MULTI_CONF = True @@ -10,7 +10,6 @@ CODEOWNERS = ["@rsumner"] mcp3204_ns = cg.esphome_ns.namespace("mcp3204") MCP3204 = mcp3204_ns.class_("MCP3204", cg.Component, spi.SPIDevice) -CONF_REFERENCE_VOLTAGE = "reference_voltage" CONFIG_SCHEMA = cv.Schema( { diff --git a/esphome/components/midea/climate.py b/esphome/components/midea/climate.py index 074ab8abb2..83540a061a 100644 --- a/esphome/components/midea/climate.py +++ b/esphome/components/midea/climate.py @@ -11,6 +11,7 @@ from esphome.const import ( CONF_CUSTOM_PRESETS, CONF_ID, CONF_NUM_ATTEMPTS, + CONF_OUTDOOR_TEMPERATURE, CONF_PERIOD, CONF_SUPPORTED_MODES, CONF_SUPPORTED_PRESETS, @@ -37,7 +38,6 @@ from esphome.components.climate import ( CODEOWNERS = ["@dudanov"] DEPENDENCIES = ["climate", "uart"] AUTO_LOAD = ["sensor"] -CONF_OUTDOOR_TEMPERATURE = "outdoor_temperature" CONF_POWER_USAGE = "power_usage" CONF_HUMIDITY_SETPOINT = "humidity_setpoint" midea_ac_ns = cg.esphome_ns.namespace("midea").namespace("ac") diff --git a/esphome/components/midea_ir/climate.py b/esphome/components/midea_ir/climate.py index 140e4ee4e0..8fea6b192b 100644 --- a/esphome/components/midea_ir/climate.py +++ b/esphome/components/midea_ir/climate.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import climate_ir -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_USE_FAHRENHEIT AUTO_LOAD = ["climate_ir", "coolix"] CODEOWNERS = ["@dudanov"] @@ -9,7 +9,6 @@ CODEOWNERS = ["@dudanov"] midea_ir_ns = cg.esphome_ns.namespace("midea_ir") MideaIR = midea_ir_ns.class_("MideaIR", climate_ir.ClimateIR) -CONF_USE_FAHRENHEIT = "use_fahrenheit" CONFIG_SCHEMA = climate_ir.CLIMATE_IR_WITH_RECEIVER_SCHEMA.extend( { diff --git a/esphome/components/mmc5603/sensor.py b/esphome/components/mmc5603/sensor.py index db4e5cbf26..cf16132470 100644 --- a/esphome/components/mmc5603/sensor.py +++ b/esphome/components/mmc5603/sensor.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z, + CONF_HEADING, CONF_ID, ICON_MAGNET, STATE_CLASS_MEASUREMENT, @@ -19,8 +20,6 @@ DEPENDENCIES = ["i2c"] mmc5603_ns = cg.esphome_ns.namespace("mmc5603") -CONF_HEADING = "heading" - MMC5603Component = mmc5603_ns.class_( "MMC5603Component", cg.PollingComponent, i2c.I2CDevice ) diff --git a/esphome/components/pn532/__init__.py b/esphome/components/pn532/__init__.py index 2f120bc983..cdcaf4267c 100644 --- a/esphome/components/pn532/__init__.py +++ b/esphome/components/pn532/__init__.py @@ -2,14 +2,19 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.components import nfc -from esphome.const import CONF_ID, CONF_ON_TAG_REMOVED, CONF_ON_TAG, CONF_TRIGGER_ID +from esphome.const import ( + CONF_ID, + CONF_ON_FINISHED_WRITE, + CONF_ON_TAG_REMOVED, + CONF_ON_TAG, + CONF_TRIGGER_ID, +) CODEOWNERS = ["@OttoWinter", "@jesserockz"] AUTO_LOAD = ["binary_sensor", "nfc"] MULTI_CONF = True CONF_PN532_ID = "pn532_id" -CONF_ON_FINISHED_WRITE = "on_finished_write" pn532_ns = cg.esphome_ns.namespace("pn532") PN532 = pn532_ns.class_("PN532", cg.PollingComponent) diff --git a/esphome/components/pn7150/__init__.py b/esphome/components/pn7150/__init__.py index a136028011..e3589ea449 100644 --- a/esphome/components/pn7150/__init__.py +++ b/esphome/components/pn7150/__init__.py @@ -6,6 +6,8 @@ from esphome.components import nfc from esphome.const import ( CONF_ID, CONF_IRQ_PIN, + CONF_MESSAGE, + CONF_ON_FINISHED_WRITE, CONF_ON_TAG_REMOVED, CONF_ON_TAG, CONF_TRIGGER_ID, @@ -18,8 +20,6 @@ CONF_EMULATION_MESSAGE = "emulation_message" CONF_EMULATION_OFF = "emulation_off" CONF_EMULATION_ON = "emulation_on" CONF_INCLUDE_ANDROID_APP_RECORD = "include_android_app_record" -CONF_MESSAGE = "message" -CONF_ON_FINISHED_WRITE = "on_finished_write" CONF_ON_EMULATED_TAG_SCAN = "on_emulated_tag_scan" CONF_PN7150_ID = "pn7150_id" CONF_POLLING_OFF = "polling_off" diff --git a/esphome/components/pn7160/__init__.py b/esphome/components/pn7160/__init__.py index 1639041b9e..b102b38f98 100644 --- a/esphome/components/pn7160/__init__.py +++ b/esphome/components/pn7160/__init__.py @@ -6,6 +6,8 @@ from esphome.components import nfc from esphome.const import ( CONF_ID, CONF_IRQ_PIN, + CONF_MESSAGE, + CONF_ON_FINISHED_WRITE, CONF_ON_TAG_REMOVED, CONF_ON_TAG, CONF_TRIGGER_ID, @@ -19,8 +21,6 @@ CONF_EMULATION_MESSAGE = "emulation_message" CONF_EMULATION_OFF = "emulation_off" CONF_EMULATION_ON = "emulation_on" CONF_INCLUDE_ANDROID_APP_RECORD = "include_android_app_record" -CONF_MESSAGE = "message" -CONF_ON_FINISHED_WRITE = "on_finished_write" CONF_ON_EMULATED_TAG_SCAN = "on_emulated_tag_scan" CONF_PN7160_ID = "pn7160_id" CONF_POLLING_OFF = "polling_off" diff --git a/esphome/components/power_supply/__init__.py b/esphome/components/power_supply/__init__.py index 6735eddff3..01b541e4b5 100644 --- a/esphome/components/power_supply/__init__.py +++ b/esphome/components/power_supply/__init__.py @@ -1,15 +1,19 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import pins -from esphome.const import CONF_ENABLE_TIME, CONF_ID, CONF_KEEP_ON_TIME, CONF_PIN +from esphome.const import ( + CONF_ENABLE_ON_BOOT, + CONF_ENABLE_TIME, + CONF_ID, + CONF_KEEP_ON_TIME, + CONF_PIN, +) CODEOWNERS = ["@esphome/core"] power_supply_ns = cg.esphome_ns.namespace("power_supply") PowerSupply = power_supply_ns.class_("PowerSupply", cg.Component) MULTI_CONF = True -CONF_ENABLE_ON_BOOT = "enable_on_boot" - CONFIG_SCHEMA = cv.Schema( { cv.Required(CONF_ID): cv.declare_id(PowerSupply), diff --git a/esphome/components/qmc5883l/sensor.py b/esphome/components/qmc5883l/sensor.py index 24e1019507..341c0c3f8a 100644 --- a/esphome/components/qmc5883l/sensor.py +++ b/esphome/components/qmc5883l/sensor.py @@ -6,6 +6,7 @@ from esphome.const import ( CONF_FIELD_STRENGTH_X, CONF_FIELD_STRENGTH_Y, CONF_FIELD_STRENGTH_Z, + CONF_HEADING, CONF_TEMPERATURE, CONF_ID, CONF_OVERSAMPLING, @@ -24,8 +25,6 @@ DEPENDENCIES = ["i2c"] qmc5883l_ns = cg.esphome_ns.namespace("qmc5883l") -CONF_HEADING = "heading" - QMC5883LComponent = qmc5883l_ns.class_( "QMC5883LComponent", cg.PollingComponent, i2c.I2CDevice ) diff --git a/esphome/components/resistance/sensor.py b/esphome/components/resistance/sensor.py index a84b439497..ce4459fc6d 100644 --- a/esphome/components/resistance/sensor.py +++ b/esphome/components/resistance/sensor.py @@ -2,6 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import sensor, resistance_sampler from esphome.const import ( + CONF_REFERENCE_VOLTAGE, CONF_SENSOR, STATE_CLASS_MEASUREMENT, UNIT_OHM, @@ -18,7 +19,6 @@ ResistanceSensor = resistance_ns.class_( resistance_sampler.ResistanceSampler, ) -CONF_REFERENCE_VOLTAGE = "reference_voltage" CONF_CONFIGURATION = "configuration" CONF_RESISTOR = "resistor" diff --git a/esphome/components/rpi_dpi_rgb/display.py b/esphome/components/rpi_dpi_rgb/display.py index 0cde16e0fb..969b9db78e 100644 --- a/esphome/components/rpi_dpi_rgb/display.py +++ b/esphome/components/rpi_dpi_rgb/display.py @@ -3,11 +3,13 @@ import esphome.config_validation as cv from esphome import pins from esphome.components import display from esphome.const import ( + CONF_HSYNC_PIN, CONF_RESET_PIN, CONF_DATA_PINS, CONF_ID, CONF_IGNORE_STRAPPING_WARNING, CONF_DIMENSIONS, + CONF_VSYNC_PIN, CONF_WIDTH, CONF_HEIGHT, CONF_LAMBDA, @@ -29,8 +31,6 @@ DEPENDENCIES = ["esp32"] CONF_DE_PIN = "de_pin" CONF_PCLK_PIN = "pclk_pin" -CONF_HSYNC_PIN = "hsync_pin" -CONF_VSYNC_PIN = "vsync_pin" CONF_HSYNC_FRONT_PORCH = "hsync_front_porch" CONF_HSYNC_PULSE_WIDTH = "hsync_pulse_width" diff --git a/esphome/components/scd30/sensor.py b/esphome/components/scd30/sensor.py index f72b43fd37..a900c51a58 100644 --- a/esphome/components/scd30/sensor.py +++ b/esphome/components/scd30/sensor.py @@ -8,6 +8,7 @@ from esphome.const import ( CONF_HUMIDITY, CONF_TEMPERATURE, CONF_CO2, + CONF_TEMPERATURE_OFFSET, CONF_UPDATE_INTERVAL, CONF_VALUE, DEVICE_CLASS_CARBON_DIOXIDE, @@ -36,7 +37,6 @@ ForceRecalibrationWithReference = scd30_ns.class_( CONF_AUTOMATIC_SELF_CALIBRATION = "automatic_self_calibration" CONF_ALTITUDE_COMPENSATION = "altitude_compensation" CONF_AMBIENT_PRESSURE_COMPENSATION = "ambient_pressure_compensation" -CONF_TEMPERATURE_OFFSET = "temperature_offset" CONFIG_SCHEMA = ( diff --git a/esphome/components/scd4x/sensor.py b/esphome/components/scd4x/sensor.py index 4c94d4257f..13027b6f88 100644 --- a/esphome/components/scd4x/sensor.py +++ b/esphome/components/scd4x/sensor.py @@ -10,6 +10,7 @@ from esphome.const import ( CONF_CO2, CONF_HUMIDITY, CONF_TEMPERATURE, + CONF_TEMPERATURE_OFFSET, CONF_VALUE, DEVICE_CLASS_CARBON_DIOXIDE, DEVICE_CLASS_HUMIDITY, @@ -52,7 +53,6 @@ CONF_AMBIENT_PRESSURE_COMPENSATION = "ambient_pressure_compensation" CONF_AMBIENT_PRESSURE_COMPENSATION_SOURCE = "ambient_pressure_compensation_source" CONF_AUTOMATIC_SELF_CALIBRATION = "automatic_self_calibration" CONF_MEASUREMENT_MODE = "measurement_mode" -CONF_TEMPERATURE_OFFSET = "temperature_offset" CONFIG_SCHEMA = ( diff --git a/esphome/components/script/__init__.py b/esphome/components/script/__init__.py index 78b23e7b5e..483357f85b 100644 --- a/esphome/components/script/__init__.py +++ b/esphome/components/script/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id -from esphome.const import CONF_ID, CONF_MODE, CONF_PARAMETERS +from esphome.const import CONF_ID, CONF_MODE, CONF_PARAMETERS, CONF_RESTART from esphome.core import CORE, EsphomeError CODEOWNERS = ["@esphome/core"] @@ -19,7 +19,6 @@ ParallelScript = script_ns.class_("ParallelScript", Script) CONF_SCRIPT = "script" CONF_SINGLE = "single" -CONF_RESTART = "restart" CONF_QUEUED = "queued" CONF_PARALLEL = "parallel" CONF_MAX_RUNS = "max_runs" diff --git a/esphome/components/seeed_mr24hpc1/binary_sensor.py b/esphome/components/seeed_mr24hpc1/binary_sensor.py index e3e54d03f9..003db9f4a3 100644 --- a/esphome/components/seeed_mr24hpc1/binary_sensor.py +++ b/esphome/components/seeed_mr24hpc1/binary_sensor.py @@ -3,10 +3,10 @@ from esphome.components import binary_sensor import esphome.config_validation as cv from esphome.const import ( DEVICE_CLASS_OCCUPANCY, + CONF_HAS_TARGET, ) from . import CONF_MR24HPC1_ID, MR24HPC1Component -CONF_HAS_TARGET = "has_target" CONFIG_SCHEMA = { cv.GenerateID(CONF_MR24HPC1_ID): cv.use_id(MR24HPC1Component), diff --git a/esphome/components/seeed_mr24hpc1/button/__init__.py b/esphome/components/seeed_mr24hpc1/button/__init__.py index 0a0e7a1865..59372e4100 100644 --- a/esphome/components/seeed_mr24hpc1/button/__init__.py +++ b/esphome/components/seeed_mr24hpc1/button/__init__.py @@ -2,6 +2,7 @@ import esphome.codegen as cg from esphome.components import button import esphome.config_validation as cv from esphome.const import ( + CONF_RESTART, DEVICE_CLASS_RESTART, ENTITY_CATEGORY_CONFIG, ICON_RESTART_ALERT, @@ -11,7 +12,6 @@ from .. import CONF_MR24HPC1_ID, MR24HPC1Component, mr24hpc1_ns RestartButton = mr24hpc1_ns.class_("RestartButton", button.Button) CustomSetEndButton = mr24hpc1_ns.class_("CustomSetEndButton", button.Button) -CONF_RESTART = "restart" CONF_CUSTOM_SET_END = "custom_set_end" CONFIG_SCHEMA = { diff --git a/esphome/components/seeed_mr24hpc1/number/__init__.py b/esphome/components/seeed_mr24hpc1/number/__init__.py index d9dfcb19a5..2055fc548c 100644 --- a/esphome/components/seeed_mr24hpc1/number/__init__.py +++ b/esphome/components/seeed_mr24hpc1/number/__init__.py @@ -2,6 +2,7 @@ import esphome.codegen as cg from esphome.components import number import esphome.config_validation as cv from esphome.const import ( + CONF_SENSITIVITY, ENTITY_CATEGORY_CONFIG, ) from .. import CONF_MR24HPC1_ID, MR24HPC1Component, mr24hpc1_ns @@ -14,7 +15,6 @@ MotionTriggerTimeNumber = mr24hpc1_ns.class_("MotionTriggerTimeNumber", number.N MotionToRestTimeNumber = mr24hpc1_ns.class_("MotionToRestTimeNumber", number.Number) CustomUnmanTimeNumber = mr24hpc1_ns.class_("CustomUnmanTimeNumber", number.Number) -CONF_SENSITIVITY = "sensitivity" CONF_CUSTOM_MODE = "custom_mode" CONF_EXISTENCE_THRESHOLD = "existence_threshold" CONF_MOTION_THRESHOLD = "motion_threshold" diff --git a/esphome/components/sgp30/sensor.py b/esphome/components/sgp30/sensor.py index 6f8ed42d25..13e859cc09 100644 --- a/esphome/components/sgp30/sensor.py +++ b/esphome/components/sgp30/sensor.py @@ -3,6 +3,7 @@ import esphome.config_validation as cv from esphome.components import i2c, sensor, sensirion_common from esphome.const import ( + CONF_COMPENSATION, CONF_ID, CONF_BASELINE, CONF_ECO2, @@ -30,7 +31,6 @@ SGP30Component = sgp30_ns.class_( CONF_ECO2_BASELINE = "eco2_baseline" CONF_TVOC_BASELINE = "tvoc_baseline" CONF_UPTIME = "uptime" -CONF_COMPENSATION = "compensation" CONF_HUMIDITY_SOURCE = "humidity_source" diff --git a/esphome/components/sgp4x/sensor.py b/esphome/components/sgp4x/sensor.py index 3d24f6c409..b7cec542bf 100644 --- a/esphome/components/sgp4x/sensor.py +++ b/esphome/components/sgp4x/sensor.py @@ -2,6 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import i2c, sensor, sensirion_common from esphome.const import ( + CONF_COMPENSATION, CONF_ID, CONF_STORE_BASELINE, CONF_TEMPERATURE_SOURCE, @@ -23,7 +24,6 @@ SGP4xComponent = sgp4x_ns.class_( ) CONF_ALGORITHM_TUNING = "algorithm_tuning" -CONF_COMPENSATION = "compensation" CONF_GAIN_FACTOR = "gain_factor" CONF_GATING_MAX_DURATION_MINUTES = "gating_max_duration_minutes" CONF_HUMIDITY_SOURCE = "humidity_source" diff --git a/esphome/components/sim800l/__init__.py b/esphome/components/sim800l/__init__.py index 698e3cda9e..faa6cefe27 100644 --- a/esphome/components/sim800l/__init__.py +++ b/esphome/components/sim800l/__init__.py @@ -3,6 +3,7 @@ import esphome.config_validation as cv from esphome import automation from esphome.const import ( CONF_ID, + CONF_MESSAGE, CONF_TRIGGER_ID, ) from esphome.components import uart @@ -52,7 +53,6 @@ CONF_ON_INCOMING_CALL = "on_incoming_call" CONF_ON_CALL_CONNECTED = "on_call_connected" CONF_ON_CALL_DISCONNECTED = "on_call_disconnected" CONF_RECIPIENT = "recipient" -CONF_MESSAGE = "message" CONF_USSD = "ussd" CONFIG_SCHEMA = cv.All( diff --git a/esphome/components/sn74hc595/__init__.py b/esphome/components/sn74hc595/__init__.py index e0cd5e70ad..2fd49f6824 100644 --- a/esphome/components/sn74hc595/__init__.py +++ b/esphome/components/sn74hc595/__init__.py @@ -8,6 +8,7 @@ from esphome.const import ( CONF_INVERTED, CONF_DATA_PIN, CONF_CLOCK_PIN, + CONF_OE_PIN, CONF_OUTPUT, CONF_TYPE, ) @@ -30,7 +31,6 @@ SN74HC595GPIOPin = sn74hc595_ns.class_( CONF_SN74HC595 = "sn74hc595" CONF_LATCH_PIN = "latch_pin" -CONF_OE_PIN = "oe_pin" CONF_SR_COUNT = "sr_count" TYPE_GPIO = "gpio" diff --git a/esphome/components/st7701s/display.py b/esphome/components/st7701s/display.py index e33eeb89ae..516d770f8b 100644 --- a/esphome/components/st7701s/display.py +++ b/esphome/components/st7701s/display.py @@ -7,10 +7,12 @@ from esphome.components import ( ) from esphome.const import ( CONF_DC_PIN, + CONF_HSYNC_PIN, CONF_RESET_PIN, CONF_DATA_PINS, CONF_ID, CONF_DIMENSIONS, + CONF_VSYNC_PIN, CONF_WIDTH, CONF_HEIGHT, CONF_LAMBDA, @@ -44,8 +46,6 @@ from .init_sequences import ( CONF_INIT_SEQUENCE = "init_sequence" CONF_DE_PIN = "de_pin" CONF_PCLK_PIN = "pclk_pin" -CONF_HSYNC_PIN = "hsync_pin" -CONF_VSYNC_PIN = "vsync_pin" CONF_HSYNC_PULSE_WIDTH = "hsync_pulse_width" CONF_HSYNC_BACK_PORCH = "hsync_back_porch" diff --git a/esphome/components/tlc5947/__init__.py b/esphome/components/tlc5947/__init__.py index 8a4bd5e0ce..528d690fab 100644 --- a/esphome/components/tlc5947/__init__.py +++ b/esphome/components/tlc5947/__init__.py @@ -9,10 +9,10 @@ from esphome.const import ( CONF_DATA_PIN, CONF_ID, CONF_NUM_CHIPS, + CONF_OE_PIN, ) CONF_LAT_PIN = "lat_pin" -CONF_OE_PIN = "oe_pin" CODEOWNERS = ["@rnauber"] diff --git a/esphome/components/touchscreen/__init__.py b/esphome/components/touchscreen/__init__.py index 400ba7d5ad..b2d3f60d2b 100644 --- a/esphome/components/touchscreen/__init__.py +++ b/esphome/components/touchscreen/__init__.py @@ -5,6 +5,7 @@ from esphome.components import display from esphome import automation from esphome.const import ( + CONF_DISPLAY, CONF_ON_TOUCH, CONF_ON_RELEASE, CONF_ON_UPDATE, @@ -31,7 +32,6 @@ TouchPoints_t = cg.std_vector.template(TouchPoint) TouchPoints_t_const_ref = TouchPoints_t.operator("ref").operator("const") TouchListener = touchscreen_ns.class_("TouchListener") -CONF_DISPLAY = "display" CONF_TOUCHSCREEN_ID = "touchscreen_id" CONF_REPORT_INTERVAL = "report_interval" # not used yet: CONF_TOUCH_TIMEOUT = "touch_timeout" diff --git a/esphome/components/whynter/climate.py b/esphome/components/whynter/climate.py index b9dc5868bc..1d576344e6 100644 --- a/esphome/components/whynter/climate.py +++ b/esphome/components/whynter/climate.py @@ -1,14 +1,13 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import climate_ir -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_USE_FAHRENHEIT AUTO_LOAD = ["climate_ir"] whynter_ns = cg.esphome_ns.namespace("whynter") Whynter = whynter_ns.class_("Whynter", climate_ir.ClimateIR) -CONF_USE_FAHRENHEIT = "use_fahrenheit" CONFIG_SCHEMA = climate_ir.CLIMATE_IR_WITH_RECEIVER_SCHEMA.extend( { diff --git a/esphome/components/wifi/__init__.py b/esphome/components/wifi/__init__.py index 32c9d07046..e0a17e9a2a 100644 --- a/esphome/components/wifi/__init__.py +++ b/esphome/components/wifi/__init__.py @@ -11,6 +11,7 @@ from esphome.const import ( CONF_DNS2, CONF_DOMAIN, CONF_ENABLE_BTM, + CONF_ENABLE_ON_BOOT, CONF_ENABLE_RRM, CONF_FAST_CONNECT, CONF_GATEWAY, @@ -268,7 +269,6 @@ def _validate(config): CONF_OUTPUT_POWER = "output_power" CONF_PASSIVE_SCAN = "passive_scan" -CONF_ENABLE_ON_BOOT = "enable_on_boot" CONFIG_SCHEMA = cv.All( cv.Schema( { diff --git a/esphome/components/wireguard/__init__.py b/esphome/components/wireguard/__init__.py index 2d68cd001e..7612c7d964 100644 --- a/esphome/components/wireguard/__init__.py +++ b/esphome/components/wireguard/__init__.py @@ -22,6 +22,8 @@ CONF_PEER_ALLOWED_IPS = "peer_allowed_ips" CONF_PEER_PERSISTENT_KEEPALIVE = "peer_persistent_keepalive" CONF_REQUIRE_CONNECTION_TO_PROCEED = "require_connection_to_proceed" +CONF_WIREGUARD_ID = "wireguard_id" + DEPENDENCIES = ["time"] CODEOWNERS = ["@lhoracek", "@droscy", "@thomas0bernard"] diff --git a/esphome/components/wireguard/binary_sensor.py b/esphome/components/wireguard/binary_sensor.py index bf60aaa1d6..7344558659 100644 --- a/esphome/components/wireguard/binary_sensor.py +++ b/esphome/components/wireguard/binary_sensor.py @@ -7,9 +7,8 @@ from esphome.const import ( ENTITY_CATEGORY_DIAGNOSTIC, ) -from . import Wireguard +from . import CONF_WIREGUARD_ID, Wireguard -CONF_WIREGUARD_ID = "wireguard_id" CONF_ENABLED = "enabled" DEPENDENCIES = ["wireguard"] diff --git a/esphome/components/wireguard/sensor.py b/esphome/components/wireguard/sensor.py index 78cb619701..85703d24b3 100644 --- a/esphome/components/wireguard/sensor.py +++ b/esphome/components/wireguard/sensor.py @@ -6,9 +6,8 @@ from esphome.const import ( ENTITY_CATEGORY_DIAGNOSTIC, ) -from . import Wireguard +from . import CONF_WIREGUARD_ID, Wireguard -CONF_WIREGUARD_ID = "wireguard_id" CONF_LATEST_HANDSHAKE = "latest_handshake" DEPENDENCIES = ["wireguard"] diff --git a/esphome/components/wireguard/text_sensor.py b/esphome/components/wireguard/text_sensor.py index 3b05f6173e..51614a1a28 100644 --- a/esphome/components/wireguard/text_sensor.py +++ b/esphome/components/wireguard/text_sensor.py @@ -6,9 +6,7 @@ from esphome.const import ( ENTITY_CATEGORY_DIAGNOSTIC, ) -from . import Wireguard - -CONF_WIREGUARD_ID = "wireguard_id" +from . import CONF_WIREGUARD_ID, Wireguard DEPENDENCIES = ["wireguard"] diff --git a/esphome/const.py b/esphome/const.py index 324b32e847..1a8f9a06e1 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -141,6 +141,7 @@ CONF_COMMAND_RETAIN = "command_retain" CONF_COMMAND_TOPIC = "command_topic" CONF_COMMENT = "comment" CONF_COMMIT = "commit" +CONF_COMPENSATION = "compensation" CONF_COMPILE_PROCESS_LIMIT = "compile_process_limit" CONF_COMPONENT_ID = "component_id" CONF_COMPONENTS = "components" @@ -216,6 +217,7 @@ CONF_DISCOVERY_OBJECT_ID_GENERATOR = "discovery_object_id_generator" CONF_DISCOVERY_PREFIX = "discovery_prefix" CONF_DISCOVERY_RETAIN = "discovery_retain" CONF_DISCOVERY_UNIQUE_ID_GENERATOR = "discovery_unique_id_generator" +CONF_DISPLAY = "display" CONF_DISTANCE = "distance" CONF_DITHER = "dither" CONF_DIV_RATIO = "div_ratio" @@ -239,6 +241,7 @@ CONF_EFFECTS = "effects" CONF_ELSE = "else" CONF_ENABLE_BTM = "enable_btm" CONF_ENABLE_IPV6 = "enable_ipv6" +CONF_ENABLE_ON_BOOT = "enable_on_boot" CONF_ENABLE_PIN = "enable_pin" CONF_ENABLE_PRIVATE_NETWORK_ACCESS = "enable_private_network_access" CONF_ENABLE_RRM = "enable_rrm" @@ -261,6 +264,7 @@ CONF_EXTERNAL_CLOCK_INPUT = "external_clock_input" CONF_EXTERNAL_COMPONENTS = "external_components" CONF_EXTERNAL_TEMPERATURE = "external_temperature" CONF_EXTERNAL_VCC = "external_vcc" +CONF_FACTORY_RESET = "factory_reset" CONF_FALLING_EDGE = "falling_edge" CONF_FAMILY = "family" CONF_FAN_MODE = "fan_mode" @@ -323,7 +327,11 @@ CONF_GYROSCOPE_X = "gyroscope_x" CONF_GYROSCOPE_Y = "gyroscope_y" CONF_GYROSCOPE_Z = "gyroscope_z" CONF_HARDWARE_UART = "hardware_uart" +CONF_HAS_MOVING_TARGET = "has_moving_target" +CONF_HAS_STILL_TARGET = "has_still_target" +CONF_HAS_TARGET = "has_target" CONF_HEAD = "head" +CONF_HEADING = "heading" CONF_HEARTBEAT = "heartbeat" CONF_HEAT_ACTION = "heat_action" CONF_HEAT_DEADBAND = "heat_deadband" @@ -337,6 +345,7 @@ CONF_HIGH = "high" CONF_HIGH_VOLTAGE_REFERENCE = "high_voltage_reference" CONF_HOUR = "hour" CONF_HOURS = "hours" +CONF_HSYNC_PIN = "hsync_pin" CONF_HUMIDITY = "humidity" CONF_HUMIDITY_SENSOR = "humidity_sensor" CONF_HYSTERESIS = "hysteresis" @@ -377,6 +386,7 @@ CONF_INTERLOCK = "interlock" CONF_INTERNAL = "internal" CONF_INTERNAL_FILTER = "internal_filter" CONF_INTERNAL_FILTER_MODE = "internal_filter_mode" +CONF_INTERNAL_TEMPERATURE = "internal_temperature" CONF_INTERRUPT = "interrupt" CONF_INTERRUPT_PIN = "interrupt_pin" CONF_INTERVAL = "interval" @@ -446,6 +456,7 @@ CONF_MEASUREMENT_SEQUENCE_NUMBER = "measurement_sequence_number" CONF_MEDIA_PLAYER = "media_player" CONF_MEDIUM = "medium" CONF_MEMORY_BLOCKS = "memory_blocks" +CONF_MESSAGE = "message" CONF_METHOD = "method" CONF_MICROPHONE = "microphone" CONF_MIN_BRIGHTNESS = "min_brightness" @@ -499,6 +510,7 @@ CONF_NUM_LEDS = "num_leds" CONF_NUM_SCANS = "num_scans" CONF_NUMBER = "number" CONF_NUMBER_DATAPOINT = "number_datapoint" +CONF_OE_PIN = "oe_pin" CONF_OFF_MODE = "off_mode" CONF_OFF_SPEED_CYCLE = "off_speed_cycle" CONF_OFFSET = "offset" @@ -526,6 +538,7 @@ CONF_ON_FINGER_SCAN_MATCHED = "on_finger_scan_matched" CONF_ON_FINGER_SCAN_MISPLACED = "on_finger_scan_misplaced" CONF_ON_FINGER_SCAN_START = "on_finger_scan_start" CONF_ON_FINGER_SCAN_UNMATCHED = "on_finger_scan_unmatched" +CONF_ON_FINISHED_WRITE = "on_finished_write" CONF_ON_JSON_MESSAGE = "on_json_message" CONF_ON_LOCK = "on_lock" CONF_ON_LOOP = "on_loop" @@ -568,6 +581,7 @@ CONF_OSCILLATION_COMMAND_TOPIC = "oscillation_command_topic" CONF_OSCILLATION_OUTPUT = "oscillation_output" CONF_OSCILLATION_STATE_TOPIC = "oscillation_state_topic" CONF_OTA = "ota" +CONF_OUTDOOR_TEMPERATURE = "outdoor_temperature" CONF_OUTPUT = "output" CONF_OUTPUT_ID = "output_id" CONF_OUTPUTS = "outputs" @@ -666,6 +680,7 @@ CONF_RED = "red" CONF_REF = "ref" CONF_REFERENCE_RESISTANCE = "reference_resistance" CONF_REFERENCE_TEMPERATURE = "reference_temperature" +CONF_REFERENCE_VOLTAGE = "reference_voltage" CONF_REFRESH = "refresh" CONF_RELABEL = "relabel" CONF_REPEAT = "repeat" @@ -674,6 +689,7 @@ CONF_RESET_DURATION = "reset_duration" CONF_RESET_PIN = "reset_pin" CONF_RESIZE = "resize" CONF_RESOLUTION = "resolution" +CONF_RESTART = "restart" CONF_RESTORE = "restore" CONF_RESTORE_MODE = "restore_mode" CONF_RESTORE_STATE = "restore_state" @@ -711,6 +727,7 @@ CONF_SEL_PIN = "sel_pin" CONF_SEND_EVERY = "send_every" CONF_SEND_FIRST_AT = "send_first_at" CONF_SENSING_PIN = "sensing_pin" +CONF_SENSITIVITY = "sensitivity" CONF_SENSOR = "sensor" CONF_SENSOR_DATAPOINT = "sensor_datapoint" CONF_SENSOR_ID = "sensor_id" @@ -804,6 +821,7 @@ CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC = "target_temperature_low_command_topi CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC = "target_temperature_low_state_topic" CONF_TARGET_TEMPERATURE_STATE_TOPIC = "target_temperature_state_topic" CONF_TEMPERATURE = "temperature" +CONF_TEMPERATURE_OFFSET = "temperature_offset" CONF_TEMPERATURE_SOURCE = "temperature_source" CONF_TEMPERATURE_STEP = "temperature_step" CONF_TEXT_SENSORS = "text_sensors" @@ -852,6 +870,7 @@ CONF_UPDATE_ON_BOOT = "update_on_boot" CONF_URL = "url" CONF_USE_ABBREVIATIONS = "use_abbreviations" CONF_USE_ADDRESS = "use_address" +CONF_USE_FAHRENHEIT = "use_fahrenheit" CONF_USERNAME = "username" CONF_UUID = "uuid" CONF_VALIDITY_PERIOD = "validity_period" @@ -865,7 +884,9 @@ CONF_VISUAL = "visual" CONF_VOLTAGE = "voltage" CONF_VOLTAGE_ATTENUATION = "voltage_attenuation" CONF_VOLTAGE_DIVIDER = "voltage_divider" +CONF_VOLTAGE_GAIN = "voltage_gain" CONF_VOLUME = "volume" +CONF_VSYNC_PIN = "vsync_pin" CONF_WAIT_TIME = "wait_time" CONF_WAIT_UNTIL = "wait_until" CONF_WAKEUP_PIN = "wakeup_pin" diff --git a/script/ci-custom.py b/script/ci-custom.py index abe004dba3..704962fa97 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -476,7 +476,7 @@ def lint_no_byte_datatype(fname, match): def lint_constants_usage(): errs = [] for constant, uses in CONSTANTS_USES.items(): - if len(uses) < 4: + if len(uses) < 3: continue errs.append( f"Constant {highlight(constant)} is defined in {len(uses)} files. Please move all definitions of the " From f1584205afcaf4863446f140d19f87e1f8192e4e Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Sun, 5 May 2024 21:52:47 +0200 Subject: [PATCH 123/313] [core] Rename ALWAYS_INLINE to ESPHOME_ALWAYS_INLINE (#6636) --- esphome/components/display/rect.h | 4 +- .../components/light/esp_color_correction.h | 20 +++---- esphome/components/light/esp_hsv_color.h | 8 +-- esphome/core/color.h | 52 ++++++++++--------- esphome/core/helpers.h | 2 +- 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/esphome/components/display/rect.h b/esphome/components/display/rect.h index a728ddd132..f55c2fe201 100644 --- a/esphome/components/display/rect.h +++ b/esphome/components/display/rect.h @@ -15,11 +15,11 @@ class Rect { int16_t h; ///< Height of region Rect() : x(VALUE_NO_SET), y(VALUE_NO_SET), w(VALUE_NO_SET), h(VALUE_NO_SET) {} // NOLINT - inline Rect(int16_t x, int16_t y, int16_t w, int16_t h) ALWAYS_INLINE : x(x), y(y), w(w), h(h) {} + inline Rect(int16_t x, int16_t y, int16_t w, int16_t h) ESPHOME_ALWAYS_INLINE : x(x), y(y), w(w), h(h) {} inline int16_t x2() const { return this->x + this->w; }; ///< X coordinate of corner inline int16_t y2() const { return this->y + this->h; }; ///< Y coordinate of corner - inline bool is_set() const ALWAYS_INLINE { return (this->h != VALUE_NO_SET) && (this->w != VALUE_NO_SET); } + inline bool is_set() const ESPHOME_ALWAYS_INLINE { return (this->h != VALUE_NO_SET) && (this->w != VALUE_NO_SET); } void expand(int16_t horizontal, int16_t vertical); diff --git a/esphome/components/light/esp_color_correction.h b/esphome/components/light/esp_color_correction.h index 8788246cfc..eedd71ab27 100644 --- a/esphome/components/light/esp_color_correction.h +++ b/esphome/components/light/esp_color_correction.h @@ -11,54 +11,54 @@ class ESPColorCorrection { void set_max_brightness(const Color &max_brightness) { this->max_brightness_ = max_brightness; } void set_local_brightness(uint8_t local_brightness) { this->local_brightness_ = local_brightness; } void calculate_gamma_table(float gamma); - inline Color color_correct(Color color) const ALWAYS_INLINE { + inline Color color_correct(Color color) const ESPHOME_ALWAYS_INLINE { // corrected = (uncorrected * max_brightness * local_brightness) ^ gamma return Color(this->color_correct_red(color.red), this->color_correct_green(color.green), this->color_correct_blue(color.blue), this->color_correct_white(color.white)); } - inline uint8_t color_correct_red(uint8_t red) const ALWAYS_INLINE { + inline uint8_t color_correct_red(uint8_t red) const ESPHOME_ALWAYS_INLINE { uint8_t res = esp_scale8(esp_scale8(red, this->max_brightness_.red), this->local_brightness_); return this->gamma_table_[res]; } - inline uint8_t color_correct_green(uint8_t green) const ALWAYS_INLINE { + inline uint8_t color_correct_green(uint8_t green) const ESPHOME_ALWAYS_INLINE { uint8_t res = esp_scale8(esp_scale8(green, this->max_brightness_.green), this->local_brightness_); return this->gamma_table_[res]; } - inline uint8_t color_correct_blue(uint8_t blue) const ALWAYS_INLINE { + inline uint8_t color_correct_blue(uint8_t blue) const ESPHOME_ALWAYS_INLINE { uint8_t res = esp_scale8(esp_scale8(blue, this->max_brightness_.blue), this->local_brightness_); return this->gamma_table_[res]; } - inline uint8_t color_correct_white(uint8_t white) const ALWAYS_INLINE { + inline uint8_t color_correct_white(uint8_t white) const ESPHOME_ALWAYS_INLINE { uint8_t res = esp_scale8(esp_scale8(white, this->max_brightness_.white), this->local_brightness_); return this->gamma_table_[res]; } - inline Color color_uncorrect(Color color) const ALWAYS_INLINE { + inline Color color_uncorrect(Color color) const ESPHOME_ALWAYS_INLINE { // uncorrected = corrected^(1/gamma) / (max_brightness * local_brightness) return Color(this->color_uncorrect_red(color.red), this->color_uncorrect_green(color.green), this->color_uncorrect_blue(color.blue), this->color_uncorrect_white(color.white)); } - inline uint8_t color_uncorrect_red(uint8_t red) const ALWAYS_INLINE { + inline uint8_t color_uncorrect_red(uint8_t red) const ESPHOME_ALWAYS_INLINE { if (this->max_brightness_.red == 0 || this->local_brightness_ == 0) return 0; uint16_t uncorrected = this->gamma_reverse_table_[red] * 255UL; uint8_t res = ((uncorrected / this->max_brightness_.red) * 255UL) / this->local_brightness_; return res; } - inline uint8_t color_uncorrect_green(uint8_t green) const ALWAYS_INLINE { + inline uint8_t color_uncorrect_green(uint8_t green) const ESPHOME_ALWAYS_INLINE { if (this->max_brightness_.green == 0 || this->local_brightness_ == 0) return 0; uint16_t uncorrected = this->gamma_reverse_table_[green] * 255UL; uint8_t res = ((uncorrected / this->max_brightness_.green) * 255UL) / this->local_brightness_; return res; } - inline uint8_t color_uncorrect_blue(uint8_t blue) const ALWAYS_INLINE { + inline uint8_t color_uncorrect_blue(uint8_t blue) const ESPHOME_ALWAYS_INLINE { if (this->max_brightness_.blue == 0 || this->local_brightness_ == 0) return 0; uint16_t uncorrected = this->gamma_reverse_table_[blue] * 255UL; uint8_t res = ((uncorrected / this->max_brightness_.blue) * 255UL) / this->local_brightness_; return res; } - inline uint8_t color_uncorrect_white(uint8_t white) const ALWAYS_INLINE { + inline uint8_t color_uncorrect_white(uint8_t white) const ESPHOME_ALWAYS_INLINE { if (this->max_brightness_.white == 0 || this->local_brightness_ == 0) return 0; uint16_t uncorrected = this->gamma_reverse_table_[white] * 255UL; diff --git a/esphome/components/light/esp_hsv_color.h b/esphome/components/light/esp_hsv_color.h index e0aa388875..39f5e55707 100644 --- a/esphome/components/light/esp_hsv_color.h +++ b/esphome/components/light/esp_hsv_color.h @@ -24,11 +24,11 @@ struct ESPHSVColor { }; uint8_t raw[3]; }; - inline ESPHSVColor() ALWAYS_INLINE : h(0), s(0), v(0) { // NOLINT + inline ESPHSVColor() ESPHOME_ALWAYS_INLINE : h(0), s(0), v(0) { // NOLINT } - inline ESPHSVColor(uint8_t hue, uint8_t saturation, uint8_t value) ALWAYS_INLINE : hue(hue), - saturation(saturation), - value(value) {} + inline ESPHSVColor(uint8_t hue, uint8_t saturation, uint8_t value) ESPHOME_ALWAYS_INLINE : hue(hue), + saturation(saturation), + value(value) {} Color to_rgb() const; }; diff --git a/esphome/core/color.h b/esphome/core/color.h index fb72973017..8965d9fc83 100644 --- a/esphome/core/color.h +++ b/esphome/core/color.h @@ -31,19 +31,19 @@ struct Color { uint32_t raw_32; }; - inline Color() ALWAYS_INLINE : r(0), g(0), b(0), w(0) {} // NOLINT - inline Color(uint8_t red, uint8_t green, uint8_t blue) ALWAYS_INLINE : r(red), g(green), b(blue), w(0) {} + inline Color() ESPHOME_ALWAYS_INLINE : r(0), g(0), b(0), w(0) {} // NOLINT + inline Color(uint8_t red, uint8_t green, uint8_t blue) ESPHOME_ALWAYS_INLINE : r(red), g(green), b(blue), w(0) {} - inline Color(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) ALWAYS_INLINE : r(red), - g(green), - b(blue), - w(white) {} - inline explicit Color(uint32_t colorcode) ALWAYS_INLINE : r((colorcode >> 16) & 0xFF), - g((colorcode >> 8) & 0xFF), - b((colorcode >> 0) & 0xFF), - w((colorcode >> 24) & 0xFF) {} + inline Color(uint8_t red, uint8_t green, uint8_t blue, uint8_t white) ESPHOME_ALWAYS_INLINE : r(red), + g(green), + b(blue), + w(white) {} + inline explicit Color(uint32_t colorcode) ESPHOME_ALWAYS_INLINE : r((colorcode >> 16) & 0xFF), + g((colorcode >> 8) & 0xFF), + b((colorcode >> 0) & 0xFF), + w((colorcode >> 24) & 0xFF) {} - inline bool is_on() ALWAYS_INLINE { return this->raw_32 != 0; } + inline bool is_on() ESPHOME_ALWAYS_INLINE { return this->raw_32 != 0; } inline bool operator==(const Color &rhs) { // NOLINT return this->raw_32 == rhs.raw_32; @@ -57,31 +57,33 @@ struct Color { inline bool operator!=(uint32_t colorcode) { // NOLINT return this->raw_32 != colorcode; } - inline uint8_t &operator[](uint8_t x) ALWAYS_INLINE { return this->raw[x]; } - inline Color operator*(uint8_t scale) const ALWAYS_INLINE { + inline uint8_t &operator[](uint8_t x) ESPHOME_ALWAYS_INLINE { return this->raw[x]; } + inline Color operator*(uint8_t scale) const ESPHOME_ALWAYS_INLINE { return Color(esp_scale8(this->red, scale), esp_scale8(this->green, scale), esp_scale8(this->blue, scale), esp_scale8(this->white, scale)); } - inline Color operator~() const ALWAYS_INLINE { return Color(255 - this->red, 255 - this->green, 255 - this->blue); } - inline Color &operator*=(uint8_t scale) ALWAYS_INLINE { + inline Color operator~() const ESPHOME_ALWAYS_INLINE { + return Color(255 - this->red, 255 - this->green, 255 - this->blue); + } + inline Color &operator*=(uint8_t scale) ESPHOME_ALWAYS_INLINE { this->red = esp_scale8(this->red, scale); this->green = esp_scale8(this->green, scale); this->blue = esp_scale8(this->blue, scale); this->white = esp_scale8(this->white, scale); return *this; } - inline Color operator*(const Color &scale) const ALWAYS_INLINE { + inline Color operator*(const Color &scale) const ESPHOME_ALWAYS_INLINE { return Color(esp_scale8(this->red, scale.red), esp_scale8(this->green, scale.green), esp_scale8(this->blue, scale.blue), esp_scale8(this->white, scale.white)); } - inline Color &operator*=(const Color &scale) ALWAYS_INLINE { + inline Color &operator*=(const Color &scale) ESPHOME_ALWAYS_INLINE { this->red = esp_scale8(this->red, scale.red); this->green = esp_scale8(this->green, scale.green); this->blue = esp_scale8(this->blue, scale.blue); this->white = esp_scale8(this->white, scale.white); return *this; } - inline Color operator+(const Color &add) const ALWAYS_INLINE { + inline Color operator+(const Color &add) const ESPHOME_ALWAYS_INLINE { Color ret; if (uint8_t(add.r + this->r) < this->r) ret.r = 255; @@ -101,10 +103,10 @@ struct Color { ret.w = this->w + add.w; return ret; } - inline Color &operator+=(const Color &add) ALWAYS_INLINE { return *this = (*this) + add; } - inline Color operator+(uint8_t add) const ALWAYS_INLINE { return (*this) + Color(add, add, add, add); } - inline Color &operator+=(uint8_t add) ALWAYS_INLINE { return *this = (*this) + add; } - inline Color operator-(const Color &subtract) const ALWAYS_INLINE { + inline Color &operator+=(const Color &add) ESPHOME_ALWAYS_INLINE { return *this = (*this) + add; } + inline Color operator+(uint8_t add) const ESPHOME_ALWAYS_INLINE { return (*this) + Color(add, add, add, add); } + inline Color &operator+=(uint8_t add) ESPHOME_ALWAYS_INLINE { return *this = (*this) + add; } + inline Color operator-(const Color &subtract) const ESPHOME_ALWAYS_INLINE { Color ret; if (subtract.r > this->r) ret.r = 0; @@ -124,11 +126,11 @@ struct Color { ret.w = this->w - subtract.w; return ret; } - inline Color &operator-=(const Color &subtract) ALWAYS_INLINE { return *this = (*this) - subtract; } - inline Color operator-(uint8_t subtract) const ALWAYS_INLINE { + inline Color &operator-=(const Color &subtract) ESPHOME_ALWAYS_INLINE { return *this = (*this) - subtract; } + inline Color operator-(uint8_t subtract) const ESPHOME_ALWAYS_INLINE { return (*this) - Color(subtract, subtract, subtract, subtract); } - inline Color &operator-=(uint8_t subtract) ALWAYS_INLINE { return *this = (*this) - subtract; } + inline Color &operator-=(uint8_t subtract) ESPHOME_ALWAYS_INLINE { return *this = (*this) - subtract; } static Color random_color() { uint32_t rand = random_uint32(); uint8_t w = rand >> 24; diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index b2d72b0fab..809e7d6767 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -24,7 +24,7 @@ #define HOT __attribute__((hot)) #define ESPDEPRECATED(msg, when) __attribute__((deprecated(msg))) -#define ALWAYS_INLINE __attribute__((always_inline)) +#define ESPHOME_ALWAYS_INLINE __attribute__((always_inline)) #define PACKED __attribute__((packed)) // Various functions can be constexpr in C++14, but not in C++11 (because their body isn't just a return statement). From 8796a4c1a7b0446f77aa439692a2ca0aab6648ee Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Mon, 6 May 2024 00:10:49 +0200 Subject: [PATCH 124/313] print task name if logger is called from other than main thread (#6630) --- esphome/components/logger/logger.cpp | 21 ++++++++++++++++++++- esphome/components/logger/logger.h | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/esphome/components/logger/logger.cpp b/esphome/components/logger/logger.cpp index 166fe2693d..dac08fbbce 100644 --- a/esphome/components/logger/logger.cpp +++ b/esphome/components/logger/logger.cpp @@ -39,7 +39,23 @@ void Logger::write_header_(int level, const char *tag, int line) { const char *color = LOG_LEVEL_COLORS[level]; const char *letter = LOG_LEVEL_LETTERS[level]; - this->printf_to_buffer_("%s[%s][%s:%03u]: ", color, letter, tag, line); +#if defined(USE_ESP32) || defined(USE_LIBRETINY) + TaskHandle_t current_task = xTaskGetCurrentTaskHandle(); +#else + void *current_task = nullptr; +#endif + if (current_task == main_task_) { + this->printf_to_buffer_("%s[%s][%s:%03u]: ", color, letter, tag, line); + } else { + const char *thread_name = ""; +#if defined(USE_ESP32) + thread_name = pcTaskGetName(current_task); +#elif defined(USE_LIBRETINY) + thread_name = pcTaskGetTaskName(current_task); +#endif + this->printf_to_buffer_("%s[%s][%s:%03u]%s[%s]%s: ", color, letter, tag, line, + ESPHOME_LOG_BOLD(ESPHOME_LOG_COLOR_RED), thread_name, color); + } } void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *format, va_list args) { // NOLINT @@ -127,6 +143,9 @@ void HOT Logger::log_message_(int level, const char *tag, int offset) { Logger::Logger(uint32_t baud_rate, size_t tx_buffer_size) : baud_rate_(baud_rate), tx_buffer_size_(tx_buffer_size) { // add 1 to buffer size for null terminator this->tx_buffer_ = new char[this->tx_buffer_size_ + 1]; // NOLINT +#if defined(USE_ESP32) || defined(USE_LIBRETINY) + this->main_task_ = xTaskGetCurrentTaskHandle(); +#endif } #ifdef USE_LOGGER_USB_CDC diff --git a/esphome/components/logger/logger.h b/esphome/components/logger/logger.h index f6c1574ffb..b55cfb0771 100644 --- a/esphome/components/logger/logger.h +++ b/esphome/components/logger/logger.h @@ -167,6 +167,7 @@ class Logger : public Component { CallbackManager log_callback_{}; /// Prevents recursive log calls, if true a log message is already being processed. bool recursion_guard_ = false; + void *main_task_ = nullptr; }; extern Logger *global_logger; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) From f78397c77e4403f510d7b02bd3b5a0f54b5b284d Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Mon, 6 May 2024 00:12:09 +0200 Subject: [PATCH 125/313] Fix recent definitions into `defines.h` (#6667) Co-authored-by: Keith Burzinski --- esphome/core/defines.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/esphome/core/defines.h b/esphome/core/defines.h index b09373bcde..c2ad0f641c 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -15,18 +15,23 @@ #define ESPHOME_VARIANT "ESP32" // Feature flags +#define USE_ALARM_CONTROL_PANEL #define USE_API #define USE_API_NOISE #define USE_API_PLAINTEXT -#define USE_ALARM_CONTROL_PANEL #define USE_BINARY_SENSOR #define USE_BUTTON #define USE_CLIMATE #define USE_COVER +#define USE_DATETIME +#define USE_DATETIME_DATE +#define USE_DATETIME_DATETIME +#define USE_DATETIME_TIME #define USE_DEEP_SLEEP #define USE_EVENT #define USE_FAN #define USE_GRAPH +#define USE_GRAPHICAL_DISPLAY_MENU #define USE_HOMEASSISTANT_TIME #define USE_JSON #define USE_LIGHT @@ -37,10 +42,6 @@ #define USE_MQTT #define USE_NEXTION_TFT_UPLOAD #define USE_NUMBER -#define USE_DATETIME -#define USE_DATETIME_DATE -#define USE_DATETIME_TIME -#define USE_DATETIME_DATETIME #define USE_OTA #define USE_OTA_PASSWORD #define USE_OTA_STATE_CALLBACK @@ -60,7 +61,6 @@ #define USE_VALVE #define USE_WIFI #define USE_WIFI_AP -#define USE_GRAPHICAL_DISPLAY_MENU // Arduino-specific feature flags #ifdef USE_ARDUINO @@ -78,17 +78,19 @@ // ESP32-specific feature flags #ifdef USE_ESP32 +#define USE_BLUETOOTH_PROXY +#define USE_ESP32_BLE #define USE_ESP32_BLE_CLIENT #define USE_ESP32_BLE_SERVER #define USE_ESP32_CAMERA #define USE_IMPROV -#define USE_SOCKET_IMPL_BSD_SOCKETS -#define USE_WIFI_11KV_SUPPORT -#define USE_BLUETOOTH_PROXY -#define USE_VOICE_ASSISTANT #define USE_MICROPHONE +#define USE_PSRAM +#define USE_SOCKET_IMPL_BSD_SOCKETS #define USE_SPEAKER #define USE_SPI +#define USE_VOICE_ASSISTANT +#define USE_WIFI_11KV_SUPPORT #ifdef USE_ARDUINO #define USE_ARDUINO_VERSION_CODE VERSION_CODE(2, 0, 5) From 833d31ef7a0fdef1c434ec1d188b13a9e74d0091 Mon Sep 17 00:00:00 2001 From: mkmer Date: Sun, 5 May 2024 18:48:09 -0400 Subject: [PATCH 126/313] Add fast update to HMC5883L (#6669) --- esphome/components/hmc5883l/hmc5883l.cpp | 5 +++++ esphome/components/hmc5883l/hmc5883l.h | 1 + 2 files changed, 6 insertions(+) diff --git a/esphome/components/hmc5883l/hmc5883l.cpp b/esphome/components/hmc5883l/hmc5883l.cpp index de3903d7e2..24f4b3f8f1 100644 --- a/esphome/components/hmc5883l/hmc5883l.cpp +++ b/esphome/components/hmc5883l/hmc5883l.cpp @@ -1,5 +1,6 @@ #include "hmc5883l.h" #include "esphome/core/log.h" +#include "esphome/core/application.h" namespace esphome { namespace hmc5883l { @@ -31,6 +32,10 @@ void HMC5883LComponent::setup() { return; } + if (this->get_update_interval() < App.get_loop_interval()) { + high_freq_.start(); + } + if (id[0] != 0x48 || id[1] != 0x34 || id[2] != 0x33) { this->error_code_ = ID_REGISTERS; this->mark_failed(); diff --git a/esphome/components/hmc5883l/hmc5883l.h b/esphome/components/hmc5883l/hmc5883l.h index 3481f45dc8..06fba2af9d 100644 --- a/esphome/components/hmc5883l/hmc5883l.h +++ b/esphome/components/hmc5883l/hmc5883l.h @@ -63,6 +63,7 @@ class HMC5883LComponent : public PollingComponent, public i2c::I2CDevice { COMMUNICATION_FAILED, ID_REGISTERS, } error_code_; + HighFrequencyLoopRequester high_freq_; }; } // namespace hmc5883l From 599dbf27e068e4c69ad60b78ec11c5e46bb32992 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Mon, 6 May 2024 04:19:25 +0200 Subject: [PATCH 127/313] Minor tidy up of BME280 code (#6672) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/bme280_base/__init__.py | 107 ++++++++++++++++++ esphome/components/bme280_base/sensor.py | 106 ----------------- esphome/components/bme280_i2c/sensor.py | 8 +- esphome/components/bme280_spi/__init__.py | 1 - esphome/components/bme280_spi/bme280_spi.cpp | 29 +++-- esphome/components/bme280_spi/sensor.py | 13 +-- tests/components/bme280_i2c/common.yaml | 19 ++++ .../bme280_i2c/test.esp32-c3-idf.yaml | 21 +--- .../components/bme280_i2c/test.esp32-c3.yaml | 21 +--- .../components/bme280_i2c/test.esp32-idf.yaml | 21 +--- tests/components/bme280_i2c/test.esp32.yaml | 21 +--- tests/components/bme280_i2c/test.esp8266.yaml | 21 +--- tests/components/bme280_i2c/test.rp2040.yaml | 21 +--- tests/components/bme280_spi/common.yaml | 20 ++++ .../bme280_spi/test.esp32-c3-idf.yaml | 24 +--- .../components/bme280_spi/test.esp32-c3.yaml | 24 +--- .../components/bme280_spi/test.esp32-idf.yaml | 24 +--- tests/components/bme280_spi/test.esp32.yaml | 24 +--- tests/components/bme280_spi/test.esp8266.yaml | 24 +--- tests/components/bme280_spi/test.rp2040.yaml | 24 +--- tests/test1.yaml | 29 ----- 21 files changed, 231 insertions(+), 371 deletions(-) delete mode 100644 esphome/components/bme280_base/sensor.py create mode 100644 tests/components/bme280_i2c/common.yaml create mode 100644 tests/components/bme280_spi/common.yaml diff --git a/esphome/components/bme280_base/__init__.py b/esphome/components/bme280_base/__init__.py index f70ffa9520..6a5f7e1127 100644 --- a/esphome/components/bme280_base/__init__.py +++ b/esphome/components/bme280_base/__init__.py @@ -1 +1,108 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + CONF_HUMIDITY, + CONF_ID, + CONF_IIR_FILTER, + CONF_OVERSAMPLING, + CONF_PRESSURE, + CONF_TEMPERATURE, + DEVICE_CLASS_HUMIDITY, + DEVICE_CLASS_PRESSURE, + DEVICE_CLASS_TEMPERATURE, + STATE_CLASS_MEASUREMENT, + UNIT_CELSIUS, + UNIT_HECTOPASCAL, + UNIT_PERCENT, +) + CODEOWNERS = ["@esphome/core"] + +bme280_ns = cg.esphome_ns.namespace("bme280_base") +BME280Oversampling = bme280_ns.enum("BME280Oversampling") +OVERSAMPLING_OPTIONS = { + "NONE": BME280Oversampling.BME280_OVERSAMPLING_NONE, + "1X": BME280Oversampling.BME280_OVERSAMPLING_1X, + "2X": BME280Oversampling.BME280_OVERSAMPLING_2X, + "4X": BME280Oversampling.BME280_OVERSAMPLING_4X, + "8X": BME280Oversampling.BME280_OVERSAMPLING_8X, + "16X": BME280Oversampling.BME280_OVERSAMPLING_16X, +} + +BME280IIRFilter = bme280_ns.enum("BME280IIRFilter") +IIR_FILTER_OPTIONS = { + "OFF": BME280IIRFilter.BME280_IIR_FILTER_OFF, + "2X": BME280IIRFilter.BME280_IIR_FILTER_2X, + "4X": BME280IIRFilter.BME280_IIR_FILTER_4X, + "8X": BME280IIRFilter.BME280_IIR_FILTER_8X, + "16X": BME280IIRFilter.BME280_IIR_FILTER_16X, +} + +CONFIG_SCHEMA_BASE = cv.Schema( + { + cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema( + unit_of_measurement=UNIT_CELSIUS, + accuracy_decimals=1, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + ).extend( + { + cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( + OVERSAMPLING_OPTIONS, upper=True + ), + } + ), + cv.Optional(CONF_PRESSURE): sensor.sensor_schema( + unit_of_measurement=UNIT_HECTOPASCAL, + accuracy_decimals=1, + device_class=DEVICE_CLASS_PRESSURE, + state_class=STATE_CLASS_MEASUREMENT, + ).extend( + { + cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( + OVERSAMPLING_OPTIONS, upper=True + ), + } + ), + cv.Optional(CONF_HUMIDITY): sensor.sensor_schema( + unit_of_measurement=UNIT_PERCENT, + accuracy_decimals=1, + device_class=DEVICE_CLASS_HUMIDITY, + state_class=STATE_CLASS_MEASUREMENT, + ).extend( + { + cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( + OVERSAMPLING_OPTIONS, upper=True + ), + } + ), + cv.Optional(CONF_IIR_FILTER, default="OFF"): cv.enum( + IIR_FILTER_OPTIONS, upper=True + ), + } +).extend(cv.polling_component_schema("60s")) + + +async def to_code_base(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + + if temperature_config := config.get(CONF_TEMPERATURE): + sens = await sensor.new_sensor(temperature_config) + cg.add(var.set_temperature_sensor(sens)) + cg.add(var.set_temperature_oversampling(temperature_config[CONF_OVERSAMPLING])) + + if pressure_config := config.get(CONF_PRESSURE): + sens = await sensor.new_sensor(pressure_config) + cg.add(var.set_pressure_sensor(sens)) + cg.add(var.set_pressure_oversampling(pressure_config[CONF_OVERSAMPLING])) + + if humidity_config := config.get(CONF_HUMIDITY): + sens = await sensor.new_sensor(humidity_config) + cg.add(var.set_humidity_sensor(sens)) + cg.add(var.set_humidity_oversampling(humidity_config[CONF_OVERSAMPLING])) + + cg.add(var.set_iir_filter(config[CONF_IIR_FILTER])) + + return var diff --git a/esphome/components/bme280_base/sensor.py b/esphome/components/bme280_base/sensor.py deleted file mode 100644 index 3a745ed348..0000000000 --- a/esphome/components/bme280_base/sensor.py +++ /dev/null @@ -1,106 +0,0 @@ -import esphome.codegen as cg -import esphome.config_validation as cv -from esphome.components import sensor -from esphome.const import ( - CONF_HUMIDITY, - CONF_ID, - CONF_IIR_FILTER, - CONF_OVERSAMPLING, - CONF_PRESSURE, - CONF_TEMPERATURE, - DEVICE_CLASS_HUMIDITY, - DEVICE_CLASS_PRESSURE, - DEVICE_CLASS_TEMPERATURE, - STATE_CLASS_MEASUREMENT, - UNIT_CELSIUS, - UNIT_HECTOPASCAL, - UNIT_PERCENT, -) - -bme280_ns = cg.esphome_ns.namespace("bme280_base") -BME280Oversampling = bme280_ns.enum("BME280Oversampling") -OVERSAMPLING_OPTIONS = { - "NONE": BME280Oversampling.BME280_OVERSAMPLING_NONE, - "1X": BME280Oversampling.BME280_OVERSAMPLING_1X, - "2X": BME280Oversampling.BME280_OVERSAMPLING_2X, - "4X": BME280Oversampling.BME280_OVERSAMPLING_4X, - "8X": BME280Oversampling.BME280_OVERSAMPLING_8X, - "16X": BME280Oversampling.BME280_OVERSAMPLING_16X, -} - -BME280IIRFilter = bme280_ns.enum("BME280IIRFilter") -IIR_FILTER_OPTIONS = { - "OFF": BME280IIRFilter.BME280_IIR_FILTER_OFF, - "2X": BME280IIRFilter.BME280_IIR_FILTER_2X, - "4X": BME280IIRFilter.BME280_IIR_FILTER_4X, - "8X": BME280IIRFilter.BME280_IIR_FILTER_8X, - "16X": BME280IIRFilter.BME280_IIR_FILTER_16X, -} - -CONFIG_SCHEMA_BASE = cv.Schema( - { - cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema( - unit_of_measurement=UNIT_CELSIUS, - accuracy_decimals=1, - device_class=DEVICE_CLASS_TEMPERATURE, - state_class=STATE_CLASS_MEASUREMENT, - ).extend( - { - cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( - OVERSAMPLING_OPTIONS, upper=True - ), - } - ), - cv.Optional(CONF_PRESSURE): sensor.sensor_schema( - unit_of_measurement=UNIT_HECTOPASCAL, - accuracy_decimals=1, - device_class=DEVICE_CLASS_PRESSURE, - state_class=STATE_CLASS_MEASUREMENT, - ).extend( - { - cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( - OVERSAMPLING_OPTIONS, upper=True - ), - } - ), - cv.Optional(CONF_HUMIDITY): sensor.sensor_schema( - unit_of_measurement=UNIT_PERCENT, - accuracy_decimals=1, - device_class=DEVICE_CLASS_HUMIDITY, - state_class=STATE_CLASS_MEASUREMENT, - ).extend( - { - cv.Optional(CONF_OVERSAMPLING, default="16X"): cv.enum( - OVERSAMPLING_OPTIONS, upper=True - ), - } - ), - cv.Optional(CONF_IIR_FILTER, default="OFF"): cv.enum( - IIR_FILTER_OPTIONS, upper=True - ), - } -).extend(cv.polling_component_schema("60s")) - - -async def to_code(config, func=None): - var = cg.new_Pvariable(config[CONF_ID]) - await cg.register_component(var, config) - if func is not None: - await func(var, config) - - if temperature_config := config.get(CONF_TEMPERATURE): - sens = await sensor.new_sensor(temperature_config) - cg.add(var.set_temperature_sensor(sens)) - cg.add(var.set_temperature_oversampling(temperature_config[CONF_OVERSAMPLING])) - - if pressure_config := config.get(CONF_PRESSURE): - sens = await sensor.new_sensor(pressure_config) - cg.add(var.set_pressure_sensor(sens)) - cg.add(var.set_pressure_oversampling(pressure_config[CONF_OVERSAMPLING])) - - if humidity_config := config.get(CONF_HUMIDITY): - sens = await sensor.new_sensor(humidity_config) - cg.add(var.set_humidity_sensor(sens)) - cg.add(var.set_humidity_oversampling(humidity_config[CONF_OVERSAMPLING])) - - cg.add(var.set_iir_filter(config[CONF_IIR_FILTER])) diff --git a/esphome/components/bme280_i2c/sensor.py b/esphome/components/bme280_i2c/sensor.py index 489c52969d..f3007ebaac 100644 --- a/esphome/components/bme280_i2c/sensor.py +++ b/esphome/components/bme280_i2c/sensor.py @@ -1,9 +1,10 @@ import esphome.codegen as cg +import esphome.config_validation as cv from esphome.components import i2c -from ..bme280_base.sensor import to_code as to_code_base, cv, CONFIG_SCHEMA_BASE +from ..bme280_base import to_code_base, CONFIG_SCHEMA_BASE -DEPENDENCIES = ["i2c"] AUTO_LOAD = ["bme280_base"] +DEPENDENCIES = ["i2c"] bme280_ns = cg.esphome_ns.namespace("bme280_i2c") BME280I2CComponent = bme280_ns.class_( @@ -16,4 +17,5 @@ CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend( async def to_code(config): - await to_code_base(config, func=i2c.register_i2c_device) + var = await to_code_base(config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/bme280_spi/__init__.py b/esphome/components/bme280_spi/__init__.py index a1d33e4d7a..e69de29bb2 100644 --- a/esphome/components/bme280_spi/__init__.py +++ b/esphome/components/bme280_spi/__init__.py @@ -1 +0,0 @@ -CODEOWNERS = ["@apbodrov"] diff --git a/esphome/components/bme280_spi/bme280_spi.cpp b/esphome/components/bme280_spi/bme280_spi.cpp index 921128c8f5..c6ebfdfd0b 100644 --- a/esphome/components/bme280_spi/bme280_spi.cpp +++ b/esphome/components/bme280_spi/bme280_spi.cpp @@ -4,19 +4,19 @@ #include "bme280_spi.h" #include -int set_bit(uint8_t num, int position) { +namespace esphome { +namespace bme280_spi { + +uint8_t set_bit(uint8_t num, int position) { int mask = 1 << position; return num | mask; } -int clear_bit(uint8_t num, int position) { +uint8_t clear_bit(uint8_t num, int position) { int mask = 1 << position; return num & ~mask; } -namespace esphome { -namespace bme280_spi { - void BME280SPIComponent::setup() { this->spi_setup(); BME280Component::setup(); @@ -30,34 +30,33 @@ void BME280SPIComponent::setup() { bool BME280SPIComponent::read_byte(uint8_t a_register, uint8_t *data) { this->enable(); - // cause: *data = this->delegate_->transfer(tmp) doesnt work - this->delegate_->transfer(set_bit(a_register, 7)); - *data = this->delegate_->transfer(0); + this->transfer_byte(set_bit(a_register, 7)); + *data = this->transfer_byte(0); this->disable(); return true; } bool BME280SPIComponent::write_byte(uint8_t a_register, uint8_t data) { this->enable(); - this->delegate_->transfer(clear_bit(a_register, 7)); - this->delegate_->transfer(data); + this->transfer_byte(clear_bit(a_register, 7)); + this->transfer_byte(data); this->disable(); return true; } bool BME280SPIComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) { this->enable(); - this->delegate_->transfer(set_bit(a_register, 7)); - this->delegate_->read_array(data, len); + this->transfer_byte(set_bit(a_register, 7)); + this->read_array(data, len); this->disable(); return true; } bool BME280SPIComponent::read_byte_16(uint8_t a_register, uint16_t *data) { this->enable(); - this->delegate_->transfer(set_bit(a_register, 7)); - ((uint8_t *) data)[1] = this->delegate_->transfer(0); - ((uint8_t *) data)[0] = this->delegate_->transfer(0); + this->transfer_byte(set_bit(a_register, 7)); + ((uint8_t *) data)[1] = this->transfer_byte(0); + ((uint8_t *) data)[0] = this->transfer_byte(0); this->disable(); return true; } diff --git a/esphome/components/bme280_spi/sensor.py b/esphome/components/bme280_spi/sensor.py index 3cfe1b3cdd..33a12318a5 100644 --- a/esphome/components/bme280_spi/sensor.py +++ b/esphome/components/bme280_spi/sensor.py @@ -1,13 +1,11 @@ import esphome.codegen as cg +import esphome.config_validation as cv from esphome.components import spi -from esphome.components.bme280_base.sensor import ( - to_code as to_code_base, - cv, - CONFIG_SCHEMA_BASE, -) +from ..bme280_base import to_code_base, CONFIG_SCHEMA_BASE -DEPENDENCIES = ["spi"] AUTO_LOAD = ["bme280_base"] +CODEOWNERS = ["@apbodrov"] +DEPENDENCIES = ["spi"] bme280_spi_ns = cg.esphome_ns.namespace("bme280_spi") @@ -21,4 +19,5 @@ CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend(spi.spi_device_schema()).extend( async def to_code(config): - await to_code_base(config, func=spi.register_spi_device) + var = await to_code_base(config) + await spi.register_spi_device(var, config) diff --git a/tests/components/bme280_i2c/common.yaml b/tests/components/bme280_i2c/common.yaml new file mode 100644 index 0000000000..e74ce9bf6d --- /dev/null +++ b/tests/components/bme280_i2c/common.yaml @@ -0,0 +1,19 @@ +i2c: + - id: i2c_bme280 + scl: ${scl_pin} + sda: ${sda_pin} + +sensor: + - platform: bme280_i2c + i2c_id: i2c_bme280 + address: 0x76 + temperature: + id: bme280_temperature + name: BME280 Temperature + humidity: + id: bme280_humidity + name: BME280 Humidity + pressure: + id: bme280_pressure + name: BME280 Pressure + update_interval: 15s diff --git a/tests/components/bme280_i2c/test.esp32-c3-idf.yaml b/tests/components/bme280_i2c/test.esp32-c3-idf.yaml index 070c2845d9..ee2c29ca4e 100644 --- a/tests/components/bme280_i2c/test.esp32-c3-idf.yaml +++ b/tests/components/bme280_i2c/test.esp32-c3-idf.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 5 - sda: 4 +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_i2c/test.esp32-c3.yaml b/tests/components/bme280_i2c/test.esp32-c3.yaml index 070c2845d9..ee2c29ca4e 100644 --- a/tests/components/bme280_i2c/test.esp32-c3.yaml +++ b/tests/components/bme280_i2c/test.esp32-c3.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 5 - sda: 4 +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_i2c/test.esp32-idf.yaml b/tests/components/bme280_i2c/test.esp32-idf.yaml index e379b98874..63c3bd6afd 100644 --- a/tests/components/bme280_i2c/test.esp32-idf.yaml +++ b/tests/components/bme280_i2c/test.esp32-idf.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 16 - sda: 17 +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_i2c/test.esp32.yaml b/tests/components/bme280_i2c/test.esp32.yaml index e379b98874..63c3bd6afd 100644 --- a/tests/components/bme280_i2c/test.esp32.yaml +++ b/tests/components/bme280_i2c/test.esp32.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 16 - sda: 17 +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_i2c/test.esp8266.yaml b/tests/components/bme280_i2c/test.esp8266.yaml index 070c2845d9..ee2c29ca4e 100644 --- a/tests/components/bme280_i2c/test.esp8266.yaml +++ b/tests/components/bme280_i2c/test.esp8266.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 5 - sda: 4 +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_i2c/test.rp2040.yaml b/tests/components/bme280_i2c/test.rp2040.yaml index 070c2845d9..ee2c29ca4e 100644 --- a/tests/components/bme280_i2c/test.rp2040.yaml +++ b/tests/components/bme280_i2c/test.rp2040.yaml @@ -1,18 +1,5 @@ -i2c: - - id: i2c_bme280 - scl: 5 - sda: 4 +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 -sensor: - - platform: bme280_i2c - address: 0x76 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/common.yaml b/tests/components/bme280_spi/common.yaml new file mode 100644 index 0000000000..303ecf9f73 --- /dev/null +++ b/tests/components/bme280_spi/common.yaml @@ -0,0 +1,20 @@ +spi: + - id: spi_bme280 + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +sensor: + - platform: bme280_spi + spi_id: spi_bme280 + cs_pin: ${cs_pin} + temperature: + id: bme280_temperature + name: BME280 Temperature + humidity: + id: bme280_humidity + name: BME280 Humidity + pressure: + id: bme280_pressure + name: BME280 Pressure + update_interval: 15s diff --git a/tests/components/bme280_spi/test.esp32-c3-idf.yaml b/tests/components/bme280_spi/test.esp32-c3-idf.yaml index 4bc7c14e6c..2415ba5dc6 100644 --- a/tests/components/bme280_spi/test.esp32-c3-idf.yaml +++ b/tests/components/bme280_spi/test.esp32-c3-idf.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 6 - mosi_pin: 7 - miso_pin: 5 +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 -sensor: - - platform: bme280_spi - cs_pin: 8 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/test.esp32-c3.yaml b/tests/components/bme280_spi/test.esp32-c3.yaml index 4bc7c14e6c..2415ba5dc6 100644 --- a/tests/components/bme280_spi/test.esp32-c3.yaml +++ b/tests/components/bme280_spi/test.esp32-c3.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 6 - mosi_pin: 7 - miso_pin: 5 +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 -sensor: - - platform: bme280_spi - cs_pin: 8 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/test.esp32-idf.yaml b/tests/components/bme280_spi/test.esp32-idf.yaml index ebb3d98213..54e027a614 100644 --- a/tests/components/bme280_spi/test.esp32-idf.yaml +++ b/tests/components/bme280_spi/test.esp32-idf.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 16 - mosi_pin: 17 - miso_pin: 15 +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 -sensor: - - platform: bme280_spi - cs_pin: 12 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/test.esp32.yaml b/tests/components/bme280_spi/test.esp32.yaml index ebb3d98213..54e027a614 100644 --- a/tests/components/bme280_spi/test.esp32.yaml +++ b/tests/components/bme280_spi/test.esp32.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 16 - mosi_pin: 17 - miso_pin: 15 +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 -sensor: - - platform: bme280_spi - cs_pin: 12 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/test.esp8266.yaml b/tests/components/bme280_spi/test.esp8266.yaml index 63013abb87..dbd158d030 100644 --- a/tests/components/bme280_spi/test.esp8266.yaml +++ b/tests/components/bme280_spi/test.esp8266.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 14 - mosi_pin: 13 - miso_pin: 12 +substitutions: + clk_pin: GPIO14 + mosi_pin: GPIO13 + miso_pin: GPIO12 + cs_pin: GPIO15 -sensor: - - platform: bme280_spi - cs_pin: 15 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/bme280_spi/test.rp2040.yaml b/tests/components/bme280_spi/test.rp2040.yaml index ba5cb483c6..f6c3f1eeca 100644 --- a/tests/components/bme280_spi/test.rp2040.yaml +++ b/tests/components/bme280_spi/test.rp2040.yaml @@ -1,19 +1,7 @@ -spi: - - id: spi_bme280 - clk_pin: 2 - mosi_pin: 3 - miso_pin: 4 +substitutions: + clk_pin: GPIO2 + mosi_pin: GPIO3 + miso_pin: GPIO4 + cs_pin: GPIO5 -sensor: - - platform: bme280_spi - cs_pin: 6 - temperature: - id: bme280_temperature - name: BME280 Temperature - humidity: - id: bme280_humidity - name: BME280 Humidity - pressure: - id: bme280_pressure - name: BME280 Pressure - update_interval: 15s +<<: !include common.yaml diff --git a/tests/test1.yaml b/tests/test1.yaml index 09994afa42..79b836da4a 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -705,35 +705,6 @@ sensor: update_interval: 30s mode: low_power i2c_id: i2c_bus - - platform: bme280_i2c - temperature: - name: Outside Temperature - oversampling: 16x - pressure: - name: Outside Pressure - oversampling: none - humidity: - name: Outside Humidity - oversampling: 8x - address: 0x77 - iir_filter: 16x - update_interval: 15s - i2c_id: i2c_bus - - platform: bme280_spi - temperature: - name: Outside Temperature - oversampling: 16x - pressure: - name: Outside Pressure - oversampling: none - humidity: - name: Outside Humidity - oversampling: 8x - cs_pin: - allow_other_uses: true - number: GPIO23 - iir_filter: 16x - update_interval: 15s - platform: bme680 temperature: name: Outside Temperature From f2caaf85c89f35fb65d136f38f558da62eb442fa Mon Sep 17 00:00:00 2001 From: Tomek Wasilczyk Date: Sun, 5 May 2024 20:19:13 -0700 Subject: [PATCH 128/313] External components: optional configurable path for git source (#6677) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/external_components/__init__.py | 11 ++++++++++- esphome/config_validation.py | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/esphome/components/external_components/__init__.py b/esphome/components/external_components/__init__.py index bbb703dc5c..f4432a0362 100644 --- a/esphome/components/external_components/__init__.py +++ b/esphome/components/external_components/__init__.py @@ -49,7 +49,16 @@ def _process_git_config(config: dict, refresh) -> str: password=config.get(CONF_PASSWORD), ) - if (repo_dir / "esphome" / "components").is_dir(): + if path := config.get(CONF_PATH): + if (repo_dir / path).is_dir(): + components_dir = repo_dir / path + else: + raise cv.Invalid( + "Could not find components folder for source. Please check the source contains a '" + + path + + "' folder" + ) + elif (repo_dir / "esphome" / "components").is_dir(): components_dir = repo_dir / "esphome" / "components" elif (repo_dir / "components").is_dir(): components_dir = repo_dir / "components" diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 198b44f38d..3554f03836 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -2124,6 +2124,7 @@ GIT_SCHEMA = Schema( Optional(CONF_REF): git_ref, Optional(CONF_USERNAME): string, Optional(CONF_PASSWORD): string, + Optional(CONF_PATH): string, } ) LOCAL_SCHEMA = Schema( From d1758a46bd24c9631e55d500d61da7ff522627e7 Mon Sep 17 00:00:00 2001 From: Markus <974709+Links2004@users.noreply.github.com> Date: Mon, 6 May 2024 21:17:03 +0200 Subject: [PATCH 129/313] Use clang-apply-replacements when clang-apply-replacements-14 does not exist (#6684) --- script/clang-tidy | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/script/clang-tidy b/script/clang-tidy index 97e4ba0d48..84b02306d5 100755 --- a/script/clang-tidy +++ b/script/clang-tidy @@ -266,7 +266,12 @@ def main(): if args.fix and failed_files: print("Applying fixes ...") try: - subprocess.call(["clang-apply-replacements-14", tmpdir]) + try: + subprocess.call(["clang-apply-replacements-14", tmpdir]) + except FileNotFoundError: + subprocess.call(["clang-apply-replacements", tmpdir]) + except FileNotFoundError: + print("Error please install clang-apply-replacements-14 or clang-apply-replacements.\n", file=sys.stderr) except: print("Error applying fixes.\n", file=sys.stderr) raise From 8463f897e1a7992c87c608270394563dee6e9a66 Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Mon, 6 May 2024 21:20:01 +0200 Subject: [PATCH 130/313] fix conflict with EMPTY macro in zephyr (#6679) --- esphome/core/automation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/core/automation.h b/esphome/core/automation.h index 8c3da5e7e8..9b62640a0c 100644 --- a/esphome/core/automation.h +++ b/esphome/core/automation.h @@ -24,7 +24,7 @@ template struct gens<0, S...> { using type = seq; }; // NOLINT template class TemplatableValue { public: - TemplatableValue() : type_(EMPTY) {} + TemplatableValue() : type_(NONE) {} template::value, int> = 0> TemplatableValue(F value) : type_(VALUE), value_(value) {} @@ -32,13 +32,13 @@ template class TemplatableValue { template::value, int> = 0> TemplatableValue(F f) : type_(LAMBDA), f_(f) {} - bool has_value() { return this->type_ != EMPTY; } + bool has_value() { return this->type_ != NONE; } T value(X... x) { if (this->type_ == LAMBDA) { return this->f_(x...); } - // return value also when empty + // return value also when none return this->value_; } @@ -58,7 +58,7 @@ template class TemplatableValue { protected: enum { - EMPTY, + NONE, VALUE, LAMBDA, } type_; From 594769be3ca9bb082fea9c56cc8922b69a483f0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 09:09:04 +1200 Subject: [PATCH 131/313] Bump actions/checkout from 4.1.1 to 4.1.5 (#6685) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-api-proto.yml | 2 +- .github/workflows/ci-docker.yml | 2 +- .github/workflows/ci.yml | 32 +++++++++++------------ .github/workflows/release.yml | 8 +++--- .github/workflows/sync-device-classes.yml | 4 +-- .github/workflows/yaml-lint.yml | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci-api-proto.yml b/.github/workflows/ci-api-proto.yml index 40766ad728..448d0fd10f 100644 --- a/.github/workflows/ci-api-proto.yml +++ b/.github/workflows/ci-api-proto.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Set up Python uses: actions/setup-python@v5.1.0 with: diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 6063d1e052..72a16233fb 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -40,7 +40,7 @@ jobs: arch: [amd64, armv7, aarch64] build_type: ["ha-addon", "docker", "lint"] steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4.1.5 - name: Set up Python uses: actions/setup-python@v5.1.0 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd7a45ff50..fbebc55676 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: cache-key: ${{ steps.cache-key.outputs.key }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Generate cache-key id: cache-key run: echo key="${{ hashFiles('requirements.txt', 'requirements_optional.txt', 'requirements_test.txt') }}" >> $GITHUB_OUTPUT @@ -66,7 +66,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -87,7 +87,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -108,7 +108,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -129,7 +129,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -150,7 +150,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -199,7 +199,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -229,7 +229,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -254,7 +254,7 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Find all YAML test files id: set-matrix run: echo "matrix=$(ls tests/test*.yaml | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT @@ -271,7 +271,7 @@ jobs: file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -303,7 +303,7 @@ jobs: file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -358,7 +358,7 @@ jobs: steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -402,7 +402,7 @@ jobs: count: ${{ steps.list-components.outputs.count }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 with: # Fetch enough history so `git merge-base refs/remotes/origin/dev HEAD` works. fetch-depth: 500 @@ -450,7 +450,7 @@ jobs: run: sudo apt-get install libsodium-dev - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -476,7 +476,7 @@ jobs: matrix: ${{ steps.split.outputs.components }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Split components into 20 groups id: split run: | @@ -504,7 +504,7 @@ jobs: run: sudo apt-get install libsodium-dev - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Restore Python uses: ./.github/actions/restore-python with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 72b06ab4fe..6d91d00b85 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: tag: ${{ steps.tag.outputs.tag }} branch_build: ${{ steps.tag.outputs.branch_build }} steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4.1.5 - name: Get tag id: tag # yamllint disable rule:line-length @@ -51,7 +51,7 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4.1.5 - name: Set up Python uses: actions/setup-python@v5.1.0 with: @@ -81,7 +81,7 @@ jobs: - linux/arm/v7 - linux/arm64 steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4.1.5 - name: Set up Python uses: actions/setup-python@v5.1.0 with: @@ -159,7 +159,7 @@ jobs: - ghcr - dockerhub steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4.1.5 - name: Download digests uses: actions/download-artifact@v3.0.2 with: diff --git a/.github/workflows/sync-device-classes.yml b/.github/workflows/sync-device-classes.yml index c9614618d5..7d67999b77 100644 --- a/.github/workflows/sync-device-classes.yml +++ b/.github/workflows/sync-device-classes.yml @@ -13,10 +13,10 @@ jobs: if: github.repository == 'esphome/esphome' steps: - name: Checkout - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Checkout Home Assistant - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 with: repository: home-assistant/core path: lib/home-assistant diff --git a/.github/workflows/yaml-lint.yml b/.github/workflows/yaml-lint.yml index a3c1937e56..761247529b 100644 --- a/.github/workflows/yaml-lint.yml +++ b/.github/workflows/yaml-lint.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.1 + uses: actions/checkout@v4.1.5 - name: Run yamllint uses: frenck/action-yamllint@v1.5.0 with: From 5ee2a5f9352ded83fbd080923c44b3f98ce2d0f2 Mon Sep 17 00:00:00 2001 From: RFDarter Date: Tue, 7 May 2024 00:44:49 +0200 Subject: [PATCH 132/313] Fix Datetime-Datetime compiler error (#6686) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/template/datetime/template_datetime.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/template/datetime/template_datetime.h b/esphome/components/template/datetime/template_datetime.h index cb1fd01132..ef80ded89a 100644 --- a/esphome/components/template/datetime/template_datetime.h +++ b/esphome/components/template/datetime/template_datetime.h @@ -2,7 +2,7 @@ #include "esphome/core/defines.h" -#ifdef USE_DATETIME_TIME +#ifdef USE_DATETIME_DATETIME #include "esphome/components/datetime/datetime_entity.h" #include "esphome/core/automation.h" @@ -43,4 +43,4 @@ class TemplateDateTime : public datetime::DateTimeEntity, public PollingComponen } // namespace template_ } // namespace esphome -#endif // USE_DATETIME_TIME +#endif // USE_DATETIME_DATETIME From 7b0536fda35b49478e2b764997ec689b8d844175 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 7 May 2024 11:54:01 +1200 Subject: [PATCH 133/313] Bump esphome/ESPAsyncWebServer-esphome to 3.2.0 (#6687) --- esphome/components/web_server_base/__init__.py | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/web_server_base/__init__.py b/esphome/components/web_server_base/__init__.py index 6491446bcc..1970b5a0c5 100644 --- a/esphome/components/web_server_base/__init__.py +++ b/esphome/components/web_server_base/__init__.py @@ -37,4 +37,4 @@ async def to_code(config): cg.add_library("FS", None) cg.add_library("Update", None) # https://github.com/esphome/ESPAsyncWebServer/blob/master/library.json - cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.1.0") + cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.2.0") diff --git a/platformio.ini b/platformio.ini index 5fedd14086..e699057fa3 100644 --- a/platformio.ini +++ b/platformio.ini @@ -58,7 +58,7 @@ lib_deps = SPI ; spi (Arduino built-in) Wire ; i2c (Arduino built-int) heman/AsyncMqttClient-esphome@1.0.0 ; mqtt - esphome/ESPAsyncWebServer-esphome@2.1.0 ; web_server_base + esphome/ESPAsyncWebServer-esphome@3.2.0 ; web_server_base fastled/FastLED@3.3.2 ; fastled_base mikalhart/TinyGPSPlus@1.0.2 ; gps freekode/TM1651@1.0.1 ; tm1651 From 1e196bac985e44a9121c937c60b1ada4e54772a8 Mon Sep 17 00:00:00 2001 From: RFDarter Date: Tue, 7 May 2024 02:47:07 +0200 Subject: [PATCH 134/313] fix date_time validation (#6688) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/datetime/__init__.py | 8 +- .../components/template/datetime/__init__.py | 10 ++- esphome/config_validation.py | 75 +++++++++---------- tests/components/template/common.yaml | 3 + 4 files changed, 49 insertions(+), 47 deletions(-) diff --git a/esphome/components/datetime/__init__.py b/esphome/components/datetime/__init__.py index 639a035159..3d08e4a6d0 100644 --- a/esphome/components/datetime/__init__.py +++ b/esphome/components/datetime/__init__.py @@ -169,7 +169,7 @@ async def to_code(config): { cv.Required(CONF_ID): cv.use_id(DateEntity), cv.Required(CONF_DATE): cv.Any( - cv.returning_lambda, cv.date_time(allowed_time=False) + cv.returning_lambda, cv.date_time(date=True, time=False) ), } ), @@ -200,7 +200,7 @@ async def datetime_date_set_to_code(config, action_id, template_arg, args): { cv.Required(CONF_ID): cv.use_id(TimeEntity), cv.Required(CONF_TIME): cv.Any( - cv.returning_lambda, cv.date_time(allowed_date=False) + cv.returning_lambda, cv.date_time(date=False, time=True) ), } ), @@ -230,7 +230,9 @@ async def datetime_time_set_to_code(config, action_id, template_arg, args): cv.Schema( { cv.Required(CONF_ID): cv.use_id(DateTimeEntity), - cv.Required(CONF_DATETIME): cv.Any(cv.returning_lambda, cv.date_time()), + cv.Required(CONF_DATETIME): cv.Any( + cv.returning_lambda, cv.date_time(date=True, time=True) + ), }, ), ) diff --git a/esphome/components/template/datetime/__init__.py b/esphome/components/template/datetime/__init__.py index bf7154ef76..0c9447116f 100644 --- a/esphome/components/template/datetime/__init__.py +++ b/esphome/components/template/datetime/__init__.py @@ -72,21 +72,25 @@ CONFIG_SCHEMA = cv.All( .extend(_BASE_SCHEMA) .extend( { - cv.Optional(CONF_INITIAL_VALUE): cv.date_time(allowed_time=False), + cv.Optional(CONF_INITIAL_VALUE): cv.date_time( + date=True, time=False + ), } ), "TIME": datetime.time_schema(TemplateTime) .extend(_BASE_SCHEMA) .extend( { - cv.Optional(CONF_INITIAL_VALUE): cv.date_time(allowed_date=False), + cv.Optional(CONF_INITIAL_VALUE): cv.date_time( + date=False, time=True + ), } ), "DATETIME": datetime.datetime_schema(TemplateDateTime) .extend(_BASE_SCHEMA) .extend( { - cv.Optional(CONF_INITIAL_VALUE): cv.date_time(), + cv.Optional(CONF_INITIAL_VALUE): cv.date_time(date=True, time=True), } ), }, diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 3554f03836..512f1d8f67 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -821,57 +821,50 @@ positive_not_null_time_period = All( def time_of_day(value): - return date_time(allowed_date=False, allowed_time=True)(value) + return date_time(date=False, time=True)(value) -def date_time(allowed_date: bool = True, allowed_time: bool = True): +def date_time(date: bool, time: bool): pattern_str = r"^" # Start of string - if allowed_date: + if date: + pattern_str += r"\d{4}-\d{1,2}-\d{1,2}" + if time: + pattern_str += r" " + if time: pattern_str += ( - r"(" # 1. Optional Date group - r"\d{4}-\d{1,2}-\d{1,2}" # Date - r"(?:\s(?=.+))?" # Space after date only if time is following - r")?" # End optional Date group - ) - if allowed_time: - pattern_str += ( - r"(" # 2. Optional Time group - r"(\d{1,2}:\d{2})" # 3. Hour/Minute - r"(:\d{2})?" # 4. Seconds - r"(" # 5. Optional AM/PM group - r"(\s)?" # 6. Optional Space + r"\d{1,2}:\d{2}" # Hour/Minute + r"(:\d{2})?" # 1. Seconds + r"(" # 2. Optional AM/PM group + r"(\s)?" # 3. Optional Space r"(?:AM|PM|am|pm)" # AM/PM string matching r")?" # End optional AM/PM group - r")?" # End optional Time group ) pattern_str += r"$" # End of string pattern = re.compile(pattern_str) exc_message = "" - if allowed_date: + if date: exc_message += "date" - if allowed_time: - exc_message += "/" - if allowed_time: + if time: exc_message += "time" schema = Schema({}) - if allowed_date: + if date: schema = schema.extend( { - Optional(CONF_YEAR): int_range(min=1970, max=3000), - Optional(CONF_MONTH): int_range(min=1, max=12), - Optional(CONF_DAY): int_range(min=1, max=31), + Required(CONF_YEAR): int_range(min=1970, max=3000), + Required(CONF_MONTH): int_range(min=1, max=12), + Required(CONF_DAY): int_range(min=1, max=31), } ) - if allowed_time: + if time: schema = schema.extend( { - Optional(CONF_HOUR): int_range(min=0, max=23), - Optional(CONF_MINUTE): int_range(min=0, max=59), - Optional(CONF_SECOND): int_range(min=0, max=59), + Required(CONF_HOUR): int_range(min=0, max=23), + Required(CONF_MINUTE): int_range(min=0, max=59), + Required(CONF_SECOND): int_range(min=0, max=59), } ) @@ -885,21 +878,21 @@ def date_time(allowed_date: bool = True, allowed_time: bool = True): # pylint: disable=raise-missing-from raise Invalid(f"Invalid {exc_message}: {value}") - if allowed_date: - has_date = match[1] is not None - if allowed_time: - has_time = match[2] is not None - has_seconds = match[3] is not None - has_ampm = match[4] is not None - has_ampm_space = match[5] is not None + if time: + has_seconds = match[1] is not None + has_ampm = match[2] is not None + has_ampm_space = match[3] is not None format = "" - if allowed_date and has_date: + if date: format += "%Y-%m-%d" - if allowed_time and has_time: + if time: format += " " - if allowed_time and has_time: - format += "%H:%M" + if time: + if has_ampm: + format += "%I:%M" + else: + format += "%H:%M" if has_seconds: format += ":%S" if has_ampm_space: @@ -914,12 +907,12 @@ def date_time(allowed_date: bool = True, allowed_time: bool = True): raise Invalid(f"Invalid {exc_message}: {err}") return_value = {} - if allowed_date and has_date: + if date: return_value[CONF_YEAR] = date_obj.year return_value[CONF_MONTH] = date_obj.month return_value[CONF_DAY] = date_obj.day - if allowed_time and has_time: + if time: return_value[CONF_HOUR] = date_obj.hour return_value[CONF_MINUTE] = date_obj.minute return_value[CONF_SECOND] = date_obj.second if has_seconds else 0 diff --git a/tests/components/template/common.yaml b/tests/components/template/common.yaml index 2b91225b5a..9e89424d8a 100644 --- a/tests/components/template/common.yaml +++ b/tests/components/template/common.yaml @@ -172,6 +172,7 @@ datetime: name: Date id: test_date type: date + initial_value: "2000-1-2" set_action: - logger.log: "set_value" on_value: @@ -185,6 +186,7 @@ datetime: name: Time id: test_time type: time + initial_value: "12:34:56am" set_action: - logger.log: "set_value" on_value: @@ -198,6 +200,7 @@ datetime: name: DateTime id: test_datetime type: datetime + initial_value: "2000-1-2 12:34:56" set_action: - logger.log: "set_value" on_value: From 5edf4970bde1d2d5dda2fa34c1ba062a8f3aa8a1 Mon Sep 17 00:00:00 2001 From: Samuel Sieb Date: Mon, 6 May 2024 20:44:36 -0700 Subject: [PATCH 135/313] proceed if AP mode is set up (#6631) --- esphome/components/wifi/wifi_component.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 075e683bb5..7e245d3e86 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -694,7 +694,7 @@ void WiFiComponent::retry_connect() { } bool WiFiComponent::can_proceed() { - if (!this->has_sta() || this->state_ == WIFI_COMPONENT_STATE_DISABLED) { + if (!this->has_sta() || this->state_ == WIFI_COMPONENT_STATE_DISABLED || this->ap_setup_) { return true; } return this->is_connected(); From 829bfbdaa446e4f9e959e50754cc55b88fb60c3f Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 8 May 2024 05:26:04 +1000 Subject: [PATCH 136/313] Migrate some constants to core code (#6692) --- esphome/components/as5600/__init__.py | 1 - esphome/components/as5600/sensor/__init__.py | 2 +- esphome/components/display_menu_base/__init__.py | 1 - esphome/components/lcd_menu/__init__.py | 3 +-- .../components/matrix_keypad/binary_sensor/__init__.py | 5 +---- esphome/components/media_player/__init__.py | 9 +++++++-- esphome/components/sx1509/binary_sensor/__init__.py | 4 +--- esphome/components/voice_assistant/__init__.py | 2 +- esphome/const.py | 5 +++++ 9 files changed, 17 insertions(+), 15 deletions(-) diff --git a/esphome/components/as5600/__init__.py b/esphome/components/as5600/__init__.py index 1840b22768..feeae107a7 100644 --- a/esphome/components/as5600/__init__.py +++ b/esphome/components/as5600/__init__.py @@ -54,7 +54,6 @@ FAST_FILTER = { "LSB10": 7, } -CONF_ANGLE = "angle" CONF_RAW_ANGLE = "raw_angle" CONF_RAW_POSITION = "raw_position" CONF_WATCHDOG = "watchdog" diff --git a/esphome/components/as5600/sensor/__init__.py b/esphome/components/as5600/sensor/__init__.py index 589a66950a..30337ab61b 100644 --- a/esphome/components/as5600/sensor/__init__.py +++ b/esphome/components/as5600/sensor/__init__.py @@ -11,6 +11,7 @@ from esphome.const import ( CONF_MAGNITUDE, CONF_STATUS, CONF_POSITION, + CONF_ANGLE, ) from .. import as5600_ns, AS5600Component @@ -19,7 +20,6 @@ DEPENDENCIES = ["as5600"] AS5600Sensor = as5600_ns.class_("AS5600Sensor", sensor.Sensor, cg.PollingComponent) -CONF_ANGLE = "angle" CONF_RAW_ANGLE = "raw_angle" CONF_RAW_POSITION = "raw_position" CONF_WATCHDOG = "watchdog" diff --git a/esphome/components/display_menu_base/__init__.py b/esphome/components/display_menu_base/__init__.py index d7326cdc65..0c738ba838 100644 --- a/esphome/components/display_menu_base/__init__.py +++ b/esphome/components/display_menu_base/__init__.py @@ -23,7 +23,6 @@ CODEOWNERS = ["@numo68"] display_menu_base_ns = cg.esphome_ns.namespace("display_menu_base") -CONF_DISPLAY_ID = "display_id" CONF_ROTARY = "rotary" CONF_JOYSTICK = "joystick" diff --git a/esphome/components/lcd_menu/__init__.py b/esphome/components/lcd_menu/__init__.py index a356c85ba7..b57a4a0f6c 100644 --- a/esphome/components/lcd_menu/__init__.py +++ b/esphome/components/lcd_menu/__init__.py @@ -3,6 +3,7 @@ import esphome.config_validation as cv from esphome.const import ( CONF_ID, CONF_DIMENSIONS, + CONF_DISPLAY_ID, ) from esphome.core.entity_helpers import inherit_property_from from esphome.components import lcd_base @@ -18,8 +19,6 @@ AUTO_LOAD = ["display_menu_base"] lcd_menu_ns = cg.esphome_ns.namespace("lcd_menu") -CONF_DISPLAY_ID = "display_id" - CONF_MARK_SELECTED = "mark_selected" CONF_MARK_EDITING = "mark_editing" CONF_MARK_SUBMENU = "mark_submenu" diff --git a/esphome/components/matrix_keypad/binary_sensor/__init__.py b/esphome/components/matrix_keypad/binary_sensor/__init__.py index 9ad909f60a..edebf7b772 100644 --- a/esphome/components/matrix_keypad/binary_sensor/__init__.py +++ b/esphome/components/matrix_keypad/binary_sensor/__init__.py @@ -1,12 +1,9 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor -from esphome.const import CONF_ID, CONF_KEY +from esphome.const import CONF_ID, CONF_KEY, CONF_ROW, CONF_COL from .. import MatrixKeypad, matrix_keypad_ns, CONF_KEYPAD_ID -CONF_ROW = "row" -CONF_COL = "col" - DEPENDENCIES = ["matrix_keypad"] MatrixKeypadBinarySensor = matrix_keypad_ns.class_( diff --git a/esphome/components/media_player/__init__.py b/esphome/components/media_player/__init__.py index 86e038d76d..5db78150bb 100644 --- a/esphome/components/media_player/__init__.py +++ b/esphome/components/media_player/__init__.py @@ -3,7 +3,13 @@ import esphome.config_validation as cv import esphome.codegen as cg from esphome.automation import maybe_simple_id -from esphome.const import CONF_ID, CONF_ON_STATE, CONF_TRIGGER_ID, CONF_VOLUME +from esphome.const import ( + CONF_ID, + CONF_ON_STATE, + CONF_TRIGGER_ID, + CONF_VOLUME, + CONF_ON_IDLE, +) from esphome.core import CORE from esphome.coroutine import coroutine_with_priority from esphome.cpp_helpers import setup_entity @@ -43,7 +49,6 @@ VolumeSetAction = media_player_ns.class_( ) -CONF_ON_IDLE = "on_idle" CONF_ON_PLAY = "on_play" CONF_ON_PAUSE = "on_pause" CONF_MEDIA_URL = "media_url" diff --git a/esphome/components/sx1509/binary_sensor/__init__.py b/esphome/components/sx1509/binary_sensor/__init__.py index fa620fa202..280b5ad90c 100644 --- a/esphome/components/sx1509/binary_sensor/__init__.py +++ b/esphome/components/sx1509/binary_sensor/__init__.py @@ -1,12 +1,10 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor +from esphome.const import CONF_ROW, CONF_COL from .. import SX1509Component, sx1509_ns, CONF_SX1509_ID -CONF_ROW = "row" -CONF_COL = "col" - DEPENDENCIES = ["sx1509"] SX1509BinarySensor = sx1509_ns.class_("SX1509BinarySensor", binary_sensor.BinarySensor) diff --git a/esphome/components/voice_assistant/__init__.py b/esphome/components/voice_assistant/__init__.py index 17bdffd9da..3ba0c58ce4 100644 --- a/esphome/components/voice_assistant/__init__.py +++ b/esphome/components/voice_assistant/__init__.py @@ -8,6 +8,7 @@ from esphome.const import ( CONF_MEDIA_PLAYER, CONF_ON_CLIENT_CONNECTED, CONF_ON_CLIENT_DISCONNECTED, + CONF_ON_IDLE, ) from esphome import automation from esphome.automation import register_action, register_condition @@ -32,7 +33,6 @@ CONF_ON_TTS_START = "on_tts_start" CONF_ON_TTS_STREAM_START = "on_tts_stream_start" CONF_ON_TTS_STREAM_END = "on_tts_stream_end" CONF_ON_WAKE_WORD_DETECTED = "on_wake_word_detected" -CONF_ON_IDLE = "on_idle" CONF_SILENCE_DETECTION = "silence_detection" CONF_USE_WAKE_WORD = "use_wake_word" diff --git a/esphome/const.py b/esphome/const.py index 1a8f9a06e1..c0d27337d6 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -51,6 +51,7 @@ CONF_ALPHA = "alpha" CONF_ALTITUDE = "altitude" CONF_ANALOG = "analog" CONF_AND = "and" +CONF_ANGLE = "angle" CONF_AP = "ap" CONF_APPARENT_POWER = "apparent_power" CONF_ARDUINO_VERSION = "arduino_version" @@ -124,6 +125,7 @@ CONF_CLOSE_DURATION = "close_duration" CONF_CLOSE_ENDSTOP = "close_endstop" CONF_CO2 = "co2" CONF_CODE = "code" +CONF_COL = "col" CONF_COLD_WHITE = "cold_white" CONF_COLD_WHITE_COLOR_TEMPERATURE = "cold_white_color_temperature" CONF_COLOR = "color" @@ -218,6 +220,7 @@ CONF_DISCOVERY_PREFIX = "discovery_prefix" CONF_DISCOVERY_RETAIN = "discovery_retain" CONF_DISCOVERY_UNIQUE_ID_GENERATOR = "discovery_unique_id_generator" CONF_DISPLAY = "display" +CONF_DISPLAY_ID = "display_id" CONF_DISTANCE = "distance" CONF_DITHER = "dither" CONF_DIV_RATIO = "div_ratio" @@ -539,6 +542,7 @@ CONF_ON_FINGER_SCAN_MISPLACED = "on_finger_scan_misplaced" CONF_ON_FINGER_SCAN_START = "on_finger_scan_start" CONF_ON_FINGER_SCAN_UNMATCHED = "on_finger_scan_unmatched" CONF_ON_FINISHED_WRITE = "on_finished_write" +CONF_ON_IDLE = "on_idle" CONF_ON_JSON_MESSAGE = "on_json_message" CONF_ON_LOCK = "on_lock" CONF_ON_LOOP = "on_loop" @@ -702,6 +706,7 @@ CONF_RGBW = "rgbw" CONF_RISING_EDGE = "rising_edge" CONF_RMT_CHANNEL = "rmt_channel" CONF_ROTATION = "rotation" +CONF_ROW = "row" CONF_RS_PIN = "rs_pin" CONF_RTD_NOMINAL_RESISTANCE = "rtd_nominal_resistance" CONF_RTD_WIRES = "rtd_wires" From f6a3784ebac1b669f2bf0edea6743a86c12e3a85 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 7 May 2024 14:33:37 -0500 Subject: [PATCH 137/313] Consolidate test files where all tests are identical (#6690) --- .../components/absolute_humidity/common.yaml | 21 ++++ .../absolute_humidity/test.esp32-c3-idf.yaml | 22 +--- .../absolute_humidity/test.esp32-c3.yaml | 22 +--- .../absolute_humidity/test.esp32-idf.yaml | 22 +--- .../absolute_humidity/test.esp32.yaml | 22 +--- .../absolute_humidity/test.esp8266.yaml | 22 +--- .../absolute_humidity/test.rp2040.yaml | 22 +--- .../airthings_wave_mini/common.yaml | 22 ++++ .../test.esp32-c3-idf.yaml | 23 +--- .../airthings_wave_mini/test.esp32-c3.yaml | 23 +--- .../airthings_wave_mini/test.esp32-idf.yaml | 23 +--- .../airthings_wave_mini/test.esp32.yaml | 23 +--- .../airthings_wave_plus/common.yaml | 28 +++++ .../test.esp32-c3-idf.yaml | 29 +---- .../airthings_wave_plus/test.esp32-c3.yaml | 29 +---- .../airthings_wave_plus/test.esp32-idf.yaml | 29 +---- .../airthings_wave_plus/test.esp32.yaml | 29 +---- .../alarm_control_panel/common.yaml | 64 ++++++++++ .../test.esp32-c3-idf.yaml | 65 +--------- .../alarm_control_panel/test.esp32-c3.yaml | 65 +--------- .../alarm_control_panel/test.esp32-idf.yaml | 65 +--------- .../alarm_control_panel/test.esp32.yaml | 65 +--------- .../alarm_control_panel/test.esp8266.yaml | 65 +--------- .../alarm_control_panel/test.rp2040.yaml | 65 +--------- tests/components/alpha3/common.yaml | 17 +++ .../components/alpha3/test.esp32-c3-idf.yaml | 18 +-- tests/components/alpha3/test.esp32-c3.yaml | 18 +-- tests/components/alpha3/test.esp32-idf.yaml | 18 +-- tests/components/alpha3/test.esp32.yaml | 18 +-- tests/components/am43/common.yaml | 19 +++ tests/components/am43/test.esp32-c3-idf.yaml | 20 +-- tests/components/am43/test.esp32-c3.yaml | 20 +-- tests/components/am43/test.esp32-idf.yaml | 20 +-- tests/components/am43/test.esp32.yaml | 20 +-- tests/components/analog_threshold/common.yaml | 28 +++++ .../analog_threshold/test.esp32-c3-idf.yaml | 29 +---- .../analog_threshold/test.esp32-c3.yaml | 29 +---- .../analog_threshold/test.esp32-idf.yaml | 29 +---- .../analog_threshold/test.esp32.yaml | 29 +---- .../analog_threshold/test.esp8266.yaml | 29 +---- .../analog_threshold/test.rp2040.yaml | 29 +---- tests/components/anova/common.yaml | 11 ++ tests/components/anova/test.esp32-c3-idf.yaml | 12 +- tests/components/anova/test.esp32-c3.yaml | 12 +- tests/components/anova/test.esp32-idf.yaml | 12 +- tests/components/anova/test.esp32.yaml | 12 +- tests/components/api/common.yaml | 63 ++++++++++ tests/components/api/test.esp32-c3-idf.yaml | 64 +--------- tests/components/api/test.esp32-c3.yaml | 64 +--------- tests/components/api/test.esp32-idf.yaml | 64 +--------- tests/components/api/test.esp32.yaml | 64 +--------- tests/components/api/test.esp8266.yaml | 64 +--------- tests/components/api/test.rp2040.yaml | 64 +--------- .../components/atc_mithermometer/common.yaml | 13 ++ .../atc_mithermometer/test.esp32-c3-idf.yaml | 14 +-- .../atc_mithermometer/test.esp32-c3.yaml | 14 +-- .../atc_mithermometer/test.esp32-idf.yaml | 14 +-- .../atc_mithermometer/test.esp32.yaml | 14 +-- tests/components/b_parasite/common.yaml | 15 +++ .../b_parasite/test.esp32-c3-idf.yaml | 16 +-- .../components/b_parasite/test.esp32-c3.yaml | 16 +-- .../components/b_parasite/test.esp32-idf.yaml | 16 +-- tests/components/b_parasite/test.esp32.yaml | 16 +-- tests/components/bang_bang/common.yaml | 35 ++++++ .../bang_bang/test.esp32-c3-idf.yaml | 36 +----- tests/components/bang_bang/test.esp32-c3.yaml | 36 +----- .../components/bang_bang/test.esp32-idf.yaml | 36 +----- tests/components/bang_bang/test.esp32.yaml | 36 +----- tests/components/bang_bang/test.esp8266.yaml | 36 +----- tests/components/bang_bang/test.rp2040.yaml | 36 +----- tests/components/bedjet/common.yaml | 33 +++++ .../components/bedjet/test.esp32-c3-idf.yaml | 34 +---- tests/components/bedjet/test.esp32-c3.yaml | 34 +---- tests/components/bedjet/test.esp32-idf.yaml | 34 +---- tests/components/bedjet/test.esp32.yaml | 34 +---- .../components/binary_sensor_map/common.yaml | 61 +++++++++ .../binary_sensor_map/test.esp32-c3-idf.yaml | 62 +-------- .../binary_sensor_map/test.esp32-c3.yaml | 62 +-------- .../binary_sensor_map/test.esp32-idf.yaml | 62 +-------- .../binary_sensor_map/test.esp32.yaml | 62 +-------- .../binary_sensor_map/test.esp8266.yaml | 62 +-------- .../binary_sensor_map/test.rp2040.yaml | 62 +-------- tests/components/ble_client/common.yaml | 5 + .../ble_client/test.esp32-c3-idf.yaml | 6 +- .../components/ble_client/test.esp32-c3.yaml | 6 +- .../components/ble_client/test.esp32-idf.yaml | 6 +- tests/components/ble_client/test.esp32.yaml | 6 +- tests/components/ble_presence/common.yaml | 24 ++++ .../ble_presence/test.esp32-c3-idf.yaml | 25 +--- .../ble_presence/test.esp32-c3.yaml | 25 +--- .../ble_presence/test.esp32-idf.yaml | 25 +--- tests/components/ble_presence/test.esp32.yaml | 25 +--- tests/components/ble_rssi/common.yaml | 18 +++ .../ble_rssi/test.esp32-c3-idf.yaml | 19 +-- tests/components/ble_rssi/test.esp32-c3.yaml | 19 +-- tests/components/ble_rssi/test.esp32-idf.yaml | 19 +-- tests/components/ble_rssi/test.esp32.yaml | 19 +-- tests/components/ble_scanner/common.yaml | 5 + .../ble_scanner/test.esp32-c3-idf.yaml | 6 +- .../components/ble_scanner/test.esp32-c3.yaml | 6 +- .../ble_scanner/test.esp32-idf.yaml | 6 +- tests/components/ble_scanner/test.esp32.yaml | 6 +- tests/components/button/common.yaml | 6 + .../components/button/test.esp32-c3-idf.yaml | 7 +- tests/components/button/test.esp32-c3.yaml | 7 +- tests/components/button/test.esp32-idf.yaml | 7 +- tests/components/button/test.esp32.yaml | 7 +- tests/components/button/test.esp8266.yaml | 7 +- tests/components/button/test.rp2040.yaml | 7 +- tests/components/canbus/common.yaml | 46 +++++++ .../components/canbus/test.esp32-c3-idf.yaml | 47 +------ tests/components/canbus/test.esp32-c3.yaml | 47 +------ tests/components/canbus/test.esp32-idf.yaml | 47 +------ tests/components/canbus/test.esp32.yaml | 47 +------ tests/components/captive_portal/common.yaml | 5 + .../captive_portal/test.esp32-c3-idf.yaml | 6 +- .../captive_portal/test.esp32-c3.yaml | 6 +- .../captive_portal/test.esp32-idf.yaml | 6 +- .../components/captive_portal/test.esp32.yaml | 6 +- .../captive_portal/test.esp8266.yaml | 6 +- tests/components/color/common.yaml | 11 ++ tests/components/color/test.esp32-c3-idf.yaml | 12 +- tests/components/color/test.esp32-c3.yaml | 12 +- tests/components/color/test.esp32-idf.yaml | 12 +- tests/components/color/test.esp32.yaml | 12 +- tests/components/color/test.esp8266.yaml | 12 +- tests/components/color/test.rp2040.yaml | 12 +- tests/components/combination/common.yaml | 76 +++++++++++ .../combination/test.esp32-c3-idf.yaml | 77 +----------- .../components/combination/test.esp32-c3.yaml | 77 +----------- .../combination/test.esp32-idf.yaml | 77 +----------- tests/components/combination/test.esp32.yaml | 77 +----------- .../components/combination/test.esp8266.yaml | 77 +----------- tests/components/combination/test.rp2040.yaml | 77 +----------- tests/components/cst226/common.yaml | 24 ++++ tests/components/cst226/test.esp32-c3.yaml | 25 +--- tests/components/cst816/common.yaml | 36 ++++++ tests/components/cst816/test.esp32.yaml | 37 +----- tests/components/dallas/common.yaml | 11 ++ .../components/dallas/test.esp32-c3-idf.yaml | 12 +- tests/components/dallas/test.esp32-c3.yaml | 12 +- tests/components/dallas/test.esp32-idf.yaml | 12 +- tests/components/dallas/test.esp32.yaml | 12 +- tests/components/dallas/test.esp8266.yaml | 12 +- tests/components/dallas/test.rp2040.yaml | 12 +- tests/components/datetime/common.yaml | 3 + tests/components/datetime/test.all.yaml | 4 +- tests/components/debug/common.yaml | 1 + tests/components/debug/test.esp32-c3-idf.yaml | 2 +- tests/components/debug/test.esp32-c3.yaml | 2 +- tests/components/debug/test.esp32-idf.yaml | 2 +- tests/components/debug/test.esp32.yaml | 2 +- tests/components/debug/test.esp8266.yaml | 2 +- tests/components/debug/test.host.yaml | 2 +- tests/components/debug/test.rp2040.yaml | 2 +- tests/components/dht/common.yaml | 11 ++ tests/components/dht/test.esp32-c3-idf.yaml | 12 +- tests/components/dht/test.esp32-c3.yaml | 12 +- tests/components/dht/test.esp32-idf.yaml | 12 +- tests/components/dht/test.esp32.yaml | 12 +- tests/components/dht/test.esp8266.yaml | 12 +- tests/components/dht/test.rp2040.yaml | 12 +- tests/components/display/common.yaml | 35 ++++++ tests/components/display/test.esp32.yaml | 36 +----- tests/components/duty_cycle/common.yaml | 4 + .../duty_cycle/test.esp32-c3-idf.yaml | 5 +- .../components/duty_cycle/test.esp32-c3.yaml | 5 +- .../components/duty_cycle/test.esp32-idf.yaml | 5 +- tests/components/duty_cycle/test.esp32.yaml | 5 +- tests/components/duty_cycle/test.esp8266.yaml | 5 +- tests/components/duty_cycle/test.rp2040.yaml | 5 +- tests/components/duty_time/common.yaml | 14 +++ .../duty_time/test.esp32-c3-idf.yaml | 15 +-- tests/components/duty_time/test.esp32-c3.yaml | 15 +-- .../components/duty_time/test.esp32-idf.yaml | 15 +-- tests/components/duty_time/test.esp32.yaml | 15 +-- tests/components/duty_time/test.esp8266.yaml | 15 +-- tests/components/duty_time/test.rp2040.yaml | 15 +-- tests/components/endstop/common.yaml | 33 +++++ .../components/endstop/test.esp32-c3-idf.yaml | 34 +---- tests/components/endstop/test.esp32-c3.yaml | 34 +---- tests/components/endstop/test.esp32-idf.yaml | 34 +---- tests/components/endstop/test.esp32.yaml | 34 +---- tests/components/endstop/test.esp8266.yaml | 34 +---- tests/components/endstop/test.rp2040.yaml | 34 +---- tests/components/esp32_ble/common.yaml | 2 + .../esp32_ble/test.esp32-c3-idf.yaml | 3 +- tests/components/esp32_ble/test.esp32-c3.yaml | 3 +- .../components/esp32_ble/test.esp32-idf.yaml | 3 +- tests/components/esp32_ble/test.esp32.yaml | 3 +- tests/components/esp32_ble_beacon/common.yaml | 3 + .../esp32_ble_beacon/test.esp32-c3-idf.yaml | 4 +- .../esp32_ble_beacon/test.esp32-c3.yaml | 4 +- .../esp32_ble_beacon/test.esp32-idf.yaml | 4 +- .../esp32_ble_beacon/test.esp32.yaml | 4 +- tests/components/esp32_ble_client/common.yaml | 5 + .../esp32_ble_client/test.esp32-c3-idf.yaml | 6 +- .../esp32_ble_client/test.esp32-c3.yaml | 6 +- .../esp32_ble_client/test.esp32-idf.yaml | 6 +- .../esp32_ble_client/test.esp32.yaml | 6 +- tests/components/esp32_ble_server/common.yaml | 3 + .../esp32_ble_server/test.esp32-c3-idf.yaml | 4 +- .../esp32_ble_server/test.esp32-c3.yaml | 4 +- .../esp32_ble_server/test.esp32-idf.yaml | 4 +- .../esp32_ble_server/test.esp32.yaml | 4 +- .../components/esp32_ble_tracker/common.yaml | 41 ++++++ .../esp32_ble_tracker/test.esp32-c3-idf.yaml | 42 +------ .../esp32_ble_tracker/test.esp32-c3.yaml | 42 +------ .../esp32_ble_tracker/test.esp32-idf.yaml | 42 +------ .../esp32_ble_tracker/test.esp32.yaml | 42 +------ tests/components/esp32_camera/common.yaml | 28 +++++ .../esp32_camera/test.esp32-idf.yaml | 29 +---- tests/components/esp32_camera/test.esp32.yaml | 29 +---- .../esp32_camera_web_server/common.yaml | 34 +++++ .../test.esp32-idf.yaml | 35 +----- .../esp32_camera_web_server/test.esp32.yaml | 35 +----- tests/components/esp32_dac/common.yaml | 4 + .../components/esp32_dac/test.esp32-idf.yaml | 5 +- tests/components/esp32_dac/test.esp32.yaml | 5 +- tests/components/esp32_hall/common.yaml | 3 + .../components/esp32_hall/test.esp32-idf.yaml | 4 +- tests/components/esp32_hall/test.esp32.yaml | 4 +- tests/components/esp32_improv/common.yaml | 18 +++ .../esp32_improv/test.esp32-c3-idf.yaml | 19 +-- .../esp32_improv/test.esp32-c3.yaml | 19 +-- .../esp32_improv/test.esp32-idf.yaml | 19 +-- tests/components/esp32_improv/test.esp32.yaml | 19 +-- tests/components/esp32_touch/common.yaml | 16 +++ .../esp32_touch/test.esp32-idf.yaml | 17 +-- tests/components/esp32_touch/test.esp32.yaml | 17 +-- tests/components/esp8266_pwm/common.yaml | 8 ++ .../components/esp8266_pwm/test.esp8266.yaml | 9 +- tests/components/ethernet/common.yaml | 12 ++ tests/components/ethernet/test.esp32-idf.yaml | 13 +- tests/components/ethernet/test.esp32.yaml | 13 +- tests/components/ethernet_info/common.yaml | 19 +++ .../ethernet_info/test.esp32-idf.yaml | 20 +-- .../components/ethernet_info/test.esp32.yaml | 20 +-- tests/components/event/common.yaml | 9 ++ tests/components/event/test.esp32-c3-idf.yaml | 10 +- tests/components/event/test.esp32-c3.yaml | 10 +- tests/components/event/test.esp32-idf.yaml | 10 +- tests/components/event/test.esp32.yaml | 10 +- tests/components/event/test.esp8266.yaml | 10 +- tests/components/event/test.rp2040.yaml | 10 +- .../exposure_notifications/common.yaml | 9 ++ .../test.esp32-c3-idf.yaml | 10 +- .../exposure_notifications/test.esp32-c3.yaml | 10 +- .../test.esp32-idf.yaml | 10 +- .../exposure_notifications/test.esp32.yaml | 10 +- .../external_components/common.yaml | 6 + .../test.esp32-c3-idf.yaml | 7 +- .../external_components/test.esp32-c3.yaml | 7 +- .../external_components/test.esp32-idf.yaml | 7 +- .../external_components/test.esp32.yaml | 7 +- .../external_components/test.esp8266.yaml | 7 +- .../external_components/test.rp2040.yaml | 7 +- tests/components/factory_reset/common.yaml | 3 + .../factory_reset/test.esp32-c3-idf.yaml | 4 +- .../factory_reset/test.esp32-c3.yaml | 4 +- .../factory_reset/test.esp32-idf.yaml | 4 +- .../components/factory_reset/test.esp32.yaml | 4 +- .../factory_reset/test.esp8266.yaml | 4 +- .../components/factory_reset/test.rp2040.yaml | 4 +- .../components/fastled_clockless/common.yaml | 71 +++++++++++ .../fastled_clockless/test.esp32.yaml | 72 +---------- tests/components/fastled_spi/common.yaml | 71 +++++++++++ tests/components/fastled_spi/test.esp32.yaml | 72 +---------- tests/components/feedback/common.yaml | 39 ++++++ .../feedback/test.esp32-c3-idf.yaml | 40 +----- tests/components/feedback/test.esp32-c3.yaml | 40 +----- tests/components/feedback/test.esp32-idf.yaml | 40 +----- tests/components/feedback/test.esp32.yaml | 40 +----- tests/components/feedback/test.esp8266.yaml | 40 +----- tests/components/feedback/test.rp2040.yaml | 40 +----- tests/components/globals/common.yaml | 28 +++++ .../components/globals/test.esp32-c3-idf.yaml | 29 +---- tests/components/globals/test.esp32-c3.yaml | 29 +---- tests/components/globals/test.esp32-idf.yaml | 29 +---- tests/components/globals/test.esp32.yaml | 29 +---- tests/components/globals/test.esp8266.yaml | 29 +---- tests/components/globals/test.rp2040.yaml | 29 +---- tests/components/host/common.yaml | 15 +++ tests/components/host/test.host.yaml | 16 +-- tests/components/improv_serial/common.yaml | 5 + .../improv_serial/test.esp32-c3-idf.yaml | 6 +- .../improv_serial/test.esp32-c3.yaml | 6 +- .../improv_serial/test.esp32-idf.yaml | 6 +- .../components/improv_serial/test.esp32.yaml | 6 +- .../improv_serial/test.esp8266.yaml | 6 +- .../components/improv_serial/test.rp2040.yaml | 6 +- .../inkbird_ibsth1_mini/common.yaml | 11 ++ .../test.esp32-c3-idf.yaml | 12 +- .../inkbird_ibsth1_mini/test.esp32-c3.yaml | 12 +- .../inkbird_ibsth1_mini/test.esp32-idf.yaml | 12 +- .../inkbird_ibsth1_mini/test.esp32.yaml | 12 +- tests/components/inkplate6/common.yaml | 62 +++++++++ tests/components/inkplate6/test.esp32.yaml | 63 +--------- tests/components/interval/common.yaml | 4 + .../interval/test.esp32-c3-idf.yaml | 5 +- tests/components/interval/test.esp32-c3.yaml | 5 +- tests/components/interval/test.esp32-idf.yaml | 5 +- tests/components/interval/test.esp32.yaml | 5 +- tests/components/interval/test.esp8266.yaml | 5 +- tests/components/interval/test.rp2040.yaml | 5 +- tests/components/ledc/common.yaml | 11 ++ tests/components/ledc/test.esp32-c3-idf.yaml | 12 +- tests/components/ledc/test.esp32-c3.yaml | 12 +- tests/components/ledc/test.esp32-idf.yaml | 12 +- tests/components/ledc/test.esp32.yaml | 12 +- tests/components/lightwaverf/common.yaml | 13 ++ .../components/lightwaverf/test.esp8266.yaml | 14 +-- tests/components/lock/common.yaml | 36 ++++++ tests/components/lock/test.esp32-c3-idf.yaml | 37 +----- tests/components/lock/test.esp32-c3.yaml | 37 +----- tests/components/lock/test.esp32-idf.yaml | 37 +----- tests/components/lock/test.esp32.yaml | 37 +----- tests/components/lock/test.esp8266.yaml | 37 +----- tests/components/lock/test.rp2040.yaml | 37 +----- tests/components/logger/common.yaml | 7 ++ .../components/logger/test.esp32-c3-idf.yaml | 8 +- tests/components/logger/test.esp32-c3.yaml | 8 +- tests/components/logger/test.esp32-idf.yaml | 8 +- tests/components/logger/test.esp32.yaml | 8 +- tests/components/logger/test.esp8266.yaml | 8 +- tests/components/logger/test.rp2040.yaml | 8 +- tests/components/mdns/common.yaml | 6 + tests/components/mdns/test.esp32-c3-idf.yaml | 7 +- tests/components/mdns/test.esp32-c3.yaml | 7 +- tests/components/mdns/test.esp32-idf.yaml | 7 +- tests/components/mdns/test.esp32.yaml | 7 +- tests/components/mdns/test.esp8266.yaml | 7 +- tests/components/mdns/test.rp2040.yaml | 7 +- tests/components/media_player/common.yaml | 32 +++++ tests/components/media_player/test.esp32.yaml | 33 +---- tests/components/micro_wake_word/common.yaml | 15 +++ .../micro_wake_word/test.esp32-s3-idf.yaml | 16 +-- tests/components/midea_ir/common.yaml | 8 ++ .../midea_ir/test.esp32-c3-idf.yaml | 9 +- tests/components/midea_ir/test.esp32-c3.yaml | 9 +- tests/components/midea_ir/test.esp32-idf.yaml | 9 +- tests/components/midea_ir/test.esp32.yaml | 9 +- tests/components/midea_ir/test.esp8266.yaml | 9 +- tests/components/mitsubishi/common.yaml | 7 ++ .../mitsubishi/test.esp32-c3-idf.yaml | 8 +- .../components/mitsubishi/test.esp32-c3.yaml | 8 +- .../components/mitsubishi/test.esp32-idf.yaml | 8 +- tests/components/mitsubishi/test.esp32.yaml | 8 +- tests/components/mitsubishi/test.esp8266.yaml | 8 +- tests/components/mopeka_ble/common.yaml | 3 + .../mopeka_ble/test.esp32-c3-idf.yaml | 4 +- .../components/mopeka_ble/test.esp32-c3.yaml | 4 +- .../components/mopeka_ble/test.esp32-idf.yaml | 4 +- tests/components/mopeka_ble/test.esp32.yaml | 4 +- tests/components/mopeka_pro_check/common.yaml | 16 +++ .../mopeka_pro_check/test.esp32-c3-idf.yaml | 17 +-- .../mopeka_pro_check/test.esp32-c3.yaml | 17 +-- .../mopeka_pro_check/test.esp32-idf.yaml | 17 +-- .../mopeka_pro_check/test.esp32.yaml | 17 +-- tests/components/mopeka_std_check/common.yaml | 15 +++ .../mopeka_std_check/test.esp32-c3-idf.yaml | 16 +-- .../mopeka_std_check/test.esp32-c3.yaml | 16 +-- .../mopeka_std_check/test.esp32-idf.yaml | 16 +-- .../mopeka_std_check/test.esp32.yaml | 16 +-- tests/components/my9231/common.yaml | 26 ++++ .../components/my9231/test.esp32-c3-idf.yaml | 27 +--- tests/components/my9231/test.esp32-c3.yaml | 27 +--- tests/components/my9231/test.esp32-idf.yaml | 27 +--- tests/components/my9231/test.esp32.yaml | 27 +--- tests/components/my9231/test.esp8266.yaml | 27 +--- tests/components/my9231/test.rp2040.yaml | 27 +--- tests/components/network/common.yaml | 6 + .../components/network/test.esp32-c3-idf.yaml | 7 +- tests/components/network/test.esp32-c3.yaml | 7 +- tests/components/network/test.esp32-idf.yaml | 7 +- tests/components/network/test.esp32.yaml | 7 +- tests/components/network/test.esp8266.yaml | 7 +- tests/components/network/test.rp2040.yaml | 7 +- tests/components/noblex/common.yaml | 20 +++ .../components/noblex/test.esp32-c3-idf.yaml | 21 +--- tests/components/noblex/test.esp32-c3.yaml | 21 +--- tests/components/noblex/test.esp32-idf.yaml | 21 +--- tests/components/noblex/test.esp32.yaml | 21 +--- tests/components/noblex/test.esp8266.yaml | 21 +--- tests/components/ota/common.yaml | 30 +++++ tests/components/ota/test.esp32-c3-idf.yaml | 31 +---- tests/components/ota/test.esp32-c3.yaml | 31 +---- tests/components/ota/test.esp32-idf.yaml | 31 +---- tests/components/ota/test.esp32.yaml | 31 +---- tests/components/ota/test.esp8266.yaml | 31 +---- tests/components/ota/test.rp2040.yaml | 31 +---- tests/components/pid/common.yaml | 56 +++++++++ tests/components/pid/test.esp32-c3-idf.yaml | 57 +-------- tests/components/pid/test.esp32-c3.yaml | 57 +-------- tests/components/pid/test.esp32-idf.yaml | 57 +-------- tests/components/pid/test.esp32.yaml | 57 +-------- tests/components/pid/test.esp8266.yaml | 57 +-------- tests/components/pid/test.rp2040.yaml | 57 +-------- tests/components/power_supply/common.yaml | 6 + .../power_supply/test.esp32-c3-idf.yaml | 7 +- .../power_supply/test.esp32-c3.yaml | 7 +- .../power_supply/test.esp32-idf.yaml | 7 +- tests/components/power_supply/test.esp32.yaml | 7 +- .../components/power_supply/test.esp8266.yaml | 7 +- .../components/power_supply/test.rp2040.yaml | 7 +- tests/components/prometheus/common.yaml | 21 ++++ .../prometheus/test.esp32-c3-idf.yaml | 22 +--- .../components/prometheus/test.esp32-c3.yaml | 22 +--- .../components/prometheus/test.esp32-idf.yaml | 22 +--- tests/components/prometheus/test.esp32.yaml | 22 +--- tests/components/prometheus/test.esp8266.yaml | 22 +--- tests/components/psram/common.yaml | 3 + tests/components/psram/test.esp32-c3-idf.yaml | 4 +- tests/components/psram/test.esp32-c3.yaml | 4 +- tests/components/psram/test.esp32-idf.yaml | 4 +- tests/components/psram/test.esp32.yaml | 4 +- tests/components/pulse_counter/common.yaml | 9 ++ .../pulse_counter/test.esp32-c3-idf.yaml | 10 +- .../pulse_counter/test.esp32-c3.yaml | 10 +- .../pulse_counter/test.esp32-idf.yaml | 10 +- .../components/pulse_counter/test.esp32.yaml | 10 +- .../pulse_counter/test.esp8266.yaml | 10 +- .../components/pulse_counter/test.rp2040.yaml | 10 +- tests/components/pulse_meter/common.yaml | 13 ++ .../pulse_meter/test.esp32-c3-idf.yaml | 14 +-- .../components/pulse_meter/test.esp32-c3.yaml | 14 +-- .../pulse_meter/test.esp32-idf.yaml | 14 +-- tests/components/pulse_meter/test.esp32.yaml | 14 +-- .../components/pulse_meter/test.esp8266.yaml | 14 +-- tests/components/pulse_meter/test.rp2040.yaml | 14 +-- tests/components/pulse_width/common.yaml | 4 + .../pulse_width/test.esp32-c3-idf.yaml | 5 +- .../components/pulse_width/test.esp32-c3.yaml | 5 +- .../pulse_width/test.esp32-idf.yaml | 5 +- tests/components/pulse_width/test.esp32.yaml | 5 +- .../components/pulse_width/test.esp8266.yaml | 5 +- tests/components/pulse_width/test.rp2040.yaml | 5 +- .../components/pvvx_mithermometer/common.yaml | 44 +++++++ .../pvvx_mithermometer/test.esp32-c3-idf.yaml | 45 +------ .../pvvx_mithermometer/test.esp32-c3.yaml | 45 +------ .../pvvx_mithermometer/test.esp32-idf.yaml | 45 +------ .../pvvx_mithermometer/test.esp32.yaml | 45 +------ tests/components/qspi_amoled/common.yaml | 36 ++++++ .../qspi_amoled/test.esp32-s3-idf.yaml | 37 +----- tests/components/radon_eye_ble/common.yaml | 3 + .../radon_eye_ble/test.esp32-c3-idf.yaml | 4 +- .../radon_eye_ble/test.esp32-c3.yaml | 4 +- .../radon_eye_ble/test.esp32-idf.yaml | 4 +- .../components/radon_eye_ble/test.esp32.yaml | 4 +- tests/components/radon_eye_rd200/common.yaml | 14 +++ .../radon_eye_rd200/test.esp32-c3-idf.yaml | 15 +-- .../radon_eye_rd200/test.esp32-c3.yaml | 15 +-- .../radon_eye_rd200/test.esp32-idf.yaml | 15 +-- .../radon_eye_rd200/test.esp32.yaml | 15 +-- tests/components/restart/common.yaml | 7 ++ .../components/restart/test.esp32-c3-idf.yaml | 8 +- tests/components/restart/test.esp32-c3.yaml | 8 +- tests/components/restart/test.esp32-idf.yaml | 8 +- tests/components/restart/test.esp32.yaml | 8 +- tests/components/restart/test.esp8266.yaml | 8 +- tests/components/restart/test.rp2040.yaml | 8 +- .../rp2040_pio_led_strip/common.yaml | 18 +++ .../rp2040_pio_led_strip/test.rp2040.yaml | 19 +-- tests/components/rp2040_pwm/common.yaml | 7 ++ tests/components/rp2040_pwm/test.rp2040.yaml | 8 +- tests/components/rpi_dpi_rgb/common.yaml | 40 ++++++ .../rpi_dpi_rgb/test.esp32-s3-idf.yaml | 41 +----- tests/components/ruuvi_ble/common.yaml | 3 + .../ruuvi_ble/test.esp32-c3-idf.yaml | 4 +- tests/components/ruuvi_ble/test.esp32-c3.yaml | 4 +- .../components/ruuvi_ble/test.esp32-idf.yaml | 4 +- tests/components/ruuvi_ble/test.esp32.yaml | 4 +- tests/components/ruuvitag/common.yaml | 27 ++++ .../ruuvitag/test.esp32-c3-idf.yaml | 28 +---- tests/components/ruuvitag/test.esp32-c3.yaml | 28 +---- tests/components/ruuvitag/test.esp32-idf.yaml | 28 +---- tests/components/ruuvitag/test.esp32.yaml | 28 +---- tests/components/safe_mode/common.yaml | 13 ++ .../safe_mode/test.esp32-c3-idf.yaml | 14 +-- tests/components/safe_mode/test.esp32-c3.yaml | 14 +-- .../components/safe_mode/test.esp32-idf.yaml | 14 +-- tests/components/safe_mode/test.esp32.yaml | 14 +-- tests/components/safe_mode/test.esp8266.yaml | 14 +-- tests/components/safe_mode/test.rp2040.yaml | 14 +-- tests/components/shelly_dimmer/common.yaml | 19 +++ .../shelly_dimmer/test.esp8266.yaml | 20 +-- tests/components/shutdown/common.yaml | 7 ++ .../shutdown/test.esp32-c3-idf.yaml | 8 +- tests/components/shutdown/test.esp32-c3.yaml | 8 +- tests/components/shutdown/test.esp32-idf.yaml | 8 +- tests/components/shutdown/test.esp32.yaml | 8 +- tests/components/shutdown/test.esp8266.yaml | 8 +- tests/components/shutdown/test.rp2040.yaml | 8 +- .../components/sigma_delta_output/common.yaml | 16 +++ .../sigma_delta_output/test.esp32-c3-idf.yaml | 17 +-- .../sigma_delta_output/test.esp32-c3.yaml | 17 +-- .../sigma_delta_output/test.esp32-idf.yaml | 17 +-- .../sigma_delta_output/test.esp32.yaml | 17 +-- .../sigma_delta_output/test.esp8266.yaml | 17 +-- .../sigma_delta_output/test.rp2040.yaml | 17 +-- tests/components/slow_pwm/common.yaml | 6 + .../slow_pwm/test.esp32-c3-idf.yaml | 7 +- tests/components/slow_pwm/test.esp32-c3.yaml | 7 +- tests/components/slow_pwm/test.esp32-idf.yaml | 7 +- tests/components/slow_pwm/test.esp32.yaml | 7 +- tests/components/slow_pwm/test.esp8266.yaml | 7 +- tests/components/slow_pwm/test.rp2040.yaml | 7 +- tests/components/sm16716/common.yaml | 16 +++ .../components/sm16716/test.esp32-c3-idf.yaml | 17 +-- tests/components/sm16716/test.esp32-c3.yaml | 17 +-- tests/components/sm16716/test.esp32-idf.yaml | 17 +-- tests/components/sm16716/test.esp32.yaml | 17 +-- tests/components/sm16716/test.esp8266.yaml | 17 +-- tests/components/sm16716/test.rp2040.yaml | 17 +-- tests/components/sm2135/common.yaml | 22 ++++ .../components/sm2135/test.esp32-c3-idf.yaml | 23 +--- tests/components/sm2135/test.esp32-c3.yaml | 23 +--- tests/components/sm2135/test.esp32-idf.yaml | 23 +--- tests/components/sm2135/test.esp32.yaml | 23 +--- tests/components/sm2135/test.esp8266.yaml | 23 +--- tests/components/sm2135/test.rp2040.yaml | 23 +--- tests/components/sm2235/common.yaml | 22 ++++ .../components/sm2235/test.esp32-c3-idf.yaml | 23 +--- tests/components/sm2235/test.esp32-c3.yaml | 23 +--- tests/components/sm2235/test.esp32-idf.yaml | 23 +--- tests/components/sm2235/test.esp32.yaml | 23 +--- tests/components/sm2235/test.esp8266.yaml | 23 +--- tests/components/sm2235/test.rp2040.yaml | 23 +--- tests/components/sm2335/common.yaml | 22 ++++ .../components/sm2335/test.esp32-c3-idf.yaml | 23 +--- tests/components/sm2335/test.esp32-c3.yaml | 23 +--- tests/components/sm2335/test.esp32-idf.yaml | 23 +--- tests/components/sm2335/test.esp32.yaml | 23 +--- tests/components/sm2335/test.esp8266.yaml | 23 +--- tests/components/sm2335/test.rp2040.yaml | 23 +--- tests/components/sntp/common.yaml | 15 +++ tests/components/sntp/test.esp32-c3-idf.yaml | 16 +-- tests/components/sntp/test.esp32-c3.yaml | 16 +-- tests/components/sntp/test.esp32-idf.yaml | 16 +-- tests/components/sntp/test.esp32.yaml | 16 +-- tests/components/sntp/test.esp8266.yaml | 16 +-- tests/components/sntp/test.rp2040.yaml | 16 +-- tests/components/sprinkler/common.yaml | 83 ++++++++++++ .../sprinkler/test.esp32-c3-idf.yaml | 84 +------------ tests/components/sprinkler/test.esp32-c3.yaml | 84 +------------ .../components/sprinkler/test.esp32-idf.yaml | 84 +------------ tests/components/sprinkler/test.esp32.yaml | 84 +------------ tests/components/sprinkler/test.esp8266.yaml | 84 +------------ tests/components/sprinkler/test.rp2040.yaml | 84 +------------ tests/components/st7701s/common.yaml | 60 +++++++++ .../components/st7701s/test.esp32-s3-idf.yaml | 61 +-------- tests/components/status/common.yaml | 10 ++ .../components/status/test.esp32-c3-idf.yaml | 11 +- tests/components/status/test.esp32-c3.yaml | 11 +- tests/components/status/test.esp32-idf.yaml | 11 +- tests/components/status/test.esp32.yaml | 11 +- tests/components/status/test.esp8266.yaml | 11 +- tests/components/status/test.rp2040.yaml | 11 +- tests/components/status_led/common.yaml | 10 ++ .../status_led/test.esp32-c3-idf.yaml | 11 +- .../components/status_led/test.esp32-c3.yaml | 11 +- .../components/status_led/test.esp32-idf.yaml | 11 +- tests/components/status_led/test.esp32.yaml | 11 +- tests/components/status_led/test.esp8266.yaml | 11 +- tests/components/status_led/test.rp2040.yaml | 11 +- tests/components/stepper/common.yaml | 27 ++++ .../components/stepper/test.esp32-c3-idf.yaml | 28 +---- tests/components/stepper/test.esp32-c3.yaml | 28 +---- tests/components/stepper/test.esp32-idf.yaml | 28 +---- tests/components/stepper/test.esp32.yaml | 28 +---- tests/components/stepper/test.esp8266.yaml | 28 +---- tests/components/stepper/test.rp2040.yaml | 28 +---- tests/components/sun/common.yaml | 38 ++++++ tests/components/sun/test.esp32-c3-idf.yaml | 39 +----- tests/components/sun/test.esp32-c3.yaml | 39 +----- tests/components/sun/test.esp32-idf.yaml | 39 +----- tests/components/sun/test.esp32.yaml | 39 +----- tests/components/sun/test.esp8266.yaml | 39 +----- tests/components/sun/test.rp2040.yaml | 39 +----- tests/components/thermostat/common.yaml | 93 ++++++++++++++ .../thermostat/test.esp32-c3-idf.yaml | 94 +------------- .../components/thermostat/test.esp32-c3.yaml | 94 +------------- .../components/thermostat/test.esp32-idf.yaml | 94 +------------- tests/components/thermostat/test.esp32.yaml | 94 +------------- tests/components/thermostat/test.esp8266.yaml | 94 +------------- tests/components/thermostat/test.rp2040.yaml | 94 +------------- tests/components/time/common.yaml | 10 ++ tests/components/time/test.esp32-c3-idf.yaml | 11 +- tests/components/time/test.esp32-c3.yaml | 11 +- tests/components/time/test.esp32-idf.yaml | 11 +- tests/components/time/test.esp32.yaml | 11 +- tests/components/time/test.esp8266.yaml | 11 +- tests/components/time/test.rp2040.yaml | 11 +- tests/components/time_based/common.yaml | 12 ++ .../time_based/test.esp32-c3-idf.yaml | 13 +- .../components/time_based/test.esp32-c3.yaml | 13 +- .../components/time_based/test.esp32-idf.yaml | 13 +- tests/components/time_based/test.esp32.yaml | 13 +- tests/components/time_based/test.esp8266.yaml | 13 +- tests/components/time_based/test.rp2040.yaml | 13 +- tests/components/tm1638/common.yaml | 118 +++++++++++++++++ .../components/tm1638/test.esp32-c3-idf.yaml | 119 +----------------- tests/components/tm1638/test.esp32-c3.yaml | 119 +----------------- tests/components/tm1638/test.esp32-idf.yaml | 119 +----------------- tests/components/tm1638/test.esp32.yaml | 119 +----------------- tests/components/tm1638/test.esp8266.yaml | 119 +----------------- tests/components/tm1638/test.rp2040.yaml | 119 +----------------- tests/components/tm1651/common.yaml | 21 ++++ tests/components/tm1651/test.esp32-c3.yaml | 22 +--- tests/components/tm1651/test.esp32.yaml | 22 +--- tests/components/tm1651/test.esp8266.yaml | 22 +--- tests/components/tm1651/test.rp2040.yaml | 22 +--- tests/components/tx20/common.yaml | 7 ++ tests/components/tx20/test.esp32-c3-idf.yaml | 8 +- tests/components/tx20/test.esp32-c3.yaml | 8 +- tests/components/tx20/test.esp32-idf.yaml | 8 +- tests/components/tx20/test.esp32.yaml | 8 +- tests/components/tx20/test.esp8266.yaml | 8 +- tests/components/tx20/test.rp2040.yaml | 8 +- tests/components/ultrasonic/common.yaml | 7 ++ .../ultrasonic/test.esp32-c3-idf.yaml | 8 +- .../components/ultrasonic/test.esp32-c3.yaml | 8 +- .../components/ultrasonic/test.esp32-idf.yaml | 8 +- tests/components/ultrasonic/test.esp32.yaml | 8 +- tests/components/ultrasonic/test.esp8266.yaml | 8 +- tests/components/ultrasonic/test.rp2040.yaml | 8 +- tests/components/uptime/common.yaml | 3 + .../components/uptime/test.esp32-c3-idf.yaml | 4 +- tests/components/uptime/test.esp32-c3.yaml | 4 +- tests/components/uptime/test.esp32-idf.yaml | 4 +- tests/components/uptime/test.esp32.yaml | 4 +- tests/components/uptime/test.esp8266.yaml | 4 +- tests/components/uptime/test.rp2040.yaml | 4 +- tests/components/version/common.yaml | 3 + .../components/version/test.esp32-c3-idf.yaml | 4 +- tests/components/version/test.esp32-c3.yaml | 4 +- tests/components/version/test.esp32-idf.yaml | 4 +- tests/components/version/test.esp32.yaml | 4 +- tests/components/version/test.esp8266.yaml | 4 +- tests/components/version/test.rp2040.yaml | 4 +- tests/components/wake_on_lan/common.yaml | 9 ++ .../components/wake_on_lan/test.esp32-c3.yaml | 10 +- tests/components/wake_on_lan/test.esp32.yaml | 10 +- .../components/wake_on_lan/test.esp8266.yaml | 10 +- tests/components/wake_on_lan/test.rp2040.yaml | 10 +- tests/components/web_server/common.yaml | 7 ++ .../web_server/test.esp32-c3-idf.yaml | 8 +- .../components/web_server/test.esp32-c3.yaml | 8 +- .../components/web_server/test.esp32-idf.yaml | 8 +- tests/components/web_server/test.esp32.yaml | 8 +- tests/components/web_server/test.esp8266.yaml | 8 +- tests/components/wiegand/common.yaml | 10 ++ .../components/wiegand/test.esp32-c3-idf.yaml | 11 +- tests/components/wiegand/test.esp32-c3.yaml | 11 +- tests/components/wiegand/test.esp32-idf.yaml | 11 +- tests/components/wiegand/test.esp32.yaml | 11 +- tests/components/wiegand/test.esp8266.yaml | 11 +- tests/components/wiegand/test.rp2040.yaml | 11 +- tests/components/wifi/common.yaml | 9 ++ tests/components/wifi/test.esp32-c3-idf.yaml | 10 +- tests/components/wifi/test.esp32-c3.yaml | 10 +- tests/components/wifi/test.esp32-idf.yaml | 10 +- tests/components/wifi/test.esp32.yaml | 10 +- tests/components/wifi/test.esp8266.yaml | 10 +- tests/components/wifi/test.rp2040.yaml | 10 +- tests/components/wifi_info/common.yaml | 18 +++ .../wifi_info/test.esp32-c3-idf.yaml | 19 +-- tests/components/wifi_info/test.esp32-c3.yaml | 19 +-- .../components/wifi_info/test.esp32-idf.yaml | 19 +-- tests/components/wifi_info/test.esp32.yaml | 19 +-- tests/components/wifi_info/test.esp8266.yaml | 19 +-- tests/components/wifi_info/test.rp2040.yaml | 19 +-- tests/components/wifi_signal/common.yaml | 8 ++ .../wifi_signal/test.esp32-c3-idf.yaml | 9 +- .../components/wifi_signal/test.esp32-c3.yaml | 9 +- .../wifi_signal/test.esp32-idf.yaml | 9 +- tests/components/wifi_signal/test.esp32.yaml | 9 +- .../components/wifi_signal/test.esp8266.yaml | 9 +- tests/components/wifi_signal/test.rp2040.yaml | 9 +- tests/components/xiaomi_ble/common.yaml | 3 + .../xiaomi_ble/test.esp32-c3-idf.yaml | 4 +- .../components/xiaomi_ble/test.esp32-c3.yaml | 4 +- .../components/xiaomi_ble/test.esp32-idf.yaml | 4 +- tests/components/xiaomi_ble/test.esp32.yaml | 4 +- tests/components/xiaomi_cgd1/common.yaml | 12 ++ .../xiaomi_cgd1/test.esp32-c3-idf.yaml | 13 +- .../components/xiaomi_cgd1/test.esp32-c3.yaml | 13 +- .../xiaomi_cgd1/test.esp32-idf.yaml | 13 +- tests/components/xiaomi_cgd1/test.esp32.yaml | 13 +- tests/components/xiaomi_cgdk2/common.yaml | 12 ++ .../xiaomi_cgdk2/test.esp32-c3-idf.yaml | 13 +- .../xiaomi_cgdk2/test.esp32-c3.yaml | 13 +- .../xiaomi_cgdk2/test.esp32-idf.yaml | 13 +- tests/components/xiaomi_cgdk2/test.esp32.yaml | 13 +- tests/components/xiaomi_cgg1/common.yaml | 12 ++ .../xiaomi_cgg1/test.esp32-c3-idf.yaml | 13 +- .../components/xiaomi_cgg1/test.esp32-c3.yaml | 13 +- .../xiaomi_cgg1/test.esp32-idf.yaml | 13 +- tests/components/xiaomi_cgg1/test.esp32.yaml | 13 +- tests/components/xiaomi_cgpr1/common.yaml | 13 ++ .../xiaomi_cgpr1/test.esp32-c3-idf.yaml | 14 +-- .../xiaomi_cgpr1/test.esp32-c3.yaml | 14 +-- .../xiaomi_cgpr1/test.esp32-idf.yaml | 14 +-- tests/components/xiaomi_cgpr1/test.esp32.yaml | 14 +-- tests/components/xiaomi_gcls002/common.yaml | 13 ++ .../xiaomi_gcls002/test.esp32-c3-idf.yaml | 14 +-- .../xiaomi_gcls002/test.esp32-c3.yaml | 14 +-- .../xiaomi_gcls002/test.esp32-idf.yaml | 14 +-- .../components/xiaomi_gcls002/test.esp32.yaml | 14 +-- tests/components/xiaomi_hhccjcy01/common.yaml | 15 +++ .../xiaomi_hhccjcy01/test.esp32-c3-idf.yaml | 16 +-- .../xiaomi_hhccjcy01/test.esp32-c3.yaml | 16 +-- .../xiaomi_hhccjcy01/test.esp32-idf.yaml | 16 +-- .../xiaomi_hhccjcy01/test.esp32.yaml | 16 +-- .../components/xiaomi_hhccpot002/common.yaml | 9 ++ .../xiaomi_hhccpot002/test.esp32-c3-idf.yaml | 10 +- .../xiaomi_hhccpot002/test.esp32-c3.yaml | 10 +- .../xiaomi_hhccpot002/test.esp32-idf.yaml | 10 +- .../xiaomi_hhccpot002/test.esp32.yaml | 10 +- tests/components/xiaomi_jqjcy01ym/common.yaml | 13 ++ .../xiaomi_jqjcy01ym/test.esp32-c3-idf.yaml | 14 +-- .../xiaomi_jqjcy01ym/test.esp32-c3.yaml | 14 +-- .../xiaomi_jqjcy01ym/test.esp32-idf.yaml | 14 +-- .../xiaomi_jqjcy01ym/test.esp32.yaml | 14 +-- tests/components/xiaomi_lywsd02/common.yaml | 11 ++ .../xiaomi_lywsd02/test.esp32-c3-idf.yaml | 12 +- .../xiaomi_lywsd02/test.esp32-c3.yaml | 12 +- .../xiaomi_lywsd02/test.esp32-idf.yaml | 12 +- .../components/xiaomi_lywsd02/test.esp32.yaml | 12 +- .../components/xiaomi_lywsd03mmc/common.yaml | 12 ++ .../xiaomi_lywsd03mmc/test.esp32-c3-idf.yaml | 13 +- .../xiaomi_lywsd03mmc/test.esp32-c3.yaml | 13 +- .../xiaomi_lywsd03mmc/test.esp32-idf.yaml | 13 +- .../xiaomi_lywsd03mmc/test.esp32.yaml | 13 +- tests/components/xiaomi_lywsdcgq/common.yaml | 11 ++ .../xiaomi_lywsdcgq/test.esp32-c3-idf.yaml | 12 +- .../xiaomi_lywsdcgq/test.esp32-c3.yaml | 12 +- .../xiaomi_lywsdcgq/test.esp32-idf.yaml | 12 +- .../xiaomi_lywsdcgq/test.esp32.yaml | 12 +- tests/components/xiaomi_mhoc303/common.yaml | 11 ++ .../xiaomi_mhoc303/test.esp32-c3-idf.yaml | 12 +- .../xiaomi_mhoc303/test.esp32-c3.yaml | 12 +- .../xiaomi_mhoc303/test.esp32-idf.yaml | 12 +- .../components/xiaomi_mhoc303/test.esp32.yaml | 12 +- tests/components/xiaomi_mhoc401/common.yaml | 12 ++ .../xiaomi_mhoc401/test.esp32-c3-idf.yaml | 13 +- .../xiaomi_mhoc401/test.esp32-c3.yaml | 13 +- .../xiaomi_mhoc401/test.esp32-idf.yaml | 13 +- .../components/xiaomi_mhoc401/test.esp32.yaml | 13 +- .../xiaomi_miscale copy/common.yaml | 9 ++ .../test.esp32-c3-idf.yaml | 10 +- .../xiaomi_miscale copy/test.esp32-c3.yaml | 10 +- .../xiaomi_miscale copy/test.esp32-idf.yaml | 10 +- .../xiaomi_miscale copy/test.esp32.yaml | 10 +- tests/components/xiaomi_miscale/common.yaml | 9 ++ .../xiaomi_miscale/test.esp32-c3-idf.yaml | 10 +- .../xiaomi_miscale/test.esp32-c3.yaml | 10 +- .../xiaomi_miscale/test.esp32-idf.yaml | 10 +- .../components/xiaomi_miscale/test.esp32.yaml | 10 +- tests/components/xiaomi_mjyd02yla/common.yaml | 13 ++ .../xiaomi_mjyd02yla/test.esp32-c3-idf.yaml | 14 +-- .../xiaomi_mjyd02yla/test.esp32-c3.yaml | 14 +-- .../xiaomi_mjyd02yla/test.esp32-idf.yaml | 14 +-- .../xiaomi_mjyd02yla/test.esp32.yaml | 14 +-- tests/components/xiaomi_mue4094rt/common.yaml | 7 ++ .../xiaomi_mue4094rt/test.esp32-c3-idf.yaml | 8 +- .../xiaomi_mue4094rt/test.esp32-c3.yaml | 8 +- .../xiaomi_mue4094rt/test.esp32-idf.yaml | 8 +- .../xiaomi_mue4094rt/test.esp32.yaml | 8 +- tests/components/xiaomi_rtcgq02lm/common.yaml | 22 ++++ .../xiaomi_rtcgq02lm/test.esp32-c3-idf.yaml | 23 +--- .../xiaomi_rtcgq02lm/test.esp32-c3.yaml | 23 +--- .../xiaomi_rtcgq02lm/test.esp32-idf.yaml | 23 +--- .../xiaomi_rtcgq02lm/test.esp32.yaml | 23 +--- tests/components/xiaomi_wx08zm/common.yaml | 10 ++ .../xiaomi_wx08zm/test.esp32-c3-idf.yaml | 11 +- .../xiaomi_wx08zm/test.esp32-c3.yaml | 11 +- .../xiaomi_wx08zm/test.esp32-idf.yaml | 11 +- .../components/xiaomi_wx08zm/test.esp32.yaml | 11 +- 779 files changed, 3474 insertions(+), 12186 deletions(-) create mode 100644 tests/components/absolute_humidity/common.yaml create mode 100644 tests/components/airthings_wave_mini/common.yaml create mode 100644 tests/components/airthings_wave_plus/common.yaml create mode 100644 tests/components/alarm_control_panel/common.yaml create mode 100644 tests/components/alpha3/common.yaml create mode 100644 tests/components/am43/common.yaml create mode 100644 tests/components/analog_threshold/common.yaml create mode 100644 tests/components/anova/common.yaml create mode 100644 tests/components/api/common.yaml create mode 100644 tests/components/atc_mithermometer/common.yaml create mode 100644 tests/components/b_parasite/common.yaml create mode 100644 tests/components/bang_bang/common.yaml create mode 100644 tests/components/bedjet/common.yaml create mode 100644 tests/components/binary_sensor_map/common.yaml create mode 100644 tests/components/ble_client/common.yaml create mode 100644 tests/components/ble_presence/common.yaml create mode 100644 tests/components/ble_rssi/common.yaml create mode 100644 tests/components/ble_scanner/common.yaml create mode 100644 tests/components/button/common.yaml create mode 100644 tests/components/canbus/common.yaml create mode 100644 tests/components/captive_portal/common.yaml create mode 100644 tests/components/color/common.yaml create mode 100644 tests/components/combination/common.yaml create mode 100644 tests/components/cst226/common.yaml create mode 100644 tests/components/cst816/common.yaml create mode 100644 tests/components/dallas/common.yaml create mode 100644 tests/components/datetime/common.yaml create mode 100644 tests/components/debug/common.yaml create mode 100644 tests/components/dht/common.yaml create mode 100644 tests/components/display/common.yaml create mode 100644 tests/components/duty_cycle/common.yaml create mode 100644 tests/components/duty_time/common.yaml create mode 100644 tests/components/endstop/common.yaml create mode 100644 tests/components/esp32_ble/common.yaml create mode 100644 tests/components/esp32_ble_beacon/common.yaml create mode 100644 tests/components/esp32_ble_client/common.yaml create mode 100644 tests/components/esp32_ble_server/common.yaml create mode 100644 tests/components/esp32_ble_tracker/common.yaml create mode 100644 tests/components/esp32_camera/common.yaml create mode 100644 tests/components/esp32_camera_web_server/common.yaml create mode 100644 tests/components/esp32_dac/common.yaml create mode 100644 tests/components/esp32_hall/common.yaml create mode 100644 tests/components/esp32_improv/common.yaml create mode 100644 tests/components/esp32_touch/common.yaml create mode 100644 tests/components/esp8266_pwm/common.yaml create mode 100644 tests/components/ethernet/common.yaml create mode 100644 tests/components/ethernet_info/common.yaml create mode 100644 tests/components/event/common.yaml create mode 100644 tests/components/exposure_notifications/common.yaml create mode 100644 tests/components/external_components/common.yaml create mode 100644 tests/components/factory_reset/common.yaml create mode 100644 tests/components/fastled_clockless/common.yaml create mode 100644 tests/components/fastled_spi/common.yaml create mode 100644 tests/components/feedback/common.yaml create mode 100644 tests/components/globals/common.yaml create mode 100644 tests/components/host/common.yaml create mode 100644 tests/components/improv_serial/common.yaml create mode 100644 tests/components/inkbird_ibsth1_mini/common.yaml create mode 100644 tests/components/inkplate6/common.yaml create mode 100644 tests/components/interval/common.yaml create mode 100644 tests/components/ledc/common.yaml create mode 100644 tests/components/lightwaverf/common.yaml create mode 100644 tests/components/lock/common.yaml create mode 100644 tests/components/logger/common.yaml create mode 100644 tests/components/mdns/common.yaml create mode 100644 tests/components/media_player/common.yaml create mode 100644 tests/components/micro_wake_word/common.yaml create mode 100644 tests/components/midea_ir/common.yaml create mode 100644 tests/components/mitsubishi/common.yaml create mode 100644 tests/components/mopeka_ble/common.yaml create mode 100644 tests/components/mopeka_pro_check/common.yaml create mode 100644 tests/components/mopeka_std_check/common.yaml create mode 100644 tests/components/my9231/common.yaml create mode 100644 tests/components/network/common.yaml create mode 100644 tests/components/noblex/common.yaml create mode 100644 tests/components/ota/common.yaml create mode 100644 tests/components/pid/common.yaml create mode 100644 tests/components/power_supply/common.yaml create mode 100644 tests/components/prometheus/common.yaml create mode 100644 tests/components/psram/common.yaml create mode 100644 tests/components/pulse_counter/common.yaml create mode 100644 tests/components/pulse_meter/common.yaml create mode 100644 tests/components/pulse_width/common.yaml create mode 100644 tests/components/pvvx_mithermometer/common.yaml create mode 100644 tests/components/qspi_amoled/common.yaml create mode 100644 tests/components/radon_eye_ble/common.yaml create mode 100644 tests/components/radon_eye_rd200/common.yaml create mode 100644 tests/components/restart/common.yaml create mode 100644 tests/components/rp2040_pio_led_strip/common.yaml create mode 100644 tests/components/rp2040_pwm/common.yaml create mode 100644 tests/components/rpi_dpi_rgb/common.yaml create mode 100644 tests/components/ruuvi_ble/common.yaml create mode 100644 tests/components/ruuvitag/common.yaml create mode 100644 tests/components/safe_mode/common.yaml create mode 100644 tests/components/shelly_dimmer/common.yaml create mode 100644 tests/components/shutdown/common.yaml create mode 100644 tests/components/sigma_delta_output/common.yaml create mode 100644 tests/components/slow_pwm/common.yaml create mode 100644 tests/components/sm16716/common.yaml create mode 100644 tests/components/sm2135/common.yaml create mode 100644 tests/components/sm2235/common.yaml create mode 100644 tests/components/sm2335/common.yaml create mode 100644 tests/components/sntp/common.yaml create mode 100644 tests/components/sprinkler/common.yaml create mode 100644 tests/components/st7701s/common.yaml create mode 100644 tests/components/status/common.yaml create mode 100644 tests/components/status_led/common.yaml create mode 100644 tests/components/stepper/common.yaml create mode 100644 tests/components/sun/common.yaml create mode 100644 tests/components/thermostat/common.yaml create mode 100644 tests/components/time/common.yaml create mode 100644 tests/components/time_based/common.yaml create mode 100644 tests/components/tm1638/common.yaml create mode 100644 tests/components/tm1651/common.yaml create mode 100644 tests/components/tx20/common.yaml create mode 100644 tests/components/ultrasonic/common.yaml create mode 100644 tests/components/uptime/common.yaml create mode 100644 tests/components/version/common.yaml create mode 100644 tests/components/wake_on_lan/common.yaml create mode 100644 tests/components/web_server/common.yaml create mode 100644 tests/components/wiegand/common.yaml create mode 100644 tests/components/wifi/common.yaml create mode 100644 tests/components/wifi_info/common.yaml create mode 100644 tests/components/wifi_signal/common.yaml create mode 100644 tests/components/xiaomi_ble/common.yaml create mode 100644 tests/components/xiaomi_cgd1/common.yaml create mode 100644 tests/components/xiaomi_cgdk2/common.yaml create mode 100644 tests/components/xiaomi_cgg1/common.yaml create mode 100644 tests/components/xiaomi_cgpr1/common.yaml create mode 100644 tests/components/xiaomi_gcls002/common.yaml create mode 100644 tests/components/xiaomi_hhccjcy01/common.yaml create mode 100644 tests/components/xiaomi_hhccpot002/common.yaml create mode 100644 tests/components/xiaomi_jqjcy01ym/common.yaml create mode 100644 tests/components/xiaomi_lywsd02/common.yaml create mode 100644 tests/components/xiaomi_lywsd03mmc/common.yaml create mode 100644 tests/components/xiaomi_lywsdcgq/common.yaml create mode 100644 tests/components/xiaomi_mhoc303/common.yaml create mode 100644 tests/components/xiaomi_mhoc401/common.yaml create mode 100644 tests/components/xiaomi_miscale copy/common.yaml create mode 100644 tests/components/xiaomi_miscale/common.yaml create mode 100644 tests/components/xiaomi_mjyd02yla/common.yaml create mode 100644 tests/components/xiaomi_mue4094rt/common.yaml create mode 100644 tests/components/xiaomi_rtcgq02lm/common.yaml create mode 100644 tests/components/xiaomi_wx08zm/common.yaml diff --git a/tests/components/absolute_humidity/common.yaml b/tests/components/absolute_humidity/common.yaml new file mode 100644 index 0000000000..87a99f5206 --- /dev/null +++ b/tests/components/absolute_humidity/common.yaml @@ -0,0 +1,21 @@ +sensor: + - platform: absolute_humidity + name: Absolute Humidity + temperature: template_temperature + humidity: template_humidity + - platform: template + id: template_humidity + lambda: |- + if (millis() > 10000) { + return 0.6; + } else { + return 0.0; + } + - platform: template + id: template_temperature + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } diff --git a/tests/components/absolute_humidity/test.esp32-c3-idf.yaml b/tests/components/absolute_humidity/test.esp32-c3-idf.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.esp32-c3-idf.yaml +++ b/tests/components/absolute_humidity/test.esp32-c3-idf.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/absolute_humidity/test.esp32-c3.yaml b/tests/components/absolute_humidity/test.esp32-c3.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.esp32-c3.yaml +++ b/tests/components/absolute_humidity/test.esp32-c3.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/absolute_humidity/test.esp32-idf.yaml b/tests/components/absolute_humidity/test.esp32-idf.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.esp32-idf.yaml +++ b/tests/components/absolute_humidity/test.esp32-idf.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/absolute_humidity/test.esp32.yaml b/tests/components/absolute_humidity/test.esp32.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.esp32.yaml +++ b/tests/components/absolute_humidity/test.esp32.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/absolute_humidity/test.esp8266.yaml b/tests/components/absolute_humidity/test.esp8266.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.esp8266.yaml +++ b/tests/components/absolute_humidity/test.esp8266.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/absolute_humidity/test.rp2040.yaml b/tests/components/absolute_humidity/test.rp2040.yaml index 87a99f5206..dade44d145 100644 --- a/tests/components/absolute_humidity/test.rp2040.yaml +++ b/tests/components/absolute_humidity/test.rp2040.yaml @@ -1,21 +1 @@ -sensor: - - platform: absolute_humidity - name: Absolute Humidity - temperature: template_temperature - humidity: template_humidity - - platform: template - id: template_humidity - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } +<<: !include common.yaml diff --git a/tests/components/airthings_wave_mini/common.yaml b/tests/components/airthings_wave_mini/common.yaml new file mode 100644 index 0000000000..87902e6c66 --- /dev/null +++ b/tests/components/airthings_wave_mini/common.yaml @@ -0,0 +1,22 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: airthingsmini01 + +sensor: + - id: airthingswm + platform: airthings_wave_mini + ble_client_id: airthingsmini01 + update_interval: 5min + battery_update_interval: 12h + temperature: + name: Wave Mini Temperature + humidity: + name: Wave Mini Humidity + pressure: + name: Wave Mini Pressure + tvoc: + name: Wave Mini VOC + battery_voltage: + name: Wave Mini Battery Voltage diff --git a/tests/components/airthings_wave_mini/test.esp32-c3-idf.yaml b/tests/components/airthings_wave_mini/test.esp32-c3-idf.yaml index 87902e6c66..dade44d145 100644 --- a/tests/components/airthings_wave_mini/test.esp32-c3-idf.yaml +++ b/tests/components/airthings_wave_mini/test.esp32-c3-idf.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthingsmini01 - -sensor: - - id: airthingswm - platform: airthings_wave_mini - ble_client_id: airthingsmini01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Mini Temperature - humidity: - name: Wave Mini Humidity - pressure: - name: Wave Mini Pressure - tvoc: - name: Wave Mini VOC - battery_voltage: - name: Wave Mini Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_mini/test.esp32-c3.yaml b/tests/components/airthings_wave_mini/test.esp32-c3.yaml index 87902e6c66..dade44d145 100644 --- a/tests/components/airthings_wave_mini/test.esp32-c3.yaml +++ b/tests/components/airthings_wave_mini/test.esp32-c3.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthingsmini01 - -sensor: - - id: airthingswm - platform: airthings_wave_mini - ble_client_id: airthingsmini01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Mini Temperature - humidity: - name: Wave Mini Humidity - pressure: - name: Wave Mini Pressure - tvoc: - name: Wave Mini VOC - battery_voltage: - name: Wave Mini Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_mini/test.esp32-idf.yaml b/tests/components/airthings_wave_mini/test.esp32-idf.yaml index 87902e6c66..dade44d145 100644 --- a/tests/components/airthings_wave_mini/test.esp32-idf.yaml +++ b/tests/components/airthings_wave_mini/test.esp32-idf.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthingsmini01 - -sensor: - - id: airthingswm - platform: airthings_wave_mini - ble_client_id: airthingsmini01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Mini Temperature - humidity: - name: Wave Mini Humidity - pressure: - name: Wave Mini Pressure - tvoc: - name: Wave Mini VOC - battery_voltage: - name: Wave Mini Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_mini/test.esp32.yaml b/tests/components/airthings_wave_mini/test.esp32.yaml index 87902e6c66..dade44d145 100644 --- a/tests/components/airthings_wave_mini/test.esp32.yaml +++ b/tests/components/airthings_wave_mini/test.esp32.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthingsmini01 - -sensor: - - id: airthingswm - platform: airthings_wave_mini - ble_client_id: airthingsmini01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Mini Temperature - humidity: - name: Wave Mini Humidity - pressure: - name: Wave Mini Pressure - tvoc: - name: Wave Mini VOC - battery_voltage: - name: Wave Mini Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_plus/common.yaml b/tests/components/airthings_wave_plus/common.yaml new file mode 100644 index 0000000000..2124fcdaec --- /dev/null +++ b/tests/components/airthings_wave_plus/common.yaml @@ -0,0 +1,28 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: airthings01 + +sensor: + - id: airthingswp + platform: airthings_wave_plus + ble_client_id: airthings01 + update_interval: 5min + battery_update_interval: 12h + temperature: + name: Wave Plus Temperature + radon: + name: Wave Plus Radon + radon_long_term: + name: Wave Plus Radon Long Term + pressure: + name: Wave Plus Pressure + humidity: + name: Wave Plus Humidity + co2: + name: Wave Plus CO2 + tvoc: + name: Wave Plus VOC + battery_voltage: + name: Wave Plus Battery Voltage diff --git a/tests/components/airthings_wave_plus/test.esp32-c3-idf.yaml b/tests/components/airthings_wave_plus/test.esp32-c3-idf.yaml index 2124fcdaec..dade44d145 100644 --- a/tests/components/airthings_wave_plus/test.esp32-c3-idf.yaml +++ b/tests/components/airthings_wave_plus/test.esp32-c3-idf.yaml @@ -1,28 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthings01 - -sensor: - - id: airthingswp - platform: airthings_wave_plus - ble_client_id: airthings01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Plus Temperature - radon: - name: Wave Plus Radon - radon_long_term: - name: Wave Plus Radon Long Term - pressure: - name: Wave Plus Pressure - humidity: - name: Wave Plus Humidity - co2: - name: Wave Plus CO2 - tvoc: - name: Wave Plus VOC - battery_voltage: - name: Wave Plus Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_plus/test.esp32-c3.yaml b/tests/components/airthings_wave_plus/test.esp32-c3.yaml index 2124fcdaec..dade44d145 100644 --- a/tests/components/airthings_wave_plus/test.esp32-c3.yaml +++ b/tests/components/airthings_wave_plus/test.esp32-c3.yaml @@ -1,28 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthings01 - -sensor: - - id: airthingswp - platform: airthings_wave_plus - ble_client_id: airthings01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Plus Temperature - radon: - name: Wave Plus Radon - radon_long_term: - name: Wave Plus Radon Long Term - pressure: - name: Wave Plus Pressure - humidity: - name: Wave Plus Humidity - co2: - name: Wave Plus CO2 - tvoc: - name: Wave Plus VOC - battery_voltage: - name: Wave Plus Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_plus/test.esp32-idf.yaml b/tests/components/airthings_wave_plus/test.esp32-idf.yaml index 2124fcdaec..dade44d145 100644 --- a/tests/components/airthings_wave_plus/test.esp32-idf.yaml +++ b/tests/components/airthings_wave_plus/test.esp32-idf.yaml @@ -1,28 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthings01 - -sensor: - - id: airthingswp - platform: airthings_wave_plus - ble_client_id: airthings01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Plus Temperature - radon: - name: Wave Plus Radon - radon_long_term: - name: Wave Plus Radon Long Term - pressure: - name: Wave Plus Pressure - humidity: - name: Wave Plus Humidity - co2: - name: Wave Plus CO2 - tvoc: - name: Wave Plus VOC - battery_voltage: - name: Wave Plus Battery Voltage +<<: !include common.yaml diff --git a/tests/components/airthings_wave_plus/test.esp32.yaml b/tests/components/airthings_wave_plus/test.esp32.yaml index 2124fcdaec..dade44d145 100644 --- a/tests/components/airthings_wave_plus/test.esp32.yaml +++ b/tests/components/airthings_wave_plus/test.esp32.yaml @@ -1,28 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: airthings01 - -sensor: - - id: airthingswp - platform: airthings_wave_plus - ble_client_id: airthings01 - update_interval: 5min - battery_update_interval: 12h - temperature: - name: Wave Plus Temperature - radon: - name: Wave Plus Radon - radon_long_term: - name: Wave Plus Radon Long Term - pressure: - name: Wave Plus Pressure - humidity: - name: Wave Plus Humidity - co2: - name: Wave Plus CO2 - tvoc: - name: Wave Plus VOC - battery_voltage: - name: Wave Plus Battery Voltage +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/common.yaml b/tests/components/alarm_control_panel/common.yaml new file mode 100644 index 0000000000..218274bad4 --- /dev/null +++ b/tests/components/alarm_control_panel/common.yaml @@ -0,0 +1,64 @@ +binary_sensor: + - platform: gpio + id: bin1 + pin: 1 + +alarm_control_panel: + - platform: template + id: alarmcontrolpanel1 + name: Alarm Panel + codes: + - "1234" + requires_code_to_arm: true + arming_home_time: 1s + arming_night_time: 1s + arming_away_time: 15s + pending_time: 15s + trigger_time: 30s + binary_sensors: + - input: bin1 + bypass_armed_home: true + bypass_armed_night: true + on_state: + then: + - lambda: !lambda |- + ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); + - platform: template + id: alarmcontrolpanel2 + name: Alarm Panel + codes: + - "1234" + requires_code_to_arm: true + arming_home_time: 1s + arming_night_time: 1s + arming_away_time: 15s + pending_time: 15s + trigger_time: 30s + binary_sensors: + - input: bin1 + bypass_armed_home: true + bypass_armed_night: true + on_disarmed: + then: + - logger.log: "### DISARMED ###" + on_pending: + then: + - logger.log: "### PENDING ###" + on_arming: + then: + - logger.log: "### ARMING ###" + on_armed_home: + then: + - logger.log: "### ARMED HOME ###" + on_armed_night: + then: + - logger.log: "### ARMED NIGHT ###" + on_armed_away: + then: + - logger.log: "### ARMED AWAY ###" + on_triggered: + then: + - logger.log: "### TRIGGERED ###" + on_cleared: + then: + - logger.log: "### CLEARED ###" diff --git a/tests/components/alarm_control_panel/test.esp32-c3-idf.yaml b/tests/components/alarm_control_panel/test.esp32-c3-idf.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.esp32-c3-idf.yaml +++ b/tests/components/alarm_control_panel/test.esp32-c3-idf.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/test.esp32-c3.yaml b/tests/components/alarm_control_panel/test.esp32-c3.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.esp32-c3.yaml +++ b/tests/components/alarm_control_panel/test.esp32-c3.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/test.esp32-idf.yaml b/tests/components/alarm_control_panel/test.esp32-idf.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.esp32-idf.yaml +++ b/tests/components/alarm_control_panel/test.esp32-idf.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/test.esp32.yaml b/tests/components/alarm_control_panel/test.esp32.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.esp32.yaml +++ b/tests/components/alarm_control_panel/test.esp32.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/test.esp8266.yaml b/tests/components/alarm_control_panel/test.esp8266.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.esp8266.yaml +++ b/tests/components/alarm_control_panel/test.esp8266.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alarm_control_panel/test.rp2040.yaml b/tests/components/alarm_control_panel/test.rp2040.yaml index 218274bad4..dade44d145 100644 --- a/tests/components/alarm_control_panel/test.rp2040.yaml +++ b/tests/components/alarm_control_panel/test.rp2040.yaml @@ -1,64 +1 @@ -binary_sensor: - - platform: gpio - id: bin1 - pin: 1 - -alarm_control_panel: - - platform: template - id: alarmcontrolpanel1 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_state: - then: - - lambda: !lambda |- - ESP_LOGD("TEST", "State change %s", LOG_STR_ARG(alarm_control_panel_state_to_string(id(alarmcontrolpanel1)->get_state()))); - - platform: template - id: alarmcontrolpanel2 - name: Alarm Panel - codes: - - "1234" - requires_code_to_arm: true - arming_home_time: 1s - arming_night_time: 1s - arming_away_time: 15s - pending_time: 15s - trigger_time: 30s - binary_sensors: - - input: bin1 - bypass_armed_home: true - bypass_armed_night: true - on_disarmed: - then: - - logger.log: "### DISARMED ###" - on_pending: - then: - - logger.log: "### PENDING ###" - on_arming: - then: - - logger.log: "### ARMING ###" - on_armed_home: - then: - - logger.log: "### ARMED HOME ###" - on_armed_night: - then: - - logger.log: "### ARMED NIGHT ###" - on_armed_away: - then: - - logger.log: "### ARMED AWAY ###" - on_triggered: - then: - - logger.log: "### TRIGGERED ###" - on_cleared: - then: - - logger.log: "### CLEARED ###" +<<: !include common.yaml diff --git a/tests/components/alpha3/common.yaml b/tests/components/alpha3/common.yaml new file mode 100644 index 0000000000..913f086ac4 --- /dev/null +++ b/tests/components/alpha3/common.yaml @@ -0,0 +1,17 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: alpha3_blec + +sensor: + - platform: alpha3 + ble_client_id: alpha3_blec + flow: + name: "Radiator Pump Flow" + head: + name: "Radiator Pump Head" + power: + name: "Radiator Pump Power" + speed: + name: "Radiator Pump Speed" diff --git a/tests/components/alpha3/test.esp32-c3-idf.yaml b/tests/components/alpha3/test.esp32-c3-idf.yaml index 913f086ac4..dade44d145 100644 --- a/tests/components/alpha3/test.esp32-c3-idf.yaml +++ b/tests/components/alpha3/test.esp32-c3-idf.yaml @@ -1,17 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: alpha3_blec - -sensor: - - platform: alpha3 - ble_client_id: alpha3_blec - flow: - name: "Radiator Pump Flow" - head: - name: "Radiator Pump Head" - power: - name: "Radiator Pump Power" - speed: - name: "Radiator Pump Speed" +<<: !include common.yaml diff --git a/tests/components/alpha3/test.esp32-c3.yaml b/tests/components/alpha3/test.esp32-c3.yaml index 913f086ac4..dade44d145 100644 --- a/tests/components/alpha3/test.esp32-c3.yaml +++ b/tests/components/alpha3/test.esp32-c3.yaml @@ -1,17 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: alpha3_blec - -sensor: - - platform: alpha3 - ble_client_id: alpha3_blec - flow: - name: "Radiator Pump Flow" - head: - name: "Radiator Pump Head" - power: - name: "Radiator Pump Power" - speed: - name: "Radiator Pump Speed" +<<: !include common.yaml diff --git a/tests/components/alpha3/test.esp32-idf.yaml b/tests/components/alpha3/test.esp32-idf.yaml index 913f086ac4..dade44d145 100644 --- a/tests/components/alpha3/test.esp32-idf.yaml +++ b/tests/components/alpha3/test.esp32-idf.yaml @@ -1,17 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: alpha3_blec - -sensor: - - platform: alpha3 - ble_client_id: alpha3_blec - flow: - name: "Radiator Pump Flow" - head: - name: "Radiator Pump Head" - power: - name: "Radiator Pump Power" - speed: - name: "Radiator Pump Speed" +<<: !include common.yaml diff --git a/tests/components/alpha3/test.esp32.yaml b/tests/components/alpha3/test.esp32.yaml index 913f086ac4..dade44d145 100644 --- a/tests/components/alpha3/test.esp32.yaml +++ b/tests/components/alpha3/test.esp32.yaml @@ -1,17 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: alpha3_blec - -sensor: - - platform: alpha3 - ble_client_id: alpha3_blec - flow: - name: "Radiator Pump Flow" - head: - name: "Radiator Pump Head" - power: - name: "Radiator Pump Power" - speed: - name: "Radiator Pump Speed" +<<: !include common.yaml diff --git a/tests/components/am43/common.yaml b/tests/components/am43/common.yaml new file mode 100644 index 0000000000..60b7d81a55 --- /dev/null +++ b/tests/components/am43/common.yaml @@ -0,0 +1,19 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: am43_blec + +cover: + - platform: am43 + name: Test AM43 Cover + id: am43_test + ble_client_id: am43_blec + +sensor: + - platform: am43 + ble_client_id: am43_blec + battery_level: + name: Kitchen blinds battery + illuminance: + name: Kitchen blinds light diff --git a/tests/components/am43/test.esp32-c3-idf.yaml b/tests/components/am43/test.esp32-c3-idf.yaml index 60b7d81a55..dade44d145 100644 --- a/tests/components/am43/test.esp32-c3-idf.yaml +++ b/tests/components/am43/test.esp32-c3-idf.yaml @@ -1,19 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: am43_blec - -cover: - - platform: am43 - name: Test AM43 Cover - id: am43_test - ble_client_id: am43_blec - -sensor: - - platform: am43 - ble_client_id: am43_blec - battery_level: - name: Kitchen blinds battery - illuminance: - name: Kitchen blinds light +<<: !include common.yaml diff --git a/tests/components/am43/test.esp32-c3.yaml b/tests/components/am43/test.esp32-c3.yaml index 60b7d81a55..dade44d145 100644 --- a/tests/components/am43/test.esp32-c3.yaml +++ b/tests/components/am43/test.esp32-c3.yaml @@ -1,19 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: am43_blec - -cover: - - platform: am43 - name: Test AM43 Cover - id: am43_test - ble_client_id: am43_blec - -sensor: - - platform: am43 - ble_client_id: am43_blec - battery_level: - name: Kitchen blinds battery - illuminance: - name: Kitchen blinds light +<<: !include common.yaml diff --git a/tests/components/am43/test.esp32-idf.yaml b/tests/components/am43/test.esp32-idf.yaml index 60b7d81a55..dade44d145 100644 --- a/tests/components/am43/test.esp32-idf.yaml +++ b/tests/components/am43/test.esp32-idf.yaml @@ -1,19 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: am43_blec - -cover: - - platform: am43 - name: Test AM43 Cover - id: am43_test - ble_client_id: am43_blec - -sensor: - - platform: am43 - ble_client_id: am43_blec - battery_level: - name: Kitchen blinds battery - illuminance: - name: Kitchen blinds light +<<: !include common.yaml diff --git a/tests/components/am43/test.esp32.yaml b/tests/components/am43/test.esp32.yaml index 60b7d81a55..dade44d145 100644 --- a/tests/components/am43/test.esp32.yaml +++ b/tests/components/am43/test.esp32.yaml @@ -1,19 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: am43_blec - -cover: - - platform: am43 - name: Test AM43 Cover - id: am43_test - ble_client_id: am43_blec - -sensor: - - platform: am43 - ble_client_id: am43_blec - battery_level: - name: Kitchen blinds battery - illuminance: - name: Kitchen blinds light +<<: !include common.yaml diff --git a/tests/components/analog_threshold/common.yaml b/tests/components/analog_threshold/common.yaml new file mode 100644 index 0000000000..b5c14dfe56 --- /dev/null +++ b/tests/components/analog_threshold/common.yaml @@ -0,0 +1,28 @@ +sensor: + - platform: template + id: template_sensor + name: Template Sensor + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 15s + +binary_sensor: + - platform: analog_threshold + name: Analog Threshold 1 + sensor_id: template_sensor + threshold: + upper: 110 + lower: 90 + filters: + - delayed_on: 0s + - delayed_off: 10s + - platform: analog_threshold + name: Analog Threshold 2 + sensor_id: template_sensor + threshold: 100 + filters: + - invert: diff --git a/tests/components/analog_threshold/test.esp32-c3-idf.yaml b/tests/components/analog_threshold/test.esp32-c3-idf.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.esp32-c3-idf.yaml +++ b/tests/components/analog_threshold/test.esp32-c3-idf.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/analog_threshold/test.esp32-c3.yaml b/tests/components/analog_threshold/test.esp32-c3.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.esp32-c3.yaml +++ b/tests/components/analog_threshold/test.esp32-c3.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/analog_threshold/test.esp32-idf.yaml b/tests/components/analog_threshold/test.esp32-idf.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.esp32-idf.yaml +++ b/tests/components/analog_threshold/test.esp32-idf.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/analog_threshold/test.esp32.yaml b/tests/components/analog_threshold/test.esp32.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.esp32.yaml +++ b/tests/components/analog_threshold/test.esp32.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/analog_threshold/test.esp8266.yaml b/tests/components/analog_threshold/test.esp8266.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.esp8266.yaml +++ b/tests/components/analog_threshold/test.esp8266.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/analog_threshold/test.rp2040.yaml b/tests/components/analog_threshold/test.rp2040.yaml index b5c14dfe56..dade44d145 100644 --- a/tests/components/analog_threshold/test.rp2040.yaml +++ b/tests/components/analog_threshold/test.rp2040.yaml @@ -1,28 +1 @@ -sensor: - - platform: template - id: template_sensor - name: Template Sensor - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 15s - -binary_sensor: - - platform: analog_threshold - name: Analog Threshold 1 - sensor_id: template_sensor - threshold: - upper: 110 - lower: 90 - filters: - - delayed_on: 0s - - delayed_off: 10s - - platform: analog_threshold - name: Analog Threshold 2 - sensor_id: template_sensor - threshold: 100 - filters: - - invert: +<<: !include common.yaml diff --git a/tests/components/anova/common.yaml b/tests/components/anova/common.yaml new file mode 100644 index 0000000000..c4162fe71e --- /dev/null +++ b/tests/components/anova/common.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: anova_blec + +climate: + - platform: anova + name: Anova cooker + ble_client_id: anova_blec + unit_of_measurement: c diff --git a/tests/components/anova/test.esp32-c3-idf.yaml b/tests/components/anova/test.esp32-c3-idf.yaml index c4162fe71e..dade44d145 100644 --- a/tests/components/anova/test.esp32-c3-idf.yaml +++ b/tests/components/anova/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: anova_blec - -climate: - - platform: anova - name: Anova cooker - ble_client_id: anova_blec - unit_of_measurement: c +<<: !include common.yaml diff --git a/tests/components/anova/test.esp32-c3.yaml b/tests/components/anova/test.esp32-c3.yaml index c4162fe71e..dade44d145 100644 --- a/tests/components/anova/test.esp32-c3.yaml +++ b/tests/components/anova/test.esp32-c3.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: anova_blec - -climate: - - platform: anova - name: Anova cooker - ble_client_id: anova_blec - unit_of_measurement: c +<<: !include common.yaml diff --git a/tests/components/anova/test.esp32-idf.yaml b/tests/components/anova/test.esp32-idf.yaml index c4162fe71e..dade44d145 100644 --- a/tests/components/anova/test.esp32-idf.yaml +++ b/tests/components/anova/test.esp32-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: anova_blec - -climate: - - platform: anova - name: Anova cooker - ble_client_id: anova_blec - unit_of_measurement: c +<<: !include common.yaml diff --git a/tests/components/anova/test.esp32.yaml b/tests/components/anova/test.esp32.yaml index c4162fe71e..dade44d145 100644 --- a/tests/components/anova/test.esp32.yaml +++ b/tests/components/anova/test.esp32.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: anova_blec - -climate: - - platform: anova - name: Anova cooker - ble_client_id: anova_blec - unit_of_measurement: c +<<: !include common.yaml diff --git a/tests/components/api/common.yaml b/tests/components/api/common.yaml new file mode 100644 index 0000000000..3c56811b95 --- /dev/null +++ b/tests/components/api/common.yaml @@ -0,0 +1,63 @@ +esphome: + on_boot: + then: + - homeassistant.event: + event: esphome.button_pressed + data: + message: Button was pressed + - homeassistant.service: + service: notify.html5 + data: + message: Button was pressed + - homeassistant.tag_scanned: pulse + +wifi: + ssid: MySSID + password: password1 + +api: + port: 8000 + password: pwd + reboot_timeout: 0min + encryption: + key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= + services: + - service: hello_world + variables: + name: string + then: + - logger.log: + format: Hello World %s! + args: + - name.c_str() + - service: empty_service + then: + - logger.log: Service Called + - service: all_types + variables: + bool_: bool + int_: int + float_: float + string_: string + then: + - logger.log: Something happened + - service: array_types + variables: + bool_arr: bool[] + int_arr: int[] + float_arr: float[] + string_arr: string[] + then: + - logger.log: + # yamllint disable rule:line-length + format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" + # yamllint enable rule:line-length + args: + - YESNO(bool_arr[0]) + - bool_arr.size() + - int_arr[0] + - int_arr.size() + - float_arr[0] + - float_arr.size() + - string_arr[0].c_str() + - string_arr.size() diff --git a/tests/components/api/test.esp32-c3-idf.yaml b/tests/components/api/test.esp32-c3-idf.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.esp32-c3-idf.yaml +++ b/tests/components/api/test.esp32-c3-idf.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/api/test.esp32-c3.yaml b/tests/components/api/test.esp32-c3.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.esp32-c3.yaml +++ b/tests/components/api/test.esp32-c3.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/api/test.esp32-idf.yaml b/tests/components/api/test.esp32-idf.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.esp32-idf.yaml +++ b/tests/components/api/test.esp32-idf.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/api/test.esp32.yaml b/tests/components/api/test.esp32.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.esp32.yaml +++ b/tests/components/api/test.esp32.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/api/test.esp8266.yaml b/tests/components/api/test.esp8266.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.esp8266.yaml +++ b/tests/components/api/test.esp8266.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/api/test.rp2040.yaml b/tests/components/api/test.rp2040.yaml index 3c56811b95..dade44d145 100644 --- a/tests/components/api/test.rp2040.yaml +++ b/tests/components/api/test.rp2040.yaml @@ -1,63 +1 @@ -esphome: - on_boot: - then: - - homeassistant.event: - event: esphome.button_pressed - data: - message: Button was pressed - - homeassistant.service: - service: notify.html5 - data: - message: Button was pressed - - homeassistant.tag_scanned: pulse - -wifi: - ssid: MySSID - password: password1 - -api: - port: 8000 - password: pwd - reboot_timeout: 0min - encryption: - key: bOFFzzvfpg5DB94DuBGLXD/hMnhpDKgP9UQyBulwWVU= - services: - - service: hello_world - variables: - name: string - then: - - logger.log: - format: Hello World %s! - args: - - name.c_str() - - service: empty_service - then: - - logger.log: Service Called - - service: all_types - variables: - bool_: bool - int_: int - float_: float - string_: string - then: - - logger.log: Something happened - - service: array_types - variables: - bool_arr: bool[] - int_arr: int[] - float_arr: float[] - string_arr: string[] - then: - - logger.log: - # yamllint disable rule:line-length - format: "Bool: %s (%u), Int: %d (%u), Float: %f (%u), String: %s (%u)" - # yamllint enable rule:line-length - args: - - YESNO(bool_arr[0]) - - bool_arr.size() - - int_arr[0] - - int_arr.size() - - float_arr[0] - - float_arr.size() - - string_arr[0].c_str() - - string_arr.size() +<<: !include common.yaml diff --git a/tests/components/atc_mithermometer/common.yaml b/tests/components/atc_mithermometer/common.yaml new file mode 100644 index 0000000000..0248090c23 --- /dev/null +++ b/tests/components/atc_mithermometer/common.yaml @@ -0,0 +1,13 @@ +esp32_ble_tracker: + +sensor: + - platform: atc_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: ATC Temperature + humidity: + name: ATC Humidity + battery_level: + name: ATC Battery-Level + battery_voltage: + name: ATC Battery-Voltage diff --git a/tests/components/atc_mithermometer/test.esp32-c3-idf.yaml b/tests/components/atc_mithermometer/test.esp32-c3-idf.yaml index 0248090c23..dade44d145 100644 --- a/tests/components/atc_mithermometer/test.esp32-c3-idf.yaml +++ b/tests/components/atc_mithermometer/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: atc_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: ATC Temperature - humidity: - name: ATC Humidity - battery_level: - name: ATC Battery-Level - battery_voltage: - name: ATC Battery-Voltage +<<: !include common.yaml diff --git a/tests/components/atc_mithermometer/test.esp32-c3.yaml b/tests/components/atc_mithermometer/test.esp32-c3.yaml index 0248090c23..dade44d145 100644 --- a/tests/components/atc_mithermometer/test.esp32-c3.yaml +++ b/tests/components/atc_mithermometer/test.esp32-c3.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: atc_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: ATC Temperature - humidity: - name: ATC Humidity - battery_level: - name: ATC Battery-Level - battery_voltage: - name: ATC Battery-Voltage +<<: !include common.yaml diff --git a/tests/components/atc_mithermometer/test.esp32-idf.yaml b/tests/components/atc_mithermometer/test.esp32-idf.yaml index 0248090c23..dade44d145 100644 --- a/tests/components/atc_mithermometer/test.esp32-idf.yaml +++ b/tests/components/atc_mithermometer/test.esp32-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: atc_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: ATC Temperature - humidity: - name: ATC Humidity - battery_level: - name: ATC Battery-Level - battery_voltage: - name: ATC Battery-Voltage +<<: !include common.yaml diff --git a/tests/components/atc_mithermometer/test.esp32.yaml b/tests/components/atc_mithermometer/test.esp32.yaml index 0248090c23..dade44d145 100644 --- a/tests/components/atc_mithermometer/test.esp32.yaml +++ b/tests/components/atc_mithermometer/test.esp32.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: atc_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: ATC Temperature - humidity: - name: ATC Humidity - battery_level: - name: ATC Battery-Level - battery_voltage: - name: ATC Battery-Voltage +<<: !include common.yaml diff --git a/tests/components/b_parasite/common.yaml b/tests/components/b_parasite/common.yaml new file mode 100644 index 0000000000..262e891bb2 --- /dev/null +++ b/tests/components/b_parasite/common.yaml @@ -0,0 +1,15 @@ +esp32_ble_tracker: + +sensor: + - platform: b_parasite + mac_address: F0:CA:F0:CA:01:01 + humidity: + name: b-parasite Air Humidity + temperature: + name: b-parasite Air Temperature + moisture: + name: b-parasite Soil Moisture + battery_voltage: + name: b-parasite Battery Voltage + illuminance: + name: b-parasite Illuminance diff --git a/tests/components/b_parasite/test.esp32-c3-idf.yaml b/tests/components/b_parasite/test.esp32-c3-idf.yaml index 262e891bb2..dade44d145 100644 --- a/tests/components/b_parasite/test.esp32-c3-idf.yaml +++ b/tests/components/b_parasite/test.esp32-c3-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: b_parasite - mac_address: F0:CA:F0:CA:01:01 - humidity: - name: b-parasite Air Humidity - temperature: - name: b-parasite Air Temperature - moisture: - name: b-parasite Soil Moisture - battery_voltage: - name: b-parasite Battery Voltage - illuminance: - name: b-parasite Illuminance +<<: !include common.yaml diff --git a/tests/components/b_parasite/test.esp32-c3.yaml b/tests/components/b_parasite/test.esp32-c3.yaml index 262e891bb2..dade44d145 100644 --- a/tests/components/b_parasite/test.esp32-c3.yaml +++ b/tests/components/b_parasite/test.esp32-c3.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: b_parasite - mac_address: F0:CA:F0:CA:01:01 - humidity: - name: b-parasite Air Humidity - temperature: - name: b-parasite Air Temperature - moisture: - name: b-parasite Soil Moisture - battery_voltage: - name: b-parasite Battery Voltage - illuminance: - name: b-parasite Illuminance +<<: !include common.yaml diff --git a/tests/components/b_parasite/test.esp32-idf.yaml b/tests/components/b_parasite/test.esp32-idf.yaml index 262e891bb2..dade44d145 100644 --- a/tests/components/b_parasite/test.esp32-idf.yaml +++ b/tests/components/b_parasite/test.esp32-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: b_parasite - mac_address: F0:CA:F0:CA:01:01 - humidity: - name: b-parasite Air Humidity - temperature: - name: b-parasite Air Temperature - moisture: - name: b-parasite Soil Moisture - battery_voltage: - name: b-parasite Battery Voltage - illuminance: - name: b-parasite Illuminance +<<: !include common.yaml diff --git a/tests/components/b_parasite/test.esp32.yaml b/tests/components/b_parasite/test.esp32.yaml index 262e891bb2..dade44d145 100644 --- a/tests/components/b_parasite/test.esp32.yaml +++ b/tests/components/b_parasite/test.esp32.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: b_parasite - mac_address: F0:CA:F0:CA:01:01 - humidity: - name: b-parasite Air Humidity - temperature: - name: b-parasite Air Temperature - moisture: - name: b-parasite Soil Moisture - battery_voltage: - name: b-parasite Battery Voltage - illuminance: - name: b-parasite Illuminance +<<: !include common.yaml diff --git a/tests/components/bang_bang/common.yaml b/tests/components/bang_bang/common.yaml new file mode 100644 index 0000000000..5882025191 --- /dev/null +++ b/tests/components/bang_bang/common.yaml @@ -0,0 +1,35 @@ +switch: + - platform: template + id: template_switch1 + optimistic: true + - platform: template + id: template_switch2 + optimistic: true + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: bang_bang + name: Bang Bang Climate + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + idle_action: + - switch.turn_on: template_switch1 + cool_action: + - switch.turn_on: template_switch2 + heat_action: + - switch.turn_on: template_switch1 + away_config: + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C diff --git a/tests/components/bang_bang/test.esp32-c3-idf.yaml b/tests/components/bang_bang/test.esp32-c3-idf.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.esp32-c3-idf.yaml +++ b/tests/components/bang_bang/test.esp32-c3-idf.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bang_bang/test.esp32-c3.yaml b/tests/components/bang_bang/test.esp32-c3.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.esp32-c3.yaml +++ b/tests/components/bang_bang/test.esp32-c3.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bang_bang/test.esp32-idf.yaml b/tests/components/bang_bang/test.esp32-idf.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.esp32-idf.yaml +++ b/tests/components/bang_bang/test.esp32-idf.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bang_bang/test.esp32.yaml b/tests/components/bang_bang/test.esp32.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.esp32.yaml +++ b/tests/components/bang_bang/test.esp32.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bang_bang/test.esp8266.yaml b/tests/components/bang_bang/test.esp8266.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.esp8266.yaml +++ b/tests/components/bang_bang/test.esp8266.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bang_bang/test.rp2040.yaml b/tests/components/bang_bang/test.rp2040.yaml index 5882025191..dade44d145 100644 --- a/tests/components/bang_bang/test.rp2040.yaml +++ b/tests/components/bang_bang/test.rp2040.yaml @@ -1,35 +1 @@ -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: bang_bang - name: Bang Bang Climate - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - idle_action: - - switch.turn_on: template_switch1 - cool_action: - - switch.turn_on: template_switch2 - heat_action: - - switch.turn_on: template_switch1 - away_config: - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C +<<: !include common.yaml diff --git a/tests/components/bedjet/common.yaml b/tests/components/bedjet/common.yaml new file mode 100644 index 0000000000..c2be04a49a --- /dev/null +++ b/tests/components/bedjet/common.yaml @@ -0,0 +1,33 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: bedjet_blec + +bedjet: + - id: bedjet_hub + ble_client_id: bedjet_blec + time_id: sntp_time + +climate: + - platform: bedjet + name: My Bedjet + bedjet_id: bedjet_hub + heat_mode: extended + +fan: + - platform: bedjet + name: My Bedjet fan + bedjet_id: bedjet_hub diff --git a/tests/components/bedjet/test.esp32-c3-idf.yaml b/tests/components/bedjet/test.esp32-c3-idf.yaml index c2be04a49a..dade44d145 100644 --- a/tests/components/bedjet/test.esp32-c3-idf.yaml +++ b/tests/components/bedjet/test.esp32-c3-idf.yaml @@ -1,33 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: bedjet_blec - -bedjet: - - id: bedjet_hub - ble_client_id: bedjet_blec - time_id: sntp_time - -climate: - - platform: bedjet - name: My Bedjet - bedjet_id: bedjet_hub - heat_mode: extended - -fan: - - platform: bedjet - name: My Bedjet fan - bedjet_id: bedjet_hub +<<: !include common.yaml diff --git a/tests/components/bedjet/test.esp32-c3.yaml b/tests/components/bedjet/test.esp32-c3.yaml index c2be04a49a..dade44d145 100644 --- a/tests/components/bedjet/test.esp32-c3.yaml +++ b/tests/components/bedjet/test.esp32-c3.yaml @@ -1,33 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: bedjet_blec - -bedjet: - - id: bedjet_hub - ble_client_id: bedjet_blec - time_id: sntp_time - -climate: - - platform: bedjet - name: My Bedjet - bedjet_id: bedjet_hub - heat_mode: extended - -fan: - - platform: bedjet - name: My Bedjet fan - bedjet_id: bedjet_hub +<<: !include common.yaml diff --git a/tests/components/bedjet/test.esp32-idf.yaml b/tests/components/bedjet/test.esp32-idf.yaml index c2be04a49a..dade44d145 100644 --- a/tests/components/bedjet/test.esp32-idf.yaml +++ b/tests/components/bedjet/test.esp32-idf.yaml @@ -1,33 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: bedjet_blec - -bedjet: - - id: bedjet_hub - ble_client_id: bedjet_blec - time_id: sntp_time - -climate: - - platform: bedjet - name: My Bedjet - bedjet_id: bedjet_hub - heat_mode: extended - -fan: - - platform: bedjet - name: My Bedjet fan - bedjet_id: bedjet_hub +<<: !include common.yaml diff --git a/tests/components/bedjet/test.esp32.yaml b/tests/components/bedjet/test.esp32.yaml index c2be04a49a..dade44d145 100644 --- a/tests/components/bedjet/test.esp32.yaml +++ b/tests/components/bedjet/test.esp32.yaml @@ -1,33 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: bedjet_blec - -bedjet: - - id: bedjet_hub - ble_client_id: bedjet_blec - time_id: sntp_time - -climate: - - platform: bedjet - name: My Bedjet - bedjet_id: bedjet_hub - heat_mode: extended - -fan: - - platform: bedjet - name: My Bedjet fan - bedjet_id: bedjet_hub +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/common.yaml b/tests/components/binary_sensor_map/common.yaml new file mode 100644 index 0000000000..8ffdd1f379 --- /dev/null +++ b/tests/components/binary_sensor_map/common.yaml @@ -0,0 +1,61 @@ +binary_sensor: + - platform: template + id: bin1 + lambda: |- + if (millis() > 10000) { + return true; + } else { + return false; + } + - platform: template + id: bin2 + lambda: |- + if (millis() > 20000) { + return true; + } else { + return false; + } + - platform: template + id: bin3 + lambda: |- + if (millis() > 30000) { + return true; + } else { + return false; + } + +sensor: + - platform: binary_sensor_map + name: Binary Sensor Map + type: group + channels: + - binary_sensor: bin1 + value: 10.0 + - binary_sensor: bin2 + value: 15.0 + - binary_sensor: bin3 + value: 100.0 + - platform: binary_sensor_map + name: Binary Sensor Map + type: sum + channels: + - binary_sensor: bin1 + value: 10.0 + - binary_sensor: bin2 + value: 15.0 + - binary_sensor: bin3 + value: 100.0 + - platform: binary_sensor_map + name: Binary Sensor Map + type: bayesian + prior: 0.4 + observations: + - binary_sensor: bin1 + prob_given_true: 0.9 + prob_given_false: 0.4 + - binary_sensor: bin2 + prob_given_true: 0.7 + prob_given_false: 0.05 + - binary_sensor: bin3 + prob_given_true: 0.8 + prob_given_false: 0.2 diff --git a/tests/components/binary_sensor_map/test.esp32-c3-idf.yaml b/tests/components/binary_sensor_map/test.esp32-c3-idf.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.esp32-c3-idf.yaml +++ b/tests/components/binary_sensor_map/test.esp32-c3-idf.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/test.esp32-c3.yaml b/tests/components/binary_sensor_map/test.esp32-c3.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.esp32-c3.yaml +++ b/tests/components/binary_sensor_map/test.esp32-c3.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/test.esp32-idf.yaml b/tests/components/binary_sensor_map/test.esp32-idf.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.esp32-idf.yaml +++ b/tests/components/binary_sensor_map/test.esp32-idf.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/test.esp32.yaml b/tests/components/binary_sensor_map/test.esp32.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.esp32.yaml +++ b/tests/components/binary_sensor_map/test.esp32.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/test.esp8266.yaml b/tests/components/binary_sensor_map/test.esp8266.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.esp8266.yaml +++ b/tests/components/binary_sensor_map/test.esp8266.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/binary_sensor_map/test.rp2040.yaml b/tests/components/binary_sensor_map/test.rp2040.yaml index 8ffdd1f379..dade44d145 100644 --- a/tests/components/binary_sensor_map/test.rp2040.yaml +++ b/tests/components/binary_sensor_map/test.rp2040.yaml @@ -1,61 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - - platform: template - id: bin2 - lambda: |- - if (millis() > 20000) { - return true; - } else { - return false; - } - - platform: template - id: bin3 - lambda: |- - if (millis() > 30000) { - return true; - } else { - return false; - } - -sensor: - - platform: binary_sensor_map - name: Binary Sensor Map - type: group - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: sum - channels: - - binary_sensor: bin1 - value: 10.0 - - binary_sensor: bin2 - value: 15.0 - - binary_sensor: bin3 - value: 100.0 - - platform: binary_sensor_map - name: Binary Sensor Map - type: bayesian - prior: 0.4 - observations: - - binary_sensor: bin1 - prob_given_true: 0.9 - prob_given_false: 0.4 - - binary_sensor: bin2 - prob_given_true: 0.7 - prob_given_false: 0.05 - - binary_sensor: bin3 - prob_given_true: 0.8 - prob_given_false: 0.2 +<<: !include common.yaml diff --git a/tests/components/ble_client/common.yaml b/tests/components/ble_client/common.yaml new file mode 100644 index 0000000000..b5272d01f0 --- /dev/null +++ b/tests/components/ble_client/common.yaml @@ -0,0 +1,5 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: test_blec diff --git a/tests/components/ble_client/test.esp32-c3-idf.yaml b/tests/components/ble_client/test.esp32-c3-idf.yaml index b5272d01f0..dade44d145 100644 --- a/tests/components/ble_client/test.esp32-c3-idf.yaml +++ b/tests/components/ble_client/test.esp32-c3-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: test_blec +<<: !include common.yaml diff --git a/tests/components/ble_client/test.esp32-c3.yaml b/tests/components/ble_client/test.esp32-c3.yaml index b5272d01f0..dade44d145 100644 --- a/tests/components/ble_client/test.esp32-c3.yaml +++ b/tests/components/ble_client/test.esp32-c3.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: test_blec +<<: !include common.yaml diff --git a/tests/components/ble_client/test.esp32-idf.yaml b/tests/components/ble_client/test.esp32-idf.yaml index b5272d01f0..dade44d145 100644 --- a/tests/components/ble_client/test.esp32-idf.yaml +++ b/tests/components/ble_client/test.esp32-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: test_blec +<<: !include common.yaml diff --git a/tests/components/ble_client/test.esp32.yaml b/tests/components/ble_client/test.esp32.yaml index b5272d01f0..dade44d145 100644 --- a/tests/components/ble_client/test.esp32.yaml +++ b/tests/components/ble_client/test.esp32.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: test_blec +<<: !include common.yaml diff --git a/tests/components/ble_presence/common.yaml b/tests/components/ble_presence/common.yaml new file mode 100644 index 0000000000..6e5173eed8 --- /dev/null +++ b/tests/components/ble_presence/common.yaml @@ -0,0 +1,24 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: ble_presence + mac_address: AC:37:43:77:5F:4C + name: ESP32 BLE Tracker Google Home Mini + - platform: ble_presence + service_uuid: 11aa + name: BLE Test Service 16 Presence + - platform: ble_presence + service_uuid: "11223344" + name: BLE Test Service 32 Presence + - platform: ble_presence + service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 + name: BLE Test Service 128 Presence + - platform: ble_presence + ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00 + ibeacon_major: 100 + ibeacon_minor: 1 + name: BLE Test iBeacon Presence + - platform: ble_presence + irk: 1234567890abcdef1234567890abcdef + name: "ESP32 BLE Tracker with Identity Resolving Key" + diff --git a/tests/components/ble_presence/test.esp32-c3-idf.yaml b/tests/components/ble_presence/test.esp32-c3-idf.yaml index 6e5173eed8..dade44d145 100644 --- a/tests/components/ble_presence/test.esp32-c3-idf.yaml +++ b/tests/components/ble_presence/test.esp32-c3-idf.yaml @@ -1,24 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: ble_presence - mac_address: AC:37:43:77:5F:4C - name: ESP32 BLE Tracker Google Home Mini - - platform: ble_presence - service_uuid: 11aa - name: BLE Test Service 16 Presence - - platform: ble_presence - service_uuid: "11223344" - name: BLE Test Service 32 Presence - - platform: ble_presence - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 Presence - - platform: ble_presence - ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - ibeacon_major: 100 - ibeacon_minor: 1 - name: BLE Test iBeacon Presence - - platform: ble_presence - irk: 1234567890abcdef1234567890abcdef - name: "ESP32 BLE Tracker with Identity Resolving Key" - +<<: !include common.yaml diff --git a/tests/components/ble_presence/test.esp32-c3.yaml b/tests/components/ble_presence/test.esp32-c3.yaml index 6e5173eed8..dade44d145 100644 --- a/tests/components/ble_presence/test.esp32-c3.yaml +++ b/tests/components/ble_presence/test.esp32-c3.yaml @@ -1,24 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: ble_presence - mac_address: AC:37:43:77:5F:4C - name: ESP32 BLE Tracker Google Home Mini - - platform: ble_presence - service_uuid: 11aa - name: BLE Test Service 16 Presence - - platform: ble_presence - service_uuid: "11223344" - name: BLE Test Service 32 Presence - - platform: ble_presence - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 Presence - - platform: ble_presence - ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - ibeacon_major: 100 - ibeacon_minor: 1 - name: BLE Test iBeacon Presence - - platform: ble_presence - irk: 1234567890abcdef1234567890abcdef - name: "ESP32 BLE Tracker with Identity Resolving Key" - +<<: !include common.yaml diff --git a/tests/components/ble_presence/test.esp32-idf.yaml b/tests/components/ble_presence/test.esp32-idf.yaml index 6e5173eed8..dade44d145 100644 --- a/tests/components/ble_presence/test.esp32-idf.yaml +++ b/tests/components/ble_presence/test.esp32-idf.yaml @@ -1,24 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: ble_presence - mac_address: AC:37:43:77:5F:4C - name: ESP32 BLE Tracker Google Home Mini - - platform: ble_presence - service_uuid: 11aa - name: BLE Test Service 16 Presence - - platform: ble_presence - service_uuid: "11223344" - name: BLE Test Service 32 Presence - - platform: ble_presence - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 Presence - - platform: ble_presence - ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - ibeacon_major: 100 - ibeacon_minor: 1 - name: BLE Test iBeacon Presence - - platform: ble_presence - irk: 1234567890abcdef1234567890abcdef - name: "ESP32 BLE Tracker with Identity Resolving Key" - +<<: !include common.yaml diff --git a/tests/components/ble_presence/test.esp32.yaml b/tests/components/ble_presence/test.esp32.yaml index 6e5173eed8..dade44d145 100644 --- a/tests/components/ble_presence/test.esp32.yaml +++ b/tests/components/ble_presence/test.esp32.yaml @@ -1,24 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: ble_presence - mac_address: AC:37:43:77:5F:4C - name: ESP32 BLE Tracker Google Home Mini - - platform: ble_presence - service_uuid: 11aa - name: BLE Test Service 16 Presence - - platform: ble_presence - service_uuid: "11223344" - name: BLE Test Service 32 Presence - - platform: ble_presence - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 Presence - - platform: ble_presence - ibeacon_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - ibeacon_major: 100 - ibeacon_minor: 1 - name: BLE Test iBeacon Presence - - platform: ble_presence - irk: 1234567890abcdef1234567890abcdef - name: "ESP32 BLE Tracker with Identity Resolving Key" - +<<: !include common.yaml diff --git a/tests/components/ble_rssi/common.yaml b/tests/components/ble_rssi/common.yaml new file mode 100644 index 0000000000..52e5b865c6 --- /dev/null +++ b/tests/components/ble_rssi/common.yaml @@ -0,0 +1,18 @@ +esp32_ble_tracker: + +sensor: + - platform: ble_rssi + mac_address: AC:37:43:77:5F:4C + name: BLE Google Home Mini RSSI value + - platform: ble_rssi + service_uuid: 11aa + name: BLE Test Service 16 + - platform: ble_rssi + service_uuid: "11223344" + name: BLE Test Service 32 + - platform: ble_rssi + service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 + name: BLE Test Service 128 + - platform: ble_rssi + service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 + name: BLE Test iBeacon UUID diff --git a/tests/components/ble_rssi/test.esp32-c3-idf.yaml b/tests/components/ble_rssi/test.esp32-c3-idf.yaml index 52e5b865c6..dade44d145 100644 --- a/tests/components/ble_rssi/test.esp32-c3-idf.yaml +++ b/tests/components/ble_rssi/test.esp32-c3-idf.yaml @@ -1,18 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ble_rssi - mac_address: AC:37:43:77:5F:4C - name: BLE Google Home Mini RSSI value - - platform: ble_rssi - service_uuid: 11aa - name: BLE Test Service 16 - - platform: ble_rssi - service_uuid: "11223344" - name: BLE Test Service 32 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test iBeacon UUID +<<: !include common.yaml diff --git a/tests/components/ble_rssi/test.esp32-c3.yaml b/tests/components/ble_rssi/test.esp32-c3.yaml index 52e5b865c6..dade44d145 100644 --- a/tests/components/ble_rssi/test.esp32-c3.yaml +++ b/tests/components/ble_rssi/test.esp32-c3.yaml @@ -1,18 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ble_rssi - mac_address: AC:37:43:77:5F:4C - name: BLE Google Home Mini RSSI value - - platform: ble_rssi - service_uuid: 11aa - name: BLE Test Service 16 - - platform: ble_rssi - service_uuid: "11223344" - name: BLE Test Service 32 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test iBeacon UUID +<<: !include common.yaml diff --git a/tests/components/ble_rssi/test.esp32-idf.yaml b/tests/components/ble_rssi/test.esp32-idf.yaml index 52e5b865c6..dade44d145 100644 --- a/tests/components/ble_rssi/test.esp32-idf.yaml +++ b/tests/components/ble_rssi/test.esp32-idf.yaml @@ -1,18 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ble_rssi - mac_address: AC:37:43:77:5F:4C - name: BLE Google Home Mini RSSI value - - platform: ble_rssi - service_uuid: 11aa - name: BLE Test Service 16 - - platform: ble_rssi - service_uuid: "11223344" - name: BLE Test Service 32 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test iBeacon UUID +<<: !include common.yaml diff --git a/tests/components/ble_rssi/test.esp32.yaml b/tests/components/ble_rssi/test.esp32.yaml index 52e5b865c6..dade44d145 100644 --- a/tests/components/ble_rssi/test.esp32.yaml +++ b/tests/components/ble_rssi/test.esp32.yaml @@ -1,18 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ble_rssi - mac_address: AC:37:43:77:5F:4C - name: BLE Google Home Mini RSSI value - - platform: ble_rssi - service_uuid: 11aa - name: BLE Test Service 16 - - platform: ble_rssi - service_uuid: "11223344" - name: BLE Test Service 32 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test Service 128 - - platform: ble_rssi - service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 - name: BLE Test iBeacon UUID +<<: !include common.yaml diff --git a/tests/components/ble_scanner/common.yaml b/tests/components/ble_scanner/common.yaml new file mode 100644 index 0000000000..935a5a5a19 --- /dev/null +++ b/tests/components/ble_scanner/common.yaml @@ -0,0 +1,5 @@ +esp32_ble_tracker: + +text_sensor: + - platform: ble_scanner + name: Scanner diff --git a/tests/components/ble_scanner/test.esp32-c3-idf.yaml b/tests/components/ble_scanner/test.esp32-c3-idf.yaml index 935a5a5a19..dade44d145 100644 --- a/tests/components/ble_scanner/test.esp32-c3-idf.yaml +++ b/tests/components/ble_scanner/test.esp32-c3-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -text_sensor: - - platform: ble_scanner - name: Scanner +<<: !include common.yaml diff --git a/tests/components/ble_scanner/test.esp32-c3.yaml b/tests/components/ble_scanner/test.esp32-c3.yaml index 935a5a5a19..dade44d145 100644 --- a/tests/components/ble_scanner/test.esp32-c3.yaml +++ b/tests/components/ble_scanner/test.esp32-c3.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -text_sensor: - - platform: ble_scanner - name: Scanner +<<: !include common.yaml diff --git a/tests/components/ble_scanner/test.esp32-idf.yaml b/tests/components/ble_scanner/test.esp32-idf.yaml index 935a5a5a19..dade44d145 100644 --- a/tests/components/ble_scanner/test.esp32-idf.yaml +++ b/tests/components/ble_scanner/test.esp32-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -text_sensor: - - platform: ble_scanner - name: Scanner +<<: !include common.yaml diff --git a/tests/components/ble_scanner/test.esp32.yaml b/tests/components/ble_scanner/test.esp32.yaml index 935a5a5a19..dade44d145 100644 --- a/tests/components/ble_scanner/test.esp32.yaml +++ b/tests/components/ble_scanner/test.esp32.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -text_sensor: - - platform: ble_scanner - name: Scanner +<<: !include common.yaml diff --git a/tests/components/button/common.yaml b/tests/components/button/common.yaml new file mode 100644 index 0000000000..d5978601f4 --- /dev/null +++ b/tests/components/button/common.yaml @@ -0,0 +1,6 @@ +button: + - platform: template + name: Button + id: some_button + on_press: + - logger.log: Button pressed diff --git a/tests/components/button/test.esp32-c3-idf.yaml b/tests/components/button/test.esp32-c3-idf.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.esp32-c3-idf.yaml +++ b/tests/components/button/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/button/test.esp32-c3.yaml b/tests/components/button/test.esp32-c3.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.esp32-c3.yaml +++ b/tests/components/button/test.esp32-c3.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/button/test.esp32-idf.yaml b/tests/components/button/test.esp32-idf.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.esp32-idf.yaml +++ b/tests/components/button/test.esp32-idf.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/button/test.esp32.yaml b/tests/components/button/test.esp32.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.esp32.yaml +++ b/tests/components/button/test.esp32.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/button/test.esp8266.yaml b/tests/components/button/test.esp8266.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.esp8266.yaml +++ b/tests/components/button/test.esp8266.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/button/test.rp2040.yaml b/tests/components/button/test.rp2040.yaml index d5978601f4..dade44d145 100644 --- a/tests/components/button/test.rp2040.yaml +++ b/tests/components/button/test.rp2040.yaml @@ -1,6 +1 @@ -button: - - platform: template - name: Button - id: some_button - on_press: - - logger.log: Button pressed +<<: !include common.yaml diff --git a/tests/components/canbus/common.yaml b/tests/components/canbus/common.yaml new file mode 100644 index 0000000000..fd146cc3a3 --- /dev/null +++ b/tests/components/canbus/common.yaml @@ -0,0 +1,46 @@ +canbus: + - platform: esp32_can + id: esp32_internal_can + rx_pin: 4 + tx_pin: 5 + can_id: 4 + bit_rate: 50kbps + on_frame: + - can_id: 500 + then: + - lambda: |- + std::string b(x.begin(), x.end()); + ESP_LOGD("canid 500", "%s", b.c_str()); + - can_id: 23 + then: + - if: + condition: + lambda: "return x[0] == 0x11;" + then: + logger.log: Truth + - can_id: 0b00000000000000000000001000000 + can_id_mask: 0b11111000000000011111111000000 + use_extended_id: true + then: + - lambda: |- + auto pdo_id = can_id >> 14; + switch (pdo_id) + { + case 117: + ESP_LOGD("canbus", "exhaust_fan_duty"); + break; + case 118: + ESP_LOGD("canbus", "supply_fan_duty"); + break; + case 119: + ESP_LOGD("canbus", "supply_fan_flow"); + break; + } + +button: + - platform: template + name: Canbus Actions + on_press: + - canbus.send: "abc" + - canbus.send: [0, 1, 2] + - canbus.send: !lambda return {0, 1, 2}; diff --git a/tests/components/canbus/test.esp32-c3-idf.yaml b/tests/components/canbus/test.esp32-c3-idf.yaml index fd146cc3a3..dade44d145 100644 --- a/tests/components/canbus/test.esp32-c3-idf.yaml +++ b/tests/components/canbus/test.esp32-c3-idf.yaml @@ -1,46 +1 @@ -canbus: - - platform: esp32_can - id: esp32_internal_can - rx_pin: 4 - tx_pin: 5 - can_id: 4 - bit_rate: 50kbps - on_frame: - - can_id: 500 - then: - - lambda: |- - std::string b(x.begin(), x.end()); - ESP_LOGD("canid 500", "%s", b.c_str()); - - can_id: 23 - then: - - if: - condition: - lambda: "return x[0] == 0x11;" - then: - logger.log: Truth - - can_id: 0b00000000000000000000001000000 - can_id_mask: 0b11111000000000011111111000000 - use_extended_id: true - then: - - lambda: |- - auto pdo_id = can_id >> 14; - switch (pdo_id) - { - case 117: - ESP_LOGD("canbus", "exhaust_fan_duty"); - break; - case 118: - ESP_LOGD("canbus", "supply_fan_duty"); - break; - case 119: - ESP_LOGD("canbus", "supply_fan_flow"); - break; - } - -button: - - platform: template - name: Canbus Actions - on_press: - - canbus.send: "abc" - - canbus.send: [0, 1, 2] - - canbus.send: !lambda return {0, 1, 2}; +<<: !include common.yaml diff --git a/tests/components/canbus/test.esp32-c3.yaml b/tests/components/canbus/test.esp32-c3.yaml index fd146cc3a3..dade44d145 100644 --- a/tests/components/canbus/test.esp32-c3.yaml +++ b/tests/components/canbus/test.esp32-c3.yaml @@ -1,46 +1 @@ -canbus: - - platform: esp32_can - id: esp32_internal_can - rx_pin: 4 - tx_pin: 5 - can_id: 4 - bit_rate: 50kbps - on_frame: - - can_id: 500 - then: - - lambda: |- - std::string b(x.begin(), x.end()); - ESP_LOGD("canid 500", "%s", b.c_str()); - - can_id: 23 - then: - - if: - condition: - lambda: "return x[0] == 0x11;" - then: - logger.log: Truth - - can_id: 0b00000000000000000000001000000 - can_id_mask: 0b11111000000000011111111000000 - use_extended_id: true - then: - - lambda: |- - auto pdo_id = can_id >> 14; - switch (pdo_id) - { - case 117: - ESP_LOGD("canbus", "exhaust_fan_duty"); - break; - case 118: - ESP_LOGD("canbus", "supply_fan_duty"); - break; - case 119: - ESP_LOGD("canbus", "supply_fan_flow"); - break; - } - -button: - - platform: template - name: Canbus Actions - on_press: - - canbus.send: "abc" - - canbus.send: [0, 1, 2] - - canbus.send: !lambda return {0, 1, 2}; +<<: !include common.yaml diff --git a/tests/components/canbus/test.esp32-idf.yaml b/tests/components/canbus/test.esp32-idf.yaml index fd146cc3a3..dade44d145 100644 --- a/tests/components/canbus/test.esp32-idf.yaml +++ b/tests/components/canbus/test.esp32-idf.yaml @@ -1,46 +1 @@ -canbus: - - platform: esp32_can - id: esp32_internal_can - rx_pin: 4 - tx_pin: 5 - can_id: 4 - bit_rate: 50kbps - on_frame: - - can_id: 500 - then: - - lambda: |- - std::string b(x.begin(), x.end()); - ESP_LOGD("canid 500", "%s", b.c_str()); - - can_id: 23 - then: - - if: - condition: - lambda: "return x[0] == 0x11;" - then: - logger.log: Truth - - can_id: 0b00000000000000000000001000000 - can_id_mask: 0b11111000000000011111111000000 - use_extended_id: true - then: - - lambda: |- - auto pdo_id = can_id >> 14; - switch (pdo_id) - { - case 117: - ESP_LOGD("canbus", "exhaust_fan_duty"); - break; - case 118: - ESP_LOGD("canbus", "supply_fan_duty"); - break; - case 119: - ESP_LOGD("canbus", "supply_fan_flow"); - break; - } - -button: - - platform: template - name: Canbus Actions - on_press: - - canbus.send: "abc" - - canbus.send: [0, 1, 2] - - canbus.send: !lambda return {0, 1, 2}; +<<: !include common.yaml diff --git a/tests/components/canbus/test.esp32.yaml b/tests/components/canbus/test.esp32.yaml index fd146cc3a3..dade44d145 100644 --- a/tests/components/canbus/test.esp32.yaml +++ b/tests/components/canbus/test.esp32.yaml @@ -1,46 +1 @@ -canbus: - - platform: esp32_can - id: esp32_internal_can - rx_pin: 4 - tx_pin: 5 - can_id: 4 - bit_rate: 50kbps - on_frame: - - can_id: 500 - then: - - lambda: |- - std::string b(x.begin(), x.end()); - ESP_LOGD("canid 500", "%s", b.c_str()); - - can_id: 23 - then: - - if: - condition: - lambda: "return x[0] == 0x11;" - then: - logger.log: Truth - - can_id: 0b00000000000000000000001000000 - can_id_mask: 0b11111000000000011111111000000 - use_extended_id: true - then: - - lambda: |- - auto pdo_id = can_id >> 14; - switch (pdo_id) - { - case 117: - ESP_LOGD("canbus", "exhaust_fan_duty"); - break; - case 118: - ESP_LOGD("canbus", "supply_fan_duty"); - break; - case 119: - ESP_LOGD("canbus", "supply_fan_flow"); - break; - } - -button: - - platform: template - name: Canbus Actions - on_press: - - canbus.send: "abc" - - canbus.send: [0, 1, 2] - - canbus.send: !lambda return {0, 1, 2}; +<<: !include common.yaml diff --git a/tests/components/captive_portal/common.yaml b/tests/components/captive_portal/common.yaml new file mode 100644 index 0000000000..25bc4a887a --- /dev/null +++ b/tests/components/captive_portal/common.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +captive_portal: diff --git a/tests/components/captive_portal/test.esp32-c3-idf.yaml b/tests/components/captive_portal/test.esp32-c3-idf.yaml index 25bc4a887a..dade44d145 100644 --- a/tests/components/captive_portal/test.esp32-c3-idf.yaml +++ b/tests/components/captive_portal/test.esp32-c3-idf.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -captive_portal: +<<: !include common.yaml diff --git a/tests/components/captive_portal/test.esp32-c3.yaml b/tests/components/captive_portal/test.esp32-c3.yaml index 25bc4a887a..dade44d145 100644 --- a/tests/components/captive_portal/test.esp32-c3.yaml +++ b/tests/components/captive_portal/test.esp32-c3.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -captive_portal: +<<: !include common.yaml diff --git a/tests/components/captive_portal/test.esp32-idf.yaml b/tests/components/captive_portal/test.esp32-idf.yaml index 25bc4a887a..dade44d145 100644 --- a/tests/components/captive_portal/test.esp32-idf.yaml +++ b/tests/components/captive_portal/test.esp32-idf.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -captive_portal: +<<: !include common.yaml diff --git a/tests/components/captive_portal/test.esp32.yaml b/tests/components/captive_portal/test.esp32.yaml index 25bc4a887a..dade44d145 100644 --- a/tests/components/captive_portal/test.esp32.yaml +++ b/tests/components/captive_portal/test.esp32.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -captive_portal: +<<: !include common.yaml diff --git a/tests/components/captive_portal/test.esp8266.yaml b/tests/components/captive_portal/test.esp8266.yaml index 25bc4a887a..dade44d145 100644 --- a/tests/components/captive_portal/test.esp8266.yaml +++ b/tests/components/captive_portal/test.esp8266.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -captive_portal: +<<: !include common.yaml diff --git a/tests/components/color/common.yaml b/tests/components/color/common.yaml new file mode 100644 index 0000000000..7aa308bb63 --- /dev/null +++ b/tests/components/color/common.yaml @@ -0,0 +1,11 @@ +color: + - id: kbx_red + red: 100% + green_int: 123 + blue: 2% + - id: kbx_blue + red: 0% + green: 1% + blue: 100% + - id: kbx_green + hex: "3DEC55" diff --git a/tests/components/color/test.esp32-c3-idf.yaml b/tests/components/color/test.esp32-c3-idf.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.esp32-c3-idf.yaml +++ b/tests/components/color/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/color/test.esp32-c3.yaml b/tests/components/color/test.esp32-c3.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.esp32-c3.yaml +++ b/tests/components/color/test.esp32-c3.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/color/test.esp32-idf.yaml b/tests/components/color/test.esp32-idf.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.esp32-idf.yaml +++ b/tests/components/color/test.esp32-idf.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/color/test.esp32.yaml b/tests/components/color/test.esp32.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.esp32.yaml +++ b/tests/components/color/test.esp32.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/color/test.esp8266.yaml b/tests/components/color/test.esp8266.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.esp8266.yaml +++ b/tests/components/color/test.esp8266.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/color/test.rp2040.yaml b/tests/components/color/test.rp2040.yaml index 7aa308bb63..dade44d145 100644 --- a/tests/components/color/test.rp2040.yaml +++ b/tests/components/color/test.rp2040.yaml @@ -1,11 +1 @@ -color: - - id: kbx_red - red: 100% - green_int: 123 - blue: 2% - - id: kbx_blue - red: 0% - green: 1% - blue: 100% - - id: kbx_green - hex: "3DEC55" +<<: !include common.yaml diff --git a/tests/components/combination/common.yaml b/tests/components/combination/common.yaml new file mode 100644 index 0000000000..62246190af --- /dev/null +++ b/tests/components/combination/common.yaml @@ -0,0 +1,76 @@ +sensor: + - platform: template + id: template_temperature1 + lambda: |- + if (millis() > 10000) { + return 0.6; + } else { + return 0.0; + } + - platform: template + id: template_temperature2 + lambda: |- + if (millis() > 20000) { + return 0.8; + } else { + return 0.0; + } + - platform: combination + type: kalman + name: Kalman-filtered temperature + process_std_dev: 0.00139 + sources: + - source: template_temperature1 + error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" + - source: template_temperature2 + error: 1.5 + - platform: combination + type: linear + name: Linearly combined temperatures + sources: + - source: template_temperature1 + coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" + - source: template_temperature2 + coeffecient: 1.5 + - platform: combination + type: max + name: Max of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: mean + name: Mean of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: median + name: Median of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: min + name: Min of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: most_recently_updated + name: Most recently updated of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: range + name: Range of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 + - platform: combination + type: sum + name: Sum of combined temperatures + sources: + - source: template_temperature1 + - source: template_temperature2 diff --git a/tests/components/combination/test.esp32-c3-idf.yaml b/tests/components/combination/test.esp32-c3-idf.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.esp32-c3-idf.yaml +++ b/tests/components/combination/test.esp32-c3-idf.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/combination/test.esp32-c3.yaml b/tests/components/combination/test.esp32-c3.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.esp32-c3.yaml +++ b/tests/components/combination/test.esp32-c3.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/combination/test.esp32-idf.yaml b/tests/components/combination/test.esp32-idf.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.esp32-idf.yaml +++ b/tests/components/combination/test.esp32-idf.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/combination/test.esp32.yaml b/tests/components/combination/test.esp32.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.esp32.yaml +++ b/tests/components/combination/test.esp32.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/combination/test.esp8266.yaml b/tests/components/combination/test.esp8266.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.esp8266.yaml +++ b/tests/components/combination/test.esp8266.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/combination/test.rp2040.yaml b/tests/components/combination/test.rp2040.yaml index 62246190af..dade44d145 100644 --- a/tests/components/combination/test.rp2040.yaml +++ b/tests/components/combination/test.rp2040.yaml @@ -1,76 +1 @@ -sensor: - - platform: template - id: template_temperature1 - lambda: |- - if (millis() > 10000) { - return 0.6; - } else { - return 0.0; - } - - platform: template - id: template_temperature2 - lambda: |- - if (millis() > 20000) { - return 0.8; - } else { - return 0.0; - } - - platform: combination - type: kalman - name: Kalman-filtered temperature - process_std_dev: 0.00139 - sources: - - source: template_temperature1 - error: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - error: 1.5 - - platform: combination - type: linear - name: Linearly combined temperatures - sources: - - source: template_temperature1 - coeffecient: !lambda "return 0.4 + std::abs(x - 25) * 0.023;" - - source: template_temperature2 - coeffecient: 1.5 - - platform: combination - type: max - name: Max of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: mean - name: Mean of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: median - name: Median of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: min - name: Min of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: most_recently_updated - name: Most recently updated of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: range - name: Range of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 - - platform: combination - type: sum - name: Sum of combined temperatures - sources: - - source: template_temperature1 - - source: template_temperature2 +<<: !include common.yaml diff --git a/tests/components/cst226/common.yaml b/tests/components/cst226/common.yaml new file mode 100644 index 0000000000..4cbf38ef50 --- /dev/null +++ b/tests/components/cst226/common.yaml @@ -0,0 +1,24 @@ +spi: + - id: spi_id_1 + clk_pin: GPIO7 + mosi_pin: GPIO6 + interface: any + +display: + - platform: ili9xxx + id: displ8 + model: ili9342 + cs_pin: GPIO5 + dc_pin: GPIO4 + reset_pin: + number: GPIO21 + +i2c: + scl: GPIO18 + sda: GPIO8 + +touchscreen: + - platform: cst226 + interrupt_pin: GPIO3 + reset_pin: GPIO20 + diff --git a/tests/components/cst226/test.esp32-c3.yaml b/tests/components/cst226/test.esp32-c3.yaml index 4cbf38ef50..dade44d145 100644 --- a/tests/components/cst226/test.esp32-c3.yaml +++ b/tests/components/cst226/test.esp32-c3.yaml @@ -1,24 +1 @@ -spi: - - id: spi_id_1 - clk_pin: GPIO7 - mosi_pin: GPIO6 - interface: any - -display: - - platform: ili9xxx - id: displ8 - model: ili9342 - cs_pin: GPIO5 - dc_pin: GPIO4 - reset_pin: - number: GPIO21 - -i2c: - scl: GPIO18 - sda: GPIO8 - -touchscreen: - - platform: cst226 - interrupt_pin: GPIO3 - reset_pin: GPIO20 - +<<: !include common.yaml diff --git a/tests/components/cst816/common.yaml b/tests/components/cst816/common.yaml new file mode 100644 index 0000000000..f8deea6e98 --- /dev/null +++ b/tests/components/cst816/common.yaml @@ -0,0 +1,36 @@ +touchscreen: + - platform: cst816 + id: my_touchscreen + interrupt_pin: + number: 21 + reset_pin: GPIO16 + transform: + mirror_x: false + mirror_y: false + swap_xy: false + +i2c: + sda: 3 + scl: 2 + +display: + - id: my_display + platform: ili9xxx + dimensions: 480x320 + model: ST7796 + cs_pin: 15 + dc_pin: 20 + reset_pin: 22 + transform: + swap_xy: true + mirror_x: true + mirror_y: true + auto_clear_enabled: false + +spi: + clk_pin: 14 + mosi_pin: 13 + +binary_sensor: + - platform: cst816 + name: Home Button diff --git a/tests/components/cst816/test.esp32.yaml b/tests/components/cst816/test.esp32.yaml index f8deea6e98..dade44d145 100644 --- a/tests/components/cst816/test.esp32.yaml +++ b/tests/components/cst816/test.esp32.yaml @@ -1,36 +1 @@ -touchscreen: - - platform: cst816 - id: my_touchscreen - interrupt_pin: - number: 21 - reset_pin: GPIO16 - transform: - mirror_x: false - mirror_y: false - swap_xy: false - -i2c: - sda: 3 - scl: 2 - -display: - - id: my_display - platform: ili9xxx - dimensions: 480x320 - model: ST7796 - cs_pin: 15 - dc_pin: 20 - reset_pin: 22 - transform: - swap_xy: true - mirror_x: true - mirror_y: true - auto_clear_enabled: false - -spi: - clk_pin: 14 - mosi_pin: 13 - -binary_sensor: - - platform: cst816 - name: Home Button +<<: !include common.yaml diff --git a/tests/components/dallas/common.yaml b/tests/components/dallas/common.yaml new file mode 100644 index 0000000000..7975977107 --- /dev/null +++ b/tests/components/dallas/common.yaml @@ -0,0 +1,11 @@ +dallas: + pin: 4 + +sensor: + - platform: dallas + address: 0x1C0000031EDD2A28 + name: Dallas Temperature + resolution: 9 + - platform: dallas + index: 1 + name: Dallas Temperature diff --git a/tests/components/dallas/test.esp32-c3-idf.yaml b/tests/components/dallas/test.esp32-c3-idf.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.esp32-c3-idf.yaml +++ b/tests/components/dallas/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/dallas/test.esp32-c3.yaml b/tests/components/dallas/test.esp32-c3.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.esp32-c3.yaml +++ b/tests/components/dallas/test.esp32-c3.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/dallas/test.esp32-idf.yaml b/tests/components/dallas/test.esp32-idf.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.esp32-idf.yaml +++ b/tests/components/dallas/test.esp32-idf.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/dallas/test.esp32.yaml b/tests/components/dallas/test.esp32.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.esp32.yaml +++ b/tests/components/dallas/test.esp32.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/dallas/test.esp8266.yaml b/tests/components/dallas/test.esp8266.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.esp8266.yaml +++ b/tests/components/dallas/test.esp8266.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/dallas/test.rp2040.yaml b/tests/components/dallas/test.rp2040.yaml index 7975977107..dade44d145 100644 --- a/tests/components/dallas/test.rp2040.yaml +++ b/tests/components/dallas/test.rp2040.yaml @@ -1,11 +1 @@ -dallas: - pin: 4 - -sensor: - - platform: dallas - address: 0x1C0000031EDD2A28 - name: Dallas Temperature - resolution: 9 - - platform: dallas - index: 1 - name: Dallas Temperature +<<: !include common.yaml diff --git a/tests/components/datetime/common.yaml b/tests/components/datetime/common.yaml new file mode 100644 index 0000000000..4e26b68121 --- /dev/null +++ b/tests/components/datetime/common.yaml @@ -0,0 +1,3 @@ +datetime: + +time: diff --git a/tests/components/datetime/test.all.yaml b/tests/components/datetime/test.all.yaml index 4e26b68121..dade44d145 100644 --- a/tests/components/datetime/test.all.yaml +++ b/tests/components/datetime/test.all.yaml @@ -1,3 +1 @@ -datetime: - -time: +<<: !include common.yaml diff --git a/tests/components/debug/common.yaml b/tests/components/debug/common.yaml new file mode 100644 index 0000000000..5845beaa80 --- /dev/null +++ b/tests/components/debug/common.yaml @@ -0,0 +1 @@ +debug: diff --git a/tests/components/debug/test.esp32-c3-idf.yaml b/tests/components/debug/test.esp32-c3-idf.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.esp32-c3-idf.yaml +++ b/tests/components/debug/test.esp32-c3-idf.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.esp32-c3.yaml b/tests/components/debug/test.esp32-c3.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.esp32-c3.yaml +++ b/tests/components/debug/test.esp32-c3.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.esp32-idf.yaml b/tests/components/debug/test.esp32-idf.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.esp32-idf.yaml +++ b/tests/components/debug/test.esp32-idf.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.esp32.yaml b/tests/components/debug/test.esp32.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.esp32.yaml +++ b/tests/components/debug/test.esp32.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.esp8266.yaml b/tests/components/debug/test.esp8266.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.esp8266.yaml +++ b/tests/components/debug/test.esp8266.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.host.yaml b/tests/components/debug/test.host.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.host.yaml +++ b/tests/components/debug/test.host.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/debug/test.rp2040.yaml b/tests/components/debug/test.rp2040.yaml index 5845beaa80..dade44d145 100644 --- a/tests/components/debug/test.rp2040.yaml +++ b/tests/components/debug/test.rp2040.yaml @@ -1 +1 @@ -debug: +<<: !include common.yaml diff --git a/tests/components/dht/common.yaml b/tests/components/dht/common.yaml new file mode 100644 index 0000000000..f134a324ca --- /dev/null +++ b/tests/components/dht/common.yaml @@ -0,0 +1,11 @@ +sensor: + - platform: dht + pin: 4 + model: AM2302 + update_interval: 15s + temperature: + id: dht_temperature + name: DHT Temperature + humidity: + id: dht_humidity + name: DHT Humidity diff --git a/tests/components/dht/test.esp32-c3-idf.yaml b/tests/components/dht/test.esp32-c3-idf.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.esp32-c3-idf.yaml +++ b/tests/components/dht/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/dht/test.esp32-c3.yaml b/tests/components/dht/test.esp32-c3.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.esp32-c3.yaml +++ b/tests/components/dht/test.esp32-c3.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/dht/test.esp32-idf.yaml b/tests/components/dht/test.esp32-idf.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.esp32-idf.yaml +++ b/tests/components/dht/test.esp32-idf.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/dht/test.esp32.yaml b/tests/components/dht/test.esp32.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.esp32.yaml +++ b/tests/components/dht/test.esp32.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/dht/test.esp8266.yaml b/tests/components/dht/test.esp8266.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.esp8266.yaml +++ b/tests/components/dht/test.esp8266.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/dht/test.rp2040.yaml b/tests/components/dht/test.rp2040.yaml index f134a324ca..dade44d145 100644 --- a/tests/components/dht/test.rp2040.yaml +++ b/tests/components/dht/test.rp2040.yaml @@ -1,11 +1 @@ -sensor: - - platform: dht - pin: 4 - model: AM2302 - update_interval: 15s - temperature: - id: dht_temperature - name: DHT Temperature - humidity: - id: dht_humidity - name: DHT Humidity +<<: !include common.yaml diff --git a/tests/components/display/common.yaml b/tests/components/display/common.yaml new file mode 100644 index 0000000000..a22aa76780 --- /dev/null +++ b/tests/components/display/common.yaml @@ -0,0 +1,35 @@ +spi: + - id: spi_main_lcd + clk_pin: 16 + mosi_pin: 17 + miso_pin: 15 + +display: + - platform: ili9xxx + id: main_lcd + model: ili9342 + cs_pin: 12 + dc_pin: 13 + reset_pin: 21 + lambda: |- + // Draw an analog clock in the center of the screen + int centerX = it.get_width() / 2; + int centerY = it.get_height() / 2; + int radius = min(it.get_width(), it.get_height()) / 4; + + // Draw border + it.circle(centerX, centerY, radius); + + // Draw hour ticks + for(int h = 0; h < 12; h++) { + int hourAngle = (h * 30) - 90; + + it.line_at_angle(centerX, centerY, hourAngle, radius - 10, radius); + } + + // Draw minute ticks + for(int m = 0; m < 60; m++) { + int minuteAngle = (m * 6) - 90; + + it.line_at_angle(centerX, centerY, minuteAngle, radius - 5, radius); + } diff --git a/tests/components/display/test.esp32.yaml b/tests/components/display/test.esp32.yaml index a22aa76780..dade44d145 100644 --- a/tests/components/display/test.esp32.yaml +++ b/tests/components/display/test.esp32.yaml @@ -1,35 +1 @@ -spi: - - id: spi_main_lcd - clk_pin: 16 - mosi_pin: 17 - miso_pin: 15 - -display: - - platform: ili9xxx - id: main_lcd - model: ili9342 - cs_pin: 12 - dc_pin: 13 - reset_pin: 21 - lambda: |- - // Draw an analog clock in the center of the screen - int centerX = it.get_width() / 2; - int centerY = it.get_height() / 2; - int radius = min(it.get_width(), it.get_height()) / 4; - - // Draw border - it.circle(centerX, centerY, radius); - - // Draw hour ticks - for(int h = 0; h < 12; h++) { - int hourAngle = (h * 30) - 90; - - it.line_at_angle(centerX, centerY, hourAngle, radius - 10, radius); - } - - // Draw minute ticks - for(int m = 0; m < 60; m++) { - int minuteAngle = (m * 6) - 90; - - it.line_at_angle(centerX, centerY, minuteAngle, radius - 5, radius); - } +<<: !include common.yaml diff --git a/tests/components/duty_cycle/common.yaml b/tests/components/duty_cycle/common.yaml new file mode 100644 index 0000000000..2b7f31efbd --- /dev/null +++ b/tests/components/duty_cycle/common.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: duty_cycle + pin: 4 + name: Duty Cycle Sensor diff --git a/tests/components/duty_cycle/test.esp32-c3-idf.yaml b/tests/components/duty_cycle/test.esp32-c3-idf.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.esp32-c3-idf.yaml +++ b/tests/components/duty_cycle/test.esp32-c3-idf.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_cycle/test.esp32-c3.yaml b/tests/components/duty_cycle/test.esp32-c3.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.esp32-c3.yaml +++ b/tests/components/duty_cycle/test.esp32-c3.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_cycle/test.esp32-idf.yaml b/tests/components/duty_cycle/test.esp32-idf.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.esp32-idf.yaml +++ b/tests/components/duty_cycle/test.esp32-idf.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_cycle/test.esp32.yaml b/tests/components/duty_cycle/test.esp32.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.esp32.yaml +++ b/tests/components/duty_cycle/test.esp32.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_cycle/test.esp8266.yaml b/tests/components/duty_cycle/test.esp8266.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.esp8266.yaml +++ b/tests/components/duty_cycle/test.esp8266.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_cycle/test.rp2040.yaml b/tests/components/duty_cycle/test.rp2040.yaml index 2b7f31efbd..dade44d145 100644 --- a/tests/components/duty_cycle/test.rp2040.yaml +++ b/tests/components/duty_cycle/test.rp2040.yaml @@ -1,4 +1 @@ -sensor: - - platform: duty_cycle - pin: 4 - name: Duty Cycle Sensor +<<: !include common.yaml diff --git a/tests/components/duty_time/common.yaml b/tests/components/duty_time/common.yaml new file mode 100644 index 0000000000..28fa4afd1c --- /dev/null +++ b/tests/components/duty_time/common.yaml @@ -0,0 +1,14 @@ +binary_sensor: + - platform: template + id: bin1 + lambda: |- + if (millis() > 10000) { + return true; + } else { + return false; + } + +sensor: + - platform: duty_time + name: Duty Time + sensor: bin1 diff --git a/tests/components/duty_time/test.esp32-c3-idf.yaml b/tests/components/duty_time/test.esp32-c3-idf.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.esp32-c3-idf.yaml +++ b/tests/components/duty_time/test.esp32-c3-idf.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/duty_time/test.esp32-c3.yaml b/tests/components/duty_time/test.esp32-c3.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.esp32-c3.yaml +++ b/tests/components/duty_time/test.esp32-c3.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/duty_time/test.esp32-idf.yaml b/tests/components/duty_time/test.esp32-idf.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.esp32-idf.yaml +++ b/tests/components/duty_time/test.esp32-idf.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/duty_time/test.esp32.yaml b/tests/components/duty_time/test.esp32.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.esp32.yaml +++ b/tests/components/duty_time/test.esp32.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/duty_time/test.esp8266.yaml b/tests/components/duty_time/test.esp8266.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.esp8266.yaml +++ b/tests/components/duty_time/test.esp8266.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/duty_time/test.rp2040.yaml b/tests/components/duty_time/test.rp2040.yaml index 28fa4afd1c..dade44d145 100644 --- a/tests/components/duty_time/test.rp2040.yaml +++ b/tests/components/duty_time/test.rp2040.yaml @@ -1,14 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -sensor: - - platform: duty_time - name: Duty Time - sensor: bin1 +<<: !include common.yaml diff --git a/tests/components/endstop/common.yaml b/tests/components/endstop/common.yaml new file mode 100644 index 0000000000..341fbf7260 --- /dev/null +++ b/tests/components/endstop/common.yaml @@ -0,0 +1,33 @@ +binary_sensor: + - platform: template + id: bin1 + lambda: |- + if (millis() > 10000) { + return true; + } else { + return false; + } + +switch: + - platform: template + id: template_switch1 + optimistic: true + - platform: template + id: template_switch2 + optimistic: true + +cover: + - platform: endstop + id: endstop_cover + name: Endstop Cover + stop_action: + - switch.turn_on: template_switch1 + open_endstop: bin1 + open_action: + - switch.turn_on: template_switch1 + open_duration: 5min + close_endstop: bin1 + close_action: + - switch.turn_on: template_switch2 + close_duration: 4.5min + max_duration: 10min diff --git a/tests/components/endstop/test.esp32-c3-idf.yaml b/tests/components/endstop/test.esp32-c3-idf.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.esp32-c3-idf.yaml +++ b/tests/components/endstop/test.esp32-c3-idf.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/endstop/test.esp32-c3.yaml b/tests/components/endstop/test.esp32-c3.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.esp32-c3.yaml +++ b/tests/components/endstop/test.esp32-c3.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/endstop/test.esp32-idf.yaml b/tests/components/endstop/test.esp32-idf.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.esp32-idf.yaml +++ b/tests/components/endstop/test.esp32-idf.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/endstop/test.esp32.yaml b/tests/components/endstop/test.esp32.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.esp32.yaml +++ b/tests/components/endstop/test.esp32.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/endstop/test.esp8266.yaml b/tests/components/endstop/test.esp8266.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.esp8266.yaml +++ b/tests/components/endstop/test.esp8266.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/endstop/test.rp2040.yaml b/tests/components/endstop/test.rp2040.yaml index 341fbf7260..dade44d145 100644 --- a/tests/components/endstop/test.rp2040.yaml +++ b/tests/components/endstop/test.rp2040.yaml @@ -1,33 +1 @@ -binary_sensor: - - platform: template - id: bin1 - lambda: |- - if (millis() > 10000) { - return true; - } else { - return false; - } - -switch: - - platform: template - id: template_switch1 - optimistic: true - - platform: template - id: template_switch2 - optimistic: true - -cover: - - platform: endstop - id: endstop_cover - name: Endstop Cover - stop_action: - - switch.turn_on: template_switch1 - open_endstop: bin1 - open_action: - - switch.turn_on: template_switch1 - open_duration: 5min - close_endstop: bin1 - close_action: - - switch.turn_on: template_switch2 - close_duration: 4.5min - max_duration: 10min +<<: !include common.yaml diff --git a/tests/components/esp32_ble/common.yaml b/tests/components/esp32_ble/common.yaml new file mode 100644 index 0000000000..76b35fc8f8 --- /dev/null +++ b/tests/components/esp32_ble/common.yaml @@ -0,0 +1,2 @@ +esp32_ble: + io_capability: keyboard_only diff --git a/tests/components/esp32_ble/test.esp32-c3-idf.yaml b/tests/components/esp32_ble/test.esp32-c3-idf.yaml index 76b35fc8f8..dade44d145 100644 --- a/tests/components/esp32_ble/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_ble/test.esp32-c3-idf.yaml @@ -1,2 +1 @@ -esp32_ble: - io_capability: keyboard_only +<<: !include common.yaml diff --git a/tests/components/esp32_ble/test.esp32-c3.yaml b/tests/components/esp32_ble/test.esp32-c3.yaml index 76b35fc8f8..dade44d145 100644 --- a/tests/components/esp32_ble/test.esp32-c3.yaml +++ b/tests/components/esp32_ble/test.esp32-c3.yaml @@ -1,2 +1 @@ -esp32_ble: - io_capability: keyboard_only +<<: !include common.yaml diff --git a/tests/components/esp32_ble/test.esp32-idf.yaml b/tests/components/esp32_ble/test.esp32-idf.yaml index 76b35fc8f8..dade44d145 100644 --- a/tests/components/esp32_ble/test.esp32-idf.yaml +++ b/tests/components/esp32_ble/test.esp32-idf.yaml @@ -1,2 +1 @@ -esp32_ble: - io_capability: keyboard_only +<<: !include common.yaml diff --git a/tests/components/esp32_ble/test.esp32.yaml b/tests/components/esp32_ble/test.esp32.yaml index 76b35fc8f8..dade44d145 100644 --- a/tests/components/esp32_ble/test.esp32.yaml +++ b/tests/components/esp32_ble/test.esp32.yaml @@ -1,2 +1 @@ -esp32_ble: - io_capability: keyboard_only +<<: !include common.yaml diff --git a/tests/components/esp32_ble_beacon/common.yaml b/tests/components/esp32_ble_beacon/common.yaml new file mode 100644 index 0000000000..aafb0341d7 --- /dev/null +++ b/tests/components/esp32_ble_beacon/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_beacon: + type: iBeacon + uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' diff --git a/tests/components/esp32_ble_beacon/test.esp32-c3-idf.yaml b/tests/components/esp32_ble_beacon/test.esp32-c3-idf.yaml index aafb0341d7..dade44d145 100644 --- a/tests/components/esp32_ble_beacon/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_ble_beacon/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_beacon: - type: iBeacon - uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' +<<: !include common.yaml diff --git a/tests/components/esp32_ble_beacon/test.esp32-c3.yaml b/tests/components/esp32_ble_beacon/test.esp32-c3.yaml index aafb0341d7..dade44d145 100644 --- a/tests/components/esp32_ble_beacon/test.esp32-c3.yaml +++ b/tests/components/esp32_ble_beacon/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_beacon: - type: iBeacon - uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' +<<: !include common.yaml diff --git a/tests/components/esp32_ble_beacon/test.esp32-idf.yaml b/tests/components/esp32_ble_beacon/test.esp32-idf.yaml index aafb0341d7..dade44d145 100644 --- a/tests/components/esp32_ble_beacon/test.esp32-idf.yaml +++ b/tests/components/esp32_ble_beacon/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_beacon: - type: iBeacon - uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' +<<: !include common.yaml diff --git a/tests/components/esp32_ble_beacon/test.esp32.yaml b/tests/components/esp32_ble_beacon/test.esp32.yaml index aafb0341d7..dade44d145 100644 --- a/tests/components/esp32_ble_beacon/test.esp32.yaml +++ b/tests/components/esp32_ble_beacon/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_beacon: - type: iBeacon - uuid: 'c29ce823-e67a-4e71-bff2-abaa32e77a98' +<<: !include common.yaml diff --git a/tests/components/esp32_ble_client/common.yaml b/tests/components/esp32_ble_client/common.yaml new file mode 100644 index 0000000000..33b7205bf2 --- /dev/null +++ b/tests/components/esp32_ble_client/common.yaml @@ -0,0 +1,5 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: blec diff --git a/tests/components/esp32_ble_client/test.esp32-c3-idf.yaml b/tests/components/esp32_ble_client/test.esp32-c3-idf.yaml index 33b7205bf2..dade44d145 100644 --- a/tests/components/esp32_ble_client/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_ble_client/test.esp32-c3-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: blec +<<: !include common.yaml diff --git a/tests/components/esp32_ble_client/test.esp32-c3.yaml b/tests/components/esp32_ble_client/test.esp32-c3.yaml index 33b7205bf2..dade44d145 100644 --- a/tests/components/esp32_ble_client/test.esp32-c3.yaml +++ b/tests/components/esp32_ble_client/test.esp32-c3.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: blec +<<: !include common.yaml diff --git a/tests/components/esp32_ble_client/test.esp32-idf.yaml b/tests/components/esp32_ble_client/test.esp32-idf.yaml index 33b7205bf2..dade44d145 100644 --- a/tests/components/esp32_ble_client/test.esp32-idf.yaml +++ b/tests/components/esp32_ble_client/test.esp32-idf.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: blec +<<: !include common.yaml diff --git a/tests/components/esp32_ble_client/test.esp32.yaml b/tests/components/esp32_ble_client/test.esp32.yaml index 33b7205bf2..dade44d145 100644 --- a/tests/components/esp32_ble_client/test.esp32.yaml +++ b/tests/components/esp32_ble_client/test.esp32.yaml @@ -1,5 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: blec +<<: !include common.yaml diff --git a/tests/components/esp32_ble_server/common.yaml b/tests/components/esp32_ble_server/common.yaml new file mode 100644 index 0000000000..29a5407f84 --- /dev/null +++ b/tests/components/esp32_ble_server/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_server: + id: ble + manufacturer_data: [0x72, 0x4, 0x00, 0x23] diff --git a/tests/components/esp32_ble_server/test.esp32-c3-idf.yaml b/tests/components/esp32_ble_server/test.esp32-c3-idf.yaml index 29a5407f84..dade44d145 100644 --- a/tests/components/esp32_ble_server/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_ble_server/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_server: - id: ble - manufacturer_data: [0x72, 0x4, 0x00, 0x23] +<<: !include common.yaml diff --git a/tests/components/esp32_ble_server/test.esp32-c3.yaml b/tests/components/esp32_ble_server/test.esp32-c3.yaml index 29a5407f84..dade44d145 100644 --- a/tests/components/esp32_ble_server/test.esp32-c3.yaml +++ b/tests/components/esp32_ble_server/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_server: - id: ble - manufacturer_data: [0x72, 0x4, 0x00, 0x23] +<<: !include common.yaml diff --git a/tests/components/esp32_ble_server/test.esp32-idf.yaml b/tests/components/esp32_ble_server/test.esp32-idf.yaml index 29a5407f84..dade44d145 100644 --- a/tests/components/esp32_ble_server/test.esp32-idf.yaml +++ b/tests/components/esp32_ble_server/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_server: - id: ble - manufacturer_data: [0x72, 0x4, 0x00, 0x23] +<<: !include common.yaml diff --git a/tests/components/esp32_ble_server/test.esp32.yaml b/tests/components/esp32_ble_server/test.esp32.yaml index 29a5407f84..dade44d145 100644 --- a/tests/components/esp32_ble_server/test.esp32.yaml +++ b/tests/components/esp32_ble_server/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_server: - id: ble - manufacturer_data: [0x72, 0x4, 0x00, 0x23] +<<: !include common.yaml diff --git a/tests/components/esp32_ble_tracker/common.yaml b/tests/components/esp32_ble_tracker/common.yaml new file mode 100644 index 0000000000..ef23635c9e --- /dev/null +++ b/tests/components/esp32_ble_tracker/common.yaml @@ -0,0 +1,41 @@ +esphome: + on_boot: + then: + - esp32_ble_tracker.start_scan + - esp32_ble_tracker.stop_scan + +esp32_ble_tracker: + on_ble_advertise: + - mac_address: + - AA:BB:CC:DD:EE:FF + - FF:EE:DD:CC:BB:AA + then: + # yamllint disable rule:line-length + - lambda: !lambda |- + ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str()); + # yamllint enable rule:line-length + - mac_address: AC:37:43:77:5F:4C + then: + # yamllint disable rule:line-length + - lambda: !lambda |- + ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); + # yamllint enable rule:line-length + - then: + # yamllint disable rule:line-length + - lambda: !lambda |- + ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); + # yamllint enable rule:line-length + on_ble_service_data_advertise: + - service_uuid: ABCD + then: + - lambda: !lambda |- + ESP_LOGD("main", "Length of service data is %i", x.size()); + on_ble_manufacturer_data_advertise: + - manufacturer_id: ABCD + then: + - lambda: !lambda |- + ESP_LOGD("main", "Length of manufacturer data is %i", x.size()); + on_scan_end: + - then: + - lambda: |- + ESP_LOGD("ble_auto", "The scan has ended!"); diff --git a/tests/components/esp32_ble_tracker/test.esp32-c3-idf.yaml b/tests/components/esp32_ble_tracker/test.esp32-c3-idf.yaml index ef23635c9e..dade44d145 100644 --- a/tests/components/esp32_ble_tracker/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_ble_tracker/test.esp32-c3-idf.yaml @@ -1,41 +1 @@ -esphome: - on_boot: - then: - - esp32_ble_tracker.start_scan - - esp32_ble_tracker.stop_scan - -esp32_ble_tracker: - on_ble_advertise: - - mac_address: - - AA:BB:CC:DD:EE:FF - - FF:EE:DD:CC:BB:AA - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str()); - # yamllint enable rule:line-length - - mac_address: AC:37:43:77:5F:4C - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - on_ble_service_data_advertise: - - service_uuid: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of service data is %i", x.size()); - on_ble_manufacturer_data_advertise: - - manufacturer_id: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of manufacturer data is %i", x.size()); - on_scan_end: - - then: - - lambda: |- - ESP_LOGD("ble_auto", "The scan has ended!"); +<<: !include common.yaml diff --git a/tests/components/esp32_ble_tracker/test.esp32-c3.yaml b/tests/components/esp32_ble_tracker/test.esp32-c3.yaml index ef23635c9e..dade44d145 100644 --- a/tests/components/esp32_ble_tracker/test.esp32-c3.yaml +++ b/tests/components/esp32_ble_tracker/test.esp32-c3.yaml @@ -1,41 +1 @@ -esphome: - on_boot: - then: - - esp32_ble_tracker.start_scan - - esp32_ble_tracker.stop_scan - -esp32_ble_tracker: - on_ble_advertise: - - mac_address: - - AA:BB:CC:DD:EE:FF - - FF:EE:DD:CC:BB:AA - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str()); - # yamllint enable rule:line-length - - mac_address: AC:37:43:77:5F:4C - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - on_ble_service_data_advertise: - - service_uuid: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of service data is %i", x.size()); - on_ble_manufacturer_data_advertise: - - manufacturer_id: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of manufacturer data is %i", x.size()); - on_scan_end: - - then: - - lambda: |- - ESP_LOGD("ble_auto", "The scan has ended!"); +<<: !include common.yaml diff --git a/tests/components/esp32_ble_tracker/test.esp32-idf.yaml b/tests/components/esp32_ble_tracker/test.esp32-idf.yaml index ef23635c9e..dade44d145 100644 --- a/tests/components/esp32_ble_tracker/test.esp32-idf.yaml +++ b/tests/components/esp32_ble_tracker/test.esp32-idf.yaml @@ -1,41 +1 @@ -esphome: - on_boot: - then: - - esp32_ble_tracker.start_scan - - esp32_ble_tracker.stop_scan - -esp32_ble_tracker: - on_ble_advertise: - - mac_address: - - AA:BB:CC:DD:EE:FF - - FF:EE:DD:CC:BB:AA - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str()); - # yamllint enable rule:line-length - - mac_address: AC:37:43:77:5F:4C - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - on_ble_service_data_advertise: - - service_uuid: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of service data is %i", x.size()); - on_ble_manufacturer_data_advertise: - - manufacturer_id: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of manufacturer data is %i", x.size()); - on_scan_end: - - then: - - lambda: |- - ESP_LOGD("ble_auto", "The scan has ended!"); +<<: !include common.yaml diff --git a/tests/components/esp32_ble_tracker/test.esp32.yaml b/tests/components/esp32_ble_tracker/test.esp32.yaml index ef23635c9e..dade44d145 100644 --- a/tests/components/esp32_ble_tracker/test.esp32.yaml +++ b/tests/components/esp32_ble_tracker/test.esp32.yaml @@ -1,41 +1 @@ -esphome: - on_boot: - then: - - esp32_ble_tracker.start_scan - - esp32_ble_tracker.stop_scan - -esp32_ble_tracker: - on_ble_advertise: - - mac_address: - - AA:BB:CC:DD:EE:FF - - FF:EE:DD:CC:BB:AA - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str()); - # yamllint enable rule:line-length - - mac_address: AC:37:43:77:5F:4C - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - - then: - # yamllint disable rule:line-length - - lambda: !lambda |- - ESP_LOGD("main", "The device address is %s", x.address_str().c_str()); - # yamllint enable rule:line-length - on_ble_service_data_advertise: - - service_uuid: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of service data is %i", x.size()); - on_ble_manufacturer_data_advertise: - - manufacturer_id: ABCD - then: - - lambda: !lambda |- - ESP_LOGD("main", "Length of manufacturer data is %i", x.size()); - on_scan_end: - - then: - - lambda: |- - ESP_LOGD("ble_auto", "The scan has ended!"); +<<: !include common.yaml diff --git a/tests/components/esp32_camera/common.yaml b/tests/components/esp32_camera/common.yaml new file mode 100644 index 0000000000..2f5f792f1c --- /dev/null +++ b/tests/components/esp32_camera/common.yaml @@ -0,0 +1,28 @@ +esp32_camera: + name: ESP32 Camera + data_pins: + - number: 17 + - number: 35 + - number: 34 + - number: 5 + - number: 39 + - number: 18 + - number: 36 + - number: 19 + vsync_pin: 22 + href_pin: 26 + pixel_clock_pin: 21 + external_clock: + pin: 27 + frequency: 20MHz + i2c_pins: + sda: 25 + scl: 23 + reset_pin: 15 + power_down_pin: 1 + resolution: 640x480 + jpeg_quality: 10 + on_image: + then: + - lambda: |- + ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); diff --git a/tests/components/esp32_camera/test.esp32-idf.yaml b/tests/components/esp32_camera/test.esp32-idf.yaml index 2f5f792f1c..dade44d145 100644 --- a/tests/components/esp32_camera/test.esp32-idf.yaml +++ b/tests/components/esp32_camera/test.esp32-idf.yaml @@ -1,28 +1 @@ -esp32_camera: - name: ESP32 Camera - data_pins: - - number: 17 - - number: 35 - - number: 34 - - number: 5 - - number: 39 - - number: 18 - - number: 36 - - number: 19 - vsync_pin: 22 - href_pin: 26 - pixel_clock_pin: 21 - external_clock: - pin: 27 - frequency: 20MHz - i2c_pins: - sda: 25 - scl: 23 - reset_pin: 15 - power_down_pin: 1 - resolution: 640x480 - jpeg_quality: 10 - on_image: - then: - - lambda: |- - ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); +<<: !include common.yaml diff --git a/tests/components/esp32_camera/test.esp32.yaml b/tests/components/esp32_camera/test.esp32.yaml index 2f5f792f1c..dade44d145 100644 --- a/tests/components/esp32_camera/test.esp32.yaml +++ b/tests/components/esp32_camera/test.esp32.yaml @@ -1,28 +1 @@ -esp32_camera: - name: ESP32 Camera - data_pins: - - number: 17 - - number: 35 - - number: 34 - - number: 5 - - number: 39 - - number: 18 - - number: 36 - - number: 19 - vsync_pin: 22 - href_pin: 26 - pixel_clock_pin: 21 - external_clock: - pin: 27 - frequency: 20MHz - i2c_pins: - sda: 25 - scl: 23 - reset_pin: 15 - power_down_pin: 1 - resolution: 640x480 - jpeg_quality: 10 - on_image: - then: - - lambda: |- - ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); +<<: !include common.yaml diff --git a/tests/components/esp32_camera_web_server/common.yaml b/tests/components/esp32_camera_web_server/common.yaml new file mode 100644 index 0000000000..5edefdf0a8 --- /dev/null +++ b/tests/components/esp32_camera_web_server/common.yaml @@ -0,0 +1,34 @@ +esp32_camera: + name: ESP32 Camera + data_pins: + - number: 17 + - number: 35 + - number: 34 + - number: 5 + - number: 39 + - number: 18 + - number: 36 + - number: 19 + vsync_pin: 22 + href_pin: 26 + pixel_clock_pin: 21 + external_clock: + pin: 27 + frequency: 20MHz + i2c_pins: + sda: 25 + scl: 23 + reset_pin: 15 + power_down_pin: 1 + resolution: 640x480 + jpeg_quality: 10 + on_image: + then: + - lambda: |- + ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); + +esp32_camera_web_server: + - port: 8080 + mode: stream + - port: 8081 + mode: snapshot diff --git a/tests/components/esp32_camera_web_server/test.esp32-idf.yaml b/tests/components/esp32_camera_web_server/test.esp32-idf.yaml index 5edefdf0a8..dade44d145 100644 --- a/tests/components/esp32_camera_web_server/test.esp32-idf.yaml +++ b/tests/components/esp32_camera_web_server/test.esp32-idf.yaml @@ -1,34 +1 @@ -esp32_camera: - name: ESP32 Camera - data_pins: - - number: 17 - - number: 35 - - number: 34 - - number: 5 - - number: 39 - - number: 18 - - number: 36 - - number: 19 - vsync_pin: 22 - href_pin: 26 - pixel_clock_pin: 21 - external_clock: - pin: 27 - frequency: 20MHz - i2c_pins: - sda: 25 - scl: 23 - reset_pin: 15 - power_down_pin: 1 - resolution: 640x480 - jpeg_quality: 10 - on_image: - then: - - lambda: |- - ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); - -esp32_camera_web_server: - - port: 8080 - mode: stream - - port: 8081 - mode: snapshot +<<: !include common.yaml diff --git a/tests/components/esp32_camera_web_server/test.esp32.yaml b/tests/components/esp32_camera_web_server/test.esp32.yaml index 5edefdf0a8..dade44d145 100644 --- a/tests/components/esp32_camera_web_server/test.esp32.yaml +++ b/tests/components/esp32_camera_web_server/test.esp32.yaml @@ -1,34 +1 @@ -esp32_camera: - name: ESP32 Camera - data_pins: - - number: 17 - - number: 35 - - number: 34 - - number: 5 - - number: 39 - - number: 18 - - number: 36 - - number: 19 - vsync_pin: 22 - href_pin: 26 - pixel_clock_pin: 21 - external_clock: - pin: 27 - frequency: 20MHz - i2c_pins: - sda: 25 - scl: 23 - reset_pin: 15 - power_down_pin: 1 - resolution: 640x480 - jpeg_quality: 10 - on_image: - then: - - lambda: |- - ESP_LOGD("main", "image len=%d, data=%c", image.length, image.data[0]); - -esp32_camera_web_server: - - port: 8080 - mode: stream - - port: 8081 - mode: snapshot +<<: !include common.yaml diff --git a/tests/components/esp32_dac/common.yaml b/tests/components/esp32_dac/common.yaml new file mode 100644 index 0000000000..225627f5af --- /dev/null +++ b/tests/components/esp32_dac/common.yaml @@ -0,0 +1,4 @@ +output: + - platform: esp32_dac + id: dac_output + pin: 25 diff --git a/tests/components/esp32_dac/test.esp32-idf.yaml b/tests/components/esp32_dac/test.esp32-idf.yaml index 225627f5af..dade44d145 100644 --- a/tests/components/esp32_dac/test.esp32-idf.yaml +++ b/tests/components/esp32_dac/test.esp32-idf.yaml @@ -1,4 +1 @@ -output: - - platform: esp32_dac - id: dac_output - pin: 25 +<<: !include common.yaml diff --git a/tests/components/esp32_dac/test.esp32.yaml b/tests/components/esp32_dac/test.esp32.yaml index 225627f5af..dade44d145 100644 --- a/tests/components/esp32_dac/test.esp32.yaml +++ b/tests/components/esp32_dac/test.esp32.yaml @@ -1,4 +1 @@ -output: - - platform: esp32_dac - id: dac_output - pin: 25 +<<: !include common.yaml diff --git a/tests/components/esp32_hall/common.yaml b/tests/components/esp32_hall/common.yaml new file mode 100644 index 0000000000..f8429f5aa0 --- /dev/null +++ b/tests/components/esp32_hall/common.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: esp32_hall + name: ESP32 Hall Sensor diff --git a/tests/components/esp32_hall/test.esp32-idf.yaml b/tests/components/esp32_hall/test.esp32-idf.yaml index f8429f5aa0..dade44d145 100644 --- a/tests/components/esp32_hall/test.esp32-idf.yaml +++ b/tests/components/esp32_hall/test.esp32-idf.yaml @@ -1,3 +1 @@ -sensor: - - platform: esp32_hall - name: ESP32 Hall Sensor +<<: !include common.yaml diff --git a/tests/components/esp32_hall/test.esp32.yaml b/tests/components/esp32_hall/test.esp32.yaml index f8429f5aa0..dade44d145 100644 --- a/tests/components/esp32_hall/test.esp32.yaml +++ b/tests/components/esp32_hall/test.esp32.yaml @@ -1,3 +1 @@ -sensor: - - platform: esp32_hall - name: ESP32 Hall Sensor +<<: !include common.yaml diff --git a/tests/components/esp32_improv/common.yaml b/tests/components/esp32_improv/common.yaml new file mode 100644 index 0000000000..7eb3f9c0be --- /dev/null +++ b/tests/components/esp32_improv/common.yaml @@ -0,0 +1,18 @@ +wifi: + ssid: MySSID + password: password1 + +binary_sensor: + - platform: gpio + pin: 0 + id: io0_button + +output: + - platform: gpio + pin: 2 + id: built_in_led + +esp32_improv: + authorizer: io0_button + authorized_duration: 1min + status_indicator: built_in_led diff --git a/tests/components/esp32_improv/test.esp32-c3-idf.yaml b/tests/components/esp32_improv/test.esp32-c3-idf.yaml index 7eb3f9c0be..dade44d145 100644 --- a/tests/components/esp32_improv/test.esp32-c3-idf.yaml +++ b/tests/components/esp32_improv/test.esp32-c3-idf.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -binary_sensor: - - platform: gpio - pin: 0 - id: io0_button - -output: - - platform: gpio - pin: 2 - id: built_in_led - -esp32_improv: - authorizer: io0_button - authorized_duration: 1min - status_indicator: built_in_led +<<: !include common.yaml diff --git a/tests/components/esp32_improv/test.esp32-c3.yaml b/tests/components/esp32_improv/test.esp32-c3.yaml index 7eb3f9c0be..dade44d145 100644 --- a/tests/components/esp32_improv/test.esp32-c3.yaml +++ b/tests/components/esp32_improv/test.esp32-c3.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -binary_sensor: - - platform: gpio - pin: 0 - id: io0_button - -output: - - platform: gpio - pin: 2 - id: built_in_led - -esp32_improv: - authorizer: io0_button - authorized_duration: 1min - status_indicator: built_in_led +<<: !include common.yaml diff --git a/tests/components/esp32_improv/test.esp32-idf.yaml b/tests/components/esp32_improv/test.esp32-idf.yaml index 7eb3f9c0be..dade44d145 100644 --- a/tests/components/esp32_improv/test.esp32-idf.yaml +++ b/tests/components/esp32_improv/test.esp32-idf.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -binary_sensor: - - platform: gpio - pin: 0 - id: io0_button - -output: - - platform: gpio - pin: 2 - id: built_in_led - -esp32_improv: - authorizer: io0_button - authorized_duration: 1min - status_indicator: built_in_led +<<: !include common.yaml diff --git a/tests/components/esp32_improv/test.esp32.yaml b/tests/components/esp32_improv/test.esp32.yaml index 7eb3f9c0be..dade44d145 100644 --- a/tests/components/esp32_improv/test.esp32.yaml +++ b/tests/components/esp32_improv/test.esp32.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -binary_sensor: - - platform: gpio - pin: 0 - id: io0_button - -output: - - platform: gpio - pin: 2 - id: built_in_led - -esp32_improv: - authorizer: io0_button - authorized_duration: 1min - status_indicator: built_in_led +<<: !include common.yaml diff --git a/tests/components/esp32_touch/common.yaml b/tests/components/esp32_touch/common.yaml new file mode 100644 index 0000000000..691cce8d86 --- /dev/null +++ b/tests/components/esp32_touch/common.yaml @@ -0,0 +1,16 @@ +esp32_touch: + setup_mode: false + iir_filter: 10ms + sleep_duration: 27ms + measurement_duration: 8ms + low_voltage_reference: 0.5V + high_voltage_reference: 2.7V + voltage_attenuation: 1.5V + +binary_sensor: + - platform: esp32_touch + name: ESP32 Touch Pad + pin: 27 + threshold: 1000 + on_press: + - logger.log: "I'm touched!" diff --git a/tests/components/esp32_touch/test.esp32-idf.yaml b/tests/components/esp32_touch/test.esp32-idf.yaml index 691cce8d86..dade44d145 100644 --- a/tests/components/esp32_touch/test.esp32-idf.yaml +++ b/tests/components/esp32_touch/test.esp32-idf.yaml @@ -1,16 +1 @@ -esp32_touch: - setup_mode: false - iir_filter: 10ms - sleep_duration: 27ms - measurement_duration: 8ms - low_voltage_reference: 0.5V - high_voltage_reference: 2.7V - voltage_attenuation: 1.5V - -binary_sensor: - - platform: esp32_touch - name: ESP32 Touch Pad - pin: 27 - threshold: 1000 - on_press: - - logger.log: "I'm touched!" +<<: !include common.yaml diff --git a/tests/components/esp32_touch/test.esp32.yaml b/tests/components/esp32_touch/test.esp32.yaml index 691cce8d86..dade44d145 100644 --- a/tests/components/esp32_touch/test.esp32.yaml +++ b/tests/components/esp32_touch/test.esp32.yaml @@ -1,16 +1 @@ -esp32_touch: - setup_mode: false - iir_filter: 10ms - sleep_duration: 27ms - measurement_duration: 8ms - low_voltage_reference: 0.5V - high_voltage_reference: 2.7V - voltage_attenuation: 1.5V - -binary_sensor: - - platform: esp32_touch - name: ESP32 Touch Pad - pin: 27 - threshold: 1000 - on_press: - - logger.log: "I'm touched!" +<<: !include common.yaml diff --git a/tests/components/esp8266_pwm/common.yaml b/tests/components/esp8266_pwm/common.yaml new file mode 100644 index 0000000000..52b290f91b --- /dev/null +++ b/tests/components/esp8266_pwm/common.yaml @@ -0,0 +1,8 @@ +output: + - platform: esp8266_pwm + id: out + pin: 4 + frequency: 50Hz + - platform: esp8266_pwm + id: out2 + pin: 5 diff --git a/tests/components/esp8266_pwm/test.esp8266.yaml b/tests/components/esp8266_pwm/test.esp8266.yaml index 52b290f91b..dade44d145 100644 --- a/tests/components/esp8266_pwm/test.esp8266.yaml +++ b/tests/components/esp8266_pwm/test.esp8266.yaml @@ -1,8 +1 @@ -output: - - platform: esp8266_pwm - id: out - pin: 4 - frequency: 50Hz - - platform: esp8266_pwm - id: out2 - pin: 5 +<<: !include common.yaml diff --git a/tests/components/ethernet/common.yaml b/tests/components/ethernet/common.yaml new file mode 100644 index 0000000000..b9ed9cb036 --- /dev/null +++ b/tests/components/ethernet/common.yaml @@ -0,0 +1,12 @@ +ethernet: + type: LAN8720 + mdc_pin: 23 + mdio_pin: 25 + clk_mode: GPIO0_IN + phy_addr: 0 + power_pin: 26 + manual_ip: + static_ip: 192.168.178.56 + gateway: 192.168.178.1 + subnet: 255.255.255.0 + domain: .local diff --git a/tests/components/ethernet/test.esp32-idf.yaml b/tests/components/ethernet/test.esp32-idf.yaml index b9ed9cb036..dade44d145 100644 --- a/tests/components/ethernet/test.esp32-idf.yaml +++ b/tests/components/ethernet/test.esp32-idf.yaml @@ -1,12 +1 @@ -ethernet: - type: LAN8720 - mdc_pin: 23 - mdio_pin: 25 - clk_mode: GPIO0_IN - phy_addr: 0 - power_pin: 26 - manual_ip: - static_ip: 192.168.178.56 - gateway: 192.168.178.1 - subnet: 255.255.255.0 - domain: .local +<<: !include common.yaml diff --git a/tests/components/ethernet/test.esp32.yaml b/tests/components/ethernet/test.esp32.yaml index b9ed9cb036..dade44d145 100644 --- a/tests/components/ethernet/test.esp32.yaml +++ b/tests/components/ethernet/test.esp32.yaml @@ -1,12 +1 @@ -ethernet: - type: LAN8720 - mdc_pin: 23 - mdio_pin: 25 - clk_mode: GPIO0_IN - phy_addr: 0 - power_pin: 26 - manual_ip: - static_ip: 192.168.178.56 - gateway: 192.168.178.1 - subnet: 255.255.255.0 - domain: .local +<<: !include common.yaml diff --git a/tests/components/ethernet_info/common.yaml b/tests/components/ethernet_info/common.yaml new file mode 100644 index 0000000000..dade4d7ca5 --- /dev/null +++ b/tests/components/ethernet_info/common.yaml @@ -0,0 +1,19 @@ +ethernet: + type: LAN8720 + mdc_pin: 23 + mdio_pin: 25 + clk_mode: GPIO0_IN + phy_addr: 0 + power_pin: 26 + manual_ip: + static_ip: 192.168.178.56 + gateway: 192.168.178.1 + subnet: 255.255.255.0 + domain: .local + +text_sensor: + - platform: ethernet_info + ip_address: + name: IP Address + dns_address: + name: DNS Address diff --git a/tests/components/ethernet_info/test.esp32-idf.yaml b/tests/components/ethernet_info/test.esp32-idf.yaml index dade4d7ca5..dade44d145 100644 --- a/tests/components/ethernet_info/test.esp32-idf.yaml +++ b/tests/components/ethernet_info/test.esp32-idf.yaml @@ -1,19 +1 @@ -ethernet: - type: LAN8720 - mdc_pin: 23 - mdio_pin: 25 - clk_mode: GPIO0_IN - phy_addr: 0 - power_pin: 26 - manual_ip: - static_ip: 192.168.178.56 - gateway: 192.168.178.1 - subnet: 255.255.255.0 - domain: .local - -text_sensor: - - platform: ethernet_info - ip_address: - name: IP Address - dns_address: - name: DNS Address +<<: !include common.yaml diff --git a/tests/components/ethernet_info/test.esp32.yaml b/tests/components/ethernet_info/test.esp32.yaml index dade4d7ca5..dade44d145 100644 --- a/tests/components/ethernet_info/test.esp32.yaml +++ b/tests/components/ethernet_info/test.esp32.yaml @@ -1,19 +1 @@ -ethernet: - type: LAN8720 - mdc_pin: 23 - mdio_pin: 25 - clk_mode: GPIO0_IN - phy_addr: 0 - power_pin: 26 - manual_ip: - static_ip: 192.168.178.56 - gateway: 192.168.178.1 - subnet: 255.255.255.0 - domain: .local - -text_sensor: - - platform: ethernet_info - ip_address: - name: IP Address - dns_address: - name: DNS Address +<<: !include common.yaml diff --git a/tests/components/event/common.yaml b/tests/components/event/common.yaml new file mode 100644 index 0000000000..71cc19a6b0 --- /dev/null +++ b/tests/components/event/common.yaml @@ -0,0 +1,9 @@ +event: + - platform: template + name: Event + id: some_event + event_types: + - template_event_type1 + - template_event_type2 + on_event: + - logger.log: Event fired diff --git a/tests/components/event/test.esp32-c3-idf.yaml b/tests/components/event/test.esp32-c3-idf.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.esp32-c3-idf.yaml +++ b/tests/components/event/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/event/test.esp32-c3.yaml b/tests/components/event/test.esp32-c3.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.esp32-c3.yaml +++ b/tests/components/event/test.esp32-c3.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/event/test.esp32-idf.yaml b/tests/components/event/test.esp32-idf.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.esp32-idf.yaml +++ b/tests/components/event/test.esp32-idf.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/event/test.esp32.yaml b/tests/components/event/test.esp32.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.esp32.yaml +++ b/tests/components/event/test.esp32.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/event/test.esp8266.yaml b/tests/components/event/test.esp8266.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.esp8266.yaml +++ b/tests/components/event/test.esp8266.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/event/test.rp2040.yaml b/tests/components/event/test.rp2040.yaml index 71cc19a6b0..dade44d145 100644 --- a/tests/components/event/test.rp2040.yaml +++ b/tests/components/event/test.rp2040.yaml @@ -1,9 +1 @@ -event: - - platform: template - name: Event - id: some_event - event_types: - - template_event_type1 - - template_event_type2 - on_event: - - logger.log: Event fired +<<: !include common.yaml diff --git a/tests/components/exposure_notifications/common.yaml b/tests/components/exposure_notifications/common.yaml new file mode 100644 index 0000000000..faba5bb2d1 --- /dev/null +++ b/tests/components/exposure_notifications/common.yaml @@ -0,0 +1,9 @@ +esp32_ble_tracker: + +exposure_notifications: + on_exposure_notification: + then: + - lambda: | + ESP_LOGD("main", "Got notification:"); + ESP_LOGD("main", " RPI: %s", format_hex(x.rolling_proximity_identifier).c_str()); + ESP_LOGD("main", " RSSI: %d", x.rssi); diff --git a/tests/components/exposure_notifications/test.esp32-c3-idf.yaml b/tests/components/exposure_notifications/test.esp32-c3-idf.yaml index faba5bb2d1..dade44d145 100644 --- a/tests/components/exposure_notifications/test.esp32-c3-idf.yaml +++ b/tests/components/exposure_notifications/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -exposure_notifications: - on_exposure_notification: - then: - - lambda: | - ESP_LOGD("main", "Got notification:"); - ESP_LOGD("main", " RPI: %s", format_hex(x.rolling_proximity_identifier).c_str()); - ESP_LOGD("main", " RSSI: %d", x.rssi); +<<: !include common.yaml diff --git a/tests/components/exposure_notifications/test.esp32-c3.yaml b/tests/components/exposure_notifications/test.esp32-c3.yaml index faba5bb2d1..dade44d145 100644 --- a/tests/components/exposure_notifications/test.esp32-c3.yaml +++ b/tests/components/exposure_notifications/test.esp32-c3.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -exposure_notifications: - on_exposure_notification: - then: - - lambda: | - ESP_LOGD("main", "Got notification:"); - ESP_LOGD("main", " RPI: %s", format_hex(x.rolling_proximity_identifier).c_str()); - ESP_LOGD("main", " RSSI: %d", x.rssi); +<<: !include common.yaml diff --git a/tests/components/exposure_notifications/test.esp32-idf.yaml b/tests/components/exposure_notifications/test.esp32-idf.yaml index faba5bb2d1..dade44d145 100644 --- a/tests/components/exposure_notifications/test.esp32-idf.yaml +++ b/tests/components/exposure_notifications/test.esp32-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -exposure_notifications: - on_exposure_notification: - then: - - lambda: | - ESP_LOGD("main", "Got notification:"); - ESP_LOGD("main", " RPI: %s", format_hex(x.rolling_proximity_identifier).c_str()); - ESP_LOGD("main", " RSSI: %d", x.rssi); +<<: !include common.yaml diff --git a/tests/components/exposure_notifications/test.esp32.yaml b/tests/components/exposure_notifications/test.esp32.yaml index faba5bb2d1..dade44d145 100644 --- a/tests/components/exposure_notifications/test.esp32.yaml +++ b/tests/components/exposure_notifications/test.esp32.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -exposure_notifications: - on_exposure_notification: - then: - - lambda: | - ESP_LOGD("main", "Got notification:"); - ESP_LOGD("main", " RPI: %s", format_hex(x.rolling_proximity_identifier).c_str()); - ESP_LOGD("main", " RSSI: %d", x.rssi); +<<: !include common.yaml diff --git a/tests/components/external_components/common.yaml b/tests/components/external_components/common.yaml new file mode 100644 index 0000000000..2b51267ec6 --- /dev/null +++ b/tests/components/external_components/common.yaml @@ -0,0 +1,6 @@ +external_components: + - source: github://esphome/esphome@dev + refresh: 1d + components: [bh1750] + - source: ../../../esphome/components + components: [sntp] diff --git a/tests/components/external_components/test.esp32-c3-idf.yaml b/tests/components/external_components/test.esp32-c3-idf.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.esp32-c3-idf.yaml +++ b/tests/components/external_components/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/external_components/test.esp32-c3.yaml b/tests/components/external_components/test.esp32-c3.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.esp32-c3.yaml +++ b/tests/components/external_components/test.esp32-c3.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/external_components/test.esp32-idf.yaml b/tests/components/external_components/test.esp32-idf.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.esp32-idf.yaml +++ b/tests/components/external_components/test.esp32-idf.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/external_components/test.esp32.yaml b/tests/components/external_components/test.esp32.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.esp32.yaml +++ b/tests/components/external_components/test.esp32.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/external_components/test.esp8266.yaml b/tests/components/external_components/test.esp8266.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.esp8266.yaml +++ b/tests/components/external_components/test.esp8266.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/external_components/test.rp2040.yaml b/tests/components/external_components/test.rp2040.yaml index 2b51267ec6..dade44d145 100644 --- a/tests/components/external_components/test.rp2040.yaml +++ b/tests/components/external_components/test.rp2040.yaml @@ -1,6 +1 @@ -external_components: - - source: github://esphome/esphome@dev - refresh: 1d - components: [bh1750] - - source: ../../../esphome/components - components: [sntp] +<<: !include common.yaml diff --git a/tests/components/factory_reset/common.yaml b/tests/components/factory_reset/common.yaml new file mode 100644 index 0000000000..ad3abd603e --- /dev/null +++ b/tests/components/factory_reset/common.yaml @@ -0,0 +1,3 @@ +button: + - platform: factory_reset + name: Reset to Factory Default Settings diff --git a/tests/components/factory_reset/test.esp32-c3-idf.yaml b/tests/components/factory_reset/test.esp32-c3-idf.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.esp32-c3-idf.yaml +++ b/tests/components/factory_reset/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/factory_reset/test.esp32-c3.yaml b/tests/components/factory_reset/test.esp32-c3.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.esp32-c3.yaml +++ b/tests/components/factory_reset/test.esp32-c3.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/factory_reset/test.esp32-idf.yaml b/tests/components/factory_reset/test.esp32-idf.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.esp32-idf.yaml +++ b/tests/components/factory_reset/test.esp32-idf.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/factory_reset/test.esp32.yaml b/tests/components/factory_reset/test.esp32.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.esp32.yaml +++ b/tests/components/factory_reset/test.esp32.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/factory_reset/test.esp8266.yaml b/tests/components/factory_reset/test.esp8266.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.esp8266.yaml +++ b/tests/components/factory_reset/test.esp8266.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/factory_reset/test.rp2040.yaml b/tests/components/factory_reset/test.rp2040.yaml index ad3abd603e..dade44d145 100644 --- a/tests/components/factory_reset/test.rp2040.yaml +++ b/tests/components/factory_reset/test.rp2040.yaml @@ -1,3 +1 @@ -button: - - platform: factory_reset - name: Reset to Factory Default Settings +<<: !include common.yaml diff --git a/tests/components/fastled_clockless/common.yaml b/tests/components/fastled_clockless/common.yaml new file mode 100644 index 0000000000..8b1447a17a --- /dev/null +++ b/tests/components/fastled_clockless/common.yaml @@ -0,0 +1,71 @@ +light: + - platform: fastled_clockless + id: addr1 + chipset: WS2811 + pin: 13 + num_leds: 100 + rgb_order: BRG + max_refresh_rate: 20ms + color_correct: [75%, 100%, 50%] + name: FastLED WS2811 Light + effects: + - addressable_color_wipe: + - addressable_color_wipe: + name: Color Wipe Effect With Custom Values + colors: + - red: 100% + green: 100% + blue: 100% + num_leds: 1 + - red: 0% + green: 0% + blue: 0% + num_leds: 1 + add_led_interval: 100ms + reverse: false + - addressable_scan: + - addressable_scan: + name: Scan Effect With Custom Values + move_interval: 100ms + - addressable_twinkle: + - addressable_twinkle: + name: Twinkle Effect With Custom Values + twinkle_probability: 5% + progress_interval: 4ms + - addressable_random_twinkle: + - addressable_random_twinkle: + name: Random Twinkle Effect With Custom Values + twinkle_probability: 5% + progress_interval: 32ms + - addressable_fireworks: + - addressable_fireworks: + name: Fireworks Effect With Custom Values + update_interval: 32ms + spark_probability: 10% + use_random_color: false + fade_out_rate: 120 + - addressable_flicker: + - addressable_flicker: + name: Flicker Effect With Custom Values + update_interval: 16ms + intensity: 5% + - addressable_lambda: + name: Test For Custom Lambda Effect + lambda: |- + if (initial_run) { + it[0] = current_color; + } + - automation: + name: Custom Effect + sequence: + - light.addressable_set: + id: addr1 + red: 100% + green: 100% + blue: 0% + - delay: 100ms + - light.addressable_set: + id: addr1 + red: 0% + green: 100% + blue: 0% diff --git a/tests/components/fastled_clockless/test.esp32.yaml b/tests/components/fastled_clockless/test.esp32.yaml index 8b1447a17a..dade44d145 100644 --- a/tests/components/fastled_clockless/test.esp32.yaml +++ b/tests/components/fastled_clockless/test.esp32.yaml @@ -1,71 +1 @@ -light: - - platform: fastled_clockless - id: addr1 - chipset: WS2811 - pin: 13 - num_leds: 100 - rgb_order: BRG - max_refresh_rate: 20ms - color_correct: [75%, 100%, 50%] - name: FastLED WS2811 Light - effects: - - addressable_color_wipe: - - addressable_color_wipe: - name: Color Wipe Effect With Custom Values - colors: - - red: 100% - green: 100% - blue: 100% - num_leds: 1 - - red: 0% - green: 0% - blue: 0% - num_leds: 1 - add_led_interval: 100ms - reverse: false - - addressable_scan: - - addressable_scan: - name: Scan Effect With Custom Values - move_interval: 100ms - - addressable_twinkle: - - addressable_twinkle: - name: Twinkle Effect With Custom Values - twinkle_probability: 5% - progress_interval: 4ms - - addressable_random_twinkle: - - addressable_random_twinkle: - name: Random Twinkle Effect With Custom Values - twinkle_probability: 5% - progress_interval: 32ms - - addressable_fireworks: - - addressable_fireworks: - name: Fireworks Effect With Custom Values - update_interval: 32ms - spark_probability: 10% - use_random_color: false - fade_out_rate: 120 - - addressable_flicker: - - addressable_flicker: - name: Flicker Effect With Custom Values - update_interval: 16ms - intensity: 5% - - addressable_lambda: - name: Test For Custom Lambda Effect - lambda: |- - if (initial_run) { - it[0] = current_color; - } - - automation: - name: Custom Effect - sequence: - - light.addressable_set: - id: addr1 - red: 100% - green: 100% - blue: 0% - - delay: 100ms - - light.addressable_set: - id: addr1 - red: 0% - green: 100% - blue: 0% +<<: !include common.yaml diff --git a/tests/components/fastled_spi/common.yaml b/tests/components/fastled_spi/common.yaml new file mode 100644 index 0000000000..f6f7c5553b --- /dev/null +++ b/tests/components/fastled_spi/common.yaml @@ -0,0 +1,71 @@ +light: + - platform: fastled_spi + id: addr1 + chipset: WS2801 + clock_pin: 22 + data_pin: 23 + data_rate: 2MHz + num_leds: 60 + rgb_order: BRG + name: FastLED SPI Light + effects: + - addressable_color_wipe: + - addressable_color_wipe: + name: Color Wipe Effect With Custom Values + colors: + - red: 100% + green: 100% + blue: 100% + num_leds: 1 + - red: 0% + green: 0% + blue: 0% + num_leds: 1 + add_led_interval: 100ms + reverse: false + - addressable_scan: + - addressable_scan: + name: Scan Effect With Custom Values + move_interval: 100ms + - addressable_twinkle: + - addressable_twinkle: + name: Twinkle Effect With Custom Values + twinkle_probability: 5% + progress_interval: 4ms + - addressable_random_twinkle: + - addressable_random_twinkle: + name: Random Twinkle Effect With Custom Values + twinkle_probability: 5% + progress_interval: 32ms + - addressable_fireworks: + - addressable_fireworks: + name: Fireworks Effect With Custom Values + update_interval: 32ms + spark_probability: 10% + use_random_color: false + fade_out_rate: 120 + - addressable_flicker: + - addressable_flicker: + name: Flicker Effect With Custom Values + update_interval: 16ms + intensity: 5% + - addressable_lambda: + name: Test For Custom Lambda Effect + lambda: |- + if (initial_run) { + it[0] = current_color; + } + - automation: + name: Custom Effect + sequence: + - light.addressable_set: + id: addr1 + red: 100% + green: 100% + blue: 0% + - delay: 100ms + - light.addressable_set: + id: addr1 + red: 0% + green: 100% + blue: 0% diff --git a/tests/components/fastled_spi/test.esp32.yaml b/tests/components/fastled_spi/test.esp32.yaml index f6f7c5553b..dade44d145 100644 --- a/tests/components/fastled_spi/test.esp32.yaml +++ b/tests/components/fastled_spi/test.esp32.yaml @@ -1,71 +1 @@ -light: - - platform: fastled_spi - id: addr1 - chipset: WS2801 - clock_pin: 22 - data_pin: 23 - data_rate: 2MHz - num_leds: 60 - rgb_order: BRG - name: FastLED SPI Light - effects: - - addressable_color_wipe: - - addressable_color_wipe: - name: Color Wipe Effect With Custom Values - colors: - - red: 100% - green: 100% - blue: 100% - num_leds: 1 - - red: 0% - green: 0% - blue: 0% - num_leds: 1 - add_led_interval: 100ms - reverse: false - - addressable_scan: - - addressable_scan: - name: Scan Effect With Custom Values - move_interval: 100ms - - addressable_twinkle: - - addressable_twinkle: - name: Twinkle Effect With Custom Values - twinkle_probability: 5% - progress_interval: 4ms - - addressable_random_twinkle: - - addressable_random_twinkle: - name: Random Twinkle Effect With Custom Values - twinkle_probability: 5% - progress_interval: 32ms - - addressable_fireworks: - - addressable_fireworks: - name: Fireworks Effect With Custom Values - update_interval: 32ms - spark_probability: 10% - use_random_color: false - fade_out_rate: 120 - - addressable_flicker: - - addressable_flicker: - name: Flicker Effect With Custom Values - update_interval: 16ms - intensity: 5% - - addressable_lambda: - name: Test For Custom Lambda Effect - lambda: |- - if (initial_run) { - it[0] = current_color; - } - - automation: - name: Custom Effect - sequence: - - light.addressable_set: - id: addr1 - red: 100% - green: 100% - blue: 0% - - delay: 100ms - - light.addressable_set: - id: addr1 - red: 0% - green: 100% - blue: 0% +<<: !include common.yaml diff --git a/tests/components/feedback/common.yaml b/tests/components/feedback/common.yaml new file mode 100644 index 0000000000..f93d54e8b6 --- /dev/null +++ b/tests/components/feedback/common.yaml @@ -0,0 +1,39 @@ +binary_sensor: + - platform: template + id: open_endstop_sensor + - platform: template + id: open_sensor + - platform: template + id: open_obstacle_sensor + - platform: template + id: close_endstop_sensor + - platform: template + id: close_sensor + - platform: template + id: close_obstacle_sensor + +cover: + - platform: feedback + name: Feedback Cover + id: gate + device_class: gate + infer_endstop_from_movement: false + has_built_in_endstop: false + max_duration: 30s + direction_change_wait_time: 300ms + acceleration_wait_time: 150ms + obstacle_rollback: 10% + open_duration: 22.1s + open_endstop: open_endstop_sensor + open_sensor: open_sensor + open_obstacle_sensor: open_obstacle_sensor + close_duration: 22.4s + close_endstop: close_endstop_sensor + close_sensor: close_sensor + close_obstacle_sensor: close_obstacle_sensor + open_action: + - logger.log: Open Action + close_action: + - logger.log: Close Action + stop_action: + - logger.log: Stop Action diff --git a/tests/components/feedback/test.esp32-c3-idf.yaml b/tests/components/feedback/test.esp32-c3-idf.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.esp32-c3-idf.yaml +++ b/tests/components/feedback/test.esp32-c3-idf.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/feedback/test.esp32-c3.yaml b/tests/components/feedback/test.esp32-c3.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.esp32-c3.yaml +++ b/tests/components/feedback/test.esp32-c3.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/feedback/test.esp32-idf.yaml b/tests/components/feedback/test.esp32-idf.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.esp32-idf.yaml +++ b/tests/components/feedback/test.esp32-idf.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/feedback/test.esp32.yaml b/tests/components/feedback/test.esp32.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.esp32.yaml +++ b/tests/components/feedback/test.esp32.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/feedback/test.esp8266.yaml b/tests/components/feedback/test.esp8266.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.esp8266.yaml +++ b/tests/components/feedback/test.esp8266.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/feedback/test.rp2040.yaml b/tests/components/feedback/test.rp2040.yaml index f93d54e8b6..dade44d145 100644 --- a/tests/components/feedback/test.rp2040.yaml +++ b/tests/components/feedback/test.rp2040.yaml @@ -1,39 +1 @@ -binary_sensor: - - platform: template - id: open_endstop_sensor - - platform: template - id: open_sensor - - platform: template - id: open_obstacle_sensor - - platform: template - id: close_endstop_sensor - - platform: template - id: close_sensor - - platform: template - id: close_obstacle_sensor - -cover: - - platform: feedback - name: Feedback Cover - id: gate - device_class: gate - infer_endstop_from_movement: false - has_built_in_endstop: false - max_duration: 30s - direction_change_wait_time: 300ms - acceleration_wait_time: 150ms - obstacle_rollback: 10% - open_duration: 22.1s - open_endstop: open_endstop_sensor - open_sensor: open_sensor - open_obstacle_sensor: open_obstacle_sensor - close_duration: 22.4s - close_endstop: close_endstop_sensor - close_sensor: close_sensor - close_obstacle_sensor: close_obstacle_sensor - open_action: - - logger.log: Open Action - close_action: - - logger.log: Close Action - stop_action: - - logger.log: Stop Action +<<: !include common.yaml diff --git a/tests/components/globals/common.yaml b/tests/components/globals/common.yaml new file mode 100644 index 0000000000..224a91a270 --- /dev/null +++ b/tests/components/globals/common.yaml @@ -0,0 +1,28 @@ +esphome: + on_boot: + then: + - globals.set: + id: glob_int + value: "10" + +globals: + - id: glob_int + type: int + restore_value: true + initial_value: "0" + - id: glob_float + type: float + restore_value: true + initial_value: "0.0f" + - id: glob_bool + type: bool + restore_value: false + initial_value: "true" + - id: glob_string + type: std::string + restore_value: false + # initial_value: "" + - id: glob_bool_processed + type: bool + restore_value: false + initial_value: "false" diff --git a/tests/components/globals/test.esp32-c3-idf.yaml b/tests/components/globals/test.esp32-c3-idf.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.esp32-c3-idf.yaml +++ b/tests/components/globals/test.esp32-c3-idf.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/globals/test.esp32-c3.yaml b/tests/components/globals/test.esp32-c3.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.esp32-c3.yaml +++ b/tests/components/globals/test.esp32-c3.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/globals/test.esp32-idf.yaml b/tests/components/globals/test.esp32-idf.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.esp32-idf.yaml +++ b/tests/components/globals/test.esp32-idf.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/globals/test.esp32.yaml b/tests/components/globals/test.esp32.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.esp32.yaml +++ b/tests/components/globals/test.esp32.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/globals/test.esp8266.yaml b/tests/components/globals/test.esp8266.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.esp8266.yaml +++ b/tests/components/globals/test.esp8266.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/globals/test.rp2040.yaml b/tests/components/globals/test.rp2040.yaml index 224a91a270..dade44d145 100644 --- a/tests/components/globals/test.rp2040.yaml +++ b/tests/components/globals/test.rp2040.yaml @@ -1,28 +1 @@ -esphome: - on_boot: - then: - - globals.set: - id: glob_int - value: "10" - -globals: - - id: glob_int - type: int - restore_value: true - initial_value: "0" - - id: glob_float - type: float - restore_value: true - initial_value: "0.0f" - - id: glob_bool - type: bool - restore_value: false - initial_value: "true" - - id: glob_string - type: std::string - restore_value: false - # initial_value: "" - - id: glob_bool_processed - type: bool - restore_value: false - initial_value: "false" +<<: !include common.yaml diff --git a/tests/components/host/common.yaml b/tests/components/host/common.yaml new file mode 100644 index 0000000000..3d14c190a6 --- /dev/null +++ b/tests/components/host/common.yaml @@ -0,0 +1,15 @@ +time: + - platform: sntp + id: esptime + timezone: Australia/Sydney + +logger: + level: VERBOSE + logs: + lvgl: INFO + display: DEBUG + sensor: INFO + vnc: DEBUG + +host: + mac_address: "62:23:45:AF:B3:DD" diff --git a/tests/components/host/test.host.yaml b/tests/components/host/test.host.yaml index 3d14c190a6..dade44d145 100644 --- a/tests/components/host/test.host.yaml +++ b/tests/components/host/test.host.yaml @@ -1,15 +1 @@ -time: - - platform: sntp - id: esptime - timezone: Australia/Sydney - -logger: - level: VERBOSE - logs: - lvgl: INFO - display: DEBUG - sensor: INFO - vnc: DEBUG - -host: - mac_address: "62:23:45:AF:B3:DD" +<<: !include common.yaml diff --git a/tests/components/improv_serial/common.yaml b/tests/components/improv_serial/common.yaml new file mode 100644 index 0000000000..b36fe5a4a7 --- /dev/null +++ b/tests/components/improv_serial/common.yaml @@ -0,0 +1,5 @@ +wifi: + ssid: MySSID + password: password1 + +improv_serial: diff --git a/tests/components/improv_serial/test.esp32-c3-idf.yaml b/tests/components/improv_serial/test.esp32-c3-idf.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.esp32-c3-idf.yaml +++ b/tests/components/improv_serial/test.esp32-c3-idf.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/improv_serial/test.esp32-c3.yaml b/tests/components/improv_serial/test.esp32-c3.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.esp32-c3.yaml +++ b/tests/components/improv_serial/test.esp32-c3.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/improv_serial/test.esp32-idf.yaml b/tests/components/improv_serial/test.esp32-idf.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.esp32-idf.yaml +++ b/tests/components/improv_serial/test.esp32-idf.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/improv_serial/test.esp32.yaml b/tests/components/improv_serial/test.esp32.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.esp32.yaml +++ b/tests/components/improv_serial/test.esp32.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/improv_serial/test.esp8266.yaml b/tests/components/improv_serial/test.esp8266.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.esp8266.yaml +++ b/tests/components/improv_serial/test.esp8266.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/improv_serial/test.rp2040.yaml b/tests/components/improv_serial/test.rp2040.yaml index b36fe5a4a7..dade44d145 100644 --- a/tests/components/improv_serial/test.rp2040.yaml +++ b/tests/components/improv_serial/test.rp2040.yaml @@ -1,5 +1 @@ -wifi: - ssid: MySSID - password: password1 - -improv_serial: +<<: !include common.yaml diff --git a/tests/components/inkbird_ibsth1_mini/common.yaml b/tests/components/inkbird_ibsth1_mini/common.yaml new file mode 100644 index 0000000000..ba46b7dbf6 --- /dev/null +++ b/tests/components/inkbird_ibsth1_mini/common.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: inkbird_ibsth1_mini + mac_address: 38:81:D7:0A:9C:11 + temperature: + name: Inkbird IBS-TH1 Temperature + humidity: + name: Inkbird IBS-TH1 Humidity + battery_level: + name: Inkbird IBS-TH1 Battery Level diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml index ba46b7dbf6..dade44d145 100644 --- a/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: inkbird_ibsth1_mini - mac_address: 38:81:D7:0A:9C:11 - temperature: - name: Inkbird IBS-TH1 Temperature - humidity: - name: Inkbird IBS-TH1 Humidity - battery_level: - name: Inkbird IBS-TH1 Battery Level +<<: !include common.yaml diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml index ba46b7dbf6..dade44d145 100644 --- a/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-c3.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: inkbird_ibsth1_mini - mac_address: 38:81:D7:0A:9C:11 - temperature: - name: Inkbird IBS-TH1 Temperature - humidity: - name: Inkbird IBS-TH1 Humidity - battery_level: - name: Inkbird IBS-TH1 Battery Level +<<: !include common.yaml diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml index ba46b7dbf6..dade44d145 100644 --- a/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml +++ b/tests/components/inkbird_ibsth1_mini/test.esp32-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: inkbird_ibsth1_mini - mac_address: 38:81:D7:0A:9C:11 - temperature: - name: Inkbird IBS-TH1 Temperature - humidity: - name: Inkbird IBS-TH1 Humidity - battery_level: - name: Inkbird IBS-TH1 Battery Level +<<: !include common.yaml diff --git a/tests/components/inkbird_ibsth1_mini/test.esp32.yaml b/tests/components/inkbird_ibsth1_mini/test.esp32.yaml index ba46b7dbf6..dade44d145 100644 --- a/tests/components/inkbird_ibsth1_mini/test.esp32.yaml +++ b/tests/components/inkbird_ibsth1_mini/test.esp32.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: inkbird_ibsth1_mini - mac_address: 38:81:D7:0A:9C:11 - temperature: - name: Inkbird IBS-TH1 Temperature - humidity: - name: Inkbird IBS-TH1 Humidity - battery_level: - name: Inkbird IBS-TH1 Battery Level +<<: !include common.yaml diff --git a/tests/components/inkplate6/common.yaml b/tests/components/inkplate6/common.yaml new file mode 100644 index 0000000000..31b14e6c73 --- /dev/null +++ b/tests/components/inkplate6/common.yaml @@ -0,0 +1,62 @@ +i2c: + - id: i2c_inkplate6 + scl: 16 + sda: 17 + +display: + - platform: inkplate6 + id: inkplate_display + greyscale: false + partial_updating: false + update_interval: 60s + display_data_0_pin: + number: 1 + allow_other_uses: true + display_data_1_pin: + number: 1 + allow_other_uses: true + display_data_2_pin: + number: 1 + allow_other_uses: true + display_data_3_pin: + number: 1 + allow_other_uses: true + display_data_5_pin: + number: 1 + allow_other_uses: true + display_data_4_pin: + number: 1 + allow_other_uses: true + display_data_6_pin: + number: 1 + allow_other_uses: true + display_data_7_pin: + number: 1 + allow_other_uses: true + ckv_pin: + number: 1 + allow_other_uses: true + sph_pin: + number: 1 + allow_other_uses: true + gmod_pin: + number: 1 + allow_other_uses: true + gpio0_enable_pin: + number: 1 + allow_other_uses: true + oe_pin: + number: 1 + allow_other_uses: true + spv_pin: + number: 1 + allow_other_uses: true + powerup_pin: + number: 1 + allow_other_uses: true + wakeup_pin: + number: 1 + allow_other_uses: true + vcom_pin: + number: 1 + allow_other_uses: true diff --git a/tests/components/inkplate6/test.esp32.yaml b/tests/components/inkplate6/test.esp32.yaml index 31b14e6c73..dade44d145 100644 --- a/tests/components/inkplate6/test.esp32.yaml +++ b/tests/components/inkplate6/test.esp32.yaml @@ -1,62 +1 @@ -i2c: - - id: i2c_inkplate6 - scl: 16 - sda: 17 - -display: - - platform: inkplate6 - id: inkplate_display - greyscale: false - partial_updating: false - update_interval: 60s - display_data_0_pin: - number: 1 - allow_other_uses: true - display_data_1_pin: - number: 1 - allow_other_uses: true - display_data_2_pin: - number: 1 - allow_other_uses: true - display_data_3_pin: - number: 1 - allow_other_uses: true - display_data_5_pin: - number: 1 - allow_other_uses: true - display_data_4_pin: - number: 1 - allow_other_uses: true - display_data_6_pin: - number: 1 - allow_other_uses: true - display_data_7_pin: - number: 1 - allow_other_uses: true - ckv_pin: - number: 1 - allow_other_uses: true - sph_pin: - number: 1 - allow_other_uses: true - gmod_pin: - number: 1 - allow_other_uses: true - gpio0_enable_pin: - number: 1 - allow_other_uses: true - oe_pin: - number: 1 - allow_other_uses: true - spv_pin: - number: 1 - allow_other_uses: true - powerup_pin: - number: 1 - allow_other_uses: true - wakeup_pin: - number: 1 - allow_other_uses: true - vcom_pin: - number: 1 - allow_other_uses: true +<<: !include common.yaml diff --git a/tests/components/interval/common.yaml b/tests/components/interval/common.yaml new file mode 100644 index 0000000000..2a3c979ae2 --- /dev/null +++ b/tests/components/interval/common.yaml @@ -0,0 +1,4 @@ +interval: + - interval: 1s + then: + - logger.log: Tick diff --git a/tests/components/interval/test.esp32-c3-idf.yaml b/tests/components/interval/test.esp32-c3-idf.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.esp32-c3-idf.yaml +++ b/tests/components/interval/test.esp32-c3-idf.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/interval/test.esp32-c3.yaml b/tests/components/interval/test.esp32-c3.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.esp32-c3.yaml +++ b/tests/components/interval/test.esp32-c3.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/interval/test.esp32-idf.yaml b/tests/components/interval/test.esp32-idf.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.esp32-idf.yaml +++ b/tests/components/interval/test.esp32-idf.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/interval/test.esp32.yaml b/tests/components/interval/test.esp32.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.esp32.yaml +++ b/tests/components/interval/test.esp32.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/interval/test.esp8266.yaml b/tests/components/interval/test.esp8266.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.esp8266.yaml +++ b/tests/components/interval/test.esp8266.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/interval/test.rp2040.yaml b/tests/components/interval/test.rp2040.yaml index 2a3c979ae2..dade44d145 100644 --- a/tests/components/interval/test.rp2040.yaml +++ b/tests/components/interval/test.rp2040.yaml @@ -1,4 +1 @@ -interval: - - interval: 1s - then: - - logger.log: Tick +<<: !include common.yaml diff --git a/tests/components/ledc/common.yaml b/tests/components/ledc/common.yaml new file mode 100644 index 0000000000..70352b4519 --- /dev/null +++ b/tests/components/ledc/common.yaml @@ -0,0 +1,11 @@ +esphome: + on_boot: + then: + - output.ledc.set_frequency: + id: test_ledc + frequency: 100Hz + +output: + - platform: ledc + id: test_ledc + pin: 4 diff --git a/tests/components/ledc/test.esp32-c3-idf.yaml b/tests/components/ledc/test.esp32-c3-idf.yaml index 70352b4519..dade44d145 100644 --- a/tests/components/ledc/test.esp32-c3-idf.yaml +++ b/tests/components/ledc/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esphome: - on_boot: - then: - - output.ledc.set_frequency: - id: test_ledc - frequency: 100Hz - -output: - - platform: ledc - id: test_ledc - pin: 4 +<<: !include common.yaml diff --git a/tests/components/ledc/test.esp32-c3.yaml b/tests/components/ledc/test.esp32-c3.yaml index 70352b4519..dade44d145 100644 --- a/tests/components/ledc/test.esp32-c3.yaml +++ b/tests/components/ledc/test.esp32-c3.yaml @@ -1,11 +1 @@ -esphome: - on_boot: - then: - - output.ledc.set_frequency: - id: test_ledc - frequency: 100Hz - -output: - - platform: ledc - id: test_ledc - pin: 4 +<<: !include common.yaml diff --git a/tests/components/ledc/test.esp32-idf.yaml b/tests/components/ledc/test.esp32-idf.yaml index 70352b4519..dade44d145 100644 --- a/tests/components/ledc/test.esp32-idf.yaml +++ b/tests/components/ledc/test.esp32-idf.yaml @@ -1,11 +1 @@ -esphome: - on_boot: - then: - - output.ledc.set_frequency: - id: test_ledc - frequency: 100Hz - -output: - - platform: ledc - id: test_ledc - pin: 4 +<<: !include common.yaml diff --git a/tests/components/ledc/test.esp32.yaml b/tests/components/ledc/test.esp32.yaml index 70352b4519..dade44d145 100644 --- a/tests/components/ledc/test.esp32.yaml +++ b/tests/components/ledc/test.esp32.yaml @@ -1,11 +1 @@ -esphome: - on_boot: - then: - - output.ledc.set_frequency: - id: test_ledc - frequency: 100Hz - -output: - - platform: ledc - id: test_ledc - pin: 4 +<<: !include common.yaml diff --git a/tests/components/lightwaverf/common.yaml b/tests/components/lightwaverf/common.yaml new file mode 100644 index 0000000000..7ed8000271 --- /dev/null +++ b/tests/components/lightwaverf/common.yaml @@ -0,0 +1,13 @@ +lightwaverf: + read_pin: 5 + write_pin: 4 + +button: + - platform: template + name: "Turn off sofa" + id: light_off_ceiling_sofa + on_press: + lightwaverf.send_raw: + code: [0x04, 0x00, 0x00, 0x00, 0x0f, 0x03, 0x0d, 0x09, 0x08, 0x08] + name: "Sofa" + repeat: 1 diff --git a/tests/components/lightwaverf/test.esp8266.yaml b/tests/components/lightwaverf/test.esp8266.yaml index 7ed8000271..dade44d145 100644 --- a/tests/components/lightwaverf/test.esp8266.yaml +++ b/tests/components/lightwaverf/test.esp8266.yaml @@ -1,13 +1 @@ -lightwaverf: - read_pin: 5 - write_pin: 4 - -button: - - platform: template - name: "Turn off sofa" - id: light_off_ceiling_sofa - on_press: - lightwaverf.send_raw: - code: [0x04, 0x00, 0x00, 0x00, 0x0f, 0x03, 0x0d, 0x09, 0x08, 0x08] - name: "Sofa" - repeat: 1 +<<: !include common.yaml diff --git a/tests/components/lock/common.yaml b/tests/components/lock/common.yaml new file mode 100644 index 0000000000..82297a3da4 --- /dev/null +++ b/tests/components/lock/common.yaml @@ -0,0 +1,36 @@ +esphome: + on_boot: + then: + - lock.lock: test_lock1 + - lock.unlock: test_lock1 + - lock.open: test_lock1 + +output: + - platform: gpio + id: test_binary + pin: 4 + +lock: + - platform: template + id: test_lock1 + name: Template Lock + lambda: |- + if (millis() > 10000) { + return LOCK_STATE_LOCKED; + } else { + return LOCK_STATE_UNLOCKED; + } + optimistic: true + assumed_state: false + on_unlock: + - lock.template.publish: + id: test_lock1 + state: !lambda "return LOCK_STATE_UNLOCKED;" + on_lock: + - lock.template.publish: + id: test_lock1 + state: !lambda "return LOCK_STATE_LOCKED;" + - platform: output + name: Generic Output Lock + id: test_lock2 + output: test_binary diff --git a/tests/components/lock/test.esp32-c3-idf.yaml b/tests/components/lock/test.esp32-c3-idf.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.esp32-c3-idf.yaml +++ b/tests/components/lock/test.esp32-c3-idf.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/lock/test.esp32-c3.yaml b/tests/components/lock/test.esp32-c3.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.esp32-c3.yaml +++ b/tests/components/lock/test.esp32-c3.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/lock/test.esp32-idf.yaml b/tests/components/lock/test.esp32-idf.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.esp32-idf.yaml +++ b/tests/components/lock/test.esp32-idf.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/lock/test.esp32.yaml b/tests/components/lock/test.esp32.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.esp32.yaml +++ b/tests/components/lock/test.esp32.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/lock/test.esp8266.yaml b/tests/components/lock/test.esp8266.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.esp8266.yaml +++ b/tests/components/lock/test.esp8266.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/lock/test.rp2040.yaml b/tests/components/lock/test.rp2040.yaml index 82297a3da4..dade44d145 100644 --- a/tests/components/lock/test.rp2040.yaml +++ b/tests/components/lock/test.rp2040.yaml @@ -1,36 +1 @@ -esphome: - on_boot: - then: - - lock.lock: test_lock1 - - lock.unlock: test_lock1 - - lock.open: test_lock1 - -output: - - platform: gpio - id: test_binary - pin: 4 - -lock: - - platform: template - id: test_lock1 - name: Template Lock - lambda: |- - if (millis() > 10000) { - return LOCK_STATE_LOCKED; - } else { - return LOCK_STATE_UNLOCKED; - } - optimistic: true - assumed_state: false - on_unlock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_UNLOCKED;" - on_lock: - - lock.template.publish: - id: test_lock1 - state: !lambda "return LOCK_STATE_LOCKED;" - - platform: output - name: Generic Output Lock - id: test_lock2 - output: test_binary +<<: !include common.yaml diff --git a/tests/components/logger/common.yaml b/tests/components/logger/common.yaml new file mode 100644 index 0000000000..70b485daac --- /dev/null +++ b/tests/components/logger/common.yaml @@ -0,0 +1,7 @@ +esphome: + on_boot: + then: + - logger.log: Hello world + +logger: + level: DEBUG diff --git a/tests/components/logger/test.esp32-c3-idf.yaml b/tests/components/logger/test.esp32-c3-idf.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.esp32-c3-idf.yaml +++ b/tests/components/logger/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/logger/test.esp32-c3.yaml b/tests/components/logger/test.esp32-c3.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.esp32-c3.yaml +++ b/tests/components/logger/test.esp32-c3.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/logger/test.esp32-idf.yaml b/tests/components/logger/test.esp32-idf.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.esp32-idf.yaml +++ b/tests/components/logger/test.esp32-idf.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/logger/test.esp32.yaml b/tests/components/logger/test.esp32.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.esp32.yaml +++ b/tests/components/logger/test.esp32.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/logger/test.esp8266.yaml b/tests/components/logger/test.esp8266.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.esp8266.yaml +++ b/tests/components/logger/test.esp8266.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/logger/test.rp2040.yaml b/tests/components/logger/test.rp2040.yaml index 70b485daac..dade44d145 100644 --- a/tests/components/logger/test.rp2040.yaml +++ b/tests/components/logger/test.rp2040.yaml @@ -1,7 +1 @@ -esphome: - on_boot: - then: - - logger.log: Hello world - -logger: - level: DEBUG +<<: !include common.yaml diff --git a/tests/components/mdns/common.yaml b/tests/components/mdns/common.yaml new file mode 100644 index 0000000000..bc31e32783 --- /dev/null +++ b/tests/components/mdns/common.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +mdns: + disabled: false diff --git a/tests/components/mdns/test.esp32-c3-idf.yaml b/tests/components/mdns/test.esp32-c3-idf.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.esp32-c3-idf.yaml +++ b/tests/components/mdns/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/mdns/test.esp32-c3.yaml b/tests/components/mdns/test.esp32-c3.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.esp32-c3.yaml +++ b/tests/components/mdns/test.esp32-c3.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/mdns/test.esp32-idf.yaml b/tests/components/mdns/test.esp32-idf.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.esp32-idf.yaml +++ b/tests/components/mdns/test.esp32-idf.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/mdns/test.esp32.yaml b/tests/components/mdns/test.esp32.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.esp32.yaml +++ b/tests/components/mdns/test.esp32.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/mdns/test.esp8266.yaml b/tests/components/mdns/test.esp8266.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.esp8266.yaml +++ b/tests/components/mdns/test.esp8266.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/mdns/test.rp2040.yaml b/tests/components/mdns/test.rp2040.yaml index bc31e32783..dade44d145 100644 --- a/tests/components/mdns/test.rp2040.yaml +++ b/tests/components/mdns/test.rp2040.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -mdns: - disabled: false +<<: !include common.yaml diff --git a/tests/components/media_player/common.yaml b/tests/components/media_player/common.yaml new file mode 100644 index 0000000000..24b85cd474 --- /dev/null +++ b/tests/components/media_player/common.yaml @@ -0,0 +1,32 @@ +wifi: + ssid: MySSID + password: password1 + +i2s_audio: + i2s_lrclk_pin: 13 + i2s_bclk_pin: 14 + i2s_mclk_pin: 15 + +media_player: + - platform: i2s_audio + name: None + dac_type: external + i2s_dout_pin: 18 + mute_pin: 19 + on_state: + - media_player.play: + - media_player.play_media: http://localhost/media.mp3 + - media_player.play_media: !lambda 'return "http://localhost/media.mp3";' + on_idle: + - media_player.pause: + on_play: + - media_player.stop: + on_pause: + - media_player.toggle: + - wait_until: + media_player.is_idle: + - wait_until: + media_player.is_playing: + - media_player.volume_up: + - media_player.volume_down: + - media_player.volume_set: 50% diff --git a/tests/components/media_player/test.esp32.yaml b/tests/components/media_player/test.esp32.yaml index 24b85cd474..dade44d145 100644 --- a/tests/components/media_player/test.esp32.yaml +++ b/tests/components/media_player/test.esp32.yaml @@ -1,32 +1 @@ -wifi: - ssid: MySSID - password: password1 - -i2s_audio: - i2s_lrclk_pin: 13 - i2s_bclk_pin: 14 - i2s_mclk_pin: 15 - -media_player: - - platform: i2s_audio - name: None - dac_type: external - i2s_dout_pin: 18 - mute_pin: 19 - on_state: - - media_player.play: - - media_player.play_media: http://localhost/media.mp3 - - media_player.play_media: !lambda 'return "http://localhost/media.mp3";' - on_idle: - - media_player.pause: - on_play: - - media_player.stop: - on_pause: - - media_player.toggle: - - wait_until: - media_player.is_idle: - - wait_until: - media_player.is_playing: - - media_player.volume_up: - - media_player.volume_down: - - media_player.volume_set: 50% +<<: !include common.yaml diff --git a/tests/components/micro_wake_word/common.yaml b/tests/components/micro_wake_word/common.yaml new file mode 100644 index 0000000000..c0f3593cc6 --- /dev/null +++ b/tests/components/micro_wake_word/common.yaml @@ -0,0 +1,15 @@ +i2s_audio: + i2s_lrclk_pin: GPIO18 + i2s_bclk_pin: GPIO19 + +microphone: + - platform: i2s_audio + id: echo_microphone + i2s_din_pin: GPIO17 + adc_type: external + pdm: true + +micro_wake_word: + model: hey_jarvis + on_wake_word_detected: + - logger.log: "Wake word detected" diff --git a/tests/components/micro_wake_word/test.esp32-s3-idf.yaml b/tests/components/micro_wake_word/test.esp32-s3-idf.yaml index c0f3593cc6..dade44d145 100644 --- a/tests/components/micro_wake_word/test.esp32-s3-idf.yaml +++ b/tests/components/micro_wake_word/test.esp32-s3-idf.yaml @@ -1,15 +1 @@ -i2s_audio: - i2s_lrclk_pin: GPIO18 - i2s_bclk_pin: GPIO19 - -microphone: - - platform: i2s_audio - id: echo_microphone - i2s_din_pin: GPIO17 - adc_type: external - pdm: true - -micro_wake_word: - model: hey_jarvis - on_wake_word_detected: - - logger.log: "Wake word detected" +<<: !include common.yaml diff --git a/tests/components/midea_ir/common.yaml b/tests/components/midea_ir/common.yaml new file mode 100644 index 0000000000..e8d89cecc2 --- /dev/null +++ b/tests/components/midea_ir/common.yaml @@ -0,0 +1,8 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: midea_ir + name: Midea IR + use_fahrenheit: true diff --git a/tests/components/midea_ir/test.esp32-c3-idf.yaml b/tests/components/midea_ir/test.esp32-c3-idf.yaml index e8d89cecc2..dade44d145 100644 --- a/tests/components/midea_ir/test.esp32-c3-idf.yaml +++ b/tests/components/midea_ir/test.esp32-c3-idf.yaml @@ -1,8 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: midea_ir - name: Midea IR - use_fahrenheit: true +<<: !include common.yaml diff --git a/tests/components/midea_ir/test.esp32-c3.yaml b/tests/components/midea_ir/test.esp32-c3.yaml index e8d89cecc2..dade44d145 100644 --- a/tests/components/midea_ir/test.esp32-c3.yaml +++ b/tests/components/midea_ir/test.esp32-c3.yaml @@ -1,8 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: midea_ir - name: Midea IR - use_fahrenheit: true +<<: !include common.yaml diff --git a/tests/components/midea_ir/test.esp32-idf.yaml b/tests/components/midea_ir/test.esp32-idf.yaml index e8d89cecc2..dade44d145 100644 --- a/tests/components/midea_ir/test.esp32-idf.yaml +++ b/tests/components/midea_ir/test.esp32-idf.yaml @@ -1,8 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: midea_ir - name: Midea IR - use_fahrenheit: true +<<: !include common.yaml diff --git a/tests/components/midea_ir/test.esp32.yaml b/tests/components/midea_ir/test.esp32.yaml index e8d89cecc2..dade44d145 100644 --- a/tests/components/midea_ir/test.esp32.yaml +++ b/tests/components/midea_ir/test.esp32.yaml @@ -1,8 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: midea_ir - name: Midea IR - use_fahrenheit: true +<<: !include common.yaml diff --git a/tests/components/midea_ir/test.esp8266.yaml b/tests/components/midea_ir/test.esp8266.yaml index e8d89cecc2..dade44d145 100644 --- a/tests/components/midea_ir/test.esp8266.yaml +++ b/tests/components/midea_ir/test.esp8266.yaml @@ -1,8 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: midea_ir - name: Midea IR - use_fahrenheit: true +<<: !include common.yaml diff --git a/tests/components/mitsubishi/common.yaml b/tests/components/mitsubishi/common.yaml new file mode 100644 index 0000000000..c0fc959c5b --- /dev/null +++ b/tests/components/mitsubishi/common.yaml @@ -0,0 +1,7 @@ +remote_transmitter: + pin: 4 + carrier_duty_percent: 50% + +climate: + - platform: mitsubishi + name: Mitsubishi diff --git a/tests/components/mitsubishi/test.esp32-c3-idf.yaml b/tests/components/mitsubishi/test.esp32-c3-idf.yaml index c0fc959c5b..dade44d145 100644 --- a/tests/components/mitsubishi/test.esp32-c3-idf.yaml +++ b/tests/components/mitsubishi/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: mitsubishi - name: Mitsubishi +<<: !include common.yaml diff --git a/tests/components/mitsubishi/test.esp32-c3.yaml b/tests/components/mitsubishi/test.esp32-c3.yaml index c0fc959c5b..dade44d145 100644 --- a/tests/components/mitsubishi/test.esp32-c3.yaml +++ b/tests/components/mitsubishi/test.esp32-c3.yaml @@ -1,7 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: mitsubishi - name: Mitsubishi +<<: !include common.yaml diff --git a/tests/components/mitsubishi/test.esp32-idf.yaml b/tests/components/mitsubishi/test.esp32-idf.yaml index c0fc959c5b..dade44d145 100644 --- a/tests/components/mitsubishi/test.esp32-idf.yaml +++ b/tests/components/mitsubishi/test.esp32-idf.yaml @@ -1,7 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: mitsubishi - name: Mitsubishi +<<: !include common.yaml diff --git a/tests/components/mitsubishi/test.esp32.yaml b/tests/components/mitsubishi/test.esp32.yaml index c0fc959c5b..dade44d145 100644 --- a/tests/components/mitsubishi/test.esp32.yaml +++ b/tests/components/mitsubishi/test.esp32.yaml @@ -1,7 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: mitsubishi - name: Mitsubishi +<<: !include common.yaml diff --git a/tests/components/mitsubishi/test.esp8266.yaml b/tests/components/mitsubishi/test.esp8266.yaml index c0fc959c5b..dade44d145 100644 --- a/tests/components/mitsubishi/test.esp8266.yaml +++ b/tests/components/mitsubishi/test.esp8266.yaml @@ -1,7 +1 @@ -remote_transmitter: - pin: 4 - carrier_duty_percent: 50% - -climate: - - platform: mitsubishi - name: Mitsubishi +<<: !include common.yaml diff --git a/tests/components/mopeka_ble/common.yaml b/tests/components/mopeka_ble/common.yaml new file mode 100644 index 0000000000..a115404f1c --- /dev/null +++ b/tests/components/mopeka_ble/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +mopeka_ble: diff --git a/tests/components/mopeka_ble/test.esp32-c3-idf.yaml b/tests/components/mopeka_ble/test.esp32-c3-idf.yaml index a115404f1c..dade44d145 100644 --- a/tests/components/mopeka_ble/test.esp32-c3-idf.yaml +++ b/tests/components/mopeka_ble/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -mopeka_ble: +<<: !include common.yaml diff --git a/tests/components/mopeka_ble/test.esp32-c3.yaml b/tests/components/mopeka_ble/test.esp32-c3.yaml index a115404f1c..dade44d145 100644 --- a/tests/components/mopeka_ble/test.esp32-c3.yaml +++ b/tests/components/mopeka_ble/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -mopeka_ble: +<<: !include common.yaml diff --git a/tests/components/mopeka_ble/test.esp32-idf.yaml b/tests/components/mopeka_ble/test.esp32-idf.yaml index a115404f1c..dade44d145 100644 --- a/tests/components/mopeka_ble/test.esp32-idf.yaml +++ b/tests/components/mopeka_ble/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -mopeka_ble: +<<: !include common.yaml diff --git a/tests/components/mopeka_ble/test.esp32.yaml b/tests/components/mopeka_ble/test.esp32.yaml index a115404f1c..dade44d145 100644 --- a/tests/components/mopeka_ble/test.esp32.yaml +++ b/tests/components/mopeka_ble/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -mopeka_ble: +<<: !include common.yaml diff --git a/tests/components/mopeka_pro_check/common.yaml b/tests/components/mopeka_pro_check/common.yaml new file mode 100644 index 0000000000..147cbcb9de --- /dev/null +++ b/tests/components/mopeka_pro_check/common.yaml @@ -0,0 +1,16 @@ +esp32_ble_tracker: + +sensor: + - platform: mopeka_pro_check + mac_address: D3:75:F2:DC:16:91 + tank_type: CUSTOM + custom_distance_full: 40cm + custom_distance_empty: 10mm + temperature: + name: Propane test temp + level: + name: Propane test level + distance: + name: Propane test distance + battery_level: + name: Propane test battery level diff --git a/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml b/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml index 147cbcb9de..dade44d145 100644 --- a/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml +++ b/tests/components/mopeka_pro_check/test.esp32-c3-idf.yaml @@ -1,16 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: mopeka_pro_check - mac_address: D3:75:F2:DC:16:91 - tank_type: CUSTOM - custom_distance_full: 40cm - custom_distance_empty: 10mm - temperature: - name: Propane test temp - level: - name: Propane test level - distance: - name: Propane test distance - battery_level: - name: Propane test battery level +<<: !include common.yaml diff --git a/tests/components/mopeka_pro_check/test.esp32-c3.yaml b/tests/components/mopeka_pro_check/test.esp32-c3.yaml index 147cbcb9de..dade44d145 100644 --- a/tests/components/mopeka_pro_check/test.esp32-c3.yaml +++ b/tests/components/mopeka_pro_check/test.esp32-c3.yaml @@ -1,16 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: mopeka_pro_check - mac_address: D3:75:F2:DC:16:91 - tank_type: CUSTOM - custom_distance_full: 40cm - custom_distance_empty: 10mm - temperature: - name: Propane test temp - level: - name: Propane test level - distance: - name: Propane test distance - battery_level: - name: Propane test battery level +<<: !include common.yaml diff --git a/tests/components/mopeka_pro_check/test.esp32-idf.yaml b/tests/components/mopeka_pro_check/test.esp32-idf.yaml index 147cbcb9de..dade44d145 100644 --- a/tests/components/mopeka_pro_check/test.esp32-idf.yaml +++ b/tests/components/mopeka_pro_check/test.esp32-idf.yaml @@ -1,16 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: mopeka_pro_check - mac_address: D3:75:F2:DC:16:91 - tank_type: CUSTOM - custom_distance_full: 40cm - custom_distance_empty: 10mm - temperature: - name: Propane test temp - level: - name: Propane test level - distance: - name: Propane test distance - battery_level: - name: Propane test battery level +<<: !include common.yaml diff --git a/tests/components/mopeka_pro_check/test.esp32.yaml b/tests/components/mopeka_pro_check/test.esp32.yaml index 147cbcb9de..dade44d145 100644 --- a/tests/components/mopeka_pro_check/test.esp32.yaml +++ b/tests/components/mopeka_pro_check/test.esp32.yaml @@ -1,16 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: mopeka_pro_check - mac_address: D3:75:F2:DC:16:91 - tank_type: CUSTOM - custom_distance_full: 40cm - custom_distance_empty: 10mm - temperature: - name: Propane test temp - level: - name: Propane test level - distance: - name: Propane test distance - battery_level: - name: Propane test battery level +<<: !include common.yaml diff --git a/tests/components/mopeka_std_check/common.yaml b/tests/components/mopeka_std_check/common.yaml new file mode 100644 index 0000000000..383e2e2a19 --- /dev/null +++ b/tests/components/mopeka_std_check/common.yaml @@ -0,0 +1,15 @@ +esp32_ble_tracker: + +sensor: + # Example using 11kg 100% propane tank. + - platform: mopeka_std_check + mac_address: D3:75:F2:DC:16:91 + tank_type: Europe_11kg + temperature: + name: "Propane test temp" + level: + name: "Propane test level" + distance: + name: "Propane test distance" + battery_level: + name: "Propane test battery level" diff --git a/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml index 383e2e2a19..dade44d145 100644 --- a/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml +++ b/tests/components/mopeka_std_check/test.esp32-c3-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - # Example using 11kg 100% propane tank. - - platform: mopeka_std_check - mac_address: D3:75:F2:DC:16:91 - tank_type: Europe_11kg - temperature: - name: "Propane test temp" - level: - name: "Propane test level" - distance: - name: "Propane test distance" - battery_level: - name: "Propane test battery level" +<<: !include common.yaml diff --git a/tests/components/mopeka_std_check/test.esp32-c3.yaml b/tests/components/mopeka_std_check/test.esp32-c3.yaml index 383e2e2a19..dade44d145 100644 --- a/tests/components/mopeka_std_check/test.esp32-c3.yaml +++ b/tests/components/mopeka_std_check/test.esp32-c3.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - # Example using 11kg 100% propane tank. - - platform: mopeka_std_check - mac_address: D3:75:F2:DC:16:91 - tank_type: Europe_11kg - temperature: - name: "Propane test temp" - level: - name: "Propane test level" - distance: - name: "Propane test distance" - battery_level: - name: "Propane test battery level" +<<: !include common.yaml diff --git a/tests/components/mopeka_std_check/test.esp32-idf.yaml b/tests/components/mopeka_std_check/test.esp32-idf.yaml index 383e2e2a19..dade44d145 100644 --- a/tests/components/mopeka_std_check/test.esp32-idf.yaml +++ b/tests/components/mopeka_std_check/test.esp32-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - # Example using 11kg 100% propane tank. - - platform: mopeka_std_check - mac_address: D3:75:F2:DC:16:91 - tank_type: Europe_11kg - temperature: - name: "Propane test temp" - level: - name: "Propane test level" - distance: - name: "Propane test distance" - battery_level: - name: "Propane test battery level" +<<: !include common.yaml diff --git a/tests/components/mopeka_std_check/test.esp32.yaml b/tests/components/mopeka_std_check/test.esp32.yaml index 383e2e2a19..dade44d145 100644 --- a/tests/components/mopeka_std_check/test.esp32.yaml +++ b/tests/components/mopeka_std_check/test.esp32.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - # Example using 11kg 100% propane tank. - - platform: mopeka_std_check - mac_address: D3:75:F2:DC:16:91 - tank_type: Europe_11kg - temperature: - name: "Propane test temp" - level: - name: "Propane test level" - distance: - name: "Propane test distance" - battery_level: - name: "Propane test battery level" +<<: !include common.yaml diff --git a/tests/components/my9231/common.yaml b/tests/components/my9231/common.yaml new file mode 100644 index 0000000000..3f2e81ef98 --- /dev/null +++ b/tests/components/my9231/common.yaml @@ -0,0 +1,26 @@ +my9231: + clock_pin: 5 + data_pin: 4 + num_channels: 6 + num_chips: 2 + bit_depth: 16 + +output: + - platform: my9231 + id: my_0 + channel: 0 + - platform: my9231 + id: my_1 + channel: 1 + - platform: my9231 + id: my_2 + channel: 2 + - platform: my9231 + id: my_3 + channel: 3 + - platform: my9231 + id: my_4 + channel: 4 + - platform: my9231 + id: my_5 + channel: 5 diff --git a/tests/components/my9231/test.esp32-c3-idf.yaml b/tests/components/my9231/test.esp32-c3-idf.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.esp32-c3-idf.yaml +++ b/tests/components/my9231/test.esp32-c3-idf.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/my9231/test.esp32-c3.yaml b/tests/components/my9231/test.esp32-c3.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.esp32-c3.yaml +++ b/tests/components/my9231/test.esp32-c3.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/my9231/test.esp32-idf.yaml b/tests/components/my9231/test.esp32-idf.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.esp32-idf.yaml +++ b/tests/components/my9231/test.esp32-idf.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/my9231/test.esp32.yaml b/tests/components/my9231/test.esp32.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.esp32.yaml +++ b/tests/components/my9231/test.esp32.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/my9231/test.esp8266.yaml b/tests/components/my9231/test.esp8266.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.esp8266.yaml +++ b/tests/components/my9231/test.esp8266.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/my9231/test.rp2040.yaml b/tests/components/my9231/test.rp2040.yaml index 3f2e81ef98..dade44d145 100644 --- a/tests/components/my9231/test.rp2040.yaml +++ b/tests/components/my9231/test.rp2040.yaml @@ -1,26 +1 @@ -my9231: - clock_pin: 5 - data_pin: 4 - num_channels: 6 - num_chips: 2 - bit_depth: 16 - -output: - - platform: my9231 - id: my_0 - channel: 0 - - platform: my9231 - id: my_1 - channel: 1 - - platform: my9231 - id: my_2 - channel: 2 - - platform: my9231 - id: my_3 - channel: 3 - - platform: my9231 - id: my_4 - channel: 4 - - platform: my9231 - id: my_5 - channel: 5 +<<: !include common.yaml diff --git a/tests/components/network/common.yaml b/tests/components/network/common.yaml new file mode 100644 index 0000000000..147afd1e81 --- /dev/null +++ b/tests/components/network/common.yaml @@ -0,0 +1,6 @@ +wifi: + ssid: MySSID + password: password1 + +network: + enable_ipv6: true diff --git a/tests/components/network/test.esp32-c3-idf.yaml b/tests/components/network/test.esp32-c3-idf.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.esp32-c3-idf.yaml +++ b/tests/components/network/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/network/test.esp32-c3.yaml b/tests/components/network/test.esp32-c3.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.esp32-c3.yaml +++ b/tests/components/network/test.esp32-c3.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/network/test.esp32-idf.yaml b/tests/components/network/test.esp32-idf.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.esp32-idf.yaml +++ b/tests/components/network/test.esp32-idf.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/network/test.esp32.yaml b/tests/components/network/test.esp32.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.esp32.yaml +++ b/tests/components/network/test.esp32.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/network/test.esp8266.yaml b/tests/components/network/test.esp8266.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.esp8266.yaml +++ b/tests/components/network/test.esp8266.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/network/test.rp2040.yaml b/tests/components/network/test.rp2040.yaml index 147afd1e81..dade44d145 100644 --- a/tests/components/network/test.rp2040.yaml +++ b/tests/components/network/test.rp2040.yaml @@ -1,6 +1 @@ -wifi: - ssid: MySSID - password: password1 - -network: - enable_ipv6: true +<<: !include common.yaml diff --git a/tests/components/noblex/common.yaml b/tests/components/noblex/common.yaml new file mode 100644 index 0000000000..f5e471a9a7 --- /dev/null +++ b/tests/components/noblex/common.yaml @@ -0,0 +1,20 @@ +remote_receiver: + id: rcvr + pin: 4 + dump: all + +remote_transmitter: + pin: 2 + carrier_duty_percent: 50% + +sensor: + - platform: template + id: noblex_ac_sensor + lambda: "return 21;" + +climate: + - platform: noblex + name: AC Living + id: noblex_ac + sensor: noblex_ac_sensor + receiver_id: rcvr diff --git a/tests/components/noblex/test.esp32-c3-idf.yaml b/tests/components/noblex/test.esp32-c3-idf.yaml index f5e471a9a7..dade44d145 100644 --- a/tests/components/noblex/test.esp32-c3-idf.yaml +++ b/tests/components/noblex/test.esp32-c3-idf.yaml @@ -1,20 +1 @@ -remote_receiver: - id: rcvr - pin: 4 - dump: all - -remote_transmitter: - pin: 2 - carrier_duty_percent: 50% - -sensor: - - platform: template - id: noblex_ac_sensor - lambda: "return 21;" - -climate: - - platform: noblex - name: AC Living - id: noblex_ac - sensor: noblex_ac_sensor - receiver_id: rcvr +<<: !include common.yaml diff --git a/tests/components/noblex/test.esp32-c3.yaml b/tests/components/noblex/test.esp32-c3.yaml index f5e471a9a7..dade44d145 100644 --- a/tests/components/noblex/test.esp32-c3.yaml +++ b/tests/components/noblex/test.esp32-c3.yaml @@ -1,20 +1 @@ -remote_receiver: - id: rcvr - pin: 4 - dump: all - -remote_transmitter: - pin: 2 - carrier_duty_percent: 50% - -sensor: - - platform: template - id: noblex_ac_sensor - lambda: "return 21;" - -climate: - - platform: noblex - name: AC Living - id: noblex_ac - sensor: noblex_ac_sensor - receiver_id: rcvr +<<: !include common.yaml diff --git a/tests/components/noblex/test.esp32-idf.yaml b/tests/components/noblex/test.esp32-idf.yaml index f5e471a9a7..dade44d145 100644 --- a/tests/components/noblex/test.esp32-idf.yaml +++ b/tests/components/noblex/test.esp32-idf.yaml @@ -1,20 +1 @@ -remote_receiver: - id: rcvr - pin: 4 - dump: all - -remote_transmitter: - pin: 2 - carrier_duty_percent: 50% - -sensor: - - platform: template - id: noblex_ac_sensor - lambda: "return 21;" - -climate: - - platform: noblex - name: AC Living - id: noblex_ac - sensor: noblex_ac_sensor - receiver_id: rcvr +<<: !include common.yaml diff --git a/tests/components/noblex/test.esp32.yaml b/tests/components/noblex/test.esp32.yaml index f5e471a9a7..dade44d145 100644 --- a/tests/components/noblex/test.esp32.yaml +++ b/tests/components/noblex/test.esp32.yaml @@ -1,20 +1 @@ -remote_receiver: - id: rcvr - pin: 4 - dump: all - -remote_transmitter: - pin: 2 - carrier_duty_percent: 50% - -sensor: - - platform: template - id: noblex_ac_sensor - lambda: "return 21;" - -climate: - - platform: noblex - name: AC Living - id: noblex_ac - sensor: noblex_ac_sensor - receiver_id: rcvr +<<: !include common.yaml diff --git a/tests/components/noblex/test.esp8266.yaml b/tests/components/noblex/test.esp8266.yaml index f5e471a9a7..dade44d145 100644 --- a/tests/components/noblex/test.esp8266.yaml +++ b/tests/components/noblex/test.esp8266.yaml @@ -1,20 +1 @@ -remote_receiver: - id: rcvr - pin: 4 - dump: all - -remote_transmitter: - pin: 2 - carrier_duty_percent: 50% - -sensor: - - platform: template - id: noblex_ac_sensor - lambda: "return 21;" - -climate: - - platform: noblex - name: AC Living - id: noblex_ac - sensor: noblex_ac_sensor - receiver_id: rcvr +<<: !include common.yaml diff --git a/tests/components/ota/common.yaml b/tests/components/ota/common.yaml new file mode 100644 index 0000000000..367454995f --- /dev/null +++ b/tests/components/ota/common.yaml @@ -0,0 +1,30 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/ota/test.esp32-c3-idf.yaml b/tests/components/ota/test.esp32-c3-idf.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.esp32-c3-idf.yaml +++ b/tests/components/ota/test.esp32-c3-idf.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/ota/test.esp32-c3.yaml b/tests/components/ota/test.esp32-c3.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.esp32-c3.yaml +++ b/tests/components/ota/test.esp32-c3.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/ota/test.esp32-idf.yaml b/tests/components/ota/test.esp32-idf.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.esp32-idf.yaml +++ b/tests/components/ota/test.esp32-idf.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/ota/test.esp32.yaml b/tests/components/ota/test.esp32.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.esp32.yaml +++ b/tests/components/ota/test.esp32.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/ota/test.esp8266.yaml b/tests/components/ota/test.esp8266.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.esp8266.yaml +++ b/tests/components/ota/test.esp8266.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/ota/test.rp2040.yaml b/tests/components/ota/test.rp2040.yaml index 367454995f..dade44d145 100644 --- a/tests/components/ota/test.rp2040.yaml +++ b/tests/components/ota/test.rp2040.yaml @@ -1,30 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); +<<: !include common.yaml diff --git a/tests/components/pid/common.yaml b/tests/components/pid/common.yaml new file mode 100644 index 0000000000..5f7762872f --- /dev/null +++ b/tests/components/pid/common.yaml @@ -0,0 +1,56 @@ +esphome: + on_boot: + then: + - climate.pid.autotune: pid_climate + - climate.pid.autotune: + id: pid_climate + noiseband: 0.25 + positive_output: 25% + negative_output: -25% + - climate.pid.set_control_parameters: + id: pid_climate + kp: 0.0 + ki: 0.0 + kd: 0.0 + - climate.pid.reset_integral_term: pid_climate + +output: + - platform: slow_pwm + pin: 4 + id: pid_slow_pwm + period: 15s + restart_cycle_on_state_change: false + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +climate: + - platform: pid + id: pid_climate + name: PID Climate Controller + sensor: template_sensor1 + humidity_sensor: template_sensor1 + default_target_temperature: 21°C + heat_output: pid_slow_pwm + control_parameters: + kp: 0.0 + ki: 0.0 + kd: 0.0 + max_integral: 0.0 + output_averaging_samples: 1 + derivative_averaging_samples: 1 + deadband_parameters: + threshold_high: 0.4 + threshold_low: -2.0 + kp_multiplier: 0.0 + ki_multiplier: 0.0 + kd_multiplier: 0.0 + deadband_output_averaging_samples: 1 diff --git a/tests/components/pid/test.esp32-c3-idf.yaml b/tests/components/pid/test.esp32-c3-idf.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.esp32-c3-idf.yaml +++ b/tests/components/pid/test.esp32-c3-idf.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/pid/test.esp32-c3.yaml b/tests/components/pid/test.esp32-c3.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.esp32-c3.yaml +++ b/tests/components/pid/test.esp32-c3.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/pid/test.esp32-idf.yaml b/tests/components/pid/test.esp32-idf.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.esp32-idf.yaml +++ b/tests/components/pid/test.esp32-idf.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/pid/test.esp32.yaml b/tests/components/pid/test.esp32.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.esp32.yaml +++ b/tests/components/pid/test.esp32.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/pid/test.esp8266.yaml b/tests/components/pid/test.esp8266.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.esp8266.yaml +++ b/tests/components/pid/test.esp8266.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/pid/test.rp2040.yaml b/tests/components/pid/test.rp2040.yaml index 5f7762872f..dade44d145 100644 --- a/tests/components/pid/test.rp2040.yaml +++ b/tests/components/pid/test.rp2040.yaml @@ -1,56 +1 @@ -esphome: - on_boot: - then: - - climate.pid.autotune: pid_climate - - climate.pid.autotune: - id: pid_climate - noiseband: 0.25 - positive_output: 25% - negative_output: -25% - - climate.pid.set_control_parameters: - id: pid_climate - kp: 0.0 - ki: 0.0 - kd: 0.0 - - climate.pid.reset_integral_term: pid_climate - -output: - - platform: slow_pwm - pin: 4 - id: pid_slow_pwm - period: 15s - restart_cycle_on_state_change: false - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -climate: - - platform: pid - id: pid_climate - name: PID Climate Controller - sensor: template_sensor1 - humidity_sensor: template_sensor1 - default_target_temperature: 21°C - heat_output: pid_slow_pwm - control_parameters: - kp: 0.0 - ki: 0.0 - kd: 0.0 - max_integral: 0.0 - output_averaging_samples: 1 - derivative_averaging_samples: 1 - deadband_parameters: - threshold_high: 0.4 - threshold_low: -2.0 - kp_multiplier: 0.0 - ki_multiplier: 0.0 - kd_multiplier: 0.0 - deadband_output_averaging_samples: 1 +<<: !include common.yaml diff --git a/tests/components/power_supply/common.yaml b/tests/components/power_supply/common.yaml new file mode 100644 index 0000000000..3fefc4d425 --- /dev/null +++ b/tests/components/power_supply/common.yaml @@ -0,0 +1,6 @@ +power_supply: + - id: atx_power_supply + enable_time: 20ms + keep_on_time: 10s + enable_on_boot: true + pin: 4 diff --git a/tests/components/power_supply/test.esp32-c3-idf.yaml b/tests/components/power_supply/test.esp32-c3-idf.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.esp32-c3-idf.yaml +++ b/tests/components/power_supply/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/power_supply/test.esp32-c3.yaml b/tests/components/power_supply/test.esp32-c3.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.esp32-c3.yaml +++ b/tests/components/power_supply/test.esp32-c3.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/power_supply/test.esp32-idf.yaml b/tests/components/power_supply/test.esp32-idf.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.esp32-idf.yaml +++ b/tests/components/power_supply/test.esp32-idf.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/power_supply/test.esp32.yaml b/tests/components/power_supply/test.esp32.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.esp32.yaml +++ b/tests/components/power_supply/test.esp32.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/power_supply/test.esp8266.yaml b/tests/components/power_supply/test.esp8266.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.esp8266.yaml +++ b/tests/components/power_supply/test.esp8266.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/power_supply/test.rp2040.yaml b/tests/components/power_supply/test.rp2040.yaml index 3fefc4d425..dade44d145 100644 --- a/tests/components/power_supply/test.rp2040.yaml +++ b/tests/components/power_supply/test.rp2040.yaml @@ -1,6 +1 @@ -power_supply: - - id: atx_power_supply - enable_time: 20ms - keep_on_time: 10s - enable_on_boot: true - pin: 4 +<<: !include common.yaml diff --git a/tests/components/prometheus/common.yaml b/tests/components/prometheus/common.yaml new file mode 100644 index 0000000000..c8ce17da88 --- /dev/null +++ b/tests/components/prometheus/common.yaml @@ -0,0 +1,21 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: template + id: template_sensor1 + lambda: |- + if (millis() > 10000) { + return 42.0; + } else { + return 0.0; + } + update_interval: 60s + +prometheus: + include_internal: true + relabel: + template_sensor1: + id: hellow_world + name: Hello World diff --git a/tests/components/prometheus/test.esp32-c3-idf.yaml b/tests/components/prometheus/test.esp32-c3-idf.yaml index c8ce17da88..dade44d145 100644 --- a/tests/components/prometheus/test.esp32-c3-idf.yaml +++ b/tests/components/prometheus/test.esp32-c3-idf.yaml @@ -1,21 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -prometheus: - include_internal: true - relabel: - template_sensor1: - id: hellow_world - name: Hello World +<<: !include common.yaml diff --git a/tests/components/prometheus/test.esp32-c3.yaml b/tests/components/prometheus/test.esp32-c3.yaml index c8ce17da88..dade44d145 100644 --- a/tests/components/prometheus/test.esp32-c3.yaml +++ b/tests/components/prometheus/test.esp32-c3.yaml @@ -1,21 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -prometheus: - include_internal: true - relabel: - template_sensor1: - id: hellow_world - name: Hello World +<<: !include common.yaml diff --git a/tests/components/prometheus/test.esp32-idf.yaml b/tests/components/prometheus/test.esp32-idf.yaml index c8ce17da88..dade44d145 100644 --- a/tests/components/prometheus/test.esp32-idf.yaml +++ b/tests/components/prometheus/test.esp32-idf.yaml @@ -1,21 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -prometheus: - include_internal: true - relabel: - template_sensor1: - id: hellow_world - name: Hello World +<<: !include common.yaml diff --git a/tests/components/prometheus/test.esp32.yaml b/tests/components/prometheus/test.esp32.yaml index c8ce17da88..dade44d145 100644 --- a/tests/components/prometheus/test.esp32.yaml +++ b/tests/components/prometheus/test.esp32.yaml @@ -1,21 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -prometheus: - include_internal: true - relabel: - template_sensor1: - id: hellow_world - name: Hello World +<<: !include common.yaml diff --git a/tests/components/prometheus/test.esp8266.yaml b/tests/components/prometheus/test.esp8266.yaml index c8ce17da88..dade44d145 100644 --- a/tests/components/prometheus/test.esp8266.yaml +++ b/tests/components/prometheus/test.esp8266.yaml @@ -1,21 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: template - id: template_sensor1 - lambda: |- - if (millis() > 10000) { - return 42.0; - } else { - return 0.0; - } - update_interval: 60s - -prometheus: - include_internal: true - relabel: - template_sensor1: - id: hellow_world - name: Hello World +<<: !include common.yaml diff --git a/tests/components/psram/common.yaml b/tests/components/psram/common.yaml new file mode 100644 index 0000000000..cfd39f77fe --- /dev/null +++ b/tests/components/psram/common.yaml @@ -0,0 +1,3 @@ +psram: + mode: octal + speed: 80MHz diff --git a/tests/components/psram/test.esp32-c3-idf.yaml b/tests/components/psram/test.esp32-c3-idf.yaml index cfd39f77fe..dade44d145 100644 --- a/tests/components/psram/test.esp32-c3-idf.yaml +++ b/tests/components/psram/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -psram: - mode: octal - speed: 80MHz +<<: !include common.yaml diff --git a/tests/components/psram/test.esp32-c3.yaml b/tests/components/psram/test.esp32-c3.yaml index cfd39f77fe..dade44d145 100644 --- a/tests/components/psram/test.esp32-c3.yaml +++ b/tests/components/psram/test.esp32-c3.yaml @@ -1,3 +1 @@ -psram: - mode: octal - speed: 80MHz +<<: !include common.yaml diff --git a/tests/components/psram/test.esp32-idf.yaml b/tests/components/psram/test.esp32-idf.yaml index cfd39f77fe..dade44d145 100644 --- a/tests/components/psram/test.esp32-idf.yaml +++ b/tests/components/psram/test.esp32-idf.yaml @@ -1,3 +1 @@ -psram: - mode: octal - speed: 80MHz +<<: !include common.yaml diff --git a/tests/components/psram/test.esp32.yaml b/tests/components/psram/test.esp32.yaml index cfd39f77fe..dade44d145 100644 --- a/tests/components/psram/test.esp32.yaml +++ b/tests/components/psram/test.esp32.yaml @@ -1,3 +1 @@ -psram: - mode: octal - speed: 80MHz +<<: !include common.yaml diff --git a/tests/components/pulse_counter/common.yaml b/tests/components/pulse_counter/common.yaml new file mode 100644 index 0000000000..556b43ee6f --- /dev/null +++ b/tests/components/pulse_counter/common.yaml @@ -0,0 +1,9 @@ +sensor: + - platform: pulse_counter + name: Pulse Counter + pin: 4 + count_mode: + rising_edge: INCREMENT + falling_edge: DECREMENT + internal_filter: 13us + update_interval: 15s diff --git a/tests/components/pulse_counter/test.esp32-c3-idf.yaml b/tests/components/pulse_counter/test.esp32-c3-idf.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.esp32-c3-idf.yaml +++ b/tests/components/pulse_counter/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_counter/test.esp32-c3.yaml b/tests/components/pulse_counter/test.esp32-c3.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.esp32-c3.yaml +++ b/tests/components/pulse_counter/test.esp32-c3.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_counter/test.esp32-idf.yaml b/tests/components/pulse_counter/test.esp32-idf.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.esp32-idf.yaml +++ b/tests/components/pulse_counter/test.esp32-idf.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_counter/test.esp32.yaml b/tests/components/pulse_counter/test.esp32.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.esp32.yaml +++ b/tests/components/pulse_counter/test.esp32.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_counter/test.esp8266.yaml b/tests/components/pulse_counter/test.esp8266.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.esp8266.yaml +++ b/tests/components/pulse_counter/test.esp8266.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_counter/test.rp2040.yaml b/tests/components/pulse_counter/test.rp2040.yaml index 556b43ee6f..dade44d145 100644 --- a/tests/components/pulse_counter/test.rp2040.yaml +++ b/tests/components/pulse_counter/test.rp2040.yaml @@ -1,9 +1 @@ -sensor: - - platform: pulse_counter - name: Pulse Counter - pin: 4 - count_mode: - rising_edge: INCREMENT - falling_edge: DECREMENT - internal_filter: 13us - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/pulse_meter/common.yaml b/tests/components/pulse_meter/common.yaml new file mode 100644 index 0000000000..a83ec478bb --- /dev/null +++ b/tests/components/pulse_meter/common.yaml @@ -0,0 +1,13 @@ +sensor: + - platform: pulse_meter + id: pulse_meter_sensor + name: Pulse Meter + pin: 4 + internal_filter: 100ms + timeout: 2 min + on_value: + - pulse_meter.set_total_pulses: + id: pulse_meter_sensor + value: 12345 + total: + name: Pulse Meter Total diff --git a/tests/components/pulse_meter/test.esp32-c3-idf.yaml b/tests/components/pulse_meter/test.esp32-c3-idf.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.esp32-c3-idf.yaml +++ b/tests/components/pulse_meter/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_meter/test.esp32-c3.yaml b/tests/components/pulse_meter/test.esp32-c3.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.esp32-c3.yaml +++ b/tests/components/pulse_meter/test.esp32-c3.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_meter/test.esp32-idf.yaml b/tests/components/pulse_meter/test.esp32-idf.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.esp32-idf.yaml +++ b/tests/components/pulse_meter/test.esp32-idf.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_meter/test.esp32.yaml b/tests/components/pulse_meter/test.esp32.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.esp32.yaml +++ b/tests/components/pulse_meter/test.esp32.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_meter/test.esp8266.yaml b/tests/components/pulse_meter/test.esp8266.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.esp8266.yaml +++ b/tests/components/pulse_meter/test.esp8266.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_meter/test.rp2040.yaml b/tests/components/pulse_meter/test.rp2040.yaml index a83ec478bb..dade44d145 100644 --- a/tests/components/pulse_meter/test.rp2040.yaml +++ b/tests/components/pulse_meter/test.rp2040.yaml @@ -1,13 +1 @@ -sensor: - - platform: pulse_meter - id: pulse_meter_sensor - name: Pulse Meter - pin: 4 - internal_filter: 100ms - timeout: 2 min - on_value: - - pulse_meter.set_total_pulses: - id: pulse_meter_sensor - value: 12345 - total: - name: Pulse Meter Total +<<: !include common.yaml diff --git a/tests/components/pulse_width/common.yaml b/tests/components/pulse_width/common.yaml new file mode 100644 index 0000000000..fbda7cda28 --- /dev/null +++ b/tests/components/pulse_width/common.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: pulse_width + name: Pulse Width + pin: 4 diff --git a/tests/components/pulse_width/test.esp32-c3-idf.yaml b/tests/components/pulse_width/test.esp32-c3-idf.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.esp32-c3-idf.yaml +++ b/tests/components/pulse_width/test.esp32-c3-idf.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pulse_width/test.esp32-c3.yaml b/tests/components/pulse_width/test.esp32-c3.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.esp32-c3.yaml +++ b/tests/components/pulse_width/test.esp32-c3.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pulse_width/test.esp32-idf.yaml b/tests/components/pulse_width/test.esp32-idf.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.esp32-idf.yaml +++ b/tests/components/pulse_width/test.esp32-idf.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pulse_width/test.esp32.yaml b/tests/components/pulse_width/test.esp32.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.esp32.yaml +++ b/tests/components/pulse_width/test.esp32.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pulse_width/test.esp8266.yaml b/tests/components/pulse_width/test.esp8266.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.esp8266.yaml +++ b/tests/components/pulse_width/test.esp8266.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pulse_width/test.rp2040.yaml b/tests/components/pulse_width/test.rp2040.yaml index fbda7cda28..dade44d145 100644 --- a/tests/components/pulse_width/test.rp2040.yaml +++ b/tests/components/pulse_width/test.rp2040.yaml @@ -1,4 +1 @@ -sensor: - - platform: pulse_width - name: Pulse Width - pin: 4 +<<: !include common.yaml diff --git a/tests/components/pvvx_mithermometer/common.yaml b/tests/components/pvvx_mithermometer/common.yaml new file mode 100644 index 0000000000..972f23122c --- /dev/null +++ b/tests/components/pvvx_mithermometer/common.yaml @@ -0,0 +1,44 @@ +wifi: + ssid: MySSID + password: password1 + +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: pvvx_ble_display + +display: + - platform: pvvx_mithermometer + ble_client_id: pvvx_ble_display + time_id: sntp_time + disconnect_delay: 3s + update_interval: 10min + validity_period: 20min + lambda: |- + it.print_bignum(188.8); + it.print_unit(pvvx_mithermometer::UNIT_DEG_E); + it.print_smallnum(88); + it.print_percent(true); + it.print_happy(true); + it.print_sad(true); + it.print_bracket(true); + it.print_battery(true); + +sensor: + - platform: pvvx_mithermometer + mac_address: A4:C1:38:4E:16:78 + temperature: + name: PVVX Temperature + humidity: + name: PVVX Humidity + battery_level: + name: PVVX Battery-Level + battery_voltage: + name: PVVX Battery-Voltage + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org diff --git a/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml b/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml index 972f23122c..dade44d145 100644 --- a/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml +++ b/tests/components/pvvx_mithermometer/test.esp32-c3-idf.yaml @@ -1,44 +1 @@ -wifi: - ssid: MySSID - password: password1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: pvvx_ble_display - -display: - - platform: pvvx_mithermometer - ble_client_id: pvvx_ble_display - time_id: sntp_time - disconnect_delay: 3s - update_interval: 10min - validity_period: 20min - lambda: |- - it.print_bignum(188.8); - it.print_unit(pvvx_mithermometer::UNIT_DEG_E); - it.print_smallnum(88); - it.print_percent(true); - it.print_happy(true); - it.print_sad(true); - it.print_bracket(true); - it.print_battery(true); - -sensor: - - platform: pvvx_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: PVVX Temperature - humidity: - name: PVVX Humidity - battery_level: - name: PVVX Battery-Level - battery_voltage: - name: PVVX Battery-Voltage - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org +<<: !include common.yaml diff --git a/tests/components/pvvx_mithermometer/test.esp32-c3.yaml b/tests/components/pvvx_mithermometer/test.esp32-c3.yaml index 972f23122c..dade44d145 100644 --- a/tests/components/pvvx_mithermometer/test.esp32-c3.yaml +++ b/tests/components/pvvx_mithermometer/test.esp32-c3.yaml @@ -1,44 +1 @@ -wifi: - ssid: MySSID - password: password1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: pvvx_ble_display - -display: - - platform: pvvx_mithermometer - ble_client_id: pvvx_ble_display - time_id: sntp_time - disconnect_delay: 3s - update_interval: 10min - validity_period: 20min - lambda: |- - it.print_bignum(188.8); - it.print_unit(pvvx_mithermometer::UNIT_DEG_E); - it.print_smallnum(88); - it.print_percent(true); - it.print_happy(true); - it.print_sad(true); - it.print_bracket(true); - it.print_battery(true); - -sensor: - - platform: pvvx_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: PVVX Temperature - humidity: - name: PVVX Humidity - battery_level: - name: PVVX Battery-Level - battery_voltage: - name: PVVX Battery-Voltage - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org +<<: !include common.yaml diff --git a/tests/components/pvvx_mithermometer/test.esp32-idf.yaml b/tests/components/pvvx_mithermometer/test.esp32-idf.yaml index 972f23122c..dade44d145 100644 --- a/tests/components/pvvx_mithermometer/test.esp32-idf.yaml +++ b/tests/components/pvvx_mithermometer/test.esp32-idf.yaml @@ -1,44 +1 @@ -wifi: - ssid: MySSID - password: password1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: pvvx_ble_display - -display: - - platform: pvvx_mithermometer - ble_client_id: pvvx_ble_display - time_id: sntp_time - disconnect_delay: 3s - update_interval: 10min - validity_period: 20min - lambda: |- - it.print_bignum(188.8); - it.print_unit(pvvx_mithermometer::UNIT_DEG_E); - it.print_smallnum(88); - it.print_percent(true); - it.print_happy(true); - it.print_sad(true); - it.print_bracket(true); - it.print_battery(true); - -sensor: - - platform: pvvx_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: PVVX Temperature - humidity: - name: PVVX Humidity - battery_level: - name: PVVX Battery-Level - battery_voltage: - name: PVVX Battery-Voltage - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org +<<: !include common.yaml diff --git a/tests/components/pvvx_mithermometer/test.esp32.yaml b/tests/components/pvvx_mithermometer/test.esp32.yaml index 972f23122c..dade44d145 100644 --- a/tests/components/pvvx_mithermometer/test.esp32.yaml +++ b/tests/components/pvvx_mithermometer/test.esp32.yaml @@ -1,44 +1 @@ -wifi: - ssid: MySSID - password: password1 - -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: pvvx_ble_display - -display: - - platform: pvvx_mithermometer - ble_client_id: pvvx_ble_display - time_id: sntp_time - disconnect_delay: 3s - update_interval: 10min - validity_period: 20min - lambda: |- - it.print_bignum(188.8); - it.print_unit(pvvx_mithermometer::UNIT_DEG_E); - it.print_smallnum(88); - it.print_percent(true); - it.print_happy(true); - it.print_sad(true); - it.print_bracket(true); - it.print_battery(true); - -sensor: - - platform: pvvx_mithermometer - mac_address: A4:C1:38:4E:16:78 - temperature: - name: PVVX Temperature - humidity: - name: PVVX Humidity - battery_level: - name: PVVX Battery-Level - battery_voltage: - name: PVVX Battery-Voltage - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org +<<: !include common.yaml diff --git a/tests/components/qspi_amoled/common.yaml b/tests/components/qspi_amoled/common.yaml new file mode 100644 index 0000000000..01d1a63bcb --- /dev/null +++ b/tests/components/qspi_amoled/common.yaml @@ -0,0 +1,36 @@ +spi: + id: quad_spi + clk_pin: 15 + type: quad + data_pins: [14, 10, 16, 12] + +display: + - platform: qspi_amoled + model: RM690B0 + data_rate: 80MHz + spi_mode: mode0 + dimensions: + width: 450 + height: 600 + offset_width: 16 + color_order: rgb + invert_colors: false + brightness: 255 + cs_pin: 11 + reset_pin: 13 + enable_pin: 9 + + - platform: qspi_amoled + model: RM67162 + id: main_lcd + dimensions: + height: 240 + width: 536 + transform: + mirror_x: true + swap_xy: true + color_order: rgb + brightness: 255 + cs_pin: 6 + reset_pin: 17 + enable_pin: 38 diff --git a/tests/components/qspi_amoled/test.esp32-s3-idf.yaml b/tests/components/qspi_amoled/test.esp32-s3-idf.yaml index 01d1a63bcb..dade44d145 100644 --- a/tests/components/qspi_amoled/test.esp32-s3-idf.yaml +++ b/tests/components/qspi_amoled/test.esp32-s3-idf.yaml @@ -1,36 +1 @@ -spi: - id: quad_spi - clk_pin: 15 - type: quad - data_pins: [14, 10, 16, 12] - -display: - - platform: qspi_amoled - model: RM690B0 - data_rate: 80MHz - spi_mode: mode0 - dimensions: - width: 450 - height: 600 - offset_width: 16 - color_order: rgb - invert_colors: false - brightness: 255 - cs_pin: 11 - reset_pin: 13 - enable_pin: 9 - - - platform: qspi_amoled - model: RM67162 - id: main_lcd - dimensions: - height: 240 - width: 536 - transform: - mirror_x: true - swap_xy: true - color_order: rgb - brightness: 255 - cs_pin: 6 - reset_pin: 17 - enable_pin: 38 +<<: !include common.yaml diff --git a/tests/components/radon_eye_ble/common.yaml b/tests/components/radon_eye_ble/common.yaml new file mode 100644 index 0000000000..85638d5c0e --- /dev/null +++ b/tests/components/radon_eye_ble/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +radon_eye_ble: diff --git a/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml b/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml index 85638d5c0e..dade44d145 100644 --- a/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml +++ b/tests/components/radon_eye_ble/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -radon_eye_ble: +<<: !include common.yaml diff --git a/tests/components/radon_eye_ble/test.esp32-c3.yaml b/tests/components/radon_eye_ble/test.esp32-c3.yaml index 85638d5c0e..dade44d145 100644 --- a/tests/components/radon_eye_ble/test.esp32-c3.yaml +++ b/tests/components/radon_eye_ble/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -radon_eye_ble: +<<: !include common.yaml diff --git a/tests/components/radon_eye_ble/test.esp32-idf.yaml b/tests/components/radon_eye_ble/test.esp32-idf.yaml index 85638d5c0e..dade44d145 100644 --- a/tests/components/radon_eye_ble/test.esp32-idf.yaml +++ b/tests/components/radon_eye_ble/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -radon_eye_ble: +<<: !include common.yaml diff --git a/tests/components/radon_eye_ble/test.esp32.yaml b/tests/components/radon_eye_ble/test.esp32.yaml index 85638d5c0e..dade44d145 100644 --- a/tests/components/radon_eye_ble/test.esp32.yaml +++ b/tests/components/radon_eye_ble/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -radon_eye_ble: +<<: !include common.yaml diff --git a/tests/components/radon_eye_rd200/common.yaml b/tests/components/radon_eye_rd200/common.yaml new file mode 100644 index 0000000000..d06979be6f --- /dev/null +++ b/tests/components/radon_eye_rd200/common.yaml @@ -0,0 +1,14 @@ +esp32_ble_tracker: + +ble_client: + - mac_address: 01:02:03:04:05:06 + id: radon_eye_blec + +sensor: + - platform: radon_eye_rd200 + ble_client_id: radon_eye_blec + radon: + name: RD200 Radon + radon_long_term: + name: RD200 Radon Long Term + update_interval: 10min diff --git a/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml b/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml index d06979be6f..dade44d145 100644 --- a/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml +++ b/tests/components/radon_eye_rd200/test.esp32-c3-idf.yaml @@ -1,14 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: radon_eye_blec - -sensor: - - platform: radon_eye_rd200 - ble_client_id: radon_eye_blec - radon: - name: RD200 Radon - radon_long_term: - name: RD200 Radon Long Term - update_interval: 10min +<<: !include common.yaml diff --git a/tests/components/radon_eye_rd200/test.esp32-c3.yaml b/tests/components/radon_eye_rd200/test.esp32-c3.yaml index d06979be6f..dade44d145 100644 --- a/tests/components/radon_eye_rd200/test.esp32-c3.yaml +++ b/tests/components/radon_eye_rd200/test.esp32-c3.yaml @@ -1,14 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: radon_eye_blec - -sensor: - - platform: radon_eye_rd200 - ble_client_id: radon_eye_blec - radon: - name: RD200 Radon - radon_long_term: - name: RD200 Radon Long Term - update_interval: 10min +<<: !include common.yaml diff --git a/tests/components/radon_eye_rd200/test.esp32-idf.yaml b/tests/components/radon_eye_rd200/test.esp32-idf.yaml index d06979be6f..dade44d145 100644 --- a/tests/components/radon_eye_rd200/test.esp32-idf.yaml +++ b/tests/components/radon_eye_rd200/test.esp32-idf.yaml @@ -1,14 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: radon_eye_blec - -sensor: - - platform: radon_eye_rd200 - ble_client_id: radon_eye_blec - radon: - name: RD200 Radon - radon_long_term: - name: RD200 Radon Long Term - update_interval: 10min +<<: !include common.yaml diff --git a/tests/components/radon_eye_rd200/test.esp32.yaml b/tests/components/radon_eye_rd200/test.esp32.yaml index d06979be6f..dade44d145 100644 --- a/tests/components/radon_eye_rd200/test.esp32.yaml +++ b/tests/components/radon_eye_rd200/test.esp32.yaml @@ -1,14 +1 @@ -esp32_ble_tracker: - -ble_client: - - mac_address: 01:02:03:04:05:06 - id: radon_eye_blec - -sensor: - - platform: radon_eye_rd200 - ble_client_id: radon_eye_blec - radon: - name: RD200 Radon - radon_long_term: - name: RD200 Radon Long Term - update_interval: 10min +<<: !include common.yaml diff --git a/tests/components/restart/common.yaml b/tests/components/restart/common.yaml new file mode 100644 index 0000000000..f0d25809ac --- /dev/null +++ b/tests/components/restart/common.yaml @@ -0,0 +1,7 @@ +button: + - platform: restart + name: Restart Button + +switch: + - platform: restart + name: Restart Switch diff --git a/tests/components/restart/test.esp32-c3-idf.yaml b/tests/components/restart/test.esp32-c3-idf.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.esp32-c3-idf.yaml +++ b/tests/components/restart/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/restart/test.esp32-c3.yaml b/tests/components/restart/test.esp32-c3.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.esp32-c3.yaml +++ b/tests/components/restart/test.esp32-c3.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/restart/test.esp32-idf.yaml b/tests/components/restart/test.esp32-idf.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.esp32-idf.yaml +++ b/tests/components/restart/test.esp32-idf.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/restart/test.esp32.yaml b/tests/components/restart/test.esp32.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.esp32.yaml +++ b/tests/components/restart/test.esp32.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/restart/test.esp8266.yaml b/tests/components/restart/test.esp8266.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.esp8266.yaml +++ b/tests/components/restart/test.esp8266.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/restart/test.rp2040.yaml b/tests/components/restart/test.rp2040.yaml index f0d25809ac..dade44d145 100644 --- a/tests/components/restart/test.rp2040.yaml +++ b/tests/components/restart/test.rp2040.yaml @@ -1,7 +1 @@ -button: - - platform: restart - name: Restart Button - -switch: - - platform: restart - name: Restart Switch +<<: !include common.yaml diff --git a/tests/components/rp2040_pio_led_strip/common.yaml b/tests/components/rp2040_pio_led_strip/common.yaml new file mode 100644 index 0000000000..b9b1436cdb --- /dev/null +++ b/tests/components/rp2040_pio_led_strip/common.yaml @@ -0,0 +1,18 @@ +light: + - platform: rp2040_pio_led_strip + id: led_strip + pin: 4 + num_leds: 60 + pio: 0 + rgb_order: GRB + chipset: WS2812 + - platform: rp2040_pio_led_strip + id: led_strip_custom_timings + pin: 5 + num_leds: 60 + pio: 1 + rgb_order: GRB + bit0_high: .1us + bit0_low: 1.2us + bit1_high: .69us + bit1_low: .4us diff --git a/tests/components/rp2040_pio_led_strip/test.rp2040.yaml b/tests/components/rp2040_pio_led_strip/test.rp2040.yaml index b9b1436cdb..dade44d145 100644 --- a/tests/components/rp2040_pio_led_strip/test.rp2040.yaml +++ b/tests/components/rp2040_pio_led_strip/test.rp2040.yaml @@ -1,18 +1 @@ -light: - - platform: rp2040_pio_led_strip - id: led_strip - pin: 4 - num_leds: 60 - pio: 0 - rgb_order: GRB - chipset: WS2812 - - platform: rp2040_pio_led_strip - id: led_strip_custom_timings - pin: 5 - num_leds: 60 - pio: 1 - rgb_order: GRB - bit0_high: .1us - bit0_low: 1.2us - bit1_high: .69us - bit1_low: .4us +<<: !include common.yaml diff --git a/tests/components/rp2040_pwm/common.yaml b/tests/components/rp2040_pwm/common.yaml new file mode 100644 index 0000000000..45c039106f --- /dev/null +++ b/tests/components/rp2040_pwm/common.yaml @@ -0,0 +1,7 @@ +output: + - platform: rp2040_pwm + id: light_output_1 + pin: 2 + - platform: rp2040_pwm + id: light_output_2 + pin: 3 diff --git a/tests/components/rp2040_pwm/test.rp2040.yaml b/tests/components/rp2040_pwm/test.rp2040.yaml index 45c039106f..dade44d145 100644 --- a/tests/components/rp2040_pwm/test.rp2040.yaml +++ b/tests/components/rp2040_pwm/test.rp2040.yaml @@ -1,7 +1 @@ -output: - - platform: rp2040_pwm - id: light_output_1 - pin: 2 - - platform: rp2040_pwm - id: light_output_2 - pin: 3 +<<: !include common.yaml diff --git a/tests/components/rpi_dpi_rgb/common.yaml b/tests/components/rpi_dpi_rgb/common.yaml new file mode 100644 index 0000000000..9ce2d9b9fd --- /dev/null +++ b/tests/components/rpi_dpi_rgb/common.yaml @@ -0,0 +1,40 @@ +psram: + mode: octal + speed: 80MHz +display: + - platform: rpi_dpi_rgb + update_interval: never + auto_clear_enabled: false + id: rpi_display + color_order: RGB + rotation: 90 + dimensions: + width: 800 + height: 480 + de_pin: + number: 40 + hsync_pin: 39 + vsync_pin: 41 + pclk_pin: 42 + data_pins: + red: + - number: 45 # r1 + ignore_strapping_warning: true + - 48 # r2 + - 47 # r3 + - 21 # r4 + - number: 14 # r5 + ignore_strapping_warning: false + green: + - 5 # g0 + - 6 # g1 + - 7 # g2 + - 15 # g3 + - 16 # g4 + - 4 # g5 + blue: + - 8 # b1 + - 3 # b2 + - 46 # b3 + - 9 # b4 + - 1 # b5 diff --git a/tests/components/rpi_dpi_rgb/test.esp32-s3-idf.yaml b/tests/components/rpi_dpi_rgb/test.esp32-s3-idf.yaml index 9ce2d9b9fd..dade44d145 100644 --- a/tests/components/rpi_dpi_rgb/test.esp32-s3-idf.yaml +++ b/tests/components/rpi_dpi_rgb/test.esp32-s3-idf.yaml @@ -1,40 +1 @@ -psram: - mode: octal - speed: 80MHz -display: - - platform: rpi_dpi_rgb - update_interval: never - auto_clear_enabled: false - id: rpi_display - color_order: RGB - rotation: 90 - dimensions: - width: 800 - height: 480 - de_pin: - number: 40 - hsync_pin: 39 - vsync_pin: 41 - pclk_pin: 42 - data_pins: - red: - - number: 45 # r1 - ignore_strapping_warning: true - - 48 # r2 - - 47 # r3 - - 21 # r4 - - number: 14 # r5 - ignore_strapping_warning: false - green: - - 5 # g0 - - 6 # g1 - - 7 # g2 - - 15 # g3 - - 16 # g4 - - 4 # g5 - blue: - - 8 # b1 - - 3 # b2 - - 46 # b3 - - 9 # b4 - - 1 # b5 +<<: !include common.yaml diff --git a/tests/components/ruuvi_ble/common.yaml b/tests/components/ruuvi_ble/common.yaml new file mode 100644 index 0000000000..1f155fd8e1 --- /dev/null +++ b/tests/components/ruuvi_ble/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +ruuvi_ble: diff --git a/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml b/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml index 1f155fd8e1..dade44d145 100644 --- a/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml +++ b/tests/components/ruuvi_ble/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -ruuvi_ble: +<<: !include common.yaml diff --git a/tests/components/ruuvi_ble/test.esp32-c3.yaml b/tests/components/ruuvi_ble/test.esp32-c3.yaml index 1f155fd8e1..dade44d145 100644 --- a/tests/components/ruuvi_ble/test.esp32-c3.yaml +++ b/tests/components/ruuvi_ble/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -ruuvi_ble: +<<: !include common.yaml diff --git a/tests/components/ruuvi_ble/test.esp32-idf.yaml b/tests/components/ruuvi_ble/test.esp32-idf.yaml index 1f155fd8e1..dade44d145 100644 --- a/tests/components/ruuvi_ble/test.esp32-idf.yaml +++ b/tests/components/ruuvi_ble/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -ruuvi_ble: +<<: !include common.yaml diff --git a/tests/components/ruuvi_ble/test.esp32.yaml b/tests/components/ruuvi_ble/test.esp32.yaml index 1f155fd8e1..dade44d145 100644 --- a/tests/components/ruuvi_ble/test.esp32.yaml +++ b/tests/components/ruuvi_ble/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -ruuvi_ble: +<<: !include common.yaml diff --git a/tests/components/ruuvitag/common.yaml b/tests/components/ruuvitag/common.yaml new file mode 100644 index 0000000000..7990617710 --- /dev/null +++ b/tests/components/ruuvitag/common.yaml @@ -0,0 +1,27 @@ +esp32_ble_tracker: + +sensor: + - platform: ruuvitag + mac_address: FF:56:D3:2F:7D:E8 + humidity: + name: RuuviTag Humidity + temperature: + name: RuuviTag Temperature + pressure: + name: RuuviTag Pressure + acceleration: + name: RuuviTag Acceleration + acceleration_x: + name: RuuviTag Acceleration X + acceleration_y: + name: RuuviTag Acceleration Y + acceleration_z: + name: RuuviTag Acceleration Z + battery_voltage: + name: RuuviTag Battery Voltage + tx_power: + name: RuuviTag TX Power + movement_counter: + name: RuuviTag Movement Counter + measurement_sequence_number: + name: RuuviTag Measurement Sequence Number diff --git a/tests/components/ruuvitag/test.esp32-c3-idf.yaml b/tests/components/ruuvitag/test.esp32-c3-idf.yaml index 7990617710..dade44d145 100644 --- a/tests/components/ruuvitag/test.esp32-c3-idf.yaml +++ b/tests/components/ruuvitag/test.esp32-c3-idf.yaml @@ -1,27 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ruuvitag - mac_address: FF:56:D3:2F:7D:E8 - humidity: - name: RuuviTag Humidity - temperature: - name: RuuviTag Temperature - pressure: - name: RuuviTag Pressure - acceleration: - name: RuuviTag Acceleration - acceleration_x: - name: RuuviTag Acceleration X - acceleration_y: - name: RuuviTag Acceleration Y - acceleration_z: - name: RuuviTag Acceleration Z - battery_voltage: - name: RuuviTag Battery Voltage - tx_power: - name: RuuviTag TX Power - movement_counter: - name: RuuviTag Movement Counter - measurement_sequence_number: - name: RuuviTag Measurement Sequence Number +<<: !include common.yaml diff --git a/tests/components/ruuvitag/test.esp32-c3.yaml b/tests/components/ruuvitag/test.esp32-c3.yaml index 7990617710..dade44d145 100644 --- a/tests/components/ruuvitag/test.esp32-c3.yaml +++ b/tests/components/ruuvitag/test.esp32-c3.yaml @@ -1,27 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ruuvitag - mac_address: FF:56:D3:2F:7D:E8 - humidity: - name: RuuviTag Humidity - temperature: - name: RuuviTag Temperature - pressure: - name: RuuviTag Pressure - acceleration: - name: RuuviTag Acceleration - acceleration_x: - name: RuuviTag Acceleration X - acceleration_y: - name: RuuviTag Acceleration Y - acceleration_z: - name: RuuviTag Acceleration Z - battery_voltage: - name: RuuviTag Battery Voltage - tx_power: - name: RuuviTag TX Power - movement_counter: - name: RuuviTag Movement Counter - measurement_sequence_number: - name: RuuviTag Measurement Sequence Number +<<: !include common.yaml diff --git a/tests/components/ruuvitag/test.esp32-idf.yaml b/tests/components/ruuvitag/test.esp32-idf.yaml index 7990617710..dade44d145 100644 --- a/tests/components/ruuvitag/test.esp32-idf.yaml +++ b/tests/components/ruuvitag/test.esp32-idf.yaml @@ -1,27 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ruuvitag - mac_address: FF:56:D3:2F:7D:E8 - humidity: - name: RuuviTag Humidity - temperature: - name: RuuviTag Temperature - pressure: - name: RuuviTag Pressure - acceleration: - name: RuuviTag Acceleration - acceleration_x: - name: RuuviTag Acceleration X - acceleration_y: - name: RuuviTag Acceleration Y - acceleration_z: - name: RuuviTag Acceleration Z - battery_voltage: - name: RuuviTag Battery Voltage - tx_power: - name: RuuviTag TX Power - movement_counter: - name: RuuviTag Movement Counter - measurement_sequence_number: - name: RuuviTag Measurement Sequence Number +<<: !include common.yaml diff --git a/tests/components/ruuvitag/test.esp32.yaml b/tests/components/ruuvitag/test.esp32.yaml index 7990617710..dade44d145 100644 --- a/tests/components/ruuvitag/test.esp32.yaml +++ b/tests/components/ruuvitag/test.esp32.yaml @@ -1,27 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: ruuvitag - mac_address: FF:56:D3:2F:7D:E8 - humidity: - name: RuuviTag Humidity - temperature: - name: RuuviTag Temperature - pressure: - name: RuuviTag Pressure - acceleration: - name: RuuviTag Acceleration - acceleration_x: - name: RuuviTag Acceleration X - acceleration_y: - name: RuuviTag Acceleration Y - acceleration_z: - name: RuuviTag Acceleration Z - battery_voltage: - name: RuuviTag Battery Voltage - tx_power: - name: RuuviTag TX Power - movement_counter: - name: RuuviTag Movement Counter - measurement_sequence_number: - name: RuuviTag Measurement Sequence Number +<<: !include common.yaml diff --git a/tests/components/safe_mode/common.yaml b/tests/components/safe_mode/common.yaml new file mode 100644 index 0000000000..df0abd9aec --- /dev/null +++ b/tests/components/safe_mode/common.yaml @@ -0,0 +1,13 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + +button: + - platform: safe_mode + name: Safe Mode Button + +switch: + - platform: safe_mode + name: Safe Mode Switch diff --git a/tests/components/safe_mode/test.esp32-c3-idf.yaml b/tests/components/safe_mode/test.esp32-c3-idf.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.esp32-c3-idf.yaml +++ b/tests/components/safe_mode/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/safe_mode/test.esp32-c3.yaml b/tests/components/safe_mode/test.esp32-c3.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.esp32-c3.yaml +++ b/tests/components/safe_mode/test.esp32-c3.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/safe_mode/test.esp32-idf.yaml b/tests/components/safe_mode/test.esp32-idf.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.esp32-idf.yaml +++ b/tests/components/safe_mode/test.esp32-idf.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/safe_mode/test.esp32.yaml b/tests/components/safe_mode/test.esp32.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.esp32.yaml +++ b/tests/components/safe_mode/test.esp32.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/safe_mode/test.esp8266.yaml b/tests/components/safe_mode/test.esp8266.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.esp8266.yaml +++ b/tests/components/safe_mode/test.esp8266.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/safe_mode/test.rp2040.yaml b/tests/components/safe_mode/test.rp2040.yaml index df0abd9aec..dade44d145 100644 --- a/tests/components/safe_mode/test.rp2040.yaml +++ b/tests/components/safe_mode/test.rp2040.yaml @@ -1,13 +1 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - -button: - - platform: safe_mode - name: Safe Mode Button - -switch: - - platform: safe_mode - name: Safe Mode Switch +<<: !include common.yaml diff --git a/tests/components/shelly_dimmer/common.yaml b/tests/components/shelly_dimmer/common.yaml new file mode 100644 index 0000000000..3acd0260d5 --- /dev/null +++ b/tests/components/shelly_dimmer/common.yaml @@ -0,0 +1,19 @@ +uart: + - id: uart_shelly_dimmer + tx_pin: 4 + rx_pin: 5 + baud_rate: 9600 + +light: + - platform: shelly_dimmer + name: Shelly Dimmer Light + power: + name: Shelly Dimmer Power + voltage: + name: Shelly Dimmer Voltage + current: + name: Shelly Dimmer Current + max_brightness: 500 + firmware: "51.6" + nrst_pin: 13 + boot0_pin: 14 diff --git a/tests/components/shelly_dimmer/test.esp8266.yaml b/tests/components/shelly_dimmer/test.esp8266.yaml index 3acd0260d5..dade44d145 100644 --- a/tests/components/shelly_dimmer/test.esp8266.yaml +++ b/tests/components/shelly_dimmer/test.esp8266.yaml @@ -1,19 +1 @@ -uart: - - id: uart_shelly_dimmer - tx_pin: 4 - rx_pin: 5 - baud_rate: 9600 - -light: - - platform: shelly_dimmer - name: Shelly Dimmer Light - power: - name: Shelly Dimmer Power - voltage: - name: Shelly Dimmer Voltage - current: - name: Shelly Dimmer Current - max_brightness: 500 - firmware: "51.6" - nrst_pin: 13 - boot0_pin: 14 +<<: !include common.yaml diff --git a/tests/components/shutdown/common.yaml b/tests/components/shutdown/common.yaml new file mode 100644 index 0000000000..f47e7da85d --- /dev/null +++ b/tests/components/shutdown/common.yaml @@ -0,0 +1,7 @@ +button: + - platform: shutdown + name: Shutdown Button + +switch: + - platform: shutdown + name: Shutdown Switch diff --git a/tests/components/shutdown/test.esp32-c3-idf.yaml b/tests/components/shutdown/test.esp32-c3-idf.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.esp32-c3-idf.yaml +++ b/tests/components/shutdown/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/shutdown/test.esp32-c3.yaml b/tests/components/shutdown/test.esp32-c3.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.esp32-c3.yaml +++ b/tests/components/shutdown/test.esp32-c3.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/shutdown/test.esp32-idf.yaml b/tests/components/shutdown/test.esp32-idf.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.esp32-idf.yaml +++ b/tests/components/shutdown/test.esp32-idf.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/shutdown/test.esp32.yaml b/tests/components/shutdown/test.esp32.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.esp32.yaml +++ b/tests/components/shutdown/test.esp32.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/shutdown/test.esp8266.yaml b/tests/components/shutdown/test.esp8266.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.esp8266.yaml +++ b/tests/components/shutdown/test.esp8266.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/shutdown/test.rp2040.yaml b/tests/components/shutdown/test.rp2040.yaml index f47e7da85d..dade44d145 100644 --- a/tests/components/shutdown/test.rp2040.yaml +++ b/tests/components/shutdown/test.rp2040.yaml @@ -1,7 +1 @@ -button: - - platform: shutdown - name: Shutdown Button - -switch: - - platform: shutdown - name: Shutdown Switch +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/common.yaml b/tests/components/sigma_delta_output/common.yaml new file mode 100644 index 0000000000..2a9a5d2c3b --- /dev/null +++ b/tests/components/sigma_delta_output/common.yaml @@ -0,0 +1,16 @@ +output: + - platform: sigma_delta_output + id: sddac + pin: 4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + update_interval: 60s diff --git a/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml b/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml +++ b/tests/components/sigma_delta_output/test.esp32-c3-idf.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/test.esp32-c3.yaml b/tests/components/sigma_delta_output/test.esp32-c3.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.esp32-c3.yaml +++ b/tests/components/sigma_delta_output/test.esp32-c3.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/test.esp32-idf.yaml b/tests/components/sigma_delta_output/test.esp32-idf.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.esp32-idf.yaml +++ b/tests/components/sigma_delta_output/test.esp32-idf.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/test.esp32.yaml b/tests/components/sigma_delta_output/test.esp32.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.esp32.yaml +++ b/tests/components/sigma_delta_output/test.esp32.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/test.esp8266.yaml b/tests/components/sigma_delta_output/test.esp8266.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.esp8266.yaml +++ b/tests/components/sigma_delta_output/test.esp8266.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/sigma_delta_output/test.rp2040.yaml b/tests/components/sigma_delta_output/test.rp2040.yaml index 2a9a5d2c3b..dade44d145 100644 --- a/tests/components/sigma_delta_output/test.rp2040.yaml +++ b/tests/components/sigma_delta_output/test.rp2040.yaml @@ -1,16 +1 @@ -output: - - platform: sigma_delta_output - id: sddac - pin: 4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - update_interval: 60s +<<: !include common.yaml diff --git a/tests/components/slow_pwm/common.yaml b/tests/components/slow_pwm/common.yaml new file mode 100644 index 0000000000..6bfb2f8ac5 --- /dev/null +++ b/tests/components/slow_pwm/common.yaml @@ -0,0 +1,6 @@ +output: + - platform: slow_pwm + id: test_slow_pwm + pin: 4 + period: 15s + restart_cycle_on_state_change: false diff --git a/tests/components/slow_pwm/test.esp32-c3-idf.yaml b/tests/components/slow_pwm/test.esp32-c3-idf.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.esp32-c3-idf.yaml +++ b/tests/components/slow_pwm/test.esp32-c3-idf.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/slow_pwm/test.esp32-c3.yaml b/tests/components/slow_pwm/test.esp32-c3.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.esp32-c3.yaml +++ b/tests/components/slow_pwm/test.esp32-c3.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/slow_pwm/test.esp32-idf.yaml b/tests/components/slow_pwm/test.esp32-idf.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.esp32-idf.yaml +++ b/tests/components/slow_pwm/test.esp32-idf.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/slow_pwm/test.esp32.yaml b/tests/components/slow_pwm/test.esp32.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.esp32.yaml +++ b/tests/components/slow_pwm/test.esp32.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/slow_pwm/test.esp8266.yaml b/tests/components/slow_pwm/test.esp8266.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.esp8266.yaml +++ b/tests/components/slow_pwm/test.esp8266.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/slow_pwm/test.rp2040.yaml b/tests/components/slow_pwm/test.rp2040.yaml index 6bfb2f8ac5..dade44d145 100644 --- a/tests/components/slow_pwm/test.rp2040.yaml +++ b/tests/components/slow_pwm/test.rp2040.yaml @@ -1,6 +1 @@ -output: - - platform: slow_pwm - id: test_slow_pwm - pin: 4 - period: 15s - restart_cycle_on_state_change: false +<<: !include common.yaml diff --git a/tests/components/sm16716/common.yaml b/tests/components/sm16716/common.yaml new file mode 100644 index 0000000000..3bf2712f4e --- /dev/null +++ b/tests/components/sm16716/common.yaml @@ -0,0 +1,16 @@ +sm16716: + clock_pin: 4 + data_pin: 5 + num_channels: 3 + num_chips: 1 + +output: + - platform: sm16716 + id: sm16716_red + channel: 1 + - platform: sm16716 + id: sm16716_green + channel: 0 + - platform: sm16716 + id: sm16716_blue + channel: 2 diff --git a/tests/components/sm16716/test.esp32-c3-idf.yaml b/tests/components/sm16716/test.esp32-c3-idf.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.esp32-c3-idf.yaml +++ b/tests/components/sm16716/test.esp32-c3-idf.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm16716/test.esp32-c3.yaml b/tests/components/sm16716/test.esp32-c3.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.esp32-c3.yaml +++ b/tests/components/sm16716/test.esp32-c3.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm16716/test.esp32-idf.yaml b/tests/components/sm16716/test.esp32-idf.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.esp32-idf.yaml +++ b/tests/components/sm16716/test.esp32-idf.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm16716/test.esp32.yaml b/tests/components/sm16716/test.esp32.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.esp32.yaml +++ b/tests/components/sm16716/test.esp32.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm16716/test.esp8266.yaml b/tests/components/sm16716/test.esp8266.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.esp8266.yaml +++ b/tests/components/sm16716/test.esp8266.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm16716/test.rp2040.yaml b/tests/components/sm16716/test.rp2040.yaml index 3bf2712f4e..dade44d145 100644 --- a/tests/components/sm16716/test.rp2040.yaml +++ b/tests/components/sm16716/test.rp2040.yaml @@ -1,16 +1 @@ -sm16716: - clock_pin: 4 - data_pin: 5 - num_channels: 3 - num_chips: 1 - -output: - - platform: sm16716 - id: sm16716_red - channel: 1 - - platform: sm16716 - id: sm16716_green - channel: 0 - - platform: sm16716 - id: sm16716_blue - channel: 2 +<<: !include common.yaml diff --git a/tests/components/sm2135/common.yaml b/tests/components/sm2135/common.yaml new file mode 100644 index 0000000000..9a0de60839 --- /dev/null +++ b/tests/components/sm2135/common.yaml @@ -0,0 +1,22 @@ +sm2135: + clock_pin: 4 + data_pin: 5 + rgb_current: 20mA + cw_current: 60mA + +output: + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 diff --git a/tests/components/sm2135/test.esp32-c3-idf.yaml b/tests/components/sm2135/test.esp32-c3-idf.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.esp32-c3-idf.yaml +++ b/tests/components/sm2135/test.esp32-c3-idf.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2135/test.esp32-c3.yaml b/tests/components/sm2135/test.esp32-c3.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.esp32-c3.yaml +++ b/tests/components/sm2135/test.esp32-c3.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2135/test.esp32-idf.yaml b/tests/components/sm2135/test.esp32-idf.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.esp32-idf.yaml +++ b/tests/components/sm2135/test.esp32-idf.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2135/test.esp32.yaml b/tests/components/sm2135/test.esp32.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.esp32.yaml +++ b/tests/components/sm2135/test.esp32.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2135/test.esp8266.yaml b/tests/components/sm2135/test.esp8266.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.esp8266.yaml +++ b/tests/components/sm2135/test.esp8266.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2135/test.rp2040.yaml b/tests/components/sm2135/test.rp2040.yaml index 9a0de60839..dade44d145 100644 --- a/tests/components/sm2135/test.rp2040.yaml +++ b/tests/components/sm2135/test.rp2040.yaml @@ -1,22 +1 @@ -sm2135: - clock_pin: 4 - data_pin: 5 - rgb_current: 20mA - cw_current: 60mA - -output: - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 +<<: !include common.yaml diff --git a/tests/components/sm2235/common.yaml b/tests/components/sm2235/common.yaml new file mode 100644 index 0000000000..043d43d6f1 --- /dev/null +++ b/tests/components/sm2235/common.yaml @@ -0,0 +1,22 @@ +sm2235: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2235 + id: sm2235_red + channel: 1 + - platform: sm2235 + id: sm2235_green + channel: 0 + - platform: sm2235 + id: sm2235_blue + channel: 2 + - platform: sm2235 + id: sm2235_coldwhite + channel: 4 + - platform: sm2235 + id: sm2235_warmwhite + channel: 3 diff --git a/tests/components/sm2235/test.esp32-c3-idf.yaml b/tests/components/sm2235/test.esp32-c3-idf.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.esp32-c3-idf.yaml +++ b/tests/components/sm2235/test.esp32-c3-idf.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2235/test.esp32-c3.yaml b/tests/components/sm2235/test.esp32-c3.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.esp32-c3.yaml +++ b/tests/components/sm2235/test.esp32-c3.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2235/test.esp32-idf.yaml b/tests/components/sm2235/test.esp32-idf.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.esp32-idf.yaml +++ b/tests/components/sm2235/test.esp32-idf.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2235/test.esp32.yaml b/tests/components/sm2235/test.esp32.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.esp32.yaml +++ b/tests/components/sm2235/test.esp32.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2235/test.esp8266.yaml b/tests/components/sm2235/test.esp8266.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.esp8266.yaml +++ b/tests/components/sm2235/test.esp8266.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2235/test.rp2040.yaml b/tests/components/sm2235/test.rp2040.yaml index 043d43d6f1..dade44d145 100644 --- a/tests/components/sm2235/test.rp2040.yaml +++ b/tests/components/sm2235/test.rp2040.yaml @@ -1,22 +1 @@ -sm2235: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2235 - id: sm2235_red - channel: 1 - - platform: sm2235 - id: sm2235_green - channel: 0 - - platform: sm2235 - id: sm2235_blue - channel: 2 - - platform: sm2235 - id: sm2235_coldwhite - channel: 4 - - platform: sm2235 - id: sm2235_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/common.yaml b/tests/components/sm2335/common.yaml new file mode 100644 index 0000000000..a5b2aedeb5 --- /dev/null +++ b/tests/components/sm2335/common.yaml @@ -0,0 +1,22 @@ +sm2335: + clock_pin: 4 + data_pin: 5 + max_power_color_channels: 9 + max_power_white_channels: 9 + +output: + - platform: sm2335 + id: sm2335_red + channel: 1 + - platform: sm2335 + id: sm2335_green + channel: 0 + - platform: sm2335 + id: sm2335_blue + channel: 2 + - platform: sm2335 + id: sm2335_coldwhite + channel: 4 + - platform: sm2335 + id: sm2335_warmwhite + channel: 3 diff --git a/tests/components/sm2335/test.esp32-c3-idf.yaml b/tests/components/sm2335/test.esp32-c3-idf.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.esp32-c3-idf.yaml +++ b/tests/components/sm2335/test.esp32-c3-idf.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/test.esp32-c3.yaml b/tests/components/sm2335/test.esp32-c3.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.esp32-c3.yaml +++ b/tests/components/sm2335/test.esp32-c3.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/test.esp32-idf.yaml b/tests/components/sm2335/test.esp32-idf.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.esp32-idf.yaml +++ b/tests/components/sm2335/test.esp32-idf.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/test.esp32.yaml b/tests/components/sm2335/test.esp32.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.esp32.yaml +++ b/tests/components/sm2335/test.esp32.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/test.esp8266.yaml b/tests/components/sm2335/test.esp8266.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.esp8266.yaml +++ b/tests/components/sm2335/test.esp8266.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sm2335/test.rp2040.yaml b/tests/components/sm2335/test.rp2040.yaml index a5b2aedeb5..dade44d145 100644 --- a/tests/components/sm2335/test.rp2040.yaml +++ b/tests/components/sm2335/test.rp2040.yaml @@ -1,22 +1 @@ -sm2335: - clock_pin: 4 - data_pin: 5 - max_power_color_channels: 9 - max_power_white_channels: 9 - -output: - - platform: sm2335 - id: sm2335_red - channel: 1 - - platform: sm2335 - id: sm2335_green - channel: 0 - - platform: sm2335 - id: sm2335_blue - channel: 2 - - platform: sm2335 - id: sm2335_coldwhite - channel: 4 - - platform: sm2335 - id: sm2335_warmwhite - channel: 3 +<<: !include common.yaml diff --git a/tests/components/sntp/common.yaml b/tests/components/sntp/common.yaml new file mode 100644 index 0000000000..3e9e465296 --- /dev/null +++ b/tests/components/sntp/common.yaml @@ -0,0 +1,15 @@ +wifi: + ssid: MySSID + password: password1 + +time: + - platform: sntp + id: sntp_time + servers: + - 0.pool.ntp.org + - 1.pool.ntp.org + - 192.168.178.1 + on_time: + cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" + then: + - lambda: 'ESP_LOGD("main", "time");' diff --git a/tests/components/sntp/test.esp32-c3-idf.yaml b/tests/components/sntp/test.esp32-c3-idf.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.esp32-c3-idf.yaml +++ b/tests/components/sntp/test.esp32-c3-idf.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sntp/test.esp32-c3.yaml b/tests/components/sntp/test.esp32-c3.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.esp32-c3.yaml +++ b/tests/components/sntp/test.esp32-c3.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sntp/test.esp32-idf.yaml b/tests/components/sntp/test.esp32-idf.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.esp32-idf.yaml +++ b/tests/components/sntp/test.esp32-idf.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sntp/test.esp32.yaml b/tests/components/sntp/test.esp32.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.esp32.yaml +++ b/tests/components/sntp/test.esp32.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sntp/test.esp8266.yaml b/tests/components/sntp/test.esp8266.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.esp8266.yaml +++ b/tests/components/sntp/test.esp8266.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sntp/test.rp2040.yaml b/tests/components/sntp/test.rp2040.yaml index 3e9e465296..dade44d145 100644 --- a/tests/components/sntp/test.rp2040.yaml +++ b/tests/components/sntp/test.rp2040.yaml @@ -1,15 +1 @@ -wifi: - ssid: MySSID - password: password1 - -time: - - platform: sntp - id: sntp_time - servers: - - 0.pool.ntp.org - - 1.pool.ntp.org - - 192.168.178.1 - on_time: - cron: "/30 0-30,30/5 * ? JAN-DEC MON,SAT-SUN,TUE-FRI" - then: - - lambda: 'ESP_LOGD("main", "time");' +<<: !include common.yaml diff --git a/tests/components/sprinkler/common.yaml b/tests/components/sprinkler/common.yaml new file mode 100644 index 0000000000..f099f77729 --- /dev/null +++ b/tests/components/sprinkler/common.yaml @@ -0,0 +1,83 @@ +esphome: + on_boot: + then: + - sprinkler.start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.start_from_queue: yard_sprinkler_ctrlr + - sprinkler.start_single_valve: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + - sprinkler.shutdown: yard_sprinkler_ctrlr + - sprinkler.next_valve: yard_sprinkler_ctrlr + - sprinkler.previous_valve: yard_sprinkler_ctrlr + - sprinkler.pause: yard_sprinkler_ctrlr + - sprinkler.resume: yard_sprinkler_ctrlr + - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr + - sprinkler.queue_valve: + id: yard_sprinkler_ctrlr + valve_number: 2 + run_duration: 900s + - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr + - sprinkler.set_multiplier: + id: yard_sprinkler_ctrlr + multiplier: 1.5 + - sprinkler.set_repeat: + id: yard_sprinkler_ctrlr + repeat: 2 + - sprinkler.set_divider: + id: yard_sprinkler_ctrlr + divider: 2 + - sprinkler.set_valve_run_duration: + id: yard_sprinkler_ctrlr + valve_number: 0 + run_duration: 600s + +switch: + - platform: template + id: switch1 + optimistic: true + - platform: template + id: switch2 + optimistic: true + +sprinkler: + - id: yard_sprinkler_ctrlr + main_switch: Yard Sprinklers + auto_advance_switch: Yard Sprinklers Auto Advance + reverse_switch: Yard Sprinklers Reverse + pump_start_pump_delay: 2s + pump_stop_valve_delay: 4s + pump_switch_off_during_valve_open_delay: true + valve_open_delay: 5s + valves: + - valve_switch: Yard Valve 0 + enable_switch: Enable Yard Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 1 + enable_switch: Enable Yard Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Yard Valve 2 + enable_switch: Enable Yard Valve 2 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - id: garden_sprinkler_ctrlr + main_switch: Garden Sprinklers + auto_advance_switch: Garden Sprinklers Auto Advance + reverse_switch: Garden Sprinklers Reverse + valve_overlap: 5s + valves: + - valve_switch: Garden Valve 0 + enable_switch: Enable Garden Valve 0 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 + - valve_switch: Garden Valve 1 + enable_switch: Enable Garden Valve 1 + pump_switch_id: switch1 + run_duration: 10s + valve_switch_id: switch2 diff --git a/tests/components/sprinkler/test.esp32-c3-idf.yaml b/tests/components/sprinkler/test.esp32-c3-idf.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.esp32-c3-idf.yaml +++ b/tests/components/sprinkler/test.esp32-c3-idf.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/sprinkler/test.esp32-c3.yaml b/tests/components/sprinkler/test.esp32-c3.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.esp32-c3.yaml +++ b/tests/components/sprinkler/test.esp32-c3.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/sprinkler/test.esp32-idf.yaml b/tests/components/sprinkler/test.esp32-idf.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.esp32-idf.yaml +++ b/tests/components/sprinkler/test.esp32-idf.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/sprinkler/test.esp32.yaml b/tests/components/sprinkler/test.esp32.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.esp32.yaml +++ b/tests/components/sprinkler/test.esp32.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/sprinkler/test.esp8266.yaml b/tests/components/sprinkler/test.esp8266.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.esp8266.yaml +++ b/tests/components/sprinkler/test.esp8266.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/sprinkler/test.rp2040.yaml b/tests/components/sprinkler/test.rp2040.yaml index f099f77729..dade44d145 100644 --- a/tests/components/sprinkler/test.rp2040.yaml +++ b/tests/components/sprinkler/test.rp2040.yaml @@ -1,83 +1 @@ -esphome: - on_boot: - then: - - sprinkler.start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.start_from_queue: yard_sprinkler_ctrlr - - sprinkler.start_single_valve: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - - sprinkler.shutdown: yard_sprinkler_ctrlr - - sprinkler.next_valve: yard_sprinkler_ctrlr - - sprinkler.previous_valve: yard_sprinkler_ctrlr - - sprinkler.pause: yard_sprinkler_ctrlr - - sprinkler.resume: yard_sprinkler_ctrlr - - sprinkler.resume_or_start_full_cycle: yard_sprinkler_ctrlr - - sprinkler.queue_valve: - id: yard_sprinkler_ctrlr - valve_number: 2 - run_duration: 900s - - sprinkler.clear_queued_valves: yard_sprinkler_ctrlr - - sprinkler.set_multiplier: - id: yard_sprinkler_ctrlr - multiplier: 1.5 - - sprinkler.set_repeat: - id: yard_sprinkler_ctrlr - repeat: 2 - - sprinkler.set_divider: - id: yard_sprinkler_ctrlr - divider: 2 - - sprinkler.set_valve_run_duration: - id: yard_sprinkler_ctrlr - valve_number: 0 - run_duration: 600s - -switch: - - platform: template - id: switch1 - optimistic: true - - platform: template - id: switch2 - optimistic: true - -sprinkler: - - id: yard_sprinkler_ctrlr - main_switch: Yard Sprinklers - auto_advance_switch: Yard Sprinklers Auto Advance - reverse_switch: Yard Sprinklers Reverse - pump_start_pump_delay: 2s - pump_stop_valve_delay: 4s - pump_switch_off_during_valve_open_delay: true - valve_open_delay: 5s - valves: - - valve_switch: Yard Valve 0 - enable_switch: Enable Yard Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 1 - enable_switch: Enable Yard Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Yard Valve 2 - enable_switch: Enable Yard Valve 2 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - id: garden_sprinkler_ctrlr - main_switch: Garden Sprinklers - auto_advance_switch: Garden Sprinklers Auto Advance - reverse_switch: Garden Sprinklers Reverse - valve_overlap: 5s - valves: - - valve_switch: Garden Valve 0 - enable_switch: Enable Garden Valve 0 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 - - valve_switch: Garden Valve 1 - enable_switch: Enable Garden Valve 1 - pump_switch_id: switch1 - run_duration: 10s - valve_switch_id: switch2 +<<: !include common.yaml diff --git a/tests/components/st7701s/common.yaml b/tests/components/st7701s/common.yaml new file mode 100644 index 0000000000..497df8c8ce --- /dev/null +++ b/tests/components/st7701s/common.yaml @@ -0,0 +1,60 @@ +psram: + mode: octal + speed: 80MHz +spi: + - id: lcd_spi + clk_pin: 41 + mosi_pin: 48 + +i2c: + sda: 39 + scl: 40 + scan: false + id: bus_a + +pca9554: + - id: p_c_a + pin_count: 16 + address: 0x20 + +display: + - platform: st7701s + spi_mode: MODE3 + color_order: RGB + dimensions: + width: 480 + height: 480 + invert_colors: true + transform: + mirror_x: true + mirror_y: true + cs_pin: + pca9554: p_c_a + number: 4 + reset_pin: + pca9554: p_c_a + number: 5 + de_pin: 18 + hsync_pin: 16 + vsync_pin: 17 + pclk_pin: 21 + init_sequence: 1 + data_pins: + - number: 0 + ignore_strapping_warning: true + - 1 + - 2 + - 3 + - number: 4 + ignore_strapping_warning: false + - 5 + - 6 + - 7 + - 8 + - 9 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 diff --git a/tests/components/st7701s/test.esp32-s3-idf.yaml b/tests/components/st7701s/test.esp32-s3-idf.yaml index 497df8c8ce..dade44d145 100644 --- a/tests/components/st7701s/test.esp32-s3-idf.yaml +++ b/tests/components/st7701s/test.esp32-s3-idf.yaml @@ -1,60 +1 @@ -psram: - mode: octal - speed: 80MHz -spi: - - id: lcd_spi - clk_pin: 41 - mosi_pin: 48 - -i2c: - sda: 39 - scl: 40 - scan: false - id: bus_a - -pca9554: - - id: p_c_a - pin_count: 16 - address: 0x20 - -display: - - platform: st7701s - spi_mode: MODE3 - color_order: RGB - dimensions: - width: 480 - height: 480 - invert_colors: true - transform: - mirror_x: true - mirror_y: true - cs_pin: - pca9554: p_c_a - number: 4 - reset_pin: - pca9554: p_c_a - number: 5 - de_pin: 18 - hsync_pin: 16 - vsync_pin: 17 - pclk_pin: 21 - init_sequence: 1 - data_pins: - - number: 0 - ignore_strapping_warning: true - - 1 - - 2 - - 3 - - number: 4 - ignore_strapping_warning: false - - 5 - - 6 - - 7 - - 8 - - 9 - - 10 - - 11 - - 12 - - 13 - - 14 - - 15 +<<: !include common.yaml diff --git a/tests/components/status/common.yaml b/tests/components/status/common.yaml new file mode 100644 index 0000000000..c14157566b --- /dev/null +++ b/tests/components/status/common.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +binary_sensor: + - platform: status + id: node_status + name: Node Status diff --git a/tests/components/status/test.esp32-c3-idf.yaml b/tests/components/status/test.esp32-c3-idf.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.esp32-c3-idf.yaml +++ b/tests/components/status/test.esp32-c3-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status/test.esp32-c3.yaml b/tests/components/status/test.esp32-c3.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.esp32-c3.yaml +++ b/tests/components/status/test.esp32-c3.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status/test.esp32-idf.yaml b/tests/components/status/test.esp32-idf.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.esp32-idf.yaml +++ b/tests/components/status/test.esp32-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status/test.esp32.yaml b/tests/components/status/test.esp32.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.esp32.yaml +++ b/tests/components/status/test.esp32.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status/test.esp8266.yaml b/tests/components/status/test.esp8266.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.esp8266.yaml +++ b/tests/components/status/test.esp8266.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status/test.rp2040.yaml b/tests/components/status/test.rp2040.yaml index c14157566b..dade44d145 100644 --- a/tests/components/status/test.rp2040.yaml +++ b/tests/components/status/test.rp2040.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -binary_sensor: - - platform: status - id: node_status - name: Node Status +<<: !include common.yaml diff --git a/tests/components/status_led/common.yaml b/tests/components/status_led/common.yaml new file mode 100644 index 0000000000..ec66c219d3 --- /dev/null +++ b/tests/components/status_led/common.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +light: + - platform: status_led + name: Switch State + pin: 4 diff --git a/tests/components/status_led/test.esp32-c3-idf.yaml b/tests/components/status_led/test.esp32-c3-idf.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.esp32-c3-idf.yaml +++ b/tests/components/status_led/test.esp32-c3-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/status_led/test.esp32-c3.yaml b/tests/components/status_led/test.esp32-c3.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.esp32-c3.yaml +++ b/tests/components/status_led/test.esp32-c3.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/status_led/test.esp32-idf.yaml b/tests/components/status_led/test.esp32-idf.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.esp32-idf.yaml +++ b/tests/components/status_led/test.esp32-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/status_led/test.esp32.yaml b/tests/components/status_led/test.esp32.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.esp32.yaml +++ b/tests/components/status_led/test.esp32.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/status_led/test.esp8266.yaml b/tests/components/status_led/test.esp8266.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.esp8266.yaml +++ b/tests/components/status_led/test.esp8266.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/status_led/test.rp2040.yaml b/tests/components/status_led/test.rp2040.yaml index ec66c219d3..dade44d145 100644 --- a/tests/components/status_led/test.rp2040.yaml +++ b/tests/components/status_led/test.rp2040.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -light: - - platform: status_led - name: Switch State - pin: 4 +<<: !include common.yaml diff --git a/tests/components/stepper/common.yaml b/tests/components/stepper/common.yaml new file mode 100644 index 0000000000..fcf5759618 --- /dev/null +++ b/tests/components/stepper/common.yaml @@ -0,0 +1,27 @@ +stepper: + - platform: a4988 + id: test_stepper + step_pin: 3 + dir_pin: 4 + sleep_pin: 5 + max_speed: 250 steps/s + acceleration: 100 steps/s^2 + deceleration: 200 steps/s^2 + +switch: + - platform: template + name: Stepper Switch + assumed_state: true + turn_on_action: + - stepper.set_target: + id: test_stepper + target: !lambda |- + static int32_t i = 0; + i += 1000; + if (i > 5000) { + i = -5000; + } + return i; + - stepper.report_position: + id: test_stepper + position: 0 diff --git a/tests/components/stepper/test.esp32-c3-idf.yaml b/tests/components/stepper/test.esp32-c3-idf.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.esp32-c3-idf.yaml +++ b/tests/components/stepper/test.esp32-c3-idf.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/stepper/test.esp32-c3.yaml b/tests/components/stepper/test.esp32-c3.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.esp32-c3.yaml +++ b/tests/components/stepper/test.esp32-c3.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/stepper/test.esp32-idf.yaml b/tests/components/stepper/test.esp32-idf.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.esp32-idf.yaml +++ b/tests/components/stepper/test.esp32-idf.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/stepper/test.esp32.yaml b/tests/components/stepper/test.esp32.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.esp32.yaml +++ b/tests/components/stepper/test.esp32.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/stepper/test.esp8266.yaml b/tests/components/stepper/test.esp8266.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.esp8266.yaml +++ b/tests/components/stepper/test.esp8266.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/stepper/test.rp2040.yaml b/tests/components/stepper/test.rp2040.yaml index fcf5759618..dade44d145 100644 --- a/tests/components/stepper/test.rp2040.yaml +++ b/tests/components/stepper/test.rp2040.yaml @@ -1,27 +1 @@ -stepper: - - platform: a4988 - id: test_stepper - step_pin: 3 - dir_pin: 4 - sleep_pin: 5 - max_speed: 250 steps/s - acceleration: 100 steps/s^2 - deceleration: 200 steps/s^2 - -switch: - - platform: template - name: Stepper Switch - assumed_state: true - turn_on_action: - - stepper.set_target: - id: test_stepper - target: !lambda |- - static int32_t i = 0; - i += 1000; - if (i > 5000) { - i = -5000; - } - return i; - - stepper.report_position: - id: test_stepper - position: 0 +<<: !include common.yaml diff --git a/tests/components/sun/common.yaml b/tests/components/sun/common.yaml new file mode 100644 index 0000000000..e0157424a0 --- /dev/null +++ b/tests/components/sun/common.yaml @@ -0,0 +1,38 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + id: homeassistant_time + +sun: + latitude: 48.8584° + longitude: 2.2945° + on_sunrise: + - then: + - logger.log: Good morning + - elevation: 5° + then: + - logger.log: Good morning again + on_sunset: + - then: + - logger.log: Good evening + +sensor: + - platform: sun + name: Sun Elevation + type: elevation + - platform: sun + name: Sun Azimuth + type: azimuth + +text_sensor: + - platform: sun + name: Sun Next Sunrise + type: sunrise + - platform: sun + name: Sun Next Sunset + type: sunset diff --git a/tests/components/sun/test.esp32-c3-idf.yaml b/tests/components/sun/test.esp32-c3-idf.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.esp32-c3-idf.yaml +++ b/tests/components/sun/test.esp32-c3-idf.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/sun/test.esp32-c3.yaml b/tests/components/sun/test.esp32-c3.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.esp32-c3.yaml +++ b/tests/components/sun/test.esp32-c3.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/sun/test.esp32-idf.yaml b/tests/components/sun/test.esp32-idf.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.esp32-idf.yaml +++ b/tests/components/sun/test.esp32-idf.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/sun/test.esp32.yaml b/tests/components/sun/test.esp32.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.esp32.yaml +++ b/tests/components/sun/test.esp32.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/sun/test.esp8266.yaml b/tests/components/sun/test.esp8266.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.esp8266.yaml +++ b/tests/components/sun/test.esp8266.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/sun/test.rp2040.yaml b/tests/components/sun/test.rp2040.yaml index e0157424a0..dade44d145 100644 --- a/tests/components/sun/test.rp2040.yaml +++ b/tests/components/sun/test.rp2040.yaml @@ -1,38 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - id: homeassistant_time - -sun: - latitude: 48.8584° - longitude: 2.2945° - on_sunrise: - - then: - - logger.log: Good morning - - elevation: 5° - then: - - logger.log: Good morning again - on_sunset: - - then: - - logger.log: Good evening - -sensor: - - platform: sun - name: Sun Elevation - type: elevation - - platform: sun - name: Sun Azimuth - type: azimuth - -text_sensor: - - platform: sun - name: Sun Next Sunrise - type: sunrise - - platform: sun - name: Sun Next Sunset - type: sunset +<<: !include common.yaml diff --git a/tests/components/thermostat/common.yaml b/tests/components/thermostat/common.yaml new file mode 100644 index 0000000000..d630a93efc --- /dev/null +++ b/tests/components/thermostat/common.yaml @@ -0,0 +1,93 @@ +sensor: + - platform: template + id: thermostat_sensor + lambda: "return 21;" + +climate: + - platform: thermostat + name: Test Thermostat + sensor: thermostat_sensor + humidity_sensor: thermostat_sensor + preset: + - name: Default Preset + default_target_temperature_low: 18°C + default_target_temperature_high: 24°C + - name: Away + default_target_temperature_low: 16°C + default_target_temperature_high: 20°C + idle_action: + - logger.log: idle_action + cool_action: + - logger.log: cool_action + supplemental_cooling_action: + - logger.log: supplemental_cooling_action + heat_action: + - logger.log: heat_action + supplemental_heating_action: + - logger.log: supplemental_heating_action + dry_action: + - logger.log: dry_action + fan_only_action: + - logger.log: fan_only_action + auto_mode: + - logger.log: auto_mode + off_mode: + - logger.log: off_mode + heat_mode: + - logger.log: heat_mode + cool_mode: + - logger.log: cool_mode + dry_mode: + - logger.log: dry_mode + fan_only_mode: + - logger.log: fan_only_mode + fan_mode_auto_action: + - logger.log: fan_mode_auto_action + fan_mode_on_action: + - logger.log: fan_mode_on_action + fan_mode_off_action: + - logger.log: fan_mode_off_action + fan_mode_low_action: + - logger.log: fan_mode_low_action + fan_mode_medium_action: + - logger.log: fan_mode_medium_action + fan_mode_high_action: + - logger.log: fan_mode_high_action + fan_mode_middle_action: + - logger.log: fan_mode_middle_action + fan_mode_focus_action: + - logger.log: fan_mode_focus_action + fan_mode_diffuse_action: + - logger.log: fan_mode_diffuse_action + fan_mode_quiet_action: + - logger.log: fan_mode_quiet_action + swing_off_action: + - logger.log: swing_off_action + swing_horizontal_action: + - logger.log: swing_horizontal_action + swing_vertical_action: + - logger.log: swing_vertical_action + swing_both_action: + - logger.log: swing_both_action + startup_delay: true + supplemental_cooling_delta: 2.0 + cool_deadband: 0.5 + cool_overrun: 0.5 + min_cooling_off_time: 300s + min_cooling_run_time: 300s + max_cooling_run_time: 600s + supplemental_heating_delta: 2.0 + heat_deadband: 0.5 + heat_overrun: 0.5 + min_heating_off_time: 300s + min_heating_run_time: 300s + max_heating_run_time: 600s + min_fanning_off_time: 30s + min_fanning_run_time: 30s + min_fan_mode_switching_time: 15s + min_idle_time: 30s + set_point_minimum_differential: 0.5 + fan_only_action_uses_fan_mode_timer: true + fan_only_cooling: true + fan_with_cooling: true + fan_with_heating: true diff --git a/tests/components/thermostat/test.esp32-c3-idf.yaml b/tests/components/thermostat/test.esp32-c3-idf.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.esp32-c3-idf.yaml +++ b/tests/components/thermostat/test.esp32-c3-idf.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/thermostat/test.esp32-c3.yaml b/tests/components/thermostat/test.esp32-c3.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.esp32-c3.yaml +++ b/tests/components/thermostat/test.esp32-c3.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/thermostat/test.esp32-idf.yaml b/tests/components/thermostat/test.esp32-idf.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.esp32-idf.yaml +++ b/tests/components/thermostat/test.esp32-idf.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/thermostat/test.esp32.yaml b/tests/components/thermostat/test.esp32.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.esp32.yaml +++ b/tests/components/thermostat/test.esp32.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/thermostat/test.esp8266.yaml b/tests/components/thermostat/test.esp8266.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.esp8266.yaml +++ b/tests/components/thermostat/test.esp8266.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/thermostat/test.rp2040.yaml b/tests/components/thermostat/test.rp2040.yaml index d630a93efc..dade44d145 100644 --- a/tests/components/thermostat/test.rp2040.yaml +++ b/tests/components/thermostat/test.rp2040.yaml @@ -1,93 +1 @@ -sensor: - - platform: template - id: thermostat_sensor - lambda: "return 21;" - -climate: - - platform: thermostat - name: Test Thermostat - sensor: thermostat_sensor - humidity_sensor: thermostat_sensor - preset: - - name: Default Preset - default_target_temperature_low: 18°C - default_target_temperature_high: 24°C - - name: Away - default_target_temperature_low: 16°C - default_target_temperature_high: 20°C - idle_action: - - logger.log: idle_action - cool_action: - - logger.log: cool_action - supplemental_cooling_action: - - logger.log: supplemental_cooling_action - heat_action: - - logger.log: heat_action - supplemental_heating_action: - - logger.log: supplemental_heating_action - dry_action: - - logger.log: dry_action - fan_only_action: - - logger.log: fan_only_action - auto_mode: - - logger.log: auto_mode - off_mode: - - logger.log: off_mode - heat_mode: - - logger.log: heat_mode - cool_mode: - - logger.log: cool_mode - dry_mode: - - logger.log: dry_mode - fan_only_mode: - - logger.log: fan_only_mode - fan_mode_auto_action: - - logger.log: fan_mode_auto_action - fan_mode_on_action: - - logger.log: fan_mode_on_action - fan_mode_off_action: - - logger.log: fan_mode_off_action - fan_mode_low_action: - - logger.log: fan_mode_low_action - fan_mode_medium_action: - - logger.log: fan_mode_medium_action - fan_mode_high_action: - - logger.log: fan_mode_high_action - fan_mode_middle_action: - - logger.log: fan_mode_middle_action - fan_mode_focus_action: - - logger.log: fan_mode_focus_action - fan_mode_diffuse_action: - - logger.log: fan_mode_diffuse_action - fan_mode_quiet_action: - - logger.log: fan_mode_quiet_action - swing_off_action: - - logger.log: swing_off_action - swing_horizontal_action: - - logger.log: swing_horizontal_action - swing_vertical_action: - - logger.log: swing_vertical_action - swing_both_action: - - logger.log: swing_both_action - startup_delay: true - supplemental_cooling_delta: 2.0 - cool_deadband: 0.5 - cool_overrun: 0.5 - min_cooling_off_time: 300s - min_cooling_run_time: 300s - max_cooling_run_time: 600s - supplemental_heating_delta: 2.0 - heat_deadband: 0.5 - heat_overrun: 0.5 - min_heating_off_time: 300s - min_heating_run_time: 300s - max_heating_run_time: 600s - min_fanning_off_time: 30s - min_fanning_run_time: 30s - min_fan_mode_switching_time: 15s - min_idle_time: 30s - set_point_minimum_differential: 0.5 - fan_only_action_uses_fan_mode_timer: true - fan_only_cooling: true - fan_with_cooling: true - fan_with_heating: true +<<: !include common.yaml diff --git a/tests/components/time/common.yaml b/tests/components/time/common.yaml new file mode 100644 index 0000000000..465be045db --- /dev/null +++ b/tests/components/time/common.yaml @@ -0,0 +1,10 @@ +wifi: + ssid: MySSID + password: password1 + +api: + +time: + - platform: homeassistant + - platform: sntp + id: sntp_time diff --git a/tests/components/time/test.esp32-c3-idf.yaml b/tests/components/time/test.esp32-c3-idf.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.esp32-c3-idf.yaml +++ b/tests/components/time/test.esp32-c3-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time/test.esp32-c3.yaml b/tests/components/time/test.esp32-c3.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.esp32-c3.yaml +++ b/tests/components/time/test.esp32-c3.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time/test.esp32-idf.yaml b/tests/components/time/test.esp32-idf.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.esp32-idf.yaml +++ b/tests/components/time/test.esp32-idf.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time/test.esp32.yaml b/tests/components/time/test.esp32.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.esp32.yaml +++ b/tests/components/time/test.esp32.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time/test.esp8266.yaml b/tests/components/time/test.esp8266.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.esp8266.yaml +++ b/tests/components/time/test.esp8266.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time/test.rp2040.yaml b/tests/components/time/test.rp2040.yaml index 465be045db..dade44d145 100644 --- a/tests/components/time/test.rp2040.yaml +++ b/tests/components/time/test.rp2040.yaml @@ -1,10 +1 @@ -wifi: - ssid: MySSID - password: password1 - -api: - -time: - - platform: homeassistant - - platform: sntp - id: sntp_time +<<: !include common.yaml diff --git a/tests/components/time_based/common.yaml b/tests/components/time_based/common.yaml new file mode 100644 index 0000000000..48c86de90f --- /dev/null +++ b/tests/components/time_based/common.yaml @@ -0,0 +1,12 @@ +cover: + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - logger.log: stop_action + open_action: + - logger.log: open_action + open_duration: 5min + close_action: + - logger.log: close_action + close_duration: 4.5min diff --git a/tests/components/time_based/test.esp32-c3-idf.yaml b/tests/components/time_based/test.esp32-c3-idf.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.esp32-c3-idf.yaml +++ b/tests/components/time_based/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/time_based/test.esp32-c3.yaml b/tests/components/time_based/test.esp32-c3.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.esp32-c3.yaml +++ b/tests/components/time_based/test.esp32-c3.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/time_based/test.esp32-idf.yaml b/tests/components/time_based/test.esp32-idf.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.esp32-idf.yaml +++ b/tests/components/time_based/test.esp32-idf.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/time_based/test.esp32.yaml b/tests/components/time_based/test.esp32.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.esp32.yaml +++ b/tests/components/time_based/test.esp32.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/time_based/test.esp8266.yaml b/tests/components/time_based/test.esp8266.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.esp8266.yaml +++ b/tests/components/time_based/test.esp8266.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/time_based/test.rp2040.yaml b/tests/components/time_based/test.rp2040.yaml index 48c86de90f..dade44d145 100644 --- a/tests/components/time_based/test.rp2040.yaml +++ b/tests/components/time_based/test.rp2040.yaml @@ -1,12 +1 @@ -cover: - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - logger.log: stop_action - open_action: - - logger.log: open_action - open_duration: 5min - close_action: - - logger.log: close_action - close_duration: 4.5min +<<: !include common.yaml diff --git a/tests/components/tm1638/common.yaml b/tests/components/tm1638/common.yaml new file mode 100644 index 0000000000..b0c5cef528 --- /dev/null +++ b/tests/components/tm1638/common.yaml @@ -0,0 +1,118 @@ +display: + - platform: tm1638 + id: tm1638_display + stb_pin: 2 + clk_pin: 5 + dio_pin: 4 + update_interval: 5s + intensity: 5 + lambda: |- + it.print("81818181"); + +binary_sensor: + - platform: tm1638 + id: Button0 + key: 0 + filters: + - delayed_on: 10ms + on_press: + then: + - switch.turn_on: Led0 + on_release: + then: + - switch.turn_off: Led0 + - platform: tm1638 + id: Button1 + key: 1 + on_press: + then: + - switch.turn_on: Led1 + on_release: + then: + - switch.turn_off: Led1 + - platform: tm1638 + id: Button2 + key: 2 + on_press: + then: + - switch.turn_on: Led2 + on_release: + then: + - switch.turn_off: Led2 + - platform: tm1638 + id: Button3 + key: 3 + on_press: + then: + - switch.turn_on: Led3 + on_release: + then: + - switch.turn_off: Led3 + - platform: tm1638 + id: Button4 + key: 4 + on_press: + then: + - output.turn_on: Led4 + on_release: + then: + - output.turn_off: Led4 + - platform: tm1638 + id: Button5 + key: 5 + on_press: + then: + - output.turn_on: Led5 + on_release: + then: + - output.turn_off: Led5 + - platform: tm1638 + id: Button6 + key: 6 + on_press: + then: + - output.turn_on: Led6 + on_release: + then: + - output.turn_off: Led6 + - platform: tm1638 + id: Button7 + key: 7 + on_press: + then: + - output.turn_on: Led7 + on_release: + then: + - output.turn_off: Led7 + +switch: + - platform: tm1638 + id: Led0 + led: 0 + name: TM1638Led0 + - platform: tm1638 + id: Led1 + led: 1 + name: TM1638Led1 + - platform: tm1638 + id: Led2 + led: 2 + name: TM1638Led2 + - platform: tm1638 + id: Led3 + led: 3 + name: TM1638Led3 + +output: + - platform: tm1638 + id: Led4 + led: 4 + - platform: tm1638 + id: Led5 + led: 5 + - platform: tm1638 + id: Led6 + led: 6 + - platform: tm1638 + id: Led7 + led: 7 diff --git a/tests/components/tm1638/test.esp32-c3-idf.yaml b/tests/components/tm1638/test.esp32-c3-idf.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.esp32-c3-idf.yaml +++ b/tests/components/tm1638/test.esp32-c3-idf.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1638/test.esp32-c3.yaml b/tests/components/tm1638/test.esp32-c3.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.esp32-c3.yaml +++ b/tests/components/tm1638/test.esp32-c3.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1638/test.esp32-idf.yaml b/tests/components/tm1638/test.esp32-idf.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.esp32-idf.yaml +++ b/tests/components/tm1638/test.esp32-idf.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1638/test.esp32.yaml b/tests/components/tm1638/test.esp32.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.esp32.yaml +++ b/tests/components/tm1638/test.esp32.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1638/test.esp8266.yaml b/tests/components/tm1638/test.esp8266.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.esp8266.yaml +++ b/tests/components/tm1638/test.esp8266.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1638/test.rp2040.yaml b/tests/components/tm1638/test.rp2040.yaml index b0c5cef528..dade44d145 100644 --- a/tests/components/tm1638/test.rp2040.yaml +++ b/tests/components/tm1638/test.rp2040.yaml @@ -1,118 +1 @@ -display: - - platform: tm1638 - id: tm1638_display - stb_pin: 2 - clk_pin: 5 - dio_pin: 4 - update_interval: 5s - intensity: 5 - lambda: |- - it.print("81818181"); - -binary_sensor: - - platform: tm1638 - id: Button0 - key: 0 - filters: - - delayed_on: 10ms - on_press: - then: - - switch.turn_on: Led0 - on_release: - then: - - switch.turn_off: Led0 - - platform: tm1638 - id: Button1 - key: 1 - on_press: - then: - - switch.turn_on: Led1 - on_release: - then: - - switch.turn_off: Led1 - - platform: tm1638 - id: Button2 - key: 2 - on_press: - then: - - switch.turn_on: Led2 - on_release: - then: - - switch.turn_off: Led2 - - platform: tm1638 - id: Button3 - key: 3 - on_press: - then: - - switch.turn_on: Led3 - on_release: - then: - - switch.turn_off: Led3 - - platform: tm1638 - id: Button4 - key: 4 - on_press: - then: - - output.turn_on: Led4 - on_release: - then: - - output.turn_off: Led4 - - platform: tm1638 - id: Button5 - key: 5 - on_press: - then: - - output.turn_on: Led5 - on_release: - then: - - output.turn_off: Led5 - - platform: tm1638 - id: Button6 - key: 6 - on_press: - then: - - output.turn_on: Led6 - on_release: - then: - - output.turn_off: Led6 - - platform: tm1638 - id: Button7 - key: 7 - on_press: - then: - - output.turn_on: Led7 - on_release: - then: - - output.turn_off: Led7 - -switch: - - platform: tm1638 - id: Led0 - led: 0 - name: TM1638Led0 - - platform: tm1638 - id: Led1 - led: 1 - name: TM1638Led1 - - platform: tm1638 - id: Led2 - led: 2 - name: TM1638Led2 - - platform: tm1638 - id: Led3 - led: 3 - name: TM1638Led3 - -output: - - platform: tm1638 - id: Led4 - led: 4 - - platform: tm1638 - id: Led5 - led: 5 - - platform: tm1638 - id: Led6 - led: 6 - - platform: tm1638 - id: Led7 - led: 7 +<<: !include common.yaml diff --git a/tests/components/tm1651/common.yaml b/tests/components/tm1651/common.yaml new file mode 100644 index 0000000000..667648f4d6 --- /dev/null +++ b/tests/components/tm1651/common.yaml @@ -0,0 +1,21 @@ +tm1651: + id: tm1651_battery + clk_pin: 5 + dio_pin: 4 + +esphome: + on_boot: + then: + - tm1651.set_level_percent: + id: tm1651_battery + level_percent: 50 + - tm1651.set_level: + id: tm1651_battery + level: 5 + - tm1651.set_brightness: + id: tm1651_battery + brightness: 2 + - tm1651.turn_on: + id: tm1651_battery + - tm1651.turn_off: + id: tm1651_battery diff --git a/tests/components/tm1651/test.esp32-c3.yaml b/tests/components/tm1651/test.esp32-c3.yaml index 667648f4d6..dade44d145 100644 --- a/tests/components/tm1651/test.esp32-c3.yaml +++ b/tests/components/tm1651/test.esp32-c3.yaml @@ -1,21 +1 @@ -tm1651: - id: tm1651_battery - clk_pin: 5 - dio_pin: 4 - -esphome: - on_boot: - then: - - tm1651.set_level_percent: - id: tm1651_battery - level_percent: 50 - - tm1651.set_level: - id: tm1651_battery - level: 5 - - tm1651.set_brightness: - id: tm1651_battery - brightness: 2 - - tm1651.turn_on: - id: tm1651_battery - - tm1651.turn_off: - id: tm1651_battery +<<: !include common.yaml diff --git a/tests/components/tm1651/test.esp32.yaml b/tests/components/tm1651/test.esp32.yaml index 667648f4d6..dade44d145 100644 --- a/tests/components/tm1651/test.esp32.yaml +++ b/tests/components/tm1651/test.esp32.yaml @@ -1,21 +1 @@ -tm1651: - id: tm1651_battery - clk_pin: 5 - dio_pin: 4 - -esphome: - on_boot: - then: - - tm1651.set_level_percent: - id: tm1651_battery - level_percent: 50 - - tm1651.set_level: - id: tm1651_battery - level: 5 - - tm1651.set_brightness: - id: tm1651_battery - brightness: 2 - - tm1651.turn_on: - id: tm1651_battery - - tm1651.turn_off: - id: tm1651_battery +<<: !include common.yaml diff --git a/tests/components/tm1651/test.esp8266.yaml b/tests/components/tm1651/test.esp8266.yaml index 667648f4d6..dade44d145 100644 --- a/tests/components/tm1651/test.esp8266.yaml +++ b/tests/components/tm1651/test.esp8266.yaml @@ -1,21 +1 @@ -tm1651: - id: tm1651_battery - clk_pin: 5 - dio_pin: 4 - -esphome: - on_boot: - then: - - tm1651.set_level_percent: - id: tm1651_battery - level_percent: 50 - - tm1651.set_level: - id: tm1651_battery - level: 5 - - tm1651.set_brightness: - id: tm1651_battery - brightness: 2 - - tm1651.turn_on: - id: tm1651_battery - - tm1651.turn_off: - id: tm1651_battery +<<: !include common.yaml diff --git a/tests/components/tm1651/test.rp2040.yaml b/tests/components/tm1651/test.rp2040.yaml index 667648f4d6..dade44d145 100644 --- a/tests/components/tm1651/test.rp2040.yaml +++ b/tests/components/tm1651/test.rp2040.yaml @@ -1,21 +1 @@ -tm1651: - id: tm1651_battery - clk_pin: 5 - dio_pin: 4 - -esphome: - on_boot: - then: - - tm1651.set_level_percent: - id: tm1651_battery - level_percent: 50 - - tm1651.set_level: - id: tm1651_battery - level: 5 - - tm1651.set_brightness: - id: tm1651_battery - brightness: 2 - - tm1651.turn_on: - id: tm1651_battery - - tm1651.turn_off: - id: tm1651_battery +<<: !include common.yaml diff --git a/tests/components/tx20/common.yaml b/tests/components/tx20/common.yaml new file mode 100644 index 0000000000..d826059320 --- /dev/null +++ b/tests/components/tx20/common.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: tx20 + wind_speed: + name: Windspeed + wind_direction_degrees: + name: Winddirection Degrees + pin: 4 diff --git a/tests/components/tx20/test.esp32-c3-idf.yaml b/tests/components/tx20/test.esp32-c3-idf.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.esp32-c3-idf.yaml +++ b/tests/components/tx20/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/tx20/test.esp32-c3.yaml b/tests/components/tx20/test.esp32-c3.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.esp32-c3.yaml +++ b/tests/components/tx20/test.esp32-c3.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/tx20/test.esp32-idf.yaml b/tests/components/tx20/test.esp32-idf.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.esp32-idf.yaml +++ b/tests/components/tx20/test.esp32-idf.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/tx20/test.esp32.yaml b/tests/components/tx20/test.esp32.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.esp32.yaml +++ b/tests/components/tx20/test.esp32.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/tx20/test.esp8266.yaml b/tests/components/tx20/test.esp8266.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.esp8266.yaml +++ b/tests/components/tx20/test.esp8266.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/tx20/test.rp2040.yaml b/tests/components/tx20/test.rp2040.yaml index d826059320..dade44d145 100644 --- a/tests/components/tx20/test.rp2040.yaml +++ b/tests/components/tx20/test.rp2040.yaml @@ -1,7 +1 @@ -sensor: - - platform: tx20 - wind_speed: - name: Windspeed - wind_direction_degrees: - name: Winddirection Degrees - pin: 4 +<<: !include common.yaml diff --git a/tests/components/ultrasonic/common.yaml b/tests/components/ultrasonic/common.yaml new file mode 100644 index 0000000000..f1f673d918 --- /dev/null +++ b/tests/components/ultrasonic/common.yaml @@ -0,0 +1,7 @@ +sensor: + - platform: ultrasonic + id: ultrasonic_sensor1 + name: Ultrasonic Sensor + echo_pin: 4 + trigger_pin: 5 + timeout: 5.5m diff --git a/tests/components/ultrasonic/test.esp32-c3-idf.yaml b/tests/components/ultrasonic/test.esp32-c3-idf.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.esp32-c3-idf.yaml +++ b/tests/components/ultrasonic/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/ultrasonic/test.esp32-c3.yaml b/tests/components/ultrasonic/test.esp32-c3.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.esp32-c3.yaml +++ b/tests/components/ultrasonic/test.esp32-c3.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/ultrasonic/test.esp32-idf.yaml b/tests/components/ultrasonic/test.esp32-idf.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.esp32-idf.yaml +++ b/tests/components/ultrasonic/test.esp32-idf.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/ultrasonic/test.esp32.yaml b/tests/components/ultrasonic/test.esp32.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.esp32.yaml +++ b/tests/components/ultrasonic/test.esp32.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/ultrasonic/test.esp8266.yaml b/tests/components/ultrasonic/test.esp8266.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.esp8266.yaml +++ b/tests/components/ultrasonic/test.esp8266.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/ultrasonic/test.rp2040.yaml b/tests/components/ultrasonic/test.rp2040.yaml index f1f673d918..dade44d145 100644 --- a/tests/components/ultrasonic/test.rp2040.yaml +++ b/tests/components/ultrasonic/test.rp2040.yaml @@ -1,7 +1 @@ -sensor: - - platform: ultrasonic - id: ultrasonic_sensor1 - name: Ultrasonic Sensor - echo_pin: 4 - trigger_pin: 5 - timeout: 5.5m +<<: !include common.yaml diff --git a/tests/components/uptime/common.yaml b/tests/components/uptime/common.yaml new file mode 100644 index 0000000000..872a0e7402 --- /dev/null +++ b/tests/components/uptime/common.yaml @@ -0,0 +1,3 @@ +sensor: + - platform: uptime + name: Uptime Sensor diff --git a/tests/components/uptime/test.esp32-c3-idf.yaml b/tests/components/uptime/test.esp32-c3-idf.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.esp32-c3-idf.yaml +++ b/tests/components/uptime/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/uptime/test.esp32-c3.yaml b/tests/components/uptime/test.esp32-c3.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.esp32-c3.yaml +++ b/tests/components/uptime/test.esp32-c3.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/uptime/test.esp32-idf.yaml b/tests/components/uptime/test.esp32-idf.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.esp32-idf.yaml +++ b/tests/components/uptime/test.esp32-idf.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/uptime/test.esp32.yaml b/tests/components/uptime/test.esp32.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.esp32.yaml +++ b/tests/components/uptime/test.esp32.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/uptime/test.esp8266.yaml b/tests/components/uptime/test.esp8266.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.esp8266.yaml +++ b/tests/components/uptime/test.esp8266.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/uptime/test.rp2040.yaml b/tests/components/uptime/test.rp2040.yaml index 872a0e7402..dade44d145 100644 --- a/tests/components/uptime/test.rp2040.yaml +++ b/tests/components/uptime/test.rp2040.yaml @@ -1,3 +1 @@ -sensor: - - platform: uptime - name: Uptime Sensor +<<: !include common.yaml diff --git a/tests/components/version/common.yaml b/tests/components/version/common.yaml new file mode 100644 index 0000000000..7713afc37c --- /dev/null +++ b/tests/components/version/common.yaml @@ -0,0 +1,3 @@ +text_sensor: + - platform: version + name: "ESPHome Version" diff --git a/tests/components/version/test.esp32-c3-idf.yaml b/tests/components/version/test.esp32-c3-idf.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.esp32-c3-idf.yaml +++ b/tests/components/version/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/version/test.esp32-c3.yaml b/tests/components/version/test.esp32-c3.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.esp32-c3.yaml +++ b/tests/components/version/test.esp32-c3.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/version/test.esp32-idf.yaml b/tests/components/version/test.esp32-idf.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.esp32-idf.yaml +++ b/tests/components/version/test.esp32-idf.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/version/test.esp32.yaml b/tests/components/version/test.esp32.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.esp32.yaml +++ b/tests/components/version/test.esp32.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/version/test.esp8266.yaml b/tests/components/version/test.esp8266.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.esp8266.yaml +++ b/tests/components/version/test.esp8266.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/version/test.rp2040.yaml b/tests/components/version/test.rp2040.yaml index 7713afc37c..dade44d145 100644 --- a/tests/components/version/test.rp2040.yaml +++ b/tests/components/version/test.rp2040.yaml @@ -1,3 +1 @@ -text_sensor: - - platform: version - name: "ESPHome Version" +<<: !include common.yaml diff --git a/tests/components/wake_on_lan/common.yaml b/tests/components/wake_on_lan/common.yaml new file mode 100644 index 0000000000..6a5351b624 --- /dev/null +++ b/tests/components/wake_on_lan/common.yaml @@ -0,0 +1,9 @@ +wifi: + ssid: MySSID + password: password1 + +button: + - platform: wake_on_lan + id: wol_1 + name: wol_test_1 + target_mac_address: 12:34:56:78:90:ab diff --git a/tests/components/wake_on_lan/test.esp32-c3.yaml b/tests/components/wake_on_lan/test.esp32-c3.yaml index 6a5351b624..dade44d145 100644 --- a/tests/components/wake_on_lan/test.esp32-c3.yaml +++ b/tests/components/wake_on_lan/test.esp32-c3.yaml @@ -1,9 +1 @@ -wifi: - ssid: MySSID - password: password1 - -button: - - platform: wake_on_lan - id: wol_1 - name: wol_test_1 - target_mac_address: 12:34:56:78:90:ab +<<: !include common.yaml diff --git a/tests/components/wake_on_lan/test.esp32.yaml b/tests/components/wake_on_lan/test.esp32.yaml index 6a5351b624..dade44d145 100644 --- a/tests/components/wake_on_lan/test.esp32.yaml +++ b/tests/components/wake_on_lan/test.esp32.yaml @@ -1,9 +1 @@ -wifi: - ssid: MySSID - password: password1 - -button: - - platform: wake_on_lan - id: wol_1 - name: wol_test_1 - target_mac_address: 12:34:56:78:90:ab +<<: !include common.yaml diff --git a/tests/components/wake_on_lan/test.esp8266.yaml b/tests/components/wake_on_lan/test.esp8266.yaml index 6a5351b624..dade44d145 100644 --- a/tests/components/wake_on_lan/test.esp8266.yaml +++ b/tests/components/wake_on_lan/test.esp8266.yaml @@ -1,9 +1 @@ -wifi: - ssid: MySSID - password: password1 - -button: - - platform: wake_on_lan - id: wol_1 - name: wol_test_1 - target_mac_address: 12:34:56:78:90:ab +<<: !include common.yaml diff --git a/tests/components/wake_on_lan/test.rp2040.yaml b/tests/components/wake_on_lan/test.rp2040.yaml index 6a5351b624..dade44d145 100644 --- a/tests/components/wake_on_lan/test.rp2040.yaml +++ b/tests/components/wake_on_lan/test.rp2040.yaml @@ -1,9 +1 @@ -wifi: - ssid: MySSID - password: password1 - -button: - - platform: wake_on_lan - id: wol_1 - name: wol_test_1 - target_mac_address: 12:34:56:78:90:ab +<<: !include common.yaml diff --git a/tests/components/web_server/common.yaml b/tests/components/web_server/common.yaml new file mode 100644 index 0000000000..94388726c3 --- /dev/null +++ b/tests/components/web_server/common.yaml @@ -0,0 +1,7 @@ +wifi: + ssid: MySSID + password: password1 + +web_server: + port: 8080 + version: 2 diff --git a/tests/components/web_server/test.esp32-c3-idf.yaml b/tests/components/web_server/test.esp32-c3-idf.yaml index 94388726c3..dade44d145 100644 --- a/tests/components/web_server/test.esp32-c3-idf.yaml +++ b/tests/components/web_server/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -wifi: - ssid: MySSID - password: password1 - -web_server: - port: 8080 - version: 2 +<<: !include common.yaml diff --git a/tests/components/web_server/test.esp32-c3.yaml b/tests/components/web_server/test.esp32-c3.yaml index 94388726c3..dade44d145 100644 --- a/tests/components/web_server/test.esp32-c3.yaml +++ b/tests/components/web_server/test.esp32-c3.yaml @@ -1,7 +1 @@ -wifi: - ssid: MySSID - password: password1 - -web_server: - port: 8080 - version: 2 +<<: !include common.yaml diff --git a/tests/components/web_server/test.esp32-idf.yaml b/tests/components/web_server/test.esp32-idf.yaml index 94388726c3..dade44d145 100644 --- a/tests/components/web_server/test.esp32-idf.yaml +++ b/tests/components/web_server/test.esp32-idf.yaml @@ -1,7 +1 @@ -wifi: - ssid: MySSID - password: password1 - -web_server: - port: 8080 - version: 2 +<<: !include common.yaml diff --git a/tests/components/web_server/test.esp32.yaml b/tests/components/web_server/test.esp32.yaml index 94388726c3..dade44d145 100644 --- a/tests/components/web_server/test.esp32.yaml +++ b/tests/components/web_server/test.esp32.yaml @@ -1,7 +1 @@ -wifi: - ssid: MySSID - password: password1 - -web_server: - port: 8080 - version: 2 +<<: !include common.yaml diff --git a/tests/components/web_server/test.esp8266.yaml b/tests/components/web_server/test.esp8266.yaml index 94388726c3..dade44d145 100644 --- a/tests/components/web_server/test.esp8266.yaml +++ b/tests/components/web_server/test.esp8266.yaml @@ -1,7 +1 @@ -wifi: - ssid: MySSID - password: password1 - -web_server: - port: 8080 - version: 2 +<<: !include common.yaml diff --git a/tests/components/wiegand/common.yaml b/tests/components/wiegand/common.yaml new file mode 100644 index 0000000000..4e15a44b89 --- /dev/null +++ b/tests/components/wiegand/common.yaml @@ -0,0 +1,10 @@ +wiegand: + - id: test_wiegand + d0: 5 + d1: 4 + on_key: + - lambda: ESP_LOGI("KEY", "Received key %d", x); + on_tag: + - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); + on_raw: + - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); diff --git a/tests/components/wiegand/test.esp32-c3-idf.yaml b/tests/components/wiegand/test.esp32-c3-idf.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.esp32-c3-idf.yaml +++ b/tests/components/wiegand/test.esp32-c3-idf.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wiegand/test.esp32-c3.yaml b/tests/components/wiegand/test.esp32-c3.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.esp32-c3.yaml +++ b/tests/components/wiegand/test.esp32-c3.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wiegand/test.esp32-idf.yaml b/tests/components/wiegand/test.esp32-idf.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.esp32-idf.yaml +++ b/tests/components/wiegand/test.esp32-idf.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wiegand/test.esp32.yaml b/tests/components/wiegand/test.esp32.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.esp32.yaml +++ b/tests/components/wiegand/test.esp32.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wiegand/test.esp8266.yaml b/tests/components/wiegand/test.esp8266.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.esp8266.yaml +++ b/tests/components/wiegand/test.esp8266.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wiegand/test.rp2040.yaml b/tests/components/wiegand/test.rp2040.yaml index 4e15a44b89..dade44d145 100644 --- a/tests/components/wiegand/test.rp2040.yaml +++ b/tests/components/wiegand/test.rp2040.yaml @@ -1,10 +1 @@ -wiegand: - - id: test_wiegand - d0: 5 - d1: 4 - on_key: - - lambda: ESP_LOGI("KEY", "Received key %d", x); - on_tag: - - lambda: ESP_LOGI("TAG", "Received tag %s", x.c_str()); - on_raw: - - lambda: ESP_LOGI("RAW", "Received raw %d bits, value %llx", bits, value); +<<: !include common.yaml diff --git a/tests/components/wifi/common.yaml b/tests/components/wifi/common.yaml new file mode 100644 index 0000000000..003f6347be --- /dev/null +++ b/tests/components/wifi/common.yaml @@ -0,0 +1,9 @@ +esphome: + on_boot: + then: + - wifi.disable + - wifi.enable + +wifi: + ssid: MySSID + password: password1 diff --git a/tests/components/wifi/test.esp32-c3-idf.yaml b/tests/components/wifi/test.esp32-c3-idf.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.esp32-c3-idf.yaml +++ b/tests/components/wifi/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi/test.esp32-c3.yaml b/tests/components/wifi/test.esp32-c3.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.esp32-c3.yaml +++ b/tests/components/wifi/test.esp32-c3.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi/test.esp32-idf.yaml b/tests/components/wifi/test.esp32-idf.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.esp32-idf.yaml +++ b/tests/components/wifi/test.esp32-idf.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi/test.esp32.yaml b/tests/components/wifi/test.esp32.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.esp32.yaml +++ b/tests/components/wifi/test.esp32.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi/test.esp8266.yaml b/tests/components/wifi/test.esp8266.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.esp8266.yaml +++ b/tests/components/wifi/test.esp8266.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi/test.rp2040.yaml b/tests/components/wifi/test.rp2040.yaml index 003f6347be..dade44d145 100644 --- a/tests/components/wifi/test.rp2040.yaml +++ b/tests/components/wifi/test.rp2040.yaml @@ -1,9 +1 @@ -esphome: - on_boot: - then: - - wifi.disable - - wifi.enable - -wifi: - ssid: MySSID - password: password1 +<<: !include common.yaml diff --git a/tests/components/wifi_info/common.yaml b/tests/components/wifi_info/common.yaml new file mode 100644 index 0000000000..cf5ea563ba --- /dev/null +++ b/tests/components/wifi_info/common.yaml @@ -0,0 +1,18 @@ +wifi: + ssid: MySSID + password: password1 + +text_sensor: + - platform: wifi_info + scan_results: + name: Scan Results + ip_address: + name: IP Address + ssid: + name: SSID + bssid: + name: BSSID + mac_address: + name: Mac Address + dns_address: + name: DNS ADdress diff --git a/tests/components/wifi_info/test.esp32-c3-idf.yaml b/tests/components/wifi_info/test.esp32-c3-idf.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.esp32-c3-idf.yaml +++ b/tests/components/wifi_info/test.esp32-c3-idf.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_info/test.esp32-c3.yaml b/tests/components/wifi_info/test.esp32-c3.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.esp32-c3.yaml +++ b/tests/components/wifi_info/test.esp32-c3.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_info/test.esp32-idf.yaml b/tests/components/wifi_info/test.esp32-idf.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.esp32-idf.yaml +++ b/tests/components/wifi_info/test.esp32-idf.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_info/test.esp32.yaml b/tests/components/wifi_info/test.esp32.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.esp32.yaml +++ b/tests/components/wifi_info/test.esp32.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_info/test.esp8266.yaml b/tests/components/wifi_info/test.esp8266.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.esp8266.yaml +++ b/tests/components/wifi_info/test.esp8266.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_info/test.rp2040.yaml b/tests/components/wifi_info/test.rp2040.yaml index cf5ea563ba..dade44d145 100644 --- a/tests/components/wifi_info/test.rp2040.yaml +++ b/tests/components/wifi_info/test.rp2040.yaml @@ -1,18 +1 @@ -wifi: - ssid: MySSID - password: password1 - -text_sensor: - - platform: wifi_info - scan_results: - name: Scan Results - ip_address: - name: IP Address - ssid: - name: SSID - bssid: - name: BSSID - mac_address: - name: Mac Address - dns_address: - name: DNS ADdress +<<: !include common.yaml diff --git a/tests/components/wifi_signal/common.yaml b/tests/components/wifi_signal/common.yaml new file mode 100644 index 0000000000..58d1cab244 --- /dev/null +++ b/tests/components/wifi_signal/common.yaml @@ -0,0 +1,8 @@ +wifi: + ssid: MySSID + password: password1 + +sensor: + - platform: wifi_signal + name: WiFi Signal Sensor + update_interval: 15s diff --git a/tests/components/wifi_signal/test.esp32-c3-idf.yaml b/tests/components/wifi_signal/test.esp32-c3-idf.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.esp32-c3-idf.yaml +++ b/tests/components/wifi_signal/test.esp32-c3-idf.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/wifi_signal/test.esp32-c3.yaml b/tests/components/wifi_signal/test.esp32-c3.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.esp32-c3.yaml +++ b/tests/components/wifi_signal/test.esp32-c3.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/wifi_signal/test.esp32-idf.yaml b/tests/components/wifi_signal/test.esp32-idf.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.esp32-idf.yaml +++ b/tests/components/wifi_signal/test.esp32-idf.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/wifi_signal/test.esp32.yaml b/tests/components/wifi_signal/test.esp32.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.esp32.yaml +++ b/tests/components/wifi_signal/test.esp32.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/wifi_signal/test.esp8266.yaml b/tests/components/wifi_signal/test.esp8266.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.esp8266.yaml +++ b/tests/components/wifi_signal/test.esp8266.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/wifi_signal/test.rp2040.yaml b/tests/components/wifi_signal/test.rp2040.yaml index 58d1cab244..dade44d145 100644 --- a/tests/components/wifi_signal/test.rp2040.yaml +++ b/tests/components/wifi_signal/test.rp2040.yaml @@ -1,8 +1 @@ -wifi: - ssid: MySSID - password: password1 - -sensor: - - platform: wifi_signal - name: WiFi Signal Sensor - update_interval: 15s +<<: !include common.yaml diff --git a/tests/components/xiaomi_ble/common.yaml b/tests/components/xiaomi_ble/common.yaml new file mode 100644 index 0000000000..9d10393177 --- /dev/null +++ b/tests/components/xiaomi_ble/common.yaml @@ -0,0 +1,3 @@ +esp32_ble_tracker: + +xiaomi_ble: diff --git a/tests/components/xiaomi_ble/test.esp32-c3-idf.yaml b/tests/components/xiaomi_ble/test.esp32-c3-idf.yaml index 9d10393177..dade44d145 100644 --- a/tests/components/xiaomi_ble/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_ble/test.esp32-c3-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -xiaomi_ble: +<<: !include common.yaml diff --git a/tests/components/xiaomi_ble/test.esp32-c3.yaml b/tests/components/xiaomi_ble/test.esp32-c3.yaml index 9d10393177..dade44d145 100644 --- a/tests/components/xiaomi_ble/test.esp32-c3.yaml +++ b/tests/components/xiaomi_ble/test.esp32-c3.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -xiaomi_ble: +<<: !include common.yaml diff --git a/tests/components/xiaomi_ble/test.esp32-idf.yaml b/tests/components/xiaomi_ble/test.esp32-idf.yaml index 9d10393177..dade44d145 100644 --- a/tests/components/xiaomi_ble/test.esp32-idf.yaml +++ b/tests/components/xiaomi_ble/test.esp32-idf.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -xiaomi_ble: +<<: !include common.yaml diff --git a/tests/components/xiaomi_ble/test.esp32.yaml b/tests/components/xiaomi_ble/test.esp32.yaml index 9d10393177..dade44d145 100644 --- a/tests/components/xiaomi_ble/test.esp32.yaml +++ b/tests/components/xiaomi_ble/test.esp32.yaml @@ -1,3 +1 @@ -esp32_ble_tracker: - -xiaomi_ble: +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgd1/common.yaml b/tests/components/xiaomi_cgd1/common.yaml new file mode 100644 index 0000000000..94ed09e8f2 --- /dev/null +++ b/tests/components/xiaomi_cgd1/common.yaml @@ -0,0 +1,12 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_cgd1 + mac_address: A4:C1:38:D1:61:7D + bindkey: c99d2313182473b38001086febf781bd + temperature: + name: Xiaomi CGD1 Temperature + humidity: + name: Xiaomi CGD1 Humidity + battery_level: + name: Xiaomi CGD1 Battery Level diff --git a/tests/components/xiaomi_cgd1/test.esp32-c3-idf.yaml b/tests/components/xiaomi_cgd1/test.esp32-c3-idf.yaml index 94ed09e8f2..dade44d145 100644 --- a/tests/components/xiaomi_cgd1/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_cgd1/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgd1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgd1/test.esp32-c3.yaml b/tests/components/xiaomi_cgd1/test.esp32-c3.yaml index 94ed09e8f2..dade44d145 100644 --- a/tests/components/xiaomi_cgd1/test.esp32-c3.yaml +++ b/tests/components/xiaomi_cgd1/test.esp32-c3.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgd1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgd1/test.esp32-idf.yaml b/tests/components/xiaomi_cgd1/test.esp32-idf.yaml index 94ed09e8f2..dade44d145 100644 --- a/tests/components/xiaomi_cgd1/test.esp32-idf.yaml +++ b/tests/components/xiaomi_cgd1/test.esp32-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgd1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgd1/test.esp32.yaml b/tests/components/xiaomi_cgd1/test.esp32.yaml index 94ed09e8f2..dade44d145 100644 --- a/tests/components/xiaomi_cgd1/test.esp32.yaml +++ b/tests/components/xiaomi_cgd1/test.esp32.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgd1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgdk2/common.yaml b/tests/components/xiaomi_cgdk2/common.yaml new file mode 100644 index 0000000000..dddca56222 --- /dev/null +++ b/tests/components/xiaomi_cgdk2/common.yaml @@ -0,0 +1,12 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_cgdk2 + mac_address: A4:C1:38:D1:61:7D + bindkey: c99d2313182473b38001086febf781bd + temperature: + name: Xiaomi CGD1 Temperature + humidity: + name: Xiaomi CGD1 Humidity + battery_level: + name: Xiaomi CGD1 Battery Level diff --git a/tests/components/xiaomi_cgdk2/test.esp32-c3-idf.yaml b/tests/components/xiaomi_cgdk2/test.esp32-c3-idf.yaml index dddca56222..dade44d145 100644 --- a/tests/components/xiaomi_cgdk2/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_cgdk2/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgdk2 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgdk2/test.esp32-c3.yaml b/tests/components/xiaomi_cgdk2/test.esp32-c3.yaml index dddca56222..dade44d145 100644 --- a/tests/components/xiaomi_cgdk2/test.esp32-c3.yaml +++ b/tests/components/xiaomi_cgdk2/test.esp32-c3.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgdk2 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgdk2/test.esp32-idf.yaml b/tests/components/xiaomi_cgdk2/test.esp32-idf.yaml index dddca56222..dade44d145 100644 --- a/tests/components/xiaomi_cgdk2/test.esp32-idf.yaml +++ b/tests/components/xiaomi_cgdk2/test.esp32-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgdk2 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgdk2/test.esp32.yaml b/tests/components/xiaomi_cgdk2/test.esp32.yaml index dddca56222..dade44d145 100644 --- a/tests/components/xiaomi_cgdk2/test.esp32.yaml +++ b/tests/components/xiaomi_cgdk2/test.esp32.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgdk2 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgg1/common.yaml b/tests/components/xiaomi_cgg1/common.yaml new file mode 100644 index 0000000000..170aebfbde --- /dev/null +++ b/tests/components/xiaomi_cgg1/common.yaml @@ -0,0 +1,12 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_cgg1 + mac_address: A4:C1:38:D1:61:7D + bindkey: c99d2313182473b38001086febf781bd + temperature: + name: Xiaomi CGD1 Temperature + humidity: + name: Xiaomi CGD1 Humidity + battery_level: + name: Xiaomi CGD1 Battery Level diff --git a/tests/components/xiaomi_cgg1/test.esp32-c3-idf.yaml b/tests/components/xiaomi_cgg1/test.esp32-c3-idf.yaml index 170aebfbde..dade44d145 100644 --- a/tests/components/xiaomi_cgg1/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_cgg1/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgg1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgg1/test.esp32-c3.yaml b/tests/components/xiaomi_cgg1/test.esp32-c3.yaml index 170aebfbde..dade44d145 100644 --- a/tests/components/xiaomi_cgg1/test.esp32-c3.yaml +++ b/tests/components/xiaomi_cgg1/test.esp32-c3.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgg1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgg1/test.esp32-idf.yaml b/tests/components/xiaomi_cgg1/test.esp32-idf.yaml index 170aebfbde..dade44d145 100644 --- a/tests/components/xiaomi_cgg1/test.esp32-idf.yaml +++ b/tests/components/xiaomi_cgg1/test.esp32-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgg1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgg1/test.esp32.yaml b/tests/components/xiaomi_cgg1/test.esp32.yaml index 170aebfbde..dade44d145 100644 --- a/tests/components/xiaomi_cgg1/test.esp32.yaml +++ b/tests/components/xiaomi_cgg1/test.esp32.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_cgg1 - mac_address: A4:C1:38:D1:61:7D - bindkey: c99d2313182473b38001086febf781bd - temperature: - name: Xiaomi CGD1 Temperature - humidity: - name: Xiaomi CGD1 Humidity - battery_level: - name: Xiaomi CGD1 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgpr1/common.yaml b/tests/components/xiaomi_cgpr1/common.yaml new file mode 100644 index 0000000000..48082a886c --- /dev/null +++ b/tests/components/xiaomi_cgpr1/common.yaml @@ -0,0 +1,13 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: xiaomi_cgpr1 + name: CGPR1 Motion + mac_address: "12:34:56:12:34:56" + bindkey: 48403ebe2d385db8d0c187f81e62cb64 + battery_level: + name: CGPR1 battery Level + idle_time: + name: CGPR1 Idle Time + illuminance: + name: CGPR1 Illuminance diff --git a/tests/components/xiaomi_cgpr1/test.esp32-c3-idf.yaml b/tests/components/xiaomi_cgpr1/test.esp32-c3-idf.yaml index 48082a886c..dade44d145 100644 --- a/tests/components/xiaomi_cgpr1/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_cgpr1/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_cgpr1 - name: CGPR1 Motion - mac_address: "12:34:56:12:34:56" - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - battery_level: - name: CGPR1 battery Level - idle_time: - name: CGPR1 Idle Time - illuminance: - name: CGPR1 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgpr1/test.esp32-c3.yaml b/tests/components/xiaomi_cgpr1/test.esp32-c3.yaml index 48082a886c..dade44d145 100644 --- a/tests/components/xiaomi_cgpr1/test.esp32-c3.yaml +++ b/tests/components/xiaomi_cgpr1/test.esp32-c3.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_cgpr1 - name: CGPR1 Motion - mac_address: "12:34:56:12:34:56" - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - battery_level: - name: CGPR1 battery Level - idle_time: - name: CGPR1 Idle Time - illuminance: - name: CGPR1 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgpr1/test.esp32-idf.yaml b/tests/components/xiaomi_cgpr1/test.esp32-idf.yaml index 48082a886c..dade44d145 100644 --- a/tests/components/xiaomi_cgpr1/test.esp32-idf.yaml +++ b/tests/components/xiaomi_cgpr1/test.esp32-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_cgpr1 - name: CGPR1 Motion - mac_address: "12:34:56:12:34:56" - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - battery_level: - name: CGPR1 battery Level - idle_time: - name: CGPR1 Idle Time - illuminance: - name: CGPR1 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_cgpr1/test.esp32.yaml b/tests/components/xiaomi_cgpr1/test.esp32.yaml index 48082a886c..dade44d145 100644 --- a/tests/components/xiaomi_cgpr1/test.esp32.yaml +++ b/tests/components/xiaomi_cgpr1/test.esp32.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_cgpr1 - name: CGPR1 Motion - mac_address: "12:34:56:12:34:56" - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - battery_level: - name: CGPR1 battery Level - idle_time: - name: CGPR1 Idle Time - illuminance: - name: CGPR1 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_gcls002/common.yaml b/tests/components/xiaomi_gcls002/common.yaml new file mode 100644 index 0000000000..32990708cc --- /dev/null +++ b/tests/components/xiaomi_gcls002/common.yaml @@ -0,0 +1,13 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_gcls002 + mac_address: 94:2B:FF:5C:91:61 + temperature: + name: GCLS02 Temperature + moisture: + name: GCLS02 Moisture + conductivity: + name: GCLS02 Soil Conductivity + illuminance: + name: GCLS02 Illuminance diff --git a/tests/components/xiaomi_gcls002/test.esp32-c3-idf.yaml b/tests/components/xiaomi_gcls002/test.esp32-c3-idf.yaml index 32990708cc..dade44d145 100644 --- a/tests/components/xiaomi_gcls002/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_gcls002/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_gcls002 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: GCLS02 Temperature - moisture: - name: GCLS02 Moisture - conductivity: - name: GCLS02 Soil Conductivity - illuminance: - name: GCLS02 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_gcls002/test.esp32-c3.yaml b/tests/components/xiaomi_gcls002/test.esp32-c3.yaml index 32990708cc..dade44d145 100644 --- a/tests/components/xiaomi_gcls002/test.esp32-c3.yaml +++ b/tests/components/xiaomi_gcls002/test.esp32-c3.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_gcls002 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: GCLS02 Temperature - moisture: - name: GCLS02 Moisture - conductivity: - name: GCLS02 Soil Conductivity - illuminance: - name: GCLS02 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_gcls002/test.esp32-idf.yaml b/tests/components/xiaomi_gcls002/test.esp32-idf.yaml index 32990708cc..dade44d145 100644 --- a/tests/components/xiaomi_gcls002/test.esp32-idf.yaml +++ b/tests/components/xiaomi_gcls002/test.esp32-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_gcls002 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: GCLS02 Temperature - moisture: - name: GCLS02 Moisture - conductivity: - name: GCLS02 Soil Conductivity - illuminance: - name: GCLS02 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_gcls002/test.esp32.yaml b/tests/components/xiaomi_gcls002/test.esp32.yaml index 32990708cc..dade44d145 100644 --- a/tests/components/xiaomi_gcls002/test.esp32.yaml +++ b/tests/components/xiaomi_gcls002/test.esp32.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_gcls002 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: GCLS02 Temperature - moisture: - name: GCLS02 Moisture - conductivity: - name: GCLS02 Soil Conductivity - illuminance: - name: GCLS02 Illuminance +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccjcy01/common.yaml b/tests/components/xiaomi_hhccjcy01/common.yaml new file mode 100644 index 0000000000..0def909488 --- /dev/null +++ b/tests/components/xiaomi_hhccjcy01/common.yaml @@ -0,0 +1,15 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_hhccjcy01 + mac_address: 94:2B:FF:5C:91:61 + temperature: + name: Xiaomi HHCCJCY01 Temperature + moisture: + name: Xiaomi HHCCJCY01 Moisture + illuminance: + name: Xiaomi HHCCJCY01 Illuminance + conductivity: + name: Xiaomi HHCCJCY01 Soil Conductivity + battery_level: + name: Xiaomi HHCCJCY01 Battery Level diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32-c3-idf.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32-c3-idf.yaml index 0def909488..dade44d145 100644 --- a/tests/components/xiaomi_hhccjcy01/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_hhccjcy01/test.esp32-c3-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccjcy01 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: Xiaomi HHCCJCY01 Temperature - moisture: - name: Xiaomi HHCCJCY01 Moisture - illuminance: - name: Xiaomi HHCCJCY01 Illuminance - conductivity: - name: Xiaomi HHCCJCY01 Soil Conductivity - battery_level: - name: Xiaomi HHCCJCY01 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml index 0def909488..dade44d145 100644 --- a/tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml +++ b/tests/components/xiaomi_hhccjcy01/test.esp32-c3.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccjcy01 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: Xiaomi HHCCJCY01 Temperature - moisture: - name: Xiaomi HHCCJCY01 Moisture - illuminance: - name: Xiaomi HHCCJCY01 Illuminance - conductivity: - name: Xiaomi HHCCJCY01 Soil Conductivity - battery_level: - name: Xiaomi HHCCJCY01 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32-idf.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32-idf.yaml index 0def909488..dade44d145 100644 --- a/tests/components/xiaomi_hhccjcy01/test.esp32-idf.yaml +++ b/tests/components/xiaomi_hhccjcy01/test.esp32-idf.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccjcy01 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: Xiaomi HHCCJCY01 Temperature - moisture: - name: Xiaomi HHCCJCY01 Moisture - illuminance: - name: Xiaomi HHCCJCY01 Illuminance - conductivity: - name: Xiaomi HHCCJCY01 Soil Conductivity - battery_level: - name: Xiaomi HHCCJCY01 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccjcy01/test.esp32.yaml b/tests/components/xiaomi_hhccjcy01/test.esp32.yaml index 0def909488..dade44d145 100644 --- a/tests/components/xiaomi_hhccjcy01/test.esp32.yaml +++ b/tests/components/xiaomi_hhccjcy01/test.esp32.yaml @@ -1,15 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccjcy01 - mac_address: 94:2B:FF:5C:91:61 - temperature: - name: Xiaomi HHCCJCY01 Temperature - moisture: - name: Xiaomi HHCCJCY01 Moisture - illuminance: - name: Xiaomi HHCCJCY01 Illuminance - conductivity: - name: Xiaomi HHCCJCY01 Soil Conductivity - battery_level: - name: Xiaomi HHCCJCY01 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccpot002/common.yaml b/tests/components/xiaomi_hhccpot002/common.yaml new file mode 100644 index 0000000000..2e5fa14620 --- /dev/null +++ b/tests/components/xiaomi_hhccpot002/common.yaml @@ -0,0 +1,9 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_hhccpot002 + mac_address: 94:2B:FF:5C:91:61 + moisture: + name: HHCCPOT002 Moisture + conductivity: + name: HHCCPOT002 Soil Conductivity diff --git a/tests/components/xiaomi_hhccpot002/test.esp32-c3-idf.yaml b/tests/components/xiaomi_hhccpot002/test.esp32-c3-idf.yaml index 2e5fa14620..dade44d145 100644 --- a/tests/components/xiaomi_hhccpot002/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_hhccpot002/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccpot002 - mac_address: 94:2B:FF:5C:91:61 - moisture: - name: HHCCPOT002 Moisture - conductivity: - name: HHCCPOT002 Soil Conductivity +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml b/tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml index 2e5fa14620..dade44d145 100644 --- a/tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml +++ b/tests/components/xiaomi_hhccpot002/test.esp32-c3.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccpot002 - mac_address: 94:2B:FF:5C:91:61 - moisture: - name: HHCCPOT002 Moisture - conductivity: - name: HHCCPOT002 Soil Conductivity +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccpot002/test.esp32-idf.yaml b/tests/components/xiaomi_hhccpot002/test.esp32-idf.yaml index 2e5fa14620..dade44d145 100644 --- a/tests/components/xiaomi_hhccpot002/test.esp32-idf.yaml +++ b/tests/components/xiaomi_hhccpot002/test.esp32-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccpot002 - mac_address: 94:2B:FF:5C:91:61 - moisture: - name: HHCCPOT002 Moisture - conductivity: - name: HHCCPOT002 Soil Conductivity +<<: !include common.yaml diff --git a/tests/components/xiaomi_hhccpot002/test.esp32.yaml b/tests/components/xiaomi_hhccpot002/test.esp32.yaml index 2e5fa14620..dade44d145 100644 --- a/tests/components/xiaomi_hhccpot002/test.esp32.yaml +++ b/tests/components/xiaomi_hhccpot002/test.esp32.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_hhccpot002 - mac_address: 94:2B:FF:5C:91:61 - moisture: - name: HHCCPOT002 Moisture - conductivity: - name: HHCCPOT002 Soil Conductivity +<<: !include common.yaml diff --git a/tests/components/xiaomi_jqjcy01ym/common.yaml b/tests/components/xiaomi_jqjcy01ym/common.yaml new file mode 100644 index 0000000000..54c4b33dcd --- /dev/null +++ b/tests/components/xiaomi_jqjcy01ym/common.yaml @@ -0,0 +1,13 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_jqjcy01ym + mac_address: 7A:80:8E:19:36:BA + temperature: + name: JQJCY01YM Temperature + humidity: + name: JQJCY01YM Humidity + formaldehyde: + name: JQJCY01YM Formaldehyde + battery_level: + name: JQJCY01YM Battery Level diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32-c3-idf.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32-c3-idf.yaml index 54c4b33dcd..dade44d145 100644 --- a/tests/components/xiaomi_jqjcy01ym/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_jqjcy01ym/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_jqjcy01ym - mac_address: 7A:80:8E:19:36:BA - temperature: - name: JQJCY01YM Temperature - humidity: - name: JQJCY01YM Humidity - formaldehyde: - name: JQJCY01YM Formaldehyde - battery_level: - name: JQJCY01YM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml index 54c4b33dcd..dade44d145 100644 --- a/tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml +++ b/tests/components/xiaomi_jqjcy01ym/test.esp32-c3.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_jqjcy01ym - mac_address: 7A:80:8E:19:36:BA - temperature: - name: JQJCY01YM Temperature - humidity: - name: JQJCY01YM Humidity - formaldehyde: - name: JQJCY01YM Formaldehyde - battery_level: - name: JQJCY01YM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32-idf.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32-idf.yaml index 54c4b33dcd..dade44d145 100644 --- a/tests/components/xiaomi_jqjcy01ym/test.esp32-idf.yaml +++ b/tests/components/xiaomi_jqjcy01ym/test.esp32-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_jqjcy01ym - mac_address: 7A:80:8E:19:36:BA - temperature: - name: JQJCY01YM Temperature - humidity: - name: JQJCY01YM Humidity - formaldehyde: - name: JQJCY01YM Formaldehyde - battery_level: - name: JQJCY01YM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_jqjcy01ym/test.esp32.yaml b/tests/components/xiaomi_jqjcy01ym/test.esp32.yaml index 54c4b33dcd..dade44d145 100644 --- a/tests/components/xiaomi_jqjcy01ym/test.esp32.yaml +++ b/tests/components/xiaomi_jqjcy01ym/test.esp32.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_jqjcy01ym - mac_address: 7A:80:8E:19:36:BA - temperature: - name: JQJCY01YM Temperature - humidity: - name: JQJCY01YM Humidity - formaldehyde: - name: JQJCY01YM Formaldehyde - battery_level: - name: JQJCY01YM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd02/common.yaml b/tests/components/xiaomi_lywsd02/common.yaml new file mode 100644 index 0000000000..3e40ab8d70 --- /dev/null +++ b/tests/components/xiaomi_lywsd02/common.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_lywsd02 + mac_address: 3F:5B:7D:82:58:4E + temperature: + name: Xiaomi LYWSD02 Temperature + humidity: + name: Xiaomi LYWSD02 Humidity + battery_level: + name: Xiaomi LYWSD02 Battery Level diff --git a/tests/components/xiaomi_lywsd02/test.esp32-c3-idf.yaml b/tests/components/xiaomi_lywsd02/test.esp32-c3-idf.yaml index 3e40ab8d70..dade44d145 100644 --- a/tests/components/xiaomi_lywsd02/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_lywsd02/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd02 - mac_address: 3F:5B:7D:82:58:4E - temperature: - name: Xiaomi LYWSD02 Temperature - humidity: - name: Xiaomi LYWSD02 Humidity - battery_level: - name: Xiaomi LYWSD02 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml b/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml index 3e40ab8d70..dade44d145 100644 --- a/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml +++ b/tests/components/xiaomi_lywsd02/test.esp32-c3.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd02 - mac_address: 3F:5B:7D:82:58:4E - temperature: - name: Xiaomi LYWSD02 Temperature - humidity: - name: Xiaomi LYWSD02 Humidity - battery_level: - name: Xiaomi LYWSD02 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd02/test.esp32-idf.yaml b/tests/components/xiaomi_lywsd02/test.esp32-idf.yaml index 3e40ab8d70..dade44d145 100644 --- a/tests/components/xiaomi_lywsd02/test.esp32-idf.yaml +++ b/tests/components/xiaomi_lywsd02/test.esp32-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd02 - mac_address: 3F:5B:7D:82:58:4E - temperature: - name: Xiaomi LYWSD02 Temperature - humidity: - name: Xiaomi LYWSD02 Humidity - battery_level: - name: Xiaomi LYWSD02 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd02/test.esp32.yaml b/tests/components/xiaomi_lywsd02/test.esp32.yaml index 3e40ab8d70..dade44d145 100644 --- a/tests/components/xiaomi_lywsd02/test.esp32.yaml +++ b/tests/components/xiaomi_lywsd02/test.esp32.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd02 - mac_address: 3F:5B:7D:82:58:4E - temperature: - name: Xiaomi LYWSD02 Temperature - humidity: - name: Xiaomi LYWSD02 Humidity - battery_level: - name: Xiaomi LYWSD02 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd03mmc/common.yaml b/tests/components/xiaomi_lywsd03mmc/common.yaml new file mode 100644 index 0000000000..d10a859c56 --- /dev/null +++ b/tests/components/xiaomi_lywsd03mmc/common.yaml @@ -0,0 +1,12 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_lywsd03mmc + mac_address: A4:C1:38:4E:16:78 + bindkey: e9efaa6873f9f9c87a5e75a5f814801c + temperature: + name: Xiaomi LYWSD03MMC Temperature + humidity: + name: Xiaomi LYWSD03MMC Humidity + battery_level: + name: Xiaomi LYWSD03MMC Battery Level diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3-idf.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3-idf.yaml index d10a859c56..dade44d145 100644 --- a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd03mmc - mac_address: A4:C1:38:4E:16:78 - bindkey: e9efaa6873f9f9c87a5e75a5f814801c - temperature: - name: Xiaomi LYWSD03MMC Temperature - humidity: - name: Xiaomi LYWSD03MMC Humidity - battery_level: - name: Xiaomi LYWSD03MMC Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml index d10a859c56..dade44d145 100644 --- a/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml +++ b/tests/components/xiaomi_lywsd03mmc/test.esp32-c3.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd03mmc - mac_address: A4:C1:38:4E:16:78 - bindkey: e9efaa6873f9f9c87a5e75a5f814801c - temperature: - name: Xiaomi LYWSD03MMC Temperature - humidity: - name: Xiaomi LYWSD03MMC Humidity - battery_level: - name: Xiaomi LYWSD03MMC Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32-idf.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32-idf.yaml index d10a859c56..dade44d145 100644 --- a/tests/components/xiaomi_lywsd03mmc/test.esp32-idf.yaml +++ b/tests/components/xiaomi_lywsd03mmc/test.esp32-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd03mmc - mac_address: A4:C1:38:4E:16:78 - bindkey: e9efaa6873f9f9c87a5e75a5f814801c - temperature: - name: Xiaomi LYWSD03MMC Temperature - humidity: - name: Xiaomi LYWSD03MMC Humidity - battery_level: - name: Xiaomi LYWSD03MMC Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml b/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml index d10a859c56..dade44d145 100644 --- a/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml +++ b/tests/components/xiaomi_lywsd03mmc/test.esp32.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsd03mmc - mac_address: A4:C1:38:4E:16:78 - bindkey: e9efaa6873f9f9c87a5e75a5f814801c - temperature: - name: Xiaomi LYWSD03MMC Temperature - humidity: - name: Xiaomi LYWSD03MMC Humidity - battery_level: - name: Xiaomi LYWSD03MMC Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsdcgq/common.yaml b/tests/components/xiaomi_lywsdcgq/common.yaml new file mode 100644 index 0000000000..d8422b4c0c --- /dev/null +++ b/tests/components/xiaomi_lywsdcgq/common.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_lywsdcgq + mac_address: 7A:80:8E:19:36:BA + temperature: + name: Xiaomi LYWSDCGQ Temperature + humidity: + name: Xiaomi LYWSDCGQ Humidity + battery_level: + name: Xiaomi LYWSDCGQ Battery Level diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32-c3-idf.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-c3-idf.yaml index d8422b4c0c..dade44d145 100644 --- a/tests/components/xiaomi_lywsdcgq/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_lywsdcgq/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsdcgq - mac_address: 7A:80:8E:19:36:BA - temperature: - name: Xiaomi LYWSDCGQ Temperature - humidity: - name: Xiaomi LYWSDCGQ Humidity - battery_level: - name: Xiaomi LYWSDCGQ Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml index d8422b4c0c..dade44d145 100644 --- a/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml +++ b/tests/components/xiaomi_lywsdcgq/test.esp32-c3.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsdcgq - mac_address: 7A:80:8E:19:36:BA - temperature: - name: Xiaomi LYWSDCGQ Temperature - humidity: - name: Xiaomi LYWSDCGQ Humidity - battery_level: - name: Xiaomi LYWSDCGQ Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32-idf.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32-idf.yaml index d8422b4c0c..dade44d145 100644 --- a/tests/components/xiaomi_lywsdcgq/test.esp32-idf.yaml +++ b/tests/components/xiaomi_lywsdcgq/test.esp32-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsdcgq - mac_address: 7A:80:8E:19:36:BA - temperature: - name: Xiaomi LYWSDCGQ Temperature - humidity: - name: Xiaomi LYWSDCGQ Humidity - battery_level: - name: Xiaomi LYWSDCGQ Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_lywsdcgq/test.esp32.yaml b/tests/components/xiaomi_lywsdcgq/test.esp32.yaml index d8422b4c0c..dade44d145 100644 --- a/tests/components/xiaomi_lywsdcgq/test.esp32.yaml +++ b/tests/components/xiaomi_lywsdcgq/test.esp32.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_lywsdcgq - mac_address: 7A:80:8E:19:36:BA - temperature: - name: Xiaomi LYWSDCGQ Temperature - humidity: - name: Xiaomi LYWSDCGQ Humidity - battery_level: - name: Xiaomi LYWSDCGQ Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc303/common.yaml b/tests/components/xiaomi_mhoc303/common.yaml new file mode 100644 index 0000000000..e4353d3c6a --- /dev/null +++ b/tests/components/xiaomi_mhoc303/common.yaml @@ -0,0 +1,11 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_mhoc303 + mac_address: E7:50:59:32:A0:1C + temperature: + name: MHO-C303 Temperature + humidity: + name: MHO-C303 Humidity + battery_level: + name: MHO-C303 Battery Level diff --git a/tests/components/xiaomi_mhoc303/test.esp32-c3-idf.yaml b/tests/components/xiaomi_mhoc303/test.esp32-c3-idf.yaml index e4353d3c6a..dade44d145 100644 --- a/tests/components/xiaomi_mhoc303/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_mhoc303/test.esp32-c3-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc303 - mac_address: E7:50:59:32:A0:1C - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml index e4353d3c6a..dade44d145 100644 --- a/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml +++ b/tests/components/xiaomi_mhoc303/test.esp32-c3.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc303 - mac_address: E7:50:59:32:A0:1C - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc303/test.esp32-idf.yaml b/tests/components/xiaomi_mhoc303/test.esp32-idf.yaml index e4353d3c6a..dade44d145 100644 --- a/tests/components/xiaomi_mhoc303/test.esp32-idf.yaml +++ b/tests/components/xiaomi_mhoc303/test.esp32-idf.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc303 - mac_address: E7:50:59:32:A0:1C - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc303/test.esp32.yaml b/tests/components/xiaomi_mhoc303/test.esp32.yaml index e4353d3c6a..dade44d145 100644 --- a/tests/components/xiaomi_mhoc303/test.esp32.yaml +++ b/tests/components/xiaomi_mhoc303/test.esp32.yaml @@ -1,11 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc303 - mac_address: E7:50:59:32:A0:1C - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc401/common.yaml b/tests/components/xiaomi_mhoc401/common.yaml new file mode 100644 index 0000000000..ae378f5604 --- /dev/null +++ b/tests/components/xiaomi_mhoc401/common.yaml @@ -0,0 +1,12 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_mhoc401 + mac_address: E7:50:59:32:A0:1C + bindkey: "eef418daf699a0c188f3bfd17e4565d9" + temperature: + name: MHO-C303 Temperature + humidity: + name: MHO-C303 Humidity + battery_level: + name: MHO-C303 Battery Level diff --git a/tests/components/xiaomi_mhoc401/test.esp32-c3-idf.yaml b/tests/components/xiaomi_mhoc401/test.esp32-c3-idf.yaml index ae378f5604..dade44d145 100644 --- a/tests/components/xiaomi_mhoc401/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_mhoc401/test.esp32-c3-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc401 - mac_address: E7:50:59:32:A0:1C - bindkey: "eef418daf699a0c188f3bfd17e4565d9" - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml b/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml index ae378f5604..dade44d145 100644 --- a/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml +++ b/tests/components/xiaomi_mhoc401/test.esp32-c3.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc401 - mac_address: E7:50:59:32:A0:1C - bindkey: "eef418daf699a0c188f3bfd17e4565d9" - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc401/test.esp32-idf.yaml b/tests/components/xiaomi_mhoc401/test.esp32-idf.yaml index ae378f5604..dade44d145 100644 --- a/tests/components/xiaomi_mhoc401/test.esp32-idf.yaml +++ b/tests/components/xiaomi_mhoc401/test.esp32-idf.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc401 - mac_address: E7:50:59:32:A0:1C - bindkey: "eef418daf699a0c188f3bfd17e4565d9" - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mhoc401/test.esp32.yaml b/tests/components/xiaomi_mhoc401/test.esp32.yaml index ae378f5604..dade44d145 100644 --- a/tests/components/xiaomi_mhoc401/test.esp32.yaml +++ b/tests/components/xiaomi_mhoc401/test.esp32.yaml @@ -1,12 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_mhoc401 - mac_address: E7:50:59:32:A0:1C - bindkey: "eef418daf699a0c188f3bfd17e4565d9" - temperature: - name: MHO-C303 Temperature - humidity: - name: MHO-C303 Humidity - battery_level: - name: MHO-C303 Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale copy/common.yaml b/tests/components/xiaomi_miscale copy/common.yaml new file mode 100644 index 0000000000..89f32ad199 --- /dev/null +++ b/tests/components/xiaomi_miscale copy/common.yaml @@ -0,0 +1,9 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_miscale + mac_address: '5C:CA:D3:70:D4:A2' + weight: + name: "Xiaomi Mi Scale Weight" + impedance: + name: "Xiaomi Mi Scale Impedance" diff --git a/tests/components/xiaomi_miscale copy/test.esp32-c3-idf.yaml b/tests/components/xiaomi_miscale copy/test.esp32-c3-idf.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale copy/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_miscale copy/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml b/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml +++ b/tests/components/xiaomi_miscale copy/test.esp32-c3.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale copy/test.esp32-idf.yaml b/tests/components/xiaomi_miscale copy/test.esp32-idf.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale copy/test.esp32-idf.yaml +++ b/tests/components/xiaomi_miscale copy/test.esp32-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale copy/test.esp32.yaml b/tests/components/xiaomi_miscale copy/test.esp32.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale copy/test.esp32.yaml +++ b/tests/components/xiaomi_miscale copy/test.esp32.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale/common.yaml b/tests/components/xiaomi_miscale/common.yaml new file mode 100644 index 0000000000..89f32ad199 --- /dev/null +++ b/tests/components/xiaomi_miscale/common.yaml @@ -0,0 +1,9 @@ +esp32_ble_tracker: + +sensor: + - platform: xiaomi_miscale + mac_address: '5C:CA:D3:70:D4:A2' + weight: + name: "Xiaomi Mi Scale Weight" + impedance: + name: "Xiaomi Mi Scale Impedance" diff --git a/tests/components/xiaomi_miscale/test.esp32-c3-idf.yaml b/tests/components/xiaomi_miscale/test.esp32-c3-idf.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_miscale/test.esp32-c3-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale/test.esp32-c3.yaml b/tests/components/xiaomi_miscale/test.esp32-c3.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale/test.esp32-c3.yaml +++ b/tests/components/xiaomi_miscale/test.esp32-c3.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale/test.esp32-idf.yaml b/tests/components/xiaomi_miscale/test.esp32-idf.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale/test.esp32-idf.yaml +++ b/tests/components/xiaomi_miscale/test.esp32-idf.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_miscale/test.esp32.yaml b/tests/components/xiaomi_miscale/test.esp32.yaml index 89f32ad199..dade44d145 100644 --- a/tests/components/xiaomi_miscale/test.esp32.yaml +++ b/tests/components/xiaomi_miscale/test.esp32.yaml @@ -1,9 +1 @@ -esp32_ble_tracker: - -sensor: - - platform: xiaomi_miscale - mac_address: '5C:CA:D3:70:D4:A2' - weight: - name: "Xiaomi Mi Scale Weight" - impedance: - name: "Xiaomi Mi Scale Impedance" +<<: !include common.yaml diff --git a/tests/components/xiaomi_mjyd02yla/common.yaml b/tests/components/xiaomi_mjyd02yla/common.yaml new file mode 100644 index 0000000000..dffcef84c4 --- /dev/null +++ b/tests/components/xiaomi_mjyd02yla/common.yaml @@ -0,0 +1,13 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: xiaomi_mjyd02yla + name: MJYD02YL-A Motion + mac_address: 50:EC:50:CD:32:02 + bindkey: 48403ebe2d385db8d0c187f81e62cb64 + idle_time: + name: MJYD02YL-A Idle Time + light: + name: MJYD02YL-A Light Status + battery_level: + name: MJYD02YL-A Battery Level diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32-c3-idf.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-c3-idf.yaml index dffcef84c4..dade44d145 100644 --- a/tests/components/xiaomi_mjyd02yla/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_mjyd02yla/test.esp32-c3-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mjyd02yla - name: MJYD02YL-A Motion - mac_address: 50:EC:50:CD:32:02 - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - idle_time: - name: MJYD02YL-A Idle Time - light: - name: MJYD02YL-A Light Status - battery_level: - name: MJYD02YL-A Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml index dffcef84c4..dade44d145 100644 --- a/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml +++ b/tests/components/xiaomi_mjyd02yla/test.esp32-c3.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mjyd02yla - name: MJYD02YL-A Motion - mac_address: 50:EC:50:CD:32:02 - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - idle_time: - name: MJYD02YL-A Idle Time - light: - name: MJYD02YL-A Light Status - battery_level: - name: MJYD02YL-A Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32-idf.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32-idf.yaml index dffcef84c4..dade44d145 100644 --- a/tests/components/xiaomi_mjyd02yla/test.esp32-idf.yaml +++ b/tests/components/xiaomi_mjyd02yla/test.esp32-idf.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mjyd02yla - name: MJYD02YL-A Motion - mac_address: 50:EC:50:CD:32:02 - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - idle_time: - name: MJYD02YL-A Idle Time - light: - name: MJYD02YL-A Light Status - battery_level: - name: MJYD02YL-A Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mjyd02yla/test.esp32.yaml b/tests/components/xiaomi_mjyd02yla/test.esp32.yaml index dffcef84c4..dade44d145 100644 --- a/tests/components/xiaomi_mjyd02yla/test.esp32.yaml +++ b/tests/components/xiaomi_mjyd02yla/test.esp32.yaml @@ -1,13 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mjyd02yla - name: MJYD02YL-A Motion - mac_address: 50:EC:50:CD:32:02 - bindkey: 48403ebe2d385db8d0c187f81e62cb64 - idle_time: - name: MJYD02YL-A Idle Time - light: - name: MJYD02YL-A Light Status - battery_level: - name: MJYD02YL-A Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_mue4094rt/common.yaml b/tests/components/xiaomi_mue4094rt/common.yaml new file mode 100644 index 0000000000..4f0e5ccbae --- /dev/null +++ b/tests/components/xiaomi_mue4094rt/common.yaml @@ -0,0 +1,7 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: xiaomi_mue4094rt + name: MUE4094RT Motion + mac_address: 7A:80:8E:19:36:BA + timeout: 5s diff --git a/tests/components/xiaomi_mue4094rt/test.esp32-c3-idf.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-c3-idf.yaml index 4f0e5ccbae..dade44d145 100644 --- a/tests/components/xiaomi_mue4094rt/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_mue4094rt/test.esp32-c3-idf.yaml @@ -1,7 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mue4094rt - name: MUE4094RT Motion - mac_address: 7A:80:8E:19:36:BA - timeout: 5s +<<: !include common.yaml diff --git a/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml index 4f0e5ccbae..dade44d145 100644 --- a/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml +++ b/tests/components/xiaomi_mue4094rt/test.esp32-c3.yaml @@ -1,7 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mue4094rt - name: MUE4094RT Motion - mac_address: 7A:80:8E:19:36:BA - timeout: 5s +<<: !include common.yaml diff --git a/tests/components/xiaomi_mue4094rt/test.esp32-idf.yaml b/tests/components/xiaomi_mue4094rt/test.esp32-idf.yaml index 4f0e5ccbae..dade44d145 100644 --- a/tests/components/xiaomi_mue4094rt/test.esp32-idf.yaml +++ b/tests/components/xiaomi_mue4094rt/test.esp32-idf.yaml @@ -1,7 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mue4094rt - name: MUE4094RT Motion - mac_address: 7A:80:8E:19:36:BA - timeout: 5s +<<: !include common.yaml diff --git a/tests/components/xiaomi_mue4094rt/test.esp32.yaml b/tests/components/xiaomi_mue4094rt/test.esp32.yaml index 4f0e5ccbae..dade44d145 100644 --- a/tests/components/xiaomi_mue4094rt/test.esp32.yaml +++ b/tests/components/xiaomi_mue4094rt/test.esp32.yaml @@ -1,7 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_mue4094rt - name: MUE4094RT Motion - mac_address: 7A:80:8E:19:36:BA - timeout: 5s +<<: !include common.yaml diff --git a/tests/components/xiaomi_rtcgq02lm/common.yaml b/tests/components/xiaomi_rtcgq02lm/common.yaml new file mode 100644 index 0000000000..a2e0c66ba5 --- /dev/null +++ b/tests/components/xiaomi_rtcgq02lm/common.yaml @@ -0,0 +1,22 @@ +esp32_ble_tracker: + +xiaomi_rtcgq02lm: + - id: motion_rtcgq02lm + mac_address: 01:02:03:04:05:06 + bindkey: "48403ebe2d385db8d0c187f81e62cb64" + +binary_sensor: + - platform: xiaomi_rtcgq02lm + id: motion_rtcgq02lm + motion: + name: Mi Motion Sensor 2 + light: + name: Mi Motion Sensor 2 Light + button: + name: Mi Motion Sensor 2 Button + +sensor: + - platform: xiaomi_rtcgq02lm + id: motion_rtcgq02lm + battery_level: + name: Mi Motion Sensor 2 Battery level diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3-idf.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3-idf.yaml index a2e0c66ba5..dade44d145 100644 --- a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3-idf.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -xiaomi_rtcgq02lm: - - id: motion_rtcgq02lm - mac_address: 01:02:03:04:05:06 - bindkey: "48403ebe2d385db8d0c187f81e62cb64" - -binary_sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - motion: - name: Mi Motion Sensor 2 - light: - name: Mi Motion Sensor 2 Light - button: - name: Mi Motion Sensor 2 Button - -sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - battery_level: - name: Mi Motion Sensor 2 Battery level +<<: !include common.yaml diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml index a2e0c66ba5..dade44d145 100644 --- a/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml +++ b/tests/components/xiaomi_rtcgq02lm/test.esp32-c3.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -xiaomi_rtcgq02lm: - - id: motion_rtcgq02lm - mac_address: 01:02:03:04:05:06 - bindkey: "48403ebe2d385db8d0c187f81e62cb64" - -binary_sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - motion: - name: Mi Motion Sensor 2 - light: - name: Mi Motion Sensor 2 Light - button: - name: Mi Motion Sensor 2 Button - -sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - battery_level: - name: Mi Motion Sensor 2 Battery level +<<: !include common.yaml diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32-idf.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32-idf.yaml index a2e0c66ba5..dade44d145 100644 --- a/tests/components/xiaomi_rtcgq02lm/test.esp32-idf.yaml +++ b/tests/components/xiaomi_rtcgq02lm/test.esp32-idf.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -xiaomi_rtcgq02lm: - - id: motion_rtcgq02lm - mac_address: 01:02:03:04:05:06 - bindkey: "48403ebe2d385db8d0c187f81e62cb64" - -binary_sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - motion: - name: Mi Motion Sensor 2 - light: - name: Mi Motion Sensor 2 Light - button: - name: Mi Motion Sensor 2 Button - -sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - battery_level: - name: Mi Motion Sensor 2 Battery level +<<: !include common.yaml diff --git a/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml b/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml index a2e0c66ba5..dade44d145 100644 --- a/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml +++ b/tests/components/xiaomi_rtcgq02lm/test.esp32.yaml @@ -1,22 +1 @@ -esp32_ble_tracker: - -xiaomi_rtcgq02lm: - - id: motion_rtcgq02lm - mac_address: 01:02:03:04:05:06 - bindkey: "48403ebe2d385db8d0c187f81e62cb64" - -binary_sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - motion: - name: Mi Motion Sensor 2 - light: - name: Mi Motion Sensor 2 Light - button: - name: Mi Motion Sensor 2 Button - -sensor: - - platform: xiaomi_rtcgq02lm - id: motion_rtcgq02lm - battery_level: - name: Mi Motion Sensor 2 Battery level +<<: !include common.yaml diff --git a/tests/components/xiaomi_wx08zm/common.yaml b/tests/components/xiaomi_wx08zm/common.yaml new file mode 100644 index 0000000000..3e83ad3e95 --- /dev/null +++ b/tests/components/xiaomi_wx08zm/common.yaml @@ -0,0 +1,10 @@ +esp32_ble_tracker: + +binary_sensor: + - platform: xiaomi_wx08zm + name: WX08ZM Activation State + mac_address: 74:a3:4a:b5:07:34 + tablet: + name: WX08ZM Tablet Resource + battery_level: + name: WX08ZM Battery Level diff --git a/tests/components/xiaomi_wx08zm/test.esp32-c3-idf.yaml b/tests/components/xiaomi_wx08zm/test.esp32-c3-idf.yaml index 3e83ad3e95..dade44d145 100644 --- a/tests/components/xiaomi_wx08zm/test.esp32-c3-idf.yaml +++ b/tests/components/xiaomi_wx08zm/test.esp32-c3-idf.yaml @@ -1,10 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_wx08zm - name: WX08ZM Activation State - mac_address: 74:a3:4a:b5:07:34 - tablet: - name: WX08ZM Tablet Resource - battery_level: - name: WX08ZM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml b/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml index 3e83ad3e95..dade44d145 100644 --- a/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml +++ b/tests/components/xiaomi_wx08zm/test.esp32-c3.yaml @@ -1,10 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_wx08zm - name: WX08ZM Activation State - mac_address: 74:a3:4a:b5:07:34 - tablet: - name: WX08ZM Tablet Resource - battery_level: - name: WX08ZM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_wx08zm/test.esp32-idf.yaml b/tests/components/xiaomi_wx08zm/test.esp32-idf.yaml index 3e83ad3e95..dade44d145 100644 --- a/tests/components/xiaomi_wx08zm/test.esp32-idf.yaml +++ b/tests/components/xiaomi_wx08zm/test.esp32-idf.yaml @@ -1,10 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_wx08zm - name: WX08ZM Activation State - mac_address: 74:a3:4a:b5:07:34 - tablet: - name: WX08ZM Tablet Resource - battery_level: - name: WX08ZM Battery Level +<<: !include common.yaml diff --git a/tests/components/xiaomi_wx08zm/test.esp32.yaml b/tests/components/xiaomi_wx08zm/test.esp32.yaml index 3e83ad3e95..dade44d145 100644 --- a/tests/components/xiaomi_wx08zm/test.esp32.yaml +++ b/tests/components/xiaomi_wx08zm/test.esp32.yaml @@ -1,10 +1 @@ -esp32_ble_tracker: - -binary_sensor: - - platform: xiaomi_wx08zm - name: WX08ZM Activation State - mac_address: 74:a3:4a:b5:07:34 - tablet: - name: WX08ZM Tablet Resource - battery_level: - name: WX08ZM Battery Level +<<: !include common.yaml From b545d5723672f14aacfa839f91f8333df27fa83d Mon Sep 17 00:00:00 2001 From: Trent Houliston Date: Wed, 8 May 2024 08:13:15 +1000 Subject: [PATCH 138/313] Make `pulse_meter` PULSE filter report the pulse as soon as it can (#6014) --- .../components/pulse_meter/pulse_filter.md | 61 ++++++++++++++++ .../pulse_meter/pulse_meter_sensor.cpp | 73 +++++++++++-------- .../pulse_meter/pulse_meter_sensor.h | 20 ++++- 3 files changed, 121 insertions(+), 33 deletions(-) create mode 100644 esphome/components/pulse_meter/pulse_filter.md diff --git a/esphome/components/pulse_meter/pulse_filter.md b/esphome/components/pulse_meter/pulse_filter.md new file mode 100644 index 0000000000..240c479d54 --- /dev/null +++ b/esphome/components/pulse_meter/pulse_filter.md @@ -0,0 +1,61 @@ +# PULSE Filter + +The PULSE filter filters noisy pulses by ensuring that the pulse is in a steady state for at least `filter_length` before allowing the state change to occur. +It counts the pulse time from the rising edge that stayed high for at least `filter_length`, so noise before this won't be considered the start of a pulse. +It then must see a low pulse that is at least `filter_length` long before a subsequent rising edge is considered a new pulse start. + +It's operation should be the same as delayed_on_off from the Binary Sensor component. + +There are three moving parts in the algorithm that are used to determine the state of the filter. + +1. The time between interrupts, measured from the last interrupt, this is compared to filter_length to determine if the pulse has been in a steady state for long enough. +2. A latch variable that is set true when a high pulse is long enough to be considered a valid pulse and is reset when a low pulse is long enough to allow for another pulse to begin. +3. The previous and current state of the pin used to determine if the pulse is rising or falling. + +## Ghost interrupts + +Observations from the devices show that even though the interrupt should trigger on every rising or falling edge, sometimes interrupts show the same state twice in a row. +The current theory is an interprets occurs, but then the pin changing back faster than the ISR can be called and read the value, meaning it sees the same state twice in a row. +The algorithm interprets these when it sees them as two edges in a row, so will potentially reset a pulse if + +## Pulse Filter Truth table + +The following is all of the possible states of the filter along with the new inputs. +It also shows a diagram of a possible series of interrupts that would cause the filter to enter that state. +It then has the action that the filter should take and a description of what is happening. + +Diagram legend + +- `/` rising edge +- `\` falling edge +- `‾` high steady state of at least `filter_length` +- `_` low steady state of at least `filter_length` +- `¦` ghost interrupt + +| Length | Latch | From | To | Diagram | Action | Description | +| ------ | ----- | ---- | --- | ------- | ------------------ | ---------------------------------------------------------------------------------------------------- | +| T | 1 | 0 | 0 | `‾\_¦ ` | Reset | `filter_length` low, reset the latch | +| T | 1 | 0 | 1 | `‾\_/ ` | Reset, Rising Edge | `filter_length` low, reset the latch, rising edge could be a new pulse | +| T | 1 | 1 | 0 | `‾\/‾\` | - | Already latched from a previous `filter_length` high | +| T | 1 | 1 | 1 | `‾\/‾¦` | - | Already latched from a previous `filter_length` high | +| T | 0 | 1 | 1 | `_/‾¦` | Set and Publish | `filter_length` high, set the latch and publish the pulse | +| T | 0 | 1 | 0 | `_/‾\ ` | Set and Publish | `filter_length` high, set the latch and publish the pulse | +| T | 0 | 0 | 1 | `_/\_/` | Rising Edge | Already unlatched from a previous `filter_length` low | +| T | 0 | 0 | 0 | `_/\_¦` | - | Already unlatched from a previous `filter_length` low | +| F | 1 | 0 | 0 | `‾\¦ ` | - | Low was not long enough to reset the latch | +| F | 1 | 0 | 1 | `‾\/ ` | - | Low was not long enough to reset the latch | +| F | 1 | 1 | 0 | `‾\/\ ` | - | Low was not long enough to reset the latch | +| F | 1 | 1 | 1 | `‾¦ ` | - | Ghost of 0 length definitely was not long was not long enough to reset the latch | +| F | 0 | 1 | 1 | `_/¦ ` | Rising Edge | High was not long enough to set the latch, but the second half of the ghost can be a new rising edge | +| F | 0 | 1 | 0 | `_/\ ` | - | High was not long enough to set the latch | +| F | 0 | 0 | 1 | `_/\/ ` | Rising Edge | High was not long enough to set the latch, but this may be a rising edge | +| F | 0 | 0 | 0 | `_¦ ` | - | Ghost of 0 length definitely was not long was not long enough to set the latch | + +## Startup + +On startup the filter should not consider whatever state it is in as valid so it does not count a strange pulse. +There are two possible starting configurations, either the pin is high or the pin is low. +If the pin is high, the subsequent falling edge should not count as a pulse as we never saw the rising edge. +Therefore we start in the latched state. +If the pin is low, the subsequent rising edge can be counted as the first pulse. +Therefore we start in the unlatched state. diff --git a/esphome/components/pulse_meter/pulse_meter_sensor.cpp b/esphome/components/pulse_meter/pulse_meter_sensor.cpp index 14f8e508b5..530425563c 100644 --- a/esphome/components/pulse_meter/pulse_meter_sensor.cpp +++ b/esphome/components/pulse_meter/pulse_meter_sensor.cpp @@ -24,11 +24,16 @@ void PulseMeterSensor::setup() { if (this->filter_mode_ == FILTER_EDGE) { this->pin_->attach_interrupt(PulseMeterSensor::edge_intr, this, gpio::INTERRUPT_RISING_EDGE); } else if (this->filter_mode_ == FILTER_PULSE) { + // Set the pin value to the current value to avoid a false edge + this->pulse_state_.last_pin_val_ = this->isr_pin_.digital_read(); + this->pulse_state_.latched_ = this->pulse_state_.last_pin_val_; this->pin_->attach_interrupt(PulseMeterSensor::pulse_intr, this, gpio::INTERRUPT_ANY_EDGE); } } void PulseMeterSensor::loop() { + const uint32_t now = micros(); + // Reset the count in get before we pass it back to the ISR as set this->get_->count_ = 0; @@ -38,6 +43,20 @@ void PulseMeterSensor::loop() { this->set_ = this->get_; this->get_ = temp; + // If an edge was peeked, repay the debt + if (this->peeked_edge_ && this->get_->count_ > 0) { + this->peeked_edge_ = false; + this->get_->count_--; + } + + // If there is an unprocessed edge, and filter_us_ has passed since, count this edge early + if (this->get_->last_rising_edge_us_ != this->get_->last_detected_edge_us_ && + now - this->get_->last_rising_edge_us_ >= this->filter_us_) { + this->peeked_edge_ = true; + this->get_->last_detected_edge_us_ = this->get_->last_rising_edge_us_; + this->get_->count_++; + } + // Check if we detected a pulse this loop if (this->get_->count_ > 0) { // Keep a running total of pulses if a total sensor is configured @@ -64,7 +83,6 @@ void PulseMeterSensor::loop() { } // No detected edges this loop else { - const uint32_t now = micros(); const uint32_t time_since_valid_edge_us = now - this->last_processed_edge_us_; switch (this->meter_state_) { @@ -102,11 +120,14 @@ void IRAM_ATTR PulseMeterSensor::edge_intr(PulseMeterSensor *sensor) { // This is an interrupt handler - we can't call any virtual method from this method // Get the current time before we do anything else so the measurements are consistent const uint32_t now = micros(); + auto &state = sensor->edge_state_; + auto &set = *sensor->set_; - if ((now - sensor->last_edge_candidate_us_) >= sensor->filter_us_) { - sensor->last_edge_candidate_us_ = now; - sensor->set_->last_detected_edge_us_ = now; - sensor->set_->count_++; + if ((now - state.last_sent_edge_us_) >= sensor->filter_us_) { + state.last_sent_edge_us_ = now; + set.last_detected_edge_us_ = now; + set.last_rising_edge_us_ = now; + set.count_++; } } @@ -115,33 +136,27 @@ void IRAM_ATTR PulseMeterSensor::pulse_intr(PulseMeterSensor *sensor) { // Get the current time before we do anything else so the measurements are consistent const uint32_t now = micros(); const bool pin_val = sensor->isr_pin_.digital_read(); + auto &state = sensor->pulse_state_; + auto &set = *sensor->set_; - // A pulse occurred faster than we can detect - if (sensor->last_pin_val_ == pin_val) { - // If we haven't reached the filter length yet we need to reset our last_intr_ to now - // otherwise we can consider this noise as the "pulse" was certainly less than filter_us_ - if (now - sensor->last_intr_ < sensor->filter_us_) { - sensor->last_intr_ = now; - } - } else { - // Check if the last interrupt was long enough in the past - if (now - sensor->last_intr_ > sensor->filter_us_) { - // High pulse of filter length now falling (therefore last_intr_ was the rising edge) - if (!sensor->in_pulse_ && sensor->last_pin_val_) { - sensor->last_edge_candidate_us_ = sensor->last_intr_; - sensor->in_pulse_ = true; - } - // Low pulse of filter length now rising (therefore last_intr_ was the falling edge) - else if (sensor->in_pulse_ && !sensor->last_pin_val_) { - sensor->set_->last_detected_edge_us_ = sensor->last_edge_candidate_us_; - sensor->set_->count_++; - sensor->in_pulse_ = false; - } - } + // Filter length has passed since the last interrupt + const bool length = now - state.last_intr_ >= sensor->filter_us_; - sensor->last_intr_ = now; - sensor->last_pin_val_ = pin_val; + if (length && state.latched_ && !state.last_pin_val_) { // Long enough low edge + state.latched_ = false; + } else if (length && !state.latched_ && state.last_pin_val_) { // Long enough high edge + state.latched_ = true; + set.last_detected_edge_us_ = state.last_intr_; + set.count_++; } + + // Due to order of operations this includes + // length && latched && rising (just reset from a long low edge) + // !latched && (rising || high) (noise on the line resetting the potential rising edge) + set.last_rising_edge_us_ = !state.latched_ && pin_val ? now : set.last_detected_edge_us_; + + state.last_intr_ = now; + state.last_pin_val_ = pin_val; } } // namespace pulse_meter diff --git a/esphome/components/pulse_meter/pulse_meter_sensor.h b/esphome/components/pulse_meter/pulse_meter_sensor.h index 1cd02e3ca2..76c4a35f03 100644 --- a/esphome/components/pulse_meter/pulse_meter_sensor.h +++ b/esphome/components/pulse_meter/pulse_meter_sensor.h @@ -43,6 +43,7 @@ class PulseMeterSensor : public sensor::Sensor, public Component { // Variables used in the loop enum class MeterState { INITIAL, RUNNING, TIMED_OUT }; MeterState meter_state_ = MeterState::INITIAL; + bool peeked_edge_ = false; uint32_t total_pulses_ = 0; uint32_t last_processed_edge_us_ = 0; @@ -53,6 +54,7 @@ class PulseMeterSensor : public sensor::Sensor, public Component { // (except for resetting the values) struct State { uint32_t last_detected_edge_us_ = 0; + uint32_t last_rising_edge_us_ = 0; uint32_t count_ = 0; }; State state_[2]; @@ -61,10 +63,20 @@ class PulseMeterSensor : public sensor::Sensor, public Component { // Only use these variables in the ISR ISRInternalGPIOPin isr_pin_; - uint32_t last_edge_candidate_us_ = 0; - uint32_t last_intr_ = 0; - bool in_pulse_ = false; - bool last_pin_val_ = false; + + /// Filter state for edge mode + struct EdgeState { + uint32_t last_sent_edge_us_ = 0; + }; + EdgeState edge_state_{}; + + /// Filter state for pulse mode + struct PulseState { + uint32_t last_intr_ = 0; + bool latched_ = false; + bool last_pin_val_ = false; + }; + PulseState pulse_state_{}; }; } // namespace pulse_meter From d9fca585a2972d4d4d041d87c9ee1bc4a41b925c Mon Sep 17 00:00:00 2001 From: esphomebot Date: Wed, 8 May 2024 11:57:03 +1200 Subject: [PATCH 139/313] Update webserver local assets to 20240507-231331 (#6696) --- .../components/web_server/server_index_v3.h | 7968 +++++++++-------- 1 file changed, 3993 insertions(+), 3975 deletions(-) diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h index a7ad3ab543..66cd9de47a 100644 --- a/esphome/components/web_server/server_index_v3.h +++ b/esphome/components/web_server/server_index_v3.h @@ -10,3986 +10,4004 @@ namespace esphome { namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0xeb, 0x7a, 0x1b, 0xb7, 0xb2, 0x20, 0xfa, - 0xfb, 0xcc, 0x53, 0x48, 0xbd, 0x1d, 0xa5, 0x21, 0x82, 0x2d, 0x92, 0xba, 0x58, 0x6e, 0x0a, 0xe2, 0xf8, 0x1a, 0x3b, - 0x71, 0x6c, 0xc7, 0x72, 0xec, 0xd8, 0x0c, 0xb7, 0x02, 0x36, 0x41, 0x12, 0x71, 0x13, 0x60, 0x1a, 0xa0, 0x25, 0x99, - 0xe4, 0xbb, 0x9f, 0xaf, 0x70, 0xe9, 0x46, 0x93, 0xb4, 0xd7, 0x5a, 0x73, 0x66, 0xce, 0x37, 0x3b, 0x7b, 0x59, 0x6c, - 0xdc, 0x51, 0x28, 0x14, 0xaa, 0x0a, 0x55, 0x85, 0x8b, 0xfd, 0x91, 0xcc, 0xf4, 0xdd, 0x9c, 0xed, 0x4d, 0xf5, 0x2c, - 0xbf, 0xbc, 0x70, 0xff, 0x32, 0x3a, 0xba, 0xbc, 0xc8, 0xb9, 0xf8, 0xbc, 0x57, 0xb0, 0x9c, 0xf0, 0x4c, 0x8a, 0xbd, - 0x69, 0xc1, 0xc6, 0x64, 0x44, 0x35, 0x4d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xe5, 0xc5, 0x8c, 0x69, 0xba, 0x97, - 0x4d, 0x69, 0xa1, 0x98, 0x26, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbf, 0xbc, 0x50, 0x59, 0xc1, 0xe7, 0x7a, 0x0f, 0x9a, - 0x24, 0x33, 0x39, 0x5a, 0xe4, 0xec, 0xf2, 0xe8, 0xe8, 0xe6, 0xe6, 0x26, 0xf9, 0x5b, 0xfd, 0x8f, 0x2f, 0xb4, 0xd8, - 0xfb, 0xa5, 0x20, 0xaf, 0x87, 0x7f, 0xb3, 0x4c, 0x27, 0x23, 0x36, 0xe6, 0x82, 0xbd, 0x29, 0xe4, 0x9c, 0x15, 0xfa, - 0xae, 0x0b, 0x99, 0x3f, 0x15, 0x24, 0xe6, 0x58, 0x63, 0x86, 0xc8, 0xa5, 0xde, 0xe3, 0x62, 0x8f, 0xf7, 0x7e, 0x29, - 0x4c, 0xca, 0x92, 0x89, 0xc5, 0x8c, 0x15, 0x74, 0x98, 0xb3, 0x74, 0xbf, 0x85, 0x33, 0x29, 0xc6, 0x7c, 0xb2, 0x28, - 0xbf, 0x6f, 0x0a, 0xae, 0xfd, 0xef, 0x2f, 0x34, 0x5f, 0xb0, 0x94, 0xad, 0x51, 0xca, 0xfb, 0x7a, 0x40, 0x98, 0x69, - 0xf9, 0x73, 0xd5, 0x70, 0xfc, 0x93, 0x69, 0xf2, 0x6e, 0xce, 0xe4, 0x78, 0x4f, 0xef, 0x93, 0x48, 0xdd, 0xcd, 0x86, - 0x32, 0x8f, 0x7a, 0xba, 0x11, 0x45, 0x29, 0x94, 0xc1, 0x0c, 0x75, 0x33, 0x29, 0x94, 0xde, 0x13, 0x9c, 0xdc, 0x70, - 0x31, 0x92, 0x37, 0xf8, 0x46, 0x10, 0xc1, 0x93, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x83, 0x83, 0xd8, - 0x7d, 0xdf, 0x3d, 0xbe, 0xba, 0x22, 0x84, 0x7c, 0x91, 0x7c, 0xb4, 0xd7, 0x5a, 0xad, 0x82, 0xd4, 0x44, 0x50, 0xcd, - 0xbf, 0x30, 0x5b, 0x09, 0x1d, 0x1c, 0x44, 0x74, 0x24, 0xe7, 0x9a, 0x8d, 0xae, 0xf4, 0x5d, 0xce, 0xae, 0xa6, 0x8c, - 0x69, 0x15, 0x71, 0xb1, 0xf7, 0x44, 0x66, 0x8b, 0x19, 0x13, 0x3a, 0x99, 0x17, 0x52, 0x4b, 0x18, 0xd8, 0xc1, 0x41, - 0x54, 0xb0, 0x79, 0x4e, 0x33, 0x06, 0xf9, 0x8f, 0xaf, 0xae, 0xaa, 0x1a, 0x55, 0x21, 0xfc, 0x59, 0x90, 0x2b, 0x33, - 0xf4, 0x18, 0xe1, 0x0f, 0x82, 0x08, 0x76, 0xb3, 0xf7, 0x81, 0xd1, 0xcf, 0xbf, 0xd2, 0x79, 0x37, 0xcb, 0xa9, 0x52, - 0x7b, 0xcf, 0xe4, 0xd2, 0x4c, 0xa3, 0x58, 0x64, 0x5a, 0x16, 0xb1, 0xc6, 0x0c, 0x0b, 0xb4, 0xe4, 0xe3, 0x58, 0x4f, - 0xb9, 0x4a, 0xae, 0xef, 0x65, 0x4a, 0xbd, 0x65, 0x6a, 0x91, 0xeb, 0x7b, 0x64, 0xbf, 0x85, 0xc5, 0x3e, 0x21, 0x9f, - 0x05, 0xd2, 0xd3, 0x42, 0xde, 0xec, 0x3d, 0x2d, 0x0a, 0x59, 0xc4, 0xd1, 0xe3, 0xab, 0x2b, 0x5b, 0x62, 0x8f, 0xab, - 0x3d, 0x21, 0xf5, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xd9, 0xfb, 0x5d, 0xb1, 0xbd, 0xbf, 0x16, 0x42, 0xd1, 0x31, 0x7b, - 0x7c, 0x75, 0xf5, 0xd7, 0x9e, 0x2c, 0xf6, 0xfe, 0xca, 0x94, 0xfa, 0x6b, 0x8f, 0x0b, 0xa5, 0x19, 0x1d, 0x25, 0x11, - 0xea, 0x9a, 0xce, 0x32, 0xa5, 0xde, 0xb1, 0x5b, 0x4d, 0x34, 0x36, 0x9f, 0x9a, 0xb0, 0xf5, 0x84, 0xe9, 0x3d, 0x55, - 0xce, 0x2b, 0x46, 0xcb, 0x9c, 0xe9, 0x3d, 0x4d, 0x4c, 0xbe, 0x74, 0xf0, 0x67, 0xf6, 0x53, 0x77, 0xf9, 0x38, 0xbe, - 0x11, 0x07, 0x07, 0xba, 0x04, 0x34, 0x5a, 0xba, 0x15, 0x22, 0x6c, 0xdf, 0xa7, 0x1d, 0x1c, 0xb0, 0x24, 0x67, 0x62, - 0xa2, 0xa7, 0x84, 0x90, 0x76, 0x57, 0x1c, 0x1c, 0xc4, 0x9a, 0x7c, 0x10, 0xc9, 0x84, 0xe9, 0x98, 0x21, 0x84, 0xab, - 0xda, 0x07, 0x07, 0xb1, 0x05, 0x82, 0x24, 0xda, 0x00, 0xae, 0x06, 0x63, 0x94, 0x38, 0xe8, 0x5f, 0xdd, 0x89, 0x2c, - 0x0e, 0xc7, 0x8f, 0xb0, 0x38, 0x38, 0xf8, 0x20, 0x12, 0x05, 0x2d, 0x62, 0x8d, 0xd0, 0xba, 0x60, 0x7a, 0x51, 0x88, - 0x3d, 0xbd, 0xd6, 0xf2, 0x4a, 0x17, 0x5c, 0x4c, 0x62, 0xb4, 0xf4, 0x69, 0x41, 0xc5, 0xf5, 0xda, 0x0e, 0xf7, 0xb7, - 0x82, 0x70, 0x72, 0x09, 0x3d, 0x3e, 0x93, 0xb1, 0xc3, 0x41, 0x4e, 0x48, 0xa4, 0x4c, 0xdd, 0xa8, 0xc7, 0x53, 0xde, - 0x88, 0x22, 0x6c, 0x47, 0x89, 0x3f, 0x0b, 0x84, 0xb9, 0x06, 0xd4, 0x4d, 0x92, 0x44, 0x23, 0x72, 0xb9, 0xf4, 0x60, - 0xe1, 0xc1, 0x44, 0x7b, 0xbc, 0xdf, 0x1a, 0xa4, 0x3a, 0x29, 0xd8, 0x68, 0x91, 0xb1, 0x38, 0x16, 0x58, 0x61, 0x89, - 0xc8, 0xa5, 0x68, 0xc4, 0x05, 0xb9, 0x84, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xb9, 0x41, 0x16, 0x7e, - 0x84, 0x00, 0x62, 0x37, 0xa0, 0x82, 0x90, 0x48, 0x2c, 0x66, 0x43, 0x56, 0x44, 0x65, 0xb1, 0x6e, 0x0d, 0x2f, 0x16, - 0x8a, 0xed, 0x65, 0x4a, 0xed, 0x8d, 0x17, 0x22, 0xd3, 0x5c, 0x8a, 0xbd, 0xa8, 0x51, 0x34, 0x22, 0x8b, 0x0f, 0x25, - 0x3a, 0x44, 0x68, 0x8d, 0x62, 0x85, 0x1a, 0xbc, 0x2f, 0x1b, 0xed, 0x01, 0x86, 0x51, 0xa2, 0xae, 0x6b, 0xcf, 0x41, - 0x80, 0x61, 0x0e, 0x93, 0x5c, 0xe3, 0x4f, 0x76, 0xe7, 0xc3, 0x14, 0x6f, 0x44, 0x8f, 0x27, 0xdb, 0x3b, 0x85, 0xe8, - 0x64, 0x46, 0xe7, 0x31, 0x23, 0x97, 0xcc, 0x60, 0x17, 0x15, 0x19, 0x8c, 0xb5, 0xb6, 0x70, 0x3d, 0x96, 0xb2, 0xa4, - 0xc2, 0x29, 0x94, 0xea, 0x64, 0x2c, 0x8b, 0xa7, 0x34, 0x9b, 0x42, 0xbd, 0x12, 0x63, 0x46, 0x7e, 0xc3, 0x65, 0x05, - 0xa3, 0x9a, 0x3d, 0xcd, 0x19, 0x7c, 0xc5, 0x91, 0xa9, 0x19, 0x21, 0xac, 0x60, 0xab, 0xe7, 0x5c, 0xbf, 0x92, 0x22, - 0x63, 0x5d, 0x15, 0xe0, 0x97, 0x59, 0xf9, 0x87, 0x5a, 0x17, 0x7c, 0xb8, 0xd0, 0x2c, 0x8e, 0x04, 0x94, 0x88, 0xb0, - 0x42, 0x58, 0x24, 0x9a, 0xdd, 0xea, 0xc7, 0x52, 0x68, 0x26, 0x34, 0x61, 0x1e, 0xaa, 0x98, 0x27, 0x74, 0x3e, 0x67, - 0x62, 0xf4, 0x78, 0xca, 0xf3, 0x51, 0x2c, 0xd0, 0x1a, 0xad, 0xf1, 0xef, 0x82, 0xc0, 0x24, 0xc9, 0x25, 0x4f, 0xe1, - 0x9f, 0x6f, 0x4f, 0x27, 0xd6, 0xe4, 0xd2, 0x6c, 0x0b, 0x46, 0xa2, 0xa8, 0x3b, 0x96, 0x45, 0xec, 0xa6, 0xb0, 0x07, - 0xa4, 0x0b, 0xfa, 0x78, 0xbb, 0xc8, 0x99, 0x42, 0xac, 0x41, 0x44, 0xb9, 0x8e, 0x0e, 0xc2, 0xbf, 0x15, 0x31, 0x83, - 0x05, 0xe0, 0x28, 0xe5, 0x86, 0x04, 0xbe, 0xe4, 0x6e, 0x53, 0x8d, 0x4a, 0xa2, 0xf6, 0x51, 0x90, 0x11, 0x4f, 0x74, - 0xb1, 0x50, 0x9a, 0x8d, 0xde, 0xdd, 0xcd, 0x99, 0xc2, 0x3f, 0x17, 0xe4, 0xa3, 0xe8, 0x7d, 0x14, 0x09, 0x9b, 0xcd, - 0xf5, 0xdd, 0x95, 0xa1, 0xe6, 0x69, 0x14, 0xe1, 0x7f, 0x4c, 0xd1, 0x82, 0xd1, 0x0c, 0x48, 0x9a, 0x03, 0xd9, 0x1b, - 0x99, 0xdf, 0x8d, 0x79, 0x9e, 0x5f, 0x2d, 0xe6, 0x73, 0x59, 0x68, 0xac, 0x05, 0x59, 0x6a, 0x59, 0xc1, 0x07, 0x56, - 0x74, 0xa9, 0x6e, 0xb8, 0xce, 0xa6, 0xb1, 0x46, 0xcb, 0x8c, 0x2a, 0xb6, 0xf7, 0x48, 0xca, 0x9c, 0x51, 0x91, 0x72, - 0xc2, 0x7b, 0x3f, 0x17, 0xa9, 0x58, 0xe4, 0x79, 0x77, 0x58, 0x30, 0xfa, 0xb9, 0x6b, 0xb2, 0xed, 0xe1, 0x90, 0x9a, - 0xdf, 0x0f, 0x8b, 0x82, 0xde, 0x41, 0x41, 0x42, 0xa0, 0x58, 0x8f, 0xa7, 0x3f, 0x5f, 0xbd, 0x7e, 0x95, 0xd8, 0xbd, - 0xc2, 0xc7, 0x77, 0x31, 0x2f, 0xf7, 0x1f, 0x5f, 0xe3, 0x71, 0x21, 0x67, 0x1b, 0x5d, 0x5b, 0xd0, 0xf1, 0xee, 0x37, - 0x86, 0xc0, 0x08, 0xdf, 0xb7, 0x4d, 0x87, 0x23, 0x78, 0x65, 0x30, 0x1f, 0x32, 0x89, 0xeb, 0x17, 0xfe, 0x49, 0x6d, - 0x72, 0xcc, 0xd1, 0xf7, 0x47, 0xab, 0x8b, 0xbb, 0x25, 0x23, 0x66, 0x9c, 0x73, 0x38, 0x18, 0x61, 0x8c, 0x19, 0xd5, - 0xd9, 0x74, 0xc9, 0x4c, 0x63, 0x6b, 0x3f, 0x62, 0xb6, 0x5e, 0xe3, 0xaf, 0xd2, 0x63, 0xbd, 0xde, 0x27, 0x84, 0x1b, - 0x7a, 0x45, 0xf4, 0x6a, 0xc5, 0x09, 0xe1, 0x08, 0xbf, 0xe5, 0x64, 0x49, 0xfd, 0x84, 0xe0, 0x64, 0x83, 0xed, 0x99, - 0x5a, 0x2a, 0x03, 0x27, 0xe0, 0x17, 0x56, 0x68, 0x56, 0xa4, 0x5a, 0xe0, 0x82, 0x8d, 0x73, 0x18, 0xc7, 0x7e, 0x1b, - 0x4f, 0xa9, 0x7a, 0x3c, 0xa5, 0x62, 0xc2, 0x46, 0xe9, 0x57, 0xb9, 0xc6, 0x4c, 0x90, 0x68, 0xcc, 0x05, 0xcd, 0xf9, - 0x57, 0x36, 0x8a, 0xdc, 0xb9, 0xf0, 0x48, 0xef, 0xb1, 0x5b, 0xcd, 0xc4, 0x48, 0xed, 0x3d, 0x7f, 0xf7, 0xeb, 0x4b, - 0xb7, 0x98, 0xb5, 0xb3, 0x02, 0x2d, 0xd5, 0x62, 0xce, 0x8a, 0x18, 0x61, 0x77, 0x56, 0x3c, 0xe5, 0x86, 0x4e, 0xfe, - 0x4a, 0xe7, 0x36, 0x85, 0xab, 0xdf, 0xe7, 0x23, 0xaa, 0xd9, 0x1b, 0x26, 0x46, 0x5c, 0x4c, 0xc8, 0x7e, 0xdb, 0xa6, - 0x4f, 0xa9, 0xcb, 0x18, 0x95, 0x49, 0xd7, 0xf7, 0x9e, 0xe6, 0x66, 0xee, 0xe5, 0xe7, 0x22, 0x46, 0x6b, 0xa5, 0xa9, - 0xe6, 0xd9, 0x1e, 0x1d, 0x8d, 0x5e, 0x08, 0xae, 0xb9, 0x19, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xec, 0xa9, 0xe1, - 0x47, 0x1e, 0x23, 0x1c, 0xc7, 0xee, 0x2c, 0x98, 0x22, 0xb7, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb1, 0xd4, 0x66, - 0x92, 0xfe, 0x00, 0x25, 0xf3, 0x85, 0x82, 0xc5, 0xf6, 0x5d, 0xc0, 0x41, 0x23, 0x87, 0x8a, 0x15, 0x5f, 0xd8, 0xa8, - 0x44, 0x10, 0x15, 0xa3, 0xe5, 0x46, 0x1f, 0x6e, 0x7b, 0x68, 0xd2, 0x1f, 0x74, 0x43, 0x12, 0xce, 0x1c, 0xb2, 0x5b, - 0x4e, 0x85, 0x33, 0x55, 0x12, 0x95, 0x18, 0x0e, 0xd4, 0x92, 0xb0, 0x28, 0xe2, 0xe7, 0x37, 0x8f, 0x05, 0xf0, 0x10, - 0x21, 0xe5, 0xf0, 0x67, 0xee, 0xd3, 0x2f, 0xe6, 0xf0, 0x50, 0x58, 0x20, 0xac, 0xed, 0x48, 0x15, 0x42, 0x6b, 0x84, - 0xb5, 0x1f, 0xae, 0x25, 0x4a, 0x9e, 0x2f, 0x82, 0x53, 0x9b, 0xbc, 0xe5, 0xe6, 0xd8, 0x06, 0xda, 0x46, 0x35, 0x3b, - 0x38, 0x88, 0x59, 0x52, 0x22, 0x06, 0xd9, 0x6f, 0xbb, 0x45, 0x0a, 0xa0, 0xf5, 0x8d, 0x71, 0x43, 0xcf, 0x86, 0xc1, - 0xd9, 0x67, 0x89, 0x90, 0x0f, 0xb3, 0x8c, 0x29, 0x25, 0x8b, 0x83, 0x83, 0x7d, 0x53, 0xbe, 0xe4, 0x2c, 0x60, 0x11, - 0x5f, 0xdf, 0x88, 0x6a, 0x08, 0xa8, 0x3a, 0x6d, 0x3d, 0xdf, 0x44, 0x2a, 0xbe, 0xc9, 0x33, 0x21, 0x69, 0x74, 0x7d, - 0x1d, 0x35, 0x34, 0x76, 0x70, 0x98, 0x30, 0xdf, 0xf5, 0xdd, 0x13, 0x66, 0xd9, 0x42, 0xc3, 0x84, 0x6c, 0x81, 0x66, - 0x27, 0x3f, 0x18, 0xd7, 0x87, 0x84, 0x35, 0x56, 0x68, 0x1d, 0xac, 0xe8, 0xce, 0xa6, 0x0d, 0x7f, 0x63, 0x97, 0x6e, - 0x39, 0x31, 0x3c, 0x45, 0xb0, 0x8e, 0x7d, 0x36, 0x58, 0x63, 0x03, 0x7b, 0x3f, 0x1b, 0x69, 0x06, 0xda, 0xd7, 0x83, - 0xae, 0xcb, 0x27, 0xca, 0x42, 0xae, 0x60, 0xff, 0x2c, 0x98, 0xd2, 0x16, 0x91, 0x63, 0x8d, 0x25, 0x86, 0x33, 0x6a, - 0x93, 0xe9, 0xac, 0xb1, 0xa4, 0xbb, 0xc6, 0xf6, 0x7a, 0x0e, 0x67, 0xa3, 0x02, 0xa4, 0xfe, 0x3e, 0x3e, 0xc1, 0x58, - 0x35, 0x5a, 0xad, 0xde, 0x72, 0xdf, 0x4a, 0xb5, 0x96, 0x25, 0xbf, 0xb6, 0xb1, 0x28, 0x4c, 0x20, 0x77, 0x38, 0xef, - 0xb7, 0xdd, 0xf8, 0xc5, 0x80, 0xec, 0xb7, 0x4a, 0x2c, 0x76, 0x60, 0xb5, 0xe3, 0xb1, 0x50, 0x7c, 0x6d, 0x9b, 0x42, - 0xe6, 0xac, 0xaf, 0xe1, 0x4b, 0x32, 0xdd, 0xc2, 0xd5, 0x29, 0xe9, 0x03, 0xd7, 0x91, 0x4c, 0x07, 0xdf, 0xc2, 0x27, - 0x4f, 0x11, 0x62, 0xbd, 0x9d, 0x57, 0x11, 0x8e, 0x2f, 0x75, 0xc2, 0xb1, 0x31, 0x8d, 0x68, 0x5e, 0x56, 0x89, 0x4a, - 0x34, 0x73, 0x5b, 0xbd, 0xca, 0xc2, 0xc2, 0x0c, 0xa6, 0x9a, 0x52, 0xd0, 0xc4, 0x2b, 0x3a, 0x63, 0x2a, 0x66, 0x08, - 0x7f, 0xab, 0x80, 0xc5, 0x4f, 0x28, 0x32, 0x08, 0xce, 0x50, 0x05, 0x67, 0x28, 0xb0, 0xbb, 0xc0, 0xa4, 0xd5, 0xb7, - 0x9c, 0xc2, 0xac, 0xaf, 0x06, 0x15, 0x6f, 0x17, 0x4c, 0xde, 0x1c, 0xce, 0x0e, 0xc1, 0x3d, 0xfc, 0x6c, 0x9a, 0x05, - 0x9a, 0x61, 0x21, 0x14, 0xc2, 0xfb, 0xad, 0xcd, 0x95, 0xf4, 0xa5, 0xaa, 0x39, 0xf6, 0x07, 0xb0, 0x0e, 0xe6, 0xd8, - 0x48, 0xb8, 0x32, 0x7f, 0x6b, 0x5b, 0x0d, 0xc0, 0x76, 0x05, 0x98, 0x91, 0x8c, 0x73, 0xaa, 0xe3, 0xf6, 0x51, 0x0b, - 0x18, 0xd3, 0x2f, 0x0c, 0x4e, 0x15, 0x84, 0xb6, 0xa7, 0xc2, 0x92, 0x85, 0x50, 0x53, 0x3e, 0xd6, 0xf1, 0xef, 0xc2, - 0x10, 0x15, 0x96, 0x2b, 0x06, 0x12, 0x4e, 0xc0, 0x1e, 0x1b, 0x82, 0xf3, 0xbb, 0x80, 0x7e, 0xba, 0xe5, 0x41, 0xe4, - 0x46, 0x6a, 0x08, 0x17, 0x90, 0x87, 0x8a, 0xb5, 0xae, 0xc8, 0x4c, 0xc9, 0xb8, 0x01, 0xf7, 0xd8, 0xee, 0xd9, 0x16, - 0x53, 0x47, 0x0d, 0x44, 0xc0, 0xc1, 0x8a, 0x34, 0x24, 0x11, 0x2e, 0x51, 0x27, 0x5a, 0xbe, 0x94, 0x37, 0xac, 0x78, - 0x4c, 0x61, 0xf0, 0xa9, 0xad, 0xbe, 0xb6, 0x47, 0x81, 0xa1, 0xf8, 0xba, 0xeb, 0xf1, 0xe5, 0xda, 0x4c, 0xfc, 0x4d, - 0x21, 0x67, 0x5c, 0x31, 0xe0, 0xdb, 0x2c, 0xfc, 0x05, 0x6c, 0x34, 0xb3, 0x23, 0xe1, 0xb8, 0x61, 0x25, 0x7e, 0x3d, - 0x7c, 0x59, 0xc7, 0xaf, 0xeb, 0x7b, 0x4f, 0x27, 0x9e, 0x02, 0xd6, 0xf7, 0x31, 0xc2, 0xb1, 0x13, 0x2f, 0x82, 0x93, - 0x2e, 0x99, 0x22, 0x77, 0xcc, 0xaf, 0x56, 0x3a, 0x10, 0xe3, 0x6a, 0x9c, 0x23, 0xb3, 0xdb, 0x06, 0xad, 0xe9, 0x68, - 0x04, 0x2c, 0x5e, 0x21, 0xf3, 0x3c, 0x38, 0xac, 0xb0, 0xe8, 0x96, 0xc7, 0xd3, 0xf5, 0xbd, 0xa7, 0x57, 0xdf, 0x3b, - 0xa1, 0x20, 0x3f, 0x3c, 0xa4, 0xfc, 0x40, 0xc5, 0x88, 0x15, 0x20, 0x57, 0x06, 0xab, 0xe5, 0xce, 0xd9, 0xc7, 0x52, - 0x08, 0x96, 0x69, 0x36, 0x02, 0xa1, 0x45, 0x10, 0x9d, 0x4c, 0xa5, 0xd2, 0x65, 0x62, 0x35, 0x7a, 0x11, 0x0a, 0xa1, - 0x49, 0x46, 0xf3, 0x3c, 0xb6, 0x02, 0xca, 0x4c, 0x7e, 0x61, 0x3b, 0x46, 0xdd, 0xad, 0x0d, 0xb9, 0x6c, 0x86, 0x05, - 0xcd, 0xb0, 0x44, 0xcd, 0x73, 0x9e, 0xb1, 0xf2, 0xf0, 0xba, 0x4a, 0xb8, 0x18, 0xb1, 0x5b, 0xa0, 0x23, 0xe8, 0xf2, - 0xf2, 0xb2, 0x85, 0xdb, 0x68, 0x6d, 0x01, 0xbe, 0xdc, 0x02, 0xec, 0x77, 0x8e, 0x4d, 0x2b, 0x88, 0x2f, 0x77, 0x92, - 0x35, 0x14, 0x9c, 0x95, 0xdc, 0x0b, 0x5a, 0x96, 0x3c, 0x23, 0x3c, 0x62, 0x39, 0xd3, 0xcc, 0x93, 0x73, 0x60, 0xa6, - 0xed, 0xd6, 0x7d, 0x5b, 0xc2, 0xaf, 0x44, 0x27, 0xbf, 0xcb, 0xfc, 0x9a, 0xab, 0x52, 0x74, 0xaf, 0x96, 0xa7, 0x82, - 0x76, 0x4f, 0xdb, 0xe5, 0xa1, 0x5a, 0xd3, 0x6c, 0x6a, 0x25, 0xf6, 0x78, 0x6b, 0x4a, 0x55, 0x1b, 0x8e, 0xb4, 0x97, - 0x9b, 0xe8, 0x53, 0xe1, 0x86, 0xb9, 0x0b, 0x04, 0x57, 0x8e, 0x28, 0x30, 0x10, 0x02, 0xed, 0xb2, 0x3d, 0xa6, 0x79, - 0x3e, 0xa4, 0xd9, 0xe7, 0x3a, 0xf6, 0x57, 0x68, 0x40, 0x36, 0xa9, 0x71, 0x90, 0x15, 0x90, 0xac, 0x70, 0xde, 0x9e, - 0x4a, 0xd7, 0x36, 0x4a, 0xbc, 0xdf, 0xaa, 0xd0, 0xbe, 0xbe, 0xd0, 0xdf, 0xc4, 0x76, 0x33, 0x22, 0xe1, 0x66, 0x16, - 0x03, 0x15, 0xf8, 0x97, 0x18, 0xe7, 0xe9, 0x81, 0xc3, 0x3b, 0x10, 0x3c, 0xd6, 0x1b, 0x03, 0xd1, 0x68, 0xb9, 0x1e, - 0x71, 0xf5, 0x6d, 0x08, 0xfc, 0x6f, 0x19, 0xe5, 0x93, 0xa0, 0x87, 0x7f, 0x77, 0xa0, 0x25, 0x8d, 0x73, 0x8c, 0x73, - 0x39, 0x32, 0xc7, 0x50, 0x78, 0x42, 0xf3, 0x0b, 0x30, 0x2f, 0x06, 0xdf, 0x5f, 0xdb, 0x2c, 0xc3, 0x97, 0xc1, 0x30, - 0x54, 0x37, 0x64, 0x28, 0x6a, 0x28, 0xe0, 0x88, 0xaa, 0x30, 0x67, 0xae, 0xac, 0x89, 0x92, 0x8e, 0x6b, 0xb7, 0xe2, - 0xb8, 0xa3, 0xb9, 0x05, 0x89, 0xe3, 0x58, 0x81, 0x34, 0xe7, 0xf9, 0xfb, 0x6a, 0x16, 0x6a, 0x6b, 0x16, 0x2a, 0x09, - 0xa4, 0x2d, 0x54, 0x21, 0x73, 0x50, 0x3d, 0xd5, 0x02, 0x85, 0xa5, 0x80, 0x65, 0x4d, 0x80, 0x42, 0xa3, 0x92, 0xe0, - 0xe6, 0x44, 0xe3, 0xc2, 0x89, 0x3a, 0x0e, 0xd7, 0x80, 0x64, 0x54, 0x55, 0x24, 0xb2, 0x9b, 0xa3, 0x26, 0xfb, 0x4a, - 0x5c, 0xa0, 0x0d, 0xfe, 0x7e, 0xbd, 0x76, 0x50, 0x62, 0xc8, 0xad, 0x4e, 0x8d, 0x31, 0x0e, 0xc0, 0x82, 0x25, 0x71, - 0xcc, 0xb0, 0x65, 0x7d, 0x36, 0x81, 0x53, 0xb6, 0xbb, 0x4f, 0x88, 0xac, 0x60, 0x53, 0x63, 0x2a, 0x3d, 0x77, 0x25, - 0x11, 0xa6, 0x9e, 0x2d, 0x2d, 0xaa, 0x89, 0x13, 0x12, 0x79, 0xed, 0x44, 0xd4, 0x5b, 0xd6, 0x84, 0xc3, 0x34, 0x28, - 0xb6, 0x4e, 0x81, 0xa8, 0x16, 0xbb, 0xe0, 0xbd, 0x0b, 0x6b, 0x6a, 0xed, 0x04, 0x10, 0x2f, 0x6a, 0x10, 0x0f, 0x40, - 0x2b, 0x2d, 0xf1, 0x92, 0x03, 0x42, 0xeb, 0x95, 0x63, 0x86, 0x0b, 0xbb, 0x10, 0x5b, 0x50, 0xdc, 0x64, 0x3f, 0x0d, - 0x16, 0x82, 0x2c, 0xab, 0x80, 0xbf, 0x0b, 0x8f, 0x88, 0x18, 0x06, 0x2f, 0x56, 0xab, 0x2d, 0xb4, 0xdb, 0xc9, 0x85, - 0xa2, 0xa4, 0x92, 0x0e, 0x57, 0xab, 0xaf, 0x12, 0xc5, 0x8e, 0xff, 0xc5, 0x0c, 0xf5, 0x3c, 0xd1, 0x7d, 0xf8, 0x12, - 0x4a, 0x19, 0x76, 0xb4, 0x4a, 0x29, 0x05, 0x87, 0x3a, 0xd6, 0xd6, 0x17, 0x4a, 0x07, 0x94, 0xfb, 0xf1, 0x16, 0x01, - 0x33, 0x89, 0xee, 0xa4, 0xae, 0xa6, 0xfc, 0xd8, 0x35, 0x2d, 0x10, 0x42, 0xa9, 0x32, 0xb2, 0xcc, 0xfe, 0x2e, 0xf9, - 0xf2, 0xe0, 0x40, 0x05, 0x0d, 0x5d, 0x97, 0x94, 0xe2, 0xef, 0x18, 0x4e, 0x65, 0x75, 0x27, 0x0c, 0xfb, 0xf2, 0xb7, - 0x3f, 0x87, 0xb6, 0xa4, 0xd3, 0x56, 0x17, 0x04, 0x73, 0x7a, 0x43, 0xb9, 0xde, 0x2b, 0x5b, 0xb1, 0x82, 0x79, 0xcc, - 0xd0, 0xd2, 0x71, 0x1b, 0x49, 0xc1, 0x80, 0x7f, 0x04, 0xb2, 0xe0, 0xb9, 0x68, 0x8b, 0xf8, 0xd9, 0x94, 0x81, 0x2a, - 0xdb, 0x33, 0x12, 0xa5, 0x78, 0xb8, 0xef, 0x0e, 0x12, 0xd7, 0xf0, 0xee, 0xb1, 0xaf, 0x37, 0xab, 0xd7, 0xa4, 0x81, - 0x39, 0x2b, 0xc6, 0xb2, 0x98, 0xf9, 0xbc, 0xf5, 0xc6, 0xb7, 0x23, 0x8e, 0x7c, 0x1c, 0xef, 0x6c, 0xdb, 0x89, 0x00, - 0xdd, 0x0d, 0xd9, 0xbb, 0x92, 0xda, 0x6b, 0xa7, 0x69, 0x79, 0x00, 0x5b, 0x05, 0xa1, 0xc7, 0x4c, 0x15, 0x4a, 0xf9, - 0x4e, 0xbd, 0xda, 0xb5, 0xba, 0x93, 0xfd, 0x76, 0xb7, 0x94, 0xfc, 0x3c, 0x36, 0x74, 0xad, 0x8e, 0xc3, 0x9d, 0xaa, - 0x72, 0x91, 0x8f, 0xdc, 0x60, 0x05, 0xc2, 0xcc, 0xe1, 0xd1, 0x0d, 0xcf, 0xf3, 0x2a, 0xf5, 0x3f, 0x21, 0xed, 0xca, - 0x91, 0x76, 0xe9, 0x49, 0x3b, 0x90, 0x0a, 0x20, 0xed, 0xb6, 0xb9, 0xaa, 0xba, 0xdc, 0xda, 0x9e, 0xd2, 0x12, 0x75, - 0x65, 0xc4, 0x69, 0xe8, 0x6f, 0xe1, 0x47, 0x80, 0x4a, 0xe6, 0xeb, 0x73, 0xec, 0xf4, 0x31, 0x20, 0x06, 0x5a, 0x9d, - 0x26, 0x0b, 0x35, 0x15, 0x9f, 0x63, 0x84, 0xd5, 0x9a, 0x95, 0x98, 0xfd, 0xf0, 0x29, 0x28, 0xed, 0x82, 0xe9, 0xc0, - 0x39, 0x66, 0x92, 0xff, 0x23, 0x3e, 0xca, 0xcf, 0x4e, 0xb8, 0xd9, 0x29, 0x3f, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0x46, - 0xdf, 0xa7, 0xf6, 0x66, 0x7a, 0xa2, 0x9c, 0x5e, 0xb5, 0xde, 0xab, 0x55, 0xbc, 0x91, 0x02, 0x1a, 0x7d, 0x27, 0xa5, - 0x14, 0x65, 0xeb, 0x40, 0x03, 0x42, 0xc8, 0x40, 0xc2, 0xda, 0x4e, 0xba, 0x3c, 0xe5, 0x5e, 0xfe, 0x2b, 0x3d, 0x8f, - 0x51, 0xdc, 0xdb, 0xfa, 0x8f, 0xe5, 0x6c, 0x0e, 0x0c, 0xd9, 0x06, 0x4a, 0x4f, 0x98, 0xeb, 0xb0, 0xca, 0x5f, 0xef, - 0x48, 0xab, 0xd5, 0x31, 0xfb, 0xb1, 0x86, 0x4d, 0xa5, 0xd4, 0xbc, 0xdf, 0x5a, 0x2f, 0xca, 0xa4, 0x92, 0x70, 0xec, - 0xd2, 0xad, 0x3c, 0xde, 0xd4, 0xcc, 0xf8, 0x8c, 0xd7, 0xb1, 0xb0, 0x74, 0x58, 0x00, 0xad, 0x0b, 0xc8, 0x8f, 0x47, - 0xf7, 0x70, 0xfd, 0xd7, 0x15, 0x70, 0x96, 0xeb, 0x0d, 0xf0, 0x2d, 0xd7, 0xeb, 0x47, 0xda, 0x49, 0xda, 0xf8, 0xd1, - 0x0e, 0xb9, 0xb7, 0x84, 0x5e, 0x95, 0xe9, 0x64, 0xc6, 0xfe, 0x00, 0xd2, 0xb6, 0x58, 0x48, 0xb2, 0x9c, 0xc9, 0x11, - 0x4b, 0x23, 0x39, 0x67, 0x22, 0x5a, 0x83, 0x9e, 0xd5, 0x21, 0xc0, 0x3f, 0x22, 0x5e, 0xbe, 0xad, 0xeb, 0x5b, 0xd3, - 0x47, 0x7a, 0x0d, 0xaa, 0xb0, 0x97, 0x7c, 0x87, 0x32, 0xf6, 0x3d, 0x2b, 0x94, 0xe1, 0x49, 0x4b, 0xf6, 0xf6, 0x25, - 0xaf, 0x0e, 0xa8, 0x97, 0x3c, 0xfd, 0x76, 0x95, 0x4a, 0x20, 0x89, 0xda, 0xc9, 0x59, 0x72, 0x1c, 0x21, 0xa3, 0x31, - 0x7e, 0xe6, 0x35, 0xc6, 0x8b, 0x52, 0x63, 0xfc, 0x5c, 0x93, 0xc5, 0x86, 0xc6, 0xf8, 0x0f, 0x41, 0x9e, 0xeb, 0xde, - 0x73, 0xaf, 0x4d, 0x7f, 0x23, 0x73, 0x9e, 0xdd, 0xc5, 0x51, 0xce, 0x75, 0x13, 0x6e, 0x13, 0x23, 0xbc, 0xb4, 0x19, - 0xa0, 0x6a, 0x34, 0xfa, 0xee, 0xb5, 0x97, 0xff, 0xb0, 0x10, 0x24, 0xba, 0x97, 0x73, 0x7d, 0x2f, 0xc2, 0x53, 0x4d, - 0xfe, 0x82, 0x5f, 0xf7, 0x96, 0xf1, 0xaf, 0x54, 0x4f, 0x93, 0x82, 0x8a, 0x91, 0x9c, 0xc5, 0xa8, 0x11, 0x45, 0x28, - 0x51, 0x46, 0x08, 0x79, 0x80, 0xd6, 0xf7, 0xfe, 0xc2, 0xaf, 0x24, 0x89, 0x7a, 0x51, 0x63, 0xaa, 0xb1, 0xa6, 0xe4, - 0xaf, 0x8b, 0x7b, 0xcb, 0x57, 0x72, 0x7d, 0xf9, 0x17, 0x7e, 0xaa, 0x4b, 0xb5, 0x3e, 0xbe, 0x65, 0x24, 0x46, 0xe4, - 0xf2, 0xa9, 0x1f, 0xd2, 0x63, 0x39, 0xb3, 0x0a, 0xfe, 0x08, 0xe1, 0x2f, 0xa0, 0xd7, 0xbd, 0xe4, 0x15, 0x11, 0x72, - 0x77, 0x30, 0xfb, 0x24, 0x92, 0x46, 0x79, 0x10, 0x1d, 0x1c, 0x04, 0x69, 0x25, 0x0b, 0x81, 0xff, 0x96, 0xa4, 0x26, - 0xaa, 0x63, 0x46, 0xa1, 0xa5, 0xbf, 0x65, 0xcc, 0x91, 0x6f, 0x26, 0xf6, 0x9a, 0x6a, 0xb7, 0x63, 0x79, 0xdf, 0xea, - 0x1e, 0x12, 0xae, 0x59, 0x41, 0xb5, 0x2c, 0x06, 0x28, 0x64, 0x4b, 0xf0, 0x57, 0x4e, 0xfe, 0xea, 0xef, 0xfd, 0x3f, - 0xff, 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xe0, 0x2f, 0x2c, 0x18, 0x39, 0xba, 0x88, 0x7b, 0x69, 0xbc, 0xdf, 0x6c, 0xae, - 0xfe, 0x3c, 0xea, 0xff, 0x37, 0x6d, 0x7e, 0x7d, 0xd8, 0xfc, 0x34, 0x40, 0xab, 0xf8, 0xcf, 0xa3, 0x5e, 0xdf, 0x7d, - 0xf5, 0xff, 0xfb, 0xf2, 0x4f, 0x35, 0x38, 0xb4, 0x89, 0xf7, 0x10, 0x3a, 0x9a, 0xe0, 0x5f, 0x04, 0x39, 0x6a, 0x36, - 0x2f, 0x8f, 0x26, 0xf8, 0x27, 0x41, 0x8e, 0xe0, 0xef, 0x9d, 0x26, 0x6f, 0xd9, 0xe4, 0xe9, 0xed, 0x3c, 0xfe, 0xeb, - 0x72, 0x75, 0x6f, 0xf9, 0x95, 0xaf, 0xa1, 0xdd, 0xfe, 0x7f, 0xff, 0xf9, 0xa7, 0x8a, 0x7e, 0xbc, 0x24, 0x47, 0x83, - 0x06, 0x8a, 0x4d, 0xf2, 0x21, 0xb1, 0x7f, 0xe2, 0x5e, 0xda, 0xff, 0x6f, 0x37, 0x94, 0xe8, 0xc7, 0x3f, 0xff, 0xba, - 0xb8, 0x24, 0x83, 0x55, 0x1c, 0xad, 0x7e, 0x44, 0x2b, 0x84, 0x56, 0xf7, 0xd0, 0x5f, 0x38, 0x9a, 0x44, 0x08, 0xff, - 0x26, 0xc8, 0xd1, 0x8f, 0x47, 0x13, 0xfc, 0x49, 0x90, 0xa3, 0xe8, 0x68, 0x82, 0xdf, 0x4b, 0x72, 0xf4, 0xdf, 0x71, - 0x2f, 0xb5, 0x4a, 0xb8, 0x95, 0x51, 0x7f, 0xac, 0xe0, 0x26, 0x84, 0x16, 0x8c, 0xae, 0x34, 0xd7, 0x39, 0x43, 0xf7, - 0x8e, 0x38, 0x7e, 0x24, 0x01, 0x58, 0xb1, 0x06, 0x25, 0x8d, 0xb9, 0x84, 0x5d, 0x5e, 0xc3, 0xc2, 0x03, 0x06, 0xdd, - 0x4b, 0x39, 0xb6, 0x7a, 0x02, 0x95, 0x6a, 0x7b, 0x7b, 0xab, 0xe0, 0xfa, 0x16, 0x3f, 0x26, 0x8f, 0x64, 0xdc, 0x46, - 0x98, 0x53, 0xf8, 0xd1, 0x41, 0xf8, 0x83, 0x76, 0x17, 0x9e, 0xb0, 0xcd, 0x2d, 0x86, 0x09, 0x69, 0xf9, 0x99, 0x08, - 0xe1, 0x97, 0x3b, 0x32, 0xf5, 0x14, 0xd4, 0x0f, 0x08, 0xff, 0x5c, 0xbb, 0x1e, 0xc5, 0x8f, 0x35, 0x29, 0x91, 0xe3, - 0x5d, 0xc1, 0xd8, 0x07, 0x9a, 0x7f, 0x66, 0x45, 0xfc, 0x54, 0xe3, 0x76, 0xe7, 0x01, 0x36, 0xaa, 0xea, 0xfd, 0x36, - 0xea, 0x96, 0xb7, 0x5b, 0xcf, 0xa5, 0xbd, 0x4f, 0x80, 0x53, 0xb8, 0xae, 0xaf, 0x81, 0xb5, 0xdf, 0xe7, 0x5b, 0x4a, - 0xad, 0x82, 0xde, 0x44, 0xa8, 0x7e, 0x95, 0xca, 0xc5, 0x17, 0x9a, 0xf3, 0xd1, 0x9e, 0x66, 0xb3, 0x79, 0x4e, 0x35, - 0xdb, 0x73, 0x73, 0xde, 0xa3, 0xd0, 0x50, 0x54, 0xf2, 0x14, 0x7f, 0x88, 0x6a, 0xd3, 0xfe, 0x21, 0x92, 0x6a, 0xef, - 0xc4, 0x70, 0x9f, 0xe5, 0xf8, 0x12, 0x41, 0xcb, 0xeb, 0xb2, 0xcd, 0x1b, 0xc1, 0x66, 0x1b, 0x94, 0x65, 0x03, 0x73, - 0x7e, 0x2b, 0x0c, 0xf7, 0x9b, 0x84, 0x74, 0x7a, 0xd1, 0x85, 0xfa, 0x32, 0xb9, 0x8c, 0xe0, 0x26, 0xa7, 0x20, 0x82, - 0x19, 0xe5, 0x11, 0x94, 0xa0, 0xa4, 0xd5, 0xa5, 0x17, 0xac, 0x4b, 0x1b, 0x0d, 0xcf, 0x66, 0x67, 0x84, 0xf7, 0xa9, - 0xad, 0x9f, 0xe3, 0x29, 0x1e, 0x91, 0x66, 0x1b, 0x2f, 0x48, 0xcb, 0x54, 0xe9, 0x2e, 0x2e, 0x32, 0xd7, 0xcf, 0xc1, - 0x41, 0x5c, 0x24, 0x39, 0x55, 0xfa, 0x05, 0x68, 0x04, 0xc8, 0x02, 0x4f, 0x49, 0x91, 0xb0, 0x5b, 0x96, 0xc5, 0x19, - 0xc2, 0x53, 0x47, 0x83, 0x50, 0x17, 0x2d, 0x48, 0x50, 0x0c, 0xe4, 0x0c, 0x22, 0x58, 0x6f, 0xda, 0x6f, 0x0f, 0x08, - 0x21, 0xd1, 0x7e, 0xb3, 0x19, 0xf5, 0x0a, 0xf2, 0x8b, 0x48, 0x21, 0x25, 0x60, 0xa7, 0xc9, 0x4f, 0x90, 0xd4, 0x09, - 0x92, 0xe2, 0xf7, 0x32, 0xd1, 0x4c, 0xe9, 0x18, 0x92, 0x41, 0x49, 0xa0, 0x3c, 0x86, 0x47, 0x17, 0x47, 0x51, 0x03, - 0x52, 0x0d, 0x8a, 0x22, 0x5c, 0x90, 0x3b, 0x8d, 0xd2, 0x69, 0xff, 0x78, 0x10, 0x9e, 0x11, 0x36, 0x15, 0xfa, 0xbf, - 0xd3, 0xbd, 0x69, 0xbf, 0x65, 0xfa, 0xbf, 0x8c, 0x7a, 0x71, 0x41, 0x94, 0x65, 0xe3, 0x7a, 0x2a, 0x15, 0xcc, 0xcc, - 0x17, 0xa5, 0x6e, 0x80, 0xae, 0xef, 0x11, 0x69, 0x76, 0xd2, 0x78, 0x14, 0xce, 0xa4, 0x09, 0x1d, 0x3a, 0x50, 0xe0, - 0x9c, 0x40, 0x79, 0x5c, 0x10, 0xe8, 0xb4, 0xaa, 0x76, 0xa7, 0x53, 0x97, 0xf0, 0x63, 0xf4, 0x63, 0xef, 0x93, 0x48, - 0x7f, 0x13, 0x76, 0x04, 0x9f, 0xc4, 0x6a, 0x05, 0x7f, 0x7f, 0x13, 0x3d, 0x18, 0x96, 0x49, 0xfb, 0xc5, 0xa5, 0xfd, - 0x04, 0x69, 0x82, 0xa5, 0x66, 0xc0, 0x58, 0x95, 0xfc, 0x98, 0x5d, 0x9c, 0x31, 0xb1, 0x33, 0x38, 0x38, 0xe0, 0x7d, - 0xda, 0x68, 0x0f, 0xe0, 0x46, 0xa0, 0xd0, 0xea, 0x03, 0xd7, 0xd3, 0x38, 0x3a, 0xba, 0x8c, 0x50, 0x2f, 0xda, 0x83, - 0x55, 0xee, 0xca, 0x06, 0x71, 0xb0, 0xce, 0x1a, 0x9a, 0xa6, 0xa3, 0x4b, 0xd2, 0xea, 0xc5, 0xc2, 0x12, 0xf9, 0x1c, - 0xe1, 0xcc, 0xd1, 0xd4, 0x16, 0x1e, 0xa1, 0x86, 0x10, 0x0d, 0xff, 0x3d, 0x42, 0x8d, 0xa9, 0x6e, 0x8c, 0x51, 0x9a, - 0xc1, 0xdf, 0x78, 0x44, 0x08, 0x69, 0x76, 0xca, 0x8a, 0xfe, 0xb0, 0xa4, 0x28, 0x1d, 0x7b, 0xf5, 0x68, 0xdf, 0x6c, - 0x0e, 0xd9, 0x88, 0x79, 0x9f, 0x0d, 0x56, 0xab, 0xe8, 0xa2, 0x77, 0x19, 0xa1, 0x46, 0xec, 0xd1, 0xee, 0xc8, 0xe3, - 0x1d, 0x42, 0x58, 0x0c, 0xd6, 0xee, 0x06, 0xea, 0x86, 0xd5, 0x6e, 0x9b, 0x96, 0xd5, 0xfe, 0x0f, 0xc8, 0x02, 0x5b, - 0x97, 0x72, 0x8f, 0xe5, 0x6f, 0xe7, 0x30, 0x55, 0x8f, 0xdb, 0x92, 0xb4, 0x70, 0x41, 0xbc, 0xba, 0x9b, 0x12, 0x5d, - 0xe1, 0x7f, 0x46, 0xaa, 0xe2, 0xb8, 0x9f, 0xe3, 0xe9, 0x80, 0x08, 0x6a, 0xe4, 0x97, 0xae, 0x57, 0xa6, 0xb3, 0x9c, - 0xdc, 0xb0, 0x8d, 0xfb, 0xdf, 0x1c, 0xee, 0x64, 0x1e, 0xeb, 0x24, 0x5b, 0x14, 0x05, 0x13, 0xfa, 0x95, 0x1c, 0x39, - 0xc6, 0x8e, 0xe5, 0x20, 0x5b, 0xc1, 0xc5, 0x2e, 0x06, 0xae, 0xae, 0xe3, 0x77, 0xca, 0x68, 0x2b, 0x7b, 0x41, 0x46, - 0x96, 0xe1, 0x32, 0xd7, 0xbd, 0xdd, 0x85, 0x13, 0xa5, 0x63, 0x84, 0x47, 0xee, 0x1e, 0x38, 0x4e, 0x92, 0x64, 0x91, - 0x64, 0x90, 0x0d, 0x1d, 0x28, 0xb4, 0x36, 0xfb, 0x2a, 0x56, 0xe4, 0xb1, 0x4e, 0x04, 0xbb, 0x35, 0xdd, 0xc6, 0xa8, - 0x3a, 0xc4, 0xfd, 0x7e, 0xbb, 0xa0, 0x5d, 0x43, 0x80, 0x54, 0x22, 0xe4, 0x88, 0x01, 0x84, 0xe0, 0xee, 0xdf, 0x25, - 0x4d, 0xa9, 0x0a, 0x6f, 0xb6, 0xaa, 0x01, 0xf6, 0x43, 0x95, 0xf7, 0x02, 0xf4, 0xc4, 0x86, 0x3d, 0x2b, 0x0b, 0x5b, - 0xe5, 0x39, 0x42, 0x7c, 0x1c, 0x2f, 0x12, 0xb8, 0x11, 0x34, 0x98, 0x24, 0x04, 0x5a, 0xad, 0x16, 0x21, 0x6e, 0x4d, - 0x2b, 0xc5, 0xf4, 0x98, 0x4c, 0xfb, 0x45, 0xa3, 0x61, 0x94, 0xd7, 0x23, 0x8b, 0x17, 0x0b, 0x84, 0xc7, 0xe5, 0x5e, - 0xf3, 0xe5, 0xe6, 0xa4, 0xde, 0x55, 0x3c, 0xae, 0x2b, 0x81, 0x1b, 0x42, 0x20, 0xa3, 0x5f, 0xd4, 0xd0, 0x3a, 0x9e, - 0x90, 0xa3, 0xb8, 0x9f, 0xf4, 0xfe, 0xe7, 0x00, 0xf5, 0xe2, 0xe4, 0x10, 0x1d, 0x59, 0x5a, 0x32, 0x46, 0xdd, 0xcc, - 0xf6, 0xb1, 0x34, 0xb7, 0x9f, 0x6d, 0x6c, 0x14, 0x90, 0xa9, 0xc4, 0x82, 0xce, 0x58, 0x3a, 0x81, 0x5d, 0xef, 0x91, - 0x67, 0x8e, 0x01, 0x99, 0xd2, 0x89, 0xa3, 0x2d, 0x49, 0xd4, 0x93, 0xb4, 0xfc, 0xea, 0x45, 0x3d, 0x5a, 0x7d, 0xfd, - 0xcf, 0xa8, 0x97, 0xd1, 0xf4, 0x31, 0x5f, 0x3b, 0x25, 0x79, 0xad, 0x8f, 0x33, 0xdf, 0xc7, 0xda, 0x2e, 0x4e, 0x00, - 0xbc, 0x11, 0xda, 0xd6, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0xa4, 0x12, 0x4d, 0x27, 0x00, 0xd5, 0x60, 0x11, - 0x54, 0x68, 0x1b, 0x10, 0x4c, 0x19, 0xb0, 0xc5, 0x23, 0x2d, 0x40, 0x73, 0x71, 0xd9, 0x42, 0xcb, 0x5a, 0x61, 0xc7, - 0x59, 0xd5, 0xef, 0xe2, 0x4b, 0xe2, 0x3d, 0x06, 0xaa, 0x7c, 0xb1, 0xe8, 0x8e, 0x1b, 0x0d, 0xa4, 0x3c, 0x7e, 0x8d, - 0xfa, 0xe3, 0x01, 0xbe, 0x05, 0x14, 0xc2, 0x35, 0x8c, 0xc2, 0xb5, 0x39, 0x76, 0xdc, 0x1c, 0x1b, 0x0d, 0xb9, 0x46, - 0xdd, 0xa0, 0xf2, 0xc2, 0x55, 0x5e, 0xaf, 0x2d, 0x64, 0x36, 0x31, 0xee, 0x1c, 0x99, 0x14, 0x30, 0x04, 0x23, 0x84, - 0xbc, 0x92, 0x68, 0x67, 0xb3, 0xd0, 0x28, 0x54, 0x37, 0xbb, 0x17, 0x28, 0xaa, 0x3d, 0x3d, 0x62, 0x80, 0x05, 0x54, - 0x2d, 0xd5, 0xc8, 0x53, 0x8d, 0x47, 0x8d, 0xb6, 0x41, 0xf7, 0x66, 0xbb, 0x5b, 0x6f, 0xec, 0x7e, 0xd5, 0x18, 0x1e, - 0x35, 0xc8, 0xb4, 0xda, 0xe1, 0x6b, 0xd9, 0x68, 0xac, 0xeb, 0xf7, 0xa5, 0x7e, 0x13, 0xd7, 0xee, 0x2f, 0x9e, 0x6e, - 0x99, 0x78, 0xf8, 0xd3, 0xb7, 0x3a, 0x6f, 0x45, 0xc2, 0x85, 0x60, 0x05, 0x9c, 0xb0, 0x44, 0x63, 0xb1, 0x5e, 0x97, - 0xa7, 0xfe, 0xef, 0xda, 0xda, 0x8c, 0x11, 0x0e, 0x74, 0xc8, 0x48, 0x6d, 0x58, 0xe2, 0x02, 0x53, 0x43, 0x45, 0x08, - 0x21, 0x1f, 0xb4, 0x37, 0x8f, 0xd1, 0x86, 0x24, 0x65, 0x24, 0x38, 0xbb, 0x63, 0x45, 0x58, 0x72, 0x7d, 0xef, 0xb1, - 0xfc, 0xae, 0x48, 0xd7, 0x17, 0x83, 0xd4, 0x14, 0xcb, 0x1d, 0x21, 0xcb, 0xc9, 0x17, 0x90, 0x73, 0xca, 0x0b, 0x96, - 0xc4, 0x10, 0xc4, 0x27, 0xbc, 0x60, 0x86, 0x71, 0xbf, 0xe7, 0xe5, 0xc6, 0xac, 0xce, 0x69, 0x66, 0xa1, 0xf6, 0x07, - 0xa0, 0x99, 0x83, 0x72, 0x48, 0x92, 0xad, 0x62, 0xd7, 0xf7, 0x1e, 0xbe, 0xde, 0x25, 0x43, 0xaf, 0x56, 0x4e, 0x7a, - 0xce, 0x80, 0xf5, 0xc1, 0x79, 0x35, 0xd4, 0xcc, 0xfd, 0x48, 0xe3, 0xcc, 0x30, 0x51, 0x79, 0xcc, 0x01, 0x99, 0xae, - 0xef, 0x3d, 0x7c, 0x17, 0x73, 0xa3, 0x9b, 0x42, 0x38, 0x9c, 0x77, 0x5c, 0x90, 0x98, 0x12, 0x86, 0xec, 0xe4, 0x4b, - 0x3a, 0x56, 0x04, 0xa7, 0x7b, 0x4a, 0x4d, 0x26, 0x88, 0x1d, 0x7d, 0x31, 0x20, 0x99, 0x03, 0x01, 0xc9, 0x10, 0xce, - 0x6a, 0x72, 0x1d, 0x31, 0x6b, 0x60, 0x3a, 0xbb, 0x82, 0xc5, 0x48, 0x2c, 0x7b, 0x88, 0x70, 0x66, 0xba, 0xd5, 0x6b, - 0x7b, 0x9c, 0x28, 0xba, 0x69, 0xe8, 0x56, 0xc9, 0xb3, 0xef, 0x41, 0xf0, 0xf2, 0x1f, 0xaf, 0x5c, 0xdb, 0x65, 0xc2, - 0x13, 0x6f, 0x91, 0x76, 0x7d, 0xef, 0xe1, 0xaf, 0xce, 0x28, 0x6d, 0x4e, 0x3d, 0xf9, 0xdf, 0x92, 0x51, 0x1f, 0xfe, - 0x9a, 0x54, 0xb9, 0xa6, 0xf0, 0xf5, 0xbd, 0x87, 0xbf, 0xef, 0x2a, 0x06, 0xe9, 0xeb, 0x45, 0xa5, 0x24, 0x30, 0xe3, - 0x5b, 0xb2, 0x3c, 0x5d, 0xba, 0xb3, 0x22, 0x15, 0x6b, 0x6c, 0x4e, 0xa8, 0x54, 0xad, 0x4b, 0xdd, 0xca, 0x13, 0x2c, - 0x89, 0xb9, 0x4a, 0xaa, 0x2f, 0x9b, 0x43, 0x63, 0x2e, 0xc5, 0x55, 0x26, 0xe7, 0xec, 0x1b, 0xf7, 0x4b, 0x4f, 0x35, - 0x4a, 0xf8, 0x0c, 0x0c, 0x71, 0xcc, 0xd8, 0x05, 0xde, 0x6f, 0xa1, 0xee, 0xc6, 0x79, 0x26, 0x0d, 0xa2, 0x16, 0xf5, - 0xc3, 0x06, 0x53, 0xd2, 0xc2, 0x19, 0x69, 0xe1, 0x9c, 0xa8, 0x7e, 0xcb, 0x9e, 0x18, 0xdd, 0xbc, 0x6c, 0xda, 0x9e, - 0x3b, 0xb0, 0xdd, 0x73, 0xbb, 0x6f, 0xed, 0xa1, 0x3c, 0xed, 0xe6, 0x46, 0x7f, 0x69, 0x0e, 0xfa, 0xa9, 0x41, 0x8d, - 0x27, 0x2c, 0x2e, 0x70, 0x61, 0x5a, 0xbe, 0xe2, 0xc3, 0x1c, 0xec, 0x54, 0x60, 0x66, 0x58, 0xa3, 0xb4, 0x2c, 0xdb, - 0x76, 0x65, 0xf3, 0xc4, 0xac, 0x55, 0x81, 0xf3, 0x04, 0x48, 0x39, 0xce, 0x9d, 0x5d, 0x8f, 0xda, 0xae, 0x72, 0x76, - 0x70, 0x10, 0xbb, 0x4a, 0x34, 0x2e, 0x7c, 0x7e, 0x75, 0x03, 0xf8, 0xde, 0x52, 0x8d, 0x29, 0x32, 0x13, 0x68, 0x34, - 0xb2, 0xc1, 0x9a, 0xee, 0x13, 0x12, 0xe7, 0x75, 0x28, 0xfa, 0xd1, 0x1b, 0x66, 0x70, 0x03, 0x00, 0x8d, 0x46, 0x79, - 0xdd, 0xbb, 0x01, 0xb1, 0xa7, 0x1a, 0xcb, 0xf5, 0x97, 0xb8, 0xb4, 0x26, 0x6a, 0x6d, 0xd9, 0x61, 0xf9, 0x51, 0x20, - 0x11, 0xe2, 0xae, 0xf0, 0xf3, 0x09, 0xb6, 0x86, 0x80, 0x72, 0x2f, 0x9c, 0x0d, 0x04, 0x36, 0x56, 0x5b, 0xae, 0x90, - 0x27, 0x6d, 0x1d, 0x94, 0xfa, 0x42, 0x70, 0xc1, 0x05, 0x85, 0x1a, 0x6b, 0x87, 0xe5, 0x4f, 0xd8, 0xb6, 0x39, 0x27, - 0x56, 0xc8, 0x69, 0xcb, 0xcc, 0x30, 0x0c, 0xc0, 0x3a, 0x25, 0x60, 0x9e, 0x93, 0x97, 0xdf, 0x46, 0xfd, 0x87, 0x01, - 0xea, 0x3f, 0x22, 0x2c, 0xd8, 0x06, 0x56, 0x57, 0x92, 0x48, 0xa7, 0xa0, 0x50, 0x3e, 0xeb, 0xf1, 0x9c, 0x80, 0x36, - 0xae, 0x0e, 0xd5, 0xda, 0x15, 0xe5, 0x37, 0x28, 0x4b, 0xb8, 0x53, 0x8c, 0x3e, 0x13, 0xfb, 0xfb, 0xe4, 0xb8, 0xba, - 0xa0, 0x83, 0xae, 0x77, 0x29, 0x07, 0x43, 0x52, 0xf8, 0xf0, 0xf7, 0xef, 0xdf, 0xad, 0x3e, 0x9e, 0x6f, 0xef, 0xe0, - 0xc0, 0xac, 0x14, 0x66, 0x1d, 0x6c, 0xe0, 0xba, 0x91, 0x29, 0xf4, 0x5f, 0xde, 0x89, 0xd7, 0xa9, 0xd0, 0xc6, 0x66, - 0xf4, 0xc7, 0x21, 0x8c, 0xb6, 0xdd, 0x36, 0x25, 0x58, 0xd0, 0x2c, 0xd0, 0x25, 0x6b, 0xdc, 0x4a, 0x8b, 0x6f, 0x90, - 0x91, 0x87, 0xa6, 0x00, 0x13, 0xa3, 0xdd, 0xd9, 0x8f, 0xd6, 0x0e, 0x4f, 0xec, 0xd0, 0xd0, 0xd2, 0x10, 0x42, 0x8b, - 0xf7, 0x80, 0x39, 0xf6, 0x88, 0x00, 0x10, 0xbd, 0x34, 0x90, 0xaa, 0x40, 0x16, 0x45, 0x95, 0x22, 0xff, 0xf9, 0x3e, - 0x21, 0x2f, 0x2b, 0x45, 0xe6, 0xdb, 0xca, 0x98, 0x0b, 0x10, 0x03, 0xa5, 0x70, 0x91, 0x50, 0x26, 0xd8, 0xcb, 0xd0, - 0x0f, 0xda, 0x97, 0x37, 0xd2, 0x66, 0x52, 0x71, 0xe3, 0xc1, 0x4d, 0xa9, 0x51, 0xf1, 0xd9, 0x7c, 0x0f, 0x89, 0x8d, - 0xdc, 0x7b, 0x90, 0xcb, 0xa8, 0x19, 0x24, 0x7c, 0xbf, 0x33, 0xa5, 0x7d, 0xbb, 0xeb, 0xcf, 0x9b, 0x16, 0x31, 0x1b, - 0xeb, 0x92, 0x70, 0xa1, 0x58, 0xa1, 0x1f, 0xb1, 0xb1, 0x2c, 0xe0, 0xfe, 0xa3, 0x04, 0x0b, 0x5a, 0xdf, 0x0b, 0x74, - 0x80, 0x66, 0x82, 0xc1, 0xa5, 0xc3, 0xc6, 0x0c, 0xcd, 0xaf, 0xcf, 0xe6, 0x0e, 0xfc, 0x7a, 0xb3, 0xd6, 0xcb, 0x83, - 0x83, 0x2f, 0xac, 0x02, 0x94, 0x1b, 0xa6, 0x19, 0x46, 0x40, 0xbc, 0x2c, 0x97, 0xe3, 0x6e, 0x86, 0xef, 0xc5, 0x95, - 0xca, 0xc0, 0x13, 0x8e, 0x90, 0x08, 0x3d, 0x27, 0x7a, 0x3d, 0xd9, 0xa4, 0xf7, 0x4e, 0x9b, 0x21, 0x42, 0xb1, 0x06, - 0xc8, 0x3d, 0xc8, 0xe5, 0x56, 0xc9, 0xa4, 0x2a, 0x5b, 0xdb, 0x72, 0x10, 0x8f, 0x01, 0x5c, 0xb1, 0x11, 0x52, 0x02, - 0x34, 0xdc, 0x2d, 0xb4, 0x3c, 0x97, 0xc0, 0xfe, 0x63, 0x95, 0x80, 0x48, 0x8b, 0x6a, 0x1b, 0x17, 0x21, 0x6c, 0x4d, - 0x7d, 0x02, 0xe3, 0x84, 0x87, 0xcf, 0x77, 0x69, 0xa8, 0x3d, 0x6a, 0x33, 0x73, 0x06, 0x41, 0x09, 0x89, 0xca, 0x0a, - 0xc9, 0x97, 0x58, 0x38, 0x6e, 0xce, 0xdf, 0xc3, 0x01, 0x29, 0x56, 0x34, 0xb6, 0x77, 0x5b, 0x70, 0x7c, 0x14, 0xc9, - 0x22, 0xae, 0x75, 0xdd, 0x2d, 0x4c, 0x35, 0xec, 0x40, 0x47, 0x43, 0x38, 0x15, 0xe6, 0x9e, 0xf0, 0x71, 0x45, 0x52, - 0x7f, 0xb6, 0x26, 0xda, 0xda, 0x13, 0xc3, 0xca, 0x34, 0x25, 0x98, 0xff, 0xcf, 0xd6, 0xea, 0xba, 0x2c, 0x84, 0x99, - 0x19, 0xc6, 0x8d, 0x5d, 0x05, 0xb6, 0x06, 0x1c, 0x5b, 0xfe, 0x2d, 0x83, 0x45, 0xf5, 0x4a, 0x71, 0xd3, 0x69, 0xc0, - 0x04, 0xbc, 0x05, 0xeb, 0x99, 0xcd, 0xad, 0xff, 0xdc, 0x1c, 0x8c, 0x02, 0xab, 0x1a, 0x81, 0x97, 0x86, 0xc0, 0x23, - 0x60, 0xdc, 0xbc, 0x69, 0x79, 0xcf, 0x19, 0xd1, 0x08, 0x7f, 0xe2, 0x39, 0x3c, 0xb3, 0x2c, 0xf7, 0xd6, 0xc7, 0xc6, - 0x8a, 0xa4, 0x82, 0x80, 0x6d, 0x11, 0x76, 0x44, 0x5e, 0x22, 0xac, 0x1a, 0x8d, 0xae, 0xba, 0x60, 0x95, 0x56, 0xa5, - 0x1a, 0xa6, 0x80, 0x5b, 0x62, 0xc0, 0xfb, 0xda, 0x89, 0x0a, 0x86, 0x04, 0xde, 0xfa, 0x5b, 0x81, 0xfa, 0xfe, 0xe1, - 0xdb, 0x38, 0xa4, 0x6f, 0x61, 0xd9, 0xf2, 0x22, 0x16, 0xa6, 0x14, 0x57, 0x77, 0x38, 0x6f, 0xbe, 0x6f, 0x36, 0x02, - 0xe3, 0xde, 0x6f, 0x63, 0xb0, 0x71, 0x43, 0x5d, 0x6d, 0x49, 0x43, 0xb9, 0x09, 0xbb, 0xa8, 0xb2, 0x77, 0x0c, 0x3b, - 0xeb, 0xea, 0x4a, 0xda, 0xd5, 0x44, 0xad, 0xd7, 0x8a, 0x55, 0x46, 0x03, 0x1b, 0x86, 0x9d, 0xe6, 0x98, 0xd9, 0x56, - 0xe0, 0x3f, 0x9e, 0x13, 0x8d, 0x03, 0x64, 0x7d, 0xf3, 0xad, 0xeb, 0x94, 0x6a, 0x98, 0xb0, 0xbd, 0xdd, 0xf9, 0xf8, - 0x98, 0xef, 0x3a, 0x1f, 0xb1, 0x74, 0x5b, 0xdf, 0x9c, 0x8d, 0xed, 0x7f, 0xe3, 0x6c, 0x74, 0x6a, 0x7b, 0x7f, 0x3c, - 0x02, 0x77, 0x52, 0x3b, 0x1e, 0xeb, 0x6b, 0x4a, 0x24, 0x16, 0x6e, 0x39, 0x2e, 0x3b, 0xab, 0x95, 0xe8, 0xb7, 0x40, - 0xed, 0x14, 0x45, 0xf0, 0xb3, 0x6d, 0x7f, 0x06, 0x24, 0xd9, 0xea, 0x90, 0x63, 0x51, 0x8a, 0x32, 0x28, 0x01, 0x03, - 0xea, 0xd8, 0xd8, 0x7a, 0x19, 0xc4, 0x76, 0x38, 0xe4, 0xb0, 0x9c, 0x88, 0xf2, 0xea, 0x0a, 0x46, 0x6c, 0x8e, 0x0d, - 0x27, 0x60, 0xc6, 0x3b, 0xad, 0x0a, 0xbd, 0xf8, 0xf9, 0xaf, 0x99, 0xd3, 0xda, 0x11, 0x63, 0x39, 0x89, 0x9a, 0x15, - 0x83, 0x1b, 0x81, 0x63, 0x18, 0xf7, 0x8d, 0x84, 0x5a, 0x9d, 0xea, 0xa8, 0x76, 0x24, 0xe1, 0x16, 0xa8, 0xdd, 0xf6, - 0xcd, 0xb9, 0xb4, 0x5a, 0xed, 0x3c, 0x58, 0x70, 0x11, 0xe0, 0xf6, 0x73, 0xa2, 0x6b, 0x24, 0x85, 0x12, 0x27, 0x41, - 0xe1, 0xdc, 0xa0, 0xaa, 0x26, 0xb2, 0xdf, 0x1a, 0x00, 0x4f, 0xda, 0xcd, 0x2e, 0x64, 0x25, 0x24, 0x67, 0x8d, 0x06, - 0xca, 0xcb, 0x8e, 0x69, 0x5f, 0x34, 0xb2, 0x01, 0x66, 0x38, 0xb3, 0x02, 0x0b, 0x9c, 0x5e, 0x71, 0x5e, 0x75, 0xdd, - 0xcf, 0x06, 0x08, 0x17, 0xab, 0x55, 0x6c, 0x87, 0x96, 0xa3, 0xd5, 0x2a, 0x0f, 0x87, 0x66, 0xf2, 0xa1, 0xe2, 0xcb, - 0x9e, 0x26, 0x2f, 0xcd, 0x79, 0xf8, 0x12, 0x06, 0xd9, 0x20, 0x71, 0xee, 0x54, 0x82, 0x39, 0x68, 0xae, 0x1a, 0xb2, - 0x9f, 0x35, 0xda, 0x83, 0x80, 0x86, 0xf5, 0xb3, 0x01, 0xc9, 0xd7, 0x60, 0x39, 0xab, 0xdc, 0x81, 0xf9, 0x37, 0x1c, - 0x6c, 0x7f, 0x9b, 0x73, 0xc6, 0x36, 0x18, 0xae, 0xc9, 0xa6, 0xca, 0xa0, 0xc4, 0x2b, 0xb7, 0xb8, 0xbe, 0x5c, 0xcd, - 0xc0, 0xa2, 0x2c, 0x84, 0xdd, 0x35, 0x73, 0x0f, 0x84, 0xff, 0x12, 0xdb, 0x25, 0x2d, 0x8d, 0xb8, 0x37, 0x10, 0xdf, - 0xdb, 0x6e, 0x27, 0x49, 0x42, 0x8b, 0x89, 0xb9, 0x12, 0xf1, 0x37, 0xbc, 0x66, 0x0f, 0x1c, 0xbb, 0x71, 0x06, 0x3d, - 0xf7, 0xcb, 0xce, 0x06, 0xc4, 0x8e, 0xdf, 0x33, 0x3b, 0xde, 0x71, 0xa5, 0xa0, 0xbb, 0x75, 0x11, 0x76, 0x30, 0xf4, - 0x7f, 0x79, 0x30, 0x27, 0x6e, 0x30, 0x16, 0x4d, 0x36, 0xe0, 0xf6, 0x0d, 0x78, 0x14, 0x74, 0x03, 0x6e, 0xdf, 0x86, - 0xaf, 0x87, 0x56, 0xf6, 0xcd, 0x01, 0x06, 0x64, 0xc2, 0x8e, 0xb4, 0x4a, 0x08, 0x86, 0x79, 0xba, 0xc9, 0x91, 0x59, - 0xb2, 0x0a, 0x87, 0xab, 0x26, 0xb1, 0xd8, 0xd8, 0x0b, 0x15, 0x93, 0x1a, 0x08, 0xc6, 0x22, 0x7d, 0x89, 0x42, 0xa5, - 0x41, 0xdd, 0x38, 0x06, 0xb0, 0xca, 0x69, 0xeb, 0x5f, 0x1e, 0x1c, 0x80, 0xd0, 0x00, 0xac, 0x5d, 0x92, 0xd1, 0xb9, - 0x5e, 0x14, 0xc0, 0x5f, 0x29, 0xff, 0x1b, 0x92, 0xc1, 0xed, 0xc4, 0xa4, 0xc1, 0x0f, 0x48, 0x98, 0x53, 0xa5, 0xf8, - 0x17, 0x9b, 0xe6, 0x7e, 0xe3, 0x82, 0x78, 0x8c, 0x56, 0x96, 0x53, 0x94, 0xa8, 0x2b, 0x1d, 0xba, 0xd6, 0x21, 0xf7, - 0xf4, 0x0b, 0x13, 0xfa, 0x25, 0x57, 0x9a, 0x09, 0x00, 0x40, 0x85, 0x78, 0x30, 0x25, 0x85, 0x60, 0xeb, 0xd6, 0x6a, - 0xd1, 0xd1, 0xe8, 0xbb, 0x55, 0x74, 0x9d, 0x2d, 0x9a, 0x52, 0x31, 0xca, 0x6d, 0x27, 0xa1, 0xcd, 0xa4, 0xb7, 0x13, - 0x2d, 0x4b, 0x86, 0x16, 0x3b, 0x15, 0xfb, 0x61, 0x68, 0x7d, 0x2c, 0x88, 0x3f, 0x17, 0xfc, 0x59, 0xfa, 0x5d, 0x3e, - 0x06, 0xae, 0xd4, 0xbf, 0xb1, 0x0a, 0xe1, 0x4c, 0xb0, 0x0e, 0xc8, 0x6b, 0x52, 0x1f, 0xa7, 0x47, 0x9d, 0x7c, 0x4b, - 0xb9, 0x50, 0x1a, 0x85, 0x6d, 0x9c, 0x14, 0x06, 0x53, 0xce, 0xbe, 0x2d, 0x71, 0xfd, 0xea, 0x8f, 0x11, 0x7f, 0x74, - 0x88, 0x7f, 0x97, 0x4a, 0xa3, 0x65, 0x89, 0x60, 0xc8, 0xef, 0x48, 0xad, 0xe0, 0x2a, 0x36, 0xe7, 0xfa, 0xb9, 0x9e, - 0xe5, 0x1b, 0x9e, 0x38, 0x5d, 0xad, 0x4a, 0xa9, 0x40, 0xc5, 0x37, 0x0c, 0x3f, 0x61, 0x70, 0x6f, 0xfc, 0x8c, 0x07, - 0x55, 0xb6, 0xef, 0x8b, 0x9f, 0x05, 0xf7, 0xc5, 0xcf, 0x78, 0xba, 0x5d, 0x34, 0xb8, 0x27, 0xee, 0x24, 0xe7, 0x49, - 0x2b, 0xf2, 0x7c, 0xd4, 0x94, 0x56, 0xfe, 0x95, 0x76, 0x6b, 0xe0, 0xca, 0x26, 0x0e, 0x8c, 0xf3, 0xea, 0x22, 0x14, - 0x73, 0xe6, 0x8c, 0x96, 0xc3, 0xff, 0xd6, 0x3a, 0xb9, 0x93, 0x47, 0x5a, 0x29, 0xe4, 0x0d, 0x2d, 0xf4, 0x3d, 0xd8, - 0x70, 0xc5, 0x96, 0x0f, 0x20, 0x25, 0xa0, 0x6c, 0xfb, 0xf7, 0xba, 0x08, 0xc4, 0x71, 0x65, 0x9d, 0x8f, 0xc2, 0xf6, - 0x49, 0x51, 0x72, 0x75, 0x75, 0x21, 0xe4, 0xd6, 0x68, 0x09, 0x10, 0xa6, 0xde, 0x35, 0x8f, 0x39, 0x9a, 0xcc, 0xd2, - 0xe5, 0xba, 0x54, 0x1d, 0x14, 0x96, 0xab, 0xe3, 0x08, 0x17, 0x6b, 0x73, 0x83, 0xfe, 0x8a, 0xe3, 0xbf, 0xb9, 0xa3, - 0x91, 0x9f, 0x4a, 0x0a, 0xf4, 0x68, 0xb7, 0xaf, 0xcd, 0x0e, 0x12, 0x69, 0xe7, 0x50, 0x5a, 0x0a, 0x00, 0x56, 0x1b, - 0x7c, 0x5d, 0x7b, 0x9c, 0x7a, 0x22, 0xdd, 0x6c, 0xbe, 0x69, 0x08, 0x8b, 0x59, 0x69, 0xc1, 0x63, 0xba, 0xd9, 0x61, - 0x39, 0xea, 0x65, 0x71, 0x5d, 0xee, 0xb1, 0x5a, 0xbf, 0xe8, 0x1b, 0xa0, 0xac, 0x0c, 0xd1, 0x56, 0xab, 0xb8, 0x0e, - 0x6f, 0x22, 0x82, 0x6b, 0x10, 0x84, 0x45, 0x60, 0xc0, 0x51, 0x63, 0xbc, 0x6d, 0x9d, 0x18, 0x6d, 0xda, 0x2f, 0x79, - 0xd6, 0xbd, 0x36, 0x8e, 0x50, 0xd1, 0x60, 0xab, 0x87, 0x9a, 0x07, 0x6c, 0x67, 0x57, 0x76, 0x14, 0x40, 0x68, 0x4a, - 0xbd, 0x71, 0x6e, 0x65, 0x45, 0xbb, 0x03, 0xbe, 0xe8, 0x3b, 0xe6, 0xb9, 0x0e, 0x74, 0xdb, 0xf9, 0x81, 0x6d, 0xd3, - 0x13, 0xf9, 0x2d, 0xdb, 0xa6, 0x1a, 0x27, 0xbc, 0xdf, 0x42, 0xdf, 0x37, 0x84, 0xb5, 0x7d, 0xed, 0x2e, 0xf2, 0xbf, - 0xd0, 0x5d, 0x1b, 0xd0, 0xd3, 0x82, 0xd9, 0xd3, 0x98, 0x0f, 0x7a, 0xbd, 0xfe, 0x54, 0xfa, 0x2f, 0x18, 0x5b, 0xa1, - 0x4f, 0x76, 0x17, 0x38, 0xb1, 0xd2, 0x38, 0x04, 0xc7, 0xaf, 0x38, 0x99, 0xe4, 0x72, 0x48, 0xf3, 0x77, 0xd0, 0x63, - 0x95, 0xfb, 0xfc, 0x6e, 0x54, 0x50, 0xcd, 0x1c, 0xad, 0xa9, 0x46, 0xf1, 0x8a, 0x07, 0xc3, 0x78, 0xc5, 0x2d, 0xe5, - 0xae, 0x5a, 0xc0, 0xcb, 0x97, 0x65, 0x13, 0xe9, 0xa7, 0x75, 0x29, 0x83, 0xa9, 0xdd, 0xbd, 0x6c, 0x92, 0x34, 0x56, - 0x92, 0x34, 0xa6, 0xe2, 0xcd, 0xa6, 0xe2, 0xf8, 0xef, 0x6f, 0x0c, 0x76, 0x9b, 0xcc, 0xfd, 0x1d, 0x90, 0xb9, 0xbf, - 0x79, 0xfa, 0xdd, 0x5a, 0x01, 0xc5, 0x3b, 0x4e, 0x8e, 0x8d, 0x65, 0x8c, 0x1d, 0xf5, 0x5b, 0x0d, 0x06, 0x0d, 0x9a, - 0x5c, 0x06, 0xde, 0x0e, 0xd5, 0xe9, 0xe5, 0xed, 0x8f, 0xe2, 0x6c, 0xa1, 0xb4, 0x9c, 0xb9, 0x46, 0x95, 0xf3, 0x71, - 0x32, 0x99, 0xa0, 0xc0, 0x36, 0x77, 0xf8, 0x69, 0xdd, 0x8d, 0x6c, 0xf9, 0x99, 0x8b, 0x51, 0xaa, 0xb0, 0x3b, 0x5b, - 0x54, 0x2a, 0xd7, 0xc4, 0x9b, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0x17, 0x5c, 0x4d, 0x59, 0x11, 0x17, 0x68, 0xf9, 0xad, - 0xce, 0x0a, 0xb8, 0xcd, 0xb1, 0x9d, 0xe1, 0x51, 0x69, 0x39, 0xa0, 0x13, 0x68, 0x0d, 0x74, 0x46, 0x33, 0xa6, 0xa7, - 0x72, 0x04, 0x86, 0x2f, 0xc9, 0xa8, 0x74, 0xa7, 0x3a, 0x38, 0xd8, 0x8f, 0x23, 0xa3, 0xbf, 0x00, 0x1f, 0xf4, 0x30, - 0x07, 0xf5, 0x96, 0xe0, 0x18, 0x54, 0x75, 0xcd, 0xd0, 0x92, 0x6d, 0xfa, 0xd0, 0xe8, 0xe4, 0x33, 0xbb, 0xc3, 0x1c, - 0xad, 0xd7, 0xa9, 0x1d, 0x75, 0x34, 0xe6, 0x2c, 0x1f, 0x45, 0xf8, 0x33, 0xbb, 0x4b, 0x4b, 0xb7, 0x75, 0xe3, 0x65, - 0x6d, 0x16, 0x31, 0x92, 0x37, 0x22, 0xc2, 0x55, 0x27, 0xe9, 0x72, 0x8d, 0x65, 0xc1, 0x27, 0x80, 0xa3, 0xbf, 0xb0, - 0xbb, 0xd4, 0xb5, 0x17, 0xb8, 0x0a, 0xa2, 0xa5, 0x07, 0x7d, 0x12, 0x24, 0x87, 0xcb, 0xe0, 0x04, 0x8e, 0xbe, 0xa9, - 0x3b, 0x20, 0xb5, 0x72, 0x95, 0x08, 0x89, 0xd0, 0xfa, 0xdf, 0x9d, 0x0a, 0x5e, 0x84, 0xe7, 0x9c, 0xae, 0x59, 0xdc, - 0x6e, 0x54, 0x62, 0x50, 0xa1, 0xb2, 0x20, 0xf9, 0x18, 0x73, 0xbf, 0xfb, 0x9c, 0xf7, 0x43, 0xa0, 0x33, 0x5b, 0x50, - 0xd7, 0x68, 0x3a, 0x32, 0xbf, 0x50, 0x75, 0x07, 0x35, 0xd3, 0x55, 0xc5, 0xbd, 0x8f, 0x31, 0x00, 0x1e, 0xac, 0x65, - 0xa8, 0x71, 0x08, 0x5d, 0x7b, 0x33, 0xd5, 0x31, 0x25, 0xf1, 0xd2, 0xcf, 0x21, 0xe5, 0x21, 0x18, 0xf5, 0x1a, 0xd0, - 0xd0, 0x21, 0x98, 0xb5, 0x3c, 0xe4, 0xe3, 0x58, 0x6c, 0x9d, 0xa1, 0xd2, 0x9c, 0xa1, 0x49, 0x00, 0xf2, 0x6f, 0x9c, - 0x99, 0xcc, 0x40, 0xc3, 0xf0, 0x96, 0xe6, 0x00, 0x74, 0xab, 0xeb, 0x70, 0x28, 0x5c, 0xd1, 0xd2, 0x79, 0xcf, 0x2e, - 0xba, 0xac, 0x0d, 0x2b, 0x36, 0xed, 0xa0, 0x75, 0x0a, 0x53, 0x62, 0xb6, 0xc0, 0xda, 0xeb, 0x7d, 0xb8, 0xb7, 0xab, - 0x8d, 0x8b, 0xc4, 0x4f, 0x8b, 0x78, 0x98, 0xc4, 0x14, 0x2d, 0x79, 0x4c, 0xb1, 0x04, 0x3b, 0xc8, 0x62, 0x5d, 0x8e, - 0x9f, 0x85, 0xcb, 0x51, 0xb3, 0x92, 0xde, 0xed, 0x60, 0x08, 0x5c, 0xbe, 0x06, 0xdb, 0x50, 0xcc, 0x3d, 0x61, 0xe1, - 0xb1, 0xf1, 0xf4, 0x0b, 0xd6, 0x6d, 0x6e, 0x17, 0xc4, 0xaf, 0xc0, 0x98, 0xc6, 0xcb, 0x60, 0x16, 0xa1, 0x53, 0xb9, - 0x73, 0x38, 0x74, 0xd7, 0x84, 0x95, 0xf1, 0x6a, 0xac, 0xc8, 0xc6, 0xd1, 0xf3, 0x7d, 0x1b, 0xcf, 0x7f, 0x16, 0xac, - 0xb8, 0xbb, 0x62, 0x60, 0x63, 0x2d, 0xc1, 0xdd, 0xb8, 0x5a, 0x86, 0xca, 0x40, 0xbe, 0x27, 0x0d, 0xeb, 0xb2, 0xc6, - 0xdf, 0x8d, 0x8a, 0xb1, 0x36, 0xf7, 0x94, 0x81, 0xb6, 0xc6, 0x6e, 0x17, 0xf6, 0x4d, 0xd7, 0x4d, 0xd6, 0x35, 0x8a, - 0xb8, 0x0a, 0xd2, 0xee, 0x6e, 0x01, 0x17, 0xa1, 0x3f, 0x6c, 0x5f, 0x0d, 0x36, 0x55, 0x37, 0x90, 0x04, 0xd7, 0x7e, - 0xf2, 0xdb, 0x53, 0xdd, 0x65, 0xad, 0xfb, 0xed, 0xa9, 0xd6, 0x2e, 0x0b, 0x8d, 0x21, 0x11, 0x76, 0xfd, 0x94, 0xfe, - 0xd3, 0x62, 0xbd, 0x46, 0x6b, 0x18, 0xde, 0x7b, 0xde, 0x8d, 0xe3, 0xf7, 0xde, 0x42, 0x31, 0x81, 0x8b, 0xdc, 0xab, - 0x5c, 0x7a, 0x42, 0x5e, 0x8d, 0xe0, 0x3d, 0xdf, 0x1a, 0xc2, 0x7b, 0x1e, 0x38, 0xbd, 0x82, 0xd4, 0x34, 0x11, 0x6c, - 0xe4, 0xe9, 0x27, 0xb2, 0x48, 0x68, 0xf8, 0xb8, 0xd7, 0x9c, 0x70, 0xfd, 0x57, 0x0a, 0xfc, 0x17, 0x1e, 0x2e, 0xb4, - 0x96, 0x02, 0x73, 0x31, 0x5f, 0x68, 0xac, 0xcc, 0xe8, 0x97, 0x63, 0x29, 0x74, 0x73, 0x4c, 0x67, 0x3c, 0xbf, 0x4b, - 0x17, 0xbc, 0x39, 0x93, 0x42, 0xaa, 0x39, 0xcd, 0x18, 0x56, 0x77, 0x4a, 0xb3, 0x59, 0x73, 0xc1, 0xf1, 0x73, 0x96, - 0x7f, 0x61, 0x9a, 0x67, 0x14, 0xbf, 0x95, 0x43, 0xa9, 0x25, 0x7e, 0x7d, 0x7b, 0x37, 0x61, 0x02, 0xff, 0x3e, 0x5c, - 0x08, 0xbd, 0xc0, 0x8a, 0x0a, 0xd5, 0x54, 0xac, 0xe0, 0xe3, 0x6e, 0xb3, 0x39, 0x2f, 0xf8, 0x8c, 0x16, 0x77, 0xcd, - 0x4c, 0xe6, 0xb2, 0x48, 0xff, 0xab, 0x75, 0x4c, 0x1f, 0x8c, 0x4f, 0xba, 0xba, 0xa0, 0x42, 0x71, 0x58, 0x98, 0x94, - 0xe6, 0xf9, 0xde, 0xf1, 0x69, 0x6b, 0xa6, 0xf6, 0xed, 0x85, 0x1f, 0x15, 0x7a, 0xfd, 0x17, 0xfe, 0x20, 0x61, 0x94, - 0xc9, 0x50, 0x0b, 0x37, 0xc8, 0x65, 0xb6, 0x28, 0x94, 0x2c, 0xd2, 0xb9, 0xe4, 0x42, 0xb3, 0xa2, 0x3b, 0x94, 0xc5, - 0x88, 0x15, 0xcd, 0x82, 0x8e, 0xf8, 0x42, 0xa5, 0x27, 0xf3, 0xdb, 0x6e, 0xbd, 0x07, 0x9b, 0x9f, 0x0a, 0x29, 0x58, - 0x17, 0xf8, 0x8d, 0x49, 0x21, 0x17, 0x62, 0xe4, 0x86, 0xb1, 0x10, 0x8a, 0xe9, 0xee, 0x9c, 0x8e, 0xc0, 0x0e, 0x38, - 0x3d, 0x9f, 0xdf, 0x76, 0xcd, 0xac, 0x6f, 0x18, 0x9f, 0x4c, 0x75, 0x7a, 0xda, 0x6a, 0xd9, 0x6f, 0xc5, 0xbf, 0xb2, - 0xb4, 0xdd, 0x49, 0x3a, 0xa7, 0xf3, 0x5b, 0xe0, 0xe0, 0x35, 0x2b, 0x9a, 0x00, 0x0b, 0xa8, 0xd4, 0x4e, 0x5a, 0x0f, - 0x8e, 0xef, 0x43, 0x06, 0xd8, 0x38, 0x34, 0xcd, 0x84, 0xc0, 0xd8, 0x3d, 0x5d, 0xcc, 0xe7, 0xac, 0x00, 0x2f, 0xfa, - 0xee, 0x8c, 0x16, 0x13, 0x2e, 0x9a, 0x85, 0x69, 0xb4, 0x79, 0x3e, 0xbf, 0x5d, 0xc3, 0x7c, 0x52, 0x6b, 0xb6, 0xea, - 0xa6, 0xe5, 0xbe, 0x96, 0xc1, 0x10, 0x4d, 0x4c, 0x9a, 0xb4, 0x98, 0x0c, 0x69, 0xdc, 0xee, 0xdc, 0xc7, 0xfe, 0x7f, - 0x49, 0x07, 0x05, 0x60, 0x6b, 0x8e, 0x16, 0x85, 0xb9, 0x45, 0x4d, 0xdb, 0xca, 0x36, 0x3b, 0x95, 0x5f, 0x58, 0xe1, - 0x5b, 0x35, 0x1f, 0xcb, 0xad, 0x79, 0xff, 0x27, 0x8d, 0xfe, 0x85, 0x27, 0x14, 0xd6, 0xc0, 0x20, 0x47, 0xdf, 0xc8, - 0x83, 0x30, 0xd3, 0xc1, 0xf2, 0x86, 0x8f, 0xf4, 0x34, 0x6d, 0xb7, 0x5a, 0x3f, 0x54, 0x2b, 0xd6, 0x9d, 0x5a, 0xd0, - 0xb5, 0x0b, 0x36, 0xab, 0xad, 0xe3, 0x8c, 0x96, 0xd8, 0xb6, 0x9c, 0x4b, 0xb7, 0xe4, 0x05, 0xcb, 0x4d, 0x34, 0x99, - 0xb5, 0x43, 0xb9, 0xad, 0x71, 0x72, 0x31, 0x65, 0x05, 0xd7, 0xdd, 0xfa, 0x57, 0xd5, 0xf1, 0xf6, 0xea, 0xaf, 0xad, - 0x1c, 0xba, 0xb4, 0x35, 0xdc, 0xa5, 0xe7, 0x63, 0xf8, 0xd8, 0x5e, 0xfd, 0x2f, 0xb4, 0x88, 0x37, 0x10, 0x13, 0x87, - 0x35, 0xd0, 0x3a, 0x98, 0x73, 0x01, 0x26, 0x99, 0x03, 0xfc, 0x0d, 0x28, 0x64, 0x34, 0xcf, 0x62, 0x18, 0xd1, 0x5e, - 0x73, 0xef, 0xb8, 0x60, 0x33, 0xe4, 0x01, 0x91, 0xdc, 0x3f, 0x2d, 0xd8, 0x6c, 0x9d, 0x98, 0xea, 0x4b, 0x83, 0x22, - 0x34, 0xe7, 0x13, 0x91, 0x66, 0x0c, 0xd0, 0x77, 0x9d, 0x30, 0xa1, 0xb9, 0xbe, 0x6b, 0x16, 0xf2, 0x66, 0x39, 0xe2, - 0x6a, 0x9e, 0xd3, 0xbb, 0x74, 0x9c, 0xb3, 0xdb, 0xae, 0x29, 0xd5, 0xe4, 0x9a, 0xcd, 0x94, 0x2b, 0xdb, 0x85, 0xf4, - 0xe6, 0xc8, 0x9a, 0x4d, 0x00, 0xf4, 0xe4, 0xcd, 0xe6, 0xfe, 0x49, 0x8e, 0xd5, 0x1e, 0xa3, 0x8a, 0x35, 0xe5, 0x42, - 0xef, 0xb5, 0x54, 0x77, 0xc6, 0x45, 0xd3, 0x0d, 0xe4, 0xa4, 0x35, 0xbf, 0xed, 0x6e, 0x43, 0x3e, 0xe8, 0x3f, 0x61, - 0xb7, 0x73, 0x2a, 0x46, 0x6c, 0xb4, 0x0c, 0xaa, 0x75, 0xa0, 0x5e, 0x58, 0x2a, 0x15, 0x7a, 0xda, 0x34, 0xb6, 0x5e, - 0x71, 0x47, 0xa0, 0x6f, 0xa0, 0xd6, 0x83, 0x16, 0xb6, 0xff, 0x9f, 0xb4, 0x51, 0x58, 0x79, 0x0f, 0xc2, 0x2e, 0xf1, - 0xf1, 0x5d, 0x13, 0xfe, 0x2e, 0xc1, 0xb7, 0x88, 0x67, 0x34, 0x77, 0x10, 0x99, 0xf1, 0xd1, 0x28, 0xaf, 0x8d, 0xe8, - 0x32, 0xe8, 0xac, 0x8d, 0x96, 0x30, 0xff, 0xb4, 0xb5, 0xd7, 0xda, 0x33, 0x73, 0x71, 0xdb, 0xfc, 0xe4, 0xe4, 0xfe, - 0xf1, 0x03, 0xd6, 0xcd, 0xb9, 0x60, 0xb5, 0xa9, 0x7e, 0x17, 0xd4, 0x61, 0xc3, 0x1d, 0xd7, 0x70, 0x7b, 0xaf, 0xbd, - 0x77, 0xd2, 0xfa, 0xc1, 0xef, 0xd6, 0x9c, 0x8d, 0x75, 0xda, 0x3e, 0x9b, 0xdf, 0xd6, 0xb7, 0xef, 0xb9, 0x6f, 0xfa, - 0xa6, 0xa0, 0xf3, 0x54, 0x48, 0xf8, 0xd3, 0x85, 0x4d, 0x36, 0xce, 0xe5, 0x4d, 0x3a, 0xe5, 0xa3, 0x11, 0x13, 0xb6, - 0x40, 0x99, 0xc8, 0xf2, 0x9c, 0xcf, 0x15, 0xb7, 0xab, 0xe1, 0x70, 0xf7, 0x74, 0x03, 0xaa, 0xe1, 0x80, 0x8e, 0x83, - 0x01, 0x9d, 0x56, 0x03, 0xaa, 0xfa, 0x0f, 0x47, 0xd8, 0xd9, 0x98, 0xab, 0x29, 0xd5, 0xad, 0x61, 0xd2, 0xdf, 0x0b, - 0xa5, 0x01, 0xe6, 0xde, 0x48, 0xc3, 0x50, 0xf1, 0xe6, 0x90, 0xe9, 0x1b, 0xc6, 0xc4, 0xb7, 0x07, 0x71, 0x99, 0x4a, - 0x91, 0xdf, 0xd9, 0xcf, 0x65, 0xd8, 0x25, 0x5d, 0x68, 0xb9, 0x4e, 0x86, 0x5c, 0xd0, 0xe2, 0xee, 0x5a, 0x31, 0xa1, - 0x64, 0x71, 0x2d, 0xc7, 0xe3, 0xe5, 0xb7, 0x48, 0xcb, 0x7d, 0xb4, 0x4e, 0x14, 0x17, 0x93, 0x9c, 0x59, 0xa2, 0x64, - 0x10, 0xc1, 0x11, 0x73, 0xdb, 0xae, 0x69, 0xb2, 0x36, 0xe8, 0x70, 0xe7, 0x99, 0x76, 0x07, 0x69, 0xda, 0xbc, 0x61, - 0xc3, 0xcf, 0x5c, 0x5b, 0x3c, 0x6b, 0xaa, 0x1b, 0xf0, 0x78, 0x31, 0xcb, 0x30, 0x67, 0xc5, 0xd2, 0xd3, 0xf0, 0x56, - 0x8d, 0xea, 0x5c, 0x09, 0x73, 0x7a, 0x68, 0x3a, 0x6c, 0x42, 0xfc, 0x2f, 0x56, 0x94, 0x7b, 0x8c, 0x0b, 0x83, 0x31, - 0x06, 0x40, 0x9b, 0xbb, 0x24, 0x3c, 0x03, 0x4e, 0x5a, 0x2d, 0x7f, 0x3e, 0x34, 0x6d, 0x9d, 0xb4, 0x9d, 0x9c, 0xb2, - 0xd9, 0xae, 0xfd, 0x59, 0x27, 0x46, 0xed, 0xce, 0xfc, 0x76, 0xcf, 0xfc, 0xd3, 0xda, 0x6b, 0x6d, 0x13, 0x9f, 0x6d, - 0x38, 0x1d, 0x23, 0xbf, 0xb2, 0x5a, 0xce, 0xd3, 0x36, 0x9b, 0x75, 0x17, 0x0a, 0x0e, 0x1a, 0x43, 0x1b, 0xcd, 0x01, - 0xb6, 0x36, 0x33, 0x81, 0x75, 0xa4, 0x5c, 0x00, 0x5d, 0xb7, 0x67, 0x1b, 0xf4, 0xa1, 0x24, 0x18, 0x62, 0xef, 0x6c, - 0xb4, 0x3e, 0xac, 0xd6, 0x5e, 0x35, 0x30, 0xf8, 0x67, 0xfd, 0x57, 0xc5, 0x19, 0xbe, 0x60, 0x01, 0x67, 0xce, 0x1b, - 0xc9, 0xe9, 0xaa, 0xe5, 0xb8, 0xf1, 0x91, 0xae, 0x84, 0x04, 0xe3, 0xcb, 0x30, 0xa3, 0xb7, 0xd6, 0xa9, 0x61, 0xc6, - 0x05, 0x98, 0x4c, 0x21, 0xac, 0x03, 0xe3, 0xf2, 0x69, 0xd8, 0xd0, 0x48, 0xc7, 0xd0, 0xf0, 0x61, 0x27, 0x39, 0x3d, - 0x45, 0xb8, 0x85, 0x3b, 0xa7, 0xa7, 0x81, 0x34, 0x30, 0xd6, 0xbb, 0x8a, 0xee, 0x2a, 0xa9, 0x76, 0x94, 0x3c, 0x32, - 0x8d, 0x1e, 0xb5, 0x5b, 0x2d, 0x6c, 0x1c, 0xb7, 0xcb, 0xc2, 0x5c, 0xed, 0x68, 0xb6, 0xdd, 0x6a, 0x41, 0xb3, 0xf0, - 0xc7, 0xcd, 0xeb, 0x17, 0xb2, 0x6c, 0xa5, 0x2d, 0xdc, 0x4e, 0xdb, 0xb8, 0x93, 0x76, 0xf0, 0x71, 0x7a, 0x8c, 0x4f, - 0xd2, 0x13, 0x7c, 0x9a, 0x9e, 0xe2, 0xb3, 0xf4, 0x0c, 0xdf, 0x4f, 0xef, 0xe3, 0xf3, 0xf4, 0x1c, 0x3f, 0x48, 0x1f, - 0xe0, 0x87, 0x69, 0xbb, 0x85, 0x1f, 0xa5, 0xed, 0x36, 0x7e, 0x9c, 0xb6, 0x3b, 0xf8, 0x49, 0xda, 0x3e, 0xc6, 0x4f, - 0xd3, 0xf6, 0x09, 0x7e, 0x96, 0xb6, 0x4f, 0x31, 0x85, 0xdc, 0x21, 0xe4, 0x66, 0x90, 0x3b, 0x82, 0x5c, 0x06, 0xb9, - 0xe3, 0xb4, 0x7d, 0xba, 0xc6, 0xca, 0x06, 0x7b, 0x88, 0x5a, 0xed, 0xce, 0xf1, 0xc9, 0xe9, 0xd9, 0xfd, 0xf3, 0x07, - 0x0f, 0x1f, 0x3d, 0x7e, 0xf2, 0xf4, 0x59, 0x34, 0xc0, 0x43, 0xe3, 0x73, 0xa1, 0x44, 0x9f, 0x1f, 0xb4, 0x4f, 0x07, - 0xf8, 0xda, 0x7f, 0xc6, 0xfc, 0xa0, 0x73, 0xd2, 0x42, 0x97, 0x97, 0x27, 0x83, 0x46, 0x99, 0xfb, 0xde, 0xb8, 0x7a, - 0x54, 0x59, 0x84, 0x90, 0x18, 0x72, 0x10, 0xbe, 0x33, 0xf5, 0xde, 0xb3, 0x98, 0x27, 0x05, 0x3a, 0x38, 0x30, 0x3f, - 0x26, 0xfe, 0xc7, 0xd0, 0xff, 0xa0, 0xc1, 0x22, 0xdd, 0xd2, 0xd8, 0xf9, 0xfa, 0xea, 0xd2, 0xd2, 0xbe, 0x34, 0x62, - 0xd9, 0xe3, 0xce, 0x9c, 0xfc, 0xbf, 0x22, 0x6b, 0x2e, 0x42, 0x4e, 0xac, 0x4a, 0xe6, 0xb4, 0xc7, 0xc8, 0xb2, 0x48, - 0x3b, 0xa7, 0xa7, 0x07, 0xbf, 0xf4, 0x79, 0xbf, 0x3d, 0x18, 0x1c, 0xb6, 0xef, 0xe3, 0x49, 0x99, 0xd0, 0xb1, 0x09, - 0xc3, 0x32, 0xe1, 0xd8, 0x26, 0xd0, 0xd4, 0xd6, 0x86, 0xa4, 0x13, 0x93, 0x04, 0x25, 0xd6, 0xa9, 0x69, 0xfb, 0xbe, - 0x6d, 0xfb, 0x01, 0xd8, 0x31, 0x99, 0xe6, 0x5d, 0xd3, 0x17, 0x17, 0x27, 0x2b, 0xd7, 0x28, 0x9e, 0xa4, 0xae, 0x35, - 0x9f, 0x78, 0x32, 0x18, 0xe0, 0xa1, 0x49, 0x3c, 0xad, 0x12, 0xcf, 0x06, 0x03, 0xd7, 0xd5, 0x03, 0xd3, 0xd5, 0xfd, - 0x2a, 0xeb, 0x7c, 0x30, 0x30, 0x5d, 0x22, 0xe7, 0xb5, 0xae, 0xf4, 0xde, 0x97, 0x52, 0x73, 0xc0, 0x2f, 0x3a, 0xa7, - 0xa7, 0x3d, 0xc0, 0x30, 0x63, 0x8d, 0xea, 0x61, 0x74, 0x13, 0xc0, 0xe8, 0x0e, 0x7e, 0xf7, 0x86, 0x34, 0xbd, 0xa6, - 0x25, 0x90, 0x7a, 0xd1, 0x7f, 0x45, 0x0d, 0x6d, 0x60, 0x6e, 0xfe, 0x4c, 0xec, 0x9f, 0x21, 0x6a, 0x7c, 0xa1, 0x00, - 0x6e, 0xd0, 0x85, 0x78, 0x65, 0xa6, 0xe9, 0xf1, 0x33, 0x05, 0xe7, 0x92, 0xa9, 0xca, 0x69, 0x6f, 0x35, 0xbd, 0x19, - 0xae, 0xa6, 0xea, 0x0b, 0xfa, 0x33, 0xfe, 0x53, 0x1d, 0xc6, 0xfd, 0x66, 0x23, 0x61, 0x7f, 0x8e, 0xc0, 0x8b, 0xa5, - 0x97, 0x8e, 0xd8, 0x04, 0xf5, 0xfa, 0x7f, 0x2a, 0x3c, 0x68, 0x04, 0x19, 0x3f, 0x6c, 0xa7, 0x80, 0x8f, 0xcb, 0x66, - 0x62, 0xfc, 0x03, 0xea, 0xa1, 0xde, 0x9f, 0xea, 0xf0, 0x4f, 0x74, 0xef, 0xa8, 0x9a, 0xcb, 0xef, 0xd2, 0x6d, 0xe1, - 0x2a, 0xf0, 0xcd, 0x61, 0xb9, 0x85, 0x19, 0x6e, 0x37, 0x19, 0x84, 0x09, 0x03, 0x27, 0x68, 0x12, 0xcb, 0x06, 0x3f, - 0x3a, 0x6e, 0xa1, 0x1f, 0xda, 0x1d, 0x10, 0xeb, 0x9b, 0xe2, 0x70, 0x7b, 0xd3, 0x17, 0xcd, 0x63, 0xfc, 0xa0, 0x59, - 0xe0, 0x36, 0xc2, 0xcd, 0xb6, 0xd7, 0xb7, 0xf6, 0x55, 0xdc, 0x42, 0x58, 0xc5, 0xe7, 0xf0, 0xcf, 0x09, 0x1a, 0x54, - 0x1b, 0xf2, 0x8a, 0x6e, 0xf6, 0x0e, 0x1e, 0x9b, 0x24, 0x56, 0x0d, 0x7e, 0x74, 0xd6, 0x42, 0x3f, 0x9c, 0x99, 0x8e, - 0xd8, 0xa1, 0xde, 0xd1, 0x95, 0xc4, 0x27, 0x4d, 0x09, 0x1d, 0xb5, 0xca, 0x7e, 0x44, 0x7c, 0x8a, 0xb0, 0x88, 0x8f, - 0xe1, 0x9f, 0x76, 0xd8, 0xcf, 0xaf, 0x5b, 0xfd, 0x98, 0x79, 0xb7, 0x71, 0x72, 0x6a, 0x1d, 0x40, 0x95, 0xbd, 0x8d, - 0x6d, 0xb0, 0xcb, 0xb6, 0xb9, 0x46, 0x6a, 0x1f, 0xc1, 0x07, 0xc2, 0xfa, 0x90, 0x28, 0xcc, 0x0e, 0xc1, 0x73, 0x14, - 0x0c, 0x26, 0xd4, 0xc5, 0x71, 0x57, 0x35, 0x1a, 0x48, 0xf4, 0xd5, 0xe0, 0x90, 0xb4, 0x9b, 0xba, 0xc9, 0x30, 0xfc, - 0x6e, 0x90, 0x32, 0x1c, 0x99, 0xa8, 0x7a, 0x7d, 0xec, 0x7a, 0xb5, 0x77, 0xce, 0x1e, 0x3b, 0x08, 0x21, 0xaa, 0x17, - 0xeb, 0x26, 0x43, 0x47, 0xa2, 0x11, 0xeb, 0x0b, 0xd6, 0x3b, 0x4b, 0x5b, 0xc8, 0x60, 0xa7, 0xea, 0xc5, 0xac, 0xc9, - 0x21, 0xbd, 0x93, 0xc6, 0xbc, 0xa9, 0xe1, 0xd7, 0x49, 0x30, 0x0b, 0x01, 0x78, 0x57, 0xf9, 0xc1, 0x14, 0x47, 0x9d, - 0xd3, 0x53, 0x2c, 0x08, 0x4f, 0x26, 0xe6, 0x97, 0x22, 0x3c, 0x19, 0x9a, 0x5f, 0x92, 0x94, 0xf0, 0xb2, 0xbd, 0xe3, - 0x82, 0x04, 0xab, 0x6a, 0x52, 0x28, 0x2c, 0x68, 0x81, 0x8e, 0x3a, 0xfe, 0x42, 0x1a, 0x4f, 0xfd, 0x1c, 0x40, 0x00, - 0x2f, 0x8c, 0x2d, 0xa2, 0x6c, 0x16, 0x38, 0x27, 0xf4, 0x32, 0x39, 0xed, 0x4d, 0x8f, 0xe2, 0x4e, 0x53, 0x36, 0x0b, - 0x94, 0x4e, 0x8f, 0x4c, 0x4d, 0x9c, 0x91, 0xc7, 0xd4, 0xb6, 0x86, 0xa7, 0x70, 0x8b, 0x98, 0x91, 0xec, 0xf0, 0xac, - 0xd5, 0x48, 0x4e, 0x11, 0xee, 0x67, 0xab, 0x16, 0xce, 0x57, 0xab, 0x16, 0xa6, 0xc1, 0x32, 0x3c, 0x16, 0x1e, 0x20, - 0xa5, 0x8e, 0x68, 0x33, 0x2a, 0x4c, 0x8f, 0xc7, 0x1a, 0x6e, 0xc4, 0x35, 0xf8, 0x99, 0x68, 0xf0, 0x80, 0x49, 0xb9, - 0xbb, 0x8a, 0x42, 0x26, 0x2e, 0xde, 0x38, 0xd4, 0x1a, 0xbd, 0x16, 0x7e, 0x5d, 0xbd, 0x4d, 0xa3, 0x88, 0x7f, 0x97, - 0xd8, 0xa6, 0x05, 0xc5, 0xe8, 0x76, 0xb1, 0x5f, 0xe9, 0x56, 0xb1, 0x37, 0x3b, 0x8a, 0x5d, 0x6d, 0x17, 0xfb, 0x28, - 0x03, 0x1d, 0x17, 0xff, 0xe1, 0xf8, 0xac, 0xd5, 0x38, 0x06, 0x64, 0x3d, 0x3e, 0x6b, 0x55, 0x85, 0xee, 0xd1, 0x6a, - 0xad, 0x34, 0xf9, 0x4c, 0xad, 0x95, 0x3f, 0xf7, 0xee, 0xc6, 0x66, 0xe1, 0xac, 0xb3, 0x73, 0xe9, 0xd9, 0xdc, 0x3f, - 0x05, 0x2b, 0x0a, 0x61, 0xa8, 0x9d, 0xee, 0x9f, 0x0d, 0x7a, 0x53, 0x16, 0x37, 0x20, 0x15, 0xa5, 0x63, 0xed, 0x7e, - 0xa1, 0xf2, 0x32, 0xf5, 0xa3, 0x84, 0xa4, 0xce, 0x00, 0x61, 0x49, 0x1a, 0xba, 0x7f, 0x3c, 0x30, 0xe7, 0x5d, 0x01, - 0xbf, 0x4f, 0xcc, 0xef, 0x52, 0x95, 0xe1, 0x5c, 0x01, 0xa6, 0x37, 0xc3, 0xa8, 0x27, 0xc8, 0x6b, 0x1a, 0x1b, 0xeb, - 0x6e, 0x94, 0x96, 0x19, 0xea, 0x0b, 0x64, 0xbc, 0x29, 0x33, 0x04, 0x79, 0x2d, 0xdc, 0x6f, 0xbc, 0x2c, 0x52, 0xb0, - 0xf4, 0xc0, 0x93, 0x14, 0xac, 0x3c, 0xf0, 0x30, 0x15, 0xe0, 0x89, 0x40, 0x53, 0x16, 0xd8, 0x8f, 0x3f, 0x74, 0xba, - 0x23, 0x73, 0xdf, 0x49, 0x0c, 0x96, 0x76, 0x19, 0x9c, 0x14, 0x1f, 0x65, 0x0c, 0x7f, 0x1b, 0x1a, 0x61, 0x06, 0x6d, - 0x32, 0x84, 0x79, 0x52, 0x10, 0x48, 0xc3, 0x3c, 0x99, 0x10, 0x06, 0x4d, 0xf2, 0x64, 0x48, 0x58, 0xbf, 0x13, 0xa0, - 0xc9, 0x53, 0x03, 0x3b, 0x00, 0x0e, 0xaf, 0x5f, 0x21, 0x6b, 0xdb, 0x38, 0xdc, 0x4d, 0x43, 0x13, 0x82, 0x70, 0x15, - 0xc3, 0x2c, 0x60, 0x73, 0x9a, 0x9f, 0x9d, 0x2a, 0xf0, 0x22, 0x4f, 0xa8, 0xa1, 0xde, 0x7f, 0x01, 0x59, 0x8d, 0xef, - 0x2d, 0xd9, 0x1a, 0xef, 0xdd, 0x5b, 0x8a, 0xf5, 0x0f, 0xf0, 0x47, 0xb9, 0x3f, 0xda, 0x9c, 0x7e, 0x6b, 0xf4, 0x57, - 0x0a, 0xc5, 0x76, 0x94, 0x42, 0x7f, 0x79, 0x47, 0x34, 0x45, 0x96, 0xb7, 0x69, 0x34, 0xa2, 0xc5, 0xe7, 0x08, 0x7f, - 0x4a, 0xa3, 0x1c, 0x18, 0xc1, 0x08, 0x7f, 0x4c, 0xa3, 0x82, 0x45, 0xf8, 0x8f, 0x34, 0x1a, 0xe6, 0x8b, 0x08, 0x7f, - 0x48, 0xa3, 0x49, 0x11, 0xe1, 0xf7, 0xa0, 0x26, 0x1c, 0xf1, 0xc5, 0x2c, 0xc2, 0xbf, 0xa7, 0x91, 0x32, 0x76, 0xf8, - 0xf8, 0x61, 0x1a, 0x31, 0x16, 0xe1, 0x77, 0x69, 0x24, 0xf3, 0x08, 0x5f, 0xa5, 0x91, 0x2c, 0x22, 0xfc, 0x28, 0x8d, - 0x0a, 0x1a, 0xe1, 0xc7, 0x69, 0x04, 0x85, 0x26, 0x11, 0x7e, 0x92, 0x46, 0xd0, 0xb2, 0x8a, 0xf0, 0xdb, 0x34, 0xe2, - 0x22, 0xc2, 0xbf, 0xa5, 0x91, 0x5e, 0x14, 0xff, 0x2c, 0x24, 0x57, 0x11, 0x7e, 0x9a, 0x46, 0x53, 0x1e, 0xe1, 0x37, - 0x69, 0x54, 0xc8, 0x08, 0xbf, 0x4e, 0x23, 0x9a, 0x47, 0xf8, 0x55, 0x1a, 0xe5, 0x2c, 0xc2, 0xbf, 0xa6, 0xd1, 0x88, - 0x45, 0xf8, 0x65, 0x1a, 0xdd, 0xb1, 0x3c, 0x97, 0x11, 0x7e, 0x96, 0x46, 0x4c, 0x44, 0xf8, 0x97, 0x34, 0xca, 0xa6, - 0x11, 0xfe, 0x29, 0x8d, 0x68, 0xf1, 0x59, 0x45, 0xf8, 0x79, 0x1a, 0x31, 0x1a, 0xe1, 0x17, 0xb6, 0xa3, 0x49, 0x84, - 0x7f, 0x4e, 0xa3, 0x9b, 0x69, 0xb4, 0xc6, 0x4a, 0x91, 0xe5, 0x6b, 0x9e, 0xb1, 0x3f, 0x58, 0x1a, 0x8d, 0x5b, 0xe3, - 0xf3, 0xf1, 0x38, 0xc2, 0x54, 0x68, 0xfe, 0xcf, 0x82, 0xdd, 0x3c, 0xd5, 0x90, 0x48, 0xd9, 0x70, 0x74, 0x3f, 0xc2, - 0xf4, 0x9f, 0x05, 0x4d, 0xa3, 0xf1, 0xd8, 0x14, 0xf8, 0x67, 0x41, 0x67, 0xb4, 0x78, 0xcb, 0xd2, 0xe8, 0xfe, 0x78, - 0x3c, 0x1e, 0x9d, 0x44, 0x98, 0x7e, 0x5d, 0x7c, 0x34, 0x2d, 0x98, 0x02, 0x43, 0xc6, 0x27, 0x50, 0xf7, 0x74, 0x7c, - 0x3a, 0xca, 0x22, 0x3c, 0xe4, 0xea, 0x9f, 0x05, 0x7c, 0x8f, 0xd9, 0x49, 0x76, 0x12, 0xe1, 0x61, 0x4e, 0xb3, 0xcf, - 0x69, 0xd4, 0x32, 0xbf, 0xc4, 0x2f, 0x6c, 0xf4, 0x7a, 0x26, 0x8d, 0x12, 0x7d, 0xcc, 0x86, 0xd9, 0x28, 0xc2, 0x66, - 0x30, 0x63, 0xf8, 0xfb, 0x85, 0xbf, 0x63, 0x3a, 0x8d, 0xce, 0x69, 0x67, 0xc8, 0x3a, 0x11, 0x1e, 0xbe, 0xb9, 0x11, - 0x69, 0x44, 0x4f, 0x3b, 0xb4, 0x43, 0x23, 0x3c, 0x5c, 0x14, 0xf9, 0xdd, 0x8d, 0x94, 0x23, 0x00, 0xc2, 0xf0, 0xfc, - 0xfc, 0x7e, 0x84, 0x33, 0xfa, 0xab, 0x86, 0xda, 0xa7, 0xe3, 0x07, 0x8c, 0xb6, 0x22, 0xfc, 0x0b, 0x2d, 0xf4, 0xc7, - 0x85, 0x72, 0x03, 0x6d, 0x41, 0x8a, 0xcc, 0xde, 0x81, 0x82, 0x39, 0x1a, 0x75, 0xce, 0x1e, 0xb4, 0x59, 0x84, 0xb3, - 0xab, 0xd7, 0xd0, 0xdb, 0xfd, 0xf1, 0x69, 0x0b, 0x3e, 0x04, 0x48, 0x6a, 0xac, 0x80, 0x46, 0xce, 0x4e, 0x1e, 0x9c, - 0xb2, 0x91, 0x49, 0x54, 0x3c, 0xff, 0x6c, 0x66, 0x7f, 0x0e, 0xf3, 0xc9, 0x0a, 0x3e, 0x53, 0x52, 0xa4, 0xd1, 0x28, - 0x6b, 0x9f, 0x1c, 0x43, 0xc2, 0x1d, 0x15, 0x1e, 0x38, 0xb7, 0x50, 0xf5, 0x7c, 0x18, 0xe1, 0x5b, 0x9b, 0x7a, 0x3e, - 0x34, 0x1f, 0x93, 0x77, 0xbf, 0x8a, 0x37, 0xa3, 0x34, 0x1a, 0x9e, 0x9f, 0x9f, 0xb5, 0x20, 0xe1, 0x03, 0xbd, 0x4b, - 0x23, 0xfa, 0x00, 0xfe, 0x83, 0xec, 0x8f, 0xcf, 0xa0, 0x43, 0x18, 0xe1, 0xed, 0xe4, 0x63, 0x98, 0xf3, 0x79, 0x4a, - 0x3f, 0xf3, 0x34, 0x1a, 0x8e, 0x86, 0xf7, 0xcf, 0xa0, 0xde, 0x8c, 0x4e, 0x9e, 0x69, 0x0a, 0xed, 0xb6, 0x5a, 0xa6, - 0xe5, 0x77, 0xfc, 0x0b, 0x33, 0xd5, 0x4f, 0x4f, 0xcf, 0x86, 0x1d, 0x18, 0xc1, 0x15, 0xa8, 0x18, 0x60, 0x3c, 0xe7, - 0x99, 0x69, 0xf0, 0x2a, 0x7b, 0x3a, 0x4a, 0xa3, 0x07, 0x0f, 0x8e, 0x3b, 0x59, 0x16, 0xe1, 0xdb, 0x8f, 0x23, 0x5b, - 0xdb, 0xe4, 0x29, 0x80, 0x7d, 0x1a, 0xb1, 0x07, 0x0f, 0xce, 0xee, 0x53, 0xf8, 0x7e, 0x6e, 0xda, 0x3a, 0x1f, 0x0f, - 0xb3, 0x73, 0x68, 0xeb, 0x77, 0x98, 0xce, 0xc9, 0xf9, 0xf1, 0xc8, 0xf4, 0xf5, 0xbb, 0x19, 0x75, 0x67, 0x7c, 0x32, - 0x3e, 0x31, 0x99, 0x66, 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x8d, 0x32, 0x36, 0x6a, 0x47, 0xf8, 0xd6, 0x2d, 0xdc, 0x83, - 0x93, 0x56, 0x6b, 0x74, 0x1c, 0xe1, 0xd1, 0xc3, 0xf9, 0xfc, 0xad, 0x81, 0x60, 0xfb, 0xe4, 0x81, 0xfd, 0x56, 0x9f, - 0xef, 0xa0, 0xe9, 0xa1, 0x01, 0xda, 0x88, 0xcf, 0x4c, 0xcb, 0x67, 0x0f, 0xe0, 0x3f, 0xf3, 0x6d, 0x9a, 0x2e, 0xbf, - 0xe5, 0x68, 0x62, 0x17, 0xa5, 0xcd, 0x1e, 0xb4, 0xa0, 0xc6, 0x98, 0x7f, 0x1c, 0x16, 0x1c, 0xd0, 0x68, 0xd8, 0x81, - 0xff, 0x8b, 0xf0, 0x38, 0xbf, 0x7a, 0xed, 0x70, 0x76, 0x3c, 0xa6, 0xe3, 0x56, 0x84, 0xc7, 0xf2, 0xa3, 0xd2, 0x1f, - 0x1e, 0x8a, 0x34, 0xea, 0x74, 0xce, 0x87, 0xa6, 0xcc, 0xe2, 0x17, 0xc5, 0x0d, 0x1e, 0xb7, 0x4c, 0x2b, 0x13, 0xfa, - 0x56, 0x0d, 0xaf, 0x24, 0xac, 0x24, 0xfc, 0x17, 0xe1, 0x09, 0xe8, 0xa5, 0x5c, 0x2b, 0xe7, 0x76, 0x3b, 0x4c, 0xde, - 0x19, 0xd4, 0x1c, 0xdd, 0x07, 0x78, 0xf9, 0x65, 0x1c, 0x51, 0x7a, 0xda, 0x69, 0x45, 0xd8, 0x8c, 0xfa, 0xbc, 0x05, - 0xff, 0x45, 0xd8, 0x42, 0xce, 0xc0, 0x75, 0xf2, 0xf1, 0xd9, 0xcb, 0x9b, 0x34, 0xa2, 0xa3, 0xf1, 0x18, 0x96, 0xc4, - 0x4c, 0xc6, 0x17, 0x9b, 0x4a, 0xc1, 0xee, 0x7e, 0xbd, 0x71, 0xdb, 0xc5, 0x24, 0x68, 0x07, 0x9d, 0xb3, 0x07, 0xc3, - 0x93, 0x08, 0xbf, 0x1d, 0x71, 0x2a, 0x60, 0x95, 0xb2, 0xd1, 0x69, 0x76, 0x9a, 0x99, 0x84, 0x89, 0x4c, 0xa3, 0x13, - 0x58, 0xf2, 0x4e, 0x84, 0xf9, 0x97, 0xab, 0x3b, 0x8b, 0x6e, 0x50, 0xdb, 0x21, 0xc8, 0xb8, 0xc5, 0xce, 0xce, 0xb3, - 0x08, 0xe7, 0xf4, 0xcb, 0xb3, 0x5f, 0x8b, 0x34, 0x62, 0x67, 0xec, 0x6c, 0x4c, 0xfd, 0xf7, 0x1f, 0x6a, 0x6a, 0x6a, - 0xb4, 0xc6, 0xa7, 0x90, 0x74, 0x23, 0xcc, 0x58, 0xef, 0x67, 0x63, 0x83, 0x21, 0xaf, 0x66, 0x52, 0x64, 0x4f, 0xc7, - 0x63, 0x69, 0xb1, 0x98, 0xc2, 0x26, 0xfc, 0x04, 0xd0, 0xa6, 0xa3, 0xd1, 0x39, 0x3b, 0x8b, 0xf0, 0x27, 0xbb, 0x4b, - 0xdc, 0x04, 0x3e, 0x59, 0xcc, 0x66, 0x6e, 0xb7, 0x7f, 0xb2, 0x40, 0x81, 0xf9, 0x8e, 0xe9, 0x98, 0x8e, 0x3a, 0x11, - 0xfe, 0x64, 0xe0, 0x32, 0x3a, 0x86, 0xff, 0xa0, 0x00, 0x74, 0xf6, 0xa0, 0xc5, 0xd8, 0x83, 0x96, 0xf9, 0x0a, 0xf3, - 0xdc, 0xcc, 0x87, 0x67, 0x59, 0x3b, 0xc2, 0x9f, 0x1c, 0x3a, 0x8e, 0xc7, 0xb4, 0x05, 0xe8, 0xf8, 0xc9, 0xa1, 0x63, - 0xa7, 0x35, 0xec, 0x50, 0xf3, 0x6d, 0xb1, 0xe6, 0xfc, 0x7e, 0xc6, 0x60, 0x72, 0x9f, 0x2c, 0x42, 0xde, 0xbf, 0x7f, - 0x7e, 0xfe, 0xe0, 0x01, 0x7c, 0x9a, 0xb6, 0xcb, 0x4f, 0xa5, 0x1f, 0xe6, 0x06, 0xc9, 0x5a, 0xd9, 0x09, 0xd0, 0xc9, - 0x4f, 0x66, 0x8c, 0xe3, 0xf1, 0x98, 0xb5, 0x22, 0x9c, 0xf3, 0x19, 0xb3, 0x98, 0x60, 0x7f, 0x9b, 0x8e, 0x8e, 0x3b, - 0xd9, 0xe8, 0xb8, 0x13, 0xe1, 0xfc, 0xed, 0x33, 0x33, 0x9b, 0x16, 0xcc, 0xde, 0x6f, 0x39, 0x8f, 0x35, 0x33, 0xfa, - 0x06, 0x06, 0x09, 0x2b, 0x0d, 0x95, 0xdf, 0x07, 0xf4, 0xf0, 0xec, 0x2c, 0x1b, 0xc1, 0x40, 0xdf, 0x43, 0xb7, 0x00, - 0xc6, 0xf7, 0x76, 0xf3, 0x0d, 0xe9, 0xe9, 0x29, 0x4c, 0xf7, 0xfd, 0x7c, 0x51, 0xcc, 0x5f, 0xa5, 0xd1, 0x83, 0xe3, - 0xfb, 0xad, 0xd1, 0x30, 0xc2, 0xef, 0xdd, 0x04, 0x8f, 0xb3, 0xe1, 0xf1, 0xfd, 0x76, 0x84, 0xdf, 0x9b, 0xfd, 0x76, - 0x7f, 0x78, 0x76, 0x0e, 0xe7, 0xc6, 0x7b, 0x35, 0x2f, 0xde, 0x4e, 0x4c, 0x81, 0x31, 0x7d, 0x00, 0xcd, 0xfe, 0x66, - 0x76, 0xe3, 0xa8, 0x0d, 0x1b, 0xf9, 0xbd, 0xd9, 0x64, 0x06, 0x4f, 0xee, 0xb7, 0x4f, 0xcf, 0x4f, 0x23, 0x3c, 0xe3, - 0x23, 0x01, 0x04, 0xde, 0x6c, 0x94, 0x07, 0xed, 0x07, 0xf7, 0x5b, 0x11, 0x9e, 0xbd, 0xd5, 0xd9, 0x47, 0x3a, 0x33, - 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa5, 0xef, 0xde, 0x28, 0x47, 0x8f, 0x59, 0x3b, 0xc2, 0x33, 0x99, 0x65, 0x54, - 0xbd, 0xb5, 0x09, 0xc3, 0xd3, 0x08, 0x0b, 0xfa, 0x85, 0xfe, 0x2d, 0xfd, 0x66, 0x1a, 0x31, 0x3a, 0x32, 0x69, 0x06, - 0x87, 0x23, 0xfc, 0x6e, 0x04, 0xd7, 0x60, 0x69, 0x34, 0x1e, 0x8d, 0x4f, 0x01, 0x3c, 0x40, 0x80, 0x2c, 0x76, 0x03, - 0x34, 0xe0, 0x6b, 0xf4, 0x68, 0x98, 0x46, 0x67, 0xc3, 0x73, 0xd6, 0x39, 0x8e, 0x70, 0x49, 0x8d, 0xe8, 0x29, 0xe4, - 0x9b, 0xcf, 0x8f, 0x66, 0x4b, 0x9d, 0xd8, 0x04, 0x03, 0xa0, 0x11, 0xbd, 0xdf, 0x1a, 0x9d, 0x45, 0x78, 0xfe, 0x9a, - 0xf9, 0x3d, 0xc6, 0x18, 0x3b, 0x07, 0x58, 0x42, 0x92, 0x41, 0xa0, 0xf3, 0xf1, 0xf0, 0xc1, 0xb9, 0xf9, 0x06, 0x30, - 0xd0, 0x31, 0x63, 0x00, 0xa4, 0xf9, 0x6b, 0x56, 0x02, 0x62, 0x34, 0xbc, 0xdf, 0x02, 0xfa, 0x32, 0xa7, 0x73, 0x7a, - 0x47, 0x6f, 0x9e, 0xce, 0xcd, 0x9c, 0xc6, 0xa3, 0xd3, 0x08, 0xcf, 0x9f, 0xff, 0x32, 0x5f, 0x8c, 0xc7, 0x66, 0x42, - 0x74, 0xf8, 0x20, 0xc2, 0x73, 0x56, 0x2c, 0x60, 0x8d, 0xce, 0x4f, 0x8f, 0xc7, 0x11, 0x76, 0x68, 0x98, 0xb5, 0xb2, - 0x21, 0xdc, 0xf3, 0x2d, 0x66, 0x69, 0x34, 0x1a, 0xd1, 0xd6, 0x08, 0x6e, 0xfd, 0xe4, 0xcd, 0xaf, 0x85, 0x45, 0x23, - 0x66, 0xf0, 0xc1, 0xad, 0x21, 0xcc, 0x17, 0xe0, 0xf1, 0x71, 0xc8, 0xb2, 0x8c, 0xba, 0xc4, 0xb3, 0xb3, 0xe3, 0x63, - 0xc0, 0x3d, 0x3b, 0x43, 0x8b, 0x20, 0x6f, 0xd4, 0xdd, 0xb0, 0x90, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, - 0xee, 0xb5, 0xa1, 0xab, 0xed, 0xb3, 0x07, 0xb0, 0x00, 0x8a, 0x8e, 0x46, 0xaf, 0xec, 0xe1, 0x76, 0x3e, 0x3c, 0x39, - 0x6d, 0x1f, 0x47, 0xd8, 0x6f, 0x04, 0x7a, 0xde, 0xba, 0xdf, 0x81, 0x12, 0x62, 0x74, 0x67, 0x4b, 0x8c, 0x4f, 0xe8, - 0xc9, 0x59, 0x2b, 0xc2, 0x7e, 0x6b, 0xb0, 0xf3, 0xe1, 0xe9, 0x7d, 0xf8, 0x54, 0x53, 0x96, 0xe7, 0x06, 0xbf, 0x4f, - 0x01, 0x2e, 0x8a, 0x3f, 0x13, 0x34, 0x8d, 0x68, 0xeb, 0xb4, 0xd3, 0x19, 0xc1, 0x67, 0xfe, 0x85, 0x15, 0x69, 0x94, - 0xb5, 0xe0, 0xbf, 0x08, 0x07, 0x3b, 0x89, 0x0d, 0x23, 0x6c, 0xf0, 0xee, 0x8c, 0x9e, 0x9a, 0xbd, 0xef, 0x76, 0x55, - 0xeb, 0xbc, 0x05, 0x1b, 0xd6, 0x6d, 0x2a, 0xf7, 0xa5, 0x84, 0xbc, 0x71, 0x24, 0x96, 0x46, 0x38, 0x40, 0xd0, 0xf1, - 0xfd, 0x71, 0x84, 0xfd, 0x8e, 0x3b, 0x39, 0x3b, 0xef, 0x00, 0x29, 0xd3, 0x40, 0x28, 0x46, 0x9d, 0xe1, 0x09, 0x90, - 0x26, 0xcd, 0x5e, 0x5b, 0x3c, 0x89, 0xb0, 0x7e, 0xaa, 0xf4, 0xab, 0x34, 0x1a, 0x9d, 0x0f, 0xc7, 0xa3, 0xf3, 0x08, - 0x6b, 0x39, 0xa3, 0x5a, 0x1a, 0x0a, 0x78, 0x7c, 0x72, 0x3f, 0xc2, 0x06, 0xcd, 0x5b, 0xac, 0x35, 0x6a, 0x45, 0xd8, - 0x1d, 0x25, 0x8c, 0x9d, 0x77, 0x60, 0x5a, 0x3f, 0x3f, 0xd7, 0x80, 0xcb, 0x23, 0x36, 0x3c, 0x8e, 0x70, 0x49, 0xef, - 0x0d, 0x21, 0x82, 0x2f, 0x35, 0x93, 0x9f, 0x1d, 0xeb, 0x01, 0xa4, 0xce, 0x6f, 0x78, 0x58, 0x86, 0x97, 0x37, 0x16, - 0x8d, 0xa8, 0xd9, 0xe2, 0xc1, 0x3d, 0xe8, 0x13, 0x1a, 0x7b, 0xb6, 0x9d, 0x93, 0xe5, 0x1a, 0x97, 0xe1, 0x45, 0x3f, - 0xb3, 0x3b, 0x15, 0x2b, 0x65, 0x38, 0xd9, 0x20, 0x05, 0x5c, 0x00, 0x9c, 0x41, 0xbd, 0xf3, 0x99, 0x04, 0x41, 0x52, - 0x90, 0x56, 0x57, 0x5c, 0x78, 0x3f, 0xce, 0xae, 0x80, 0xa0, 0x03, 0x90, 0x5e, 0x10, 0x4a, 0x34, 0xc4, 0x66, 0xb1, - 0xc2, 0xa4, 0x37, 0x6f, 0x37, 0x32, 0xa5, 0xb4, 0x06, 0xf3, 0x94, 0x50, 0x1f, 0x95, 0x1d, 0x2e, 0x69, 0x21, 0x6e, - 0x11, 0xea, 0x4a, 0x62, 0x62, 0x2c, 0xbf, 0x10, 0x3a, 0x56, 0xaa, 0x5f, 0x0c, 0x70, 0xfb, 0x0c, 0x61, 0x88, 0x5e, - 0x40, 0xfa, 0xf2, 0xf2, 0xb2, 0x7d, 0x76, 0x60, 0x84, 0xbe, 0xcb, 0xcb, 0x73, 0xfb, 0x03, 0xfe, 0x1d, 0x54, 0x11, - 0xa3, 0x61, 0x7c, 0x8f, 0x58, 0xa0, 0xd1, 0x33, 0xfc, 0xf5, 0x23, 0xb6, 0x5a, 0xc5, 0x8f, 0x18, 0x81, 0x19, 0xe3, - 0x47, 0x2c, 0x31, 0xb7, 0x06, 0xd6, 0x37, 0x85, 0xf4, 0x41, 0x73, 0xd6, 0xc2, 0x10, 0xc7, 0xdc, 0x73, 0xde, 0x8f, - 0x58, 0x9f, 0xd7, 0xfd, 0x9a, 0xab, 0xe0, 0xc1, 0x07, 0x07, 0xcb, 0x22, 0xd5, 0x56, 0x4c, 0xd0, 0x56, 0x4c, 0xd0, - 0x56, 0x4c, 0xd0, 0x55, 0xf8, 0xf6, 0x93, 0x1e, 0x48, 0x29, 0x46, 0xd9, 0xe2, 0x78, 0xea, 0x77, 0xa0, 0xf6, 0x00, - 0xed, 0x64, 0xaf, 0x52, 0x76, 0x94, 0xba, 0x8a, 0x9d, 0x0a, 0x8c, 0x9d, 0x89, 0x4e, 0xdb, 0x71, 0xf4, 0xef, 0xa8, - 0x3b, 0x5e, 0xd6, 0xc4, 0xb2, 0x77, 0x3b, 0xc5, 0x32, 0x58, 0x49, 0x23, 0x9a, 0xed, 0xdb, 0x48, 0x18, 0xba, 0x7f, - 0xdf, 0x08, 0x66, 0x55, 0x78, 0xb6, 0x06, 0x24, 0x75, 0x41, 0x0a, 0x39, 0x37, 0x52, 0x5a, 0x81, 0xd2, 0x91, 0x8e, - 0x0b, 0xd0, 0x50, 0x7a, 0x05, 0x65, 0x19, 0x45, 0xb4, 0x61, 0x00, 0xa2, 0xac, 0x8c, 0x66, 0x65, 0xb5, 0x53, 0x10, - 0x5d, 0x40, 0x13, 0x66, 0x24, 0x16, 0x68, 0x40, 0x98, 0x06, 0x84, 0xab, 0x0c, 0xe2, 0x8c, 0xcb, 0x3e, 0x31, 0xd9, - 0xca, 0x64, 0xab, 0x32, 0x5b, 0xfa, 0x6c, 0x2b, 0x24, 0x4a, 0x93, 0x2d, 0xcb, 0x6c, 0x90, 0xd9, 0xf0, 0x24, 0x55, - 0x78, 0x98, 0x4a, 0x2b, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0x1a, 0x6a, 0x73, 0x0f, 0x0e, 0xe2, 0x52, 0x4e, 0x32, 0x6a, - 0xe2, 0x7b, 0x4b, 0x9e, 0x14, 0x46, 0x06, 0xe2, 0xc9, 0xc4, 0xfd, 0x1d, 0xae, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfc, - 0x46, 0x49, 0xf4, 0x97, 0x57, 0xa2, 0x3e, 0xe2, 0x26, 0xfe, 0xcc, 0x05, 0x49, 0x5a, 0xad, 0xe3, 0xf6, 0x71, 0xeb, - 0xbc, 0xc7, 0x0f, 0xdb, 0x9d, 0xe4, 0x41, 0x27, 0x35, 0x8a, 0x88, 0xb9, 0xbc, 0x01, 0x05, 0xcc, 0x51, 0x27, 0x39, - 0x41, 0x87, 0xed, 0xa4, 0x75, 0x7a, 0xda, 0x84, 0x7f, 0xf0, 0x7b, 0x5d, 0x56, 0x3b, 0x69, 0x9d, 0x9c, 0xf6, 0xf8, - 0xd1, 0x46, 0xa5, 0x98, 0x37, 0xa0, 0x20, 0x3a, 0x32, 0x95, 0x30, 0xd4, 0xaf, 0x96, 0xf7, 0xd9, 0x96, 0x9e, 0xe7, - 0xbd, 0x8e, 0x95, 0x55, 0xc5, 0x01, 0x54, 0xfd, 0xd7, 0xc4, 0x00, 0xd1, 0x7f, 0x0d, 0xcb, 0x18, 0xb1, 0xcb, 0x02, - 0x44, 0xed, 0x47, 0x3c, 0x16, 0x0d, 0x76, 0x18, 0xdb, 0x7c, 0x0d, 0x75, 0x9b, 0x10, 0xb7, 0x0d, 0x4f, 0x5c, 0xae, - 0x0a, 0x73, 0x27, 0x08, 0x35, 0x15, 0xe4, 0x0e, 0x5d, 0xae, 0x0c, 0x73, 0x87, 0x08, 0x35, 0x25, 0xe4, 0xd2, 0x94, - 0x27, 0x14, 0x72, 0x74, 0x42, 0x9b, 0x06, 0x92, 0xd5, 0xa2, 0x3c, 0x67, 0x7e, 0xd8, 0x7c, 0x0c, 0xcb, 0x63, 0x08, - 0x8a, 0x13, 0xa4, 0x05, 0xbc, 0xed, 0x51, 0x6a, 0x73, 0x5a, 0xb8, 0x54, 0xe3, 0x40, 0x46, 0x03, 0xfe, 0x39, 0x64, - 0xe6, 0xc1, 0x87, 0x56, 0xef, 0xf8, 0xac, 0x95, 0xb6, 0xc1, 0x49, 0x19, 0x64, 0x6d, 0x61, 0x65, 0x6d, 0xe1, 0x65, - 0x6d, 0xe1, 0x65, 0x6d, 0x10, 0xe0, 0x83, 0xbe, 0xff, 0x91, 0x35, 0xc3, 0x0f, 0x5e, 0x5a, 0x91, 0x58, 0x33, 0x81, - 0x58, 0xaf, 0x56, 0xcb, 0x35, 0xd8, 0xf8, 0x94, 0x35, 0xa4, 0xaa, 0xd4, 0x9f, 0xcb, 0x22, 0x6d, 0xe1, 0x49, 0x0a, - 0x5a, 0xee, 0x16, 0xa6, 0x66, 0x73, 0x7b, 0xaa, 0xb0, 0x19, 0x3f, 0xa6, 0xe7, 0xd5, 0xc9, 0x97, 0xe4, 0xd8, 0x68, - 0x8f, 0x97, 0x45, 0xca, 0x2d, 0xcd, 0xe0, 0x96, 0x66, 0x70, 0x4b, 0x33, 0xa0, 0x11, 0x5c, 0x16, 0x36, 0x65, 0x13, - 0x4a, 0xe0, 0x4a, 0xa0, 0x7f, 0x3c, 0x80, 0xf0, 0x79, 0xb1, 0x26, 0x66, 0xd4, 0x1b, 0x9d, 0xb7, 0x21, 0x5c, 0x98, - 0x2d, 0xa9, 0x13, 0x6a, 0xbc, 0xa6, 0xcb, 0x31, 0x7f, 0xad, 0xa1, 0x7d, 0x02, 0x6f, 0xb9, 0x3c, 0xd4, 0x71, 0x0b, - 0x8c, 0x26, 0xa2, 0x22, 0xea, 0x19, 0xb2, 0x90, 0x1a, 0x9d, 0x8d, 0x33, 0x86, 0xfe, 0xbc, 0xe1, 0x83, 0x6a, 0x29, - 0x41, 0xf8, 0x82, 0xc1, 0x67, 0x56, 0x39, 0xc5, 0x97, 0xb6, 0x9e, 0xce, 0x50, 0xcb, 0x1e, 0x09, 0x5d, 0x30, 0xd8, - 0xf6, 0xd1, 0x96, 0x7a, 0x82, 0x48, 0x65, 0xdc, 0x05, 0x49, 0x15, 0x2f, 0x18, 0xdc, 0x67, 0xc9, 0x2d, 0x35, 0xce, - 0x24, 0x2f, 0xec, 0x9f, 0xaf, 0x34, 0xf0, 0xb6, 0x2b, 0x26, 0x43, 0xef, 0xa4, 0x7a, 0x6d, 0xa2, 0xea, 0x90, 0xfd, - 0x7d, 0x6b, 0x4b, 0x6d, 0xbe, 0x36, 0x8d, 0xa9, 0x4d, 0xa2, 0xc9, 0x86, 0x1d, 0xea, 0xd7, 0xe8, 0x1f, 0xef, 0x2b, - 0x56, 0x4c, 0x86, 0x28, 0xa0, 0xd9, 0x06, 0xac, 0xaa, 0x02, 0x96, 0x72, 0xf5, 0x4a, 0x17, 0x42, 0xe8, 0xdd, 0x8c, - 0x79, 0x5d, 0x4c, 0x86, 0x3b, 0x1f, 0xfd, 0xb0, 0x3d, 0xf6, 0xde, 0xd2, 0xa0, 0x07, 0xaf, 0xda, 0x9e, 0xb2, 0xdb, - 0xef, 0xd5, 0xb9, 0xd9, 0x59, 0x47, 0xe5, 0xdf, 0xab, 0xf3, 0x74, 0x57, 0x9d, 0x19, 0xbf, 0x8d, 0xfd, 0xde, 0xd1, - 0x81, 0x1a, 0xdb, 0x18, 0xe8, 0x4c, 0x86, 0x10, 0xa5, 0x1d, 0xfe, 0xda, 0x58, 0x2a, 0x5d, 0x4f, 0xc2, 0x61, 0x15, - 0x64, 0x2f, 0x39, 0x4d, 0x19, 0xa6, 0xa4, 0x73, 0x58, 0x98, 0x68, 0x2a, 0x22, 0xa1, 0x4d, 0x95, 0x50, 0x9c, 0x93, - 0x38, 0xa6, 0x87, 0x19, 0xc4, 0x84, 0x69, 0xf7, 0x68, 0x1a, 0xd3, 0x46, 0x86, 0x8e, 0xe2, 0x76, 0x83, 0x1e, 0x66, - 0x08, 0x35, 0xda, 0xa0, 0x33, 0x95, 0xa4, 0xdd, 0xcc, 0x21, 0x4a, 0xa4, 0x21, 0xc5, 0xf9, 0xa1, 0x48, 0x8a, 0x86, - 0x3c, 0x54, 0x49, 0xd1, 0x48, 0x4e, 0xb1, 0x48, 0x26, 0x65, 0xf2, 0xc4, 0x24, 0x4f, 0x6c, 0xf2, 0xb0, 0x4c, 0x1e, - 0x9a, 0xe4, 0xa1, 0x4d, 0xa6, 0xa4, 0x38, 0x14, 0x09, 0x6d, 0xc4, 0xed, 0x66, 0x81, 0x0e, 0x61, 0x04, 0x7e, 0xf4, - 0x44, 0x84, 0xc1, 0xb9, 0xd7, 0xc6, 0xba, 0x65, 0x2e, 0x73, 0x17, 0x2e, 0xb3, 0x02, 0x52, 0xe9, 0x72, 0x04, 0x75, - 0x9e, 0x05, 0x60, 0xc2, 0xda, 0xfe, 0xf1, 0xc1, 0xe0, 0xd6, 0x59, 0x2e, 0x45, 0xe0, 0x52, 0x05, 0x56, 0xe0, 0x9f, - 0x9d, 0x23, 0x09, 0x40, 0x75, 0x4d, 0xf3, 0xf9, 0x94, 0x6e, 0xf9, 0xad, 0x16, 0x93, 0xa1, 0xdb, 0x59, 0x65, 0x33, - 0x8c, 0x16, 0x36, 0xc8, 0x72, 0xdd, 0xc3, 0x10, 0x40, 0xed, 0xbd, 0x1a, 0x13, 0x6a, 0x94, 0xe4, 0xb6, 0xc6, 0xa4, - 0x60, 0x77, 0x2a, 0xa3, 0x39, 0x8b, 0xab, 0x03, 0xb8, 0x1a, 0x26, 0x23, 0x2f, 0xc0, 0x16, 0xbd, 0x38, 0x4c, 0x8e, - 0x1b, 0x3a, 0x99, 0x1c, 0x26, 0xa7, 0x0f, 0x1a, 0x3a, 0x19, 0x1e, 0x26, 0xed, 0x76, 0x85, 0xb3, 0x49, 0x41, 0x74, - 0x32, 0x21, 0x1a, 0x34, 0x86, 0xb6, 0x51, 0x39, 0xa7, 0x60, 0x5c, 0xf5, 0x6f, 0x0c, 0xa3, 0xe1, 0x86, 0x21, 0xd8, - 0xc4, 0xc6, 0x9b, 0xdc, 0x1a, 0x43, 0xd8, 0x4d, 0xe7, 0xf4, 0xb4, 0xa9, 0x93, 0x02, 0x6b, 0xbb, 0x92, 0x4d, 0x9d, - 0x4c, 0xb0, 0xb6, 0xcb, 0xd7, 0xd4, 0xc9, 0xd0, 0x36, 0x65, 0x74, 0x80, 0x4c, 0x04, 0xc0, 0x7a, 0xce, 0x02, 0xc8, - 0x77, 0xbc, 0x7b, 0xc8, 0x1a, 0xb4, 0x86, 0xdf, 0x2b, 0xd7, 0xf4, 0x05, 0x15, 0xd5, 0x60, 0x64, 0xc3, 0xbe, 0x55, - 0xb4, 0x5d, 0x35, 0xc9, 0xfe, 0x75, 0xd9, 0xb2, 0xd9, 0x42, 0xea, 0x7a, 0xc1, 0x87, 0x35, 0x0c, 0x71, 0xa5, 0xdc, - 0xc1, 0xfd, 0x8a, 0x92, 0x18, 0xa2, 0xca, 0x99, 0x53, 0x88, 0x13, 0xaf, 0x47, 0x86, 0x24, 0xde, 0x68, 0xac, 0x51, - 0x1c, 0x9c, 0xb7, 0x4f, 0x43, 0xaa, 0xba, 0x15, 0x6a, 0x8e, 0x90, 0x68, 0x21, 0xac, 0x31, 0xe2, 0x28, 0x0a, 0x58, - 0x10, 0xa7, 0xdd, 0xad, 0x1d, 0x10, 0x07, 0x07, 0x9b, 0xe7, 0x85, 0x0f, 0xfa, 0xbf, 0x15, 0xe8, 0xbf, 0xb2, 0x64, - 0xf3, 0x4f, 0x11, 0x59, 0x1b, 0x57, 0x1e, 0x20, 0x8a, 0x0f, 0xfa, 0x74, 0xdf, 0x50, 0xf8, 0x7e, 0x15, 0xf1, 0xce, - 0xe5, 0x34, 0xcf, 0x4c, 0x86, 0xe9, 0x6b, 0x10, 0x8c, 0xed, 0x4d, 0x38, 0xa1, 0xd2, 0x4a, 0xef, 0x5f, 0x76, 0x1c, - 0x74, 0xe2, 0x9e, 0x4a, 0x09, 0x1b, 0xfd, 0x3b, 0xb4, 0x89, 0xad, 0x60, 0xe3, 0xbc, 0xa1, 0x57, 0xab, 0xda, 0xc3, - 0x38, 0xf6, 0xf9, 0x15, 0x74, 0x70, 0xc0, 0xd5, 0x33, 0x30, 0xe3, 0x65, 0x71, 0x23, 0x3c, 0x7c, 0xff, 0xa9, 0x9d, - 0xd6, 0x7f, 0x9b, 0x73, 0x35, 0x0d, 0x0e, 0xba, 0x87, 0xb5, 0xfc, 0x9d, 0x2b, 0xd1, 0xd3, 0x29, 0x77, 0x6b, 0xfd, - 0x77, 0x65, 0x24, 0xbd, 0xf5, 0x44, 0xd3, 0xc1, 0x01, 0xaf, 0x02, 0x25, 0x45, 0x3f, 0x44, 0xa8, 0x67, 0x64, 0x90, - 0x67, 0xb9, 0xa4, 0x70, 0x23, 0x0a, 0x57, 0x0c, 0x69, 0x83, 0x1f, 0x69, 0xfc, 0x87, 0xfc, 0xff, 0xd4, 0xc8, 0xa1, - 0x4e, 0x1b, 0x3c, 0x10, 0xc0, 0x42, 0x56, 0xa8, 0x0a, 0x51, 0x68, 0x20, 0x1d, 0xda, 0x3c, 0xa3, 0xf2, 0x30, 0xa7, - 0xf3, 0x79, 0x7e, 0x67, 0x5e, 0xa9, 0x0a, 0x38, 0xaa, 0xea, 0xa2, 0xc9, 0xc5, 0x87, 0xc3, 0x05, 0xf0, 0xf4, 0x80, - 0x7b, 0xc8, 0xf8, 0x77, 0x96, 0x97, 0xdb, 0x02, 0x81, 0x64, 0xa6, 0x88, 0x6c, 0xb6, 0xbb, 0xea, 0x12, 0xe4, 0xb2, - 0x66, 0x13, 0x69, 0x17, 0x36, 0x1b, 0x73, 0x90, 0xc9, 0x94, 0xf5, 0xe1, 0xdc, 0xb3, 0x05, 0x41, 0x72, 0x93, 0x46, - 0x64, 0xdb, 0x5d, 0x8a, 0x8f, 0x63, 0x40, 0x23, 0x64, 0x05, 0xbe, 0x50, 0x58, 0xe4, 0xc0, 0x75, 0x16, 0xbe, 0xe3, - 0x6f, 0xb4, 0x54, 0xf4, 0xd5, 0x60, 0x80, 0x0b, 0xf3, 0x30, 0x43, 0x39, 0x9f, 0x42, 0x05, 0x0f, 0xfd, 0x04, 0x22, - 0x0a, 0x5f, 0xad, 0xf6, 0xe1, 0x1d, 0x1d, 0xd7, 0x26, 0x38, 0x7d, 0xba, 0x9f, 0xd5, 0x9b, 0x19, 0x30, 0x0e, 0x46, - 0x5a, 0xe6, 0xa2, 0xd0, 0xc9, 0x9b, 0xec, 0x42, 0x74, 0x1b, 0x0d, 0x66, 0x42, 0x1c, 0x11, 0x88, 0x67, 0x06, 0x1e, - 0x79, 0xf0, 0xc7, 0x46, 0x2d, 0x52, 0xcc, 0xc6, 0x7e, 0x83, 0xa0, 0xd4, 0xb5, 0x84, 0xd5, 0x4a, 0xd9, 0xd8, 0x22, - 0x26, 0xc7, 0x46, 0x19, 0x29, 0xfb, 0x29, 0x83, 0x98, 0x56, 0x66, 0x1c, 0xdc, 0x6d, 0xf5, 0xb7, 0xd5, 0x7e, 0xde, - 0xe3, 0xf6, 0x1a, 0x8f, 0x1b, 0x8f, 0x7d, 0x03, 0xa8, 0xe5, 0xc6, 0x06, 0xb7, 0x16, 0xe6, 0xb1, 0x35, 0x87, 0x65, - 0x9b, 0x10, 0x14, 0xa5, 0x87, 0xba, 0xbd, 0xb9, 0xf5, 0x11, 0xfb, 0x94, 0x99, 0x93, 0x42, 0xba, 0x0f, 0x72, 0xf4, - 0x80, 0x40, 0xe7, 0xf6, 0x67, 0x45, 0x17, 0x2a, 0x99, 0xb8, 0x1c, 0xe3, 0x2f, 0xc1, 0x6d, 0x5e, 0x3f, 0xba, 0xbe, - 0x36, 0x9b, 0xfc, 0xfa, 0x3a, 0xc2, 0xa1, 0x59, 0x77, 0x14, 0xf0, 0x82, 0xd1, 0xa0, 0x0c, 0xea, 0x64, 0x36, 0x7e, - 0xb3, 0x5d, 0x35, 0xf6, 0x9e, 0x56, 0x78, 0x07, 0xcb, 0x63, 0x1a, 0xdf, 0x72, 0x83, 0xec, 0x73, 0x80, 0x37, 0xeb, - 0xf3, 0x41, 0xf7, 0x4d, 0xac, 0xd0, 0xc1, 0xc1, 0x9b, 0x58, 0xa2, 0xde, 0x15, 0x33, 0x77, 0x6e, 0xe0, 0x07, 0xdd, - 0xe7, 0x66, 0xf8, 0x32, 0x40, 0x80, 0x2b, 0xb6, 0x29, 0xd9, 0xbc, 0x35, 0x51, 0x27, 0x52, 0x88, 0x6a, 0x0d, 0xb1, - 0x75, 0x1d, 0x48, 0xa0, 0xd7, 0x37, 0x21, 0xb4, 0xbb, 0x8c, 0x30, 0x60, 0xe1, 0x4b, 0x2f, 0x35, 0x96, 0xcc, 0x58, - 0x31, 0x61, 0xc5, 0x6a, 0xf5, 0x9e, 0x5a, 0xcf, 0xb3, 0x8d, 0x20, 0x89, 0xaa, 0xdb, 0x68, 0x50, 0x33, 0x7e, 0x10, - 0x1f, 0xe8, 0x00, 0xef, 0xbf, 0x89, 0x0b, 0x84, 0xc0, 0xc2, 0x88, 0x8b, 0x85, 0xf7, 0xb2, 0xca, 0x6a, 0xeb, 0x52, - 0xa0, 0xb2, 0x91, 0x9c, 0xb4, 0xf0, 0x94, 0x64, 0xe5, 0x1a, 0x5d, 0x4c, 0xbb, 0x8d, 0x46, 0x8e, 0x64, 0x9c, 0xf5, - 0xf3, 0x01, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0x72, 0xf3, 0x5d, 0xda, 0xb1, 0xa6, - 0x8f, 0xe8, 0x3a, 0x00, 0xc6, 0x23, 0x1a, 0x10, 0x89, 0x5d, 0x40, 0x16, 0x16, 0xc8, 0xca, 0x03, 0x59, 0x18, 0x20, - 0x2b, 0xd4, 0x9b, 0x43, 0xb8, 0x20, 0x85, 0xd2, 0x2d, 0x8a, 0x5e, 0x0f, 0x6c, 0xe9, 0x9c, 0x26, 0x30, 0x37, 0xb1, - 0x15, 0xdc, 0x72, 0x80, 0x03, 0x85, 0xf3, 0xc3, 0x53, 0x64, 0x19, 0x45, 0x26, 0xc6, 0x2b, 0xbe, 0x35, 0x7f, 0x92, - 0x5b, 0x7c, 0x67, 0x7f, 0xdc, 0x05, 0xca, 0xa4, 0xe7, 0x35, 0x6d, 0x03, 0x77, 0x11, 0xd1, 0xa2, 0x24, 0x02, 0xb4, - 0x76, 0xe1, 0xfd, 0x44, 0xfd, 0xc5, 0x33, 0x65, 0x03, 0x31, 0x88, 0x06, 0x51, 0x58, 0x04, 0xa4, 0xf3, 0xcf, 0x3f, - 0x23, 0xd4, 0x13, 0x10, 0x47, 0xc7, 0x9d, 0x6c, 0xcd, 0x36, 0x6a, 0x44, 0x49, 0x94, 0xc6, 0x3e, 0x4c, 0x03, 0xec, - 0x8c, 0x28, 0x0a, 0x5e, 0x3b, 0x29, 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x33, 0xa8, 0x2a, 0xf0, 0xc4, 0xe5, 0x72, 0x33, - 0xcc, 0x8f, 0x81, 0xaa, 0x30, 0x31, 0x56, 0x90, 0x7d, 0x02, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0xfa, 0x62, 0x10, 0xbc, - 0xe9, 0x55, 0x5d, 0x87, 0xeb, 0x70, 0xe1, 0x62, 0x0a, 0x71, 0xd6, 0x57, 0x2b, 0xfb, 0x97, 0x7c, 0x30, 0xd2, 0x0c, - 0x3c, 0xce, 0x16, 0x9c, 0xb1, 0x62, 0xb7, 0x2c, 0x96, 0x68, 0xf9, 0x3b, 0x98, 0xed, 0xb9, 0xa8, 0x79, 0xdc, 0x4d, - 0xb5, 0xed, 0xa1, 0x3e, 0x37, 0x1a, 0x85, 0x20, 0x66, 0x6d, 0x75, 0xa4, 0xe1, 0xb9, 0x0e, 0xf3, 0x6a, 0xb1, 0x67, - 0x33, 0x55, 0x86, 0x10, 0x85, 0x23, 0x25, 0x01, 0xbb, 0x6d, 0x43, 0x27, 0xe1, 0x47, 0x9d, 0x4a, 0x3a, 0x16, 0x12, - 0xa0, 0xc0, 0x91, 0xb9, 0x9c, 0x37, 0x21, 0xe2, 0x19, 0xda, 0x41, 0xe4, 0x02, 0x13, 0x9a, 0xba, 0x6c, 0xe9, 0x62, - 0x39, 0x45, 0x33, 0xb9, 0x50, 0x6c, 0x31, 0x87, 0xf3, 0xbd, 0x4c, 0xcb, 0x72, 0x9e, 0x7d, 0xae, 0xa7, 0x80, 0xfd, - 0xe5, 0xad, 0x9e, 0x31, 0xb1, 0x88, 0xdc, 0x3c, 0xbf, 0x5a, 0x71, 0xff, 0xcd, 0x0b, 0xfc, 0x88, 0x74, 0x0e, 0xbf, - 0xe2, 0x8f, 0x94, 0x3c, 0x6a, 0x7c, 0xc5, 0x13, 0x4e, 0x2c, 0x6f, 0x90, 0xbc, 0x79, 0x7d, 0xf5, 0xe2, 0xdd, 0x8b, - 0xf7, 0x4f, 0xaf, 0x5f, 0xbc, 0x7a, 0xf6, 0xe2, 0xd5, 0x8b, 0x77, 0x1f, 0xf1, 0x3f, 0x94, 0x7c, 0x3d, 0x6a, 0x9f, - 0xb7, 0xf0, 0x07, 0xf2, 0xf5, 0xa8, 0x83, 0x6f, 0x35, 0xf9, 0x7a, 0x74, 0x82, 0x73, 0x45, 0xbe, 0x1e, 0x76, 0x8e, - 0x8e, 0xf1, 0x42, 0xdb, 0x26, 0x73, 0x39, 0x69, 0xb7, 0xf0, 0x3f, 0xee, 0x0b, 0xc4, 0xfb, 0x6a, 0x16, 0x13, 0xb6, - 0x61, 0xfc, 0x60, 0xca, 0xd0, 0xa1, 0x32, 0x86, 0x28, 0x17, 0x01, 0x3a, 0x4d, 0x55, 0x88, 0x4e, 0x36, 0x88, 0x31, - 0xd8, 0x30, 0x02, 0x5a, 0x71, 0xe2, 0xda, 0xe1, 0x47, 0x6d, 0x76, 0x0c, 0xf4, 0x89, 0x97, 0xc2, 0x71, 0xa9, 0xc2, - 0x69, 0x3b, 0x2d, 0xc6, 0x38, 0x97, 0xb2, 0x88, 0x17, 0xc0, 0x08, 0x18, 0xad, 0x05, 0x3f, 0x2a, 0xa3, 0x25, 0x89, - 0x0b, 0xd2, 0xee, 0xb5, 0x53, 0x71, 0x41, 0x3a, 0xbd, 0x0e, 0xfc, 0x39, 0xed, 0x9d, 0xa6, 0xed, 0x16, 0x3a, 0x0c, - 0xc6, 0xf1, 0x47, 0x0d, 0xad, 0xfb, 0x03, 0xec, 0xba, 0x50, 0xff, 0x14, 0xda, 0xab, 0xf4, 0x84, 0x53, 0xc7, 0xb6, - 0xbb, 0xe2, 0x82, 0x19, 0x3d, 0x2c, 0xff, 0x01, 0x50, 0xdb, 0x38, 0x74, 0x94, 0x1b, 0xc7, 0xfd, 0xe2, 0x47, 0x02, - 0xd5, 0x42, 0xb2, 0xc4, 0x6c, 0xd5, 0x42, 0xc0, 0x34, 0x9a, 0x6c, 0x30, 0x07, 0x4a, 0x94, 0x2c, 0xb4, 0x0f, 0x2b, - 0xaf, 0x9a, 0x12, 0x25, 0x73, 0x39, 0x8f, 0x6b, 0xaa, 0x86, 0x5f, 0x03, 0x33, 0xc7, 0x7d, 0xae, 0x5e, 0xd1, 0x57, - 0x71, 0x8d, 0xe7, 0x09, 0x59, 0xbb, 0x70, 0x5b, 0xfc, 0xe2, 0xac, 0x28, 0x6a, 0xe0, 0x2a, 0x01, 0xeb, 0x47, 0xd5, - 0xd4, 0x17, 0xf0, 0x7e, 0x1e, 0x6b, 0xe8, 0x4b, 0x12, 0x50, 0xcf, 0x9f, 0x4a, 0x33, 0xae, 0x52, 0x19, 0xed, 0x15, - 0xd1, 0xc6, 0x2c, 0xc8, 0x2b, 0xa2, 0x2f, 0x94, 0x01, 0x82, 0x24, 0xbc, 0x2f, 0x06, 0x70, 0xe0, 0xdb, 0x01, 0x4a, - 0x43, 0xe7, 0x40, 0xad, 0x54, 0x99, 0x09, 0x99, 0x4f, 0x13, 0x1c, 0x00, 0x34, 0x4f, 0x95, 0x0a, 0xca, 0x7c, 0x62, - 0x89, 0x82, 0xa1, 0xff, 0x16, 0x6e, 0x80, 0xc3, 0xd8, 0xa0, 0x62, 0x90, 0x7d, 0x4f, 0xd4, 0xf3, 0xdb, 0xe7, 0xad, - 0xa3, 0xaf, 0x41, 0xfe, 0x48, 0x79, 0x7b, 0x8f, 0xbf, 0x03, 0x4a, 0x6e, 0xc3, 0x59, 0xb5, 0xb1, 0x8f, 0x44, 0xd6, - 0x0d, 0x01, 0x72, 0xa8, 0xd1, 0x91, 0x79, 0x4a, 0xb0, 0x8b, 0xf4, 0x21, 0x69, 0xb7, 0x20, 0x7c, 0xd8, 0x0e, 0xca, - 0xf7, 0xd3, 0x06, 0x4c, 0x75, 0x72, 0xdb, 0x04, 0x5a, 0x0d, 0xaf, 0x0b, 0xdd, 0x35, 0x79, 0x72, 0x87, 0x55, 0x80, - 0x33, 0xec, 0x90, 0x35, 0xc4, 0xa1, 0x40, 0x2e, 0xec, 0xaa, 0xdd, 0x00, 0x9a, 0x8a, 0x8e, 0x7d, 0xe5, 0xce, 0x1b, - 0x47, 0x5d, 0x34, 0x93, 0xd3, 0xc3, 0xaf, 0x07, 0x07, 0xb1, 0x6c, 0x90, 0x47, 0x08, 0x2f, 0x29, 0x58, 0x31, 0x83, - 0xd7, 0x17, 0xb7, 0x4c, 0x7c, 0xaa, 0x02, 0xea, 0xb8, 0x50, 0xb5, 0x63, 0xad, 0xea, 0xac, 0xdc, 0x0d, 0x7e, 0x4c, - 0x1d, 0xd4, 0x08, 0xd2, 0xec, 0xe8, 0x3a, 0x35, 0x28, 0xd7, 0x5c, 0xb4, 0x60, 0x5b, 0x36, 0x3e, 0x52, 0xf4, 0xc3, - 0xa3, 0xe6, 0xd7, 0x60, 0xc2, 0x35, 0xd3, 0xa4, 0x47, 0x8d, 0x47, 0xe8, 0x87, 0x47, 0x81, 0x93, 0x1d, 0xaf, 0xd8, - 0x13, 0xcf, 0x8d, 0xfc, 0x64, 0xb9, 0xd2, 0x9f, 0x40, 0xb2, 0x2f, 0xc8, 0x4f, 0x80, 0xe5, 0x94, 0xfc, 0x14, 0xcb, - 0x26, 0x04, 0x1f, 0x24, 0x3f, 0xc5, 0x05, 0xfc, 0xc8, 0xc9, 0x4f, 0x31, 0x60, 0x3b, 0x9e, 0x9a, 0x1f, 0x45, 0x09, - 0x0c, 0x70, 0xec, 0x92, 0xd6, 0xbf, 0xab, 0x58, 0xad, 0xc4, 0xc1, 0x81, 0xb4, 0xbf, 0xe8, 0x65, 0x76, 0x70, 0x90, - 0x5f, 0x4c, 0xab, 0xbe, 0x99, 0xde, 0x45, 0x5f, 0x0c, 0x42, 0xe1, 0xc0, 0x34, 0x8d, 0x87, 0x33, 0xfe, 0x14, 0x52, - 0x56, 0xd3, 0x40, 0xf3, 0xb8, 0x73, 0xff, 0xec, 0x1c, 0xc3, 0xbf, 0xf7, 0x83, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, - 0xb3, 0xe6, 0x59, 0x85, 0x6c, 0x97, 0x01, 0x3e, 0x63, 0x86, 0x9a, 0xe2, 0xe0, 0x80, 0x5f, 0x04, 0xb8, 0x8c, 0x19, - 0x6a, 0x04, 0x16, 0x7b, 0x0f, 0x4b, 0x7b, 0x32, 0xc3, 0x35, 0xc1, 0xb3, 0xb2, 0xbc, 0x5f, 0x0c, 0x2e, 0xb4, 0xa3, - 0x26, 0x61, 0xf0, 0x69, 0x45, 0x5a, 0x6e, 0x93, 0x75, 0x45, 0x53, 0x5d, 0xb6, 0xbb, 0x48, 0x12, 0xd5, 0x10, 0x97, - 0x97, 0x6d, 0x0c, 0x2a, 0xf9, 0x9e, 0x22, 0x32, 0x15, 0xc4, 0x3b, 0xc8, 0x2d, 0x73, 0x99, 0x2a, 0x3c, 0xe5, 0xa9, - 0xf0, 0x72, 0xf6, 0x6b, 0x6f, 0x3d, 0x6d, 0x5c, 0x16, 0x4d, 0xcf, 0x0c, 0x8b, 0x9e, 0x2a, 0x5d, 0xed, 0x60, 0x93, - 0xaa, 0x01, 0xbc, 0xda, 0x57, 0x62, 0x1e, 0xb3, 0xfe, 0x65, 0x0c, 0xa2, 0x22, 0xab, 0x46, 0x1b, 0x32, 0xe1, 0x73, - 0x9d, 0x2a, 0x18, 0xa8, 0x29, 0x7c, 0x01, 0x64, 0x2a, 0xab, 0x0c, 0xb3, 0x7d, 0xc3, 0x50, 0x40, 0x40, 0x81, 0x4b, - 0xc2, 0x02, 0x09, 0x1e, 0x6e, 0x3f, 0x02, 0xc2, 0x51, 0x27, 0x17, 0x76, 0x72, 0x17, 0x0a, 0xba, 0x13, 0x83, 0x0b, - 0xdd, 0x45, 0xa2, 0xd1, 0x70, 0xdc, 0xf6, 0xa5, 0x30, 0x83, 0x68, 0xb6, 0x07, 0x97, 0xac, 0x8b, 0x54, 0xb3, 0x59, - 0x1a, 0x40, 0x5e, 0xb6, 0x56, 0x2b, 0x75, 0xe1, 0x1b, 0xe9, 0xf9, 0x73, 0xdc, 0xf0, 0x5d, 0x5e, 0xf0, 0xfc, 0x4d, - 0x92, 0x7e, 0x04, 0x54, 0x15, 0xf8, 0x6c, 0x39, 0x8f, 0x70, 0x64, 0x1e, 0x74, 0x83, 0xbf, 0xe6, 0x21, 0xae, 0x08, - 0x47, 0xee, 0x8d, 0xb7, 0x68, 0x50, 0x0d, 0x96, 0x67, 0x65, 0x78, 0x72, 0x9e, 0x5c, 0x03, 0xe3, 0xa0, 0xff, 0x56, - 0x68, 0x59, 0xfd, 0x4e, 0x72, 0x17, 0xa8, 0x43, 0xf9, 0x67, 0xc7, 0xdc, 0xa8, 0xd6, 0xbb, 0x5d, 0x23, 0x39, 0x8e, - 0x7c, 0x55, 0x08, 0xdf, 0xff, 0x9d, 0x77, 0x0f, 0xdb, 0xee, 0xb9, 0xed, 0x65, 0xd9, 0x03, 0x70, 0xde, 0xeb, 0x35, - 0xc2, 0xbf, 0xc9, 0x9d, 0x6f, 0xef, 0x46, 0xd7, 0x52, 0x3c, 0xa1, 0x9a, 0x46, 0x8d, 0x37, 0xc6, 0xf0, 0xcd, 0xca, - 0x59, 0xdd, 0x6f, 0x8d, 0x83, 0xfd, 0x5b, 0xdd, 0x43, 0xe8, 0x84, 0xda, 0x33, 0x41, 0x56, 0xf6, 0x35, 0x01, 0x33, - 0x64, 0x60, 0xfa, 0xb6, 0x03, 0x1e, 0x7e, 0x8c, 0x14, 0x1c, 0x7a, 0x2d, 0x9f, 0x44, 0x21, 0x26, 0x69, 0xcd, 0x8d, - 0x18, 0x52, 0x6c, 0x1f, 0xc6, 0xe5, 0x74, 0x8d, 0x42, 0xae, 0x7b, 0xac, 0xea, 0xc4, 0xb4, 0xea, 0xc6, 0x48, 0x1d, - 0x6c, 0x93, 0x05, 0x67, 0x55, 0xef, 0x46, 0x42, 0xa9, 0x5e, 0x54, 0x33, 0xaf, 0x62, 0x36, 0xdb, 0xe6, 0x99, 0x61, - 0xfb, 0xee, 0x9a, 0x02, 0x43, 0xde, 0xfd, 0x32, 0x5c, 0xd4, 0x25, 0x1c, 0xbb, 0x71, 0x00, 0x59, 0x49, 0x2e, 0x97, - 0xee, 0x4d, 0x34, 0xde, 0x97, 0x83, 0x75, 0xf9, 0x42, 0x5a, 0x80, 0x07, 0xd5, 0x48, 0x45, 0x16, 0x72, 0x06, 0xfe, - 0x79, 0xc1, 0x9a, 0x7e, 0x88, 0x7f, 0x85, 0x03, 0xbe, 0x42, 0xd2, 0xd4, 0xaa, 0x9f, 0xe0, 0xe5, 0x22, 0x50, 0x78, - 0xdb, 0xba, 0x9f, 0x64, 0xe8, 0x22, 0x5a, 0xd7, 0xa9, 0x58, 0x2f, 0xcc, 0xba, 0x62, 0xa5, 0x2c, 0x1c, 0x1c, 0x77, - 0x31, 0x5a, 0xa7, 0xce, 0x63, 0xd3, 0x3d, 0x77, 0xf4, 0x50, 0xf0, 0x99, 0x71, 0xa4, 0x7b, 0x56, 0x40, 0xfc, 0xaa, - 0x50, 0x9f, 0xf6, 0xb3, 0x0c, 0xdf, 0xf3, 0xed, 0xc3, 0x3d, 0x61, 0xc9, 0x73, 0x96, 0x6f, 0x50, 0xc3, 0x02, 0x29, - 0xa0, 0x50, 0x0a, 0x8b, 0xd5, 0x2a, 0x16, 0x26, 0xaa, 0x81, 0x0b, 0x6a, 0xeb, 0x5e, 0xaf, 0x30, 0xfa, 0x3b, 0xa8, - 0x8b, 0xbd, 0x7a, 0xc4, 0x98, 0xb0, 0xa2, 0xf0, 0xd2, 0x49, 0x65, 0x41, 0x5f, 0xbb, 0xfa, 0x10, 0xd5, 0x94, 0x7b, - 0xb1, 0xd1, 0xf7, 0xbe, 0xe3, 0x33, 0x26, 0x17, 0xf0, 0x6c, 0x10, 0x66, 0x44, 0x31, 0xed, 0xbf, 0x81, 0x82, 0xc0, - 0xdb, 0x33, 0x3c, 0xc4, 0x47, 0xe0, 0xab, 0x3c, 0xad, 0x93, 0x99, 0x7f, 0x8c, 0x22, 0x32, 0xc1, 0x22, 0xa3, 0x5e, - 0x04, 0x5e, 0x43, 0x20, 0x42, 0x11, 0x12, 0x31, 0x31, 0x8a, 0x7a, 0x91, 0x71, 0x52, 0x8a, 0xc0, 0x6a, 0x0c, 0x94, - 0xdc, 0x11, 0x9e, 0xab, 0x8a, 0x88, 0x85, 0x35, 0x75, 0x50, 0x89, 0xa5, 0xc6, 0x4c, 0xfb, 0xa8, 0x53, 0x81, 0xb0, - 0xc8, 0x36, 0x05, 0x65, 0xbd, 0xa1, 0x2e, 0xc0, 0x92, 0x18, 0xd3, 0x5b, 0x9e, 0x5c, 0x03, 0x37, 0xc7, 0x46, 0xae, - 0xe8, 0x92, 0x5f, 0x81, 0x7a, 0x3a, 0x2d, 0xf0, 0xb5, 0x61, 0xd8, 0x46, 0x29, 0x5d, 0x13, 0x8e, 0x33, 0x52, 0x24, - 0xf4, 0x16, 0xa2, 0x3a, 0xcc, 0xb8, 0x48, 0x73, 0x3c, 0xa3, 0xb7, 0xe9, 0x14, 0xcf, 0xb8, 0x78, 0x62, 0x97, 0x3d, - 0x1d, 0x41, 0x92, 0xff, 0x58, 0xac, 0x89, 0x79, 0x94, 0xea, 0x77, 0xc5, 0x8a, 0x47, 0xc0, 0xab, 0xa8, 0x18, 0x75, - 0x47, 0xc6, 0xa6, 0x9c, 0xe9, 0xca, 0x78, 0xfd, 0xb5, 0x8e, 0x29, 0xce, 0x70, 0x8e, 0x92, 0x5c, 0x62, 0xd6, 0x13, - 0xe9, 0x6b, 0x88, 0xe8, 0x9c, 0x61, 0xfb, 0xa0, 0x15, 0xbf, 0x65, 0xf9, 0x33, 0x59, 0xbc, 0x37, 0x5b, 0x3e, 0x47, - 0x50, 0x08, 0x5c, 0x54, 0x44, 0x13, 0x6e, 0xf7, 0x16, 0x3d, 0x59, 0x35, 0x45, 0x6f, 0x6d, 0x53, 0x6e, 0x88, 0x53, - 0x08, 0x85, 0x9b, 0x4c, 0x79, 0xa3, 0x8d, 0x59, 0xaf, 0xf5, 0x9d, 0x46, 0xa7, 0xa8, 0x2c, 0x89, 0x30, 0xac, 0x55, - 0x53, 0xa5, 0x92, 0x88, 0xa6, 0x72, 0x12, 0xde, 0xd2, 0x00, 0x3b, 0x55, 0x38, 0x93, 0x0b, 0xa1, 0x53, 0x19, 0xe0, - 0x0d, 0xad, 0x36, 0xd7, 0xf2, 0xd6, 0x42, 0x4c, 0xe3, 0x3b, 0xfb, 0x83, 0xe1, 0x6b, 0xa3, 0xe2, 0x7f, 0x0b, 0x86, - 0x3d, 0x2a, 0x15, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x59, 0x7e, 0xf2, 0x16, 0xc0, 0x67, 0x59, 0xc8, 0x3b, 0x48, - 0x65, 0x26, 0xf5, 0x0e, 0x52, 0x19, 0xa4, 0x1a, 0x5f, 0xee, 0x7d, 0x51, 0x29, 0x8b, 0xc2, 0x06, 0x89, 0xc2, 0xa5, - 0x3a, 0x58, 0x12, 0x91, 0x40, 0xbb, 0x46, 0x94, 0x9b, 0x71, 0x01, 0x41, 0xfd, 0xa0, 0x71, 0xfb, 0x4d, 0x6f, 0xe1, - 0xfb, 0xce, 0xe6, 0x33, 0x9f, 0x7f, 0x67, 0xf3, 0x4d, 0x47, 0x1e, 0xe3, 0xeb, 0xb7, 0x9d, 0xc6, 0x32, 0x5e, 0x3a, - 0xac, 0xfd, 0x50, 0x3e, 0xa1, 0xd2, 0x32, 0x4f, 0x55, 0x93, 0x36, 0x9e, 0x04, 0x48, 0xd9, 0xac, 0x78, 0xb8, 0x0e, - 0x6e, 0xb7, 0x0e, 0x63, 0xde, 0x24, 0x6d, 0x84, 0x0e, 0x9d, 0x70, 0x25, 0x62, 0x23, 0x39, 0x1d, 0x3e, 0x3a, 0x82, - 0xbb, 0x97, 0x99, 0xda, 0xf0, 0x95, 0xb2, 0xd5, 0x9a, 0xed, 0xd6, 0x21, 0xdf, 0x59, 0xa5, 0xd1, 0xc6, 0x33, 0x46, - 0x96, 0xe0, 0x5c, 0x46, 0x0b, 0xab, 0x6a, 0x00, 0x27, 0xce, 0x17, 0xe2, 0xb7, 0x05, 0x1d, 0x99, 0xef, 0x43, 0x9b, - 0xf2, 0x7a, 0xa1, 0x7d, 0x52, 0x93, 0xc3, 0x20, 0x3a, 0xc8, 0x95, 0x0c, 0x72, 0x62, 0x7e, 0x44, 0x92, 0x53, 0x74, - 0xd1, 0xee, 0x25, 0xa7, 0x87, 0xfc, 0x90, 0xa7, 0xc0, 0xc3, 0xc6, 0x4d, 0x5f, 0xa1, 0xd9, 0xf6, 0x75, 0x1e, 0x2f, - 0x86, 0x3c, 0x73, 0xcd, 0x57, 0x1d, 0x94, 0xa9, 0x76, 0x8e, 0x90, 0x05, 0x28, 0xe6, 0x7b, 0x09, 0xb2, 0xeb, 0xdd, - 0x1c, 0xf2, 0x14, 0xfa, 0x81, 0x5a, 0x1d, 0x5b, 0xab, 0x1c, 0xdc, 0x6f, 0x0b, 0x40, 0x30, 0xdf, 0x51, 0x6d, 0x2e, - 0x36, 0xbd, 0x19, 0x57, 0x9d, 0x1d, 0xf2, 0x6a, 0x84, 0x61, 0x99, 0xed, 0xfe, 0xfc, 0xd4, 0xaa, 0x2e, 0x0f, 0x03, - 0x88, 0xfc, 0xb6, 0xe0, 0x22, 0xec, 0x34, 0xec, 0xd6, 0xe5, 0x84, 0x9d, 0xd6, 0x67, 0x19, 0x14, 0xd9, 0xee, 0x75, - 0x6b, 0xa6, 0xf5, 0xd9, 0x5e, 0x81, 0x8f, 0x20, 0x4c, 0xca, 0xac, 0x74, 0x06, 0x57, 0xe8, 0x87, 0x1f, 0x90, 0x6b, - 0xfd, 0xf5, 0x42, 0xfb, 0xfc, 0x12, 0x11, 0x20, 0xbb, 0xea, 0xba, 0xac, 0x0e, 0x7d, 0x94, 0x4d, 0x7c, 0x3d, 0xe4, - 0xc1, 0xca, 0x3d, 0xbd, 0x9d, 0xcb, 0xd4, 0xe3, 0x6b, 0xaf, 0x95, 0x6e, 0x21, 0x27, 0x10, 0x0f, 0xd7, 0x5d, 0x58, - 0x16, 0xe4, 0xec, 0xe6, 0x16, 0x4a, 0x86, 0x13, 0xf7, 0xa5, 0x3f, 0x30, 0x7b, 0xdd, 0xc0, 0x2f, 0x92, 0x53, 0x98, - 0xfa, 0x66, 0x0f, 0x87, 0x1d, 0xe8, 0xc3, 0xc0, 0x61, 0xb3, 0x41, 0x9f, 0x59, 0x41, 0xe4, 0x31, 0x2f, 0x2c, 0x9e, - 0x5d, 0x92, 0x76, 0x8f, 0xa7, 0x6e, 0x33, 0x19, 0xd1, 0xa8, 0xdd, 0xe4, 0xc1, 0xcc, 0x00, 0xbf, 0x5c, 0xd9, 0xb0, - 0x88, 0x5f, 0xa7, 0x00, 0x4a, 0xbe, 0x58, 0xb5, 0x3e, 0x15, 0xbc, 0xea, 0x0d, 0xa7, 0x9b, 0xe9, 0x7e, 0xdd, 0xe0, - 0x76, 0xd7, 0xc3, 0x13, 0x9e, 0x40, 0xb1, 0x68, 0xed, 0x27, 0x3e, 0x01, 0x0e, 0x28, 0x69, 0xdd, 0x3f, 0x05, 0x17, - 0xca, 0x12, 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x2c, 0x1c, 0x6d, 0xc9, 0x80, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, - 0xd8, 0xc1, 0x49, 0xbb, 0xdd, 0x39, 0xc5, 0xc9, 0xc9, 0x29, 0x0c, 0xb4, 0x91, 0x9c, 0x1e, 0xce, 0x94, 0x05, 0x60, - 0x90, 0xb3, 0x76, 0xed, 0x3e, 0x82, 0x70, 0x49, 0xa1, 0x78, 0xcd, 0x0f, 0xe3, 0xb8, 0x9d, 0xdc, 0x6f, 0xb5, 0x4f, - 0xcf, 0x1b, 0x00, 0xa0, 0xa6, 0xfb, 0x70, 0x35, 0x5e, 0x2f, 0x74, 0xbd, 0x4a, 0x89, 0xf0, 0xf5, 0x6a, 0x0d, 0x5f, - 0xad, 0xd1, 0x5e, 0x57, 0x53, 0xf0, 0x55, 0x9d, 0x70, 0x6e, 0x8b, 0x78, 0xa5, 0x4d, 0xb8, 0x2d, 0x62, 0x3b, 0x90, - 0x18, 0xa4, 0xf3, 0xe4, 0xb4, 0x73, 0x8a, 0xec, 0x58, 0xb4, 0xc3, 0x8f, 0x72, 0x9f, 0x6c, 0x15, 0x69, 0x68, 0x40, - 0x92, 0x72, 0x76, 0x72, 0x01, 0x12, 0x35, 0x27, 0x97, 0xed, 0xe6, 0x8c, 0x25, 0x7e, 0x02, 0x26, 0x15, 0x96, 0xb3, - 0x5c, 0x05, 0x97, 0x14, 0x00, 0xe2, 0x02, 0x8c, 0x8b, 0xee, 0x9f, 0xf6, 0xee, 0x27, 0xa7, 0x67, 0x1d, 0x4b, 0xf4, - 0xf8, 0x45, 0xa7, 0x96, 0x66, 0xa6, 0x9e, 0x9c, 0x9a, 0x34, 0xe8, 0x3a, 0xb9, 0x7f, 0x0a, 0x65, 0x5c, 0x4a, 0x58, - 0x0a, 0xc2, 0x3c, 0x54, 0xc5, 0x20, 0xb6, 0x43, 0x5a, 0xcb, 0x3d, 0xab, 0x65, 0x9f, 0x9f, 0x1c, 0xdf, 0x3f, 0x0d, - 0xa1, 0x56, 0xce, 0xc2, 0x2c, 0xb4, 0x9b, 0x88, 0x9f, 0x1d, 0x2c, 0x2d, 0x3a, 0x4c, 0x4e, 0xd3, 0xad, 0x09, 0xda, - 0x4d, 0x73, 0x68, 0x70, 0x20, 0x50, 0x38, 0x3e, 0x15, 0x4e, 0x5f, 0x12, 0xdc, 0x8f, 0x55, 0x86, 0x26, 0xa1, 0xc2, - 0xd9, 0xdf, 0x53, 0x06, 0x2f, 0x39, 0x86, 0x57, 0x95, 0x8f, 0xa9, 0xf8, 0x42, 0xd5, 0x1b, 0x0a, 0xb1, 0x2b, 0xc4, - 0x20, 0x72, 0x91, 0xb5, 0xeb, 0xb9, 0x3f, 0x81, 0x8b, 0x30, 0x13, 0x70, 0xa1, 0xe9, 0x95, 0xa0, 0x15, 0x2f, 0x30, - 0x0c, 0x1d, 0x6a, 0xcd, 0xb0, 0x7a, 0x3c, 0x75, 0x26, 0x05, 0xa1, 0x6e, 0xeb, 0x39, 0xff, 0x5e, 0xb9, 0xa4, 0xbc, - 0xca, 0x4e, 0x4e, 0x51, 0xe2, 0x2e, 0xcb, 0x93, 0x36, 0x4a, 0x02, 0x13, 0x12, 0x77, 0x24, 0x67, 0x19, 0xe9, 0x47, - 0xb7, 0x11, 0x8e, 0xee, 0x22, 0x1c, 0x59, 0x1f, 0xe6, 0x0f, 0xe0, 0x3c, 0x1f, 0xe1, 0xc8, 0xba, 0x32, 0x47, 0x38, - 0xd2, 0x4c, 0x40, 0x48, 0xab, 0x68, 0x80, 0x73, 0x28, 0x6d, 0x3c, 0xab, 0xcb, 0xd2, 0x8f, 0xfd, 0x57, 0xe9, 0x7a, - 0x6d, 0x53, 0x02, 0x29, 0x73, 0x6a, 0x76, 0xa8, 0x7d, 0x92, 0x39, 0xa2, 0x9e, 0x59, 0x8f, 0x30, 0x08, 0x20, 0xf4, - 0xce, 0x3f, 0xe9, 0x56, 0x45, 0xc3, 0x60, 0xc7, 0xb0, 0xd2, 0xe0, 0x67, 0x1e, 0x85, 0x67, 0x58, 0x84, 0xc7, 0xc2, - 0x17, 0x06, 0xb1, 0xc2, 0xff, 0xce, 0xa5, 0x9c, 0xfb, 0xdf, 0x5a, 0x96, 0xbf, 0xe0, 0x21, 0x10, 0x67, 0xd1, 0x02, - 0x96, 0x5b, 0x36, 0xf8, 0xce, 0x90, 0xd5, 0x47, 0x70, 0x3d, 0x76, 0x01, 0xd2, 0x40, 0x22, 0xbc, 0x36, 0x02, 0x95, - 0x97, 0x0f, 0xaf, 0x6d, 0xb0, 0x1e, 0xf3, 0x09, 0xd1, 0xba, 0x20, 0x20, 0xaf, 0x84, 0x0b, 0x8d, 0x49, 0xc1, 0x94, - 0x8a, 0x6c, 0x14, 0xbb, 0x48, 0x0a, 0xff, 0x2c, 0xa1, 0x4f, 0x19, 0x8b, 0xc8, 0x74, 0x58, 0x9f, 0xad, 0x15, 0x87, - 0x73, 0x59, 0xa8, 0xd4, 0xbe, 0x51, 0xe2, 0xc1, 0x58, 0x3d, 0x55, 0x9f, 0xe6, 0xd9, 0x1a, 0xdb, 0x3b, 0xec, 0xb2, - 0x90, 0xbb, 0xd2, 0x0e, 0x4b, 0x65, 0xd9, 0xfa, 0x5b, 0x13, 0x52, 0xb5, 0x19, 0x05, 0x13, 0xad, 0x06, 0x54, 0x85, - 0xb2, 0x80, 0xc2, 0x36, 0x1c, 0x4a, 0xba, 0x2c, 0x4b, 0xa6, 0xcb, 0x72, 0x19, 0x4e, 0x5a, 0xad, 0xf5, 0x1a, 0x17, - 0xcc, 0x84, 0x65, 0xd9, 0x59, 0x02, 0xf2, 0xd5, 0x54, 0xde, 0x04, 0xb9, 0x2a, 0x2d, 0x67, 0x69, 0x96, 0x28, 0x0a, - 0x8c, 0x60, 0xa3, 0x35, 0xfe, 0xc2, 0x15, 0x07, 0x78, 0xba, 0xd9, 0x0d, 0xa5, 0xcc, 0x19, 0x85, 0xe8, 0x5d, 0x41, - 0x93, 0x6b, 0x3c, 0xe5, 0x23, 0xb6, 0xbb, 0x4d, 0x30, 0x63, 0xfe, 0xf7, 0x5a, 0xf4, 0x08, 0x64, 0xd9, 0x3d, 0x83, - 0x3a, 0xb0, 0x88, 0x2b, 0xe8, 0x20, 0x94, 0xc1, 0x47, 0x21, 0x6e, 0xe6, 0xf4, 0x4e, 0x2e, 0x34, 0xc0, 0x65, 0xa1, - 0xe5, 0x1b, 0x17, 0xeb, 0x60, 0xbf, 0x85, 0x7d, 0xd8, 0x83, 0x25, 0x84, 0x0c, 0x68, 0x61, 0x1b, 0x23, 0xa2, 0x85, - 0x87, 0x52, 0x6b, 0x39, 0x4b, 0x5b, 0xd8, 0x04, 0x6c, 0x68, 0xad, 0xcb, 0xa8, 0x5a, 0xd7, 0xe5, 0x63, 0x8e, 0xd5, - 0x26, 0x58, 0x38, 0xe9, 0x50, 0x13, 0x1d, 0xdc, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbd, 0x7e, 0xe5, 0x62, 0x26, - 0xf3, 0x31, 0xb8, 0x6c, 0x3a, 0xd5, 0xd8, 0xb5, 0x79, 0x05, 0x29, 0xae, 0x14, 0xa5, 0x56, 0x38, 0x85, 0x96, 0x5f, - 0x08, 0x9d, 0x27, 0xf6, 0xf2, 0xe2, 0x99, 0x2c, 0x66, 0xd4, 0xde, 0x18, 0xe1, 0x6b, 0xe5, 0x9e, 0x3d, 0x37, 0x2f, - 0xab, 0x54, 0x93, 0x7c, 0xb7, 0x79, 0x15, 0xb1, 0xc8, 0x8c, 0xfc, 0x0a, 0xda, 0x00, 0x53, 0xb9, 0x7c, 0xb5, 0xb6, - 0x20, 0x2e, 0xf2, 0x7c, 0x40, 0x5e, 0xde, 0x5a, 0xea, 0x12, 0x45, 0x0d, 0x6e, 0xf0, 0x93, 0x15, 0x3c, 0x0b, 0xae, - 0x0b, 0x0d, 0x7b, 0xe4, 0xc4, 0x8b, 0xa8, 0x15, 0xd5, 0x5f, 0x7d, 0x35, 0xaa, 0x04, 0x1f, 0xb5, 0x34, 0xc9, 0x25, - 0x88, 0x1e, 0xe5, 0x03, 0x73, 0x1c, 0x44, 0x13, 0x7f, 0xf7, 0x7c, 0xd9, 0xf6, 0x74, 0x36, 0xaf, 0xd4, 0x89, 0xe5, - 0x95, 0x09, 0x78, 0x38, 0xda, 0x27, 0x5c, 0x10, 0x0e, 0x12, 0x59, 0xa9, 0x3d, 0xf4, 0xb9, 0xa8, 0x1b, 0xe7, 0x17, - 0x6d, 0xd6, 0x3c, 0x59, 0xad, 0xf2, 0xcb, 0x36, 0x6b, 0x9f, 0xda, 0x07, 0xdf, 0x22, 0x95, 0x01, 0xcd, 0xe5, 0x63, - 0x9e, 0x45, 0xa0, 0x9d, 0x1d, 0x67, 0x26, 0x9c, 0x82, 0x0f, 0x51, 0x4c, 0x16, 0xba, 0xea, 0x4b, 0x82, 0x71, 0x29, - 0xb1, 0x7a, 0xfc, 0x02, 0xf5, 0xda, 0xe9, 0xb6, 0xab, 0x74, 0xb3, 0x7d, 0x18, 0x5c, 0xb8, 0x14, 0x08, 0x77, 0x20, - 0xe4, 0x01, 0xe8, 0x77, 0x97, 0x02, 0x4c, 0x83, 0x00, 0x95, 0x15, 0x88, 0xb4, 0x7c, 0xb6, 0x98, 0x3d, 0x2b, 0xa8, - 0x59, 0x86, 0x27, 0x7c, 0xc2, 0xb5, 0x4a, 0x29, 0x48, 0xb7, 0xbb, 0xd2, 0xd7, 0xbb, 0x25, 0xa8, 0xac, 0x16, 0xf9, - 0x35, 0xd1, 0x3c, 0xfb, 0xac, 0xdc, 0xc2, 0x21, 0x6c, 0x56, 0x56, 0xe0, 0x0c, 0xad, 0x71, 0x2e, 0x27, 0xb4, 0xe0, - 0x7a, 0x3a, 0xfb, 0xb7, 0x56, 0x87, 0xf5, 0xf5, 0xc0, 0x5c, 0x58, 0x01, 0x48, 0xa8, 0x18, 0xad, 0x56, 0xfc, 0xe8, - 0xfb, 0xf7, 0x49, 0xde, 0x27, 0xbc, 0x8d, 0x3b, 0xf8, 0x18, 0x9f, 0xe2, 0x76, 0x0b, 0xb7, 0x4f, 0xe1, 0xea, 0x3e, - 0xcb, 0x17, 0x23, 0xa6, 0x62, 0x78, 0xf9, 0x4b, 0x5f, 0x26, 0xe7, 0x87, 0x65, 0xbc, 0x7b, 0x5d, 0x24, 0x0e, 0x5d, - 0x82, 0xb0, 0xeb, 0x2e, 0x5e, 0x5d, 0x14, 0x85, 0xc1, 0xd2, 0xc6, 0xa1, 0xea, 0xa4, 0xd4, 0x2f, 0x5c, 0x1e, 0xf7, - 0xc0, 0x9e, 0xdb, 0xae, 0x6c, 0x13, 0xcc, 0xbe, 0xed, 0xcf, 0xb4, 0xfa, 0xd9, 0xd4, 0x25, 0x62, 0x78, 0xe8, 0x55, - 0xe8, 0x81, 0x2e, 0x49, 0xfb, 0xe0, 0x00, 0xac, 0x8e, 0x82, 0xd9, 0x70, 0x1b, 0xfd, 0x80, 0x37, 0x6b, 0x69, 0x10, - 0xac, 0x00, 0x8c, 0x3b, 0xdf, 0x70, 0xb2, 0xb4, 0xb0, 0xd5, 0x40, 0x85, 0x75, 0x11, 0x46, 0x74, 0x0b, 0x49, 0x85, - 0x11, 0xa2, 0xe1, 0x08, 0x73, 0x91, 0x4e, 0xf6, 0x5b, 0x58, 0x8e, 0xc7, 0x8a, 0x69, 0x38, 0x3a, 0x0a, 0xf6, 0x85, - 0x15, 0xca, 0x9c, 0x22, 0x43, 0x36, 0xe1, 0xe2, 0xa1, 0xfe, 0xc4, 0x0a, 0x69, 0x3e, 0x8d, 0x06, 0x23, 0x8d, 0xcc, - 0x2a, 0x46, 0x38, 0xcb, 0xf9, 0x1c, 0xaa, 0x4e, 0x0a, 0x70, 0xfa, 0x81, 0xbf, 0x7c, 0x94, 0x86, 0x6d, 0x02, 0xf9, - 0xfa, 0x60, 0x83, 0xd9, 0xe0, 0x51, 0x41, 0x6f, 0x5e, 0x8b, 0xc7, 0xb0, 0xa3, 0x1e, 0x16, 0x8c, 0x42, 0x36, 0x24, - 0xbd, 0x83, 0xa6, 0xe0, 0x03, 0xda, 0x7c, 0x69, 0x00, 0x97, 0x9e, 0x9b, 0x0f, 0x5b, 0xd1, 0x47, 0x0d, 0x4c, 0xca, - 0xb6, 0x4c, 0xa6, 0x39, 0xa5, 0xab, 0x4c, 0x1b, 0x97, 0xa9, 0x9c, 0xc2, 0x1a, 0xbb, 0xa8, 0x27, 0xe1, 0x60, 0x46, - 0x54, 0x4d, 0xd3, 0xfe, 0xc0, 0xfc, 0x7d, 0x6d, 0x4b, 0xb6, 0xb0, 0x0b, 0xb5, 0xb3, 0xc6, 0xe6, 0xc9, 0xce, 0xa0, - 0x7c, 0x1b, 0xc3, 0x3d, 0x2c, 0xbc, 0x1b, 0x59, 0x23, 0x9f, 0x27, 0x9e, 0x6c, 0x9e, 0xac, 0xd7, 0x66, 0x20, 0x2a, - 0x05, 0x3d, 0xd0, 0x5b, 0xbf, 0x6d, 0x5a, 0xb0, 0x3d, 0xca, 0xaf, 0xd3, 0x16, 0x9e, 0x71, 0x78, 0x06, 0xd3, 0xb7, - 0x77, 0xa5, 0x0b, 0xf9, 0xd9, 0x81, 0xa4, 0x15, 0xa4, 0xd8, 0xe9, 0x04, 0x9d, 0x1d, 0xe3, 0x60, 0xe4, 0x40, 0xcf, - 0xaf, 0x3e, 0x5b, 0x58, 0xfb, 0xdf, 0x6f, 0xca, 0x82, 0x39, 0x1d, 0xb2, 0xbc, 0x9c, 0x50, 0xe6, 0xcf, 0xcf, 0x37, - 0x3c, 0xa9, 0x50, 0xc1, 0xbd, 0x1f, 0x05, 0x7b, 0xda, 0x86, 0x98, 0x9c, 0xd1, 0xbf, 0xed, 0x0f, 0x1b, 0x11, 0xa8, - 0xd4, 0xb2, 0x65, 0x85, 0x54, 0xea, 0xa1, 0x4d, 0xb3, 0x47, 0x0f, 0x1c, 0x91, 0x2f, 0xa1, 0x0b, 0xe0, 0xf5, 0x47, - 0x85, 0x9c, 0x1b, 0x44, 0x70, 0xbf, 0xdd, 0xb8, 0x8d, 0xaf, 0x00, 0x78, 0x3b, 0xec, 0x55, 0xff, 0xb4, 0x80, 0xfd, - 0x8d, 0xca, 0x92, 0x7e, 0xbc, 0x1d, 0x7b, 0xfc, 0x17, 0x12, 0xe2, 0x95, 0x5b, 0x3c, 0x4c, 0x1c, 0x3a, 0x95, 0xac, - 0x59, 0xf9, 0x73, 0xab, 0x24, 0x60, 0x58, 0xbd, 0x60, 0xc8, 0xc6, 0x6d, 0x15, 0xb7, 0x99, 0xff, 0x41, 0x05, 0x83, - 0x05, 0xdf, 0x1a, 0x49, 0xc5, 0xb2, 0xf8, 0xed, 0x53, 0xe7, 0xbf, 0xea, 0x1c, 0xd7, 0xbe, 0xae, 0xbd, 0x51, 0x39, - 0x34, 0xf1, 0x81, 0x23, 0x74, 0x70, 0xb0, 0x91, 0x41, 0xc7, 0x00, 0x78, 0xe4, 0xd8, 0x2f, 0xbf, 0x7c, 0x9e, 0x1d, - 0x33, 0x9a, 0xc7, 0x22, 0x0a, 0x99, 0x3b, 0xcf, 0xcd, 0xd9, 0x89, 0x3c, 0xa1, 0x6a, 0xea, 0x0b, 0x03, 0x1c, 0x1f, - 0x6d, 0xa5, 0x02, 0xbe, 0x47, 0xeb, 0x1d, 0x13, 0xd8, 0xe0, 0xb7, 0xec, 0xa4, 0x76, 0x15, 0xf4, 0x0b, 0xb4, 0xdc, - 0xc5, 0x54, 0x6e, 0x2c, 0x70, 0xb4, 0x39, 0x91, 0x9d, 0x43, 0xdf, 0xa8, 0x53, 0xb2, 0x1e, 0x4f, 0x76, 0x1b, 0x7d, - 0x49, 0xb1, 0x2b, 0xb9, 0xa2, 0x6d, 0x43, 0x56, 0xbd, 0x53, 0xab, 0x2b, 0x53, 0xa7, 0xea, 0x9a, 0xb7, 0xb2, 0xb4, - 0x29, 0xed, 0x92, 0xec, 0xdd, 0x16, 0x0b, 0xaf, 0xc2, 0x1b, 0x8d, 0xf2, 0x22, 0x14, 0xec, 0xb1, 0xc4, 0xa0, 0xcb, - 0x09, 0x5c, 0x2f, 0xac, 0x56, 0x31, 0xfc, 0xd9, 0x35, 0x86, 0x5d, 0xa6, 0x4b, 0x1f, 0xf8, 0x06, 0xbf, 0x12, 0x84, - 0xca, 0x75, 0x76, 0x90, 0x60, 0xdd, 0xe5, 0x06, 0x0d, 0xc7, 0x89, 0xff, 0x82, 0x87, 0x9a, 0xb5, 0x77, 0x39, 0x98, - 0x64, 0xdf, 0x78, 0xdc, 0xad, 0x64, 0x2d, 0x6b, 0x71, 0xd6, 0x37, 0x24, 0x18, 0x62, 0x37, 0xa5, 0x73, 0xdc, 0x4a, - 0xda, 0x28, 0x72, 0xc5, 0x2a, 0xf4, 0xff, 0x56, 0x91, 0xcc, 0x66, 0xfe, 0xd7, 0xd9, 0xd9, 0x99, 0x4b, 0x71, 0x36, - 0x7f, 0xca, 0x78, 0xc0, 0x99, 0x04, 0xf6, 0x85, 0x67, 0xcc, 0xe8, 0x90, 0xdf, 0xc2, 0x50, 0x88, 0x20, 0x97, 0xc2, - 0xb1, 0x4b, 0xf0, 0xce, 0x20, 0x50, 0x1e, 0x60, 0xff, 0x9e, 0x6c, 0x94, 0xf3, 0x0f, 0x15, 0xf9, 0x40, 0xbe, 0x65, - 0x83, 0xec, 0x8b, 0xf9, 0xec, 0x5b, 0x33, 0x19, 0x88, 0xcd, 0x1f, 0x61, 0xfb, 0xdb, 0xb0, 0xb4, 0xce, 0x52, 0x06, - 0x47, 0x5a, 0x2e, 0xb2, 0xa9, 0xd5, 0xfc, 0xbb, 0x0f, 0x53, 0xd6, 0x3d, 0x72, 0x03, 0x41, 0xb9, 0xc8, 0xd2, 0xc5, - 0xa3, 0x8c, 0x7e, 0x2c, 0x43, 0x4f, 0xee, 0xbd, 0x62, 0x0b, 0xf6, 0x23, 0xde, 0xab, 0x52, 0xe0, 0xe3, 0x61, 0xc1, - 0x69, 0xfe, 0x23, 0xde, 0xab, 0x42, 0x50, 0x82, 0x2b, 0xa4, 0x89, 0xe2, 0x88, 0xcd, 0x83, 0xce, 0x69, 0x24, 0x80, - 0x82, 0xe6, 0x91, 0x39, 0xc8, 0x9e, 0xbb, 0xa8, 0x85, 0x49, 0x07, 0xbb, 0xb8, 0x5f, 0x36, 0x16, 0xa9, 0x0d, 0xe1, - 0x0d, 0x91, 0xdc, 0xca, 0xd9, 0x98, 0xaf, 0x47, 0x1b, 0x0b, 0x62, 0x94, 0xc9, 0xe4, 0xf2, 0x39, 0x8f, 0xb7, 0x16, - 0x0b, 0x85, 0xd5, 0x82, 0x05, 0xaa, 0x55, 0xa9, 0xd2, 0xc3, 0xe2, 0xdb, 0x05, 0xb3, 0xa0, 0x88, 0xd9, 0x7a, 0x0f, - 0x6f, 0xb9, 0x22, 0x20, 0x25, 0xbb, 0x24, 0x78, 0x93, 0xdb, 0x60, 0xaa, 0x7f, 0x82, 0x1d, 0x08, 0x3d, 0x53, 0x3a, - 0xc2, 0x26, 0x4f, 0x41, 0x24, 0xb1, 0xfd, 0x16, 0x76, 0xac, 0xd1, 0x0b, 0xe1, 0x85, 0x14, 0x38, 0x57, 0x4d, 0x13, - 0x33, 0xca, 0x4d, 0x74, 0xb1, 0x87, 0x6a, 0xce, 0x32, 0x6d, 0x11, 0x60, 0xdf, 0xa1, 0xa1, 0x14, 0xcf, 0x0d, 0x28, - 0xcc, 0x63, 0xd2, 0x2e, 0xe5, 0x31, 0x2c, 0x5e, 0x90, 0x02, 0x44, 0x8d, 0x8b, 0x49, 0x59, 0x67, 0x9e, 0x2f, 0x26, - 0x5c, 0x54, 0xc8, 0x50, 0x30, 0x35, 0x97, 0x02, 0xde, 0x72, 0x28, 0x8b, 0x18, 0x3a, 0x54, 0xc3, 0x77, 0x4b, 0xc2, - 0xca, 0x3a, 0xe6, 0x98, 0xe2, 0xa2, 0xaa, 0x01, 0xcc, 0xc5, 0xc3, 0xf0, 0xd1, 0x77, 0xf5, 0x5a, 0xbc, 0x93, 0xf3, - 0x2a, 0xdf, 0xd3, 0x38, 0x1f, 0x32, 0xdd, 0xd9, 0x0d, 0xa3, 0xb5, 0x79, 0x6e, 0x29, 0xd8, 0xbe, 0x1f, 0x78, 0xf5, - 0x04, 0xd9, 0xda, 0x3c, 0xd8, 0x54, 0x66, 0x0d, 0x59, 0xf9, 0x3a, 0x41, 0xd5, 0x5e, 0xbd, 0xaa, 0x14, 0xb6, 0x22, - 0x40, 0xa5, 0xe0, 0xa3, 0xad, 0xfc, 0x27, 0xda, 0xe6, 0xdb, 0x73, 0xa8, 0x0c, 0x0f, 0xe4, 0xc9, 0x50, 0xd5, 0x03, - 0x2e, 0xca, 0x0f, 0x01, 0x2c, 0x7e, 0x64, 0x22, 0xd7, 0xee, 0xba, 0x40, 0xe6, 0x4c, 0xc5, 0x12, 0x2f, 0xfb, 0x74, - 0x90, 0x5a, 0x79, 0x28, 0x95, 0x60, 0xdb, 0x73, 0x53, 0x70, 0xed, 0x43, 0xe4, 0xe2, 0x3e, 0x1b, 0xa4, 0xcb, 0x7a, - 0x18, 0x5d, 0x1b, 0xc8, 0xd7, 0x9b, 0x73, 0x9a, 0xb8, 0xb3, 0x74, 0x80, 0x73, 0x02, 0xb6, 0xc7, 0x9e, 0x3d, 0x7d, - 0x13, 0x67, 0xa8, 0x57, 0xe7, 0xf0, 0x97, 0x6b, 0x9c, 0xe3, 0x0c, 0xa5, 0x0f, 0x63, 0xb8, 0xc0, 0x5a, 0x63, 0x00, - 0x5f, 0x66, 0x49, 0x15, 0x78, 0xa4, 0x66, 0x46, 0x62, 0x75, 0x17, 0x81, 0x68, 0xa9, 0xc3, 0xdb, 0x71, 0xe6, 0x03, - 0x51, 0x1b, 0xee, 0xf5, 0x99, 0x11, 0x0e, 0x27, 0x59, 0x5c, 0x3b, 0x67, 0x38, 0xb9, 0xdc, 0xe7, 0xb5, 0x13, 0x13, - 0xac, 0xbd, 0xc3, 0x53, 0x05, 0xf4, 0x68, 0x70, 0xaa, 0x58, 0x1a, 0x02, 0x31, 0x13, 0xc0, 0x9b, 0x39, 0x3c, 0xda, - 0x02, 0x9c, 0x8f, 0xd6, 0x38, 0xf8, 0x4a, 0x6b, 0x5d, 0x6d, 0x2a, 0x51, 0xd6, 0x6b, 0xdc, 0x9f, 0x66, 0x78, 0x94, - 0xe1, 0x79, 0x36, 0x08, 0x8e, 0x9b, 0x59, 0x16, 0x9a, 0x74, 0xad, 0x56, 0x4f, 0x9d, 0x19, 0x21, 0xb2, 0x3f, 0x2d, - 0xfd, 0x41, 0x3d, 0x40, 0xf8, 0x14, 0xb2, 0x80, 0x96, 0xf4, 0xdc, 0xdf, 0x86, 0x7d, 0xa7, 0x1a, 0x35, 0x62, 0x9e, - 0x58, 0x32, 0xd2, 0xf3, 0x3f, 0xca, 0x2c, 0xdb, 0x5a, 0x23, 0x9a, 0xdf, 0xee, 0x45, 0x0d, 0xdf, 0x5e, 0xa0, 0x65, - 0x2b, 0xcd, 0x76, 0x00, 0x51, 0xac, 0x71, 0x92, 0x0e, 0xd6, 0x48, 0xae, 0x56, 0xb1, 0x4d, 0x21, 0x3c, 0x99, 0x31, - 0xaa, 0x16, 0x85, 0x79, 0xba, 0x2d, 0x56, 0x28, 0x31, 0xfc, 0x2e, 0x76, 0x36, 0xa2, 0xf0, 0x52, 0x9a, 0x04, 0xc3, - 0x8d, 0x58, 0x10, 0x59, 0x13, 0xb9, 0x87, 0x59, 0x65, 0x19, 0x24, 0x88, 0x30, 0x22, 0xbf, 0xbd, 0x2e, 0x15, 0xf6, - 0x71, 0x38, 0xfb, 0xc7, 0xf8, 0x02, 0xc2, 0xcd, 0xdb, 0x84, 0x16, 0x43, 0x3a, 0x01, 0x36, 0x16, 0xe2, 0x10, 0x6e, - 0x25, 0xac, 0x56, 0xfd, 0x41, 0x57, 0x18, 0xf2, 0xec, 0x9e, 0xae, 0x2b, 0x1b, 0xda, 0xdd, 0x00, 0x5c, 0x75, 0x5b, - 0x6a, 0xae, 0x8d, 0xee, 0x87, 0x9a, 0xd7, 0xb5, 0xb8, 0x4b, 0x72, 0x0f, 0x64, 0x54, 0x6f, 0x60, 0xd7, 0x2c, 0xc0, - 0x4d, 0xe8, 0x2a, 0x3c, 0xc2, 0x0b, 0x6b, 0xc3, 0x69, 0x9e, 0x52, 0xa2, 0xe6, 0x05, 0x25, 0x78, 0xb8, 0x99, 0xb0, - 0x7e, 0x36, 0xc0, 0x23, 0x1f, 0x68, 0x7b, 0xff, 0x6d, 0x3c, 0x42, 0xa8, 0x20, 0x06, 0xa6, 0xd6, 0x65, 0x7b, 0x54, - 0xd9, 0xed, 0x9b, 0x4c, 0xc3, 0x30, 0x18, 0x23, 0xe6, 0x51, 0x68, 0xc4, 0x9c, 0x37, 0x1a, 0x68, 0x41, 0x46, 0x60, - 0xc4, 0xbc, 0x08, 0x5a, 0x5b, 0xd8, 0x67, 0x36, 0x83, 0xf6, 0x16, 0x08, 0x75, 0x39, 0xd0, 0x34, 0x0d, 0x0f, 0x6a, - 0x54, 0x0f, 0x9a, 0xfb, 0xe7, 0x9d, 0x8e, 0x3a, 0xa0, 0x48, 0x18, 0x5f, 0xfa, 0x49, 0x58, 0xd7, 0x70, 0x3b, 0xee, - 0xb1, 0x19, 0xb7, 0xb3, 0x6d, 0x50, 0x7d, 0xd9, 0xcf, 0x06, 0x83, 0xae, 0xf4, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x9e, - 0xe0, 0xa8, 0x16, 0xef, 0x8b, 0xde, 0xbc, 0xf2, 0xe6, 0xfe, 0x65, 0xcf, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, - 0x1f, 0xaa, 0xe2, 0x83, 0x1d, 0x75, 0x20, 0x0a, 0x5a, 0xda, 0xaa, 0x09, 0xa4, 0xd6, 0xcc, 0x2e, 0xd6, 0x4d, 0x85, - 0x0e, 0x05, 0x84, 0x21, 0x53, 0x55, 0x77, 0x77, 0x2a, 0x50, 0x0d, 0x71, 0x38, 0xf5, 0x1f, 0x5b, 0x23, 0xd6, 0x38, - 0xea, 0x8c, 0x22, 0x63, 0x24, 0x69, 0x97, 0x0f, 0x5e, 0xdd, 0x01, 0x2b, 0x01, 0x1f, 0xfd, 0xd8, 0x24, 0x19, 0x43, - 0x82, 0xb7, 0x2c, 0xd3, 0x86, 0x0f, 0xe1, 0x0e, 0x41, 0x79, 0x62, 0x63, 0x6d, 0xba, 0x4a, 0x16, 0x72, 0x55, 0x97, - 0xd7, 0x01, 0x7a, 0xde, 0x95, 0xbf, 0xb1, 0xe1, 0xc8, 0x82, 0x81, 0x65, 0x5b, 0xfb, 0x04, 0x3c, 0xf2, 0x71, 0x85, - 0x20, 0x7e, 0x29, 0x74, 0x62, 0x22, 0x45, 0x5f, 0xc1, 0x06, 0xc5, 0x73, 0x70, 0x10, 0x74, 0x12, 0x1c, 0x06, 0xef, - 0x32, 0xab, 0x49, 0x36, 0xb8, 0x35, 0x23, 0xf1, 0x7c, 0xb5, 0x6a, 0xa1, 0xc3, 0x7f, 0xcc, 0x63, 0xc8, 0xe3, 0x52, - 0xe1, 0x3e, 0xae, 0x14, 0xee, 0x60, 0x09, 0x48, 0xc6, 0x81, 0xae, 0x1d, 0xcb, 0x50, 0x8d, 0x0e, 0x71, 0xba, 0x5f, - 0x40, 0xd4, 0x66, 0x77, 0x2c, 0x81, 0x9e, 0x7d, 0xab, 0x80, 0xd5, 0xb5, 0x97, 0x25, 0x90, 0x11, 0xdc, 0xfd, 0x26, - 0x30, 0x2a, 0x44, 0xe3, 0xf3, 0x67, 0xde, 0x53, 0xe0, 0x89, 0xf3, 0xe7, 0x9a, 0x19, 0xd6, 0xbd, 0xa0, 0x37, 0xa6, - 0xf9, 0x78, 0x8c, 0x9b, 0x63, 0x0b, 0xce, 0xa3, 0x0e, 0xfc, 0xb4, 0x10, 0x3d, 0xea, 0x60, 0x97, 0x8a, 0xc7, 0x25, - 0x90, 0x43, 0xf4, 0x74, 0x06, 0x52, 0xc0, 0x4a, 0xc7, 0x56, 0x8b, 0x34, 0x41, 0xab, 0xd5, 0xe4, 0x82, 0xb4, 0x10, - 0x5a, 0xaa, 0x1b, 0xae, 0xb3, 0x29, 0xf8, 0x48, 0x83, 0x62, 0xe0, 0x0d, 0xd5, 0xd3, 0x18, 0xe1, 0x31, 0x5a, 0x8e, - 0xd8, 0x98, 0x2e, 0x72, 0x9d, 0xaa, 0x1e, 0x4f, 0x6c, 0x28, 0x5b, 0x66, 0x23, 0xc1, 0x1d, 0x75, 0xf0, 0xc4, 0xf0, - 0x97, 0x8f, 0x8c, 0x39, 0x48, 0x91, 0x99, 0xe4, 0x89, 0x49, 0xc0, 0x3c, 0xc9, 0x72, 0xa9, 0x98, 0x6d, 0xa6, 0x6b, - 0x6d, 0xcb, 0x21, 0x18, 0x76, 0xa4, 0x0b, 0x6e, 0xac, 0x28, 0xa3, 0x74, 0x4a, 0x54, 0x4f, 0x1d, 0x75, 0xd2, 0x09, - 0xe6, 0x09, 0x70, 0x7a, 0xef, 0x64, 0xcc, 0x1a, 0xe5, 0xad, 0xe8, 0x0c, 0x1d, 0x4e, 0xb1, 0xa8, 0x2e, 0x51, 0x67, - 0xe8, 0x70, 0x82, 0xf0, 0xac, 0x41, 0x72, 0x05, 0x1e, 0xc3, 0x5c, 0xfc, 0x1f, 0x29, 0xff, 0xcd, 0x61, 0x43, 0xd0, - 0xe5, 0xb7, 0xb0, 0x53, 0xd8, 0x28, 0x4a, 0x73, 0x02, 0x5e, 0x8b, 0xed, 0x33, 0x9c, 0x91, 0x49, 0x33, 0xf7, 0x01, - 0xf7, 0x4c, 0x2b, 0x8d, 0x5b, 0x8d, 0x0e, 0x33, 0x3c, 0xda, 0x4c, 0x8a, 0xcd, 0x5c, 0x9b, 0x79, 0x9a, 0xc1, 0xf9, - 0x5e, 0x8d, 0xc2, 0x95, 0x5f, 0x6c, 0x26, 0x85, 0xe5, 0x1d, 0x70, 0x9b, 0x23, 0x2c, 0x9a, 0x14, 0xe7, 0x78, 0xd6, - 0xfc, 0x8a, 0x67, 0xcd, 0x0f, 0x65, 0x46, 0x63, 0x81, 0x05, 0x04, 0xef, 0x83, 0x44, 0x3c, 0xab, 0x92, 0x47, 0x58, - 0x34, 0x4c, 0x79, 0x3c, 0x6b, 0x54, 0xa5, 0x9b, 0x0b, 0x2c, 0x1a, 0xa6, 0x74, 0xe3, 0x03, 0x9e, 0x35, 0xbe, 0xfe, - 0x8b, 0x49, 0x47, 0x29, 0xa0, 0xcb, 0x1c, 0x2d, 0x33, 0x3b, 0xc4, 0xab, 0xdf, 0xde, 0xbe, 0x6b, 0x5f, 0x77, 0x0e, - 0x27, 0xd8, 0xaf, 0x5f, 0x66, 0x70, 0x2c, 0xd3, 0x31, 0x6b, 0x02, 0x44, 0x33, 0xdc, 0x39, 0x9c, 0xe2, 0xce, 0x61, - 0xe6, 0x9a, 0x5a, 0xcf, 0x1a, 0xe4, 0x56, 0x87, 0x50, 0xd4, 0x51, 0x1a, 0xc2, 0xc7, 0x4f, 0x36, 0x9d, 0xa0, 0x1a, - 0x28, 0xd1, 0xe1, 0xa4, 0x06, 0x2a, 0xf8, 0x5e, 0xd4, 0xbe, 0xab, 0x7a, 0x15, 0x06, 0x59, 0x28, 0xa1, 0x70, 0xcd, - 0x0d, 0x78, 0x6a, 0x29, 0x06, 0x32, 0x61, 0x8a, 0x05, 0xca, 0x77, 0x40, 0x61, 0x94, 0x27, 0x66, 0xe8, 0xc1, 0x74, - 0x4c, 0xe2, 0xff, 0xcf, 0x93, 0x29, 0x87, 0x5e, 0x6e, 0x99, 0xad, 0xe9, 0xb9, 0xc9, 0x84, 0xc3, 0x07, 0x1e, 0xeb, - 0xff, 0xda, 0x81, 0x62, 0x03, 0x52, 0xfc, 0x7f, 0xe9, 0xe8, 0x42, 0x30, 0x42, 0x56, 0x94, 0x16, 0x0e, 0xf1, 0xbf, - 0x3f, 0xac, 0xa0, 0xfb, 0x62, 0xab, 0xfb, 0xc2, 0x74, 0x1f, 0x36, 0x6d, 0x54, 0x39, 0x69, 0x55, 0xc9, 0x92, 0xff, - 0x3a, 0xdd, 0xda, 0x02, 0x8d, 0xa8, 0xd1, 0xb3, 0x49, 0xd8, 0xe0, 0x7e, 0x3b, 0xdd, 0x81, 0xcc, 0x6b, 0x6e, 0xdf, - 0xe6, 0x84, 0xc3, 0x37, 0xb8, 0x53, 0xbd, 0x6c, 0x81, 0xf7, 0xa6, 0x32, 0xfa, 0xca, 0x38, 0xb4, 0x1c, 0x2c, 0x36, - 0x4d, 0xb9, 0x8d, 0xb1, 0x74, 0x72, 0x8a, 0x8d, 0x2b, 0x22, 0x54, 0xba, 0xbd, 0x04, 0xa5, 0xf8, 0x58, 0x37, 0x99, - 0xf9, 0xba, 0xd0, 0x89, 0xb9, 0x84, 0x6a, 0x98, 0xcf, 0xbb, 0x4b, 0x9d, 0x68, 0x39, 0xb7, 0x79, 0x77, 0x17, 0xd0, - 0x27, 0x68, 0x58, 0x1b, 0x81, 0xdd, 0x3e, 0x2b, 0x9c, 0x7e, 0xa7, 0x3a, 0x04, 0xc3, 0x03, 0xc8, 0x91, 0x16, 0xdb, - 0x07, 0x36, 0xad, 0x61, 0xd7, 0x45, 0xb3, 0x4c, 0xb4, 0xad, 0x36, 0x4d, 0xae, 0xdd, 0xc3, 0x7c, 0x1e, 0xf2, 0x14, - 0xbc, 0xb0, 0xfa, 0xf1, 0x1d, 0xec, 0xc6, 0x6d, 0x8d, 0x91, 0xa8, 0x2b, 0x99, 0x4a, 0xe8, 0x27, 0xb7, 0x98, 0x25, - 0x77, 0xc6, 0x8b, 0x51, 0x19, 0x7f, 0x1f, 0x13, 0xa9, 0x3e, 0xaa, 0x24, 0x39, 0xb0, 0xec, 0x6f, 0xb0, 0xe4, 0x16, - 0xcc, 0x13, 0xcb, 0x6a, 0x12, 0xeb, 0xe4, 0x2e, 0x58, 0x44, 0x69, 0x1a, 0x59, 0x1b, 0x06, 0xd4, 0x34, 0x63, 0xd5, - 0x83, 0xfb, 0x10, 0xe8, 0xa1, 0x57, 0x96, 0xd2, 0xae, 0xb3, 0xb4, 0xd6, 0xbd, 0x36, 0xdd, 0x6f, 0x0e, 0x28, 0xe0, - 0x0b, 0x03, 0xae, 0xe9, 0x5f, 0x4d, 0x22, 0x19, 0xb2, 0xaf, 0x9c, 0x15, 0x8f, 0x17, 0x85, 0xc1, 0x34, 0xd1, 0xd3, - 0x49, 0x36, 0x6f, 0x83, 0xa9, 0x5e, 0x36, 0xef, 0xdc, 0x62, 0xf7, 0x7d, 0x67, 0xbf, 0xef, 0xb0, 0xe8, 0x31, 0x93, - 0x91, 0x32, 0x53, 0xcc, 0x7f, 0xdf, 0xd9, 0xef, 0x3b, 0xbc, 0x3d, 0x98, 0x1b, 0x7f, 0xa1, 0x58, 0xb2, 0x33, 0x5c, - 0x82, 0x09, 0x79, 0xc0, 0xdd, 0xd4, 0xb2, 0x4c, 0x10, 0xd8, 0x5a, 0x02, 0xc4, 0xf9, 0x7c, 0x1a, 0x57, 0xbc, 0x1a, - 0x02, 0xee, 0xd3, 0xbb, 0xb6, 0x57, 0xa9, 0xc0, 0x63, 0x82, 0x46, 0xc4, 0xc4, 0xb6, 0x31, 0xef, 0x6a, 0x01, 0x97, - 0x47, 0x74, 0xa9, 0x27, 0x49, 0x80, 0x57, 0x35, 0x2a, 0x6f, 0x53, 0xa4, 0xfc, 0x22, 0x41, 0x8e, 0x2f, 0xf6, 0x88, - 0x2a, 0x06, 0xb0, 0x2a, 0x4b, 0xfa, 0x04, 0x52, 0xcf, 0x0f, 0x26, 0xfa, 0x79, 0x13, 0x79, 0xec, 0x0b, 0xb3, 0x9f, - 0x99, 0x9e, 0x16, 0x72, 0x31, 0x99, 0x82, 0x0f, 0x2d, 0xb0, 0x0c, 0x85, 0xa9, 0x57, 0xd9, 0xfa, 0xd7, 0x24, 0x37, - 0x01, 0x14, 0x4e, 0x37, 0x65, 0x42, 0x33, 0xbd, 0xa0, 0xb9, 0xb1, 0x24, 0xe5, 0x62, 0xf2, 0x48, 0xde, 0xbe, 0x04, - 0xec, 0xa6, 0x44, 0x37, 0x76, 0xe4, 0xbd, 0x85, 0x1d, 0x80, 0x33, 0xc2, 0x76, 0x55, 0x7c, 0xa8, 0x40, 0xe7, 0x8f, - 0x73, 0xc2, 0x76, 0x55, 0x7d, 0xc2, 0x6c, 0xf6, 0x94, 0x6c, 0x0c, 0xb7, 0x17, 0x67, 0x8d, 0x1c, 0x1d, 0x75, 0xd2, - 0xbc, 0xeb, 0x89, 0x81, 0x05, 0x68, 0x00, 0xdc, 0xad, 0xed, 0x59, 0xde, 0xdd, 0x10, 0xd0, 0xbb, 0x64, 0xd2, 0x5e, - 0x97, 0x9b, 0x94, 0xd5, 0xaa, 0x53, 0x51, 0xc1, 0x02, 0x4f, 0x83, 0xbd, 0x40, 0xed, 0xd7, 0x0e, 0x8a, 0x73, 0x95, - 0x6d, 0x9a, 0x9e, 0x97, 0x7d, 0x77, 0x77, 0x2c, 0x32, 0xb6, 0x69, 0x6f, 0x77, 0x10, 0x09, 0xcb, 0x09, 0xeb, 0x80, - 0x13, 0xae, 0x6a, 0x07, 0x04, 0xe8, 0x3a, 0x10, 0xb9, 0xb1, 0x24, 0xcb, 0x75, 0x65, 0x74, 0x1f, 0xf8, 0xdd, 0x52, - 0x22, 0xdd, 0x68, 0x4b, 0x82, 0xe9, 0x13, 0x8c, 0x9a, 0xce, 0x3c, 0x8a, 0x5c, 0x7b, 0xef, 0x77, 0x53, 0xb4, 0xf5, - 0xaf, 0x0f, 0x63, 0xb3, 0x3d, 0x4c, 0x0c, 0x65, 0x10, 0x03, 0xbd, 0x8f, 0x78, 0xb7, 0xd1, 0xc8, 0x10, 0x28, 0x64, - 0xb2, 0x01, 0x96, 0x89, 0xd7, 0xa2, 0x1f, 0x1c, 0x18, 0x78, 0x54, 0x09, 0x08, 0x53, 0x10, 0x42, 0xc2, 0xae, 0x0d, - 0xc2, 0x86, 0xcb, 0x55, 0xcb, 0x85, 0x8d, 0x54, 0x1b, 0x3a, 0xf8, 0x7f, 0x85, 0xcb, 0x56, 0xcf, 0x2c, 0x17, 0xc5, - 0xe0, 0x66, 0x6e, 0xc0, 0x22, 0x41, 0x7a, 0xb4, 0xd9, 0x1e, 0x8a, 0xbb, 0x73, 0xb1, 0xd9, 0x10, 0x90, 0x98, 0xc3, - 0x04, 0x45, 0xc3, 0xb9, 0x31, 0xc6, 0x2a, 0xa9, 0xb4, 0xac, 0x35, 0x89, 0x39, 0xf0, 0xa5, 0x0b, 0xd7, 0x7d, 0x79, - 0x9b, 0x32, 0x7c, 0x97, 0x0a, 0x7c, 0x03, 0x9e, 0x34, 0xa9, 0xc4, 0xee, 0xf1, 0x82, 0x62, 0x4d, 0x74, 0xd7, 0xb3, - 0xb7, 0x05, 0xac, 0xb3, 0xd9, 0x23, 0x22, 0xf8, 0x5d, 0xfd, 0x6a, 0x83, 0xef, 0x16, 0xfe, 0x0a, 0xd6, 0xcf, 0xc1, - 0x49, 0x8a, 0x45, 0x43, 0x36, 0x0b, 0x77, 0x64, 0x40, 0xb9, 0x8a, 0x5f, 0x0e, 0x53, 0xb7, 0x8a, 0xe1, 0xda, 0xc7, - 0x57, 0xfc, 0x61, 0xa3, 0xdd, 0x86, 0x2a, 0x8b, 0xdb, 0xbd, 0x29, 0x1a, 0xb2, 0x6a, 0x7a, 0x47, 0xe6, 0x46, 0x4a, - 0xfd, 0xeb, 0x03, 0x6e, 0x6d, 0xb5, 0xef, 0xa7, 0xf9, 0xd6, 0xa3, 0x73, 0xd5, 0xb4, 0x4f, 0xad, 0x15, 0xc1, 0xc1, - 0xcf, 0x16, 0x6e, 0x6e, 0x0d, 0x38, 0x80, 0x9f, 0xbf, 0xa3, 0x79, 0x9c, 0x41, 0x74, 0x7a, 0xab, 0x19, 0x5f, 0xc5, - 0x7f, 0x8e, 0x1a, 0x71, 0x2f, 0xfd, 0x33, 0xf9, 0x73, 0xd4, 0x40, 0x3d, 0x14, 0xcf, 0x6f, 0x57, 0x6c, 0xb6, 0x82, - 0x60, 0x6b, 0xf7, 0x8e, 0xf0, 0xeb, 0xb0, 0x24, 0xd7, 0x34, 0xe7, 0xd9, 0xca, 0x3d, 0x45, 0xb7, 0x72, 0xef, 0xf4, - 0xac, 0xcc, 0xeb, 0x4a, 0xab, 0x58, 0x0e, 0x73, 0x08, 0x2c, 0x1c, 0xef, 0x35, 0x7b, 0xfd, 0x56, 0xf3, 0xc1, 0xc0, - 0xfe, 0x6b, 0x22, 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x06, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, - 0xe9, 0xe3, 0x0c, 0x59, 0xdf, 0x93, 0xd5, 0x8a, 0xb9, 0x68, 0xd6, 0x4e, 0x83, 0x5f, 0xc6, 0x66, 0x3a, 0x6c, 0x27, - 0x9d, 0xae, 0x17, 0x63, 0x49, 0x03, 0x22, 0x4d, 0x63, 0x06, 0x81, 0xa4, 0x96, 0x86, 0xc3, 0x9a, 0xdf, 0x46, 0x69, - 0x75, 0x7f, 0x04, 0x29, 0x3f, 0x44, 0x29, 0x3f, 0x22, 0x10, 0x40, 0xdb, 0x32, 0x47, 0x65, 0x43, 0xde, 0x77, 0xe9, - 0x9e, 0x71, 0x66, 0x68, 0xf0, 0xd5, 0xaa, 0x55, 0x0d, 0x53, 0x14, 0xf5, 0x61, 0x2e, 0xd7, 0x58, 0x90, 0x37, 0xa0, - 0x6b, 0x56, 0x44, 0xf4, 0x42, 0x57, 0x79, 0x78, 0x89, 0x17, 0x4b, 0x02, 0x4e, 0xfa, 0x3d, 0xd1, 0x2b, 0xc8, 0xe5, - 0xc3, 0x18, 0x7c, 0xcc, 0x30, 0xef, 0xeb, 0x7e, 0x31, 0x18, 0xa0, 0xd4, 0x39, 0x9d, 0xa5, 0x26, 0xe2, 0x4a, 0xe0, - 0x97, 0x5c, 0x80, 0x5f, 0xb2, 0x42, 0xac, 0x5f, 0x0c, 0xc8, 0xbd, 0x2c, 0x96, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, - 0x61, 0x68, 0x60, 0x6a, 0x86, 0x65, 0x2e, 0xb2, 0xc1, 0x62, 0xce, 0x5a, 0x02, 0xc1, 0xcd, 0x80, 0xbb, 0xd4, 0x86, - 0x44, 0x63, 0x0d, 0x14, 0xdd, 0x46, 0xa1, 0x99, 0xd1, 0xd3, 0xad, 0x36, 0xfa, 0x91, 0xc3, 0x0b, 0x73, 0x0d, 0x63, - 0x11, 0xc8, 0x5c, 0xae, 0x7a, 0xec, 0x2f, 0x3f, 0x6c, 0x56, 0x18, 0xbc, 0xc2, 0x98, 0xec, 0x94, 0x56, 0x89, 0x66, - 0x7c, 0x95, 0x27, 0x8e, 0x21, 0xc8, 0xc4, 0x52, 0xe9, 0x86, 0x63, 0xe2, 0x4a, 0xfa, 0x4c, 0x0c, 0xd9, 0x6e, 0x78, - 0x66, 0x2e, 0x74, 0xb3, 0xfd, 0xc3, 0xb9, 0x9d, 0x73, 0xc2, 0x8d, 0x56, 0xd2, 0x68, 0xa3, 0x9e, 0x19, 0xaa, 0xea, - 0x82, 0xf9, 0x3d, 0x74, 0x5a, 0x5a, 0xec, 0x5c, 0xbd, 0xbb, 0xe1, 0xbb, 0x70, 0x65, 0xfc, 0x2d, 0x56, 0x85, 0x56, - 0x64, 0xb8, 0xdd, 0x42, 0xde, 0x9c, 0xe9, 0xa1, 0x57, 0xe4, 0x42, 0x75, 0xf8, 0x8b, 0xba, 0xc2, 0x3c, 0x15, 0x19, - 0x35, 0x84, 0x47, 0xbf, 0xd7, 0x19, 0x28, 0xff, 0x60, 0x62, 0x32, 0x67, 0xc9, 0x0d, 0x2d, 0x44, 0xfc, 0xe3, 0x0b, - 0x61, 0x62, 0x55, 0xed, 0xc1, 0x40, 0xf6, 0x4c, 0xc5, 0x3d, 0xb8, 0x35, 0xe1, 0x63, 0xce, 0x46, 0xe9, 0x5e, 0xf4, - 0x63, 0x43, 0x34, 0x7e, 0x8c, 0x7e, 0x04, 0x77, 0x67, 0xf7, 0x2e, 0x61, 0x19, 0x17, 0xc2, 0xdf, 0x63, 0x3d, 0x2c, - 0x55, 0xca, 0x58, 0x7b, 0xdd, 0x72, 0x78, 0x21, 0xf5, 0x26, 0x8b, 0x1f, 0x3a, 0x62, 0x6d, 0x53, 0xb0, 0x0e, 0x29, - 0x29, 0x3c, 0xbb, 0x62, 0x6e, 0xb5, 0x98, 0xbb, 0xd4, 0x12, 0xfe, 0xfa, 0xea, 0x61, 0xa9, 0x82, 0x86, 0x83, 0xd0, - 0x95, 0xb6, 0x90, 0x00, 0x03, 0x97, 0xd2, 0xa7, 0xd3, 0x9d, 0x49, 0x64, 0x96, 0xc5, 0xf0, 0xee, 0x41, 0x05, 0xf3, - 0xdf, 0xd9, 0x46, 0x58, 0x15, 0xb8, 0x5c, 0xa9, 0xa2, 0x5e, 0x4a, 0x02, 0x01, 0xe8, 0x4b, 0xef, 0x41, 0x79, 0x51, - 0x74, 0x1b, 0x0d, 0x09, 0x5a, 0x58, 0x6a, 0xae, 0x55, 0x31, 0xdd, 0x0f, 0xdf, 0xd3, 0x0b, 0x3e, 0xbc, 0x43, 0xda, - 0xc6, 0xa3, 0x96, 0x94, 0x50, 0xbb, 0x83, 0xf6, 0xc1, 0x2a, 0x3b, 0x28, 0xff, 0x36, 0xa6, 0xc8, 0xe6, 0xf7, 0xd9, - 0x0f, 0xd4, 0x75, 0x38, 0x70, 0x05, 0xab, 0x5e, 0xca, 0x28, 0x18, 0xc2, 0x3e, 0x60, 0x1f, 0x8b, 0x24, 0xa3, 0xd9, - 0x94, 0x81, 0xba, 0xdf, 0x16, 0xad, 0xe6, 0xf6, 0xa4, 0xee, 0x37, 0x64, 0x9c, 0x7d, 0x84, 0x71, 0xf6, 0x51, 0xe0, - 0xc5, 0x22, 0xc9, 0x1f, 0x32, 0xd6, 0x38, 0x56, 0x4d, 0x81, 0x8e, 0x3a, 0xc0, 0x9d, 0x81, 0x03, 0x0f, 0xd8, 0xa2, - 0x1c, 0x1c, 0x50, 0x67, 0x71, 0x4f, 0x1b, 0x99, 0xf7, 0xf6, 0x84, 0xda, 0x45, 0x2c, 0x70, 0xb3, 0x66, 0xa6, 0x05, - 0xad, 0x15, 0xc6, 0x79, 0x3c, 0xe0, 0x6d, 0x9e, 0xd5, 0xe2, 0x27, 0x6c, 0x58, 0x53, 0xd5, 0x6f, 0xa0, 0x39, 0xaa, - 0x05, 0xb9, 0x79, 0x62, 0xbc, 0x55, 0x49, 0x3f, 0x8a, 0x06, 0x96, 0x53, 0x21, 0x86, 0x64, 0xf4, 0x5b, 0x83, 0xe0, - 0x56, 0x7b, 0xb5, 0xe2, 0x1e, 0xf1, 0x45, 0xcd, 0x5b, 0xcd, 0xdc, 0x02, 0xd0, 0x22, 0x8e, 0xca, 0x7b, 0x93, 0x08, - 0xbc, 0x6f, 0xcb, 0x08, 0x69, 0xcb, 0xbe, 0x7d, 0x34, 0xb1, 0x54, 0x6c, 0xbe, 0xa3, 0x93, 0x41, 0x1a, 0xd9, 0x11, - 0x45, 0xf8, 0xba, 0x84, 0x24, 0x5c, 0x25, 0x5d, 0xab, 0x4c, 0xce, 0x99, 0x4a, 0x39, 0xbe, 0x2e, 0xa4, 0xd4, 0x57, - 0xf6, 0x4b, 0xe2, 0xea, 0x4e, 0x46, 0xe0, 0xeb, 0x09, 0xd3, 0xef, 0x68, 0x31, 0x61, 0xe0, 0x57, 0xe4, 0x6f, 0xc7, - 0x52, 0x4a, 0x2e, 0x9f, 0x88, 0xb8, 0x4f, 0x31, 0xbc, 0xf8, 0x39, 0xc0, 0xda, 0x84, 0x40, 0x29, 0x71, 0x11, 0x2e, - 0x88, 0xde, 0x14, 0xf2, 0xf6, 0x2e, 0x2e, 0xb0, 0x73, 0x00, 0x2c, 0x9d, 0x26, 0x01, 0xfe, 0xe5, 0x63, 0x3e, 0x56, - 0x63, 0x4e, 0x8d, 0xae, 0xdf, 0xfd, 0x4e, 0xae, 0x81, 0xde, 0x96, 0x8e, 0x82, 0xfd, 0xd6, 0x00, 0x72, 0xe1, 0x2e, - 0x0c, 0x2e, 0xbe, 0xc2, 0xda, 0xb2, 0x30, 0xde, 0x58, 0x00, 0xbd, 0xbf, 0x33, 0xb0, 0x60, 0xc3, 0x1c, 0x53, 0x78, - 0x2e, 0x75, 0xc2, 0x74, 0x10, 0x15, 0xe4, 0x49, 0xf9, 0x20, 0x66, 0xad, 0xf6, 0x5b, 0x36, 0x86, 0x3b, 0x8c, 0xe4, - 0xdb, 0x85, 0x13, 0x07, 0x1e, 0x90, 0x69, 0x32, 0xdb, 0xec, 0x1b, 0x1f, 0x79, 0xe4, 0xf5, 0x38, 0xde, 0xd5, 0x52, - 0x98, 0x6f, 0x56, 0x74, 0x8d, 0x21, 0x14, 0x45, 0xd8, 0xef, 0x17, 0x15, 0x53, 0x54, 0x19, 0xb4, 0x41, 0xc3, 0xf2, - 0x46, 0xfc, 0x02, 0x67, 0x0c, 0xad, 0x17, 0xb2, 0x77, 0x74, 0xd6, 0xe1, 0xcc, 0x61, 0xc6, 0x94, 0xc0, 0xa8, 0xb4, - 0x2c, 0xe8, 0x04, 0x1c, 0x9d, 0xab, 0x0f, 0xa2, 0xe2, 0xea, 0x58, 0x01, 0x78, 0x92, 0x29, 0xfc, 0x93, 0x6f, 0x82, - 0x75, 0xbf, 0x55, 0x33, 0x4c, 0xfd, 0x45, 0x6f, 0xbb, 0x96, 0x2f, 0x43, 0x1c, 0x69, 0x63, 0x08, 0xad, 0x73, 0x7b, - 0x07, 0x28, 0xe2, 0x82, 0x5e, 0xa4, 0x1a, 0x5f, 0xab, 0xc5, 0xd0, 0xac, 0xaf, 0x71, 0x1d, 0xd3, 0x06, 0x51, 0xac, - 0xbb, 0x26, 0xbe, 0xae, 0xde, 0x1f, 0x55, 0xa9, 0x82, 0x33, 0x48, 0x20, 0xac, 0xca, 0xcb, 0x86, 0x54, 0x92, 0x4b, - 0xd3, 0xa9, 0x34, 0x9d, 0x56, 0x08, 0xe5, 0xd2, 0x93, 0xf2, 0xfe, 0x15, 0x42, 0x18, 0x98, 0x32, 0x3b, 0xb0, 0x4a, - 0x6d, 0x61, 0x15, 0xbc, 0x7a, 0xb1, 0x81, 0x55, 0x12, 0x8e, 0xe7, 0x12, 0x8d, 0x8a, 0x0a, 0x87, 0x0c, 0xe9, 0x0b, - 0xb1, 0x08, 0x12, 0x00, 0x8b, 0xde, 0x65, 0x2e, 0xef, 0x7b, 0x38, 0x14, 0xf6, 0x24, 0x93, 0x70, 0xba, 0x09, 0xcd, - 0xe1, 0x61, 0x5a, 0xd5, 0xf3, 0x08, 0x01, 0x4b, 0xcf, 0x31, 0x3c, 0x48, 0xfc, 0xfd, 0x87, 0x50, 0x9d, 0x05, 0x79, - 0xfa, 0x2f, 0x51, 0x12, 0x1a, 0xfb, 0xcf, 0xf1, 0xd0, 0x21, 0x61, 0x38, 0xf0, 0xcd, 0x11, 0x56, 0x38, 0xb8, 0x55, - 0xc4, 0x67, 0x70, 0x87, 0x8f, 0x75, 0xe8, 0x01, 0x60, 0x09, 0xc5, 0x21, 0xc8, 0x37, 0x50, 0xcc, 0xe0, 0x80, 0x26, - 0xcb, 0xf0, 0x02, 0x17, 0xac, 0x16, 0xca, 0xfb, 0xdb, 0x96, 0x97, 0xd2, 0x6a, 0x97, 0xbc, 0xc6, 0x1c, 0xa8, 0xfc, - 0x0c, 0x2f, 0x7c, 0x85, 0x79, 0x29, 0xd9, 0x7d, 0xe1, 0x6b, 0x07, 0xf4, 0x14, 0x02, 0x46, 0xba, 0xdf, 0x6b, 0xc2, - 0x3d, 0x45, 0x2f, 0x73, 0x71, 0xd8, 0x76, 0xd0, 0xbd, 0xc0, 0x5c, 0x5d, 0x55, 0x59, 0x73, 0x30, 0x85, 0x06, 0x07, - 0x55, 0x38, 0x23, 0x30, 0x57, 0x2f, 0xca, 0x82, 0x73, 0x10, 0xef, 0x7b, 0xc2, 0xe4, 0x94, 0xd1, 0x00, 0x5e, 0x64, - 0xe5, 0xa3, 0x53, 0x3d, 0x0e, 0x2e, 0xe3, 0x86, 0x4d, 0x7c, 0x21, 0x7c, 0x2a, 0xb0, 0x92, 0xd6, 0x38, 0x34, 0xa2, - 0x23, 0x3a, 0x07, 0xb3, 0x0d, 0xa0, 0xe0, 0xee, 0x7c, 0xd8, 0x58, 0xa8, 0xe0, 0x31, 0xd8, 0xda, 0xdb, 0xcd, 0x84, - 0x38, 0x93, 0xa6, 0xe0, 0x6e, 0xdb, 0x20, 0x83, 0x37, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, - 0x84, 0x27, 0x28, 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xa2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x3a, 0x6a, 0x20, - 0x2a, 0x6a, 0xa0, 0x02, 0x6a, 0x20, 0xeb, 0xdb, 0xbf, 0x80, 0x85, 0xb0, 0x11, 0xaa, 0x44, 0x10, 0x10, 0x61, 0xae, - 0x0d, 0x1f, 0x50, 0x24, 0x21, 0xe4, 0x0d, 0xa0, 0x62, 0x4a, 0x5e, 0x82, 0xd1, 0x38, 0xbc, 0xde, 0x03, 0xee, 0x97, - 0x96, 0x61, 0xf0, 0x9c, 0x82, 0xc9, 0x7f, 0xeb, 0xf3, 0xa1, 0x7a, 0xb9, 0x3a, 0x08, 0xe1, 0x17, 0x10, 0x2b, 0xc2, - 0xf1, 0x17, 0xbf, 0x00, 0xd9, 0x54, 0x58, 0x1e, 0x1c, 0x48, 0x10, 0xf8, 0x21, 0x8a, 0x70, 0xc0, 0x33, 0xbc, 0xcc, - 0x36, 0x88, 0x9e, 0x9f, 0x95, 0xaa, 0x66, 0x25, 0x83, 0x59, 0x15, 0x9e, 0xc6, 0xd1, 0x35, 0x61, 0x20, 0xb8, 0x50, - 0xbb, 0x6f, 0x10, 0x02, 0x65, 0xcb, 0x8d, 0xa1, 0x4b, 0x4f, 0xc1, 0x7c, 0x34, 0x8e, 0xde, 0x32, 0x78, 0xd2, 0xd6, - 0x98, 0xfc, 0x33, 0x6d, 0x1e, 0xb8, 0x4f, 0xf7, 0xa2, 0x46, 0xe0, 0xa4, 0x4e, 0x51, 0xf2, 0xb7, 0xe4, 0x22, 0x8e, - 0x9a, 0x97, 0x11, 0x6a, 0xc0, 0xbf, 0x0d, 0x8e, 0xba, 0x34, 0xa1, 0xa3, 0x91, 0x0f, 0x7e, 0x93, 0x11, 0xb3, 0xc9, - 0x56, 0x2b, 0x51, 0x11, 0xf4, 0xc4, 0x6e, 0x30, 0x60, 0x25, 0x5e, 0x00, 0xfb, 0x60, 0x39, 0x58, 0xf2, 0x4e, 0xc4, - 0xca, 0x9f, 0x52, 0x18, 0xac, 0x9e, 0x33, 0x84, 0x70, 0x16, 0xc4, 0x6c, 0xfc, 0xcf, 0x67, 0x1a, 0xae, 0x9f, 0x9f, - 0xaf, 0x63, 0x44, 0xa4, 0x0f, 0x22, 0x57, 0x63, 0x47, 0x44, 0x10, 0xb6, 0x4c, 0xf7, 0x5d, 0x99, 0x1f, 0xbc, 0x75, - 0xf5, 0xc0, 0x86, 0x8b, 0x03, 0x03, 0x6a, 0x14, 0x18, 0xad, 0xe0, 0x9c, 0x94, 0x03, 0x07, 0x25, 0x84, 0x66, 0x45, - 0x3c, 0x25, 0x97, 0x10, 0x09, 0x2f, 0x43, 0x5d, 0x30, 0x2c, 0x08, 0x24, 0xa8, 0x29, 0x48, 0x50, 0x99, 0xaf, 0x3d, - 0x82, 0x59, 0xe7, 0x66, 0xb6, 0x53, 0xd4, 0x75, 0x41, 0x7e, 0x7e, 0xd1, 0xf1, 0x08, 0x58, 0xda, 0x83, 0x83, 0x02, - 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, 0xc0, 0x40, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0xda, 0x78, 0x1d, 0x18, 0x5b, - 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x3d, 0x9d, 0x6e, 0x47, 0x48, 0xec, 0x7d, 0xd4, - 0x26, 0xd0, 0x98, 0x23, 0xdd, 0xd5, 0xc6, 0xfc, 0x5a, 0xd3, 0x23, 0x56, 0x93, 0x90, 0x2e, 0x48, 0x97, 0xe7, 0xd3, - 0x9e, 0xc1, 0x15, 0xab, 0x34, 0x72, 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x17, - 0x49, 0xc9, 0x86, 0x61, 0x06, 0x61, 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0xb3, 0x7f, 0x4a, 0x1f, - 0x6c, 0xba, 0xf6, 0xe6, 0x11, 0x40, 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x36, 0x2a, 0xb3, 0xb0, 0x96, 0xb1, 0x95, - 0xdb, 0xf6, 0x18, 0x7b, 0x27, 0xb6, 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x88, 0x75, 0x6d, - 0xc8, 0x46, 0x1b, 0xda, 0x37, 0x4f, 0xc2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x39, 0x2e, 0xc1, 0x21, 0xbc, 0xf0, 0x08, - 0x7f, 0x0b, 0x2c, 0x52, 0x81, 0x19, 0x96, 0xab, 0x15, 0xd4, 0xf3, 0x78, 0x9f, 0x6d, 0x06, 0x27, 0x95, 0x1b, 0x63, - 0x97, 0x76, 0xe2, 0x71, 0xd9, 0x84, 0xc4, 0x19, 0xf4, 0xeb, 0x2b, 0xa2, 0xde, 0x7e, 0x3b, 0x7d, 0xe2, 0xdf, 0x2b, - 0x73, 0x3b, 0x10, 0x1b, 0xd6, 0x1b, 0xac, 0x3e, 0x80, 0x96, 0xbf, 0xca, 0xfc, 0x43, 0x65, 0xc1, 0x4d, 0x82, 0xda, - 0x5c, 0xc4, 0x2e, 0xeb, 0x22, 0x46, 0x6a, 0x8b, 0xbb, 0x43, 0x88, 0x7f, 0xb5, 0x15, 0xc5, 0x80, 0x27, 0x15, 0xff, - 0x1c, 0xa3, 0x2e, 0x84, 0xa2, 0xb6, 0x1e, 0x36, 0x40, 0x69, 0x97, 0xeb, 0x4a, 0x8c, 0x0c, 0x09, 0xe4, 0x5b, 0x17, - 0x5e, 0xd0, 0x9c, 0x44, 0x0a, 0xe4, 0xe4, 0x20, 0x2a, 0x69, 0xb6, 0x21, 0xcc, 0x75, 0xb7, 0x70, 0xcc, 0x5c, 0x6d, - 0xd0, 0x22, 0x7e, 0x01, 0xec, 0x0c, 0x37, 0x92, 0xa5, 0x03, 0x9f, 0xaa, 0x81, 0xcf, 0xaf, 0xb9, 0xa1, 0x28, 0x0a, - 0xf5, 0xde, 0xd9, 0x47, 0xe6, 0xe0, 0x77, 0x1a, 0x88, 0x8f, 0xd4, 0xe9, 0x48, 0x36, 0x42, 0xad, 0x39, 0x3b, 0x5e, - 0xb6, 0x19, 0x61, 0x50, 0xd8, 0xe8, 0x7d, 0x15, 0xb2, 0x8a, 0x9d, 0x9d, 0x8a, 0x60, 0x4e, 0x5f, 0x54, 0xe5, 0x9c, - 0xca, 0x2d, 0xa3, 0x5a, 0x6a, 0x1a, 0x20, 0xc2, 0x95, 0x4f, 0x24, 0xef, 0x33, 0x13, 0xfe, 0xc1, 0x60, 0x5c, 0x3d, - 0x52, 0xf8, 0xfb, 0x5d, 0xb1, 0x43, 0xb6, 0xa3, 0xc3, 0x6d, 0x04, 0xcd, 0x0b, 0x15, 0x3c, 0xe0, 0xa8, 0x64, 0x09, - 0x91, 0x22, 0x97, 0xfb, 0xaa, 0x66, 0xca, 0x76, 0x1d, 0x21, 0x84, 0xb4, 0xc7, 0x59, 0x37, 0xb4, 0x7a, 0xe8, 0x91, - 0x2a, 0xca, 0xe1, 0x16, 0xcd, 0x75, 0x01, 0x2a, 0x8c, 0x40, 0xba, 0xfc, 0xcc, 0xee, 0x52, 0x09, 0xd1, 0xcb, 0xd7, - 0x2e, 0x84, 0xb1, 0xb3, 0xb2, 0xc4, 0x85, 0x19, 0xb5, 0x0d, 0xa3, 0xeb, 0x36, 0x86, 0xb3, 0x81, 0x31, 0xd3, 0xa0, - 0xa4, 0x05, 0xa1, 0xae, 0xbb, 0xf4, 0x22, 0x33, 0x81, 0x1e, 0x73, 0x42, 0x1b, 0x0c, 0x4f, 0x89, 0x06, 0xcb, 0xa6, - 0x02, 0x2c, 0xf8, 0x96, 0x45, 0x6a, 0x6d, 0x36, 0x59, 0xfc, 0x51, 0xc7, 0xe6, 0x69, 0xbf, 0xbc, 0x62, 0x9e, 0x0b, - 0x47, 0xdd, 0x9e, 0x67, 0x3e, 0x1e, 0xdd, 0xd3, 0x37, 0x57, 0x2f, 0x5e, 0xbe, 0x7e, 0xb5, 0x5a, 0xb5, 0x59, 0xb3, - 0x7d, 0x82, 0x7f, 0xd2, 0x65, 0x3c, 0xd8, 0x32, 0x0a, 0xd0, 0xc1, 0xc1, 0x3e, 0x37, 0x2e, 0x3c, 0x9f, 0xf9, 0x1c, - 0xe2, 0x06, 0xe9, 0x01, 0xce, 0x8a, 0x32, 0x26, 0xc8, 0x6d, 0xd4, 0x8b, 0xee, 0x22, 0x50, 0x42, 0x55, 0xe4, 0xef, - 0xc3, 0xe6, 0xec, 0xf7, 0x20, 0x30, 0x11, 0xd4, 0x87, 0x08, 0x20, 0x10, 0xaf, 0x14, 0x17, 0x84, 0xf9, 0x04, 0x88, - 0xe2, 0xbd, 0x00, 0xce, 0xd4, 0x44, 0xad, 0x5a, 0xa8, 0xb8, 0x00, 0x92, 0x68, 0xc3, 0x51, 0xd2, 0x23, 0x13, 0xc0, - 0x1b, 0x82, 0x52, 0xda, 0x5f, 0xdd, 0xdc, 0xb9, 0x4b, 0xe5, 0xa8, 0xd7, 0x4a, 0x73, 0x3c, 0x75, 0x9f, 0x53, 0xf8, - 0x9c, 0x76, 0xfd, 0xe9, 0x20, 0x0e, 0x73, 0xbc, 0x20, 0xe2, 0xd0, 0x3f, 0x8b, 0xb8, 0x9c, 0x17, 0xec, 0x0b, 0x97, - 0x0b, 0x95, 0x2e, 0x6f, 0x53, 0x99, 0xdc, 0x36, 0x47, 0x87, 0x71, 0x91, 0xdc, 0x36, 0x55, 0x72, 0x8b, 0xf0, 0x5d, - 0x2a, 0x93, 0x3b, 0x9b, 0x72, 0xd7, 0x54, 0x70, 0xf3, 0x85, 0x05, 0x1c, 0x8a, 0xb6, 0x68, 0x63, 0xb1, 0x59, 0xd4, - 0xa6, 0xb8, 0xa2, 0x01, 0x06, 0xff, 0xbe, 0x63, 0xe3, 0x87, 0xe1, 0x4b, 0x70, 0x69, 0xd2, 0x44, 0x7e, 0x02, 0xe9, - 0xa7, 0x55, 0x19, 0xb8, 0x4f, 0x49, 0xab, 0x3b, 0xbd, 0x10, 0xcd, 0x76, 0xb7, 0xd1, 0x98, 0xc2, 0xde, 0xcd, 0x48, - 0xee, 0x8b, 0x4d, 0x1b, 0x26, 0xbe, 0xce, 0x7e, 0xb6, 0x5a, 0xed, 0xe7, 0xc8, 0x6c, 0xb8, 0x09, 0x8b, 0x75, 0x7f, - 0x3a, 0xc0, 0x2d, 0xfc, 0x3c, 0x43, 0x68, 0xc9, 0xfa, 0xd3, 0x01, 0x61, 0xfd, 0x69, 0xa3, 0x3d, 0xb0, 0x86, 0x76, - 0x66, 0x2b, 0xae, 0x21, 0x84, 0xe6, 0x74, 0x70, 0x64, 0x4a, 0x4a, 0x97, 0x6f, 0xbf, 0x68, 0x15, 0xd0, 0x4f, 0xd5, - 0x82, 0x97, 0x49, 0xdc, 0x81, 0xbe, 0xe8, 0x85, 0x7d, 0xba, 0xb5, 0x20, 0xc7, 0x47, 0x95, 0xab, 0x3d, 0x45, 0xd8, - 0xf4, 0xa4, 0x0e, 0x8b, 0x43, 0xd3, 0x8c, 0xeb, 0x52, 0xba, 0xef, 0x50, 0x33, 0xf2, 0xd1, 0xc1, 0x02, 0x10, 0xa4, - 0x82, 0x47, 0x56, 0xb8, 0x70, 0x4a, 0x21, 0x5c, 0x1c, 0x54, 0xb6, 0x60, 0x92, 0x93, 0x56, 0x37, 0x37, 0x96, 0xfe, - 0xb9, 0x8b, 0x68, 0x4a, 0x31, 0x25, 0x99, 0x2f, 0x99, 0x1b, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x00, - 0x8f, 0x08, 0xc4, 0x43, 0xea, 0x16, 0xc6, 0xc0, 0x2b, 0x9e, 0x36, 0x8b, 0x3e, 0x1b, 0xa0, 0xa3, 0x63, 0x4c, 0xfb, - 0x7f, 0x65, 0xf3, 0x36, 0x3c, 0x16, 0xf8, 0xd7, 0x80, 0x4c, 0x9b, 0xb2, 0x4c, 0x10, 0x90, 0x30, 0x6a, 0xca, 0x43, - 0xd8, 0x4b, 0x08, 0x67, 0xb6, 0x62, 0xd6, 0x67, 0x83, 0xe6, 0xb4, 0xac, 0xd8, 0xf1, 0x15, 0x1b, 0xb2, 0x4c, 0xb0, - 0x15, 0x1b, 0xae, 0x62, 0xf8, 0x3a, 0x83, 0x01, 0x41, 0x08, 0x00, 0x06, 0x00, 0xd0, 0x28, 0x88, 0xe6, 0x8b, 0x15, - 0xf1, 0x9b, 0xdd, 0xde, 0xe3, 0xb7, 0xc0, 0x02, 0xad, 0xb6, 0xff, 0x77, 0xa1, 0x0c, 0xd8, 0x53, 0x16, 0x26, 0x66, - 0x6e, 0x61, 0x55, 0x74, 0x00, 0x95, 0x12, 0x61, 0x0a, 0x03, 0x99, 0xfd, 0xcc, 0x40, 0x2d, 0xd0, 0x1a, 0xe4, 0x7d, - 0x3d, 0x68, 0x66, 0x70, 0xc4, 0xc0, 0x3b, 0x34, 0x64, 0x6a, 0x8c, 0x09, 0xe3, 0x1c, 0xa6, 0x98, 0x19, 0xf0, 0x4c, - 0xd3, 0xd6, 0x5a, 0x1a, 0x59, 0xae, 0x97, 0xf7, 0xfe, 0xd1, 0xb1, 0xea, 0x17, 0xcd, 0xf6, 0x00, 0xed, 0x13, 0x62, - 0x3f, 0x06, 0xb0, 0xc9, 0x5c, 0x6a, 0xc3, 0x7c, 0x1f, 0x75, 0x52, 0xfb, 0x09, 0x7f, 0x06, 0x6b, 0xb3, 0x03, 0x40, - 0x47, 0x86, 0xcd, 0xfa, 0xcb, 0x9a, 0xca, 0xeb, 0xe3, 0xce, 0x28, 0x95, 0xbb, 0xde, 0x9d, 0x0e, 0x34, 0xc5, 0xa1, - 0xb7, 0x1e, 0x2e, 0x1f, 0xea, 0x21, 0x60, 0xc6, 0x60, 0x6e, 0x99, 0xd1, 0xf7, 0x42, 0x24, 0x17, 0x44, 0x62, 0x69, - 0xb0, 0x86, 0xc1, 0xde, 0x3a, 0x38, 0x30, 0xd5, 0x58, 0x03, 0x9e, 0x27, 0x45, 0x20, 0x18, 0xf8, 0x08, 0xca, 0x80, - 0x26, 0xca, 0xdc, 0x86, 0x93, 0x8f, 0xcc, 0xfd, 0xc2, 0xe5, 0xed, 0x63, 0xe1, 0xb4, 0xad, 0xe6, 0x7a, 0xbc, 0x2c, - 0x70, 0x57, 0xde, 0x4b, 0x5a, 0x05, 0x37, 0xb2, 0x37, 0x79, 0xca, 0xdc, 0xad, 0xfb, 0x52, 0x9d, 0xdd, 0xcd, 0x74, - 0xca, 0x66, 0x3a, 0xdb, 0xcd, 0x84, 0x9a, 0x99, 0x6f, 0x59, 0x45, 0x9a, 0x93, 0x35, 0x51, 0x73, 0x2a, 0x7e, 0xa2, - 0x73, 0xd0, 0x8e, 0x72, 0x7b, 0xaf, 0x0a, 0x27, 0x57, 0x4e, 0x2e, 0xf7, 0x73, 0x43, 0x5c, 0x91, 0xb9, 0x50, 0x87, - 0x00, 0x2f, 0x2f, 0xca, 0xc7, 0x07, 0xb8, 0x14, 0xbf, 0xca, 0x91, 0x8b, 0x72, 0x2a, 0xa4, 0x96, 0x82, 0x45, 0xc8, - 0xa0, 0xaa, 0x8b, 0x81, 0xbd, 0xb4, 0x7b, 0x4f, 0xf4, 0x78, 0xbf, 0x8a, 0x98, 0x37, 0x30, 0xcf, 0x7d, 0x7c, 0x4f, - 0x53, 0xec, 0xd4, 0xc4, 0x19, 0xf9, 0x90, 0xc5, 0x39, 0xc8, 0x66, 0xfd, 0xea, 0xb5, 0xdf, 0x46, 0x1b, 0x17, 0xcd, - 0x58, 0xf4, 0xcc, 0x13, 0x27, 0x3f, 0x14, 0xc6, 0x38, 0xc0, 0x3a, 0xfa, 0x23, 0x4c, 0x2d, 0xd8, 0xb3, 0xc4, 0x53, - 0xe8, 0xe4, 0xd6, 0xa6, 0xdd, 0x85, 0x69, 0x77, 0x26, 0xad, 0x03, 0xe5, 0x80, 0x34, 0xbb, 0x32, 0x9d, 0x3b, 0xff, - 0x7d, 0x07, 0x2f, 0xdd, 0xae, 0x21, 0x12, 0xf7, 0xfc, 0x91, 0x31, 0x86, 0x78, 0x03, 0x36, 0xa2, 0xea, 0xe0, 0xe0, - 0x0f, 0xe7, 0x7d, 0x5b, 0xc9, 0x7d, 0xdf, 0x0a, 0x07, 0xb6, 0xc1, 0x54, 0xba, 0xbc, 0x91, 0xcc, 0x16, 0x60, 0xd7, - 0xb9, 0xff, 0x8d, 0x78, 0xf8, 0x22, 0x64, 0x5a, 0xac, 0xab, 0xf8, 0x2b, 0x39, 0x2a, 0x3d, 0x44, 0x35, 0x44, 0x20, - 0xad, 0xac, 0x4b, 0x43, 0xd3, 0xd1, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x81, 0x7d, 0x91, 0x5b, 0x27, - 0xf0, 0x68, 0x61, 0x8d, 0xa1, 0xb9, 0x2b, 0xbd, 0x93, 0x6c, 0x40, 0xd4, 0xfa, 0xb8, 0x43, 0x49, 0x24, 0x16, 0xd5, - 0x5d, 0x08, 0x87, 0xbb, 0x10, 0xcc, 0xcb, 0xa0, 0x6d, 0x10, 0xbb, 0xdd, 0x05, 0x6d, 0x03, 0xa7, 0x6e, 0x1b, 0xb8, - 0x3d, 0x18, 0x2c, 0xec, 0x7d, 0x78, 0x39, 0x96, 0x63, 0xe1, 0xaf, 0xc9, 0xec, 0x03, 0x40, 0xa0, 0xf6, 0x61, 0xc5, - 0x13, 0x07, 0x82, 0xc4, 0x19, 0x8e, 0xbe, 0xe7, 0xec, 0xc6, 0x5a, 0x0e, 0xcf, 0xe6, 0x0b, 0xcd, 0x46, 0xe6, 0x8e, - 0x1a, 0x54, 0x7c, 0x75, 0x3f, 0xaf, 0x9f, 0xb2, 0x9a, 0x6e, 0xfc, 0x1e, 0x84, 0x91, 0x70, 0xca, 0x0e, 0xa3, 0x90, - 0xb0, 0xc1, 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0x6d, 0xc2, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x08, 0xdb, - 0x78, 0x63, 0x41, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x45, 0xcd, 0xa8, 0xc1, 0x52, - 0x17, 0x94, 0xd9, 0x47, 0x18, 0x57, 0x17, 0x27, 0x26, 0x4e, 0x7b, 0xa9, 0x57, 0xff, 0x2d, 0x03, 0x03, 0x7c, 0x01, - 0x5e, 0x62, 0x61, 0x74, 0xd7, 0xbe, 0x6e, 0x40, 0x7d, 0xd9, 0x60, 0x03, 0xb4, 0x5a, 0xb5, 0xca, 0x67, 0xa0, 0xdc, - 0x35, 0x97, 0xb0, 0xd7, 0x5c, 0xc2, 0x5d, 0x73, 0x09, 0x7f, 0xcd, 0x25, 0xcc, 0x35, 0x97, 0xf0, 0xd7, 0x5c, 0x1e, - 0x84, 0x9f, 0x82, 0x38, 0x8e, 0x31, 0x87, 0xb8, 0x8a, 0xda, 0x46, 0xc6, 0x83, 0x0b, 0xcf, 0x7d, 0x96, 0xa8, 0x72, - 0xf9, 0xc3, 0x18, 0x72, 0x5b, 0xb6, 0x12, 0xc6, 0x6d, 0x8a, 0x29, 0x88, 0x9c, 0x7e, 0x70, 0x50, 0xba, 0x3b, 0x83, - 0x8f, 0x7a, 0xca, 0xf1, 0xd2, 0x3a, 0xd1, 0xfe, 0x01, 0x3a, 0x79, 0xf3, 0xeb, 0x63, 0x2a, 0xd7, 0x44, 0x38, 0x93, - 0xfb, 0xfd, 0xb6, 0xa7, 0x14, 0x9f, 0x32, 0x13, 0x9e, 0x9c, 0x27, 0xda, 0x88, 0x20, 0x08, 0x51, 0xa2, 0x70, 0x46, - 0xa4, 0xdd, 0xef, 0xde, 0x15, 0xde, 0xa8, 0xa2, 0xbc, 0x59, 0xc9, 0xe3, 0x1c, 0x9c, 0xd8, 0x8d, 0x15, 0x06, 0xea, - 0x82, 0x0b, 0x41, 0x66, 0x12, 0xfe, 0x68, 0xe6, 0x96, 0x9c, 0x65, 0x65, 0xd2, 0xc7, 0x66, 0x6e, 0x08, 0x58, 0x41, - 0xf6, 0x3d, 0xcc, 0x96, 0xb7, 0x29, 0xc5, 0x77, 0x69, 0x86, 0x87, 0xf2, 0x36, 0x2d, 0x42, 0x5b, 0x10, 0x7f, 0xf1, - 0x37, 0x8e, 0x23, 0x41, 0xc1, 0xdf, 0x27, 0xe2, 0x62, 0x8f, 0x6f, 0x78, 0x01, 0x2e, 0x33, 0x63, 0x51, 0x9d, 0x32, - 0xfc, 0x0d, 0x4b, 0x78, 0x08, 0x4e, 0xa6, 0xb1, 0x22, 0xf7, 0x38, 0xb0, 0x13, 0x92, 0x80, 0xc3, 0xd5, 0xed, 0x15, - 0xff, 0x0a, 0x17, 0x5f, 0xa5, 0xb3, 0x65, 0x73, 0x28, 0x6f, 0x23, 0x5c, 0x90, 0x37, 0xf0, 0xfa, 0xd6, 0xff, 0xcb, - 0xde, 0xdb, 0x36, 0xb7, 0x6d, 0x64, 0xeb, 0xa2, 0x7f, 0x45, 0x62, 0xd9, 0x0c, 0x60, 0x36, 0x29, 0xca, 0xe7, 0xcc, - 0x54, 0x5d, 0x50, 0x6d, 0x96, 0x63, 0xc7, 0x13, 0x67, 0x22, 0xdb, 0x63, 0x79, 0x32, 0xc9, 0xb0, 0x78, 0x19, 0x08, - 0x68, 0x0a, 0x70, 0x40, 0x80, 0x01, 0x40, 0x89, 0x34, 0x89, 0xff, 0x7e, 0x6a, 0xad, 0xd5, 0xaf, 0x20, 0x28, 0x7b, - 0xf6, 0x3e, 0xfb, 0xd3, 0xbd, 0x5f, 0x6c, 0xb1, 0xd1, 0x68, 0xf4, 0x7b, 0xaf, 0x5e, 0x2f, 0xcf, 0xd3, 0x93, 0xb1, - 0xba, 0x3d, 0x70, 0xd6, 0xa5, 0x14, 0x1d, 0x6f, 0x8a, 0xc3, 0xdb, 0xf3, 0xd9, 0x7e, 0x1b, 0x44, 0x6c, 0x17, 0x64, - 0x58, 0xeb, 0xa4, 0xe1, 0x3f, 0xd1, 0xd6, 0xc1, 0x62, 0x84, 0xfd, 0x5f, 0xd6, 0x03, 0x2f, 0x21, 0x35, 0x14, 0xb8, - 0x18, 0x6c, 0x38, 0x5a, 0xdb, 0x65, 0x1a, 0xb8, 0xa9, 0x41, 0xaf, 0xef, 0x29, 0x44, 0x79, 0xc9, 0x68, 0x6e, 0x04, - 0xeb, 0xc6, 0x90, 0x8b, 0xc3, 0x71, 0xb3, 0x1c, 0xf2, 0x92, 0xa6, 0xd3, 0x20, 0x94, 0xee, 0x2c, 0x6b, 0x48, 0xa2, - 0xec, 0x83, 0x50, 0xbb, 0xb6, 0xec, 0xb7, 0x81, 0xed, 0xcb, 0x1f, 0x0d, 0x63, 0xff, 0x62, 0xf9, 0x4c, 0x48, 0x17, - 0xf1, 0x1c, 0x04, 0x51, 0xfb, 0x79, 0x36, 0xdc, 0xf8, 0x17, 0xeb, 0x67, 0x42, 0xf9, 0x8d, 0xe7, 0xb6, 0x1c, 0x52, - 0x67, 0x2d, 0x7c, 0x61, 0x3c, 0x3c, 0xb8, 0x32, 0xb4, 0x1d, 0x0e, 0x42, 0xff, 0x6d, 0xd6, 0x08, 0x6e, 0x6c, 0x68, - 0x9f, 0x2f, 0x7c, 0xd8, 0xda, 0x68, 0xac, 0x29, 0xa6, 0x5b, 0xe8, 0xdf, 0x64, 0xb6, 0xb4, 0xa7, 0x51, 0xc9, 0x8b, - 0x53, 0xd3, 0x88, 0x85, 0x30, 0x60, 0xe8, 0x27, 0xf3, 0x01, 0x54, 0x73, 0xc7, 0x23, 0x90, 0xc9, 0x07, 0x7a, 0xb0, - 0x26, 0xb5, 0xea, 0xaf, 0x61, 0x26, 0xff, 0x8f, 0x54, 0x58, 0x8c, 0xee, 0xb6, 0x61, 0xa6, 0xfe, 0x88, 0xe4, 0x1f, - 0x2c, 0xe7, 0xbb, 0xd4, 0x0b, 0xb5, 0x1f, 0x0b, 0x2b, 0x30, 0x28, 0x51, 0x35, 0xa0, 0x07, 0x22, 0xa8, 0xca, 0x20, - 0xcd, 0xb0, 0x3a, 0x07, 0xfd, 0xee, 0x69, 0xd5, 0x91, 0x1c, 0xd2, 0x5a, 0x0d, 0xa9, 0x60, 0xaa, 0xd4, 0x20, 0x3f, - 0x1c, 0xee, 0x52, 0xa6, 0xcb, 0x80, 0x4b, 0xfa, 0x5d, 0xaa, 0x94, 0xc2, 0x7f, 0x22, 0x00, 0x9d, 0x83, 0x7b, 0x7c, - 0x39, 0x06, 0xd2, 0x0c, 0x0b, 0xbf, 0x35, 0x3b, 0xbe, 0x26, 0xe1, 0x36, 0x09, 0x2e, 0x06, 0x38, 0x47, 0x57, 0x61, - 0x79, 0x97, 0x42, 0x04, 0x55, 0x09, 0xf5, 0xad, 0x4c, 0x83, 0xd2, 0x56, 0x83, 0xb0, 0x26, 0xa1, 0xce, 0x24, 0x1b, - 0x95, 0xb6, 0x1b, 0x85, 0xd9, 0x22, 0xae, 0x67, 0x84, 0x35, 0x67, 0x33, 0xd5, 0xc0, 0xa4, 0xe1, 0xb8, 0x69, 0xb4, - 0x16, 0x15, 0x6a, 0x0a, 0xf3, 0x1a, 0x57, 0x95, 0xaa, 0xee, 0xe6, 0xd4, 0x52, 0x5a, 0xb6, 0x57, 0xdd, 0x24, 0x1b, - 0x72, 0x19, 0xca, 0x30, 0xd8, 0xc8, 0x11, 0x4c, 0x20, 0x49, 0xce, 0xfc, 0x8d, 0xfc, 0x43, 0x6d, 0xba, 0x16, 0x30, - 0xc7, 0x98, 0x65, 0xc3, 0x82, 0x5e, 0x81, 0x7b, 0xa0, 0x95, 0x9e, 0x4f, 0xb3, 0x8b, 0x3c, 0x48, 0x86, 0x85, 0x5e, - 0x36, 0x19, 0xff, 0x53, 0x18, 0x69, 0x32, 0x63, 0x25, 0x8b, 0x6c, 0x57, 0xa7, 0xc4, 0x79, 0x9c, 0xc0, 0xf6, 0x68, - 0x7a, 0xcb, 0xf7, 0x19, 0x44, 0x05, 0x81, 0x82, 0x19, 0xf3, 0x65, 0x17, 0xcf, 0x7d, 0x9f, 0x59, 0xa6, 0xee, 0xc3, - 0xc1, 0x98, 0xb1, 0xfd, 0x7e, 0x3f, 0xef, 0xf7, 0xd5, 0x7c, 0xeb, 0xf7, 0x93, 0x17, 0xe6, 0x6f, 0x0f, 0x18, 0x14, - 0xe4, 0x44, 0x34, 0x15, 0x22, 0xf8, 0x87, 0xe4, 0x19, 0x92, 0xd1, 0x1d, 0xf7, 0xb9, 0xe5, 0x6c, 0x59, 0x1d, 0x81, - 0x60, 0x1e, 0x0e, 0x97, 0x0a, 0xec, 0x5a, 0xa2, 0x48, 0xc8, 0xf2, 0x9f, 0x81, 0xf1, 0xcc, 0x7d, 0x80, 0x25, 0x03, - 0x10, 0xb6, 0xca, 0xd3, 0xf5, 0x9e, 0xaf, 0x82, 0x77, 0x3a, 0xde, 0x35, 0x56, 0x64, 0x20, 0x6e, 0x81, 0x8d, 0x58, - 0x6b, 0x0f, 0xc8, 0x99, 0x02, 0x1c, 0x2f, 0x0e, 0x87, 0x73, 0xf9, 0x4b, 0x37, 0x5b, 0x27, 0x50, 0x29, 0x70, 0x7b, - 0x74, 0x72, 0xf0, 0xdf, 0x81, 0x66, 0x50, 0x0e, 0xf3, 0x7a, 0xfb, 0x3b, 0x73, 0xf2, 0xd3, 0x53, 0xfc, 0x13, 0x1e, - 0xa2, 0xd3, 0x6f, 0xf7, 0xe6, 0x0f, 0x8a, 0xca, 0xc3, 0x41, 0x2d, 0xfe, 0x73, 0xce, 0x2b, 0xf8, 0x85, 0x6f, 0x02, - 0xb3, 0xc9, 0xd4, 0x3b, 0xf9, 0x26, 0xcf, 0x99, 0x7a, 0x8d, 0x57, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xed, - 0xc8, 0x89, 0x76, 0xca, 0x31, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, - 0x96, 0x78, 0x96, 0xce, 0x2f, 0x27, 0x75, 0xb9, 0xd3, 0x8a, 0xa7, 0x3d, 0xb0, 0xb8, 0xad, 0xc1, 0x0b, 0xe0, 0xde, - 0x62, 0xeb, 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, - 0x40, 0x30, 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, - 0x77, 0xf9, 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0x65, 0x6f, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, - 0x52, 0x3c, 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfc, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xbd, 0x7d, - 0x72, 0x61, 0x20, 0x81, 0xa6, 0x03, 0xf0, 0xe3, 0x55, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, - 0x05, 0xf7, 0xe9, 0x67, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa3, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x3c, - 0xfb, 0xa6, 0x02, 0x72, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, - 0x53, 0x71, 0x75, 0xa9, 0xd3, 0xc5, 0x8b, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, - 0x07, 0xf1, 0xb6, 0xb6, 0xa3, 0x3f, 0x76, 0x10, 0xe9, 0xb8, 0x27, 0x17, 0xea, 0x4b, 0x48, 0x25, 0x17, 0xea, 0x06, - 0x62, 0x17, 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0x75, 0x8d, 0x82, 0x95, 0x80, 0x33, 0xed, 0x1a, 0x0c, 0x36, 0xb0, - 0x6e, 0x59, 0x06, 0x7f, 0xc3, 0x35, 0x4d, 0xe0, 0x86, 0x45, 0xd6, 0x7b, 0x83, 0xad, 0x74, 0x0d, 0x8e, 0x96, 0x89, - 0x73, 0x29, 0xc9, 0xca, 0x16, 0x19, 0x57, 0x8f, 0x42, 0xaa, 0xa6, 0xfb, 0x5b, 0x51, 0x3f, 0x08, 0x91, 0x07, 0xab, - 0x94, 0x45, 0xc5, 0x0a, 0x64, 0xf6, 0xe0, 0x1f, 0x21, 0x23, 0x47, 0x39, 0x70, 0x14, 0xfa, 0x5b, 0x13, 0xe8, 0x3c, - 0x3f, 0x85, 0x3a, 0x8f, 0x04, 0x5b, 0xa9, 0x87, 0xc2, 0xca, 0x0b, 0x88, 0x0e, 0xb6, 0x30, 0x56, 0x79, 0x12, 0x2a, - 0x36, 0x65, 0x22, 0x8f, 0x83, 0x5a, 0x02, 0xc6, 0x0a, 0x82, 0x39, 0xcb, 0xa5, 0x0b, 0x52, 0xd5, 0xe8, 0x61, 0x91, - 0xb9, 0x9f, 0x0a, 0xca, 0xff, 0x54, 0xe5, 0x84, 0xeb, 0xcb, 0x10, 0xe0, 0x68, 0x9f, 0x82, 0x28, 0x31, 0xd6, 0x2f, - 0x5a, 0xbc, 0x93, 0x99, 0xb3, 0xa9, 0xed, 0x25, 0xc8, 0xd8, 0x0e, 0xbf, 0x42, 0x68, 0xb5, 0x50, 0x64, 0xd1, 0x70, - 0xc1, 0x74, 0x7b, 0x4a, 0xab, 0xee, 0x61, 0xc3, 0xb3, 0xd2, 0x43, 0xa5, 0xbe, 0x8d, 0x09, 0x2c, 0xab, 0x94, 0xe1, - 0xdb, 0x09, 0x55, 0x27, 0x06, 0x15, 0xeb, 0x86, 0x2d, 0xe1, 0x10, 0x8b, 0x49, 0x63, 0x9d, 0x0d, 0x78, 0xc4, 0x12, - 0xf8, 0x67, 0xc3, 0xc7, 0x6c, 0xc9, 0xa3, 0xc9, 0xe6, 0x6a, 0xd9, 0xef, 0x97, 0x5e, 0xe8, 0xd5, 0xb3, 0xec, 0x69, - 0x34, 0x9f, 0xe5, 0x73, 0x1f, 0x15, 0x17, 0x93, 0xc1, 0x60, 0xe3, 0x67, 0xc3, 0x21, 0x4b, 0x86, 0xc3, 0x49, 0xf6, - 0x14, 0x5e, 0x7b, 0xca, 0x23, 0xb5, 0xa4, 0x92, 0xab, 0x0c, 0xf6, 0xf7, 0x01, 0x8f, 0x7c, 0xd6, 0xf9, 0x69, 0xd9, - 0x74, 0xe9, 0x7e, 0x66, 0xc7, 0x5d, 0xe8, 0x0e, 0xb0, 0xf1, 0xb6, 0x41, 0x47, 0xfe, 0xf5, 0x0e, 0x29, 0x75, 0x93, - 0x01, 0xd8, 0x8d, 0x06, 0x38, 0x64, 0xaa, 0x97, 0x22, 0xab, 0x97, 0x32, 0xd5, 0x4b, 0xb2, 0x72, 0x09, 0x16, 0x12, - 0x53, 0xe5, 0x36, 0xb2, 0x72, 0xcb, 0x86, 0xeb, 0xe1, 0x60, 0x6b, 0xc5, 0x65, 0x73, 0x07, 0xf7, 0x85, 0x15, 0x05, - 0xfe, 0xdf, 0xb2, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x35, 0x3a, 0x26, 0xc1, 0x05, 0xe2, 0x9e, 0xdd, 0x82, 0x1d, 0x16, - 0xfe, 0x82, 0xeb, 0xe4, 0x98, 0xed, 0xf0, 0x51, 0xe8, 0x15, 0xec, 0xd6, 0x27, 0xa0, 0x5d, 0xb0, 0x35, 0x40, 0x36, - 0xb6, 0xc5, 0x47, 0x77, 0x87, 0xc3, 0xb5, 0xe7, 0xb3, 0x07, 0xfc, 0x71, 0x7e, 0x77, 0x38, 0xec, 0x3c, 0xa3, 0xde, - 0xbb, 0xe1, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xcd, 0x15, 0x8f, 0x27, 0x83, 0xc1, 0x8d, 0xbf, 0xe0, 0xf5, 0xec, 0x06, - 0xb4, 0x03, 0xe7, 0x0b, 0xa9, 0x6b, 0xf6, 0x6e, 0x79, 0xe6, 0x2d, 0x70, 0x6c, 0x6e, 0xe1, 0xe8, 0xed, 0xf7, 0xbd, - 0x3b, 0x1e, 0x79, 0xb7, 0xa4, 0x62, 0x5a, 0x71, 0xc5, 0xf1, 0xb6, 0xc5, 0xfd, 0x74, 0xc5, 0x43, 0x78, 0x84, 0x55, - 0x99, 0xde, 0x04, 0xef, 0x7d, 0xb6, 0xd2, 0x2c, 0x70, 0x0f, 0x98, 0x63, 0x4d, 0x76, 0x42, 0x33, 0xf1, 0x57, 0xd8, - 0x3f, 0x37, 0xaa, 0x7f, 0x68, 0xfe, 0x97, 0xba, 0x9f, 0xc0, 0xed, 0x8b, 0x2c, 0x48, 0xec, 0x3d, 0xbf, 0x61, 0xf7, - 0xdc, 0xb0, 0xcd, 0x9e, 0x99, 0xb2, 0x4f, 0x94, 0x1a, 0x3f, 0x52, 0xea, 0xda, 0x32, 0xac, 0x64, 0xee, 0xbe, 0x8c, - 0xc0, 0xe1, 0x80, 0xfc, 0x74, 0x87, 0x38, 0x08, 0xad, 0x9b, 0xac, 0xe6, 0x8a, 0x72, 0x2e, 0xb4, 0x65, 0xe6, 0xe5, - 0xc0, 0x62, 0x96, 0x52, 0x68, 0x2c, 0x00, 0x10, 0x4c, 0x0a, 0xad, 0xbd, 0x97, 0x01, 0xe4, 0x04, 0x0d, 0x7f, 0x6c, - 0xae, 0x8a, 0xb2, 0x96, 0x2d, 0x09, 0x51, 0xb6, 0xeb, 0xe1, 0x25, 0x42, 0xa6, 0xf5, 0xfb, 0xe7, 0x44, 0xb2, 0x36, - 0xa9, 0xae, 0x6a, 0xb4, 0x04, 0x54, 0x64, 0x09, 0x98, 0xf8, 0x95, 0xe6, 0x13, 0x80, 0x27, 0x1d, 0x0f, 0xaa, 0xa7, - 0xbc, 0x66, 0x82, 0xc8, 0x36, 0x2a, 0x7f, 0x52, 0xbc, 0x40, 0x32, 0x82, 0xe2, 0x69, 0xad, 0x32, 0x16, 0x86, 0x79, - 0xa0, 0x80, 0xbc, 0x7b, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, - 0xe8, 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x39, 0x89, 0xae, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, - 0x67, 0xd1, 0xd3, 0x6a, 0x3e, 0x21, 0x25, 0xd9, 0xe1, 0x90, 0x8d, 0xaa, 0xba, 0x58, 0x4f, 0x43, 0xf9, 0xd3, 0x43, - 0xf0, 0xf5, 0x82, 0x7a, 0x4d, 0x56, 0xa9, 0x7e, 0x4a, 0x95, 0xf2, 0xa2, 0xe1, 0xa5, 0xff, 0xb4, 0x92, 0xfb, 0x1e, - 0x90, 0xd6, 0xf2, 0x92, 0xcb, 0xf7, 0x23, 0xc4, 0x18, 0xf1, 0x03, 0xaf, 0xe4, 0x11, 0x0b, 0xd5, 0x14, 0xae, 0x79, - 0x84, 0x20, 0x6f, 0x99, 0x0e, 0xfe, 0xd6, 0x13, 0xa7, 0xfb, 0x13, 0xa5, 0x5d, 0x7c, 0x61, 0x51, 0xf7, 0x64, 0x6d, - 0xdd, 0x80, 0x1c, 0x6c, 0x98, 0x2e, 0x0a, 0xb2, 0x4d, 0x69, 0x04, 0x6d, 0xb4, 0x1c, 0xd8, 0x70, 0x2a, 0xb5, 0xe1, - 0xcc, 0x35, 0x04, 0xf7, 0xf9, 0x79, 0x3a, 0x5a, 0xc0, 0x87, 0x54, 0xb7, 0x97, 0xf8, 0xf9, 0xb0, 0xe1, 0x11, 0x90, - 0xd9, 0x11, 0x9f, 0xd9, 0x44, 0xd2, 0x49, 0x9d, 0x2b, 0x60, 0xb7, 0xb3, 0x6b, 0x90, 0x23, 0x66, 0xee, 0x2b, 0x54, - 0xdf, 0xa2, 0x01, 0x57, 0xc6, 0xda, 0xd7, 0x24, 0x63, 0xe1, 0x55, 0x39, 0x0d, 0x07, 0x00, 0x43, 0x97, 0xd1, 0xd7, - 0x96, 0x9b, 0x2c, 0xfb, 0xb9, 0x80, 0x20, 0x88, 0x92, 0x78, 0x7c, 0xc0, 0xfb, 0xb2, 0x1a, 0x6a, 0x94, 0x7c, 0x2c, - 0x1b, 0xa9, 0xf4, 0x4a, 0xf4, 0x77, 0x63, 0x2e, 0x31, 0xe0, 0x75, 0xd5, 0x16, 0x14, 0xce, 0xf3, 0xc3, 0xe1, 0x3c, - 0x1f, 0x19, 0xcf, 0x32, 0x50, 0xad, 0x4c, 0xeb, 0x20, 0x36, 0xf3, 0xc5, 0xc2, 0x5f, 0xec, 0x9c, 0x44, 0x44, 0x41, - 0x60, 0x47, 0xc2, 0x83, 0x48, 0xfd, 0xaa, 0xf2, 0x74, 0xa7, 0xfa, 0x6c, 0xbf, 0xb0, 0x89, 0xf4, 0x82, 0x92, 0xc9, - 0x27, 0xc1, 0x5e, 0xf5, 0x77, 0x10, 0x36, 0x84, 0x37, 0xaf, 0x7a, 0x9d, 0x65, 0x6a, 0x56, 0x82, 0x84, 0x19, 0x73, - 0x04, 0x8f, 0xc3, 0x4e, 0x63, 0x1b, 0x1e, 0x5b, 0x70, 0x74, 0xde, 0x9a, 0xdd, 0xb1, 0x15, 0xbb, 0x55, 0x75, 0x5a, - 0xf0, 0x70, 0x3a, 0xbc, 0x0c, 0x70, 0xf5, 0xad, 0xcf, 0x39, 0xbf, 0xa3, 0x13, 0x6c, 0x3d, 0xe0, 0xd1, 0x44, 0xcc, - 0xd6, 0x4f, 0x23, 0xb5, 0x78, 0xd6, 0x43, 0xbe, 0xa0, 0xf5, 0x27, 0x66, 0x77, 0x26, 0xf9, 0x6e, 0xc0, 0x17, 0x93, - 0xf5, 0xd3, 0x08, 0x5e, 0x7d, 0x0a, 0x56, 0x8c, 0xcc, 0x99, 0x65, 0xeb, 0xa7, 0x11, 0x8e, 0xd9, 0xdd, 0xd3, 0x88, - 0x46, 0x6d, 0x25, 0xf7, 0xa5, 0xdb, 0x06, 0x84, 0x95, 0x5b, 0x16, 0xc3, 0x6b, 0x20, 0x9e, 0x69, 0x23, 0xe9, 0x5a, - 0x1a, 0x7a, 0x63, 0x1e, 0x4e, 0xe3, 0x60, 0x4d, 0xad, 0x90, 0x67, 0x86, 0x98, 0xc5, 0x4f, 0xa3, 0x39, 0x5b, 0x61, - 0x45, 0x36, 0x3c, 0x1e, 0x5c, 0x4e, 0x36, 0x57, 0x7c, 0x0d, 0xe4, 0x67, 0x93, 0x8d, 0xd9, 0xa2, 0x6e, 0xb9, 0x98, - 0x6d, 0x9e, 0x46, 0xf3, 0xc9, 0x0a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x0d, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, - 0x3d, 0xb6, 0x1e, 0x07, 0x77, 0x6c, 0x7d, 0x19, 0xdc, 0xb2, 0xf5, 0x18, 0x88, 0x38, 0xa8, 0xdf, 0xbd, 0x0d, 0x2c, - 0xbe, 0x88, 0xad, 0x2f, 0x4d, 0xda, 0xe6, 0x69, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xc9, 0xbc, 0x15, 0x83, - 0x4b, 0xc8, 0xd2, 0x8b, 0xd9, 0x66, 0x78, 0xc9, 0xd6, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0xee, 0xf8, 0x2d, 0x4b, 0xf8, - 0xaa, 0x89, 0xaf, 0x36, 0xa0, 0x11, 0x3d, 0xca, 0xa0, 0xaf, 0xa0, 0x66, 0xe6, 0xbc, 0xb2, 0x30, 0x2a, 0xf7, 0x2d, - 0x38, 0xa0, 0x20, 0x6d, 0x03, 0x04, 0x49, 0x3c, 0xbb, 0x57, 0xe1, 0xfa, 0x46, 0x0a, 0x03, 0x6e, 0x02, 0x33, 0x60, - 0x60, 0xfa, 0x19, 0xfc, 0xb0, 0xd2, 0x25, 0x42, 0x9c, 0xfd, 0x94, 0x92, 0x64, 0x9e, 0x9f, 0x8a, 0x34, 0x77, 0x0b, - 0xd7, 0x29, 0xcc, 0x8a, 0x02, 0xd5, 0x4f, 0x49, 0x69, 0x60, 0xa1, 0x12, 0x99, 0x4a, 0xc1, 0x2f, 0x9b, 0xf3, 0x28, - 0x3b, 0x46, 0xe7, 0x3a, 0xbf, 0x9c, 0x38, 0xa7, 0x93, 0xbe, 0xff, 0xc0, 0x31, 0x6c, 0x21, 0x03, 0x17, 0xfe, 0xd4, - 0x13, 0xc6, 0xa9, 0x15, 0x88, 0xa9, 0xe4, 0xd9, 0x53, 0xf8, 0x4c, 0x68, 0x75, 0x74, 0xe1, 0xfb, 0x41, 0xa1, 0x4d, - 0xd2, 0x2d, 0x48, 0x52, 0xf0, 0x14, 0x3d, 0xe7, 0xbc, 0x0d, 0x54, 0x8a, 0x11, 0x2d, 0x88, 0xb4, 0xb5, 0xcc, 0x1c, - 0xa4, 0x2d, 0xcd, 0x77, 0x4d, 0xfc, 0x1c, 0x16, 0x70, 0x11, 0x2d, 0x6c, 0x0d, 0x8f, 0xaa, 0x58, 0xb9, 0x37, 0x79, - 0x8e, 0x70, 0x46, 0x97, 0x32, 0x01, 0x70, 0xbd, 0x5f, 0x87, 0xb5, 0xc2, 0x2b, 0x6a, 0x16, 0x79, 0x51, 0xd3, 0x27, - 0x5b, 0xe0, 0x3e, 0x16, 0x25, 0x0a, 0x9c, 0xb5, 0x60, 0xc0, 0x56, 0x58, 0xb2, 0x93, 0xc2, 0xa6, 0x68, 0x09, 0xbd, - 0x3d, 0x7e, 0x3a, 0xa8, 0x99, 0x0c, 0xa0, 0x09, 0xa0, 0xf1, 0xf8, 0x17, 0x80, 0x9a, 0xde, 0xd4, 0x62, 0x5d, 0x05, - 0xa5, 0x52, 0x6e, 0xc2, 0xcf, 0xc0, 0x30, 0xc3, 0x0f, 0x85, 0xdc, 0x26, 0x4a, 0xe4, 0xfc, 0x58, 0x94, 0x62, 0x59, - 0x8a, 0x2a, 0x69, 0x37, 0x14, 0x3c, 0x22, 0xdc, 0x06, 0x8d, 0x99, 0xdb, 0x13, 0x5d, 0xb4, 0x22, 0x94, 0x63, 0xb3, - 0x8e, 0x91, 0x46, 0x99, 0x9d, 0xec, 0x3a, 0x59, 0x68, 0xbf, 0xaf, 0x72, 0xc8, 0x3a, 0x60, 0x8d, 0xe4, 0xeb, 0x35, - 0x87, 0x6e, 0x1b, 0xe5, 0xc5, 0x83, 0xe7, 0x2b, 0x38, 0xcd, 0xf1, 0xc4, 0xee, 0x7a, 0xdd, 0x29, 0x12, 0xf1, 0x0a, - 0x27, 0x55, 0x3e, 0x92, 0x85, 0xe3, 0xce, 0x9d, 0xd6, 0x62, 0x55, 0xb9, 0xac, 0xa7, 0x16, 0x47, 0x04, 0x3e, 0x95, - 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, 0x11, - 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0x8b, 0x5c, 0x0f, - 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, 0x3c, - 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, 0x5d, - 0x28, 0xe7, 0x4c, 0xc5, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, 0x8c, - 0x8e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x96, 0xab, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, 0xc6, - 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, 0x98, - 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x7b, 0x59, 0x14, 0x38, 0x80, 0xab, - 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0xf6, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, 0xcc, - 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, 0xb4, - 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x8f, 0x5f, 0xa7, - 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7e, 0x41, 0x11, 0x17, 0x35, 0xb8, 0xf2, - 0x4e, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, 0x0e, - 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x44, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xcc, 0x59, 0x35, 0x5a, 0xa8, 0xcc, 0x08, - 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xe3, 0x3d, 0xba, 0xab, 0xce, 0x32, - 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, 0x77, - 0x9d, 0xe5, 0xab, 0x9b, 0xad, 0xa1, 0xa8, 0xd4, 0x4a, 0x52, 0x1c, 0x64, 0xb8, 0x6e, 0x2b, 0x1f, 0x2e, 0x2e, 0xa0, - 0x67, 0x8c, 0x44, 0xe6, 0xf9, 0x13, 0xf9, 0x12, 0x9c, 0x33, 0xce, 0x0a, 0x81, 0x09, 0x63, 0xf5, 0xae, 0xb5, 0x54, - 0x1a, 0x52, 0x8c, 0x1d, 0x8d, 0xb2, 0xac, 0xb2, 0x74, 0x99, 0xad, 0x25, 0x6c, 0x59, 0x4e, 0x6e, 0x61, 0xcb, 0x4c, - 0x56, 0xf3, 0x7d, 0xc5, 0x1d, 0x94, 0x6f, 0xb6, 0xce, 0xf8, 0x5e, 0x22, 0x7b, 0xb7, 0x81, 0x12, 0x5e, 0x8c, 0xfe, - 0x82, 0xf4, 0xdb, 0x0c, 0xe3, 0x94, 0xdb, 0x4a, 0x5a, 0x80, 0xd3, 0x3f, 0x1c, 0xde, 0x57, 0x18, 0x34, 0x38, 0xc2, - 0x38, 0xb2, 0x7e, 0xff, 0xb6, 0xf2, 0x6a, 0x4c, 0xd4, 0xf1, 0x59, 0xfd, 0x7e, 0x45, 0x0f, 0xa7, 0xd5, 0x68, 0x95, - 0x6e, 0x91, 0x9d, 0xd0, 0xc6, 0xca, 0x0f, 0x6a, 0x05, 0xcc, 0xde, 0xfa, 0x7c, 0x3a, 0x00, 0x1d, 0x0b, 0x90, 0x68, - 0x36, 0x13, 0x89, 0x39, 0xe9, 0x9e, 0x84, 0xc7, 0x07, 0x16, 0x38, 0xc0, 0x54, 0xfc, 0x9f, 0xc2, 0x9b, 0x81, 0x0d, - 0x1a, 0x25, 0xfa, 0x1a, 0x5d, 0xd5, 0xe6, 0x46, 0xc7, 0x4b, 0x4f, 0x21, 0x91, 0x15, 0xac, 0x9a, 0xfb, 0x72, 0x03, - 0xa7, 0x3d, 0xd4, 0x1c, 0x2a, 0x4b, 0xf0, 0xb7, 0x5f, 0xe6, 0x87, 0xc3, 0x3a, 0x83, 0xc2, 0x76, 0x6b, 0xa1, 0xbd, - 0x31, 0x4b, 0x35, 0x54, 0x84, 0x83, 0xce, 0x57, 0x62, 0x56, 0x8f, 0xe8, 0xef, 0xf9, 0xe1, 0xb0, 0x22, 0x30, 0xe0, - 0xb0, 0x94, 0x99, 0x68, 0xa1, 0x58, 0x5a, 0x67, 0x33, 0xaa, 0x03, 0x0f, 0x4c, 0xcc, 0x59, 0xb8, 0x03, 0xd0, 0x26, - 0xb5, 0x0a, 0xf4, 0x2a, 0xa2, 0x9f, 0xb8, 0x5f, 0xdb, 0xaf, 0xd7, 0x23, 0xb3, 0x74, 0xe4, 0xc6, 0x58, 0x00, 0x70, - 0xe0, 0x79, 0x4d, 0xf2, 0x9c, 0x7c, 0x0d, 0xed, 0x9e, 0x5c, 0xc8, 0x9f, 0xa0, 0x6c, 0xe1, 0xb9, 0x6a, 0x5a, 0x59, - 0xac, 0xb8, 0xaa, 0x5e, 0x5d, 0xf0, 0xca, 0x64, 0x5a, 0xa5, 0x95, 0xa8, 0x94, 0x60, 0x40, 0x5d, 0xe2, 0xb5, 0xa6, - 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x7e, 0x69, 0x1c, 0x3e, - 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0x2b, 0x1f, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, 0xc5, 0xc4, - 0xee, 0xd0, 0xbc, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, 0x01, 0x2f, - 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x2a, 0x26, 0xc0, 0x0f, - 0x4a, 0xad, 0xe9, 0xbd, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, 0xe7, 0xe3, - 0xf9, 0xa5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x79, 0xab, 0x7f, 0x98, 0xea, 0x5b, 0xe8, 0x4e, - 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, 0x1c, 0xec, - 0x0d, 0x70, 0xe2, 0x97, 0x87, 0x83, 0xb8, 0xca, 0x7d, 0x76, 0xde, 0x35, 0xb2, 0x72, 0x00, 0x2b, 0x88, 0x82, 0x71, - 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xd5, 0xf8, 0xf8, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0xe4, 0x4f, 0x9f, - 0x03, 0x69, 0x59, 0xbf, 0x1f, 0xbd, 0xb8, 0x9c, 0x3e, 0x1f, 0x46, 0x01, 0x38, 0x76, 0xd9, 0xcb, 0xcb, 0x98, 0xaf, - 0x2e, 0x99, 0x65, 0x0a, 0x8b, 0x7c, 0x33, 0xa0, 0xba, 0x64, 0xb5, 0x74, 0xbd, 0x02, 0x2c, 0x5d, 0x7e, 0xf3, 0x10, - 0xa6, 0x06, 0x34, 0xb2, 0xe6, 0xee, 0x34, 0xd7, 0x02, 0xa5, 0x9e, 0xf7, 0x33, 0x43, 0xbe, 0x2e, 0x83, 0xae, 0x20, - 0xdd, 0xf3, 0x88, 0xf4, 0x72, 0x2f, 0x9d, 0xee, 0xf7, 0xa5, 0x00, 0x4b, 0x7d, 0x29, 0x3e, 0x83, 0xc2, 0xa2, 0xf1, - 0x8d, 0x00, 0x6d, 0x0d, 0xd5, 0xb4, 0x57, 0x8a, 0xaa, 0x17, 0xf4, 0x4a, 0xf1, 0xb9, 0xa7, 0x87, 0xca, 0x7c, 0x59, - 0x3a, 0xfa, 0x9f, 0x50, 0x73, 0xc1, 0x09, 0x31, 0x13, 0x73, 0x00, 0x95, 0xa0, 0x8d, 0x6f, 0x75, 0xb4, 0xf1, 0xa9, - 0x5e, 0xc5, 0x4d, 0x9f, 0xd7, 0xd6, 0x32, 0x27, 0x84, 0x4d, 0xf7, 0x12, 0xa0, 0x22, 0xaf, 0x84, 0x47, 0xb0, 0xfc, - 0xf2, 0x87, 0x3c, 0x5d, 0x21, 0x5a, 0xc7, 0x3d, 0xcb, 0x5c, 0x1a, 0xfb, 0x37, 0x06, 0xd3, 0xd7, 0xb7, 0xdb, 0x22, - 0x3f, 0x35, 0x31, 0x61, 0x3d, 0x56, 0xf4, 0xcd, 0xbb, 0x70, 0x25, 0x50, 0xe0, 0x50, 0x22, 0xb1, 0x4d, 0x15, 0x8a, - 0x78, 0x90, 0xf4, 0xe9, 0xa2, 0xf5, 0x69, 0x80, 0xa9, 0xb5, 0x1c, 0x98, 0x43, 0xb8, 0x8a, 0x0b, 0x1f, 0x3d, 0x7d, - 0x8b, 0x59, 0x38, 0x9f, 0x78, 0x1f, 0xbd, 0x62, 0x64, 0x3e, 0xee, 0xa3, 0x52, 0x49, 0xff, 0x3c, 0x1c, 0x66, 0xd5, - 0xdc, 0x77, 0xe8, 0x23, 0x3d, 0x54, 0xb9, 0xa0, 0xec, 0x8d, 0x31, 0x89, 0x40, 0x69, 0x8c, 0xf7, 0x71, 0x70, 0x9c, - 0xf7, 0x69, 0x00, 0xa9, 0x7d, 0xe2, 0x3d, 0x29, 0x39, 0x3c, 0xe7, 0x98, 0x13, 0x4a, 0x2b, 0xc2, 0x2a, 0xbe, 0xc8, - 0x50, 0xae, 0x3b, 0xa5, 0x60, 0x92, 0x43, 0x82, 0xe1, 0xaf, 0x9a, 0x37, 0xb1, 0x02, 0x61, 0xd7, 0xcc, 0xab, 0xd1, - 0x93, 0x2a, 0x09, 0x4b, 0x01, 0x47, 0x65, 0xe6, 0x19, 0xf6, 0x86, 0x27, 0x86, 0x91, 0x83, 0xe5, 0xfe, 0xa8, 0x4e, - 0x44, 0xee, 0xd1, 0x05, 0x46, 0x65, 0xe1, 0x79, 0x43, 0x57, 0x1a, 0x54, 0x92, 0x1d, 0x7f, 0xc5, 0x35, 0xa0, 0xb6, - 0xc6, 0x88, 0xa1, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, 0x95, 0xdc, 0xf5, - 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, 0x2c, 0x85, 0x23, - 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, 0x42, 0x9a, 0x6c, - 0x5f, 0xcf, 0xdf, 0x1b, 0x41, 0x56, 0x6e, 0x39, 0xc7, 0xc3, 0xe2, 0x1b, 0x67, 0x5f, 0xe5, 0xe4, 0x29, 0x66, 0x19, - 0xe9, 0x9d, 0x62, 0x5e, 0xc0, 0x9f, 0xca, 0x52, 0x9f, 0xa3, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, 0x97, 0xde, 0xa6, - 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0xf7, 0xf1, 0x48, 0x9e, 0x61, 0x1b, 0x96, 0xb0, 0xd0, 0x2a, 0x18, 0x03, 0x48, - 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x0e, 0x87, 0xf3, 0x8d, 0x39, 0x4b, 0xf6, 0xe0, 0xfa, 0xca, 0x13, 0xf3, 0x0e, - 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x1b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, 0x62, 0xad, 0x63, - 0xa9, 0xac, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0xbf, 0x77, 0x83, 0xab, 0x6b, 0x63, 0x50, - 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0xb3, 0x9c, 0x7c, 0xf9, 0xad, 0x9d, 0x03, 0x82, - 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, 0x33, 0xd8, 0xc4, - 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, 0xab, 0x85, 0x48, - 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, 0x5e, 0x27, 0x68, - 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, 0x7b, 0x99, 0x13, - 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, 0x74, 0x28, 0x59, - 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, 0x0a, 0x5c, 0x08, - 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xf9, 0xb4, 0x90, 0xa6, 0x81, 0x7c, 0x5a, 0x39, 0xe6, - 0x81, 0x9d, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0xe5, 0x1c, 0xab, 0x88, 0xde, 0xe7, 0x1f, 0x2a, 0x7b, - 0xfa, 0x20, 0xc2, 0x46, 0x05, 0x1a, 0x4b, 0x89, 0xb1, 0x91, 0xe3, 0xdf, 0x12, 0x65, 0x43, 0x86, 0x80, 0x10, 0xd2, - 0x46, 0x4e, 0x3f, 0xac, 0x2f, 0x6f, 0x33, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, 0xa9, 0x47, 0x3c, - 0x5e, 0x6b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, 0x28, 0x17, 0x3c, - 0xe7, 0x15, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xc8, 0xe9, 0xf3, 0x15, 0xf0, 0x4c, 0x40, 0xa0, 0x63, - 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0x37, 0x48, 0x94, 0xfa, 0x9a, - 0x94, 0xa4, 0xd7, 0xa2, 0xc6, 0x2b, 0xb1, 0x8a, 0x48, 0x20, 0x43, 0x0d, 0x11, 0xab, 0xea, 0xa9, 0x7b, 0x55, 0x4c, - 0x06, 0x83, 0xca, 0x97, 0xd3, 0x13, 0x6f, 0x68, 0xa8, 0xbc, 0xeb, 0x8a, 0x76, 0x7a, 0xa2, 0x95, 0xf2, 0x16, 0xd2, - 0x12, 0x34, 0x0d, 0x23, 0xcd, 0xa1, 0xd4, 0x95, 0x74, 0x37, 0x06, 0xf1, 0x25, 0x13, 0x3d, 0xdb, 0xa9, 0x1d, 0xa5, - 0x2d, 0x69, 0x0f, 0x21, 0x3d, 0x77, 0xc9, 0xc7, 0x2c, 0xe4, 0xea, 0x4e, 0x39, 0x29, 0xaf, 0x42, 0x74, 0x72, 0xdf, - 0x63, 0x48, 0x04, 0xfa, 0x9c, 0x63, 0x58, 0x17, 0x0d, 0x75, 0x0e, 0x2b, 0xc4, 0x6c, 0xa1, 0x84, 0xf9, 0x92, 0xf1, - 0x54, 0x32, 0x68, 0x00, 0x64, 0xc0, 0x67, 0x2f, 0x03, 0xcb, 0x5f, 0x41, 0xfc, 0x68, 0xe3, 0xc3, 0xe1, 0xcf, 0x9a, - 0x42, 0x6c, 0xff, 0x84, 0xcd, 0x10, 0x1e, 0xd5, 0x03, 0x9e, 0xf9, 0x26, 0x4e, 0xd0, 0x0a, 0x48, 0xca, 0xec, 0x68, - 0x22, 0x7b, 0xd5, 0x43, 0x38, 0x95, 0x15, 0xa8, 0xa3, 0xac, 0xb3, 0x12, 0x7e, 0x84, 0xa9, 0x6e, 0x25, 0xd6, 0x02, - 0x6d, 0xae, 0x56, 0xac, 0x05, 0x70, 0xe0, 0xe7, 0x10, 0x3c, 0x91, 0xcf, 0xc1, 0xc5, 0xa0, 0x00, 0x9f, 0x03, 0xe0, - 0x45, 0xee, 0xc2, 0x83, 0x79, 0x64, 0x59, 0x8d, 0x30, 0x1c, 0x55, 0xc4, 0xfa, 0x35, 0xdb, 0x91, 0x0f, 0xdc, 0x8e, - 0xf1, 0xb9, 0xf6, 0x58, 0xb2, 0x1c, 0x8c, 0x32, 0xf7, 0x6a, 0x89, 0x9e, 0x37, 0x69, 0xdc, 0x8c, 0x9e, 0xec, 0x6b, - 0xf9, 0xbf, 0xa0, 0x97, 0x41, 0x7f, 0x0b, 0xb7, 0xbc, 0xe6, 0x77, 0x0b, 0x22, 0xcd, 0xf4, 0x0a, 0x22, 0x65, 0xd4, - 0x88, 0x8c, 0x21, 0x6c, 0x52, 0xdd, 0xdc, 0x26, 0xd5, 0x85, 0x80, 0xa7, 0x23, 0x52, 0x5d, 0x0b, 0x69, 0x23, 0x9f, - 0xd6, 0x81, 0x8c, 0x45, 0x7a, 0xf7, 0xc3, 0xdf, 0x5e, 0x7e, 0x7a, 0xfb, 0xcb, 0x0f, 0x8b, 0xb7, 0xef, 0xde, 0xbc, - 0x7d, 0xf7, 0xf6, 0xd3, 0x6f, 0x04, 0xe1, 0x31, 0x15, 0x2a, 0xc3, 0x87, 0xf7, 0x37, 0x6f, 0x9d, 0x0c, 0xb6, 0x37, - 0x43, 0xd6, 0xbe, 0x91, 0x83, 0x21, 0x10, 0xd9, 0x20, 0x64, 0x90, 0x9d, 0xda, 0xf6, 0x67, 0x62, 0x8e, 0xb1, 0x77, - 0x02, 0x93, 0x2d, 0xe0, 0x1c, 0xcb, 0xbc, 0x64, 0x44, 0xae, 0x0a, 0xad, 0x1f, 0xd0, 0x82, 0x6b, 0x70, 0x91, 0x49, - 0xf3, 0xbb, 0x5f, 0x08, 0x62, 0x9f, 0x56, 0x52, 0xee, 0xab, 0x6d, 0xcd, 0xf3, 0xed, 0xfd, 0x5e, 0xc2, 0xf9, 0xcf, - 0xa5, 0x11, 0xb5, 0x00, 0x07, 0xe0, 0x73, 0xf8, 0xe3, 0x4a, 0x5b, 0xd2, 0x64, 0x16, 0xed, 0x67, 0x0c, 0x41, 0x97, - 0x06, 0x1f, 0xc4, 0x1e, 0x79, 0xa9, 0x4f, 0x16, 0x12, 0xb8, 0x23, 0x86, 0x4f, 0x2b, 0x82, 0x5e, 0x31, 0xa2, 0xb8, - 0xe4, 0x0a, 0x95, 0x52, 0xf2, 0x6f, 0x94, 0x5d, 0x54, 0xc8, 0x59, 0xc1, 0xee, 0x15, 0x39, 0x32, 0x7e, 0x10, 0x4c, - 0x7c, 0x39, 0xb8, 0xff, 0x12, 0xef, 0x70, 0xa6, 0x38, 0x92, 0x13, 0xfe, 0x90, 0x61, 0x60, 0x7f, 0x0e, 0x3e, 0xaf, - 0x0e, 0xf3, 0xf2, 0x46, 0x9f, 0x72, 0x4b, 0x3e, 0x9e, 0x2c, 0xaf, 0xc0, 0x60, 0xbf, 0x54, 0xcd, 0x5d, 0xf3, 0x7a, - 0xb6, 0x9c, 0xb3, 0xfd, 0x2c, 0x9a, 0x07, 0x77, 0x6c, 0x96, 0xcd, 0x83, 0x55, 0xc3, 0xd7, 0xec, 0x96, 0xaf, 0xad, - 0xaa, 0xad, 0xed, 0xaa, 0x4d, 0x36, 0xfc, 0x16, 0x24, 0x84, 0x9b, 0xcc, 0x03, 0xde, 0xe3, 0x3b, 0x9f, 0x6d, 0x40, - 0xa2, 0x5d, 0xb1, 0x0d, 0x5c, 0xc4, 0xd6, 0xfc, 0x87, 0xca, 0xdb, 0xb0, 0x92, 0x9d, 0x8f, 0x59, 0x8e, 0xf3, 0xcf, - 0x87, 0x07, 0xb4, 0x17, 0xea, 0x67, 0x97, 0xea, 0xd9, 0x44, 0xd9, 0xcd, 0x36, 0xa3, 0xc5, 0x7d, 0x5a, 0x6d, 0xc2, - 0x0c, 0x3d, 0xcb, 0xe1, 0xa3, 0xad, 0x14, 0xfc, 0xf4, 0x02, 0xbf, 0x64, 0x47, 0x6d, 0xa5, 0x6d, 0xbb, 0x2a, 0xb1, - 0x15, 0xb4, 0x28, 0xb2, 0x5a, 0xe1, 0x81, 0x39, 0x7f, 0x01, 0x0b, 0x18, 0x7b, 0x8e, 0x73, 0x5e, 0xfb, 0x23, 0x64, - 0xbc, 0x77, 0x00, 0xd0, 0x32, 0xc7, 0x01, 0x1e, 0xb1, 0x62, 0x14, 0x0d, 0xde, 0xf9, 0xa5, 0xb2, 0x5a, 0x69, 0x4e, - 0x42, 0xdb, 0x88, 0x55, 0xcb, 0x91, 0xaa, 0x19, 0x91, 0x3e, 0x48, 0xcf, 0xfb, 0x1e, 0x51, 0x0d, 0xf6, 0x64, 0x5e, - 0x07, 0xf6, 0xe9, 0x55, 0x6b, 0x55, 0x77, 0x7e, 0x4f, 0x95, 0x2e, 0x39, 0xb2, 0xe5, 0xa7, 0xcb, 0xf0, 0x41, 0xfd, - 0x29, 0xb9, 0x3e, 0x14, 0x38, 0xc2, 0x63, 0x15, 0x70, 0xbe, 0x5e, 0x89, 0x76, 0x27, 0xc2, 0xae, 0x5c, 0x02, 0x42, - 0x7c, 0x49, 0xd3, 0x1c, 0x8f, 0x23, 0x9a, 0x88, 0xb0, 0x89, 0xd1, 0x5f, 0xd8, 0x7d, 0x28, 0xb1, 0x9c, 0xe7, 0x1a, - 0x94, 0x5c, 0x32, 0x78, 0x4f, 0xda, 0x6b, 0xd0, 0x2c, 0xaf, 0x4a, 0x4d, 0x26, 0x72, 0x50, 0x3e, 0x1c, 0x0a, 0xd8, - 0x4b, 0x8d, 0x9f, 0x26, 0xfc, 0x84, 0xe5, 0xad, 0xbd, 0x35, 0xa5, 0xa8, 0xa4, 0x01, 0x2a, 0xf0, 0x31, 0x83, 0xff, - 0xdd, 0x19, 0x62, 0xc1, 0x14, 0x1d, 0x3f, 0x9c, 0x89, 0xb9, 0xf5, 0xdc, 0x2a, 0xeb, 0x28, 0x5b, 0xa3, 0x9c, 0x80, - 0x7f, 0x4b, 0x75, 0x9c, 0x24, 0xc2, 0xa9, 0xf7, 0x88, 0x8b, 0xba, 0x97, 0x43, 0xd4, 0x0d, 0x7b, 0x5b, 0xe9, 0x60, - 0xcb, 0x69, 0x1a, 0x1c, 0x89, 0x5f, 0xa9, 0xcf, 0xde, 0x67, 0x16, 0x8f, 0x3a, 0xb2, 0x11, 0x25, 0x69, 0x1c, 0x8b, - 0x1c, 0xb6, 0xf7, 0x85, 0xdc, 0xff, 0xfb, 0x7d, 0x08, 0x27, 0xad, 0x82, 0xa4, 0xf4, 0x04, 0x22, 0xc2, 0xd1, 0xe1, - 0x47, 0x84, 0x27, 0x52, 0x55, 0xf8, 0xa4, 0x3e, 0x71, 0x63, 0x76, 0x2f, 0xcc, 0x51, 0xbd, 0x05, 0x18, 0xc6, 0x7a, - 0x6b, 0x11, 0x92, 0x68, 0xa5, 0x19, 0x6d, 0x3d, 0x20, 0x46, 0xbc, 0x5f, 0x5b, 0x64, 0x30, 0xd6, 0x96, 0x44, 0x02, - 0xf8, 0x1d, 0x09, 0x19, 0xda, 0x36, 0x02, 0x33, 0x86, 0xb7, 0xb3, 0xe2, 0xd2, 0x75, 0xd8, 0xe6, 0x1c, 0xbe, 0x90, - 0x85, 0x66, 0x1d, 0x51, 0x9a, 0x20, 0xe4, 0x1f, 0x70, 0xb2, 0x50, 0x18, 0xcd, 0xeb, 0xa3, 0x74, 0x92, 0x58, 0xdf, - 0x77, 0x95, 0x0a, 0x36, 0x9b, 0x1b, 0xd4, 0x97, 0x1d, 0x25, 0xbf, 0x02, 0x27, 0x1d, 0x27, 0x59, 0xe4, 0x20, 0x6a, - 0x51, 0x39, 0x37, 0x49, 0x58, 0xda, 0xd5, 0xa9, 0x36, 0xeb, 0x75, 0x51, 0xd6, 0xd5, 0x6b, 0x11, 0x29, 0x7a, 0x1f, - 0xf5, 0xe8, 0x89, 0x84, 0x54, 0x68, 0x55, 0x6a, 0x97, 0x47, 0xe0, 0xb6, 0xa9, 0x15, 0xdb, 0x72, 0x09, 0x4b, 0xd4, - 0xf8, 0x4f, 0xd0, 0x47, 0xb9, 0x78, 0x90, 0x01, 0x1a, 0x1d, 0x4f, 0xcd, 0x5b, 0x8f, 0xbc, 0x72, 0x94, 0x5f, 0x5a, - 0x6d, 0xd2, 0x2f, 0x80, 0xcc, 0x68, 0xff, 0x68, 0x29, 0x81, 0xcc, 0xc0, 0x4c, 0x5a, 0x1a, 0x12, 0x39, 0x8a, 0x59, - 0x9a, 0xff, 0x81, 0x2b, 0xb6, 0x42, 0xa4, 0x61, 0x35, 0xf7, 0xf8, 0xcb, 0xca, 0xab, 0xe5, 0x5a, 0x66, 0x9a, 0x9b, - 0x25, 0x8e, 0x15, 0x8b, 0x8b, 0x7a, 0x5d, 0x89, 0x2c, 0x10, 0xe2, 0x08, 0xd3, 0x58, 0x4f, 0xbd, 0x51, 0x5a, 0x7d, - 0x40, 0x42, 0x99, 0x1f, 0xb0, 0xb7, 0x63, 0xaf, 0x07, 0x59, 0x88, 0x63, 0xcb, 0xc1, 0x66, 0xeb, 0x7d, 0x2a, 0x53, - 0x11, 0x9f, 0xd5, 0xc5, 0xd9, 0xa6, 0x12, 0x67, 0x75, 0x22, 0xce, 0xbe, 0x83, 0x9c, 0xdf, 0x9d, 0x51, 0xd1, 0x67, - 0x0f, 0x69, 0x9d, 0x14, 0x9b, 0x9a, 0x9e, 0xbc, 0xc1, 0x32, 0xbe, 0x3b, 0x23, 0xae, 0x9a, 0x33, 0x1a, 0xc9, 0x78, - 0x74, 0xf6, 0x21, 0x03, 0x92, 0xd7, 0xb3, 0x74, 0x05, 0x83, 0x77, 0x16, 0xe6, 0xf1, 0x59, 0x29, 0xee, 0xc0, 0xe2, - 0x54, 0x76, 0xbe, 0x07, 0x19, 0x56, 0xe1, 0x1f, 0xe2, 0x0c, 0xa0, 0x5d, 0xcf, 0xd2, 0xfa, 0x2c, 0xad, 0xce, 0xf2, - 0xa2, 0x3e, 0x53, 0x52, 0x38, 0x84, 0xf1, 0xc3, 0x7b, 0xfa, 0xca, 0x2e, 0x6f, 0xb3, 0xb8, 0xcb, 0x22, 0x7f, 0x8a, - 0x5e, 0x45, 0xc4, 0xa4, 0x51, 0x09, 0xaf, 0xdd, 0xdf, 0x36, 0xf7, 0x0f, 0xaf, 0x1b, 0xbb, 0x9f, 0xdd, 0x31, 0xa2, - 0x0b, 0xea, 0xf1, 0x4a, 0x52, 0x2a, 0x28, 0x20, 0x70, 0xa2, 0x59, 0xe3, 0xc1, 0x1d, 0x07, 0xbc, 0x1a, 0xd8, 0x92, - 0xad, 0x7d, 0xfe, 0x22, 0x96, 0x61, 0xda, 0x9b, 0x00, 0xff, 0x2a, 0x7b, 0xd3, 0x75, 0xb0, 0xc4, 0xfb, 0x16, 0xb2, - 0x0d, 0xbd, 0x7d, 0xcd, 0x5f, 0x7a, 0xb9, 0xfa, 0x9b, 0xfd, 0x13, 0x80, 0x30, 0x20, 0x66, 0xd5, 0x47, 0x13, 0xf7, - 0xce, 0xca, 0xb2, 0x73, 0xb2, 0xec, 0x7a, 0xe8, 0xd7, 0x24, 0x46, 0xa5, 0x95, 0xa5, 0x74, 0xb2, 0x94, 0x90, 0x05, - 0x7c, 0x62, 0x34, 0xb5, 0x11, 0x40, 0xd8, 0x8e, 0x52, 0xf9, 0x42, 0xe5, 0x45, 0x14, 0xce, 0x09, 0x9e, 0x27, 0x62, - 0x74, 0x6f, 0x25, 0x03, 0x86, 0x43, 0x08, 0xe6, 0xa0, 0x2d, 0xf6, 0x86, 0x6e, 0x22, 0xfe, 0x7a, 0x53, 0x94, 0x6f, - 0x63, 0xf2, 0x29, 0xd8, 0x9d, 0x7c, 0x5c, 0xc2, 0xe3, 0xf2, 0xe4, 0xe3, 0x10, 0x3d, 0x12, 0x4e, 0x3e, 0x06, 0xdf, - 0x23, 0x39, 0xaf, 0xbb, 0x1e, 0x27, 0xc8, 0x2d, 0xa4, 0xfb, 0xdb, 0x31, 0x09, 0xd0, 0xbc, 0x86, 0xe5, 0xa8, 0xa9, - 0xb8, 0x66, 0x66, 0x8c, 0xe7, 0x8d, 0xde, 0x1f, 0x3b, 0xde, 0x32, 0x85, 0x62, 0x16, 0xf3, 0x1a, 0x7e, 0xcf, 0xaa, - 0x40, 0xdd, 0xf5, 0x36, 0xc9, 0x2d, 0xb3, 0x7a, 0x8e, 0x76, 0xdf, 0xf7, 0x75, 0x22, 0xa8, 0xfd, 0x1d, 0xf6, 0x3c, - 0xb3, 0xde, 0x55, 0x31, 0x70, 0xa9, 0x92, 0x1d, 0x32, 0x55, 0x4d, 0x0f, 0x54, 0x4a, 0x83, 0xa7, 0x97, 0xd6, 0xe5, - 0x4b, 0xa5, 0x8d, 0x3c, 0xd3, 0xfc, 0x06, 0xf0, 0x62, 0xea, 0xb2, 0xd8, 0x7d, 0x75, 0x5f, 0xc1, 0x6d, 0xbc, 0xdf, - 0x5f, 0x56, 0x9e, 0xf9, 0x89, 0x0b, 0xc0, 0xde, 0x54, 0x68, 0x9d, 0x40, 0xa9, 0x61, 0x1d, 0xbe, 0x4a, 0x44, 0xf4, - 0x47, 0xbb, 0x5c, 0x67, 0xae, 0x03, 0x46, 0x14, 0xf1, 0xdb, 0x78, 0xf4, 0x07, 0x28, 0xae, 0x8d, 0x3d, 0x20, 0xac, - 0x43, 0x42, 0x9f, 0x11, 0x80, 0xd4, 0x63, 0x8e, 0x12, 0xd0, 0xac, 0x68, 0xee, 0x98, 0xfc, 0x5c, 0x5f, 0x29, 0xfd, - 0xfd, 0xb2, 0xf2, 0xc8, 0x9c, 0xd2, 0x36, 0xd3, 0x58, 0xad, 0xa9, 0x04, 0xc2, 0x2b, 0x2a, 0x59, 0x85, 0xcf, 0xe6, - 0x8d, 0xe8, 0xf7, 0xe5, 0x11, 0x9e, 0x56, 0x3f, 0x6c, 0x31, 0xbe, 0x15, 0x10, 0x8d, 0x04, 0x40, 0x3f, 0x01, 0xcc, - 0x8b, 0x6c, 0x66, 0xf7, 0x71, 0x40, 0x95, 0x12, 0x4d, 0xe3, 0x6c, 0x9e, 0xdf, 0xd2, 0x9b, 0xb2, 0x83, 0x4e, 0x9d, - 0x2a, 0x70, 0xc1, 0x55, 0xc9, 0x78, 0x65, 0x3d, 0x91, 0xcf, 0x6f, 0x6e, 0x37, 0x69, 0x16, 0xbf, 0x2f, 0xff, 0x89, - 0x63, 0xab, 0xeb, 0xf0, 0xc8, 0xd4, 0xe9, 0xda, 0x79, 0xa4, 0xb5, 0x17, 0x02, 0x22, 0xda, 0x35, 0xd4, 0x7a, 0x61, - 0xa1, 0x47, 0x7a, 0x22, 0x9c, 0x93, 0x44, 0x4d, 0x3b, 0xd0, 0xd2, 0x08, 0x7d, 0x7d, 0xcd, 0xe9, 0x2f, 0x0c, 0xd6, - 0x3e, 0x1f, 0x33, 0x20, 0x2b, 0xd1, 0x8f, 0xd5, 0x43, 0x63, 0x33, 0x87, 0x9e, 0xb5, 0x2a, 0xcf, 0xbc, 0xea, 0x70, - 0x40, 0x7c, 0x18, 0xfd, 0x25, 0xbf, 0xdf, 0x7f, 0x4d, 0xf3, 0x8f, 0x09, 0x35, 0x7e, 0xb6, 0x19, 0xa0, 0x6b, 0xdf, - 0x95, 0x07, 0xa2, 0x9e, 0x6b, 0x95, 0x20, 0xc4, 0x1b, 0xc4, 0x44, 0x33, 0x62, 0x0e, 0x4e, 0x3b, 0xd4, 0xfc, 0x93, - 0xd4, 0x80, 0x10, 0x25, 0x5e, 0xc7, 0x94, 0x05, 0x39, 0x6d, 0xe2, 0x48, 0x3f, 0x0a, 0x27, 0xf2, 0xa3, 0xa8, 0x8a, - 0xec, 0x1e, 0x2e, 0x18, 0x4c, 0xbd, 0xa7, 0xfd, 0x12, 0xfd, 0x96, 0x70, 0xe4, 0x1c, 0xad, 0x0a, 0x41, 0xe4, 0x84, - 0xb0, 0xd6, 0x10, 0x26, 0x88, 0x0d, 0xe2, 0x65, 0xdf, 0x25, 0x19, 0x8e, 0x14, 0x5c, 0xd6, 0xb1, 0x63, 0xcc, 0xd5, - 0x51, 0xf5, 0x1a, 0xc0, 0x78, 0xe5, 0x08, 0x9a, 0x8d, 0x22, 0xbb, 0x84, 0xa8, 0x22, 0xc7, 0x13, 0x50, 0x3b, 0x28, - 0x8d, 0xcd, 0xf4, 0x7c, 0x1c, 0xe4, 0xa3, 0x45, 0x85, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x73, 0xd5, 0xcf, - 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x8a, 0xe9, 0x72, - 0x60, 0xdc, 0x37, 0xbc, 0xa2, 0x38, 0xc3, 0x8f, 0x1e, 0x6c, 0x71, 0xfe, 0x74, 0x43, 0xed, 0xc7, 0xdc, 0xa8, 0x87, - 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, 0xfc, 0x43, - 0x99, 0xae, 0x52, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, 0xa2, 0xac, - 0xdf, 0x87, 0xdf, 0x57, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, 0x93, 0x41, - 0x0d, 0xda, 0xf0, 0x0d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, 0xec, 0x4f, - 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xe3, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xc7, 0x97, 0xfc, 0x06, 0xbd, - 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, 0x8f, 0x51, - 0xc9, 0x62, 0x4b, 0x8f, 0x55, 0xd1, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x05, 0xc1, 0x12, 0x18, - 0x17, 0xb1, 0xe6, 0x9b, 0x41, 0xce, 0xe2, 0xd9, 0x66, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1c, 0x0a, 0x09, 0x36, 0x93, - 0xcd, 0xd6, 0x73, 0xb6, 0xf6, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, 0x35, 0x58, - 0xad, 0xa6, 0x6c, 0x55, 0x53, 0x76, 0x4e, 0x53, 0x8e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, 0x88, 0x4d, - 0xa2, 0xab, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, 0x50, 0x85, - 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, 0xbe, 0xa5, - 0x8e, 0x7b, 0x94, 0x6d, 0xfe, 0x2e, 0x76, 0x41, 0x88, 0xdc, 0x8d, 0x3b, 0xf5, 0x33, 0xe2, 0xbd, 0xdd, 0x11, 0xc6, - 0x4f, 0x76, 0xdc, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8b, 0x79, 0x35, 0x49, 0x50, 0xcb, 0x92, 0xf8, 0x1b, - 0x9e, 0x0c, 0x72, 0xb6, 0x04, 0x0f, 0xda, 0x39, 0xcb, 0x00, 0x7f, 0xc5, 0x6a, 0xd1, 0x6f, 0xb5, 0xb7, 0x04, 0xf9, - 0x69, 0x63, 0x37, 0x0a, 0x13, 0x23, 0x48, 0xd4, 0xed, 0xca, 0x40, 0x7e, 0xf8, 0x80, 0xd3, 0xf1, 0xd8, 0x53, 0xc6, - 0xdc, 0xca, 0xf4, 0x32, 0x9d, 0x2b, 0xf9, 0x46, 0xee, 0xa5, 0x8f, 0xbd, 0x04, 0x3b, 0x07, 0xbc, 0x81, 0xb4, 0x81, - 0x37, 0xb0, 0x5d, 0x78, 0x6d, 0x90, 0x30, 0x23, 0xc0, 0x16, 0xc7, 0xc7, 0x48, 0x09, 0x0c, 0xe1, 0x38, 0x4b, 0x01, - 0x98, 0x46, 0x5f, 0x66, 0x2b, 0xfb, 0x32, 0xab, 0x35, 0x5b, 0x2a, 0xa7, 0x7b, 0xe7, 0xd6, 0xed, 0x7c, 0x22, 0x01, - 0xc0, 0xa4, 0xce, 0x81, 0x38, 0x33, 0xc1, 0x2e, 0x4d, 0x22, 0xcb, 0xc7, 0x30, 0xbf, 0x13, 0x6f, 0xca, 0x62, 0xa5, - 0xba, 0xa2, 0xed, 0x33, 0x93, 0xcf, 0x48, 0x27, 0xa1, 0x02, 0x0a, 0x0a, 0xb9, 0xd6, 0xa7, 0xef, 0xc2, 0x77, 0x41, - 0xa1, 0x81, 0xd9, 0x2a, 0xdc, 0xd3, 0x64, 0x8d, 0xd4, 0x1b, 0x55, 0xbf, 0x4f, 0xae, 0x81, 0x54, 0x67, 0x0e, 0x2d, - 0x7b, 0x52, 0x61, 0x80, 0xd8, 0x51, 0x9f, 0x91, 0x50, 0x07, 0x52, 0x0f, 0x18, 0x42, 0xb4, 0x4d, 0x1f, 0x7f, 0x32, - 0x24, 0xba, 0x00, 0x5b, 0x88, 0x36, 0xf0, 0xe3, 0x4f, 0xb0, 0xcf, 0x82, 0xf0, 0x98, 0xe6, 0xd7, 0x90, 0x74, 0x6c, - 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0xb9, 0x94, - 0xea, 0x58, 0xa9, 0xb7, 0x6d, 0xed, 0x07, 0xd1, 0x16, 0x1c, 0x59, 0xc4, 0xdf, 0x67, 0x88, 0x08, 0x66, 0x06, 0x11, - 0x76, 0x2d, 0xd4, 0xdd, 0x9e, 0x52, 0xcb, 0xa2, 0xde, 0xf6, 0x94, 0x52, 0xb7, 0x61, 0xf8, 0x6e, 0x82, 0x99, 0xe2, - 0x86, 0xff, 0x91, 0x79, 0xa1, 0xde, 0x78, 0x2c, 0x0a, 0x74, 0xcf, 0xdf, 0x2f, 0x79, 0x35, 0xdb, 0x28, 0x13, 0xe6, - 0x1d, 0x5f, 0xce, 0x42, 0xd9, 0xd5, 0xd2, 0xb8, 0xf3, 0xd9, 0x5b, 0xaa, 0xf9, 0xe0, 0x1f, 0x0e, 0x09, 0xc4, 0x1b, - 0xc5, 0x57, 0x77, 0x8d, 0xdc, 0xba, 0x26, 0x9b, 0xab, 0x12, 0x50, 0xbf, 0xcf, 0xd7, 0xb8, 0xdf, 0x62, 0xfd, 0xbb, - 0xa7, 0x41, 0xc6, 0x6a, 0x86, 0x2b, 0xa6, 0xf0, 0x29, 0x00, 0x0c, 0x0e, 0xa7, 0x82, 0xb4, 0xc0, 0x1b, 0x5e, 0x0e, - 0x2f, 0x27, 0x1b, 0x32, 0xe9, 0x6e, 0x7c, 0xe4, 0xce, 0x02, 0x55, 0xef, 0x37, 0x14, 0x27, 0x0d, 0x12, 0x8d, 0xbd, - 0x06, 0x5f, 0x66, 0x19, 0xe5, 0xa2, 0x89, 0xfb, 0x98, 0x7c, 0xa5, 0x07, 0x30, 0x57, 0xa1, 0x04, 0x88, 0x7e, 0x63, - 0x59, 0x6c, 0x44, 0xdb, 0x62, 0x03, 0x4b, 0xa9, 0x9a, 0xeb, 0xd5, 0xf4, 0xd9, 0x2b, 0xd1, 0xbc, 0x8f, 0x66, 0x9c, - 0xd2, 0x68, 0xc0, 0x71, 0x1a, 0x85, 0xdb, 0xf7, 0xf7, 0xa2, 0x5c, 0x66, 0x60, 0xc9, 0x56, 0xe1, 0x14, 0x97, 0x8d, - 0x3a, 0x23, 0x5e, 0xe6, 0xb1, 0x02, 0xe8, 0x78, 0x4c, 0x00, 0x54, 0x17, 0x04, 0x54, 0x44, 0x4b, 0xe9, 0xad, 0xd0, - 0x62, 0xa1, 0xde, 0x70, 0x94, 0xc2, 0x1f, 0xe9, 0xcf, 0x83, 0x7c, 0x0a, 0x40, 0xec, 0xfa, 0x38, 0x7a, 0x53, 0x94, - 0xf4, 0xa9, 0x62, 0x96, 0xcb, 0xc1, 0x04, 0x76, 0x75, 0x22, 0x43, 0xad, 0x20, 0x6f, 0xd5, 0x95, 0xb7, 0x32, 0x79, - 0x1b, 0xe3, 0x94, 0xfc, 0xc8, 0x4d, 0xc7, 0x1a, 0x31, 0xf0, 0xca, 0xd3, 0x3a, 0x4d, 0x90, 0x26, 0x17, 0xc0, 0x30, - 0xc4, 0xb7, 0x99, 0xf7, 0xd2, 0x73, 0xa4, 0x2a, 0x48, 0x66, 0xbb, 0xcc, 0x53, 0x17, 0x51, 0x7d, 0xe5, 0xd4, 0xd2, - 0x99, 0xd3, 0x8f, 0x00, 0xde, 0x63, 0x6a, 0xd2, 0x90, 0x8f, 0x70, 0x5b, 0x8a, 0xaf, 0xb7, 0xea, 0x1a, 0x2f, 0x8d, - 0xce, 0xdd, 0xcb, 0x97, 0xee, 0x34, 0xe8, 0xa7, 0x20, 0x28, 0xe7, 0xcb, 0x52, 0xc0, 0x9e, 0x32, 0x9b, 0xeb, 0xd5, - 0xaa, 0x15, 0x5a, 0x87, 0xc3, 0x58, 0x3b, 0x0a, 0x69, 0x75, 0x16, 0xb0, 0xd5, 0x48, 0xa7, 0x04, 0x08, 0xc1, 0x71, - 0x1a, 0x76, 0x82, 0x71, 0x97, 0x4e, 0x23, 0xb2, 0x5e, 0x29, 0x49, 0x17, 0x66, 0x90, 0xfc, 0x93, 0xbc, 0x9e, 0x01, - 0x2d, 0x01, 0x1c, 0x8a, 0x58, 0xc2, 0xc3, 0x49, 0x72, 0x05, 0xd0, 0xe9, 0x70, 0x50, 0x69, 0x68, 0xce, 0x6a, 0x96, - 0xcc, 0x27, 0xb1, 0x54, 0x55, 0x1e, 0x0e, 0x9e, 0x72, 0x33, 0xe8, 0xf7, 0xb3, 0x69, 0xa9, 0x5c, 0x00, 0x82, 0x58, - 0x17, 0x06, 0x88, 0x47, 0x5a, 0x78, 0xb2, 0xe8, 0x53, 0x12, 0xbf, 0x9c, 0x25, 0x73, 0x93, 0x0d, 0xef, 0xc0, 0x08, - 0x36, 0xe3, 0xba, 0xa4, 0x4c, 0x7b, 0x54, 0x7e, 0xcf, 0xe8, 0xa9, 0xed, 0x6b, 0xad, 0xb6, 0x88, 0x75, 0x1d, 0x5c, - 0x95, 0xa8, 0xa7, 0xf8, 0xa0, 0x24, 0xc1, 0xfb, 0xb5, 0x73, 0x33, 0x52, 0xbe, 0x16, 0xb9, 0x1f, 0xb4, 0x33, 0xb5, - 0x72, 0xe0, 0x08, 0xe4, 0x58, 0x45, 0x25, 0xaf, 0x77, 0x1d, 0x82, 0x47, 0x77, 0xa5, 0x02, 0xe5, 0xe0, 0x17, 0x20, - 0x46, 0xd7, 0x57, 0x9d, 0x35, 0xd4, 0x4c, 0xa3, 0xca, 0x23, 0xe8, 0xd4, 0x01, 0x3c, 0x29, 0x78, 0xa9, 0xd5, 0x8f, - 0x87, 0x83, 0x67, 0x7e, 0xf0, 0x57, 0x99, 0xbe, 0x85, 0x98, 0x28, 0xa7, 0x1a, 0x21, 0x71, 0xa5, 0x24, 0x11, 0x1f, - 0x2f, 0x5a, 0x56, 0x8c, 0xca, 0xf0, 0x81, 0x57, 0xaa, 0x7c, 0x75, 0xaa, 0xf2, 0x62, 0xa4, 0x6d, 0x09, 0xbc, 0x26, - 0xff, 0x10, 0xb9, 0xe6, 0xad, 0xaf, 0xbb, 0xca, 0xd0, 0x6b, 0x59, 0x81, 0x8e, 0x60, 0x2b, 0x4b, 0xc9, 0x01, 0x9f, - 0x54, 0x77, 0xd5, 0xaa, 0xf5, 0x39, 0x65, 0x1b, 0xe1, 0x26, 0xbf, 0x8e, 0x1d, 0x1c, 0x29, 0xbf, 0xc1, 0x73, 0x01, - 0xec, 0x35, 0x60, 0x6f, 0xce, 0x59, 0xd1, 0x3c, 0x3a, 0xa4, 0x6d, 0x81, 0x46, 0x66, 0x6e, 0xe7, 0xea, 0xbe, 0x2d, - 0x8f, 0xd2, 0x18, 0x22, 0xd3, 0x1e, 0x99, 0x0e, 0x36, 0xa3, 0xfc, 0xb7, 0x94, 0xdf, 0x2a, 0x1c, 0x03, 0xdf, 0x4e, - 0xbd, 0x03, 0xa8, 0x7a, 0xda, 0x20, 0x63, 0xcd, 0x30, 0xb4, 0xb2, 0xcb, 0xa5, 0xd0, 0x12, 0xb4, 0xd4, 0x4d, 0x10, - 0x9c, 0x1f, 0x11, 0xe5, 0x08, 0x40, 0x17, 0x29, 0x60, 0x82, 0x9f, 0xd2, 0x76, 0xf7, 0xfb, 0xeb, 0xd4, 0x23, 0xf7, - 0xae, 0x50, 0xa3, 0x84, 0x12, 0x8c, 0xfd, 0x44, 0x63, 0x06, 0x1d, 0x5d, 0x91, 0x13, 0x9e, 0xb5, 0x3a, 0xac, 0xeb, - 0xa6, 0x0c, 0xca, 0xe2, 0x98, 0x57, 0xd3, 0xd9, 0xef, 0x4f, 0xf6, 0x75, 0x83, 0x2c, 0xe4, 0xbf, 0xb3, 0x1e, 0x92, - 0x41, 0xf7, 0x20, 0x14, 0xa2, 0x37, 0x0f, 0x66, 0xf8, 0x1f, 0xdb, 0xf0, 0xec, 0x1b, 0x6e, 0xd4, 0x09, 0x60, 0x8e, - 0xb8, 0x5e, 0x7a, 0x8a, 0xb6, 0x1e, 0x6e, 0x81, 0x6c, 0x8d, 0x97, 0xb7, 0xf6, 0x1a, 0xc8, 0x29, 0x8e, 0xff, 0x8e, - 0x67, 0x6a, 0x65, 0x83, 0x9f, 0x9e, 0xb2, 0x1d, 0x78, 0x78, 0x11, 0x02, 0x8a, 0x61, 0xd9, 0xf8, 0x3b, 0xcb, 0x71, - 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, 0x5b, 0x79, 0x77, 0xe4, - 0x94, 0x79, 0xa7, 0x87, 0xd1, 0x75, 0x49, 0xfa, 0x26, 0xf9, 0xd8, 0x1a, 0xb6, 0xdf, 0xb5, 0xfb, 0xcd, 0x10, 0x41, - 0x08, 0xe5, 0xf8, 0x39, 0xa3, 0x13, 0x1a, 0x1f, 0x56, 0xb3, 0xd3, 0xeb, 0xf7, 0xce, 0xf1, 0x82, 0xad, 0xd1, 0x00, - 0x8f, 0x87, 0x2e, 0xe6, 0x89, 0x1a, 0x3a, 0x5d, 0xd7, 0xce, 0xc1, 0x03, 0x83, 0x2c, 0x4f, 0xbe, 0x61, 0x58, 0x62, - 0x7f, 0x12, 0xf1, 0xa4, 0xad, 0xda, 0xd8, 0x1c, 0xa9, 0x36, 0x6a, 0x06, 0x7e, 0xf0, 0x0a, 0x0a, 0x8c, 0x2e, 0x48, - 0x2b, 0x30, 0x0e, 0x47, 0x00, 0xb2, 0x62, 0x1c, 0x8f, 0x0c, 0x26, 0x30, 0xa4, 0x1b, 0x8a, 0x02, 0xf0, 0xf0, 0x38, - 0x1e, 0x84, 0x0c, 0x20, 0x5d, 0xf0, 0xd0, 0xb0, 0x4d, 0x42, 0xca, 0xcf, 0xf3, 0xbc, 0x56, 0x43, 0xe8, 0x3b, 0x0b, - 0xd5, 0xb1, 0x1f, 0x69, 0xaf, 0x58, 0xd7, 0xaa, 0x74, 0x64, 0xab, 0x03, 0xf4, 0x0d, 0x19, 0xf8, 0xd6, 0xb1, 0x05, - 0x40, 0xb4, 0xc4, 0x6f, 0xa9, 0x57, 0xfb, 0x32, 0x66, 0x85, 0x7a, 0x7d, 0x61, 0xda, 0xf5, 0x5a, 0x5a, 0x14, 0x50, - 0x71, 0xdb, 0xaa, 0xed, 0x91, 0x9c, 0xff, 0xf8, 0xae, 0xa3, 0x1d, 0x9f, 0x9d, 0x1a, 0x5b, 0x42, 0x99, 0x5b, 0x3c, - 0x91, 0xd5, 0xd1, 0x96, 0xea, 0x54, 0x1f, 0x70, 0xa9, 0x49, 0x75, 0x66, 0x60, 0x78, 0x8d, 0x00, 0xe5, 0x16, 0x22, - 0x69, 0x1c, 0xf6, 0xce, 0x27, 0x83, 0x82, 0xb9, 0x45, 0x02, 0x12, 0xd8, 0xc6, 0xd6, 0x2e, 0x9a, 0xeb, 0xd7, 0x6f, - 0xa9, 0x57, 0xb5, 0xa9, 0xea, 0xc1, 0x1b, 0x2f, 0x70, 0xf6, 0x4e, 0x6b, 0x01, 0x01, 0x14, 0xb6, 0x96, 0xe5, 0xe0, - 0xdc, 0xed, 0xaa, 0x96, 0x8a, 0x32, 0xea, 0xf7, 0xcf, 0x7f, 0x4b, 0x51, 0x11, 0x7b, 0xaa, 0x38, 0x65, 0xfd, 0x76, - 0xcb, 0x5c, 0x54, 0x96, 0xbc, 0x41, 0x15, 0xad, 0xd5, 0x51, 0x53, 0xb9, 0x6e, 0xae, 0x5a, 0x32, 0x41, 0x8c, 0xee, - 0xd3, 0xb5, 0xce, 0x9d, 0x7a, 0xef, 0x55, 0x1c, 0x31, 0x10, 0xdc, 0x74, 0x8f, 0x0f, 0x0e, 0x42, 0xa3, 0xa2, 0x5c, - 0x70, 0xa3, 0xb4, 0xaa, 0xa4, 0x14, 0xf2, 0x56, 0x45, 0x73, 0xa6, 0x8f, 0x00, 0x88, 0x00, 0xab, 0x44, 0xfd, 0x1f, - 0xbe, 0x34, 0xc6, 0x83, 0x07, 0xbe, 0x26, 0xd7, 0xb1, 0xf5, 0xfe, 0x69, 0x8d, 0xb4, 0xda, 0x38, 0x26, 0xb5, 0xea, - 0x65, 0xab, 0x78, 0xd9, 0xbd, 0x4e, 0xc5, 0xe0, 0xf9, 0xff, 0xdc, 0x07, 0xa8, 0x11, 0x2d, 0x65, 0x70, 0xeb, 0x6a, - 0x80, 0xc6, 0x87, 0x63, 0xe1, 0x1b, 0x3f, 0x64, 0x9c, 0x0f, 0x66, 0xe8, 0xa8, 0x36, 0x07, 0x07, 0x04, 0x47, 0x75, - 0x8f, 0xc6, 0x84, 0x59, 0x38, 0xf7, 0x20, 0x50, 0x7d, 0xe2, 0x3e, 0xe3, 0xda, 0x0b, 0xda, 0x04, 0x3e, 0x59, 0xd7, - 0x35, 0x45, 0x80, 0x8b, 0xd8, 0x98, 0x88, 0x21, 0x2e, 0x9b, 0x44, 0xea, 0x9b, 0x31, 0x28, 0x00, 0x8a, 0x17, 0x15, - 0xc9, 0xa5, 0x8b, 0x34, 0xaf, 0x44, 0x59, 0xeb, 0x66, 0x54, 0xac, 0x18, 0x02, 0xc0, 0x43, 0x50, 0x5c, 0x55, 0x66, - 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x6a, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, 0xd2, 0x3b, 0x1f, 0xb7, 0xce, - 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, 0x3f, 0xe3, 0x2f, 0x08, 0x4c, - 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x82, 0x97, 0x93, 0x70, 0x38, 0xf4, 0x41, 0x1f, - 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, 0x10, 0xd1, 0x42, 0x43, 0x1f, - 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, 0xda, 0xd0, 0x22, 0xc5, 0x45, - 0xa3, 0xcc, 0x66, 0xb9, 0xec, 0x84, 0x8d, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, 0x54, 0xad, 0xa7, 0x7a, 0x3d, - 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa4, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, 0xa3, 0x6a, 0x9d, 0xa5, 0x11, - 0x55, 0x6e, 0x92, 0xbb, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0x97, 0x29, 0x3b, 0x5b, 0x83, 0x13, 0x47, 0x9e, 0x4b, 0x6e, - 0xf9, 0xee, 0xbc, 0xa2, 0xbb, 0x53, 0xed, 0x5b, 0x80, 0x7b, 0x33, 0x6c, 0xc8, 0x9c, 0xd7, 0xd8, 0x69, 0x10, 0x26, - 0x81, 0x1f, 0xb1, 0x8f, 0x19, 0xb2, 0xc1, 0x80, 0x8e, 0x42, 0xfa, 0x5f, 0x5b, 0xe6, 0x48, 0xc0, 0xe4, 0xaf, 0xe7, - 0x7e, 0xb3, 0x28, 0x72, 0x58, 0x8c, 0x1f, 0x36, 0x18, 0x69, 0xac, 0xd6, 0x60, 0x58, 0xde, 0x21, 0xf2, 0xa7, 0x76, - 0xc7, 0x34, 0xd5, 0xf1, 0x66, 0xbd, 0xd6, 0xfc, 0xea, 0xe9, 0x53, 0x5d, 0x9f, 0xff, 0xf6, 0xfd, 0x65, 0x58, 0x33, - 0xfb, 0x43, 0x10, 0x4a, 0xbb, 0x77, 0x8b, 0x73, 0x47, 0xa2, 0x77, 0xac, 0x34, 0xb3, 0x4b, 0xbb, 0x64, 0x97, 0xa6, - 0xb4, 0x1b, 0x72, 0xbd, 0xfa, 0x4a, 0x79, 0x63, 0xe7, 0x15, 0xd3, 0xfd, 0x7b, 0xa1, 0x77, 0x94, 0x53, 0x35, 0x81, - 0x88, 0x26, 0xed, 0x48, 0xdc, 0xee, 0x95, 0xe1, 0xf3, 0x49, 0xde, 0x2e, 0xe1, 0xa8, 0x6b, 0x58, 0x6e, 0xbe, 0xfd, - 0xcf, 0xbc, 0xea, 0xac, 0x70, 0xfb, 0xa5, 0x31, 0x6b, 0x7f, 0x0a, 0xe2, 0xaa, 0xfe, 0xf0, 0x9e, 0xd4, 0x4c, 0xc9, - 0xff, 0x55, 0x8f, 0x81, 0xab, 0x9f, 0x4c, 0x3b, 0xba, 0xa7, 0x10, 0x36, 0x98, 0xfd, 0xfc, 0xf8, 0xa1, 0x05, 0xab, - 0xea, 0x02, 0x45, 0x72, 0x00, 0x9d, 0xbb, 0x64, 0x84, 0xf7, 0x3b, 0xc6, 0xb9, 0x7f, 0xf5, 0xbd, 0x9a, 0x1c, 0x21, - 0xa2, 0x5d, 0x84, 0x03, 0x80, 0xb8, 0xd3, 0x54, 0xd6, 0xa1, 0x06, 0xe8, 0x03, 0x02, 0xeb, 0xd0, 0xb7, 0x19, 0xc0, - 0x41, 0x1f, 0x6d, 0x9e, 0x45, 0x20, 0xaf, 0x7b, 0xf7, 0xec, 0x9a, 0xed, 0x7c, 0xfe, 0x62, 0x95, 0x7a, 0xf7, 0xe8, - 0x10, 0x7c, 0x3e, 0xf6, 0xa7, 0x97, 0x81, 0xc1, 0x85, 0x66, 0xd7, 0xcf, 0x04, 0xdb, 0xb1, 0xdd, 0x33, 0x44, 0x2a, - 0xea, 0xce, 0x3f, 0xbc, 0x34, 0xd1, 0xf3, 0xce, 0x0b, 0x77, 0x7c, 0x09, 0xe0, 0x81, 0x2c, 0x06, 0x14, 0x9f, 0xa5, - 0xf7, 0x2f, 0x96, 0x80, 0x9a, 0xfc, 0x96, 0xaf, 0xbd, 0x2f, 0x94, 0xba, 0x80, 0x3f, 0x07, 0x94, 0x3e, 0xc9, 0xb9, - 0x77, 0x37, 0xbc, 0xf5, 0x2f, 0x9e, 0x83, 0xf3, 0xc4, 0x6a, 0xb8, 0x80, 0xbf, 0x0a, 0x3e, 0xf4, 0xee, 0x06, 0x98, - 0x58, 0xf2, 0xa1, 0xb7, 0x1a, 0x40, 0xaa, 0xc2, 0x85, 0xc4, 0xd8, 0x87, 0x5f, 0x83, 0x9c, 0xe1, 0x1f, 0xbf, 0x69, - 0x0c, 0xd6, 0x5f, 0x83, 0x42, 0xa3, 0xb1, 0x96, 0x2a, 0x64, 0x29, 0x16, 0x67, 0x02, 0x6c, 0xc2, 0x71, 0xb7, 0x2f, - 0x56, 0xb5, 0x59, 0x0b, 0xfa, 0xf3, 0x11, 0xdf, 0xa3, 0xb1, 0xba, 0x2a, 0xe7, 0xa2, 0xfc, 0x88, 0xf4, 0xa9, 0x8e, - 0x8f, 0x51, 0xb1, 0xa9, 0xbb, 0xd3, 0xa9, 0x56, 0x1d, 0x69, 0xbf, 0x29, 0xd7, 0x60, 0xc7, 0xeb, 0xe4, 0xc8, 0x52, - 0x78, 0xd6, 0x61, 0xe7, 0xa5, 0x53, 0xa2, 0xc3, 0x30, 0xde, 0x6d, 0xd5, 0x33, 0x86, 0xf2, 0xdc, 0x60, 0x4c, 0x17, - 0x3c, 0xe2, 0x2f, 0x06, 0xb9, 0x0c, 0x8d, 0xf9, 0x80, 0x6c, 0x18, 0xca, 0x87, 0x16, 0x19, 0x12, 0x22, 0xde, 0x43, - 0x25, 0x60, 0xdb, 0x82, 0x32, 0x29, 0xe0, 0x2c, 0x1a, 0xfc, 0x56, 0x7b, 0x39, 0xf0, 0x1e, 0x44, 0x7e, 0x23, 0x5d, - 0xca, 0x25, 0x36, 0x3a, 0x71, 0x2c, 0x0b, 0xed, 0x3c, 0xae, 0xbf, 0x8e, 0x41, 0xfd, 0x5e, 0xe9, 0x37, 0x28, 0x67, - 0x7f, 0x94, 0xac, 0xd3, 0xc6, 0x13, 0xe3, 0x1f, 0xae, 0xf2, 0x4f, 0xd1, 0x52, 0x0f, 0xff, 0x9f, 0x31, 0x85, 0xd2, - 0xbf, 0x4a, 0xcb, 0x68, 0xb3, 0x5a, 0x8a, 0x52, 0xe4, 0x91, 0x38, 0xf9, 0x5a, 0x64, 0xe7, 0xf2, 0x9d, 0x4f, 0xa1, - 0x5f, 0x00, 0x5a, 0xf6, 0x09, 0x32, 0xfa, 0x7b, 0x26, 0xf8, 0xf0, 0x7b, 0xed, 0x5c, 0x9b, 0xf3, 0xf1, 0x24, 0xbf, - 0xb2, 0xf6, 0x6e, 0xc7, 0x8b, 0xc4, 0x28, 0xc6, 0x72, 0x5f, 0x75, 0xb3, 0x72, 0xa2, 0x92, 0x03, 0x23, 0x5d, 0x93, - 0xbd, 0x5c, 0xc9, 0xba, 0x9d, 0x6e, 0x25, 0x10, 0x51, 0x05, 0xde, 0x63, 0x5c, 0xc5, 0x3e, 0x82, 0xe9, 0xba, 0xe3, - 0x32, 0xda, 0xf1, 0x9e, 0xf1, 0xea, 0x44, 0x59, 0xc1, 0xed, 0x46, 0xb4, 0x27, 0x74, 0xf4, 0xd3, 0xa4, 0xb6, 0x2c, - 0x1c, 0x80, 0xdc, 0x25, 0x8c, 0x65, 0x43, 0xb0, 0x62, 0x50, 0xfa, 0x7a, 0x4d, 0xc9, 0xb2, 0x00, 0x8b, 0xce, 0x2e, - 0x23, 0x10, 0xc3, 0xba, 0x69, 0x4e, 0xe8, 0x78, 0xe9, 0xe2, 0xbc, 0xd7, 0x2a, 0x52, 0xf0, 0x8c, 0x16, 0x1d, 0x73, - 0xd3, 0x91, 0x6e, 0x8c, 0xf6, 0xf6, 0x7b, 0x83, 0x90, 0xe2, 0xf9, 0x03, 0x5b, 0xad, 0x8b, 0x8b, 0xc4, 0x2b, 0x64, - 0xa2, 0x05, 0xb1, 0x14, 0x81, 0x19, 0x2f, 0x34, 0x8d, 0x30, 0x41, 0x99, 0x12, 0x2c, 0x5a, 0xa3, 0x43, 0xfb, 0xc3, - 0x12, 0x76, 0x8f, 0x31, 0x02, 0x04, 0xaa, 0x4c, 0x9f, 0xc3, 0xd6, 0x84, 0xd9, 0xd4, 0xc5, 0x06, 0x68, 0xab, 0x18, - 0x1a, 0x84, 0xb5, 0x21, 0xe6, 0x63, 0x9a, 0xdf, 0xfd, 0x0b, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, 0xde, 0xed, 0x9a, 0x84, - 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xa8, 0x1d, 0x6b, 0xa9, 0x77, 0xac, 0xb5, - 0xde, 0xb1, 0xee, 0x1a, 0xfe, 0x21, 0xf3, 0x62, 0x96, 0x80, 0x7e, 0x77, 0xc5, 0x55, 0x83, 0xa0, 0x19, 0x1b, 0x76, - 0x0b, 0xbf, 0x25, 0xd6, 0x6e, 0xe9, 0x5f, 0x2c, 0xd9, 0xc2, 0xf4, 0x81, 0x6e, 0x1d, 0x60, 0x19, 0x51, 0x93, 0xef, - 0x91, 0x77, 0xd3, 0x59, 0x51, 0xb8, 0x3d, 0xb1, 0x85, 0xcf, 0xae, 0xcd, 0x9b, 0xf7, 0xcf, 0x22, 0xc8, 0xbd, 0xe3, - 0xde, 0xfd, 0xf0, 0xda, 0xbf, 0xd0, 0x2d, 0x90, 0x93, 0x59, 0xce, 0x40, 0xea, 0x88, 0x4f, 0x10, 0xad, 0xec, 0x29, - 0xdf, 0x09, 0xb9, 0xb3, 0xad, 0x9f, 0xdd, 0xbb, 0xdb, 0xda, 0xdd, 0xb3, 0x7b, 0x56, 0x8d, 0x28, 0x56, 0x9c, 0xa6, - 0x48, 0x98, 0x45, 0x1b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xdd, 0xb3, 0x8e, 0x8e, 0x97, 0x73, 0xc0, - 0xee, 0xfe, 0xa3, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0x77, 0xcf, 0x32, 0x8d, 0xe7, 0x70, 0x24, 0x9f, 0x8e, - 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, 0xd6, 0x35, 0x6f, 0xaf, - 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, 0x70, 0xbc, 0xe4, 0xb1, - 0xef, 0xd3, 0x2c, 0xad, 0x77, 0xa8, 0xb5, 0xa8, 0x2c, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, 0x61, 0xa9, 0xe9, 0x9f, - 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2b, 0x2e, 0xbe, 0x3f, 0x2d, 0x94, 0x6b, 0x37, 0x6f, 0xe3, - 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x8e, 0x94, 0x5d, 0x2c, 0xe1, 0x1e, - 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf1, 0x9c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, 0x62, 0x5b, 0xb8, 0x78, - 0xce, 0x36, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0x8d, 0x6a, 0x8e, 0x35, 0xd4, 0x6c, 0x6d, - 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0xee, 0xda, 0x8a, 0x8f, 0x95, 0xb5, 0x2e, 0xdd, 0xeb, 0x3d, 0xaa, 0x0b, 0x60, - 0xeb, 0xbf, 0x3d, 0x5e, 0xb9, 0x9e, 0xcf, 0x08, 0xe0, 0x6b, 0xc1, 0xc7, 0x93, 0x05, 0x7a, 0x95, 0x2c, 0xfc, 0xdb, - 0x81, 0x1a, 0x7f, 0xa7, 0x73, 0x17, 0x00, 0x5d, 0x49, 0x79, 0x05, 0xe4, 0x1d, 0xe4, 0x98, 0x5b, 0x76, 0xe5, 0xfd, - 0xc9, 0x77, 0xd8, 0x35, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x81, 0x53, 0x41, 0x32, 0xb0, 0x97, 0x15, 0xdb, 0x05, 0xb1, - 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x84, 0x20, 0xae, 0xe0, 0x16, 0xe2, 0xf0, 0xe4, 0x9f, 0x83, 0xfb, 0xd6, 0x66, - 0x7d, 0xcf, 0xac, 0xce, 0x09, 0xd6, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0x56, 0xfd, 0xbe, 0xb7, 0xd3, 0x8e, 0x4f, - 0x77, 0x52, 0x27, 0x76, 0x5a, 0xab, 0xb5, 0x60, 0xd7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x40, 0xfc, 0x74, 0x3b, 0xe0, - 0xf7, 0x1d, 0x6b, 0xcb, 0xbb, 0x66, 0x0b, 0xb6, 0x83, 0x4b, 0x50, 0xd3, 0x5e, 0xf6, 0x27, 0x95, 0x0b, 0xda, 0xb1, - 0x4b, 0xe2, 0xe1, 0x8c, 0x59, 0xa5, 0xcc, 0xac, 0x93, 0xea, 0x4a, 0x74, 0xc6, 0x74, 0xd6, 0x7a, 0x3e, 0x57, 0xf3, - 0x49, 0xa1, 0x41, 0xfd, 0xce, 0x89, 0x8f, 0xa8, 0xe8, 0x3c, 0x81, 0xad, 0x65, 0x05, 0xb1, 0xda, 0xe7, 0x60, 0xad, - 0xd5, 0x2e, 0xfd, 0x5e, 0x3e, 0xe0, 0x36, 0xe5, 0xb0, 0x0e, 0x0c, 0x6a, 0x4e, 0xac, 0xa8, 0xc7, 0x6c, 0xc7, 0xb8, - 0xf9, 0xe9, 0xe5, 0x0f, 0x4e, 0x58, 0xb2, 0x62, 0xb5, 0x3f, 0xfd, 0xfe, 0x99, 0xa7, 0xbf, 0x53, 0xfb, 0x17, 0xc2, - 0x0f, 0xc6, 0xff, 0xa9, 0xdd, 0xd7, 0x5a, 0x8c, 0xca, 0x56, 0x39, 0x42, 0xe3, 0x6e, 0x25, 0x4d, 0x96, 0x9f, 0x84, - 0x27, 0xac, 0x05, 0xcf, 0x72, 0xbd, 0x44, 0xb3, 0x02, 0x56, 0x58, 0xcb, 0x24, 0x5c, 0x61, 0xac, 0x96, 0xb6, 0xfa, - 0x16, 0x4d, 0x73, 0x7c, 0x38, 0xd7, 0x06, 0x65, 0xca, 0xd9, 0x19, 0xb1, 0x1a, 0x2e, 0xc3, 0xd2, 0x84, 0x22, 0x64, - 0xf7, 0x76, 0x70, 0x63, 0xa7, 0x2c, 0xa5, 0x0c, 0xe7, 0x18, 0x4c, 0x78, 0x24, 0x46, 0x55, 0xbe, 0xbf, 0x2f, 0x29, - 0x72, 0xda, 0x96, 0x83, 0x2a, 0x84, 0x7d, 0x24, 0x51, 0x02, 0xb7, 0x22, 0x2d, 0x14, 0x29, 0x8b, 0xbf, 0x1d, 0xa0, - 0x0b, 0xbc, 0x80, 0xba, 0x1a, 0x75, 0xfb, 0xc3, 0x11, 0x0f, 0x1f, 0x99, 0xfa, 0xc0, 0x88, 0x25, 0x81, 0xda, 0x5e, - 0x66, 0xe9, 0x1d, 0xa8, 0xf0, 0x7b, 0xb8, 0x9a, 0x88, 0xfd, 0xdc, 0x92, 0xa2, 0x22, 0x1b, 0xe9, 0x0d, 0xad, 0xc1, - 0x23, 0xb4, 0xa6, 0x7c, 0xef, 0xa4, 0xda, 0xa4, 0xf3, 0x8e, 0x90, 0x63, 0xf5, 0xad, 0x25, 0x8c, 0x76, 0x45, 0x2f, - 0xee, 0x1d, 0xbd, 0xe7, 0xe9, 0xaa, 0xe7, 0xfe, 0xc4, 0x15, 0xf3, 0xe4, 0x36, 0x02, 0x75, 0x2b, 0xa8, 0x6e, 0xef, - 0x55, 0x82, 0x05, 0x4b, 0xda, 0x7d, 0xfc, 0x76, 0xd6, 0x0e, 0x44, 0x65, 0xac, 0xd2, 0xd7, 0x24, 0x61, 0x4f, 0x0c, - 0x3a, 0x85, 0xaa, 0xdc, 0xee, 0x8e, 0xb6, 0xc0, 0x75, 0xcc, 0x52, 0xf4, 0xd2, 0x16, 0xb9, 0x5b, 0xfe, 0xdd, 0x73, - 0x45, 0xce, 0x7e, 0x09, 0x08, 0x4e, 0xcd, 0x57, 0xc4, 0x97, 0x23, 0x3c, 0xaa, 0x6e, 0x81, 0xe3, 0xf4, 0x1d, 0xc0, - 0x3f, 0x1c, 0x2e, 0x41, 0x13, 0x10, 0x0b, 0xd6, 0x4b, 0xe3, 0x1e, 0xeb, 0xc5, 0xc5, 0xe6, 0x2e, 0xc9, 0x37, 0xe0, - 0xcc, 0x40, 0xa9, 0x96, 0x7e, 0xe0, 0x58, 0x2d, 0xa0, 0xc2, 0xc1, 0xec, 0xa4, 0x5e, 0x58, 0x46, 0x3d, 0xa6, 0xcf, - 0xcf, 0x60, 0xef, 0x08, 0x09, 0x80, 0xfb, 0x65, 0x1f, 0x90, 0x80, 0x87, 0xce, 0xec, 0x80, 0x70, 0xc2, 0x2c, 0xaa, - 0x02, 0x89, 0xe4, 0x48, 0x3f, 0x7b, 0xcc, 0x44, 0xf2, 0x07, 0xb3, 0x9e, 0x73, 0x4a, 0xf4, 0x58, 0x4f, 0x1d, 0x21, - 0x3d, 0xd6, 0xb3, 0x8e, 0x88, 0x1e, 0xeb, 0x59, 0xc7, 0x47, 0x8f, 0xf5, 0xcc, 0xb1, 0xd3, 0x83, 0xc0, 0x04, 0x88, - 0x3c, 0x60, 0x3d, 0x9a, 0x4c, 0x3d, 0xc5, 0x3d, 0x40, 0x34, 0x08, 0xac, 0x27, 0x85, 0xf3, 0x1e, 0x20, 0x8f, 0x91, - 0x58, 0x1d, 0xf4, 0xfe, 0x32, 0x7e, 0xda, 0x33, 0x32, 0xf2, 0xb8, 0x75, 0x58, 0xfd, 0xaf, 0xbf, 0x42, 0x00, 0x1c, - 0x9e, 0x4d, 0xbd, 0xcb, 0x31, 0x64, 0x95, 0x65, 0x04, 0x92, 0x9f, 0x18, 0x7c, 0xf9, 0x02, 0xa0, 0xea, 0x33, 0x5d, - 0xab, 0xc9, 0x51, 0x7b, 0xcc, 0xa1, 0x2b, 0x06, 0x80, 0x6d, 0x58, 0xa2, 0xaa, 0x16, 0x36, 0x61, 0x71, 0xfb, 0x19, - 0x46, 0x73, 0xd9, 0xf4, 0x82, 0x06, 0xea, 0x11, 0x82, 0x5f, 0x5a, 0x0f, 0xad, 0xb5, 0x4c, 0x39, 0x74, 0x6d, 0x14, - 0x55, 0x36, 0xd4, 0x25, 0xac, 0xd6, 0x22, 0xaa, 0x89, 0x22, 0xe5, 0x92, 0x51, 0x14, 0x4b, 0x15, 0xec, 0x33, 0x71, - 0x07, 0x51, 0xf3, 0xb4, 0xd5, 0x56, 0xc1, 0xfe, 0x0e, 0x10, 0xd6, 0xc2, 0x5a, 0x48, 0x67, 0x50, 0x7b, 0xa7, 0x1f, - 0x29, 0x7f, 0x79, 0x21, 0xb7, 0x73, 0x0b, 0x45, 0xb8, 0x3d, 0x07, 0xe5, 0x4d, 0x5d, 0x95, 0x8a, 0x68, 0xb4, 0x04, - 0x4a, 0x99, 0x13, 0x44, 0x16, 0x20, 0x80, 0xe3, 0x06, 0x02, 0x9f, 0xd7, 0xf8, 0x04, 0x1a, 0x85, 0x40, 0x7e, 0x60, - 0x15, 0xae, 0x3d, 0xa4, 0xa5, 0xd6, 0x88, 0x28, 0x11, 0x3f, 0xba, 0x7a, 0x8e, 0xed, 0xab, 0xa7, 0xb1, 0xb6, 0x94, - 0x26, 0x88, 0x9f, 0x58, 0x6c, 0x21, 0x26, 0x88, 0xea, 0x10, 0x1d, 0xc1, 0x72, 0x42, 0x88, 0xc2, 0x1f, 0x42, 0x3f, - 0x35, 0xf0, 0x97, 0x6c, 0x59, 0xe4, 0x35, 0xc1, 0x62, 0x56, 0x0c, 0xd0, 0xaa, 0x08, 0x3c, 0xd3, 0xd9, 0x52, 0x99, - 0xd3, 0x3c, 0x3a, 0xb2, 0x83, 0xf3, 0xae, 0x83, 0xbd, 0xf4, 0x65, 0xec, 0x64, 0xd9, 0x34, 0x6a, 0x63, 0x43, 0x24, - 0xbc, 0x22, 0x7f, 0x95, 0xa5, 0xc6, 0x39, 0x32, 0x97, 0xeb, 0xbb, 0x2e, 0xee, 0xee, 0x68, 0x9b, 0xb0, 0x0a, 0x11, - 0xea, 0xb6, 0xa1, 0x72, 0x29, 0xcc, 0xc6, 0xa6, 0x69, 0x80, 0x2f, 0x14, 0x95, 0x4a, 0x55, 0x6a, 0x2b, 0x95, 0x9c, - 0xf0, 0xae, 0xaf, 0x6a, 0x91, 0xba, 0x22, 0xd8, 0xc6, 0x0c, 0xf5, 0x50, 0x6e, 0xd4, 0xd8, 0xd7, 0x1d, 0xab, 0xf4, - 0x0e, 0x13, 0xe4, 0x8c, 0xbc, 0xc8, 0xc1, 0x45, 0x49, 0x41, 0xe6, 0x6a, 0x08, 0xf3, 0x47, 0x0d, 0x9f, 0x16, 0x96, - 0x7b, 0x28, 0x01, 0xb3, 0xa3, 0x86, 0x97, 0x11, 0x02, 0x11, 0x97, 0xca, 0xbe, 0x62, 0xe2, 0xf7, 0x14, 0xcc, 0x92, - 0x09, 0xdd, 0x8b, 0x58, 0x18, 0xa1, 0x8d, 0x4f, 0x92, 0x64, 0xea, 0x69, 0x0a, 0x6e, 0xe4, 0x32, 0xcc, 0xd1, 0x08, - 0x2d, 0xf9, 0xc8, 0x81, 0xf4, 0xb5, 0x9c, 0x4a, 0xf0, 0x11, 0x75, 0x0a, 0x38, 0x9e, 0x9f, 0x17, 0xd6, 0x4f, 0x96, - 0x4b, 0xcc, 0x65, 0x6d, 0xfe, 0xcb, 0x8e, 0x8e, 0xc1, 0x2e, 0x4f, 0x13, 0xc7, 0xd5, 0x7f, 0x54, 0x25, 0xc5, 0xc3, - 0xcf, 0x69, 0x0e, 0x28, 0x82, 0x99, 0x3d, 0xc5, 0xf8, 0xd8, 0x67, 0x99, 0x02, 0xfe, 0x76, 0xbd, 0xb5, 0x64, 0x62, - 0x97, 0xb4, 0x9b, 0x2b, 0xe3, 0x97, 0xda, 0xb0, 0xe3, 0xe0, 0xdc, 0x00, 0x14, 0x67, 0x8d, 0x0e, 0xcb, 0x6b, 0xdd, - 0xb6, 0x2a, 0x54, 0xa0, 0xd6, 0xff, 0xd9, 0x2d, 0x4c, 0x79, 0x9b, 0x97, 0xca, 0xdb, 0x3c, 0x34, 0x01, 0x02, 0x91, - 0x19, 0xf2, 0xac, 0xe9, 0x98, 0x24, 0xee, 0x1d, 0x29, 0x69, 0xdf, 0x91, 0xe2, 0x47, 0xef, 0x48, 0xc8, 0xb7, 0x84, - 0x8e, 0xec, 0x4b, 0x4e, 0x4e, 0xa0, 0xcc, 0x60, 0x2f, 0xaf, 0x99, 0xec, 0x1f, 0xd0, 0x5e, 0x38, 0x97, 0xe5, 0x15, - 0xbf, 0x16, 0xde, 0xda, 0x9f, 0xae, 0x4f, 0xbb, 0xaa, 0xde, 0x7e, 0x65, 0x66, 0x1e, 0x0e, 0xc5, 0xe1, 0x50, 0x99, - 0xa0, 0xdd, 0x05, 0x17, 0x83, 0x9c, 0xdd, 0xbb, 0xf1, 0xf1, 0xd7, 0x1c, 0x45, 0x6c, 0xa5, 0x3c, 0x92, 0x2e, 0x54, - 0x62, 0x78, 0x69, 0xe0, 0x61, 0x76, 0x7c, 0x3c, 0xd9, 0x5d, 0xdd, 0x4f, 0x06, 0x83, 0x9d, 0xea, 0xdb, 0x2d, 0xaf, - 0x67, 0xbb, 0x39, 0x7b, 0xe0, 0xb7, 0xd3, 0x6d, 0xb0, 0x6f, 0x60, 0xdb, 0xdd, 0x5d, 0x89, 0xc3, 0x61, 0xf7, 0x82, - 0x2f, 0xfc, 0xfd, 0x03, 0x02, 0x3a, 0xf3, 0xf3, 0x71, 0x1b, 0xe3, 0xe7, 0xa6, 0xed, 0xaa, 0xb5, 0x03, 0x78, 0xfa, - 0x1f, 0xbc, 0x9b, 0xd9, 0x72, 0xee, 0xb3, 0x27, 0xfc, 0x01, 0xfc, 0xf3, 0x71, 0x93, 0x44, 0xea, 0x13, 0xed, 0x32, - 0x79, 0x03, 0x0e, 0xe4, 0x3b, 0x9f, 0xbd, 0xe5, 0x0f, 0xb3, 0xe5, 0x9c, 0x17, 0x87, 0xc3, 0xfb, 0x69, 0x88, 0x64, - 0x4d, 0x61, 0x45, 0x2c, 0x29, 0x9e, 0x1f, 0x84, 0xc7, 0xef, 0x45, 0x64, 0x88, 0xb4, 0xdc, 0xbb, 0x43, 0x76, 0xc3, - 0x22, 0x3f, 0x80, 0x0f, 0xb2, 0x9d, 0x3f, 0x91, 0x35, 0xa5, 0xfb, 0xc5, 0x13, 0xff, 0x70, 0xa0, 0xbf, 0xde, 0xfa, - 0x87, 0xc3, 0x7b, 0xf6, 0x80, 0xe0, 0xe8, 0x7c, 0x07, 0xfd, 0xa3, 0x6f, 0x1d, 0x50, 0x95, 0xe1, 0xf5, 0x6c, 0x33, - 0xf7, 0x5f, 0xac, 0xd8, 0x1d, 0x70, 0xa1, 0x28, 0x2f, 0xb4, 0x1b, 0xf6, 0x80, 0x5e, 0x67, 0xe4, 0x44, 0x34, 0xdb, - 0xcd, 0x7d, 0x16, 0xe3, 0x73, 0x75, 0x5f, 0x4c, 0xbe, 0x7a, 0x5f, 0xdc, 0xb1, 0x6d, 0xf7, 0x7d, 0x51, 0xbe, 0xe9, - 0xae, 0x9f, 0x2d, 0xdb, 0xb1, 0x07, 0x98, 0x61, 0xd7, 0xfc, 0xa6, 0x39, 0x76, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, - 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0x95, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x57, 0x0b, - 0x39, 0xf3, 0xcc, 0x40, 0xdf, 0x56, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x6a, 0xa6, - 0x6d, 0x51, 0x97, 0xdf, 0xf6, 0x9e, 0xc9, 0x6f, 0x64, 0x60, 0x0b, 0x91, 0x14, 0x8e, 0xe3, 0x8b, 0xe7, 0x27, 0xfc, - 0x57, 0x2d, 0x8f, 0x5a, 0xed, 0x17, 0x4a, 0x7d, 0xfa, 0x8a, 0x8e, 0x68, 0xe2, 0x5e, 0xb4, 0x65, 0x58, 0xa3, 0xac, - 0xa9, 0xa5, 0xc3, 0x30, 0xae, 0x61, 0x5f, 0x1e, 0x38, 0xf4, 0x1d, 0x10, 0x68, 0xab, 0x54, 0x0a, 0xb4, 0x70, 0x0c, - 0xa3, 0x30, 0x0b, 0x29, 0x8f, 0x0b, 0xb3, 0x94, 0xf7, 0x58, 0xa0, 0xc5, 0xad, 0xba, 0xc7, 0xd4, 0x76, 0x0b, 0x22, - 0xac, 0xde, 0x32, 0xce, 0x2f, 0x1b, 0x55, 0xb8, 0x2d, 0x40, 0x51, 0x04, 0x65, 0xb0, 0x27, 0xb9, 0x6d, 0xa1, 0xa4, - 0xd9, 0x28, 0xac, 0xc5, 0x5d, 0x51, 0xee, 0x7a, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, 0x75, - 0x28, 0x17, 0xe9, 0x7f, 0x64, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xe7, 0x97, 0xf4, - 0x93, 0xc1, 0x32, 0x72, 0x4a, 0x7d, 0x1f, 0x8d, 0x6e, 0xd3, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, 0x0a, - 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, 0x26, - 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, 0x90, - 0xdc, 0xa9, 0x2b, 0x7f, 0x54, 0x4e, 0xfe, 0x13, 0x0d, 0x91, 0x57, 0x5c, 0x21, 0x56, 0x16, 0x5c, 0x62, 0x31, 0x54, - 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xcb, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, 0x11, - 0x3e, 0x6e, 0xad, 0x45, 0x08, 0x56, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, 0x14, - 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xa8, 0x48, 0xcf, 0x5f, 0x9a, 0x94, 0x5c, 0x1a, - 0x33, 0x3e, 0x88, 0x32, 0x12, 0x79, 0x1d, 0xde, 0x89, 0x69, 0x81, 0x7c, 0xa3, 0xc7, 0x0f, 0x82, 0x4b, 0x78, 0x37, - 0xe4, 0x5e, 0x01, 0xb6, 0x04, 0xec, 0x00, 0xf7, 0xca, 0x8c, 0x72, 0x9d, 0xd6, 0xf5, 0x5b, 0xeb, 0xa1, 0x18, 0x86, - 0xcf, 0x2c, 0x81, 0xed, 0x68, 0x1d, 0x1d, 0xe9, 0xe1, 0xc3, 0xff, 0xba, 0xaa, 0x39, 0xea, 0x54, 0x2e, 0x67, 0xc7, - 0x13, 0x96, 0x22, 0x66, 0xd0, 0xfd, 0x75, 0xfb, 0x4a, 0x00, 0xdd, 0x2e, 0x8b, 0x79, 0x36, 0xda, 0xc9, 0xbf, 0xa5, - 0x1b, 0x2b, 0x4a, 0x9b, 0x78, 0x97, 0xf5, 0xc6, 0xfe, 0x70, 0xf4, 0x97, 0x67, 0x5f, 0x26, 0x84, 0xaa, 0xb3, 0x61, - 0x6b, 0x1d, 0xe7, 0xf2, 0xbf, 0xfe, 0x3a, 0x26, 0x2b, 0x08, 0x0a, 0xc2, 0xb2, 0x53, 0x4c, 0x54, 0x30, 0x8a, 0x14, - 0x6b, 0x3e, 0x9e, 0xac, 0x51, 0x27, 0xbc, 0xf6, 0x97, 0x5a, 0x27, 0x4c, 0x8c, 0xac, 0x54, 0xfe, 0x9a, 0x55, 0xec, - 0x4e, 0x65, 0x16, 0x90, 0x79, 0x90, 0x4f, 0xd6, 0x46, 0x83, 0xb9, 0xe2, 0xf5, 0x6c, 0x3d, 0x97, 0xca, 0x67, 0x30, - 0xe5, 0x2c, 0x07, 0x27, 0x4b, 0x61, 0xf7, 0x24, 0x50, 0xb4, 0x66, 0xe8, 0xda, 0x9f, 0x62, 0xab, 0x5e, 0xa7, 0x55, - 0x0d, 0xf0, 0x80, 0x10, 0x03, 0x43, 0xed, 0xd5, 0xc2, 0x43, 0x6b, 0x01, 0xac, 0xfd, 0x51, 0xe9, 0x07, 0xe3, 0xc9, - 0x92, 0x2f, 0x90, 0x7f, 0x39, 0x72, 0xd4, 0xee, 0xfd, 0xbe, 0x77, 0x0f, 0x52, 0x70, 0xe4, 0x5a, 0x28, 0x90, 0x08, - 0x68, 0xc1, 0x37, 0xbe, 0xf2, 0xc1, 0xb8, 0x46, 0x6d, 0x35, 0x28, 0xa8, 0x1d, 0xdd, 0xf2, 0xd8, 0xd1, 0x3b, 0xdf, - 0x9f, 0xd0, 0x57, 0x2f, 0xb4, 0x70, 0xfc, 0x95, 0x33, 0x72, 0xcd, 0x56, 0x1d, 0x72, 0x44, 0x33, 0xe9, 0x10, 0x22, - 0x56, 0x6c, 0xcd, 0xae, 0x49, 0xe5, 0xdc, 0x39, 0x64, 0xa7, 0x8f, 0x50, 0xa5, 0xd7, 0x7a, 0x7c, 0x3b, 0x51, 0xba, - 0xdb, 0xe3, 0xdd, 0xe4, 0x5b, 0x36, 0x11, 0x31, 0x18, 0xd0, 0x06, 0xe1, 0x8c, 0xac, 0x43, 0xa4, 0xd2, 0x01, 0x42, - 0xe0, 0x98, 0x80, 0xa6, 0xff, 0xf8, 0x9a, 0x44, 0x01, 0x47, 0xda, 0x08, 0x59, 0xcb, 0x0e, 0x87, 0x1c, 0x34, 0xca, - 0xcd, 0x1f, 0x5e, 0xa1, 0x4e, 0x73, 0x60, 0x9e, 0x2e, 0x61, 0xcf, 0xc1, 0x23, 0xbd, 0x38, 0x3e, 0xd2, 0xff, 0x3b, - 0x9a, 0xa8, 0xf1, 0x7f, 0xae, 0x89, 0x52, 0x5a, 0x24, 0x47, 0xb5, 0xf4, 0x4d, 0xea, 0x28, 0xb8, 0xc8, 0x3b, 0x6a, - 0x21, 0x7b, 0x96, 0x8d, 0x1b, 0xd5, 0xbc, 0xff, 0x5f, 0x2b, 0xf3, 0xff, 0x35, 0xad, 0x0c, 0x53, 0xb2, 0x63, 0xa9, - 0x66, 0x1e, 0x68, 0x15, 0xc3, 0xec, 0x67, 0x92, 0x10, 0x19, 0x2e, 0x0d, 0xf8, 0x51, 0x05, 0xfb, 0x38, 0xad, 0xd6, - 0x59, 0xb8, 0x43, 0x25, 0xea, 0xad, 0xb8, 0x4b, 0xf3, 0x97, 0xf5, 0xbf, 0x45, 0x59, 0xc0, 0xd4, 0xbe, 0x2b, 0xd3, - 0x38, 0x20, 0x0b, 0x7f, 0x16, 0x96, 0x38, 0xb9, 0xb1, 0x8d, 0x3f, 0xcb, 0xf1, 0xb4, 0x5f, 0x75, 0x66, 0x1e, 0x48, - 0xa0, 0x06, 0xe2, 0x8f, 0x9c, 0xcb, 0xca, 0xe2, 0x01, 0xa1, 0x9b, 0x7f, 0x28, 0xcb, 0xa2, 0xf4, 0x7a, 0x9f, 0x92, - 0xb4, 0x3a, 0x5b, 0x89, 0x3a, 0x29, 0x62, 0x05, 0x65, 0x93, 0x02, 0x8c, 0x3e, 0xac, 0x3c, 0x11, 0x07, 0x67, 0x08, - 0xd4, 0x70, 0x56, 0x27, 0x21, 0x00, 0x0d, 0x2b, 0x84, 0xfd, 0x33, 0x68, 0xe1, 0x59, 0x18, 0x87, 0x6b, 0x80, 0xc9, - 0x49, 0xab, 0xb3, 0x75, 0x59, 0xdc, 0xa7, 0xb1, 0x88, 0x47, 0x3d, 0x45, 0xc9, 0xf2, 0x26, 0x77, 0xe5, 0x5c, 0x7f, - 0xff, 0x07, 0x05, 0xb0, 0x1b, 0x30, 0xdb, 0x16, 0xd8, 0x01, 0x40, 0x82, 0x02, 0xd9, 0x42, 0x9d, 0x46, 0x67, 0x6a, - 0xa9, 0xc0, 0x7b, 0xae, 0x07, 0xf8, 0x9b, 0x1c, 0xb0, 0x8c, 0xeb, 0x42, 0x06, 0x8c, 0x20, 0x80, 0x11, 0x38, 0x28, - 0x01, 0x43, 0x67, 0x88, 0xdb, 0xaa, 0x9c, 0xb5, 0xd0, 0x5c, 0xe9, 0xb6, 0xe4, 0xa6, 0x51, 0xce, 0x56, 0x22, 0x80, - 0xbe, 0xba, 0x29, 0x71, 0xba, 0x5c, 0xb6, 0x92, 0xb0, 0x6f, 0xdf, 0xb7, 0x53, 0x45, 0x1e, 0x1f, 0xa5, 0x21, 0xaf, - 0xc0, 0x93, 0x8c, 0x23, 0x49, 0x94, 0x08, 0xde, 0xe4, 0x8d, 0x19, 0x87, 0x97, 0x6d, 0xca, 0xa9, 0xbd, 0x59, 0x2f, - 0x00, 0xe7, 0x09, 0xda, 0x32, 0xc0, 0x58, 0xc0, 0xe0, 0x5c, 0x88, 0x25, 0x4f, 0x11, 0xfc, 0xd2, 0x89, 0x14, 0xc6, - 0x5d, 0x0e, 0xc3, 0x3c, 0x28, 0x7a, 0x97, 0xd4, 0x1f, 0xfd, 0x3e, 0x6a, 0x93, 0xc1, 0x10, 0x54, 0x02, 0xa8, 0xac, - 0x1b, 0x24, 0x06, 0x56, 0xa5, 0x85, 0xc4, 0x25, 0xc4, 0xcb, 0x7c, 0x35, 0xad, 0xa3, 0xe0, 0x7d, 0x3d, 0x21, 0x84, - 0x13, 0x8c, 0x0f, 0x71, 0x03, 0x04, 0x0c, 0x56, 0x71, 0x81, 0x41, 0xf2, 0x5c, 0xa2, 0xfb, 0xe3, 0xf9, 0x8e, 0x01, - 0xae, 0x9c, 0xf7, 0x54, 0xbb, 0x7a, 0x60, 0x2f, 0x57, 0xe9, 0x92, 0x11, 0xc2, 0x8a, 0xff, 0x8b, 0xc8, 0xfb, 0x76, - 0x98, 0x80, 0xda, 0x46, 0xfe, 0x18, 0x24, 0xe6, 0x32, 0x51, 0x04, 0xf1, 0x28, 0x2b, 0x58, 0x92, 0x06, 0x9b, 0x51, - 0x92, 0x82, 0x46, 0x13, 0x63, 0xc8, 0x54, 0x68, 0x87, 0xa4, 0xd1, 0x6c, 0x4c, 0xf6, 0x31, 0xe4, 0x35, 0x5c, 0x2c, - 0x16, 0x78, 0xdf, 0xcf, 0x42, 0x75, 0xb0, 0x2d, 0xcd, 0x21, 0xe0, 0x24, 0xc1, 0x9e, 0xba, 0x22, 0x25, 0x61, 0x36, - 0xfa, 0x14, 0x72, 0x6e, 0x40, 0xc7, 0x49, 0x63, 0xa8, 0x3e, 0x30, 0x09, 0xaf, 0x22, 0x74, 0x52, 0x56, 0x08, 0x0b, - 0xb8, 0x6f, 0x64, 0x34, 0x5a, 0x49, 0x83, 0xc0, 0xdb, 0x0c, 0x5b, 0x81, 0x4d, 0x68, 0xf8, 0xcb, 0xcc, 0xc3, 0xb4, - 0x9a, 0x95, 0x60, 0xce, 0x37, 0x50, 0x89, 0xf1, 0x64, 0x79, 0xc5, 0x37, 0x2e, 0x56, 0x62, 0x32, 0x5b, 0xce, 0x27, - 0x6b, 0x49, 0x35, 0x97, 0x7b, 0x6b, 0x96, 0xb1, 0x25, 0xec, 0x1f, 0x06, 0x86, 0xd2, 0x81, 0x1d, 0x4d, 0x35, 0x6d, - 0x12, 0x60, 0x32, 0x9d, 0x73, 0x3e, 0xbc, 0x44, 0x34, 0x59, 0x9d, 0xba, 0x93, 0xa9, 0x6a, 0x07, 0xd7, 0xe4, 0x4c, - 0x4e, 0x8f, 0xd4, 0x53, 0xad, 0x7b, 0xc9, 0x47, 0xdb, 0x61, 0x35, 0xda, 0xfa, 0x01, 0xb8, 0x75, 0x0a, 0x3b, 0x7d, - 0x37, 0xac, 0x46, 0x3b, 0x5f, 0xc3, 0xee, 0x92, 0x42, 0xa0, 0xfa, 0xb3, 0xac, 0xc9, 0x5c, 0xbc, 0x2e, 0x1e, 0xbc, - 0x82, 0x3d, 0xf7, 0x07, 0xfa, 0x57, 0xc9, 0x9e, 0xfb, 0x36, 0x93, 0xeb, 0x9f, 0x69, 0xd7, 0x68, 0xcc, 0x74, 0xbc, - 0x76, 0x05, 0x56, 0x68, 0x80, 0xfc, 0x82, 0x1d, 0xed, 0x6d, 0x0e, 0x02, 0x01, 0xba, 0x97, 0xe0, 0x28, 0x0a, 0x88, - 0x9a, 0x56, 0x95, 0x47, 0xa7, 0x7b, 0x7f, 0x8f, 0x6f, 0x94, 0x80, 0x4d, 0x9e, 0x5a, 0xf7, 0x96, 0xb1, 0x7f, 0x38, - 0x40, 0x08, 0xbd, 0x9c, 0x7e, 0xa3, 0x2d, 0xab, 0x47, 0x3b, 0x96, 0xfb, 0x86, 0x51, 0x4f, 0xc1, 0x18, 0x86, 0x2e, - 0xac, 0x62, 0x24, 0xcf, 0x80, 0xac, 0xf1, 0x1b, 0x44, 0x17, 0xb0, 0xe8, 0xf5, 0x5e, 0x1f, 0xd1, 0x20, 0x02, 0x2a, - 0xbd, 0xe6, 0x2f, 0x45, 0x3e, 0x57, 0x85, 0xe8, 0xbd, 0xb7, 0x76, 0xde, 0xcc, 0x48, 0x96, 0x49, 0x23, 0xd5, 0x6e, - 0x65, 0xb1, 0xae, 0xbc, 0xd9, 0x09, 0xe9, 0x62, 0x8e, 0xa1, 0x32, 0x78, 0x1c, 0x80, 0xd2, 0xf3, 0x6f, 0xa1, 0x57, - 0x32, 0x64, 0x9a, 0x25, 0x9a, 0xd9, 0x5d, 0xe3, 0x4f, 0x56, 0xa9, 0x17, 0x23, 0x62, 0x36, 0xb0, 0x85, 0xb8, 0x2d, - 0x2a, 0xdd, 0x16, 0x85, 0xb2, 0x45, 0x91, 0x3e, 0xd4, 0xce, 0x74, 0x67, 0x16, 0x3e, 0xab, 0x4c, 0xfb, 0xde, 0x66, - 0x66, 0x6c, 0x80, 0xb6, 0x8b, 0xf0, 0x0d, 0x74, 0xa0, 0x42, 0xc8, 0x7f, 0x40, 0x44, 0x24, 0x02, 0x76, 0x39, 0x75, - 0x27, 0x36, 0x1d, 0x92, 0x79, 0x88, 0x59, 0xa1, 0x46, 0x79, 0xc9, 0x93, 0xa3, 0x01, 0xa9, 0x08, 0x75, 0xbb, 0xdf, - 0x3f, 0x5f, 0xba, 0xa0, 0xf6, 0x6b, 0x8a, 0x1d, 0xa3, 0x9b, 0x02, 0xce, 0x05, 0x8f, 0xf2, 0x9e, 0x7b, 0xe7, 0x80, - 0xe6, 0xd8, 0x9e, 0x22, 0x6b, 0xc0, 0xe9, 0x6d, 0x17, 0x02, 0x6c, 0x9f, 0x35, 0x5b, 0xfb, 0x93, 0xd5, 0x55, 0x34, - 0xf5, 0x4a, 0x3e, 0xd3, 0x5d, 0x94, 0xb8, 0x5d, 0x14, 0xcb, 0x2e, 0xda, 0x34, 0x10, 0xec, 0xb8, 0xf2, 0x03, 0xe0, - 0x0d, 0x8d, 0xfa, 0xfd, 0xb2, 0xd5, 0xb3, 0x27, 0x5f, 0x3b, 0xee, 0xd9, 0xcc, 0x67, 0xa5, 0xe9, 0xd9, 0x5f, 0x53, - 0xb7, 0x67, 0xe5, 0x64, 0x2f, 0x3a, 0x27, 0xfb, 0x74, 0x36, 0x0f, 0x04, 0x97, 0x3b, 0xf7, 0x79, 0x3e, 0xd5, 0xd3, - 0xae, 0xf2, 0x83, 0xd6, 0x10, 0x99, 0x2f, 0x7c, 0xaa, 0xba, 0xd7, 0x15, 0x2c, 0x60, 0x09, 0xee, 0xd6, 0x4b, 0xf3, - 0x5f, 0xb1, 0xfb, 0x7b, 0x41, 0x2f, 0xcd, 0x7f, 0xa3, 0x3f, 0x29, 0x80, 0x03, 0xd0, 0x98, 0xda, 0x2d, 0xf0, 0x10, - 0x43, 0x05, 0x85, 0xbb, 0x59, 0x39, 0xf7, 0x6a, 0x80, 0xc3, 0x24, 0x7d, 0x43, 0xab, 0x57, 0x5a, 0xec, 0x7a, 0x99, - 0xec, 0x15, 0xe0, 0xa1, 0x0a, 0x79, 0x78, 0x38, 0x44, 0x1d, 0xc3, 0x0e, 0xea, 0x08, 0x18, 0xf6, 0x10, 0x1a, 0x5b, - 0xe0, 0xf9, 0xf8, 0x29, 0xe3, 0x7b, 0x01, 0x6a, 0x23, 0x84, 0xc7, 0xab, 0x45, 0x19, 0x62, 0xcb, 0xde, 0x22, 0x95, - 0xd4, 0xcf, 0x02, 0x51, 0x46, 0xab, 0x80, 0xb6, 0xda, 0x63, 0x96, 0xc6, 0x1b, 0x08, 0x15, 0x4b, 0x7d, 0x0c, 0xa1, - 0x81, 0xc3, 0xef, 0x70, 0x00, 0x09, 0xbe, 0xe4, 0x9a, 0x6c, 0xee, 0x6d, 0x7e, 0x4f, 0xfb, 0xfc, 0xe1, 0x70, 0x7e, - 0x89, 0xa0, 0x74, 0x29, 0x7c, 0xa4, 0x12, 0x51, 0x3d, 0xc5, 0x4d, 0x09, 0xd9, 0x2c, 0x59, 0xe9, 0x07, 0xbf, 0xaa, - 0x5f, 0x00, 0x20, 0x0b, 0x81, 0x36, 0x91, 0xd9, 0x9f, 0xce, 0x54, 0x74, 0x01, 0x70, 0x88, 0x3f, 0x7e, 0x82, 0xe8, - 0x1b, 0x5a, 0xa6, 0xe5, 0xe3, 0x84, 0x87, 0xa0, 0xb5, 0x25, 0x9d, 0x44, 0xac, 0x14, 0xd8, 0x10, 0x09, 0xdf, 0xef, - 0x9f, 0xc7, 0x92, 0x0e, 0x34, 0x6a, 0x75, 0x6f, 0xdc, 0xea, 0x5e, 0xf9, 0xba, 0xee, 0xe4, 0xc6, 0x07, 0x45, 0xfb, - 0x6c, 0xde, 0xa8, 0x7c, 0xdf, 0xd6, 0x39, 0xbb, 0xd3, 0xbd, 0x23, 0xe7, 0xc4, 0xb7, 0xf7, 0x10, 0x8a, 0x1e, 0x9a, - 0x22, 0xcb, 0x92, 0x30, 0xa0, 0xb5, 0x76, 0xed, 0x59, 0x46, 0x07, 0xaf, 0x7d, 0x43, 0x88, 0xc8, 0x53, 0x7c, 0x12, - 0x72, 0x8b, 0xe3, 0x83, 0x02, 0xfd, 0x33, 0xe3, 0xcf, 0x9c, 0xf8, 0x61, 0xab, 0x5f, 0x00, 0xe7, 0xa6, 0x7b, 0xef, - 0x4e, 0xcc, 0x7a, 0x0c, 0xa5, 0x6c, 0xfc, 0xdf, 0xef, 0x13, 0x59, 0xa0, 0xd3, 0x11, 0x0d, 0x03, 0xc1, 0x5d, 0x54, - 0xff, 0xf7, 0x8a, 0xd7, 0x3d, 0x6b, 0x75, 0xbe, 0xfc, 0xd4, 0xe9, 0x49, 0xaf, 0x5e, 0xc6, 0x3d, 0xa0, 0x42, 0x07, - 0x08, 0xe7, 0x75, 0xbf, 0x61, 0xbb, 0x6f, 0x7e, 0x79, 0x77, 0xf4, 0x32, 0xb0, 0x49, 0x91, 0xd8, 0x56, 0xf2, 0x59, - 0x0f, 0x14, 0x7e, 0x3d, 0xd6, 0xab, 0x8b, 0x75, 0x8f, 0xf5, 0x50, 0x0b, 0x88, 0x1e, 0x16, 0xa0, 0xfe, 0xeb, 0xd9, - 0xa7, 0xa1, 0x70, 0x90, 0x8d, 0x53, 0x05, 0x8a, 0x2c, 0xf8, 0x0b, 0x31, 0x5a, 0x17, 0x04, 0x88, 0x6c, 0x09, 0x69, - 0xd5, 0xc9, 0xec, 0x71, 0xa9, 0x25, 0x19, 0x7c, 0x13, 0x90, 0xd9, 0x81, 0x95, 0x13, 0x94, 0x8e, 0x5b, 0x03, 0xae, - 0x6c, 0xf1, 0x68, 0xb7, 0x3f, 0x0d, 0xb2, 0xb3, 0xe6, 0xa4, 0xd1, 0x3e, 0xec, 0xd3, 0x3c, 0x40, 0x20, 0x92, 0xa9, - 0x08, 0x72, 0xcd, 0xbd, 0x25, 0x7d, 0x74, 0x38, 0xe7, 0x85, 0xfc, 0x73, 0x2a, 0x75, 0x88, 0x43, 0x89, 0x35, 0x10, - 0xa8, 0x3c, 0x43, 0x95, 0xc3, 0x06, 0x39, 0xfe, 0xd9, 0x91, 0xcc, 0x24, 0x26, 0x8b, 0xdc, 0xad, 0x99, 0x0a, 0x3f, - 0x10, 0x7c, 0xcc, 0x72, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x02, 0x7f, 0x4c, 0xe1, 0x57, 0x3c, - 0x85, 0x9d, 0x76, 0xbf, 0x2e, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, - 0x3f, 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x65, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x06, - 0x15, 0x5b, 0x17, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xaa, 0x51, 0x5a, 0xfd, 0xa8, - 0x7f, 0x02, 0xf3, 0x36, 0x15, 0xa3, 0x5a, 0xc5, 0xe4, 0x37, 0xfa, 0xfd, 0x62, 0xd0, 0xfa, 0x90, 0xc1, 0x47, 0xaf, - 0x4d, 0x83, 0x3f, 0x3a, 0x0d, 0x76, 0x98, 0x68, 0x04, 0x40, 0x32, 0xa7, 0x96, 0x3c, 0x14, 0xfd, 0x11, 0xe4, 0x58, - 0xa3, 0xca, 0x29, 0x18, 0xac, 0xff, 0x78, 0xb4, 0x03, 0x53, 0x2f, 0x8e, 0xb6, 0x64, 0x07, 0xad, 0x7c, 0x03, 0xdc, - 0xaf, 0x91, 0x2d, 0x66, 0x39, 0x40, 0xb3, 0xd7, 0x88, 0x8c, 0x4f, 0x5e, 0x00, 0x63, 0xb6, 0xce, 0xc2, 0x48, 0xc4, - 0xc1, 0x58, 0x35, 0x66, 0xcc, 0xc0, 0xc0, 0x05, 0xba, 0x96, 0x49, 0x49, 0x1a, 0xd2, 0xc1, 0x80, 0x95, 0xb2, 0x85, - 0x03, 0x5e, 0x34, 0xc7, 0xed, 0x78, 0xd3, 0xa2, 0xf1, 0xc0, 0x76, 0xb1, 0xfd, 0xfd, 0xf7, 0xc5, 0xf6, 0x3a, 0xdc, - 0x92, 0x5e, 0x21, 0x67, 0x09, 0xfd, 0xfc, 0x51, 0xf6, 0x59, 0xc3, 0xc9, 0xa9, 0xd0, 0x0c, 0x2d, 0x45, 0x42, 0x29, - 0xde, 0xe9, 0x49, 0x81, 0xb1, 0x8c, 0x85, 0xbf, 0x07, 0xce, 0xe9, 0x42, 0x11, 0xb9, 0x03, 0xc7, 0xf1, 0x0d, 0x54, - 0x30, 0x6a, 0x38, 0x78, 0x19, 0xc3, 0xb6, 0x28, 0x66, 0x21, 0xe1, 0x14, 0xc2, 0xc5, 0x2a, 0xeb, 0xf7, 0xe5, 0x2f, - 0xea, 0xa2, 0x8b, 0x4c, 0xd6, 0x7d, 0x12, 0x8e, 0xcc, 0x58, 0x4e, 0xbd, 0x90, 0x3c, 0xef, 0x79, 0x32, 0x4d, 0x9e, - 0xe5, 0x41, 0x04, 0x90, 0xcf, 0xe1, 0x7d, 0x98, 0x66, 0x60, 0x95, 0x26, 0xe5, 0x47, 0x28, 0x7d, 0xf1, 0x79, 0xe5, - 0x07, 0x3a, 0x7b, 0x6e, 0x92, 0xe1, 0xcd, 0xaa, 0xf5, 0x26, 0xb5, 0xae, 0x8b, 0x07, 0xfc, 0x8b, 0x33, 0xd8, 0x38, - 0xd7, 0x99, 0xe0, 0xc0, 0x8b, 0xa4, 0xd6, 0x6b, 0xc6, 0x5f, 0x64, 0xb8, 0x2e, 0x55, 0x1b, 0x7d, 0x14, 0xa2, 0x73, - 0xc8, 0x54, 0x80, 0x42, 0x91, 0xf6, 0x0f, 0x4a, 0xad, 0x4c, 0x2a, 0x6d, 0x24, 0x80, 0xee, 0x61, 0xd2, 0x60, 0x8b, - 0xa1, 0x8c, 0xa5, 0x49, 0x94, 0x3b, 0x0d, 0xe2, 0xca, 0xfe, 0x5c, 0x49, 0x1c, 0x5a, 0x16, 0xc9, 0xbf, 0x77, 0x3d, - 0x7d, 0x85, 0xd4, 0x9d, 0x2c, 0x90, 0x19, 0xe3, 0x65, 0x1e, 0x7f, 0x02, 0xc2, 0x6c, 0xd0, 0x46, 0x45, 0x21, 0x84, - 0x6c, 0x10, 0x83, 0xc6, 0xcb, 0x3c, 0xfe, 0x5e, 0xd1, 0x78, 0xc8, 0x47, 0x91, 0xaf, 0xfe, 0x2a, 0xf5, 0x5f, 0xa1, - 0xcf, 0x4c, 0xf0, 0x08, 0xd5, 0x44, 0xff, 0xee, 0xf9, 0xec, 0x1e, 0xd4, 0x86, 0x51, 0x98, 0x99, 0xf2, 0x2b, 0xdf, - 0x14, 0x67, 0xaf, 0xbf, 0xa2, 0xab, 0x6c, 0xeb, 0x7e, 0xf4, 0xf1, 0x88, 0xc0, 0xda, 0x18, 0x5d, 0x71, 0x63, 0x00, - 0x39, 0x4c, 0xde, 0xaf, 0x28, 0x2d, 0x87, 0x34, 0x08, 0x1d, 0x34, 0x04, 0xbd, 0x92, 0xe8, 0x03, 0x89, 0x45, 0x8c, - 0xe1, 0x85, 0x78, 0x46, 0x6a, 0x32, 0xd1, 0x10, 0xaf, 0x88, 0xfd, 0x10, 0x2d, 0x39, 0x35, 0xd1, 0x8d, 0x30, 0xc5, - 0x40, 0x62, 0x67, 0x90, 0x9c, 0x24, 0xb5, 0xf2, 0x8b, 0x67, 0x92, 0xb0, 0xc4, 0xce, 0x43, 0x0c, 0x26, 0xb5, 0x74, - 0xa7, 0x37, 0x55, 0x7a, 0x77, 0xa4, 0xe5, 0xa0, 0x7d, 0x00, 0x76, 0x29, 0xe9, 0xfd, 0x93, 0x42, 0x11, 0x1f, 0xc2, - 0x38, 0x86, 0xf0, 0x2d, 0xa2, 0xba, 0x02, 0xe7, 0x5a, 0x81, 0xc6, 0x6a, 0xe0, 0xa1, 0x99, 0x55, 0xf3, 0x21, 0xa7, - 0x9f, 0x4a, 0xcb, 0x1f, 0x23, 0x1a, 0x1b, 0xad, 0x9b, 0xc3, 0x61, 0x4f, 0xab, 0x5e, 0x3a, 0x07, 0x5d, 0x36, 0x93, - 0x98, 0xb8, 0x81, 0x74, 0xfd, 0xe8, 0x37, 0x13, 0xf6, 0x22, 0x2a, 0xe4, 0x52, 0x08, 0x0a, 0x5a, 0x1d, 0x08, 0x1c, - 0x0a, 0x6f, 0x51, 0xe6, 0x8b, 0x98, 0x36, 0x10, 0x06, 0x9f, 0x1f, 0xc8, 0xcf, 0x37, 0x05, 0xa9, 0xd8, 0xb1, 0xae, - 0xfd, 0xfe, 0xa6, 0xf4, 0x00, 0x4f, 0xce, 0x24, 0x79, 0xda, 0x0c, 0x61, 0x45, 0x00, 0x8d, 0x59, 0x4d, 0x16, 0x27, - 0x5c, 0x99, 0xc3, 0x8f, 0x95, 0x57, 0xb2, 0x94, 0xa9, 0xf3, 0x54, 0x2f, 0x80, 0xa8, 0xe3, 0x0d, 0x5a, 0x91, 0xfa, - 0x15, 0x3a, 0x7b, 0xcd, 0x4a, 0xc8, 0x78, 0x78, 0xce, 0x79, 0x3a, 0x7a, 0x60, 0x09, 0x8f, 0xf0, 0xaf, 0x64, 0xa2, - 0x0f, 0xbf, 0x07, 0x0e, 0x37, 0xe3, 0x84, 0x47, 0x6e, 0xb3, 0xf7, 0x55, 0xb8, 0x82, 0x9b, 0x69, 0x01, 0x48, 0x6e, - 0x41, 0xd2, 0x04, 0x94, 0x90, 0xc8, 0x84, 0xcc, 0x9a, 0x92, 0x9f, 0x5b, 0xda, 0x06, 0x6b, 0x98, 0x74, 0x1e, 0xf0, - 0xa2, 0xd5, 0x47, 0xab, 0x89, 0x76, 0x99, 0xe5, 0xf3, 0x21, 0xce, 0x50, 0xcd, 0x71, 0x77, 0x06, 0x3f, 0x07, 0xbc, - 0x62, 0x55, 0x93, 0x8e, 0x76, 0x03, 0x2e, 0x3c, 0xb9, 0xce, 0xd3, 0xd1, 0x16, 0x7f, 0xc9, 0xfd, 0x01, 0xa0, 0x83, - 0xa9, 0x4b, 0xe0, 0x4f, 0xd5, 0x56, 0x53, 0xa9, 0x5f, 0x5a, 0xfb, 0x75, 0xdd, 0x59, 0xad, 0xdc, 0xb3, 0x2e, 0x43, - 0x7b, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, - 0x82, 0x7b, 0xc9, 0x5f, 0xec, 0x11, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, - 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xb1, 0x34, 0x26, 0x45, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0x6d, 0x7b, 0xdb, 0xb6, 0xb2, 0x28, 0xfa, + 0xf9, 0x9e, 0x5f, 0x61, 0x73, 0xa7, 0x2e, 0x61, 0x41, 0xb4, 0x24, 0x5b, 0x8e, 0x43, 0x19, 0xd6, 0x71, 0x9c, 0xa4, + 0x49, 0x9b, 0x26, 0x69, 0x9c, 0x26, 0x4d, 0x54, 0x6d, 0x07, 0x22, 0x21, 0x09, 0x0d, 0x45, 0xa8, 0x04, 0x14, 0xdb, + 0x95, 0xf4, 0xdf, 0xef, 0x33, 0x78, 0x21, 0x41, 0x49, 0xc9, 0x5a, 0xeb, 0xdc, 0x73, 0xee, 0x73, 0x76, 0xf7, 0x8a, + 0x45, 0xbc, 0x63, 0x30, 0x18, 0xcc, 0x0c, 0x66, 0x06, 0xe7, 0xfb, 0xa9, 0x48, 0xd4, 0xfd, 0x9c, 0xed, 0x4d, 0xd5, + 0x2c, 0xbb, 0x38, 0xb7, 0xff, 0x32, 0x9a, 0x5e, 0x9c, 0x67, 0x3c, 0xff, 0xb2, 0x57, 0xb0, 0x8c, 0xf0, 0x44, 0xe4, + 0x7b, 0xd3, 0x82, 0x8d, 0x49, 0x4a, 0x15, 0x8d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xc5, 0xf9, 0x8c, 0x29, 0xba, + 0x97, 0x4c, 0x69, 0x21, 0x99, 0x22, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbb, 0x38, 0x97, 0x49, 0xc1, 0xe7, 0x6a, 0x0f, + 0x9a, 0x24, 0x33, 0x91, 0x2e, 0x32, 0x76, 0x71, 0x74, 0x74, 0x7b, 0x7b, 0x1b, 0xfd, 0x25, 0xff, 0xc7, 0x57, 0x5a, + 0xec, 0xfd, 0x52, 0x90, 0xd7, 0xa3, 0xbf, 0x58, 0xa2, 0xa2, 0x94, 0x8d, 0x79, 0xce, 0xde, 0x14, 0x62, 0xce, 0x0a, + 0x75, 0xdf, 0x83, 0xcc, 0x9f, 0x0a, 0x12, 0x72, 0xac, 0x30, 0x43, 0xe4, 0x42, 0xed, 0xf1, 0x7c, 0x8f, 0xf7, 0x7f, + 0x29, 0x74, 0xca, 0x92, 0xe5, 0x8b, 0x19, 0x2b, 0xe8, 0x28, 0x63, 0xf1, 0x7e, 0x0b, 0x27, 0x22, 0x1f, 0xf3, 0xc9, + 0xa2, 0xfc, 0xbe, 0x2d, 0xb8, 0x72, 0xbf, 0xbf, 0xd2, 0x6c, 0xc1, 0x62, 0xb6, 0x46, 0x31, 0x1f, 0xa8, 0x21, 0x61, + 0xba, 0xe5, 0x2f, 0x55, 0xc3, 0xe1, 0x4f, 0xba, 0xc9, 0xfb, 0x39, 0x13, 0xe3, 0x3d, 0xb5, 0x4f, 0x02, 0x79, 0x3f, + 0x1b, 0x89, 0x2c, 0xe8, 0xab, 0x46, 0x10, 0xc4, 0x50, 0x06, 0x33, 0xd4, 0x4b, 0x44, 0x2e, 0xd5, 0x9e, 0xe4, 0xe4, + 0x96, 0xe7, 0xa9, 0xb8, 0xc5, 0x5f, 0x25, 0x91, 0x3c, 0xba, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x1d, 0x1c, + 0x84, 0xf6, 0xfb, 0xfe, 0xea, 0xfa, 0x9a, 0x10, 0xf2, 0x55, 0xf0, 0x74, 0xaf, 0xb5, 0x5a, 0x79, 0xa9, 0x51, 0x4e, + 0x15, 0xff, 0xca, 0x4c, 0x25, 0x74, 0x70, 0x10, 0xd0, 0x54, 0xcc, 0x15, 0x4b, 0xaf, 0xd5, 0x7d, 0xc6, 0xae, 0xa7, + 0x8c, 0x29, 0x19, 0xf0, 0x7c, 0xef, 0x89, 0x48, 0x16, 0x33, 0x96, 0xab, 0x68, 0x5e, 0x08, 0x25, 0x60, 0x60, 0x07, + 0x07, 0x41, 0xc1, 0xe6, 0x19, 0x4d, 0x18, 0xe4, 0x5f, 0x5d, 0x5f, 0x57, 0x35, 0xaa, 0x42, 0xf8, 0x56, 0x92, 0x6b, + 0x3d, 0xf4, 0x10, 0xe1, 0xe7, 0x92, 0xe4, 0xec, 0x76, 0xef, 0x03, 0xa3, 0x5f, 0x7e, 0xa5, 0xf3, 0x5e, 0x92, 0x51, + 0x29, 0xf7, 0x9e, 0x89, 0xa5, 0x9e, 0x46, 0xb1, 0x48, 0x94, 0x28, 0x42, 0x85, 0x19, 0x96, 0x68, 0xc9, 0xc7, 0xa1, + 0x9a, 0x72, 0x19, 0xdd, 0x3c, 0x48, 0xa4, 0x7c, 0xcb, 0xe4, 0x22, 0x53, 0x0f, 0xc8, 0x7e, 0x0b, 0xcb, 0x7d, 0x42, + 0x6e, 0x25, 0x52, 0xd3, 0x42, 0xdc, 0xee, 0x3d, 0x2d, 0x0a, 0x51, 0x84, 0xc1, 0xd5, 0xf5, 0xb5, 0x29, 0xb1, 0xc7, + 0xe5, 0x5e, 0x2e, 0xd4, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xda, 0xfb, 0x5d, 0xb2, 0xbd, 0xcf, 0x8b, 0x5c, 0xd2, 0x31, + 0xbb, 0xba, 0xbe, 0xfe, 0xbc, 0x27, 0x8a, 0xbd, 0xcf, 0x89, 0x94, 0x9f, 0xf7, 0x78, 0x2e, 0x15, 0xa3, 0x69, 0x14, + 0xa0, 0x9e, 0xee, 0x2c, 0x91, 0xf2, 0x1d, 0xbb, 0x53, 0x44, 0x61, 0xfd, 0xa9, 0x08, 0x5b, 0x4f, 0x98, 0xda, 0x93, + 0xe5, 0xbc, 0x42, 0xb4, 0xcc, 0x98, 0xda, 0x53, 0x44, 0xe7, 0x0b, 0x0b, 0x7f, 0x66, 0x3e, 0x55, 0x8f, 0x8f, 0xc3, + 0xaf, 0xf2, 0xe0, 0x40, 0x95, 0x80, 0x46, 0x4b, 0xbb, 0x42, 0x84, 0xed, 0xbb, 0xb4, 0x83, 0x03, 0x16, 0x65, 0x2c, + 0x9f, 0xa8, 0x29, 0x21, 0xa4, 0xdd, 0x93, 0x07, 0x07, 0xa1, 0x22, 0xcf, 0x65, 0x34, 0x61, 0x2a, 0x64, 0x08, 0xe1, + 0xaa, 0xf6, 0xc1, 0x41, 0x68, 0x80, 0x20, 0x88, 0xd2, 0x80, 0xab, 0xc1, 0x18, 0x45, 0x16, 0xfa, 0xd7, 0xf7, 0x79, + 0x12, 0xfa, 0xe3, 0x47, 0x58, 0x1e, 0x1c, 0x3c, 0x97, 0x91, 0x84, 0x16, 0xb1, 0x42, 0x68, 0x5d, 0x30, 0xb5, 0x28, + 0xf2, 0x3d, 0xb5, 0x56, 0xe2, 0x5a, 0x15, 0x3c, 0x9f, 0x84, 0x68, 0xe9, 0xd2, 0xbc, 0x8a, 0xeb, 0xb5, 0x19, 0xee, + 0x6f, 0x05, 0xe1, 0xe4, 0x02, 0x7a, 0x7c, 0x26, 0x42, 0x8b, 0x83, 0x9c, 0x90, 0x40, 0xea, 0xba, 0x41, 0x9f, 0xc7, + 0xbc, 0x11, 0x04, 0xd8, 0x8c, 0x12, 0xdf, 0x4a, 0x84, 0xb9, 0x02, 0xd4, 0x8d, 0xa2, 0x48, 0x21, 0x72, 0xb1, 0x74, + 0x60, 0xe1, 0xde, 0x44, 0xfb, 0x7c, 0xd0, 0x1a, 0xc6, 0x2a, 0x2a, 0x58, 0xba, 0x48, 0x58, 0x18, 0x4a, 0x9c, 0x63, + 0x81, 0xc8, 0x85, 0x6c, 0x84, 0x05, 0xb9, 0x80, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xd9, 0x41, 0x16, + 0x6e, 0x84, 0x00, 0x62, 0x3b, 0xa0, 0x82, 0x90, 0x20, 0x5f, 0xcc, 0x46, 0xac, 0x08, 0xca, 0x62, 0xbd, 0x1a, 0x5e, + 0x2c, 0x24, 0xdb, 0x4b, 0xa4, 0xdc, 0x1b, 0x2f, 0xf2, 0x44, 0x71, 0x91, 0xef, 0x05, 0x8d, 0xa2, 0x11, 0x18, 0x7c, + 0x28, 0xd1, 0x21, 0x40, 0x6b, 0x14, 0xe6, 0xa8, 0xc1, 0x07, 0xa2, 0xd1, 0x1e, 0x62, 0x18, 0x25, 0xea, 0xd9, 0xf6, + 0x2c, 0x04, 0x18, 0xe6, 0x30, 0xc9, 0x35, 0xfe, 0x64, 0x76, 0x3e, 0x4c, 0xf1, 0xab, 0xec, 0xf3, 0x68, 0x7b, 0xa7, + 0x10, 0x15, 0xcd, 0xe8, 0x3c, 0x64, 0xe4, 0x82, 0x69, 0xec, 0xa2, 0x79, 0x02, 0x63, 0xad, 0x2d, 0x5c, 0x9f, 0xc5, + 0x2c, 0xaa, 0x70, 0x0a, 0xc5, 0x2a, 0x1a, 0x8b, 0xe2, 0x29, 0x4d, 0xa6, 0x50, 0xaf, 0xc4, 0x98, 0xd4, 0x6d, 0xb8, + 0xa4, 0x60, 0x54, 0xb1, 0xa7, 0x19, 0x83, 0xaf, 0x30, 0xd0, 0x35, 0x03, 0x84, 0x73, 0xd8, 0xea, 0x19, 0x57, 0xaf, + 0x44, 0x9e, 0xb0, 0x5e, 0xee, 0xe1, 0x97, 0x5e, 0xf9, 0x4b, 0xa5, 0x0a, 0x3e, 0x5a, 0x28, 0x16, 0x06, 0x39, 0x94, + 0x08, 0x70, 0x8e, 0xb0, 0x8c, 0x14, 0xbb, 0x53, 0x57, 0x22, 0x57, 0x2c, 0x57, 0x84, 0x39, 0xa8, 0x62, 0x1e, 0xd1, + 0xf9, 0x9c, 0xe5, 0xe9, 0xd5, 0x94, 0x67, 0x69, 0x28, 0xd1, 0x1a, 0xad, 0xf1, 0x07, 0x49, 0x60, 0x92, 0xe4, 0x82, + 0xc7, 0xf0, 0xcf, 0xb7, 0xa7, 0x13, 0x2a, 0x72, 0xa1, 0xb7, 0x05, 0x23, 0x41, 0xd0, 0x1b, 0x8b, 0x22, 0xb4, 0x53, + 0xd8, 0x03, 0xd2, 0x05, 0x7d, 0xbc, 0x5d, 0x64, 0x4c, 0x22, 0xd6, 0x20, 0x25, 0xa6, 0x39, 0x08, 0xff, 0x56, 0x84, + 0x0c, 0x16, 0x80, 0xa3, 0x98, 0x6b, 0x12, 0xf8, 0x92, 0xdb, 0x4d, 0x95, 0x96, 0x44, 0xed, 0x77, 0x49, 0x52, 0x1e, + 0xa9, 0x62, 0x21, 0x15, 0x4b, 0xdf, 0xdd, 0xcf, 0x99, 0xc4, 0x3f, 0x17, 0xe4, 0x77, 0xd9, 0xff, 0x5d, 0x46, 0x6c, + 0x36, 0x57, 0xf7, 0xd7, 0x9a, 0x9a, 0xc7, 0x41, 0x80, 0x3f, 0xea, 0xa2, 0x05, 0xa3, 0x09, 0x90, 0x34, 0x0b, 0xb2, + 0x37, 0x22, 0xbb, 0x1f, 0xf3, 0x2c, 0xbb, 0x5e, 0xcc, 0xe7, 0xa2, 0x50, 0x58, 0x49, 0xb2, 0x54, 0xa2, 0x82, 0x0f, + 0xac, 0xe8, 0x52, 0xde, 0x72, 0x95, 0x4c, 0x43, 0x85, 0x96, 0x09, 0x95, 0x6c, 0xef, 0xb1, 0x10, 0x19, 0xa3, 0x79, + 0xcc, 0x09, 0xef, 0xff, 0x5c, 0xc4, 0xf9, 0x22, 0xcb, 0x7a, 0xa3, 0x82, 0xd1, 0x2f, 0x3d, 0x9d, 0x6d, 0x0e, 0x87, + 0x58, 0xff, 0xbe, 0x2c, 0x0a, 0x7a, 0x0f, 0x05, 0x09, 0x81, 0x62, 0x7d, 0x1e, 0xff, 0x7c, 0xfd, 0xfa, 0x55, 0x64, + 0xf6, 0x0a, 0x1f, 0xdf, 0x87, 0xbc, 0xdc, 0x7f, 0x7c, 0x8d, 0xc7, 0x85, 0x98, 0x6d, 0x74, 0x6d, 0x40, 0xc7, 0x7b, + 0xdf, 0x18, 0x02, 0x23, 0x7c, 0xdf, 0x34, 0xed, 0x8f, 0xe0, 0x95, 0xc6, 0x7c, 0xc8, 0x24, 0xb6, 0x5f, 0xf8, 0x27, + 0x36, 0xc9, 0x21, 0x47, 0xdf, 0x1f, 0xad, 0x2a, 0xee, 0x97, 0x8c, 0xe8, 0x71, 0xce, 0xe1, 0x60, 0x84, 0x31, 0x26, + 0x54, 0x25, 0xd3, 0x25, 0xd3, 0x8d, 0xad, 0xdd, 0x88, 0xd9, 0x7a, 0x8d, 0x5f, 0x09, 0x87, 0xf5, 0x6a, 0x9f, 0x10, + 0xae, 0xe9, 0x15, 0x51, 0xab, 0x15, 0x27, 0x84, 0x23, 0xfc, 0x96, 0x93, 0x25, 0x75, 0x13, 0x82, 0x93, 0x0d, 0xb6, + 0x67, 0x6c, 0xa8, 0x0c, 0x9c, 0x80, 0x5f, 0x59, 0xa1, 0x58, 0x11, 0x2b, 0x89, 0x0b, 0x36, 0xce, 0x60, 0x1c, 0xfb, + 0x6d, 0x3c, 0xa5, 0xf2, 0x6a, 0x4a, 0xf3, 0x09, 0x4b, 0xe3, 0x57, 0x62, 0x8d, 0x99, 0x24, 0xc1, 0x98, 0xe7, 0x34, + 0xe3, 0xff, 0xb0, 0x34, 0xb0, 0xe7, 0xc2, 0x63, 0xb5, 0xc7, 0xee, 0x14, 0xcb, 0x53, 0xb9, 0xf7, 0xfc, 0xdd, 0xaf, + 0x2f, 0xed, 0x62, 0xd6, 0xce, 0x0a, 0xb4, 0x94, 0x8b, 0x39, 0x2b, 0x42, 0x84, 0xed, 0x59, 0xf1, 0x94, 0x6b, 0x3a, + 0xf9, 0x2b, 0x9d, 0x9b, 0x14, 0x2e, 0x7f, 0x9f, 0xa7, 0x54, 0xb1, 0x37, 0x2c, 0x4f, 0x79, 0x3e, 0x21, 0xfb, 0x6d, + 0x93, 0x3e, 0xa5, 0x36, 0x23, 0x2d, 0x93, 0x6e, 0x1e, 0x3c, 0xcd, 0xf4, 0xdc, 0xcb, 0xcf, 0x45, 0x88, 0xd6, 0x52, + 0x51, 0xc5, 0x93, 0x3d, 0x9a, 0xa6, 0x2f, 0x72, 0xae, 0xb8, 0x1e, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xcc, 0xa9, + 0xe1, 0x46, 0x1e, 0x22, 0x1c, 0x86, 0xf6, 0x2c, 0x98, 0x22, 0xbb, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb3, 0xd8, + 0x64, 0x92, 0xc1, 0x10, 0x45, 0xf3, 0x85, 0x84, 0xc5, 0x76, 0x5d, 0xc0, 0x41, 0x23, 0x46, 0x92, 0x15, 0x5f, 0x59, + 0x5a, 0x22, 0x88, 0x0c, 0xd1, 0x72, 0xa3, 0x0f, 0xbb, 0x3d, 0x14, 0x19, 0x0c, 0x7b, 0x3e, 0x09, 0x67, 0x16, 0xd9, + 0x0d, 0xa7, 0xc2, 0x99, 0x2c, 0x89, 0x4a, 0x08, 0x07, 0x6a, 0x49, 0x58, 0x72, 0xe2, 0xe6, 0x37, 0x0f, 0x25, 0xf0, + 0x10, 0x3e, 0xe5, 0x70, 0x67, 0xee, 0xd3, 0xaf, 0xfa, 0xf0, 0xc8, 0xb1, 0x44, 0x58, 0x99, 0x91, 0xe6, 0x08, 0xad, + 0x11, 0x56, 0x6e, 0xb8, 0x86, 0x28, 0x39, 0xbe, 0x08, 0x4e, 0x6d, 0xf2, 0x96, 0xeb, 0x63, 0x1b, 0x68, 0x1b, 0x55, + 0xec, 0xe0, 0x20, 0x64, 0x51, 0x89, 0x18, 0x64, 0xbf, 0x6d, 0x17, 0xc9, 0x83, 0xd6, 0x37, 0xc6, 0x0d, 0x3d, 0x6b, + 0x06, 0x67, 0x9f, 0x45, 0xb9, 0xb8, 0x4c, 0x12, 0x26, 0xa5, 0x28, 0x0e, 0x0e, 0xf6, 0x75, 0xf9, 0x92, 0xb3, 0x80, + 0x45, 0x7c, 0x7d, 0x9b, 0x57, 0x43, 0x40, 0xd5, 0x69, 0xeb, 0xf8, 0x26, 0x52, 0xf1, 0x4d, 0x8e, 0x09, 0x89, 0x83, + 0x9b, 0x9b, 0xa0, 0xa1, 0xb0, 0x85, 0xc3, 0x84, 0xb9, 0xae, 0xef, 0x9f, 0x30, 0xc3, 0x16, 0x6a, 0x26, 0x64, 0x0b, + 0x34, 0x3b, 0xf9, 0xc1, 0xb0, 0x3e, 0x24, 0xac, 0x70, 0x8e, 0xd6, 0xde, 0x8a, 0xee, 0x6c, 0x5a, 0xf3, 0x37, 0x66, + 0xe9, 0x96, 0x13, 0xcd, 0x53, 0x78, 0xeb, 0x38, 0x60, 0xc3, 0x35, 0xd6, 0xb0, 0x77, 0xb3, 0x11, 0x7a, 0xa0, 0x03, + 0x35, 0xec, 0xd9, 0x7c, 0x92, 0x1b, 0xc8, 0x15, 0xec, 0xef, 0x05, 0x93, 0xca, 0x20, 0x72, 0xa8, 0xb0, 0xc0, 0x70, + 0x46, 0x6d, 0x32, 0x9d, 0x35, 0x96, 0x74, 0xd7, 0xd8, 0x5e, 0xcf, 0xe1, 0x6c, 0x94, 0x80, 0xd4, 0xdf, 0xc7, 0x27, + 0x18, 0xab, 0x42, 0xab, 0xd5, 0x5b, 0xee, 0x5a, 0xa9, 0xd6, 0xb2, 0xe4, 0xd7, 0x36, 0x16, 0x85, 0x49, 0x64, 0x0f, + 0xe7, 0xfd, 0xb6, 0x1d, 0xbf, 0x1c, 0x92, 0xfd, 0x56, 0x89, 0xc5, 0x16, 0xac, 0x66, 0x3c, 0x06, 0x8a, 0xaf, 0x4d, + 0x53, 0x48, 0x9f, 0xf5, 0x35, 0x7c, 0x89, 0xa6, 0x5b, 0xb8, 0x3a, 0x25, 0x03, 0xe0, 0x3a, 0xa2, 0xe9, 0xf0, 0x5b, + 0xf8, 0xe4, 0x28, 0x42, 0xa8, 0xb6, 0xf3, 0x2a, 0xc2, 0xf1, 0xb5, 0x4e, 0x38, 0x36, 0xa6, 0x11, 0xcc, 0xcb, 0x2a, + 0x41, 0x89, 0x66, 0x76, 0xab, 0x57, 0x59, 0x58, 0xea, 0xc1, 0x54, 0x53, 0xf2, 0x9a, 0x78, 0x45, 0x67, 0x4c, 0x86, + 0x0c, 0xe1, 0x6f, 0x15, 0x30, 0xf8, 0x09, 0x45, 0x86, 0xde, 0x19, 0x9a, 0xc3, 0x19, 0x0a, 0xec, 0x2e, 0x30, 0x69, + 0xf5, 0x2d, 0x97, 0x63, 0x36, 0xc8, 0x87, 0x15, 0x6f, 0xe7, 0x4d, 0x5e, 0x1f, 0xce, 0x92, 0xd4, 0xf6, 0x9b, 0x49, + 0x33, 0x40, 0xd3, 0x2c, 0x84, 0x44, 0x78, 0xbf, 0xb5, 0xb9, 0x92, 0xae, 0x54, 0x35, 0xc7, 0xc1, 0x10, 0xd6, 0x41, + 0x1f, 0x1b, 0x11, 0x97, 0xfa, 0x6f, 0x6d, 0xab, 0x01, 0xd8, 0xae, 0x01, 0x33, 0xa2, 0x71, 0x46, 0x55, 0xd8, 0x3e, + 0x6a, 0x01, 0x63, 0xfa, 0x95, 0xc1, 0xa9, 0x82, 0xd0, 0xf6, 0x54, 0x58, 0xb4, 0xc8, 0xe5, 0x94, 0x8f, 0x55, 0xf8, + 0x41, 0x6a, 0xa2, 0xc2, 0x32, 0xc9, 0x40, 0xc2, 0xf1, 0xd8, 0x63, 0x4d, 0x70, 0x3e, 0xc0, 0x30, 0x4a, 0x56, 0x8c, + 0xb9, 0x91, 0x6a, 0xc2, 0x05, 0xe4, 0xa1, 0x62, 0xad, 0x2b, 0x32, 0xe3, 0x4a, 0x4b, 0xe0, 0x1e, 0xdb, 0x7d, 0xd3, + 0x62, 0x6c, 0xa9, 0x81, 0xf4, 0x38, 0x58, 0x19, 0xfb, 0x24, 0xc2, 0x26, 0xaa, 0x48, 0x89, 0x97, 0xe2, 0x96, 0x15, + 0x57, 0x14, 0x06, 0x1f, 0x9b, 0xea, 0x6b, 0x73, 0x14, 0x68, 0x8a, 0xaf, 0x7a, 0x0e, 0x5f, 0x6e, 0xf4, 0xc4, 0xdf, + 0x14, 0x62, 0xc6, 0x25, 0x03, 0xbe, 0xcd, 0xc0, 0x3f, 0x87, 0x8d, 0xa6, 0x77, 0x24, 0x1c, 0x37, 0xac, 0xc4, 0xaf, + 0xcb, 0x97, 0x75, 0xfc, 0xba, 0x79, 0xf0, 0x74, 0xe2, 0x28, 0x60, 0x7d, 0x1f, 0x23, 0x1c, 0x5a, 0xf1, 0xc2, 0x3b, + 0xe9, 0xa2, 0x29, 0xb2, 0xc7, 0xfc, 0x6a, 0xa5, 0x3c, 0x31, 0xae, 0xc6, 0x39, 0x32, 0xb3, 0x6d, 0xd0, 0x9a, 0xa6, + 0x29, 0xb0, 0x78, 0x85, 0xc8, 0x32, 0xef, 0xb0, 0xc2, 0xb2, 0x57, 0x1e, 0x4f, 0x37, 0x0f, 0x9e, 0x5e, 0x7f, 0xef, + 0x84, 0x82, 0x7c, 0xff, 0x90, 0x72, 0x03, 0xcd, 0x53, 0x56, 0x80, 0x5c, 0xe9, 0xad, 0x96, 0x3d, 0x67, 0xaf, 0x44, + 0x9e, 0xb3, 0x44, 0xb1, 0x14, 0x84, 0x16, 0x60, 0x83, 0xa7, 0x42, 0xaa, 0x32, 0xb1, 0x1a, 0xbd, 0xf4, 0x85, 0xd0, + 0x28, 0xa1, 0x59, 0x16, 0x1a, 0x01, 0x65, 0x26, 0xbe, 0xb2, 0x1d, 0xa3, 0xee, 0xd5, 0x86, 0x5c, 0x36, 0xc3, 0xbc, + 0x66, 0x58, 0x24, 0xe7, 0x19, 0x4f, 0x58, 0x79, 0x78, 0x5d, 0x47, 0x3c, 0x4f, 0xd9, 0x1d, 0xd0, 0x11, 0x74, 0x71, + 0x71, 0xd1, 0xc2, 0x6d, 0xb4, 0x36, 0x00, 0x5f, 0x6e, 0x01, 0xf6, 0x3b, 0xc7, 0xa6, 0x11, 0xc4, 0x97, 0x3b, 0xc9, + 0x1a, 0xf2, 0xce, 0x4a, 0xee, 0x04, 0x2d, 0x43, 0x9e, 0x11, 0x4e, 0x59, 0xc6, 0x14, 0x73, 0xe4, 0x1c, 0x98, 0x69, + 0xb3, 0x75, 0xdf, 0x96, 0xf0, 0x2b, 0xd1, 0xc9, 0xed, 0x32, 0xb7, 0xe6, 0xb2, 0x14, 0xdd, 0xab, 0xe5, 0xa9, 0xa0, + 0xdd, 0x57, 0x66, 0x79, 0xa8, 0x52, 0x34, 0x99, 0x1a, 0x89, 0x3d, 0xdc, 0x9a, 0x52, 0xd5, 0x86, 0x25, 0xed, 0xe5, + 0x26, 0xfa, 0x54, 0xd8, 0x61, 0xee, 0x02, 0xc1, 0xb5, 0x25, 0x0a, 0x0c, 0x84, 0x40, 0xb3, 0x6c, 0x57, 0x34, 0xcb, + 0x46, 0x34, 0xf9, 0x52, 0xc7, 0xfe, 0x0a, 0x0d, 0xc8, 0x26, 0x35, 0xf6, 0xb2, 0x3c, 0x92, 0xe5, 0xcf, 0xdb, 0x51, + 0xe9, 0xda, 0x46, 0x09, 0xf7, 0x5b, 0x15, 0xda, 0xd7, 0x17, 0xfa, 0x9b, 0xd8, 0xae, 0x47, 0x24, 0xed, 0xcc, 0x42, + 0xa0, 0x02, 0xff, 0x12, 0xe3, 0x1c, 0x3d, 0xb0, 0x78, 0x07, 0x82, 0xc7, 0x7a, 0x63, 0x20, 0x0a, 0x2d, 0xd7, 0x29, + 0x97, 0xdf, 0x86, 0xc0, 0xff, 0x96, 0x51, 0x3e, 0xf1, 0x7a, 0xf8, 0x77, 0x07, 0x5a, 0xd2, 0x38, 0xcb, 0x38, 0x97, + 0x23, 0xb3, 0x0c, 0x85, 0x23, 0x34, 0xbf, 0x00, 0xf3, 0xa2, 0xf1, 0xfd, 0xb5, 0xc9, 0xd2, 0x7c, 0x19, 0x0c, 0x23, + 0xef, 0xf9, 0x0c, 0x45, 0x0d, 0x05, 0x2c, 0x51, 0x35, 0x67, 0xae, 0xa8, 0x89, 0x92, 0x96, 0x6b, 0x37, 0xe2, 0xb8, + 0xa5, 0xb9, 0x05, 0x09, 0xc3, 0x30, 0x27, 0xba, 0x0d, 0xc3, 0xdf, 0x57, 0xb3, 0xc8, 0xb7, 0x66, 0x91, 0x47, 0x9e, + 0xb4, 0x85, 0x2a, 0x64, 0xf6, 0xaa, 0xc7, 0x4a, 0x22, 0xbf, 0x14, 0xb0, 0xac, 0x11, 0x50, 0x68, 0x54, 0x12, 0xdc, + 0x8c, 0x28, 0x5c, 0x58, 0x51, 0xc7, 0xe2, 0x1a, 0x90, 0x8c, 0xaa, 0x8a, 0x40, 0x66, 0x73, 0xd4, 0x64, 0x5f, 0x81, + 0x0b, 0xb4, 0xc1, 0xdf, 0xaf, 0xd7, 0x16, 0x4a, 0x0c, 0xd9, 0xd5, 0xa9, 0x31, 0xc6, 0x1e, 0x58, 0xb0, 0x20, 0xb9, + 0x61, 0x86, 0x0d, 0xeb, 0xb3, 0x09, 0x9c, 0xb2, 0xdd, 0x7d, 0x42, 0x44, 0x05, 0x9b, 0x3c, 0xda, 0xc1, 0x5d, 0x09, + 0x84, 0xa9, 0x63, 0x4b, 0x8b, 0x6a, 0xe2, 0x84, 0x04, 0x4e, 0x3b, 0x11, 0xf4, 0x97, 0x35, 0xe1, 0x30, 0xf6, 0x8a, + 0xad, 0x63, 0x20, 0xaa, 0xc5, 0x2e, 0x78, 0xef, 0xc2, 0x9a, 0x5a, 0x3b, 0x1e, 0xc4, 0x8b, 0x1a, 0xc4, 0x3d, 0xd0, + 0x0a, 0x43, 0xbc, 0xc4, 0x90, 0xd0, 0x7a, 0xe5, 0x90, 0xe1, 0xc2, 0x2c, 0xc4, 0x16, 0x14, 0x37, 0xd9, 0x4f, 0x8d, + 0x85, 0x20, 0xcb, 0xe6, 0xc0, 0xdf, 0xf9, 0x47, 0x44, 0x08, 0x83, 0x97, 0xab, 0xd5, 0x16, 0xda, 0xed, 0xe4, 0x42, + 0x51, 0x54, 0x49, 0x87, 0xab, 0xd5, 0x2b, 0x81, 0x42, 0xcb, 0xff, 0x62, 0x86, 0xfa, 0x8e, 0xe8, 0x5e, 0xbe, 0x84, + 0x52, 0x9a, 0x1d, 0xad, 0x52, 0x4a, 0xc1, 0xa1, 0x8e, 0xb5, 0xf5, 0x85, 0x52, 0x1e, 0xe5, 0xbe, 0xda, 0x22, 0x60, + 0x3a, 0xd1, 0x9e, 0xd4, 0xd5, 0x94, 0xaf, 0x6c, 0xd3, 0x12, 0x21, 0x14, 0xe7, 0x5a, 0x96, 0xd9, 0xdf, 0x25, 0x5f, + 0x1e, 0x1c, 0xe4, 0x5e, 0x43, 0x37, 0x25, 0xa5, 0xf8, 0x2b, 0x84, 0x53, 0x59, 0xde, 0xe7, 0x9a, 0x7d, 0xf9, 0xcb, + 0x9d, 0x43, 0x5b, 0xd2, 0x69, 0xab, 0x07, 0x82, 0x39, 0xbd, 0xa5, 0x5c, 0xed, 0x95, 0xad, 0x18, 0xc1, 0x3c, 0x64, + 0x68, 0x69, 0xb9, 0x8d, 0xa8, 0x60, 0xc0, 0x3f, 0x02, 0x59, 0x70, 0x5c, 0xb4, 0x41, 0xfc, 0x64, 0xca, 0x40, 0x95, + 0xed, 0x18, 0x89, 0x52, 0x3c, 0xdc, 0xb7, 0x07, 0x89, 0x6d, 0x78, 0xf7, 0xd8, 0xd7, 0x9b, 0xd5, 0x6b, 0xd2, 0xc0, + 0x9c, 0x15, 0x63, 0x51, 0xcc, 0x5c, 0xde, 0x7a, 0xe3, 0xdb, 0x12, 0x47, 0x3e, 0x0e, 0x77, 0xb6, 0x6d, 0x45, 0x80, + 0xde, 0x86, 0xec, 0x5d, 0x49, 0xed, 0xb5, 0xd3, 0xb4, 0x3c, 0x80, 0x8d, 0x82, 0xd0, 0x61, 0x66, 0xee, 0x4b, 0xf9, + 0x56, 0xbd, 0xda, 0x33, 0xba, 0x93, 0xfd, 0x76, 0xaf, 0x94, 0xfc, 0x1c, 0x36, 0xf4, 0x8c, 0x8e, 0xc3, 0x9e, 0xaa, + 0x62, 0x91, 0xa5, 0x76, 0xb0, 0x70, 0xc4, 0x59, 0x3c, 0xba, 0xe5, 0x59, 0x56, 0xa5, 0xfe, 0x27, 0xa4, 0x3d, 0xb7, + 0xa4, 0x5d, 0x38, 0xd2, 0x0e, 0xa4, 0x02, 0x48, 0xbb, 0x69, 0xae, 0xaa, 0x2e, 0xb6, 0xb6, 0xa7, 0x30, 0x44, 0x3d, + 0xd7, 0xe2, 0x34, 0xf4, 0xb7, 0x70, 0x23, 0x40, 0x25, 0xf3, 0xf5, 0x25, 0xb4, 0xfa, 0x18, 0x10, 0x03, 0x8d, 0x4e, + 0x93, 0xf9, 0x9a, 0x8a, 0x2f, 0x21, 0xc2, 0xf9, 0x9a, 0x95, 0x98, 0x7d, 0xf9, 0x14, 0x94, 0x76, 0xde, 0x74, 0xe0, + 0x1c, 0xd3, 0xc9, 0xff, 0x11, 0x1f, 0xe5, 0x66, 0x27, 0xed, 0xec, 0x72, 0x37, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0xd2, + 0xef, 0x53, 0x7b, 0x3d, 0x3d, 0x59, 0x4e, 0xaf, 0x5a, 0xef, 0xd5, 0x2a, 0xdc, 0x48, 0x01, 0x8d, 0xbe, 0x95, 0x52, + 0x8a, 0xb2, 0x75, 0xa0, 0x01, 0x3e, 0x64, 0x20, 0x61, 0x6d, 0x26, 0x5d, 0x9e, 0x72, 0x2f, 0xff, 0x95, 0x9e, 0x47, + 0x2b, 0xee, 0x4d, 0xfd, 0x2b, 0x31, 0x9b, 0x03, 0x43, 0xb6, 0x81, 0xd2, 0x13, 0x66, 0x3b, 0xac, 0xf2, 0xd7, 0x3b, + 0xd2, 0x6a, 0x75, 0xf4, 0x7e, 0xac, 0x61, 0x53, 0x29, 0x35, 0xef, 0xb7, 0xd6, 0x8b, 0x32, 0xa9, 0x24, 0x1c, 0xbb, + 0x74, 0x2b, 0x57, 0x9b, 0x9a, 0x19, 0x97, 0xf1, 0x3a, 0x94, 0x86, 0x0e, 0x4b, 0xa0, 0x75, 0x1e, 0xf9, 0x71, 0xe8, + 0xee, 0xaf, 0xff, 0xba, 0x02, 0xce, 0x72, 0xbd, 0x01, 0xbe, 0xe5, 0x7a, 0xfd, 0x58, 0x59, 0x49, 0x1b, 0x3f, 0xde, + 0x21, 0xf7, 0x96, 0xd0, 0xab, 0x32, 0xad, 0xcc, 0x38, 0x18, 0x42, 0xda, 0x16, 0x0b, 0x49, 0x96, 0x33, 0x91, 0xb2, + 0x38, 0x10, 0x73, 0x96, 0x07, 0x6b, 0xd0, 0xb3, 0x5a, 0x04, 0xf8, 0x28, 0xc3, 0xe5, 0xdb, 0xba, 0xbe, 0x35, 0x7e, + 0xac, 0xd6, 0xa0, 0x0a, 0x7b, 0xc9, 0x77, 0x28, 0x63, 0xdf, 0xb3, 0x42, 0x6a, 0x9e, 0xb4, 0x64, 0x6f, 0x5f, 0xf2, + 0xea, 0x80, 0x7a, 0xc9, 0xe3, 0x6f, 0x57, 0xa9, 0x04, 0x92, 0xa0, 0x1d, 0x9d, 0x46, 0xc7, 0x01, 0xd2, 0x1a, 0xe3, + 0x67, 0x4e, 0x63, 0xbc, 0x28, 0x35, 0xc6, 0xcf, 0x15, 0x59, 0x6c, 0x68, 0x8c, 0xff, 0x96, 0xe4, 0xb9, 0xea, 0x3f, + 0x77, 0xda, 0xf4, 0x37, 0x22, 0xe3, 0xc9, 0x7d, 0x18, 0x64, 0x5c, 0x35, 0xe1, 0x36, 0x31, 0xc0, 0x4b, 0x93, 0x01, + 0xaa, 0x46, 0xad, 0xef, 0x5e, 0x3b, 0xf9, 0x0f, 0x73, 0x49, 0x82, 0x07, 0x19, 0x57, 0x0f, 0x02, 0x3c, 0x55, 0xe4, + 0x33, 0xfc, 0x7a, 0xb0, 0x0c, 0x7f, 0xa5, 0x6a, 0x1a, 0x15, 0x34, 0x4f, 0xc5, 0x2c, 0x44, 0x8d, 0x20, 0x40, 0x91, + 0xd4, 0x42, 0xc8, 0x23, 0xb4, 0x7e, 0xf0, 0x19, 0xff, 0x23, 0x48, 0xd0, 0x0f, 0x1a, 0x53, 0x85, 0x15, 0x25, 0x9f, + 0xcf, 0x1f, 0x2c, 0xff, 0x11, 0xeb, 0x8b, 0xcf, 0xf8, 0xa9, 0x2a, 0xd5, 0xfa, 0xf8, 0x8e, 0x91, 0x10, 0x91, 0x8b, + 0xa7, 0x6e, 0x48, 0x57, 0x62, 0x66, 0x14, 0xfc, 0x01, 0xc2, 0x5f, 0x41, 0xaf, 0x7b, 0xc1, 0x2b, 0x22, 0x64, 0xef, + 0x60, 0xf6, 0x49, 0x20, 0xb4, 0xf2, 0x20, 0x38, 0x38, 0xf0, 0xd2, 0x4a, 0x16, 0x02, 0xff, 0x25, 0x48, 0x4d, 0x54, + 0xc7, 0x8c, 0x42, 0x4b, 0x7f, 0x89, 0x90, 0x23, 0xd7, 0x4c, 0xe8, 0x34, 0xd5, 0x76, 0xc7, 0xf2, 0x81, 0xd1, 0x3d, + 0x44, 0x5c, 0xb1, 0x82, 0x2a, 0x51, 0x0c, 0x91, 0xcf, 0x96, 0xe0, 0x57, 0x9c, 0x7c, 0x1e, 0xec, 0xfd, 0x3f, 0xff, + 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xf0, 0x33, 0x96, 0x8c, 0x1c, 0x9d, 0x87, 0xfd, 0x38, 0xdc, 0x6f, 0x36, 0x57, 0x7f, + 0x1e, 0x0d, 0xfe, 0x9b, 0x36, 0xff, 0xb9, 0x6c, 0x7e, 0x1a, 0xa2, 0x55, 0xf8, 0xe7, 0x51, 0x7f, 0x60, 0xbf, 0x06, + 0xff, 0x7d, 0xf1, 0xa7, 0x1c, 0x1e, 0x9a, 0xc4, 0x07, 0x08, 0x1d, 0x4d, 0xf0, 0x1f, 0x92, 0x1c, 0x35, 0x9b, 0x17, + 0x47, 0x13, 0xfc, 0x8b, 0x24, 0x47, 0xf0, 0xf7, 0x5e, 0x91, 0xb7, 0x6c, 0xf2, 0xf4, 0x6e, 0x1e, 0x7e, 0xbe, 0x58, + 0x3d, 0x58, 0xbe, 0xe2, 0x6b, 0x68, 0x77, 0xf0, 0xdf, 0x7f, 0xfe, 0x29, 0x83, 0x1f, 0x2f, 0xc8, 0xd1, 0xb0, 0x81, + 0x42, 0x9d, 0x7c, 0x48, 0xcc, 0x9f, 0xb0, 0x1f, 0x0f, 0xfe, 0xdb, 0x0e, 0x25, 0xf8, 0xf1, 0xcf, 0xcf, 0xe7, 0x17, + 0x64, 0xb8, 0x0a, 0x83, 0xd5, 0x8f, 0x68, 0x85, 0xd0, 0xea, 0x01, 0xfa, 0x8c, 0x83, 0x49, 0x80, 0xf0, 0x4f, 0x92, + 0x1c, 0xfd, 0x78, 0x34, 0xc1, 0xbf, 0x49, 0x72, 0x14, 0x1c, 0x4d, 0xf0, 0x7b, 0x41, 0x8e, 0xfe, 0x3b, 0xec, 0xc7, + 0x46, 0x09, 0xb7, 0xd2, 0xea, 0x8f, 0x15, 0xdc, 0x84, 0xd0, 0x82, 0xd1, 0x95, 0xe2, 0x2a, 0x63, 0xe8, 0xc1, 0x11, + 0xc7, 0x8f, 0x05, 0x00, 0x2b, 0x54, 0xa0, 0xa4, 0xd1, 0x97, 0xb0, 0xcb, 0x1b, 0x58, 0x78, 0xc0, 0xa0, 0x07, 0x31, + 0xc7, 0x46, 0x4f, 0x20, 0x63, 0x65, 0x6e, 0x6f, 0x25, 0x5c, 0xdf, 0xe2, 0x2b, 0xf2, 0x58, 0x84, 0x6d, 0x84, 0x39, + 0x85, 0x1f, 0x1d, 0x84, 0x3f, 0x28, 0x7b, 0xe1, 0x09, 0xdb, 0xdc, 0x60, 0x58, 0x2e, 0x0c, 0x3f, 0x13, 0x20, 0xfc, + 0x72, 0x47, 0xa6, 0x9a, 0x82, 0xfa, 0x01, 0xe1, 0x4f, 0xb5, 0xeb, 0x51, 0x7c, 0xa5, 0x48, 0x89, 0x1c, 0xef, 0x0a, + 0xc6, 0x3e, 0xd0, 0xec, 0x0b, 0x2b, 0xc2, 0xa7, 0x0a, 0xb7, 0x3b, 0x8f, 0xb0, 0x56, 0x55, 0xef, 0xb7, 0x51, 0xaf, + 0xbc, 0xdd, 0x7a, 0x2e, 0xcc, 0x7d, 0x02, 0x9c, 0xc2, 0x75, 0x7d, 0x0d, 0xac, 0xfd, 0x3e, 0xdf, 0x52, 0x6a, 0x15, + 0xf4, 0x36, 0x40, 0xf5, 0xab, 0x54, 0x9e, 0x7f, 0xa5, 0x19, 0x4f, 0xf7, 0x14, 0x9b, 0xcd, 0x33, 0xaa, 0xd8, 0x9e, + 0x9d, 0xf3, 0x1e, 0x85, 0x86, 0x82, 0x92, 0xa7, 0xf8, 0x5b, 0x56, 0x9b, 0xf6, 0x6f, 0x27, 0xe7, 0xc1, 0xde, 0x09, + 0xe1, 0x3e, 0xcb, 0xf2, 0x25, 0x92, 0x96, 0xd7, 0x65, 0x9b, 0x37, 0x82, 0xcd, 0x36, 0x28, 0xcb, 0x86, 0xfa, 0xfc, + 0xce, 0x31, 0xdc, 0x6f, 0x12, 0xd2, 0xe9, 0x07, 0xe7, 0xf2, 0xeb, 0xe4, 0x22, 0x80, 0x9b, 0x9c, 0x82, 0x48, 0xa6, + 0x95, 0x47, 0x50, 0x82, 0x92, 0x56, 0x8f, 0x9e, 0xb3, 0x1e, 0x6d, 0x34, 0x1c, 0x9b, 0x9d, 0x10, 0x3e, 0xa0, 0xa6, + 0x7e, 0x86, 0xa7, 0x38, 0x25, 0xcd, 0x36, 0x5e, 0x90, 0x96, 0xae, 0xd2, 0x5b, 0x9c, 0x27, 0xb6, 0x9f, 0x83, 0x83, + 0xb0, 0x88, 0x32, 0x2a, 0xd5, 0x0b, 0xd0, 0x08, 0x90, 0x05, 0x9e, 0x92, 0x22, 0x62, 0x77, 0x2c, 0x09, 0x13, 0x84, + 0xa7, 0x96, 0x06, 0xa1, 0x1e, 0x5a, 0x10, 0xaf, 0x18, 0xc8, 0x19, 0x44, 0xb2, 0xfe, 0x74, 0xd0, 0x1e, 0x12, 0x42, + 0x82, 0xfd, 0x66, 0x33, 0xe8, 0x17, 0xe4, 0x0f, 0x19, 0x43, 0x8a, 0xc7, 0x4e, 0x93, 0x5f, 0x20, 0xa9, 0xe3, 0x25, + 0x85, 0xef, 0x45, 0xa4, 0x98, 0x54, 0x21, 0x24, 0x83, 0x92, 0x20, 0x77, 0x18, 0x1e, 0x9c, 0x1f, 0x05, 0x0d, 0x48, + 0xd5, 0x28, 0x8a, 0x70, 0x41, 0xee, 0x15, 0x8a, 0xa7, 0x83, 0xe3, 0xa1, 0x7f, 0x46, 0x98, 0x54, 0xe8, 0xff, 0x5e, + 0xf5, 0xa7, 0x83, 0x96, 0xee, 0xff, 0x22, 0xe8, 0x87, 0x05, 0xc9, 0xf7, 0xed, 0x3d, 0x4f, 0x2c, 0x99, 0x9e, 0x2f, + 0x8a, 0xed, 0x00, 0x6d, 0xdf, 0x29, 0x69, 0x76, 0xe2, 0x30, 0xf5, 0x67, 0xd2, 0x84, 0x0e, 0x2d, 0x28, 0x70, 0x46, + 0xa0, 0x3c, 0x2e, 0x08, 0x74, 0x5a, 0x55, 0xbb, 0x57, 0xb1, 0x4d, 0xf8, 0x31, 0xf8, 0xb1, 0xff, 0x9b, 0x8c, 0x7f, + 0x92, 0x66, 0x04, 0xbf, 0xc9, 0xd5, 0x0a, 0xfe, 0xfe, 0x24, 0xfb, 0x30, 0x2c, 0x9d, 0xf6, 0x87, 0x4d, 0xfb, 0x05, + 0xd2, 0x24, 0x8b, 0xf5, 0x80, 0x71, 0x5e, 0xf2, 0x63, 0x66, 0x71, 0xc6, 0xc4, 0xcc, 0xe0, 0xe0, 0x80, 0x0f, 0x68, + 0xa3, 0x3d, 0x84, 0x1b, 0x81, 0x42, 0xc9, 0x0f, 0x5c, 0x4d, 0xc3, 0xe0, 0xe8, 0x22, 0x40, 0xfd, 0x60, 0x0f, 0x56, + 0xb9, 0x27, 0x1a, 0xc4, 0xc2, 0x3a, 0x69, 0x28, 0x1a, 0xa7, 0x17, 0xa4, 0xd5, 0x0f, 0xa5, 0x21, 0xf2, 0x19, 0xc2, + 0x89, 0xa5, 0xa9, 0x2d, 0x9c, 0xa2, 0x06, 0x97, 0x0d, 0xf7, 0x9d, 0xa2, 0xc6, 0x54, 0x35, 0xc6, 0x28, 0x4e, 0xe0, + 0x6f, 0x98, 0x12, 0x42, 0x9a, 0x9d, 0xb2, 0xa2, 0x3b, 0x2c, 0x29, 0x8a, 0xc7, 0x4e, 0x3d, 0x3a, 0xd0, 0x9b, 0x43, + 0x34, 0x42, 0x3e, 0x60, 0xc3, 0xd5, 0x2a, 0x38, 0xef, 0x5f, 0x04, 0xa8, 0x11, 0x3a, 0xb4, 0x3b, 0x72, 0x78, 0x87, + 0x10, 0x96, 0xc3, 0xb5, 0xbd, 0x81, 0xba, 0x65, 0xb5, 0xdb, 0xa6, 0x65, 0xb5, 0xff, 0x3d, 0xb2, 0xc0, 0xd6, 0xa5, + 0xdc, 0x63, 0xf8, 0xdb, 0x39, 0x4c, 0xd5, 0xe1, 0xb6, 0x20, 0x2d, 0x5c, 0x10, 0xa7, 0xee, 0xa6, 0x44, 0x55, 0xf8, + 0x9f, 0x90, 0xaa, 0x38, 0x1e, 0x64, 0x78, 0x3a, 0x24, 0x92, 0x6a, 0xf9, 0xa5, 0xe7, 0x94, 0xe9, 0x2c, 0x23, 0xb7, + 0x6c, 0xe3, 0xfe, 0x37, 0x83, 0x3b, 0x99, 0x2b, 0x15, 0x25, 0x8b, 0xa2, 0x60, 0xb9, 0x7a, 0x25, 0x52, 0xcb, 0xd8, + 0xb1, 0x0c, 0x64, 0x2b, 0xb8, 0xd8, 0xc5, 0xc0, 0xd5, 0x75, 0xdc, 0x4e, 0x49, 0xb7, 0xb2, 0x17, 0x24, 0x35, 0x0c, + 0x97, 0xbe, 0xee, 0xed, 0x2d, 0xac, 0x28, 0x1d, 0x22, 0x9c, 0xda, 0x7b, 0xe0, 0x30, 0x8a, 0xa2, 0x45, 0x94, 0x40, + 0x36, 0x74, 0x20, 0xd1, 0x5a, 0xef, 0xab, 0x30, 0x27, 0x57, 0x2a, 0xca, 0xd9, 0x9d, 0xee, 0x36, 0x44, 0xd5, 0x21, + 0xee, 0xf6, 0xdb, 0x39, 0xed, 0x69, 0x02, 0x94, 0x47, 0xb9, 0x48, 0x19, 0x40, 0x08, 0xee, 0xfe, 0x6d, 0xd2, 0x94, + 0x4a, 0xff, 0x66, 0xab, 0x1a, 0xe0, 0xc0, 0x57, 0x79, 0x2f, 0x40, 0x4f, 0xac, 0x65, 0xe8, 0xb2, 0xb0, 0x51, 0x9e, + 0x23, 0xc4, 0xc7, 0xe1, 0x22, 0x82, 0x1b, 0x41, 0x8d, 0x49, 0x5c, 0xa2, 0xd5, 0x6a, 0xe1, 0xe3, 0xd6, 0xb4, 0x52, + 0x4c, 0x8f, 0xc9, 0x74, 0x50, 0x34, 0x1a, 0x5a, 0x79, 0x9d, 0x1a, 0xbc, 0x58, 0x20, 0x3c, 0x2e, 0xf7, 0x9a, 0x2b, + 0x37, 0x27, 0xf5, 0xae, 0xc2, 0x71, 0x5d, 0x09, 0xdc, 0xe0, 0x12, 0x69, 0xfd, 0xa2, 0x82, 0xd6, 0xf1, 0x84, 0x1c, + 0x85, 0x83, 0xa8, 0xff, 0x3f, 0x87, 0xa8, 0x1f, 0x46, 0x87, 0xe8, 0xc8, 0xd0, 0x92, 0x31, 0xea, 0x25, 0xa6, 0x8f, + 0xa5, 0xbe, 0xfd, 0x6c, 0x63, 0xad, 0x80, 0x8c, 0x05, 0xce, 0xe9, 0x8c, 0xc5, 0x13, 0xd8, 0xf5, 0x0e, 0x79, 0xe6, + 0x18, 0x90, 0x29, 0x9e, 0x58, 0xda, 0x12, 0x05, 0x7d, 0x41, 0xcb, 0xaf, 0x7e, 0xd0, 0xa7, 0xd5, 0xd7, 0xff, 0x0c, + 0xfa, 0x09, 0x8d, 0xaf, 0xf8, 0xda, 0x2a, 0xc9, 0x6b, 0x7d, 0x9c, 0xba, 0x3e, 0xd6, 0x66, 0x71, 0x3c, 0xe0, 0xa5, + 0x28, 0xdf, 0xd2, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0x94, 0x47, 0x8a, 0x4e, 0x00, 0xaa, 0xde, 0x22, 0xe4, + 0xbe, 0x6d, 0x80, 0x37, 0x65, 0xc0, 0x16, 0x87, 0xb4, 0x00, 0xcd, 0xc5, 0x45, 0x0b, 0x2d, 0x6b, 0x85, 0x2d, 0x67, + 0x55, 0xbf, 0x8b, 0x2f, 0x89, 0xf7, 0x18, 0xa8, 0xf2, 0xf9, 0xa2, 0x37, 0x6e, 0x34, 0x50, 0xee, 0xf0, 0x2b, 0x1d, + 0x8c, 0x87, 0xf8, 0x0e, 0x50, 0x08, 0xd7, 0x30, 0x0a, 0xd7, 0xe6, 0xd8, 0xb1, 0x73, 0x6c, 0x34, 0xc4, 0x1a, 0xf5, + 0xbc, 0xca, 0x0b, 0x5b, 0x79, 0xbd, 0x36, 0x90, 0xd9, 0xc4, 0xb8, 0x33, 0xa4, 0x53, 0xc0, 0x10, 0x8c, 0x10, 0xf2, + 0x8f, 0x40, 0x3b, 0x9b, 0x85, 0x46, 0xa1, 0xba, 0xde, 0xbd, 0x40, 0x51, 0xcd, 0xe9, 0x11, 0x02, 0x2c, 0xa0, 0x6a, + 0xa9, 0x46, 0x9e, 0x2a, 0x9c, 0x36, 0xda, 0x1a, 0xdd, 0x9b, 0xed, 0x5e, 0xbd, 0xb1, 0x87, 0x55, 0x63, 0x38, 0x6d, + 0x90, 0x69, 0xb5, 0xc3, 0xd7, 0xa2, 0xd1, 0x58, 0xd7, 0xef, 0x4b, 0xdd, 0x26, 0xae, 0xdd, 0x5f, 0x3c, 0xdd, 0x32, + 0xf1, 0x70, 0xa7, 0x6f, 0x75, 0xde, 0xca, 0x88, 0xe7, 0x39, 0x2b, 0xe0, 0x84, 0x25, 0x0a, 0xcb, 0xf5, 0xba, 0x3c, + 0xf5, 0x7f, 0x57, 0xc6, 0x66, 0x8c, 0x70, 0xa0, 0x43, 0x5a, 0x6a, 0xc3, 0x02, 0x17, 0x98, 0x6a, 0x2a, 0x42, 0x08, + 0xf9, 0xa0, 0x9c, 0x79, 0x8c, 0xd2, 0x24, 0x29, 0x21, 0xde, 0xd9, 0x1d, 0xe6, 0x84, 0x45, 0x37, 0x0f, 0xae, 0xc4, + 0x77, 0x45, 0xba, 0x81, 0x1c, 0xc6, 0xba, 0x58, 0x66, 0x09, 0x59, 0x46, 0xbe, 0x82, 0x9c, 0x53, 0x5e, 0xb0, 0x44, + 0x9a, 0x20, 0x3e, 0xe1, 0x05, 0xd3, 0x8c, 0xfb, 0x03, 0x27, 0x37, 0x26, 0x75, 0x4e, 0x33, 0xf1, 0xb5, 0x3f, 0x00, + 0xcd, 0x0c, 0x94, 0x43, 0x82, 0x6c, 0x15, 0xbb, 0x79, 0x70, 0xf9, 0x7a, 0x97, 0x0c, 0xbd, 0x5a, 0x59, 0xe9, 0x39, + 0x01, 0xd6, 0x07, 0x67, 0xd5, 0x50, 0x13, 0xfb, 0x23, 0x0e, 0x13, 0xcd, 0x44, 0x65, 0x21, 0x07, 0x64, 0xba, 0x79, + 0x70, 0xf9, 0x2e, 0xe4, 0x5a, 0x37, 0x85, 0xb0, 0x3f, 0xef, 0xb0, 0x20, 0x21, 0x25, 0x0c, 0x99, 0xc9, 0x97, 0x74, + 0xac, 0xf0, 0x4e, 0xf7, 0x98, 0xea, 0x4c, 0x10, 0x3b, 0x06, 0x72, 0x48, 0x12, 0x0b, 0x02, 0x92, 0x20, 0x9c, 0xd4, + 0xe4, 0x3a, 0xa2, 0xd7, 0x40, 0x77, 0x76, 0x0d, 0x8b, 0x11, 0x19, 0xf6, 0x10, 0xe1, 0x44, 0x77, 0xab, 0xd6, 0xe6, + 0x38, 0xc9, 0xe9, 0xa6, 0xa1, 0x5b, 0x25, 0xcf, 0xbe, 0x07, 0xc1, 0xcb, 0x7d, 0xbc, 0xb2, 0x6d, 0x97, 0x09, 0x4f, + 0x9c, 0x45, 0xda, 0xcd, 0x83, 0xcb, 0x5f, 0xad, 0x51, 0xda, 0x9c, 0x3a, 0xf2, 0xbf, 0x25, 0xa3, 0x5e, 0xfe, 0x1a, + 0x55, 0xb9, 0xba, 0xf0, 0xcd, 0x83, 0xcb, 0xdf, 0x77, 0x15, 0x83, 0xf4, 0xf5, 0xa2, 0x52, 0x12, 0xe8, 0xf1, 0x2d, + 0x59, 0x16, 0x2f, 0xed, 0x59, 0x11, 0xcb, 0x35, 0xd6, 0x27, 0x54, 0x9c, 0xaf, 0x4b, 0xdd, 0xca, 0x13, 0x2c, 0x88, + 0xbe, 0x4a, 0xaa, 0x2f, 0x9b, 0x45, 0x63, 0x2e, 0xf2, 0xeb, 0x44, 0xcc, 0xd9, 0x37, 0xee, 0x97, 0x9e, 0x2a, 0x14, + 0xf1, 0x19, 0x18, 0xe2, 0xe8, 0xb1, 0x4b, 0xbc, 0xdf, 0x42, 0xbd, 0x8d, 0xf3, 0x4c, 0x68, 0x44, 0x2d, 0xea, 0x87, + 0x0d, 0xa6, 0xa4, 0x85, 0x13, 0xd2, 0xc2, 0x19, 0xc9, 0x07, 0x2d, 0x73, 0x62, 0xf4, 0xb2, 0xb2, 0x69, 0x73, 0xee, + 0xc0, 0x76, 0xcf, 0xcc, 0xbe, 0x35, 0x87, 0xf2, 0xb4, 0x97, 0x69, 0xfd, 0xa5, 0x3e, 0xe8, 0xa7, 0x1a, 0x35, 0x9e, + 0xb0, 0xb0, 0xc0, 0x85, 0x6e, 0xf9, 0x9a, 0x8f, 0x32, 0xb0, 0x53, 0x81, 0x99, 0x61, 0x85, 0xe2, 0xb2, 0x6c, 0xdb, + 0x96, 0xcd, 0x22, 0xbd, 0x56, 0x05, 0xce, 0x22, 0x20, 0xe5, 0x38, 0xb3, 0x76, 0x3d, 0x72, 0xbb, 0xca, 0xe9, 0xc1, + 0x41, 0x68, 0x2b, 0xd1, 0xb0, 0x70, 0xf9, 0xd5, 0x0d, 0xe0, 0x7b, 0x43, 0x35, 0xa6, 0x48, 0x4f, 0xa0, 0xd1, 0x48, + 0x86, 0x6b, 0xba, 0x4f, 0x48, 0x98, 0xd5, 0xa1, 0xe8, 0x46, 0xaf, 0x99, 0xc1, 0x0d, 0x00, 0x34, 0x1a, 0xe5, 0x75, + 0xef, 0x06, 0xc4, 0x9e, 0x2a, 0x2c, 0xd6, 0x5f, 0xc3, 0xd2, 0x9a, 0xa8, 0xb5, 0x65, 0x87, 0xe5, 0x46, 0x81, 0xa4, + 0x8f, 0xbb, 0xd2, 0xcd, 0xc7, 0xdb, 0x1a, 0xba, 0xdc, 0x0b, 0x6b, 0x03, 0x81, 0xb5, 0xd5, 0x96, 0x2d, 0xe4, 0x48, + 0x5b, 0x07, 0xc5, 0xae, 0x10, 0x5c, 0x70, 0x41, 0xa1, 0xc6, 0xda, 0x62, 0xf9, 0x13, 0xb6, 0x6d, 0xce, 0x89, 0x73, + 0x64, 0xb5, 0x65, 0x7a, 0x18, 0x1a, 0x60, 0x9d, 0x12, 0x30, 0xcf, 0xc9, 0xcb, 0x6f, 0xa3, 0xfe, 0xa5, 0x87, 0xfa, + 0x8f, 0x09, 0xf3, 0xb6, 0x81, 0x59, 0x82, 0x48, 0x58, 0x05, 0x45, 0xee, 0xb2, 0xae, 0xe6, 0x04, 0xb4, 0x71, 0x75, + 0xa8, 0xe6, 0xfe, 0x15, 0xe5, 0x37, 0x28, 0x8b, 0xbf, 0x53, 0xb4, 0x3e, 0x13, 0xbb, 0xfb, 0xe4, 0xb0, 0xba, 0xa0, + 0x83, 0xae, 0x77, 0x29, 0x07, 0x7d, 0x52, 0x78, 0xf9, 0xfb, 0xf7, 0xef, 0x56, 0xaf, 0xe6, 0xdb, 0x3b, 0xd8, 0x33, + 0x2b, 0x85, 0x59, 0x7b, 0x1b, 0xb8, 0x6e, 0x64, 0x0a, 0xfd, 0x97, 0x77, 0xe2, 0x75, 0x2a, 0xb4, 0xb1, 0x19, 0xdd, + 0x71, 0x08, 0xa3, 0x6d, 0xb7, 0x75, 0x09, 0xe6, 0x35, 0x0b, 0x74, 0xc9, 0x18, 0xb7, 0xd2, 0xe2, 0x1b, 0x64, 0xe4, + 0x52, 0x17, 0x60, 0x79, 0xba, 0x3b, 0xfb, 0xf1, 0xda, 0xe2, 0x89, 0x19, 0x1a, 0x5a, 0x6a, 0x42, 0x68, 0xf0, 0x1e, + 0x30, 0xc7, 0x1c, 0x11, 0x00, 0xa2, 0x97, 0x1a, 0x52, 0x15, 0xc8, 0x82, 0xa0, 0x52, 0xe4, 0x3f, 0xdf, 0x27, 0xe4, + 0x65, 0xa5, 0xc8, 0x7c, 0x5b, 0x19, 0x73, 0x01, 0x62, 0xa0, 0x18, 0x2e, 0x12, 0xca, 0x04, 0x73, 0x19, 0xfa, 0x41, + 0xb9, 0xf2, 0x5a, 0xda, 0x8c, 0x2a, 0x6e, 0xdc, 0xbb, 0x29, 0xd5, 0x2a, 0x3e, 0x93, 0xef, 0x20, 0xb1, 0x91, 0xfb, + 0x00, 0x72, 0x19, 0xd5, 0x83, 0x84, 0xef, 0x77, 0xba, 0xb4, 0x6b, 0x77, 0xfd, 0x65, 0xd3, 0x22, 0x66, 0x63, 0x5d, + 0x22, 0x9e, 0x4b, 0x56, 0xa8, 0xc7, 0x6c, 0x2c, 0x0a, 0xb8, 0xff, 0x28, 0xc1, 0x82, 0xd6, 0x0f, 0x3c, 0x1d, 0xa0, + 0x9e, 0xa0, 0x77, 0xe9, 0xb0, 0x31, 0x43, 0xfd, 0xeb, 0x8b, 0xbe, 0x03, 0xbf, 0xd9, 0xac, 0xf5, 0xf2, 0xe0, 0xe0, + 0x2b, 0xab, 0x00, 0x65, 0x87, 0xa9, 0x87, 0xe1, 0x11, 0x2f, 0xc3, 0xe5, 0xd8, 0x9b, 0xe1, 0x07, 0x61, 0xa5, 0x32, + 0x70, 0x84, 0xc3, 0x27, 0x42, 0xcf, 0x89, 0x5a, 0x4f, 0x36, 0xe9, 0xbd, 0xd5, 0x66, 0x48, 0x5f, 0xac, 0x01, 0x72, + 0x0f, 0x72, 0xb9, 0x51, 0x32, 0xe5, 0x95, 0xad, 0x6d, 0x39, 0x88, 0x2b, 0x00, 0x57, 0x98, 0x83, 0x90, 0xe2, 0xa1, + 0x61, 0xbe, 0x53, 0x68, 0x79, 0x2e, 0x80, 0xfd, 0xc7, 0x79, 0x04, 0x22, 0x2d, 0xaa, 0x6d, 0x5c, 0x84, 0x70, 0xae, + 0x25, 0x1e, 0xcf, 0x38, 0xe1, 0xf2, 0xf9, 0x2e, 0x0d, 0xb5, 0x43, 0x6d, 0xa6, 0xcf, 0x20, 0x28, 0x21, 0x50, 0x59, + 0x21, 0xfa, 0x1a, 0x4a, 0xcb, 0xcd, 0x95, 0xf7, 0x70, 0xec, 0x76, 0x2f, 0xa7, 0xa1, 0xb9, 0xdb, 0x82, 0xe3, 0xa3, + 0x88, 0x16, 0x61, 0xad, 0xeb, 0x5e, 0xa1, 0xab, 0x61, 0x0b, 0x3a, 0xea, 0xc3, 0xa9, 0xd0, 0xf7, 0x84, 0x57, 0x15, + 0x49, 0xfd, 0x64, 0x2d, 0xa0, 0x1c, 0x31, 0xac, 0x4c, 0x53, 0xbc, 0xf9, 0x7f, 0xb2, 0xe6, 0x6b, 0xe5, 0x31, 0xc1, + 0xf4, 0x30, 0x6e, 0xcd, 0x2a, 0xb0, 0x35, 0xe0, 0xd8, 0xf2, 0x2f, 0xe1, 0x2d, 0xaa, 0x53, 0x8a, 0xeb, 0x4e, 0x3d, + 0x26, 0xe0, 0x2d, 0x58, 0xcf, 0x6c, 0x6e, 0xfd, 0xe7, 0xfa, 0x60, 0x94, 0x38, 0xaf, 0x11, 0x78, 0xa1, 0x09, 0x3c, + 0x02, 0xc6, 0xcd, 0x99, 0x96, 0xf7, 0xad, 0x11, 0x8d, 0x74, 0x27, 0x9e, 0xc5, 0x33, 0xc3, 0x72, 0x6f, 0x7d, 0x6c, + 0xac, 0x48, 0x2c, 0x09, 0xd8, 0x16, 0x61, 0x4b, 0xe4, 0x05, 0xc2, 0x79, 0xa3, 0xd1, 0xcb, 0xcf, 0x59, 0xa5, 0x55, + 0xa9, 0x86, 0x29, 0xe1, 0x96, 0x18, 0xf0, 0xbe, 0x76, 0xa2, 0xe6, 0x08, 0x97, 0x66, 0xee, 0x39, 0xa8, 0xef, 0x2f, + 0xdf, 0x86, 0x3e, 0x7d, 0xf3, 0xcb, 0x96, 0x17, 0xb1, 0x30, 0xa5, 0xb0, 0xba, 0xc3, 0x79, 0xf3, 0x7d, 0xb3, 0x11, + 0x18, 0xf7, 0x7e, 0x1b, 0x83, 0x8d, 0x1b, 0xea, 0x29, 0x43, 0x1a, 0xca, 0x4d, 0xd8, 0x43, 0x95, 0xbd, 0xa3, 0xdf, + 0x59, 0x4f, 0x55, 0xd2, 0xae, 0x22, 0xf9, 0x7a, 0x2d, 0x59, 0x65, 0x34, 0xb0, 0x61, 0xd8, 0xa9, 0x8f, 0x99, 0x6d, + 0x05, 0xfe, 0xd5, 0x9c, 0x28, 0xec, 0x21, 0xeb, 0x9b, 0x6f, 0x5d, 0xa7, 0x54, 0xc3, 0x84, 0xed, 0x6d, 0xcf, 0xc7, + 0x2b, 0xbe, 0xeb, 0x7c, 0xc4, 0xc2, 0x6e, 0x7d, 0x7d, 0x36, 0xb6, 0xff, 0x8d, 0xb3, 0xd1, 0xaa, 0xed, 0xdd, 0xf1, + 0x08, 0xdc, 0x49, 0xed, 0x78, 0xcc, 0xeb, 0xc7, 0xa3, 0xc0, 0xee, 0xf4, 0xbe, 0xe8, 0xac, 0x56, 0x72, 0xd0, 0x02, + 0xb5, 0x53, 0x10, 0xc0, 0xcf, 0xb6, 0xf9, 0xe9, 0x91, 0x64, 0xa3, 0x43, 0x0e, 0xcb, 0xf3, 0xbe, 0x8d, 0x22, 0x30, + 0xa0, 0x0e, 0xb5, 0xad, 0x97, 0x46, 0x6c, 0x8b, 0x43, 0x16, 0xcb, 0x89, 0x2c, 0xaf, 0xae, 0x60, 0xc4, 0xfa, 0xd8, + 0xb0, 0x02, 0x66, 0xb8, 0xd3, 0xaa, 0xd0, 0x89, 0x9f, 0xff, 0x9a, 0x39, 0xad, 0x1d, 0x31, 0x86, 0x93, 0xa8, 0x59, + 0x31, 0xd8, 0x11, 0x58, 0x86, 0x71, 0x5f, 0x4b, 0xa8, 0xd5, 0xa9, 0x8e, 0x6a, 0x47, 0x12, 0x6e, 0x81, 0xda, 0x6d, + 0x5f, 0x9f, 0x4b, 0xab, 0xd5, 0xce, 0x83, 0x05, 0x17, 0x1e, 0x6e, 0x3f, 0x27, 0xaa, 0x46, 0x52, 0x28, 0xb1, 0x12, + 0x14, 0xce, 0x34, 0xaa, 0x2a, 0x22, 0x06, 0xad, 0x21, 0xf0, 0xa4, 0xbd, 0xe4, 0x5c, 0x54, 0x42, 0x72, 0xd2, 0x68, + 0xa0, 0xac, 0xec, 0x98, 0x0e, 0x64, 0x23, 0x19, 0x62, 0x86, 0x13, 0x23, 0xb0, 0xc0, 0xe9, 0x15, 0x66, 0x55, 0xd7, + 0x83, 0x64, 0x88, 0x70, 0xb1, 0x5a, 0x85, 0x66, 0x68, 0x19, 0x5a, 0xad, 0x32, 0x7f, 0x68, 0x3a, 0x1f, 0x2a, 0xbe, + 0xec, 0x2b, 0xf2, 0x52, 0x9f, 0x87, 0x2f, 0x61, 0x90, 0x0d, 0x12, 0x66, 0x56, 0x25, 0x98, 0x81, 0xe6, 0xaa, 0x21, + 0x06, 0x49, 0xa3, 0x3d, 0xf4, 0x68, 0xd8, 0x20, 0x19, 0x92, 0x6c, 0x0d, 0x96, 0xb3, 0xb9, 0x3d, 0x30, 0xff, 0x82, + 0x83, 0xed, 0x2f, 0x7d, 0xce, 0x98, 0x06, 0xfd, 0x35, 0xd9, 0x54, 0x19, 0x94, 0x78, 0x65, 0x17, 0xd7, 0x95, 0xab, + 0x19, 0x58, 0x94, 0x85, 0xb0, 0xbd, 0x66, 0xee, 0x83, 0xf0, 0x5f, 0x62, 0xbb, 0xa0, 0xa5, 0x11, 0xf7, 0x06, 0xe2, + 0x3b, 0xdb, 0xed, 0x28, 0x8a, 0x68, 0x31, 0xd1, 0x57, 0x22, 0x8e, 0x12, 0xeb, 0x3d, 0x70, 0x6c, 0xc7, 0xe9, 0xf5, + 0x3c, 0x28, 0x3b, 0x1b, 0x12, 0x33, 0x7e, 0xc7, 0xec, 0x38, 0xc7, 0x95, 0x82, 0xee, 0xd6, 0x45, 0x98, 0xc1, 0xd0, + 0xff, 0xe5, 0xc1, 0x9c, 0xd8, 0xc1, 0x18, 0x34, 0xd9, 0x80, 0xdb, 0x37, 0xe0, 0x51, 0xd0, 0x0d, 0xb8, 0x7d, 0x1b, + 0xbe, 0x0e, 0x5a, 0xc9, 0x37, 0x07, 0xe8, 0x91, 0x09, 0x33, 0xd2, 0x2a, 0xc1, 0x1b, 0x66, 0x77, 0x93, 0x23, 0x33, + 0x64, 0x15, 0x0e, 0x57, 0x45, 0x42, 0xb9, 0xb1, 0x17, 0x2a, 0x26, 0xd5, 0xe3, 0xfe, 0x65, 0xfc, 0x12, 0xf9, 0x4a, + 0x83, 0xba, 0x71, 0x0c, 0x60, 0x95, 0xd5, 0xd6, 0xbf, 0x3c, 0x38, 0x00, 0xf3, 0x68, 0x60, 0xed, 0xa2, 0x84, 0xce, + 0xd5, 0xa2, 0x00, 0xfe, 0x2a, 0x77, 0xbf, 0x21, 0x19, 0xdc, 0x4e, 0x74, 0x1a, 0xfc, 0x80, 0x84, 0x39, 0x95, 0x92, + 0x7f, 0x35, 0x69, 0xf6, 0x37, 0x2e, 0x88, 0xc3, 0xe8, 0xdc, 0x70, 0x8a, 0x02, 0xf5, 0x84, 0x45, 0xd7, 0x3a, 0xe4, + 0x9e, 0x7e, 0x65, 0xb9, 0x7a, 0xc9, 0xa5, 0x62, 0x39, 0x00, 0xa0, 0x42, 0x3c, 0x98, 0x52, 0x8e, 0x60, 0xeb, 0xd6, + 0x6a, 0xd1, 0x34, 0xfd, 0x6e, 0x15, 0x55, 0x67, 0x8b, 0xa6, 0x34, 0x4f, 0x33, 0xd3, 0x89, 0x6f, 0x33, 0xe9, 0xec, + 0x44, 0xcb, 0x92, 0xbe, 0xc5, 0x4e, 0xc5, 0x7e, 0x68, 0x5a, 0x1f, 0x4a, 0xe2, 0xce, 0x05, 0x77, 0x96, 0x7e, 0x97, + 0x8f, 0x81, 0x2b, 0xf5, 0x6f, 0xac, 0x82, 0x3f, 0x13, 0xac, 0x3c, 0xf2, 0x1a, 0xd5, 0xc7, 0xe9, 0x50, 0x27, 0xdb, + 0x52, 0x2e, 0x94, 0x46, 0x61, 0x1b, 0x27, 0x85, 0xc6, 0x94, 0xd3, 0x6f, 0x4b, 0x5c, 0xbf, 0xba, 0x63, 0xc4, 0x1d, + 0x1d, 0xf2, 0xdf, 0xa5, 0xd2, 0x68, 0x59, 0x22, 0x18, 0x72, 0x3b, 0xf2, 0x67, 0x09, 0x57, 0xb1, 0x19, 0x57, 0xcf, + 0xd5, 0x2c, 0xdb, 0xf0, 0xc4, 0xe9, 0xfd, 0x5c, 0x5e, 0x23, 0xff, 0x2c, 0xc3, 0x5b, 0x86, 0x9f, 0x30, 0xb8, 0x37, + 0x7e, 0xc6, 0xbd, 0x2a, 0xdb, 0xf7, 0xc5, 0xcf, 0xbc, 0xfb, 0xe2, 0x67, 0x3c, 0xde, 0x2e, 0xea, 0xdd, 0x13, 0x77, + 0xa2, 0xb3, 0xa8, 0x15, 0x38, 0x3e, 0x6a, 0x4a, 0x2b, 0xff, 0x4a, 0xb3, 0x35, 0x70, 0x65, 0x13, 0x07, 0xc6, 0x79, + 0x75, 0x11, 0x8a, 0x59, 0x73, 0x46, 0xc3, 0xe1, 0x7f, 0x6b, 0x9d, 0xec, 0xc9, 0x23, 0x8c, 0x14, 0xf2, 0x86, 0x16, + 0xea, 0x01, 0x6c, 0xb8, 0x62, 0xcb, 0x07, 0x90, 0x12, 0x50, 0xb6, 0xfd, 0x7b, 0x5d, 0x54, 0x8e, 0x07, 0xfd, 0xdc, + 0x38, 0x1f, 0xf9, 0xed, 0x93, 0xa2, 0xe4, 0xea, 0xea, 0x42, 0xc8, 0x9d, 0xd6, 0x12, 0x20, 0x4c, 0x9d, 0x6b, 0x1e, + 0xb3, 0x34, 0x99, 0xc5, 0xcb, 0x75, 0xa9, 0x3a, 0x28, 0x0c, 0x57, 0xc7, 0x11, 0x2e, 0xd6, 0xfa, 0x06, 0xfd, 0x1f, + 0x8e, 0xff, 0xe2, 0x96, 0x46, 0x7e, 0x2a, 0x29, 0xd0, 0xe3, 0xdd, 0xbe, 0x36, 0x3b, 0x48, 0xa4, 0x99, 0x43, 0x69, + 0x29, 0x00, 0x58, 0xad, 0xf1, 0x75, 0xed, 0x70, 0xea, 0x89, 0xb0, 0xb3, 0xf9, 0xa6, 0x21, 0x2c, 0x66, 0xa5, 0x05, + 0x8f, 0xee, 0x66, 0x87, 0xe5, 0xa8, 0x93, 0xc5, 0x55, 0xb9, 0xc7, 0x6a, 0xfd, 0xa2, 0x6f, 0x80, 0xb2, 0x32, 0x44, + 0x5b, 0xad, 0xc2, 0x3a, 0xbc, 0x89, 0xf4, 0xae, 0x41, 0x10, 0x96, 0x9e, 0x01, 0x47, 0x8d, 0xf1, 0x36, 0x75, 0x42, + 0xb4, 0x69, 0xbf, 0xe4, 0x58, 0xf7, 0xda, 0x38, 0x7c, 0x45, 0x83, 0xa9, 0xee, 0x6b, 0x1e, 0xb0, 0x99, 0x5d, 0xd9, + 0x91, 0x07, 0xa1, 0x29, 0x75, 0xc6, 0xb9, 0x95, 0x15, 0xed, 0x0e, 0xf8, 0xa2, 0xef, 0x98, 0xe7, 0x5a, 0xd0, 0x6d, + 0xe7, 0x7b, 0xb6, 0x4d, 0x4f, 0xc4, 0xb7, 0x6c, 0x9b, 0x6a, 0x9c, 0xf0, 0x7e, 0x0b, 0x7d, 0xdf, 0x10, 0xd6, 0xf4, + 0xb5, 0xbb, 0xc8, 0xff, 0x42, 0x77, 0x6d, 0x40, 0x4f, 0x03, 0x66, 0x47, 0x63, 0x3e, 0xa8, 0xf5, 0xfa, 0x53, 0xe9, + 0xbf, 0xa0, 0x6d, 0x85, 0x3e, 0x99, 0x5d, 0x60, 0xc5, 0x4a, 0xed, 0x10, 0x1c, 0xfe, 0xc3, 0xc9, 0x24, 0x13, 0x23, + 0x9a, 0xbd, 0x83, 0x1e, 0xab, 0xdc, 0xe7, 0xf7, 0x69, 0x41, 0x15, 0xb3, 0xb4, 0xa6, 0x1a, 0xc5, 0x3f, 0xdc, 0x1b, + 0xc6, 0x3f, 0xdc, 0x50, 0xee, 0xaa, 0x05, 0xbc, 0x7c, 0x59, 0x36, 0x11, 0x7f, 0x5a, 0x97, 0xfe, 0x56, 0xf9, 0xee, + 0x5e, 0x36, 0x49, 0x9a, 0xca, 0xcb, 0xd9, 0xe6, 0xe1, 0x66, 0x53, 0x61, 0xf8, 0xd7, 0x37, 0x06, 0xbb, 0x4d, 0xe6, + 0xfe, 0xf2, 0xc8, 0xdc, 0x5f, 0x3c, 0xfe, 0x6e, 0x2d, 0x8f, 0xe2, 0x1d, 0x47, 0xc7, 0xda, 0x32, 0xc6, 0x8c, 0xfa, + 0xad, 0x02, 0x83, 0x06, 0x45, 0x2e, 0x3c, 0x6f, 0x87, 0xea, 0xf4, 0x72, 0xf6, 0x47, 0x61, 0xb2, 0x90, 0x4a, 0xcc, + 0x6c, 0xa3, 0xd2, 0xfa, 0x38, 0xe9, 0x4c, 0x50, 0x60, 0xeb, 0x3b, 0xfc, 0xb8, 0xee, 0x46, 0xb6, 0xfc, 0xc2, 0xf3, + 0x34, 0xce, 0xb1, 0x3d, 0x5b, 0x64, 0x2c, 0xd6, 0xc4, 0x99, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0xcf, 0xb9, 0x9c, 0xb2, + 0x22, 0x2c, 0xd0, 0xf2, 0x5b, 0x9d, 0x15, 0x70, 0x9b, 0x63, 0x3a, 0xc3, 0x69, 0x69, 0x39, 0xa0, 0x22, 0x68, 0x0d, + 0x74, 0x46, 0x33, 0xa6, 0xa6, 0x22, 0x05, 0xc3, 0x97, 0x28, 0x2d, 0xdd, 0xa9, 0x0e, 0x0e, 0xf6, 0xc3, 0x40, 0xeb, + 0x2f, 0xc0, 0x07, 0xdd, 0xcf, 0x41, 0xfd, 0x25, 0x38, 0x06, 0x55, 0x5d, 0x33, 0xb4, 0x64, 0x9b, 0x3e, 0x34, 0x2a, + 0xfa, 0xc2, 0xee, 0x31, 0x47, 0xeb, 0x75, 0x6c, 0x46, 0x1d, 0x8c, 0x39, 0xcb, 0xd2, 0x00, 0x7f, 0x61, 0xf7, 0x71, + 0xe9, 0xb6, 0xae, 0xbd, 0xac, 0xf5, 0x22, 0x06, 0xe2, 0x36, 0x0f, 0x70, 0xd5, 0x49, 0xbc, 0x5c, 0x63, 0x51, 0xf0, + 0x09, 0xe0, 0xe8, 0x2f, 0xec, 0x3e, 0xb6, 0xed, 0x79, 0xae, 0x82, 0x68, 0xe9, 0x40, 0x1f, 0x79, 0xc9, 0xfe, 0x32, + 0x58, 0x81, 0x63, 0xa0, 0xeb, 0x0e, 0x49, 0xad, 0x5c, 0x25, 0x42, 0x22, 0xb4, 0xfe, 0x77, 0xa7, 0x82, 0x17, 0xfe, + 0x39, 0xa7, 0x6a, 0x16, 0xb7, 0x1b, 0x95, 0x18, 0x54, 0xa8, 0x2c, 0x48, 0x3e, 0x86, 0xdc, 0xed, 0x3e, 0xeb, 0xfd, + 0xe0, 0xe9, 0xcc, 0x16, 0xd4, 0x36, 0x1a, 0xa7, 0xfa, 0x17, 0xaa, 0xee, 0xa0, 0x66, 0xaa, 0xaa, 0xb8, 0xf7, 0x31, + 0x04, 0xc0, 0x83, 0xb5, 0x0c, 0xd5, 0x0e, 0xa1, 0x6b, 0x67, 0xa6, 0x3a, 0xa6, 0x24, 0x5c, 0xba, 0x39, 0xc4, 0xdc, + 0x07, 0xa3, 0x5a, 0x03, 0x1a, 0x5a, 0x04, 0x33, 0x96, 0x87, 0x7c, 0x1c, 0xca, 0xad, 0x33, 0x54, 0xe8, 0x33, 0x34, + 0xf2, 0x40, 0xfe, 0x8d, 0x33, 0x93, 0x69, 0x68, 0x68, 0xde, 0x52, 0x1f, 0x80, 0x76, 0x75, 0x2d, 0x0e, 0xf9, 0x2b, + 0x5a, 0x3a, 0xef, 0x99, 0x45, 0x17, 0xb5, 0x61, 0x85, 0xba, 0x1d, 0xb4, 0x8e, 0x61, 0x4a, 0xcc, 0x14, 0x58, 0x3b, + 0xbd, 0x0f, 0x77, 0x76, 0xb5, 0x61, 0x11, 0xb9, 0x69, 0x11, 0x07, 0x93, 0x90, 0xa2, 0x25, 0x0f, 0x29, 0x16, 0x60, + 0x07, 0x59, 0xac, 0xcb, 0xf1, 0x33, 0x7f, 0x39, 0x6a, 0x56, 0xd2, 0xbb, 0x1d, 0x0c, 0x81, 0xcb, 0x57, 0x60, 0x1b, + 0x8a, 0xb9, 0x23, 0x2c, 0x3c, 0xd4, 0x9e, 0x7e, 0xde, 0xba, 0xcd, 0xcd, 0x82, 0xb8, 0x15, 0x18, 0xd3, 0x70, 0xe9, + 0xcd, 0xc2, 0x77, 0x2a, 0xb7, 0x0e, 0x87, 0xf6, 0x9a, 0xb0, 0x32, 0x5e, 0x0d, 0x73, 0xb2, 0x71, 0xf4, 0x7c, 0xdf, + 0xc6, 0xf3, 0xef, 0x05, 0x2b, 0xee, 0xaf, 0x19, 0xd8, 0x58, 0x0b, 0x70, 0x37, 0xae, 0x96, 0xa1, 0x32, 0x90, 0xef, + 0x0b, 0xcd, 0xba, 0xac, 0xf1, 0x77, 0xa3, 0x62, 0xac, 0xf5, 0x3d, 0xa5, 0xa7, 0xad, 0x31, 0xdb, 0x85, 0x7d, 0xd3, + 0x75, 0x93, 0xf5, 0xb4, 0x22, 0xae, 0x82, 0xb4, 0xbd, 0x5b, 0xc0, 0x85, 0xef, 0x0f, 0x3b, 0xc8, 0x87, 0x9b, 0xaa, + 0x1b, 0x48, 0x82, 0x6b, 0x3f, 0xf1, 0xed, 0xa9, 0xee, 0xb2, 0xd6, 0xfd, 0xf6, 0x54, 0x6b, 0x97, 0x85, 0xda, 0x90, + 0x08, 0xdb, 0x7e, 0x4a, 0xff, 0x69, 0xb9, 0x5e, 0xa3, 0x35, 0x0c, 0xef, 0x3d, 0xef, 0x85, 0xe1, 0x7b, 0x67, 0xa1, + 0x18, 0xc1, 0x45, 0xee, 0x75, 0x26, 0x1c, 0x21, 0xaf, 0x46, 0xf0, 0x9e, 0x6f, 0x0d, 0xe1, 0x3d, 0xf7, 0x9c, 0x5e, + 0x41, 0x6a, 0x9a, 0xe4, 0x2c, 0x75, 0xf4, 0x13, 0x19, 0x24, 0xd4, 0x7c, 0xdc, 0x6b, 0x4e, 0xb8, 0xfa, 0x1c, 0x03, + 0xff, 0x85, 0x47, 0x0b, 0xa5, 0x44, 0x8e, 0x79, 0x3e, 0x5f, 0x28, 0x2c, 0xf5, 0xe8, 0x97, 0x63, 0x91, 0xab, 0xe6, + 0x98, 0xce, 0x78, 0x76, 0x1f, 0x2f, 0x78, 0x73, 0x26, 0x72, 0x21, 0xe7, 0x34, 0x61, 0x58, 0xde, 0x4b, 0xc5, 0x66, + 0xcd, 0x05, 0xc7, 0xcf, 0x59, 0xf6, 0x95, 0x29, 0x9e, 0x50, 0xfc, 0x56, 0x8c, 0x84, 0x12, 0xf8, 0xf5, 0xdd, 0xfd, + 0x84, 0xe5, 0xf8, 0xf7, 0xd1, 0x22, 0x57, 0x0b, 0x2c, 0x69, 0x2e, 0x9b, 0x92, 0x15, 0x7c, 0xdc, 0x6b, 0x36, 0xe7, + 0x05, 0x9f, 0xd1, 0xe2, 0xbe, 0x99, 0x88, 0x4c, 0x14, 0xf1, 0x7f, 0xb5, 0x8e, 0xe9, 0xa3, 0xf1, 0x49, 0x4f, 0x15, + 0x34, 0x97, 0x1c, 0x16, 0x26, 0xa6, 0x59, 0xb6, 0x77, 0xdc, 0x6d, 0xcd, 0xe4, 0xbe, 0xb9, 0xf0, 0xa3, 0xb9, 0x5a, + 0x7f, 0xc6, 0x1f, 0x04, 0x8c, 0x32, 0x1a, 0xa9, 0xdc, 0x0e, 0x72, 0x99, 0x2c, 0x0a, 0x29, 0x8a, 0x78, 0x2e, 0x78, + 0xae, 0x58, 0xd1, 0x1b, 0x89, 0x22, 0x65, 0x45, 0xb3, 0xa0, 0x29, 0x5f, 0xc8, 0xf8, 0x64, 0x7e, 0xd7, 0xab, 0xf7, + 0x60, 0xf2, 0xe3, 0x5c, 0xe4, 0xac, 0x07, 0xfc, 0xc6, 0xa4, 0x10, 0x8b, 0x3c, 0xb5, 0xc3, 0x58, 0xe4, 0x92, 0xa9, + 0xde, 0x9c, 0xa6, 0x60, 0x07, 0x1c, 0x9f, 0xcd, 0xef, 0x7a, 0x7a, 0xd6, 0xb7, 0x8c, 0x4f, 0xa6, 0x2a, 0xee, 0xb6, + 0x5a, 0xe6, 0x5b, 0xf2, 0x7f, 0x58, 0xdc, 0xee, 0x44, 0x9d, 0xee, 0xfc, 0x0e, 0x38, 0x78, 0xc5, 0x8a, 0x26, 0xc0, + 0x02, 0x2a, 0xb5, 0xa3, 0xd6, 0xa3, 0xe3, 0x87, 0x90, 0x01, 0x36, 0x0e, 0x4d, 0x3d, 0x21, 0x30, 0x76, 0x8f, 0x17, + 0xf3, 0x39, 0x2b, 0xc0, 0x8b, 0xbe, 0x37, 0xa3, 0xc5, 0x84, 0xe7, 0xcd, 0x42, 0x37, 0xda, 0x3c, 0x9b, 0xdf, 0xad, + 0x61, 0x3e, 0xb1, 0x31, 0x5b, 0xb5, 0xd3, 0xb2, 0x5f, 0x4b, 0x6f, 0x88, 0x3a, 0x26, 0x4d, 0x5c, 0x4c, 0x46, 0x34, + 0x6c, 0x77, 0x1e, 0x62, 0xf7, 0xbf, 0xa8, 0x83, 0x3c, 0xb0, 0x35, 0xd3, 0x45, 0xa1, 0x6f, 0x51, 0xe3, 0xb6, 0x34, + 0xcd, 0x4e, 0xc5, 0x57, 0x56, 0xb8, 0x56, 0xf5, 0xc7, 0x72, 0x6b, 0xde, 0xff, 0x49, 0xa3, 0x9f, 0xf1, 0x84, 0xc2, + 0x1a, 0x68, 0xe4, 0x18, 0x68, 0x79, 0x10, 0x66, 0x3a, 0x5c, 0xde, 0xf2, 0x54, 0x4d, 0xe3, 0x76, 0xab, 0xf5, 0x43, + 0xb5, 0x62, 0xbd, 0xa9, 0x01, 0x5d, 0xbb, 0x60, 0xb3, 0xda, 0x3a, 0xce, 0x68, 0x89, 0x6d, 0xcb, 0xb9, 0xb0, 0x4b, + 0x5e, 0xb0, 0x4c, 0x47, 0x93, 0x59, 0x5b, 0x94, 0xdb, 0x1a, 0x27, 0xcf, 0xa7, 0xac, 0xe0, 0xaa, 0x57, 0xff, 0xaa, + 0x3a, 0xde, 0x5e, 0xfd, 0xb5, 0x91, 0x43, 0x97, 0xa6, 0x86, 0xbd, 0xf4, 0xbc, 0x82, 0x8f, 0xed, 0xd5, 0xff, 0x4a, + 0x8b, 0x70, 0x03, 0x31, 0xb1, 0x5f, 0x03, 0xad, 0xbd, 0x39, 0x17, 0x60, 0x92, 0x39, 0xc4, 0xdf, 0x80, 0x42, 0x42, + 0xb3, 0x24, 0x84, 0x11, 0xed, 0x35, 0xf7, 0x8e, 0x0b, 0x36, 0x43, 0x0e, 0x10, 0xd1, 0xc3, 0x6e, 0xc1, 0x66, 0xeb, + 0x48, 0x57, 0x5f, 0x6a, 0x14, 0xa1, 0x19, 0x9f, 0xe4, 0x71, 0xc2, 0x00, 0x7d, 0xd7, 0x11, 0xcb, 0x15, 0x57, 0xf7, + 0xcd, 0x42, 0xdc, 0x2e, 0x53, 0x2e, 0xe7, 0x19, 0xbd, 0x8f, 0xc7, 0x19, 0xbb, 0xeb, 0xe9, 0x52, 0x4d, 0xae, 0xd8, + 0x4c, 0xda, 0xb2, 0x3d, 0x48, 0x6f, 0xa6, 0xc6, 0x6c, 0x02, 0xa0, 0x27, 0x6e, 0x37, 0xf7, 0x4f, 0x74, 0x2c, 0xf7, + 0x18, 0x95, 0xac, 0x29, 0x16, 0x6a, 0xaf, 0x25, 0x7b, 0x33, 0x9e, 0x37, 0xed, 0x40, 0x4e, 0x5a, 0xf3, 0xbb, 0xde, + 0x36, 0xe4, 0xbd, 0xfe, 0x23, 0x76, 0x37, 0xa7, 0x79, 0xca, 0xd2, 0xa5, 0x57, 0xad, 0x03, 0xf5, 0xfc, 0x52, 0x71, + 0xae, 0xa6, 0x4d, 0x6d, 0xeb, 0x15, 0x76, 0x72, 0xf4, 0x0d, 0xd4, 0x7a, 0xd4, 0xc2, 0xe6, 0xff, 0xa3, 0x36, 0xf2, + 0x2b, 0xef, 0x41, 0xd8, 0x25, 0x3e, 0xbe, 0x6f, 0xc2, 0xdf, 0x25, 0xf8, 0x16, 0xf1, 0x84, 0x66, 0x16, 0x22, 0x33, + 0x9e, 0xa6, 0x59, 0x6d, 0x44, 0x17, 0x5e, 0x67, 0x6d, 0xb4, 0x84, 0xf9, 0xc7, 0xad, 0xbd, 0xd6, 0x9e, 0x9e, 0x8b, + 0xdd, 0xe6, 0x27, 0x27, 0x0f, 0x8f, 0x1f, 0xb1, 0x5e, 0xc6, 0x73, 0x56, 0x9b, 0xea, 0x77, 0x41, 0xed, 0x37, 0xdc, + 0xb1, 0x0d, 0xb7, 0xf7, 0xda, 0x7b, 0x27, 0xad, 0x1f, 0xdc, 0x6e, 0xcd, 0xd8, 0x58, 0xc5, 0xed, 0xd3, 0xf9, 0x5d, + 0x7d, 0xfb, 0x9e, 0xb9, 0xa6, 0x6f, 0x0b, 0x3a, 0x8f, 0x73, 0x01, 0x7f, 0x7a, 0xb0, 0xc9, 0xc6, 0x99, 0xb8, 0x8d, + 0xa7, 0x3c, 0x4d, 0x59, 0x6e, 0x0a, 0x94, 0x89, 0x2c, 0xcb, 0xf8, 0x5c, 0x72, 0xb3, 0x1a, 0x16, 0x77, 0xbb, 0x1b, + 0x50, 0xf5, 0x07, 0x74, 0xec, 0x0d, 0xa8, 0x5b, 0x0d, 0xa8, 0xea, 0xdf, 0x1f, 0x61, 0x67, 0x63, 0xae, 0xba, 0x54, + 0xaf, 0x86, 0x49, 0x7f, 0x2d, 0xa4, 0x02, 0x98, 0x97, 0x46, 0x1a, 0x40, 0xc5, 0x9b, 0x23, 0xa6, 0x6e, 0x19, 0xcb, + 0xbf, 0x3d, 0x88, 0x8b, 0x58, 0xe4, 0xd9, 0xbd, 0xf9, 0x5c, 0xfa, 0x5d, 0xd2, 0x85, 0x12, 0xeb, 0x68, 0xc4, 0x73, + 0x5a, 0xdc, 0xdf, 0x48, 0x96, 0x4b, 0x51, 0xdc, 0x88, 0xf1, 0x78, 0xf9, 0x2d, 0xd2, 0xf2, 0x10, 0xad, 0x23, 0xc9, + 0xf3, 0x49, 0xc6, 0x0c, 0x51, 0xd2, 0x88, 0x60, 0x89, 0xb9, 0x69, 0x57, 0x37, 0x59, 0x1b, 0xb4, 0xbf, 0xf3, 0x74, + 0xbb, 0xc3, 0x38, 0x6e, 0xde, 0xb2, 0xd1, 0x17, 0xae, 0x0c, 0x9e, 0x35, 0xe5, 0x2d, 0x78, 0xbc, 0xe8, 0x65, 0x98, + 0xb3, 0x62, 0xe9, 0x68, 0x78, 0xcb, 0xa3, 0x3a, 0x51, 0x92, 0xf1, 0x19, 0x55, 0xcc, 0xa3, 0x54, 0x65, 0x27, 0x93, + 0x82, 0xa7, 0xdb, 0x38, 0xd2, 0x83, 0xe4, 0xa6, 0x33, 0xa8, 0x82, 0x9e, 0x16, 0xb3, 0x5c, 0xc6, 0x05, 0x9b, 0x33, + 0xaa, 0xc2, 0x63, 0xdc, 0x1e, 0x17, 0xa8, 0x37, 0xa1, 0xf3, 0x18, 0xf0, 0xc2, 0x75, 0xd9, 0x86, 0x25, 0xd8, 0xde, + 0xae, 0xeb, 0xcf, 0xf8, 0x8b, 0xd4, 0x87, 0x97, 0xa2, 0xa3, 0x26, 0x84, 0x1f, 0x63, 0x45, 0xb9, 0xc5, 0x79, 0xae, + 0x11, 0x56, 0xaf, 0xcf, 0xe6, 0x26, 0xf5, 0x8f, 0xa0, 0x93, 0x56, 0xcb, 0xf5, 0xd3, 0x34, 0x75, 0xe2, 0x76, 0xd4, + 0x65, 0xb3, 0x5d, 0xe4, 0xa1, 0x4e, 0x0b, 0xdb, 0x9d, 0xf9, 0xdd, 0x9e, 0xfe, 0xa7, 0xb5, 0xd7, 0xda, 0xa6, 0x7d, + 0xdb, 0xcb, 0x74, 0x8c, 0x1c, 0x62, 0x29, 0x31, 0x8f, 0xdb, 0x6c, 0xd6, 0x5b, 0x48, 0x38, 0xe7, 0x34, 0x69, 0xd6, + 0xe7, 0xe7, 0x5a, 0xcf, 0x04, 0xd0, 0x88, 0xf2, 0x1c, 0x8e, 0x15, 0x73, 0xb4, 0x42, 0x1f, 0x52, 0x80, 0x1d, 0xf8, + 0xce, 0x46, 0xeb, 0xc3, 0x6a, 0xed, 0x55, 0x03, 0x83, 0x7f, 0xd6, 0x9f, 0x2b, 0xc6, 0xf4, 0x05, 0xf3, 0x04, 0x03, + 0xde, 0x88, 0xba, 0xab, 0x96, 0x15, 0x06, 0x52, 0x55, 0xc9, 0x28, 0xda, 0x95, 0x62, 0x46, 0xef, 0x8c, 0x4f, 0xc5, + 0x8c, 0xe7, 0x60, 0xb1, 0x85, 0xb0, 0xf2, 0x6c, 0xdb, 0xa7, 0x7e, 0x43, 0xa9, 0x0a, 0xa1, 0xe1, 0xc3, 0x4e, 0xd4, + 0xed, 0x22, 0xdc, 0xc2, 0x9d, 0x6e, 0xd7, 0x13, 0x46, 0xc6, 0x6a, 0x57, 0xd1, 0x5d, 0x25, 0xf3, 0x1d, 0x25, 0x8f, + 0x74, 0xa3, 0x47, 0xed, 0x56, 0x0b, 0x6b, 0xbf, 0xf1, 0xb2, 0x30, 0xcb, 0x77, 0x34, 0xdb, 0x6e, 0xb5, 0xa0, 0x59, + 0xf8, 0x63, 0xe7, 0xf5, 0x0b, 0x59, 0xb6, 0xe2, 0x16, 0x6e, 0xc7, 0x6d, 0xdc, 0x89, 0x3b, 0xf8, 0x38, 0x3e, 0xc6, + 0x27, 0xf1, 0x09, 0xee, 0xc6, 0x5d, 0x7c, 0x1a, 0x9f, 0xe2, 0x87, 0xf1, 0x43, 0x7c, 0x16, 0x9f, 0xe1, 0x47, 0xf1, + 0x23, 0x7c, 0x19, 0xb7, 0x5b, 0xf8, 0x71, 0xdc, 0x6e, 0xe3, 0xab, 0xb8, 0xdd, 0xc1, 0x4f, 0xe2, 0xf6, 0x31, 0x7e, + 0x1a, 0xb7, 0x4f, 0xf0, 0xb3, 0xb8, 0xdd, 0xc5, 0x14, 0x72, 0x47, 0x90, 0x9b, 0x40, 0x6e, 0x0a, 0xb9, 0x0c, 0x72, + 0xc7, 0x71, 0xbb, 0xbb, 0xc6, 0xd2, 0xc4, 0x9a, 0x08, 0x5a, 0xed, 0xce, 0xf1, 0x49, 0xf7, 0xf4, 0xe1, 0xd9, 0xa3, + 0xcb, 0xc7, 0x57, 0x4f, 0x9e, 0x3e, 0x0b, 0x86, 0x78, 0xa4, 0x5d, 0x3e, 0xa4, 0x1c, 0xf0, 0x83, 0x76, 0x77, 0x88, + 0x6f, 0xdc, 0x67, 0xc8, 0x0f, 0x3a, 0x27, 0x2d, 0x74, 0x71, 0x71, 0x32, 0x6c, 0x94, 0xb9, 0xef, 0xb5, 0xa7, 0x49, + 0x95, 0x45, 0x08, 0x09, 0x21, 0x07, 0xe1, 0x7b, 0x5d, 0xef, 0x3d, 0x0b, 0x79, 0x54, 0xa0, 0x83, 0x03, 0xfd, 0x63, + 0xe2, 0x7e, 0x8c, 0xdc, 0x0f, 0xea, 0x2d, 0xd2, 0x1d, 0x0d, 0xad, 0xab, 0xb1, 0x2a, 0x0d, 0xfd, 0x4b, 0x1b, 0x9a, + 0x3d, 0x6e, 0xad, 0xd9, 0xff, 0x2b, 0x30, 0xd6, 0x2a, 0xe4, 0xc4, 0x68, 0x84, 0xba, 0x7d, 0x46, 0x96, 0x45, 0xdc, + 0xe9, 0x76, 0x0f, 0x7e, 0x19, 0xf0, 0x41, 0x7b, 0x38, 0x3c, 0x6c, 0x3f, 0xc4, 0x93, 0x32, 0xa1, 0x63, 0x12, 0x46, + 0x65, 0xc2, 0xb1, 0x49, 0xa0, 0xb1, 0xa9, 0x0d, 0x49, 0x27, 0x3a, 0x09, 0x4a, 0xac, 0x63, 0xdd, 0xf6, 0x43, 0xd3, + 0xf6, 0x23, 0x30, 0xa3, 0xd2, 0xcd, 0xdb, 0xa6, 0xcf, 0xcf, 0x4f, 0x56, 0xb6, 0x51, 0x3c, 0x89, 0x6d, 0x6b, 0x2e, + 0xf1, 0x64, 0x38, 0xc4, 0x23, 0x9d, 0xd8, 0xad, 0x12, 0x4f, 0x87, 0x43, 0xdb, 0xd5, 0x23, 0xdd, 0xd5, 0xc3, 0x2a, + 0xeb, 0x6c, 0x38, 0xd4, 0x5d, 0x22, 0xeb, 0x34, 0x2f, 0xd5, 0xde, 0xd7, 0x52, 0x71, 0xc1, 0xcf, 0x3b, 0xdd, 0x6e, + 0x1f, 0x30, 0x4c, 0x1b, 0xc3, 0x3a, 0x18, 0xdd, 0x7a, 0x30, 0xba, 0x87, 0xdf, 0xfd, 0x11, 0x8d, 0x6f, 0x68, 0x09, + 0xa4, 0x7e, 0xf0, 0x5f, 0x41, 0x43, 0x69, 0x98, 0xeb, 0x3f, 0x13, 0xf3, 0x67, 0x84, 0x1a, 0x5f, 0x29, 0x80, 0x1b, + 0x54, 0x31, 0x4e, 0x97, 0xaa, 0x7b, 0xfc, 0x42, 0xc1, 0xb7, 0x65, 0x2a, 0x33, 0xda, 0x5f, 0x4d, 0x6f, 0x47, 0xab, + 0xa9, 0xfc, 0x8a, 0xfe, 0x0c, 0xff, 0x94, 0x87, 0xe1, 0xa0, 0xd9, 0x88, 0xd8, 0x9f, 0x29, 0x38, 0xd1, 0xf4, 0xe3, + 0x94, 0x4d, 0x50, 0x7f, 0xf0, 0xa7, 0xc4, 0xc3, 0x86, 0x97, 0xf1, 0xc3, 0x76, 0x0a, 0xb8, 0xd8, 0x6c, 0x26, 0x86, + 0x3f, 0xa0, 0x3e, 0xea, 0xff, 0x29, 0x0f, 0xff, 0x44, 0x0f, 0x8e, 0xaa, 0xb9, 0xfc, 0x2e, 0xec, 0x16, 0xae, 0xe2, + 0xee, 0x1c, 0x96, 0x5b, 0x98, 0xe1, 0x76, 0x93, 0x41, 0x94, 0x32, 0xf0, 0xc1, 0x26, 0xa1, 0x68, 0xf0, 0xa3, 0xe3, + 0x16, 0xfa, 0xa1, 0xdd, 0x01, 0xad, 0x42, 0x53, 0x1e, 0x6e, 0x6f, 0xfa, 0xa2, 0x79, 0x8c, 0x1f, 0x35, 0x0b, 0xdc, + 0x46, 0xb8, 0xd9, 0x76, 0xea, 0xde, 0x41, 0x1e, 0xb6, 0x10, 0xce, 0xc3, 0x33, 0xf8, 0xe7, 0x04, 0x0d, 0xab, 0x0d, + 0x79, 0x4d, 0x37, 0x7b, 0x07, 0x87, 0x51, 0x12, 0xe6, 0x0d, 0x7e, 0x74, 0xda, 0x42, 0x3f, 0x9c, 0xea, 0x8e, 0xd8, + 0xa1, 0xda, 0xd1, 0x95, 0xc0, 0x27, 0x4d, 0x01, 0x1d, 0xb5, 0xca, 0x7e, 0x64, 0xd8, 0x45, 0x58, 0x86, 0xc7, 0xf0, + 0x4f, 0xdb, 0xef, 0xe7, 0xd7, 0xad, 0x7e, 0xf4, 0xbc, 0xdb, 0x38, 0xea, 0x1a, 0xff, 0xd3, 0xdc, 0x5c, 0x06, 0x37, + 0xd8, 0x45, 0x5b, 0xdf, 0x62, 0xb5, 0x8f, 0xe0, 0x03, 0x61, 0x75, 0x48, 0x72, 0xcc, 0x0e, 0xc1, 0x71, 0x15, 0xec, + 0x35, 0xf2, 0xf3, 0xe3, 0x5e, 0xde, 0x68, 0x20, 0x90, 0x0f, 0x0f, 0x49, 0xbb, 0xa9, 0x9a, 0x0c, 0xc3, 0xef, 0x06, + 0x29, 0xa3, 0xa1, 0xc9, 0xaa, 0xd7, 0x2b, 0xdb, 0xab, 0xb9, 0xf2, 0x76, 0xd8, 0x01, 0x62, 0x62, 0x3f, 0x54, 0x4d, + 0x86, 0x8e, 0x64, 0x23, 0x54, 0xe7, 0xac, 0x7f, 0x1a, 0xb7, 0x90, 0xc6, 0xce, 0xbc, 0x1f, 0xb2, 0x26, 0x87, 0xf4, + 0x4e, 0x1c, 0xf2, 0xa6, 0x82, 0x5f, 0x27, 0x1e, 0xb4, 0x24, 0xe0, 0x5d, 0xe5, 0x86, 0x53, 0x1c, 0x75, 0xba, 0x5d, + 0x2c, 0x09, 0x8f, 0x26, 0xfa, 0x57, 0x4e, 0x78, 0x34, 0xd2, 0xbf, 0x04, 0x29, 0xe1, 0x65, 0x7a, 0xc7, 0x05, 0xf1, + 0x56, 0x55, 0xa7, 0x50, 0x58, 0xd0, 0x02, 0x1d, 0x75, 0xdc, 0x7d, 0x38, 0x9e, 0xba, 0x39, 0x80, 0xfc, 0x5f, 0x68, + 0x53, 0x48, 0xd1, 0x2c, 0x70, 0x46, 0xe8, 0x45, 0xd4, 0xed, 0x4f, 0x8f, 0xc2, 0x4e, 0x53, 0x34, 0x0b, 0x14, 0x4f, + 0x8f, 0x74, 0x4d, 0x9c, 0x90, 0x2b, 0x6a, 0x5a, 0xc3, 0x53, 0xb8, 0xc4, 0x4c, 0x48, 0x72, 0x78, 0xda, 0x6a, 0x44, + 0x5d, 0x84, 0x07, 0xc9, 0xaa, 0x85, 0xb3, 0xd5, 0xaa, 0x85, 0xa9, 0xbf, 0x0c, 0xd2, 0x01, 0xa4, 0x54, 0x51, 0x6d, + 0x06, 0xa5, 0xe9, 0xf3, 0x50, 0xc1, 0x85, 0xbc, 0x02, 0x37, 0x17, 0x05, 0x0e, 0x38, 0x31, 0xb7, 0x37, 0x61, 0x48, + 0x87, 0xe5, 0x1b, 0xfb, 0x4a, 0xab, 0x2b, 0xe9, 0xd6, 0xd5, 0x8e, 0xfc, 0x57, 0x19, 0xfe, 0x2e, 0xb0, 0x49, 0xab, + 0x8a, 0xbd, 0xa6, 0xdb, 0xc5, 0x7e, 0xa5, 0x5b, 0xc5, 0xde, 0xec, 0x28, 0x76, 0xbd, 0x5d, 0xec, 0xa3, 0xf0, 0x54, + 0x6c, 0xfc, 0x87, 0xe3, 0xd3, 0x56, 0xe3, 0x18, 0x90, 0xf5, 0xf8, 0xb4, 0x55, 0x15, 0x7a, 0x40, 0xab, 0xb5, 0x52, + 0xe4, 0x0b, 0x35, 0x4e, 0x06, 0xdc, 0x79, 0x3b, 0xeb, 0x85, 0x33, 0xbe, 0xd6, 0xa5, 0x63, 0xf5, 0xa0, 0x0b, 0x46, + 0x1c, 0x52, 0x53, 0x3b, 0x35, 0x38, 0x1d, 0xf6, 0xa7, 0x2c, 0x6c, 0x40, 0x2a, 0x8a, 0xc7, 0xca, 0xfe, 0x42, 0xe5, + 0x5d, 0xee, 0x47, 0x01, 0x49, 0x9d, 0x21, 0xc2, 0x82, 0x34, 0xd4, 0xe0, 0x78, 0xa8, 0xcf, 0xbb, 0x02, 0x7e, 0x9f, + 0xe8, 0xdf, 0xa5, 0x26, 0xc5, 0x7a, 0x22, 0x4c, 0x6f, 0x47, 0x41, 0x5f, 0x92, 0xd7, 0x34, 0xd4, 0xc6, 0xe5, 0x28, + 0x2e, 0x33, 0xe4, 0x57, 0xc8, 0x78, 0x53, 0x66, 0x48, 0x72, 0x25, 0xed, 0x6f, 0xbc, 0x2c, 0x62, 0x30, 0x34, 0xc1, + 0x93, 0x18, 0x8c, 0x4c, 0xf0, 0x28, 0x96, 0xe0, 0x08, 0x41, 0x63, 0xe6, 0x99, 0xaf, 0x5f, 0x5a, 0xd5, 0x95, 0xbe, + 0x6e, 0x25, 0x1a, 0x4b, 0x7b, 0x0c, 0x4e, 0x8a, 0x8f, 0x22, 0x84, 0xbf, 0x0d, 0x85, 0x30, 0x83, 0x36, 0x19, 0xc2, + 0x3c, 0x2a, 0x08, 0xa4, 0x61, 0x1e, 0x4d, 0x08, 0x83, 0x26, 0x79, 0x34, 0x22, 0x6c, 0xd0, 0xf1, 0xd0, 0xe4, 0xa9, + 0x86, 0x1d, 0x00, 0x87, 0xd7, 0x6f, 0xb0, 0x95, 0x69, 0x1c, 0xae, 0xc6, 0xa1, 0x09, 0x49, 0x58, 0x1e, 0xc2, 0x2c, + 0x60, 0x73, 0xea, 0x9f, 0x9d, 0x2a, 0xee, 0x23, 0x8f, 0xa8, 0xa6, 0xde, 0x9f, 0x81, 0xac, 0x86, 0x0f, 0x96, 0x6c, + 0x8d, 0xf7, 0x1e, 0x2c, 0xe5, 0xfa, 0x07, 0xf8, 0x93, 0xdb, 0x3f, 0x4a, 0x9f, 0x7e, 0x6b, 0xf4, 0x39, 0x86, 0x62, + 0x3b, 0x4a, 0xa1, 0xcf, 0xce, 0x0f, 0x2e, 0x27, 0xcb, 0xbb, 0x38, 0x48, 0x69, 0xf1, 0x25, 0xc0, 0x9f, 0xe2, 0x20, + 0x03, 0x46, 0x30, 0xc0, 0x1f, 0xe3, 0xa0, 0x60, 0x01, 0xfe, 0x23, 0x0e, 0x46, 0xd9, 0x22, 0xc0, 0x1f, 0xe2, 0x60, + 0x52, 0x04, 0xf8, 0x3d, 0x68, 0x29, 0x53, 0xbe, 0x98, 0x05, 0xf8, 0xf7, 0x38, 0x90, 0xda, 0x0d, 0x00, 0x5f, 0xc6, + 0x01, 0x63, 0x01, 0x7e, 0x17, 0x07, 0x22, 0x0b, 0xf0, 0x75, 0x1c, 0x88, 0x22, 0xc0, 0x8f, 0xe3, 0xa0, 0xa0, 0x01, + 0xbe, 0x8a, 0x03, 0x28, 0x34, 0x09, 0xf0, 0x93, 0x38, 0x80, 0x96, 0x65, 0x80, 0xdf, 0xc6, 0x01, 0xcf, 0x03, 0xfc, + 0x5b, 0x1c, 0xa8, 0x45, 0xf1, 0xf7, 0x42, 0x70, 0x19, 0xe0, 0xa7, 0x71, 0x30, 0xe5, 0x01, 0x7e, 0x13, 0x07, 0x85, + 0x08, 0xf0, 0xeb, 0x38, 0xa0, 0x59, 0x80, 0x5f, 0xc5, 0x41, 0xc6, 0x02, 0xfc, 0x6b, 0x1c, 0xa4, 0x2c, 0xc0, 0x2f, + 0xe3, 0xe0, 0x9e, 0x65, 0x99, 0x08, 0xf0, 0xb3, 0x38, 0x60, 0x79, 0x80, 0x7f, 0x89, 0x83, 0x64, 0x1a, 0xe0, 0x9f, + 0xe2, 0x80, 0x16, 0x5f, 0x64, 0x80, 0x9f, 0xc7, 0x01, 0xa3, 0x01, 0x7e, 0x61, 0x3a, 0x9a, 0x04, 0xf8, 0xe7, 0x38, + 0xb8, 0x9d, 0x06, 0x6b, 0x9c, 0xe7, 0x64, 0xf9, 0x9a, 0x27, 0xec, 0x0f, 0x16, 0x07, 0xe3, 0xd6, 0xf8, 0x6c, 0x3c, + 0x0e, 0x30, 0xcd, 0x15, 0xff, 0x7b, 0xc1, 0x6e, 0x9f, 0x2a, 0x48, 0xa4, 0x6c, 0x94, 0x3e, 0x0c, 0x30, 0xfd, 0x7b, + 0x41, 0xe3, 0x60, 0x3c, 0xd6, 0x05, 0xfe, 0x5e, 0xd0, 0x19, 0x2d, 0xde, 0xb2, 0x38, 0x78, 0x38, 0x1e, 0x8f, 0xd3, + 0x93, 0x00, 0xd3, 0x7f, 0x16, 0x1f, 0x75, 0x0b, 0xba, 0xc0, 0x88, 0xf1, 0x09, 0xd4, 0xed, 0x8e, 0xbb, 0x69, 0x12, + 0xe0, 0x11, 0x97, 0x7f, 0x2f, 0xe0, 0x7b, 0xcc, 0x4e, 0x92, 0x93, 0x00, 0x8f, 0x32, 0x9a, 0x7c, 0x89, 0x83, 0x96, + 0xfe, 0x95, 0xff, 0xc2, 0xd2, 0xd7, 0x33, 0xa1, 0x75, 0xf8, 0x63, 0x36, 0x4a, 0xd2, 0x00, 0xeb, 0xc1, 0x8c, 0xe1, + 0xef, 0x57, 0xfe, 0x8e, 0xa9, 0x38, 0x38, 0xa3, 0x9d, 0x11, 0xeb, 0x04, 0x78, 0xf4, 0xe6, 0x36, 0x8f, 0x03, 0xda, + 0xed, 0xd0, 0x0e, 0x0d, 0xf0, 0x68, 0x51, 0x64, 0xf7, 0xb7, 0x42, 0xa4, 0x00, 0x84, 0xd1, 0xd9, 0xd9, 0xc3, 0x00, + 0x27, 0xf4, 0x57, 0x05, 0xb5, 0xbb, 0xe3, 0x47, 0x8c, 0xb6, 0x02, 0xfc, 0x0b, 0x2d, 0xd4, 0xc7, 0x85, 0xb4, 0x03, + 0x6d, 0x41, 0x8a, 0x48, 0xde, 0x81, 0x7e, 0x3b, 0x48, 0x3b, 0xa7, 0x8f, 0xda, 0x2c, 0xc0, 0xc9, 0xf5, 0x6b, 0xe8, + 0xed, 0xe1, 0xb8, 0xdb, 0x82, 0x8f, 0x1c, 0x04, 0x45, 0x56, 0x40, 0x23, 0xa7, 0x27, 0x8f, 0xba, 0x2c, 0xd5, 0x89, + 0x92, 0x67, 0x5f, 0xf4, 0xec, 0xcf, 0x60, 0x3e, 0x49, 0xc1, 0x67, 0x52, 0xe4, 0x71, 0x90, 0x26, 0xed, 0x93, 0x63, + 0x48, 0xb8, 0xa7, 0xb9, 0x03, 0xce, 0x1d, 0x54, 0x3d, 0x1b, 0x05, 0xf8, 0xce, 0xa4, 0x9e, 0x8d, 0xf4, 0xc7, 0xe4, + 0xdd, 0xaf, 0xf9, 0x9b, 0x34, 0x0e, 0x46, 0x67, 0x67, 0xa7, 0x2d, 0x48, 0xf8, 0x40, 0xef, 0xe3, 0x80, 0x3e, 0x82, + 0xff, 0x20, 0xfb, 0xe3, 0x33, 0xe8, 0x10, 0x46, 0x78, 0x37, 0xf9, 0xe8, 0xe7, 0x7c, 0x99, 0xd2, 0x2f, 0x3c, 0x0e, + 0x46, 0xe9, 0xe8, 0xe1, 0x29, 0xd4, 0x9b, 0xd1, 0xc9, 0x33, 0x45, 0xa1, 0xdd, 0x56, 0x4b, 0xb7, 0xfc, 0x8e, 0x7f, + 0x65, 0xba, 0x7a, 0xb7, 0x7b, 0x3a, 0xea, 0xc0, 0x08, 0xae, 0x41, 0xc3, 0x01, 0xe3, 0x39, 0x4b, 0x74, 0x83, 0xd7, + 0xc9, 0xd3, 0x34, 0x0e, 0x1e, 0x3d, 0x3a, 0xee, 0x24, 0x49, 0x80, 0xef, 0x3e, 0xa6, 0xa6, 0xb6, 0xce, 0x93, 0x00, + 0xfb, 0x38, 0x60, 0x8f, 0x1e, 0x9d, 0x3e, 0xa4, 0xf0, 0xfd, 0x5c, 0xb7, 0x75, 0x36, 0x1e, 0x25, 0x67, 0xd0, 0xd6, + 0xef, 0x30, 0x9d, 0x93, 0xb3, 0xe3, 0x54, 0xf7, 0xf5, 0xbb, 0x1e, 0x75, 0x67, 0x7c, 0x32, 0x3e, 0xd1, 0x99, 0x7a, + 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x0e, 0x12, 0x96, 0xb6, 0x03, 0x7c, 0x67, 0x17, 0xee, 0xd1, 0x49, 0xab, 0x95, 0x1e, + 0x07, 0x38, 0xbd, 0x9c, 0xcf, 0xdf, 0x6a, 0x08, 0xb6, 0x4f, 0x1e, 0x99, 0x6f, 0xf9, 0xe5, 0x1e, 0x9a, 0x1e, 0x69, + 0xa0, 0xa5, 0x7c, 0xa6, 0x5b, 0x3e, 0x7d, 0x04, 0xff, 0xe9, 0x6f, 0xdd, 0x74, 0xf9, 0x2d, 0xd2, 0x89, 0x59, 0x94, + 0x36, 0x7b, 0xd4, 0x82, 0x1a, 0x63, 0xfe, 0x71, 0x54, 0x70, 0x40, 0xa3, 0x51, 0x07, 0xfe, 0x2f, 0xc0, 0xe3, 0xec, + 0xfa, 0xb5, 0xc5, 0xd9, 0xf1, 0x98, 0x8e, 0x5b, 0x01, 0x1e, 0x8b, 0x8f, 0x52, 0x7d, 0xb8, 0xcc, 0xe3, 0xa0, 0xd3, + 0x39, 0x1b, 0xe9, 0x32, 0x8b, 0x5f, 0x24, 0xd7, 0x78, 0xdc, 0xd2, 0xad, 0x4c, 0xe8, 0x5b, 0x39, 0xba, 0x16, 0xb0, + 0x92, 0xf0, 0x5f, 0x80, 0x27, 0xa0, 0x16, 0xb3, 0xad, 0x9c, 0x99, 0xed, 0x30, 0x79, 0xa7, 0x51, 0x33, 0x7d, 0x08, + 0xf0, 0x72, 0xcb, 0x98, 0x52, 0xda, 0xed, 0xb4, 0x02, 0xac, 0x47, 0x7d, 0xd6, 0x82, 0xff, 0x02, 0x6c, 0x20, 0xa7, + 0xe1, 0x3a, 0xf9, 0xf8, 0xec, 0xe5, 0x6d, 0x1c, 0xd0, 0x74, 0x3c, 0x86, 0x25, 0xd1, 0x93, 0x71, 0xc5, 0xa6, 0x22, + 0x67, 0xf7, 0xbf, 0xde, 0xda, 0xed, 0xa2, 0x13, 0x94, 0x85, 0xce, 0xe9, 0xa3, 0xd1, 0x49, 0x80, 0xdf, 0xa6, 0x9c, + 0xe6, 0xb0, 0x4a, 0x49, 0xda, 0x4d, 0xba, 0x89, 0x4e, 0x98, 0x88, 0x38, 0x38, 0x81, 0x25, 0xef, 0x04, 0x98, 0x7f, + 0xbd, 0xbe, 0x37, 0xe8, 0x06, 0xb5, 0x2d, 0x82, 0x8c, 0x5b, 0xec, 0xf4, 0x2c, 0x09, 0x70, 0x46, 0xbf, 0x3e, 0xfb, + 0xb5, 0x88, 0x03, 0x76, 0xca, 0x4e, 0xc7, 0xd4, 0x7d, 0xff, 0x21, 0xa7, 0xba, 0x46, 0x6b, 0xdc, 0x85, 0xa4, 0xdb, + 0x5c, 0x8f, 0xf5, 0x61, 0x32, 0xd6, 0x18, 0xf2, 0x6a, 0x26, 0xf2, 0xe4, 0xe9, 0x78, 0x2c, 0x0c, 0x16, 0x53, 0xd8, + 0x84, 0x9f, 0x00, 0xda, 0x34, 0x4d, 0xcf, 0xd8, 0x69, 0x80, 0x3f, 0x99, 0x5d, 0x62, 0x27, 0xf0, 0xc9, 0x60, 0x36, + 0xb3, 0xbb, 0xfd, 0x93, 0x01, 0x0a, 0xcc, 0x77, 0x4c, 0xc7, 0x34, 0xed, 0x04, 0xf8, 0x93, 0x86, 0x4b, 0x7a, 0x0c, + 0xff, 0x41, 0x01, 0xe8, 0xec, 0x51, 0x8b, 0xb1, 0x47, 0x2d, 0xfd, 0xe5, 0xe7, 0xd9, 0x99, 0x8f, 0x4e, 0x93, 0x76, + 0x80, 0x3f, 0x59, 0x74, 0x1c, 0x8f, 0x69, 0x0b, 0xd0, 0xf1, 0x93, 0x45, 0xc7, 0x4e, 0x6b, 0xd4, 0xa1, 0xfa, 0xdb, + 0x60, 0xcd, 0xd9, 0xc3, 0x84, 0xc1, 0xe4, 0x3e, 0x19, 0x84, 0x7c, 0xf8, 0xf0, 0xec, 0xec, 0xd1, 0x23, 0xf8, 0xd4, + 0x6d, 0x97, 0x9f, 0x52, 0x5d, 0x66, 0x1a, 0xc9, 0x5a, 0xc9, 0x09, 0xd0, 0xc9, 0x4f, 0x7a, 0x8c, 0xe3, 0xf1, 0x98, + 0xb5, 0x02, 0x9c, 0xf1, 0x19, 0x33, 0x98, 0x60, 0x7e, 0xeb, 0x8e, 0x8e, 0x3b, 0x49, 0x7a, 0xdc, 0x09, 0x70, 0xf6, + 0xf6, 0x99, 0x9e, 0x4d, 0x0b, 0x66, 0xef, 0xb6, 0x9c, 0xc3, 0x9a, 0x19, 0x7d, 0x03, 0x83, 0x84, 0x95, 0x86, 0xca, + 0xef, 0x3d, 0x7a, 0x78, 0x7a, 0x9a, 0xa4, 0x30, 0xd0, 0xf7, 0xd0, 0x2d, 0x80, 0xf1, 0xbd, 0xd9, 0x7c, 0x23, 0xda, + 0xed, 0xc2, 0x74, 0xdf, 0xcf, 0x17, 0xc5, 0xfc, 0x55, 0x1c, 0x3c, 0x3a, 0x7e, 0xd8, 0x4a, 0x47, 0x01, 0x7e, 0x6f, + 0x27, 0x78, 0x9c, 0x8c, 0x8e, 0x1f, 0xb6, 0x03, 0xfc, 0x5e, 0xef, 0xb7, 0x87, 0xa3, 0xd3, 0x33, 0x38, 0x37, 0xde, + 0xcb, 0x79, 0xf1, 0x76, 0xa2, 0x0b, 0x8c, 0xe9, 0x23, 0x68, 0xf6, 0x37, 0xbd, 0x1b, 0xd3, 0x36, 0x6c, 0xe4, 0xf7, + 0x7a, 0x93, 0x69, 0x3c, 0x79, 0xd8, 0xee, 0x9e, 0x75, 0x03, 0x3c, 0xe3, 0x69, 0x0e, 0x04, 0x5e, 0x6f, 0x94, 0x47, + 0xed, 0x47, 0x0f, 0x5b, 0x01, 0x9e, 0xbd, 0x55, 0xc9, 0x47, 0x3a, 0xd3, 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa9, + 0xee, 0xdf, 0x48, 0x4b, 0x8f, 0x59, 0x3b, 0xc0, 0x33, 0x91, 0x24, 0x54, 0xbe, 0x35, 0x09, 0xa3, 0x6e, 0x80, 0x73, + 0xfa, 0x95, 0xfe, 0x25, 0xdc, 0x66, 0x4a, 0x19, 0x4d, 0x75, 0x9a, 0xc6, 0xe1, 0x00, 0xbf, 0x4b, 0xe1, 0x16, 0x2e, + 0x0e, 0xc6, 0xe9, 0xb8, 0x0b, 0xe0, 0x01, 0x02, 0x64, 0xb0, 0x1b, 0xa0, 0x01, 0x5f, 0xe9, 0xe3, 0x51, 0x1c, 0x9c, + 0x8e, 0xce, 0x58, 0xe7, 0x38, 0xc0, 0x25, 0x35, 0xa2, 0x5d, 0xc8, 0xd7, 0x9f, 0x1f, 0xf5, 0x96, 0x3a, 0x31, 0x09, + 0x1a, 0x40, 0x29, 0x7d, 0xd8, 0x4a, 0x4f, 0x03, 0x3c, 0x7f, 0xcd, 0xdc, 0x1e, 0x63, 0x8c, 0x9d, 0x01, 0x2c, 0x21, + 0x49, 0x23, 0xd0, 0xd9, 0x78, 0xf4, 0xe8, 0x4c, 0x7f, 0x03, 0x18, 0xe8, 0x98, 0x31, 0x00, 0xd2, 0xfc, 0x35, 0x2b, + 0x01, 0x91, 0x8e, 0x1e, 0xb6, 0x80, 0xbe, 0xcc, 0xe9, 0x9c, 0xde, 0xd3, 0xdb, 0xa7, 0x73, 0x3d, 0xa7, 0x71, 0xda, + 0x0d, 0xf0, 0xfc, 0xf9, 0x2f, 0xf3, 0xc5, 0x78, 0xac, 0x27, 0x44, 0x47, 0x8f, 0x02, 0x3c, 0x67, 0xc5, 0x02, 0xd6, + 0xe8, 0xac, 0x7b, 0x3c, 0x0e, 0xb0, 0x45, 0xc3, 0xa4, 0x95, 0x8c, 0xe0, 0x9a, 0x71, 0x31, 0x8b, 0x83, 0x34, 0xa5, + 0xad, 0x14, 0x2e, 0x1d, 0xc5, 0xed, 0xaf, 0x85, 0x41, 0x23, 0xa6, 0xf1, 0xc1, 0xae, 0x21, 0xcc, 0x17, 0xe0, 0xf1, + 0x71, 0xc4, 0x92, 0x84, 0xda, 0xc4, 0xd3, 0xd3, 0xe3, 0x63, 0xc0, 0x3d, 0x33, 0x43, 0x83, 0x20, 0x6f, 0xe4, 0xfd, + 0xa8, 0x10, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, 0xfe, 0xb5, 0xa6, 0xab, 0xed, 0xd3, 0x47, 0xb0, 0x00, + 0x92, 0xa6, 0xe9, 0x2b, 0x73, 0xb8, 0x9d, 0x8d, 0x4e, 0xba, 0xed, 0xe3, 0x00, 0xbb, 0x8d, 0x40, 0xcf, 0x5a, 0x0f, + 0x3b, 0x50, 0x22, 0x4f, 0xef, 0x4d, 0x89, 0xf1, 0x09, 0x3d, 0x39, 0x6d, 0x05, 0xd8, 0x6d, 0x0d, 0x76, 0x36, 0xea, + 0x3e, 0x84, 0x4f, 0x39, 0x65, 0x59, 0xa6, 0xf1, 0xbb, 0x0b, 0x70, 0x91, 0xfc, 0x59, 0x4e, 0xe3, 0x80, 0xb6, 0xba, + 0x9d, 0x4e, 0x0a, 0x9f, 0xd9, 0x57, 0x56, 0xc4, 0x41, 0xd2, 0x82, 0xff, 0x02, 0xec, 0xed, 0x24, 0x36, 0x0a, 0xb0, + 0xc6, 0xbb, 0x53, 0xda, 0xd5, 0x7b, 0xdf, 0xee, 0xaa, 0xd6, 0x59, 0x0b, 0x36, 0xac, 0xdd, 0x54, 0xf6, 0x4b, 0xe6, + 0xe2, 0xd6, 0x92, 0x58, 0x1a, 0x60, 0x0f, 0x41, 0xc7, 0x0f, 0xc7, 0x01, 0x76, 0x3b, 0xee, 0xe4, 0xf4, 0xac, 0x03, + 0xa4, 0x4c, 0x01, 0xa1, 0x48, 0x3b, 0xa3, 0x13, 0x20, 0x4d, 0x8a, 0xbd, 0x36, 0x78, 0x12, 0x60, 0xf5, 0x54, 0xaa, + 0x57, 0x71, 0x90, 0x9e, 0x8d, 0xc6, 0xe9, 0x59, 0x80, 0x95, 0x98, 0x51, 0x25, 0x34, 0x05, 0x3c, 0x3e, 0x79, 0x18, + 0x60, 0x8d, 0xe6, 0x2d, 0xd6, 0x4a, 0x5b, 0x01, 0xb6, 0x47, 0x09, 0x63, 0x67, 0x1d, 0x98, 0xd6, 0xcf, 0xcf, 0x15, + 0xe0, 0x72, 0xca, 0x46, 0xc7, 0x01, 0x2e, 0xe9, 0xbd, 0x26, 0x44, 0xf0, 0x25, 0x67, 0xe2, 0x8b, 0x65, 0x3d, 0x80, + 0xd4, 0xb9, 0x0d, 0x0f, 0xcb, 0xf0, 0xf2, 0xd6, 0xa0, 0x11, 0xd5, 0x5b, 0xdc, 0xbb, 0x86, 0x7d, 0x42, 0x43, 0xc7, + 0xb6, 0x73, 0xb2, 0x5c, 0xe3, 0x32, 0xba, 0xe9, 0x17, 0x76, 0x2f, 0xc3, 0x1c, 0x4c, 0xe2, 0x6b, 0x29, 0x32, 0x47, + 0xce, 0x9e, 0xdf, 0xba, 0x6c, 0x82, 0x20, 0x29, 0x49, 0xab, 0x27, 0xcf, 0x9d, 0x1b, 0x69, 0x4f, 0x42, 0xcc, 0x03, + 0x48, 0x2f, 0x08, 0x25, 0x0a, 0x42, 0xc3, 0x18, 0x61, 0xd2, 0x59, 0xd7, 0x6b, 0x99, 0x52, 0x18, 0x7b, 0x7d, 0x4a, + 0xa8, 0x0b, 0x0a, 0x0f, 0x77, 0xc4, 0xf9, 0x40, 0x0c, 0x51, 0x4f, 0x10, 0x1d, 0xe2, 0xf9, 0x45, 0xae, 0xc2, 0x3c, + 0x1f, 0x14, 0x43, 0xdc, 0x3e, 0x45, 0x18, 0x82, 0x27, 0x90, 0x81, 0xb8, 0xb8, 0x68, 0x9f, 0x1e, 0x68, 0xa1, 0xef, + 0xe2, 0xe2, 0xcc, 0xfc, 0x80, 0x7f, 0x87, 0x55, 0xc0, 0x6a, 0x18, 0xdf, 0x63, 0xe6, 0x69, 0xf4, 0x34, 0x7f, 0xfd, + 0x98, 0xad, 0x56, 0xe1, 0x63, 0x46, 0x60, 0xc6, 0xf8, 0x31, 0x8b, 0xf4, 0xa5, 0x85, 0x71, 0x8d, 0x21, 0x03, 0xd0, + 0x9c, 0xb5, 0x30, 0x84, 0x51, 0x77, 0x9c, 0xf7, 0x63, 0x36, 0xe0, 0x75, 0xb7, 0xea, 0x2a, 0x76, 0xf1, 0xc1, 0xc1, + 0xb2, 0x88, 0x95, 0x11, 0x13, 0x94, 0x11, 0x13, 0x94, 0x11, 0x13, 0x54, 0x15, 0x3d, 0xfe, 0xa4, 0x0f, 0x52, 0x8a, + 0x56, 0xb6, 0x58, 0x9e, 0xfa, 0x1d, 0xa8, 0x3d, 0x40, 0x3b, 0xd9, 0xaf, 0x94, 0x1d, 0xa5, 0xae, 0x62, 0xa7, 0x02, + 0x63, 0x67, 0xa2, 0xd5, 0x76, 0x1c, 0xfd, 0x3b, 0xea, 0x8e, 0x97, 0x35, 0xb1, 0xec, 0xdd, 0x4e, 0xb1, 0x0c, 0x56, + 0x52, 0x8b, 0x66, 0xfb, 0x26, 0x10, 0x87, 0x1a, 0x3c, 0xd4, 0x82, 0x59, 0x15, 0x1d, 0xae, 0x01, 0x49, 0x3d, 0x90, + 0x42, 0xce, 0xb4, 0x94, 0x56, 0xa0, 0x38, 0x55, 0x61, 0x01, 0x1a, 0x4a, 0xa7, 0xa0, 0x2c, 0x83, 0x98, 0x36, 0x34, + 0x40, 0x72, 0x23, 0xa3, 0x19, 0x59, 0xad, 0x0b, 0xa2, 0x0b, 0x68, 0xc2, 0xb4, 0xc4, 0x02, 0x0d, 0x48, 0xdd, 0x80, + 0xb4, 0x95, 0x41, 0x9c, 0xb1, 0xd9, 0x27, 0x3a, 0x3b, 0xd7, 0xd9, 0x79, 0x99, 0x2d, 0x5c, 0xb6, 0x11, 0x12, 0x85, + 0xce, 0x16, 0x65, 0x36, 0xc8, 0x6c, 0x78, 0x12, 0xe7, 0x78, 0x14, 0x0b, 0x23, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0xea, + 0x6b, 0x73, 0x0f, 0x0e, 0xc2, 0x52, 0x4e, 0xd2, 0x6a, 0xe2, 0x07, 0x4b, 0x1e, 0x15, 0x5a, 0x06, 0xe2, 0xd1, 0xc4, + 0xfe, 0x1d, 0xad, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfa, 0x46, 0x49, 0xf4, 0xd9, 0x29, 0x51, 0x1f, 0x73, 0x1d, 0xfe, + 0xe6, 0x9c, 0x44, 0xad, 0xd6, 0x71, 0xfb, 0xb8, 0x75, 0xd6, 0xe7, 0x87, 0xed, 0x4e, 0xf4, 0xa8, 0x13, 0x6b, 0x45, + 0xc4, 0x5c, 0xdc, 0x82, 0x02, 0xe6, 0xa8, 0x13, 0x9d, 0xa0, 0xc3, 0x76, 0xd4, 0xea, 0x76, 0x9b, 0xf0, 0x0f, 0x7e, + 0xaf, 0xca, 0x6a, 0x27, 0xad, 0x93, 0x6e, 0x9f, 0x1f, 0x6d, 0x54, 0x0a, 0x79, 0x03, 0x0a, 0xa2, 0x23, 0x5d, 0x09, + 0x43, 0xfd, 0x6a, 0x79, 0x9f, 0x6d, 0xe9, 0x79, 0xde, 0xab, 0x30, 0x37, 0xaa, 0x38, 0x80, 0xaa, 0xfb, 0x9a, 0x68, + 0x20, 0xba, 0xaf, 0x51, 0x19, 0xa2, 0x76, 0x59, 0x80, 0xa8, 0xfd, 0x98, 0x87, 0xb2, 0xc1, 0x0e, 0x43, 0x93, 0xaf, + 0xa0, 0x6e, 0x13, 0xc2, 0xc6, 0xe1, 0x89, 0xcd, 0xcd, 0xfd, 0xdc, 0x09, 0x42, 0xcd, 0x1c, 0x72, 0x47, 0x36, 0x57, + 0xf8, 0xb9, 0x23, 0x84, 0x9a, 0x02, 0x72, 0x69, 0xcc, 0x23, 0x0a, 0x39, 0x2a, 0xa2, 0x4d, 0x0d, 0xc9, 0x6a, 0x51, + 0x9e, 0x33, 0x37, 0x6c, 0x3e, 0x86, 0xe5, 0xd1, 0x04, 0xc5, 0x0a, 0xd2, 0x10, 0x35, 0xaf, 0xd2, 0xe6, 0xb4, 0x70, + 0xa9, 0xc6, 0x81, 0x8c, 0x06, 0xfc, 0x73, 0xc8, 0xf4, 0x7b, 0x13, 0xad, 0xfe, 0xf1, 0x69, 0x2b, 0x6e, 0x83, 0x8f, + 0x34, 0xc8, 0xda, 0xd2, 0xc8, 0xda, 0xd2, 0xc9, 0xda, 0xd2, 0xc9, 0xda, 0x20, 0xc0, 0x7b, 0x7d, 0xff, 0x2d, 0x6a, + 0x76, 0x27, 0xbc, 0x34, 0x62, 0x31, 0x56, 0x0a, 0xa1, 0x5a, 0xad, 0x96, 0x6b, 0x30, 0x31, 0x2a, 0x6b, 0x88, 0xbc, + 0x52, 0x7f, 0x2e, 0x8b, 0xb8, 0x85, 0x27, 0x31, 0x68, 0xb9, 0x5b, 0x98, 0xea, 0xcd, 0xed, 0xa8, 0xc2, 0x66, 0xf8, + 0x9a, 0xbe, 0x53, 0x27, 0x5f, 0x90, 0x63, 0xad, 0x3d, 0x5e, 0x16, 0x31, 0x37, 0x34, 0x83, 0x1b, 0x9a, 0xc1, 0x0d, + 0xcd, 0x80, 0x46, 0x70, 0x59, 0x58, 0x97, 0x8d, 0x28, 0x81, 0x2b, 0x81, 0xc1, 0xf1, 0x10, 0xa2, 0xf7, 0x85, 0x8a, + 0xe8, 0x51, 0x6f, 0x74, 0xde, 0x86, 0x68, 0x65, 0xa6, 0xa4, 0x8a, 0xa8, 0x76, 0xda, 0x2e, 0xc7, 0xfc, 0xaa, 0x86, + 0xf6, 0x11, 0x3c, 0x25, 0x73, 0xa9, 0xc2, 0x16, 0xd8, 0x6c, 0x04, 0x45, 0xd0, 0xd7, 0x64, 0x21, 0xd6, 0x3a, 0x1b, + 0x6b, 0x8b, 0xfd, 0x65, 0xc3, 0x05, 0xd6, 0x50, 0x02, 0xff, 0x01, 0x85, 0x2f, 0xac, 0xf2, 0xc9, 0x2f, 0x4d, 0x4d, + 0xad, 0x9d, 0x98, 0x39, 0x12, 0x7a, 0x60, 0x2f, 0xee, 0x82, 0x3d, 0xf5, 0x25, 0x11, 0xb9, 0xf6, 0x56, 0x24, 0x55, + 0xb8, 0x62, 0xf0, 0xde, 0x25, 0x77, 0x54, 0xfb, 0xb2, 0xbc, 0x30, 0x7f, 0x5e, 0x51, 0xcf, 0xd9, 0xaf, 0x98, 0x8c, + 0x9c, 0x8f, 0xec, 0x8d, 0x0e, 0xea, 0x43, 0xf6, 0xf7, 0x8d, 0x29, 0xb7, 0xfe, 0xda, 0xb4, 0xe5, 0xd6, 0x89, 0x3a, + 0x1b, 0x76, 0xa8, 0x5b, 0xa3, 0xbf, 0x9d, 0xab, 0x5a, 0x31, 0x19, 0x21, 0x8f, 0x66, 0x6b, 0xb0, 0xe6, 0x15, 0xb0, + 0xa4, 0xad, 0x57, 0x7a, 0x30, 0x42, 0xef, 0x7a, 0xcc, 0xeb, 0x62, 0x32, 0xda, 0xf9, 0xe6, 0x88, 0xe9, 0xb1, 0xff, + 0x96, 0x7a, 0x3d, 0x38, 0xd5, 0xf6, 0x94, 0xdd, 0x7d, 0xaf, 0xce, 0xed, 0xce, 0x3a, 0x32, 0xfb, 0x5e, 0x9d, 0xa7, + 0xbb, 0xea, 0xcc, 0xf8, 0x5d, 0xe8, 0xf6, 0x8e, 0xf2, 0xd4, 0xd8, 0xda, 0x3e, 0x68, 0x32, 0x82, 0x20, 0xf1, 0xf0, + 0xd7, 0x84, 0x72, 0xe9, 0x39, 0x12, 0x0e, 0xab, 0x20, 0xfa, 0x51, 0x37, 0x66, 0x98, 0x92, 0xce, 0x61, 0xa1, 0x83, + 0xb9, 0xc8, 0x88, 0x36, 0xf3, 0x88, 0xe2, 0x8c, 0x84, 0x21, 0x3d, 0x4c, 0x20, 0x24, 0x4d, 0xbb, 0x4f, 0xe3, 0x90, + 0x36, 0x12, 0x74, 0x14, 0xb6, 0x1b, 0xf4, 0x30, 0x41, 0xa8, 0xd1, 0x06, 0x9d, 0xa9, 0x20, 0xed, 0x66, 0x06, 0x41, + 0x2a, 0x35, 0x29, 0xce, 0x0e, 0x65, 0x54, 0x34, 0xc4, 0x61, 0x1e, 0x15, 0x8d, 0xa8, 0x8b, 0x65, 0x34, 0x29, 0x93, + 0x27, 0x3a, 0x79, 0x62, 0x92, 0x47, 0x65, 0xf2, 0x48, 0x27, 0x8f, 0x4c, 0x32, 0x25, 0xc5, 0xa1, 0x8c, 0x68, 0x23, + 0x6c, 0x37, 0x0b, 0x74, 0x08, 0x23, 0x70, 0xa3, 0x27, 0xd2, 0x8f, 0x0d, 0xbe, 0xd6, 0xc6, 0x35, 0x73, 0x91, 0xd9, + 0x68, 0x9d, 0x15, 0x90, 0x4a, 0x8f, 0x27, 0xa8, 0xf3, 0xcc, 0x03, 0x13, 0x56, 0xe6, 0x8f, 0x8b, 0x45, 0xb7, 0x4e, + 0x32, 0x91, 0x7b, 0x1e, 0x5d, 0x60, 0x84, 0xfe, 0xc5, 0xfa, 0xb1, 0x00, 0x54, 0xd7, 0x34, 0x9b, 0x4f, 0xe9, 0x96, + 0xdb, 0x6c, 0x31, 0x19, 0xd9, 0x9d, 0x55, 0x36, 0xc3, 0x68, 0x61, 0x62, 0x3c, 0xd7, 0x1d, 0x1c, 0x01, 0xd4, 0xce, + 0xa9, 0x32, 0xa2, 0x5a, 0x49, 0x6e, 0x6a, 0x4c, 0x0a, 0x76, 0x2f, 0x13, 0x9a, 0xb1, 0xb0, 0x3a, 0x80, 0xab, 0x61, + 0x32, 0xf2, 0x02, 0x4c, 0xe1, 0x8b, 0xc3, 0xe8, 0xb8, 0xa1, 0xa2, 0xc9, 0x61, 0xd4, 0x7d, 0xd4, 0x50, 0xd1, 0xe8, + 0x30, 0x6a, 0xb7, 0x2b, 0x9c, 0x8d, 0x0a, 0xa2, 0xa2, 0x09, 0x51, 0xa0, 0x31, 0x34, 0x8d, 0x8a, 0x39, 0x05, 0xdb, + 0xae, 0x7f, 0x63, 0x18, 0x0d, 0x3b, 0x8c, 0x9c, 0x4d, 0x4c, 0xb8, 0xcb, 0xad, 0x31, 0xf8, 0xdd, 0x74, 0xba, 0xdd, + 0xa6, 0x8a, 0x0a, 0xac, 0xcc, 0x4a, 0x36, 0x55, 0x34, 0xc1, 0xca, 0x2c, 0x5f, 0x53, 0x45, 0x23, 0xd3, 0x94, 0xd6, + 0x01, 0x82, 0xde, 0xb1, 0x04, 0xd6, 0x73, 0xe6, 0x41, 0xbe, 0xe3, 0xbc, 0x53, 0xd6, 0xa0, 0x35, 0xfc, 0x5e, 0xb9, + 0xa6, 0x2b, 0x28, 0xa9, 0x02, 0x1b, 0x1f, 0xf6, 0xad, 0xa2, 0xed, 0xaa, 0x49, 0xf6, 0xaf, 0xcb, 0x96, 0xcd, 0x16, + 0x42, 0xd5, 0x0b, 0x5e, 0xd6, 0x30, 0xc4, 0x96, 0xb2, 0x07, 0xf7, 0x3f, 0x94, 0x84, 0x10, 0xd4, 0x4e, 0x9f, 0x42, + 0x9c, 0x38, 0x3d, 0x32, 0x24, 0xf1, 0x46, 0x63, 0x8d, 0x42, 0xef, 0xbc, 0x7d, 0xea, 0x53, 0xd5, 0xad, 0x48, 0x77, + 0x84, 0x04, 0x8b, 0xdc, 0xd8, 0x42, 0xa6, 0x81, 0xc7, 0x82, 0x58, 0xed, 0x6e, 0xed, 0x80, 0x38, 0x38, 0xd8, 0x3c, + 0x2f, 0xdc, 0x9b, 0x03, 0x5b, 0xef, 0x0c, 0x54, 0x86, 0x74, 0xee, 0x25, 0x24, 0x63, 0x62, 0xcb, 0x3d, 0x44, 0x71, + 0x31, 0xa7, 0x1e, 0x6a, 0x0a, 0x3f, 0xa8, 0x02, 0xee, 0xd9, 0x9c, 0xe6, 0xa9, 0xce, 0xd0, 0x7d, 0x0d, 0xbd, 0xb1, + 0xbd, 0xf1, 0x27, 0x54, 0x1a, 0x09, 0xfe, 0xcb, 0x8e, 0xbd, 0x4e, 0xec, 0x4b, 0x2d, 0x7e, 0xa3, 0x7f, 0xf9, 0x26, + 0xb9, 0x15, 0x6c, 0xac, 0x33, 0xf6, 0x6a, 0x55, 0x7b, 0x97, 0xc7, 0xbc, 0xfe, 0x82, 0x0e, 0x0e, 0xb8, 0x7c, 0x06, + 0x56, 0xc4, 0x2c, 0x6c, 0xf8, 0x87, 0xef, 0xdf, 0xb5, 0xd3, 0xfa, 0x2f, 0x7d, 0xae, 0xc6, 0xde, 0x41, 0x77, 0x59, + 0xcb, 0xdf, 0xb9, 0x12, 0x7d, 0x15, 0x73, 0xbb, 0xd6, 0x7f, 0x55, 0x36, 0xda, 0x5b, 0x2f, 0x44, 0x1d, 0x1c, 0xf0, + 0x2a, 0x4e, 0x53, 0xf0, 0x43, 0x80, 0xfa, 0x5a, 0x06, 0x79, 0x96, 0x09, 0x0a, 0x37, 0xa2, 0x70, 0xc5, 0x10, 0x37, + 0xf8, 0x91, 0xc2, 0x7f, 0x88, 0xff, 0x4f, 0x8d, 0x1c, 0xaa, 0xb8, 0xc1, 0x3d, 0x01, 0xcc, 0x67, 0x85, 0xaa, 0x08, + 0x89, 0x1a, 0xd2, 0xbe, 0xc9, 0x35, 0x2a, 0x0f, 0x73, 0x3a, 0x9f, 0x67, 0xf7, 0xfa, 0x91, 0x2c, 0x8f, 0xa3, 0xaa, + 0x2e, 0x9a, 0x6c, 0x78, 0x3a, 0x5c, 0x00, 0x4f, 0x0f, 0xb8, 0x87, 0xb4, 0x7b, 0x69, 0x79, 0xb9, 0x2d, 0x11, 0x48, + 0x66, 0x39, 0x11, 0xcd, 0x76, 0x2f, 0xbf, 0x00, 0xb9, 0xac, 0xd9, 0x44, 0xca, 0x46, 0xed, 0xc6, 0x1c, 0x64, 0xb2, + 0xdc, 0xb8, 0x90, 0xee, 0x99, 0x82, 0x20, 0xb9, 0x09, 0x2d, 0xb2, 0xed, 0x2e, 0xc5, 0xc7, 0x21, 0xa0, 0x11, 0x32, + 0x02, 0x9f, 0x2f, 0x2c, 0x72, 0xe0, 0x3a, 0x0b, 0xd7, 0xf1, 0x37, 0x5a, 0x2a, 0x06, 0xf9, 0x70, 0x88, 0x0b, 0xfd, + 0x2e, 0x44, 0x39, 0x1f, 0xb8, 0x69, 0x2a, 0xdf, 0x19, 0xf2, 0x44, 0x14, 0xbe, 0x5a, 0xed, 0xc3, 0x33, 0x3e, 0xb6, + 0x4d, 0xf0, 0x39, 0xb5, 0x3f, 0xab, 0x27, 0x3b, 0x60, 0x1c, 0x8c, 0xb4, 0xf4, 0x45, 0xa1, 0x95, 0x37, 0xd9, 0xb9, + 0xec, 0x35, 0x1a, 0x4c, 0x47, 0x58, 0x22, 0x10, 0x4e, 0x0d, 0x1c, 0x02, 0xe1, 0x8f, 0x09, 0x9a, 0x24, 0x99, 0x09, + 0x3d, 0x07, 0x31, 0xb1, 0x6b, 0x09, 0xab, 0x55, 0x6e, 0x42, 0x9b, 0xe8, 0x1c, 0x13, 0xe4, 0xa4, 0xec, 0xa7, 0x8c, + 0xa1, 0x5a, 0x99, 0x71, 0x70, 0xbb, 0xd5, 0xdf, 0x56, 0xfb, 0x79, 0x8f, 0x9b, 0x6b, 0x3c, 0xae, 0x03, 0x06, 0x68, + 0x40, 0x2d, 0x37, 0x36, 0xb8, 0x31, 0x70, 0x0f, 0x8d, 0x35, 0x2e, 0xdb, 0x84, 0xa0, 0x2c, 0x1d, 0xe4, 0xcd, 0xcd, + 0xad, 0x0b, 0x18, 0x98, 0xeb, 0x39, 0xe5, 0x48, 0x0d, 0x40, 0x8e, 0x1e, 0x12, 0xe8, 0xdc, 0xfc, 0xac, 0xe8, 0x42, + 0x25, 0x13, 0x97, 0x63, 0xfc, 0xc5, 0xbb, 0xcd, 0x1b, 0x04, 0x37, 0x37, 0x7a, 0x93, 0xdf, 0xdc, 0x04, 0xd8, 0xb7, + 0x2a, 0x0f, 0x3c, 0x5e, 0x30, 0x18, 0x96, 0x31, 0xa5, 0xf4, 0xc6, 0x6f, 0xb6, 0xab, 0xc6, 0xde, 0xd3, 0x0a, 0xef, + 0x60, 0x79, 0x74, 0xe3, 0x5b, 0x5e, 0x98, 0x03, 0x0e, 0xf0, 0x66, 0x03, 0x3e, 0xec, 0xbd, 0x09, 0x73, 0x74, 0x70, + 0xf0, 0x26, 0x14, 0xa8, 0x7f, 0xcd, 0xf4, 0x9d, 0x1b, 0xb8, 0x61, 0x0f, 0xb8, 0x1e, 0xbe, 0xf0, 0x10, 0xe0, 0x9a, + 0x6d, 0x4a, 0x36, 0x6f, 0x75, 0xd0, 0x8b, 0x18, 0x82, 0x6a, 0x43, 0x68, 0x5f, 0x0b, 0x12, 0xe8, 0xf5, 0x8d, 0x0f, + 0xed, 0x1e, 0x23, 0x0c, 0x58, 0xf8, 0xd2, 0x49, 0x8e, 0x45, 0x33, 0x56, 0x4c, 0x58, 0xb1, 0x5a, 0xbd, 0xa7, 0xc6, + 0xf1, 0x6d, 0x23, 0x46, 0x63, 0xde, 0x6b, 0x34, 0xa8, 0x1e, 0x3f, 0x88, 0x0f, 0x74, 0x88, 0xf7, 0xdf, 0x84, 0x05, + 0x42, 0x60, 0x61, 0xc4, 0xf3, 0x85, 0x73, 0xf2, 0x4a, 0x6a, 0xeb, 0x52, 0xa0, 0xb2, 0x91, 0x8c, 0xb4, 0xf0, 0x94, + 0x24, 0xe5, 0x1a, 0x9d, 0x4f, 0x7b, 0x8d, 0x46, 0x86, 0x44, 0x98, 0x0c, 0xb2, 0x21, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, + 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0xb2, 0xf3, 0x5d, 0x9a, 0xb1, 0xc6, 0x8f, 0xe9, 0xda, 0x03, 0xc6, 0x63, 0xea, + 0x11, 0x89, 0x5d, 0x40, 0x96, 0x06, 0xc8, 0xb9, 0x03, 0xb2, 0xd4, 0x40, 0xce, 0x51, 0x7f, 0x0e, 0xd1, 0x8a, 0x72, + 0x14, 0x6f, 0x51, 0xf4, 0x7a, 0x5c, 0x4d, 0xeb, 0xb3, 0x81, 0xb9, 0x0e, 0xed, 0x60, 0x97, 0x03, 0x1e, 0x3a, 0xb1, + 0x6e, 0x80, 0x39, 0x59, 0x06, 0x81, 0x0e, 0x31, 0x8b, 0xef, 0xf4, 0x9f, 0xe8, 0x0e, 0xdf, 0x9b, 0x1f, 0xf7, 0x9e, + 0x32, 0xe9, 0x79, 0x4d, 0xdb, 0xc0, 0x6d, 0x40, 0xb6, 0x20, 0x0a, 0x00, 0xad, 0x6d, 0x74, 0x41, 0x59, 0x7f, 0x70, + 0x2d, 0x37, 0x71, 0x20, 0x64, 0x83, 0xe4, 0x58, 0x7a, 0xa4, 0xf3, 0xcf, 0x3f, 0x03, 0xd4, 0x97, 0x10, 0xc6, 0xc7, + 0x9e, 0x6c, 0xcd, 0x36, 0x6a, 0x04, 0x51, 0x10, 0x87, 0x2e, 0x4a, 0x04, 0xec, 0x8c, 0x20, 0xf0, 0x1e, 0x5b, 0x29, + 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x3d, 0xa8, 0x2a, 0xee, 0xc5, 0xc5, 0x72, 0x33, 0xca, 0x90, 0x86, 0xaa, 0xd4, 0x21, + 0x5e, 0x90, 0x79, 0x81, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0x06, 0x72, 0xe8, 0x3d, 0x29, 0x56, 0x5d, 0x87, 0x2b, 0x7f, + 0xe1, 0x42, 0x9a, 0x0f, 0xd4, 0x70, 0xb5, 0x32, 0x7f, 0xc9, 0x07, 0x2d, 0xcd, 0xc0, 0xdb, 0x70, 0xde, 0x6d, 0xbc, + 0xdc, 0x2d, 0x8b, 0x45, 0x4a, 0xfc, 0x0e, 0x56, 0x83, 0x2e, 0x68, 0x9f, 0x9d, 0x6a, 0xdb, 0x41, 0x7d, 0xae, 0x35, + 0x0a, 0x5e, 0xc8, 0xdc, 0xea, 0x48, 0xc3, 0x73, 0xe5, 0xe7, 0xd5, 0x42, 0xdf, 0x26, 0x79, 0x19, 0xc1, 0x14, 0x8e, + 0x94, 0x08, 0xcc, 0xc6, 0x35, 0x9d, 0x84, 0x1f, 0x75, 0x2a, 0x69, 0x59, 0x48, 0x80, 0x02, 0x47, 0xfa, 0x72, 0x5e, + 0x47, 0xa8, 0x67, 0x68, 0x07, 0x91, 0xf3, 0x4c, 0x68, 0xea, 0xb2, 0xa5, 0x0d, 0x25, 0x15, 0xcc, 0xc4, 0x42, 0xb2, + 0xc5, 0x1c, 0xce, 0xf7, 0x32, 0x2d, 0xc9, 0x78, 0xf2, 0xa5, 0x9e, 0x02, 0xe6, 0x9f, 0x77, 0x6a, 0xc6, 0xf2, 0x45, + 0x60, 0xe7, 0xf9, 0xca, 0x88, 0xfb, 0x6f, 0x5e, 0xe0, 0xc7, 0xa4, 0x73, 0xf8, 0x0a, 0x7f, 0xa4, 0xe4, 0x71, 0xe3, + 0x15, 0x9e, 0x70, 0x62, 0x78, 0x83, 0xe8, 0xcd, 0xeb, 0xeb, 0x17, 0xef, 0x5e, 0xbc, 0x7f, 0x7a, 0xf3, 0xe2, 0xd5, + 0xb3, 0x17, 0xaf, 0x5e, 0xbc, 0xfb, 0x88, 0xff, 0xa6, 0xe4, 0xd5, 0x51, 0xfb, 0xac, 0x85, 0x3f, 0x90, 0x57, 0x47, + 0x1d, 0x7c, 0xa7, 0xc8, 0xab, 0xa3, 0x13, 0x9c, 0xe5, 0xe4, 0xd5, 0x61, 0xe7, 0xe8, 0x18, 0x2f, 0x94, 0x69, 0x32, + 0x13, 0x93, 0x76, 0x0b, 0xff, 0x6d, 0xbf, 0x40, 0xbc, 0xaf, 0x66, 0x31, 0x61, 0x9b, 0xc6, 0x0f, 0x50, 0x86, 0x8e, + 0xa4, 0x36, 0x44, 0x39, 0xf7, 0xd0, 0x69, 0x9a, 0xfb, 0xe8, 0x64, 0x62, 0x28, 0x83, 0x0d, 0x23, 0xa0, 0x15, 0x27, + 0xb6, 0x1d, 0x7e, 0xd4, 0x66, 0xc7, 0x40, 0x9f, 0x78, 0x29, 0x1c, 0x97, 0x2a, 0x9c, 0xb6, 0xd5, 0x62, 0x8c, 0x33, + 0x21, 0x8a, 0x70, 0x01, 0x8c, 0x80, 0xd6, 0x5a, 0xf0, 0xa3, 0x32, 0x58, 0x93, 0x3c, 0x27, 0xed, 0x7e, 0x3b, 0x96, + 0xe7, 0xa4, 0xd3, 0xef, 0xc0, 0x9f, 0x6e, 0xbf, 0x1b, 0xb7, 0x5b, 0xe8, 0xd0, 0x1b, 0xc7, 0x1f, 0x35, 0xb4, 0x1e, + 0x0c, 0xb1, 0xed, 0x42, 0xfe, 0x5d, 0x28, 0xa7, 0xd2, 0x93, 0x56, 0x1d, 0xdb, 0xee, 0xc9, 0x73, 0xa6, 0xf5, 0xb0, + 0xfc, 0x07, 0x40, 0x6d, 0xed, 0x4f, 0x52, 0x6e, 0x1c, 0xfb, 0x8b, 0x1f, 0x49, 0x54, 0x8b, 0x08, 0x13, 0xb2, 0x55, + 0x0b, 0x01, 0xd3, 0xa8, 0xb3, 0xc1, 0x1c, 0x28, 0x92, 0xa2, 0x50, 0x2e, 0xaa, 0x7d, 0xde, 0x14, 0x28, 0x9a, 0x8b, + 0x79, 0x58, 0x53, 0x35, 0xfc, 0xea, 0x99, 0x39, 0xee, 0x73, 0xf9, 0x8a, 0xbe, 0x0a, 0x6b, 0x3c, 0x8f, 0xcf, 0xda, + 0xf9, 0xdb, 0xe2, 0x17, 0x6b, 0x45, 0x51, 0x03, 0x57, 0x09, 0x58, 0x37, 0xaa, 0xa6, 0x3a, 0x87, 0xe7, 0xfb, 0x58, + 0x43, 0x5d, 0x10, 0x8f, 0x7a, 0xfe, 0x54, 0x9a, 0x71, 0x95, 0xca, 0x68, 0xa7, 0x88, 0xd6, 0x66, 0x41, 0x4e, 0x11, + 0x7d, 0x9e, 0x6b, 0x20, 0x08, 0xc2, 0x07, 0x72, 0x08, 0x07, 0xbe, 0x19, 0xa0, 0xd0, 0x74, 0x0e, 0xd4, 0x4a, 0x95, + 0x99, 0x90, 0xfe, 0xd4, 0xb1, 0x09, 0x40, 0xf3, 0x54, 0xa9, 0xa0, 0xf4, 0x27, 0x16, 0xc8, 0x1b, 0xfa, 0x6f, 0xfe, + 0x06, 0x38, 0x0c, 0x35, 0x2a, 0xfa, 0x76, 0x35, 0xb2, 0x9e, 0xdf, 0x3e, 0x6b, 0x1d, 0xbd, 0xf2, 0xf2, 0xd3, 0xdc, + 0xd9, 0x7b, 0xfc, 0xe5, 0x51, 0x72, 0x13, 0x4d, 0xab, 0x8d, 0x5d, 0x20, 0xb4, 0x9e, 0x0f, 0x90, 0x43, 0x85, 0x8e, + 0xf4, 0x4b, 0x86, 0x3d, 0xa4, 0x0e, 0x49, 0xbb, 0x05, 0xd1, 0xcb, 0x76, 0x50, 0xbe, 0x9f, 0x36, 0x60, 0xaa, 0xa2, + 0xbb, 0x26, 0xd0, 0x6a, 0x78, 0xdc, 0xe8, 0xbe, 0xc9, 0xa3, 0x7b, 0x9c, 0x7b, 0x38, 0xc3, 0x0e, 0x59, 0x43, 0x1e, + 0x4a, 0x64, 0xa3, 0xbe, 0x9a, 0x0d, 0xa0, 0x68, 0xde, 0x31, 0x8f, 0xec, 0x39, 0xe3, 0xa8, 0xf3, 0x66, 0xd4, 0x3d, + 0x7c, 0x75, 0x70, 0x10, 0x8a, 0x06, 0x79, 0x8c, 0xf0, 0x92, 0x82, 0x11, 0x35, 0x38, 0x9d, 0x71, 0xc3, 0xc4, 0xc7, + 0xb9, 0x47, 0x1d, 0x17, 0x79, 0xed, 0x58, 0xab, 0x3a, 0x2b, 0x77, 0x83, 0x1b, 0x53, 0x07, 0x35, 0xbc, 0x34, 0x33, + 0xba, 0x4e, 0x0d, 0xca, 0x35, 0x0f, 0x31, 0xd8, 0x96, 0x8d, 0x8f, 0x14, 0xfd, 0xf0, 0xb8, 0xf9, 0xca, 0x9b, 0x70, + 0xcd, 0x34, 0xe9, 0x71, 0xe3, 0x31, 0xfa, 0xe1, 0xb1, 0xe7, 0xe3, 0xc7, 0x2b, 0xf6, 0xc4, 0x71, 0x23, 0x3f, 0x19, + 0xae, 0xf4, 0x27, 0x90, 0xec, 0x0b, 0xf2, 0x13, 0x60, 0x39, 0x25, 0x3f, 0x85, 0xa2, 0x99, 0x83, 0x41, 0xd7, 0x4f, + 0x61, 0x01, 0x3f, 0x32, 0xf2, 0x53, 0x08, 0xd8, 0x8e, 0xa7, 0xfa, 0x47, 0x51, 0xbd, 0xae, 0x0a, 0x6a, 0x14, 0xe3, + 0x5e, 0x56, 0xac, 0x56, 0xf2, 0xe0, 0x40, 0x98, 0x5f, 0xf4, 0x22, 0x39, 0x38, 0xc8, 0xce, 0xa7, 0x9e, 0xed, 0xad, + 0xda, 0x45, 0x5f, 0x34, 0x42, 0x61, 0xcf, 0x34, 0x8d, 0xfb, 0x33, 0xfe, 0xe4, 0x53, 0x56, 0xdd, 0x40, 0xf3, 0xb8, + 0xf3, 0xf0, 0xf4, 0x0c, 0xc3, 0xbf, 0x0f, 0xbd, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, 0xb3, 0xe6, 0x69, 0x85, 0x6c, + 0x17, 0x1e, 0x3e, 0x63, 0x86, 0x9a, 0xf2, 0xe0, 0x80, 0x9f, 0x7b, 0xb8, 0x8c, 0x19, 0x6a, 0x78, 0x16, 0x7b, 0x0f, + 0x4a, 0x7b, 0x32, 0xcd, 0x35, 0xc1, 0xab, 0xb6, 0x7c, 0x50, 0x0c, 0xcf, 0x95, 0xa5, 0x26, 0x7e, 0xec, 0xeb, 0x9c, + 0xb4, 0xec, 0x26, 0xeb, 0xc9, 0x66, 0x7e, 0xd1, 0xee, 0x21, 0x41, 0xf2, 0x86, 0xbc, 0xb8, 0x68, 0x63, 0x50, 0xc9, + 0xf7, 0x73, 0x22, 0x62, 0x49, 0x9c, 0x7f, 0xde, 0x32, 0x13, 0x71, 0x8e, 0xa7, 0x3c, 0x2e, 0xe5, 0xec, 0xd7, 0xce, + 0x7a, 0x5a, 0x7b, 0x4c, 0xea, 0x9e, 0x19, 0x96, 0xfd, 0xbc, 0xf4, 0xf4, 0x83, 0x4d, 0x9a, 0x0f, 0xe1, 0xd1, 0xc0, + 0x12, 0xf3, 0x98, 0x71, 0x6f, 0x63, 0x10, 0x94, 0x39, 0x6f, 0xb4, 0x21, 0x13, 0x3e, 0xd7, 0x71, 0x0e, 0x03, 0xd5, + 0x85, 0xcf, 0x81, 0x4c, 0x25, 0x95, 0x61, 0xb6, 0x6b, 0x18, 0x0a, 0x48, 0x28, 0x70, 0x41, 0x98, 0x27, 0xc1, 0xc3, + 0xed, 0x87, 0x47, 0x38, 0xea, 0xe4, 0xc2, 0x4c, 0xee, 0x3c, 0x87, 0xee, 0xe4, 0xf0, 0x5c, 0xf5, 0x90, 0x6c, 0x34, + 0x2c, 0xb7, 0x7d, 0x21, 0xf5, 0x20, 0x9a, 0xed, 0xe1, 0x05, 0xeb, 0xa1, 0xbc, 0xd9, 0x2c, 0x0d, 0x20, 0x2f, 0x5a, + 0xab, 0x55, 0x7e, 0xee, 0x1a, 0xe9, 0xbb, 0x73, 0x5c, 0xf3, 0x5d, 0x4e, 0xf0, 0xfc, 0x4d, 0x90, 0x41, 0x00, 0x54, + 0x15, 0xf8, 0x6c, 0x31, 0x0f, 0x70, 0xa0, 0xdf, 0x93, 0x83, 0xbf, 0xfa, 0x1d, 0xb0, 0x00, 0x07, 0xf6, 0x89, 0xb9, + 0x60, 0x58, 0x0d, 0x96, 0x27, 0x65, 0x74, 0x74, 0x1e, 0xdd, 0x00, 0xe3, 0xa0, 0xfe, 0x02, 0x4e, 0xbb, 0xfc, 0x1d, + 0x65, 0x36, 0x4e, 0x88, 0x74, 0xaf, 0x9e, 0xd9, 0x51, 0xad, 0x77, 0x7b, 0x66, 0x72, 0x1c, 0xb8, 0xaa, 0xf0, 0x7a, + 0xc0, 0x77, 0x9e, 0x5d, 0x6c, 0xdb, 0xd7, 0xbe, 0x97, 0x65, 0x0f, 0xc0, 0x79, 0xaf, 0xd7, 0x08, 0xff, 0x26, 0x76, + 0x3e, 0xfd, 0x1b, 0xdc, 0x88, 0xfc, 0x09, 0x55, 0x34, 0x68, 0xbc, 0xd6, 0x86, 0x6f, 0x46, 0xce, 0xea, 0x7d, 0x6b, + 0x1c, 0xec, 0xdf, 0xea, 0x1e, 0x22, 0x37, 0xd4, 0x5e, 0x29, 0x32, 0xb2, 0xaf, 0x8e, 0xd7, 0x21, 0x3c, 0xd3, 0xb7, + 0x1d, 0xf0, 0x70, 0x63, 0xa4, 0xe0, 0x4f, 0x6c, 0xf8, 0x24, 0x0a, 0x21, 0x51, 0x6b, 0x5e, 0xcc, 0x90, 0x62, 0xfa, + 0xd0, 0x1e, 0xaf, 0x6b, 0xe4, 0x73, 0xdd, 0xe3, 0xbc, 0x4e, 0x4c, 0xab, 0x6e, 0xb4, 0xd4, 0xc1, 0x36, 0x59, 0x70, + 0x56, 0xf5, 0xae, 0x25, 0x94, 0xea, 0x41, 0x37, 0xfd, 0x28, 0x67, 0xb3, 0xad, 0x5f, 0x39, 0x36, 0xcf, 0xbe, 0xe5, + 0x60, 0xc8, 0xbb, 0x5f, 0x46, 0xab, 0xba, 0x80, 0x63, 0x37, 0xf4, 0x20, 0x2b, 0xc8, 0xc5, 0xd2, 0x3e, 0xc9, 0xc6, + 0x07, 0x62, 0xb8, 0x2e, 0x1f, 0x68, 0xf3, 0xf0, 0xa0, 0x1a, 0xa9, 0x4c, 0x7c, 0xce, 0xc0, 0xbd, 0x6e, 0x58, 0xd3, + 0x0f, 0xf1, 0x7f, 0xe0, 0x80, 0xaf, 0x90, 0x34, 0x36, 0xea, 0x27, 0x78, 0x38, 0x09, 0x14, 0xde, 0xa6, 0xee, 0x27, + 0xe1, 0x7b, 0xa8, 0xd6, 0x75, 0x2a, 0xc6, 0x09, 0xb4, 0xae, 0x58, 0x29, 0x0b, 0x7b, 0xc7, 0x5d, 0x88, 0xd6, 0xb1, + 0x75, 0x18, 0xb5, 0xaf, 0x2d, 0x5d, 0xe6, 0xe0, 0xff, 0xc2, 0x45, 0xfe, 0xac, 0x80, 0xf0, 0x59, 0xbe, 0x3e, 0xed, + 0x67, 0xe1, 0x3f, 0x27, 0x3c, 0x80, 0x7b, 0xc2, 0x92, 0xe7, 0x2c, 0x9f, 0xc0, 0x86, 0x05, 0xca, 0x81, 0x42, 0xe5, + 0x58, 0xae, 0x56, 0xa1, 0xd4, 0x41, 0x15, 0x6c, 0x4c, 0x5d, 0xfb, 0x78, 0x86, 0xd6, 0xdf, 0x41, 0x5d, 0xec, 0xd4, + 0x23, 0xda, 0x84, 0x15, 0xf9, 0x97, 0x4e, 0x79, 0xe2, 0xf5, 0xb5, 0xab, 0x0f, 0x59, 0x4d, 0xb9, 0x1f, 0x6a, 0x7d, + 0xef, 0x3b, 0x3e, 0x63, 0x62, 0x01, 0xaf, 0x16, 0x61, 0x46, 0x24, 0x53, 0xee, 0x1b, 0x28, 0x08, 0x84, 0x9c, 0xe3, + 0x3e, 0x3e, 0x02, 0x5f, 0xe5, 0x68, 0x9d, 0x48, 0xdc, 0x5b, 0x18, 0x81, 0x8e, 0x55, 0x19, 0xf4, 0x03, 0x70, 0x5a, + 0x02, 0x11, 0x8a, 0x90, 0x80, 0xe5, 0x69, 0xd0, 0x0f, 0xb4, 0x8f, 0x54, 0x00, 0x56, 0x63, 0xa0, 0xe4, 0x0e, 0xf0, + 0x3c, 0xaf, 0x88, 0x98, 0x5f, 0x53, 0x79, 0x95, 0x58, 0xac, 0xcd, 0xb4, 0x8f, 0x3a, 0x15, 0x08, 0x8b, 0x64, 0x53, + 0x50, 0x56, 0x1b, 0xea, 0x02, 0x2c, 0x88, 0xc6, 0x58, 0x1e, 0xdd, 0x00, 0x37, 0xc7, 0x52, 0x5b, 0x74, 0xc9, 0xaf, + 0x41, 0x3d, 0x1d, 0x17, 0xf8, 0x46, 0x33, 0x6c, 0x69, 0x4c, 0xd7, 0x84, 0xe3, 0x84, 0x14, 0x11, 0xbd, 0x83, 0xa0, + 0x12, 0x33, 0x9e, 0xc7, 0x19, 0x9e, 0xd1, 0xbb, 0x78, 0x8a, 0x67, 0x3c, 0x7f, 0x62, 0x96, 0x3d, 0x4e, 0x21, 0xc9, + 0x7d, 0x2c, 0xd6, 0x44, 0xbf, 0x89, 0xf5, 0xbb, 0x64, 0xc5, 0x63, 0xe0, 0x55, 0x64, 0x88, 0x7a, 0xa9, 0xb6, 0x29, + 0x67, 0xaa, 0x32, 0x5e, 0x7f, 0xad, 0x42, 0x8a, 0x13, 0x9c, 0xa1, 0x28, 0x13, 0x98, 0xf5, 0x65, 0xfc, 0x1a, 0x02, + 0x4a, 0x27, 0xd8, 0xbc, 0xa7, 0xc5, 0xef, 0x58, 0xf6, 0x4c, 0x14, 0xef, 0xf5, 0x96, 0xcf, 0x10, 0x14, 0x02, 0x17, + 0x15, 0xd9, 0x84, 0xdb, 0xbd, 0x45, 0x5f, 0x54, 0x4d, 0xd1, 0x3b, 0xd3, 0x94, 0x1d, 0xe2, 0x14, 0x22, 0xf1, 0x46, + 0x53, 0xde, 0x68, 0x63, 0xd6, 0x6f, 0x7d, 0xa7, 0xd1, 0x29, 0x2a, 0x4b, 0x22, 0x0c, 0x4f, 0x04, 0x37, 0xf3, 0x58, + 0x10, 0xd9, 0xcc, 0xad, 0x84, 0xb7, 0xd4, 0xc0, 0x8e, 0x73, 0x9c, 0x88, 0x45, 0xae, 0x62, 0xe1, 0xe1, 0x0d, 0xad, + 0x36, 0xd7, 0xf2, 0xce, 0x40, 0x4c, 0xe1, 0x7b, 0xf3, 0x83, 0xe1, 0x1b, 0xad, 0xe2, 0x7f, 0x0b, 0x86, 0x3d, 0x32, + 0x96, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x19, 0x7e, 0xf2, 0x0e, 0xc0, 0x67, 0x58, 0xc8, 0x7b, 0x48, 0x65, 0x3a, + 0xf5, 0x1e, 0x52, 0x19, 0xa4, 0x6a, 0x57, 0xf2, 0x7d, 0x59, 0x29, 0x8b, 0xfc, 0x06, 0x49, 0x8e, 0x4b, 0x75, 0xb0, + 0x20, 0x32, 0x82, 0x76, 0xb5, 0x28, 0x37, 0xe3, 0x39, 0xc4, 0x14, 0x84, 0xc6, 0xcd, 0x37, 0xbd, 0x83, 0xef, 0x7b, + 0x93, 0xcf, 0x5c, 0xfe, 0xbd, 0xc9, 0xd7, 0x1d, 0x39, 0x8c, 0xaf, 0xdf, 0x76, 0x6a, 0xcb, 0x78, 0x61, 0xb1, 0xf6, + 0x43, 0xf9, 0x82, 0x4b, 0x4b, 0xbf, 0x94, 0x4d, 0xda, 0x78, 0xe2, 0x21, 0x65, 0xb3, 0xe2, 0xe1, 0x3a, 0xb8, 0xdd, + 0x3a, 0x0c, 0x79, 0x93, 0xb4, 0x11, 0x3a, 0xb4, 0xc2, 0x55, 0x1e, 0x6a, 0xc9, 0xe9, 0xf0, 0xf1, 0x11, 0xdc, 0xbd, + 0xcc, 0xf2, 0x0d, 0x5f, 0x29, 0x53, 0xad, 0xd9, 0x6e, 0x1d, 0xf2, 0x9d, 0x55, 0x1a, 0x6d, 0x3c, 0x63, 0x64, 0x09, + 0xce, 0x65, 0xb4, 0x30, 0xaa, 0x06, 0xf0, 0x21, 0x7d, 0x91, 0xff, 0xb6, 0xa0, 0xa9, 0xfe, 0x3e, 0x34, 0x29, 0xaf, + 0x17, 0xca, 0x25, 0x35, 0x39, 0x0c, 0xa2, 0x83, 0x6c, 0x49, 0x2f, 0x27, 0xe4, 0x47, 0x24, 0xea, 0xa2, 0xf3, 0x76, + 0x3f, 0xea, 0x1e, 0xf2, 0x43, 0x1e, 0x03, 0x0f, 0x1b, 0x36, 0x5d, 0x85, 0x66, 0xdb, 0xd5, 0xb9, 0x5a, 0x8c, 0x78, + 0x62, 0x9b, 0xaf, 0x3a, 0x28, 0x53, 0xcd, 0x1c, 0x21, 0x0b, 0x50, 0xcc, 0xf5, 0xe2, 0x65, 0xd7, 0xbb, 0x39, 0xe4, + 0x31, 0xf4, 0x03, 0xb5, 0x3a, 0xa6, 0x56, 0x39, 0xb8, 0xdf, 0x16, 0x80, 0x60, 0xae, 0xa3, 0xda, 0x5c, 0x4c, 0x7a, + 0x33, 0xac, 0x3a, 0x3b, 0xe4, 0xd5, 0x08, 0xfd, 0x32, 0xdb, 0xfd, 0xb9, 0xa9, 0x55, 0x5d, 0x1e, 0x7a, 0x10, 0xf9, + 0x6d, 0xc1, 0x73, 0xbf, 0x53, 0xbf, 0x5b, 0x9b, 0xe3, 0x77, 0x5a, 0x9f, 0xa5, 0x57, 0x64, 0xbb, 0xd7, 0xad, 0x99, + 0xd6, 0x67, 0x7b, 0x0d, 0x3e, 0x82, 0x30, 0x29, 0xbd, 0xd2, 0x89, 0x90, 0x21, 0x3f, 0xfc, 0x80, 0x6c, 0xeb, 0xaf, + 0x17, 0xca, 0xe5, 0x97, 0x88, 0x00, 0xd9, 0x55, 0xd7, 0x65, 0x75, 0xe8, 0xa3, 0x6c, 0xe2, 0xd5, 0x21, 0xf7, 0x56, + 0xee, 0xe9, 0xdd, 0x5c, 0xc4, 0x0e, 0x5f, 0xfb, 0xad, 0x78, 0x0b, 0x39, 0x81, 0x78, 0xd8, 0xee, 0xfc, 0xb2, 0x20, + 0x67, 0x37, 0xb7, 0x50, 0xd2, 0x9f, 0xb8, 0x2b, 0xfd, 0x81, 0x99, 0xeb, 0x06, 0x7e, 0x1e, 0x75, 0x61, 0xea, 0x9b, + 0x3d, 0x1c, 0x76, 0xa0, 0x0f, 0x0d, 0x87, 0xcd, 0x06, 0x5d, 0x66, 0x05, 0x91, 0x2b, 0x5e, 0x18, 0x3c, 0xbb, 0x20, + 0xed, 0x3e, 0x8f, 0xed, 0x66, 0xd2, 0xa2, 0x51, 0xbb, 0xc9, 0xbd, 0x99, 0x01, 0x7e, 0xd9, 0xb2, 0x7e, 0x11, 0xb7, + 0x4e, 0x1e, 0x94, 0x5c, 0xb1, 0x6a, 0x7d, 0x2a, 0x78, 0xd5, 0x1b, 0x8e, 0x37, 0xd3, 0xdd, 0xba, 0xc1, 0xed, 0xae, + 0x83, 0x27, 0xbc, 0xc0, 0x62, 0xd0, 0xda, 0x4d, 0x7c, 0x02, 0x1c, 0x50, 0xd4, 0x7a, 0xd8, 0x05, 0x17, 0xca, 0x12, + 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x0c, 0x1c, 0x4d, 0x49, 0x8f, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, 0xd8, 0xc1, + 0x51, 0xbb, 0xdd, 0xe9, 0xe2, 0xe8, 0xa4, 0x0b, 0x03, 0x6d, 0x44, 0xdd, 0xc3, 0x59, 0x6e, 0x00, 0xe8, 0xe5, 0xac, + 0x6d, 0xbb, 0x8f, 0x21, 0x5a, 0x93, 0x2f, 0x5e, 0xf3, 0xc3, 0x30, 0x6c, 0x47, 0x0f, 0x5b, 0xed, 0xee, 0x59, 0x03, + 0x00, 0xd4, 0xb4, 0x1f, 0xb6, 0xc6, 0xeb, 0x85, 0xaa, 0x57, 0x29, 0x11, 0xbe, 0x5e, 0xad, 0xe1, 0xaa, 0x35, 0xda, + 0xeb, 0x6a, 0x0a, 0xae, 0xaa, 0x15, 0xce, 0x4d, 0x11, 0xa7, 0xb4, 0xf1, 0xb7, 0x45, 0x68, 0x06, 0x12, 0x82, 0x74, + 0x1e, 0x75, 0x3b, 0x5d, 0x64, 0xc6, 0xa2, 0x2c, 0x7e, 0x94, 0xfb, 0x64, 0xab, 0x48, 0x43, 0x01, 0x92, 0x94, 0xb3, + 0x13, 0x0b, 0x90, 0xa8, 0x39, 0xb9, 0x68, 0x37, 0x67, 0x2c, 0x72, 0x13, 0xd0, 0xa9, 0xb0, 0x9c, 0xe5, 0x2a, 0xd8, + 0x24, 0x0f, 0x10, 0xe7, 0x60, 0x5c, 0xf4, 0xb0, 0xdb, 0x7f, 0x18, 0x75, 0x4f, 0x3b, 0x86, 0xe8, 0xf1, 0xf3, 0x4e, + 0x2d, 0x4d, 0x4f, 0x3d, 0xea, 0xea, 0x34, 0xe8, 0x3a, 0x7a, 0xd8, 0x85, 0x32, 0x36, 0xc5, 0x2f, 0x05, 0x51, 0x26, + 0xaa, 0x62, 0x10, 0x5a, 0x22, 0xae, 0xe5, 0x9e, 0xd6, 0xb2, 0xcf, 0x4e, 0x8e, 0x1f, 0x76, 0x7d, 0xa8, 0x95, 0xb3, + 0xd0, 0x0b, 0x6d, 0x27, 0xe2, 0x66, 0x07, 0x4b, 0x8b, 0x0e, 0xa3, 0x6e, 0xbc, 0x35, 0x41, 0xb3, 0x69, 0x0e, 0x35, + 0x0e, 0x78, 0x0a, 0xc7, 0x4b, 0x69, 0xf5, 0x25, 0xde, 0xfd, 0x58, 0x65, 0x68, 0xe2, 0x2b, 0x9c, 0xdd, 0x3d, 0xa5, + 0xf7, 0x90, 0xa4, 0x7f, 0x55, 0x79, 0x45, 0xf3, 0xaf, 0x54, 0xbe, 0xa1, 0x10, 0x3a, 0x23, 0x1f, 0x06, 0x36, 0xb0, + 0x77, 0x3d, 0xf7, 0x27, 0x70, 0x11, 0x66, 0x39, 0x5c, 0x68, 0x3a, 0x25, 0x68, 0xc5, 0x0b, 0x8c, 0x7c, 0x56, 0x57, + 0x0f, 0xab, 0xcf, 0x63, 0x6b, 0x52, 0xe0, 0xeb, 0xb6, 0x9e, 0xf3, 0xef, 0x95, 0x8b, 0xca, 0xab, 0xec, 0xa8, 0x8b, + 0x22, 0x7b, 0x59, 0x1e, 0xb5, 0x51, 0xe4, 0x99, 0x90, 0xd8, 0x23, 0x39, 0x49, 0xc8, 0x20, 0xb8, 0x0b, 0x70, 0x70, + 0x1f, 0xe0, 0xc0, 0xf8, 0x30, 0x7f, 0x00, 0x37, 0xf2, 0x00, 0x07, 0xc6, 0x95, 0x39, 0xc0, 0x81, 0x62, 0x39, 0x44, + 0xd4, 0x0a, 0x86, 0x38, 0x83, 0xd2, 0xda, 0xb3, 0xba, 0x2c, 0x7d, 0xe5, 0xbe, 0x4a, 0xd7, 0x6b, 0x93, 0xe2, 0x49, + 0x99, 0x53, 0xbd, 0x43, 0xcd, 0x8b, 0xd0, 0x01, 0x75, 0xcc, 0x7a, 0x80, 0x41, 0x00, 0xa1, 0xf7, 0xee, 0x45, 0xb9, + 0x2a, 0x18, 0x07, 0x3b, 0x86, 0x95, 0x06, 0x9f, 0xf3, 0xc0, 0x3f, 0xc3, 0x02, 0x3c, 0xce, 0x5d, 0x61, 0x10, 0x2b, + 0xdc, 0xef, 0x4c, 0x88, 0xb9, 0xfb, 0xad, 0x44, 0xf9, 0x0b, 0xde, 0x21, 0xb1, 0x16, 0x2d, 0x60, 0xb9, 0x65, 0x62, + 0xff, 0x8c, 0x58, 0x7d, 0x04, 0x37, 0x63, 0x1b, 0x9f, 0x0d, 0x24, 0xc2, 0x1b, 0x2d, 0x50, 0x39, 0xf9, 0xf0, 0xc6, + 0xc4, 0x0a, 0xd2, 0x9f, 0x10, 0x2c, 0x0c, 0xe2, 0x01, 0x0b, 0xb8, 0xd0, 0x98, 0x14, 0x4c, 0xca, 0xc0, 0x04, 0xd1, + 0x0b, 0x44, 0xee, 0x5e, 0x45, 0x74, 0x29, 0xe3, 0x3c, 0xd0, 0x1d, 0xd6, 0x67, 0x6b, 0xc4, 0xe1, 0x4c, 0x14, 0x32, + 0x36, 0x4f, 0xa4, 0x38, 0x30, 0xce, 0xcb, 0xf7, 0x07, 0xe3, 0x2c, 0x59, 0x63, 0x73, 0x87, 0x5d, 0x16, 0xb2, 0x57, + 0xda, 0x7e, 0xa9, 0x24, 0x59, 0x7f, 0x6b, 0x42, 0xb2, 0x36, 0x23, 0x6f, 0xa2, 0xd5, 0x80, 0xaa, 0x48, 0x1a, 0x50, + 0xd8, 0x44, 0x63, 0x89, 0x97, 0x65, 0xc9, 0x78, 0x59, 0x2e, 0xc3, 0x49, 0xab, 0xb5, 0x5e, 0xe3, 0x82, 0xe9, 0xa8, + 0x30, 0x3b, 0x4b, 0x40, 0xbe, 0x9c, 0x8a, 0x5b, 0x2f, 0x57, 0xc6, 0xe5, 0x2c, 0xf5, 0x12, 0x05, 0x9e, 0x11, 0x6c, + 0xb0, 0xc6, 0x5f, 0xb9, 0xe4, 0x00, 0x4f, 0x3b, 0xbb, 0x91, 0x10, 0x19, 0xa3, 0x10, 0x3c, 0xcc, 0x6b, 0x72, 0x8d, + 0xa7, 0x3c, 0x65, 0xbb, 0xdb, 0x04, 0x33, 0xe6, 0x7f, 0xaf, 0x45, 0x87, 0x40, 0x86, 0xdd, 0xd3, 0xa8, 0x03, 0x8b, + 0xb8, 0x82, 0x0e, 0x7c, 0x19, 0x3c, 0xf5, 0x71, 0x33, 0xa3, 0xf7, 0x62, 0xa1, 0x00, 0x2e, 0x0b, 0x25, 0xde, 0xd8, + 0xb8, 0x07, 0xfb, 0x2d, 0xec, 0x42, 0x20, 0x2c, 0x21, 0x64, 0x40, 0x0b, 0x9b, 0x10, 0x15, 0x2d, 0x3c, 0x12, 0x4a, + 0x89, 0x59, 0xdc, 0xc2, 0x3a, 0x5e, 0x44, 0x6b, 0x5d, 0x06, 0xf5, 0xba, 0xc9, 0xdd, 0x5b, 0x92, 0xd5, 0x26, 0x58, + 0x58, 0xe9, 0x50, 0x11, 0xe5, 0xdd, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbf, 0x7e, 0x65, 0x43, 0x36, 0xf3, 0x31, + 0xb8, 0x6c, 0x5a, 0xd5, 0xd8, 0x8d, 0x7e, 0x84, 0x29, 0xac, 0x14, 0xa5, 0x46, 0x38, 0x85, 0x96, 0x5f, 0xe4, 0x2a, + 0x8b, 0xcc, 0xe5, 0xc5, 0x33, 0x51, 0xcc, 0xa8, 0xb9, 0x31, 0xc2, 0x37, 0xb9, 0x7d, 0x75, 0x5d, 0x3f, 0xec, 0x52, + 0x4d, 0xf2, 0xdd, 0xe6, 0x55, 0xc4, 0x22, 0xd1, 0xf2, 0x2b, 0x68, 0x03, 0x74, 0xe5, 0xf2, 0xd1, 0xdc, 0x82, 0xd8, + 0xc0, 0xf7, 0x1e, 0x79, 0x79, 0x6b, 0xa8, 0x4b, 0x10, 0x34, 0xb8, 0xc6, 0x4f, 0x56, 0xf0, 0xc4, 0xbb, 0x2e, 0xd4, + 0xec, 0x91, 0x15, 0x2f, 0x82, 0x56, 0x50, 0x7f, 0x74, 0x56, 0xab, 0x12, 0x5c, 0xd0, 0xd4, 0x28, 0x13, 0x20, 0x7a, + 0x94, 0xef, 0xdb, 0x71, 0x10, 0x4d, 0xdc, 0xdd, 0xf3, 0x45, 0xdb, 0xd1, 0xd9, 0xac, 0x52, 0x27, 0x96, 0x57, 0x26, + 0xe0, 0xe1, 0x68, 0x5e, 0x90, 0x41, 0xd8, 0x4b, 0x64, 0xa5, 0xf6, 0xd0, 0xe5, 0xa2, 0x5e, 0x98, 0x9d, 0xb7, 0x59, + 0xf3, 0x64, 0xb5, 0xca, 0x2e, 0xda, 0xac, 0xdd, 0x35, 0xef, 0xcd, 0x05, 0x32, 0x01, 0x9a, 0xcb, 0xc7, 0x3c, 0x09, + 0x40, 0x3b, 0x3b, 0x4e, 0x74, 0x38, 0x05, 0x17, 0x21, 0x99, 0x2c, 0x54, 0xd5, 0x97, 0x00, 0xe3, 0x52, 0x62, 0xf4, + 0xf8, 0x05, 0xea, 0xb7, 0xe3, 0x6d, 0x57, 0xe9, 0x66, 0xfb, 0xd0, 0xbb, 0x70, 0x29, 0x10, 0xee, 0x40, 0xc8, 0x03, + 0xd0, 0xef, 0x2e, 0x73, 0x30, 0x0d, 0x02, 0x54, 0xce, 0x41, 0xa4, 0xe5, 0xb3, 0xc5, 0xec, 0x59, 0x41, 0xf5, 0x32, + 0x3c, 0xe1, 0x13, 0xae, 0x64, 0x4c, 0x41, 0xba, 0xdd, 0x95, 0xbe, 0xde, 0x2d, 0x41, 0x25, 0xb5, 0xc0, 0xb3, 0x91, + 0xe2, 0xc9, 0x17, 0x69, 0x17, 0x0e, 0x61, 0xbd, 0xb2, 0x12, 0x27, 0x68, 0x8d, 0x33, 0x31, 0xa1, 0x05, 0x57, 0xd3, + 0xd9, 0xbf, 0xb5, 0x3a, 0x6c, 0xa0, 0x86, 0xfa, 0xc2, 0x0a, 0x40, 0x42, 0xf3, 0x74, 0xb5, 0xe2, 0x47, 0xdf, 0xbf, + 0x4f, 0x72, 0x3e, 0xe1, 0x6d, 0xdc, 0xc1, 0xc7, 0xb8, 0x8b, 0xdb, 0x2d, 0xdc, 0xee, 0xc2, 0xd5, 0x7d, 0x92, 0x2d, + 0x52, 0x06, 0xf6, 0xb1, 0xab, 0x95, 0xba, 0x88, 0xce, 0x0e, 0xcb, 0x70, 0xfb, 0xaa, 0x88, 0x2c, 0xba, 0x78, 0x51, + 0xdf, 0x6d, 0xb8, 0xbc, 0x20, 0xf0, 0x63, 0xb5, 0x8d, 0x7d, 0xd5, 0x49, 0xa9, 0x5f, 0xb8, 0x38, 0xee, 0x83, 0x3d, + 0xb7, 0x59, 0xd9, 0x26, 0x98, 0x7d, 0x9b, 0x9f, 0x71, 0xf5, 0xb3, 0xa9, 0x4a, 0xc4, 0x70, 0xd0, 0xab, 0xd0, 0x03, + 0x5d, 0x90, 0xf6, 0xc1, 0x01, 0x58, 0x1d, 0x79, 0xb3, 0xe1, 0x26, 0xfa, 0x01, 0x6f, 0xd6, 0xd2, 0x20, 0x58, 0x01, + 0x18, 0x77, 0xbe, 0xe1, 0x64, 0x69, 0x60, 0xab, 0x80, 0x0a, 0xab, 0xc2, 0x0f, 0x28, 0xe7, 0x93, 0x0a, 0x2d, 0x44, + 0xc3, 0x11, 0x66, 0x23, 0x9d, 0xec, 0xb7, 0xb0, 0x18, 0x8f, 0x25, 0x53, 0x70, 0x74, 0x14, 0xec, 0x2b, 0x2b, 0xa4, + 0x3e, 0x45, 0x46, 0x6c, 0xc2, 0xf3, 0x4b, 0xf5, 0x89, 0x15, 0x42, 0x7f, 0x6a, 0x0d, 0x46, 0x1c, 0xe8, 0x55, 0x0c, + 0x70, 0x92, 0xf1, 0x39, 0x54, 0x9d, 0x14, 0xe0, 0xf4, 0x03, 0x7f, 0x79, 0x1a, 0xfb, 0x6d, 0x02, 0xf9, 0xfa, 0x60, + 0xc2, 0xba, 0xe0, 0xb4, 0xa0, 0xb7, 0xaf, 0xf3, 0x2b, 0xd8, 0x51, 0x97, 0x05, 0xa3, 0x90, 0x0d, 0x49, 0xef, 0xa0, + 0x29, 0xf8, 0x80, 0x36, 0x5f, 0x6a, 0xc0, 0xc5, 0x67, 0xfa, 0xc3, 0x54, 0x74, 0x41, 0x0b, 0xa3, 0xb2, 0x2d, 0x9d, + 0xa9, 0x4f, 0xe9, 0x2a, 0xd3, 0x84, 0x85, 0x2a, 0xa7, 0xb0, 0xc6, 0x36, 0xea, 0x89, 0x3f, 0x98, 0x94, 0xca, 0x69, + 0x3c, 0x18, 0xea, 0xbf, 0xaf, 0x4d, 0xc9, 0x16, 0xb6, 0x41, 0x67, 0xd6, 0x58, 0xbf, 0x18, 0xea, 0x95, 0x6f, 0x63, + 0xb8, 0x87, 0x85, 0x67, 0x2b, 0x6b, 0xe4, 0xf3, 0xc4, 0x91, 0xcd, 0x93, 0xf5, 0x5a, 0x0f, 0x44, 0xc6, 0xa0, 0x07, + 0x7a, 0xeb, 0xb6, 0x4d, 0x0b, 0xb6, 0x47, 0xf9, 0xd5, 0x6d, 0xe1, 0x19, 0x87, 0x57, 0x38, 0x5d, 0x7b, 0xd7, 0xaa, + 0x10, 0x5f, 0x2c, 0x48, 0x5a, 0x5e, 0x8a, 0x99, 0x8e, 0xd7, 0xd9, 0x31, 0xf6, 0x46, 0x0e, 0xf4, 0xfc, 0xfa, 0x8b, + 0x81, 0xb5, 0xfb, 0xfd, 0xa6, 0x2c, 0x98, 0xd1, 0x11, 0xcb, 0xca, 0x09, 0x25, 0xee, 0xfc, 0x7c, 0xc3, 0xa3, 0x0a, + 0x15, 0xec, 0xf3, 0x55, 0xb0, 0xa7, 0x4d, 0x84, 0xcb, 0x19, 0xfd, 0xcb, 0xfc, 0x30, 0x81, 0x75, 0x4a, 0x2d, 0x5b, + 0x52, 0x08, 0x29, 0x2f, 0x4d, 0x9a, 0x39, 0x7a, 0xe0, 0x88, 0x7c, 0x09, 0x5d, 0x00, 0xaf, 0x9f, 0x16, 0x62, 0xae, + 0x11, 0xc1, 0xfe, 0xb6, 0xe3, 0xd6, 0xbe, 0x02, 0xe0, 0xed, 0xb0, 0x57, 0xfd, 0xd3, 0x02, 0xf6, 0x37, 0x28, 0x4b, + 0xba, 0xf1, 0x76, 0xcc, 0xf1, 0x5f, 0x08, 0x08, 0x97, 0x6e, 0xf0, 0x30, 0xb2, 0xe8, 0x54, 0xb2, 0x66, 0xe5, 0xcf, + 0xad, 0x92, 0x80, 0x61, 0xf5, 0x82, 0x3e, 0x1b, 0xb7, 0x55, 0xdc, 0x64, 0xfe, 0x07, 0x15, 0x34, 0x16, 0x7c, 0x6b, + 0x24, 0x15, 0xcb, 0xe2, 0xb6, 0x4f, 0x9d, 0xff, 0xaa, 0x73, 0x5c, 0xfb, 0xaa, 0xf6, 0x44, 0xe6, 0x48, 0x87, 0x27, + 0x0e, 0xd0, 0xc1, 0xc1, 0x46, 0x06, 0x1d, 0x03, 0xe0, 0x91, 0x65, 0xbf, 0xdc, 0xf2, 0x39, 0x76, 0x4c, 0x6b, 0x1e, + 0x8b, 0xc0, 0x67, 0xee, 0x1c, 0x37, 0x67, 0x26, 0xf2, 0x84, 0xca, 0xa9, 0x2b, 0x0c, 0x70, 0x7c, 0xbc, 0x95, 0x0a, + 0xf8, 0x1e, 0xac, 0x77, 0x4c, 0x60, 0x83, 0xdf, 0x32, 0x93, 0xda, 0x55, 0xd0, 0x2d, 0xd0, 0x72, 0x17, 0x53, 0xb9, + 0xb1, 0xc0, 0xc1, 0xe6, 0x44, 0x76, 0x0e, 0x7d, 0xa3, 0x4e, 0xc9, 0x7a, 0x3c, 0xd9, 0x6d, 0xf4, 0x95, 0xcb, 0x5d, + 0xc9, 0x15, 0x6d, 0x1b, 0xb1, 0xea, 0x99, 0x5c, 0x55, 0x99, 0x3a, 0x55, 0xd7, 0xbc, 0x95, 0xa5, 0x4d, 0x69, 0x97, + 0x64, 0xee, 0xb6, 0x98, 0x7f, 0x15, 0xde, 0x68, 0x94, 0x17, 0xa1, 0x60, 0x8f, 0x25, 0x87, 0x3d, 0x4e, 0xe0, 0x7a, + 0x61, 0xb5, 0x0a, 0xe1, 0xcf, 0xae, 0x31, 0xec, 0x32, 0x5d, 0xfa, 0xc0, 0x37, 0xf8, 0x15, 0x2f, 0x52, 0xaf, 0xb5, + 0x83, 0x04, 0xeb, 0x2e, 0x3b, 0x68, 0x38, 0x4e, 0xdc, 0x17, 0xbc, 0x13, 0xad, 0x9c, 0xcb, 0xc1, 0x24, 0xf9, 0xc6, + 0xdb, 0x72, 0x25, 0x6b, 0x59, 0x0b, 0xf3, 0xbe, 0x21, 0xc1, 0x10, 0xb3, 0x29, 0xad, 0xe3, 0x56, 0xd4, 0x46, 0x81, + 0x2d, 0x56, 0xa1, 0xff, 0xb7, 0x8a, 0x24, 0x26, 0xf3, 0xbf, 0x4e, 0x4f, 0x4f, 0x6d, 0x8a, 0xb5, 0xf9, 0x93, 0xda, + 0x03, 0x4e, 0x27, 0xb0, 0xaf, 0x3c, 0x61, 0x5a, 0x87, 0xfc, 0x16, 0x86, 0x42, 0x24, 0xb9, 0x70, 0xec, 0x12, 0x44, + 0xe5, 0x02, 0xca, 0x03, 0xec, 0xdf, 0x93, 0x8d, 0x72, 0xee, 0x9d, 0x24, 0x17, 0x47, 0xb8, 0x6c, 0x90, 0x7d, 0xd5, + 0x9f, 0x03, 0x63, 0x26, 0x03, 0x4f, 0x03, 0x04, 0xd8, 0xfc, 0xd6, 0x2c, 0xad, 0xb5, 0x94, 0xc1, 0x81, 0x12, 0x8b, + 0x64, 0x6a, 0x34, 0xff, 0xf6, 0x43, 0x97, 0xb5, 0x6f, 0xec, 0x40, 0x50, 0x2e, 0xb2, 0xb4, 0xe1, 0x30, 0x83, 0x1f, + 0xcb, 0xc8, 0x97, 0x7b, 0xaf, 0xd8, 0x82, 0xfd, 0x88, 0xf7, 0xaa, 0x14, 0xf8, 0xb8, 0x2c, 0x38, 0xcd, 0x7e, 0xc4, + 0x7b, 0x55, 0x04, 0x4c, 0x70, 0x85, 0xd4, 0x41, 0x24, 0xb1, 0x7e, 0x4f, 0x3a, 0x0e, 0x72, 0xa0, 0xa0, 0x59, 0xa0, + 0x0f, 0xb2, 0xe7, 0x36, 0x68, 0x62, 0xd4, 0xc1, 0x36, 0xee, 0x97, 0x09, 0x85, 0x6a, 0x22, 0x88, 0x43, 0x20, 0xb9, + 0x72, 0x36, 0xfa, 0xeb, 0xf1, 0xc6, 0x82, 0x68, 0x65, 0x32, 0xb9, 0x78, 0xce, 0xc3, 0x7c, 0x73, 0xb1, 0x90, 0x5f, + 0xcd, 0x5b, 0xa0, 0x5a, 0x95, 0x2a, 0xdd, 0x2f, 0xbe, 0x5d, 0x30, 0xf1, 0x8a, 0xe8, 0xad, 0x77, 0x79, 0x07, 0xcf, + 0x9d, 0xdf, 0x05, 0x2e, 0x09, 0x9e, 0x04, 0xd7, 0x98, 0xea, 0x5e, 0x80, 0x07, 0x42, 0xcf, 0xa4, 0x0a, 0xb0, 0xce, + 0x93, 0x10, 0x49, 0x6c, 0xbf, 0x85, 0x2d, 0x6b, 0xf4, 0x22, 0x77, 0x42, 0x0a, 0x9c, 0xab, 0xba, 0x89, 0x19, 0xe5, + 0x3a, 0xba, 0xd8, 0xa5, 0x9c, 0xb3, 0x44, 0x19, 0x04, 0xd8, 0xb7, 0x68, 0x28, 0xf2, 0xe7, 0x1a, 0x14, 0xfa, 0x2d, + 0x6b, 0x9b, 0x72, 0x05, 0x8b, 0xe7, 0xa5, 0x00, 0x51, 0xe3, 0xf9, 0xa4, 0xac, 0x33, 0xcf, 0x16, 0x13, 0x9e, 0x57, + 0xc8, 0x50, 0x30, 0x39, 0x17, 0x39, 0x3c, 0x25, 0x51, 0x16, 0xd1, 0x74, 0xa8, 0x86, 0xef, 0x86, 0x84, 0x95, 0x75, + 0xf4, 0x31, 0xc5, 0xf3, 0xaa, 0x06, 0x30, 0x17, 0x97, 0xfe, 0x9b, 0xf3, 0xf2, 0x75, 0xfe, 0x4e, 0xcc, 0xab, 0x7c, + 0x47, 0xe3, 0x5c, 0xc4, 0x76, 0x6b, 0x37, 0x8c, 0xd6, 0xfa, 0xb5, 0x27, 0x6f, 0xfb, 0x7e, 0xe0, 0xd5, 0x0b, 0x68, + 0x6b, 0xfd, 0x5e, 0x54, 0x99, 0x35, 0x62, 0xe5, 0xe3, 0x08, 0x55, 0x7b, 0xf5, 0xaa, 0xb9, 0xad, 0x08, 0x50, 0x29, + 0x78, 0xba, 0x95, 0xff, 0x44, 0x99, 0x7c, 0x73, 0x0e, 0x95, 0xe1, 0x81, 0x1c, 0x19, 0xaa, 0x7a, 0xc0, 0x45, 0xf9, + 0xa1, 0x9f, 0xbe, 0x0a, 0x74, 0xe0, 0xdc, 0x5d, 0x17, 0xc8, 0x9c, 0xc9, 0x50, 0xe0, 0xe5, 0x80, 0x0e, 0x63, 0x23, + 0x0f, 0xc5, 0x02, 0x6c, 0x7b, 0x6e, 0x0b, 0xae, 0x5c, 0x84, 0x5e, 0x3c, 0x60, 0xc3, 0x78, 0x59, 0x8f, 0xe2, 0x6b, + 0xe2, 0x08, 0x3b, 0x73, 0x4e, 0x1d, 0xf6, 0x96, 0x0e, 0x71, 0x46, 0xc0, 0xf6, 0xd8, 0xb1, 0xa7, 0x6f, 0xc2, 0x04, + 0xf5, 0xeb, 0x1c, 0xfe, 0x72, 0x8d, 0x33, 0x9c, 0xa0, 0xf8, 0x32, 0x84, 0x0b, 0xac, 0x35, 0x06, 0xf0, 0x25, 0x86, + 0x54, 0x81, 0x47, 0x6a, 0xa2, 0x25, 0x56, 0x7b, 0x11, 0x88, 0x96, 0xca, 0xbf, 0x1d, 0x67, 0x2e, 0x0e, 0xb6, 0xe6, + 0x5e, 0x9f, 0x69, 0xe1, 0x70, 0x92, 0x84, 0xb5, 0x73, 0x86, 0x93, 0x8b, 0x7d, 0x5e, 0x3b, 0x31, 0xc1, 0xda, 0xdb, + 0x3f, 0x55, 0x40, 0x8f, 0x06, 0xa7, 0x8a, 0xa1, 0x21, 0x10, 0x33, 0x01, 0xbc, 0x99, 0xfd, 0xa3, 0xcd, 0xc3, 0xf9, + 0x60, 0x8d, 0xbd, 0xaf, 0xb8, 0xd6, 0xd5, 0xa6, 0x12, 0x65, 0xbd, 0xc6, 0x83, 0x69, 0x82, 0xd3, 0x04, 0xcf, 0x93, + 0xa1, 0x77, 0xdc, 0xcc, 0x12, 0xdf, 0xa4, 0x6b, 0xb5, 0x7a, 0x6a, 0xcd, 0x08, 0x91, 0xf9, 0x69, 0xe8, 0x0f, 0xea, + 0x03, 0xc2, 0xc7, 0x90, 0x05, 0xb4, 0xa4, 0x6f, 0xff, 0x36, 0xcc, 0x33, 0xd9, 0xa8, 0x11, 0xf2, 0xc8, 0x90, 0x91, + 0xbe, 0xfb, 0x51, 0x66, 0x99, 0xd6, 0x1a, 0xc1, 0xfc, 0x6e, 0x2f, 0x68, 0xb8, 0xf6, 0x3c, 0x2d, 0x5b, 0x69, 0xb6, + 0x03, 0x88, 0x62, 0x8c, 0x93, 0x94, 0xb7, 0x46, 0x62, 0xb5, 0x0a, 0x4d, 0x0a, 0xe1, 0xd1, 0x8c, 0x51, 0xb9, 0x28, + 0xf4, 0xcb, 0x71, 0x61, 0x8e, 0x22, 0xcd, 0xef, 0x62, 0x6b, 0x23, 0x9a, 0x83, 0xdb, 0x23, 0x18, 0x6e, 0x84, 0x92, + 0x88, 0x9a, 0xc8, 0x3d, 0x4a, 0x2a, 0xcb, 0x20, 0x49, 0xa4, 0x16, 0xf9, 0xcd, 0x75, 0xa9, 0x39, 0x0c, 0xec, 0x1f, + 0xed, 0x0b, 0x08, 0x37, 0x6f, 0x13, 0x5a, 0x8c, 0xe8, 0x04, 0xd8, 0x58, 0x88, 0x43, 0xb8, 0x95, 0xb0, 0x5a, 0x0d, + 0x86, 0x3d, 0x43, 0x9e, 0xed, 0xcb, 0x79, 0x65, 0x43, 0xbb, 0x1b, 0x80, 0xab, 0x6e, 0x43, 0xcd, 0x95, 0xd6, 0xfd, + 0x50, 0xfd, 0xb8, 0x17, 0xb7, 0x49, 0xf6, 0x7d, 0x8e, 0xea, 0x09, 0xee, 0x9a, 0x05, 0xb8, 0x0e, 0x5d, 0x85, 0x53, + 0xbc, 0x30, 0x36, 0x9c, 0xfa, 0x25, 0x27, 0xaa, 0x1f, 0x70, 0x82, 0x77, 0xa3, 0x09, 0x1b, 0x24, 0x43, 0x9c, 0xba, + 0x38, 0xdf, 0xfb, 0x6f, 0xc3, 0x14, 0xa1, 0x82, 0x68, 0x98, 0x1a, 0x97, 0xed, 0xb4, 0xb2, 0xdb, 0xd7, 0x99, 0x9a, + 0x61, 0xd0, 0x46, 0xcc, 0xa9, 0x6f, 0xc4, 0x9c, 0x35, 0x1a, 0x68, 0x41, 0x52, 0x30, 0x62, 0x5e, 0x78, 0xad, 0x2d, + 0xcc, 0x2b, 0x9f, 0x5e, 0x7b, 0x0b, 0x84, 0x7a, 0x1c, 0x68, 0x9a, 0x82, 0xf7, 0x3c, 0xaa, 0xf7, 0xd4, 0xdd, 0xeb, + 0x52, 0x47, 0x1d, 0x50, 0x24, 0x8c, 0x2f, 0xdc, 0x24, 0x8c, 0x6b, 0xb8, 0x19, 0xf7, 0x58, 0x8f, 0xdb, 0xda, 0x36, + 0xe4, 0x03, 0x31, 0x48, 0x86, 0xc3, 0x9e, 0x70, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x5e, 0x00, 0xa9, 0x16, 0xef, 0xab, + 0xda, 0xbc, 0xf2, 0xe6, 0xee, 0x61, 0xd1, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, 0x1f, 0xaa, 0xe2, 0x83, 0x1d, + 0x75, 0x20, 0x0a, 0x5a, 0xdc, 0xaa, 0x09, 0xa4, 0xc6, 0xcc, 0x2e, 0x54, 0xcd, 0x1c, 0x1d, 0x4a, 0x08, 0x43, 0x96, + 0x57, 0xdd, 0xdd, 0xe7, 0x9e, 0x6a, 0x88, 0xc3, 0xa9, 0x7f, 0x65, 0x8c, 0x58, 0xc3, 0xa0, 0x93, 0x06, 0xda, 0x48, + 0xd2, 0x2c, 0x1f, 0x3c, 0xfa, 0x03, 0x56, 0x02, 0x2e, 0xf8, 0xb2, 0x4e, 0xd2, 0x86, 0x04, 0x6f, 0x59, 0xa2, 0x34, + 0x1f, 0xc2, 0x2d, 0x82, 0xf2, 0xc8, 0xc4, 0xda, 0xb4, 0x95, 0x0c, 0xe4, 0xaa, 0x2e, 0x6f, 0x3c, 0xf4, 0xbc, 0x4f, + 0xaa, 0xdd, 0x00, 0x1c, 0x99, 0x37, 0xb0, 0x64, 0x6b, 0x9f, 0x80, 0x47, 0x3e, 0xae, 0x10, 0xc4, 0x2d, 0x85, 0x8a, + 0x74, 0xa0, 0xea, 0x6b, 0xd8, 0xa0, 0x78, 0x0e, 0x0e, 0x82, 0x56, 0x82, 0xc3, 0xe0, 0x5d, 0x66, 0x34, 0xc9, 0x1a, + 0xb7, 0x66, 0x24, 0x9c, 0xaf, 0x56, 0x2d, 0x74, 0xf8, 0xb7, 0x7e, 0x8b, 0x79, 0x5c, 0x2a, 0xdc, 0xc7, 0x95, 0xc2, + 0x1d, 0x2c, 0x01, 0xc9, 0xd8, 0xd3, 0xb5, 0x63, 0xe1, 0xab, 0xd1, 0x21, 0x4c, 0xf8, 0x0b, 0x08, 0x1a, 0x6d, 0x8f, + 0x25, 0xd0, 0xb3, 0x6f, 0x15, 0x30, 0xba, 0xf6, 0xb2, 0x04, 0xd2, 0x82, 0xbb, 0xdb, 0x04, 0x5a, 0x85, 0xa8, 0x7d, + 0xfe, 0xf4, 0x73, 0x0e, 0x3c, 0xb2, 0xfe, 0x5c, 0x33, 0xcd, 0xba, 0x17, 0xf4, 0x56, 0x37, 0x1f, 0x8e, 0x71, 0x73, + 0x6c, 0xc0, 0x79, 0xd4, 0x81, 0x9f, 0x06, 0xa2, 0x47, 0x1d, 0x6c, 0x53, 0xf1, 0xb8, 0x04, 0xb2, 0x8f, 0x9e, 0xd6, + 0x40, 0x0a, 0x58, 0xe9, 0xd0, 0x68, 0x91, 0x26, 0x68, 0xb5, 0x9a, 0x9c, 0x93, 0x16, 0x42, 0x4b, 0x79, 0xcb, 0x55, + 0x32, 0x05, 0x1f, 0x69, 0x50, 0x0c, 0xbc, 0xa1, 0x6a, 0x1a, 0x22, 0x3c, 0x46, 0xcb, 0x94, 0x8d, 0xe9, 0x22, 0x53, + 0x71, 0xde, 0xe7, 0x91, 0x89, 0xa4, 0xcb, 0x4c, 0x24, 0xb8, 0xa3, 0x0e, 0x9e, 0x68, 0xfe, 0xf2, 0xb1, 0x36, 0x07, + 0x29, 0x12, 0x9d, 0x3c, 0xd1, 0x09, 0x98, 0x47, 0x49, 0x26, 0x24, 0x33, 0xcd, 0xf4, 0x8c, 0x6d, 0x39, 0xc4, 0xe2, + 0x0e, 0x54, 0xc1, 0xb5, 0x15, 0x65, 0x10, 0x4f, 0x49, 0xde, 0xcf, 0x8f, 0x3a, 0xf1, 0x04, 0xf3, 0x08, 0x38, 0xbd, + 0x77, 0x22, 0x64, 0x8d, 0xf2, 0x56, 0x74, 0x86, 0x0e, 0xa7, 0x58, 0x56, 0x97, 0xa8, 0x33, 0x74, 0x38, 0x41, 0x78, + 0xd6, 0x20, 0x59, 0x0e, 0x1e, 0xc3, 0x3c, 0xff, 0x3f, 0x52, 0xfe, 0x9b, 0xc3, 0x86, 0x98, 0xcf, 0x6f, 0x61, 0xa7, + 0xb0, 0x34, 0x88, 0x33, 0x02, 0x5e, 0x8b, 0xed, 0x53, 0x9c, 0x90, 0x49, 0x33, 0x73, 0x01, 0xf7, 0x74, 0x2b, 0x8d, + 0x3b, 0x85, 0x0e, 0x13, 0x9c, 0x6e, 0x26, 0x85, 0x7a, 0xae, 0xcd, 0x2c, 0x4e, 0xe0, 0x7c, 0xaf, 0x46, 0x61, 0xcb, + 0x2f, 0x36, 0x93, 0xfc, 0xf2, 0x16, 0xb8, 0xcd, 0x14, 0xcb, 0x26, 0xc5, 0x19, 0x9e, 0x35, 0x5f, 0xe1, 0x59, 0xf3, + 0x43, 0x99, 0xd1, 0x58, 0x60, 0x09, 0xc1, 0xfb, 0x20, 0x11, 0xcf, 0xaa, 0xe4, 0x14, 0xcb, 0x86, 0x2e, 0x8f, 0x67, + 0x8d, 0xaa, 0x74, 0x73, 0x81, 0x65, 0x43, 0x97, 0x6e, 0x7c, 0xc0, 0xb3, 0xc6, 0xab, 0x7f, 0x31, 0xe9, 0x20, 0x06, + 0x74, 0x99, 0xa3, 0x65, 0x62, 0x86, 0x78, 0xfd, 0xdb, 0xdb, 0x77, 0xed, 0x9b, 0xce, 0xe1, 0x04, 0xbb, 0xf5, 0x4b, + 0x34, 0x8e, 0x25, 0x2a, 0x64, 0x4d, 0x80, 0x68, 0x82, 0x3b, 0x87, 0x53, 0xdc, 0x39, 0x4c, 0x6c, 0x53, 0xeb, 0x59, + 0x83, 0xdc, 0x29, 0x1f, 0x8a, 0x2a, 0x88, 0x7d, 0xf8, 0xb8, 0xc9, 0xc6, 0x13, 0x54, 0x03, 0x25, 0x3a, 0x9c, 0xd4, + 0x40, 0x05, 0xdf, 0x8b, 0xda, 0x77, 0x55, 0xaf, 0xc2, 0x20, 0x03, 0x25, 0xe4, 0xaf, 0xb9, 0x06, 0x4f, 0x2d, 0x45, + 0x43, 0xc6, 0x4f, 0x31, 0x40, 0xf9, 0x0e, 0x28, 0xb4, 0xf2, 0x44, 0x0f, 0xdd, 0x9b, 0x8e, 0x4e, 0xfc, 0xff, 0x79, + 0x32, 0xe5, 0xd0, 0xcb, 0x2d, 0xb3, 0x35, 0x3d, 0x3b, 0x19, 0x7f, 0xf8, 0xc0, 0x63, 0xfd, 0x5f, 0x3b, 0x50, 0xac, + 0x41, 0x8a, 0xff, 0x2f, 0x1d, 0x9d, 0x0f, 0x46, 0xc8, 0x0a, 0xe2, 0xc2, 0x22, 0xfe, 0xf7, 0x87, 0xe5, 0x75, 0x5f, + 0x6c, 0x75, 0x5f, 0xe8, 0xee, 0xfd, 0xa6, 0xb5, 0x2a, 0x27, 0xae, 0x2a, 0x19, 0xf2, 0x5f, 0xa7, 0x5b, 0x5b, 0xa0, + 0x91, 0x35, 0x7a, 0x36, 0xf1, 0x1b, 0xdc, 0x6f, 0xc7, 0x3b, 0x90, 0x79, 0xcd, 0xcd, 0xd3, 0xa0, 0x70, 0xf8, 0x7a, + 0x77, 0xaa, 0x17, 0x2d, 0xf0, 0xde, 0x94, 0x5a, 0x5f, 0x19, 0xfa, 0x96, 0x83, 0xc5, 0xa6, 0x29, 0xb7, 0x36, 0x96, + 0x8e, 0xba, 0x58, 0xbb, 0x22, 0x42, 0xa5, 0xbb, 0x0b, 0x50, 0x8a, 0x8f, 0x55, 0x93, 0xe9, 0xaf, 0x73, 0x15, 0xe9, + 0x4b, 0xa8, 0x86, 0xfe, 0xbc, 0xbf, 0x50, 0x91, 0x12, 0x73, 0x93, 0x77, 0x7f, 0x0e, 0x7d, 0x82, 0x86, 0xb5, 0xe1, + 0xd9, 0xed, 0xb3, 0xc2, 0xea, 0x77, 0xaa, 0x43, 0xd0, 0x3f, 0x80, 0x2c, 0x69, 0x31, 0x7d, 0x60, 0xdd, 0x1a, 0xb6, + 0x5d, 0x34, 0xcb, 0x44, 0xd3, 0x6a, 0x53, 0xe7, 0x9a, 0x3d, 0xcc, 0xe7, 0x3e, 0x4f, 0xc1, 0x0b, 0xa3, 0x1f, 0xdf, + 0xc1, 0x6e, 0xdc, 0xd5, 0x18, 0x89, 0xba, 0x92, 0xa9, 0x84, 0x7e, 0x74, 0x87, 0x59, 0x74, 0xaf, 0xbd, 0x18, 0x73, + 0xed, 0xef, 0xa3, 0x03, 0xe5, 0x07, 0x95, 0x24, 0x07, 0x96, 0xfd, 0x0d, 0x16, 0xdd, 0x81, 0x79, 0x62, 0x59, 0x4d, + 0x60, 0x15, 0xdd, 0x7b, 0x8b, 0x28, 0x74, 0x23, 0x6b, 0xcd, 0x80, 0xea, 0x66, 0x8c, 0x7a, 0x70, 0x1f, 0x02, 0x3d, + 0xf4, 0xcb, 0x52, 0xca, 0x76, 0x16, 0xd7, 0xba, 0x57, 0xba, 0xfb, 0xcd, 0x01, 0x79, 0x7c, 0xa1, 0xc7, 0x35, 0xfd, + 0xab, 0x49, 0x44, 0x23, 0xf6, 0x0f, 0x67, 0xc5, 0xd5, 0xa2, 0xd0, 0x98, 0x26, 0xfb, 0x2a, 0x4a, 0xe6, 0x6d, 0x30, + 0xd5, 0x4b, 0xe6, 0x9d, 0x3b, 0x6c, 0xbf, 0xef, 0xcd, 0xf7, 0x3d, 0x96, 0x7d, 0xa6, 0x33, 0x62, 0xa6, 0x8b, 0xb9, + 0xef, 0x7b, 0xf3, 0x7d, 0x8f, 0xb7, 0x07, 0x73, 0xeb, 0x2e, 0x14, 0x4b, 0x76, 0x86, 0x0b, 0x30, 0x2c, 0xf7, 0xb8, + 0x9b, 0x5a, 0x96, 0x0e, 0x02, 0x5b, 0x4b, 0x80, 0x38, 0x9f, 0x4f, 0xc3, 0x8a, 0x57, 0x43, 0xc0, 0x7d, 0x3a, 0xd7, + 0xf6, 0x2a, 0x15, 0x78, 0x4c, 0xd0, 0x88, 0xe8, 0xd8, 0x36, 0xfa, 0x59, 0x2f, 0xe0, 0xf2, 0x88, 0x2a, 0xf5, 0x24, + 0x11, 0xf0, 0xaa, 0x5a, 0xe5, 0xad, 0x8b, 0x94, 0x5f, 0xc4, 0xcb, 0x71, 0xc5, 0x1e, 0x53, 0xc9, 0x00, 0x56, 0x65, + 0x49, 0x97, 0x40, 0xea, 0xf9, 0xde, 0x44, 0xbf, 0x6c, 0x22, 0x4f, 0xae, 0x6f, 0x4b, 0xbf, 0x30, 0x35, 0x2d, 0xc4, + 0x62, 0x32, 0x05, 0x1f, 0x5a, 0x60, 0x19, 0x0a, 0x5d, 0xaf, 0xb2, 0xf5, 0xaf, 0x49, 0x6e, 0x12, 0x28, 0x9c, 0x6a, + 0x8a, 0x88, 0x26, 0x6a, 0x41, 0x33, 0x6d, 0x49, 0xca, 0xf3, 0xc9, 0x63, 0x71, 0xf7, 0x12, 0xb0, 0x9b, 0x12, 0xd5, + 0xd8, 0x91, 0xf7, 0x16, 0x76, 0x00, 0x4e, 0x08, 0xdb, 0x55, 0xf1, 0x52, 0x82, 0xce, 0x1f, 0x67, 0x84, 0xed, 0xaa, + 0xfa, 0x84, 0x99, 0xec, 0x29, 0xd9, 0x18, 0x6e, 0x3f, 0x4c, 0x1a, 0x19, 0x3a, 0xea, 0xc4, 0x59, 0xcf, 0x11, 0x03, + 0x03, 0x50, 0x0f, 0xb8, 0x5b, 0xdb, 0xb3, 0xbc, 0xbb, 0x21, 0x79, 0x94, 0xb2, 0x44, 0x98, 0xeb, 0x72, 0x9d, 0xb2, + 0x5a, 0x75, 0x2a, 0x2a, 0x58, 0xe0, 0xa9, 0xb7, 0x17, 0xa8, 0xf9, 0xda, 0x41, 0x71, 0xae, 0x93, 0x4d, 0xd3, 0xf3, + 0xb2, 0xef, 0xde, 0x8e, 0x45, 0xc6, 0x26, 0xed, 0xed, 0x0e, 0x22, 0x61, 0x38, 0x61, 0xe5, 0x71, 0xc2, 0x55, 0x6d, + 0x8f, 0x00, 0xdd, 0x78, 0x22, 0x37, 0x16, 0x64, 0xb9, 0xae, 0x8c, 0xee, 0x3d, 0xbf, 0x5b, 0x4a, 0x84, 0x1d, 0x6d, + 0x49, 0x30, 0x5d, 0x82, 0x56, 0xd3, 0xe9, 0x37, 0x99, 0x6b, 0xcf, 0x0d, 0x6f, 0x8a, 0xb6, 0xb9, 0xbd, 0x49, 0xc7, + 0x7a, 0x7b, 0xe8, 0x18, 0xca, 0x20, 0x06, 0x3a, 0x1f, 0xf1, 0x5e, 0xa3, 0x91, 0x20, 0x50, 0xc8, 0x24, 0x43, 0x2c, + 0x22, 0xa7, 0x45, 0x3f, 0x38, 0xd0, 0xf0, 0xa8, 0x12, 0x10, 0xa6, 0x20, 0x84, 0xf8, 0x5d, 0x6b, 0x84, 0xf5, 0x97, + 0xab, 0x96, 0x0b, 0x1b, 0xa9, 0x36, 0x74, 0xf0, 0xff, 0xf2, 0x97, 0xad, 0x9e, 0x59, 0x2e, 0x8a, 0xc6, 0xcd, 0x4c, + 0x83, 0x45, 0x80, 0xf4, 0x68, 0xb2, 0x1d, 0x14, 0x77, 0xe7, 0x62, 0xbd, 0x21, 0x20, 0x31, 0x83, 0x09, 0xca, 0x86, + 0x75, 0x63, 0x0c, 0xf3, 0xa8, 0xd2, 0xb2, 0xd6, 0x24, 0x66, 0xcf, 0x97, 0xce, 0x5f, 0xf7, 0xe5, 0x5d, 0xcc, 0xf0, + 0x7d, 0x2c, 0xf1, 0x2d, 0x78, 0xd2, 0xc4, 0x02, 0xdb, 0xc7, 0x0b, 0x8a, 0x35, 0x51, 0x3d, 0xc7, 0xde, 0x16, 0xb0, + 0xce, 0x7a, 0x8f, 0x48, 0xef, 0x77, 0xf5, 0xab, 0x0d, 0xbe, 0x5b, 0xf8, 0x15, 0x58, 0x3f, 0x7b, 0x27, 0x29, 0x96, + 0x0d, 0xd1, 0x2c, 0xec, 0x91, 0x01, 0xe5, 0x2a, 0x7e, 0xd9, 0x4f, 0xdd, 0x2a, 0x86, 0x6b, 0x1f, 0xaf, 0xf0, 0x87, + 0x8d, 0x76, 0x1b, 0x79, 0x59, 0xdc, 0xec, 0x4d, 0xd9, 0x10, 0x55, 0xd3, 0x3b, 0x32, 0x37, 0x52, 0xea, 0x5f, 0x1f, + 0x70, 0x6b, 0xab, 0x7d, 0x37, 0xcd, 0xb7, 0x0e, 0x9d, 0xab, 0xa6, 0x5d, 0x6a, 0xad, 0x08, 0xf6, 0x7e, 0xb6, 0x70, + 0x73, 0x6b, 0xc0, 0x1e, 0xfc, 0xdc, 0x1d, 0xcd, 0x55, 0x02, 0xd1, 0xe9, 0x8d, 0x66, 0x7c, 0x15, 0xfe, 0x99, 0x36, + 0xc2, 0x7e, 0xfc, 0x67, 0xf4, 0x67, 0xda, 0x40, 0x7d, 0x14, 0xce, 0xef, 0x56, 0x6c, 0xb6, 0x82, 0x60, 0x6b, 0x0f, + 0x8e, 0xf0, 0x6b, 0xbf, 0x24, 0x57, 0x34, 0xe3, 0xc9, 0xca, 0xbe, 0x84, 0xb7, 0xb2, 0xcf, 0x04, 0xad, 0xf4, 0xe3, + 0x4e, 0xab, 0x50, 0x8c, 0x32, 0x08, 0x2c, 0x1c, 0xee, 0x35, 0xfb, 0x83, 0x56, 0xf3, 0xd1, 0xd0, 0xfc, 0xab, 0x23, + 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x04, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, 0xe9, 0x55, 0x82, + 0x8c, 0xef, 0xc9, 0x6a, 0xc5, 0x6c, 0x34, 0x6b, 0xab, 0xc1, 0x2f, 0x63, 0x33, 0x1d, 0xb6, 0xa3, 0x4e, 0xcf, 0x89, + 0xb1, 0xa4, 0x01, 0x91, 0xa6, 0x31, 0x83, 0x40, 0x52, 0x4b, 0xcd, 0x61, 0xcd, 0xef, 0x82, 0xb8, 0xba, 0x3f, 0x82, + 0x94, 0x1f, 0x82, 0x98, 0x1f, 0x11, 0x08, 0xa0, 0x6d, 0x98, 0xa3, 0xb2, 0x21, 0xe7, 0xbb, 0xf4, 0x40, 0x3b, 0x33, + 0x34, 0xf8, 0x6a, 0xd5, 0xaa, 0x86, 0x29, 0x8b, 0xfa, 0x30, 0x97, 0x6b, 0x2c, 0xc9, 0x1b, 0xd0, 0x35, 0xe7, 0x44, + 0xf6, 0x7d, 0x57, 0x79, 0x78, 0x08, 0x18, 0x0b, 0x02, 0x4e, 0xfa, 0x7d, 0xd9, 0x2f, 0xc8, 0xc5, 0x65, 0x08, 0x3e, + 0x66, 0x98, 0x0f, 0xd4, 0xa0, 0x18, 0x0e, 0x51, 0x6c, 0x9d, 0xce, 0x62, 0x1d, 0x71, 0xc5, 0xf3, 0x4b, 0x2e, 0xc0, + 0x2f, 0x39, 0x47, 0x6c, 0x50, 0x0c, 0xc9, 0x83, 0x24, 0x14, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, 0xd2, 0x37, 0x30, + 0xd5, 0xc3, 0xd2, 0x17, 0xd9, 0x60, 0x31, 0x67, 0x2c, 0x81, 0xe0, 0x66, 0xc0, 0x5e, 0x6a, 0x43, 0xa2, 0xb6, 0x06, + 0x0a, 0xee, 0x02, 0xdf, 0xcc, 0xe8, 0xe9, 0x56, 0x1b, 0x83, 0xc0, 0xe2, 0x85, 0xbe, 0x86, 0x31, 0x08, 0xa4, 0x2f, + 0x57, 0x1d, 0xf6, 0x97, 0x1f, 0x26, 0xcb, 0x0f, 0x5e, 0xa1, 0x4d, 0x76, 0x4a, 0xab, 0x44, 0x3d, 0xbe, 0xca, 0x13, + 0x47, 0x13, 0x64, 0x62, 0xa8, 0x74, 0xc3, 0x32, 0x71, 0x25, 0x7d, 0x26, 0x9a, 0x6c, 0x37, 0x1c, 0x33, 0xe7, 0xbb, + 0xd9, 0xfe, 0x61, 0xdd, 0xce, 0x39, 0xe1, 0x5a, 0x2b, 0xa9, 0xb5, 0x51, 0xcf, 0x34, 0x55, 0xb5, 0xc1, 0xfc, 0x2e, + 0xad, 0x96, 0x16, 0x5b, 0x57, 0xef, 0x9e, 0xff, 0x2c, 0x5d, 0x19, 0x7f, 0x8b, 0x55, 0xa1, 0x15, 0x19, 0x6e, 0xb7, + 0x90, 0x33, 0x67, 0xba, 0x74, 0x8a, 0x5c, 0xa8, 0x0e, 0x7f, 0x51, 0x4f, 0xea, 0x97, 0x2a, 0x83, 0x86, 0x74, 0xe8, + 0xf7, 0x3a, 0x01, 0xe5, 0x1f, 0x4c, 0x4c, 0x64, 0x2c, 0xba, 0xa5, 0x45, 0x1e, 0xfe, 0xf8, 0x22, 0xd7, 0xb1, 0xaa, + 0xf6, 0x60, 0x20, 0x7b, 0xba, 0xe2, 0x1e, 0xdc, 0x9a, 0xf0, 0x31, 0x67, 0x69, 0xbc, 0x17, 0xfc, 0xd8, 0x90, 0x8d, + 0x1f, 0x83, 0x1f, 0xc1, 0xdd, 0xd9, 0x3e, 0x8b, 0x58, 0xc6, 0x85, 0x70, 0xf7, 0x58, 0x97, 0xa5, 0x4a, 0x19, 0x2b, + 0xa7, 0x5b, 0xf6, 0x2f, 0xa4, 0xde, 0x24, 0xe1, 0xa5, 0x25, 0xd6, 0x26, 0x05, 0x2b, 0x9f, 0x92, 0xc2, 0xb3, 0x2b, + 0xfa, 0x56, 0x8b, 0xd9, 0x4b, 0x2d, 0xe9, 0xae, 0xaf, 0x2e, 0x4b, 0x15, 0x34, 0x1c, 0x84, 0xb6, 0xb4, 0x81, 0x04, + 0x18, 0xb8, 0x94, 0x3e, 0x9d, 0xf6, 0x4c, 0x22, 0xb3, 0x24, 0x84, 0x77, 0x0f, 0x2a, 0x98, 0xff, 0xce, 0x36, 0xc2, + 0xaa, 0xc0, 0xe5, 0x4a, 0x15, 0xf5, 0x52, 0x10, 0x08, 0x40, 0x5f, 0x7a, 0x0f, 0x8a, 0xf3, 0xa2, 0xd7, 0x68, 0x08, + 0xd0, 0xc2, 0x52, 0x7d, 0xad, 0x8a, 0xe9, 0xbe, 0xff, 0x9c, 0x9f, 0xf7, 0xe1, 0x1c, 0xd2, 0x36, 0xde, 0xd4, 0xa4, + 0x84, 0x9a, 0x1d, 0xb4, 0x0f, 0x56, 0xd9, 0x5e, 0xf9, 0xb7, 0x21, 0x45, 0x26, 0x7f, 0xc0, 0x7e, 0xa0, 0xb6, 0xc3, + 0xa1, 0x2d, 0x58, 0xf5, 0x52, 0x46, 0xc1, 0x80, 0x95, 0x03, 0x6e, 0x4f, 0x46, 0x09, 0x4d, 0xa6, 0x0c, 0xd4, 0xfd, + 0xa6, 0x68, 0x35, 0xb7, 0x27, 0x75, 0xbf, 0x21, 0xed, 0xec, 0x23, 0xb5, 0xb3, 0x4f, 0x0e, 0x5e, 0x2c, 0x82, 0xfc, + 0x21, 0x42, 0x85, 0xc3, 0xbc, 0x29, 0xd1, 0x51, 0x07, 0xb8, 0x33, 0x70, 0xe0, 0x01, 0x5b, 0x94, 0x83, 0x03, 0x6a, + 0x2d, 0xee, 0x69, 0x23, 0x71, 0xde, 0x9e, 0x50, 0xbb, 0x08, 0x25, 0x6e, 0xd6, 0xcc, 0xb4, 0xa0, 0xb5, 0x42, 0x3b, + 0x8f, 0x7b, 0xbc, 0xcd, 0xb3, 0x5a, 0xfc, 0x84, 0x0d, 0x6b, 0xaa, 0xfa, 0x0d, 0x34, 0x47, 0xb5, 0x20, 0x37, 0x4f, + 0xb5, 0xb7, 0x2a, 0x19, 0x04, 0xc1, 0xd0, 0x70, 0x2a, 0x44, 0x93, 0x8c, 0x41, 0x6b, 0xe8, 0xdd, 0x6a, 0xaf, 0x56, + 0xdc, 0x21, 0xbe, 0xac, 0x79, 0xab, 0xe9, 0x5b, 0x00, 0x5a, 0x84, 0x41, 0x79, 0x6f, 0x12, 0x80, 0xf7, 0x6d, 0x19, + 0x21, 0x6d, 0x39, 0x30, 0x6f, 0x36, 0x96, 0x8a, 0xcd, 0x77, 0x74, 0x32, 0x8c, 0x03, 0x33, 0xa2, 0x00, 0xdf, 0x94, + 0x90, 0x84, 0xab, 0xa4, 0x1b, 0x99, 0x88, 0x39, 0x93, 0x31, 0xc7, 0x37, 0x85, 0x10, 0xea, 0xda, 0x7c, 0x09, 0x5c, + 0xdd, 0xc9, 0x48, 0x7c, 0x33, 0x61, 0xea, 0x1d, 0x2d, 0x26, 0x0c, 0xfc, 0x8a, 0xdc, 0xed, 0x58, 0x4c, 0xc9, 0xc5, + 0x53, 0x19, 0x0e, 0x28, 0x86, 0x07, 0x47, 0x87, 0x58, 0xe9, 0x10, 0x28, 0x15, 0x2e, 0xb2, 0xdb, 0xbd, 0x37, 0x85, + 0xb8, 0xbb, 0x0f, 0x0b, 0x6c, 0x1d, 0x00, 0x4b, 0xa7, 0x49, 0x80, 0x7f, 0xf9, 0x98, 0x8f, 0xd1, 0x98, 0x53, 0xad, + 0xeb, 0xb7, 0xbf, 0xa3, 0x1b, 0xa0, 0xb7, 0xa5, 0xa3, 0xe0, 0xa0, 0x35, 0x84, 0x5c, 0xb8, 0x0b, 0x83, 0x8b, 0x2f, + 0xbf, 0xb6, 0x28, 0xb4, 0x37, 0x16, 0x40, 0xef, 0xaf, 0x04, 0x2c, 0xd8, 0x30, 0xc7, 0x14, 0x5e, 0x6b, 0x9d, 0x30, + 0xe5, 0x45, 0x05, 0x79, 0x52, 0xbe, 0xc7, 0x59, 0xab, 0xfd, 0x96, 0x8d, 0xe1, 0x0e, 0x23, 0xfa, 0x76, 0xe1, 0xc8, + 0x82, 0x07, 0x64, 0x9a, 0xc4, 0x34, 0xfb, 0xc6, 0x45, 0x1e, 0x79, 0x3d, 0x0e, 0x77, 0xb5, 0xe4, 0xe7, 0xeb, 0x15, + 0x5d, 0x63, 0x08, 0x45, 0xe1, 0xf7, 0xfb, 0x15, 0x1e, 0x28, 0xad, 0x0c, 0xda, 0xa0, 0x61, 0x71, 0x9b, 0xff, 0x02, + 0x67, 0x0c, 0xad, 0x17, 0x32, 0x77, 0x74, 0xc6, 0xe1, 0xcc, 0x62, 0xc6, 0x94, 0xc0, 0xa8, 0x94, 0x28, 0xe8, 0x04, + 0x1c, 0x9d, 0xab, 0x0f, 0x92, 0x87, 0xd5, 0xb1, 0x02, 0xf0, 0x24, 0x53, 0xf8, 0x27, 0xdb, 0x04, 0xeb, 0x7e, 0xab, + 0x66, 0x98, 0xfa, 0x8b, 0xda, 0x76, 0x2d, 0x5f, 0xfa, 0x38, 0xd2, 0xc6, 0x10, 0x5a, 0xe7, 0xee, 0x1e, 0x50, 0xc4, + 0x06, 0xbd, 0x88, 0x15, 0xbe, 0x91, 0x8b, 0x91, 0x5e, 0x5f, 0xed, 0x3a, 0xa6, 0x00, 0x51, 0xac, 0xbb, 0x26, 0xbe, + 0xa9, 0x9e, 0x3f, 0x95, 0x71, 0x0e, 0x67, 0x10, 0x84, 0x38, 0x29, 0x2f, 0x1b, 0x62, 0x41, 0x2e, 0x74, 0xa7, 0x42, + 0x77, 0x5a, 0x21, 0x94, 0x4d, 0x8f, 0xca, 0xfb, 0x57, 0x08, 0x61, 0xa0, 0xcb, 0xec, 0xc0, 0xaa, 0x7c, 0x0b, 0xab, + 0xe0, 0xd5, 0x8b, 0x0d, 0xac, 0x12, 0x70, 0x3c, 0x97, 0x68, 0x54, 0x54, 0x38, 0xa4, 0x49, 0x9f, 0x8f, 0x45, 0x90, + 0x00, 0x58, 0xf4, 0x2e, 0xb1, 0x79, 0xdf, 0xc3, 0x21, 0xbf, 0x27, 0x11, 0xf9, 0xd3, 0x8d, 0x68, 0x06, 0xef, 0xe2, + 0xca, 0xbe, 0x43, 0x08, 0x58, 0x7a, 0x8e, 0xe1, 0x3d, 0xe4, 0xef, 0xbf, 0xc3, 0x6a, 0x2d, 0xc8, 0xe3, 0x7f, 0x89, + 0x92, 0xd0, 0xd8, 0x7f, 0x8e, 0x87, 0x16, 0x09, 0xfd, 0x81, 0x6f, 0x8e, 0xb0, 0xc2, 0xc1, 0xad, 0x22, 0x2e, 0x83, + 0x5b, 0x7c, 0xac, 0x43, 0x0f, 0x00, 0x4b, 0x28, 0xf6, 0x41, 0xbe, 0x81, 0x62, 0x1a, 0x07, 0x14, 0x59, 0xfa, 0x17, + 0xb8, 0x60, 0xb5, 0x50, 0xde, 0xdf, 0xb6, 0x9c, 0x94, 0x56, 0xbb, 0xe4, 0xd5, 0xe6, 0x40, 0xe5, 0xa7, 0x7f, 0xe1, + 0x2b, 0xf5, 0x43, 0xcd, 0xf6, 0x0b, 0xdf, 0x58, 0xa0, 0xc7, 0xa0, 0x08, 0xb0, 0xbf, 0xd7, 0x84, 0x3b, 0x8a, 0x5e, + 0xe6, 0x62, 0xbf, 0x6d, 0xaf, 0x7b, 0x89, 0xb9, 0xbc, 0xae, 0xb2, 0xe6, 0x60, 0x0a, 0x0d, 0x0e, 0xaa, 0x70, 0x46, + 0x60, 0x2e, 0x5f, 0x94, 0x05, 0xe7, 0x20, 0xde, 0xf7, 0xa5, 0xce, 0x29, 0xa3, 0x01, 0xbc, 0x48, 0xca, 0x47, 0xa7, + 0xfa, 0x1c, 0x5c, 0xc6, 0x35, 0x9b, 0xf8, 0x44, 0xba, 0x54, 0x60, 0x25, 0x8d, 0x71, 0x68, 0x40, 0x53, 0x3a, 0x07, + 0xb3, 0x0d, 0xa0, 0xe0, 0xf6, 0x7c, 0xd8, 0x58, 0x28, 0xef, 0x2d, 0xda, 0xda, 0xd3, 0xd1, 0x84, 0x58, 0x93, 0x26, + 0xef, 0x6e, 0x5b, 0x23, 0x83, 0x33, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, 0x84, 0x27, 0x28, + 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xb2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x5a, 0x6a, 0x20, 0x2b, 0x6a, 0x90, + 0x7b, 0xd4, 0x40, 0xd4, 0xb7, 0x7f, 0x01, 0x0b, 0x61, 0x22, 0x54, 0x49, 0x2f, 0x20, 0xc2, 0x5c, 0x69, 0x3e, 0xa0, + 0x88, 0x7c, 0xc8, 0x6b, 0x40, 0x85, 0x94, 0xbc, 0x04, 0xa3, 0x71, 0x78, 0xbd, 0x07, 0xdc, 0x2f, 0x0d, 0xc3, 0xe0, + 0x38, 0x05, 0x9d, 0xff, 0xd6, 0xe5, 0x43, 0xf5, 0x72, 0x75, 0x10, 0xc2, 0x4f, 0x24, 0x64, 0x98, 0x46, 0x7e, 0x01, + 0xb2, 0x99, 0x63, 0x71, 0x70, 0x20, 0x40, 0xe0, 0x87, 0x28, 0xc2, 0x1e, 0xcf, 0xf0, 0x32, 0xd9, 0x20, 0x7a, 0x6e, + 0x56, 0x79, 0x35, 0x2b, 0xe1, 0xcd, 0xaa, 0x70, 0x34, 0x8e, 0xae, 0x09, 0x03, 0xc1, 0x85, 0x9a, 0x7d, 0x83, 0x10, + 0x28, 0x5b, 0x6e, 0x35, 0x5d, 0x7a, 0x0a, 0xe6, 0xa3, 0x61, 0xf0, 0x96, 0xc1, 0x8b, 0xba, 0xda, 0xe4, 0x9f, 0x29, + 0x96, 0x28, 0xcd, 0x3c, 0x36, 0x3c, 0x27, 0x75, 0x8a, 0xa2, 0xbf, 0x04, 0xcf, 0xc3, 0xa0, 0x79, 0x11, 0xa0, 0x06, + 0xfc, 0xdb, 0xe0, 0xa8, 0x47, 0x23, 0x9a, 0xa6, 0x2e, 0xf8, 0x4d, 0x42, 0xf4, 0x26, 0x5b, 0xad, 0x64, 0x45, 0xd0, + 0x23, 0xb3, 0xc1, 0x80, 0x95, 0x78, 0x02, 0x3b, 0xd6, 0x70, 0xb0, 0xe4, 0x85, 0x0c, 0x73, 0x77, 0x4a, 0xe1, 0x1c, + 0x43, 0x3a, 0xc2, 0x89, 0x17, 0xb3, 0xf1, 0x3f, 0x9f, 0xa9, 0xbf, 0x7e, 0x6e, 0xbe, 0x96, 0x11, 0x11, 0x2e, 0x88, + 0x5c, 0x8d, 0x1d, 0x91, 0x5e, 0xd8, 0x32, 0x35, 0xb0, 0x65, 0x7e, 0x70, 0xd6, 0xd5, 0x43, 0x13, 0x2e, 0x0e, 0x0c, + 0xa8, 0x91, 0x67, 0xb4, 0x82, 0x33, 0x52, 0x0e, 0x1c, 0x94, 0x10, 0x8a, 0x15, 0xe1, 0x94, 0x5c, 0x40, 0x24, 0xbc, + 0x04, 0xf5, 0xc0, 0xb0, 0xc0, 0x93, 0xa0, 0xa6, 0x20, 0x41, 0x25, 0xae, 0x76, 0x0a, 0xb3, 0xce, 0xf4, 0x6c, 0xa7, + 0xa8, 0x67, 0x83, 0xfc, 0xfc, 0xa2, 0xc2, 0x14, 0x58, 0xda, 0x83, 0x83, 0x02, 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, + 0x40, 0x4f, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0x4a, 0x7b, 0x1d, 0x68, 0x5b, 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, + 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x7d, 0x15, 0x6f, 0x47, 0x48, 0xec, 0x7f, 0x54, 0x3a, 0xd0, 0x98, 0x25, 0xdd, 0xd5, + 0xc6, 0x7c, 0x55, 0xd3, 0x23, 0x56, 0x93, 0x10, 0x36, 0x48, 0x97, 0xe3, 0xd3, 0x9e, 0xc1, 0x15, 0xab, 0xd0, 0x72, + 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x16, 0x51, 0xc9, 0x86, 0x61, 0x06, 0x61, + 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0x33, 0x7f, 0x4a, 0x1f, 0x6c, 0xba, 0x76, 0xe6, 0x11, 0x40, + 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x37, 0x2a, 0x33, 0xbf, 0x96, 0xb6, 0x95, 0xdb, 0xf6, 0x18, 0x7b, 0x21, 0xb7, + 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x08, 0x55, 0x6d, 0xc8, 0x5a, 0x1b, 0x3a, 0xd0, 0x2f, + 0xd2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x59, 0x2e, 0xc1, 0x22, 0xbc, 0x74, 0x08, 0x7f, 0x97, 0x83, 0x33, 0x3c, 0x66, + 0x58, 0xac, 0x56, 0x50, 0xcf, 0xe1, 0x7d, 0xb2, 0x19, 0x9c, 0x54, 0x6c, 0x8c, 0x5d, 0x98, 0x89, 0x87, 0x65, 0x13, + 0x02, 0x27, 0xd0, 0xaf, 0xab, 0x88, 0xfa, 0xfb, 0xed, 0xf8, 0xa9, 0x0c, 0x6b, 0x3b, 0x10, 0x6b, 0xd6, 0x1b, 0xac, + 0x3e, 0x80, 0x96, 0xff, 0x93, 0xb8, 0x87, 0xca, 0xbc, 0x9b, 0x84, 0x7c, 0x73, 0x11, 0x7b, 0xac, 0x87, 0x18, 0xa9, + 0x2d, 0xee, 0x0e, 0x21, 0xfe, 0x9f, 0xad, 0x28, 0x06, 0x3c, 0xaa, 0xf8, 0xe7, 0x10, 0xf5, 0x20, 0x14, 0xb5, 0xf1, + 0xb0, 0x01, 0x4a, 0xbb, 0x5c, 0x57, 0x62, 0xa4, 0x4f, 0x20, 0xdf, 0xda, 0xf0, 0x82, 0xfa, 0x24, 0xca, 0x41, 0x4e, + 0xf6, 0xa2, 0x92, 0x26, 0x1b, 0xc2, 0x5c, 0x6f, 0x0b, 0xc7, 0xf4, 0xd5, 0x06, 0x2d, 0xc2, 0x17, 0xc0, 0xce, 0x70, + 0x2d, 0x59, 0x5a, 0xf0, 0xe5, 0x35, 0xf0, 0xb9, 0x35, 0xd7, 0x14, 0x25, 0x47, 0xfd, 0x17, 0x52, 0xdf, 0xfa, 0xc3, + 0xef, 0xd8, 0x13, 0x1f, 0xa9, 0xd5, 0x91, 0x6c, 0x84, 0x5a, 0xb3, 0x76, 0xbc, 0x6c, 0x33, 0xc2, 0xa0, 0x34, 0xd1, + 0xfb, 0x2a, 0x64, 0x95, 0x3b, 0x3b, 0x95, 0xde, 0x9c, 0xbe, 0xe6, 0x95, 0x73, 0x2a, 0x37, 0x8c, 0x6a, 0xa9, 0x69, + 0x80, 0x08, 0x57, 0x2e, 0x91, 0xbc, 0x4f, 0x74, 0xf8, 0x07, 0x8d, 0x71, 0xf5, 0x48, 0xe1, 0xef, 0x77, 0xc5, 0x0e, + 0xd9, 0x8e, 0x0e, 0xb7, 0x11, 0x34, 0xcf, 0x57, 0xf0, 0x80, 0xa3, 0x92, 0x21, 0x44, 0x39, 0xb9, 0xd8, 0xcf, 0x6b, + 0xa6, 0x6c, 0x37, 0x01, 0x42, 0x48, 0x39, 0x9c, 0x75, 0x0e, 0x91, 0xb5, 0xd0, 0x23, 0x55, 0x94, 0xc3, 0x2d, 0x9a, + 0x6b, 0x03, 0x54, 0x68, 0x81, 0x74, 0xf9, 0x85, 0xdd, 0xc7, 0x02, 0xa2, 0x97, 0xaf, 0x6d, 0x08, 0x63, 0x6b, 0x65, + 0x89, 0x0b, 0x3d, 0x6a, 0x13, 0x46, 0xd7, 0x6e, 0x0c, 0x6b, 0x03, 0xa3, 0xa7, 0x41, 0x49, 0x0b, 0x42, 0x5d, 0xf7, + 0xe8, 0x79, 0xa2, 0x03, 0x3d, 0x66, 0x84, 0x36, 0x18, 0x9e, 0x12, 0x05, 0x96, 0x4d, 0x05, 0x58, 0xf0, 0x2d, 0x8b, + 0x38, 0xd7, 0x36, 0x9b, 0x2c, 0xfc, 0xa8, 0x42, 0xfd, 0xb4, 0x5f, 0x56, 0x31, 0xcf, 0x85, 0xa5, 0x6e, 0xcf, 0x13, + 0x17, 0x8f, 0xee, 0xe9, 0x9b, 0xeb, 0x17, 0x2f, 0x5f, 0xbf, 0x5a, 0xad, 0xda, 0xac, 0xd9, 0x3e, 0xc1, 0x3f, 0xa9, + 0x32, 0x1e, 0x6c, 0x19, 0x05, 0xe8, 0xe0, 0x60, 0x9f, 0x6b, 0x17, 0x9e, 0x2f, 0x7c, 0x0e, 0x71, 0x83, 0xd4, 0x10, + 0x27, 0x45, 0x19, 0x13, 0xe4, 0x2e, 0xe8, 0x07, 0xf7, 0x01, 0x28, 0xa1, 0x2a, 0xf2, 0xf7, 0x61, 0x73, 0xf6, 0x7b, + 0x10, 0x98, 0x08, 0xea, 0x43, 0x04, 0x10, 0x88, 0x57, 0x8a, 0x0b, 0xc2, 0x5c, 0x02, 0x44, 0xf1, 0x5e, 0xc0, 0x9b, + 0x90, 0x3a, 0x6a, 0xd5, 0x22, 0x0f, 0x0b, 0x20, 0x89, 0x26, 0x1c, 0x25, 0x3d, 0xd2, 0x01, 0xbc, 0x21, 0x28, 0xa5, + 0xf9, 0xd5, 0xcb, 0xac, 0xbb, 0x54, 0x86, 0xfa, 0xad, 0x38, 0xc3, 0x53, 0xfb, 0x39, 0x85, 0xcf, 0x69, 0xcf, 0x9d, + 0x0e, 0xf2, 0x30, 0xc3, 0x0b, 0x22, 0x0f, 0xdd, 0xb3, 0x88, 0xcb, 0x79, 0xc1, 0xbe, 0x72, 0xb1, 0x90, 0xf1, 0xf2, + 0x2e, 0x16, 0xd1, 0x5d, 0x33, 0x3d, 0x0c, 0x8b, 0xe8, 0xae, 0x99, 0x47, 0x77, 0x08, 0xdf, 0xc7, 0x22, 0xba, 0x37, + 0x29, 0xf7, 0xcd, 0x1c, 0x6e, 0xbe, 0x70, 0x0e, 0x87, 0xa2, 0x29, 0xda, 0x58, 0x6c, 0x16, 0x35, 0x29, 0xb6, 0xa8, + 0x87, 0xc1, 0xbf, 0xef, 0xd8, 0xf8, 0x7e, 0xf8, 0x12, 0x5c, 0x9a, 0x34, 0x91, 0x9f, 0x40, 0xfa, 0x69, 0x55, 0x06, + 0xee, 0x53, 0xd2, 0xea, 0x4d, 0xcf, 0x65, 0xb3, 0xdd, 0x6b, 0x34, 0xa6, 0xb0, 0x77, 0x13, 0x92, 0xb9, 0x62, 0xd3, + 0x86, 0x8e, 0xaf, 0xb3, 0x9f, 0xac, 0x56, 0xfb, 0x19, 0xd2, 0x1b, 0x6e, 0xc2, 0x42, 0x35, 0x98, 0x0e, 0x71, 0x0b, + 0x3f, 0x4f, 0x10, 0x5a, 0xb2, 0xc1, 0x74, 0x48, 0xd8, 0x60, 0xda, 0x68, 0x0f, 0x8d, 0xa1, 0x9d, 0xde, 0x8a, 0x6b, + 0x08, 0xa1, 0x39, 0x1d, 0x1e, 0xe9, 0x92, 0xc2, 0xe6, 0x9b, 0x2f, 0x5a, 0x05, 0xf4, 0xcb, 0x6b, 0xc1, 0xcb, 0x04, + 0xee, 0x40, 0x5f, 0xf4, 0xdc, 0x3c, 0xdd, 0x5a, 0x90, 0xe3, 0xa3, 0xca, 0xd5, 0x9e, 0x22, 0xac, 0x7b, 0xca, 0x0f, + 0x8b, 0x43, 0xdd, 0x8c, 0xed, 0x52, 0xd8, 0x6f, 0x5f, 0x33, 0xf2, 0xd1, 0xc2, 0x02, 0x10, 0xa4, 0x82, 0x47, 0x52, + 0xd8, 0x70, 0x4a, 0x3e, 0x5c, 0x2c, 0x54, 0xb6, 0x60, 0x92, 0x91, 0x56, 0x2f, 0xd3, 0x96, 0xfe, 0x99, 0x8d, 0x68, + 0x4a, 0x31, 0x25, 0x89, 0x2b, 0x99, 0x69, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x10, 0xa7, 0x04, 0xe2, + 0x21, 0xf5, 0x0a, 0x6d, 0xe0, 0x15, 0x4e, 0x9b, 0xc5, 0x80, 0x0d, 0xd1, 0xd1, 0x31, 0xa6, 0x83, 0xcf, 0xc9, 0xbc, + 0x0d, 0x8f, 0x05, 0x7e, 0x1e, 0x92, 0x69, 0x53, 0x94, 0x09, 0x12, 0x12, 0xd2, 0xa6, 0x38, 0x84, 0xbd, 0x84, 0x70, + 0x62, 0x2a, 0x26, 0x03, 0x36, 0x6c, 0x4e, 0xcb, 0x8a, 0x1d, 0x57, 0xb1, 0x21, 0xca, 0x04, 0x53, 0xb1, 0x61, 0x2b, + 0xfa, 0xaf, 0x33, 0x68, 0x10, 0xf8, 0x00, 0x60, 0x00, 0x00, 0x85, 0xbc, 0x68, 0xbe, 0x38, 0x27, 0x6e, 0xb3, 0x9b, + 0x7b, 0xfc, 0x16, 0x58, 0xa0, 0xd5, 0xf6, 0xff, 0x2e, 0x94, 0x01, 0x7b, 0xca, 0x42, 0xc7, 0xcc, 0x2d, 0x8c, 0x8a, + 0x0e, 0xa0, 0x52, 0x22, 0x4c, 0xa1, 0x21, 0xb3, 0x9f, 0x68, 0xa8, 0x79, 0x5a, 0x83, 0x6c, 0xa0, 0x86, 0xcd, 0x04, + 0x8e, 0x18, 0x78, 0x87, 0x86, 0x4c, 0xb5, 0x31, 0x61, 0x98, 0xc1, 0x14, 0x13, 0x0d, 0x9e, 0x69, 0xdc, 0x5a, 0x0b, + 0x2d, 0xcb, 0xf5, 0xb3, 0xfe, 0xdf, 0x2a, 0xcc, 0x07, 0x45, 0xb3, 0x3d, 0x44, 0xfb, 0x84, 0x98, 0x8f, 0x21, 0x6c, + 0x32, 0x9b, 0xda, 0xd0, 0xdf, 0x47, 0x9d, 0xd8, 0x7c, 0xc2, 0x9f, 0xe1, 0x5a, 0xef, 0x00, 0x1d, 0x78, 0x50, 0xaf, + 0xbf, 0xa8, 0xa9, 0xbc, 0x3e, 0xee, 0x8c, 0x52, 0xb9, 0xeb, 0xdd, 0x69, 0x4f, 0x53, 0xec, 0x7b, 0xeb, 0xe1, 0xf2, + 0xa1, 0x1e, 0x02, 0x66, 0x0c, 0xfa, 0x96, 0x19, 0x7d, 0x2f, 0x44, 0x72, 0x41, 0x04, 0x16, 0x1a, 0x6b, 0x18, 0xec, + 0xad, 0x83, 0x03, 0x5d, 0x8d, 0x35, 0xe0, 0x79, 0x52, 0x04, 0x82, 0x81, 0x8b, 0xa0, 0x0c, 0x68, 0x92, 0xeb, 0xdb, + 0x70, 0xf2, 0x91, 0xd9, 0x5f, 0xb8, 0xbc, 0x7d, 0x2c, 0x8c, 0xb6, 0x55, 0x27, 0xdf, 0x97, 0x05, 0xee, 0xcb, 0x7b, + 0x49, 0xa3, 0xe0, 0x46, 0xe6, 0x26, 0x2f, 0xd7, 0x77, 0xeb, 0xae, 0x54, 0x67, 0x77, 0x33, 0x9d, 0xb2, 0x99, 0xce, + 0x76, 0x33, 0xbe, 0x66, 0xe6, 0x5b, 0x56, 0x91, 0xfa, 0x64, 0x8d, 0xe4, 0x9c, 0xe6, 0x3f, 0xd1, 0x39, 0x18, 0x05, + 0x73, 0x73, 0xaf, 0x0a, 0x27, 0x57, 0x46, 0x2e, 0xf6, 0x33, 0x4d, 0x5c, 0x91, 0xbe, 0x50, 0x87, 0x00, 0x2f, 0x2f, + 0xca, 0xc7, 0x07, 0xb8, 0xc8, 0x7f, 0x15, 0xa9, 0x8d, 0x72, 0x9a, 0x0b, 0x25, 0x72, 0x16, 0x20, 0x8d, 0xaa, 0x36, + 0x06, 0xf6, 0xd2, 0xec, 0x3d, 0xd9, 0xe7, 0x83, 0x2a, 0x62, 0xde, 0x50, 0x3f, 0xf7, 0xf1, 0x3d, 0x4d, 0xb1, 0x55, + 0x13, 0x27, 0xe4, 0x43, 0x12, 0x66, 0x20, 0x9b, 0x0d, 0xaa, 0xd7, 0x7e, 0x1b, 0x6d, 0x5c, 0x34, 0x43, 0xd9, 0xd7, + 0x4f, 0x9c, 0xfc, 0x50, 0x68, 0xe3, 0x00, 0xe3, 0xe8, 0x8f, 0x30, 0x35, 0x60, 0x4f, 0x22, 0x47, 0xa1, 0xa3, 0x3b, + 0x93, 0x76, 0xef, 0xa7, 0xdd, 0xeb, 0xb4, 0x0e, 0x94, 0x03, 0xd2, 0x6c, 0xcb, 0x74, 0xee, 0xdd, 0xf7, 0x3d, 0xbc, + 0x74, 0xbb, 0x86, 0x48, 0xdc, 0xf3, 0xc7, 0xda, 0x18, 0xe2, 0x0d, 0xd8, 0x88, 0xca, 0x83, 0x83, 0x3f, 0xac, 0xf7, + 0x6d, 0x25, 0xcb, 0xca, 0x6f, 0x84, 0x03, 0xdb, 0x60, 0x2a, 0x6d, 0x5e, 0x2a, 0x92, 0x05, 0xd8, 0x75, 0xee, 0xef, + 0x8e, 0x87, 0xff, 0x52, 0xfa, 0x4c, 0x8b, 0x71, 0x15, 0x7f, 0x25, 0xd2, 0xd2, 0x43, 0x54, 0x41, 0x04, 0xd2, 0xca, + 0xba, 0xd4, 0x37, 0x1d, 0xbd, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x0d, 0xcd, 0x8b, 0xdc, 0x2a, 0x82, 0x47, + 0x0b, 0x6b, 0x0c, 0xcd, 0x7d, 0xe9, 0x9d, 0x64, 0x02, 0xa2, 0xd6, 0xc7, 0xed, 0x4b, 0x22, 0xa1, 0xac, 0xee, 0x42, + 0x38, 0xdc, 0x85, 0x60, 0x5e, 0x06, 0x6d, 0x83, 0xd8, 0xed, 0x36, 0x68, 0x5b, 0x28, 0x89, 0x34, 0x81, 0xdb, 0xbd, + 0xc1, 0xc2, 0xde, 0x87, 0x97, 0x63, 0x39, 0x96, 0xee, 0x9a, 0xcc, 0x3c, 0x00, 0x04, 0x6a, 0x1f, 0x56, 0x3c, 0xb1, + 0x20, 0x88, 0xac, 0xe1, 0xe8, 0x7b, 0xce, 0x6e, 0x8d, 0xe5, 0xf0, 0x6c, 0xbe, 0x50, 0x2c, 0xd5, 0x77, 0xd4, 0x80, + 0x3f, 0x75, 0x3f, 0xaf, 0x9f, 0x92, 0x9a, 0x6e, 0xfc, 0x01, 0x84, 0x91, 0xb0, 0xca, 0x0e, 0xad, 0x90, 0x30, 0xc1, + 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0xa5, 0xc3, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x00, 0x9b, 0x78, 0x63, + 0x5e, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x07, 0xcd, 0xa0, 0xc1, 0x62, 0x1b, 0x94, + 0xd9, 0x45, 0x18, 0xcf, 0xcf, 0x4f, 0x74, 0x9c, 0xf6, 0x52, 0xaf, 0xfe, 0x5b, 0x02, 0x06, 0xf8, 0x12, 0xbc, 0xc4, + 0xfc, 0xe8, 0xae, 0x03, 0xd5, 0x80, 0xfa, 0xa2, 0xc1, 0x86, 0x68, 0xb5, 0x6a, 0x95, 0xcf, 0x40, 0xd9, 0x6b, 0x2e, + 0x69, 0xae, 0xb9, 0xa4, 0xbd, 0xe6, 0x92, 0xee, 0x9a, 0x4b, 0xea, 0x6b, 0x2e, 0xe9, 0xae, 0xb9, 0x1c, 0x08, 0x3f, + 0x79, 0x71, 0x1c, 0x43, 0x0e, 0x71, 0x15, 0x95, 0x89, 0x8c, 0x07, 0x17, 0x9e, 0xfb, 0x2c, 0x92, 0xe5, 0xf2, 0xfb, + 0x31, 0xe4, 0xb6, 0x6c, 0x25, 0xb4, 0xdb, 0x14, 0x93, 0x10, 0x39, 0xfd, 0xe0, 0xa0, 0x74, 0x77, 0x06, 0x1f, 0xf5, + 0x98, 0xe3, 0xa5, 0x71, 0xa2, 0xfd, 0x03, 0x74, 0xf2, 0xfa, 0xd7, 0xc7, 0x58, 0xac, 0x89, 0xb4, 0x26, 0xf7, 0xfb, + 0x6d, 0x47, 0x29, 0x3e, 0x25, 0x3a, 0x3c, 0x39, 0x8f, 0x94, 0x16, 0x41, 0x10, 0xa2, 0x24, 0xc7, 0x09, 0x11, 0x66, + 0xbf, 0x3b, 0x57, 0x78, 0xad, 0x8a, 0x72, 0x66, 0x25, 0x57, 0x19, 0x38, 0xb1, 0x6b, 0x2b, 0x0c, 0xd4, 0x03, 0x17, + 0x82, 0x44, 0x27, 0xfc, 0xd1, 0xcc, 0x0c, 0x39, 0x4b, 0xca, 0xa4, 0x8f, 0xcd, 0x4c, 0x13, 0xb0, 0x82, 0xec, 0x3b, + 0x98, 0x2d, 0xef, 0x62, 0x8a, 0xef, 0xe3, 0x04, 0xff, 0xbf, 0xec, 0xbd, 0xeb, 0x92, 0xdb, 0x46, 0x96, 0x2e, 0xfa, + 0x2a, 0x55, 0x0c, 0x99, 0x06, 0xc4, 0x24, 0x8b, 0xa5, 0xbd, 0x67, 0x22, 0x0e, 0x58, 0x29, 0x86, 0x2c, 0x59, 0xdd, + 0x72, 0x5b, 0x97, 0x56, 0xa9, 0xdd, 0x76, 0x33, 0x78, 0x68, 0x14, 0x90, 0x24, 0x20, 0x83, 0x00, 0x0d, 0x80, 0x55, + 0xa4, 0x48, 0xbc, 0xfb, 0x8e, 0xb5, 0x56, 0x5e, 0x41, 0xb0, 0xa4, 0x9e, 0xd9, 0xf3, 0xeb, 0x9c, 0x3f, 0x52, 0x31, + 0x91, 0x48, 0xe4, 0x3d, 0x57, 0xae, 0xcb, 0xf7, 0xdd, 0x15, 0xbb, 0xa0, 0xb4, 0x7d, 0x41, 0x94, 0xe1, 0x6f, 0xe9, + 0xf5, 0xf2, 0x10, 0xe2, 0x7d, 0x7a, 0x69, 0x7e, 0x91, 0xb6, 0xa2, 0x00, 0x0f, 0x11, 0x7a, 0x54, 0x07, 0x82, 0x9d, + 0xf1, 0x84, 0x07, 0x70, 0xb2, 0x9a, 0xe5, 0xfc, 0x49, 0x0a, 0xe2, 0x44, 0xc1, 0x21, 0xe0, 0x6a, 0x77, 0x9b, 0x7e, + 0x01, 0xc3, 0x97, 0x0e, 0xb6, 0x1c, 0xde, 0x15, 0xbb, 0x1e, 0x2b, 0xf9, 0x07, 0x60, 0xdf, 0xea, 0xc9, 0x58, 0xdd, + 0x1e, 0x38, 0xeb, 0x52, 0x8a, 0x8e, 0x37, 0xc5, 0xe1, 0xed, 0xf9, 0xec, 0xb0, 0x0b, 0x22, 0xb6, 0x0f, 0x32, 0xac, + 0x75, 0xd2, 0xf0, 0x9f, 0x68, 0xeb, 0x60, 0x31, 0xc2, 0xfe, 0x2f, 0xeb, 0x81, 0x97, 0x90, 0x1a, 0x0a, 0x5c, 0x0c, + 0xb6, 0x1c, 0xad, 0xed, 0x32, 0x0d, 0xdc, 0xd4, 0xa0, 0xd7, 0x0f, 0x14, 0xa2, 0xbc, 0x64, 0x34, 0x37, 0x82, 0x4d, + 0x63, 0xc8, 0xc5, 0xe1, 0xb8, 0x59, 0x0e, 0x79, 0x49, 0xd3, 0x69, 0x10, 0x4a, 0x77, 0x96, 0x0d, 0x24, 0x51, 0xf6, + 0x41, 0xa8, 0x5d, 0x5b, 0x0e, 0xbb, 0xc0, 0xf6, 0xe5, 0x8f, 0x86, 0xb1, 0x7f, 0xb5, 0x7c, 0x2a, 0xa4, 0x8b, 0x78, + 0x05, 0x82, 0xa8, 0xfd, 0x3c, 0x1b, 0x6e, 0xfd, 0xab, 0xcd, 0x53, 0xa1, 0xfc, 0xc6, 0x2b, 0x5b, 0x0e, 0xa9, 0xb3, + 0x16, 0xbe, 0x30, 0x1e, 0x1e, 0x5c, 0x19, 0xda, 0x8e, 0x47, 0xa1, 0xff, 0x36, 0x6b, 0x04, 0x37, 0x36, 0xb4, 0xcf, + 0x17, 0x3e, 0x6c, 0x6d, 0x34, 0xd6, 0x14, 0xd3, 0x2d, 0xf4, 0x6f, 0x32, 0x5b, 0xda, 0xd3, 0xa8, 0xe4, 0xc5, 0xb9, + 0x69, 0xc4, 0x42, 0x18, 0x30, 0xf4, 0x93, 0xf9, 0x00, 0xaa, 0xb9, 0xd3, 0x11, 0xc8, 0xe4, 0x03, 0x3d, 0x58, 0x93, + 0x5a, 0xf5, 0xd7, 0x30, 0x93, 0xff, 0x47, 0x2a, 0x2c, 0x46, 0x77, 0xdb, 0x30, 0x53, 0x7f, 0x44, 0xf2, 0x0f, 0x56, + 0xf1, 0x7d, 0xea, 0x85, 0xda, 0x8f, 0x85, 0x15, 0x18, 0x94, 0xa8, 0x1a, 0xd0, 0x03, 0x11, 0x54, 0x65, 0x90, 0x66, + 0x58, 0x9d, 0x83, 0x7e, 0xf7, 0xb4, 0xea, 0x48, 0x0e, 0x69, 0xad, 0x86, 0x54, 0x30, 0x55, 0x6a, 0x50, 0x1d, 0x8f, + 0xab, 0x94, 0xe9, 0x32, 0xe0, 0x92, 0xbe, 0x4a, 0x95, 0x52, 0xf8, 0x4f, 0x04, 0xa0, 0x73, 0x70, 0x8f, 0xaf, 0xc7, + 0x40, 0x9a, 0x61, 0xe1, 0xb7, 0x66, 0xa7, 0xd7, 0x24, 0xdc, 0x26, 0xc1, 0xc5, 0x00, 0xe7, 0xe8, 0x3a, 0x2c, 0x57, + 0x29, 0x44, 0x50, 0x95, 0x50, 0xdf, 0xdc, 0x34, 0x28, 0x6d, 0x35, 0x08, 0x6b, 0x12, 0xea, 0x4c, 0xb2, 0x51, 0x69, + 0xbb, 0x51, 0x98, 0x2d, 0xe2, 0x7a, 0x46, 0x58, 0x73, 0x36, 0x53, 0x0d, 0x4c, 0x1a, 0x8e, 0x9b, 0x46, 0x6b, 0x51, + 0xa1, 0xa6, 0x30, 0xaf, 0x71, 0x55, 0xa9, 0xea, 0x6e, 0xcf, 0x2d, 0xa5, 0x65, 0x7b, 0xd5, 0x4d, 0xb2, 0x21, 0x97, + 0xa1, 0x0c, 0x83, 0xad, 0x1c, 0xc1, 0x04, 0x92, 0xe4, 0xcc, 0xdf, 0xca, 0x3f, 0xd4, 0xa6, 0x6b, 0x01, 0x73, 0x8c, + 0x59, 0x36, 0x2c, 0xe8, 0x15, 0xb8, 0x07, 0x5a, 0xe9, 0xd5, 0x34, 0xbb, 0xaa, 0x82, 0x64, 0x58, 0xe8, 0x65, 0x93, + 0xf1, 0x3f, 0x85, 0x91, 0x26, 0x33, 0x56, 0xb2, 0xc8, 0x76, 0x75, 0x4a, 0x9c, 0xc7, 0x09, 0x6c, 0x8f, 0xa6, 0xb7, + 0x7c, 0x9f, 0x41, 0x54, 0x10, 0x28, 0x98, 0x31, 0x5f, 0x76, 0xf5, 0xcc, 0xf7, 0x99, 0x65, 0xea, 0x3e, 0x1e, 0x8d, + 0x19, 0xdb, 0xef, 0xf7, 0xab, 0x7e, 0x5f, 0xcd, 0xb7, 0x7e, 0x3f, 0x79, 0x6e, 0xfe, 0xf6, 0x80, 0x41, 0x41, 0x4e, + 0x44, 0x53, 0x21, 0x82, 0x7f, 0x48, 0x9e, 0x22, 0x19, 0xdd, 0x69, 0x9f, 0x5b, 0xce, 0x96, 0xf9, 0x09, 0x08, 0xe6, + 0xf1, 0x78, 0xad, 0xc0, 0xae, 0x25, 0x8a, 0x84, 0x2c, 0xff, 0x29, 0x18, 0xcf, 0xdc, 0x07, 0x58, 0x32, 0x00, 0x61, + 0xab, 0x3c, 0x5d, 0xef, 0xf9, 0x2a, 0x78, 0xa7, 0xe3, 0x5d, 0x63, 0x45, 0x06, 0xe2, 0x16, 0xd8, 0x88, 0xb5, 0xf6, + 0x80, 0x9c, 0x29, 0xc0, 0xf1, 0xe2, 0x78, 0xbc, 0x94, 0xbf, 0x74, 0xb3, 0x75, 0x02, 0x95, 0x02, 0xb7, 0x47, 0x27, + 0x07, 0xff, 0x1d, 0x68, 0x06, 0xe5, 0x30, 0x6f, 0x76, 0xbf, 0x33, 0x27, 0x3f, 0x3d, 0xc5, 0x3f, 0xe1, 0x21, 0x3a, + 0xfd, 0x76, 0x6f, 0xfe, 0xa0, 0xa8, 0x3c, 0x1e, 0xd5, 0xe2, 0x07, 0x9e, 0x1f, 0xf8, 0x85, 0x6f, 0x02, 0xb3, 0xc9, + 0xd4, 0x3b, 0xfb, 0x26, 0xaf, 0x98, 0x7a, 0x8d, 0xe7, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xdd, 0xc8, 0x89, + 0x76, 0xaa, 0x30, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, 0x96, 0x78, + 0x96, 0x2e, 0xaf, 0x27, 0x75, 0xb9, 0xd7, 0x8a, 0xa7, 0x03, 0xb0, 0xb8, 0x6d, 0xc0, 0x0b, 0xe0, 0xde, 0x62, 0xeb, + 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, 0x42, 0x30, + 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, 0x77, 0xf9, + 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0xe5, 0x60, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, 0x52, 0x3c, + 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfd, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xb3, 0x7b, 0x72, 0x65, + 0x20, 0x81, 0xa6, 0x03, 0xe0, 0x21, 0x54, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, 0x05, 0xf7, + 0xe9, 0xa7, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa7, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x2a, 0xfb, 0xa6, + 0x02, 0x2a, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, 0x53, 0x71, + 0x73, 0xad, 0xd3, 0xc5, 0xf3, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, 0x07, 0xf1, + 0xb6, 0xb6, 0xa7, 0x3f, 0xf6, 0x10, 0xe9, 0x78, 0x20, 0x17, 0xea, 0x6b, 0x48, 0x25, 0x17, 0xea, 0x06, 0x62, 0x17, + 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0xdb, 0x1a, 0x05, 0x2b, 0x01, 0x67, 0xda, 0x5b, 0x30, 0xd8, 0xc0, 0xba, 0x65, + 0x19, 0xfc, 0x0d, 0xd7, 0x34, 0x81, 0x1b, 0x16, 0x59, 0xef, 0x0d, 0xb6, 0xd2, 0x5b, 0x70, 0xb4, 0x4c, 0x9c, 0x4b, + 0x49, 0x56, 0xb6, 0xc8, 0xb8, 0x7a, 0x14, 0x52, 0x35, 0x3d, 0xdc, 0x89, 0xfa, 0x41, 0x88, 0x3c, 0x58, 0xa7, 0x2c, + 0x2a, 0xd6, 0x20, 0xb3, 0x07, 0x7f, 0x0f, 0x19, 0x39, 0xca, 0x81, 0xa3, 0xd0, 0x5f, 0x9a, 0x40, 0xe7, 0xf9, 0x29, + 0xd4, 0x79, 0x24, 0xd8, 0x4a, 0x3d, 0x14, 0x56, 0x5e, 0x40, 0x74, 0xb0, 0x85, 0xb1, 0xdc, 0x93, 0x50, 0xb1, 0x29, + 0x13, 0x79, 0x1c, 0xd4, 0x12, 0x30, 0x56, 0x10, 0xcc, 0x59, 0x25, 0x5d, 0x90, 0xf2, 0x46, 0x0f, 0x8b, 0xcc, 0xfd, + 0x9d, 0xa0, 0xfc, 0xdf, 0xa9, 0x9c, 0x70, 0x7d, 0x19, 0x02, 0x1c, 0xed, 0x77, 0x20, 0x4a, 0x8c, 0xf5, 0x8b, 0x16, + 0xef, 0x64, 0xe6, 0x6c, 0x6a, 0x07, 0x09, 0x32, 0xb6, 0xc7, 0xaf, 0x10, 0x5a, 0x2d, 0x14, 0x59, 0x34, 0x5c, 0x30, + 0xdd, 0x9e, 0xd2, 0xaa, 0x7b, 0xd8, 0xf0, 0xac, 0xf4, 0x50, 0xa9, 0x6f, 0x63, 0x02, 0xcb, 0x2a, 0x65, 0xf8, 0x76, + 0x42, 0xd5, 0x89, 0x41, 0xc5, 0xba, 0x65, 0x4b, 0x38, 0xc4, 0x62, 0xd2, 0x58, 0x67, 0x03, 0x1e, 0xb1, 0x04, 0xfe, + 0xd9, 0xf2, 0x31, 0x5b, 0xf2, 0x68, 0xb2, 0xbd, 0x59, 0xf6, 0xfb, 0xa5, 0x17, 0x7a, 0xf5, 0x2c, 0xfb, 0x2e, 0x9a, + 0xcf, 0xaa, 0xb9, 0x8f, 0x8a, 0x8b, 0xc9, 0x60, 0xb0, 0xf5, 0xb3, 0xe1, 0x90, 0x25, 0xc3, 0xe1, 0x24, 0xfb, 0x0e, + 0x5e, 0xfb, 0x8e, 0x47, 0x6a, 0x49, 0x25, 0x37, 0x19, 0xec, 0xef, 0x03, 0x1e, 0xf9, 0xac, 0xf3, 0xd3, 0xb2, 0xe9, + 0xd2, 0xfd, 0xcc, 0x8e, 0xbb, 0xd0, 0x1d, 0x60, 0xe3, 0x6d, 0x83, 0x8e, 0xfc, 0xeb, 0x1d, 0x52, 0xea, 0x26, 0x03, + 0xb0, 0x1b, 0x0d, 0x70, 0xc8, 0x54, 0x2f, 0x45, 0x56, 0x2f, 0x65, 0xaa, 0x97, 0x64, 0xe5, 0x12, 0x2c, 0x24, 0xa6, + 0xca, 0x6d, 0x65, 0xe5, 0x96, 0x0d, 0xd7, 0xc3, 0xc1, 0x36, 0x8a, 0xcb, 0x66, 0x05, 0xf7, 0x85, 0x35, 0x05, 0xfe, + 0xdf, 0xb1, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x5b, 0x74, 0x4c, 0x82, 0x0b, 0xc4, 0x3d, 0xbb, 0x03, 0x3b, 0x2c, 0xfc, + 0x05, 0xd7, 0xc9, 0x31, 0xdb, 0xe3, 0xa3, 0xd0, 0x2b, 0xd8, 0x9d, 0x4f, 0x40, 0xbb, 0x60, 0x6b, 0x80, 0x6c, 0x6c, + 0x87, 0x8f, 0x56, 0xc7, 0xe3, 0x5b, 0xcf, 0x67, 0x0f, 0xf8, 0xe3, 0x72, 0x75, 0x3c, 0xee, 0x3d, 0xa3, 0xde, 0xbb, + 0xe5, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xed, 0x0d, 0x8f, 0x27, 0x83, 0xc1, 0xad, 0xbf, 0xe0, 0xf5, 0xec, 0x16, 0xb4, + 0x03, 0x97, 0x0b, 0xa9, 0x6b, 0xf6, 0xee, 0x78, 0xe6, 0x2d, 0x70, 0x6c, 0xee, 0xe0, 0xe8, 0xed, 0xf7, 0xbd, 0x15, + 0x8f, 0xbc, 0x3b, 0x52, 0x31, 0xad, 0xb9, 0xe2, 0x78, 0xdb, 0xe1, 0x7e, 0xba, 0xe6, 0x21, 0x3c, 0xc2, 0xaa, 0x4c, + 0x6f, 0x83, 0xf7, 0x3e, 0x5b, 0x6b, 0x16, 0xb8, 0x07, 0xcc, 0xb1, 0x21, 0x3b, 0xa1, 0x99, 0xf8, 0x6b, 0xec, 0x9f, + 0x5b, 0xd5, 0x3f, 0x34, 0xff, 0x4b, 0xdd, 0x4f, 0xe0, 0xf6, 0x45, 0x16, 0x24, 0xf6, 0x9e, 0xdf, 0xb2, 0x7b, 0x6e, + 0xd8, 0x66, 0x2f, 0x4c, 0xd9, 0x67, 0x4a, 0x8d, 0x1f, 0x29, 0x75, 0x63, 0x19, 0x56, 0x32, 0x77, 0x5f, 0x46, 0xe0, + 0x70, 0x40, 0x7e, 0x5a, 0x21, 0x0e, 0x42, 0xeb, 0x26, 0xab, 0xb9, 0xa2, 0x9c, 0x0b, 0x6d, 0x99, 0x79, 0x15, 0xb0, + 0x98, 0xa5, 0x14, 0x1a, 0x0b, 0x00, 0x04, 0x93, 0x42, 0x6b, 0xef, 0x65, 0x00, 0x39, 0x41, 0xc3, 0x9f, 0x9a, 0xab, + 0xa2, 0xac, 0x65, 0x4b, 0x42, 0x94, 0xed, 0x7a, 0x78, 0x8d, 0x90, 0x69, 0xfd, 0xfe, 0x25, 0x91, 0xac, 0x4d, 0xf2, + 0x9b, 0x1a, 0x2d, 0x01, 0x39, 0x59, 0x02, 0x26, 0x7e, 0xae, 0xf9, 0x04, 0xe0, 0x49, 0xc7, 0x83, 0xfc, 0x3b, 0x5e, + 0x33, 0x41, 0x64, 0x1b, 0xb9, 0x3f, 0x29, 0x9e, 0x23, 0x19, 0x41, 0xf1, 0x5d, 0xad, 0x32, 0x16, 0x86, 0x79, 0xa0, + 0x80, 0xbc, 0x07, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, 0xe8, + 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x3d, 0x89, 0x6e, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, 0x67, + 0xd1, 0x77, 0xf9, 0x7c, 0x42, 0x4a, 0xb2, 0xe3, 0x31, 0x1b, 0x55, 0x75, 0xb1, 0x99, 0x86, 0xf2, 0xa7, 0x87, 0xe0, + 0xeb, 0x05, 0xf5, 0x9a, 0xac, 0x52, 0xfd, 0x1d, 0x55, 0xca, 0x8b, 0x86, 0xd7, 0xfe, 0x77, 0xb9, 0xdc, 0xf7, 0x80, + 0xb4, 0x96, 0x97, 0x5c, 0xbe, 0x1f, 0x21, 0xc6, 0x88, 0x1f, 0x78, 0x25, 0x8f, 0x58, 0xa8, 0xa6, 0x70, 0xcd, 0x23, + 0x04, 0x79, 0xcb, 0x74, 0xf0, 0xb7, 0x9e, 0x38, 0xdd, 0x9f, 0x28, 0xed, 0xe2, 0x0b, 0x8b, 0xba, 0x27, 0x6b, 0xeb, + 0x06, 0xe4, 0x60, 0xc3, 0x74, 0x51, 0x90, 0x6d, 0x4a, 0x23, 0x68, 0xa3, 0xe5, 0xc0, 0x86, 0x93, 0xab, 0x0d, 0x67, + 0xae, 0x21, 0xb8, 0x2f, 0x2f, 0xd3, 0xd1, 0x02, 0x3e, 0xa4, 0xba, 0xbd, 0xc4, 0xcf, 0x87, 0x0d, 0x8f, 0x80, 0xcc, + 0x8e, 0xf8, 0xcc, 0x26, 0x92, 0x4e, 0xea, 0x52, 0x01, 0xbb, 0x5d, 0xbc, 0x05, 0x39, 0x62, 0xe6, 0xbe, 0x42, 0xf5, + 0x2d, 0x1a, 0x70, 0x65, 0xac, 0x7d, 0x4d, 0x32, 0x16, 0xde, 0x94, 0xd3, 0x70, 0x90, 0xc3, 0x73, 0xfa, 0xda, 0x72, + 0x9b, 0x65, 0x3f, 0x17, 0x10, 0x04, 0x51, 0x12, 0x8f, 0x0f, 0x78, 0x5f, 0xe6, 0x43, 0x8d, 0x92, 0x8f, 0x65, 0x23, + 0x95, 0x5e, 0x89, 0xfe, 0x6e, 0xcc, 0x25, 0x06, 0x7c, 0x9b, 0xb7, 0x05, 0x85, 0xcb, 0xea, 0x78, 0xbc, 0xac, 0x46, + 0xc6, 0xb3, 0x0c, 0x54, 0x2b, 0xd3, 0x3a, 0x88, 0xcd, 0x7c, 0xb1, 0xf0, 0x17, 0x3b, 0x27, 0x11, 0x51, 0x10, 0xd8, + 0x91, 0xf0, 0x20, 0x52, 0xbf, 0xcc, 0x3d, 0xdd, 0xa9, 0x3e, 0x3b, 0x2c, 0x6c, 0x22, 0xbd, 0xa0, 0x64, 0xf2, 0x49, + 0x70, 0x50, 0xfd, 0x1d, 0x84, 0x0d, 0xe1, 0xcd, 0xab, 0x5e, 0x67, 0x99, 0x9a, 0x95, 0x20, 0x61, 0xc6, 0x1c, 0xc1, + 0xe3, 0xb0, 0xd3, 0xd8, 0x96, 0xc7, 0x16, 0x1c, 0x9d, 0xb7, 0x61, 0x2b, 0xb6, 0x66, 0x77, 0xaa, 0x4e, 0x0b, 0x1e, + 0x4e, 0x87, 0xd7, 0x01, 0xae, 0xbe, 0xcd, 0x25, 0xe7, 0x2b, 0x3a, 0xc1, 0x36, 0x03, 0x1e, 0x4d, 0xc4, 0x6c, 0xf3, + 0x5d, 0xa4, 0x16, 0xcf, 0x66, 0xc8, 0x17, 0xb4, 0xfe, 0xc4, 0x6c, 0x65, 0x92, 0x57, 0x03, 0xbe, 0x98, 0x6c, 0xbe, + 0x8b, 0xe0, 0xd5, 0xef, 0xc0, 0x8a, 0x91, 0x39, 0xb3, 0x6c, 0xf3, 0x5d, 0x84, 0x63, 0xb6, 0xfa, 0x2e, 0xa2, 0x51, + 0x5b, 0xcb, 0x7d, 0xe9, 0xae, 0x01, 0x61, 0xe5, 0x8e, 0xc5, 0xf0, 0x1a, 0x88, 0x67, 0xda, 0x48, 0xba, 0x91, 0x86, + 0xde, 0x98, 0x87, 0xd3, 0x38, 0xd8, 0x50, 0x2b, 0xe4, 0x99, 0x21, 0x66, 0xf1, 0x77, 0xd1, 0x9c, 0xad, 0xb1, 0x22, + 0x5b, 0x1e, 0x0f, 0xae, 0x27, 0xdb, 0x1b, 0xbe, 0x01, 0xf2, 0xb3, 0xc9, 0xd6, 0x6c, 0x51, 0x77, 0x5c, 0xcc, 0xb6, + 0xdf, 0x45, 0xf3, 0xc9, 0x1a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x35, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, 0x3d, + 0xb6, 0x19, 0x07, 0x2b, 0xb6, 0xb9, 0x0e, 0xee, 0xd8, 0x66, 0x0c, 0x44, 0x1c, 0xd4, 0xef, 0xde, 0x16, 0x16, 0x5f, + 0xc4, 0x36, 0xd7, 0x26, 0x6d, 0xfb, 0x5d, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xcd, 0xbc, 0x35, 0x83, 0x4b, + 0xc8, 0xd2, 0x8b, 0xd9, 0x76, 0x78, 0xcd, 0x36, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0x56, 0xfc, 0x8e, 0x25, 0x7c, 0xdd, + 0xc4, 0x37, 0x5b, 0xd0, 0x88, 0x9e, 0x64, 0xd0, 0x57, 0x50, 0x33, 0x73, 0x5e, 0x5a, 0x50, 0xb9, 0x87, 0x16, 0x1c, + 0x50, 0x90, 0xb6, 0x01, 0x82, 0x24, 0x9e, 0xdd, 0xcb, 0x70, 0x73, 0x2b, 0x85, 0x01, 0x37, 0x81, 0x19, 0x30, 0x30, + 0xfd, 0x0c, 0x7e, 0x58, 0xe9, 0x12, 0x21, 0xce, 0x7e, 0x4a, 0x49, 0x32, 0xcf, 0x4f, 0x45, 0x9a, 0xbb, 0x85, 0xeb, + 0x14, 0x66, 0x45, 0x81, 0xea, 0xa7, 0xa4, 0x34, 0xb0, 0x50, 0x89, 0x4c, 0xa5, 0xe0, 0x97, 0xcd, 0x79, 0x94, 0x9d, + 0xa2, 0x73, 0x5d, 0x5e, 0x4f, 0x9c, 0xd3, 0x49, 0xdf, 0x7f, 0xe0, 0x18, 0xb6, 0x90, 0x81, 0x0b, 0x7f, 0xea, 0x09, + 0xe3, 0xd4, 0x0a, 0xc4, 0x54, 0xf2, 0xec, 0x29, 0x7c, 0x26, 0xb4, 0x3a, 0xba, 0xf0, 0xfd, 0xa0, 0xd0, 0x26, 0xe9, + 0x16, 0x24, 0x29, 0x78, 0x8a, 0x5e, 0x72, 0xde, 0x06, 0x2a, 0xc5, 0x88, 0x16, 0x44, 0xda, 0x5a, 0x66, 0x0e, 0xd2, + 0x96, 0xe6, 0xbb, 0x26, 0x7e, 0x0e, 0x0b, 0xb8, 0x88, 0x16, 0x76, 0xa5, 0xe0, 0x51, 0x15, 0x2b, 0xf7, 0x36, 0xcf, + 0x11, 0xce, 0xe8, 0x5a, 0x26, 0x00, 0xae, 0xf7, 0xab, 0xb0, 0x56, 0x78, 0x45, 0xcd, 0x22, 0x2f, 0x6a, 0xfa, 0x64, + 0x0b, 0xdc, 0xc7, 0xa2, 0x44, 0x81, 0xb3, 0x16, 0x0c, 0xd8, 0x0a, 0x4b, 0x76, 0x52, 0xd8, 0x14, 0x2d, 0xa1, 0x77, + 0xc0, 0x4f, 0x07, 0x35, 0x93, 0x01, 0x34, 0x01, 0x34, 0x1e, 0xff, 0x02, 0x50, 0xd3, 0xdb, 0x5a, 0x6c, 0xaa, 0xa0, + 0x54, 0xca, 0x4d, 0xf8, 0x19, 0x18, 0x66, 0xf8, 0xa1, 0x90, 0xdb, 0x44, 0x89, 0x9c, 0x1f, 0x8b, 0x52, 0x2c, 0x4b, + 0x51, 0x25, 0xed, 0x86, 0x82, 0x47, 0x84, 0xdb, 0xa0, 0x31, 0x73, 0x7b, 0xa2, 0x8b, 0x56, 0x84, 0x72, 0x6c, 0x37, + 0x31, 0xd2, 0x28, 0xb3, 0xb3, 0x5d, 0x27, 0x0b, 0xed, 0xf7, 0x55, 0x0e, 0x59, 0x07, 0xac, 0x91, 0x7c, 0xbd, 0xe6, + 0xd0, 0x6d, 0xa3, 0xbc, 0x78, 0xf0, 0x7c, 0x05, 0xa7, 0x39, 0x9e, 0xd8, 0x5d, 0xaf, 0x3b, 0x45, 0x22, 0x5e, 0xe1, + 0xa4, 0xaa, 0x46, 0xb2, 0x70, 0xdc, 0xb9, 0xd3, 0x5a, 0xac, 0x95, 0x4c, 0xe3, 0x72, 0xd0, 0x00, 0xd0, 0x0c, 0x3e, + 0x95, 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, + 0x11, 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0xf3, 0x4a, + 0x0f, 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, + 0x3c, 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, + 0x5d, 0x28, 0xe7, 0x4c, 0xce, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, + 0x8c, 0x4e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x56, 0xa9, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, + 0xc6, 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, + 0x94, 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x07, 0x59, 0x14, 0x38, 0x80, + 0xab, 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0x0e, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, + 0xcc, 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, + 0xb4, 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x4f, 0x5f, + 0xa7, 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7d, 0x41, 0x11, 0x17, 0x35, 0xb8, + 0xf2, 0xce, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, + 0x0e, 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x46, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xac, 0x58, 0x3e, 0x5a, 0xa8, 0xcc, + 0x08, 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xd3, 0x3d, 0xba, 0xab, 0xce, + 0x32, 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, + 0x77, 0x9d, 0xe5, 0x5b, 0xa9, 0x66, 0x6b, 0x28, 0x2a, 0xb5, 0x92, 0x14, 0x07, 0x19, 0xae, 0xdb, 0xdc, 0x87, 0xcd, + 0x14, 0xf4, 0x8c, 0x91, 0xc8, 0x3c, 0x7f, 0x22, 0x5f, 0x82, 0x73, 0xc6, 0x59, 0x21, 0x30, 0x61, 0xac, 0xde, 0xb5, + 0x96, 0x4a, 0x43, 0x8a, 0xb1, 0x93, 0x51, 0x96, 0x55, 0x96, 0x2e, 0xb3, 0xb5, 0x84, 0x2d, 0xab, 0xc8, 0x2d, 0x6c, + 0x99, 0xc9, 0x6a, 0xbe, 0xcf, 0xb9, 0x83, 0xf2, 0xcd, 0x36, 0x19, 0x3f, 0x48, 0x64, 0xef, 0x36, 0x50, 0xc2, 0xf3, + 0xd1, 0x7f, 0x20, 0xfd, 0x36, 0xc3, 0x38, 0xe5, 0xb6, 0x92, 0x16, 0xe0, 0xf4, 0x8f, 0xc7, 0xf7, 0x39, 0x06, 0x0d, + 0x8e, 0x30, 0x8e, 0xac, 0xdf, 0xbf, 0xcb, 0xbd, 0x1a, 0x13, 0x75, 0xf4, 0x42, 0xbf, 0x9f, 0xd3, 0xc3, 0x69, 0x3e, + 0x5a, 0xa7, 0x3b, 0x64, 0x27, 0xb4, 0xb1, 0xf2, 0x83, 0x5a, 0x01, 0xb3, 0xb7, 0x3e, 0x9f, 0x0e, 0x40, 0xc7, 0x02, + 0x24, 0x9a, 0xcd, 0x44, 0x62, 0x4e, 0xba, 0x27, 0xe1, 0xe9, 0x81, 0x05, 0x0e, 0x30, 0x39, 0xff, 0x87, 0xf0, 0x66, + 0x60, 0x83, 0x46, 0x89, 0xbe, 0x46, 0x57, 0xb5, 0xb9, 0xd1, 0xf1, 0xd2, 0x53, 0x48, 0x64, 0x05, 0xcb, 0xe7, 0xbe, + 0xdc, 0xc0, 0x69, 0x0f, 0x35, 0x87, 0xca, 0x12, 0x3c, 0x3d, 0x97, 0xf9, 0xf1, 0xb8, 0xc9, 0xa0, 0xb0, 0xfd, 0x46, + 0x68, 0x6f, 0xcc, 0x52, 0x0d, 0x15, 0xe1, 0xa0, 0xf3, 0xb5, 0x98, 0xd5, 0x23, 0xfa, 0x7b, 0x7e, 0x3c, 0xae, 0x09, + 0x0c, 0x38, 0x2c, 0x65, 0x26, 0x5a, 0x28, 0x96, 0xd6, 0xd9, 0x8c, 0xea, 0xc0, 0x03, 0x13, 0x73, 0x16, 0xee, 0x01, + 0xb4, 0x49, 0xad, 0x02, 0xbd, 0x8a, 0xe8, 0x27, 0xee, 0xd7, 0xf6, 0xeb, 0xf5, 0xc8, 0x2c, 0x1d, 0xb9, 0x31, 0x16, + 0x00, 0x1c, 0x78, 0x59, 0x93, 0x3c, 0x27, 0x5f, 0x43, 0xbb, 0x27, 0x17, 0xf2, 0x27, 0x28, 0x5b, 0x78, 0xa5, 0x9a, + 0x56, 0x16, 0x6b, 0xae, 0xaa, 0x57, 0x17, 0x3c, 0x37, 0x99, 0xd6, 0x69, 0x25, 0x54, 0xac, 0x5f, 0x43, 0x5d, 0xe2, + 0xb5, 0xa6, 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x79, 0x6d, + 0x1c, 0x3e, 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0xab, 0x1a, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, + 0xc5, 0xc4, 0xee, 0xd0, 0xaa, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, + 0x01, 0x2f, 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x72, 0x26, + 0xc0, 0x0f, 0x4a, 0xad, 0xe9, 0x83, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, + 0xe7, 0xe3, 0xe5, 0xb5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x55, 0xab, 0x7f, 0x98, 0xea, 0x5b, + 0xe8, 0x4e, 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, + 0x1c, 0xec, 0x0d, 0x70, 0xe2, 0x97, 0xc7, 0xa3, 0xb8, 0xa9, 0x7c, 0x76, 0xd9, 0x35, 0xb2, 0x72, 0x00, 0x73, 0x88, + 0x82, 0x71, 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xcd, 0xf8, 0xf4, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0x55, + 0xdf, 0x3d, 0x03, 0xd2, 0xb2, 0x7e, 0x3f, 0x7a, 0x7e, 0x3d, 0x7d, 0x36, 0x8c, 0x02, 0x70, 0xec, 0xb2, 0x97, 0x97, + 0x31, 0x5f, 0x5d, 0x33, 0xcb, 0x14, 0x16, 0xf9, 0x66, 0x40, 0x75, 0xc9, 0x6a, 0xe9, 0x7a, 0x05, 0x58, 0xba, 0xfc, + 0xe6, 0x21, 0x4c, 0x0d, 0x68, 0x64, 0xcd, 0xdd, 0x69, 0xae, 0x05, 0x4a, 0x3d, 0xef, 0x67, 0x86, 0x7c, 0x5d, 0x06, + 0x5d, 0x41, 0xba, 0xe7, 0x11, 0xe9, 0xe5, 0x41, 0x3a, 0xdd, 0x1f, 0x4a, 0x01, 0x96, 0xfa, 0x52, 0x7c, 0x06, 0x85, + 0x45, 0xe3, 0x1b, 0x01, 0xda, 0x1a, 0xaa, 0x69, 0xaf, 0x14, 0x55, 0x2f, 0xe8, 0x95, 0xe2, 0x73, 0x4f, 0x0f, 0x95, + 0xf9, 0xb2, 0x74, 0xf4, 0x3f, 0xa3, 0xe6, 0x82, 0x13, 0x62, 0x26, 0xe6, 0x00, 0x2a, 0x41, 0x1b, 0xdf, 0xfa, 0x64, + 0xe3, 0x53, 0xbd, 0x8a, 0x9b, 0x3e, 0xaf, 0xad, 0x65, 0x4e, 0x08, 0x9b, 0xee, 0x25, 0x40, 0x45, 0x5e, 0x09, 0x8f, + 0x60, 0xf9, 0xe5, 0x0f, 0x79, 0xba, 0x42, 0xb4, 0x8e, 0x7b, 0x96, 0xb9, 0x34, 0xf6, 0xaf, 0x0d, 0xa6, 0xaf, 0x6f, + 0xb7, 0x45, 0x7e, 0x6a, 0x62, 0xc2, 0x7a, 0xac, 0xe8, 0x9b, 0x77, 0xe1, 0x5a, 0xa0, 0xc0, 0xa1, 0x44, 0x62, 0x9b, + 0x2a, 0x14, 0xf1, 0x20, 0xe9, 0xd3, 0x45, 0xeb, 0xd3, 0x00, 0x53, 0x6b, 0x39, 0x30, 0x87, 0x70, 0x15, 0x17, 0x3e, + 0x7a, 0xfa, 0x16, 0xb3, 0x70, 0x3e, 0xf1, 0x3e, 0x7a, 0xc5, 0xc8, 0x7c, 0xdc, 0x47, 0xa5, 0x92, 0xfe, 0x79, 0x3c, + 0xce, 0xf2, 0xb9, 0xef, 0xd0, 0x47, 0x7a, 0xa8, 0x72, 0x41, 0xd9, 0x1b, 0x63, 0x12, 0x81, 0xd2, 0x18, 0xef, 0xe3, + 0xe0, 0x38, 0xef, 0xd3, 0x00, 0x52, 0xfb, 0xc4, 0x7b, 0x52, 0x72, 0x78, 0xce, 0x31, 0x27, 0x94, 0x56, 0x84, 0xe5, + 0x7c, 0x91, 0xa1, 0x5c, 0x77, 0x4e, 0xc1, 0x24, 0x87, 0x04, 0xc3, 0x5f, 0x35, 0x6f, 0x62, 0x05, 0xc2, 0xae, 0x91, + 0x33, 0x47, 0x4f, 0xaa, 0x24, 0x2c, 0x05, 0x1c, 0x95, 0x99, 0x67, 0xd8, 0x1b, 0x9e, 0x18, 0x46, 0x0e, 0x56, 0xf9, + 0xa3, 0x3a, 0x11, 0xb9, 0x47, 0x17, 0x18, 0x95, 0x85, 0x57, 0x0d, 0x5d, 0x69, 0x50, 0x49, 0x76, 0xfa, 0x15, 0xd7, + 0x80, 0xda, 0x1a, 0x23, 0x96, 0x83, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, + 0x95, 0xdc, 0xf5, 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, + 0x2c, 0x85, 0x23, 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, + 0x42, 0x9a, 0x6c, 0x5f, 0xcf, 0x3f, 0xe4, 0x5a, 0x90, 0x95, 0x5b, 0xce, 0xe9, 0xb0, 0xf8, 0xc6, 0xd9, 0x57, 0x39, + 0x79, 0x8a, 0x59, 0x46, 0x7a, 0xa7, 0x98, 0x17, 0xf0, 0xa7, 0xb2, 0xd4, 0x93, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, + 0x97, 0xde, 0xb6, 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0x0f, 0xf1, 0x48, 0x9e, 0x61, 0x5b, 0x96, 0xb0, 0xd0, 0x2a, + 0x18, 0x03, 0x48, 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x8f, 0xc7, 0xcb, 0xad, 0x39, 0x4b, 0x0e, 0xe0, 0xfa, 0xca, + 0x13, 0xf3, 0x0e, 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x5b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, + 0x62, 0xad, 0x63, 0xc9, 0xad, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0x7f, 0x70, 0x83, 0xab, + 0x6b, 0x63, 0x50, 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0x8b, 0x8a, 0x7c, 0xf9, 0xad, + 0x9d, 0x03, 0x82, 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, + 0x33, 0xd8, 0xc4, 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, + 0xab, 0x85, 0x48, 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, + 0x41, 0x27, 0x68, 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, + 0x07, 0x99, 0x13, 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, + 0x74, 0x28, 0x59, 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, + 0x0a, 0x5c, 0x08, 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xd5, 0xb4, 0x90, 0xa6, 0x81, 0x6a, + 0x9a, 0x3b, 0xe6, 0x81, 0xbd, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0x55, 0xfc, 0x83, 0x74, 0x2f, 0xce, + 0xe1, 0x2f, 0x6b, 0xfa, 0x20, 0xc2, 0x46, 0x0e, 0x1a, 0x4b, 0x89, 0xb1, 0x51, 0xe1, 0xdf, 0x12, 0x65, 0x43, 0x86, + 0x80, 0x10, 0xd2, 0x46, 0x45, 0x3f, 0xac, 0x2f, 0xef, 0x32, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, + 0xa9, 0x47, 0x3c, 0x5e, 0x1b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, + 0x28, 0x17, 0xbc, 0xe2, 0x39, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xa8, 0xe8, 0xf3, 0x39, 0xf0, 0x4c, + 0x40, 0xa0, 0x63, 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0xb7, 0x48, + 0x94, 0xfa, 0x8a, 0x94, 0xa4, 0x6f, 0x45, 0x8d, 0x57, 0x62, 0x15, 0x91, 0x40, 0x86, 0x1a, 0x22, 0x56, 0xd5, 0x53, + 0xf7, 0xa6, 0x98, 0x0c, 0x06, 0xb9, 0x2f, 0xa7, 0x27, 0xde, 0xd0, 0x50, 0x79, 0xd7, 0x15, 0xed, 0xf4, 0x44, 0x2b, + 0xe5, 0x2d, 0xa4, 0x25, 0x68, 0x1a, 0x46, 0x9a, 0x43, 0xa9, 0x6b, 0xe9, 0x6e, 0x0c, 0xe2, 0x4b, 0x26, 0x7a, 0xb6, + 0x53, 0x3b, 0x4a, 0x5b, 0xd2, 0x1e, 0x42, 0x7a, 0xee, 0x92, 0x8f, 0x21, 0x42, 0x4c, 0x55, 0xa5, 0xbc, 0x09, 0xd1, + 0xc9, 0xfd, 0x80, 0x21, 0x11, 0xe8, 0x73, 0x8e, 0x61, 0x5d, 0x34, 0xd4, 0x18, 0x6c, 0x6d, 0xb6, 0x50, 0xc2, 0x7c, + 0xc9, 0x78, 0x2a, 0x19, 0x34, 0x00, 0x32, 0xe0, 0xb3, 0x97, 0x81, 0xe5, 0xaf, 0x20, 0x7e, 0xb4, 0xf1, 0xf1, 0xf8, + 0x67, 0x4d, 0x21, 0xb6, 0x7f, 0xc2, 0x66, 0x08, 0x8f, 0xea, 0x01, 0xcf, 0x7c, 0x13, 0x27, 0x68, 0x05, 0x24, 0x65, + 0x76, 0x34, 0x91, 0xbd, 0xea, 0x21, 0x9c, 0xca, 0x0a, 0xd4, 0x51, 0xd6, 0x59, 0x09, 0x3f, 0xc2, 0x54, 0xb7, 0x12, + 0x6b, 0x81, 0x36, 0x57, 0x2b, 0xd6, 0x02, 0x38, 0xf0, 0x2b, 0x08, 0x9e, 0xa8, 0xe6, 0xe0, 0x62, 0x50, 0x80, 0xcf, + 0x01, 0xf0, 0x22, 0x77, 0xe1, 0xc1, 0x3c, 0xb2, 0xac, 0x46, 0x18, 0x8e, 0x2a, 0x62, 0xfd, 0x9a, 0xed, 0xc8, 0x07, + 0x6e, 0xc7, 0xf8, 0x5c, 0x7b, 0x2c, 0x59, 0x0e, 0x46, 0x99, 0x7b, 0xb5, 0x44, 0xcf, 0x9b, 0x34, 0x6e, 0x46, 0x4f, + 0x0e, 0xb5, 0xfc, 0x5f, 0xd0, 0xcb, 0xa0, 0xbf, 0x85, 0x5b, 0x5e, 0xf3, 0xbb, 0x05, 0x91, 0x66, 0x7a, 0x05, 0x91, + 0x32, 0x6a, 0x44, 0xc6, 0x10, 0x36, 0xa9, 0x6e, 0x65, 0x93, 0xea, 0x42, 0xc0, 0xd3, 0x09, 0xa9, 0xae, 0x85, 0xb4, + 0x51, 0x4d, 0xeb, 0x40, 0xc6, 0x22, 0xbd, 0xfb, 0xf1, 0x2f, 0x2f, 0x3e, 0xbd, 0xf9, 0xe5, 0xc7, 0xc5, 0x9b, 0x77, + 0xaf, 0xdf, 0xbc, 0x7b, 0xf3, 0xe9, 0x37, 0x82, 0xf0, 0x98, 0x0a, 0x95, 0xe1, 0xc3, 0xfb, 0xdb, 0x37, 0x4e, 0x06, + 0xdb, 0x9b, 0x21, 0x6b, 0xdf, 0xc8, 0xc1, 0x10, 0x88, 0x6c, 0x10, 0x32, 0xc8, 0x4e, 0x6d, 0xfb, 0x33, 0x31, 0xc7, + 0xd8, 0x3b, 0x81, 0xc9, 0x16, 0x24, 0x87, 0x65, 0x5e, 0x32, 0x22, 0x57, 0x8e, 0xd6, 0x0f, 0x68, 0xc1, 0x5b, 0x70, + 0x91, 0x49, 0xf3, 0xd5, 0x2f, 0x04, 0xb1, 0x4f, 0x2b, 0xa9, 0xf2, 0xd5, 0xb6, 0xe6, 0xf9, 0xf6, 0x7e, 0x9f, 0xd3, + 0x8a, 0x99, 0x4b, 0x23, 0x6a, 0x01, 0x0e, 0xc0, 0x97, 0xf0, 0xc7, 0x8d, 0xb6, 0xa4, 0xc9, 0x2c, 0xfa, 0x2c, 0x84, + 0xa0, 0x4b, 0x03, 0x69, 0x62, 0x8f, 0xbc, 0xd4, 0x27, 0x0b, 0x09, 0xdc, 0x11, 0xc3, 0xa7, 0x15, 0x41, 0xaf, 0x18, + 0x51, 0x5c, 0x72, 0x85, 0x4a, 0x29, 0xf9, 0x37, 0xca, 0x2e, 0x2a, 0xe4, 0xac, 0x60, 0xf7, 0x8a, 0x1c, 0x19, 0x3f, + 0x08, 0x26, 0xbe, 0x0a, 0xdc, 0x7f, 0x89, 0x77, 0x38, 0x53, 0x1c, 0xc9, 0x09, 0x7f, 0xc8, 0x30, 0xb0, 0xbf, 0x02, + 0x9f, 0x57, 0x87, 0x79, 0x79, 0xab, 0x4f, 0xb9, 0x25, 0x1f, 0x4f, 0x96, 0x37, 0x60, 0xb0, 0x5f, 0xaa, 0xe6, 0x6e, + 0x78, 0x3d, 0x5b, 0xce, 0xd9, 0x61, 0x16, 0xcd, 0x83, 0x15, 0x9b, 0x65, 0xf3, 0x60, 0xdd, 0xf0, 0x0d, 0xbb, 0xe3, + 0x1b, 0xab, 0x6a, 0x1b, 0xbb, 0x6a, 0x93, 0x2d, 0xbf, 0x03, 0x09, 0xe1, 0x36, 0xf3, 0x72, 0x96, 0xb0, 0x95, 0xcf, + 0xb6, 0x20, 0xd1, 0xae, 0xd9, 0x16, 0x2e, 0x62, 0x1b, 0xfe, 0x63, 0xee, 0x6d, 0x59, 0xc9, 0x2e, 0xc7, 0xac, 0xc2, + 0xf9, 0xe7, 0xc3, 0x03, 0xda, 0x0b, 0xf5, 0xb3, 0x6b, 0xf5, 0x6c, 0xa2, 0xec, 0x66, 0xdb, 0xd1, 0xe2, 0x3e, 0xad, + 0xb6, 0x61, 0x86, 0x9e, 0xe5, 0xf0, 0xd1, 0x56, 0x0a, 0x7e, 0x7a, 0x81, 0x5f, 0xb2, 0xa3, 0xb6, 0xd2, 0xb6, 0x5d, + 0x95, 0xd8, 0x0a, 0x5a, 0x14, 0x59, 0xad, 0xf0, 0xc0, 0x8a, 0x3f, 0x87, 0x05, 0x8c, 0x3d, 0xc7, 0x39, 0xaf, 0xfd, + 0x11, 0x32, 0xde, 0x3b, 0x00, 0x68, 0x99, 0xe3, 0x00, 0x8f, 0x58, 0x31, 0x8a, 0x06, 0xef, 0xf2, 0x5a, 0x59, 0xad, + 0x34, 0x27, 0xa1, 0x6d, 0xc4, 0xaa, 0xe5, 0x48, 0xd5, 0x8c, 0x48, 0x1f, 0xa4, 0xe7, 0x7d, 0x8f, 0xa8, 0x06, 0x7b, + 0x32, 0xaf, 0x03, 0xfb, 0xf4, 0xb2, 0xb5, 0xaa, 0x3b, 0xbf, 0xa7, 0x4a, 0x97, 0x1c, 0xd9, 0xf2, 0xd3, 0x65, 0xf8, + 0xa0, 0xfe, 0x94, 0x5c, 0x1f, 0x0a, 0x1c, 0xe1, 0xb1, 0x0a, 0x38, 0x5f, 0xcf, 0x45, 0xbb, 0x13, 0x61, 0x57, 0x2e, + 0x01, 0x21, 0xbe, 0xa4, 0x69, 0x8e, 0xc7, 0x11, 0x4d, 0x44, 0xd8, 0xc4, 0xe8, 0x2f, 0xec, 0x3e, 0x94, 0x58, 0x2e, + 0x2b, 0x0d, 0x4a, 0x2e, 0x19, 0xbc, 0x27, 0xed, 0x35, 0x68, 0x96, 0x57, 0xae, 0x26, 0x13, 0x39, 0x28, 0x1f, 0x8f, + 0x05, 0xec, 0xa5, 0xc6, 0x4f, 0x13, 0x7e, 0xc2, 0xf2, 0xd6, 0xde, 0x9a, 0x52, 0x54, 0xd2, 0x00, 0x15, 0xf8, 0x98, + 0xc1, 0xff, 0xee, 0x0c, 0xb1, 0x60, 0x8a, 0x4e, 0x1f, 0xce, 0xc4, 0xdc, 0x7a, 0x6e, 0x95, 0x75, 0x92, 0xad, 0x51, + 0x4e, 0xc0, 0xbf, 0xa5, 0x3a, 0x4e, 0x12, 0xe1, 0xd4, 0x7b, 0xc4, 0x45, 0xdd, 0xcb, 0x21, 0xea, 0x86, 0xbd, 0xc9, + 0x75, 0xb0, 0xe5, 0x34, 0x0d, 0x4e, 0xc4, 0xaf, 0xd4, 0x67, 0xef, 0x33, 0x8b, 0x47, 0x1d, 0xd9, 0x88, 0x92, 0x34, + 0x8e, 0x45, 0x0e, 0xdb, 0xfb, 0x42, 0xee, 0xff, 0xfd, 0x3e, 0x84, 0x93, 0x56, 0x41, 0x52, 0x7a, 0x02, 0x11, 0xe1, + 0xe8, 0xf0, 0x23, 0xc2, 0x13, 0xa9, 0x2a, 0x7c, 0x52, 0x9f, 0xb9, 0x31, 0xbb, 0x17, 0xe6, 0xa8, 0xde, 0x01, 0x0c, + 0x63, 0xbd, 0xb3, 0x08, 0x49, 0xb4, 0xd2, 0x8c, 0xb6, 0x1e, 0x10, 0x23, 0xde, 0x6f, 0x2c, 0x32, 0x18, 0x6b, 0x4b, + 0x22, 0x01, 0x7c, 0x45, 0x42, 0x86, 0xb6, 0x8d, 0xc0, 0x8c, 0xe1, 0xed, 0xac, 0xb8, 0x74, 0x1d, 0xb6, 0x39, 0x87, + 0x2f, 0x64, 0xa1, 0x59, 0x47, 0x94, 0x26, 0x08, 0xf9, 0x07, 0x9c, 0x2c, 0x14, 0x46, 0xf3, 0xea, 0x24, 0x9d, 0x24, + 0xd6, 0xf7, 0x5d, 0xa5, 0x82, 0xcd, 0xe6, 0x16, 0xf5, 0x65, 0x27, 0xc9, 0x2f, 0xc1, 0x49, 0xc7, 0x49, 0x16, 0x39, + 0x88, 0x5a, 0x54, 0xce, 0x6d, 0x12, 0x96, 0x76, 0x75, 0xaa, 0xed, 0x66, 0x53, 0x94, 0x75, 0xf5, 0x4a, 0x44, 0x8a, + 0xde, 0x47, 0x3d, 0x7a, 0x22, 0x21, 0x15, 0x5a, 0x95, 0xda, 0xe7, 0x11, 0xb8, 0x6d, 0x6a, 0xc5, 0xb6, 0x5c, 0xc2, + 0x12, 0x35, 0xfe, 0x13, 0xf4, 0x51, 0x2e, 0x1e, 0x64, 0x80, 0x46, 0xc7, 0x53, 0xf3, 0xd6, 0x23, 0xaf, 0x9c, 0xe4, + 0x97, 0x56, 0x9b, 0xf4, 0x0b, 0x20, 0x33, 0xda, 0x3f, 0x5a, 0x4a, 0x20, 0x33, 0x30, 0x93, 0x96, 0x86, 0x44, 0x8e, + 0x62, 0x96, 0xe6, 0x7f, 0xe0, 0x8a, 0xad, 0x10, 0x69, 0x58, 0xcd, 0x3d, 0xfe, 0x22, 0xf7, 0x6a, 0xb9, 0x96, 0x99, + 0xe6, 0x66, 0x89, 0x63, 0xc5, 0xe2, 0xa2, 0x5e, 0x57, 0x22, 0x0b, 0x84, 0x38, 0xc2, 0x34, 0xd6, 0x53, 0x6f, 0x94, + 0x56, 0x1f, 0x90, 0x50, 0xe6, 0x47, 0xec, 0xed, 0xd8, 0xeb, 0x41, 0x16, 0xe2, 0xd8, 0x72, 0xb0, 0xd9, 0x7a, 0x9f, + 0xca, 0x54, 0xc4, 0x17, 0x75, 0x71, 0xb1, 0xad, 0xc4, 0x45, 0x9d, 0x88, 0x8b, 0xef, 0x21, 0xe7, 0xf7, 0x17, 0x54, + 0xf4, 0xc5, 0x43, 0x5a, 0x27, 0xc5, 0xb6, 0xa6, 0x27, 0xaf, 0xb1, 0x8c, 0xef, 0x2f, 0x88, 0xab, 0xe6, 0x82, 0x46, + 0x32, 0x1e, 0x5d, 0x7c, 0xc8, 0x80, 0xe4, 0xf5, 0x22, 0x5d, 0xc3, 0xe0, 0x5d, 0x84, 0x79, 0x7c, 0x51, 0x8a, 0x15, + 0x58, 0x9c, 0xca, 0xce, 0xf7, 0x20, 0xc3, 0x3a, 0xfc, 0x43, 0x5c, 0x00, 0xb4, 0xeb, 0x45, 0x5a, 0x5f, 0xa4, 0xd5, + 0x45, 0x5e, 0xd4, 0x17, 0x4a, 0x0a, 0x87, 0x30, 0x7e, 0x78, 0x4f, 0x5f, 0xd9, 0xe5, 0x6d, 0x16, 0x77, 0x59, 0xe4, + 0x4f, 0xd1, 0xab, 0x88, 0x98, 0x34, 0x72, 0xe1, 0xb5, 0xfb, 0xdb, 0xe6, 0xfe, 0xe1, 0x75, 0x63, 0xf7, 0xb3, 0x3b, + 0x46, 0x74, 0x41, 0x3d, 0x5d, 0x49, 0x4a, 0x05, 0x05, 0x04, 0x4e, 0x34, 0x6b, 0x3c, 0xb8, 0xe3, 0x80, 0x57, 0x03, + 0x5b, 0xb2, 0x8d, 0xcf, 0x9f, 0xc7, 0x32, 0x4c, 0x7b, 0x1b, 0xe0, 0x5f, 0x65, 0x6f, 0xba, 0x09, 0x96, 0x78, 0xdf, + 0x42, 0xb6, 0xa1, 0x37, 0xaf, 0xf8, 0x0b, 0xaf, 0x52, 0x7f, 0xb3, 0x7f, 0x00, 0x10, 0x06, 0xc4, 0xac, 0xfa, 0x68, + 0xe2, 0xde, 0x5b, 0x59, 0xf6, 0x4e, 0x96, 0x7d, 0x0f, 0xfd, 0x9a, 0xc4, 0xa8, 0xb4, 0xb2, 0x94, 0x4e, 0x96, 0x12, + 0xb2, 0x80, 0x4f, 0x8c, 0xa6, 0x36, 0x02, 0x08, 0xdb, 0x51, 0x2a, 0x5f, 0x00, 0xc2, 0x49, 0x02, 0x12, 0x62, 0x09, + 0x17, 0xa3, 0x7b, 0x2b, 0x19, 0x30, 0x1c, 0x42, 0x30, 0x07, 0xed, 0xb0, 0x37, 0x74, 0x13, 0xf1, 0xd7, 0xeb, 0xa2, + 0x7c, 0x13, 0x93, 0x4f, 0xc1, 0xfe, 0xec, 0xe3, 0x12, 0x1e, 0x97, 0x67, 0x1f, 0x87, 0xe8, 0x91, 0x70, 0xf6, 0x31, + 0xf8, 0x1e, 0xc9, 0x79, 0xdd, 0xf5, 0x38, 0x41, 0x6e, 0x21, 0xdd, 0xdf, 0x8e, 0x49, 0x80, 0xe6, 0x35, 0x2c, 0x47, + 0x4d, 0xc5, 0x35, 0x33, 0x63, 0x3c, 0x6f, 0xf4, 0xfe, 0xd8, 0xf1, 0x96, 0x29, 0x14, 0xb3, 0x98, 0xd7, 0xf0, 0x7b, + 0x56, 0x05, 0xea, 0xae, 0xb7, 0x49, 0x6e, 0x99, 0xd5, 0x73, 0xb4, 0xfb, 0xbe, 0xaf, 0x13, 0x41, 0xed, 0xef, 0xb0, + 0xe7, 0x99, 0xf5, 0xae, 0x8a, 0x81, 0x4b, 0x95, 0xec, 0x90, 0xa9, 0x6a, 0x7a, 0xa0, 0x52, 0x1a, 0x3c, 0xbd, 0xb4, + 0x2e, 0x5f, 0x2a, 0x6d, 0xe4, 0x99, 0xe6, 0x37, 0x80, 0x17, 0x53, 0x97, 0xc5, 0xfe, 0xab, 0xfb, 0x0a, 0x6e, 0xe3, + 0xfd, 0xfe, 0x32, 0xf7, 0xcc, 0x4f, 0x5c, 0x00, 0xf6, 0xa6, 0x42, 0xeb, 0x04, 0x4a, 0x0d, 0xeb, 0xf0, 0x65, 0x22, + 0xa2, 0x3f, 0xda, 0xe5, 0x3a, 0x73, 0x1d, 0x30, 0xa2, 0x88, 0xdf, 0xc6, 0xa3, 0x3f, 0x40, 0x71, 0x6d, 0xec, 0x01, + 0x61, 0x1d, 0x12, 0xfa, 0x8c, 0x00, 0xa4, 0x1e, 0x73, 0x94, 0x80, 0x66, 0x45, 0x73, 0xc7, 0xc0, 0xc1, 0x2f, 0xaf, + 0x94, 0xfe, 0x61, 0x99, 0x7b, 0x64, 0x4e, 0x69, 0x9b, 0x69, 0xac, 0xd6, 0xe4, 0x02, 0xe1, 0x15, 0x95, 0xac, 0xc2, + 0x67, 0xf3, 0x46, 0xf4, 0xfb, 0xf2, 0x08, 0x4f, 0xab, 0x1f, 0x77, 0x18, 0xdf, 0x0a, 0x88, 0x46, 0x02, 0xa0, 0x9f, + 0x00, 0xe6, 0x45, 0x36, 0xb3, 0xfb, 0x38, 0xa0, 0x4a, 0x89, 0xa6, 0x71, 0x36, 0xcf, 0x6f, 0xe9, 0x4d, 0xd9, 0x41, + 0xe7, 0x4e, 0x15, 0xb8, 0xe0, 0xaa, 0x64, 0xbc, 0xb2, 0x9e, 0xc9, 0xe7, 0x37, 0x77, 0xdb, 0x34, 0x8b, 0xdf, 0x97, + 0xff, 0xc0, 0xb1, 0xd5, 0x75, 0x78, 0x64, 0xea, 0x74, 0xed, 0x3c, 0xd2, 0xda, 0x0b, 0x01, 0x11, 0xed, 0x1a, 0x6a, + 0xbd, 0xb0, 0xd0, 0x23, 0x3d, 0x11, 0xce, 0x49, 0xa2, 0xa6, 0x1d, 0x68, 0x69, 0x84, 0xbe, 0xbe, 0xca, 0x8b, 0x2e, + 0x06, 0x6b, 0x5f, 0x8e, 0x59, 0x0e, 0x5d, 0xaa, 0x1e, 0xab, 0x87, 0xc6, 0x66, 0x0e, 0x3d, 0x6b, 0x55, 0x9e, 0x79, + 0xf9, 0xf1, 0x88, 0xf8, 0x30, 0xfa, 0x4b, 0x7e, 0xbf, 0xff, 0x8a, 0xe6, 0x1f, 0x13, 0x6a, 0xfc, 0x6c, 0x33, 0x40, + 0xd7, 0xbe, 0x2b, 0x0f, 0x44, 0x3d, 0xd7, 0x2a, 0x41, 0x88, 0x37, 0x88, 0x89, 0x66, 0xc4, 0x1c, 0x9c, 0x76, 0xa8, + 0xf9, 0x27, 0xa9, 0x01, 0x21, 0x4a, 0xbc, 0x8e, 0x29, 0x0b, 0x72, 0xda, 0xc4, 0x91, 0x7e, 0x14, 0x4e, 0xe4, 0x47, + 0x51, 0x15, 0xd9, 0x3d, 0x5c, 0x30, 0x98, 0x7a, 0x4f, 0xfb, 0x25, 0xfa, 0x2d, 0xe1, 0xc8, 0x39, 0x5a, 0x15, 0x82, + 0xc8, 0x19, 0x61, 0xad, 0x21, 0x4c, 0x10, 0x1b, 0xc4, 0xcb, 0xbe, 0x4b, 0x32, 0x1c, 0x29, 0xb8, 0xac, 0x63, 0xc7, + 0x98, 0xab, 0xa3, 0xea, 0x35, 0x80, 0xf1, 0xaa, 0x10, 0x34, 0x1b, 0x45, 0x76, 0x09, 0x51, 0x45, 0x8e, 0x27, 0xa0, + 0x76, 0x50, 0x1a, 0x9b, 0xe9, 0xe5, 0x38, 0x80, 0x09, 0x8e, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x2b, 0xd5, + 0xcf, 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x9c, 0xe9, + 0x72, 0x60, 0xdc, 0xb7, 0x3c, 0xa7, 0x38, 0xc3, 0x8f, 0x5e, 0x3e, 0xab, 0xe7, 0xfe, 0x74, 0x4b, 0xed, 0xc7, 0xdc, + 0xa8, 0x87, 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, + 0xfc, 0x43, 0x99, 0xae, 0x53, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, + 0xa2, 0xac, 0xdf, 0x87, 0xdf, 0x37, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, + 0x93, 0x41, 0x0d, 0xda, 0xf0, 0x2d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, + 0xec, 0x4f, 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xeb, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xa7, 0x97, 0xfc, + 0x06, 0xbd, 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, + 0x8f, 0x51, 0xc9, 0x62, 0x4b, 0x8f, 0x95, 0xd3, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x0e, 0xc1, + 0x12, 0x18, 0x17, 0xb1, 0xe1, 0xdb, 0x41, 0xc5, 0xe2, 0xd9, 0x76, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1e, 0x0b, 0x09, + 0x36, 0x93, 0xcd, 0x36, 0x73, 0xb6, 0xf1, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, + 0x35, 0x58, 0xad, 0xa6, 0xec, 0x54, 0x53, 0xf6, 0x4e, 0x53, 0x4e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, + 0x88, 0x4d, 0xa2, 0x9b, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, + 0x50, 0x85, 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, + 0xbe, 0xa5, 0x8e, 0x07, 0x94, 0x6d, 0xfe, 0x26, 0xf6, 0x41, 0x88, 0xdc, 0x8d, 0x7b, 0xf5, 0x33, 0xe2, 0xbd, 0xfd, + 0x09, 0xc6, 0x4f, 0x76, 0xda, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8c, 0xca, 0x24, 0x41, 0x2d, 0x4b, 0xe2, + 0x6f, 0x79, 0x32, 0xa8, 0xd8, 0x12, 0x3c, 0x68, 0xe7, 0x2c, 0x03, 0xfc, 0x15, 0xab, 0x45, 0xbf, 0xd5, 0xde, 0x12, + 0xe4, 0xa7, 0xad, 0xdd, 0x28, 0x4c, 0x8c, 0x20, 0x51, 0xb7, 0x2b, 0x03, 0xf9, 0xe1, 0x03, 0x4e, 0xc7, 0x53, 0x4f, + 0x19, 0x73, 0x2b, 0xd3, 0xcb, 0x74, 0xae, 0xe4, 0x1b, 0xb9, 0x97, 0x3e, 0xf6, 0x12, 0xec, 0x1c, 0xf0, 0x06, 0xd2, + 0x06, 0xde, 0xc2, 0x76, 0xe1, 0xb5, 0x41, 0xc2, 0x8c, 0x00, 0x5b, 0x9c, 0x1e, 0x23, 0x25, 0x30, 0x84, 0xe3, 0x2c, + 0x05, 0x60, 0x1a, 0x7d, 0x99, 0xcd, 0xed, 0xcb, 0xac, 0xd6, 0x6c, 0xa9, 0x9c, 0xee, 0x9d, 0x5b, 0xb7, 0xf3, 0x89, + 0x04, 0x00, 0x93, 0x3a, 0x07, 0xe2, 0xcc, 0x04, 0xbb, 0x34, 0x89, 0x2c, 0x1f, 0xc3, 0x7c, 0x25, 0x5e, 0x97, 0xc5, + 0x5a, 0x75, 0x45, 0xdb, 0x67, 0xa6, 0x9a, 0x91, 0x4e, 0x42, 0x05, 0x14, 0x14, 0x72, 0xad, 0x4f, 0xdf, 0x85, 0xef, + 0x82, 0x42, 0x03, 0xb3, 0xe5, 0xb8, 0xa7, 0xc9, 0x1a, 0xa9, 0x37, 0xf2, 0x7e, 0x9f, 0x5c, 0x03, 0xa9, 0xce, 0x1c, + 0x5a, 0xf6, 0x04, 0x9d, 0x64, 0x4f, 0x6e, 0xca, 0x52, 0xa8, 0x03, 0xa9, 0x07, 0x0c, 0x21, 0xda, 0xa6, 0x8f, 0x3f, + 0x19, 0x12, 0x5d, 0x80, 0x2d, 0x44, 0x1b, 0xf8, 0xf1, 0x27, 0xd8, 0x67, 0x41, 0x78, 0x4c, 0xf3, 0xb7, 0x90, 0x74, + 0x6a, 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0x95, + 0x94, 0xea, 0x00, 0x6d, 0x4a, 0xb9, 0xab, 0x2b, 0x3f, 0x88, 0xb6, 0xe0, 0xc8, 0x22, 0xfe, 0x3e, 0x43, 0x44, 0x30, + 0x33, 0x88, 0xb0, 0x6b, 0xa1, 0xee, 0xf6, 0x9c, 0x5a, 0x16, 0xf5, 0xb6, 0xe7, 0x94, 0xba, 0x0d, 0xc3, 0x77, 0x13, + 0xcc, 0x14, 0x37, 0xfc, 0x8f, 0xcc, 0x0b, 0xf5, 0xc6, 0x63, 0x51, 0xa0, 0x7b, 0xfe, 0x61, 0xc9, 0xf3, 0xd9, 0x56, + 0x99, 0x30, 0x57, 0x7c, 0x39, 0x0b, 0x65, 0x57, 0x4b, 0xe3, 0xce, 0x67, 0x6f, 0xa9, 0xe6, 0x83, 0x7f, 0x3c, 0x26, + 0x10, 0x6f, 0x14, 0xdf, 0xac, 0x1a, 0xb9, 0x75, 0x4d, 0xb6, 0x37, 0x25, 0xa0, 0x7e, 0x5f, 0x6e, 0x70, 0xbf, 0xc5, + 0xfa, 0x77, 0x4f, 0x83, 0x8c, 0xd5, 0x0c, 0x57, 0x4c, 0xe1, 0x53, 0x00, 0x18, 0x1c, 0x4e, 0x05, 0x69, 0x81, 0xb7, + 0xbc, 0x1c, 0x5e, 0x4f, 0xb6, 0x64, 0xd2, 0xdd, 0xfa, 0xc8, 0x9d, 0x05, 0xaa, 0xde, 0x6f, 0x28, 0x4e, 0x1a, 0x24, + 0x1a, 0x7b, 0x0d, 0xbe, 0xc8, 0x32, 0xca, 0x45, 0x13, 0xf7, 0x31, 0xf9, 0x4a, 0x0f, 0x60, 0xa5, 0x42, 0x09, 0x10, + 0xfd, 0xc6, 0xb2, 0xd8, 0x88, 0xb6, 0xc5, 0x06, 0x96, 0x52, 0x3e, 0xd7, 0xab, 0xe9, 0xb3, 0x57, 0xa2, 0x79, 0x1f, + 0xcd, 0x38, 0xa5, 0xd1, 0x80, 0xe3, 0x34, 0x0a, 0x77, 0xef, 0xef, 0x45, 0xb9, 0xcc, 0xc0, 0x92, 0xad, 0xc2, 0x29, + 0xae, 0x1b, 0x75, 0x46, 0xbc, 0xc8, 0x63, 0x05, 0xd0, 0xf1, 0x98, 0x00, 0xa8, 0x2e, 0x08, 0xa8, 0x88, 0x96, 0xd2, + 0x5b, 0xa1, 0xc5, 0x42, 0xbd, 0xe1, 0x28, 0x85, 0x3f, 0xd2, 0x9f, 0x07, 0xd5, 0x14, 0x80, 0xd8, 0xf5, 0x71, 0xf4, + 0xba, 0x28, 0xe9, 0x53, 0xc5, 0xac, 0x92, 0x83, 0x09, 0xec, 0xea, 0x44, 0x86, 0x9a, 0x43, 0xde, 0xbc, 0x2b, 0x6f, + 0x6e, 0xf2, 0x36, 0xc6, 0x29, 0xf9, 0x91, 0x9b, 0x8e, 0x35, 0x62, 0xe0, 0x95, 0xa7, 0x75, 0x9a, 0x20, 0x4d, 0x2e, + 0x80, 0x61, 0x88, 0xef, 0x32, 0xef, 0x85, 0xe7, 0x48, 0x55, 0x90, 0xcc, 0xf6, 0x99, 0xa7, 0x2e, 0xa2, 0xfa, 0xca, + 0xa9, 0xa5, 0x33, 0xa7, 0x1f, 0x01, 0xbc, 0xc7, 0xd4, 0xa4, 0x21, 0x1f, 0xe1, 0xb6, 0x14, 0x5f, 0xef, 0xd4, 0x35, + 0x5e, 0x1a, 0x9d, 0xbb, 0x97, 0x2f, 0xdd, 0x69, 0xd0, 0x4f, 0x41, 0x50, 0xce, 0x17, 0xa5, 0x80, 0x3d, 0x65, 0x36, + 0xd7, 0xab, 0x55, 0x2b, 0xb4, 0x8e, 0xc7, 0xb1, 0x76, 0x14, 0xd2, 0xea, 0x2c, 0x60, 0xab, 0x91, 0x4e, 0x09, 0x10, + 0x82, 0xe3, 0x34, 0xec, 0x0c, 0xe3, 0x2e, 0x9d, 0x46, 0x64, 0xbd, 0x52, 0x92, 0x2e, 0xcc, 0x20, 0xf9, 0x27, 0x79, + 0x3d, 0x03, 0x5a, 0x02, 0x38, 0x14, 0xb1, 0x84, 0x87, 0x93, 0xe4, 0x06, 0xa0, 0xd3, 0xe1, 0xa0, 0xd2, 0xd0, 0x9c, + 0xf9, 0x2c, 0x99, 0x4f, 0x62, 0xa9, 0xaa, 0x3c, 0x1e, 0x3d, 0xe5, 0x66, 0xd0, 0xef, 0x67, 0xd3, 0x52, 0xb9, 0x00, + 0x04, 0xb1, 0x2e, 0x0c, 0x10, 0x8f, 0xb4, 0xf0, 0x64, 0xd1, 0xa7, 0x24, 0x7e, 0x39, 0x4b, 0xe6, 0x26, 0x1b, 0xde, + 0x81, 0x11, 0x6c, 0xc6, 0x75, 0x49, 0x99, 0xf6, 0xa8, 0xfc, 0x9e, 0xd1, 0x53, 0xdb, 0xd7, 0x5a, 0x6d, 0x11, 0xeb, + 0x3a, 0xb8, 0x2a, 0x51, 0x4f, 0xf1, 0x41, 0x49, 0x82, 0xf7, 0x2b, 0xe7, 0x66, 0xa4, 0x7c, 0x2d, 0x2a, 0x3f, 0x68, + 0x67, 0x6a, 0xe5, 0xc0, 0x11, 0xa8, 0xb0, 0x8a, 0x4a, 0x5e, 0xef, 0x3a, 0x04, 0x4f, 0xee, 0x4a, 0x05, 0xca, 0xc1, + 0xcf, 0x41, 0x8c, 0xae, 0x6f, 0x3a, 0x6b, 0xa8, 0x99, 0x46, 0x95, 0x47, 0xd0, 0xb9, 0x03, 0x78, 0x52, 0xf0, 0x52, + 0xab, 0x1f, 0x8f, 0x47, 0xcf, 0xfc, 0xe0, 0x2f, 0x33, 0x7d, 0x0b, 0x31, 0x51, 0x4e, 0x35, 0x42, 0xe2, 0x4a, 0x49, + 0x22, 0x3e, 0x5d, 0xb4, 0xac, 0x18, 0x95, 0xe1, 0x03, 0xb0, 0x00, 0x51, 0xf9, 0xea, 0x54, 0xe5, 0xc5, 0x48, 0xdb, + 0x12, 0x78, 0x4d, 0xfe, 0x21, 0x72, 0xcd, 0x5b, 0x5f, 0x77, 0x95, 0xa1, 0x6f, 0x65, 0x05, 0x3a, 0x82, 0xad, 0x2c, + 0x25, 0x07, 0x7c, 0x52, 0xdf, 0x55, 0x5b, 0x9f, 0x53, 0xb6, 0x11, 0x6e, 0xf2, 0xeb, 0xd8, 0xc1, 0x91, 0xf2, 0x1b, + 0xbc, 0x14, 0xc0, 0x5e, 0x03, 0xf6, 0xe6, 0x8a, 0x15, 0xcd, 0xa3, 0x43, 0xda, 0x16, 0x68, 0x64, 0xe6, 0x76, 0xae, + 0xee, 0xdb, 0xf2, 0x28, 0x8d, 0x21, 0x32, 0xed, 0x91, 0xe9, 0x60, 0x33, 0xca, 0x7f, 0x4b, 0xf9, 0xad, 0xc2, 0x31, + 0xf0, 0xed, 0xdc, 0x3b, 0x80, 0xaa, 0xa7, 0x0d, 0x32, 0xd6, 0x0c, 0x43, 0x2b, 0xbb, 0x5c, 0x0a, 0x2d, 0x41, 0x4b, + 0xdd, 0x04, 0xc1, 0xf9, 0x11, 0x51, 0x8e, 0x00, 0x74, 0x91, 0x02, 0x26, 0xf8, 0x39, 0x6d, 0x77, 0xbf, 0xbf, 0x49, + 0x3d, 0x72, 0xef, 0x0a, 0x95, 0xcd, 0xf2, 0x4d, 0x8e, 0x30, 0xf6, 0x13, 0x8d, 0x19, 0x74, 0x72, 0x45, 0x4e, 0x78, + 0xd6, 0xea, 0xb0, 0xae, 0x9b, 0x32, 0x28, 0x8b, 0x63, 0x9e, 0x4f, 0x67, 0xbf, 0x3f, 0x39, 0xd4, 0x0d, 0xb2, 0x90, + 0xff, 0xce, 0x7a, 0x48, 0x06, 0xdd, 0x83, 0x50, 0x88, 0xde, 0x3c, 0x98, 0xe1, 0x7f, 0x6c, 0xcb, 0xb3, 0x6f, 0xb8, + 0x51, 0x27, 0x80, 0x39, 0xe2, 0x7a, 0xe9, 0x29, 0xda, 0x7a, 0xb8, 0x05, 0xb2, 0x0d, 0x5e, 0xde, 0xda, 0x6b, 0xa0, + 0xa2, 0x38, 0xfe, 0x15, 0xcf, 0xd4, 0xca, 0x06, 0x3f, 0x3d, 0x65, 0x3b, 0xf0, 0xf0, 0x22, 0x04, 0x14, 0xc3, 0xb2, + 0xf1, 0x2b, 0xcb, 0x71, 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, + 0x93, 0x7b, 0x2b, 0x72, 0xca, 0x5c, 0xe9, 0x61, 0x74, 0x5d, 0x92, 0xbe, 0x49, 0x3e, 0xb6, 0x86, 0xed, 0x77, 0xed, + 0x7e, 0x33, 0x44, 0x10, 0x42, 0x39, 0x7e, 0xce, 0xe8, 0x84, 0xc6, 0x87, 0x35, 0xd7, 0x3b, 0xbd, 0x7e, 0xef, 0x12, + 0x2f, 0xd8, 0x1a, 0x0d, 0xf0, 0x74, 0xe8, 0x62, 0x9e, 0xa8, 0xa1, 0xd3, 0x75, 0xed, 0x1c, 0x3c, 0x30, 0xc8, 0xf2, + 0xe4, 0x1b, 0x86, 0x25, 0xf6, 0x27, 0x11, 0x4f, 0xda, 0xaa, 0x8d, 0xed, 0x89, 0x6a, 0xa3, 0x66, 0xe0, 0x07, 0xaf, + 0xa0, 0xc0, 0xe8, 0x82, 0xb4, 0x06, 0xe3, 0x70, 0x04, 0x20, 0x2b, 0xc6, 0xf1, 0xc8, 0x60, 0x02, 0x43, 0xba, 0xa1, + 0x28, 0x00, 0x0f, 0x8f, 0xd3, 0x41, 0xc8, 0x00, 0xd2, 0x05, 0x0f, 0x0d, 0xdb, 0x24, 0xa4, 0xfc, 0x3c, 0x2f, 0x6b, + 0x35, 0x84, 0xbe, 0xb3, 0x50, 0x1d, 0xfb, 0x91, 0xf6, 0x8a, 0x75, 0xad, 0x4a, 0x27, 0xb6, 0x3a, 0x40, 0xdf, 0x90, + 0x81, 0x6f, 0x1d, 0x5b, 0x00, 0x44, 0x4b, 0xfc, 0x96, 0x7a, 0xb5, 0x2f, 0x63, 0x56, 0xa8, 0xd7, 0x17, 0xa6, 0x5d, + 0xaf, 0xa4, 0x45, 0x01, 0x15, 0xb7, 0xad, 0xda, 0x9e, 0xc8, 0xf9, 0x8f, 0xef, 0x3a, 0xda, 0xf1, 0xd9, 0xa9, 0xb1, + 0x25, 0x94, 0xb9, 0xc5, 0x13, 0x59, 0x1d, 0x6d, 0xa9, 0x4e, 0xf5, 0x01, 0x97, 0x9a, 0x54, 0x67, 0xda, 0xa7, 0xc9, + 0x12, 0xa0, 0xdc, 0x42, 0x24, 0x8d, 0xc3, 0xc1, 0xf9, 0x64, 0x50, 0x30, 0xb7, 0x48, 0x40, 0x02, 0xdb, 0xda, 0xda, + 0x45, 0x73, 0xfd, 0xfa, 0x2d, 0xf5, 0xf2, 0x36, 0x55, 0x3d, 0x78, 0xe3, 0x05, 0xce, 0xde, 0x69, 0x2d, 0x20, 0x80, + 0xc2, 0xd6, 0xb2, 0x1c, 0x9c, 0xbb, 0x5d, 0xd5, 0x52, 0x51, 0x46, 0xfd, 0xfe, 0xe5, 0x6f, 0x29, 0x2a, 0x62, 0xcf, + 0x15, 0xa7, 0xac, 0xdf, 0x6e, 0x99, 0x8b, 0xca, 0x92, 0x37, 0xa8, 0xa2, 0xb5, 0x3a, 0x6a, 0x72, 0xd7, 0xcd, 0x55, + 0x4b, 0x26, 0x88, 0xd1, 0x7d, 0xbe, 0xd6, 0x95, 0x53, 0xef, 0x83, 0x8a, 0x23, 0x06, 0x82, 0x9b, 0xee, 0xf1, 0xc1, + 0x41, 0x68, 0x54, 0x94, 0x0b, 0x6e, 0x94, 0x56, 0x95, 0x94, 0x42, 0xde, 0xaa, 0x68, 0xc5, 0xf4, 0x11, 0x00, 0x11, + 0x60, 0x95, 0xa8, 0xff, 0xcd, 0x97, 0xc6, 0x78, 0xf0, 0xc0, 0xd7, 0xe4, 0x3a, 0xb6, 0xde, 0x3f, 0xaf, 0x91, 0x56, + 0x1b, 0xc7, 0xa4, 0x56, 0xbd, 0x6c, 0x15, 0x2f, 0xbb, 0xd7, 0xa9, 0x18, 0x3c, 0xff, 0x9f, 0xfb, 0x00, 0x35, 0xa2, + 0xa5, 0x0c, 0x6e, 0x5d, 0x0d, 0xd0, 0xf8, 0x70, 0x2a, 0x7c, 0xe3, 0x87, 0x8c, 0xf3, 0xc1, 0x0c, 0x1d, 0xd5, 0xe6, + 0xe0, 0x80, 0xe0, 0xa8, 0xee, 0xd1, 0x98, 0x30, 0x0b, 0xe7, 0x1e, 0x04, 0xaa, 0x4f, 0xdc, 0x67, 0x5c, 0x7b, 0x41, + 0x9b, 0xc0, 0x27, 0xeb, 0xba, 0xa6, 0x08, 0x70, 0x11, 0x1b, 0x13, 0x31, 0xc4, 0x65, 0x93, 0x48, 0x7d, 0x33, 0x06, + 0x05, 0x40, 0xf1, 0x3c, 0x27, 0xb9, 0x74, 0x91, 0xe6, 0x95, 0x28, 0x6b, 0xdd, 0x8c, 0x9c, 0x15, 0xc3, 0x9c, 0xd5, + 0x7e, 0x50, 0xdc, 0xe4, 0x66, 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x7c, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, + 0xd2, 0xbb, 0x1c, 0xb7, 0xce, 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, + 0x3f, 0xe3, 0xcf, 0x09, 0x4c, 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x9c, 0x97, 0x93, + 0x70, 0x38, 0xf4, 0x41, 0x1f, 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, + 0x10, 0xd1, 0x42, 0x43, 0x1f, 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, + 0xda, 0xd0, 0x22, 0xc5, 0x45, 0xa3, 0xcc, 0x66, 0x95, 0xec, 0x84, 0xad, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, + 0x54, 0xad, 0xa7, 0x7a, 0x3d, 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa2, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, + 0xa3, 0x6a, 0x93, 0xa5, 0x11, 0x55, 0x6e, 0x52, 0xb9, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0xcd, 0xb5, 0xb3, 0x35, 0x38, + 0x71, 0xe4, 0xb9, 0xe4, 0x96, 0xef, 0xce, 0x2b, 0xba, 0x3b, 0xd5, 0xbe, 0x05, 0xb8, 0x37, 0xc3, 0x86, 0xcc, 0x79, + 0x8d, 0x9d, 0x06, 0x61, 0x12, 0xf8, 0x11, 0xfb, 0x98, 0x21, 0x1b, 0x0c, 0xe8, 0x28, 0xa4, 0x26, 0xc0, 0x32, 0x47, + 0x02, 0x26, 0x7f, 0x3d, 0xf7, 0x9b, 0x45, 0x91, 0xc3, 0x62, 0xfc, 0xb0, 0xc5, 0x48, 0x63, 0xb5, 0x06, 0xc3, 0x72, + 0x85, 0xc8, 0x9f, 0xda, 0x33, 0xd4, 0x54, 0xc7, 0x9b, 0xf5, 0x5a, 0xf3, 0xab, 0xa7, 0x4f, 0x75, 0x7d, 0xfe, 0xdb, + 0xf7, 0x97, 0x61, 0xcd, 0xec, 0x0f, 0x41, 0x28, 0xed, 0xc1, 0x2d, 0xce, 0x1d, 0x89, 0xde, 0xa9, 0xd2, 0xcc, 0x2e, + 0xed, 0x9a, 0x5d, 0x9b, 0xd2, 0x6e, 0xc9, 0xf5, 0xea, 0x2b, 0xe5, 0x8d, 0x9d, 0x57, 0x4c, 0xf7, 0x1f, 0x84, 0xde, + 0x51, 0xce, 0xd5, 0x04, 0x22, 0x9a, 0xb4, 0x23, 0x71, 0xbb, 0x57, 0x86, 0xcf, 0x26, 0x55, 0xbb, 0x84, 0x93, 0xae, + 0x61, 0x95, 0xf9, 0xf6, 0x3f, 0xf2, 0xaa, 0xb3, 0xc2, 0xed, 0x97, 0xc6, 0xac, 0xfd, 0x29, 0x88, 0xab, 0xfa, 0xc3, + 0x7b, 0x52, 0x33, 0x25, 0xff, 0x57, 0x3d, 0x06, 0xae, 0x7e, 0x32, 0xed, 0xe4, 0x9e, 0x42, 0xd8, 0x60, 0xf6, 0xf3, + 0xd3, 0x87, 0x16, 0xac, 0xaa, 0x0b, 0x14, 0xc9, 0x01, 0x74, 0xee, 0x9a, 0x11, 0xde, 0xef, 0x18, 0xe7, 0xfe, 0xcd, + 0x0f, 0x6a, 0x72, 0x84, 0x88, 0x76, 0x11, 0x0e, 0x00, 0xe2, 0x4e, 0x53, 0x59, 0x87, 0x1a, 0xa0, 0x0f, 0x08, 0xac, + 0x43, 0xdf, 0x66, 0x00, 0x07, 0x7d, 0xb4, 0x79, 0x16, 0x81, 0xbc, 0xee, 0xdd, 0xb3, 0xb7, 0x6c, 0xef, 0xf3, 0xe7, + 0xeb, 0xd4, 0xbb, 0x47, 0x87, 0xe0, 0xcb, 0xb1, 0x3f, 0xbd, 0x0e, 0x0c, 0x2e, 0x34, 0x7b, 0xfb, 0x54, 0xb0, 0x3d, + 0xdb, 0x3f, 0x45, 0xa4, 0xa2, 0xee, 0xfc, 0xc3, 0x6b, 0x13, 0x3d, 0xef, 0xbc, 0xb0, 0xe2, 0x4b, 0x00, 0x0f, 0x64, + 0x31, 0xa0, 0xf8, 0x2c, 0xbd, 0x7f, 0xb2, 0x04, 0xd4, 0xe4, 0x77, 0x7c, 0xe3, 0xbd, 0xa3, 0xd4, 0x05, 0xfc, 0x39, + 0xa0, 0xf4, 0x49, 0xc5, 0xbd, 0xd5, 0xf0, 0xce, 0xbf, 0x7a, 0x06, 0xce, 0x13, 0xeb, 0xe1, 0x02, 0xfe, 0x2a, 0xf8, + 0xd0, 0x5b, 0x0d, 0x30, 0xb1, 0xe4, 0x43, 0x6f, 0x3d, 0x80, 0x54, 0x85, 0x0b, 0x89, 0xb1, 0x0f, 0xbf, 0x06, 0x15, + 0xc3, 0x3f, 0x7e, 0xd3, 0x18, 0xac, 0xbf, 0x06, 0x85, 0x46, 0x63, 0x2d, 0x55, 0xc8, 0x52, 0x2c, 0x2e, 0x04, 0xd8, + 0x84, 0xe3, 0x6e, 0x5f, 0xac, 0x6a, 0xbb, 0x11, 0xf4, 0xe7, 0x23, 0xbe, 0x47, 0x63, 0x75, 0x55, 0xce, 0x45, 0xf9, + 0x11, 0xe9, 0x53, 0x1d, 0x1f, 0xa3, 0x62, 0x5b, 0x77, 0xa7, 0x53, 0xad, 0x3a, 0xd2, 0x7e, 0x53, 0xae, 0xc1, 0x8e, + 0xd7, 0xc9, 0x89, 0xa5, 0xf0, 0xa2, 0xc3, 0xce, 0x4b, 0xa7, 0x44, 0x87, 0x61, 0xbc, 0xdb, 0xaa, 0x67, 0x0c, 0xe5, + 0x95, 0xc1, 0x98, 0x2e, 0x78, 0xc4, 0x9f, 0x0f, 0x2a, 0x19, 0x1a, 0xf3, 0x01, 0xd9, 0x30, 0x94, 0x0f, 0x2d, 0x32, + 0x24, 0x44, 0xbc, 0x87, 0x4a, 0xc0, 0xb6, 0x05, 0x65, 0x52, 0xc0, 0x59, 0x34, 0xf8, 0xad, 0xf6, 0x2a, 0xe0, 0x3d, + 0x88, 0xfc, 0x46, 0xba, 0x94, 0x4b, 0x6c, 0x74, 0xe2, 0x58, 0x16, 0xda, 0x79, 0x5c, 0x7f, 0x1d, 0x83, 0xfa, 0xbd, + 0xd2, 0x6f, 0x50, 0xce, 0xfe, 0x28, 0x59, 0xa7, 0x8d, 0x27, 0xc6, 0xdf, 0x5d, 0xe5, 0x9f, 0xa2, 0xa5, 0x1e, 0xfe, + 0x3f, 0x63, 0x0a, 0xa5, 0x7f, 0x99, 0x96, 0xd1, 0x76, 0xbd, 0x14, 0xa5, 0xc8, 0x23, 0x71, 0xf6, 0xb5, 0xc8, 0xce, + 0xe5, 0x3b, 0x9f, 0x42, 0xbf, 0x00, 0xb4, 0xec, 0x13, 0x64, 0xf4, 0x0f, 0x4c, 0xf0, 0xe1, 0x0f, 0xda, 0xb9, 0xb6, + 0xe2, 0xe3, 0x49, 0x75, 0x63, 0xed, 0xdd, 0x8e, 0x17, 0x89, 0x51, 0x8c, 0x55, 0xbe, 0xea, 0x66, 0xe5, 0x44, 0x25, + 0x07, 0x46, 0xba, 0x26, 0x7b, 0x95, 0x92, 0x75, 0x3b, 0xdd, 0x4a, 0x20, 0xa2, 0x0a, 0xbc, 0xc7, 0xb8, 0x8a, 0x7d, + 0x04, 0xd3, 0x75, 0xc7, 0x65, 0xb4, 0xe3, 0x3d, 0xe3, 0xd5, 0x89, 0xb2, 0x82, 0xdb, 0x8d, 0x68, 0x4f, 0xe8, 0xe8, + 0xa7, 0x49, 0x6d, 0x59, 0x38, 0x00, 0xb9, 0x4b, 0x18, 0xcb, 0x86, 0x60, 0xc5, 0xa0, 0xf4, 0xf5, 0x9a, 0x92, 0x65, + 0x01, 0x16, 0x9d, 0x5d, 0x46, 0x20, 0x86, 0x75, 0xd3, 0x9c, 0xd1, 0xf1, 0xd2, 0xc5, 0xf9, 0xa0, 0x55, 0xa4, 0xe0, + 0x19, 0x2d, 0x3a, 0xe6, 0xa6, 0x23, 0xdd, 0x18, 0xed, 0xed, 0x0f, 0x06, 0x21, 0xc5, 0xf3, 0x07, 0xb6, 0x5a, 0x17, + 0x17, 0x89, 0x57, 0xc8, 0x44, 0x0b, 0x62, 0x29, 0x02, 0x33, 0x5e, 0x68, 0x1a, 0x61, 0x82, 0x32, 0x25, 0x58, 0xb4, + 0x46, 0x87, 0xf6, 0x87, 0x25, 0xec, 0x1e, 0x63, 0x04, 0x08, 0x54, 0x99, 0x3e, 0x87, 0xad, 0x09, 0xb3, 0xad, 0x8b, + 0x2d, 0xd0, 0x56, 0x31, 0x34, 0x08, 0x6b, 0x43, 0xcc, 0xc7, 0x34, 0x5f, 0xfd, 0x13, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, + 0xc1, 0xed, 0x9a, 0x84, 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xaa, 0x1d, 0x6b, + 0xa9, 0x77, 0xac, 0x8d, 0xde, 0xb1, 0x56, 0x0d, 0xff, 0x90, 0x79, 0x31, 0x4b, 0x40, 0xbf, 0xbb, 0xe6, 0xaa, 0x41, + 0xd0, 0x8c, 0x2d, 0xbb, 0x83, 0xdf, 0x12, 0x6b, 0xb7, 0xf4, 0xaf, 0x96, 0x6c, 0x61, 0xfa, 0x40, 0xb7, 0x0e, 0xb0, + 0x8c, 0xa8, 0xc9, 0xf7, 0xc8, 0xbb, 0xe9, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xc2, 0x67, 0x6f, 0xcd, 0x9b, 0xf7, 0x4f, + 0x23, 0xc8, 0xbd, 0xe7, 0xde, 0xfd, 0xf0, 0xad, 0x7f, 0xa5, 0x5b, 0x20, 0x27, 0xb3, 0x9c, 0x81, 0xd4, 0x11, 0x9f, + 0x20, 0x5a, 0xd9, 0x53, 0xbe, 0x13, 0x72, 0x67, 0xdb, 0x3c, 0xbd, 0x77, 0xb7, 0xb5, 0xd5, 0xd3, 0x7b, 0x96, 0x8f, + 0x28, 0x56, 0x9c, 0xa6, 0x48, 0x98, 0x45, 0x5b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xfd, 0xd3, 0x8e, + 0x8e, 0x97, 0x73, 0xc0, 0xee, 0xfe, 0x93, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0xf7, 0x4f, 0x33, 0x8d, 0xe7, + 0x70, 0x22, 0x9f, 0x8e, 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, + 0xd6, 0x35, 0x6f, 0xaf, 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, + 0x70, 0xba, 0xe4, 0xb1, 0xef, 0xd3, 0x2c, 0xad, 0xf7, 0xa8, 0xb5, 0xc8, 0x2d, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, + 0x61, 0xa9, 0xe9, 0x9f, 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2d, 0xae, 0x7e, 0x38, 0x2f, 0x94, + 0x6b, 0x37, 0x6f, 0xe3, 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x4e, 0x94, + 0x5d, 0x2c, 0xe1, 0x1e, 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf5, 0x8c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, + 0x62, 0x5b, 0xb8, 0x7a, 0xc6, 0xb6, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0xad, 0x6a, 0x8e, + 0x35, 0xd4, 0x6c, 0x63, 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0x56, 0x6d, 0xc5, 0xc7, 0xda, 0x5a, 0x97, 0xee, 0xf5, + 0x1e, 0xd5, 0x05, 0xb0, 0xf5, 0xdf, 0x9d, 0xae, 0x5c, 0xcf, 0x67, 0x04, 0xf0, 0xb5, 0xe0, 0xe3, 0xc9, 0x02, 0xbd, + 0x4a, 0x16, 0xfe, 0xdd, 0x40, 0x8d, 0xbf, 0xd3, 0xb9, 0x0b, 0x80, 0xae, 0xa4, 0xbc, 0x02, 0xf2, 0x0e, 0x2a, 0xcc, + 0x2d, 0xbb, 0xf2, 0xfe, 0xec, 0x3b, 0xec, 0x2d, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x83, 0x53, 0x41, 0x32, 0xb0, 0x97, + 0x15, 0xdb, 0x07, 0xb1, 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x80, 0x20, 0xae, 0xe0, 0x0e, 0xe2, 0xf0, 0xe4, 0x9f, + 0x83, 0xfb, 0xd6, 0x66, 0x7d, 0xcf, 0xac, 0xce, 0x09, 0x36, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0xd6, 0xfd, 0xbe, + 0xb7, 0xd7, 0x8e, 0x4f, 0x2b, 0xa9, 0x13, 0x3b, 0xaf, 0xd5, 0x5a, 0xb0, 0xb7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x80, + 0x5f, 0x70, 0x37, 0xe0, 0xf7, 0x1d, 0x6b, 0xcb, 0x7b, 0xcb, 0x16, 0x6c, 0x0f, 0x97, 0xa0, 0xa6, 0xbd, 0xec, 0xcf, + 0x2a, 0x17, 0xb4, 0x63, 0x97, 0xc4, 0xc3, 0x19, 0xb3, 0x5c, 0x99, 0x59, 0x27, 0xf9, 0x8d, 0xe8, 0x8c, 0xe9, 0xac, + 0xf5, 0x7c, 0xce, 0xe7, 0x93, 0x42, 0x83, 0xfa, 0x5d, 0x12, 0x1f, 0x51, 0xd1, 0x79, 0x02, 0x5b, 0xcb, 0x0a, 0xc8, + 0xbd, 0x2e, 0xc1, 0x5a, 0xab, 0x5d, 0xfa, 0xbd, 0x6a, 0xc0, 0x6d, 0xca, 0x61, 0x4d, 0x40, 0xd0, 0x9c, 0x59, 0x51, + 0x8f, 0xd9, 0x8e, 0x71, 0xf3, 0xd3, 0xcb, 0x1f, 0x9c, 0xb0, 0x64, 0xc5, 0x6a, 0x7f, 0xfa, 0xc3, 0x53, 0x4f, 0x7f, + 0xa7, 0xf6, 0xaf, 0x84, 0x1f, 0x8c, 0xff, 0x5d, 0xbb, 0xaf, 0xb5, 0x18, 0x95, 0xad, 0x72, 0x84, 0xc6, 0xdd, 0x4a, + 0x9a, 0x2c, 0x3f, 0x09, 0x4f, 0x58, 0x0b, 0x9e, 0x99, 0x33, 0x20, 0x2b, 0x60, 0x85, 0xb5, 0x4c, 0xc2, 0x39, 0xc6, + 0x6a, 0x69, 0xab, 0x6f, 0xd1, 0x34, 0xa7, 0x87, 0x73, 0x6d, 0x50, 0xa6, 0x9c, 0x9d, 0x11, 0xab, 0xe1, 0x32, 0x2c, + 0x4d, 0x28, 0x42, 0xf6, 0x60, 0x07, 0x37, 0x76, 0xca, 0x52, 0xca, 0x70, 0x8e, 0xc1, 0x84, 0x27, 0x62, 0x54, 0xee, + 0xfb, 0x87, 0x92, 0x57, 0x6d, 0x39, 0x28, 0x47, 0xd8, 0x47, 0x12, 0x25, 0x70, 0x2b, 0xd2, 0x42, 0x91, 0xb2, 0xf8, + 0xdb, 0x01, 0xba, 0xc0, 0x0b, 0xa8, 0xab, 0x51, 0xb7, 0x3f, 0x1c, 0xf1, 0xf0, 0x91, 0xa9, 0x0f, 0x8c, 0x58, 0x12, + 0xa8, 0xed, 0x45, 0x96, 0xae, 0x40, 0x85, 0xdf, 0xc3, 0xd5, 0x44, 0xec, 0xe7, 0x96, 0x14, 0x15, 0xd9, 0x48, 0x6f, + 0x68, 0x0d, 0x1e, 0xa1, 0x35, 0xe5, 0x07, 0x27, 0xd5, 0x26, 0x9d, 0x77, 0x84, 0x1c, 0xab, 0x6f, 0x2d, 0x61, 0xb4, + 0x2b, 0x7a, 0xf1, 0xe0, 0xe8, 0x3d, 0xcf, 0x57, 0xbd, 0xf2, 0x27, 0xae, 0x98, 0x27, 0xb7, 0x11, 0xa8, 0x5b, 0x41, + 0x75, 0x7b, 0xaf, 0x12, 0x2c, 0x58, 0xd2, 0xee, 0xe3, 0xb7, 0xb3, 0x76, 0x20, 0x2a, 0x63, 0x95, 0xbe, 0x26, 0x09, + 0x7b, 0x62, 0xd0, 0x29, 0x54, 0x55, 0x76, 0x77, 0xb4, 0x05, 0xae, 0x53, 0x96, 0xa2, 0x17, 0xb6, 0xc8, 0xdd, 0xf2, + 0xef, 0x9e, 0x2b, 0x72, 0xf6, 0x6b, 0x40, 0x70, 0x6a, 0xbe, 0x22, 0xbe, 0x9c, 0xe0, 0x51, 0x75, 0x0b, 0x1c, 0xe7, + 0xef, 0x00, 0xfe, 0xf1, 0x78, 0x0d, 0x9a, 0x80, 0x58, 0xb0, 0x5e, 0x1a, 0xf7, 0x58, 0x2f, 0x2e, 0xb6, 0xab, 0x24, + 0xdf, 0x82, 0x33, 0x03, 0xa5, 0x5a, 0xfa, 0x81, 0x53, 0xb5, 0x80, 0x0a, 0x07, 0xb3, 0x93, 0x7a, 0x61, 0x19, 0xf5, + 0x98, 0x3e, 0x3f, 0x83, 0x83, 0x23, 0x24, 0x00, 0xee, 0x97, 0x7d, 0x40, 0x02, 0x1e, 0x3a, 0xb3, 0x03, 0xc2, 0x09, + 0xb3, 0xa8, 0x0a, 0x24, 0x92, 0x23, 0xfd, 0xec, 0x31, 0x13, 0xc9, 0x1f, 0xcc, 0x7a, 0xce, 0x29, 0xd1, 0x63, 0x3d, + 0x75, 0x84, 0xf4, 0x58, 0xcf, 0x3a, 0x22, 0x7a, 0xac, 0x67, 0x1d, 0x1f, 0x3d, 0xd6, 0x33, 0xc7, 0x4e, 0x0f, 0x02, + 0x13, 0x20, 0xf2, 0x80, 0xf5, 0x68, 0x32, 0xf5, 0x14, 0xf7, 0x00, 0xd1, 0x20, 0xb0, 0x9e, 0x14, 0xce, 0x7b, 0x80, + 0x3c, 0x46, 0x62, 0x75, 0xd0, 0xfb, 0x8f, 0xf1, 0x77, 0x3d, 0x23, 0x23, 0x8f, 0x5b, 0x87, 0xd5, 0xff, 0xfa, 0x4f, + 0x08, 0x80, 0xc3, 0xb3, 0xa9, 0x77, 0x3d, 0x86, 0xac, 0xb2, 0x8c, 0x40, 0xf2, 0x13, 0x83, 0x2f, 0x5f, 0x00, 0x54, + 0x7d, 0xa6, 0x6b, 0x35, 0x39, 0x6a, 0x8f, 0x39, 0x74, 0xc5, 0x00, 0xb0, 0x0d, 0x4b, 0x54, 0xd5, 0xc2, 0x26, 0x2c, + 0x6e, 0x3f, 0xc3, 0x68, 0x2e, 0x9b, 0x5e, 0xd0, 0x40, 0x3d, 0x42, 0xf0, 0x4b, 0xeb, 0xa1, 0xb5, 0x96, 0x29, 0x87, + 0xae, 0x8d, 0xa2, 0xca, 0x86, 0xba, 0x84, 0xd5, 0x46, 0x44, 0x35, 0x51, 0xa4, 0x5c, 0x33, 0x8a, 0x62, 0xa9, 0x82, + 0x43, 0x26, 0x56, 0x10, 0x35, 0x4f, 0x5b, 0x6d, 0x15, 0x1c, 0x56, 0x80, 0xb0, 0x16, 0xd6, 0x42, 0x3a, 0x83, 0xda, + 0x3b, 0xfd, 0x48, 0xf9, 0xcb, 0x0b, 0xb9, 0x9d, 0x5b, 0x28, 0xc2, 0xed, 0x39, 0x28, 0x6f, 0xea, 0xaa, 0x54, 0x44, + 0xa3, 0x25, 0x50, 0xca, 0x8a, 0x20, 0xb2, 0x00, 0x01, 0x1c, 0x37, 0x10, 0xf8, 0xbc, 0xc6, 0x27, 0xd0, 0x28, 0x04, + 0xf2, 0x03, 0xeb, 0x70, 0xe3, 0x21, 0x2d, 0xb5, 0x46, 0x44, 0x89, 0xf8, 0xc9, 0xd5, 0x73, 0x6c, 0x5f, 0x3d, 0x8d, + 0xb5, 0xa5, 0x34, 0x41, 0xfc, 0xc4, 0x62, 0x0b, 0x31, 0x41, 0x54, 0x87, 0xe8, 0x04, 0x96, 0x13, 0x42, 0x14, 0xfe, + 0x10, 0xfa, 0xa9, 0x81, 0xbf, 0x64, 0xcb, 0x22, 0xaf, 0x09, 0x16, 0x33, 0x67, 0x80, 0x56, 0x45, 0xe0, 0x99, 0xce, + 0x96, 0xca, 0x9c, 0xe6, 0xd1, 0x91, 0x1d, 0x5c, 0x76, 0x1d, 0xec, 0xa5, 0x2f, 0x63, 0x27, 0xcb, 0xa6, 0x51, 0x1b, + 0x1b, 0x22, 0xe1, 0x15, 0xf9, 0xcb, 0x2c, 0x35, 0xce, 0x91, 0x6a, 0x7d, 0xd7, 0xc5, 0x6a, 0x45, 0xdb, 0x84, 0x55, + 0x88, 0x50, 0xb7, 0x0d, 0x95, 0x4b, 0x61, 0x36, 0x36, 0x4d, 0x03, 0x7c, 0xa1, 0xa8, 0x54, 0xca, 0x53, 0x5b, 0xa9, + 0xe4, 0x84, 0x77, 0x7d, 0x55, 0x8b, 0xd4, 0x15, 0xc1, 0x36, 0x66, 0xa8, 0x87, 0x72, 0xa3, 0xc6, 0xbe, 0xee, 0x58, + 0xa5, 0x77, 0x98, 0xa0, 0x62, 0xe4, 0x45, 0x0e, 0x2e, 0x4a, 0x0a, 0x32, 0x57, 0x43, 0x98, 0x3f, 0x6a, 0xf8, 0xb4, + 0xb0, 0xdc, 0x43, 0x09, 0x98, 0x1d, 0x35, 0xbc, 0x8c, 0x10, 0x88, 0xb8, 0x54, 0xf6, 0x15, 0x13, 0xbf, 0xa7, 0x60, + 0x96, 0x4c, 0xe8, 0x5e, 0xc4, 0xc2, 0x08, 0x6d, 0x7c, 0x92, 0x24, 0x53, 0xb9, 0x3e, 0x41, 0x17, 0x2a, 0x5c, 0x20, + 0x23, 0xb4, 0x48, 0xf3, 0x4f, 0x87, 0x53, 0x09, 0x3e, 0xa2, 0x4e, 0x01, 0xc7, 0xf3, 0xcb, 0xc2, 0xfa, 0xc9, 0x2a, + 0x89, 0xb9, 0xac, 0xcd, 0x7f, 0xd9, 0xc9, 0x31, 0xd8, 0xe5, 0x69, 0xe2, 0xb8, 0xfa, 0x8f, 0xaa, 0xa4, 0x78, 0xf8, + 0x39, 0xcd, 0x01, 0x45, 0x30, 0xb3, 0xa7, 0x18, 0x1f, 0xfb, 0x2c, 0x53, 0xc0, 0xdf, 0xae, 0xb7, 0x96, 0x4c, 0xec, + 0x92, 0x76, 0x2b, 0x65, 0xfc, 0x52, 0x1b, 0x76, 0x1c, 0x5c, 0x1a, 0x80, 0xe2, 0xac, 0xd1, 0x61, 0x79, 0xad, 0xdb, + 0x56, 0x8e, 0x0a, 0xd4, 0xfa, 0xdf, 0xbb, 0x85, 0x29, 0x6f, 0xf3, 0x52, 0x79, 0x9b, 0x87, 0x26, 0x40, 0x20, 0x32, + 0x43, 0x9e, 0x35, 0x1d, 0x93, 0xc4, 0xbd, 0x23, 0x25, 0xed, 0x3b, 0x52, 0xfc, 0xe8, 0x1d, 0x09, 0xf9, 0x96, 0xd0, + 0x91, 0x7d, 0xc9, 0xc9, 0x09, 0x94, 0x19, 0xec, 0xe5, 0x0d, 0x93, 0xfd, 0x03, 0xda, 0x0b, 0xe7, 0xb2, 0xbc, 0xe6, + 0x6f, 0x85, 0xb7, 0xf1, 0xa7, 0x9b, 0xf3, 0xae, 0xaa, 0x77, 0x5f, 0x99, 0x99, 0xc7, 0x63, 0x71, 0x3c, 0xe6, 0x26, + 0x68, 0x77, 0xc1, 0xc5, 0xa0, 0x62, 0xf7, 0x6e, 0x7c, 0xfc, 0x5b, 0x8e, 0x22, 0xb6, 0x52, 0x1e, 0x49, 0x17, 0x2a, + 0x31, 0xbc, 0x36, 0xf0, 0x30, 0x7b, 0x3e, 0x9e, 0xec, 0x6f, 0xee, 0x27, 0x83, 0xc1, 0x5e, 0xf5, 0xed, 0x8e, 0xd7, + 0xb3, 0xfd, 0x9c, 0x3d, 0xf0, 0xbb, 0xe9, 0x2e, 0x38, 0x34, 0xb0, 0xed, 0xee, 0x6f, 0xc4, 0xf1, 0xb8, 0x7f, 0xce, + 0x17, 0xfe, 0xe1, 0x01, 0x01, 0x9d, 0xf9, 0xe5, 0xb8, 0x8d, 0xf1, 0x73, 0xdb, 0x76, 0xd5, 0xda, 0x03, 0x3c, 0xfd, + 0x8f, 0xde, 0xed, 0x6c, 0x39, 0xf7, 0xd9, 0x13, 0xfe, 0x00, 0xfe, 0xf9, 0xb8, 0x49, 0x22, 0xf5, 0x89, 0x76, 0x99, + 0xbc, 0x05, 0x07, 0xf2, 0xbd, 0xcf, 0xde, 0xf0, 0x87, 0xd9, 0x72, 0xce, 0x8b, 0xe3, 0xf1, 0xfd, 0x34, 0x44, 0xb2, + 0xa6, 0xb0, 0x22, 0x96, 0x14, 0xcf, 0x0f, 0xc2, 0xd3, 0xf7, 0x22, 0x32, 0x44, 0x5a, 0xee, 0xdd, 0x21, 0xbb, 0x65, + 0x91, 0x1f, 0xc0, 0x07, 0xd9, 0xde, 0x9f, 0xc8, 0x9a, 0xd2, 0xfd, 0xe2, 0x89, 0x7f, 0x3c, 0xd2, 0x5f, 0x6f, 0xfc, + 0xe3, 0xf1, 0x3d, 0x7b, 0x40, 0x70, 0x74, 0xbe, 0x87, 0xfe, 0xd1, 0xb7, 0x0e, 0xa8, 0xca, 0xf0, 0xed, 0x6c, 0x3b, + 0xf7, 0x9f, 0xaf, 0xd9, 0x0a, 0xb8, 0x50, 0x94, 0x17, 0xda, 0x2d, 0x7b, 0x40, 0xaf, 0x33, 0x72, 0x22, 0x9a, 0xed, + 0xe7, 0x3e, 0x8b, 0xf1, 0xb9, 0xba, 0x2f, 0x26, 0x5f, 0xbd, 0x2f, 0xee, 0xd9, 0xae, 0xfb, 0xbe, 0x28, 0xdf, 0x74, + 0xd7, 0xcf, 0x8e, 0xed, 0xd9, 0x03, 0xcc, 0xb0, 0xb7, 0xfc, 0xb6, 0x39, 0x75, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, + 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0xb9, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x97, 0xde, + 0xa2, 0xd4, 0x45, 0x4f, 0xfb, 0x14, 0xe4, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x7c, + 0xa6, 0x1d, 0x3d, 0xaf, 0xbf, 0xed, 0x3d, 0x93, 0xdf, 0xc8, 0xc0, 0x16, 0x22, 0x29, 0x1c, 0xc7, 0x57, 0xcf, 0xce, + 0xf8, 0xaf, 0x5a, 0x1e, 0xb5, 0xda, 0x2f, 0x94, 0xfa, 0xf4, 0x25, 0x1d, 0xd1, 0xc4, 0xbd, 0x68, 0xcb, 0xb0, 0x46, + 0x59, 0x53, 0x4b, 0x87, 0x61, 0x5c, 0xc3, 0xbe, 0x3c, 0x70, 0xe8, 0x3b, 0x20, 0xd0, 0xe6, 0xa9, 0x14, 0x68, 0xe1, + 0x18, 0x46, 0x61, 0x16, 0x52, 0x1e, 0x17, 0x66, 0x29, 0xef, 0xa9, 0x40, 0x8b, 0x5b, 0x75, 0x8f, 0xa9, 0xed, 0x16, + 0x44, 0x58, 0xbd, 0x65, 0x5c, 0x5e, 0x37, 0xaa, 0x70, 0x5b, 0x80, 0xa2, 0x08, 0xca, 0xe0, 0x40, 0x72, 0xdb, 0x42, + 0x49, 0xb3, 0x51, 0x58, 0x8b, 0x55, 0x51, 0xee, 0x7b, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, + 0x75, 0x28, 0x17, 0xe9, 0xbf, 0x65, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xfb, 0x97, + 0xf4, 0xb3, 0xc1, 0x32, 0x72, 0x4a, 0xfd, 0x10, 0x8d, 0xee, 0xd2, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, + 0x0a, 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, + 0x26, 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, + 0x90, 0xdc, 0xa9, 0x73, 0x7f, 0x54, 0x4e, 0xfe, 0x1d, 0x0d, 0x91, 0x57, 0xdc, 0x20, 0x56, 0x16, 0x5c, 0x62, 0x31, + 0x54, 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xc7, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, + 0x13, 0x3e, 0x6e, 0xad, 0x45, 0x88, 0x3a, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, + 0x14, 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xc8, 0x49, 0xcf, 0x5f, 0x9a, 0x14, 0x65, + 0xcc, 0xf8, 0x20, 0xca, 0x48, 0xe4, 0x75, 0xb8, 0x12, 0xd3, 0x02, 0xf9, 0x46, 0x4f, 0x1f, 0x04, 0xd7, 0xf0, 0x6e, + 0xc8, 0xbd, 0x02, 0x6c, 0x09, 0xd8, 0x01, 0xee, 0x95, 0x19, 0xe5, 0x3a, 0xad, 0xeb, 0xb7, 0xd6, 0x43, 0x31, 0x0c, + 0x9f, 0x5a, 0x02, 0xdb, 0xc9, 0x3a, 0x3a, 0xd1, 0xc3, 0x87, 0xff, 0x75, 0x55, 0x73, 0xd4, 0xa9, 0x5c, 0xce, 0x4e, + 0x27, 0x2c, 0x45, 0xcc, 0xa0, 0xfb, 0xeb, 0xee, 0xa5, 0x00, 0xba, 0x5d, 0x16, 0xf3, 0x6c, 0xb4, 0x97, 0x7f, 0x4b, + 0x37, 0x56, 0x94, 0x36, 0xf1, 0x2e, 0xeb, 0x8d, 0xfd, 0xe1, 0xe8, 0x3f, 0x9e, 0xbe, 0x9b, 0x10, 0xaa, 0xce, 0x96, + 0x6d, 0x74, 0x9c, 0xcb, 0xff, 0xfa, 0xcf, 0x31, 0x59, 0x41, 0x50, 0x10, 0x96, 0x9d, 0x62, 0xa2, 0x82, 0x51, 0xa4, + 0xd8, 0xf0, 0xf1, 0x64, 0x83, 0x3a, 0xe1, 0x8d, 0xbf, 0xd4, 0x3a, 0x61, 0x62, 0x64, 0xa5, 0xf2, 0x37, 0x2c, 0x67, + 0x2b, 0x95, 0x59, 0x40, 0xe6, 0x41, 0x35, 0xd9, 0x18, 0x0d, 0xe6, 0x9a, 0xd7, 0xb3, 0xcd, 0x5c, 0x2a, 0x9f, 0xc1, + 0x94, 0xb3, 0x1c, 0x9c, 0x2d, 0x85, 0xdd, 0x93, 0x40, 0xd1, 0x9a, 0xa1, 0x1b, 0x7f, 0x8a, 0xad, 0x7a, 0x95, 0x56, + 0x35, 0xc0, 0x03, 0x42, 0x0c, 0x0c, 0xb5, 0x57, 0x0b, 0x0f, 0xad, 0x05, 0xb0, 0xf1, 0x47, 0xa5, 0x1f, 0x8c, 0x27, + 0x4b, 0xbe, 0x40, 0xfe, 0xe5, 0xc8, 0x51, 0xbb, 0xf7, 0xfb, 0xde, 0x3d, 0x48, 0xc1, 0x91, 0x6b, 0xa1, 0x40, 0x22, + 0xa0, 0x05, 0xdf, 0xfa, 0xca, 0x07, 0xe3, 0x2d, 0x6a, 0xab, 0x41, 0x41, 0xed, 0xe8, 0x96, 0xc7, 0x8e, 0xde, 0xf9, + 0xfe, 0x8c, 0xbe, 0x7a, 0xa1, 0x85, 0xe3, 0xaf, 0x9c, 0x91, 0x1b, 0xb6, 0xee, 0x90, 0x23, 0x9a, 0x49, 0x87, 0x10, + 0xb1, 0x66, 0x1b, 0xf6, 0x96, 0x54, 0xce, 0x9d, 0x43, 0x76, 0xfe, 0x08, 0x55, 0x7a, 0xad, 0xc7, 0xb7, 0x13, 0xa5, + 0xbb, 0x3d, 0xdd, 0x4d, 0xbe, 0x65, 0x13, 0x11, 0x83, 0x01, 0x6d, 0x10, 0xce, 0xc8, 0x3a, 0x44, 0x2a, 0x1d, 0x20, + 0x04, 0x8e, 0x09, 0x68, 0xfa, 0xf7, 0xaf, 0x49, 0x14, 0x70, 0xa4, 0x8d, 0x90, 0xb5, 0xec, 0x78, 0xac, 0x40, 0xa3, + 0xdc, 0xfc, 0xe1, 0x15, 0xea, 0x34, 0x07, 0xe6, 0xe9, 0x12, 0xf6, 0x1c, 0x3c, 0xd2, 0x8b, 0xd3, 0x23, 0xfd, 0xbf, + 0xa3, 0x89, 0x1a, 0xff, 0xfb, 0x9a, 0x28, 0xa5, 0x45, 0x72, 0x54, 0x4b, 0xdf, 0xa4, 0x8e, 0x82, 0x8b, 0xbc, 0xa3, + 0x16, 0xb2, 0x67, 0xd9, 0xb8, 0x51, 0xcd, 0xfb, 0xff, 0xb5, 0x32, 0xff, 0x5f, 0xd3, 0xca, 0x30, 0x25, 0x3b, 0x96, + 0x6a, 0xe6, 0x81, 0x56, 0x31, 0xcc, 0x7e, 0x26, 0x09, 0x91, 0xe1, 0xd2, 0x80, 0x1f, 0x55, 0x70, 0x88, 0xd3, 0x6a, + 0x93, 0x85, 0x7b, 0x54, 0xa2, 0xde, 0x89, 0x55, 0x9a, 0xbf, 0xa8, 0xff, 0x25, 0xca, 0x02, 0xa6, 0xf6, 0xaa, 0x4c, + 0xe3, 0x80, 0x2c, 0xfc, 0x59, 0x58, 0xe2, 0xe4, 0xc6, 0x36, 0xfe, 0x2c, 0xc7, 0xd3, 0x7e, 0xd5, 0x99, 0x79, 0x20, + 0x81, 0x1a, 0x88, 0x3f, 0x72, 0x2e, 0x2b, 0x8b, 0x07, 0x84, 0x6e, 0xfe, 0xb1, 0x2c, 0x8b, 0xd2, 0xeb, 0x7d, 0x4a, + 0xd2, 0xea, 0x62, 0x2d, 0xea, 0xa4, 0x88, 0x15, 0x94, 0x4d, 0x0a, 0x30, 0xfa, 0xb0, 0xf2, 0x44, 0x1c, 0x5c, 0x20, + 0x50, 0xc3, 0x45, 0x9d, 0x84, 0x00, 0x34, 0xac, 0x10, 0xf6, 0x2f, 0xa0, 0x85, 0x17, 0x61, 0x1c, 0x6e, 0x00, 0x26, + 0x27, 0xad, 0x2e, 0x36, 0x65, 0x71, 0x9f, 0xc6, 0x22, 0x1e, 0xf5, 0x14, 0x25, 0xcb, 0xc7, 0xca, 0x95, 0x73, 0xfd, + 0xc3, 0x1f, 0x14, 0xc0, 0x6e, 0xc0, 0x6c, 0x5b, 0x60, 0x07, 0x00, 0x09, 0x0a, 0x64, 0x0b, 0x75, 0x1a, 0x5d, 0xa8, + 0xa5, 0x02, 0xef, 0xb9, 0x1e, 0xe0, 0x1f, 0x2b, 0xc0, 0x32, 0xae, 0x0b, 0x19, 0x30, 0x82, 0x00, 0x46, 0xe0, 0xa0, + 0x04, 0x0c, 0x9d, 0x61, 0x6d, 0xf1, 0xb8, 0x43, 0x73, 0xa5, 0xdb, 0x92, 0x9b, 0x46, 0x39, 0x5b, 0x89, 0x00, 0xfa, + 0xea, 0xa6, 0xc4, 0xe9, 0x72, 0xd9, 0x4a, 0xc2, 0xbe, 0x7d, 0xdf, 0x4e, 0x15, 0x79, 0x7c, 0x92, 0x86, 0xbc, 0x02, + 0x4f, 0x32, 0x8e, 0x24, 0x51, 0x22, 0xf8, 0x58, 0x35, 0x66, 0x1c, 0x5e, 0xb4, 0x29, 0xa7, 0x0e, 0x66, 0xbd, 0x00, + 0x9c, 0x27, 0x68, 0xcb, 0x00, 0x63, 0x01, 0x83, 0x73, 0x21, 0x96, 0x3c, 0x45, 0xf0, 0x4b, 0x27, 0x52, 0x18, 0x77, + 0x39, 0x0c, 0xf3, 0xa0, 0xe8, 0x5d, 0x52, 0x7f, 0xf4, 0xfb, 0xa8, 0x4d, 0x06, 0x43, 0x50, 0x09, 0xa0, 0xb2, 0x6e, + 0x90, 0x18, 0x58, 0x95, 0x16, 0x12, 0x97, 0x10, 0x2f, 0xf3, 0xd5, 0xb4, 0x8e, 0x82, 0xf7, 0xf5, 0x84, 0x10, 0x4e, + 0x30, 0x3e, 0xc4, 0x0d, 0x10, 0x30, 0x58, 0xc5, 0x05, 0x06, 0xc9, 0x73, 0x89, 0xee, 0x8f, 0xe7, 0x3b, 0x06, 0xb8, + 0x72, 0xde, 0x53, 0xed, 0xea, 0x81, 0xbd, 0x5c, 0xa5, 0x4b, 0x46, 0x08, 0x2b, 0xfe, 0x2f, 0x22, 0xef, 0xdb, 0x61, + 0x02, 0x6a, 0x1b, 0xf9, 0x63, 0x90, 0x98, 0xcb, 0x44, 0x11, 0xc4, 0xa3, 0xac, 0x60, 0x49, 0x1a, 0x6c, 0x47, 0x49, + 0x0a, 0x1a, 0x4d, 0x8c, 0x21, 0x53, 0xa1, 0x1d, 0x92, 0x46, 0xb3, 0x31, 0xd9, 0xc7, 0x90, 0xd7, 0x70, 0xb1, 0x58, + 0xe0, 0x7d, 0x3f, 0x0b, 0xd5, 0xc1, 0xb6, 0x34, 0x87, 0x80, 0x93, 0x04, 0x7b, 0xea, 0x8a, 0x94, 0x84, 0xd9, 0xe8, + 0x53, 0xc8, 0xb9, 0x01, 0x1d, 0x27, 0x8d, 0xa1, 0xfa, 0xc0, 0x24, 0xbc, 0x89, 0xd0, 0x49, 0x59, 0x21, 0x2c, 0xe0, + 0xbe, 0x91, 0xd1, 0x68, 0x25, 0x0d, 0x02, 0x6f, 0x33, 0x6c, 0x05, 0x36, 0xa1, 0xe1, 0x2f, 0x32, 0x0f, 0xd3, 0x6a, + 0x56, 0x82, 0x39, 0xdf, 0x40, 0x25, 0xc6, 0x93, 0xe5, 0x0d, 0xdf, 0xba, 0x58, 0x89, 0xc9, 0x6c, 0x39, 0x9f, 0x6c, + 0x24, 0xd5, 0x1c, 0x08, 0x19, 0x19, 0x5b, 0xc2, 0xfe, 0x61, 0x60, 0x28, 0x1d, 0xd8, 0xd1, 0x54, 0xd3, 0x26, 0x01, + 0x26, 0xd3, 0x25, 0xe7, 0xc3, 0x6b, 0x44, 0x93, 0xd5, 0xa9, 0x7b, 0x99, 0xaa, 0x76, 0x70, 0x4d, 0xce, 0xe4, 0xf4, + 0x48, 0x3d, 0xd5, 0xba, 0x97, 0x6a, 0xb4, 0x1b, 0xe6, 0xa3, 0x9d, 0x1f, 0x80, 0x5b, 0xa7, 0xb0, 0xd3, 0xf7, 0xc3, + 0x7c, 0xb4, 0xf7, 0x35, 0xec, 0x2e, 0x29, 0x04, 0xaa, 0x3f, 0xcb, 0x9a, 0xcc, 0xc5, 0x9b, 0xe2, 0xc1, 0x2b, 0xd8, + 0x33, 0x7f, 0xa0, 0x7f, 0x95, 0xec, 0x99, 0x6f, 0x33, 0xb9, 0xfe, 0x99, 0x76, 0x8d, 0xc6, 0x4c, 0xc7, 0x6b, 0xe7, + 0x60, 0x85, 0x06, 0xc8, 0x2f, 0xd8, 0xd1, 0xde, 0xe4, 0x20, 0x10, 0xa0, 0x7b, 0x09, 0x8e, 0xa2, 0x80, 0xa8, 0x69, + 0x55, 0x79, 0x74, 0xba, 0xf7, 0x0f, 0xf8, 0x46, 0x09, 0xd8, 0xe4, 0xa9, 0x75, 0x6f, 0x19, 0xfb, 0xc7, 0x23, 0x84, + 0xd0, 0xcb, 0xe9, 0x37, 0xda, 0xb1, 0x7a, 0xb4, 0x67, 0x12, 0xfc, 0x1c, 0x31, 0xe9, 0x15, 0x8c, 0x61, 0xe8, 0xc2, + 0x2a, 0x46, 0xf2, 0x0c, 0xc8, 0x1a, 0xbf, 0x41, 0x74, 0x01, 0x8b, 0x5e, 0xef, 0xd5, 0x09, 0x0d, 0x22, 0xa0, 0xd2, + 0x6b, 0xfe, 0x52, 0xe4, 0x73, 0x55, 0x88, 0xde, 0x07, 0x6b, 0xe7, 0xcd, 0x8c, 0x64, 0x99, 0x34, 0x52, 0xed, 0x56, + 0x16, 0x9b, 0xca, 0x9b, 0x9d, 0x91, 0x2e, 0xe6, 0x18, 0x2a, 0x83, 0xc7, 0x01, 0x28, 0x3d, 0xff, 0x12, 0x7a, 0x25, + 0x43, 0xa6, 0x59, 0xa2, 0x99, 0xdd, 0x37, 0xfe, 0x64, 0x9d, 0x7a, 0x31, 0x22, 0x66, 0x03, 0x5b, 0x88, 0xdb, 0xa2, + 0xd2, 0x6d, 0x51, 0x28, 0x5b, 0x14, 0xe9, 0x43, 0xed, 0x42, 0x77, 0x66, 0xe1, 0xb3, 0xdc, 0xb4, 0xef, 0x4d, 0x66, + 0xc6, 0x06, 0x68, 0xbb, 0x08, 0xdf, 0x40, 0x07, 0x2a, 0x84, 0xfc, 0x47, 0x44, 0x44, 0x22, 0x60, 0x97, 0x73, 0x77, + 0x62, 0xd3, 0x21, 0x99, 0x87, 0x98, 0x15, 0x6a, 0x94, 0x97, 0x3c, 0x39, 0x19, 0x90, 0x9c, 0x50, 0xb7, 0xfb, 0xfd, + 0xcb, 0xa5, 0x0b, 0x6a, 0xbf, 0xa1, 0xd8, 0x31, 0xba, 0x29, 0xe0, 0x5c, 0xf0, 0x28, 0xef, 0xa5, 0x77, 0x09, 0x68, + 0x8e, 0xed, 0x29, 0xb2, 0x01, 0x9c, 0xde, 0x76, 0x21, 0xc0, 0xf6, 0x59, 0xb3, 0x8d, 0x3f, 0x59, 0xdf, 0x44, 0x53, + 0xaf, 0xe4, 0x33, 0xdd, 0x45, 0x89, 0xdb, 0x45, 0xb1, 0xec, 0xa2, 0x6d, 0x03, 0xc1, 0x8e, 0x6b, 0x3f, 0x00, 0xde, + 0xd0, 0xa8, 0xdf, 0x2f, 0x5b, 0x3d, 0x7b, 0xf6, 0xb5, 0xd3, 0x9e, 0xcd, 0x7c, 0x56, 0x9a, 0x9e, 0xfd, 0x35, 0x75, + 0x7b, 0x56, 0x4e, 0xf6, 0xa2, 0x73, 0xb2, 0x4f, 0x67, 0xf3, 0x40, 0x70, 0xb9, 0x73, 0x5f, 0x56, 0x53, 0x3d, 0xed, + 0x72, 0x3f, 0x68, 0x0d, 0x91, 0xf9, 0xc2, 0xa7, 0xbc, 0x7b, 0x5d, 0xc1, 0x02, 0x96, 0xe0, 0x6e, 0xbd, 0x34, 0xff, + 0x15, 0xbb, 0xbf, 0x17, 0xf4, 0xd2, 0xfc, 0x37, 0xfa, 0x93, 0x02, 0x38, 0x00, 0x8d, 0xa9, 0xdd, 0x02, 0x0f, 0x31, + 0x54, 0x50, 0xb8, 0x9b, 0x95, 0x73, 0xaf, 0x06, 0x38, 0x4c, 0xd2, 0x37, 0xb4, 0x7a, 0xa5, 0xc5, 0xae, 0x97, 0xc9, + 0x5e, 0x01, 0x1e, 0xaa, 0x90, 0x87, 0xc7, 0x63, 0xd4, 0x31, 0xec, 0xa0, 0x8e, 0x80, 0x61, 0x0f, 0xa1, 0xb1, 0x05, + 0x9e, 0x8f, 0x9f, 0x32, 0x7e, 0x10, 0xa0, 0x36, 0x42, 0x78, 0xbc, 0x5a, 0x94, 0x21, 0xb6, 0xec, 0x0d, 0x52, 0x49, + 0xfd, 0x2c, 0x10, 0x65, 0xb4, 0x0a, 0x68, 0xab, 0x3d, 0x65, 0x69, 0xbc, 0x85, 0x50, 0xb1, 0xd4, 0xc7, 0x10, 0x1a, + 0x38, 0xfc, 0x8e, 0x47, 0x90, 0xe0, 0x4b, 0xae, 0xc9, 0xe6, 0xde, 0xe4, 0xf7, 0xb4, 0xcf, 0x1f, 0x8f, 0x97, 0xd7, + 0x08, 0x4a, 0x97, 0xc2, 0x47, 0x2a, 0x11, 0xd5, 0x53, 0xdc, 0x94, 0x90, 0xcd, 0x92, 0x95, 0x7e, 0xf0, 0xab, 0xfa, + 0x05, 0x00, 0xb2, 0x10, 0x68, 0x13, 0x99, 0xfd, 0xe9, 0x42, 0x45, 0x17, 0x00, 0x87, 0xf8, 0xe3, 0x27, 0x88, 0xbe, + 0xa1, 0x65, 0x5a, 0x3e, 0x4e, 0x78, 0x08, 0x5a, 0x5b, 0xd2, 0x49, 0xc4, 0x4a, 0x81, 0x0d, 0x91, 0xf0, 0xfd, 0xfe, + 0x65, 0x2c, 0xe9, 0x40, 0xa3, 0x56, 0xf7, 0xc6, 0xad, 0xee, 0x95, 0xaf, 0xeb, 0x4e, 0x6e, 0x7c, 0x50, 0xb4, 0xcf, + 0xe6, 0x8d, 0xca, 0xf7, 0x6d, 0x9d, 0xb3, 0x3f, 0xdf, 0x3b, 0x72, 0x4e, 0x7c, 0x7b, 0x0f, 0xa1, 0xe8, 0xa1, 0x29, + 0xb2, 0x2c, 0x09, 0x03, 0x5a, 0x6b, 0xd7, 0x9e, 0x65, 0x74, 0xf0, 0xda, 0x37, 0x84, 0x88, 0x3c, 0xc5, 0x27, 0x21, + 0xb7, 0x38, 0x3e, 0x28, 0xd0, 0x3f, 0x33, 0xfe, 0xcc, 0x89, 0x1f, 0xb6, 0xfa, 0x05, 0x70, 0x6e, 0xba, 0xf7, 0xee, + 0xc4, 0xac, 0xc7, 0x50, 0xca, 0xc6, 0xff, 0xfd, 0x3e, 0x91, 0x05, 0x3a, 0x1d, 0xd1, 0x30, 0x10, 0xdc, 0x45, 0xf5, + 0x7f, 0xaf, 0x78, 0xdd, 0xb3, 0x56, 0xe7, 0xcb, 0x4f, 0x9d, 0x9f, 0xf4, 0xea, 0x65, 0xdc, 0x03, 0x72, 0x74, 0x80, + 0x70, 0x5e, 0xf7, 0x1b, 0xb6, 0xff, 0xe6, 0x97, 0xf7, 0x27, 0x2f, 0x03, 0x9b, 0x14, 0x89, 0x6d, 0x25, 0x9f, 0xf5, + 0x40, 0xe1, 0xd7, 0x63, 0xbd, 0xba, 0xd8, 0xf4, 0x58, 0x0f, 0xb5, 0x80, 0xe8, 0x61, 0x01, 0xea, 0xbf, 0x9e, 0x7d, + 0x1a, 0x0a, 0x07, 0xd9, 0x38, 0x55, 0xa0, 0xc8, 0x82, 0x3f, 0x17, 0xa3, 0x4d, 0x41, 0x80, 0xc8, 0x96, 0x90, 0x96, + 0x9f, 0xcd, 0x1e, 0x97, 0x5a, 0x92, 0xc1, 0x37, 0x01, 0x99, 0x1d, 0x58, 0x39, 0x41, 0xe9, 0xb8, 0x33, 0xe0, 0xca, + 0x16, 0x8f, 0x76, 0xfb, 0xd3, 0x20, 0x3b, 0x6b, 0x4e, 0x1a, 0xed, 0xc3, 0x3e, 0x05, 0x4e, 0x1a, 0x10, 0x7b, 0x44, + 0xa0, 0xef, 0xb6, 0xb9, 0xf4, 0xd1, 0xe1, 0x9c, 0x17, 0xf2, 0xcf, 0xa9, 0xc4, 0xe0, 0x1e, 0x4a, 0xac, 0x81, 0x40, + 0xe5, 0x19, 0xaa, 0x1c, 0x36, 0xc8, 0xf1, 0xcf, 0x8e, 0x64, 0x26, 0x31, 0x59, 0xe4, 0x6e, 0xcd, 0x54, 0xf8, 0x81, + 0x00, 0xfe, 0x73, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x01, 0x7f, 0x4c, 0xe1, 0xe7, 0x3c, 0x85, + 0x9d, 0xf6, 0xb0, 0x29, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, 0x3f, + 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x75, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x05, 0x39, + 0xdb, 0x14, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xf2, 0x51, 0x5a, 0xfd, 0x55, 0xff, + 0x04, 0xe6, 0x6d, 0x2a, 0x46, 0xb5, 0x8a, 0xc9, 0x6f, 0xf4, 0xfb, 0xc5, 0xa0, 0xf5, 0x21, 0x83, 0x8f, 0x5e, 0x9b, + 0x06, 0x7f, 0x74, 0x1a, 0xec, 0x30, 0xd1, 0x08, 0x80, 0x64, 0x4e, 0x2d, 0x79, 0x28, 0xfa, 0x23, 0xa8, 0xb0, 0x46, + 0xb9, 0x53, 0x30, 0x58, 0xff, 0xf1, 0x68, 0x07, 0xa6, 0x5e, 0x1c, 0x6d, 0xc9, 0x0e, 0x9a, 0xfb, 0x06, 0xb8, 0x5f, + 0x23, 0x5b, 0xcc, 0x2a, 0x80, 0x66, 0xaf, 0x11, 0x19, 0x9f, 0xbc, 0x00, 0xc6, 0x6c, 0x93, 0x85, 0x91, 0x88, 0x83, + 0xb1, 0x6a, 0xcc, 0x98, 0x81, 0x81, 0x0b, 0x74, 0x2d, 0x93, 0x92, 0x34, 0xa4, 0x83, 0x01, 0x2b, 0x65, 0x0b, 0x07, + 0xbc, 0x68, 0x4e, 0xdb, 0xf1, 0xba, 0x45, 0xe3, 0x81, 0xed, 0x62, 0x87, 0xfb, 0x1f, 0x8a, 0xdd, 0xdb, 0x70, 0x47, + 0x7a, 0x85, 0x8a, 0x25, 0xf4, 0xf3, 0xaf, 0xb2, 0xcf, 0x1a, 0x4e, 0x4e, 0x85, 0x66, 0x68, 0x29, 0x12, 0x4a, 0xf1, + 0x4e, 0x4f, 0x0a, 0x8c, 0x65, 0x2c, 0xfc, 0x03, 0x70, 0x4e, 0x17, 0x8a, 0xc8, 0x1d, 0x38, 0x8e, 0x6f, 0xa1, 0x82, + 0x51, 0xc3, 0xc1, 0xcb, 0x18, 0xb6, 0x45, 0x31, 0x0b, 0x09, 0xa7, 0x10, 0x2e, 0x56, 0x59, 0xbf, 0x2f, 0x7f, 0x51, + 0x17, 0x5d, 0x65, 0xb2, 0xee, 0x93, 0x70, 0x64, 0xc6, 0x72, 0xea, 0x85, 0xe4, 0x79, 0xcf, 0x93, 0x69, 0xf2, 0xb4, + 0x0a, 0x22, 0x80, 0x7c, 0x0e, 0xef, 0xc3, 0x34, 0x03, 0xab, 0x34, 0x29, 0x3f, 0x42, 0xe9, 0x8b, 0xcf, 0x73, 0x3f, + 0xd0, 0xd9, 0x2b, 0x93, 0x0c, 0x6f, 0xe6, 0xad, 0x37, 0xa9, 0x75, 0x5d, 0x3c, 0xe0, 0xef, 0x9c, 0xc1, 0xc6, 0xb9, + 0xce, 0x04, 0x07, 0x5e, 0x24, 0xb5, 0x5e, 0x33, 0xfe, 0x3c, 0xc3, 0x75, 0xa9, 0xda, 0xe8, 0xa3, 0x10, 0x5d, 0x41, + 0xa6, 0x02, 0x14, 0x8a, 0xb4, 0x7f, 0x50, 0x6a, 0x6e, 0x52, 0x69, 0x23, 0x01, 0x74, 0x0f, 0x93, 0x06, 0x5b, 0x0c, + 0x65, 0x2c, 0x4d, 0xa2, 0xdc, 0x69, 0x10, 0x57, 0xf6, 0xe7, 0x5c, 0xe2, 0xd0, 0xb2, 0x48, 0xfe, 0xbd, 0xef, 0xe9, + 0x2b, 0xa4, 0xee, 0x64, 0x81, 0xcc, 0x18, 0x2f, 0xf2, 0xf8, 0x13, 0x10, 0x66, 0x83, 0x36, 0x2a, 0x0a, 0x21, 0x64, + 0x83, 0x18, 0x34, 0x5e, 0xe4, 0xf1, 0x0f, 0x8a, 0xc6, 0x43, 0x3e, 0x8a, 0x7c, 0xf5, 0x57, 0xa9, 0xff, 0x0a, 0x7d, + 0x66, 0x82, 0x47, 0xa8, 0x26, 0xfa, 0x77, 0xcf, 0x67, 0xf7, 0xa0, 0x36, 0x8c, 0xc2, 0xcc, 0x94, 0x9f, 0xfb, 0xa6, + 0x38, 0x7b, 0xfd, 0x15, 0x5d, 0x65, 0x5b, 0xf7, 0xa3, 0x8f, 0x27, 0x04, 0xd6, 0xc6, 0xe8, 0x8a, 0x1b, 0x03, 0xc8, + 0x61, 0xf2, 0x7e, 0x45, 0x69, 0x15, 0xa4, 0x41, 0xe8, 0xa0, 0x21, 0xe8, 0x95, 0x44, 0x1f, 0x48, 0x2c, 0x62, 0x0c, + 0x2f, 0xc4, 0x33, 0x52, 0x93, 0x89, 0x86, 0x78, 0x45, 0xec, 0x87, 0x68, 0xc9, 0xa9, 0x89, 0x6e, 0x84, 0x29, 0x06, + 0x12, 0x3b, 0x83, 0xe4, 0x24, 0xa9, 0x95, 0x5f, 0x3c, 0x93, 0x84, 0x25, 0x76, 0x1e, 0x62, 0x30, 0xa9, 0xa5, 0x3b, + 0xbd, 0xa9, 0xd2, 0x97, 0x13, 0x2d, 0x07, 0xed, 0x03, 0xb0, 0x4b, 0x49, 0xef, 0x9f, 0x14, 0x8a, 0xf8, 0x10, 0xc6, + 0x31, 0x84, 0x6f, 0x11, 0xd5, 0x15, 0x38, 0xd7, 0x0a, 0x34, 0x56, 0x03, 0x0f, 0xcd, 0x2c, 0x9f, 0x0f, 0x39, 0xfd, + 0x54, 0x5a, 0xfe, 0x18, 0xd1, 0xd8, 0x68, 0xdd, 0x1c, 0x8f, 0x07, 0x5a, 0xf5, 0xd2, 0x39, 0xe8, 0xba, 0x99, 0xc4, + 0xc4, 0x0d, 0xa4, 0xeb, 0x47, 0xbf, 0x99, 0xb0, 0x17, 0x51, 0x21, 0x97, 0x42, 0x50, 0xd0, 0xea, 0x40, 0xe0, 0x50, + 0x78, 0x8b, 0x32, 0x5f, 0xc5, 0xb4, 0x81, 0x30, 0xf8, 0xfc, 0x40, 0x7e, 0xbe, 0x29, 0x48, 0xc5, 0x8e, 0x75, 0xed, + 0xf7, 0xb7, 0xa5, 0x07, 0x78, 0x72, 0x26, 0xc9, 0xd3, 0x66, 0x08, 0x2b, 0x02, 0x68, 0xcc, 0x6a, 0xb2, 0x38, 0xe1, + 0xca, 0x1c, 0x7e, 0xcc, 0xbd, 0x92, 0xa5, 0x4c, 0x9d, 0xa7, 0x7a, 0x01, 0x44, 0x1d, 0x6f, 0xd0, 0x8a, 0xd4, 0xaf, + 0xd0, 0xd9, 0x6b, 0x56, 0x42, 0xc6, 0xc3, 0x4b, 0xce, 0xd3, 0xd1, 0x03, 0x4b, 0x78, 0x84, 0x7f, 0x25, 0x13, 0x7d, + 0xf8, 0x3d, 0x70, 0xb8, 0x19, 0x27, 0x3c, 0x72, 0x9b, 0x7d, 0xa8, 0xc2, 0x35, 0xdc, 0x4c, 0x0b, 0x40, 0x72, 0x0b, + 0x92, 0x26, 0xa0, 0x84, 0x44, 0x26, 0x64, 0xd6, 0x94, 0xfc, 0xdc, 0xd2, 0x36, 0x58, 0xc3, 0xa4, 0xf3, 0x80, 0x17, + 0xad, 0x3e, 0x5a, 0x4d, 0xb4, 0xcb, 0xac, 0x9a, 0x0f, 0x71, 0x86, 0x6a, 0x8e, 0xbb, 0x0b, 0xf8, 0x39, 0xe0, 0x39, + 0xcb, 0x9b, 0x74, 0xb4, 0x1f, 0x70, 0xe1, 0xc9, 0x75, 0x9e, 0x8e, 0x76, 0xf8, 0x4b, 0xee, 0x0f, 0x00, 0x1d, 0x4c, + 0x5d, 0x02, 0x7f, 0xaa, 0xb6, 0x9a, 0x4a, 0xfd, 0xd2, 0xda, 0xaf, 0xeb, 0xce, 0x6a, 0xc1, 0x19, 0xa2, 0x2f, 0x43, + 0x07, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, + 0x82, 0x7b, 0xc9, 0x9f, 0x1f, 0x10, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, + 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xa9, 0x34, 0x26, 0x45, 0x05, 0xe9, 0x9c, 0x0e, 0x37, 0xaf, 0x8e, 0xf3, 0x84, 0x65, 0x7c, 0xdc, 0x3e, 0x53, 0x20, 0xc4, 0x16, 0xcf, 0x90, - 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x38, 0xd4, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, - 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1a, 0xfe, 0x2e, 0x43, 0x75, 0x77, 0x08, - 0x4c, 0x6c, 0xd9, 0x81, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x1b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, - 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x11, 0x5e, 0x25, 0x5b, 0x79, 0x38, 0x24, 0xd6, 0x5d, 0xd8, 0xd1, - 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0xe4, 0x66, 0x17, 0x12, 0x83, 0x8a, 0xa5, 0xfa, - 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xd5, 0x71, 0x9f, 0x8a, 0xd1, 0x5a, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, - 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x5c, 0x1f, 0xc7, 0x87, 0x83, 0x14, 0x33, - 0x2e, 0x8f, 0xc4, 0x8c, 0xcb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xc3, 0xe1, 0x92, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, - 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4b, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x75, 0xea, 0x65, 0xe4, - 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x2a, 0xda, 0xad, 0x4b, 0x26, - 0xec, 0x2d, 0xa5, 0x92, 0x56, 0x79, 0xf9, 0x74, 0xe3, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, + 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x3c, 0xd6, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, + 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1b, 0xfe, 0x25, 0x43, 0x75, 0x77, 0x08, + 0x4c, 0x6c, 0xd9, 0x91, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x5b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, + 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x15, 0x5e, 0x2e, 0x5b, 0x79, 0x3c, 0x26, 0xd6, 0x5d, 0xd8, 0xd1, + 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0x54, 0x66, 0x17, 0x12, 0x83, 0x9c, 0xa5, 0xfa, + 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xf9, 0x69, 0x9f, 0x8a, 0xd1, 0x46, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, + 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x4a, 0x1f, 0xc7, 0xc7, 0xa3, 0x14, 0x33, + 0xae, 0x4f, 0xc4, 0x8c, 0xeb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xe3, 0xf1, 0x9a, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, + 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4d, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x4d, 0xea, 0x65, 0xe4, + 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x72, 0xda, 0xad, 0x4b, 0x26, + 0xec, 0x2d, 0x25, 0x97, 0x56, 0x79, 0xf9, 0x74, 0xeb, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, 0x12, 0xb5, 0x32, 0x4c, 0x16, 0xce, 0x4b, 0xa6, 0x9e, 0x0c, 0x78, 0xcc, 0x4a, 0x1e, 0xc9, 0x4e, 0x6f, 0x0c, 0x82, - 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x74, 0x95, 0x0b, 0x0c, 0xb7, 0x5b, 0xb3, 0x8d, - 0xaa, 0xb3, 0xdc, 0xd4, 0x2a, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0x37, 0x10, 0x8c, - 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x05, 0x96, 0xd2, 0xd1, 0x8e, 0x97, - 0xa8, 0x52, 0xf8, 0xbb, 0xe0, 0xfb, 0x30, 0x8e, 0xbf, 0x2f, 0xb6, 0xea, 0x40, 0xbc, 0x2d, 0xb6, 0x48, 0xfb, 0x22, + 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x7c, 0x95, 0x0b, 0x0c, 0xb7, 0xdb, 0xb0, 0xad, + 0xaa, 0xb3, 0xdc, 0xd4, 0x72, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0xb7, 0x10, 0x8c, + 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x03, 0x96, 0xd2, 0xd1, 0x9e, 0x97, + 0xa8, 0x52, 0xf8, 0x9b, 0xe0, 0x87, 0x30, 0x8e, 0x7f, 0x28, 0x76, 0xea, 0x40, 0xbc, 0x2b, 0x76, 0x48, 0xfb, 0x22, 0xff, 0x42, 0x1c, 0xf0, 0x5a, 0xd7, 0x94, 0xd7, 0xd6, 0x9c, 0x06, 0xb6, 0x86, 0x91, 0x92, 0xc2, 0xb9, 0xf9, 0xf3, - 0x70, 0xa0, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x44, 0x09, 0x8e, 0x5c, - 0xf2, 0xaf, 0xc3, 0x41, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0xdb, 0x7f, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, + 0x78, 0xa4, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x45, 0x09, 0x7e, 0x13, + 0xf2, 0xaf, 0xe3, 0x51, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0x3b, 0x7c, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, 0x24, 0xff, 0x6a, 0x9a, 0x79, 0xc3, 0x64, 0xcd, 0x14, 0x8e, 0x43, 0xc3, 0x08, 0x69, 0x40, 0xb7, 0x41, 0x6d, 0x78, - 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0x97, 0x13, 0x71, 0x4e, 0x97, 0x24, 0xf5, 0x54, 0x42, - 0x49, 0x08, 0x76, 0xe9, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, - 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xab, - 0x78, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8a, 0x4d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, - 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xac, 0xe4, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, - 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0x1f, 0x55, 0x36, 0x76, 0x07, 0xe4, 0x90, 0x64, 0xb2, 0xb8, 0x1b, 0xdd, - 0x8a, 0x65, 0x51, 0x8a, 0x9f, 0xb1, 0x1e, 0xae, 0xd9, 0xc2, 0x7d, 0x06, 0x84, 0xf6, 0x13, 0xa5, 0xbd, 0x89, 0x34, - 0x41, 0xf7, 0x1d, 0x5b, 0x01, 0xc8, 0x00, 0x8a, 0xba, 0xda, 0xad, 0xcf, 0xf9, 0x39, 0x92, 0x66, 0x38, 0x8c, 0x6e, - 0x9f, 0xde, 0x05, 0x77, 0x83, 0x4b, 0xd4, 0x4a, 0x5f, 0xb2, 0xb8, 0x85, 0x41, 0xb5, 0x37, 0x4b, 0x38, 0xa8, 0x99, - 0xb5, 0x36, 0x02, 0xc1, 0x64, 0x0f, 0x05, 0x15, 0x73, 0x05, 0xfb, 0xa0, 0x60, 0x2d, 0x79, 0x1d, 0x1c, 0x6e, 0xed, - 0xcb, 0x4a, 0x71, 0xf1, 0xfc, 0x22, 0x69, 0x5d, 0x58, 0xca, 0x8b, 0xe7, 0x0d, 0x18, 0x5c, 0x8e, 0xb0, 0xa9, 0x2a, - 0x7f, 0xb2, 0x01, 0xd0, 0xad, 0x90, 0x22, 0x5e, 0x94, 0xc2, 0xb6, 0x95, 0xcf, 0x9c, 0xb0, 0xc1, 0x86, 0x3d, 0xc0, - 0xbd, 0x32, 0x28, 0x19, 0x5c, 0x88, 0x71, 0xbb, 0xd9, 0x05, 0xb8, 0x82, 0xa1, 0x30, 0xb6, 0xe6, 0x6f, 0x32, 0x2f, - 0x52, 0x02, 0x6e, 0x86, 0x28, 0x5f, 0x1b, 0x38, 0x99, 0xf4, 0xe4, 0x5a, 0xb2, 0x18, 0xb0, 0xa0, 0xc1, 0x77, 0xd4, - 0xfa, 0x3b, 0x93, 0x7f, 0xe3, 0xe9, 0xa1, 0x1f, 0x7c, 0xce, 0xbc, 0xa5, 0xcf, 0xde, 0x54, 0x32, 0x5a, 0x93, 0x44, - 0x79, 0xf5, 0x70, 0x09, 0x72, 0xc3, 0x72, 0xf4, 0xc0, 0x96, 0x20, 0x4e, 0x2c, 0x47, 0x09, 0x65, 0x74, 0x85, 0x7b, - 0x95, 0xd9, 0x32, 0x11, 0x48, 0x71, 0x60, 0x29, 0xe5, 0xde, 0x62, 0x1d, 0x2c, 0x71, 0x7f, 0x22, 0xb9, 0x80, 0x92, - 0x07, 0x50, 0xae, 0x14, 0x10, 0xf0, 0xe9, 0x00, 0xca, 0x97, 0xf2, 0x22, 0xfc, 0x89, 0x13, 0x35, 0x58, 0x8e, 0x1e, - 0x1a, 0xf6, 0xa3, 0x17, 0x5a, 0xf6, 0x87, 0x3b, 0xad, 0x69, 0x58, 0xf1, 0x3b, 0x98, 0x16, 0x13, 0xb7, 0x2f, 0x57, - 0x76, 0x55, 0x7c, 0xb6, 0x52, 0x67, 0x37, 0x35, 0x24, 0x61, 0x5f, 0x91, 0x55, 0x80, 0x83, 0x55, 0x11, 0xf7, 0x2c, - 0xcb, 0x7d, 0x18, 0xfd, 0xb9, 0x49, 0x4b, 0x61, 0xa1, 0x4a, 0xfa, 0xfb, 0xa6, 0x14, 0x48, 0x65, 0xa2, 0x13, 0x2d, - 0x04, 0x57, 0x60, 0x10, 0xb8, 0x17, 0x79, 0x0d, 0x80, 0x31, 0xe0, 0x52, 0xa0, 0x2c, 0xdb, 0x12, 0x42, 0xaa, 0xfb, - 0x19, 0xa8, 0xed, 0xc4, 0x7d, 0x1a, 0x91, 0xb5, 0x10, 0x7d, 0x15, 0x8c, 0x99, 0xf3, 0x52, 0xba, 0xc5, 0xa6, 0xab, - 0xcd, 0xea, 0x06, 0x9d, 0x4b, 0x5b, 0x6e, 0x7e, 0xc2, 0x16, 0x6b, 0x05, 0xca, 0x26, 0x24, 0x6d, 0xe7, 0x3c, 0x47, - 0xd9, 0x84, 0x96, 0xf6, 0x9e, 0x7a, 0x54, 0xa8, 0x4e, 0xb6, 0x5e, 0xaa, 0xa6, 0x16, 0x61, 0xb5, 0xb8, 0xa8, 0xfc, - 0x00, 0x74, 0x53, 0x69, 0xf5, 0xb2, 0xae, 0xd1, 0x14, 0x6a, 0xb5, 0x70, 0xdc, 0x68, 0x67, 0xd3, 0x65, 0x7a, 0x87, - 0x38, 0xab, 0xd2, 0x0e, 0xfd, 0x7d, 0xa6, 0x5d, 0x2f, 0x3b, 0xfa, 0xcd, 0xb8, 0xba, 0xc0, 0x85, 0xd8, 0x80, 0xcf, - 0xb9, 0xbf, 0xbc, 0xde, 0xf3, 0xb8, 0xe7, 0x1f, 0x0e, 0xc8, 0x9e, 0xd4, 0xfe, 0x50, 0x7d, 0xec, 0x0a, 0x86, 0x2c, - 0x8c, 0x52, 0x7f, 0x91, 0xf2, 0xde, 0x13, 0x1c, 0xf7, 0xcf, 0x55, 0x8f, 0xfd, 0x98, 0xf1, 0x7d, 0x5d, 0x6c, 0xa2, - 0x84, 0xa2, 0x1a, 0x7a, 0xab, 0x62, 0x53, 0x89, 0xb8, 0x78, 0xc8, 0x7b, 0x0c, 0x93, 0x61, 0x2c, 0x64, 0x2a, 0xfc, - 0x29, 0x53, 0xc1, 0x23, 0x84, 0x12, 0x37, 0xeb, 0x1e, 0x69, 0x37, 0x21, 0x4e, 0xa9, 0x16, 0xa5, 0x4c, 0xc6, 0xbf, - 0xf5, 0x13, 0x28, 0xcf, 0x29, 0x5a, 0xa6, 0x1f, 0x15, 0x2e, 0xd3, 0x37, 0xeb, 0xe3, 0xd2, 0x33, 0x11, 0xea, 0xcc, - 0xc5, 0xa6, 0xd6, 0xe9, 0x18, 0x3b, 0xa5, 0x53, 0x1b, 0xf6, 0xa5, 0x52, 0x5c, 0x56, 0x14, 0xfe, 0x8d, 0x44, 0x56, - 0x3d, 0x23, 0x8e, 0xff, 0x2b, 0x6b, 0x9f, 0x61, 0x15, 0xf8, 0x65, 0x20, 0xef, 0x17, 0x00, 0x1f, 0xd7, 0x75, 0x99, - 0xde, 0x6e, 0x80, 0x36, 0x84, 0x86, 0xbf, 0xe7, 0x23, 0x03, 0xa6, 0xfb, 0x08, 0x67, 0x48, 0x0f, 0x75, 0xce, 0xe9, - 0xac, 0x4c, 0xe7, 0x5c, 0x85, 0xb5, 0x04, 0x7b, 0x39, 0x69, 0x72, 0xb9, 0x2e, 0x41, 0xcd, 0x04, 0x6e, 0x1f, 0xda, - 0x23, 0x42, 0xa8, 0x4d, 0x59, 0x4d, 0x2f, 0xa1, 0xe6, 0x9d, 0x9c, 0x76, 0x34, 0x29, 0xc1, 0x55, 0x43, 0x67, 0xe5, - 0xfa, 0xaf, 0xc3, 0xa1, 0x77, 0x9b, 0x15, 0xd1, 0x1f, 0x3d, 0xf4, 0x77, 0xdc, 0xde, 0xa4, 0x5f, 0x20, 0x5a, 0xc6, - 0xfa, 0x1b, 0x32, 0xa0, 0xe3, 0xc9, 0xf0, 0xb6, 0xd8, 0xf6, 0xd8, 0x17, 0xd4, 0x60, 0xe9, 0xeb, 0xc7, 0x1f, 0x20, - 0xa1, 0xea, 0xda, 0x17, 0x16, 0x4f, 0x98, 0xa7, 0x44, 0xdb, 0xc2, 0x87, 0xb0, 0xd0, 0x2f, 0x10, 0x19, 0x09, 0xe1, - 0xa6, 0xb2, 0x7b, 0x94, 0xb4, 0x0b, 0x7d, 0xe9, 0x6b, 0xd9, 0x57, 0xbe, 0x73, 0x01, 0xb0, 0xb2, 0xcf, 0x6d, 0xb8, - 0x27, 0xfd, 0x29, 0xd5, 0x87, 0xed, 0x6f, 0xc9, 0x02, 0x0a, 0x2d, 0xac, 0xa7, 0x72, 0x76, 0xae, 0x4b, 0x9e, 0x66, - 0xd3, 0xfd, 0x1a, 0xf6, 0xa8, 0x7b, 0xf4, 0x9a, 0x0a, 0xce, 0x2f, 0xcd, 0xe8, 0xfd, 0xd3, 0x50, 0xa8, 0x8e, 0x3a, - 0x77, 0x90, 0x75, 0x69, 0x5d, 0x72, 0x7e, 0xb3, 0x72, 0x47, 0x61, 0x7e, 0x1f, 0x82, 0x67, 0x58, 0xf7, 0xee, 0xe2, - 0xbc, 0xf7, 0x67, 0x6b, 0x8e, 0xfc, 0x98, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0xf6, 0xdb, - 0x20, 0x87, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, - 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xdb, 0x20, 0xd7, 0x5d, 0x30, 0xcd, 0x91, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x92, 0x0a, - 0xcd, 0x22, 0x6d, 0x95, 0x8c, 0x7f, 0x47, 0xda, 0x4c, 0xc9, 0x1e, 0x5b, 0x03, 0xef, 0x25, 0x28, 0x27, 0xc3, 0x14, - 0xc3, 0x77, 0x7c, 0xbd, 0xf3, 0x98, 0x7b, 0xce, 0x31, 0xdb, 0xa4, 0xec, 0x08, 0x26, 0xc9, 0xc6, 0x37, 0x14, 0x6f, - 0xf8, 0xfe, 0xb6, 0x12, 0x25, 0x80, 0x5e, 0x16, 0xfc, 0x85, 0xb4, 0xb9, 0x42, 0xb7, 0xbb, 0x77, 0x94, 0xc2, 0x2f, - 0x79, 0x79, 0x38, 0x6c, 0x53, 0x2f, 0x84, 0xce, 0x17, 0xf1, 0x3b, 0x30, 0x87, 0x31, 0xc4, 0x66, 0x04, 0x08, 0x73, - 0x7c, 0x40, 0x1d, 0xac, 0x1f, 0x01, 0x68, 0x9c, 0x40, 0x01, 0x46, 0x5f, 0x6d, 0x0b, 0xfa, 0x96, 0x17, 0x17, 0x11, - 0xa2, 0x46, 0x01, 0x26, 0x4a, 0x9a, 0xc5, 0x30, 0x1c, 0xe8, 0xfc, 0xbe, 0xb9, 0xad, 0x4b, 0x81, 0x43, 0xef, 0x58, - 0x86, 0xff, 0xfe, 0x3f, 0xd6, 0x96, 0x56, 0x95, 0xed, 0xd6, 0x38, 0xcd, 0xfc, 0x6f, 0xb7, 0x85, 0xbe, 0xff, 0x4a, - 0x28, 0x9e, 0x77, 0xbc, 0x6e, 0xbf, 0x83, 0xe8, 0x7d, 0xdd, 0xca, 0xbb, 0x52, 0xbb, 0x61, 0xa6, 0xfc, 0x21, 0xcd, - 0xe3, 0xe2, 0x61, 0x14, 0xb7, 0x8e, 0xbc, 0x49, 0x7a, 0xce, 0xf9, 0xbb, 0xaa, 0xdf, 0xf7, 0xde, 0x01, 0x19, 0xef, - 0x2b, 0x61, 0x1c, 0x31, 0x89, 0x83, 0x6f, 0x2f, 0x46, 0xd1, 0xa6, 0x84, 0x0d, 0xb9, 0x7d, 0x5a, 0x82, 0x66, 0xa6, - 0xdf, 0x47, 0x89, 0xd2, 0x9a, 0xef, 0x7f, 0x93, 0xf3, 0xfd, 0x95, 0x90, 0x37, 0x2b, 0xf9, 0xe1, 0xa3, 0x15, 0x06, - 0xbe, 0xc7, 0xe9, 0x17, 0xd1, 0x63, 0x77, 0xa5, 0x0f, 0xdf, 0x95, 0x96, 0x3e, 0xab, 0xa8, 0x7f, 0xa0, 0xa2, 0xe6, - 0x95, 0x18, 0x11, 0xf1, 0x20, 0x68, 0x67, 0xdb, 0xa5, 0x76, 0x2d, 0x41, 0xbb, 0x60, 0x53, 0xd8, 0xbf, 0x1f, 0x1d, - 0xf2, 0x7e, 0xff, 0x63, 0xee, 0xb5, 0x78, 0xdd, 0x75, 0x68, 0xca, 0x4f, 0x85, 0x87, 0x10, 0xc0, 0x5a, 0x06, 0xca, - 0x38, 0xc2, 0xa4, 0x8b, 0xbc, 0x46, 0xd9, 0x74, 0x22, 0xf0, 0x31, 0xcb, 0xae, 0x9c, 0x64, 0x1a, 0x60, 0x46, 0x35, - 0x85, 0x99, 0x00, 0x23, 0xf5, 0x11, 0xeb, 0xa6, 0xa7, 0x55, 0x68, 0xf9, 0x1a, 0x82, 0x75, 0x91, 0x65, 0x1c, 0xc5, - 0x4c, 0x00, 0xb0, 0xf9, 0x08, 0xf2, 0x15, 0x5d, 0x1d, 0x92, 0x56, 0xaa, 0xbc, 0x5f, 0x67, 0x44, 0x46, 0x93, 0x10, - 0xcd, 0x6f, 0xe1, 0x81, 0x7d, 0xdb, 0xcc, 0xa8, 0x52, 0xcf, 0xa8, 0xca, 0x67, 0x38, 0x2c, 0x85, 0x63, 0xc4, 0xff, - 0x7b, 0xaa, 0x7a, 0x44, 0xa0, 0x57, 0x65, 0x5a, 0x45, 0x45, 0x9e, 0x8b, 0x08, 0x11, 0xaa, 0xa5, 0x73, 0x38, 0xf4, - 0x63, 0xbf, 0x8f, 0x03, 0x61, 0x5e, 0xfc, 0xe9, 0xb1, 0xae, 0xfc, 0xa9, 0xc0, 0xb5, 0x92, 0x02, 0xa7, 0xa2, 0x46, - 0x88, 0x10, 0xde, 0x9f, 0xc0, 0xb3, 0x9a, 0xfa, 0x7e, 0x63, 0x99, 0xe8, 0xfe, 0x99, 0x01, 0xe5, 0x0f, 0xc8, 0xd7, - 0x95, 0x14, 0x67, 0xea, 0xe4, 0x31, 0x71, 0xc6, 0x01, 0x88, 0xf9, 0xba, 0x44, 0xa3, 0xb1, 0xff, 0x01, 0x09, 0x86, - 0xea, 0x07, 0x3b, 0xdd, 0xd4, 0xfb, 0x57, 0x26, 0x71, 0x14, 0x7d, 0xda, 0x26, 0x8f, 0x25, 0x4b, 0xa3, 0x85, 0xa3, - 0xf7, 0x88, 0x61, 0x1c, 0x4e, 0xe7, 0x63, 0x92, 0x6d, 0x4c, 0x56, 0x01, 0xa4, 0x93, 0x99, 0x3a, 0xa6, 0xd4, 0xd1, - 0x38, 0xd7, 0x0b, 0xaa, 0xd0, 0x63, 0x5d, 0xf2, 0x1c, 0xac, 0x27, 0x3f, 0x78, 0xa5, 0x3f, 0x15, 0x72, 0x0e, 0x1b, - 0x89, 0xa0, 0xf0, 0x03, 0x5c, 0x0d, 0x56, 0x0a, 0x18, 0x4c, 0x7d, 0x0b, 0x5f, 0x13, 0xcf, 0x51, 0xf0, 0x28, 0xec, - 0x62, 0x6c, 0xad, 0x7c, 0xe7, 0x93, 0x82, 0x72, 0xcf, 0x8a, 0x39, 0xaf, 0x80, 0x73, 0x19, 0x14, 0xc2, 0x74, 0x3c, - 0xcb, 0xff, 0x99, 0xe4, 0xf5, 0xc4, 0x86, 0x00, 0x19, 0xfc, 0x29, 0x71, 0x5a, 0xba, 0x43, 0x77, 0x1e, 0x7a, 0x16, - 0x71, 0xd8, 0xe8, 0xc9, 0xba, 0x2c, 0xb6, 0x29, 0xea, 0x25, 0xcc, 0x0f, 0xe4, 0xe7, 0x2d, 0xf9, 0x3e, 0x44, 0xf1, - 0x36, 0xf8, 0x35, 0x63, 0xb1, 0xc0, 0xbf, 0xfe, 0x9e, 0x31, 0x9a, 0x68, 0xc1, 0xbf, 0xb3, 0x06, 0x89, 0x8a, 0x7f, - 0xca, 0x26, 0x00, 0xeb, 0xc8, 0xd5, 0x87, 0x4f, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x15, 0xe8, 0xd4, 0xe7, - 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x9e, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4f, 0xa9, 0x1a, 0xbf, 0x65, 0x14, - 0xbf, 0x53, 0xf9, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xe9, 0x7b, 0xc3, 0x89, 0x5d, 0xf6, 0xab, 0xb7, 0x89, 0xcc, - 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x6d, 0xbf, 0xcb, 0x0d, 0xa7, 0xc4, 0xf9, 0xb9, 0x87, 0x2b, 0x36, 0xad, 0x5e, 0xd1, - 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0x73, 0xee, 0x01, 0x04, 0x33, 0xa9, 0x09, - 0x00, 0x69, 0x21, 0x2a, 0x85, 0xc8, 0x5f, 0xe1, 0xac, 0x3e, 0xe7, 0xbd, 0x4d, 0x1e, 0x13, 0x69, 0x75, 0xaf, 0xdf, - 0x4f, 0xcf, 0xd2, 0x9c, 0x82, 0x1a, 0x8e, 0xb3, 0x4e, 0xbf, 0xcf, 0x82, 0x3a, 0x91, 0xab, 0xf4, 0x1f, 0x6e, 0x90, - 0x97, 0xf1, 0x7d, 0xdd, 0xf6, 0xfc, 0x89, 0xfa, 0x7b, 0x67, 0xfd, 0x6d, 0x81, 0xe0, 0x4e, 0x8e, 0xfd, 0x64, 0x55, - 0xca, 0x13, 0xe3, 0xd2, 0xde, 0xf3, 0x9b, 0xba, 0x28, 0xb2, 0x3a, 0x5d, 0x7f, 0x90, 0x7a, 0x1a, 0xdd, 0x17, 0x7b, - 0x30, 0x06, 0xef, 0x00, 0xf0, 0x4c, 0x87, 0x06, 0x48, 0xdf, 0x33, 0xf2, 0x70, 0x9f, 0x5b, 0xf2, 0x93, 0xca, 0xda, - 0x24, 0x61, 0x45, 0xb1, 0x19, 0xc6, 0x08, 0x25, 0xe3, 0x34, 0xb6, 0x7e, 0xbf, 0xaf, 0xfe, 0xde, 0x61, 0x14, 0x15, - 0x15, 0x77, 0x8c, 0x46, 0x65, 0x55, 0x8f, 0xb6, 0x83, 0xc3, 0xe1, 0x3c, 0xb7, 0x71, 0xb4, 0xf5, 0x0a, 0xd8, 0x5b, - 0xa1, 0x52, 0xf6, 0x4a, 0x84, 0xe5, 0x87, 0x2b, 0xbf, 0xdf, 0x87, 0x7f, 0x65, 0xa4, 0x85, 0xe7, 0x4f, 0xf1, 0xd7, - 0xa2, 0x2e, 0x30, 0x3c, 0x83, 0xd6, 0x68, 0x05, 0xc1, 0x04, 0xff, 0xe8, 0x40, 0xbd, 0xb4, 0xd2, 0x3e, 0x82, 0x6e, - 0x05, 0x7a, 0x50, 0x0f, 0x7d, 0x9a, 0xb4, 0x2f, 0x24, 0xea, 0xf6, 0x56, 0xa7, 0xd1, 0x1f, 0x15, 0x5c, 0x4e, 0x61, - 0x72, 0xb8, 0xa1, 0x4f, 0xab, 0x70, 0xfb, 0x09, 0x9e, 0xfe, 0x0c, 0x94, 0x5b, 0x87, 0x43, 0x0e, 0x62, 0x0b, 0xb8, - 0x79, 0xac, 0xc2, 0xcf, 0x45, 0x29, 0x23, 0xea, 0xe3, 0x69, 0x01, 0xda, 0xbb, 0x00, 0x1d, 0xb0, 0x34, 0x88, 0x57, - 0x48, 0x9e, 0xb3, 0x11, 0xc0, 0xb2, 0x03, 0xcb, 0x59, 0xc6, 0x29, 0xcc, 0xb3, 0x7c, 0xa1, 0x56, 0xda, 0x59, 0x99, - 0x78, 0x35, 0xcb, 0xc0, 0x59, 0xe0, 0xa2, 0xf2, 0x59, 0xa6, 0x55, 0x4f, 0x55, 0x82, 0x3e, 0xaf, 0xe4, 0x04, 0x57, - 0x82, 0x93, 0x0d, 0xc8, 0x2f, 0x40, 0x92, 0xa6, 0x94, 0x35, 0xe5, 0x8b, 0x4b, 0xba, 0x21, 0xa3, 0xe7, 0xbc, 0xe7, - 0x45, 0xc3, 0xd0, 0xbf, 0xf0, 0x4a, 0x08, 0xdf, 0xc4, 0x6d, 0x1b, 0xa5, 0xb0, 0xbf, 0x09, 0x2c, 0x3e, 0x61, 0x3f, - 0x78, 0x4b, 0x7f, 0x3a, 0x0e, 0xc2, 0x21, 0x72, 0x43, 0xc5, 0x1c, 0xd8, 0xd3, 0x80, 0xc5, 0x26, 0xbe, 0xda, 0x4c, - 0xe2, 0xc1, 0xc0, 0xd7, 0x19, 0x8b, 0x59, 0x0c, 0x34, 0xc8, 0xf1, 0xe0, 0x72, 0xae, 0x4f, 0x08, 0xfd, 0x30, 0xa2, - 0x72, 0x54, 0xa0, 0x73, 0x10, 0x0d, 0x96, 0x80, 0xa7, 0xde, 0xca, 0x06, 0x49, 0xc6, 0x24, 0x93, 0xb8, 0xd6, 0x24, - 0xd5, 0xe1, 0x84, 0xd6, 0x81, 0x8e, 0xab, 0x0b, 0xe8, 0x7c, 0x5c, 0xf7, 0x3e, 0x5e, 0x0d, 0x17, 0x54, 0xfa, 0x85, - 0x18, 0x78, 0xf5, 0x74, 0x1c, 0x5c, 0xd2, 0xad, 0x70, 0xb1, 0x0a, 0xb7, 0x3f, 0xcb, 0x07, 0x8e, 0x3b, 0x2a, 0x69, - 0x08, 0x0c, 0xde, 0x1e, 0xba, 0x9b, 0x19, 0x1a, 0xea, 0xa4, 0x7d, 0x18, 0x87, 0x72, 0x88, 0x55, 0x2b, 0x2e, 0xa4, - 0x37, 0x82, 0x6f, 0x17, 0x8a, 0xb1, 0x6c, 0xec, 0xd2, 0x50, 0x14, 0xfe, 0x0a, 0x60, 0x87, 0xda, 0x5f, 0xa9, 0xe4, - 0x63, 0x64, 0x54, 0xd3, 0x40, 0xc7, 0x00, 0x2c, 0x59, 0x9a, 0x48, 0xaa, 0x48, 0x23, 0xf1, 0x47, 0x66, 0xac, 0xa3, - 0xa6, 0xeb, 0x0b, 0xa6, 0xaa, 0x45, 0xd2, 0xed, 0x4c, 0x62, 0x39, 0x91, 0xa4, 0xb6, 0xfb, 0x88, 0x18, 0x0c, 0x7c, - 0xb0, 0x11, 0xd3, 0x4c, 0x84, 0x23, 0x1e, 0x95, 0xc8, 0xa2, 0xcb, 0x6f, 0xa3, 0x4c, 0xda, 0xbe, 0xac, 0xc8, 0x16, - 0x04, 0xd3, 0x93, 0xe8, 0x83, 0x24, 0xe5, 0x54, 0x24, 0xd2, 0x8c, 0x10, 0xe0, 0xc7, 0x93, 0xf2, 0x4a, 0x7f, 0x0e, - 0x9a, 0x56, 0x82, 0x97, 0x0c, 0x92, 0x47, 0xe2, 0x67, 0x52, 0x30, 0x8b, 0xb1, 0x6a, 0x30, 0xc0, 0x72, 0xaa, 0x67, - 0x8e, 0x49, 0xfa, 0x6f, 0x9d, 0x4e, 0xd8, 0x2f, 0xbd, 0xdc, 0xd6, 0xf2, 0xa6, 0xb9, 0xf7, 0xd2, 0xab, 0x58, 0xaa, - 0x61, 0x19, 0xf4, 0x5f, 0x13, 0xed, 0x82, 0xad, 0x2d, 0x63, 0xc2, 0xaa, 0x1f, 0x40, 0xda, 0x23, 0x5d, 0x5e, 0x35, - 0xcc, 0x99, 0xe0, 0xd1, 0x85, 0x35, 0x0f, 0xa2, 0x0b, 0xe1, 0x23, 0x97, 0xdd, 0x24, 0xb9, 0x1a, 0x4f, 0xfc, 0x70, - 0x30, 0x50, 0x00, 0xb4, 0xb4, 0x4e, 0x8a, 0x41, 0xf8, 0x4c, 0xc8, 0x81, 0x34, 0x3a, 0xaa, 0x02, 0x2c, 0x96, 0xd9, - 0x55, 0x39, 0xc9, 0x06, 0x03, 0x1f, 0xc4, 0xc6, 0xc4, 0x6e, 0x68, 0x36, 0xf7, 0xd9, 0x89, 0x82, 0xac, 0x36, 0x87, - 0xad, 0x99, 0x6e, 0x81, 0x01, 0xc0, 0x20, 0x22, 0x58, 0xee, 0x73, 0x23, 0x1f, 0x51, 0xa7, 0xa7, 0x30, 0x02, 0x82, - 0x5f, 0x4e, 0x04, 0x22, 0x17, 0x09, 0xd4, 0x03, 0xcc, 0x04, 0x98, 0x51, 0xc5, 0xf0, 0x12, 0xd8, 0xc5, 0x73, 0xf3, - 0x8a, 0x41, 0xff, 0xa2, 0x49, 0x96, 0x68, 0x2a, 0x71, 0x34, 0x46, 0x4e, 0xa5, 0x31, 0x32, 0x20, 0x76, 0x71, 0xfc, - 0x7b, 0x4a, 0x8f, 0x82, 0x94, 0x7d, 0xae, 0x0c, 0x71, 0x38, 0x8a, 0xaf, 0x60, 0xd5, 0x38, 0x1c, 0x6a, 0xf3, 0x7a, - 0x3a, 0xab, 0xe7, 0x03, 0x11, 0xc0, 0x7f, 0x43, 0xc1, 0x7e, 0xd1, 0x54, 0xe4, 0x06, 0xa9, 0xf3, 0x70, 0x48, 0x41, - 0x3e, 0xd5, 0x4d, 0xfe, 0xbe, 0x72, 0xf7, 0xd3, 0xd9, 0xdc, 0x9a, 0xa3, 0x17, 0x35, 0xae, 0x5b, 0xab, 0x1b, 0x0a, - 0x89, 0xd6, 0x34, 0x29, 0xae, 0xaa, 0x49, 0x31, 0xe0, 0xb9, 0x2f, 0x54, 0x17, 0x5b, 0x23, 0x58, 0xf8, 0x73, 0x0b, - 0x84, 0xc9, 0xb8, 0x17, 0x1f, 0x2d, 0xe4, 0x94, 0x76, 0x6d, 0xb5, 0xdb, 0x56, 0x36, 0xa4, 0x68, 0x3e, 0xbc, 0x84, - 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, 0x29, 0x86, - 0x7f, 0x95, 0xee, 0xcd, 0xa9, 0x0d, 0x72, 0x00, 0xdb, 0xbd, 0x87, 0xdb, 0x31, 0x7a, 0x20, 0x83, 0x37, 0x42, 0xce, - 0x39, 0xbf, 0x9c, 0x5a, 0x33, 0x26, 0x1a, 0x16, 0xac, 0x1c, 0x46, 0x7e, 0x80, 0x8c, 0x97, 0x53, 0x60, 0x65, 0x3f, - 0x2a, 0xe2, 0xd2, 0x1f, 0x46, 0xfe, 0xc5, 0xf3, 0x20, 0xe3, 0x5e, 0x34, 0xec, 0xf8, 0x02, 0xec, 0xd5, 0x17, 0xcf, - 0x59, 0x34, 0xe0, 0xd5, 0x55, 0x3d, 0xcd, 0x82, 0x61, 0xc6, 0xa2, 0xab, 0x62, 0x08, 0x3e, 0xb4, 0x2f, 0xca, 0x41, - 0xe8, 0xfb, 0x66, 0xe7, 0xd0, 0xdd, 0x90, 0xc8, 0x23, 0xec, 0x47, 0x70, 0xdb, 0xd5, 0x12, 0x33, 0x98, 0x6c, 0xee, - 0x22, 0x66, 0xb0, 0xe5, 0x2f, 0x9e, 0x1b, 0x2e, 0xa1, 0xea, 0x85, 0xd4, 0x6c, 0x14, 0x68, 0x4e, 0xae, 0xd0, 0x9c, - 0xac, 0x84, 0x5a, 0xf2, 0x49, 0x85, 0x13, 0x76, 0x3e, 0xc9, 0x95, 0xdd, 0x68, 0x8c, 0x81, 0x8b, 0xf6, 0xdc, 0x16, - 0x46, 0x66, 0x3a, 0x4b, 0xd1, 0x80, 0x85, 0x67, 0xe2, 0x94, 0xc6, 0x80, 0xf6, 0xe5, 0xc0, 0xd2, 0x86, 0xfc, 0x28, - 0x67, 0x06, 0xda, 0x86, 0x94, 0x46, 0xcd, 0xc0, 0x9f, 0xa9, 0x09, 0xf3, 0x2b, 0x58, 0x89, 0x20, 0xaa, 0x0b, 0x30, - 0x49, 0x72, 0x32, 0x1a, 0x29, 0x2b, 0x91, 0x9c, 0x03, 0xde, 0x47, 0xf0, 0x64, 0x11, 0xdb, 0xda, 0x9f, 0xd2, 0xff, - 0xea, 0xf0, 0xb9, 0xf4, 0x9f, 0x09, 0x60, 0x21, 0x97, 0x06, 0x91, 0x81, 0xc2, 0x21, 0x35, 0x95, 0x88, 0x13, 0xc7, - 0x33, 0xf0, 0x0d, 0x5c, 0xa0, 0x29, 0xa0, 0x3f, 0xa8, 0x19, 0x45, 0x64, 0xe1, 0xaf, 0x9e, 0xdd, 0xd4, 0x8d, 0x9e, - 0x67, 0xce, 0x6b, 0xd0, 0xcc, 0x40, 0x48, 0x8f, 0x53, 0xf5, 0x36, 0x24, 0x3a, 0x2f, 0x2f, 0xf5, 0xcb, 0x84, 0x48, - 0x56, 0x44, 0x9e, 0xbe, 0xcf, 0xc1, 0x3c, 0xa2, 0x08, 0x1d, 0x5c, 0x99, 0x87, 0xc3, 0xb9, 0xa0, 0xf0, 0x1d, 0xe5, - 0xf9, 0x80, 0xd3, 0x2c, 0x4a, 0x40, 0x1b, 0xc8, 0x72, 0x53, 0xe6, 0x3a, 0x69, 0x99, 0xba, 0xf7, 0x60, 0x25, 0xa8, - 0xd0, 0xcd, 0x29, 0x28, 0x94, 0x91, 0xa0, 0x94, 0x56, 0x83, 0x50, 0xaa, 0xc3, 0x22, 0x88, 0x1c, 0xb2, 0x10, 0x70, - 0x33, 0x15, 0x8d, 0x96, 0x34, 0x3c, 0xc2, 0xb9, 0x81, 0x42, 0x00, 0x12, 0x7b, 0xaa, 0x28, 0xe3, 0x72, 0x08, 0xf8, - 0x28, 0xe1, 0x10, 0x67, 0x4d, 0xda, 0xf2, 0x1c, 0xc4, 0xb1, 0x5c, 0xf2, 0x75, 0x85, 0x60, 0x10, 0xa1, 0xcf, 0x90, - 0x3f, 0x59, 0xce, 0xbf, 0x5b, 0x87, 0x69, 0x47, 0xf8, 0xb0, 0xab, 0x2d, 0xb8, 0x98, 0xdd, 0xce, 0x27, 0x10, 0xdf, - 0x72, 0x3b, 0x3f, 0xc6, 0x10, 0x59, 0xf8, 0x83, 0xbb, 0xa1, 0xe4, 0x8a, 0x42, 0x97, 0xf5, 0x88, 0x14, 0xd9, 0xd3, - 0x35, 0x47, 0x10, 0x1c, 0x68, 0xd5, 0x20, 0x43, 0x23, 0xf1, 0xc5, 0x73, 0xc8, 0x1a, 0xac, 0xf9, 0xe7, 0x8a, 0x9c, - 0xd5, 0xfd, 0xc9, 0x06, 0xaa, 0x49, 0x26, 0x6b, 0x45, 0xe5, 0xfc, 0xf5, 0xaa, 0x2c, 0x4f, 0x56, 0x65, 0xb8, 0x1a, - 0x74, 0x55, 0x65, 0xc9, 0x91, 0xda, 0x00, 0xad, 0xe9, 0x0a, 0x31, 0x14, 0xb2, 0x06, 0x4b, 0xab, 0x2a, 0x6b, 0xea, - 0x13, 0x08, 0xf4, 0x01, 0x96, 0x51, 0xb3, 0x9f, 0x0e, 0xff, 0x15, 0xfc, 0x4b, 0x85, 0x2c, 0xd5, 0x69, 0x9d, 0x89, - 0x5f, 0x83, 0x25, 0xc3, 0x3f, 0x7e, 0x0b, 0xd6, 0x80, 0x25, 0x40, 0x96, 0xbb, 0x8d, 0x8d, 0xd6, 0x2b, 0xaf, 0x10, - 0x5f, 0x6a, 0x7d, 0xd1, 0x6f, 0xdd, 0x26, 0x6a, 0x05, 0x18, 0xa1, 0xd0, 0x22, 0xc0, 0x56, 0x0f, 0xdc, 0x53, 0xf0, - 0x03, 0x31, 0x9c, 0x6b, 0xd2, 0x9a, 0x3a, 0xe1, 0x75, 0x36, 0x8e, 0x44, 0x54, 0x6f, 0xe1, 0xe2, 0x5e, 0x6f, 0x2d, - 0xfe, 0x46, 0x05, 0x02, 0x20, 0x8b, 0x29, 0xd6, 0xce, 0x1b, 0xd2, 0x2b, 0xc3, 0x4e, 0x42, 0xef, 0x0d, 0x3b, 0x81, - 0xbc, 0x38, 0xec, 0x14, 0xba, 0x44, 0xdb, 0x29, 0x52, 0x13, 0x6d, 0x27, 0x2d, 0x56, 0x61, 0x09, 0xc1, 0xaf, 0xda, - 0x5b, 0x47, 0xd9, 0xbe, 0xc8, 0x12, 0xa6, 0x2d, 0x60, 0x94, 0x5b, 0xf5, 0x99, 0x53, 0xc4, 0x4a, 0xd9, 0x3b, 0x9d, - 0x54, 0xb9, 0x8b, 0x7c, 0x6a, 0x35, 0x45, 0x26, 0x7f, 0x7f, 0xdc, 0x22, 0xf9, 0xe4, 0xe7, 0x76, 0xc3, 0x64, 0xfa, - 0xc7, 0xa3, 0x2f, 0xa0, 0x2b, 0xb2, 0xd3, 0x27, 0x10, 0x90, 0xa9, 0xa0, 0x5a, 0xdd, 0x2a, 0xa6, 0x79, 0xbb, 0xca, - 0x6e, 0x2f, 0x94, 0x18, 0x4e, 0x67, 0x27, 0xe1, 0xd1, 0x66, 0xc8, 0xc0, 0x21, 0x08, 0x14, 0x42, 0x45, 0x31, 0x3c, - 0x02, 0xb5, 0x46, 0xf2, 0x01, 0x7e, 0xb4, 0x3b, 0x15, 0x44, 0x6a, 0x37, 0x15, 0x37, 0x4e, 0x6e, 0xba, 0x5e, 0x0a, - 0xd4, 0x3a, 0x25, 0x2b, 0x80, 0x12, 0xa2, 0xfe, 0x24, 0xb6, 0xf5, 0x2b, 0xb8, 0x62, 0xf3, 0x7d, 0xa3, 0xe8, 0xc9, - 0xf5, 0x29, 0xea, 0x56, 0x5c, 0x9d, 0xa6, 0xad, 0xe6, 0xd8, 0x71, 0x86, 0x1c, 0x3c, 0x2b, 0x08, 0xb6, 0xa3, 0x12, - 0xe5, 0x75, 0xbb, 0xe9, 0x98, 0xd8, 0xea, 0x9f, 0x45, 0xb5, 0xb9, 0x83, 0x8a, 0x88, 0xf8, 0x28, 0xbb, 0x79, 0xd2, - 0x7e, 0x07, 0x7b, 0xac, 0xd5, 0x20, 0xb2, 0xcf, 0xe0, 0x2a, 0xd7, 0x69, 0x91, 0xdb, 0x32, 0x38, 0xff, 0xf0, 0x6a, - 0x57, 0x61, 0x93, 0x63, 0x5d, 0x5d, 0xcd, 0x54, 0x27, 0x15, 0x1b, 0x18, 0x6b, 0x5a, 0x4b, 0x35, 0x8f, 0x21, 0xe9, - 0xae, 0x2c, 0xce, 0xaa, 0xa4, 0x9b, 0x9e, 0x1b, 0x67, 0x0a, 0x31, 0x70, 0xb6, 0x1a, 0x2d, 0x67, 0x18, 0xa2, 0xeb, - 0xc3, 0x2c, 0xf1, 0x5b, 0x3d, 0xe5, 0x3e, 0x0f, 0xb7, 0x7e, 0x57, 0x2f, 0x38, 0x99, 0xec, 0x27, 0xc7, 0xb9, 0xdb, - 0x45, 0xda, 0x4f, 0x7c, 0x1b, 0xe6, 0x5f, 0xdf, 0x20, 0xee, 0x44, 0xfd, 0xcf, 0x0a, 0x80, 0x06, 0x37, 0x79, 0x2c, - 0x51, 0xea, 0xf7, 0xaa, 0xfa, 0x41, 0xcd, 0x54, 0x4d, 0x03, 0xc1, 0x9c, 0x4a, 0x01, 0x7f, 0xb8, 0x5d, 0xb8, 0xe2, - 0x11, 0x37, 0x2c, 0x8c, 0x7f, 0x7a, 0x35, 0x3b, 0x15, 0x54, 0x06, 0x6e, 0xc6, 0x7f, 0x7a, 0x82, 0x9d, 0xc2, 0x5a, - 0x01, 0x59, 0xe1, 0x4f, 0x2f, 0x7f, 0xe4, 0xfd, 0x8a, 0xff, 0xe9, 0x55, 0x8f, 0xbc, 0x8f, 0x38, 0x2f, 0x7f, 0x22, - 0xa9, 0x13, 0xa2, 0xba, 0xfc, 0x49, 0x98, 0x62, 0xab, 0x34, 0x7f, 0x4d, 0x0a, 0x9f, 0xe0, 0x33, 0xf0, 0x1d, 0xae, - 0xc2, 0xad, 0xf9, 0x0d, 0x1e, 0x3b, 0x16, 0xdb, 0x2e, 0xf5, 0x05, 0x94, 0x23, 0xb0, 0x88, 0xdc, 0x7e, 0xbb, 0xb2, - 0x5f, 0x2d, 0x8c, 0x32, 0xc6, 0xee, 0x4b, 0x56, 0xa2, 0x74, 0xd6, 0xef, 0x17, 0x52, 0x30, 0xb2, 0x0b, 0x6b, 0xb4, - 0x47, 0xa9, 0x7a, 0xf5, 0x3a, 0xac, 0xa3, 0x24, 0xcd, 0xef, 0x64, 0xf4, 0x91, 0x0c, 0x3b, 0xd2, 0x57, 0x52, 0xa2, - 0xbd, 0x56, 0x61, 0x39, 0x9a, 0xfd, 0xba, 0xe4, 0x40, 0x79, 0xdd, 0x0a, 0xca, 0x57, 0x4d, 0x00, 0xbd, 0x52, 0xed, - 0x33, 0xd0, 0x0a, 0x0a, 0x4b, 0xe5, 0xc1, 0x4a, 0x9c, 0x8b, 0x3e, 0x2b, 0x0e, 0x07, 0x75, 0x31, 0x24, 0x14, 0xa8, - 0x12, 0x27, 0xa1, 0x11, 0xcf, 0xe1, 0x42, 0x28, 0x5e, 0xe4, 0x18, 0x5b, 0x91, 0x03, 0x07, 0x32, 0xfc, 0x80, 0xc0, - 0x7b, 0xd9, 0xbf, 0x82, 0xc1, 0x30, 0xc1, 0x8d, 0x8c, 0x3a, 0x39, 0x67, 0x7f, 0x62, 0x60, 0x06, 0xf5, 0xa4, 0x76, - 0x9f, 0xdd, 0xab, 0xc0, 0x5e, 0x38, 0x03, 0xda, 0xbb, 0x31, 0xfa, 0x59, 0x15, 0x6b, 0x27, 0xfd, 0x53, 0xb1, 0x86, - 0x64, 0x3a, 0x2c, 0x8e, 0xb6, 0x69, 0x78, 0x24, 0x4f, 0x8e, 0xe3, 0x4d, 0xff, 0x70, 0x18, 0xe3, 0xc7, 0x51, 0x7e, - 0x6d, 0x01, 0xaf, 0xe2, 0x16, 0xd2, 0x58, 0xa4, 0xe8, 0x1d, 0x88, 0x39, 0x14, 0xbd, 0x64, 0xbf, 0x65, 0xbc, 0x9c, - 0x08, 0x4a, 0x49, 0x62, 0xc3, 0x3b, 0xd2, 0xd3, 0xb4, 0x1e, 0x6d, 0x65, 0xc0, 0x7e, 0x3d, 0xda, 0xd1, 0x5f, 0xa0, - 0x78, 0xb4, 0xf0, 0x97, 0xf4, 0x77, 0x71, 0x37, 0xf7, 0x9c, 0x6f, 0x1a, 0xdf, 0x11, 0x17, 0x28, 0xd6, 0xec, 0xfe, - 0x9a, 0x96, 0xce, 0x3a, 0x10, 0x1c, 0xf0, 0x16, 0xbb, 0x68, 0xdf, 0x6f, 0x5c, 0xa7, 0xa7, 0xfd, 0xb7, 0x6e, 0x8d, - 0xf2, 0xbd, 0x7f, 0x4a, 0x94, 0x83, 0xfd, 0x6b, 0x17, 0xcd, 0xdf, 0x7e, 0xca, 0x90, 0x54, 0x68, 0x6e, 0xb0, 0x9d, - 0x6c, 0x11, 0xd6, 0xc6, 0x38, 0xa8, 0xd8, 0x5d, 0x19, 0x46, 0xc0, 0xa0, 0x8e, 0xfd, 0x8f, 0x3e, 0x9b, 0x36, 0x64, - 0x1f, 0x00, 0x2a, 0x57, 0x21, 0x60, 0x0f, 0xc0, 0x89, 0x46, 0xb8, 0x01, 0x6e, 0x35, 0x5a, 0xd2, 0x41, 0xdd, 0x16, - 0x0c, 0x44, 0x4b, 0xd8, 0xc8, 0xdb, 0xae, 0x4e, 0x5f, 0x11, 0x3e, 0xd4, 0x4e, 0x4a, 0x87, 0xf2, 0x57, 0xcf, 0xd9, - 0xff, 0xec, 0xb0, 0xa6, 0xa6, 0xdc, 0x00, 0x66, 0xce, 0x4a, 0xe4, 0x15, 0x42, 0xa7, 0xc8, 0xef, 0x55, 0x5d, 0x89, - 0xe1, 0xb2, 0x16, 0x65, 0x67, 0x76, 0xeb, 0x44, 0xef, 0x9c, 0x82, 0x5a, 0x2a, 0x1b, 0xe4, 0x24, 0xd5, 0xe6, 0x23, - 0x6b, 0x05, 0x25, 0xea, 0x1a, 0x05, 0x8e, 0x4f, 0xb9, 0x76, 0xff, 0xef, 0x9c, 0x09, 0x6a, 0xb6, 0x51, 0xdd, 0x5f, - 0xeb, 0xa7, 0xaa, 0x26, 0xb1, 0x00, 0x97, 0x93, 0x34, 0xef, 0x78, 0x84, 0xd5, 0x3f, 0x4e, 0x96, 0x22, 0xd0, 0xeb, - 0x88, 0x76, 0x25, 0x20, 0x41, 0x3b, 0x39, 0x0b, 0x15, 0x81, 0x02, 0x7d, 0xfd, 0xfb, 0x4d, 0x9a, 0xc5, 0x72, 0x35, - 0xdb, 0xc3, 0x44, 0x59, 0xac, 0x87, 0x08, 0x72, 0x66, 0xea, 0x60, 0xbf, 0xa7, 0x19, 0xcd, 0xc2, 0x2b, 0x53, 0x82, - 0x4b, 0x71, 0x15, 0x15, 0x39, 0xf8, 0x1c, 0xe2, 0x0b, 0x9f, 0x0a, 0xb9, 0x41, 0x44, 0xd3, 0xef, 0x25, 0xaa, 0x1d, - 0x29, 0x90, 0x43, 0xc9, 0x4f, 0x88, 0xbf, 0x64, 0x6d, 0x8c, 0xfb, 0xa5, 0x53, 0xed, 0x57, 0x0a, 0xc1, 0xfd, 0x67, - 0x5b, 0x6c, 0x54, 0x79, 0xa2, 0x47, 0x9f, 0x62, 0xfd, 0x4f, 0x16, 0x50, 0xaa, 0xfb, 0x36, 0x38, 0x15, 0x8f, 0xc2, - 0x4d, 0x5d, 0xdc, 0x20, 0xb4, 0x40, 0x39, 0xaa, 0x8a, 0x4d, 0x19, 0x11, 0x27, 0xec, 0xa6, 0x2e, 0x7a, 0x9a, 0x03, - 0x9d, 0x3a, 0x2c, 0x4d, 0xe4, 0x89, 0xd0, 0x6e, 0x41, 0xf7, 0x34, 0xc7, 0x4a, 0xbc, 0x94, 0xa5, 0x83, 0xac, 0x13, - 0x69, 0x42, 0xe5, 0xae, 0xae, 0x3a, 0x2a, 0x95, 0xba, 0xe1, 0x4d, 0xaa, 0x19, 0x7f, 0x97, 0xe6, 0x4f, 0x2c, 0xfb, - 0x4d, 0xeb, 0xb7, 0x5a, 0xed, 0x8d, 0xd5, 0xa3, 0x92, 0x35, 0xc7, 0xd9, 0x84, 0xa4, 0xf4, 0x09, 0xdb, 0xcd, 0xa4, - 0x6b, 0x1d, 0x78, 0x12, 0x5c, 0x0e, 0x3d, 0x01, 0x15, 0x83, 0x26, 0xde, 0xee, 0x02, 0xf5, 0x08, 0x3c, 0x03, 0xe5, - 0x13, 0xb5, 0x0e, 0xf8, 0x79, 0xad, 0xe5, 0x29, 0x23, 0x0c, 0xab, 0x9d, 0x45, 0xcb, 0xc1, 0x79, 0xa7, 0x08, 0x5c, - 0xbb, 0x12, 0x78, 0x3e, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, 0xa7, - 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, 0x36, - 0x9f, 0x7d, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, 0xcf, - 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, 0x76, - 0x7c, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, 0x88, - 0xc2, 0x2c, 0xfb, 0xb1, 0x28, 0xfe, 0xa8, 0xf4, 0x1d, 0x81, 0x8e, 0xee, 0xbc, 0xa8, 0xd3, 0xe5, 0xee, 0x03, 0x61, - 0x3c, 0x79, 0xf5, 0x11, 0xd1, 0xad, 0xef, 0x33, 0xf7, 0x2b, 0xc0, 0x8d, 0xe0, 0x0e, 0xa2, 0xbd, 0x5b, 0xea, 0x93, - 0x5a, 0x7d, 0xad, 0xd7, 0xce, 0xd3, 0xf3, 0x9b, 0xce, 0xed, 0x77, 0xdf, 0x1c, 0x6d, 0xbd, 0xc7, 0x85, 0xb5, 0xb2, - 0xf4, 0x54, 0x15, 0xec, 0xcd, 0xf2, 0x54, 0x15, 0x4c, 0x1e, 0x78, 0xcd, 0x7e, 0x41, 0x83, 0x2b, 0x1d, 0x6d, 0xbc, - 0x27, 0x6a, 0xe0, 0x16, 0x85, 0xa5, 0xc3, 0x2f, 0xb9, 0x99, 0xbc, 0xc2, 0xfd, 0xa5, 0x22, 0x17, 0xfb, 0xce, 0x19, - 0xdd, 0x99, 0x59, 0xf7, 0xaa, 0xc2, 0xd5, 0x82, 0x5c, 0x1d, 0xd8, 0x5a, 0x76, 0x71, 0xb8, 0x61, 0x11, 0x05, 0x08, - 0xc4, 0xf4, 0x4a, 0xad, 0xfd, 0x11, 0x0d, 0x42, 0x3e, 0x18, 0xf8, 0x05, 0x06, 0xab, 0x02, 0x85, 0x0f, 0x14, 0xc9, - 0x5f, 0x7b, 0x02, 0x76, 0xf1, 0x0c, 0xd0, 0xad, 0xd8, 0xac, 0x18, 0x21, 0x42, 0x26, 0xcb, 0x59, 0x4d, 0x67, 0x90, - 0x4f, 0x7d, 0xf1, 0x8d, 0xad, 0x3a, 0x9d, 0xb7, 0x35, 0x55, 0x4e, 0x1d, 0x0a, 0xdd, 0xdd, 0xd4, 0x9d, 0x5b, 0x17, - 0x79, 0xea, 0x10, 0x72, 0xa5, 0x62, 0x25, 0xa6, 0xa1, 0xe6, 0x49, 0x9a, 0x51, 0x7f, 0xb1, 0xf7, 0x7b, 0x8d, 0xc2, - 0x29, 0x7f, 0x3a, 0x06, 0x55, 0xb8, 0xaa, 0x21, 0x8e, 0xa5, 0x2a, 0x1e, 0xd9, 0x20, 0xd0, 0xbc, 0xba, 0x55, 0x49, - 0x13, 0x32, 0xb9, 0x11, 0x3e, 0x35, 0x29, 0xe5, 0x69, 0xda, 0xa4, 0x95, 0x22, 0x75, 0xf0, 0x41, 0x9d, 0x6a, 0x3c, - 0x37, 0xab, 0x17, 0x00, 0x66, 0x9c, 0x5f, 0xf1, 0x4b, 0xc5, 0x65, 0xd4, 0x56, 0x66, 0xd2, 0xfe, 0xe4, 0x68, 0x6c, - 0xd4, 0xe5, 0xb4, 0x51, 0x46, 0x58, 0x29, 0xcd, 0x49, 0xb1, 0x1c, 0xcf, 0x3f, 0x60, 0xb0, 0xe6, 0x09, 0xec, 0x60, - 0xa2, 0x52, 0xde, 0x47, 0x40, 0x7c, 0x9d, 0xa4, 0x77, 0x09, 0xa4, 0x48, 0xff, 0xd2, 0x25, 0x77, 0x19, 0x1b, 0x88, - 0x31, 0x2b, 0x66, 0x46, 0xff, 0x83, 0xbb, 0xa4, 0x3f, 0x09, 0x01, 0x70, 0x13, 0x4d, 0xa1, 0x53, 0xe7, 0xc9, 0x45, - 0x1e, 0x2c, 0x2f, 0x3c, 0xb4, 0x62, 0xc4, 0x83, 0xbf, 0xbe, 0x08, 0x11, 0xc4, 0x1c, 0x53, 0x3c, 0xfd, 0xc2, 0xe8, - 0x2f, 0xc1, 0x25, 0x46, 0x10, 0xba, 0x7b, 0xe7, 0x30, 0x84, 0x9b, 0x3d, 0xc8, 0xa0, 0xfe, 0x50, 0x87, 0x44, 0x0d, - 0x7f, 0xac, 0x3c, 0xe8, 0xff, 0x3a, 0x13, 0x96, 0xda, 0x4f, 0x4f, 0x07, 0x50, 0xc1, 0xfb, 0x8a, 0xb7, 0x11, 0xf1, - 0x7d, 0xe2, 0x67, 0xf1, 0x60, 0xf3, 0x6c, 0x03, 0xd6, 0xba, 0x27, 0xb9, 0xb1, 0xae, 0x12, 0x36, 0x10, 0xf0, 0x35, - 0x8a, 0xda, 0xf3, 0xda, 0xed, 0x1e, 0xfc, 0xd5, 0xbf, 0x08, 0x19, 0x30, 0x71, 0xfa, 0x3e, 0x73, 0xb2, 0x46, 0x17, - 0x99, 0x4c, 0x1f, 0x3a, 0xe9, 0x1b, 0x9d, 0xee, 0x3b, 0xe1, 0x1f, 0x15, 0xb3, 0xf8, 0x70, 0x4b, 0x5f, 0x69, 0x52, - 0xdc, 0x01, 0x2b, 0x9b, 0x47, 0x05, 0xa1, 0xce, 0x45, 0xf4, 0x95, 0x29, 0xdf, 0x12, 0x6a, 0xf6, 0x8d, 0x25, 0xa5, - 0x74, 0xaf, 0xa1, 0x37, 0x69, 0xad, 0xdf, 0x46, 0x09, 0xc6, 0x44, 0xc7, 0x93, 0x97, 0xf1, 0x58, 0x79, 0x1f, 0x8f, - 0x1b, 0xa9, 0x90, 0x07, 0x20, 0x02, 0x15, 0xe3, 0x4f, 0x57, 0x9e, 0x9c, 0xf4, 0xc2, 0x78, 0x15, 0x4a, 0x41, 0x61, - 0x40, 0x57, 0x20, 0x05, 0x3c, 0x6a, 0x4f, 0x74, 0x16, 0x76, 0x09, 0xf7, 0xe8, 0x26, 0x60, 0xac, 0xcf, 0x3f, 0x02, - 0x9a, 0xbb, 0x70, 0x87, 0x17, 0x03, 0xd4, 0xa6, 0x5e, 0xdd, 0x7d, 0x5c, 0xab, 0x73, 0x38, 0x04, 0x07, 0xab, 0x41, - 0x04, 0xa7, 0xf3, 0xa9, 0xa3, 0x59, 0x16, 0xa0, 0x72, 0xb2, 0xdc, 0xc8, 0x9b, 0x47, 0x8b, 0x5e, 0xdd, 0xf7, 0x96, - 0x69, 0x59, 0xd5, 0x41, 0xc6, 0xb2, 0xb0, 0x02, 0x5c, 0x1d, 0x5a, 0x3f, 0x08, 0x97, 0x85, 0xf3, 0x07, 0x42, 0x10, - 0xbb, 0x57, 0xdb, 0x92, 0xe7, 0x6a, 0x0e, 0x3f, 0x7b, 0xce, 0xd6, 0x5c, 0xa2, 0x4e, 0x3a, 0x13, 0x01, 0x88, 0x3d, - 0x35, 0xab, 0xe8, 0x1a, 0x48, 0xea, 0x34, 0xab, 0xe8, 0x9a, 0x9a, 0x6d, 0x8c, 0x03, 0xf9, 0x68, 0x95, 0x02, 0xf6, - 0xdd, 0x74, 0x1c, 0xac, 0x9e, 0xc5, 0xf2, 0x3a, 0x74, 0xf7, 0x6c, 0xa3, 0x7c, 0x06, 0x75, 0xab, 0x8d, 0x31, 0xb1, - 0xdd, 0x7c, 0x39, 0xd7, 0x6f, 0x07, 0x4b, 0xdf, 0x0e, 0x9a, 0x73, 0xca, 0xbe, 0xd3, 0x65, 0xaf, 0xec, 0xb2, 0xa9, - 0xe7, 0x8e, 0x8a, 0x56, 0x63, 0x40, 0x6f, 0x60, 0xc1, 0xfa, 0x5c, 0xa4, 0xd9, 0xaa, 0x54, 0x25, 0xe0, 0x85, 0xb1, - 0x62, 0x77, 0x7e, 0x23, 0x33, 0x24, 0x61, 0x1e, 0x67, 0xe2, 0x9a, 0xee, 0xb5, 0x30, 0x39, 0x8e, 0x45, 0x32, 0x25, - 0x74, 0x4a, 0x77, 0xb6, 0xa1, 0x73, 0x15, 0x46, 0x11, 0xad, 0x95, 0x54, 0x1a, 0x09, 0x4c, 0xcd, 0x00, 0x25, 0x73, - 0x05, 0x4e, 0xe9, 0x72, 0xff, 0x3b, 0x12, 0xe3, 0xcc, 0x17, 0x25, 0x33, 0xa0, 0x5b, 0x7e, 0x5d, 0xac, 0x5b, 0x29, - 0x32, 0xc2, 0xbc, 0x39, 0x6e, 0xaf, 0xeb, 0x43, 0x20, 0x57, 0xcb, 0x1e, 0x45, 0xe3, 0xa0, 0xd0, 0xe1, 0x52, 0x25, - 0xc0, 0xbe, 0x48, 0xfc, 0x8c, 0xb0, 0xa5, 0x3d, 0x90, 0xdb, 0xa3, 0x33, 0x61, 0xce, 0x39, 0x29, 0xcb, 0xce, 0xa5, - 0x19, 0x5c, 0x4e, 0x5c, 0x09, 0x2e, 0xd2, 0xdb, 0xf6, 0x34, 0x69, 0x69, 0xfb, 0xd8, 0x70, 0x8e, 0x86, 0xb6, 0x41, - 0x77, 0xec, 0x0f, 0xcd, 0xc5, 0x22, 0xb6, 0x2e, 0x16, 0xc3, 0xce, 0xec, 0x47, 0x8b, 0x05, 0xc8, 0x01, 0xe0, 0xa8, - 0xdb, 0xf0, 0x31, 0x5b, 0x02, 0xa7, 0xd5, 0x34, 0x9b, 0x7a, 0x1b, 0x5e, 0x3d, 0x53, 0x3d, 0xbd, 0xe4, 0xf9, 0x33, - 0x61, 0xc6, 0x62, 0xc3, 0xf3, 0x67, 0xd6, 0x91, 0x53, 0x3d, 0x13, 0x4a, 0xb4, 0x2e, 0xa0, 0x19, 0x78, 0x4d, 0x01, - 0x23, 0x96, 0x4c, 0xa6, 0x54, 0x91, 0xc7, 0xbd, 0xe9, 0x46, 0x0d, 0x5e, 0x50, 0x38, 0x04, 0x52, 0x3a, 0xfd, 0xe2, - 0x39, 0xd3, 0xef, 0x5d, 0x3c, 0xef, 0x90, 0xb5, 0x0d, 0xd3, 0xe5, 0x66, 0x98, 0x0c, 0x4a, 0xff, 0x99, 0x99, 0x18, - 0x17, 0xd6, 0x24, 0x01, 0xc4, 0xbf, 0xb1, 0xdf, 0x21, 0x85, 0x9b, 0xf7, 0x97, 0xc3, 0xf8, 0x91, 0xf7, 0x63, 0x64, - 0x4f, 0xd2, 0x0c, 0xb1, 0x66, 0x52, 0x21, 0x77, 0x5f, 0xad, 0x7f, 0x4c, 0xec, 0x26, 0x7b, 0x60, 0x01, 0x88, 0xad, - 0x69, 0xab, 0x5b, 0xde, 0xef, 0x7b, 0xa6, 0x08, 0xf0, 0x83, 0xf2, 0x8f, 0xee, 0x0c, 0xc9, 0xa0, 0xec, 0xba, 0x21, - 0xc4, 0x83, 0xb2, 0x69, 0xda, 0xeb, 0x6d, 0xef, 0xcc, 0x63, 0x75, 0x9d, 0x76, 0x16, 0x57, 0x8b, 0x0c, 0xd2, 0xea, - 0x43, 0x76, 0x9c, 0xd9, 0x67, 0x47, 0x4b, 0xa5, 0xfb, 0x7d, 0x88, 0x88, 0x3b, 0xca, 0xda, 0x7e, 0xbb, 0x05, 0xd7, - 0x70, 0x34, 0x08, 0x5d, 0xd9, 0xdb, 0x65, 0xb4, 0x71, 0x21, 0x8e, 0x7b, 0xa6, 0xf3, 0x05, 0x5f, 0x1e, 0xa5, 0x9d, - 0x07, 0xa7, 0x7a, 0xa2, 0xcf, 0x4d, 0x77, 0x95, 0xc9, 0xb5, 0x0e, 0xab, 0x31, 0xa8, 0xcd, 0xc2, 0x16, 0xee, 0xc2, - 0x36, 0x3a, 0x68, 0xed, 0xcb, 0x82, 0x7f, 0xca, 0x00, 0x7c, 0xe9, 0xd9, 0xb2, 0xed, 0x35, 0x69, 0xf5, 0x46, 0x46, - 0x21, 0xb6, 0xb4, 0xbd, 0xfa, 0x74, 0x94, 0x8f, 0x9b, 0x13, 0x8a, 0x0b, 0x39, 0xca, 0x8f, 0x5e, 0x43, 0xd4, 0xb5, - 0xae, 0xe3, 0x62, 0xd1, 0xe1, 0xc6, 0x55, 0xb7, 0xdd, 0xb8, 0x7e, 0x40, 0xbc, 0x35, 0xda, 0xa4, 0x50, 0x2b, 0x63, - 0x47, 0xf0, 0xb2, 0x7c, 0x38, 0x64, 0x62, 0x38, 0x94, 0x90, 0xa9, 0x8f, 0xdd, 0x1b, 0x9a, 0xf6, 0xf9, 0x69, 0xeb, - 0x47, 0x2c, 0x35, 0x8e, 0x62, 0xc3, 0x3b, 0x7d, 0xe7, 0xb1, 0x35, 0xae, 0xe4, 0xcb, 0x60, 0xb6, 0x2b, 0xa8, 0xb6, - 0xc6, 0x1b, 0xf6, 0x72, 0xfe, 0x7d, 0x25, 0x95, 0xfc, 0xed, 0xcf, 0x70, 0x0d, 0x6f, 0x6d, 0xe9, 0xa0, 0xa9, 0x66, - 0x39, 0xcb, 0xf5, 0xbd, 0xe0, 0xf8, 0xe3, 0xee, 0x15, 0xc1, 0xe0, 0xf7, 0x74, 0x14, 0xe4, 0x62, 0xa9, 0xd6, 0x80, - 0x82, 0x74, 0x64, 0xc7, 0x54, 0x16, 0x18, 0x06, 0xf0, 0x86, 0x0c, 0x90, 0xc7, 0x14, 0xee, 0x86, 0x0a, 0x2f, 0xfc, - 0xa5, 0x22, 0xbb, 0x04, 0xb6, 0x35, 0xe3, 0x63, 0x86, 0x3b, 0x08, 0xf9, 0x47, 0xb0, 0x3b, 0xb6, 0x62, 0xb7, 0x6c, - 0xc1, 0x90, 0x6c, 0x1c, 0x87, 0x31, 0xe6, 0xe3, 0x49, 0x7c, 0x25, 0x26, 0xf1, 0x80, 0x47, 0xe8, 0x18, 0xb1, 0xe6, - 0xf5, 0x2c, 0x96, 0x03, 0xc8, 0xee, 0xb8, 0xd2, 0x01, 0x21, 0x34, 0x36, 0xb4, 0xe4, 0x4d, 0x61, 0x70, 0xb1, 0x63, - 0x9f, 0x91, 0x48, 0xc6, 0x21, 0x58, 0xb4, 0xaa, 0x81, 0x85, 0x89, 0xdd, 0xf2, 0x62, 0xb6, 0x9a, 0xe3, 0x3f, 0x87, - 0x03, 0x02, 0x60, 0x07, 0xfb, 0x86, 0xdd, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x77, 0x96, 0xa7, 0x0b, 0xbb, 0xe7, 0xd7, - 0x7c, 0xcc, 0xce, 0x7f, 0xf0, 0x20, 0x72, 0xf6, 0xfc, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xdb, 0xd4, 0xab, 0xd8, 0x2d, - 0x51, 0x10, 0xde, 0x82, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0x5e, 0xf3, 0x05, 0xc6, 0x8a, 0x9d, 0xa5, 0x4b, 0x0f, 0x33, - 0x42, 0xed, 0xe9, 0x7c, 0x59, 0xab, 0x49, 0xb8, 0xb9, 0x5a, 0x4e, 0x06, 0x83, 0x8d, 0xbf, 0xe3, 0x6b, 0xe0, 0x83, - 0x39, 0xff, 0xc1, 0xdb, 0x51, 0xb9, 0xf0, 0x9f, 0xd7, 0x59, 0xf2, 0xce, 0x67, 0xd7, 0x03, 0xbe, 0x00, 0xbc, 0x25, - 0x74, 0xe0, 0xba, 0xf7, 0x99, 0xc4, 0x6b, 0xbb, 0xd6, 0xd7, 0x08, 0x24, 0xf2, 0x05, 0x60, 0xc4, 0xc4, 0xfc, 0xbe, - 0x86, 0x08, 0x8c, 0x04, 0x7c, 0x5b, 0xb5, 0x47, 0xfc, 0x96, 0x1b, 0xc0, 0xaf, 0xcc, 0x67, 0x0f, 0x3c, 0xd4, 0x3f, - 0x13, 0x9f, 0xdd, 0xf0, 0xf7, 0xfc, 0x85, 0x27, 0x25, 0xe9, 0x72, 0xf6, 0x7e, 0x0e, 0xd7, 0x43, 0x29, 0x4f, 0x87, - 0xf4, 0xb3, 0x31, 0x18, 0x40, 0x28, 0x64, 0xde, 0x78, 0xc0, 0x9a, 0x14, 0xe2, 0x5f, 0xc0, 0xb7, 0xa3, 0x84, 0xcd, - 0x1b, 0x6f, 0xeb, 0x6b, 0x79, 0xf3, 0xc6, 0x7b, 0xf0, 0x29, 0x0a, 0xb0, 0x0a, 0x4a, 0x59, 0x60, 0x15, 0x84, 0x8d, - 0x36, 0xc2, 0x18, 0xb8, 0x7a, 0xd7, 0x18, 0xea, 0x7a, 0x8e, 0xd8, 0xb6, 0xd2, 0x77, 0xe1, 0x3b, 0xc8, 0x80, 0x0f, - 0xde, 0x14, 0x25, 0xd1, 0xe7, 0xd4, 0x14, 0x49, 0xeb, 0x9e, 0xfb, 0xad, 0x75, 0x47, 0x6b, 0x4a, 0x7d, 0xe4, 0x6a, - 0x7c, 0x38, 0xd4, 0x2f, 0x84, 0x16, 0x09, 0xa6, 0xa0, 0x71, 0x0d, 0xda, 0x02, 0x04, 0x7d, 0x1e, 0x20, 0x6b, 0x49, - 0xb1, 0xe0, 0xdb, 0x5f, 0x21, 0x06, 0xaf, 0x4c, 0xef, 0x5c, 0xae, 0x32, 0x12, 0xb6, 0x17, 0x7e, 0x39, 0xac, 0xfd, - 0x89, 0x53, 0x0b, 0x4b, 0xab, 0x39, 0xa8, 0x9f, 0xd9, 0x72, 0x9c, 0xaa, 0xda, 0xbf, 0x25, 0x49, 0xb5, 0xab, 0xb4, - 0x9c, 0xde, 0xdb, 0x37, 0x5d, 0x26, 0xd8, 0xd8, 0x0f, 0xa8, 0x3a, 0xb2, 0x1a, 0x76, 0x5f, 0xa8, 0x2f, 0x7a, 0x4a, - 0x26, 0x34, 0x1f, 0x55, 0x34, 0xcf, 0xee, 0x37, 0x3b, 0xea, 0x3f, 0xbd, 0x1c, 0x8a, 0x00, 0xc9, 0x2a, 0x2d, 0x96, - 0x22, 0x67, 0x63, 0x3f, 0x1e, 0x26, 0x99, 0x0a, 0x2f, 0x48, 0x47, 0x77, 0xbf, 0x71, 0x7f, 0xcb, 0x0d, 0x64, 0x85, - 0x56, 0x6d, 0x30, 0x56, 0x8a, 0x96, 0xc1, 0xfa, 0x6a, 0xdc, 0xef, 0x8b, 0xab, 0xf1, 0x54, 0x04, 0x35, 0x10, 0x17, - 0x89, 0x17, 0xe3, 0x69, 0x4d, 0x2c, 0xa9, 0x5d, 0x81, 0x31, 0x7a, 0x5c, 0x15, 0xb5, 0x4f, 0xfd, 0x02, 0x42, 0x91, - 0x6a, 0xcd, 0x1c, 0x6b, 0xdc, 0x18, 0x11, 0x77, 0x58, 0xb9, 0x76, 0x6a, 0xaf, 0x03, 0xb0, 0xbc, 0x1a, 0x17, 0x84, - 0x4d, 0x72, 0xec, 0x5c, 0xc0, 0x6a, 0x34, 0xa4, 0xda, 0x0d, 0xb7, 0x5e, 0x76, 0x7e, 0xf3, 0x38, 0xb1, 0xb5, 0x11, - 0x6e, 0x29, 0xa0, 0x8c, 0xf2, 0x1b, 0xcb, 0x09, 0xbb, 0x53, 0xbd, 0x23, 0x55, 0x3b, 0xe2, 0xc4, 0x05, 0x2c, 0x37, - 0x3c, 0xb5, 0xfa, 0x26, 0x06, 0x27, 0x42, 0xd5, 0x4a, 0xc7, 0x6b, 0x3f, 0xe2, 0x7e, 0x75, 0x5f, 0xf7, 0x4a, 0xf0, - 0x93, 0x90, 0xd7, 0x6f, 0x79, 0x07, 0x80, 0x15, 0x1f, 0xf2, 0x62, 0x5a, 0x38, 0x5a, 0x97, 0x41, 0x19, 0x20, 0x42, - 0x33, 0x00, 0x3a, 0xb9, 0x3a, 0x88, 0xd2, 0xc0, 0x15, 0x77, 0x88, 0xf0, 0xd3, 0xe8, 0x59, 0xfe, 0x22, 0x7c, 0x56, - 0x4d, 0xc3, 0x8b, 0x3c, 0x88, 0x2e, 0xaa, 0x20, 0x7a, 0x56, 0x5d, 0x85, 0xcf, 0xf2, 0x69, 0x74, 0x91, 0x07, 0xe1, - 0x45, 0xd5, 0xd8, 0x77, 0xed, 0xee, 0x9e, 0x90, 0xb7, 0x5d, 0xfd, 0x91, 0x73, 0x65, 0x4f, 0x99, 0x9e, 0x9f, 0xd7, - 0x7a, 0xa5, 0x76, 0x9b, 0xeb, 0x35, 0x6a, 0xa6, 0x3e, 0xca, 0xfe, 0x66, 0x1b, 0x0b, 0x8f, 0xe6, 0x10, 0xfa, 0x8c, - 0xb4, 0x98, 0x7b, 0x9c, 0xeb, 0xcd, 0x9e, 0x14, 0x06, 0x46, 0x4c, 0x2a, 0x19, 0x39, 0xbd, 0xc0, 0x45, 0xa8, 0x42, - 0x0c, 0x6b, 0xe9, 0x6a, 0x9f, 0x75, 0xe9, 0x0d, 0xd4, 0x35, 0xc5, 0xbe, 0x86, 0x0c, 0xbc, 0x68, 0x7a, 0x19, 0x8c, - 0x01, 0x39, 0x02, 0xef, 0xf8, 0x6c, 0x09, 0x07, 0xe6, 0x1a, 0xa0, 0x6f, 0x1e, 0xf5, 0x75, 0xb9, 0xe3, 0x6b, 0xd5, - 0x37, 0xd3, 0xf5, 0x48, 0x29, 0x3f, 0x56, 0xfc, 0xee, 0xe2, 0x39, 0xbb, 0xe5, 0x1a, 0x15, 0xe5, 0x17, 0xbd, 0x58, - 0xef, 0x81, 0xab, 0xee, 0x17, 0xb8, 0xcd, 0xe2, 0xb1, 0x2b, 0x0f, 0x58, 0xb6, 0x65, 0x0f, 0xec, 0x86, 0xbd, 0x67, - 0x4f, 0xd8, 0x5b, 0xf6, 0x8e, 0xfd, 0x84, 0xaa, 0x0d, 0x25, 0xe4, 0xf9, 0x0b, 0x7e, 0x2b, 0x4d, 0x8f, 0x12, 0x95, - 0xec, 0xc1, 0x36, 0xd3, 0x0c, 0x37, 0xec, 0x3d, 0x5f, 0x0c, 0x57, 0xec, 0x2d, 0x64, 0x43, 0x99, 0x78, 0xb0, 0x62, - 0x3f, 0x71, 0x05, 0x62, 0xa6, 0xcf, 0xc2, 0xd2, 0x12, 0x15, 0x4d, 0x99, 0x28, 0x43, 0xbf, 0xe5, 0xf8, 0x22, 0xfb, - 0x09, 0x8b, 0x90, 0x9f, 0x19, 0xae, 0xd8, 0x03, 0x5f, 0x0c, 0x56, 0xec, 0xbd, 0x36, 0x10, 0x0d, 0x36, 0x6e, 0x69, - 0x84, 0x64, 0xa5, 0xcb, 0x92, 0xd2, 0xf4, 0xd6, 0xbe, 0x06, 0x6e, 0xd8, 0x0d, 0xd6, 0xee, 0x09, 0x16, 0x8d, 0x02, - 0xff, 0x60, 0xc5, 0xde, 0x71, 0x09, 0xa0, 0xe6, 0x96, 0x27, 0xbd, 0x42, 0x75, 0x81, 0x74, 0x3f, 0x78, 0xc2, 0xe9, - 0x45, 0xf6, 0x0e, 0xcb, 0xa0, 0xaf, 0x0c, 0x57, 0x6c, 0x8b, 0xb5, 0xbb, 0x31, 0x96, 0x2d, 0xab, 0x7a, 0x12, 0x11, - 0x18, 0x05, 0x95, 0xd2, 0xf2, 0x6f, 0xc4, 0xb2, 0xa9, 0x9b, 0x06, 0xb5, 0xa1, 0x3f, 0x1f, 0x8c, 0xfe, 0xe2, 0xeb, - 0x77, 0x3f, 0x78, 0xa5, 0xbe, 0xf6, 0xfe, 0xe2, 0xb8, 0x56, 0x96, 0xe8, 0x5a, 0xf9, 0x2b, 0x2f, 0x67, 0xbf, 0xcc, - 0x27, 0xba, 0x96, 0xb4, 0xc3, 0x90, 0xaf, 0xe9, 0xec, 0x97, 0x0e, 0x67, 0xcb, 0x5f, 0x7d, 0xbf, 0x31, 0x5d, 0xac, - 0x3e, 0xab, 0x7b, 0xf7, 0x61, 0xb0, 0x69, 0x9c, 0x7a, 0xef, 0x4e, 0xd7, 0x1b, 0x9b, 0x59, 0x6b, 0xcf, 0xcc, 0xff, - 0xe1, 0x4a, 0x6f, 0x71, 0xe8, 0x6e, 0xf8, 0x76, 0xb8, 0xb1, 0x47, 0x41, 0x7e, 0x5f, 0x2a, 0x8d, 0xb3, 0x9a, 0xbf, - 0xf4, 0x3a, 0xa5, 0x58, 0x40, 0x34, 0xfa, 0x64, 0x24, 0xa1, 0x4b, 0x66, 0xe2, 0x19, 0xe2, 0x8b, 0x0c, 0x90, 0xb9, - 0x40, 0x34, 0xbb, 0xe7, 0xe3, 0xc9, 0xfd, 0x55, 0x3c, 0xb9, 0x1f, 0xf0, 0x4f, 0xa6, 0x05, 0xed, 0xc5, 0x76, 0xef, - 0xb3, 0x5f, 0x79, 0x61, 0x2f, 0xc7, 0x5f, 0x7c, 0xf6, 0x45, 0xb8, 0x2b, 0xf4, 0x17, 0x9f, 0xbd, 0x13, 0xfc, 0xd7, - 0x91, 0x26, 0xca, 0x60, 0xef, 0x6a, 0xfe, 0xeb, 0x08, 0x19, 0x3f, 0xd8, 0x67, 0xc1, 0xbf, 0x80, 0xef, 0x77, 0x95, - 0xa0, 0x55, 0xfc, 0x73, 0xad, 0x7e, 0xbe, 0x97, 0x71, 0x39, 0xf0, 0x26, 0xb4, 0x82, 0xde, 0xbc, 0xad, 0xe5, 0x4f, - 0xe2, 0xe1, 0x48, 0xd5, 0x53, 0xc3, 0x3f, 0x8b, 0xc5, 0x2c, 0xea, 0xa3, 0x74, 0x2a, 0x6f, 0x72, 0xcd, 0x33, 0x69, - 0x5d, 0xbe, 0x87, 0x50, 0xe0, 0x6b, 0x1b, 0xa2, 0x60, 0xc7, 0x71, 0x23, 0xb8, 0x66, 0xef, 0x84, 0xcf, 0xb2, 0xe9, - 0x96, 0xdf, 0xf0, 0x27, 0xfc, 0x1d, 0xdf, 0x05, 0x0f, 0xfc, 0x3d, 0x7f, 0xcb, 0x7f, 0xe2, 0x3b, 0xb6, 0x94, 0x68, - 0xa7, 0xf5, 0xf6, 0x32, 0xd8, 0xb2, 0x7a, 0x77, 0x19, 0x3c, 0xb0, 0x7a, 0xfb, 0x3c, 0xb8, 0x61, 0xf5, 0xee, 0x79, - 0xf0, 0x9e, 0x6d, 0x2f, 0x83, 0x27, 0x6c, 0x77, 0x19, 0xbc, 0x65, 0xdb, 0xe7, 0xc1, 0x3b, 0xb6, 0x7b, 0x1e, 0xfc, - 0x24, 0x31, 0x1e, 0xde, 0x09, 0xc9, 0x71, 0xf2, 0xae, 0x66, 0x86, 0x4f, 0x37, 0xf8, 0x2c, 0xac, 0x5f, 0x54, 0xc7, - 0xe0, 0x73, 0xcd, 0x74, 0x8b, 0x03, 0x21, 0x98, 0x6e, 0x6f, 0x70, 0x4b, 0x4f, 0x4c, 0xab, 0x82, 0x54, 0xb0, 0xae, - 0x76, 0x06, 0x8b, 0xba, 0x69, 0x9d, 0xc9, 0x8e, 0x5f, 0x62, 0xdc, 0xe1, 0x97, 0xb8, 0x60, 0xcb, 0xa6, 0xd3, 0x49, - 0xe7, 0xf4, 0x49, 0xa0, 0x37, 0x7f, 0xbd, 0xeb, 0x57, 0xd2, 0x77, 0xa6, 0x68, 0x78, 0xae, 0xb4, 0xc6, 0xad, 0x9d, - 0x3e, 0xb4, 0x76, 0x7a, 0x26, 0x55, 0x68, 0x11, 0x8b, 0xca, 0xa2, 0xaa, 0x90, 0x49, 0x3c, 0xc8, 0xb4, 0x3e, 0x2d, - 0x61, 0xa4, 0xc8, 0x04, 0x34, 0xfa, 0x82, 0x8e, 0x81, 0x9c, 0x2c, 0x0a, 0x6c, 0xc9, 0x37, 0x83, 0x84, 0xad, 0x79, - 0x3c, 0x1d, 0x26, 0xc1, 0x92, 0xdd, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x52, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, - 0x79, 0x6f, 0x95, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x56, 0xe9, 0x0d, 0x7e, 0xeb, 0xec, 0xe7, 0x6b, 0xb5, 0xbf, 0x83, - 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xaf, 0xec, 0x2d, 0x7d, 0x6b, - 0xb6, 0xe9, 0xff, 0xb4, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xc6, 0x9f, 0x3c, - 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xc7, 0x3f, 0x8d, 0xb6, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, - 0x68, 0xef, 0xe4, 0x95, 0xbd, 0x23, 0x6e, 0x79, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, - 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xab, 0xd9, 0xa7, 0xf9, 0x64, 0xcb, 0x8f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, - 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x3b, 0x7e, 0xbc, 0x89, 0x0f, 0xff, 0xe3, - 0x4a, 0xef, 0xbe, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, + 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0xd7, 0x13, 0x71, 0x49, 0x97, 0x24, 0xf5, 0x54, 0x42, + 0x49, 0x08, 0x76, 0xed, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, + 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xcb, + 0x79, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8b, 0x6d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, + 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xcc, 0xe5, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, + 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0xbf, 0xaa, 0x6c, 0x6c, 0x05, 0xe4, 0x90, 0x64, 0xb2, 0x58, 0x8d, 0xee, + 0xc4, 0xb2, 0x28, 0xc5, 0xcf, 0x58, 0x0f, 0xd7, 0x6c, 0xe1, 0x3e, 0x03, 0x42, 0xfb, 0x89, 0xd2, 0xde, 0x44, 0x9a, + 0xa0, 0x7b, 0xc5, 0xd6, 0x00, 0x32, 0x80, 0xa2, 0xae, 0x76, 0xeb, 0x73, 0x7e, 0x8e, 0xa4, 0x19, 0x0e, 0xa3, 0xdb, + 0xa7, 0xab, 0x60, 0x35, 0xb8, 0x46, 0xad, 0xf4, 0x35, 0x8b, 0x5b, 0x18, 0x54, 0x07, 0xb3, 0x84, 0x83, 0x9a, 0x59, + 0x6b, 0x23, 0x10, 0x4c, 0xf6, 0x50, 0x90, 0x33, 0x57, 0xb0, 0x0f, 0x0a, 0xd6, 0x92, 0xd7, 0xc1, 0xe1, 0xd6, 0xbe, + 0xac, 0x14, 0x57, 0xcf, 0xae, 0x92, 0xd6, 0x85, 0xa5, 0xbc, 0x7a, 0xd6, 0x80, 0xc1, 0xe5, 0x04, 0x9b, 0x2a, 0xf7, + 0x27, 0x5b, 0x00, 0xdd, 0x0a, 0x29, 0xe2, 0x45, 0x29, 0x6c, 0x5b, 0xf9, 0xcc, 0x09, 0x1b, 0x6c, 0xd9, 0x03, 0xdc, + 0x2b, 0x83, 0x92, 0xc1, 0x85, 0x18, 0xb7, 0x9b, 0x7d, 0x80, 0x2b, 0x18, 0x0a, 0x63, 0x1b, 0xfe, 0x3a, 0xf3, 0x22, + 0x25, 0xe0, 0x66, 0x88, 0xf2, 0xb5, 0x85, 0x93, 0x49, 0x4f, 0xae, 0x25, 0x8b, 0x01, 0x0b, 0x1a, 0x7c, 0x47, 0xad, + 0xbf, 0x33, 0xf9, 0x37, 0x9e, 0x1e, 0xfa, 0xc1, 0xe7, 0xcc, 0x5b, 0xfa, 0xec, 0x75, 0x2e, 0xa3, 0x35, 0x49, 0x94, + 0x57, 0x0f, 0x97, 0x20, 0x37, 0x2c, 0x47, 0x0f, 0x6c, 0x09, 0xe2, 0xc4, 0x72, 0x94, 0x50, 0x46, 0x57, 0xb8, 0x57, + 0x99, 0x2d, 0x13, 0x81, 0x14, 0x07, 0x96, 0x52, 0xee, 0x2d, 0x36, 0xc1, 0x12, 0xf7, 0x27, 0x92, 0x0b, 0x28, 0x79, + 0x00, 0xe5, 0x4a, 0x01, 0x01, 0x9f, 0x0e, 0xa0, 0x7c, 0x29, 0x2f, 0xc2, 0x9f, 0x38, 0x51, 0x83, 0xe5, 0xe8, 0xa1, + 0x61, 0x7f, 0xf5, 0x42, 0xcb, 0xfe, 0xb0, 0xd2, 0x9a, 0x86, 0x35, 0x5f, 0xc1, 0xb4, 0x98, 0xb8, 0x7d, 0xb9, 0xb6, + 0xab, 0xe2, 0xb3, 0xb5, 0x3a, 0xbb, 0xa9, 0x21, 0x09, 0xfb, 0x8a, 0xac, 0x02, 0x1c, 0xac, 0x8a, 0xb8, 0x67, 0x59, + 0x1e, 0xc2, 0xe8, 0xcf, 0x6d, 0x5a, 0x0a, 0x0b, 0x55, 0xd2, 0x3f, 0x34, 0xa5, 0x40, 0x2a, 0x13, 0x9d, 0x68, 0x21, + 0xb8, 0x02, 0x83, 0xc0, 0xbd, 0xc8, 0x6b, 0x00, 0x8c, 0x01, 0x97, 0x02, 0x65, 0xd9, 0x96, 0x10, 0x52, 0xdd, 0xcf, + 0x40, 0x6d, 0x27, 0xee, 0xd3, 0x88, 0xac, 0x85, 0xe8, 0xab, 0x60, 0xcc, 0x9c, 0xd7, 0xd2, 0x2d, 0x36, 0x5d, 0x6f, + 0xd7, 0xb7, 0xe8, 0x5c, 0xda, 0x72, 0xf3, 0x13, 0xb6, 0x58, 0x2b, 0x50, 0x36, 0x21, 0x69, 0xbb, 0xe2, 0x15, 0xca, + 0x26, 0xb4, 0xb4, 0x0f, 0xd4, 0xa3, 0x42, 0x75, 0xb2, 0xf5, 0x52, 0x3e, 0xb5, 0x08, 0xab, 0xc5, 0x55, 0xee, 0x07, + 0xa0, 0x9b, 0x4a, 0xab, 0x17, 0x75, 0x8d, 0xa6, 0x50, 0xab, 0x85, 0xe3, 0x46, 0x3b, 0x9b, 0x2e, 0xd3, 0x15, 0xe2, + 0xac, 0x4a, 0x3b, 0xf4, 0x0f, 0x99, 0x76, 0xbd, 0xec, 0xe8, 0x37, 0xe3, 0xea, 0x02, 0x17, 0x62, 0x03, 0x3e, 0xe7, + 0xfe, 0xf2, 0x7a, 0xcf, 0xe2, 0x1e, 0x44, 0x3c, 0x03, 0x7b, 0x52, 0xfb, 0x43, 0xf5, 0xa9, 0x2b, 0x18, 0xb2, 0x30, + 0x4a, 0xfd, 0x45, 0xca, 0x7b, 0x4f, 0x70, 0xdc, 0x3f, 0x57, 0x3d, 0xf6, 0xd7, 0x8c, 0x1f, 0xea, 0x62, 0x1b, 0x25, + 0x14, 0xd5, 0xd0, 0x5b, 0x17, 0xdb, 0x4a, 0xc4, 0xc5, 0x43, 0xde, 0x63, 0x98, 0x0c, 0x63, 0x21, 0x53, 0xe1, 0x4f, + 0x99, 0x0a, 0x1e, 0x21, 0x94, 0xb8, 0xdd, 0xf4, 0x48, 0xbb, 0x09, 0x71, 0x4a, 0xb5, 0x28, 0x65, 0x32, 0xfe, 0xad, + 0x9f, 0x40, 0x79, 0x4e, 0xd1, 0x32, 0xfd, 0xa4, 0x70, 0x99, 0xbe, 0xdd, 0x9c, 0x96, 0x9e, 0x89, 0x50, 0x67, 0x2e, + 0xb6, 0xb5, 0x4e, 0xc7, 0xd8, 0x29, 0x9d, 0xda, 0xb0, 0x77, 0xb9, 0xe2, 0xb2, 0xa2, 0xf0, 0x6f, 0x24, 0xb2, 0xea, + 0x19, 0x71, 0xfc, 0x9f, 0x59, 0xfb, 0x0c, 0xab, 0xc0, 0x2f, 0x03, 0x79, 0xbf, 0x00, 0xf8, 0xb8, 0xae, 0xcb, 0xf4, + 0x6e, 0x0b, 0xb4, 0x21, 0x34, 0xfc, 0x3d, 0x1f, 0x19, 0x30, 0xdd, 0x47, 0x38, 0x43, 0x7a, 0xa8, 0x73, 0x4e, 0x67, + 0x65, 0x3a, 0xe7, 0x2a, 0xac, 0x25, 0x38, 0xc8, 0x49, 0x53, 0xc9, 0x75, 0x09, 0x6a, 0x26, 0x70, 0xfb, 0xd0, 0x1e, + 0x11, 0x42, 0x6d, 0xca, 0x6a, 0x7a, 0x09, 0x35, 0xef, 0xe4, 0xb4, 0xa3, 0x49, 0x09, 0xae, 0x1a, 0x3a, 0x2b, 0xd7, + 0x7f, 0x1d, 0x8f, 0xbd, 0xbb, 0xac, 0x88, 0xfe, 0xe8, 0xa1, 0xbf, 0xe3, 0xee, 0x36, 0xfd, 0x02, 0xd1, 0x32, 0xd6, + 0xdf, 0x90, 0x01, 0x1d, 0x4f, 0x86, 0x77, 0xc5, 0xae, 0xc7, 0xde, 0xe5, 0x78, 0x81, 0x55, 0xd7, 0x8f, 0x3f, 0x40, + 0x42, 0xd5, 0xb5, 0x2f, 0x2c, 0x9e, 0x30, 0x4f, 0x89, 0xb6, 0x85, 0x0f, 0x61, 0xa1, 0xef, 0x72, 0xd8, 0x84, 0xa1, + 0x79, 0xd4, 0x3d, 0x4a, 0xda, 0x85, 0xbe, 0xf4, 0xb5, 0xec, 0x2b, 0xdf, 0xb9, 0x02, 0x58, 0xd9, 0x67, 0x36, 0xdc, + 0x93, 0xfe, 0x94, 0xea, 0xc3, 0xf6, 0xb7, 0x64, 0x01, 0x85, 0x16, 0xd6, 0x53, 0x39, 0x3b, 0x37, 0x25, 0x4f, 0xb3, + 0xe9, 0x61, 0x03, 0x7b, 0xd4, 0x3d, 0x7a, 0x4d, 0x05, 0x97, 0xd7, 0x66, 0xf4, 0xfe, 0x61, 0x28, 0x54, 0x47, 0x9d, + 0x3b, 0xc8, 0xa6, 0xb4, 0x2e, 0x39, 0xbf, 0x59, 0xb9, 0xa3, 0x30, 0xbf, 0x0f, 0xc1, 0x33, 0xac, 0x7b, 0x77, 0x71, + 0xde, 0xfb, 0xb3, 0x35, 0x47, 0xfe, 0x9a, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0x0e, 0xbb, + 0xa0, 0x82, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, + 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xbb, 0xc0, 0xd0, 0xb6, 0x4d, 0x89, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x39, 0x51, 0xa1, + 0x59, 0xa4, 0xad, 0x92, 0xf1, 0xef, 0x44, 0x9b, 0x29, 0xd9, 0x63, 0x6b, 0xe0, 0xbd, 0x04, 0xe5, 0x64, 0x98, 0x62, + 0xf8, 0x8e, 0xaf, 0x77, 0x1e, 0x73, 0xcf, 0x39, 0x65, 0x9b, 0x94, 0x1d, 0xc1, 0x72, 0x22, 0x1b, 0xdf, 0x52, 0xbc, + 0xe1, 0xfb, 0xbb, 0x4a, 0x94, 0x00, 0x7a, 0x59, 0xf0, 0xe7, 0xd2, 0xe6, 0x0a, 0xdd, 0xee, 0xde, 0x51, 0x0a, 0xbf, + 0xe4, 0xe5, 0xf1, 0xb8, 0x4b, 0xbd, 0x10, 0x3a, 0x5f, 0xc4, 0xef, 0xc0, 0x1c, 0xc6, 0x10, 0x9b, 0x11, 0x20, 0xcc, + 0xf1, 0x01, 0x75, 0xb0, 0x7e, 0x04, 0xa0, 0x71, 0x02, 0x05, 0x18, 0x7d, 0xb5, 0x2d, 0xe8, 0x5b, 0x5e, 0x5c, 0x44, + 0x88, 0x1a, 0x05, 0x98, 0x28, 0x69, 0x16, 0xc3, 0x70, 0xa0, 0xf3, 0xfb, 0xf6, 0xae, 0x2e, 0x05, 0x0e, 0xbd, 0x63, + 0x19, 0xfe, 0xdb, 0xff, 0x58, 0x5b, 0x5a, 0x55, 0xb6, 0x5b, 0xe3, 0x34, 0xf3, 0xbf, 0xdd, 0x16, 0xfa, 0xfe, 0x4b, + 0xa1, 0x78, 0xde, 0xf1, 0xba, 0xfd, 0x05, 0xa2, 0xf7, 0x75, 0x2b, 0x57, 0xa5, 0x76, 0xc3, 0x4c, 0xf9, 0x43, 0x9a, + 0xc7, 0xc5, 0xc3, 0x28, 0x6e, 0x1d, 0x79, 0x93, 0xf4, 0x92, 0xf3, 0x2f, 0xe0, 0x6c, 0xfd, 0x05, 0xc8, 0x78, 0x5f, + 0x0a, 0xe3, 0x88, 0x49, 0x1c, 0x7c, 0x07, 0x31, 0x8a, 0xb6, 0x25, 0x6c, 0xc8, 0xed, 0xd3, 0x12, 0x34, 0x33, 0xfd, + 0x3e, 0x4a, 0x94, 0xd6, 0x7c, 0xff, 0x8b, 0x9c, 0xef, 0x2f, 0x85, 0xbc, 0x59, 0xc9, 0x0f, 0x9f, 0xac, 0x30, 0xf0, + 0x3d, 0x4e, 0xbf, 0x88, 0x1e, 0x5b, 0x95, 0x3e, 0x7c, 0x57, 0x5a, 0xfa, 0xac, 0xa2, 0xfe, 0x8e, 0x8a, 0x9a, 0x97, + 0x62, 0x44, 0xc4, 0x83, 0xa0, 0x9d, 0x6d, 0x97, 0xda, 0xb5, 0x04, 0xed, 0x82, 0x4d, 0x61, 0xff, 0x7a, 0x6c, 0xc8, + 0xab, 0x7e, 0xff, 0xe7, 0xca, 0x6b, 0xf1, 0xba, 0xeb, 0xd0, 0x94, 0x9f, 0x0a, 0x0f, 0x21, 0x80, 0xb5, 0x0c, 0x94, + 0xf1, 0x1c, 0x60, 0xd2, 0x45, 0x5e, 0xa3, 0x6c, 0x3a, 0x11, 0xf8, 0x98, 0x65, 0x37, 0x4e, 0x32, 0x0d, 0x30, 0xa3, + 0x9a, 0x62, 0xcc, 0x8a, 0x78, 0xb8, 0xf8, 0x88, 0x75, 0xd3, 0xd3, 0x2a, 0xb4, 0x7c, 0x0d, 0xc1, 0xba, 0xc8, 0x32, + 0x8e, 0x62, 0x26, 0x00, 0xd8, 0x7c, 0x04, 0xf9, 0x8a, 0xae, 0x0e, 0x49, 0x2b, 0x55, 0xde, 0xaf, 0x33, 0x22, 0xa3, + 0x49, 0x88, 0xe6, 0xb7, 0xf0, 0xc0, 0xbe, 0x6d, 0x66, 0x54, 0xa9, 0x67, 0x54, 0xee, 0x33, 0x1c, 0x96, 0xc2, 0x31, + 0xe2, 0xff, 0x2d, 0x55, 0x3d, 0x22, 0xd0, 0xab, 0x32, 0xad, 0xa2, 0x22, 0xcf, 0x45, 0x84, 0x08, 0xd5, 0xd2, 0x39, + 0x1c, 0xfa, 0xb1, 0xdf, 0xc7, 0x81, 0x30, 0x2f, 0xfe, 0xf4, 0x58, 0x57, 0xfe, 0x54, 0xe0, 0x5a, 0x49, 0x81, 0x53, + 0x51, 0x23, 0x44, 0x08, 0xef, 0x4f, 0xe0, 0x59, 0x4d, 0x7d, 0xbf, 0xb1, 0x4c, 0x74, 0xff, 0xc8, 0x80, 0xf2, 0x07, + 0xe4, 0xeb, 0x5c, 0x8a, 0x33, 0x75, 0xf2, 0x98, 0x38, 0xe3, 0x00, 0xc4, 0x7c, 0x5d, 0xa2, 0xd1, 0xd8, 0xff, 0x80, + 0x04, 0x43, 0xf5, 0x83, 0x9d, 0x6e, 0xea, 0xfd, 0x33, 0x93, 0x38, 0x8a, 0x3e, 0x6d, 0x93, 0xa7, 0x92, 0xa5, 0xd1, + 0xc2, 0xd1, 0x7b, 0xc4, 0x30, 0x0e, 0xa7, 0xf3, 0x29, 0xc9, 0x36, 0x26, 0xab, 0x00, 0xd2, 0xc9, 0x4c, 0x1d, 0x53, + 0xea, 0x68, 0x9c, 0xeb, 0x05, 0x55, 0xe8, 0xb1, 0x2e, 0x79, 0x05, 0xd6, 0x93, 0x1f, 0xbd, 0xd2, 0x9f, 0x0a, 0x39, + 0x87, 0x8d, 0x44, 0x50, 0xf8, 0x01, 0xae, 0x06, 0x2b, 0x05, 0x0c, 0xa6, 0xbe, 0x85, 0xaf, 0x89, 0xe7, 0x28, 0x78, + 0x14, 0x76, 0x31, 0xb6, 0xe6, 0xbe, 0xf3, 0x49, 0x41, 0xb9, 0x67, 0xc5, 0x9c, 0xe7, 0xc0, 0xb9, 0x0c, 0x0a, 0x61, + 0x3a, 0x9e, 0xe5, 0xff, 0x4c, 0xf2, 0x7a, 0x62, 0x43, 0x80, 0x0c, 0xfe, 0x9c, 0x38, 0x2d, 0xdd, 0xa1, 0x3b, 0x0f, + 0x3d, 0x8b, 0x38, 0x6c, 0xf4, 0x64, 0x53, 0x16, 0xbb, 0x14, 0xf5, 0x12, 0xe6, 0x07, 0xf2, 0xf3, 0x96, 0xfc, 0x10, + 0xa2, 0x78, 0x1b, 0xfc, 0x9a, 0xb1, 0x58, 0xe0, 0x5f, 0x7f, 0xcb, 0x18, 0x4d, 0xb4, 0xe0, 0x5f, 0x59, 0x83, 0x44, + 0xc5, 0x3f, 0x65, 0x93, 0x1c, 0xb8, 0x4c, 0xd5, 0x87, 0xcf, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x39, 0xe8, + 0xd4, 0xe7, 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x96, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4b, 0xa9, 0x1a, 0xbf, + 0x65, 0x14, 0xbf, 0x93, 0xfb, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xf9, 0x7b, 0xc3, 0x99, 0x5d, 0xf6, 0xab, 0xb7, + 0x89, 0xcc, 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x35, 0x13, 0x7f, 0xae, 0x0c, 0xa7, 0xc4, 0xe5, 0xa5, 0x87, 0x2b, 0x36, + 0xad, 0x5e, 0xd2, 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0xa9, 0xf2, 0x00, 0x82, + 0x99, 0xd4, 0x04, 0x80, 0xb4, 0x10, 0x95, 0x42, 0xe4, 0x2f, 0x71, 0x56, 0x5f, 0xf2, 0xde, 0x36, 0x8f, 0x89, 0xb4, + 0xba, 0xd7, 0xef, 0xa7, 0x17, 0x69, 0x4e, 0x41, 0x0d, 0xa7, 0x59, 0xa7, 0x3f, 0x64, 0x41, 0x9d, 0xc8, 0x55, 0xfa, + 0x77, 0x37, 0xc8, 0xcb, 0xf8, 0xbe, 0xee, 0x7a, 0xfe, 0x44, 0xfd, 0xbd, 0xb7, 0xfe, 0xb6, 0x40, 0x70, 0x27, 0xa7, + 0x7e, 0xb2, 0x2a, 0xe5, 0x89, 0x71, 0x69, 0xef, 0xf9, 0x4d, 0x5d, 0x14, 0x59, 0x9d, 0x6e, 0x3e, 0x48, 0x3d, 0x8d, + 0xee, 0x8b, 0x03, 0x18, 0x83, 0xf7, 0x00, 0x78, 0xa6, 0x43, 0x03, 0xa4, 0xef, 0x19, 0x79, 0xb8, 0xcf, 0x2d, 0xf9, + 0x49, 0x65, 0x6d, 0x92, 0xb0, 0xa2, 0xd8, 0x0c, 0x63, 0x84, 0x92, 0x71, 0x1a, 0x3b, 0xbf, 0xdf, 0x57, 0x7f, 0xef, + 0x31, 0x8a, 0x8a, 0x8a, 0x3b, 0x45, 0xa3, 0xb2, 0xaa, 0x47, 0xdb, 0xc1, 0xf1, 0x78, 0x59, 0xd9, 0x38, 0xda, 0x7a, + 0x05, 0x1c, 0xac, 0x50, 0x29, 0x7b, 0x25, 0xc2, 0xf2, 0xc3, 0x95, 0xdf, 0xef, 0xc3, 0xbf, 0x32, 0xd2, 0xc2, 0xf3, + 0xa7, 0xf8, 0x6b, 0x51, 0x17, 0x18, 0x9e, 0x41, 0x6b, 0x34, 0x87, 0x60, 0x82, 0xbf, 0x77, 0xa0, 0x5e, 0x5a, 0x69, + 0x1f, 0x41, 0xb7, 0x02, 0x3d, 0xa8, 0x87, 0x3e, 0x4d, 0xda, 0x17, 0x12, 0x75, 0x7b, 0xab, 0xd3, 0xe8, 0x8f, 0x0a, + 0x2e, 0xa7, 0x30, 0x39, 0xdc, 0xd0, 0xa7, 0x75, 0xb8, 0xfb, 0x04, 0x4f, 0x7f, 0x06, 0xca, 0xad, 0xe3, 0x11, 0xc5, + 0x16, 0x70, 0xf3, 0x58, 0x87, 0x9f, 0x8b, 0x52, 0x46, 0xd4, 0xc7, 0xd3, 0x02, 0xb4, 0x77, 0x01, 0x3a, 0x60, 0x69, + 0x10, 0xaf, 0x90, 0x3c, 0x67, 0x23, 0x80, 0x65, 0x07, 0x96, 0xb3, 0x8c, 0x53, 0x98, 0x67, 0xf9, 0x5c, 0xad, 0xb4, + 0x8b, 0x32, 0xf1, 0x6a, 0x96, 0x81, 0xb3, 0xc0, 0x55, 0xee, 0xb3, 0x4c, 0xab, 0x9e, 0xf2, 0x04, 0x7d, 0x5e, 0xc9, + 0x09, 0xae, 0x04, 0x27, 0x1b, 0x90, 0x5f, 0x80, 0x24, 0x4d, 0x29, 0x6b, 0xca, 0xe7, 0xd7, 0x74, 0x43, 0x46, 0xcf, + 0x79, 0xcf, 0x8b, 0x86, 0xa1, 0x7f, 0xe5, 0x95, 0x10, 0xbe, 0x89, 0xdb, 0x36, 0x4a, 0x61, 0x7f, 0x11, 0x58, 0x7c, + 0xc2, 0x7e, 0xf4, 0x96, 0xfe, 0x74, 0x1c, 0x84, 0x43, 0xe4, 0x86, 0x8a, 0x39, 0xb0, 0xa7, 0x01, 0x8b, 0x4d, 0x7c, + 0xb3, 0x9d, 0xc4, 0x83, 0x81, 0xaf, 0x33, 0x16, 0xb3, 0x18, 0x68, 0x90, 0xe3, 0xc1, 0xf5, 0x5c, 0x9f, 0x10, 0xfa, + 0x61, 0x44, 0xe5, 0xa8, 0x40, 0xe7, 0x20, 0x1a, 0x2c, 0x01, 0x4f, 0xbd, 0x95, 0x0d, 0x92, 0x8c, 0x49, 0x26, 0x71, + 0xad, 0x49, 0xaa, 0xc3, 0x09, 0xad, 0x03, 0x1d, 0x57, 0x17, 0xd0, 0xf9, 0xb8, 0xee, 0x7d, 0xbc, 0x1a, 0x2e, 0xa8, + 0xf4, 0x2b, 0x31, 0xf0, 0xea, 0xe9, 0x38, 0xb8, 0xa6, 0x5b, 0xe1, 0x62, 0x1d, 0xee, 0x7e, 0x96, 0x0f, 0x1c, 0x77, + 0x54, 0xd2, 0x10, 0x18, 0xbc, 0x3d, 0x74, 0x37, 0x33, 0x34, 0xd4, 0x49, 0xfb, 0x30, 0x0e, 0xe5, 0x10, 0xab, 0x56, + 0x5c, 0x49, 0x6f, 0x04, 0xdf, 0x2e, 0x14, 0x63, 0xd9, 0xd8, 0xb5, 0xa1, 0x28, 0xfc, 0x15, 0xc0, 0x0e, 0xb5, 0xbf, + 0x52, 0xc9, 0xc7, 0xc8, 0xa8, 0xa6, 0x81, 0x8e, 0x01, 0x58, 0xb2, 0x34, 0x91, 0x54, 0x91, 0x46, 0xe2, 0x8f, 0xcc, + 0x58, 0x47, 0x4d, 0xd7, 0x17, 0x4c, 0x55, 0x8b, 0xa4, 0xdb, 0x99, 0xc4, 0x72, 0x22, 0x49, 0x6d, 0xf7, 0x11, 0x31, + 0x18, 0xf8, 0x60, 0x23, 0xa6, 0x99, 0x08, 0x47, 0x3c, 0x2a, 0x91, 0x45, 0x97, 0xdf, 0x46, 0x99, 0xb4, 0x7d, 0x59, + 0x91, 0x2d, 0x08, 0xa6, 0x27, 0xd1, 0x07, 0x49, 0xd0, 0xba, 0x48, 0xa4, 0x19, 0x21, 0xc0, 0x8f, 0x27, 0xe5, 0x8d, + 0xfe, 0x1c, 0x34, 0xad, 0x04, 0x2f, 0x19, 0x24, 0x8f, 0xc4, 0xcf, 0xa4, 0x60, 0x16, 0x63, 0xf9, 0x60, 0x80, 0xe5, + 0xe4, 0x4f, 0x1d, 0x93, 0xf4, 0x5f, 0x3a, 0x9d, 0xb0, 0x5f, 0x78, 0x95, 0xad, 0xe5, 0x4d, 0x73, 0xef, 0x85, 0x97, + 0xb3, 0x54, 0xc3, 0x32, 0xe8, 0xbf, 0x26, 0xda, 0x05, 0x5b, 0x5b, 0xc6, 0x84, 0x55, 0x3f, 0x80, 0xb4, 0x47, 0xba, + 0xbc, 0x7c, 0x58, 0x31, 0xc1, 0xa3, 0x2b, 0x6b, 0x1e, 0x44, 0x57, 0xc2, 0x47, 0x2e, 0xbb, 0x49, 0x72, 0x33, 0x9e, + 0xf8, 0xe1, 0x60, 0xa0, 0x00, 0x68, 0x69, 0x9d, 0x14, 0x83, 0xf0, 0xa9, 0x90, 0x03, 0x69, 0x74, 0x54, 0x05, 0x58, + 0x2c, 0xb3, 0x9b, 0x72, 0x92, 0x0d, 0x06, 0x3e, 0x88, 0x8d, 0x89, 0xdd, 0xd0, 0x6c, 0xee, 0xb3, 0x33, 0x05, 0x59, + 0x6d, 0x0e, 0x5b, 0x33, 0xdd, 0x02, 0x03, 0x80, 0x41, 0x44, 0xb0, 0xdc, 0x67, 0x46, 0x3e, 0xa2, 0x4e, 0x4f, 0x61, + 0x04, 0x04, 0xbf, 0x9e, 0x08, 0x44, 0x2e, 0x12, 0xa8, 0x07, 0x98, 0x09, 0x30, 0xa3, 0x8a, 0xe1, 0x35, 0xb0, 0x8b, + 0x57, 0xe6, 0x15, 0x83, 0xfe, 0x45, 0x93, 0x2c, 0xd1, 0x54, 0xe2, 0x68, 0x8c, 0x9c, 0x4a, 0x63, 0x64, 0x40, 0xec, + 0xe2, 0xf8, 0xf7, 0x94, 0x1e, 0x05, 0x29, 0xfb, 0x9c, 0x1b, 0xe2, 0x70, 0x14, 0x5f, 0xc1, 0xaa, 0x71, 0x3c, 0xd6, + 0xe6, 0xf5, 0x74, 0x56, 0xcf, 0x07, 0x22, 0x80, 0xff, 0x86, 0x82, 0xfd, 0xa2, 0xa9, 0xc8, 0x0d, 0x52, 0xe7, 0xf1, + 0x98, 0x82, 0x7c, 0xaa, 0x9b, 0xfc, 0x43, 0xee, 0xee, 0xa7, 0xb3, 0xb9, 0x35, 0x47, 0xaf, 0x6a, 0x5c, 0xb7, 0x56, + 0x37, 0x14, 0x12, 0xad, 0x69, 0x52, 0xdc, 0xe4, 0x93, 0x62, 0xc0, 0x2b, 0x5f, 0xa8, 0x2e, 0xb6, 0x46, 0xb0, 0xf0, + 0xe7, 0x16, 0x08, 0x93, 0x71, 0x2f, 0x3e, 0x59, 0xc8, 0x29, 0xed, 0xda, 0x6a, 0xb7, 0xb5, 0x49, 0xd3, 0x58, 0x35, + 0xbc, 0x86, 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, + 0x2d, 0x86, 0xff, 0x29, 0xdd, 0x9b, 0x53, 0x1b, 0xe4, 0x00, 0xb6, 0x7b, 0x0f, 0xb7, 0x63, 0xf4, 0x40, 0x06, 0x6f, + 0x04, 0x10, 0x8d, 0xaf, 0xa7, 0xd6, 0x8c, 0x89, 0x86, 0x05, 0x2b, 0x87, 0x91, 0x1f, 0x20, 0xe3, 0xe5, 0x14, 0x58, + 0xd9, 0x4f, 0x8a, 0xb8, 0xf6, 0x87, 0x91, 0x7f, 0xf5, 0x2c, 0xc8, 0xb8, 0x17, 0x0d, 0x3b, 0xbe, 0x00, 0x7b, 0xf5, + 0xd5, 0x33, 0x16, 0x0d, 0x78, 0x7e, 0x53, 0x4f, 0xb3, 0x60, 0x98, 0xb1, 0xe8, 0xa6, 0x18, 0x82, 0x0f, 0xed, 0xf3, + 0x72, 0x10, 0xfa, 0xbe, 0xd9, 0x39, 0x74, 0x37, 0x24, 0xf2, 0x08, 0xfb, 0x2b, 0xb8, 0xed, 0x6a, 0x89, 0x19, 0xe0, + 0x06, 0x56, 0x11, 0x33, 0xd8, 0xf2, 0x57, 0xcf, 0x0c, 0x97, 0x50, 0xfe, 0x5c, 0x6a, 0x36, 0x0a, 0x34, 0x27, 0xe7, + 0x68, 0x4e, 0x56, 0x42, 0x2d, 0xf9, 0xa4, 0xc2, 0xa9, 0x3a, 0x9f, 0x68, 0xbb, 0xd1, 0x18, 0x03, 0x17, 0xed, 0xb9, + 0x2d, 0x8c, 0xcc, 0x74, 0x91, 0xa2, 0x01, 0x0b, 0xcf, 0xc4, 0x29, 0x8d, 0x01, 0xed, 0xcb, 0x81, 0xa5, 0x0d, 0xf9, + 0xab, 0x9c, 0x19, 0x68, 0x1b, 0x52, 0x1a, 0x35, 0x03, 0x7f, 0xa6, 0x26, 0xcc, 0xaf, 0x60, 0x25, 0x82, 0xa8, 0x2e, + 0xc0, 0x24, 0xa9, 0xc8, 0x68, 0xa4, 0xac, 0x44, 0x72, 0x0e, 0x78, 0x1f, 0xc1, 0x93, 0x45, 0xec, 0x6a, 0x7f, 0x4a, + 0xff, 0xab, 0xc3, 0xe7, 0xda, 0x7f, 0x2a, 0x80, 0x85, 0x5c, 0x1a, 0x44, 0x06, 0x0a, 0x87, 0xd4, 0x54, 0x22, 0x4e, + 0x1c, 0xcf, 0xc0, 0xd7, 0x70, 0x81, 0xa6, 0x80, 0xfe, 0xa0, 0x66, 0x14, 0x91, 0x85, 0xbf, 0x7a, 0x76, 0x53, 0xb7, + 0x7a, 0x9e, 0x39, 0xaf, 0x41, 0x33, 0x03, 0x21, 0x3d, 0x4e, 0xd5, 0xdb, 0x90, 0xe8, 0xbc, 0xbc, 0xd4, 0x2f, 0x13, + 0x22, 0x59, 0x11, 0x79, 0xfa, 0x3e, 0x07, 0xf3, 0x88, 0x22, 0x74, 0x70, 0x65, 0x1e, 0x8f, 0x97, 0x82, 0xc2, 0x77, + 0x94, 0xe7, 0x03, 0x4e, 0xb3, 0x28, 0x01, 0x6d, 0x20, 0xab, 0x4c, 0x99, 0x9b, 0xa4, 0x65, 0xea, 0x3e, 0x80, 0x95, + 0x20, 0x47, 0x37, 0xa7, 0xa0, 0x50, 0x46, 0x82, 0x52, 0x5a, 0x0d, 0x42, 0xa9, 0x0e, 0x8b, 0x20, 0x72, 0xc8, 0x42, + 0xc0, 0xcd, 0x54, 0x34, 0x5a, 0xd2, 0xf0, 0x08, 0xe7, 0x06, 0x0a, 0x01, 0x48, 0xec, 0xa9, 0xa2, 0x8c, 0xcb, 0x61, + 0xce, 0xd6, 0x3c, 0x1c, 0xe2, 0xac, 0x49, 0x5b, 0x9e, 0x83, 0x38, 0x96, 0x4b, 0xbe, 0xc9, 0x11, 0x0c, 0x22, 0xf4, + 0x19, 0xf2, 0x27, 0xcb, 0xf9, 0x77, 0xe7, 0x30, 0xed, 0x08, 0x1f, 0x76, 0xb5, 0x05, 0x17, 0xb3, 0xbb, 0xf9, 0x04, + 0xe2, 0x5b, 0xee, 0xe6, 0xa7, 0x18, 0x22, 0x0b, 0x7f, 0xb0, 0x1a, 0x4a, 0xae, 0x28, 0x74, 0x59, 0x8f, 0x48, 0x91, + 0x3d, 0xdd, 0x70, 0x04, 0xc1, 0x81, 0x56, 0x0d, 0x32, 0x34, 0x12, 0x5f, 0x3d, 0x83, 0xac, 0xc1, 0x86, 0x7f, 0xce, + 0xc9, 0x59, 0xdd, 0x9f, 0x6c, 0xa1, 0x9a, 0x64, 0xb2, 0x56, 0x54, 0xce, 0x5f, 0xaf, 0xca, 0xf2, 0x6c, 0x55, 0x86, + 0xeb, 0x41, 0x57, 0x55, 0x96, 0x1c, 0xa9, 0x0d, 0xd0, 0x9a, 0xae, 0x10, 0x43, 0x21, 0x6b, 0xb0, 0xb4, 0xaa, 0xb2, + 0xa1, 0x3e, 0x81, 0x40, 0x1f, 0x60, 0x19, 0x35, 0xfb, 0xe9, 0xf0, 0x9f, 0xc1, 0x3f, 0x55, 0xc8, 0x52, 0x9d, 0xd6, + 0x99, 0xf8, 0x35, 0x58, 0x32, 0xfc, 0xe3, 0xb7, 0x60, 0x03, 0x58, 0x02, 0x64, 0xb9, 0xdb, 0xda, 0x68, 0xbd, 0xf2, + 0x0a, 0xf1, 0xae, 0xd6, 0x17, 0xfd, 0xd6, 0x6d, 0xa2, 0x56, 0x80, 0x11, 0x0a, 0x2d, 0x02, 0x6c, 0xf5, 0xc0, 0x3d, + 0x05, 0x3f, 0x10, 0xc3, 0xb9, 0x26, 0xad, 0xa9, 0x13, 0x5e, 0x67, 0xe3, 0x48, 0x44, 0xf5, 0x0e, 0x2e, 0xee, 0xf5, + 0xce, 0xe2, 0x6f, 0x54, 0x20, 0x00, 0xb2, 0x98, 0x62, 0xe3, 0xbc, 0x21, 0xbd, 0x32, 0xec, 0x24, 0xf4, 0xde, 0xb0, + 0x13, 0xc8, 0x8b, 0xc3, 0x4e, 0xa1, 0x4b, 0xb4, 0x9d, 0x22, 0x35, 0xd1, 0x76, 0xd2, 0x62, 0x1d, 0x96, 0x10, 0xfc, + 0xaa, 0xbd, 0x75, 0x94, 0xed, 0x8b, 0x2c, 0x61, 0xda, 0x02, 0x46, 0xb9, 0x55, 0x9f, 0x39, 0x45, 0xac, 0x95, 0xbd, + 0xd3, 0x49, 0x95, 0xbb, 0xc8, 0xa7, 0x56, 0x53, 0x64, 0xf2, 0x0f, 0xa7, 0x2d, 0x92, 0x4f, 0x7e, 0x6e, 0x37, 0x4c, + 0xa6, 0x7f, 0x3c, 0xf9, 0x02, 0xba, 0x22, 0x3b, 0x7d, 0x02, 0x01, 0x99, 0x0a, 0xaa, 0xd5, 0xad, 0x62, 0x9a, 0xb7, + 0xab, 0xec, 0xf6, 0x42, 0x89, 0xe1, 0x74, 0x76, 0x12, 0x1e, 0x6d, 0x86, 0x0c, 0x1c, 0x82, 0x40, 0x21, 0x54, 0x14, + 0xc3, 0x23, 0x50, 0x6b, 0x24, 0x1f, 0xe0, 0x47, 0xbb, 0x53, 0x41, 0xa4, 0x76, 0x53, 0x71, 0xe3, 0xe4, 0xa6, 0xeb, + 0xa5, 0x40, 0xad, 0x53, 0xb2, 0x02, 0x28, 0x21, 0xea, 0x4f, 0x62, 0x57, 0xbf, 0x84, 0x2b, 0x36, 0x3f, 0x34, 0x8a, + 0x9e, 0x5c, 0x9f, 0xa2, 0x6e, 0xc5, 0xd5, 0x69, 0xda, 0x6a, 0x8e, 0x1d, 0x67, 0xc8, 0xc1, 0xb3, 0x82, 0x60, 0x3b, + 0x2a, 0x51, 0xbe, 0x6d, 0x37, 0x1d, 0x13, 0x5b, 0xfd, 0xb3, 0xa8, 0xb6, 0x2b, 0xa8, 0x88, 0x88, 0x4f, 0xb2, 0x9b, + 0x27, 0xed, 0x77, 0xb0, 0xc7, 0x5a, 0x0d, 0x22, 0xfb, 0x0c, 0xae, 0x72, 0x9d, 0x16, 0xb9, 0x2d, 0x83, 0xf3, 0x0f, + 0xaf, 0x76, 0x15, 0x36, 0x39, 0xd6, 0xd5, 0xd5, 0x4c, 0x75, 0x52, 0xb1, 0x81, 0xb1, 0xa6, 0xb5, 0x54, 0xf3, 0x18, + 0x92, 0xee, 0xca, 0xe2, 0xac, 0x4a, 0xba, 0xe9, 0xb9, 0x71, 0xa6, 0x10, 0x03, 0x67, 0xab, 0xd1, 0x72, 0x86, 0x21, + 0xba, 0x3e, 0xcc, 0x12, 0xbf, 0xd5, 0x53, 0xee, 0xf3, 0x70, 0xe7, 0x77, 0xf5, 0x82, 0x93, 0xc9, 0x7e, 0x72, 0x9a, + 0xbb, 0x5d, 0xa4, 0xfd, 0xc4, 0xb7, 0x61, 0xfe, 0xf5, 0x0d, 0x62, 0x25, 0xea, 0x7f, 0x54, 0x00, 0x34, 0xb8, 0xcd, + 0x63, 0x89, 0x52, 0x7f, 0x50, 0xd5, 0x0f, 0x6a, 0xa6, 0x6a, 0x1a, 0x08, 0xe6, 0x54, 0x0a, 0xf8, 0xc3, 0xed, 0xc2, + 0x15, 0x8f, 0xb8, 0x61, 0x61, 0xfc, 0xd3, 0xab, 0xd9, 0xb9, 0xa0, 0x32, 0x70, 0x33, 0xfe, 0xd3, 0x13, 0xec, 0x1c, + 0xd6, 0x0a, 0xc8, 0x0a, 0x7f, 0x7a, 0xd5, 0x23, 0xef, 0xe7, 0xfc, 0x4f, 0x2f, 0x7f, 0xe4, 0x7d, 0xc4, 0x79, 0xf9, + 0x13, 0x49, 0x9d, 0x10, 0xd5, 0xe5, 0x4f, 0xc2, 0x14, 0x5b, 0xa7, 0xf9, 0x2b, 0x52, 0xf8, 0x04, 0x9f, 0x81, 0xef, + 0x70, 0x1d, 0xee, 0xcc, 0x6f, 0xf0, 0xd8, 0xb1, 0xd8, 0x76, 0xa9, 0x2f, 0xa0, 0x1c, 0x81, 0x45, 0x54, 0xf6, 0xdb, + 0xb9, 0xfd, 0x6a, 0x61, 0x94, 0x31, 0x76, 0x5f, 0xb2, 0x12, 0xa5, 0xb3, 0x7e, 0xbf, 0x90, 0x82, 0x91, 0x5d, 0x58, + 0xa3, 0x3d, 0x4a, 0xd5, 0xab, 0x6f, 0xc3, 0x3a, 0x4a, 0xd2, 0x7c, 0x25, 0xa3, 0x8f, 0x64, 0xd8, 0x91, 0xbe, 0x92, + 0x12, 0xed, 0xb5, 0x0a, 0xcb, 0xd1, 0xec, 0xd7, 0x25, 0x07, 0xca, 0xeb, 0x56, 0x50, 0xbe, 0x6a, 0x02, 0xe8, 0x95, + 0x6a, 0x9f, 0x01, 0x23, 0xa7, 0xb0, 0x54, 0x1e, 0xac, 0xc4, 0xb9, 0xe8, 0xb3, 0xe2, 0x78, 0xf4, 0x2c, 0x34, 0xf3, + 0x0a, 0x1e, 0x84, 0x3b, 0x0b, 0x23, 0x15, 0x2e, 0x84, 0xe2, 0x79, 0x85, 0xb1, 0x15, 0x15, 0x70, 0x20, 0xc3, 0x0f, + 0x08, 0xbc, 0x97, 0xfd, 0x2b, 0x18, 0x0c, 0x13, 0xdc, 0xc8, 0xa8, 0x93, 0x2b, 0xf6, 0x27, 0x06, 0x66, 0x50, 0x4f, + 0x6a, 0xf7, 0xd9, 0x83, 0x0a, 0xec, 0x85, 0x33, 0xa0, 0xbd, 0x1b, 0xa3, 0x9f, 0x55, 0xb1, 0x71, 0xd2, 0x3f, 0x15, + 0x1b, 0x48, 0xa6, 0xc3, 0xe2, 0x64, 0x9b, 0x86, 0x47, 0xf2, 0xe4, 0x38, 0xdd, 0xf4, 0x8f, 0xc7, 0x31, 0x7e, 0x1c, + 0xe5, 0xd7, 0x16, 0xf0, 0x2a, 0x6e, 0x21, 0x8d, 0x45, 0x8a, 0xde, 0x81, 0x98, 0x43, 0xd1, 0x4b, 0xf6, 0x5b, 0xc6, + 0xcb, 0x89, 0xa0, 0x94, 0x24, 0x36, 0xbc, 0x23, 0x3d, 0x4d, 0xeb, 0xd1, 0x4e, 0x06, 0xec, 0xd7, 0xa3, 0x3d, 0xfd, + 0x05, 0x8a, 0x47, 0x0b, 0x7f, 0x49, 0x7f, 0x17, 0x77, 0x73, 0xcf, 0xf9, 0xa6, 0xf1, 0x1d, 0x71, 0x81, 0x62, 0xcd, + 0xee, 0xaf, 0x69, 0xe9, 0xac, 0x03, 0xc1, 0x01, 0x6f, 0xb1, 0x8b, 0xf6, 0xfd, 0xc6, 0x75, 0x7a, 0x3a, 0x7c, 0xeb, + 0xd6, 0x28, 0xdf, 0xfb, 0x87, 0x44, 0x39, 0x38, 0xbc, 0x72, 0xd1, 0xfc, 0xed, 0xa7, 0x0c, 0x49, 0x85, 0xe6, 0x06, + 0xdb, 0xc9, 0x16, 0x61, 0x6d, 0x8c, 0x83, 0x9c, 0xad, 0xca, 0x30, 0x02, 0x06, 0x75, 0xec, 0x7f, 0xf4, 0xd9, 0xb4, + 0x21, 0xfb, 0x00, 0x50, 0xb9, 0x0a, 0x01, 0x7b, 0x00, 0x4e, 0x34, 0xc2, 0x0d, 0x70, 0xab, 0xd1, 0x92, 0x0e, 0xea, + 0xb6, 0x60, 0x20, 0x5a, 0xc2, 0xc6, 0x09, 0x5d, 0xdf, 0x57, 0x84, 0x8f, 0xca, 0xb7, 0x0f, 0xe5, 0xaf, 0x9e, 0xb3, + 0xff, 0xde, 0x61, 0x4d, 0x4d, 0xb9, 0x05, 0xcc, 0x9c, 0xb5, 0xc8, 0x2b, 0x84, 0x4e, 0x91, 0xdf, 0xab, 0xba, 0x12, + 0xc3, 0x65, 0x2d, 0xca, 0xce, 0xec, 0xd6, 0x89, 0xde, 0x39, 0x05, 0xb5, 0x54, 0x36, 0x20, 0x01, 0x6e, 0x20, 0xc5, + 0xb6, 0xc0, 0x92, 0xce, 0x06, 0x28, 0xfe, 0x0d, 0x2a, 0xed, 0xfe, 0xdf, 0x39, 0x13, 0xd4, 0x6c, 0xa3, 0xba, 0xbf, + 0xd2, 0x4f, 0x55, 0x4d, 0x62, 0x01, 0x2e, 0x27, 0x69, 0xde, 0xf1, 0x08, 0xab, 0x7f, 0x9a, 0x2c, 0x45, 0xa0, 0x57, + 0x11, 0xed, 0x4a, 0x40, 0x82, 0x76, 0x76, 0x16, 0x2a, 0x02, 0x05, 0xfa, 0xfa, 0x0f, 0xdb, 0x34, 0x8b, 0xe5, 0x6a, + 0xb6, 0x87, 0x89, 0xb2, 0x58, 0x0f, 0x11, 0xe4, 0xcc, 0xd4, 0xc1, 0x7e, 0x4f, 0x33, 0x9a, 0x85, 0x37, 0xa6, 0x04, + 0x97, 0xe2, 0x2a, 0x2a, 0x72, 0xf0, 0x39, 0xc4, 0x17, 0x3e, 0x15, 0x72, 0x83, 0x88, 0xa6, 0x3f, 0xe4, 0x9e, 0x79, + 0x83, 0x85, 0x92, 0x9f, 0x10, 0x7f, 0xc9, 0xda, 0x18, 0xf7, 0x4b, 0xa7, 0xda, 0x2f, 0x15, 0x82, 0xfb, 0xcf, 0xb6, + 0xd8, 0xa8, 0xf2, 0x44, 0x8f, 0x3e, 0xc5, 0xfa, 0x9f, 0x2d, 0xa0, 0x54, 0xf7, 0x6d, 0x70, 0x2a, 0x1e, 0x85, 0xdb, + 0xba, 0xb8, 0x45, 0x68, 0x81, 0x72, 0x54, 0x15, 0xdb, 0x32, 0x22, 0x4e, 0xd8, 0x6d, 0x5d, 0xf4, 0x34, 0x07, 0x3a, + 0x75, 0x58, 0x9a, 0xc8, 0x13, 0xa1, 0xdd, 0x82, 0xee, 0x69, 0x8e, 0x95, 0x78, 0x21, 0x4b, 0x07, 0x59, 0x27, 0xd2, + 0x84, 0xca, 0x5d, 0x5d, 0x75, 0x52, 0x2a, 0x75, 0xc3, 0xeb, 0x54, 0x33, 0xfe, 0x2e, 0xcd, 0x9f, 0x58, 0xf6, 0xeb, + 0xd6, 0x6f, 0xb5, 0xda, 0x1b, 0xab, 0x47, 0x25, 0x6b, 0x8e, 0xb3, 0x09, 0x49, 0xe9, 0x13, 0xb6, 0x9b, 0x49, 0xd7, + 0x3a, 0xf0, 0x24, 0xb8, 0x1c, 0x7a, 0x02, 0x2a, 0x06, 0x4d, 0xbc, 0xdd, 0x05, 0xea, 0x11, 0x78, 0x06, 0xaa, 0x19, + 0x24, 0xd7, 0x01, 0xbf, 0xac, 0xb5, 0x3c, 0x65, 0x84, 0x61, 0xb5, 0xb3, 0x68, 0x39, 0x58, 0x49, 0x78, 0xae, 0x08, + 0x5c, 0xbb, 0x12, 0x78, 0x35, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, + 0xa7, 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, + 0x36, 0x9f, 0x43, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, + 0xcf, 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, + 0x76, 0x7a, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, + 0x88, 0xc2, 0x2c, 0xfb, 0x6b, 0x51, 0xfc, 0x51, 0xe9, 0x3b, 0x02, 0x1d, 0xdd, 0x79, 0x51, 0xa7, 0xcb, 0xfd, 0x07, + 0xc2, 0x78, 0xf2, 0xea, 0x13, 0xa2, 0x5b, 0xdf, 0x67, 0xee, 0x57, 0x80, 0x1b, 0xc1, 0x1d, 0x44, 0x7b, 0xb7, 0xd4, + 0x27, 0xb5, 0xfa, 0x5a, 0xaf, 0x9d, 0xa7, 0xe7, 0x37, 0x9d, 0xdb, 0xef, 0xa1, 0x39, 0xd9, 0x7a, 0x4f, 0x0b, 0x6b, + 0x65, 0xe9, 0xa9, 0x2a, 0xd8, 0x9b, 0xe5, 0xb9, 0x2a, 0x98, 0x3c, 0xf0, 0x9a, 0xfd, 0x82, 0x06, 0x57, 0x3a, 0xd9, + 0x78, 0xcf, 0xd4, 0xc0, 0x2d, 0x0a, 0x4b, 0x87, 0x5f, 0x72, 0x33, 0x79, 0x89, 0xfb, 0x4b, 0x45, 0x2e, 0xf6, 0x9d, + 0x33, 0xba, 0x33, 0xb3, 0xee, 0x55, 0x85, 0xab, 0x05, 0xb9, 0x3a, 0xb0, 0xb5, 0xec, 0xe2, 0x70, 0xc3, 0x22, 0x0a, + 0x10, 0x88, 0xe9, 0x95, 0x5a, 0xfb, 0x13, 0x1a, 0x84, 0x6a, 0x30, 0xf0, 0x0b, 0x0c, 0x56, 0x05, 0x0a, 0x1f, 0x28, + 0x92, 0xbf, 0xf2, 0x04, 0xec, 0xe2, 0x19, 0xa0, 0x5b, 0xb1, 0x59, 0x31, 0x42, 0x84, 0x4c, 0x56, 0xb1, 0x9a, 0xce, + 0x20, 0x9f, 0xfa, 0xe2, 0x1b, 0x5b, 0x75, 0x3e, 0x6f, 0x6b, 0xaa, 0x9c, 0x3b, 0x14, 0xba, 0xbb, 0xa9, 0x3b, 0xb7, + 0x2e, 0xf2, 0xdc, 0x21, 0xe4, 0x4a, 0xc5, 0x4a, 0x4c, 0x43, 0xcd, 0x93, 0x34, 0xa3, 0xfe, 0x62, 0x9f, 0x8a, 0x1a, + 0x85, 0x53, 0xfe, 0x74, 0x0c, 0xaa, 0x70, 0x55, 0x43, 0x1c, 0x4b, 0x55, 0x3c, 0xb2, 0x41, 0xa0, 0x79, 0x75, 0xa7, + 0x92, 0x26, 0x64, 0x72, 0x23, 0x7c, 0x6a, 0x52, 0xca, 0xd3, 0xb4, 0x49, 0x2b, 0x45, 0xea, 0xe0, 0x83, 0x3a, 0xd5, + 0x78, 0x6e, 0xe6, 0xcf, 0x01, 0xcc, 0xb8, 0xba, 0xe1, 0xd7, 0x8a, 0xcb, 0xa8, 0xad, 0xcc, 0xa4, 0xfd, 0xc9, 0xd1, + 0xd8, 0x28, 0x56, 0xe3, 0x46, 0x19, 0x61, 0xa5, 0x34, 0x27, 0xc5, 0x72, 0x3c, 0xff, 0x80, 0xc1, 0x9a, 0x27, 0xb0, + 0x83, 0x89, 0x4a, 0x79, 0x1f, 0x01, 0xf1, 0x75, 0x92, 0xae, 0x12, 0x48, 0x91, 0xfe, 0xa5, 0x4b, 0xee, 0x32, 0x36, + 0x10, 0x63, 0x56, 0xcc, 0x8c, 0xfe, 0x07, 0x77, 0x49, 0x7f, 0x12, 0x02, 0xe0, 0x26, 0x9a, 0x42, 0xa7, 0xce, 0x93, + 0xab, 0x2a, 0x58, 0x5e, 0x79, 0x68, 0xc5, 0x88, 0x07, 0xff, 0xf9, 0x3c, 0x44, 0x10, 0x73, 0x4c, 0xf1, 0xf4, 0x0b, + 0xa3, 0xff, 0x08, 0xae, 0x31, 0x82, 0xd0, 0xdd, 0x3b, 0x87, 0x21, 0xdc, 0xec, 0x41, 0x06, 0xf5, 0x87, 0x3a, 0x24, + 0x6a, 0xf8, 0xd7, 0xdc, 0x83, 0xfe, 0xaf, 0x33, 0x61, 0xa9, 0xfd, 0xf4, 0x74, 0x00, 0x15, 0xbc, 0xaf, 0x78, 0x1b, + 0x11, 0xdf, 0x27, 0x7e, 0x1a, 0x0f, 0xb6, 0x4f, 0xb7, 0x60, 0xad, 0xfb, 0x50, 0x19, 0xeb, 0x2a, 0x61, 0x03, 0x01, + 0x5f, 0xa3, 0xa8, 0x3d, 0xaf, 0xdd, 0xee, 0xc1, 0x7f, 0xfa, 0x57, 0x21, 0x03, 0x26, 0x4e, 0xdf, 0x67, 0x4e, 0xd6, + 0xe8, 0x2a, 0x93, 0xe9, 0x43, 0x27, 0x7d, 0xab, 0xd3, 0x7d, 0x27, 0xfc, 0x23, 0x67, 0x16, 0x1f, 0x6e, 0xe9, 0x2b, + 0x4d, 0x8a, 0x3b, 0x60, 0x65, 0xf3, 0xa8, 0x20, 0xd4, 0xb9, 0x88, 0xbe, 0x32, 0xe5, 0x5b, 0x42, 0xcd, 0xa1, 0xb1, + 0xa4, 0x94, 0xee, 0x35, 0xf4, 0x3a, 0xad, 0xf5, 0xdb, 0x28, 0xc1, 0x98, 0xe8, 0x78, 0xf2, 0x32, 0x1e, 0x2b, 0xef, + 0xe3, 0x71, 0x23, 0x15, 0xf2, 0x00, 0x44, 0xa0, 0x62, 0xfc, 0xe9, 0xca, 0x53, 0x91, 0x5e, 0x18, 0xaf, 0x42, 0x29, + 0x28, 0x0c, 0xe8, 0x0a, 0xa4, 0x80, 0x47, 0xed, 0x89, 0xce, 0xc2, 0x2e, 0xe1, 0x1e, 0xdd, 0x04, 0x8c, 0xf5, 0xf9, + 0xaf, 0xb9, 0x97, 0x33, 0xe1, 0x0e, 0x2f, 0x06, 0xa8, 0x4d, 0xbd, 0xba, 0xfb, 0xb8, 0x56, 0xe7, 0x70, 0x08, 0x0e, + 0x56, 0x83, 0x08, 0x4e, 0xe7, 0x73, 0x47, 0xb3, 0x2c, 0x40, 0xe5, 0x64, 0x95, 0x91, 0x37, 0x4f, 0x16, 0xbd, 0xba, + 0xef, 0x2d, 0xd3, 0xb2, 0xaa, 0x83, 0x8c, 0x65, 0x61, 0x05, 0xb8, 0x3a, 0xb4, 0x7e, 0x10, 0x2e, 0x0b, 0xe7, 0x0f, + 0x84, 0x20, 0x76, 0xaf, 0xb6, 0x25, 0xd7, 0x47, 0xf5, 0xd3, 0x67, 0x6c, 0xc3, 0x25, 0xea, 0xa4, 0x33, 0x11, 0x80, + 0xd8, 0x53, 0xb3, 0x8a, 0x6e, 0x80, 0xa4, 0x4e, 0xb3, 0x8a, 0x6e, 0xa8, 0xd9, 0xc6, 0x38, 0x00, 0xca, 0x58, 0xc0, + 0xbe, 0x9b, 0x8e, 0x83, 0xf5, 0xd3, 0x58, 0x5e, 0x87, 0x56, 0x4f, 0xb7, 0xca, 0x67, 0x50, 0xb7, 0xda, 0x18, 0x13, + 0xdb, 0xcd, 0x97, 0x73, 0xfd, 0x6e, 0xb0, 0xf4, 0xed, 0xa0, 0x39, 0xa7, 0xec, 0x95, 0x2e, 0x7b, 0x6d, 0x97, 0x4d, + 0x3d, 0x77, 0x52, 0xb4, 0x1a, 0x03, 0x7a, 0x03, 0x0b, 0xd6, 0xe7, 0x22, 0xcd, 0x56, 0xa5, 0x2a, 0x01, 0x2f, 0x8c, + 0x35, 0x5b, 0xf9, 0x8d, 0xcc, 0x90, 0x84, 0x79, 0x9c, 0x89, 0xb7, 0x74, 0xaf, 0x85, 0xc9, 0x71, 0x2a, 0x92, 0x29, + 0xa1, 0x53, 0xba, 0xb3, 0x0d, 0x9d, 0xab, 0x30, 0x8a, 0x68, 0xad, 0xa4, 0xd2, 0x48, 0x60, 0x6a, 0x06, 0x28, 0x99, + 0x2b, 0x70, 0x4a, 0x97, 0xfb, 0xdf, 0x89, 0x18, 0x67, 0xbe, 0x28, 0x99, 0x01, 0xdd, 0xf2, 0xeb, 0x62, 0xd3, 0x4a, + 0x91, 0x11, 0xe6, 0xcd, 0x69, 0x7b, 0x5d, 0x1f, 0x02, 0xb9, 0x5a, 0x0e, 0x28, 0x1a, 0x07, 0x85, 0x0e, 0x97, 0x2a, + 0x01, 0xf6, 0x45, 0xe2, 0x67, 0x84, 0x2d, 0xed, 0x81, 0xdc, 0x1e, 0x9d, 0x09, 0x73, 0xc9, 0x49, 0x59, 0x76, 0x29, + 0xcd, 0xe0, 0x72, 0xe2, 0x4a, 0x70, 0x91, 0xde, 0xae, 0xa7, 0x49, 0x4b, 0xdb, 0xc7, 0x86, 0x73, 0x34, 0xb4, 0x0d, + 0xba, 0x63, 0x7f, 0x68, 0x2e, 0x16, 0xb1, 0x75, 0xb1, 0x18, 0x76, 0x66, 0x3f, 0x59, 0x2c, 0x40, 0x0e, 0x00, 0x47, + 0xdd, 0x96, 0x8f, 0xd9, 0x12, 0x38, 0xad, 0xa6, 0xd9, 0xd4, 0xdb, 0xf2, 0xfc, 0xa9, 0xea, 0xe9, 0x25, 0xaf, 0x9e, + 0x0a, 0x33, 0x16, 0x5b, 0x5e, 0x3d, 0xb5, 0x8e, 0x9c, 0xfc, 0xa9, 0x50, 0xa2, 0x75, 0x01, 0xcd, 0xc0, 0x6b, 0x0a, + 0x18, 0xb1, 0x64, 0x32, 0xa5, 0x8a, 0x3c, 0xee, 0x4d, 0xb7, 0x6a, 0xf0, 0x82, 0xc2, 0x21, 0x90, 0xd2, 0xe9, 0x57, + 0xcf, 0x98, 0x7e, 0xef, 0xea, 0x59, 0x87, 0xac, 0x6d, 0x98, 0x2e, 0xb7, 0xc3, 0x64, 0x50, 0xfa, 0x4f, 0xcd, 0xc4, + 0xb8, 0xb2, 0x26, 0x09, 0x20, 0xfe, 0x8d, 0xfd, 0x0e, 0x29, 0xdc, 0xbc, 0xbf, 0x1c, 0xc6, 0x8f, 0xbc, 0x1f, 0x23, + 0x7b, 0x92, 0x66, 0x88, 0x35, 0x93, 0x0a, 0xb9, 0xfb, 0x6a, 0xfd, 0x63, 0x62, 0x37, 0xd9, 0x03, 0x0b, 0x40, 0x6c, + 0x4d, 0x5b, 0xdd, 0xf2, 0x7e, 0xdf, 0x33, 0x45, 0x80, 0x1f, 0x94, 0x7f, 0x72, 0x67, 0x48, 0x06, 0x65, 0xd7, 0x0d, + 0x21, 0x1e, 0x94, 0x4d, 0xd3, 0x5e, 0x6f, 0x07, 0x67, 0x1e, 0xab, 0xeb, 0xb4, 0xb3, 0xb8, 0x5a, 0x64, 0x90, 0x56, + 0x1f, 0xb2, 0xd3, 0xcc, 0x3e, 0x3b, 0x59, 0x2a, 0xdd, 0xef, 0x43, 0x44, 0xdc, 0x49, 0xd6, 0xf6, 0xdb, 0x2d, 0xb8, + 0x86, 0x93, 0x41, 0xe8, 0xca, 0xde, 0x2e, 0xa3, 0x8d, 0x0b, 0x71, 0xda, 0x33, 0x9d, 0x2f, 0xf8, 0xf2, 0x28, 0xed, + 0x3c, 0x38, 0xd5, 0x13, 0x7d, 0x6e, 0xba, 0xab, 0x4c, 0xae, 0x75, 0x58, 0x8d, 0x41, 0x6d, 0x16, 0xb6, 0x70, 0x17, + 0xb6, 0xd1, 0x41, 0x6b, 0x5f, 0x16, 0xfc, 0x53, 0x06, 0xe0, 0x4b, 0xcf, 0x96, 0x5d, 0xaf, 0x49, 0xab, 0xd7, 0x32, + 0x0a, 0xb1, 0xa5, 0xed, 0xd5, 0xa7, 0xa3, 0x7c, 0xdc, 0x9c, 0x51, 0x5c, 0xc8, 0x51, 0x7e, 0xf4, 0x1a, 0xa2, 0xae, + 0x75, 0x1d, 0x17, 0x8b, 0x0e, 0x37, 0xae, 0xba, 0xed, 0xc6, 0xf5, 0x23, 0xe2, 0xad, 0xd1, 0x26, 0x85, 0x5a, 0x19, + 0x3b, 0x82, 0x97, 0x55, 0xc3, 0x21, 0x13, 0xc3, 0xa1, 0x84, 0x4c, 0x7d, 0xec, 0xde, 0xd0, 0xb4, 0xcf, 0x4f, 0x5b, + 0x3f, 0x62, 0xa9, 0x71, 0x14, 0x1b, 0xde, 0xf9, 0x3b, 0x8f, 0xad, 0x71, 0x25, 0x5f, 0x06, 0xb3, 0x5d, 0x41, 0xb5, + 0x35, 0xde, 0xb0, 0x57, 0xf1, 0x1f, 0x72, 0xa9, 0xe4, 0x6f, 0x7f, 0x86, 0x6b, 0x78, 0x6b, 0x4b, 0x07, 0x4d, 0x35, + 0xab, 0x98, 0xb9, 0x17, 0x9c, 0x7e, 0xdc, 0xbd, 0x22, 0x18, 0xfc, 0x9e, 0x8e, 0x82, 0x5c, 0x2c, 0xd5, 0x1a, 0x50, + 0x90, 0x4e, 0xec, 0x98, 0xca, 0x02, 0xc3, 0x00, 0xde, 0x90, 0x01, 0xf2, 0x98, 0xc2, 0xdd, 0x50, 0xe1, 0x85, 0xbf, + 0xe4, 0x64, 0x97, 0xc0, 0xb6, 0x66, 0x7c, 0xcc, 0x70, 0x07, 0x21, 0xff, 0x08, 0xb6, 0x62, 0x6b, 0x76, 0xc7, 0x16, + 0x0c, 0xc9, 0xc6, 0x71, 0x18, 0x63, 0x3e, 0x9e, 0xc4, 0x37, 0x62, 0x12, 0x0f, 0x78, 0x84, 0x8e, 0x11, 0x1b, 0x5e, + 0xcf, 0x62, 0x39, 0x80, 0x6c, 0xc5, 0x95, 0x0e, 0x08, 0xa1, 0xb1, 0xa1, 0x25, 0xaf, 0x0b, 0x83, 0x8b, 0x1d, 0xfb, + 0x2c, 0x47, 0x91, 0x8c, 0x43, 0xb0, 0x68, 0x55, 0x03, 0x0b, 0x13, 0xbb, 0xe3, 0xc5, 0x6c, 0x3d, 0xc7, 0x7f, 0x8e, + 0x47, 0x04, 0xc0, 0x0e, 0x0e, 0x0d, 0x5b, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x2b, 0xcb, 0xd3, 0x85, 0xdd, 0xf3, 0xb7, + 0x7c, 0xcc, 0x2e, 0x7f, 0xf4, 0x20, 0x72, 0xf6, 0xf2, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xbb, 0xd4, 0xcb, 0xd9, 0x1d, + 0x51, 0x10, 0xde, 0x81, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0xbe, 0xe5, 0x0b, 0x8c, 0x15, 0xbb, 0x48, 0x97, 0x1e, 0x66, + 0x84, 0xda, 0xd3, 0xf9, 0xb2, 0x51, 0x93, 0x70, 0x7b, 0xb3, 0x9c, 0x0c, 0x06, 0x5b, 0x7f, 0xcf, 0x37, 0xc0, 0x07, + 0x73, 0xf9, 0xa3, 0xb7, 0xa7, 0x72, 0xe1, 0x3f, 0xaf, 0xb3, 0xe4, 0xbd, 0xcf, 0xde, 0x0e, 0xf8, 0x02, 0xf0, 0x96, + 0xd0, 0x81, 0xeb, 0xde, 0x67, 0x12, 0xaf, 0xed, 0xad, 0xbe, 0x46, 0x20, 0x91, 0x2f, 0x00, 0x23, 0x26, 0xe6, 0xf7, + 0x5b, 0x88, 0xc0, 0x48, 0xc0, 0xb7, 0x55, 0x7b, 0xc4, 0xef, 0xb8, 0x01, 0xfc, 0xca, 0x7c, 0xf6, 0xc0, 0x43, 0xfd, + 0x33, 0xf1, 0xd9, 0x2d, 0x7f, 0xcf, 0x9f, 0x7b, 0x52, 0x92, 0x2e, 0x67, 0xef, 0xe7, 0x70, 0x3d, 0x94, 0xf2, 0x74, + 0x48, 0x3f, 0x1b, 0x83, 0x01, 0x84, 0x42, 0xe6, 0xad, 0x07, 0xac, 0x49, 0x21, 0xfe, 0x05, 0x7c, 0x3b, 0x4a, 0xd8, + 0xbc, 0xf5, 0x76, 0xbe, 0x96, 0x37, 0x6f, 0xbd, 0x07, 0x9f, 0xa2, 0x00, 0xab, 0xa0, 0x94, 0x05, 0x56, 0x41, 0xd8, + 0x68, 0x23, 0x8c, 0x81, 0xab, 0x77, 0x8d, 0xa1, 0xae, 0xe7, 0x88, 0x6d, 0x2b, 0x7d, 0x17, 0xbe, 0x83, 0x0c, 0xf8, + 0xe0, 0x75, 0x51, 0x12, 0x7d, 0x4e, 0x4d, 0x91, 0xb4, 0xee, 0xb9, 0xdf, 0x5a, 0x77, 0xb4, 0xa6, 0xd4, 0x47, 0x6e, + 0xc6, 0xc7, 0x63, 0xfd, 0x5c, 0x68, 0x91, 0x60, 0x0a, 0x1a, 0xd7, 0xa0, 0x2d, 0x40, 0xd0, 0xe7, 0x01, 0xb2, 0x96, + 0x14, 0x0b, 0xbe, 0xfd, 0x15, 0x62, 0xf0, 0xca, 0xf4, 0xce, 0xe5, 0x2a, 0x23, 0x61, 0x7b, 0xe1, 0xd7, 0xc3, 0xda, + 0x9f, 0x38, 0xb5, 0xb0, 0xb4, 0x9a, 0x83, 0xfa, 0xa9, 0x2d, 0xc7, 0xa9, 0xaa, 0xfd, 0x4b, 0x92, 0x54, 0xbb, 0x4a, + 0xcb, 0xe9, 0xbd, 0x7d, 0xd3, 0x65, 0x82, 0x8d, 0xfd, 0x80, 0xaa, 0x23, 0xab, 0x61, 0xf7, 0x85, 0xfa, 0xa2, 0xa7, + 0x64, 0x42, 0xf3, 0x51, 0x45, 0xf3, 0xec, 0x7e, 0xb3, 0xa3, 0xfe, 0xd3, 0xeb, 0xa1, 0x08, 0x90, 0xac, 0xd2, 0x62, + 0x29, 0x72, 0x36, 0xf6, 0xd3, 0x61, 0x92, 0xa9, 0xf0, 0x82, 0x74, 0x74, 0xf7, 0x1b, 0xf7, 0xb7, 0xdc, 0x40, 0xd6, + 0x68, 0xd5, 0x06, 0x63, 0xa5, 0x68, 0x19, 0xac, 0x6f, 0xc6, 0xfd, 0xbe, 0xb8, 0x19, 0x4f, 0x45, 0x50, 0x03, 0x71, + 0x91, 0x78, 0x3e, 0x9e, 0xd6, 0xc4, 0x92, 0xda, 0x15, 0x18, 0xa3, 0xc7, 0x55, 0x51, 0xfb, 0xd4, 0xcf, 0x21, 0x14, + 0xa9, 0xd6, 0xcc, 0xb1, 0xc6, 0x8d, 0x11, 0x71, 0x87, 0x95, 0x6b, 0xa7, 0xf6, 0x3a, 0x00, 0xcb, 0xab, 0x71, 0x41, + 0xd8, 0x26, 0xa7, 0xce, 0x05, 0xac, 0x46, 0x43, 0xaa, 0xdd, 0x70, 0xeb, 0x65, 0xe7, 0x37, 0x8f, 0x13, 0x5b, 0x1b, + 0xe1, 0x96, 0x02, 0xca, 0x28, 0xbf, 0xb1, 0x9c, 0xb0, 0x3b, 0xd5, 0x3b, 0x52, 0xb5, 0x23, 0xce, 0x5c, 0xc0, 0x2a, + 0xc3, 0x53, 0xab, 0x6f, 0x62, 0x70, 0x22, 0xe4, 0xad, 0x74, 0xbc, 0xf6, 0x23, 0xee, 0x57, 0xf7, 0x75, 0xaf, 0x04, + 0x3f, 0x09, 0x79, 0xfd, 0x96, 0x77, 0x00, 0x58, 0xf1, 0x21, 0x2f, 0xa6, 0x85, 0xa3, 0x75, 0x19, 0x94, 0x01, 0x22, + 0x34, 0x03, 0xa0, 0x93, 0xab, 0x83, 0x28, 0x0d, 0x5c, 0x71, 0x87, 0x08, 0x3f, 0x8d, 0x9e, 0x56, 0xcf, 0xc3, 0xa7, + 0xf9, 0x34, 0xbc, 0xaa, 0x82, 0xe8, 0x2a, 0x0f, 0xa2, 0xa7, 0xf9, 0x4d, 0xf8, 0xb4, 0x9a, 0x46, 0x57, 0x55, 0x10, + 0x5e, 0xe5, 0x8d, 0x7d, 0xd7, 0xee, 0xee, 0x09, 0x79, 0xdb, 0xd5, 0x1f, 0xb9, 0x54, 0xf6, 0x94, 0xe9, 0xe5, 0x65, + 0xad, 0x57, 0x6a, 0xb7, 0xb9, 0x5e, 0xa3, 0x66, 0xea, 0xa3, 0xec, 0x2f, 0xb6, 0xb1, 0xf0, 0x64, 0x0e, 0xa1, 0xcf, + 0x48, 0x8b, 0xb9, 0xc7, 0xb9, 0xde, 0x1c, 0x48, 0x61, 0x60, 0xc4, 0xa4, 0x92, 0x91, 0xd3, 0x0b, 0x5c, 0x84, 0x72, + 0xc4, 0xb0, 0x96, 0xae, 0xf6, 0x59, 0x97, 0xde, 0x40, 0x5d, 0x53, 0xec, 0x6b, 0xc8, 0xc0, 0x8b, 0xa6, 0xd7, 0xc1, + 0x18, 0x90, 0x23, 0xf0, 0x8e, 0xcf, 0x96, 0x70, 0x60, 0x6e, 0x00, 0xfa, 0xe6, 0x51, 0x5f, 0x97, 0x15, 0xdf, 0xa8, + 0xbe, 0x99, 0x6e, 0x46, 0x4a, 0xf9, 0xb1, 0xe6, 0xab, 0xab, 0x67, 0xec, 0x8e, 0x6b, 0x54, 0x94, 0x5f, 0xf4, 0x62, + 0xbd, 0x07, 0xae, 0xba, 0x5f, 0xe0, 0x36, 0x8b, 0xc7, 0xae, 0x3c, 0x60, 0xd9, 0x8e, 0x3d, 0xb0, 0x5b, 0xf6, 0x9e, + 0x3d, 0x61, 0x6f, 0xd8, 0x17, 0xf6, 0x13, 0xaa, 0x36, 0x94, 0x90, 0xe7, 0x2f, 0xf8, 0x9d, 0x34, 0x3d, 0x4a, 0x54, + 0xb2, 0x07, 0xdb, 0x4c, 0x33, 0xdc, 0xb2, 0xf7, 0x7c, 0x31, 0x5c, 0xb3, 0x37, 0x90, 0x0d, 0x65, 0xe2, 0xc1, 0x9a, + 0xfd, 0xc4, 0x15, 0x88, 0x99, 0x3e, 0x0b, 0x4b, 0x4b, 0x54, 0x34, 0x65, 0xa2, 0x0c, 0xfd, 0x86, 0xe3, 0x8b, 0xec, + 0x27, 0x2c, 0x42, 0x7e, 0x66, 0xb8, 0x66, 0x0f, 0x7c, 0x31, 0x58, 0xb3, 0xf7, 0xda, 0x40, 0x34, 0xd8, 0xba, 0xa5, + 0x11, 0x92, 0x95, 0x2e, 0x4b, 0x4a, 0xd3, 0x3b, 0xfb, 0x1a, 0xb8, 0x65, 0xb7, 0x58, 0xbb, 0x27, 0x58, 0x34, 0x0a, + 0xfc, 0x83, 0x35, 0xfb, 0xc2, 0x25, 0x80, 0x9a, 0x5b, 0x9e, 0xf4, 0x0a, 0xd5, 0x05, 0xd2, 0xfd, 0xe0, 0x09, 0xa7, + 0x17, 0xd9, 0x17, 0x2c, 0x83, 0xbe, 0x32, 0x5c, 0xb3, 0x1d, 0xd6, 0xee, 0xd6, 0x58, 0xb6, 0xac, 0xea, 0x49, 0x44, + 0x60, 0x14, 0x54, 0x4a, 0xcb, 0xbf, 0x11, 0xcb, 0xa6, 0x6e, 0x1a, 0xd4, 0x86, 0xfe, 0x7c, 0x30, 0xfa, 0x0f, 0x5f, + 0xbf, 0xfb, 0xc1, 0x2b, 0xf5, 0xb5, 0xf7, 0x17, 0xc7, 0xb5, 0xb2, 0x44, 0xd7, 0xca, 0x5f, 0x79, 0x39, 0xfb, 0x65, + 0x3e, 0xd1, 0xb5, 0xa4, 0x1d, 0x86, 0x7c, 0x4d, 0x67, 0xbf, 0x74, 0x38, 0x5b, 0xfe, 0xea, 0xfb, 0x8d, 0xe9, 0x62, + 0xf5, 0x59, 0xdd, 0xbb, 0x0f, 0x83, 0x6d, 0xe3, 0xd4, 0x7b, 0x7f, 0xbe, 0xde, 0xd8, 0xcc, 0x5a, 0x7b, 0x66, 0xfe, + 0x0f, 0x57, 0x7a, 0x87, 0x43, 0x77, 0xcb, 0x77, 0xc3, 0xad, 0x3d, 0x0a, 0xf2, 0xfb, 0x52, 0x69, 0x9c, 0xd5, 0xfc, + 0x85, 0x97, 0x77, 0x49, 0xb1, 0x80, 0x68, 0xf4, 0xc9, 0x48, 0x42, 0xd7, 0xcc, 0xc4, 0x33, 0xc4, 0x57, 0x19, 0x20, + 0x73, 0x81, 0x68, 0x76, 0xcf, 0xc7, 0x93, 0xfb, 0x9b, 0x78, 0x72, 0x3f, 0xe0, 0x9f, 0x4c, 0x0b, 0xda, 0x8b, 0xed, + 0xde, 0x67, 0xbf, 0xf2, 0xc2, 0x5e, 0x8e, 0xbf, 0xf8, 0xec, 0x9d, 0x70, 0x57, 0xe8, 0x2f, 0x3e, 0xfb, 0x22, 0xf8, + 0xaf, 0x23, 0x4d, 0x94, 0xc1, 0xbe, 0xd4, 0xfc, 0xd7, 0x11, 0x32, 0x7e, 0xb0, 0xcf, 0x82, 0xbf, 0x03, 0xdf, 0xef, + 0x2a, 0x41, 0xab, 0xf8, 0xe7, 0x5a, 0xfd, 0x7c, 0x2f, 0xe3, 0x72, 0xe0, 0x4d, 0x68, 0x05, 0xbd, 0x79, 0x57, 0xcb, + 0x9f, 0xc4, 0xc3, 0x91, 0xaa, 0xa7, 0x86, 0x7f, 0x16, 0x8b, 0x59, 0xd4, 0x27, 0xe9, 0x54, 0xde, 0xe4, 0x2d, 0xcf, + 0xa4, 0x75, 0xf9, 0x1e, 0x42, 0x81, 0xdf, 0xda, 0x10, 0x05, 0x7b, 0x8e, 0x1b, 0xc1, 0x5b, 0x06, 0xf0, 0x91, 0xd9, + 0x74, 0xc7, 0x6f, 0xf9, 0x13, 0xfe, 0x85, 0xef, 0x83, 0x07, 0xfe, 0x9e, 0xbf, 0xe1, 0x3f, 0xf1, 0x3d, 0x5b, 0x4a, + 0xb4, 0xd3, 0x7a, 0x77, 0x1d, 0xec, 0x58, 0xbd, 0xbf, 0x0e, 0x1e, 0x58, 0xbd, 0x7b, 0x16, 0xdc, 0xb2, 0x7a, 0xff, + 0x2c, 0x78, 0xcf, 0x76, 0xd7, 0xc1, 0x13, 0xb6, 0xbf, 0x0e, 0xde, 0xb0, 0xdd, 0xb3, 0xe0, 0x0b, 0xdb, 0x3f, 0x0b, + 0x7e, 0x92, 0x18, 0x0f, 0x5f, 0x84, 0xe4, 0x38, 0xf9, 0x52, 0x33, 0xc3, 0xa7, 0x1b, 0x7c, 0x16, 0xd6, 0x2f, 0xaa, + 0x63, 0xf0, 0xb9, 0x66, 0xba, 0xc5, 0x81, 0x10, 0x4c, 0xb7, 0x37, 0xb8, 0xa3, 0x27, 0xa6, 0x55, 0x41, 0x2a, 0x58, + 0x57, 0x3b, 0x83, 0x45, 0xdd, 0xb4, 0xce, 0x64, 0xc7, 0x2f, 0x31, 0xee, 0xf0, 0x4b, 0x5c, 0xb0, 0x65, 0xd3, 0xe9, + 0xa4, 0x73, 0xfe, 0x24, 0xd0, 0x9b, 0xbf, 0xde, 0xf5, 0x73, 0xe9, 0x3b, 0x53, 0x34, 0x5c, 0x6b, 0x8d, 0x5b, 0x3b, + 0x7d, 0x68, 0xed, 0xf4, 0x4c, 0xaa, 0xd0, 0x22, 0x16, 0x95, 0x45, 0x55, 0x21, 0x93, 0x78, 0x90, 0x69, 0x7d, 0x5a, + 0xc2, 0x48, 0x91, 0x09, 0x68, 0xf4, 0x05, 0x1d, 0x03, 0x15, 0x59, 0x14, 0xd8, 0x92, 0x6f, 0x07, 0x09, 0xdb, 0xf0, + 0x78, 0x3a, 0x4c, 0x82, 0x25, 0x5b, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x56, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, + 0x79, 0x6f, 0x9d, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x96, 0xeb, 0x0d, 0x7e, 0xe7, 0xec, 0xe7, 0x1b, 0xb5, 0xbf, 0x83, + 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xcf, 0xed, 0x2d, 0x7d, 0x67, + 0xb6, 0xe9, 0x7f, 0xb7, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xd6, 0x9f, 0x3c, + 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xcf, 0x3f, 0x8d, 0x76, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, + 0x68, 0xef, 0xe4, 0xb9, 0xbd, 0x23, 0xee, 0x78, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, + 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xf3, 0xd9, 0xa7, 0xf9, 0x64, 0xc7, 0x4f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, + 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x7b, 0x7e, 0xba, 0x89, 0x0f, 0xff, 0xed, + 0x4a, 0xef, 0xbf, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, 0xf8, 0x13, 0xcd, 0xd2, 0x20, 0xb2, 0x14, 0x8a, 0x3f, 0x99, 0x69, 0xa7, 0xee, 0x54, 0x59, 0xdd, 0x2d, 0xdf, 0xe2, - 0x1e, 0x7f, 0xcb, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0x6f, 0xaf, 0x16, 0x93, 0xc1, 0xe0, 0xd6, 0xdf, 0xdf, 0xf3, 0x70, - 0x76, 0x3b, 0x67, 0xd7, 0xfc, 0x9e, 0x16, 0xd3, 0x44, 0x35, 0xbd, 0x78, 0x4c, 0xf0, 0xba, 0xf5, 0xfd, 0x89, 0xc5, - 0xff, 0x6a, 0x5f, 0x34, 0x6f, 0xfd, 0x81, 0xb4, 0x46, 0xcb, 0x5d, 0xfd, 0xfd, 0xe3, 0x8a, 0x89, 0x5b, 0x10, 0x2f, - 0xde, 0xdb, 0x9a, 0x86, 0xb7, 0xfc, 0xa3, 0x77, 0xed, 0x4f, 0xaf, 0x75, 0xcc, 0xcd, 0x44, 0x1d, 0x49, 0x6f, 0x2f, - 0x9e, 0xb3, 0x5f, 0xf9, 0x27, 0x79, 0x9c, 0x7c, 0x11, 0x72, 0xd2, 0xde, 0x20, 0x77, 0x13, 0x9d, 0x12, 0xef, 0xdc, - 0x44, 0xc2, 0x82, 0x40, 0x18, 0x8e, 0x9a, 0x3f, 0x4c, 0xca, 0xa9, 0xb7, 0x03, 0x6e, 0x57, 0x6e, 0xeb, 0x9f, 0x6f, - 0x39, 0xe7, 0x8b, 0xe1, 0xe5, 0xf4, 0x5d, 0xb7, 0x4b, 0x8f, 0x8a, 0x66, 0x53, 0x81, 0x6e, 0xb7, 0x18, 0x7b, 0x75, - 0x32, 0xb3, 0xcc, 0x25, 0x5f, 0x7a, 0x57, 0x9b, 0x99, 0xc7, 0xf4, 0x7e, 0x33, 0xcd, 0x90, 0xc8, 0x17, 0x08, 0x99, - 0x0e, 0x87, 0xbb, 0x73, 0x2c, 0x8f, 0x0f, 0xdf, 0x3e, 0x7b, 0x32, 0x78, 0x82, 0x91, 0x5b, 0x56, 0x34, 0xc8, 0x3b, - 0x3e, 0xcc, 0xea, 0xd6, 0x6d, 0xe3, 0xe2, 0xf9, 0xf0, 0x17, 0xc8, 0x1b, 0x74, 0x3d, 0x34, 0x45, 0xb4, 0xca, 0xef, - 0x28, 0xfa, 0x44, 0xc9, 0x41, 0xc7, 0x13, 0xa8, 0x1d, 0x52, 0xe0, 0xbe, 0x7b, 0xc6, 0x41, 0xbf, 0x81, 0xa5, 0xf6, - 0xfb, 0xe7, 0x9f, 0x88, 0x47, 0x1a, 0xc6, 0xfb, 0xfb, 0x30, 0xfa, 0x23, 0x2e, 0x8b, 0x35, 0x9c, 0xae, 0x03, 0xf8, - 0xdc, 0x33, 0x7d, 0xfb, 0xba, 0xf3, 0x7d, 0x3f, 0xf0, 0xb6, 0xfc, 0x86, 0xbd, 0xe3, 0xde, 0xe5, 0xf0, 0xad, 0xff, - 0xec, 0x09, 0x88, 0x4e, 0x30, 0x2e, 0x9f, 0x31, 0x12, 0xb6, 0xa3, 0x18, 0xb5, 0x0a, 0x3f, 0xd7, 0x10, 0xa2, 0xf5, - 0x09, 0x19, 0xbb, 0x20, 0xfd, 0x83, 0x02, 0xf4, 0x13, 0x02, 0xab, 0x49, 0x6a, 0x14, 0x98, 0xc4, 0xb7, 0x35, 0x24, - 0x90, 0x82, 0x05, 0x42, 0x6f, 0xa0, 0xf8, 0x54, 0xf0, 0x77, 0xc3, 0xcf, 0x24, 0xf9, 0x2d, 0x6a, 0x3e, 0x86, 0xbf, - 0x61, 0x68, 0x26, 0xd5, 0x43, 0x5a, 0x47, 0x89, 0xf7, 0x93, 0xbf, 0x8f, 0xc2, 0x4a, 0xa8, 0x63, 0x21, 0x48, 0xc5, - 0x90, 0x0b, 0x71, 0xf1, 0x7c, 0x72, 0x5b, 0x8a, 0xf0, 0x8f, 0x09, 0x3e, 0x93, 0x0b, 0x4d, 0x3e, 0xa3, 0x27, 0x8d, - 0x7c, 0xff, 0x41, 0xbe, 0x2f, 0x3b, 0x35, 0x58, 0xd4, 0x43, 0x7e, 0x5b, 0xbb, 0xef, 0xcb, 0x29, 0x41, 0x8f, 0xec, - 0x07, 0x34, 0x05, 0x03, 0x35, 0x01, 0x29, 0x43, 0x70, 0x0b, 0x57, 0x7d, 0x4f, 0x15, 0xe4, 0xcb, 0xef, 0x7d, 0x16, - 0x32, 0x5c, 0x65, 0x41, 0x48, 0x72, 0xa9, 0x90, 0xc2, 0xc6, 0x6d, 0x3d, 0xf8, 0xac, 0x31, 0x49, 0x24, 0xe4, 0x94, - 0x80, 0x24, 0x69, 0x6f, 0x20, 0x49, 0xc4, 0xf4, 0x1f, 0xae, 0x93, 0xa6, 0x59, 0x49, 0xe9, 0x86, 0x38, 0x55, 0xaf, - 0x91, 0xe6, 0x2c, 0x78, 0xcf, 0x60, 0xe9, 0x48, 0xb1, 0xe2, 0x9d, 0x31, 0x18, 0xeb, 0x60, 0xa1, 0x3b, 0x59, 0xdc, - 0xaf, 0x92, 0x30, 0x8d, 0x44, 0x95, 0x2f, 0x42, 0xfe, 0xfc, 0x97, 0x12, 0x7f, 0xf4, 0x96, 0x06, 0x22, 0x10, 0xfc, - 0x00, 0xad, 0x07, 0xac, 0xf1, 0xe0, 0x27, 0x56, 0x97, 0x61, 0x5e, 0x65, 0x54, 0xde, 0x6c, 0xc7, 0xb6, 0x73, 0xa6, - 0xaa, 0x16, 0x7c, 0x16, 0x86, 0x16, 0xed, 0x6c, 0xd5, 0x9c, 0xdc, 0xe6, 0x0d, 0xbe, 0x33, 0x49, 0x22, 0xb5, 0x94, - 0x44, 0xda, 0xea, 0xfa, 0x74, 0xe9, 0x75, 0x8b, 0x0a, 0x1a, 0x23, 0x40, 0x2f, 0x49, 0x77, 0x95, 0x4f, 0x28, 0x5e, - 0x59, 0x0d, 0xab, 0xe1, 0xa5, 0x43, 0x11, 0xc6, 0xda, 0x9b, 0x2b, 0x79, 0x76, 0x07, 0xd6, 0x23, 0xb4, 0x76, 0x55, - 0xea, 0x10, 0xb6, 0x9f, 0xe8, 0x3d, 0xa7, 0x52, 0x7f, 0x03, 0xaa, 0xc0, 0xa9, 0xa3, 0xa1, 0x3e, 0x6a, 0xa7, 0x90, - 0xed, 0xdc, 0x5b, 0x12, 0x54, 0xae, 0xe4, 0xa6, 0x4a, 0x8b, 0x52, 0xca, 0x94, 0xaf, 0x65, 0xb6, 0xb2, 0xfb, 0x64, - 0x00, 0xf1, 0x6c, 0x50, 0x20, 0xb9, 0xa8, 0xad, 0xe6, 0x20, 0x7d, 0x34, 0x4b, 0x1c, 0x6b, 0x07, 0x85, 0x97, 0x55, - 0x60, 0xe6, 0x32, 0x97, 0xcb, 0x41, 0xc1, 0x72, 0xbd, 0xd5, 0x4c, 0x33, 0xd5, 0x17, 0xb9, 0xbd, 0xcd, 0x78, 0x99, - 0xfe, 0x9b, 0x25, 0x03, 0x1e, 0x5d, 0x3c, 0xf7, 0x03, 0x48, 0x93, 0xbc, 0x0e, 0x90, 0x04, 0x9b, 0x83, 0x5d, 0xec, - 0x30, 0x6c, 0x15, 0x2b, 0x7b, 0xf2, 0x74, 0xb9, 0x43, 0x53, 0x2e, 0x61, 0x24, 0x27, 0xe6, 0x52, 0xea, 0xfb, 0x92, - 0xea, 0x86, 0x82, 0x93, 0x4d, 0x13, 0x50, 0x0a, 0x68, 0xb7, 0xe0, 0xbf, 0xf0, 0xa9, 0xa1, 0xd3, 0x02, 0x2c, 0xb5, - 0xdd, 0x80, 0xff, 0x42, 0xbf, 0xd8, 0x3e, 0xa2, 0x7e, 0x60, 0x1e, 0xec, 0xcd, 0xda, 0xca, 0x18, 0x10, 0x91, 0xb8, - 0x82, 0x3c, 0x12, 0xfc, 0xa0, 0xd8, 0xd3, 0x65, 0xe2, 0xc0, 0x99, 0xe2, 0x62, 0x29, 0xb5, 0x99, 0x79, 0xed, 0xb7, - 0xd4, 0xc4, 0x9b, 0x28, 0x89, 0x0a, 0xdb, 0x21, 0x8d, 0x5e, 0x52, 0xc6, 0x54, 0xc1, 0x86, 0xe8, 0xbe, 0x6e, 0x82, - 0x29, 0xf0, 0xa6, 0xaa, 0x02, 0x22, 0xd4, 0x5e, 0x64, 0x79, 0x7e, 0xd3, 0x05, 0x56, 0x17, 0x7c, 0x6c, 0x4c, 0xb3, - 0x0b, 0x56, 0x72, 0x35, 0x93, 0x3e, 0xf3, 0x76, 0xa0, 0x85, 0xbc, 0xcb, 0xcb, 0xa2, 0x15, 0xba, 0x1e, 0x44, 0x0b, - 0x7f, 0xaf, 0x39, 0x1e, 0x3d, 0xdb, 0x56, 0x53, 0x9b, 0x7d, 0xad, 0xc5, 0x02, 0x19, 0x88, 0x86, 0xbe, 0x90, 0x33, - 0x0a, 0x77, 0x95, 0xe6, 0x6a, 0xb5, 0xaf, 0xca, 0x20, 0x81, 0x89, 0x20, 0x6b, 0x59, 0x78, 0x8f, 0xee, 0xd5, 0x23, - 0xcd, 0x2b, 0x09, 0x9e, 0xb9, 0xf8, 0x0b, 0x00, 0xa1, 0x3c, 0x49, 0xc8, 0x01, 0x39, 0x80, 0xbf, 0xa5, 0x28, 0x95, - 0x06, 0xf8, 0x67, 0x75, 0x39, 0xb6, 0xf5, 0xfd, 0x9d, 0x56, 0x31, 0xb8, 0xfe, 0x7c, 0xdd, 0xf5, 0xac, 0x1d, 0xe2, - 0x5c, 0xd9, 0xea, 0xb5, 0x65, 0x9a, 0xc7, 0x48, 0x5d, 0x03, 0x70, 0x27, 0xd2, 0x23, 0x10, 0xc9, 0x4c, 0x34, 0xc8, - 0xd9, 0x0b, 0x3e, 0x9e, 0x8a, 0xc7, 0xa4, 0xbd, 0xca, 0xf7, 0xcd, 0x85, 0x3e, 0x18, 0x63, 0xdf, 0x82, 0x06, 0xf1, - 0xd1, 0x6a, 0x6b, 0x05, 0x62, 0xbd, 0x55, 0xea, 0x43, 0x37, 0x46, 0x41, 0x07, 0x8f, 0xb8, 0x91, 0x0b, 0x8e, 0xed, - 0xae, 0xad, 0xa7, 0xf4, 0x15, 0x80, 0xb9, 0x0e, 0x54, 0x32, 0x0c, 0x52, 0xe7, 0x89, 0xc2, 0x24, 0x3f, 0x4f, 0x48, - 0x42, 0x44, 0x75, 0xb6, 0x1c, 0xa5, 0xdc, 0xb4, 0x80, 0xcb, 0x8c, 0x0c, 0x30, 0x9b, 0x34, 0xeb, 0x27, 0x97, 0x2f, - 0x41, 0x2a, 0x0d, 0x11, 0xdc, 0xb0, 0xbd, 0x64, 0x74, 0xeb, 0xa8, 0x1b, 0x54, 0x49, 0xe6, 0xfa, 0xcd, 0xed, 0x2c, - 0x52, 0xe6, 0xcd, 0x47, 0x18, 0x6b, 0xf2, 0x21, 0xac, 0x13, 0xfc, 0x36, 0x40, 0x25, 0x7d, 0x2a, 0xbc, 0x68, 0x04, - 0x10, 0xea, 0x3b, 0x55, 0xc6, 0xa7, 0xc2, 0xcb, 0x46, 0x5b, 0x96, 0x51, 0x0a, 0xd5, 0x05, 0xb3, 0x5b, 0xd3, 0x85, - 0xe8, 0x56, 0xd5, 0x40, 0x1b, 0xb8, 0x76, 0x1d, 0x28, 0xa0, 0xa1, 0xda, 0x95, 0x1b, 0x16, 0x80, 0xd5, 0x4c, 0x04, - 0x86, 0xcb, 0xbf, 0xcf, 0x5f, 0xa9, 0x18, 0x9e, 0x7e, 0x3f, 0xf4, 0xf6, 0xdb, 0x20, 0x1a, 0x6d, 0x2f, 0xd9, 0x2e, - 0x88, 0x46, 0xbb, 0xcb, 0x86, 0xd1, 0xef, 0xe7, 0xf4, 0xfb, 0x79, 0x03, 0x3a, 0x12, 0x61, 0xc2, 0xec, 0xf5, 0x1b, - 0xb5, 0x7c, 0xa5, 0xd6, 0xef, 0xd4, 0xf2, 0xa5, 0x1a, 0xde, 0xda, 0x93, 0x44, 0x10, 0x59, 0xaa, 0x9a, 0x07, 0x49, - 0x91, 0x6a, 0xe9, 0x72, 0x8c, 0x16, 0x23, 0x6a, 0x29, 0x6b, 0x8e, 0x75, 0x22, 0xed, 0x1c, 0x94, 0x0c, 0x70, 0xb4, - 0xb8, 0xaa, 0x31, 0xdd, 0xac, 0x68, 0x09, 0xc4, 0x08, 0x2b, 0xdb, 0x72, 0x71, 0x93, 0xfa, 0xe8, 0x9c, 0x7c, 0xdb, - 0x2a, 0xe5, 0xdb, 0x56, 0xf0, 0xfc, 0x2b, 0x0a, 0xe5, 0x92, 0x6b, 0xd7, 0xb2, 0x69, 0xa1, 0x14, 0xca, 0xb8, 0x06, - 0x5b, 0xfb, 0x26, 0x30, 0x64, 0x3e, 0x52, 0xd4, 0xd8, 0x5e, 0x34, 0xca, 0x21, 0xc8, 0xd6, 0xc1, 0xa8, 0x53, 0x16, - 0x2c, 0xbe, 0xdd, 0x21, 0x03, 0x19, 0xe8, 0xa8, 0x6a, 0xe3, 0xd5, 0xce, 0x4a, 0x7f, 0x58, 0x5e, 0x3c, 0x67, 0x89, - 0x95, 0x4e, 0x7e, 0x53, 0xa1, 0x3f, 0x08, 0xd1, 0x37, 0x65, 0xc3, 0xc1, 0x8b, 0x2e, 0xb6, 0x32, 0x20, 0xde, 0x30, - 0xbd, 0xb7, 0xb1, 0x92, 0xe5, 0xae, 0x29, 0x5f, 0xcc, 0x78, 0xc2, 0x71, 0xf4, 0xe5, 0x6a, 0x11, 0xd6, 0x6a, 0x91, - 0x9d, 0x00, 0x0f, 0xad, 0xd5, 0x52, 0xc8, 0xd5, 0x22, 0x9c, 0x99, 0x2e, 0xd4, 0x4c, 0xcf, 0x40, 0xf3, 0x28, 0xd4, - 0x2c, 0x4f, 0x00, 0x0b, 0x5e, 0x98, 0x19, 0x2e, 0xcc, 0x0c, 0xc7, 0x21, 0x35, 0x4e, 0x0f, 0x7a, 0xaf, 0x73, 0xcf, - 0x2d, 0x77, 0xa3, 0xd3, 0x30, 0x6f, 0x47, 0x1b, 0xcc, 0xf1, 0x41, 0x38, 0x81, 0xf8, 0xc0, 0x12, 0x01, 0x7a, 0x34, - 0xac, 0x8e, 0x1a, 0x2a, 0x47, 0xf1, 0x65, 0x01, 0x48, 0x96, 0x04, 0x20, 0xb9, 0x57, 0xe3, 0x5c, 0x5a, 0x7e, 0x5d, - 0x25, 0x21, 0x47, 0x64, 0xbc, 0x94, 0x76, 0xf7, 0x84, 0x97, 0x23, 0x23, 0x34, 0x4f, 0x16, 0xa9, 0x97, 0xb3, 0x8c, - 0x8d, 0x11, 0xb8, 0x28, 0xf4, 0x9b, 0xaa, 0xdf, 0x4f, 0x4b, 0x2f, 0xa7, 0x76, 0x7e, 0x02, 0x7f, 0xcb, 0x53, 0x67, - 0x91, 0x23, 0xe4, 0xd5, 0xc8, 0x24, 0x2c, 0x2f, 0x95, 0x7a, 0xfa, 0x12, 0x66, 0x50, 0x77, 0x6f, 0x14, 0x80, 0x6b, - 0x91, 0x4b, 0xa7, 0xda, 0x12, 0xae, 0x4c, 0xb9, 0xc1, 0x3e, 0x0f, 0x79, 0x4e, 0x42, 0xa8, 0x44, 0x1e, 0x29, 0xac, - 0xfb, 0xf6, 0xc5, 0xf3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x0e, 0x00, 0x73, 0x30, 0xf5, 0xa2, 0x01, 0x2f, - 0xd5, 0x9c, 0xf9, 0xe8, 0xe5, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x33, 0xf9, 0xc8, 0xf8, 0x96, 0xf9, - 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, 0x6c, 0x50, - 0x09, 0x36, 0x0d, 0x5f, 0x4b, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, 0x1b, 0xb3, - 0x31, 0x2b, 0xd4, 0xce, 0x93, 0xcb, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, 0x71, 0xce, - 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, 0xa6, 0x25, - 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, 0xe8, 0x95, - 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x73, 0xfe, 0x52, - 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd1, 0xb4, 0x04, 0x75, 0x80, - 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x39, 0xe7, 0x5f, 0x6a, 0x43, 0x84, 0x8c, - 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, 0xc0, 0xe3, - 0xbc, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x1c, 0xf7, 0x4e, 0xd3, 0xb0, 0xfd, 0x17, 0xa0, 0x29, 0x86, 0x72, 0x3c, 0xdf, - 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xca, 0x42, 0xda, 0x96, 0x63, 0xb4, - 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xdc, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x7d, 0xdd, 0x63, 0x36, 0xc9, 0x8a, - 0x45, 0xae, 0x22, 0x4e, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, 0x41, 0xc9, - 0x72, 0x5e, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xd5, 0x9c, 0x52, 0xa8, - 0x7d, 0xc5, 0xc3, 0xea, 0xf4, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, 0x7c, 0xe7, - 0xeb, 0xf4, 0x8e, 0x42, 0x77, 0x9c, 0x99, 0x78, 0xaa, 0x02, 0x63, 0xdf, 0xda, 0x11, 0x14, 0x0e, 0x4d, 0xd7, 0x01, - 0x87, 0x69, 0x74, 0xc2, 0xe2, 0x9f, 0xd2, 0x71, 0xf2, 0xa2, 0x56, 0x88, 0x24, 0xff, 0x10, 0x2e, 0x0c, 0x89, 0x05, - 0x79, 0x49, 0xa8, 0x23, 0x32, 0x62, 0x35, 0x2a, 0xd6, 0x42, 0x45, 0xc5, 0x29, 0x1e, 0x6f, 0x15, 0x14, 0x97, 0xa2, - 0x54, 0x29, 0x15, 0xb9, 0x51, 0x29, 0x20, 0x96, 0x0d, 0xbc, 0x5b, 0xc0, 0x01, 0x10, 0x74, 0x96, 0xbb, 0xb5, 0xed, - 0x6e, 0x23, 0xf3, 0x99, 0x69, 0x9e, 0x56, 0x1f, 0xd4, 0xdf, 0xef, 0x97, 0x18, 0x5b, 0xe3, 0xe9, 0xef, 0xdb, 0xb4, - 0xe0, 0xe6, 0x6f, 0x18, 0xa2, 0x3b, 0x40, 0xc4, 0x2c, 0xed, 0xa1, 0x90, 0x05, 0x13, 0x96, 0xa1, 0x2a, 0x4f, 0x39, - 0xea, 0xe5, 0x93, 0x5b, 0x80, 0x50, 0x43, 0xbf, 0x36, 0x3a, 0xd5, 0x55, 0x09, 0xc2, 0xf7, 0x5d, 0xa1, 0x1e, 0x9b, - 0x03, 0x9e, 0x0c, 0x80, 0xbf, 0x22, 0xaf, 0xf5, 0xd8, 0xfe, 0x41, 0x6f, 0xd4, 0x1b, 0x20, 0x88, 0xce, 0x79, 0xe1, - 0x1f, 0x71, 0xae, 0x53, 0x7f, 0xc6, 0x85, 0x20, 0xbe, 0xf5, 0x24, 0xbc, 0x17, 0x67, 0x69, 0x1c, 0x9c, 0xf5, 0x06, - 0xe6, 0x22, 0x50, 0x9c, 0xa5, 0xf9, 0x19, 0x88, 0xe5, 0x88, 0x89, 0x58, 0xb3, 0x3b, 0x80, 0x09, 0x2c, 0x75, 0x1c, - 0xb2, 0xea, 0xd8, 0x7e, 0xff, 0xcd, 0xc8, 0x90, 0xa5, 0x23, 0x0c, 0x8c, 0xfe, 0x5d, 0x81, 0x00, 0x05, 0xcb, 0xcc, - 0xf6, 0x60, 0xd2, 0xd5, 0x9e, 0xd5, 0xf3, 0x66, 0x93, 0x77, 0xf5, 0x8e, 0xd5, 0xb4, 0x9c, 0x9a, 0x56, 0x59, 0x4d, - 0x9b, 0xe4, 0x50, 0x33, 0xd1, 0xef, 0x6b, 0x50, 0xd4, 0x7c, 0x0e, 0x60, 0x6c, 0x98, 0xfc, 0x66, 0x56, 0xcd, 0xfb, - 0x7d, 0x4f, 0x3e, 0x82, 0x5f, 0xc8, 0x56, 0xe6, 0xd6, 0x58, 0x3e, 0x7d, 0x4d, 0x24, 0x66, 0x06, 0xe6, 0xe8, 0xee, - 0x08, 0xdf, 0xeb, 0x46, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x0d, 0x0c, 0x9e, 0x27, 0x7c, 0x70, 0x91, 0xa3, - 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x1b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, 0x78, 0x90, - 0xfd, 0xfe, 0x0a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0xd7, 0x75, 0x51, 0x56, 0xd0, 0xb1, 0xf4, 0xf3, - 0x56, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x92, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, 0x2e, 0x3e, - 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0xe7, 0x7c, 0xb4, 0x2e, 0xd6, 0x1e, 0xf8, 0xc1, 0xcc, 0xd2, 0xb9, - 0x22, 0xce, 0xc8, 0xfd, 0xd1, 0xe7, 0x22, 0xcd, 0x29, 0x0f, 0x70, 0x1f, 0x8a, 0xb9, 0xfd, 0x16, 0x48, 0x3f, 0xf4, - 0x16, 0xc8, 0x3e, 0x3a, 0xe7, 0xe4, 0x0d, 0x20, 0xd2, 0x21, 0x0c, 0x6e, 0x45, 0x82, 0x8e, 0x55, 0xc3, 0x5b, 0x0b, - 0xec, 0xb4, 0x97, 0xc6, 0xbd, 0x34, 0x3f, 0x4b, 0xfb, 0x7d, 0x83, 0x9a, 0x99, 0x22, 0x1c, 0x3c, 0xce, 0xc8, 0x45, - 0xd2, 0x82, 0x2d, 0xa5, 0xfd, 0x57, 0x03, 0x47, 0x10, 0xf2, 0xf7, 0x3f, 0x84, 0xf7, 0x04, 0x20, 0x36, 0x69, 0x03, - 0xae, 0x7a, 0x4c, 0x47, 0x63, 0x4b, 0xa2, 0x56, 0x9d, 0x0d, 0x90, 0x38, 0x55, 0x5a, 0x4f, 0xb9, 0x59, 0x53, 0x18, - 0xa4, 0xca, 0x42, 0xfd, 0xc6, 0x7a, 0x32, 0x59, 0xe5, 0x22, 0x23, 0x8e, 0xca, 0xf4, 0xa5, 0x66, 0x04, 0xd3, 0xa5, - 0x9f, 0x2f, 0x60, 0xc9, 0xc6, 0x1f, 0x71, 0xf2, 0x96, 0x80, 0x63, 0x3b, 0x6b, 0x57, 0xd5, 0x2e, 0xc7, 0xad, 0xdd, - 0x1c, 0xe0, 0x7b, 0xbd, 0xd1, 0x68, 0xa4, 0x9d, 0xe3, 0x04, 0x0c, 0x55, 0x4f, 0x2d, 0x85, 0x1e, 0xab, 0x15, 0xa0, - 0x6e, 0x47, 0x2e, 0xb3, 0x64, 0x30, 0x5f, 0x18, 0xc7, 0xaf, 0xcc, 0x47, 0x1f, 0x2f, 0x95, 0xb5, 0xeb, 0x88, 0xaf, - 0xff, 0x20, 0xab, 0xf5, 0x2d, 0xef, 0xaa, 0x26, 0xe0, 0x8b, 0x2a, 0xa0, 0xf4, 0x1b, 0xde, 0x93, 0xbd, 0x8b, 0xaf, - 0xdd, 0x60, 0x97, 0x7c, 0xcb, 0x5b, 0xd4, 0x79, 0xbe, 0x72, 0x70, 0xa3, 0x4a, 0xb7, 0xf7, 0x92, 0x05, 0xae, 0xbd, - 0xa3, 0xa6, 0xb1, 0x9e, 0xf9, 0xd1, 0xc3, 0x22, 0x64, 0x3b, 0x1f, 0x7b, 0x5f, 0x35, 0x4f, 0xcf, 0x1a, 0x7a, 0x93, - 0x1a, 0xfa, 0xd8, 0x8b, 0xb2, 0x7d, 0x6a, 0x1a, 0xd1, 0x6b, 0xd8, 0xd0, 0xc7, 0xde, 0x92, 0x93, 0x43, 0x22, 0xc0, - 0xa9, 0x31, 0x7f, 0x7c, 0x38, 0x9d, 0xe1, 0xef, 0x18, 0x50, 0x09, 0xc4, 0x7c, 0x7a, 0x4c, 0x3b, 0x0a, 0x30, 0xa3, - 0x4a, 0x6f, 0x9f, 0x1e, 0xd8, 0x8e, 0x97, 0xf5, 0xd0, 0xd2, 0xbb, 0x27, 0x47, 0xb7, 0xe3, 0x55, 0x35, 0xbe, 0x94, - 0x43, 0x9e, 0xe7, 0xb3, 0xd1, 0x68, 0x24, 0x0c, 0x24, 0x77, 0xa5, 0x37, 0xb0, 0x02, 0x69, 0x5b, 0x54, 0x1f, 0xca, - 0xa5, 0xb7, 0x53, 0x87, 0x76, 0xe5, 0x4f, 0xf2, 0xc3, 0xa1, 0x18, 0x99, 0x63, 0x1c, 0xc0, 0x4d, 0x0a, 0x25, 0x47, - 0xc9, 0x5a, 0x82, 0xe8, 0x94, 0xc6, 0x53, 0x59, 0xaf, 0xad, 0x88, 0xbc, 0x1a, 0x71, 0x1e, 0x82, 0x1f, 0x3d, 0x50, - 0x8b, 0xbf, 0xd0, 0x82, 0xd8, 0x63, 0x9f, 0x2a, 0xa5, 0x17, 0xbc, 0x2a, 0x20, 0x44, 0xec, 0xef, 0x06, 0xda, 0x41, - 0x09, 0x0e, 0x25, 0xdc, 0x07, 0x84, 0x85, 0x7e, 0xed, 0xe5, 0x33, 0x19, 0xa3, 0xdc, 0x1b, 0x54, 0x73, 0x06, 0x30, - 0x95, 0x3e, 0x03, 0xbf, 0x4b, 0x80, 0x3a, 0xc5, 0xa7, 0xe8, 0x54, 0x6f, 0x1e, 0x36, 0x5d, 0x9f, 0x96, 0x28, 0x8a, - 0xe8, 0xce, 0xcf, 0xc7, 0x80, 0xd8, 0xd9, 0xb5, 0x19, 0x69, 0xd7, 0x7e, 0x83, 0x06, 0x2b, 0x25, 0x89, 0x76, 0x4e, - 0x09, 0xbb, 0x9d, 0x8f, 0x6c, 0xe9, 0x47, 0x29, 0x10, 0x73, 0xc7, 0x89, 0x44, 0xf6, 0x60, 0x23, 0x27, 0x70, 0x8b, - 0xf6, 0x8e, 0x0e, 0x40, 0xe5, 0x46, 0x41, 0x7e, 0x35, 0x47, 0x72, 0xc7, 0x77, 0xbd, 0xef, 0x06, 0xf5, 0xe0, 0xbb, - 0xde, 0x59, 0x4a, 0x72, 0x47, 0x78, 0xa6, 0xa6, 0x84, 0x88, 0xcf, 0xbe, 0x1b, 0xe4, 0x03, 0x3c, 0x4b, 0xb4, 0x48, - 0x8b, 0x84, 0x6a, 0x75, 0x8d, 0x9b, 0xf0, 0x22, 0x91, 0xdc, 0x43, 0xbb, 0xce, 0x23, 0x62, 0x01, 0xc8, 0x58, 0x7c, - 0x36, 0x6f, 0x28, 0xd4, 0xdd, 0xc4, 0x6c, 0xd1, 0x5d, 0x16, 0xfb, 0xfd, 0x6d, 0x9e, 0xd6, 0x3d, 0x1d, 0x1f, 0x83, - 0x2f, 0x48, 0x35, 0x01, 0x1e, 0xed, 0xaf, 0xcd, 0xf1, 0xea, 0xd5, 0xe6, 0x48, 0x59, 0xa8, 0x12, 0xf5, 0x5b, 0xac, - 0x66, 0x3d, 0x84, 0xe1, 0xce, 0x32, 0x63, 0x6d, 0x2f, 0x78, 0x25, 0x67, 0x55, 0x6c, 0x97, 0xe3, 0x2b, 0x96, 0xda, - 0x4a, 0xa2, 0x72, 0xb4, 0x1e, 0x6b, 0x53, 0x8c, 0xfc, 0x4a, 0x21, 0x51, 0x16, 0x1d, 0x5b, 0x0b, 0x05, 0xc4, 0x0b, - 0xd0, 0x97, 0xec, 0x4c, 0x03, 0xac, 0x37, 0x7a, 0x15, 0x11, 0x5a, 0x3e, 0x52, 0xe1, 0x4d, 0x6e, 0xaa, 0xcc, 0xca, - 0x66, 0xd1, 0xee, 0xa7, 0x8a, 0x57, 0x08, 0x56, 0x6f, 0xd4, 0x1e, 0x05, 0xa8, 0x3d, 0xb4, 0x50, 0x06, 0x90, 0xd2, - 0x34, 0x03, 0x40, 0x06, 0x00, 0x99, 0x2a, 0xe2, 0x33, 0x01, 0x2a, 0x6d, 0x75, 0xa3, 0xc0, 0x89, 0xf4, 0x1a, 0x68, - 0x16, 0x58, 0xe9, 0x23, 0x05, 0x19, 0x2c, 0xb6, 0x08, 0xc0, 0xca, 0x91, 0x33, 0x4c, 0x63, 0xc8, 0x36, 0x9a, 0xb8, - 0x24, 0xcd, 0xef, 0xc3, 0x2c, 0x95, 0x78, 0x12, 0x3f, 0xc8, 0x1a, 0x23, 0x00, 0x90, 0xbe, 0x4f, 0x2f, 0x8a, 0x2c, - 0x26, 0x1c, 0x38, 0xeb, 0xa9, 0x83, 0xa2, 0x26, 0xe7, 0x5a, 0xd3, 0xea, 0x59, 0x6d, 0xf2, 0x90, 0x05, 0x3a, 0x7b, - 0x30, 0x26, 0xb5, 0x7c, 0xcf, 0x23, 0xfb, 0x2b, 0xc7, 0x33, 0xc2, 0x77, 0xdd, 0xc1, 0xa9, 0xff, 0x6e, 0x6a, 0x60, - 0x62, 0x4a, 0x00, 0x36, 0x06, 0x47, 0x13, 0xe2, 0x77, 0x3a, 0x26, 0x53, 0x9b, 0x14, 0x81, 0xc0, 0x43, 0xf0, 0x0a, - 0x9e, 0x1b, 0x2e, 0xb7, 0xdc, 0xd8, 0x59, 0xe4, 0x69, 0x02, 0x70, 0xe2, 0x05, 0xdf, 0x02, 0x1c, 0xa7, 0x5e, 0x15, - 0xb2, 0x67, 0xcf, 0xc5, 0x74, 0x36, 0x0f, 0x1e, 0x12, 0xda, 0xbf, 0x98, 0xf0, 0x9b, 0xee, 0x2a, 0xb9, 0x32, 0xb5, - 0xee, 0x4d, 0x74, 0x95, 0xcb, 0x9d, 0x3e, 0xad, 0x38, 0x86, 0x39, 0x83, 0x55, 0x40, 0xce, 0xd9, 0x90, 0xbf, 0x38, - 0x07, 0xc0, 0x96, 0x95, 0xf0, 0x22, 0xfe, 0x22, 0x94, 0xd5, 0x02, 0xb8, 0x47, 0xce, 0x23, 0xf3, 0xcb, 0x57, 0xdb, - 0xa1, 0x9c, 0x53, 0x14, 0xc6, 0x72, 0x6a, 0x5a, 0x52, 0x9c, 0x0e, 0x3d, 0x05, 0x93, 0xa9, 0x2d, 0x7f, 0x6f, 0x13, - 0x97, 0xd9, 0x9b, 0x49, 0x38, 0x5f, 0x47, 0xb6, 0xad, 0x55, 0xf7, 0xd0, 0x0d, 0xc1, 0xa0, 0x8f, 0x11, 0xb4, 0x6c, - 0xae, 0xef, 0xd6, 0x83, 0x81, 0xc2, 0xf6, 0xad, 0xe9, 0xa6, 0x45, 0xa7, 0x38, 0xe0, 0xcc, 0x5a, 0xd7, 0xa8, 0x54, - 0x15, 0x87, 0x5e, 0xf2, 0x6e, 0x59, 0x95, 0x5d, 0x96, 0x5e, 0x08, 0x52, 0xa3, 0xae, 0x22, 0x44, 0x4a, 0xc5, 0x0e, - 0xef, 0xc9, 0xaf, 0x81, 0x89, 0x67, 0x56, 0x8e, 0xd2, 0x78, 0x0e, 0x30, 0x41, 0x0a, 0x7d, 0x53, 0x7e, 0x05, 0xb8, - 0xa1, 0x8b, 0x28, 0xcc, 0xde, 0xc6, 0x55, 0x50, 0x5b, 0x4d, 0xbf, 0x77, 0x70, 0x62, 0xcf, 0xeb, 0x7e, 0x3f, 0x25, - 0x1a, 0x3f, 0x0c, 0xbd, 0xc0, 0xbf, 0xc7, 0xd3, 0x7d, 0x13, 0xa4, 0xe6, 0x95, 0x07, 0x78, 0x45, 0x97, 0x5b, 0x9b, - 0x72, 0x45, 0xe3, 0x62, 0x5e, 0x23, 0x22, 0x7c, 0xea, 0x28, 0xb6, 0xdb, 0xfc, 0x38, 0xb5, 0x31, 0x18, 0x84, 0x70, - 0xdf, 0xca, 0xf8, 0x7d, 0xe2, 0xe5, 0xb3, 0x68, 0x0e, 0x8a, 0xd2, 0x4c, 0x93, 0x84, 0x14, 0xd2, 0x4b, 0x80, 0x3e, - 0x1a, 0x84, 0x5a, 0x5d, 0xf9, 0x47, 0xe2, 0xa5, 0x6a, 0x5a, 0x9b, 0xa7, 0x58, 0xa3, 0x40, 0xcc, 0xa2, 0x79, 0xc3, - 0x32, 0x3a, 0x24, 0xd5, 0xe5, 0xd2, 0x34, 0xe3, 0x0f, 0xab, 0x19, 0xaa, 0x15, 0x47, 0x4d, 0x50, 0xa3, 0x74, 0x03, - 0x17, 0xc0, 0xbf, 0xd3, 0x1d, 0x47, 0x35, 0x8a, 0x14, 0x0d, 0xf8, 0x04, 0x81, 0x61, 0xcd, 0xe6, 0x09, 0x6b, 0x4d, - 0x5d, 0x33, 0xfa, 0x7d, 0x19, 0x27, 0x64, 0x92, 0x90, 0x9c, 0x0f, 0x97, 0xeb, 0x47, 0x52, 0x5d, 0x00, 0xa9, 0x72, - 0xc5, 0x66, 0xbd, 0xde, 0x1c, 0x30, 0x7a, 0x61, 0xfd, 0xc2, 0xc6, 0x15, 0x9c, 0x5f, 0x12, 0xe6, 0xae, 0xfa, 0x11, - 0x66, 0x19, 0x54, 0x01, 0x69, 0x7e, 0x2c, 0x78, 0xf3, 0xdc, 0x05, 0xa2, 0x7e, 0x33, 0x52, 0x17, 0x94, 0x59, 0x3a, - 0xb7, 0x88, 0x40, 0xc0, 0x6b, 0x58, 0x3d, 0x81, 0x64, 0x5f, 0x3e, 0xf6, 0x69, 0x46, 0x81, 0xea, 0x08, 0x40, 0xd9, - 0xac, 0x1f, 0xc2, 0xfe, 0x01, 0xe1, 0x84, 0xfa, 0x9b, 0x37, 0x72, 0xd6, 0x90, 0x3c, 0x90, 0x6a, 0xc2, 0x63, 0x38, - 0x35, 0x16, 0xf8, 0xd2, 0xa2, 0x37, 0x15, 0xbc, 0x26, 0x38, 0xee, 0x05, 0x5a, 0xfb, 0x16, 0x70, 0x84, 0x08, 0x2e, - 0x43, 0x13, 0xa7, 0xbd, 0x5d, 0x2f, 0x40, 0x42, 0x73, 0x0b, 0xe7, 0xfa, 0xda, 0x05, 0x2d, 0x4e, 0x91, 0x93, 0x45, - 0x17, 0x18, 0xe8, 0x82, 0xcc, 0x1b, 0xff, 0xaa, 0x60, 0xe5, 0x02, 0x64, 0x2f, 0x15, 0x2b, 0x89, 0xd8, 0x76, 0xea, - 0x8f, 0x52, 0xd9, 0x6f, 0xcf, 0xac, 0x09, 0xfc, 0x2a, 0xb1, 0x5f, 0x22, 0x93, 0x6f, 0x7a, 0x6c, 0xf2, 0x95, 0xb1, - 0xd0, 0xa9, 0x65, 0x70, 0x4e, 0x8f, 0x0c, 0xce, 0xbd, 0x9d, 0x55, 0x9b, 0x10, 0x86, 0x82, 0x24, 0xd0, 0x74, 0xe9, - 0x61, 0xdd, 0xf4, 0xe7, 0x27, 0x2d, 0x7e, 0xad, 0xda, 0xb7, 0xee, 0xc7, 0x21, 0x76, 0xf1, 0xab, 0xc4, 0x33, 0xec, - 0xa3, 0x3e, 0x70, 0x80, 0xc9, 0x88, 0x89, 0xcb, 0x7e, 0x1f, 0x0a, 0x9b, 0x8d, 0xe7, 0xa3, 0xba, 0xf8, 0xb9, 0x78, - 0x00, 0x28, 0x87, 0x0a, 0xec, 0x72, 0x28, 0x43, 0x19, 0xb1, 0xa9, 0x2d, 0xf7, 0xfc, 0xfe, 0x2a, 0xcc, 0x41, 0xde, - 0xd1, 0x98, 0x38, 0x67, 0x20, 0x86, 0xc1, 0xd7, 0xbf, 0x7b, 0xb2, 0x4f, 0x9b, 0xef, 0xce, 0xe0, 0xbb, 0xa3, 0xb3, - 0x0f, 0xc8, 0x71, 0x73, 0xb6, 0x2e, 0x8b, 0xfb, 0x34, 0x16, 0x67, 0xdf, 0x41, 0xea, 0x77, 0x67, 0x45, 0x79, 0xf6, - 0x9d, 0xaa, 0xcc, 0x77, 0x67, 0xb4, 0xe0, 0x46, 0xbf, 0x5b, 0x13, 0xef, 0x9f, 0x95, 0xa6, 0x3d, 0x5b, 0x42, 0x38, - 0x96, 0x56, 0x3f, 0x82, 0x12, 0x51, 0x91, 0xa2, 0xca, 0x50, 0x56, 0x6b, 0xc7, 0x79, 0x9f, 0x68, 0x78, 0x6c, 0x9a, - 0x90, 0xb8, 0x5a, 0xc2, 0x3a, 0xd4, 0xb3, 0xd3, 0x26, 0xd9, 0x71, 0x1e, 0xa8, 0x03, 0x22, 0xe7, 0x2f, 0xf2, 0xd1, - 0x96, 0xbe, 0x06, 0xdf, 0x3a, 0x1c, 0xf2, 0xd1, 0xce, 0xfc, 0xf4, 0xc9, 0x5a, 0x29, 0x83, 0x8d, 0x14, 0xa3, 0x10, - 0x12, 0xc5, 0x6d, 0x7b, 0x0c, 0x80, 0xff, 0xfd, 0xc3, 0x81, 0x7e, 0xef, 0xe4, 0x6f, 0xb5, 0x5b, 0x5a, 0xf5, 0xfc, - 0xd0, 0x22, 0xcc, 0x78, 0x5d, 0x1b, 0x76, 0xb6, 0xbd, 0x04, 0x94, 0xde, 0x37, 0x0d, 0x6a, 0x8a, 0xe8, 0x27, 0xac, - 0x26, 0x56, 0x71, 0x58, 0x90, 0x12, 0x87, 0x18, 0x8e, 0xd1, 0x0e, 0x3d, 0x4e, 0x17, 0x35, 0x4f, 0xee, 0x3b, 0x64, - 0xdc, 0xfa, 0x3e, 0x20, 0xb9, 0x14, 0xce, 0x3f, 0x78, 0xa1, 0xc1, 0x44, 0x2f, 0xf2, 0xaa, 0xc8, 0xc4, 0x48, 0xd0, - 0x28, 0xbf, 0x25, 0x71, 0xe6, 0x0c, 0x6b, 0x71, 0xa6, 0x10, 0xc2, 0x42, 0x42, 0xe5, 0x2e, 0x4a, 0x4a, 0x0f, 0xce, - 0x9e, 0xec, 0xcb, 0xe6, 0x77, 0xc2, 0x84, 0x18, 0x2d, 0x80, 0x06, 0x67, 0xd7, 0x2e, 0xef, 0x21, 0x2c, 0x73, 0xef, - 0xf7, 0xb7, 0x77, 0x79, 0x01, 0x71, 0x99, 0x67, 0x52, 0xb1, 0x5a, 0x9e, 0x01, 0x4d, 0x9e, 0x88, 0xcf, 0xc2, 0x4a, - 0x4e, 0x83, 0xaa, 0xa3, 0x58, 0xbd, 0x8d, 0xe7, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, 0xdd, 0x67, 0x6f, 0x94, - 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, 0xe7, 0x26, 0xc8, 0x3f, - 0xbe, 0x3e, 0xa1, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, 0x9b, 0x23, 0x35, 0x79, - 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, 0x67, 0x2b, 0x73, 0x2f, - 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xba, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, 0x62, 0x86, 0x29, 0xd6, - 0x5f, 0xd8, 0xf0, 0x9b, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x63, 0x16, 0xc2, 0xe1, 0xb0, 0x99, 0x14, - 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0x87, 0x43, 0x57, 0xcb, 0xd6, 0xc2, 0x83, 0x87, 0xaa, 0x85, 0x9b, 0x86, 0xe5, - 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, 0x1b, 0x6b, 0xe0, 0x1a, - 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, 0x09, 0xa3, 0x15, 0xc2, - 0xef, 0xbe, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, 0x4a, 0xb1, 0x34, 0x6f, - 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0x73, 0xdf, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, 0xcd, 0xe6, 0xc0, 0x7d, - 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x27, 0xcb, 0xe3, 0xf0, 0x2d, 0xfc, 0xcb, - 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xab, 0x14, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, 0x8d, 0xa8, 0x0d, 0x7f, - 0xc3, 0xbf, 0x85, 0x7d, 0x84, 0xfd, 0x86, 0x26, 0x08, 0x03, 0x58, 0x7f, 0x26, 0x10, 0x17, 0x16, 0x82, 0x04, 0x7f, - 0xab, 0x24, 0xff, 0x9c, 0xf0, 0xd9, 0xa2, 0x04, 0xb2, 0x3a, 0x8c, 0xe2, 0x13, 0x8a, 0x89, 0x42, 0x18, 0x6e, 0x09, - 0xbd, 0xa3, 0xff, 0x46, 0x94, 0x64, 0x93, 0xdc, 0x8a, 0xf5, 0x40, 0x26, 0x49, 0x30, 0xc1, 0xca, 0x0b, 0xe5, 0x4b, - 0xf7, 0x42, 0xa9, 0xb5, 0x16, 0xb4, 0x7e, 0xf9, 0x93, 0xc4, 0x33, 0xa0, 0x7b, 0x20, 0x63, 0xd0, 0x6d, 0x44, 0x35, - 0xc9, 0x31, 0x7d, 0x94, 0xce, 0x33, 0x50, 0x01, 0x9d, 0xad, 0xb3, 0xb0, 0x5e, 0x16, 0xe5, 0xaa, 0x15, 0x1e, 0x2a, - 0x4b, 0x1f, 0xa9, 0xc7, 0x98, 0x17, 0xe6, 0xc9, 0x89, 0x7c, 0xf0, 0x08, 0xd0, 0xf0, 0x28, 0x4f, 0xab, 0x8e, 0xd2, - 0xfa, 0x81, 0x65, 0xc0, 0x08, 0x9c, 0x28, 0x03, 0x1e, 0x61, 0x19, 0x98, 0xa7, 0x5d, 0x86, 0x1a, 0xc4, 0x1a, 0x55, - 0x57, 0x6a, 0x83, 0x39, 0x51, 0x94, 0x7c, 0x8a, 0xa5, 0x15, 0xc6, 0xd0, 0xd4, 0x95, 0x47, 0xd6, 0x4b, 0x4e, 0xd8, - 0x93, 0xdd, 0x40, 0xba, 0x85, 0x8d, 0x02, 0x17, 0x74, 0x2d, 0x4b, 0x94, 0x8b, 0x6e, 0x19, 0x51, 0x26, 0x42, 0xea, - 0x67, 0x0f, 0x67, 0x5a, 0xed, 0x37, 0x76, 0xd2, 0xbe, 0x3d, 0x52, 0xf4, 0x82, 0x81, 0xf8, 0xb4, 0x47, 0x4a, 0x3d, - 0x6b, 0xe4, 0x32, 0xb0, 0xa5, 0x4b, 0x55, 0xcf, 0x7f, 0x83, 0xf2, 0x1d, 0xcc, 0x8c, 0xb3, 0xd9, 0xef, 0x7a, 0x73, - 0x7b, 0xb2, 0xaf, 0x9b, 0xdf, 0x59, 0xaf, 0x07, 0x5b, 0x83, 0x4c, 0x7c, 0xa9, 0xa8, 0xa7, 0xac, 0x42, 0xac, 0xc8, - 0xec, 0x7f, 0x0b, 0xef, 0x77, 0x78, 0x6b, 0x84, 0x66, 0x65, 0x3c, 0xcc, 0x47, 0x4f, 0xf6, 0xa2, 0xf9, 0xbd, 0xb3, - 0x6c, 0x2b, 0x57, 0x25, 0xb3, 0xfd, 0x7e, 0x94, 0x34, 0x67, 0x8f, 0xd7, 0x48, 0xea, 0x00, 0x1f, 0xaf, 0xcf, 0xf0, - 0x91, 0x4a, 0x28, 0xb5, 0xa0, 0xaa, 0x41, 0xeb, 0x63, 0xbf, 0xb7, 0x9e, 0xd3, 0xc7, 0x8f, 0xe5, 0x74, 0x4b, 0x8a, - 0x30, 0x7e, 0x60, 0x30, 0x65, 0x27, 0x4e, 0x5d, 0xf2, 0x66, 0x48, 0xef, 0xba, 0x55, 0x52, 0x97, 0x3d, 0x4a, 0x04, - 0xa1, 0x0e, 0xd6, 0x2f, 0xf6, 0x43, 0x98, 0xd9, 0xa2, 0x3f, 0x6c, 0x56, 0x73, 0x42, 0x41, 0x04, 0x88, 0x56, 0x79, - 0x1f, 0x38, 0x26, 0x09, 0xb3, 0xe6, 0x86, 0x74, 0xeb, 0xcd, 0x95, 0xf6, 0x4a, 0x0a, 0xe8, 0xe7, 0x20, 0x73, 0xfb, - 0xe8, 0x96, 0xab, 0x96, 0x79, 0x2e, 0x6d, 0x39, 0x60, 0xd1, 0x42, 0x74, 0x66, 0xe7, 0xd2, 0xe1, 0xe0, 0x3f, 0xa8, - 0x2b, 0x51, 0x45, 0x04, 0x1d, 0x45, 0x0b, 0x46, 0xab, 0x55, 0xbb, 0x9c, 0x6c, 0x2a, 0x64, 0x4b, 0x22, 0x9c, 0x28, - 0xd9, 0x2b, 0xa1, 0x3e, 0xca, 0xd5, 0x9e, 0x69, 0x88, 0x3f, 0x13, 0xb0, 0x69, 0x83, 0xbf, 0x05, 0xee, 0x65, 0x70, - 0x66, 0xda, 0xa7, 0x61, 0x04, 0x44, 0xe6, 0x10, 0xec, 0xe7, 0x77, 0x3d, 0xa8, 0xe0, 0x41, 0x47, 0xfa, 0xeb, 0x7a, - 0x56, 0xe0, 0x99, 0x7b, 0xe2, 0xf9, 0x9b, 0x13, 0xe9, 0x45, 0x0e, 0x0f, 0x34, 0xf7, 0x61, 0xc6, 0x5f, 0x96, 0x65, - 0xb8, 0x1b, 0x2d, 0xcb, 0x62, 0xe5, 0x45, 0x7a, 0x1f, 0xcf, 0xa4, 0x18, 0x48, 0x74, 0x98, 0x19, 0x5d, 0xc5, 0x3a, - 0xce, 0x61, 0xdc, 0xdb, 0x93, 0xb0, 0x42, 0xfb, 0x67, 0x89, 0xbd, 0x2e, 0x00, 0xc0, 0x21, 0x6b, 0xd0, 0x0a, 0xef, - 0x74, 0x7b, 0xbb, 0xc7, 0x25, 0x25, 0x8a, 0x1b, 0x35, 0x3f, 0xab, 0xa1, 0x65, 0x82, 0x5a, 0x66, 0xdd, 0xc9, 0x64, - 0x8a, 0x24, 0xf0, 0x6d, 0xd8, 0x1b, 0x56, 0xe4, 0xf3, 0x46, 0x6e, 0x0f, 0xef, 0xc2, 0x95, 0x88, 0xb5, 0x05, 0x9d, - 0x74, 0x64, 0x1c, 0xee, 0x85, 0xe6, 0x46, 0xba, 0x7f, 0x52, 0x25, 0x61, 0x29, 0x62, 0xb8, 0x05, 0xb2, 0xbd, 0xda, - 0x56, 0x82, 0x12, 0x48, 0x60, 0x3f, 0x94, 0x62, 0x99, 0x6e, 0x05, 0x80, 0x39, 0xf0, 0x3f, 0x25, 0x0c, 0xa1, 0xbb, - 0xf3, 0x10, 0xaf, 0x1a, 0x79, 0xdf, 0x20, 0x04, 0xfb, 0x6b, 0x90, 0xd3, 0x80, 0x41, 0xa4, 0x18, 0xc9, 0x82, 0x81, - 0x04, 0x20, 0xe7, 0x6b, 0x30, 0xc9, 0x4d, 0x73, 0xcf, 0x0f, 0x72, 0xdd, 0xc1, 0xb4, 0x0f, 0xba, 0x17, 0xd7, 0x9a, - 0xe5, 0xe0, 0x15, 0x13, 0xf1, 0xbf, 0xd7, 0x5e, 0xc9, 0x72, 0x96, 0xf9, 0x8d, 0xb9, 0xe8, 0x64, 0x70, 0xd5, 0x10, - 0x7e, 0x31, 0xcb, 0xe6, 0x3c, 0x9a, 0x65, 0x3a, 0xd4, 0xbf, 0x68, 0x8e, 0x4a, 0x01, 0x0c, 0x75, 0xbc, 0x00, 0x6b, - 0xbc, 0x2b, 0xdd, 0xb4, 0xe2, 0x91, 0xc6, 0x18, 0x05, 0x15, 0x3a, 0x08, 0xfd, 0xbd, 0x06, 0x78, 0x0d, 0x26, 0xb9, - 0x11, 0x2a, 0x1f, 0x5c, 0xd0, 0x0d, 0xdd, 0x72, 0xe5, 0x12, 0xd4, 0xa4, 0x6a, 0xf9, 0xe5, 0x08, 0xf5, 0xae, 0x96, - 0x5c, 0xaa, 0xcd, 0xa7, 0x46, 0x59, 0x23, 0xc8, 0xe4, 0x28, 0xfd, 0x3e, 0xe5, 0xc2, 0xad, 0x8c, 0xc9, 0xfa, 0x70, - 0xf0, 0x0a, 0x6e, 0x6a, 0xfc, 0x3a, 0x27, 0x16, 0x51, 0x7b, 0x48, 0x84, 0xad, 0xdd, 0x0a, 0xdd, 0x7b, 0xdc, 0x28, - 0xcd, 0xa3, 0x6c, 0x13, 0x8b, 0xca, 0xeb, 0x25, 0x60, 0x2d, 0xee, 0x01, 0x19, 0x2a, 0x2d, 0xfd, 0x8a, 0x15, 0x00, - 0x19, 0x20, 0x85, 0x8d, 0x1f, 0x90, 0xf6, 0xea, 0x83, 0x97, 0xfa, 0xfd, 0xbe, 0x31, 0xe5, 0xbf, 0x7f, 0xc8, 0x81, - 0x99, 0x50, 0x94, 0xf5, 0x0e, 0x26, 0x10, 0x5c, 0x3b, 0x49, 0x7b, 0x56, 0xf3, 0x17, 0xeb, 0xda, 0x03, 0x52, 0x2b, - 0xdf, 0x62, 0xae, 0x7a, 0x6d, 0x5f, 0x6c, 0xf6, 0x69, 0x75, 0x63, 0x34, 0x0e, 0x82, 0xa5, 0xd5, 0x5b, 0xad, 0x72, - 0xc8, 0x1b, 0x5e, 0x81, 0x48, 0x65, 0x5d, 0x5d, 0x2b, 0xe7, 0xea, 0x5a, 0x70, 0x24, 0x90, 0x2d, 0x79, 0x0e, 0xff, - 0x85, 0xdc, 0x2b, 0x0f, 0x87, 0xc2, 0xef, 0xf7, 0xd3, 0x19, 0x69, 0x65, 0x81, 0x32, 0x6d, 0x5d, 0x7b, 0xa1, 0x7f, - 0x38, 0xfc, 0x00, 0x5e, 0x23, 0xfe, 0xe1, 0x50, 0xf6, 0xfb, 0x1f, 0xcd, 0x4d, 0xe6, 0x7c, 0xac, 0x94, 0xb2, 0x97, - 0xa8, 0x74, 0x7f, 0x9b, 0xf0, 0xde, 0xff, 0x1e, 0xfd, 0xef, 0xd1, 0x65, 0x4f, 0x05, 0x80, 0x25, 0x7c, 0x86, 0x37, - 0x74, 0xa6, 0x2e, 0xe7, 0x4c, 0xba, 0xbb, 0x2b, 0x3f, 0xf4, 0x9e, 0xc6, 0x87, 0xef, 0xcd, 0x4d, 0x1b, 0x7f, 0xad, - 0x8e, 0x34, 0x09, 0x1d, 0x17, 0xfd, 0xc3, 0xe1, 0x53, 0xa2, 0xf5, 0x69, 0xa9, 0xd2, 0xa7, 0x29, 0xf0, 0x24, 0xc3, - 0x86, 0xeb, 0x16, 0xa6, 0xa3, 0xf9, 0x71, 0xf3, 0x55, 0xf2, 0xe2, 0x2c, 0x85, 0x6b, 0x6f, 0x3e, 0x4b, 0xe7, 0x53, - 0xb0, 0xae, 0x0c, 0xf3, 0x59, 0x3d, 0x0f, 0x20, 0x75, 0x08, 0x69, 0xd6, 0x34, 0xfc, 0x5b, 0xe5, 0x0a, 0xde, 0xda, - 0xe3, 0xdd, 0x60, 0x44, 0xa9, 0x23, 0x7d, 0xd2, 0x86, 0xd0, 0x25, 0x95, 0xfc, 0x47, 0x91, 0xc7, 0x18, 0xb3, 0xf1, - 0x9a, 0xc8, 0x3e, 0x8b, 0xfc, 0x55, 0x01, 0x80, 0x45, 0x80, 0x80, 0x9c, 0xce, 0x1d, 0x49, 0xfc, 0xe7, 0xe4, 0xdb, - 0x3f, 0xa6, 0x4b, 0xfb, 0x50, 0x16, 0x77, 0xa5, 0xa8, 0xaa, 0xa3, 0xd2, 0x76, 0xb6, 0x5c, 0x0f, 0xf4, 0xa1, 0xfd, - 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, 0x58, 0x3f, 0xbf, - 0xdf, 0xbd, 0x8d, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, 0xc3, 0x54, 0xe2, - 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0x7f, 0x54, 0x30, 0xff, 0x75, 0x7b, 0xb0, 0x3e, - 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0x17, 0xc2, 0x22, 0xf9, 0xf5, 0xc9, 0x91, - 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x91, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9e, 0xff, 0xb9, 0x99, 0xff, 0x03, 0x74, 0x86, - 0x2c, 0x5e, 0x70, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0x2f, 0x80, 0x83, 0xf9, 0x05, - 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0x37, 0x16, 0xcf, 0x95, 0x5c, 0x10, 0xfa, - 0xba, 0x0a, 0xb3, 0x71, 0x55, 0x6c, 0x2a, 0x51, 0x6c, 0xea, 0x1e, 0xa9, 0x65, 0xf3, 0x69, 0x6d, 0x2b, 0x64, 0x7f, - 0x12, 0x2d, 0xda, 0x2e, 0x43, 0x35, 0x19, 0x65, 0xe9, 0x7a, 0x0a, 0xa4, 0x7a, 0x01, 0x9c, 0x45, 0xe6, 0x95, 0x2f, - 0xce, 0x1e, 0xb0, 0x45, 0xe3, 0x29, 0x30, 0xa2, 0xd2, 0x1f, 0x79, 0x63, 0x74, 0x7a, 0xa2, 0xdf, 0xcf, 0xa7, 0x14, - 0xf2, 0xf5, 0x13, 0x60, 0x72, 0xd5, 0x72, 0x01, 0xfa, 0x32, 0xd4, 0x41, 0x25, 0x4a, 0xad, 0x18, 0x46, 0x2c, 0xfc, - 0x24, 0x90, 0xbd, 0x99, 0x82, 0x9a, 0x55, 0x94, 0x84, 0x4a, 0x54, 0x4a, 0xb6, 0x26, 0xa8, 0xa5, 0xf7, 0x45, 0x51, - 0xef, 0x2b, 0x70, 0x94, 0x8c, 0xb4, 0x59, 0x4e, 0x99, 0x71, 0x51, 0xe6, 0xa2, 0x1f, 0xec, 0xdf, 0x95, 0xe7, 0x37, - 0x32, 0x9f, 0xe5, 0xbe, 0xa3, 0x73, 0xda, 0x8e, 0x0b, 0x94, 0xb9, 0xe5, 0xb4, 0xd5, 0x92, 0xc7, 0xe4, 0x3d, 0x0b, - 0xb6, 0xfd, 0x97, 0x09, 0xf2, 0x2a, 0xc2, 0x7c, 0x42, 0x95, 0xcd, 0x3f, 0x20, 0xcc, 0x16, 0x07, 0xf6, 0xd8, 0x85, - 0x89, 0x48, 0x6f, 0xc1, 0x92, 0x18, 0x66, 0xa5, 0x08, 0xe3, 0x1d, 0x78, 0xff, 0x6c, 0x2a, 0x31, 0x3a, 0x43, 0x27, - 0xf7, 0xb3, 0x87, 0xb4, 0x4e, 0xce, 0xde, 0xbe, 0x3e, 0xfb, 0xae, 0x37, 0x28, 0x46, 0x69, 0x3c, 0xe8, 0x7d, 0x77, - 0xb6, 0xda, 0x00, 0x44, 0xa6, 0x38, 0x8b, 0xc9, 0x94, 0x26, 0xe2, 0x33, 0x32, 0x0c, 0x9e, 0xd5, 0x89, 0x38, 0xa3, - 0x89, 0xe9, 0xbe, 0x46, 0x69, 0xf2, 0xed, 0x28, 0xcc, 0xe1, 0xe5, 0x52, 0x6c, 0x2a, 0x11, 0x83, 0x9d, 0x52, 0xcd, - 0xb3, 0xbc, 0x7d, 0x16, 0xe7, 0xa3, 0x0e, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, 0x05, 0x84, 0x1e, - 0x00, 0x27, 0x5d, 0xf9, 0xf3, 0x70, 0x10, 0x09, 0x84, 0x5a, 0x30, 0x27, 0xd3, 0x88, 0x6e, 0x48, 0xaf, 0xb0, 0xcf, - 0xc0, 0x2c, 0xa4, 0x34, 0x0f, 0x6e, 0xae, 0x16, 0x2d, 0x77, 0xc5, 0xca, 0x51, 0x58, 0xad, 0x45, 0x54, 0x23, 0xd5, - 0x31, 0x38, 0xef, 0x40, 0x04, 0x80, 0x62, 0x04, 0xcf, 0x78, 0xd4, 0xef, 0x47, 0x2a, 0x28, 0x27, 0xa1, 0x5f, 0x14, - 0xfa, 0xa5, 0x31, 0x28, 0x63, 0xfe, 0x2e, 0xd4, 0xc4, 0x00, 0xf5, 0x96, 0x87, 0x8a, 0x23, 0x00, 0x97, 0x73, 0xc4, - 0x8c, 0xf3, 0x1e, 0x77, 0xd1, 0x38, 0x15, 0xef, 0x84, 0xba, 0x0e, 0x96, 0x0a, 0x75, 0xde, 0xd4, 0x47, 0x7a, 0x4e, - 0x9a, 0x04, 0x0d, 0xe2, 0x06, 0x1e, 0xaf, 0x86, 0x80, 0x6a, 0x25, 0xa4, 0xde, 0x42, 0xa7, 0x54, 0x75, 0x08, 0xac, - 0x01, 0x2e, 0x51, 0xd8, 0x56, 0x98, 0x1c, 0xd1, 0xa6, 0x2c, 0x45, 0x7e, 0xc4, 0x06, 0xed, 0x92, 0x91, 0xa9, 0x83, - 0xcb, 0xe5, 0x72, 0x22, 0xea, 0x5f, 0xf3, 0x2d, 0x80, 0xf3, 0x42, 0x7e, 0x6b, 0x37, 0x5b, 0x26, 0xd9, 0xae, 0x2b, - 0xc3, 0x59, 0x52, 0x8a, 0x6a, 0x5d, 0xe4, 0x55, 0x7a, 0x2f, 0x7e, 0xd6, 0x0f, 0x5d, 0x02, 0x29, 0xf4, 0x23, 0xbd, - 0x6e, 0x37, 0x47, 0xaa, 0x71, 0x74, 0x39, 0xb6, 0xa7, 0xd2, 0x4e, 0xf6, 0xaa, 0xc5, 0x9b, 0x2d, 0x73, 0x25, 0x69, - 0x1c, 0x8b, 0xfc, 0x6d, 0x1e, 0xa7, 0x91, 0x95, 0x1c, 0xfe, 0x1f, 0xde, 0xbe, 0x85, 0xbb, 0x6d, 0x1b, 0x5b, 0xf7, - 0xaf, 0x58, 0xbc, 0xa9, 0x4a, 0x44, 0x90, 0x2c, 0x39, 0x49, 0x67, 0x4a, 0x19, 0xd6, 0x71, 0xf3, 0x68, 0xd3, 0x36, - 0x71, 0x1a, 0xa7, 0x9d, 0xce, 0xe8, 0xea, 0xb8, 0x34, 0x09, 0x5b, 0x6c, 0x68, 0x40, 0x25, 0x29, 0x3f, 0x22, 0xf1, - 0xbf, 0xdf, 0xb5, 0x37, 0x9e, 0xa4, 0x68, 0x27, 0x33, 0xf7, 0xdc, 0xbb, 0xb2, 0x56, 0x2c, 0x82, 0x20, 0xde, 0xd8, - 0xd8, 0xd8, 0x8f, 0x6f, 0xeb, 0x00, 0xd5, 0x2e, 0xf2, 0x95, 0x8b, 0x8d, 0xfc, 0x22, 0x2b, 0x31, 0x60, 0x70, 0xa3, - 0x51, 0xad, 0x50, 0x53, 0x26, 0xf0, 0x85, 0x7c, 0x8f, 0x11, 0xb7, 0x59, 0x99, 0x00, 0xc3, 0x8f, 0x89, 0xfa, 0x92, - 0x9e, 0x42, 0x94, 0x07, 0x15, 0x8f, 0xfb, 0x05, 0x47, 0xc4, 0x6b, 0xab, 0x32, 0x07, 0x26, 0x5b, 0xab, 0x20, 0x11, - 0xec, 0x2e, 0x9b, 0xeb, 0x45, 0xb4, 0x50, 0x77, 0xa1, 0x5e, 0xbc, 0xdd, 0xf6, 0x12, 0x45, 0x07, 0x9c, 0xfc, 0x34, - 0x78, 0x15, 0x67, 0x39, 0x4f, 0xf7, 0x2a, 0xb9, 0xa7, 0x36, 0xd4, 0x9e, 0x72, 0xe6, 0x80, 0x9d, 0xf7, 0x75, 0xb5, - 0xa7, 0xd7, 0xf4, 0x9e, 0x6e, 0xe7, 0x1e, 0x5c, 0x30, 0x70, 0xe7, 0x5e, 0x66, 0xd7, 0x5c, 0xec, 0x81, 0x32, 0xd0, - 0x1a, 0x0f, 0xd4, 0xa2, 0x1a, 0xa9, 0x89, 0xd1, 0x81, 0xab, 0x13, 0x7d, 0x30, 0x07, 0xf4, 0x7b, 0x88, 0x15, 0xde, - 0x7a, 0xbb, 0xd2, 0x07, 0x6d, 0x40, 0x7f, 0x5e, 0x9a, 0x3e, 0xe8, 0x68, 0xf1, 0x2a, 0x24, 0x70, 0x63, 0x48, 0x35, - 0x52, 0xab, 0x91, 0x55, 0xa0, 0x78, 0xc3, 0x5b, 0xbc, 0x3b, 0xd7, 0x92, 0x8d, 0xf7, 0x12, 0x81, 0xbd, 0x32, 0x51, - 0xc5, 0x99, 0x38, 0xf6, 0x52, 0x79, 0xad, 0x9d, 0x64, 0x84, 0xf1, 0x2d, 0x2b, 0xa9, 0xbf, 0x43, 0xcc, 0x2d, 0xd2, - 0x1c, 0x06, 0x2f, 0xc3, 0x8a, 0xcc, 0x78, 0xbf, 0x2f, 0x67, 0x32, 0x2a, 0x67, 0x62, 0xbf, 0x8c, 0x14, 0x42, 0xdb, - 0x7d, 0x22, 0xa0, 0x07, 0x25, 0x40, 0xbe, 0x00, 0xa8, 0x7a, 0x48, 0xf8, 0xf3, 0x90, 0xd4, 0xa7, 0x53, 0xe8, 0x53, - 0x68, 0xeb, 0x15, 0xaf, 0xa0, 0xaa, 0x6e, 0x8c, 0x6c, 0xa3, 0x82, 0x16, 0x8f, 0xe5, 0x59, 0x6d, 0x18, 0x9b, 0x53, - 0xeb, 0x5d, 0x6f, 0x36, 0x98, 0xb2, 0xb9, 0x50, 0xab, 0x30, 0x24, 0xd1, 0x4d, 0xe9, 0x85, 0x0f, 0xb1, 0x58, 0x59, - 0xad, 0xcd, 0x6f, 0x62, 0x7f, 0x64, 0x22, 0xc5, 0xfd, 0x6c, 0x89, 0x73, 0x17, 0x8f, 0xe7, 0x55, 0x5f, 0x6b, 0x69, - 0x91, 0x69, 0xf3, 0x9d, 0xbe, 0x0c, 0x69, 0x2a, 0x6a, 0x48, 0xa3, 0xce, 0x0c, 0xba, 0x6f, 0x97, 0x57, 0x54, 0x23, - 0x4c, 0x80, 0x57, 0x3a, 0x83, 0x6e, 0x34, 0x1e, 0x88, 0xa2, 0x1a, 0x15, 0x6b, 0x21, 0x10, 0x6d, 0x18, 0x72, 0xcc, - 0x2c, 0x21, 0xc9, 0x3e, 0xf1, 0xef, 0x54, 0x70, 0x85, 0x22, 0xbe, 0x31, 0x70, 0xde, 0x95, 0xf5, 0xec, 0xae, 0x23, - 0x3f, 0x27, 0x16, 0x56, 0xfb, 0x0f, 0xcd, 0xa3, 0xd6, 0x38, 0x0b, 0x68, 0x6b, 0x5a, 0xdd, 0x70, 0xb8, 0x47, 0x75, - 0x2c, 0x4a, 0x03, 0x48, 0xec, 0x91, 0xe5, 0xa2, 0x75, 0xcc, 0xa0, 0x01, 0xfd, 0x6d, 0x76, 0xb5, 0xbe, 0x42, 0xd4, - 0xb6, 0x12, 0x59, 0x27, 0xa9, 0xfc, 0x4b, 0xda, 0xa3, 0xae, 0xed, 0xa9, 0xfc, 0x6f, 0xdb, 0x54, 0x39, 0xb4, 0x40, - 0xf2, 0xd8, 0xcd, 0x59, 0xa0, 0x3a, 0x12, 0x44, 0x81, 0xda, 0x7a, 0xc1, 0xd4, 0x3b, 0x65, 0x8a, 0x0e, 0xe4, 0xe7, - 0xc2, 0x9c, 0x61, 0x5f, 0x70, 0xc4, 0x98, 0xa5, 0x12, 0x83, 0xa9, 0x8f, 0x31, 0xaa, 0x69, 0xad, 0x00, 0x5d, 0x3f, - 0xdd, 0xc0, 0x9f, 0xa8, 0xa8, 0xd1, 0x50, 0x6b, 0x24, 0x85, 0xa2, 0x89, 0x0a, 0x3a, 0x96, 0x16, 0x3a, 0x98, 0x42, - 0x27, 0x91, 0xb0, 0x04, 0x34, 0x4c, 0x88, 0x4e, 0x2a, 0xf0, 0xd6, 0x00, 0xce, 0x7c, 0x5c, 0x94, 0xeb, 0x42, 0x1b, - 0xcc, 0xfd, 0x10, 0x5f, 0xf3, 0xd7, 0x2f, 0x9c, 0x51, 0x7d, 0xcb, 0x5a, 0xdf, 0xd3, 0x82, 0xfc, 0x10, 0x72, 0x8a, - 0x0e, 0x4c, 0xec, 0x68, 0x83, 0xc6, 0x18, 0x65, 0xad, 0x43, 0x5d, 0x9c, 0xe8, 0xf8, 0x2b, 0xda, 0x04, 0xef, 0x01, - 0x4f, 0x11, 0x6d, 0x78, 0x28, 0x8c, 0x55, 0x35, 0x3e, 0x95, 0xac, 0xa5, 0x07, 0x2b, 0x78, 0xba, 0x4e, 0x78, 0x08, - 0x7a, 0x24, 0xc2, 0x8e, 0xc2, 0x62, 0x1e, 0x2f, 0xe0, 0x38, 0x29, 0x08, 0xa8, 0x1d, 0xf4, 0x15, 0x7c, 0xbe, 0x40, - 0xf7, 0x57, 0x89, 0x1e, 0x60, 0x68, 0x41, 0xdc, 0x0c, 0x7d, 0x3a, 0xba, 0x8a, 0x57, 0x0d, 0x15, 0x09, 0x9f, 0x17, - 0x60, 0x3b, 0xa4, 0xd4, 0x53, 0xa0, 0x85, 0x4a, 0x94, 0x7e, 0x18, 0xf8, 0x0e, 0x0d, 0x7c, 0xad, 0x75, 0x80, 0x86, - 0x7e, 0xc6, 0x34, 0xb5, 0xce, 0x50, 0xf9, 0xcc, 0xbb, 0x67, 0x46, 0xcb, 0x99, 0x05, 0x63, 0xd0, 0xb7, 0xd1, 0x14, - 0xc5, 0x39, 0xf9, 0x2c, 0x28, 0xe2, 0x34, 0x8b, 0x73, 0xf0, 0xdb, 0x8c, 0x0b, 0xcc, 0x98, 0xc4, 0x15, 0xbf, 0x94, - 0x05, 0x68, 0xbb, 0x73, 0x95, 0x5a, 0xd7, 0x20, 0x20, 0xfb, 0x01, 0xac, 0x5e, 0x1a, 0x3a, 0x2a, 0xe7, 0xdd, 0xa5, - 0x4d, 0x21, 0x62, 0x11, 0x82, 0x4d, 0x33, 0x5d, 0xb2, 0xe3, 0x50, 0x69, 0x73, 0x20, 0xbe, 0x11, 0x1a, 0xf7, 0x4f, - 0xc3, 0xd8, 0x6a, 0x8a, 0xad, 0xdd, 0xdb, 0x76, 0xfb, 0x7b, 0xe9, 0xa5, 0xd3, 0x9c, 0xf4, 0x18, 0xfb, 0xbd, 0x0c, - 0x8b, 0x91, 0xed, 0x08, 0x81, 0x25, 0xe7, 0x7d, 0xea, 0xbf, 0xa2, 0xe5, 0x3c, 0x01, 0xd3, 0x11, 0x1d, 0x21, 0x17, - 0x28, 0x3b, 0x46, 0x71, 0x07, 0x06, 0x57, 0xf4, 0xfb, 0x60, 0x95, 0x61, 0x2e, 0x24, 0x4b, 0x92, 0x32, 0x78, 0x9e, - 0x7a, 0x18, 0xf0, 0x6b, 0xa6, 0xcc, 0x5d, 0x94, 0xf5, 0xe9, 0x92, 0x4c, 0x53, 0x64, 0x20, 0xd6, 0xe1, 0x26, 0x4b, - 0xa3, 0x44, 0x89, 0xc8, 0x96, 0xe8, 0x1f, 0x69, 0x28, 0x96, 0x0e, 0xd7, 0x8b, 0x54, 0x89, 0x50, 0x31, 0x4f, 0xf1, - 0xa4, 0x4e, 0xeb, 0x74, 0x84, 0xf1, 0x26, 0x41, 0x29, 0x57, 0xc3, 0x40, 0x95, 0x54, 0x2f, 0x85, 0x4d, 0xb1, 0xdd, - 0xea, 0x8b, 0x95, 0x98, 0xc7, 0x0b, 0x7c, 0x29, 0x70, 0x14, 0x7f, 0xe2, 0x5e, 0xac, 0x29, 0xb5, 0x3d, 0xa8, 0x1d, - 0x51, 0x42, 0x7f, 0xe2, 0x70, 0x91, 0xf8, 0x4e, 0xea, 0xb8, 0x7f, 0x68, 0x11, 0x72, 0xa6, 0x0e, 0x52, 0xc3, 0x0d, - 0xed, 0x08, 0xff, 0x0d, 0xd7, 0x67, 0x9c, 0xd1, 0x9b, 0x6a, 0x46, 0x8d, 0xdf, 0xeb, 0xe1, 0x19, 0xa3, 0x3e, 0x1b, - 0x38, 0xac, 0x10, 0x85, 0x36, 0xec, 0xa8, 0x54, 0xa2, 0x85, 0xa1, 0x54, 0x7f, 0x09, 0x15, 0x47, 0xdc, 0x99, 0x51, - 0x96, 0x8c, 0x4f, 0xcb, 0x43, 0x31, 0x1d, 0x0c, 0x4a, 0x52, 0x19, 0x0b, 0x3d, 0xb8, 0x1e, 0x78, 0xfe, 0x3d, 0x70, - 0x0b, 0xf1, 0xe0, 0x90, 0xc5, 0x90, 0x1b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8d, 0x4a, 0x15, 0xbc, 0x9a, 0xa8, 0x16, - 0xfc, 0x54, 0x86, 0x01, 0xfa, 0x24, 0x05, 0x60, 0x32, 0x98, 0xf2, 0x5b, 0x90, 0x28, 0x9d, 0xa9, 0x1b, 0xd2, 0xaf, - 0xa2, 0xe0, 0x17, 0xbc, 0xe0, 0x22, 0x71, 0x05, 0x58, 0xde, 0xc1, 0xf6, 0x3a, 0xaa, 0xa8, 0x02, 0xe2, 0x35, 0x3d, - 0x8e, 0xb8, 0xf1, 0xfe, 0x33, 0x3d, 0xb6, 0x40, 0xad, 0xd6, 0xb1, 0xc1, 0x67, 0x8e, 0xc1, 0x05, 0x5d, 0x4b, 0x6c, - 0x0d, 0xd5, 0xb0, 0x22, 0x30, 0x70, 0x01, 0x07, 0x61, 0x89, 0xe2, 0xd8, 0x4a, 0x5e, 0x91, 0x86, 0x94, 0xf6, 0x81, - 0xe1, 0x68, 0x93, 0x1c, 0xdf, 0x66, 0xd9, 0x4d, 0xe0, 0x7c, 0xd1, 0x39, 0x69, 0x26, 0x96, 0x0d, 0xde, 0xe7, 0xcd, - 0xf9, 0x75, 0xff, 0x90, 0x50, 0x15, 0xec, 0x86, 0xb7, 0x83, 0xdd, 0x38, 0xe1, 0xd7, 0x5c, 0x2c, 0x74, 0x7c, 0x16, - 0x73, 0xc9, 0xf2, 0x5b, 0xeb, 0xdd, 0x92, 0xa4, 0x56, 0x40, 0xfb, 0x2c, 0x0b, 0x6a, 0x22, 0x00, 0xdd, 0x0f, 0x7f, - 0x81, 0xd0, 0x19, 0xfe, 0xf6, 0x18, 0x5c, 0x91, 0xc2, 0x7b, 0x87, 0x40, 0x58, 0xd3, 0xcd, 0x9d, 0xda, 0x80, 0x2f, - 0xc6, 0xfd, 0x19, 0x53, 0x4f, 0xbf, 0xcd, 0xe4, 0xae, 0xae, 0xdb, 0x23, 0xcb, 0xf0, 0x11, 0xae, 0x14, 0x00, 0xcb, - 0x84, 0xbf, 0x18, 0x5b, 0x52, 0x7d, 0x02, 0x70, 0x6a, 0x3a, 0xa2, 0x4f, 0x10, 0x18, 0x38, 0x25, 0x5a, 0x8c, 0xae, - 0x95, 0x23, 0x9a, 0x41, 0x5a, 0xd3, 0xad, 0x30, 0xde, 0x7a, 0xd0, 0x42, 0xcf, 0x34, 0x9c, 0xf8, 0x0f, 0x9a, 0x79, - 0x55, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0xd1, 0x1c, 0x21, 0x3e, 0x61, 0x49, 0x34, 0x61, 0xf1, 0x4c, 0xf1, - 0x63, 0x42, 0x37, 0x4d, 0x6d, 0xd3, 0x07, 0xa4, 0xbf, 0xb8, 0x66, 0xfd, 0x94, 0x65, 0xed, 0xdb, 0x43, 0xc5, 0x8b, - 0x69, 0x33, 0xf8, 0x61, 0xa2, 0x8a, 0xf1, 0xbf, 0xa8, 0x7c, 0xa9, 0x15, 0xc0, 0x30, 0x77, 0xd5, 0xd3, 0xef, 0x37, - 0xb3, 0xe5, 0x40, 0xa8, 0xfc, 0xce, 0x20, 0xe9, 0xd3, 0xf1, 0xfc, 0xc0, 0x26, 0x51, 0x5b, 0xe8, 0xf9, 0xe3, 0x52, - 0x37, 0xa1, 0xf2, 0xda, 0xd4, 0x88, 0x56, 0xc8, 0x50, 0xd9, 0x3a, 0x60, 0x7d, 0xff, 0x10, 0xee, 0x2e, 0x6a, 0x1a, - 0x6a, 0xdd, 0x73, 0xd7, 0xa2, 0xe0, 0xc4, 0x1f, 0x60, 0x2c, 0x2e, 0x24, 0xb5, 0x0e, 0xc2, 0xa4, 0x1f, 0x2d, 0x4e, - 0x72, 0xa3, 0xae, 0x4e, 0xce, 0x14, 0xf3, 0x04, 0x2e, 0xaa, 0x65, 0xdb, 0x5f, 0x51, 0xa9, 0x4b, 0xb9, 0xbd, 0xa2, - 0x34, 0x3d, 0xa4, 0xed, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x0b, 0x05, 0x17, 0xd6, 0xc1, 0xba, 0xe3, 0x4e, 0xd9, - 0x13, 0x9e, 0x28, 0xd3, 0xda, 0xe0, 0xae, 0x1b, 0x8c, 0x89, 0xb1, 0xdf, 0x5d, 0xf2, 0xe4, 0x23, 0xb2, 0xe0, 0xdf, - 0x65, 0x02, 0x3c, 0x93, 0xdd, 0x2b, 0x95, 0xff, 0x07, 0xff, 0x6a, 0x6b, 0xdf, 0x59, 0xf3, 0x4f, 0xcf, 0x7a, 0xb8, - 0x73, 0x98, 0xfc, 0x00, 0x9d, 0x01, 0xdd, 0x5c, 0xc9, 0x94, 0x03, 0x32, 0x80, 0xb5, 0x48, 0x46, 0x03, 0x3e, 0xb4, - 0xb2, 0x6c, 0xfb, 0x4e, 0xab, 0x0b, 0xc2, 0xbd, 0x04, 0x6e, 0x7a, 0x7f, 0x6d, 0x66, 0xe6, 0x74, 0xad, 0x44, 0xd3, - 0xa5, 0xb1, 0xb5, 0x2c, 0x55, 0xc0, 0xee, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x70, 0x39, 0xcd, 0x2d, 0x75, 0xdb, 0xb8, - 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0xb5, 0x22, 0xf4, 0x54, 0x89, 0xd0, - 0xa7, 0x69, 0xb3, 0x0f, 0x76, 0x55, 0xad, 0x1b, 0x71, 0x8e, 0x06, 0xa9, 0x66, 0xe4, 0x4f, 0xae, 0x79, 0x71, 0x91, - 0xcb, 0x1b, 0xc0, 0x40, 0x26, 0xb5, 0x51, 0x58, 0x5e, 0x81, 0x3b, 0x3f, 0x3a, 0x8e, 0x33, 0x31, 0xca, 0x31, 0x58, - 0x2b, 0xc2, 0x23, 0xeb, 0xc4, 0x19, 0x80, 0x20, 0xfb, 0x93, 0xa6, 0xe3, 0xb9, 0x16, 0x18, 0xd3, 0x17, 0xb8, 0xab, - 0x9c, 0x1d, 0x6d, 0x72, 0xbb, 0xe8, 0x9b, 0x33, 0xac, 0x3b, 0x52, 0x5a, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, 0x06, - 0x6d, 0x11, 0x4a, 0x3e, 0xe4, 0x4e, 0xda, 0x4f, 0x01, 0x0d, 0xce, 0xb2, 0xf4, 0xd6, 0x5a, 0xe5, 0x6f, 0xb4, 0x10, - 0x27, 0x8a, 0xa9, 0x13, 0xdf, 0x44, 0x89, 0x3e, 0x3f, 0x13, 0xe3, 0x06, 0x02, 0xa9, 0x3f, 0x60, 0x50, 0x8d, 0x22, - 0x4c, 0xe0, 0x3a, 0x10, 0xc5, 0xf6, 0x44, 0x6d, 0x2c, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x41, 0x19, 0xc6, 0xea, 0xe2, - 0x40, 0x1b, 0x2c, 0x7d, 0xdd, 0x5a, 0xe7, 0x86, 0x50, 0x18, 0x27, 0x30, 0xc5, 0x20, 0xa9, 0xb3, 0xce, 0x32, 0x41, - 0x95, 0x1d, 0x93, 0xce, 0xfb, 0x00, 0xdd, 0x5d, 0x8b, 0xa6, 0xf8, 0xba, 0x73, 0x07, 0xdd, 0xc7, 0xf5, 0x6b, 0x2d, - 0x72, 0x83, 0x3f, 0x6f, 0x89, 0xb0, 0x08, 0x9c, 0xb5, 0x26, 0x5f, 0x35, 0xc2, 0x81, 0x29, 0xc9, 0x34, 0xec, 0x25, - 0xca, 0xa6, 0x7b, 0xbb, 0xed, 0xf5, 0xee, 0x15, 0x71, 0xf5, 0x18, 0xab, 0xbc, 0x9b, 0xb9, 0xbd, 0x53, 0xad, 0xc5, - 0xee, 0x4d, 0xdb, 0x4f, 0xb1, 0xa3, 0xd6, 0xda, 0xed, 0x86, 0x13, 0x6a, 0xc8, 0xb7, 0xa2, 0x4a, 0xab, 0xd3, 0x8d, - 0x41, 0x3b, 0xc4, 0xb3, 0x16, 0x19, 0xdc, 0x28, 0x5f, 0x38, 0xa1, 0x93, 0x8a, 0xb3, 0xea, 0xd4, 0x05, 0x9b, 0x2b, - 0x5e, 0x2d, 0x65, 0x1a, 0x09, 0x8a, 0x36, 0xe7, 0x51, 0x49, 0x13, 0xb9, 0x16, 0x55, 0x24, 0x6b, 0xd4, 0x8b, 0x5a, - 0x8d, 0x01, 0x02, 0x32, 0x9d, 0x35, 0x3d, 0xa8, 0x82, 0xd9, 0x50, 0x46, 0x72, 0xfa, 0x1e, 0x2c, 0xed, 0x91, 0x63, - 0xad, 0xef, 0xab, 0xb3, 0xc5, 0xb7, 0x7a, 0x42, 0x30, 0x85, 0xd9, 0x03, 0x61, 0xe0, 0x9a, 0xc6, 0x90, 0xd3, 0x2e, - 0x71, 0x59, 0xd3, 0x2d, 0xe1, 0x1e, 0x6e, 0x57, 0xb2, 0x23, 0x37, 0x4f, 0x9a, 0x9b, 0x2b, 0xd8, 0x51, 0x31, 0x1f, - 0x83, 0xf6, 0x4b, 0xaa, 0x6b, 0x97, 0xe6, 0xd6, 0xe3, 0x41, 0x40, 0x83, 0x41, 0x61, 0xf8, 0xd7, 0x89, 0xf1, 0xf0, - 0xa4, 0x01, 0x41, 0x52, 0x2e, 0xc2, 0xb1, 0x6f, 0x44, 0x3f, 0x99, 0xca, 0x43, 0x8e, 0x16, 0xef, 0xd0, 0xea, 0x04, - 0xa2, 0x78, 0x89, 0x50, 0x12, 0xa3, 0x2a, 0x34, 0x22, 0x28, 0x4f, 0xcb, 0x5f, 0xaa, 0xea, 0x10, 0x50, 0x48, 0xfb, - 0x8a, 0x42, 0xd9, 0x26, 0x31, 0x34, 0xc3, 0x2f, 0xe7, 0x93, 0x85, 0x9e, 0x81, 0x81, 0x9c, 0x1f, 0x2c, 0xf4, 0x2c, - 0x0c, 0xe4, 0xfc, 0xc9, 0xa2, 0x76, 0xeb, 0x40, 0x13, 0x10, 0xcf, 0x85, 0xa3, 0x93, 0xd2, 0xaa, 0x6c, 0x01, 0xdd, - 0x3c, 0x44, 0xd0, 0x7f, 0xb2, 0x87, 0xa0, 0x93, 0x0b, 0xed, 0xc8, 0x0d, 0x68, 0x3b, 0x0e, 0x81, 0xbd, 0x62, 0x52, - 0x61, 0x02, 0x10, 0x1d, 0xb2, 0x31, 0x18, 0x62, 0xab, 0x0f, 0x0e, 0xd9, 0x78, 0xea, 0x93, 0x20, 0x60, 0x74, 0x7f, - 0x30, 0x90, 0xe0, 0xb7, 0x78, 0x95, 0x3e, 0xda, 0x08, 0x74, 0xd3, 0x77, 0x77, 0x43, 0xef, 0xe2, 0x0a, 0x4e, 0xd5, - 0xee, 0x9e, 0x84, 0x6e, 0x32, 0xed, 0x00, 0xbd, 0x86, 0xb8, 0x21, 0xbf, 0x32, 0x1a, 0x8d, 0x6c, 0x4a, 0x48, 0x88, - 0xe1, 0x1c, 0x9a, 0x39, 0x2d, 0x97, 0xaf, 0x6e, 0x3d, 0x1b, 0x90, 0x61, 0xa6, 0xb7, 0x4c, 0xd6, 0x0f, 0x50, 0x56, - 0x3d, 0x86, 0x76, 0xe8, 0x3d, 0x72, 0xfc, 0xf0, 0xe0, 0x9b, 0x8c, 0x9f, 0x39, 0x5c, 0x7b, 0x38, 0x17, 0xbe, 0xcb, - 0x9a, 0x91, 0x39, 0x74, 0x9e, 0x7d, 0x1c, 0xef, 0x61, 0x9c, 0x7c, 0x9e, 0x85, 0xf2, 0xc6, 0x6b, 0xfa, 0x1f, 0x95, - 0xde, 0xec, 0x70, 0xc8, 0xe9, 0x0a, 0x56, 0xdc, 0xac, 0x0a, 0x0d, 0x3f, 0x8b, 0xbc, 0x71, 0xc4, 0x6b, 0x12, 0x55, - 0xdd, 0xe7, 0xbd, 0x0d, 0x53, 0xda, 0x31, 0x0e, 0x00, 0x4e, 0xd4, 0xaa, 0x61, 0x57, 0x1a, 0xd7, 0xea, 0x20, 0x86, - 0xa1, 0x84, 0xad, 0x12, 0x47, 0x42, 0xf9, 0x1b, 0x80, 0xb0, 0x18, 0x8a, 0xe3, 0xad, 0x61, 0x7d, 0x80, 0xfd, 0xd0, - 0x05, 0x9a, 0xe6, 0x94, 0x6a, 0x06, 0x00, 0x49, 0xc0, 0x1f, 0x3d, 0xdd, 0x34, 0x54, 0xb6, 0x79, 0x1e, 0x5a, 0x56, - 0x57, 0xf0, 0x40, 0x4f, 0x5d, 0xc9, 0xc0, 0xb8, 0xaa, 0x63, 0x6f, 0x73, 0x7f, 0x7b, 0xb4, 0x8a, 0x7c, 0x67, 0x93, - 0xda, 0x66, 0x55, 0x68, 0xec, 0xe3, 0x09, 0x3d, 0x9d, 0x00, 0xad, 0xd7, 0x96, 0x8a, 0xf6, 0xfb, 0x28, 0x46, 0x8d, - 0x0b, 0x05, 0x56, 0x61, 0x22, 0xc1, 0x21, 0xc2, 0x08, 0xa1, 0xdf, 0x97, 0xe1, 0xc6, 0x17, 0x64, 0x10, 0x0d, 0xd7, - 0xa2, 0xe3, 0x0f, 0x39, 0x5e, 0xb4, 0x2d, 0x55, 0x35, 0x27, 0x4d, 0x5b, 0x02, 0x6f, 0xc2, 0x01, 0xb6, 0xf3, 0x4f, - 0x1b, 0x22, 0x57, 0xe1, 0xa2, 0x84, 0xef, 0x88, 0x6b, 0x41, 0x74, 0x53, 0x9b, 0x7a, 0x1b, 0x76, 0x88, 0x8e, 0xa6, - 0x78, 0x74, 0xc8, 0x3d, 0x77, 0xcf, 0x6d, 0x11, 0xdf, 0x7c, 0x86, 0xdc, 0x35, 0x9d, 0xbd, 0x14, 0x61, 0x50, 0xb7, - 0x6c, 0xa0, 0x58, 0x87, 0x4e, 0x50, 0x80, 0x51, 0x5b, 0x3e, 0x01, 0x1d, 0x1b, 0x0c, 0x2a, 0x82, 0x4f, 0x0a, 0xdb, - 0xa6, 0x41, 0xfe, 0x88, 0x77, 0x43, 0x87, 0xd7, 0x96, 0x3c, 0x10, 0xaf, 0xb0, 0xcf, 0x94, 0x70, 0xff, 0x82, 0x82, - 0xee, 0x28, 0x2f, 0x57, 0x85, 0xab, 0xd2, 0x00, 0x54, 0xd9, 0xf1, 0x5c, 0x6b, 0x4a, 0x5a, 0xc0, 0x4a, 0x49, 0xdd, - 0xf9, 0x4d, 0x44, 0xdc, 0x92, 0xa9, 0x98, 0xad, 0xba, 0x51, 0xe5, 0xa1, 0x44, 0x91, 0x8e, 0x3d, 0xdb, 0x39, 0x58, - 0x03, 0xe0, 0x29, 0x6c, 0x2f, 0xce, 0xb0, 0xa0, 0x8c, 0xcb, 0x96, 0xb9, 0x04, 0x8a, 0xfa, 0x61, 0x9c, 0x97, 0x1d, - 0x5f, 0xee, 0x8e, 0xb6, 0xf7, 0xd0, 0x1b, 0xb1, 0x31, 0x5e, 0x5f, 0x46, 0x4d, 0xbf, 0x78, 0x86, 0x2b, 0x4b, 0x41, - 0x1e, 0x68, 0xaa, 0x47, 0x18, 0x1d, 0x02, 0xd3, 0x94, 0x1f, 0xb1, 0xf1, 0x74, 0x38, 0x34, 0x64, 0xd0, 0x6b, 0x26, - 0xc6, 0xff, 0xfa, 0x02, 0x5a, 0x67, 0x26, 0xae, 0xf1, 0x69, 0xfb, 0x0a, 0x5a, 0xdd, 0xa2, 0x4c, 0xee, 0x0c, 0x0c, - 0x1f, 0x68, 0xc9, 0x14, 0x4c, 0x15, 0xde, 0x10, 0xa9, 0x64, 0x9f, 0x96, 0xd6, 0x61, 0xdf, 0x2e, 0x14, 0x5a, 0x68, - 0xe2, 0x57, 0x19, 0xe2, 0xa7, 0xae, 0x33, 0xff, 0x36, 0xed, 0x53, 0x83, 0x58, 0x58, 0x12, 0xa3, 0x10, 0xbf, 0x38, - 0x55, 0xb6, 0x13, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x55, 0xec, 0x49, 0xa1, 0xf1, 0xd4, 0x70, 0xdf, - 0x0b, 0x1d, 0xb3, 0x0e, 0xb3, 0xb8, 0xcd, 0x1a, 0x49, 0x8d, 0x71, 0x2a, 0x4c, 0x70, 0x4a, 0xb9, 0x8a, 0x04, 0x46, - 0xc7, 0xb3, 0x85, 0x41, 0x54, 0x49, 0x4c, 0x32, 0xb6, 0x16, 0xc2, 0xc4, 0xae, 0x73, 0x85, 0x69, 0xea, 0x22, 0xf5, - 0x9b, 0x81, 0xc9, 0x82, 0x86, 0xfc, 0x1e, 0x8d, 0xd6, 0x54, 0x4d, 0x01, 0x86, 0x71, 0x94, 0x6a, 0xfc, 0x5b, 0x84, - 0xda, 0x0c, 0x03, 0x00, 0xdb, 0xbc, 0x93, 0x99, 0xa8, 0x5e, 0x0b, 0x84, 0x40, 0x73, 0xf6, 0x53, 0x45, 0xb5, 0x33, - 0x0b, 0x46, 0xd1, 0x6e, 0xaf, 0x7c, 0x3e, 0x70, 0x42, 0x79, 0xac, 0x2e, 0x50, 0xaf, 0x64, 0xf1, 0x46, 0xa6, 0xbc, - 0x15, 0x17, 0x73, 0x4f, 0xb2, 0x0f, 0xf9, 0x08, 0xce, 0x2b, 0x74, 0x2a, 0x37, 0xdb, 0x44, 0x99, 0x25, 0x49, 0xc6, - 0x02, 0x63, 0xf3, 0x12, 0xcc, 0xa4, 0x66, 0xc6, 0xf0, 0x6b, 0x08, 0x2e, 0xb6, 0x73, 0x12, 0x6e, 0xee, 0xe7, 0x81, - 0x21, 0x34, 0xb9, 0x68, 0x89, 0x86, 0xad, 0x1d, 0xaf, 0x27, 0xd7, 0x84, 0xfb, 0xb0, 0x11, 0x6b, 0x32, 0xc6, 0xb8, - 0x36, 0x37, 0xb2, 0x7e, 0xb4, 0xc0, 0x83, 0x31, 0x65, 0xfd, 0x09, 0x64, 0x5a, 0x49, 0x59, 0xe7, 0x0b, 0x23, 0x66, - 0x52, 0x89, 0xde, 0xed, 0x1b, 0x9f, 0xd5, 0x5d, 0x44, 0xfd, 0xd6, 0x7e, 0x4f, 0xea, 0xe1, 0xce, 0x7f, 0x50, 0x58, - 0x83, 0xca, 0x88, 0xcb, 0x88, 0xf2, 0xcc, 0x81, 0x6e, 0x9a, 0x14, 0x71, 0x7a, 0xb6, 0x8a, 0x8b, 0x92, 0xa7, 0x50, - 0xa9, 0xa6, 0x6e, 0x51, 0x6f, 0x02, 0xf6, 0x86, 0x48, 0x92, 0xac, 0xa5, 0xb1, 0x15, 0xbb, 0x34, 0x48, 0xcf, 0xbd, - 0x61, 0x96, 0x5e, 0x55, 0x68, 0x48, 0x4b, 0xbd, 0xb3, 0x50, 0xc9, 0xfc, 0x15, 0xff, 0x19, 0xd4, 0x0a, 0x74, 0xb4, - 0x49, 0x31, 0x9e, 0x03, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x09, 0x4a, 0xbd, 0x23, 0x76, 0xfc, 0xdc, - 0xe4, 0xe1, 0x5d, 0xc8, 0x39, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0x48, 0x8c, 0xd4, 0x0c, 0xa0, 0xe9, 0xa0, - 0xcc, 0x79, 0x2c, 0x82, 0x59, 0xcf, 0x24, 0x46, 0x3d, 0xae, 0x7f, 0x81, 0x86, 0xda, 0x6f, 0x56, 0x96, 0x67, 0xd5, - 0xdd, 0x97, 0x70, 0x60, 0x53, 0x5b, 0x41, 0x8f, 0xd7, 0x95, 0xbc, 0xbc, 0x54, 0xdd, 0xf6, 0x0b, 0x31, 0x72, 0xba, - 0xc6, 0xb5, 0x74, 0x5e, 0x2d, 0x58, 0xaf, 0x3b, 0xdd, 0x2c, 0xee, 0x66, 0x19, 0x0d, 0x84, 0xb5, 0x9d, 0x4f, 0x34, - 0x7f, 0xd6, 0x6c, 0xbb, 0x8f, 0xb7, 0x20, 0x66, 0x01, 0x00, 0xa4, 0x07, 0x51, 0xb0, 0xcc, 0x52, 0x1e, 0x50, 0x79, - 0x1f, 0x47, 0x59, 0x28, 0xbd, 0x9c, 0x65, 0xfc, 0xb4, 0x69, 0xac, 0x75, 0x56, 0x28, 0x43, 0x6b, 0xa3, 0x3b, 0x5d, - 0x65, 0x88, 0xed, 0x27, 0x71, 0xb6, 0x00, 0xf7, 0xc7, 0x0c, 0x85, 0x86, 0xce, 0x32, 0xd2, 0x44, 0xc3, 0x77, 0xdd, - 0x33, 0xc8, 0x28, 0x4e, 0xd6, 0x79, 0x25, 0xdd, 0xe8, 0xb3, 0x36, 0x12, 0xe6, 0x1e, 0xa2, 0x5f, 0xc5, 0xe0, 0x51, - 0xee, 0xf3, 0xda, 0xe8, 0x64, 0x5a, 0x46, 0xda, 0x9d, 0x9f, 0xd4, 0xcb, 0x2c, 0xd5, 0x3a, 0x6c, 0x9f, 0x61, 0x6f, - 0x8d, 0x49, 0x6f, 0x42, 0x6a, 0x18, 0x89, 0xcf, 0x67, 0xd4, 0x08, 0x01, 0x6d, 0x39, 0xfe, 0x0e, 0x9f, 0x61, 0x68, - 0x0a, 0x2c, 0x55, 0xdc, 0xc2, 0x6e, 0xf8, 0x9a, 0x4f, 0x56, 0x2d, 0x00, 0x11, 0xac, 0x7c, 0xbd, 0x8b, 0x57, 0x42, - 0x7d, 0xa6, 0xcd, 0x00, 0x90, 0x05, 0xa5, 0xdc, 0xf1, 0x53, 0x2a, 0x1d, 0x2c, 0x51, 0xb4, 0xbd, 0x9c, 0xbe, 0xd1, - 0xb1, 0xf1, 0x43, 0x7a, 0x2e, 0x60, 0xbb, 0x90, 0xdf, 0xba, 0x57, 0x2f, 0x51, 0x91, 0xda, 0x36, 0xeb, 0x01, 0xbe, - 0xdc, 0xa0, 0x49, 0x18, 0x41, 0x99, 0x32, 0x05, 0x30, 0xb8, 0xa9, 0x46, 0xc1, 0xa4, 0xd5, 0x48, 0xd8, 0x52, 0x4f, - 0xb2, 0xdc, 0xf4, 0xc1, 0xa9, 0xee, 0x11, 0xf4, 0x68, 0x87, 0x93, 0x96, 0xfd, 0x5a, 0xc1, 0xd1, 0xc9, 0xd5, 0x10, - 0x35, 0xf3, 0x5e, 0xdb, 0x91, 0x21, 0xe5, 0x32, 0x0c, 0x04, 0x53, 0x8e, 0x79, 0x7a, 0x6c, 0x3d, 0x23, 0xa2, 0x07, - 0xce, 0x3e, 0xd3, 0xad, 0xba, 0x92, 0x80, 0xe8, 0xf8, 0xcd, 0xd3, 0xd7, 0x57, 0xf1, 0xa5, 0x41, 0x51, 0x6a, 0x58, - 0xc4, 0x28, 0xd3, 0xbe, 0x4a, 0xc2, 0xe0, 0xfd, 0xfa, 0xfe, 0x67, 0x95, 0xa5, 0xf6, 0x7b, 0xb0, 0xb1, 0xa2, 0xaa, - 0x5f, 0x4b, 0x5e, 0x34, 0x05, 0x58, 0xf7, 0x59, 0xa2, 0x40, 0xee, 0xf7, 0x36, 0xcd, 0x7c, 0x13, 0x35, 0x6e, 0x36, - 0xac, 0x37, 0xae, 0xdb, 0xa5, 0xb6, 0x64, 0x47, 0x56, 0x22, 0x67, 0x16, 0x83, 0x19, 0x3f, 0x2a, 0x0c, 0x4a, 0xc3, - 0x06, 0x55, 0xa9, 0xf8, 0xbd, 0x11, 0xc1, 0xa9, 0x63, 0x55, 0x61, 0x4c, 0x03, 0x66, 0x5b, 0x51, 0x6b, 0x50, 0x07, - 0xa5, 0xb4, 0x35, 0x51, 0xd8, 0x7e, 0x67, 0x05, 0x35, 0xbf, 0xff, 0x69, 0x0c, 0xf9, 0x9a, 0x52, 0x50, 0x49, 0xc0, - 0xce, 0xa0, 0xd1, 0x53, 0x25, 0x0c, 0xa4, 0x20, 0x78, 0x02, 0x94, 0x2f, 0xa2, 0xc6, 0x6a, 0xb7, 0xaf, 0x4e, 0x8d, - 0xd1, 0x16, 0x10, 0x5a, 0x48, 0x8f, 0x2e, 0xfb, 0xb8, 0x8d, 0x75, 0x20, 0xf1, 0xe0, 0x04, 0xdb, 0xb9, 0xba, 0x46, - 0x23, 0xa1, 0xf9, 0x43, 0xa3, 0x01, 0xaf, 0x69, 0x05, 0x0a, 0xf5, 0x1c, 0x47, 0x43, 0x67, 0x87, 0x14, 0x44, 0x6c, - 0xd0, 0xc2, 0xbe, 0x7b, 0x3e, 0x34, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x4d, 0xa5, 0xfb, 0xdc, 0x2d, 0x21, 0x6b, 0xd5, - 0xa1, 0xac, 0x3c, 0xc0, 0xf1, 0x42, 0xc9, 0xfc, 0x1d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x63, 0xc4, 0x02, 0x96, 0x04, - 0xed, 0xf5, 0x40, 0xfd, 0x32, 0x08, 0x15, 0xce, 0xf4, 0x44, 0xe2, 0x53, 0xca, 0xd5, 0xa7, 0x05, 0xa9, 0xa7, 0x05, - 0x73, 0xa0, 0x97, 0xbe, 0x95, 0x5f, 0xd9, 0xf8, 0x68, 0x77, 0xef, 0x9a, 0x0b, 0xeb, 0x18, 0x82, 0x61, 0x0b, 0xbf, - 0x39, 0x35, 0x05, 0x60, 0xc3, 0x63, 0x5d, 0x96, 0x6f, 0xd4, 0x44, 0x66, 0x71, 0x48, 0x22, 0x90, 0x6c, 0x37, 0x37, - 0xb7, 0x11, 0x6c, 0x7b, 0x0b, 0xb5, 0xa1, 0xfe, 0xf2, 0xb6, 0xfb, 0x3d, 0xc3, 0xcb, 0x3d, 0xb9, 0x77, 0xd3, 0x86, - 0xf2, 0x87, 0xfb, 0x57, 0xc9, 0xff, 0x55, 0x25, 0xf7, 0x5b, 0x65, 0xd6, 0x6d, 0xf1, 0x7e, 0xd7, 0x71, 0xcb, 0x31, - 0x1a, 0x04, 0xd6, 0x14, 0x18, 0x48, 0x4f, 0x1a, 0xd3, 0x44, 0x87, 0x54, 0x66, 0xcc, 0xe0, 0xd1, 0x05, 0x68, 0x0e, - 0xd3, 0x79, 0x1e, 0x03, 0x70, 0x80, 0x7f, 0xe4, 0x11, 0xea, 0x9f, 0xce, 0xf3, 0xe0, 0x2c, 0x18, 0x94, 0x83, 0x40, - 0x7f, 0xe2, 0x9a, 0x13, 0x2c, 0x40, 0xe7, 0x16, 0x33, 0x08, 0x36, 0x69, 0xcd, 0x1c, 0xe2, 0xc3, 0x64, 0x3a, 0x18, - 0xc4, 0x64, 0x03, 0x20, 0x7d, 0xf1, 0xc2, 0x3a, 0x07, 0x15, 0x7a, 0x41, 0xb6, 0xea, 0x2e, 0x9a, 0x15, 0x7b, 0xd5, - 0x4e, 0xf3, 0x7e, 0x3f, 0x9f, 0x97, 0x83, 0xa0, 0x51, 0x61, 0x61, 0xbc, 0xff, 0x68, 0xf3, 0x4b, 0xa3, 0x93, 0x26, - 0x18, 0xa6, 0xf6, 0x18, 0xd5, 0x2b, 0x9e, 0x66, 0xb4, 0x71, 0x3b, 0x56, 0xca, 0x17, 0x10, 0xc5, 0x03, 0x43, 0xd6, - 0xca, 0xbb, 0x73, 0xf0, 0xba, 0xdc, 0x78, 0x73, 0x44, 0x01, 0x76, 0x53, 0x18, 0x27, 0x35, 0x17, 0x5d, 0xd4, 0xc4, - 0x33, 0xd8, 0xe9, 0xea, 0xad, 0x44, 0xab, 0xf1, 0x5e, 0xbc, 0x6b, 0x36, 0xfe, 0x56, 0xee, 0xe9, 0x32, 0xf7, 0x2e, - 0x00, 0x71, 0x76, 0x2f, 0xae, 0xf6, 0xb0, 0xd4, 0xbd, 0x60, 0x60, 0x91, 0x43, 0xda, 0xd5, 0xea, 0xa1, 0x88, 0xd4, - 0x79, 0x0c, 0x06, 0x4c, 0xa6, 0x21, 0x35, 0x99, 0xf6, 0x0a, 0x05, 0x69, 0x63, 0xad, 0x05, 0xb4, 0xe1, 0xb0, 0xd8, - 0xb1, 0x1b, 0x76, 0xa7, 0x5b, 0x87, 0x42, 0x09, 0xa3, 0x57, 0xd7, 0xcd, 0x43, 0xad, 0xe1, 0x89, 0xa0, 0x07, 0xd5, - 0x68, 0x3f, 0x3d, 0x94, 0x27, 0xed, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0x52, 0xe0, 0x45, 0x7b, 0x07, 0x79, 0xce, - 0x7c, 0xaa, 0x7c, 0x10, 0x1b, 0x6e, 0x19, 0x3e, 0xb4, 0x8f, 0x6f, 0x05, 0x32, 0xa9, 0x3b, 0x9a, 0xda, 0xda, 0x1d, - 0x8d, 0x63, 0x02, 0xfd, 0xa6, 0x1c, 0xa5, 0x4c, 0x4c, 0x2d, 0x4b, 0x76, 0xd4, 0xcb, 0x95, 0x37, 0x54, 0xca, 0x8e, - 0x96, 0x6d, 0xce, 0x2f, 0x6d, 0x24, 0xf4, 0xfb, 0xda, 0x1d, 0x08, 0xdf, 0xa8, 0xf5, 0x86, 0xbc, 0x6c, 0x88, 0x58, - 0x0e, 0x31, 0x03, 0xc7, 0x0b, 0xa9, 0x5c, 0xbb, 0x8b, 0xa6, 0xaa, 0x6e, 0x67, 0x2b, 0x17, 0xb4, 0xc4, 0x5b, 0x29, - 0xb0, 0x8a, 0xd4, 0xe9, 0xf5, 0x54, 0xe2, 0x7d, 0x1f, 0xc5, 0xf6, 0x23, 0x60, 0x1b, 0x1b, 0x47, 0x63, 0xe3, 0x16, - 0xb1, 0xc1, 0x57, 0x51, 0x45, 0x0b, 0x0e, 0x10, 0xdc, 0x6d, 0x49, 0x2d, 0xcd, 0x1c, 0xe2, 0xbe, 0xe2, 0x01, 0xda, - 0x77, 0x71, 0xc4, 0xa9, 0x00, 0xdb, 0xba, 0xd6, 0x39, 0xab, 0xe5, 0x80, 0xcd, 0x44, 0xcf, 0x3f, 0xad, 0x1a, 0x89, - 0x18, 0x56, 0xd9, 0x48, 0x59, 0xa1, 0x3d, 0x28, 0x5d, 0xc2, 0xc5, 0x17, 0xe0, 0x65, 0xfb, 0x7e, 0x65, 0xf7, 0xd9, - 0x12, 0xfb, 0x87, 0x79, 0xd5, 0x04, 0x8f, 0xbc, 0xc6, 0xdb, 0x7b, 0x98, 0xf8, 0x52, 0x29, 0x84, 0x57, 0x29, 0x0d, - 0x25, 0x00, 0x83, 0x24, 0xa8, 0xe1, 0x4a, 0xdb, 0x66, 0x90, 0xca, 0x18, 0x76, 0xb7, 0x7a, 0xab, 0xff, 0xd3, 0x2a, - 0x5c, 0x54, 0xb2, 0x18, 0x93, 0x40, 0xe7, 0x54, 0xcb, 0x4d, 0x4c, 0xc1, 0xb3, 0x5d, 0x72, 0x04, 0x0a, 0x3b, 0x01, - 0xdc, 0x50, 0xc2, 0x7e, 0xc5, 0xdb, 0x50, 0xce, 0x5e, 0x59, 0xc9, 0x93, 0xdb, 0x97, 0x54, 0xd0, 0x84, 0x4c, 0x85, - 0xdd, 0xbf, 0xad, 0x0d, 0xfb, 0x22, 0x94, 0x23, 0x29, 0x70, 0x71, 0xd0, 0x39, 0x80, 0xfd, 0x41, 0x2e, 0x63, 0xf3, - 0x99, 0xf4, 0xfb, 0xea, 0xfd, 0xf3, 0x3c, 0x4b, 0x3e, 0xee, 0xbc, 0x37, 0x3c, 0xcd, 0x92, 0x01, 0x95, 0x88, 0xa9, - 0x75, 0x55, 0x0c, 0x97, 0xda, 0xc5, 0xb8, 0x41, 0x32, 0xe2, 0x7b, 0xa9, 0x43, 0x8c, 0x18, 0x5f, 0x64, 0x87, 0xa4, - 0xe4, 0x74, 0x59, 0x77, 0xf6, 0x5c, 0x8b, 0x66, 0xd0, 0x18, 0x6e, 0xc7, 0x7b, 0x49, 0xaf, 0x00, 0x15, 0x15, 0xba, - 0x67, 0x81, 0x6b, 0x78, 0x73, 0x49, 0x34, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xb8, 0x57, 0x26, 0x24, 0xd5, 0xc6, 0x01, - 0x16, 0xb1, 0xae, 0x3f, 0x86, 0x12, 0x80, 0x5a, 0x0d, 0xd2, 0x2b, 0x7d, 0x45, 0xa8, 0x4a, 0x42, 0x30, 0x3a, 0x91, - 0xf0, 0x32, 0xa0, 0x71, 0x66, 0x12, 0x2d, 0x6c, 0x70, 0x40, 0x5f, 0x54, 0x26, 0xd1, 0xd8, 0x90, 0x07, 0xb4, 0xb2, - 0x69, 0x00, 0x83, 0x0f, 0x92, 0x24, 0xfa, 0x7a, 0x69, 0x92, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x4b, 0xe9, 0xf9, - 0x58, 0xfe, 0xcb, 0x3b, 0x94, 0x7e, 0x08, 0x25, 0xc8, 0x14, 0x75, 0xc5, 0x34, 0x63, 0x47, 0x59, 0xb7, 0x31, 0x89, - 0xe7, 0x69, 0x77, 0x5b, 0x28, 0x97, 0x2e, 0xf0, 0x2b, 0xcb, 0x10, 0xc7, 0xfa, 0x79, 0xbc, 0x62, 0xc7, 0x21, 0xd7, - 0x78, 0xe9, 0xcf, 0xe3, 0x15, 0xce, 0x10, 0xad, 0x5a, 0x09, 0x44, 0xf9, 0xaf, 0xda, 0xc0, 0x21, 0xee, 0x13, 0x0c, - 0x72, 0x51, 0x79, 0x0f, 0x04, 0xf2, 0xb6, 0x82, 0x88, 0x34, 0xb3, 0xeb, 0x30, 0x22, 0xd5, 0x4e, 0x92, 0xf9, 0xf2, - 0x47, 0x99, 0x09, 0xef, 0x1b, 0x78, 0x6c, 0x36, 0xcb, 0xa6, 0x98, 0x2f, 0x54, 0x30, 0x07, 0xf7, 0x89, 0x8a, 0x4b, - 0x51, 0xf9, 0x4f, 0xd8, 0x05, 0x2f, 0xc6, 0x83, 0xd7, 0x6b, 0x04, 0xd8, 0xaf, 0xfc, 0x27, 0x6f, 0xcc, 0xde, 0x5a, - 0x37, 0xbe, 0xcc, 0x44, 0x7c, 0xe0, 0xa3, 0x5b, 0xca, 0x47, 0x77, 0x5e, 0xa6, 0x3f, 0x1b, 0x50, 0x22, 0xa3, 0xb2, - 0xe2, 0xab, 0x15, 0x4f, 0x67, 0xb7, 0x49, 0x94, 0x8d, 0x2a, 0x2e, 0x60, 0x7a, 0xc1, 0xf1, 0x2e, 0x59, 0x9f, 0x67, - 0xc9, 0x6b, 0x88, 0x3d, 0xb0, 0x92, 0x0a, 0x8b, 0x1f, 0x96, 0x99, 0x5a, 0xcc, 0x42, 0x56, 0x52, 0xf0, 0x60, 0x76, - 0x9d, 0x44, 0x6f, 0x97, 0x1e, 0x92, 0x9a, 0x99, 0xb2, 0x4d, 0xed, 0x08, 0xb5, 0xf1, 0x75, 0xa4, 0x1b, 0x6d, 0x01, - 0x00, 0xf7, 0x6c, 0x91, 0x46, 0x92, 0x89, 0xe1, 0xa4, 0x66, 0xdc, 0xa4, 0x17, 0x98, 0x1a, 0xd7, 0xac, 0xa2, 0x89, - 0xb3, 0x90, 0x01, 0xbd, 0x3f, 0xe0, 0xe5, 0xe0, 0x73, 0x06, 0xf7, 0x1f, 0xb4, 0x06, 0x2e, 0x0f, 0x8b, 0x7e, 0x5f, - 0x1e, 0x16, 0xdb, 0x6d, 0x79, 0x14, 0xf7, 0xfb, 0xf2, 0x28, 0x36, 0xfc, 0x83, 0x52, 0x6c, 0x1b, 0x73, 0x83, 0x84, - 0xe6, 0x12, 0xa2, 0x16, 0x8d, 0xe0, 0x0f, 0xcd, 0x72, 0x2e, 0xa2, 0xfc, 0x30, 0xe9, 0xf7, 0x7b, 0xcb, 0x99, 0x18, - 0xe4, 0xc3, 0x24, 0xca, 0x87, 0x89, 0xe7, 0x84, 0xf8, 0x9b, 0xe7, 0x84, 0xa8, 0x68, 0xe0, 0x0a, 0xce, 0x0c, 0x40, - 0x14, 0xf0, 0xe9, 0x1f, 0xd5, 0xb5, 0x14, 0xba, 0x96, 0x58, 0xd5, 0x92, 0xe8, 0x0a, 0x6a, 0x76, 0x5d, 0x84, 0x25, - 0x96, 0x42, 0x97, 0xec, 0xcf, 0x25, 0xf0, 0x44, 0x39, 0xaf, 0x36, 0xc0, 0xc0, 0x46, 0x78, 0xe7, 0x30, 0xe1, 0x24, - 0xd6, 0x35, 0xa0, 0x9d, 0x6e, 0x6a, 0x7a, 0x41, 0x57, 0xf4, 0x12, 0xf9, 0xd9, 0x0b, 0x30, 0x58, 0x3a, 0x64, 0xf9, - 0x74, 0x30, 0xb8, 0x20, 0x2b, 0x56, 0xce, 0xc3, 0x78, 0x10, 0xae, 0x67, 0xf9, 0xf0, 0x22, 0xba, 0x20, 0xe4, 0xab, - 0x62, 0x41, 0x7b, 0xab, 0x51, 0xf9, 0x31, 0x83, 0xe0, 0x7e, 0xe9, 0x2c, 0xcc, 0x4c, 0x9c, 0x8f, 0xd5, 0xe8, 0x96, - 0xae, 0x20, 0x7e, 0x0d, 0xdc, 0x48, 0x48, 0x04, 0x1d, 0xb9, 0xa4, 0x2b, 0xba, 0xa6, 0xd2, 0xcc, 0x30, 0x86, 0xe8, - 0xb6, 0xc7, 0x49, 0x02, 0x8e, 0xc9, 0xae, 0xf8, 0x68, 0xac, 0x0a, 0xef, 0xfa, 0x8e, 0xd0, 0x5e, 0x2f, 0x71, 0x83, - 0xf4, 0x5d, 0x7b, 0x90, 0x80, 0x11, 0x19, 0xa9, 0x81, 0x32, 0x23, 0x23, 0xa9, 0x99, 0x54, 0x1c, 0x92, 0xd8, 0x1f, - 0x12, 0x35, 0x0e, 0x89, 0x3f, 0x0e, 0xb9, 0x1e, 0x07, 0xe4, 0xee, 0x97, 0x6c, 0x4c, 0x53, 0x36, 0xa6, 0x6b, 0x35, - 0x2a, 0xf4, 0x8a, 0x9e, 0x6b, 0xea, 0x78, 0xc6, 0xde, 0xc0, 0x81, 0x3d, 0x08, 0xf3, 0x59, 0x3c, 0x7c, 0x13, 0xbd, - 0x21, 0xe4, 0x2b, 0x49, 0xaf, 0xd5, 0xa5, 0x0c, 0xc2, 0x20, 0x5e, 0x81, 0x73, 0xa9, 0x0b, 0x75, 0x72, 0x65, 0x76, - 0x1c, 0x3e, 0x5d, 0x36, 0x9e, 0xce, 0x21, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x05, 0x2b, 0xe7, 0x67, 0xe1, - 0x98, 0x00, 0x0e, 0x8f, 0x1e, 0xce, 0x8b, 0xd1, 0x2d, 0xbd, 0x18, 0xdd, 0x11, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0x87, - 0x2c, 0x9e, 0x0e, 0x06, 0x6b, 0xa4, 0xea, 0x2a, 0xf7, 0x9a, 0x2c, 0xe8, 0x05, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x13, - 0x6b, 0x43, 0xc3, 0xdf, 0x30, 0xf8, 0xf8, 0x8e, 0x5d, 0x8c, 0xee, 0xe8, 0x2d, 0x7b, 0xb3, 0x1d, 0x4f, 0x81, 0x99, - 0x5a, 0xcd, 0xc2, 0xbb, 0xc3, 0xcb, 0xd9, 0x25, 0xbb, 0x8b, 0xee, 0x8e, 0xa0, 0xa1, 0x57, 0xec, 0x0e, 0x01, 0x97, - 0xd2, 0xc7, 0xcb, 0xc1, 0x1b, 0xb2, 0x3f, 0x18, 0xa4, 0x24, 0x0a, 0xaf, 0x43, 0xaf, 0x95, 0x6f, 0xe8, 0x1d, 0xa1, - 0x2b, 0x76, 0x8b, 0xa3, 0x71, 0xc9, 0xf0, 0x83, 0x73, 0x76, 0x57, 0x5f, 0x87, 0xde, 0x6e, 0x4e, 0x44, 0x27, 0x88, - 0x11, 0xfa, 0x1a, 0x38, 0x9a, 0xe5, 0xc2, 0x4c, 0xc0, 0x93, 0xb9, 0xc8, 0x68, 0x51, 0x68, 0x06, 0xe2, 0xac, 0x04, - 0xc4, 0x92, 0xa8, 0xfb, 0xcd, 0x46, 0x67, 0xb0, 0x9c, 0xfb, 0xfd, 0x5e, 0x65, 0xe8, 0x01, 0x22, 0x67, 0x76, 0xd2, - 0x83, 0x9e, 0x4f, 0x0f, 0xf0, 0x13, 0xbd, 0x6a, 0x10, 0x27, 0xf3, 0xbb, 0x65, 0xf4, 0x9b, 0x47, 0x1f, 0x7e, 0xe8, - 0xa6, 0x3c, 0x22, 0xff, 0xf7, 0x29, 0x4f, 0x99, 0x47, 0x6f, 0x2a, 0x0f, 0x04, 0xcf, 0x5b, 0x93, 0x4a, 0x23, 0x51, - 0x8d, 0xce, 0x56, 0x31, 0x68, 0x23, 0x51, 0xdb, 0xa0, 0x9f, 0xd0, 0xc2, 0x0a, 0x22, 0xe4, 0x1c, 0xbc, 0x00, 0x83, - 0x54, 0x08, 0x95, 0xa3, 0x16, 0x25, 0x1a, 0x82, 0xe4, 0xb2, 0xe4, 0x2a, 0x7c, 0x0e, 0xa1, 0xea, 0xf4, 0x71, 0x26, - 0xc2, 0x86, 0x1e, 0x87, 0x3e, 0x00, 0xfc, 0xaf, 0x3b, 0xe4, 0xa2, 0xe4, 0x97, 0x78, 0x36, 0xb7, 0x09, 0x46, 0xc1, - 0x12, 0xd1, 0x0c, 0x6d, 0x83, 0xd8, 0x8f, 0x25, 0xc1, 0x7a, 0x24, 0x8d, 0x47, 0xa5, 0x39, 0x22, 0xfc, 0x28, 0x3e, - 0x8a, 0x9e, 0xc6, 0x86, 0x44, 0x72, 0x24, 0x91, 0x7c, 0x00, 0x84, 0x93, 0xa0, 0xbf, 0xb8, 0x6b, 0xb2, 0x6b, 0x21, - 0x31, 0xe8, 0x4f, 0x4b, 0xa6, 0x65, 0xf7, 0xaa, 0xc7, 0xbe, 0x22, 0xc8, 0x1d, 0xd3, 0x7f, 0x79, 0x7d, 0xf8, 0xe7, - 0x12, 0x67, 0xd0, 0x7a, 0xbe, 0xa8, 0xce, 0xcc, 0xbc, 0xc1, 0x8d, 0xbc, 0x2e, 0x6b, 0xd7, 0xe5, 0x0b, 0xbe, 0xc7, - 0x6f, 0x2b, 0x2e, 0xd2, 0x72, 0xef, 0x97, 0xaa, 0x8d, 0xe7, 0x54, 0xae, 0x57, 0x2e, 0xce, 0x8a, 0x32, 0x4e, 0xf5, - 0xa4, 0x2e, 0xc6, 0x1a, 0xb6, 0xe1, 0xf7, 0x88, 0xba, 0x92, 0x96, 0xa3, 0xa7, 0x94, 0xab, 0x66, 0xca, 0xc5, 0x3a, - 0xcf, 0x7f, 0xde, 0x49, 0xc5, 0x29, 0x6e, 0xa6, 0x20, 0x55, 0x6a, 0xb9, 0x80, 0xea, 0x39, 0x6a, 0xb9, 0x5b, 0x9a, - 0x1d, 0xe0, 0xdc, 0x36, 0xd5, 0xc7, 0xca, 0xec, 0xc2, 0x4b, 0x6e, 0xdc, 0x9f, 0x4c, 0x19, 0x16, 0x8c, 0x42, 0x9b, - 0x55, 0x57, 0xda, 0xbe, 0xd0, 0x3a, 0x0d, 0xc3, 0x95, 0x1f, 0x2f, 0x20, 0x5d, 0xc0, 0x38, 0x5e, 0x94, 0x4c, 0x8c, - 0xdb, 0xa3, 0xb7, 0x82, 0xf8, 0x92, 0xad, 0x40, 0xc0, 0x5c, 0xc3, 0xdb, 0x75, 0x1d, 0x6d, 0xf7, 0xc4, 0x29, 0xa3, - 0x72, 0x15, 0x8b, 0xef, 0xe3, 0x95, 0x81, 0x4c, 0x56, 0xc7, 0x63, 0x63, 0x4c, 0xa7, 0x3f, 0x25, 0xa1, 0x5f, 0x08, - 0x05, 0x9f, 0xf5, 0xd2, 0xca, 0x93, 0xdb, 0xc3, 0x32, 0xae, 0xd1, 0x2b, 0x71, 0xa5, 0xfb, 0x66, 0xa4, 0x90, 0x7a, - 0xe4, 0xab, 0xa6, 0x80, 0xde, 0x8c, 0x7d, 0x33, 0x15, 0xe6, 0xed, 0x9e, 0x31, 0x57, 0x08, 0x56, 0xaa, 0xec, 0xf6, - 0x9d, 0x1a, 0x53, 0x31, 0x83, 0x29, 0xb6, 0x9d, 0xc5, 0xa4, 0x5b, 0xf9, 0xa7, 0x9d, 0xfb, 0x65, 0xde, 0xe1, 0xae, - 0xa8, 0xdf, 0x02, 0x17, 0x9a, 0x15, 0x65, 0xd5, 0x96, 0x0d, 0xdb, 0xc6, 0x1b, 0x59, 0x28, 0x36, 0xc0, 0xb2, 0xe7, - 0xbe, 0x85, 0x07, 0x88, 0x9b, 0x70, 0xcf, 0x2e, 0x6a, 0xb8, 0x31, 0x7c, 0x59, 0x49, 0xbe, 0x2b, 0x8d, 0xb9, 0xf4, - 0xa9, 0xd2, 0xc4, 0x70, 0xb2, 0x18, 0x71, 0x91, 0x2e, 0xea, 0xcc, 0xae, 0x85, 0xcf, 0x78, 0x19, 0xce, 0xf9, 0xc2, - 0xe8, 0xa6, 0x74, 0xe9, 0x05, 0x8b, 0x75, 0xa7, 0x37, 0x2b, 0x8d, 0x95, 0x12, 0x71, 0x6b, 0x96, 0x09, 0x94, 0xa5, - 0xac, 0x95, 0xf0, 0xa6, 0x68, 0xd9, 0x4a, 0x1a, 0x79, 0xcf, 0x1c, 0xdc, 0xc7, 0x7e, 0x40, 0x4c, 0x64, 0x13, 0x98, - 0x14, 0x0d, 0x1d, 0xd0, 0xae, 0xba, 0xf0, 0xcd, 0xa8, 0x07, 0x83, 0xdc, 0x92, 0x44, 0xac, 0x20, 0xc5, 0x0a, 0xd6, - 0x35, 0x2b, 0xe6, 0xf9, 0x82, 0x5e, 0x30, 0x39, 0x4f, 0x17, 0x74, 0xc5, 0xe4, 0x7c, 0x8d, 0x37, 0xa1, 0x0b, 0x38, - 0x21, 0xc9, 0x26, 0x56, 0x0a, 0xd8, 0x0b, 0xbc, 0xbc, 0xe1, 0x99, 0xaa, 0x69, 0xd9, 0xa5, 0xe2, 0x00, 0xe3, 0xf3, - 0x32, 0x0c, 0xcb, 0xe1, 0x05, 0x58, 0x4b, 0xec, 0x87, 0xab, 0x39, 0x5f, 0xa8, 0xdf, 0x10, 0x70, 0x3e, 0x09, 0x15, - 0xbb, 0x60, 0xf7, 0x02, 0x99, 0x5e, 0xcd, 0xf9, 0x42, 0x8d, 0x84, 0x2e, 0xf8, 0xca, 0x1a, 0x9b, 0xc4, 0x9e, 0xa0, - 0x65, 0x16, 0xcf, 0xc7, 0x8b, 0x28, 0xae, 0x61, 0x19, 0x9e, 0xaa, 0x99, 0x69, 0xc9, 0x7f, 0x12, 0xb5, 0xa1, 0x89, - 0xbe, 0xc1, 0x2a, 0xf2, 0x87, 0xc7, 0x47, 0x97, 0x40, 0xc6, 0xce, 0xae, 0x64, 0xe6, 0x43, 0xdf, 0x47, 0x06, 0xf7, - 0xdc, 0x94, 0x33, 0xae, 0x82, 0x44, 0x19, 0xb8, 0x7b, 0x35, 0x4b, 0xc6, 0x5a, 0x84, 0xef, 0x1e, 0x15, 0x45, 0x9f, - 0x49, 0xd3, 0x80, 0xee, 0x23, 0xc1, 0x1c, 0xe8, 0xbd, 0x42, 0x87, 0xcb, 0x6a, 0x9b, 0x09, 0xf8, 0x8b, 0x04, 0xf9, - 0xad, 0xd0, 0xab, 0x1a, 0x83, 0x2a, 0xda, 0x45, 0x2c, 0xfd, 0xfb, 0x88, 0x1f, 0x65, 0xf3, 0x2f, 0x73, 0x8f, 0x57, - 0x12, 0x06, 0x3f, 0xa4, 0x66, 0x93, 0xcc, 0xdb, 0x2b, 0xf6, 0x3d, 0x74, 0xd4, 0xa3, 0xd6, 0x78, 0x5f, 0xbd, 0xe0, - 0x14, 0x62, 0x94, 0x50, 0x74, 0x12, 0x0c, 0xe0, 0x76, 0x09, 0x29, 0xee, 0x06, 0xbb, 0x69, 0x5e, 0xf3, 0xa2, 0xe0, - 0x7c, 0x5d, 0x55, 0x81, 0x1f, 0xd0, 0x70, 0xbe, 0xd8, 0x0d, 0x61, 0x38, 0xa6, 0xad, 0x6b, 0x18, 0x84, 0x19, 0xc3, - 0x48, 0x08, 0x5e, 0xff, 0xa2, 0x27, 0x34, 0x89, 0x57, 0xdf, 0xf1, 0x4f, 0x19, 0x2f, 0x14, 0x91, 0x06, 0x11, 0x52, - 0x37, 0xf1, 0x8d, 0x4c, 0x93, 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0xd8, 0xd0, 0x54, 0xfc, 0xad, 0x16, 0x1f, 0xfc, - 0xd4, 0x74, 0x3c, 0x1a, 0xd7, 0xad, 0xce, 0xa8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0x60, 0x1a, - 0x69, 0xde, 0xba, 0x87, 0xc0, 0x2b, 0xd3, 0xe2, 0x9d, 0x07, 0x74, 0x73, 0xe6, 0x83, 0x27, 0x8f, 0xe9, 0x99, 0x43, - 0x4f, 0xae, 0xd8, 0x51, 0xd5, 0x43, 0xed, 0xbd, 0x19, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0x50, 0x7b, 0x57, - 0xf7, 0x1f, 0xcb, 0x5d, 0x0e, 0xdf, 0x71, 0x96, 0x1b, 0xc0, 0x52, 0x91, 0xb5, 0x02, 0x8f, 0x02, 0xd4, 0xa5, 0x32, - 0x84, 0x2d, 0xe6, 0x70, 0xa8, 0xec, 0x56, 0xad, 0x86, 0x92, 0x1c, 0x96, 0x23, 0x70, 0x08, 0x5d, 0x97, 0x83, 0x72, - 0xb4, 0xcc, 0xaa, 0xf7, 0xf8, 0x5b, 0xb3, 0x0e, 0x49, 0x76, 0x1f, 0xeb, 0xc0, 0x2d, 0xeb, 0x30, 0xfd, 0x68, 0x90, - 0x02, 0xd0, 0x64, 0x23, 0x70, 0x09, 0xc0, 0x7b, 0xfb, 0x8f, 0x08, 0xb5, 0x32, 0xbd, 0x97, 0xb1, 0x50, 0xdf, 0x37, - 0x92, 0xa0, 0x84, 0x66, 0x42, 0xe5, 0x58, 0x0a, 0xde, 0x79, 0xa4, 0x73, 0x52, 0x67, 0xe2, 0x3d, 0x88, 0xd3, 0xc2, - 0x07, 0xf6, 0x16, 0x04, 0xe7, 0x2c, 0xe8, 0x1d, 0xde, 0x66, 0xb5, 0xd4, 0x46, 0x0f, 0x14, 0xc0, 0xef, 0x06, 0x77, - 0x08, 0xf2, 0xd5, 0x18, 0xae, 0x95, 0xbc, 0x09, 0xf9, 0xb0, 0xa0, 0x07, 0x64, 0x60, 0x9f, 0xc5, 0x30, 0xa6, 0x07, - 0xe4, 0xd0, 0x3e, 0x4b, 0x37, 0x80, 0x03, 0xa9, 0x47, 0x95, 0x1e, 0x40, 0x83, 0x7e, 0xb7, 0x2d, 0xb2, 0x24, 0xeb, - 0xc7, 0xd2, 0x28, 0x62, 0xa0, 0x4a, 0x10, 0x51, 0x8b, 0x7f, 0x3e, 0x98, 0xeb, 0x0e, 0x73, 0x81, 0x30, 0x07, 0x03, - 0x0e, 0xe2, 0x36, 0x08, 0xcd, 0x01, 0xb3, 0xb9, 0x8d, 0x04, 0xbd, 0xb3, 0x86, 0x99, 0x1d, 0xfd, 0xe1, 0x56, 0x82, - 0x6f, 0xb2, 0xd6, 0xa8, 0xf3, 0xe2, 0x10, 0x08, 0x82, 0x37, 0x85, 0xaa, 0xf6, 0xaa, 0x07, 0x36, 0xde, 0xaa, 0x1f, - 0xdb, 0xed, 0x78, 0x2a, 0xdc, 0xb5, 0x5f, 0x50, 0x38, 0xf9, 0x94, 0xfc, 0xeb, 0xbd, 0xc9, 0xe0, 0xc0, 0xc8, 0xf0, - 0xa5, 0xb7, 0x7f, 0xe1, 0x6b, 0x2d, 0xdd, 0x13, 0x83, 0x92, 0x3c, 0x3e, 0x50, 0xf4, 0xef, 0x5e, 0x59, 0xf9, 0xd4, - 0x4e, 0xff, 0x76, 0x6b, 0xd6, 0xe7, 0xe1, 0x68, 0xb2, 0xdd, 0xf6, 0xb4, 0x81, 0x2b, 0xd5, 0x2a, 0x04, 0xec, 0x42, - 0x49, 0xf6, 0x0f, 0x20, 0x2a, 0x42, 0x33, 0xee, 0x66, 0xd9, 0x90, 0xc8, 0xf8, 0x71, 0x3a, 0xcb, 0x86, 0x60, 0x87, - 0x7b, 0x51, 0x89, 0xcb, 0x51, 0x6b, 0x83, 0xd3, 0xb3, 0x24, 0x84, 0x50, 0x0e, 0x58, 0xd9, 0xad, 0xfa, 0x73, 0xa7, - 0xcc, 0x84, 0xd4, 0x64, 0x75, 0x3b, 0xa5, 0x7b, 0x98, 0xe6, 0x7b, 0x66, 0x04, 0x07, 0xdc, 0xdb, 0x5f, 0xf5, 0xc7, - 0x30, 0xc9, 0x34, 0x39, 0x45, 0xf2, 0x8b, 0xf4, 0x14, 0x92, 0x76, 0xe8, 0xa9, 0x22, 0x80, 0x13, 0x6a, 0x3f, 0x86, - 0xdf, 0x30, 0xee, 0xdf, 0x35, 0x5f, 0xbb, 0xa9, 0x88, 0x9e, 0x52, 0x2c, 0x53, 0x93, 0xd3, 0x24, 0x2b, 0x12, 0x88, - 0xda, 0xa8, 0x9a, 0x11, 0x3d, 0x71, 0x31, 0x1f, 0x15, 0xe1, 0xf3, 0x6a, 0xfd, 0x9f, 0x21, 0x7c, 0x46, 0xe1, 0x06, - 0x70, 0x79, 0xc5, 0xe5, 0x79, 0xf8, 0xec, 0x29, 0xdd, 0x9b, 0x7c, 0x73, 0x40, 0xf7, 0x0e, 0x9e, 0x3c, 0x23, 0x00, - 0x8b, 0x76, 0x79, 0x1e, 0x1e, 0x3c, 0x7b, 0x46, 0xf7, 0xbe, 0xfd, 0x96, 0xee, 0x4d, 0x9e, 0x1c, 0x34, 0xd2, 0x26, - 0xcf, 0xbe, 0xa5, 0x7b, 0xdf, 0x3c, 0x6d, 0xa4, 0x1d, 0x8c, 0x9f, 0xd1, 0xbd, 0xbf, 0x7f, 0x63, 0xd2, 0xfe, 0x06, - 0xd9, 0xbe, 0x3d, 0xc0, 0xff, 0x4c, 0xda, 0xe4, 0xd9, 0x13, 0xba, 0x37, 0x19, 0x43, 0x25, 0xcf, 0x5c, 0x25, 0xe3, - 0x09, 0x7c, 0xfc, 0x04, 0xfe, 0xfb, 0x1b, 0x09, 0x16, 0xb4, 0x92, 0x2c, 0x17, 0xa8, 0x3f, 0x43, 0x11, 0x27, 0xaa, - 0x26, 0x12, 0x1e, 0x62, 0x66, 0xf5, 0x4d, 0x1c, 0x06, 0xc4, 0xa5, 0x43, 0x41, 0x74, 0x6f, 0x3c, 0x7a, 0x46, 0x02, - 0x1f, 0x9e, 0xee, 0xc6, 0x07, 0x19, 0xcb, 0xc5, 0x3c, 0xfb, 0x2a, 0x37, 0xb1, 0x15, 0x3c, 0x00, 0xab, 0x8f, 0x7e, - 0xae, 0x4a, 0xce, 0xb3, 0xaf, 0x2a, 0xb9, 0x9b, 0xeb, 0xf7, 0x16, 0xa0, 0xbc, 0xbf, 0x6a, 0xd9, 0x4d, 0xa1, 0x42, - 0xa7, 0xb5, 0x46, 0x9f, 0x7d, 0xc4, 0xf4, 0xc1, 0xc0, 0xbb, 0x61, 0xff, 0xb4, 0x53, 0x4e, 0xeb, 0x1b, 0x8d, 0x42, - 0x8d, 0xca, 0x43, 0xc2, 0x8e, 0xa0, 0xe8, 0xc1, 0x00, 0x78, 0x02, 0x0f, 0xf7, 0xed, 0xdf, 0x2c, 0xe3, 0x63, 0x47, - 0x19, 0xbf, 0xa0, 0x0c, 0x01, 0x8d, 0x7a, 0x98, 0xdd, 0xf4, 0xb0, 0xd1, 0xad, 0x5e, 0xb2, 0x54, 0x27, 0x53, 0xd3, - 0x33, 0xd8, 0xd7, 0xba, 0x96, 0x7b, 0x46, 0x14, 0x2d, 0x2f, 0xf6, 0x52, 0x3e, 0xab, 0xd8, 0x4f, 0x4b, 0x54, 0x6f, - 0x45, 0x8d, 0x37, 0x32, 0x9b, 0x55, 0xec, 0x7b, 0xf3, 0x06, 0xb8, 0x19, 0xf6, 0xbb, 0x7a, 0xf2, 0x03, 0x67, 0x70, - 0x69, 0xdb, 0xa3, 0x4c, 0x8c, 0x00, 0x2b, 0x20, 0x03, 0x07, 0x1e, 0x00, 0x1d, 0xf4, 0x47, 0x7b, 0xbb, 0x55, 0x29, - 0xcd, 0x3e, 0x5b, 0x18, 0x40, 0xc3, 0xbc, 0x4d, 0x5c, 0xd9, 0xff, 0x6a, 0xc8, 0x4b, 0x50, 0xb8, 0xd5, 0x2c, 0x6f, - 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x65, 0x40, 0xcd, 0x96, 0x8f, 0x36, - 0x5c, 0xa9, 0x27, 0x81, 0x33, 0xb8, 0x90, 0x45, 0xc2, 0x4f, 0xb4, 0xd8, 0x1f, 0xad, 0x1f, 0x7d, 0xdf, 0x1e, 0x0f, - 0xd6, 0xbe, 0xc7, 0x47, 0xfa, 0xb3, 0xc6, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0x17, 0xb5, 0x95, 0x78, 0x94, 0xc0, 0x1b, - 0x98, 0x88, 0x14, 0x06, 0xa9, 0x16, 0x38, 0x06, 0xe5, 0x8d, 0x85, 0x58, 0xaa, 0xae, 0x6e, 0xb0, 0x05, 0x91, 0x21, - 0x78, 0xb8, 0xfd, 0x6b, 0xa9, 0x02, 0x47, 0xf5, 0xfb, 0x5c, 0xfa, 0x6e, 0x4f, 0xc6, 0x8e, 0x1c, 0xa7, 0x7e, 0x2a, - 0x1c, 0xfc, 0x37, 0xa9, 0x6b, 0x63, 0xb9, 0x92, 0x32, 0xcb, 0xb2, 0xb0, 0xa3, 0x50, 0xcb, 0x3d, 0x2a, 0x0f, 0x92, - 0x2f, 0xe4, 0x10, 0xc9, 0x02, 0xa3, 0x50, 0x90, 0xe1, 0x84, 0x8a, 0xd1, 0x5a, 0x94, 0xcb, 0xec, 0xa2, 0x0a, 0x37, - 0x4a, 0xa1, 0xcc, 0x29, 0xfa, 0x76, 0x83, 0x03, 0x09, 0x89, 0xb2, 0xf2, 0x6d, 0xfc, 0x36, 0x44, 0xb0, 0x3a, 0xae, - 0x6d, 0xa1, 0xb8, 0xb7, 0x3f, 0x79, 0xda, 0xc5, 0x1f, 0x19, 0x17, 0x50, 0x17, 0x8b, 0x69, 0x38, 0xb1, 0xb1, 0x6f, - 0xdc, 0x17, 0x56, 0xd3, 0x03, 0x50, 0xdf, 0xa5, 0x12, 0x23, 0xa8, 0xaf, 0x8c, 0x7d, 0x6c, 0x8f, 0x31, 0x39, 0x83, - 0x58, 0xc3, 0x2a, 0x67, 0xa6, 0xfa, 0x46, 0xd8, 0x11, 0x00, 0x37, 0x42, 0x6b, 0x14, 0x04, 0x1e, 0xaf, 0x42, 0x3c, - 0x2f, 0x55, 0xf8, 0xd6, 0x8c, 0xd0, 0x31, 0x78, 0x53, 0xd9, 0x46, 0x66, 0xd2, 0x17, 0x0c, 0x9a, 0x63, 0x5b, 0x47, - 0x61, 0xb5, 0x95, 0x65, 0x47, 0x00, 0x37, 0x90, 0x1d, 0x9a, 0x8b, 0xe7, 0xac, 0x9a, 0x67, 0x8b, 0xc8, 0x04, 0x05, - 0x5c, 0x0a, 0xcb, 0xa0, 0x7d, 0xba, 0x47, 0xb6, 0xe3, 0x10, 0xba, 0xe1, 0x3e, 0x82, 0xf1, 0xb4, 0x9b, 0x82, 0x15, - 0x44, 0x23, 0xc4, 0xc3, 0x8c, 0x59, 0x7c, 0xaf, 0x34, 0xe5, 0xa9, 0x6a, 0x09, 0x04, 0x8e, 0x42, 0xa8, 0x8b, 0x5d, - 0xa3, 0x04, 0x97, 0xa9, 0x11, 0xcc, 0x60, 0xc7, 0x8e, 0xd4, 0x76, 0xc9, 0x39, 0x1d, 0xaa, 0x29, 0x2d, 0xf5, 0x94, - 0x6a, 0x5f, 0x43, 0x31, 0x2f, 0xd1, 0x43, 0x0f, 0x5c, 0x0f, 0xb4, 0x43, 0x5e, 0x49, 0x27, 0x26, 0x82, 0x4e, 0xab, - 0x4d, 0xd8, 0xb9, 0x91, 0x6e, 0x59, 0x8d, 0xbc, 0x63, 0x68, 0x76, 0xc4, 0x4b, 0x3f, 0x50, 0x17, 0x40, 0x84, 0xdc, - 0xdb, 0x22, 0x73, 0x44, 0xb3, 0xac, 0x7c, 0x05, 0x65, 0x71, 0xc4, 0xd6, 0x15, 0x70, 0x2d, 0x05, 0x93, 0x4b, 0x1e, - 0xf1, 0x14, 0x11, 0x01, 0x8f, 0x95, 0x76, 0x7d, 0xa7, 0x25, 0x84, 0x66, 0x29, 0x10, 0x37, 0x17, 0xc5, 0xb9, 0xb6, - 0x81, 0x2c, 0x80, 0xbe, 0xfd, 0x9c, 0x5d, 0x79, 0xe1, 0x60, 0x37, 0x57, 0x99, 0x78, 0xc1, 0x2f, 0x32, 0xc1, 0x53, - 0x04, 0xbb, 0xba, 0x35, 0x0f, 0xdc, 0xb1, 0x6d, 0x60, 0xf9, 0xf6, 0x1d, 0x2c, 0x98, 0x32, 0xd4, 0x4a, 0x89, 0x4c, - 0x44, 0x02, 0x32, 0xfb, 0xcc, 0xdd, 0x9b, 0x4c, 0xbc, 0x89, 0x6f, 0xc1, 0x9b, 0xa2, 0xc1, 0x4f, 0x8f, 0xce, 0xf1, - 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x25, 0x68, 0x6d, 0x0d, 0x81, - 0x17, 0x7f, 0x5a, 0x75, 0xef, 0x2a, 0x13, 0xc6, 0x3e, 0xe3, 0x2a, 0xbe, 0x65, 0xa5, 0x02, 0xb3, 0xc0, 0x38, 0xf7, - 0x6d, 0x29, 0xc9, 0x55, 0x26, 0x8c, 0x80, 0xe4, 0x2a, 0xbe, 0xa5, 0x4d, 0x19, 0x87, 0xb6, 0xa2, 0xf3, 0xe2, 0xfc, - 0xee, 0x0e, 0xbf, 0xc4, 0x50, 0x2b, 0xe3, 0x7e, 0x1f, 0x24, 0x66, 0xd2, 0x36, 0x65, 0x26, 0x23, 0xa9, 0xd1, 0x42, - 0x2a, 0xca, 0x07, 0x13, 0xb2, 0xbb, 0x52, 0x2d, 0x23, 0x6a, 0xbf, 0x0a, 0xc5, 0x6c, 0x1c, 0x4d, 0x08, 0x9d, 0x74, - 0xac, 0x77, 0xd3, 0x5a, 0xc8, 0x34, 0x7a, 0x16, 0x79, 0x3e, 0x9d, 0x05, 0xab, 0xa6, 0xc5, 0x21, 0xe3, 0xd3, 0x62, - 0x30, 0x20, 0xda, 0xa5, 0x70, 0x83, 0xf5, 0x80, 0x29, 0x8d, 0x8b, 0xb7, 0x66, 0x5a, 0xfd, 0x4a, 0xaa, 0x90, 0xf4, - 0x9e, 0x01, 0x49, 0x26, 0x5d, 0xb0, 0x5b, 0x90, 0x28, 0x7a, 0xfe, 0x77, 0x6a, 0x0b, 0xee, 0x7a, 0x30, 0x36, 0xa3, - 0xfb, 0x7a, 0xc6, 0x7f, 0xa8, 0x6d, 0x41, 0xd4, 0xa7, 0x92, 0xf5, 0x3a, 0x12, 0x55, 0xc8, 0x45, 0xf8, 0xd9, 0xd1, - 0x10, 0x43, 0x54, 0x7b, 0x2c, 0x10, 0xeb, 0xab, 0x73, 0x5e, 0xe0, 0xf4, 0x33, 0x77, 0xb9, 0x82, 0x6d, 0x41, 0x2b, - 0x43, 0xa3, 0xde, 0xc6, 0x6f, 0x23, 0x7b, 0x59, 0xd0, 0x45, 0xbe, 0x40, 0x21, 0x6b, 0x1e, 0x86, 0xd5, 0xb0, 0x3d, - 0x88, 0x64, 0xbf, 0x3d, 0x09, 0x8d, 0xc6, 0xc0, 0x02, 0xd9, 0xa1, 0x11, 0xb8, 0x08, 0xad, 0xfc, 0xed, 0x10, 0x5c, - 0xb8, 0x2c, 0x22, 0xcb, 0x50, 0xc7, 0x6f, 0x6a, 0x37, 0x41, 0xf5, 0x0a, 0x9d, 0xa6, 0xb0, 0x2a, 0x65, 0x92, 0x0f, - 0xbf, 0x5e, 0xc9, 0x02, 0x33, 0x79, 0x5d, 0xf6, 0xe8, 0x6b, 0xbb, 0xbd, 0x03, 0x53, 0xb0, 0xee, 0x93, 0xf7, 0xf5, - 0xe3, 0xce, 0x9e, 0x80, 0x51, 0xac, 0xca, 0xd1, 0x14, 0x52, 0x6a, 0x1f, 0x94, 0xfa, 0x63, 0xb8, 0x14, 0x9a, 0x63, - 0xb7, 0x80, 0x49, 0xc0, 0x3e, 0x43, 0xaa, 0xc7, 0xb4, 0x63, 0x9f, 0xa3, 0x0d, 0x2c, 0x09, 0x38, 0xfc, 0xa3, 0x4c, - 0xd6, 0xfe, 0xd5, 0x5d, 0xa4, 0xcd, 0x90, 0x2d, 0xf3, 0x05, 0xf0, 0xf9, 0xb0, 0x6b, 0xa3, 0x12, 0x65, 0x13, 0x91, - 0xa4, 0xb0, 0xe5, 0x31, 0x48, 0x7b, 0x14, 0xd3, 0x55, 0xc1, 0x93, 0x0c, 0xa5, 0x14, 0x89, 0xf6, 0x09, 0xce, 0xe1, - 0x0d, 0xee, 0x47, 0x15, 0x10, 0x5e, 0x85, 0x9c, 0x8e, 0x52, 0xaa, 0x2d, 0x60, 0x14, 0xf5, 0x00, 0x51, 0x5e, 0x06, - 0x72, 0xbc, 0xed, 0x76, 0x42, 0x57, 0x6c, 0x39, 0x9c, 0x50, 0x24, 0x25, 0x97, 0x58, 0xee, 0x15, 0xe8, 0x3c, 0xce, - 0x59, 0xef, 0x25, 0x60, 0x11, 0x9c, 0xc1, 0xdf, 0x98, 0xd0, 0x6b, 0xf8, 0x9b, 0x13, 0xfa, 0x86, 0x85, 0x57, 0xc3, - 0x4b, 0xb2, 0x1f, 0xa6, 0x83, 0x89, 0x12, 0x8c, 0xdd, 0xb1, 0x65, 0x19, 0xaa, 0xc4, 0xd5, 0xfe, 0x05, 0x79, 0x7c, - 0x41, 0x6f, 0xe9, 0x0d, 0x3d, 0xa5, 0x27, 0x40, 0xf8, 0xef, 0x0e, 0x27, 0x7c, 0x38, 0x79, 0xda, 0xef, 0xf7, 0xce, - 0xfb, 0xfd, 0xde, 0x99, 0x31, 0xa0, 0xd0, 0xbb, 0xe8, 0xb2, 0xa6, 0xfa, 0xd7, 0x55, 0xbd, 0x98, 0x9e, 0xa8, 0x8d, - 0x9b, 0xf0, 0x2c, 0x0f, 0xaf, 0xf6, 0xef, 0xc8, 0x10, 0x1f, 0x2f, 0x72, 0x29, 0x8b, 0xf0, 0x72, 0xff, 0x8e, 0xd0, - 0x93, 0x23, 0xd0, 0x9b, 0x62, 0x7d, 0x27, 0x8f, 0xef, 0x74, 0x6d, 0x84, 0xbe, 0x0c, 0x13, 0xd8, 0x26, 0xb7, 0xcc, - 0xde, 0xb5, 0x27, 0x63, 0x88, 0x65, 0x72, 0xe7, 0x95, 0x77, 0xf7, 0xf8, 0x96, 0xec, 0xdf, 0x82, 0xa7, 0xa8, 0x25, - 0x7f, 0xb3, 0xf0, 0x86, 0xb5, 0x6a, 0x78, 0x7c, 0x47, 0x4f, 0x5b, 0x8d, 0x78, 0x7c, 0x47, 0xa2, 0xf0, 0x86, 0x5d, - 0xd2, 0x53, 0x76, 0x45, 0xe8, 0x79, 0xbf, 0x7f, 0xd6, 0xef, 0xcb, 0x7e, 0xff, 0xa7, 0x38, 0x0c, 0xe3, 0x61, 0x41, - 0xf6, 0x25, 0xbd, 0xdb, 0x9f, 0xf0, 0x27, 0x64, 0x16, 0xea, 0xe6, 0xab, 0x05, 0x67, 0x55, 0xde, 0x2a, 0xd7, 0x1d, - 0x05, 0x6b, 0x85, 0x3b, 0xa6, 0x9e, 0x4e, 0xe8, 0x0d, 0x2b, 0xe8, 0x29, 0x8b, 0x49, 0x74, 0x0d, 0xad, 0x38, 0x9f, - 0x15, 0xd1, 0x0d, 0x3d, 0x65, 0x67, 0xb3, 0x38, 0x3a, 0xa5, 0x27, 0x2c, 0x1f, 0x4e, 0x20, 0xef, 0xe9, 0xf0, 0x86, - 0xec, 0x9f, 0x90, 0x28, 0x3c, 0xd1, 0xbf, 0xef, 0xe8, 0x25, 0x0f, 0x4f, 0xa8, 0x57, 0xcd, 0x09, 0x31, 0xd5, 0x37, - 0x6a, 0x3f, 0x21, 0x91, 0x3f, 0x98, 0x27, 0xd6, 0x9e, 0xe6, 0x91, 0xa3, 0x8d, 0x69, 0x19, 0x82, 0xbe, 0xb9, 0x0c, - 0x6f, 0x08, 0x99, 0x36, 0xc7, 0x0e, 0x06, 0x74, 0xf6, 0x28, 0x4a, 0x08, 0xbd, 0xf1, 0x4b, 0xbd, 0xc1, 0x31, 0x34, - 0x23, 0xa4, 0xd2, 0x4e, 0x31, 0x0d, 0xd7, 0xc1, 0x6b, 0x0d, 0xd6, 0x71, 0xde, 0xef, 0x87, 0xeb, 0x7e, 0x1f, 0x22, - 0xdd, 0x17, 0x33, 0x13, 0xdb, 0xcd, 0x91, 0x4d, 0x7a, 0x03, 0xda, 0xff, 0xd7, 0x83, 0x01, 0x74, 0xc6, 0x2b, 0x29, - 0xbc, 0x19, 0xbc, 0x7e, 0x7c, 0x47, 0x54, 0x1d, 0x05, 0x15, 0x32, 0x2c, 0xe8, 0x1b, 0x9a, 0x01, 0xe0, 0xd7, 0xeb, - 0xc1, 0x80, 0x44, 0xe6, 0x33, 0x32, 0x7d, 0x7d, 0x78, 0x32, 0x1d, 0x0c, 0x5e, 0x9b, 0x6d, 0xf2, 0x96, 0xdd, 0x53, - 0x0a, 0xac, 0xbf, 0xb3, 0x7e, 0xff, 0xed, 0x51, 0x4c, 0xce, 0x0b, 0x1e, 0x7f, 0x9c, 0x36, 0xdb, 0xf2, 0xd6, 0x45, - 0x55, 0x3b, 0xeb, 0xf7, 0xd7, 0xfd, 0xfe, 0x29, 0x60, 0x17, 0xcd, 0x9c, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x8e, 0x22, - 0x69, 0x92, 0x43, 0x63, 0x68, 0x5b, 0xac, 0xda, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xa8, 0x59, 0x51, 0x5c, 0x93, 0x28, - 0xec, 0x9d, 0x6d, 0xb7, 0xa7, 0x8c, 0xb1, 0x98, 0x80, 0xf4, 0xc3, 0x7f, 0x7d, 0x5a, 0x37, 0x62, 0x88, 0x09, 0x89, - 0xcc, 0xe6, 0x66, 0x69, 0x0f, 0x81, 0x88, 0xc3, 0xa6, 0x7f, 0x6f, 0xee, 0xe5, 0xa2, 0x76, 0x7c, 0xeb, 0x2f, 0x00, - 0x42, 0x24, 0x59, 0xc8, 0x67, 0x38, 0x06, 0x65, 0x06, 0x40, 0xe6, 0x91, 0x9a, 0x79, 0x09, 0x20, 0xc0, 0x64, 0xbb, - 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb0, 0xd1, 0xdf, 0x9e, 0x3d, 0xae, 0x1e, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, - 0x61, 0x17, 0x6b, 0xb5, 0x0f, 0x46, 0xf0, 0x9a, 0x7d, 0xbc, 0xce, 0xbe, 0x98, 0x7d, 0x44, 0xc2, 0xda, 0x60, 0x1c, - 0xb9, 0x48, 0x5b, 0x7a, 0xbb, 0x7b, 0x18, 0x4c, 0x2e, 0xd2, 0xcf, 0xb0, 0x9d, 0x3e, 0xff, 0xe6, 0xc1, 0x78, 0xc2, - 0xc1, 0xe8, 0x2e, 0x0a, 0xfa, 0x4c, 0xdb, 0x6e, 0x2b, 0xff, 0x12, 0xf8, 0x16, 0x53, 0x41, 0xc7, 0x66, 0x59, 0xb8, - 0x41, 0x45, 0xd4, 0xd1, 0x32, 0xa8, 0x6a, 0x65, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0x32, 0x71, 0x0b, 0x0c, 0x43, 0x86, - 0xba, 0xdc, 0xe3, 0xea, 0x5f, 0xbc, 0x90, 0x06, 0x3e, 0xc3, 0x89, 0x08, 0x3d, 0x6e, 0x8d, 0xfb, 0xdc, 0x9a, 0xf8, - 0x0c, 0xb7, 0x56, 0x22, 0x89, 0x35, 0xb0, 0xa4, 0xe6, 0x72, 0x94, 0xb0, 0xa3, 0x92, 0xf1, 0x59, 0x19, 0x25, 0x34, - 0x86, 0x07, 0xc9, 0xc4, 0x4c, 0x46, 0x09, 0xda, 0x27, 0xba, 0x08, 0x83, 0x7f, 0x01, 0x66, 0x3f, 0xcd, 0xe1, 0xaf, - 0x24, 0xd3, 0xe4, 0x10, 0x02, 0x42, 0x1c, 0x8e, 0x67, 0x71, 0x38, 0x26, 0x51, 0x72, 0x04, 0x4f, 0xf0, 0x5f, 0x11, - 0x8e, 0x49, 0xad, 0xef, 0x30, 0x52, 0x5d, 0x6e, 0x13, 0x06, 0x70, 0x65, 0xe3, 0xd9, 0x24, 0xb2, 0xd2, 0x5d, 0xf9, - 0x78, 0x34, 0x7e, 0x46, 0xa6, 0x71, 0x28, 0x07, 0x09, 0xa1, 0xe0, 0xdd, 0x1b, 0x96, 0xc3, 0x44, 0xc3, 0xb3, 0x01, - 0x9b, 0x57, 0x3a, 0x36, 0x4f, 0xc2, 0x09, 0x08, 0xc3, 0x84, 0x1c, 0xeb, 0x3d, 0x48, 0x29, 0xfa, 0x3c, 0xc7, 0x7e, - 0xea, 0x23, 0x08, 0xb3, 0xa3, 0x96, 0x8a, 0xaf, 0x00, 0xe8, 0x12, 0x07, 0x87, 0xda, 0x33, 0x5f, 0xcc, 0xc2, 0xd2, - 0xa3, 0x52, 0xa6, 0xba, 0x7d, 0xd1, 0xa0, 0xfc, 0xa6, 0x41, 0xfb, 0x82, 0x0c, 0x26, 0xb4, 0x3c, 0x9a, 0xf0, 0x27, - 0x10, 0xc0, 0xa3, 0x11, 0xf1, 0x4b, 0xe1, 0xc4, 0x40, 0x78, 0x15, 0x64, 0xa0, 0xd2, 0x5a, 0x35, 0x66, 0x64, 0x2b, - 0xde, 0x83, 0x30, 0x29, 0x7b, 0x37, 0x72, 0x9d, 0xa7, 0x10, 0x15, 0x6c, 0x9d, 0x57, 0x7b, 0x97, 0x60, 0xc9, 0x1e, - 0x57, 0x10, 0x27, 0x6c, 0xbd, 0x02, 0xec, 0xdc, 0x47, 0x9b, 0xb2, 0xde, 0x53, 0xdf, 0xed, 0x61, 0xcb, 0xe1, 0x55, - 0x25, 0xf7, 0x26, 0xe3, 0xf1, 0x78, 0xf4, 0x07, 0x1c, 0x1d, 0x40, 0x68, 0x49, 0x64, 0xf8, 0x64, 0x80, 0xc6, 0x5d, - 0x57, 0xdc, 0x1b, 0x17, 0x8a, 0xb2, 0xd2, 0xc9, 0x84, 0x80, 0xf8, 0xd9, 0xf4, 0x0d, 0xf6, 0x15, 0xd7, 0xf1, 0x4f, - 0x76, 0x3f, 0x31, 0x2b, 0x5a, 0xad, 0xd4, 0xd1, 0xbb, 0x93, 0xd3, 0xd7, 0x1f, 0x5e, 0xff, 0xf6, 0xf2, 0xec, 0xf5, - 0xdb, 0x57, 0xaf, 0xdf, 0xbe, 0xfe, 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xdf, 0x56, 0xc4, 0x8e, 0xbd, 0x77, 0x8f, 0xf1, - 0x6a, 0xf1, 0x85, 0xb3, 0x07, 0xee, 0x16, 0x0b, 0xb0, 0x09, 0x86, 0x5b, 0x10, 0x54, 0x33, 0x1a, 0x95, 0xbe, 0x27, - 0x20, 0xa3, 0x51, 0x21, 0x1b, 0x0f, 0x2b, 0xb6, 0x42, 0x2e, 0xde, 0x31, 0x1c, 0x7c, 0x64, 0x7f, 0x2b, 0xce, 0x84, - 0xdb, 0xd1, 0xd6, 0xac, 0x08, 0xf8, 0x7c, 0xad, 0x45, 0xe5, 0x71, 0x21, 0x6a, 0x6f, 0xdb, 0xe7, 0x90, 0x50, 0x8f, - 0xc8, 0x75, 0xf0, 0xbe, 0x0d, 0xb2, 0xc7, 0x47, 0xde, 0x93, 0xf2, 0x0c, 0xf5, 0x39, 0x1a, 0x3e, 0x6a, 0x3c, 0xa3, - 0x13, 0x73, 0x6d, 0x74, 0xa8, 0x67, 0x05, 0xec, 0x6f, 0x25, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x38, 0xdd, - 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, 0x7e, 0x94, 0x6a, 0x02, 0x69, 0x51, 0xa0, 0x74, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, - 0xc2, 0xfc, 0x0c, 0x1b, 0x04, 0xd0, 0x5e, 0x76, 0x2c, 0x09, 0x34, 0x8b, 0xd7, 0xba, 0xfe, 0x79, 0xf9, 0x32, 0xd1, - 0xce, 0x17, 0xdf, 0x42, 0x88, 0x61, 0xff, 0x8a, 0xd0, 0x98, 0x70, 0x37, 0xc9, 0xee, 0xd2, 0x62, 0xee, 0x55, 0x57, - 0x31, 0x1e, 0x77, 0xf7, 0x5c, 0x29, 0x9a, 0xb7, 0x2e, 0xb0, 0x07, 0x6a, 0x5e, 0xc7, 0x4b, 0x16, 0x02, 0x36, 0xe3, - 0xbe, 0x5d, 0x24, 0xce, 0xef, 0x9d, 0x4e, 0xc8, 0xfe, 0xc1, 0x94, 0x0f, 0x59, 0x49, 0xc5, 0x80, 0x95, 0xf5, 0x0e, - 0x35, 0xe7, 0x6d, 0x42, 0x2e, 0x76, 0x69, 0xb8, 0x18, 0xf2, 0x87, 0x2e, 0x49, 0x1f, 0x78, 0xc3, 0xa1, 0xda, 0x36, - 0x17, 0x43, 0x9a, 0x72, 0xba, 0x4b, 0x65, 0x40, 0x88, 0x74, 0x15, 0x57, 0xa4, 0xd6, 0x47, 0x55, 0xea, 0x24, 0x1d, - 0xd7, 0xd9, 0xe6, 0x33, 0x97, 0x6c, 0x75, 0xbb, 0xf6, 0xaf, 0xd5, 0xed, 0x0b, 0x33, 0x90, 0xbf, 0x3f, 0x11, 0xd5, - 0xc4, 0x40, 0x74, 0x01, 0x15, 0xfc, 0x13, 0xbc, 0x3c, 0x79, 0xa4, 0x15, 0xa0, 0xf7, 0x9d, 0x1d, 0x5d, 0x7b, 0xbc, - 0x31, 0x8b, 0xad, 0x25, 0xce, 0x59, 0xe5, 0x3b, 0xcb, 0xab, 0xb2, 0x15, 0xba, 0x8e, 0x60, 0xbf, 0x84, 0x1d, 0x7d, - 0xf7, 0xb6, 0x01, 0x10, 0xa5, 0xb0, 0x72, 0x67, 0xbf, 0xf0, 0xce, 0x7e, 0x61, 0xcf, 0x7e, 0xbb, 0x09, 0x94, 0x0f, - 0x2b, 0xb4, 0xec, 0x95, 0x14, 0x95, 0x69, 0xf2, 0xb8, 0xa9, 0xcb, 0x42, 0x5a, 0xcc, 0xf7, 0x2d, 0xed, 0x7a, 0x3a, - 0xa6, 0x12, 0xd5, 0x23, 0x3f, 0x60, 0xab, 0xf6, 0x4b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0x79, 0xdf, 0xdd, - 0xee, 0xff, 0xe6, 0x42, 0x07, 0xb7, 0xb5, 0x54, 0x78, 0xea, 0xea, 0xb8, 0xc0, 0xbb, 0x5a, 0xfa, 0xf0, 0x5d, 0xed, - 0x5d, 0xa6, 0x97, 0x5d, 0x05, 0xa8, 0x41, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0xa9, 0xad, 0x42, 0xe3, 0x84, 0x43, 0x68, - 0x0f, 0xef, 0xe0, 0x02, 0x39, 0x2c, 0x21, 0xf4, 0x63, 0x65, 0x04, 0x80, 0x3e, 0x8b, 0x7d, 0xc2, 0xc3, 0x8c, 0x0c, - 0x7c, 0x89, 0x5f, 0x29, 0x7d, 0x71, 0xf1, 0xfe, 0x4e, 0x66, 0x82, 0x5e, 0x25, 0x36, 0xbb, 0x94, 0xed, 0x98, 0x1f, - 0xfe, 0x17, 0x18, 0x0d, 0xc2, 0x6b, 0x4b, 0xb6, 0x2f, 0x3a, 0x66, 0xb9, 0x82, 0xa3, 0xb6, 0x74, 0x65, 0x96, 0xad, - 0xeb, 0x67, 0x35, 0xcc, 0xf4, 0x99, 0x72, 0x02, 0xb2, 0x2f, 0xe4, 0xee, 0xa7, 0xba, 0x62, 0x41, 0x8e, 0x26, 0xe3, - 0x29, 0x11, 0x83, 0x41, 0x2b, 0xf9, 0x10, 0x93, 0x87, 0xc3, 0x1d, 0xe6, 0x52, 0xe8, 0x7e, 0x78, 0x7d, 0x80, 0xfa, - 0x1a, 0x5b, 0x92, 0x6c, 0x2a, 0xf6, 0x17, 0x98, 0xc5, 0x02, 0x71, 0x74, 0xf0, 0x8b, 0xf3, 0x05, 0x80, 0x2c, 0xc3, - 0x32, 0xd3, 0xc2, 0xa2, 0x32, 0x55, 0x3e, 0xb2, 0x05, 0x93, 0x87, 0xe3, 0x99, 0xdf, 0x73, 0xc7, 0xe0, 0x10, 0x12, - 0x4d, 0xac, 0xf1, 0x8b, 0x9f, 0x05, 0xe3, 0x38, 0x94, 0x47, 0xb2, 0xf1, 0x5d, 0x49, 0xa2, 0xb1, 0x31, 0x55, 0xd6, - 0x57, 0x89, 0x6a, 0x98, 0x90, 0xc7, 0x05, 0xd9, 0x2f, 0xe8, 0xd2, 0x1f, 0x4b, 0x4c, 0xdf, 0x8f, 0xf7, 0x27, 0x63, - 0xf2, 0x38, 0x7e, 0x3c, 0x31, 0x70, 0xc3, 0x7e, 0x8e, 0x7c, 0xb8, 0x24, 0xfb, 0xcd, 0x2a, 0xc1, 0x14, 0xd5, 0xf4, - 0xcc, 0xaf, 0x24, 0x19, 0x2c, 0x07, 0xe9, 0xe3, 0x56, 0x5e, 0xac, 0x55, 0x8f, 0xf7, 0xfa, 0x90, 0x4f, 0x89, 0x68, - 0xdc, 0x18, 0xd6, 0xf4, 0x2a, 0xfe, 0x53, 0x16, 0x51, 0x29, 0x01, 0x91, 0x10, 0xd4, 0xdb, 0xd9, 0x45, 0x96, 0xc4, - 0x22, 0x8d, 0xd2, 0x9a, 0xd0, 0xf4, 0x88, 0x4d, 0xc6, 0xb3, 0x94, 0xa5, 0x87, 0x93, 0x67, 0xb3, 0xc9, 0xb3, 0xe8, - 0x60, 0x1c, 0xa5, 0x83, 0x01, 0x24, 0x1f, 0x8c, 0xc1, 0xc5, 0x0e, 0x7e, 0xb3, 0x03, 0x18, 0xba, 0x23, 0x64, 0x09, - 0x0b, 0x68, 0xda, 0x97, 0x35, 0x49, 0x0f, 0xe7, 0x85, 0xea, 0x49, 0x7c, 0x4b, 0xd7, 0x9e, 0x83, 0x8b, 0xdf, 0xc2, - 0x0b, 0xd7, 0xc2, 0x8b, 0xdd, 0x16, 0x0a, 0x4d, 0xb6, 0x0b, 0xf9, 0xff, 0xe3, 0x86, 0x71, 0xdf, 0x5d, 0xc2, 0x2c, - 0xae, 0xeb, 0x6c, 0xb4, 0x2a, 0x64, 0x25, 0xe1, 0x36, 0xa1, 0x44, 0x61, 0xa3, 0x78, 0xb5, 0xca, 0xb5, 0x8b, 0xd8, - 0xbc, 0xa2, 0x00, 0xee, 0x02, 0x71, 0x8a, 0x81, 0x85, 0x36, 0x06, 0x72, 0x9f, 0x78, 0x21, 0x99, 0x55, 0xfb, 0x98, - 0x7b, 0xe4, 0x9f, 0x21, 0x18, 0xa3, 0x8a, 0xa3, 0xf1, 0x4c, 0x61, 0x5d, 0x7c, 0x4e, 0xde, 0xfb, 0x6f, 0x1c, 0x45, - 0xf6, 0x68, 0x06, 0x3d, 0x41, 0xe4, 0x3c, 0xe2, 0xec, 0xc9, 0xe4, 0x65, 0xe0, 0x7e, 0x06, 0x2b, 0xfd, 0x75, 0xb7, - 0x19, 0x6b, 0xdb, 0xa3, 0x7b, 0x61, 0x84, 0xa2, 0x9f, 0xf0, 0x9d, 0xa9, 0x17, 0x70, 0x09, 0xd5, 0xc0, 0xae, 0x2f, - 0x2f, 0x79, 0x09, 0x20, 0x42, 0x99, 0xe8, 0xf7, 0x7b, 0x7f, 0x1a, 0x68, 0xd2, 0x92, 0x17, 0x6f, 0x32, 0x61, 0x9d, - 0x71, 0xa0, 0xa9, 0x40, 0xfd, 0x3f, 0x56, 0xf6, 0x99, 0x8e, 0xc9, 0xcc, 0x7f, 0x1c, 0x4e, 0x48, 0xd4, 0x7c, 0x4d, - 0x3e, 0x73, 0x9a, 0x7e, 0xe6, 0x8a, 0xf6, 0x1f, 0xc8, 0xcc, 0x0d, 0x87, 0x0c, 0xf5, 0x97, 0x8e, 0x79, 0x32, 0x7a, - 0x9d, 0x98, 0x1d, 0x09, 0x56, 0xcd, 0x20, 0x0a, 0x7b, 0x01, 0x0f, 0xea, 0x5a, 0x16, 0x4f, 0x61, 0xf6, 0x41, 0x8d, - 0x28, 0x0e, 0xd9, 0x78, 0x16, 0xca, 0x70, 0x02, 0xf6, 0xbd, 0x93, 0x31, 0xdc, 0x07, 0x64, 0xf8, 0xb1, 0x0a, 0xb1, - 0x73, 0x90, 0xf6, 0xb1, 0x42, 0xc5, 0x04, 0x40, 0x04, 0x42, 0xde, 0x7e, 0x5f, 0xaa, 0x24, 0x7c, 0x5d, 0x62, 0x4a, - 0xa1, 0x3e, 0xf8, 0x4f, 0xa4, 0xea, 0x8e, 0xe9, 0x57, 0xeb, 0xc7, 0x9f, 0x09, 0xc5, 0xa7, 0xbb, 0x94, 0xf8, 0x16, - 0x82, 0x3b, 0x4b, 0xd0, 0x41, 0x54, 0x68, 0xc6, 0xf6, 0x30, 0xbf, 0x2b, 0xee, 0xe7, 0x77, 0xc5, 0xff, 0x3b, 0x7e, - 0x57, 0x3c, 0xc4, 0x18, 0x56, 0x16, 0x1a, 0x7e, 0x16, 0x8c, 0x83, 0xe8, 0x3f, 0xe7, 0x13, 0xef, 0xe5, 0xa9, 0xaf, - 0x32, 0x31, 0xbd, 0x87, 0x69, 0xf6, 0x09, 0x0a, 0xc2, 0x2a, 0xee, 0xd2, 0x93, 0x75, 0x65, 0x6f, 0xad, 0x64, 0x88, - 0x79, 0x1e, 0x60, 0x8d, 0xc2, 0xca, 0x03, 0xba, 0x47, 0xd5, 0x06, 0x71, 0x22, 0x78, 0x18, 0x33, 0x2b, 0x7d, 0xdf, - 0x6e, 0x8d, 0x0a, 0xf3, 0x41, 0x2e, 0x0a, 0xb2, 0x9b, 0x8f, 0x67, 0xe3, 0x28, 0xc4, 0x06, 0xfc, 0xc7, 0x8c, 0x55, - 0x43, 0x36, 0xdf, 0xc9, 0x48, 0xed, 0x98, 0x3c, 0x4d, 0x76, 0x49, 0xef, 0x80, 0x77, 0xc8, 0xcf, 0xeb, 0x8f, 0x61, - 0x21, 0x0d, 0xbf, 0x25, 0x2f, 0xe3, 0x22, 0xab, 0x96, 0x57, 0x59, 0x82, 0x4c, 0x17, 0xbc, 0xf8, 0x62, 0xa6, 0xcb, - 0xfb, 0x58, 0x1f, 0x30, 0x9e, 0x52, 0xbc, 0x6e, 0x88, 0xd2, 0xd7, 0x2d, 0xcf, 0x0a, 0x75, 0x79, 0x52, 0x31, 0xdb, - 0xb3, 0x12, 0x9c, 0x4e, 0xc1, 0x04, 0x5f, 0xff, 0x74, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x0b, 0xb9, 0x32, - 0x58, 0x4e, 0x16, 0xba, 0x13, 0x30, 0x43, 0xa5, 0xc0, 0x0b, 0x14, 0xfc, 0x45, 0x03, 0x23, 0xfa, 0xca, 0xfd, 0x26, - 0x03, 0x83, 0x74, 0x69, 0x4e, 0x84, 0xb1, 0xe3, 0x76, 0x8a, 0xb4, 0x15, 0xe5, 0x8c, 0xb3, 0xf7, 0xea, 0x4a, 0x01, - 0x06, 0x78, 0x9b, 0x9b, 0xe8, 0x3c, 0x41, 0xaf, 0x05, 0xa5, 0xf3, 0x06, 0xee, 0x66, 0x19, 0x19, 0xe1, 0xe2, 0xe3, - 0xca, 0x63, 0xc1, 0x3d, 0xfb, 0x85, 0x58, 0x1a, 0xcd, 0x34, 0x18, 0xb3, 0x79, 0xc1, 0x02, 0x85, 0x0a, 0x14, 0x58, - 0xce, 0xb4, 0xa5, 0x69, 0x35, 0xe4, 0xfb, 0x07, 0x68, 0x6d, 0x5a, 0x0d, 0xf8, 0xfe, 0x41, 0x1d, 0x65, 0x87, 0x90, - 0xe5, 0xc8, 0xcf, 0xa0, 0x5e, 0xd7, 0x91, 0x49, 0x31, 0xd9, 0xfd, 0xfa, 0x52, 0x7f, 0x54, 0x37, 0xe0, 0xfa, 0x01, - 0x08, 0x60, 0x03, 0x70, 0x08, 0x54, 0x83, 0xa5, 0x11, 0xc1, 0xa2, 0x4c, 0xa1, 0x7d, 0x0d, 0xbd, 0x37, 0x1a, 0xfe, - 0x0b, 0xdc, 0x45, 0xe4, 0xca, 0xff, 0x04, 0x81, 0xbf, 0xa2, 0x4c, 0x2b, 0x53, 0xfc, 0x4f, 0xb4, 0x7a, 0x85, 0x72, - 0xd6, 0xb4, 0xe6, 0x83, 0x68, 0x4d, 0x84, 0x6a, 0xc6, 0x10, 0xfc, 0x5b, 0x59, 0xa6, 0x2d, 0x55, 0x95, 0xfa, 0xd0, - 0x78, 0xad, 0x15, 0xce, 0xf2, 0x71, 0xe4, 0xbd, 0xc6, 0xd0, 0xb1, 0x89, 0xb3, 0x94, 0x53, 0xa9, 0xb3, 0x4f, 0xfb, - 0x32, 0x72, 0x80, 0xd3, 0x09, 0x1b, 0x4f, 0x93, 0x43, 0x39, 0x4d, 0x1c, 0x64, 0x7e, 0xce, 0x30, 0xb2, 0xaa, 0x01, - 0x61, 0x51, 0x36, 0x94, 0xb6, 0x00, 0x93, 0x9c, 0x10, 0x32, 0xc5, 0x50, 0x14, 0xf9, 0x48, 0xf7, 0xc3, 0x7a, 0xb3, - 0xba, 0x2f, 0xde, 0x69, 0x80, 0xd3, 0x30, 0x81, 0x40, 0xe0, 0x45, 0x7c, 0x93, 0x89, 0x4b, 0xf0, 0x18, 0x1e, 0xc0, - 0x97, 0xe0, 0x26, 0x97, 0xb2, 0xdf, 0xab, 0x30, 0xc7, 0xb5, 0x05, 0x0c, 0x1a, 0xac, 0x1e, 0x44, 0x87, 0x4b, 0x69, - 0xb3, 0xab, 0x00, 0xb1, 0x31, 0x85, 0x58, 0x16, 0x6c, 0x6d, 0xd9, 0xb3, 0xef, 0x55, 0xd3, 0xd0, 0x3a, 0xe1, 0x58, - 0x5c, 0xe6, 0x10, 0x45, 0x65, 0x10, 0x83, 0x3b, 0x92, 0xc7, 0xe7, 0x3d, 0x12, 0xe1, 0x05, 0x01, 0xb7, 0xb2, 0x58, - 0x86, 0x2b, 0xba, 0x1c, 0xdd, 0xd2, 0xf5, 0xe8, 0x86, 0x8e, 0xe9, 0xe4, 0xef, 0x63, 0xb0, 0xc8, 0xd6, 0xa9, 0x77, - 0x74, 0x3d, 0x5a, 0xd2, 0x6f, 0xc7, 0xf4, 0xe0, 0x6f, 0x60, 0xc2, 0x87, 0x87, 0x09, 0xbd, 0x00, 0xc7, 0x2e, 0x52, - 0xa3, 0xa7, 0xa6, 0x6f, 0x70, 0x58, 0x8d, 0xf2, 0x21, 0x1f, 0xe5, 0x94, 0x8f, 0x8a, 0x61, 0x35, 0x02, 0x4f, 0xc7, - 0x6a, 0xc8, 0x47, 0x15, 0xe5, 0xa3, 0xf3, 0x61, 0x35, 0x3a, 0x27, 0xcd, 0xa6, 0xbf, 0xae, 0xf8, 0x55, 0xc9, 0x52, - 0xd8, 0x16, 0xb0, 0x7c, 0x3d, 0xaf, 0xa8, 0xd4, 0x5f, 0xd5, 0xe6, 0x64, 0xb6, 0x9c, 0xbd, 0xbd, 0xee, 0x72, 0x62, - 0xf1, 0xb8, 0x6d, 0x3a, 0x5c, 0x7d, 0x39, 0x51, 0x27, 0xbd, 0x42, 0x7e, 0x18, 0x4f, 0x85, 0x3a, 0x87, 0xc0, 0x4c, - 0x62, 0x16, 0xc6, 0x0c, 0x9b, 0xa9, 0xd3, 0x40, 0x81, 0x93, 0x8d, 0x3c, 0x17, 0xc5, 0x6c, 0x94, 0x53, 0x78, 0x1f, - 0x13, 0x12, 0x09, 0x38, 0xab, 0x8e, 0xaa, 0x51, 0x01, 0x31, 0x47, 0x58, 0x88, 0x8f, 0xd0, 0x2f, 0xf5, 0x91, 0x87, - 0x04, 0x9e, 0x61, 0x5f, 0x8b, 0x41, 0x0c, 0x47, 0xbc, 0xad, 0xac, 0x9a, 0x85, 0x09, 0x54, 0x56, 0x0d, 0x4b, 0x53, - 0x59, 0x41, 0xb3, 0x51, 0xe5, 0x57, 0x56, 0xe1, 0x18, 0x25, 0x84, 0x44, 0xa5, 0xae, 0x0c, 0xd4, 0x27, 0x09, 0x0b, - 0x4b, 0x5d, 0xd9, 0xb9, 0xfa, 0xe8, 0xdc, 0xaf, 0xec, 0x1c, 0x5c, 0x48, 0x07, 0x89, 0x7f, 0x95, 0xca, 0xd3, 0xf6, - 0x75, 0xb0, 0xb1, 0xaa, 0xe8, 0x86, 0xdf, 0x56, 0x45, 0x1c, 0x95, 0xd4, 0xc5, 0x80, 0xc6, 0x85, 0x11, 0x49, 0xaa, - 0xd7, 0x28, 0xf8, 0x43, 0x82, 0xa8, 0x34, 0x06, 0xaf, 0xce, 0xa4, 0x6b, 0xa5, 0x56, 0x54, 0x0c, 0xca, 0x41, 0x01, - 0xf7, 0xa7, 0xbc, 0xb5, 0x90, 0xbe, 0x87, 0x88, 0xca, 0x50, 0xde, 0xe0, 0x1f, 0x18, 0x3c, 0x99, 0xad, 0xd2, 0x30, - 0x19, 0xdd, 0xd1, 0x78, 0xb4, 0x44, 0x38, 0x18, 0xb6, 0x4e, 0x15, 0xde, 0xfa, 0x05, 0xa4, 0xdf, 0xd2, 0x78, 0x74, - 0x43, 0x53, 0x6b, 0x73, 0x6a, 0xa0, 0xae, 0x7a, 0x63, 0x7a, 0x1b, 0xc1, 0xeb, 0xbb, 0x68, 0x49, 0x61, 0x2b, 0x1d, - 0xe7, 0xd9, 0xa5, 0x88, 0x52, 0x8a, 0x08, 0x84, 0x6b, 0x44, 0x0e, 0x5c, 0x6a, 0xb4, 0xc1, 0xf5, 0x00, 0xca, 0xd0, - 0x70, 0x81, 0xcb, 0x41, 0x3c, 0x5a, 0x7a, 0x64, 0x6a, 0xa9, 0x2f, 0xb2, 0x08, 0x1f, 0xed, 0x6c, 0xb4, 0x14, 0xcf, - 0x88, 0x85, 0x71, 0x05, 0x43, 0xa8, 0x0b, 0x2b, 0x4d, 0x41, 0xd2, 0x05, 0x8e, 0xec, 0x85, 0x45, 0x15, 0x6e, 0xc0, - 0xb4, 0xe8, 0x0e, 0xcc, 0xa3, 0x40, 0xe1, 0xe0, 0x12, 0xa4, 0x9f, 0x50, 0xb6, 0x73, 0x94, 0x26, 0x87, 0x37, 0x41, - 0xe9, 0xce, 0x04, 0x21, 0xed, 0xea, 0x26, 0x5b, 0xd2, 0x37, 0xd8, 0xde, 0xa1, 0x53, 0x51, 0x41, 0xf5, 0xb9, 0x05, - 0x93, 0x25, 0x1b, 0x84, 0x2d, 0x61, 0x7a, 0xa6, 0xd7, 0x80, 0x3d, 0xbd, 0x7f, 0xb0, 0x33, 0xdf, 0xc5, 0xec, 0xd3, - 0x7e, 0x19, 0x8d, 0x95, 0x05, 0x6f, 0x6e, 0x89, 0xdd, 0x92, 0x8d, 0xa7, 0xcb, 0xc3, 0x72, 0xba, 0x44, 0x62, 0x67, - 0xe8, 0x16, 0xe3, 0xf3, 0xe5, 0x82, 0x26, 0x78, 0xb6, 0xb1, 0x6a, 0xbe, 0x34, 0x68, 0x29, 0x29, 0xc3, 0xf5, 0xb6, - 0x44, 0xff, 0x7f, 0x75, 0xf1, 0x4b, 0x01, 0x5e, 0x82, 0xb1, 0x00, 0x10, 0xee, 0xc1, 0xb4, 0x20, 0xb5, 0x51, 0x36, - 0x96, 0x69, 0x98, 0xe2, 0x22, 0x30, 0x29, 0xfd, 0x7e, 0x98, 0xb3, 0x94, 0x78, 0xd0, 0xa1, 0xee, 0xd4, 0x4e, 0x7d, - 0x21, 0x08, 0xf0, 0x48, 0xea, 0x1c, 0x9b, 0xfc, 0x7d, 0x3c, 0x0b, 0xd4, 0x40, 0x04, 0x51, 0x76, 0x88, 0x8f, 0x18, - 0xb8, 0x28, 0xd2, 0x71, 0x3b, 0x5d, 0x11, 0x17, 0xbb, 0xc7, 0x2c, 0xc4, 0x49, 0xc2, 0x5c, 0xb3, 0x6c, 0xc8, 0xaa, - 0x08, 0x13, 0x74, 0x61, 0x60, 0x96, 0x37, 0x64, 0xd5, 0xfe, 0x01, 0x44, 0x6a, 0xb5, 0x65, 0xac, 0xba, 0xca, 0xf8, - 0x16, 0x80, 0xac, 0x19, 0x63, 0x07, 0x7f, 0x1b, 0xcf, 0xd4, 0x37, 0x51, 0xc8, 0x8f, 0x0e, 0xfe, 0x06, 0xc9, 0x87, - 0xdf, 0x22, 0x33, 0x07, 0xc9, 0x8d, 0x82, 0x2e, 0x9b, 0xb3, 0xae, 0xa1, 0x34, 0x71, 0xed, 0x95, 0x7a, 0xed, 0x49, - 0xb3, 0xf6, 0x0a, 0x74, 0xa7, 0x36, 0xbc, 0x87, 0xb2, 0x9d, 0x05, 0x13, 0x74, 0x34, 0xbb, 0x03, 0x1d, 0xbc, 0x53, - 0x04, 0xbd, 0x4c, 0x42, 0xe3, 0x11, 0xaa, 0x8c, 0x7a, 0x61, 0x47, 0x76, 0xb3, 0x2e, 0x99, 0x67, 0xc0, 0x1c, 0xdb, - 0x73, 0x48, 0x0c, 0x73, 0x75, 0x50, 0xa7, 0xac, 0x1c, 0xe6, 0x78, 0x00, 0xaf, 0x99, 0x1c, 0x8a, 0x41, 0xae, 0x51, - 0xbe, 0x2f, 0x58, 0x31, 0x2c, 0x07, 0xb9, 0xe6, 0x66, 0xa6, 0xcd, 0xd8, 0xb4, 0x89, 0x0e, 0xcf, 0xbc, 0x62, 0x47, - 0xab, 0x1e, 0xf0, 0xb1, 0xe0, 0xc9, 0xec, 0x7b, 0x3e, 0xbe, 0x01, 0x4e, 0x66, 0x73, 0x1b, 0x2d, 0xe9, 0x5d, 0x94, - 0xd2, 0x9b, 0x68, 0x4d, 0x97, 0xd1, 0x85, 0x31, 0x31, 0x4e, 0x6a, 0x38, 0x07, 0xa0, 0x55, 0x00, 0x89, 0xa7, 0x7e, - 0xbd, 0xe7, 0x49, 0x15, 0x2e, 0x69, 0x0a, 0x6e, 0xc3, 0xbe, 0x7d, 0xe6, 0x95, 0x2f, 0x91, 0xda, 0x20, 0xc6, 0x9a, - 0x35, 0x54, 0xdc, 0x78, 0xeb, 0x3e, 0x12, 0x35, 0xec, 0x5c, 0x17, 0x9b, 0xa8, 0x1a, 0x4e, 0xa6, 0x25, 0x20, 0xb6, - 0x96, 0xc3, 0xa1, 0x3b, 0x42, 0x76, 0x8f, 0x1f, 0x1d, 0xe8, 0xb9, 0x27, 0x2d, 0xb6, 0x6d, 0xcb, 0x1f, 0x18, 0xc2, - 0x94, 0x7e, 0xfe, 0xc8, 0x07, 0xc4, 0x8a, 0x4b, 0x38, 0x1b, 0x81, 0x3a, 0x5a, 0xa1, 0xd3, 0xef, 0x55, 0x58, 0xe8, - 0x03, 0x7c, 0x73, 0x1b, 0x25, 0xf4, 0x2e, 0xca, 0x3d, 0xb2, 0xb6, 0xac, 0x99, 0x9c, 0x9e, 0x65, 0x21, 0x6f, 0x1f, - 0xe8, 0xe5, 0x02, 0x40, 0xb4, 0x06, 0xb1, 0x2f, 0x75, 0x3d, 0x00, 0xa7, 0x21, 0x34, 0x09, 0x8d, 0xe0, 0xaa, 0x82, - 0x30, 0x02, 0xae, 0x24, 0xfc, 0x0d, 0x26, 0x2a, 0xf0, 0x05, 0xb8, 0xc8, 0xa4, 0x69, 0xce, 0x83, 0xda, 0x1f, 0xc9, - 0xd3, 0xa2, 0xed, 0xed, 0x0a, 0xa3, 0x09, 0xc6, 0x9e, 0x68, 0x9f, 0x47, 0xca, 0x51, 0x5c, 0x24, 0x61, 0x36, 0xba, - 0x55, 0xe7, 0x39, 0xcd, 0x46, 0x77, 0xfa, 0x57, 0x45, 0xc7, 0xf4, 0x3b, 0x1d, 0xd0, 0x46, 0x49, 0xdf, 0x3a, 0xce, - 0x06, 0xb4, 0x5e, 0x2c, 0x8d, 0xff, 0xb5, 0x1c, 0xdd, 0x52, 0x39, 0xba, 0xf3, 0x2d, 0xa9, 0x26, 0xd3, 0xe2, 0x50, - 0xa0, 0x21, 0x55, 0xe7, 0xf7, 0x05, 0xf0, 0x73, 0xa5, 0xf1, 0x9d, 0x36, 0xdf, 0x7b, 0xed, 0x3f, 0xef, 0xe4, 0x09, - 0x14, 0x4b, 0x54, 0xb0, 0x6a, 0x04, 0x76, 0xec, 0xeb, 0x3c, 0x2e, 0xcc, 0x28, 0xc5, 0xd4, 0x9a, 0xf4, 0x63, 0xe0, - 0x8a, 0x69, 0xaf, 0x00, 0x57, 0xcb, 0xed, 0x56, 0xc5, 0xd0, 0x84, 0x3d, 0x3b, 0x86, 0xa8, 0xe7, 0xc6, 0x31, 0x4a, - 0x36, 0xdc, 0x03, 0x62, 0x2d, 0xf3, 0x56, 0x2e, 0x01, 0x09, 0xbc, 0xf5, 0x30, 0x29, 0x00, 0x63, 0xb0, 0x5c, 0x12, - 0x9d, 0xc7, 0x43, 0x9f, 0x50, 0x2f, 0x34, 0xea, 0x84, 0x6c, 0x6c, 0x09, 0x1c, 0x7f, 0x58, 0x1f, 0x02, 0xc1, 0xab, - 0x3c, 0xd7, 0x5f, 0x69, 0x5d, 0x7f, 0xa9, 0xf4, 0xdc, 0xb1, 0x5c, 0xd7, 0xcf, 0xda, 0xd4, 0xe8, 0x15, 0x58, 0xf8, - 0x6e, 0x94, 0x79, 0x24, 0xb7, 0x08, 0xa9, 0x0a, 0xac, 0xd4, 0x2d, 0x24, 0x98, 0x7f, 0x25, 0x67, 0xab, 0x32, 0x5f, - 0x3d, 0xf2, 0xa0, 0x9c, 0x4d, 0x4f, 0x7f, 0x43, 0x82, 0x76, 0xd7, 0x91, 0xe6, 0xf1, 0x16, 0x1d, 0x3e, 0xbb, 0xd6, - 0x12, 0x73, 0x27, 0x51, 0xf1, 0x7c, 0x0a, 0xd8, 0xea, 0x45, 0x76, 0xa5, 0x7c, 0xac, 0x76, 0x71, 0xfc, 0xcc, 0xf9, - 0x13, 0x57, 0xe1, 0x5a, 0x34, 0x94, 0x20, 0xe0, 0xcd, 0x61, 0xec, 0x0a, 0x55, 0x40, 0x43, 0x73, 0x03, 0xc7, 0xb9, - 0x1a, 0x56, 0x9a, 0x80, 0x69, 0x29, 0x8f, 0x0e, 0x70, 0x68, 0xf2, 0xa8, 0xdd, 0x34, 0xac, 0x0c, 0x5d, 0x6b, 0xf4, - 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, 0xdf, 0x3f, 0x18, 0x54, 0xf8, 0x93, 0x34, 0x47, 0xa3, 0x9d, 0x1b, 0xee, 0x34, - 0x02, 0x33, 0x57, 0x72, 0x45, 0x76, 0x47, 0xc9, 0xcb, 0xef, 0xe9, 0x85, 0x05, 0xf4, 0xe7, 0x3f, 0x17, 0x13, 0x4e, - 0x5a, 0x62, 0x42, 0xb4, 0x74, 0xd0, 0xa2, 0x83, 0x1d, 0xe5, 0x95, 0x7d, 0x89, 0x97, 0xce, 0xf1, 0xbf, 0xaf, 0xc7, - 0xda, 0x55, 0x20, 0xb4, 0x3a, 0xb9, 0xdf, 0x9e, 0x2c, 0x10, 0x35, 0xa0, 0x9a, 0x5d, 0x95, 0xa3, 0x4c, 0x3b, 0x2b, - 0xb2, 0x69, 0xc8, 0x5c, 0x77, 0xb3, 0x34, 0x6c, 0x26, 0x3b, 0x16, 0x96, 0x19, 0x06, 0x6b, 0xa7, 0x8a, 0x3e, 0x07, - 0x2d, 0x3f, 0x82, 0x17, 0x4d, 0xe5, 0x99, 0xcf, 0x66, 0x19, 0xf1, 0x02, 0x9d, 0x73, 0x2a, 0x16, 0x4d, 0xe9, 0x58, - 0xb9, 0xdd, 0x96, 0x68, 0x2c, 0x51, 0x46, 0x41, 0x50, 0xdb, 0x20, 0xec, 0xba, 0x74, 0x4f, 0xfa, 0xb4, 0x8b, 0x4f, - 0x2b, 0xd0, 0xf7, 0xf8, 0x3e, 0x03, 0x89, 0xa9, 0x27, 0x79, 0xa8, 0x1a, 0xcd, 0xd1, 0xc9, 0xb3, 0x38, 0xd5, 0xf8, - 0xfc, 0x4a, 0x76, 0xd6, 0xbc, 0x5b, 0x8d, 0x29, 0xfe, 0x23, 0x75, 0xfb, 0xce, 0x65, 0x68, 0xa2, 0xbf, 0x96, 0x07, - 0x2d, 0x85, 0x05, 0xc7, 0x6d, 0xe3, 0xaf, 0xdf, 0x66, 0x0e, 0x31, 0x2c, 0x5d, 0x0e, 0x6f, 0x42, 0x87, 0xee, 0xae, - 0xb2, 0x33, 0xd7, 0x07, 0xd4, 0xa9, 0x8b, 0x75, 0x1b, 0x50, 0xb2, 0xe4, 0xdd, 0x3a, 0x3d, 0xb1, 0xd2, 0x77, 0xfb, - 0xe1, 0xce, 0x3c, 0x6a, 0x76, 0x77, 0xbb, 0x9d, 0x90, 0xb6, 0x7d, 0x30, 0xde, 0x97, 0xb0, 0x10, 0xe7, 0x1d, 0xb6, - 0xf7, 0x7d, 0x58, 0x3d, 0xe6, 0x83, 0x5f, 0x70, 0x9c, 0x61, 0xf4, 0x33, 0x65, 0xe8, 0xf3, 0xaa, 0x90, 0x57, 0xaa, - 0x53, 0xbe, 0xd0, 0xad, 0x65, 0xea, 0xfd, 0x36, 0x7e, 0xdb, 0x0a, 0x10, 0xe3, 0x75, 0xc5, 0x4a, 0xf1, 0x86, 0x56, - 0x18, 0xd7, 0xc0, 0x6d, 0x72, 0xa8, 0xa5, 0x5a, 0x20, 0xea, 0xf2, 0x93, 0xc7, 0x3c, 0x32, 0xea, 0x4c, 0xf8, 0xee, - 0x31, 0xf7, 0xa5, 0x6b, 0xbb, 0x4d, 0xfc, 0x5c, 0xd3, 0xf6, 0x77, 0x07, 0xba, 0xa3, 0x75, 0x0f, 0x37, 0xcf, 0xe6, - 0xe7, 0x91, 0xf9, 0x62, 0x80, 0xcd, 0xda, 0x65, 0x5c, 0x76, 0x0c, 0xf7, 0xbd, 0xe9, 0xc1, 0x58, 0x40, 0x20, 0x31, - 0x43, 0x2f, 0x03, 0x17, 0xb8, 0xc0, 0x5d, 0x61, 0xc0, 0x10, 0xd7, 0xb4, 0xe4, 0x4c, 0x5b, 0xd9, 0xfa, 0xc8, 0xdb, - 0xa8, 0x10, 0xac, 0xeb, 0x8e, 0x9b, 0x24, 0x87, 0xe0, 0x84, 0x2d, 0xf7, 0xbe, 0xf6, 0xda, 0x19, 0xfe, 0x63, 0x20, - 0x9c, 0x5b, 0xa2, 0x67, 0xd4, 0xf6, 0x58, 0xab, 0x7b, 0x0d, 0xaf, 0x72, 0x17, 0x79, 0xd6, 0x6f, 0xe6, 0xa5, 0x61, - 0x5f, 0xf0, 0x5a, 0x0a, 0x0e, 0x8d, 0xed, 0x56, 0xb8, 0xc5, 0xe2, 0x1d, 0xad, 0x56, 0xd6, 0xda, 0x6a, 0xaf, 0x95, - 0x8a, 0xde, 0xbf, 0xe6, 0x38, 0x71, 0x96, 0xc2, 0xf6, 0xc3, 0x87, 0x0b, 0x76, 0x4d, 0x00, 0x83, 0x16, 0x93, 0x05, - 0x4a, 0x50, 0xc9, 0x5a, 0xd5, 0x6e, 0xa7, 0xc4, 0x2f, 0xf7, 0x8b, 0x2e, 0xb3, 0x9d, 0xc7, 0xaf, 0x9b, 0xb4, 0xcf, - 0x7c, 0x8e, 0x7e, 0x98, 0xdf, 0x59, 0x27, 0x25, 0x67, 0x18, 0xd7, 0xf2, 0xff, 0xab, 0xe8, 0x65, 0x91, 0xa5, 0xd1, - 0xc6, 0xf0, 0x60, 0x36, 0xd4, 0xa6, 0x0f, 0x8d, 0x51, 0xb9, 0x65, 0xa3, 0x88, 0x68, 0x75, 0x0b, 0x82, 0x19, 0xc5, - 0x7d, 0x89, 0x36, 0xaf, 0x54, 0x59, 0x78, 0x87, 0xcf, 0x6c, 0xf4, 0x86, 0xed, 0x09, 0xa1, 0x7c, 0xf7, 0xb4, 0x30, - 0xab, 0x96, 0x8a, 0x06, 0xdb, 0x25, 0xbc, 0x8b, 0x51, 0xa5, 0x9f, 0x30, 0xd9, 0xb2, 0x60, 0xaa, 0xff, 0xdf, 0x17, - 0x59, 0xda, 0xa6, 0xe8, 0xc0, 0x74, 0x36, 0x7d, 0x3a, 0xe9, 0x06, 0xd7, 0x19, 0xb0, 0x88, 0x60, 0x4b, 0x85, 0xe3, - 0x51, 0x6a, 0x37, 0x48, 0x98, 0x08, 0x6e, 0xa2, 0x5e, 0x76, 0xb4, 0x4c, 0xc9, 0xaa, 0x80, 0xe7, 0x57, 0xae, 0x32, - 0x1d, 0x47, 0x43, 0xbf, 0x7f, 0x95, 0x9a, 0xd0, 0xaf, 0xd4, 0x4b, 0x55, 0x9c, 0x87, 0x51, 0x75, 0xa8, 0x30, 0x46, - 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x84, 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x82, 0x81, 0x5c, 0x6a, 0x83, 0x7a, - 0x4d, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, 0x42, 0x2f, 0x58, 0xe9, 0xdf, 0x85, 0xd6, 0x20, 0x50, 0x94, 0xcd, 0x94, - 0xe9, 0xb9, 0x6e, 0xe7, 0x05, 0x4d, 0x68, 0x41, 0x57, 0xa4, 0x06, 0x7d, 0xaf, 0x93, 0xb3, 0xa3, 0x93, 0x9d, 0x99, - 0xf5, 0x98, 0x15, 0xc3, 0xc9, 0x34, 0x86, 0x6b, 0x5a, 0xec, 0xae, 0x69, 0xcb, 0xe6, 0x8d, 0xab, 0xb1, 0x71, 0x1a, - 0xb4, 0x0b, 0xa4, 0x6d, 0x9a, 0xdb, 0x4f, 0x3d, 0x6e, 0x7f, 0x5d, 0xb3, 0xe5, 0xb4, 0xb7, 0xde, 0x6e, 0x7b, 0x29, - 0xd8, 0x88, 0x7a, 0x7c, 0xfc, 0x5a, 0x49, 0xd7, 0x2d, 0x97, 0x9f, 0xc2, 0xb3, 0xc7, 0xd7, 0x2f, 0x7d, 0x70, 0x39, - 0x5a, 0xb5, 0xb9, 0xfb, 0xe5, 0x2e, 0xb2, 0xdc, 0x17, 0x0d, 0x2d, 0xd7, 0x33, 0xd4, 0x24, 0xcf, 0x46, 0x7b, 0x87, - 0x5a, 0xb0, 0x9c, 0x75, 0x13, 0x9e, 0x18, 0xec, 0xd8, 0xab, 0xc6, 0xe6, 0xa8, 0xcc, 0x25, 0xab, 0x41, 0x02, 0x7d, - 0x92, 0x67, 0x9a, 0xfe, 0x41, 0x86, 0xf9, 0xe8, 0x96, 0xe6, 0x80, 0x2b, 0x56, 0xd9, 0x4b, 0x06, 0xa9, 0xab, 0xf6, - 0x12, 0x57, 0xbe, 0xc2, 0x21, 0xd9, 0xe0, 0x93, 0x61, 0xaa, 0x3e, 0xbb, 0xe4, 0xc1, 0xff, 0xdb, 0xaa, 0x55, 0x7a, - 0x6e, 0x92, 0x1b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, 0x4c, 0x0c, 0x12, 0xf0, 0xd4, 0x2e, 0x86, 0x6a, 0x54, 0x15, 0xb1, - 0x28, 0x73, 0x13, 0x73, 0xec, 0xde, 0xae, 0xa1, 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xe6, 0x0e, 0x6c, 0x05, 0x3a, - 0x3a, 0xd1, 0x5c, 0x86, 0x99, 0xb9, 0x0c, 0xd3, 0xae, 0xad, 0x02, 0xc3, 0xab, 0xb6, 0x4a, 0xa2, 0x5c, 0x8d, 0x7a, - 0xdc, 0xcc, 0x52, 0xb3, 0x17, 0x79, 0xf7, 0x9a, 0xf4, 0x24, 0xfe, 0x74, 0xe9, 0xc9, 0xeb, 0x61, 0x40, 0xe4, 0x97, - 0x2c, 0x0d, 0xd7, 0x28, 0x08, 0x4e, 0xad, 0x76, 0x20, 0xcd, 0x47, 0x80, 0xcc, 0x8f, 0xd3, 0xf0, 0x9d, 0x16, 0xe7, - 0x90, 0x8d, 0xd2, 0x38, 0xb1, 0xa5, 0x51, 0x0f, 0xc1, 0x9d, 0xf7, 0x8a, 0xc7, 0x10, 0xf8, 0xf0, 0x03, 0x6e, 0x06, - 0x15, 0xdd, 0x96, 0x98, 0x28, 0x6d, 0x1e, 0x75, 0xcb, 0x47, 0x0d, 0xa1, 0x92, 0x95, 0xe1, 0xc5, 0xd0, 0xde, 0x1d, - 0x81, 0x51, 0xe5, 0x04, 0x32, 0xc3, 0x62, 0xff, 0x60, 0x98, 0x2a, 0x41, 0xd1, 0x50, 0x0e, 0x97, 0x28, 0x07, 0xc4, - 0x24, 0x10, 0x18, 0x15, 0x83, 0x54, 0x57, 0xa6, 0x5e, 0x0c, 0x52, 0x7d, 0xab, 0x22, 0xf5, 0x59, 0x16, 0x56, 0x54, - 0xb7, 0x88, 0x8e, 0xe9, 0x50, 0xd2, 0xa5, 0xd9, 0xa9, 0xb9, 0x96, 0x5e, 0xa8, 0xe5, 0xf8, 0x5c, 0xa7, 0xc1, 0x28, - 0x9e, 0xba, 0x14, 0xfd, 0x56, 0xed, 0x67, 0xff, 0x2d, 0xa6, 0xd4, 0x88, 0x4d, 0xed, 0x2d, 0x62, 0x58, 0xb5, 0x1f, - 0xb2, 0x2a, 0x07, 0xed, 0x2e, 0x28, 0x1b, 0x2b, 0xe3, 0x3c, 0xdf, 0x08, 0x66, 0x0e, 0xda, 0xc6, 0xaa, 0xe9, 0x43, - 0x6f, 0xc4, 0xa8, 0xbd, 0x31, 0xd5, 0xb8, 0x27, 0xf0, 0xd3, 0x06, 0x4d, 0xf7, 0x22, 0xcf, 0x51, 0x8f, 0xbc, 0xfb, - 0x9f, 0x39, 0xb2, 0x33, 0xf9, 0x2c, 0x96, 0x49, 0xdd, 0x3e, 0x26, 0xc1, 0x42, 0xd5, 0x31, 0xba, 0x70, 0x23, 0x53, - 0xda, 0xcf, 0x9d, 0xe9, 0x47, 0x3c, 0x93, 0x87, 0xed, 0xd0, 0xa8, 0x2f, 0x0d, 0x6b, 0x49, 0x11, 0xf5, 0x05, 0xbd, - 0x35, 0xd5, 0xd1, 0x01, 0xf5, 0x3a, 0x02, 0xab, 0x2b, 0xda, 0xa0, 0x06, 0x60, 0x32, 0xae, 0x6d, 0x6d, 0x3e, 0x07, - 0x53, 0x5b, 0x55, 0xc1, 0x33, 0xba, 0x2b, 0x94, 0xee, 0x4d, 0xea, 0xba, 0x35, 0xc4, 0x16, 0x30, 0x20, 0x70, 0xa3, - 0xa7, 0xa6, 0x3f, 0x68, 0xa2, 0x02, 0xd0, 0xa0, 0x71, 0x3b, 0xd3, 0x39, 0x12, 0xfd, 0x4e, 0x6d, 0xda, 0x66, 0xaa, - 0x57, 0x95, 0x0f, 0xa0, 0xe2, 0xcf, 0xd2, 0xd9, 0x85, 0x19, 0xb1, 0x00, 0xc6, 0x3d, 0x70, 0xa6, 0x7a, 0xc7, 0x19, - 0x58, 0x4f, 0xe4, 0x79, 0x56, 0xf2, 0x44, 0x0a, 0x98, 0x11, 0x79, 0x75, 0x25, 0x05, 0x0c, 0x83, 0x1a, 0x00, 0xb4, - 0x68, 0x2e, 0xa3, 0x09, 0x7f, 0x52, 0xd3, 0xfb, 0xf2, 0xf0, 0x27, 0x3a, 0xd7, 0x37, 0xe3, 0x1a, 0x0c, 0x95, 0xd7, - 0x15, 0xdf, 0xc9, 0xf4, 0x0d, 0x7f, 0xea, 0x65, 0x5a, 0xca, 0x75, 0xb1, 0x93, 0xe5, 0xc9, 0x37, 0xfc, 0x99, 0xce, - 0x73, 0xf0, 0xb4, 0xa6, 0x69, 0x7c, 0xb7, 0x93, 0xe5, 0xef, 0xdf, 0x3c, 0xb5, 0x79, 0x9e, 0x8c, 0x6b, 0x7a, 0xc3, - 0xf9, 0x47, 0x97, 0x69, 0xa2, 0xab, 0x1a, 0x3f, 0xfd, 0xbb, 0xcd, 0xf5, 0xb4, 0xa6, 0x57, 0x52, 0x54, 0xcb, 0x9d, - 0xa2, 0x0e, 0xbe, 0x39, 0xf8, 0x3b, 0xff, 0xc6, 0x74, 0xef, 0xa0, 0xa6, 0x7f, 0xad, 0xe3, 0xa2, 0xe2, 0xc5, 0x4e, - 0x71, 0x7f, 0xfb, 0xfb, 0xdf, 0x9f, 0xda, 0x8c, 0x4f, 0x6b, 0x7a, 0xc7, 0xe3, 0x8e, 0xb6, 0x4f, 0x9e, 0x3d, 0xe5, - 0x7f, 0xab, 0x6b, 0xfa, 0x2b, 0xf3, 0x83, 0xa3, 0x1e, 0x67, 0x9e, 0x1e, 0x3e, 0x91, 0x4d, 0xd4, 0x80, 0xa1, 0x87, - 0x06, 0x90, 0x4b, 0xab, 0xa6, 0xb9, 0xc7, 0x2b, 0x17, 0xdc, 0xbe, 0xcf, 0xe2, 0x34, 0x5e, 0xc1, 0x41, 0xb0, 0x41, - 0xe3, 0xac, 0x02, 0x38, 0x55, 0xe0, 0x3d, 0xa3, 0x92, 0x66, 0xa5, 0xfc, 0x07, 0xe7, 0x1f, 0x61, 0xd0, 0x10, 0xd2, - 0x46, 0x45, 0x06, 0x3a, 0x59, 0xe9, 0xc8, 0x46, 0xe8, 0xbf, 0xd9, 0x8c, 0x83, 0xe3, 0xc3, 0xe8, 0xf5, 0xfb, 0x61, - 0xc1, 0x44, 0x58, 0x10, 0x42, 0xff, 0x0c, 0x0b, 0x70, 0x28, 0x29, 0x98, 0x97, 0xcf, 0xf8, 0x9e, 0x6b, 0xa3, 0xb0, - 0x10, 0x44, 0x77, 0x91, 0x7d, 0x40, 0xd5, 0xa3, 0xef, 0xd0, 0x0d, 0xf1, 0xb2, 0xc2, 0x82, 0xa1, 0x55, 0x0d, 0xcc, - 0x10, 0x14, 0xff, 0x86, 0x87, 0x12, 0x7c, 0xe2, 0x01, 0x3e, 0x7a, 0x4c, 0x66, 0x5c, 0x5d, 0x6b, 0x4f, 0x2e, 0xc2, - 0x82, 0x06, 0xba, 0xed, 0x10, 0x74, 0x20, 0xf2, 0x5f, 0x80, 0xa7, 0xc0, 0xc0, 0x87, 0x85, 0x5d, 0xca, 0x5d, 0x7f, - 0xf5, 0x5f, 0x0d, 0xeb, 0xe8, 0xc2, 0x8f, 0xfe, 0x6a, 0x5d, 0xd8, 0x33, 0x32, 0x95, 0x87, 0xe5, 0x70, 0x32, 0x1d, - 0x0c, 0xa4, 0x8b, 0xe3, 0x76, 0x9c, 0xcd, 0x7f, 0x9d, 0xcb, 0xc5, 0x02, 0x75, 0xdf, 0x38, 0xaf, 0x33, 0xfd, 0x37, - 0xd2, 0xce, 0x07, 0x6f, 0x8e, 0x7f, 0x3f, 0x3b, 0x3d, 0x7e, 0x05, 0xce, 0x07, 0x1f, 0x5e, 0x7e, 0xff, 0xf2, 0xbd, - 0x0a, 0xee, 0xae, 0xe6, 0xbc, 0xdf, 0x77, 0x52, 0x9f, 0x90, 0x0f, 0x2b, 0xb2, 0x1f, 0xc6, 0x8f, 0x0b, 0x65, 0xf4, - 0x40, 0x0e, 0x99, 0x85, 0x42, 0x86, 0x2a, 0x6a, 0xfb, 0xbb, 0x1c, 0x4e, 0x3c, 0x30, 0x8b, 0xbb, 0x86, 0x08, 0xd7, - 0x6f, 0xb9, 0x0d, 0xb2, 0x26, 0x8f, 0xbc, 0x7e, 0x70, 0x32, 0x95, 0x8e, 0x2d, 0x2c, 0x18, 0x94, 0x0d, 0x6d, 0x3a, - 0xce, 0xe6, 0xc5, 0xc2, 0xb6, 0xcb, 0x2d, 0x90, 0x51, 0x9a, 0x5d, 0x5c, 0x84, 0x0a, 0xba, 0xfa, 0x08, 0x34, 0x00, - 0xa6, 0x51, 0x85, 0x6b, 0x11, 0x9f, 0xf9, 0xe5, 0x47, 0x63, 0xaf, 0x79, 0xb7, 0xa8, 0x7b, 0x32, 0xcd, 0xaa, 0x1a, - 0x03, 0x3a, 0x98, 0x50, 0xee, 0x06, 0xdd, 0x04, 0x93, 0x51, 0x6d, 0xf9, 0x75, 0x5e, 0x2d, 0x4c, 0x73, 0xdc, 0x30, - 0x54, 0x5e, 0xc9, 0x6b, 0xd9, 0x40, 0x64, 0x20, 0x19, 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0x7d, 0x6f, 0xd7, 0x3b, 0x7e, - 0x93, 0x4b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x58, 0x28, 0xe7, 0x72, 0xc9, 0xf8, 0x5c, 0x2c, 0x8e, 0xc0, 0xed, - 0x7c, 0x2e, 0x16, 0x11, 0x06, 0xe5, 0xcb, 0x20, 0x56, 0x09, 0xd8, 0xbd, 0x38, 0x08, 0xdf, 0x4e, 0x68, 0x03, 0xbb, - 0x81, 0x24, 0x1b, 0x94, 0x76, 0xa5, 0x21, 0xca, 0x9d, 0xf2, 0x68, 0x83, 0xc8, 0x43, 0xac, 0x9a, 0x57, 0x6d, 0x4f, - 0x36, 0x73, 0x31, 0xc1, 0x55, 0x16, 0x33, 0x39, 0x8d, 0x0f, 0x59, 0x31, 0x8d, 0xa1, 0x94, 0x38, 0x4d, 0xc3, 0x98, - 0x4e, 0xa8, 0x20, 0x24, 0x61, 0x7c, 0x1e, 0x2f, 0x68, 0x82, 0x52, 0x82, 0x10, 0x42, 0x7e, 0x8c, 0xd0, 0x36, 0x07, - 0x96, 0xbc, 0xdd, 0x7e, 0x9e, 0x7e, 0x6e, 0xc7, 0x70, 0x19, 0x15, 0xa1, 0x1b, 0x74, 0xd6, 0xf0, 0x6f, 0x44, 0x05, - 0x8d, 0xb1, 0x62, 0x08, 0x02, 0x5e, 0x60, 0x54, 0xc2, 0x82, 0xc4, 0xac, 0x82, 0x28, 0x02, 0xe5, 0x3c, 0x5e, 0xb0, - 0x82, 0x36, 0x6d, 0x4e, 0x63, 0x6d, 0x12, 0xd4, 0x73, 0x58, 0x6a, 0x7b, 0x52, 0xa9, 0x10, 0x7b, 0x7c, 0x26, 0xa2, - 0x6b, 0x6d, 0x68, 0x00, 0x28, 0x50, 0x4a, 0x2e, 0x7e, 0xf3, 0xe5, 0x1e, 0x6e, 0x0a, 0xfa, 0x9f, 0x6d, 0x4c, 0xb4, - 0xb3, 0x5c, 0x1d, 0x7a, 0xf3, 0x05, 0x8d, 0xf3, 0x1c, 0x42, 0xb1, 0x19, 0x04, 0x72, 0x91, 0x55, 0x10, 0xd1, 0xe2, - 0x2e, 0x30, 0x21, 0xe1, 0xa0, 0x4d, 0xbf, 0x42, 0x6a, 0x43, 0x4c, 0xae, 0x3c, 0x31, 0xb0, 0xdb, 0x2a, 0x41, 0xc0, - 0x91, 0x9e, 0x67, 0x9f, 0x9a, 0x18, 0x6b, 0x9a, 0x9a, 0x99, 0x78, 0x1b, 0x0a, 0xd1, 0xa0, 0x05, 0xd1, 0x0c, 0xde, - 0x3f, 0x57, 0x1c, 0xaf, 0x3a, 0xf0, 0x03, 0xde, 0xb9, 0x38, 0xf3, 0x6a, 0xe6, 0x11, 0x39, 0xf5, 0x51, 0x8e, 0xe8, - 0x97, 0x3c, 0xac, 0x46, 0x3a, 0x19, 0x63, 0x25, 0x71, 0xd0, 0xdb, 0x60, 0xc1, 0x9c, 0xd0, 0x15, 0x0f, 0x2d, 0x1f, - 0xff, 0x0a, 0x99, 0x8c, 0x92, 0x1a, 0x2b, 0xba, 0xd2, 0x62, 0xc4, 0x79, 0x0d, 0xb3, 0x34, 0x59, 0xd1, 0xc5, 0x42, - 0x93, 0x66, 0xa1, 0x4c, 0x03, 0x7c, 0x02, 0x2d, 0x46, 0xee, 0xa1, 0xa6, 0x0d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, - 0xf7, 0xd0, 0xe1, 0xff, 0xe7, 0xd9, 0x05, 0x22, 0xed, 0xcd, 0x4d, 0x64, 0x3c, 0x52, 0x37, 0x70, 0x50, 0x8c, 0x8f, - 0x7d, 0x33, 0xf1, 0x0b, 0x67, 0xf4, 0x21, 0xa9, 0x7c, 0x87, 0x0f, 0x96, 0x3f, 0xde, 0xd4, 0xcc, 0xca, 0x08, 0xd6, - 0xc3, 0x76, 0x8b, 0x0b, 0xa2, 0xed, 0x02, 0x48, 0x3d, 0xe3, 0xd5, 0xc2, 0x37, 0x5e, 0x8d, 0xef, 0x31, 0x5e, 0x75, - 0x67, 0x6a, 0x98, 0x93, 0x0d, 0xea, 0xb3, 0x94, 0x3c, 0x3f, 0x47, 0x99, 0x60, 0xd3, 0xe5, 0xac, 0xa4, 0x2a, 0x95, - 0xd0, 0x5e, 0xec, 0x67, 0x8c, 0x6f, 0x09, 0xc6, 0x59, 0x71, 0x18, 0x09, 0x54, 0xa5, 0x92, 0x3a, 0xec, 0x15, 0xa0, - 0x1e, 0x83, 0xf7, 0x06, 0x43, 0xd4, 0xc8, 0xd8, 0x4d, 0x1b, 0x08, 0x0d, 0x8d, 0xf5, 0x68, 0xcf, 0x5a, 0x8f, 0x6e, - 0xb7, 0x95, 0xf1, 0xb7, 0x93, 0xeb, 0x22, 0x41, 0x54, 0x61, 0x35, 0x9a, 0x00, 0x6f, 0x9a, 0xd8, 0xdb, 0x92, 0x53, - 0x5a, 0x60, 0xf8, 0xec, 0x3f, 0xc3, 0xd2, 0xa9, 0x24, 0x4a, 0x32, 0x2b, 0xa3, 0x81, 0x3b, 0x07, 0x5f, 0xc4, 0x15, - 0xac, 0x01, 0x88, 0xe4, 0x88, 0x1e, 0xae, 0x7f, 0x86, 0xd2, 0x65, 0x96, 0x64, 0x26, 0x21, 0x33, 0x17, 0x69, 0x3b, - 0xeb, 0x60, 0xe2, 0x4c, 0x6a, 0xbd, 0xb1, 0x90, 0x43, 0x83, 0xfc, 0x00, 0xca, 0x10, 0x87, 0x4f, 0x3e, 0x98, 0x50, - 0xa9, 0x42, 0xa9, 0x36, 0xba, 0xd9, 0x0d, 0xbc, 0xf2, 0x21, 0xbb, 0xe2, 0x65, 0x15, 0x5f, 0xad, 0x8c, 0x25, 0x31, - 0x67, 0xf7, 0xb9, 0xed, 0x51, 0x61, 0x5e, 0xbd, 0x7d, 0xf9, 0xfd, 0x71, 0xe3, 0xd5, 0x2e, 0xe2, 0x68, 0x08, 0xb6, - 0x15, 0x63, 0x8c, 0xde, 0xe2, 0xd3, 0x60, 0xa2, 0x5c, 0x23, 0xd0, 0xbb, 0x14, 0xf4, 0xdb, 0x5f, 0xea, 0x09, 0x78, - 0xc5, 0xf5, 0xf2, 0x4b, 0x3e, 0x02, 0x96, 0xa8, 0xd0, 0xb3, 0xc2, 0xdc, 0xac, 0xcc, 0xee, 0xed, 0x56, 0x64, 0xa6, - 0x5d, 0x69, 0x64, 0x20, 0x5e, 0x6d, 0x87, 0xb1, 0x70, 0xe9, 0x9a, 0x6e, 0x07, 0xbb, 0x5a, 0x7a, 0x96, 0xc8, 0xdb, - 0x6d, 0x09, 0x1d, 0xb2, 0x03, 0xee, 0xbd, 0x8c, 0x6f, 0xe1, 0x65, 0xe9, 0x75, 0xb3, 0x19, 0x3c, 0x01, 0xcc, 0x84, - 0x0b, 0x67, 0x59, 0x1c, 0x33, 0x9e, 0x84, 0x2a, 0x36, 0x57, 0x43, 0xe4, 0xad, 0x08, 0xad, 0xd9, 0x5f, 0xa1, 0x18, - 0x81, 0xdd, 0xc9, 0xe9, 0xc7, 0x6c, 0x35, 0x5b, 0x02, 0x6a, 0xfe, 0x55, 0x26, 0x80, 0xe6, 0xda, 0xb5, 0x60, 0x9b, - 0x42, 0x9b, 0xeb, 0xfa, 0x79, 0xbc, 0x8a, 0x13, 0x50, 0xdd, 0x80, 0xb7, 0xc8, 0x9d, 0x16, 0x5d, 0x19, 0x74, 0x51, - 0xfa, 0x40, 0x39, 0x96, 0x14, 0x3a, 0xfa, 0xde, 0x13, 0xea, 0xdc, 0x33, 0x80, 0x4b, 0x1a, 0x35, 0x4f, 0xb5, 0x94, - 0xb1, 0x00, 0x58, 0xe8, 0x60, 0xa6, 0xc8, 0x56, 0x74, 0x6b, 0x30, 0x29, 0xe0, 0xad, 0x01, 0xfe, 0x10, 0x59, 0xa5, - 0xee, 0x8a, 0x65, 0x58, 0x7a, 0xf6, 0xd7, 0xfd, 0x7e, 0xec, 0xd9, 0x5f, 0x5f, 0x68, 0x5a, 0x17, 0xb7, 0x1b, 0x40, - 0x6a, 0x0c, 0x20, 0x72, 0xac, 0x07, 0xc2, 0x44, 0x14, 0x6b, 0xfa, 0xfe, 0x1d, 0x9b, 0x2c, 0x0a, 0x84, 0x7e, 0xa7, - 0x5e, 0x4f, 0x4a, 0x02, 0x3a, 0xb5, 0x8a, 0x1d, 0x0d, 0xb4, 0xd9, 0x07, 0x04, 0x44, 0xf5, 0x33, 0xb2, 0xf9, 0x42, - 0x39, 0x17, 0xab, 0xf0, 0xe1, 0x63, 0x0a, 0x01, 0x85, 0x3b, 0x6a, 0x74, 0xde, 0x86, 0x48, 0xa0, 0xac, 0x50, 0xc4, - 0x9a, 0x17, 0x6b, 0x49, 0xc8, 0x7c, 0xbc, 0x40, 0xc1, 0x95, 0x03, 0x76, 0xe5, 0x6c, 0x32, 0x2c, 0x23, 0xce, 0xc2, - 0xfb, 0xbf, 0x99, 0x2c, 0x08, 0x6a, 0xae, 0xfc, 0x40, 0x8e, 0x3b, 0x99, 0x1a, 0x7b, 0xaa, 0x51, 0x83, 0x60, 0x32, - 0x82, 0xc0, 0x70, 0xc3, 0x2f, 0xf8, 0xf8, 0x60, 0x41, 0x40, 0x45, 0x66, 0xcd, 0x42, 0xcc, 0x8b, 0xc3, 0x27, 0x80, - 0x1a, 0x33, 0x3a, 0x78, 0x06, 0xa0, 0xb0, 0x10, 0x10, 0x7d, 0x0c, 0x32, 0x5a, 0x01, 0xbf, 0x85, 0xfa, 0xdd, 0x3a, - 0xf1, 0x7d, 0xe8, 0x57, 0x41, 0x2f, 0x62, 0x60, 0x38, 0xa2, 0xc9, 0x7e, 0xc8, 0x07, 0x93, 0x01, 0x68, 0x4b, 0xbc, - 0xdd, 0xd7, 0xd2, 0x8a, 0x9b, 0xd3, 0xa5, 0xd3, 0xfd, 0x93, 0x36, 0x41, 0x12, 0xa9, 0x64, 0xa5, 0x22, 0x06, 0x10, - 0xca, 0x52, 0x6d, 0x93, 0x25, 0x58, 0x56, 0x98, 0x25, 0xcd, 0x0d, 0x4a, 0xe2, 0xee, 0x66, 0xe0, 0x18, 0x35, 0xeb, - 0x38, 0x2c, 0x5b, 0x6e, 0xd4, 0x00, 0x9f, 0x93, 0xb0, 0xc2, 0xde, 0x70, 0x66, 0xd2, 0x3b, 0xd3, 0xe1, 0xea, 0x98, - 0xb3, 0x37, 0x1c, 0xc1, 0x38, 0x12, 0xbc, 0xf1, 0xd0, 0x25, 0xd3, 0x50, 0x91, 0x29, 0xe3, 0x60, 0xda, 0x03, 0xdc, - 0x7b, 0x0e, 0xc6, 0x61, 0x6c, 0x50, 0x59, 0x52, 0x9f, 0x7a, 0x77, 0x21, 0x10, 0xa4, 0xb5, 0x5e, 0xe6, 0x33, 0x3c, - 0x3d, 0x23, 0x94, 0xfd, 0x21, 0x87, 0x2f, 0xc0, 0x8e, 0x82, 0x1c, 0x4d, 0xf8, 0xb3, 0xc7, 0xbb, 0x81, 0xaa, 0xf8, - 0x20, 0xd8, 0x8b, 0x45, 0xba, 0x17, 0x0c, 0x04, 0xfc, 0x2a, 0xf8, 0x5e, 0x25, 0xe5, 0xde, 0x45, 0x5c, 0xec, 0xc5, - 0xab, 0xb8, 0xa8, 0xf6, 0x6e, 0xb2, 0x6a, 0xb9, 0x67, 0x3a, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x7b, 0xc1, - 0xa0, 0x30, 0x53, 0xbb, 0x62, 0x65, 0xe3, 0x38, 0x33, 0x21, 0xca, 0x82, 0x66, 0x80, 0xb0, 0xc6, 0x69, 0x00, 0x7c, - 0xea, 0x9a, 0xa5, 0xf4, 0x02, 0xc3, 0x0d, 0x88, 0xe9, 0x1a, 0xfa, 0x00, 0x3c, 0xf2, 0x9a, 0xc6, 0xb0, 0x04, 0x2e, - 0x06, 0x03, 0xb2, 0x86, 0xc8, 0x05, 0x6b, 0x6a, 0x83, 0x38, 0x84, 0x6b, 0x65, 0xa7, 0xbd, 0x0b, 0xcc, 0xb4, 0xdd, - 0x02, 0xa2, 0xf2, 0x84, 0xf4, 0xfb, 0xf6, 0x1b, 0xea, 0x5f, 0xb0, 0x97, 0x60, 0x7f, 0x55, 0x54, 0x61, 0x22, 0x95, - 0xe6, 0xfb, 0x92, 0x1d, 0x0d, 0x54, 0xc4, 0xe1, 0x1d, 0x47, 0x8a, 0x36, 0x2a, 0x97, 0x65, 0x4f, 0x96, 0x0d, 0x5f, - 0x89, 0x2b, 0xee, 0xfc, 0xb8, 0x2a, 0x29, 0xf3, 0x2a, 0x5b, 0x29, 0xf6, 0x6f, 0xc6, 0x35, 0xf7, 0x07, 0xd6, 0x9f, - 0xcd, 0x57, 0x70, 0x6d, 0xf5, 0xde, 0x35, 0xb9, 0x46, 0xe4, 0x2c, 0xa1, 0x5c, 0x52, 0xdb, 0x3c, 0xbc, 0xa5, 0xef, - 0xf3, 0xab, 0x6f, 0x33, 0x9d, 0xc6, 0x67, 0x15, 0x16, 0x2e, 0x44, 0x2b, 0x82, 0x43, 0x43, 0x2e, 0x9a, 0x47, 0x80, - 0xb9, 0xf6, 0xd9, 0x0a, 0x0a, 0x52, 0x9f, 0x55, 0xe8, 0xdd, 0x0a, 0x09, 0xaf, 0x34, 0xbb, 0xf4, 0x30, 0x90, 0x32, - 0x6e, 0x0f, 0x2d, 0x61, 0xd2, 0xf2, 0x22, 0xbc, 0xf7, 0x9a, 0x9b, 0xdc, 0x8b, 0x10, 0xa3, 0x17, 0x79, 0x76, 0x02, - 0xc6, 0xba, 0x4b, 0x76, 0x36, 0x3c, 0xf1, 0x1b, 0x9e, 0xb3, 0x16, 0x8d, 0xa6, 0x4b, 0x96, 0xf4, 0xfb, 0x31, 0x98, - 0x78, 0xa7, 0x2c, 0x87, 0x5f, 0xf9, 0x82, 0xae, 0x19, 0x60, 0x8a, 0xd1, 0x0b, 0x48, 0x48, 0x11, 0x89, 0x64, 0xad, - 0x4e, 0x92, 0xcf, 0x74, 0x17, 0x80, 0xd1, 0x2f, 0x66, 0x69, 0xb4, 0xbc, 0xd7, 0xcc, 0x02, 0xc9, 0x33, 0xf4, 0x5d, - 0x07, 0xdb, 0x1b, 0xfb, 0x20, 0xe5, 0xfc, 0x50, 0x4c, 0x07, 0x03, 0x4e, 0x34, 0xdc, 0x78, 0xa9, 0xc4, 0xb5, 0xba, - 0xc5, 0x1d, 0xc3, 0x58, 0xea, 0xdb, 0x22, 0x06, 0x07, 0xec, 0xa2, 0x95, 0xdd, 0x3e, 0xc0, 0xbe, 0x72, 0xbc, 0x4b, - 0x95, 0xdd, 0xe9, 0x31, 0xd3, 0x5c, 0xb6, 0x9a, 0x74, 0x52, 0x71, 0x3f, 0x91, 0x6f, 0x72, 0x07, 0x5d, 0x2e, 0xc7, - 0x9a, 0xb7, 0x1c, 0x80, 0x8a, 0x7e, 0xa4, 0xa8, 0xee, 0x17, 0x38, 0xc2, 0x3c, 0x58, 0xb7, 0xf9, 0x64, 0xdf, 0x14, - 0x38, 0x44, 0x9e, 0xb4, 0xd1, 0x14, 0xd0, 0xbd, 0x8b, 0xc7, 0x5d, 0xfd, 0xb6, 0x74, 0x17, 0x28, 0xd1, 0x4e, 0xc5, - 0x0d, 0x3f, 0x26, 0xea, 0x74, 0xa6, 0x0d, 0xa1, 0x7f, 0x65, 0xc4, 0xfd, 0xa5, 0x71, 0x15, 0x6f, 0x7a, 0x97, 0xcf, - 0x38, 0xd4, 0xd9, 0x0d, 0xa1, 0x00, 0x5c, 0xb5, 0xa7, 0x53, 0x37, 0x86, 0xf4, 0x4a, 0x89, 0x6e, 0x83, 0x83, 0xdd, - 0xeb, 0x33, 0x8e, 0xa2, 0x1f, 0xa3, 0x46, 0xbe, 0x89, 0xc4, 0x63, 0x39, 0x88, 0x1f, 0x17, 0x74, 0x19, 0x89, 0xc7, - 0xc5, 0x20, 0x7e, 0x2c, 0xeb, 0x7a, 0xf7, 0x5c, 0xb9, 0xbf, 0x8f, 0xc8, 0xb3, 0xee, 0xec, 0xa5, 0x12, 0x36, 0x06, - 0x9e, 0x5d, 0x0b, 0x08, 0xa7, 0xe0, 0x89, 0x6c, 0x2d, 0x7d, 0xe8, 0xdc, 0xee, 0x63, 0xcb, 0x24, 0x41, 0xd0, 0xf3, - 0x36, 0x9b, 0x44, 0xb1, 0xb3, 0xcd, 0xa3, 0x0f, 0xa7, 0x40, 0x42, 0xb7, 0xdb, 0x66, 0x5d, 0xad, 0x01, 0xc5, 0x34, - 0x1c, 0xf3, 0xfd, 0x62, 0x74, 0xe3, 0xbb, 0xeb, 0xef, 0x17, 0xa3, 0x25, 0x19, 0x4e, 0xcc, 0xe4, 0xc7, 0x47, 0xe3, - 0x59, 0x1c, 0x4d, 0xea, 0x8e, 0xd3, 0x42, 0xe3, 0x9f, 0x7a, 0xb7, 0x50, 0x04, 0x4e, 0xc5, 0x08, 0x8e, 0x9c, 0x0a, - 0xe5, 0xa4, 0xd4, 0xc0, 0xf0, 0xdf, 0xab, 0x76, 0xb4, 0x69, 0x6f, 0xe2, 0x2a, 0x59, 0x66, 0xe2, 0x52, 0x87, 0x0f, - 0xd7, 0xd1, 0xc5, 0x6d, 0x40, 0x3b, 0xef, 0x32, 0xed, 0xf8, 0x75, 0xd2, 0xa0, 0x27, 0xae, 0x66, 0x06, 0xdc, 0xba, - 0x1f, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, 0xc4, 0xdc, 0xfe, 0x4d, 0xd9, 0xfc, 0x2a, 0xda, 0xe7, 0xc8, 0x48, - 0xd9, 0x26, 0x23, 0x15, 0x18, 0x61, 0x4a, 0x91, 0xc4, 0x55, 0x08, 0x81, 0xec, 0xbf, 0xa4, 0xb8, 0x16, 0x4b, 0xef, - 0x35, 0x08, 0x13, 0x6c, 0x17, 0xb4, 0x5f, 0xdd, 0xce, 0x6d, 0xa5, 0xc5, 0x1e, 0xa9, 0xef, 0x73, 0x67, 0xbb, 0xa2, - 0xc9, 0xdf, 0x97, 0x0d, 0x68, 0x03, 0x88, 0xf2, 0xbe, 0x3e, 0x2a, 0x81, 0x93, 0x11, 0x37, 0x94, 0x18, 0xbd, 0xa0, - 0xab, 0x13, 0xb9, 0x67, 0xa7, 0xe6, 0x4d, 0xc5, 0x4c, 0xc5, 0x95, 0x6f, 0xf6, 0xcc, 0x7f, 0x30, 0x14, 0x54, 0x80, - 0x81, 0xb7, 0x39, 0xe3, 0xd1, 0x81, 0xee, 0xc6, 0xe8, 0xb4, 0x60, 0xb3, 0xa0, 0x2e, 0xeb, 0xa6, 0x8d, 0x07, 0x8d, - 0x38, 0x28, 0x8a, 0x55, 0xa1, 0x46, 0xc2, 0x13, 0x81, 0x80, 0x29, 0xbb, 0xe2, 0x91, 0x11, 0xd4, 0xf4, 0x26, 0x14, - 0x36, 0x14, 0xfc, 0x55, 0xa2, 0x9a, 0xde, 0x84, 0x36, 0x99, 0x38, 0xcd, 0x20, 0x82, 0x19, 0xb1, 0xdd, 0x6f, 0x01, - 0x6d, 0x6e, 0xcd, 0x68, 0x53, 0xd7, 0x56, 0x5b, 0x85, 0x5c, 0x52, 0xa4, 0x2c, 0xff, 0x9d, 0x9a, 0x0a, 0x4a, 0x6a, - 0xb9, 0xe8, 0x4d, 0x9a, 0x2e, 0x7a, 0x3c, 0x33, 0x92, 0x40, 0xe5, 0x96, 0x3b, 0x46, 0x7f, 0x08, 0x0b, 0x3c, 0x62, - 0xe2, 0xc4, 0x82, 0xb9, 0xd5, 0x11, 0xcb, 0xe6, 0x62, 0x31, 0x5a, 0x49, 0x08, 0x1b, 0x7c, 0xc8, 0xb2, 0x79, 0xa9, - 0x1f, 0x42, 0x5f, 0x58, 0x7a, 0x02, 0x76, 0xb1, 0xc1, 0x4a, 0x96, 0x01, 0xf8, 0x5e, 0xd0, 0xcd, 0x4a, 0x96, 0x91, - 0x54, 0xdd, 0x8f, 0x6b, 0x2c, 0x41, 0xa5, 0x15, 0x2a, 0x2d, 0xa9, 0xb1, 0x20, 0xf0, 0x55, 0xd5, 0xe5, 0x43, 0xb2, - 0xab, 0x40, 0x3d, 0x75, 0xd4, 0x80, 0x53, 0xa0, 0xaa, 0xc0, 0x82, 0x24, 0xa8, 0x0c, 0x5d, 0x15, 0x98, 0x56, 0x60, - 0x9a, 0xa9, 0xc2, 0x45, 0x99, 0x1d, 0x4a, 0xb3, 0x5e, 0xf2, 0x59, 0x3c, 0x08, 0x93, 0x61, 0x4c, 0x1e, 0x23, 0xd4, - 0xfe, 0x7e, 0x1e, 0xc5, 0x5a, 0x2e, 0xb9, 0x72, 0x7e, 0xf1, 0x37, 0x9f, 0xb1, 0xd7, 0x3d, 0xc3, 0x60, 0x01, 0xce, - 0xd2, 0xf6, 0x2a, 0x13, 0xef, 0x64, 0x2b, 0x38, 0x0e, 0x66, 0x51, 0x0e, 0xab, 0x9e, 0x1c, 0xd1, 0x5c, 0xe4, 0xda, - 0xbb, 0x08, 0x91, 0x83, 0xcc, 0x1e, 0x03, 0xec, 0x46, 0xf8, 0x3a, 0xb4, 0x36, 0xb7, 0xba, 0x42, 0xfc, 0x8d, 0x12, - 0x89, 0x9f, 0xa5, 0xfc, 0xb8, 0x5e, 0xa9, 0x5c, 0x95, 0xc1, 0x63, 0xd5, 0xcd, 0xe0, 0x99, 0xf6, 0x3d, 0xd6, 0xfe, - 0xad, 0xed, 0xe6, 0x78, 0xef, 0xc1, 0x83, 0xd6, 0xff, 0xd6, 0x93, 0x10, 0xda, 0x2b, 0x27, 0xa9, 0x3b, 0x6a, 0xf4, - 0xcc, 0x64, 0x8d, 0xa8, 0x84, 0xa9, 0xdd, 0xa9, 0x1c, 0x03, 0x35, 0x1d, 0xc0, 0xb5, 0x44, 0x4d, 0xd0, 0x93, 0x82, - 0x8d, 0xe1, 0x88, 0xb3, 0x38, 0x68, 0x87, 0x31, 0x8a, 0x97, 0x73, 0x25, 0x5e, 0xce, 0x8f, 0x18, 0x07, 0x68, 0x2d, - 0x40, 0xaa, 0xd7, 0xb0, 0x9f, 0xb9, 0x82, 0x05, 0x36, 0x77, 0xbe, 0x03, 0x0b, 0x64, 0x88, 0x93, 0xcd, 0x71, 0xb2, - 0xc7, 0xb5, 0x9e, 0x7b, 0x81, 0x8f, 0x93, 0x7a, 0xe1, 0xd5, 0x55, 0xb6, 0xeb, 0x5a, 0xb2, 0x72, 0x5e, 0x0c, 0x26, - 0x10, 0x94, 0xa5, 0x9c, 0x17, 0xc3, 0xc9, 0x82, 0xe6, 0xf0, 0x63, 0xd1, 0x40, 0x87, 0x58, 0x0e, 0x12, 0xb8, 0x74, - 0xf6, 0x18, 0xf0, 0x86, 0x52, 0x8b, 0xbb, 0xb1, 0x8e, 0x1c, 0xeb, 0x28, 0xf6, 0xc3, 0x18, 0x70, 0x65, 0x9d, 0xc0, - 0xfb, 0xfe, 0xeb, 0x63, 0x13, 0x90, 0x55, 0xbb, 0xc2, 0xab, 0x51, 0xee, 0xba, 0xd2, 0xe8, 0x4b, 0x4a, 0x4f, 0x78, - 0xc1, 0x53, 0xc9, 0x76, 0xdb, 0x33, 0x70, 0xb6, 0xc4, 0x43, 0xe2, 0x1d, 0x23, 0x7a, 0x31, 0x6d, 0x64, 0xe6, 0x04, - 0xce, 0x6c, 0x77, 0xd9, 0xc6, 0xfc, 0xd8, 0x01, 0x0e, 0x16, 0x41, 0x48, 0xdc, 0x10, 0x86, 0x89, 0x1d, 0x95, 0x43, - 0x2d, 0x84, 0xeb, 0x5a, 0x78, 0x1d, 0xa7, 0x65, 0x0c, 0x2e, 0xd2, 0xda, 0x36, 0xf1, 0x1e, 0xba, 0xee, 0xf9, 0x31, - 0xb7, 0x3a, 0x46, 0x5b, 0x48, 0xbf, 0x1d, 0x9d, 0xde, 0x73, 0x18, 0x80, 0xa6, 0x07, 0xb3, 0xaa, 0x7d, 0x26, 0x71, - 0x73, 0xda, 0x09, 0x42, 0x22, 0x10, 0x45, 0xe9, 0x8c, 0x30, 0xfd, 0x3b, 0xcd, 0x65, 0x15, 0xad, 0x1e, 0xe4, 0x99, - 0x43, 0x9e, 0x85, 0xde, 0xf6, 0xa0, 0x55, 0x73, 0x37, 0x18, 0x27, 0x6e, 0xb7, 0x77, 0xfe, 0xdf, 0xb2, 0xae, 0xad, - 0xd6, 0x88, 0xc7, 0xed, 0xea, 0x07, 0x8d, 0xbd, 0xda, 0x53, 0x31, 0x60, 0x56, 0xd2, 0x3b, 0xa3, 0x4a, 0x5e, 0x64, - 0xbc, 0xc4, 0x93, 0x6a, 0xd5, 0xf0, 0xf1, 0xbe, 0xc9, 0x46, 0xe6, 0x81, 0x4c, 0x01, 0xf1, 0xfc, 0x26, 0x35, 0xea, - 0xe3, 0x14, 0x25, 0xe0, 0xef, 0x74, 0x7c, 0x23, 0xfa, 0xd1, 0xbe, 0xb8, 0xe4, 0xd5, 0xc9, 0x8d, 0x30, 0x2f, 0x5e, - 0x58, 0x9d, 0x3f, 0x7d, 0x53, 0xf8, 0xd0, 0xe1, 0xa8, 0xbd, 0x83, 0x22, 0x4b, 0x26, 0x8e, 0x26, 0x46, 0xd6, 0x26, - 0x66, 0x1f, 0x15, 0x5c, 0x4c, 0x54, 0xa1, 0x67, 0x9d, 0x3d, 0x61, 0x0a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x16, - 0x0c, 0xd4, 0x69, 0x4a, 0x88, 0x1e, 0x8a, 0x19, 0xc6, 0x2b, 0x06, 0x50, 0x98, 0x42, 0x81, 0x28, 0x3a, 0xfb, 0x70, - 0xa0, 0x09, 0xfd, 0xfe, 0x4d, 0xaa, 0x33, 0xd0, 0xb2, 0x9e, 0x4a, 0x10, 0xd5, 0x41, 0xb4, 0x55, 0x5e, 0x84, 0x3f, - 0x2e, 0x69, 0x99, 0xd1, 0xa5, 0xa0, 0xa9, 0xa0, 0x49, 0x46, 0x2f, 0xb8, 0x12, 0x15, 0x5f, 0x08, 0xa6, 0x68, 0xbb, - 0x21, 0xec, 0xff, 0x6a, 0xd0, 0xf5, 0x56, 0xac, 0x35, 0xb4, 0x3b, 0x41, 0x46, 0x68, 0xbe, 0xd0, 0x41, 0xc8, 0x50, - 0x39, 0x09, 0x5d, 0xab, 0x34, 0x5e, 0x81, 0x4b, 0xa6, 0xd9, 0x68, 0x19, 0x97, 0x61, 0x60, 0xbf, 0x0a, 0x2c, 0x26, - 0x07, 0x26, 0x9d, 0xae, 0xcf, 0x9f, 0xcb, 0xab, 0x95, 0x14, 0x5c, 0x54, 0x0a, 0xa2, 0xdf, 0xe0, 0xbe, 0x9b, 0xb8, - 0xea, 0xac, 0x59, 0x2b, 0x7d, 0xe8, 0x5b, 0x9f, 0xb5, 0x71, 0x5f, 0x18, 0x1c, 0x83, 0x9d, 0x8f, 0x88, 0x81, 0x34, - 0xa8, 0x74, 0x8b, 0x43, 0x13, 0xa0, 0x4b, 0x87, 0x14, 0xb2, 0x64, 0x2a, 0x53, 0x25, 0xa8, 0xf8, 0xc6, 0xef, 0xa5, - 0xac, 0x46, 0x7f, 0xad, 0x79, 0x71, 0x77, 0xca, 0x73, 0x8e, 0x63, 0x14, 0x24, 0xb1, 0xb8, 0x8e, 0xcb, 0x80, 0xf8, - 0x96, 0x57, 0xc1, 0x41, 0x6a, 0xc2, 0xc6, 0xec, 0x54, 0x8d, 0x5a, 0x2f, 0x89, 0xbe, 0x32, 0xca, 0x37, 0x06, 0x43, - 0x13, 0x51, 0x05, 0x7d, 0xaf, 0xd5, 0x3d, 0xad, 0x6e, 0x58, 0x40, 0xfc, 0xb9, 0xd2, 0x0b, 0xb5, 0x5e, 0x37, 0x63, - 0x6e, 0x98, 0x08, 0x41, 0xa3, 0x27, 0xf5, 0xa2, 0xf6, 0xdc, 0xd2, 0x54, 0x64, 0xdc, 0x68, 0x93, 0xf3, 0x4b, 0x90, - 0xf1, 0x39, 0x73, 0xa1, 0x49, 0x5d, 0x53, 0x05, 0x55, 0x18, 0x6d, 0x6e, 0x1b, 0xe9, 0xf4, 0x0e, 0xdc, 0xd9, 0x8c, - 0xd9, 0x91, 0x76, 0x69, 0xac, 0x69, 0xc1, 0xcb, 0x95, 0x14, 0x25, 0x84, 0x71, 0xee, 0x8d, 0xe9, 0x55, 0x9c, 0x89, - 0x2a, 0xce, 0xc4, 0x71, 0xb9, 0xe2, 0x49, 0xf5, 0x1e, 0x6e, 0x71, 0xca, 0xea, 0xa6, 0x2e, 0xe1, 0x4a, 0x97, 0xec, - 0x61, 0x30, 0x35, 0x15, 0xf7, 0xd8, 0x19, 0x5c, 0x54, 0x7f, 0x44, 0x4b, 0x89, 0xb1, 0x50, 0x75, 0xf1, 0xf1, 0x79, - 0x29, 0xf3, 0x75, 0x05, 0xda, 0xdd, 0x8b, 0x2a, 0x3a, 0x78, 0xba, 0xba, 0x9d, 0xaa, 0x1b, 0x4c, 0xf4, 0xf4, 0x60, - 0x75, 0xdb, 0xcb, 0xae, 0x56, 0xb2, 0xa8, 0x62, 0x51, 0x4d, 0x15, 0x22, 0x59, 0x12, 0xe7, 0x49, 0x38, 0x19, 0x8f, - 0xbf, 0xda, 0x1b, 0xee, 0x41, 0x06, 0x32, 0xfd, 0x34, 0x54, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x95, 0xea, 0x6e, - 0x17, 0x8d, 0x26, 0x35, 0xd6, 0x33, 0x4c, 0xf4, 0xcc, 0x8c, 0xf8, 0xed, 0x2a, 0x16, 0x29, 0xc4, 0xaf, 0xd3, 0xc5, - 0x1f, 0x3c, 0x1d, 0x37, 0xca, 0xb7, 0x9f, 0x3e, 0xab, 0xff, 0xa8, 0x4d, 0x58, 0x6b, 0xd3, 0xee, 0xe7, 0x7f, 0x1c, - 0xaa, 0xf9, 0x3e, 0x3a, 0xdc, 0xd7, 0x3f, 0xfe, 0xa8, 0xeb, 0xe9, 0x9b, 0x22, 0x9c, 0xff, 0x33, 0x54, 0xf3, 0x79, - 0x5c, 0x14, 0xf1, 0x5d, 0x0d, 0x91, 0x3c, 0x85, 0xf3, 0x26, 0xa1, 0xde, 0x36, 0xa0, 0x07, 0x64, 0x7a, 0x21, 0x18, - 0x7c, 0xf3, 0xbe, 0x0a, 0x03, 0x5e, 0xae, 0x86, 0x5c, 0x54, 0x59, 0x75, 0x37, 0xc4, 0x3c, 0x01, 0x7e, 0x6a, 0x78, - 0xb3, 0xe7, 0x85, 0x21, 0x36, 0x17, 0x05, 0xe7, 0x9f, 0x78, 0xa8, 0x8c, 0xa3, 0xc7, 0x68, 0x1c, 0x3d, 0xa6, 0x6a, - 0x30, 0x26, 0xdf, 0x50, 0xdd, 0x99, 0xc9, 0x37, 0x60, 0x82, 0x94, 0xb5, 0xbf, 0x51, 0xc6, 0x89, 0xd1, 0x98, 0x5e, - 0xbf, 0xca, 0xb3, 0x15, 0x30, 0xc1, 0x4b, 0xfd, 0xa3, 0x26, 0xf4, 0x3d, 0x6f, 0x67, 0x1f, 0x8d, 0x46, 0xcf, 0x0b, - 0x3a, 0x1a, 0x8d, 0x3e, 0x66, 0x35, 0xa1, 0x2b, 0xd1, 0xf1, 0xfe, 0x3d, 0xa7, 0xe7, 0x32, 0xbd, 0x8b, 0x82, 0x80, - 0x2e, 0xb3, 0x34, 0xe5, 0x42, 0x95, 0x75, 0x9a, 0xb6, 0xf3, 0xaa, 0x16, 0x22, 0xf0, 0x8f, 0x6e, 0x23, 0x42, 0x10, - 0x11, 0x7a, 0xb2, 0xd3, 0xb3, 0xd1, 0x68, 0x74, 0x9a, 0x9a, 0x6a, 0x1d, 0x43, 0xfe, 0x06, 0xcd, 0x07, 0x9c, 0x5d, - 0x3e, 0x58, 0xdf, 0x98, 0x68, 0x27, 0xfb, 0xff, 0x3d, 0x9c, 0xcd, 0xc7, 0xc3, 0x6f, 0x47, 0x8b, 0xc7, 0xfb, 0x34, - 0x08, 0x7c, 0xd0, 0xea, 0x50, 0x5b, 0x73, 0x4c, 0xcb, 0xc3, 0xf1, 0x94, 0x94, 0x03, 0xf6, 0xd4, 0xfa, 0xd2, 0x7c, - 0xf5, 0x14, 0x90, 0x48, 0x51, 0x84, 0x1a, 0x38, 0xe9, 0x1f, 0x5e, 0x45, 0x5e, 0x0b, 0xc0, 0x47, 0xb3, 0x91, 0x0c, - 0x8c, 0x16, 0x70, 0x1c, 0x41, 0x79, 0xb5, 0x35, 0x8d, 0xe8, 0x31, 0x96, 0x99, 0xa8, 0xa0, 0xe3, 0x69, 0x79, 0x93, - 0x55, 0xc9, 0x12, 0x03, 0x1b, 0xc5, 0x25, 0x0f, 0xbe, 0x0a, 0xa2, 0x92, 0x1d, 0x3c, 0x9b, 0x2a, 0x78, 0x5f, 0x4c, - 0x4a, 0xf9, 0x25, 0x24, 0x7e, 0x3b, 0x46, 0x08, 0x54, 0xa2, 0x3d, 0x16, 0xb1, 0xc6, 0x57, 0xb9, 0x8c, 0xc1, 0x83, - 0xb3, 0xd4, 0x3c, 0x8b, 0x3d, 0x09, 0xac, 0xfd, 0x45, 0xab, 0x39, 0x12, 0x9a, 0x13, 0x4a, 0x26, 0xf7, 0x4b, 0x2a, - 0xbf, 0x9a, 0xa0, 0x57, 0x10, 0xb8, 0x55, 0x47, 0x70, 0xdc, 0x59, 0xcb, 0x06, 0xbd, 0x7c, 0x52, 0xb6, 0x3f, 0xff, - 0xdf, 0x25, 0x5d, 0x0c, 0xf6, 0xdd, 0xd0, 0x9c, 0x68, 0xf7, 0xd5, 0x0a, 0x19, 0xa5, 0x2a, 0x7c, 0x9e, 0x12, 0x6b, - 0x7c, 0xca, 0xd9, 0xd1, 0xc6, 0x74, 0x67, 0x54, 0x15, 0xd9, 0x55, 0x48, 0x74, 0xaf, 0x1c, 0x28, 0x66, 0x10, 0x65, - 0x23, 0x5c, 0x3f, 0x60, 0x2d, 0xe2, 0x75, 0xf2, 0x9a, 0x17, 0x55, 0x96, 0xa8, 0xf7, 0xd7, 0x8d, 0xf7, 0x40, 0x0d, - 0x54, 0x83, 0xde, 0x15, 0x0c, 0xe6, 0xf9, 0xa4, 0x00, 0xd0, 0xce, 0x92, 0x17, 0xd7, 0xdc, 0xa7, 0x1b, 0x41, 0x50, - 0xbb, 0x66, 0x5e, 0x36, 0x82, 0x4d, 0xc0, 0x57, 0xef, 0x0a, 0xc0, 0xdc, 0x08, 0x41, 0x6a, 0x0a, 0xa1, 0x70, 0xe0, - 0x02, 0x5f, 0x55, 0x45, 0x76, 0xbe, 0xae, 0x38, 0x06, 0xfb, 0xf0, 0xe2, 0x26, 0x2a, 0x27, 0x3c, 0x1e, 0x06, 0xf8, - 0x23, 0xa0, 0x2a, 0xe0, 0x86, 0xf1, 0xb0, 0x83, 0x17, 0xea, 0x97, 0x7b, 0xa3, 0xf6, 0x08, 0x7b, 0x93, 0x86, 0x10, - 0x5c, 0x07, 0x1f, 0x02, 0x58, 0x52, 0x84, 0x9e, 0xe0, 0xa9, 0x1a, 0x06, 0x17, 0x79, 0xb6, 0xd2, 0x49, 0xd5, 0xa8, - 0xa3, 0xf9, 0x50, 0x6a, 0x47, 0x72, 0x40, 0xbd, 0xf4, 0x18, 0xd3, 0x0b, 0x95, 0xae, 0x8a, 0x72, 0x46, 0x28, 0xef, - 0xf4, 0xc4, 0xb8, 0x30, 0x7d, 0x1c, 0x22, 0xbf, 0xbc, 0x2b, 0x54, 0xe8, 0x17, 0xbe, 0x00, 0xf0, 0x2b, 0xb8, 0xdd, - 0xef, 0xc6, 0x77, 0x51, 0xd9, 0xcf, 0x38, 0xdb, 0xff, 0xef, 0x79, 0x3c, 0xfc, 0x34, 0x1e, 0x7e, 0xbb, 0x18, 0x84, - 0x43, 0xfb, 0x93, 0x3c, 0x7e, 0xb4, 0x4f, 0x5f, 0x71, 0xcb, 0x95, 0xc0, 0xc2, 0x6f, 0x04, 0xb7, 0x51, 0x2b, 0x21, - 0x88, 0x02, 0xbc, 0x51, 0xb8, 0xd5, 0x38, 0x01, 0x80, 0xbf, 0xe0, 0xbf, 0x02, 0x34, 0x12, 0x72, 0x17, 0x0d, 0xd0, - 0x0f, 0xa8, 0xdf, 0x47, 0x4f, 0x1a, 0x06, 0x72, 0x20, 0x9e, 0x50, 0x31, 0x50, 0x88, 0x2e, 0x63, 0xa2, 0x60, 0x7f, - 0x6d, 0xf6, 0xed, 0xb6, 0xd7, 0x96, 0xfc, 0xe0, 0x97, 0x7e, 0xa6, 0x89, 0x99, 0x77, 0xb8, 0xa1, 0xac, 0xe4, 0x2a, - 0x44, 0x6c, 0x3c, 0xfd, 0x2b, 0x67, 0x10, 0x6b, 0xf2, 0x3a, 0x03, 0x1f, 0x06, 0xfb, 0xc5, 0x78, 0x06, 0x6c, 0x03, - 0xdc, 0x71, 0x0a, 0x7e, 0x91, 0x81, 0x5b, 0xb3, 0x88, 0xf1, 0x82, 0x6d, 0x97, 0x44, 0xbf, 0xdf, 0xcb, 0xb3, 0x30, - 0xd7, 0x38, 0xcb, 0x79, 0x6d, 0xc4, 0xee, 0xa8, 0x13, 0x06, 0x71, 0xbb, 0x1e, 0x82, 0xa1, 0x1a, 0x82, 0xa2, 0xa3, - 0x2d, 0xae, 0x5e, 0x5b, 0x4f, 0x61, 0x7a, 0xab, 0xea, 0x2b, 0x46, 0x7f, 0xca, 0x4c, 0x60, 0x21, 0xed, 0x9a, 0x63, - 0x5d, 0x73, 0x8c, 0xb4, 0xa7, 0xdf, 0x17, 0x0d, 0xf2, 0xd3, 0x59, 0x78, 0x10, 0xa8, 0x52, 0xe5, 0x4e, 0x59, 0x94, - 0xdb, 0xd2, 0xbc, 0x31, 0xac, 0x69, 0x9e, 0xd9, 0xb8, 0x2e, 0xb3, 0x5e, 0x2f, 0x0c, 0xd1, 0xa1, 0x11, 0x4b, 0xc5, - 0xda, 0x20, 0xbc, 0x8f, 0x49, 0x18, 0x5d, 0x81, 0xac, 0x2e, 0x3c, 0xe3, 0x04, 0xf9, 0x32, 0x30, 0x59, 0x53, 0xd5, - 0x7a, 0x39, 0xe1, 0xb1, 0x91, 0x2f, 0x1b, 0x41, 0x83, 0xbc, 0xa4, 0xa8, 0x37, 0x71, 0x3b, 0xf6, 0x51, 0x0b, 0xa9, - 0x71, 0x53, 0x4f, 0x7b, 0x9a, 0x54, 0xf4, 0x58, 0xaf, 0x52, 0xbf, 0xc0, 0xb2, 0xc0, 0x92, 0x0f, 0x42, 0x7b, 0x9a, - 0x56, 0x60, 0x86, 0x6b, 0x9b, 0xc1, 0xd0, 0x0f, 0x87, 0xb6, 0x08, 0x9d, 0x51, 0xdb, 0x12, 0xc2, 0xb6, 0x0d, 0xc2, - 0xca, 0x7b, 0x22, 0x5f, 0x3d, 0xf5, 0x18, 0xe1, 0x90, 0x9b, 0xcd, 0x2c, 0x1a, 0x18, 0xe6, 0x57, 0xb2, 0xd9, 0x3c, - 0xdd, 0x5c, 0x2f, 0x2a, 0xa6, 0x80, 0xed, 0xb6, 0x12, 0x04, 0xff, 0x7e, 0xcc, 0x66, 0xf8, 0x37, 0xeb, 0xf7, 0x7b, - 0x21, 0xfe, 0xe2, 0x18, 0xbc, 0x67, 0x2e, 0x16, 0xec, 0x23, 0xc8, 0x54, 0x48, 0x84, 0xa9, 0xca, 0xf8, 0x8d, 0x55, - 0x60, 0x01, 0x67, 0x3e, 0x50, 0xb9, 0x30, 0x93, 0xbd, 0xbc, 0xb8, 0x86, 0x1c, 0xb7, 0xc6, 0x29, 0x1b, 0x65, 0x89, - 0x72, 0x5d, 0xc8, 0x46, 0x71, 0x9e, 0xc5, 0x25, 0x2f, 0xb7, 0x5b, 0x7d, 0x38, 0x26, 0x05, 0x07, 0xf6, 0x54, 0x51, - 0xa9, 0x92, 0x75, 0xa4, 0xba, 0xf1, 0x97, 0x61, 0x81, 0xfb, 0x94, 0xcf, 0x0b, 0x43, 0x23, 0xf6, 0xe0, 0xf2, 0xce, - 0xd4, 0xad, 0xb4, 0x17, 0x16, 0xd0, 0xbc, 0x92, 0x90, 0x0d, 0xa6, 0x7a, 0x16, 0xad, 0x31, 0x13, 0xf3, 0x62, 0x01, - 0x61, 0x64, 0x8a, 0x05, 0xd8, 0x4c, 0x71, 0x01, 0x5e, 0x24, 0x31, 0xc0, 0xc4, 0xc5, 0x64, 0x0a, 0xf1, 0xcc, 0x55, - 0x39, 0xf1, 0xc2, 0xdc, 0x2f, 0x13, 0x87, 0x94, 0x01, 0xaf, 0x6a, 0x83, 0x26, 0x66, 0x1b, 0x8e, 0x3a, 0x41, 0x4e, - 0x4c, 0x7e, 0x3f, 0x55, 0x10, 0xe2, 0x4e, 0x1c, 0x09, 0x97, 0x15, 0xdb, 0x85, 0x97, 0x1d, 0x88, 0x31, 0x6a, 0x70, - 0xca, 0xcf, 0x0c, 0x8e, 0xc6, 0xe0, 0xdc, 0x78, 0x27, 0x48, 0x11, 0xc6, 0x64, 0x23, 0xd9, 0x95, 0x0c, 0xc5, 0x3c, - 0x5e, 0x80, 0xb2, 0x2e, 0x5e, 0x80, 0x65, 0x8d, 0x31, 0xc0, 0x04, 0x79, 0x15, 0xf7, 0x42, 0x3f, 0x51, 0x5c, 0x21, - 0xd2, 0xb3, 0x72, 0x7d, 0x54, 0xb4, 0x43, 0x5f, 0xe0, 0xf5, 0x5e, 0x99, 0xe3, 0x66, 0x3d, 0x16, 0x48, 0x6c, 0x08, - 0x18, 0x1b, 0xe9, 0x34, 0xd5, 0x5a, 0xf7, 0xc6, 0xcc, 0x03, 0x9f, 0x66, 0x23, 0x21, 0xab, 0xb3, 0x0b, 0x10, 0xa1, - 0xf8, 0x68, 0xf0, 0xc8, 0x2f, 0xe2, 0xce, 0x32, 0x6f, 0x6d, 0x8b, 0x4a, 0x76, 0xb4, 0x01, 0x90, 0x3e, 0x1d, 0x2d, - 0x4a, 0xc9, 0x29, 0x4a, 0x52, 0xbb, 0x4d, 0x01, 0x2b, 0xc9, 0x5f, 0xc0, 0x10, 0x6c, 0x6c, 0x4f, 0x38, 0x9d, 0x22, - 0xc4, 0x27, 0x9a, 0x22, 0xb2, 0x62, 0x58, 0x52, 0x1c, 0xdb, 0x12, 0x51, 0x3f, 0x6d, 0x59, 0x76, 0x30, 0x4c, 0x54, - 0xdc, 0x17, 0xa9, 0x47, 0x89, 0x82, 0x80, 0xea, 0x21, 0x07, 0x89, 0xad, 0x6d, 0x20, 0x3c, 0x20, 0x8f, 0xe8, 0x8d, - 0xf5, 0xf7, 0x59, 0xe7, 0xd9, 0x85, 0xe6, 0xa8, 0x5c, 0xef, 0x0a, 0x33, 0x46, 0x78, 0x92, 0x19, 0x98, 0x7c, 0xef, - 0x3c, 0x33, 0x6a, 0x8a, 0x9e, 0x87, 0x4f, 0x76, 0x8c, 0x11, 0xe9, 0xee, 0x19, 0x74, 0x13, 0xbc, 0xaa, 0xc3, 0x46, - 0xbb, 0x52, 0x10, 0x12, 0xa6, 0x16, 0x4d, 0xcc, 0x7a, 0xd6, 0x80, 0x7a, 0xbb, 0xed, 0xe9, 0xb9, 0xba, 0x7f, 0xee, - 0xb6, 0xdb, 0x1e, 0x76, 0xeb, 0x45, 0xda, 0x6d, 0x05, 0x5e, 0xa9, 0x0f, 0xda, 0xe3, 0xcf, 0xdd, 0xf8, 0x73, 0x83, - 0xe4, 0x51, 0x3a, 0x9a, 0x69, 0xeb, 0x83, 0x70, 0xb8, 0xe9, 0x5d, 0xa3, 0x49, 0xdf, 0x67, 0xa1, 0xa4, 0x2b, 0xd1, - 0xa8, 0xae, 0x76, 0x26, 0x95, 0x0f, 0xae, 0xff, 0x87, 0x57, 0x01, 0x1e, 0x71, 0x6a, 0x67, 0xdf, 0xdb, 0xa0, 0xa2, - 0xd1, 0x16, 0x8e, 0x14, 0xa1, 0x07, 0x24, 0xe1, 0xbe, 0x96, 0xb5, 0xb8, 0xcd, 0xd3, 0xec, 0x61, 0xfa, 0xf4, 0x3a, - 0xf5, 0xad, 0xee, 0xdd, 0x32, 0xcb, 0xcc, 0x81, 0x57, 0x51, 0x1c, 0xd0, 0xa8, 0x8b, 0xf6, 0x5d, 0x65, 0x65, 0x09, - 0x5e, 0x1e, 0x70, 0x7d, 0x3e, 0xe5, 0x3e, 0xdc, 0xdc, 0x65, 0xd5, 0xdc, 0xa4, 0xa7, 0xd9, 0x3c, 0x5b, 0x6c, 0xb7, - 0x21, 0xfe, 0xed, 0x6a, 0x91, 0xa3, 0xc9, 0x73, 0xd0, 0xe1, 0x61, 0xe4, 0x1e, 0xa6, 0x1b, 0xe7, 0x6d, 0xfe, 0x4f, - 0xa2, 0xe1, 0x24, 0x70, 0x0c, 0xf4, 0x62, 0xf6, 0x08, 0x64, 0x30, 0xc6, 0xa9, 0x5f, 0xcc, 0xf4, 0x9a, 0x81, 0xe8, - 0x5b, 0x22, 0x02, 0x1c, 0x5d, 0x6c, 0x24, 0x1a, 0x59, 0x70, 0x52, 0x13, 0xb0, 0xd8, 0xb4, 0xe5, 0x7d, 0xb0, 0xb4, - 0xad, 0x2a, 0xee, 0xbc, 0x25, 0xcd, 0x71, 0x1d, 0x38, 0xdb, 0x7e, 0x33, 0xc4, 0xa6, 0xec, 0x6a, 0x81, 0xdc, 0x2f, - 0xaf, 0x69, 0x6f, 0x5c, 0x27, 0x30, 0x6b, 0x9b, 0xda, 0x32, 0x7e, 0xb6, 0xf4, 0x9f, 0xf5, 0xe0, 0x2a, 0xe3, 0xa7, - 0xb9, 0xb1, 0x4a, 0xb0, 0xfb, 0xc6, 0xf3, 0x1d, 0x80, 0x70, 0x6c, 0x3e, 0x3d, 0x3e, 0xcd, 0x3c, 0x7a, 0x0c, 0x44, - 0xc7, 0x7c, 0x54, 0xba, 0x8f, 0xec, 0xee, 0xf5, 0x03, 0xe0, 0xcd, 0xab, 0x76, 0x41, 0xf3, 0x72, 0x01, 0x81, 0x44, - 0xbd, 0xf2, 0x0a, 0xcb, 0x67, 0xc6, 0xec, 0x12, 0xc8, 0x50, 0x41, 0xc0, 0x26, 0xa9, 0xeb, 0x5c, 0x88, 0x55, 0x87, - 0x95, 0xf9, 0x48, 0xc2, 0x8e, 0x42, 0x34, 0xe7, 0x0c, 0x66, 0xc1, 0x7f, 0x05, 0x83, 0x72, 0x10, 0x44, 0x41, 0x14, - 0x04, 0x64, 0x50, 0xc0, 0x2f, 0xc4, 0x19, 0x23, 0x18, 0xa3, 0x04, 0x3a, 0xfc, 0x8e, 0x33, 0x9f, 0x11, 0x79, 0xd9, - 0x08, 0x63, 0xe9, 0x06, 0xe0, 0x5c, 0xca, 0x9c, 0xc7, 0xe8, 0x63, 0xf1, 0x8e, 0xb3, 0x8c, 0xd0, 0x77, 0xde, 0xa9, - 0xfc, 0x88, 0x37, 0x82, 0xdb, 0xed, 0x0e, 0xdb, 0x2b, 0x1e, 0x66, 0xb4, 0x37, 0xa6, 0xef, 0x38, 0x89, 0xb2, 0x86, - 0xf3, 0x30, 0x87, 0x9e, 0x55, 0x96, 0xb5, 0xa2, 0x86, 0xdc, 0xa0, 0x58, 0x17, 0x59, 0x26, 0x27, 0xc3, 0x55, 0x73, - 0x2a, 0x70, 0xdd, 0xd9, 0xf5, 0x02, 0x92, 0x32, 0xa1, 0x59, 0x3a, 0x1b, 0xbe, 0xda, 0xb6, 0xec, 0x45, 0xeb, 0x14, - 0xf2, 0x1a, 0xa2, 0xa2, 0x1f, 0x3a, 0x02, 0x6a, 0x68, 0xc5, 0x65, 0x05, 0x2e, 0xbb, 0xa6, 0x3d, 0xdc, 0xb4, 0xc7, - 0x34, 0xe3, 0x03, 0xc4, 0x88, 0xe3, 0xd8, 0x32, 0xb0, 0x9b, 0x70, 0x78, 0x36, 0xce, 0xf7, 0x65, 0x97, 0xde, 0xba, - 0x5a, 0x3c, 0xc2, 0xda, 0xf3, 0x56, 0x48, 0x08, 0x90, 0x96, 0xa6, 0xd2, 0xed, 0x36, 0x08, 0x60, 0x80, 0xfb, 0xfd, - 0x1e, 0x70, 0xad, 0x86, 0x9d, 0x34, 0xb7, 0x66, 0x4b, 0xec, 0x15, 0x85, 0xc7, 0x40, 0x94, 0x9a, 0xff, 0x0c, 0x02, - 0x8a, 0xe7, 0x6e, 0x08, 0xf6, 0x95, 0xec, 0x68, 0x53, 0xf4, 0xfb, 0x2f, 0x0a, 0x7c, 0x40, 0x39, 0x28, 0x88, 0x75, - 0x75, 0xdc, 0x0a, 0xc3, 0x3e, 0xa9, 0x0f, 0x71, 0x2c, 0xf2, 0x2c, 0x74, 0x84, 0xa5, 0x32, 0x84, 0x85, 0x2b, 0x46, - 0x3a, 0x88, 0x83, 0x9a, 0x74, 0x0e, 0x56, 0xe5, 0x82, 0x0d, 0xf7, 0x7a, 0x9f, 0x00, 0x16, 0x3c, 0xf3, 0x86, 0xe5, - 0xbd, 0x07, 0x00, 0xd6, 0xeb, 0xe1, 0x42, 0x71, 0x2f, 0x5f, 0x35, 0xd0, 0x27, 0xf1, 0xa5, 0x65, 0xd7, 0x67, 0x5a, - 0x56, 0x32, 0x1a, 0x8d, 0xaa, 0x5a, 0x49, 0x3e, 0x1c, 0x79, 0x69, 0xa1, 0x56, 0xca, 0x38, 0xe5, 0x29, 0x58, 0x7a, - 0x1b, 0x4a, 0x37, 0x5f, 0xd0, 0x15, 0x17, 0xa9, 0xfa, 0xe9, 0xa1, 0x4d, 0x36, 0x88, 0x6b, 0xd6, 0xd4, 0x59, 0xd8, - 0xe1, 0x87, 0x80, 0x8f, 0xf6, 0x61, 0xe6, 0xd2, 0x35, 0x2c, 0x2d, 0x88, 0x23, 0xe3, 0x82, 0x87, 0x2e, 0x0f, 0x60, - 0xfd, 0x99, 0x43, 0x12, 0x3f, 0x85, 0x9f, 0x33, 0x93, 0xd6, 0xf1, 0x19, 0xce, 0x66, 0x54, 0xaa, 0x1b, 0x41, 0xfb, - 0x35, 0x24, 0x12, 0x83, 0x6c, 0xdc, 0x60, 0x28, 0x5a, 0x77, 0x1b, 0xb8, 0xf2, 0x5b, 0x7a, 0xe7, 0xd3, 0x20, 0xc0, - 0xb6, 0xc6, 0x62, 0x00, 0x30, 0x14, 0x7f, 0xa0, 0xaa, 0xc6, 0x5c, 0x51, 0x4c, 0xc3, 0x54, 0xa2, 0xbd, 0xe3, 0xb8, - 0x8e, 0x1a, 0x57, 0x59, 0xc1, 0x4a, 0x6b, 0xcb, 0xeb, 0xde, 0xd2, 0xc2, 0x96, 0x80, 0x6a, 0x30, 0xdc, 0x09, 0xe0, - 0x33, 0x22, 0xd5, 0x81, 0x20, 0xbb, 0x0f, 0x0e, 0x9a, 0xb3, 0x04, 0xcf, 0xc3, 0x10, 0xfe, 0xc0, 0xc2, 0x81, 0x65, - 0xa9, 0xfa, 0xb9, 0x9c, 0xc6, 0x70, 0xee, 0xe6, 0x6a, 0x87, 0xcf, 0x96, 0xa0, 0xc8, 0x53, 0x73, 0x6a, 0x2e, 0x5f, - 0x79, 0x63, 0xbf, 0xc7, 0x04, 0xf3, 0x98, 0xd9, 0x86, 0xdf, 0x7a, 0xba, 0xad, 0x2f, 0xac, 0x1b, 0x38, 0x69, 0x2f, - 0x9c, 0xf6, 0x62, 0xbb, 0x34, 0x10, 0x77, 0x75, 0x43, 0x88, 0xf0, 0x5a, 0x13, 0x8b, 0xac, 0x21, 0xd3, 0xb1, 0xd8, - 0x18, 0xaa, 0x4d, 0xc5, 0x73, 0xad, 0x10, 0x2f, 0xa7, 0xea, 0xc2, 0xd4, 0x4a, 0x65, 0xc2, 0x20, 0xcc, 0x94, 0xb0, - 0xa8, 0x32, 0xf0, 0xd9, 0xaf, 0x90, 0xe2, 0xda, 0x7a, 0xde, 0xe2, 0xf2, 0xcd, 0x4c, 0x9b, 0xed, 0xa7, 0xaf, 0xf2, - 0xf8, 0x72, 0xbb, 0x0d, 0xbb, 0x5f, 0x80, 0xf9, 0x65, 0xa9, 0x34, 0x6a, 0xe0, 0xf4, 0x10, 0xa2, 0x9f, 0xf3, 0x3d, - 0x39, 0x27, 0x8e, 0x93, 0x6b, 0x37, 0x6f, 0xb6, 0x93, 0x62, 0x04, 0x16, 0x70, 0xe2, 0x22, 0x1d, 0x68, 0xa9, 0xe0, - 0xb4, 0x65, 0xbc, 0xb7, 0xe9, 0x1d, 0xa5, 0xc2, 0xab, 0x85, 0x26, 0x21, 0x95, 0xbb, 0x97, 0xd8, 0x51, 0x03, 0xce, - 0x49, 0xdd, 0x41, 0xc0, 0x49, 0x4d, 0x37, 0xd6, 0x2a, 0x4e, 0x4d, 0x82, 0xf7, 0x4a, 0x0f, 0x5d, 0xa2, 0x9d, 0xb8, - 0xdd, 0xb6, 0x2a, 0x5b, 0xa8, 0x8f, 0x7b, 0x39, 0x4b, 0xd4, 0xf1, 0x80, 0x42, 0x17, 0x75, 0x34, 0xe4, 0x0b, 0x52, - 0xe8, 0x95, 0xa3, 0x55, 0xab, 0xbb, 0x92, 0x81, 0x52, 0xad, 0x82, 0xbc, 0x26, 0xd6, 0x5d, 0x2b, 0x6b, 0x2c, 0xae, - 0x9c, 0x90, 0xc2, 0x26, 0x7c, 0x69, 0x29, 0x16, 0x56, 0xb0, 0x37, 0xa6, 0xbe, 0x70, 0x89, 0xd0, 0x76, 0xb7, 0x21, - 0x26, 0x19, 0xac, 0x9b, 0xed, 0xf6, 0x75, 0x11, 0xce, 0xb3, 0x05, 0x95, 0xa3, 0x2c, 0x45, 0x08, 0x31, 0xe3, 0xa1, - 0x6b, 0xbb, 0x60, 0x26, 0x86, 0xba, 0xf6, 0x78, 0x49, 0xa6, 0x58, 0x9b, 0x24, 0x47, 0xf1, 0xb9, 0x2c, 0xd4, 0x5a, - 0x23, 0x04, 0x0f, 0xf7, 0x3f, 0x53, 0x88, 0xe1, 0x66, 0xd6, 0xdd, 0x6f, 0x3b, 0x37, 0xc4, 0x3f, 0x21, 0x90, 0x40, - 0xc9, 0x5e, 0x17, 0xa3, 0xf3, 0x4c, 0xa4, 0xb8, 0x53, 0x55, 0x54, 0x5c, 0xb5, 0x0e, 0x9a, 0x2d, 0xb7, 0xf7, 0x62, - 0x4b, 0x14, 0x20, 0xae, 0xb1, 0xd0, 0x8c, 0x67, 0xe5, 0x2c, 0x45, 0x32, 0x8a, 0x0d, 0x89, 0x4a, 0x2f, 0x2a, 0xba, - 0xcf, 0xd3, 0x98, 0x1e, 0xba, 0x35, 0x08, 0xae, 0x9a, 0x3b, 0x1b, 0x69, 0xbe, 0x20, 0x44, 0x4d, 0x80, 0x84, 0x8d, - 0x6a, 0x4e, 0xad, 0x4b, 0xf1, 0x30, 0xab, 0x7c, 0xa6, 0x0f, 0xe2, 0x4b, 0x01, 0x3c, 0xac, 0xb7, 0xbd, 0xaf, 0x84, - 0xc7, 0xda, 0xe0, 0xdb, 0xed, 0xf6, 0x52, 0xcc, 0x83, 0xc0, 0x63, 0x34, 0xbf, 0x53, 0x12, 0xf3, 0xde, 0x98, 0xc2, - 0x8a, 0xf7, 0x5d, 0xda, 0xba, 0x49, 0xad, 0xb5, 0x40, 0xdd, 0xe1, 0xfa, 0x80, 0xe7, 0x29, 0x71, 0xb4, 0xa3, 0x72, - 0x2a, 0xad, 0xae, 0x1c, 0xbb, 0x22, 0x30, 0x30, 0xf4, 0x0f, 0x29, 0xdb, 0x80, 0x39, 0x1e, 0x58, 0xdb, 0xa0, 0x9f, - 0x92, 0xd2, 0xc2, 0x8c, 0xd1, 0x98, 0x45, 0xae, 0xab, 0xe8, 0x80, 0xeb, 0xe8, 0xed, 0x3c, 0xfa, 0xdb, 0xb3, 0x31, - 0x2d, 0x62, 0x91, 0xca, 0x2b, 0x50, 0x41, 0x80, 0x32, 0x04, 0x0d, 0xff, 0x35, 0x35, 0x00, 0x0d, 0x82, 0x1b, 0x80, - 0x7f, 0x74, 0x3a, 0x0d, 0xda, 0x9a, 0x7c, 0x4c, 0x52, 0x55, 0xe4, 0xac, 0x0d, 0x65, 0xa6, 0x92, 0x43, 0xf2, 0xb8, - 0x04, 0x3c, 0x47, 0x6c, 0x96, 0xb2, 0xb9, 0x50, 0x9b, 0x4d, 0xbd, 0x56, 0xec, 0xc8, 0x6d, 0xa3, 0x68, 0xb3, 0x16, - 0xb5, 0x9d, 0xc4, 0x7c, 0x31, 0xbd, 0xb5, 0xc2, 0xc0, 0xa9, 0x69, 0xcd, 0xcd, 0x0e, 0x74, 0x9a, 0xad, 0xcf, 0xe4, - 0x26, 0x40, 0x1c, 0x60, 0xb8, 0x6e, 0xe7, 0x37, 0x0b, 0x42, 0x6f, 0xd9, 0xad, 0x15, 0xab, 0xde, 0x58, 0xb9, 0x88, - 0x49, 0xbb, 0x19, 0x4c, 0xe0, 0x32, 0xce, 0x0a, 0xfb, 0x42, 0xab, 0x1b, 0x8a, 0x8e, 0xb6, 0x49, 0xfb, 0x79, 0x47, - 0xbb, 0xe1, 0x82, 0x6f, 0xc5, 0x3a, 0xce, 0x0d, 0x69, 0xaa, 0xd0, 0xa3, 0x03, 0xbd, 0x1d, 0x02, 0x9a, 0xb3, 0x31, - 0x5d, 0xd2, 0x14, 0x2f, 0xd0, 0x74, 0x0d, 0x66, 0x29, 0x17, 0xd0, 0xd7, 0x6e, 0x9f, 0xe4, 0x0b, 0xd5, 0x13, 0xe1, - 0x2d, 0x51, 0xf0, 0xe5, 0x48, 0xc1, 0x2b, 0x2b, 0xe7, 0xb1, 0x99, 0x43, 0xc0, 0x63, 0x51, 0x25, 0x7a, 0x27, 0xc5, - 0x25, 0x28, 0x53, 0xe1, 0x08, 0x34, 0x55, 0x23, 0x96, 0x70, 0x80, 0xdb, 0x8b, 0xa7, 0x01, 0xa1, 0x20, 0xd5, 0x5d, - 0xdb, 0x15, 0x79, 0xcb, 0x8e, 0x36, 0xb7, 0x60, 0x16, 0x5b, 0xad, 0xcb, 0xd6, 0x57, 0x36, 0xd9, 0x7d, 0x5c, 0x13, - 0x6c, 0xbb, 0xb7, 0x41, 0xc2, 0x5b, 0x7a, 0x43, 0x36, 0x37, 0xfd, 0x7e, 0x08, 0xfd, 0x21, 0x54, 0x77, 0xe8, 0xb6, - 0xb3, 0x43, 0xb7, 0x3e, 0xf3, 0x6b, 0xf5, 0x7c, 0xca, 0x1b, 0xe2, 0x03, 0x9a, 0x68, 0xd1, 0x55, 0x7c, 0x07, 0x9b, - 0x3a, 0xaa, 0xa8, 0xaa, 0x3c, 0x4a, 0x28, 0xa8, 0x80, 0x33, 0x5e, 0x9e, 0x72, 0x8c, 0x6d, 0xaa, 0x9f, 0xde, 0x69, - 0x5e, 0x6d, 0x6d, 0xd6, 0x66, 0xb9, 0x3e, 0x07, 0x8b, 0x80, 0x73, 0x1e, 0x5d, 0x69, 0x5a, 0x72, 0xe9, 0x31, 0xf5, - 0x67, 0x38, 0x2a, 0xc1, 0x45, 0x9c, 0xe5, 0x3c, 0x0d, 0xe8, 0x45, 0xb3, 0xff, 0xa1, 0xb6, 0x95, 0x5a, 0x36, 0xce, - 0xdc, 0xeb, 0x90, 0x6c, 0xfe, 0xc7, 0x06, 0xea, 0x4d, 0x88, 0x11, 0x51, 0xcd, 0x82, 0x3e, 0x61, 0x10, 0x1b, 0x33, - 0x28, 0xd7, 0x49, 0xc2, 0xcb, 0x32, 0x30, 0x4a, 0xad, 0x35, 0x5b, 0x9b, 0xf3, 0xec, 0x11, 0x3b, 0x7a, 0xd4, 0x63, - 0xec, 0x96, 0xd0, 0x44, 0xeb, 0x84, 0x4c, 0x8d, 0x91, 0xa7, 0x05, 0xd2, 0x1d, 0x8a, 0xb2, 0x8b, 0xf0, 0x04, 0x85, - 0x2c, 0xed, 0x7d, 0x6e, 0x4e, 0x64, 0xf5, 0x8d, 0x36, 0xba, 0x88, 0x54, 0x22, 0xc8, 0xc6, 0x6f, 0x10, 0xb0, 0x17, - 0x9a, 0x1d, 0x90, 0xcd, 0x92, 0x9d, 0xd2, 0x33, 0x6b, 0x02, 0x03, 0xaf, 0x4f, 0x54, 0xa2, 0x19, 0x65, 0x45, 0x74, - 0x95, 0x91, 0xcb, 0x5d, 0x48, 0xa2, 0xb3, 0x90, 0xf8, 0xb9, 0x61, 0x69, 0x5d, 0x87, 0x28, 0x66, 0x36, 0x1b, 0x5e, - 0x75, 0xf7, 0x51, 0x63, 0x5b, 0x19, 0x9f, 0xea, 0x5b, 0x9b, 0x46, 0xa6, 0xd0, 0xd7, 0xe1, 0xa4, 0xdf, 0x87, 0xbf, - 0x9a, 0x7e, 0xe0, 0x2d, 0x05, 0x7f, 0xb1, 0x47, 0xa4, 0x4e, 0x58, 0x00, 0x70, 0x84, 0x39, 0xaf, 0x9a, 0x13, 0xf8, - 0x88, 0x1d, 0x6d, 0x1e, 0x85, 0xa7, 0x8d, 0x99, 0xbb, 0x0b, 0xf1, 0x52, 0x95, 0xf4, 0xbc, 0x79, 0x32, 0x03, 0xb1, - 0x0a, 0xcd, 0x7e, 0xbd, 0x65, 0x56, 0x9f, 0x00, 0x44, 0xea, 0xd6, 0x3a, 0x94, 0xe2, 0xc7, 0xa6, 0xcb, 0x64, 0x93, - 0xb2, 0x36, 0x13, 0xa5, 0x54, 0x24, 0xcd, 0x45, 0x00, 0xfd, 0x86, 0xe1, 0xa8, 0x01, 0xde, 0x5b, 0x8f, 0xbd, 0x19, - 0x1a, 0x6f, 0x4c, 0x0d, 0x3d, 0xdb, 0xe8, 0xe5, 0xed, 0x28, 0x84, 0x19, 0x8b, 0xe8, 0xd6, 0x1d, 0x8b, 0xe1, 0x29, - 0x3d, 0x81, 0x0a, 0xdf, 0x84, 0x18, 0x4d, 0x97, 0xd4, 0xf5, 0x74, 0xad, 0xb6, 0xd2, 0x0d, 0xa1, 0x39, 0x46, 0xf1, - 0xf1, 0xda, 0x76, 0x47, 0x8d, 0xd0, 0x9e, 0x50, 0x1e, 0xde, 0xd2, 0x8a, 0xde, 0x58, 0x16, 0xc1, 0xc9, 0x8f, 0xbd, - 0xfc, 0x84, 0x9e, 0x7b, 0x02, 0x93, 0xa2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x3d, 0xb5, 0x52, 0x0e, 0x4f, - 0xe1, 0x4b, 0x36, 0x20, 0x57, 0xd0, 0x8b, 0x35, 0x66, 0x47, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x37, 0x29, 0x65, - 0x88, 0xd6, 0x77, 0x0e, 0xe2, 0xe9, 0x1f, 0xa0, 0xe9, 0x83, 0xb4, 0x30, 0xa5, 0x6b, 0x14, 0xf0, 0x80, 0xbe, 0xa9, - 0xdf, 0xcf, 0xf1, 0xb9, 0xf6, 0x2c, 0xb1, 0xb0, 0xc7, 0x4b, 0x42, 0x97, 0x5e, 0xdc, 0x28, 0x90, 0x36, 0x3b, 0x56, - 0x01, 0x58, 0x91, 0x04, 0x1a, 0x91, 0x80, 0xa5, 0x8e, 0x27, 0x2e, 0xdb, 0xa0, 0x01, 0x49, 0x54, 0x52, 0xc8, 0x12, - 0x49, 0xe0, 0x87, 0x11, 0x84, 0x28, 0x8a, 0x41, 0xdc, 0xab, 0x97, 0x57, 0x5c, 0x53, 0x03, 0x4e, 0x14, 0xc1, 0x04, - 0xeb, 0x74, 0x0a, 0xc4, 0x56, 0xac, 0x57, 0xe0, 0x79, 0xe9, 0x38, 0x71, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x97, 0x4e, - 0xbb, 0xe5, 0xed, 0x89, 0x96, 0x2a, 0x36, 0xf7, 0x5e, 0x2c, 0x2c, 0xf7, 0x58, 0xf9, 0xdb, 0x81, 0xf6, 0xc2, 0x6a, - 0x47, 0x44, 0x0d, 0x56, 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xea, 0x5e, 0x39, 0x26, 0xa0, 0xa2, 0xab, 0xb8, 0x5a, - 0x46, 0xd9, 0x08, 0xfe, 0x6c, 0xb7, 0xc1, 0x7e, 0x00, 0x16, 0x90, 0xbf, 0xbe, 0xff, 0x39, 0xc2, 0xf0, 0x4c, 0xbf, - 0xbe, 0xff, 0x79, 0xbb, 0x7d, 0x36, 0x1e, 0x1b, 0xae, 0xc0, 0xa9, 0x75, 0x80, 0x3f, 0x30, 0x6c, 0x83, 0x5d, 0xb2, - 0xdb, 0xed, 0x33, 0xe0, 0x20, 0x14, 0xdb, 0x60, 0x76, 0xb1, 0x72, 0xe4, 0x52, 0xac, 0x86, 0xde, 0x91, 0x80, 0x55, - 0xb7, 0xc3, 0x52, 0xec, 0x52, 0x1f, 0x15, 0x82, 0x51, 0x2f, 0xfa, 0x97, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, - 0xb2, 0xaa, 0x56, 0x65, 0xb4, 0xbf, 0x1f, 0xaf, 0xb2, 0x51, 0x99, 0xc1, 0x36, 0x2f, 0xaf, 0x2f, 0x01, 0x50, 0x21, - 0xa0, 0x8d, 0x77, 0x6b, 0x91, 0x99, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0xad, 0x6e, 0x72, - 0x4a, 0xec, 0x03, 0xd8, 0x1c, 0x6e, 0xb7, 0x0d, 0x7e, 0xe1, 0x68, 0xf4, 0x6c, 0xb6, 0xcc, 0xb4, 0x41, 0x27, 0x37, - 0xfb, 0x9f, 0x44, 0x5e, 0x1a, 0x2a, 0x3e, 0xc9, 0xf4, 0x65, 0x06, 0x7c, 0x1e, 0x7b, 0x2b, 0x42, 0x9f, 0xe5, 0x6a, - 0xb4, 0x06, 0xd8, 0xd8, 0xec, 0xe2, 0x6e, 0x94, 0x72, 0x88, 0x48, 0x11, 0x58, 0x75, 0xcd, 0x32, 0x23, 0xbe, 0x4d, - 0xc5, 0x5d, 0x4b, 0x15, 0xf6, 0x56, 0x78, 0xce, 0x2a, 0xdc, 0x38, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x12, 0x85, 0xa8, - 0x1c, 0x8d, 0xe9, 0x9c, 0x40, 0x2a, 0xf3, 0x98, 0x50, 0xcc, 0xe1, 0xde, 0xfd, 0x9a, 0x3a, 0x73, 0x19, 0x5f, 0xb8, - 0xf7, 0xd2, 0x97, 0x99, 0xdc, 0x4a, 0x00, 0x45, 0x52, 0xb5, 0xff, 0xf2, 0x19, 0xa9, 0xf1, 0x3f, 0x53, 0xad, 0x01, - 0xe8, 0xfd, 0x02, 0x35, 0x39, 0x82, 0x80, 0xad, 0x98, 0xfa, 0x68, 0xfa, 0x56, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x82, - 0x6d, 0x54, 0xfc, 0x9c, 0xa8, 0xa2, 0x05, 0x4f, 0xd7, 0x22, 0x8d, 0x45, 0x72, 0x17, 0xf1, 0x7a, 0x8a, 0x25, 0x31, - 0x1b, 0x21, 0xeb, 0x97, 0x66, 0x17, 0x7e, 0x2e, 0x1a, 0x26, 0xe0, 0xb4, 0xf4, 0xb7, 0x95, 0xb7, 0x99, 0x2c, 0xe3, - 0x8c, 0x4c, 0xb9, 0x42, 0xec, 0xb6, 0xfa, 0x1e, 0x73, 0x82, 0x3f, 0x3d, 0x78, 0x4a, 0xe8, 0xad, 0x9c, 0x96, 0x08, - 0x4a, 0x27, 0x52, 0xeb, 0xaa, 0x89, 0xfd, 0x9a, 0x42, 0x14, 0x07, 0xc1, 0x20, 0x74, 0xa7, 0x69, 0x9f, 0xe2, 0xfb, - 0x6c, 0xd9, 0x6f, 0x4d, 0xd9, 0x92, 0x6c, 0x04, 0x74, 0x4c, 0x3a, 0x6f, 0x4f, 0x6f, 0xcf, 0xce, 0xbc, 0xdf, 0xa0, - 0x09, 0x07, 0xd5, 0x0d, 0xb4, 0xab, 0x20, 0xd3, 0x18, 0xc5, 0x66, 0x31, 0xd6, 0x6e, 0x4d, 0x44, 0x10, 0x74, 0xba, - 0x9c, 0x85, 0xed, 0x76, 0x42, 0x7c, 0x09, 0x24, 0x50, 0xe0, 0xca, 0x45, 0x39, 0x09, 0x89, 0xba, 0x90, 0xe9, 0xc9, - 0xba, 0x96, 0x2c, 0xd0, 0x6b, 0xec, 0x20, 0xa0, 0xc7, 0xdc, 0x3e, 0x05, 0xf4, 0x7d, 0xc1, 0x8e, 0xf9, 0x20, 0x18, - 0x62, 0x7c, 0xd5, 0x80, 0xde, 0x48, 0xf5, 0x08, 0x1e, 0xc2, 0xc0, 0x72, 0xd1, 0x57, 0x05, 0x43, 0x58, 0xa1, 0xbf, - 0x52, 0x36, 0xf9, 0xe6, 0xef, 0x6e, 0x7e, 0xcf, 0xb5, 0x98, 0x1d, 0x84, 0xe2, 0xf6, 0x7a, 0x02, 0xc4, 0xaf, 0xe2, - 0x57, 0x60, 0x5d, 0xad, 0x25, 0xde, 0x6e, 0x7a, 0xfe, 0x14, 0xbe, 0x1c, 0xdd, 0x7e, 0x52, 0x9a, 0x4f, 0x20, 0x48, - 0x8d, 0x93, 0x94, 0xbb, 0xef, 0x3e, 0x4a, 0x57, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xdd, 0x5b, 0xc9, 0x59, 0x53, 0xf8, - 0x8f, 0x75, 0xbe, 0xc7, 0xd8, 0x21, 0xf2, 0x14, 0xa7, 0xbf, 0x01, 0x86, 0x7d, 0xe7, 0xdf, 0xca, 0xac, 0x21, 0xd1, - 0xb9, 0xfa, 0x08, 0xe8, 0xff, 0x58, 0x8f, 0xdf, 0x31, 0x4a, 0xfa, 0x92, 0x38, 0x47, 0xb8, 0x22, 0x5e, 0xa2, 0xa9, - 0x5e, 0x6f, 0x5c, 0xd3, 0x4f, 0x85, 0x79, 0xa1, 0x15, 0x1c, 0xf6, 0xad, 0x51, 0x78, 0xe0, 0x99, 0xf7, 0x9b, 0x68, - 0x08, 0xba, 0x7f, 0xc7, 0xbd, 0xf1, 0x9b, 0x60, 0x19, 0xde, 0x94, 0xb3, 0xcc, 0xdc, 0xe1, 0x6e, 0x32, 0x91, 0xca, - 0x1b, 0xc6, 0x82, 0xb5, 0x50, 0xe6, 0xab, 0x69, 0x30, 0xdb, 0xd4, 0x91, 0x4a, 0x76, 0xdf, 0xbf, 0x6d, 0x9c, 0xb0, - 0xd9, 0x20, 0x38, 0xad, 0x64, 0x11, 0x5f, 0xf2, 0x60, 0xaa, 0x55, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0xe3, - 0xb4, 0x77, 0xf0, 0x64, 0xa9, 0x99, 0x09, 0x71, 0x6d, 0x75, 0x16, 0xf0, 0xd6, 0x8c, 0xe6, 0x71, 0x05, 0xbb, 0xcc, - 0x57, 0x52, 0xfc, 0xd9, 0x92, 0x64, 0x63, 0xfd, 0x0d, 0x19, 0xb6, 0x95, 0xcf, 0x9c, 0x03, 0xc6, 0xcc, 0x8d, 0x54, - 0x41, 0xee, 0x7a, 0xc0, 0x08, 0x21, 0x11, 0x10, 0xce, 0x62, 0xe2, 0x4e, 0x98, 0xf0, 0x8f, 0x2e, 0x30, 0x4e, 0x8c, - 0x81, 0x71, 0x3e, 0xca, 0x90, 0xd3, 0x63, 0x3e, 0x48, 0x1a, 0xb3, 0xf5, 0xa7, 0x2a, 0x91, 0x5e, 0x4b, 0x42, 0xcf, - 0xe0, 0xf7, 0xb8, 0xc5, 0x03, 0x35, 0x82, 0x53, 0xba, 0x9b, 0xd3, 0xfe, 0xab, 0x82, 0x0c, 0xff, 0x02, 0xef, 0xae, - 0xd8, 0x5e, 0x96, 0x13, 0x58, 0xdc, 0xb1, 0x57, 0x3c, 0xcd, 0x55, 0x8b, 0x13, 0xe2, 0x11, 0x8b, 0xdc, 0x27, 0x16, - 0x30, 0xa2, 0x86, 0xd1, 0xf8, 0xf1, 0xf4, 0xe4, 0xad, 0xc6, 0x6c, 0xca, 0xfd, 0x0f, 0x60, 0x44, 0xb5, 0xb4, 0xdd, - 0x0e, 0xf8, 0x72, 0x84, 0x06, 0xdb, 0xa9, 0x1b, 0xec, 0x7e, 0xdf, 0xa4, 0x1d, 0x95, 0x5e, 0x36, 0x27, 0x06, 0xdd, - 0x51, 0xda, 0x2c, 0x95, 0x41, 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0x6b, 0xc4, 0xaa, 0xde, 0x87, 0xe1, 0x92, 0xc6, 0x56, - 0x56, 0x6e, 0x77, 0x13, 0x8e, 0x6c, 0x02, 0x5c, 0x9f, 0x82, 0xb2, 0x6a, 0xce, 0x41, 0x0b, 0x3a, 0x13, 0x38, 0xa2, - 0xed, 0x36, 0x84, 0x08, 0x1c, 0xc5, 0x70, 0x32, 0x0b, 0x8b, 0xe1, 0x50, 0x0d, 0x7c, 0x41, 0x48, 0xf4, 0xa9, 0x98, - 0x67, 0x0b, 0x85, 0xd8, 0xe3, 0xef, 0xa4, 0xdf, 0x0a, 0xc5, 0x29, 0xf7, 0x7e, 0x13, 0x64, 0xf3, 0x7b, 0x8a, 0x31, - 0x07, 0x9d, 0x66, 0x33, 0x03, 0x09, 0xeb, 0x71, 0x45, 0xd4, 0x3a, 0xb2, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, - 0x75, 0x8b, 0x27, 0xd6, 0x33, 0x7a, 0x0f, 0x2a, 0x41, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x3e, 0x89, 0x50, 0x52, - 0x4e, 0x9a, 0xcc, 0x8c, 0x15, 0x0d, 0x16, 0x20, 0x24, 0x8d, 0xcb, 0xea, 0x8d, 0x4c, 0xb3, 0x8b, 0x0c, 0x10, 0x13, - 0x9c, 0xff, 0x9c, 0x6c, 0xbc, 0x79, 0xae, 0xe6, 0xa5, 0x2b, 0x71, 0x66, 0x61, 0x3e, 0xba, 0xde, 0xd2, 0x82, 0x44, - 0x05, 0xd0, 0x28, 0x5f, 0xcb, 0xf3, 0xd3, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x65, 0x3b, 0xc4, 0x8f, 0x58, 0x45, - 0xbc, 0xd3, 0xba, 0x52, 0x22, 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xa8, 0xe1, 0x83, 0x30, 0x83, 0x4e, - 0xf2, 0x83, 0x9e, 0xd1, 0xb1, 0x35, 0x90, 0xf4, 0xb5, 0x08, 0xbe, 0x46, 0x47, 0x3a, 0x51, 0xa6, 0x91, 0x98, 0x42, - 0xa2, 0x5f, 0x2f, 0xb4, 0xc6, 0x32, 0xca, 0xbe, 0x22, 0xff, 0x7b, 0xdd, 0xbd, 0xdf, 0xc4, 0x76, 0x0b, 0x93, 0xec, - 0x79, 0x5c, 0xc1, 0xa6, 0x46, 0xad, 0x10, 0xce, 0xce, 0x71, 0x85, 0xda, 0xb1, 0x5e, 0x58, 0x02, 0x79, 0x00, 0x5b, - 0x91, 0x06, 0x65, 0x90, 0xec, 0x53, 0x31, 0x17, 0x0b, 0x27, 0xca, 0x91, 0x0a, 0xef, 0x4b, 0x8e, 0x52, 0x0e, 0x57, - 0xb1, 0xb0, 0x60, 0xc8, 0xaf, 0x8e, 0x2e, 0x0a, 0x79, 0x05, 0x92, 0x12, 0xc3, 0x50, 0x59, 0x5e, 0x17, 0x57, 0x6d, - 0x49, 0x68, 0xef, 0x0c, 0x40, 0x58, 0x0a, 0x10, 0xbc, 0x34, 0x6a, 0x88, 0xd9, 0x46, 0xed, 0xae, 0xe8, 0x5e, 0x72, - 0x40, 0x9d, 0xee, 0xda, 0xad, 0x37, 0x65, 0x9b, 0x6d, 0xc5, 0x85, 0x7f, 0x42, 0xe9, 0xc7, 0x7c, 0x50, 0xf8, 0x54, - 0x02, 0x37, 0xbe, 0xda, 0x64, 0xd9, 0xc5, 0x1d, 0x2e, 0xfd, 0xaa, 0x31, 0x7e, 0xfd, 0x7e, 0x4f, 0x2d, 0x84, 0x46, - 0x2a, 0x30, 0xdf, 0x3e, 0x33, 0x55, 0x19, 0x4d, 0xa9, 0xbd, 0x04, 0x57, 0xce, 0x7e, 0x04, 0x15, 0x71, 0x5d, 0x91, - 0xc9, 0xd4, 0x00, 0xed, 0x79, 0x59, 0xe1, 0x56, 0x16, 0xe0, 0xb1, 0x13, 0x90, 0xed, 0x96, 0x87, 0x81, 0x3e, 0x74, - 0x02, 0x7f, 0x4b, 0x9e, 0x22, 0xb3, 0x66, 0x1f, 0x7f, 0xd1, 0x82, 0x7f, 0x6c, 0xc1, 0xcf, 0x28, 0xee, 0xb4, 0x32, - 0xff, 0x56, 0x5a, 0xb7, 0xb8, 0x7f, 0x27, 0xd3, 0x84, 0xa2, 0x32, 0xa1, 0xf6, 0x2b, 0xfd, 0x97, 0x09, 0x96, 0xa4, - 0xb2, 0x7f, 0x90, 0xf0, 0xc1, 0xac, 0xf1, 0xc4, 0x1a, 0x4f, 0x86, 0xd3, 0xad, 0x34, 0x0c, 0x01, 0x0a, 0xfd, 0xbc, - 0xcc, 0x15, 0xd5, 0xcf, 0xbf, 0xac, 0xf9, 0x9a, 0x37, 0x5b, 0x6c, 0x93, 0x1e, 0x68, 0xb0, 0x97, 0x47, 0x53, 0x0a, - 0x27, 0x51, 0xe7, 0x46, 0xa2, 0x2e, 0x6a, 0x96, 0xa1, 0x3a, 0xc1, 0xab, 0x79, 0xaa, 0x87, 0xbd, 0x99, 0x88, 0xd6, - 0x4a, 0xca, 0x12, 0x03, 0xd6, 0x3a, 0xf2, 0x90, 0xdc, 0xad, 0x75, 0xdc, 0x69, 0xa8, 0x4b, 0x53, 0x28, 0x01, 0x56, - 0xb8, 0x00, 0x47, 0xd0, 0xcf, 0x45, 0xc8, 0xe1, 0x9a, 0xaa, 0xf4, 0x0b, 0x9a, 0x92, 0x27, 0x9e, 0xa2, 0x56, 0x2b, - 0xd2, 0xed, 0x47, 0x39, 0x76, 0xc3, 0x37, 0x4e, 0xc8, 0x89, 0x11, 0xfa, 0xbb, 0x63, 0x29, 0x67, 0x68, 0xf1, 0xa0, - 0x4e, 0xb0, 0x5e, 0xde, 0x52, 0xa0, 0x98, 0xa3, 0xcb, 0xaa, 0x6b, 0x5e, 0xa3, 0xed, 0xcb, 0xb2, 0xdf, 0xcf, 0x6d, - 0x3d, 0x29, 0x3b, 0xda, 0x2c, 0xcd, 0x3e, 0x44, 0xc5, 0x14, 0xee, 0xfa, 0x44, 0xf3, 0x57, 0xa1, 0xbe, 0x6a, 0xcb, - 0x9c, 0x8f, 0x38, 0xe2, 0x62, 0xe4, 0xa4, 0xfe, 0x45, 0x4d, 0xbd, 0x12, 0xf7, 0xab, 0x4a, 0xbe, 0x13, 0xc6, 0x8a, - 0xd1, 0x01, 0xf5, 0xa7, 0x4a, 0xe5, 0xfd, 0xb2, 0x00, 0xb8, 0x27, 0xc1, 0x3e, 0x81, 0x7d, 0x85, 0x46, 0xf8, 0x6d, - 0x09, 0xf8, 0x37, 0x8a, 0x1b, 0xb0, 0x0a, 0x0c, 0x30, 0x9a, 0x6c, 0xcf, 0x69, 0x02, 0x07, 0x9c, 0xd0, 0x2a, 0x0a, - 0x2a, 0xcc, 0xd0, 0x50, 0x5b, 0x18, 0x3d, 0x45, 0x19, 0xb7, 0xca, 0xec, 0xdd, 0x18, 0x3b, 0x2d, 0xf0, 0x1a, 0xfe, - 0x7c, 0x5e, 0xe8, 0x61, 0xa3, 0x0e, 0xd2, 0xa3, 0x93, 0x98, 0xfe, 0xb8, 0x85, 0x93, 0x9b, 0x85, 0xb3, 0xac, 0x59, - 0x02, 0xdd, 0x81, 0x0b, 0x62, 0xdc, 0xef, 0xe7, 0x70, 0x64, 0x9a, 0x91, 0x2f, 0x58, 0x4e, 0x63, 0xb6, 0xa4, 0xda, - 0xd3, 0xee, 0xb2, 0x0a, 0x73, 0xba, 0xb4, 0x32, 0xde, 0x94, 0x81, 0xca, 0x68, 0xbb, 0x0d, 0xe1, 0x4f, 0xb7, 0xb5, - 0x4b, 0x3a, 0x5f, 0x42, 0x06, 0xf8, 0x03, 0x12, 0x51, 0xc4, 0xbe, 0xfe, 0xb7, 0x1a, 0xa7, 0xf4, 0x44, 0x69, 0xcd, - 0x12, 0xba, 0x66, 0xba, 0x7e, 0x7a, 0xc1, 0xd6, 0x8d, 0xa5, 0xb0, 0xdd, 0x86, 0xcd, 0x04, 0xa6, 0x39, 0x57, 0x32, - 0xbd, 0x40, 0x9d, 0x14, 0x50, 0xb1, 0xf0, 0x02, 0x97, 0x5f, 0x4a, 0x28, 0x34, 0x77, 0xbe, 0x5c, 0x18, 0x25, 0x26, - 0xb4, 0x4a, 0x7e, 0xf9, 0x50, 0x99, 0xaf, 0x8d, 0x47, 0xdc, 0xbf, 0xd2, 0x30, 0x31, 0x45, 0xa2, 0x42, 0x74, 0xf6, - 0x1b, 0xc8, 0x72, 0x04, 0xe0, 0x58, 0x9e, 0xca, 0x9a, 0xfe, 0x98, 0x42, 0x1c, 0x74, 0x68, 0xd0, 0xbb, 0x42, 0x5e, - 0x65, 0x25, 0x0f, 0xf1, 0x9e, 0xe0, 0x69, 0x46, 0xef, 0x37, 0xf8, 0xd0, 0xd6, 0x1e, 0x3d, 0x41, 0x36, 0x9e, 0x72, - 0xbf, 0xfe, 0x4e, 0x84, 0x73, 0x88, 0x56, 0xb9, 0xa0, 0x5a, 0x5d, 0xed, 0x00, 0xa8, 0x3c, 0xdb, 0xab, 0x47, 0x70, - 0xba, 0xe9, 0xeb, 0x5b, 0x15, 0x3a, 0x73, 0x00, 0x69, 0x0f, 0xc9, 0xba, 0xe6, 0x7a, 0x07, 0xb8, 0x23, 0xb1, 0x5a, - 0x03, 0x8d, 0x75, 0x5b, 0xb3, 0xd3, 0x1e, 0xc5, 0x63, 0x22, 0x33, 0x63, 0x91, 0x62, 0xcc, 0xdd, 0x3a, 0x2d, 0x8a, - 0x36, 0x68, 0x86, 0xb0, 0x7b, 0xd7, 0xe1, 0xeb, 0x56, 0x84, 0xf5, 0xfb, 0x6d, 0x5f, 0x60, 0x34, 0x8c, 0xb9, 0x76, - 0xcf, 0x33, 0x74, 0xc3, 0x06, 0xdb, 0xc8, 0x79, 0x88, 0x7c, 0x98, 0xa9, 0x03, 0x51, 0xd6, 0xd6, 0x80, 0xed, 0x11, - 0xd7, 0x9b, 0x56, 0xf1, 0xf3, 0x2a, 0xe6, 0x6c, 0xcf, 0x1a, 0xa7, 0xb4, 0xbe, 0xc6, 0x35, 0xc7, 0x55, 0x21, 0xa2, - 0xb6, 0x9e, 0xf1, 0x30, 0xec, 0x7c, 0x81, 0x3b, 0xb3, 0xc2, 0xe0, 0x45, 0x58, 0x2a, 0xd9, 0xa9, 0x5c, 0x7f, 0x0e, - 0x5b, 0x1c, 0xa4, 0xf2, 0xa5, 0xd7, 0xdf, 0x7f, 0xf9, 0xe2, 0x0b, 0x74, 0x53, 0x73, 0x7e, 0x04, 0x41, 0x26, 0xd0, - 0x21, 0x4b, 0xa9, 0x1e, 0xbf, 0x2b, 0x80, 0xda, 0xc3, 0x3c, 0x7c, 0x57, 0x30, 0x11, 0x5f, 0x67, 0x97, 0x71, 0x25, - 0x8b, 0xd1, 0x35, 0x17, 0xa9, 0x2c, 0xac, 0xd4, 0x38, 0x38, 0x5e, 0xad, 0x72, 0x1e, 0x80, 0xa9, 0xbc, 0x65, 0x94, - 0x6d, 0x65, 0x99, 0x1e, 0x5c, 0x2d, 0x4f, 0xaf, 0xb4, 0xe8, 0xbc, 0xbc, 0xbe, 0x0c, 0x22, 0xfc, 0x75, 0x6e, 0x7e, - 0x5c, 0xc5, 0xe5, 0xc7, 0x20, 0xb2, 0x36, 0x75, 0xe6, 0x07, 0x4a, 0xe5, 0xc1, 0x7f, 0x0a, 0x64, 0xba, 0xdf, 0x15, - 0x60, 0x99, 0x6d, 0x2b, 0x3e, 0x8c, 0xb1, 0xd6, 0xe1, 0x84, 0xcc, 0x54, 0x89, 0xde, 0xbb, 0x64, 0x5d, 0x80, 0xb5, - 0x9f, 0xc2, 0x32, 0x56, 0xb9, 0x66, 0x58, 0x99, 0xaa, 0xc8, 0xcc, 0xca, 0x9a, 0xed, 0x87, 0xd6, 0x89, 0x66, 0x8e, - 0xde, 0x02, 0xfa, 0x81, 0xec, 0x5f, 0xd2, 0x72, 0xcd, 0x3c, 0x1f, 0x9b, 0xc6, 0xeb, 0x47, 0xfb, 0x97, 0x6e, 0xc1, - 0xde, 0xda, 0x3b, 0x39, 0x0a, 0x13, 0xc1, 0xb3, 0xd6, 0x8c, 0x2f, 0xf2, 0xac, 0x80, 0x95, 0x33, 0x19, 0x8f, 0xa9, - 0xb7, 0xb4, 0x5a, 0x37, 0x47, 0x87, 0xe4, 0x9a, 0x3d, 0xae, 0x1e, 0x73, 0xb2, 0xcf, 0x5b, 0xa6, 0xb6, 0x6d, 0xeb, - 0x38, 0x4f, 0x93, 0xaf, 0x4c, 0xf7, 0xc5, 0xda, 0x46, 0x44, 0x57, 0xce, 0x7d, 0xce, 0x2b, 0xb8, 0xf5, 0x4d, 0x69, - 0xe8, 0xb5, 0x04, 0x20, 0x3a, 0x6d, 0xc0, 0x5f, 0xb0, 0x72, 0x3d, 0xaa, 0x78, 0x59, 0x81, 0x84, 0x05, 0x45, 0x78, - 0x53, 0xec, 0x4d, 0xe1, 0x6e, 0x9c, 0x9e, 0xc3, 0x0e, 0x5c, 0x4c, 0xd1, 0x1d, 0x27, 0x26, 0xb3, 0xd2, 0x68, 0x45, - 0x23, 0xfd, 0xcb, 0xf5, 0x25, 0xd6, 0x7d, 0xd1, 0xca, 0x3c, 0x9b, 0x53, 0x61, 0xb1, 0xbb, 0xca, 0xa5, 0x13, 0xf5, - 0x5b, 0x26, 0x5c, 0xb9, 0x12, 0x04, 0x64, 0x5a, 0xb0, 0x5e, 0x61, 0x76, 0x91, 0x5c, 0x03, 0x21, 0x03, 0xc3, 0xd7, - 0x60, 0x2d, 0x4a, 0x6e, 0xac, 0x60, 0xbd, 0x7b, 0xbe, 0x4e, 0x10, 0x52, 0xf0, 0xc0, 0x4d, 0xd0, 0x0f, 0xad, 0x9b, - 0xb7, 0xa3, 0x44, 0x19, 0xc4, 0xe3, 0xd6, 0x4e, 0x39, 0x48, 0x20, 0x00, 0xf7, 0x54, 0x85, 0xe0, 0x50, 0x20, 0xeb, - 0xe0, 0x6a, 0xc6, 0x11, 0x5c, 0x5d, 0x39, 0x73, 0x71, 0x03, 0xb0, 0xae, 0xfc, 0xb9, 0x6c, 0x70, 0x61, 0x3d, 0xa2, - 0xca, 0x9c, 0x71, 0x8a, 0x41, 0x8c, 0x2c, 0x41, 0x5f, 0x59, 0x4a, 0x7b, 0x09, 0x9a, 0xc6, 0x2b, 0xb6, 0x52, 0x3e, - 0x00, 0xf4, 0x9c, 0xad, 0x94, 0xb1, 0x3f, 0x7e, 0x7d, 0xc6, 0x56, 0x5a, 0x1a, 0x3c, 0xbd, 0x9a, 0x9d, 0xcf, 0xce, - 0x06, 0xec, 0x20, 0x0a, 0xb5, 0x01, 0x43, 0xe0, 0x90, 0xf8, 0x83, 0x41, 0xa8, 0xf1, 0x4e, 0x06, 0x2a, 0x20, 0x16, - 0xf1, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, 0x43, 0x0c, 0x7e, 0xd5, 0x7c, 0x41, 0x02, 0x42, 0x4d, 0x69, 0xe8, 0xf2, - 0x18, 0x0e, 0x27, 0x7b, 0x13, 0x48, 0xc5, 0xcc, 0x4c, 0x15, 0xc6, 0xc6, 0x24, 0x82, 0x78, 0xa7, 0x9d, 0xf5, 0x42, - 0xb9, 0xdd, 0x35, 0x1a, 0xc8, 0x95, 0xc1, 0x17, 0x55, 0x3c, 0xd9, 0x1b, 0x76, 0x55, 0x8c, 0xa3, 0x70, 0x6d, 0x94, - 0x6f, 0x67, 0x87, 0x00, 0x5e, 0x7b, 0x36, 0xf4, 0xe5, 0x12, 0x67, 0xfb, 0x4f, 0xc9, 0xe3, 0xa7, 0x84, 0x9e, 0xb1, - 0xb3, 0xaf, 0x9e, 0xd2, 0x33, 0x45, 0x4e, 0xf6, 0x26, 0xd1, 0x35, 0xb3, 0x98, 0x2f, 0x07, 0xaa, 0x09, 0xf4, 0x72, - 0xb4, 0x16, 0x6a, 0x81, 0x69, 0x87, 0xa6, 0xf0, 0xdb, 0xf1, 0x5e, 0x30, 0xb8, 0x6e, 0x37, 0xfd, 0xba, 0xdd, 0x56, - 0xcf, 0xab, 0x6b, 0xef, 0x20, 0xda, 0x2d, 0x66, 0xf2, 0xf7, 0xf1, 0x9e, 0x9b, 0x03, 0xac, 0xef, 0xe1, 0x31, 0x31, - 0x4d, 0xda, 0x19, 0x15, 0xbf, 0xa6, 0x27, 0xd8, 0x87, 0x66, 0x91, 0x1d, 0x7d, 0x18, 0xfe, 0x5b, 0x9d, 0xa8, 0xcf, - 0xbe, 0x3a, 0x00, 0x72, 0x04, 0x32, 0x50, 0x2c, 0x11, 0xcc, 0x70, 0xa0, 0x29, 0xa0, 0x20, 0xd3, 0xe3, 0x4e, 0xf5, - 0xf0, 0xab, 0x51, 0x53, 0x33, 0x72, 0x0d, 0x53, 0x83, 0x6d, 0xc1, 0x0f, 0x54, 0x37, 0xf4, 0x37, 0x1a, 0xdd, 0x48, - 0x3b, 0x99, 0x99, 0x97, 0xd4, 0xc6, 0x75, 0xbb, 0x86, 0x00, 0xc6, 0x0e, 0x5e, 0x50, 0xb2, 0xaf, 0x0f, 0x2f, 0xf7, - 0x70, 0x15, 0x01, 0x4a, 0x16, 0x0b, 0xbe, 0x1e, 0x5c, 0xea, 0xcd, 0xbd, 0x17, 0x90, 0xc1, 0xd7, 0xc1, 0xd1, 0xd7, - 0x03, 0x39, 0x08, 0x0e, 0xf7, 0x2f, 0x8f, 0x02, 0x67, 0xdc, 0x0f, 0x21, 0x1e, 0x55, 0x45, 0x31, 0x13, 0xa6, 0x8a, - 0xc4, 0xd6, 0x9e, 0xdb, 0x7a, 0x95, 0xf1, 0x19, 0x4d, 0xa7, 0x16, 0xf9, 0x3b, 0x4c, 0x59, 0x6c, 0x7e, 0x07, 0x13, - 0x7e, 0x15, 0x44, 0x2e, 0x08, 0xea, 0x2c, 0x8f, 0x62, 0xba, 0x64, 0xb7, 0x22, 0x4c, 0x69, 0xb2, 0x9f, 0x13, 0x12, - 0x85, 0x4b, 0x05, 0x9e, 0xa7, 0x5e, 0x27, 0x10, 0xc7, 0xd5, 0x7d, 0x7e, 0x2b, 0xc2, 0x25, 0xcd, 0xf7, 0x13, 0xd2, - 0x2a, 0xc2, 0x45, 0x64, 0xd9, 0xd4, 0xf4, 0x82, 0x85, 0x2b, 0x7a, 0x09, 0xcc, 0x94, 0x5c, 0x87, 0x97, 0xc0, 0xe5, - 0xad, 0xe7, 0xab, 0x05, 0xbb, 0x6c, 0x48, 0xdf, 0x0c, 0x5f, 0x7c, 0x61, 0x7d, 0xf2, 0x80, 0x87, 0x74, 0x7e, 0x78, - 0x29, 0xd8, 0x00, 0x5c, 0x67, 0xfc, 0xe6, 0x3b, 0x79, 0xab, 0xe7, 0xa5, 0x3d, 0xc5, 0x38, 0x33, 0xed, 0xc4, 0xa4, - 0x9d, 0x90, 0xfb, 0xf7, 0xed, 0x4d, 0x6c, 0x4e, 0xf6, 0x32, 0x5a, 0x2b, 0x97, 0x55, 0xcb, 0x90, 0x14, 0x6b, 0x86, - 0xfc, 0x3d, 0x4a, 0x4e, 0xad, 0xc0, 0x93, 0x5d, 0xf0, 0x2a, 0x59, 0xfa, 0x07, 0x95, 0xb5, 0x1a, 0xb0, 0xc7, 0x88, - 0x65, 0xa1, 0x70, 0xec, 0xdf, 0x64, 0xac, 0x58, 0xfb, 0x02, 0x8d, 0x18, 0xb9, 0xb7, 0x37, 0x19, 0xf3, 0x62, 0xae, - 0x26, 0x6b, 0x2f, 0x54, 0x9d, 0x97, 0x9e, 0xb7, 0x78, 0x2f, 0xa7, 0xd4, 0x30, 0x12, 0xd1, 0xbd, 0xb1, 0x32, 0xa3, - 0x54, 0x89, 0x5a, 0x83, 0x46, 0x04, 0x1b, 0xbb, 0xe0, 0x97, 0xe0, 0x84, 0xca, 0x3d, 0x75, 0xb6, 0x6f, 0xa7, 0x54, - 0x7a, 0xc0, 0xb2, 0xd4, 0xa8, 0xca, 0xdd, 0x32, 0x93, 0xac, 0x1a, 0x04, 0xa3, 0x3f, 0x4b, 0x29, 0x66, 0x78, 0x67, - 0x64, 0xc1, 0x14, 0xac, 0x04, 0x55, 0x2d, 0xc3, 0x72, 0xc8, 0x51, 0x8b, 0x67, 0x7c, 0x52, 0xa5, 0xfe, 0xd1, 0x11, - 0x24, 0x77, 0xb9, 0x6e, 0x05, 0xc9, 0x7d, 0x3a, 0x7e, 0xaa, 0x07, 0x3a, 0x5d, 0x6b, 0xc7, 0x43, 0x9f, 0xdf, 0x46, - 0x7c, 0x6d, 0xdd, 0x7b, 0xaa, 0xb5, 0x0a, 0x65, 0xa0, 0xc5, 0x8a, 0xca, 0x95, 0x5a, 0xd2, 0xfb, 0x5d, 0x04, 0xc0, - 0x22, 0x36, 0x66, 0xe3, 0x5d, 0xdb, 0xac, 0x10, 0x34, 0xba, 0xec, 0x68, 0x13, 0x0f, 0x58, 0xa2, 0x5b, 0x3b, 0x98, - 0xd0, 0xf8, 0x88, 0x95, 0xfd, 0x7e, 0x7e, 0x04, 0xf4, 0x54, 0x1b, 0x31, 0x15, 0x70, 0xe4, 0x7f, 0x69, 0x45, 0xa6, - 0x28, 0xb0, 0x59, 0x53, 0x77, 0x6b, 0x2c, 0x23, 0xd1, 0x97, 0x29, 0x5d, 0x9e, 0xf0, 0x0c, 0x98, 0xd6, 0xeb, 0x96, - 0xe3, 0xca, 0xae, 0xe2, 0xc8, 0x53, 0x61, 0x59, 0x71, 0x5e, 0x85, 0xe3, 0xad, 0xc7, 0x37, 0xd8, 0x37, 0x6c, 0xda, - 0x85, 0x3f, 0x84, 0xb0, 0x10, 0xde, 0x64, 0x70, 0x1b, 0xd1, 0x76, 0x12, 0xa8, 0xbc, 0x31, 0xd7, 0x09, 0x65, 0x73, - 0xbb, 0x5e, 0x7b, 0x06, 0xe9, 0xc4, 0x1c, 0x28, 0xd5, 0x08, 0x5a, 0xa3, 0x59, 0x50, 0x35, 0xe2, 0x91, 0xe3, 0xe1, - 0x9d, 0x41, 0xac, 0x96, 0x2f, 0x69, 0x2a, 0x45, 0x03, 0x30, 0x2e, 0x80, 0xcb, 0xd3, 0xaf, 0xef, 0x7f, 0x3e, 0xe5, - 0x71, 0x91, 0x2c, 0xdf, 0xc5, 0x45, 0x7c, 0x55, 0x86, 0x1b, 0x35, 0x46, 0x71, 0x4d, 0xa6, 0x62, 0xc0, 0xa4, 0x59, - 0x49, 0xcd, 0x5d, 0xa9, 0x09, 0x31, 0xd6, 0x99, 0xac, 0xcb, 0x4a, 0x5e, 0x35, 0x2a, 0x5d, 0x17, 0x19, 0x7e, 0xdc, - 0xf2, 0x39, 0xdd, 0x07, 0x20, 0x4f, 0xe3, 0x42, 0x1a, 0x49, 0x5d, 0x88, 0x31, 0x17, 0xf1, 0xba, 0x3e, 0x1e, 0x37, - 0xba, 0x5e, 0xb2, 0x67, 0xe3, 0x27, 0xd3, 0x37, 0x59, 0x98, 0x0d, 0x04, 0x19, 0x55, 0x4b, 0x2e, 0x5a, 0xa6, 0x9c, - 0xca, 0x24, 0x00, 0x7d, 0x3c, 0x7b, 0x8c, 0x1d, 0x8c, 0xc7, 0x64, 0xd3, 0x16, 0x0f, 0xf0, 0x70, 0xb9, 0x0e, 0x0b, - 0x32, 0xd3, 0x75, 0x44, 0x81, 0xe0, 0xb7, 0x55, 0x00, 0x48, 0x8e, 0xb6, 0x2a, 0xc3, 0xa5, 0xb1, 0x67, 0xe3, 0x09, - 0x95, 0xd8, 0xed, 0x90, 0xd4, 0x5e, 0x85, 0x6e, 0xe6, 0xa5, 0xef, 0x51, 0x24, 0x8d, 0xcb, 0xd2, 0x4e, 0xa5, 0x52, - 0xed, 0x99, 0x99, 0xeb, 0x1a, 0xc4, 0x60, 0x08, 0x75, 0xdd, 0xa5, 0x57, 0xf7, 0x6e, 0x73, 0xad, 0xd9, 0x0e, 0x78, - 0xaf, 0x41, 0x33, 0x94, 0xbc, 0xc5, 0xbc, 0x75, 0x45, 0xd4, 0x74, 0xb5, 0x06, 0xb3, 0x62, 0x94, 0x2d, 0x45, 0xe9, - 0x9a, 0x82, 0x52, 0x30, 0xba, 0x58, 0x7b, 0x0b, 0xf7, 0x8d, 0x6c, 0x5c, 0x58, 0x32, 0xbd, 0x5a, 0x94, 0x94, 0x50, - 0xdd, 0x54, 0x8c, 0x94, 0x30, 0x52, 0x1a, 0x9e, 0xca, 0xf7, 0x02, 0x8f, 0xf3, 0x3c, 0x88, 0x5a, 0x5e, 0x60, 0xc7, - 0x15, 0x39, 0x06, 0x47, 0x2f, 0x93, 0xd3, 0x50, 0xe0, 0x1f, 0x33, 0x05, 0x62, 0x3a, 0x54, 0xf7, 0x1b, 0xdc, 0xfc, - 0xff, 0x28, 0x58, 0xe0, 0xf1, 0xad, 0x97, 0xb8, 0x8d, 0xfe, 0x51, 0xf8, 0xb4, 0xf4, 0xb9, 0xf4, 0x5d, 0x5d, 0x3c, - 0x69, 0x6f, 0x36, 0x4a, 0x96, 0x59, 0x9e, 0xbe, 0x95, 0x29, 0x07, 0x91, 0x19, 0x5a, 0x83, 0xb2, 0x23, 0xd1, 0xb8, - 0xe1, 0x81, 0x11, 0x63, 0xe3, 0xc6, 0xf7, 0x63, 0x06, 0xb2, 0x61, 0xb0, 0xfa, 0x66, 0xa9, 0x4c, 0xd6, 0x57, 0x80, - 0x29, 0xa2, 0xe4, 0x27, 0x2f, 0x73, 0x0e, 0x4f, 0xa1, 0xbe, 0x7e, 0x81, 0xdb, 0x5c, 0xe9, 0xfb, 0x9c, 0xff, 0x98, - 0xd1, 0x1f, 0x11, 0xe8, 0x24, 0x5e, 0x81, 0xdc, 0xe3, 0x39, 0xd4, 0x8d, 0x30, 0xb5, 0x1c, 0x83, 0x03, 0x21, 0x1a, - 0x88, 0xa8, 0x58, 0xa0, 0xa0, 0x2e, 0x0c, 0xb0, 0x86, 0xba, 0x60, 0x0e, 0xcf, 0x73, 0x99, 0x7c, 0x9c, 0x1a, 0x9f, - 0xf9, 0x61, 0x8c, 0x31, 0x93, 0x83, 0x41, 0x58, 0xcd, 0x82, 0xe1, 0x78, 0x34, 0x39, 0x78, 0x06, 0xe7, 0x76, 0x30, - 0x0e, 0xc8, 0x20, 0xa8, 0xcb, 0x55, 0x2c, 0x68, 0x79, 0x7d, 0x69, 0xcb, 0xc0, 0x8f, 0xeb, 0x60, 0xf0, 0x8f, 0xc2, - 0x53, 0xbc, 0x83, 0xe6, 0xe4, 0x4c, 0x86, 0x60, 0x63, 0xbf, 0x26, 0x20, 0x29, 0xeb, 0x69, 0x7e, 0x52, 0x1f, 0x6e, - 0x4c, 0x69, 0xff, 0xcc, 0xe1, 0x05, 0x87, 0x1d, 0x12, 0x28, 0x90, 0xc6, 0xd3, 0x6c, 0xf4, 0x5a, 0x29, 0x72, 0xdf, - 0x15, 0x1c, 0xee, 0xcc, 0x3d, 0x67, 0x7a, 0xe4, 0x14, 0x12, 0xcd, 0x2c, 0xe0, 0x46, 0xfe, 0x5a, 0x5c, 0xc7, 0x79, - 0x96, 0xee, 0x35, 0xdf, 0xec, 0x95, 0x77, 0xa2, 0x8a, 0x6f, 0x47, 0x81, 0xb1, 0x26, 0xe4, 0xbe, 0xea, 0x09, 0xd0, - 0x13, 0x60, 0x0b, 0x80, 0x01, 0xf1, 0x8e, 0x99, 0xc9, 0x8c, 0x47, 0xe0, 0x11, 0xd8, 0xf4, 0x81, 0x2c, 0xee, 0x9c, - 0x4b, 0x92, 0xbf, 0x99, 0x4a, 0x7b, 0xd5, 0x2b, 0x77, 0x0a, 0xb2, 0x5e, 0x6d, 0xe5, 0xae, 0x5b, 0x9f, 0x7d, 0xd3, - 0xe1, 0x15, 0x78, 0x2e, 0xc1, 0x2d, 0xb2, 0xdf, 0x6f, 0x0a, 0x2a, 0x85, 0x51, 0x11, 0xef, 0x24, 0xd7, 0xe8, 0xdf, - 0xee, 0x8d, 0x8d, 0x22, 0xb9, 0xe5, 0xc3, 0x03, 0xa8, 0x33, 0x79, 0x57, 0xdc, 0xce, 0x21, 0x6a, 0xeb, 0x6e, 0x3c, - 0xb0, 0xda, 0xa0, 0x5d, 0xd6, 0x1c, 0xc1, 0x85, 0x17, 0x7b, 0x19, 0x8c, 0x05, 0xce, 0xca, 0x48, 0xa9, 0x71, 0x0d, - 0xa9, 0x05, 0x9f, 0xe4, 0xe9, 0x3d, 0x64, 0xa9, 0x27, 0x41, 0x91, 0xe3, 0x59, 0x0c, 0x99, 0xc6, 0xdb, 0xc0, 0xe3, - 0x77, 0x32, 0x04, 0x69, 0xda, 0x76, 0xdb, 0x1c, 0x81, 0xb2, 0x7b, 0x60, 0x4a, 0x52, 0xd7, 0xc6, 0xd4, 0x40, 0x43, - 0xed, 0xa1, 0x46, 0x2a, 0xe2, 0xec, 0xe8, 0x0d, 0xe8, 0x10, 0xc1, 0xf7, 0x3b, 0xcd, 0xca, 0x8e, 0x17, 0x13, 0x82, - 0x27, 0xef, 0xcb, 0xdb, 0xac, 0xac, 0xca, 0xe8, 0x7d, 0x8a, 0x86, 0x50, 0x89, 0x14, 0xd1, 0x2b, 0x88, 0xa7, 0x57, - 0xe2, 0xef, 0x32, 0xfa, 0x39, 0xa5, 0x71, 0x9a, 0x62, 0xfa, 0x8b, 0x02, 0x7e, 0x3e, 0x07, 0x54, 0x47, 0xdc, 0x09, - 0xd1, 0xb9, 0x04, 0x7b, 0x35, 0x88, 0x66, 0x55, 0x71, 0xc0, 0xd0, 0x8c, 0x6e, 0x05, 0x45, 0x8c, 0x36, 0xcc, 0xfe, - 0x43, 0x81, 0x42, 0x21, 0x55, 0xcc, 0x77, 0xc2, 0x3e, 0x44, 0x3f, 0x62, 0x91, 0xc7, 0xef, 0x5e, 0x9b, 0x21, 0x8d, - 0xee, 0x24, 0xd5, 0x5b, 0x1b, 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xae, 0xe9, 0x59, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, - 0x4f, 0xbc, 0x7b, 0xfd, 0x5c, 0x59, 0x98, 0xbc, 0xc8, 0x40, 0x71, 0x70, 0xfc, 0xee, 0xf5, 0x1b, 0x99, 0xae, 0x73, - 0x1e, 0x9d, 0x49, 0x24, 0xad, 0xc7, 0xef, 0x5e, 0xff, 0x82, 0xe6, 0x5e, 0x3f, 0x17, 0xf0, 0xfe, 0x15, 0xf0, 0x96, - 0x51, 0xbc, 0x86, 0x3e, 0xa9, 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd5, 0x5a, 0x46, 0xbf, 0xa6, 0xb5, 0x27, 0xad, 0xfa, - 0x67, 0xe1, 0x53, 0x3b, 0x4f, 0xc0, 0x73, 0x9b, 0x67, 0xe2, 0x63, 0x64, 0x45, 0x3b, 0x41, 0xf4, 0xf5, 0xde, 0xed, - 0x55, 0x2e, 0xca, 0x08, 0x5f, 0x30, 0xb4, 0x0b, 0x8a, 0xf6, 0xf7, 0x6f, 0x6e, 0x6e, 0x46, 0x37, 0x4f, 0x46, 0xb2, - 0xb8, 0xdc, 0x9f, 0x7c, 0xfb, 0xed, 0xb7, 0xfb, 0xf8, 0x36, 0xf8, 0xba, 0xed, 0xf6, 0x5e, 0x11, 0x3e, 0x60, 0x01, - 0x22, 0x54, 0x7f, 0x0d, 0x57, 0x14, 0xd0, 0xc2, 0x0d, 0xbe, 0x0e, 0xbe, 0xd6, 0x87, 0xce, 0xd7, 0x87, 0xe5, 0xf5, - 0xa5, 0x2a, 0xbf, 0xab, 0xe4, 0x83, 0xf1, 0x78, 0xbc, 0x0f, 0x12, 0xa8, 0xaf, 0x07, 0x7c, 0x10, 0x1c, 0x05, 0x83, - 0x0c, 0x2e, 0x34, 0xe5, 0xf5, 0xe5, 0x51, 0xe0, 0x99, 0xe6, 0x36, 0x58, 0x44, 0x07, 0xe2, 0x12, 0xec, 0x5f, 0xd2, - 0xe0, 0xeb, 0x80, 0xb8, 0x94, 0xaf, 0x20, 0xe5, 0xab, 0x83, 0x67, 0x7e, 0xda, 0xff, 0x52, 0x69, 0x4f, 0xfc, 0xb4, - 0x43, 0x4c, 0x7b, 0xf2, 0xdc, 0x4f, 0x3b, 0x52, 0x69, 0x2f, 0xfd, 0xb4, 0xff, 0x5d, 0x0e, 0x20, 0x75, 0xcf, 0xb7, - 0xfe, 0x3b, 0xf7, 0x5a, 0x83, 0xa7, 0x50, 0x94, 0x5d, 0xc5, 0x97, 0x1c, 0x1a, 0x3d, 0xb8, 0xbd, 0xca, 0x69, 0x30, - 0xc0, 0xf6, 0x7a, 0x26, 0x21, 0xde, 0x07, 0x5f, 0xaf, 0x8b, 0x3c, 0x0c, 0xbe, 0x1e, 0x60, 0x21, 0x83, 0xaf, 0x03, - 0xf2, 0xb5, 0x31, 0x90, 0x11, 0x6c, 0x13, 0xb8, 0x50, 0xa4, 0x43, 0x1b, 0x20, 0xcc, 0x97, 0xc6, 0xd5, 0xf4, 0xaf, - 0xa2, 0x3b, 0x1b, 0xde, 0x12, 0x95, 0x9b, 0x6e, 0x50, 0xd3, 0x13, 0xf0, 0x4e, 0x80, 0x46, 0x45, 0xc1, 0x75, 0x5c, - 0x84, 0xc3, 0x61, 0x79, 0x7d, 0x49, 0xc0, 0x2e, 0x73, 0xc5, 0xe3, 0x2a, 0x0a, 0x84, 0x1c, 0xaa, 0x9f, 0x81, 0x8a, - 0x7c, 0x15, 0x20, 0x20, 0x12, 0xfc, 0x17, 0xd4, 0xf4, 0x9d, 0x64, 0x9b, 0x60, 0x78, 0xc3, 0xcf, 0x3f, 0x66, 0xd5, - 0x50, 0x89, 0x16, 0xaf, 0x05, 0x85, 0x1f, 0xf0, 0xd7, 0x55, 0x1d, 0xfd, 0x05, 0x6e, 0xdc, 0x4d, 0x0d, 0xfb, 0x3b, - 0xe9, 0x58, 0xd4, 0x77, 0x72, 0x9e, 0x2d, 0xa6, 0xad, 0x03, 0xfd, 0x44, 0x92, 0x6a, 0x9e, 0x0d, 0x82, 0x61, 0x30, - 0xe0, 0x0b, 0x76, 0x22, 0xe7, 0xdc, 0x33, 0x9f, 0x7a, 0x24, 0xfd, 0x69, 0x9e, 0x65, 0x03, 0xf0, 0x4d, 0x41, 0x7e, - 0x64, 0xff, 0xbf, 0xe7, 0x43, 0x14, 0x1e, 0x0e, 0x1e, 0xed, 0x93, 0x59, 0xb0, 0xba, 0x45, 0x8f, 0xce, 0x28, 0xc8, - 0xc4, 0x92, 0x17, 0x59, 0xe5, 0x2d, 0x95, 0xbb, 0x75, 0xdb, 0xcb, 0xe3, 0xde, 0xb3, 0x79, 0x15, 0x8b, 0x40, 0x9d, - 0x73, 0xa0, 0x78, 0x43, 0xd9, 0x53, 0xd9, 0x94, 0x90, 0x6a, 0x43, 0xde, 0xb0, 0x1c, 0xb0, 0xe0, 0xb0, 0x37, 0x1c, - 0xee, 0x05, 0x03, 0xa7, 0xce, 0x1d, 0x04, 0x7b, 0xc3, 0xe1, 0x51, 0xe0, 0xee, 0x43, 0xd9, 0xc8, 0xdd, 0x19, 0x69, - 0xc1, 0xfe, 0x59, 0x84, 0x25, 0x05, 0xf1, 0x98, 0xd4, 0xe2, 0x2f, 0x0d, 0x2e, 0x33, 0x00, 0xe8, 0x23, 0x25, 0x01, - 0x33, 0xb0, 0x32, 0x03, 0x08, 0xcd, 0x4d, 0x63, 0x76, 0x06, 0xcc, 0x23, 0x70, 0xcc, 0x23, 0x64, 0x1c, 0x00, 0xb1, - 0x24, 0xc0, 0xb9, 0x0b, 0xa2, 0x58, 0x17, 0xf2, 0x08, 0x40, 0xef, 0xf1, 0x27, 0x31, 0xa5, 0x60, 0x92, 0x8e, 0x55, - 0x08, 0x82, 0x38, 0x3e, 0xbb, 0x16, 0xad, 0xc9, 0x59, 0xa2, 0x83, 0x19, 0x49, 0x80, 0x0d, 0x31, 0xb0, 0x73, 0x70, - 0x3f, 0x07, 0xa5, 0x87, 0xd5, 0x3b, 0x21, 0x17, 0x7c, 0xc7, 0x3d, 0xd9, 0x2c, 0x5c, 0x3d, 0xe1, 0x20, 0xb8, 0xe3, - 0x9a, 0x05, 0x18, 0x55, 0xc5, 0xba, 0xac, 0x78, 0xfa, 0xe1, 0x6e, 0x05, 0xb1, 0xef, 0x70, 0x40, 0xdf, 0xc9, 0x3c, - 0x4b, 0xee, 0x42, 0x67, 0xcf, 0xb5, 0x51, 0xe9, 0x3f, 0x7c, 0x78, 0xf3, 0x73, 0x04, 0x22, 0xc7, 0xda, 0x50, 0xfa, - 0x3b, 0x8e, 0x67, 0x93, 0x1f, 0xe1, 0xc9, 0xdf, 0xd8, 0x77, 0xdc, 0x9e, 0x1e, 0xfd, 0x3e, 0xd4, 0x4d, 0xef, 0xf8, - 0xec, 0x8e, 0x8f, 0x5c, 0x71, 0xa8, 0xae, 0x70, 0x5f, 0xdf, 0xac, 0x7d, 0x23, 0xa4, 0x87, 0xe7, 0x99, 0xf2, 0xc6, - 0xfc, 0x68, 0x07, 0xc3, 0x20, 0x98, 0x6a, 0xa1, 0x24, 0x44, 0xdd, 0x60, 0x4a, 0xc0, 0x10, 0xed, 0xe9, 0x65, 0x35, - 0x45, 0xce, 0x4d, 0x8d, 0x2c, 0xbc, 0x1f, 0x30, 0x2d, 0x74, 0x68, 0xe4, 0x50, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc2, - 0x6f, 0x95, 0x30, 0xfd, 0x6a, 0x51, 0x39, 0x07, 0xd1, 0x3d, 0x30, 0xc6, 0x15, 0xbc, 0x80, 0xae, 0xb0, 0xeb, 0xb5, - 0x8a, 0x8a, 0x81, 0xe0, 0x71, 0xc8, 0x01, 0x7a, 0xd8, 0x05, 0x2d, 0x2b, 0x4b, 0x75, 0xab, 0x72, 0x96, 0x2a, 0xea, - 0x32, 0x94, 0x95, 0xb1, 0xc2, 0x7c, 0x2f, 0xd9, 0x0f, 0x05, 0x7a, 0x96, 0x4f, 0x45, 0x17, 0xbc, 0x10, 0x4a, 0xb0, - 0x5c, 0xd7, 0x3b, 0x11, 0x88, 0x3a, 0x3f, 0xf4, 0xae, 0xfa, 0x1a, 0xc7, 0x8e, 0xa7, 0x6f, 0x64, 0xca, 0xb5, 0x09, - 0x85, 0xe6, 0xf3, 0xa5, 0xaf, 0x98, 0x28, 0xd8, 0x0d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd6, 0x7a, 0x33, 0x28, - 0xd1, 0x31, 0xaf, 0x51, 0x70, 0xad, 0x14, 0x0a, 0x46, 0x7b, 0x1b, 0x7f, 0x86, 0x23, 0xb7, 0xba, 0x3d, 0xf4, 0x7e, - 0xab, 0xe2, 0xcb, 0xb7, 0xe8, 0xdb, 0x69, 0x7f, 0x8e, 0x2a, 0xf9, 0xeb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, - 0xe2, 0xd2, 0x42, 0x3d, 0xa7, 0xef, 0x8e, 0xdf, 0x82, 0x1f, 0x25, 0xfe, 0xfe, 0xed, 0xfb, 0xa0, 0x26, 0xd3, 0x78, - 0x56, 0x98, 0x0f, 0x6d, 0x0e, 0x08, 0x4d, 0xe2, 0xd2, 0xec, 0xfb, 0x59, 0xdc, 0x64, 0xdf, 0x35, 0x5b, 0x4f, 0x8b, - 0x26, 0x92, 0x94, 0xe1, 0xf6, 0xc1, 0x80, 0x40, 0x1f, 0x20, 0x8a, 0xb3, 0x2f, 0x68, 0x0c, 0x69, 0x3e, 0xb3, 0xef, - 0x47, 0xc4, 0x7b, 0xb9, 0x13, 0x42, 0x8c, 0x2b, 0x2c, 0x1a, 0x3d, 0xe4, 0x33, 0x1e, 0x29, 0xc3, 0xa2, 0xf7, 0x98, - 0x40, 0x9c, 0xe1, 0xb4, 0x7a, 0x8f, 0x98, 0xc7, 0x78, 0x37, 0xd0, 0xb2, 0x87, 0x28, 0xa3, 0x2e, 0x7b, 0xc3, 0xe2, - 0xfb, 0xe3, 0x3a, 0xcc, 0xac, 0xe5, 0xe5, 0x10, 0xfe, 0x06, 0xda, 0x00, 0x9c, 0x72, 0x64, 0xf9, 0x2a, 0xb3, 0xd1, - 0xd5, 0x12, 0xd3, 0x9b, 0x08, 0x62, 0xf1, 0xe8, 0x74, 0x58, 0xbb, 0x3a, 0x55, 0xef, 0x6a, 0xe7, 0x33, 0xd1, 0xab, - 0x40, 0x2b, 0xd7, 0xb6, 0xc7, 0x43, 0xb8, 0x4b, 0x2d, 0xad, 0xb0, 0x11, 0xe5, 0x5c, 0x3c, 0xdd, 0x39, 0x36, 0x27, - 0xa0, 0xc1, 0x95, 0x4c, 0x01, 0x38, 0x4b, 0xab, 0xd1, 0xa8, 0x11, 0xf6, 0x59, 0x39, 0x9f, 0xc3, 0xd6, 0x42, 0x3c, - 0x2d, 0x00, 0xc3, 0x6d, 0x62, 0x50, 0xf2, 0x6e, 0x0c, 0xca, 0xe9, 0x47, 0x05, 0x6f, 0x1d, 0x9c, 0x95, 0xcb, 0x38, - 0x95, 0x37, 0x80, 0xc5, 0x18, 0xf8, 0xa9, 0x58, 0xaa, 0x97, 0x90, 0x2c, 0x79, 0xf2, 0x11, 0xad, 0x36, 0xd2, 0x00, - 0xb8, 0xca, 0xa9, 0xb1, 0xdc, 0x53, 0x20, 0xa1, 0xae, 0x14, 0x95, 0x10, 0x57, 0x55, 0x9c, 0x2c, 0x4f, 0x31, 0x35, - 0xdc, 0x40, 0x2f, 0xa2, 0x40, 0xae, 0xb8, 0x00, 0x92, 0x9e, 0xb3, 0x7f, 0x65, 0x1a, 0x6b, 0xfc, 0xb9, 0x44, 0x01, - 0x93, 0x46, 0x0d, 0xc6, 0x4a, 0xd9, 0x4b, 0x69, 0xa2, 0xbd, 0x05, 0x41, 0xed, 0x5e, 0xfe, 0x05, 0x75, 0x3f, 0x87, - 0x56, 0x84, 0x0d, 0x30, 0x44, 0x79, 0x8e, 0x3b, 0x34, 0xb5, 0x4b, 0xce, 0x03, 0x46, 0x74, 0xde, 0x67, 0xb5, 0xdd, - 0xea, 0xcf, 0x97, 0x80, 0x6d, 0x9a, 0x1a, 0x9f, 0xc2, 0x30, 0x21, 0x26, 0x36, 0xb0, 0x55, 0x56, 0xda, 0x0d, 0x65, - 0xda, 0x49, 0x97, 0xcc, 0x6b, 0xe1, 0x34, 0xef, 0x31, 0xb6, 0x1c, 0xa9, 0xdc, 0xfd, 0x7e, 0x68, 0x7e, 0xb2, 0x9c, - 0x3e, 0xd7, 0x21, 0x9b, 0xbd, 0xf1, 0xa0, 0x39, 0xd1, 0xea, 0xaa, 0x8e, 0x7e, 0x40, 0x07, 0x60, 0xa6, 0x2d, 0x40, - 0xa6, 0x0b, 0x36, 0xed, 0x2b, 0x51, 0x71, 0x49, 0xc2, 0x52, 0x49, 0x60, 0x67, 0x37, 0x25, 0x3b, 0x9b, 0x80, 0x78, - 0x86, 0xbb, 0x9e, 0x16, 0x3b, 0x21, 0x4d, 0x78, 0x8b, 0xbd, 0x04, 0x44, 0x1d, 0xaa, 0xba, 0x84, 0x6c, 0x8c, 0xa1, - 0x8b, 0x7f, 0x51, 0x0a, 0x13, 0xd6, 0x32, 0xa9, 0x4a, 0x4c, 0x10, 0xa4, 0x72, 0xb7, 0x45, 0x60, 0x89, 0x82, 0x1d, - 0xc0, 0xde, 0xbb, 0x51, 0x37, 0xa3, 0xa6, 0xaa, 0x53, 0x2f, 0xc1, 0xc7, 0x69, 0xd6, 0x55, 0x90, 0x59, 0xd8, 0x55, - 0xb1, 0xe6, 0x81, 0x8e, 0x4d, 0xa5, 0x8c, 0x89, 0xbb, 0xb4, 0xc8, 0x10, 0x0f, 0x18, 0x63, 0xe9, 0x42, 0x20, 0xdf, - 0x6c, 0x77, 0xdc, 0xf4, 0x04, 0xa1, 0x9f, 0xb0, 0xa1, 0x04, 0x6e, 0x3a, 0xdb, 0x53, 0xd3, 0xcc, 0x07, 0x44, 0x1c, - 0x06, 0x14, 0x48, 0x36, 0x0e, 0x69, 0x8e, 0xf4, 0x05, 0x49, 0x13, 0x06, 0x86, 0x56, 0x3c, 0x27, 0xc8, 0x8a, 0x42, - 0xcf, 0xd6, 0x55, 0x1b, 0xe7, 0xca, 0x30, 0x47, 0x4b, 0x4e, 0x85, 0xcf, 0x09, 0x32, 0xb1, 0x7b, 0xda, 0x66, 0x26, - 0xc3, 0x51, 0xb2, 0xc0, 0xfc, 0x0a, 0xa2, 0xc4, 0x9d, 0x69, 0x56, 0xe5, 0x60, 0x5c, 0xc0, 0x02, 0xad, 0x7c, 0x0f, - 0xea, 0xc6, 0x1a, 0xda, 0x68, 0x18, 0x62, 0xb7, 0x3f, 0xc1, 0x7e, 0xad, 0x9d, 0xd6, 0x65, 0x8a, 0xe5, 0x65, 0x0a, - 0xd1, 0x5e, 0xc8, 0xfc, 0x46, 0x91, 0xe8, 0x4e, 0x11, 0x86, 0x84, 0x75, 0x94, 0x3d, 0x69, 0x53, 0x03, 0xe8, 0xa9, - 0x17, 0xf0, 0xbc, 0x73, 0x2d, 0xc3, 0x2e, 0xd2, 0xfd, 0x55, 0xc1, 0xa7, 0x74, 0x83, 0x20, 0x45, 0x6f, 0x52, 0x30, - 0xe7, 0xf5, 0x28, 0xa9, 0x37, 0xa7, 0x2d, 0x33, 0xaa, 0x8e, 0x8a, 0x90, 0x72, 0x82, 0xff, 0xe4, 0xa5, 0xd4, 0xc4, - 0x26, 0x4c, 0xf0, 0xc0, 0x87, 0x79, 0x86, 0x0d, 0xbc, 0xdd, 0xbe, 0x4b, 0xc3, 0xa4, 0xcd, 0x36, 0xa4, 0x20, 0xad, - 0x30, 0x71, 0x31, 0xa0, 0xb2, 0xd7, 0xb8, 0x5f, 0xb0, 0x9d, 0x34, 0x05, 0x0f, 0xc2, 0x46, 0x03, 0x13, 0xb7, 0xba, - 0xf8, 0x3a, 0x4c, 0x68, 0xb8, 0xa4, 0xda, 0xd9, 0x49, 0x4b, 0x9a, 0xdb, 0xeb, 0xf2, 0xc2, 0xf6, 0x41, 0xc7, 0x0e, - 0xeb, 0x1a, 0x1e, 0x68, 0x5e, 0xb3, 0x8b, 0x2b, 0xa6, 0x69, 0xa2, 0xb1, 0x1e, 0x52, 0x96, 0x1c, 0xeb, 0x7a, 0xba, - 0xc2, 0xd5, 0x32, 0xd3, 0xc0, 0xee, 0x12, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x81, 0xcd, 0x66, 0xab, - 0x9a, 0x4c, 0xf3, 0xfb, 0xb2, 0xe5, 0x26, 0x20, 0x9c, 0xa5, 0xbe, 0xb9, 0x4f, 0x8e, 0x35, 0x6d, 0xf3, 0x93, 0x00, - 0xc7, 0xdb, 0x2b, 0x20, 0xe9, 0x58, 0x82, 0x2e, 0xbe, 0xa5, 0x3f, 0x88, 0xd4, 0x4c, 0x05, 0xbd, 0x77, 0xbe, 0x48, - 0xdd, 0xfc, 0x02, 0x6c, 0xa3, 0x36, 0xc6, 0x34, 0x2b, 0x5b, 0x87, 0x89, 0xb2, 0xb0, 0x46, 0x16, 0x72, 0x09, 0x3e, - 0x98, 0xbb, 0x4d, 0x9d, 0x1e, 0x77, 0x10, 0x61, 0xbf, 0x8b, 0x1e, 0x8f, 0x30, 0x56, 0xac, 0x41, 0x62, 0x58, 0x85, - 0x35, 0x6d, 0x2e, 0x87, 0x28, 0xa7, 0x66, 0xc9, 0x44, 0x4b, 0xea, 0x53, 0x8a, 0x28, 0x05, 0x73, 0xe3, 0x69, 0xd9, - 0x30, 0x25, 0x44, 0xc8, 0x0a, 0xe9, 0x80, 0x6a, 0x2d, 0xb4, 0x54, 0x13, 0xf4, 0x3a, 0xf4, 0xb2, 0xd0, 0x98, 0x82, - 0xe8, 0x23, 0x32, 0xdc, 0x88, 0x23, 0xa3, 0xbb, 0x63, 0x14, 0x13, 0x08, 0x55, 0xed, 0xe5, 0x85, 0xd5, 0xa7, 0x65, - 0x5b, 0x1d, 0xc4, 0x15, 0x22, 0xdf, 0x77, 0x13, 0xd4, 0x18, 0x05, 0x6d, 0x4e, 0x37, 0xfa, 0x6b, 0x11, 0xfa, 0x76, - 0xe1, 0xd8, 0x8d, 0x82, 0x48, 0x88, 0xc0, 0xea, 0x35, 0x15, 0x03, 0xb2, 0xce, 0x63, 0x17, 0xa1, 0x49, 0x77, 0x0b, - 0x51, 0xde, 0xa8, 0xac, 0x3f, 0xae, 0x43, 0xb2, 0xdd, 0x62, 0x59, 0xe0, 0xcb, 0x7e, 0xba, 0xbe, 0x07, 0xf2, 0xfb, - 0xcd, 0xfa, 0xb3, 0x90, 0xdf, 0xaf, 0xb3, 0x2f, 0x81, 0xfc, 0x7e, 0xb3, 0xfe, 0x9f, 0x86, 0xfc, 0x3e, 0x5d, 0x7b, - 0x90, 0xdf, 0x6a, 0x30, 0x7e, 0x2f, 0x58, 0x70, 0xf2, 0x36, 0xa0, 0x2f, 0x24, 0x0b, 0x4e, 0x5e, 0xbd, 0xf2, 0x8d, - 0x40, 0x84, 0x46, 0xae, 0x37, 0xb2, 0x60, 0xc4, 0x6d, 0x81, 0x57, 0xa8, 0x75, 0xf2, 0x81, 0x8a, 0x32, 0x00, 0x5e, - 0x2f, 0xff, 0x91, 0x55, 0xcb, 0x30, 0xd8, 0x0f, 0xc8, 0xcc, 0x41, 0x82, 0x0e, 0x27, 0x70, 0x7b, 0x43, 0x23, 0xcb, - 0xea, 0x8b, 0xe0, 0xc3, 0x47, 0xa3, 0x51, 0x5c, 0x5c, 0xe2, 0xa5, 0xce, 0x6c, 0x24, 0x04, 0x3c, 0xce, 0x78, 0x69, - 0x43, 0x44, 0x2c, 0xe3, 0xf2, 0x4c, 0xc7, 0x66, 0x29, 0xed, 0x56, 0x84, 0x88, 0xf3, 0x67, 0x80, 0x53, 0x6f, 0xf7, - 0x66, 0x8c, 0xfd, 0x50, 0x1c, 0xb1, 0x0e, 0x20, 0xfb, 0x7c, 0xad, 0xdf, 0x9d, 0xc7, 0x25, 0x7f, 0x17, 0x57, 0x4b, - 0x06, 0xbd, 0x84, 0xbb, 0x88, 0xe0, 0x49, 0xe5, 0xb1, 0x4d, 0x0a, 0xa8, 0x3c, 0xd3, 0x40, 0xe5, 0x1d, 0xef, 0x69, - 0x68, 0x87, 0x45, 0xfb, 0x00, 0x1b, 0xe9, 0x72, 0x06, 0x46, 0x8b, 0x2f, 0xaf, 0xb9, 0xa8, 0x7e, 0x06, 0x3c, 0x75, - 0xc1, 0x0b, 0xb8, 0x25, 0x20, 0x17, 0xdb, 0x70, 0x42, 0xa0, 0xc2, 0xf7, 0xec, 0x50, 0x51, 0x63, 0x8c, 0x68, 0xa2, - 0xd1, 0x6f, 0xbc, 0x09, 0xa1, 0x77, 0x27, 0xe8, 0x8a, 0x30, 0x12, 0xde, 0x5f, 0x6b, 0x7e, 0x96, 0x81, 0xf9, 0xbc, - 0x00, 0x28, 0x0d, 0x84, 0x43, 0x65, 0x4a, 0x6e, 0x81, 0x09, 0x1b, 0x63, 0xae, 0x94, 0xa5, 0x1e, 0x52, 0x29, 0x55, - 0x70, 0xba, 0x82, 0xa6, 0x12, 0x70, 0xb8, 0x23, 0x09, 0x60, 0xa6, 0xb6, 0x30, 0x88, 0x6e, 0x9b, 0xd2, 0x2c, 0x8d, - 0x9c, 0x22, 0xcd, 0xe1, 0x93, 0x52, 0x05, 0x3a, 0x7d, 0x96, 0xc4, 0x15, 0xbf, 0x94, 0x05, 0x84, 0xc2, 0x6d, 0xa5, - 0x50, 0xa4, 0xdf, 0x67, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0x39, 0x5b, 0x66, 0x65, 0x05, 0xf9, 0xe6, 0xfa, 0xf4, 0x5b, - 0xd4, 0xd3, 0x02, 0xe7, 0x4d, 0x4d, 0x0a, 0x33, 0xf3, 0x78, 0xac, 0x76, 0x3a, 0xa8, 0x57, 0xbd, 0xd7, 0x06, 0xfb, - 0xbd, 0x39, 0xd1, 0xe3, 0xd6, 0x7a, 0xb0, 0x9a, 0xd4, 0x66, 0xaa, 0x82, 0x38, 0x02, 0xea, 0xc0, 0x8e, 0xe2, 0x76, - 0x33, 0x0f, 0x93, 0x76, 0xca, 0x76, 0xbb, 0x93, 0x09, 0x0e, 0xee, 0x56, 0x12, 0xdc, 0x12, 0x61, 0xc5, 0x1f, 0x2a, - 0x08, 0x96, 0xd9, 0x70, 0x12, 0x99, 0x70, 0xac, 0x05, 0xff, 0x6b, 0xcd, 0x0d, 0x16, 0x7c, 0xa8, 0x1d, 0xf2, 0x9c, - 0xe4, 0x5c, 0x0f, 0x80, 0x67, 0xc3, 0xa6, 0x67, 0x67, 0x0e, 0xf6, 0x53, 0x7e, 0xcb, 0x21, 0x60, 0x4b, 0xe7, 0x28, - 0x2e, 0xa6, 0xda, 0x9a, 0xd7, 0xb0, 0x12, 0xf4, 0xcb, 0xbe, 0xd3, 0x38, 0xb5, 0x09, 0x0f, 0x87, 0xcf, 0xc6, 0xa4, - 0xd6, 0xa6, 0xe5, 0x38, 0xcf, 0xf6, 0xb7, 0x5a, 0x0b, 0xee, 0xd9, 0xae, 0x07, 0xda, 0x74, 0x0a, 0x68, 0xd7, 0x48, - 0xc5, 0x3d, 0xdd, 0xaf, 0x49, 0xed, 0xe6, 0xd5, 0x0a, 0x7a, 0xfe, 0x50, 0x87, 0xcb, 0xd9, 0xa3, 0x4d, 0xa6, 0xab, - 0xac, 0xff, 0xc8, 0x6c, 0x58, 0xb8, 0xc6, 0x46, 0xad, 0xf5, 0x8c, 0xfb, 0xa8, 0x6c, 0x1d, 0xd9, 0xf4, 0x0c, 0xb1, - 0xac, 0x73, 0xb7, 0x8f, 0xd4, 0x23, 0x57, 0x51, 0xb2, 0xba, 0xb3, 0xf0, 0x5b, 0x9e, 0x84, 0x5d, 0x0d, 0x53, 0x8c, - 0xb8, 0xe9, 0x02, 0x02, 0x55, 0x82, 0xf8, 0x3d, 0xfc, 0xe3, 0xd1, 0xa6, 0x49, 0x3d, 0xea, 0x7d, 0xef, 0x33, 0xfc, - 0x9d, 0xa5, 0xf0, 0xb7, 0xaa, 0xff, 0xa0, 0x9b, 0x2b, 0x5e, 0x2d, 0x65, 0x1a, 0x05, 0xef, 0x4e, 0x4e, 0x3f, 0x04, - 0x1a, 0x00, 0x1d, 0xaf, 0x01, 0x46, 0xf1, 0x6b, 0xa0, 0x96, 0x40, 0x11, 0x92, 0xcb, 0x4b, 0xc4, 0x00, 0xd4, 0x20, - 0xf2, 0xa7, 0x4b, 0x79, 0x73, 0x9c, 0xe7, 0x3e, 0xaf, 0x6a, 0xe8, 0x9b, 0x66, 0xdf, 0x1a, 0xc4, 0x21, 0x04, 0x91, - 0xdb, 0x28, 0x2b, 0xcf, 0xb4, 0x92, 0x24, 0x3d, 0x3b, 0xbf, 0x3b, 0xd3, 0x82, 0x18, 0x0b, 0xc2, 0xf8, 0xfc, 0x8f, - 0xc3, 0x34, 0xbb, 0xde, 0x43, 0x22, 0xcc, 0x02, 0xb0, 0x60, 0xcf, 0xf9, 0xf9, 0xba, 0xaa, 0xa4, 0x18, 0x16, 0xf2, - 0x26, 0x38, 0x3a, 0x54, 0x0f, 0x26, 0x43, 0xac, 0x1e, 0x83, 0xbd, 0xff, 0x4a, 0xf2, 0x2c, 0xf9, 0xc8, 0x82, 0x47, - 0x9b, 0x8c, 0x1d, 0xb5, 0x48, 0xed, 0xb8, 0x0e, 0x8e, 0xa0, 0xad, 0x7b, 0xc7, 0x79, 0x7e, 0xb8, 0xaf, 0xbe, 0x38, - 0x3a, 0xdc, 0x4f, 0xb3, 0xeb, 0x23, 0x0f, 0x0f, 0xdf, 0x99, 0xb7, 0x22, 0xf2, 0x98, 0xbb, 0xbe, 0x82, 0x1f, 0x6b, - 0xc2, 0x43, 0x7b, 0xe0, 0x83, 0xd0, 0xc4, 0x44, 0x13, 0x41, 0x41, 0x4b, 0x18, 0xc3, 0xf1, 0xb6, 0xdd, 0x86, 0xd6, - 0xf6, 0x26, 0xf1, 0x80, 0x69, 0x0a, 0x60, 0x08, 0x30, 0x0b, 0x4d, 0x08, 0x4d, 0x6a, 0x12, 0x1a, 0xf8, 0x9c, 0x98, - 0xd0, 0xa2, 0xa6, 0x40, 0xf1, 0xdf, 0xc4, 0x2b, 0x23, 0x6b, 0xd2, 0x77, 0x77, 0xd3, 0xfa, 0x59, 0x63, 0x1c, 0xa3, - 0xf6, 0xa8, 0x1a, 0x40, 0xab, 0x5e, 0x79, 0xdf, 0xc0, 0x82, 0x78, 0x31, 0xac, 0x68, 0xd0, 0x22, 0x15, 0x20, 0x1e, - 0xf4, 0xa5, 0x5a, 0x9c, 0x86, 0xf3, 0x92, 0xca, 0x05, 0x61, 0x47, 0xe1, 0x06, 0xb9, 0xdb, 0x52, 0x11, 0xcb, 0x48, - 0xd6, 0x0e, 0x5d, 0x52, 0xcd, 0xce, 0xd1, 0xa3, 0x8d, 0x40, 0x40, 0xc3, 0x92, 0x1d, 0x35, 0xe7, 0xab, 0x8a, 0xcf, - 0x87, 0x4b, 0x0e, 0x6e, 0x30, 0xc1, 0xde, 0x7f, 0xa5, 0xe7, 0xb9, 0x9d, 0x14, 0xb5, 0x22, 0x97, 0xb1, 0x48, 0x73, - 0xfe, 0x21, 0x3e, 0xff, 0x01, 0xf3, 0xbc, 0x38, 0xcf, 0x9f, 0x43, 0x86, 0x3a, 0x38, 0x7a, 0xb4, 0x49, 0xaa, 0xd1, - 0xcb, 0xb7, 0x1f, 0x5e, 0x7f, 0xf8, 0xe7, 0xd9, 0xf3, 0xe3, 0x0f, 0x2f, 0xbf, 0x3f, 0x79, 0xff, 0xfa, 0xe5, 0xe9, - 0xdc, 0xfa, 0x9d, 0x2a, 0x38, 0x33, 0xb2, 0xd8, 0x6e, 0x5d, 0xbe, 0x5f, 0xdf, 0xbe, 0x78, 0xf9, 0xea, 0xf5, 0xdb, - 0x97, 0x2f, 0x6a, 0x35, 0x97, 0xed, 0x86, 0xc0, 0x0e, 0x8d, 0x33, 0xc1, 0x0b, 0x28, 0x5e, 0x07, 0x55, 0xc4, 0x66, - 0x6b, 0x14, 0xbe, 0x66, 0xd3, 0x75, 0xc0, 0x02, 0x58, 0x64, 0x7b, 0x7a, 0xb3, 0x40, 0xc3, 0xa5, 0xd9, 0x38, 0xfe, - 0x12, 0xf3, 0x7b, 0xf3, 0x12, 0xbf, 0x7b, 0x2f, 0x6f, 0x4c, 0x57, 0xf4, 0x08, 0x29, 0x80, 0xad, 0xd9, 0xf3, 0x3f, - 0x0e, 0x7d, 0xa1, 0x16, 0xde, 0xfc, 0x55, 0xb9, 0xf0, 0xab, 0x0e, 0xf6, 0xb4, 0x81, 0x5d, 0x00, 0xf1, 0x21, 0x82, - 0xa3, 0xc3, 0x7d, 0x3f, 0xf7, 0xd1, 0x1f, 0xd1, 0xcf, 0x5e, 0xe7, 0xb0, 0x54, 0x18, 0x87, 0x66, 0xda, 0xce, 0x21, - 0x04, 0x11, 0x8c, 0xdc, 0x31, 0xa5, 0x56, 0x90, 0x21, 0x57, 0x92, 0x44, 0x76, 0x12, 0x95, 0xe1, 0x88, 0x29, 0xed, - 0x0f, 0xfd, 0xd7, 0xf5, 0x19, 0x2f, 0xe2, 0x5c, 0x94, 0xb2, 0x08, 0xa0, 0x1f, 0xed, 0xb0, 0x0e, 0x7b, 0x5e, 0xf8, - 0x14, 0xec, 0x51, 0x27, 0x79, 0x87, 0x11, 0xd9, 0x6f, 0x7f, 0xea, 0x75, 0xec, 0x0f, 0xe2, 0x7e, 0xec, 0xe9, 0xce, - 0xb4, 0xc8, 0x8b, 0x6d, 0xe0, 0xfd, 0xe1, 0x37, 0xe6, 0x27, 0x19, 0xfd, 0x87, 0xa4, 0x97, 0x31, 0xbd, 0x8a, 0xe9, - 0xa9, 0x58, 0xd4, 0x9d, 0xb3, 0x63, 0x43, 0xbb, 0x50, 0x3e, 0x0d, 0x01, 0x20, 0x42, 0xb3, 0xed, 0x9a, 0x99, 0xcd, - 0x46, 0x5a, 0xa5, 0xf5, 0x21, 0x2e, 0x2e, 0xb9, 0x89, 0xa8, 0x62, 0xde, 0x56, 0x7a, 0x54, 0x88, 0x37, 0x2c, 0x80, - 0x9e, 0xd2, 0xd3, 0x9a, 0xff, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xe6, 0xaa, 0xac, 0xe4, 0x0a, 0x58, - 0xea, 0xf8, 0x52, 0x8b, 0x48, 0x68, 0xc8, 0xbf, 0xac, 0xba, 0xed, 0x96, 0x8f, 0x70, 0x49, 0x02, 0x5f, 0x36, 0xaa, - 0xe4, 0xe5, 0x65, 0xce, 0xc3, 0xc0, 0xc4, 0xf8, 0x08, 0xa8, 0xad, 0x66, 0xf6, 0x7f, 0x9a, 0x7b, 0xfa, 0xe5, 0xb6, - 0x6d, 0xe4, 0xff, 0xbf, 0xa7, 0x60, 0x98, 0x5c, 0x2a, 0x26, 0x24, 0x4d, 0x4a, 0x96, 0xed, 0x48, 0x96, 0xdd, 0x36, - 0x49, 0xe7, 0xdc, 0x71, 0x9b, 0x4e, 0xe2, 0xcb, 0xdc, 0xd5, 0xf5, 0x58, 0x14, 0x05, 0x49, 0xbc, 0x50, 0xa4, 0x86, - 0xa4, 0x6c, 0xb9, 0x2a, 0xef, 0x59, 0xfa, 0x2c, 0xf7, 0x64, 0xbf, 0xd9, 0x5d, 0x00, 0x04, 0x3f, 0xf4, 0xe1, 0x26, - 0xbd, 0xfb, 0x4d, 0xcf, 0x17, 0x11, 0x04, 0x40, 0x60, 0x01, 0x2c, 0xf6, 0x7b, 0x9f, 0x38, 0x22, 0xb0, 0xa6, 0x91, - 0x6f, 0x3a, 0x5a, 0x62, 0xc6, 0x4c, 0x46, 0x9e, 0x23, 0x02, 0x13, 0x45, 0xa8, 0x77, 0xa8, 0x85, 0xe0, 0xeb, 0x52, - 0x1c, 0x5d, 0x6b, 0x1c, 0x2f, 0x47, 0x21, 0xb3, 0x70, 0xbb, 0xc3, 0x27, 0xd7, 0xa3, 0xe5, 0x68, 0x04, 0xc9, 0x54, - 0x9e, 0x38, 0x26, 0x84, 0x87, 0x89, 0x53, 0x64, 0xdb, 0x72, 0xa3, 0x0f, 0x93, 0xb2, 0xb3, 0xea, 0xf0, 0xc1, 0xa4, - 0x03, 0x24, 0x32, 0xf4, 0x81, 0x0c, 0x58, 0xb4, 0x86, 0x53, 0x3b, 0xd0, 0x3f, 0xc0, 0xee, 0x4b, 0xf5, 0x7e, 0xd3, - 0xd1, 0x1f, 0x5c, 0xeb, 0x1f, 0x10, 0xc6, 0x98, 0x64, 0xf8, 0x35, 0xed, 0x5e, 0xdd, 0xd4, 0x49, 0x37, 0xbd, 0xc4, - 0x74, 0x03, 0x20, 0x9b, 0x7d, 0x13, 0x78, 0xd3, 0x28, 0x4e, 0xb3, 0xc0, 0xd7, 0x6f, 0xfa, 0x17, 0x41, 0xeb, 0x7a, - 0x9e, 0xb5, 0x8c, 0x1b, 0xd3, 0xcf, 0xd4, 0x4c, 0x25, 0x02, 0x61, 0x62, 0xa2, 0x92, 0x4d, 0x95, 0xd4, 0x13, 0xb4, - 0xb5, 0xa2, 0x40, 0xcd, 0x58, 0xc9, 0xcf, 0x06, 0x50, 0xaf, 0x92, 0xf6, 0x04, 0xf3, 0x37, 0xe9, 0xd8, 0xd2, 0xe8, - 0x13, 0x43, 0xf1, 0x7a, 0xb9, 0xc6, 0xab, 0x3c, 0x2b, 0x6e, 0x4b, 0x0c, 0xd5, 0x2b, 0xfc, 0x5b, 0xe8, 0xf9, 0x89, - 0x6a, 0x9b, 0x59, 0xba, 0x77, 0x87, 0xdf, 0x94, 0xe9, 0x02, 0xb8, 0xbf, 0xc1, 0x30, 0x22, 0x8a, 0x33, 0x0d, 0xe2, - 0xcf, 0xc0, 0x17, 0x87, 0x55, 0x5b, 0x2e, 0xde, 0x6b, 0xcb, 0xc8, 0x39, 0x32, 0xf8, 0x16, 0x2f, 0xbf, 0x16, 0x8f, - 0x42, 0x56, 0x0a, 0x34, 0x41, 0x34, 0x7d, 0x04, 0x0b, 0x98, 0xc5, 0x97, 0xf1, 0x7d, 0x55, 0x5d, 0xf1, 0x7a, 0xb8, - 0xfb, 0xee, 0xc5, 0x0b, 0x10, 0xf6, 0x9b, 0x48, 0xbe, 0xd7, 0xe2, 0xf9, 0x43, 0x05, 0xa1, 0x53, 0x39, 0x53, 0x68, - 0x9f, 0x21, 0x68, 0x98, 0x0c, 0xcc, 0xb9, 0xf0, 0x2e, 0x00, 0x94, 0xc4, 0xaf, 0xe9, 0x61, 0x7e, 0x2b, 0x32, 0x1c, - 0x8b, 0xfc, 0xc2, 0xca, 0xe5, 0x0c, 0xd8, 0x35, 0x5a, 0x2c, 0x33, 0x8c, 0x88, 0x0b, 0x03, 0x60, 0xb9, 0xae, 0x61, - 0x84, 0x4d, 0xc0, 0xd2, 0x05, 0x99, 0x98, 0xeb, 0x5a, 0x30, 0xae, 0x97, 0x71, 0xa2, 0x17, 0x90, 0x17, 0xe2, 0x77, - 0x94, 0x27, 0xc1, 0x63, 0xc2, 0xa7, 0xe1, 0x9b, 0x45, 0x38, 0xf9, 0x96, 0x8f, 0x7a, 0x97, 0x06, 0xcc, 0xe0, 0x53, - 0x3f, 0xfd, 0x56, 0xd8, 0x38, 0x59, 0x88, 0x92, 0x59, 0x9a, 0xe6, 0xf0, 0xd9, 0x3a, 0xca, 0xcf, 0x9f, 0xad, 0xd3, - 0x7c, 0xf0, 0x6c, 0xed, 0x01, 0x25, 0x97, 0xeb, 0x30, 0xd1, 0xc2, 0x9f, 0xa6, 0x98, 0x1e, 0x6c, 0x2a, 0x2a, 0xd7, - 0x50, 0xa1, 0x3e, 0xe0, 0x6a, 0xf3, 0x45, 0x12, 0xcc, 0xbd, 0xe4, 0x81, 0xb4, 0xec, 0xa6, 0xaa, 0x8a, 0x37, 0x74, - 0x8d, 0xf0, 0x3a, 0xcd, 0x97, 0x50, 0xbc, 0xae, 0x7d, 0x2d, 0xcb, 0x18, 0x9f, 0x9c, 0x54, 0x35, 0xc2, 0xb7, 0x6e, - 0xf5, 0x97, 0xcc, 0x1e, 0xb3, 0xcc, 0x0b, 0x42, 0x6a, 0xd2, 0x17, 0x39, 0xe4, 0x6b, 0xb3, 0x49, 0xcb, 0xb3, 0x89, - 0xca, 0xdb, 0x05, 0x27, 0x43, 0x18, 0x9f, 0xc6, 0x8d, 0x33, 0xc3, 0xdc, 0x52, 0xcd, 0x0b, 0x48, 0xef, 0xfe, 0xab, - 0xd0, 0x67, 0x00, 0xfd, 0x08, 0xa0, 0xcf, 0x22, 0x3f, 0x1e, 0xb3, 0xbf, 0xbf, 0xbf, 0x90, 0xc9, 0xac, 0x40, 0x2e, - 0x33, 0xe4, 0xfb, 0x30, 0x45, 0x72, 0x21, 0x41, 0x52, 0x81, 0xd2, 0x4e, 0x69, 0x72, 0xc7, 0x24, 0xb9, 0xae, 0x9d, - 0xd3, 0xd8, 0xd9, 0x98, 0x46, 0x3d, 0x88, 0xb1, 0x55, 0x92, 0x9f, 0x1e, 0x50, 0x6d, 0xba, 0xdc, 0xa8, 0x12, 0x80, - 0x21, 0x81, 0x19, 0x16, 0x50, 0x80, 0xbc, 0x9b, 0x03, 0xb7, 0xe0, 0x1f, 0xec, 0x39, 0x4a, 0xbf, 0xdd, 0xf3, 0x32, - 0x65, 0x82, 0xad, 0xf4, 0xb3, 0x53, 0xcc, 0xa4, 0x05, 0xd7, 0x33, 0xc4, 0xde, 0x38, 0x3d, 0xa0, 0x47, 0xad, 0x72, - 0x00, 0x8a, 0x4e, 0x04, 0x27, 0xd7, 0xe3, 0x1d, 0x3c, 0xea, 0x64, 0x40, 0xe2, 0x76, 0x28, 0xf5, 0x72, 0x5d, 0x9b, - 0x73, 0x4a, 0x88, 0x07, 0xf9, 0x81, 0x08, 0x00, 0x0e, 0x1c, 0x55, 0x5d, 0x9b, 0x7b, 0x2b, 0x9c, 0xb9, 0x78, 0xe3, - 0xad, 0x5a, 0x2e, 0x7f, 0x55, 0x1c, 0xad, 0xb4, 0x7c, 0xb4, 0x7c, 0xbe, 0xb8, 0x60, 0xde, 0x2f, 0xa4, 0xb6, 0xad, - 0x19, 0xaa, 0x4d, 0x1b, 0x16, 0x77, 0x26, 0x16, 0x77, 0xbc, 0x61, 0x71, 0xc7, 0x5b, 0x16, 0x37, 0xe4, 0x0b, 0xa9, - 0x49, 0xd0, 0x25, 0xe8, 0xb2, 0x25, 0x81, 0xc7, 0xe9, 0x8a, 0x1e, 0x3f, 0x67, 0x08, 0x27, 0x2b, 0x0d, 0xc1, 0x64, - 0x69, 0x03, 0xac, 0x9a, 0xe0, 0xa2, 0x00, 0xa2, 0x3e, 0x71, 0x79, 0xea, 0xc4, 0xbc, 0x21, 0x33, 0x66, 0x2b, 0xac, - 0xce, 0x17, 0x76, 0x29, 0x65, 0xfd, 0x6e, 0xcd, 0x36, 0xcc, 0x74, 0xb6, 0x65, 0xa6, 0x7e, 0xe9, 0xe8, 0xf2, 0x69, - 0xd3, 0x21, 0x54, 0x27, 0x05, 0x7b, 0x10, 0xcc, 0x38, 0x71, 0xcb, 0x94, 0xf7, 0xe1, 0x66, 0x94, 0xaa, 0xec, 0xa8, - 0x85, 0x97, 0xa6, 0xf7, 0x71, 0x02, 0x7a, 0x10, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x1e, 0x44, 0x3c, 0xc4, 0xca, 0xc6, - 0xcd, 0x54, 0xbc, 0x57, 0xb7, 0x54, 0xbb, 0xdb, 0xa5, 0x1a, 0x0b, 0x2f, 0xcb, 0x58, 0x82, 0x40, 0xf7, 0x20, 0x16, - 0x77, 0xae, 0x6b, 0xff, 0x0f, 0x76, 0x59, 0x03, 0x0a, 0x09, 0x8d, 0x02, 0xa9, 0x23, 0x82, 0x5e, 0x00, 0x25, 0x95, - 0x88, 0x6b, 0x57, 0x89, 0xd6, 0x96, 0x48, 0xb8, 0xff, 0x88, 0xa7, 0xb5, 0x95, 0x28, 0xfe, 0x44, 0xee, 0x91, 0x61, - 0x2f, 0xbc, 0xf1, 0x07, 0xd0, 0xb6, 0xb5, 0xda, 0x26, 0x58, 0xce, 0xaa, 0xb1, 0xd9, 0x12, 0x22, 0xed, 0xfc, 0x02, - 0x47, 0x22, 0x92, 0xe4, 0x76, 0x49, 0xe0, 0xd2, 0xe8, 0x59, 0x93, 0x9b, 0x75, 0x3b, 0x3f, 0x98, 0x06, 0x46, 0x0d, - 0x69, 0x02, 0x66, 0x0b, 0x07, 0x67, 0x92, 0xc3, 0x0a, 0x4d, 0xf7, 0xc8, 0x00, 0x71, 0xec, 0x35, 0x24, 0x19, 0x75, - 0x04, 0xfb, 0x3a, 0x4c, 0xe0, 0x8e, 0xba, 0x76, 0x6e, 0xf2, 0xe7, 0x53, 0xfc, 0xe5, 0xde, 0xe4, 0xcf, 0x47, 0xf8, - 0xab, 0x7d, 0x83, 0xe9, 0xe4, 0x1a, 0xd8, 0x76, 0x65, 0xce, 0xfa, 0x59, 0x69, 0x3b, 0x91, 0x51, 0xd8, 0x23, 0x76, - 0x0d, 0x5f, 0xe0, 0xa7, 0xcf, 0xd6, 0x29, 0xb8, 0x41, 0xaa, 0x73, 0x88, 0xec, 0xc4, 0xc8, 0x1b, 0xcb, 0xa7, 0x1b, - 0xca, 0x47, 0xc6, 0x7f, 0xf9, 0x9a, 0xc7, 0x5d, 0x12, 0x17, 0x57, 0x4a, 0x59, 0xe8, 0x70, 0x3b, 0x0a, 0x22, 0x2f, - 0x79, 0xb8, 0x25, 0x66, 0xa2, 0x25, 0x28, 0x75, 0x29, 0x4c, 0x21, 0x62, 0xb2, 0xac, 0x83, 0xca, 0x14, 0xa9, 0xeb, - 0x03, 0xbf, 0xe7, 0x07, 0xff, 0x48, 0x14, 0x22, 0xad, 0xc4, 0x6e, 0xf2, 0x05, 0x29, 0x7d, 0xe8, 0xf6, 0xd9, 0xba, - 0xc5, 0xea, 0xdd, 0x54, 0x66, 0x5b, 0xa1, 0x02, 0x61, 0x79, 0x90, 0x75, 0x9d, 0x8f, 0x83, 0x1e, 0x2a, 0x99, 0x46, - 0xf1, 0xca, 0x7a, 0xb6, 0xce, 0xce, 0xf5, 0xb9, 0x97, 0x7c, 0x62, 0x63, 0xcb, 0x0f, 0x12, 0x3f, 0x64, 0x7a, 0x4f, - 0x1f, 0x85, 0x5e, 0xf4, 0x89, 0x3f, 0x5a, 0xf1, 0x32, 0x43, 0xb5, 0xf1, 0x4e, 0x4e, 0x57, 0xc0, 0x84, 0x04, 0x74, - 0x48, 0x9a, 0x36, 0x40, 0x41, 0x7b, 0x2d, 0xc5, 0x5b, 0x05, 0x59, 0x58, 0xd4, 0x32, 0xc1, 0xea, 0x11, 0x34, 0xd9, - 0xe0, 0x46, 0x6a, 0xea, 0xb8, 0x5e, 0xba, 0xa9, 0x4e, 0x95, 0x44, 0x93, 0x32, 0x0f, 0xe2, 0x2d, 0xf6, 0xf0, 0xc7, - 0x3f, 0x47, 0x19, 0xaa, 0xf7, 0xff, 0x1c, 0x27, 0xf1, 0x36, 0x7f, 0x50, 0x6d, 0xec, 0xa5, 0xe9, 0x72, 0xce, 0xc6, - 0xa4, 0x31, 0x3b, 0x2f, 0x86, 0x52, 0x26, 0xe5, 0xd5, 0xe1, 0xfc, 0xb2, 0x6c, 0x1f, 0x1f, 0xbe, 0x06, 0x4d, 0x3e, - 0x90, 0x74, 0xf1, 0x64, 0xa2, 0x17, 0x4c, 0xf5, 0x8e, 0x66, 0xee, 0xe1, 0x2f, 0xcb, 0xef, 0xde, 0x3a, 0xdf, 0xc9, - 0xc6, 0x91, 0x6e, 0xe4, 0x43, 0xa1, 0x96, 0xe4, 0x94, 0xa9, 0x32, 0x5e, 0x31, 0xa3, 0x89, 0x17, 0x6d, 0x9e, 0xce, - 0x75, 0x69, 0x97, 0x2d, 0x18, 0x1b, 0x83, 0xc5, 0xaa, 0x59, 0x2b, 0xbd, 0x0d, 0xd9, 0x1d, 0x93, 0x2a, 0xcf, 0xfa, - 0xc7, 0x1a, 0x5a, 0x60, 0x4c, 0x36, 0xae, 0x4a, 0xe5, 0x74, 0x95, 0x32, 0xa5, 0x21, 0xce, 0x81, 0xcf, 0x5c, 0xdd, - 0xe5, 0x95, 0x5d, 0x3d, 0x34, 0x75, 0x65, 0x00, 0x1b, 0x47, 0x76, 0xbe, 0xa1, 0xbc, 0x87, 0x09, 0x99, 0x9b, 0xc7, - 0x66, 0xba, 0x46, 0x0f, 0x62, 0x58, 0x73, 0x38, 0x85, 0xb0, 0xf9, 0x5b, 0x85, 0xfc, 0x61, 0x13, 0xc4, 0x9a, 0xa4, - 0x52, 0x3a, 0x89, 0x3b, 0x84, 0x15, 0x20, 0x9a, 0xc3, 0x0a, 0xc1, 0x4f, 0xe3, 0xda, 0x68, 0xe5, 0x99, 0x8f, 0x30, - 0xd1, 0x69, 0xc4, 0xd2, 0x74, 0x23, 0xc0, 0xe4, 0xa2, 0x9b, 0x7a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0x74, 0x4c, - 0xb8, 0x94, 0x71, 0x82, 0xd5, 0x6f, 0x21, 0x86, 0xbf, 0x9d, 0x73, 0x3b, 0x8e, 0x64, 0x3a, 0xd2, 0xb9, 0x8e, 0x7d, - 0xd3, 0xfb, 0x7b, 0x9d, 0x0f, 0xaa, 0x74, 0x53, 0x36, 0x0e, 0xad, 0x55, 0xc2, 0x7e, 0x35, 0xf9, 0x0c, 0x76, 0x20, - 0xc6, 0x54, 0x41, 0x71, 0x6c, 0x32, 0x61, 0x7e, 0x96, 0x1a, 0x42, 0x5a, 0x23, 0xa3, 0xaa, 0x82, 0x37, 0xcd, 0x93, - 0x81, 0xfe, 0x23, 0xf8, 0x96, 0x8b, 0xe0, 0x43, 0x7c, 0x40, 0x82, 0x6b, 0x69, 0x06, 0x13, 0xf5, 0x58, 0x06, 0x11, - 0xff, 0x0a, 0x24, 0xcd, 0x6e, 0x28, 0xc7, 0xa1, 0xf1, 0x2b, 0xa0, 0xd8, 0x17, 0xb1, 0xb4, 0xf6, 0xd8, 0x8e, 0x80, - 0xb6, 0x1d, 0xdf, 0xb5, 0xfb, 0x5d, 0xd7, 0x75, 0x72, 0xdd, 0x04, 0x9f, 0xa6, 0x4f, 0xfb, 0x1e, 0x7a, 0x6c, 0xd5, - 0x81, 0x56, 0xcb, 0xe8, 0x31, 0xed, 0xda, 0xee, 0x2b, 0x57, 0x37, 0xc9, 0x94, 0x4c, 0xc1, 0x6d, 0x7e, 0x7c, 0xc7, - 0x92, 0xcf, 0x9e, 0x4a, 0xb9, 0xf3, 0xfd, 0xc6, 0x73, 0xe4, 0x3a, 0x80, 0x84, 0xb3, 0x78, 0xf1, 0x88, 0x29, 0x74, - 0x74, 0x53, 0xf7, 0xc3, 0x38, 0x65, 0xea, 0x1c, 0x48, 0xea, 0xf0, 0x99, 0x93, 0xf8, 0xe9, 0xfd, 0xdb, 0x0f, 0x1f, - 0x74, 0x13, 0x33, 0x64, 0xa6, 0x6a, 0xef, 0x7c, 0x43, 0xed, 0xc0, 0xfe, 0x8d, 0xfb, 0x8e, 0x6e, 0x18, 0x62, 0x2b, - 0xcb, 0x7b, 0x8e, 0xca, 0x6a, 0x5b, 0x8e, 0xdf, 0x3c, 0xfc, 0xcb, 0xc4, 0x0b, 0xee, 0x35, 0xaf, 0x06, 0xdc, 0xb0, - 0xfd, 0x7a, 0x2b, 0x95, 0xcc, 0x83, 0xe8, 0xb6, 0xa1, 0xd4, 0x5b, 0x35, 0x94, 0x02, 0x33, 0x55, 0xc3, 0x55, 0xcb, - 0x78, 0xae, 0xdc, 0xce, 0x90, 0xe0, 0x78, 0x17, 0xb8, 0x14, 0x8e, 0xe6, 0x33, 0x06, 0xcd, 0x23, 0x9c, 0x57, 0x47, - 0xdd, 0x50, 0xcc, 0xd9, 0x10, 0x09, 0x5b, 0x3f, 0x04, 0x43, 0x38, 0xa6, 0xaa, 0xc1, 0xca, 0x94, 0x9b, 0x34, 0x63, - 0x55, 0x3a, 0x21, 0x0a, 0xf3, 0x36, 0x63, 0xf3, 0x05, 0x4b, 0xbc, 0x6c, 0x99, 0xb0, 0xdb, 0x30, 0xbe, 0x7f, 0x52, - 0x98, 0x99, 0xef, 0xa8, 0x3c, 0x0b, 0xa6, 0x33, 0x59, 0xfb, 0xbc, 0xc5, 0x06, 0x72, 0x01, 0xb7, 0x7e, 0x20, 0xff, - 0xcf, 0xef, 0xb6, 0xfd, 0x9f, 0xdf, 0x77, 0x56, 0x85, 0xee, 0xf3, 0xa1, 0x99, 0x0d, 0xf6, 0xd8, 0x17, 0xcd, 0x5f, - 0x2a, 0xc3, 0xbc, 0xb9, 0x4e, 0x6d, 0x11, 0xe0, 0x7d, 0x6d, 0x09, 0x6a, 0x85, 0xe5, 0x7d, 0xf3, 0xa8, 0x81, 0xc1, - 0xbc, 0x76, 0x8e, 0x0c, 0x2a, 0x7d, 0xd6, 0xd0, 0x86, 0x46, 0x6f, 0xaf, 0x15, 0xf9, 0xe3, 0x10, 0xde, 0x35, 0x87, - 0xcf, 0x1c, 0x3e, 0x97, 0x0c, 0xbe, 0x1e, 0x0e, 0x65, 0xce, 0x35, 0xb5, 0x29, 0x98, 0xbe, 0x9f, 0xd7, 0x4a, 0xf8, - 0xe5, 0xd9, 0x73, 0x0c, 0xf2, 0x49, 0x1f, 0xbc, 0x1e, 0xa2, 0x91, 0xd6, 0xe9, 0x28, 0x29, 0x88, 0x95, 0x8d, 0xa8, - 0x8d, 0x8c, 0xac, 0x6b, 0x9d, 0xd6, 0xf0, 0x1a, 0x94, 0x62, 0x22, 0xae, 0x7c, 0x68, 0x98, 0xaf, 0x87, 0x5c, 0xb4, - 0xc3, 0xed, 0x42, 0x7b, 0xd5, 0xad, 0xcd, 0x05, 0xa3, 0x25, 0xa0, 0x9b, 0x1a, 0x29, 0x5c, 0xb0, 0x32, 0x2b, 0x24, - 0x69, 0x28, 0x51, 0x07, 0xa6, 0x7e, 0x98, 0x63, 0x1e, 0x90, 0x77, 0x9b, 0x6c, 0xa7, 0x7e, 0xda, 0x6d, 0x3b, 0x75, - 0xb5, 0x97, 0xed, 0xd4, 0x4f, 0x5f, 0xdc, 0x76, 0xea, 0x9d, 0x6a, 0x3b, 0x05, 0x8b, 0xf8, 0x96, 0xed, 0x65, 0xd0, - 0x24, 0xcc, 0x24, 0xe2, 0xfb, 0x74, 0xe0, 0x72, 0x92, 0x36, 0xf5, 0x67, 0x0c, 0xd8, 0x74, 0xbe, 0x2a, 0x61, 0x3c, - 0x05, 0xe3, 0xa6, 0x3f, 0xdf, 0x0c, 0x29, 0x8c, 0xa7, 0xaa, 0x11, 0x52, 0xc4, 0x23, 0xa1, 0x16, 0xd1, 0x8d, 0xc8, - 0xf0, 0xc7, 0x31, 0x45, 0x2c, 0x24, 0xeb, 0xd0, 0x50, 0xb2, 0x3d, 0x4b, 0xab, 0xae, 0xb6, 0x30, 0x0d, 0xea, 0xa1, - 0x55, 0x91, 0x6c, 0xd8, 0x7e, 0x29, 0x62, 0x3e, 0xa8, 0x3d, 0x48, 0xeb, 0x59, 0x8a, 0x9f, 0xb0, 0xd6, 0x7f, 0x59, - 0xb9, 0xdf, 0x5e, 0xbb, 0xfd, 0x8e, 0x0b, 0x4e, 0xcb, 0xc0, 0xe4, 0x61, 0x81, 0xd3, 0xef, 0x74, 0xa0, 0xe0, 0x5e, - 0x29, 0x68, 0x43, 0x41, 0xa0, 0x14, 0x74, 0xa1, 0xc0, 0x57, 0x0a, 0x8e, 0xa0, 0x60, 0xac, 0x14, 0x1c, 0x43, 0xc1, - 0x9d, 0x9e, 0x5f, 0x47, 0x72, 0xb8, 0xc7, 0xc6, 0x8d, 0x49, 0x4c, 0x85, 0x28, 0x3b, 0x36, 0x5d, 0xb0, 0x26, 0xf2, - 0xa6, 0xbd, 0xd8, 0x24, 0xf9, 0x5e, 0x2f, 0x31, 0xef, 0x67, 0x8c, 0x02, 0x28, 0xbf, 0xc1, 0x3b, 0xc7, 0xce, 0x62, - 0xb0, 0x27, 0x16, 0x81, 0x09, 0x04, 0x1c, 0x34, 0xdd, 0x00, 0x99, 0x4d, 0x5f, 0xae, 0x9c, 0x08, 0xee, 0xa0, 0xac, - 0x65, 0xf1, 0x8e, 0x3e, 0x67, 0xc9, 0x2d, 0x50, 0x98, 0x78, 0xb4, 0x54, 0xb9, 0xe0, 0x97, 0x50, 0xf4, 0xbf, 0x61, - 0xa3, 0xe5, 0x54, 0xbb, 0x8c, 0xa7, 0x3b, 0x75, 0xf6, 0xea, 0x2b, 0x18, 0xa5, 0x4e, 0x0a, 0x10, 0x4b, 0x6c, 0x4b, - 0xfe, 0x2d, 0x7a, 0xcc, 0xcb, 0xf5, 0x33, 0x18, 0x9b, 0x96, 0x91, 0xc5, 0x08, 0x7c, 0x07, 0x60, 0xa4, 0x28, 0xcd, - 0x2f, 0x01, 0xce, 0xca, 0xf3, 0x95, 0xa7, 0x8c, 0xe7, 0xec, 0x07, 0x96, 0xa6, 0xde, 0x54, 0xd4, 0xaf, 0x8f, 0x13, - 0xac, 0x64, 0x24, 0xff, 0x85, 0x00, 0x04, 0x61, 0x5a, 0x50, 0x33, 0x86, 0x48, 0xe2, 0x7b, 0x0d, 0xcc, 0x6d, 0x60, - 0x43, 0x15, 0x86, 0x01, 0x81, 0x0d, 0x4b, 0x58, 0x56, 0xe1, 0xc3, 0xe1, 0xbf, 0x63, 0x61, 0xb5, 0x30, 0xf3, 0xa6, - 0xd5, 0x22, 0xda, 0x07, 0xb9, 0x3a, 0x36, 0xa9, 0x41, 0x2f, 0x15, 0x7e, 0x8e, 0x4a, 0x38, 0x8c, 0xa7, 0x7f, 0xaa, - 0x3e, 0x78, 0x8b, 0x1e, 0xff, 0x43, 0x64, 0x06, 0xd9, 0xd0, 0x46, 0x18, 0x6b, 0x36, 0x80, 0xb0, 0x17, 0x65, 0x33, - 0x0b, 0x5d, 0xae, 0x5a, 0xed, 0xc8, 0x30, 0x6d, 0x5c, 0xdb, 0x75, 0xd5, 0xd1, 0xb4, 0x97, 0x4c, 0x47, 0x5e, 0xcb, - 0x6d, 0x1f, 0x9b, 0xe2, 0xcf, 0x76, 0xba, 0x46, 0x8e, 0x3d, 0x68, 0xe3, 0xe0, 0x6e, 0x3d, 0x89, 0xa3, 0xcc, 0x9a, - 0x78, 0xf3, 0x20, 0x7c, 0xe8, 0xcd, 0xe3, 0x28, 0x4e, 0x17, 0x9e, 0xcf, 0xfa, 0x05, 0x43, 0xdd, 0xc7, 0x10, 0x06, - 0xdc, 0x8b, 0xce, 0xb5, 0xdb, 0x09, 0x9b, 0x53, 0x6b, 0x19, 0xa1, 0x60, 0x12, 0xb2, 0x55, 0xce, 0x3f, 0x5f, 0xaa, - 0x4c, 0x55, 0x71, 0xcb, 0x51, 0x0b, 0xa0, 0x48, 0x79, 0xf8, 0x03, 0x08, 0xfa, 0xd3, 0x5f, 0x78, 0x63, 0x8c, 0xd8, - 0x67, 0xb7, 0xbb, 0x09, 0x9b, 0x6b, 0x76, 0x77, 0x63, 0xe7, 0x49, 0x7c, 0x7f, 0x06, 0xa3, 0xc5, 0xc6, 0x56, 0xca, - 0xc2, 0x09, 0xbe, 0xb1, 0xd0, 0xe3, 0x42, 0xf4, 0x63, 0x21, 0x23, 0x0e, 0xbd, 0xb1, 0x79, 0x1f, 0x5e, 0xf7, 0xda, - 0x9a, 0xd3, 0x9f, 0x07, 0x91, 0x45, 0xd3, 0x39, 0x76, 0x16, 0x4a, 0x5f, 0x2a, 0xfc, 0x8c, 0x35, 0x56, 0x77, 0x35, - 0xa7, 0x0f, 0xcc, 0xda, 0x24, 0x8c, 0xef, 0x7b, 0xb3, 0x60, 0x3c, 0x66, 0x51, 0x1f, 0xc7, 0x2c, 0x0b, 0x59, 0x18, - 0x06, 0x8b, 0x34, 0x48, 0xfb, 0x73, 0x6f, 0xc5, 0x7b, 0x3d, 0xdc, 0xd4, 0x6b, 0x87, 0xf7, 0xda, 0xd9, 0xbb, 0x57, - 0xa5, 0x1b, 0xf0, 0xee, 0xa0, 0x7e, 0xf8, 0xd0, 0xba, 0x9a, 0x53, 0x99, 0xe7, 0xde, 0xbd, 0x2e, 0x12, 0xb6, 0x9e, - 0x7b, 0xc9, 0x34, 0x88, 0x7a, 0x4e, 0x6e, 0xdf, 0xad, 0x69, 0x63, 0x3c, 0x3d, 0x39, 0x39, 0xc9, 0xed, 0xb1, 0x78, - 0x72, 0xc6, 0xe3, 0xdc, 0xf6, 0xc5, 0xd3, 0x64, 0xe2, 0x38, 0x93, 0x49, 0x6e, 0x07, 0xa2, 0xa0, 0xd3, 0xf6, 0xc7, - 0x9d, 0x76, 0x6e, 0xdf, 0x2b, 0x35, 0x72, 0x9b, 0xf1, 0xa7, 0x84, 0x8d, 0xfb, 0xb8, 0x91, 0xee, 0x69, 0xe9, 0x8f, - 0x1d, 0x27, 0x47, 0x0c, 0x70, 0x5d, 0xc2, 0x4d, 0x28, 0xeb, 0xb9, 0x59, 0xef, 0x5d, 0x53, 0x2b, 0x3e, 0xe7, 0xfb, - 0x8d, 0xf5, 0xc6, 0x5e, 0xf2, 0xe9, 0x46, 0x53, 0x66, 0xe1, 0x79, 0x54, 0x6d, 0x2d, 0xc0, 0x60, 0xad, 0x7a, 0x10, - 0xca, 0xaa, 0x3f, 0x8a, 0x13, 0x38, 0xb3, 0x89, 0x37, 0x0e, 0x96, 0x69, 0xcf, 0x6d, 0x2f, 0x56, 0xa2, 0x88, 0xef, - 0xf5, 0xa2, 0x00, 0xcf, 0x5e, 0x2f, 0x8d, 0xc3, 0x60, 0x2c, 0x8a, 0x36, 0x9d, 0x25, 0xb7, 0x6d, 0xf4, 0xd1, 0x91, - 0x3b, 0xc0, 0x70, 0x04, 0x5e, 0x18, 0x6a, 0x76, 0x27, 0xd5, 0x98, 0x97, 0xa2, 0x88, 0x57, 0x73, 0x52, 0x82, 0x0b, - 0x3a, 0x6d, 0xbb, 0x87, 0x8b, 0x95, 0xdc, 0xf3, 0xee, 0xd1, 0x62, 0x95, 0x7f, 0x3d, 0x67, 0xe3, 0xc0, 0xd3, 0x5a, - 0xc5, 0x6e, 0x72, 0x1d, 0x10, 0x03, 0x1b, 0xeb, 0x0d, 0xdb, 0x54, 0x1c, 0x0b, 0x08, 0xf9, 0xf7, 0x24, 0x98, 0x2f, - 0xe2, 0x24, 0xf3, 0xa2, 0x2c, 0xcf, 0x87, 0x37, 0x79, 0xde, 0xbf, 0x0a, 0x5a, 0xd7, 0xff, 0x6c, 0xd1, 0x3d, 0x4d, - 0x6a, 0x93, 0xdc, 0xb8, 0x31, 0xdf, 0x32, 0xd5, 0x48, 0x03, 0xae, 0x31, 0x34, 0xd0, 0x50, 0x2b, 0xd3, 0x2d, 0x59, - 0xaf, 0x4c, 0x40, 0x96, 0xd5, 0xc9, 0xe8, 0xa3, 0x5c, 0x05, 0x6f, 0x20, 0xa8, 0xf0, 0x96, 0x0d, 0xae, 0x14, 0x83, - 0x0f, 0x20, 0x56, 0xb0, 0x32, 0xd9, 0xdb, 0x3f, 0xdb, 0x44, 0x33, 0x7e, 0xb3, 0x9b, 0x66, 0xfc, 0x39, 0xdb, 0x87, - 0x66, 0xfc, 0xe6, 0x8b, 0xd3, 0x8c, 0xcf, 0xea, 0xf6, 0xf6, 0x17, 0xf1, 0x40, 0x97, 0x42, 0x7e, 0xb8, 0x9a, 0x12, - 0x8a, 0x64, 0x73, 0xf1, 0x87, 0xcd, 0xe3, 0x45, 0x6f, 0x94, 0x9b, 0x8d, 0x6e, 0x6e, 0x90, 0xc7, 0xbe, 0x8b, 0x06, - 0xff, 0x48, 0xd4, 0xe7, 0xc9, 0x64, 0xf0, 0x26, 0x56, 0x0a, 0xe4, 0x13, 0x37, 0x7f, 0x28, 0x45, 0x1d, 0xa0, 0x37, - 0xc2, 0xec, 0x11, 0xf3, 0x32, 0x80, 0xd3, 0x32, 0x99, 0xf9, 0x8e, 0xa5, 0xb9, 0x57, 0xbf, 0x3c, 0x84, 0x96, 0xb4, - 0xb1, 0x14, 0xae, 0x29, 0x35, 0x51, 0xe2, 0x94, 0x65, 0xdc, 0x97, 0xf4, 0xdb, 0x87, 0x8b, 0x71, 0xeb, 0x22, 0x36, - 0xf2, 0x20, 0x7d, 0x57, 0x75, 0x0c, 0xe1, 0xea, 0x97, 0x81, 0x3a, 0x9d, 0x9c, 0x9b, 0x6c, 0xa9, 0x89, 0x97, 0xe1, - 0x35, 0x35, 0x3f, 0x2f, 0xcd, 0xb4, 0xa7, 0x36, 0xe4, 0x09, 0xa0, 0x6a, 0x97, 0x31, 0xb7, 0xca, 0x5f, 0x73, 0x0a, - 0x10, 0x73, 0x5a, 0xa1, 0x3f, 0xed, 0x98, 0x9a, 0x07, 0xe3, 0x3c, 0x37, 0xfa, 0x02, 0x10, 0xca, 0x45, 0xcb, 0x76, - 0x11, 0x71, 0xe9, 0xbd, 0xb4, 0x2a, 0xe0, 0x4a, 0x3a, 0xd2, 0xc0, 0x5d, 0x80, 0x4a, 0x9b, 0xeb, 0xeb, 0x38, 0xcc, - 0x74, 0x8d, 0xc0, 0x47, 0xa6, 0x0e, 0xca, 0x84, 0x40, 0xe3, 0x2d, 0xe1, 0x2f, 0x5e, 0x89, 0x82, 0xba, 0xd1, 0x24, - 0x01, 0x07, 0x75, 0xf2, 0xe0, 0xfd, 0x2e, 0xe4, 0xda, 0x84, 0x76, 0x78, 0x1d, 0x7c, 0xc8, 0x75, 0x49, 0xfb, 0xe1, - 0xf6, 0x3b, 0x3b, 0x3d, 0x80, 0x06, 0x67, 0x15, 0xd5, 0xfd, 0x0e, 0x93, 0x40, 0x20, 0x25, 0xd2, 0x7b, 0xd3, 0x4e, - 0xef, 0xb5, 0x17, 0x6b, 0x11, 0x39, 0x22, 0xf3, 0x16, 0x16, 0xb0, 0xf8, 0x88, 0x7b, 0x39, 0xc6, 0x53, 0x82, 0x54, - 0xf4, 0x97, 0x29, 0xe0, 0x46, 0x64, 0x54, 0x11, 0xff, 0xf4, 0xfd, 0x65, 0x92, 0xc6, 0x49, 0x6f, 0x11, 0x07, 0x51, - 0xc6, 0x92, 0x1c, 0x41, 0x75, 0x8d, 0xf0, 0x11, 0xe0, 0xb9, 0x59, 0xc7, 0x0b, 0xcf, 0x0f, 0xb2, 0x87, 0x9e, 0xc3, - 0x49, 0x0a, 0xa7, 0xcf, 0xa9, 0x03, 0xa7, 0xb1, 0x7e, 0x8f, 0x43, 0xf3, 0x25, 0x12, 0x7e, 0x49, 0x9d, 0x9c, 0x51, - 0xb7, 0x79, 0x5f, 0x79, 0x4b, 0xb1, 0x33, 0x80, 0xfc, 0xf0, 0x12, 0x6b, 0x0a, 0x58, 0x1e, 0x96, 0xda, 0x19, 0xb3, - 0xa9, 0x89, 0x58, 0x1b, 0xe4, 0xf2, 0xe2, 0xcf, 0xee, 0x1a, 0x9a, 0xd3, 0x5c, 0x0c, 0x14, 0x8f, 0xb1, 0xcf, 0xc8, - 0x7a, 0x1e, 0x64, 0x9a, 0x32, 0xf7, 0xa9, 0x39, 0x62, 0x93, 0x38, 0x61, 0x14, 0x67, 0xd5, 0x3d, 0x59, 0xac, 0xf6, - 0xef, 0x7e, 0xfb, 0xf4, 0x9b, 0xfb, 0x89, 0xe2, 0xac, 0x25, 0x3a, 0x33, 0x76, 0xf4, 0x56, 0xbf, 0xcf, 0x80, 0x34, - 0x24, 0xc8, 0xfb, 0x14, 0xd2, 0xaa, 0xa7, 0xeb, 0xfd, 0xc6, 0x70, 0x56, 0x8b, 0x98, 0xdf, 0x79, 0x09, 0x0b, 0xbd, - 0x2c, 0xb8, 0x13, 0x34, 0x63, 0xe7, 0x68, 0xb1, 0x12, 0x6b, 0x8c, 0x17, 0xde, 0x23, 0x16, 0xa9, 0x32, 0x14, 0xb1, - 0x48, 0xd5, 0x62, 0x5c, 0xa4, 0x7e, 0x6d, 0x36, 0x22, 0xc2, 0x43, 0xe5, 0xa6, 0xef, 0x2e, 0x56, 0xea, 0x15, 0x5d, - 0x34, 0x93, 0x37, 0x75, 0x35, 0x34, 0xd7, 0x3c, 0x18, 0x8f, 0x43, 0x96, 0x97, 0x16, 0xba, 0xbc, 0x96, 0x0a, 0x70, - 0x24, 0x1c, 0xbc, 0x51, 0x1a, 0x87, 0xcb, 0x8c, 0x35, 0x83, 0x8b, 0x80, 0xd3, 0x76, 0x0a, 0xe0, 0xe0, 0xef, 0xf2, - 0x58, 0xbb, 0x40, 0x6e, 0xc3, 0x36, 0x71, 0xfa, 0x10, 0x89, 0xd7, 0xea, 0x94, 0x87, 0x0e, 0xaf, 0xe4, 0xa0, 0xcd, - 0x86, 0x89, 0x98, 0x70, 0x2d, 0x11, 0xf6, 0xd6, 0x6c, 0x97, 0x97, 0xc9, 0x68, 0xa4, 0xb2, 0x28, 0x2f, 0x4f, 0xe6, - 0xcf, 0x39, 0x63, 0xaf, 0x9a, 0xcf, 0xd8, 0x2b, 0x71, 0xc6, 0xb6, 0xef, 0xcc, 0xa7, 0x13, 0x17, 0xfe, 0xeb, 0x17, - 0x13, 0xea, 0x39, 0x5a, 0x67, 0xb1, 0xd2, 0xdc, 0xc5, 0x4a, 0xb3, 0xda, 0x8b, 0x95, 0x86, 0x5d, 0xa3, 0x49, 0x86, - 0x69, 0xb7, 0x0d, 0xd3, 0xd1, 0xa0, 0x10, 0xfe, 0x9c, 0xd2, 0x2b, 0xf7, 0x10, 0xde, 0x41, 0xab, 0x6e, 0xfd, 0x5d, - 0x7b, 0xfb, 0x51, 0xa7, 0xb3, 0x24, 0x90, 0xb6, 0x61, 0x67, 0xde, 0x68, 0xc4, 0xc6, 0xbd, 0x49, 0xec, 0x2f, 0xd3, - 0x7f, 0xf3, 0xf1, 0x73, 0x20, 0x6e, 0x45, 0x04, 0x95, 0x7e, 0x44, 0x53, 0x50, 0x94, 0xdc, 0x31, 0xd1, 0xc3, 0x5a, - 0xae, 0x53, 0x8f, 0xc2, 0x06, 0xb7, 0xed, 0xc3, 0x86, 0x4d, 0xde, 0x0c, 0xe8, 0x3f, 0x6d, 0x95, 0x36, 0xa3, 0x98, - 0xcf, 0x00, 0xcb, 0x56, 0x70, 0x3c, 0x1e, 0x1a, 0x7c, 0x35, 0x9d, 0x93, 0xe6, 0xe1, 0x5e, 0x8b, 0x2f, 0xdd, 0x88, - 0x4b, 0x85, 0xdf, 0x5b, 0xdc, 0x13, 0x64, 0x7b, 0xaf, 0x9b, 0xf6, 0x48, 0xad, 0xd7, 0x2d, 0x17, 0x42, 0x51, 0x77, - 0x4f, 0x2c, 0xff, 0xf4, 0xd5, 0x21, 0xfc, 0x47, 0x54, 0xfd, 0xcf, 0x59, 0x13, 0xa1, 0x7e, 0x51, 0x36, 0xbd, 0x26, - 0x52, 0x09, 0x09, 0xf1, 0xfd, 0xeb, 0x4f, 0x26, 0x8f, 0x6b, 0xb0, 0x77, 0x6d, 0xb2, 0x66, 0xaa, 0xd6, 0xfe, 0x36, - 0x8e, 0x21, 0xa5, 0x65, 0xbd, 0xba, 0x00, 0x0f, 0x59, 0x97, 0x67, 0x03, 0x68, 0x24, 0xf8, 0x08, 0xd2, 0xe2, 0xeb, - 0xd8, 0x86, 0x58, 0x89, 0xb7, 0x9b, 0x58, 0x89, 0x37, 0xbb, 0x59, 0x89, 0xef, 0xf7, 0x62, 0x25, 0xde, 0x7c, 0x71, - 0x56, 0xe2, 0x6d, 0x9d, 0x95, 0xb8, 0x8a, 0x85, 0x05, 0xab, 0x79, 0xb1, 0xe4, 0x3f, 0x3f, 0x92, 0x52, 0xee, 0x32, - 0x1e, 0x74, 0x1d, 0x0a, 0x05, 0x7c, 0xf5, 0x87, 0x19, 0x0b, 0xdc, 0x88, 0xef, 0xd1, 0xa2, 0xab, 0x60, 0x2d, 0x38, - 0x66, 0xc7, 0xef, 0x28, 0xc5, 0x61, 0x1c, 0x4d, 0x7f, 0x02, 0xa5, 0x2c, 0x88, 0x03, 0x13, 0xe5, 0x45, 0x90, 0xfe, - 0x14, 0x2f, 0x96, 0x8b, 0x0b, 0xe8, 0xeb, 0x63, 0x90, 0x06, 0xa3, 0x90, 0x49, 0x0f, 0x5d, 0xb2, 0x40, 0xe3, 0x32, - 0x71, 0xb0, 0xf9, 0x14, 0x3f, 0xbd, 0x95, 0xf8, 0x89, 0x56, 0xa1, 0xfc, 0x37, 0x99, 0xb6, 0xe9, 0xcd, 0x8c, 0x88, - 0x50, 0x02, 0x2a, 0x83, 0x7e, 0x3c, 0x33, 0x72, 0x15, 0x1b, 0x0d, 0xb3, 0x14, 0xf6, 0x0e, 0x1b, 0xfb, 0x61, 0x35, - 0xa6, 0x66, 0x69, 0x98, 0x32, 0x34, 0x55, 0x5d, 0x0c, 0x3f, 0x8f, 0x97, 0x29, 0x1b, 0xc7, 0xf7, 0x91, 0x6e, 0x46, - 0xd2, 0xaa, 0x1f, 0x34, 0x9c, 0xb2, 0x0d, 0x26, 0x55, 0xfc, 0x80, 0x84, 0x72, 0x9c, 0xb4, 0x74, 0xc8, 0xe9, 0xb9, - 0x5c, 0x58, 0xa4, 0x6a, 0xb6, 0x70, 0x8a, 0xba, 0xcc, 0xfe, 0xf3, 0xa4, 0xd5, 0x8a, 0x07, 0x8f, 0x6b, 0x29, 0x4c, - 0x35, 0x62, 0x9b, 0x4b, 0x85, 0xd3, 0x56, 0x24, 0x84, 0x8b, 0x22, 0x3e, 0x44, 0xc3, 0xc2, 0xf1, 0x37, 0xe4, 0x2b, - 0x5a, 0xbc, 0x85, 0xe8, 0x1a, 0xf9, 0x92, 0xaf, 0x07, 0x8f, 0x96, 0x40, 0x8f, 0xaf, 0x15, 0x30, 0xbe, 0xbb, 0x63, - 0x49, 0xe8, 0x3d, 0xb4, 0x8c, 0x3c, 0x8e, 0x7e, 0x00, 0x00, 0xbc, 0x89, 0xef, 0x23, 0xb5, 0x02, 0x26, 0x31, 0x69, - 0xd8, 0x4b, 0x8d, 0x71, 0x3d, 0xc0, 0x53, 0x44, 0x19, 0x01, 0xa4, 0x8f, 0x9d, 0xb2, 0x7f, 0x98, 0xf4, 0xef, 0x3f, - 0x8d, 0xdc, 0xbc, 0x8c, 0xe5, 0x87, 0xfe, 0xbe, 0xd8, 0xe3, 0x33, 0xcf, 0x9f, 0x3f, 0xd9, 0x3c, 0xed, 0x72, 0xda, - 0xf2, 0x86, 0xd6, 0xc6, 0xc6, 0x53, 0x00, 0xa3, 0xb8, 0x8a, 0x97, 0xfe, 0x0c, 0x6d, 0x4d, 0xbf, 0xdc, 0x7c, 0x33, - 0xe8, 0x13, 0xb3, 0x77, 0xca, 0xa9, 0x57, 0x8a, 0x0a, 0x28, 0xe0, 0xf7, 0xdf, 0x42, 0x60, 0xca, 0xff, 0x21, 0x18, - 0xea, 0xbb, 0x86, 0x73, 0xf1, 0xc1, 0xe3, 0x36, 0x6f, 0x1f, 0x92, 0x4c, 0xf2, 0x90, 0x0f, 0x42, 0xb9, 0xd6, 0x8c, - 0x64, 0xf2, 0x2a, 0xd0, 0xd4, 0xf0, 0x6a, 0x9b, 0x22, 0xc7, 0x89, 0xaf, 0x30, 0x9b, 0xd8, 0x74, 0x6e, 0xea, 0x6f, - 0x32, 0x8e, 0xad, 0x2a, 0x48, 0x86, 0x9b, 0x3c, 0x30, 0x44, 0x5f, 0xd5, 0x77, 0xf3, 0x20, 0x32, 0x31, 0x3a, 0x7a, - 0xfd, 0x8d, 0xb7, 0x82, 0xf8, 0xc0, 0x80, 0xdc, 0xaa, 0xaf, 0xa0, 0xd0, 0x54, 0x1d, 0xd5, 0x20, 0x05, 0x92, 0xde, - 0x08, 0x09, 0xa1, 0xc5, 0x1b, 0xfe, 0x45, 0xd3, 0x34, 0x4d, 0xb2, 0x11, 0x9a, 0xe4, 0x23, 0xb0, 0x1c, 0xd9, 0x01, - 0xd0, 0x96, 0xe4, 0x8b, 0x15, 0x95, 0x00, 0x67, 0x80, 0x3a, 0x59, 0x51, 0xc0, 0x43, 0xe0, 0x75, 0x1d, 0x51, 0x20, - 0x18, 0x7a, 0x08, 0x5f, 0xe6, 0x25, 0x10, 0x29, 0xb7, 0xa7, 0x21, 0xc3, 0x8e, 0x6f, 0xb9, 0x24, 0x58, 0x73, 0xe8, - 0x71, 0xd8, 0x67, 0xcd, 0xb1, 0xd2, 0x22, 0x05, 0x0b, 0x82, 0xd6, 0xa1, 0x12, 0xfa, 0xd8, 0x64, 0x0d, 0xb8, 0x11, - 0xf9, 0xa2, 0x55, 0x36, 0x67, 0xd1, 0x52, 0xc7, 0x5c, 0x49, 0x18, 0xbb, 0x0e, 0xea, 0xbc, 0x21, 0x62, 0x0b, 0xb0, - 0x4d, 0x73, 0xcb, 0x19, 0xdd, 0x85, 0x29, 0x47, 0xa9, 0x9e, 0xe9, 0x73, 0xc5, 0x66, 0xca, 0x71, 0x5b, 0xf5, 0x86, - 0xe0, 0x4b, 0x1a, 0x57, 0x3d, 0xa7, 0xc8, 0x18, 0x19, 0xfa, 0xa0, 0xa8, 0x11, 0x5c, 0x5c, 0x24, 0xc0, 0xde, 0xf2, - 0xaa, 0x8b, 0x26, 0x35, 0x32, 0x5e, 0x45, 0x50, 0x94, 0x18, 0xf5, 0x6e, 0xf8, 0x38, 0x21, 0x60, 0xcf, 0xc6, 0x7e, - 0xfc, 0x5a, 0x3f, 0x1b, 0x26, 0xfd, 0x89, 0x3d, 0xd0, 0x45, 0x42, 0xa0, 0xfa, 0xc4, 0x1e, 0xc0, 0xf6, 0xef, 0x2d, - 0x48, 0x53, 0xf4, 0x2d, 0xe8, 0xda, 0x84, 0x10, 0xf8, 0x3e, 0x04, 0x71, 0xda, 0x72, 0x80, 0x9c, 0x7c, 0x0b, 0x16, - 0x47, 0x10, 0x43, 0xb6, 0x63, 0x71, 0x88, 0xb9, 0x95, 0x7d, 0xab, 0x11, 0xc6, 0x56, 0xc3, 0xd1, 0x30, 0x5e, 0xb8, - 0x8e, 0x73, 0x50, 0xab, 0x0f, 0x82, 0xec, 0xa6, 0xda, 0x86, 0x99, 0x0d, 0x5c, 0xc7, 0x0a, 0x5e, 0xd8, 0xed, 0x7e, - 0xed, 0x8e, 0x56, 0x62, 0x2c, 0x0e, 0x51, 0xfc, 0x75, 0xf6, 0x6c, 0xdd, 0xaa, 0x1d, 0x48, 0xa3, 0x6a, 0xb5, 0x8e, - 0x63, 0xcb, 0xb9, 0xfc, 0x6b, 0x58, 0xbf, 0xfa, 0x29, 0xc2, 0x23, 0xe5, 0xfb, 0x18, 0x42, 0x94, 0xe0, 0x16, 0x1c, - 0xa3, 0xbf, 0x6a, 0x2f, 0xb5, 0x16, 0x1d, 0x1f, 0xc3, 0x18, 0xca, 0x34, 0xd2, 0xc2, 0xab, 0x4b, 0xed, 0xa0, 0xf2, - 0xc5, 0xb4, 0x8a, 0xe1, 0x78, 0x3c, 0x52, 0x56, 0x68, 0xf4, 0xb6, 0x52, 0x0b, 0xd8, 0xff, 0x86, 0xeb, 0xd3, 0x1e, - 0x41, 0x20, 0x00, 0xa8, 0x01, 0x31, 0xc5, 0x77, 0x76, 0xb8, 0x5c, 0x94, 0xbb, 0x2b, 0x5f, 0x92, 0xfb, 0x77, 0x86, - 0x97, 0x0e, 0xea, 0xd0, 0x64, 0x7f, 0xcd, 0xd7, 0xdd, 0x23, 0xbb, 0x64, 0xd1, 0xb8, 0xdc, 0x61, 0xe5, 0xfe, 0xda, - 0xbf, 0xbb, 0x12, 0x46, 0x81, 0x60, 0xfb, 0x71, 0x03, 0x46, 0xc9, 0xe3, 0x08, 0x37, 0x3f, 0x1d, 0xb7, 0x60, 0x2f, - 0x2a, 0x06, 0x1b, 0x50, 0xa4, 0x2c, 0xd9, 0x4c, 0x11, 0x8a, 0x43, 0x44, 0x67, 0xf4, 0xc3, 0x6d, 0x09, 0x42, 0x74, - 0xe3, 0x4e, 0xcc, 0x84, 0x4d, 0x61, 0xd1, 0x26, 0xe0, 0x31, 0x1a, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, 0xd9, - 0x2e, 0xa9, 0x35, 0x39, 0x34, 0xdd, 0x27, 0xde, 0x42, 0xf1, 0x89, 0x13, 0xc4, 0xb9, 0xea, 0x1a, 0x57, 0x12, 0x75, - 0xa3, 0xff, 0x93, 0x68, 0x55, 0xeb, 0x8d, 0xac, 0x04, 0x51, 0xfc, 0xad, 0x30, 0x28, 0x42, 0xa1, 0xae, 0xca, 0xc6, - 0xaf, 0x0a, 0xd9, 0x38, 0x71, 0x35, 0x85, 0x2f, 0x8b, 0xa0, 0xfe, 0x15, 0x37, 0x31, 0xc9, 0x1d, 0x14, 0xee, 0x62, - 0xc5, 0x48, 0x15, 0x07, 0xa8, 0x82, 0xd1, 0x50, 0xdc, 0xea, 0x04, 0x97, 0x51, 0xf6, 0xae, 0x2b, 0x57, 0x2d, 0xbc, - 0xcd, 0x8a, 0x72, 0x90, 0xba, 0xe3, 0x90, 0x65, 0xb1, 0xba, 0x6d, 0xca, 0x1e, 0x30, 0xea, 0x6b, 0x65, 0x93, 0x48, - 0x57, 0x15, 0x02, 0xb0, 0x10, 0xd3, 0x57, 0xf4, 0xda, 0xd2, 0x06, 0x02, 0x07, 0xd9, 0xe0, 0x58, 0xb7, 0x5b, 0x3a, - 0x4f, 0x79, 0x04, 0x0a, 0x2d, 0xbc, 0x2a, 0x83, 0x40, 0xf8, 0xde, 0xac, 0x1b, 0x6e, 0x79, 0xbc, 0xe4, 0xf9, 0xfd, - 0x0e, 0xe2, 0x45, 0xcd, 0x51, 0x15, 0xf9, 0x78, 0x32, 0x2d, 0x32, 0xcf, 0xc5, 0xaa, 0xf5, 0x4e, 0x49, 0x88, 0xb3, - 0xe6, 0xce, 0x29, 0x65, 0x19, 0x3d, 0xaf, 0xd1, 0x13, 0xdf, 0xe5, 0x5b, 0x27, 0x59, 0x46, 0x18, 0xf3, 0xdd, 0xca, - 0x12, 0xcf, 0xff, 0xa4, 0x0c, 0x59, 0xc8, 0x39, 0x41, 0x06, 0x5c, 0xd6, 0x14, 0xf4, 0x3d, 0x0c, 0x91, 0xc8, 0x7a, - 0x76, 0x3b, 0x55, 0xa4, 0x2f, 0xbd, 0xa7, 0x4e, 0xc7, 0x7b, 0x35, 0x39, 0xac, 0x08, 0x45, 0xdb, 0xdd, 0xb2, 0xc8, - 0x7c, 0xc3, 0x38, 0xb2, 0xd9, 0x72, 0x3e, 0x5a, 0xab, 0xb2, 0x55, 0x45, 0xe4, 0x5a, 0x17, 0xb3, 0xaa, 0x9f, 0x9d, - 0x4c, 0x26, 0x65, 0x41, 0xa3, 0xa3, 0x1d, 0xa2, 0xb0, 0xf0, 0xa9, 0xe3, 0x38, 0xd5, 0xb1, 0x6f, 0x07, 0xbb, 0x85, - 0x72, 0xdb, 0x93, 0xc6, 0x11, 0x23, 0x6c, 0x77, 0xc1, 0xaf, 0x0e, 0x8e, 0xdc, 0x2e, 0x4e, 0x76, 0xc9, 0x2c, 0xa2, - 0x4f, 0xc6, 0x10, 0x41, 0xc6, 0xe6, 0x69, 0xcf, 0x67, 0xa8, 0x83, 0xb1, 0x95, 0x03, 0x8d, 0x86, 0x03, 0xd6, 0x14, - 0x4c, 0x45, 0x5c, 0xb1, 0x2b, 0x1c, 0x0d, 0xe5, 0xe1, 0x35, 0xe1, 0xbd, 0xf8, 0x08, 0x1e, 0x94, 0x75, 0x5d, 0xa6, - 0x8d, 0xd3, 0xea, 0x3a, 0x7f, 0x2d, 0xd5, 0xd3, 0xe0, 0x02, 0x5c, 0x0b, 0x85, 0x36, 0xc9, 0x67, 0xf1, 0xff, 0xa5, - 0xfc, 0xff, 0xd5, 0x62, 0x55, 0xb6, 0x1f, 0x39, 0x01, 0x89, 0x76, 0x71, 0x5a, 0x68, 0xd4, 0x4d, 0x7b, 0x40, 0x5a, - 0x19, 0x4c, 0x54, 0x05, 0x3a, 0x28, 0xe9, 0x4b, 0x89, 0x31, 0x1a, 0xc4, 0xef, 0x48, 0x31, 0xc3, 0x12, 0x17, 0x22, - 0xc4, 0x22, 0xad, 0x1b, 0xcc, 0xc1, 0x7c, 0x79, 0x82, 0xfa, 0x83, 0xd2, 0x9e, 0x00, 0x6d, 0x7c, 0x6d, 0x6e, 0x7b, - 0x89, 0xfb, 0xab, 0x7a, 0x2d, 0xd1, 0x31, 0x80, 0xcc, 0x85, 0x43, 0x88, 0x86, 0x04, 0x5a, 0x65, 0x73, 0xd3, 0x28, - 0xe5, 0x5b, 0x55, 0xcf, 0x26, 0x06, 0x86, 0xdd, 0x35, 0x57, 0xa1, 0xbe, 0x85, 0xb6, 0x00, 0x26, 0xcb, 0xb7, 0x1f, - 0x3e, 0x5b, 0xb0, 0xc4, 0xea, 0x7e, 0x74, 0x71, 0xc9, 0x71, 0xff, 0x5a, 0x78, 0x77, 0xa6, 0x74, 0xfe, 0x51, 0xbe, - 0xf8, 0x7d, 0xa3, 0x40, 0xef, 0xaa, 0x24, 0xa1, 0xe3, 0xd6, 0xe2, 0x6d, 0x63, 0xaf, 0xda, 0xf3, 0x20, 0xda, 0xbf, - 0xae, 0xb7, 0xda, 0xbb, 0x2e, 0x5c, 0x18, 0x7b, 0x57, 0x86, 0x1b, 0x87, 0x2c, 0x17, 0xb2, 0xc1, 0xf7, 0x8a, 0x40, - 0x51, 0xf5, 0xfb, 0xd5, 0xb1, 0x15, 0x51, 0xf9, 0x57, 0x4b, 0x20, 0x3e, 0xf7, 0x4a, 0x7c, 0xa0, 0x89, 0xdc, 0x65, - 0xfa, 0xb1, 0x76, 0xa2, 0x1d, 0x77, 0xb4, 0x23, 0x47, 0x27, 0x2e, 0x6c, 0xa0, 0x77, 0xdb, 0x85, 0x43, 0xdf, 0xa1, - 0xa3, 0x9f, 0x9d, 0x4e, 0xc5, 0x25, 0x31, 0x09, 0xc2, 0x90, 0x50, 0x45, 0x9a, 0x25, 0xf1, 0x27, 0x56, 0x56, 0xb3, - 0x50, 0x19, 0x37, 0x02, 0x69, 0x8b, 0x47, 0x38, 0x3b, 0xbe, 0xb7, 0xe8, 0xe1, 0xd9, 0x50, 0x0b, 0xc1, 0x80, 0x93, - 0x4a, 0xf1, 0x13, 0x70, 0x07, 0x8f, 0xf4, 0xb3, 0x53, 0x08, 0xed, 0xa7, 0x8d, 0x07, 0xfa, 0x0f, 0xed, 0x63, 0xcd, - 0xed, 0xde, 0x59, 0x1d, 0xdf, 0xb1, 0x5c, 0xfb, 0x50, 0x73, 0xec, 0x23, 0xab, 0x6d, 0x1f, 0x6b, 0x6d, 0xbb, 0x0b, - 0xff, 0xfa, 0xae, 0xfd, 0x4a, 0x73, 0xe0, 0x49, 0x73, 0xed, 0x0e, 0xfe, 0xdb, 0xb6, 0x8f, 0xef, 0x3a, 0x74, 0xd3, - 0x7b, 0xd2, 0xad, 0xaa, 0x32, 0x0a, 0x70, 0x02, 0xd1, 0x0f, 0xce, 0x4e, 0x97, 0x29, 0xd3, 0x56, 0x03, 0xfd, 0x95, - 0xae, 0xcd, 0x12, 0x36, 0x19, 0xe8, 0x4f, 0x3d, 0xa5, 0xd4, 0x3d, 0x69, 0x2c, 0x6e, 0x1f, 0x37, 0x16, 0x77, 0x8e, - 0x1a, 0x8b, 0x0f, 0xbb, 0xe5, 0xe2, 0x83, 0x29, 0xbd, 0x52, 0x32, 0xeb, 0xcd, 0xbd, 0x2c, 0x09, 0x56, 0x2d, 0x57, - 0x03, 0x74, 0x6d, 0xc1, 0x3f, 0xc7, 0x6d, 0x43, 0xb6, 0x1a, 0x41, 0x2b, 0x09, 0x8d, 0xe3, 0x13, 0xcd, 0x3d, 0xfa, - 0x5b, 0xfb, 0xc8, 0x87, 0x7a, 0x90, 0x07, 0x12, 0xfe, 0xee, 0x3a, 0x27, 0xbe, 0xa3, 0x41, 0x43, 0x17, 0xfe, 0x9b, - 0x75, 0xdb, 0x3e, 0x3d, 0x38, 0xf0, 0xfe, 0xa3, 0x7b, 0x9c, 0x3a, 0x96, 0x0b, 0xff, 0xfd, 0x2a, 0x55, 0xee, 0xa0, - 0xf0, 0x57, 0xfb, 0x3d, 0x74, 0xb4, 0xce, 0xc9, 0xac, 0x6d, 0xbf, 0xba, 0x3b, 0xb6, 0x4f, 0x66, 0xee, 0xf1, 0x47, - 0x7a, 0x0a, 0xad, 0xb6, 0xfd, 0x0a, 0xfe, 0x3e, 0x76, 0x9c, 0x99, 0xe5, 0xda, 0x27, 0x77, 0x1d, 0xbb, 0x13, 0x5a, - 0x47, 0xf6, 0x09, 0xfc, 0xfd, 0x0a, 0xe0, 0x05, 0xb8, 0xf2, 0xc4, 0x9d, 0x1a, 0x6c, 0x8c, 0x8a, 0xfd, 0x86, 0xfa, - 0x91, 0xf6, 0xa1, 0xd6, 0x3d, 0xfc, 0xdb, 0xc9, 0x9d, 0x75, 0x38, 0x73, 0xdb, 0x77, 0xd6, 0xc6, 0x9f, 0x1f, 0x01, - 0xf2, 0xdb, 0x17, 0x0e, 0xc0, 0x88, 0x99, 0x3a, 0xfe, 0x32, 0x34, 0x2f, 0x37, 0x89, 0xd1, 0xdf, 0xef, 0x16, 0xa3, - 0x7f, 0xb7, 0xdc, 0x47, 0x8c, 0xfe, 0xfe, 0x8b, 0x8b, 0xd1, 0x2f, 0xab, 0x56, 0xdc, 0xef, 0xab, 0x11, 0xc5, 0x7f, - 0x5e, 0x57, 0x89, 0xe4, 0xc0, 0x6b, 0x5d, 0x5f, 0x2d, 0x6f, 0x20, 0xd8, 0xce, 0xfb, 0x78, 0xf0, 0xdd, 0xb2, 0x64, - 0xa2, 0x14, 0x03, 0x06, 0x78, 0x1f, 0x13, 0x06, 0xf8, 0x75, 0x39, 0x00, 0xbb, 0x08, 0x7e, 0x6b, 0x06, 0x63, 0x6b, - 0xe6, 0x85, 0x13, 0x79, 0xe3, 0x42, 0x49, 0x1f, 0x8b, 0xc1, 0x66, 0x1e, 0x2e, 0x13, 0x50, 0xd6, 0x2c, 0xe7, 0x51, - 0xda, 0x3b, 0x72, 0x00, 0xcd, 0xb7, 0x27, 0x49, 0x5e, 0x69, 0x6c, 0x8b, 0xf0, 0x44, 0xb7, 0xdc, 0xa6, 0x7f, 0xe3, - 0x7b, 0x34, 0x59, 0x6b, 0xee, 0xdd, 0xad, 0xf7, 0xab, 0x81, 0x2d, 0x88, 0x30, 0xe9, 0x03, 0x62, 0xa3, 0xe9, 0x7d, - 0xd9, 0x70, 0xac, 0x62, 0x2a, 0xb8, 0x79, 0xa4, 0x30, 0x92, 0x6a, 0x7b, 0xb7, 0x6c, 0x78, 0xb6, 0x6b, 0x9a, 0x0d, - 0x9f, 0x2f, 0x35, 0xdf, 0x62, 0xf5, 0x26, 0x3b, 0xae, 0x82, 0xaa, 0x92, 0x0f, 0xab, 0x11, 0x20, 0x05, 0xed, 0x59, - 0x98, 0xc6, 0x15, 0x84, 0x8f, 0xa3, 0xe1, 0x6d, 0xec, 0x28, 0xef, 0x4a, 0x7d, 0xaa, 0xe6, 0x74, 0x2f, 0xd6, 0x48, - 0x0f, 0x06, 0xbf, 0x02, 0x61, 0xc3, 0xef, 0xe3, 0x51, 0xac, 0xc2, 0x79, 0xad, 0xf4, 0x4b, 0xa4, 0x76, 0x3e, 0x73, - 0xd7, 0x75, 0xd2, 0x66, 0xa3, 0x21, 0xad, 0xcb, 0xe6, 0xe2, 0x8e, 0xc6, 0xcf, 0x93, 0xd9, 0x6a, 0x4e, 0xa6, 0xc5, - 0x68, 0x99, 0xbb, 0xad, 0x33, 0x51, 0xef, 0x29, 0x6c, 0x62, 0x93, 0x3f, 0xa8, 0x8e, 0xe3, 0xeb, 0x09, 0xe4, 0x2e, - 0xee, 0x21, 0x11, 0xa1, 0x50, 0x50, 0x6d, 0xb4, 0xb1, 0xed, 0x6f, 0x31, 0xff, 0x50, 0x3b, 0xe6, 0x9d, 0xa0, 0xad, - 0xee, 0x36, 0x8b, 0x11, 0xe9, 0xda, 0xb0, 0x2e, 0x29, 0x50, 0xdd, 0xee, 0xb1, 0xe9, 0x1e, 0x99, 0xf6, 0x71, 0xd7, - 0xc8, 0xc5, 0x81, 0x53, 0xbb, 0x2c, 0x01, 0x04, 0x4c, 0x76, 0xe5, 0x30, 0x83, 0x28, 0xc8, 0x02, 0x2f, 0xcc, 0x01, - 0xd5, 0x97, 0x69, 0xde, 0x7f, 0x2d, 0xd3, 0x0c, 0xe6, 0x28, 0x48, 0x32, 0x34, 0x57, 0xb6, 0x46, 0x2c, 0xbb, 0x67, - 0x2c, 0xda, 0xa0, 0xca, 0xad, 0x5a, 0x3f, 0xff, 0x79, 0xb6, 0xa0, 0x39, 0xd9, 0x59, 0x8c, 0xb2, 0x88, 0xef, 0x0f, - 0x61, 0xaa, 0x9b, 0x0f, 0xcd, 0x1f, 0x37, 0x21, 0xdc, 0x7f, 0xed, 0x46, 0xb8, 0x19, 0xdb, 0x07, 0xe1, 0xfe, 0xeb, - 0x8b, 0x23, 0xdc, 0x1f, 0x55, 0x84, 0x5b, 0xf2, 0x54, 0x29, 0x64, 0xa2, 0x1f, 0xf0, 0xb9, 0x05, 0xa1, 0x78, 0x5f, - 0xea, 0x07, 0x44, 0x5e, 0xea, 0x4a, 0x8a, 0xd4, 0x8f, 0xa5, 0x9c, 0x2f, 0xc8, 0xb2, 0x63, 0x4c, 0x52, 0xca, 0x2f, - 0x01, 0xe9, 0x43, 0x65, 0x22, 0x6c, 0xe8, 0xf3, 0x22, 0xca, 0x42, 0xfb, 0x3d, 0x67, 0x4b, 0x40, 0x05, 0xf1, 0x5d, - 0x9c, 0xcc, 0x3d, 0x8c, 0xc7, 0xa6, 0x63, 0xae, 0x38, 0x78, 0x70, 0xc0, 0x3b, 0xca, 0x8f, 0xa3, 0xb1, 0x94, 0xa3, - 0xb3, 0xc1, 0x35, 0xd1, 0x83, 0xfa, 0x03, 0xf3, 0x12, 0xdd, 0xa4, 0xd7, 0xb0, 0xb8, 0x2f, 0x3a, 0xce, 0x8b, 0xf6, - 0xe1, 0x8b, 0x23, 0x07, 0xfe, 0xe7, 0xb2, 0x4e, 0x6e, 0xf2, 0x8a, 0xf3, 0x38, 0x82, 0x74, 0x15, 0xa2, 0xe6, 0xa6, - 0x6a, 0xf7, 0x8c, 0x7d, 0x2a, 0x6a, 0x1d, 0x37, 0x57, 0x1a, 0x7b, 0x0f, 0x45, 0x9d, 0xc6, 0x1a, 0xb3, 0x78, 0xa9, - 0x0c, 0xab, 0x61, 0x34, 0x41, 0xb4, 0x04, 0xc9, 0x90, 0x52, 0x43, 0x7d, 0xcd, 0xa7, 0x5b, 0xcc, 0x8b, 0x75, 0xf2, - 0x9b, 0x22, 0x27, 0x8e, 0xc8, 0xcd, 0xb1, 0x13, 0x82, 0x5c, 0xa8, 0xee, 0x60, 0x44, 0x6d, 0xcc, 0x0a, 0xa3, 0x41, - 0x46, 0xba, 0x22, 0xf1, 0x39, 0x2e, 0x50, 0x96, 0x2c, 0x23, 0x9f, 0x72, 0x9b, 0x7b, 0xa3, 0xb4, 0x15, 0x1c, 0x40, - 0xb0, 0x4e, 0xfc, 0xb0, 0x81, 0xab, 0xe6, 0x9d, 0x39, 0x45, 0x02, 0x81, 0x54, 0xac, 0x8a, 0xf7, 0x22, 0x33, 0x13, - 0x4a, 0x3b, 0x8a, 0x4b, 0x6b, 0x0d, 0xbc, 0x17, 0xb2, 0xe1, 0x8b, 0xcc, 0x84, 0xd4, 0x9f, 0xb0, 0xdc, 0xcf, 0x9f, - 0x53, 0x2d, 0x48, 0xc6, 0x47, 0xd3, 0x3a, 0xf7, 0x65, 0x02, 0x2f, 0x5d, 0xf3, 0xa6, 0xb1, 0x8e, 0x09, 0xbc, 0x7a, - 0xbe, 0x19, 0xbf, 0x7c, 0x79, 0x36, 0x70, 0x0d, 0x9e, 0x4a, 0xb2, 0x94, 0xf7, 0xe8, 0x72, 0x3f, 0xd5, 0xb8, 0xd1, - 0xe8, 0xb4, 0xb5, 0x08, 0xa2, 0xa9, 0xd0, 0x4c, 0x4b, 0xec, 0x05, 0x79, 0x08, 0x48, 0x05, 0xe6, 0x09, 0x15, 0xb5, - 0xa8, 0x73, 0xc7, 0x12, 0x48, 0x83, 0x39, 0xd0, 0x3b, 0xb6, 0x63, 0x3b, 0xba, 0x6c, 0x38, 0x09, 0xa6, 0x83, 0x75, - 0x9c, 0x79, 0x90, 0xd1, 0x25, 0x8c, 0xa7, 0xe0, 0xf9, 0x91, 0x05, 0x59, 0x08, 0xe9, 0x41, 0xc0, 0x05, 0x64, 0x4e, - 0x5c, 0x63, 0xce, 0xed, 0x71, 0xbd, 0xe4, 0x13, 0xa6, 0x88, 0x13, 0x4e, 0x5f, 0x18, 0x92, 0xe6, 0x07, 0xb8, 0x0c, - 0x5b, 0x7a, 0x0b, 0x12, 0x14, 0xb2, 0x24, 0xb5, 0x54, 0xfb, 0xf6, 0x9e, 0x06, 0x6d, 0x20, 0x79, 0x38, 0x76, 0x30, - 0x49, 0xbc, 0x39, 0x44, 0xd2, 0x5e, 0xe7, 0x26, 0xc7, 0xb4, 0x3a, 0x47, 0xb5, 0x9a, 0xfb, 0xea, 0xc8, 0xd4, 0xda, - 0xae, 0xa9, 0x39, 0x80, 0x6e, 0xf5, 0xdc, 0x5c, 0xe7, 0x37, 0xfd, 0x5d, 0x2a, 0x3a, 0xc2, 0x2f, 0x4f, 0x69, 0x1e, - 0xa4, 0x9c, 0xe3, 0xc2, 0xcf, 0x8c, 0xe2, 0x09, 0xb6, 0x94, 0x18, 0xd7, 0x01, 0x89, 0xe9, 0xaf, 0xd8, 0x2a, 0x33, - 0x30, 0x7d, 0x06, 0xaf, 0x12, 0x18, 0x6b, 0x74, 0x4d, 0x0b, 0x22, 0x2d, 0xf8, 0xed, 0xb7, 0x56, 0x00, 0xe6, 0xf7, - 0x03, 0x05, 0x3e, 0xf0, 0x6c, 0x94, 0x00, 0x16, 0x14, 0x8a, 0x25, 0x04, 0x16, 0xf8, 0xc6, 0xc0, 0xbf, 0x45, 0xb1, - 0xf8, 0xc1, 0x15, 0x7b, 0x76, 0xe8, 0x45, 0x53, 0x40, 0x69, 0x5e, 0x34, 0xad, 0x19, 0x10, 0x90, 0x77, 0x5d, 0xa5, - 0xb4, 0xe8, 0xaa, 0x50, 0xee, 0xa7, 0xdf, 0x3e, 0x5c, 0x51, 0x7a, 0x20, 0x48, 0x45, 0xed, 0x8d, 0xd1, 0x15, 0xac, - 0xd0, 0x3d, 0xbc, 0x1c, 0x7c, 0x75, 0x3a, 0x67, 0x99, 0x47, 0x82, 0x4b, 0x60, 0xf1, 0x80, 0x1c, 0xd0, 0x7c, 0x91, - 0xda, 0x93, 0x18, 0xbc, 0x31, 0xbb, 0x0b, 0x7c, 0xce, 0xa7, 0x99, 0x1a, 0xbf, 0xa7, 0x2c, 0xb4, 0x51, 0x1a, 0xb8, - 0x26, 0x99, 0xc8, 0xfa, 0x1e, 0x46, 0x1d, 0x1c, 0x44, 0xb1, 0x7e, 0xf6, 0x95, 0xf4, 0x26, 0xda, 0xb4, 0x08, 0x90, - 0xa3, 0xef, 0x3a, 0x61, 0xe1, 0xbf, 0x07, 0x5f, 0xc1, 0xc5, 0xfd, 0xd5, 0x8d, 0x6e, 0xf4, 0x33, 0x1b, 0xf9, 0x98, - 0xaf, 0x1a, 0x72, 0xd5, 0x21, 0x8f, 0xca, 0x99, 0xcd, 0x8e, 0xc2, 0x6c, 0xc2, 0xef, 0xdd, 0xac, 0xeb, 0xd9, 0x29, - 0x5e, 0x68, 0x67, 0xc0, 0x5d, 0xac, 0x4b, 0x3c, 0xa7, 0xdb, 0x47, 0x06, 0x75, 0x14, 0x7a, 0xfe, 0x27, 0xc1, 0xa1, - 0xaa, 0x0f, 0xfb, 0xf0, 0xa2, 0x92, 0xb2, 0x6b, 0xdc, 0xcb, 0xb8, 0x95, 0xd7, 0xf8, 0x65, 0xfc, 0xd4, 0xfd, 0x2c, - 0xc8, 0x24, 0x33, 0x8c, 0x0f, 0x39, 0x68, 0x73, 0x70, 0x7c, 0x05, 0xfb, 0x03, 0x0c, 0xaa, 0x7b, 0xf2, 0xb7, 0xee, - 0x9d, 0xeb, 0xcc, 0xda, 0xae, 0x0d, 0x6c, 0xce, 0xac, 0x63, 0x1f, 0x87, 0x56, 0xc7, 0x3e, 0x86, 0xbf, 0x8f, 0xc0, - 0x7a, 0x59, 0x6d, 0xfb, 0xf0, 0xa3, 0xdb, 0x0e, 0xad, 0x13, 0xfb, 0x18, 0xfe, 0x2e, 0xa9, 0xd5, 0xcf, 0xc8, 0xf4, - 0x00, 0xc3, 0xf3, 0x55, 0x09, 0x0b, 0x28, 0xbf, 0xa5, 0x16, 0xc1, 0x2c, 0x5d, 0x6f, 0x0d, 0x9a, 0x08, 0x40, 0x19, - 0xba, 0x29, 0x82, 0x04, 0x46, 0xfd, 0x16, 0x24, 0xcf, 0xc6, 0xb0, 0xef, 0xc2, 0x20, 0x23, 0x2a, 0x12, 0xc1, 0x6f, - 0x3e, 0x46, 0xbc, 0x4d, 0x73, 0xfc, 0x6d, 0x91, 0x4f, 0x88, 0x54, 0x17, 0x7f, 0x5f, 0x60, 0x60, 0x1d, 0x11, 0x31, - 0x5c, 0xc1, 0x4a, 0x45, 0x4e, 0xbb, 0x7c, 0xf7, 0xc0, 0xd1, 0x6f, 0x94, 0xc9, 0x9c, 0x2a, 0x5f, 0xb4, 0x6f, 0xae, - 0xce, 0x90, 0xbd, 0xff, 0xd1, 0x7e, 0x30, 0x95, 0x28, 0xf5, 0x23, 0x82, 0x7b, 0x8e, 0x83, 0x44, 0x0e, 0x4f, 0x41, - 0xd1, 0x6e, 0x73, 0xe0, 0x72, 0x03, 0x92, 0x4f, 0x5c, 0x00, 0x95, 0x7c, 0xe7, 0x85, 0x8a, 0xe9, 0x85, 0xd2, 0xf2, - 0x89, 0xc4, 0xfc, 0xcf, 0x9f, 0x17, 0x83, 0xb3, 0x2a, 0xe3, 0x3e, 0x75, 0xbb, 0x70, 0xed, 0x76, 0x59, 0x67, 0xab, - 0x15, 0xd0, 0xee, 0xe8, 0xb0, 0x45, 0x38, 0x49, 0xa1, 0xe9, 0x17, 0x3a, 0xc6, 0x8d, 0xa6, 0x48, 0x35, 0x0d, 0x23, - 0xc4, 0xd5, 0xad, 0xb0, 0x3a, 0xba, 0xd1, 0x8f, 0x84, 0xc2, 0x2c, 0xda, 0x12, 0x11, 0x97, 0xf3, 0x62, 0x3a, 0x80, - 0x66, 0xcb, 0x3c, 0x76, 0xb8, 0x34, 0xfe, 0xaf, 0x27, 0x81, 0xee, 0x45, 0xa0, 0xe1, 0xab, 0x9c, 0xd6, 0x92, 0xbb, - 0x89, 0xbc, 0x57, 0xe9, 0x42, 0x65, 0xe9, 0xb9, 0x0e, 0x45, 0x90, 0x95, 0x08, 0x13, 0x91, 0x49, 0xf3, 0x26, 0x79, - 0x5b, 0x14, 0x05, 0x66, 0x00, 0x21, 0xa1, 0x5b, 0xc2, 0xd5, 0xc9, 0x78, 0xfe, 0x7c, 0xe3, 0x25, 0x44, 0xea, 0x64, - 0x35, 0x1f, 0xa3, 0xae, 0xe2, 0x37, 0x5d, 0x45, 0x31, 0xb2, 0x5f, 0xc4, 0x1a, 0xc2, 0x2a, 0x8b, 0xf6, 0x1e, 0xfe, - 0x1c, 0x31, 0x2f, 0xb3, 0xb9, 0x1e, 0xa4, 0xa5, 0x5c, 0xee, 0xa6, 0xcb, 0x3a, 0x60, 0x8f, 0xc5, 0xe3, 0x6f, 0xf1, - 0x60, 0x73, 0xcf, 0xd6, 0x1f, 0x97, 0xdc, 0x0f, 0x19, 0xfa, 0xf8, 0xcd, 0x29, 0x82, 0xa7, 0xbc, 0xcb, 0x3c, 0x8a, - 0xb0, 0xa1, 0x5e, 0xb9, 0x71, 0xe6, 0x89, 0xec, 0x1f, 0x40, 0x97, 0xf7, 0x1b, 0x15, 0x86, 0x8a, 0xaf, 0xf2, 0xd9, - 0xbb, 0xab, 0x6f, 0x34, 0xbe, 0xff, 0x49, 0xbf, 0x85, 0x8c, 0x0c, 0x05, 0xc1, 0x1f, 0x50, 0x10, 0x7c, 0x8d, 0x27, - 0x7f, 0x80, 0x50, 0xf2, 0xf9, 0x01, 0x41, 0x50, 0xd7, 0x58, 0xe4, 0x93, 0xd6, 0x6f, 0xbe, 0x0c, 0xb3, 0x60, 0xe1, - 0x25, 0xd9, 0x01, 0x34, 0xb5, 0x00, 0xc9, 0xe9, 0x9b, 0x3c, 0x98, 0x49, 0x71, 0x28, 0x84, 0x6a, 0x59, 0x24, 0x34, - 0x87, 0x93, 0x20, 0x94, 0x8a, 0x43, 0xf1, 0x01, 0xcf, 0xf7, 0xd9, 0x22, 0x1b, 0xe8, 0xde, 0x02, 0x92, 0x21, 0x60, - 0x78, 0xe3, 0x83, 0xd8, 0xcf, 0x58, 0x66, 0xa5, 0x59, 0xc2, 0xbc, 0xb9, 0x2e, 0x43, 0x7d, 0xd6, 0xfb, 0x4b, 0x97, - 0xa3, 0x79, 0x90, 0xc9, 0x60, 0x79, 0x34, 0x41, 0x50, 0xe1, 0xc1, 0x10, 0xcf, 0x86, 0x39, 0x07, 0xe1, 0x65, 0x3c, - 0xad, 0xec, 0xa8, 0x82, 0x72, 0x39, 0xc7, 0x48, 0xac, 0x3c, 0x00, 0xfe, 0x18, 0x3d, 0x72, 0x6e, 0xb9, 0xd7, 0xb5, - 0x8c, 0xe9, 0xa7, 0x9f, 0x9d, 0x72, 0xf6, 0x56, 0xc3, 0x40, 0x01, 0x7a, 0xd7, 0x81, 0x58, 0xb3, 0x9b, 0xfc, 0xb1, - 0x0f, 0x78, 0x65, 0xb8, 0x9a, 0xa8, 0x67, 0x0c, 0xfb, 0x4d, 0x63, 0xb9, 0x02, 0x42, 0xa8, 0xa4, 0xe2, 0x9d, 0xb9, - 0x67, 0xd2, 0x01, 0x08, 0x47, 0x85, 0xb4, 0xd2, 0x6f, 0xbf, 0xbd, 0x1e, 0xfe, 0xe7, 0x77, 0x88, 0x4d, 0x3e, 0x73, - 0x85, 0x17, 0xf4, 0xb5, 0x5a, 0x8b, 0x53, 0x9f, 0xe6, 0x10, 0xd5, 0xfb, 0x6c, 0x2c, 0xc2, 0x82, 0x88, 0xad, 0x95, - 0x0f, 0x6f, 0x44, 0xa8, 0x27, 0xc8, 0x3f, 0x60, 0x08, 0x5f, 0xed, 0x21, 0x2c, 0xef, 0x50, 0x84, 0x08, 0xd0, 0x7e, - 0x59, 0x7d, 0x7b, 0x0c, 0xb9, 0x74, 0x6b, 0x69, 0x01, 0x94, 0x01, 0xe2, 0x1e, 0x3a, 0x3b, 0xf5, 0xb8, 0xf0, 0x15, - 0xc8, 0x8f, 0xb4, 0x77, 0x00, 0xd3, 0x9c, 0xc5, 0x73, 0x66, 0x07, 0xf1, 0xc1, 0x3d, 0x1b, 0x59, 0xde, 0x22, 0x20, - 0xf9, 0x32, 0xca, 0xdd, 0x34, 0xa2, 0xfc, 0xa4, 0x82, 0x96, 0xe8, 0xeb, 0xbc, 0x00, 0x65, 0x5c, 0x00, 0x0a, 0x7e, - 0x7a, 0x67, 0xe5, 0x00, 0x7e, 0xb6, 0x08, 0x18, 0x5f, 0xc6, 0xf2, 0xe7, 0x14, 0x87, 0x4f, 0x84, 0xdc, 0x2b, 0x1e, - 0xac, 0x78, 0x32, 0x51, 0x83, 0xee, 0xd9, 0xe5, 0xef, 0x4b, 0xa8, 0x14, 0x7b, 0x36, 0x5e, 0xd0, 0x97, 0xea, 0x9f, - 0x90, 0x3f, 0x21, 0xa7, 0x2d, 0x8f, 0xcf, 0x08, 0xe7, 0xb9, 0x16, 0xbc, 0x4f, 0x82, 0xe4, 0x29, 0x55, 0xe2, 0x88, - 0xa2, 0x1a, 0x18, 0x7a, 0x03, 0x69, 0xf2, 0x64, 0x30, 0x20, 0x3c, 0x56, 0x45, 0x67, 0x00, 0xa5, 0x86, 0xe0, 0xf9, - 0x30, 0xd9, 0x0c, 0x1a, 0x5a, 0xe4, 0xc1, 0x85, 0x8d, 0xaa, 0xd3, 0xa9, 0x8f, 0xf1, 0xc0, 0x13, 0xfb, 0xab, 0xb4, - 0x03, 0x61, 0x67, 0xf1, 0x85, 0x05, 0x04, 0x2e, 0xfa, 0xa9, 0xe0, 0x71, 0xed, 0x6b, 0x42, 0xd9, 0x56, 0xe8, 0x3d, - 0xc4, 0x8a, 0x66, 0x9d, 0x3b, 0xd9, 0x5f, 0x62, 0xe9, 0x95, 0x70, 0x6e, 0xab, 0x9d, 0x24, 0x19, 0x80, 0xbc, 0x7e, - 0x9a, 0xd4, 0x88, 0xe1, 0xbb, 0x0e, 0x93, 0x5a, 0xb7, 0x3c, 0x19, 0xc4, 0x8e, 0x79, 0x71, 0xd0, 0x4a, 0x2f, 0xf1, - 0xdc, 0xe7, 0xa7, 0x07, 0x30, 0x3f, 0x08, 0x0c, 0x50, 0xa2, 0x8c, 0x02, 0x03, 0xa2, 0x0f, 0x78, 0x29, 0x59, 0x07, - 0x5c, 0x8c, 0x05, 0x51, 0x87, 0x9c, 0xa3, 0x8c, 0x0e, 0x5a, 0xaa, 0x52, 0x27, 0x56, 0x9c, 0x66, 0x2a, 0x6f, 0x77, - 0xc0, 0xfe, 0x5f, 0x97, 0x18, 0xad, 0x3f, 0xef, 0x67, 0x4c, 0xf8, 0xdd, 0x5e, 0x66, 0x1b, 0x5c, 0x73, 0x37, 0x55, - 0x21, 0x82, 0x75, 0x4b, 0x85, 0x62, 0x1f, 0x6f, 0xab, 0x55, 0x90, 0x46, 0xb2, 0xda, 0xc2, 0x6b, 0xe9, 0x4f, 0x71, - 0xc7, 0xd7, 0x6a, 0x63, 0x29, 0xd4, 0xbb, 0xcc, 0x06, 0x50, 0x55, 0x08, 0xdb, 0xbd, 0xc5, 0x82, 0x2a, 0x1b, 0xfd, - 0xd3, 0x03, 0xe2, 0x3b, 0xcf, 0x68, 0x87, 0x9d, 0x9d, 0x82, 0x75, 0x21, 0x2d, 0xba, 0xb7, 0x58, 0xf0, 0x25, 0xa5, - 0x5f, 0xf4, 0xe6, 0x60, 0x96, 0xcd, 0xc3, 0xb3, 0xff, 0x03, 0x30, 0x11, 0x13, 0xf1, 0xb7, 0x59, 0x03, 0x00}; + 0x1e, 0x7f, 0xc7, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0xef, 0x6e, 0x16, 0x93, 0xc1, 0xe0, 0xce, 0x3f, 0xdc, 0xf3, 0x70, + 0x76, 0x37, 0x67, 0x6f, 0xf9, 0x3d, 0x2d, 0xa6, 0x89, 0x6a, 0x7a, 0xf1, 0x98, 0xe0, 0x75, 0xe7, 0xfb, 0x13, 0x8b, + 0xff, 0xd5, 0xbe, 0x68, 0xde, 0xf9, 0x03, 0x69, 0x8d, 0x96, 0xbb, 0xfa, 0xfb, 0xc7, 0x15, 0x13, 0x77, 0x20, 0x5e, + 0xbc, 0xb7, 0x35, 0x0d, 0x6f, 0xf8, 0x47, 0xef, 0xad, 0x3f, 0x7d, 0xab, 0x63, 0x6e, 0x26, 0xea, 0x48, 0x7a, 0x73, + 0xf5, 0x8c, 0xfd, 0xca, 0x3f, 0xc9, 0xe3, 0xe4, 0x9d, 0x90, 0x93, 0xf6, 0x16, 0xb9, 0x9b, 0xe8, 0x94, 0xf8, 0xe2, + 0x26, 0x12, 0x16, 0x04, 0xc2, 0x70, 0xd4, 0xfc, 0x61, 0x52, 0x4e, 0xbd, 0x3d, 0x70, 0xbb, 0x72, 0x5b, 0xff, 0x7c, + 0xc7, 0x39, 0x5f, 0x0c, 0xaf, 0xa7, 0x5f, 0xba, 0x5d, 0x7a, 0x54, 0x34, 0x9b, 0x0a, 0x74, 0xbb, 0xc3, 0xd8, 0xab, + 0xb3, 0x99, 0x65, 0x2e, 0xf9, 0xd2, 0x97, 0xda, 0xcc, 0x3c, 0xa6, 0xf7, 0x9b, 0x69, 0x86, 0x44, 0xbe, 0x40, 0xc8, + 0x74, 0x3c, 0xae, 0x2e, 0xb1, 0x3c, 0x3e, 0x7c, 0xf3, 0xf4, 0xc9, 0xe0, 0x09, 0x46, 0x6e, 0x59, 0xd1, 0x20, 0x5f, + 0xf8, 0x30, 0xab, 0x5b, 0xb7, 0x8d, 0xab, 0x67, 0xc3, 0x5f, 0x20, 0x6f, 0xd0, 0xf5, 0xd0, 0x14, 0xd1, 0x2a, 0xbf, + 0xa3, 0xe8, 0x33, 0x25, 0x07, 0x1d, 0x4f, 0xa0, 0x76, 0x48, 0x81, 0xfb, 0xe5, 0x29, 0x07, 0xfd, 0x06, 0x96, 0xda, + 0xef, 0x5f, 0x7e, 0x22, 0x1e, 0x69, 0x18, 0xef, 0x1f, 0xc2, 0xe8, 0x8f, 0xb8, 0x2c, 0x36, 0x70, 0xba, 0x0e, 0xe0, + 0x73, 0x4f, 0xf5, 0xed, 0x6b, 0xe5, 0xfb, 0x7e, 0xe0, 0xed, 0xf8, 0x2d, 0xfb, 0xc2, 0xbd, 0xeb, 0xe1, 0x1b, 0xff, + 0xe9, 0x13, 0x10, 0x9d, 0x60, 0x5c, 0x3e, 0x63, 0x24, 0x6c, 0x47, 0x31, 0x6a, 0x15, 0x7e, 0xae, 0x21, 0x44, 0xeb, + 0x13, 0x32, 0x76, 0x41, 0xfa, 0x07, 0x05, 0xe8, 0x27, 0x04, 0x56, 0x93, 0xd4, 0x28, 0x30, 0x89, 0xef, 0x6a, 0x48, + 0x20, 0x05, 0x0b, 0x84, 0xde, 0x40, 0xf1, 0xa9, 0xe0, 0x5f, 0x86, 0x9f, 0x49, 0xf2, 0x5b, 0xd4, 0x7c, 0x0c, 0x7f, + 0xc3, 0xd0, 0x4c, 0xaa, 0x87, 0xb4, 0x8e, 0x12, 0xef, 0x27, 0xff, 0x10, 0x85, 0x95, 0x50, 0xc7, 0x42, 0x90, 0x8a, + 0x21, 0x17, 0xe2, 0xea, 0xd9, 0xe4, 0xae, 0x14, 0xe1, 0x1f, 0x13, 0x7c, 0x26, 0x17, 0x9a, 0x7c, 0x46, 0x4f, 0x1a, + 0xf9, 0xfe, 0x83, 0x7c, 0x5f, 0x76, 0x6a, 0xb0, 0xa8, 0x87, 0xfc, 0xae, 0x76, 0xdf, 0x97, 0x53, 0x82, 0x1e, 0xd9, + 0x0f, 0x68, 0x0a, 0x06, 0x6a, 0x02, 0x52, 0x86, 0xe0, 0x0e, 0xae, 0xfa, 0x9e, 0x2a, 0xc8, 0x97, 0xdf, 0xfb, 0x2c, + 0x64, 0xb8, 0xca, 0x82, 0x90, 0xe4, 0x52, 0x21, 0x85, 0x8d, 0xbb, 0x7a, 0xf0, 0x59, 0x63, 0x92, 0x48, 0xc8, 0x29, + 0x01, 0x49, 0xd2, 0xde, 0x40, 0x92, 0x88, 0xe9, 0x3f, 0x5c, 0x27, 0x4d, 0xb3, 0x96, 0xd2, 0x0d, 0x71, 0xaa, 0xbe, + 0x45, 0x9a, 0xb3, 0xe0, 0x3d, 0x83, 0xa5, 0x23, 0xc5, 0x8a, 0x2f, 0xc6, 0x60, 0xac, 0x83, 0x85, 0x56, 0xb2, 0xb8, + 0x5f, 0x25, 0x61, 0x1a, 0x89, 0x2a, 0xef, 0x84, 0xfc, 0xf9, 0x4f, 0x25, 0xfe, 0xe8, 0x2d, 0x0d, 0x44, 0x20, 0xf8, + 0x01, 0x5a, 0x0f, 0x58, 0xe3, 0xc1, 0x4f, 0xac, 0x2e, 0xc3, 0xbc, 0xca, 0xa8, 0xbc, 0xd9, 0x9e, 0xed, 0xe6, 0x4c, + 0x55, 0x2d, 0xf8, 0x2c, 0x0c, 0x2d, 0xda, 0xc5, 0xba, 0x39, 0xbb, 0xcd, 0x1b, 0x7c, 0x67, 0x92, 0x44, 0x6a, 0x29, + 0x89, 0xb4, 0xd5, 0xf5, 0xe9, 0xd2, 0xeb, 0x16, 0x15, 0x34, 0x46, 0x80, 0x5e, 0x92, 0xee, 0x2a, 0x9f, 0x50, 0xbc, + 0xb2, 0x1a, 0x56, 0xc3, 0x4b, 0x87, 0x22, 0x8c, 0xb5, 0x37, 0xe7, 0xf2, 0xec, 0x0e, 0xac, 0x47, 0x68, 0xed, 0xca, + 0xd5, 0x21, 0x6c, 0x3f, 0xd1, 0x7b, 0x4e, 0xae, 0xfe, 0x06, 0x54, 0x81, 0x73, 0x47, 0x43, 0x7d, 0xd2, 0x4e, 0x21, + 0xdb, 0x79, 0xb0, 0x24, 0xa8, 0x4a, 0xc9, 0x4d, 0xb9, 0x16, 0xa5, 0x94, 0x29, 0x5f, 0xcb, 0x6c, 0x65, 0xf7, 0xc9, + 0x00, 0xe2, 0xd9, 0xa0, 0x40, 0x72, 0x51, 0x5b, 0xcd, 0x41, 0xfa, 0x68, 0x96, 0x38, 0xd6, 0x0e, 0x0a, 0x2f, 0xcb, + 0xc1, 0xcc, 0x65, 0x2e, 0x97, 0x83, 0x82, 0x55, 0x7a, 0xab, 0x99, 0x66, 0xaa, 0x2f, 0x2a, 0x7b, 0x9b, 0xf1, 0x32, + 0xfd, 0x37, 0x4b, 0x06, 0x3c, 0xba, 0x7a, 0xe6, 0x07, 0x90, 0x26, 0x79, 0x1d, 0x20, 0x09, 0x36, 0x07, 0xbb, 0xd8, + 0x61, 0xd8, 0x2a, 0x56, 0xf6, 0xe4, 0xf9, 0x72, 0x87, 0xa6, 0x5c, 0xc2, 0x48, 0x4e, 0xcc, 0xa5, 0xd4, 0xf7, 0x25, + 0xd5, 0x0d, 0x05, 0x27, 0x9b, 0x26, 0xa0, 0x14, 0xd0, 0x6e, 0xc1, 0x7f, 0xe1, 0x53, 0x43, 0xa7, 0x05, 0x58, 0x6a, + 0xbb, 0x01, 0xff, 0x85, 0x7e, 0xb1, 0x7d, 0x44, 0xfd, 0xc0, 0x3c, 0x38, 0x98, 0xb5, 0x95, 0x31, 0x20, 0x22, 0x71, + 0x05, 0x79, 0x24, 0xf8, 0x41, 0xb1, 0xa7, 0xcb, 0xc4, 0x81, 0x33, 0xc5, 0xc5, 0x52, 0x6a, 0x33, 0xf3, 0xda, 0x6f, + 0xa9, 0x89, 0x37, 0x51, 0x12, 0x15, 0xb6, 0x43, 0x1a, 0xbd, 0xa4, 0x8c, 0xa9, 0x82, 0x0d, 0xd1, 0x7d, 0xdd, 0x04, + 0x53, 0xe0, 0x4d, 0x55, 0x05, 0x44, 0xa8, 0xbd, 0xc8, 0xf2, 0xfc, 0xa6, 0x0b, 0xac, 0x2e, 0xf8, 0xd4, 0x98, 0x66, + 0x17, 0xac, 0xe4, 0x6a, 0x26, 0x7d, 0xe6, 0xed, 0x40, 0x0b, 0x79, 0x97, 0x97, 0x45, 0x2b, 0x74, 0x3d, 0x88, 0x16, + 0xfe, 0x41, 0x73, 0x3c, 0x7a, 0xb6, 0xad, 0xa6, 0x36, 0xfb, 0x5a, 0x8b, 0x05, 0x32, 0x10, 0x0d, 0x7d, 0xa1, 0x62, + 0x14, 0xee, 0x2a, 0xcd, 0xd5, 0x6a, 0x5f, 0x95, 0x41, 0x02, 0x13, 0x41, 0xd6, 0xb2, 0xf0, 0x1e, 0xdd, 0xab, 0x47, + 0x9a, 0x57, 0x12, 0x3c, 0x73, 0xf1, 0x17, 0x00, 0x42, 0x79, 0x92, 0x90, 0x03, 0x72, 0x00, 0x7f, 0x4b, 0x51, 0x2a, + 0x0d, 0xf0, 0xcf, 0xea, 0x72, 0x6c, 0xeb, 0xfb, 0x3b, 0xad, 0x62, 0x70, 0xfd, 0xf9, 0xba, 0xeb, 0x59, 0x3b, 0xc4, + 0x39, 0xb7, 0xd5, 0x6b, 0xcb, 0x34, 0x8f, 0x91, 0xba, 0x06, 0xe0, 0x4e, 0xa4, 0x47, 0x20, 0x92, 0x99, 0x68, 0x90, + 0xb3, 0xe7, 0x7c, 0x3c, 0x15, 0x8f, 0x49, 0x7b, 0xb9, 0xef, 0x9b, 0x0b, 0x7d, 0x30, 0xc6, 0xbe, 0x05, 0x0d, 0xe2, + 0xa3, 0xd5, 0xd6, 0x0a, 0xc4, 0x7a, 0xa7, 0xd4, 0x87, 0x6e, 0x8c, 0x82, 0x0e, 0x1e, 0x71, 0x23, 0x17, 0x1c, 0xdb, + 0x5d, 0x5b, 0x4f, 0xe9, 0x2b, 0x00, 0x73, 0x1d, 0xa8, 0x64, 0x18, 0xa4, 0x2e, 0x13, 0x85, 0x49, 0x7e, 0x99, 0x90, + 0x84, 0x88, 0xea, 0x6c, 0x39, 0x4a, 0x95, 0x69, 0x01, 0x97, 0x19, 0x19, 0x60, 0x36, 0x69, 0xd6, 0x4f, 0x2e, 0x5f, + 0x62, 0x18, 0x01, 0xf1, 0x33, 0xfa, 0xb1, 0x56, 0x89, 0x97, 0x8c, 0xee, 0x1c, 0x75, 0x83, 0x2a, 0xc9, 0x5c, 0xbf, + 0xb9, 0x9d, 0x45, 0xca, 0xbc, 0x60, 0xb8, 0x5d, 0xa5, 0xf9, 0x87, 0xb0, 0x4e, 0xf0, 0xdb, 0x00, 0x95, 0xf4, 0xa9, + 0xf0, 0xa2, 0x11, 0x40, 0xa8, 0xef, 0x55, 0x19, 0x9f, 0x0a, 0x2f, 0x1b, 0xed, 0x58, 0x46, 0x29, 0x54, 0x17, 0xcc, + 0x6e, 0x4d, 0x17, 0xa2, 0x5b, 0x55, 0x03, 0x6d, 0xe0, 0xda, 0x15, 0x52, 0xba, 0x81, 0x6a, 0x57, 0x6e, 0x58, 0x80, + 0x68, 0x33, 0x11, 0x18, 0x2e, 0xff, 0x3e, 0x7f, 0xa9, 0x62, 0x78, 0xfa, 0xfd, 0xd0, 0x3b, 0xec, 0x82, 0x68, 0xb4, + 0xbb, 0x66, 0xfb, 0x20, 0x1a, 0xed, 0xaf, 0x1b, 0x46, 0xbf, 0x9f, 0xd1, 0xef, 0x67, 0x0d, 0xe8, 0x48, 0x84, 0x09, + 0xb3, 0xd7, 0x6f, 0xd4, 0xf2, 0x95, 0x5a, 0xbf, 0x53, 0xcb, 0x97, 0x6a, 0x78, 0xeb, 0x40, 0x12, 0x41, 0x64, 0xa9, + 0x6a, 0x1e, 0x24, 0x45, 0xaa, 0xa5, 0xcb, 0x31, 0x5a, 0x8c, 0xa8, 0xa5, 0xac, 0x39, 0xd5, 0x89, 0xb4, 0x73, 0x50, + 0x32, 0xc0, 0xd1, 0xe2, 0xaa, 0xc6, 0x74, 0xb3, 0xa2, 0x25, 0x10, 0x23, 0xac, 0x6c, 0xcb, 0xc5, 0x4d, 0xea, 0xa3, + 0x2b, 0xf2, 0x6d, 0xcb, 0x95, 0x6f, 0x5b, 0xc1, 0xab, 0xaf, 0x28, 0x94, 0x4b, 0xae, 0x95, 0xed, 0xd3, 0x42, 0x29, + 0x94, 0x71, 0x0d, 0xb6, 0xf6, 0x4d, 0x60, 0xc8, 0x7c, 0xa4, 0xa8, 0xb1, 0xbd, 0x68, 0x94, 0x43, 0x90, 0xad, 0x83, + 0x51, 0xa7, 0x2c, 0x58, 0x7c, 0xbb, 0x43, 0x06, 0x32, 0xd0, 0x51, 0xd5, 0xc6, 0xab, 0x9d, 0x95, 0xfe, 0xb0, 0xbc, + 0x7a, 0xc6, 0x12, 0x2b, 0x9d, 0xfc, 0xa6, 0x42, 0x7f, 0x10, 0xa2, 0x6f, 0xca, 0x96, 0x83, 0x17, 0x5d, 0x6c, 0x65, + 0x40, 0xbc, 0x61, 0x7a, 0x6f, 0x6b, 0x25, 0xcb, 0x5d, 0x53, 0xbe, 0x98, 0xf1, 0x84, 0xe3, 0xe8, 0xcb, 0xd5, 0x22, + 0xac, 0xd5, 0x22, 0x3b, 0x01, 0x1e, 0x5a, 0xab, 0xa5, 0x90, 0xab, 0x45, 0x38, 0x33, 0x5d, 0xa8, 0x99, 0x9e, 0x81, + 0xe6, 0x51, 0xa8, 0x59, 0x9e, 0x00, 0x16, 0xbc, 0x30, 0x33, 0x5c, 0x98, 0x19, 0x8e, 0x43, 0x6a, 0x9c, 0x1e, 0xf4, + 0x5e, 0xe7, 0x9e, 0x5b, 0xee, 0x46, 0xa7, 0x61, 0xde, 0x4e, 0x36, 0x98, 0xd3, 0x83, 0x70, 0x02, 0xf1, 0x81, 0x25, + 0x02, 0xf4, 0x68, 0x58, 0x1d, 0x35, 0x54, 0x8e, 0xe2, 0xcb, 0x02, 0x90, 0x2c, 0x09, 0x40, 0xf2, 0xa0, 0xc6, 0xb9, + 0xb4, 0xfc, 0xba, 0x4a, 0x42, 0x8e, 0xc8, 0x78, 0x29, 0xed, 0xee, 0x09, 0x2f, 0x47, 0x46, 0x68, 0x9e, 0x2c, 0x52, + 0xaf, 0x62, 0x19, 0x1b, 0x23, 0x70, 0x51, 0xe8, 0x37, 0x79, 0xbf, 0x9f, 0x96, 0x5e, 0x45, 0xed, 0xfc, 0x04, 0xfe, + 0x96, 0xe7, 0xce, 0x22, 0x47, 0xc8, 0xab, 0x91, 0x49, 0x58, 0x5e, 0x2a, 0xf5, 0xf4, 0x25, 0xcc, 0xa0, 0xee, 0xde, + 0x28, 0x00, 0xd7, 0x42, 0x39, 0xd5, 0x96, 0x70, 0x65, 0xaa, 0x0c, 0xf6, 0x79, 0xc8, 0x65, 0x68, 0x87, 0x44, 0x1e, + 0x29, 0xac, 0xfb, 0xf6, 0xd5, 0xb3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x8f, 0x00, 0x73, 0x30, 0xf5, 0xa2, + 0x01, 0x2f, 0xd5, 0x9c, 0xf9, 0xe8, 0x55, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x53, 0xf9, 0xc8, 0xf8, + 0x96, 0xf9, 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, + 0x6c, 0x50, 0x09, 0xb6, 0x0d, 0xdf, 0x48, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, + 0x1b, 0xb3, 0x31, 0x2b, 0xd4, 0xce, 0x53, 0xc9, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, + 0x71, 0xce, 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, + 0xa6, 0x25, 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, + 0xe8, 0x95, 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x2b, + 0xfe, 0x42, 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd0, 0xb4, 0x04, + 0x75, 0x80, 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x25, 0xe7, 0xef, 0x6a, 0x43, + 0x84, 0x8c, 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, + 0xc0, 0xe3, 0xaa, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x9c, 0xf6, 0x4e, 0xd3, 0xb0, 0xc3, 0x17, 0xa0, 0x29, 0x86, 0x72, + 0x3c, 0xdf, 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xce, 0x42, 0xda, 0x96, + 0x63, 0xb4, 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xca, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x79, 0xd5, 0x63, 0x36, + 0xc9, 0x8a, 0x45, 0xae, 0x22, 0xce, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, + 0x41, 0xc9, 0x72, 0x59, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xde, 0x9c, + 0x53, 0xa8, 0x7d, 0xc5, 0xc3, 0xea, 0xfc, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, + 0x7c, 0xe7, 0xab, 0x74, 0x45, 0xa1, 0x3b, 0xce, 0x4c, 0x3c, 0x57, 0x81, 0xb1, 0x6f, 0xed, 0x08, 0x0a, 0x87, 0xa6, + 0xeb, 0x80, 0xc3, 0x34, 0x3a, 0x61, 0xf1, 0x4f, 0xe9, 0x38, 0x79, 0x55, 0x2b, 0x44, 0x92, 0xbf, 0x0b, 0x17, 0x86, + 0xc4, 0x82, 0xbc, 0x24, 0xd4, 0x11, 0x19, 0xb1, 0x1a, 0x15, 0x1b, 0xa1, 0xa2, 0xe2, 0x14, 0x8f, 0xb7, 0x0a, 0x8a, + 0x4b, 0x51, 0xaa, 0x94, 0x8a, 0xdc, 0xa8, 0x14, 0x10, 0xcb, 0x06, 0xde, 0x2d, 0xe0, 0x00, 0x08, 0x3a, 0xcb, 0xfd, + 0xc6, 0x76, 0xb7, 0x91, 0xf9, 0xcc, 0x34, 0x4f, 0xab, 0x0f, 0xea, 0xef, 0xf7, 0x4b, 0x8c, 0xad, 0xf1, 0xf4, 0xf7, + 0x6d, 0x5a, 0x70, 0xf3, 0x37, 0x0c, 0xd1, 0x0a, 0x10, 0x31, 0x4b, 0x7b, 0x28, 0x64, 0xc1, 0x84, 0x65, 0xa8, 0xca, + 0x53, 0x8e, 0x7a, 0xd5, 0xe4, 0x0e, 0x20, 0xd4, 0xd0, 0xaf, 0x8d, 0x4e, 0x75, 0x55, 0x82, 0xf0, 0x7d, 0x57, 0xa8, + 0xc7, 0xe6, 0x80, 0x27, 0x03, 0xe0, 0xaf, 0xc8, 0x6b, 0x3d, 0xb6, 0x7f, 0xd0, 0x1b, 0xf5, 0x06, 0x08, 0xa2, 0x73, + 0x59, 0xf8, 0x27, 0x9c, 0xeb, 0xd4, 0x9f, 0x71, 0x21, 0x88, 0x6f, 0x3d, 0x09, 0xef, 0xc5, 0x45, 0x1a, 0x07, 0x17, + 0xbd, 0x81, 0xb9, 0x08, 0x14, 0x17, 0x69, 0x7e, 0x01, 0x61, 0xf9, 0x88, 0x89, 0x58, 0xb3, 0x15, 0xc0, 0x04, 0x96, + 0x3a, 0x0e, 0x59, 0x75, 0x6c, 0xbf, 0xff, 0x7a, 0x64, 0xc8, 0xd2, 0x11, 0x06, 0x46, 0xff, 0x06, 0x14, 0xa1, 0x12, + 0x96, 0x99, 0xed, 0xc1, 0xa4, 0xab, 0x3d, 0xab, 0xe7, 0xcd, 0x36, 0xef, 0xea, 0x1d, 0xab, 0x69, 0x15, 0x35, 0x2d, + 0xb7, 0x9a, 0x36, 0xa9, 0xa0, 0x66, 0xa2, 0xdf, 0xd7, 0xa0, 0xa8, 0xd5, 0x1c, 0xc0, 0xd8, 0x30, 0xf9, 0xf5, 0x2c, + 0x9f, 0xf7, 0xfb, 0x9e, 0x7c, 0x04, 0xbf, 0x90, 0xad, 0xcc, 0xad, 0xb1, 0x7c, 0xfa, 0x8a, 0x48, 0xcc, 0x0c, 0xcc, + 0xd1, 0xea, 0x04, 0xdf, 0xeb, 0x56, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x35, 0x0c, 0x9e, 0x27, 0x7c, 0x70, + 0x91, 0xa3, 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x6b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, + 0x78, 0x90, 0xfd, 0xfe, 0x1a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0x37, 0x75, 0x51, 0x56, 0xd0, 0xb1, + 0xf4, 0xf3, 0x4e, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x96, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, + 0x2e, 0x3e, 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0x67, 0xb8, 0xcf, 0x6f, 0x3c, 0xf0, 0x83, 0x99, 0xa5, + 0x73, 0x45, 0x9c, 0x51, 0xf9, 0xa3, 0xcf, 0x45, 0x9a, 0x53, 0x1e, 0xe0, 0x3e, 0x14, 0x73, 0xfb, 0x2d, 0x90, 0x7e, + 0xe8, 0x2d, 0x90, 0x7d, 0x74, 0xce, 0xc9, 0x6b, 0x40, 0xa4, 0x43, 0x18, 0xdc, 0x9c, 0x04, 0x1d, 0xab, 0x86, 0x77, + 0x16, 0xd8, 0x69, 0x2f, 0x8d, 0x7b, 0x69, 0x7e, 0x91, 0xf6, 0xfb, 0x06, 0x35, 0x33, 0x45, 0x38, 0x78, 0x9c, 0x91, + 0x8b, 0xa4, 0x05, 0x5b, 0x4a, 0xfb, 0xaf, 0x06, 0x8e, 0xa8, 0x10, 0xa0, 0xf9, 0xef, 0xc2, 0x7b, 0x02, 0x10, 0x9b, + 0xb4, 0x01, 0x57, 0x3d, 0xa6, 0xa3, 0xb1, 0x25, 0x51, 0xab, 0xce, 0x06, 0x48, 0x9c, 0x2a, 0xad, 0xa7, 0xdc, 0xac, + 0x29, 0x0c, 0x52, 0x65, 0xa1, 0x7e, 0x63, 0x3d, 0x99, 0xac, 0x72, 0x91, 0x11, 0x47, 0x65, 0x7a, 0x57, 0x33, 0x82, + 0xe9, 0xd2, 0xcf, 0x17, 0xb0, 0x64, 0xe3, 0x8f, 0x38, 0x79, 0x4b, 0xc0, 0xb1, 0x9d, 0xb5, 0xab, 0x6a, 0x97, 0xe3, + 0xd6, 0x6e, 0x0e, 0xf0, 0xbd, 0xde, 0x68, 0x34, 0xd2, 0xce, 0x71, 0x02, 0x86, 0xaa, 0xa7, 0x96, 0x42, 0x8f, 0xd5, + 0x0a, 0x50, 0xb7, 0x23, 0x97, 0x59, 0x32, 0x98, 0x2f, 0x8c, 0xe3, 0x97, 0xe6, 0xa3, 0x8f, 0x97, 0xca, 0xda, 0x75, + 0xc4, 0xd7, 0x7f, 0x94, 0xd5, 0xfa, 0x96, 0x77, 0x55, 0x13, 0xf0, 0x45, 0x15, 0x50, 0xfa, 0x0d, 0xef, 0xc9, 0xde, + 0xc5, 0xd7, 0x6e, 0xb1, 0x4b, 0xbe, 0xe5, 0x2d, 0xea, 0x3c, 0x5f, 0x39, 0xb8, 0x51, 0xa5, 0xdb, 0x7b, 0xc9, 0x02, + 0xd7, 0xde, 0x49, 0xd3, 0x58, 0xcf, 0xfc, 0xe8, 0x61, 0x11, 0xb2, 0x9d, 0x8f, 0xbd, 0xaf, 0x9a, 0xa7, 0x67, 0x0d, + 0xbd, 0x49, 0x0d, 0x7d, 0xec, 0x45, 0xd9, 0x3e, 0x35, 0x8d, 0xe8, 0x35, 0x6c, 0xe8, 0x63, 0x6f, 0xc9, 0xc9, 0x21, + 0x11, 0xe0, 0xd4, 0x98, 0x3f, 0x3e, 0x9c, 0xce, 0xf0, 0x77, 0x0c, 0xa8, 0x04, 0x62, 0x3e, 0x3f, 0xa6, 0x1d, 0x05, + 0x98, 0x51, 0xa5, 0xb7, 0xcf, 0x0f, 0x6c, 0xc7, 0xcb, 0x7a, 0x68, 0xe9, 0xdd, 0xb3, 0xa3, 0xdb, 0xf1, 0xaa, 0x1a, + 0x5f, 0xca, 0x21, 0xcf, 0xf3, 0xd9, 0x68, 0x34, 0x12, 0x06, 0x92, 0x3b, 0xd7, 0x1b, 0x58, 0x81, 0xb4, 0x2d, 0xaa, + 0x0f, 0xe5, 0xd2, 0xdb, 0xab, 0x43, 0x3b, 0xf7, 0x27, 0xd5, 0xf1, 0x58, 0x8c, 0xcc, 0x31, 0x9e, 0xfb, 0xc7, 0x63, + 0xa1, 0xe4, 0x28, 0x59, 0x4b, 0x10, 0x9d, 0xd2, 0x78, 0x2a, 0xeb, 0xb5, 0x13, 0x91, 0x57, 0x23, 0xce, 0x43, 0xf0, + 0x57, 0x2f, 0x67, 0xa5, 0xfe, 0x54, 0xf8, 0xe8, 0xa7, 0x4a, 0xe9, 0x05, 0xaf, 0x0a, 0x08, 0x11, 0xfb, 0xbb, 0x81, + 0x76, 0x50, 0x82, 0x43, 0x09, 0xf7, 0x1e, 0xaf, 0x93, 0xaf, 0xbc, 0x6a, 0x26, 0x63, 0x94, 0x7b, 0x83, 0x7c, 0xce, + 0x00, 0xa6, 0xd2, 0x67, 0xe0, 0x77, 0x09, 0x50, 0xa7, 0xf8, 0x14, 0x9d, 0xea, 0xcd, 0xc3, 0xa6, 0xeb, 0xd3, 0x12, + 0x45, 0x11, 0xdd, 0xf9, 0xf9, 0x18, 0x10, 0x3b, 0xbb, 0x36, 0x23, 0xed, 0xda, 0x6f, 0xd0, 0x60, 0x95, 0x26, 0xad, + 0x95, 0x53, 0xc2, 0x6e, 0x57, 0x23, 0x5b, 0xfa, 0x51, 0x0a, 0xc4, 0xca, 0x71, 0x22, 0x91, 0x3d, 0xd8, 0xc8, 0x09, + 0xdc, 0xa2, 0xbd, 0xa3, 0x03, 0x50, 0xb9, 0x51, 0x90, 0x5f, 0xcd, 0x89, 0xdc, 0xf1, 0x7d, 0xef, 0xfb, 0x41, 0x3d, + 0xf8, 0xbe, 0x77, 0x91, 0x92, 0xdc, 0x11, 0x5e, 0xa8, 0x29, 0x21, 0xe2, 0x8b, 0xef, 0x07, 0xd5, 0x00, 0xcf, 0x12, + 0x2d, 0xd2, 0x22, 0xa1, 0x5a, 0x5d, 0xe3, 0x26, 0xbc, 0x48, 0x24, 0xf7, 0xd0, 0xbe, 0xf3, 0x88, 0x58, 0x00, 0x32, + 0x16, 0x9f, 0xcd, 0x1b, 0x0a, 0x75, 0x37, 0x31, 0x5b, 0x74, 0x97, 0xc5, 0x7e, 0x7f, 0x93, 0xa7, 0x75, 0x4f, 0xc7, + 0xc7, 0xe0, 0x0b, 0x52, 0x4d, 0x80, 0x47, 0xfb, 0x2b, 0x73, 0xbc, 0x7a, 0xb5, 0x39, 0x52, 0x16, 0xaa, 0x44, 0xfd, + 0x16, 0xab, 0x59, 0x0f, 0x61, 0xb8, 0xb3, 0xcc, 0x58, 0xdb, 0x0b, 0x9e, 0xcb, 0x59, 0x15, 0xdb, 0xe5, 0xf8, 0x8a, + 0xa5, 0x36, 0x97, 0xa8, 0x1c, 0xad, 0xc7, 0xda, 0x14, 0x23, 0xbf, 0x52, 0x48, 0x94, 0x45, 0xc7, 0xd6, 0x42, 0x01, + 0xf1, 0x02, 0xf4, 0x25, 0x7b, 0xd3, 0x00, 0xeb, 0x8d, 0x5e, 0x45, 0x84, 0x96, 0x8f, 0x54, 0x78, 0x9b, 0x9b, 0x2a, + 0xb3, 0xb2, 0x59, 0xb4, 0xfb, 0x29, 0xe7, 0x39, 0x82, 0xd5, 0x1b, 0xb5, 0x47, 0x01, 0x6a, 0x0f, 0x2d, 0x94, 0x01, + 0xa4, 0x34, 0xcd, 0x00, 0x90, 0x01, 0x40, 0xa6, 0x8a, 0xf8, 0x4c, 0x80, 0x4a, 0x5b, 0xdd, 0x28, 0x70, 0x22, 0xbd, + 0x02, 0x9a, 0x05, 0x56, 0xfa, 0x48, 0x41, 0x06, 0x8b, 0x2d, 0x02, 0xb0, 0x72, 0xe4, 0x0c, 0xd3, 0x18, 0xb2, 0x8d, + 0x26, 0x2e, 0x49, 0xf3, 0xfb, 0x30, 0x4b, 0x25, 0x9e, 0xc4, 0x8f, 0xb2, 0xc6, 0x08, 0x00, 0xa4, 0xef, 0xd3, 0x8b, + 0x22, 0x8b, 0x09, 0x07, 0xce, 0x7a, 0xea, 0xa0, 0xa8, 0xc9, 0xb9, 0xd6, 0xb4, 0x7a, 0x56, 0x9b, 0x3c, 0x64, 0x81, + 0xce, 0x1e, 0x8c, 0x49, 0x2d, 0xdf, 0xf3, 0xc8, 0xfe, 0xca, 0xe9, 0x8c, 0xf0, 0x5d, 0x77, 0x70, 0xea, 0xbf, 0xdb, + 0x1a, 0x98, 0x98, 0x12, 0x80, 0x8d, 0xc1, 0xd1, 0x84, 0xf8, 0x9d, 0x8e, 0xc9, 0xd4, 0x26, 0x45, 0x20, 0xf0, 0x10, + 0xbc, 0x82, 0xeb, 0x0b, 0x19, 0x30, 0x20, 0x68, 0x3b, 0x8b, 0x3c, 0x4d, 0x00, 0x4e, 0xbc, 0xe0, 0x3b, 0x80, 0xe3, + 0xd4, 0xab, 0x42, 0xf6, 0xec, 0xa5, 0x98, 0xce, 0xe6, 0xc1, 0x43, 0x42, 0xfb, 0x17, 0x13, 0x7e, 0xd3, 0x5d, 0x25, + 0x57, 0xa6, 0xd6, 0xbd, 0x89, 0xae, 0x72, 0x95, 0xd3, 0xa7, 0x39, 0xc7, 0x30, 0x67, 0xb0, 0x0a, 0xc8, 0x39, 0x1b, + 0xf2, 0xe7, 0x97, 0x00, 0xd8, 0xb2, 0x16, 0x5e, 0xc4, 0x9f, 0x87, 0xb2, 0x5a, 0x00, 0xf7, 0xc8, 0x79, 0x64, 0x7e, + 0xf9, 0x6a, 0x3b, 0x94, 0x73, 0x8a, 0xc2, 0x58, 0xce, 0x4d, 0x4b, 0x8a, 0xd3, 0xa1, 0xa7, 0x60, 0x32, 0xb5, 0xe5, + 0xef, 0x5d, 0xe2, 0x32, 0x7b, 0x33, 0x09, 0xe7, 0xeb, 0xc8, 0xb6, 0xb5, 0xea, 0x1e, 0xba, 0x21, 0x18, 0xf4, 0x31, + 0x82, 0x96, 0xd5, 0x9b, 0x5f, 0x31, 0x18, 0x28, 0x6c, 0xdf, 0x9a, 0x6e, 0x5a, 0x74, 0x8a, 0x03, 0xce, 0xac, 0x75, + 0x8d, 0x4a, 0x55, 0x71, 0xe8, 0x25, 0xef, 0x96, 0x95, 0xdb, 0x65, 0xe9, 0x85, 0x20, 0x35, 0xea, 0x2a, 0x42, 0xa4, + 0x54, 0xec, 0xf0, 0x9e, 0xfc, 0x1a, 0x98, 0x78, 0x66, 0xe5, 0x28, 0x8d, 0xe7, 0x00, 0x13, 0xa4, 0xd0, 0x37, 0xe5, + 0x57, 0x80, 0x1b, 0xba, 0x88, 0xc2, 0xec, 0x4d, 0x5c, 0x05, 0xb5, 0xd5, 0xf4, 0x7b, 0x07, 0x27, 0xf6, 0xb2, 0xee, + 0xf7, 0x53, 0xa2, 0xf1, 0xc3, 0xd0, 0x0b, 0xfc, 0x7b, 0x3c, 0x3d, 0x34, 0x41, 0x6a, 0x5e, 0x79, 0x80, 0x57, 0x74, + 0xb9, 0xb5, 0x29, 0x57, 0x34, 0x2e, 0xe6, 0x35, 0x22, 0xc2, 0xa7, 0x8e, 0x62, 0xbb, 0xcd, 0x8f, 0x53, 0x1b, 0x83, + 0x41, 0x08, 0xf7, 0xad, 0x8c, 0xdf, 0x27, 0x5e, 0x35, 0x8b, 0xe6, 0xa0, 0x28, 0xcd, 0x34, 0x49, 0x48, 0x21, 0xbd, + 0x04, 0xe8, 0xa3, 0x41, 0xa8, 0xd5, 0x95, 0x7f, 0x24, 0x5e, 0xaa, 0xa6, 0xb5, 0x79, 0x8a, 0x35, 0x0a, 0xc4, 0x2c, + 0x9a, 0x37, 0x2c, 0xa3, 0x43, 0x52, 0x5d, 0x2e, 0x4d, 0x33, 0xfe, 0xb0, 0x9a, 0xa1, 0x5a, 0x71, 0xd2, 0x04, 0x35, + 0x4a, 0xb7, 0x70, 0x01, 0xfc, 0x1b, 0xdd, 0x71, 0x54, 0xa3, 0x48, 0xd1, 0x80, 0x4f, 0x20, 0xa6, 0xab, 0x30, 0x9b, + 0x27, 0xac, 0x35, 0x75, 0xcd, 0xe8, 0xf7, 0x65, 0x9c, 0x90, 0x49, 0x42, 0x72, 0x3e, 0x5c, 0xae, 0x1f, 0x49, 0x75, + 0x01, 0xa4, 0xca, 0x39, 0x9b, 0xf5, 0x7a, 0x73, 0xc0, 0xe8, 0x85, 0xf5, 0x0b, 0x1b, 0x57, 0x70, 0x79, 0x4d, 0x98, + 0xbb, 0xea, 0x47, 0x98, 0x65, 0x50, 0x05, 0xa4, 0xf9, 0xb1, 0xa0, 0xd3, 0x2b, 0x17, 0x88, 0xfa, 0xf5, 0x48, 0x5d, + 0x50, 0x66, 0xe9, 0xdc, 0x22, 0x02, 0x01, 0xaf, 0x61, 0xf5, 0x04, 0x92, 0x7d, 0xf9, 0xd8, 0xa7, 0x19, 0x05, 0xaa, + 0x23, 0x00, 0x65, 0xb3, 0x7e, 0x08, 0xfb, 0x07, 0x84, 0x13, 0xea, 0x6f, 0xde, 0xca, 0x59, 0x43, 0xf2, 0x40, 0xaa, + 0x09, 0x8f, 0xe1, 0xd4, 0x58, 0xe0, 0x4b, 0x8b, 0xde, 0x54, 0xf0, 0x9a, 0xe0, 0xb8, 0x17, 0x68, 0xed, 0x5b, 0xc0, + 0x11, 0x22, 0xb8, 0x0c, 0x4d, 0x9c, 0xf6, 0xf6, 0xbd, 0x00, 0x09, 0xcd, 0x2d, 0x9c, 0xeb, 0xb7, 0x2e, 0x68, 0x71, + 0x8a, 0x9c, 0x2c, 0xba, 0xc0, 0x40, 0x17, 0x64, 0xde, 0xf8, 0x67, 0x0e, 0x2b, 0x17, 0x20, 0x7b, 0xa9, 0x58, 0x49, + 0xc4, 0xb6, 0x57, 0x7f, 0x94, 0xca, 0x7e, 0x7b, 0x61, 0x4d, 0xe0, 0x97, 0x89, 0xfd, 0x12, 0x99, 0x7c, 0xd3, 0x53, + 0x93, 0xaf, 0x8c, 0x85, 0x4e, 0x2d, 0x83, 0x73, 0x7a, 0x62, 0x70, 0xee, 0xed, 0xad, 0xda, 0x94, 0x30, 0x14, 0x24, + 0x81, 0xa6, 0x4b, 0x0f, 0xeb, 0xa6, 0x3f, 0x3f, 0x69, 0xf1, 0x6b, 0xd5, 0xbe, 0x75, 0x3f, 0x0e, 0xb1, 0x8b, 0x5f, + 0x26, 0x9e, 0x61, 0x1f, 0xf5, 0x81, 0x03, 0x4c, 0x46, 0x4c, 0x5c, 0xf7, 0xfb, 0x50, 0xd8, 0x6c, 0x3c, 0x1f, 0xd5, + 0xc5, 0xcf, 0xc5, 0x03, 0x40, 0x39, 0x54, 0x60, 0x97, 0x43, 0x19, 0xca, 0x88, 0x4d, 0x6d, 0xb9, 0xe7, 0xf7, 0x97, + 0x61, 0x0e, 0xf2, 0x8e, 0xc6, 0xc4, 0xb9, 0x00, 0x31, 0x0c, 0xbe, 0xfe, 0xfd, 0x93, 0x43, 0xda, 0x7c, 0x7f, 0x01, + 0xdf, 0x1d, 0x5d, 0x7c, 0x40, 0x8e, 0x9b, 0x8b, 0x4d, 0x59, 0xdc, 0xa7, 0xb1, 0xb8, 0xf8, 0x1e, 0x52, 0xbf, 0xbf, + 0x28, 0xca, 0x8b, 0xef, 0x55, 0x65, 0xbe, 0xbf, 0xa0, 0x05, 0x37, 0xfa, 0xdd, 0x9a, 0x78, 0xff, 0xc8, 0x35, 0xed, + 0xd9, 0x12, 0xc2, 0xb1, 0xb4, 0xfa, 0x11, 0x94, 0x88, 0x8a, 0x14, 0x55, 0x86, 0xb2, 0x5a, 0x3b, 0xce, 0xfb, 0x44, + 0xc3, 0x63, 0xd3, 0x84, 0xc4, 0xd5, 0x12, 0xd6, 0xa1, 0x9e, 0x9d, 0x36, 0xc9, 0x8e, 0xf3, 0x40, 0x1d, 0x10, 0x15, + 0x7f, 0x5e, 0x8d, 0x76, 0xf4, 0x35, 0xf8, 0xd6, 0xf1, 0x58, 0x8d, 0xf6, 0xe6, 0xa7, 0x4f, 0xd6, 0x4a, 0x19, 0x6c, + 0xa4, 0x18, 0x85, 0x90, 0x28, 0x6e, 0xd7, 0x63, 0x00, 0xfc, 0xef, 0x1f, 0x8f, 0xf4, 0x7b, 0x2f, 0x7f, 0xab, 0xdd, + 0xd2, 0xaa, 0xe7, 0x87, 0x16, 0x61, 0xc6, 0xab, 0xda, 0xb0, 0xb3, 0x1d, 0x24, 0xa0, 0xf4, 0xa1, 0x69, 0x50, 0x53, + 0x44, 0x3f, 0x61, 0x35, 0xb1, 0x9c, 0xc3, 0x82, 0x94, 0x38, 0xc4, 0x70, 0x8c, 0x76, 0xe8, 0x71, 0xba, 0xa8, 0x79, + 0x2a, 0xdf, 0x21, 0xe3, 0xd6, 0xf7, 0x01, 0xc9, 0xa5, 0x70, 0xf9, 0xc1, 0x0b, 0x0d, 0x26, 0x7a, 0x91, 0x57, 0x45, + 0x26, 0x46, 0x82, 0x46, 0xf9, 0x0d, 0x89, 0x33, 0x17, 0x58, 0x8b, 0x0b, 0x85, 0x10, 0x16, 0x12, 0x2a, 0x77, 0x51, + 0x52, 0x7a, 0x70, 0xf1, 0xe4, 0x50, 0x36, 0xbf, 0x13, 0x26, 0xc4, 0x68, 0x01, 0x34, 0x38, 0xfb, 0x76, 0x79, 0x0f, + 0x61, 0x99, 0x7b, 0xbf, 0xbf, 0x59, 0xe5, 0x05, 0xc4, 0x65, 0x5e, 0x48, 0xc5, 0x6a, 0x79, 0x01, 0x34, 0x79, 0x22, + 0xbe, 0x08, 0x2b, 0x39, 0x0d, 0xaa, 0x8e, 0x62, 0xd5, 0x36, 0x5e, 0x56, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, + 0xdd, 0x67, 0xaf, 0x95, 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, + 0xe7, 0x26, 0xc8, 0x3f, 0xbe, 0x39, 0xa3, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, + 0x9b, 0x23, 0x35, 0x79, 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, + 0x67, 0x2b, 0x2a, 0x2f, 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xaa, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, + 0x62, 0x86, 0x29, 0xd6, 0x5f, 0xd8, 0xf2, 0xdb, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x6b, 0x16, 0xc2, + 0xf1, 0xb8, 0x9d, 0x14, 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0xc7, 0x63, 0x57, 0xcb, 0x36, 0xc2, 0x83, 0x87, 0xaa, + 0x85, 0xdb, 0x86, 0x55, 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, + 0x1b, 0x1b, 0xe0, 0x1a, 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, + 0x09, 0xa3, 0x15, 0xc2, 0xef, 0xa1, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, + 0x4a, 0xb1, 0x34, 0x6f, 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0xf3, 0xd0, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, + 0xcd, 0xe6, 0xc0, 0x7d, 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x67, 0xcb, 0xe3, + 0xf0, 0x2d, 0xfc, 0xcb, 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xcb, 0x15, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, + 0xad, 0xa8, 0x0d, 0x7f, 0xc3, 0xbf, 0x84, 0x7d, 0x84, 0xfd, 0x96, 0xe3, 0x4d, 0xd2, 0x10, 0x90, 0x09, 0xc4, 0x85, + 0x85, 0x20, 0xc1, 0xdf, 0x72, 0xc9, 0x3f, 0x27, 0x7c, 0xb6, 0x28, 0x81, 0xac, 0x0e, 0xa3, 0xf8, 0x84, 0x62, 0xa2, + 0x10, 0x86, 0x5b, 0x42, 0xef, 0xe8, 0xbf, 0x11, 0x25, 0xd9, 0xa4, 0xb2, 0x62, 0x3d, 0x90, 0x49, 0x12, 0x4c, 0xb0, + 0xf2, 0x42, 0xf9, 0xc2, 0xbd, 0x50, 0x6a, 0xad, 0x05, 0xad, 0x5f, 0xfe, 0x24, 0xf1, 0x0c, 0xe8, 0x1e, 0xc8, 0x18, + 0x74, 0x1b, 0x51, 0x4d, 0x72, 0x4c, 0x1f, 0xa5, 0xf3, 0x0c, 0x54, 0x40, 0x17, 0x9b, 0x2c, 0xac, 0x97, 0x45, 0xb9, + 0x6e, 0x85, 0x87, 0xca, 0xd2, 0x47, 0xea, 0x31, 0xe6, 0x85, 0x79, 0x72, 0x26, 0x1f, 0x3c, 0x02, 0x34, 0x3c, 0xca, + 0xd3, 0xaa, 0xa3, 0xb4, 0x7e, 0x60, 0x19, 0x30, 0x02, 0x67, 0xca, 0x80, 0x47, 0x58, 0x06, 0xe6, 0x69, 0x97, 0xa1, + 0x06, 0xb1, 0x46, 0xd5, 0x95, 0xda, 0x60, 0xce, 0x14, 0x25, 0x9f, 0x62, 0x69, 0x85, 0x31, 0x34, 0x75, 0xe5, 0x91, + 0xf5, 0x92, 0x13, 0xf6, 0x6c, 0x37, 0x90, 0x6e, 0x61, 0xab, 0xc0, 0x05, 0x5d, 0xcb, 0x12, 0xe5, 0xa2, 0x5b, 0x46, + 0x94, 0x89, 0x90, 0xfa, 0xd9, 0xc3, 0x99, 0x56, 0xfb, 0x8d, 0x9d, 0x74, 0x68, 0x8f, 0x14, 0xbd, 0x60, 0x20, 0x3e, + 0xed, 0x91, 0x52, 0xcf, 0x1a, 0xb9, 0x0c, 0x6c, 0xe9, 0x52, 0xd5, 0xf3, 0x5f, 0xa0, 0x7c, 0x07, 0x33, 0xe3, 0x6c, + 0xf6, 0xbb, 0xde, 0xdc, 0x9e, 0x1c, 0xea, 0xe6, 0x77, 0xd6, 0xeb, 0xc1, 0xd6, 0x20, 0x13, 0x5f, 0x28, 0xea, 0x29, + 0xab, 0x10, 0x2b, 0x32, 0xfb, 0x5f, 0xc2, 0xfb, 0x1d, 0xde, 0x1a, 0xa1, 0x59, 0x19, 0x0f, 0xf3, 0xd1, 0x93, 0x83, + 0x68, 0x7e, 0xef, 0x2c, 0xdb, 0xca, 0x55, 0xc9, 0x6c, 0xbf, 0x9f, 0x24, 0xcd, 0xd9, 0xe3, 0x35, 0x92, 0x3a, 0xc0, + 0xc7, 0xeb, 0x33, 0x7c, 0xa4, 0x12, 0x4a, 0x2d, 0xa8, 0x6a, 0xd0, 0xfa, 0xd8, 0xef, 0xad, 0xe7, 0xf4, 0xf1, 0x53, + 0x39, 0xdd, 0x92, 0x22, 0x8c, 0x1f, 0x18, 0x4c, 0xd9, 0x89, 0x53, 0x97, 0xaa, 0x19, 0xd2, 0xbb, 0x6e, 0x95, 0xd4, + 0x65, 0x8f, 0x12, 0x41, 0xa8, 0x83, 0xf5, 0x8b, 0xfd, 0x10, 0x66, 0xb6, 0xe8, 0x0f, 0x9b, 0xd5, 0x9c, 0x50, 0x10, + 0x01, 0xa2, 0x55, 0xde, 0x07, 0x4e, 0x49, 0xc2, 0xac, 0xb9, 0x21, 0xdd, 0x7a, 0x2b, 0xa5, 0xbd, 0x92, 0x02, 0xfa, + 0x65, 0x7e, 0x3c, 0xa2, 0xf9, 0xcd, 0xec, 0x5c, 0x95, 0xb4, 0xe5, 0x00, 0x22, 0x75, 0xde, 0xb4, 0x2f, 0x1d, 0x0e, + 0xfe, 0x83, 0xba, 0x12, 0xe5, 0x44, 0xd0, 0x51, 0xb4, 0x60, 0xb4, 0x5a, 0xb5, 0xab, 0xc8, 0xa6, 0x42, 0xb6, 0x24, + 0xc2, 0x89, 0x92, 0xbd, 0x12, 0xea, 0xa3, 0x5c, 0xed, 0x99, 0x86, 0xf8, 0x33, 0x01, 0x9b, 0x36, 0xf8, 0x5b, 0xe0, + 0x5e, 0x06, 0x67, 0xa6, 0x7d, 0x1a, 0x46, 0x40, 0x64, 0x0e, 0xc1, 0x7e, 0x7e, 0xd7, 0x83, 0x1c, 0x1e, 0x74, 0xa4, + 0xbf, 0xaa, 0x67, 0x05, 0x9e, 0xb9, 0x67, 0x9e, 0xbf, 0x3e, 0x93, 0x9e, 0x57, 0xf0, 0x40, 0x73, 0x1f, 0x66, 0xfc, + 0x45, 0x59, 0x86, 0xfb, 0xd1, 0xb2, 0x2c, 0xd6, 0x5e, 0xa4, 0xf7, 0xf1, 0x4c, 0x8a, 0x81, 0x44, 0x87, 0x99, 0xd1, + 0x55, 0xac, 0xe3, 0x1c, 0xc6, 0xbd, 0x3d, 0x09, 0x2b, 0xb4, 0x7f, 0x96, 0xd8, 0xeb, 0x02, 0x00, 0x1c, 0xb2, 0x06, + 0xad, 0xf0, 0x4e, 0xb7, 0xb7, 0x7b, 0x5c, 0x52, 0xa2, 0xb8, 0x51, 0xf3, 0xb3, 0x1a, 0x5a, 0x26, 0xa8, 0x65, 0xd6, + 0x9d, 0x4c, 0xa6, 0x48, 0x02, 0xdf, 0x86, 0xbd, 0x66, 0x79, 0x35, 0x6f, 0xe4, 0xf6, 0xf0, 0x2e, 0x5c, 0x8b, 0x58, + 0x5b, 0xd0, 0x49, 0x47, 0xc6, 0xe1, 0x5e, 0x68, 0x6e, 0xa4, 0x87, 0x27, 0x55, 0x12, 0x96, 0x22, 0x86, 0x5b, 0x20, + 0x3b, 0xa8, 0x6d, 0x25, 0x28, 0x81, 0x04, 0xf6, 0x43, 0x29, 0x96, 0xe9, 0x4e, 0x00, 0x98, 0x03, 0xff, 0x53, 0x1a, + 0xbb, 0xdd, 0x9d, 0x87, 0x78, 0xd5, 0xc8, 0xfb, 0x06, 0x21, 0xd8, 0x5f, 0x81, 0x9c, 0x06, 0x0c, 0x22, 0xc5, 0x48, + 0x16, 0x0c, 0x24, 0x00, 0x15, 0xdf, 0x80, 0x49, 0x6e, 0x5a, 0x79, 0x7e, 0x50, 0xe9, 0x0e, 0xa6, 0x7d, 0xd0, 0xbd, + 0xb8, 0xd6, 0x0c, 0x90, 0x7f, 0x27, 0x11, 0xff, 0x5b, 0xed, 0x95, 0xac, 0x62, 0x99, 0xdf, 0x98, 0x8b, 0x4e, 0x06, + 0x57, 0x0d, 0xe1, 0x17, 0xb3, 0x6c, 0xce, 0xa3, 0x59, 0xa6, 0x43, 0xfd, 0x8b, 0xe6, 0xa4, 0x14, 0xc0, 0x50, 0xc7, + 0x0b, 0xb0, 0xc6, 0xbb, 0xd2, 0x4d, 0x2b, 0x1e, 0x69, 0x8c, 0x51, 0x50, 0xa1, 0x83, 0xd0, 0xdf, 0x6a, 0x80, 0xd7, + 0x60, 0x92, 0x1b, 0x21, 0xf7, 0xc1, 0x05, 0xdd, 0xd0, 0x2d, 0xe7, 0x2e, 0x41, 0x4d, 0xaa, 0x96, 0x5f, 0x85, 0x50, + 0xef, 0x6a, 0xc9, 0xa5, 0xda, 0x7c, 0x6a, 0x94, 0x35, 0x82, 0x4c, 0x8e, 0xd2, 0xef, 0x53, 0x2e, 0xdc, 0xdc, 0x98, + 0xac, 0x8f, 0x47, 0xaf, 0xe0, 0xa6, 0xc6, 0x3f, 0x56, 0x92, 0x45, 0xd4, 0x1a, 0x12, 0x61, 0x6b, 0xb7, 0x42, 0xf7, + 0x1e, 0x37, 0x4a, 0xf3, 0x28, 0xdb, 0xc6, 0xa2, 0xf2, 0x7a, 0x09, 0x58, 0x8b, 0x7b, 0x40, 0x86, 0x4a, 0x4b, 0x3f, + 0x67, 0x05, 0x40, 0x06, 0x48, 0x61, 0xe3, 0x47, 0xa4, 0xbd, 0xfa, 0xe0, 0xa5, 0x7e, 0xbf, 0x6f, 0x4c, 0xf9, 0xef, + 0x1f, 0x72, 0x60, 0x26, 0x14, 0x65, 0xbd, 0x87, 0x09, 0x54, 0x79, 0xa9, 0x4f, 0xda, 0xb3, 0x9a, 0x3f, 0xdf, 0xd4, + 0x1e, 0x90, 0x5a, 0xf9, 0x16, 0x73, 0xd5, 0x2b, 0xfb, 0x62, 0x73, 0x48, 0xab, 0x5b, 0xa3, 0x71, 0x10, 0x2c, 0xad, + 0xde, 0x68, 0x95, 0x43, 0xd5, 0xf0, 0x1c, 0x44, 0x2a, 0xeb, 0xea, 0x9a, 0x3b, 0x57, 0xd7, 0x82, 0x23, 0x81, 0x6c, + 0xc9, 0x21, 0x2c, 0x8d, 0x85, 0xdc, 0x2b, 0x8f, 0xc7, 0xc2, 0xef, 0xf7, 0xd3, 0x59, 0x8e, 0x97, 0x16, 0xa0, 0x4c, + 0xdb, 0xd4, 0x5e, 0xe8, 0x1f, 0x8f, 0x3f, 0x82, 0xd7, 0x88, 0x7f, 0x3c, 0x96, 0xfd, 0xfe, 0x47, 0x73, 0x93, 0xb9, + 0x1c, 0x2b, 0xa5, 0xec, 0x35, 0x2a, 0xdd, 0xdf, 0x24, 0xbc, 0xf7, 0xbf, 0x47, 0xff, 0x7b, 0x74, 0xdd, 0x53, 0x01, + 0x60, 0x09, 0x9f, 0xe1, 0x0d, 0x9d, 0xa9, 0xcb, 0x39, 0x93, 0xee, 0xee, 0xca, 0x0f, 0xbd, 0xa7, 0xf1, 0xe1, 0x7b, + 0x73, 0xd3, 0xc6, 0x5f, 0xf3, 0x13, 0x4d, 0x42, 0xc7, 0x45, 0xff, 0x78, 0xfc, 0x94, 0x68, 0x7d, 0x5a, 0xaa, 0xf4, + 0x69, 0x0a, 0x3c, 0xc9, 0xb0, 0xe1, 0xba, 0x85, 0xe9, 0x68, 0x7e, 0xdc, 0x7c, 0x95, 0xbc, 0x38, 0x4b, 0xe1, 0xda, + 0x0b, 0x3a, 0x97, 0x29, 0x58, 0x57, 0x86, 0xe0, 0x66, 0x10, 0x40, 0xea, 0x10, 0xd2, 0xac, 0x69, 0xf8, 0x97, 0xdc, + 0x15, 0xbc, 0xb5, 0xc7, 0xbb, 0xc1, 0x88, 0x52, 0x47, 0xfa, 0xa4, 0x0d, 0xa1, 0x4b, 0x2a, 0xf9, 0x8f, 0x22, 0x8f, + 0x31, 0x66, 0xe3, 0x15, 0x91, 0x7d, 0x16, 0xf9, 0xcb, 0x02, 0x00, 0x8b, 0x00, 0x01, 0x39, 0x9d, 0x3b, 0x92, 0xf8, + 0xcf, 0xc9, 0xb7, 0x7f, 0x4c, 0x97, 0xf6, 0xa1, 0x2c, 0x56, 0xa5, 0xa8, 0xaa, 0x93, 0xd2, 0xf6, 0xb6, 0x5c, 0x0f, + 0xf4, 0xa1, 0xfd, 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, + 0x58, 0x3f, 0x7f, 0xd8, 0xbf, 0x89, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, + 0xc3, 0x54, 0xe2, 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0xbf, 0xe7, 0x30, 0xff, 0x75, + 0x7b, 0xb0, 0x3e, 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0xe7, 0xc2, 0x22, 0xf9, + 0xf5, 0xc9, 0x91, 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x89, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9d, 0xff, 0x95, 0x99, 0xff, + 0x03, 0x8c, 0x49, 0x28, 0x9e, 0x73, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0xcf, 0x81, + 0x83, 0xf9, 0x39, 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0xd7, 0x16, 0xcf, 0x95, + 0x5c, 0x10, 0xfa, 0xba, 0x0a, 0xb3, 0x71, 0x5d, 0x6c, 0x2b, 0x51, 0x6c, 0x21, 0x6c, 0x04, 0xd4, 0xb2, 0xd5, 0xb4, + 0xb6, 0x15, 0xb2, 0x3f, 0x89, 0x16, 0x6d, 0x97, 0xa1, 0x9a, 0x8c, 0xb2, 0x74, 0x33, 0x05, 0x52, 0xbd, 0x00, 0xce, + 0x22, 0xf3, 0xca, 0x3b, 0x67, 0x0f, 0xd8, 0xa1, 0xf1, 0x14, 0x18, 0x51, 0xe9, 0x8f, 0xaa, 0x31, 0x3a, 0x3d, 0xd1, + 0xef, 0x57, 0x53, 0x0a, 0xf9, 0xfa, 0x09, 0x30, 0xb9, 0x6a, 0xb9, 0x00, 0x7d, 0x19, 0xea, 0xa0, 0x12, 0xa5, 0x56, + 0x0c, 0x23, 0x16, 0x7e, 0x12, 0xc8, 0xde, 0x4c, 0x41, 0xcd, 0x2a, 0x4a, 0x42, 0x25, 0x2a, 0x25, 0x5b, 0x13, 0xd4, + 0xd2, 0xfb, 0xa2, 0xa8, 0x0f, 0x15, 0x38, 0x4a, 0x46, 0xda, 0x2c, 0xa7, 0xcc, 0xb8, 0x28, 0x73, 0xd1, 0x0f, 0xf6, + 0x2f, 0xc0, 0xf8, 0x92, 0xf9, 0x2c, 0xf7, 0x1d, 0x9d, 0xd3, 0x76, 0x5c, 0xa0, 0xcc, 0x2d, 0xa7, 0xad, 0x96, 0x3c, + 0x26, 0xef, 0x59, 0xb0, 0xed, 0xbf, 0x48, 0x90, 0x57, 0x11, 0xe6, 0x13, 0xaa, 0x6c, 0xfe, 0x9e, 0x7b, 0xc4, 0x3e, + 0xda, 0xe1, 0xc2, 0x44, 0xa4, 0xb7, 0x60, 0x49, 0x0c, 0xb3, 0x52, 0x84, 0xf1, 0x1e, 0xbc, 0x7f, 0xb6, 0x95, 0x18, + 0x5d, 0xa0, 0x93, 0xfb, 0xc5, 0x43, 0x5a, 0x27, 0x17, 0x6f, 0x5e, 0x5d, 0x7c, 0xdf, 0x1b, 0x14, 0xa3, 0x34, 0x1e, + 0xf4, 0xbe, 0xbf, 0x58, 0x6f, 0x01, 0x22, 0x53, 0x5c, 0xc4, 0x64, 0x4a, 0x13, 0xf1, 0x05, 0x19, 0x06, 0x2f, 0xea, + 0x44, 0x5c, 0xd0, 0xc4, 0x74, 0x5f, 0xa3, 0x34, 0xf9, 0x76, 0x14, 0xe6, 0xf0, 0x72, 0x29, 0xb6, 0x95, 0x88, 0xc1, + 0x4e, 0xa9, 0xe6, 0xd9, 0xc9, 0x59, 0x2c, 0x3d, 0x06, 0x5d, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, + 0x05, 0x84, 0x1e, 0xf0, 0xcc, 0xcf, 0xe3, 0x51, 0x24, 0x10, 0x6a, 0xc1, 0x9c, 0x4c, 0x23, 0xba, 0x21, 0xbd, 0xc4, + 0x3e, 0x03, 0xb3, 0x90, 0xd2, 0x3c, 0xb8, 0xb9, 0x5a, 0xb4, 0xdc, 0x39, 0x2b, 0x47, 0x61, 0xb5, 0x11, 0x51, 0x8d, + 0x54, 0xc7, 0xe0, 0xbc, 0x03, 0x11, 0x00, 0x8a, 0x11, 0x3c, 0xe3, 0x51, 0xbf, 0x1f, 0xa9, 0xa0, 0x9c, 0x84, 0x7e, + 0x51, 0xe8, 0x97, 0xc6, 0xa0, 0x8c, 0xf9, 0x97, 0x50, 0x13, 0x03, 0xd4, 0x3b, 0x1e, 0x2a, 0x8e, 0x00, 0x5c, 0xce, + 0x11, 0x33, 0xce, 0x7b, 0xdc, 0x45, 0xe3, 0x54, 0xbc, 0x13, 0xea, 0x3a, 0x58, 0x2a, 0xd4, 0x79, 0x53, 0x1f, 0xe9, + 0x39, 0x69, 0x12, 0x34, 0x88, 0x1b, 0x78, 0xbc, 0x1a, 0x02, 0xaa, 0xb5, 0x90, 0x7a, 0x0b, 0x9d, 0x52, 0xd5, 0x21, + 0xb0, 0x06, 0xb8, 0x44, 0x61, 0x3b, 0x61, 0x72, 0x44, 0xdb, 0xb2, 0x14, 0xf9, 0x09, 0x1b, 0xb4, 0x4b, 0x46, 0xa6, + 0x0e, 0x2e, 0x97, 0xcb, 0x89, 0xa8, 0x7f, 0xcd, 0xb7, 0x00, 0xce, 0x0b, 0xf9, 0xad, 0xdd, 0x6c, 0x99, 0x64, 0xbb, + 0xfe, 0x3f, 0xbc, 0x7d, 0x09, 0x77, 0xdb, 0x46, 0xb2, 0xee, 0x5f, 0x11, 0xf1, 0x1c, 0x06, 0x6d, 0x36, 0x29, 0x52, + 0xb1, 0x33, 0x09, 0xa8, 0x16, 0xaf, 0xe2, 0x25, 0x71, 0x26, 0x5e, 0x62, 0x39, 0x99, 0xcc, 0xf0, 0xf1, 0x2a, 0x10, + 0xd0, 0x12, 0x11, 0x43, 0x68, 0x06, 0x00, 0xb5, 0x84, 0xc4, 0x7f, 0x7f, 0xa7, 0xaa, 0x77, 0x10, 0x94, 0x3d, 0xf3, + 0xee, 0x7b, 0xc7, 0xe7, 0x58, 0x44, 0xa3, 0xd1, 0x7b, 0x57, 0x57, 0xd7, 0xf2, 0x55, 0x65, 0x63, 0x96, 0x94, 0xbc, + 0x5a, 0x89, 0xa2, 0xca, 0x6e, 0xf8, 0x4f, 0xe6, 0xa5, 0x1f, 0x40, 0x0a, 0xed, 0x48, 0x5f, 0xb7, 0xbb, 0xa3, 0xc4, + 0x38, 0xa6, 0x1c, 0xd7, 0x52, 0xe9, 0x5e, 0x8d, 0xaa, 0x13, 0x37, 0x5b, 0xe5, 0x5a, 0x66, 0x69, 0xca, 0x8b, 0x57, + 0x45, 0x9a, 0x25, 0x4e, 0x72, 0xac, 0x02, 0x54, 0xdb, 0xc8, 0x57, 0x36, 0x36, 0xf2, 0xf3, 0xac, 0xc2, 0x80, 0xc1, + 0x5e, 0xa3, 0x5a, 0xa1, 0xa6, 0x74, 0xe0, 0x0b, 0xf1, 0x1e, 0x23, 0x6e, 0xb3, 0x22, 0x01, 0x86, 0x1f, 0x13, 0xd5, + 0x25, 0x3d, 0x85, 0x28, 0x0f, 0x32, 0x1e, 0xf7, 0x73, 0x8e, 0x88, 0xd7, 0x46, 0x65, 0x0e, 0x4c, 0xb6, 0x52, 0x41, + 0x22, 0xd8, 0x5d, 0x36, 0x57, 0x8b, 0x68, 0x21, 0xef, 0x42, 0xbd, 0x78, 0xbb, 0xed, 0x25, 0x92, 0x0e, 0x58, 0xf9, + 0x69, 0xf0, 0x32, 0xce, 0x72, 0x9e, 0x1e, 0xd4, 0xe2, 0x40, 0x6e, 0xa8, 0x03, 0xe9, 0xcc, 0x01, 0x3b, 0xef, 0xcb, + 0xfa, 0x40, 0xad, 0xe9, 0x03, 0xd5, 0xce, 0x03, 0xb8, 0x60, 0xe0, 0xce, 0xbd, 0xca, 0x6e, 0x78, 0x71, 0x00, 0xca, + 0x40, 0x63, 0x3c, 0xd0, 0x54, 0xf5, 0x48, 0x4e, 0x8c, 0x0a, 0x5c, 0x9d, 0xa8, 0x83, 0x39, 0xa0, 0xdf, 0x03, 0x52, + 0x54, 0xeb, 0xed, 0x4a, 0x1d, 0xb4, 0x01, 0xfd, 0x69, 0xa9, 0xfb, 0xa0, 0xa2, 0xc5, 0xcb, 0x90, 0xc0, 0xde, 0x90, + 0x2a, 0xa4, 0x56, 0x2d, 0xab, 0x40, 0xf1, 0x86, 0xb3, 0x78, 0x77, 0xae, 0x25, 0x1b, 0xe7, 0x25, 0x02, 0x7b, 0x65, + 0x45, 0x1d, 0x67, 0xc5, 0xa9, 0x93, 0xca, 0x1b, 0xe5, 0x24, 0x53, 0x69, 0xdf, 0xb2, 0x82, 0xba, 0x3b, 0x44, 0xdf, + 0x22, 0xf5, 0x61, 0xf0, 0x22, 0xac, 0xc9, 0x8c, 0xf7, 0xfb, 0x62, 0x26, 0xa2, 0x62, 0x56, 0x1d, 0x16, 0x91, 0x44, + 0x68, 0xdb, 0x27, 0x02, 0x7a, 0x50, 0x02, 0xe4, 0x0a, 0x80, 0xea, 0x87, 0x84, 0x3f, 0x0f, 0x49, 0x7d, 0x3a, 0x85, + 0x3e, 0xa5, 0xb2, 0x5e, 0x71, 0x0a, 0xaa, 0x1b, 0x6f, 0x64, 0xbd, 0x0a, 0x5a, 0x3c, 0x96, 0x63, 0xb5, 0xa1, 0x6d, + 0x4e, 0x8d, 0x77, 0xbd, 0xde, 0x60, 0xd2, 0xe6, 0x42, 0xae, 0xc2, 0x90, 0x44, 0xb7, 0x85, 0x13, 0x3e, 0xc4, 0x60, + 0x65, 0xb5, 0x36, 0xbf, 0x8e, 0xfd, 0x91, 0x15, 0x29, 0xee, 0x67, 0x43, 0x9c, 0xbb, 0x78, 0x3c, 0xa7, 0xfa, 0x46, + 0x49, 0x8b, 0x74, 0x9b, 0xef, 0xd5, 0x65, 0x48, 0x51, 0x51, 0x4d, 0x1a, 0x55, 0x66, 0xd0, 0x7d, 0xdb, 0xbc, 0x55, + 0x3d, 0xc2, 0x04, 0x78, 0xa5, 0x32, 0xa8, 0x46, 0xe3, 0x81, 0x58, 0xd5, 0xa3, 0x72, 0x5d, 0x14, 0x88, 0x36, 0x0c, + 0x39, 0x66, 0x86, 0x90, 0x64, 0x7f, 0xf1, 0xef, 0x64, 0x70, 0x85, 0x32, 0xbe, 0xd5, 0x70, 0xde, 0xb5, 0xf1, 0xec, + 0x6e, 0x22, 0x37, 0x27, 0x16, 0xd6, 0xb8, 0x0f, 0xfe, 0x51, 0xab, 0x9d, 0x05, 0x94, 0x35, 0xad, 0x6a, 0x38, 0xdc, + 0xa3, 0x3a, 0x16, 0xa5, 0x06, 0x24, 0x76, 0xc8, 0x72, 0xd9, 0x3a, 0x66, 0xd0, 0x80, 0xfe, 0x2e, 0xbb, 0x5e, 0x5f, + 0x23, 0x6a, 0x5b, 0x81, 0xac, 0x93, 0x90, 0xfe, 0x25, 0xed, 0x51, 0x57, 0xf6, 0x54, 0xee, 0xb7, 0x6d, 0xaa, 0x1c, + 0x1a, 0x20, 0x79, 0xec, 0xe6, 0x2c, 0x90, 0x1d, 0x09, 0xa2, 0x40, 0x6e, 0xbd, 0x60, 0xea, 0x9c, 0x32, 0x65, 0x07, + 0xf2, 0x73, 0xa9, 0xcf, 0xb0, 0xcf, 0x38, 0x62, 0xf4, 0x52, 0x89, 0xc1, 0xd4, 0x47, 0x1b, 0xd5, 0xb4, 0x56, 0x80, + 0xaa, 0x9f, 0x6e, 0xe0, 0x4f, 0x54, 0x36, 0x68, 0xa8, 0x35, 0x12, 0x85, 0xa4, 0x89, 0x12, 0x3a, 0x96, 0x96, 0x2a, + 0x98, 0x42, 0x27, 0x91, 0x30, 0x04, 0x34, 0x4c, 0x88, 0x4a, 0x2a, 0xf1, 0xd6, 0x00, 0xce, 0x7c, 0xbc, 0xa8, 0xd6, + 0xa5, 0x32, 0x98, 0xfb, 0x21, 0xbe, 0xe1, 0xaf, 0x9e, 0x5b, 0xa3, 0xfa, 0x96, 0xb5, 0xbe, 0xa3, 0x05, 0xf9, 0x21, + 0xe4, 0x14, 0x1d, 0x98, 0xd8, 0xc9, 0x06, 0x0f, 0xe6, 0xa2, 0x51, 0xa1, 0x2e, 0xde, 0xaa, 0xf8, 0x2b, 0xca, 0x04, + 0xef, 0x01, 0x4f, 0x11, 0x65, 0x78, 0x58, 0x69, 0xab, 0x6a, 0x7c, 0x2a, 0x58, 0x4b, 0x0f, 0x56, 0xf2, 0x74, 0x9d, + 0xf0, 0x10, 0xf4, 0x48, 0x84, 0x9d, 0x84, 0xe5, 0x3c, 0x5e, 0xc0, 0x71, 0x52, 0x12, 0x50, 0x3b, 0xa8, 0x2b, 0xf8, + 0x7c, 0x81, 0xee, 0xaf, 0x02, 0x3d, 0xc0, 0xd0, 0x82, 0xd8, 0x0f, 0x7d, 0x3a, 0xba, 0x8e, 0x57, 0x9e, 0x8a, 0x84, + 0xcf, 0x4b, 0xb0, 0x1d, 0x92, 0xea, 0x29, 0xd0, 0x42, 0x25, 0x52, 0x3f, 0x0c, 0x7c, 0x87, 0x02, 0xbe, 0x56, 0x3a, + 0x40, 0x4d, 0x3f, 0x63, 0x9a, 0x1a, 0x67, 0xa8, 0x7c, 0xe6, 0xdc, 0x33, 0xa3, 0xe5, 0xcc, 0x80, 0x31, 0xa8, 0xdb, + 0x68, 0x8a, 0xe2, 0x9c, 0x7c, 0x16, 0x94, 0x71, 0x9a, 0xc5, 0x39, 0xf8, 0x6d, 0xc6, 0x25, 0x66, 0x4c, 0xe2, 0x9a, + 0x5f, 0x89, 0x12, 0xb4, 0xdd, 0xb9, 0x4c, 0x6d, 0x1a, 0x10, 0x90, 0xfd, 0x00, 0x56, 0x2f, 0x9e, 0x8e, 0xca, 0x7a, + 0x77, 0x29, 0x53, 0x88, 0xb2, 0x0a, 0xc1, 0xa6, 0x99, 0x2e, 0xd9, 0x69, 0x28, 0xb5, 0x39, 0x10, 0xdf, 0x08, 0x8d, + 0xfb, 0xa7, 0x61, 0x6c, 0x34, 0xc5, 0xc6, 0xee, 0x6d, 0xbb, 0xfd, 0xad, 0x70, 0xd2, 0x69, 0x4e, 0x7a, 0x8c, 0xfd, + 0x56, 0x84, 0xe5, 0xc8, 0x74, 0x84, 0xc0, 0x92, 0x73, 0x3e, 0x75, 0x5f, 0xd1, 0x62, 0x9e, 0x80, 0xe9, 0x88, 0x8a, + 0x90, 0x0b, 0x94, 0x1d, 0xa3, 0xb8, 0x03, 0x83, 0x0b, 0x66, 0x42, 0x10, 0x4b, 0x4f, 0x5d, 0x48, 0x96, 0x24, 0x65, + 0xf0, 0x3c, 0x75, 0x30, 0xe0, 0xd7, 0x4c, 0x9a, 0xbb, 0x48, 0xeb, 0xd3, 0x25, 0x99, 0xa6, 0xc8, 0x40, 0xac, 0xc3, + 0x4d, 0x96, 0x46, 0x89, 0x14, 0x91, 0x2d, 0xd1, 0x3f, 0x52, 0x53, 0x2c, 0x15, 0xae, 0x17, 0xa9, 0x12, 0xa1, 0xd5, + 0x3c, 0xc5, 0x93, 0x3a, 0x6d, 0xd2, 0x11, 0xc6, 0x9b, 0x04, 0xa5, 0x5c, 0x03, 0x03, 0x55, 0x50, 0xb5, 0x14, 0x36, + 0xe5, 0x76, 0xab, 0x2e, 0x56, 0xd5, 0x3c, 0x5e, 0xe0, 0xcb, 0x0a, 0x47, 0xf1, 0xef, 0xdc, 0x89, 0x35, 0x25, 0xb7, + 0x07, 0x35, 0x23, 0x4a, 0xe8, 0xdf, 0x39, 0x5c, 0x24, 0xbe, 0x13, 0x2a, 0xee, 0x1f, 0x5a, 0x84, 0x9c, 0xcb, 0x83, + 0x54, 0x73, 0x43, 0x3b, 0xc2, 0x7f, 0xcd, 0xf5, 0x69, 0x67, 0x74, 0x5f, 0xcd, 0xa8, 0xf0, 0x7b, 0x1d, 0x3c, 0x63, + 0xd4, 0x67, 0x03, 0x87, 0x15, 0xa2, 0xd0, 0x86, 0x9d, 0x14, 0x52, 0xb4, 0x30, 0x14, 0xf2, 0x2f, 0xa1, 0xd5, 0x09, + 0xb7, 0x66, 0x94, 0x05, 0xe3, 0xd3, 0xe2, 0xb8, 0x9a, 0x0e, 0x06, 0x05, 0xa9, 0xb5, 0x85, 0x1e, 0x5c, 0x0f, 0x1c, + 0xff, 0x1e, 0xb8, 0x85, 0x38, 0x70, 0xc8, 0xd5, 0x90, 0x6b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8f, 0x2a, 0x19, 0xbc, + 0x9a, 0xc8, 0x16, 0xfc, 0xbd, 0x08, 0x03, 0xf4, 0x49, 0x0a, 0xc0, 0x64, 0x30, 0xe5, 0x77, 0x20, 0x51, 0x3a, 0x97, + 0x37, 0xa4, 0x5f, 0x8a, 0x92, 0x5f, 0xf2, 0x92, 0x17, 0x89, 0x2d, 0xc0, 0xf0, 0x0e, 0xa6, 0xd7, 0x51, 0x4d, 0x25, + 0x10, 0xaf, 0xee, 0x71, 0xc4, 0xb5, 0xf7, 0x9f, 0xee, 0xb1, 0x01, 0x6a, 0x35, 0x8e, 0x0d, 0x2e, 0x73, 0x0c, 0x2e, + 0xe8, 0x4a, 0x62, 0xab, 0xa9, 0x86, 0x11, 0x81, 0x81, 0x0b, 0x38, 0x08, 0x4b, 0x24, 0xc7, 0x56, 0xf1, 0x9a, 0x78, + 0x52, 0xda, 0x07, 0x86, 0xa3, 0x4d, 0x72, 0x5c, 0x9b, 0x65, 0x3b, 0x81, 0xf3, 0x45, 0xe7, 0xa4, 0xe9, 0x58, 0x36, + 0x78, 0x9f, 0xd7, 0xe7, 0xd7, 0xfe, 0x21, 0xa1, 0x32, 0xd8, 0x0d, 0x6f, 0x07, 0xbb, 0xb1, 0xc2, 0xaf, 0x79, 0xb5, + 0x50, 0xf1, 0x59, 0xf4, 0x25, 0xcb, 0x6d, 0xad, 0x73, 0x4b, 0x12, 0x4a, 0x01, 0xed, 0xb2, 0x2c, 0xa8, 0x89, 0x00, + 0x74, 0x3f, 0xfc, 0x05, 0x42, 0x67, 0xf8, 0xdb, 0x63, 0x70, 0x45, 0x0a, 0xf7, 0x0e, 0x41, 0x65, 0x4c, 0x37, 0x77, + 0x6a, 0x03, 0xbe, 0x18, 0xf7, 0x67, 0x4c, 0x1d, 0xfd, 0x36, 0x13, 0xbb, 0xba, 0x6e, 0x87, 0x2c, 0xc3, 0x47, 0xb8, + 0x52, 0x00, 0x2c, 0x13, 0xfe, 0x62, 0x6c, 0x49, 0xf9, 0x09, 0xc0, 0xa9, 0xa9, 0x88, 0x3e, 0x41, 0xa0, 0xe1, 0x94, + 0x68, 0x39, 0xba, 0x91, 0x8e, 0x68, 0x1a, 0x69, 0x4d, 0xb5, 0x42, 0x7b, 0xeb, 0x61, 0x91, 0xd6, 0x34, 0x9c, 0xb8, + 0x0f, 0x8a, 0x79, 0x95, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0x51, 0x1f, 0x21, 0x2e, 0x61, 0x49, 0x14, 0x61, + 0x71, 0x4c, 0xf1, 0x63, 0x42, 0x37, 0xbe, 0xb6, 0xe9, 0x03, 0xd2, 0x5f, 0x5c, 0xb3, 0x6e, 0xca, 0xb2, 0x71, 0xed, + 0xa1, 0xe2, 0xc5, 0xd4, 0x0f, 0x7e, 0x98, 0xc8, 0x62, 0xdc, 0x2f, 0x6a, 0x57, 0x6a, 0x05, 0x30, 0xcc, 0x5d, 0xf5, + 0xf4, 0xfb, 0x7e, 0xb6, 0x1c, 0x08, 0x95, 0xdb, 0x19, 0x24, 0x7d, 0x2a, 0x9e, 0x1f, 0x1c, 0xd1, 0xca, 0x42, 0xcf, + 0x1d, 0x97, 0xc6, 0x87, 0xca, 0x6b, 0x53, 0x23, 0x5a, 0x23, 0x43, 0x65, 0xea, 0x80, 0xf5, 0xfd, 0x43, 0xb8, 0xbb, + 0xa8, 0x69, 0xa8, 0x74, 0xcf, 0x5d, 0x8b, 0x82, 0x13, 0x77, 0x80, 0xb1, 0xb8, 0x90, 0x34, 0x2a, 0x08, 0x93, 0x7a, + 0x34, 0x38, 0xc9, 0x5e, 0x5d, 0x9d, 0x9c, 0x29, 0xe6, 0x09, 0x6c, 0x54, 0xcb, 0xb6, 0xbf, 0xa2, 0x54, 0x97, 0x72, + 0x73, 0x45, 0xf1, 0x3d, 0xa4, 0xcd, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x33, 0x05, 0x17, 0xc6, 0xc1, 0xba, 0xe3, + 0x4e, 0xd9, 0x73, 0x45, 0x99, 0xc6, 0x06, 0x77, 0xed, 0x31, 0x26, 0xda, 0x7e, 0x77, 0xc9, 0x93, 0x8f, 0xc8, 0x82, + 0x7f, 0x97, 0x15, 0xe0, 0x99, 0x6c, 0x5f, 0xc9, 0xfc, 0x3f, 0xb8, 0x57, 0x5b, 0xf3, 0xce, 0x98, 0x7f, 0x3a, 0xd6, + 0xc3, 0x9d, 0xc3, 0xe4, 0x06, 0xe8, 0x0c, 0xe8, 0xe6, 0x5a, 0xa4, 0x1c, 0x90, 0x01, 0x8c, 0x45, 0x32, 0x1a, 0xf0, + 0xa1, 0x95, 0x65, 0xdb, 0x77, 0x5a, 0x5e, 0x10, 0xf6, 0x12, 0xb8, 0xe9, 0xfe, 0xda, 0xf4, 0xcc, 0xa9, 0x5a, 0x89, + 0xa2, 0x4b, 0x63, 0x63, 0x59, 0x2a, 0x81, 0xdd, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x78, 0x39, 0xcd, 0x0d, 0x75, 0xdb, + 0xd8, 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0x35, 0x22, 0xf4, 0x54, 0x8a, + 0xd0, 0xa7, 0xa9, 0xdf, 0x07, 0xb3, 0xaa, 0xd6, 0x5e, 0x9c, 0xa3, 0x41, 0xaa, 0x18, 0xf9, 0xb7, 0x37, 0xbc, 0xbc, + 0xcc, 0xc5, 0x2d, 0x60, 0x20, 0x93, 0x46, 0x2b, 0x2c, 0xaf, 0xc1, 0x9d, 0x1f, 0x1d, 0xc7, 0x19, 0xc0, 0x26, 0x41, + 0xb0, 0x56, 0x84, 0x47, 0x56, 0x89, 0x33, 0x00, 0x41, 0x76, 0x27, 0x4d, 0xc5, 0x73, 0x2d, 0x31, 0xa6, 0x2f, 0x70, + 0x57, 0x39, 0x3b, 0xd9, 0xe4, 0x66, 0xd1, 0xfb, 0x33, 0xac, 0x3a, 0x52, 0x19, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, + 0x06, 0x4d, 0x11, 0x52, 0x3e, 0x64, 0x4f, 0xda, 0xbf, 0x02, 0x1a, 0x9c, 0x67, 0xe9, 0x9d, 0xb1, 0xca, 0xdf, 0x28, + 0x21, 0x4e, 0x14, 0x53, 0x2b, 0xbe, 0x89, 0x12, 0x75, 0x7e, 0x26, 0xda, 0x0d, 0x04, 0x52, 0x7f, 0xc0, 0xa0, 0x1a, + 0x65, 0x98, 0xc0, 0x75, 0x20, 0x8a, 0xcd, 0x89, 0xea, 0x2d, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x01, 0x50, 0xef, 0xd8, + 0xfa, 0x08, 0x68, 0x96, 0xbe, 0x69, 0xad, 0x73, 0x4d, 0x28, 0xb4, 0x13, 0x98, 0x64, 0x90, 0xe4, 0x59, 0x67, 0x98, + 0xa0, 0xda, 0x8c, 0x49, 0xe7, 0x7d, 0x80, 0xee, 0xae, 0x45, 0x5d, 0x7c, 0xd3, 0xb9, 0x83, 0xf6, 0x71, 0xfd, 0x4a, + 0x8b, 0xec, 0xf1, 0xe7, 0x2d, 0x11, 0x16, 0x81, 0xb3, 0x56, 0xe7, 0xab, 0x47, 0x38, 0x30, 0x15, 0x99, 0x86, 0xbd, + 0x44, 0x2a, 0x59, 0xb6, 0xdb, 0x5e, 0x6f, 0xaf, 0x88, 0xab, 0xc7, 0x58, 0xed, 0xdc, 0xcc, 0xcd, 0x9d, 0x6a, 0x5d, + 0xec, 0xde, 0xb4, 0xdd, 0x14, 0x33, 0x6a, 0xad, 0xdd, 0xae, 0x39, 0x21, 0x4f, 0xbe, 0x15, 0xd5, 0x4a, 0x9d, 0xae, + 0x0d, 0xda, 0x21, 0x9e, 0x75, 0x91, 0xc1, 0x8d, 0xf2, 0xb9, 0x15, 0x3a, 0xc9, 0x38, 0xab, 0x56, 0x5d, 0xb0, 0xb9, + 0xe6, 0xf5, 0x52, 0xa4, 0x51, 0x45, 0xd1, 0xe6, 0x3c, 0x2a, 0x68, 0x22, 0xd6, 0x45, 0x1d, 0x89, 0x06, 0xf5, 0xa2, + 0x46, 0x63, 0x80, 0x80, 0x4c, 0xe7, 0xbe, 0x07, 0x55, 0x30, 0x1b, 0x8a, 0x48, 0x4c, 0xdf, 0x83, 0xa5, 0x7d, 0x01, + 0xfb, 0xa2, 0xd9, 0x57, 0x67, 0x8b, 0x6f, 0x75, 0x84, 0x60, 0x12, 0xb3, 0x07, 0xc2, 0xc0, 0xf9, 0xc6, 0x90, 0xd3, + 0x2e, 0x71, 0x99, 0xef, 0x96, 0xb0, 0x87, 0xdb, 0x15, 0xec, 0xc4, 0xce, 0x93, 0xe2, 0xe6, 0x4a, 0x76, 0x52, 0xce, + 0xc7, 0xa0, 0xfd, 0x12, 0xf2, 0xda, 0xa5, 0xb8, 0xf5, 0x78, 0x10, 0xd0, 0x60, 0x50, 0x6a, 0xfe, 0x75, 0xa2, 0x3d, + 0x3c, 0x69, 0x40, 0x90, 0x94, 0x83, 0x8b, 0xb6, 0x63, 0xf8, 0x3e, 0x99, 0x8a, 0x63, 0x8e, 0x16, 0xef, 0xd0, 0xea, + 0x04, 0xa2, 0x78, 0x81, 0xbd, 0x9b, 0x56, 0x15, 0x6a, 0x11, 0x94, 0xa3, 0xe5, 0x2f, 0x64, 0x75, 0x08, 0x28, 0xa4, + 0x7c, 0x45, 0xa1, 0x6c, 0x9d, 0x18, 0xea, 0xe1, 0x17, 0xf3, 0xc9, 0x42, 0xcd, 0xc0, 0x40, 0xcc, 0x8f, 0x16, 0x6a, + 0x16, 0x06, 0x62, 0xfe, 0xd5, 0xa2, 0xb1, 0xeb, 0x40, 0x11, 0x10, 0xc7, 0x85, 0xa3, 0x93, 0xd2, 0xca, 0x6c, 0x01, + 0xdd, 0x3c, 0x44, 0xd0, 0xff, 0x6e, 0x0e, 0x41, 0x2b, 0x17, 0xda, 0x91, 0x1b, 0xd0, 0x76, 0x1c, 0x02, 0x73, 0xc5, + 0xa4, 0x95, 0x0e, 0x40, 0x74, 0xcc, 0xc6, 0x60, 0x88, 0x2d, 0x3f, 0x38, 0x66, 0xe3, 0xa9, 0x4b, 0x82, 0x80, 0xd1, + 0xfd, 0x41, 0x43, 0x82, 0xdf, 0xe1, 0x55, 0xfa, 0x64, 0x83, 0xbe, 0x66, 0xce, 0xdd, 0xd0, 0xb9, 0xb8, 0x82, 0x53, + 0xb5, 0xbd, 0x27, 0xa1, 0x9b, 0x4c, 0x3b, 0x40, 0xaf, 0x26, 0x6e, 0xc8, 0xaf, 0x8c, 0x46, 0xa3, 0x62, 0x64, 0x00, + 0x20, 0x88, 0xe6, 0x1c, 0xfc, 0x9c, 0x86, 0xcb, 0x97, 0xb7, 0x9e, 0x4d, 0x31, 0x02, 0x5a, 0xc8, 0x44, 0xf3, 0x00, + 0x65, 0x55, 0x63, 0x68, 0x86, 0xde, 0x21, 0xc7, 0x0f, 0x0f, 0xbe, 0xce, 0xf8, 0x89, 0xc3, 0xb5, 0x87, 0x73, 0xe1, + 0xba, 0xac, 0x69, 0x99, 0x43, 0xe7, 0xd9, 0xc7, 0xf1, 0x1e, 0xc6, 0xc9, 0xa7, 0x59, 0x28, 0x67, 0xbc, 0xa6, 0xff, + 0x51, 0xe9, 0x7e, 0x87, 0x43, 0x4e, 0x57, 0xb0, 0xe2, 0x66, 0x75, 0xa8, 0xf9, 0x59, 0xe4, 0x8d, 0x23, 0xde, 0x90, + 0xa8, 0xee, 0x3e, 0xef, 0x4d, 0x98, 0xd2, 0x8e, 0x71, 0x00, 0x70, 0xa2, 0x56, 0x0d, 0xbb, 0xd2, 0xb8, 0x56, 0x07, + 0x31, 0x0c, 0x25, 0x6c, 0x95, 0x38, 0xaa, 0xa4, 0xbf, 0x01, 0x08, 0x8b, 0xa1, 0x38, 0xde, 0x1a, 0xd6, 0x07, 0xd8, + 0x0f, 0x55, 0xa0, 0x6e, 0x4e, 0x21, 0x67, 0x00, 0x90, 0x04, 0xdc, 0xd1, 0x53, 0x4d, 0x43, 0x65, 0x9b, 0xe3, 0xa1, + 0x65, 0x74, 0x05, 0x0f, 0xf4, 0xd4, 0x96, 0x0c, 0x8c, 0xab, 0x3c, 0xf6, 0x36, 0xfb, 0xdb, 0xa3, 0x54, 0xe4, 0x3b, + 0x9b, 0xd4, 0x34, 0xab, 0x46, 0x63, 0x1f, 0x47, 0xe8, 0x69, 0x05, 0x68, 0xbd, 0xb6, 0x54, 0xb4, 0xdf, 0x47, 0x31, + 0x6a, 0x5c, 0x4a, 0xb0, 0x0a, 0x1d, 0x09, 0x0e, 0x11, 0x46, 0x08, 0xfd, 0xbe, 0x08, 0x37, 0xae, 0x20, 0x83, 0x28, + 0xb8, 0x16, 0x15, 0x7f, 0xc8, 0xf2, 0xa2, 0x6d, 0xa9, 0xaa, 0x3e, 0x69, 0xda, 0x12, 0x78, 0x1d, 0x0e, 0xb0, 0x9d, + 0x7f, 0xea, 0x89, 0x5c, 0x2b, 0x1b, 0x25, 0x7c, 0x47, 0x5c, 0x0b, 0xa2, 0x9b, 0x46, 0xd7, 0xeb, 0xd9, 0x21, 0x5a, + 0x9a, 0xe2, 0xd0, 0x21, 0xfb, 0xdc, 0x3d, 0xb7, 0x65, 0x7c, 0xfb, 0x09, 0x72, 0xe7, 0x3b, 0x7b, 0x49, 0xc2, 0x20, + 0x6f, 0xd9, 0x40, 0xb1, 0x8e, 0xad, 0xa0, 0x00, 0xa3, 0xb6, 0xfc, 0x05, 0x74, 0x6c, 0x30, 0xa8, 0x09, 0x3e, 0x49, + 0x6c, 0x1b, 0x8f, 0xfc, 0x11, 0xe7, 0x86, 0x0e, 0xaf, 0x0d, 0x79, 0x20, 0x4e, 0x61, 0x9f, 0x28, 0x61, 0xff, 0x82, + 0x82, 0xee, 0x48, 0x2f, 0x57, 0x89, 0xab, 0xe2, 0x01, 0xaa, 0xec, 0x78, 0xae, 0xf9, 0x92, 0x16, 0x5a, 0x69, 0x64, + 0x15, 0x1d, 0x11, 0xb7, 0x60, 0x32, 0x66, 0xab, 0x6a, 0x54, 0x71, 0x2c, 0x50, 0xa4, 0x63, 0xce, 0x76, 0x0e, 0xd6, + 0x00, 0x78, 0x0a, 0x9b, 0x8b, 0x33, 0x2c, 0x28, 0xed, 0xb2, 0xa5, 0x2f, 0x81, 0x55, 0xf3, 0x30, 0xce, 0xcb, 0x8e, + 0x2f, 0x77, 0x47, 0xdb, 0x7b, 0xe8, 0x8d, 0xe8, 0x8d, 0xd7, 0xe7, 0x51, 0xd3, 0xcf, 0x9e, 0xe1, 0xda, 0x50, 0x90, + 0x07, 0x9a, 0xea, 0x10, 0x46, 0x8b, 0xc0, 0x34, 0xe5, 0x27, 0x6c, 0x3c, 0x1d, 0x0e, 0x35, 0x19, 0x74, 0x9a, 0x89, + 0xf1, 0xbf, 0x3e, 0x83, 0xd6, 0xe9, 0x89, 0xf3, 0x3e, 0x6d, 0x5f, 0x41, 0xeb, 0x3b, 0x94, 0xc9, 0x9d, 0x83, 0xe1, + 0x03, 0x2d, 0x98, 0x84, 0xa9, 0xc2, 0x1b, 0x22, 0x15, 0xec, 0xcd, 0xd2, 0x38, 0xec, 0x9b, 0x85, 0x42, 0x4b, 0x45, + 0xfc, 0x6a, 0x4d, 0xfc, 0xe4, 0x75, 0xe6, 0xdf, 0xa6, 0x7d, 0x72, 0x10, 0x4b, 0x43, 0x62, 0x24, 0xe2, 0x17, 0xa7, + 0xd2, 0x76, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x64, 0xec, 0x49, 0x8d, 0xa7, 0x86, 0xfb, 0x5e, 0xc7, + 0xac, 0xc3, 0x2c, 0x76, 0xb3, 0x46, 0x42, 0x61, 0x9c, 0x9a, 0xe0, 0x94, 0x62, 0x15, 0xc9, 0xe8, 0x78, 0xa6, 0x30, + 0x88, 0x2a, 0x29, 0x21, 0xd6, 0x94, 0xad, 0x85, 0x89, 0x5d, 0x67, 0x0b, 0x53, 0xd4, 0x45, 0xa8, 0x37, 0x03, 0x9d, + 0x05, 0x0d, 0xf9, 0x1d, 0x1a, 0xad, 0xa8, 0x9a, 0x04, 0x0c, 0xe3, 0x28, 0xd5, 0xf8, 0xb7, 0x08, 0xb5, 0x1e, 0x06, + 0x00, 0xb6, 0x79, 0x27, 0xb2, 0xa2, 0x7e, 0x55, 0x20, 0x04, 0x9a, 0xb5, 0x9f, 0x2a, 0xeb, 0x9d, 0x59, 0xd0, 0x8a, + 0x76, 0x73, 0xe5, 0x73, 0x81, 0x13, 0xaa, 0x53, 0x79, 0x81, 0x7a, 0x29, 0xca, 0xd7, 0x22, 0xe5, 0xad, 0xb8, 0x98, + 0x07, 0x82, 0x7d, 0xc8, 0x47, 0x70, 0x5e, 0xa1, 0x53, 0xb9, 0xde, 0x26, 0xd2, 0x2c, 0x49, 0x30, 0x16, 0x68, 0x9b, + 0x97, 0x60, 0x26, 0x14, 0x33, 0x86, 0x5f, 0x43, 0x70, 0xb1, 0x9d, 0x93, 0x70, 0xb3, 0x9f, 0x07, 0x86, 0xd0, 0xe4, + 0x55, 0x4b, 0x34, 0x6c, 0xec, 0x78, 0x1d, 0xb9, 0x26, 0xdc, 0x87, 0xb5, 0x58, 0x93, 0x31, 0xc6, 0x95, 0xb9, 0x91, + 0xf1, 0xa3, 0x05, 0x1e, 0x8c, 0x49, 0xeb, 0x4f, 0x20, 0xd3, 0x52, 0xca, 0x3a, 0x5f, 0x68, 0x31, 0x93, 0x4c, 0x74, + 0x6e, 0xdf, 0xf8, 0x2c, 0xef, 0x22, 0xf2, 0xb7, 0xf2, 0x7b, 0x92, 0x0f, 0xf7, 0xee, 0x83, 0xc4, 0x1a, 0x94, 0x46, + 0x5c, 0x5a, 0x94, 0xa7, 0x0f, 0x74, 0xdd, 0xa4, 0x88, 0xd3, 0xf3, 0x55, 0x5c, 0x56, 0x3c, 0x85, 0x4a, 0x15, 0x75, + 0x8b, 0x7a, 0x13, 0xb0, 0x37, 0x44, 0x92, 0x64, 0x2c, 0x8d, 0x8d, 0xd8, 0xc5, 0x23, 0x3d, 0x7b, 0xc3, 0x2c, 0xbd, + 0xac, 0xd1, 0x90, 0x96, 0x3a, 0x67, 0xa1, 0x94, 0xf9, 0x4b, 0xfe, 0x33, 0x68, 0x24, 0xe8, 0xa8, 0x4f, 0x31, 0x9e, + 0x01, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x08, 0x4a, 0xb3, 0x23, 0x76, 0xfc, 0xd4, 0xe4, 0xe1, 0x5d, + 0xc8, 0x3a, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0xa8, 0x1a, 0xc9, 0x19, 0x40, 0xd3, 0x41, 0x91, 0xf3, 0xb8, + 0x08, 0x66, 0x3d, 0x9d, 0x18, 0xf5, 0xb8, 0xfa, 0x05, 0x1a, 0x6a, 0xb7, 0x59, 0x59, 0x9e, 0xd5, 0xf7, 0x9f, 0xc3, + 0x81, 0x4d, 0x4d, 0x05, 0x3d, 0xde, 0xd4, 0xe2, 0xea, 0x4a, 0x76, 0xdb, 0x2d, 0x44, 0xcb, 0xe9, 0xbc, 0x6b, 0xe9, + 0xbc, 0x5e, 0xb0, 0x5e, 0x77, 0xba, 0x5e, 0xdc, 0x7e, 0x19, 0x1e, 0xc2, 0xda, 0xce, 0x27, 0x8a, 0x3f, 0xf3, 0xdb, + 0xee, 0xe2, 0x2d, 0x54, 0xb3, 0x00, 0x00, 0xd2, 0x83, 0x28, 0x58, 0x66, 0x29, 0x0f, 0xa8, 0xd8, 0xc7, 0x51, 0x96, + 0x52, 0x2f, 0x67, 0x18, 0x3f, 0x65, 0x1a, 0x6b, 0x9c, 0x15, 0xaa, 0xd0, 0xd8, 0xe8, 0x4e, 0x57, 0x19, 0x62, 0xfb, + 0x09, 0x9c, 0x2d, 0xc0, 0xfd, 0xd1, 0x43, 0xa1, 0xee, 0x4d, 0x5a, 0x9a, 0xa8, 0xf9, 0xae, 0x3d, 0x83, 0x8c, 0xe2, + 0x64, 0x95, 0x57, 0xd0, 0x8d, 0x3a, 0x6b, 0xa3, 0x4a, 0xdf, 0x43, 0xd4, 0xab, 0x18, 0x3c, 0xca, 0x5d, 0x5e, 0x1b, + 0x9d, 0x4c, 0x8b, 0x48, 0xb9, 0xf3, 0x93, 0x66, 0x99, 0xa5, 0x4a, 0x87, 0xed, 0x32, 0xec, 0xad, 0x31, 0xe9, 0x4d, + 0x48, 0x03, 0x23, 0xf1, 0xe9, 0x8c, 0x0a, 0x21, 0xa0, 0x2d, 0xc7, 0xdf, 0xe1, 0x33, 0x34, 0x4d, 0x81, 0xa5, 0x8a, + 0x5b, 0xd8, 0x0e, 0x9f, 0xff, 0x64, 0xd4, 0x02, 0x10, 0xc1, 0xca, 0xd5, 0xbb, 0x38, 0x25, 0x34, 0xe7, 0xca, 0x0c, + 0x00, 0x59, 0x50, 0xca, 0x2d, 0x3f, 0x25, 0xd3, 0xc1, 0x12, 0x45, 0xd9, 0xcb, 0xa9, 0x1b, 0x1d, 0x1b, 0x3f, 0xa4, + 0xe7, 0x02, 0xb6, 0x0b, 0xf9, 0xad, 0xbd, 0x7a, 0x89, 0x9a, 0x34, 0xa6, 0x59, 0x0f, 0xf0, 0xe5, 0x1a, 0x4d, 0x42, + 0x0b, 0xca, 0xa4, 0x29, 0x80, 0xc6, 0x4d, 0xd5, 0x0a, 0x26, 0xa5, 0x46, 0xc2, 0x96, 0x3a, 0x92, 0x65, 0xdf, 0x07, + 0xa7, 0xde, 0x23, 0xe8, 0x01, 0xf3, 0x08, 0xf4, 0xf4, 0x5f, 0xba, 0x6a, 0xff, 0x92, 0xa3, 0x93, 0xab, 0x26, 0x6a, + 0xfa, 0xbd, 0xb2, 0x23, 0x43, 0xca, 0xa5, 0x19, 0x08, 0x26, 0x1d, 0xf3, 0xd4, 0xd8, 0x3a, 0x46, 0x44, 0x0f, 0x9c, + 0x7d, 0xba, 0x5b, 0x4d, 0x2d, 0x00, 0xd1, 0xf1, 0xeb, 0x27, 0xaf, 0xae, 0xe3, 0x2b, 0x8d, 0xa2, 0xe4, 0x59, 0xc4, + 0x48, 0xd3, 0xbe, 0x5a, 0xc0, 0xe0, 0xfd, 0xf2, 0xfe, 0x27, 0x99, 0xa5, 0x71, 0x7b, 0xb0, 0x31, 0xa2, 0xaa, 0x5f, + 0x2a, 0x5e, 0xfa, 0x02, 0xac, 0x7d, 0x96, 0x28, 0x90, 0xfb, 0xbd, 0x49, 0xd3, 0xdf, 0x44, 0xde, 0xcd, 0x86, 0xf5, + 0xc6, 0x4d, 0xbb, 0xd4, 0x96, 0xec, 0xc8, 0x48, 0xe4, 0xf4, 0x62, 0xd0, 0xe3, 0x47, 0x2b, 0x8d, 0xd2, 0xb0, 0x41, + 0x55, 0x2a, 0x7e, 0xaf, 0x45, 0x70, 0xf2, 0x58, 0x95, 0x18, 0xd3, 0x80, 0xd9, 0x56, 0x36, 0x0a, 0xd4, 0x41, 0x2a, + 0x6d, 0x75, 0x14, 0xb6, 0xdf, 0x58, 0x49, 0xf5, 0xef, 0x7f, 0x6a, 0x43, 0x3e, 0x5f, 0x0a, 0x2a, 0x08, 0xd8, 0x19, + 0x78, 0x3d, 0x95, 0xc2, 0x40, 0x2a, 0xd8, 0x49, 0x05, 0x28, 0x5f, 0x44, 0x8e, 0xd5, 0x6e, 0x5f, 0xad, 0x1a, 0xa3, + 0x2d, 0x20, 0x34, 0x90, 0x1e, 0x5d, 0xf6, 0x71, 0x1b, 0xe3, 0x40, 0xe2, 0xc0, 0x09, 0xb6, 0x73, 0x75, 0x8d, 0x46, + 0x42, 0xf3, 0x87, 0x46, 0x03, 0x5e, 0xd3, 0x1a, 0x14, 0xea, 0x39, 0x8e, 0x86, 0xca, 0x0e, 0x29, 0x88, 0xd8, 0xa0, + 0x84, 0x7d, 0x7b, 0x3e, 0xd4, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x43, 0x85, 0xfd, 0xdc, 0x2e, 0x21, 0x63, 0xd5, 0x21, + 0xad, 0x3c, 0xc0, 0xf1, 0x42, 0xca, 0xfc, 0x2d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x6d, 0xc4, 0x02, 0x96, 0x04, 0xed, + 0xf5, 0x40, 0xdd, 0x32, 0x08, 0x75, 0x4c, 0x4f, 0x04, 0x3e, 0xa5, 0x5c, 0x7e, 0x5a, 0x92, 0x66, 0x5a, 0x32, 0x0b, + 0x7a, 0xe9, 0x5a, 0xf9, 0x15, 0xde, 0x47, 0xbb, 0x7b, 0x57, 0x5f, 0x58, 0xc7, 0x10, 0x0c, 0xbb, 0x72, 0x9b, 0xd3, + 0x50, 0x00, 0x36, 0x3c, 0x55, 0x65, 0xb9, 0x46, 0x4d, 0x64, 0x16, 0x87, 0x24, 0x02, 0xc9, 0xb6, 0xbf, 0xb9, 0xb5, + 0x60, 0xdb, 0x59, 0xa8, 0x9e, 0xfa, 0xcb, 0xd9, 0xee, 0x7b, 0x86, 0x97, 0x3b, 0x72, 0x6f, 0xdf, 0x86, 0xf2, 0x87, + 0xfd, 0xab, 0xe4, 0xff, 0xaa, 0x92, 0xfd, 0x56, 0x99, 0x4d, 0x5b, 0xbc, 0xdf, 0x75, 0xdc, 0x72, 0x8c, 0x06, 0x81, + 0x35, 0x05, 0x1a, 0xd2, 0x93, 0xc6, 0x34, 0x51, 0x21, 0x95, 0x19, 0xd3, 0x78, 0x74, 0x01, 0x9a, 0xc3, 0x74, 0x9e, + 0xc7, 0x00, 0x1c, 0xe0, 0x1e, 0x79, 0x84, 0xba, 0xa7, 0xf3, 0x3c, 0x38, 0x0f, 0x06, 0xc5, 0x20, 0x50, 0x9f, 0xd8, + 0xe6, 0x04, 0x0b, 0xd0, 0xb9, 0xc5, 0x0c, 0x82, 0x4d, 0x1a, 0x33, 0x87, 0xf8, 0x38, 0x99, 0x0e, 0x06, 0x31, 0xd9, + 0x00, 0x48, 0x5f, 0xbc, 0x30, 0xce, 0x41, 0xa5, 0x5a, 0x90, 0xad, 0xba, 0x4b, 0xbf, 0x62, 0xa7, 0xda, 0x69, 0xde, + 0xef, 0xe7, 0xf3, 0x62, 0x10, 0x78, 0x15, 0x96, 0xda, 0xfb, 0x8f, 0xfa, 0x5f, 0x6a, 0x9d, 0x34, 0xc1, 0x30, 0xb5, + 0xa7, 0xa8, 0x5e, 0x71, 0x34, 0xa3, 0xde, 0xed, 0x58, 0x2a, 0x5f, 0x40, 0x14, 0x0f, 0x0c, 0x59, 0x2b, 0xef, 0xce, + 0xc1, 0x6b, 0x73, 0xe3, 0xcd, 0x11, 0x05, 0xd8, 0xbe, 0x30, 0x4e, 0x28, 0x2e, 0xba, 0x6c, 0x88, 0x63, 0xb0, 0xd3, + 0xd5, 0x5b, 0x81, 0x56, 0xe3, 0xbd, 0x78, 0xd7, 0x6c, 0xfc, 0x8d, 0x38, 0x50, 0x65, 0x1e, 0x5c, 0x02, 0xe2, 0xec, + 0x41, 0x5c, 0x1f, 0x60, 0xa9, 0x07, 0xc1, 0xc0, 0x20, 0x87, 0xb4, 0xab, 0x55, 0x43, 0x11, 0xc9, 0xf3, 0x18, 0x0c, + 0x98, 0x74, 0x43, 0x1a, 0x32, 0xed, 0x95, 0x12, 0xd2, 0xc6, 0x58, 0x0b, 0x28, 0xc3, 0xe1, 0x6a, 0xc7, 0x6e, 0xd8, + 0x9e, 0x6e, 0x1d, 0x0a, 0x25, 0x8c, 0x5e, 0xdd, 0xf8, 0x87, 0x9a, 0xe7, 0x89, 0xa0, 0x06, 0x55, 0x6b, 0x3f, 0x1d, + 0x94, 0x27, 0xe5, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0xa2, 0xc0, 0x8b, 0xf6, 0x0e, 0xf2, 0x9c, 0xfe, 0x54, 0xfa, + 0x20, 0x7a, 0x6e, 0x19, 0x2e, 0xb4, 0x8f, 0x6b, 0x05, 0x32, 0x69, 0x3a, 0x9a, 0xda, 0xda, 0x1d, 0xde, 0x31, 0x81, + 0x7e, 0x53, 0x96, 0x52, 0x26, 0xba, 0x96, 0x25, 0x3b, 0xe9, 0xe5, 0xd2, 0x1b, 0x2a, 0x65, 0x27, 0xcb, 0x36, 0xe7, + 0x97, 0x7a, 0x09, 0xfd, 0xbe, 0x72, 0x07, 0xc2, 0x37, 0x72, 0xbd, 0x21, 0x2f, 0x1b, 0x22, 0x96, 0x43, 0xcc, 0xc0, + 0xf1, 0x42, 0x48, 0xd7, 0xee, 0xd2, 0x57, 0xd5, 0xed, 0x6c, 0xe5, 0x92, 0x16, 0x78, 0x2b, 0x05, 0x56, 0x91, 0x5a, + 0xbd, 0x9e, 0x4c, 0xdc, 0xf7, 0x51, 0x6c, 0x3e, 0x02, 0xb6, 0xd1, 0x3b, 0x1a, 0xbd, 0x5b, 0xc4, 0x06, 0x5f, 0x45, + 0x35, 0x2d, 0x39, 0x40, 0x70, 0xb7, 0x25, 0xb5, 0x34, 0xb3, 0x88, 0xfb, 0x92, 0x07, 0x68, 0xdf, 0xc5, 0xe1, 0x4c, + 0x2a, 0xc1, 0xb6, 0xae, 0x75, 0xce, 0x2a, 0x39, 0xa0, 0x9f, 0xe8, 0xf8, 0xa7, 0xd5, 0xa3, 0x22, 0x86, 0x55, 0x36, + 0x92, 0x56, 0x68, 0x0f, 0x4a, 0x97, 0x70, 0xf1, 0x05, 0x78, 0xd9, 0xde, 0xaf, 0xec, 0x3e, 0x5f, 0x62, 0xff, 0x30, + 0xaf, 0x9c, 0xe0, 0x91, 0xd3, 0x78, 0x73, 0x0f, 0xab, 0x3e, 0x57, 0x0a, 0xe1, 0x54, 0x4a, 0x43, 0x01, 0xc0, 0x20, + 0x09, 0x6a, 0xb8, 0xd2, 0xb6, 0x19, 0xa4, 0x34, 0x86, 0xdd, 0xad, 0xde, 0xe8, 0xff, 0x94, 0x0a, 0x17, 0xa0, 0x94, + 0x0d, 0xdc, 0x90, 0x75, 0xaa, 0xe5, 0x3a, 0xa6, 0xe0, 0xf9, 0x2e, 0x39, 0x02, 0x85, 0x1d, 0x18, 0x99, 0xd1, 0x84, + 0xfd, 0x82, 0xb7, 0xa1, 0x9c, 0xbd, 0x34, 0x92, 0x27, 0xbb, 0x2f, 0x69, 0x45, 0x13, 0x32, 0xad, 0xcc, 0xfe, 0x6d, + 0x6d, 0xd8, 0xe7, 0xa1, 0x18, 0x89, 0x02, 0x17, 0x07, 0x9d, 0x03, 0xd8, 0x1f, 0xe4, 0xd2, 0x36, 0x9f, 0x49, 0xbf, + 0x2f, 0xdf, 0x3f, 0xcb, 0xb3, 0xe4, 0xe3, 0xce, 0x7b, 0xcd, 0xd3, 0x2c, 0x19, 0x50, 0x89, 0x98, 0x1a, 0x57, 0xc5, + 0x70, 0xa9, 0x5c, 0x8c, 0x3d, 0x92, 0x11, 0xef, 0xa5, 0x0e, 0x31, 0x62, 0x7c, 0x91, 0x1d, 0x92, 0x92, 0xd3, 0x65, + 0xd3, 0xd9, 0x73, 0x25, 0x9a, 0x41, 0x63, 0xb8, 0x1d, 0xef, 0x25, 0xb5, 0x02, 0x64, 0x54, 0xe8, 0x9e, 0x01, 0xae, + 0xe1, 0xfe, 0x92, 0xf0, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xd8, 0x2b, 0x13, 0x12, 0x72, 0xe3, 0x00, 0x8b, 0xd8, 0x34, + 0x1f, 0x43, 0x01, 0x40, 0xad, 0x1a, 0xe9, 0x95, 0xbe, 0x24, 0x54, 0x26, 0x21, 0x18, 0x5d, 0x91, 0xf0, 0x2a, 0xa0, + 0x71, 0xa6, 0x13, 0x0d, 0x6c, 0x70, 0x40, 0x9f, 0xd7, 0x3a, 0x51, 0xdb, 0x90, 0x07, 0xb4, 0x36, 0x69, 0x00, 0x83, + 0x0f, 0x92, 0x24, 0xfa, 0x6a, 0xa9, 0x93, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x73, 0xe1, 0xf8, 0x58, 0x82, 0xff, + 0x91, 0x26, 0x82, 0x3f, 0x84, 0x02, 0x64, 0x8a, 0xaa, 0x62, 0x9a, 0xb1, 0x93, 0xac, 0xdb, 0x98, 0xc4, 0xf1, 0xb4, + 0xbb, 0x2b, 0xa5, 0x4b, 0x17, 0xf8, 0x95, 0x65, 0x88, 0x63, 0xfd, 0x2c, 0x5e, 0xb1, 0xd3, 0x90, 0x2b, 0xbc, 0xf4, + 0x67, 0xf1, 0x0a, 0x67, 0x88, 0xd6, 0xad, 0x04, 0x22, 0xfd, 0x57, 0x4d, 0xe0, 0x10, 0xfb, 0x09, 0x06, 0xb9, 0xa8, + 0x9d, 0x07, 0x02, 0x79, 0x5b, 0x41, 0x44, 0xfc, 0xec, 0x2a, 0x8c, 0x48, 0xbd, 0x93, 0xa4, 0xbf, 0xfc, 0x51, 0x64, + 0x85, 0xf3, 0x0d, 0x3c, 0xfa, 0xcd, 0x32, 0x29, 0xfa, 0x0b, 0x19, 0xcc, 0xc1, 0x7e, 0x22, 0xe3, 0x52, 0xd4, 0xee, + 0x13, 0x76, 0xc1, 0x89, 0xf1, 0xe0, 0xf4, 0x1a, 0x01, 0xf6, 0x6b, 0xf7, 0xc9, 0x19, 0xb3, 0xbf, 0x8c, 0x1b, 0x5f, + 0xa6, 0x23, 0x3e, 0xf0, 0xd1, 0x1d, 0xe5, 0xa3, 0x7b, 0x27, 0xd3, 0x1f, 0x1e, 0x94, 0xc8, 0xa8, 0xaa, 0xf9, 0x6a, + 0xc5, 0xd3, 0xd9, 0x5d, 0x12, 0x65, 0xa3, 0x9a, 0x17, 0x30, 0xbd, 0xe0, 0x78, 0x97, 0xac, 0x2f, 0xb2, 0xe4, 0x15, + 0xc4, 0x1e, 0x58, 0x09, 0x89, 0xc5, 0x0f, 0xcb, 0x4c, 0x2e, 0xe6, 0x42, 0xd4, 0xa2, 0xe0, 0xc1, 0xec, 0x26, 0x89, + 0xfe, 0x5a, 0x3a, 0x48, 0x6a, 0x7a, 0xca, 0x36, 0x8d, 0x25, 0xd4, 0xda, 0xd7, 0x91, 0x6e, 0x94, 0x05, 0x00, 0xdc, + 0xb3, 0x8b, 0x34, 0x12, 0xac, 0x1a, 0x4e, 0x1a, 0xc6, 0x75, 0x7a, 0x89, 0xa9, 0x71, 0xc3, 0x6a, 0x9a, 0x58, 0x0b, + 0x19, 0xd0, 0xfb, 0x03, 0x5e, 0x0e, 0x3e, 0x67, 0x45, 0x28, 0xa4, 0x35, 0x70, 0x71, 0x5c, 0xf6, 0xfb, 0xe2, 0xb8, + 0xdc, 0x6e, 0x8b, 0x93, 0xb8, 0xdf, 0x17, 0x27, 0xb1, 0xe6, 0x1f, 0xa4, 0x62, 0x5b, 0x9b, 0x1b, 0x24, 0x34, 0x17, + 0x10, 0xb5, 0x68, 0x04, 0x7f, 0x68, 0x96, 0xf3, 0x22, 0xca, 0x8f, 0x93, 0x7e, 0xbf, 0xb7, 0x9c, 0x55, 0x83, 0x7c, + 0x98, 0x44, 0xf9, 0x30, 0x71, 0x9c, 0x10, 0x7f, 0x75, 0x9c, 0x10, 0x25, 0x0d, 0x5c, 0xc1, 0x99, 0x01, 0x88, 0x02, + 0x2e, 0xfd, 0xa3, 0xaa, 0x96, 0x52, 0xd5, 0x12, 0xcb, 0x5a, 0x12, 0x55, 0x41, 0xc3, 0x6e, 0xca, 0xb0, 0xc0, 0x52, + 0xe8, 0x92, 0xfd, 0xb1, 0x04, 0x9e, 0x28, 0xe7, 0xf5, 0x06, 0x18, 0xd8, 0x08, 0xef, 0x1c, 0x3a, 0x9c, 0xc4, 0xba, + 0x61, 0x12, 0x32, 0xe9, 0x92, 0xae, 0xe8, 0x15, 0xf2, 0xb3, 0x97, 0x60, 0xb0, 0x74, 0xcc, 0xf2, 0xe9, 0x60, 0x70, + 0x49, 0x56, 0xac, 0x98, 0x87, 0xf1, 0x20, 0x5c, 0xcf, 0xf2, 0xe1, 0x65, 0x74, 0x49, 0xc8, 0x17, 0xe5, 0x82, 0xf6, + 0x56, 0xa3, 0xea, 0x63, 0x06, 0xc1, 0xfd, 0xd2, 0x59, 0x98, 0xe9, 0x38, 0x1f, 0xab, 0xd1, 0x1d, 0x5d, 0x41, 0xfc, + 0x1a, 0xb8, 0x91, 0x90, 0x08, 0x3a, 0x72, 0x45, 0x57, 0x74, 0x4d, 0x85, 0x9e, 0x61, 0x0c, 0xd1, 0x6d, 0x8e, 0x93, + 0x04, 0x1c, 0x93, 0x6d, 0xf1, 0xd1, 0x58, 0x16, 0xde, 0xf5, 0x1d, 0xa1, 0xbd, 0x5e, 0x62, 0x07, 0xe9, 0xbb, 0xf6, + 0x20, 0x01, 0x23, 0x32, 0x92, 0x03, 0xa5, 0x47, 0x46, 0x50, 0x3d, 0xa9, 0x38, 0x24, 0xb1, 0x3b, 0x24, 0x72, 0x1c, + 0x12, 0x77, 0x1c, 0x72, 0x35, 0x0e, 0xc8, 0xdd, 0x2f, 0xd9, 0x98, 0xa6, 0x6c, 0x4c, 0xd7, 0x72, 0x54, 0xe8, 0x35, + 0xbd, 0x50, 0xd4, 0xf1, 0x9c, 0xbd, 0x86, 0x03, 0x7b, 0x10, 0xe6, 0xb3, 0x78, 0xf8, 0x3a, 0x7a, 0x4d, 0xc8, 0x17, + 0x82, 0xde, 0xc8, 0x4b, 0x19, 0x84, 0x41, 0xbc, 0x06, 0xe7, 0x52, 0x1b, 0xea, 0xe4, 0x5a, 0xef, 0x38, 0x7c, 0xba, + 0xf2, 0x9e, 0x2e, 0x20, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x25, 0x2b, 0xe6, 0xe7, 0xe1, 0x98, 0x00, 0x0e, + 0x8f, 0x1a, 0xce, 0xcb, 0xd1, 0x1d, 0xbd, 0x1c, 0xdd, 0x13, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0xc7, 0x2c, 0x9e, 0x0e, + 0x06, 0x6b, 0xa4, 0xea, 0x32, 0xf7, 0x9a, 0x2c, 0xe8, 0x25, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x2b, 0xd6, 0x9a, 0x86, + 0xbf, 0x66, 0xf0, 0xf1, 0x3d, 0xbb, 0x1c, 0xdd, 0xd3, 0x3b, 0xf6, 0x7a, 0x3b, 0x9e, 0x02, 0x33, 0xb5, 0x9a, 0x85, + 0xf7, 0xc7, 0x57, 0xb3, 0x2b, 0x76, 0x1f, 0xdd, 0x9f, 0x40, 0x43, 0xaf, 0xd9, 0x3d, 0x02, 0x2e, 0xa5, 0x8f, 0x97, + 0x83, 0xd7, 0xe4, 0x70, 0x30, 0x48, 0x49, 0x14, 0xde, 0x84, 0x4e, 0x2b, 0x5f, 0xd3, 0x7b, 0x42, 0x57, 0xec, 0x0e, + 0x47, 0xe3, 0x8a, 0xe1, 0x07, 0x17, 0xec, 0xbe, 0xb9, 0x09, 0x9d, 0xdd, 0x1c, 0x57, 0x9d, 0x20, 0x46, 0xe8, 0x6b, + 0x60, 0x69, 0x96, 0x0d, 0x33, 0x01, 0x4f, 0xfa, 0x22, 0xa3, 0x44, 0xa1, 0x19, 0x88, 0xb3, 0x12, 0x10, 0x4b, 0xa2, + 0xee, 0x37, 0x1b, 0x9d, 0xc3, 0x72, 0xee, 0xf7, 0x7b, 0xb5, 0xa6, 0x07, 0x88, 0x9c, 0xd9, 0x49, 0x0f, 0x7a, 0x2e, + 0x3d, 0xc0, 0x4f, 0xd4, 0xaa, 0x41, 0x9c, 0xcc, 0xef, 0x96, 0xd1, 0xaf, 0x0e, 0x7d, 0xf8, 0xa1, 0x9b, 0xf2, 0x54, + 0xf9, 0xbf, 0x4f, 0x79, 0x8a, 0x3c, 0x7a, 0x5d, 0x3b, 0x20, 0x78, 0xce, 0x9a, 0x94, 0x1a, 0x89, 0x7a, 0x74, 0xbe, + 0x8a, 0x41, 0x1b, 0x89, 0xda, 0x06, 0xf5, 0x84, 0x16, 0x56, 0x10, 0x21, 0xe7, 0xe8, 0x39, 0x18, 0xa4, 0x42, 0xa8, + 0x1c, 0xb9, 0x28, 0xd1, 0x10, 0x24, 0x17, 0x15, 0x97, 0xe1, 0x73, 0x08, 0x95, 0xa7, 0x8f, 0x35, 0x11, 0xd6, 0xf4, + 0x18, 0x0c, 0xb0, 0x2d, 0xfc, 0xdb, 0x0e, 0xb9, 0xa8, 0xf8, 0x15, 0x9e, 0xcd, 0x6d, 0x82, 0x51, 0xb2, 0xb8, 0x15, + 0xda, 0x06, 0xb1, 0x1f, 0x0b, 0x82, 0xf5, 0x08, 0x1a, 0x8f, 0x2a, 0x7d, 0x44, 0xb8, 0x51, 0x7c, 0x24, 0x3d, 0x8d, + 0x35, 0x89, 0xe4, 0x48, 0x22, 0xf9, 0x00, 0x08, 0x27, 0x41, 0x7f, 0x71, 0xdb, 0x64, 0xdb, 0x42, 0xa2, 0xd1, 0x9f, + 0x96, 0x4c, 0xc9, 0xee, 0x65, 0x8f, 0x5d, 0x45, 0x90, 0x3d, 0xa6, 0xff, 0x74, 0xfa, 0xf0, 0xcf, 0x25, 0xce, 0xa0, + 0xf1, 0x7c, 0x91, 0x9d, 0x99, 0x39, 0x83, 0x1b, 0x39, 0x5d, 0x56, 0xae, 0xcb, 0x97, 0xfc, 0x80, 0xdf, 0xd5, 0xbc, + 0x48, 0xab, 0x83, 0x9f, 0xeb, 0x36, 0x9e, 0x53, 0xb5, 0x5e, 0xd9, 0x38, 0x2b, 0xd2, 0x38, 0xd5, 0x91, 0xba, 0x68, + 0x6b, 0x58, 0xcf, 0xef, 0x11, 0x75, 0x25, 0x2d, 0x47, 0x4f, 0x21, 0x56, 0x7e, 0xca, 0xe5, 0x3a, 0xcf, 0x7f, 0xda, + 0x49, 0xc5, 0x29, 0xf6, 0x53, 0x90, 0x2a, 0xb5, 0x5c, 0x40, 0xd5, 0x1c, 0xb5, 0xdc, 0x2d, 0xf5, 0x0e, 0xb0, 0x6e, + 0x9b, 0xf2, 0x63, 0x69, 0x76, 0xe1, 0x24, 0x7b, 0xf7, 0x27, 0x5d, 0x86, 0x01, 0xa3, 0x50, 0x66, 0xd5, 0xb5, 0xb2, + 0x2f, 0x34, 0x4e, 0xc3, 0x70, 0xe5, 0xc7, 0x0b, 0x48, 0x17, 0x30, 0x8e, 0x13, 0x25, 0x13, 0xe3, 0xf6, 0xa8, 0xad, + 0x50, 0x7d, 0xce, 0x56, 0x20, 0x60, 0xae, 0xe1, 0xec, 0xba, 0x8e, 0xb6, 0x3b, 0xe2, 0x94, 0x51, 0xb5, 0x8a, 0x8b, + 0xef, 0xe3, 0x55, 0x35, 0xb3, 0x43, 0x1b, 0xf9, 0x63, 0x3a, 0xfd, 0x7b, 0x12, 0xba, 0x85, 0x50, 0xb8, 0xe5, 0x16, + 0x46, 0x9e, 0xdc, 0x1e, 0x96, 0x71, 0x83, 0x5e, 0x89, 0x2b, 0xd5, 0x37, 0x2d, 0x85, 0x54, 0x23, 0x5f, 0xfb, 0x02, + 0x7a, 0x3d, 0xf6, 0x7e, 0x2a, 0xcc, 0xdb, 0x9e, 0x31, 0x97, 0x08, 0x56, 0xb2, 0xec, 0xf6, 0x9d, 0x1a, 0x53, 0x31, + 0x83, 0x2e, 0xb6, 0x9d, 0x45, 0xa7, 0x1b, 0xf9, 0xa7, 0x99, 0xfb, 0x65, 0xde, 0xe1, 0xae, 0xa8, 0xde, 0x02, 0x17, + 0x9a, 0x95, 0x55, 0xdd, 0x96, 0x0d, 0x9b, 0xc6, 0x6b, 0x59, 0x28, 0x36, 0xc0, 0xb0, 0xe7, 0xae, 0x85, 0x07, 0x88, + 0x9b, 0x70, 0xcf, 0x2e, 0x1a, 0xb8, 0x31, 0x7c, 0x5e, 0x49, 0xae, 0x2b, 0x8d, 0xbe, 0xf4, 0xc9, 0xd2, 0xaa, 0xe1, + 0x64, 0x31, 0xe2, 0x45, 0xba, 0x68, 0x32, 0xb3, 0x16, 0x3e, 0xe1, 0x65, 0x38, 0xe7, 0x0b, 0xad, 0x9b, 0x52, 0xa5, + 0x97, 0x2c, 0x56, 0x9d, 0xde, 0xac, 0x14, 0x56, 0x4a, 0xc4, 0x8d, 0x59, 0x26, 0x50, 0x96, 0xa2, 0x91, 0xc2, 0x9b, + 0xb2, 0x65, 0x2b, 0xa9, 0xe5, 0x3d, 0x73, 0x70, 0x1f, 0xfb, 0x01, 0x31, 0x91, 0x75, 0x60, 0x52, 0x34, 0x74, 0x40, + 0xbb, 0xea, 0xd2, 0x35, 0xa3, 0x1e, 0x0c, 0x72, 0x43, 0x12, 0xb1, 0x82, 0x14, 0x2b, 0x58, 0x37, 0xac, 0x9c, 0xe7, + 0x0b, 0x7a, 0xc9, 0xc4, 0x3c, 0x5d, 0xd0, 0x15, 0x13, 0xf3, 0x35, 0xde, 0x84, 0x2e, 0xe1, 0x84, 0x24, 0x9b, 0x58, + 0x2a, 0x60, 0x2f, 0xf1, 0xf2, 0x86, 0x67, 0xaa, 0xa2, 0x65, 0x57, 0x92, 0x03, 0x8c, 0x2f, 0xaa, 0x30, 0x2c, 0x86, + 0x97, 0x60, 0x2d, 0x71, 0x18, 0xae, 0xe6, 0x7c, 0x21, 0x7f, 0x43, 0xc0, 0xf9, 0x24, 0x94, 0xec, 0x82, 0xd9, 0x0b, + 0x64, 0x7a, 0x3d, 0xe7, 0x0b, 0x39, 0x12, 0xaa, 0xe0, 0x6b, 0x63, 0x6c, 0x12, 0x3b, 0x82, 0x96, 0x59, 0x3c, 0x1f, + 0x2f, 0xa2, 0xb8, 0x81, 0x65, 0x78, 0x26, 0x67, 0xa6, 0x25, 0xff, 0xd1, 0x76, 0x52, 0xea, 0x06, 0x2b, 0xc9, 0x1f, + 0x1e, 0x1f, 0x5d, 0x02, 0x19, 0x33, 0xbb, 0x82, 0xe9, 0x0f, 0x5d, 0x1f, 0x19, 0xdc, 0x73, 0x53, 0xce, 0xb8, 0x0c, + 0x12, 0xa5, 0x05, 0x0e, 0x72, 0x96, 0xb4, 0xb5, 0x08, 0xdf, 0x3d, 0x2a, 0xca, 0x3e, 0x13, 0xba, 0x01, 0xdd, 0x47, + 0x82, 0x3e, 0xd0, 0x7b, 0xa5, 0x0a, 0x97, 0xd5, 0x36, 0x13, 0x70, 0x17, 0x09, 0xf2, 0x5b, 0xa1, 0x53, 0x35, 0x06, + 0x55, 0x34, 0x8b, 0x58, 0xb8, 0xf7, 0x11, 0x37, 0xca, 0xe6, 0x9f, 0xfa, 0x1e, 0x2f, 0x25, 0x0c, 0x6e, 0x48, 0x4d, + 0x9f, 0xcc, 0x9b, 0x2b, 0xf6, 0x1e, 0x3a, 0xea, 0x50, 0x6b, 0xbc, 0xaf, 0x5e, 0x72, 0x0a, 0x31, 0x4a, 0x28, 0x3a, + 0x09, 0x06, 0x70, 0xbb, 0x84, 0x14, 0x7b, 0x83, 0xdd, 0xf8, 0xd7, 0xbc, 0x28, 0xb8, 0x58, 0xd7, 0x75, 0xe0, 0x06, + 0x34, 0x9c, 0x2f, 0x76, 0x43, 0x18, 0x8e, 0x69, 0xeb, 0x1a, 0x06, 0x61, 0xc6, 0x30, 0x12, 0x82, 0xd3, 0xbf, 0xe8, + 0x2b, 0x9a, 0xc4, 0xab, 0xef, 0xf8, 0x5f, 0x19, 0x2f, 0x25, 0x91, 0x06, 0x11, 0x52, 0x37, 0xf1, 0x8d, 0x74, 0x93, + 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0x58, 0xd3, 0x54, 0xfc, 0x2d, 0x17, 0x1f, 0xfc, 0x54, 0x74, 0x3c, 0x1a, 0x37, + 0xad, 0xce, 0xc8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0xa0, 0x1b, 0xa9, 0xdf, 0xda, 0x87, 0xc0, + 0x29, 0xd3, 0xe0, 0x9d, 0x07, 0x74, 0x73, 0xee, 0x82, 0x27, 0x8f, 0xe9, 0xb9, 0x45, 0x4f, 0xae, 0xd9, 0x49, 0xdd, + 0x43, 0xed, 0xbd, 0x1e, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0xd0, 0x38, 0x57, 0xf7, 0x1f, 0x8b, 0x5d, 0x0e, + 0xdf, 0x72, 0x96, 0x1b, 0xc0, 0x52, 0x11, 0x8d, 0x04, 0x8f, 0x02, 0xd4, 0xa5, 0x2a, 0x84, 0x2d, 0x66, 0x71, 0xa8, + 0xcc, 0x56, 0xad, 0x87, 0x82, 0x1c, 0x17, 0x23, 0x70, 0x08, 0x5d, 0x57, 0x83, 0x62, 0xb4, 0xcc, 0xea, 0xf7, 0xf8, + 0x5b, 0xb1, 0x0e, 0x49, 0xb6, 0x8f, 0x75, 0xe0, 0x86, 0x75, 0x98, 0x7e, 0xd4, 0x48, 0x01, 0x68, 0xb2, 0x11, 0xd8, + 0x04, 0xe0, 0xbd, 0xdd, 0x47, 0x84, 0x5a, 0x99, 0xee, 0x65, 0x2c, 0xe4, 0xf7, 0x5e, 0x12, 0x94, 0xe0, 0x27, 0xd4, + 0x96, 0xa5, 0xe0, 0x9d, 0x47, 0x3a, 0x27, 0x4d, 0x56, 0xbc, 0x07, 0x71, 0x5a, 0xf8, 0xc0, 0xde, 0x82, 0xe0, 0x9c, + 0x25, 0xbd, 0xc7, 0xdb, 0xac, 0x92, 0xda, 0xa8, 0x81, 0x02, 0xf8, 0xdd, 0xe0, 0x1e, 0x41, 0xbe, 0xbc, 0xe1, 0x5a, + 0x89, 0xdb, 0x90, 0x0f, 0x4b, 0x7a, 0x44, 0x06, 0xe6, 0xb9, 0x1a, 0xc6, 0xf4, 0x88, 0x1c, 0x9b, 0x67, 0x61, 0x07, + 0x70, 0x20, 0xd4, 0xa8, 0xd2, 0x23, 0x68, 0xd0, 0x6f, 0xa6, 0x45, 0x86, 0x64, 0xfd, 0xa8, 0x1b, 0x8c, 0x88, 0xbf, + 0x20, 0xa2, 0x2e, 0xfe, 0xf9, 0x60, 0xae, 0x7b, 0xcc, 0x05, 0xc2, 0x1c, 0x0c, 0x38, 0x88, 0xdb, 0x20, 0xd4, 0x07, + 0xcc, 0xe6, 0x2e, 0xaa, 0xe8, 0xbd, 0x31, 0xcc, 0xec, 0xe8, 0x0f, 0x37, 0x12, 0x7c, 0x9d, 0xb5, 0x41, 0x9d, 0x17, + 0x87, 0x40, 0x10, 0xdc, 0x17, 0xaa, 0x9a, 0xab, 0x1e, 0xd8, 0x78, 0xcb, 0x7e, 0x6c, 0xb7, 0xe3, 0x69, 0x65, 0xaf, + 0xfd, 0x15, 0x85, 0x93, 0x4f, 0xca, 0xbf, 0xde, 0xeb, 0x0c, 0x16, 0x8c, 0x0c, 0x5f, 0x3a, 0xfb, 0x17, 0xbe, 0x56, + 0xd2, 0xbd, 0x6a, 0x50, 0x90, 0xc7, 0x47, 0x92, 0xfe, 0xed, 0x95, 0x95, 0x4f, 0xcd, 0xf4, 0x6f, 0xb7, 0x7a, 0x7d, + 0x1e, 0x8f, 0x26, 0xdb, 0x6d, 0x4f, 0x19, 0xb8, 0x52, 0x1d, 0x43, 0x08, 0x9d, 0xeb, 0xc9, 0xe1, 0x11, 0x44, 0x45, + 0xf0, 0xe3, 0x6e, 0x16, 0x9e, 0x44, 0xc6, 0x8d, 0xd3, 0x59, 0x78, 0x82, 0x1d, 0xee, 0x44, 0x25, 0x2e, 0x46, 0xad, + 0x0d, 0x4e, 0xcf, 0x93, 0x10, 0x42, 0x39, 0x60, 0x65, 0x77, 0xf2, 0xcf, 0xbd, 0x34, 0x13, 0x92, 0x93, 0xd5, 0xed, + 0x94, 0xee, 0x60, 0x9a, 0x1f, 0xe8, 0x11, 0x1c, 0x70, 0x67, 0x7f, 0x35, 0x1f, 0xc3, 0x24, 0x53, 0xe4, 0x14, 0xc9, + 0x2f, 0xd2, 0x53, 0x48, 0xda, 0xa1, 0xa7, 0x92, 0x00, 0x4e, 0xa8, 0xf9, 0x18, 0x7e, 0xc3, 0xb8, 0x7f, 0xe7, 0xbf, + 0xb6, 0x53, 0x11, 0x3d, 0xa1, 0x58, 0xa6, 0x22, 0xa7, 0x49, 0x56, 0x26, 0x10, 0xb5, 0x51, 0x36, 0x23, 0xfa, 0xca, + 0xc6, 0x7c, 0x94, 0x84, 0xcf, 0xa9, 0xf5, 0x7f, 0x86, 0xf0, 0x69, 0x74, 0x46, 0x80, 0xcb, 0x2b, 0xaf, 0x2e, 0xc2, + 0xa7, 0x4f, 0xe8, 0xc1, 0xe4, 0xeb, 0x23, 0x7a, 0x70, 0xf4, 0xd5, 0x53, 0x02, 0xb0, 0x68, 0x57, 0x17, 0xe1, 0xd1, + 0xd3, 0xa7, 0xf4, 0xe0, 0xdb, 0x6f, 0xe9, 0xc1, 0xe4, 0xab, 0x23, 0x2f, 0x6d, 0xf2, 0xf4, 0x5b, 0x7a, 0xf0, 0xf5, + 0x13, 0x2f, 0xed, 0x68, 0xfc, 0x94, 0x1e, 0x7c, 0xf3, 0xb5, 0x4e, 0xfb, 0x1b, 0x64, 0xfb, 0xf6, 0x08, 0xff, 0xd3, + 0x69, 0x93, 0xa7, 0x5f, 0xd1, 0x83, 0xc9, 0x18, 0x2a, 0x79, 0x6a, 0x2b, 0x19, 0x4f, 0xe0, 0xe3, 0xaf, 0xe0, 0xbf, + 0xbf, 0x91, 0x60, 0x41, 0x6b, 0xc1, 0x92, 0x0a, 0xf5, 0x67, 0x28, 0xe2, 0x44, 0xd5, 0x44, 0xc2, 0x43, 0xcc, 0x2c, + 0xbf, 0x89, 0xc3, 0x80, 0xd8, 0x74, 0x28, 0x88, 0x1e, 0x8c, 0x47, 0x4f, 0x49, 0xe0, 0xc2, 0xd3, 0xdd, 0xba, 0x20, + 0x63, 0x49, 0x35, 0xcf, 0xbe, 0x48, 0x34, 0x63, 0xe0, 0x00, 0x58, 0x7d, 0x74, 0x73, 0xd5, 0x62, 0x9e, 0x7d, 0x51, + 0x8b, 0xdd, 0x5c, 0xbf, 0xb5, 0x00, 0xe5, 0xdd, 0x55, 0xcb, 0x6e, 0x4b, 0x19, 0x3a, 0xad, 0x35, 0xfa, 0xec, 0x23, + 0xa6, 0x0f, 0x06, 0xce, 0x0d, 0xfb, 0xef, 0x3b, 0xe5, 0xb4, 0xbe, 0x51, 0x28, 0xd4, 0xa8, 0x3c, 0x24, 0xec, 0x04, + 0x8a, 0x1e, 0x0c, 0x80, 0x27, 0x70, 0x70, 0xdf, 0xfe, 0xcd, 0x32, 0x3e, 0x76, 0x94, 0xf1, 0x33, 0xca, 0x10, 0xd0, + 0xa8, 0x87, 0x99, 0x4d, 0x0f, 0x1b, 0xdd, 0xe8, 0x25, 0x0b, 0x79, 0x32, 0xf9, 0x9e, 0xc1, 0xae, 0xd6, 0xb5, 0x38, + 0xd0, 0xa2, 0x68, 0x71, 0x79, 0x90, 0xf2, 0x59, 0xcd, 0xfe, 0xbe, 0x44, 0xf5, 0x56, 0xe4, 0xbd, 0x11, 0xd9, 0xac, + 0x66, 0xdf, 0xeb, 0x37, 0xc0, 0xcd, 0xb0, 0xdf, 0xe4, 0x93, 0x1b, 0x38, 0x83, 0x0b, 0xd3, 0x1e, 0x69, 0x62, 0x04, + 0x58, 0x01, 0x19, 0x38, 0xf0, 0x00, 0xe8, 0xa0, 0x3b, 0xda, 0xdb, 0xad, 0x4c, 0xf1, 0xfb, 0x6c, 0x60, 0x00, 0x35, + 0xf3, 0x36, 0xb1, 0x65, 0xff, 0xcb, 0x93, 0x97, 0xa0, 0x70, 0xcb, 0x2f, 0x6f, 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, + 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x55, 0x40, 0xf5, 0x96, 0x8f, 0x36, 0x5c, 0xaa, 0x27, 0x81, 0x33, 0xb8, + 0x14, 0x65, 0xc2, 0xdf, 0x2a, 0xb1, 0x3f, 0x5a, 0x3f, 0xba, 0xbe, 0x3d, 0x0e, 0xac, 0x7d, 0x8f, 0x8f, 0xd4, 0x67, + 0xde, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0xaf, 0x1a, 0x23, 0xf1, 0x28, 0x80, 0x37, 0xd0, 0x11, 0x29, 0x34, 0x52, 0x2d, + 0x70, 0x0c, 0x85, 0xb4, 0x40, 0x1c, 0x79, 0x75, 0x83, 0x2d, 0x88, 0x08, 0xc1, 0xc3, 0xed, 0x5f, 0x4b, 0x19, 0x38, + 0xaa, 0xdf, 0xe7, 0xc2, 0x75, 0x7b, 0xd2, 0x76, 0xe4, 0x38, 0xf5, 0x53, 0x07, 0xdf, 0x9c, 0x34, 0x8d, 0xb6, 0x5c, + 0x49, 0x99, 0x61, 0x59, 0xd8, 0x49, 0xa8, 0xe4, 0x1e, 0xb5, 0x03, 0xc9, 0x17, 0x72, 0x88, 0x64, 0x81, 0x51, 0x28, + 0xc8, 0x70, 0x42, 0xc1, 0x66, 0xaa, 0x5a, 0x66, 0x97, 0x75, 0xb8, 0x91, 0x0a, 0x65, 0x4e, 0xd1, 0xb7, 0x1b, 0x1c, + 0x48, 0x48, 0x94, 0x55, 0x6f, 0xe2, 0x37, 0x21, 0x82, 0xd5, 0x71, 0x65, 0x0b, 0xc5, 0x9d, 0xfd, 0xc9, 0xd3, 0x2e, + 0xfe, 0x48, 0xbb, 0x80, 0xda, 0x58, 0x4c, 0xc3, 0x89, 0x89, 0x7d, 0x63, 0xbf, 0x30, 0x9a, 0x1e, 0x80, 0xfa, 0xae, + 0xa4, 0x18, 0x41, 0x7e, 0xa5, 0xed, 0x63, 0x7b, 0x8c, 0x89, 0x19, 0xc4, 0x1a, 0x96, 0x39, 0x33, 0xd9, 0x37, 0xc2, + 0x4e, 0x00, 0xb8, 0x11, 0x5a, 0x23, 0x21, 0xf0, 0x78, 0x1d, 0xe2, 0x79, 0x29, 0xc3, 0xb7, 0x66, 0x84, 0x8e, 0xc1, + 0x9b, 0xca, 0x34, 0x32, 0x13, 0xae, 0x60, 0x50, 0x1f, 0xdb, 0x2a, 0x0a, 0xab, 0xa9, 0x2c, 0x3b, 0x01, 0xb8, 0x81, + 0xec, 0x58, 0x5f, 0x3c, 0x67, 0xf5, 0x3c, 0x5b, 0x44, 0x3a, 0x28, 0x60, 0x5e, 0x19, 0x06, 0xed, 0xcd, 0x1e, 0xd9, + 0x8e, 0x45, 0xe8, 0x86, 0xfb, 0x08, 0xc6, 0xd3, 0xf6, 0x05, 0x2b, 0x88, 0x46, 0x88, 0x87, 0x19, 0x33, 0xf8, 0x5e, + 0x69, 0xca, 0x53, 0xd9, 0x12, 0x08, 0x1c, 0x85, 0x50, 0x17, 0xbb, 0x46, 0x09, 0x36, 0x93, 0x17, 0xcc, 0x60, 0xc7, + 0x8e, 0xd4, 0x74, 0xc9, 0x3a, 0x1d, 0xca, 0x29, 0x2d, 0xd4, 0x94, 0x2a, 0x5f, 0xc3, 0x6a, 0x5e, 0xa0, 0x87, 0x1e, + 0xb8, 0x1e, 0x28, 0x87, 0xbc, 0x82, 0x4e, 0x74, 0x04, 0x9d, 0x56, 0x9b, 0xb0, 0x73, 0x23, 0xd5, 0xb2, 0x06, 0x79, + 0xc7, 0x50, 0xef, 0x88, 0x17, 0x4e, 0xa0, 0x2e, 0x84, 0x08, 0xd9, 0xdb, 0x22, 0x7d, 0x44, 0xb3, 0xac, 0x7a, 0x09, + 0x65, 0x71, 0xc4, 0xd6, 0x05, 0x2b, 0x6d, 0x34, 0xb9, 0xe4, 0x11, 0x4f, 0x11, 0x11, 0xf0, 0x54, 0x6a, 0xd7, 0x77, + 0x5a, 0x42, 0x68, 0x96, 0x02, 0x71, 0xb3, 0x51, 0x9c, 0x1b, 0x13, 0xc8, 0x02, 0xe8, 0xdb, 0x4f, 0xd9, 0xb5, 0x13, + 0x0e, 0x76, 0x73, 0x9d, 0x15, 0xcf, 0xf9, 0x65, 0x56, 0xf0, 0x14, 0xc1, 0xae, 0xee, 0xf4, 0x03, 0xb7, 0x6c, 0x1b, + 0x58, 0xbe, 0x7d, 0x07, 0x0b, 0xa6, 0x0a, 0x95, 0x52, 0x22, 0x2b, 0xa2, 0x0a, 0x32, 0xbb, 0xcc, 0xdd, 0xeb, 0xac, + 0x78, 0x1d, 0xdf, 0x81, 0x37, 0x85, 0xc7, 0x4f, 0x8f, 0x2e, 0xf0, 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, + 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x29, 0x68, 0x6d, 0x0d, 0x81, 0x13, 0x7f, 0x5a, 0x76, 0xef, 0x3a, 0x2b, 0xb4, + 0x7d, 0xc6, 0x75, 0x7c, 0xc7, 0x0a, 0x09, 0x66, 0x81, 0x71, 0xee, 0xdb, 0x52, 0x92, 0xeb, 0xac, 0xd0, 0x02, 0x92, + 0xeb, 0xf8, 0x8e, 0xfa, 0x32, 0x0e, 0x65, 0x45, 0xe7, 0xc4, 0xf9, 0xdd, 0x1d, 0x7e, 0x81, 0xa1, 0x56, 0xc6, 0xfd, + 0x3e, 0x48, 0xcc, 0x84, 0x69, 0xca, 0x4c, 0x44, 0x42, 0xa1, 0x85, 0xd4, 0x94, 0x0f, 0x26, 0x64, 0x77, 0xa5, 0x1a, + 0x46, 0xd4, 0x7c, 0x15, 0x56, 0xb3, 0x71, 0x34, 0x21, 0x74, 0xd2, 0xb1, 0xde, 0x75, 0x6b, 0x21, 0xd3, 0xe8, 0x69, + 0xe4, 0xf8, 0x74, 0x96, 0xac, 0x9e, 0x96, 0xc7, 0x8c, 0x4f, 0xcb, 0xc1, 0x80, 0xa8, 0xd0, 0xc1, 0x1b, 0xac, 0x07, + 0x4c, 0x69, 0x6c, 0xbc, 0x35, 0xdd, 0xea, 0x97, 0x42, 0x86, 0xa4, 0x77, 0x0c, 0x48, 0x32, 0x61, 0x83, 0xdd, 0x82, + 0x44, 0xd1, 0xf1, 0xbf, 0x93, 0x5b, 0x70, 0xd7, 0x83, 0xd1, 0x8f, 0xee, 0xeb, 0x18, 0xff, 0xa1, 0xb6, 0x05, 0x51, + 0x9f, 0x2a, 0xd6, 0xeb, 0x48, 0x94, 0x21, 0x17, 0xe1, 0x67, 0x47, 0x43, 0x34, 0x51, 0xed, 0xb1, 0xa0, 0x58, 0x5f, + 0x5f, 0xf0, 0x12, 0xa7, 0x9f, 0xd9, 0xcb, 0x15, 0x6c, 0x0b, 0x5a, 0x6b, 0x1a, 0xf5, 0x26, 0x7e, 0x13, 0x99, 0xcb, + 0x82, 0x2a, 0xf2, 0x39, 0x0a, 0x59, 0xf3, 0x30, 0xac, 0x87, 0xed, 0x41, 0x24, 0x87, 0xed, 0x49, 0xf0, 0x1a, 0x03, + 0x0b, 0x64, 0x87, 0x46, 0xe0, 0x22, 0x34, 0xf2, 0xb7, 0x63, 0x70, 0xe1, 0x32, 0x88, 0x2c, 0x43, 0x15, 0xbf, 0xa9, + 0xdd, 0x04, 0xd9, 0x2b, 0x74, 0x9a, 0xc2, 0xaa, 0xa4, 0x49, 0x3e, 0xfc, 0x7a, 0x29, 0x4a, 0xcc, 0xe4, 0x74, 0xd9, + 0xa1, 0xaf, 0xed, 0xf6, 0x0e, 0x74, 0xc1, 0xaa, 0x4f, 0xce, 0xd7, 0x8f, 0x3b, 0x7b, 0x02, 0x46, 0xb1, 0x32, 0x87, + 0x2f, 0xa4, 0x54, 0x3e, 0x28, 0xcd, 0xc7, 0x30, 0xaf, 0x14, 0xc7, 0x6e, 0x00, 0x93, 0x80, 0x7d, 0x86, 0x54, 0x87, + 0x69, 0xc7, 0x3e, 0x47, 0x1b, 0x58, 0x12, 0x70, 0xf8, 0x47, 0x99, 0x68, 0xdc, 0xab, 0x7b, 0x95, 0xfa, 0x21, 0x5b, + 0xe6, 0x0b, 0xe0, 0xf3, 0x61, 0xd7, 0x46, 0x05, 0xca, 0x26, 0x22, 0x41, 0x61, 0xcb, 0x63, 0x90, 0xf6, 0x28, 0xa6, + 0xab, 0x92, 0x27, 0x19, 0x4a, 0x29, 0x12, 0xe5, 0x13, 0x9c, 0xc3, 0x1b, 0xdc, 0x8f, 0x32, 0x20, 0xbc, 0x0c, 0x39, + 0x1d, 0xa5, 0x54, 0x59, 0xc0, 0x48, 0xea, 0x01, 0xa2, 0xbc, 0x0c, 0xe4, 0x78, 0xdb, 0xed, 0x84, 0xae, 0xd8, 0x72, + 0x38, 0xa1, 0x48, 0x4a, 0xae, 0xb0, 0xdc, 0x6b, 0xd0, 0x79, 0x5c, 0xb0, 0xde, 0x0b, 0xc0, 0x22, 0x38, 0x87, 0xbf, + 0x31, 0xa1, 0x37, 0xf0, 0x37, 0x27, 0xf4, 0x35, 0x0b, 0xaf, 0x87, 0x57, 0xe4, 0x30, 0x4c, 0x07, 0x13, 0x29, 0x18, + 0xbb, 0x67, 0xcb, 0x22, 0x94, 0x89, 0xab, 0xc3, 0x4b, 0xf2, 0xf8, 0x92, 0xde, 0xd1, 0x5b, 0x7a, 0x46, 0xdf, 0x02, + 0xe1, 0xbf, 0x3f, 0x9e, 0xf0, 0xe1, 0xe4, 0x49, 0xbf, 0xdf, 0xbb, 0xe8, 0xf7, 0x7b, 0xe7, 0xda, 0x80, 0x42, 0xed, + 0xa2, 0xab, 0x86, 0xaa, 0x5f, 0xd7, 0xcd, 0x62, 0xfa, 0x56, 0x6e, 0xdc, 0x84, 0x67, 0x79, 0x78, 0x7d, 0x78, 0x4f, + 0x86, 0xf8, 0x78, 0x99, 0x0b, 0x51, 0x86, 0x57, 0x87, 0xf7, 0x84, 0xbe, 0x3d, 0x01, 0xbd, 0x29, 0xd6, 0xf7, 0xf6, + 0xf1, 0xbd, 0xaa, 0x8d, 0xd0, 0x17, 0x61, 0x02, 0xdb, 0xe4, 0x8e, 0x99, 0xbb, 0xf6, 0x64, 0x0c, 0xb1, 0x4c, 0xee, + 0x9d, 0xf2, 0xee, 0x1f, 0xdf, 0x91, 0xc3, 0x3b, 0xf0, 0x14, 0x35, 0xe4, 0x6f, 0x16, 0xde, 0xb2, 0x56, 0x0d, 0x8f, + 0xef, 0xe9, 0x59, 0xab, 0x11, 0x8f, 0xef, 0x49, 0x14, 0xde, 0xb2, 0x2b, 0x7a, 0xc6, 0xae, 0x09, 0xbd, 0xe8, 0xf7, + 0xcf, 0xfb, 0x7d, 0xd1, 0xef, 0xff, 0x3d, 0x0e, 0xc3, 0x78, 0x58, 0x92, 0x43, 0x41, 0xef, 0x0f, 0x27, 0xfc, 0x2b, + 0x32, 0x0b, 0x55, 0xf3, 0xe5, 0x82, 0x33, 0x2a, 0x6f, 0x99, 0xeb, 0x9e, 0x82, 0xb5, 0xc2, 0x3d, 0x93, 0x4f, 0x6f, + 0xe9, 0x2d, 0x2b, 0xe9, 0x19, 0x8b, 0x49, 0x74, 0x03, 0xad, 0xb8, 0x98, 0x95, 0xd1, 0x2d, 0x3d, 0x63, 0xe7, 0xb3, + 0x38, 0x3a, 0xa3, 0x6f, 0x59, 0x3e, 0x9c, 0x40, 0xde, 0xb3, 0xe1, 0x2d, 0x39, 0x7c, 0x4b, 0xa2, 0xf0, 0xad, 0xfa, + 0x7d, 0x4f, 0xaf, 0x78, 0xf8, 0x96, 0x3a, 0xd5, 0xbc, 0x25, 0xba, 0x7a, 0xaf, 0xf6, 0xb7, 0x24, 0x72, 0x07, 0xf3, + 0xad, 0xb1, 0xa7, 0x79, 0x64, 0x69, 0x63, 0x5a, 0x84, 0xa0, 0x6f, 0x2e, 0xc2, 0x5b, 0x42, 0xa6, 0xfe, 0xd8, 0xc1, + 0x80, 0xce, 0x1e, 0x45, 0x09, 0xa1, 0xb7, 0x6e, 0xa9, 0xb7, 0x38, 0x86, 0x7a, 0x84, 0x64, 0xda, 0x19, 0xa6, 0xe1, + 0x3a, 0x78, 0xa5, 0xc0, 0x3a, 0x2e, 0xfa, 0xfd, 0x70, 0xdd, 0xef, 0x43, 0xa4, 0xfb, 0x72, 0xa6, 0x63, 0xbb, 0x59, + 0xb2, 0x49, 0x6f, 0x41, 0xfb, 0xff, 0x6a, 0x30, 0x80, 0xce, 0x38, 0x25, 0x85, 0xb7, 0x83, 0x57, 0x8f, 0xef, 0x89, + 0xac, 0xa3, 0xa4, 0x95, 0x08, 0x4b, 0xfa, 0x9a, 0x66, 0x00, 0xf8, 0xf5, 0x6a, 0x30, 0x20, 0x91, 0xfe, 0x8c, 0x4c, + 0x5f, 0x1d, 0xbf, 0x9d, 0x0e, 0x06, 0xaf, 0xf4, 0x36, 0xf9, 0x8b, 0xed, 0x29, 0x05, 0xd6, 0xdf, 0x79, 0xbf, 0xff, + 0xd7, 0x49, 0x4c, 0x2e, 0x4a, 0x1e, 0x7f, 0x9c, 0xfa, 0x6d, 0xf9, 0xcb, 0x46, 0x55, 0x3b, 0xef, 0xf7, 0xd7, 0xfd, + 0xfe, 0x19, 0x60, 0x17, 0xcd, 0xac, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x96, 0x22, 0x29, 0x92, 0x43, 0x63, 0x68, 0x5b, + 0x2c, 0xdb, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xc8, 0xaf, 0x28, 0x6e, 0x48, 0x14, 0xf6, 0xce, 0xb7, 0xdb, 0x33, 0xc6, + 0x58, 0x4c, 0x40, 0xfa, 0xe1, 0xbe, 0x3e, 0x6b, 0xbc, 0x18, 0x62, 0x95, 0x40, 0x66, 0x73, 0xb3, 0x34, 0x87, 0x40, + 0xc4, 0x61, 0xd3, 0xbf, 0xd7, 0xf7, 0xf2, 0xaa, 0xb1, 0x7c, 0xeb, 0xcf, 0x00, 0x42, 0x24, 0x58, 0xc8, 0x67, 0x38, + 0x06, 0x55, 0x06, 0xc0, 0xbf, 0x91, 0x9c, 0x79, 0x01, 0xa0, 0xe6, 0x64, 0xbb, 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb2, + 0xd1, 0xdf, 0x9e, 0x3e, 0xae, 0x1f, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, 0x61, 0x16, 0x6b, 0x7d, 0x08, 0x46, + 0xf0, 0x8a, 0x7d, 0xbc, 0xc9, 0x3e, 0x9b, 0x7d, 0x44, 0xc2, 0xea, 0x31, 0x8e, 0xbc, 0x48, 0x5b, 0x7a, 0xbb, 0x3d, + 0x0c, 0x26, 0x2f, 0xd2, 0x4f, 0xb0, 0x9d, 0x2e, 0xff, 0xe6, 0xc0, 0x78, 0xc2, 0xc1, 0x68, 0x2f, 0x0a, 0xea, 0x4c, + 0xdb, 0x6e, 0x6b, 0xf7, 0x12, 0xf8, 0x06, 0x53, 0x41, 0xc7, 0x66, 0x58, 0xb8, 0x41, 0x4d, 0xe4, 0xd1, 0x32, 0xa8, + 0x1b, 0x69, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0xd2, 0x71, 0x0b, 0x34, 0x43, 0x86, 0xba, 0xdc, 0xd3, 0xfa, 0x5f, 0xbc, + 0x14, 0x1a, 0x3e, 0xc3, 0x8a, 0x08, 0x1d, 0x6e, 0x8d, 0xbb, 0xdc, 0x5a, 0xf5, 0x09, 0x6e, 0xad, 0x40, 0x12, 0xab, + 0x61, 0x49, 0xf5, 0xe5, 0x28, 0x61, 0x27, 0x05, 0xe3, 0x33, 0xa0, 0xe3, 0x31, 0x3c, 0x08, 0x56, 0xcd, 0x44, 0x94, + 0xa0, 0x7d, 0xa2, 0x8d, 0x30, 0xf8, 0x27, 0x60, 0xf6, 0xd3, 0x1c, 0xfe, 0x0a, 0x32, 0x4d, 0x8e, 0x21, 0x20, 0xc4, + 0xf1, 0x78, 0x16, 0x87, 0x63, 0x12, 0x25, 0x27, 0xf0, 0x04, 0xff, 0x95, 0xe1, 0x98, 0x34, 0xea, 0x0e, 0x23, 0xe4, + 0xe5, 0x36, 0x61, 0x00, 0x57, 0x36, 0x9e, 0x4d, 0x22, 0x23, 0xdd, 0x15, 0x8f, 0x47, 0xe3, 0xa7, 0x64, 0x1a, 0x87, + 0x62, 0x90, 0x10, 0x0a, 0xde, 0xbd, 0x61, 0x31, 0x4c, 0x14, 0x3c, 0x1b, 0xb0, 0x79, 0x85, 0x65, 0xf3, 0x04, 0x9c, + 0x80, 0x30, 0x4c, 0xc8, 0xb1, 0xee, 0x41, 0x4a, 0x51, 0xe7, 0x39, 0xf6, 0x53, 0x1d, 0x41, 0x98, 0x1d, 0xb5, 0x54, + 0x7c, 0x05, 0x40, 0x97, 0x38, 0x38, 0xd4, 0x20, 0x61, 0x54, 0xb3, 0xb0, 0x70, 0xa8, 0x94, 0xae, 0xee, 0xb0, 0xf2, + 0x28, 0xbf, 0x6e, 0xd0, 0x61, 0x45, 0x06, 0x13, 0x5a, 0x9c, 0x4c, 0xf8, 0x57, 0x10, 0xc0, 0xc3, 0x8b, 0xf8, 0x25, + 0x71, 0x62, 0x20, 0xbc, 0x0a, 0x32, 0x50, 0x69, 0x23, 0x1b, 0x33, 0x32, 0x15, 0x1f, 0x40, 0x98, 0x94, 0x83, 0x5b, + 0xb1, 0xce, 0x53, 0x88, 0x0a, 0xb6, 0xce, 0xeb, 0x83, 0x2b, 0xb0, 0x64, 0x8f, 0x6b, 0x88, 0x13, 0xb6, 0x5e, 0x01, + 0x76, 0xee, 0xa3, 0x4d, 0xd1, 0x1c, 0xc8, 0xef, 0x0e, 0xb0, 0xe5, 0xf0, 0xaa, 0x16, 0x07, 0x93, 0xf1, 0x78, 0x3c, + 0xfa, 0x1d, 0x8e, 0x0e, 0x20, 0xb4, 0x24, 0xd2, 0x7c, 0x32, 0x40, 0xe3, 0xae, 0x6b, 0xee, 0x8c, 0x0b, 0x45, 0x59, + 0xe9, 0x64, 0x42, 0x40, 0xfc, 0xac, 0xfb, 0x06, 0xfb, 0x8a, 0xab, 0xf8, 0x27, 0xbb, 0x9f, 0xe8, 0x15, 0x2d, 0x57, + 0xea, 0xe8, 0xdd, 0xdb, 0xb3, 0x57, 0x1f, 0x5e, 0xfd, 0xfa, 0xe2, 0xfc, 0xd5, 0x9b, 0x97, 0xaf, 0xde, 0xbc, 0xfa, + 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xd7, 0x56, 0xc4, 0x8c, 0xbd, 0x73, 0x8f, 0x71, 0x6a, 0x71, 0x85, 0xb3, 0x47, 0xf6, + 0x16, 0x0b, 0xb0, 0x09, 0x9a, 0x5b, 0xa8, 0xa8, 0x62, 0x34, 0x6a, 0x75, 0x4f, 0x40, 0x46, 0xa3, 0x46, 0x36, 0x1e, + 0x56, 0x6c, 0x8d, 0x5c, 0xbc, 0x65, 0x38, 0xf8, 0xc8, 0xfc, 0x96, 0x9c, 0x09, 0x37, 0xa3, 0xad, 0x58, 0x11, 0xf0, + 0xf9, 0x5a, 0x17, 0xb5, 0xc3, 0x85, 0xc8, 0xbd, 0x6d, 0x9e, 0x43, 0x42, 0x1d, 0x22, 0xd7, 0xc1, 0xfb, 0x7a, 0x64, + 0x8f, 0x8f, 0x9c, 0x27, 0xe9, 0x19, 0xea, 0x72, 0x34, 0x7c, 0xe4, 0x3d, 0xa3, 0x13, 0x73, 0xa3, 0x75, 0xa8, 0xe7, + 0x25, 0xec, 0x6f, 0x29, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x58, 0xdd, 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, + 0x7e, 0xa4, 0x6a, 0x02, 0x69, 0x51, 0x20, 0x75, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, 0x52, 0xff, 0x0c, 0x3d, 0x02, 0x68, + 0x2e, 0x3b, 0x86, 0x04, 0xea, 0xc5, 0x6b, 0x5c, 0xff, 0x9c, 0x7c, 0x59, 0xd1, 0xce, 0x17, 0xdf, 0x41, 0x88, 0x61, + 0xf7, 0x8a, 0xe0, 0x4d, 0xb8, 0x9d, 0x64, 0x7b, 0x69, 0xd1, 0xf7, 0xaa, 0xeb, 0x18, 0x8f, 0xbb, 0x3d, 0x57, 0x0a, + 0xff, 0xd6, 0x05, 0xf6, 0x40, 0xfe, 0x75, 0xbc, 0x60, 0x21, 0x60, 0x33, 0x1e, 0x9a, 0x45, 0x62, 0xfd, 0xde, 0xe9, + 0x84, 0x1c, 0x1e, 0x4d, 0xf9, 0x90, 0x15, 0xb4, 0x1a, 0xb0, 0xa2, 0xd9, 0xa1, 0xe6, 0xbc, 0x4d, 0xc8, 0xab, 0x5d, + 0x1a, 0x5e, 0x0d, 0xf9, 0x43, 0x97, 0xa4, 0x0f, 0xdc, 0x73, 0xa8, 0x36, 0xcd, 0xc5, 0x90, 0xa6, 0x9c, 0xee, 0x52, + 0x19, 0x10, 0x22, 0x5d, 0xc7, 0x35, 0x69, 0xd4, 0x51, 0xb5, 0xb4, 0x92, 0x8e, 0x9b, 0x6c, 0xf3, 0x89, 0x4b, 0xb6, + 0xbc, 0x5d, 0xbb, 0xd7, 0xea, 0xf6, 0x85, 0x19, 0xc8, 0xdf, 0x1f, 0x88, 0x6a, 0xa2, 0x21, 0xba, 0x80, 0x0a, 0xfe, + 0x01, 0x5e, 0x9e, 0x3c, 0x52, 0x0a, 0xd0, 0x7d, 0x67, 0x47, 0xd7, 0x1e, 0xf7, 0x66, 0xb1, 0xb5, 0xc4, 0x39, 0xab, + 0x5d, 0x67, 0x79, 0x59, 0xb6, 0x44, 0xd7, 0xa9, 0xd8, 0xcf, 0x61, 0x47, 0xdf, 0x9d, 0x6d, 0x00, 0x44, 0x29, 0xac, + 0xed, 0xd9, 0x5f, 0x39, 0x67, 0x7f, 0x65, 0xce, 0x7e, 0xb3, 0x09, 0xa4, 0x0f, 0x2b, 0xb4, 0xec, 0xa5, 0x28, 0x6a, + 0xdd, 0xe4, 0xb1, 0xaf, 0xcb, 0x42, 0x5a, 0xcc, 0x0f, 0x0d, 0xed, 0x7a, 0x32, 0xa6, 0x02, 0xd5, 0x23, 0x3f, 0x60, + 0xab, 0x0e, 0x0b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0xb9, 0xef, 0x6e, 0xf7, 0x7f, 0x73, 0xa1, 0x83, 0xdb, + 0xda, 0xb2, 0x72, 0xd4, 0xd5, 0x71, 0x89, 0x77, 0xb5, 0xe5, 0xc3, 0x77, 0xb5, 0x77, 0x99, 0x5a, 0x76, 0x35, 0xa0, + 0x06, 0x15, 0xeb, 0x6b, 0x5e, 0x66, 0x49, 0x63, 0x14, 0x1a, 0x6f, 0x39, 0x84, 0xf6, 0x70, 0x0e, 0x2e, 0x90, 0xc3, + 0x12, 0x42, 0x3f, 0xd6, 0x5a, 0x00, 0xe8, 0xb2, 0xd8, 0x6f, 0x79, 0x98, 0x91, 0x81, 0x2b, 0xf1, 0x2b, 0x84, 0x2b, + 0x2e, 0x3e, 0xdc, 0xc9, 0x4c, 0xd0, 0xab, 0xc4, 0x46, 0xcd, 0x15, 0xed, 0x98, 0x1f, 0xee, 0x17, 0x18, 0x0d, 0xc2, + 0x69, 0x4b, 0x76, 0x58, 0x75, 0xcc, 0x72, 0x0d, 0x47, 0x6d, 0x61, 0xcb, 0x2c, 0x5a, 0xd7, 0xcf, 0x7a, 0x98, 0xa9, + 0x33, 0xe5, 0x2d, 0xc8, 0xbe, 0x90, 0xbb, 0x9f, 0xaa, 0x8a, 0x2b, 0x72, 0x32, 0x19, 0x4f, 0x49, 0x35, 0x18, 0xb4, + 0x92, 0x8f, 0x31, 0x79, 0x38, 0xdc, 0x61, 0x2e, 0x2b, 0xd5, 0x0f, 0xa7, 0x0f, 0x50, 0x9f, 0xb7, 0x25, 0xc9, 0xa6, + 0x66, 0x7f, 0x82, 0x59, 0x2c, 0x10, 0x47, 0x0b, 0xbf, 0x38, 0x5f, 0x00, 0xc8, 0x32, 0x2c, 0x33, 0x25, 0x2c, 0x82, + 0x2b, 0x3d, 0x74, 0xb2, 0x64, 0xe2, 0x78, 0x3c, 0x73, 0x7b, 0x6e, 0x19, 0x1c, 0x42, 0xa2, 0x89, 0x31, 0x7e, 0x71, + 0xb3, 0x60, 0x1c, 0x87, 0xe2, 0x44, 0x78, 0xdf, 0x15, 0x24, 0x1a, 0x6b, 0x53, 0x65, 0x75, 0x95, 0xa8, 0x87, 0x09, + 0x79, 0x5c, 0x92, 0xc3, 0x92, 0x2e, 0xdd, 0xb1, 0xc4, 0xf4, 0xc3, 0xf8, 0x70, 0x32, 0x26, 0x8f, 0xe3, 0xc7, 0x13, + 0x0d, 0x37, 0xec, 0xe6, 0xc8, 0x87, 0x4b, 0x72, 0xe8, 0x57, 0x09, 0xa6, 0xa8, 0xba, 0x67, 0x6e, 0x25, 0xc9, 0x60, + 0x39, 0x48, 0x1f, 0xb7, 0xf2, 0x62, 0xad, 0x6a, 0xbc, 0xd7, 0xc7, 0x7c, 0x4a, 0x2a, 0xef, 0xc6, 0xb0, 0xa6, 0xd7, + 0xf1, 0x1f, 0xa2, 0x8c, 0x0a, 0x01, 0x88, 0x84, 0xa0, 0xde, 0xce, 0x2e, 0xb3, 0x24, 0x2e, 0xd2, 0x28, 0x6d, 0x08, + 0x4d, 0x4f, 0xd8, 0x64, 0x3c, 0x4b, 0x59, 0x7a, 0x3c, 0x79, 0x3a, 0x9b, 0x3c, 0x8d, 0x8e, 0xc6, 0x51, 0x3a, 0x18, + 0x40, 0xf2, 0xd1, 0x18, 0x5c, 0xec, 0xe0, 0x37, 0x3b, 0x82, 0xa1, 0x3b, 0x41, 0x96, 0xb0, 0x84, 0xa6, 0x7d, 0x5e, + 0x93, 0xd4, 0x70, 0x5e, 0xca, 0x9e, 0xc4, 0x77, 0x74, 0xed, 0x38, 0xb8, 0xb8, 0x2d, 0xbc, 0xb4, 0x2d, 0xbc, 0xdc, + 0x6d, 0xa1, 0xb6, 0x20, 0x28, 0xc5, 0xff, 0x8f, 0x1b, 0xc6, 0xbe, 0xbb, 0x84, 0x5e, 0x5c, 0x37, 0xd9, 0x68, 0x55, + 0x8a, 0x5a, 0xc0, 0x6d, 0x42, 0x8a, 0xc2, 0x46, 0xf1, 0x6a, 0x95, 0x2b, 0x17, 0xb1, 0x79, 0x4d, 0x01, 0xdc, 0x05, + 0xce, 0x56, 0x60, 0xa1, 0xb5, 0x81, 0xdc, 0x5f, 0xbc, 0x14, 0xcc, 0xa8, 0x7d, 0xf4, 0x3d, 0xf2, 0x8f, 0x10, 0xc1, + 0x96, 0x4e, 0xc6, 0xb3, 0x0a, 0x11, 0x2d, 0x3e, 0x25, 0xef, 0xfd, 0x37, 0x8e, 0x22, 0x73, 0x34, 0x8f, 0x51, 0xa1, + 0x65, 0x3c, 0xe2, 0xcc, 0xc9, 0xe4, 0x64, 0xe0, 0x6e, 0x06, 0x23, 0xfd, 0xb5, 0xb7, 0x19, 0x63, 0xdb, 0xa3, 0x7a, + 0xa1, 0x85, 0xa2, 0x7f, 0xe1, 0x3b, 0x5d, 0x2f, 0xe0, 0x12, 0xca, 0x81, 0x5d, 0x5f, 0x5d, 0xf1, 0x0a, 0x40, 0x84, + 0xb2, 0xa2, 0xdf, 0xef, 0xfd, 0xa1, 0xa1, 0x49, 0x2b, 0x5e, 0xbe, 0xce, 0x0a, 0xe3, 0x8c, 0x03, 0x4d, 0x05, 0xea, + 0xff, 0xb1, 0x36, 0xcf, 0x74, 0x4c, 0x66, 0xee, 0xe3, 0x70, 0x42, 0x22, 0xff, 0x35, 0xf9, 0xc4, 0x69, 0xfa, 0x89, + 0x2b, 0xda, 0x7f, 0x20, 0x33, 0xd7, 0x1c, 0x32, 0xd4, 0x5f, 0x58, 0xe6, 0x49, 0xeb, 0x75, 0x62, 0x76, 0x52, 0xb1, + 0x7a, 0x06, 0xe8, 0xe9, 0x25, 0x3c, 0xc8, 0x6b, 0x59, 0x3c, 0x85, 0xd9, 0x07, 0x35, 0x62, 0x75, 0xcc, 0xc6, 0xb3, + 0x50, 0x84, 0x13, 0xb0, 0xef, 0x9d, 0x8c, 0xe1, 0x3e, 0x20, 0xc2, 0x8f, 0x75, 0x58, 0x51, 0x94, 0x92, 0x97, 0xf0, + 0x1b, 0x14, 0x13, 0x00, 0x11, 0x08, 0x79, 0xfb, 0x7d, 0x21, 0x93, 0xf0, 0x75, 0x81, 0x29, 0xa5, 0xfc, 0xe0, 0x3f, + 0x91, 0xaa, 0x5b, 0xa6, 0x5f, 0xae, 0x1f, 0x77, 0x26, 0x24, 0x9f, 0x6e, 0x53, 0xe2, 0x3b, 0x08, 0xee, 0x2c, 0x40, + 0x07, 0x51, 0xa3, 0x19, 0xdb, 0xc3, 0xfc, 0x6e, 0xb5, 0x9f, 0xdf, 0xad, 0xfe, 0xdf, 0xf1, 0xbb, 0xd5, 0x43, 0x8c, + 0x61, 0x6d, 0xa0, 0xe1, 0x67, 0xc1, 0x38, 0x88, 0xfe, 0x73, 0x3e, 0x71, 0x2f, 0x4f, 0x7d, 0x9d, 0x15, 0xd3, 0x3d, + 0x4c, 0xb3, 0x4b, 0x50, 0x10, 0x56, 0x71, 0x97, 0x9e, 0xac, 0x6b, 0x73, 0x6b, 0x25, 0x43, 0xcc, 0xf3, 0x00, 0x6b, + 0x14, 0xd6, 0x0e, 0xd0, 0x3d, 0xaa, 0x36, 0x88, 0x15, 0xc1, 0xc3, 0x98, 0x19, 0xe9, 0xfb, 0x76, 0xab, 0x55, 0x98, + 0x0f, 0x72, 0x51, 0x90, 0x5d, 0x7f, 0x3c, 0x1b, 0x47, 0x21, 0x36, 0xe0, 0x3f, 0x66, 0xac, 0x3c, 0xd9, 0x7c, 0x27, + 0x23, 0xb5, 0x63, 0xf2, 0x34, 0xd9, 0x25, 0xbd, 0x03, 0xde, 0x21, 0x3f, 0x6f, 0x3e, 0x86, 0xa5, 0xd0, 0xfc, 0x96, + 0xb8, 0x8a, 0xcb, 0xac, 0x5e, 0x5e, 0x67, 0x09, 0x32, 0x5d, 0xf0, 0xe2, 0xb3, 0x99, 0x2e, 0xe7, 0x63, 0x75, 0xc0, + 0x38, 0x4a, 0xf1, 0xc6, 0x13, 0xa5, 0xa7, 0x2d, 0xcf, 0x0a, 0x79, 0x79, 0x92, 0x31, 0xdb, 0xb3, 0x0a, 0x9c, 0x4e, + 0xc1, 0x04, 0x5f, 0xfd, 0xb4, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x4b, 0xb1, 0xd2, 0x58, 0x4e, 0x06, 0xba, + 0x13, 0x30, 0x43, 0x45, 0x81, 0x17, 0x28, 0xf8, 0x8b, 0x06, 0x46, 0xf4, 0xa5, 0xfd, 0x4d, 0x06, 0x1a, 0xe9, 0x52, + 0x9f, 0x08, 0x63, 0xcb, 0xed, 0x94, 0x69, 0x2b, 0xca, 0x19, 0x67, 0xef, 0xe5, 0x95, 0x02, 0x0c, 0xf0, 0x36, 0xb7, + 0xd1, 0x45, 0x82, 0x5e, 0x0b, 0x52, 0xe7, 0x0d, 0xdc, 0xcd, 0x32, 0xd2, 0xc2, 0xc5, 0xc7, 0xb5, 0xc3, 0x82, 0x3b, + 0xf6, 0x0b, 0xb1, 0xd0, 0x9a, 0x69, 0x30, 0x66, 0x73, 0x82, 0x05, 0x56, 0x32, 0x50, 0x60, 0x31, 0x53, 0x96, 0xa6, + 0xf5, 0x90, 0x1f, 0x1e, 0xa1, 0xb5, 0x69, 0x3d, 0xe0, 0x87, 0x47, 0x4d, 0x94, 0x1d, 0x43, 0x96, 0x13, 0x37, 0x83, + 0x7c, 0xdd, 0x44, 0x3a, 0x45, 0x67, 0x77, 0xeb, 0x4b, 0xdd, 0x51, 0xdd, 0x80, 0xeb, 0x07, 0x20, 0x80, 0x0d, 0xc0, + 0x21, 0x50, 0x0e, 0x96, 0x42, 0x04, 0x8b, 0x32, 0x89, 0xf6, 0x35, 0x74, 0xde, 0x28, 0xf8, 0x2f, 0x70, 0x17, 0x11, + 0x2b, 0xf7, 0x13, 0x04, 0xfe, 0x8a, 0x32, 0xa5, 0x4c, 0x71, 0x3f, 0x51, 0xea, 0x15, 0xca, 0x99, 0x6f, 0xcd, 0x07, + 0xd1, 0x9a, 0x08, 0x55, 0x8c, 0x21, 0xf8, 0xb7, 0xb2, 0x4c, 0x59, 0xaa, 0x4a, 0xf5, 0xa1, 0xf6, 0x5a, 0x2b, 0xad, + 0xe5, 0xe3, 0xc8, 0x79, 0x8d, 0xa1, 0x63, 0x13, 0x6b, 0x29, 0x27, 0x53, 0x67, 0x6f, 0x0e, 0x45, 0x64, 0x01, 0xa7, + 0x13, 0x36, 0x9e, 0x26, 0xc7, 0x62, 0x9a, 0x58, 0xc8, 0xfc, 0x9c, 0x61, 0x64, 0x55, 0x0d, 0xc2, 0x22, 0x6d, 0x28, + 0x4d, 0x01, 0x3a, 0x39, 0x21, 0x64, 0x8a, 0xa1, 0x28, 0xf2, 0x91, 0xea, 0x87, 0xf1, 0x66, 0xb5, 0x5f, 0xbc, 0x53, + 0x00, 0xa7, 0x61, 0x02, 0x81, 0xc0, 0xcb, 0xf8, 0x36, 0x2b, 0xae, 0xc0, 0x63, 0x78, 0x00, 0x5f, 0x82, 0x9b, 0x5c, + 0xca, 0x7e, 0xab, 0xc3, 0x1c, 0xd7, 0x16, 0x30, 0x68, 0xb0, 0x7a, 0x10, 0x1d, 0x2e, 0xa5, 0x7e, 0x57, 0x01, 0x62, + 0x63, 0x0a, 0xff, 0xb3, 0xb5, 0x61, 0xcf, 0xbe, 0x97, 0x4d, 0x43, 0xeb, 0x84, 0xd3, 0xe2, 0x2a, 0x87, 0x28, 0x2a, + 0x83, 0x18, 0xdc, 0x91, 0x1c, 0x3e, 0xef, 0x5d, 0x15, 0x5e, 0x12, 0x70, 0x2b, 0x8b, 0x45, 0xb8, 0xa2, 0xcb, 0xd1, + 0x1d, 0x5d, 0x8f, 0x6e, 0xe9, 0x98, 0x4e, 0xbe, 0x19, 0x83, 0x45, 0xb6, 0x4a, 0xbd, 0xa7, 0xeb, 0xd1, 0x92, 0x7e, + 0x3b, 0xa6, 0x47, 0x7f, 0x03, 0x13, 0x3e, 0x3c, 0x4c, 0xe8, 0x25, 0x38, 0x76, 0x91, 0x06, 0x3d, 0x35, 0x5d, 0x83, + 0xc3, 0x7a, 0x94, 0x0f, 0xf9, 0x28, 0xa7, 0x7c, 0x54, 0x0e, 0xeb, 0x11, 0x78, 0x3a, 0xd6, 0x43, 0x3e, 0xaa, 0x29, + 0x1f, 0x5d, 0x0c, 0xeb, 0xd1, 0x05, 0xf1, 0x9b, 0xfe, 0xaa, 0xe6, 0xd7, 0x15, 0x4b, 0x61, 0x5b, 0xc0, 0xf2, 0xb5, + 0xab, 0x2c, 0x49, 0xdd, 0x55, 0xad, 0x4f, 0x66, 0xc3, 0xd9, 0x9b, 0xeb, 0x2e, 0x27, 0x06, 0x8f, 0xdb, 0xa4, 0xc3, + 0xd5, 0x97, 0x13, 0x79, 0xd2, 0x4b, 0xe4, 0x87, 0xf1, 0x54, 0x9d, 0x43, 0x60, 0x26, 0x31, 0x0b, 0x63, 0x86, 0xcd, + 0x54, 0x69, 0xa0, 0xc0, 0xc9, 0x46, 0x8e, 0x8b, 0x62, 0x36, 0xca, 0x29, 0xbc, 0x8f, 0x09, 0x89, 0xf0, 0xac, 0x3a, + 0xa9, 0x47, 0x25, 0xc4, 0x1c, 0x61, 0x21, 0x3e, 0x42, 0xbf, 0xe4, 0x47, 0x0e, 0x12, 0x78, 0x86, 0x7d, 0x2d, 0x07, + 0x31, 0x1c, 0xf1, 0xa6, 0xb2, 0x7a, 0x16, 0x26, 0x50, 0x59, 0x3d, 0x2c, 0x74, 0x65, 0x25, 0xcd, 0x46, 0xb5, 0x5b, + 0x59, 0x8d, 0x63, 0x94, 0x10, 0x12, 0x15, 0xaa, 0x32, 0x50, 0x9f, 0x24, 0x2c, 0x2c, 0x54, 0x65, 0x17, 0xf2, 0xa3, + 0x0b, 0xb7, 0xb2, 0x0b, 0x70, 0x21, 0x1d, 0x24, 0xee, 0x55, 0x2a, 0x4f, 0xdb, 0xd7, 0x41, 0x6f, 0x55, 0xd1, 0x0d, + 0xbf, 0xab, 0xcb, 0x38, 0x2a, 0xa8, 0x8d, 0x01, 0x8d, 0x0b, 0x23, 0x12, 0x54, 0xad, 0x51, 0xf0, 0x87, 0x04, 0x51, + 0x69, 0x0c, 0x5e, 0x9d, 0x49, 0xd7, 0x4a, 0xad, 0x69, 0x35, 0x28, 0x06, 0x25, 0xdc, 0x9f, 0xf2, 0xd6, 0x42, 0xfa, + 0x1e, 0x22, 0x2a, 0x43, 0x79, 0x83, 0x7f, 0x60, 0xf0, 0x64, 0xb6, 0x4a, 0xc3, 0x64, 0x74, 0x4f, 0xe3, 0xd1, 0x12, + 0xe1, 0x60, 0xd8, 0x3a, 0x95, 0x78, 0xeb, 0x97, 0x90, 0x7e, 0x47, 0xe3, 0xd1, 0x2d, 0x4d, 0x8d, 0xcd, 0xa9, 0x86, + 0xba, 0xea, 0x8d, 0xe9, 0x5d, 0x04, 0xaf, 0xef, 0xa3, 0x25, 0x85, 0xad, 0x74, 0x9a, 0x67, 0x57, 0x45, 0x94, 0x52, + 0x44, 0x20, 0x5c, 0x23, 0x72, 0xe0, 0x52, 0xa1, 0x0d, 0xae, 0x07, 0x50, 0x86, 0x82, 0x0b, 0x5c, 0x0e, 0xe2, 0xd1, + 0xd2, 0x21, 0x53, 0x4b, 0x75, 0x91, 0x45, 0xf8, 0x68, 0x6b, 0xa3, 0x25, 0x79, 0x46, 0x2c, 0x8c, 0x4b, 0x18, 0x42, + 0x55, 0x58, 0xa1, 0x0b, 0x12, 0x36, 0x70, 0x64, 0x2f, 0x2c, 0xeb, 0x70, 0x03, 0xa6, 0x45, 0xf7, 0x60, 0x1e, 0x05, + 0x0a, 0x07, 0x9b, 0x20, 0xdc, 0x84, 0xa2, 0x9d, 0xa3, 0xd0, 0x39, 0x9c, 0x09, 0x4a, 0x77, 0x26, 0x08, 0x69, 0x57, + 0x37, 0xd9, 0x12, 0xae, 0xc1, 0xf6, 0x0e, 0x9d, 0x8a, 0x4a, 0xaa, 0xce, 0x2d, 0x98, 0x2c, 0xe1, 0x11, 0xb6, 0x84, + 0xa9, 0x99, 0x4e, 0xe1, 0x06, 0x7c, 0x78, 0xb4, 0x33, 0xdf, 0xe5, 0xec, 0xcd, 0x21, 0xd8, 0x76, 0x4a, 0x1f, 0x10, + 0x43, 0xec, 0x96, 0x6c, 0x3c, 0x5d, 0x1e, 0x17, 0xd3, 0x25, 0x12, 0x3b, 0x4d, 0xb7, 0x18, 0x9f, 0x2f, 0x17, 0x34, + 0xc1, 0xb3, 0x8d, 0xd5, 0xf3, 0xa5, 0x46, 0x4b, 0x49, 0x19, 0xae, 0xb7, 0x25, 0xfa, 0xff, 0xcb, 0x8b, 0x5f, 0x0a, + 0xf0, 0x12, 0x8c, 0x05, 0x80, 0x70, 0x0f, 0xa6, 0x05, 0xa9, 0x89, 0xb2, 0xb1, 0x4c, 0xc3, 0x14, 0x17, 0x81, 0x4e, + 0xe9, 0xf7, 0xc3, 0x9c, 0xa5, 0xc4, 0x81, 0x0e, 0x35, 0xa3, 0xb4, 0x4e, 0x5d, 0x21, 0x08, 0xf0, 0x48, 0xf2, 0x1c, + 0x9b, 0x7c, 0x33, 0x9e, 0x05, 0x72, 0x20, 0x82, 0x28, 0x3b, 0xc6, 0x47, 0x0c, 0x5c, 0x14, 0xa9, 0xb8, 0x9d, 0xb6, + 0x88, 0xcb, 0xdd, 0x63, 0x16, 0xe2, 0x24, 0x61, 0xae, 0x59, 0x36, 0x64, 0x75, 0x84, 0x09, 0xaa, 0x30, 0x30, 0xcb, + 0x1b, 0xb2, 0xfa, 0xf0, 0x08, 0x22, 0xb5, 0x9a, 0x32, 0x56, 0x5d, 0x65, 0x7c, 0x0b, 0x40, 0xd6, 0x8c, 0xb1, 0xa3, + 0xbf, 0x8d, 0x67, 0xf2, 0x9b, 0x28, 0xe4, 0x27, 0x47, 0x7f, 0x83, 0xe4, 0xe3, 0x6f, 0x91, 0x99, 0x83, 0x64, 0xaf, + 0xa0, 0x2b, 0x7f, 0xd6, 0x15, 0x94, 0x26, 0xae, 0xbd, 0x42, 0xad, 0x3d, 0xa1, 0xd7, 0x5e, 0x89, 0xee, 0xd4, 0x9a, + 0xf7, 0x90, 0xb6, 0xb3, 0x60, 0x82, 0x8e, 0x66, 0x77, 0xa0, 0x83, 0xb7, 0x8a, 0xa0, 0x17, 0x49, 0xa8, 0x3d, 0x42, + 0xa5, 0x51, 0x2f, 0xec, 0xc8, 0x6e, 0xd6, 0x25, 0x73, 0x0c, 0x98, 0x63, 0x73, 0x0e, 0x55, 0xc3, 0x5c, 0x1e, 0xd4, + 0x29, 0x2b, 0x86, 0x39, 0x1e, 0xc0, 0x6b, 0x26, 0x86, 0xd5, 0x20, 0x57, 0x28, 0xdf, 0x97, 0xac, 0x1c, 0x16, 0x83, + 0x5c, 0x71, 0x33, 0x53, 0x3f, 0x36, 0x6d, 0xa2, 0xc2, 0x33, 0xaf, 0xd8, 0xc9, 0xaa, 0x07, 0x7c, 0x2c, 0x78, 0x32, + 0xbb, 0x9e, 0x8f, 0xaf, 0x81, 0x93, 0xd9, 0xdc, 0x45, 0x4b, 0x7a, 0x1f, 0xa5, 0xf4, 0x36, 0x5a, 0xd3, 0x65, 0x74, + 0xa9, 0x4d, 0x8c, 0x93, 0x06, 0xce, 0x01, 0x68, 0x15, 0x40, 0xe2, 0xc9, 0x5f, 0xef, 0x79, 0x52, 0x87, 0x4b, 0x9a, + 0x82, 0xdb, 0xb0, 0x6b, 0x9f, 0x79, 0xed, 0x4a, 0xa4, 0x36, 0x88, 0xb1, 0x66, 0x0c, 0x15, 0x37, 0xce, 0xba, 0x8f, + 0xaa, 0x06, 0x76, 0xae, 0x8d, 0x4d, 0x54, 0x0f, 0x27, 0xd3, 0x02, 0x10, 0x5b, 0x8b, 0xe1, 0xd0, 0x1e, 0x21, 0xbb, + 0xc7, 0x8f, 0x0a, 0xf4, 0xdc, 0x13, 0x06, 0xdb, 0xb6, 0xe5, 0x0f, 0x0c, 0x61, 0x4a, 0x3f, 0x7d, 0xe4, 0x17, 0x84, + 0x4c, 0xaf, 0xe0, 0x6c, 0x04, 0xea, 0x68, 0x84, 0x4e, 0xbf, 0xd5, 0x61, 0xa9, 0x0e, 0xf0, 0xcd, 0x5d, 0x94, 0xd0, + 0xfb, 0x28, 0x77, 0xc8, 0xda, 0xb2, 0x61, 0x62, 0x7a, 0x9e, 0x85, 0xbc, 0x7d, 0xa0, 0x17, 0x0b, 0x00, 0xd1, 0x1a, + 0xc4, 0xae, 0xd4, 0xf5, 0x08, 0x9c, 0x86, 0xd0, 0x24, 0x34, 0x82, 0xab, 0x0a, 0xc2, 0x08, 0xd8, 0x92, 0xf0, 0x37, + 0x98, 0xa8, 0xc0, 0x17, 0xe0, 0x22, 0x93, 0xa6, 0x39, 0x0f, 0x1a, 0x77, 0x24, 0xcf, 0xca, 0xb6, 0xb7, 0x2b, 0x8c, + 0x26, 0x18, 0x7b, 0xa2, 0x7d, 0x1e, 0x29, 0x46, 0x71, 0x99, 0x84, 0xd9, 0xe8, 0x4e, 0x9e, 0xe7, 0x34, 0x1b, 0xdd, + 0xab, 0x5f, 0x35, 0x1d, 0xd3, 0xef, 0x54, 0x40, 0x1b, 0x29, 0x7d, 0xeb, 0x38, 0x1b, 0xd0, 0x7a, 0xb1, 0xd0, 0xfe, + 0xd7, 0x62, 0x74, 0x47, 0xc5, 0xe8, 0xde, 0xb5, 0xa4, 0x9a, 0x4c, 0xcb, 0xe3, 0x0a, 0x0d, 0xa9, 0x3a, 0xbf, 0x2f, + 0x81, 0x9f, 0x2b, 0xb4, 0xef, 0xb4, 0xfe, 0xde, 0x69, 0xff, 0x45, 0x27, 0x4f, 0x20, 0x59, 0xa2, 0x92, 0xd5, 0x23, + 0xb0, 0x63, 0x5f, 0xe7, 0x71, 0xa9, 0x47, 0x29, 0xa6, 0xc6, 0xa4, 0x1f, 0x03, 0x57, 0x4c, 0x7b, 0x25, 0xb8, 0x5a, + 0x6e, 0xb7, 0x32, 0x86, 0x26, 0xec, 0xd9, 0x31, 0x44, 0x3d, 0xd7, 0x8e, 0x51, 0xc2, 0x73, 0x0f, 0x88, 0x95, 0xcc, + 0x5b, 0xba, 0x04, 0x24, 0xf0, 0xd6, 0xc1, 0xa4, 0x28, 0x46, 0x29, 0xc0, 0x4f, 0xa8, 0x3c, 0x0e, 0xfa, 0x84, 0x7c, + 0xa1, 0x50, 0x27, 0x84, 0xb7, 0x25, 0x70, 0xfc, 0x61, 0x7d, 0x54, 0x08, 0x5e, 0xe5, 0xb8, 0xfe, 0x0a, 0xe3, 0xfa, + 0x4b, 0x85, 0xe3, 0x8e, 0x65, 0xbb, 0x7e, 0xde, 0xa6, 0x46, 0x2f, 0xc1, 0xc2, 0x77, 0x23, 0xcd, 0x23, 0xb9, 0x41, + 0x48, 0x95, 0x60, 0xa5, 0x76, 0x21, 0xc1, 0xfc, 0x4b, 0x39, 0x5b, 0x9d, 0xb9, 0xea, 0x91, 0x07, 0xe5, 0x6c, 0x6a, + 0xfa, 0x3d, 0x09, 0xda, 0x7d, 0x47, 0x9a, 0xc3, 0x5b, 0x74, 0xf8, 0xec, 0x1a, 0x4b, 0xcc, 0x9d, 0x44, 0xc9, 0xf3, + 0x49, 0x60, 0xab, 0xe7, 0xd9, 0xb5, 0xf4, 0xb1, 0xda, 0xc5, 0xf1, 0xd3, 0xe7, 0x4f, 0x5c, 0x87, 0x69, 0xe5, 0x29, + 0x41, 0xc0, 0x9b, 0x43, 0xdb, 0x15, 0xca, 0x80, 0x86, 0xfa, 0x06, 0x8e, 0x73, 0x35, 0xac, 0x15, 0x01, 0x53, 0x52, + 0x1e, 0x15, 0xe0, 0x50, 0xe7, 0x91, 0xbb, 0x69, 0x58, 0x6b, 0xba, 0xe6, 0xf5, 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, + 0x3f, 0x3c, 0x1a, 0xd4, 0xf8, 0x93, 0xf8, 0xa3, 0xd1, 0xce, 0x0d, 0x77, 0x9a, 0x0a, 0x33, 0xd7, 0x62, 0x45, 0x76, + 0x47, 0xc9, 0xc9, 0xef, 0xe8, 0x85, 0xb1, 0x3f, 0xff, 0xb9, 0x98, 0x70, 0xd2, 0x12, 0x13, 0xa2, 0xa5, 0x83, 0x12, + 0x1d, 0xec, 0x28, 0xaf, 0xcc, 0x4b, 0xbc, 0x74, 0x8e, 0xff, 0x7d, 0x3d, 0xd6, 0xae, 0x02, 0xa1, 0xd5, 0xc9, 0xc3, + 0xf6, 0x64, 0x81, 0xa8, 0x01, 0xd5, 0xec, 0xb2, 0x1c, 0x69, 0xda, 0x59, 0x93, 0x8d, 0x27, 0x73, 0xdd, 0xcd, 0xe2, + 0xd9, 0x4c, 0x76, 0x2c, 0x2c, 0x3d, 0x0c, 0xc6, 0x4e, 0x15, 0x7d, 0x0e, 0x5a, 0x7e, 0x04, 0xcf, 0x7d, 0xe5, 0x99, + 0xcb, 0x66, 0x69, 0xf1, 0x02, 0x9d, 0x73, 0xaa, 0x21, 0x87, 0x1c, 0x80, 0xe3, 0x02, 0x8d, 0x25, 0x8a, 0x28, 0x08, + 0x1a, 0x13, 0x84, 0x5d, 0x95, 0xee, 0x48, 0x9f, 0x76, 0xf1, 0x69, 0x2b, 0xf4, 0x3d, 0xde, 0x67, 0x20, 0x31, 0x75, + 0x24, 0x0f, 0xb5, 0xd7, 0x1c, 0x95, 0x3c, 0x8b, 0x53, 0x85, 0xcf, 0x2f, 0x65, 0x67, 0xfe, 0xdd, 0x6a, 0x4c, 0xf1, + 0x1f, 0x69, 0xda, 0x77, 0x2e, 0x4d, 0x13, 0xdd, 0xb5, 0x3c, 0x68, 0x29, 0x2c, 0x38, 0x6e, 0x1b, 0x77, 0xfd, 0xfa, + 0x39, 0xaa, 0x61, 0x61, 0x73, 0x38, 0x13, 0x3a, 0xb4, 0x77, 0x95, 0x9d, 0xb9, 0x3e, 0xa2, 0x56, 0x5d, 0xac, 0xda, + 0x80, 0x92, 0x25, 0xe7, 0xd6, 0xe9, 0x88, 0x95, 0xbe, 0x3b, 0x0c, 0x77, 0xe6, 0x51, 0xb1, 0xbb, 0xdb, 0xed, 0x84, + 0xb4, 0xed, 0x83, 0xf1, 0xbe, 0x84, 0x85, 0x58, 0xef, 0xb0, 0x83, 0xef, 0xc3, 0xfa, 0x31, 0x1f, 0xfc, 0x1c, 0xca, + 0x75, 0x55, 0x3f, 0xcf, 0xa4, 0xa1, 0xcf, 0xcb, 0x52, 0x5c, 0xcb, 0x4e, 0xb9, 0x42, 0xb7, 0x96, 0xa9, 0xf7, 0x9b, + 0xf8, 0x4d, 0x2b, 0x40, 0x8c, 0xd3, 0x15, 0x23, 0xc5, 0x1b, 0x1a, 0x61, 0x9c, 0x87, 0xdb, 0x64, 0x51, 0x4b, 0x95, + 0x40, 0xd4, 0xe6, 0x27, 0x8f, 0x79, 0xa4, 0xd5, 0x99, 0xf0, 0xdd, 0x63, 0xee, 0x4a, 0xd7, 0x76, 0x9b, 0xf8, 0xa9, + 0xa6, 0x1d, 0xee, 0x0e, 0x74, 0x47, 0xeb, 0x1e, 0x6e, 0x9e, 0xc9, 0xcf, 0x23, 0xfd, 0xc5, 0x00, 0x9b, 0xb5, 0xcb, + 0xb8, 0xec, 0x18, 0xee, 0x3b, 0xd3, 0x83, 0xb1, 0x80, 0x40, 0x62, 0x86, 0x5e, 0x06, 0x36, 0x70, 0x81, 0xbd, 0xc2, + 0x80, 0x21, 0xae, 0x6e, 0xc9, 0xb9, 0xb2, 0xb2, 0x75, 0x91, 0xb7, 0x51, 0x21, 0xd8, 0x34, 0x1d, 0x37, 0x49, 0x0e, + 0xc1, 0x09, 0x5b, 0xee, 0x7d, 0xed, 0xb5, 0x33, 0xfc, 0xc7, 0xa0, 0xb2, 0x6e, 0x89, 0x8e, 0x51, 0xdb, 0x63, 0xa5, + 0xee, 0xd5, 0xbc, 0xca, 0x7d, 0xe4, 0x58, 0xbf, 0xe9, 0x97, 0x9a, 0x7d, 0xc1, 0x6b, 0x29, 0x38, 0x34, 0xb6, 0x5b, + 0x61, 0x17, 0x8b, 0x73, 0xb4, 0x1a, 0x59, 0x6b, 0xab, 0xbd, 0x46, 0x2a, 0xba, 0x7f, 0xcd, 0x71, 0x62, 0x2d, 0x85, + 0xcd, 0x87, 0x0f, 0x17, 0x6c, 0x9b, 0x00, 0x06, 0x2d, 0x3a, 0x0b, 0x94, 0x20, 0x93, 0x95, 0xaa, 0xdd, 0x4c, 0x89, + 0x5b, 0xee, 0x67, 0x5d, 0x66, 0x3b, 0x8f, 0x5f, 0x3b, 0x69, 0x9f, 0xf8, 0x1c, 0xfd, 0x30, 0xbf, 0x33, 0x4e, 0x4a, + 0xd6, 0x30, 0xae, 0xe5, 0xff, 0x57, 0xd3, 0xab, 0x32, 0x4b, 0xa3, 0x8d, 0xe6, 0xc1, 0x4c, 0xa8, 0x4d, 0x17, 0x1a, + 0xa3, 0xb6, 0xcb, 0x46, 0x12, 0xd1, 0xfa, 0x0e, 0x04, 0x33, 0x92, 0xfb, 0xaa, 0xda, 0xbc, 0x52, 0x6d, 0xe0, 0x1d, + 0x3e, 0xb1, 0xd1, 0x3d, 0xdb, 0x13, 0x42, 0xf9, 0xee, 0x69, 0xa1, 0x57, 0x2d, 0xad, 0x3c, 0xb6, 0xab, 0x72, 0x2e, + 0x46, 0xb5, 0x7a, 0xc2, 0x64, 0xc3, 0x82, 0xc9, 0xfe, 0x7f, 0x5f, 0x66, 0x69, 0x9b, 0xa2, 0x03, 0xd3, 0xe9, 0xfb, + 0x74, 0xd2, 0x0d, 0xae, 0x33, 0x60, 0x11, 0xc1, 0x96, 0x0a, 0xc7, 0xa3, 0x50, 0x6e, 0x90, 0x30, 0x11, 0x5c, 0x47, + 0xbd, 0xec, 0x68, 0x99, 0x94, 0x55, 0x01, 0xcf, 0x2f, 0x5d, 0x65, 0x3a, 0x8e, 0x86, 0x7e, 0xff, 0x3a, 0xd5, 0xa1, + 0x5f, 0x69, 0xe1, 0x9c, 0x23, 0xcb, 0xcc, 0x51, 0x75, 0xc8, 0x30, 0x46, 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x86, + 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x8c, 0x81, 0x5c, 0x2a, 0x83, 0x7a, 0x45, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, + 0x42, 0x2f, 0x59, 0xe1, 0xde, 0x85, 0xd6, 0x20, 0x50, 0x14, 0x7e, 0xca, 0xf4, 0x42, 0xb5, 0xf3, 0x92, 0x26, 0xb4, + 0xa4, 0x2b, 0xd2, 0x80, 0xbe, 0xd7, 0xca, 0xd9, 0xd1, 0xc9, 0x4e, 0xcf, 0x7a, 0xcc, 0xca, 0xe1, 0x64, 0x1a, 0xc3, + 0x35, 0x2d, 0xb6, 0xd7, 0xb4, 0xa5, 0x7f, 0xe3, 0xf2, 0x36, 0x8e, 0x47, 0xbb, 0x40, 0xda, 0xa6, 0xb8, 0xfd, 0xd4, + 0xe1, 0xf6, 0xd7, 0x0d, 0x5b, 0x4e, 0x7b, 0xeb, 0xed, 0xb6, 0x97, 0x82, 0x8d, 0xa8, 0xc3, 0xc7, 0xaf, 0xa5, 0x74, + 0xdd, 0x70, 0xf9, 0x29, 0x3c, 0x3b, 0x7c, 0xfd, 0xd2, 0x05, 0x97, 0xa3, 0x75, 0x9b, 0xbb, 0x5f, 0xee, 0x22, 0xcb, + 0x7d, 0xd6, 0xd0, 0x72, 0x35, 0x43, 0x3e, 0x79, 0xd6, 0xda, 0x3b, 0xd4, 0x82, 0xe5, 0xac, 0x9b, 0xf0, 0xc4, 0x60, + 0xc7, 0x5e, 0x7b, 0x9b, 0xa3, 0xd6, 0x97, 0x2c, 0x8f, 0x04, 0xba, 0x24, 0x4f, 0x37, 0xfd, 0x83, 0x08, 0xf3, 0xd1, + 0x1d, 0xcd, 0x01, 0x57, 0xac, 0x36, 0x97, 0x0c, 0xd2, 0xd4, 0xed, 0x25, 0x2e, 0x7d, 0x85, 0x43, 0xb2, 0xc1, 0x27, + 0xcd, 0x54, 0x7d, 0x72, 0xc9, 0x83, 0xff, 0xb7, 0x51, 0xab, 0xf4, 0xec, 0x24, 0x7b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, + 0x4c, 0x34, 0x12, 0xf0, 0xd4, 0x2c, 0x86, 0x7a, 0x54, 0x97, 0x71, 0x51, 0xe5, 0x3a, 0xe6, 0xd8, 0xde, 0xae, 0xa1, + 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xfa, 0x0e, 0x6c, 0x04, 0x3a, 0x2a, 0x51, 0x5f, 0x86, 0x99, 0xbe, 0x0c, 0xd3, + 0xae, 0xad, 0x02, 0xc3, 0x2b, 0xb7, 0x4a, 0x22, 0x5d, 0x8d, 0x7a, 0x5c, 0xcf, 0x92, 0xdf, 0x8b, 0xbc, 0x7b, 0x4d, + 0x3a, 0x12, 0x7f, 0xba, 0x74, 0xe4, 0xf5, 0x30, 0x20, 0xe2, 0x73, 0x96, 0x86, 0x6d, 0x14, 0x04, 0xa7, 0x96, 0x3b, + 0x90, 0xe6, 0x23, 0x40, 0xe6, 0xc7, 0x69, 0xf8, 0x4e, 0x89, 0x73, 0xc8, 0x46, 0x6a, 0x9c, 0xd8, 0x52, 0xab, 0x87, + 0xe0, 0xce, 0x7b, 0xcd, 0x63, 0x08, 0x7c, 0xf8, 0x01, 0x37, 0x83, 0x8c, 0x6e, 0x4b, 0x74, 0x94, 0x36, 0x87, 0xba, + 0xe5, 0x23, 0x4f, 0xa8, 0x64, 0x64, 0x78, 0x31, 0xb4, 0x77, 0x47, 0x60, 0x54, 0x5b, 0x81, 0xcc, 0xb0, 0x3c, 0x3c, + 0x1a, 0xa6, 0x52, 0x50, 0x34, 0x14, 0xc3, 0x25, 0xca, 0x01, 0x31, 0x09, 0x04, 0x46, 0xe5, 0x20, 0x55, 0x95, 0xc9, + 0x17, 0x83, 0x54, 0xdd, 0xaa, 0x48, 0x73, 0x9e, 0x85, 0x35, 0x55, 0x2d, 0xa2, 0x63, 0x3a, 0x14, 0x74, 0xa9, 0x77, + 0x6a, 0xae, 0xa4, 0x17, 0x72, 0x39, 0x3e, 0x53, 0x69, 0x30, 0x8a, 0x67, 0x36, 0x45, 0xbd, 0x95, 0xfb, 0xd9, 0x7d, + 0x8b, 0x29, 0x0d, 0x62, 0x53, 0x3b, 0x8b, 0x18, 0x56, 0xed, 0x87, 0xac, 0xce, 0x41, 0xbb, 0x0b, 0xca, 0xc6, 0x5a, + 0x3b, 0xcf, 0x7b, 0xc1, 0xcc, 0x41, 0xdb, 0x58, 0xfb, 0x3e, 0xf4, 0x5a, 0x8c, 0xda, 0x1b, 0x53, 0x85, 0x7b, 0x02, + 0x3f, 0x4d, 0xd0, 0x74, 0x27, 0xf2, 0x1c, 0x75, 0xc8, 0xbb, 0xfb, 0x99, 0x25, 0x3b, 0x93, 0x4f, 0x62, 0x99, 0x34, + 0xed, 0x63, 0x12, 0xa3, 0x96, 0x18, 0x46, 0x17, 0x6e, 0x64, 0x52, 0xfb, 0xb9, 0x33, 0xfd, 0x88, 0x67, 0xf2, 0xb0, + 0x1d, 0x1a, 0x75, 0xa5, 0x61, 0x2d, 0x29, 0xa2, 0xba, 0xa0, 0xb7, 0xa6, 0x3a, 0x3a, 0xa2, 0x4e, 0x47, 0x60, 0x75, + 0x45, 0x1b, 0xd4, 0x00, 0x4c, 0xc6, 0x8d, 0xa9, 0xcd, 0xe5, 0x60, 0x1a, 0xa3, 0x2a, 0x78, 0x4a, 0x77, 0x85, 0xd2, + 0xbd, 0x49, 0xd3, 0xb4, 0x86, 0xd8, 0x00, 0x06, 0x04, 0x76, 0xf4, 0xe4, 0xf4, 0x07, 0x3e, 0x2a, 0x00, 0x0d, 0xbc, + 0xdb, 0x99, 0xca, 0x91, 0xa8, 0x77, 0x72, 0xd3, 0xfa, 0xa9, 0x4e, 0x55, 0x2e, 0x80, 0x8a, 0x3b, 0x4b, 0xe7, 0x97, + 0x7a, 0xc4, 0x02, 0x18, 0xf7, 0xc0, 0x9a, 0xea, 0x9d, 0x66, 0x60, 0x3d, 0x91, 0xe7, 0x59, 0xc5, 0x13, 0x51, 0xc0, + 0x8c, 0x88, 0xeb, 0x6b, 0x51, 0xc0, 0x30, 0xc8, 0x01, 0x40, 0x8b, 0xe6, 0x2a, 0x9a, 0xf0, 0xaf, 0x1a, 0xba, 0x2f, + 0x0f, 0xff, 0x4a, 0xe5, 0xfa, 0x7a, 0xdc, 0x80, 0xa1, 0xf2, 0xba, 0xe6, 0x3b, 0x99, 0xbe, 0xe6, 0x4f, 0x9c, 0x4c, + 0x4b, 0xb1, 0x2e, 0x77, 0xb2, 0x7c, 0xf5, 0x35, 0x7f, 0xaa, 0xf2, 0x1c, 0x3d, 0x69, 0x68, 0x1a, 0xdf, 0xef, 0x64, + 0xf9, 0xe6, 0xeb, 0x27, 0x26, 0xcf, 0x57, 0xe3, 0x86, 0xde, 0x72, 0xfe, 0xd1, 0x66, 0x9a, 0xa8, 0xaa, 0xc6, 0x4f, + 0xbe, 0x31, 0xb9, 0x9e, 0x34, 0xf4, 0x5a, 0x14, 0xf5, 0x72, 0xa7, 0xa8, 0xa3, 0xaf, 0x8f, 0xbe, 0xe1, 0x5f, 0xeb, + 0xee, 0x1d, 0x35, 0xf4, 0xcf, 0x75, 0x5c, 0xd6, 0xbc, 0xdc, 0x29, 0xee, 0x6f, 0xdf, 0x7c, 0xf3, 0xc4, 0x64, 0x7c, + 0xd2, 0xd0, 0x7b, 0x1e, 0x77, 0xb4, 0x7d, 0xf2, 0xf4, 0x09, 0xff, 0x5b, 0xd3, 0xd0, 0x5f, 0x98, 0x1b, 0x1c, 0xf5, + 0x34, 0x73, 0xf4, 0xf0, 0x89, 0xf0, 0x51, 0x03, 0x86, 0x0e, 0x1a, 0x40, 0x2e, 0x8c, 0x9a, 0x66, 0x8f, 0x57, 0x2e, + 0xb8, 0x7d, 0x9f, 0xc7, 0x69, 0xbc, 0x82, 0x83, 0x60, 0x83, 0xc6, 0x59, 0x25, 0x70, 0xaa, 0xc0, 0x7b, 0x46, 0x05, + 0xcd, 0x2a, 0xf1, 0x0f, 0xce, 0x3f, 0xc2, 0xa0, 0x21, 0xa4, 0x8d, 0x8c, 0x0c, 0xf4, 0x76, 0xa5, 0x22, 0x1b, 0xa1, + 0xff, 0xa6, 0x1f, 0x07, 0xc7, 0x85, 0xd1, 0xeb, 0xf7, 0xc3, 0x92, 0x55, 0x61, 0x49, 0x08, 0xfd, 0x23, 0x2c, 0xc1, + 0xa1, 0xa4, 0x64, 0x4e, 0x3e, 0xed, 0x7b, 0xae, 0x8c, 0xc2, 0x42, 0x10, 0xdd, 0x45, 0xe6, 0x01, 0x55, 0x8f, 0xae, + 0x43, 0x37, 0xc4, 0xcb, 0x0a, 0x4b, 0x86, 0x0e, 0x66, 0x30, 0x43, 0x50, 0xfc, 0x6b, 0x1e, 0x0a, 0xf0, 0x89, 0x07, + 0xf8, 0xe8, 0x31, 0x99, 0x71, 0x79, 0xad, 0x7d, 0x7b, 0x19, 0x96, 0x34, 0x50, 0x6d, 0x87, 0xa0, 0x03, 0x91, 0xfb, + 0x02, 0x3c, 0x05, 0x06, 0x2e, 0x2c, 0xec, 0x52, 0xec, 0xfa, 0xab, 0xff, 0xa2, 0x59, 0x47, 0x1b, 0x7e, 0xf4, 0x17, + 0xe3, 0xc2, 0x9e, 0x91, 0xa9, 0x38, 0x2e, 0x86, 0x93, 0xe9, 0x60, 0x20, 0x6c, 0x1c, 0xb7, 0xd3, 0x6c, 0xfe, 0xcb, + 0x5c, 0x2c, 0x16, 0xa8, 0xfb, 0xc6, 0x79, 0x9d, 0xa9, 0xbf, 0x91, 0x72, 0x3e, 0x78, 0x7d, 0xfa, 0xdb, 0xf9, 0xd9, + 0xe9, 0x4b, 0x70, 0x3e, 0xf8, 0xf0, 0xe2, 0xfb, 0x17, 0xef, 0x65, 0x70, 0x77, 0x39, 0xe7, 0xfd, 0xbe, 0x95, 0xfa, + 0x84, 0x7c, 0x58, 0x93, 0xc3, 0x30, 0x7e, 0x5c, 0x4a, 0xa3, 0x07, 0x72, 0xcc, 0x0c, 0x14, 0x32, 0x54, 0xd1, 0x98, + 0xdf, 0xc5, 0x70, 0xe2, 0x80, 0x59, 0xdc, 0x7b, 0x22, 0x5c, 0xb7, 0xe5, 0x26, 0xc8, 0x9a, 0x38, 0x71, 0xfa, 0xc1, + 0xc9, 0x54, 0x58, 0xb6, 0xb0, 0x64, 0x50, 0x36, 0xb4, 0xe9, 0x34, 0x9b, 0x97, 0x0b, 0xd3, 0x2e, 0xbb, 0x40, 0x46, + 0x69, 0x76, 0x79, 0x19, 0x4a, 0xe8, 0xea, 0x13, 0xd0, 0x00, 0xe8, 0x46, 0x95, 0xb6, 0x45, 0x7c, 0xe6, 0x96, 0x1f, + 0x8d, 0x9d, 0xe6, 0xdd, 0xa1, 0xee, 0x49, 0x37, 0xab, 0xf6, 0x06, 0x74, 0x30, 0xa1, 0xdc, 0x0e, 0xba, 0x0e, 0x26, + 0x23, 0xdb, 0xf2, 0xcb, 0xbc, 0x5e, 0xe8, 0xe6, 0xd8, 0x61, 0xa8, 0x9d, 0x92, 0xd7, 0xc2, 0x43, 0x64, 0x20, 0x19, + 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0xfd, 0x60, 0xd7, 0x3b, 0x7e, 0x93, 0x0b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x51, + 0x25, 0x9d, 0xcb, 0x05, 0xe3, 0xf3, 0x6a, 0x71, 0x02, 0x6e, 0xe7, 0xf3, 0x6a, 0x11, 0x61, 0x50, 0xbe, 0x0c, 0x62, + 0x95, 0x80, 0xdd, 0x8b, 0x85, 0xf0, 0xed, 0x84, 0x36, 0x30, 0x1b, 0x48, 0xb0, 0x41, 0x61, 0x56, 0x1a, 0xa2, 0xdc, + 0x49, 0x8f, 0x36, 0x88, 0x3c, 0xc4, 0xea, 0x79, 0xdd, 0xf6, 0x64, 0xd3, 0x17, 0x13, 0x5c, 0x65, 0x31, 0x13, 0xd3, + 0xf8, 0x98, 0x95, 0xd3, 0x18, 0x4a, 0x89, 0xd3, 0x34, 0x8c, 0xe9, 0x84, 0x56, 0x84, 0x24, 0x8c, 0xcf, 0xe3, 0x05, + 0x4d, 0x50, 0x4a, 0x10, 0x42, 0xc8, 0x8f, 0x11, 0xda, 0xe6, 0xc0, 0x92, 0x37, 0xdb, 0xcf, 0xd1, 0xcf, 0xed, 0x18, + 0x2e, 0xa3, 0x22, 0x74, 0x83, 0xce, 0x1a, 0xee, 0x8d, 0xa8, 0xa4, 0x31, 0x56, 0x0c, 0x41, 0xc0, 0x4b, 0x8c, 0x4a, + 0x58, 0x92, 0x98, 0xd5, 0x10, 0x45, 0xa0, 0x98, 0xc7, 0x0b, 0x56, 0x52, 0xdf, 0xe6, 0x34, 0x56, 0x26, 0x41, 0x3d, + 0x8b, 0xa5, 0x76, 0x20, 0xa4, 0x0a, 0xb1, 0xc7, 0x67, 0x55, 0x74, 0xa3, 0x0c, 0x0d, 0x00, 0x05, 0x4a, 0xca, 0xc5, + 0x6f, 0x3f, 0xdf, 0xc3, 0x4d, 0x42, 0xff, 0xb3, 0x8d, 0x8e, 0x76, 0x96, 0xcb, 0x43, 0x6f, 0xbe, 0xa0, 0x71, 0x9e, + 0x43, 0x28, 0x36, 0x8d, 0x40, 0x5e, 0x64, 0x35, 0x44, 0xb4, 0xb8, 0x0f, 0x74, 0x48, 0x38, 0x68, 0xd3, 0x2f, 0x90, + 0xea, 0x89, 0xc9, 0xa5, 0x27, 0x06, 0xc6, 0xed, 0x90, 0x09, 0x05, 0x1c, 0xe9, 0x79, 0xf6, 0x97, 0x8f, 0xb1, 0xa6, + 0xa8, 0x99, 0x8e, 0xb7, 0x21, 0x11, 0x0d, 0x5a, 0x10, 0xcd, 0xe0, 0xfd, 0x73, 0xcd, 0xf1, 0xaa, 0x03, 0x3f, 0xe0, + 0x9d, 0x8d, 0x33, 0x2f, 0x67, 0x1e, 0x91, 0x53, 0x1f, 0xe5, 0x88, 0x7e, 0xc9, 0xc3, 0x7a, 0xa4, 0x92, 0x31, 0x56, + 0x12, 0x07, 0xbd, 0x0d, 0x16, 0xcc, 0x09, 0x5d, 0xf1, 0xd0, 0xf0, 0xf1, 0x2f, 0x91, 0xc9, 0xa8, 0x68, 0xa1, 0xd8, + 0x8d, 0xca, 0x60, 0xc4, 0x39, 0x0d, 0x33, 0x34, 0x59, 0xd2, 0xc5, 0x52, 0x91, 0xe6, 0x4a, 0x9a, 0x06, 0xb8, 0x04, + 0x1a, 0x3c, 0x1f, 0xf4, 0x43, 0x43, 0x3d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, 0xfb, 0xd0, 0xe1, 0xff, 0xe7, 0xd8, + 0x05, 0x22, 0xed, 0xcd, 0x75, 0x64, 0x3c, 0xd2, 0x78, 0x38, 0x28, 0xda, 0xc7, 0xde, 0x4f, 0xfc, 0xcc, 0x19, 0x7d, + 0x48, 0x2a, 0xdf, 0xe1, 0x83, 0xe5, 0x8e, 0x37, 0xd5, 0xb3, 0x32, 0x82, 0xf5, 0xb0, 0xdd, 0xe2, 0x82, 0x68, 0xbb, + 0x00, 0x52, 0xc7, 0x78, 0xb5, 0x74, 0x8d, 0x57, 0xe3, 0x3d, 0xc6, 0xab, 0xf6, 0x4c, 0x0d, 0x73, 0xb2, 0x41, 0x7d, + 0x96, 0x94, 0xe7, 0xe7, 0x28, 0x13, 0xf4, 0x5d, 0xce, 0x0a, 0x2a, 0x53, 0x09, 0xed, 0xc5, 0x6e, 0xc6, 0xf8, 0x8e, + 0x60, 0x9c, 0x15, 0x8b, 0x91, 0x40, 0x65, 0x2a, 0x69, 0xc2, 0x5e, 0x09, 0xea, 0x31, 0x78, 0xaf, 0x31, 0x44, 0xb5, + 0x8c, 0x5d, 0xb7, 0x81, 0xd0, 0x50, 0x5b, 0x8f, 0xf6, 0x8c, 0xf5, 0xe8, 0x76, 0x5b, 0x6b, 0x7f, 0x3b, 0xb1, 0x2e, + 0x13, 0x44, 0x15, 0x96, 0xa3, 0x09, 0xf0, 0xa6, 0x89, 0xb9, 0x2d, 0x59, 0xa5, 0x05, 0x86, 0xcf, 0xfe, 0x23, 0x2c, + 0xac, 0x4a, 0xa2, 0x20, 0xb3, 0x22, 0x1a, 0xd8, 0x73, 0xf0, 0x79, 0x5c, 0xc3, 0x1a, 0x80, 0x48, 0x8e, 0xe8, 0xe1, + 0xfa, 0x47, 0x28, 0x6c, 0x66, 0x41, 0x66, 0x02, 0x32, 0xf3, 0x22, 0x6d, 0x67, 0x1d, 0x4c, 0xac, 0x49, 0xad, 0x33, + 0x16, 0x62, 0xa8, 0x91, 0x1f, 0x40, 0x19, 0x62, 0xf1, 0xc9, 0x07, 0x13, 0x2a, 0x64, 0x28, 0x55, 0xaf, 0x9b, 0xdd, + 0xc0, 0x2b, 0x1f, 0xb2, 0x6b, 0x5e, 0xd5, 0xf1, 0xf5, 0x4a, 0x5b, 0x12, 0x73, 0xb6, 0xcf, 0x6d, 0x8f, 0x56, 0xfa, + 0xd5, 0x9b, 0x17, 0xdf, 0x9f, 0x7a, 0xaf, 0x76, 0x11, 0x47, 0x43, 0xb0, 0xad, 0x18, 0x63, 0xf4, 0x16, 0x97, 0x06, + 0x13, 0xe9, 0x1a, 0x81, 0xde, 0xa5, 0xa0, 0xdf, 0xfe, 0x5c, 0x4f, 0xc0, 0x6b, 0xae, 0x96, 0x5f, 0xf2, 0x11, 0xb0, + 0x44, 0xf5, 0xac, 0x30, 0x3b, 0x2b, 0xb3, 0xbd, 0xdd, 0x8a, 0xf4, 0xb4, 0x4b, 0x8d, 0x0c, 0xc4, 0xab, 0xed, 0x30, + 0x16, 0x2e, 0x6c, 0xd3, 0xcd, 0x60, 0xd7, 0x4b, 0xc7, 0x12, 0x79, 0xbb, 0x2d, 0xa0, 0x43, 0x66, 0xc0, 0x9d, 0x97, + 0xf1, 0x1d, 0xbc, 0x2c, 0x9c, 0x6e, 0xfa, 0xc1, 0x13, 0xc0, 0x4c, 0xb8, 0xb4, 0x96, 0xc5, 0x31, 0xe3, 0x09, 0xcc, + 0x1f, 0x2d, 0x7d, 0x91, 0xb7, 0x24, 0xb4, 0x7a, 0x7f, 0x85, 0xd5, 0x08, 0xec, 0x4e, 0xce, 0x3e, 0x66, 0xab, 0xd9, + 0x12, 0x50, 0xf3, 0xaf, 0xb3, 0x02, 0x68, 0xae, 0x59, 0x0b, 0xa6, 0x29, 0xd4, 0x5f, 0xd7, 0xcf, 0xe2, 0x55, 0x9c, + 0x80, 0xea, 0x06, 0xbc, 0x45, 0xee, 0x95, 0xe8, 0x4a, 0xa3, 0x8b, 0xd2, 0x07, 0xca, 0x31, 0xa4, 0xd0, 0xd2, 0xf7, + 0x5e, 0x25, 0xcf, 0x3d, 0x0d, 0xb8, 0xa4, 0x50, 0xf3, 0x64, 0x4b, 0x19, 0x0b, 0x80, 0x85, 0x0e, 0x66, 0x92, 0x6c, + 0x45, 0x77, 0x1a, 0x93, 0x02, 0xde, 0x6a, 0xe0, 0x8f, 0x22, 0xab, 0xe5, 0x5d, 0xb1, 0x0a, 0x0b, 0xc7, 0xfe, 0xba, + 0xdf, 0x8f, 0x1d, 0xfb, 0xeb, 0x4b, 0x45, 0xeb, 0xe2, 0x76, 0x03, 0x48, 0x83, 0x01, 0x44, 0x4e, 0xd5, 0x40, 0xe8, + 0x88, 0x62, 0xbe, 0xef, 0xdf, 0xa9, 0xce, 0x22, 0x41, 0xe8, 0x77, 0xea, 0x75, 0xa4, 0x24, 0xa0, 0x53, 0xab, 0xd9, + 0xc9, 0x40, 0x99, 0x7d, 0x40, 0x40, 0x54, 0x37, 0x23, 0x9b, 0x2f, 0xa4, 0x73, 0xb1, 0x0c, 0x1f, 0x3e, 0xa6, 0x10, + 0x50, 0xb8, 0xa3, 0x46, 0xeb, 0x6d, 0x88, 0x04, 0xca, 0x08, 0x45, 0x8c, 0x79, 0xb1, 0x92, 0x84, 0xcc, 0xc7, 0x0b, + 0x14, 0x5c, 0x59, 0x60, 0x57, 0xce, 0x26, 0xc3, 0x22, 0xe2, 0x2c, 0xdc, 0xff, 0xcd, 0x64, 0x41, 0x50, 0x73, 0xe5, + 0x06, 0x72, 0xdc, 0xc9, 0xe4, 0xed, 0x29, 0xaf, 0x86, 0x8a, 0x89, 0x08, 0x02, 0xc3, 0x0d, 0x3f, 0xe3, 0xe3, 0xa3, + 0x05, 0x01, 0x15, 0x99, 0x31, 0x0b, 0xd1, 0x2f, 0x8e, 0xbf, 0x02, 0xd4, 0x98, 0xd1, 0xd1, 0x53, 0x00, 0x85, 0x85, + 0x80, 0xe8, 0x63, 0x90, 0xd1, 0x56, 0xf0, 0xbb, 0x92, 0xbf, 0x5b, 0x27, 0xbe, 0x0b, 0xfd, 0x5a, 0xd1, 0xcb, 0x18, + 0x18, 0x8e, 0x68, 0x72, 0x18, 0xf2, 0xc1, 0x64, 0x00, 0xda, 0x12, 0x67, 0xf7, 0xb5, 0xb4, 0xe2, 0xfa, 0x74, 0xe9, + 0x74, 0xff, 0xa4, 0x3e, 0x48, 0x22, 0x15, 0xac, 0x90, 0xc4, 0x00, 0x42, 0x59, 0xca, 0x6d, 0xb2, 0x04, 0xcb, 0x0a, + 0xbd, 0xa4, 0xb9, 0x46, 0x49, 0xdc, 0xdd, 0x0c, 0x1c, 0xa3, 0x66, 0x9d, 0x86, 0x45, 0xcb, 0x8d, 0x1a, 0xe0, 0x73, + 0x12, 0x56, 0x9a, 0x1b, 0xce, 0x4c, 0x38, 0x67, 0x3a, 0x5c, 0x1d, 0x73, 0xf6, 0x9a, 0x23, 0x18, 0x47, 0x82, 0x37, + 0x1e, 0xba, 0x64, 0x0a, 0x2a, 0x32, 0x65, 0x1c, 0x4c, 0x7b, 0x80, 0x7b, 0xcf, 0xc1, 0x38, 0x8c, 0x0d, 0x6a, 0x43, + 0xea, 0x53, 0xe7, 0x2e, 0x04, 0x82, 0xb4, 0xd6, 0xcb, 0x7c, 0x86, 0xa7, 0x67, 0x84, 0xb2, 0x3f, 0xe4, 0xf0, 0x01, + 0xf0, 0xb2, 0x24, 0x27, 0x13, 0xfe, 0xf4, 0xf1, 0x6e, 0xa0, 0x2a, 0x3e, 0x08, 0x0e, 0xe2, 0x22, 0x3d, 0x08, 0x06, + 0x15, 0xfc, 0x2a, 0xf9, 0x41, 0x2d, 0xc4, 0xc1, 0x65, 0x5c, 0x1e, 0xc4, 0xab, 0xb8, 0xac, 0x0f, 0x6e, 0xb3, 0x7a, + 0x79, 0xa0, 0x3b, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x07, 0xc1, 0xa0, 0xd4, 0x53, 0xbb, 0x62, 0x85, 0x77, + 0x9c, 0xe9, 0x10, 0x65, 0x81, 0x1f, 0x20, 0xcc, 0x3b, 0x0d, 0x80, 0x4f, 0x5d, 0xb3, 0x94, 0x5e, 0x62, 0xb8, 0x81, + 0x6a, 0xba, 0x86, 0x3e, 0x00, 0x8f, 0xbc, 0xa6, 0x31, 0x2c, 0x81, 0xcb, 0xc1, 0x80, 0xac, 0x21, 0x72, 0xc1, 0x9a, + 0x9a, 0x20, 0x0e, 0xe1, 0x5a, 0xda, 0x69, 0x17, 0x3b, 0x14, 0x76, 0xbb, 0x05, 0x44, 0xe5, 0x09, 0xe9, 0xf7, 0xcd, + 0x37, 0xd4, 0xbd, 0x60, 0x2f, 0xc1, 0xfe, 0xaa, 0xac, 0xc3, 0x44, 0x48, 0xcd, 0xf7, 0x15, 0x3b, 0x19, 0xc8, 0x88, + 0xc3, 0x3b, 0x8e, 0x14, 0x6d, 0x54, 0x2e, 0xc3, 0x9e, 0x2c, 0x3d, 0x5f, 0x89, 0x6b, 0x6e, 0xfd, 0xb8, 0x6a, 0x21, + 0xf2, 0x3a, 0x5b, 0x49, 0xf6, 0x6f, 0xc6, 0x15, 0xf7, 0x07, 0xd6, 0x9f, 0xfe, 0x2b, 0xb8, 0xb6, 0x3a, 0xef, 0x7c, + 0xae, 0x11, 0x39, 0x4b, 0x28, 0x97, 0x34, 0x26, 0x0f, 0x6f, 0xe9, 0xfb, 0xdc, 0xea, 0xdb, 0x4c, 0xa7, 0xf6, 0x59, + 0x85, 0x85, 0x0b, 0xd1, 0x8a, 0xe0, 0xd0, 0x10, 0x0b, 0xff, 0x08, 0xd0, 0xd7, 0x3e, 0x53, 0x41, 0x49, 0x9a, 0xf3, + 0x1a, 0xbd, 0x5b, 0x21, 0xe1, 0xa5, 0x62, 0x97, 0x1e, 0x06, 0x52, 0xc6, 0xed, 0xa1, 0x24, 0x4c, 0x4a, 0x5e, 0x84, + 0xf7, 0x5e, 0x7d, 0x93, 0x7b, 0x1e, 0x62, 0xf4, 0x22, 0xc7, 0x4e, 0x40, 0x5b, 0x77, 0x89, 0xce, 0x86, 0x27, 0x6e, + 0xc3, 0x73, 0xd6, 0xa2, 0xd1, 0x74, 0xc9, 0x92, 0x7e, 0x3f, 0x06, 0x13, 0xef, 0x94, 0xe5, 0xf0, 0x2b, 0x5f, 0xd0, + 0x35, 0x03, 0x4c, 0x31, 0x7a, 0x09, 0x09, 0x29, 0x22, 0x91, 0xac, 0xe5, 0x49, 0xf2, 0x89, 0xee, 0x42, 0x70, 0x84, + 0xcb, 0x59, 0x1a, 0x2d, 0xf7, 0x9a, 0x59, 0x20, 0x79, 0x86, 0xbe, 0xab, 0x60, 0x7b, 0x63, 0x17, 0xa4, 0x9c, 0x1f, + 0x57, 0xd3, 0xc1, 0x80, 0x13, 0x05, 0x37, 0x5e, 0x48, 0x71, 0xad, 0x6a, 0x71, 0xc7, 0x30, 0x16, 0xea, 0xb6, 0x88, + 0xc1, 0x01, 0xbb, 0x68, 0x65, 0xb7, 0x0f, 0xb0, 0xab, 0x1c, 0xef, 0x52, 0x65, 0x77, 0x7a, 0xcc, 0xf8, 0xcb, 0x56, + 0x91, 0x4e, 0x5a, 0xed, 0x27, 0xf2, 0x3e, 0x77, 0xd0, 0xe5, 0x72, 0xac, 0x78, 0xcb, 0x41, 0x45, 0x1e, 0xf3, 0x91, + 0xa4, 0xba, 0x9f, 0xe1, 0x08, 0xf3, 0x60, 0xdd, 0xfa, 0x93, 0x43, 0x5d, 0xe0, 0x10, 0x79, 0x52, 0xaf, 0x29, 0xa0, + 0x7b, 0xaf, 0x1e, 0x77, 0xf5, 0xdb, 0xd0, 0x5d, 0xa0, 0x44, 0x3b, 0x15, 0x7b, 0x7e, 0x4c, 0xd4, 0xea, 0x4c, 0x3d, + 0xa1, 0x7f, 0xad, 0xc5, 0xfd, 0x85, 0x76, 0x15, 0xf7, 0xbd, 0xcb, 0x67, 0x1c, 0xea, 0xec, 0x86, 0x50, 0x00, 0xae, + 0xda, 0xd1, 0xa9, 0x6b, 0x43, 0x7a, 0xa9, 0x44, 0x37, 0xc1, 0xc1, 0xf6, 0xfa, 0x8c, 0xa3, 0xe8, 0x47, 0xab, 0x91, + 0x6f, 0xa3, 0xea, 0xb1, 0x18, 0xc4, 0x8f, 0x4b, 0xba, 0x8c, 0xaa, 0xc7, 0xe5, 0x20, 0x7e, 0x2c, 0x9a, 0x66, 0xf7, + 0x5c, 0xd9, 0xdf, 0x47, 0xe4, 0x59, 0x77, 0xf6, 0x52, 0x01, 0x1b, 0x03, 0xcf, 0xae, 0x05, 0x84, 0x53, 0x70, 0x44, + 0xb6, 0x86, 0x3e, 0x74, 0x6e, 0xf7, 0xb1, 0x61, 0x92, 0x20, 0xe8, 0x79, 0x9b, 0x4d, 0xa2, 0xd8, 0x59, 0xff, 0xe8, + 0xc3, 0x29, 0x10, 0xd0, 0xed, 0xb6, 0x59, 0x57, 0x6b, 0x40, 0x31, 0x0d, 0xc7, 0xfc, 0xb0, 0x1c, 0xdd, 0xba, 0xee, + 0xfa, 0x87, 0xe5, 0x68, 0x49, 0x86, 0x13, 0x3d, 0xf9, 0xf1, 0xc9, 0x78, 0x16, 0x47, 0x93, 0xa6, 0xe3, 0xb4, 0x50, + 0xf8, 0xa7, 0xce, 0x2d, 0x14, 0x81, 0x53, 0x31, 0x82, 0x23, 0xa7, 0xca, 0x49, 0xc9, 0xc3, 0xf0, 0x3f, 0xa8, 0x77, + 0xb4, 0x69, 0xaf, 0xe3, 0x3a, 0x59, 0x66, 0xc5, 0x95, 0x0a, 0x1f, 0xae, 0xa2, 0x8b, 0x9b, 0x80, 0x76, 0xce, 0x65, + 0xda, 0xf2, 0xeb, 0xc4, 0xa3, 0x27, 0xb6, 0x66, 0x06, 0xdc, 0xba, 0x1b, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, + 0xc4, 0xdc, 0xfe, 0x55, 0xda, 0xfc, 0x4a, 0xda, 0x67, 0xc9, 0x48, 0xd1, 0x26, 0x23, 0x35, 0x18, 0x61, 0x8a, 0x22, + 0x89, 0xeb, 0xb0, 0x80, 0x20, 0xd8, 0x9f, 0x51, 0x5c, 0x8b, 0xa5, 0x77, 0x1a, 0x84, 0x09, 0xa6, 0x0b, 0xca, 0xaf, + 0x6e, 0xe7, 0xb6, 0xd2, 0x62, 0x8f, 0xe4, 0xf7, 0xb9, 0xb5, 0x5d, 0x51, 0xe4, 0xef, 0xf3, 0x06, 0xd4, 0x03, 0xa2, + 0xdc, 0xd7, 0x47, 0x29, 0x70, 0xd2, 0xe2, 0x86, 0x02, 0xa3, 0x17, 0x74, 0x75, 0x22, 0x77, 0xec, 0xd4, 0x9c, 0xa9, + 0x98, 0xc9, 0xb8, 0xf2, 0x7e, 0xcf, 0xdc, 0x07, 0x4d, 0x41, 0x2b, 0x30, 0xf0, 0xd6, 0x67, 0x3c, 0x3a, 0xd0, 0xdd, + 0x6a, 0x9d, 0x16, 0x6c, 0x16, 0xd4, 0x65, 0xdd, 0xb6, 0xf1, 0xa0, 0x11, 0x07, 0x45, 0xb2, 0x2a, 0x54, 0x4b, 0x78, + 0x22, 0x10, 0x30, 0x65, 0xd7, 0x3c, 0xd2, 0x82, 0x9a, 0xde, 0x84, 0xc2, 0x86, 0x82, 0xbf, 0x52, 0x54, 0xd3, 0x9b, + 0x50, 0x9f, 0x89, 0x53, 0x0c, 0x22, 0x98, 0x11, 0x9b, 0xfd, 0x16, 0x50, 0x7f, 0x6b, 0x46, 0x9b, 0xa6, 0x31, 0xda, + 0x2a, 0xe4, 0x92, 0x22, 0x69, 0xf9, 0x6f, 0xd5, 0x54, 0x50, 0x52, 0xcb, 0x45, 0x6f, 0xe2, 0xbb, 0xe8, 0xf1, 0x4c, + 0x4b, 0x02, 0xa5, 0x5b, 0xee, 0x18, 0xfd, 0x21, 0x0c, 0xf0, 0x88, 0x8e, 0x13, 0x0b, 0xe6, 0x56, 0x27, 0x2c, 0x9b, + 0x57, 0x8b, 0xd1, 0x4a, 0x40, 0xd8, 0xe0, 0x63, 0x96, 0xcd, 0x0b, 0xf5, 0x10, 0xba, 0xc2, 0xd2, 0xb7, 0x60, 0x17, + 0x1b, 0xac, 0x44, 0x15, 0x80, 0xef, 0x05, 0xdd, 0xac, 0x44, 0x15, 0x09, 0xd9, 0xfd, 0xb8, 0xc1, 0x12, 0x64, 0x5a, + 0x29, 0xd3, 0x92, 0x06, 0x0b, 0x02, 0x5f, 0x55, 0x55, 0x3e, 0x24, 0xdb, 0x0a, 0xe4, 0x53, 0x47, 0x0d, 0x38, 0x05, + 0xb2, 0x0a, 0x2c, 0x48, 0x80, 0xca, 0xd0, 0x56, 0x81, 0x69, 0x25, 0xa6, 0xe9, 0x2a, 0x6c, 0x94, 0xd9, 0xa1, 0xd0, + 0xeb, 0x25, 0x9f, 0xc5, 0x83, 0x30, 0x19, 0xc6, 0xe4, 0x31, 0x42, 0xed, 0x1f, 0xe6, 0x51, 0xac, 0xe4, 0x92, 0x2b, + 0xeb, 0x17, 0x7f, 0xfb, 0x09, 0x7b, 0xdd, 0x73, 0x0c, 0x16, 0x60, 0x2d, 0x6d, 0xaf, 0xb3, 0xe2, 0x9d, 0x68, 0x05, + 0xc7, 0xc1, 0x2c, 0xd2, 0x61, 0xd5, 0x91, 0x23, 0xea, 0x8b, 0x5c, 0x7b, 0x17, 0x21, 0x72, 0x90, 0xde, 0x63, 0x80, + 0xdd, 0x08, 0x5f, 0x87, 0xc6, 0xe6, 0x56, 0x55, 0x88, 0xbf, 0x51, 0x22, 0xf1, 0x93, 0x10, 0x1f, 0xd7, 0x2b, 0x99, + 0xab, 0xd6, 0x78, 0xac, 0xaa, 0x19, 0x3c, 0x53, 0xbe, 0xc7, 0xca, 0xbf, 0xb5, 0xdd, 0x1c, 0xe7, 0x3d, 0x78, 0xd0, + 0xba, 0xdf, 0x3a, 0x12, 0x42, 0x73, 0xe5, 0x24, 0x4d, 0x47, 0x8d, 0x8e, 0x99, 0xac, 0x16, 0x95, 0x30, 0xb9, 0x3b, + 0xa5, 0x63, 0xa0, 0xa2, 0x03, 0xb8, 0x96, 0xa8, 0x0e, 0x7a, 0x52, 0xb2, 0x31, 0x1c, 0x71, 0x06, 0x07, 0xed, 0x38, + 0x46, 0xf1, 0x72, 0x2e, 0xc5, 0xcb, 0xf9, 0x09, 0xe3, 0x00, 0xad, 0x05, 0x48, 0xf5, 0x0a, 0xf6, 0x33, 0x97, 0xb0, + 0xc0, 0xfa, 0xce, 0x77, 0x64, 0x80, 0x0c, 0x71, 0xb2, 0x39, 0x4e, 0xf6, 0xb8, 0x51, 0x73, 0x5f, 0xe1, 0xe3, 0xa4, + 0x59, 0x38, 0x75, 0x15, 0xed, 0xba, 0x96, 0xac, 0x98, 0x97, 0x83, 0x09, 0x04, 0x65, 0x29, 0xe6, 0xe5, 0x70, 0xb2, + 0xa0, 0x39, 0xfc, 0x58, 0x78, 0xe8, 0x10, 0xcb, 0x41, 0x02, 0x97, 0xce, 0x1e, 0x03, 0xde, 0x50, 0x28, 0x71, 0x37, + 0xd6, 0x91, 0x63, 0x1d, 0xe5, 0x61, 0x18, 0x03, 0xae, 0xac, 0x15, 0x78, 0xef, 0xbf, 0x3e, 0xfa, 0x80, 0xac, 0xca, + 0x15, 0x5e, 0x8e, 0x72, 0xd7, 0x95, 0x46, 0x5d, 0x52, 0x7a, 0x95, 0x13, 0x3c, 0x95, 0x6c, 0xb7, 0x3d, 0x63, 0x4f, + 0xe5, 0x20, 0xf1, 0x8e, 0x11, 0xbd, 0x98, 0x7a, 0x99, 0x39, 0x81, 0x33, 0xdb, 0x5e, 0xb6, 0x31, 0x3f, 0x76, 0x80, + 0x83, 0x45, 0x10, 0x12, 0x37, 0x84, 0x61, 0x62, 0x27, 0xc5, 0x50, 0x09, 0xe1, 0xba, 0x16, 0x5e, 0xc7, 0x69, 0x19, + 0x83, 0x8b, 0xb4, 0xb2, 0x4d, 0xdc, 0x43, 0xd7, 0x1d, 0x3f, 0xe6, 0x56, 0xc7, 0x68, 0xcb, 0x7c, 0xb8, 0xa3, 0xd3, + 0x07, 0x16, 0x03, 0x50, 0xf7, 0x60, 0x56, 0xb7, 0xcf, 0x24, 0xae, 0x4f, 0xbb, 0x8a, 0x90, 0x08, 0x44, 0x51, 0x2a, + 0x23, 0x4c, 0xff, 0x4e, 0x73, 0x59, 0x4d, 0xeb, 0x07, 0x79, 0xe6, 0x90, 0x67, 0xa1, 0xb3, 0x3d, 0x68, 0xed, 0xef, + 0x06, 0xed, 0xc4, 0x6d, 0xf7, 0xce, 0xff, 0x5b, 0xd6, 0xb5, 0xd5, 0x9a, 0xea, 0x71, 0xbb, 0xfa, 0x81, 0xb7, 0x57, + 0x7b, 0x32, 0x06, 0xcc, 0x4a, 0x38, 0x67, 0x54, 0xc5, 0xcb, 0x8c, 0x57, 0x78, 0x52, 0xad, 0x3c, 0x1f, 0xef, 0xdb, + 0x6c, 0xa4, 0x1f, 0xc8, 0x14, 0x10, 0xcf, 0x6f, 0x53, 0xad, 0x3e, 0x4e, 0x51, 0x02, 0xfe, 0x4e, 0xc5, 0x37, 0xa2, + 0x1f, 0xcd, 0x8b, 0x2b, 0x5e, 0xbf, 0xbd, 0x2d, 0xf4, 0x8b, 0xe7, 0x46, 0xe7, 0x4f, 0x5f, 0x97, 0x2e, 0x74, 0x38, + 0x6a, 0xef, 0xa0, 0xc8, 0x82, 0x55, 0x27, 0x13, 0x2d, 0x6b, 0xab, 0x66, 0x1f, 0x25, 0x5c, 0x4c, 0x54, 0xa3, 0x67, + 0x9d, 0x39, 0x61, 0x4a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x96, 0x0c, 0xd4, 0x69, 0x52, 0x88, 0x1e, 0x56, 0x33, + 0x8c, 0x57, 0x0c, 0xa0, 0x30, 0xa5, 0x04, 0x51, 0xb4, 0x06, 0xc1, 0x40, 0x13, 0xfa, 0xfd, 0xdb, 0x54, 0x65, 0xa0, + 0x45, 0x33, 0x15, 0x20, 0xaa, 0x83, 0x68, 0xab, 0xbc, 0x0c, 0x7f, 0x5c, 0xd2, 0x22, 0xa3, 0x79, 0x45, 0x97, 0x15, + 0x4d, 0x32, 0x7a, 0xc9, 0xa5, 0xa8, 0x78, 0x5d, 0x31, 0x49, 0xdb, 0x35, 0x61, 0xff, 0x97, 0x47, 0xd7, 0x5b, 0xb1, + 0xd6, 0xd0, 0xee, 0x04, 0x19, 0xa1, 0xf9, 0x42, 0x05, 0x21, 0x43, 0xe5, 0x24, 0x74, 0xad, 0x56, 0x78, 0x05, 0x36, + 0x99, 0x66, 0xa3, 0x65, 0x5c, 0x85, 0x81, 0xf9, 0x2a, 0x30, 0x98, 0x1c, 0x98, 0x74, 0xb6, 0xbe, 0x78, 0x26, 0xae, + 0x57, 0xa2, 0xe0, 0x45, 0x2d, 0x21, 0xfa, 0x35, 0xee, 0xbb, 0x8e, 0xab, 0xce, 0xfc, 0x5a, 0xe9, 0x43, 0xdf, 0xba, + 0xac, 0x8d, 0xfd, 0x42, 0xe3, 0x18, 0xec, 0x7c, 0x44, 0x34, 0xa4, 0x41, 0xad, 0x5a, 0x1c, 0xea, 0x00, 0x5d, 0x2a, + 0xa4, 0x90, 0x21, 0x53, 0x99, 0x2c, 0x41, 0xc6, 0x37, 0x7e, 0x2f, 0x44, 0x3d, 0xfa, 0x73, 0xcd, 0xcb, 0xfb, 0x33, + 0x9e, 0x73, 0x1c, 0xa3, 0x20, 0x89, 0x8b, 0x9b, 0xb8, 0x0a, 0x88, 0x6b, 0x79, 0x15, 0x1c, 0xa5, 0x3a, 0x6c, 0xcc, + 0x4e, 0xd5, 0xa8, 0xf5, 0x12, 0xe8, 0x2b, 0x23, 0x7d, 0x63, 0x30, 0x34, 0x11, 0x95, 0xd0, 0xf7, 0x4a, 0xdd, 0xd3, + 0xea, 0x86, 0x01, 0xc4, 0x9f, 0x4b, 0xbd, 0x50, 0xeb, 0xb5, 0x1f, 0x73, 0x43, 0x47, 0x08, 0x1a, 0x7d, 0xd5, 0x2c, + 0x1a, 0xc7, 0x2d, 0x4d, 0x46, 0xc6, 0x8d, 0x36, 0x39, 0xbf, 0x02, 0x19, 0x9f, 0x35, 0x17, 0x9a, 0x34, 0x0d, 0x95, + 0x50, 0x85, 0xd1, 0xe6, 0xce, 0x4b, 0xa7, 0xf7, 0xe0, 0xce, 0xa6, 0xcd, 0x8e, 0x94, 0x4b, 0x63, 0x43, 0x4b, 0x5e, + 0xad, 0x44, 0x51, 0x41, 0x18, 0xe7, 0xde, 0x98, 0x5e, 0xc7, 0x59, 0x51, 0xc7, 0x59, 0x71, 0x5a, 0xad, 0x78, 0x52, + 0xbf, 0x87, 0x5b, 0x9c, 0xb4, 0xba, 0x69, 0x2a, 0xb8, 0xd2, 0x25, 0x07, 0x18, 0x4c, 0x4d, 0xc6, 0x3d, 0xb6, 0x06, + 0x17, 0xf5, 0xef, 0xd1, 0x52, 0x60, 0x2c, 0x54, 0x55, 0x7c, 0x7c, 0x51, 0x89, 0x7c, 0x5d, 0x83, 0x76, 0xf7, 0xb2, + 0x8e, 0x8e, 0x9e, 0xac, 0xee, 0xa6, 0xf2, 0x06, 0x13, 0x3d, 0x39, 0x5a, 0xdd, 0xf5, 0xb2, 0xeb, 0x95, 0x28, 0xeb, + 0xb8, 0xa8, 0xa7, 0x12, 0x91, 0x2c, 0x89, 0xf3, 0x24, 0x9c, 0x8c, 0xc7, 0x5f, 0x1c, 0x0c, 0x0f, 0x20, 0x03, 0x99, + 0xfe, 0x35, 0x94, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x15, 0xf2, 0x6e, 0x17, 0x8d, 0x26, 0x0d, 0xd6, 0x33, 0x4c, + 0xd4, 0xcc, 0x8c, 0xf8, 0xdd, 0x2a, 0x2e, 0x52, 0x88, 0x5f, 0xa7, 0x8a, 0x3f, 0x7a, 0x32, 0xf6, 0xca, 0x37, 0x9f, + 0x3e, 0x6d, 0x7e, 0x6f, 0x74, 0x58, 0x6b, 0xdd, 0xee, 0x67, 0xbf, 0x1f, 0xcb, 0xf9, 0x3e, 0x39, 0x3e, 0x54, 0x3f, + 0x7e, 0x6f, 0x9a, 0xe9, 0xeb, 0x32, 0x9c, 0xff, 0x33, 0x94, 0xf3, 0x79, 0x5a, 0x96, 0xf1, 0x7d, 0x43, 0x16, 0x74, + 0x5d, 0x59, 0x6f, 0x12, 0xea, 0x6c, 0x03, 0x7a, 0x44, 0xa6, 0xeb, 0x8a, 0xc1, 0x37, 0xef, 0xeb, 0x30, 0xe0, 0xd5, + 0x6a, 0xc8, 0x8b, 0x3a, 0xab, 0xef, 0x87, 0x98, 0x27, 0xc0, 0x4f, 0x35, 0x6f, 0xf6, 0xac, 0xd4, 0xc4, 0xe6, 0xb2, + 0xe4, 0xfc, 0x2f, 0x1e, 0x4a, 0xe3, 0xe8, 0x31, 0x1a, 0x47, 0x8f, 0xa9, 0x1c, 0x8c, 0xc9, 0xd7, 0x54, 0x75, 0x66, + 0xf2, 0x35, 0x98, 0x20, 0x65, 0xed, 0x6f, 0xa4, 0x71, 0x62, 0x34, 0xa6, 0x37, 0x2f, 0xf3, 0x6c, 0x05, 0x4c, 0xf0, + 0x52, 0xfd, 0x68, 0x08, 0x7d, 0xcf, 0xdb, 0xd9, 0x47, 0xa3, 0xd1, 0xb3, 0x92, 0x8e, 0x46, 0xa3, 0x8f, 0x59, 0x43, + 0xe8, 0x65, 0xd5, 0xf1, 0xfe, 0x3d, 0xa7, 0x17, 0x22, 0xbd, 0x8f, 0x82, 0x80, 0x2e, 0xb3, 0x34, 0xe5, 0x85, 0x2c, + 0xeb, 0x2c, 0x6d, 0xe7, 0x95, 0x2d, 0x44, 0xe0, 0x1f, 0xd5, 0x46, 0x84, 0x20, 0x22, 0xf4, 0xed, 0x4e, 0xcf, 0x46, + 0xa3, 0xd1, 0x59, 0xaa, 0xab, 0xb5, 0x0c, 0xf9, 0x6b, 0x34, 0x1f, 0xb0, 0x76, 0xf9, 0x60, 0x7d, 0xa3, 0xa3, 0x9d, + 0x1c, 0xfe, 0xf7, 0x70, 0x36, 0x1f, 0x0f, 0xbf, 0x1d, 0x2d, 0x1e, 0x1f, 0xd2, 0x20, 0x70, 0x41, 0xab, 0x43, 0x65, + 0xcd, 0x31, 0x2d, 0x8e, 0xc7, 0x53, 0x52, 0x0c, 0xd8, 0x13, 0xe3, 0x4b, 0xf3, 0xc5, 0x13, 0x40, 0x22, 0x45, 0x11, + 0x6a, 0x60, 0xa5, 0x7f, 0x78, 0x15, 0x79, 0x55, 0x00, 0x3e, 0x9a, 0x89, 0x64, 0xa0, 0xb5, 0x80, 0xe3, 0x08, 0xca, + 0x6b, 0x8c, 0x69, 0x44, 0x8f, 0xb1, 0x4c, 0x47, 0x05, 0x1d, 0x4f, 0xab, 0xdb, 0xac, 0x4e, 0x96, 0x18, 0xd8, 0x28, + 0xae, 0x78, 0xf0, 0x45, 0x10, 0x15, 0xec, 0xe8, 0xe9, 0x54, 0xc2, 0xfb, 0x62, 0x52, 0xca, 0xaf, 0x20, 0xf1, 0xdb, + 0x31, 0x42, 0xa0, 0x12, 0xe5, 0xb1, 0x88, 0x35, 0xbe, 0xcc, 0x45, 0x0c, 0x1e, 0x9c, 0x95, 0xe2, 0x59, 0xcc, 0x49, + 0x60, 0xec, 0x2f, 0x5a, 0xcd, 0x11, 0xd0, 0x9c, 0x50, 0x30, 0x71, 0x58, 0x50, 0xf1, 0xc5, 0x04, 0xbd, 0x82, 0xc0, + 0xad, 0x3a, 0x82, 0xe3, 0xce, 0x58, 0x36, 0xa8, 0xe5, 0x93, 0xb2, 0xc3, 0xf9, 0xff, 0xae, 0xe8, 0x62, 0x70, 0x68, + 0x87, 0xe6, 0xad, 0x72, 0x5f, 0xad, 0x91, 0x51, 0xaa, 0xc3, 0x67, 0x29, 0x31, 0xc6, 0xa7, 0x9c, 0x9d, 0x6c, 0x74, + 0x77, 0x46, 0x75, 0x99, 0x5d, 0x87, 0x44, 0xf5, 0xca, 0x82, 0x62, 0x06, 0x51, 0x36, 0xc2, 0xf5, 0x03, 0xd6, 0x22, + 0x4e, 0x27, 0x6f, 0x78, 0x59, 0x67, 0x89, 0x7c, 0x7f, 0xe3, 0xbd, 0x07, 0x6a, 0x20, 0x1b, 0xf4, 0xae, 0x64, 0x30, + 0xcf, 0x6f, 0x4b, 0x00, 0xed, 0xac, 0x78, 0x79, 0xc3, 0x5d, 0xba, 0x11, 0x04, 0x8d, 0x6d, 0xe6, 0x95, 0x17, 0x6c, + 0x02, 0xbe, 0x7a, 0x57, 0x02, 0xe6, 0x46, 0x08, 0x52, 0x53, 0x08, 0x85, 0x03, 0x17, 0xf8, 0xba, 0x2e, 0xb3, 0x8b, + 0x75, 0xcd, 0x31, 0xd8, 0x47, 0x61, 0xb5, 0x98, 0xd2, 0x09, 0x8f, 0x87, 0x01, 0xfe, 0x08, 0xa8, 0x0c, 0xb8, 0xa1, + 0x3d, 0xec, 0xe0, 0x85, 0xfc, 0x65, 0xdf, 0xc8, 0x3d, 0xc2, 0x5e, 0xa7, 0x21, 0x04, 0xd7, 0xc1, 0x87, 0x00, 0x96, + 0x14, 0xa1, 0x6f, 0xf1, 0x54, 0x0d, 0x83, 0xcb, 0x3c, 0x5b, 0xa9, 0xa4, 0x7a, 0xd4, 0xd1, 0x7c, 0x28, 0xb5, 0x23, + 0x39, 0xa0, 0x4e, 0x7a, 0x8c, 0xe9, 0xa5, 0x4c, 0x97, 0x45, 0x59, 0x23, 0x94, 0x77, 0x6a, 0x62, 0x6c, 0x98, 0x3e, + 0x0e, 0x91, 0x5f, 0xde, 0x95, 0x32, 0xf4, 0x0b, 0x5f, 0x00, 0xf8, 0x15, 0xdc, 0xee, 0x77, 0xe3, 0xbb, 0xc8, 0xec, + 0xe7, 0x9c, 0x1d, 0xfe, 0xf7, 0x3c, 0x1e, 0xfe, 0x35, 0x1e, 0x7e, 0xbb, 0x18, 0x84, 0x43, 0xf3, 0x93, 0x3c, 0x7e, + 0x74, 0x48, 0x5f, 0x72, 0xc3, 0x95, 0xc0, 0xc2, 0xf7, 0x82, 0xdb, 0xc8, 0x95, 0x10, 0x44, 0x01, 0xde, 0x28, 0xec, + 0x6a, 0x9c, 0x00, 0xc0, 0x5f, 0xf0, 0x5f, 0x01, 0x1a, 0x09, 0xd9, 0x8b, 0x06, 0xe8, 0x07, 0xe4, 0xef, 0x93, 0xaf, + 0x3c, 0x03, 0x39, 0x10, 0x4f, 0xc8, 0x18, 0x28, 0x44, 0x95, 0x31, 0x91, 0xb0, 0xbf, 0x26, 0xfb, 0x76, 0xdb, 0x6b, + 0x4b, 0x7e, 0xf0, 0x4b, 0x37, 0xd3, 0x44, 0xcf, 0x3b, 0xdc, 0x50, 0x56, 0x62, 0x15, 0x22, 0x36, 0x9e, 0xfa, 0x95, + 0x33, 0x88, 0x35, 0x79, 0x93, 0x81, 0x0f, 0x83, 0xf9, 0x62, 0x3c, 0x03, 0x69, 0x11, 0xdc, 0x71, 0x4a, 0x7e, 0x99, + 0x81, 0x5b, 0x73, 0x11, 0xe3, 0x05, 0xdb, 0x2c, 0x89, 0x7e, 0xbf, 0x97, 0x67, 0x61, 0xae, 0x70, 0x96, 0xf3, 0x46, + 0x8b, 0xdd, 0x51, 0x27, 0x0c, 0xe2, 0x76, 0x35, 0x04, 0x43, 0x39, 0x04, 0x65, 0x47, 0x5b, 0x6c, 0xbd, 0xa6, 0x9e, + 0x52, 0xf7, 0x56, 0xd6, 0x57, 0x8e, 0xfe, 0x10, 0x59, 0x81, 0x85, 0xb4, 0x6b, 0x8e, 0x55, 0xcd, 0x31, 0xd2, 0x9e, + 0x7e, 0xbf, 0xf2, 0xc8, 0x4f, 0x67, 0xe1, 0x41, 0x20, 0x4b, 0x15, 0x3b, 0x65, 0x51, 0x6e, 0x4a, 0x73, 0xc6, 0xb0, + 0xa1, 0x79, 0x66, 0xe2, 0xba, 0xcc, 0x7a, 0xbd, 0x30, 0x44, 0x87, 0x46, 0x2c, 0x15, 0x6b, 0x83, 0xf0, 0x3e, 0x3a, + 0x61, 0x74, 0x0d, 0xb2, 0xba, 0xf0, 0x9c, 0x13, 0xe4, 0xcb, 0xc0, 0x64, 0x4d, 0x56, 0xeb, 0xe4, 0x84, 0x47, 0x2f, + 0x5f, 0x36, 0x82, 0x06, 0x39, 0x49, 0x51, 0x6f, 0x62, 0x77, 0xec, 0xa3, 0x16, 0x52, 0xe3, 0xa6, 0x99, 0xf6, 0x14, + 0xa9, 0xe8, 0xb1, 0x5e, 0x2d, 0x7f, 0x81, 0x65, 0x81, 0x21, 0x1f, 0x84, 0xf6, 0x14, 0xad, 0xc0, 0x0c, 0x37, 0x26, + 0x83, 0xa6, 0x1f, 0x16, 0x6d, 0x11, 0x3a, 0x23, 0xb7, 0x25, 0x84, 0x6d, 0x1b, 0x84, 0xb5, 0xf3, 0x44, 0xbe, 0x78, + 0xe2, 0x30, 0xc2, 0x21, 0xd7, 0x9b, 0xb9, 0xf2, 0x30, 0xcc, 0xaf, 0x85, 0xdf, 0x3c, 0xd5, 0x5c, 0x27, 0x2a, 0x66, + 0x05, 0xdb, 0xed, 0xb2, 0x22, 0xf8, 0xf7, 0x63, 0x36, 0xc3, 0xbf, 0x59, 0xbf, 0xdf, 0x0b, 0xf1, 0x17, 0xc7, 0xe0, + 0x3d, 0xf3, 0x6a, 0xc1, 0x3e, 0x82, 0x4c, 0x85, 0x44, 0x98, 0x2a, 0x8d, 0xdf, 0x58, 0x0d, 0x16, 0x70, 0xfa, 0x03, + 0x99, 0x0b, 0x33, 0x99, 0xcb, 0x8b, 0x6d, 0xc8, 0x69, 0x6b, 0x9c, 0xb2, 0x51, 0x96, 0x48, 0xd7, 0x85, 0x6c, 0x14, + 0xe7, 0x59, 0x5c, 0xf1, 0x6a, 0xbb, 0x55, 0x87, 0x63, 0x52, 0x72, 0xf4, 0x2b, 0x40, 0x2a, 0x55, 0xb0, 0x8e, 0x54, + 0x3b, 0xfe, 0x22, 0x2c, 0x71, 0x9f, 0xf2, 0x79, 0xb9, 0x30, 0x7b, 0x6b, 0x5e, 0x2e, 0x98, 0xbc, 0x95, 0xf6, 0xc2, + 0x12, 0x9a, 0x57, 0x10, 0xb2, 0xc1, 0x54, 0xc7, 0xa2, 0x35, 0x66, 0xd5, 0xbc, 0x5c, 0x40, 0x18, 0x99, 0x72, 0x01, + 0x36, 0x53, 0xbc, 0x00, 0x2f, 0x92, 0x18, 0x60, 0xe2, 0x62, 0x32, 0x85, 0x78, 0xe6, 0xb2, 0x9c, 0x78, 0xa1, 0xef, + 0x97, 0x89, 0x45, 0xca, 0x80, 0x57, 0x8d, 0x46, 0x13, 0x33, 0x0d, 0x47, 0x9d, 0x20, 0x27, 0x3a, 0xbf, 0x9b, 0x5a, + 0x11, 0x62, 0x4f, 0x1c, 0x01, 0x97, 0x15, 0xd3, 0x85, 0x17, 0x1d, 0x88, 0x31, 0x72, 0x70, 0x8a, 0x4f, 0x0c, 0x8e, + 0xc2, 0xe0, 0xdc, 0x38, 0x27, 0x48, 0x19, 0xc6, 0x64, 0x23, 0xd8, 0xb5, 0x08, 0xab, 0x79, 0xbc, 0x00, 0x65, 0x5d, + 0xbc, 0x00, 0xcb, 0x1a, 0x6d, 0x80, 0x09, 0xf2, 0x2a, 0xee, 0x84, 0x7e, 0xa2, 0xb8, 0x42, 0x84, 0x63, 0xe5, 0xfa, + 0xa8, 0x6c, 0x87, 0xbe, 0xc0, 0xeb, 0xbd, 0x34, 0xc7, 0xcd, 0x7a, 0x2c, 0x10, 0xd8, 0x10, 0x30, 0x36, 0x52, 0x69, + 0xb2, 0xb5, 0xf6, 0x8d, 0x9e, 0x07, 0x3e, 0xcd, 0x46, 0x85, 0xa8, 0xcf, 0x2f, 0x41, 0x84, 0xe2, 0xa2, 0xc1, 0x23, + 0xbf, 0x88, 0x3b, 0x4b, 0xbf, 0x35, 0x2d, 0x2a, 0xd8, 0xc9, 0x06, 0x40, 0xfa, 0x54, 0xb4, 0x28, 0x29, 0xa7, 0x28, + 0x48, 0x63, 0x37, 0x05, 0xac, 0x24, 0x77, 0x01, 0x43, 0xb0, 0xb1, 0x83, 0xca, 0xea, 0x14, 0x11, 0x49, 0x02, 0x91, + 0x15, 0xc3, 0x82, 0xe2, 0xd8, 0x16, 0x88, 0xfa, 0x69, 0xca, 0x32, 0x83, 0xa1, 0xa3, 0xe2, 0x3e, 0x4f, 0x1d, 0x4a, + 0x14, 0x04, 0x54, 0x0d, 0x39, 0x48, 0x6c, 0x4d, 0x03, 0xe1, 0x01, 0x79, 0x44, 0x67, 0xac, 0xbf, 0xcf, 0x3a, 0xcf, + 0x2e, 0x34, 0x47, 0xe5, 0x6a, 0x57, 0xe8, 0x31, 0xc2, 0x93, 0x4c, 0xc3, 0xe4, 0x3b, 0xe7, 0x99, 0x56, 0x53, 0xf4, + 0x1c, 0x7c, 0xb2, 0x53, 0x8c, 0x48, 0xb7, 0x67, 0xd0, 0x75, 0xf0, 0xaa, 0x0e, 0x1b, 0xed, 0x5a, 0x42, 0x48, 0xe8, + 0x5a, 0x14, 0x31, 0xeb, 0x19, 0x03, 0xea, 0xed, 0xb6, 0xa7, 0xe6, 0x6a, 0xff, 0xdc, 0x6d, 0xb7, 0x3d, 0xec, 0xd6, + 0xf3, 0xb4, 0xdb, 0x0a, 0xbc, 0x96, 0x1f, 0xb4, 0xc7, 0x9f, 0xdb, 0xf1, 0xe7, 0x1a, 0xc9, 0xa3, 0xb0, 0x34, 0xd3, + 0xd4, 0x07, 0xe1, 0x70, 0xd3, 0x7b, 0xaf, 0x49, 0xdf, 0x67, 0xa1, 0xa0, 0x97, 0x95, 0x57, 0x5d, 0x63, 0x4d, 0x2a, + 0x1f, 0x5c, 0xff, 0x0f, 0xaf, 0x02, 0x3c, 0xe2, 0xe4, 0xce, 0xde, 0xdb, 0xa0, 0xd2, 0x6b, 0x0b, 0x47, 0x8a, 0xd0, + 0x03, 0x92, 0xb0, 0xaf, 0x65, 0x2d, 0x6e, 0xf3, 0x2c, 0x7b, 0x98, 0x3e, 0xbd, 0x4a, 0x5d, 0xab, 0x7b, 0xbb, 0xcc, + 0x32, 0x7d, 0xe0, 0xd5, 0x14, 0x07, 0x34, 0xea, 0xa2, 0x7d, 0xd7, 0x59, 0x55, 0x81, 0x97, 0x07, 0x5c, 0x9f, 0xcf, + 0xb8, 0x0b, 0x37, 0x77, 0x55, 0xfb, 0x9b, 0xf4, 0x2c, 0x9b, 0x67, 0x8b, 0xed, 0x36, 0xc4, 0xbf, 0x5d, 0x2d, 0xb2, + 0x34, 0x79, 0x0e, 0x3a, 0x3c, 0x8c, 0xdc, 0xc3, 0x54, 0xe3, 0x9c, 0xcd, 0xff, 0xb2, 0xf2, 0x9c, 0x04, 0x4e, 0x81, + 0x5e, 0xcc, 0x1e, 0x81, 0x0c, 0x46, 0x3b, 0xf5, 0x57, 0x33, 0xb5, 0x66, 0x20, 0xfa, 0x56, 0x15, 0x01, 0x8e, 0x2e, + 0x36, 0x12, 0x8d, 0x2c, 0x38, 0x69, 0x08, 0x58, 0x6c, 0x9a, 0xf2, 0x3e, 0x18, 0xda, 0x56, 0x97, 0xf7, 0xce, 0x92, + 0xe6, 0xb8, 0x0e, 0xac, 0x6d, 0xbf, 0x1e, 0x62, 0x5d, 0x76, 0xbd, 0x40, 0xee, 0x97, 0x37, 0xb4, 0x37, 0x6e, 0x12, + 0x98, 0xb5, 0x4d, 0x63, 0x18, 0x3f, 0x53, 0xfa, 0x4f, 0x6a, 0x70, 0xa5, 0xf1, 0xd3, 0x5c, 0x5b, 0x25, 0x98, 0x7d, + 0xe3, 0xf8, 0x0e, 0x40, 0x38, 0x36, 0x97, 0x1e, 0x9f, 0x65, 0x0e, 0x3d, 0x06, 0xa2, 0xa3, 0x3f, 0x2a, 0xec, 0x47, + 0x66, 0xf7, 0xba, 0x01, 0xf0, 0xe6, 0x75, 0xbb, 0xa0, 0x79, 0xb1, 0x80, 0x40, 0xa2, 0x4e, 0x79, 0xa5, 0xe1, 0x33, + 0x63, 0x76, 0x05, 0x64, 0xa8, 0x24, 0x60, 0x93, 0xd4, 0x75, 0x2e, 0xc4, 0xb2, 0xc3, 0xd2, 0x7c, 0x24, 0x61, 0x27, + 0x21, 0xa0, 0xbd, 0x06, 0xc1, 0x2c, 0xf8, 0xaf, 0x60, 0x50, 0x0c, 0x82, 0x28, 0x88, 0x82, 0x80, 0x0c, 0x4a, 0xf8, + 0x85, 0x38, 0x63, 0x04, 0x63, 0x94, 0x40, 0x87, 0xdf, 0x71, 0xe6, 0x32, 0x22, 0x2f, 0xbc, 0x30, 0x96, 0x76, 0x00, + 0x2e, 0x84, 0xc8, 0x79, 0x8c, 0x3e, 0x16, 0xef, 0x38, 0xcb, 0x08, 0x7d, 0xe7, 0x9c, 0xca, 0x8f, 0xb8, 0x17, 0xdc, + 0x6e, 0x77, 0xd8, 0x5e, 0xf2, 0x30, 0xa3, 0xbd, 0x31, 0x7d, 0xc7, 0x49, 0x94, 0x79, 0xce, 0xc3, 0x1c, 0x7a, 0x56, + 0x1b, 0xd6, 0x8a, 0x6a, 0x72, 0x83, 0x62, 0x5d, 0x64, 0x99, 0xac, 0x0c, 0x57, 0xce, 0x69, 0x85, 0xeb, 0xce, 0xac, + 0x17, 0x90, 0x94, 0x55, 0x8a, 0xa5, 0x33, 0xe1, 0xab, 0x4d, 0xcb, 0x9e, 0xb7, 0x4e, 0x21, 0xa7, 0x21, 0x32, 0xfa, + 0xa1, 0x25, 0xa0, 0x9a, 0x56, 0x5c, 0xd5, 0xe0, 0xb2, 0xab, 0xdb, 0xc3, 0x75, 0x7b, 0x74, 0x33, 0x3e, 0x40, 0x8c, + 0x38, 0x8e, 0x2d, 0x03, 0xbb, 0x09, 0x8b, 0x67, 0x63, 0x7d, 0x5f, 0x76, 0xe9, 0xad, 0xad, 0xc5, 0x21, 0xac, 0x3d, + 0x67, 0x85, 0x84, 0x00, 0x69, 0xa9, 0x2b, 0xdd, 0x6e, 0x83, 0x00, 0x06, 0xb8, 0xdf, 0xef, 0x01, 0xd7, 0xaa, 0xd9, + 0x49, 0x7d, 0x6b, 0x36, 0xc4, 0x5e, 0x52, 0x78, 0x0c, 0x44, 0xa9, 0xf8, 0xcf, 0x20, 0xa0, 0x78, 0xee, 0x86, 0x60, + 0x5f, 0xc9, 0x4e, 0x36, 0x65, 0xbf, 0xff, 0xbc, 0xc4, 0x07, 0x94, 0x83, 0x82, 0x58, 0x57, 0xc5, 0xad, 0xd0, 0xec, + 0x93, 0xfc, 0x10, 0xc7, 0x22, 0xcf, 0x42, 0x4b, 0x58, 0x6a, 0x4d, 0x58, 0xb8, 0x64, 0xa4, 0x83, 0x38, 0x68, 0x48, + 0xe7, 0x60, 0xd5, 0x36, 0xd8, 0x70, 0xaf, 0xf7, 0xb2, 0x0a, 0x2b, 0x9a, 0x39, 0xc3, 0xf2, 0xde, 0x01, 0x00, 0xeb, + 0xf5, 0x70, 0xa1, 0x38, 0x64, 0xc2, 0x43, 0x9f, 0xc4, 0x97, 0x86, 0x5d, 0x9f, 0x29, 0x59, 0xc9, 0x68, 0x34, 0xaa, + 0x1b, 0x29, 0xf9, 0x30, 0xdf, 0xbd, 0x69, 0xa1, 0x56, 0x8a, 0x38, 0xe5, 0x29, 0x58, 0x7a, 0x6b, 0x4a, 0x37, 0x5f, + 0xd0, 0x15, 0x2f, 0x52, 0xf9, 0xd3, 0x41, 0x9b, 0xf4, 0x88, 0x6b, 0xe6, 0xeb, 0x2c, 0xcc, 0xf0, 0x43, 0xc0, 0x47, + 0xf3, 0x30, 0xb3, 0xe9, 0x0a, 0x96, 0x16, 0xc4, 0x91, 0x71, 0xc9, 0x43, 0x9b, 0x07, 0xb0, 0xfe, 0xf4, 0x21, 0x89, + 0x9f, 0xc2, 0xcf, 0x99, 0x4e, 0xeb, 0xf8, 0x0c, 0x67, 0x33, 0x2a, 0xe4, 0x8d, 0xa0, 0xfd, 0x1a, 0x12, 0x89, 0x46, + 0x36, 0xf6, 0x18, 0x8a, 0xd6, 0xdd, 0x06, 0xae, 0xfc, 0x86, 0xde, 0xb9, 0x34, 0x08, 0xb0, 0xad, 0xb1, 0x18, 0x38, + 0xe3, 0xf1, 0x07, 0xaa, 0x6a, 0xf4, 0x15, 0x45, 0x37, 0x4c, 0x26, 0x9a, 0x3b, 0x8e, 0xed, 0xa8, 0x76, 0x95, 0xad, + 0x58, 0x61, 0x6c, 0x79, 0xed, 0x5b, 0x5a, 0x9a, 0x12, 0x50, 0x0d, 0x86, 0x3b, 0x01, 0x7c, 0x46, 0x84, 0x3c, 0x10, + 0x44, 0xf7, 0xc1, 0x41, 0x73, 0x96, 0xe0, 0x79, 0x18, 0xc2, 0x1f, 0x58, 0x38, 0xb0, 0x2c, 0x65, 0x3f, 0x97, 0xd3, + 0x18, 0xce, 0xdd, 0x5c, 0xee, 0xf0, 0xd9, 0x12, 0x14, 0x79, 0x72, 0x4e, 0xf5, 0xe5, 0x2b, 0xf7, 0xf6, 0x7b, 0x4c, + 0x30, 0x8f, 0x9e, 0x6d, 0xf8, 0xad, 0xa6, 0xdb, 0xf8, 0xc2, 0xda, 0x81, 0x13, 0xe6, 0xc2, 0x69, 0x2e, 0xb6, 0x4b, + 0x0d, 0x71, 0xd7, 0x78, 0x42, 0x84, 0x57, 0x8a, 0x58, 0x64, 0x9e, 0x4c, 0xc7, 0x60, 0x63, 0xc8, 0x36, 0x95, 0xcf, + 0x94, 0x42, 0xbc, 0x9a, 0xca, 0x0b, 0x53, 0x2b, 0x95, 0x55, 0x1a, 0x61, 0xa6, 0x80, 0x45, 0x95, 0x81, 0xcf, 0x7e, + 0x8d, 0x14, 0xd7, 0xd4, 0xf3, 0x17, 0x2e, 0xdf, 0x4c, 0xb7, 0xd9, 0x7c, 0xfa, 0x32, 0x8f, 0xaf, 0xb6, 0xdb, 0xb0, + 0xfb, 0x05, 0x98, 0x5f, 0x56, 0x52, 0xa3, 0x06, 0x4e, 0x0f, 0x21, 0xfa, 0x39, 0xef, 0xc9, 0x39, 0xb1, 0x9c, 0x5c, + 0xbb, 0x79, 0xb3, 0x9d, 0x14, 0x2d, 0xb0, 0x80, 0x13, 0x17, 0xe9, 0x40, 0x4b, 0x05, 0xa7, 0x2c, 0xe3, 0x9d, 0x4d, + 0x6f, 0x29, 0x15, 0x5e, 0x2d, 0x14, 0x09, 0xa9, 0xed, 0xbd, 0xc4, 0x8c, 0x1a, 0x70, 0x4e, 0xf2, 0x0e, 0x02, 0x4e, + 0x6a, 0xaa, 0xb1, 0x46, 0x71, 0xaa, 0x13, 0x9c, 0x57, 0x6a, 0xe8, 0x12, 0xe5, 0xc4, 0x6d, 0xb7, 0x55, 0xd1, 0x42, + 0x7d, 0x3c, 0xc8, 0x59, 0x22, 0x8f, 0x07, 0x14, 0xba, 0xc8, 0xa3, 0x21, 0x5f, 0x90, 0x52, 0xad, 0x1c, 0xa5, 0x5a, + 0xdd, 0x95, 0x0c, 0x14, 0x72, 0x15, 0xe4, 0x0d, 0x31, 0xee, 0x5a, 0x99, 0xb7, 0xb8, 0x72, 0x42, 0x4a, 0x93, 0xf0, + 0xb9, 0xa5, 0x18, 0x58, 0xc1, 0xde, 0x98, 0xba, 0xc2, 0x25, 0x42, 0xdb, 0xdd, 0x86, 0x98, 0x64, 0xb0, 0x6e, 0xb6, + 0xdb, 0x57, 0x65, 0x38, 0xcf, 0x16, 0x54, 0x8c, 0xb2, 0x14, 0x21, 0xc4, 0xb4, 0x87, 0xae, 0xe9, 0x82, 0x9e, 0x18, + 0x6a, 0xdb, 0xe3, 0x24, 0xe9, 0x62, 0x4d, 0x92, 0x18, 0xc5, 0x17, 0xa2, 0x94, 0x6b, 0x8d, 0x10, 0x3c, 0xdc, 0xff, + 0x48, 0x21, 0x86, 0x9b, 0x5e, 0x77, 0xbf, 0xee, 0xdc, 0x10, 0xff, 0x80, 0x40, 0x02, 0x05, 0x7b, 0x55, 0x8e, 0x2e, + 0xb2, 0x22, 0xc5, 0x9d, 0x2a, 0xa3, 0xe2, 0xca, 0x75, 0xe0, 0xb7, 0xdc, 0xf0, 0xaf, 0x86, 0x28, 0x40, 0x5c, 0xe3, + 0x4a, 0x31, 0x9e, 0xb5, 0xb5, 0x14, 0xc9, 0x28, 0x36, 0x24, 0x2a, 0x9c, 0xa8, 0xe8, 0x2e, 0x4f, 0xa3, 0x7b, 0x68, + 0xd7, 0x20, 0xb8, 0x6a, 0xee, 0x6c, 0xa4, 0xf9, 0x82, 0x10, 0x39, 0x01, 0x02, 0x36, 0xaa, 0x3e, 0xb5, 0x56, 0xd5, + 0xc3, 0xac, 0xf2, 0xb9, 0x3a, 0x88, 0x57, 0x15, 0xf0, 0xb0, 0xce, 0xf6, 0xbe, 0xaa, 0x1c, 0xd6, 0x06, 0xdf, 0x6e, + 0xb7, 0xab, 0x6a, 0x1e, 0x04, 0x0e, 0xa3, 0xf9, 0x9d, 0x94, 0x98, 0xf7, 0xc6, 0x14, 0x56, 0xbc, 0xeb, 0xd2, 0xd6, + 0x4d, 0x6a, 0x8d, 0x05, 0xea, 0x0e, 0xd7, 0x07, 0x3c, 0x4f, 0x81, 0xa3, 0x1d, 0x15, 0x53, 0x61, 0x74, 0xe5, 0xd8, + 0x95, 0x0a, 0x03, 0x43, 0xff, 0x90, 0xb2, 0x0d, 0x98, 0xe3, 0x81, 0xb5, 0x0d, 0xfa, 0x29, 0x49, 0x2d, 0xcc, 0x18, + 0x8d, 0x59, 0xc4, 0xba, 0x8e, 0x8e, 0xb8, 0x8a, 0xde, 0xce, 0xa3, 0xbf, 0x3d, 0x1d, 0xd3, 0x32, 0x2e, 0x52, 0x71, + 0x0d, 0x2a, 0x08, 0x50, 0x86, 0xa0, 0xe1, 0xbf, 0xa2, 0x06, 0xa0, 0x41, 0xb0, 0x03, 0xf0, 0x8f, 0x4e, 0xa7, 0x41, + 0x53, 0x93, 0x8b, 0x49, 0x2a, 0x8b, 0x9c, 0xb5, 0xa1, 0xcc, 0x64, 0x72, 0x48, 0x1e, 0x17, 0x80, 0xe7, 0x88, 0xcd, + 0x92, 0x36, 0x17, 0x72, 0xb3, 0xc9, 0xd7, 0x92, 0x1d, 0xb9, 0xf3, 0x8a, 0xd6, 0x6b, 0x51, 0xd9, 0x49, 0xcc, 0x17, + 0xd3, 0x3b, 0x23, 0x0c, 0x9c, 0xea, 0xd6, 0xdc, 0xee, 0x40, 0xa7, 0x99, 0xfa, 0x74, 0x6e, 0x02, 0xc4, 0x01, 0x86, + 0xeb, 0x6e, 0x7e, 0xbb, 0x20, 0xf4, 0x8e, 0xdd, 0x19, 0xb1, 0xea, 0xad, 0x91, 0x8b, 0xe8, 0xb4, 0xdb, 0xc1, 0x04, + 0x2e, 0xe3, 0xac, 0x34, 0x2f, 0x94, 0xba, 0xa1, 0xec, 0x68, 0x9b, 0x30, 0x9f, 0x77, 0xb4, 0x1b, 0x2e, 0xf8, 0x46, + 0xac, 0x63, 0xdd, 0x90, 0xa6, 0x12, 0x3d, 0x3a, 0x50, 0xdb, 0x21, 0xa0, 0x39, 0x1b, 0xd3, 0x25, 0x40, 0x6d, 0xc2, + 0x7e, 0x59, 0x83, 0x59, 0xca, 0x25, 0xf4, 0xb5, 0xdb, 0x27, 0xf9, 0x52, 0xf6, 0xa4, 0x72, 0x96, 0x28, 0xf8, 0x72, + 0xa4, 0xe0, 0x95, 0x95, 0xf3, 0x58, 0xcf, 0x21, 0xe0, 0xb1, 0xc8, 0x12, 0x9d, 0x93, 0xe2, 0x0a, 0x94, 0xa9, 0x70, + 0x04, 0xea, 0xaa, 0x11, 0x4b, 0x38, 0xc0, 0xed, 0xc5, 0xd3, 0x80, 0x50, 0x90, 0xea, 0xae, 0xcd, 0x8a, 0xbc, 0x63, + 0x27, 0x9b, 0x3b, 0x30, 0x8b, 0xad, 0xd7, 0x55, 0xeb, 0x2b, 0x93, 0x6c, 0x3f, 0x6e, 0x08, 0xb6, 0xdd, 0x91, 0xf2, + 0x85, 0x77, 0xf4, 0x96, 0x6c, 0x6e, 0xfb, 0xfd, 0x10, 0xfa, 0x43, 0xa8, 0xea, 0xd0, 0x5d, 0x67, 0x87, 0xee, 0x5c, + 0xe6, 0xd7, 0xe8, 0xf9, 0xa4, 0x37, 0xc4, 0x07, 0x34, 0xd1, 0xa2, 0xab, 0xf8, 0x1e, 0x36, 0x75, 0x54, 0x53, 0x59, + 0x79, 0x94, 0x50, 0x50, 0x01, 0x67, 0xbc, 0x3a, 0xe3, 0x18, 0xdb, 0x54, 0x3d, 0xbd, 0x53, 0xbc, 0xda, 0x5a, 0xaf, + 0xcd, 0x6a, 0x7d, 0x01, 0x16, 0x01, 0x17, 0x3c, 0xba, 0x56, 0xb4, 0xe4, 0xca, 0x61, 0xea, 0xcf, 0x71, 0x54, 0x82, + 0xcb, 0x38, 0xcb, 0x79, 0x1a, 0xd0, 0x4b, 0xbf, 0xff, 0xa1, 0xb2, 0x95, 0x5a, 0x7a, 0x67, 0xee, 0x4d, 0x48, 0x36, + 0xff, 0x63, 0x03, 0xf5, 0x3a, 0xc4, 0x88, 0xa8, 0x7a, 0x41, 0xbf, 0x65, 0x10, 0x1b, 0x33, 0xa8, 0xd6, 0x49, 0xc2, + 0xab, 0x2a, 0xd0, 0x4a, 0xad, 0x35, 0x5b, 0xeb, 0xf3, 0xec, 0x11, 0x3b, 0x79, 0xd4, 0x63, 0xec, 0x8e, 0xd0, 0x44, + 0xe9, 0x84, 0x74, 0x8d, 0x91, 0xa3, 0x05, 0x52, 0x1d, 0x8a, 0xb2, 0xcb, 0xf0, 0x2d, 0x0a, 0x59, 0xda, 0xfb, 0x5c, + 0x9f, 0xc8, 0xf2, 0x1b, 0x65, 0x74, 0x11, 0xc9, 0x44, 0x90, 0x8d, 0xdf, 0x22, 0x60, 0x2f, 0x34, 0x3b, 0x20, 0x9b, + 0x25, 0x3b, 0xa3, 0xe7, 0xc6, 0x04, 0x06, 0x5e, 0xbf, 0x95, 0x89, 0x7a, 0x94, 0x25, 0xd1, 0x95, 0x46, 0x2e, 0xf7, + 0x21, 0x89, 0xce, 0x43, 0xe2, 0xe6, 0x86, 0xa5, 0x75, 0x13, 0xa2, 0x98, 0x59, 0x6f, 0x78, 0xd9, 0xdd, 0x47, 0xde, + 0xb6, 0xd2, 0x3e, 0xd5, 0x77, 0x26, 0x8d, 0x4c, 0xa1, 0xaf, 0xc3, 0x49, 0xbf, 0x0f, 0x7f, 0x15, 0xfd, 0xc0, 0x5b, + 0x0a, 0xfe, 0x62, 0x8f, 0x48, 0x93, 0xb0, 0x00, 0xe0, 0x08, 0x73, 0x5e, 0xfb, 0x13, 0xf8, 0x88, 0x9d, 0x6c, 0x1e, + 0x85, 0x67, 0xde, 0xcc, 0xdd, 0x87, 0x78, 0xa9, 0x4a, 0x7a, 0xce, 0x3c, 0xe9, 0x81, 0x58, 0x85, 0x7a, 0xbf, 0xde, + 0x31, 0xa3, 0x4f, 0x00, 0x22, 0x75, 0x67, 0x1c, 0x4a, 0xf1, 0x63, 0xdd, 0x65, 0xb2, 0x49, 0x59, 0x9b, 0x89, 0x92, + 0x2a, 0x12, 0x7f, 0x11, 0x40, 0xbf, 0x61, 0x38, 0x1a, 0x80, 0xf7, 0x56, 0x63, 0xaf, 0x87, 0xc6, 0x19, 0x53, 0x4d, + 0xcf, 0x36, 0x6a, 0x79, 0x5b, 0x0a, 0xa1, 0xc7, 0x22, 0xba, 0xb3, 0xc7, 0x62, 0x78, 0x46, 0xdf, 0x42, 0x85, 0xaf, + 0x43, 0x8c, 0xa6, 0x4b, 0x9a, 0x66, 0xba, 0x96, 0x5b, 0xe9, 0x96, 0xd0, 0x1c, 0xa3, 0xf8, 0x38, 0x6d, 0xbb, 0xa7, + 0x5a, 0x68, 0x4f, 0x28, 0x0f, 0xef, 0x68, 0x4d, 0x6f, 0x0d, 0x8b, 0x60, 0x91, 0x96, 0x9d, 0xfc, 0x84, 0x5e, 0x38, + 0x02, 0x93, 0xb2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x33, 0x35, 0x52, 0x0e, 0x47, 0xe1, 0x4b, 0x36, 0x20, + 0x57, 0x50, 0x8b, 0x35, 0x66, 0x27, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x33, 0x29, 0x88, 0x64, 0x44, 0x73, 0x0b, + 0xf1, 0xf4, 0x0f, 0xd0, 0xf4, 0x41, 0x5a, 0x98, 0xd2, 0x35, 0x0a, 0x78, 0x40, 0xdf, 0xd4, 0xef, 0xe7, 0xf8, 0xdc, + 0x38, 0x96, 0x58, 0xd8, 0xe3, 0x25, 0xa1, 0x4b, 0x27, 0x6e, 0x14, 0x48, 0x9b, 0x2d, 0xab, 0x00, 0xac, 0x48, 0x02, + 0x8d, 0x48, 0xd0, 0x52, 0xc7, 0x8a, 0xcb, 0x36, 0x68, 0x40, 0x12, 0x15, 0x14, 0xb2, 0x44, 0x02, 0xf8, 0x61, 0x04, + 0x21, 0x8a, 0x62, 0x10, 0xf7, 0xaa, 0xe5, 0x15, 0x37, 0x54, 0x83, 0x13, 0x45, 0x30, 0xc1, 0x2a, 0x9d, 0x02, 0xb1, + 0x2d, 0xd6, 0x2b, 0xf0, 0xbc, 0xb4, 0x17, 0x49, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x95, 0x4e, 0xdb, 0xe5, 0xed, 0x88, + 0x96, 0x6a, 0x36, 0x77, 0x5e, 0x2c, 0x0c, 0xf7, 0x58, 0xbb, 0xdb, 0x81, 0xf6, 0xc2, 0x7a, 0x47, 0x44, 0x0d, 0x56, + 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xaa, 0x5e, 0x59, 0x26, 0xa0, 0xa6, 0xab, 0xb8, 0x5e, 0x46, 0xd9, 0x08, 0xfe, + 0x6c, 0xb7, 0xc1, 0x61, 0x00, 0x16, 0x90, 0xbf, 0xbc, 0xff, 0x29, 0xc2, 0xf0, 0x4c, 0xbf, 0xbc, 0xff, 0x69, 0xbb, + 0x7d, 0x3a, 0x1e, 0x6b, 0xae, 0xc0, 0xaa, 0x75, 0x80, 0x3f, 0xd0, 0x6c, 0x83, 0x59, 0xb2, 0xdb, 0xed, 0x53, 0xe0, + 0x20, 0x24, 0xdb, 0xa0, 0x77, 0xb1, 0x74, 0xe4, 0x92, 0xac, 0x86, 0xda, 0x91, 0x80, 0x55, 0xb7, 0xc3, 0x52, 0xec, + 0x52, 0x1f, 0x19, 0x82, 0x51, 0x2d, 0xfa, 0x17, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, 0xb2, 0xae, 0x57, 0x55, + 0x74, 0x78, 0x18, 0xaf, 0xb2, 0x51, 0x95, 0xc1, 0x36, 0xaf, 0x6e, 0xae, 0x00, 0x50, 0x21, 0xa0, 0xde, 0xbb, 0x75, + 0x91, 0xe9, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0x8d, 0x6e, 0x72, 0x4a, 0xcc, 0x03, 0xd8, + 0x1c, 0x6e, 0xb7, 0x1e, 0xbf, 0x70, 0x32, 0x7a, 0x3a, 0x5b, 0x66, 0xca, 0xa0, 0x93, 0xeb, 0xfd, 0x4f, 0x22, 0x27, + 0x0d, 0x15, 0x9f, 0x64, 0xfa, 0x22, 0x03, 0x3e, 0x8f, 0xbd, 0xa9, 0x42, 0x97, 0xe5, 0xf2, 0x5a, 0x03, 0x6c, 0x6c, + 0x76, 0x79, 0x3f, 0x4a, 0x39, 0x44, 0xa4, 0x08, 0x8c, 0xba, 0x66, 0x99, 0x11, 0xd7, 0xa6, 0xe2, 0xbe, 0xa5, 0x0a, + 0x7b, 0x53, 0x39, 0xce, 0x2a, 0x5c, 0x3b, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x02, 0x85, 0xa8, 0x1c, 0x8d, 0xe9, 0xac, + 0x40, 0x2a, 0x73, 0x98, 0x50, 0xcc, 0x61, 0xdf, 0xfd, 0x92, 0x5a, 0x73, 0x19, 0x57, 0xb8, 0xf7, 0xc2, 0x95, 0x99, + 0xdc, 0x09, 0x00, 0x45, 0x92, 0xb5, 0xff, 0xfc, 0x09, 0xa9, 0xf1, 0x3f, 0x53, 0xa5, 0x01, 0xe8, 0xfd, 0x0c, 0x35, + 0x59, 0x82, 0x80, 0xad, 0x98, 0xba, 0x68, 0xfa, 0x46, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x15, 0xdb, 0xc8, 0xf8, 0x39, + 0x51, 0x4d, 0x4b, 0x9e, 0xae, 0x8b, 0x34, 0x2e, 0x92, 0xfb, 0x88, 0x37, 0x53, 0x2c, 0x89, 0x55, 0x9a, 0x02, 0xfd, + 0xec, 0x77, 0xe1, 0xa7, 0xd2, 0x33, 0x01, 0xa7, 0x85, 0xbb, 0xad, 0x9c, 0xcd, 0x64, 0x18, 0x67, 0x64, 0xca, 0x25, + 0x62, 0xb7, 0xd1, 0xf7, 0xe8, 0x13, 0xfc, 0xc9, 0xd1, 0x13, 0x42, 0xef, 0xc4, 0xb4, 0x40, 0x50, 0xba, 0x22, 0x35, + 0xae, 0x9a, 0xd8, 0xaf, 0x29, 0x44, 0x71, 0xa8, 0x18, 0x84, 0xee, 0xd4, 0xed, 0x93, 0x7c, 0x9f, 0x29, 0xfb, 0x8d, + 0x2e, 0x5b, 0x90, 0x4d, 0x05, 0x1d, 0x13, 0xd6, 0xdb, 0xd3, 0xd9, 0xb3, 0x33, 0xe7, 0x37, 0x68, 0xc2, 0x41, 0x75, + 0x03, 0xed, 0x2a, 0xc9, 0x34, 0x46, 0xb1, 0x59, 0x8c, 0xb5, 0x1b, 0x13, 0x11, 0x04, 0x9d, 0x2e, 0x66, 0x61, 0xbb, + 0x9d, 0x10, 0x5f, 0x02, 0x09, 0x14, 0xb8, 0x72, 0x51, 0x4e, 0x42, 0x22, 0x2f, 0x64, 0x6a, 0xb2, 0x6e, 0x04, 0x0b, + 0xd4, 0x1a, 0x3b, 0x0a, 0xe8, 0x29, 0x37, 0x4f, 0x01, 0x7d, 0x5f, 0xb2, 0x53, 0x3e, 0x08, 0x86, 0x18, 0x5f, 0x35, + 0xa0, 0xb7, 0x42, 0x3e, 0x82, 0x87, 0x30, 0xb0, 0x5c, 0xf4, 0x65, 0xc9, 0x10, 0x56, 0xe8, 0xcf, 0x94, 0x4d, 0xbe, + 0xfe, 0xc6, 0xce, 0xef, 0xb5, 0x12, 0xb3, 0x83, 0x50, 0xdc, 0x5c, 0x4f, 0x80, 0xf8, 0xd5, 0xfc, 0x1a, 0xac, 0xab, + 0x95, 0xc4, 0xdb, 0x91, 0x3c, 0x54, 0xae, 0x1c, 0xdd, 0x7c, 0x52, 0xe9, 0x4f, 0x20, 0x48, 0x8d, 0x95, 0x94, 0xdb, + 0xef, 0x3e, 0x0a, 0x5b, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xed, 0xad, 0xe4, 0xc2, 0x17, 0xfe, 0x63, 0x9d, 0xef, 0x31, + 0x76, 0x88, 0x38, 0xc3, 0xe9, 0xf7, 0xc1, 0xb0, 0xbd, 0x5b, 0x99, 0x36, 0x24, 0xba, 0x96, 0x1f, 0x01, 0xfd, 0x1f, + 0xab, 0xf1, 0x3b, 0x45, 0x49, 0x5f, 0x12, 0xe7, 0x08, 0x57, 0xc4, 0x2b, 0x34, 0xd5, 0xeb, 0x8d, 0x1b, 0xfa, 0xa6, + 0xd4, 0x2f, 0x94, 0x82, 0xc3, 0xbc, 0xd5, 0x0a, 0x0f, 0x3c, 0xf3, 0xfe, 0xa8, 0x3c, 0x41, 0xf7, 0x6f, 0xb8, 0x37, + 0xfe, 0xa8, 0x58, 0x86, 0x37, 0xe5, 0x2c, 0xd3, 0x77, 0xb8, 0xdb, 0xac, 0x48, 0xc5, 0x2d, 0x63, 0xc1, 0xba, 0x90, + 0xe6, 0xab, 0x69, 0x30, 0xdb, 0x34, 0x91, 0x4c, 0xb6, 0xdf, 0xff, 0xe5, 0x9d, 0xb0, 0xd9, 0x20, 0x38, 0xab, 0x45, + 0x19, 0x5f, 0xf1, 0x60, 0xaa, 0x54, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0x63, 0xb5, 0x77, 0xf0, 0x64, 0xa8, + 0x99, 0x0e, 0x71, 0x6d, 0x74, 0x16, 0xf0, 0x56, 0x8f, 0xe6, 0x69, 0x0d, 0xbb, 0xcc, 0x55, 0x52, 0xfc, 0xd1, 0x92, + 0x64, 0x63, 0xfd, 0x9e, 0x0c, 0xdb, 0xc8, 0x67, 0xae, 0x01, 0x63, 0xe6, 0x56, 0xc8, 0x20, 0x77, 0x3d, 0x60, 0x84, + 0x90, 0x08, 0x54, 0xd6, 0x62, 0xe2, 0xbc, 0xd2, 0xe1, 0x1f, 0x6d, 0x60, 0x9c, 0x18, 0x03, 0xe3, 0x7c, 0x14, 0x21, + 0xa7, 0xa7, 0x7c, 0x90, 0x78, 0xb3, 0xf5, 0x97, 0x2c, 0x91, 0xde, 0x08, 0x42, 0x2f, 0xe0, 0xf7, 0xb8, 0xc5, 0x03, + 0x79, 0xc1, 0x29, 0xed, 0xcd, 0xe9, 0xf0, 0x65, 0x49, 0x86, 0x7f, 0x82, 0x77, 0x57, 0x6c, 0x2e, 0xcb, 0x09, 0x2c, + 0xee, 0xd8, 0x29, 0x9e, 0xe6, 0xb2, 0xc5, 0x09, 0x71, 0x88, 0x45, 0xee, 0x12, 0x0b, 0x18, 0x51, 0xcd, 0x68, 0xfc, + 0x78, 0xf6, 0xf6, 0x8d, 0xc2, 0x6c, 0xca, 0xdd, 0x0f, 0x60, 0x44, 0x95, 0xb4, 0xdd, 0x0c, 0xf8, 0x72, 0x84, 0x06, + 0xdb, 0xa9, 0x1d, 0xec, 0x7e, 0x5f, 0xa7, 0x9d, 0x14, 0x4e, 0x36, 0x2b, 0x06, 0xdd, 0x51, 0xda, 0x2c, 0xa5, 0x41, + 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0xab, 0xc5, 0xaa, 0xce, 0x87, 0xe1, 0x92, 0xc6, 0x46, 0x56, 0x6e, 0x76, 0x13, 0x8e, + 0x6c, 0x02, 0x5c, 0x9f, 0x84, 0xb2, 0xf2, 0xe7, 0xa0, 0x05, 0x9d, 0x09, 0x1c, 0xd1, 0x76, 0x1b, 0x42, 0x04, 0x8e, + 0x72, 0x38, 0x99, 0x85, 0xe5, 0x70, 0x28, 0x07, 0xbe, 0x24, 0x24, 0x7a, 0x53, 0xce, 0xb3, 0x85, 0x44, 0xec, 0x71, + 0x77, 0xd2, 0xaf, 0xa5, 0xe4, 0x94, 0x7b, 0x7f, 0x54, 0x64, 0xf3, 0x5b, 0x8a, 0x31, 0x07, 0xad, 0x66, 0x33, 0x03, + 0x09, 0xeb, 0x69, 0x4d, 0xe4, 0x3a, 0x32, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, 0x75, 0x8b, 0x23, 0xd6, 0xd3, + 0x7a, 0x0f, 0x2a, 0x40, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x5e, 0x56, 0xa1, 0xa0, 0x9c, 0xf8, 0xcc, 0x8c, 0x11, + 0x0d, 0x96, 0x20, 0x24, 0x8d, 0xab, 0xfa, 0xb5, 0x48, 0xb3, 0xcb, 0x0c, 0x10, 0x13, 0xac, 0xff, 0x9c, 0xf0, 0xde, + 0x3c, 0x93, 0xf3, 0xd2, 0x95, 0x38, 0x33, 0x30, 0x1f, 0x5d, 0x6f, 0x69, 0x49, 0xa2, 0x12, 0x68, 0x94, 0xab, 0xe5, + 0xf9, 0xfb, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x69, 0x3b, 0xc4, 0x4f, 0x58, 0x4d, 0x9c, 0xd3, 0xba, 0x96, 0x22, + 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xc8, 0xe1, 0x03, 0x83, 0x0a, 0x2b, 0xf9, 0x29, 0x70, 0xf8, 0x8c, + 0x81, 0xa4, 0xab, 0x45, 0x70, 0x35, 0x3a, 0xc2, 0x8a, 0x32, 0xb5, 0xc4, 0x14, 0x12, 0xdd, 0x7a, 0xa1, 0x35, 0x86, + 0x51, 0x76, 0x15, 0xf9, 0xdf, 0xab, 0xee, 0xfd, 0x51, 0x6d, 0xb7, 0x30, 0xc9, 0x8e, 0xc7, 0x15, 0x6c, 0x6a, 0xd4, + 0x0a, 0xe1, 0xec, 0x9c, 0xd6, 0xa8, 0x1d, 0xeb, 0x85, 0x05, 0x90, 0x07, 0xb0, 0x15, 0xf1, 0x28, 0x83, 0x60, 0x6f, + 0xca, 0x79, 0xb5, 0xb0, 0xa2, 0x1c, 0x21, 0xf1, 0xbe, 0xc4, 0x28, 0xe5, 0x70, 0x15, 0x0b, 0x4b, 0x86, 0xfc, 0xea, + 0xe8, 0xb2, 0x14, 0xd7, 0x20, 0x29, 0xd1, 0x0c, 0x95, 0xe1, 0x75, 0x71, 0xd5, 0x16, 0x84, 0xf6, 0x2e, 0x2a, 0x50, + 0x47, 0x82, 0xe0, 0xc5, 0xab, 0x21, 0x66, 0x1b, 0xb9, 0xbb, 0xa2, 0xbd, 0xe4, 0x80, 0x5a, 0xdd, 0xb5, 0x5d, 0x6f, + 0xd2, 0x36, 0xdb, 0x88, 0x0b, 0xff, 0x82, 0xd2, 0x4f, 0xf9, 0xa0, 0x74, 0xa9, 0x04, 0x6e, 0x7c, 0xb9, 0xc9, 0xb2, + 0xcb, 0x7b, 0x5c, 0xfa, 0xb5, 0x37, 0x7e, 0xfd, 0x7e, 0x4f, 0x2e, 0x04, 0x2f, 0x15, 0x98, 0x6f, 0x97, 0x99, 0xaa, + 0xb5, 0xa6, 0xd4, 0x5c, 0x82, 0x6b, 0x6b, 0x3f, 0x82, 0x8a, 0xb8, 0xae, 0xc8, 0x64, 0x72, 0x80, 0x0e, 0x9c, 0xac, + 0x70, 0x2b, 0x0b, 0xf0, 0xd8, 0x09, 0xc8, 0x76, 0xcb, 0xc3, 0x40, 0x1d, 0x3a, 0x81, 0xbb, 0x25, 0xcf, 0x90, 0x59, + 0x33, 0x8f, 0x3f, 0x2b, 0xc1, 0x3f, 0xb6, 0xe0, 0x27, 0x14, 0x77, 0x1a, 0x99, 0x7f, 0x2b, 0xad, 0x5b, 0xdc, 0xbf, + 0x93, 0x69, 0x42, 0x51, 0x99, 0xd0, 0xb8, 0x95, 0xfe, 0x4b, 0x07, 0x4b, 0x92, 0xd9, 0x3f, 0x08, 0xf8, 0x60, 0xe6, + 0x3d, 0x31, 0xef, 0x49, 0x73, 0xba, 0xb5, 0x82, 0x21, 0x40, 0xa1, 0x9f, 0x93, 0xb9, 0xa6, 0xea, 0xf9, 0xe7, 0x35, + 0x5f, 0x73, 0xbf, 0xc5, 0x26, 0xe9, 0x81, 0x06, 0x3b, 0x79, 0x14, 0xa5, 0xb0, 0x12, 0x75, 0xae, 0x25, 0xea, 0x55, + 0xc3, 0x32, 0x54, 0x27, 0x38, 0x35, 0x4f, 0xd5, 0xb0, 0xfb, 0x89, 0x68, 0xad, 0x24, 0x2d, 0x31, 0x60, 0xad, 0x23, + 0x0f, 0xc9, 0xed, 0x5a, 0xc7, 0x9d, 0x86, 0xba, 0x34, 0x89, 0x12, 0x60, 0x84, 0x0b, 0x70, 0x04, 0xfd, 0x54, 0x86, + 0x1c, 0xae, 0xa9, 0x52, 0xbf, 0xa0, 0x28, 0x79, 0xe2, 0x28, 0x6a, 0x95, 0x22, 0xdd, 0x7c, 0x94, 0x63, 0x37, 0x5c, + 0xe3, 0x84, 0x9c, 0x68, 0xa1, 0xbf, 0x3d, 0x96, 0x72, 0x86, 0x16, 0x0f, 0xf2, 0x04, 0xeb, 0xe5, 0x2d, 0x05, 0x8a, + 0x3e, 0xba, 0x8c, 0xba, 0xe6, 0x15, 0xda, 0xbe, 0x2c, 0xfb, 0xfd, 0xdc, 0xd4, 0x93, 0xb2, 0x93, 0xcd, 0x52, 0xef, + 0x43, 0x54, 0x4c, 0xe1, 0xae, 0x4f, 0x14, 0x7f, 0x15, 0xaa, 0xab, 0xb6, 0xc8, 0xf9, 0x88, 0x23, 0x2e, 0x46, 0x4e, + 0x9a, 0x9f, 0xe5, 0xd4, 0x4b, 0x71, 0xbf, 0xac, 0xe4, 0xd7, 0x4a, 0x5b, 0x31, 0x5a, 0xa0, 0xfe, 0x54, 0xaa, 0xbc, + 0x5f, 0x94, 0x00, 0xf7, 0x54, 0xb1, 0x37, 0x60, 0x5f, 0xa1, 0x10, 0x7e, 0x5b, 0x02, 0xfe, 0x8d, 0xe4, 0x06, 0x8c, + 0x02, 0x03, 0x8c, 0x26, 0xdb, 0x73, 0x9a, 0xc0, 0x01, 0x57, 0x29, 0x15, 0x05, 0xad, 0xf4, 0xd0, 0x50, 0x53, 0x18, + 0x3d, 0x43, 0x19, 0xb7, 0xcc, 0xec, 0xdc, 0x18, 0x3b, 0x2d, 0xf0, 0x3c, 0x7f, 0x3e, 0x27, 0xf4, 0xb0, 0x56, 0x07, + 0xa9, 0xd1, 0x49, 0x74, 0x7f, 0xec, 0xc2, 0xc9, 0xf5, 0xc2, 0x59, 0x36, 0x2c, 0x81, 0xee, 0xc0, 0x05, 0x31, 0xee, + 0xf7, 0x73, 0x38, 0x32, 0xf5, 0xc8, 0x97, 0x2c, 0xa7, 0x31, 0x5b, 0x52, 0xe5, 0x69, 0x77, 0x55, 0x87, 0x39, 0x5d, + 0x1a, 0x19, 0x6f, 0xca, 0x8a, 0x79, 0x0e, 0x1a, 0x49, 0xf8, 0xd3, 0x6d, 0xed, 0x92, 0xce, 0x97, 0x90, 0x01, 0xfe, + 0x80, 0x44, 0x14, 0xb1, 0xaf, 0xff, 0xad, 0xc6, 0x49, 0x3d, 0x51, 0xda, 0xb0, 0x84, 0xae, 0x99, 0xaa, 0x9f, 0x5e, + 0xb2, 0xb5, 0xb7, 0x14, 0xb6, 0xdb, 0xd0, 0x4f, 0x60, 0x8a, 0x73, 0x25, 0xd3, 0x4b, 0xd4, 0x49, 0x01, 0x15, 0x0b, + 0x2f, 0x71, 0xf9, 0xa5, 0x84, 0x42, 0x73, 0xe7, 0xcb, 0x85, 0x56, 0x62, 0x42, 0xab, 0xc4, 0xe7, 0x0f, 0x95, 0xfe, + 0x5a, 0x7b, 0xc4, 0xfd, 0x2b, 0x0d, 0x13, 0x5d, 0x24, 0x2a, 0x44, 0x67, 0xbf, 0x82, 0x2c, 0xa7, 0x02, 0x1c, 0xcb, + 0x33, 0xd1, 0xd0, 0x1f, 0x53, 0x88, 0x83, 0x0e, 0x0d, 0x7a, 0x57, 0x8a, 0xeb, 0xac, 0xe2, 0x21, 0xde, 0x13, 0x1c, + 0xcd, 0xe8, 0x7e, 0x83, 0x0f, 0x65, 0xed, 0xd1, 0xab, 0xc8, 0xc6, 0x51, 0xee, 0x37, 0xbf, 0x56, 0xe1, 0x1c, 0xa2, + 0x55, 0x2e, 0xa8, 0x52, 0x57, 0x5b, 0x00, 0x2a, 0xc7, 0xf6, 0xea, 0x11, 0x9c, 0x6e, 0xea, 0xfa, 0x56, 0x87, 0xd6, + 0x1c, 0x40, 0x98, 0x43, 0xb2, 0x69, 0xb8, 0xda, 0x01, 0xf6, 0x48, 0xac, 0xd7, 0x40, 0x63, 0xed, 0xd6, 0xec, 0xb4, + 0x47, 0x71, 0x98, 0xc8, 0x4c, 0x5b, 0xa4, 0x68, 0x73, 0xb7, 0x4e, 0x8b, 0xa2, 0x0d, 0x9a, 0x21, 0xec, 0xde, 0x75, + 0xf8, 0xba, 0x15, 0x61, 0x7d, 0xbf, 0xed, 0x0b, 0x8c, 0x86, 0x36, 0xd7, 0xee, 0x39, 0x86, 0x6e, 0xd8, 0x60, 0x13, + 0x39, 0x0f, 0x91, 0x0f, 0x33, 0x79, 0x20, 0x8a, 0xc6, 0x18, 0xb0, 0x3d, 0xe2, 0x6a, 0xd3, 0x4a, 0x7e, 0x5e, 0xc6, + 0x9c, 0xed, 0x19, 0xe3, 0x94, 0xd6, 0xd7, 0xb8, 0xe6, 0xb8, 0x2c, 0xa4, 0x6a, 0x8c, 0x67, 0x3c, 0x0c, 0x3b, 0x5f, + 0xe0, 0xce, 0xac, 0x31, 0x78, 0x11, 0x96, 0x4a, 0x76, 0x2a, 0x57, 0x9f, 0xc3, 0x16, 0x47, 0xb3, 0x31, 0xa7, 0xbf, + 0xff, 0x72, 0xc5, 0x17, 0xe8, 0xa6, 0x66, 0xfd, 0x08, 0x82, 0xac, 0x40, 0x87, 0x2c, 0xa9, 0x7a, 0xfc, 0xae, 0x04, + 0x6a, 0x0f, 0xf3, 0xf0, 0x5d, 0xc9, 0x8a, 0xf8, 0x26, 0xbb, 0x8a, 0x6b, 0x51, 0x8e, 0x6e, 0x78, 0x91, 0x8a, 0xd2, + 0x48, 0x8d, 0x83, 0xd3, 0xd5, 0x2a, 0xe7, 0x01, 0x98, 0xca, 0x1b, 0x46, 0xd9, 0x54, 0x96, 0xa9, 0xc1, 0x55, 0xf2, + 0xf4, 0x5a, 0x89, 0xce, 0xab, 0x9b, 0xab, 0x20, 0xc2, 0x5f, 0x17, 0xfa, 0xc7, 0x75, 0x5c, 0x7d, 0x0c, 0x22, 0x63, + 0x53, 0xa7, 0x7f, 0xa0, 0x54, 0x1e, 0xfc, 0xa7, 0x40, 0xa6, 0xfb, 0x5d, 0x09, 0x96, 0xd9, 0xa6, 0xe2, 0xe3, 0x18, + 0x6b, 0x1d, 0x4e, 0xc8, 0x4c, 0x96, 0xe8, 0xbc, 0x4b, 0xd6, 0x25, 0x58, 0xfb, 0x49, 0x2c, 0x63, 0x99, 0x6b, 0x86, + 0x95, 0xc9, 0x8a, 0xf4, 0xac, 0xac, 0xd9, 0x61, 0x68, 0x9c, 0x68, 0xe6, 0xe8, 0x2d, 0xa0, 0x1e, 0xc8, 0xe1, 0x15, + 0x2d, 0xd6, 0xcc, 0xf1, 0xb1, 0xf1, 0x5e, 0x3f, 0x3a, 0xbc, 0x72, 0x04, 0x4a, 0xe6, 0x4e, 0x8e, 0xc2, 0x44, 0xf0, + 0xac, 0xd5, 0xe3, 0x8b, 0x3c, 0x2b, 0x60, 0xe5, 0x4c, 0xc6, 0x63, 0xea, 0x2c, 0xad, 0xd6, 0xcd, 0xd1, 0x22, 0xb9, + 0x66, 0x8f, 0xeb, 0xc7, 0x9c, 0x1c, 0xf2, 0x96, 0xa9, 0x6d, 0xdb, 0x3a, 0xce, 0xd1, 0xe4, 0x4b, 0xd3, 0xfd, 0x6a, + 0x6d, 0x22, 0xa2, 0x4b, 0xe7, 0x3e, 0xeb, 0x15, 0xdc, 0xfa, 0xa6, 0xd0, 0xf4, 0x5a, 0x00, 0x10, 0x9d, 0x32, 0xe0, + 0x2f, 0x59, 0xb1, 0x1e, 0xd5, 0xbc, 0xaa, 0x41, 0xc2, 0x82, 0x22, 0xbc, 0x29, 0xf6, 0xa6, 0xb4, 0x37, 0x4e, 0xc7, + 0x61, 0x07, 0x2e, 0xa6, 0xe8, 0x8e, 0x03, 0x76, 0xfd, 0x5a, 0x2b, 0x1a, 0xa9, 0x5f, 0xb6, 0x2f, 0xb1, 0xea, 0x8b, + 0x52, 0xe6, 0x99, 0x9c, 0x12, 0x8b, 0xdd, 0x56, 0x2e, 0xac, 0xa8, 0xdf, 0x30, 0xe1, 0xd2, 0x95, 0x20, 0x20, 0xd3, + 0x92, 0xf5, 0x4a, 0xbd, 0x8b, 0xc4, 0x1a, 0x08, 0x19, 0x18, 0xbe, 0x06, 0xeb, 0xa2, 0xe2, 0xda, 0x0a, 0xd6, 0xb9, + 0xe7, 0xab, 0x84, 0x42, 0x14, 0x3c, 0xb0, 0x13, 0xf4, 0x43, 0xeb, 0xe6, 0x6d, 0x29, 0x51, 0x06, 0xf1, 0xb8, 0x95, + 0x53, 0x0e, 0x12, 0x08, 0xc0, 0x3d, 0x95, 0x21, 0x38, 0x24, 0xc8, 0x3a, 0xb8, 0x9a, 0x71, 0x04, 0x57, 0x97, 0xce, + 0x5c, 0x5c, 0x03, 0xac, 0x4b, 0x7f, 0x2e, 0x13, 0x5c, 0x58, 0x8d, 0xa8, 0x34, 0x67, 0x9c, 0x62, 0x10, 0x23, 0x43, + 0xd0, 0x57, 0x86, 0xd2, 0x5e, 0x81, 0xa6, 0xf1, 0x9a, 0xad, 0xa4, 0x0f, 0x00, 0xbd, 0x60, 0x2b, 0x69, 0xec, 0x8f, + 0x5f, 0x9f, 0xb3, 0x95, 0x92, 0x06, 0x4f, 0xaf, 0x67, 0x17, 0xb3, 0xf3, 0x01, 0x3b, 0x8a, 0x42, 0x65, 0xc0, 0x10, + 0x58, 0x24, 0xfe, 0x60, 0x10, 0x16, 0xb2, 0x11, 0x83, 0x42, 0x46, 0xc1, 0x72, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, + 0xc3, 0x02, 0x43, 0x5e, 0x79, 0x2f, 0x48, 0x40, 0xa8, 0x2e, 0x0d, 0x5d, 0x1e, 0xc3, 0xe1, 0xe4, 0x60, 0x02, 0xa9, + 0x98, 0x99, 0xc9, 0xc2, 0xd8, 0x98, 0x44, 0x10, 0xef, 0xb4, 0xb3, 0x5e, 0x28, 0xb7, 0xbb, 0xc6, 0x42, 0x8d, 0xc3, + 0xe0, 0xb3, 0x2a, 0x9e, 0x1c, 0x0c, 0xbb, 0x2a, 0xc6, 0x51, 0xb8, 0xd1, 0xca, 0xb7, 0xf3, 0x63, 0x00, 0xaf, 0x3d, + 0x1f, 0xba, 0x72, 0x89, 0xf3, 0xc3, 0x27, 0xe4, 0xf1, 0x13, 0x42, 0xcf, 0xd9, 0xf9, 0x17, 0x4f, 0xe8, 0xb9, 0x24, + 0x27, 0x07, 0x93, 0xe8, 0x86, 0xe9, 0x06, 0x1c, 0x1e, 0xc9, 0x26, 0xd0, 0xab, 0xd1, 0xba, 0x90, 0x0b, 0x4c, 0x39, + 0x34, 0x85, 0xdf, 0x8e, 0x0f, 0x82, 0xc1, 0x4d, 0xbb, 0xe9, 0x37, 0xed, 0xb6, 0x3a, 0x5e, 0x5d, 0x07, 0x47, 0xd1, + 0x6e, 0x31, 0x93, 0x6f, 0xc6, 0x07, 0x76, 0x0e, 0xb0, 0xbe, 0x87, 0xc7, 0x44, 0x37, 0x69, 0x67, 0x54, 0xdc, 0x9a, + 0xbe, 0xc2, 0x3e, 0xf8, 0x45, 0x76, 0xf4, 0x61, 0xf8, 0x6f, 0x75, 0xa2, 0x39, 0xff, 0xe2, 0x08, 0xc8, 0x11, 0xc8, + 0x40, 0xb1, 0x44, 0x30, 0xc3, 0x81, 0xa6, 0x80, 0x82, 0x4c, 0x8d, 0x3b, 0x55, 0xc3, 0x2f, 0x47, 0x4d, 0xce, 0xc8, + 0x0d, 0x4c, 0x0d, 0xb6, 0x05, 0x3f, 0x90, 0xdd, 0x50, 0xdf, 0x28, 0x74, 0x23, 0xe5, 0x64, 0xa6, 0x5f, 0x52, 0xfd, + 0x83, 0xdd, 0x40, 0x00, 0x63, 0x0b, 0x2f, 0x28, 0xd8, 0x97, 0xc7, 0x57, 0x07, 0xb8, 0x8a, 0x00, 0x25, 0x8b, 0x05, + 0x5f, 0x0e, 0xae, 0xd4, 0xe6, 0x3e, 0x08, 0xc8, 0xe0, 0xcb, 0xe0, 0xe4, 0xcb, 0x81, 0x18, 0x04, 0xc7, 0x87, 0x57, + 0x27, 0x81, 0x35, 0xee, 0x87, 0x10, 0x8f, 0xb2, 0xa2, 0x98, 0x69, 0x34, 0x1f, 0xf4, 0x82, 0x92, 0x89, 0xb9, 0xa9, + 0x57, 0x1a, 0x9f, 0xd1, 0x74, 0x6a, 0x90, 0xbf, 0xc3, 0x94, 0xc5, 0xfa, 0x77, 0x30, 0xe1, 0xd7, 0x41, 0x64, 0x83, + 0xa0, 0xce, 0xf2, 0x28, 0xa6, 0x4b, 0x76, 0x5f, 0x85, 0x29, 0x4d, 0x0e, 0x73, 0x42, 0xa2, 0x70, 0x29, 0xc1, 0xf3, + 0xe4, 0xeb, 0x04, 0xe2, 0xb8, 0xda, 0xcf, 0x01, 0xd7, 0x8d, 0xe6, 0x87, 0x09, 0x69, 0x15, 0x61, 0x23, 0xb2, 0x6c, + 0x1a, 0x7a, 0xc9, 0xc2, 0x15, 0xbd, 0x02, 0x66, 0x4a, 0xac, 0xc3, 0x2b, 0xe0, 0xf2, 0xd6, 0xf3, 0xd5, 0x82, 0x5d, + 0x79, 0xd2, 0x37, 0xcd, 0x17, 0x5f, 0x1a, 0x9f, 0x3c, 0xe0, 0x21, 0xad, 0x1f, 0x5e, 0x0a, 0x36, 0x00, 0x37, 0x19, + 0xbf, 0xfd, 0x4e, 0xdc, 0xa9, 0x79, 0x69, 0x4f, 0x31, 0xce, 0x4c, 0x3b, 0x31, 0x69, 0x27, 0xe4, 0xee, 0x7d, 0x7b, + 0x13, 0xeb, 0x93, 0xbd, 0x8a, 0xd6, 0xd2, 0x65, 0xd5, 0x30, 0x24, 0xe5, 0x9a, 0x21, 0x7f, 0x8f, 0x92, 0x53, 0x23, + 0xf0, 0x64, 0x97, 0xbc, 0x4e, 0x96, 0xee, 0x41, 0x65, 0xac, 0x06, 0xcc, 0x31, 0x62, 0x58, 0x28, 0x1c, 0xfb, 0xd7, + 0x19, 0x2b, 0xd7, 0xae, 0x40, 0x23, 0x46, 0xee, 0xed, 0x75, 0xc6, 0x9c, 0x98, 0xab, 0xc9, 0xda, 0x09, 0x55, 0xe7, + 0xa4, 0xe7, 0x2d, 0xde, 0xcb, 0x2a, 0x35, 0xb4, 0x44, 0xf4, 0x60, 0x2c, 0xcd, 0x28, 0x65, 0xa2, 0xd2, 0xa0, 0x91, + 0x8a, 0x8d, 0x6d, 0xf0, 0x4b, 0x70, 0x42, 0xe5, 0x8e, 0x3a, 0xdb, 0xb5, 0x53, 0x2a, 0x1c, 0x60, 0x59, 0xaa, 0x55, + 0xe5, 0x76, 0x99, 0x09, 0x56, 0x0f, 0x82, 0xd1, 0x1f, 0x95, 0x28, 0x66, 0x78, 0x67, 0x64, 0xc1, 0x14, 0xac, 0x04, + 0x65, 0x2d, 0xc3, 0x62, 0xc8, 0x51, 0x8b, 0xa7, 0x7d, 0x52, 0x85, 0xfa, 0xd1, 0x11, 0x24, 0x77, 0xb9, 0x6e, 0x05, + 0xc9, 0x7d, 0x32, 0x7e, 0xa2, 0x06, 0x3a, 0x5d, 0x2b, 0xc7, 0x43, 0x97, 0xdf, 0x46, 0x7c, 0x6d, 0xd5, 0x7b, 0xaa, + 0xb4, 0x0a, 0x55, 0xa0, 0xc4, 0x8a, 0xd2, 0x95, 0x5a, 0xd0, 0xfd, 0x2e, 0x02, 0x60, 0x11, 0x1b, 0xb3, 0xf1, 0xae, + 0x6d, 0x56, 0x08, 0x1a, 0x5d, 0x76, 0xb2, 0x89, 0x07, 0x2c, 0x51, 0xad, 0x1d, 0x4c, 0x68, 0x7c, 0xc2, 0x8a, 0x7e, + 0x3f, 0x3f, 0x01, 0x7a, 0xaa, 0x8c, 0x98, 0x4a, 0x38, 0xf2, 0x3f, 0xb7, 0x22, 0x5d, 0x14, 0xd8, 0xac, 0xc9, 0xbb, + 0x35, 0x96, 0x91, 0xa8, 0xcb, 0x94, 0x2a, 0xaf, 0x72, 0x0c, 0x98, 0xd6, 0xeb, 0x96, 0xe3, 0xca, 0xae, 0xe2, 0xc8, + 0x51, 0x61, 0x19, 0x71, 0x5e, 0x8d, 0xe3, 0xad, 0xc6, 0x37, 0x38, 0xd4, 0x6c, 0xda, 0xa5, 0x3b, 0x84, 0xb0, 0x10, + 0x5e, 0x67, 0x70, 0x1b, 0x51, 0x76, 0x12, 0xa8, 0xbc, 0xd1, 0xd7, 0x09, 0x69, 0x73, 0xbb, 0x5e, 0x3b, 0x06, 0xe9, + 0x44, 0x1f, 0x28, 0xf5, 0x08, 0x5a, 0xa3, 0x58, 0x50, 0x39, 0xe2, 0x91, 0xe5, 0xe1, 0xad, 0x41, 0xac, 0x92, 0x2f, + 0x29, 0x2a, 0x45, 0x03, 0xf4, 0xbf, 0xe4, 0xb7, 0x07, 0xbf, 0xbc, 0xff, 0xe9, 0x8c, 0xc7, 0x65, 0xb2, 0x7c, 0x17, + 0x97, 0xf1, 0x75, 0x15, 0x6e, 0xe4, 0x18, 0xc5, 0x0d, 0x99, 0x56, 0x03, 0x26, 0xf4, 0x4a, 0xf2, 0x77, 0xa5, 0x22, + 0xc4, 0x58, 0x67, 0xb2, 0xae, 0x6a, 0x71, 0xed, 0x55, 0xba, 0x2e, 0x33, 0xfc, 0xb8, 0xe5, 0x73, 0x7a, 0x08, 0x40, + 0x9e, 0xda, 0x85, 0x34, 0x12, 0xaa, 0x10, 0x6d, 0x2e, 0xe2, 0x74, 0x7d, 0x3c, 0xf6, 0xba, 0x5e, 0xb0, 0xa7, 0xe3, + 0xaf, 0xa6, 0xaf, 0xb3, 0x30, 0x1b, 0x54, 0x64, 0x54, 0x2f, 0x79, 0xd1, 0x32, 0xe5, 0x94, 0x26, 0x01, 0xe8, 0xe3, + 0xd9, 0x63, 0xec, 0x68, 0x3c, 0x26, 0x9b, 0xb6, 0x78, 0x80, 0x87, 0xcb, 0x75, 0x58, 0x92, 0x99, 0xaa, 0x23, 0x0a, + 0x0a, 0x7e, 0x57, 0x07, 0x80, 0xe4, 0x68, 0xaa, 0xd2, 0x5c, 0x1a, 0x7b, 0x3a, 0x9e, 0x50, 0x81, 0xdd, 0x0e, 0x49, + 0xe3, 0x54, 0x68, 0x67, 0x5e, 0xb8, 0x1e, 0x45, 0x42, 0xbb, 0x2c, 0xed, 0x54, 0x2a, 0xe4, 0x9e, 0x99, 0xd9, 0xae, + 0x41, 0x0c, 0x86, 0x50, 0xd5, 0x5d, 0x38, 0x75, 0xef, 0x36, 0xd7, 0x98, 0xed, 0x80, 0xf7, 0x1a, 0x34, 0x43, 0xca, + 0x5b, 0xf4, 0x5b, 0x5b, 0x44, 0x43, 0x57, 0x6b, 0x30, 0x2b, 0x46, 0xd9, 0x52, 0x94, 0xae, 0x29, 0x28, 0x05, 0xa3, + 0xcb, 0xb5, 0xb3, 0x70, 0x5f, 0x0b, 0xef, 0xc2, 0x92, 0xa9, 0xd5, 0x22, 0xa5, 0x84, 0xf2, 0xa6, 0xa2, 0xa5, 0x84, + 0x91, 0xd4, 0xf0, 0xd4, 0xae, 0x17, 0x78, 0x9c, 0xe7, 0x41, 0xd4, 0xf2, 0x02, 0x3b, 0xad, 0xc9, 0x29, 0x38, 0x7a, + 0xe9, 0x9c, 0x9a, 0x02, 0xff, 0x98, 0x49, 0x10, 0xd3, 0xa1, 0xbc, 0xdf, 0xe0, 0xe6, 0xff, 0x47, 0xc9, 0x02, 0x87, + 0x6f, 0xbd, 0xc2, 0x6d, 0xf4, 0x8f, 0xd2, 0xa5, 0xa5, 0xcf, 0x84, 0xeb, 0xea, 0xe2, 0x48, 0x7b, 0xb3, 0x51, 0xb2, + 0xcc, 0xf2, 0xf4, 0x8d, 0x48, 0x79, 0x45, 0xa4, 0x09, 0x46, 0xc5, 0x4e, 0x2a, 0xef, 0x86, 0x07, 0x46, 0x8c, 0xde, + 0x8d, 0xef, 0xc7, 0x0c, 0x64, 0xc3, 0x60, 0xf5, 0xcd, 0x52, 0x91, 0xac, 0xaf, 0x01, 0x53, 0x44, 0xca, 0x4f, 0x5e, + 0xe4, 0x1c, 0x9e, 0x42, 0x75, 0xfd, 0x02, 0xb7, 0xb9, 0xca, 0xf5, 0x39, 0xff, 0x31, 0xa3, 0x3f, 0x22, 0xd0, 0x49, + 0xbc, 0x02, 0xb9, 0xc7, 0x33, 0xa8, 0x1b, 0x61, 0x6a, 0x39, 0x06, 0x07, 0x42, 0x34, 0x90, 0xa2, 0x66, 0x81, 0x84, + 0xba, 0xd0, 0xc0, 0x1a, 0xf2, 0x82, 0x39, 0xbc, 0xc8, 0x45, 0xf2, 0x71, 0xaa, 0x7d, 0xe6, 0x87, 0x31, 0xc6, 0x4c, + 0x0e, 0x06, 0x61, 0x3d, 0x0b, 0x86, 0xe3, 0xd1, 0xe4, 0xe8, 0x29, 0x9c, 0xdb, 0xc1, 0x38, 0x20, 0x83, 0xa0, 0xa9, + 0x56, 0x71, 0x41, 0xab, 0x9b, 0x2b, 0x53, 0x06, 0x7e, 0xdc, 0x04, 0x83, 0x7f, 0x94, 0x8e, 0xe2, 0x1d, 0x34, 0x27, + 0xe7, 0x22, 0x04, 0x1b, 0xfb, 0x35, 0x01, 0x49, 0x59, 0x4f, 0xf1, 0x93, 0xea, 0x70, 0x63, 0x52, 0xfb, 0xa7, 0x0f, + 0x2f, 0x38, 0xec, 0x90, 0x40, 0x81, 0x34, 0x9e, 0x66, 0xa3, 0x57, 0x52, 0x91, 0xfb, 0xae, 0xe4, 0x70, 0x67, 0xee, + 0x59, 0xd3, 0x23, 0xab, 0x90, 0xf0, 0xb3, 0x80, 0x1b, 0xf9, 0xab, 0xe2, 0x26, 0xce, 0xb3, 0xf4, 0xc0, 0x7f, 0x73, + 0x50, 0xdd, 0x17, 0x75, 0x7c, 0x37, 0x0a, 0xb4, 0x35, 0x21, 0x77, 0x55, 0x4f, 0x80, 0x9e, 0x00, 0x5b, 0x00, 0x0c, + 0x88, 0x77, 0xcc, 0x4c, 0x66, 0x3c, 0x02, 0x8f, 0x40, 0xdf, 0x07, 0xb2, 0xbc, 0xb7, 0x2e, 0x49, 0xee, 0x66, 0x2a, + 0xcc, 0x55, 0xaf, 0xd8, 0x29, 0xc8, 0x78, 0xb5, 0x15, 0xbb, 0x6e, 0x7d, 0xe6, 0x4d, 0x87, 0x57, 0xe0, 0x85, 0x00, + 0xb7, 0xc8, 0x7e, 0xdf, 0x17, 0x54, 0x56, 0x5a, 0x45, 0xbc, 0x93, 0xdc, 0xa0, 0x7f, 0xbb, 0x33, 0x36, 0x92, 0xe4, + 0x56, 0x0f, 0x0f, 0xa0, 0xca, 0xe4, 0x5c, 0x71, 0x3b, 0x87, 0xa8, 0xad, 0xbb, 0x71, 0xc0, 0x6a, 0x83, 0x76, 0x59, + 0x73, 0x04, 0x17, 0x5e, 0x1c, 0x64, 0x90, 0x13, 0x67, 0x65, 0x24, 0xd5, 0xb8, 0x9a, 0xd4, 0x82, 0x4f, 0xf2, 0x74, + 0x0f, 0x59, 0xea, 0x09, 0x50, 0xe4, 0x38, 0x16, 0x43, 0xba, 0xf1, 0x26, 0xf0, 0xf8, 0xbd, 0x08, 0x41, 0x9a, 0xb6, + 0xdd, 0xfa, 0x23, 0x50, 0x74, 0x0f, 0x4c, 0x41, 0x9a, 0x46, 0x9b, 0x1a, 0x28, 0xa8, 0x3d, 0xd4, 0x48, 0x45, 0x9c, + 0x9d, 0xbc, 0x06, 0x1d, 0x22, 0xf8, 0x7e, 0xa7, 0x59, 0xd5, 0xf1, 0x62, 0x42, 0xf0, 0xe4, 0x7d, 0x71, 0x97, 0x55, + 0x75, 0x15, 0xbd, 0x4f, 0xd1, 0x10, 0x2a, 0x11, 0x45, 0xf4, 0x12, 0xe2, 0xe9, 0x55, 0xf8, 0xbb, 0x8a, 0x7e, 0x4a, + 0x69, 0x9c, 0xa6, 0x98, 0xfe, 0xbc, 0x84, 0x9f, 0xcf, 0x00, 0xd5, 0x11, 0x77, 0x42, 0x74, 0x21, 0xc0, 0x5e, 0x0d, + 0xa2, 0x59, 0xd5, 0x1c, 0x30, 0x34, 0xa3, 0xfb, 0x8a, 0x22, 0x46, 0x1b, 0x66, 0xff, 0xa1, 0x44, 0xa1, 0x90, 0x2c, + 0xe6, 0xd7, 0xca, 0x3c, 0x44, 0x3f, 0x62, 0x91, 0xa7, 0xef, 0x5e, 0xe9, 0x21, 0x8d, 0xee, 0x05, 0x55, 0x5b, 0x1b, + 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xad, 0xe9, 0x79, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, 0x4f, 0xbc, 0x7b, 0xf5, 0x4c, + 0x5a, 0x98, 0x3c, 0xcf, 0x40, 0x71, 0x70, 0xfa, 0xee, 0xd5, 0x6b, 0x91, 0xae, 0x73, 0x1e, 0x9d, 0x0b, 0x24, 0xad, + 0xa7, 0xef, 0x5e, 0xfd, 0x8c, 0xe6, 0x5e, 0x3f, 0x95, 0xf0, 0xfe, 0x25, 0xf0, 0x96, 0x51, 0xbc, 0x86, 0x3e, 0xc9, + 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd4, 0x5a, 0x45, 0xbf, 0xa4, 0x8d, 0x23, 0xad, 0xfa, 0x67, 0xe9, 0x52, 0x3b, 0x47, + 0xc0, 0x73, 0x97, 0x67, 0xc5, 0xc7, 0xc8, 0x88, 0x76, 0x82, 0xe8, 0xcb, 0x83, 0xbb, 0xeb, 0xbc, 0xa8, 0x22, 0x7c, + 0xc1, 0xd0, 0x2e, 0x28, 0x3a, 0x3c, 0xbc, 0xbd, 0xbd, 0x1d, 0xdd, 0x7e, 0x35, 0x12, 0xe5, 0xd5, 0xe1, 0xe4, 0xdb, + 0x6f, 0xbf, 0x3d, 0xc4, 0xb7, 0xc1, 0x97, 0x6d, 0xb7, 0xf7, 0x9a, 0xf0, 0x01, 0x0b, 0x10, 0xa1, 0xfa, 0x4b, 0xb8, + 0xa2, 0x80, 0x16, 0x6e, 0xf0, 0x65, 0xf0, 0xa5, 0x3a, 0x74, 0xbe, 0x3c, 0xae, 0x6e, 0xae, 0x64, 0xf9, 0x5d, 0x25, + 0x1f, 0x8d, 0xc7, 0xe3, 0x43, 0x90, 0x40, 0x7d, 0x39, 0xe0, 0x83, 0xe0, 0x24, 0x18, 0x64, 0x70, 0xa1, 0xa9, 0x6e, + 0xae, 0x4e, 0x02, 0xc7, 0x34, 0xd7, 0x63, 0x11, 0x2d, 0x88, 0x4b, 0x70, 0x78, 0x45, 0x83, 0x2f, 0x03, 0x62, 0x53, + 0xbe, 0x80, 0x94, 0x2f, 0x8e, 0x9e, 0xba, 0x69, 0xff, 0x4b, 0xa6, 0x7d, 0xe5, 0xa6, 0x1d, 0x63, 0xda, 0x57, 0xcf, + 0xdc, 0xb4, 0x13, 0x99, 0xf6, 0xc2, 0x4d, 0xfb, 0xdf, 0xd5, 0x00, 0x52, 0x0f, 0x5c, 0xeb, 0xbf, 0x0b, 0xa7, 0x35, + 0x78, 0x0a, 0x45, 0xd9, 0x75, 0x7c, 0xc5, 0xa1, 0xd1, 0x83, 0xbb, 0xeb, 0x9c, 0x06, 0x03, 0x6c, 0xaf, 0x63, 0xe4, + 0xe1, 0x7c, 0xf0, 0xe5, 0xba, 0xcc, 0xc3, 0xe0, 0xcb, 0x01, 0x16, 0x32, 0xf8, 0x32, 0x20, 0x5f, 0xaa, 0x23, 0xed, + 0xae, 0x62, 0x9b, 0xc0, 0x86, 0x22, 0x1d, 0x9a, 0x00, 0x61, 0xae, 0x34, 0xae, 0xa1, 0x7f, 0x96, 0xdd, 0xd9, 0xf0, + 0x96, 0x28, 0xdd, 0x74, 0x83, 0x86, 0xbe, 0x05, 0xef, 0x04, 0x68, 0x54, 0x14, 0xdc, 0xc4, 0x65, 0x38, 0x1c, 0x56, + 0x37, 0x57, 0x04, 0xec, 0x32, 0x57, 0x3c, 0xae, 0xa3, 0xa0, 0x10, 0x43, 0xf9, 0x33, 0x90, 0x91, 0xaf, 0x02, 0x04, + 0x44, 0x82, 0xff, 0x82, 0x86, 0xbe, 0x13, 0x6c, 0x13, 0x0c, 0x6f, 0xf9, 0xc5, 0xc7, 0xac, 0x1e, 0x4a, 0xd1, 0xe2, + 0x5d, 0x45, 0xe1, 0x07, 0xfc, 0xb5, 0x55, 0x47, 0x7f, 0x82, 0x1b, 0xb7, 0xaf, 0x61, 0x7f, 0x27, 0x2c, 0x8b, 0xfa, + 0x4e, 0xcc, 0xb3, 0xc5, 0xb4, 0x75, 0xa0, 0xbf, 0x15, 0xa4, 0x9e, 0x67, 0x83, 0x60, 0x18, 0x0c, 0xf8, 0x82, 0xbd, + 0x15, 0x73, 0xee, 0x98, 0x4f, 0x3d, 0x12, 0xee, 0x34, 0xcf, 0xb2, 0x01, 0xf8, 0xa6, 0x20, 0x3f, 0x72, 0xf8, 0xdf, + 0xf3, 0x21, 0x0a, 0x0f, 0x07, 0x8f, 0x0e, 0xc9, 0x2c, 0x58, 0xdd, 0xa1, 0x47, 0x67, 0x14, 0x64, 0xc5, 0x92, 0x97, + 0x59, 0xed, 0x2c, 0x95, 0xfb, 0x75, 0xdb, 0xcb, 0x63, 0xef, 0xd9, 0xbc, 0x8a, 0x8b, 0x40, 0x9e, 0x73, 0xa0, 0x78, + 0x43, 0xd9, 0x53, 0xe1, 0x4b, 0x48, 0x95, 0x21, 0x6f, 0x58, 0x0c, 0x58, 0x70, 0xdc, 0x1b, 0x0e, 0x0f, 0x82, 0x81, + 0x55, 0xe7, 0x0e, 0x82, 0x83, 0xe1, 0xf0, 0x24, 0xb0, 0xf7, 0xa1, 0x6c, 0x64, 0xef, 0x8c, 0xb4, 0x64, 0xff, 0x2c, + 0xc3, 0x82, 0x82, 0x78, 0x4c, 0x28, 0xf1, 0x97, 0x02, 0x97, 0x19, 0x00, 0xf4, 0x91, 0x94, 0x80, 0x69, 0x58, 0x99, + 0x01, 0x84, 0xe6, 0xa6, 0x31, 0x3b, 0x07, 0xe6, 0x91, 0x26, 0x20, 0xde, 0x03, 0x8a, 0x01, 0x88, 0x25, 0x01, 0xce, + 0x5d, 0x10, 0xc5, 0xaa, 0x90, 0x47, 0x00, 0x7a, 0x8f, 0x3f, 0x89, 0x2e, 0x05, 0x93, 0x54, 0xac, 0x42, 0x10, 0xc4, + 0xf1, 0xd9, 0x5d, 0xd5, 0x9a, 0x9c, 0x25, 0x3a, 0x98, 0x91, 0x04, 0xd8, 0x10, 0x0d, 0x3b, 0x07, 0xf7, 0x73, 0x50, + 0x7a, 0x18, 0xbd, 0x13, 0x72, 0xc1, 0xf7, 0xdc, 0xb2, 0x50, 0x77, 0x70, 0xf5, 0x84, 0x83, 0xe0, 0x9e, 0x2b, 0x16, + 0x60, 0x54, 0x97, 0xeb, 0xaa, 0xe6, 0xe9, 0x87, 0xfb, 0x15, 0xc4, 0xbe, 0xc3, 0x01, 0x7d, 0x27, 0xf2, 0x2c, 0xb9, + 0x0f, 0xad, 0x3d, 0xd7, 0x46, 0xa6, 0xff, 0xf0, 0xe1, 0xf5, 0x4f, 0x11, 0x88, 0x1c, 0x1b, 0x4d, 0xe9, 0xef, 0x39, + 0x9e, 0x4d, 0x6e, 0x84, 0x27, 0x77, 0x63, 0xdf, 0x73, 0x73, 0x7a, 0xf4, 0xfb, 0x50, 0x37, 0xbd, 0xe7, 0xb3, 0x7b, + 0x3e, 0xb2, 0xc5, 0xa1, 0xba, 0xc2, 0x7e, 0x7d, 0xbb, 0x76, 0x8d, 0x90, 0x1e, 0x9e, 0x67, 0xca, 0xbd, 0xf9, 0x51, + 0x0e, 0x86, 0x41, 0x30, 0x55, 0x42, 0x49, 0x88, 0xba, 0xc1, 0xa4, 0x80, 0x21, 0x3a, 0x50, 0xcb, 0x6a, 0x8a, 0x9c, + 0x9b, 0x1c, 0x59, 0x78, 0x3f, 0x60, 0x4a, 0xe8, 0xe0, 0xe5, 0x90, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc0, 0x6f, 0x15, + 0x30, 0xfd, 0x72, 0x51, 0x59, 0x07, 0xd1, 0x03, 0x30, 0xc6, 0x2d, 0x78, 0x09, 0x5d, 0x61, 0x37, 0x6b, 0x19, 0x15, + 0x03, 0xc1, 0xe3, 0x90, 0x03, 0x74, 0xb0, 0x0b, 0x5a, 0x56, 0x96, 0xf2, 0x56, 0x65, 0x2d, 0x55, 0xe4, 0x65, 0x28, + 0xab, 0x62, 0x89, 0xf9, 0x5e, 0xb0, 0x1f, 0x4a, 0xf4, 0x2c, 0x9f, 0x56, 0x5d, 0xf0, 0x42, 0x28, 0xc1, 0xb2, 0x5d, + 0xef, 0x44, 0x20, 0xea, 0x4c, 0x75, 0xae, 0xfa, 0x0a, 0xc7, 0x8e, 0xa7, 0xaf, 0x45, 0xca, 0x95, 0x09, 0x85, 0xe2, + 0xf3, 0x85, 0xab, 0x98, 0x28, 0xd9, 0x2d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd7, 0x6a, 0x33, 0x48, 0xd1, 0x31, + 0x6f, 0x50, 0x70, 0x2d, 0x15, 0x0a, 0x5a, 0x7b, 0x1b, 0x7f, 0x82, 0x23, 0x37, 0xba, 0x3d, 0xf4, 0x7e, 0xab, 0xe3, + 0xab, 0x37, 0xe8, 0xdb, 0x69, 0x7e, 0x8e, 0x6a, 0xf1, 0xcb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, 0xe0, 0xd2, + 0x42, 0x3d, 0x67, 0xef, 0x4e, 0xdf, 0x80, 0x1f, 0x25, 0xfe, 0xfe, 0xf5, 0xfb, 0xa0, 0x21, 0xd3, 0x78, 0x56, 0xea, + 0x0f, 0x4d, 0x0e, 0x08, 0x4d, 0x62, 0xd3, 0xcc, 0xfb, 0x59, 0xec, 0xb3, 0xef, 0x8a, 0xad, 0xa7, 0xa5, 0x8f, 0x24, + 0xa5, 0xb9, 0x7d, 0x30, 0x20, 0x50, 0x07, 0x88, 0xe4, 0xec, 0x4b, 0x1a, 0x43, 0x9a, 0xcb, 0xec, 0xbb, 0x11, 0xf1, + 0x5e, 0xec, 0x84, 0x10, 0xe3, 0x12, 0x8b, 0x46, 0x0d, 0xf9, 0x8c, 0x47, 0xd2, 0xb0, 0xe8, 0x3d, 0x26, 0x10, 0x6b, + 0x38, 0x2d, 0xdf, 0x23, 0xe6, 0x31, 0xde, 0x0d, 0x94, 0xec, 0x21, 0xca, 0xa8, 0xcd, 0xee, 0x59, 0x7c, 0x7f, 0x5c, + 0x87, 0x99, 0xb1, 0xbc, 0x1c, 0xc2, 0xdf, 0x40, 0x19, 0x80, 0x53, 0x8e, 0x2c, 0x5f, 0xad, 0x37, 0xba, 0x5c, 0x62, + 0x6a, 0x13, 0x41, 0x2c, 0x1e, 0x95, 0x0e, 0x6b, 0x57, 0xa5, 0xaa, 0x5d, 0x6d, 0x7d, 0x26, 0x7a, 0x35, 0x68, 0xe5, + 0xda, 0xf6, 0x78, 0x08, 0x77, 0xa9, 0xa4, 0x15, 0x26, 0xb0, 0x5e, 0x65, 0x15, 0x2a, 0xd8, 0x9c, 0x80, 0x06, 0xd7, + 0x22, 0x05, 0xe0, 0x2c, 0xa5, 0x46, 0xa3, 0x5a, 0xd8, 0x67, 0xe4, 0x7c, 0x16, 0x5b, 0x0b, 0xf1, 0xb4, 0x00, 0x0c, + 0xd7, 0xc7, 0xa0, 0xe4, 0xdd, 0x18, 0x94, 0xd3, 0x8f, 0x12, 0xde, 0x3a, 0x38, 0xaf, 0x96, 0x71, 0x2a, 0x6e, 0x01, + 0x8b, 0x31, 0x70, 0x53, 0xb1, 0x54, 0x27, 0x21, 0x59, 0xf2, 0xe4, 0x23, 0x5a, 0x6d, 0xa4, 0x01, 0x70, 0x95, 0x53, + 0x6d, 0xb9, 0x27, 0x41, 0x42, 0x6d, 0x29, 0x32, 0x21, 0xae, 0xeb, 0x38, 0x59, 0x9e, 0x61, 0x6a, 0xb8, 0x81, 0x5e, + 0x44, 0x81, 0x58, 0xf1, 0x02, 0x48, 0x7a, 0xce, 0xfe, 0x95, 0x29, 0xac, 0xf1, 0x67, 0x02, 0x05, 0x4c, 0x0a, 0x35, + 0x18, 0x2b, 0x65, 0x2f, 0x84, 0x8e, 0xf6, 0x16, 0x04, 0x8d, 0x7d, 0xf9, 0x27, 0xd4, 0xfd, 0x0c, 0x5a, 0x11, 0x7a, + 0x60, 0x88, 0xe2, 0x02, 0x77, 0x68, 0x6a, 0x96, 0x9c, 0x03, 0x8c, 0x58, 0x18, 0xef, 0xb3, 0xc6, 0x6c, 0xf5, 0x67, + 0x4b, 0xc0, 0x36, 0x4d, 0xb5, 0x4f, 0x61, 0x98, 0x10, 0x1d, 0x1b, 0xd8, 0x28, 0x2b, 0xcd, 0x86, 0xd2, 0xed, 0xa4, + 0x4b, 0xe6, 0xb4, 0x70, 0x9a, 0xf7, 0x18, 0x5b, 0x8e, 0x64, 0xee, 0x7e, 0x3f, 0xd4, 0x3f, 0x59, 0x4e, 0x9f, 0xa9, + 0x90, 0xcd, 0xce, 0x78, 0xd0, 0x9c, 0x28, 0x75, 0x55, 0x47, 0x3f, 0xa0, 0x03, 0x30, 0xd3, 0x06, 0x20, 0xd3, 0x06, + 0x9b, 0x76, 0x95, 0xa8, 0xb8, 0x24, 0x61, 0xa9, 0x24, 0xb0, 0xb3, 0x7d, 0xc9, 0xce, 0x26, 0x20, 0x8e, 0xe1, 0xae, + 0xa3, 0xc5, 0x4e, 0x88, 0x0f, 0x6f, 0x71, 0x90, 0x80, 0xa8, 0x43, 0x56, 0x97, 0x90, 0x8d, 0x36, 0x74, 0x71, 0x2f, + 0x4a, 0x61, 0xc2, 0x5a, 0x26, 0x55, 0x89, 0x0e, 0x82, 0x54, 0xed, 0xb6, 0x08, 0x2c, 0x51, 0xb0, 0x03, 0xd8, 0x7b, + 0x3b, 0xea, 0x7a, 0xd4, 0x64, 0x75, 0xf2, 0x25, 0xf8, 0x38, 0xcd, 0xba, 0x0a, 0xd2, 0x0b, 0xbb, 0x2e, 0xd7, 0x3c, + 0x50, 0xb1, 0xa9, 0xa4, 0x31, 0x71, 0x97, 0x16, 0x19, 0xe2, 0x01, 0x63, 0x2c, 0x5d, 0x08, 0xe4, 0x9b, 0xed, 0x8e, + 0x9b, 0x9a, 0x20, 0xf4, 0x13, 0xd6, 0x94, 0xc0, 0x4e, 0x67, 0x7b, 0x6a, 0xfc, 0x7c, 0x40, 0xc4, 0x61, 0x40, 0x81, + 0x64, 0xe3, 0x90, 0xe6, 0x48, 0x5f, 0x90, 0x34, 0x61, 0x60, 0x68, 0xc9, 0x73, 0x82, 0xac, 0x28, 0x74, 0x6c, 0x5d, + 0x95, 0x71, 0xae, 0x08, 0x73, 0xb4, 0xe4, 0x94, 0xf8, 0x9c, 0x20, 0x13, 0xdb, 0xd3, 0x36, 0x3d, 0x19, 0x96, 0x92, + 0x05, 0xfa, 0x57, 0x10, 0x25, 0xf6, 0x4c, 0x33, 0x2a, 0x07, 0xed, 0x02, 0x16, 0x28, 0xe5, 0x7b, 0xd0, 0x78, 0x6b, + 0x68, 0xa3, 0x60, 0x88, 0xed, 0xfe, 0x04, 0xfb, 0xb5, 0x76, 0x5a, 0x97, 0x29, 0x96, 0x93, 0x29, 0x44, 0x7b, 0x21, + 0xfd, 0x1b, 0x45, 0xa2, 0x3b, 0x45, 0x68, 0x12, 0xd6, 0x51, 0xf6, 0xa4, 0x4d, 0x0d, 0xa0, 0xa7, 0x4e, 0xc0, 0xf3, + 0xce, 0xb5, 0x0c, 0xbb, 0x48, 0xf5, 0x57, 0x06, 0x9f, 0x52, 0x0d, 0x82, 0x14, 0xb5, 0x49, 0xc1, 0x9c, 0xd7, 0xa1, + 0xa4, 0xce, 0x9c, 0xb6, 0xcc, 0xa8, 0x3a, 0x2a, 0x42, 0xca, 0x09, 0xfe, 0x93, 0x57, 0x42, 0x11, 0x9b, 0x30, 0xc1, + 0x03, 0x1f, 0xe6, 0x19, 0x36, 0xf0, 0x76, 0xfb, 0x2e, 0x0d, 0x93, 0x36, 0xdb, 0x90, 0x82, 0xb4, 0x42, 0xc7, 0xc5, + 0x80, 0xca, 0x5e, 0xe1, 0x7e, 0xc1, 0x76, 0xd2, 0x14, 0x3c, 0x08, 0xbd, 0x06, 0x26, 0x76, 0x75, 0xf1, 0x75, 0x98, + 0xd0, 0x70, 0x49, 0x95, 0xb3, 0x93, 0x92, 0x34, 0xb7, 0xd7, 0xe5, 0xa5, 0xe9, 0x83, 0x8a, 0x1d, 0xd6, 0x35, 0x3c, + 0xd0, 0x3c, 0xbf, 0x8b, 0x2b, 0xa6, 0x68, 0xa2, 0xb6, 0x1e, 0x92, 0x96, 0x1c, 0xeb, 0x66, 0xba, 0xc2, 0xd5, 0x32, + 0x53, 0xc0, 0xee, 0x02, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x89, 0xcd, 0x66, 0xab, 0x86, 0x4c, 0xf3, + 0x7d, 0xd9, 0x72, 0x1d, 0x10, 0xce, 0x50, 0xdf, 0xdc, 0x25, 0xc7, 0x8a, 0xb6, 0xb9, 0x49, 0x80, 0xe3, 0xed, 0x14, + 0x90, 0x74, 0x2c, 0x41, 0x1b, 0xdf, 0xd2, 0x1d, 0x44, 0xaa, 0xa7, 0x82, 0xee, 0x9d, 0x2f, 0xd2, 0xf8, 0x5f, 0x80, + 0x6d, 0xd4, 0x46, 0x9b, 0x66, 0x65, 0xeb, 0x30, 0x91, 0x16, 0xd6, 0xc8, 0x42, 0x2e, 0xc1, 0x07, 0x73, 0xb7, 0xa9, + 0xd3, 0xd3, 0x0e, 0x22, 0xec, 0x76, 0xd1, 0xe1, 0x11, 0xc6, 0x92, 0x35, 0x48, 0x34, 0xab, 0xb0, 0xa6, 0xfe, 0x72, + 0x88, 0x72, 0xaa, 0x97, 0x4c, 0xb4, 0xa4, 0x2e, 0xa5, 0x88, 0x52, 0x30, 0x37, 0x9e, 0x16, 0x9e, 0x29, 0x21, 0x42, + 0x56, 0x08, 0x0b, 0x54, 0x6b, 0xa0, 0xa5, 0x7c, 0xd0, 0xeb, 0xd0, 0xc9, 0x42, 0x63, 0x0a, 0xa2, 0x8f, 0x48, 0x73, + 0x23, 0x96, 0x8c, 0xee, 0x8e, 0x51, 0x4c, 0x20, 0x54, 0xb5, 0x93, 0x17, 0x56, 0x9f, 0x92, 0x6d, 0x75, 0x10, 0xd7, + 0x98, 0x26, 0x7b, 0x08, 0x6a, 0x8c, 0x82, 0x36, 0xab, 0x1b, 0xfd, 0xa5, 0x0c, 0x5d, 0xbb, 0x70, 0xec, 0x46, 0x49, + 0x04, 0x44, 0x60, 0x75, 0x9a, 0x8a, 0x01, 0x59, 0xe7, 0xb1, 0x8d, 0xd0, 0xa4, 0xba, 0x85, 0x28, 0x6f, 0x54, 0x34, + 0x1f, 0xd7, 0x21, 0xd9, 0x6e, 0xb1, 0x2c, 0xf0, 0x65, 0x3f, 0x5b, 0xef, 0x81, 0xfc, 0x7e, 0xbd, 0xfe, 0x24, 0xe4, + 0xf7, 0xab, 0xec, 0x73, 0x20, 0xbf, 0x5f, 0xaf, 0xff, 0xa7, 0x21, 0xbf, 0xcf, 0xd6, 0x0e, 0xe4, 0xb7, 0x1c, 0x8c, + 0xdf, 0x4a, 0x16, 0xbc, 0x7d, 0x13, 0xd0, 0xe7, 0x82, 0x05, 0x6f, 0x5f, 0xbe, 0x74, 0x84, 0xe9, 0xdf, 0xe9, 0x38, + 0x2f, 0x5a, 0x16, 0x8c, 0xb8, 0x2d, 0xf0, 0x0a, 0xb5, 0x4e, 0x2e, 0x50, 0x51, 0x06, 0xc0, 0xeb, 0xd5, 0x3f, 0xb2, + 0x7a, 0x19, 0x06, 0x87, 0x01, 0x99, 0x59, 0x48, 0xd0, 0xe1, 0x04, 0x6e, 0x6f, 0x68, 0x64, 0x59, 0x7f, 0x16, 0x7c, + 0xf8, 0x68, 0x34, 0x8a, 0xcb, 0x2b, 0xbc, 0xd4, 0xe9, 0x8d, 0x84, 0x80, 0xc7, 0x19, 0xaf, 0x4c, 0x88, 0x88, 0x65, + 0x5c, 0x9d, 0xab, 0xd8, 0x2c, 0x95, 0xd9, 0x8a, 0x10, 0x71, 0xfe, 0x1c, 0x70, 0xea, 0xcd, 0xde, 0x8c, 0xb1, 0x1f, + 0x92, 0x23, 0x56, 0x01, 0x64, 0x9f, 0xad, 0xd5, 0xbb, 0x8b, 0xb8, 0xe2, 0xef, 0xe2, 0x7a, 0xc9, 0xa0, 0x97, 0x70, + 0x17, 0x29, 0x78, 0x52, 0x3b, 0x6c, 0x93, 0x04, 0x2a, 0xcf, 0x14, 0x50, 0x79, 0xc7, 0x7b, 0x1a, 0x9a, 0x61, 0x51, + 0x3e, 0xc0, 0x5a, 0xba, 0x9c, 0x81, 0xd1, 0xe2, 0x8b, 0x1b, 0x5e, 0xd4, 0x3f, 0x01, 0x9e, 0x7a, 0xc1, 0x4b, 0xb8, + 0x25, 0x20, 0x17, 0xeb, 0x39, 0x21, 0xd0, 0xca, 0xf5, 0xec, 0x90, 0x51, 0x63, 0xb4, 0x68, 0xc2, 0xeb, 0x37, 0xde, + 0x84, 0xd0, 0xbb, 0x13, 0x74, 0x45, 0x18, 0x09, 0xef, 0xcf, 0x35, 0x3f, 0xcf, 0xc0, 0x7c, 0xbe, 0x02, 0x28, 0x0d, + 0x84, 0x43, 0x65, 0x52, 0x6e, 0x81, 0x09, 0x1b, 0x6d, 0xae, 0x94, 0xa5, 0x0e, 0x52, 0x29, 0x95, 0x70, 0xba, 0x15, + 0x4d, 0x05, 0xe0, 0x70, 0x47, 0x02, 0xc0, 0x4c, 0x4d, 0x61, 0x10, 0xdd, 0x36, 0xa5, 0x59, 0x1a, 0x59, 0x45, 0x9a, + 0xc5, 0x27, 0xa5, 0x12, 0x74, 0xfa, 0x3c, 0x89, 0x6b, 0x7e, 0x25, 0x4a, 0x08, 0x85, 0xdb, 0x4a, 0x69, 0x0c, 0x16, + 0x80, 0x3c, 0xee, 0xac, 0xcd, 0xd6, 0xac, 0x94, 0x29, 0xe7, 0xc5, 0xfa, 0x9a, 0x97, 0x59, 0x72, 0xbe, 0xcc, 0xaa, + 0x5a, 0x94, 0xf7, 0x6c, 0xae, 0xb2, 0x2e, 0xa2, 0x6a, 0xa4, 0x24, 0x5e, 0xe7, 0x35, 0xbf, 0x5e, 0x41, 0xe8, 0x87, + 0x75, 0x09, 0xac, 0xe7, 0xde, 0x2f, 0x65, 0x64, 0xd2, 0xb0, 0xf3, 0x3b, 0xb2, 0x00, 0xbd, 0x2b, 0xac, 0x11, 0xb9, + 0x00, 0x98, 0x5e, 0x33, 0xa7, 0x92, 0xaa, 0x94, 0xfe, 0x6b, 0x8d, 0x33, 0xef, 0x2f, 0xaa, 0x71, 0x6b, 0xed, 0x19, + 0xad, 0xad, 0x9f, 0x2a, 0xe1, 0x94, 0x80, 0x12, 0xb1, 0x13, 0x5c, 0x31, 0x29, 0x5d, 0x1b, 0xb4, 0x16, 0xb0, 0xac, + 0xc0, 0x1c, 0x59, 0x71, 0x75, 0x7e, 0x2b, 0x65, 0x35, 0x3d, 0x49, 0xcd, 0xd2, 0x28, 0x96, 0x28, 0x42, 0x4b, 0x16, + 0xae, 0x59, 0xb2, 0x27, 0xd7, 0x3a, 0x4a, 0x3c, 0x3c, 0xb0, 0xb8, 0x3d, 0xe8, 0xc7, 0x49, 0x3b, 0x65, 0xbb, 0xdd, + 0xc9, 0x04, 0x6c, 0x48, 0x2b, 0x09, 0x22, 0x83, 0x2c, 0x67, 0xc3, 0x49, 0x04, 0x70, 0x2d, 0x8a, 0x84, 0xfe, 0xb9, + 0xe6, 0x1a, 0xd0, 0x3e, 0x54, 0x5e, 0x85, 0x72, 0x15, 0xcd, 0xc1, 0xce, 0xcb, 0xed, 0x35, 0x04, 0x96, 0xe9, 0x9c, + 0x97, 0xc5, 0xfe, 0x35, 0xa0, 0xcc, 0x91, 0xd5, 0x0b, 0xb2, 0x6f, 0xc6, 0x55, 0xb6, 0x07, 0xa7, 0xb7, 0x35, 0x07, + 0x7b, 0x5b, 0xa3, 0x50, 0x7a, 0x13, 0x1e, 0x0e, 0x9f, 0x8e, 0x8d, 0x3f, 0x03, 0xae, 0x72, 0xf3, 0x5b, 0xee, 0x04, + 0xfb, 0x6c, 0x76, 0x03, 0xf5, 0x5d, 0x22, 0xda, 0x35, 0xd2, 0x6a, 0xcf, 0xb8, 0x35, 0xa4, 0xb1, 0x2b, 0xcd, 0x88, + 0xb9, 0x7e, 0x97, 0x47, 0xeb, 0xf9, 0xa3, 0x4d, 0xa6, 0xaa, 0x6c, 0x7e, 0xcf, 0x4c, 0x50, 0x3c, 0x8f, 0x4c, 0x35, + 0x6a, 0x0d, 0xba, 0x98, 0x74, 0x1d, 0xd9, 0xd4, 0x8c, 0xb2, 0xac, 0x93, 0xd6, 0x8d, 0xe4, 0x23, 0x97, 0x31, 0xc2, + 0xba, 0xb3, 0xf0, 0x3b, 0x9e, 0x84, 0x5d, 0x0d, 0x93, 0xd7, 0x10, 0xdd, 0x05, 0x84, 0xe9, 0x04, 0xe5, 0x43, 0xf8, + 0xfb, 0xa3, 0x8d, 0x4f, 0x3b, 0x9b, 0x43, 0xe7, 0x33, 0xfc, 0x9d, 0xa5, 0xf0, 0xb7, 0x6e, 0x7e, 0xa7, 0x9b, 0x6b, + 0x5e, 0x2f, 0x45, 0x1a, 0x05, 0xef, 0xde, 0x9e, 0x7d, 0x08, 0x14, 0xfc, 0x3b, 0x5e, 0x82, 0xb4, 0xda, 0x5b, 0x03, + 0x4d, 0x81, 0x1a, 0x28, 0x17, 0x57, 0x88, 0x80, 0xa8, 0x20, 0xf4, 0xcf, 0x96, 0xe2, 0xf6, 0x34, 0xcf, 0x5d, 0x4e, + 0x5d, 0x53, 0x77, 0xc5, 0xbc, 0x7a, 0xa4, 0x31, 0x04, 0x81, 0xe3, 0x28, 0xab, 0xce, 0x95, 0x8a, 0x28, 0x3d, 0xbf, + 0xb8, 0x3f, 0x57, 0x62, 0x28, 0x03, 0x41, 0xf9, 0xec, 0xf7, 0xe3, 0x34, 0xbb, 0x39, 0xc0, 0x23, 0x88, 0x05, 0x60, + 0xbf, 0x9f, 0xf3, 0x8b, 0x75, 0x5d, 0x8b, 0x62, 0x58, 0x8a, 0xdb, 0xe0, 0xe4, 0x58, 0x3e, 0xe8, 0x0c, 0xb1, 0x7c, + 0x0c, 0x0e, 0xfe, 0x2b, 0xc9, 0xb3, 0xe4, 0x23, 0x0b, 0x1e, 0x6d, 0x32, 0x76, 0xd2, 0x3a, 0x68, 0xc6, 0x4d, 0x70, + 0x02, 0x6d, 0x3d, 0x38, 0xcd, 0xf3, 0xe3, 0x43, 0xf9, 0xc5, 0xc9, 0xf1, 0x61, 0x9a, 0xdd, 0x9c, 0x38, 0xd1, 0x00, + 0xac, 0x71, 0x2f, 0xe2, 0xae, 0xd9, 0xcb, 0x3b, 0x78, 0xf1, 0x26, 0x3c, 0x34, 0xec, 0x0e, 0x88, 0x8c, 0x74, 0x2c, + 0x15, 0x14, 0x33, 0x85, 0x31, 0x1c, 0xee, 0xdb, 0x6d, 0x68, 0x2c, 0x8f, 0x12, 0x07, 0x96, 0xa7, 0x04, 0x76, 0x08, + 0xb3, 0xd0, 0x84, 0xd0, 0xa4, 0x21, 0xa1, 0x06, 0x0f, 0x8a, 0x09, 0x2d, 0x1b, 0x0a, 0xe7, 0xdd, 0xeb, 0x78, 0xa5, + 0x25, 0x6d, 0x4a, 0x72, 0xa1, 0x5b, 0x3f, 0xf3, 0xc6, 0x31, 0x6a, 0x8f, 0xaa, 0x86, 0xf3, 0xea, 0x15, 0xfb, 0x06, + 0x16, 0x84, 0xab, 0x61, 0x4d, 0x83, 0x16, 0x69, 0x01, 0xe1, 0xa8, 0x2b, 0xd3, 0xe3, 0x34, 0x9c, 0x17, 0x54, 0x2c, + 0x08, 0x3b, 0x09, 0x37, 0xc8, 0xdb, 0x17, 0x54, 0xb2, 0xfa, 0xa2, 0xb1, 0xd8, 0x9a, 0x72, 0x76, 0x4e, 0x1e, 0x6d, + 0x64, 0xcc, 0xde, 0x82, 0x9d, 0xf8, 0xf3, 0x55, 0xc7, 0x17, 0xc3, 0x25, 0x07, 0x27, 0xa0, 0xe0, 0xe0, 0xbf, 0xd2, + 0x8b, 0xdc, 0x4c, 0x8a, 0x5c, 0x91, 0xcb, 0xb8, 0x48, 0x73, 0xfe, 0x21, 0xbe, 0xf8, 0x01, 0xf3, 0x3c, 0xbf, 0xc8, + 0x9f, 0x41, 0x86, 0x26, 0x38, 0x79, 0xb4, 0x49, 0xea, 0xd1, 0x8b, 0x37, 0x1f, 0x5e, 0x7d, 0xf8, 0xe7, 0xf9, 0xb3, + 0xd3, 0x0f, 0x2f, 0xbe, 0x7f, 0xfb, 0xfe, 0xd5, 0x8b, 0xb3, 0xb9, 0xf1, 0xba, 0x95, 0x60, 0x6e, 0x64, 0xb1, 0xdd, + 0xda, 0x7c, 0xbf, 0xbc, 0x79, 0xfe, 0xe2, 0xe5, 0xab, 0x37, 0x2f, 0x9e, 0x37, 0x72, 0x2e, 0xdb, 0x0d, 0x81, 0x1d, + 0x1a, 0x67, 0x05, 0x2f, 0xa1, 0x78, 0x75, 0xbb, 0xc3, 0x66, 0x2b, 0x0c, 0x42, 0xbf, 0xe9, 0x2a, 0x5c, 0x03, 0x2c, + 0xb2, 0x03, 0xb5, 0x59, 0xa0, 0xe1, 0x42, 0x6f, 0x1c, 0x77, 0x89, 0xb9, 0xbd, 0x79, 0x81, 0xdf, 0xbd, 0x17, 0xb7, + 0xba, 0x2b, 0x6a, 0x84, 0x24, 0xbc, 0xd8, 0xec, 0xd9, 0xef, 0xc7, 0xae, 0x48, 0x0f, 0xe5, 0x1e, 0xb2, 0x5c, 0xf8, + 0xd5, 0x04, 0x07, 0xca, 0xbc, 0x30, 0x80, 0xe8, 0x18, 0xc1, 0xc9, 0xf1, 0xa1, 0x9b, 0xfb, 0xe4, 0xf7, 0xe8, 0x27, + 0xa7, 0x73, 0x58, 0x2a, 0x8c, 0x83, 0x9f, 0xb6, 0x73, 0x2c, 0x02, 0x7d, 0xb6, 0x07, 0xa7, 0x5c, 0x41, 0x9a, 0x5c, + 0x09, 0x12, 0x99, 0x49, 0x94, 0x66, 0x33, 0xba, 0xb4, 0xdf, 0xd5, 0x5f, 0xdb, 0x67, 0x14, 0x43, 0xf0, 0xa2, 0x12, + 0x25, 0xd8, 0xb8, 0x38, 0x89, 0x49, 0x0e, 0x82, 0x0f, 0x1e, 0x40, 0xef, 0xda, 0xa1, 0x2e, 0x0e, 0x9c, 0x90, 0x32, + 0xd8, 0xcf, 0x4e, 0xa2, 0x0f, 0xe3, 0x74, 0xd8, 0xfe, 0xd4, 0xe9, 0xee, 0xef, 0xc4, 0xfe, 0x38, 0x50, 0x5d, 0x6c, + 0x11, 0x1d, 0xd3, 0xec, 0xfd, 0x21, 0x49, 0xe6, 0x6f, 0xff, 0x4f, 0x73, 0x4f, 0xbb, 0xdd, 0xb6, 0x71, 0xe5, 0xff, + 0x3e, 0x05, 0x0c, 0xbb, 0x0e, 0x60, 0x03, 0x10, 0x40, 0x8a, 0x92, 0x4c, 0x8a, 0x52, 0x13, 0xdb, 0x39, 0x51, 0xaa, + 0xd4, 0x39, 0x8e, 0xea, 0x6d, 0xa3, 0xe8, 0x98, 0x43, 0x70, 0x48, 0xa2, 0x02, 0x01, 0x1e, 0x00, 0x94, 0xa8, 0xd0, + 0xe8, 0x53, 0xec, 0xff, 0xed, 0x73, 0xec, 0xfe, 0xeb, 0x13, 0xed, 0x23, 0xec, 0xb9, 0x77, 0x3e, 0x30, 0xf8, 0x22, + 0xa9, 0xc4, 0x69, 0xf7, 0xa4, 0xaa, 0x89, 0xc1, 0xcc, 0x60, 0xe6, 0xce, 0xcc, 0x9d, 0xfb, 0x7d, 0x03, 0xeb, 0x3f, + 0x62, 0x6b, 0x46, 0xac, 0x05, 0xb1, 0x6e, 0xd3, 0x9b, 0xbc, 0x71, 0xcd, 0x64, 0xba, 0x1b, 0x4c, 0x89, 0x68, 0x18, + 0x10, 0x37, 0x83, 0x73, 0x33, 0x9c, 0xc6, 0x0f, 0xc4, 0x05, 0x77, 0x45, 0x92, 0x19, 0x15, 0x89, 0x66, 0xc4, 0xdb, + 0x8c, 0x43, 0xc6, 0x2c, 0xc1, 0xcb, 0x30, 0xe8, 0xe3, 0xba, 0xa1, 0x6a, 0x37, 0x02, 0xc2, 0x18, 0x43, 0xf3, 0x09, + 0xb7, 0xac, 0x08, 0x1c, 0x3f, 0x4b, 0xc2, 0x3f, 0xd2, 0x07, 0x20, 0x5e, 0xd3, 0x2c, 0x5e, 0x02, 0xcb, 0x42, 0x66, + 0x5c, 0x04, 0x65, 0x19, 0xe9, 0x7e, 0x1f, 0x84, 0x64, 0x59, 0xb8, 0xe9, 0x81, 0xee, 0x75, 0xb2, 0x78, 0x36, 0x0b, + 0xa9, 0xa1, 0x8b, 0x1c, 0x2a, 0xba, 0x25, 0x3f, 0x73, 0xfe, 0xc4, 0x15, 0x81, 0x4b, 0xcd, 0xbc, 0xed, 0xf0, 0x0a, + 0xe8, 0x51, 0x19, 0xd9, 0x8f, 0x11, 0xf0, 0x28, 0xa2, 0xbe, 0x43, 0x2d, 0x0f, 0x5f, 0xe3, 0x02, 0x39, 0xd8, 0x93, + 0x78, 0x35, 0x0e, 0xa9, 0x8d, 0x07, 0x0a, 0x3e, 0xb9, 0x19, 0xaf, 0xc6, 0x63, 0x48, 0x56, 0xf3, 0xc4, 0xb5, 0x20, + 0xfc, 0x4e, 0x9c, 0x22, 0x5b, 0x9c, 0x9b, 0x03, 0x80, 0xa2, 0x93, 0x95, 0x87, 0xcf, 0xb2, 0x77, 0x82, 0xc4, 0x8b, + 0x7d, 0x20, 0x03, 0x16, 0xb8, 0x01, 0x2f, 0x0c, 0xf5, 0x1f, 0x60, 0x7f, 0xa7, 0xfa, 0xa0, 0x09, 0xb9, 0x0c, 0xaf, + 0xf5, 0x1f, 0x70, 0xb1, 0x30, 0x89, 0xf3, 0x6b, 0x76, 0x3e, 0x74, 0x4b, 0x67, 0xba, 0xff, 0x15, 0xa6, 0x73, 0x00, + 0xd9, 0xf7, 0x9b, 0x80, 0xcc, 0xa2, 0x38, 0xcd, 0x02, 0x5f, 0xbf, 0x19, 0x5c, 0x04, 0xc6, 0xf5, 0x22, 0x33, 0xcc, + 0x1b, 0xcb, 0xcf, 0xd4, 0x4c, 0x30, 0x02, 0x25, 0x63, 0x22, 0x98, 0xb6, 0x4a, 0xea, 0x19, 0xdd, 0x5a, 0x51, 0x20, + 0x7f, 0xac, 0xe4, 0x67, 0x43, 0xa8, 0x57, 0x49, 0x2b, 0x83, 0xf9, 0xb1, 0x74, 0x6c, 0x69, 0x0e, 0x18, 0xc3, 0xf6, + 0x7a, 0xb5, 0x41, 0x62, 0x21, 0x2b, 0xee, 0x63, 0x0c, 0x85, 0x2c, 0xfc, 0x87, 0xd8, 0xf3, 0x13, 0xd5, 0xf6, 0xb5, + 0x74, 0xb3, 0x8f, 0xbe, 0x2c, 0x53, 0x1e, 0x40, 0x21, 0x80, 0xe1, 0x49, 0x14, 0x67, 0x1a, 0xc4, 0xf7, 0x81, 0x2f, + 0x8e, 0xaa, 0xb6, 0x72, 0xbc, 0x57, 0xc3, 0xcc, 0x39, 0xba, 0xf9, 0x0a, 0xaf, 0x57, 0x83, 0x47, 0x79, 0x2b, 0x05, + 0xf2, 0x60, 0x3c, 0x53, 0x0a, 0x0b, 0x98, 0xc5, 0x97, 0xf1, 0x7d, 0x55, 0x1d, 0xf4, 0x7a, 0xb4, 0xfb, 0x76, 0x37, + 0x04, 0x05, 0x2f, 0x92, 0x1b, 0x1a, 0x3c, 0x3f, 0xab, 0x20, 0xa5, 0x2a, 0xa7, 0x0a, 0xed, 0x5f, 0x04, 0x95, 0x94, + 0x81, 0xb9, 0x1c, 0xde, 0x36, 0x80, 0xf4, 0x38, 0x21, 0x30, 0xca, 0x91, 0x6c, 0x95, 0xc9, 0x9f, 0x84, 0xc3, 0x4b, + 0x79, 0xdc, 0xe9, 0x10, 0xa5, 0xb2, 0xf3, 0x60, 0x36, 0xd7, 0xcf, 0x33, 0xbe, 0x23, 0x55, 0x7a, 0xf7, 0x23, 0xbc, + 0xea, 0x37, 0xbd, 0x81, 0x84, 0x54, 0x0d, 0xf5, 0xc3, 0xf8, 0x1e, 0xbc, 0xd9, 0x8b, 0x5e, 0x39, 0x35, 0xdd, 0xda, + 0xb9, 0xf9, 0x52, 0xd6, 0x80, 0xac, 0xe2, 0x66, 0x7f, 0x4b, 0x83, 0xf6, 0x6f, 0x56, 0x7b, 0xb1, 0xe2, 0x47, 0x8d, + 0xc1, 0xfe, 0x2c, 0x63, 0xa8, 0xf4, 0x32, 0x88, 0x86, 0xd1, 0x99, 0x2c, 0x5a, 0x90, 0x35, 0x36, 0x30, 0xcf, 0xeb, + 0x45, 0xfd, 0xc8, 0x8a, 0x87, 0xf1, 0x9e, 0x75, 0x63, 0x6e, 0x78, 0x4c, 0xcf, 0x47, 0x29, 0xcd, 0xce, 0x1b, 0xc6, + 0x02, 0x1b, 0x61, 0xf8, 0x6c, 0x13, 0xe5, 0xa3, 0x7e, 0x4b, 0x15, 0xf6, 0xd6, 0x22, 0xbb, 0x3b, 0x89, 0xb7, 0x76, + 0x12, 0xe7, 0xa3, 0xc7, 0x6c, 0x73, 0x9f, 0xef, 0xf2, 0x70, 0xe0, 0x37, 0x61, 0xfa, 0xb0, 0x71, 0xcf, 0x43, 0x30, + 0xda, 0xd2, 0x6e, 0x4f, 0x70, 0xb7, 0xff, 0xef, 0x7f, 0xfd, 0xe7, 0x7f, 0x17, 0x64, 0xef, 0x38, 0x39, 0x3b, 0xc5, + 0x8c, 0x64, 0x40, 0xc5, 0xe5, 0xa7, 0x07, 0xec, 0x37, 0x16, 0xff, 0x8b, 0x46, 0x45, 0xc4, 0xa8, 0xfe, 0x47, 0x3d, + 0x83, 0x22, 0x8b, 0xbb, 0xc8, 0xa1, 0xae, 0x90, 0xe0, 0x40, 0x43, 0x45, 0xcb, 0x55, 0x86, 0x51, 0xbf, 0x61, 0x1c, + 0x34, 0xd7, 0x35, 0x8c, 0x22, 0x0c, 0xb4, 0x58, 0xc1, 0x0c, 0xe6, 0xba, 0x16, 0x4c, 0xea, 0x65, 0x9c, 0xc9, 0x05, + 0x62, 0x04, 0xa9, 0x38, 0x94, 0x99, 0xc3, 0x63, 0xc2, 0xa7, 0xe3, 0x5b, 0x45, 0xca, 0x0c, 0xc3, 0x47, 0xdd, 0x72, + 0xc3, 0xfd, 0xec, 0xb3, 0x7e, 0x06, 0xfb, 0x4e, 0x73, 0x04, 0xf0, 0x3d, 0x87, 0xed, 0x33, 0x7c, 0xb6, 0x21, 0xc0, + 0xaf, 0xe5, 0x3a, 0x4c, 0xb4, 0xf0, 0x19, 0x2c, 0xa6, 0x07, 0x88, 0x9d, 0x95, 0x6b, 0x68, 0x34, 0x34, 0xe4, 0xa6, + 0x41, 0xcb, 0x24, 0x58, 0x90, 0xe4, 0x81, 0x59, 0x12, 0x59, 0xaa, 0xb9, 0x91, 0xa9, 0x6b, 0x8c, 0x7a, 0x63, 0xf3, + 0x65, 0x84, 0x9c, 0xae, 0xfd, 0x41, 0x96, 0x51, 0x3e, 0x39, 0x81, 0xbe, 0x74, 0xf8, 0xd6, 0x47, 0xfd, 0x25, 0x75, + 0x26, 0x34, 0x23, 0x41, 0xc8, 0x9a, 0x0c, 0x8c, 0xa8, 0x65, 0x36, 0x51, 0x79, 0x36, 0x69, 0x19, 0x65, 0xe3, 0x64, + 0x18, 0x05, 0xc7, 0xc6, 0x8d, 0x33, 0x43, 0x14, 0xda, 0xbc, 0x80, 0xec, 0x9d, 0xb2, 0x97, 0x00, 0xf8, 0x49, 0x7d, + 0x17, 0xe5, 0xed, 0x4b, 0xd4, 0x50, 0xfb, 0xb7, 0x59, 0x36, 0x0a, 0xcb, 0x96, 0xc2, 0xb2, 0xd1, 0xc8, 0x8f, 0x27, + 0xf4, 0xcf, 0xef, 0x2f, 0x64, 0xa6, 0x3f, 0x10, 0x5a, 0x8f, 0xf8, 0x25, 0x12, 0x21, 0x37, 0x91, 0x20, 0x27, 0xc1, + 0x72, 0xf2, 0x69, 0x72, 0xab, 0x25, 0xb9, 0xae, 0x9d, 0xb3, 0x49, 0xd3, 0x09, 0x9b, 0xc9, 0x30, 0xc6, 0x56, 0x49, + 0x7e, 0x7a, 0xc0, 0x6a, 0x33, 0x2a, 0x97, 0x55, 0x02, 0xf8, 0x25, 0x30, 0xeb, 0x02, 0x7c, 0x90, 0x94, 0x78, 0xe8, + 0x15, 0xe2, 0x05, 0x67, 0x81, 0xaa, 0x41, 0xef, 0xbc, 0xcc, 0xb8, 0x60, 0x2b, 0xbd, 0x38, 0xd4, 0x31, 0x04, 0x26, + 0x12, 0xe7, 0x5a, 0xab, 0x9c, 0x9c, 0xa2, 0x13, 0x21, 0xf2, 0xe9, 0xf3, 0x0e, 0x1e, 0x75, 0xa4, 0x00, 0x6b, 0x43, + 0x29, 0xc9, 0x75, 0x6d, 0xc1, 0x19, 0x25, 0x1e, 0x01, 0x0d, 0xc2, 0xa3, 0xb8, 0x70, 0xcf, 0xea, 0xda, 0x82, 0xac, + 0x71, 0xe6, 0xe2, 0x0d, 0x59, 0x1b, 0x1e, 0x7f, 0x55, 0x9c, 0xc9, 0xa8, 0xbc, 0xe0, 0x02, 0xc5, 0x80, 0xef, 0x93, + 0x14, 0xd0, 0xcd, 0xd1, 0xa6, 0xa4, 0x61, 0x71, 0xe7, 0x62, 0x71, 0x27, 0x2d, 0x8b, 0x3b, 0xd9, 0xb2, 0xb8, 0x21, + 0x5f, 0x48, 0x4d, 0x82, 0x2e, 0x41, 0x7f, 0xd6, 0x02, 0x29, 0x32, 0x06, 0xa3, 0xcf, 0x0f, 0x28, 0xc2, 0xc9, 0x4e, + 0x43, 0xb0, 0xe7, 0x6c, 0x81, 0x55, 0x13, 0x5c, 0x14, 0x40, 0xd4, 0x27, 0x2e, 0x8f, 0xab, 0x44, 0xad, 0xd6, 0x1c, + 0xb6, 0xaa, 0x5f, 0xa5, 0x79, 0x43, 0xd6, 0xd0, 0x32, 0xe6, 0x2d, 0x33, 0x9d, 0x6f, 0x99, 0xa9, 0x5f, 0x3a, 0xf3, + 0x7c, 0xda, 0xec, 0xf4, 0xaa, 0x93, 0x62, 0xa4, 0xd0, 0x3a, 0xc3, 0x2d, 0x53, 0xde, 0x87, 0xed, 0xb8, 0x58, 0xd9, + 0x51, 0x4b, 0x92, 0xa6, 0xf7, 0x71, 0x02, 0x4a, 0x62, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x11, 0x44, 0x3c, 0xfe, 0x54, + 0xeb, 0x66, 0x2a, 0xde, 0xab, 0x5b, 0xaa, 0xd3, 0xeb, 0xb1, 0x1a, 0x4b, 0x92, 0x65, 0x34, 0x41, 0xa0, 0x13, 0x48, + 0x54, 0xf0, 0xff, 0x64, 0x9b, 0x35, 0xe0, 0x90, 0xd0, 0x2c, 0xae, 0x03, 0x44, 0xed, 0x4b, 0xe0, 0x83, 0x12, 0x41, + 0x34, 0x2b, 0xb1, 0x2c, 0x13, 0x09, 0x78, 0x4e, 0xdf, 0x24, 0x8a, 0xb7, 0xa5, 0x77, 0x64, 0x3a, 0x4b, 0x32, 0xf9, + 0x01, 0x6c, 0x11, 0x8c, 0x8e, 0x05, 0x7e, 0x05, 0x6a, 0xe4, 0xca, 0x84, 0x31, 0x66, 0x7e, 0x81, 0x24, 0x11, 0x4b, + 0x72, 0xab, 0x4d, 0x70, 0xf8, 0x26, 0xf6, 0xf4, 0x66, 0xd3, 0xc9, 0x0f, 0x66, 0x81, 0x59, 0xc3, 0x9a, 0x80, 0xda, + 0xc2, 0xe1, 0x99, 0x94, 0xc0, 0x84, 0x96, 0x77, 0x64, 0x82, 0xb2, 0xea, 0x1a, 0x52, 0x30, 0xbb, 0x42, 0xbc, 0x35, + 0x4a, 0xe0, 0x76, 0xbb, 0x76, 0x6f, 0xf2, 0xe7, 0x33, 0xfc, 0xe5, 0xdd, 0xe4, 0xcf, 0xc7, 0xf8, 0xab, 0x73, 0x83, + 0xc9, 0x36, 0x1b, 0xc4, 0x7a, 0xca, 0x9c, 0xf5, 0xb3, 0xd2, 0x7e, 0x62, 0x26, 0xb3, 0x8f, 0xd8, 0x36, 0x7c, 0x81, + 0x9f, 0x3e, 0xdb, 0x44, 0xe0, 0x24, 0xae, 0xce, 0x21, 0x75, 0x12, 0x33, 0x6f, 0x2c, 0x9f, 0xb5, 0x94, 0x8f, 0xcd, + 0x7f, 0x31, 0x81, 0x80, 0xbb, 0x24, 0x2e, 0xee, 0x94, 0xb2, 0x50, 0xf2, 0xe3, 0x38, 0x88, 0x48, 0xf2, 0xf0, 0x91, + 0xc9, 0x14, 0x0c, 0xc1, 0x67, 0x4b, 0x61, 0x2b, 0x63, 0x05, 0xcb, 0x1a, 0xfa, 0x4c, 0xd1, 0x49, 0x3d, 0x70, 0x0a, + 0x61, 0xf8, 0x97, 0x44, 0xa1, 0x3d, 0x4b, 0xe2, 0x28, 0xbe, 0x20, 0xa5, 0x0f, 0x7d, 0x7c, 0xb6, 0x31, 0x68, 0xbd, + 0x9b, 0x9a, 0xb8, 0xa2, 0x44, 0x10, 0xc0, 0xf2, 0xa0, 0x68, 0x6b, 0x31, 0x09, 0xfa, 0xa8, 0x82, 0x1f, 0xc7, 0x6b, + 0xfb, 0xd9, 0x26, 0x3b, 0xd7, 0x17, 0x24, 0xb9, 0xa5, 0x13, 0xdb, 0x0f, 0x12, 0x3f, 0xa4, 0x7a, 0x5f, 0x1f, 0x87, + 0x24, 0xba, 0xe5, 0x8f, 0x76, 0xbc, 0xca, 0xd0, 0xa8, 0x66, 0xa7, 0x24, 0x4c, 0xc0, 0x84, 0x09, 0xf0, 0x91, 0x41, + 0x6b, 0x80, 0x82, 0xf6, 0x5a, 0x8a, 0xbf, 0x0b, 0x82, 0xb2, 0xa8, 0x65, 0x81, 0x4d, 0x38, 0xd8, 0xf9, 0x80, 0x93, + 0xbd, 0xa5, 0xe3, 0x7a, 0xe9, 0x96, 0x3a, 0x55, 0xa6, 0xf7, 0x90, 0x59, 0x62, 0x3f, 0x62, 0x0f, 0xbf, 0xfc, 0x73, + 0x50, 0xf2, 0x98, 0xcf, 0x71, 0xe2, 0xb0, 0xfd, 0x83, 0x6a, 0x63, 0x92, 0xa6, 0xab, 0x05, 0x9d, 0x30, 0x7b, 0x82, + 0xf3, 0x62, 0x28, 0x65, 0x46, 0x5c, 0x1d, 0xce, 0x4f, 0xab, 0xce, 0xf1, 0xe1, 0x6b, 0xb0, 0x73, 0x02, 0x62, 0x30, + 0x9e, 0x4e, 0xf5, 0x42, 0xbc, 0xb6, 0xa3, 0x99, 0x77, 0xf8, 0xd3, 0xea, 0xeb, 0xb7, 0xee, 0xd7, 0xb2, 0x71, 0xa4, + 0x9b, 0xf9, 0x48, 0x18, 0x6d, 0x70, 0x9a, 0x56, 0x19, 0xaf, 0x98, 0xd1, 0x94, 0x44, 0xed, 0xd3, 0xb9, 0x2e, 0xed, + 0xb2, 0x25, 0xa5, 0x13, 0xb0, 0xe7, 0xb7, 0x6a, 0xa5, 0x1f, 0x43, 0x7a, 0x47, 0xa5, 0x41, 0x48, 0xfd, 0x63, 0x0d, + 0x2d, 0x30, 0x62, 0x25, 0x37, 0x34, 0xe1, 0x84, 0x95, 0x32, 0xa5, 0x11, 0xce, 0x81, 0xcf, 0x5c, 0xdd, 0xe5, 0x95, + 0x5d, 0x3d, 0xb2, 0x74, 0x65, 0x00, 0xad, 0x23, 0x3b, 0x6f, 0x29, 0xef, 0x63, 0xba, 0xfa, 0xe6, 0xb1, 0x59, 0x9e, + 0xd9, 0x87, 0x08, 0xff, 0x1c, 0x4e, 0x21, 0x6c, 0x7e, 0x43, 0x4a, 0x22, 0x07, 0x6d, 0x10, 0x6b, 0x92, 0x5a, 0xeb, + 0x4c, 0xf0, 0x29, 0x6c, 0xa4, 0xd1, 0x59, 0x40, 0x08, 0x86, 0x1b, 0xd7, 0x46, 0x2b, 0xcf, 0x7c, 0x8c, 0x69, 0xa0, + 0x23, 0x9a, 0xa6, 0xad, 0x00, 0x93, 0x8b, 0x6e, 0xe9, 0x45, 0xed, 0x32, 0x3c, 0x8a, 0x72, 0xcb, 0xb5, 0xe0, 0x56, + 0xc6, 0x09, 0x56, 0xbf, 0x85, 0x18, 0xfe, 0xe3, 0x82, 0x5b, 0xb9, 0x25, 0xb3, 0xb1, 0xce, 0x2d, 0x90, 0xda, 0xde, + 0xdf, 0xeb, 0x7c, 0x50, 0xa5, 0x9b, 0xb2, 0x71, 0x68, 0x46, 0x09, 0xfb, 0xd5, 0xc4, 0xb4, 0xd8, 0x81, 0x18, 0x53, + 0x05, 0xc5, 0xd1, 0xe9, 0x94, 0xfa, 0x59, 0x6a, 0x0a, 0x59, 0xab, 0x8c, 0x39, 0x0d, 0xbe, 0x86, 0x4f, 0x86, 0xfa, + 0x9f, 0x20, 0xf2, 0x86, 0x08, 0xcd, 0xc6, 0x07, 0x24, 0xf8, 0x9d, 0x66, 0x30, 0xb1, 0x1e, 0xcb, 0x20, 0xe2, 0x5f, + 0xf9, 0xf4, 0x49, 0x98, 0x48, 0x94, 0xca, 0x71, 0x68, 0xfc, 0x0a, 0x28, 0xf6, 0x45, 0x2c, 0x6d, 0xe1, 0xb6, 0x23, + 0xa0, 0x6d, 0xc7, 0x77, 0xe3, 0x7d, 0xdd, 0xf3, 0xdc, 0x5c, 0xb7, 0xc0, 0xe3, 0xf3, 0x76, 0xdf, 0x43, 0x8f, 0xad, + 0xba, 0xd0, 0x6a, 0x15, 0x3d, 0xa6, 0x5d, 0xc7, 0x7b, 0xe5, 0xe9, 0x16, 0x33, 0xb4, 0x55, 0x70, 0x9b, 0x1f, 0xdf, + 0xd1, 0xe4, 0x57, 0x4f, 0xa5, 0xdc, 0xf9, 0x7e, 0xe3, 0x39, 0xf2, 0x5c, 0x40, 0xc2, 0x59, 0xbc, 0x7c, 0xc4, 0x14, + 0xba, 0xba, 0xa5, 0xfb, 0x61, 0x9c, 0x52, 0x75, 0x0e, 0x4c, 0x5e, 0xf1, 0x2b, 0x27, 0xf1, 0xfd, 0xfb, 0xb7, 0x3f, + 0xfc, 0xa0, 0x5b, 0x98, 0x3f, 0x38, 0x55, 0x7b, 0xe7, 0x1b, 0x6a, 0x07, 0xf6, 0x6f, 0xdc, 0x77, 0xec, 0x86, 0x61, + 0x7c, 0x65, 0x79, 0xcf, 0xb1, 0xb2, 0xda, 0x96, 0xe3, 0x37, 0x0f, 0xff, 0x32, 0x63, 0x06, 0xf7, 0x9a, 0x57, 0x03, + 0x6e, 0xd8, 0x7e, 0xbd, 0x95, 0x4a, 0x16, 0x41, 0xf4, 0xb1, 0xa1, 0x94, 0xac, 0x1b, 0x4a, 0x51, 0x36, 0x58, 0xc5, + 0x1f, 0xab, 0x78, 0xa1, 0xdc, 0xce, 0x90, 0xfe, 0x7d, 0x17, 0xb8, 0x14, 0x96, 0xe6, 0x57, 0x0c, 0x9a, 0xe7, 0x7f, + 0xa8, 0x8e, 0xba, 0xa1, 0x98, 0xf3, 0x21, 0x12, 0xb6, 0x5c, 0x97, 0xa3, 0xaa, 0xc9, 0xcb, 0x94, 0x9b, 0xda, 0xb8, + 0x59, 0x60, 0xfa, 0xa4, 0x70, 0xbe, 0xd9, 0x51, 0x19, 0x84, 0xb4, 0xb2, 0x76, 0x41, 0x13, 0x6c, 0xed, 0x3d, 0xff, + 0xe7, 0x3f, 0x1c, 0xe7, 0x9f, 0xff, 0xd8, 0x59, 0x15, 0xfa, 0xce, 0x81, 0x1d, 0xde, 0x55, 0x33, 0x1f, 0xa1, 0xd0, + 0x29, 0x1b, 0xbe, 0x1e, 0x8d, 0x06, 0x46, 0x09, 0x64, 0xe0, 0x33, 0x72, 0x5e, 0x2b, 0xe1, 0x78, 0xb5, 0xef, 0x9a, + 0x18, 0xcc, 0x01, 0x1a, 0xca, 0xeb, 0xab, 0x75, 0xb3, 0x33, 0xa7, 0x84, 0x5a, 0x5f, 0xb5, 0x9d, 0x0e, 0xa5, 0x98, + 0xb8, 0x2e, 0x1f, 0x99, 0x3c, 0xc7, 0x00, 0x8c, 0x8b, 0xab, 0x0f, 0x4a, 0x2b, 0x07, 0x7e, 0x36, 0x59, 0x79, 0x7c, + 0xbc, 0xac, 0x32, 0x42, 0xba, 0xd7, 0x08, 0x59, 0xdb, 0xf2, 0x18, 0x79, 0x7f, 0xb5, 0x51, 0xb2, 0x72, 0x31, 0x4e, + 0x0b, 0x45, 0x66, 0x3c, 0xca, 0x08, 0x67, 0x9a, 0xb8, 0x4a, 0xb0, 0xa4, 0xf6, 0xad, 0xa8, 0x2e, 0x94, 0x21, 0xec, + 0x5e, 0xf6, 0x73, 0x3d, 0x8c, 0xef, 0xd1, 0x59, 0x4f, 0xd5, 0x27, 0x73, 0x61, 0xc8, 0x69, 0x9a, 0x25, 0x71, 0x34, + 0x3b, 0xab, 0x5c, 0xde, 0x75, 0x3b, 0x1f, 0x90, 0x60, 0xb1, 0xaa, 0x65, 0xb1, 0x89, 0x3a, 0xca, 0xed, 0x5b, 0xea, + 0x7c, 0xc7, 0x4c, 0x98, 0x6a, 0x42, 0xb9, 0x1c, 0x45, 0xd7, 0x0d, 0x6a, 0x70, 0x95, 0x94, 0x2b, 0xbf, 0x96, 0x8f, + 0x07, 0x1c, 0xae, 0x67, 0xa3, 0x1c, 0x93, 0x1d, 0xbd, 0x6b, 0x33, 0x10, 0xfd, 0x7e, 0xb7, 0x81, 0xe8, 0xd5, 0x5e, + 0x06, 0xa2, 0xdf, 0x7f, 0x76, 0x03, 0xd1, 0x77, 0xaa, 0x81, 0x28, 0x6c, 0xe9, 0xb7, 0x74, 0x2f, 0xab, 0x4d, 0x61, + 0x0d, 0x15, 0xdf, 0xa7, 0x43, 0x8f, 0x53, 0xa6, 0xa9, 0x3f, 0xa7, 0xc0, 0x6d, 0xf3, 0x6d, 0x1a, 0xc6, 0x33, 0xb0, + 0xe0, 0xfc, 0xed, 0x6d, 0x2d, 0xc3, 0x78, 0xa6, 0x5a, 0x5a, 0xa6, 0x3c, 0xdc, 0x73, 0x11, 0xc2, 0x8d, 0x59, 0x37, + 0xba, 0x96, 0x38, 0x7b, 0xf6, 0xa1, 0xa9, 0xa4, 0xb4, 0x97, 0xa6, 0xab, 0x1d, 0x61, 0xff, 0xd8, 0x47, 0xd3, 0x49, + 0xd9, 0xb0, 0xf3, 0x32, 0x96, 0x49, 0x7b, 0x8a, 0x1e, 0xa4, 0x8b, 0x00, 0x0b, 0x12, 0xb3, 0xd1, 0x7f, 0x5a, 0x7b, + 0x5f, 0x5d, 0x7b, 0x83, 0xae, 0x07, 0x91, 0x19, 0x80, 0x57, 0xc3, 0x02, 0x77, 0xd0, 0xed, 0x42, 0xc1, 0xbd, 0x52, + 0xd0, 0x81, 0x82, 0x40, 0x29, 0xe8, 0x41, 0x81, 0xaf, 0x14, 0x1c, 0x41, 0xc1, 0x44, 0x29, 0x38, 0x86, 0x82, 0x3b, + 0x3d, 0xbf, 0x2e, 0x12, 0x39, 0x1d, 0x9b, 0x37, 0x16, 0xe3, 0x0d, 0x44, 0xd9, 0xb1, 0xe5, 0x81, 0x19, 0x23, 0x99, + 0xf5, 0x63, 0x8b, 0xc9, 0xe9, 0xfa, 0x89, 0x75, 0x3f, 0xa7, 0x2c, 0x4a, 0xfc, 0x1b, 0xbc, 0x3a, 0x9c, 0x2c, 0x06, + 0xa7, 0x09, 0x11, 0x7d, 0x45, 0xc0, 0x41, 0xd3, 0x4d, 0x10, 0xbd, 0x0c, 0xe4, 0xca, 0x89, 0x08, 0x36, 0xca, 0x5a, + 0x16, 0xef, 0xd8, 0xe7, 0x6c, 0xb9, 0x05, 0x0a, 0x4b, 0x2e, 0x43, 0x95, 0xef, 0x7d, 0x0e, 0x7b, 0x9e, 0x37, 0x74, + 0xbc, 0x9a, 0x69, 0x97, 0xf1, 0x6c, 0xa7, 0x69, 0x8e, 0xfa, 0x0a, 0x46, 0xa9, 0x33, 0x0d, 0x88, 0x2d, 0xb6, 0x25, + 0xff, 0x16, 0x7b, 0xcc, 0xcb, 0xf5, 0x33, 0x18, 0x9b, 0x96, 0x31, 0xc3, 0x30, 0xf8, 0x0e, 0xc0, 0x48, 0x39, 0xf5, + 0x97, 0x00, 0x67, 0xe5, 0xf9, 0x8a, 0x28, 0xe3, 0x39, 0xfb, 0x8e, 0xa6, 0x29, 0x99, 0x89, 0xfa, 0xf5, 0x71, 0x82, + 0x31, 0x9c, 0x64, 0xa3, 0x10, 0x80, 0x20, 0x13, 0x0b, 0x6a, 0x36, 0x4f, 0x49, 0x7c, 0xaf, 0x81, 0x55, 0x1d, 0x6c, + 0xa8, 0xc2, 0xfe, 0x27, 0x70, 0x60, 0x09, 0xcb, 0x38, 0x08, 0x0e, 0xff, 0x1d, 0x0d, 0xab, 0x85, 0x19, 0x99, 0x55, + 0x8b, 0xd8, 0x3e, 0xc8, 0xd5, 0xb1, 0x49, 0x93, 0x98, 0x52, 0xe1, 0xaf, 0xb1, 0xcb, 0x08, 0xe3, 0xd9, 0x6f, 0x6a, + 0x94, 0xb1, 0xc5, 0x30, 0xe7, 0x36, 0xb5, 0x82, 0x6c, 0xe4, 0x20, 0x8c, 0x35, 0x07, 0x40, 0xd8, 0x8f, 0xb2, 0xb9, + 0x8d, 0x7e, 0xa5, 0x46, 0x27, 0x32, 0x2d, 0x07, 0xd7, 0x76, 0x53, 0xf5, 0xa6, 0xef, 0x27, 0xb3, 0x31, 0x31, 0xbc, + 0xce, 0xb1, 0x25, 0xfe, 0x1c, 0xb7, 0x67, 0xe6, 0xd8, 0x83, 0x36, 0x09, 0xee, 0x36, 0xd3, 0x38, 0xca, 0xec, 0x29, + 0x59, 0x04, 0xe1, 0x43, 0x7f, 0x11, 0x47, 0x71, 0xba, 0x24, 0x3e, 0x1d, 0x14, 0x7c, 0xf1, 0x00, 0xe3, 0xb4, 0x70, + 0x57, 0x61, 0xcf, 0xe9, 0x24, 0x74, 0xc1, 0x5a, 0xcb, 0x30, 0x2c, 0xd3, 0x90, 0xae, 0x73, 0xfe, 0xf9, 0x52, 0x65, + 0x56, 0x15, 0xb7, 0x1c, 0x6b, 0x01, 0x84, 0x25, 0x8f, 0xf1, 0x02, 0x91, 0xcd, 0x06, 0x4b, 0x32, 0xc1, 0xb0, 0xa4, + 0x4e, 0xa7, 0x97, 0xd0, 0x85, 0xe6, 0xf4, 0x5a, 0x3b, 0x4f, 0xe2, 0xfb, 0x33, 0x18, 0x2d, 0x36, 0xb6, 0x53, 0x1a, + 0x4e, 0xf1, 0x8d, 0x8d, 0x6e, 0x65, 0xa2, 0x1f, 0x1b, 0xf9, 0x69, 0xe8, 0x8d, 0x2e, 0x06, 0xf0, 0xba, 0xdf, 0xd1, + 0xdc, 0xc1, 0x22, 0x88, 0x6c, 0x36, 0x9d, 0x63, 0x77, 0xa9, 0xf4, 0xa5, 0xc2, 0xcf, 0xdc, 0x60, 0x75, 0x4f, 0x73, + 0x07, 0xc0, 0x73, 0x4d, 0xc3, 0xf8, 0xbe, 0x3f, 0x0f, 0x26, 0x13, 0x1a, 0x0d, 0x70, 0xcc, 0xb2, 0x90, 0x86, 0x61, + 0xb0, 0x4c, 0x83, 0x74, 0xb0, 0x20, 0x6b, 0xde, 0xeb, 0x61, 0x5b, 0xaf, 0x5d, 0xde, 0x6b, 0x77, 0xef, 0x5e, 0x95, + 0x6e, 0xc0, 0x85, 0x8d, 0xf5, 0xc3, 0x87, 0xd6, 0xd3, 0xdc, 0xca, 0x3c, 0xf7, 0xee, 0x75, 0x99, 0xd0, 0xcd, 0x82, + 0x24, 0xb3, 0x20, 0xea, 0xbb, 0xb9, 0x73, 0xb7, 0x61, 0x1b, 0xe3, 0xe9, 0xc9, 0xc9, 0x49, 0xee, 0x4c, 0xc4, 0x93, + 0x3b, 0x99, 0xe4, 0x8e, 0x2f, 0x9e, 0xa6, 0x53, 0xd7, 0x9d, 0x4e, 0x73, 0x27, 0x10, 0x05, 0xdd, 0x8e, 0x3f, 0xe9, + 0x76, 0x72, 0xe7, 0x5e, 0xa9, 0x91, 0x3b, 0x94, 0x3f, 0x25, 0x74, 0x32, 0xc0, 0x8d, 0xc4, 0xec, 0xbc, 0xfb, 0xc7, + 0xae, 0x9b, 0x23, 0x06, 0xb8, 0x2e, 0xe1, 0x26, 0x14, 0xd9, 0xdc, 0x6c, 0xf6, 0xae, 0xa9, 0x15, 0x9f, 0xf3, 0xfd, + 0xc6, 0x7a, 0x13, 0x92, 0xdc, 0xde, 0x68, 0xca, 0x2c, 0x08, 0x61, 0xd5, 0x36, 0x02, 0x0c, 0xf6, 0xba, 0x0f, 0xf1, + 0xfa, 0x06, 0xe3, 0x38, 0x81, 0x33, 0x9b, 0x90, 0x49, 0xb0, 0x4a, 0xfb, 0x5e, 0x67, 0xb9, 0x16, 0x45, 0x7c, 0xaf, + 0x17, 0x05, 0x78, 0xf6, 0xfa, 0x69, 0x1c, 0x06, 0x13, 0x51, 0xd4, 0x76, 0x96, 0xbc, 0x8e, 0x39, 0xc0, 0x68, 0x15, + 0x01, 0xc6, 0x5c, 0x21, 0x61, 0xa8, 0x39, 0xdd, 0x54, 0xa3, 0x24, 0x45, 0x49, 0xad, 0xe6, 0xa6, 0x0c, 0x2e, 0x18, + 0x99, 0xc2, 0x3b, 0x5c, 0xae, 0xe5, 0x9e, 0xf7, 0x8e, 0x96, 0xeb, 0xfc, 0x0f, 0x0b, 0x3a, 0x09, 0x88, 0x66, 0x14, + 0xbb, 0xc9, 0x73, 0x41, 0x9a, 0x6b, 0x6e, 0x5a, 0xb6, 0xa9, 0x38, 0x16, 0x10, 0xd7, 0xf4, 0x49, 0xb0, 0x58, 0xc6, + 0x49, 0x46, 0xa2, 0x2c, 0xcf, 0x47, 0x37, 0x79, 0x3e, 0xb8, 0x0a, 0x8c, 0xeb, 0xbf, 0x1a, 0xec, 0x9e, 0x66, 0xda, + 0x8f, 0xdc, 0xbc, 0xb1, 0xde, 0x52, 0xd5, 0x52, 0x0a, 0xae, 0x31, 0xb4, 0x92, 0x52, 0x2b, 0xb3, 0x5b, 0xb2, 0x5e, + 0x99, 0x01, 0x59, 0x56, 0x67, 0x96, 0x57, 0xe5, 0x2a, 0x78, 0x03, 0x41, 0x85, 0xb7, 0x74, 0x78, 0xa5, 0x58, 0x5d, + 0x01, 0xb1, 0x82, 0x95, 0x99, 0x53, 0xd1, 0xb3, 0x36, 0x9a, 0xf1, 0xcb, 0xdd, 0x34, 0xe3, 0x8f, 0xd9, 0x3e, 0x34, + 0xe3, 0x97, 0x9f, 0x9d, 0x66, 0x7c, 0x56, 0x77, 0x2a, 0xba, 0x88, 0x87, 0xba, 0x94, 0xd5, 0xc3, 0xd5, 0x94, 0xb0, + 0x70, 0x5d, 0x17, 0xbf, 0xd8, 0x07, 0x48, 0xf4, 0xc6, 0x12, 0x50, 0xb2, 0x9b, 0x1b, 0x68, 0xf1, 0x77, 0xd1, 0xf0, + 0x2f, 0x89, 0xfa, 0x3c, 0x9d, 0x0e, 0xdf, 0xc4, 0x4a, 0x81, 0x7c, 0xe2, 0xf6, 0x0f, 0xa5, 0xd0, 0x2a, 0xec, 0x8d, + 0xb0, 0x6e, 0xc6, 0xe4, 0x33, 0x10, 0x99, 0x81, 0x59, 0xf3, 0x4f, 0xa4, 0xfd, 0xe6, 0xa0, 0x3c, 0x04, 0x43, 0x9a, + 0x52, 0x0b, 0xff, 0xbb, 0x9a, 0x44, 0x70, 0x46, 0x33, 0xee, 0x30, 0xff, 0xd5, 0xc3, 0xc5, 0xc4, 0xb8, 0x88, 0xcd, + 0x3c, 0x48, 0xdf, 0x55, 0xbd, 0xdf, 0xb8, 0x16, 0x65, 0xa8, 0x4e, 0x27, 0xe7, 0x76, 0x93, 0x6a, 0x76, 0x79, 0x78, + 0xcd, 0x9a, 0x9f, 0x97, 0x66, 0xda, 0x57, 0x1b, 0x72, 0x0e, 0xb4, 0x76, 0x19, 0x73, 0xd7, 0xa3, 0x0d, 0xa7, 0x00, + 0x31, 0x71, 0x1f, 0x06, 0x0d, 0x98, 0xb0, 0xe6, 0xc1, 0x24, 0xcf, 0xcd, 0x81, 0x00, 0x84, 0x72, 0xd1, 0xd2, 0x5d, + 0x44, 0x5c, 0x7a, 0x2f, 0xad, 0x03, 0xb8, 0xae, 0x8d, 0x29, 0xd2, 0x2e, 0x40, 0x35, 0xcd, 0xd5, 0x6e, 0x1c, 0x66, + 0xba, 0xc6, 0xc0, 0xc7, 0x4c, 0x16, 0x94, 0x09, 0x81, 0x2e, 0x55, 0xc2, 0x5f, 0xbc, 0x12, 0x05, 0x75, 0xdb, 0x68, + 0x06, 0x1c, 0xd4, 0xad, 0x43, 0x88, 0x0f, 0x21, 0x9e, 0x66, 0x68, 0x87, 0xd7, 0xc1, 0x87, 0x5c, 0x97, 0xb4, 0x1f, + 0x6e, 0x3f, 0x60, 0xcf, 0x96, 0x24, 0xaa, 0xf0, 0x92, 0xbb, 0x6c, 0x7c, 0x81, 0x94, 0x48, 0xef, 0x2d, 0x27, 0xbd, + 0xd7, 0x5e, 0x6c, 0x44, 0x78, 0x9c, 0x8c, 0x2c, 0x6d, 0xe0, 0x1c, 0x11, 0xf7, 0x72, 0x8c, 0xa7, 0x44, 0xe2, 0x19, + 0xac, 0x52, 0xc0, 0x8d, 0xc8, 0x70, 0x22, 0xfe, 0x19, 0xf8, 0xab, 0x24, 0x8d, 0x93, 0xfe, 0x32, 0x0e, 0xa2, 0x8c, + 0x26, 0x39, 0x82, 0xea, 0x1a, 0xe1, 0x23, 0xc0, 0x73, 0xb3, 0x89, 0x97, 0xc4, 0x0f, 0xb2, 0x87, 0xbe, 0xcb, 0x49, + 0x0a, 0x77, 0xc0, 0xa9, 0x03, 0xb7, 0xb1, 0x7e, 0x9f, 0x43, 0xf3, 0x25, 0x12, 0x7e, 0x49, 0x9d, 0x9c, 0x51, 0xb7, + 0xf9, 0x40, 0x79, 0xcb, 0x02, 0x04, 0x01, 0xf9, 0x41, 0x12, 0x7b, 0x06, 0x58, 0x1e, 0x96, 0xda, 0x9d, 0xd0, 0x99, + 0x85, 0x58, 0x1b, 0xc4, 0xeb, 0xe2, 0xcf, 0xe9, 0x99, 0x9a, 0xdb, 0x5c, 0x0c, 0x14, 0x8f, 0xb9, 0xcf, 0xc8, 0xfa, + 0x04, 0xd2, 0xe9, 0x59, 0xfb, 0xd4, 0x1c, 0xd3, 0x69, 0x9c, 0x50, 0x16, 0x4c, 0xda, 0x3b, 0x59, 0xae, 0xf7, 0xef, + 0x7e, 0xfb, 0xf4, 0x9b, 0xfb, 0x89, 0xe2, 0xcc, 0x10, 0x9d, 0x99, 0x3b, 0x7a, 0xab, 0xdf, 0x67, 0x40, 0x1a, 0x32, + 0xc8, 0xfb, 0x2c, 0x6e, 0x5f, 0x5f, 0xd7, 0x07, 0x8d, 0x31, 0xfb, 0x96, 0x31, 0xbf, 0xf3, 0x12, 0x1a, 0x92, 0x2c, + 0xb8, 0x13, 0x34, 0x63, 0xf7, 0x68, 0xb9, 0x16, 0x6b, 0x8c, 0x17, 0xde, 0x23, 0x16, 0xa9, 0x32, 0x14, 0xb1, 0x48, + 0xd5, 0x62, 0x5c, 0xa4, 0x41, 0x6d, 0x36, 0x22, 0x8c, 0x4d, 0xe5, 0xa6, 0xef, 0x2d, 0xd7, 0xea, 0x15, 0x5d, 0x34, + 0x93, 0x37, 0x75, 0x35, 0xfe, 0xe0, 0x22, 0x98, 0x4c, 0x42, 0x9a, 0x97, 0x16, 0xba, 0xbc, 0x96, 0x0a, 0x70, 0x24, + 0x1c, 0xc8, 0x38, 0x8d, 0xc3, 0x55, 0x46, 0x9b, 0xc1, 0xc5, 0x80, 0xd3, 0x71, 0x0b, 0xe0, 0xe0, 0xef, 0xf2, 0x58, + 0x7b, 0x40, 0x6e, 0xc3, 0x36, 0x71, 0x07, 0x10, 0x6e, 0xdc, 0xee, 0x96, 0x87, 0x0e, 0xaf, 0xe4, 0xa0, 0xad, 0x86, + 0x89, 0x58, 0x70, 0x2d, 0x31, 0xec, 0xad, 0x39, 0x1e, 0x2f, 0x93, 0x21, 0x97, 0x65, 0x51, 0x5e, 0x9e, 0xcc, 0x6f, + 0x73, 0xc6, 0x5e, 0x35, 0x9f, 0xb1, 0x57, 0xe2, 0x8c, 0x6d, 0xdf, 0x99, 0x4f, 0xa7, 0x1e, 0xfc, 0x37, 0x28, 0x26, + 0xd4, 0x77, 0xb5, 0xee, 0x72, 0xad, 0x79, 0xcb, 0xb5, 0x66, 0x77, 0x96, 0x6b, 0x0d, 0xbb, 0x46, 0xcb, 0x0a, 0xcb, + 0xe9, 0x98, 0x96, 0xab, 0x41, 0x21, 0xfc, 0xb9, 0xa5, 0x57, 0xde, 0x21, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, + 0xf6, 0xa3, 0xce, 0xce, 0x92, 0x40, 0xda, 0xa6, 0x93, 0x91, 0xf1, 0x98, 0x4e, 0xfa, 0xd3, 0xd8, 0x5f, 0xa5, 0x7f, + 0xe7, 0xe3, 0xe7, 0x40, 0xdc, 0x8a, 0x08, 0x2a, 0xfd, 0x88, 0xa6, 0xa0, 0xef, 0xb8, 0xa3, 0xa2, 0x87, 0x8d, 0x5c, + 0xa7, 0x3e, 0x8b, 0x8d, 0xde, 0x71, 0x0e, 0x1b, 0x36, 0x79, 0x33, 0xa0, 0x7f, 0xb3, 0x55, 0x6a, 0x47, 0x31, 0xbf, + 0x02, 0x2c, 0x5b, 0xc1, 0xf1, 0x78, 0x68, 0xf0, 0xd5, 0x74, 0x4f, 0x9a, 0x87, 0x7b, 0x2d, 0xbe, 0x74, 0x23, 0x2e, + 0x15, 0x7e, 0x6f, 0x71, 0x87, 0xaf, 0xed, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x5b, 0x2e, 0x84, 0xa2, 0xee, 0x9e, + 0x58, 0xfe, 0xe9, 0xab, 0x43, 0xf8, 0x8f, 0x51, 0xf5, 0x3f, 0x66, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xff, 0x81, 0x91, + 0x4a, 0x48, 0x88, 0xef, 0x5f, 0x7f, 0x3a, 0x7d, 0x5c, 0x83, 0xbd, 0x6b, 0x33, 0xa3, 0xa4, 0x6a, 0xed, 0xaf, 0xe2, + 0x18, 0xf2, 0xf6, 0xd6, 0xab, 0x0b, 0xf0, 0x30, 0x17, 0x8f, 0x6c, 0x08, 0x8d, 0x04, 0x1f, 0xc1, 0x94, 0xf1, 0x3a, + 0xb6, 0x61, 0xac, 0xc4, 0xdb, 0x36, 0x56, 0xe2, 0xcd, 0x6e, 0x56, 0xe2, 0xdb, 0xbd, 0x58, 0x89, 0x37, 0x9f, 0x9d, + 0x95, 0x78, 0x5b, 0x67, 0x25, 0xae, 0x62, 0x61, 0x89, 0x6a, 0x5d, 0xac, 0xf8, 0xcf, 0x0f, 0x4c, 0xb7, 0x76, 0x19, + 0x0f, 0x7b, 0x2e, 0x8b, 0x77, 0x7e, 0xf5, 0x8b, 0x19, 0x0b, 0xdc, 0x88, 0xef, 0xd1, 0x30, 0xab, 0x60, 0x2d, 0x38, + 0x66, 0xc7, 0xef, 0x28, 0xc5, 0x61, 0x1c, 0xcd, 0xbe, 0x07, 0xdd, 0x2a, 0x88, 0x03, 0x13, 0xe5, 0x45, 0x90, 0x7e, + 0x1f, 0x2f, 0x57, 0xcb, 0x0b, 0xe8, 0xeb, 0x43, 0x90, 0x06, 0xe3, 0x90, 0xca, 0x30, 0x04, 0xcc, 0x90, 0x8c, 0xcb, + 0xc4, 0xc1, 0x76, 0x53, 0xfc, 0x24, 0x6b, 0xf1, 0x13, 0xad, 0x3b, 0xf9, 0x6f, 0x66, 0xa1, 0xa6, 0x37, 0x33, 0x22, + 0x10, 0xb0, 0xab, 0x32, 0xe8, 0xc7, 0x33, 0x23, 0x57, 0xb1, 0xd9, 0x30, 0x4b, 0x61, 0xb6, 0xd0, 0xda, 0x0f, 0xad, + 0x31, 0x35, 0x2b, 0xd3, 0x92, 0xf1, 0xf7, 0xea, 0x62, 0xf8, 0x45, 0xbc, 0x4a, 0xe9, 0x24, 0xbe, 0x8f, 0x74, 0x2b, + 0x95, 0xae, 0x35, 0xa0, 0xa8, 0x94, 0x6d, 0x30, 0x73, 0xac, 0xd4, 0xcc, 0xe8, 0x90, 0xb8, 0x78, 0xb5, 0xb4, 0x99, + 0xc6, 0xd8, 0xc6, 0x29, 0xea, 0x32, 0xc5, 0xd9, 0x13, 0xc3, 0x88, 0x87, 0x8f, 0x6b, 0x29, 0x2c, 0x2e, 0x62, 0x87, + 0x4b, 0x85, 0x53, 0x23, 0x15, 0xc2, 0x45, 0x11, 0x04, 0xa7, 0x61, 0xe1, 0xf8, 0x1b, 0xe6, 0x12, 0x5e, 0xbc, 0x85, + 0x10, 0x42, 0xf9, 0x8a, 0xaf, 0x07, 0x0f, 0x09, 0xc3, 0x1e, 0x5f, 0x2b, 0x60, 0x7c, 0x77, 0x47, 0x93, 0x90, 0x3c, + 0x18, 0x66, 0x1e, 0x47, 0xdf, 0x01, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0x33, 0x35, 0x35, 0xec, 0xa5, 0xc6, + 0xe0, 0x45, 0xe0, 0xae, 0xa5, 0x8c, 0x00, 0x72, 0x64, 0xcf, 0xe8, 0x5f, 0x2c, 0xf6, 0xef, 0x5f, 0xcd, 0xdc, 0xba, + 0x8c, 0xe5, 0x87, 0xfe, 0xbc, 0xdc, 0xe3, 0x33, 0xcf, 0x9f, 0x3f, 0x69, 0x9f, 0xb6, 0x01, 0xe9, 0xc2, 0x45, 0xe6, + 0x6b, 0xa3, 0xa1, 0xb5, 0xd9, 0x7a, 0x0a, 0x60, 0x14, 0x57, 0xf1, 0xca, 0x9f, 0xa3, 0xc9, 0xe8, 0xe7, 0x9b, 0x6f, + 0x06, 0x7d, 0x62, 0x8a, 0x62, 0x39, 0xf5, 0x4a, 0x51, 0x01, 0x05, 0xfc, 0xfe, 0x5b, 0x88, 0xbe, 0xfb, 0x6f, 0x04, + 0x43, 0x7d, 0xd7, 0x70, 0x2e, 0x3e, 0x78, 0xdc, 0xe6, 0x1d, 0x40, 0x26, 0x5d, 0x1e, 0xd7, 0x46, 0x28, 0xd7, 0x9a, + 0x91, 0x4c, 0x5e, 0x05, 0x9a, 0x1a, 0x43, 0xb2, 0x2d, 0x3c, 0xa6, 0xf8, 0x0a, 0x75, 0x18, 0x9b, 0xce, 0x4d, 0xf6, + 0x2d, 0xca, 0xb1, 0x55, 0x05, 0xc9, 0x70, 0xcb, 0x05, 0x8a, 0xe8, 0xab, 0xfa, 0x6e, 0x11, 0x44, 0x16, 0xa6, 0x80, + 0xa8, 0xbf, 0x21, 0x6b, 0x08, 0x82, 0x0e, 0xc8, 0xad, 0xfa, 0x0a, 0x0a, 0x2d, 0xaa, 0x78, 0x8b, 0x42, 0x9e, 0x37, + 0xbd, 0x11, 0x12, 0x42, 0x8b, 0x37, 0xfa, 0x9d, 0xa6, 0x69, 0x9a, 0x64, 0x23, 0x34, 0xc9, 0x47, 0x60, 0x39, 0xb2, + 0x03, 0xa0, 0x2d, 0xc9, 0x97, 0x6b, 0x56, 0x02, 0x9c, 0x01, 0x98, 0x78, 0xc8, 0x02, 0x1e, 0xe7, 0xb3, 0xe7, 0x8a, + 0x02, 0xc1, 0xd0, 0x43, 0x8c, 0x46, 0x92, 0x40, 0x38, 0xf0, 0xbe, 0x86, 0x0c, 0x3b, 0xbe, 0xe5, 0x92, 0x60, 0xcd, + 0x65, 0x8f, 0xa3, 0x01, 0x6d, 0x0e, 0x08, 0x99, 0x2a, 0x58, 0x10, 0xb4, 0x0e, 0x95, 0xf8, 0xee, 0x16, 0x6d, 0xc0, + 0x8d, 0xc8, 0x17, 0xad, 0xb3, 0x05, 0x8d, 0x56, 0x3a, 0x26, 0x84, 0xc3, 0xe0, 0xe2, 0x50, 0xe7, 0x0d, 0x23, 0xb6, + 0x00, 0xdb, 0x34, 0xb7, 0x9c, 0xb3, 0xbb, 0x30, 0xe2, 0x28, 0x95, 0x58, 0x3e, 0x57, 0x6c, 0x46, 0x1c, 0xb7, 0x55, + 0x6f, 0x08, 0xbe, 0xa4, 0x71, 0xd5, 0x7d, 0x91, 0xd9, 0x14, 0x43, 0x1f, 0x2c, 0x34, 0x0e, 0x17, 0x17, 0x09, 0xb0, + 0x1b, 0xa4, 0xba, 0x68, 0x52, 0x23, 0x43, 0x2a, 0x82, 0xa2, 0xc4, 0xac, 0x77, 0xc3, 0xc7, 0x09, 0x51, 0xc9, 0x5a, + 0xfb, 0xf1, 0x6b, 0xfd, 0xb4, 0x4c, 0xfa, 0x96, 0x3e, 0xb0, 0x8b, 0x84, 0x81, 0xea, 0x96, 0x3e, 0x80, 0x09, 0xdf, + 0x5b, 0x90, 0xa6, 0xe8, 0x5b, 0xd0, 0xb5, 0x05, 0x79, 0x3e, 0x7c, 0x88, 0x54, 0xb7, 0xe5, 0x00, 0xb9, 0xf9, 0x16, + 0x2c, 0x8e, 0x20, 0x86, 0x94, 0xee, 0xe2, 0x10, 0x73, 0x63, 0x79, 0xa3, 0x11, 0xc6, 0x76, 0xc3, 0xd1, 0x30, 0x5f, + 0x78, 0xae, 0x7b, 0x50, 0xab, 0x0f, 0x82, 0xec, 0xa6, 0xda, 0xa6, 0x95, 0x0d, 0x3d, 0xd7, 0x0e, 0x5e, 0x38, 0x9d, + 0x41, 0xed, 0x8e, 0x56, 0x02, 0xc9, 0x8e, 0x50, 0xfc, 0x75, 0xf6, 0x6c, 0x63, 0xa4, 0x2d, 0xe0, 0x2d, 0x8c, 0xcf, + 0x71, 0x6c, 0x39, 0x97, 0x7f, 0x8d, 0xea, 0x57, 0x3f, 0x0b, 0x63, 0xcb, 0x92, 0x1a, 0x8d, 0x20, 0x14, 0xba, 0x01, + 0xc7, 0xe8, 0xf7, 0xda, 0x4b, 0xcd, 0x60, 0xc7, 0xc7, 0x34, 0x47, 0x03, 0x81, 0x51, 0x84, 0x5b, 0x97, 0xda, 0x41, + 0xe5, 0x8b, 0x51, 0x15, 0xc3, 0xf1, 0xa0, 0xcb, 0xb4, 0xd0, 0xe8, 0x6d, 0xa5, 0x16, 0xb0, 0xff, 0x96, 0xeb, 0xd3, + 0x19, 0x43, 0xbc, 0x0f, 0xa8, 0x01, 0x89, 0x13, 0x76, 0x76, 0xb8, 0x5a, 0x96, 0xbb, 0x2b, 0x5f, 0x92, 0xfb, 0x77, + 0x86, 0x97, 0x0e, 0xea, 0xd0, 0x64, 0x7f, 0xcd, 0xd7, 0xdd, 0x23, 0xbb, 0xa4, 0xd1, 0xa4, 0xdc, 0x61, 0xe5, 0xfe, + 0xda, 0xbf, 0xbb, 0x12, 0x46, 0x81, 0x8c, 0x22, 0x71, 0x03, 0x46, 0xc9, 0xe3, 0x08, 0x37, 0x3f, 0x3b, 0x6e, 0xc1, + 0x5e, 0x54, 0x0c, 0x36, 0x60, 0xe1, 0x00, 0x65, 0x33, 0x45, 0x28, 0x0e, 0x61, 0xeb, 0xd1, 0x19, 0xde, 0x10, 0x84, + 0x68, 0xeb, 0x4e, 0xcc, 0x84, 0x69, 0x60, 0xd1, 0x26, 0xe0, 0x81, 0x68, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, + 0xd9, 0x2e, 0xa9, 0x35, 0x73, 0x4c, 0xba, 0x4f, 0xc8, 0x52, 0xf1, 0x6d, 0x13, 0xc4, 0xb9, 0xea, 0xe2, 0x56, 0x12, + 0x75, 0xa3, 0x1f, 0x93, 0x68, 0x55, 0xeb, 0x8d, 0x19, 0xfb, 0xa1, 0xf8, 0x5b, 0x61, 0x50, 0x84, 0x42, 0x5d, 0x95, + 0x8d, 0x5f, 0x15, 0xb2, 0x71, 0xc6, 0xd5, 0x14, 0x2e, 0x29, 0x82, 0xfa, 0x57, 0xdc, 0xbd, 0x24, 0x77, 0x50, 0xb8, + 0x7d, 0x15, 0x23, 0x55, 0x1c, 0x99, 0x0a, 0x46, 0x43, 0x71, 0x8f, 0x13, 0x5c, 0x46, 0xd9, 0x4b, 0xae, 0x5c, 0xb5, + 0xf0, 0x63, 0x2a, 0xca, 0x41, 0xea, 0x8e, 0x43, 0x96, 0xc5, 0xea, 0xb6, 0x29, 0x3b, 0xb2, 0xa8, 0xaf, 0x95, 0x4d, + 0x22, 0x3d, 0x4e, 0x18, 0x80, 0x85, 0x98, 0xbe, 0xa2, 0xd7, 0x96, 0x36, 0x10, 0x38, 0xc8, 0x06, 0x07, 0xb9, 0xdd, + 0xd2, 0x79, 0x96, 0x2c, 0xa5, 0xd0, 0xc2, 0xab, 0x32, 0x08, 0x84, 0xef, 0xcd, 0xa6, 0xe1, 0x96, 0xc7, 0x4b, 0x9e, + 0xdf, 0xef, 0x20, 0x5e, 0xd4, 0x5c, 0x55, 0x91, 0x8f, 0x27, 0xd3, 0x66, 0x56, 0xb6, 0x58, 0xb5, 0xde, 0x29, 0x13, + 0xe2, 0x6c, 0xb8, 0x8f, 0x49, 0x59, 0x46, 0xcf, 0x6b, 0xf4, 0xc5, 0x77, 0xf9, 0xd6, 0x49, 0x56, 0x11, 0x26, 0xb6, + 0xb0, 0xb3, 0x84, 0xf8, 0xb7, 0xca, 0x90, 0x85, 0x9c, 0x13, 0x64, 0xc0, 0x65, 0x4d, 0xc1, 0x80, 0x60, 0x1c, 0x58, + 0xda, 0x77, 0x3a, 0xa9, 0x22, 0x7d, 0xe9, 0x3f, 0x75, 0xbb, 0xe4, 0xd5, 0xf4, 0xb0, 0x22, 0x14, 0xed, 0xf4, 0xca, + 0x22, 0xf3, 0x96, 0x71, 0x64, 0xf3, 0xd5, 0x62, 0xbc, 0x51, 0x65, 0xab, 0x8a, 0xc8, 0xb5, 0x2e, 0x66, 0x55, 0x3f, + 0x3b, 0x9d, 0x4e, 0xcb, 0x82, 0x46, 0x57, 0x3b, 0x44, 0x61, 0xe1, 0x53, 0xd7, 0x75, 0xab, 0x63, 0xdf, 0x0e, 0x76, + 0x1b, 0xe5, 0xb6, 0x27, 0x8d, 0x23, 0x46, 0xd8, 0xee, 0x82, 0x5f, 0x1d, 0x1c, 0xb9, 0x53, 0x9c, 0xec, 0x92, 0x59, + 0xc4, 0x80, 0x19, 0x43, 0x04, 0x19, 0x5d, 0xa4, 0x7d, 0x9f, 0xa2, 0x0e, 0xc6, 0x51, 0x0e, 0x34, 0x1a, 0x0e, 0xd8, + 0x33, 0x30, 0x15, 0xf1, 0xc4, 0xae, 0x70, 0x35, 0x94, 0x87, 0xd7, 0x84, 0xf7, 0xe2, 0x23, 0x78, 0x50, 0x36, 0x75, + 0x99, 0x36, 0x4e, 0xab, 0xe7, 0xfe, 0xbe, 0x54, 0x4f, 0x83, 0x0b, 0x70, 0x23, 0x14, 0xda, 0x4c, 0x3e, 0x8b, 0xff, + 0x2f, 0xe5, 0xff, 0xaf, 0x96, 0xeb, 0xb2, 0xfd, 0xc8, 0x09, 0x48, 0xb4, 0x8b, 0xd3, 0xc2, 0x46, 0xdd, 0xb4, 0x07, + 0xa4, 0x95, 0xc1, 0x54, 0x55, 0xa0, 0x83, 0x92, 0xbe, 0x94, 0xfd, 0xa7, 0x41, 0xfc, 0x8e, 0x14, 0x33, 0x2c, 0x71, + 0x21, 0x42, 0x2c, 0x72, 0x57, 0xc2, 0x1c, 0xac, 0x97, 0x27, 0xa8, 0x3f, 0x28, 0xed, 0x09, 0xd0, 0xc6, 0xd7, 0xe6, + 0xb6, 0x97, 0xb8, 0xbf, 0xaa, 0xd7, 0x12, 0x1d, 0x03, 0xc8, 0x3c, 0x38, 0x84, 0x68, 0x48, 0xa0, 0x55, 0x36, 0x37, + 0x1b, 0xa5, 0x7c, 0xab, 0xea, 0xd9, 0xc4, 0xc0, 0xb0, 0xbb, 0xe6, 0x2a, 0xac, 0x6f, 0xa1, 0x2d, 0x80, 0xc9, 0xf2, + 0xed, 0x87, 0xcf, 0x36, 0x2c, 0xb1, 0xba, 0x1f, 0x3d, 0x5c, 0x72, 0xdc, 0xbf, 0x36, 0xde, 0x9d, 0x29, 0x3b, 0xff, + 0x28, 0x5f, 0xfc, 0xb6, 0x51, 0xa0, 0x77, 0x55, 0x92, 0xd0, 0x71, 0xa3, 0xef, 0x8e, 0xb9, 0x57, 0xed, 0x45, 0x10, + 0xed, 0x5f, 0x97, 0xac, 0xf7, 0xae, 0x0b, 0x17, 0xc6, 0xde, 0x95, 0xe1, 0xc6, 0x61, 0x96, 0x0b, 0xd9, 0xf0, 0x5b, + 0x45, 0xa0, 0xa8, 0xfa, 0xef, 0xea, 0xd8, 0x8a, 0x51, 0xf9, 0x57, 0x2b, 0x20, 0x3e, 0xf7, 0xca, 0xee, 0xa2, 0x89, + 0x04, 0x8d, 0xfa, 0xb1, 0x76, 0xa2, 0x1d, 0x77, 0xb5, 0x23, 0x57, 0x67, 0x5c, 0xd8, 0x50, 0xef, 0x75, 0x0a, 0xbf, + 0xbc, 0x43, 0x57, 0x3f, 0x3b, 0x9d, 0x89, 0x4b, 0x62, 0x1a, 0x84, 0x21, 0x43, 0x15, 0x60, 0xfe, 0x7b, 0x4b, 0xcb, + 0x6a, 0x16, 0x56, 0xc6, 0x8d, 0x40, 0x3a, 0xe2, 0x11, 0xce, 0x8e, 0x4f, 0x96, 0x7d, 0x3c, 0x1b, 0x6a, 0x21, 0x18, + 0x70, 0xb2, 0x52, 0xfc, 0x04, 0xdc, 0xc1, 0x63, 0xfd, 0xec, 0x14, 0xe2, 0x97, 0x6a, 0x93, 0xa1, 0xfe, 0x5d, 0xe7, + 0x58, 0xf3, 0x7a, 0x77, 0x76, 0xd7, 0x77, 0x6d, 0xcf, 0x39, 0xd4, 0x5c, 0xe7, 0xc8, 0xee, 0x38, 0xc7, 0x5a, 0xc7, + 0xe9, 0xc1, 0xbf, 0xbe, 0xe7, 0xbc, 0xd2, 0x5c, 0x78, 0xd2, 0x3c, 0xa7, 0x8b, 0xff, 0x76, 0x9c, 0xe3, 0xbb, 0x2e, + 0xbb, 0xe9, 0x89, 0xf4, 0x8e, 0xaa, 0x8c, 0x02, 0x7c, 0x39, 0xf4, 0x83, 0xb3, 0xd3, 0x55, 0x4a, 0xb5, 0xf5, 0x50, + 0x7f, 0xa5, 0x6b, 0xf3, 0x84, 0x4e, 0x87, 0xfa, 0x53, 0xa2, 0x94, 0x7a, 0x27, 0x8d, 0xc5, 0x9d, 0xe3, 0xc6, 0xe2, + 0xee, 0x51, 0x63, 0xf1, 0x61, 0xaf, 0x5c, 0x7c, 0x30, 0x63, 0xaf, 0x94, 0xf4, 0xa1, 0x0b, 0x92, 0x25, 0xc1, 0xda, + 0xf0, 0x34, 0x40, 0xd7, 0x36, 0xfc, 0x73, 0xdc, 0x31, 0x65, 0xab, 0x31, 0xb4, 0x92, 0xd0, 0x38, 0x3e, 0xd1, 0xbc, + 0xa3, 0x6f, 0x3a, 0x47, 0x3e, 0xd4, 0x83, 0x64, 0xb7, 0xf0, 0x77, 0xd7, 0x3d, 0xf1, 0x5d, 0x0d, 0x1a, 0x7a, 0xf0, + 0xdf, 0xbc, 0xd7, 0xf1, 0xd9, 0x83, 0x0b, 0xef, 0x3f, 0x78, 0xc7, 0xa9, 0x6b, 0x7b, 0xf0, 0xdf, 0xcf, 0x52, 0xe5, + 0x0e, 0x0a, 0x7f, 0xb5, 0xdf, 0x43, 0x57, 0xeb, 0x9e, 0xcc, 0x3b, 0xce, 0xab, 0xbb, 0x63, 0xe7, 0x64, 0xee, 0x1d, + 0x7f, 0x60, 0x4f, 0xa1, 0xdd, 0x71, 0x5e, 0xc1, 0xdf, 0x87, 0xae, 0x3b, 0xb7, 0x3d, 0xe7, 0xe4, 0xae, 0xeb, 0x74, + 0x43, 0xfb, 0xc8, 0x39, 0x81, 0xbf, 0x9f, 0x01, 0xbc, 0x00, 0x57, 0x9e, 0x9d, 0x58, 0x83, 0x8d, 0x51, 0xb1, 0xdf, + 0x50, 0x3f, 0xd2, 0x39, 0xd4, 0x7a, 0x87, 0xdf, 0x9c, 0xdc, 0xd9, 0x87, 0x73, 0xaf, 0x73, 0x67, 0xb7, 0xfe, 0xfc, + 0x00, 0x90, 0xdf, 0xbe, 0x70, 0x00, 0x46, 0x4c, 0x47, 0xf4, 0xbb, 0x91, 0x75, 0xd9, 0x26, 0x46, 0x7f, 0xbf, 0x5b, + 0x8c, 0xfe, 0xf5, 0x6a, 0x1f, 0x31, 0xfa, 0xfb, 0xcf, 0x2e, 0x46, 0xbf, 0xac, 0x5a, 0x71, 0xbf, 0xaf, 0xa6, 0x4d, + 0xf8, 0x71, 0x53, 0x25, 0x92, 0x03, 0x62, 0x5c, 0x5f, 0xad, 0x6e, 0x20, 0xe2, 0xd5, 0xfb, 0x78, 0xf8, 0xf5, 0xaa, + 0x64, 0xa2, 0x14, 0x03, 0x06, 0x78, 0x1f, 0x33, 0x0c, 0xf0, 0xa7, 0xd5, 0x10, 0xec, 0x22, 0xf8, 0xad, 0x19, 0x4c, + 0xec, 0x39, 0x09, 0xa7, 0xf2, 0xc6, 0x85, 0x92, 0x01, 0x16, 0x83, 0xdd, 0x3d, 0x5c, 0x26, 0xa0, 0xac, 0x59, 0x2d, + 0xa2, 0xb4, 0x7f, 0xe4, 0x02, 0x9a, 0xef, 0x4c, 0x93, 0xbc, 0xd2, 0xd8, 0x11, 0x31, 0xc2, 0x3e, 0x72, 0xcb, 0xfc, + 0xd6, 0xf7, 0x68, 0xb2, 0xd6, 0xdc, 0xbb, 0x57, 0xef, 0x57, 0x03, 0x5b, 0x10, 0x61, 0xd2, 0x07, 0xc4, 0x46, 0xd3, + 0xfb, 0xb2, 0xe1, 0x58, 0xc5, 0x54, 0xb0, 0x7d, 0xa4, 0x30, 0x92, 0x6a, 0x7b, 0xaf, 0x6c, 0x78, 0xb6, 0x6b, 0x9a, + 0x0d, 0x9f, 0x2f, 0x35, 0xdf, 0x62, 0xf5, 0x26, 0x3b, 0xae, 0x82, 0xaa, 0x92, 0xf4, 0xaf, 0x11, 0x20, 0x05, 0xed, + 0x59, 0x98, 0xc6, 0x15, 0x84, 0x8f, 0xab, 0xe1, 0x6d, 0xec, 0x2a, 0xef, 0x4a, 0x7d, 0xaa, 0xe6, 0x74, 0x2f, 0x36, + 0x48, 0x0f, 0x06, 0x3f, 0x03, 0x61, 0xc3, 0xef, 0xe3, 0x71, 0xac, 0xc2, 0x79, 0xa3, 0xf4, 0xcb, 0x48, 0xed, 0x7c, + 0xee, 0x6d, 0xea, 0xa4, 0x4d, 0xab, 0x21, 0xad, 0x47, 0x17, 0xe2, 0x8e, 0xc6, 0xcf, 0x33, 0xb3, 0xd5, 0x9c, 0x99, + 0x16, 0xa3, 0x65, 0xee, 0xb6, 0xce, 0x44, 0xbd, 0xa7, 0xb0, 0x89, 0x2d, 0xfe, 0xa0, 0xfa, 0x7f, 0x6f, 0xa6, 0x90, + 0xa0, 0xbd, 0x8f, 0x44, 0x84, 0x42, 0x41, 0x75, 0xd0, 0xc6, 0x76, 0xb0, 0xc5, 0xfc, 0x43, 0xed, 0x98, 0x77, 0x82, + 0xb6, 0xba, 0xdb, 0x2c, 0x46, 0xa4, 0x6b, 0xc3, 0xa6, 0xa4, 0x40, 0xf5, 0x7a, 0xc7, 0x96, 0x77, 0x64, 0x39, 0xc7, + 0x3d, 0x33, 0x17, 0x07, 0x4e, 0xed, 0xb2, 0x04, 0x10, 0x30, 0xd9, 0x95, 0xc3, 0x0c, 0xa2, 0x20, 0x0b, 0x48, 0x98, + 0x03, 0xaa, 0x2f, 0xd3, 0xbc, 0x7f, 0x5b, 0xa5, 0x19, 0xcc, 0x51, 0x90, 0x64, 0x68, 0xae, 0x6c, 0x8f, 0x69, 0x76, + 0x4f, 0x69, 0xd4, 0xa2, 0xca, 0xad, 0x5a, 0x3f, 0xff, 0x76, 0xb6, 0xa0, 0x39, 0xb3, 0xb3, 0x18, 0x67, 0x11, 0xdf, + 0x1f, 0xc2, 0x54, 0x37, 0x1f, 0x59, 0x3f, 0xb7, 0x21, 0xdc, 0xbf, 0xed, 0x46, 0xb8, 0x19, 0xdd, 0x07, 0xe1, 0xfe, + 0xed, 0xb3, 0x23, 0xdc, 0x9f, 0x55, 0x84, 0x5b, 0xf2, 0x54, 0x29, 0x64, 0xa2, 0x3f, 0xe0, 0xb3, 0x01, 0xf1, 0xc6, + 0x5f, 0xea, 0x07, 0x8c, 0xbc, 0xd4, 0x95, 0x3c, 0xd0, 0x1f, 0x4a, 0x89, 0xad, 0x90, 0x65, 0xc7, 0xd0, 0xc3, 0x2c, + 0x89, 0x0e, 0xe4, 0x48, 0x76, 0x85, 0xfb, 0x21, 0xf4, 0x79, 0x11, 0x65, 0xa1, 0xf3, 0x9e, 0xb3, 0x25, 0xa0, 0x82, + 0xf8, 0x3a, 0x4e, 0x16, 0x04, 0x83, 0x22, 0xea, 0x98, 0x10, 0x13, 0x1e, 0x5c, 0x70, 0x18, 0xf3, 0xe3, 0x68, 0x22, + 0xe5, 0xe8, 0x74, 0x78, 0xcd, 0xe8, 0x41, 0xfd, 0x81, 0x92, 0x44, 0xb7, 0xd8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xf7, + 0x45, 0xe7, 0xf0, 0xc5, 0x91, 0x0b, 0xff, 0xf3, 0x68, 0x37, 0xb7, 0x78, 0xc5, 0x45, 0x1c, 0x41, 0x4e, 0x1e, 0x51, + 0xb3, 0xad, 0xda, 0x3d, 0xa5, 0xb7, 0x45, 0xad, 0xe3, 0xe6, 0x4a, 0x13, 0xf2, 0x50, 0xd4, 0x69, 0xac, 0x31, 0x8f, + 0x57, 0xca, 0xb0, 0x1a, 0x46, 0x13, 0x44, 0x2b, 0x90, 0x0c, 0x29, 0x35, 0xd4, 0xd7, 0x7c, 0xba, 0xc5, 0xbc, 0x68, + 0x37, 0xbf, 0x29, 0x12, 0x7f, 0x89, 0x04, 0x44, 0x3b, 0x21, 0xc8, 0x85, 0xea, 0x2e, 0xa6, 0x0d, 0xc0, 0x68, 0x6f, + 0x1a, 0xa4, 0xdd, 0x14, 0x0b, 0x44, 0xd8, 0x02, 0x65, 0xc9, 0x2a, 0xf2, 0x0d, 0xfc, 0x49, 0xc6, 0xa9, 0x11, 0x1c, + 0x40, 0x4c, 0x5e, 0xfc, 0xb0, 0x89, 0xab, 0x46, 0xce, 0xdc, 0x22, 0x4b, 0x4a, 0x24, 0x56, 0x85, 0xbc, 0xc8, 0xac, + 0x84, 0xe5, 0x56, 0xc6, 0xa5, 0xb5, 0x87, 0xe4, 0x85, 0x6c, 0xf8, 0x22, 0xb3, 0x20, 0xbf, 0x31, 0x2c, 0xf7, 0xf3, + 0xe7, 0xac, 0x16, 0x64, 0x1c, 0x65, 0xd3, 0x3a, 0xf7, 0x65, 0x96, 0x42, 0x5d, 0x23, 0xb3, 0x58, 0xc7, 0x2c, 0x85, + 0x7d, 0xdf, 0x8a, 0x5f, 0xbe, 0x3c, 0x1b, 0x7a, 0x26, 0xcf, 0x97, 0x5b, 0x4a, 0xee, 0x76, 0xb9, 0x9f, 0x6a, 0xdc, + 0x6c, 0x74, 0xda, 0x5a, 0x06, 0xd1, 0x4c, 0x68, 0xa6, 0x25, 0xf6, 0x82, 0x64, 0x2b, 0x4c, 0x05, 0x46, 0x84, 0x8a, + 0x5a, 0xd4, 0xb9, 0xa3, 0x09, 0xe4, 0xfa, 0x1d, 0xea, 0x5d, 0xc7, 0x75, 0x5c, 0x5d, 0x36, 0x9c, 0x06, 0xb3, 0xe1, + 0x26, 0xce, 0x08, 0xa4, 0xad, 0x0a, 0xe3, 0x19, 0x78, 0x7e, 0x64, 0x41, 0x16, 0x42, 0x0e, 0x24, 0x70, 0x01, 0x59, + 0x30, 0xae, 0x31, 0xe7, 0xf6, 0xb8, 0x24, 0xb9, 0xc5, 0x3c, 0x98, 0xc2, 0xe9, 0x0b, 0x23, 0xcb, 0x7c, 0x07, 0x97, + 0xa1, 0xa1, 0x1b, 0x90, 0x85, 0x95, 0x26, 0xa9, 0xad, 0xda, 0xb7, 0xf7, 0x35, 0x68, 0x63, 0xea, 0x7c, 0x12, 0xd3, + 0x84, 0x2c, 0x20, 0x5d, 0xc0, 0x26, 0xb7, 0x38, 0xa6, 0xd5, 0x39, 0xaa, 0xd5, 0xbc, 0x57, 0x47, 0x96, 0xd6, 0xf1, + 0x2c, 0xcd, 0x05, 0x74, 0xab, 0xe7, 0xd6, 0x26, 0xbf, 0x19, 0xec, 0x52, 0xd1, 0x31, 0xfc, 0xf2, 0x94, 0xcd, 0x83, + 0x29, 0xe7, 0xb8, 0xf0, 0x33, 0x63, 0x41, 0x3d, 0x0d, 0x25, 0x90, 0x7f, 0xc0, 0xc4, 0xf4, 0x57, 0x74, 0x9d, 0x99, + 0x98, 0x23, 0x88, 0x57, 0x09, 0xcc, 0x0d, 0xba, 0xa6, 0x05, 0x91, 0x16, 0x7c, 0xfa, 0x64, 0x04, 0x60, 0x7e, 0x3f, + 0x54, 0xe0, 0x03, 0xcf, 0x66, 0x09, 0x60, 0x41, 0xa1, 0x58, 0x42, 0x60, 0x81, 0x6f, 0x0c, 0xfc, 0x5b, 0x14, 0x8b, + 0x1f, 0x5c, 0xb1, 0xe7, 0x84, 0x24, 0x9a, 0x01, 0x4a, 0x23, 0xd1, 0xac, 0x66, 0x40, 0xc0, 0xbc, 0xeb, 0x2a, 0xa5, + 0x45, 0x57, 0x85, 0x72, 0x3f, 0xfd, 0xea, 0xe1, 0x8a, 0xe5, 0x40, 0x33, 0x74, 0xb8, 0xe5, 0xd0, 0x15, 0xac, 0xd0, + 0x3d, 0xbc, 0x1c, 0x7e, 0x71, 0xba, 0xa0, 0x19, 0x61, 0x82, 0x4b, 0x60, 0xf1, 0x80, 0x1c, 0xd0, 0x7c, 0x91, 0xbf, + 0x98, 0x31, 0x78, 0x13, 0x7a, 0x17, 0xf8, 0x9c, 0x4f, 0xb3, 0x34, 0x7e, 0x4f, 0xd9, 0x68, 0xa3, 0x34, 0xf4, 0x2c, + 0x66, 0x22, 0xeb, 0x13, 0x0c, 0xfd, 0x39, 0x8c, 0x62, 0xfd, 0xec, 0x0b, 0xe9, 0x4d, 0xd4, 0xb6, 0x08, 0x90, 0x88, + 0xf4, 0x3a, 0xa1, 0xe1, 0xdf, 0x87, 0x5f, 0xc0, 0xc5, 0xfd, 0xc5, 0x8d, 0x6e, 0x0e, 0x32, 0x07, 0xf9, 0x98, 0x2f, + 0x1a, 0x12, 0x72, 0x22, 0x8f, 0xca, 0x99, 0xcd, 0xae, 0xc2, 0x6c, 0xc2, 0xef, 0xdd, 0xac, 0x2b, 0xb8, 0xa9, 0x3e, + 0x84, 0xf4, 0x0c, 0xb8, 0x8b, 0x4d, 0x89, 0xe7, 0xf4, 0x06, 0xc8, 0xa0, 0x8e, 0x43, 0xe2, 0xdf, 0x0a, 0x0e, 0x55, + 0x7d, 0xd8, 0x87, 0x17, 0x95, 0x94, 0x5d, 0xe3, 0x5e, 0xc6, 0xad, 0xbc, 0xc1, 0x2f, 0xe3, 0xa7, 0xee, 0xe7, 0x41, + 0x26, 0x99, 0x61, 0x7c, 0xc8, 0xd1, 0x37, 0x16, 0xc6, 0x57, 0xb0, 0x3f, 0xc0, 0xa0, 0x7a, 0x27, 0xdf, 0xf4, 0xee, + 0x3c, 0x77, 0xde, 0xf1, 0x1c, 0x60, 0x73, 0xe6, 0x5d, 0xe7, 0x38, 0xb4, 0xbb, 0xce, 0x31, 0xfc, 0x7d, 0x00, 0xd6, + 0xcb, 0xee, 0x38, 0x87, 0x1f, 0xbc, 0x4e, 0x68, 0x9f, 0x38, 0xc7, 0xf0, 0x77, 0xc9, 0x5a, 0xfd, 0x88, 0x4c, 0x0f, + 0x30, 0x3c, 0x5f, 0x94, 0xb0, 0x80, 0xf2, 0x5b, 0x6a, 0x11, 0xac, 0xd2, 0xf5, 0xd6, 0xa0, 0x89, 0x00, 0x94, 0xa1, + 0x5b, 0x22, 0x4a, 0x60, 0x3a, 0x30, 0xd2, 0x21, 0xcf, 0x6d, 0x21, 0x0c, 0x32, 0x84, 0xd7, 0xa4, 0xc8, 0xbc, 0xd0, + 0x78, 0x8c, 0x78, 0x9b, 0xe6, 0x30, 0xfb, 0x22, 0x69, 0x1a, 0x53, 0x5d, 0xfc, 0x79, 0x89, 0xf1, 0x71, 0xa8, 0x59, + 0xc3, 0x4a, 0x45, 0xe2, 0xce, 0x7c, 0xf7, 0xc0, 0xd1, 0x6f, 0x94, 0xca, 0xc4, 0x51, 0x9f, 0xb5, 0x6f, 0xae, 0xce, + 0x90, 0xbd, 0xff, 0xd2, 0x7e, 0x30, 0x5f, 0x32, 0xeb, 0x47, 0x44, 0xd8, 0x9d, 0x04, 0x89, 0x1c, 0x9e, 0x82, 0xa2, + 0xbd, 0xe6, 0xfc, 0x04, 0x26, 0x64, 0xd8, 0xb9, 0x00, 0x2a, 0xf9, 0x8e, 0x84, 0x8a, 0xe9, 0x85, 0xd2, 0xf2, 0x89, + 0xc4, 0xfc, 0xcf, 0x9f, 0x17, 0x83, 0xb3, 0x2b, 0xe3, 0x3e, 0xf5, 0x7a, 0x70, 0xed, 0xf6, 0x68, 0x77, 0xab, 0x15, + 0xd0, 0xee, 0x10, 0xcd, 0x45, 0x3c, 0x49, 0xa1, 0xe9, 0x17, 0x3a, 0xc6, 0x56, 0x53, 0xa4, 0x9a, 0x86, 0x11, 0xc2, + 0x5b, 0x57, 0x58, 0x1d, 0xdd, 0x1c, 0xa4, 0xfb, 0x84, 0xa5, 0xe6, 0xbc, 0x98, 0x0e, 0xa0, 0xd9, 0x32, 0x8f, 0x1d, + 0x2e, 0x8d, 0xff, 0xee, 0x49, 0xa0, 0x7b, 0x11, 0x68, 0xf8, 0x2a, 0xa7, 0xb5, 0xe4, 0x6e, 0x22, 0xef, 0x55, 0x76, + 0xa1, 0xd2, 0xf4, 0x5c, 0x87, 0x22, 0x48, 0xbd, 0x86, 0xd9, 0x16, 0xa5, 0x79, 0x93, 0xbc, 0x2d, 0x8a, 0x02, 0x2b, + 0x80, 0xc8, 0xef, 0x86, 0x70, 0x75, 0x32, 0x9f, 0x3f, 0x6f, 0xbd, 0x84, 0x98, 0x3a, 0x59, 0x4d, 0x3a, 0xab, 0xab, + 0xf8, 0x4d, 0x57, 0x51, 0x8c, 0xec, 0x17, 0xb1, 0x86, 0xb0, 0xca, 0x62, 0x7b, 0x0f, 0x7f, 0x8e, 0x29, 0xc9, 0x1c, + 0xae, 0x07, 0x31, 0x94, 0xcb, 0xdd, 0xf2, 0x68, 0x17, 0xec, 0xb1, 0x78, 0x18, 0x2d, 0x1e, 0x33, 0xee, 0xd9, 0xe6, + 0xc3, 0x8a, 0xfb, 0x21, 0x43, 0x1f, 0x9f, 0xdc, 0x22, 0x06, 0xca, 0xbb, 0x8c, 0xb0, 0x40, 0x19, 0xea, 0x95, 0x1b, + 0x67, 0x44, 0xa4, 0x38, 0x02, 0xba, 0x7c, 0xd0, 0xa8, 0x30, 0x54, 0x7c, 0x95, 0xcf, 0xde, 0x5d, 0x7d, 0xa9, 0xf1, + 0xfd, 0xcf, 0xf4, 0x5b, 0xc8, 0xc8, 0xb0, 0x5c, 0x17, 0x43, 0x96, 0xeb, 0x42, 0xe3, 0x59, 0x67, 0x20, 0x63, 0x44, + 0x7e, 0xc0, 0x20, 0xa8, 0x6b, 0x34, 0xf2, 0x99, 0xd6, 0x6f, 0xb1, 0x0a, 0xb3, 0x60, 0x49, 0x92, 0xec, 0x00, 0x9a, + 0xda, 0x80, 0xe4, 0xf4, 0x36, 0x0f, 0x66, 0xa6, 0x38, 0x14, 0x42, 0xb5, 0x2c, 0x12, 0x9a, 0xc3, 0x69, 0x10, 0x4a, + 0xc5, 0xa1, 0xf8, 0x00, 0xf1, 0x7d, 0xba, 0xcc, 0x86, 0x3a, 0x59, 0x42, 0xce, 0x13, 0x0c, 0x63, 0x7a, 0x10, 0xfb, + 0x19, 0xcd, 0xec, 0x34, 0x4b, 0x28, 0x59, 0xe8, 0x32, 0x64, 0x67, 0xbd, 0xbf, 0x74, 0x35, 0x5e, 0x04, 0x99, 0x8c, + 0x79, 0xc7, 0x26, 0x08, 0x2a, 0x3c, 0x18, 0x22, 0x84, 0x33, 0x60, 0x20, 0xbc, 0x8c, 0x67, 0x95, 0x1d, 0x55, 0x50, + 0x2e, 0xe7, 0x4a, 0x5c, 0x09, 0x10, 0x8e, 0xfa, 0x71, 0xf8, 0x91, 0x7b, 0x5d, 0xcb, 0xd0, 0x7c, 0xfa, 0xd9, 0x29, + 0x67, 0x6f, 0x35, 0x0c, 0x14, 0xa0, 0xf7, 0x5c, 0x08, 0x36, 0xdb, 0xe6, 0x8f, 0x7d, 0xc0, 0x2b, 0xab, 0x91, 0x15, + 0xfa, 0x97, 0x7c, 0x2c, 0x57, 0x40, 0x08, 0x95, 0x54, 0xbc, 0x73, 0xef, 0x4c, 0x3a, 0x00, 0xe1, 0xa8, 0x90, 0x56, + 0xfa, 0xf4, 0xe9, 0xf5, 0xe8, 0x9f, 0xff, 0x80, 0x14, 0x04, 0x73, 0x4f, 0x78, 0x41, 0x5f, 0xab, 0xb5, 0x38, 0xf5, + 0x69, 0x8d, 0x50, 0xbd, 0x4f, 0x27, 0x22, 0x2a, 0x8c, 0xd8, 0x5a, 0xf9, 0xe8, 0x46, 0x44, 0x6c, 0x82, 0x34, 0x23, + 0xa6, 0xf0, 0xd5, 0x1e, 0xc1, 0xf2, 0x8e, 0x44, 0x88, 0x00, 0xed, 0xa7, 0xf5, 0x57, 0xc7, 0x9a, 0x5e, 0xe4, 0x0e, + 0x68, 0xd0, 0x41, 0xb3, 0x3d, 0x74, 0x76, 0x4a, 0xb8, 0xf0, 0x15, 0xc8, 0x8f, 0xb4, 0x7f, 0x00, 0xd3, 0x9c, 0xc7, + 0x0b, 0xea, 0x04, 0xf1, 0xc1, 0x3d, 0x1d, 0xdb, 0x64, 0x19, 0x30, 0xf9, 0x32, 0xca, 0xdd, 0x34, 0x46, 0xf9, 0x49, + 0x05, 0x2d, 0xa3, 0xaf, 0xf3, 0x02, 0x94, 0x71, 0x01, 0x28, 0xf8, 0x49, 0xce, 0xca, 0x71, 0xf8, 0x1c, 0x91, 0x17, + 0xa2, 0x8c, 0xe5, 0xcf, 0x59, 0x38, 0x3d, 0x11, 0x39, 0xaf, 0x78, 0xb0, 0xe3, 0xe9, 0x54, 0x8d, 0x9d, 0xe7, 0x94, + 0xbf, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0xc9, 0xbe, 0x54, 0xff, 0x84, 0xfc, 0x09, 0xb1, 0x40, 0x78, 0x98, 0x45, + 0x38, 0xcf, 0xb5, 0x18, 0x7c, 0x12, 0x24, 0x4f, 0x59, 0x25, 0x8e, 0x28, 0xaa, 0xd1, 0xd9, 0x5b, 0x48, 0x93, 0x27, + 0xc3, 0x21, 0xc3, 0x63, 0x55, 0x74, 0x06, 0x50, 0x6a, 0xc8, 0x91, 0x01, 0x93, 0xcd, 0xa0, 0xa1, 0xcd, 0x3c, 0xb8, + 0xb0, 0x51, 0x75, 0x3a, 0xf5, 0x31, 0x1e, 0x10, 0xb1, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5f, 0x58, 0x40, 0xe0, + 0xa2, 0x9f, 0x0a, 0x1e, 0xd7, 0xfe, 0xc0, 0x50, 0xb6, 0x1d, 0x92, 0x87, 0x58, 0xd1, 0xac, 0x73, 0x27, 0xfb, 0x4b, + 0x2c, 0xbd, 0x12, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0xb3, 0x00, 0xd4, 0x4f, 0x93, 0x1a, 0xb6, 0x7f, 0xd7, 0x61, 0x52, + 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xf4, 0x00, 0xe6, 0x07, 0x81, + 0x01, 0x4a, 0x94, 0x51, 0x60, 0x42, 0xf4, 0x01, 0x92, 0x32, 0xeb, 0x80, 0x8b, 0x89, 0x20, 0xea, 0x90, 0x73, 0x94, + 0x41, 0x3e, 0x4b, 0x55, 0xea, 0xc4, 0x8a, 0xdb, 0x4c, 0xe5, 0xed, 0xce, 0xc0, 0xf1, 0xa7, 0x15, 0xa6, 0xdf, 0xc8, + 0x07, 0x19, 0x15, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x46, 0xb0, 0x6e, 0xa9, 0x50, 0xec, 0xe3, + 0x6d, 0xb5, 0x0a, 0xd2, 0x48, 0x56, 0x5b, 0x12, 0x43, 0x7f, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, 0x65, + 0x36, 0x84, 0xaa, 0x42, 0xd8, 0x4e, 0x96, 0x4b, 0x56, 0xd9, 0x1c, 0x9c, 0x1e, 0x30, 0xbe, 0xf3, 0x8c, 0xed, 0xb0, + 0xb3, 0x53, 0xb0, 0x2e, 0x64, 0x8b, 0x4e, 0x96, 0x4b, 0xbe, 0xa4, 0xec, 0x17, 0x7b, 0x73, 0x30, 0xcf, 0x16, 0xe1, + 0xd9, 0xff, 0x01, 0xff, 0xd7, 0x9f, 0x05, 0x1b, 0x5f, 0x03, 0x00}; } // namespace web_server } // namespace esphome From bd8ccde8625752160f904fe4847cef6443aefebb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 8 May 2024 13:22:04 +1200 Subject: [PATCH 140/313] Bump version to 2024.5.0b1 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index c0d27337d6..7996a7a24a 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0-dev" +__version__ = "2024.5.0b1" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From b7c6125a0bbd79c9bc5c07cde453cd95354ecd6b Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 8 May 2024 13:22:05 +1200 Subject: [PATCH 141/313] Bump version to 2024.6.0-dev --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index c0d27337d6..dba974610a 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0-dev" +__version__ = "2024.6.0-dev" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 7764ab2411a4498dbb7171cf54f2565db0a9a617 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 8 May 2024 16:17:45 +1200 Subject: [PATCH 142/313] [github] Upgrade to actions/{upload,download}-artifact v4 (#6698) --- .github/actions/build-image/action.yaml | 16 ---------------- .github/workflows/release.yml | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.github/actions/build-image/action.yaml b/.github/actions/build-image/action.yaml index 838bc362a1..87ea28fd20 100644 --- a/.github/actions/build-image/action.yaml +++ b/.github/actions/build-image/action.yaml @@ -57,14 +57,6 @@ runs: digest="${{ steps.build-ghcr.outputs.digest }}" touch "/tmp/digests/${{ inputs.target }}/ghcr/${digest#sha256:}" - - name: Upload ghcr digest - uses: actions/upload-artifact@v3.1.3 - with: - name: digests-${{ inputs.target }}-ghcr - path: /tmp/digests/${{ inputs.target }}/ghcr/* - if-no-files-found: error - retention-days: 1 - - name: Build and push to dockerhub by digest id: build-dockerhub uses: docker/build-push-action@v5.3.0 @@ -87,11 +79,3 @@ runs: mkdir -p /tmp/digests/${{ inputs.target }}/dockerhub digest="${{ steps.build-dockerhub.outputs.digest }}" touch "/tmp/digests/${{ inputs.target }}/dockerhub/${digest#sha256:}" - - - name: Upload dockerhub digest - uses: actions/upload-artifact@v3.1.3 - with: - name: digests-${{ inputs.target }}-dockerhub - path: /tmp/digests/${{ inputs.target }}/dockerhub/* - if-no-files-found: error - retention-days: 1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6d91d00b85..5002f041e1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -132,6 +132,13 @@ jobs: suffix: lint version: ${{ needs.init.outputs.tag }} + - name: Upload digests + uses: actions/upload-artifact@v4.3.3 + with: + name: digests-${{ matrix.platform }} + path: /tmp/digests + retention-days: 1 + deploy-manifest: name: Publish ESPHome ${{ matrix.image.title }} to ${{ matrix.registry }} runs-on: ubuntu-latest @@ -160,11 +167,14 @@ jobs: - dockerhub steps: - uses: actions/checkout@v4.1.5 + - name: Download digests - uses: actions/download-artifact@v3.0.2 + uses: actions/download-artifact@v4.1.7 with: - name: digests-${{ matrix.image.target }}-${{ matrix.registry }} + pattern: digests-* path: /tmp/digests + merge-multiple: true + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3.3.0 @@ -195,7 +205,7 @@ jobs: done - name: Create manifest list and push - working-directory: /tmp/digests + working-directory: /tmp/digests/${{ matrix.image.target }}/${{ matrix.registry }} run: | docker buildx imagetools create $(jq -Rcnr 'inputs | . / "," | map("-t " + .) | join(" ")' <<< "${{ steps.tags.outputs.tags}}") \ $(printf '${{ steps.tags.outputs.image }}@sha256:%s ' *) From e48d02495b65fcef806cbd07da24a928e7e646bc Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Wed, 8 May 2024 21:05:24 +0200 Subject: [PATCH 143/313] [nextion] Replace flags to `USE_ARDUINO` (#6700) --- esphome/components/nextion/nextion.h | 10 +++++----- esphome/components/nextion/nextion_upload_arduino.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index 6435e2b4e2..dfa74f644d 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -12,7 +12,7 @@ #include "esphome/components/display/display_color_utils.h" #ifdef USE_NEXTION_TFT_UPLOAD -#ifdef ARDUINO +#ifdef USE_ARDUINO #ifdef USE_ESP32 #include #endif // USE_ESP32 @@ -22,7 +22,7 @@ #endif // USE_ESP8266 #elif defined(USE_ESP_IDF) #include -#endif // ARDUINO vs ESP-IDF +#endif // ARDUINO vs USE_ESP_IDF #endif // USE_NEXTION_TFT_UPLOAD namespace esphome { @@ -987,7 +987,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe #ifdef USE_NEXTION_TFT_UPLOAD /** - * Set the tft file URL. https seems problematic with arduino.. + * Set the tft file URL. https seems problematic with Arduino.. */ void set_tft_url(const std::string &tft_url) { this->tft_url_ = tft_url; } @@ -1190,7 +1190,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe uint32_t original_baud_rate_ = 0; bool upload_first_chunk_sent_ = false; -#ifdef ARDUINO +#ifdef USE_ARDUINO /** * will request chunk_size chunks from the web server * and send each to the nextion @@ -1208,7 +1208,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return position of last byte transferred, -1 for failure. */ int upload_by_chunks_(esp_http_client_handle_t http_client, uint32_t &range_start); -#endif // ARDUINO vs USE_ESP_IDF +#endif // USE_ARDUINO vs USE_ESP_IDF /** * Ends the upload process, restart Nextion and, if successful, diff --git a/esphome/components/nextion/nextion_upload_arduino.cpp b/esphome/components/nextion/nextion_upload_arduino.cpp index b199db91b7..1187c77c8e 100644 --- a/esphome/components/nextion/nextion_upload_arduino.cpp +++ b/esphome/components/nextion/nextion_upload_arduino.cpp @@ -1,7 +1,7 @@ #include "nextion.h" #ifdef USE_NEXTION_TFT_UPLOAD -#ifdef ARDUINO +#ifdef USE_ARDUINO #include "esphome/core/application.h" #include "esphome/core/defines.h" @@ -383,5 +383,5 @@ WiFiClient *Nextion::get_wifi_client_() { } // namespace nextion } // namespace esphome -#endif // ARDUINO +#endif // USE_ARDUINO #endif // USE_NEXTION_TFT_UPLOAD From 487e171443054d1613cdefb573a336c98012f427 Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Wed, 8 May 2024 21:58:40 +0000 Subject: [PATCH 144/313] [remote_receiver, remote_transmitter] Improve error messages on the ESP32 (#6701) --- esphome/components/remote_receiver/remote_receiver.h | 1 + .../remote_receiver/remote_receiver_esp32.cpp | 11 ++++++++++- .../remote_transmitter/remote_transmitter.h | 1 + .../remote_transmitter/remote_transmitter_esp32.cpp | 9 ++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/esphome/components/remote_receiver/remote_receiver.h b/esphome/components/remote_receiver/remote_receiver.h index a1db671e5c..773f8cf636 100644 --- a/esphome/components/remote_receiver/remote_receiver.h +++ b/esphome/components/remote_receiver/remote_receiver.h @@ -58,6 +58,7 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase, void decode_rmt_(rmt_item32_t *item, size_t len); RingbufHandle_t ringbuf_; esp_err_t error_code_{ESP_OK}; + std::string error_string_{""}; #endif #if defined(USE_ESP8266) || defined(USE_LIBRETINY) diff --git a/esphome/components/remote_receiver/remote_receiver_esp32.cpp b/esphome/components/remote_receiver/remote_receiver_esp32.cpp index c0bfb0222f..91295871e2 100644 --- a/esphome/components/remote_receiver/remote_receiver_esp32.cpp +++ b/esphome/components/remote_receiver/remote_receiver_esp32.cpp @@ -29,6 +29,7 @@ void RemoteReceiverComponent::setup() { esp_err_t error = rmt_config(&rmt); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_config"; this->mark_failed(); return; } @@ -36,18 +37,25 @@ void RemoteReceiverComponent::setup() { error = rmt_driver_install(this->channel_, this->buffer_size_, 0); if (error != ESP_OK) { this->error_code_ = error; + if (error == ESP_ERR_INVALID_STATE) { + this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_); + } else { + this->error_string_ = "in rmt_driver_install"; + } this->mark_failed(); return; } error = rmt_get_ringbuf_handle(this->channel_, &this->ringbuf_); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_get_ringbuf_handle"; this->mark_failed(); return; } error = rmt_rx_start(this->channel_, true); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_rx_start"; this->mark_failed(); return; } @@ -67,7 +75,8 @@ void RemoteReceiverComponent::dump_config() { ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %" PRIu32 " us", this->filter_us_); ESP_LOGCONFIG(TAG, " Signal is done after %" PRIu32 " us of no changes", this->idle_us_); if (this->is_failed()) { - ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); + ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_), + this->error_string_.c_str()); } } diff --git a/esphome/components/remote_transmitter/remote_transmitter.h b/esphome/components/remote_transmitter/remote_transmitter.h index e736172cda..b897fa8fab 100644 --- a/esphome/components/remote_transmitter/remote_transmitter.h +++ b/esphome/components/remote_transmitter/remote_transmitter.h @@ -53,6 +53,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase, bool initialized_{false}; std::vector rmt_temp_; esp_err_t error_code_{ESP_OK}; + std::string error_string_{""}; bool inverted_{false}; #endif uint8_t carrier_duty_percent_; diff --git a/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp b/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp index c3d4d42e4f..eea35019ff 100644 --- a/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +++ b/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp @@ -23,7 +23,8 @@ void RemoteTransmitterComponent::dump_config() { } if (this->is_failed()) { - ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); + ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_), + this->error_string_.c_str()); } } @@ -56,6 +57,7 @@ void RemoteTransmitterComponent::configure_rmt_() { esp_err_t error = rmt_config(&c); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_config"; this->mark_failed(); return; } @@ -64,6 +66,11 @@ void RemoteTransmitterComponent::configure_rmt_() { error = rmt_driver_install(this->channel_, 0, 0); if (error != ESP_OK) { this->error_code_ = error; + if (error == ESP_ERR_INVALID_STATE) { + this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_); + } else { + this->error_string_ = "in rmt_driver_install"; + } this->mark_failed(); return; } From 72481006e4b8634eb4309092327b082afc099d64 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 12:25:57 +1200 Subject: [PATCH 145/313] [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR (#6705) --- esphome/components/ethernet/ethernet_component.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 243135de89..17093ffb3d 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -1,12 +1,12 @@ #include "ethernet_component.h" +#include "esphome/core/application.h" #include "esphome/core/log.h" #include "esphome/core/util.h" -#include "esphome/core/application.h" #ifdef USE_ESP32 -#include #include +#include #include "esp_event.h" #ifdef USE_ETHERNET_SPI @@ -554,9 +554,10 @@ bool EthernetComponent::powerdown() { } #ifndef USE_ETHERNET_SPI -void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { -#define KSZ80XX_PC2R_REG_ADDR (0x1F) +constexpr uint8_t KSZ80XX_PC2R_REG_ADDR = 0x1F; + +void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { esp_err_t err; uint32_t phy_control_2; @@ -581,8 +582,6 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { ESPHL_ERROR_CHECK(err, "Read PHY Control 2 failed"); ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str()); } - -#undef KSZ80XX_PC2R_REG_ADDR } #endif From 819be760133e4c13a4ce141737705ae5fcae6292 Mon Sep 17 00:00:00 2001 From: Nate Clark Date: Wed, 8 May 2024 20:47:25 -0400 Subject: [PATCH 146/313] Add PHY register writes to enable external clock on Ethernet with RTL8201 (#6704) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../ethernet/ethernet_component.cpp | 44 +++++++++++++++++++ .../components/ethernet/ethernet_component.h | 2 + 2 files changed, 46 insertions(+) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 17093ffb3d..3af462d593 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -184,6 +184,10 @@ void EthernetComponent::setup() { // KSZ8081RNA default is incorrect. It expects a 25MHz clock instead of the 50MHz we provide. this->ksz8081_set_clock_reference_(mac); } + if (this->type_ == ETHERNET_TYPE_RTL8201 && this->clk_mode_ == EMAC_CLK_EXT_IN) { + // Change in default behavior of RTL8201FI may require register setting to enable external clock + this->rtl8201_set_rmii_mode_(mac); + } #endif // use ESP internal eth mac @@ -583,6 +587,46 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str()); } } +constexpr uint8_t RTL8201_RMSR_REG_ADDR = 0x10; +void EthernetComponent::rtl8201_set_rmii_mode_(esp_eth_mac_t *mac) { + esp_err_t err; + uint32_t phy_rmii_mode; + err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x07); + ESPHL_ERROR_CHECK(err, "Setting Page 7 failed"); + + /* + * RTL8201 RMII Mode Setting Register (RMSR) + * Page 7 Register 16 + * + * bit 0 Reserved 0 + * bit 1 Rg_rmii_rxdsel 1 (default) + * bit 2 Rg_rmii_rxdv_sel: 0 (default) + * bit 3 RMII Mode: 1 (RMII Mode) + * bit 4~7 Rg_rmii_rx_offset: 1111 (default) + * bit 8~11 Rg_rmii_tx_offset: 1111 (default) + * bit 12 Rg_rmii_clkdir: 1 (Input) + * bit 13~15 Reserved 000 + * + * Binary: 0001 1111 1111 1010 + * Hex: 0x1FFA + * + */ + + err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); + ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); + ESP_LOGV(TAG, "Hardware default RTL8201 RMII Mode Register is: 0x%04X", phy_rmii_mode); + + err = mac->write_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, 0x1FFA); + ESPHL_ERROR_CHECK(err, "Setting Register 16 RMII Mode Setting failed"); + + err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); + ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); + ESP_LOGV(TAG, "Setting RTL8201 RMII Mode Register to: 0x%04X", phy_rmii_mode); + + err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x0); + ESPHL_ERROR_CHECK(err, "Setting Page 0 failed"); +} + #endif } // namespace ethernet diff --git a/esphome/components/ethernet/ethernet_component.h b/esphome/components/ethernet/ethernet_component.h index daeb5a2029..6276885fd1 100644 --- a/esphome/components/ethernet/ethernet_component.h +++ b/esphome/components/ethernet/ethernet_component.h @@ -86,6 +86,8 @@ class EthernetComponent : public Component { void dump_connect_params_(); /// @brief Set `RMII Reference Clock Select` bit for KSZ8081. void ksz8081_set_clock_reference_(esp_eth_mac_t *mac); + /// @brief Set `RMII Mode Setting Register` for RTL8201. + void rtl8201_set_rmii_mode_(esp_eth_mac_t *mac); std::string use_address_; #ifdef USE_ETHERNET_SPI From 3ec4a66c9efb8258966f22e734fe23e06326d614 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 May 2024 20:45:10 -0500 Subject: [PATCH 147/313] Bump recommended ESP-IDF to 4.4.7 (#6703) --- esphome/components/esp32/__init__.py | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 5d74838daa..8f46567266 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -227,7 +227,7 @@ ARDUINO_PLATFORM_VERSION = cv.Version(5, 4, 0) # The default/recommended esp-idf framework version # - https://github.com/espressif/esp-idf/releases # - https://api.registry.platformio.org/v3/packages/platformio/tool/framework-espidf -RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(4, 4, 6) +RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(4, 4, 7) # The platformio/espressif32 version to use for esp-idf frameworks # - https://github.com/platformio/platform-espressif32/releases # - https://api.registry.platformio.org/v3/packages/platformio/platform/espressif32 diff --git a/platformio.ini b/platformio.ini index e699057fa3..d342b32b02 100644 --- a/platformio.ini +++ b/platformio.ini @@ -137,7 +137,7 @@ extra_scripts = post:esphome/components/esp32/post_build.py.script extends = common:idf platform = platformio/espressif32@5.4.0 platform_packages = - platformio/framework-espidf@~3.40406.0 + platformio/framework-espidf@~3.40407.0 framework = espidf lib_deps = From 054587c0e48fa4874a99a48f94e89c17ef98ce12 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 8 May 2024 16:17:45 +1200 Subject: [PATCH 148/313] [github] Upgrade to actions/{upload,download}-artifact v4 (#6698) --- .github/actions/build-image/action.yaml | 16 ---------------- .github/workflows/release.yml | 16 +++++++++++++--- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.github/actions/build-image/action.yaml b/.github/actions/build-image/action.yaml index 838bc362a1..87ea28fd20 100644 --- a/.github/actions/build-image/action.yaml +++ b/.github/actions/build-image/action.yaml @@ -57,14 +57,6 @@ runs: digest="${{ steps.build-ghcr.outputs.digest }}" touch "/tmp/digests/${{ inputs.target }}/ghcr/${digest#sha256:}" - - name: Upload ghcr digest - uses: actions/upload-artifact@v3.1.3 - with: - name: digests-${{ inputs.target }}-ghcr - path: /tmp/digests/${{ inputs.target }}/ghcr/* - if-no-files-found: error - retention-days: 1 - - name: Build and push to dockerhub by digest id: build-dockerhub uses: docker/build-push-action@v5.3.0 @@ -87,11 +79,3 @@ runs: mkdir -p /tmp/digests/${{ inputs.target }}/dockerhub digest="${{ steps.build-dockerhub.outputs.digest }}" touch "/tmp/digests/${{ inputs.target }}/dockerhub/${digest#sha256:}" - - - name: Upload dockerhub digest - uses: actions/upload-artifact@v3.1.3 - with: - name: digests-${{ inputs.target }}-dockerhub - path: /tmp/digests/${{ inputs.target }}/dockerhub/* - if-no-files-found: error - retention-days: 1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6d91d00b85..5002f041e1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -132,6 +132,13 @@ jobs: suffix: lint version: ${{ needs.init.outputs.tag }} + - name: Upload digests + uses: actions/upload-artifact@v4.3.3 + with: + name: digests-${{ matrix.platform }} + path: /tmp/digests + retention-days: 1 + deploy-manifest: name: Publish ESPHome ${{ matrix.image.title }} to ${{ matrix.registry }} runs-on: ubuntu-latest @@ -160,11 +167,14 @@ jobs: - dockerhub steps: - uses: actions/checkout@v4.1.5 + - name: Download digests - uses: actions/download-artifact@v3.0.2 + uses: actions/download-artifact@v4.1.7 with: - name: digests-${{ matrix.image.target }}-${{ matrix.registry }} + pattern: digests-* path: /tmp/digests + merge-multiple: true + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3.3.0 @@ -195,7 +205,7 @@ jobs: done - name: Create manifest list and push - working-directory: /tmp/digests + working-directory: /tmp/digests/${{ matrix.image.target }}/${{ matrix.registry }} run: | docker buildx imagetools create $(jq -Rcnr 'inputs | . / "," | map("-t " + .) | join(" ")' <<< "${{ steps.tags.outputs.tags}}") \ $(printf '${{ steps.tags.outputs.image }}@sha256:%s ' *) From 34585a6f15ba05805d3e54c14645b6ebcfaf83e1 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Wed, 8 May 2024 21:05:24 +0200 Subject: [PATCH 149/313] [nextion] Replace flags to `USE_ARDUINO` (#6700) --- esphome/components/nextion/nextion.h | 10 +++++----- esphome/components/nextion/nextion_upload_arduino.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index 6435e2b4e2..dfa74f644d 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -12,7 +12,7 @@ #include "esphome/components/display/display_color_utils.h" #ifdef USE_NEXTION_TFT_UPLOAD -#ifdef ARDUINO +#ifdef USE_ARDUINO #ifdef USE_ESP32 #include #endif // USE_ESP32 @@ -22,7 +22,7 @@ #endif // USE_ESP8266 #elif defined(USE_ESP_IDF) #include -#endif // ARDUINO vs ESP-IDF +#endif // ARDUINO vs USE_ESP_IDF #endif // USE_NEXTION_TFT_UPLOAD namespace esphome { @@ -987,7 +987,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe #ifdef USE_NEXTION_TFT_UPLOAD /** - * Set the tft file URL. https seems problematic with arduino.. + * Set the tft file URL. https seems problematic with Arduino.. */ void set_tft_url(const std::string &tft_url) { this->tft_url_ = tft_url; } @@ -1190,7 +1190,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe uint32_t original_baud_rate_ = 0; bool upload_first_chunk_sent_ = false; -#ifdef ARDUINO +#ifdef USE_ARDUINO /** * will request chunk_size chunks from the web server * and send each to the nextion @@ -1208,7 +1208,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe * @return position of last byte transferred, -1 for failure. */ int upload_by_chunks_(esp_http_client_handle_t http_client, uint32_t &range_start); -#endif // ARDUINO vs USE_ESP_IDF +#endif // USE_ARDUINO vs USE_ESP_IDF /** * Ends the upload process, restart Nextion and, if successful, diff --git a/esphome/components/nextion/nextion_upload_arduino.cpp b/esphome/components/nextion/nextion_upload_arduino.cpp index b199db91b7..1187c77c8e 100644 --- a/esphome/components/nextion/nextion_upload_arduino.cpp +++ b/esphome/components/nextion/nextion_upload_arduino.cpp @@ -1,7 +1,7 @@ #include "nextion.h" #ifdef USE_NEXTION_TFT_UPLOAD -#ifdef ARDUINO +#ifdef USE_ARDUINO #include "esphome/core/application.h" #include "esphome/core/defines.h" @@ -383,5 +383,5 @@ WiFiClient *Nextion::get_wifi_client_() { } // namespace nextion } // namespace esphome -#endif // ARDUINO +#endif // USE_ARDUINO #endif // USE_NEXTION_TFT_UPLOAD From 879f404b48e1de4535097e119698ae9861f7294f Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Wed, 8 May 2024 21:58:40 +0000 Subject: [PATCH 150/313] [remote_receiver, remote_transmitter] Improve error messages on the ESP32 (#6701) --- esphome/components/remote_receiver/remote_receiver.h | 1 + .../remote_receiver/remote_receiver_esp32.cpp | 11 ++++++++++- .../remote_transmitter/remote_transmitter.h | 1 + .../remote_transmitter/remote_transmitter_esp32.cpp | 9 ++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/esphome/components/remote_receiver/remote_receiver.h b/esphome/components/remote_receiver/remote_receiver.h index a1db671e5c..773f8cf636 100644 --- a/esphome/components/remote_receiver/remote_receiver.h +++ b/esphome/components/remote_receiver/remote_receiver.h @@ -58,6 +58,7 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase, void decode_rmt_(rmt_item32_t *item, size_t len); RingbufHandle_t ringbuf_; esp_err_t error_code_{ESP_OK}; + std::string error_string_{""}; #endif #if defined(USE_ESP8266) || defined(USE_LIBRETINY) diff --git a/esphome/components/remote_receiver/remote_receiver_esp32.cpp b/esphome/components/remote_receiver/remote_receiver_esp32.cpp index c0bfb0222f..91295871e2 100644 --- a/esphome/components/remote_receiver/remote_receiver_esp32.cpp +++ b/esphome/components/remote_receiver/remote_receiver_esp32.cpp @@ -29,6 +29,7 @@ void RemoteReceiverComponent::setup() { esp_err_t error = rmt_config(&rmt); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_config"; this->mark_failed(); return; } @@ -36,18 +37,25 @@ void RemoteReceiverComponent::setup() { error = rmt_driver_install(this->channel_, this->buffer_size_, 0); if (error != ESP_OK) { this->error_code_ = error; + if (error == ESP_ERR_INVALID_STATE) { + this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_); + } else { + this->error_string_ = "in rmt_driver_install"; + } this->mark_failed(); return; } error = rmt_get_ringbuf_handle(this->channel_, &this->ringbuf_); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_get_ringbuf_handle"; this->mark_failed(); return; } error = rmt_rx_start(this->channel_, true); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_rx_start"; this->mark_failed(); return; } @@ -67,7 +75,8 @@ void RemoteReceiverComponent::dump_config() { ESP_LOGCONFIG(TAG, " Filter out pulses shorter than: %" PRIu32 " us", this->filter_us_); ESP_LOGCONFIG(TAG, " Signal is done after %" PRIu32 " us of no changes", this->idle_us_); if (this->is_failed()) { - ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); + ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_), + this->error_string_.c_str()); } } diff --git a/esphome/components/remote_transmitter/remote_transmitter.h b/esphome/components/remote_transmitter/remote_transmitter.h index e736172cda..b897fa8fab 100644 --- a/esphome/components/remote_transmitter/remote_transmitter.h +++ b/esphome/components/remote_transmitter/remote_transmitter.h @@ -53,6 +53,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase, bool initialized_{false}; std::vector rmt_temp_; esp_err_t error_code_{ESP_OK}; + std::string error_string_{""}; bool inverted_{false}; #endif uint8_t carrier_duty_percent_; diff --git a/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp b/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp index c3d4d42e4f..eea35019ff 100644 --- a/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +++ b/esphome/components/remote_transmitter/remote_transmitter_esp32.cpp @@ -23,7 +23,8 @@ void RemoteTransmitterComponent::dump_config() { } if (this->is_failed()) { - ESP_LOGE(TAG, "Configuring RMT driver failed: %s", esp_err_to_name(this->error_code_)); + ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_), + this->error_string_.c_str()); } } @@ -56,6 +57,7 @@ void RemoteTransmitterComponent::configure_rmt_() { esp_err_t error = rmt_config(&c); if (error != ESP_OK) { this->error_code_ = error; + this->error_string_ = "in rmt_config"; this->mark_failed(); return; } @@ -64,6 +66,11 @@ void RemoteTransmitterComponent::configure_rmt_() { error = rmt_driver_install(this->channel_, 0, 0); if (error != ESP_OK) { this->error_code_ = error; + if (error == ESP_ERR_INVALID_STATE) { + this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_); + } else { + this->error_string_ = "in rmt_driver_install"; + } this->mark_failed(); return; } From 2fbe80c1f78cc407d79a8d06e4c0c948f013f1ae Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 12:25:57 +1200 Subject: [PATCH 151/313] [ethernet] Use constexpr instead of inline define for KSZ80XX_PC2R_REG_ADDR (#6705) --- esphome/components/ethernet/ethernet_component.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 243135de89..17093ffb3d 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -1,12 +1,12 @@ #include "ethernet_component.h" +#include "esphome/core/application.h" #include "esphome/core/log.h" #include "esphome/core/util.h" -#include "esphome/core/application.h" #ifdef USE_ESP32 -#include #include +#include #include "esp_event.h" #ifdef USE_ETHERNET_SPI @@ -554,9 +554,10 @@ bool EthernetComponent::powerdown() { } #ifndef USE_ETHERNET_SPI -void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { -#define KSZ80XX_PC2R_REG_ADDR (0x1F) +constexpr uint8_t KSZ80XX_PC2R_REG_ADDR = 0x1F; + +void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { esp_err_t err; uint32_t phy_control_2; @@ -581,8 +582,6 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { ESPHL_ERROR_CHECK(err, "Read PHY Control 2 failed"); ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str()); } - -#undef KSZ80XX_PC2R_REG_ADDR } #endif From ed1344edd24c983196c1f50bc0571eaf0580a472 Mon Sep 17 00:00:00 2001 From: Nate Clark Date: Wed, 8 May 2024 20:47:25 -0400 Subject: [PATCH 152/313] Add PHY register writes to enable external clock on Ethernet with RTL8201 (#6704) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../ethernet/ethernet_component.cpp | 44 +++++++++++++++++++ .../components/ethernet/ethernet_component.h | 2 + 2 files changed, 46 insertions(+) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 17093ffb3d..3af462d593 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -184,6 +184,10 @@ void EthernetComponent::setup() { // KSZ8081RNA default is incorrect. It expects a 25MHz clock instead of the 50MHz we provide. this->ksz8081_set_clock_reference_(mac); } + if (this->type_ == ETHERNET_TYPE_RTL8201 && this->clk_mode_ == EMAC_CLK_EXT_IN) { + // Change in default behavior of RTL8201FI may require register setting to enable external clock + this->rtl8201_set_rmii_mode_(mac); + } #endif // use ESP internal eth mac @@ -583,6 +587,46 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str()); } } +constexpr uint8_t RTL8201_RMSR_REG_ADDR = 0x10; +void EthernetComponent::rtl8201_set_rmii_mode_(esp_eth_mac_t *mac) { + esp_err_t err; + uint32_t phy_rmii_mode; + err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x07); + ESPHL_ERROR_CHECK(err, "Setting Page 7 failed"); + + /* + * RTL8201 RMII Mode Setting Register (RMSR) + * Page 7 Register 16 + * + * bit 0 Reserved 0 + * bit 1 Rg_rmii_rxdsel 1 (default) + * bit 2 Rg_rmii_rxdv_sel: 0 (default) + * bit 3 RMII Mode: 1 (RMII Mode) + * bit 4~7 Rg_rmii_rx_offset: 1111 (default) + * bit 8~11 Rg_rmii_tx_offset: 1111 (default) + * bit 12 Rg_rmii_clkdir: 1 (Input) + * bit 13~15 Reserved 000 + * + * Binary: 0001 1111 1111 1010 + * Hex: 0x1FFA + * + */ + + err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); + ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); + ESP_LOGV(TAG, "Hardware default RTL8201 RMII Mode Register is: 0x%04X", phy_rmii_mode); + + err = mac->write_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, 0x1FFA); + ESPHL_ERROR_CHECK(err, "Setting Register 16 RMII Mode Setting failed"); + + err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); + ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); + ESP_LOGV(TAG, "Setting RTL8201 RMII Mode Register to: 0x%04X", phy_rmii_mode); + + err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x0); + ESPHL_ERROR_CHECK(err, "Setting Page 0 failed"); +} + #endif } // namespace ethernet diff --git a/esphome/components/ethernet/ethernet_component.h b/esphome/components/ethernet/ethernet_component.h index daeb5a2029..6276885fd1 100644 --- a/esphome/components/ethernet/ethernet_component.h +++ b/esphome/components/ethernet/ethernet_component.h @@ -86,6 +86,8 @@ class EthernetComponent : public Component { void dump_connect_params_(); /// @brief Set `RMII Reference Clock Select` bit for KSZ8081. void ksz8081_set_clock_reference_(esp_eth_mac_t *mac); + /// @brief Set `RMII Mode Setting Register` for RTL8201. + void rtl8201_set_rmii_mode_(esp_eth_mac_t *mac); std::string use_address_; #ifdef USE_ETHERNET_SPI From 98dc9fde6c6041a491f56d0a9ea67dc12ebab963 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 May 2024 20:45:10 -0500 Subject: [PATCH 153/313] Bump recommended ESP-IDF to 4.4.7 (#6703) --- esphome/components/esp32/__init__.py | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/esp32/__init__.py b/esphome/components/esp32/__init__.py index 5d74838daa..8f46567266 100644 --- a/esphome/components/esp32/__init__.py +++ b/esphome/components/esp32/__init__.py @@ -227,7 +227,7 @@ ARDUINO_PLATFORM_VERSION = cv.Version(5, 4, 0) # The default/recommended esp-idf framework version # - https://github.com/espressif/esp-idf/releases # - https://api.registry.platformio.org/v3/packages/platformio/tool/framework-espidf -RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(4, 4, 6) +RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(4, 4, 7) # The platformio/espressif32 version to use for esp-idf frameworks # - https://github.com/platformio/platform-espressif32/releases # - https://api.registry.platformio.org/v3/packages/platformio/platform/espressif32 diff --git a/platformio.ini b/platformio.ini index e699057fa3..d342b32b02 100644 --- a/platformio.ini +++ b/platformio.ini @@ -137,7 +137,7 @@ extra_scripts = post:esphome/components/esp32/post_build.py.script extends = common:idf platform = platformio/espressif32@5.4.0 platform_packages = - platformio/framework-espidf@~3.40406.0 + platformio/framework-espidf@~3.40407.0 framework = espidf lib_deps = From 0ca395e8d0c7dc728da6f54c41c627117f74a006 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 14:45:40 +1200 Subject: [PATCH 154/313] Bump version to 2024.5.0b2 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 7996a7a24a..46fc5fc20b 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b1" +__version__ = "2024.5.0b2" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From d0120cefd24dda9f512b3d8124c410179cdda87a Mon Sep 17 00:00:00 2001 From: chbmuc Date: Thu, 9 May 2024 05:02:43 +0200 Subject: [PATCH 155/313] Add IRK support to ble_rssi (#6422) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../ble_presence/ble_presence_device.h | 49 +------------------ esphome/components/ble_rssi/ble_rssi_sensor.h | 14 +++++- esphome/components/ble_rssi/sensor.py | 11 ++++- .../esp32_ble_tracker/esp32_ble_tracker.cpp | 36 ++++++++++++++ .../esp32_ble_tracker/esp32_ble_tracker.h | 2 + tests/components/ble_rssi/common.yaml | 3 ++ 6 files changed, 65 insertions(+), 50 deletions(-) diff --git a/esphome/components/ble_presence/ble_presence_device.h b/esphome/components/ble_presence/ble_presence_device.h index e74c2f4f45..3ed60d1b49 100644 --- a/esphome/components/ble_presence/ble_presence_device.h +++ b/esphome/components/ble_presence/ble_presence_device.h @@ -6,16 +6,6 @@ #ifdef USE_ESP32 -#ifdef USE_ARDUINO -#include "mbedtls/aes.h" -#include "mbedtls/base64.h" -#endif - -#ifdef USE_ESP_IDF -#define MBEDTLS_AES_ALT -#include -#endif - namespace esphome { namespace ble_presence { @@ -72,7 +62,7 @@ class BLEPresenceDevice : public binary_sensor::BinarySensorInitiallyOff, } break; case MATCH_BY_IRK: - if (resolve_irk_(device.address_uint64(), this->irk_)) { + if (device.resolve_irk(this->irk_)) { this->set_found_(true); return true; } @@ -142,43 +132,6 @@ class BLEPresenceDevice : public binary_sensor::BinarySensorInitiallyOff, bool check_ibeacon_minor_{false}; bool check_minimum_rssi_{false}; - bool resolve_irk_(uint64_t addr64, const uint8_t *irk) { - uint8_t ecb_key[16]; - uint8_t ecb_plaintext[16]; - uint8_t ecb_ciphertext[16]; - - memcpy(&ecb_key, irk, 16); - memset(&ecb_plaintext, 0, 16); - - ecb_plaintext[13] = (addr64 >> 40) & 0xff; - ecb_plaintext[14] = (addr64 >> 32) & 0xff; - ecb_plaintext[15] = (addr64 >> 24) & 0xff; - - mbedtls_aes_context ctx = {0, 0, {0}}; - mbedtls_aes_init(&ctx); - - if (mbedtls_aes_setkey_enc(&ctx, ecb_key, 128) != 0) { - mbedtls_aes_free(&ctx); - return false; - } - - if (mbedtls_aes_crypt_ecb(&ctx, -#ifdef USE_ARDUINO - MBEDTLS_AES_ENCRYPT, -#elif defined(USE_ESP_IDF) - ESP_AES_ENCRYPT, -#endif - ecb_plaintext, ecb_ciphertext) != 0) { - mbedtls_aes_free(&ctx); - return false; - } - - mbedtls_aes_free(&ctx); - - return ecb_ciphertext[15] == (addr64 & 0xff) && ecb_ciphertext[14] == ((addr64 >> 8) & 0xff) && - ecb_ciphertext[13] == ((addr64 >> 16) & 0xff); - } - bool found_{false}; uint32_t last_seen_{}; uint32_t timeout_{}; diff --git a/esphome/components/ble_rssi/ble_rssi_sensor.h b/esphome/components/ble_rssi/ble_rssi_sensor.h index 79aebce7d3..89e4f33aca 100644 --- a/esphome/components/ble_rssi/ble_rssi_sensor.h +++ b/esphome/components/ble_rssi/ble_rssi_sensor.h @@ -15,6 +15,10 @@ class BLERSSISensor : public sensor::Sensor, public esp32_ble_tracker::ESPBTDevi this->match_by_ = MATCH_BY_MAC_ADDRESS; this->address_ = address; } + void set_irk(uint8_t *irk) { + this->match_by_ = MATCH_BY_IRK; + this->irk_ = irk; + } void set_service_uuid16(uint16_t uuid) { this->match_by_ = MATCH_BY_SERVICE_UUID; this->uuid_ = esp32_ble_tracker::ESPBTUUID::from_uint16(uuid); @@ -53,6 +57,13 @@ class BLERSSISensor : public sensor::Sensor, public esp32_ble_tracker::ESPBTDevi return true; } break; + case MATCH_BY_IRK: + if (device.resolve_irk(this->irk_)) { + this->publish_state(device.get_rssi()); + this->found_ = true; + return true; + } + break; case MATCH_BY_SERVICE_UUID: for (auto uuid : device.get_service_uuids()) { if (this->uuid_ == uuid) { @@ -91,12 +102,13 @@ class BLERSSISensor : public sensor::Sensor, public esp32_ble_tracker::ESPBTDevi float get_setup_priority() const override { return setup_priority::DATA; } protected: - enum MatchType { MATCH_BY_MAC_ADDRESS, MATCH_BY_SERVICE_UUID, MATCH_BY_IBEACON_UUID }; + enum MatchType { MATCH_BY_MAC_ADDRESS, MATCH_BY_IRK, MATCH_BY_SERVICE_UUID, MATCH_BY_IBEACON_UUID }; MatchType match_by_; bool found_{false}; uint64_t address_; + uint8_t *irk_; esp32_ble_tracker::ESPBTUUID uuid_; diff --git a/esphome/components/ble_rssi/sensor.py b/esphome/components/ble_rssi/sensor.py index 4246d311ab..0543eb0578 100644 --- a/esphome/components/ble_rssi/sensor.py +++ b/esphome/components/ble_rssi/sensor.py @@ -12,6 +12,8 @@ from esphome.const import ( UNIT_DECIBEL_MILLIWATT, ) +CONF_IRK = "irk" + DEPENDENCIES = ["esp32_ble_tracker"] ble_rssi_ns = cg.esphome_ns.namespace("ble_rssi") @@ -39,6 +41,7 @@ CONFIG_SCHEMA = cv.All( .extend( { cv.Optional(CONF_MAC_ADDRESS): cv.mac_address, + cv.Optional(CONF_IRK): cv.uuid, cv.Optional(CONF_SERVICE_UUID): esp32_ble_tracker.bt_uuid, cv.Optional(CONF_IBEACON_MAJOR): cv.uint16_t, cv.Optional(CONF_IBEACON_MINOR): cv.uint16_t, @@ -47,7 +50,9 @@ CONFIG_SCHEMA = cv.All( ) .extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA) .extend(cv.COMPONENT_SCHEMA), - cv.has_exactly_one_key(CONF_MAC_ADDRESS, CONF_SERVICE_UUID, CONF_IBEACON_UUID), + cv.has_exactly_one_key( + CONF_MAC_ADDRESS, CONF_IRK, CONF_SERVICE_UUID, CONF_IBEACON_UUID + ), _validate, ) @@ -60,6 +65,10 @@ async def to_code(config): if mac_address := config.get(CONF_MAC_ADDRESS): cg.add(var.set_address(mac_address.as_hex)) + if irk := config.get(CONF_IRK): + irk = esp32_ble_tracker.as_hex_array(str(irk)) + cg.add(var.set_irk(irk)) + if service_uuid := config.get(CONF_SERVICE_UUID): if len(service_uuid) == len(esp32_ble_tracker.bt_uuid16_format): cg.add(var.set_service_uuid16(esp32_ble_tracker.as_hex(service_uuid))) diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp index a5209c764a..4ae7929ded 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp @@ -25,6 +25,9 @@ #include #endif +#define MBEDTLS_AES_ALT +#include + // bt_trace.h #undef TAG @@ -692,6 +695,39 @@ void ESP32BLETracker::print_bt_device_info(const ESPBTDevice &device) { } } +bool ESPBTDevice::resolve_irk(const uint8_t *irk) const { + uint8_t ecb_key[16]; + uint8_t ecb_plaintext[16]; + uint8_t ecb_ciphertext[16]; + + uint64_t addr64 = esp32_ble::ble_addr_to_uint64(this->address_); + + memcpy(&ecb_key, irk, 16); + memset(&ecb_plaintext, 0, 16); + + ecb_plaintext[13] = (addr64 >> 40) & 0xff; + ecb_plaintext[14] = (addr64 >> 32) & 0xff; + ecb_plaintext[15] = (addr64 >> 24) & 0xff; + + mbedtls_aes_context ctx = {0, 0, {0}}; + mbedtls_aes_init(&ctx); + + if (mbedtls_aes_setkey_enc(&ctx, ecb_key, 128) != 0) { + mbedtls_aes_free(&ctx); + return false; + } + + if (mbedtls_aes_crypt_ecb(&ctx, ESP_AES_ENCRYPT, ecb_plaintext, ecb_ciphertext) != 0) { + mbedtls_aes_free(&ctx); + return false; + } + + mbedtls_aes_free(&ctx); + + return ecb_ciphertext[15] == (addr64 & 0xff) && ecb_ciphertext[14] == ((addr64 >> 8) & 0xff) && + ecb_ciphertext[13] == ((addr64 >> 16) & 0xff); +} + } // namespace esp32_ble_tracker } // namespace esphome diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.h b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.h index 76dee875c5..3db7a54f6e 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.h @@ -86,6 +86,8 @@ class ESPBTDevice { const esp_ble_gap_cb_param_t::ble_scan_result_evt_param &get_scan_result() const { return scan_result_; } + bool resolve_irk(const uint8_t *irk) const; + optional get_ibeacon() const { for (auto &it : this->manufacturer_datas_) { auto res = ESPBLEiBeacon::from_manufacturer_data(it); diff --git a/tests/components/ble_rssi/common.yaml b/tests/components/ble_rssi/common.yaml index 52e5b865c6..43bed1d0e7 100644 --- a/tests/components/ble_rssi/common.yaml +++ b/tests/components/ble_rssi/common.yaml @@ -16,3 +16,6 @@ sensor: - platform: ble_rssi service_uuid: 11223344-5566-7788-99aa-bbccddeeff00 name: BLE Test iBeacon UUID + - platform: ble_rssi + irk: 1234567890abcdef1234567890abcdef + name: "BLE Tracker with Identity Resolving Key" From afe81184a8ab3a742d52cd25e09c393313277ae7 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 9 May 2024 13:08:30 +1000 Subject: [PATCH 156/313] [core] Ensure that a generated ID name is distinct from its type. (#6706) --- esphome/core/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/core/__init__.py b/esphome/core/__init__.py index 58ae23e139..f25891965a 100644 --- a/esphome/core/__init__.py +++ b/esphome/core/__init__.py @@ -340,6 +340,8 @@ class ID: if self.id is None: base = str(self.type).replace("::", "_").lower() + if base == self.type: + base = base + "_id" name = "".join(c for c in base if c.isalnum() or c == "_") used = set(registered_ids) | set(RESERVED_IDS) | CORE.loaded_integrations self.id = ensure_unique_string(name, used) From 5956bebcb782a7c4adc45cc6f4049effb82137ac Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 9 May 2024 13:14:31 +1000 Subject: [PATCH 157/313] [color] Fix crash when hex color parses as int, improve error reporting. (#6707) --- esphome/components/color/__init__.py | 40 +++++++++++++++++++++------- tests/components/color/common.yaml | 9 +++++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/esphome/components/color/__init__.py b/esphome/components/color/__init__.py index 4a55beef38..609d416a0b 100644 --- a/esphome/components/color/__init__.py +++ b/esphome/components/color/__init__.py @@ -14,15 +14,41 @@ CONF_HEX = "hex" def hex_color(value): + if isinstance(value, int): + value = str(value) + if not isinstance(value, str): + raise cv.Invalid("Invalid value for hex color") if len(value) != 6: - raise cv.Invalid("Color must have six digits") + raise cv.Invalid("Hex color must have six digits") try: - return (int(value[0:2], 16), int(value[2:4], 16), int(value[4:6], 16)) + return int(value[0:2], 16), int(value[2:4], 16), int(value[4:6], 16) except ValueError as exc: raise cv.Invalid("Color must be hexadecimal") from exc -CONFIG_SCHEMA = cv.Any( +components = { + CONF_RED, + CONF_RED_INT, + CONF_GREEN, + CONF_GREEN_INT, + CONF_BLUE, + CONF_BLUE_INT, + CONF_WHITE, + CONF_WHITE_INT, +} + + +def validate_color(config): + has_components = set(config) & components + has_hex = CONF_HEX in config + if has_hex and has_components: + raise cv.Invalid("Hex color value may not be combined with component values") + if not has_hex and not has_components: + raise cv.Invalid("Must provide at least one color option") + return config + + +CONFIG_SCHEMA = cv.All( cv.Schema( { cv.Required(CONF_ID): cv.declare_id(ColorStruct), @@ -34,14 +60,10 @@ CONFIG_SCHEMA = cv.Any( cv.Exclusive(CONF_BLUE_INT, "blue"): cv.uint8_t, cv.Exclusive(CONF_WHITE, "white"): cv.percentage, cv.Exclusive(CONF_WHITE_INT, "white"): cv.uint8_t, + cv.Optional(CONF_HEX): hex_color, } ).extend(cv.COMPONENT_SCHEMA), - cv.Schema( - { - cv.Required(CONF_ID): cv.declare_id(ColorStruct), - cv.Required(CONF_HEX): hex_color, - } - ).extend(cv.COMPONENT_SCHEMA), + validate_color, ) diff --git a/tests/components/color/common.yaml b/tests/components/color/common.yaml index 7aa308bb63..88524e6a5f 100644 --- a/tests/components/color/common.yaml +++ b/tests/components/color/common.yaml @@ -9,3 +9,12 @@ color: blue: 100% - id: kbx_green hex: "3DEC55" + - id: kbx_green_1 + hex: 3DEC55 + - id: cps_red + hex: 800000 + - id: cps_green + hex: 008000 + - id: cps_blue + hex: 000080 + From 78d1a50853b6d0cc62927e604f883f9a8fb7574f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 21:25:48 +1200 Subject: [PATCH 158/313] [github] Fix digest artifact name (#6710) --- .github/workflows/release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5002f041e1..03ed523e1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -132,10 +132,16 @@ jobs: suffix: lint version: ${{ needs.init.outputs.tag }} + - name: Sanitize platform name + id: sanitize + run: | + echo "${{ matrix.platform }}" | sed 's|/|-|g' > /tmp/platform + echo name=$(cat /tmp/platform) >> $GITHUB_OUTPUT + - name: Upload digests uses: actions/upload-artifact@v4.3.3 with: - name: digests-${{ matrix.platform }} + name: digests-${{ steps.sanitize.outputs.name }} path: /tmp/digests retention-days: 1 From 26048d18ef3a674847d9b14b6f396b57949b7279 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 9 May 2024 13:08:30 +1000 Subject: [PATCH 159/313] [core] Ensure that a generated ID name is distinct from its type. (#6706) --- esphome/core/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/core/__init__.py b/esphome/core/__init__.py index 58ae23e139..f25891965a 100644 --- a/esphome/core/__init__.py +++ b/esphome/core/__init__.py @@ -340,6 +340,8 @@ class ID: if self.id is None: base = str(self.type).replace("::", "_").lower() + if base == self.type: + base = base + "_id" name = "".join(c for c in base if c.isalnum() or c == "_") used = set(registered_ids) | set(RESERVED_IDS) | CORE.loaded_integrations self.id = ensure_unique_string(name, used) From 819bb9f8bc82603e370a3e94bfdb47fbb1bdb9f2 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 9 May 2024 13:14:31 +1000 Subject: [PATCH 160/313] [color] Fix crash when hex color parses as int, improve error reporting. (#6707) --- esphome/components/color/__init__.py | 40 +++++++++++++++++++++------- tests/components/color/common.yaml | 9 +++++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/esphome/components/color/__init__.py b/esphome/components/color/__init__.py index 4a55beef38..609d416a0b 100644 --- a/esphome/components/color/__init__.py +++ b/esphome/components/color/__init__.py @@ -14,15 +14,41 @@ CONF_HEX = "hex" def hex_color(value): + if isinstance(value, int): + value = str(value) + if not isinstance(value, str): + raise cv.Invalid("Invalid value for hex color") if len(value) != 6: - raise cv.Invalid("Color must have six digits") + raise cv.Invalid("Hex color must have six digits") try: - return (int(value[0:2], 16), int(value[2:4], 16), int(value[4:6], 16)) + return int(value[0:2], 16), int(value[2:4], 16), int(value[4:6], 16) except ValueError as exc: raise cv.Invalid("Color must be hexadecimal") from exc -CONFIG_SCHEMA = cv.Any( +components = { + CONF_RED, + CONF_RED_INT, + CONF_GREEN, + CONF_GREEN_INT, + CONF_BLUE, + CONF_BLUE_INT, + CONF_WHITE, + CONF_WHITE_INT, +} + + +def validate_color(config): + has_components = set(config) & components + has_hex = CONF_HEX in config + if has_hex and has_components: + raise cv.Invalid("Hex color value may not be combined with component values") + if not has_hex and not has_components: + raise cv.Invalid("Must provide at least one color option") + return config + + +CONFIG_SCHEMA = cv.All( cv.Schema( { cv.Required(CONF_ID): cv.declare_id(ColorStruct), @@ -34,14 +60,10 @@ CONFIG_SCHEMA = cv.Any( cv.Exclusive(CONF_BLUE_INT, "blue"): cv.uint8_t, cv.Exclusive(CONF_WHITE, "white"): cv.percentage, cv.Exclusive(CONF_WHITE_INT, "white"): cv.uint8_t, + cv.Optional(CONF_HEX): hex_color, } ).extend(cv.COMPONENT_SCHEMA), - cv.Schema( - { - cv.Required(CONF_ID): cv.declare_id(ColorStruct), - cv.Required(CONF_HEX): hex_color, - } - ).extend(cv.COMPONENT_SCHEMA), + validate_color, ) diff --git a/tests/components/color/common.yaml b/tests/components/color/common.yaml index 7aa308bb63..88524e6a5f 100644 --- a/tests/components/color/common.yaml +++ b/tests/components/color/common.yaml @@ -9,3 +9,12 @@ color: blue: 100% - id: kbx_green hex: "3DEC55" + - id: kbx_green_1 + hex: 3DEC55 + - id: cps_red + hex: 800000 + - id: cps_green + hex: 008000 + - id: cps_blue + hex: 000080 + From bd776baf8dfddac65590162f10375604a60e3a07 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 21:25:48 +1200 Subject: [PATCH 161/313] [github] Fix digest artifact name (#6710) --- .github/workflows/release.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5002f041e1..03ed523e1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -132,10 +132,16 @@ jobs: suffix: lint version: ${{ needs.init.outputs.tag }} + - name: Sanitize platform name + id: sanitize + run: | + echo "${{ matrix.platform }}" | sed 's|/|-|g' > /tmp/platform + echo name=$(cat /tmp/platform) >> $GITHUB_OUTPUT + - name: Upload digests uses: actions/upload-artifact@v4.3.3 with: - name: digests-${{ matrix.platform }} + name: digests-${{ steps.sanitize.outputs.name }} path: /tmp/digests retention-days: 1 From 8ae8cd1168bcdac80bb4de76255c6b2894179e07 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 9 May 2024 21:55:34 +1200 Subject: [PATCH 162/313] Bump version to 2024.5.0b3 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 46fc5fc20b..6e00c1bbe1 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b2" +__version__ = "2024.5.0b3" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 8280772b9151e71ef544ee8e849285536ee2bcdb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 10 May 2024 10:57:47 +1200 Subject: [PATCH 163/313] Add new Error type to skip prepending path (#6716) --- esphome/config.py | 2 ++ esphome/config_validation.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/esphome/config.py b/esphome/config.py index 36a81f677b..4f340225fe 100644 --- a/esphome/config.py +++ b/esphome/config.py @@ -148,6 +148,8 @@ class Config(OrderedDict, fv.FinalValidateConfig): path = path or [] try: yield + except cv.FinalExternalInvalid as e: + self.add_error(e) except vol.Invalid as e: e.prepend(path) self.add_error(e) diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 512f1d8f67..5fc72921e1 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -267,6 +267,10 @@ class Required(vol.Required): super().__init__(key, msg=msg) +class FinalExternalInvalid(Invalid): + """Represents an invalid value in the final validation phase where the path should not be prepended.""" + + def check_not_templatable(value): if isinstance(value, Lambda): raise Invalid("This option is not templatable!") From ca5050d4a51a6e8dc136a7051d08d4ae3494b038 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 10 May 2024 11:04:32 +1200 Subject: [PATCH 164/313] [github] Only save platformio cache for dev branch (#6711) --- .github/workflows/ci.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fbebc55676..ba0a8a363c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -364,12 +364,20 @@ jobs: with: python-version: ${{ env.DEFAULT_PYTHON }} cache-key: ${{ needs.common.outputs.cache-key }} + - name: Cache platformio + if: github.ref == 'refs/heads/dev' uses: actions/cache@v4.0.2 with: path: ~/.platformio - # yamllint disable-line rule:line-length - key: platformio-${{ matrix.pio_cache_key }}-${{ hashFiles('platformio.ini') }} + key: platformio-${{ matrix.pio_cache_key }} + + - name: Cache platformio + if: github.ref != 'refs/heads/dev' + uses: actions/cache/restore@v4.0.2 + with: + path: ~/.platformio + key: platformio-${{ matrix.pio_cache_key }} - name: Install clang-tidy run: sudo apt-get install clang-tidy-14 From 47a1710b1ed9da2304d0f17454f0b578d8d1554c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 10 May 2024 11:55:35 +1200 Subject: [PATCH 165/313] Only cache docker images on dev branch (#6714) --- .github/actions/build-image/action.yaml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/actions/build-image/action.yaml b/.github/actions/build-image/action.yaml index 87ea28fd20..d36bd65bb6 100644 --- a/.github/actions/build-image/action.yaml +++ b/.github/actions/build-image/action.yaml @@ -34,6 +34,16 @@ runs: echo $l >> $GITHUB_OUTPUT done + # set cache-to only if dev branch + - id: cache-to + shell: bash + run: |- + if [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then + echo "value=type=gha,mode=max" >> $GITHUB_OUTPUT + else + echo "value=" >> $GITHUB_OUTPUT + fi + - name: Build and push to ghcr by digest id: build-ghcr uses: docker/build-push-action@v5.3.0 @@ -43,7 +53,7 @@ runs: platforms: ${{ inputs.platform }} target: ${{ inputs.target }} cache-from: type=gha - cache-to: type=gha,mode=max + cache-to: ${{ steps.cache-to.outputs.value }} build-args: | BASEIMGTYPE=${{ inputs.baseimg }} BUILD_VERSION=${{ inputs.version }} @@ -66,7 +76,7 @@ runs: platforms: ${{ inputs.platform }} target: ${{ inputs.target }} cache-from: type=gha - cache-to: type=gha,mode=max + cache-to: ${{ steps.cache-to.outputs.value }} build-args: | BASEIMGTYPE=${{ inputs.baseimg }} BUILD_VERSION=${{ inputs.version }} From 1a458589041e2df1ba1b8a8ed9e128627b4ea036 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Mon, 13 May 2024 07:56:55 +1000 Subject: [PATCH 166/313] Add pylint to git pre-commit hooks (#6726) --- .pre-commit-config.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6f4bb52104..ce226846e3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -40,3 +40,10 @@ repos: hooks: - id: clang-format types_or: [c, c++] + - repo: local + hooks: + - id: pylint + name: pylint + entry: pylint + language: system + types: [python] From 61b65e2726485ea4d12fc5f47de1e614236fa182 Mon Sep 17 00:00:00 2001 From: Marcin Krasowski Date: Mon, 13 May 2024 01:25:41 +0200 Subject: [PATCH 167/313] fix(ltr390): stuck ALS values when configured for ALS+UV readings (#6723) --- esphome/components/ltr390/ltr390.cpp | 31 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/esphome/components/ltr390/ltr390.cpp b/esphome/components/ltr390/ltr390.cpp index 65c08ab614..4eb1ff2c46 100644 --- a/esphome/components/ltr390/ltr390.cpp +++ b/esphome/components/ltr390/ltr390.cpp @@ -8,6 +8,9 @@ namespace ltr390 { static const char *const TAG = "ltr390"; +static const uint8_t LTR390_WAKEUP_TIME = 10; +static const uint8_t LTR390_SETTLE_TIME = 5; + static const uint8_t LTR390_MAIN_CTRL = 0x00; static const uint8_t LTR390_MEAS_RATE = 0x04; static const uint8_t LTR390_GAIN = 0x05; @@ -101,21 +104,27 @@ void LTR390Component::read_mode_(int mode_index) { std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get(); ctrl[LTR390_CTRL_MODE] = mode; + ctrl[LTR390_CTRL_EN] = true; this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong(); // After the sensor integration time do the following - this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100, [this, mode_index]() { - // Read from the sensor - std::get<1>(this->mode_funcs_[mode_index])(); + this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100 + LTR390_WAKEUP_TIME + LTR390_SETTLE_TIME, + [this, mode_index]() { + // Read from the sensor + std::get<1>(this->mode_funcs_[mode_index])(); - // If there are more modes to read then begin the next - // otherwise stop - if (mode_index + 1 < (int) this->mode_funcs_.size()) { - this->read_mode_(mode_index + 1); - } else { - this->reading_ = false; - } - }); + // If there are more modes to read then begin the next + // otherwise stop + if (mode_index + 1 < (int) this->mode_funcs_.size()) { + this->read_mode_(mode_index + 1); + } else { + // put sensor in standby + std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get(); + ctrl[LTR390_CTRL_EN] = false; + this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong(); + this->reading_ = false; + } + }); } void LTR390Component::setup() { From 67ca60e2afa118818a97c12246a1b751b16a2cf4 Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Mon, 13 May 2024 01:54:43 +0200 Subject: [PATCH 168/313] separate debug component for each platform in different file (#6715) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/debug/debug_component.cpp | 374 +------------------ esphome/components/debug/debug_component.h | 5 + esphome/components/debug/debug_esp32.cpp | 287 ++++++++++++++ esphome/components/debug/debug_esp8266.cpp | 94 +++++ esphome/components/debug/debug_host.cpp | 18 + esphome/components/debug/debug_libretiny.cpp | 44 +++ esphome/components/debug/debug_rp2040.cpp | 23 ++ 7 files changed, 479 insertions(+), 366 deletions(-) create mode 100644 esphome/components/debug/debug_esp32.cpp create mode 100644 esphome/components/debug/debug_esp8266.cpp create mode 100644 esphome/components/debug/debug_host.cpp create mode 100644 esphome/components/debug/debug_libretiny.cpp create mode 100644 esphome/components/debug/debug_rp2040.cpp diff --git a/esphome/components/debug/debug_component.cpp b/esphome/components/debug/debug_component.cpp index f22a8a2e5d..cbd4249d92 100644 --- a/esphome/components/debug/debug_component.cpp +++ b/esphome/components/debug/debug_component.cpp @@ -8,62 +8,16 @@ #include #include -#ifdef USE_ESP32 - -#include -#include - -#include -#if defined(USE_ESP32_VARIANT_ESP32) -#include -#elif defined(USE_ESP32_VARIANT_ESP32C3) -#include -#elif defined(USE_ESP32_VARIANT_ESP32C6) -#include -#elif defined(USE_ESP32_VARIANT_ESP32S2) -#include -#elif defined(USE_ESP32_VARIANT_ESP32S3) -#include -#endif - -#endif // USE_ESP32 - -#ifdef USE_ARDUINO -#ifdef USE_RP2040 -#include -#elif defined(USE_ESP32) || defined(USE_ESP8266) -#include -#endif -#endif - namespace esphome { namespace debug { static const char *const TAG = "debug"; -static uint32_t get_free_heap() { -#if defined(USE_ESP8266) - return ESP.getFreeHeap(); // NOLINT(readability-static-accessed-through-instance) -#elif defined(USE_ESP32) - return heap_caps_get_free_size(MALLOC_CAP_INTERNAL); -#elif defined(USE_RP2040) - return rp2040.getFreeHeap(); -#elif defined(USE_LIBRETINY) - return lt_heap_get_free(); -#elif defined(USE_HOST) - return INT_MAX; -#endif -} - void DebugComponent::dump_config() { #ifndef ESPHOME_LOG_HAS_DEBUG return; // Can't log below if debug logging is disabled #endif - std::string device_info; - std::string reset_reason; - device_info.reserve(256); - ESP_LOGCONFIG(TAG, "Debug component:"); #ifdef USE_TEXT_SENSOR LOG_TEXT_SENSOR(" ", "Device info", this->device_info_); @@ -76,305 +30,15 @@ void DebugComponent::dump_config() { #endif // defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2) #endif // USE_SENSOR + std::string device_info; + device_info.reserve(256); ESP_LOGD(TAG, "ESPHome version %s", ESPHOME_VERSION); device_info += ESPHOME_VERSION; - this->free_heap_ = get_free_heap(); + this->free_heap_ = get_free_heap_(); ESP_LOGD(TAG, "Free Heap Size: %" PRIu32 " bytes", this->free_heap_); -#if defined(USE_ARDUINO) && (defined(USE_ESP32) || defined(USE_ESP8266)) - const char *flash_mode; - switch (ESP.getFlashChipMode()) { // NOLINT(readability-static-accessed-through-instance) - case FM_QIO: - flash_mode = "QIO"; - break; - case FM_QOUT: - flash_mode = "QOUT"; - break; - case FM_DIO: - flash_mode = "DIO"; - break; - case FM_DOUT: - flash_mode = "DOUT"; - break; -#ifdef USE_ESP32 - case FM_FAST_READ: - flash_mode = "FAST_READ"; - break; - case FM_SLOW_READ: - flash_mode = "SLOW_READ"; - break; -#endif - default: - flash_mode = "UNKNOWN"; - } - ESP_LOGD(TAG, "Flash Chip: Size=%ukB Speed=%uMHz Mode=%s", - ESP.getFlashChipSize() / 1024, // NOLINT - ESP.getFlashChipSpeed() / 1000000, flash_mode); // NOLINT - device_info += "|Flash: " + to_string(ESP.getFlashChipSize() / 1024) + // NOLINT - "kB Speed:" + to_string(ESP.getFlashChipSpeed() / 1000000) + "MHz Mode:"; // NOLINT - device_info += flash_mode; -#endif // USE_ARDUINO && (USE_ESP32 || USE_ESP8266) - -#ifdef USE_ESP32 - esp_chip_info_t info; - esp_chip_info(&info); - const char *model; -#if defined(USE_ESP32_VARIANT_ESP32) - model = "ESP32"; -#elif defined(USE_ESP32_VARIANT_ESP32C3) - model = "ESP32-C3"; -#elif defined(USE_ESP32_VARIANT_ESP32C6) - model = "ESP32-C6"; -#elif defined(USE_ESP32_VARIANT_ESP32S2) - model = "ESP32-S2"; -#elif defined(USE_ESP32_VARIANT_ESP32S3) - model = "ESP32-S3"; -#elif defined(USE_ESP32_VARIANT_ESP32H2) - model = "ESP32-H2"; -#else - model = "UNKNOWN"; -#endif - std::string features; - if (info.features & CHIP_FEATURE_EMB_FLASH) { - features += "EMB_FLASH,"; - info.features &= ~CHIP_FEATURE_EMB_FLASH; - } - if (info.features & CHIP_FEATURE_WIFI_BGN) { - features += "WIFI_BGN,"; - info.features &= ~CHIP_FEATURE_WIFI_BGN; - } - if (info.features & CHIP_FEATURE_BLE) { - features += "BLE,"; - info.features &= ~CHIP_FEATURE_BLE; - } - if (info.features & CHIP_FEATURE_BT) { - features += "BT,"; - info.features &= ~CHIP_FEATURE_BT; - } - if (info.features & CHIP_FEATURE_EMB_PSRAM) { - features += "EMB_PSRAM,"; - info.features &= ~CHIP_FEATURE_EMB_PSRAM; - } - if (info.features) - features += "Other:" + format_hex(info.features); - ESP_LOGD(TAG, "Chip: Model=%s, Features=%s Cores=%u, Revision=%u", model, features.c_str(), info.cores, - info.revision); - device_info += "|Chip: "; - device_info += model; - device_info += " Features:"; - device_info += features; - device_info += " Cores:" + to_string(info.cores); - device_info += " Revision:" + to_string(info.revision); - - ESP_LOGD(TAG, "ESP-IDF Version: %s", esp_get_idf_version()); - device_info += "|ESP-IDF: "; - device_info += esp_get_idf_version(); - - std::string mac = get_mac_address_pretty(); - ESP_LOGD(TAG, "EFuse MAC: %s", mac.c_str()); - device_info += "|EFuse MAC: "; - device_info += mac; - - switch (rtc_get_reset_reason(0)) { - case POWERON_RESET: - reset_reason = "Power On Reset"; - break; -#if defined(USE_ESP32_VARIANT_ESP32) - case SW_RESET: -#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) - case RTC_SW_SYS_RESET: -#endif - reset_reason = "Software Reset Digital Core"; - break; -#if defined(USE_ESP32_VARIANT_ESP32) - case OWDT_RESET: - reset_reason = "Watch Dog Reset Digital Core"; - break; -#endif - case DEEPSLEEP_RESET: - reset_reason = "Deep Sleep Reset Digital Core"; - break; -#if defined(USE_ESP32_VARIANT_ESP32) - case SDIO_RESET: - reset_reason = "SLC Module Reset Digital Core"; - break; -#endif - case TG0WDT_SYS_RESET: - reset_reason = "Timer Group 0 Watch Dog Reset Digital Core"; - break; - case TG1WDT_SYS_RESET: - reset_reason = "Timer Group 1 Watch Dog Reset Digital Core"; - break; - case RTCWDT_SYS_RESET: - reset_reason = "RTC Watch Dog Reset Digital Core"; - break; -#if !defined(USE_ESP32_VARIANT_ESP32C6) - case INTRUSION_RESET: - reset_reason = "Intrusion Reset CPU"; - break; -#endif -#if defined(USE_ESP32_VARIANT_ESP32) - case TGWDT_CPU_RESET: - reset_reason = "Timer Group Reset CPU"; - break; -#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) - case TG0WDT_CPU_RESET: - reset_reason = "Timer Group 0 Reset CPU"; - break; -#endif -#if defined(USE_ESP32_VARIANT_ESP32) - case SW_CPU_RESET: -#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) - case RTC_SW_CPU_RESET: -#endif - reset_reason = "Software Reset CPU"; - break; - case RTCWDT_CPU_RESET: - reset_reason = "RTC Watch Dog Reset CPU"; - break; -#if defined(USE_ESP32_VARIANT_ESP32) - case EXT_CPU_RESET: - reset_reason = "External CPU Reset"; - break; -#endif - case RTCWDT_BROWN_OUT_RESET: - reset_reason = "Voltage Unstable Reset"; - break; - case RTCWDT_RTC_RESET: - reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module"; - break; -#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) - case TG1WDT_CPU_RESET: - reset_reason = "Timer Group 1 Reset CPU"; - break; - case SUPER_WDT_RESET: - reset_reason = "Super Watchdog Reset Digital Core And RTC Module"; - break; - case GLITCH_RTC_RESET: - reset_reason = "Glitch Reset Digital Core And RTC Module"; - break; - case EFUSE_RESET: - reset_reason = "eFuse Reset Digital Core"; - break; -#endif -#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) - case USB_UART_CHIP_RESET: - reset_reason = "USB UART Reset Digital Core"; - break; - case USB_JTAG_CHIP_RESET: - reset_reason = "USB JTAG Reset Digital Core"; - break; - case POWER_GLITCH_RESET: - reset_reason = "Power Glitch Reset Digital Core And RTC Module"; - break; -#endif - default: - reset_reason = "Unknown Reset Reason"; - } - ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str()); - device_info += "|Reset: "; - device_info += reset_reason; - - const char *wakeup_reason; - switch (rtc_get_wakeup_cause()) { - case NO_SLEEP: - wakeup_reason = "No Sleep"; - break; - case EXT_EVENT0_TRIG: - wakeup_reason = "External Event 0"; - break; - case EXT_EVENT1_TRIG: - wakeup_reason = "External Event 1"; - break; - case GPIO_TRIG: - wakeup_reason = "GPIO"; - break; - case TIMER_EXPIRE: - wakeup_reason = "Wakeup Timer"; - break; - case SDIO_TRIG: - wakeup_reason = "SDIO"; - break; - case MAC_TRIG: - wakeup_reason = "MAC"; - break; - case UART0_TRIG: - wakeup_reason = "UART0"; - break; - case UART1_TRIG: - wakeup_reason = "UART1"; - break; - case TOUCH_TRIG: - wakeup_reason = "Touch"; - break; - case SAR_TRIG: - wakeup_reason = "SAR"; - break; - case BT_TRIG: - wakeup_reason = "BT"; - break; - default: - wakeup_reason = "Unknown"; - } - ESP_LOGD(TAG, "Wakeup Reason: %s", wakeup_reason); - device_info += "|Wakeup: "; - device_info += wakeup_reason; -#endif - -#if defined(USE_ESP8266) && !defined(CLANG_TIDY) - ESP_LOGD(TAG, "Chip ID: 0x%08X", ESP.getChipId()); - ESP_LOGD(TAG, "SDK Version: %s", ESP.getSdkVersion()); - ESP_LOGD(TAG, "Core Version: %s", ESP.getCoreVersion().c_str()); - ESP_LOGD(TAG, "Boot Version=%u Mode=%u", ESP.getBootVersion(), ESP.getBootMode()); - ESP_LOGD(TAG, "CPU Frequency: %u", ESP.getCpuFreqMHz()); - ESP_LOGD(TAG, "Flash Chip ID=0x%08X", ESP.getFlashChipId()); - ESP_LOGD(TAG, "Reset Reason: %s", ESP.getResetReason().c_str()); - ESP_LOGD(TAG, "Reset Info: %s", ESP.getResetInfo().c_str()); - - device_info += "|Chip: 0x" + format_hex(ESP.getChipId()); - device_info += "|SDK: "; - device_info += ESP.getSdkVersion(); - device_info += "|Core: "; - device_info += ESP.getCoreVersion().c_str(); - device_info += "|Boot: "; - device_info += to_string(ESP.getBootVersion()); - device_info += "|Mode: " + to_string(ESP.getBootMode()); - device_info += "|CPU: " + to_string(ESP.getCpuFreqMHz()); - device_info += "|Flash: 0x" + format_hex(ESP.getFlashChipId()); - device_info += "|Reset: "; - device_info += ESP.getResetReason().c_str(); - device_info += "|"; - device_info += ESP.getResetInfo().c_str(); - - reset_reason = ESP.getResetReason().c_str(); -#endif - -#ifdef USE_RP2040 - ESP_LOGD(TAG, "CPU Frequency: %u", rp2040.f_cpu()); - device_info += "CPU Frequency: " + to_string(rp2040.f_cpu()); -#endif // USE_RP2040 - -#ifdef USE_LIBRETINY - ESP_LOGD(TAG, "LibreTiny Version: %s", lt_get_version()); - ESP_LOGD(TAG, "Chip: %s (%04x) @ %u MHz", lt_cpu_get_model_name(), lt_cpu_get_model(), lt_cpu_get_freq_mhz()); - ESP_LOGD(TAG, "Chip ID: 0x%06X", lt_cpu_get_mac_id()); - ESP_LOGD(TAG, "Board: %s", lt_get_board_code()); - ESP_LOGD(TAG, "Flash: %u KiB / RAM: %u KiB", lt_flash_get_size() / 1024, lt_ram_get_size() / 1024); - ESP_LOGD(TAG, "Reset Reason: %s", lt_get_reboot_reason_name(lt_get_reboot_reason())); - - device_info += "|Version: "; - device_info += LT_BANNER_STR + 10; - device_info += "|Reset Reason: "; - device_info += lt_get_reboot_reason_name(lt_get_reboot_reason()); - device_info += "|Chip Name: "; - device_info += lt_cpu_get_model_name(); - device_info += "|Chip ID: 0x" + format_hex(lt_cpu_get_mac_id()); - device_info += "|Flash: " + to_string(lt_flash_get_size() / 1024) + " KiB"; - device_info += "|RAM: " + to_string(lt_ram_get_size() / 1024) + " KiB"; - - reset_reason = lt_get_reboot_reason_name(lt_get_reboot_reason()); -#endif // USE_LIBRETINY + get_device_info_(device_info); #ifdef USE_TEXT_SENSOR if (this->device_info_ != nullptr) { @@ -383,14 +47,14 @@ void DebugComponent::dump_config() { this->device_info_->publish_state(device_info); } if (this->reset_reason_ != nullptr) { - this->reset_reason_->publish_state(reset_reason); + this->reset_reason_->publish_state(get_reset_reason_()); } #endif // USE_TEXT_SENSOR } void DebugComponent::loop() { // log when free heap space has halved - uint32_t new_free_heap = get_free_heap(); + uint32_t new_free_heap = get_free_heap_(); if (new_free_heap < this->free_heap_ / 2) { this->free_heap_ = new_free_heap; ESP_LOGD(TAG, "Free Heap Size: %" PRIu32 " bytes", this->free_heap_); @@ -411,38 +75,16 @@ void DebugComponent::loop() { void DebugComponent::update() { #ifdef USE_SENSOR if (this->free_sensor_ != nullptr) { - this->free_sensor_->publish_state(get_free_heap()); + this->free_sensor_->publish_state(get_free_heap_()); } - if (this->block_sensor_ != nullptr) { -#if defined(USE_ESP8266) - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - this->block_sensor_->publish_state(ESP.getMaxFreeBlockSize()); -#elif defined(USE_ESP32) - this->block_sensor_->publish_state(heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL)); -#elif defined(USE_LIBRETINY) - this->block_sensor_->publish_state(lt_heap_get_max_alloc()); -#endif - } - -#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2) - if (this->fragmentation_sensor_ != nullptr) { - // NOLINTNEXTLINE(readability-static-accessed-through-instance) - this->fragmentation_sensor_->publish_state(ESP.getHeapFragmentation()); - } -#endif - if (this->loop_time_sensor_ != nullptr) { this->loop_time_sensor_->publish_state(this->max_loop_time_); this->max_loop_time_ = 0; } -#ifdef USE_ESP32 - if (this->psram_sensor_ != nullptr) { - this->psram_sensor_->publish_state(heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); - } -#endif // USE_ESP32 #endif // USE_SENSOR + update_platform_(); } float DebugComponent::get_setup_priority() const { return setup_priority::LATE; } diff --git a/esphome/components/debug/debug_component.h b/esphome/components/debug/debug_component.h index 93e3ba4857..2b54406603 100644 --- a/esphome/components/debug/debug_component.h +++ b/esphome/components/debug/debug_component.h @@ -59,6 +59,11 @@ class DebugComponent : public PollingComponent { text_sensor::TextSensor *device_info_{nullptr}; text_sensor::TextSensor *reset_reason_{nullptr}; #endif // USE_TEXT_SENSOR + + std::string get_reset_reason_(); + uint32_t get_free_heap_(); + void get_device_info_(std::string &device_info); + void update_platform_(); }; } // namespace debug diff --git a/esphome/components/debug/debug_esp32.cpp b/esphome/components/debug/debug_esp32.cpp new file mode 100644 index 0000000000..cfdfdd2a61 --- /dev/null +++ b/esphome/components/debug/debug_esp32.cpp @@ -0,0 +1,287 @@ +#include "debug_component.h" +#ifdef USE_ESP32 +#include "esphome/core/log.h" + +#include +#include +#include + +#if defined(USE_ESP32_VARIANT_ESP32) +#include +#elif defined(USE_ESP32_VARIANT_ESP32C3) +#include +#elif defined(USE_ESP32_VARIANT_ESP32C6) +#include +#elif defined(USE_ESP32_VARIANT_ESP32S2) +#include +#elif defined(USE_ESP32_VARIANT_ESP32S3) +#include +#endif +#ifdef USE_ARDUINO +#include +#endif + +namespace esphome { +namespace debug { + +static const char *const TAG = "debug"; + +std::string DebugComponent::get_reset_reason_() { + std::string reset_reason; + switch (rtc_get_reset_reason(0)) { + case POWERON_RESET: + reset_reason = "Power On Reset"; + break; +#if defined(USE_ESP32_VARIANT_ESP32) + case SW_RESET: +#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) + case RTC_SW_SYS_RESET: +#endif + reset_reason = "Software Reset Digital Core"; + break; +#if defined(USE_ESP32_VARIANT_ESP32) + case OWDT_RESET: + reset_reason = "Watch Dog Reset Digital Core"; + break; +#endif + case DEEPSLEEP_RESET: + reset_reason = "Deep Sleep Reset Digital Core"; + break; +#if defined(USE_ESP32_VARIANT_ESP32) + case SDIO_RESET: + reset_reason = "SLC Module Reset Digital Core"; + break; +#endif + case TG0WDT_SYS_RESET: + reset_reason = "Timer Group 0 Watch Dog Reset Digital Core"; + break; + case TG1WDT_SYS_RESET: + reset_reason = "Timer Group 1 Watch Dog Reset Digital Core"; + break; + case RTCWDT_SYS_RESET: + reset_reason = "RTC Watch Dog Reset Digital Core"; + break; +#if !defined(USE_ESP32_VARIANT_ESP32C6) + case INTRUSION_RESET: + reset_reason = "Intrusion Reset CPU"; + break; +#endif +#if defined(USE_ESP32_VARIANT_ESP32) + case TGWDT_CPU_RESET: + reset_reason = "Timer Group Reset CPU"; + break; +#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) + case TG0WDT_CPU_RESET: + reset_reason = "Timer Group 0 Reset CPU"; + break; +#endif +#if defined(USE_ESP32_VARIANT_ESP32) + case SW_CPU_RESET: +#elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) + case RTC_SW_CPU_RESET: +#endif + reset_reason = "Software Reset CPU"; + break; + case RTCWDT_CPU_RESET: + reset_reason = "RTC Watch Dog Reset CPU"; + break; +#if defined(USE_ESP32_VARIANT_ESP32) + case EXT_CPU_RESET: + reset_reason = "External CPU Reset"; + break; +#endif + case RTCWDT_BROWN_OUT_RESET: + reset_reason = "Voltage Unstable Reset"; + break; + case RTCWDT_RTC_RESET: + reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module"; + break; +#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) + case TG1WDT_CPU_RESET: + reset_reason = "Timer Group 1 Reset CPU"; + break; + case SUPER_WDT_RESET: + reset_reason = "Super Watchdog Reset Digital Core And RTC Module"; + break; + case GLITCH_RTC_RESET: + reset_reason = "Glitch Reset Digital Core And RTC Module"; + break; + case EFUSE_RESET: + reset_reason = "eFuse Reset Digital Core"; + break; +#endif +#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) + case USB_UART_CHIP_RESET: + reset_reason = "USB UART Reset Digital Core"; + break; + case USB_JTAG_CHIP_RESET: + reset_reason = "USB JTAG Reset Digital Core"; + break; + case POWER_GLITCH_RESET: + reset_reason = "Power Glitch Reset Digital Core And RTC Module"; + break; +#endif + default: + reset_reason = "Unknown Reset Reason"; + } + ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str()); + return reset_reason; +} + +uint32_t DebugComponent::get_free_heap_() { return heap_caps_get_free_size(MALLOC_CAP_INTERNAL); } + +void DebugComponent::get_device_info_(std::string &device_info) { +#if defined(USE_ARDUINO) + const char *flash_mode; + switch (ESP.getFlashChipMode()) { // NOLINT(readability-static-accessed-through-instance) + case FM_QIO: + flash_mode = "QIO"; + break; + case FM_QOUT: + flash_mode = "QOUT"; + break; + case FM_DIO: + flash_mode = "DIO"; + break; + case FM_DOUT: + flash_mode = "DOUT"; + break; + case FM_FAST_READ: + flash_mode = "FAST_READ"; + break; + case FM_SLOW_READ: + flash_mode = "SLOW_READ"; + break; + default: + flash_mode = "UNKNOWN"; + } + ESP_LOGD(TAG, "Flash Chip: Size=%ukB Speed=%uMHz Mode=%s", + ESP.getFlashChipSize() / 1024, // NOLINT + ESP.getFlashChipSpeed() / 1000000, flash_mode); // NOLINT + device_info += "|Flash: " + to_string(ESP.getFlashChipSize() / 1024) + // NOLINT + "kB Speed:" + to_string(ESP.getFlashChipSpeed() / 1000000) + "MHz Mode:"; // NOLINT + device_info += flash_mode; +#endif + + esp_chip_info_t info; + esp_chip_info(&info); + const char *model; +#if defined(USE_ESP32_VARIANT_ESP32) + model = "ESP32"; +#elif defined(USE_ESP32_VARIANT_ESP32C3) + model = "ESP32-C3"; +#elif defined(USE_ESP32_VARIANT_ESP32C6) + model = "ESP32-C6"; +#elif defined(USE_ESP32_VARIANT_ESP32S2) + model = "ESP32-S2"; +#elif defined(USE_ESP32_VARIANT_ESP32S3) + model = "ESP32-S3"; +#elif defined(USE_ESP32_VARIANT_ESP32H2) + model = "ESP32-H2"; +#else + model = "UNKNOWN"; +#endif + std::string features; + if (info.features & CHIP_FEATURE_EMB_FLASH) { + features += "EMB_FLASH,"; + info.features &= ~CHIP_FEATURE_EMB_FLASH; + } + if (info.features & CHIP_FEATURE_WIFI_BGN) { + features += "WIFI_BGN,"; + info.features &= ~CHIP_FEATURE_WIFI_BGN; + } + if (info.features & CHIP_FEATURE_BLE) { + features += "BLE,"; + info.features &= ~CHIP_FEATURE_BLE; + } + if (info.features & CHIP_FEATURE_BT) { + features += "BT,"; + info.features &= ~CHIP_FEATURE_BT; + } + if (info.features & CHIP_FEATURE_EMB_PSRAM) { + features += "EMB_PSRAM,"; + info.features &= ~CHIP_FEATURE_EMB_PSRAM; + } + if (info.features) + features += "Other:" + format_hex(info.features); + ESP_LOGD(TAG, "Chip: Model=%s, Features=%s Cores=%u, Revision=%u", model, features.c_str(), info.cores, + info.revision); + device_info += "|Chip: "; + device_info += model; + device_info += " Features:"; + device_info += features; + device_info += " Cores:" + to_string(info.cores); + device_info += " Revision:" + to_string(info.revision); + + ESP_LOGD(TAG, "ESP-IDF Version: %s", esp_get_idf_version()); + device_info += "|ESP-IDF: "; + device_info += esp_get_idf_version(); + + std::string mac = get_mac_address_pretty(); + ESP_LOGD(TAG, "EFuse MAC: %s", mac.c_str()); + device_info += "|EFuse MAC: "; + device_info += mac; + + device_info += "|Reset: "; + device_info += get_reset_reason_(); + + const char *wakeup_reason; + switch (rtc_get_wakeup_cause()) { + case NO_SLEEP: + wakeup_reason = "No Sleep"; + break; + case EXT_EVENT0_TRIG: + wakeup_reason = "External Event 0"; + break; + case EXT_EVENT1_TRIG: + wakeup_reason = "External Event 1"; + break; + case GPIO_TRIG: + wakeup_reason = "GPIO"; + break; + case TIMER_EXPIRE: + wakeup_reason = "Wakeup Timer"; + break; + case SDIO_TRIG: + wakeup_reason = "SDIO"; + break; + case MAC_TRIG: + wakeup_reason = "MAC"; + break; + case UART0_TRIG: + wakeup_reason = "UART0"; + break; + case UART1_TRIG: + wakeup_reason = "UART1"; + break; + case TOUCH_TRIG: + wakeup_reason = "Touch"; + break; + case SAR_TRIG: + wakeup_reason = "SAR"; + break; + case BT_TRIG: + wakeup_reason = "BT"; + break; + default: + wakeup_reason = "Unknown"; + } + ESP_LOGD(TAG, "Wakeup Reason: %s", wakeup_reason); + device_info += "|Wakeup: "; + device_info += wakeup_reason; +} + +void DebugComponent::update_platform_() { +#ifdef USE_SENSOR + if (this->block_sensor_ != nullptr) { + this->block_sensor_->publish_state(heap_caps_get_largest_free_block(MALLOC_CAP_INTERNAL)); + } + if (this->psram_sensor_ != nullptr) { + this->psram_sensor_->publish_state(heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); + } +#endif +} + +} // namespace debug +} // namespace esphome +#endif diff --git a/esphome/components/debug/debug_esp8266.cpp b/esphome/components/debug/debug_esp8266.cpp new file mode 100644 index 0000000000..3395d9db12 --- /dev/null +++ b/esphome/components/debug/debug_esp8266.cpp @@ -0,0 +1,94 @@ +#include "debug_component.h" +#ifdef USE_ESP8266 +#include "esphome/core/log.h" +#include + +namespace esphome { +namespace debug { + +static const char *const TAG = "debug"; + +std::string DebugComponent::get_reset_reason_() { +#if !defined(CLANG_TIDY) + return ESP.getResetReason().c_str(); +#else + return ""; +#endif +} + +uint32_t DebugComponent::get_free_heap_() { + return ESP.getFreeHeap(); // NOLINT(readability-static-accessed-through-instance) +} + +void DebugComponent::get_device_info_(std::string &device_info) { + const char *flash_mode; + switch (ESP.getFlashChipMode()) { // NOLINT(readability-static-accessed-through-instance) + case FM_QIO: + flash_mode = "QIO"; + break; + case FM_QOUT: + flash_mode = "QOUT"; + break; + case FM_DIO: + flash_mode = "DIO"; + break; + case FM_DOUT: + flash_mode = "DOUT"; + break; + default: + flash_mode = "UNKNOWN"; + } + ESP_LOGD(TAG, "Flash Chip: Size=%ukB Speed=%uMHz Mode=%s", + ESP.getFlashChipSize() / 1024, // NOLINT + ESP.getFlashChipSpeed() / 1000000, flash_mode); // NOLINT + device_info += "|Flash: " + to_string(ESP.getFlashChipSize() / 1024) + // NOLINT + "kB Speed:" + to_string(ESP.getFlashChipSpeed() / 1000000) + "MHz Mode:"; // NOLINT + device_info += flash_mode; + +#if !defined(CLANG_TIDY) + auto reset_reason = get_reset_reason_(); + ESP_LOGD(TAG, "Chip ID: 0x%08X", ESP.getChipId()); + ESP_LOGD(TAG, "SDK Version: %s", ESP.getSdkVersion()); + ESP_LOGD(TAG, "Core Version: %s", ESP.getCoreVersion().c_str()); + ESP_LOGD(TAG, "Boot Version=%u Mode=%u", ESP.getBootVersion(), ESP.getBootMode()); + ESP_LOGD(TAG, "CPU Frequency: %u", ESP.getCpuFreqMHz()); + ESP_LOGD(TAG, "Flash Chip ID=0x%08X", ESP.getFlashChipId()); + ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str()); + ESP_LOGD(TAG, "Reset Info: %s", ESP.getResetInfo().c_str()); + + device_info += "|Chip: 0x" + format_hex(ESP.getChipId()); + device_info += "|SDK: "; + device_info += ESP.getSdkVersion(); + device_info += "|Core: "; + device_info += ESP.getCoreVersion().c_str(); + device_info += "|Boot: "; + device_info += to_string(ESP.getBootVersion()); + device_info += "|Mode: " + to_string(ESP.getBootMode()); + device_info += "|CPU: " + to_string(ESP.getCpuFreqMHz()); + device_info += "|Flash: 0x" + format_hex(ESP.getFlashChipId()); + device_info += "|Reset: "; + device_info += reset_reason; + device_info += "|"; + device_info += ESP.getResetInfo().c_str(); +#endif +} + +void DebugComponent::update_platform_() { +#ifdef USE_SENSOR + if (this->block_sensor_ != nullptr) { + // NOLINTNEXTLINE(readability-static-accessed-through-instance) + this->block_sensor_->publish_state(ESP.getMaxFreeBlockSize()); + } +#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 2) + if (this->fragmentation_sensor_ != nullptr) { + // NOLINTNEXTLINE(readability-static-accessed-through-instance) + this->fragmentation_sensor_->publish_state(ESP.getHeapFragmentation()); + } +#endif + +#endif +} + +} // namespace debug +} // namespace esphome +#endif diff --git a/esphome/components/debug/debug_host.cpp b/esphome/components/debug/debug_host.cpp new file mode 100644 index 0000000000..09ad34ef88 --- /dev/null +++ b/esphome/components/debug/debug_host.cpp @@ -0,0 +1,18 @@ +#include "debug_component.h" +#ifdef USE_HOST +#include + +namespace esphome { +namespace debug { + +std::string DebugComponent::get_reset_reason_() { return ""; } + +uint32_t DebugComponent::get_free_heap_() { return INT_MAX; } + +void DebugComponent::get_device_info_(std::string &device_info) {} + +void DebugComponent::update_platform_() {} + +} // namespace debug +} // namespace esphome +#endif diff --git a/esphome/components/debug/debug_libretiny.cpp b/esphome/components/debug/debug_libretiny.cpp new file mode 100644 index 0000000000..725cd870ca --- /dev/null +++ b/esphome/components/debug/debug_libretiny.cpp @@ -0,0 +1,44 @@ +#include "debug_component.h" +#ifdef USE_LIBRETINY +#include "esphome/core/log.h" + +namespace esphome { +namespace debug { + +static const char *const TAG = "debug"; + +std::string DebugComponent::get_reset_reason_() { return lt_get_reboot_reason_name(lt_get_reboot_reason()); } + +uint32_t DebugComponent::get_free_heap_() { return lt_heap_get_free(); } + +void DebugComponent::get_device_info_(std::string &device_info) { + reset_reason = get_reset_reason_(); + ESP_LOGD(TAG, "LibreTiny Version: %s", lt_get_version()); + ESP_LOGD(TAG, "Chip: %s (%04x) @ %u MHz", lt_cpu_get_model_name(), lt_cpu_get_model(), lt_cpu_get_freq_mhz()); + ESP_LOGD(TAG, "Chip ID: 0x%06X", lt_cpu_get_mac_id()); + ESP_LOGD(TAG, "Board: %s", lt_get_board_code()); + ESP_LOGD(TAG, "Flash: %u KiB / RAM: %u KiB", lt_flash_get_size() / 1024, lt_ram_get_size() / 1024); + ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str()); + + device_info += "|Version: "; + device_info += LT_BANNER_STR + 10; + device_info += "|Reset Reason: "; + device_info += reset_reason; + device_info += "|Chip Name: "; + device_info += lt_cpu_get_model_name(); + device_info += "|Chip ID: 0x" + format_hex(lt_cpu_get_mac_id()); + device_info += "|Flash: " + to_string(lt_flash_get_size() / 1024) + " KiB"; + device_info += "|RAM: " + to_string(lt_ram_get_size() / 1024) + " KiB"; +} + +void DebugComponent::update_platform_() { +#ifdef USE_SENSOR + if (this->block_sensor_ != nullptr) { + this->block_sensor_->publish_state(lt_heap_get_max_alloc()); + } +#endif +} + +} // namespace debug +} // namespace esphome +#endif diff --git a/esphome/components/debug/debug_rp2040.cpp b/esphome/components/debug/debug_rp2040.cpp new file mode 100644 index 0000000000..497547e30d --- /dev/null +++ b/esphome/components/debug/debug_rp2040.cpp @@ -0,0 +1,23 @@ +#include "debug_component.h" +#ifdef USE_RP2040 +#include "esphome/core/log.h" +#include +namespace esphome { +namespace debug { + +static const char *const TAG = "debug"; + +std::string DebugComponent::get_reset_reason_() { return ""; } + +uint32_t DebugComponent::get_free_heap_() { return rp2040.getFreeHeap(); } + +void DebugComponent::get_device_info_(std::string &device_info) { + ESP_LOGD(TAG, "CPU Frequency: %u", rp2040.f_cpu()); + device_info += "CPU Frequency: " + to_string(rp2040.f_cpu()); +} + +void DebugComponent::update_platform_() {} + +} // namespace debug +} // namespace esphome +#endif From 13e3920c13ce8af481b0e89d61703e61051a0b0d Mon Sep 17 00:00:00 2001 From: Szewcson Date: Mon, 13 May 2024 03:36:10 +0200 Subject: [PATCH 169/313] GDK101 support (#4703) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 1 + esphome/components/gdk101/__init__.py | 32 ++++ esphome/components/gdk101/binary_sensor.py | 29 +++ esphome/components/gdk101/gdk101.cpp | 189 ++++++++++++++++++++ esphome/components/gdk101/gdk101.h | 52 ++++++ esphome/components/gdk101/sensor.py | 83 +++++++++ esphome/const.py | 3 + tests/components/gdk101/common.yaml | 28 +++ tests/components/gdk101/test.esp32-idf.yaml | 5 + tests/components/gdk101/test.esp32.yaml | 5 + tests/components/gdk101/test.esp8266.yaml | 5 + tests/components/gdk101/test.rp2040.yaml | 5 + 12 files changed, 437 insertions(+) create mode 100644 esphome/components/gdk101/__init__.py create mode 100644 esphome/components/gdk101/binary_sensor.py create mode 100644 esphome/components/gdk101/gdk101.cpp create mode 100644 esphome/components/gdk101/gdk101.h create mode 100644 esphome/components/gdk101/sensor.py create mode 100644 tests/components/gdk101/common.yaml create mode 100644 tests/components/gdk101/test.esp32-idf.yaml create mode 100644 tests/components/gdk101/test.esp32.yaml create mode 100644 tests/components/gdk101/test.esp8266.yaml create mode 100644 tests/components/gdk101/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index c630db7948..88f875f368 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -135,6 +135,7 @@ esphome/components/fs3000/* @kahrendt esphome/components/ft5x06/* @clydebarrow esphome/components/ft63x6/* @gpambrozio esphome/components/gcja5/* @gcormier +esphome/components/gdk101/* @Szewcson esphome/components/globals/* @esphome/core esphome/components/gp8403/* @jesserockz esphome/components/gpio/* @esphome/core diff --git a/esphome/components/gdk101/__init__.py b/esphome/components/gdk101/__init__.py new file mode 100644 index 0000000000..0d90257964 --- /dev/null +++ b/esphome/components/gdk101/__init__.py @@ -0,0 +1,32 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import i2c +from esphome.const import CONF_ID + +CODEOWNERS = ["@Szewcson"] + +DEPENDENCIES = ["i2c"] +MULTI_CONF = True + +CONF_GDK101_ID = "gdk101_id" + +gdk101_ns = cg.esphome_ns.namespace("gdk101") +GDK101Component = gdk101_ns.class_( + "GDK101Component", cg.PollingComponent, i2c.I2CDevice +) + +CONFIG_SCHEMA = ( + cv.Schema( + { + cv.GenerateID(): cv.declare_id(GDK101Component), + } + ) + .extend(cv.polling_component_schema("60s")) + .extend(i2c.i2c_device_schema(0x18)) +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/gdk101/binary_sensor.py b/esphome/components/gdk101/binary_sensor.py new file mode 100644 index 0000000000..2a3d6f07eb --- /dev/null +++ b/esphome/components/gdk101/binary_sensor.py @@ -0,0 +1,29 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import binary_sensor +from esphome.const import ( + CONF_VIBRATIONS, + DEVICE_CLASS_VIBRATION, + ENTITY_CATEGORY_DIAGNOSTIC, + ICON_VIBRATE, +) +from . import CONF_GDK101_ID, GDK101Component + +DEPENDENCIES = ["gdk101"] + +CONFIG_SCHEMA = cv.Schema( + { + cv.GenerateID(CONF_GDK101_ID): cv.use_id(GDK101Component), + cv.Required(CONF_VIBRATIONS): binary_sensor.binary_sensor_schema( + device_class=DEVICE_CLASS_VIBRATION, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + icon=ICON_VIBRATE, + ), + } +) + + +async def to_code(config): + hub = await cg.get_variable(config[CONF_GDK101_ID]) + var = await binary_sensor.new_binary_sensor(config[CONF_VIBRATIONS]) + cg.add(hub.set_vibration_binary_sensor(var)) diff --git a/esphome/components/gdk101/gdk101.cpp b/esphome/components/gdk101/gdk101.cpp new file mode 100644 index 0000000000..93f3c20fa8 --- /dev/null +++ b/esphome/components/gdk101/gdk101.cpp @@ -0,0 +1,189 @@ +#include "gdk101.h" +#include "esphome/core/hal.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace gdk101 { + +static const char *const TAG = "gdk101"; +static const uint8_t NUMBER_OF_READ_RETRIES = 5; + +void GDK101Component::update() { + uint8_t data[2]; + if (!this->read_dose_1m_(data)) { + this->status_set_warning("Failed to read dose 1m"); + return; + } + + if (!this->read_dose_10m_(data)) { + this->status_set_warning("Failed to read dose 10m"); + return; + } + + if (!this->read_status_(data)) { + this->status_set_warning("Failed to read status"); + return; + } + + if (!this->read_measurement_duration_(data)) { + this->status_set_warning("Failed to read measurement duration"); + return; + } + this->status_clear_warning(); +} + +void GDK101Component::setup() { + uint8_t data[2]; + ESP_LOGCONFIG(TAG, "Setting up GDK101..."); + // first, reset the sensor + if (!this->reset_sensor_(data)) { + this->status_set_error("Reset failed!"); + this->mark_failed(); + return; + } + // sensor should acknowledge success of the reset procedure + if (data[0] != 1) { + this->status_set_error("Reset not acknowledged!"); + this->mark_failed(); + return; + } + delay(10); + // read firmware version + if (!this->read_fw_version_(data)) { + this->status_set_error("Failed to read firmware version"); + this->mark_failed(); + return; + } +} + +void GDK101Component::dump_config() { + ESP_LOGCONFIG(TAG, "GDK101:"); + LOG_I2C_DEVICE(this); + if (this->is_failed()) { + ESP_LOGE(TAG, "Communication with GDK101 failed!"); + } +#ifdef USE_SENSOR + LOG_SENSOR(" ", "Firmware Version", this->fw_version_sensor_); + LOG_SENSOR(" ", "Average Radaition Dose per 1 minute", this->rad_1m_sensor_); + LOG_SENSOR(" ", "Average Radaition Dose per 10 minutes", this->rad_10m_sensor_); + LOG_SENSOR(" ", "Status", this->status_sensor_); + LOG_SENSOR(" ", "Measurement Duration", this->measurement_duration_sensor_); +#endif // USE_SENSOR + +#ifdef USE_BINARY_SENSOR + LOG_BINARY_SENSOR(" ", "Vibration Status", this->vibration_binary_sensor_); +#endif // USE_BINARY_SENSOR +} + +float GDK101Component::get_setup_priority() const { return setup_priority::DATA; } + +bool GDK101Component::read_bytes_with_retry_(uint8_t a_register, uint8_t *data, uint8_t len) { + uint8_t retry = NUMBER_OF_READ_RETRIES; + bool status = false; + while (!status && retry) { + status = this->read_bytes(a_register, data, len); + retry--; + } + return status; +} + +bool GDK101Component::reset_sensor_(uint8_t *data) { + // It looks like reset is not so well designed in that sensor + // After sending reset command it looks that sensor start performing reset and is unresponsible during read + // after a while we can send another reset command and read "0x01" as confirmation + // Documentation not going in to such details unfortunately + if (!this->read_bytes_with_retry_(GDK101_REG_RESET, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + + return true; +} + +bool GDK101Component::read_dose_1m_(uint8_t *data) { +#ifdef USE_SENSOR + if (this->rad_1m_sensor_ != nullptr) { + if (!this->read_bytes(GDK101_REG_READ_1MIN_AVG, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + + const float dose = data[0] + (data[1] / 100.0f); + + this->rad_1m_sensor_->publish_state(dose); + } +#endif // USE_SENSOR + return true; +} + +bool GDK101Component::read_dose_10m_(uint8_t *data) { +#ifdef USE_SENSOR + if (this->rad_10m_sensor_ != nullptr) { + if (!this->read_bytes(GDK101_REG_READ_10MIN_AVG, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + + const float dose = data[0] + (data[1] / 100.0f); + + this->rad_10m_sensor_->publish_state(dose); + } +#endif // USE_SENSOR + return true; +} + +bool GDK101Component::read_status_(uint8_t *data) { + if (!this->read_bytes(GDK101_REG_READ_STATUS, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + +#ifdef USE_SENSOR + if (this->status_sensor_ != nullptr) { + this->status_sensor_->publish_state(data[0]); + } +#endif // USE_SENSOR + +#ifdef USE_BINARY_SENSOR + if (this->vibration_binary_sensor_ != nullptr) { + this->vibration_binary_sensor_->publish_state(data[1]); + } +#endif // USE_BINARY_SENSOR + + return true; +} + +bool GDK101Component::read_fw_version_(uint8_t *data) { +#ifdef USE_SENSOR + if (this->fw_version_sensor_ != nullptr) { + if (!this->read_bytes(GDK101_REG_READ_FIRMWARE, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + + const float fw_version = data[0] + (data[1] / 10.0f); + + this->fw_version_sensor_->publish_state(fw_version); + } +#endif // USE_SENSOR + return true; +} + +bool GDK101Component::read_measurement_duration_(uint8_t *data) { +#ifdef USE_SENSOR + if (this->measurement_duration_sensor_ != nullptr) { + if (!this->read_bytes(GDK101_REG_READ_MEASURING_TIME, data, 2)) { + ESP_LOGE(TAG, "Updating GDK101 failed!"); + return false; + } + + const float meas_time = (data[0] * 60) + data[1]; + + this->measurement_duration_sensor_->publish_state(meas_time); + } +#endif // USE_SENSOR + return true; +} + +} // namespace gdk101 +} // namespace esphome diff --git a/esphome/components/gdk101/gdk101.h b/esphome/components/gdk101/gdk101.h new file mode 100644 index 0000000000..460e72ac89 --- /dev/null +++ b/esphome/components/gdk101/gdk101.h @@ -0,0 +1,52 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#ifdef USE_SENSOR +#include "esphome/components/sensor/sensor.h" +#endif // USE_SENSOR +#ifdef USE_BINARY_SENSOR +#include "esphome/components/binary_sensor/binary_sensor.h" +#endif // USE_BINARY_SENSOR +#include "esphome/components/i2c/i2c.h" + +namespace esphome { +namespace gdk101 { + +static const uint8_t GDK101_REG_READ_FIRMWARE = 0xB4; // Firmware version +static const uint8_t GDK101_REG_RESET = 0xA0; // Reset register - reading its value triggers reset +static const uint8_t GDK101_REG_READ_STATUS = 0xB0; // Status register +static const uint8_t GDK101_REG_READ_MEASURING_TIME = 0xB1; // Mesuring time +static const uint8_t GDK101_REG_READ_10MIN_AVG = 0xB2; // Average radiation dose per 10 min +static const uint8_t GDK101_REG_READ_1MIN_AVG = 0xB3; // Average radiation dose per 1 min + +class GDK101Component : public PollingComponent, public i2c::I2CDevice { +#ifdef USE_SENSOR + SUB_SENSOR(rad_1m) + SUB_SENSOR(rad_10m) + SUB_SENSOR(status) + SUB_SENSOR(fw_version) + SUB_SENSOR(measurement_duration) +#endif // USE_SENSOR +#ifdef USE_BINARY_SENSOR + SUB_BINARY_SENSOR(vibration) +#endif // USE_BINARY_SENSOR + + public: + void setup() override; + void dump_config() override; + float get_setup_priority() const override; + void update() override; + + protected: + bool read_bytes_with_retry_(uint8_t a_register, uint8_t *data, uint8_t len); + bool reset_sensor_(uint8_t *data); + bool read_dose_1m_(uint8_t *data); + bool read_dose_10m_(uint8_t *data); + bool read_status_(uint8_t *data); + bool read_fw_version_(uint8_t *data); + bool read_measurement_duration_(uint8_t *data); +}; + +} // namespace gdk101 +} // namespace esphome diff --git a/esphome/components/gdk101/sensor.py b/esphome/components/gdk101/sensor.py new file mode 100644 index 0000000000..f782264615 --- /dev/null +++ b/esphome/components/gdk101/sensor.py @@ -0,0 +1,83 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + DEVICE_CLASS_DURATION, + DEVICE_CLASS_EMPTY, + ENTITY_CATEGORY_DIAGNOSTIC, + CONF_MEASUREMENT_DURATION, + CONF_STATUS, + CONF_VERSION, + ICON_RADIOACTIVE, + ICON_TIMER, + STATE_CLASS_MEASUREMENT, + STATE_CLASS_TOTAL_INCREASING, + UNIT_MICROSILVERTS_PER_HOUR, + UNIT_SECOND, +) +from . import CONF_GDK101_ID, GDK101Component + +CONF_RADIATION_DOSE_PER_1M = "radiation_dose_per_1m" +CONF_RADIATION_DOSE_PER_10M = "radiation_dose_per_10m" + +DEPENDENCIES = ["gdk101"] + +CONFIG_SCHEMA = cv.Schema( + { + cv.GenerateID(CONF_GDK101_ID): cv.use_id(GDK101Component), + cv.Optional(CONF_RADIATION_DOSE_PER_1M): sensor.sensor_schema( + icon=ICON_RADIOACTIVE, + unit_of_measurement=UNIT_MICROSILVERTS_PER_HOUR, + accuracy_decimals=2, + device_class=DEVICE_CLASS_EMPTY, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Optional(CONF_RADIATION_DOSE_PER_10M): sensor.sensor_schema( + icon=ICON_RADIOACTIVE, + unit_of_measurement=UNIT_MICROSILVERTS_PER_HOUR, + accuracy_decimals=2, + device_class=DEVICE_CLASS_EMPTY, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Optional(CONF_VERSION): sensor.sensor_schema( + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + accuracy_decimals=1, + ), + cv.Optional(CONF_STATUS): sensor.sensor_schema( + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + accuracy_decimals=0, + ), + cv.Optional(CONF_MEASUREMENT_DURATION): sensor.sensor_schema( + unit_of_measurement=UNIT_SECOND, + icon=ICON_TIMER, + accuracy_decimals=0, + state_class=STATE_CLASS_TOTAL_INCREASING, + device_class=DEVICE_CLASS_DURATION, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + ), + } +) + + +async def to_code(config): + hub = await cg.get_variable(config[CONF_GDK101_ID]) + + if radiation_dose_per_1m := config.get(CONF_RADIATION_DOSE_PER_1M): + sens = await sensor.new_sensor(radiation_dose_per_1m) + cg.add(hub.set_rad_1m_sensor(sens)) + + if radiation_dose_per_10m := config.get(CONF_RADIATION_DOSE_PER_10M): + sens = await sensor.new_sensor(radiation_dose_per_10m) + cg.add(hub.set_rad_10m_sensor(sens)) + + if version_config := config.get(CONF_VERSION): + sens = await sensor.new_sensor(version_config) + cg.add(hub.set_fw_version_sensor(sens)) + + if status_config := config.get(CONF_STATUS): + sens = await sensor.new_sensor(status_config) + cg.add(hub.set_status_sensor(sens)) + + if measurement_duration_config := config.get(CONF_MEASUREMENT_DURATION): + sens = await sensor.new_sensor(measurement_duration_config) + cg.add(hub.set_measurement_duration_sensor(sens)) diff --git a/esphome/const.py b/esphome/const.py index dba974610a..542183d3b2 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -884,6 +884,7 @@ CONF_VALUE_FONT = "value_font" CONF_VARIABLES = "variables" CONF_VARIANT = "variant" CONF_VERSION = "version" +CONF_VIBRATIONS = "vibrations" CONF_VISIBLE = "visible" CONF_VISUAL = "visual" CONF_VOLTAGE = "voltage" @@ -983,6 +984,7 @@ ICON_SIGNAL_DISTANCE_VARIANT = "mdi:signal" ICON_THERMOMETER = "mdi:thermometer" ICON_TIMELAPSE = "mdi:timelapse" ICON_TIMER = "mdi:timer-outline" +ICON_VIBRATE = "mdi:vibrate" ICON_WATER = "mdi:water" ICON_WATER_PERCENT = "mdi:water-percent" ICON_WEATHER_SUNSET = "mdi:weather-sunset" @@ -1024,6 +1026,7 @@ UNIT_METER_PER_SECOND_SQUARED = "m/s²" UNIT_MICROGRAMS_PER_CUBIC_METER = "µg/m³" UNIT_MICROMETER = "µm" UNIT_MICROSIEMENS_PER_CENTIMETER = "µS/cm" +UNIT_MICROSILVERTS_PER_HOUR = "µSv/h" UNIT_MICROTESLA = "µT" UNIT_MILLIGRAMS_PER_CUBIC_METER = "mg/m³" UNIT_MILLISECOND = "ms" diff --git a/tests/components/gdk101/common.yaml b/tests/components/gdk101/common.yaml new file mode 100644 index 0000000000..f886fc415b --- /dev/null +++ b/tests/components/gdk101/common.yaml @@ -0,0 +1,28 @@ +i2c: + id: i2c_bus + sda: ${i2c_sda} + scl: ${i2c_scl} + +gdk101: + id: my_gdk101 + i2c_id: i2c_bus + +sensor: + - platform: gdk101 + gdk101_id: my_gdk101 + radiation_dose_per_1m: + name: Radiation Dose @ 1 min + radiation_dose_per_10m: + name: Radiation Dose @ 10 min + status: + name: Status + version: + name: FW Version + measurement_duration: + name: Measuring Time + +binary_sensor: + - platform: gdk101 + gdk101_id: my_gdk101 + vibrations: + name: Vibrations diff --git a/tests/components/gdk101/test.esp32-idf.yaml b/tests/components/gdk101/test.esp32-idf.yaml new file mode 100644 index 0000000000..1037d5d35b --- /dev/null +++ b/tests/components/gdk101/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/gdk101/test.esp32.yaml b/tests/components/gdk101/test.esp32.yaml new file mode 100644 index 0000000000..1037d5d35b --- /dev/null +++ b/tests/components/gdk101/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/gdk101/test.esp8266.yaml b/tests/components/gdk101/test.esp8266.yaml new file mode 100644 index 0000000000..d7ae0d5161 --- /dev/null +++ b/tests/components/gdk101/test.esp8266.yaml @@ -0,0 +1,5 @@ +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/gdk101/test.rp2040.yaml b/tests/components/gdk101/test.rp2040.yaml new file mode 100644 index 0000000000..d7ae0d5161 --- /dev/null +++ b/tests/components/gdk101/test.rp2040.yaml @@ -0,0 +1,5 @@ +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 + +<<: !include common.yaml From dd81c836862be87cdad41902f3847c097d8b0fa5 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Mon, 13 May 2024 13:21:02 +1000 Subject: [PATCH 170/313] Typing hint and doc fixes (#6729) --- esphome/cpp_generator.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/esphome/cpp_generator.py b/esphome/cpp_generator.py index 04616d97c2..9a4cb2269a 100644 --- a/esphome/cpp_generator.py +++ b/esphome/cpp_generator.py @@ -2,7 +2,7 @@ import abc import inspect import math import re -from collections.abc import Generator, Sequence +from collections.abc import Sequence from typing import Any, Callable, Optional, Union from esphome.core import ( @@ -477,6 +477,7 @@ def variable( :param rhs: The expression to place on the right hand side of the assignment. :param type_: Manually define a type for the variable, only use this when it's not possible to do so during config validation phase (for example because of template arguments). + :param register: If true register the variable with the core :return: The new variable as a MockObj. """ @@ -492,9 +493,7 @@ def variable( return obj -def with_local_variable( - id_: ID, rhs: SafeExpType, callback: Callable[["MockObj"], None], *args -) -> None: +def with_local_variable(id_: ID, rhs: SafeExpType, callback: Callable, *args) -> None: """Declare a new variable, not pointer type, in the code generation, within a scoped block The variable is only usable within the callback The callback cannot be async. @@ -599,6 +598,7 @@ def add_library(name: str, version: Optional[str], repository: Optional[str] = N :param name: The name of the library (for example 'AsyncTCP') :param version: The version of the library, may be None. + :param repository: The repository for the library """ CORE.add_library(Library(name, version, repository)) @@ -654,7 +654,7 @@ async def process_lambda( parameters: list[tuple[SafeExpType, str]], capture: str = "=", return_type: SafeExpType = None, -) -> Generator[LambdaExpression, None, None]: +) -> Union[LambdaExpression, None]: """Process the given lambda value into a LambdaExpression. This is a coroutine because lambdas can depend on other IDs, @@ -673,7 +673,7 @@ async def process_lambda( ) if value is None: - return + return None parts = value.parts[:] for i, id in enumerate(value.requires_ids): full_id, var = await get_variable_with_full_id(id) @@ -712,7 +712,7 @@ async def templatable( value: Any, args: list[tuple[SafeExpType, str]], output_type: Optional[SafeExpType], - to_exp: Any = None, + to_exp: Union[Callable, dict] = None, ): """Generate code for a templatable config option. From a23d1631e199ac274a1f11d5fbe16ee12fe5b65c Mon Sep 17 00:00:00 2001 From: Jorge-Crespo-Celdran <86021690+Jorge-Crespo-Celdran@users.noreply.github.com> Date: Mon, 13 May 2024 06:04:06 +0200 Subject: [PATCH 171/313] time_based_cover.cpp with manual control fix (#6719) --- esphome/components/time_based/time_based_cover.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/esphome/components/time_based/time_based_cover.cpp b/esphome/components/time_based/time_based_cover.cpp index 50376224a9..e1936d5ee1 100644 --- a/esphome/components/time_based/time_based_cover.cpp +++ b/esphome/components/time_based/time_based_cover.cpp @@ -96,6 +96,9 @@ void TimeBasedCover::control(const CoverCall &call) { } } else { auto op = pos < this->position ? COVER_OPERATION_CLOSING : COVER_OPERATION_OPENING; + if (this->manual_control_ && (pos == COVER_OPEN || pos == COVER_CLOSED)) { + this->position = pos == COVER_CLOSED ? COVER_OPEN : COVER_CLOSED; + } this->target_position_ = pos; this->start_direction_(op); } From 5ee4bf380215d705c19ac4a07fb27a84cbc660db Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Mon, 13 May 2024 06:05:13 +0200 Subject: [PATCH 172/313] Set FEATURE_API_AUDIO flag also if the speaker component is not used (#6712) --- esphome/components/voice_assistant/voice_assistant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index d6b1502381..1c0ea12f4f 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -94,10 +94,10 @@ class VoiceAssistant : public Component { uint32_t get_feature_flags() const { uint32_t flags = 0; flags |= VoiceAssistantFeature::FEATURE_VOICE_ASSISTANT; + flags |= VoiceAssistantFeature::FEATURE_API_AUDIO; #ifdef USE_SPEAKER if (this->speaker_ != nullptr) { flags |= VoiceAssistantFeature::FEATURE_SPEAKER; - flags |= VoiceAssistantFeature::FEATURE_API_AUDIO; } #endif return flags; From 91007952e2276d09c4f52c1cc7ceabe3138c52eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Mon, 13 May 2024 11:21:06 +0100 Subject: [PATCH 173/313] [CST816] Add support for Hynitron Microelectronics CST826 capacitive touch (#6682) --- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp | 4 ++++ esphome/components/cst816/touchscreen/cst816_touchscreen.h | 1 + 2 files changed, 5 insertions(+) diff --git a/esphome/components/cst816/touchscreen/cst816_touchscreen.cpp b/esphome/components/cst816/touchscreen/cst816_touchscreen.cpp index d2b8cc81f1..9e59810c7e 100644 --- a/esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +++ b/esphome/components/cst816/touchscreen/cst816_touchscreen.cpp @@ -15,6 +15,7 @@ void CST816Touchscreen::continue_setup_() { } switch (this->chip_id_) { case CST820_CHIP_ID: + case CST826_CHIP_ID: case CST716_CHIP_ID: case CST816S_CHIP_ID: case CST816D_CHIP_ID: @@ -90,6 +91,9 @@ void CST816Touchscreen::dump_config() { case CST820_CHIP_ID: name = "CST820"; break; + case CST826_CHIP_ID: + name = "CST826"; + break; case CST816S_CHIP_ID: name = "CST816S"; break; diff --git a/esphome/components/cst816/touchscreen/cst816_touchscreen.h b/esphome/components/cst816/touchscreen/cst816_touchscreen.h index 0d987f2739..24e664e7ee 100644 --- a/esphome/components/cst816/touchscreen/cst816_touchscreen.h +++ b/esphome/components/cst816/touchscreen/cst816_touchscreen.h @@ -24,6 +24,7 @@ static const uint8_t REG_SLEEP = 0xE5; static const uint8_t REG_IRQ_CTL = 0xFA; static const uint8_t IRQ_EN_MOTION = 0x70; +static const uint8_t CST826_CHIP_ID = 0x11; static const uint8_t CST820_CHIP_ID = 0xB7; static const uint8_t CST816S_CHIP_ID = 0xB4; static const uint8_t CST816D_CHIP_ID = 0xB6; From eae97dbaa0d450872e35234ecb53f5119da4aa95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 07:11:59 +1200 Subject: [PATCH 174/313] Bump platformio from 6.1.13 to 6.1.15 (#6634) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index df94b8b77c..698ae56447 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ tornado==6.4 tzlocal==5.2 # from time tzdata>=2021.1 # from time pyserial==3.5 -platformio==6.1.13 # When updating platformio, also update Dockerfile +platformio==6.1.15 # When updating platformio, also update Dockerfile esptool==4.7.0 click==8.1.7 esphome-dashboard==20240412.0 From 47b40505c2952b4ee1d066119eac3d212a6761b1 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 09:42:53 +1200 Subject: [PATCH 175/313] Fix ESPHOME_PROJECT_VERSION_30 (#6731) --- esphome/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/core/config.py b/esphome/core/config.py index 2d87796987..80b731b905 100644 --- a/esphome/core/config.py +++ b/esphome/core/config.py @@ -394,7 +394,7 @@ async def to_code(config): if project_conf := config.get(CONF_PROJECT): cg.add_define("ESPHOME_PROJECT_NAME", project_conf[CONF_NAME]) cg.add_define("ESPHOME_PROJECT_VERSION", project_conf[CONF_VERSION]) - cg.add_define("ESPHOME_PROJECT_VERSION_30", project_conf[CONF_VERSION][:30]) + cg.add_define("ESPHOME_PROJECT_VERSION_30", project_conf[CONF_VERSION][:29]) for conf in project_conf.get(CONF_ON_UPDATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) await cg.register_component(trigger, conf) From 2ac0821cab11c4fbd23d17af1ada42577156d258 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 09:58:43 +1200 Subject: [PATCH 176/313] Bump pytest from 8.1.1 to 8.2.0 (#6732) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index 78820765f4..ae833841ca 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -5,7 +5,7 @@ pyupgrade==3.15.2 # also change in .pre-commit-config.yaml when updating pre-commit # Unit tests -pytest==8.1.1 +pytest==8.2.0 pytest-cov==4.1.0 pytest-mock==3.14.0 pytest-asyncio==0.23.6 From 4ec2ef27a87cb8efa5f8a3899bd0fa7e2a80068c Mon Sep 17 00:00:00 2001 From: Marcin Krasowski Date: Mon, 13 May 2024 01:25:41 +0200 Subject: [PATCH 177/313] fix(ltr390): stuck ALS values when configured for ALS+UV readings (#6723) --- esphome/components/ltr390/ltr390.cpp | 31 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/esphome/components/ltr390/ltr390.cpp b/esphome/components/ltr390/ltr390.cpp index 65c08ab614..4eb1ff2c46 100644 --- a/esphome/components/ltr390/ltr390.cpp +++ b/esphome/components/ltr390/ltr390.cpp @@ -8,6 +8,9 @@ namespace ltr390 { static const char *const TAG = "ltr390"; +static const uint8_t LTR390_WAKEUP_TIME = 10; +static const uint8_t LTR390_SETTLE_TIME = 5; + static const uint8_t LTR390_MAIN_CTRL = 0x00; static const uint8_t LTR390_MEAS_RATE = 0x04; static const uint8_t LTR390_GAIN = 0x05; @@ -101,21 +104,27 @@ void LTR390Component::read_mode_(int mode_index) { std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get(); ctrl[LTR390_CTRL_MODE] = mode; + ctrl[LTR390_CTRL_EN] = true; this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong(); // After the sensor integration time do the following - this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100, [this, mode_index]() { - // Read from the sensor - std::get<1>(this->mode_funcs_[mode_index])(); + this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100 + LTR390_WAKEUP_TIME + LTR390_SETTLE_TIME, + [this, mode_index]() { + // Read from the sensor + std::get<1>(this->mode_funcs_[mode_index])(); - // If there are more modes to read then begin the next - // otherwise stop - if (mode_index + 1 < (int) this->mode_funcs_.size()) { - this->read_mode_(mode_index + 1); - } else { - this->reading_ = false; - } - }); + // If there are more modes to read then begin the next + // otherwise stop + if (mode_index + 1 < (int) this->mode_funcs_.size()) { + this->read_mode_(mode_index + 1); + } else { + // put sensor in standby + std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get(); + ctrl[LTR390_CTRL_EN] = false; + this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong(); + this->reading_ = false; + } + }); } void LTR390Component::setup() { From 694f75117e63e1261c873cb5fc080b2d4591b956 Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Mon, 13 May 2024 06:05:13 +0200 Subject: [PATCH 178/313] Set FEATURE_API_AUDIO flag also if the speaker component is not used (#6712) --- esphome/components/voice_assistant/voice_assistant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index d6b1502381..1c0ea12f4f 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -94,10 +94,10 @@ class VoiceAssistant : public Component { uint32_t get_feature_flags() const { uint32_t flags = 0; flags |= VoiceAssistantFeature::FEATURE_VOICE_ASSISTANT; + flags |= VoiceAssistantFeature::FEATURE_API_AUDIO; #ifdef USE_SPEAKER if (this->speaker_ != nullptr) { flags |= VoiceAssistantFeature::FEATURE_SPEAKER; - flags |= VoiceAssistantFeature::FEATURE_API_AUDIO; } #endif return flags; From ba3fc4c5d08dd643099590daf42c5638d496d128 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 May 2024 07:11:59 +1200 Subject: [PATCH 179/313] Bump platformio from 6.1.13 to 6.1.15 (#6634) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index df94b8b77c..698ae56447 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ tornado==6.4 tzlocal==5.2 # from time tzdata>=2021.1 # from time pyserial==3.5 -platformio==6.1.13 # When updating platformio, also update Dockerfile +platformio==6.1.15 # When updating platformio, also update Dockerfile esptool==4.7.0 click==8.1.7 esphome-dashboard==20240412.0 From 5afe0e5ec2a3619a341593884d7fe4ce6e35a791 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 09:42:53 +1200 Subject: [PATCH 180/313] Fix ESPHOME_PROJECT_VERSION_30 (#6731) --- esphome/core/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/core/config.py b/esphome/core/config.py index 2d87796987..80b731b905 100644 --- a/esphome/core/config.py +++ b/esphome/core/config.py @@ -394,7 +394,7 @@ async def to_code(config): if project_conf := config.get(CONF_PROJECT): cg.add_define("ESPHOME_PROJECT_NAME", project_conf[CONF_NAME]) cg.add_define("ESPHOME_PROJECT_VERSION", project_conf[CONF_VERSION]) - cg.add_define("ESPHOME_PROJECT_VERSION_30", project_conf[CONF_VERSION][:30]) + cg.add_define("ESPHOME_PROJECT_VERSION_30", project_conf[CONF_VERSION][:29]) for conf in project_conf.get(CONF_ON_UPDATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) await cg.register_component(trigger, conf) From 1e4d6ee34457f7afc3d7f26fddc72cec893702c1 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 10:02:22 +1200 Subject: [PATCH 181/313] Bump version to 2024.5.0b4 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 6e00c1bbe1..e3d9bfeb64 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b3" +__version__ = "2024.5.0b4" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 921e56f2c693d8dd2facd642967c4f39db32e0d3 Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Tue, 14 May 2024 03:25:24 +0200 Subject: [PATCH 182/313] =?UTF-8?q?Voice-Assistant:=20Start-order=20change?= =?UTF-8?q?=20for=20VAD=20disabled:=20start=20va-pipeline=20when=20microph?= =?UTF-8?q?on=E2=80=A6=20(#6391)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- esphome/components/voice_assistant/voice_assistant.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index e68e00948e..3bd41e1fcf 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -152,7 +152,7 @@ void VoiceAssistant::loop() { } else #endif { - this->set_state_(State::START_PIPELINE, State::START_MICROPHONE); + this->set_state_(State::START_MICROPHONE, State::START_PIPELINE); } } else { this->high_freq_.stop(); @@ -514,7 +514,7 @@ void VoiceAssistant::request_start(bool continuous, bool silence_detection) { } else #endif { - this->set_state_(State::START_PIPELINE, State::START_MICROPHONE); + this->set_state_(State::START_MICROPHONE, State::START_PIPELINE); } } } From 036a666e369009a7d85b4c1614cccdf296e3809f Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 15:38:53 +1200 Subject: [PATCH 183/313] [web_server] Minor python formatting (#6735) --- esphome/components/web_server/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/esphome/components/web_server/__init__.py b/esphome/components/web_server/__init__.py index bbd5bc662e..fa614fb5a6 100644 --- a/esphome/components/web_server/__init__.py +++ b/esphome/components/web_server/__init__.py @@ -35,19 +35,19 @@ WebServer = web_server_ns.class_("WebServer", cg.Component, cg.Controller) def default_url(config): config = config.copy() if config[CONF_VERSION] == 1: - if not (CONF_CSS_URL in config): + if CONF_CSS_URL not in config: config[CONF_CSS_URL] = "https://esphome.io/_static/webserver-v1.min.css" - if not (CONF_JS_URL in config): + if CONF_JS_URL not in config: config[CONF_JS_URL] = "https://esphome.io/_static/webserver-v1.min.js" if config[CONF_VERSION] == 2: - if not (CONF_CSS_URL in config): + if CONF_CSS_URL not in config: config[CONF_CSS_URL] = "" - if not (CONF_JS_URL in config): + if CONF_JS_URL not in config: config[CONF_JS_URL] = "https://oi.esphome.io/v2/www.js" if config[CONF_VERSION] == 3: - if not (CONF_CSS_URL in config): + if CONF_CSS_URL not in config: config[CONF_CSS_URL] = "" - if not (CONF_JS_URL in config): + if CONF_JS_URL not in config: config[CONF_JS_URL] = "https://oi.esphome.io/v3/www.js" return config From 7d791cbdfb028e24bc75e67af81919904ef78301 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 16:22:43 +1200 Subject: [PATCH 184/313] [esp32_ble] Fix compilation error on esp32c6 (#6734) --- esphome/components/esp32_ble/ble.cpp | 9 +++ esphome/components/esp32_ble/const_esp32c6.h | 67 ++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 esphome/components/esp32_ble/const_esp32c6.h diff --git a/esphome/components/esp32_ble/ble.cpp b/esphome/components/esp32_ble/ble.cpp index 3797f3221e..ceb6516a02 100644 --- a/esphome/components/esp32_ble/ble.cpp +++ b/esphome/components/esp32_ble/ble.cpp @@ -1,6 +1,11 @@ #ifdef USE_ESP32 #include "ble.h" + +#ifdef USE_ESP32_VARIANT_ESP32C6 +#include "const_esp32c6.h" +#endif // USE_ESP32_VARIANT_ESP32C6 + #include "esphome/core/application.h" #include "esphome/core/log.h" @@ -114,7 +119,11 @@ bool ESP32BLE::ble_setup_() { if (esp_bt_controller_get_status() != ESP_BT_CONTROLLER_STATUS_ENABLED) { // start bt controller if (esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE) { +#ifdef USE_ESP32_VARIANT_ESP32C6 + esp_bt_controller_config_t cfg = BT_CONTROLLER_CONFIG; +#else esp_bt_controller_config_t cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); +#endif err = esp_bt_controller_init(&cfg); if (err != ESP_OK) { ESP_LOGE(TAG, "esp_bt_controller_init failed: %s", esp_err_to_name(err)); diff --git a/esphome/components/esp32_ble/const_esp32c6.h b/esphome/components/esp32_ble/const_esp32c6.h new file mode 100644 index 0000000000..69f9adcf6b --- /dev/null +++ b/esphome/components/esp32_ble/const_esp32c6.h @@ -0,0 +1,67 @@ +#pragma once + +#ifdef USE_ESP32_VARIANT_ESP32C6 + +#include + +namespace esphome { +namespace esp32_ble { + +static const esp_bt_controller_config_t BT_CONTROLLER_CONFIG = { + .config_version = CONFIG_VERSION, + .ble_ll_resolv_list_size = CONFIG_BT_LE_LL_RESOLV_LIST_SIZE, + .ble_hci_evt_hi_buf_count = DEFAULT_BT_LE_HCI_EVT_HI_BUF_COUNT, + .ble_hci_evt_lo_buf_count = DEFAULT_BT_LE_HCI_EVT_LO_BUF_COUNT, + .ble_ll_sync_list_cnt = DEFAULT_BT_LE_MAX_PERIODIC_ADVERTISER_LIST, + .ble_ll_sync_cnt = DEFAULT_BT_LE_MAX_PERIODIC_SYNCS, + .ble_ll_rsp_dup_list_count = CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT, + .ble_ll_adv_dup_list_count = CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT, + .ble_ll_tx_pwr_dbm = BLE_LL_TX_PWR_DBM_N, + .rtc_freq = RTC_FREQ_N, + .ble_ll_sca = CONFIG_BT_LE_LL_SCA, + .ble_ll_scan_phy_number = BLE_LL_SCAN_PHY_NUMBER_N, + .ble_ll_conn_def_auth_pyld_tmo = BLE_LL_CONN_DEF_AUTH_PYLD_TMO_N, + .ble_ll_jitter_usecs = BLE_LL_JITTER_USECS_N, + .ble_ll_sched_max_adv_pdu_usecs = BLE_LL_SCHED_MAX_ADV_PDU_USECS_N, + .ble_ll_sched_direct_adv_max_usecs = BLE_LL_SCHED_DIRECT_ADV_MAX_USECS_N, + .ble_ll_sched_adv_max_usecs = BLE_LL_SCHED_ADV_MAX_USECS_N, + .ble_scan_rsp_data_max_len = DEFAULT_BT_LE_SCAN_RSP_DATA_MAX_LEN_N, + .ble_ll_cfg_num_hci_cmd_pkts = BLE_LL_CFG_NUM_HCI_CMD_PKTS_N, + .ble_ll_ctrl_proc_timeout_ms = BLE_LL_CTRL_PROC_TIMEOUT_MS_N, + .nimble_max_connections = DEFAULT_BT_LE_MAX_CONNECTIONS, + .ble_whitelist_size = DEFAULT_BT_NIMBLE_WHITELIST_SIZE, // NOLINT + .ble_acl_buf_size = DEFAULT_BT_LE_ACL_BUF_SIZE, + .ble_acl_buf_count = DEFAULT_BT_LE_ACL_BUF_COUNT, + .ble_hci_evt_buf_size = DEFAULT_BT_LE_HCI_EVT_BUF_SIZE, + .ble_multi_adv_instances = DEFAULT_BT_LE_MAX_EXT_ADV_INSTANCES, + .ble_ext_adv_max_size = DEFAULT_BT_LE_EXT_ADV_MAX_SIZE, + .controller_task_stack_size = NIMBLE_LL_STACK_SIZE, + .controller_task_prio = ESP_TASK_BT_CONTROLLER_PRIO, + .controller_run_cpu = 0, + .enable_qa_test = RUN_QA_TEST, + .enable_bqb_test = RUN_BQB_TEST, + .enable_uart_hci = HCI_UART_EN, + .ble_hci_uart_port = DEFAULT_BT_LE_HCI_UART_PORT, + .ble_hci_uart_baud = DEFAULT_BT_LE_HCI_UART_BAUD, + .ble_hci_uart_data_bits = DEFAULT_BT_LE_HCI_UART_DATA_BITS, + .ble_hci_uart_stop_bits = DEFAULT_BT_LE_HCI_UART_STOP_BITS, + .ble_hci_uart_flow_ctrl = DEFAULT_BT_LE_HCI_UART_FLOW_CTRL, + .ble_hci_uart_uart_parity = DEFAULT_BT_LE_HCI_UART_PARITY, + .enable_tx_cca = DEFAULT_BT_LE_TX_CCA_ENABLED, + .cca_rssi_thresh = 256 - DEFAULT_BT_LE_CCA_RSSI_THRESH, + .sleep_en = NIMBLE_SLEEP_ENABLE, + .coex_phy_coded_tx_rx_time_limit = DEFAULT_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF, + .dis_scan_backoff = NIMBLE_DISABLE_SCAN_BACKOFF, + .ble_scan_classify_filter_enable = 1, + .main_xtal_freq = CONFIG_XTAL_FREQ, + .version_num = (uint8_t) efuse_hal_chip_revision(), + .cpu_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ, + .ignore_wl_for_direct_adv = 0, + .enable_pcl = DEFAULT_BT_LE_POWER_CONTROL_ENABLED, + .config_magic = CONFIG_MAGIC, +}; + +} // namespace esp32_ble +} // namespace esphome + +#endif // USE_ESP32_VARIANT_ESP32C6 From 636037cec17bb0abae6def201fd1273bc752cea2 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 14 May 2024 17:01:07 +1200 Subject: [PATCH 185/313] [core] Fix minor formatting issues (#6738) --- esphome/__main__.py | 2 +- esphome/components/animation/__init__.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index 54c1aa112a..daf74eebb0 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -65,7 +65,7 @@ def choose_prompt(options, purpose: str = None): f'Found multiple options{f" for {purpose}" if purpose else ""}, please choose one:' ) for i, (desc, _) in enumerate(options): - safe_print(f" [{i+1}] {desc}") + safe_print(f" [{i + 1}] {desc}") while True: opt = input("(number): ") diff --git a/esphome/components/animation/__init__.py b/esphome/components/animation/__init__.py index 9151d6e56d..a7a955bead 100644 --- a/esphome/components/animation/__init__.py +++ b/esphome/components/animation/__init__.py @@ -157,7 +157,7 @@ async def to_code(config): pixels = list(frame.getdata()) if len(pixels) != height * width: raise core.EsphomeError( - f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height*width})" + f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height * width})" ) for pix, a in pixels: if transparent: @@ -180,7 +180,7 @@ async def to_code(config): pixels = list(frame.getdata()) if len(pixels) != height * width: raise core.EsphomeError( - f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height*width})" + f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height * width})" ) for pix in pixels: data[pos] = pix[0] @@ -203,7 +203,7 @@ async def to_code(config): pixels = list(frame.getdata()) if len(pixels) != height * width: raise core.EsphomeError( - f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height*width})" + f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height * width})" ) for r, g, b, a in pixels: if transparent: @@ -232,7 +232,7 @@ async def to_code(config): pixels = list(frame.getdata()) if len(pixels) != height * width: raise core.EsphomeError( - f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height*width})" + f"Unexpected number of pixels in {path} frame {frameIndex}: ({len(pixels)} != {height * width})" ) for r, g, b, a in pixels: R = r >> 3 From d5eeab81d66f6d053a995f792a22424f7095527d Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 14 May 2024 19:31:03 +1000 Subject: [PATCH 186/313] [config] Improve error reporting (#6736) --- esphome/config.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/esphome/config.py b/esphome/config.py index 4f340225fe..2b231fc402 100644 --- a/esphome/config.py +++ b/esphome/config.py @@ -34,7 +34,7 @@ from esphome.voluptuous_schema import ExtraKeysInvalid from esphome.log import color, Fore import esphome.final_validate as fv import esphome.config_validation as cv -from esphome.types import ConfigType, ConfigPathType, ConfigFragmentType +from esphome.types import ConfigType, ConfigFragmentType _LOGGER = logging.getLogger(__name__) @@ -213,7 +213,7 @@ class Config(OrderedDict, fv.FinalValidateConfig): return doc_range def get_nested_item( - self, path: ConfigPathType, raise_error: bool = False + self, path: ConfigPath, raise_error: bool = False ) -> ConfigFragmentType: data = self for item_index in path: @@ -244,7 +244,7 @@ class Config(OrderedDict, fv.FinalValidateConfig): return path raise KeyError(f"ID {id} not found in configuration") - def get_config_for_path(self, path: ConfigPathType) -> ConfigFragmentType: + def get_config_for_path(self, path: ConfigPath) -> ConfigFragmentType: return self.get_nested_item(path, raise_error=True) @property @@ -885,6 +885,9 @@ def _get_parent_name(path, config): # Sub-item break return domain + # When processing a list, skip back over the index + while len(path) > 1 and isinstance(path[-1], int): + path = path[:-1] return path[-1] @@ -1106,7 +1109,14 @@ def read_config(command_line_substitutions): if errline: errstr += f" {errline}" safe_print(errstr) - safe_print(indent(dump_dict(res, path)[0])) + split_dump = dump_dict(res, path)[0].splitlines() + # find the last error message + i = len(split_dump) - 1 + while i > 10 and "\033[" not in split_dump[i]: + i = i - 1 + # discard lines more than 4 beyond the last error + i = min(i + 4, len(split_dump)) + safe_print(indent("\n".join(split_dump[:i]))) for err in res.errors: safe_print(color(Fore.BOLD_RED, err.msg)) From 6f53607e5ad20594268c2ed7ade53c8f95bcc070 Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Tue, 14 May 2024 11:40:08 +0200 Subject: [PATCH 187/313] Add ANNOUNCING state to media_player. (#6691) --- esphome/components/api/api.proto | 3 +++ esphome/components/api/api_connection.cpp | 9 ++++++++- esphome/components/api/api_pb2.cpp | 18 ++++++++++++++++++ esphome/components/api/api_pb2.h | 2 ++ .../media_player/i2s_audio_media_player.cpp | 17 ++++++++++++++--- .../media_player/i2s_audio_media_player.h | 1 + esphome/components/media_player/__init__.py | 12 ++++++++++++ esphome/components/media_player/automation.h | 1 + .../components/media_player/media_player.cpp | 10 ++++++++++ esphome/components/media_player/media_player.h | 6 +++++- .../voice_assistant/voice_assistant.cpp | 4 ++-- 11 files changed, 76 insertions(+), 7 deletions(-) diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index b8073abc19..774ca7ed9b 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -1147,6 +1147,9 @@ message MediaPlayerCommandRequest { bool has_media_url = 6; string media_url = 7; + + bool has_announcement = 8; + bool announcement = 9; } // ==================== BLUETOOTH ==================== diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index b31212bbdb..2804dba31f 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -1002,7 +1002,11 @@ bool APIConnection::send_media_player_state(media_player::MediaPlayer *media_pla MediaPlayerStateResponse resp{}; resp.key = media_player->get_object_id_hash(); - resp.state = static_cast(media_player->state); + + media_player::MediaPlayerState report_state = media_player->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING + ? media_player::MEDIA_PLAYER_STATE_PLAYING + : media_player->state; + resp.state = static_cast(report_state); resp.volume = media_player->volume; resp.muted = media_player->is_muted(); return this->send_media_player_state_response(resp); @@ -1038,6 +1042,9 @@ void APIConnection::media_player_command(const MediaPlayerCommandRequest &msg) { if (msg.has_media_url) { call.set_media_url(msg.media_url); } + if (msg.has_announcement) { + call.set_announcement(msg.announcement); + } call.perform(); } #endif diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 6ec1870d72..a48087e348 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -5253,6 +5253,14 @@ bool MediaPlayerCommandRequest::decode_varint(uint32_t field_id, ProtoVarInt val this->has_media_url = value.as_bool(); return true; } + case 8: { + this->has_announcement = value.as_bool(); + return true; + } + case 9: { + this->announcement = value.as_bool(); + return true; + } default: return false; } @@ -5289,6 +5297,8 @@ void MediaPlayerCommandRequest::encode(ProtoWriteBuffer buffer) const { buffer.encode_float(5, this->volume); buffer.encode_bool(6, this->has_media_url); buffer.encode_string(7, this->media_url); + buffer.encode_bool(8, this->has_announcement); + buffer.encode_bool(9, this->announcement); } #ifdef HAS_PROTO_MESSAGE_DUMP void MediaPlayerCommandRequest::dump_to(std::string &out) const { @@ -5323,6 +5333,14 @@ void MediaPlayerCommandRequest::dump_to(std::string &out) const { out.append(" media_url: "); out.append("'").append(this->media_url).append("'"); out.append("\n"); + + out.append(" has_announcement: "); + out.append(YESNO(this->has_announcement)); + out.append("\n"); + + out.append(" announcement: "); + out.append(YESNO(this->announcement)); + out.append("\n"); out.append("}"); } #endif diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 14fd95df37..807b150d82 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -1298,6 +1298,8 @@ class MediaPlayerCommandRequest : public ProtoMessage { float volume{0.0f}; bool has_media_url{false}; std::string media_url{}; + bool has_announcement{false}; + bool announcement{false}; void encode(ProtoWriteBuffer buffer) const override; #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp index 6e07983920..1890e27bdf 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp @@ -10,6 +10,11 @@ namespace i2s_audio { static const char *const TAG = "audio"; void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { + media_player::MediaPlayerState play_state = media_player::MEDIA_PLAYER_STATE_PLAYING; + if (call.get_announcement().has_value()) { + play_state = call.get_announcement().value() ? media_player::MEDIA_PLAYER_STATE_ANNOUNCING + : media_player::MEDIA_PLAYER_STATE_PLAYING; + } if (call.get_media_url().has_value()) { this->current_url_ = call.get_media_url(); if (this->i2s_state_ != I2S_STATE_STOPPED && this->audio_ != nullptr) { @@ -17,7 +22,7 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { this->audio_->stopSong(); } this->audio_->connecttohost(this->current_url_.value().c_str()); - this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + this->state = play_state; } else { this->start(); } @@ -35,7 +40,7 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { case media_player::MEDIA_PLAYER_COMMAND_PLAY: if (!this->audio_->isRunning()) this->audio_->pauseResume(); - this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + this->state = play_state; break; case media_player::MEDIA_PLAYER_COMMAND_PAUSE: if (this->audio_->isRunning()) @@ -126,7 +131,9 @@ void I2SAudioMediaPlayer::loop() { void I2SAudioMediaPlayer::play_() { this->audio_->loop(); - if (this->state == media_player::MEDIA_PLAYER_STATE_PLAYING && !this->audio_->isRunning()) { + if ((this->state == media_player::MEDIA_PLAYER_STATE_PLAYING || + this->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING) && + !this->audio_->isRunning()) { this->stop(); } } @@ -164,6 +171,10 @@ void I2SAudioMediaPlayer::start_() { if (this->current_url_.has_value()) { this->audio_->connecttohost(this->current_url_.value().c_str()); this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + if (this->is_announcement_.has_value()) { + this->state = this->is_announcement_.value() ? media_player::MEDIA_PLAYER_STATE_ANNOUNCING + : media_player::MEDIA_PLAYER_STATE_PLAYING; + } this->publish_state(); } } diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h index 092e6de8e8..d7d9b1f74a 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h @@ -78,6 +78,7 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer, HighFrequencyLoopRequester high_freq_; optional current_url_{}; + optional is_announcement_{}; }; } // namespace i2s_audio diff --git a/esphome/components/media_player/__init__.py b/esphome/components/media_player/__init__.py index 5db78150bb..320014e355 100644 --- a/esphome/components/media_player/__init__.py +++ b/esphome/components/media_player/__init__.py @@ -51,12 +51,16 @@ VolumeSetAction = media_player_ns.class_( CONF_ON_PLAY = "on_play" CONF_ON_PAUSE = "on_pause" +CONF_ON_ANNOUNCEMENT = "on_announcement" CONF_MEDIA_URL = "media_url" StateTrigger = media_player_ns.class_("StateTrigger", automation.Trigger.template()) IdleTrigger = media_player_ns.class_("IdleTrigger", automation.Trigger.template()) PlayTrigger = media_player_ns.class_("PlayTrigger", automation.Trigger.template()) PauseTrigger = media_player_ns.class_("PauseTrigger", automation.Trigger.template()) +AnnoucementTrigger = media_player_ns.class_( + "AnnouncementTrigger", automation.Trigger.template() +) IsIdleCondition = media_player_ns.class_("IsIdleCondition", automation.Condition) IsPlayingCondition = media_player_ns.class_("IsPlayingCondition", automation.Condition) @@ -75,6 +79,9 @@ async def setup_media_player_core_(var, config): for conf in config.get(CONF_ON_PAUSE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) + for conf in config.get(CONF_ON_ANNOUNCEMENT, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) async def register_media_player(var, config): @@ -106,6 +113,11 @@ MEDIA_PLAYER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PauseTrigger), } ), + cv.Optional(CONF_ON_ANNOUNCEMENT): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(AnnoucementTrigger), + } + ), } ) diff --git a/esphome/components/media_player/automation.h b/esphome/components/media_player/automation.h index 261e93775c..fc3ce7a764 100644 --- a/esphome/components/media_player/automation.h +++ b/esphome/components/media_player/automation.h @@ -52,6 +52,7 @@ class StateTrigger : public Trigger<> { MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(IdleTrigger, IDLE) MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(PlayTrigger, PLAYING) MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(PauseTrigger, PAUSED) +MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(AnnouncementTrigger, ANNOUNCING) template class IsIdleCondition : public Condition, public Parented { public: diff --git a/esphome/components/media_player/media_player.cpp b/esphome/components/media_player/media_player.cpp index 81cb6ca751..586345ac9f 100644 --- a/esphome/components/media_player/media_player.cpp +++ b/esphome/components/media_player/media_player.cpp @@ -15,6 +15,8 @@ const char *media_player_state_to_string(MediaPlayerState state) { return "PLAYING"; case MEDIA_PLAYER_STATE_PAUSED: return "PAUSED"; + case MEDIA_PLAYER_STATE_ANNOUNCING: + return "ANNOUNCING"; case MEDIA_PLAYER_STATE_NONE: default: return "UNKNOWN"; @@ -68,6 +70,9 @@ void MediaPlayerCall::perform() { if (this->volume_.has_value()) { ESP_LOGD(TAG, " Volume: %.2f", this->volume_.value()); } + if (this->announcement_.has_value()) { + ESP_LOGD(TAG, " Announcement: %s", this->announcement_.value() ? "yes" : "no"); + } this->parent_->control(*this); } @@ -108,6 +113,11 @@ MediaPlayerCall &MediaPlayerCall::set_volume(float volume) { return *this; } +MediaPlayerCall &MediaPlayerCall::set_announcement(bool announce) { + this->announcement_ = announce; + return *this; +} + void MediaPlayer::add_on_state_callback(std::function &&callback) { this->state_callback_.add(std::move(callback)); } diff --git a/esphome/components/media_player/media_player.h b/esphome/components/media_player/media_player.h index 88114d5337..77746e1808 100644 --- a/esphome/components/media_player/media_player.h +++ b/esphome/components/media_player/media_player.h @@ -10,7 +10,8 @@ enum MediaPlayerState : uint8_t { MEDIA_PLAYER_STATE_NONE = 0, MEDIA_PLAYER_STATE_IDLE = 1, MEDIA_PLAYER_STATE_PLAYING = 2, - MEDIA_PLAYER_STATE_PAUSED = 3 + MEDIA_PLAYER_STATE_PAUSED = 3, + MEDIA_PLAYER_STATE_ANNOUNCING = 4 }; const char *media_player_state_to_string(MediaPlayerState state); @@ -51,12 +52,14 @@ class MediaPlayerCall { MediaPlayerCall &set_media_url(const std::string &url); MediaPlayerCall &set_volume(float volume); + MediaPlayerCall &set_announcement(bool announce); void perform(); const optional &get_command() const { return command_; } const optional &get_media_url() const { return media_url_; } const optional &get_volume() const { return volume_; } + const optional &get_announcement() const { return announcement_; } protected: void validate_(); @@ -64,6 +67,7 @@ class MediaPlayerCall { optional command_; optional media_url_; optional volume_; + optional announcement_; }; class MediaPlayer : public EntityBase { diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 3bd41e1fcf..109e52f8eb 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -318,7 +318,7 @@ void VoiceAssistant::loop() { #endif #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { - playing = (this->media_player_->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_PLAYING); + playing = (this->media_player_->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING); } #endif if (playing) { @@ -640,7 +640,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { this->defer([this, url]() { #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { - this->media_player_->make_call().set_media_url(url).perform(); + this->media_player_->make_call().set_media_url(url).set_announcement(true).perform(); } #endif this->tts_end_trigger_->trigger(url); From 128fad57b3f91907ce8cacb3e91dbc96e8fc51a6 Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Tue, 14 May 2024 03:25:24 +0200 Subject: [PATCH 188/313] =?UTF-8?q?Voice-Assistant:=20Start-order=20change?= =?UTF-8?q?=20for=20VAD=20disabled:=20start=20va-pipeline=20when=20microph?= =?UTF-8?q?on=E2=80=A6=20(#6391)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- esphome/components/voice_assistant/voice_assistant.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index e68e00948e..3bd41e1fcf 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -152,7 +152,7 @@ void VoiceAssistant::loop() { } else #endif { - this->set_state_(State::START_PIPELINE, State::START_MICROPHONE); + this->set_state_(State::START_MICROPHONE, State::START_PIPELINE); } } else { this->high_freq_.stop(); @@ -514,7 +514,7 @@ void VoiceAssistant::request_start(bool continuous, bool silence_detection) { } else #endif { - this->set_state_(State::START_PIPELINE, State::START_MICROPHONE); + this->set_state_(State::START_MICROPHONE, State::START_PIPELINE); } } } From 28a09cc0d03d4842961e04d8ade99c3cbc6a5269 Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Tue, 14 May 2024 11:40:08 +0200 Subject: [PATCH 189/313] Add ANNOUNCING state to media_player. (#6691) --- esphome/components/api/api.proto | 3 +++ esphome/components/api/api_connection.cpp | 9 ++++++++- esphome/components/api/api_pb2.cpp | 18 ++++++++++++++++++ esphome/components/api/api_pb2.h | 2 ++ .../media_player/i2s_audio_media_player.cpp | 17 ++++++++++++++--- .../media_player/i2s_audio_media_player.h | 1 + esphome/components/media_player/__init__.py | 12 ++++++++++++ esphome/components/media_player/automation.h | 1 + .../components/media_player/media_player.cpp | 10 ++++++++++ esphome/components/media_player/media_player.h | 6 +++++- .../voice_assistant/voice_assistant.cpp | 4 ++-- 11 files changed, 76 insertions(+), 7 deletions(-) diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index b8073abc19..774ca7ed9b 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -1147,6 +1147,9 @@ message MediaPlayerCommandRequest { bool has_media_url = 6; string media_url = 7; + + bool has_announcement = 8; + bool announcement = 9; } // ==================== BLUETOOTH ==================== diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index b31212bbdb..2804dba31f 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -1002,7 +1002,11 @@ bool APIConnection::send_media_player_state(media_player::MediaPlayer *media_pla MediaPlayerStateResponse resp{}; resp.key = media_player->get_object_id_hash(); - resp.state = static_cast(media_player->state); + + media_player::MediaPlayerState report_state = media_player->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING + ? media_player::MEDIA_PLAYER_STATE_PLAYING + : media_player->state; + resp.state = static_cast(report_state); resp.volume = media_player->volume; resp.muted = media_player->is_muted(); return this->send_media_player_state_response(resp); @@ -1038,6 +1042,9 @@ void APIConnection::media_player_command(const MediaPlayerCommandRequest &msg) { if (msg.has_media_url) { call.set_media_url(msg.media_url); } + if (msg.has_announcement) { + call.set_announcement(msg.announcement); + } call.perform(); } #endif diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index 6ec1870d72..a48087e348 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -5253,6 +5253,14 @@ bool MediaPlayerCommandRequest::decode_varint(uint32_t field_id, ProtoVarInt val this->has_media_url = value.as_bool(); return true; } + case 8: { + this->has_announcement = value.as_bool(); + return true; + } + case 9: { + this->announcement = value.as_bool(); + return true; + } default: return false; } @@ -5289,6 +5297,8 @@ void MediaPlayerCommandRequest::encode(ProtoWriteBuffer buffer) const { buffer.encode_float(5, this->volume); buffer.encode_bool(6, this->has_media_url); buffer.encode_string(7, this->media_url); + buffer.encode_bool(8, this->has_announcement); + buffer.encode_bool(9, this->announcement); } #ifdef HAS_PROTO_MESSAGE_DUMP void MediaPlayerCommandRequest::dump_to(std::string &out) const { @@ -5323,6 +5333,14 @@ void MediaPlayerCommandRequest::dump_to(std::string &out) const { out.append(" media_url: "); out.append("'").append(this->media_url).append("'"); out.append("\n"); + + out.append(" has_announcement: "); + out.append(YESNO(this->has_announcement)); + out.append("\n"); + + out.append(" announcement: "); + out.append(YESNO(this->announcement)); + out.append("\n"); out.append("}"); } #endif diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 14fd95df37..807b150d82 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -1298,6 +1298,8 @@ class MediaPlayerCommandRequest : public ProtoMessage { float volume{0.0f}; bool has_media_url{false}; std::string media_url{}; + bool has_announcement{false}; + bool announcement{false}; void encode(ProtoWriteBuffer buffer) const override; #ifdef HAS_PROTO_MESSAGE_DUMP void dump_to(std::string &out) const override; diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp index 6e07983920..1890e27bdf 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp @@ -10,6 +10,11 @@ namespace i2s_audio { static const char *const TAG = "audio"; void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { + media_player::MediaPlayerState play_state = media_player::MEDIA_PLAYER_STATE_PLAYING; + if (call.get_announcement().has_value()) { + play_state = call.get_announcement().value() ? media_player::MEDIA_PLAYER_STATE_ANNOUNCING + : media_player::MEDIA_PLAYER_STATE_PLAYING; + } if (call.get_media_url().has_value()) { this->current_url_ = call.get_media_url(); if (this->i2s_state_ != I2S_STATE_STOPPED && this->audio_ != nullptr) { @@ -17,7 +22,7 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { this->audio_->stopSong(); } this->audio_->connecttohost(this->current_url_.value().c_str()); - this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + this->state = play_state; } else { this->start(); } @@ -35,7 +40,7 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { case media_player::MEDIA_PLAYER_COMMAND_PLAY: if (!this->audio_->isRunning()) this->audio_->pauseResume(); - this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + this->state = play_state; break; case media_player::MEDIA_PLAYER_COMMAND_PAUSE: if (this->audio_->isRunning()) @@ -126,7 +131,9 @@ void I2SAudioMediaPlayer::loop() { void I2SAudioMediaPlayer::play_() { this->audio_->loop(); - if (this->state == media_player::MEDIA_PLAYER_STATE_PLAYING && !this->audio_->isRunning()) { + if ((this->state == media_player::MEDIA_PLAYER_STATE_PLAYING || + this->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING) && + !this->audio_->isRunning()) { this->stop(); } } @@ -164,6 +171,10 @@ void I2SAudioMediaPlayer::start_() { if (this->current_url_.has_value()) { this->audio_->connecttohost(this->current_url_.value().c_str()); this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; + if (this->is_announcement_.has_value()) { + this->state = this->is_announcement_.value() ? media_player::MEDIA_PLAYER_STATE_ANNOUNCING + : media_player::MEDIA_PLAYER_STATE_PLAYING; + } this->publish_state(); } } diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h index 092e6de8e8..d7d9b1f74a 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h @@ -78,6 +78,7 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer, HighFrequencyLoopRequester high_freq_; optional current_url_{}; + optional is_announcement_{}; }; } // namespace i2s_audio diff --git a/esphome/components/media_player/__init__.py b/esphome/components/media_player/__init__.py index 5db78150bb..320014e355 100644 --- a/esphome/components/media_player/__init__.py +++ b/esphome/components/media_player/__init__.py @@ -51,12 +51,16 @@ VolumeSetAction = media_player_ns.class_( CONF_ON_PLAY = "on_play" CONF_ON_PAUSE = "on_pause" +CONF_ON_ANNOUNCEMENT = "on_announcement" CONF_MEDIA_URL = "media_url" StateTrigger = media_player_ns.class_("StateTrigger", automation.Trigger.template()) IdleTrigger = media_player_ns.class_("IdleTrigger", automation.Trigger.template()) PlayTrigger = media_player_ns.class_("PlayTrigger", automation.Trigger.template()) PauseTrigger = media_player_ns.class_("PauseTrigger", automation.Trigger.template()) +AnnoucementTrigger = media_player_ns.class_( + "AnnouncementTrigger", automation.Trigger.template() +) IsIdleCondition = media_player_ns.class_("IsIdleCondition", automation.Condition) IsPlayingCondition = media_player_ns.class_("IsPlayingCondition", automation.Condition) @@ -75,6 +79,9 @@ async def setup_media_player_core_(var, config): for conf in config.get(CONF_ON_PAUSE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) + for conf in config.get(CONF_ON_ANNOUNCEMENT, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) async def register_media_player(var, config): @@ -106,6 +113,11 @@ MEDIA_PLAYER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PauseTrigger), } ), + cv.Optional(CONF_ON_ANNOUNCEMENT): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(AnnoucementTrigger), + } + ), } ) diff --git a/esphome/components/media_player/automation.h b/esphome/components/media_player/automation.h index 261e93775c..fc3ce7a764 100644 --- a/esphome/components/media_player/automation.h +++ b/esphome/components/media_player/automation.h @@ -52,6 +52,7 @@ class StateTrigger : public Trigger<> { MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(IdleTrigger, IDLE) MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(PlayTrigger, PLAYING) MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(PauseTrigger, PAUSED) +MEDIA_PLAYER_SIMPLE_STATE_TRIGGER(AnnouncementTrigger, ANNOUNCING) template class IsIdleCondition : public Condition, public Parented { public: diff --git a/esphome/components/media_player/media_player.cpp b/esphome/components/media_player/media_player.cpp index 81cb6ca751..586345ac9f 100644 --- a/esphome/components/media_player/media_player.cpp +++ b/esphome/components/media_player/media_player.cpp @@ -15,6 +15,8 @@ const char *media_player_state_to_string(MediaPlayerState state) { return "PLAYING"; case MEDIA_PLAYER_STATE_PAUSED: return "PAUSED"; + case MEDIA_PLAYER_STATE_ANNOUNCING: + return "ANNOUNCING"; case MEDIA_PLAYER_STATE_NONE: default: return "UNKNOWN"; @@ -68,6 +70,9 @@ void MediaPlayerCall::perform() { if (this->volume_.has_value()) { ESP_LOGD(TAG, " Volume: %.2f", this->volume_.value()); } + if (this->announcement_.has_value()) { + ESP_LOGD(TAG, " Announcement: %s", this->announcement_.value() ? "yes" : "no"); + } this->parent_->control(*this); } @@ -108,6 +113,11 @@ MediaPlayerCall &MediaPlayerCall::set_volume(float volume) { return *this; } +MediaPlayerCall &MediaPlayerCall::set_announcement(bool announce) { + this->announcement_ = announce; + return *this; +} + void MediaPlayer::add_on_state_callback(std::function &&callback) { this->state_callback_.add(std::move(callback)); } diff --git a/esphome/components/media_player/media_player.h b/esphome/components/media_player/media_player.h index 88114d5337..77746e1808 100644 --- a/esphome/components/media_player/media_player.h +++ b/esphome/components/media_player/media_player.h @@ -10,7 +10,8 @@ enum MediaPlayerState : uint8_t { MEDIA_PLAYER_STATE_NONE = 0, MEDIA_PLAYER_STATE_IDLE = 1, MEDIA_PLAYER_STATE_PLAYING = 2, - MEDIA_PLAYER_STATE_PAUSED = 3 + MEDIA_PLAYER_STATE_PAUSED = 3, + MEDIA_PLAYER_STATE_ANNOUNCING = 4 }; const char *media_player_state_to_string(MediaPlayerState state); @@ -51,12 +52,14 @@ class MediaPlayerCall { MediaPlayerCall &set_media_url(const std::string &url); MediaPlayerCall &set_volume(float volume); + MediaPlayerCall &set_announcement(bool announce); void perform(); const optional &get_command() const { return command_; } const optional &get_media_url() const { return media_url_; } const optional &get_volume() const { return volume_; } + const optional &get_announcement() const { return announcement_; } protected: void validate_(); @@ -64,6 +67,7 @@ class MediaPlayerCall { optional command_; optional media_url_; optional volume_; + optional announcement_; }; class MediaPlayer : public EntityBase { diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 3bd41e1fcf..109e52f8eb 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -318,7 +318,7 @@ void VoiceAssistant::loop() { #endif #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { - playing = (this->media_player_->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_PLAYING); + playing = (this->media_player_->state == media_player::MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING); } #endif if (playing) { @@ -640,7 +640,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { this->defer([this, url]() { #ifdef USE_MEDIA_PLAYER if (this->media_player_ != nullptr) { - this->media_player_->make_call().set_media_url(url).perform(); + this->media_player_->make_call().set_media_url(url).set_announcement(true).perform(); } #endif this->tts_end_trigger_->trigger(url); From db4aa0b679b3b2324d715a1d2d16423661ed3057 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 15 May 2024 07:37:22 +1200 Subject: [PATCH 190/313] Bump version to 2024.5.0b5 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index e3d9bfeb64..2e5e9cc9de 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b4" +__version__ = "2024.5.0b5" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 9a6e90af54f0704d8150905e01b1e2d105a28dc7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 15 May 2024 12:51:01 +1200 Subject: [PATCH 191/313] [adc] Fix 11db deprecation warning (#6749) --- esphome/components/adc/__init__.py | 14 ++++++++++++- esphome/components/adc/adc_sensor.cpp | 30 +++++++++++++-------------- esphome/components/adc/adc_sensor.h | 23 ++++++++++++++++---- esphome/components/adc/sensor.py | 18 ++++++++++++++-- 4 files changed, 63 insertions(+), 22 deletions(-) diff --git a/esphome/components/adc/__init__.py b/esphome/components/adc/__init__.py index 87d769fec2..11b0ba2389 100644 --- a/esphome/components/adc/__init__.py +++ b/esphome/components/adc/__init__.py @@ -18,11 +18,23 @@ from esphome.components.esp32.const import ( CODEOWNERS = ["@esphome/core"] +adc_ns = cg.esphome_ns.namespace("adc") + + +""" +From the below patch versions (and 5.2+) ADC_ATTEN_DB_11 is deprecated and replaced with ADC_ATTEN_DB_12. +4.4.7 +5.0.5 +5.1.3 +5.2+ +""" + ATTENUATION_MODES = { "0db": cg.global_ns.ADC_ATTEN_DB_0, "2.5db": cg.global_ns.ADC_ATTEN_DB_2_5, "6db": cg.global_ns.ADC_ATTEN_DB_6, - "11db": cg.global_ns.ADC_ATTEN_DB_11, + "11db": adc_ns.ADC_ATTEN_DB_12_COMPAT, + "12db": adc_ns.ADC_ATTEN_DB_12_COMPAT, "auto": "auto", } diff --git a/esphome/components/adc/adc_sensor.cpp b/esphome/components/adc/adc_sensor.cpp index a9ac5a5cfe..1a76bdb264 100644 --- a/esphome/components/adc/adc_sensor.cpp +++ b/esphome/components/adc/adc_sensor.cpp @@ -62,7 +62,7 @@ extern "C" } // load characteristics for each attenuation - for (int32_t i = 0; i <= ADC_ATTEN_DB_11; i++) { + for (int32_t i = 0; i <= ADC_ATTEN_DB_12_COMPAT; i++) { auto adc_unit = channel1_ != ADC1_CHANNEL_MAX ? ADC_UNIT_1 : ADC_UNIT_2; auto cal_value = esp_adc_cal_characterize(adc_unit, (adc_atten_t) i, ADC_WIDTH_MAX_SOC_BITS, 1100, // default vref @@ -118,8 +118,8 @@ void ADCSensor::dump_config() { case ADC_ATTEN_DB_6: ESP_LOGCONFIG(TAG, " Attenuation: 6db"); break; - case ADC_ATTEN_DB_11: - ESP_LOGCONFIG(TAG, " Attenuation: 11db"); + case ADC_ATTEN_DB_12_COMPAT: + ESP_LOGCONFIG(TAG, " Attenuation: 12db"); break; default: // This is to satisfy the unused ADC_ATTEN_MAX break; @@ -183,12 +183,12 @@ float ADCSensor::sample() { return mv / 1000.0f; } - int raw11 = ADC_MAX, raw6 = ADC_MAX, raw2 = ADC_MAX, raw0 = ADC_MAX; + int raw12 = ADC_MAX, raw6 = ADC_MAX, raw2 = ADC_MAX, raw0 = ADC_MAX; if (channel1_ != ADC1_CHANNEL_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_11); - raw11 = adc1_get_raw(channel1_); - if (raw11 < ADC_MAX) { + adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_12_COMPAT); + raw12 = adc1_get_raw(channel1_); + if (raw12 < ADC_MAX) { adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_6); raw6 = adc1_get_raw(channel1_); if (raw6 < ADC_MAX) { @@ -201,9 +201,9 @@ float ADCSensor::sample() { } } } else if (channel2_ != ADC2_CHANNEL_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_11); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw11); - if (raw11 < ADC_MAX) { + adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_12_COMPAT); + adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw12); + if (raw12 < ADC_MAX) { adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_6); adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw6); if (raw6 < ADC_MAX) { @@ -217,25 +217,25 @@ float ADCSensor::sample() { } } - if (raw0 == -1 || raw2 == -1 || raw6 == -1 || raw11 == -1) { + if (raw0 == -1 || raw2 == -1 || raw6 == -1 || raw12 == -1) { return NAN; } - uint32_t mv11 = esp_adc_cal_raw_to_voltage(raw11, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_11]); + uint32_t mv12 = esp_adc_cal_raw_to_voltage(raw12, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_12_COMPAT]); uint32_t mv6 = esp_adc_cal_raw_to_voltage(raw6, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_6]); uint32_t mv2 = esp_adc_cal_raw_to_voltage(raw2, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_2_5]); uint32_t mv0 = esp_adc_cal_raw_to_voltage(raw0, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_0]); // Contribution of each value, in range 0-2048 (12 bit ADC) or 0-4096 (13 bit ADC) - uint32_t c11 = std::min(raw11, ADC_HALF); + uint32_t c12 = std::min(raw12, ADC_HALF); uint32_t c6 = ADC_HALF - std::abs(raw6 - ADC_HALF); uint32_t c2 = ADC_HALF - std::abs(raw2 - ADC_HALF); uint32_t c0 = std::min(ADC_MAX - raw0, ADC_HALF); // max theoretical csum value is 4096*4 = 16384 - uint32_t csum = c11 + c6 + c2 + c0; + uint32_t csum = c12 + c6 + c2 + c0; // each mv is max 3900; so max value is 3900*4096*4, fits in unsigned32 - uint32_t mv_scaled = (mv11 * c11) + (mv6 * c6) + (mv2 * c2) + (mv0 * c0); + uint32_t mv_scaled = (mv12 * c12) + (mv6 * c6) + (mv2 * c2) + (mv0 * c0); return mv_scaled / (float) (csum * 1000U); } #endif // USE_ESP32 diff --git a/esphome/components/adc/adc_sensor.h b/esphome/components/adc/adc_sensor.h index b1fdcd5d29..d99c4bc75b 100644 --- a/esphome/components/adc/adc_sensor.h +++ b/esphome/components/adc/adc_sensor.h @@ -1,19 +1,34 @@ #pragma once -#include "esphome/core/component.h" -#include "esphome/core/hal.h" -#include "esphome/core/defines.h" #include "esphome/components/sensor/sensor.h" #include "esphome/components/voltage_sampler/voltage_sampler.h" +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/hal.h" #ifdef USE_ESP32 -#include "driver/adc.h" #include +#include "driver/adc.h" #endif namespace esphome { namespace adc { +#ifdef USE_ESP32 +// clang-format off +#if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 7)) || \ + (ESP_IDF_VERSION_MAJOR == 5 && \ + ((ESP_IDF_VERSION_MINOR == 0 && ESP_IDF_VERSION_PATCH >= 5) || \ + (ESP_IDF_VERSION_MINOR == 1 && ESP_IDF_VERSION_PATCH >= 3) || \ + (ESP_IDF_VERSION_MINOR >= 2)) \ + ) +// clang-format on +static const adc_atten_t ADC_ATTEN_DB_12_COMPAT = ADC_ATTEN_DB_12; +#else +static const adc_atten_t ADC_ATTEN_DB_12_COMPAT = ADC_ATTEN_DB_11; +#endif +#endif // USE_ESP32 + class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage_sampler::VoltageSampler { public: #ifdef USE_ESP32 diff --git a/esphome/components/adc/sensor.py b/esphome/components/adc/sensor.py index c1ae22214d..4cf3d52802 100644 --- a/esphome/components/adc/sensor.py +++ b/esphome/components/adc/sensor.py @@ -1,3 +1,5 @@ +import logging + import esphome.codegen as cg import esphome.config_validation as cv import esphome.final_validate as fv @@ -19,16 +21,29 @@ from . import ( ATTENUATION_MODES, ESP32_VARIANT_ADC1_PIN_TO_CHANNEL, ESP32_VARIANT_ADC2_PIN_TO_CHANNEL, + adc_ns, validate_adc_pin, ) +_LOGGER = logging.getLogger(__name__) + AUTO_LOAD = ["voltage_sampler"] +_attenuation = cv.enum(ATTENUATION_MODES, lower=True) + + def validate_config(config): if config[CONF_RAW] and config.get(CONF_ATTENUATION, None) == "auto": raise cv.Invalid("Automatic attenuation cannot be used when raw output is set") + if config.get(CONF_ATTENUATION) == "11db": + _LOGGER.warning( + "`attenuation: 11db` is deprecated, use `attenuation: 12db` instead" + ) + # Alter value here so `config` command prints the recommended change + config[CONF_ATTENUATION] = _attenuation("12db") + return config @@ -47,7 +62,6 @@ def final_validate_config(config): return config -adc_ns = cg.esphome_ns.namespace("adc") ADCSensor = adc_ns.class_( "ADCSensor", sensor.Sensor, cg.PollingComponent, voltage_sampler.VoltageSampler ) @@ -65,7 +79,7 @@ CONFIG_SCHEMA = cv.All( cv.Required(CONF_PIN): validate_adc_pin, cv.Optional(CONF_RAW, default=False): cv.boolean, cv.SplitDefault(CONF_ATTENUATION, esp32="0db"): cv.All( - cv.only_on_esp32, cv.enum(ATTENUATION_MODES, lower=True) + cv.only_on_esp32, _attenuation ), } ) From ebc3f0fe1710ef3e11cc78cdd8f73bc5b319ae7c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 15 May 2024 12:51:01 +1200 Subject: [PATCH 192/313] [adc] Fix 11db deprecation warning (#6749) --- esphome/components/adc/__init__.py | 14 ++++++++++++- esphome/components/adc/adc_sensor.cpp | 30 +++++++++++++-------------- esphome/components/adc/adc_sensor.h | 23 ++++++++++++++++---- esphome/components/adc/sensor.py | 18 ++++++++++++++-- 4 files changed, 63 insertions(+), 22 deletions(-) diff --git a/esphome/components/adc/__init__.py b/esphome/components/adc/__init__.py index 87d769fec2..11b0ba2389 100644 --- a/esphome/components/adc/__init__.py +++ b/esphome/components/adc/__init__.py @@ -18,11 +18,23 @@ from esphome.components.esp32.const import ( CODEOWNERS = ["@esphome/core"] +adc_ns = cg.esphome_ns.namespace("adc") + + +""" +From the below patch versions (and 5.2+) ADC_ATTEN_DB_11 is deprecated and replaced with ADC_ATTEN_DB_12. +4.4.7 +5.0.5 +5.1.3 +5.2+ +""" + ATTENUATION_MODES = { "0db": cg.global_ns.ADC_ATTEN_DB_0, "2.5db": cg.global_ns.ADC_ATTEN_DB_2_5, "6db": cg.global_ns.ADC_ATTEN_DB_6, - "11db": cg.global_ns.ADC_ATTEN_DB_11, + "11db": adc_ns.ADC_ATTEN_DB_12_COMPAT, + "12db": adc_ns.ADC_ATTEN_DB_12_COMPAT, "auto": "auto", } diff --git a/esphome/components/adc/adc_sensor.cpp b/esphome/components/adc/adc_sensor.cpp index a9ac5a5cfe..1a76bdb264 100644 --- a/esphome/components/adc/adc_sensor.cpp +++ b/esphome/components/adc/adc_sensor.cpp @@ -62,7 +62,7 @@ extern "C" } // load characteristics for each attenuation - for (int32_t i = 0; i <= ADC_ATTEN_DB_11; i++) { + for (int32_t i = 0; i <= ADC_ATTEN_DB_12_COMPAT; i++) { auto adc_unit = channel1_ != ADC1_CHANNEL_MAX ? ADC_UNIT_1 : ADC_UNIT_2; auto cal_value = esp_adc_cal_characterize(adc_unit, (adc_atten_t) i, ADC_WIDTH_MAX_SOC_BITS, 1100, // default vref @@ -118,8 +118,8 @@ void ADCSensor::dump_config() { case ADC_ATTEN_DB_6: ESP_LOGCONFIG(TAG, " Attenuation: 6db"); break; - case ADC_ATTEN_DB_11: - ESP_LOGCONFIG(TAG, " Attenuation: 11db"); + case ADC_ATTEN_DB_12_COMPAT: + ESP_LOGCONFIG(TAG, " Attenuation: 12db"); break; default: // This is to satisfy the unused ADC_ATTEN_MAX break; @@ -183,12 +183,12 @@ float ADCSensor::sample() { return mv / 1000.0f; } - int raw11 = ADC_MAX, raw6 = ADC_MAX, raw2 = ADC_MAX, raw0 = ADC_MAX; + int raw12 = ADC_MAX, raw6 = ADC_MAX, raw2 = ADC_MAX, raw0 = ADC_MAX; if (channel1_ != ADC1_CHANNEL_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_11); - raw11 = adc1_get_raw(channel1_); - if (raw11 < ADC_MAX) { + adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_12_COMPAT); + raw12 = adc1_get_raw(channel1_); + if (raw12 < ADC_MAX) { adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_6); raw6 = adc1_get_raw(channel1_); if (raw6 < ADC_MAX) { @@ -201,9 +201,9 @@ float ADCSensor::sample() { } } } else if (channel2_ != ADC2_CHANNEL_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_11); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw11); - if (raw11 < ADC_MAX) { + adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_12_COMPAT); + adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw12); + if (raw12 < ADC_MAX) { adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_6); adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw6); if (raw6 < ADC_MAX) { @@ -217,25 +217,25 @@ float ADCSensor::sample() { } } - if (raw0 == -1 || raw2 == -1 || raw6 == -1 || raw11 == -1) { + if (raw0 == -1 || raw2 == -1 || raw6 == -1 || raw12 == -1) { return NAN; } - uint32_t mv11 = esp_adc_cal_raw_to_voltage(raw11, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_11]); + uint32_t mv12 = esp_adc_cal_raw_to_voltage(raw12, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_12_COMPAT]); uint32_t mv6 = esp_adc_cal_raw_to_voltage(raw6, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_6]); uint32_t mv2 = esp_adc_cal_raw_to_voltage(raw2, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_2_5]); uint32_t mv0 = esp_adc_cal_raw_to_voltage(raw0, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_0]); // Contribution of each value, in range 0-2048 (12 bit ADC) or 0-4096 (13 bit ADC) - uint32_t c11 = std::min(raw11, ADC_HALF); + uint32_t c12 = std::min(raw12, ADC_HALF); uint32_t c6 = ADC_HALF - std::abs(raw6 - ADC_HALF); uint32_t c2 = ADC_HALF - std::abs(raw2 - ADC_HALF); uint32_t c0 = std::min(ADC_MAX - raw0, ADC_HALF); // max theoretical csum value is 4096*4 = 16384 - uint32_t csum = c11 + c6 + c2 + c0; + uint32_t csum = c12 + c6 + c2 + c0; // each mv is max 3900; so max value is 3900*4096*4, fits in unsigned32 - uint32_t mv_scaled = (mv11 * c11) + (mv6 * c6) + (mv2 * c2) + (mv0 * c0); + uint32_t mv_scaled = (mv12 * c12) + (mv6 * c6) + (mv2 * c2) + (mv0 * c0); return mv_scaled / (float) (csum * 1000U); } #endif // USE_ESP32 diff --git a/esphome/components/adc/adc_sensor.h b/esphome/components/adc/adc_sensor.h index b1fdcd5d29..d99c4bc75b 100644 --- a/esphome/components/adc/adc_sensor.h +++ b/esphome/components/adc/adc_sensor.h @@ -1,19 +1,34 @@ #pragma once -#include "esphome/core/component.h" -#include "esphome/core/hal.h" -#include "esphome/core/defines.h" #include "esphome/components/sensor/sensor.h" #include "esphome/components/voltage_sampler/voltage_sampler.h" +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/hal.h" #ifdef USE_ESP32 -#include "driver/adc.h" #include +#include "driver/adc.h" #endif namespace esphome { namespace adc { +#ifdef USE_ESP32 +// clang-format off +#if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 7)) || \ + (ESP_IDF_VERSION_MAJOR == 5 && \ + ((ESP_IDF_VERSION_MINOR == 0 && ESP_IDF_VERSION_PATCH >= 5) || \ + (ESP_IDF_VERSION_MINOR == 1 && ESP_IDF_VERSION_PATCH >= 3) || \ + (ESP_IDF_VERSION_MINOR >= 2)) \ + ) +// clang-format on +static const adc_atten_t ADC_ATTEN_DB_12_COMPAT = ADC_ATTEN_DB_12; +#else +static const adc_atten_t ADC_ATTEN_DB_12_COMPAT = ADC_ATTEN_DB_11; +#endif +#endif // USE_ESP32 + class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage_sampler::VoltageSampler { public: #ifdef USE_ESP32 diff --git a/esphome/components/adc/sensor.py b/esphome/components/adc/sensor.py index c1ae22214d..4cf3d52802 100644 --- a/esphome/components/adc/sensor.py +++ b/esphome/components/adc/sensor.py @@ -1,3 +1,5 @@ +import logging + import esphome.codegen as cg import esphome.config_validation as cv import esphome.final_validate as fv @@ -19,16 +21,29 @@ from . import ( ATTENUATION_MODES, ESP32_VARIANT_ADC1_PIN_TO_CHANNEL, ESP32_VARIANT_ADC2_PIN_TO_CHANNEL, + adc_ns, validate_adc_pin, ) +_LOGGER = logging.getLogger(__name__) + AUTO_LOAD = ["voltage_sampler"] +_attenuation = cv.enum(ATTENUATION_MODES, lower=True) + + def validate_config(config): if config[CONF_RAW] and config.get(CONF_ATTENUATION, None) == "auto": raise cv.Invalid("Automatic attenuation cannot be used when raw output is set") + if config.get(CONF_ATTENUATION) == "11db": + _LOGGER.warning( + "`attenuation: 11db` is deprecated, use `attenuation: 12db` instead" + ) + # Alter value here so `config` command prints the recommended change + config[CONF_ATTENUATION] = _attenuation("12db") + return config @@ -47,7 +62,6 @@ def final_validate_config(config): return config -adc_ns = cg.esphome_ns.namespace("adc") ADCSensor = adc_ns.class_( "ADCSensor", sensor.Sensor, cg.PollingComponent, voltage_sampler.VoltageSampler ) @@ -65,7 +79,7 @@ CONFIG_SCHEMA = cv.All( cv.Required(CONF_PIN): validate_adc_pin, cv.Optional(CONF_RAW, default=False): cv.boolean, cv.SplitDefault(CONF_ATTENUATION, esp32="0db"): cv.All( - cv.only_on_esp32, cv.enum(ATTENUATION_MODES, lower=True) + cv.only_on_esp32, _attenuation ), } ) From 5d2e3a7d8d803d03b3afda680e4fcb11b8e5ca2a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 15 May 2024 13:14:15 +1200 Subject: [PATCH 193/313] Bump version to 2024.5.0b6 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 2e5e9cc9de..786f988f91 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b5" +__version__ = "2024.5.0b6" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 0d3adc8f0c12d5900f63fc36df5dd72c85428229 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 15 May 2024 17:08:43 +1200 Subject: [PATCH 194/313] Bump version to 2024.5.0 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 786f988f91..9871ea704f 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0b6" +__version__ = "2024.5.0" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 891f56b421456dbc9d523945f6ebf97b1975d0d6 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 15 May 2024 00:14:19 -0500 Subject: [PATCH 195/313] [tests] ``test2.yaml`` has become too large (#6750) --- tests/test2.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test2.yaml b/tests/test2.yaml index 2fdef72c08..970076e78b 100644 --- a/tests/test2.yaml +++ b/tests/test2.yaml @@ -1,10 +1,12 @@ --- esphome: name: $devicename - platform: ESP32 - board: nodemcu-32s build_path: build/test2 +esp32: + board: esp32dev + flash_size: 8MB + globals: - id: my_global_string type: std::string From 9f1ba00b7cc67c03667b6ac23707e9787238fde9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 May 2024 17:16:04 +1200 Subject: [PATCH 196/313] Bump esphome-dashboard from 20240412.0 to 20240429.1 (#6743) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 698ae56447..05e46ca31e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ pyserial==3.5 platformio==6.1.15 # When updating platformio, also update Dockerfile esptool==4.7.0 click==8.1.7 -esphome-dashboard==20240412.0 +esphome-dashboard==20240429.1 aioesphomeapi==24.3.0 zeroconf==0.132.2 python-magic==0.4.27 From 773951d85eba1031eaca56c1d340f20f8ad59009 Mon Sep 17 00:00:00 2001 From: Alex Boyd Date: Wed, 15 May 2024 17:31:08 -0600 Subject: [PATCH 197/313] BedJet: expose the outlet temperature on the climate and as a sensor (#6633) --- CODEOWNERS | 1 + esphome/components/bedjet/__init__.py | 2 +- esphome/components/bedjet/bedjet_codec.cpp | 6 ++ esphome/components/bedjet/bedjet_codec.h | 3 + esphome/components/bedjet/bedjet_const.h | 8 +++ esphome/components/bedjet/climate/__init__.py | 10 ++++ .../bedjet/climate/bedjet_climate.cpp | 15 +++-- .../bedjet/climate/bedjet_climate.h | 3 + esphome/components/bedjet/sensor/__init__.py | 55 +++++++++++++++++++ .../bedjet/sensor/bedjet_sensor.cpp | 34 ++++++++++++ .../components/bedjet/sensor/bedjet_sensor.h | 32 +++++++++++ tests/components/bedjet/common.yaml | 8 +++ 12 files changed, 168 insertions(+), 9 deletions(-) create mode 100644 esphome/components/bedjet/sensor/__init__.py create mode 100644 esphome/components/bedjet/sensor/bedjet_sensor.cpp create mode 100644 esphome/components/bedjet/sensor/bedjet_sensor.h diff --git a/CODEOWNERS b/CODEOWNERS index 88f875f368..a661eba9b3 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -51,6 +51,7 @@ esphome/components/bang_bang/* @OttoWinter esphome/components/bedjet/* @jhansche esphome/components/bedjet/climate/* @jhansche esphome/components/bedjet/fan/* @jhansche +esphome/components/bedjet/sensor/* @javawizard @jhansche esphome/components/bh1750/* @OttoWinter esphome/components/binary_sensor/* @esphome/core esphome/components/bk72xx/* @kuba2k2 diff --git a/esphome/components/bedjet/__init__.py b/esphome/components/bedjet/__init__.py index 395a5f25e4..a4b8a50eab 100644 --- a/esphome/components/bedjet/__init__.py +++ b/esphome/components/bedjet/__init__.py @@ -31,7 +31,7 @@ CONFIG_SCHEMA = ( BEDJET_CLIENT_SCHEMA = cv.Schema( { - cv.Required(CONF_BEDJET_ID): cv.use_id(BedJetHub), + cv.GenerateID(CONF_BEDJET_ID): cv.use_id(BedJetHub), } ) diff --git a/esphome/components/bedjet/bedjet_codec.cpp b/esphome/components/bedjet/bedjet_codec.cpp index 735393ffcb..7e90621235 100644 --- a/esphome/components/bedjet/bedjet_codec.cpp +++ b/esphome/components/bedjet/bedjet_codec.cpp @@ -157,5 +157,11 @@ bool BedjetCodec::compare(const uint8_t *data, uint16_t length) { return explicit_fields_changed; } +/// Converts a BedJet temp step into degrees Celsius. +float bedjet_temp_to_c(uint8_t temp) { + // BedJet temp is "C*2"; to get C, divide by 2. + return temp / 2.0f; +} + } // namespace bedjet } // namespace esphome diff --git a/esphome/components/bedjet/bedjet_codec.h b/esphome/components/bedjet/bedjet_codec.h index 3a41313ada..527e757d7f 100644 --- a/esphome/components/bedjet/bedjet_codec.h +++ b/esphome/components/bedjet/bedjet_codec.h @@ -187,5 +187,8 @@ class BedjetCodec { BedjetStatusPacket buf_; }; +/// Converts a BedJet temp step into degrees Celsius. +float bedjet_temp_to_c(uint8_t temp); + } // namespace bedjet } // namespace esphome diff --git a/esphome/components/bedjet/bedjet_const.h b/esphome/components/bedjet/bedjet_const.h index 27a75b2671..7cac1b61ff 100644 --- a/esphome/components/bedjet/bedjet_const.h +++ b/esphome/components/bedjet/bedjet_const.h @@ -40,6 +40,14 @@ enum BedjetHeatMode { HEAT_MODE_EXTENDED, }; +// Which temperature to use as the climate entity's current temperature reading +enum BedjetTemperatureSource { + // Use the temperature of the air the BedJet is putting out + TEMPERATURE_SOURCE_OUTLET, + // Use the ambient temperature of the room the BedJet is in + TEMPERATURE_SOURCE_AMBIENT +}; + enum BedjetButton : uint8_t { /// Turn BedJet off BTN_OFF = 0x1, diff --git a/esphome/components/bedjet/climate/__init__.py b/esphome/components/bedjet/climate/__init__.py index b12622868f..e454b0922b 100644 --- a/esphome/components/bedjet/climate/__init__.py +++ b/esphome/components/bedjet/climate/__init__.py @@ -7,6 +7,7 @@ from esphome.const import ( CONF_HEAT_MODE, CONF_ID, CONF_RECEIVE_TIMEOUT, + CONF_TEMPERATURE_SOURCE, CONF_TIME_ID, ) from .. import ( @@ -21,10 +22,15 @@ DEPENDENCIES = ["bedjet"] BedJetClimate = bedjet_ns.class_("BedJetClimate", climate.Climate, cg.PollingComponent) BedjetHeatMode = bedjet_ns.enum("BedjetHeatMode") +BedjetTemperatureSource = bedjet_ns.enum("BedjetTemperatureSource") BEDJET_HEAT_MODES = { "heat": BedjetHeatMode.HEAT_MODE_HEAT, "extended": BedjetHeatMode.HEAT_MODE_EXTENDED, } +BEDJET_TEMPERATURE_SOURCES = { + "outlet": BedjetTemperatureSource.TEMPERATURE_SOURCE_OUTLET, + "ambient": BedjetTemperatureSource.TEMPERATURE_SOURCE_AMBIENT, +} CONFIG_SCHEMA = ( climate.CLIMATE_SCHEMA.extend( @@ -33,6 +39,9 @@ CONFIG_SCHEMA = ( cv.Optional(CONF_HEAT_MODE, default="heat"): cv.enum( BEDJET_HEAT_MODES, lower=True ), + cv.Optional(CONF_TEMPERATURE_SOURCE, default="ambient"): cv.enum( + BEDJET_TEMPERATURE_SOURCES, lower=True + ), } ) .extend(cv.polling_component_schema("60s")) @@ -63,3 +72,4 @@ async def to_code(config): await register_bedjet_child(var, config) cg.add(var.set_heating_mode(config[CONF_HEAT_MODE])) + cg.add(var.set_temperature_source(config[CONF_TEMPERATURE_SOURCE])) diff --git a/esphome/components/bedjet/climate/bedjet_climate.cpp b/esphome/components/bedjet/climate/bedjet_climate.cpp index 431cf614e9..854129f816 100644 --- a/esphome/components/bedjet/climate/bedjet_climate.cpp +++ b/esphome/components/bedjet/climate/bedjet_climate.cpp @@ -8,12 +8,6 @@ namespace bedjet { using namespace esphome::climate; -/// Converts a BedJet temp step into degrees Celsius. -float bedjet_temp_to_c(const uint8_t temp) { - // BedJet temp is "C*2"; to get C, divide by 2. - return temp / 2.0f; -} - static const std::string *bedjet_fan_step_to_fan_mode(const uint8_t fan_step) { if (fan_step < BEDJET_FAN_SPEED_COUNT) return &BEDJET_FAN_STEP_NAME_STRINGS[fan_step]; @@ -236,9 +230,14 @@ void BedJetClimate::on_status(const BedjetStatusPacket *data) { if (converted_temp > 0) this->target_temperature = converted_temp; - converted_temp = bedjet_temp_to_c(data->ambient_temp_step); - if (converted_temp > 0) + if (this->temperature_source_ == TEMPERATURE_SOURCE_OUTLET) { + converted_temp = bedjet_temp_to_c(data->actual_temp_step); + } else { + converted_temp = bedjet_temp_to_c(data->ambient_temp_step); + } + if (converted_temp > 0) { this->current_temperature = converted_temp; + } const auto *fan_mode_name = bedjet_fan_step_to_fan_mode(data->fan_step); if (fan_mode_name != nullptr) { diff --git a/esphome/components/bedjet/climate/bedjet_climate.h b/esphome/components/bedjet/climate/bedjet_climate.h index 48c50d842f..7eaa735a3f 100644 --- a/esphome/components/bedjet/climate/bedjet_climate.h +++ b/esphome/components/bedjet/climate/bedjet_climate.h @@ -28,6 +28,8 @@ class BedJetClimate : public climate::Climate, public BedJetClient, public Polli /** Sets the default strategy to use for climate::CLIMATE_MODE_HEAT. */ void set_heating_mode(BedjetHeatMode mode) { this->heating_mode_ = mode; } + /** Sets the temperature source to use for the climate entity's current temperature */ + void set_temperature_source(BedjetTemperatureSource source) { this->temperature_source_ = source; } climate::ClimateTraits traits() override { auto traits = climate::ClimateTraits(); @@ -74,6 +76,7 @@ class BedJetClimate : public climate::Climate, public BedJetClient, public Polli void control(const climate::ClimateCall &call) override; BedjetHeatMode heating_mode_ = HEAT_MODE_HEAT; + BedjetTemperatureSource temperature_source_ = TEMPERATURE_SOURCE_AMBIENT; void reset_state_(); bool update_status_(); diff --git a/esphome/components/bedjet/sensor/__init__.py b/esphome/components/bedjet/sensor/__init__.py new file mode 100644 index 0000000000..756b31de53 --- /dev/null +++ b/esphome/components/bedjet/sensor/__init__.py @@ -0,0 +1,55 @@ +import logging + +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + CONF_ID, + DEVICE_CLASS_TEMPERATURE, + STATE_CLASS_MEASUREMENT, + UNIT_CELSIUS, +) +from .. import ( + BEDJET_CLIENT_SCHEMA, + bedjet_ns, + register_bedjet_child, +) + +_LOGGER = logging.getLogger(__name__) +CODEOWNERS = ["@jhansche", "@javawizard"] +DEPENDENCIES = ["bedjet"] + +CONF_OUTLET_TEMPERATURE = "outlet_temperature" +CONF_AMBIENT_TEMPERATURE = "ambient_temperature" + +BedjetSensor = bedjet_ns.class_("BedjetSensor", cg.Component) + +CONFIG_SCHEMA = cv.Schema( + { + cv.GenerateID(): cv.declare_id(BedjetSensor), + cv.Optional(CONF_OUTLET_TEMPERATURE): sensor.sensor_schema( + unit_of_measurement=UNIT_CELSIUS, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Optional(CONF_AMBIENT_TEMPERATURE): sensor.sensor_schema( + unit_of_measurement=UNIT_CELSIUS, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + ), + } +).extend(BEDJET_CLIENT_SCHEMA) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + await register_bedjet_child(var, config) + + if outlet_temperature_sensor := config.get(CONF_OUTLET_TEMPERATURE): + sensor_var = await sensor.new_sensor(outlet_temperature_sensor) + cg.add(var.set_outlet_temperature_sensor(sensor_var)) + + if ambient_temperature_sensor := config.get(CONF_AMBIENT_TEMPERATURE): + sensor_var = await sensor.new_sensor(ambient_temperature_sensor) + cg.add(var.set_ambient_temperature_sensor(sensor_var)) diff --git a/esphome/components/bedjet/sensor/bedjet_sensor.cpp b/esphome/components/bedjet/sensor/bedjet_sensor.cpp new file mode 100644 index 0000000000..2fda8c927f --- /dev/null +++ b/esphome/components/bedjet/sensor/bedjet_sensor.cpp @@ -0,0 +1,34 @@ +#include "bedjet_sensor.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace bedjet { + +std::string BedjetSensor::describe() { return "BedJet Sensor"; } + +void BedjetSensor::dump_config() { + ESP_LOGCONFIG(TAG, "BedJet Sensor:"); + LOG_SENSOR(" ", "Outlet Temperature", this->outlet_temperature_sensor_); + LOG_SENSOR(" ", "Ambient Temperature", this->ambient_temperature_sensor_); +} + +void BedjetSensor::on_bedjet_state(bool is_ready) {} + +void BedjetSensor::on_status(const BedjetStatusPacket *data) { + if (this->outlet_temperature_sensor_ != nullptr) { + float converted_temp = bedjet_temp_to_c(data->actual_temp_step); + if (converted_temp > 0) { + this->outlet_temperature_sensor_->publish_state(converted_temp); + } + } + + if (this->ambient_temperature_sensor_ != nullptr) { + float converted_temp = bedjet_temp_to_c(data->ambient_temp_step); + if (converted_temp > 0) { + this->ambient_temperature_sensor_->publish_state(converted_temp); + } + } +} + +} // namespace bedjet +} // namespace esphome diff --git a/esphome/components/bedjet/sensor/bedjet_sensor.h b/esphome/components/bedjet/sensor/bedjet_sensor.h new file mode 100644 index 0000000000..8cbaa863ee --- /dev/null +++ b/esphome/components/bedjet/sensor/bedjet_sensor.h @@ -0,0 +1,32 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/sensor/sensor.h" +#include "esphome/components/bedjet/bedjet_child.h" +#include "esphome/components/bedjet/bedjet_codec.h" + +namespace esphome { +namespace bedjet { + +class BedjetSensor : public BedJetClient, public Component { + public: + void dump_config() override; + + void on_status(const BedjetStatusPacket *data) override; + void on_bedjet_state(bool is_ready) override; + std::string describe() override; + + void set_outlet_temperature_sensor(sensor::Sensor *outlet_temperature_sensor) { + this->outlet_temperature_sensor_ = outlet_temperature_sensor; + } + void set_ambient_temperature_sensor(sensor::Sensor *ambient_temperature_sensor) { + this->ambient_temperature_sensor_ = ambient_temperature_sensor; + } + + protected: + sensor::Sensor *outlet_temperature_sensor_{nullptr}; + sensor::Sensor *ambient_temperature_sensor_{nullptr}; +}; + +} // namespace bedjet +} // namespace esphome diff --git a/tests/components/bedjet/common.yaml b/tests/components/bedjet/common.yaml index c2be04a49a..1563fc9dae 100644 --- a/tests/components/bedjet/common.yaml +++ b/tests/components/bedjet/common.yaml @@ -26,8 +26,16 @@ climate: name: My Bedjet bedjet_id: bedjet_hub heat_mode: extended + temperature_source: ambient fan: - platform: bedjet name: My Bedjet fan bedjet_id: bedjet_hub + +sensor: + - platform: bedjet + ambient_temperature: + name: My BedJet Ambient Temperature + outlet_temperature: + name: My BedJet Outlet Temperature From 46eee4a4f0c63c88294da9c3f27407af26d2ef98 Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Wed, 15 May 2024 23:32:48 +0000 Subject: [PATCH 198/313] Add beken_spi_led_strip component (#6515) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 1 + .../beken_spi_led_strip/__init__.py | 0 .../beken_spi_led_strip/led_strip.cpp | 384 ++++++++++++++++++ .../beken_spi_led_strip/led_strip.h | 85 ++++ .../components/beken_spi_led_strip/light.py | 134 ++++++ .../components/esp32_rmt_led_strip/light.py | 2 +- .../components/rp2040_pio_led_strip/light.py | 2 +- esphome/const.py | 1 + .../beken_spi_led_strip/test.bk72xx.yaml | 7 + .../build_components_base.bk72xx.yaml | 2 +- 10 files changed, 615 insertions(+), 3 deletions(-) create mode 100644 esphome/components/beken_spi_led_strip/__init__.py create mode 100644 esphome/components/beken_spi_led_strip/led_strip.cpp create mode 100644 esphome/components/beken_spi_led_strip/led_strip.h create mode 100644 esphome/components/beken_spi_led_strip/light.py create mode 100644 tests/components/beken_spi_led_strip/test.bk72xx.yaml diff --git a/CODEOWNERS b/CODEOWNERS index a661eba9b3..65ea3b1683 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -52,6 +52,7 @@ esphome/components/bedjet/* @jhansche esphome/components/bedjet/climate/* @jhansche esphome/components/bedjet/fan/* @jhansche esphome/components/bedjet/sensor/* @javawizard @jhansche +esphome/components/beken_spi_led_strip/* @Mat931 esphome/components/bh1750/* @OttoWinter esphome/components/binary_sensor/* @esphome/core esphome/components/bk72xx/* @kuba2k2 diff --git a/esphome/components/beken_spi_led_strip/__init__.py b/esphome/components/beken_spi_led_strip/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/beken_spi_led_strip/led_strip.cpp b/esphome/components/beken_spi_led_strip/led_strip.cpp new file mode 100644 index 0000000000..04c8649b90 --- /dev/null +++ b/esphome/components/beken_spi_led_strip/led_strip.cpp @@ -0,0 +1,384 @@ +#include "led_strip.h" + +#ifdef USE_BK72XX + +#include "esphome/core/helpers.h" +#include "esphome/core/log.h" + +extern "C" { +#include "rtos_pub.h" +#include "spi.h" +#include "arm_arch.h" +#include "general_dma_pub.h" +#include "gpio_pub.h" +#include "icu_pub.h" +#undef SPI_DAT +#undef SPI_BASE +}; + +static const uint32_t SPI_TX_DMA_CHANNEL = GDMA_CHANNEL_3; + +// TODO: Check if SPI_PERI_CLK_DCO depends on the chip variant +static const uint32_t SPI_PERI_CLK_26M = 26000000; +static const uint32_t SPI_PERI_CLK_DCO = 120000000; + +static const uint32_t SPI_BASE = 0x00802700; +static const uint32_t SPI_DAT = SPI_BASE + 3 * 4; +static const uint32_t SPI_CONFIG = SPI_BASE + 1 * 4; + +static const uint32_t SPI_TX_EN = 1 << 0; +static const uint32_t CTRL_NSSMD_3 = 1 << 17; +static const uint32_t SPI_TX_FINISH_EN = 1 << 2; +static const uint32_t SPI_RX_FINISH_EN = 1 << 3; + +namespace esphome { +namespace beken_spi_led_strip { + +static const char *const TAG = "beken_spi_led_strip"; + +struct spi_data_t { + SemaphoreHandle_t dma_tx_semaphore; + volatile bool tx_in_progress; + bool first_run; +}; + +static spi_data_t *spi_data = nullptr; + +static void set_spi_ctrl_register(unsigned long bit, bool val) { + uint32_t value = REG_READ(SPI_CTRL); + if (val == 0) { + value &= ~bit; + } else if (val == 1) { + value |= bit; + } + REG_WRITE(SPI_CTRL, value); +} + +static void set_spi_config_register(unsigned long bit, bool val) { + uint32_t value = REG_READ(SPI_CONFIG); + if (val == 0) { + value &= ~bit; + } else if (val == 1) { + value |= bit; + } + REG_WRITE(SPI_CONFIG, value); +} + +void spi_dma_tx_enable(bool enable) { + GDMA_CFG_ST en_cfg; + set_spi_config_register(SPI_TX_EN, enable ? 1 : 0); + en_cfg.channel = SPI_TX_DMA_CHANNEL; + en_cfg.param = enable ? 1 : 0; + sddev_control(GDMA_DEV_NAME, CMD_GDMA_SET_DMA_ENABLE, &en_cfg); +} + +static void spi_set_clock(uint32_t max_hz) { + int source_clk = 0; + int spi_clk = 0; + int div = 0; + uint32_t param; + if (max_hz > 4333000) { + if (max_hz > 30000000) { + spi_clk = 30000000; + } else { + spi_clk = max_hz; + } + sddev_control(ICU_DEV_NAME, CMD_CLK_PWR_DOWN, ¶m); + source_clk = SPI_PERI_CLK_DCO; + param = PCLK_POSI_SPI; + sddev_control(ICU_DEV_NAME, CMD_CONF_PCLK_DCO, ¶m); + param = PWD_SPI_CLK_BIT; + sddev_control(ICU_DEV_NAME, CMD_CLK_PWR_UP, ¶m); + } else { + spi_clk = max_hz; +#if CFG_XTAL_FREQUENCE + source_clk = CFG_XTAL_FREQUENCE; +#else + source_clk = SPI_PERI_CLK_26M; +#endif + param = PCLK_POSI_SPI; + sddev_control(ICU_DEV_NAME, CMD_CONF_PCLK_26M, ¶m); + } + div = ((source_clk >> 1) / spi_clk); + if (div < 2) { + div = 2; + } else if (div >= 255) { + div = 255; + } + param = REG_READ(SPI_CTRL); + param &= ~(SPI_CKR_MASK << SPI_CKR_POSI); + param |= (div << SPI_CKR_POSI); + REG_WRITE(SPI_CTRL, param); + ESP_LOGD(TAG, "target frequency: %d, actual frequency: %d", max_hz, source_clk / 2 / div); +} + +void spi_dma_tx_finish_callback(unsigned int param) { + spi_data->tx_in_progress = false; + xSemaphoreGive(spi_data->dma_tx_semaphore); + spi_dma_tx_enable(0); +} + +void BekenSPILEDStripLightOutput::setup() { + ESP_LOGCONFIG(TAG, "Setting up Beken SPI LED Strip..."); + + size_t buffer_size = this->get_buffer_size_(); + size_t dma_buffer_size = (buffer_size * 8) + (2 * 64); + + ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); + this->buf_ = allocator.allocate(buffer_size); + if (this->buf_ == nullptr) { + ESP_LOGE(TAG, "Cannot allocate LED buffer!"); + this->mark_failed(); + return; + } + + this->effect_data_ = allocator.allocate(this->num_leds_); + if (this->effect_data_ == nullptr) { + ESP_LOGE(TAG, "Cannot allocate effect data!"); + this->mark_failed(); + return; + } + + this->dma_buf_ = allocator.allocate(dma_buffer_size); + if (this->dma_buf_ == nullptr) { + ESP_LOGE(TAG, "Cannot allocate DMA buffer!"); + this->mark_failed(); + return; + } + + memset(this->buf_, 0, buffer_size); + memset(this->effect_data_, 0, this->num_leds_); + memset(this->dma_buf_, 0, dma_buffer_size); + + uint32_t value = PCLK_POSI_SPI; + sddev_control(ICU_DEV_NAME, CMD_CONF_PCLK_26M, &value); + + value = PWD_SPI_CLK_BIT; + sddev_control(ICU_DEV_NAME, CMD_CLK_PWR_UP, &value); + + if (spi_data != nullptr) { + ESP_LOGE(TAG, "SPI device already initialized!"); + this->mark_failed(); + return; + } + + spi_data = (spi_data_t *) calloc(1, sizeof(spi_data_t)); + if (spi_data == nullptr) { + ESP_LOGE(TAG, "Cannot allocate spi_data!"); + this->mark_failed(); + return; + } + + spi_data->dma_tx_semaphore = xSemaphoreCreateBinary(); + if (spi_data->dma_tx_semaphore == nullptr) { + ESP_LOGE(TAG, "TX Semaphore init faild!"); + this->mark_failed(); + return; + } + + spi_data->first_run = true; + + set_spi_ctrl_register(MSTEN, 0); + set_spi_ctrl_register(BIT_WDTH, 0); + spi_set_clock(this->spi_frequency_); + set_spi_ctrl_register(CKPOL, 0); + set_spi_ctrl_register(CKPHA, 0); + set_spi_ctrl_register(MSTEN, 1); + set_spi_ctrl_register(SPIEN, 1); + + set_spi_ctrl_register(TXINT_EN, 0); + set_spi_ctrl_register(RXINT_EN, 0); + set_spi_config_register(SPI_TX_FINISH_EN, 1); + set_spi_config_register(SPI_RX_FINISH_EN, 1); + set_spi_ctrl_register(RXOVR_EN, 0); + set_spi_ctrl_register(TXOVR_EN, 0); + + value = REG_READ(SPI_CTRL); + value &= ~CTRL_NSSMD_3; + value |= (1 << 17); + REG_WRITE(SPI_CTRL, value); + + value = GFUNC_MODE_SPI_DMA; + sddev_control(GPIO_DEV_NAME, CMD_GPIO_ENABLE_SECOND, &value); + set_spi_ctrl_register(SPI_S_CS_UP_INT_EN, 0); + + GDMA_CFG_ST en_cfg; + GDMACFG_TPYES_ST init_cfg; + memset(&init_cfg, 0, sizeof(GDMACFG_TPYES_ST)); + + init_cfg.dstdat_width = 8; + init_cfg.srcdat_width = 32; + init_cfg.dstptr_incr = 0; + init_cfg.srcptr_incr = 1; + init_cfg.src_start_addr = this->dma_buf_; + init_cfg.dst_start_addr = (void *) SPI_DAT; // SPI_DMA_REG4_TXFIFO + init_cfg.channel = SPI_TX_DMA_CHANNEL; + init_cfg.prio = 0; // 10 + init_cfg.u.type4.src_loop_start_addr = this->dma_buf_; + init_cfg.u.type4.src_loop_end_addr = this->dma_buf_ + dma_buffer_size; + init_cfg.half_fin_handler = nullptr; + init_cfg.fin_handler = spi_dma_tx_finish_callback; + init_cfg.src_module = GDMA_X_SRC_DTCM_RD_REQ; + init_cfg.dst_module = GDMA_X_DST_GSPI_TX_REQ; // GDMA_X_DST_HSSPI_TX_REQ + sddev_control(GDMA_DEV_NAME, CMD_GDMA_CFG_TYPE4, (void *) &init_cfg); + en_cfg.channel = SPI_TX_DMA_CHANNEL; + en_cfg.param = dma_buffer_size; + sddev_control(GDMA_DEV_NAME, CMD_GDMA_SET_TRANS_LENGTH, (void *) &en_cfg); + en_cfg.channel = SPI_TX_DMA_CHANNEL; + en_cfg.param = 0; + sddev_control(GDMA_DEV_NAME, CMD_GDMA_CFG_WORK_MODE, (void *) &en_cfg); + en_cfg.channel = SPI_TX_DMA_CHANNEL; + en_cfg.param = 0; + sddev_control(GDMA_DEV_NAME, CMD_GDMA_CFG_SRCADDR_LOOP, &en_cfg); + + spi_dma_tx_enable(0); + + value = REG_READ(SPI_CONFIG); + value &= ~(0xFFF << 8); + value |= ((dma_buffer_size & 0xFFF) << 8); + REG_WRITE(SPI_CONFIG, value); +} + +void BekenSPILEDStripLightOutput::set_led_params(uint8_t bit0, uint8_t bit1, uint32_t spi_frequency) { + this->bit0_ = bit0; + this->bit1_ = bit1; + this->spi_frequency_ = spi_frequency; +} + +void BekenSPILEDStripLightOutput::write_state(light::LightState *state) { + // protect from refreshing too often + uint32_t now = micros(); + if (*this->max_refresh_rate_ != 0 && (now - this->last_refresh_) < *this->max_refresh_rate_) { + // try again next loop iteration, so that this change won't get lost + this->schedule_show(); + return; + } + this->last_refresh_ = now; + this->mark_shown_(); + + ESP_LOGVV(TAG, "Writing RGB values to bus..."); + + if (spi_data == nullptr) { + ESP_LOGE(TAG, "SPI not initialized"); + this->status_set_warning(); + return; + } + + if (!spi_data->first_run && !xSemaphoreTake(spi_data->dma_tx_semaphore, 10 / portTICK_PERIOD_MS)) { + ESP_LOGE(TAG, "Timed out waiting for semaphore"); + return; + } + + if (spi_data->tx_in_progress) { + ESP_LOGE(TAG, "tx_in_progress is set"); + this->status_set_warning(); + return; + } + + spi_data->tx_in_progress = true; + + size_t buffer_size = this->get_buffer_size_(); + size_t size = 0; + uint8_t *psrc = this->buf_; + uint8_t *pdest = this->dma_buf_ + 64; + // The 64 byte padding is a workaround for a SPI DMA bug where the + // output doesn't exactly start at the beginning of dma_buf_ + + while (size < buffer_size) { + uint8_t b = *psrc; + for (int i = 0; i < 8; i++) { + *pdest++ = b & (1 << (7 - i)) ? this->bit1_ : this->bit0_; + } + size++; + psrc++; + } + + spi_data->first_run = false; + spi_dma_tx_enable(1); + + this->status_clear_warning(); +} + +light::ESPColorView BekenSPILEDStripLightOutput::get_view_internal(int32_t index) const { + int32_t r = 0, g = 0, b = 0; + switch (this->rgb_order_) { + case ORDER_RGB: + r = 0; + g = 1; + b = 2; + break; + case ORDER_RBG: + r = 0; + g = 2; + b = 1; + break; + case ORDER_GRB: + r = 1; + g = 0; + b = 2; + break; + case ORDER_GBR: + r = 2; + g = 0; + b = 1; + break; + case ORDER_BGR: + r = 2; + g = 1; + b = 0; + break; + case ORDER_BRG: + r = 1; + g = 2; + b = 0; + break; + } + uint8_t multiplier = this->is_rgbw_ || this->is_wrgb_ ? 4 : 3; + uint8_t white = this->is_wrgb_ ? 0 : 3; + + return {this->buf_ + (index * multiplier) + r + this->is_wrgb_, + this->buf_ + (index * multiplier) + g + this->is_wrgb_, + this->buf_ + (index * multiplier) + b + this->is_wrgb_, + this->is_rgbw_ || this->is_wrgb_ ? this->buf_ + (index * multiplier) + white : nullptr, + &this->effect_data_[index], + &this->correction_}; +} + +void BekenSPILEDStripLightOutput::dump_config() { + ESP_LOGCONFIG(TAG, "Beken SPI LED Strip:"); + ESP_LOGCONFIG(TAG, " Pin: %u", this->pin_); + const char *rgb_order; + switch (this->rgb_order_) { + case ORDER_RGB: + rgb_order = "RGB"; + break; + case ORDER_RBG: + rgb_order = "RBG"; + break; + case ORDER_GRB: + rgb_order = "GRB"; + break; + case ORDER_GBR: + rgb_order = "GBR"; + break; + case ORDER_BGR: + rgb_order = "BGR"; + break; + case ORDER_BRG: + rgb_order = "BRG"; + break; + default: + rgb_order = "UNKNOWN"; + break; + } + ESP_LOGCONFIG(TAG, " RGB Order: %s", rgb_order); + ESP_LOGCONFIG(TAG, " Max refresh rate: %" PRIu32, *this->max_refresh_rate_); + ESP_LOGCONFIG(TAG, " Number of LEDs: %u", this->num_leds_); +} + +float BekenSPILEDStripLightOutput::get_setup_priority() const { return setup_priority::HARDWARE; } + +} // namespace beken_spi_led_strip +} // namespace esphome + +#endif // USE_BK72XX diff --git a/esphome/components/beken_spi_led_strip/led_strip.h b/esphome/components/beken_spi_led_strip/led_strip.h new file mode 100644 index 0000000000..705f9102a9 --- /dev/null +++ b/esphome/components/beken_spi_led_strip/led_strip.h @@ -0,0 +1,85 @@ +#pragma once + +#ifdef USE_BK72XX + +#include "esphome/components/light/addressable_light.h" +#include "esphome/components/light/light_output.h" +#include "esphome/core/color.h" +#include "esphome/core/component.h" +#include "esphome/core/helpers.h" + +namespace esphome { +namespace beken_spi_led_strip { + +enum RGBOrder : uint8_t { + ORDER_RGB, + ORDER_RBG, + ORDER_GRB, + ORDER_GBR, + ORDER_BGR, + ORDER_BRG, +}; + +class BekenSPILEDStripLightOutput : public light::AddressableLight { + public: + void setup() override; + void write_state(light::LightState *state) override; + float get_setup_priority() const override; + + int32_t size() const override { return this->num_leds_; } + light::LightTraits get_traits() override { + auto traits = light::LightTraits(); + if (this->is_rgbw_ || this->is_wrgb_) { + traits.set_supported_color_modes({light::ColorMode::RGB_WHITE, light::ColorMode::WHITE}); + } else { + traits.set_supported_color_modes({light::ColorMode::RGB}); + } + return traits; + } + + void set_pin(uint8_t pin) { this->pin_ = pin; } + void set_num_leds(uint16_t num_leds) { this->num_leds_ = num_leds; } + void set_is_rgbw(bool is_rgbw) { this->is_rgbw_ = is_rgbw; } + void set_is_wrgb(bool is_wrgb) { this->is_wrgb_ = is_wrgb; } + + /// Set a maximum refresh rate in µs as some lights do not like being updated too often. + void set_max_refresh_rate(uint32_t interval_us) { this->max_refresh_rate_ = interval_us; } + + void set_led_params(uint8_t bit0, uint8_t bit1, uint32_t spi_frequency); + + void set_rgb_order(RGBOrder rgb_order) { this->rgb_order_ = rgb_order; } + + void clear_effect_data() override { + for (int i = 0; i < this->size(); i++) + this->effect_data_[i] = 0; + } + + void dump_config() override; + + protected: + light::ESPColorView get_view_internal(int32_t index) const override; + + size_t get_buffer_size_() const { return this->num_leds_ * (this->is_rgbw_ || this->is_wrgb_ ? 4 : 3); } + + uint8_t *buf_{nullptr}; + uint8_t *effect_data_{nullptr}; + uint8_t *dma_buf_{nullptr}; + + uint8_t pin_; + uint16_t num_leds_; + bool is_rgbw_; + bool is_wrgb_; + + uint32_t spi_frequency_{6666666}; + uint8_t bit0_{0xE0}; + uint8_t bit1_{0xFC}; + RGBOrder rgb_order_; + + uint32_t last_refresh_{0}; + optional max_refresh_rate_{}; +}; + +} // namespace beken_spi_led_strip +} // namespace esphome + +#endif // USE_BK72XX diff --git a/esphome/components/beken_spi_led_strip/light.py b/esphome/components/beken_spi_led_strip/light.py new file mode 100644 index 0000000000..2a1aa05c79 --- /dev/null +++ b/esphome/components/beken_spi_led_strip/light.py @@ -0,0 +1,134 @@ +from dataclasses import dataclass + +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import pins +from esphome.components import libretiny, light +from esphome.const import ( + CONF_CHIPSET, + CONF_IS_RGBW, + CONF_MAX_REFRESH_RATE, + CONF_NUM_LEDS, + CONF_OUTPUT_ID, + CONF_PIN, + CONF_RGB_ORDER, +) + +CODEOWNERS = ["@Mat931"] +DEPENDENCIES = ["libretiny"] + +beken_spi_led_strip_ns = cg.esphome_ns.namespace("beken_spi_led_strip") +BekenSPILEDStripLightOutput = beken_spi_led_strip_ns.class_( + "BekenSPILEDStripLightOutput", light.AddressableLight +) + +RGBOrder = beken_spi_led_strip_ns.enum("RGBOrder") + +RGB_ORDERS = { + "RGB": RGBOrder.ORDER_RGB, + "RBG": RGBOrder.ORDER_RBG, + "GRB": RGBOrder.ORDER_GRB, + "GBR": RGBOrder.ORDER_GBR, + "BGR": RGBOrder.ORDER_BGR, + "BRG": RGBOrder.ORDER_BRG, +} + + +@dataclass +class LEDStripTimings: + bit0: int + bit1: int + spi_frequency: int + + +CHIPSETS = { + "WS2812": LEDStripTimings( + 0b11100000, 0b11111100, 6666666 + ), # Clock divider: 9, Bit time: 1350ns + "SK6812": LEDStripTimings( + 0b11000000, 0b11111000, 7500000 + ), # Clock divider: 8, Bit time: 1200ns + "APA106": LEDStripTimings( + 0b11000000, 0b11111110, 5454545 + ), # Clock divider: 11, Bit time: 1650ns + "SM16703": LEDStripTimings( + 0b11000000, 0b11111110, 7500000 + ), # Clock divider: 8, Bit time: 1200ns +} + + +CONF_IS_WRGB = "is_wrgb" + +SUPPORTED_PINS = { + libretiny.const.FAMILY_BK7231N: [16], + libretiny.const.FAMILY_BK7231T: [16], + libretiny.const.FAMILY_BK7251: [16], +} + + +def _validate_pin(value): + family = libretiny.get_libretiny_family() + if family not in SUPPORTED_PINS: + raise cv.Invalid(f"Chip family {family} is not supported.") + if value not in SUPPORTED_PINS[family]: + supported_pin_info = ", ".join(f"{x}" for x in SUPPORTED_PINS[family]) + raise cv.Invalid( + f"Pin {value} is not supported on the {family}. Supported pins: {supported_pin_info}" + ) + return value + + +def _validate_num_leds(value): + max_num_leds = 165 # 170 + if value[CONF_IS_RGBW] or value[CONF_IS_WRGB]: + max_num_leds = 123 # 127 + if value[CONF_NUM_LEDS] > max_num_leds: + raise cv.Invalid( + f"The maximum number of LEDs for this configuration is {max_num_leds}.", + path=CONF_NUM_LEDS, + ) + return value + + +CONFIG_SCHEMA = cv.All( + light.ADDRESSABLE_LIGHT_SCHEMA.extend( + { + cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(BekenSPILEDStripLightOutput), + cv.Required(CONF_PIN): cv.All( + pins.internal_gpio_output_pin_number, _validate_pin + ), + cv.Required(CONF_NUM_LEDS): cv.positive_not_null_int, + cv.Required(CONF_RGB_ORDER): cv.enum(RGB_ORDERS, upper=True), + cv.Optional(CONF_MAX_REFRESH_RATE): cv.positive_time_period_microseconds, + cv.Required(CONF_CHIPSET): cv.one_of(*CHIPSETS, upper=True), + cv.Optional(CONF_IS_RGBW, default=False): cv.boolean, + cv.Optional(CONF_IS_WRGB, default=False): cv.boolean, + } + ), + _validate_num_leds, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_OUTPUT_ID]) + await light.register_light(var, config) + await cg.register_component(var, config) + + cg.add(var.set_num_leds(config[CONF_NUM_LEDS])) + cg.add(var.set_pin(config[CONF_PIN])) + + if CONF_MAX_REFRESH_RATE in config: + cg.add(var.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) + + chipset = CHIPSETS[config[CONF_CHIPSET]] + cg.add( + var.set_led_params( + chipset.bit0, + chipset.bit1, + chipset.spi_frequency, + ) + ) + + cg.add(var.set_rgb_order(config[CONF_RGB_ORDER])) + cg.add(var.set_is_rgbw(config[CONF_IS_RGBW])) + cg.add(var.set_is_wrgb(config[CONF_IS_WRGB])) diff --git a/esphome/components/esp32_rmt_led_strip/light.py b/esphome/components/esp32_rmt_led_strip/light.py index 1c15a468d9..4c8472b8d2 100644 --- a/esphome/components/esp32_rmt_led_strip/light.py +++ b/esphome/components/esp32_rmt_led_strip/light.py @@ -6,6 +6,7 @@ from esphome import pins from esphome.components import esp32_rmt, light from esphome.const import ( CONF_CHIPSET, + CONF_IS_RGBW, CONF_MAX_REFRESH_RATE, CONF_NUM_LEDS, CONF_OUTPUT_ID, @@ -52,7 +53,6 @@ CHIPSETS = { } -CONF_IS_RGBW = "is_rgbw" CONF_IS_WRGB = "is_wrgb" CONF_BIT0_HIGH = "bit0_high" CONF_BIT0_LOW = "bit0_low" diff --git a/esphome/components/rp2040_pio_led_strip/light.py b/esphome/components/rp2040_pio_led_strip/light.py index 6c51b57e97..202263c914 100644 --- a/esphome/components/rp2040_pio_led_strip/light.py +++ b/esphome/components/rp2040_pio_led_strip/light.py @@ -5,6 +5,7 @@ from esphome.components import light, rp2040 from esphome.const import ( CONF_CHIPSET, CONF_ID, + CONF_IS_RGBW, CONF_NUM_LEDS, CONF_OUTPUT_ID, CONF_PIN, @@ -165,7 +166,6 @@ CHIPSETS = { "SM16703": LEDStripTimings(17, 52, 52, 17), } -CONF_IS_RGBW = "is_rgbw" CONF_BIT0_HIGH = "bit0_high" CONF_BIT0_LOW = "bit0_low" CONF_BIT1_HIGH = "bit1_high" diff --git a/esphome/const.py b/esphome/const.py index 542183d3b2..eb48080040 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -399,6 +399,7 @@ CONF_INVERT_COLORS = "invert_colors" CONF_INVERTED = "inverted" CONF_IP_ADDRESS = "ip_address" CONF_IRQ_PIN = "irq_pin" +CONF_IS_RGBW = "is_rgbw" CONF_JS_INCLUDE = "js_include" CONF_JS_URL = "js_url" CONF_JVC = "jvc" diff --git a/tests/components/beken_spi_led_strip/test.bk72xx.yaml b/tests/components/beken_spi_led_strip/test.bk72xx.yaml new file mode 100644 index 0000000000..15409caeaf --- /dev/null +++ b/tests/components/beken_spi_led_strip/test.bk72xx.yaml @@ -0,0 +1,7 @@ +light: + - platform: beken_spi_led_strip + rgb_order: GRB + pin: P16 + num_leds: 30 + chipset: ws2812 + name: "My Light" diff --git a/tests/test_build_components/build_components_base.bk72xx.yaml b/tests/test_build_components/build_components_base.bk72xx.yaml index 9fd9431826..9a4e15d5cf 100644 --- a/tests/test_build_components/build_components_base.bk72xx.yaml +++ b/tests/test_build_components/build_components_base.bk72xx.yaml @@ -3,7 +3,7 @@ esphome: friendly_name: $component_name bk72xx: - board: cb3s + board: generic-bk7231n-qfn32-tuya logger: level: VERY_VERBOSE From 073fb4c124c6725c262d16b5a94bfac43f9cc344 Mon Sep 17 00:00:00 2001 From: ius Date: Thu, 16 May 2024 01:33:15 +0200 Subject: [PATCH 199/313] i2c: fix format string specifiers (#6746) --- esphome/components/i2c/i2c_bus_esp_idf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/i2c/i2c_bus_esp_idf.cpp b/esphome/components/i2c/i2c_bus_esp_idf.cpp index cbb748cca1..3a9c229778 100644 --- a/esphome/components/i2c/i2c_bus_esp_idf.cpp +++ b/esphome/components/i2c/i2c_bus_esp_idf.cpp @@ -56,7 +56,7 @@ void IDFI2CBus::setup() { this->mark_failed(); return; } else { - ESP_LOGV(TAG, "i2c_timeout set to %d ticks (%d us)", timeout_ * 80, timeout_); + ESP_LOGV(TAG, "i2c_timeout set to %" PRIu32 " ticks (%" PRIu32 " us)", timeout_ * 80, timeout_); } } err = i2c_driver_install(port_, I2C_MODE_MASTER, 0, 0, ESP_INTR_FLAG_IRAM); From 8952719045f2fb0ed53d9c014d682933d10960ae Mon Sep 17 00:00:00 2001 From: lbilger Date: Thu, 16 May 2024 01:33:27 +0200 Subject: [PATCH 200/313] Allow one timing to cancel others (#6744) Co-authored-by: Lars Bilger --- esphome/components/binary_sensor/automation.cpp | 5 +++++ esphome/components/binary_sensor/automation.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/esphome/components/binary_sensor/automation.cpp b/esphome/components/binary_sensor/automation.cpp index 7ac201b2db..c2e76246aa 100644 --- a/esphome/components/binary_sensor/automation.cpp +++ b/esphome/components/binary_sensor/automation.cpp @@ -98,6 +98,11 @@ void binary_sensor::MultiClickTrigger::schedule_is_not_valid_(uint32_t max_lengt this->schedule_cooldown_(); }); } +void binary_sensor::MultiClickTrigger::cancel() { + ESP_LOGV(TAG, "Multi Click: Sequence explicitly cancelled."); + this->is_valid_ = false; + this->schedule_cooldown_(); +} void binary_sensor::MultiClickTrigger::trigger_() { ESP_LOGV(TAG, "Multi Click: Hooray, multi click is valid. Triggering!"); this->at_index_.reset(); diff --git a/esphome/components/binary_sensor/automation.h b/esphome/components/binary_sensor/automation.h index a5e9d208a1..12b07a05e3 100644 --- a/esphome/components/binary_sensor/automation.h +++ b/esphome/components/binary_sensor/automation.h @@ -105,6 +105,8 @@ class MultiClickTrigger : public Trigger<>, public Component { void set_invalid_cooldown(uint32_t invalid_cooldown) { this->invalid_cooldown_ = invalid_cooldown; } + void cancel(); + protected: void on_state_(bool state); void schedule_cooldown_(); From ebfccc64c7f2b7274a79e4cfaf19e1d46cc87bb2 Mon Sep 17 00:00:00 2001 From: Daniel Mahaney Date: Wed, 15 May 2024 19:33:52 -0400 Subject: [PATCH 201/313] fix rp2040_pio_led flicker and proper multi-strip support (#6194) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../rp2040_pio_led_strip/led_strip.cpp | 75 +++++++++++++++---- .../rp2040_pio_led_strip/led_strip.h | 20 +++++ .../components/rp2040_pio_led_strip/light.py | 65 +++++++++------- 3 files changed, 122 insertions(+), 38 deletions(-) diff --git a/esphome/components/rp2040_pio_led_strip/led_strip.cpp b/esphome/components/rp2040_pio_led_strip/led_strip.cpp index c04419a9bf..3e5e82898d 100644 --- a/esphome/components/rp2040_pio_led_strip/led_strip.cpp +++ b/esphome/components/rp2040_pio_led_strip/led_strip.cpp @@ -6,6 +6,7 @@ #include "esphome/core/log.h" #include +#include #include #include @@ -14,6 +15,15 @@ namespace rp2040_pio_led_strip { static const char *TAG = "rp2040_pio_led_strip"; +static uint8_t num_instance_[2] = {0, 0}; +static std::map chipset_offsets_ = { + {CHIPSET_WS2812, 0}, {CHIPSET_WS2812B, 0}, {CHIPSET_SK6812, 0}, {CHIPSET_SM16703, 0}, {CHIPSET_CUSTOM, 0}, +}; +static std::map conf_count_ = { + {CHIPSET_WS2812, false}, {CHIPSET_WS2812B, false}, {CHIPSET_SK6812, false}, + {CHIPSET_SM16703, false}, {CHIPSET_CUSTOM, false}, +}; + void RP2040PIOLEDStripLightOutput::setup() { ESP_LOGCONFIG(TAG, "Setting up RP2040 LED Strip..."); @@ -34,24 +44,71 @@ void RP2040PIOLEDStripLightOutput::setup() { return; } + // Initialize the PIO program + // Select PIO instance to use (0 or 1) - this->pio_ = pio0; if (this->pio_ == nullptr) { ESP_LOGE(TAG, "Failed to claim PIO instance"); this->mark_failed(); return; } - // Load the assembled program into the PIO and get its location in the PIO's instruction memory - uint offset = pio_add_program(this->pio_, this->program_); + // if there are multiple strips, we can reuse the same PIO program and save space + // but there are only 4 state machines on each PIO so we can only have 4 strips per PIO + uint offset = 0; + + if (num_instance_[this->pio_ == pio0 ? 0 : 1] > 4) { + ESP_LOGE(TAG, "Too many instances of PIO program"); + this->mark_failed(); + return; + } + // keep track of how many instances of the PIO program are running on each PIO + num_instance_[this->pio_ == pio0 ? 0 : 1]++; + + // if there are multiple strips of the same chipset, we can reuse the same PIO program and save space + if (this->conf_count_[this->chipset_]) { + offset = chipset_offsets_[this->chipset_]; + } else { + // Load the assembled program into the PIO and get its location in the PIO's instruction memory and save it + offset = pio_add_program(this->pio_, this->program_); + chipset_offsets_[this->chipset_] = offset; + conf_count_[this->chipset_] = true; + } // Configure the state machine's PIO, and start it this->sm_ = pio_claim_unused_sm(this->pio_, true); if (this->sm_ < 0) { + // in theory this code should never be reached ESP_LOGE(TAG, "Failed to claim PIO state machine"); this->mark_failed(); return; } + + // Initalize the DMA channel (Note: There are 12 DMA channels and 8 state machines so we won't run out) + + this->dma_chan_ = dma_claim_unused_channel(true); + if (this->dma_chan_ < 0) { + ESP_LOGE(TAG, "Failed to claim DMA channel"); + this->mark_failed(); + return; + } + + this->dma_config_ = dma_channel_get_default_config(this->dma_chan_); + channel_config_set_transfer_data_size( + &this->dma_config_, + DMA_SIZE_8); // 8 bit transfers (could be 32 but the pio program would need to be changed to handle junk data) + channel_config_set_read_increment(&this->dma_config_, true); // increment the read address + channel_config_set_write_increment(&this->dma_config_, false); // don't increment the write address + channel_config_set_dreq(&this->dma_config_, + pio_get_dreq(this->pio_, this->sm_, true)); // set the DREQ to the state machine's TX FIFO + + dma_channel_configure(this->dma_chan_, &this->dma_config_, + &this->pio_->txf[this->sm_], // write to the state machine's TX FIFO + this->buf_, // read from memory + this->is_rgbw_ ? num_leds_ * 4 : num_leds_ * 3, // number of bytes to transfer + false // don't start yet + ); + this->init_(this->pio_, this->sm_, offset, this->pin_, this->max_refresh_rate_); } @@ -68,16 +125,8 @@ void RP2040PIOLEDStripLightOutput::write_state(light::LightState *state) { return; } - // assemble bits in buffer to 32 bit words with ex for GBR: 0bGGGGGGGGRRRRRRRRBBBBBBBB00000000 - for (int i = 0; i < this->num_leds_; i++) { - uint8_t multiplier = this->is_rgbw_ ? 4 : 3; - uint8_t c1 = this->buf_[(i * multiplier) + 0]; - uint8_t c2 = this->buf_[(i * multiplier) + 1]; - uint8_t c3 = this->buf_[(i * multiplier) + 2]; - uint8_t w = this->is_rgbw_ ? this->buf_[(i * 4) + 3] : 0; - uint32_t color = encode_uint32(c1, c2, c3, w); - pio_sm_put_blocking(this->pio_, this->sm_, color); - } + // the bits are already in the correct order for the pio program so we can just copy the buffer using DMA + dma_channel_transfer_from_buffer_now(this->dma_chan_, this->buf_, this->get_buffer_size_()); } light::ESPColorView RP2040PIOLEDStripLightOutput::get_view_internal(int32_t index) const { diff --git a/esphome/components/rp2040_pio_led_strip/led_strip.h b/esphome/components/rp2040_pio_led_strip/led_strip.h index 25ef9ca55f..9976842f02 100644 --- a/esphome/components/rp2040_pio_led_strip/led_strip.h +++ b/esphome/components/rp2040_pio_led_strip/led_strip.h @@ -9,9 +9,11 @@ #include "esphome/components/light/addressable_light.h" #include "esphome/components/light/light_output.h" +#include #include #include #include +#include namespace esphome { namespace rp2040_pio_led_strip { @@ -25,6 +27,15 @@ enum RGBOrder : uint8_t { ORDER_BRG, }; +enum Chipset : uint8_t { + CHIPSET_WS2812, + CHIPSET_WS2812B, + CHIPSET_SK6812, + CHIPSET_SM16703, + CHIPSET_APA102, + CHIPSET_CUSTOM = 0xFF, +}; + inline const char *rgb_order_to_string(RGBOrder order) { switch (order) { case ORDER_RGB: @@ -69,6 +80,7 @@ class RP2040PIOLEDStripLightOutput : public light::AddressableLight { void set_program(const pio_program_t *program) { this->program_ = program; } void set_init_function(init_fn init) { this->init_ = init; } + void set_chipset(Chipset chipset) { this->chipset_ = chipset; }; void set_rgb_order(RGBOrder rgb_order) { this->rgb_order_ = rgb_order; } void clear_effect_data() override { for (int i = 0; i < this->size(); i++) { @@ -92,14 +104,22 @@ class RP2040PIOLEDStripLightOutput : public light::AddressableLight { pio_hw_t *pio_; uint sm_; + uint dma_chan_; + dma_channel_config dma_config_; RGBOrder rgb_order_{ORDER_RGB}; + Chipset chipset_{CHIPSET_CUSTOM}; uint32_t last_refresh_{0}; float max_refresh_rate_; const pio_program_t *program_; init_fn init_; + + private: + inline static int num_instance_[2]; + inline static std::map conf_count_; + inline static std::map chipset_offsets_; }; } // namespace rp2040_pio_led_strip diff --git a/esphome/components/rp2040_pio_led_strip/light.py b/esphome/components/rp2040_pio_led_strip/light.py index 202263c914..8dd2549ad4 100644 --- a/esphome/components/rp2040_pio_led_strip/light.py +++ b/esphome/components/rp2040_pio_led_strip/light.py @@ -68,12 +68,15 @@ static inline void rp2040_pio_led_strip_driver_{id}_init(PIO pio, uint sm, uint pio_sm_config c = rp2040_pio_led_strip_{id}_program_get_default_config(offset); sm_config_set_set_pins(&c, pin, 1); - sm_config_set_out_shift(&c, false, true, {32 if rgbw else 24}); + sm_config_set_out_shift(&c, false, true, 8); sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); - int cycles_per_bit = 69; - float div = 2.409; - sm_config_set_clkdiv(&c, div); + // target frequency is 57.5MHz + long clk = clock_get_hz(clk_sys); + long target_freq = 57500000; + int n = 2; + int f = round(((clk / target_freq) - n ) * 256); + sm_config_set_clkdiv_int_frac(&c, n, f); pio_sm_init(pio, sm, offset, &c); @@ -86,8 +89,9 @@ static inline void rp2040_pio_led_strip_driver_{id}_init(PIO pio, uint sm, uint .wrap_target awaiting_data: ; Wait for data in FIFO queue + ; out null, 24 ; discard the byte lane replication of the FIFO since we only need 8 bits (not needed????) pull block ; this will block until there is data in the FIFO queue and then it will pull it into the shift register - set y, {31 if rgbw else 23} ; set y to the number of bits to write counting 0, (23 if RGB, 31 if RGBW) + set y, 7 ; set y to the number of bits to write counting 0, (always 7 because we are doing one word at a time) mainloop: ; go through each bit in the shift register and jump to the appropriate label @@ -95,7 +99,15 @@ mainloop: out x, 1 jmp !x, writezero - jmp writeone + +writeone: + ; Write T1H and T1L bits to the output pin + set pins, 1 [{t1h}] +{nops_t1h} + set pins, 0 [{t1l}] +{nops_t1l} + jmp y--, mainloop + jmp awaiting_data writezero: ; Write T0H and T0L bits to the output pin @@ -106,14 +118,7 @@ writezero: jmp y--, mainloop jmp awaiting_data -writeone: - ; Write T1H and T1L bits to the output pin - set pins, 1 [{t1h}] -{nops_t1h} - set pins, 0 [{t1l}] -{nops_t1l} - jmp y--, mainloop - jmp awaiting_data + .wrap""" @@ -139,7 +144,15 @@ RP2040PIOLEDStripLightOutput = rp2040_pio_led_strip_ns.class_( RGBOrder = rp2040_pio_led_strip_ns.enum("RGBOrder") -Chipsets = rp2040_pio_led_strip_ns.enum("Chipset") +Chipset = rp2040_pio_led_strip_ns.enum("Chipset") + +CHIPSETS = { + "WS2812": Chipset.CHIPSET_WS2812, + "WS2812B": Chipset.CHIPSET_WS2812B, + "SK6812": Chipset.CHIPSET_SK6812, + "SM16703": Chipset.CHIPSET_SM16703, + "CUSTOM": Chipset.CHIPSET_CUSTOM, +} @dataclass @@ -159,10 +172,10 @@ RGB_ORDERS = { "BRG": RGBOrder.ORDER_BRG, } -CHIPSETS = { - "WS2812": LEDStripTimings(20, 43, 41, 31), - "WS2812B": LEDStripTimings(23, 46, 46, 23), - "SK6812": LEDStripTimings(17, 52, 31, 31), +CHIPSET_TIMINGS = { + "WS2812": LEDStripTimings(20, 40, 46, 34), + "WS2812B": LEDStripTimings(23, 49, 46, 26), + "SK6812": LEDStripTimings(17, 52, 34, 34), "SM16703": LEDStripTimings(17, 52, 52, 17), } @@ -192,7 +205,7 @@ CONFIG_SCHEMA = cv.All( cv.Required(CONF_NUM_LEDS): cv.positive_not_null_int, cv.Required(CONF_RGB_ORDER): cv.enum(RGB_ORDERS, upper=True), cv.Required(CONF_PIO): cv.one_of(0, 1, int=True), - cv.Optional(CONF_CHIPSET): cv.one_of(*CHIPSETS, upper=True), + cv.Optional(CONF_CHIPSET): cv.enum(CHIPSETS, upper=True), cv.Optional(CONF_IS_RGBW, default=False): cv.boolean, cv.Inclusive( CONF_BIT0_HIGH, @@ -238,7 +251,8 @@ async def to_code(config): key = f"led_strip_{id}" - if CONF_CHIPSET in config: + if chipset := config.get(CONF_CHIPSET): + cg.add(var.set_chipset(chipset)) _LOGGER.info("Generating PIO assembly code") rp2040.add_pio_file( __name__, @@ -246,13 +260,14 @@ async def to_code(config): generate_assembly_code( id, config[CONF_IS_RGBW], - CHIPSETS[config[CONF_CHIPSET]].T0H, - CHIPSETS[config[CONF_CHIPSET]].T0L, - CHIPSETS[config[CONF_CHIPSET]].T1H, - CHIPSETS[config[CONF_CHIPSET]].T1L, + CHIPSET_TIMINGS[chipset].T0H, + CHIPSET_TIMINGS[chipset].T0L, + CHIPSET_TIMINGS[chipset].T1H, + CHIPSET_TIMINGS[chipset].T1L, ), ) else: + cg.add(var.set_chipset(Chipset.CHIPSET_CUSTOM)) _LOGGER.info("Generating custom PIO assembly code") rp2040.add_pio_file( __name__, From 08509f775529a0ed07b3d0958208cc9f5cb51d86 Mon Sep 17 00:00:00 2001 From: heggi Date: Thu, 16 May 2024 03:35:17 +0400 Subject: [PATCH 202/313] Mirage remote receiver & transmitter (#6479) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/remote_base/__init__.py | 38 +++++++++ .../remote_base/mirage_protocol.cpp | 84 +++++++++++++++++++ .../components/remote_base/mirage_protocol.h | 39 +++++++++ .../remote_receiver/esp32-common.yaml | 4 + .../remote_receiver/test.esp8266.yaml | 4 + .../remote_transmitter/common-buttons.yaml | 5 ++ 6 files changed, 174 insertions(+) create mode 100644 esphome/components/remote_base/mirage_protocol.cpp create mode 100644 esphome/components/remote_base/mirage_protocol.h diff --git a/esphome/components/remote_base/__init__.py b/esphome/components/remote_base/__init__.py index 8a1d50d1c6..9d49026aa3 100644 --- a/esphome/components/remote_base/__init__.py +++ b/esphome/components/remote_base/__init__.py @@ -1913,3 +1913,41 @@ async def abbwelcome_action(var, config, args): cg.add(var.set_data_template(template_)) else: cg.add(var.set_data_static(data_)) + + +# Mirage +( + MirageData, + MirageBinarySensor, + MirageTrigger, + MirageAction, + MirageDumper, +) = declare_protocol("Mirage") + +MIRAGE_SCHEMA = cv.Schema( + { + cv.Required(CONF_CODE): cv.All([cv.hex_uint8_t], cv.Length(min=14, max=14)), + } +) + + +@register_binary_sensor("mirage", MirageBinarySensor, MIRAGE_SCHEMA) +def mirage_binary_sensor(var, config): + cg.add(var.set_code(config[CONF_CODE])) + + +@register_trigger("mirage", MirageTrigger, MirageData) +def mirage_trigger(var, config): + pass + + +@register_dumper("mirage", MirageDumper) +def mirage_dumper(var, config): + pass + + +@register_action("mirage", MirageAction, MIRAGE_SCHEMA) +async def mirage_action(var, config, args): + vec_ = cg.std_vector.template(cg.uint8) + template_ = await cg.templatable(config[CONF_CODE], args, vec_, vec_) + cg.add(var.set_code(template_)) diff --git a/esphome/components/remote_base/mirage_protocol.cpp b/esphome/components/remote_base/mirage_protocol.cpp new file mode 100644 index 0000000000..10d644a1cd --- /dev/null +++ b/esphome/components/remote_base/mirage_protocol.cpp @@ -0,0 +1,84 @@ +#include "mirage_protocol.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace remote_base { + +static const char *const TAG = "remote.mirage"; + +constexpr uint32_t HEADER_MARK_US = 8360; +constexpr uint32_t HEADER_SPACE_US = 4248; +constexpr uint32_t BIT_MARK_US = 554; +constexpr uint32_t BIT_ONE_SPACE_US = 1592; +constexpr uint32_t BIT_ZERO_SPACE_US = 545; + +constexpr unsigned int MIRAGE_IR_PACKET_BIT_SIZE = 120; + +void MirageProtocol::encode(RemoteTransmitData *dst, const MirageData &data) { + ESP_LOGI(TAG, "Transive Mirage: %s", format_hex_pretty(data.data).c_str()); + dst->set_carrier_frequency(38000); + dst->reserve(5 + ((data.data.size() + 1) * 2)); + dst->mark(HEADER_MARK_US); + dst->space(HEADER_SPACE_US); + dst->mark(BIT_MARK_US); + uint8_t checksum = 0; + for (uint8_t item : data.data) { + this->encode_byte_(dst, item); + checksum += (item >> 4) + (item & 0xF); + } + this->encode_byte_(dst, checksum); +} + +void MirageProtocol::encode_byte_(RemoteTransmitData *dst, uint8_t item) { + for (uint8_t b = 0; b < 8; b++) { + if (item & (1UL << b)) { + dst->space(BIT_ONE_SPACE_US); + } else { + dst->space(BIT_ZERO_SPACE_US); + } + dst->mark(BIT_MARK_US); + } +} + +optional MirageProtocol::decode(RemoteReceiveData src) { + if (!src.expect_item(HEADER_MARK_US, HEADER_SPACE_US)) { + return {}; + } + if (!src.expect_mark(BIT_MARK_US)) { + return {}; + } + size_t size = src.size() - src.get_index() - 1; + if (size < MIRAGE_IR_PACKET_BIT_SIZE * 2) + return {}; + size = MIRAGE_IR_PACKET_BIT_SIZE * 2; + uint8_t checksum = 0; + MirageData out; + while (size > 0) { + uint8_t data = 0; + for (uint8_t b = 0; b < 8; b++) { + if (src.expect_space(BIT_ONE_SPACE_US)) { + data |= (1UL << b); + } else if (!src.expect_space(BIT_ZERO_SPACE_US)) { + return {}; + } + if (!src.expect_mark(BIT_MARK_US)) { + return {}; + } + size -= 2; + } + if (size > 0) { + checksum += (data >> 4) + (data & 0xF); + out.data.push_back(data); + } else if (checksum != data) { + return {}; + } + } + return out; +} + +void MirageProtocol::dump(const MirageData &data) { + ESP_LOGI(TAG, "Received Mirage: %s", format_hex_pretty(data.data).c_str()); +} + +} // namespace remote_base +} // namespace esphome diff --git a/esphome/components/remote_base/mirage_protocol.h b/esphome/components/remote_base/mirage_protocol.h new file mode 100644 index 0000000000..4257f7fa00 --- /dev/null +++ b/esphome/components/remote_base/mirage_protocol.h @@ -0,0 +1,39 @@ +#pragma once + +#include "esphome/core/component.h" +#include "remote_base.h" + +namespace esphome { +namespace remote_base { + +struct MirageData { + std::vector data; + + bool operator==(const MirageData &rhs) const { return data == rhs.data; } +}; + +class MirageProtocol : public RemoteProtocol { + public: + void encode(RemoteTransmitData *dst, const MirageData &data) override; + optional decode(RemoteReceiveData src) override; + void dump(const MirageData &data) override; + + protected: + void encode_byte_(RemoteTransmitData *dst, uint8_t item); +}; + +DECLARE_REMOTE_PROTOCOL(Mirage) + +template class MirageAction : public RemoteTransmitterActionBase { + public: + TEMPLATABLE_VALUE(std::vector, code) + + void encode(RemoteTransmitData *dst, Ts... x) override { + MirageData data{}; + data.data = this->code_.value(x...); + MirageProtocol().encode(dst, data); + } +}; + +} // namespace remote_base +} // namespace esphome diff --git a/tests/components/remote_receiver/esp32-common.yaml b/tests/components/remote_receiver/esp32-common.yaml index 0e71143fc3..c2b5a2cf19 100644 --- a/tests/components/remote_receiver/esp32-common.yaml +++ b/tests/components/remote_receiver/esp32-common.yaml @@ -143,6 +143,10 @@ remote_receiver: - logger.log: format: "on_toshiba_ac: %llu %llu" args: ["x.rc_code_1", "x.rc_code_2"] + on_mirage: + then: + - lambda: |- + ESP_LOGD("mirage", "Mirage data: %s", format_hex(x.data).c_str()); binary_sensor: - platform: remote_receiver diff --git a/tests/components/remote_receiver/test.esp8266.yaml b/tests/components/remote_receiver/test.esp8266.yaml index e96f031e90..27d36d4a16 100644 --- a/tests/components/remote_receiver/test.esp8266.yaml +++ b/tests/components/remote_receiver/test.esp8266.yaml @@ -142,6 +142,10 @@ remote_receiver: - logger.log: format: "on_toshiba_ac: %llu %llu" args: ["x.rc_code_1", "x.rc_code_2"] + on_mirage: + then: + - lambda: |- + ESP_LOGD("mirage", "Mirage data: %s", format_hex(x.data).c_str()); binary_sensor: - platform: remote_receiver diff --git a/tests/components/remote_transmitter/common-buttons.yaml b/tests/components/remote_transmitter/common-buttons.yaml index 27683b387f..e727017e85 100644 --- a/tests/components/remote_transmitter/common-buttons.yaml +++ b/tests/components/remote_transmitter/common-buttons.yaml @@ -176,6 +176,11 @@ button: 0x00, 0x05, ] + - platform: template + name: Mirage + on_press: + remote_transmitter.transmit_mirage: + code: [0x56, 0x77, 0x00, 0x00, 0x22, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] - platform: template name: Dooya on_press: From 2921831b55b327d1670ee92b8b33163867fa7434 Mon Sep 17 00:00:00 2001 From: shxshxshxshx Date: Thu, 16 May 2024 01:37:53 +0200 Subject: [PATCH 203/313] WPA2 Enterprise - Explicitly set TTLS Phase 2 (#6436) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/wifi/__init__.py | 13 +++++++++++++ esphome/components/wifi/wifi_component.cpp | 15 +++++++++++++++ esphome/components/wifi/wifi_component.h | 8 ++++++++ .../components/wifi/wifi_component_esp_idf.cpp | 5 +++++ esphome/const.py | 1 + 5 files changed, 42 insertions(+) diff --git a/esphome/components/wifi/__init__.py b/esphome/components/wifi/__init__.py index e0a17e9a2a..3b9e00956f 100644 --- a/esphome/components/wifi/__init__.py +++ b/esphome/components/wifi/__init__.py @@ -33,6 +33,7 @@ from esphome.const import ( CONF_KEY, CONF_USERNAME, CONF_EAP, + CONF_TTLS_PHASE_2, CONF_ON_CONNECT, CONF_ON_DISCONNECT, ) @@ -98,6 +99,14 @@ STA_MANUAL_IP_SCHEMA = AP_MANUAL_IP_SCHEMA.extend( } ) +TTLS_PHASE_2 = { + "pap": cg.global_ns.ESP_EAP_TTLS_PHASE2_PAP, + "chap": cg.global_ns.ESP_EAP_TTLS_PHASE2_CHAP, + "mschap": cg.global_ns.ESP_EAP_TTLS_PHASE2_MSCHAP, + "mschapv2": cg.global_ns.ESP_EAP_TTLS_PHASE2_MSCHAPV2, + "eap": cg.global_ns.ESP_EAP_TTLS_PHASE2_EAP, +} + EAP_AUTH_SCHEMA = cv.All( cv.Schema( { @@ -105,6 +114,9 @@ EAP_AUTH_SCHEMA = cv.All( cv.Optional(CONF_USERNAME): cv.string_strict, cv.Optional(CONF_PASSWORD): cv.string_strict, cv.Optional(CONF_CERTIFICATE_AUTHORITY): wpa2_eap.validate_certificate, + cv.Optional(CONF_TTLS_PHASE_2): cv.All( + cv.enum(TTLS_PHASE_2), cv.only_with_esp_idf + ), cv.Inclusive( CONF_CERTIFICATE, "certificate_and_key" ): wpa2_eap.validate_certificate, @@ -338,6 +350,7 @@ def eap_auth(config): ("ca_cert", ca_cert), ("client_cert", client_cert), ("client_key", key), + ("ttls_phase_2", config.get(CONF_TTLS_PHASE_2, TTLS_PHASE_2["mschapv2"])), ) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 7e245d3e86..f4a44b03a4 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -1,5 +1,10 @@ #include "wifi_component.h" #include +#include + +#ifdef USE_ESP_IDF +#include +#endif #if defined(USE_ESP32) || defined(USE_ESP_IDF) #include @@ -318,6 +323,16 @@ void WiFiComponent::start_connecting(const WiFiAP &ap, bool two) { ESP_LOGV(TAG, " Identity: " LOG_SECRET("'%s'"), eap_config.identity.c_str()); ESP_LOGV(TAG, " Username: " LOG_SECRET("'%s'"), eap_config.username.c_str()); ESP_LOGV(TAG, " Password: " LOG_SECRET("'%s'"), eap_config.password.c_str()); +#ifdef USE_ESP_IDF +#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE + std::map phase2types = {{ESP_EAP_TTLS_PHASE2_PAP, "pap"}, + {ESP_EAP_TTLS_PHASE2_CHAP, "chap"}, + {ESP_EAP_TTLS_PHASE2_MSCHAP, "mschap"}, + {ESP_EAP_TTLS_PHASE2_MSCHAPV2, "mschapv2"}, + {ESP_EAP_TTLS_PHASE2_EAP, "eap"}}; + ESP_LOGV(TAG, " TTLS Phase 2: " LOG_SECRET("'%s'"), phase2types[eap_config.ttls_phase_2].c_str()); +#endif +#endif bool ca_cert_present = eap_config.ca_cert != nullptr && strlen(eap_config.ca_cert); bool client_cert_present = eap_config.client_cert != nullptr && strlen(eap_config.client_cert); bool client_key_present = eap_config.client_key != nullptr && strlen(eap_config.client_key); diff --git a/esphome/components/wifi/wifi_component.h b/esphome/components/wifi/wifi_component.h index 133fa2970c..0b077819ae 100644 --- a/esphome/components/wifi/wifi_component.h +++ b/esphome/components/wifi/wifi_component.h @@ -19,6 +19,10 @@ #include #endif +#if defined(USE_ESP_IDF) && defined(USE_WIFI_WPA2_EAP) +#include +#endif + #ifdef USE_ESP8266 #include #include @@ -102,6 +106,10 @@ struct EAPAuth { // used for EAP-TLS const char *client_cert; const char *client_key; +// used for EAP-TTLS +#ifdef USE_ESP_IDF + esp_eap_ttls_phase2_types ttls_phase_2; +#endif }; #endif // USE_WIFI_WPA2_EAP diff --git a/esphome/components/wifi/wifi_component_esp_idf.cpp b/esphome/components/wifi/wifi_component_esp_idf.cpp index ebb2fb92ea..5489a5d249 100644 --- a/esphome/components/wifi/wifi_component_esp_idf.cpp +++ b/esphome/components/wifi/wifi_component_esp_idf.cpp @@ -396,6 +396,11 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { if (err != ESP_OK) { ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_password failed! %d", err); } + // set TTLS Phase 2, defaults to MSCHAPV2 + err = esp_wifi_sta_wpa2_ent_set_ttls_phase2_method(eap.ttls_phase_2); + if (err != ESP_OK) { + ESP_LOGV(TAG, "esp_wifi_sta_wpa2_ent_set_ttls_phase2_method failed! %d", err); + } } err = esp_wifi_sta_wpa2_ent_enable(); if (err != ESP_OK) { diff --git a/esphome/const.py b/esphome/const.py index eb48080040..7745cca321 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -856,6 +856,7 @@ CONF_TRANSFORM = "transform" CONF_TRANSITION_LENGTH = "transition_length" CONF_TRIGGER_ID = "trigger_id" CONF_TRIGGER_PIN = "trigger_pin" +CONF_TTLS_PHASE_2 = "ttls_phase_2" CONF_TUNE_ANTENNA = "tune_antenna" CONF_TURN_OFF_ACTION = "turn_off_action" CONF_TURN_ON_ACTION = "turn_on_action" From 7d804bf90f646b669f5d46df7e1d9edca2988109 Mon Sep 17 00:00:00 2001 From: Shawn Wilsher <656602+sdwilsh@users.noreply.github.com> Date: Wed, 15 May 2024 16:39:57 -0700 Subject: [PATCH 204/313] Fix Prometheus Output to Match Spec (#6032) --- .../prometheus/prometheus_handler.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/esphome/components/prometheus/prometheus_handler.cpp b/esphome/components/prometheus/prometheus_handler.cpp index 68bca95a21..09913bd713 100644 --- a/esphome/components/prometheus/prometheus_handler.cpp +++ b/esphome/components/prometheus/prometheus_handler.cpp @@ -65,8 +65,8 @@ std::string PrometheusHandler::relabel_name_(EntityBase *obj) { // Type-specific implementation #ifdef USE_SENSOR void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_sensor_value GAUGE\n")); - stream->print(F("#TYPE esphome_sensor_failed GAUGE\n")); + stream->print(F("#TYPE esphome_sensor_value gauge\n")); + stream->print(F("#TYPE esphome_sensor_failed gauge\n")); } void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj) { if (obj->is_internal() && !this->include_internal_) @@ -102,8 +102,8 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor // Type-specific implementation #ifdef USE_BINARY_SENSOR void PrometheusHandler::binary_sensor_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_binary_sensor_value GAUGE\n")); - stream->print(F("#TYPE esphome_binary_sensor_failed GAUGE\n")); + stream->print(F("#TYPE esphome_binary_sensor_value gauge\n")); + stream->print(F("#TYPE esphome_binary_sensor_failed gauge\n")); } void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj) { if (obj->is_internal() && !this->include_internal_) @@ -136,10 +136,10 @@ void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_s #ifdef USE_FAN void PrometheusHandler::fan_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_fan_value GAUGE\n")); - stream->print(F("#TYPE esphome_fan_failed GAUGE\n")); - stream->print(F("#TYPE esphome_fan_speed GAUGE\n")); - stream->print(F("#TYPE esphome_fan_oscillation GAUGE\n")); + stream->print(F("#TYPE esphome_fan_value gauge\n")); + stream->print(F("#TYPE esphome_fan_failed gauge\n")); + stream->print(F("#TYPE esphome_fan_speed gauge\n")); + stream->print(F("#TYPE esphome_fan_oscillation gauge\n")); } void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) { if (obj->is_internal() && !this->include_internal_) @@ -182,9 +182,9 @@ void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) { #ifdef USE_LIGHT void PrometheusHandler::light_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_light_state GAUGE\n")); - stream->print(F("#TYPE esphome_light_color GAUGE\n")); - stream->print(F("#TYPE esphome_light_effect_active GAUGE\n")); + stream->print(F("#TYPE esphome_light_state gauge\n")); + stream->print(F("#TYPE esphome_light_color gauge\n")); + stream->print(F("#TYPE esphome_light_effect_active gauge\n")); } void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj) { if (obj->is_internal() && !this->include_internal_) @@ -259,8 +259,8 @@ void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightStat #ifdef USE_COVER void PrometheusHandler::cover_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_cover_value GAUGE\n")); - stream->print(F("#TYPE esphome_cover_failed GAUGE\n")); + stream->print(F("#TYPE esphome_cover_value gauge\n")); + stream->print(F("#TYPE esphome_cover_failed gauge\n")); } void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj) { if (obj->is_internal() && !this->include_internal_) @@ -302,8 +302,8 @@ void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *ob #ifdef USE_SWITCH void PrometheusHandler::switch_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_switch_value GAUGE\n")); - stream->print(F("#TYPE esphome_switch_failed GAUGE\n")); + stream->print(F("#TYPE esphome_switch_value gauge\n")); + stream->print(F("#TYPE esphome_switch_failed gauge\n")); } void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj) { if (obj->is_internal() && !this->include_internal_) @@ -326,8 +326,8 @@ void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch #ifdef USE_LOCK void PrometheusHandler::lock_type_(AsyncResponseStream *stream) { - stream->print(F("#TYPE esphome_lock_value GAUGE\n")); - stream->print(F("#TYPE esphome_lock_failed GAUGE\n")); + stream->print(F("#TYPE esphome_lock_value gauge\n")); + stream->print(F("#TYPE esphome_lock_failed gauge\n")); } void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj) { if (obj->is_internal() && !this->include_internal_) From f0ec900e4841a32023491f8482af3c4a07432adb Mon Sep 17 00:00:00 2001 From: Andrew McFague <144809+amcfague@users.noreply.github.com> Date: Wed, 15 May 2024 16:49:04 -0700 Subject: [PATCH 205/313] Skip gpio validation (#5615) --- esphome/components/esp32/gpio.py | 40 ++++++++++++++++++++-- esphome/components/esp32_touch/__init__.py | 2 +- esphome/const.py | 1 + esphome/pins.py | 2 ++ tests/test8.yaml | 13 +++++++ 5 files changed, 54 insertions(+), 4 deletions(-) diff --git a/esphome/components/esp32/gpio.py b/esphome/components/esp32/gpio.py index 16f99f2b15..0d9cb5daf0 100644 --- a/esphome/components/esp32/gpio.py +++ b/esphome/components/esp32/gpio.py @@ -1,5 +1,6 @@ from dataclasses import dataclass from typing import Any +import logging from esphome.const import ( CONF_ID, @@ -8,6 +9,7 @@ from esphome.const import ( CONF_NUMBER, CONF_OPEN_DRAIN, CONF_OUTPUT, + CONF_IGNORE_PIN_VALIDATION_ERROR, CONF_IGNORE_STRAPPING_WARNING, PLATFORM_ESP32, ) @@ -42,6 +44,9 @@ from .gpio_esp32_h2 import esp32_h2_validate_gpio_pin, esp32_h2_validate_support ESP32InternalGPIOPin = esp32_ns.class_("ESP32InternalGPIOPin", cg.InternalGPIOPin) +_LOGGER = logging.getLogger(__name__) + + def _lookup_pin(value): board = CORE.data[KEY_ESP32][KEY_BOARD] board_pins = boards.ESP32_BOARD_PINS.get(board, {}) @@ -111,7 +116,7 @@ _esp32_validations = { } -def validate_gpio_pin(value): +def gpio_pin_number_validator(value): value = _translate_pin(value) board = CORE.data[KEY_ESP32][KEY_BOARD] board_pins = boards.ESP32_BOARD_PINS.get(board, {}) @@ -127,7 +132,33 @@ def validate_gpio_pin(value): if variant not in _esp32_validations: raise cv.Invalid(f"Unsupported ESP32 variant {variant}") - return _esp32_validations[variant].pin_validation(value) + return value + + +def validate_gpio_pin(pin): + variant = CORE.data[KEY_ESP32][KEY_VARIANT] + if variant not in _esp32_validations: + raise cv.Invalid(f"Unsupported ESP32 variant {variant}") + + ignore_pin_validation_warning = pin[CONF_IGNORE_PIN_VALIDATION_ERROR] + try: + pin[CONF_NUMBER] = _esp32_validations[variant].pin_validation(pin[CONF_NUMBER]) + except cv.Invalid as exc: + if not ignore_pin_validation_warning: + raise + + _LOGGER.warning( + "Ignoring validation error on pin %d; error: %s", + pin[CONF_NUMBER], + exc, + ) + else: + # Throw an exception if used for a pin that would not have resulted + # in a validation error anyway! + if ignore_pin_validation_warning: + raise cv.Invalid(f"GPIO{pin[CONF_NUMBER]} is not a reserved pin") + + return pin def validate_supports(value): @@ -158,9 +189,11 @@ DRIVE_STRENGTHS = { gpio_num_t = cg.global_ns.enum("gpio_num_t") CONF_DRIVE_STRENGTH = "drive_strength" + ESP32_PIN_SCHEMA = cv.All( - pins.gpio_base_schema(ESP32InternalGPIOPin, validate_gpio_pin).extend( + pins.gpio_base_schema(ESP32InternalGPIOPin, gpio_pin_number_validator).extend( { + cv.Optional(CONF_IGNORE_PIN_VALIDATION_ERROR, default=False): cv.boolean, cv.Optional(CONF_IGNORE_STRAPPING_WARNING, default=False): cv.boolean, cv.Optional(CONF_DRIVE_STRENGTH, default="20mA"): cv.All( cv.float_with_unit("current", "mA", optional_unit=True), @@ -168,6 +201,7 @@ ESP32_PIN_SCHEMA = cv.All( ), } ), + validate_gpio_pin, validate_supports, ) diff --git a/esphome/components/esp32_touch/__init__.py b/esphome/components/esp32_touch/__init__.py index 0180d18104..fc7bf200e4 100644 --- a/esphome/components/esp32_touch/__init__.py +++ b/esphome/components/esp32_touch/__init__.py @@ -150,7 +150,7 @@ TOUCH_PAD_WATERPROOF_SHIELD_DRIVER = { def validate_touch_pad(value): - value = gpio.validate_gpio_pin(value) + value = gpio.gpio_pin_number_validator(value) variant = get_esp32_variant() if variant not in TOUCH_PADS: raise cv.Invalid(f"ESP32 variant {variant} does not support touch pads.") diff --git a/esphome/const.py b/esphome/const.py index 7745cca321..616b686052 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -367,6 +367,7 @@ CONF_IDLE_TIME = "idle_time" CONF_IF = "if" CONF_IGNORE_EFUSE_MAC_CRC = "ignore_efuse_mac_crc" CONF_IGNORE_OUT_OF_RANGE = "ignore_out_of_range" +CONF_IGNORE_PIN_VALIDATION_ERROR = "ignore_pin_validation_error" CONF_IGNORE_STRAPPING_WARNING = "ignore_strapping_warning" CONF_IIR_FILTER = "iir_filter" CONF_ILLUMINANCE = "illuminance" diff --git a/esphome/pins.py b/esphome/pins.py index d02ad357a0..5ccb696738 100644 --- a/esphome/pins.py +++ b/esphome/pins.py @@ -327,6 +327,8 @@ def gpio_base_schema( cv.Optional(CONF_MODE, default={}): cv.All(mode_dict, mode_validator), } ) + if invertable: return schema.extend({cv.Optional(CONF_INVERTED, default=False): cv.boolean}) + return schema diff --git a/tests/test8.yaml b/tests/test8.yaml index 5a8ae77468..fcc93c6154 100644 --- a/tests/test8.yaml +++ b/tests/test8.yaml @@ -38,6 +38,11 @@ light: id: rgb_led name: "RGB LED" data_rate: 8MHz + - platform: binary + name: "Red Info Light" + output: board_info_ed + entity_category: diagnostic + restore_mode: ALWAYS_OFF spi: id: spi_id_1 @@ -73,6 +78,14 @@ i2c: scl: GPIO18 sda: GPIO8 +output: + - platform: gpio + id: board_info_ed + pin: + # This pin is reserved on the ESP32S3! + number: 26 + ignore_pin_validation_error: true + touchscreen: - platform: tt21100 display: displ8 From f2ef06d8b538deee919efbc396040eee502fd22c Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 13:19:37 +1200 Subject: [PATCH 206/313] [core] Migrate to pyproject.toml (#6737) --- setup.cfg => .flake8 | 51 +++++++++------------------ docker/Dockerfile | 4 +-- pyproject.toml | 53 ++++++++++++++++++++++++++++ script/setup | 6 ++-- setup.py | 82 -------------------------------------------- 5 files changed, 74 insertions(+), 122 deletions(-) rename setup.cfg => .flake8 (56%) delete mode 100755 setup.py diff --git a/setup.cfg b/.flake8 similarity index 56% rename from setup.cfg rename to .flake8 index b3cfbba6a1..2724da06b6 100644 --- a/setup.cfg +++ b/.flake8 @@ -1,19 +1,3 @@ -[metadata] -license = MIT -license_file = LICENSE -platforms = any -description = Make creating custom firmwares for ESP32/ESP8266 super easy. -long_description = file: README.md -keywords = home, automation -classifier = - Environment :: Console - Intended Audience :: Developers - Intended Audience :: End Users/Desktop - License :: OSI Approved :: MIT License - Programming Language :: C++ - Programming Language :: Python :: 3 - Topic :: Home Automation - [flake8] max-line-length = 120 # Following 4 for black compatibility @@ -37,25 +21,22 @@ max-line-length = 120 # D401 First line should be in imperative mood ignore = - E501, - W503, - E203, - D202, + E501, + W503, + E203, + D202, - D100, - D101, - D102, - D103, - D104, - D105, - D107, - D200, - D205, - D209, - D400, - D401, + D100, + D101, + D102, + D103, + D104, + D105, + D107, + D200, + D205, + D209, + D400, + D401, exclude = api_pb2.py - -[bdist_wheel] -universal = 1 diff --git a/docker/Dockerfile b/docker/Dockerfile index 5d9ece16a1..3c661b7e1c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -110,7 +110,7 @@ RUN if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ fi; \ pip3 install \ - --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome + --break-system-packages --no-cache-dir -e /esphome # Settings for dashboard ENV USERNAME="" PASSWORD="" @@ -160,7 +160,7 @@ RUN if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \ export PIP_EXTRA_INDEX_URL="https://www.piwheels.org/simple"; \ fi; \ pip3 install \ - --break-system-packages --no-cache-dir --no-use-pep517 -e /esphome + --break-system-packages --no-cache-dir -e /esphome # Labels LABEL \ diff --git a/pyproject.toml b/pyproject.toml index a49abb7b3d..aa524e2d62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,56 @@ +[build-system] +requires = ["setuptools==69.2.0", "wheel~=0.43.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "esphome" +license = {text = "MIT"} +description = "Make creating custom firmwares for ESP32/ESP8266 super easy." +readme = "README.md" +authors = [ + {name = "The ESPHome Authors", email = "esphome@nabucasa.com"} +] +keywords = ["home", "automation"] +classifiers = [ + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: End Users/Desktop", + "License :: OSI Approved :: MIT License", + "Programming Language :: C++", + "Programming Language :: Python :: 3", + "Topic :: Home Automation", +] +requires-python = ">=3.9.0" + +dynamic = ["dependencies", "optional-dependencies", "version"] + +[project.urls] +"Documentation" = "https://esphome.io" +"Source Code" = "https://github.com/esphome/esphome" +"Bug Tracker" = "https://github.com/esphome/issues/issues" +"Feature Request Tracker" = "https://github.com/esphome/feature-requests/issues" +"Discord" = "https://discord.gg/KhAMKrd" +"Forum" = "https://community.home-assistant.io/c/esphome" +"Twitter" = "https://twitter.com/esphome_" + +[project.scripts] +esphome = "esphome.__main__:main" + +[tool.setuptools] +platforms = ["any"] +zip-safe = false +include-package-data = true + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements.txt"]} +optional-dependencies.dev = { file = ["requirements_dev.txt"] } +optional-dependencies.test = { file = ["requirements_test.txt"] } +optional-dependencies.displays = { file = ["requirements_optional.txt"] } +version = {attr = "esphome.const.__version__"} + +[tool.setuptools.packages.find] +include = ["esphome*"] + [tool.black] target-version = ["py39", "py310"] exclude = 'generated' diff --git a/script/setup b/script/setup index f286b4672a..71573a9352 100755 --- a/script/setup +++ b/script/setup @@ -10,17 +10,17 @@ if [ ! -n "$DEVCONTAINER" ] && [ ! -n "$VIRTUAL_ENV" ] && [ ! "$ESPHOME_NO_VENV" if [ -f venv/Scripts/activate ]; then location="venv/Scripts/activate" fi - source $location; + source $location fi # Avoid unsafe git error when running inside devcontainer -if [ -n "$DEVCONTAINER" ];then +if [ -n "$DEVCONTAINER" ]; then git config --global --add safe.directory "$PWD" fi pip3 install -r requirements.txt -r requirements_optional.txt -r requirements_test.txt -r requirements_dev.txt pip3 install setuptools wheel -pip3 install --no-use-pep517 -e . +pip3 install -e --config-settings editable_mode=compat ".[dev,test,displays]" pre-commit install diff --git a/setup.py b/setup.py deleted file mode 100755 index 95453960ff..0000000000 --- a/setup.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python3 -"""esphome setup script.""" -import os - -from setuptools import setup, find_packages - -from esphome import const - -PROJECT_NAME = "esphome" -PROJECT_PACKAGE_NAME = "esphome" -PROJECT_LICENSE = "MIT" -PROJECT_AUTHOR = "ESPHome" -PROJECT_COPYRIGHT = "2019, ESPHome" -PROJECT_URL = "https://esphome.io/" -PROJECT_EMAIL = "esphome@nabucasa.com" - -PROJECT_GITHUB_USERNAME = "esphome" -PROJECT_GITHUB_REPOSITORY = "esphome" - -PYPI_URL = f"https://pypi.python.org/pypi/{PROJECT_PACKAGE_NAME}" -GITHUB_PATH = f"{PROJECT_GITHUB_USERNAME}/{PROJECT_GITHUB_REPOSITORY}" -GITHUB_URL = f"https://github.com/{GITHUB_PATH}" - -DOWNLOAD_URL = f"{GITHUB_URL}/archive/{const.__version__}.zip" - -here = os.path.abspath(os.path.dirname(__file__)) - -with open(os.path.join(here, "requirements.txt")) as requirements_txt: - REQUIRES = requirements_txt.read().splitlines() - -with open(os.path.join(here, "README.md")) as readme: - LONG_DESCRIPTION = readme.read() - -# If you have problems importing platformio and esptool as modules you can set -# $ESPHOME_USE_SUBPROCESS to make ESPHome call their executables instead. -# This means they have to be in your $PATH. -if "ESPHOME_USE_SUBPROCESS" in os.environ: - # Remove platformio and esptool from requirements - REQUIRES = [ - req - for req in REQUIRES - if not any(req.startswith(prefix) for prefix in ["platformio", "esptool"]) - ] - -CLASSIFIERS = [ - "Environment :: Console", - "Intended Audience :: Developers", - "Intended Audience :: End Users/Desktop", - "License :: OSI Approved :: MIT License", - "Programming Language :: C++", - "Programming Language :: Python :: 3", - "Topic :: Home Automation", -] - -setup( - name=PROJECT_PACKAGE_NAME, - version=const.__version__, - license=PROJECT_LICENSE, - url=GITHUB_URL, - project_urls={ - "Bug Tracker": "https://github.com/esphome/issues/issues", - "Feature Request Tracker": "https://github.com/esphome/feature-requests/issues", - "Source Code": "https://github.com/esphome/esphome", - "Documentation": "https://esphome.io", - "Twitter": "https://twitter.com/esphome_", - }, - download_url=DOWNLOAD_URL, - author=PROJECT_AUTHOR, - author_email=PROJECT_EMAIL, - description="Make creating custom firmwares for ESP32/ESP8266 super easy.", - long_description=LONG_DESCRIPTION, - long_description_content_type="text/markdown", - include_package_data=True, - zip_safe=False, - platforms="any", - test_suite="tests", - python_requires=">=3.9.0", - install_requires=REQUIRES, - keywords=["home", "automation"], - entry_points={"console_scripts": ["esphome = esphome.__main__:main"]}, - packages=find_packages(include="esphome.*"), -) From bf48ccaf22a32e11e9974cf888bed1e424de8822 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 13:20:12 +1200 Subject: [PATCH 207/313] [core] Move pytest config into pyproject.toml (#6740) --- pyproject.toml | 9 +++++++++ pytest.ini | 4 ---- 2 files changed, 9 insertions(+), 4 deletions(-) delete mode 100644 pytest.ini diff --git a/pyproject.toml b/pyproject.toml index aa524e2d62..4406165433 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,3 +54,12 @@ include = ["esphome*"] [tool.black] target-version = ["py39", "py310"] exclude = 'generated' + +[tool.pytest.ini_options] +testpaths = [ + "tests", +] +addopts = [ + "--cov=esphome", + "--cov-branch", +] diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index a91a2ea200..0000000000 --- a/pytest.ini +++ /dev/null @@ -1,4 +0,0 @@ -[pytest] -addopts = - --cov=esphome - --cov-branch From a27c05483cf3d20f98ea8db392dde5b277ff2337 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 13:47:36 +1200 Subject: [PATCH 208/313] [core] Move pylint config into pyproject.toml (#6739) --- pylintrc | 30 ------------------------------ pyproject.toml | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 30 deletions(-) delete mode 100644 pylintrc diff --git a/pylintrc b/pylintrc deleted file mode 100644 index b70e5c7da9..0000000000 --- a/pylintrc +++ /dev/null @@ -1,30 +0,0 @@ -[MASTER] -reports=no -ignore=api_pb2.py - -disable= - format, - missing-docstring, - fixme, - unused-argument, - global-statement, - too-few-public-methods, - too-many-lines, - too-many-locals, - too-many-ancestors, - too-many-branches, - too-many-statements, - too-many-arguments, - too-many-return-statements, - too-many-instance-attributes, - duplicate-code, - invalid-name, - cyclic-import, - redefined-builtin, - undefined-loop-variable, - useless-object-inheritance, - stop-iteration-return, - import-outside-toplevel, - # Broken - unsupported-membership-test, - unsubscriptable-object, diff --git a/pyproject.toml b/pyproject.toml index 4406165433..fe558f695f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,3 +63,45 @@ addopts = [ "--cov=esphome", "--cov-branch", ] + +[tool.pylint.MAIN] +py-version = "3.9" +ignore = [ + "api_pb2.py", +] +persistent = false + +[tool.pylint.REPORTS] +score = false + +[tool.pylint."MESSAGES CONTROL"] +disable = [ + "format", + "missing-docstring", + "fixme", + "unused-argument", + "global-statement", + "too-few-public-methods", + "too-many-lines", + "too-many-locals", + "too-many-ancestors", + "too-many-branches", + "too-many-statements", + "too-many-arguments", + "too-many-return-statements", + "too-many-instance-attributes", + "duplicate-code", + "invalid-name", + "cyclic-import", + "redefined-builtin", + "undefined-loop-variable", + "useless-object-inheritance", + "stop-iteration-return", + "import-outside-toplevel", + # Broken + "unsupported-membership-test", + "unsubscriptable-object", +] + +[tool.pylint.FORMAT] +expected-line-ending-format = "LF" From f91c31f093142d11225e1ca3d4fa79817a719490 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 13:47:56 +1200 Subject: [PATCH 209/313] [core] Fix running pylint via pre-commit from GUI apps (#6754) --- .pre-commit-config.yaml | 4 ++-- script/run-in-env.sh | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100755 script/run-in-env.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ce226846e3..418716e4f4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,6 +44,6 @@ repos: hooks: - id: pylint name: pylint - entry: pylint - language: system + entry: script/run-in-env.sh pylint + language: script types: [python] diff --git a/script/run-in-env.sh b/script/run-in-env.sh new file mode 100755 index 0000000000..2e05fe1d17 --- /dev/null +++ b/script/run-in-env.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh +set -eu + +my_path=$(git rev-parse --show-toplevel) + +for venv in venv .venv .; do + if [ -f "${my_path}/${venv}/bin/activate" ]; then + . "${my_path}/${venv}/bin/activate" + break + fi +done + +exec "$@" From f46c499c4e4598b95d24f546a2d2cbaa13206850 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 15 May 2024 21:01:09 -0500 Subject: [PATCH 210/313] Separate `OTABackend` from OTA component (#6459) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/__main__.py | 25 +- .../esp32_ble_tracker/esp32_ble_tracker.cpp | 13 +- esphome/components/esphome/ota/__init__.py | 72 ++++++ .../ota/ota_esphome.cpp} | 215 ++++++++---------- .../ota/ota_esphome.h} | 62 +---- esphome/components/ota/__init__.py | 106 ++++----- esphome/components/ota/automation.h | 19 +- esphome/components/ota/ota_backend.cpp | 20 ++ esphome/components/ota/ota_backend.h | 79 ++++++- .../ota/ota_backend_arduino_esp32.cpp | 5 +- .../ota/ota_backend_arduino_esp32.h | 6 +- .../ota/ota_backend_arduino_esp8266.cpp | 9 +- .../ota/ota_backend_arduino_esp8266.h | 5 +- .../ota/ota_backend_arduino_libretiny.cpp | 9 +- .../ota/ota_backend_arduino_libretiny.h | 5 +- .../ota/ota_backend_arduino_rp2040.cpp | 9 +- .../ota/ota_backend_arduino_rp2040.h | 7 +- .../components/ota/ota_backend_esp_idf.cpp | 13 +- esphome/components/ota/ota_backend_esp_idf.h | 8 +- .../components/safe_mode/button/__init__.py | 16 +- .../safe_mode/button/safe_mode_button.cpp | 2 +- .../safe_mode/button/safe_mode_button.h | 8 +- .../components/safe_mode/switch/__init__.py | 14 +- .../safe_mode/switch/safe_mode_switch.cpp | 4 +- .../safe_mode/switch/safe_mode_switch.h | 8 +- esphome/cpp_helpers.py | 21 +- esphome/wizard.py | 5 +- tests/components/ota/common.yaml | 51 +++-- tests/components/safe_mode/common.yaml | 2 + tests/dummy_main.cpp | 4 +- tests/test1.yaml | 47 ++-- tests/test11.5.yaml | 1 + tests/test2.yaml | 7 +- tests/test3.1.yaml | 3 +- tests/test3.yaml | 7 +- tests/test4.yaml | 5 +- tests/test5.yaml | 1 + tests/test6.yaml | 1 + tests/test9.1.yaml | 1 + tests/test9.yaml | 1 + 40 files changed, 505 insertions(+), 391 deletions(-) create mode 100644 esphome/components/esphome/ota/__init__.py rename esphome/components/{ota/ota_component.cpp => esphome/ota/ota_esphome.cpp} (66%) rename esphome/components/{ota/ota_component.h => esphome/ota/ota_esphome.h} (50%) create mode 100644 esphome/components/ota/ota_backend.cpp diff --git a/esphome/__main__.py b/esphome/__main__.py index daf74eebb0..9930119c86 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -18,22 +18,23 @@ from esphome.const import ( CONF_BAUD_RATE, CONF_BROKER, CONF_DEASSERT_RTS_DTR, + CONF_DISABLED, + CONF_ESPHOME, CONF_LOGGER, + CONF_MDNS, + CONF_MQTT, CONF_NAME, CONF_OTA, - CONF_MQTT, - CONF_MDNS, - CONF_DISABLED, CONF_PASSWORD, - CONF_PORT, - CONF_ESPHOME, + CONF_PLATFORM, CONF_PLATFORMIO_OPTIONS, + CONF_PORT, CONF_SUBSTITUTIONS, PLATFORM_BK72XX, - PLATFORM_RTL87XX, PLATFORM_ESP32, PLATFORM_ESP8266, PLATFORM_RP2040, + PLATFORM_RTL87XX, SECRETS_FILES, ) from esphome.core import CORE, EsphomeError, coroutine @@ -330,15 +331,19 @@ def upload_program(config, args, host): return 1 # Unknown target platform - if CONF_OTA not in config: + ota_conf = {} + for ota_item in config.get(CONF_OTA, []): + if ota_item[CONF_PLATFORM] == CONF_ESPHOME: + ota_conf = ota_item + break + + if not ota_conf: raise EsphomeError( - "Cannot upload Over the Air as the config does not include the ota: " - "component" + f"Cannot upload Over the Air as the {CONF_OTA} configuration is not present or does not include {CONF_PLATFORM}: {CONF_ESPHOME}" ) from esphome import espota2 - ota_conf = config[CONF_OTA] remote_port = ota_conf[CONF_PORT] password = ota_conf.get(CONF_PASSWORD, "") diff --git a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp index 4ae7929ded..d154d4e519 100644 --- a/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +++ b/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp @@ -18,7 +18,7 @@ #include #ifdef USE_OTA -#include "esphome/components/ota/ota_component.h" +#include "esphome/components/ota/ota_backend.h" #endif #ifdef USE_ARDUINO @@ -61,11 +61,12 @@ void ESP32BLETracker::setup() { this->scanner_idle_ = true; #ifdef USE_OTA - ota::global_ota_component->add_on_state_callback([this](ota::OTAState state, float progress, uint8_t error) { - if (state == ota::OTA_STARTED) { - this->stop_scan(); - } - }); + ota::get_global_ota_callback()->add_on_state_callback( + [this](ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) { + if (state == ota::OTA_STARTED) { + this->stop_scan(); + } + }); #endif } diff --git a/esphome/components/esphome/ota/__init__.py b/esphome/components/esphome/ota/__init__.py new file mode 100644 index 0000000000..abe9323b53 --- /dev/null +++ b/esphome/components/esphome/ota/__init__.py @@ -0,0 +1,72 @@ +from esphome.cpp_generator import RawExpression +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components.ota import BASE_OTA_SCHEMA, ota_to_code, OTAComponent +from esphome.const import ( + CONF_ID, + CONF_NUM_ATTEMPTS, + CONF_OTA, + CONF_PASSWORD, + CONF_PORT, + CONF_REBOOT_TIMEOUT, + CONF_SAFE_MODE, + CONF_VERSION, + KEY_PAST_SAFE_MODE, +) +from esphome.core import CORE, coroutine_with_priority + + +CODEOWNERS = ["@esphome/core"] +AUTO_LOAD = ["md5", "socket"] +DEPENDENCIES = ["network"] + +esphome = cg.esphome_ns.namespace("esphome") +ESPHomeOTAComponent = esphome.class_("ESPHomeOTAComponent", OTAComponent) + + +CONFIG_SCHEMA = ( + cv.Schema( + { + cv.GenerateID(): cv.declare_id(ESPHomeOTAComponent), + cv.Optional(CONF_SAFE_MODE, default=True): cv.boolean, + cv.Optional(CONF_VERSION, default=2): cv.one_of(1, 2, int=True), + cv.SplitDefault( + CONF_PORT, + esp8266=8266, + esp32=3232, + rp2040=2040, + bk72xx=8892, + rtl87xx=8892, + ): cv.port, + cv.Optional(CONF_PASSWORD): cv.string, + cv.Optional( + CONF_REBOOT_TIMEOUT, default="5min" + ): cv.positive_time_period_milliseconds, + cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int, + } + ) + .extend(BASE_OTA_SCHEMA) + .extend(cv.COMPONENT_SCHEMA) +) + + +@coroutine_with_priority(50.0) +async def to_code(config): + CORE.data[CONF_OTA] = {} + + var = cg.new_Pvariable(config[CONF_ID]) + await ota_to_code(var, config) + cg.add(var.set_port(config[CONF_PORT])) + if CONF_PASSWORD in config: + cg.add(var.set_auth_password(config[CONF_PASSWORD])) + cg.add_define("USE_OTA_PASSWORD") + cg.add_define("USE_OTA_VERSION", config[CONF_VERSION]) + + await cg.register_component(var, config) + + if config[CONF_SAFE_MODE]: + condition = var.should_enter_safe_mode( + config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT] + ) + cg.add(RawExpression(f"if ({condition}) return")) + CORE.data[CONF_OTA][KEY_PAST_SAFE_MODE] = True diff --git a/esphome/components/ota/ota_component.cpp b/esphome/components/esphome/ota/ota_esphome.cpp similarity index 66% rename from esphome/components/ota/ota_component.cpp rename to esphome/components/esphome/ota/ota_esphome.cpp index 15af14ff1a..f2f1cfc6a8 100644 --- a/esphome/components/ota/ota_component.cpp +++ b/esphome/components/esphome/ota/ota_esphome.cpp @@ -1,55 +1,34 @@ -#include "ota_component.h" -#include "ota_backend.h" -#include "ota_backend_arduino_esp32.h" -#include "ota_backend_arduino_esp8266.h" -#include "ota_backend_arduino_rp2040.h" -#include "ota_backend_arduino_libretiny.h" -#include "ota_backend_esp_idf.h" +#include "ota_esphome.h" -#include "esphome/core/log.h" -#include "esphome/core/application.h" -#include "esphome/core/hal.h" -#include "esphome/core/util.h" #include "esphome/components/md5/md5.h" #include "esphome/components/network/util.h" +#include "esphome/components/ota/ota_backend.h" +#include "esphome/components/ota/ota_backend_arduino_esp32.h" +#include "esphome/components/ota/ota_backend_arduino_esp8266.h" +#include "esphome/components/ota/ota_backend_arduino_libretiny.h" +#include "esphome/components/ota/ota_backend_arduino_rp2040.h" +#include "esphome/components/ota/ota_backend_esp_idf.h" +#include "esphome/core/application.h" +#include "esphome/core/hal.h" +#include "esphome/core/log.h" +#include "esphome/core/util.h" #include #include namespace esphome { -namespace ota { -static const char *const TAG = "ota"; +static const char *const TAG = "esphome.ota"; static constexpr u_int16_t OTA_BLOCK_SIZE = 8192; -OTAComponent *global_ota_component = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) - -std::unique_ptr make_ota_backend() { -#ifdef USE_ARDUINO -#ifdef USE_ESP8266 - return make_unique(); -#endif // USE_ESP8266 -#ifdef USE_ESP32 - return make_unique(); -#endif // USE_ESP32 -#endif // USE_ARDUINO -#ifdef USE_ESP_IDF - return make_unique(); -#endif // USE_ESP_IDF -#ifdef USE_RP2040 - return make_unique(); -#endif // USE_RP2040 -#ifdef USE_LIBRETINY - return make_unique(); +void ESPHomeOTAComponent::setup() { +#ifdef USE_OTA_STATE_CALLBACK + ota::register_ota_platform(this); #endif -} -OTAComponent::OTAComponent() { global_ota_component = this; } - -void OTAComponent::setup() { server_ = socket::socket_ip(SOCK_STREAM, 0); if (server_ == nullptr) { - ESP_LOGW(TAG, "Could not create socket."); + ESP_LOGW(TAG, "Could not create socket"); this->mark_failed(); return; } @@ -88,41 +67,39 @@ void OTAComponent::setup() { this->mark_failed(); return; } - - this->dump_config(); } -void OTAComponent::dump_config() { - ESP_LOGCONFIG(TAG, "Over-The-Air Updates:"); +void ESPHomeOTAComponent::dump_config() { + ESP_LOGCONFIG(TAG, "Over-The-Air updates:"); ESP_LOGCONFIG(TAG, " Address: %s:%u", network::get_use_address().c_str(), this->port_); + ESP_LOGCONFIG(TAG, " Version: %d", USE_OTA_VERSION); #ifdef USE_OTA_PASSWORD if (!this->password_.empty()) { - ESP_LOGCONFIG(TAG, " Using Password."); + ESP_LOGCONFIG(TAG, " Password configured"); } #endif - ESP_LOGCONFIG(TAG, " OTA version: %d.", USE_OTA_VERSION); if (this->has_safe_mode_ && this->safe_mode_rtc_value_ > 1 && - this->safe_mode_rtc_value_ != esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC) { - ESP_LOGW(TAG, "Last Boot was an unhandled reset, will proceed to safe mode in %" PRIu32 " restarts", + this->safe_mode_rtc_value_ != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { + ESP_LOGW(TAG, "Last reset occurred too quickly; safe mode will be invoked in %" PRIu32 " restarts", this->safe_mode_num_attempts_ - this->safe_mode_rtc_value_); } } -void OTAComponent::loop() { +void ESPHomeOTAComponent::loop() { this->handle_(); if (this->has_safe_mode_ && (millis() - this->safe_mode_start_time_) > this->safe_mode_enable_time_) { this->has_safe_mode_ = false; // successful boot, reset counter - ESP_LOGI(TAG, "Boot seems successful, resetting boot loop counter."); + ESP_LOGI(TAG, "Boot seems successful; resetting boot loop counter"); this->clean_rtc(); } } static const uint8_t FEATURE_SUPPORTS_COMPRESSION = 0x01; -void OTAComponent::handle_() { - OTAResponseTypes error_code = OTA_RESPONSE_ERROR_UNKNOWN; +void ESPHomeOTAComponent::handle_() { + ota::OTAResponseTypes error_code = ota::OTA_RESPONSE_ERROR_UNKNOWN; bool update_started = false; size_t total = 0; uint32_t last_progress = 0; @@ -130,7 +107,7 @@ void OTAComponent::handle_() { char *sbuf = reinterpret_cast(buf); size_t ota_size; uint8_t ota_features; - std::unique_ptr backend; + std::unique_ptr backend; (void) ota_features; #if USE_OTA_VERSION == 2 size_t size_acknowledged = 0; @@ -147,54 +124,54 @@ void OTAComponent::handle_() { int enable = 1; int err = client_->setsockopt(IPPROTO_TCP, TCP_NODELAY, &enable, sizeof(int)); if (err != 0) { - ESP_LOGW(TAG, "Socket could not enable tcp nodelay, errno: %d", errno); + ESP_LOGW(TAG, "Socket could not enable TCP nodelay, errno %d", errno); return; } - ESP_LOGD(TAG, "Starting OTA Update from %s...", this->client_->getpeername().c_str()); + ESP_LOGD(TAG, "Starting update from %s...", this->client_->getpeername().c_str()); this->status_set_warning(); #ifdef USE_OTA_STATE_CALLBACK - this->state_callback_.call(OTA_STARTED, 0.0f, 0); + this->state_callback_.call(ota::OTA_STARTED, 0.0f, 0); #endif if (!this->readall_(buf, 5)) { - ESP_LOGW(TAG, "Reading magic bytes failed!"); + ESP_LOGW(TAG, "Reading magic bytes failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } // 0x6C, 0x26, 0xF7, 0x5C, 0x45 if (buf[0] != 0x6C || buf[1] != 0x26 || buf[2] != 0xF7 || buf[3] != 0x5C || buf[4] != 0x45) { ESP_LOGW(TAG, "Magic bytes do not match! 0x%02X-0x%02X-0x%02X-0x%02X-0x%02X", buf[0], buf[1], buf[2], buf[3], buf[4]); - error_code = OTA_RESPONSE_ERROR_MAGIC; + error_code = ota::OTA_RESPONSE_ERROR_MAGIC; goto error; // NOLINT(cppcoreguidelines-avoid-goto) } // Send OK and version - 2 bytes - buf[0] = OTA_RESPONSE_OK; + buf[0] = ota::OTA_RESPONSE_OK; buf[1] = USE_OTA_VERSION; this->writeall_(buf, 2); - backend = make_ota_backend(); + backend = ota::make_ota_backend(); // Read features - 1 byte if (!this->readall_(buf, 1)) { - ESP_LOGW(TAG, "Reading features failed!"); + ESP_LOGW(TAG, "Reading features failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } ota_features = buf[0]; // NOLINT - ESP_LOGV(TAG, "OTA features is 0x%02X", ota_features); + ESP_LOGV(TAG, "Features: 0x%02X", ota_features); // Acknowledge header - 1 byte - buf[0] = OTA_RESPONSE_HEADER_OK; + buf[0] = ota::OTA_RESPONSE_HEADER_OK; if ((ota_features & FEATURE_SUPPORTS_COMPRESSION) != 0 && backend->supports_compression()) { - buf[0] = OTA_RESPONSE_SUPPORTS_COMPRESSION; + buf[0] = ota::OTA_RESPONSE_SUPPORTS_COMPRESSION; } this->writeall_(buf, 1); #ifdef USE_OTA_PASSWORD if (!this->password_.empty()) { - buf[0] = OTA_RESPONSE_REQUEST_AUTH; + buf[0] = ota::OTA_RESPONSE_REQUEST_AUTH; this->writeall_(buf, 1); md5::MD5Digest md5{}; md5.init(); @@ -206,7 +183,7 @@ void OTAComponent::handle_() { // Send nonce, 32 bytes hex MD5 if (!this->writeall_(reinterpret_cast(sbuf), 32)) { - ESP_LOGW(TAG, "Auth: Writing nonce failed!"); + ESP_LOGW(TAG, "Auth: Writing nonce failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } @@ -218,7 +195,7 @@ void OTAComponent::handle_() { // Receive cnonce, 32 bytes hex MD5 if (!this->readall_(buf, 32)) { - ESP_LOGW(TAG, "Auth: Reading cnonce failed!"); + ESP_LOGW(TAG, "Auth: Reading cnonce failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } sbuf[32] = '\0'; @@ -233,7 +210,7 @@ void OTAComponent::handle_() { // Receive result, 32 bytes hex MD5 if (!this->readall_(buf + 64, 32)) { - ESP_LOGW(TAG, "Auth: Reading response failed!"); + ESP_LOGW(TAG, "Auth: Reading response failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } sbuf[64 + 32] = '\0'; @@ -244,20 +221,20 @@ void OTAComponent::handle_() { matches = matches && buf[i] == buf[64 + i]; if (!matches) { - ESP_LOGW(TAG, "Auth failed! Passwords do not match!"); - error_code = OTA_RESPONSE_ERROR_AUTH_INVALID; + ESP_LOGW(TAG, "Auth failed! Passwords do not match"); + error_code = ota::OTA_RESPONSE_ERROR_AUTH_INVALID; goto error; // NOLINT(cppcoreguidelines-avoid-goto) } } #endif // USE_OTA_PASSWORD // Acknowledge auth OK - 1 byte - buf[0] = OTA_RESPONSE_AUTH_OK; + buf[0] = ota::OTA_RESPONSE_AUTH_OK; this->writeall_(buf, 1); // Read size, 4 bytes MSB first if (!this->readall_(buf, 4)) { - ESP_LOGW(TAG, "Reading size failed!"); + ESP_LOGW(TAG, "Reading size failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } ota_size = 0; @@ -265,20 +242,20 @@ void OTAComponent::handle_() { ota_size <<= 8; ota_size |= buf[i]; } - ESP_LOGV(TAG, "OTA size is %u bytes", ota_size); + ESP_LOGV(TAG, "Size is %u bytes", ota_size); error_code = backend->begin(ota_size); - if (error_code != OTA_RESPONSE_OK) + if (error_code != ota::OTA_RESPONSE_OK) goto error; // NOLINT(cppcoreguidelines-avoid-goto) update_started = true; // Acknowledge prepare OK - 1 byte - buf[0] = OTA_RESPONSE_UPDATE_PREPARE_OK; + buf[0] = ota::OTA_RESPONSE_UPDATE_PREPARE_OK; this->writeall_(buf, 1); // Read binary MD5, 32 bytes if (!this->readall_(buf, 32)) { - ESP_LOGW(TAG, "Reading binary MD5 checksum failed!"); + ESP_LOGW(TAG, "Reading binary MD5 checksum failed"); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } sbuf[32] = '\0'; @@ -286,7 +263,7 @@ void OTAComponent::handle_() { backend->set_update_md5(sbuf); // Acknowledge MD5 OK - 1 byte - buf[0] = OTA_RESPONSE_BIN_MD5_OK; + buf[0] = ota::OTA_RESPONSE_BIN_MD5_OK; this->writeall_(buf, 1); while (total < ota_size) { @@ -299,7 +276,7 @@ void OTAComponent::handle_() { delay(1); continue; } - ESP_LOGW(TAG, "Error receiving data for update, errno: %d", errno); + ESP_LOGW(TAG, "Error receiving data for update, errno %d", errno); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } else if (read == 0) { // $ man recv @@ -310,14 +287,14 @@ void OTAComponent::handle_() { } error_code = backend->write(buf, read); - if (error_code != OTA_RESPONSE_OK) { + if (error_code != ota::OTA_RESPONSE_OK) { ESP_LOGW(TAG, "Error writing binary data to flash!, error_code: %d", error_code); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } total += read; #if USE_OTA_VERSION == 2 while (size_acknowledged + OTA_BLOCK_SIZE <= total || (total == ota_size && size_acknowledged < ota_size)) { - buf[0] = OTA_RESPONSE_CHUNK_OK; + buf[0] = ota::OTA_RESPONSE_CHUNK_OK; this->writeall_(buf, 1); size_acknowledged += OTA_BLOCK_SIZE; } @@ -327,9 +304,9 @@ void OTAComponent::handle_() { if (now - last_progress > 1000) { last_progress = now; float percentage = (total * 100.0f) / ota_size; - ESP_LOGD(TAG, "OTA in progress: %0.1f%%", percentage); + ESP_LOGD(TAG, "Progress: %0.1f%%", percentage); #ifdef USE_OTA_STATE_CALLBACK - this->state_callback_.call(OTA_IN_PROGRESS, percentage, 0); + this->state_callback_.call(ota::OTA_IN_PROGRESS, percentage, 0); #endif // feed watchdog and give other tasks a chance to run App.feed_wdt(); @@ -338,32 +315,32 @@ void OTAComponent::handle_() { } // Acknowledge receive OK - 1 byte - buf[0] = OTA_RESPONSE_RECEIVE_OK; + buf[0] = ota::OTA_RESPONSE_RECEIVE_OK; this->writeall_(buf, 1); error_code = backend->end(); - if (error_code != OTA_RESPONSE_OK) { - ESP_LOGW(TAG, "Error ending OTA!, error_code: %d", error_code); + if (error_code != ota::OTA_RESPONSE_OK) { + ESP_LOGW(TAG, "Error ending update! error_code: %d", error_code); goto error; // NOLINT(cppcoreguidelines-avoid-goto) } // Acknowledge Update end OK - 1 byte - buf[0] = OTA_RESPONSE_UPDATE_END_OK; + buf[0] = ota::OTA_RESPONSE_UPDATE_END_OK; this->writeall_(buf, 1); // Read ACK - if (!this->readall_(buf, 1) || buf[0] != OTA_RESPONSE_OK) { - ESP_LOGW(TAG, "Reading back acknowledgement failed!"); + if (!this->readall_(buf, 1) || buf[0] != ota::OTA_RESPONSE_OK) { + ESP_LOGW(TAG, "Reading back acknowledgement failed"); // do not go to error, this is not fatal } this->client_->close(); this->client_ = nullptr; delay(10); - ESP_LOGI(TAG, "OTA update finished!"); + ESP_LOGI(TAG, "Update complete"); this->status_clear_warning(); #ifdef USE_OTA_STATE_CALLBACK - this->state_callback_.call(OTA_COMPLETED, 100.0f, 0); + this->state_callback_.call(ota::OTA_COMPLETED, 100.0f, 0); #endif delay(100); // NOLINT App.safe_reboot(); @@ -380,11 +357,11 @@ error: this->status_momentary_error("onerror", 5000); #ifdef USE_OTA_STATE_CALLBACK - this->state_callback_.call(OTA_ERROR, 0.0f, static_cast(error_code)); + this->state_callback_.call(ota::OTA_ERROR, 0.0f, static_cast(error_code)); #endif } -bool OTAComponent::readall_(uint8_t *buf, size_t len) { +bool ESPHomeOTAComponent::readall_(uint8_t *buf, size_t len) { uint32_t start = millis(); uint32_t at = 0; while (len - at > 0) { @@ -401,7 +378,7 @@ bool OTAComponent::readall_(uint8_t *buf, size_t len) { delay(1); continue; } - ESP_LOGW(TAG, "Failed to read %d bytes of data, errno: %d", len, errno); + ESP_LOGW(TAG, "Failed to read %d bytes of data, errno %d", len, errno); return false; } else if (read == 0) { ESP_LOGW(TAG, "Remote closed connection"); @@ -415,7 +392,7 @@ bool OTAComponent::readall_(uint8_t *buf, size_t len) { return true; } -bool OTAComponent::writeall_(const uint8_t *buf, size_t len) { +bool ESPHomeOTAComponent::writeall_(const uint8_t *buf, size_t len) { uint32_t start = millis(); uint32_t at = 0; while (len - at > 0) { @@ -432,7 +409,7 @@ bool OTAComponent::writeall_(const uint8_t *buf, size_t len) { delay(1); continue; } - ESP_LOGW(TAG, "Failed to write %d bytes of data, errno: %d", len, errno); + ESP_LOGW(TAG, "Failed to write %d bytes of data, errno %d", len, errno); return false; } else { at += written; @@ -443,31 +420,31 @@ bool OTAComponent::writeall_(const uint8_t *buf, size_t len) { return true; } -float OTAComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; } -uint16_t OTAComponent::get_port() const { return this->port_; } -void OTAComponent::set_port(uint16_t port) { this->port_ = port; } +float ESPHomeOTAComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; } +uint16_t ESPHomeOTAComponent::get_port() const { return this->port_; } +void ESPHomeOTAComponent::set_port(uint16_t port) { this->port_ = port; } -void OTAComponent::set_safe_mode_pending(const bool &pending) { +void ESPHomeOTAComponent::set_safe_mode_pending(const bool &pending) { if (!this->has_safe_mode_) return; uint32_t current_rtc = this->read_rtc_(); - if (pending && current_rtc != esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC) { - ESP_LOGI(TAG, "Device will enter safe mode on next boot."); - this->write_rtc_(esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC); + if (pending && current_rtc != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { + ESP_LOGI(TAG, "Device will enter safe mode on next boot"); + this->write_rtc_(ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC); } - if (!pending && current_rtc == esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC) { + if (!pending && current_rtc == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { ESP_LOGI(TAG, "Safe mode pending has been cleared"); this->clean_rtc(); } } -bool OTAComponent::get_safe_mode_pending() { - return this->has_safe_mode_ && this->read_rtc_() == esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC; +bool ESPHomeOTAComponent::get_safe_mode_pending() { + return this->has_safe_mode_ && this->read_rtc_() == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC; } -bool OTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time) { +bool ESPHomeOTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time) { this->has_safe_mode_ = true; this->safe_mode_start_time_ = millis(); this->safe_mode_enable_time_ = enable_time; @@ -475,24 +452,24 @@ bool OTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_ this->rtc_ = global_preferences->make_preference(233825507UL, false); this->safe_mode_rtc_value_ = this->read_rtc_(); - bool is_manual_safe_mode = this->safe_mode_rtc_value_ == esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC; + bool is_manual_safe_mode = this->safe_mode_rtc_value_ == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC; if (is_manual_safe_mode) { ESP_LOGI(TAG, "Safe mode has been entered manually"); } else { - ESP_LOGCONFIG(TAG, "There have been %" PRIu32 " suspected unsuccessful boot attempts.", this->safe_mode_rtc_value_); + ESP_LOGCONFIG(TAG, "There have been %" PRIu32 " suspected unsuccessful boot attempts", this->safe_mode_rtc_value_); } if (this->safe_mode_rtc_value_ >= num_attempts || is_manual_safe_mode) { this->clean_rtc(); if (!is_manual_safe_mode) { - ESP_LOGE(TAG, "Boot loop detected. Proceeding to safe mode."); + ESP_LOGE(TAG, "Boot loop detected. Proceeding to safe mode"); } this->status_set_error(); this->set_timeout(enable_time, []() { - ESP_LOGE(TAG, "No OTA attempt made, restarting."); + ESP_LOGE(TAG, "No OTA attempt made, restarting"); App.reboot(); }); @@ -500,7 +477,7 @@ bool OTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_ delay(300); // NOLINT App.setup(); - ESP_LOGI(TAG, "Waiting for OTA attempt."); + ESP_LOGI(TAG, "Waiting for OTA attempt"); return true; } else { @@ -509,27 +486,23 @@ bool OTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_ return false; } } -void OTAComponent::write_rtc_(uint32_t val) { + +void ESPHomeOTAComponent::write_rtc_(uint32_t val) { this->rtc_.save(&val); global_preferences->sync(); } -uint32_t OTAComponent::read_rtc_() { + +uint32_t ESPHomeOTAComponent::read_rtc_() { uint32_t val; if (!this->rtc_.load(&val)) return 0; return val; } -void OTAComponent::clean_rtc() { this->write_rtc_(0); } -void OTAComponent::on_safe_shutdown() { - if (this->has_safe_mode_ && this->read_rtc_() != esphome::ota::OTAComponent::ENTER_SAFE_MODE_MAGIC) + +void ESPHomeOTAComponent::clean_rtc() { this->write_rtc_(0); } + +void ESPHomeOTAComponent::on_safe_shutdown() { + if (this->has_safe_mode_ && this->read_rtc_() != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) this->clean_rtc(); } - -#ifdef USE_OTA_STATE_CALLBACK -void OTAComponent::add_on_state_callback(std::function &&callback) { - this->state_callback_.add(std::move(callback)); -} -#endif - -} // namespace ota } // namespace esphome diff --git a/esphome/components/ota/ota_component.h b/esphome/components/esphome/ota/ota_esphome.h similarity index 50% rename from esphome/components/ota/ota_component.h rename to esphome/components/esphome/ota/ota_esphome.h index c20f4f0709..e8f36f05ca 100644 --- a/esphome/components/ota/ota_component.h +++ b/esphome/components/esphome/ota/ota_esphome.h @@ -1,49 +1,16 @@ #pragma once -#include "esphome/components/socket/socket.h" -#include "esphome/core/component.h" -#include "esphome/core/preferences.h" -#include "esphome/core/helpers.h" #include "esphome/core/defines.h" +#include "esphome/core/helpers.h" +#include "esphome/core/preferences.h" +#include "esphome/components/ota/ota_backend.h" +#include "esphome/components/socket/socket.h" namespace esphome { -namespace ota { -enum OTAResponseTypes { - OTA_RESPONSE_OK = 0x00, - OTA_RESPONSE_REQUEST_AUTH = 0x01, - - OTA_RESPONSE_HEADER_OK = 0x40, - OTA_RESPONSE_AUTH_OK = 0x41, - OTA_RESPONSE_UPDATE_PREPARE_OK = 0x42, - OTA_RESPONSE_BIN_MD5_OK = 0x43, - OTA_RESPONSE_RECEIVE_OK = 0x44, - OTA_RESPONSE_UPDATE_END_OK = 0x45, - OTA_RESPONSE_SUPPORTS_COMPRESSION = 0x46, - OTA_RESPONSE_CHUNK_OK = 0x47, - - OTA_RESPONSE_ERROR_MAGIC = 0x80, - OTA_RESPONSE_ERROR_UPDATE_PREPARE = 0x81, - OTA_RESPONSE_ERROR_AUTH_INVALID = 0x82, - OTA_RESPONSE_ERROR_WRITING_FLASH = 0x83, - OTA_RESPONSE_ERROR_UPDATE_END = 0x84, - OTA_RESPONSE_ERROR_INVALID_BOOTSTRAPPING = 0x85, - OTA_RESPONSE_ERROR_WRONG_CURRENT_FLASH_CONFIG = 0x86, - OTA_RESPONSE_ERROR_WRONG_NEW_FLASH_CONFIG = 0x87, - OTA_RESPONSE_ERROR_ESP8266_NOT_ENOUGH_SPACE = 0x88, - OTA_RESPONSE_ERROR_ESP32_NOT_ENOUGH_SPACE = 0x89, - OTA_RESPONSE_ERROR_NO_UPDATE_PARTITION = 0x8A, - OTA_RESPONSE_ERROR_MD5_MISMATCH = 0x8B, - OTA_RESPONSE_ERROR_RP2040_NOT_ENOUGH_SPACE = 0x8C, - OTA_RESPONSE_ERROR_UNKNOWN = 0xFF, -}; - -enum OTAState { OTA_COMPLETED = 0, OTA_STARTED, OTA_IN_PROGRESS, OTA_ERROR }; - -/// OTAComponent provides a simple way to integrate Over-the-Air updates into your app using ArduinoOTA. -class OTAComponent : public Component { +/// ESPHomeOTAComponent provides a simple way to integrate Over-the-Air updates into your app using ArduinoOTA. +class ESPHomeOTAComponent : public ota::OTAComponent { public: - OTAComponent(); #ifdef USE_OTA_PASSWORD void set_auth_password(const std::string &password) { password_ = password; } #endif // USE_OTA_PASSWORD @@ -57,10 +24,6 @@ class OTAComponent : public Component { void set_safe_mode_pending(const bool &pending); bool get_safe_mode_pending(); -#ifdef USE_OTA_STATE_CALLBACK - void add_on_state_callback(std::function &&callback); -#endif - // ========== INTERNAL METHODS ========== // (In most use cases you won't need these) void setup() override; @@ -91,22 +54,15 @@ class OTAComponent : public Component { std::unique_ptr server_; std::unique_ptr client_; - bool has_safe_mode_{false}; ///< stores whether safe mode can be enabled. - uint32_t safe_mode_start_time_; ///< stores when safe mode was enabled. - uint32_t safe_mode_enable_time_{60000}; ///< The time safe mode should be on for. + bool has_safe_mode_{false}; ///< stores whether safe mode can be enabled + uint32_t safe_mode_start_time_; ///< stores when safe mode was enabled + uint32_t safe_mode_enable_time_{60000}; ///< The time safe mode should be on for uint32_t safe_mode_rtc_value_; uint8_t safe_mode_num_attempts_; ESPPreferenceObject rtc_; static const uint32_t ENTER_SAFE_MODE_MAGIC = 0x5afe5afe; ///< a magic number to indicate that safe mode should be entered on next boot - -#ifdef USE_OTA_STATE_CALLBACK - CallbackManager state_callback_{}; -#endif }; -extern OTAComponent *global_ota_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) - -} // namespace ota } // namespace esphome diff --git a/esphome/components/ota/__init__.py b/esphome/components/ota/__init__.py index 3c845490dc..728d36f3fa 100644 --- a/esphome/components/ota/__init__.py +++ b/esphome/components/ota/__init__.py @@ -1,71 +1,67 @@ -from esphome.cpp_generator import RawExpression import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.const import ( - CONF_ID, - CONF_NUM_ATTEMPTS, - CONF_PASSWORD, - CONF_PORT, - CONF_REBOOT_TIMEOUT, - CONF_SAFE_MODE, - CONF_TRIGGER_ID, - CONF_OTA, - KEY_PAST_SAFE_MODE, - CONF_VERSION, -) from esphome.core import CORE, coroutine_with_priority -CODEOWNERS = ["@esphome/core"] -DEPENDENCIES = ["network"] -AUTO_LOAD = ["socket", "md5"] +from esphome.const import CONF_ESPHOME, CONF_OTA, CONF_PLATFORM, CONF_TRIGGER_ID -CONF_ON_STATE_CHANGE = "on_state_change" +CODEOWNERS = ["@esphome/core"] +AUTO_LOAD = ["md5"] + +IS_PLATFORM_COMPONENT = True + +CONF_ON_ABORT = "on_abort" CONF_ON_BEGIN = "on_begin" -CONF_ON_PROGRESS = "on_progress" CONF_ON_END = "on_end" CONF_ON_ERROR = "on_error" +CONF_ON_PROGRESS = "on_progress" +CONF_ON_STATE_CHANGE = "on_state_change" + ota_ns = cg.esphome_ns.namespace("ota") -OTAState = ota_ns.enum("OTAState") OTAComponent = ota_ns.class_("OTAComponent", cg.Component) +OTAState = ota_ns.enum("OTAState") +OTAAbortTrigger = ota_ns.class_("OTAAbortTrigger", automation.Trigger.template()) +OTAEndTrigger = ota_ns.class_("OTAEndTrigger", automation.Trigger.template()) +OTAErrorTrigger = ota_ns.class_("OTAErrorTrigger", automation.Trigger.template()) +OTAProgressTrigger = ota_ns.class_("OTAProgressTrigger", automation.Trigger.template()) +OTAStartTrigger = ota_ns.class_("OTAStartTrigger", automation.Trigger.template()) OTAStateChangeTrigger = ota_ns.class_( "OTAStateChangeTrigger", automation.Trigger.template() ) -OTAStartTrigger = ota_ns.class_("OTAStartTrigger", automation.Trigger.template()) -OTAProgressTrigger = ota_ns.class_("OTAProgressTrigger", automation.Trigger.template()) -OTAEndTrigger = ota_ns.class_("OTAEndTrigger", automation.Trigger.template()) -OTAErrorTrigger = ota_ns.class_("OTAErrorTrigger", automation.Trigger.template()) -CONFIG_SCHEMA = cv.Schema( +def _ota_final_validate(config): + if len(config) < 1: + raise cv.Invalid( + f"At least one platform must be specified for '{CONF_OTA}'; add '{CONF_PLATFORM}: {CONF_ESPHOME}' for original OTA functionality" + ) + + +FINAL_VALIDATE_SCHEMA = _ota_final_validate + +BASE_OTA_SCHEMA = cv.Schema( { - cv.GenerateID(): cv.declare_id(OTAComponent), - cv.Optional(CONF_SAFE_MODE, default=True): cv.boolean, - cv.Optional(CONF_VERSION, default=2): cv.one_of(1, 2, int=True), - cv.SplitDefault( - CONF_PORT, - esp8266=8266, - esp32=3232, - rp2040=2040, - bk72xx=8892, - rtl87xx=8892, - ): cv.port, - cv.Optional(CONF_PASSWORD): cv.string, - cv.Optional( - CONF_REBOOT_TIMEOUT, default="5min" - ): cv.positive_time_period_milliseconds, - cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int, cv.Optional(CONF_ON_STATE_CHANGE): automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAStateChangeTrigger), } ), + cv.Optional(CONF_ON_ABORT): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAAbortTrigger), + } + ), cv.Optional(CONF_ON_BEGIN): automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAStartTrigger), } ), + cv.Optional(CONF_ON_END): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAEndTrigger), + } + ), cv.Optional(CONF_ON_ERROR): automation.validate_automation( { cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAErrorTrigger), @@ -76,35 +72,13 @@ CONFIG_SCHEMA = cv.Schema( cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAProgressTrigger), } ), - cv.Optional(CONF_ON_END): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OTAEndTrigger), - } - ), } -).extend(cv.COMPONENT_SCHEMA) +) @coroutine_with_priority(50.0) async def to_code(config): - CORE.data[CONF_OTA] = {} - - var = cg.new_Pvariable(config[CONF_ID]) - cg.add(var.set_port(config[CONF_PORT])) cg.add_define("USE_OTA") - if CONF_PASSWORD in config: - cg.add(var.set_auth_password(config[CONF_PASSWORD])) - cg.add_define("USE_OTA_PASSWORD") - cg.add_define("USE_OTA_VERSION", config[CONF_VERSION]) - - await cg.register_component(var, config) - - if config[CONF_SAFE_MODE]: - condition = var.should_enter_safe_mode( - config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT] - ) - cg.add(RawExpression(f"if ({condition}) return")) - CORE.data[CONF_OTA][KEY_PAST_SAFE_MODE] = True if CORE.is_esp32 and CORE.using_arduino: cg.add_library("Update", None) @@ -112,11 +86,17 @@ async def to_code(config): if CORE.is_rp2040 and CORE.using_arduino: cg.add_library("Updater", None) + +async def ota_to_code(var, config): use_state_callback = False for conf in config.get(CONF_ON_STATE_CHANGE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(OTAState, "state")], conf) use_state_callback = True + for conf in config.get(CONF_ON_ABORT, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) + use_state_callback = True for conf in config.get(CONF_ON_BEGIN, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) diff --git a/esphome/components/ota/automation.h b/esphome/components/ota/automation.h index 0c77a18ce1..4605193480 100644 --- a/esphome/components/ota/automation.h +++ b/esphome/components/ota/automation.h @@ -1,11 +1,8 @@ #pragma once - -#include "esphome/core/defines.h" #ifdef USE_OTA_STATE_CALLBACK +#include "ota_backend.h" -#include "esphome/core/component.h" #include "esphome/core/automation.h" -#include "esphome/components/ota/ota_component.h" namespace esphome { namespace ota { @@ -54,6 +51,17 @@ class OTAEndTrigger : public Trigger<> { } }; +class OTAAbortTrigger : public Trigger<> { + public: + explicit OTAAbortTrigger(OTAComponent *parent) { + parent->add_on_state_callback([this, parent](OTAState state, float progress, uint8_t error) { + if (state == OTA_ABORT && !parent->is_failed()) { + trigger(); + } + }); + } +}; + class OTAErrorTrigger : public Trigger { public: explicit OTAErrorTrigger(OTAComponent *parent) { @@ -67,5 +75,4 @@ class OTAErrorTrigger : public Trigger { } // namespace ota } // namespace esphome - -#endif // USE_OTA_STATE_CALLBACK +#endif diff --git a/esphome/components/ota/ota_backend.cpp b/esphome/components/ota/ota_backend.cpp new file mode 100644 index 0000000000..30de4ec4b3 --- /dev/null +++ b/esphome/components/ota/ota_backend.cpp @@ -0,0 +1,20 @@ +#include "ota_backend.h" + +namespace esphome { +namespace ota { + +#ifdef USE_OTA_STATE_CALLBACK +OTAGlobalCallback *global_ota_callback{nullptr}; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) + +OTAGlobalCallback *get_global_ota_callback() { + if (global_ota_callback == nullptr) { + global_ota_callback = new OTAGlobalCallback(); // NOLINT(cppcoreguidelines-owning-memory) + } + return global_ota_callback; +} + +void register_ota_platform(OTAComponent *ota_caller) { get_global_ota_callback()->register_ota(ota_caller); } +#endif + +} // namespace ota +} // namespace esphome diff --git a/esphome/components/ota/ota_backend.h b/esphome/components/ota/ota_backend.h index 5c5b61a278..bc8ab46643 100644 --- a/esphome/components/ota/ota_backend.h +++ b/esphome/components/ota/ota_backend.h @@ -1,9 +1,53 @@ #pragma once -#include "ota_component.h" + +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/helpers.h" + +#ifdef USE_OTA_STATE_CALLBACK +#include "esphome/core/automation.h" +#endif namespace esphome { namespace ota { +enum OTAResponseTypes { + OTA_RESPONSE_OK = 0x00, + OTA_RESPONSE_REQUEST_AUTH = 0x01, + + OTA_RESPONSE_HEADER_OK = 0x40, + OTA_RESPONSE_AUTH_OK = 0x41, + OTA_RESPONSE_UPDATE_PREPARE_OK = 0x42, + OTA_RESPONSE_BIN_MD5_OK = 0x43, + OTA_RESPONSE_RECEIVE_OK = 0x44, + OTA_RESPONSE_UPDATE_END_OK = 0x45, + OTA_RESPONSE_SUPPORTS_COMPRESSION = 0x46, + OTA_RESPONSE_CHUNK_OK = 0x47, + + OTA_RESPONSE_ERROR_MAGIC = 0x80, + OTA_RESPONSE_ERROR_UPDATE_PREPARE = 0x81, + OTA_RESPONSE_ERROR_AUTH_INVALID = 0x82, + OTA_RESPONSE_ERROR_WRITING_FLASH = 0x83, + OTA_RESPONSE_ERROR_UPDATE_END = 0x84, + OTA_RESPONSE_ERROR_INVALID_BOOTSTRAPPING = 0x85, + OTA_RESPONSE_ERROR_WRONG_CURRENT_FLASH_CONFIG = 0x86, + OTA_RESPONSE_ERROR_WRONG_NEW_FLASH_CONFIG = 0x87, + OTA_RESPONSE_ERROR_ESP8266_NOT_ENOUGH_SPACE = 0x88, + OTA_RESPONSE_ERROR_ESP32_NOT_ENOUGH_SPACE = 0x89, + OTA_RESPONSE_ERROR_NO_UPDATE_PARTITION = 0x8A, + OTA_RESPONSE_ERROR_MD5_MISMATCH = 0x8B, + OTA_RESPONSE_ERROR_RP2040_NOT_ENOUGH_SPACE = 0x8C, + OTA_RESPONSE_ERROR_UNKNOWN = 0xFF, +}; + +enum OTAState { + OTA_COMPLETED = 0, + OTA_STARTED, + OTA_IN_PROGRESS, + OTA_ABORT, + OTA_ERROR, +}; + class OTABackend { public: virtual ~OTABackend() = default; @@ -15,5 +59,38 @@ class OTABackend { virtual bool supports_compression() = 0; }; +class OTAComponent : public Component { +#ifdef USE_OTA_STATE_CALLBACK + public: + void add_on_state_callback(std::function &&callback) { + this->state_callback_.add(std::move(callback)); + } + + protected: + CallbackManager state_callback_{}; +#endif +}; + +#ifdef USE_OTA_STATE_CALLBACK +class OTAGlobalCallback { + public: + void register_ota(OTAComponent *ota_caller) { + ota_caller->add_on_state_callback([this, ota_caller](OTAState state, float progress, uint8_t error) { + this->state_callback_.call(state, progress, error, ota_caller); + }); + } + void add_on_state_callback(std::function &&callback) { + this->state_callback_.add(std::move(callback)); + } + + protected: + CallbackManager state_callback_{}; +}; + +OTAGlobalCallback *get_global_ota_callback(); +void register_ota_platform(OTAComponent *ota_caller); +#endif +std::unique_ptr make_ota_backend(); + } // namespace ota } // namespace esphome diff --git a/esphome/components/ota/ota_backend_arduino_esp32.cpp b/esphome/components/ota/ota_backend_arduino_esp32.cpp index 4759737dbd..62c6a72388 100644 --- a/esphome/components/ota/ota_backend_arduino_esp32.cpp +++ b/esphome/components/ota/ota_backend_arduino_esp32.cpp @@ -1,8 +1,7 @@ -#include "esphome/core/defines.h" #ifdef USE_ESP32_FRAMEWORK_ARDUINO +#include "esphome/core/defines.h" #include "ota_backend_arduino_esp32.h" -#include "ota_component.h" #include "ota_backend.h" #include @@ -10,6 +9,8 @@ namespace esphome { namespace ota { +std::unique_ptr make_ota_backend() { return make_unique(); } + OTAResponseTypes ArduinoESP32OTABackend::begin(size_t image_size) { bool ret = Update.begin(image_size, U_FLASH); if (ret) { diff --git a/esphome/components/ota/ota_backend_arduino_esp32.h b/esphome/components/ota/ota_backend_arduino_esp32.h index f86a70d678..ac7fe9f14f 100644 --- a/esphome/components/ota/ota_backend_arduino_esp32.h +++ b/esphome/components/ota/ota_backend_arduino_esp32.h @@ -1,10 +1,10 @@ #pragma once -#include "esphome/core/defines.h" #ifdef USE_ESP32_FRAMEWORK_ARDUINO - -#include "ota_component.h" #include "ota_backend.h" +#include "esphome/core/defines.h" +#include "esphome/core/helpers.h" + namespace esphome { namespace ota { diff --git a/esphome/components/ota/ota_backend_arduino_esp8266.cpp b/esphome/components/ota/ota_backend_arduino_esp8266.cpp index 23dc0d4e21..b317075bd0 100644 --- a/esphome/components/ota/ota_backend_arduino_esp8266.cpp +++ b/esphome/components/ota/ota_backend_arduino_esp8266.cpp @@ -1,10 +1,9 @@ -#include "esphome/core/defines.h" #ifdef USE_ARDUINO #ifdef USE_ESP8266 - -#include "ota_backend_arduino_esp8266.h" -#include "ota_component.h" #include "ota_backend.h" +#include "ota_backend_arduino_esp8266.h" + +#include "esphome/core/defines.h" #include "esphome/components/esp8266/preferences.h" #include @@ -12,6 +11,8 @@ namespace esphome { namespace ota { +std::unique_ptr make_ota_backend() { return make_unique(); } + OTAResponseTypes ArduinoESP8266OTABackend::begin(size_t image_size) { bool ret = Update.begin(image_size, U_FLASH); if (ret) { diff --git a/esphome/components/ota/ota_backend_arduino_esp8266.h b/esphome/components/ota/ota_backend_arduino_esp8266.h index 7937c665b0..7f44d7c965 100644 --- a/esphome/components/ota/ota_backend_arduino_esp8266.h +++ b/esphome/components/ota/ota_backend_arduino_esp8266.h @@ -1,10 +1,9 @@ #pragma once -#include "esphome/core/defines.h" #ifdef USE_ARDUINO #ifdef USE_ESP8266 - -#include "ota_component.h" #include "ota_backend.h" + +#include "esphome/core/defines.h" #include "esphome/core/macros.h" namespace esphome { diff --git a/esphome/components/ota/ota_backend_arduino_libretiny.cpp b/esphome/components/ota/ota_backend_arduino_libretiny.cpp index dbf6c97988..df4e774ebc 100644 --- a/esphome/components/ota/ota_backend_arduino_libretiny.cpp +++ b/esphome/components/ota/ota_backend_arduino_libretiny.cpp @@ -1,15 +1,16 @@ -#include "esphome/core/defines.h" #ifdef USE_LIBRETINY - -#include "ota_backend_arduino_libretiny.h" -#include "ota_component.h" #include "ota_backend.h" +#include "ota_backend_arduino_libretiny.h" + +#include "esphome/core/defines.h" #include namespace esphome { namespace ota { +std::unique_ptr make_ota_backend() { return make_unique(); } + OTAResponseTypes ArduinoLibreTinyOTABackend::begin(size_t image_size) { bool ret = Update.begin(image_size, U_FLASH); if (ret) { diff --git a/esphome/components/ota/ota_backend_arduino_libretiny.h b/esphome/components/ota/ota_backend_arduino_libretiny.h index 79656bb353..11deb6e2f2 100644 --- a/esphome/components/ota/ota_backend_arduino_libretiny.h +++ b/esphome/components/ota/ota_backend_arduino_libretiny.h @@ -1,10 +1,9 @@ #pragma once -#include "esphome/core/defines.h" #ifdef USE_LIBRETINY - -#include "ota_component.h" #include "ota_backend.h" +#include "esphome/core/defines.h" + namespace esphome { namespace ota { diff --git a/esphome/components/ota/ota_backend_arduino_rp2040.cpp b/esphome/components/ota/ota_backend_arduino_rp2040.cpp index 260387cec1..4448b0c95e 100644 --- a/esphome/components/ota/ota_backend_arduino_rp2040.cpp +++ b/esphome/components/ota/ota_backend_arduino_rp2040.cpp @@ -1,17 +1,18 @@ -#include "esphome/core/defines.h" #ifdef USE_ARDUINO #ifdef USE_RP2040 - -#include "esphome/components/rp2040/preferences.h" #include "ota_backend.h" #include "ota_backend_arduino_rp2040.h" -#include "ota_component.h" + +#include "esphome/components/rp2040/preferences.h" +#include "esphome/core/defines.h" #include namespace esphome { namespace ota { +std::unique_ptr make_ota_backend() { return make_unique(); } + OTAResponseTypes ArduinoRP2040OTABackend::begin(size_t image_size) { bool ret = Update.begin(image_size, U_FLASH); if (ret) { diff --git a/esphome/components/ota/ota_backend_arduino_rp2040.h b/esphome/components/ota/ota_backend_arduino_rp2040.h index 5aa2ec9435..b189964ab3 100644 --- a/esphome/components/ota/ota_backend_arduino_rp2040.h +++ b/esphome/components/ota/ota_backend_arduino_rp2040.h @@ -1,11 +1,10 @@ #pragma once -#include "esphome/core/defines.h" #ifdef USE_ARDUINO #ifdef USE_RP2040 - -#include "esphome/core/macros.h" #include "ota_backend.h" -#include "ota_component.h" + +#include "esphome/core/defines.h" +#include "esphome/core/macros.h" namespace esphome { namespace ota { diff --git a/esphome/components/ota/ota_backend_esp_idf.cpp b/esphome/components/ota/ota_backend_esp_idf.cpp index 319a1482f1..6f45fb75e4 100644 --- a/esphome/components/ota/ota_backend_esp_idf.cpp +++ b/esphome/components/ota/ota_backend_esp_idf.cpp @@ -1,12 +1,11 @@ -#include "esphome/core/defines.h" #ifdef USE_ESP_IDF - -#include - #include "ota_backend_esp_idf.h" -#include "ota_component.h" -#include + #include "esphome/components/md5/md5.h" +#include "esphome/core/defines.h" + +#include +#include #if ESP_IDF_VERSION_MAJOR >= 5 #include @@ -15,6 +14,8 @@ namespace esphome { namespace ota { +std::unique_ptr make_ota_backend() { return make_unique(); } + OTAResponseTypes IDFOTABackend::begin(size_t image_size) { this->partition_ = esp_ota_get_next_update_partition(nullptr); if (this->partition_ == nullptr) { diff --git a/esphome/components/ota/ota_backend_esp_idf.h b/esphome/components/ota/ota_backend_esp_idf.h index af09d0d693..ed66d9b970 100644 --- a/esphome/components/ota/ota_backend_esp_idf.h +++ b/esphome/components/ota/ota_backend_esp_idf.h @@ -1,11 +1,11 @@ #pragma once -#include "esphome/core/defines.h" #ifdef USE_ESP_IDF - -#include "ota_component.h" #include "ota_backend.h" -#include + #include "esphome/components/md5/md5.h" +#include "esphome/core/defines.h" + +#include namespace esphome { namespace ota { diff --git a/esphome/components/safe_mode/button/__init__.py b/esphome/components/safe_mode/button/__init__.py index 307e4e372e..bd51d2e038 100644 --- a/esphome/components/safe_mode/button/__init__.py +++ b/esphome/components/safe_mode/button/__init__.py @@ -1,18 +1,17 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import button -from esphome.components.ota import OTAComponent +from esphome.components.esphome.ota import ESPHomeOTAComponent from esphome.const import ( - CONF_ID, - CONF_OTA, + CONF_ESPHOME, DEVICE_CLASS_RESTART, ENTITY_CATEGORY_CONFIG, ICON_RESTART_ALERT, ) +from .. import safe_mode_ns -DEPENDENCIES = ["ota"] +DEPENDENCIES = ["ota.esphome"] -safe_mode_ns = cg.esphome_ns.namespace("safe_mode") SafeModeButton = safe_mode_ns.class_("SafeModeButton", button.Button, cg.Component) CONFIG_SCHEMA = ( @@ -22,15 +21,14 @@ CONFIG_SCHEMA = ( entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_RESTART_ALERT, ) - .extend({cv.GenerateID(CONF_OTA): cv.use_id(OTAComponent)}) + .extend({cv.GenerateID(CONF_ESPHOME): cv.use_id(ESPHomeOTAComponent)}) .extend(cv.COMPONENT_SCHEMA) ) async def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) + var = await button.new_button(config) await cg.register_component(var, config) - await button.register_button(var, config) - ota = await cg.get_variable(config[CONF_OTA]) + ota = await cg.get_variable(config[CONF_ESPHOME]) cg.add(var.set_ota(ota)) diff --git a/esphome/components/safe_mode/button/safe_mode_button.cpp b/esphome/components/safe_mode/button/safe_mode_button.cpp index 2b8654de46..d513b79c12 100644 --- a/esphome/components/safe_mode/button/safe_mode_button.cpp +++ b/esphome/components/safe_mode/button/safe_mode_button.cpp @@ -8,7 +8,7 @@ namespace safe_mode { static const char *const TAG = "safe_mode.button"; -void SafeModeButton::set_ota(ota::OTAComponent *ota) { this->ota_ = ota; } +void SafeModeButton::set_ota(esphome::ESPHomeOTAComponent *ota) { this->ota_ = ota; } void SafeModeButton::press_action() { ESP_LOGI(TAG, "Restarting device in safe mode..."); diff --git a/esphome/components/safe_mode/button/safe_mode_button.h b/esphome/components/safe_mode/button/safe_mode_button.h index 63e0d1755e..a306735b7f 100644 --- a/esphome/components/safe_mode/button/safe_mode_button.h +++ b/esphome/components/safe_mode/button/safe_mode_button.h @@ -1,8 +1,8 @@ #pragma once -#include "esphome/core/component.h" -#include "esphome/components/ota/ota_component.h" #include "esphome/components/button/button.h" +#include "esphome/components/esphome/ota/ota_esphome.h" +#include "esphome/core/component.h" namespace esphome { namespace safe_mode { @@ -10,10 +10,10 @@ namespace safe_mode { class SafeModeButton : public button::Button, public Component { public: void dump_config() override; - void set_ota(ota::OTAComponent *ota); + void set_ota(esphome::ESPHomeOTAComponent *ota); protected: - ota::OTAComponent *ota_; + esphome::ESPHomeOTAComponent *ota_; void press_action() override; }; diff --git a/esphome/components/safe_mode/switch/__init__.py b/esphome/components/safe_mode/switch/__init__.py index a6fcdfbece..0f8e500482 100644 --- a/esphome/components/safe_mode/switch/__init__.py +++ b/esphome/components/safe_mode/switch/__init__.py @@ -1,26 +1,26 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import switch -from esphome.components.ota import OTAComponent +from esphome.components.esphome.ota import ESPHomeOTAComponent from esphome.const import ( - CONF_OTA, + CONF_ESPHOME, ENTITY_CATEGORY_CONFIG, ICON_RESTART_ALERT, ) from .. import safe_mode_ns -DEPENDENCIES = ["ota"] +DEPENDENCIES = ["ota.esphome"] SafeModeSwitch = safe_mode_ns.class_("SafeModeSwitch", switch.Switch, cg.Component) CONFIG_SCHEMA = ( switch.switch_schema( SafeModeSwitch, - icon=ICON_RESTART_ALERT, - entity_category=ENTITY_CATEGORY_CONFIG, block_inverted=True, + entity_category=ENTITY_CATEGORY_CONFIG, + icon=ICON_RESTART_ALERT, ) - .extend({cv.GenerateID(CONF_OTA): cv.use_id(OTAComponent)}) + .extend({cv.GenerateID(CONF_ESPHOME): cv.use_id(ESPHomeOTAComponent)}) .extend(cv.COMPONENT_SCHEMA) ) @@ -29,5 +29,5 @@ async def to_code(config): var = await switch.new_switch(config) await cg.register_component(var, config) - ota = await cg.get_variable(config[CONF_OTA]) + ota = await cg.get_variable(config[CONF_ESPHOME]) cg.add(var.set_ota(ota)) diff --git a/esphome/components/safe_mode/switch/safe_mode_switch.cpp b/esphome/components/safe_mode/switch/safe_mode_switch.cpp index a3979eec06..71408df140 100644 --- a/esphome/components/safe_mode/switch/safe_mode_switch.cpp +++ b/esphome/components/safe_mode/switch/safe_mode_switch.cpp @@ -1,14 +1,14 @@ #include "safe_mode_switch.h" +#include "esphome/core/application.h" #include "esphome/core/hal.h" #include "esphome/core/log.h" -#include "esphome/core/application.h" namespace esphome { namespace safe_mode { static const char *const TAG = "safe_mode_switch"; -void SafeModeSwitch::set_ota(ota::OTAComponent *ota) { this->ota_ = ota; } +void SafeModeSwitch::set_ota(esphome::ESPHomeOTAComponent *ota) { this->ota_ = ota; } void SafeModeSwitch::write_state(bool state) { // Acknowledge diff --git a/esphome/components/safe_mode/switch/safe_mode_switch.h b/esphome/components/safe_mode/switch/safe_mode_switch.h index 2772db3d84..5bd15a44de 100644 --- a/esphome/components/safe_mode/switch/safe_mode_switch.h +++ b/esphome/components/safe_mode/switch/safe_mode_switch.h @@ -1,8 +1,8 @@ #pragma once -#include "esphome/core/component.h" -#include "esphome/components/ota/ota_component.h" +#include "esphome/components/esphome/ota/ota_esphome.h" #include "esphome/components/switch/switch.h" +#include "esphome/core/component.h" namespace esphome { namespace safe_mode { @@ -10,10 +10,10 @@ namespace safe_mode { class SafeModeSwitch : public switch_::Switch, public Component { public: void dump_config() override; - void set_ota(ota::OTAComponent *ota); + void set_ota(esphome::ESPHomeOTAComponent *ota); protected: - ota::OTAComponent *ota_; + esphome::ESPHomeOTAComponent *ota_; void write_state(bool state) override; }; diff --git a/esphome/cpp_helpers.py b/esphome/cpp_helpers.py index 4b3716e223..ce494e5d9d 100644 --- a/esphome/cpp_helpers.py +++ b/esphome/cpp_helpers.py @@ -3,14 +3,16 @@ import logging from esphome.const import ( CONF_DISABLED_BY_DEFAULT, CONF_ENTITY_CATEGORY, + CONF_ESPHOME, CONF_ICON, CONF_INTERNAL, CONF_NAME, - CONF_SETUP_PRIORITY, - CONF_UPDATE_INTERVAL, - CONF_TYPE_ID, CONF_OTA, + CONF_PLATFORM, CONF_SAFE_MODE, + CONF_SETUP_PRIORITY, + CONF_TYPE_ID, + CONF_UPDATE_INTERVAL, KEY_PAST_SAFE_MODE, ) @@ -139,9 +141,16 @@ async def build_registry_list(registry, config): async def past_safe_mode(): - safe_mode_enabled = ( - CONF_OTA in CORE.config and CORE.config[CONF_OTA][CONF_SAFE_MODE] - ) + ota_conf = {} + for ota_item in CORE.config.get(CONF_OTA, []): + if ota_item[CONF_PLATFORM] == CONF_ESPHOME: + ota_conf = ota_item + break + + if not ota_conf: + return + + safe_mode_enabled = ota_conf[CONF_SAFE_MODE] if not safe_mode_enabled: return diff --git a/esphome/wizard.py b/esphome/wizard.py index 4ec366bbb9..9680ade044 100644 --- a/esphome/wizard.py +++ b/esphome/wizard.py @@ -153,10 +153,11 @@ def wizard_file(**kwargs): # Configure OTA config += "\nota:\n" + config += " - platform: esphome\n" if "ota_password" in kwargs: - config += f" password: \"{kwargs['ota_password']}\"" + config += f" password: \"{kwargs['ota_password']}\"" elif "password" in kwargs: - config += f" password: \"{kwargs['password']}\"" + config += f" password: \"{kwargs['password']}\"" # Configuring wifi config += "\n\nwifi:\n" diff --git a/tests/components/ota/common.yaml b/tests/components/ota/common.yaml index 367454995f..4910e2d891 100644 --- a/tests/components/ota/common.yaml +++ b/tests/components/ota/common.yaml @@ -3,28 +3,29 @@ wifi: password: password1 ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); + - platform: esphome + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); diff --git a/tests/components/safe_mode/common.yaml b/tests/components/safe_mode/common.yaml index df0abd9aec..1dfc516254 100644 --- a/tests/components/safe_mode/common.yaml +++ b/tests/components/safe_mode/common.yaml @@ -3,6 +3,8 @@ wifi: password: password1 ota: + - platform: esphome + safe_mode: true button: - platform: safe_mode diff --git a/tests/dummy_main.cpp b/tests/dummy_main.cpp index da5c6d10d0..3ba4c8bd07 100644 --- a/tests/dummy_main.cpp +++ b/tests/dummy_main.cpp @@ -5,7 +5,7 @@ #include #include -#include +#include #include #include @@ -25,7 +25,7 @@ void setup() { ap.set_password("password1"); wifi->add_sta(ap); - auto *ota = new ota::OTAComponent(); // NOLINT + auto *ota = new esphome::ESPHomeOTAComponent(); // NOLINT ota->set_port(8266); App.setup(); diff --git a/tests/test1.yaml b/tests/test1.yaml index 79b836da4a..dc46b55c44 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -265,29 +265,30 @@ uart: baud_rate: 9600 ota: - safe_mode: true - password: "superlongpasswordthatnoonewillknow" - port: 3286 - reboot_timeout: 2min - num_attempts: 5 - on_state_change: - then: - lambda: >- - ESP_LOGD("ota", "State %d", state); - on_begin: - then: - logger.log: OTA begin - on_progress: - then: - lambda: >- - ESP_LOGD("ota", "Got progress %f", x); - on_end: - then: - logger.log: OTA end - on_error: - then: - lambda: >- - ESP_LOGD("ota", "Got error code %d", x); + - platform: esphome + safe_mode: true + password: "superlongpasswordthatnoonewillknow" + port: 3286 + reboot_timeout: 2min + num_attempts: 5 + on_state_change: + then: + lambda: >- + ESP_LOGD("ota", "State %d", state); + on_begin: + then: + logger.log: OTA begin + on_progress: + then: + lambda: >- + ESP_LOGD("ota", "Got progress %f", x); + on_end: + then: + logger.log: OTA end + on_error: + then: + lambda: >- + ESP_LOGD("ota", "Got error code %d", x); logger: baud_rate: 0 diff --git a/tests/test11.5.yaml b/tests/test11.5.yaml index 13de7f1929..758f295a6c 100644 --- a/tests/test11.5.yaml +++ b/tests/test11.5.yaml @@ -31,6 +31,7 @@ network: api: ota: + - platform: esphome logger: diff --git a/tests/test2.yaml b/tests/test2.yaml index 970076e78b..54ff4807a3 100644 --- a/tests/test2.yaml +++ b/tests/test2.yaml @@ -80,9 +80,10 @@ uart: - lambda: UARTDebug::log_hex(direction, bytes, ':'); ota: - safe_mode: true - port: 3286 - num_attempts: 15 + - platform: esphome + safe_mode: true + port: 3286 + num_attempts: 15 logger: level: DEBUG diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml index 2bddd6f4d7..18d92289cd 100644 --- a/tests/test3.1.yaml +++ b/tests/test3.1.yaml @@ -49,7 +49,8 @@ spi: number: GPIO14 ota: - version: 2 + - platform: esphome + version: 2 logger: diff --git a/tests/test3.yaml b/tests/test3.yaml index 61d814385b..7554d4bcb2 100644 --- a/tests/test3.yaml +++ b/tests/test3.yaml @@ -328,9 +328,10 @@ vbus: uart_id: uart_4 ota: - safe_mode: true - port: 3286 - reboot_timeout: 15min + - platform: esphome + safe_mode: true + port: 3286 + reboot_timeout: 15min logger: hardware_uart: UART1 diff --git a/tests/test4.yaml b/tests/test4.yaml index 993ce126a8..86beee81c6 100644 --- a/tests/test4.yaml +++ b/tests/test4.yaml @@ -103,8 +103,9 @@ uart: parity: EVEN ota: - safe_mode: true - port: 3286 + - platform: esphome + safe_mode: true + port: 3286 logger: level: DEBUG diff --git a/tests/test5.yaml b/tests/test5.yaml index afd3359098..f7a34d5a1b 100644 --- a/tests/test5.yaml +++ b/tests/test5.yaml @@ -28,6 +28,7 @@ network: api: ota: + - platform: esphome logger: diff --git a/tests/test6.yaml b/tests/test6.yaml index 2c5aa30aad..b1103eb126 100644 --- a/tests/test6.yaml +++ b/tests/test6.yaml @@ -22,6 +22,7 @@ network: api: ota: + - platform: esphome logger: diff --git a/tests/test9.1.yaml b/tests/test9.1.yaml index f7455b7668..2d205ef4e6 100644 --- a/tests/test9.1.yaml +++ b/tests/test9.1.yaml @@ -12,6 +12,7 @@ esphome: logger: ota: + - platform: esphome captive_portal: diff --git a/tests/test9.yaml b/tests/test9.yaml index d660b4f24a..5017ccc5ed 100644 --- a/tests/test9.yaml +++ b/tests/test9.yaml @@ -12,6 +12,7 @@ esphome: logger: ota: + - platform: esphome captive_portal: From 247b2eee302fd69096bdd01f79d63b8b629c91ba Mon Sep 17 00:00:00 2001 From: Mat931 <49403702+Mat931@users.noreply.github.com> Date: Thu, 16 May 2024 02:11:21 +0000 Subject: [PATCH 211/313] Add ADC multisampling (#6330) --- esphome/components/adc/adc_sensor.cpp | 158 +++++++++++++++----------- esphome/components/adc/adc_sensor.h | 18 +-- esphome/components/adc/sensor.py | 8 ++ 3 files changed, 112 insertions(+), 72 deletions(-) diff --git a/esphome/components/adc/adc_sensor.cpp b/esphome/components/adc/adc_sensor.cpp index 1a76bdb264..7257793016 100644 --- a/esphome/components/adc/adc_sensor.cpp +++ b/esphome/components/adc/adc_sensor.cpp @@ -46,27 +46,27 @@ extern "C" ADCSensor::setup() { ESP_LOGCONFIG(TAG, "Setting up ADC '%s'...", this->get_name().c_str()); #if !defined(USE_ADC_SENSOR_VCC) && !defined(USE_RP2040) - pin_->setup(); + this->pin_->setup(); #endif #ifdef USE_ESP32 - if (channel1_ != ADC1_CHANNEL_MAX) { + if (this->channel1_ != ADC1_CHANNEL_MAX) { adc1_config_width(ADC_WIDTH_MAX_SOC_BITS); - if (!autorange_) { - adc1_config_channel_atten(channel1_, attenuation_); + if (!this->autorange_) { + adc1_config_channel_atten(this->channel1_, this->attenuation_); } - } else if (channel2_ != ADC2_CHANNEL_MAX) { - if (!autorange_) { - adc2_config_channel_atten(channel2_, attenuation_); + } else if (this->channel2_ != ADC2_CHANNEL_MAX) { + if (!this->autorange_) { + adc2_config_channel_atten(this->channel2_, this->attenuation_); } } // load characteristics for each attenuation for (int32_t i = 0; i <= ADC_ATTEN_DB_12_COMPAT; i++) { - auto adc_unit = channel1_ != ADC1_CHANNEL_MAX ? ADC_UNIT_1 : ADC_UNIT_2; + auto adc_unit = this->channel1_ != ADC1_CHANNEL_MAX ? ADC_UNIT_1 : ADC_UNIT_2; auto cal_value = esp_adc_cal_characterize(adc_unit, (adc_atten_t) i, ADC_WIDTH_MAX_SOC_BITS, 1100, // default vref - &cal_characteristics_[i]); + &this->cal_characteristics_[i]); switch (cal_value) { case ESP_ADC_CAL_VAL_EFUSE_VREF: ESP_LOGV(TAG, "Using eFuse Vref for calibration"); @@ -99,27 +99,27 @@ void ADCSensor::dump_config() { #ifdef USE_ADC_SENSOR_VCC ESP_LOGCONFIG(TAG, " Pin: VCC"); #else - LOG_PIN(" Pin: ", pin_); + LOG_PIN(" Pin: ", this->pin_); #endif #endif // USE_ESP8266 || USE_LIBRETINY #ifdef USE_ESP32 - LOG_PIN(" Pin: ", pin_); - if (autorange_) { - ESP_LOGCONFIG(TAG, " Attenuation: auto"); + LOG_PIN(" Pin: ", this->pin_); + if (this->autorange_) { + ESP_LOGCONFIG(TAG, " Attenuation: auto"); } else { switch (this->attenuation_) { case ADC_ATTEN_DB_0: - ESP_LOGCONFIG(TAG, " Attenuation: 0db"); + ESP_LOGCONFIG(TAG, " Attenuation: 0db"); break; case ADC_ATTEN_DB_2_5: - ESP_LOGCONFIG(TAG, " Attenuation: 2.5db"); + ESP_LOGCONFIG(TAG, " Attenuation: 2.5db"); break; case ADC_ATTEN_DB_6: - ESP_LOGCONFIG(TAG, " Attenuation: 6db"); + ESP_LOGCONFIG(TAG, " Attenuation: 6db"); break; case ADC_ATTEN_DB_12_COMPAT: - ESP_LOGCONFIG(TAG, " Attenuation: 12db"); + ESP_LOGCONFIG(TAG, " Attenuation: 12db"); break; default: // This is to satisfy the unused ADC_ATTEN_MAX break; @@ -134,11 +134,11 @@ void ADCSensor::dump_config() { #ifdef USE_ADC_SENSOR_VCC ESP_LOGCONFIG(TAG, " Pin: VCC"); #else - LOG_PIN(" Pin: ", pin_); + LOG_PIN(" Pin: ", this->pin_); #endif // USE_ADC_SENSOR_VCC } #endif // USE_RP2040 - + ESP_LOGCONFIG(TAG, " Samples: %i", this->sample_count_); LOG_UPDATE_INTERVAL(this); } @@ -149,14 +149,24 @@ void ADCSensor::update() { this->publish_state(value_v); } +void ADCSensor::set_sample_count(uint8_t sample_count) { + if (sample_count != 0) { + this->sample_count_ = sample_count; + } +} + #ifdef USE_ESP8266 float ADCSensor::sample() { + uint32_t raw = 0; + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { #ifdef USE_ADC_SENSOR_VCC - int32_t raw = ESP.getVcc(); // NOLINT(readability-static-accessed-through-instance) + raw += ESP.getVcc(); // NOLINT(readability-static-accessed-through-instance) #else - int32_t raw = analogRead(this->pin_->get_pin()); // NOLINT + raw += analogRead(this->pin_->get_pin()); // NOLINT #endif - if (output_raw_) { + } + raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) + if (this->output_raw_) { return raw; } return raw / 1024.0f; @@ -165,53 +175,57 @@ float ADCSensor::sample() { #ifdef USE_ESP32 float ADCSensor::sample() { - if (!autorange_) { - int raw = -1; - if (channel1_ != ADC1_CHANNEL_MAX) { - raw = adc1_get_raw(channel1_); - } else if (channel2_ != ADC2_CHANNEL_MAX) { - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw); + if (!this->autorange_) { + uint32_t sum = 0; + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { + int raw = -1; + if (this->channel1_ != ADC1_CHANNEL_MAX) { + raw = adc1_get_raw(this->channel1_); + } else if (this->channel2_ != ADC2_CHANNEL_MAX) { + adc2_get_raw(this->channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw); + } + if (raw == -1) { + return NAN; + } + sum += raw; } - - if (raw == -1) { - return NAN; + sum = (sum + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) + if (this->output_raw_) { + return sum; } - if (output_raw_) { - return raw; - } - uint32_t mv = esp_adc_cal_raw_to_voltage(raw, &cal_characteristics_[(int32_t) attenuation_]); + uint32_t mv = esp_adc_cal_raw_to_voltage(sum, &this->cal_characteristics_[(int32_t) this->attenuation_]); return mv / 1000.0f; } int raw12 = ADC_MAX, raw6 = ADC_MAX, raw2 = ADC_MAX, raw0 = ADC_MAX; - if (channel1_ != ADC1_CHANNEL_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_12_COMPAT); - raw12 = adc1_get_raw(channel1_); + if (this->channel1_ != ADC1_CHANNEL_MAX) { + adc1_config_channel_atten(this->channel1_, ADC_ATTEN_DB_12_COMPAT); + raw12 = adc1_get_raw(this->channel1_); if (raw12 < ADC_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_6); - raw6 = adc1_get_raw(channel1_); + adc1_config_channel_atten(this->channel1_, ADC_ATTEN_DB_6); + raw6 = adc1_get_raw(this->channel1_); if (raw6 < ADC_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_2_5); - raw2 = adc1_get_raw(channel1_); + adc1_config_channel_atten(this->channel1_, ADC_ATTEN_DB_2_5); + raw2 = adc1_get_raw(this->channel1_); if (raw2 < ADC_MAX) { - adc1_config_channel_atten(channel1_, ADC_ATTEN_DB_0); - raw0 = adc1_get_raw(channel1_); + adc1_config_channel_atten(this->channel1_, ADC_ATTEN_DB_0); + raw0 = adc1_get_raw(this->channel1_); } } } - } else if (channel2_ != ADC2_CHANNEL_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_12_COMPAT); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw12); + } else if (this->channel2_ != ADC2_CHANNEL_MAX) { + adc2_config_channel_atten(this->channel2_, ADC_ATTEN_DB_12_COMPAT); + adc2_get_raw(this->channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw12); if (raw12 < ADC_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_6); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw6); + adc2_config_channel_atten(this->channel2_, ADC_ATTEN_DB_6); + adc2_get_raw(this->channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw6); if (raw6 < ADC_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_2_5); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw2); + adc2_config_channel_atten(this->channel2_, ADC_ATTEN_DB_2_5); + adc2_get_raw(this->channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw2); if (raw2 < ADC_MAX) { - adc2_config_channel_atten(channel2_, ADC_ATTEN_DB_0); - adc2_get_raw(channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw0); + adc2_config_channel_atten(this->channel2_, ADC_ATTEN_DB_0); + adc2_get_raw(this->channel2_, ADC_WIDTH_MAX_SOC_BITS, &raw0); } } } @@ -221,10 +235,10 @@ float ADCSensor::sample() { return NAN; } - uint32_t mv12 = esp_adc_cal_raw_to_voltage(raw12, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_12_COMPAT]); - uint32_t mv6 = esp_adc_cal_raw_to_voltage(raw6, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_6]); - uint32_t mv2 = esp_adc_cal_raw_to_voltage(raw2, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_2_5]); - uint32_t mv0 = esp_adc_cal_raw_to_voltage(raw0, &cal_characteristics_[(int32_t) ADC_ATTEN_DB_0]); + uint32_t mv12 = esp_adc_cal_raw_to_voltage(raw12, &this->cal_characteristics_[(int32_t) ADC_ATTEN_DB_12_COMPAT]); + uint32_t mv6 = esp_adc_cal_raw_to_voltage(raw6, &this->cal_characteristics_[(int32_t) ADC_ATTEN_DB_6]); + uint32_t mv2 = esp_adc_cal_raw_to_voltage(raw2, &this->cal_characteristics_[(int32_t) ADC_ATTEN_DB_2_5]); + uint32_t mv0 = esp_adc_cal_raw_to_voltage(raw0, &this->cal_characteristics_[(int32_t) ADC_ATTEN_DB_0]); // Contribution of each value, in range 0-2048 (12 bit ADC) or 0-4096 (13 bit ADC) uint32_t c12 = std::min(raw12, ADC_HALF); @@ -246,8 +260,11 @@ float ADCSensor::sample() { adc_set_temp_sensor_enabled(true); delay(1); adc_select_input(4); - - int32_t raw = adc_read(); + uint32_t raw = 0; + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { + raw += adc_read(); + } + raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) adc_set_temp_sensor_enabled(false); if (this->output_raw_) { return raw; @@ -268,7 +285,11 @@ float ADCSensor::sample() { adc_gpio_init(pin); adc_select_input(pin - 26); - int32_t raw = adc_read(); + uint32_t raw = 0; + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { + raw += adc_read(); + } + raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) #ifdef CYW43_USES_VSYS_PIN if (pin == PICO_VSYS_PIN) { @@ -276,7 +297,7 @@ float ADCSensor::sample() { } #endif // CYW43_USES_VSYS_PIN - if (output_raw_) { + if (this->output_raw_) { return raw; } float coeff = pin == PICO_VSYS_PIN ? 3.0 : 1.0; @@ -287,10 +308,19 @@ float ADCSensor::sample() { #ifdef USE_LIBRETINY float ADCSensor::sample() { - if (output_raw_) { - return analogRead(this->pin_->get_pin()); // NOLINT + uint32_t raw = 0; + if (this->output_raw_) { + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { + raw += analogRead(this->pin_->get_pin()); // NOLINT + } + raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) + return raw; } - return analogReadVoltage(this->pin_->get_pin()) / 1000.0f; // NOLINT + for (uint8_t sample = 0; sample < this->sample_count_; sample++) { + raw += analogReadVoltage(this->pin_->get_pin()); // NOLINT + } + raw = (raw + (this->sample_count_ >> 1)) / this->sample_count_; // NOLINT(clang-analyzer-core.DivideZero) + return raw / 1000.0f; } #endif // USE_LIBRETINY diff --git a/esphome/components/adc/adc_sensor.h b/esphome/components/adc/adc_sensor.h index d99c4bc75b..b697d6dd7e 100644 --- a/esphome/components/adc/adc_sensor.h +++ b/esphome/components/adc/adc_sensor.h @@ -33,16 +33,16 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage public: #ifdef USE_ESP32 /// Set the attenuation for this pin. Only available on the ESP32. - void set_attenuation(adc_atten_t attenuation) { attenuation_ = attenuation; } + void set_attenuation(adc_atten_t attenuation) { this->attenuation_ = attenuation; } void set_channel1(adc1_channel_t channel) { - channel1_ = channel; - channel2_ = ADC2_CHANNEL_MAX; + this->channel1_ = channel; + this->channel2_ = ADC2_CHANNEL_MAX; } void set_channel2(adc2_channel_t channel) { - channel2_ = channel; - channel1_ = ADC1_CHANNEL_MAX; + this->channel2_ = channel; + this->channel1_ = ADC1_CHANNEL_MAX; } - void set_autorange(bool autorange) { autorange_ = autorange; } + void set_autorange(bool autorange) { this->autorange_ = autorange; } #endif /// Update ADC values @@ -53,7 +53,8 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage /// `HARDWARE_LATE` setup priority float get_setup_priority() const override; void set_pin(InternalGPIOPin *pin) { this->pin_ = pin; } - void set_output_raw(bool output_raw) { output_raw_ = output_raw; } + void set_output_raw(bool output_raw) { this->output_raw_ = output_raw; } + void set_sample_count(uint8_t sample_count); float sample() override; #ifdef USE_ESP8266 @@ -61,12 +62,13 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage #endif #ifdef USE_RP2040 - void set_is_temperature() { is_temperature_ = true; } + void set_is_temperature() { this->is_temperature_ = true; } #endif protected: InternalGPIOPin *pin_; bool output_raw_{false}; + uint8_t sample_count_{1}; #ifdef USE_RP2040 bool is_temperature_{false}; diff --git a/esphome/components/adc/sensor.py b/esphome/components/adc/sensor.py index 4cf3d52802..59ea9e184c 100644 --- a/esphome/components/adc/sensor.py +++ b/esphome/components/adc/sensor.py @@ -29,6 +29,8 @@ _LOGGER = logging.getLogger(__name__) AUTO_LOAD = ["voltage_sampler"] +CONF_SAMPLES = "samples" + _attenuation = cv.enum(ATTENUATION_MODES, lower=True) @@ -37,6 +39,10 @@ def validate_config(config): if config[CONF_RAW] and config.get(CONF_ATTENUATION, None) == "auto": raise cv.Invalid("Automatic attenuation cannot be used when raw output is set") + if config.get(CONF_ATTENUATION, None) == "auto" and config.get(CONF_SAMPLES, 1) > 1: + raise cv.Invalid( + "Automatic attenuation cannot be used when multisampling is set" + ) if config.get(CONF_ATTENUATION) == "11db": _LOGGER.warning( "`attenuation: 11db` is deprecated, use `attenuation: 12db` instead" @@ -81,6 +87,7 @@ CONFIG_SCHEMA = cv.All( cv.SplitDefault(CONF_ATTENUATION, esp32="0db"): cv.All( cv.only_on_esp32, _attenuation ), + cv.Optional(CONF_SAMPLES, default=1): cv.int_range(min=1, max=255), } ) .extend(cv.polling_component_schema("60s")), @@ -104,6 +111,7 @@ async def to_code(config): cg.add(var.set_pin(pin)) cg.add(var.set_output_raw(config[CONF_RAW])) + cg.add(var.set_sample_count(config[CONF_SAMPLES])) if attenuation := config.get(CONF_ATTENUATION): if attenuation == "auto": From 7c243dafb35decec2869f6eed38b7f9ef64611c7 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 14:11:54 +1200 Subject: [PATCH 212/313] [core] Fix some extends cases (#6748) --- esphome/components/substitutions/__init__.py | 4 +-- esphome/config_helpers.py | 27 +++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/esphome/components/substitutions/__init__.py b/esphome/components/substitutions/__init__.py index 2d3a79ccae..fa52200d46 100644 --- a/esphome/components/substitutions/__init__.py +++ b/esphome/components/substitutions/__init__.py @@ -4,7 +4,7 @@ import esphome.config_validation as cv from esphome import core from esphome.const import CONF_SUBSTITUTIONS, VALID_SUBSTITUTIONS_CHARACTERS from esphome.yaml_util import ESPHomeDataBase, make_data_base -from esphome.config_helpers import merge_config +from esphome.config_helpers import merge_config, Extend, Remove CODEOWNERS = ["@esphome/core"] _LOGGER = logging.getLogger(__name__) @@ -105,7 +105,7 @@ def _substitute_item(substitutions, item, path, ignore_missing): sub = _expand_substitutions(substitutions, item, path, ignore_missing) if sub != item: return sub - elif isinstance(item, core.Lambda): + elif isinstance(item, (core.Lambda, Extend, Remove)): sub = _expand_substitutions(substitutions, item.value, path, ignore_missing) if sub != item: item.value = sub diff --git a/esphome/config_helpers.py b/esphome/config_helpers.py index 7b47e097c8..b5e0b26143 100644 --- a/esphome/config_helpers.py +++ b/esphome/config_helpers.py @@ -8,6 +8,9 @@ class Extend: def __str__(self): return f"!extend {self.value}" + def __repr__(self): + return f"Extend({self.value})" + def __eq__(self, b): """ Check if two Extend objects contain the same ID. @@ -24,6 +27,9 @@ class Remove: def __str__(self): return f"!remove {self.value}" + def __repr__(self): + return f"Remove({self.value})" + def __eq__(self, b): """ Check if two Remove objects contain the same ID. @@ -50,14 +56,19 @@ def merge_config(full_old, full_new): return new res = old.copy() ids = { - v[CONF_ID]: i + v_id: i for i, v in enumerate(res) - if CONF_ID in v and isinstance(v[CONF_ID], str) + if (v_id := v.get(CONF_ID)) and isinstance(v_id, str) } + extend_ids = { + v_id.value: i + for i, v in enumerate(res) + if (v_id := v.get(CONF_ID)) and isinstance(v_id, Extend) + } + ids_to_delete = [] for v in new: - if CONF_ID in v: - new_id = v[CONF_ID] + if new_id := v.get(CONF_ID): if isinstance(new_id, Extend): new_id = new_id.value if new_id in ids: @@ -69,6 +80,14 @@ def merge_config(full_old, full_new): if new_id in ids: ids_to_delete.append(ids[new_id]) continue + elif ( + new_id in extend_ids + ): # When a package is extending a non-packaged item + extend_res = res[extend_ids[new_id]] + extend_res[CONF_ID] = new_id + new_v = merge(v, extend_res) + res[extend_ids[new_id]] = new_v + continue else: ids[new_id] = len(res) res.append(v) From 0bb2773c646fc3b0d1fe65a73e8e98dd57523e95 Mon Sep 17 00:00:00 2001 From: Faidon Liambotis Date: Thu, 16 May 2024 05:49:40 +0300 Subject: [PATCH 213/313] Port wifi_component_esp32_arduino from tcpip_adapter to esp_netif (#6476) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../wifi/wifi_component_esp32_arduino.cpp | 329 ++++++++++-------- .../wifi/wifi_component_esp_idf.cpp | 60 ++-- 2 files changed, 219 insertions(+), 170 deletions(-) diff --git a/esphome/components/wifi/wifi_component_esp32_arduino.cpp b/esphome/components/wifi/wifi_component_esp32_arduino.cpp index 44d77b4eed..ef7a624cd5 100644 --- a/esphome/components/wifi/wifi_component_esp32_arduino.cpp +++ b/esphome/components/wifi/wifi_component_esp32_arduino.cpp @@ -2,6 +2,7 @@ #ifdef USE_ESP32_FRAMEWORK_ARDUINO +#include #include #include @@ -24,45 +25,73 @@ namespace wifi { static const char *const TAG = "wifi_esp32"; +static esp_netif_t *s_sta_netif = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) +#ifdef USE_WIFI_AP +static esp_netif_t *s_ap_netif = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) +#endif // USE_WIFI_AP + static bool s_sta_connecting = false; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) +void WiFiComponent::wifi_pre_setup_() { + auto f = std::bind(&WiFiComponent::wifi_event_callback_, this, std::placeholders::_1, std::placeholders::_2); + WiFi.onEvent(f); + WiFi.persistent(false); + // Make sure WiFi is in clean state before anything starts + this->wifi_mode_(false, false); +} + bool WiFiComponent::wifi_mode_(optional sta, optional ap) { - uint8_t current_mode = WiFiClass::getMode(); - bool current_sta = current_mode & 0b01; - bool current_ap = current_mode & 0b10; - bool enable_sta = sta.value_or(current_sta); - bool enable_ap = ap.value_or(current_ap); - if (current_sta == enable_sta && current_ap == enable_ap) + wifi_mode_t current_mode = WiFiClass::getMode(); + bool current_sta = current_mode == WIFI_MODE_STA || current_mode == WIFI_MODE_APSTA; + bool current_ap = current_mode == WIFI_MODE_AP || current_mode == WIFI_MODE_APSTA; + + bool set_sta = sta.value_or(current_sta); + bool set_ap = ap.value_or(current_ap); + + wifi_mode_t set_mode; + if (set_sta && set_ap) { + set_mode = WIFI_MODE_APSTA; + } else if (set_sta && !set_ap) { + set_mode = WIFI_MODE_STA; + } else if (!set_sta && set_ap) { + set_mode = WIFI_MODE_AP; + } else { + set_mode = WIFI_MODE_NULL; + } + + if (current_mode == set_mode) return true; - if (enable_sta && !current_sta) { + if (set_sta && !current_sta) { ESP_LOGV(TAG, "Enabling STA."); - } else if (!enable_sta && current_sta) { + } else if (!set_sta && current_sta) { ESP_LOGV(TAG, "Disabling STA."); } - if (enable_ap && !current_ap) { + if (set_ap && !current_ap) { ESP_LOGV(TAG, "Enabling AP."); - } else if (!enable_ap && current_ap) { + } else if (!set_ap && current_ap) { ESP_LOGV(TAG, "Disabling AP."); } - uint8_t mode = 0; - if (enable_sta) - mode |= 0b01; - if (enable_ap) - mode |= 0b10; - bool ret = WiFiClass::mode(static_cast(mode)); + bool ret = WiFiClass::mode(set_mode); if (!ret) { ESP_LOGW(TAG, "Setting WiFi mode failed!"); + return false; } + // WiFiClass::mode above calls esp_netif_create_default_wifi_sta() and + // esp_netif_create_default_wifi_ap(), which creates the interfaces. + if (set_sta) + s_sta_netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); +#ifdef USE_WIFI_AP + if (set_ap) + s_ap_netif = esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"); +#endif + return ret; } -bool WiFiComponent::wifi_apply_output_power_(float output_power) { - int8_t val = static_cast(output_power * 4); - return esp_wifi_set_max_tx_power(val) == ESP_OK; -} + bool WiFiComponent::wifi_sta_pre_setup_() { if (!this->wifi_mode_(true, {})) return false; @@ -71,6 +100,12 @@ bool WiFiComponent::wifi_sta_pre_setup_() { delay(10); return true; } + +bool WiFiComponent::wifi_apply_output_power_(float output_power) { + int8_t val = static_cast(output_power * 4); + return esp_wifi_set_max_tx_power(val) == ESP_OK; +} + bool WiFiComponent::wifi_apply_power_save_() { wifi_ps_type_t power_save; switch (this->power_save_) { @@ -87,99 +122,7 @@ bool WiFiComponent::wifi_apply_power_save_() { } return esp_wifi_set_ps(power_save) == ESP_OK; } -bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { - // enable STA - if (!this->wifi_mode_(true, {})) - return false; - tcpip_adapter_dhcp_status_t dhcp_status; - tcpip_adapter_dhcpc_get_status(TCPIP_ADAPTER_IF_STA, &dhcp_status); - if (!manual_ip.has_value()) { - // lwIP starts the SNTP client if it gets an SNTP server from DHCP. We don't need the time, and more importantly, - // the built-in SNTP client has a memory leak in certain situations. Disable this feature. - // https://github.com/esphome/issues/issues/2299 - sntp_servermode_dhcp(false); - - // Use DHCP client - if (dhcp_status != TCPIP_ADAPTER_DHCP_STARTED) { - esp_err_t err = tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA); - if (err != ESP_OK) { - ESP_LOGV(TAG, "Starting DHCP client failed! %d", err); - } - return err == ESP_OK; - } - return true; - } - - tcpip_adapter_ip_info_t info; - memset(&info, 0, sizeof(info)); - info.ip = manual_ip->static_ip; - info.gw = manual_ip->gateway; - info.netmask = manual_ip->subnet; - - esp_err_t dhcp_stop_ret = tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); - if (dhcp_stop_ret != ESP_OK && dhcp_stop_ret != ESP_ERR_TCPIP_ADAPTER_DHCP_ALREADY_STOPPED) { - ESP_LOGV(TAG, "Stopping DHCP client failed! %s", esp_err_to_name(dhcp_stop_ret)); - } - - esp_err_t wifi_set_info_ret = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &info); - if (wifi_set_info_ret != ESP_OK) { - ESP_LOGV(TAG, "Setting manual IP info failed! %s", esp_err_to_name(wifi_set_info_ret)); - } - - ip_addr_t dns; -// TODO: is this needed? -#if LWIP_IPV6 - dns.type = IPADDR_TYPE_V4; -#endif /* LWIP_IPV6 */ - if (manual_ip->dns1.is_set()) { - dns = manual_ip->dns1; - dns_setserver(0, &dns); - } - if (manual_ip->dns2.is_set()) { - dns = manual_ip->dns2; - dns_setserver(1, &dns); - } - - return true; -} - -network::IPAddresses WiFiComponent::wifi_sta_ip_addresses() { - if (!this->has_sta()) - return {}; - network::IPAddresses addresses; - tcpip_adapter_ip_info_t ip; - esp_err_t err = tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip); - if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_netif_get_ip_info failed: %s", esp_err_to_name(err)); - // TODO: do something smarter - // return false; - } else { - addresses[0] = network::IPAddress(&ip.ip); - } -#if USE_NETWORK_IPV6 - ip6_addr_t ipv6; - err = tcpip_adapter_get_ip6_global(TCPIP_ADAPTER_IF_STA, &ipv6); - if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_netif_get_ip6_gobal failed: %s", esp_err_to_name(err)); - } else { - addresses[1] = network::IPAddress(&ipv6); - } - err = tcpip_adapter_get_ip6_linklocal(TCPIP_ADAPTER_IF_STA, &ipv6); - if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_netif_get_ip6_linklocal failed: %s", esp_err_to_name(err)); - } else { - addresses[2] = network::IPAddress(&ipv6); - } -#endif /* USE_NETWORK_IPV6 */ - - return addresses; -} - -bool WiFiComponent::wifi_apply_hostname_() { - // setting is done in SYSTEM_EVENT_STA_START callback - return true; -} bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { // enable STA if (!this->wifi_mode_(true, {})) @@ -233,19 +176,24 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { wifi_config_t current_conf; esp_err_t err; - esp_wifi_get_config(WIFI_IF_STA, ¤t_conf); + err = esp_wifi_get_config(WIFI_IF_STA, ¤t_conf); + if (err != ERR_OK) { + ESP_LOGW(TAG, "esp_wifi_get_config failed: %s", esp_err_to_name(err)); + // can continue + } if (memcmp(¤t_conf, &conf, sizeof(wifi_config_t)) != 0) { // NOLINT err = esp_wifi_disconnect(); if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_wifi_disconnect failed! %d", err); + ESP_LOGV(TAG, "esp_wifi_disconnect failed: %s", esp_err_to_name(err)); return false; } } err = esp_wifi_set_config(WIFI_IF_STA, &conf); if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_wifi_set_config failed! %d", err); + ESP_LOGV(TAG, "esp_wifi_set_config failed: %s", esp_err_to_name(err)); + return false; } if (!this->wifi_sta_ip_config_(ap.get_manual_ip())) { @@ -304,12 +252,98 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { err = esp_wifi_connect(); if (err != ESP_OK) { - ESP_LOGW(TAG, "esp_wifi_connect failed! %d", err); + ESP_LOGW(TAG, "esp_wifi_connect failed: %s", esp_err_to_name(err)); return false; } return true; } + +bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { + // enable STA + if (!this->wifi_mode_(true, {})) + return false; + + esp_netif_dhcp_status_t dhcp_status; + esp_err_t err = esp_netif_dhcpc_get_status(s_sta_netif, &dhcp_status); + if (err != ESP_OK) { + ESP_LOGV(TAG, "esp_netif_dhcpc_get_status failed: %s", esp_err_to_name(err)); + return false; + } + + if (!manual_ip.has_value()) { + // lwIP starts the SNTP client if it gets an SNTP server from DHCP. We don't need the time, and more importantly, + // the built-in SNTP client has a memory leak in certain situations. Disable this feature. + // https://github.com/esphome/issues/issues/2299 + sntp_servermode_dhcp(false); + + // No manual IP is set; use DHCP client + if (dhcp_status != ESP_NETIF_DHCP_STARTED) { + err = esp_netif_dhcpc_start(s_sta_netif); + if (err != ESP_OK) { + ESP_LOGV(TAG, "Starting DHCP client failed! %d", err); + } + return err == ESP_OK; + } + return true; + } + + esp_netif_ip_info_t info; // struct of ip4_addr_t with ip, netmask, gw + info.ip = manual_ip->static_ip; + info.gw = manual_ip->gateway; + info.netmask = manual_ip->subnet; + err = esp_netif_dhcpc_stop(s_sta_netif); + if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) { + ESP_LOGV(TAG, "Stopping DHCP client failed! %s", esp_err_to_name(err)); + } + + err = esp_netif_set_ip_info(s_sta_netif, &info); + if (err != ESP_OK) { + ESP_LOGV(TAG, "Setting manual IP info failed! %s", esp_err_to_name(err)); + } + + esp_netif_dns_info_t dns; + if (manual_ip->dns1.is_set()) { + dns.ip = manual_ip->dns1; + esp_netif_set_dns_info(s_sta_netif, ESP_NETIF_DNS_MAIN, &dns); + } + if (manual_ip->dns2.is_set()) { + dns.ip = manual_ip->dns2; + esp_netif_set_dns_info(s_sta_netif, ESP_NETIF_DNS_BACKUP, &dns); + } + + return true; +} + +network::IPAddresses WiFiComponent::wifi_sta_ip_addresses() { + if (!this->has_sta()) + return {}; + network::IPAddresses addresses; + esp_netif_ip_info_t ip; + esp_err_t err = esp_netif_get_ip_info(s_sta_netif, &ip); + if (err != ESP_OK) { + ESP_LOGV(TAG, "esp_netif_get_ip_info failed: %s", esp_err_to_name(err)); + // TODO: do something smarter + // return false; + } else { + addresses[0] = network::IPAddress(&ip.ip); + } +#if USE_NETWORK_IPV6 + struct esp_ip6_addr if_ip6s[CONFIG_LWIP_IPV6_NUM_ADDRESSES]; + uint8_t count = 0; + count = esp_netif_get_all_ip6(s_sta_netif, if_ip6s); + assert(count <= CONFIG_LWIP_IPV6_NUM_ADDRESSES); + for (int i = 0; i < count; i++) { + addresses[i + 1] = network::IPAddress(&if_ip6s[i]); + } +#endif /* USE_NETWORK_IPV6 */ + return addresses; +} + +bool WiFiComponent::wifi_apply_hostname_() { + // setting is done in SYSTEM_EVENT_STA_START callback + return true; +} const char *get_auth_mode_str(uint8_t mode) { switch (mode) { case WIFI_AUTH_OPEN: @@ -324,6 +358,12 @@ const char *get_auth_mode_str(uint8_t mode) { return "WPA/WPA2 PSK"; case WIFI_AUTH_WPA2_ENTERPRISE: return "WPA2 Enterprise"; + case WIFI_AUTH_WPA3_PSK: + return "WPA3 PSK"; + case WIFI_AUTH_WPA2_WPA3_PSK: + return "WPA2/WPA3 PSK"; + case WIFI_AUTH_WAPI_PSK: + return "WAPI PSK"; default: return "UNKNOWN"; } @@ -409,12 +449,16 @@ const char *get_disconnect_reason_str(uint8_t reason) { return "Handshake Failed"; case WIFI_REASON_CONNECTION_FAIL: return "Connection Failed"; + case WIFI_REASON_ROAMING: + return "Station Roaming"; case WIFI_REASON_UNSPECIFIED: default: return "Unspecified"; } } +void WiFiComponent::wifi_loop_() {} + #define ESPHOME_EVENT_ID_WIFI_READY ARDUINO_EVENT_WIFI_READY #define ESPHOME_EVENT_ID_WIFI_SCAN_DONE ARDUINO_EVENT_WIFI_SCAN_DONE #define ESPHOME_EVENT_ID_WIFI_STA_START ARDUINO_EVENT_WIFI_STA_START @@ -450,7 +494,11 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_ } case ESPHOME_EVENT_ID_WIFI_STA_START: { ESP_LOGV(TAG, "Event: WiFi STA start"); - tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, App.get_name().c_str()); + // apply hostname + esp_err_t err = esp_netif_set_hostname(s_sta_netif, App.get_name().c_str()); + if (err != ERR_OK) { + ESP_LOGW(TAG, "esp_netif_set_hostname failed: %s", esp_err_to_name(err)); + } break; } case ESPHOME_EVENT_ID_WIFI_STA_STOP: { @@ -573,22 +621,19 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_ break; } } -void WiFiComponent::wifi_pre_setup_() { - auto f = std::bind(&WiFiComponent::wifi_event_callback_, this, std::placeholders::_1, std::placeholders::_2); - WiFi.onEvent(f); - WiFi.persistent(false); - // Make sure WiFi is in clean state before anything starts - this->wifi_mode_(false, false); -} + WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() { auto status = WiFiClass::status(); if (status == WL_CONNECT_FAILED || status == WL_CONNECTION_LOST) { return WiFiSTAConnectStatus::ERROR_CONNECT_FAILED; - } else if (status == WL_NO_SSID_AVAIL) { + } + if (status == WL_NO_SSID_AVAIL) { return WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND; - } else if (s_sta_connecting) { + } + if (s_sta_connecting) { return WiFiSTAConnectStatus::CONNECTING; - } else if (status == WL_CONNECTED) { + } + if (status == WL_CONNECTED) { return WiFiSTAConnectStatus::CONNECTED; } return WiFiSTAConnectStatus::IDLE; @@ -638,8 +683,7 @@ bool WiFiComponent::wifi_ap_ip_config_(optional manual_ip) { if (!this->wifi_mode_({}, true)) return false; - tcpip_adapter_ip_info_t info; - memset(&info, 0, sizeof(info)); + esp_netif_ip_info_t info; if (manual_ip.has_value()) { info.ip = manual_ip->static_ip; info.gw = manual_ip->gateway; @@ -649,17 +693,16 @@ bool WiFiComponent::wifi_ap_ip_config_(optional manual_ip) { info.gw = network::IPAddress(192, 168, 4, 1); info.netmask = network::IPAddress(255, 255, 255, 0); } - tcpip_adapter_dhcp_status_t dhcp_status; - tcpip_adapter_dhcps_get_status(TCPIP_ADAPTER_IF_AP, &dhcp_status); - err = tcpip_adapter_dhcps_stop(TCPIP_ADAPTER_IF_AP); - if (err != ESP_OK) { - ESP_LOGV(TAG, "tcpip_adapter_dhcps_stop failed! %d", err); + + err = esp_netif_dhcpc_stop(s_ap_netif); + if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) { + ESP_LOGV(TAG, "esp_netif_dhcpc_stop failed: %s", esp_err_to_name(err)); return false; } - err = tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &info); + err = esp_netif_set_ip_info(s_ap_netif, &info); if (err != ESP_OK) { - ESP_LOGV(TAG, "tcpip_adapter_set_ip_info failed! %d", err); + ESP_LOGV(TAG, "esp_netif_set_ip_info failed! %d", err); return false; } @@ -672,17 +715,17 @@ bool WiFiComponent::wifi_ap_ip_config_(optional manual_ip) { start_address += 100; lease.end_ip = start_address; ESP_LOGV(TAG, "DHCP server IP lease end: %s", start_address.str().c_str()); - err = tcpip_adapter_dhcps_option(TCPIP_ADAPTER_OP_SET, TCPIP_ADAPTER_REQUESTED_IP_ADDRESS, &lease, sizeof(lease)); + err = esp_netif_dhcps_option(s_ap_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease)); if (err != ESP_OK) { - ESP_LOGV(TAG, "tcpip_adapter_dhcps_option failed! %d", err); + ESP_LOGV(TAG, "esp_netif_dhcps_option failed! %d", err); return false; } - err = tcpip_adapter_dhcps_start(TCPIP_ADAPTER_IF_AP); + err = esp_netif_dhcps_start(s_ap_netif); if (err != ESP_OK) { - ESP_LOGV(TAG, "tcpip_adapter_dhcps_start failed! %d", err); + ESP_LOGV(TAG, "esp_netif_dhcps_start failed! %d", err); return false; } @@ -710,6 +753,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { strncpy(reinterpret_cast(conf.ap.password), ap.get_password().c_str(), sizeof(conf.ap.password)); } + // pairwise cipher of SoftAP, group cipher will be derived using this. conf.ap.pairwise_cipher = WIFI_CIPHER_TYPE_CCMP; esp_err_t err = esp_wifi_set_config(WIFI_IF_AP, &conf); @@ -729,8 +773,8 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { } network::IPAddress WiFiComponent::wifi_soft_ap_ip() { - tcpip_adapter_ip_info_t ip; - tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_AP, &ip); + esp_netif_ip_info_t ip; + esp_netif_get_ip_info(s_ap_netif, &ip); return network::IPAddress(&ip.ip); } #endif // USE_WIFI_AP @@ -752,7 +796,6 @@ int32_t WiFiComponent::wifi_channel_() { return WiFi.channel(); } network::IPAddress WiFiComponent::wifi_subnet_mask_() { return network::IPAddress(WiFi.subnetMask()); } network::IPAddress WiFiComponent::wifi_gateway_ip_() { return network::IPAddress(WiFi.gatewayIP()); } network::IPAddress WiFiComponent::wifi_dns_ip_(int num) { return network::IPAddress(WiFi.dnsIP(num)); } -void WiFiComponent::wifi_loop_() {} } // namespace wifi } // namespace esphome diff --git a/esphome/components/wifi/wifi_component_esp_idf.cpp b/esphome/components/wifi/wifi_component_esp_idf.cpp index 5489a5d249..bc575e6a2d 100644 --- a/esphome/components/wifi/wifi_component_esp_idf.cpp +++ b/esphome/components/wifi/wifi_component_esp_idf.cpp @@ -2,18 +2,18 @@ #ifdef USE_ESP_IDF -#include -#include -#include +#include +#include #include #include #include -#include -#include +#include +#include +#include +#include #include #include -#include #ifdef USE_WIFI_WPA2_EAP #include #endif @@ -22,13 +22,14 @@ #include "dhcpserver/dhcpserver.h" #endif // USE_WIFI_AP -#include "lwip/err.h" +#include "lwip/apps/sntp.h" #include "lwip/dns.h" +#include "lwip/err.h" +#include "esphome/core/application.h" +#include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" -#include "esphome/core/hal.h" -#include "esphome/core/application.h" #include "esphome/core/util.h" namespace esphome { @@ -196,8 +197,8 @@ bool WiFiComponent::wifi_mode_(optional sta, optional ap) { bool current_sta = current_mode == WIFI_MODE_STA || current_mode == WIFI_MODE_APSTA; bool current_ap = current_mode == WIFI_MODE_AP || current_mode == WIFI_MODE_APSTA; - bool set_sta = sta.has_value() ? *sta : current_sta; - bool set_ap = ap.has_value() ? *ap : current_ap; + bool set_sta = sta.value_or(current_sta); + bool set_ap = ap.value_or(current_ap); wifi_mode_t set_mode; if (set_sta && set_ap) { @@ -438,6 +439,11 @@ bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { } if (!manual_ip.has_value()) { + // lwIP starts the SNTP client if it gets an SNTP server from DHCP. We don't need the time, and more importantly, + // the built-in SNTP client has a memory leak in certain situations. Disable this feature. + // https://github.com/esphome/issues/issues/2299 + sntp_servermode_dhcp(false); + // No manual IP is set; use DHCP client if (dhcp_status != ESP_NETIF_DHCP_STARTED) { err = esp_netif_dhcpc_start(s_sta_netif); @@ -455,13 +461,12 @@ bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { info.netmask = manual_ip->subnet; err = esp_netif_dhcpc_stop(s_sta_netif); if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) { - ESP_LOGV(TAG, "esp_netif_dhcpc_stop failed: %s", esp_err_to_name(err)); - return false; + ESP_LOGV(TAG, "Stopping DHCP client failed! %s", esp_err_to_name(err)); } + err = esp_netif_set_ip_info(s_sta_netif, &info); if (err != ESP_OK) { - ESP_LOGV(TAG, "esp_netif_set_ip_info failed: %s", esp_err_to_name(err)); - return false; + ESP_LOGV(TAG, "Setting manual IP info failed! %s", esp_err_to_name(err)); } esp_netif_dns_info_t dns; @@ -795,7 +800,7 @@ bool WiFiComponent::wifi_scan_start_(bool passive) { return false; } - scan_done_ = false; + this->scan_done_ = false; return true; } @@ -818,13 +823,13 @@ bool WiFiComponent::wifi_ap_ip_config_(optional manual_ip) { info.netmask = network::IPAddress(255, 255, 255, 0); } - err = esp_netif_dhcpc_stop(s_sta_netif); + err = esp_netif_dhcpc_stop(s_ap_netif); if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) { ESP_LOGV(TAG, "esp_netif_dhcpc_stop failed: %s", esp_err_to_name(err)); return false; } - err = esp_netif_set_ip_info(s_sta_netif, &info); + err = esp_netif_set_ip_info(s_ap_netif, &info); if (err != ESP_OK) { ESP_LOGV(TAG, "esp_netif_set_ip_info failed! %d", err); return false; @@ -839,14 +844,14 @@ bool WiFiComponent::wifi_ap_ip_config_(optional manual_ip) { start_address += 100; lease.end_ip = start_address; ESP_LOGV(TAG, "DHCP server IP lease end: %s", start_address.str().c_str()); - err = esp_netif_dhcps_option(s_sta_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease)); + err = esp_netif_dhcps_option(s_ap_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease)); if (err != ESP_OK) { ESP_LOGV(TAG, "esp_netif_dhcps_option failed! %d", err); return false; } - err = esp_netif_dhcps_start(s_sta_netif); + err = esp_netif_dhcps_start(s_ap_netif); if (err != ESP_OK) { ESP_LOGV(TAG, "esp_netif_dhcps_start failed! %d", err); @@ -893,25 +898,26 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { return true; } -#endif // USE_WIFI_AP network::IPAddress WiFiComponent::wifi_soft_ap_ip() { esp_netif_ip_info_t ip; - esp_netif_get_ip_info(s_sta_netif, &ip); + esp_netif_get_ip_info(s_ap_netif, &ip); return network::IPAddress(&ip.ip); } +#endif // USE_WIFI_AP + bool WiFiComponent::wifi_disconnect_() { return esp_wifi_disconnect(); } bssid_t WiFiComponent::wifi_bssid() { + bssid_t bssid{}; wifi_ap_record_t info; esp_err_t err = esp_wifi_sta_get_ap_info(&info); - bssid_t res{}; if (err != ESP_OK) { ESP_LOGW(TAG, "esp_wifi_sta_get_ap_info failed: %s", esp_err_to_name(err)); - return res; + return bssid; } - std::copy(info.bssid, info.bssid + 6, res.begin()); - return res; + std::copy(info.bssid, info.bssid + 6, bssid.begin()); + return bssid; } std::string WiFiComponent::wifi_ssid() { wifi_ap_record_t info{}; @@ -969,4 +975,4 @@ network::IPAddress WiFiComponent::wifi_dns_ip_(int num) { } // namespace wifi } // namespace esphome -#endif +#endif // USE_ESP_IDF From 98cb6555df956bf73f456eaeb74e5fa0399554e4 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Thu, 16 May 2024 05:22:40 +0200 Subject: [PATCH 214/313] SPI and I2C for ENS160 (#6369) --- CODEOWNERS | 5 +- esphome/components/ens160/__init__.py | 1 - esphome/components/ens160/sensor.py | 90 ++----------------- esphome/components/ens160_base/__init__.py | 78 ++++++++++++++++ .../ens160_base.cpp} | 7 +- .../ens160.h => ens160_base/ens160_base.h} | 12 ++- esphome/components/ens160_i2c/__init__.py | 0 esphome/components/ens160_i2c/ens160_i2c.cpp | 32 +++++++ esphome/components/ens160_i2c/ens160_i2c.h | 19 ++++ esphome/components/ens160_i2c/sensor.py | 22 +++++ esphome/components/ens160_spi/__init__.py | 0 esphome/components/ens160_spi/ens160_spi.cpp | 59 ++++++++++++ esphome/components/ens160_spi/ens160_spi.h | 22 +++++ esphome/components/ens160_spi/sensor.py | 22 +++++ .../components/ens160/test.esp32-c3-idf.yaml | 13 --- tests/components/ens160/test.esp32-c3.yaml | 13 --- tests/components/ens160/test.esp32-idf.yaml | 13 --- tests/components/ens160/test.esp32.yaml | 13 --- tests/components/ens160/test.esp8266.yaml | 13 --- tests/components/ens160/test.rp2040.yaml | 13 --- tests/components/ens160_i2c/common.yaml | 15 ++++ .../ens160_i2c/test.esp32-c3-idf.yaml | 5 ++ .../components/ens160_i2c/test.esp32-c3.yaml | 5 ++ .../components/ens160_i2c/test.esp32-idf.yaml | 5 ++ tests/components/ens160_i2c/test.esp32.yaml | 5 ++ tests/components/ens160_i2c/test.esp8266.yaml | 5 ++ tests/components/ens160_i2c/test.rp2040.yaml | 5 ++ tests/components/ens160_spi/common.yaml | 17 ++++ .../ens160_spi/test.esp32-c3-idf.yaml | 7 ++ .../components/ens160_spi/test.esp32-c3.yaml | 7 ++ .../components/ens160_spi/test.esp32-idf.yaml | 7 ++ tests/components/ens160_spi/test.esp32.yaml | 7 ++ tests/components/ens160_spi/test.esp8266.yaml | 7 ++ tests/components/ens160_spi/test.rp2040.yaml | 7 ++ tests/test3.1.yaml | 7 -- 35 files changed, 378 insertions(+), 180 deletions(-) create mode 100644 esphome/components/ens160_base/__init__.py rename esphome/components/{ens160/ens160.cpp => ens160_base/ens160_base.cpp} (99%) rename esphome/components/{ens160/ens160.h => ens160_base/ens160_base.h} (76%) create mode 100644 esphome/components/ens160_i2c/__init__.py create mode 100644 esphome/components/ens160_i2c/ens160_i2c.cpp create mode 100644 esphome/components/ens160_i2c/ens160_i2c.h create mode 100644 esphome/components/ens160_i2c/sensor.py create mode 100644 esphome/components/ens160_spi/__init__.py create mode 100644 esphome/components/ens160_spi/ens160_spi.cpp create mode 100644 esphome/components/ens160_spi/ens160_spi.h create mode 100644 esphome/components/ens160_spi/sensor.py delete mode 100644 tests/components/ens160/test.esp32-c3-idf.yaml delete mode 100644 tests/components/ens160/test.esp32-c3.yaml delete mode 100644 tests/components/ens160/test.esp32-idf.yaml delete mode 100644 tests/components/ens160/test.esp32.yaml delete mode 100644 tests/components/ens160/test.esp8266.yaml delete mode 100644 tests/components/ens160/test.rp2040.yaml create mode 100644 tests/components/ens160_i2c/common.yaml create mode 100644 tests/components/ens160_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/ens160_i2c/test.esp32-c3.yaml create mode 100644 tests/components/ens160_i2c/test.esp32-idf.yaml create mode 100644 tests/components/ens160_i2c/test.esp32.yaml create mode 100644 tests/components/ens160_i2c/test.esp8266.yaml create mode 100644 tests/components/ens160_i2c/test.rp2040.yaml create mode 100644 tests/components/ens160_spi/common.yaml create mode 100644 tests/components/ens160_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ens160_spi/test.esp32-c3.yaml create mode 100644 tests/components/ens160_spi/test.esp32-idf.yaml create mode 100644 tests/components/ens160_spi/test.esp32.yaml create mode 100644 tests/components/ens160_spi/test.esp8266.yaml create mode 100644 tests/components/ens160_spi/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 65ea3b1683..4227cdb06d 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -111,7 +111,10 @@ esphome/components/ee895/* @Stock-M esphome/components/ektf2232/touchscreen/* @jesserockz esphome/components/emc2101/* @ellull esphome/components/emmeti/* @E440QF -esphome/components/ens160/* @vincentscode +esphome/components/ens160/* @latonita +esphome/components/ens160_base/* @latonita @vincentscode +esphome/components/ens160_i2c/* @latonita +esphome/components/ens160_spi/* @latonita esphome/components/ens210/* @itn3rd77 esphome/components/esp32/* @esphome/core esphome/components/esp32_ble/* @Rapsssito @jesserockz diff --git a/esphome/components/ens160/__init__.py b/esphome/components/ens160/__init__.py index d26770a89d..e69de29bb2 100644 --- a/esphome/components/ens160/__init__.py +++ b/esphome/components/ens160/__init__.py @@ -1 +0,0 @@ -CODEOWNERS = ["@vincentscode"] diff --git a/esphome/components/ens160/sensor.py b/esphome/components/ens160/sensor.py index 6572c4e397..f666b530b3 100644 --- a/esphome/components/ens160/sensor.py +++ b/esphome/components/ens160/sensor.py @@ -1,87 +1,7 @@ -import esphome.codegen as cg import esphome.config_validation as cv -from esphome.components import i2c, sensor -from esphome.const import ( - CONF_COMPENSATION, - CONF_ECO2, - CONF_HUMIDITY, - CONF_ID, - CONF_TEMPERATURE, - CONF_TVOC, - DEVICE_CLASS_AQI, - DEVICE_CLASS_CARBON_DIOXIDE, - DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS, - ICON_CHEMICAL_WEAPON, - ICON_MOLECULE_CO2, - ICON_RADIATOR, - STATE_CLASS_MEASUREMENT, - UNIT_PARTS_PER_BILLION, - UNIT_PARTS_PER_MILLION, + +CODEOWNERS = ["@latonita"] + +CONFIG_SCHEMA = CONFIG_SCHEMA = cv.invalid( + "The ens160 sensor component has been renamed to ens160_i2c." ) - -CODEOWNERS = ["@vincentscode"] -DEPENDENCIES = ["i2c"] - -ens160_ns = cg.esphome_ns.namespace("ens160") -ENS160Component = ens160_ns.class_( - "ENS160Component", cg.PollingComponent, i2c.I2CDevice, sensor.Sensor -) - -CONF_AQI = "aqi" -UNIT_INDEX = "index" - -CONFIG_SCHEMA = ( - cv.Schema( - { - cv.GenerateID(): cv.declare_id(ENS160Component), - cv.Required(CONF_ECO2): sensor.sensor_schema( - unit_of_measurement=UNIT_PARTS_PER_MILLION, - icon=ICON_MOLECULE_CO2, - accuracy_decimals=0, - device_class=DEVICE_CLASS_CARBON_DIOXIDE, - state_class=STATE_CLASS_MEASUREMENT, - ), - cv.Required(CONF_TVOC): sensor.sensor_schema( - unit_of_measurement=UNIT_PARTS_PER_BILLION, - icon=ICON_RADIATOR, - accuracy_decimals=0, - device_class=DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS, - state_class=STATE_CLASS_MEASUREMENT, - ), - cv.Required(CONF_AQI): sensor.sensor_schema( - icon=ICON_CHEMICAL_WEAPON, - accuracy_decimals=0, - device_class=DEVICE_CLASS_AQI, - state_class=STATE_CLASS_MEASUREMENT, - ), - cv.Optional(CONF_COMPENSATION): cv.Schema( - { - cv.Required(CONF_TEMPERATURE): cv.use_id(sensor.Sensor), - cv.Required(CONF_HUMIDITY): cv.use_id(sensor.Sensor), - } - ), - } - ) - .extend(cv.polling_component_schema("60s")) - .extend(i2c.i2c_device_schema(0x53)) -) - - -async def to_code(config): - var = cg.new_Pvariable(config[CONF_ID]) - await cg.register_component(var, config) - await i2c.register_i2c_device(var, config) - - sens = await sensor.new_sensor(config[CONF_ECO2]) - cg.add(var.set_co2(sens)) - sens = await sensor.new_sensor(config[CONF_TVOC]) - cg.add(var.set_tvoc(sens)) - sens = await sensor.new_sensor(config[CONF_AQI]) - cg.add(var.set_aqi(sens)) - - if CONF_COMPENSATION in config: - compensation_config = config[CONF_COMPENSATION] - sens = await cg.get_variable(compensation_config[CONF_TEMPERATURE]) - cg.add(var.set_temperature(sens)) - sens = await cg.get_variable(compensation_config[CONF_HUMIDITY]) - cg.add(var.set_humidity(sens)) diff --git a/esphome/components/ens160_base/__init__.py b/esphome/components/ens160_base/__init__.py new file mode 100644 index 0000000000..eb6d0880af --- /dev/null +++ b/esphome/components/ens160_base/__init__.py @@ -0,0 +1,78 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + CONF_COMPENSATION, + CONF_ECO2, + CONF_HUMIDITY, + CONF_ID, + CONF_TEMPERATURE, + CONF_TVOC, + DEVICE_CLASS_AQI, + DEVICE_CLASS_CARBON_DIOXIDE, + DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS, + ICON_CHEMICAL_WEAPON, + ICON_MOLECULE_CO2, + ICON_RADIATOR, + STATE_CLASS_MEASUREMENT, + UNIT_PARTS_PER_BILLION, + UNIT_PARTS_PER_MILLION, +) + +CODEOWNERS = ["@vincentscode", "@latonita"] + +ens160_ns = cg.esphome_ns.namespace("ens160_base") + +CONF_AQI = "aqi" +UNIT_INDEX = "index" + +CONFIG_SCHEMA_BASE = cv.Schema( + { + cv.Required(CONF_ECO2): sensor.sensor_schema( + unit_of_measurement=UNIT_PARTS_PER_MILLION, + icon=ICON_MOLECULE_CO2, + accuracy_decimals=0, + device_class=DEVICE_CLASS_CARBON_DIOXIDE, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Required(CONF_TVOC): sensor.sensor_schema( + unit_of_measurement=UNIT_PARTS_PER_BILLION, + icon=ICON_RADIATOR, + accuracy_decimals=0, + device_class=DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Required(CONF_AQI): sensor.sensor_schema( + icon=ICON_CHEMICAL_WEAPON, + accuracy_decimals=0, + device_class=DEVICE_CLASS_AQI, + state_class=STATE_CLASS_MEASUREMENT, + ), + cv.Optional(CONF_COMPENSATION): cv.Schema( + { + cv.Required(CONF_TEMPERATURE): cv.use_id(sensor.Sensor), + cv.Required(CONF_HUMIDITY): cv.use_id(sensor.Sensor), + } + ), + } +).extend(cv.polling_component_schema("60s")) + + +async def to_code_base(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + + sens = await sensor.new_sensor(config[CONF_ECO2]) + cg.add(var.set_co2(sens)) + sens = await sensor.new_sensor(config[CONF_TVOC]) + cg.add(var.set_tvoc(sens)) + sens = await sensor.new_sensor(config[CONF_AQI]) + cg.add(var.set_aqi(sens)) + + if compensation_config := config.get(CONF_COMPENSATION): + sens = await cg.get_variable(compensation_config[CONF_TEMPERATURE]) + cg.add(var.set_temperature(sens)) + sens = await cg.get_variable(compensation_config[CONF_HUMIDITY]) + cg.add(var.set_humidity(sens)) + + return var diff --git a/esphome/components/ens160/ens160.cpp b/esphome/components/ens160_base/ens160_base.cpp similarity index 99% rename from esphome/components/ens160/ens160.cpp rename to esphome/components/ens160_base/ens160_base.cpp index c7a6ccbb73..71082c58c2 100644 --- a/esphome/components/ens160/ens160.cpp +++ b/esphome/components/ens160_base/ens160_base.cpp @@ -5,12 +5,12 @@ // Implementation based on: // https://github.com/sciosense/ENS160_driver -#include "ens160.h" +#include "ens160_base.h" #include "esphome/core/log.h" #include "esphome/core/hal.h" namespace esphome { -namespace ens160 { +namespace ens160_base { static const char *const TAG = "ens160"; @@ -303,7 +303,6 @@ void ENS160Component::dump_config() { ESP_LOGI(TAG, "Firmware Version: %d.%d.%d", this->firmware_ver_major_, this->firmware_ver_minor_, this->firmware_ver_build_); - LOG_I2C_DEVICE(this); LOG_UPDATE_INTERVAL(this); LOG_SENSOR(" ", "CO2 Sensor:", this->co2_); LOG_SENSOR(" ", "TVOC Sensor:", this->tvoc_); @@ -317,5 +316,5 @@ void ENS160Component::dump_config() { } } -} // namespace ens160 +} // namespace ens160_base } // namespace esphome diff --git a/esphome/components/ens160/ens160.h b/esphome/components/ens160_base/ens160_base.h similarity index 76% rename from esphome/components/ens160/ens160.h rename to esphome/components/ens160_base/ens160_base.h index 88bc8e3501..729225a5ae 100644 --- a/esphome/components/ens160/ens160.h +++ b/esphome/components/ens160_base/ens160_base.h @@ -2,12 +2,11 @@ #include "esphome/core/component.h" #include "esphome/components/sensor/sensor.h" -#include "esphome/components/i2c/i2c.h" namespace esphome { -namespace ens160 { +namespace ens160_base { -class ENS160Component : public PollingComponent, public i2c::I2CDevice, public sensor::Sensor { +class ENS160Component : public PollingComponent, public sensor::Sensor { public: void set_co2(sensor::Sensor *co2) { co2_ = co2; } void set_tvoc(sensor::Sensor *tvoc) { tvoc_ = tvoc; } @@ -44,6 +43,11 @@ class ENS160Component : public PollingComponent, public i2c::I2CDevice, public s bool warming_up_{false}; bool initial_startup_{false}; + virtual bool read_byte(uint8_t a_register, uint8_t *data) = 0; + virtual bool write_byte(uint8_t a_register, uint8_t data) = 0; + virtual bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) = 0; + virtual bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) = 0; + uint8_t firmware_ver_major_{0}; uint8_t firmware_ver_minor_{0}; uint8_t firmware_ver_build_{0}; @@ -56,5 +60,5 @@ class ENS160Component : public PollingComponent, public i2c::I2CDevice, public s sensor::Sensor *temperature_{nullptr}; }; -} // namespace ens160 +} // namespace ens160_base } // namespace esphome diff --git a/esphome/components/ens160_i2c/__init__.py b/esphome/components/ens160_i2c/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/ens160_i2c/ens160_i2c.cpp b/esphome/components/ens160_i2c/ens160_i2c.cpp new file mode 100644 index 0000000000..7163a5ad6e --- /dev/null +++ b/esphome/components/ens160_i2c/ens160_i2c.cpp @@ -0,0 +1,32 @@ +#include +#include + +#include "ens160_i2c.h" +#include "esphome/components/i2c/i2c.h" +#include "../ens160_base/ens160_base.h" + +namespace esphome { +namespace ens160_i2c { + +static const char *const TAG = "ens160_i2c.sensor"; + +bool ENS160I2CComponent::read_byte(uint8_t a_register, uint8_t *data) { + return I2CDevice::read_byte(a_register, data); +}; +bool ENS160I2CComponent::write_byte(uint8_t a_register, uint8_t data) { + return I2CDevice::write_byte(a_register, data); +}; +bool ENS160I2CComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) { + return I2CDevice::read_bytes(a_register, data, len); +}; +bool ENS160I2CComponent::write_bytes(uint8_t a_register, uint8_t *data, size_t len) { + return I2CDevice::write_bytes(a_register, data, len); +}; + +void ENS160I2CComponent::dump_config() { + ENS160Component::dump_config(); + LOG_I2C_DEVICE(this); +} + +} // namespace ens160_i2c +} // namespace esphome diff --git a/esphome/components/ens160_i2c/ens160_i2c.h b/esphome/components/ens160_i2c/ens160_i2c.h new file mode 100644 index 0000000000..2df32f27bf --- /dev/null +++ b/esphome/components/ens160_i2c/ens160_i2c.h @@ -0,0 +1,19 @@ +#pragma once + +#include "esphome/components/ens160_base/ens160_base.h" +#include "esphome/components/i2c/i2c.h" + +namespace esphome { +namespace ens160_i2c { + +class ENS160I2CComponent : public esphome::ens160_base::ENS160Component, public i2c::I2CDevice { + void dump_config() override; + + bool read_byte(uint8_t a_register, uint8_t *data) override; + bool write_byte(uint8_t a_register, uint8_t data) override; + bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) override; + bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) override; +}; + +} // namespace ens160_i2c +} // namespace esphome diff --git a/esphome/components/ens160_i2c/sensor.py b/esphome/components/ens160_i2c/sensor.py new file mode 100644 index 0000000000..96cbbaa7e9 --- /dev/null +++ b/esphome/components/ens160_i2c/sensor.py @@ -0,0 +1,22 @@ +import esphome.codegen as cg +from esphome.components import i2c +from ..ens160_base import to_code_base, cv, CONFIG_SCHEMA_BASE + +AUTO_LOAD = ["ens160_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["i2c"] + +ens160_ns = cg.esphome_ns.namespace("ens160_i2c") + +ENS160I2CComponent = ens160_ns.class_( + "ENS160I2CComponent", cg.PollingComponent, i2c.I2CDevice +) + +CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend( + i2c.i2c_device_schema(default_address=0x52) +).extend({cv.GenerateID(): cv.declare_id(ENS160I2CComponent)}) + + +async def to_code(config): + var = await to_code_base(config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/ens160_spi/__init__.py b/esphome/components/ens160_spi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/ens160_spi/ens160_spi.cpp b/esphome/components/ens160_spi/ens160_spi.cpp new file mode 100644 index 0000000000..fba2fdf0e4 --- /dev/null +++ b/esphome/components/ens160_spi/ens160_spi.cpp @@ -0,0 +1,59 @@ +#include +#include + +#include "ens160_spi.h" +#include + +namespace esphome { +namespace ens160_spi { + +static const char *const TAG = "ens160_spi.sensor"; + +inline uint8_t reg_read(uint8_t reg) { return (reg << 1) | 0x01; } + +inline uint8_t reg_write(uint8_t reg) { return (reg << 1) & 0xFE; } + +void ENS160SPIComponent::setup() { + this->spi_setup(); + ENS160Component::setup(); +}; + +void ENS160SPIComponent::dump_config() { + ENS160Component::dump_config(); + LOG_PIN(" CS Pin: ", this->cs_); +} + +bool ENS160SPIComponent::read_byte(uint8_t a_register, uint8_t *data) { + this->enable(); + this->transfer_byte(reg_read(a_register)); + *data = this->transfer_byte(0); + this->disable(); + return true; +} + +bool ENS160SPIComponent::write_byte(uint8_t a_register, uint8_t data) { + this->enable(); + this->transfer_byte(reg_write(a_register)); + this->transfer_byte(data); + this->disable(); + return true; +} + +bool ENS160SPIComponent::read_bytes(uint8_t a_register, uint8_t *data, size_t len) { + this->enable(); + this->transfer_byte(reg_read(a_register)); + this->read_array(data, len); + this->disable(); + return true; +} + +bool ENS160SPIComponent::write_bytes(uint8_t a_register, uint8_t *data, size_t len) { + this->enable(); + this->transfer_byte(reg_write(a_register)); + this->transfer_array(data, len); + this->disable(); + return true; +} + +} // namespace ens160_spi +} // namespace esphome diff --git a/esphome/components/ens160_spi/ens160_spi.h b/esphome/components/ens160_spi/ens160_spi.h new file mode 100644 index 0000000000..3371f37ffd --- /dev/null +++ b/esphome/components/ens160_spi/ens160_spi.h @@ -0,0 +1,22 @@ +#pragma once + +#include "esphome/components/ens160_base/ens160_base.h" +#include "esphome/components/spi/spi.h" + +namespace esphome { +namespace ens160_spi { + +class ENS160SPIComponent : public esphome::ens160_base::ENS160Component, + public spi::SPIDevice { + void setup() override; + void dump_config() override; + + bool read_byte(uint8_t a_register, uint8_t *data) override; + bool write_byte(uint8_t a_register, uint8_t data) override; + bool read_bytes(uint8_t a_register, uint8_t *data, size_t len) override; + bool write_bytes(uint8_t a_register, uint8_t *data, size_t len) override; +}; + +} // namespace ens160_spi +} // namespace esphome diff --git a/esphome/components/ens160_spi/sensor.py b/esphome/components/ens160_spi/sensor.py new file mode 100644 index 0000000000..552697fe1b --- /dev/null +++ b/esphome/components/ens160_spi/sensor.py @@ -0,0 +1,22 @@ +import esphome.codegen as cg +from esphome.components import spi +from ..ens160_base import to_code_base, cv, CONFIG_SCHEMA_BASE + +AUTO_LOAD = ["ens160_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["spi"] + +ens160_spi_ns = cg.esphome_ns.namespace("ens160_spi") + +ENS160SPIComponent = ens160_spi_ns.class_( + "ENS160SPIComponent", cg.PollingComponent, spi.SPIDevice +) + +CONFIG_SCHEMA = CONFIG_SCHEMA_BASE.extend(spi.spi_device_schema()).extend( + {cv.GenerateID(): cv.declare_id(ENS160SPIComponent)} +) + + +async def to_code(config): + var = await to_code_base(config) + await spi.register_spi_device(var, config) diff --git a/tests/components/ens160/test.esp32-c3-idf.yaml b/tests/components/ens160/test.esp32-c3-idf.yaml deleted file mode 100644 index 29f48e812f..0000000000 --- a/tests/components/ens160/test.esp32-c3-idf.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 5 - sda: 4 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160/test.esp32-c3.yaml b/tests/components/ens160/test.esp32-c3.yaml deleted file mode 100644 index 29f48e812f..0000000000 --- a/tests/components/ens160/test.esp32-c3.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 5 - sda: 4 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160/test.esp32-idf.yaml b/tests/components/ens160/test.esp32-idf.yaml deleted file mode 100644 index 23f7674aef..0000000000 --- a/tests/components/ens160/test.esp32-idf.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 16 - sda: 17 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160/test.esp32.yaml b/tests/components/ens160/test.esp32.yaml deleted file mode 100644 index 23f7674aef..0000000000 --- a/tests/components/ens160/test.esp32.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 16 - sda: 17 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160/test.esp8266.yaml b/tests/components/ens160/test.esp8266.yaml deleted file mode 100644 index 29f48e812f..0000000000 --- a/tests/components/ens160/test.esp8266.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 5 - sda: 4 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160/test.rp2040.yaml b/tests/components/ens160/test.rp2040.yaml deleted file mode 100644 index 29f48e812f..0000000000 --- a/tests/components/ens160/test.rp2040.yaml +++ /dev/null @@ -1,13 +0,0 @@ -i2c: - - id: i2c_ens160 - scl: 5 - sda: 4 - -sensor: - - platform: ens160 - eco2: - name: ENS160 eCO2 - tvoc: - name: ENS160 Total Volatile Organic Compounds - aqi: - name: ENS160 Air Quality Index diff --git a/tests/components/ens160_i2c/common.yaml b/tests/components/ens160_i2c/common.yaml new file mode 100644 index 0000000000..39a5b35067 --- /dev/null +++ b/tests/components/ens160_i2c/common.yaml @@ -0,0 +1,15 @@ +i2c: + - id: i2c_ens160 + scl: ${scl_pin} + sda: ${sda_pin} + +sensor: + - platform: ens160_i2c + i2c_id: i2c_ens160 + address: 0x53 + eco2: + name: "ENS160 eCO2" + tvoc: + name: "ENS160 Total Volatile Organic Compounds" + aqi: + name: "ENS160 Air Quality Index" diff --git a/tests/components/ens160_i2c/test.esp32-c3-idf.yaml b/tests/components/ens160_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ens160_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ens160_i2c/test.esp32-c3.yaml b/tests/components/ens160_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ens160_i2c/test.esp32-c3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ens160_i2c/test.esp32-idf.yaml b/tests/components/ens160_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/ens160_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/ens160_i2c/test.esp32.yaml b/tests/components/ens160_i2c/test.esp32.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/ens160_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/ens160_i2c/test.esp8266.yaml b/tests/components/ens160_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ens160_i2c/test.esp8266.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ens160_i2c/test.rp2040.yaml b/tests/components/ens160_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ens160_i2c/test.rp2040.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/common.yaml b/tests/components/ens160_spi/common.yaml new file mode 100644 index 0000000000..7250ead228 --- /dev/null +++ b/tests/components/ens160_spi/common.yaml @@ -0,0 +1,17 @@ +spi: + - id: spi_ens160 + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +sensor: + - platform: ens160_spi + spi_id: spi_ens160 + cs_pin: ${cs_pin} + eco2: + name: "ENS160 eCO2" + tvoc: + name: "ENS160 Total Volatile Organic Compounds" + aqi: + name: "ENS160 Air Quality Index" + diff --git a/tests/components/ens160_spi/test.esp32-c3-idf.yaml b/tests/components/ens160_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/ens160_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/test.esp32-c3.yaml b/tests/components/ens160_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/ens160_spi/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/test.esp32-idf.yaml b/tests/components/ens160_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/ens160_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/test.esp32.yaml b/tests/components/ens160_spi/test.esp32.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/ens160_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/test.esp8266.yaml b/tests/components/ens160_spi/test.esp8266.yaml new file mode 100644 index 0000000000..dbd158d030 --- /dev/null +++ b/tests/components/ens160_spi/test.esp8266.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO14 + mosi_pin: GPIO13 + miso_pin: GPIO12 + cs_pin: GPIO15 + +<<: !include common.yaml diff --git a/tests/components/ens160_spi/test.rp2040.yaml b/tests/components/ens160_spi/test.rp2040.yaml new file mode 100644 index 0000000000..f6c3f1eeca --- /dev/null +++ b/tests/components/ens160_spi/test.rp2040.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO2 + mosi_pin: GPIO3 + miso_pin: GPIO4 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml index 18d92289cd..a7d8dcb3f4 100644 --- a/tests/test3.1.yaml +++ b/tests/test3.1.yaml @@ -245,13 +245,6 @@ sensor: name: "ADE7953 Reactive Power B" update_interval: 1s - - platform: ens160 - eco2: - name: "ENS160 eCO2" - tvoc: - name: "ENS160 Total Volatile Organic Compounds" - aqi: - name: "ENS160 Air Quality Index" - platform: tmp102 name: TMP102 Temperature - platform: hm3301 From 996f71c03c2822c7fba5c761b1ab07ef3b119a0c Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 15 May 2024 23:40:21 -0500 Subject: [PATCH 215/313] Fix wifi compile error on IDF 5.1+ (#6756) --- esphome/components/wifi/wifi_component.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index f4a44b03a4..2f34f2b05b 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -3,8 +3,12 @@ #include #ifdef USE_ESP_IDF +#if (ESP_IDF_VERSION_MAJOR >= 5 && ESP_IDF_VERSION_MINOR >= 1) +#include +#else #include #endif +#endif #if defined(USE_ESP32) || defined(USE_ESP_IDF) #include From 034c196ad80a8ec4d1ba806bec3a2c87679a6477 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 16:46:16 +1200 Subject: [PATCH 216/313] [core] Update some coroutine priorities (#6755) --- esphome/components/datetime/__init__.py | 2 +- esphome/components/number/__init__.py | 2 +- esphome/components/ota/__init__.py | 2 +- esphome/components/select/__init__.py | 2 +- esphome/components/sensor/__init__.py | 2 +- esphome/components/template/datetime/__init__.py | 2 -- esphome/components/text/__init__.py | 2 +- 7 files changed, 6 insertions(+), 8 deletions(-) diff --git a/esphome/components/datetime/__init__.py b/esphome/components/datetime/__init__.py index 3d08e4a6d0..262f1e2315 100644 --- a/esphome/components/datetime/__init__.py +++ b/esphome/components/datetime/__init__.py @@ -156,7 +156,7 @@ async def new_datetime(config, *args): return var -@coroutine_with_priority(40.0) +@coroutine_with_priority(100.0) async def to_code(config): cg.add_define("USE_DATETIME") cg.add_global(datetime_ns.using) diff --git a/esphome/components/number/__init__.py b/esphome/components/number/__init__.py index 6d7ec97c90..8c3b15d22d 100644 --- a/esphome/components/number/__init__.py +++ b/esphome/components/number/__init__.py @@ -293,7 +293,7 @@ async def number_in_range_to_code(config, condition_id, template_arg, args): return var -@coroutine_with_priority(40.0) +@coroutine_with_priority(100.0) async def to_code(config): cg.add_define("USE_NUMBER") cg.add_global(number_ns.using) diff --git a/esphome/components/ota/__init__.py b/esphome/components/ota/__init__.py index 728d36f3fa..3d2956931c 100644 --- a/esphome/components/ota/__init__.py +++ b/esphome/components/ota/__init__.py @@ -76,7 +76,7 @@ BASE_OTA_SCHEMA = cv.Schema( ) -@coroutine_with_priority(50.0) +@coroutine_with_priority(51.0) async def to_code(config): cg.add_define("USE_OTA") diff --git a/esphome/components/select/__init__.py b/esphome/components/select/__init__.py index 7ad14f2440..1d234d5617 100644 --- a/esphome/components/select/__init__.py +++ b/esphome/components/select/__init__.py @@ -113,7 +113,7 @@ async def new_select(config, *, options: list[str]): return var -@coroutine_with_priority(40.0) +@coroutine_with_priority(100.0) async def to_code(config): cg.add_define("USE_SELECT") cg.add_global(select_ns.using) diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py index ece232e1a6..ef5c4cc645 100644 --- a/esphome/components/sensor/__init__.py +++ b/esphome/components/sensor/__init__.py @@ -912,7 +912,7 @@ def _lstsq(a, b): return _mat_dot(_mat_dot(x, a_t), b) -@coroutine_with_priority(40.0) +@coroutine_with_priority(100.0) async def to_code(config): cg.add_define("USE_SENSOR") cg.add_global(sensor_ns.using) diff --git a/esphome/components/template/datetime/__init__.py b/esphome/components/template/datetime/__init__.py index 0c9447116f..746ab8a6f3 100644 --- a/esphome/components/template/datetime/__init__.py +++ b/esphome/components/template/datetime/__init__.py @@ -17,7 +17,6 @@ from esphome.const import ( CONF_YEAR, ) -from esphome.core import coroutine_with_priority from .. import template_ns CODEOWNERS = ["@rfdarter"] @@ -100,7 +99,6 @@ CONFIG_SCHEMA = cv.All( ) -@coroutine_with_priority(-100.0) async def to_code(config): var = await datetime.new_datetime(config) diff --git a/esphome/components/text/__init__.py b/esphome/components/text/__init__.py index c0140ff082..4ca055a730 100644 --- a/esphome/components/text/__init__.py +++ b/esphome/components/text/__init__.py @@ -108,7 +108,7 @@ async def new_text( return var -@coroutine_with_priority(40.0) +@coroutine_with_priority(100.0) async def to_code(config): cg.add_define("USE_TEXT") cg.add_global(text_ns.using) From b06e0746f55010434a7b4622a85ee8ef3aaf4cb2 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Thu, 16 May 2024 06:50:28 +0200 Subject: [PATCH 217/313] INA228/INA229, INA238/INA239, INA237 power/energy/charge monitor (I2C, SPI) (#6138) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- CODEOWNERS | 3 + esphome/components/ina2xx_base/__init__.py | 255 ++++++++ .../components/ina2xx_base/ina2xx_base.cpp | 604 ++++++++++++++++++ esphome/components/ina2xx_base/ina2xx_base.h | 253 ++++++++ esphome/components/ina2xx_i2c/__init__.py | 0 esphome/components/ina2xx_i2c/ina2xx_i2c.cpp | 39 ++ esphome/components/ina2xx_i2c/ina2xx_i2c.h | 21 + esphome/components/ina2xx_i2c/sensor.py | 34 + esphome/components/ina2xx_spi/__init__.py | 0 esphome/components/ina2xx_spi/ina2xx_spi.cpp | 38 ++ esphome/components/ina2xx_spi/ina2xx_spi.h | 22 + esphome/components/ina2xx_spi/sensor.py | 33 + tests/components/ina2xx_i2c/common.yaml | 20 + .../ina2xx_i2c/test.esp32-c3-idf.yaml | 5 + .../components/ina2xx_i2c/test.esp32-c3.yaml | 5 + .../components/ina2xx_i2c/test.esp32-idf.yaml | 5 + tests/components/ina2xx_i2c/test.esp32.yaml | 5 + tests/components/ina2xx_i2c/test.esp8266.yaml | 5 + tests/components/ina2xx_i2c/test.rp2040.yaml | 5 + tests/components/ina2xx_spi/common.yaml | 21 + .../ina2xx_spi/test.esp32-c3-idf.yaml | 7 + .../components/ina2xx_spi/test.esp32-c3.yaml | 7 + .../components/ina2xx_spi/test.esp32-idf.yaml | 7 + tests/components/ina2xx_spi/test.esp32.yaml | 7 + tests/components/ina2xx_spi/test.esp8266.yaml | 7 + tests/components/ina2xx_spi/test.rp2040.yaml | 7 + 26 files changed, 1415 insertions(+) create mode 100644 esphome/components/ina2xx_base/__init__.py create mode 100644 esphome/components/ina2xx_base/ina2xx_base.cpp create mode 100644 esphome/components/ina2xx_base/ina2xx_base.h create mode 100644 esphome/components/ina2xx_i2c/__init__.py create mode 100644 esphome/components/ina2xx_i2c/ina2xx_i2c.cpp create mode 100644 esphome/components/ina2xx_i2c/ina2xx_i2c.h create mode 100644 esphome/components/ina2xx_i2c/sensor.py create mode 100644 esphome/components/ina2xx_spi/__init__.py create mode 100644 esphome/components/ina2xx_spi/ina2xx_spi.cpp create mode 100644 esphome/components/ina2xx_spi/ina2xx_spi.h create mode 100644 esphome/components/ina2xx_spi/sensor.py create mode 100644 tests/components/ina2xx_i2c/common.yaml create mode 100644 tests/components/ina2xx_i2c/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina2xx_i2c/test.esp32-c3.yaml create mode 100644 tests/components/ina2xx_i2c/test.esp32-idf.yaml create mode 100644 tests/components/ina2xx_i2c/test.esp32.yaml create mode 100644 tests/components/ina2xx_i2c/test.esp8266.yaml create mode 100644 tests/components/ina2xx_i2c/test.rp2040.yaml create mode 100644 tests/components/ina2xx_spi/common.yaml create mode 100644 tests/components/ina2xx_spi/test.esp32-c3-idf.yaml create mode 100644 tests/components/ina2xx_spi/test.esp32-c3.yaml create mode 100644 tests/components/ina2xx_spi/test.esp32-idf.yaml create mode 100644 tests/components/ina2xx_spi/test.esp32.yaml create mode 100644 tests/components/ina2xx_spi/test.esp8266.yaml create mode 100644 tests/components/ina2xx_spi/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 4227cdb06d..d97207941f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -180,6 +180,9 @@ esphome/components/improv_base/* @esphome/core esphome/components/improv_serial/* @esphome/core esphome/components/ina226/* @Sergio303 @latonita esphome/components/ina260/* @mreditor97 +esphome/components/ina2xx_base/* @latonita +esphome/components/ina2xx_i2c/* @latonita +esphome/components/ina2xx_spi/* @latonita esphome/components/inkbird_ibsth1_mini/* @fkirill esphome/components/inkplate6/* @jesserockz esphome/components/integration/* @OttoWinter diff --git a/esphome/components/ina2xx_base/__init__.py b/esphome/components/ina2xx_base/__init__.py new file mode 100644 index 0000000000..35b5baa83e --- /dev/null +++ b/esphome/components/ina2xx_base/__init__.py @@ -0,0 +1,255 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import sensor +from esphome.const import ( + CONF_BUS_VOLTAGE, + CONF_CURRENT, + CONF_ENERGY, + CONF_MAX_CURRENT, + CONF_MODEL, + CONF_NAME, + CONF_POWER, + CONF_SHUNT_RESISTANCE, + CONF_SHUNT_VOLTAGE, + CONF_TEMPERATURE, + DEVICE_CLASS_CURRENT, + DEVICE_CLASS_ENERGY, + DEVICE_CLASS_POWER, + DEVICE_CLASS_TEMPERATURE, + DEVICE_CLASS_VOLTAGE, + STATE_CLASS_MEASUREMENT, + UNIT_AMPERE, + UNIT_CELSIUS, + UNIT_VOLT, + UNIT_WATT_HOURS, + UNIT_WATT, +) + +CODEOWNERS = ["@latonita"] + +CONF_ADC_AVERAGING = "adc_averaging" +CONF_ADC_RANGE = "adc_range" +CONF_ADC_TIME = "adc_time" +CONF_CHARGE = "charge" +CONF_CHARGE_COULOMBS = "charge_coulombs" +CONF_ENERGY_JOULES = "energy_joules" +CONF_TEMPERATURE_COEFFICIENT = "temperature_coefficient" +UNIT_AMPERE_HOURS = "Ah" +UNIT_COULOMB = "C" +UNIT_JOULE = "J" +UNIT_MILLIVOLT = "mV" + +ina2xx_base_ns = cg.esphome_ns.namespace("ina2xx_base") +INA2XX = ina2xx_base_ns.class_("INA2XX", cg.PollingComponent) + +AdcTime = ina2xx_base_ns.enum("AdcTime") +ADC_TIMES = { + 50: AdcTime.ADC_TIME_50US, + 84: AdcTime.ADC_TIME_84US, + 150: AdcTime.ADC_TIME_150US, + 280: AdcTime.ADC_TIME_280US, + 540: AdcTime.ADC_TIME_540US, + 1052: AdcTime.ADC_TIME_1052US, + 2074: AdcTime.ADC_TIME_2074US, + 4120: AdcTime.ADC_TIME_4120US, +} + +AdcAvgSamples = ina2xx_base_ns.enum("AdcAvgSamples") +ADC_SAMPLES = { + 1: AdcAvgSamples.ADC_AVG_SAMPLES_1, + 4: AdcAvgSamples.ADC_AVG_SAMPLES_4, + 16: AdcAvgSamples.ADC_AVG_SAMPLES_16, + 64: AdcAvgSamples.ADC_AVG_SAMPLES_64, + 128: AdcAvgSamples.ADC_AVG_SAMPLES_128, + 256: AdcAvgSamples.ADC_AVG_SAMPLES_256, + 512: AdcAvgSamples.ADC_AVG_SAMPLES_512, + 1024: AdcAvgSamples.ADC_AVG_SAMPLES_1024, +} + +SENSOR_MODEL_OPTIONS = { + CONF_ENERGY: ["INA228", "INA229"], + CONF_ENERGY_JOULES: ["INA228", "INA229"], + CONF_CHARGE: ["INA228", "INA229"], + CONF_CHARGE_COULOMBS: ["INA228", "INA229"], +} + + +def validate_model_config(config): + model = config[CONF_MODEL] + + for key in config: + if key in SENSOR_MODEL_OPTIONS: + if model not in SENSOR_MODEL_OPTIONS[key]: + raise cv.Invalid( + f"Device model '{model}' does not support '{key}' sensor" + ) + + tempco = config[CONF_TEMPERATURE_COEFFICIENT] + if tempco > 0 and model not in ["INA228", "INA229"]: + raise cv.Invalid( + f"Device model '{model}' does not support temperature coefficient" + ) + + return config + + +def validate_adc_time(value): + value = cv.positive_time_period_microseconds(value).total_microseconds + return cv.enum(ADC_TIMES, int=True)(value) + + +INA2XX_SCHEMA = cv.Schema( + { + cv.Required(CONF_SHUNT_RESISTANCE): cv.All(cv.resistance, cv.Range(min=0.0)), + cv.Required(CONF_MAX_CURRENT): cv.All(cv.current, cv.Range(min=0.0)), + cv.Optional(CONF_ADC_RANGE, default=0): cv.int_range(min=0, max=1), + cv.Optional(CONF_ADC_TIME, default="4120 us"): cv.Any( + validate_adc_time, + { + cv.Optional(CONF_BUS_VOLTAGE, default="4120 us"): validate_adc_time, + cv.Optional(CONF_SHUNT_VOLTAGE, default="4120 us"): validate_adc_time, + cv.Optional(CONF_TEMPERATURE, default="4120 us"): validate_adc_time, + }, + ), + cv.Optional(CONF_ADC_AVERAGING, default=128): cv.enum(ADC_SAMPLES, int=True), + cv.Optional(CONF_TEMPERATURE_COEFFICIENT, default=0): cv.int_range( + min=0, max=16383 + ), + cv.Optional(CONF_SHUNT_VOLTAGE): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_MILLIVOLT, + accuracy_decimals=5, + device_class=DEVICE_CLASS_VOLTAGE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_BUS_VOLTAGE): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_VOLT, + accuracy_decimals=5, + device_class=DEVICE_CLASS_VOLTAGE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_TEMPERATURE): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_CELSIUS, + accuracy_decimals=5, + device_class=DEVICE_CLASS_TEMPERATURE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_CURRENT): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_AMPERE, + accuracy_decimals=8, + device_class=DEVICE_CLASS_CURRENT, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_POWER): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_WATT, + accuracy_decimals=6, + device_class=DEVICE_CLASS_POWER, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_ENERGY): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_WATT_HOURS, + accuracy_decimals=8, + device_class=DEVICE_CLASS_ENERGY, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_ENERGY_JOULES): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_JOULE, + accuracy_decimals=8, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_CHARGE): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_AMPERE_HOURS, + accuracy_decimals=8, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_CHARGE_COULOMBS): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_COULOMB, + accuracy_decimals=8, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + } +).extend(cv.polling_component_schema("60s")) + + +async def setup_ina2xx(var, config): + await cg.register_component(var, config) + + cg.add(var.set_model(config[CONF_MODEL])) + + cg.add(var.set_shunt_resistance_ohm(config[CONF_SHUNT_RESISTANCE])) + cg.add(var.set_max_current_a(config[CONF_MAX_CURRENT])) + cg.add(var.set_adc_range(config[CONF_ADC_RANGE])) + cg.add(var.set_adc_avg_samples(config[CONF_ADC_AVERAGING])) + cg.add(var.set_shunt_tempco(config[CONF_TEMPERATURE_COEFFICIENT])) + + adc_time_config = config[CONF_ADC_TIME] + if isinstance(adc_time_config, dict): + cg.add(var.set_adc_time_bus_voltage(adc_time_config[CONF_BUS_VOLTAGE])) + cg.add(var.set_adc_time_shunt_voltage(adc_time_config[CONF_SHUNT_VOLTAGE])) + cg.add(var.set_adc_time_die_temperature(adc_time_config[CONF_TEMPERATURE])) + else: + cg.add(var.set_adc_time_bus_voltage(adc_time_config)) + cg.add(var.set_adc_time_shunt_voltage(adc_time_config)) + cg.add(var.set_adc_time_die_temperature(adc_time_config)) + + if conf := config.get(CONF_SHUNT_VOLTAGE): + sens = await sensor.new_sensor(conf) + cg.add(var.set_shunt_voltage_sensor(sens)) + + if conf := config.get(CONF_BUS_VOLTAGE): + sens = await sensor.new_sensor(conf) + cg.add(var.set_bus_voltage_sensor(sens)) + + if conf := config.get(CONF_TEMPERATURE): + sens = await sensor.new_sensor(conf) + cg.add(var.set_die_temperature_sensor(sens)) + + if conf := config.get(CONF_CURRENT): + sens = await sensor.new_sensor(conf) + cg.add(var.set_current_sensor(sens)) + + if conf := config.get(CONF_POWER): + sens = await sensor.new_sensor(conf) + cg.add(var.set_power_sensor(sens)) + + if conf := config.get(CONF_ENERGY): + sens = await sensor.new_sensor(conf) + cg.add(var.set_energy_sensor_wh(sens)) + + if conf := config.get(CONF_ENERGY_JOULES): + sens = await sensor.new_sensor(conf) + cg.add(var.set_energy_sensor_j(sens)) + + if conf := config.get(CONF_CHARGE): + sens = await sensor.new_sensor(conf) + cg.add(var.set_charge_sensor_ah(sens)) + + if conf := config.get(CONF_CHARGE_COULOMBS): + sens = await sensor.new_sensor(conf) + cg.add(var.set_charge_sensor_c(sens)) diff --git a/esphome/components/ina2xx_base/ina2xx_base.cpp b/esphome/components/ina2xx_base/ina2xx_base.cpp new file mode 100644 index 0000000000..5d947d0537 --- /dev/null +++ b/esphome/components/ina2xx_base/ina2xx_base.cpp @@ -0,0 +1,604 @@ +#include "ina2xx_base.h" +#include "esphome/core/log.h" +#include "esphome/core/hal.h" +#include "esphome/core/helpers.h" +#include +#include + +namespace esphome { +namespace ina2xx_base { + +static const char *const TAG = "ina2xx"; + +#define OKFAILED(b) ((b) ? "OK" : "FAILED") + +static const uint16_t ADC_TIMES[8] = {50, 84, 150, 280, 540, 1052, 2074, 4120}; +static const uint16_t ADC_SAMPLES[8] = {1, 4, 16, 64, 128, 256, 512, 1024}; + +static const char *get_device_name(INAModel model) { + switch (model) { + case INAModel::INA_228: + return "INA228"; + case INAModel::INA_229: + return "INA229"; + case INAModel::INA_238: + return "INA238"; + case INAModel::INA_239: + return "INA239"; + case INAModel::INA_237: + return "INA237"; + default: + return "UNKNOWN"; + } +}; + +static bool check_model_and_device_match(INAModel model, uint16_t dev_id) { + switch (model) { + case INAModel::INA_228: + return dev_id == 0x228; + case INAModel::INA_229: + return dev_id == 0x229; + case INAModel::INA_238: + return dev_id == 0x238; + case INAModel::INA_239: + return dev_id == 0x239; + case INAModel::INA_237: + return dev_id == 0x237; + default: + return false; + } +} + +void INA2XX::setup() { + ESP_LOGCONFIG(TAG, "Setting up INA2xx..."); + + if (!this->reset_config_()) { + ESP_LOGE(TAG, "Reset failed, check connection"); + this->mark_failed(); + return; + } + delay(2); + + if (!this->check_device_model_()) { + ESP_LOGE(TAG, "Device not supported or model selected improperly in yaml file"); + this->mark_failed(); + return; + } + delay(1); + + this->configure_adc_range_(); + delay(1); + + this->configure_adc_(); + delay(1); + + this->configure_shunt_(); + delay(1); + + this->configure_shunt_tempco_(); + delay(1); + + this->state_ = State::IDLE; +} + +float INA2XX::get_setup_priority() const { return setup_priority::DATA; } + +void INA2XX::update() { + ESP_LOGD(TAG, "Updating"); + if (this->is_ready() && this->state_ == State::IDLE) { + ESP_LOGD(TAG, "Initiating new data collection"); + this->state_ = State::DATA_COLLECTION_1; + return; + } +} + +void INA2XX::loop() { + if (this->is_ready()) { + switch (this->state_) { + case State::NOT_INITIALIZED: + case State::IDLE: + break; + + case State::DATA_COLLECTION_1: + this->full_loop_is_okay_ = true; + + if (this->shunt_voltage_sensor_ != nullptr) { + float shunt_voltage{0}; + this->full_loop_is_okay_ &= this->read_shunt_voltage_mv_(shunt_voltage); + this->shunt_voltage_sensor_->publish_state(shunt_voltage); + } + this->state_ = State::DATA_COLLECTION_2; + break; + + case State::DATA_COLLECTION_2: + if (this->bus_voltage_sensor_ != nullptr) { + float bus_voltage{0}; + this->full_loop_is_okay_ &= this->read_bus_voltage_(bus_voltage); + this->bus_voltage_sensor_->publish_state(bus_voltage); + } + this->state_ = State::DATA_COLLECTION_3; + break; + + case State::DATA_COLLECTION_3: + if (this->die_temperature_sensor_ != nullptr) { + float die_temperature{0}; + this->full_loop_is_okay_ &= this->read_die_temp_c_(die_temperature); + this->die_temperature_sensor_->publish_state(die_temperature); + } + this->state_ = State::DATA_COLLECTION_4; + break; + + case State::DATA_COLLECTION_4: + if (this->current_sensor_ != nullptr) { + float current{0}; + this->full_loop_is_okay_ &= this->read_current_a_(current); + this->current_sensor_->publish_state(current); + } + this->state_ = State::DATA_COLLECTION_5; + break; + + case State::DATA_COLLECTION_5: + if (this->power_sensor_ != nullptr) { + float power{0}; + this->full_loop_is_okay_ &= this->read_power_w_(power); + this->power_sensor_->publish_state(power); + } + this->state_ = State::DATA_COLLECTION_6; + break; + + case State::DATA_COLLECTION_6: + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + if (this->energy_sensor_j_ != nullptr || this->energy_sensor_wh_ != nullptr || + this->charge_sensor_c_ != nullptr || this->charge_sensor_ah_ != nullptr) { + this->read_diagnostics_and_act_(); + } + if (this->energy_sensor_j_ != nullptr || this->energy_sensor_wh_ != nullptr) { + double energy_j{0}, energy_wh{0}; + this->full_loop_is_okay_ &= this->read_energy_(energy_j, energy_wh); + if (this->energy_sensor_j_ != nullptr) + this->energy_sensor_j_->publish_state(energy_j); + if (this->energy_sensor_wh_ != nullptr) + this->energy_sensor_wh_->publish_state(energy_wh); + } + } + this->state_ = State::DATA_COLLECTION_7; + break; + + case State::DATA_COLLECTION_7: + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + if (this->charge_sensor_c_ != nullptr || this->charge_sensor_ah_ != nullptr) { + double charge_c{0}, charge_ah{0}; + this->full_loop_is_okay_ &= this->read_charge_(charge_c, charge_ah); + if (this->charge_sensor_c_ != nullptr) + this->charge_sensor_c_->publish_state(charge_c); + if (this->charge_sensor_ah_ != nullptr) + this->charge_sensor_ah_->publish_state(charge_ah); + } + } + this->state_ = State::DATA_COLLECTION_8; + break; + + case State::DATA_COLLECTION_8: + if (this->full_loop_is_okay_) { + this->status_clear_warning(); + } else { + this->status_set_warning(); + } + this->state_ = State::IDLE; + break; + + default: + ESP_LOGW(TAG, "Unknown state of the component, might be due to memory corruption"); + break; + } + } +} + +void INA2XX::dump_config() { + ESP_LOGCONFIG(TAG, "INA2xx:"); + ESP_LOGCONFIG(TAG, " Device model = %s", get_device_name(this->ina_model_)); + + if (this->device_mismatch_) { + ESP_LOGE(TAG, " Device model mismatch. Found device with ID = %x. Please check your configuration.", + this->dev_id_); + } + if (this->is_failed()) { + ESP_LOGE(TAG, "Communication with INA2xx failed!"); + } + LOG_UPDATE_INTERVAL(this); + ESP_LOGCONFIG(TAG, " Shunt resistance = %f Ohm", this->shunt_resistance_ohm_); + ESP_LOGCONFIG(TAG, " Max current = %f A", this->max_current_a_); + ESP_LOGCONFIG(TAG, " Shunt temp coeff = %d ppm/°C", this->shunt_tempco_ppm_c_); + ESP_LOGCONFIG(TAG, " ADCRANGE = %d (%s)", (uint8_t) this->adc_range_, this->adc_range_ ? "±40.96 mV" : "±163.84 mV"); + ESP_LOGCONFIG(TAG, " CURRENT_LSB = %f", this->current_lsb_); + ESP_LOGCONFIG(TAG, " SHUNT_CAL = %d", this->shunt_cal_); + + ESP_LOGCONFIG(TAG, " ADC Samples = %d; ADC times: Bus = %d μs, Shunt = %d μs, Temp = %d μs", + ADC_SAMPLES[0b111 & (uint8_t) this->adc_avg_samples_], + ADC_TIMES[0b111 & (uint8_t) this->adc_time_bus_voltage_], + ADC_TIMES[0b111 & (uint8_t) this->adc_time_shunt_voltage_], + ADC_TIMES[0b111 & (uint8_t) this->adc_time_die_temperature_]); + + ESP_LOGCONFIG(TAG, " Device is %s", get_device_name(this->ina_model_)); + + LOG_SENSOR(" ", "Shunt Voltage", this->shunt_voltage_sensor_); + LOG_SENSOR(" ", "Bus Voltage", this->bus_voltage_sensor_); + LOG_SENSOR(" ", "Die Temperature", this->die_temperature_sensor_); + LOG_SENSOR(" ", "Current", this->current_sensor_); + LOG_SENSOR(" ", "Power", this->power_sensor_); + + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + LOG_SENSOR(" ", "Energy J", this->energy_sensor_j_); + LOG_SENSOR(" ", "Energy Wh", this->energy_sensor_wh_); + LOG_SENSOR(" ", "Charge C", this->charge_sensor_c_); + LOG_SENSOR(" ", "Charge Ah", this->charge_sensor_ah_); + } +} + +bool INA2XX::reset_energy_counters() { + if (this->ina_model_ != INAModel::INA_228 && this->ina_model_ != INAModel::INA_229) { + return false; + } + ESP_LOGV(TAG, "reset_energy_counters"); + + ConfigurationRegister cfg{0}; + auto ret = this->read_unsigned_16_(RegisterMap::REG_CONFIG, cfg.raw_u16); + cfg.RSTACC = true; + cfg.ADCRANGE = this->adc_range_; + ret = ret && this->write_unsigned_16_(RegisterMap::REG_CONFIG, cfg.raw_u16); + + this->energy_overflows_count_ = 0; + this->charge_overflows_count_ = 0; + return ret; +} + +bool INA2XX::reset_config_() { + ESP_LOGV(TAG, "Reset"); + ConfigurationRegister cfg{0}; + cfg.RST = true; + return this->write_unsigned_16_(RegisterMap::REG_CONFIG, cfg.raw_u16); +} + +bool INA2XX::check_device_model_() { + constexpr uint16_t manufacturer_ti = 0x5449; // "TI" + + uint16_t manufacturer_id{0}, rev_id{0}; + this->read_unsigned_16_(RegisterMap::REG_MANUFACTURER_ID, manufacturer_id); + if (!this->read_unsigned_16_(RegisterMap::REG_DEVICE_ID, this->dev_id_)) { + this->dev_id_ = 0; + ESP_LOGV(TAG, "Can't read device ID"); + }; + rev_id = this->dev_id_ & 0x0F; + this->dev_id_ >>= 4; + ESP_LOGI(TAG, "Manufacturer: 0x%04X, Device ID: 0x%04X, Revision: %d", manufacturer_id, this->dev_id_, rev_id); + + if (manufacturer_id != manufacturer_ti) { + ESP_LOGE(TAG, "Manufacturer ID doesn't match original 0x5449"); + this->device_mismatch_ = true; + return false; + } + + if (this->dev_id_ == 0x228 || this->dev_id_ == 0x229) { + ESP_LOGI(TAG, "Supported device found: INA%x, 85-V, 20-Bit, Ultra-Precise Power/Energy/Charge Monitor", + this->dev_id_); + } else if (this->dev_id_ == 0x238 || this->dev_id_ == 0x239) { + ESP_LOGI(TAG, "Supported device found: INA%x, 85-V, 16-Bit, High-Precision Power Monitor", this->dev_id_); + } else if (this->dev_id_ == 0x0 || this->dev_id_ == 0xFF) { + ESP_LOGI(TAG, "We assume device is: INA237 85-V, 16-Bit, Precision Power Monitor"); + this->dev_id_ = 0x237; + } else { + ESP_LOGE(TAG, "Unknown device ID %x.", this->dev_id_); + this->device_mismatch_ = true; + return false; + } + + // Check user-selected model agains what we have found. Mark as failed if selected model != found model + if (!check_model_and_device_match(this->ina_model_, this->dev_id_)) { + ESP_LOGE(TAG, "Selected model %s doesn't match found device INA%x", get_device_name(this->ina_model_), + this->dev_id_); + this->device_mismatch_ = true; + return false; + } + + // setup device coefficients + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + this->cfg_.vbus_lsb = 0.0001953125f; + this->cfg_.v_shunt_lsb_range0 = 0.0003125f; + this->cfg_.v_shunt_lsb_range1 = 0.000078125f; + this->cfg_.shunt_cal_scale = 13107.2f * 1000000.0f; + this->cfg_.current_lsb_scale_factor = -19; + this->cfg_.die_temp_lsb = 0.0078125f; + this->cfg_.power_coeff = 3.2f; + this->cfg_.energy_coeff = 16.0f * 3.2f; + } else { + this->cfg_.vbus_lsb = 0.0031250000f; + this->cfg_.v_shunt_lsb_range0 = 0.0050000f; + this->cfg_.v_shunt_lsb_range1 = 0.001250000f; + this->cfg_.shunt_cal_scale = 819.2f * 1000000.0f; + this->cfg_.current_lsb_scale_factor = -15; + this->cfg_.die_temp_lsb = 0.1250000f; + this->cfg_.power_coeff = 0.2f; + this->cfg_.energy_coeff = 0.0f; // N/A + } + + return true; +} + +bool INA2XX::configure_adc_range_() { + ESP_LOGV(TAG, "Setting ADCRANGE = %d", (uint8_t) this->adc_range_); + ConfigurationRegister cfg{0}; + auto ret = this->read_unsigned_16_(RegisterMap::REG_CONFIG, cfg.raw_u16); + cfg.ADCRANGE = this->adc_range_; + ret = ret && this->write_unsigned_16_(RegisterMap::REG_CONFIG, cfg.raw_u16); + + return ret; +} + +bool INA2XX::configure_adc_() { + bool ret{false}; + AdcConfigurationRegister adc_cfg{0}; + adc_cfg.MODE = 0x0F; // Fh = Continuous bus voltage, shunt voltage and temperature + adc_cfg.VBUSCT = this->adc_time_bus_voltage_; + adc_cfg.VSHCT = this->adc_time_shunt_voltage_; + adc_cfg.VTCT = this->adc_time_die_temperature_; + adc_cfg.AVG = this->adc_avg_samples_; + ret = this->write_unsigned_16_(RegisterMap::REG_ADC_CONFIG, adc_cfg.raw_u16); + return ret; +} + +bool INA2XX::configure_shunt_() { + this->current_lsb_ = ldexp(this->max_current_a_, this->cfg_.current_lsb_scale_factor); + this->shunt_cal_ = (uint16_t) (this->cfg_.shunt_cal_scale * this->current_lsb_ * this->shunt_resistance_ohm_); + if (this->adc_range_) + this->shunt_cal_ *= 4; + + if (this->shunt_cal_ & 0x8000) { + // cant be more than 15 bits + ESP_LOGW(TAG, "Shunt value too high"); + } + this->shunt_cal_ &= 0x7FFF; + ESP_LOGV(TAG, "Given Rshunt=%f Ohm and Max_current=%.3f", this->shunt_resistance_ohm_, this->max_current_a_); + ESP_LOGV(TAG, "New CURRENT_LSB=%f, SHUNT_CAL=%u", this->current_lsb_, this->shunt_cal_); + return this->write_unsigned_16_(RegisterMap::REG_SHUNT_CAL, this->shunt_cal_); +} + +bool INA2XX::configure_shunt_tempco_() { + // Only for 228/229 + // unsigned 14-bit value + // 0x0000 = 0 ppm/°C + // 0x3FFF = 16383 ppm/°C + if ((this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) && + this->shunt_tempco_ppm_c_ > 0) { + return this->write_unsigned_16_(RegisterMap::REG_SHUNT_TEMPCO, this->shunt_tempco_ppm_c_ & 0x3FFF); + } + return true; +} + +bool INA2XX::read_shunt_voltage_mv_(float &volt_out) { + // Two's complement value + // 228, 229 - 24bit: 20(23-4) + 4(3-0) res + // 237, 238, 239 - 16bit + + bool ret{false}; + float volt_reading{0}; + uint64_t raw{0}; + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + ret = this->read_unsigned_(RegisterMap::REG_VSHUNT, 3, raw); + raw >>= 4; + volt_reading = this->two_complement_(raw, 20); + } else { + ret = this->read_unsigned_(RegisterMap::REG_VSHUNT, 2, raw); + volt_reading = this->two_complement_(raw, 16); + } + + if (ret) { + volt_out = (this->adc_range_ ? this->cfg_.v_shunt_lsb_range1 : this->cfg_.v_shunt_lsb_range0) * volt_reading; + } + + ESP_LOGV(TAG, "read_shunt_voltage_mv_ ret=%s, shunt_cal=%d, reading_lsb=%f", OKFAILED(ret), this->shunt_cal_, + volt_reading); + + return ret; +} + +bool INA2XX::read_bus_voltage_(float &volt_out) { + // Two's complement value + // 228, 229 - 24bit: 20(23-4) + 4(3-0) res + // 237, 238, 239 - 16bit + + bool ret{false}; + float volt_reading{0}; + uint64_t raw{0}; + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + ret = this->read_unsigned_(RegisterMap::REG_VBUS, 3, raw); + raw >>= 4; + volt_reading = this->two_complement_(raw, 20); + } else { + ret = this->read_unsigned_(RegisterMap::REG_VBUS, 2, raw); + volt_reading = this->two_complement_(raw, 16); + } + if (ret) { + volt_out = this->cfg_.vbus_lsb * (float) volt_reading; + } + + ESP_LOGV(TAG, "read_bus_voltage_ ret=%s, reading_lsb=%f", OKFAILED(ret), volt_reading); + return ret; +} + +bool INA2XX::read_die_temp_c_(float &temp_out) { + // Two's complement value + // 228, 229 - 16bit + // 237, 238, 239 - 16bit: 12(15-4) + 4(3-0) res + + bool ret{false}; + float temp_reading{0}; + uint64_t raw{0}; + + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + ret = this->read_unsigned_(RegisterMap::REG_DIETEMP, 2, raw); + temp_reading = this->two_complement_(raw, 16); + } else { + ret = this->read_unsigned_(RegisterMap::REG_DIETEMP, 2, raw); + raw >>= 4; + temp_reading = this->two_complement_(raw, 12); + } + if (ret) { + temp_out = this->cfg_.die_temp_lsb * (float) temp_reading; + } + + ESP_LOGV(TAG, "read_die_temp_c_ ret=%s, reading_lsb=%f", OKFAILED(ret), temp_reading); + return ret; +} + +bool INA2XX::read_current_a_(float &s_out) { + // Two's complement value + // 228, 229 - 24bit: 20(23-4) + 4(3-0) res + // 237, 238, 239 - 16bit + bool ret{false}; + float amps_reading{0}; + uint64_t raw{0}; + + if (this->ina_model_ == INAModel::INA_228 || this->ina_model_ == INAModel::INA_229) { + ret = this->read_unsigned_(RegisterMap::REG_CURRENT, 3, raw); + raw >>= 4; + amps_reading = this->two_complement_(raw, 20); + } else { + ret = this->read_unsigned_(RegisterMap::REG_CURRENT, 2, raw); + amps_reading = this->two_complement_(raw, 16); + } + + ESP_LOGV(TAG, "read_current_a_ ret=%s. current_lsb=%f. reading_lsb=%f", OKFAILED(ret), this->current_lsb_, + amps_reading); + if (ret) { + amps_out = this->current_lsb_ * (float) amps_reading; + } + + return ret; +} + +bool INA2XX::read_power_w_(float &power_out) { + // Unsigned value + // 228, 229 - 24bit + // 237, 238, 239 - 24bit + uint64_t power_reading{0}; + auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_POWER, 3, power_reading); + + ESP_LOGV(TAG, "read_power_w_ ret=%s, reading_lsb=%d", OKFAILED(ret), (uint32_t) power_reading); + if (ret) { + power_out = this->cfg_.power_coeff * this->current_lsb_ * (float) power_reading; + } + + return ret; +} + +bool INA2XX::read_energy_(double &joules_out, double &watt_hours_out) { + // Unsigned value + // 228, 229 - 40bit + // 237, 238, 239 - not available + if (this->ina_model_ != INAModel::INA_228 && this->ina_model_ != INAModel::INA_229) { + joules_out = 0; + return false; + } + uint64_t joules_reading = 0; + uint64_t previous_energy = this->energy_overflows_count_ * (((uint64_t) 1) << 40); + auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_ENERGY, 5, joules_reading); + + ESP_LOGV(TAG, "read_energy_j_ ret=%s, reading_lsb=0x%" PRIX64 ", current_lsb=%f, overflow_cnt=%d", OKFAILED(ret), + joules_reading, this->current_lsb_, this->energy_overflows_count_); + if (ret) { + joules_out = this->cfg_.energy_coeff * this->current_lsb_ * (double) joules_reading + (double) previous_energy; + watt_hours_out = joules_out / 3600.0; + } + return ret; +} + +bool INA2XX::read_charge_(double &coulombs_out, double &_hours_out) { + // Two's complement value + // 228, 229 - 40bit + // 237, 238, 239 - not available + if (this->ina_model_ != INAModel::INA_228 && this->ina_model_ != INAModel::INA_229) { + coulombs_out = 0; + return false; + } + + // and what to do with this? datasheet doesnt tell us what if charge is negative + uint64_t previous_charge = this->charge_overflows_count_ * (((uint64_t) 1) << 39); + double coulombs_reading = 0; + uint64_t raw{0}; + auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_CHARGE, 5, raw); + coulombs_reading = this->two_complement_(raw, 40); + + ESP_LOGV(TAG, "read_charge_c_ ret=%d, curr_charge=%f + 39-bit overflow_cnt=%d", ret, coulombs_reading, + this->charge_overflows_count_); + if (ret) { + coulombs_out = this->current_lsb_ * (double) coulombs_reading + (double) previous_charge; + amp_hours_out = coulombs_out / 3600.0; + } + return ret; +} + +bool INA2XX::read_diagnostics_and_act_() { + if (this->ina_model_ != INAModel::INA_228 && this->ina_model_ != INAModel::INA_229) { + return false; + } + + DiagnosticRegister diag{0}; + auto ret = this->read_unsigned_16_(RegisterMap::REG_DIAG_ALRT, diag.raw_u16); + ESP_LOGV(TAG, "read_diagnostics_and_act_ ret=%s, 0x%04X", OKFAILED(ret), diag.raw_u16); + + if (diag.ENERGYOF) { + this->energy_overflows_count_++; // 40-bit overflow + } + + if (diag.CHARGEOF) { + this->charge_overflows_count_++; // 39-bit overflow + } + + return ret; +} + +bool INA2XX::write_unsigned_16_(uint8_t reg, uint16_t val) { + uint16_t data_out = byteswap(val); + auto ret = this->write_ina_register(reg, (uint8_t *) &data_out, 2); + if (!ret) { + ESP_LOGV(TAG, "write_unsigned_16_ FAILED reg=0x%02X, val=0x%04X", reg, val); + } + return ret; +} + +bool INA2XX::read_unsigned_(uint8_t reg, uint8_t reg_size, uint64_t &data_out) { + static uint8_t rx_buf[5] = {0}; // max buffer size + + if (reg_size > 5) { + return false; + } + + auto ret = this->read_ina_register(reg, rx_buf, reg_size); + + // Combine bytes + data_out = rx_buf[0]; + for (uint8_t i = 1; i < reg_size; i++) { + data_out = (data_out << 8) | rx_buf[i]; + } + ESP_LOGV(TAG, "read_unsigned_ reg=0x%02X, ret=%s, len=%d, val=0x%" PRIX64, reg, OKFAILED(ret), reg_size, data_out); + + return ret; +} + +bool INA2XX::read_unsigned_16_(uint8_t reg, uint16_t &out) { + uint16_t data_in{0}; + auto ret = this->read_ina_register(reg, (uint8_t *) &data_in, 2); + out = byteswap(data_in); + ESP_LOGV(TAG, "read_unsigned_16_ 0x%02X, ret= %s, val=0x%04X", reg, OKFAILED(ret), out); + return ret; +} + +int64_t INA2XX::two_complement_(uint64_t value, uint8_t bits) { + if (value > (1ULL << (bits - 1))) { + return (int64_t) (value - (1ULL << bits)); + } else { + return (int64_t) value; + } +} +} // namespace ina2xx_base +} // namespace esphome diff --git a/esphome/components/ina2xx_base/ina2xx_base.h b/esphome/components/ina2xx_base/ina2xx_base.h new file mode 100644 index 0000000000..261c5321bf --- /dev/null +++ b/esphome/components/ina2xx_base/ina2xx_base.h @@ -0,0 +1,253 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/sensor/sensor.h" + +namespace esphome { +namespace ina2xx_base { + +enum RegisterMap : uint8_t { + REG_CONFIG = 0x00, + REG_ADC_CONFIG = 0x01, + REG_SHUNT_CAL = 0x02, + REG_SHUNT_TEMPCO = 0x03, + REG_VSHUNT = 0x04, + REG_VBUS = 0x05, + REG_DIETEMP = 0x06, + REG_CURRENT = 0x07, + REG_POWER = 0x08, + REG_ENERGY = 0x09, + REG_CHARGE = 0x0A, + REG_DIAG_ALRT = 0x0B, + REG_SOVL = 0x0C, + REG_SUVL = 0x0D, + REG_BOVL = 0x0E, + REG_BUVL = 0x0F, + REG_TEMP_LIMIT = 0x10, + REG_PWR_LIMIT = 0x11, + REG_MANUFACTURER_ID = 0x3E, + REG_DEVICE_ID = 0x3F +}; + +enum AdcRange : uint16_t { + ADC_RANGE_0 = 0, + ADC_RANGE_1 = 1, +}; + +enum AdcTime : uint16_t { + ADC_TIME_50US = 0, + ADC_TIME_84US = 1, + ADC_TIME_150US = 2, + ADC_TIME_280US = 3, + ADC_TIME_540US = 4, + ADC_TIME_1052US = 5, + ADC_TIME_2074US = 6, + ADC_TIME_4120US = 7, +}; + +enum AdcAvgSamples : uint16_t { + ADC_AVG_SAMPLES_1 = 0, + ADC_AVG_SAMPLES_4 = 1, + ADC_AVG_SAMPLES_16 = 2, + ADC_AVG_SAMPLES_64 = 3, + ADC_AVG_SAMPLES_128 = 4, + ADC_AVG_SAMPLES_256 = 5, + ADC_AVG_SAMPLES_512 = 6, + ADC_AVG_SAMPLES_1024 = 7, +}; + +union ConfigurationRegister { + uint16_t raw_u16; + struct { + uint16_t reserved_0_3 : 4; // Reserved + AdcRange ADCRANGE : 1; // Shunt measurement range 0: ±163.84 mV, 1: ±40.96 mV + bool TEMPCOMP : 1; // Temperature compensation enable + uint16_t CONVDLY : 8; // Sets the Delay for initial ADC conversion in steps of 2 ms. + bool RSTACC : 1; // Reset counters + bool RST : 1; // Full device reset + } __attribute__((packed)); +}; + +union AdcConfigurationRegister { + uint16_t raw_u16; + struct { + AdcAvgSamples AVG : 3; + AdcTime VTCT : 3; // Voltage conversion time + AdcTime VSHCT : 3; // Shunt voltage conversion time + AdcTime VBUSCT : 3; // Bus voltage conversion time + uint16_t MODE : 4; + } __attribute__((packed)); +}; + +union TempCompensationRegister { + uint16_t raw_u16; + struct { + uint16_t TEMPCO : 14; + uint16_t reserved : 2; + } __attribute__((packed)); +}; + +union DiagnosticRegister { + uint16_t raw_u16; + struct { + bool MEMSTAT : 1; + bool CNVRF : 1; + bool POL : 1; + bool BUSUL : 1; + bool BUSOL : 1; + bool SHNTUL : 1; + bool SHNTOL : 1; + bool TMPOL : 1; + bool RESERVED1 : 1; + bool MATHOF : 1; + bool CHARGEOF : 1; + bool ENERGYOF : 1; + bool APOL : 1; + bool SLOWALERT : 1; + bool CNVR : 1; + bool ALATCH : 1; + } __attribute__((packed)); +}; + +enum INAModel : uint8_t { INA_UNKNOWN = 0, INA_228, INA_229, INA_238, INA_239, INA_237 }; + +class INA2XX : public PollingComponent { + public: + void setup() override; + float get_setup_priority() const override; + void update() override; + void loop() override; + void dump_config() override; + + void set_shunt_resistance_ohm(float shunt_resistance_ohm) { this->shunt_resistance_ohm_ = shunt_resistance_ohm; } + void set_max_current_a(float max_current_a) { this->max_current_a_ = max_current_a; } + void set_adc_range(uint8_t range) { this->adc_range_ = (range == 0) ? AdcRange::ADC_RANGE_0 : AdcRange::ADC_RANGE_1; } + void set_adc_time_bus_voltage(AdcTime time) { this->adc_time_bus_voltage_ = time; } + void set_adc_time_shunt_voltage(AdcTime time) { this->adc_time_shunt_voltage_ = time; } + void set_adc_time_die_temperature(AdcTime time) { this->adc_time_die_temperature_ = time; } + void set_adc_avg_samples(AdcAvgSamples samples) { this->adc_avg_samples_ = samples; } + void set_shunt_tempco(uint16_t coeff) { this->shunt_tempco_ppm_c_ = coeff; } + + void set_shunt_voltage_sensor(sensor::Sensor *sensor) { this->shunt_voltage_sensor_ = sensor; } + void set_bus_voltage_sensor(sensor::Sensor *sensor) { this->bus_voltage_sensor_ = sensor; } + void set_die_temperature_sensor(sensor::Sensor *sensor) { this->die_temperature_sensor_ = sensor; } + void set_current_sensor(sensor::Sensor *sensor) { this->current_sensor_ = sensor; } + void set_power_sensor(sensor::Sensor *sensor) { this->power_sensor_ = sensor; } + void set_energy_sensor_j(sensor::Sensor *sensor) { this->energy_sensor_j_ = sensor; } + void set_energy_sensor_wh(sensor::Sensor *sensor) { this->energy_sensor_wh_ = sensor; } + void set_charge_sensor_c(sensor::Sensor *sensor) { this->charge_sensor_c_ = sensor; } + void set_charge_sensor_ah(sensor::Sensor *sensor) { this->charge_sensor_ah_ = sensor; } + + void set_model(INAModel model) { this->ina_model_ = model; } + + bool reset_energy_counters(); + + protected: + bool reset_config_(); + bool check_device_model_(); + bool configure_adc_(); + + bool configure_shunt_(); + bool configure_shunt_tempco_(); + bool configure_adc_range_(); + + bool read_shunt_voltage_mv_(float &volt_out); + bool read_bus_voltage_(float &volt_out); + bool read_die_temp_c_(float &temp); + bool read_current_a_(float &s_out); + bool read_power_w_(float &power_out); + bool read_energy_(double &joules_out, double &watt_hours_out); + bool read_charge_(double &coulombs_out, double &_hours_out); + + bool read_diagnostics_and_act_(); + + // + // User configuration + // + float shunt_resistance_ohm_; + float max_current_a_; + AdcRange adc_range_{AdcRange::ADC_RANGE_0}; + AdcTime adc_time_bus_voltage_{AdcTime::ADC_TIME_4120US}; + AdcTime adc_time_shunt_voltage_{AdcTime::ADC_TIME_4120US}; + AdcTime adc_time_die_temperature_{AdcTime::ADC_TIME_4120US}; + AdcAvgSamples adc_avg_samples_{AdcAvgSamples::ADC_AVG_SAMPLES_128}; + uint16_t shunt_tempco_ppm_c_{0}; + + // + // Calculated coefficients + // + uint16_t shunt_cal_{0}; + float current_lsb_{0}; + + uint32_t energy_overflows_count_{0}; + uint32_t charge_overflows_count_{0}; + + // + // Sensor objects + // + sensor::Sensor *shunt_voltage_sensor_{nullptr}; + sensor::Sensor *bus_voltage_sensor_{nullptr}; + sensor::Sensor *die_temperature_sensor_{nullptr}; + sensor::Sensor *current_sensor_{nullptr}; + sensor::Sensor *power_sensor_{nullptr}; + sensor::Sensor *energy_sensor_j_{nullptr}; + sensor::Sensor *energy_sensor_wh_{nullptr}; + sensor::Sensor *charge_sensor_c_{nullptr}; + sensor::Sensor *charge_sensor_ah_{nullptr}; + + // + // FSM states + // + enum class State : uint8_t { + NOT_INITIALIZED = 0x0, + IDLE, + DATA_COLLECTION_1, + DATA_COLLECTION_2, + DATA_COLLECTION_3, + DATA_COLLECTION_4, + DATA_COLLECTION_5, + DATA_COLLECTION_6, + DATA_COLLECTION_7, + DATA_COLLECTION_8, + } state_{State::NOT_INITIALIZED}; + + bool full_loop_is_okay_{true}; + + // + // Device model + // + INAModel ina_model_{INAModel::INA_UNKNOWN}; + uint16_t dev_id_{0}; + bool device_mismatch_{false}; + + // + // Device specific parameters + // + struct { + float vbus_lsb; + float v_shunt_lsb_range0; + float v_shunt_lsb_range1; + float shunt_cal_scale; + int8_t current_lsb_scale_factor; + float die_temp_lsb; + float power_coeff; + float energy_coeff; + } cfg_; + + // + // Register read/write + // + bool read_unsigned_(uint8_t reg, uint8_t reg_size, uint64_t &data_out); + bool read_unsigned_16_(uint8_t reg, uint16_t &out); + bool write_unsigned_16_(uint8_t reg, uint16_t val); + + int64_t two_complement_(uint64_t value, uint8_t bits); + + // + // Interface-specific implementation + // + virtual bool read_ina_register(uint8_t a_register, uint8_t *data, size_t len) = 0; + virtual bool write_ina_register(uint8_t a_register, const uint8_t *data, size_t len) = 0; +}; +} // namespace ina2xx_base +} // namespace esphome diff --git a/esphome/components/ina2xx_i2c/__init__.py b/esphome/components/ina2xx_i2c/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/ina2xx_i2c/ina2xx_i2c.cpp b/esphome/components/ina2xx_i2c/ina2xx_i2c.cpp new file mode 100644 index 0000000000..d28525635d --- /dev/null +++ b/esphome/components/ina2xx_i2c/ina2xx_i2c.cpp @@ -0,0 +1,39 @@ +#include "ina2xx_i2c.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace ina2xx_i2c { + +static const char *const TAG = "ina2xx_i2c"; + +void INA2XXI2C::setup() { + auto err = this->write(nullptr, 0); + if (err != i2c::ERROR_OK) { + this->mark_failed(); + return; + } + INA2XX::setup(); +} + +void INA2XXI2C::dump_config() { + INA2XX::dump_config(); + LOG_I2C_DEVICE(this); +} + +bool INA2XXI2C::read_ina_register(uint8_t reg, uint8_t *data, size_t len) { + auto ret = this->read_register(reg, data, len, false); + if (ret != i2c::ERROR_OK) { + ESP_LOGE(TAG, "read_ina_register_ failed. Reg=0x%02X Err=%d", reg, ret); + } + return ret == i2c::ERROR_OK; +} + +bool INA2XXI2C::write_ina_register(uint8_t reg, const uint8_t *data, size_t len) { + auto ret = this->write_register(reg, data, len); + if (ret != i2c::ERROR_OK) { + ESP_LOGE(TAG, "write_register failed. Reg=0x%02X Err=%d", reg, ret); + } + return ret == i2c::ERROR_OK; +} +} // namespace ina2xx_i2c +} // namespace esphome diff --git a/esphome/components/ina2xx_i2c/ina2xx_i2c.h b/esphome/components/ina2xx_i2c/ina2xx_i2c.h new file mode 100644 index 0000000000..c90b9bf190 --- /dev/null +++ b/esphome/components/ina2xx_i2c/ina2xx_i2c.h @@ -0,0 +1,21 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/ina2xx_base/ina2xx_base.h" +#include "esphome/components/i2c/i2c.h" + +namespace esphome { +namespace ina2xx_i2c { + +class INA2XXI2C : public ina2xx_base::INA2XX, public i2c::I2CDevice { + public: + void setup() override; + void dump_config() override; + + protected: + bool read_ina_register(uint8_t reg, uint8_t *data, size_t len) override; + bool write_ina_register(uint8_t reg, const uint8_t *data, size_t len) override; +}; + +} // namespace ina2xx_i2c +} // namespace esphome diff --git a/esphome/components/ina2xx_i2c/sensor.py b/esphome/components/ina2xx_i2c/sensor.py new file mode 100644 index 0000000000..57ddcef17a --- /dev/null +++ b/esphome/components/ina2xx_i2c/sensor.py @@ -0,0 +1,34 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import ina2xx_base, i2c +from esphome.const import CONF_ID, CONF_MODEL + +AUTO_LOAD = ["ina2xx_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["i2c"] + +ina2xx_i2c = cg.esphome_ns.namespace("ina2xx_i2c") +INA2XX_I2C = ina2xx_i2c.class_("INA2XXI2C", ina2xx_base.INA2XX, i2c.I2CDevice) + +INAModel = ina2xx_base.ina2xx_base_ns.enum("INAModel") +INA_MODELS = { + "INA228": INAModel.INA_228, + "INA238": INAModel.INA_238, + "INA237": INAModel.INA_237, +} + +CONFIG_SCHEMA = cv.All( + ina2xx_base.INA2XX_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(INA2XX_I2C), + cv.Required(CONF_MODEL): cv.enum(INA_MODELS, upper=True), + } + ).extend(i2c.i2c_device_schema(0x40)), + ina2xx_base.validate_model_config, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await ina2xx_base.setup_ina2xx(var, config) + await i2c.register_i2c_device(var, config) diff --git a/esphome/components/ina2xx_spi/__init__.py b/esphome/components/ina2xx_spi/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/esphome/components/ina2xx_spi/ina2xx_spi.cpp b/esphome/components/ina2xx_spi/ina2xx_spi.cpp new file mode 100644 index 0000000000..3e04a87665 --- /dev/null +++ b/esphome/components/ina2xx_spi/ina2xx_spi.cpp @@ -0,0 +1,38 @@ +#include "ina2xx_spi.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace ina2xx_spi { + +static const char *const TAG = "ina2xx_spi"; + +void INA2XXSPI::setup() { + this->spi_setup(); + INA2XX::setup(); +} + +void INA2XXSPI::dump_config() { + INA2XX::dump_config(); + LOG_PIN(" CS Pin: ", this->cs_); +} + +bool INA2XXSPI::read_ina_register(uint8_t reg, uint8_t *data, size_t len) { + reg = (reg << 2); // top 6 bits + reg |= 0x01; // read + this->enable(); + this->write_byte(reg); + this->read_array(data, len); + this->disable(); + return true; +} + +bool INA2XXSPI::write_ina_register(uint8_t reg, const uint8_t *data, size_t len) { + reg = (reg << 2); // top 6 bits + this->enable(); + this->write_byte(reg); + this->write_array(data, len); + this->disable(); + return true; +} +} // namespace ina2xx_spi +} // namespace esphome diff --git a/esphome/components/ina2xx_spi/ina2xx_spi.h b/esphome/components/ina2xx_spi/ina2xx_spi.h new file mode 100644 index 0000000000..3b21518d34 --- /dev/null +++ b/esphome/components/ina2xx_spi/ina2xx_spi.h @@ -0,0 +1,22 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/ina2xx_base/ina2xx_base.h" +#include "esphome/components/spi/spi.h" + +namespace esphome { +namespace ina2xx_spi { + +class INA2XXSPI : public ina2xx_base::INA2XX, + public spi::SPIDevice { + public: + void setup() override; + void dump_config() override; + + protected: + bool read_ina_register(uint8_t reg, uint8_t *data, size_t len) override; + bool write_ina_register(uint8_t reg, const uint8_t *data, size_t len) override; +}; +} // namespace ina2xx_spi +} // namespace esphome diff --git a/esphome/components/ina2xx_spi/sensor.py b/esphome/components/ina2xx_spi/sensor.py new file mode 100644 index 0000000000..e7ae51d516 --- /dev/null +++ b/esphome/components/ina2xx_spi/sensor.py @@ -0,0 +1,33 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import ina2xx_base, spi +from esphome.const import CONF_ID, CONF_MODEL + +AUTO_LOAD = ["ina2xx_base"] +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["spi"] + +ina2xx_spi = cg.esphome_ns.namespace("ina2xx_spi") +INA2XX_SPI = ina2xx_spi.class_("INA2XXSPI", ina2xx_base.INA2XX, spi.SPIDevice) + +INAModel = ina2xx_base.ina2xx_base_ns.enum("INAModel") +INA_MODELS = { + "INA229": INAModel.INA_229, + "INA239": INAModel.INA_239, +} + +CONFIG_SCHEMA = cv.All( + ina2xx_base.INA2XX_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(INA2XX_SPI), + cv.Required(CONF_MODEL): cv.enum(INA_MODELS, upper=True), + } + ).extend(spi.spi_device_schema(cs_pin_required=True)), + ina2xx_base.validate_model_config, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await ina2xx_base.setup_ina2xx(var, config) + await spi.register_spi_device(var, config) diff --git a/tests/components/ina2xx_i2c/common.yaml b/tests/components/ina2xx_i2c/common.yaml new file mode 100644 index 0000000000..320b680b6b --- /dev/null +++ b/tests/components/ina2xx_i2c/common.yaml @@ -0,0 +1,20 @@ +i2c: + - id: i2c_ina2xx + scl: ${scl_pin} + sda: ${sda_pin} + +sensor: + - platform: ina2xx_i2c + i2c_id: i2c_ina2xx + address: 0x40 + model: INA228 + shunt_resistance: 0.001130 ohm + max_current: 40 A + adc_range: 1 + temperature_coefficient: 50 + shunt_voltage: "INA2xx Shunt Voltage" + bus_voltage: "INA2xx Bus Voltage" + current: "INA2xx Current" + power: "INA2xx Power" + energy: "INA2xx Energy" + charge: "INA2xx Charge" diff --git a/tests/components/ina2xx_i2c/test.esp32-c3-idf.yaml b/tests/components/ina2xx_i2c/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ina2xx_i2c/test.esp32-c3-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_i2c/test.esp32-c3.yaml b/tests/components/ina2xx_i2c/test.esp32-c3.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ina2xx_i2c/test.esp32-c3.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_i2c/test.esp32-idf.yaml b/tests/components/ina2xx_i2c/test.esp32-idf.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/ina2xx_i2c/test.esp32-idf.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_i2c/test.esp32.yaml b/tests/components/ina2xx_i2c/test.esp32.yaml new file mode 100644 index 0000000000..63c3bd6afd --- /dev/null +++ b/tests/components/ina2xx_i2c/test.esp32.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO16 + sda_pin: GPIO17 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_i2c/test.esp8266.yaml b/tests/components/ina2xx_i2c/test.esp8266.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ina2xx_i2c/test.esp8266.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_i2c/test.rp2040.yaml b/tests/components/ina2xx_i2c/test.rp2040.yaml new file mode 100644 index 0000000000..ee2c29ca4e --- /dev/null +++ b/tests/components/ina2xx_i2c/test.rp2040.yaml @@ -0,0 +1,5 @@ +substitutions: + scl_pin: GPIO5 + sda_pin: GPIO4 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/common.yaml b/tests/components/ina2xx_spi/common.yaml new file mode 100644 index 0000000000..3eab7e6f0a --- /dev/null +++ b/tests/components/ina2xx_spi/common.yaml @@ -0,0 +1,21 @@ +spi: + - id: spi_ina2xx + clk_pin: ${clk_pin} + mosi_pin: ${mosi_pin} + miso_pin: ${miso_pin} + +sensor: + - platform: ina2xx_spi + spi_id: spi_ina2xx + cs_pin: ${cs_pin} + model: INA229 + shunt_resistance: 0.001130 ohm + max_current: 40 A + adc_range: 1 + temperature_coefficient: 50 + shunt_voltage: "INA2xx Shunt Voltage" + bus_voltage: "INA2xx Bus Voltage" + current: "INA2xx Current" + power: "INA2xx Power" + energy: "INA2xx Energy" + charge: "INA2xx Charge" diff --git a/tests/components/ina2xx_spi/test.esp32-c3-idf.yaml b/tests/components/ina2xx_spi/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/ina2xx_spi/test.esp32-c3-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/test.esp32-c3.yaml b/tests/components/ina2xx_spi/test.esp32-c3.yaml new file mode 100644 index 0000000000..2415ba5dc6 --- /dev/null +++ b/tests/components/ina2xx_spi/test.esp32-c3.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO6 + mosi_pin: GPIO7 + miso_pin: GPIO5 + cs_pin: GPIO8 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/test.esp32-idf.yaml b/tests/components/ina2xx_spi/test.esp32-idf.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/ina2xx_spi/test.esp32-idf.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/test.esp32.yaml b/tests/components/ina2xx_spi/test.esp32.yaml new file mode 100644 index 0000000000..54e027a614 --- /dev/null +++ b/tests/components/ina2xx_spi/test.esp32.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO16 + mosi_pin: GPIO17 + miso_pin: GPIO15 + cs_pin: GPIO5 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/test.esp8266.yaml b/tests/components/ina2xx_spi/test.esp8266.yaml new file mode 100644 index 0000000000..dbd158d030 --- /dev/null +++ b/tests/components/ina2xx_spi/test.esp8266.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO14 + mosi_pin: GPIO13 + miso_pin: GPIO12 + cs_pin: GPIO15 + +<<: !include common.yaml diff --git a/tests/components/ina2xx_spi/test.rp2040.yaml b/tests/components/ina2xx_spi/test.rp2040.yaml new file mode 100644 index 0000000000..f6c3f1eeca --- /dev/null +++ b/tests/components/ina2xx_spi/test.rp2040.yaml @@ -0,0 +1,7 @@ +substitutions: + clk_pin: GPIO2 + mosi_pin: GPIO3 + miso_pin: GPIO4 + cs_pin: GPIO5 + +<<: !include common.yaml From d410cc4f7beac8b483b67adc6bba635dce5230ad Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 16 May 2024 12:22:18 +0200 Subject: [PATCH 218/313] [nextion] Fix type on sprintf for IDF v5 (#6758) --- esphome/components/nextion/nextion_upload_idf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/nextion/nextion_upload_idf.cpp b/esphome/components/nextion/nextion_upload_idf.cpp index 448b6fc0ff..b5bb5478c1 100644 --- a/esphome/components/nextion/nextion_upload_idf.cpp +++ b/esphome/components/nextion/nextion_upload_idf.cpp @@ -260,7 +260,7 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) { // Tells the Nextion the content length of the tft file and baud rate it will be sent at // Once the Nextion accepts the command it will wait until the file is successfully uploaded // If it fails for any reason a power cycle of the display will be needed - sprintf(command, "whmi-wris %d,%" PRIu32 ",1", this->content_length_, baud_rate); + sprintf(command, "whmi-wris %" PRIu32 ",%" PRIu32 ",1", this->content_length_, baud_rate); // Clear serial receive buffer ESP_LOGV(TAG, "Clear serial receive buffer"); From df838b5788e8d9b42718225d89c8f5f3854fa076 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 16 May 2024 22:33:33 +1200 Subject: [PATCH 219/313] [core] Remove references to deleted setup.py (#6757) --- .github/workflows/release.yml | 4 +++- CODEOWNERS | 2 +- script/build_codeowners.py | 2 +- script/ci-custom.py | 1 - 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 03ed523e1d..c1c502394a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -61,7 +61,9 @@ jobs: ESPHOME_NO_VENV: 1 run: script/setup - name: Build - run: python setup.py sdist bdist_wheel + run: |- + pip3 install build + python3 -m build - name: Publish uses: pypa/gh-action-pypi-publish@v1.8.14 diff --git a/CODEOWNERS b/CODEOWNERS index d97207941f..dc6c8caa87 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -6,7 +6,7 @@ # the integration's code owner is automatically notified. # Core Code -setup.py @esphome/core +pyproject.toml @esphome/core esphome/*.py @esphome/core esphome/core/* @esphome/core diff --git a/script/build_codeowners.py b/script/build_codeowners.py index 22f3c1b4bc..6bc558d351 100755 --- a/script/build_codeowners.py +++ b/script/build_codeowners.py @@ -28,7 +28,7 @@ BASE = """ # the integration's code owner is automatically notified. # Core Code -setup.py @esphome/core +pyproject.toml @esphome/core esphome/*.py @esphome/core esphome/core/* @esphome/core diff --git a/script/ci-custom.py b/script/ci-custom.py index 704962fa97..e2ee81f742 100755 --- a/script/ci-custom.py +++ b/script/ci-custom.py @@ -229,7 +229,6 @@ def lint_ext_check(fname): "docker/ha-addon-rootfs/**", "docker/*.py", "script/*", - "setup.py", ] ) def lint_executable_bit(fname): From 94b63d7bc2675b02b3f869018de7a842a69edb00 Mon Sep 17 00:00:00 2001 From: acshef Date: Fri, 17 May 2024 22:17:09 -0600 Subject: [PATCH 220/313] Add device_class to valve core config (#6765) --- esphome/components/valve/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py index 22d617cc36..13c2947438 100644 --- a/esphome/components/valve/__init__.py +++ b/esphome/components/valve/__init__.py @@ -14,6 +14,8 @@ from esphome.const import ( CONF_STATE, CONF_STOP, CONF_TRIGGER_ID, + DEVICE_CLASS_GAS, + DEVICE_CLASS_WATER, ) from esphome.core import CORE, coroutine_with_priority from esphome.cpp_helpers import setup_entity @@ -22,6 +24,11 @@ IS_PLATFORM_COMPONENT = True CODEOWNERS = ["@esphome/core"] +DEVICE_CLASSES = [ + DEVICE_CLASS_GAS, + DEVICE_CLASS_WATER, +] + valve_ns = cg.esphome_ns.namespace("valve") Valve = valve_ns.class_("Valve", cg.EntityBase) @@ -65,6 +72,7 @@ VALVE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).ex { cv.GenerateID(): cv.declare_id(Valve), cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTValveComponent), + cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( cv.requires_component("mqtt"), cv.subscribe_topic ), From 1164cb86106bc44cf57ab280e379499fe03f440b Mon Sep 17 00:00:00 2001 From: esphomebot Date: Sat, 18 May 2024 19:15:52 +1200 Subject: [PATCH 221/313] Synchronise Device Classes from Home Assistant (#6768) --- esphome/components/valve/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py index 13c2947438..ea6bfc6055 100644 --- a/esphome/components/valve/__init__.py +++ b/esphome/components/valve/__init__.py @@ -14,6 +14,7 @@ from esphome.const import ( CONF_STATE, CONF_STOP, CONF_TRIGGER_ID, + DEVICE_CLASS_EMPTY, DEVICE_CLASS_GAS, DEVICE_CLASS_WATER, ) @@ -25,6 +26,7 @@ IS_PLATFORM_COMPONENT = True CODEOWNERS = ["@esphome/core"] DEVICE_CLASSES = [ + DEVICE_CLASS_EMPTY, DEVICE_CLASS_GAS, DEVICE_CLASS_WATER, ] From 70e0925f9abaab0aa0cc13646b1115cdce230a98 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sun, 19 May 2024 01:31:36 +0200 Subject: [PATCH 222/313] Fix pip3 install (#6771) --- script/setup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/setup b/script/setup index 71573a9352..1a18a6a9ea 100755 --- a/script/setup +++ b/script/setup @@ -20,7 +20,7 @@ fi pip3 install -r requirements.txt -r requirements_optional.txt -r requirements_test.txt -r requirements_dev.txt pip3 install setuptools wheel -pip3 install -e --config-settings editable_mode=compat ".[dev,test,displays]" +pip3 install -e ".[dev,test,displays]" --config-settings editable_mode=compat pre-commit install From 4469ba402498e6b8e20b6fc89873f70f61a1a21e Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Sun, 19 May 2024 01:47:23 +0200 Subject: [PATCH 223/313] [tests] make test_build_components work with venv without installing esphome (#6761) --- script/test_build_components | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/script/test_build_components b/script/test_build_components index 4d91256572..f82dd5c3b6 100755 --- a/script/test_build_components +++ b/script/test_build_components @@ -37,9 +37,10 @@ start_esphome() { # Start esphome process echo "> [$target_component] [$test_name] [$target_platform]" - echo "esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file" + set -x # TODO: Validate escape of Command line substitution value - esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file + python -m esphome -s component_name $target_component -s component_dir ../../components/$target_component -s test_name $test_name -s target_platform $target_platform $esphome_command $component_test_file + { set +x; } 2>/dev/null } # Find all test yaml files. From ba73187c1bf20ac0c9d823a5ff8d8aa5f8a07e03 Mon Sep 17 00:00:00 2001 From: tomaszduda23 Date: Sun, 19 May 2024 22:11:27 +0200 Subject: [PATCH 224/313] separate deep_sleep component for each platform in different file (#6762) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../deep_sleep/deep_sleep_component.cpp | 115 ++---------------- .../deep_sleep/deep_sleep_component.h | 4 + .../deep_sleep/deep_sleep_esp32.cpp | 104 ++++++++++++++++ .../deep_sleep/deep_sleep_esp8266.cpp | 23 ++++ 4 files changed, 143 insertions(+), 103 deletions(-) create mode 100644 esphome/components/deep_sleep/deep_sleep_esp32.cpp create mode 100644 esphome/components/deep_sleep/deep_sleep_esp8266.cpp diff --git a/esphome/components/deep_sleep/deep_sleep_component.cpp b/esphome/components/deep_sleep/deep_sleep_component.cpp index 97fdf11366..1e7637f3e5 100644 --- a/esphome/components/deep_sleep/deep_sleep_component.cpp +++ b/esphome/components/deep_sleep/deep_sleep_component.cpp @@ -1,12 +1,7 @@ #include "deep_sleep_component.h" -#include #include "esphome/core/application.h" #include "esphome/core/log.h" -#ifdef USE_ESP8266 -#include -#endif - namespace esphome { namespace deep_sleep { @@ -14,25 +9,6 @@ static const char *const TAG = "deep_sleep"; bool global_has_deep_sleep = false; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) -optional DeepSleepComponent::get_run_duration_() const { -#ifdef USE_ESP32 - if (this->wakeup_cause_to_run_duration_.has_value()) { - esp_sleep_wakeup_cause_t wakeup_cause = esp_sleep_get_wakeup_cause(); - switch (wakeup_cause) { - case ESP_SLEEP_WAKEUP_EXT0: - case ESP_SLEEP_WAKEUP_EXT1: - case ESP_SLEEP_WAKEUP_GPIO: - return this->wakeup_cause_to_run_duration_->gpio_cause; - case ESP_SLEEP_WAKEUP_TOUCHPAD: - return this->wakeup_cause_to_run_duration_->touch_cause; - default: - return this->wakeup_cause_to_run_duration_->default_cause; - } - } -#endif - return this->run_duration_; -} - void DeepSleepComponent::setup() { ESP_LOGCONFIG(TAG, "Setting up Deep Sleep..."); global_has_deep_sleep = true; @@ -45,6 +21,7 @@ void DeepSleepComponent::setup() { ESP_LOGD(TAG, "Not scheduling Deep Sleep, as no run duration is configured."); } } + void DeepSleepComponent::dump_config() { ESP_LOGCONFIG(TAG, "Setting up Deep Sleep..."); if (this->sleep_duration_.has_value()) { @@ -54,65 +31,31 @@ void DeepSleepComponent::dump_config() { if (this->run_duration_.has_value()) { ESP_LOGCONFIG(TAG, " Run Duration: %" PRIu32 " ms", *this->run_duration_); } -#ifdef USE_ESP32 - if (wakeup_pin_ != nullptr) { - LOG_PIN(" Wakeup Pin: ", this->wakeup_pin_); - } - if (this->wakeup_cause_to_run_duration_.has_value()) { - ESP_LOGCONFIG(TAG, " Default Wakeup Run Duration: %" PRIu32 " ms", - this->wakeup_cause_to_run_duration_->default_cause); - ESP_LOGCONFIG(TAG, " Touch Wakeup Run Duration: %" PRIu32 " ms", this->wakeup_cause_to_run_duration_->touch_cause); - ESP_LOGCONFIG(TAG, " GPIO Wakeup Run Duration: %" PRIu32 " ms", this->wakeup_cause_to_run_duration_->gpio_cause); - } -#endif + this->dump_config_platform_(); } + void DeepSleepComponent::loop() { if (this->next_enter_deep_sleep_) this->begin_sleep(); } + float DeepSleepComponent::get_loop_priority() const { return -100.0f; // run after everything else is ready } + void DeepSleepComponent::set_sleep_duration(uint32_t time_ms) { this->sleep_duration_ = uint64_t(time_ms) * 1000; } -#if defined(USE_ESP32) -void DeepSleepComponent::set_wakeup_pin_mode(WakeupPinMode wakeup_pin_mode) { - this->wakeup_pin_mode_ = wakeup_pin_mode; -} -#endif - -#if defined(USE_ESP32) -#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) - -void DeepSleepComponent::set_ext1_wakeup(Ext1Wakeup ext1_wakeup) { this->ext1_wakeup_ = ext1_wakeup; } - -void DeepSleepComponent::set_touch_wakeup(bool touch_wakeup) { this->touch_wakeup_ = touch_wakeup; } - -#endif - -void DeepSleepComponent::set_run_duration(WakeupCauseToRunDuration wakeup_cause_to_run_duration) { - wakeup_cause_to_run_duration_ = wakeup_cause_to_run_duration; -} - -#endif void DeepSleepComponent::set_run_duration(uint32_t time_ms) { this->run_duration_ = time_ms; } + void DeepSleepComponent::begin_sleep(bool manual) { if (this->prevent_ && !manual) { this->next_enter_deep_sleep_ = true; return; } -#ifdef USE_ESP32 - if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_KEEP_AWAKE && this->wakeup_pin_ != nullptr && - !this->sleep_duration_.has_value() && this->wakeup_pin_->digital_read()) { - // Defer deep sleep until inactive - if (!this->next_enter_deep_sleep_) { - this->status_set_warning(); - ESP_LOGW(TAG, "Waiting for pin_ to switch state to enter deep sleep..."); - } - this->next_enter_deep_sleep_ = true; + + if (!this->prepare_to_sleep_()) { return; } -#endif ESP_LOGI(TAG, "Beginning Deep Sleep"); if (this->sleep_duration_.has_value()) { @@ -120,47 +63,13 @@ void DeepSleepComponent::begin_sleep(bool manual) { } App.run_safe_shutdown_hooks(); -#if defined(USE_ESP32) -#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) - if (this->sleep_duration_.has_value()) - esp_sleep_enable_timer_wakeup(*this->sleep_duration_); - if (this->wakeup_pin_ != nullptr) { - bool level = !this->wakeup_pin_->is_inverted(); - if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_INVERT_WAKEUP && this->wakeup_pin_->digital_read()) { - level = !level; - } - esp_sleep_enable_ext0_wakeup(gpio_num_t(this->wakeup_pin_->get_pin()), level); - } - if (this->ext1_wakeup_.has_value()) { - esp_sleep_enable_ext1_wakeup(this->ext1_wakeup_->mask, this->ext1_wakeup_->wakeup_mode); - } - - if (this->touch_wakeup_.has_value() && *(this->touch_wakeup_)) { - esp_sleep_enable_touchpad_wakeup(); - esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); - } -#endif -#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) - if (this->sleep_duration_.has_value()) - esp_sleep_enable_timer_wakeup(*this->sleep_duration_); - if (this->wakeup_pin_ != nullptr) { - bool level = !this->wakeup_pin_->is_inverted(); - if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_INVERT_WAKEUP && this->wakeup_pin_->digital_read()) { - level = !level; - } - esp_deep_sleep_enable_gpio_wakeup(1 << this->wakeup_pin_->get_pin(), - static_cast(level)); - } -#endif - esp_deep_sleep_start(); -#endif - -#ifdef USE_ESP8266 - ESP.deepSleep(*this->sleep_duration_); // NOLINT(readability-static-accessed-through-instance) -#endif + this->deep_sleep_(); } + float DeepSleepComponent::get_setup_priority() const { return setup_priority::LATE; } + void DeepSleepComponent::prevent_deep_sleep() { this->prevent_ = true; } + void DeepSleepComponent::allow_deep_sleep() { this->prevent_ = false; } } // namespace deep_sleep diff --git a/esphome/components/deep_sleep/deep_sleep_component.h b/esphome/components/deep_sleep/deep_sleep_component.h index e97d8300c4..be56b529ba 100644 --- a/esphome/components/deep_sleep/deep_sleep_component.h +++ b/esphome/components/deep_sleep/deep_sleep_component.h @@ -106,6 +106,10 @@ class DeepSleepComponent : public Component { // duration before entering deep sleep. optional get_run_duration_() const; + void dump_config_platform_(); + bool prepare_to_sleep_(); + void deep_sleep_(); + optional sleep_duration_; #ifdef USE_ESP32 InternalGPIOPin *wakeup_pin_; diff --git a/esphome/components/deep_sleep/deep_sleep_esp32.cpp b/esphome/components/deep_sleep/deep_sleep_esp32.cpp new file mode 100644 index 0000000000..d54046bc11 --- /dev/null +++ b/esphome/components/deep_sleep/deep_sleep_esp32.cpp @@ -0,0 +1,104 @@ +#ifdef USE_ESP32 +#include "deep_sleep_component.h" +#include "esphome/core/log.h" + +namespace esphome { +namespace deep_sleep { + +static const char *const TAG = "deep_sleep"; + +optional DeepSleepComponent::get_run_duration_() const { + if (this->wakeup_cause_to_run_duration_.has_value()) { + esp_sleep_wakeup_cause_t wakeup_cause = esp_sleep_get_wakeup_cause(); + switch (wakeup_cause) { + case ESP_SLEEP_WAKEUP_EXT0: + case ESP_SLEEP_WAKEUP_EXT1: + case ESP_SLEEP_WAKEUP_GPIO: + return this->wakeup_cause_to_run_duration_->gpio_cause; + case ESP_SLEEP_WAKEUP_TOUCHPAD: + return this->wakeup_cause_to_run_duration_->touch_cause; + default: + return this->wakeup_cause_to_run_duration_->default_cause; + } + } + return this->run_duration_; +} + +void DeepSleepComponent::set_wakeup_pin_mode(WakeupPinMode wakeup_pin_mode) { + this->wakeup_pin_mode_ = wakeup_pin_mode; +} + +#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) +void DeepSleepComponent::set_ext1_wakeup(Ext1Wakeup ext1_wakeup) { this->ext1_wakeup_ = ext1_wakeup; } + +void DeepSleepComponent::set_touch_wakeup(bool touch_wakeup) { this->touch_wakeup_ = touch_wakeup; } +#endif + +void DeepSleepComponent::set_run_duration(WakeupCauseToRunDuration wakeup_cause_to_run_duration) { + wakeup_cause_to_run_duration_ = wakeup_cause_to_run_duration; +} + +void DeepSleepComponent::dump_config_platform_() { + if (wakeup_pin_ != nullptr) { + LOG_PIN(" Wakeup Pin: ", this->wakeup_pin_); + } + if (this->wakeup_cause_to_run_duration_.has_value()) { + ESP_LOGCONFIG(TAG, " Default Wakeup Run Duration: %" PRIu32 " ms", + this->wakeup_cause_to_run_duration_->default_cause); + ESP_LOGCONFIG(TAG, " Touch Wakeup Run Duration: %" PRIu32 " ms", this->wakeup_cause_to_run_duration_->touch_cause); + ESP_LOGCONFIG(TAG, " GPIO Wakeup Run Duration: %" PRIu32 " ms", this->wakeup_cause_to_run_duration_->gpio_cause); + } +} + +bool DeepSleepComponent::prepare_to_sleep_() { + if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_KEEP_AWAKE && this->wakeup_pin_ != nullptr && + !this->sleep_duration_.has_value() && this->wakeup_pin_->digital_read()) { + // Defer deep sleep until inactive + if (!this->next_enter_deep_sleep_) { + this->status_set_warning(); + ESP_LOGW(TAG, "Waiting for pin_ to switch state to enter deep sleep..."); + } + this->next_enter_deep_sleep_ = true; + return false; + } + return true; +} + +void DeepSleepComponent::deep_sleep_() { +#if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) + if (this->sleep_duration_.has_value()) + esp_sleep_enable_timer_wakeup(*this->sleep_duration_); + if (this->wakeup_pin_ != nullptr) { + bool level = !this->wakeup_pin_->is_inverted(); + if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_INVERT_WAKEUP && this->wakeup_pin_->digital_read()) { + level = !level; + } + esp_sleep_enable_ext0_wakeup(gpio_num_t(this->wakeup_pin_->get_pin()), level); + } + if (this->ext1_wakeup_.has_value()) { + esp_sleep_enable_ext1_wakeup(this->ext1_wakeup_->mask, this->ext1_wakeup_->wakeup_mode); + } + + if (this->touch_wakeup_.has_value() && *(this->touch_wakeup_)) { + esp_sleep_enable_touchpad_wakeup(); + esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON); + } +#endif +#if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) + if (this->sleep_duration_.has_value()) + esp_sleep_enable_timer_wakeup(*this->sleep_duration_); + if (this->wakeup_pin_ != nullptr) { + bool level = !this->wakeup_pin_->is_inverted(); + if (this->wakeup_pin_mode_ == WAKEUP_PIN_MODE_INVERT_WAKEUP && this->wakeup_pin_->digital_read()) { + level = !level; + } + esp_deep_sleep_enable_gpio_wakeup(1 << this->wakeup_pin_->get_pin(), + static_cast(level)); + } +#endif + esp_deep_sleep_start(); +} + +} // namespace deep_sleep +} // namespace esphome +#endif diff --git a/esphome/components/deep_sleep/deep_sleep_esp8266.cpp b/esphome/components/deep_sleep/deep_sleep_esp8266.cpp new file mode 100644 index 0000000000..54d2aa993d --- /dev/null +++ b/esphome/components/deep_sleep/deep_sleep_esp8266.cpp @@ -0,0 +1,23 @@ +#ifdef USE_ESP8266 +#include "deep_sleep_component.h" + +#include + +namespace esphome { +namespace deep_sleep { + +static const char *const TAG = "deep_sleep"; + +optional DeepSleepComponent::get_run_duration_() const { return this->run_duration_; } + +void DeepSleepComponent::dump_config_platform_() {} + +bool DeepSleepComponent::prepare_to_sleep_() { return true; } + +void DeepSleepComponent::deep_sleep_() { + ESP.deepSleep(*this->sleep_duration_); // NOLINT(readability-static-accessed-through-instance) +} + +} // namespace deep_sleep +} // namespace esphome +#endif From a85d37a1cfae47d77c05e4deac830e5811af8066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 May 2024 08:12:32 +1200 Subject: [PATCH 225/313] Bump actions/checkout from 4.1.5 to 4.1.6 (#6764) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-api-proto.yml | 2 +- .github/workflows/ci-docker.yml | 2 +- .github/workflows/ci.yml | 32 +++++++++++------------ .github/workflows/release.yml | 8 +++--- .github/workflows/sync-device-classes.yml | 4 +-- .github/workflows/yaml-lint.yml | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/ci-api-proto.yml b/.github/workflows/ci-api-proto.yml index 448d0fd10f..1628464061 100644 --- a/.github/workflows/ci-api-proto.yml +++ b/.github/workflows/ci-api-proto.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Set up Python uses: actions/setup-python@v5.1.0 with: diff --git a/.github/workflows/ci-docker.yml b/.github/workflows/ci-docker.yml index 72a16233fb..dd5c051cfb 100644 --- a/.github/workflows/ci-docker.yml +++ b/.github/workflows/ci-docker.yml @@ -40,7 +40,7 @@ jobs: arch: [amd64, armv7, aarch64] build_type: ["ha-addon", "docker", "lint"] steps: - - uses: actions/checkout@v4.1.5 + - uses: actions/checkout@v4.1.6 - name: Set up Python uses: actions/setup-python@v5.1.0 with: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba0a8a363c..2b3c80cb35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: cache-key: ${{ steps.cache-key.outputs.key }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Generate cache-key id: cache-key run: echo key="${{ hashFiles('requirements.txt', 'requirements_optional.txt', 'requirements_test.txt') }}" >> $GITHUB_OUTPUT @@ -66,7 +66,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -87,7 +87,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -108,7 +108,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -129,7 +129,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -150,7 +150,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -199,7 +199,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -229,7 +229,7 @@ jobs: - common steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -254,7 +254,7 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Find all YAML test files id: set-matrix run: echo "matrix=$(ls tests/test*.yaml | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT @@ -271,7 +271,7 @@ jobs: file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -303,7 +303,7 @@ jobs: file: ${{ fromJson(needs.compile-tests-list.outputs.matrix) }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -358,7 +358,7 @@ jobs: steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -410,7 +410,7 @@ jobs: count: ${{ steps.list-components.outputs.count }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 with: # Fetch enough history so `git merge-base refs/remotes/origin/dev HEAD` works. fetch-depth: 500 @@ -458,7 +458,7 @@ jobs: run: sudo apt-get install libsodium-dev - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: @@ -484,7 +484,7 @@ jobs: matrix: ${{ steps.split.outputs.components }} steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Split components into 20 groups id: split run: | @@ -512,7 +512,7 @@ jobs: run: sudo apt-get install libsodium-dev - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Restore Python uses: ./.github/actions/restore-python with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c1c502394a..47dc217bf7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: tag: ${{ steps.tag.outputs.tag }} branch_build: ${{ steps.tag.outputs.branch_build }} steps: - - uses: actions/checkout@v4.1.5 + - uses: actions/checkout@v4.1.6 - name: Get tag id: tag # yamllint disable rule:line-length @@ -51,7 +51,7 @@ jobs: contents: read id-token: write steps: - - uses: actions/checkout@v4.1.5 + - uses: actions/checkout@v4.1.6 - name: Set up Python uses: actions/setup-python@v5.1.0 with: @@ -83,7 +83,7 @@ jobs: - linux/arm/v7 - linux/arm64 steps: - - uses: actions/checkout@v4.1.5 + - uses: actions/checkout@v4.1.6 - name: Set up Python uses: actions/setup-python@v5.1.0 with: @@ -174,7 +174,7 @@ jobs: - ghcr - dockerhub steps: - - uses: actions/checkout@v4.1.5 + - uses: actions/checkout@v4.1.6 - name: Download digests uses: actions/download-artifact@v4.1.7 diff --git a/.github/workflows/sync-device-classes.yml b/.github/workflows/sync-device-classes.yml index 7d67999b77..9a8c9d1753 100644 --- a/.github/workflows/sync-device-classes.yml +++ b/.github/workflows/sync-device-classes.yml @@ -13,10 +13,10 @@ jobs: if: github.repository == 'esphome/esphome' steps: - name: Checkout - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Checkout Home Assistant - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 with: repository: home-assistant/core path: lib/home-assistant diff --git a/.github/workflows/yaml-lint.yml b/.github/workflows/yaml-lint.yml index 761247529b..f009643629 100644 --- a/.github/workflows/yaml-lint.yml +++ b/.github/workflows/yaml-lint.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code from GitHub - uses: actions/checkout@v4.1.5 + uses: actions/checkout@v4.1.6 - name: Run yamllint uses: frenck/action-yamllint@v1.5.0 with: From 080f8bc86ed215dd12a1f6dc8d0b2bfa80302df2 Mon Sep 17 00:00:00 2001 From: Markus <974709+Links2004@users.noreply.github.com> Date: Sun, 19 May 2024 22:33:20 +0200 Subject: [PATCH 226/313] Fix Upload from Dashboard with MQTT discovery. (#6774) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index 9930119c86..f3c4ff3e23 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -351,7 +351,7 @@ def upload_program(config, args, host): not is_ip_address(CORE.address) # pylint: disable=too-many-boolean-expressions and (get_port_type(host) == "MQTT" or config[CONF_MDNS][CONF_DISABLED]) and CONF_MQTT in config - and (not args.device or args.device == "MQTT") + and (not args.device or args.device in ("MQTT", "OTA")) ): from esphome import mqtt From 91e7a44c3172cddddc93804e04206a962384e2ab Mon Sep 17 00:00:00 2001 From: Markus <974709+Links2004@users.noreply.github.com> Date: Mon, 20 May 2024 01:52:14 +0200 Subject: [PATCH 227/313] Fix MQTT dashboard discovery (Exception in MqttStatusThread). (#6775) --- esphome/dashboard/status/mqtt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/dashboard/status/mqtt.py b/esphome/dashboard/status/mqtt.py index 8c35dd2535..0e53c21679 100644 --- a/esphome/dashboard/status/mqtt.py +++ b/esphome/dashboard/status/mqtt.py @@ -18,7 +18,7 @@ class MqttStatusThread(threading.Thread): """Run the status thread.""" dashboard = DASHBOARD entries = dashboard.entries - current_entries = entries.all() + current_entries = entries.async_all() config = mqtt.config_from_env() topic = "esphome/discover/#" @@ -33,7 +33,7 @@ class MqttStatusThread(threading.Thread): return for entry in current_entries: if entry.name == data["name"]: - entries.set_state(entry, EntryState.ONLINE) + entries.async_set_state(entry, EntryState.ONLINE) return def on_connect(client, userdata, flags, return_code): @@ -53,11 +53,11 @@ class MqttStatusThread(threading.Thread): client.loop_start() while not dashboard.stop_event.wait(2): - current_entries = entries.all() + current_entries = entries.async_all() # will be set to true on on_message for entry in current_entries: if entry.no_mdns: - entries.set_state(entry, EntryState.OFFLINE) + entries.async_set_state(entry, EntryState.OFFLINE) client.publish("esphome/discover", None, retain=False) dashboard.mqtt_ping_request.wait() From b9bb3cd4bec794f155357e1688831456df77734d Mon Sep 17 00:00:00 2001 From: fodfodfod <94200657+fodfodfod@users.noreply.github.com> Date: Sun, 19 May 2024 20:42:30 -0400 Subject: [PATCH 228/313] add rp2040 support to the wizard (#6239) --- esphome/wizard.py | 115 ++++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 51 deletions(-) diff --git a/esphome/wizard.py b/esphome/wizard.py index 9680ade044..f8911ae844 100644 --- a/esphome/wizard.py +++ b/esphome/wizard.py @@ -277,6 +277,7 @@ def wizard(path): from esphome.components.esp32 import boards as esp32_boards from esphome.components.esp8266 import boards as esp8266_boards from esphome.components.rtl87xx import boards as rtl87xx_boards + from esphome.components.rp2040 import boards as rp2040_boards if not path.endswith(".yaml") and not path.endswith(".yml"): safe_print( @@ -343,7 +344,7 @@ def wizard(path): "firmwares for it." ) - wizard_platforms = ["ESP32", "ESP8266", "BK72XX", "RTL87XX"] + wizard_platforms = ["ESP32", "ESP8266", "BK72XX", "RTL87XX", "RP2040"] safe_print( "Please choose one of the supported microcontrollers " "(Use ESP8266 for Sonoff devices)." @@ -373,6 +374,10 @@ def wizard(path): board_link = ( "http://docs.platformio.org/en/latest/platforms/espressif8266.html#boards" ) + elif platform == "RP2040": + board_link = ( + "https://www.raspberrypi.com/documentation/microcontrollers/rp2040.html" + ) elif platform in ["BK72XX", "RTL87XX"]: board_link = "https://docs.libretiny.eu/docs/status/supported/" else: @@ -397,6 +402,10 @@ def wizard(path): elif platform == "RTL87XX": safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'wr3')}\".") boards_list = rtl87xx_boards.BOARDS.items() + elif platform == "RP2040": + safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'rpipicow')}\".") + boards_list = rp2040_boards.BOARDS.items() + else: raise NotImplementedError("Unknown platform!") @@ -423,60 +432,64 @@ def wizard(path): safe_print() sleep(1) - safe_print_step(3, WIFI_BIG) - safe_print("In this step, I'm going to create the configuration for WiFi.") - safe_print() - sleep(1) - safe_print( - f"First, what's the {color(Fore.GREEN, 'SSID')} (the name) of the WiFi network {name} should connect to?" - ) - sleep(1.5) - safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'Abraham Linksys')}\".") - while True: - ssid = safe_input(color(Fore.BOLD_WHITE, "(ssid): ")) - try: - ssid = cv.ssid(ssid) - break - except vol.Invalid: - safe_print( - color( - Fore.RED, - f'Unfortunately, "{ssid}" doesn\'t seem to be a valid SSID. Please try again.', + # Do not create wifi if the board does not support it + if board not in ["rpipico"]: + safe_print_step(3, WIFI_BIG) + safe_print("In this step, I'm going to create the configuration for WiFi.") + safe_print() + sleep(1) + safe_print( + f"First, what's the {color(Fore.GREEN, 'SSID')} (the name) of the WiFi network {name} should connect to?" + ) + sleep(1.5) + safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'Abraham Linksys')}\".") + while True: + ssid = safe_input(color(Fore.BOLD_WHITE, "(ssid): ")) + try: + ssid = cv.ssid(ssid) + break + except vol.Invalid: + safe_print( + color( + Fore.RED, + f'Unfortunately, "{ssid}" doesn\'t seem to be a valid SSID. Please try again.', + ) ) - ) - safe_print() - sleep(1) + safe_print() + sleep(1) - safe_print( - f'Thank you very much! You\'ve just chosen "{color(Fore.CYAN, ssid)}" as your SSID.' - ) - safe_print() - sleep(0.75) + safe_print( + f'Thank you very much! You\'ve just chosen "{color(Fore.CYAN, ssid)}" as your SSID.' + ) + safe_print() + sleep(0.75) - safe_print( - f"Now please state the {color(Fore.GREEN, 'password')} of the WiFi network so that I can connect to it (Leave empty for no password)" - ) - safe_print() - safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'PASSWORD42')}\"") - sleep(0.5) - psk = safe_input(color(Fore.BOLD_WHITE, "(PSK): ")) - safe_print( - "Perfect! WiFi is now set up (you can create static IPs and so on later)." - ) - sleep(1.5) + safe_print( + f"Now please state the {color(Fore.GREEN, 'password')} of the WiFi network so that I can connect to it (Leave empty for no password)" + ) + safe_print() + safe_print(f"For example \"{color(Fore.BOLD_WHITE, 'PASSWORD42')}\"") + sleep(0.5) + psk = safe_input(color(Fore.BOLD_WHITE, "(PSK): ")) + safe_print( + "Perfect! WiFi is now set up (you can create static IPs and so on later)." + ) + sleep(1.5) - safe_print_step(4, OTA_BIG) - safe_print( - "Almost there! ESPHome can automatically upload custom firmwares over WiFi " - "(over the air) and integrates into Home Assistant with a native API." - ) - safe_print( - f"This can be insecure if you do not trust the WiFi network. Do you want to set a {color(Fore.GREEN, 'password')} for connecting to this ESP?" - ) - safe_print() - sleep(0.25) - safe_print("Press ENTER for no password") - password = safe_input(color(Fore.BOLD_WHITE, "(password): ")) + safe_print_step(4, OTA_BIG) + safe_print( + "Almost there! ESPHome can automatically upload custom firmwares over WiFi " + "(over the air) and integrates into Home Assistant with a native API." + ) + safe_print( + f"This can be insecure if you do not trust the WiFi network. Do you want to set a {color(Fore.GREEN, 'password')} for connecting to this ESP?" + ) + safe_print() + sleep(0.25) + safe_print("Press ENTER for no password") + password = safe_input(color(Fore.BOLD_WHITE, "(password): ")) + else: + ssid, password, psk = "", "", "" if not wizard_write( path=path, From 840f69ffe673401f5b1434dbf23213a51489d569 Mon Sep 17 00:00:00 2001 From: acshef Date: Fri, 17 May 2024 22:17:09 -0600 Subject: [PATCH 229/313] Add device_class to valve core config (#6765) --- esphome/components/valve/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py index 22d617cc36..13c2947438 100644 --- a/esphome/components/valve/__init__.py +++ b/esphome/components/valve/__init__.py @@ -14,6 +14,8 @@ from esphome.const import ( CONF_STATE, CONF_STOP, CONF_TRIGGER_ID, + DEVICE_CLASS_GAS, + DEVICE_CLASS_WATER, ) from esphome.core import CORE, coroutine_with_priority from esphome.cpp_helpers import setup_entity @@ -22,6 +24,11 @@ IS_PLATFORM_COMPONENT = True CODEOWNERS = ["@esphome/core"] +DEVICE_CLASSES = [ + DEVICE_CLASS_GAS, + DEVICE_CLASS_WATER, +] + valve_ns = cg.esphome_ns.namespace("valve") Valve = valve_ns.class_("Valve", cg.EntityBase) @@ -65,6 +72,7 @@ VALVE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).ex { cv.GenerateID(): cv.declare_id(Valve), cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTValveComponent), + cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( cv.requires_component("mqtt"), cv.subscribe_topic ), From 4fc2f2284afd663d6e5649a959ed312dc96c5a38 Mon Sep 17 00:00:00 2001 From: esphomebot Date: Sat, 18 May 2024 19:15:52 +1200 Subject: [PATCH 230/313] Synchronise Device Classes from Home Assistant (#6768) --- esphome/components/valve/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py index 13c2947438..ea6bfc6055 100644 --- a/esphome/components/valve/__init__.py +++ b/esphome/components/valve/__init__.py @@ -14,6 +14,7 @@ from esphome.const import ( CONF_STATE, CONF_STOP, CONF_TRIGGER_ID, + DEVICE_CLASS_EMPTY, DEVICE_CLASS_GAS, DEVICE_CLASS_WATER, ) @@ -25,6 +26,7 @@ IS_PLATFORM_COMPONENT = True CODEOWNERS = ["@esphome/core"] DEVICE_CLASSES = [ + DEVICE_CLASS_EMPTY, DEVICE_CLASS_GAS, DEVICE_CLASS_WATER, ] From 7452879fb1a85c4bd1795b44d08c4853595ae97e Mon Sep 17 00:00:00 2001 From: Markus <974709+Links2004@users.noreply.github.com> Date: Sun, 19 May 2024 22:33:20 +0200 Subject: [PATCH 231/313] Fix Upload from Dashboard with MQTT discovery. (#6774) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/__main__.py b/esphome/__main__.py index 54c1aa112a..1d316a97ee 100644 --- a/esphome/__main__.py +++ b/esphome/__main__.py @@ -346,7 +346,7 @@ def upload_program(config, args, host): not is_ip_address(CORE.address) # pylint: disable=too-many-boolean-expressions and (get_port_type(host) == "MQTT" or config[CONF_MDNS][CONF_DISABLED]) and CONF_MQTT in config - and (not args.device or args.device == "MQTT") + and (not args.device or args.device in ("MQTT", "OTA")) ): from esphome import mqtt From ec6d86c8f5a57ca652449ed9b91b5e975d23f882 Mon Sep 17 00:00:00 2001 From: Markus <974709+Links2004@users.noreply.github.com> Date: Mon, 20 May 2024 01:52:14 +0200 Subject: [PATCH 232/313] Fix MQTT dashboard discovery (Exception in MqttStatusThread). (#6775) --- esphome/dashboard/status/mqtt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/dashboard/status/mqtt.py b/esphome/dashboard/status/mqtt.py index 8c35dd2535..0e53c21679 100644 --- a/esphome/dashboard/status/mqtt.py +++ b/esphome/dashboard/status/mqtt.py @@ -18,7 +18,7 @@ class MqttStatusThread(threading.Thread): """Run the status thread.""" dashboard = DASHBOARD entries = dashboard.entries - current_entries = entries.all() + current_entries = entries.async_all() config = mqtt.config_from_env() topic = "esphome/discover/#" @@ -33,7 +33,7 @@ class MqttStatusThread(threading.Thread): return for entry in current_entries: if entry.name == data["name"]: - entries.set_state(entry, EntryState.ONLINE) + entries.async_set_state(entry, EntryState.ONLINE) return def on_connect(client, userdata, flags, return_code): @@ -53,11 +53,11 @@ class MqttStatusThread(threading.Thread): client.loop_start() while not dashboard.stop_event.wait(2): - current_entries = entries.all() + current_entries = entries.async_all() # will be set to true on on_message for entry in current_entries: if entry.no_mdns: - entries.set_state(entry, EntryState.OFFLINE) + entries.async_set_state(entry, EntryState.OFFLINE) client.publish("esphome/discover", None, retain=False) dashboard.mqtt_ping_request.wait() From d2d3db4b8c2a29db046eb3478199c9917a28904d Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 20 May 2024 17:14:17 +1200 Subject: [PATCH 233/313] Bump version to 2024.5.1 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 9871ea704f..9d2b8b78ea 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.0" +__version__ = "2024.5.1" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 25ee24299a220c231baf37d50156ee35d78e561c Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 20 May 2024 01:49:00 -1000 Subject: [PATCH 234/313] Revert "Fix MQTT dashboard discovery (Exception in MqttStatusThread)." (#6782) --- esphome/dashboard/status/mqtt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/dashboard/status/mqtt.py b/esphome/dashboard/status/mqtt.py index 0e53c21679..8c35dd2535 100644 --- a/esphome/dashboard/status/mqtt.py +++ b/esphome/dashboard/status/mqtt.py @@ -18,7 +18,7 @@ class MqttStatusThread(threading.Thread): """Run the status thread.""" dashboard = DASHBOARD entries = dashboard.entries - current_entries = entries.async_all() + current_entries = entries.all() config = mqtt.config_from_env() topic = "esphome/discover/#" @@ -33,7 +33,7 @@ class MqttStatusThread(threading.Thread): return for entry in current_entries: if entry.name == data["name"]: - entries.async_set_state(entry, EntryState.ONLINE) + entries.set_state(entry, EntryState.ONLINE) return def on_connect(client, userdata, flags, return_code): @@ -53,11 +53,11 @@ class MqttStatusThread(threading.Thread): client.loop_start() while not dashboard.stop_event.wait(2): - current_entries = entries.async_all() + current_entries = entries.all() # will be set to true on on_message for entry in current_entries: if entry.no_mdns: - entries.async_set_state(entry, EntryState.OFFLINE) + entries.set_state(entry, EntryState.OFFLINE) client.publish("esphome/discover", None, retain=False) dashboard.mqtt_ping_request.wait() From 59b1e9c1b024191a666b98e97fe60da18de0d4e8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 20 May 2024 01:52:24 -1000 Subject: [PATCH 235/313] Fix DashboardEntries.all() call (#6783) --- esphome/dashboard/entries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/dashboard/entries.py b/esphome/dashboard/entries.py index cd318ba8a7..7a9bff4ec1 100644 --- a/esphome/dashboard/entries.py +++ b/esphome/dashboard/entries.py @@ -103,7 +103,7 @@ class DashboardEntries: def all(self) -> list[DashboardEntry]: """Return all entries.""" - return asyncio.run_coroutine_threadsafe(self._async_all, self._loop).result() + return asyncio.run_coroutine_threadsafe(self._async_all(), self._loop).result() def async_all(self) -> list[DashboardEntry]: """Return all entries.""" From bad400e1cd2da09a2d3cf8072bc1d66bfe6d0801 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 21 May 2024 07:18:13 +1000 Subject: [PATCH 236/313] [ili9xxx] Add 18bit mode selection and custom init sequence (#6745) --- esphome/components/ili9xxx/display.py | 58 ++++++++++++-- .../components/ili9xxx/ili9xxx_display.cpp | 80 +++++++++++++++---- esphome/components/ili9xxx/ili9xxx_display.h | 14 +++- tests/components/ili9xxx/test.esp32-idf.yaml | 20 +---- 4 files changed, 132 insertions(+), 40 deletions(-) diff --git a/esphome/components/ili9xxx/display.py b/esphome/components/ili9xxx/display.py index 3aaf76d6f8..f0ac5ba9ef 100644 --- a/esphome/components/ili9xxx/display.py +++ b/esphome/components/ili9xxx/display.py @@ -47,6 +47,12 @@ ILI9XXXDisplay = ili9xxx_ns.class_( display.DisplayBuffer, ) +PixelMode = ili9xxx_ns.enum("PixelMode") +PIXEL_MODES = { + "16bit": PixelMode.PIXEL_MODE_16, + "18bit": PixelMode.PIXEL_MODE_18, +} + ILI9XXXColorMode = ili9xxx_ns.enum("ILI9XXXColorMode") ColorOrder = display.display_ns.enum("ColorMode") @@ -68,6 +74,7 @@ MODELS = { "S3BOX": ili9xxx_ns.class_("ILI9XXXS3Box", ILI9XXXDisplay), "S3BOX_LITE": ili9xxx_ns.class_("ILI9XXXS3BoxLite", ILI9XXXDisplay), "WAVESHARE_RES_3_5": ili9xxx_ns.class_("WAVESHARERES35", ILI9XXXDisplay), + "CUSTOM": ILI9XXXDisplay, } COLOR_ORDERS = { @@ -80,14 +87,37 @@ COLOR_PALETTE = cv.one_of("NONE", "GRAYSCALE", "IMAGE_ADAPTIVE") CONF_LED_PIN = "led_pin" CONF_COLOR_PALETTE_IMAGES = "color_palette_images" CONF_INVERT_DISPLAY = "invert_display" +CONF_PIXEL_MODE = "pixel_mode" +CONF_INIT_SEQUENCE = "init_sequence" + + +def cmd(c, *args): + """ + Create a command sequence + :param c: The command (8 bit) + :param args: zero or more arguments (8 bit values) + :return: a list with the command, the argument count and the arguments + """ + return [c, len(args)] + list(args) + + +def map_sequence(value): + """ + An initialisation sequence is a literal array of data bytes. + The format is a repeated sequence of [CMD, ] + """ + if len(value) == 0: + raise cv.Invalid("Empty sequence") + return cmd(*value) def _validate(config): - if config.get(CONF_COLOR_PALETTE) == "IMAGE_ADAPTIVE" and not config.get( - CONF_COLOR_PALETTE_IMAGES + if ( + config.get(CONF_COLOR_PALETTE) == "IMAGE_ADAPTIVE" + and CONF_COLOR_PALETTE_IMAGES not in config ): raise cv.Invalid( - "Color palette in IMAGE_ADAPTIVE mode requires at least one 'color_palette_images' entry to generate palette" + "IMAGE_ADAPTIVE palette requires at least one 'color_palette_images' entry" ) if ( config.get(CONF_COLOR_PALETTE_IMAGES) @@ -96,7 +126,8 @@ def _validate(config): raise cv.Invalid( "Providing color palette images requires palette mode to be 'IMAGE_ADAPTIVE'" ) - if CORE.is_esp8266 and config.get(CONF_MODEL) not in [ + model = config[CONF_MODEL] + if CORE.is_esp8266 and model not in [ "M5STACK", "TFT_2.4", "TFT_2.4R", @@ -104,9 +135,12 @@ def _validate(config): "ILI9342", "ST7789V", ]: - raise cv.Invalid( - "Provided model can't run on ESP8266. Use an ESP32 with PSRAM onboard" - ) + raise cv.Invalid("Selected model can't run on ESP8266.") + + if model == "CUSTOM": + if CONF_INIT_SEQUENCE not in config or CONF_DIMENSIONS not in config: + raise cv.Invalid("CUSTOM model requires init_sequence and dimensions") + return config @@ -116,6 +150,7 @@ CONFIG_SCHEMA = cv.All( { cv.GenerateID(): cv.declare_id(ILI9XXXDisplay), cv.Required(CONF_MODEL): cv.enum(MODELS, upper=True, space="_"), + cv.Optional(CONF_PIXEL_MODE): cv.enum(PIXEL_MODES), cv.Optional(CONF_DIMENSIONS): cv.Any( cv.dimensions, cv.Schema( @@ -150,6 +185,7 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean, } ), + cv.Optional(CONF_INIT_SEQUENCE): cv.ensure_list(map_sequence), } ) .extend(cv.polling_component_schema("1s")) @@ -167,6 +203,14 @@ async def to_code(config): await spi.register_spi_device(var, config) dc = await cg.gpio_pin_expression(config[CONF_DC_PIN]) cg.add(var.set_dc_pin(dc)) + if init_sequences := config.get(CONF_INIT_SEQUENCE): + sequence = [] + for seq in init_sequences: + sequence.extend(seq) + cg.add(var.add_init_sequence(sequence)) + + if pixel_mode := config.get(CONF_PIXEL_MODE): + cg.add(var.set_pixel_mode(pixel_mode)) if CONF_COLOR_ORDER in config: cg.add(var.set_color_order(COLOR_ORDERS[config[CONF_COLOR_ORDER]])) if CONF_TRANSFORM in config: diff --git a/esphome/components/ili9xxx/ili9xxx_display.cpp b/esphome/components/ili9xxx/ili9xxx_display.cpp index e292906a93..463e3dd851 100644 --- a/esphome/components/ili9xxx/ili9xxx_display.cpp +++ b/esphome/components/ili9xxx/ili9xxx_display.cpp @@ -34,7 +34,26 @@ void ILI9XXXDisplay::setup() { ESP_LOGD(TAG, "Setting up ILI9xxx"); this->setup_pins_(); - this->init_lcd_(); + this->init_lcd_(this->init_sequence_); + this->init_lcd_(this->extra_init_sequence_.data()); + switch (this->pixel_mode_) { + case PIXEL_MODE_16: + if (this->is_18bitdisplay_) { + this->command(ILI9XXX_PIXFMT); + this->data(0x55); + this->is_18bitdisplay_ = false; + } + break; + case PIXEL_MODE_18: + if (!this->is_18bitdisplay_) { + this->command(ILI9XXX_PIXFMT); + this->data(0x66); + this->is_18bitdisplay_ = true; + } + break; + default: + break; + } this->set_madctl(); this->command(this->pre_invertcolors_ ? ILI9XXX_INVON : ILI9XXX_INVOFF); @@ -203,7 +222,6 @@ void ILI9XXXDisplay::update() { } void ILI9XXXDisplay::display_() { - uint8_t transfer_buffer[ILI9XXX_TRANSFER_BUFFER_SIZE]; // check if something was displayed if ((this->x_high_ < this->x_low_) || (this->y_high_ < this->y_low_)) { return; @@ -231,6 +249,7 @@ void ILI9XXXDisplay::display_() { this->write_array(this->buffer_ + this->y_low_ * this->width_ * 2, h * this->width_ * 2); } else { ESP_LOGV(TAG, "Doing multiple write"); + uint8_t transfer_buffer[ILI9XXX_TRANSFER_BUFFER_SIZE]; size_t rem = h * w; // remaining number of pixels to write set_addr_window_(this->x_low_, this->y_low_, this->x_high_, this->y_high_); size_t idx = 0; // index into transfer_buffer @@ -247,7 +266,7 @@ void ILI9XXXDisplay::display_() { display::ColorUtil::index8_to_color_palette888(this->buffer_[pos++], this->palette_)); break; default: // case BITS_16: - color_val = (buffer_[pos * 2] << 8) + buffer_[pos * 2 + 1]; + color_val = (this->buffer_[pos * 2] << 8) + this->buffer_[pos * 2 + 1]; pos++; break; } @@ -259,7 +278,7 @@ void ILI9XXXDisplay::display_() { put16_be(transfer_buffer + idx, color_val); idx += 2; } - if (idx == ILI9XXX_TRANSFER_BUFFER_SIZE) { + if (idx == sizeof(transfer_buffer)) { this->write_array(transfer_buffer, idx); idx = 0; App.feed_wdt(); @@ -293,20 +312,50 @@ void ILI9XXXDisplay::draw_pixels_at(int x_start, int y_start, int w, int h, cons // if color mapping or software rotation is required, hand this off to the parent implementation. This will // do color conversion pixel-by-pixel into the buffer and draw it later. If this is happening the user has not // configured the renderer well. - if (this->rotation_ != display::DISPLAY_ROTATION_0_DEGREES || bitness != display::COLOR_BITNESS_565 || !big_endian || - this->is_18bitdisplay_) { + if (this->rotation_ != display::DISPLAY_ROTATION_0_DEGREES || bitness != display::COLOR_BITNESS_565 || !big_endian) { return display::Display::draw_pixels_at(x_start, y_start, w, h, ptr, order, bitness, big_endian, x_offset, y_offset, x_pad); } this->set_addr_window_(x_start, y_start, x_start + w - 1, y_start + h - 1); // x_ and y_offset are offsets into the source buffer, unrelated to our own offsets into the display. - if (x_offset == 0 && x_pad == 0 && y_offset == 0) { - // we could deal here with a non-zero y_offset, but if x_offset is zero, y_offset probably will be so don't bother - this->write_array(ptr, w * h * 2); + auto stride = x_offset + w + x_pad; + if (!this->is_18bitdisplay_) { + if (x_offset == 0 && x_pad == 0 && y_offset == 0) { + // we could deal here with a non-zero y_offset, but if x_offset is zero, y_offset probably will be so don't bother + this->write_array(ptr, w * h * 2); + } else { + for (size_t y = 0; y != h; y++) { + this->write_array(ptr + (y + y_offset) * stride + x_offset, w * 2); + } + } } else { - auto stride = x_offset + w + x_pad; - for (size_t y = 0; y != h; y++) { - this->write_array(ptr + (y + y_offset) * stride + x_offset, w * 2); + // 18 bit mode + uint8_t transfer_buffer[ILI9XXX_TRANSFER_BUFFER_SIZE * 4]; + ESP_LOGV(TAG, "Doing multiple write"); + size_t rem = h * w; // remaining number of pixels to write + size_t idx = 0; // index into transfer_buffer + size_t pixel = 0; // pixel number offset + ptr += (y_offset * stride + x_offset) * 2; + while (rem-- != 0) { + uint8_t hi_byte = *ptr++; + uint8_t lo_byte = *ptr++; + transfer_buffer[idx++] = hi_byte & 0xF8; // Blue + transfer_buffer[idx++] = ((hi_byte << 5) | (lo_byte) >> 5); // Green + transfer_buffer[idx++] = lo_byte << 3; // Red + if (idx == sizeof(transfer_buffer)) { + this->write_array(transfer_buffer, idx); + idx = 0; + App.feed_wdt(); + } + // end of line? Skip to the next. + if (++pixel == w) { + pixel = 0; + ptr += (x_pad + x_offset) * 2; + } + } + // flush any balance. + if (idx != 0) { + this->write_array(transfer_buffer, idx); } } this->end_data_(); @@ -356,10 +405,11 @@ void ILI9XXXDisplay::reset_() { } } -void ILI9XXXDisplay::init_lcd_() { +void ILI9XXXDisplay::init_lcd_(const uint8_t *addr) { + if (addr == nullptr) + return; uint8_t cmd, x, num_args; - const uint8_t *addr = this->init_sequence_; - while ((cmd = *addr++) > 0) { + while ((cmd = *addr++) != 0) { x = *addr++; num_args = x & 0x7F; this->send_command(cmd, addr, num_args); diff --git a/esphome/components/ili9xxx/ili9xxx_display.h b/esphome/components/ili9xxx/ili9xxx_display.h index 11a90e142f..4446686e7b 100644 --- a/esphome/components/ili9xxx/ili9xxx_display.h +++ b/esphome/components/ili9xxx/ili9xxx_display.h @@ -17,6 +17,12 @@ enum ILI9XXXColorMode { BITS_16 = 0x10, }; +enum PixelMode { + PIXEL_MODE_UNSPECIFIED, + PIXEL_MODE_16, + PIXEL_MODE_18, +}; + class ILI9XXXDisplay : public display::DisplayBuffer, public spi::SPIDevice { @@ -52,6 +58,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer, } } + void add_init_sequence(const std::vector &sequence) { this->extra_init_sequence_ = sequence; } void set_dc_pin(GPIOPin *dc_pin) { dc_pin_ = dc_pin; } float get_setup_priority() const override; void set_reset_pin(GPIOPin *reset) { this->reset_pin_ = reset; } @@ -73,6 +80,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer, void set_swap_xy(bool swap_xy) { this->swap_xy_ = swap_xy; } void set_mirror_x(bool mirror_x) { this->mirror_x_ = mirror_x; } void set_mirror_y(bool mirror_y) { this->mirror_y_ = mirror_y; } + void set_pixel_mode(PixelMode mode) { this->pixel_mode_ = mode; } void update() override; @@ -99,11 +107,12 @@ class ILI9XXXDisplay : public display::DisplayBuffer, virtual void set_madctl(); void display_(); - void init_lcd_(); + void init_lcd_(const uint8_t *addr); void set_addr_window_(uint16_t x, uint16_t y, uint16_t x2, uint16_t y2); void reset_(); uint8_t const *init_sequence_{}; + std::vector extra_init_sequence_; int16_t width_{0}; ///< Display width as modified by current rotation int16_t height_{0}; ///< Display height as modified by current rotation int16_t offset_x_{0}; @@ -112,7 +121,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer, uint16_t y_low_{0}; uint16_t x_high_{0}; uint16_t y_high_{0}; - const uint8_t *palette_; + const uint8_t *palette_{}; ILI9XXXColorMode buffer_color_mode_{BITS_16}; @@ -133,6 +142,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer, bool prossing_update_ = false; bool need_update_ = false; bool is_18bitdisplay_ = false; + PixelMode pixel_mode_{}; bool pre_invertcolors_ = false; display::ColorOrder color_order_{display::COLOR_ORDER_BGR}; bool swap_xy_{}; diff --git a/tests/components/ili9xxx/test.esp32-idf.yaml b/tests/components/ili9xxx/test.esp32-idf.yaml index 0d7bda8ac6..6da62f69d2 100644 --- a/tests/components/ili9xxx/test.esp32-idf.yaml +++ b/tests/components/ili9xxx/test.esp32-idf.yaml @@ -12,24 +12,12 @@ display: swap_xy: true mirror_x: true mirror_y: false - model: TFT 2.4 - color_palette: GRAYSCALE + model: custom cs_pin: 12 dc_pin: 13 reset_pin: 14 + init_sequence: + - [0xFF, 0x77, 0x01, 0x00, 0x00, 0x10] + lambda: |- it.rectangle(0, 0, it.get_width(), it.get_height()); - - platform: ili9xxx - dimensions: - width: 320 - height: 240 - offset_width: 20 - offset_height: 10 - model: TFT 2.4 - cs_pin: 25 - dc_pin: 26 - reset_pin: 27 - auto_clear_enabled: false - rotation: 90 - lambda: |- - it.fill(Color::WHITE); From 9de67feccd4b4c3ec9f5db40573c07ecca4bcf32 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 21 May 2024 10:53:16 +1200 Subject: [PATCH 237/313] [remote_receiver] Add better error message for tolerance breaking change (#6784) --- esphome/components/remote_receiver/__init__.py | 8 +++++++- tests/components/remote_receiver/esp32-common.yaml | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/esphome/components/remote_receiver/__init__.py b/esphome/components/remote_receiver/__init__.py index 6fe20153f4..e5085bb33c 100644 --- a/esphome/components/remote_receiver/__init__.py +++ b/esphome/components/remote_receiver/__init__.py @@ -63,7 +63,13 @@ def validate_tolerance(value): if "%" in str(value): type_ = TYPE_PERCENTAGE else: - type_ = TYPE_TIME + try: + cv.positive_time_period_microseconds(value) + type_ = TYPE_TIME + except cv.Invalid as exc: + raise cv.Invalid( + "Tolerance must be a percentage or time. Configurations made before 2024.5.0 treated the value as a percentage." + ) from exc return TOLERANCE_SCHEMA( { diff --git a/tests/components/remote_receiver/esp32-common.yaml b/tests/components/remote_receiver/esp32-common.yaml index c2b5a2cf19..c3987f8cd9 100644 --- a/tests/components/remote_receiver/esp32-common.yaml +++ b/tests/components/remote_receiver/esp32-common.yaml @@ -3,6 +3,7 @@ remote_receiver: pin: ${pin} rmt_channel: ${rmt_channel} dump: all + tolerance: 25% on_abbwelcome: then: - logger.log: From ce6dc040dab9bef5230c86840f8da3edacb7b8cd Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Mon, 20 May 2024 22:54:38 +0000 Subject: [PATCH 238/313] Tiny fix in automation.h - unused return value removed (#6760) --- esphome/core/automation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/core/automation.h b/esphome/core/automation.h index 9b62640a0c..5a0a17ea1a 100644 --- a/esphome/core/automation.h +++ b/esphome/core/automation.h @@ -233,7 +233,7 @@ template class Automation { public: explicit Automation(Trigger *trigger) : trigger_(trigger) { this->trigger_->set_automation_parent(this); } - Action *add_action(Action *action) { this->actions_.add_action(action); } + void add_action(Action *action) { this->actions_.add_action(action); } void add_actions(const std::vector *> &actions) { this->actions_.add_actions(actions); } void stop() { this->actions_.stop(); } From 525c4891d52f5c0d6bd5a79ba8c3400aa3e5d588 Mon Sep 17 00:00:00 2001 From: esphomebot Date: Tue, 21 May 2024 10:55:56 +1200 Subject: [PATCH 239/313] Update webserver local assets to 20240519-215627 (#6779) --- .../components/web_server/server_index_v3.h | 7970 ++++++++--------- 1 file changed, 3977 insertions(+), 3993 deletions(-) diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h index 66cd9de47a..f2f278b08f 100644 --- a/esphome/components/web_server/server_index_v3.h +++ b/esphome/components/web_server/server_index_v3.h @@ -10,4004 +10,3988 @@ namespace esphome { namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0x6d, 0x7b, 0xdb, 0xb6, 0xb2, 0x28, 0xfa, - 0xf9, 0x9e, 0x5f, 0x61, 0x73, 0xa7, 0x2e, 0x61, 0x41, 0xb4, 0x24, 0x5b, 0x8e, 0x43, 0x19, 0xd6, 0x71, 0x9c, 0xa4, - 0x49, 0x9b, 0x26, 0x69, 0x9c, 0x26, 0x4d, 0x54, 0x6d, 0x07, 0x22, 0x21, 0x09, 0x0d, 0x45, 0xa8, 0x04, 0x14, 0xdb, - 0x95, 0xf4, 0xdf, 0xef, 0x33, 0x78, 0x21, 0x41, 0x49, 0xc9, 0x5a, 0xeb, 0xdc, 0x73, 0xee, 0x73, 0x76, 0xf7, 0x8a, - 0x45, 0xbc, 0x63, 0x30, 0x18, 0xcc, 0x0c, 0x66, 0x06, 0xe7, 0xfb, 0xa9, 0x48, 0xd4, 0xfd, 0x9c, 0xed, 0x4d, 0xd5, - 0x2c, 0xbb, 0x38, 0xb7, 0xff, 0x32, 0x9a, 0x5e, 0x9c, 0x67, 0x3c, 0xff, 0xb2, 0x57, 0xb0, 0x8c, 0xf0, 0x44, 0xe4, - 0x7b, 0xd3, 0x82, 0x8d, 0x49, 0x4a, 0x15, 0x8d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xc5, 0xf9, 0x8c, 0x29, 0xba, - 0x97, 0x4c, 0x69, 0x21, 0x99, 0x22, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbb, 0x38, 0x97, 0x49, 0xc1, 0xe7, 0x6a, 0x0f, - 0x9a, 0x24, 0x33, 0x91, 0x2e, 0x32, 0x76, 0x71, 0x74, 0x74, 0x7b, 0x7b, 0x1b, 0xfd, 0x25, 0xff, 0xc7, 0x57, 0x5a, - 0xec, 0xfd, 0x52, 0x90, 0xd7, 0xa3, 0xbf, 0x58, 0xa2, 0xa2, 0x94, 0x8d, 0x79, 0xce, 0xde, 0x14, 0x62, 0xce, 0x0a, - 0x75, 0xdf, 0x83, 0xcc, 0x9f, 0x0a, 0x12, 0x72, 0xac, 0x30, 0x43, 0xe4, 0x42, 0xed, 0xf1, 0x7c, 0x8f, 0xf7, 0x7f, - 0x29, 0x74, 0xca, 0x92, 0xe5, 0x8b, 0x19, 0x2b, 0xe8, 0x28, 0x63, 0xf1, 0x7e, 0x0b, 0x27, 0x22, 0x1f, 0xf3, 0xc9, - 0xa2, 0xfc, 0xbe, 0x2d, 0xb8, 0x72, 0xbf, 0xbf, 0xd2, 0x6c, 0xc1, 0x62, 0xb6, 0x46, 0x31, 0x1f, 0xa8, 0x21, 0x61, - 0xba, 0xe5, 0x2f, 0x55, 0xc3, 0xe1, 0x4f, 0xba, 0xc9, 0xfb, 0x39, 0x13, 0xe3, 0x3d, 0xb5, 0x4f, 0x02, 0x79, 0x3f, - 0x1b, 0x89, 0x2c, 0xe8, 0xab, 0x46, 0x10, 0xc4, 0x50, 0x06, 0x33, 0xd4, 0x4b, 0x44, 0x2e, 0xd5, 0x9e, 0xe4, 0xe4, - 0x96, 0xe7, 0xa9, 0xb8, 0xc5, 0x5f, 0x25, 0x91, 0x3c, 0xba, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x1d, 0x1c, - 0x84, 0xf6, 0xfb, 0xfe, 0xea, 0xfa, 0x9a, 0x10, 0xf2, 0x55, 0xf0, 0x74, 0xaf, 0xb5, 0x5a, 0x79, 0xa9, 0x51, 0x4e, - 0x15, 0xff, 0xca, 0x4c, 0x25, 0x74, 0x70, 0x10, 0xd0, 0x54, 0xcc, 0x15, 0x4b, 0xaf, 0xd5, 0x7d, 0xc6, 0xae, 0xa7, - 0x8c, 0x29, 0x19, 0xf0, 0x7c, 0xef, 0x89, 0x48, 0x16, 0x33, 0x96, 0xab, 0x68, 0x5e, 0x08, 0x25, 0x60, 0x60, 0x07, - 0x07, 0x41, 0xc1, 0xe6, 0x19, 0x4d, 0x18, 0xe4, 0x5f, 0x5d, 0x5f, 0x57, 0x35, 0xaa, 0x42, 0xf8, 0x56, 0x92, 0x6b, - 0x3d, 0xf4, 0x10, 0xe1, 0xe7, 0x92, 0xe4, 0xec, 0x76, 0xef, 0x03, 0xa3, 0x5f, 0x7e, 0xa5, 0xf3, 0x5e, 0x92, 0x51, - 0x29, 0xf7, 0x9e, 0x89, 0xa5, 0x9e, 0x46, 0xb1, 0x48, 0x94, 0x28, 0x42, 0x85, 0x19, 0x96, 0x68, 0xc9, 0xc7, 0xa1, - 0x9a, 0x72, 0x19, 0xdd, 0x3c, 0x48, 0xa4, 0x7c, 0xcb, 0xe4, 0x22, 0x53, 0x0f, 0xc8, 0x7e, 0x0b, 0xcb, 0x7d, 0x42, - 0x6e, 0x25, 0x52, 0xd3, 0x42, 0xdc, 0xee, 0x3d, 0x2d, 0x0a, 0x51, 0x84, 0xc1, 0xd5, 0xf5, 0xb5, 0x29, 0xb1, 0xc7, - 0xe5, 0x5e, 0x2e, 0xd4, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xda, 0xfb, 0x5d, 0xb2, 0xbd, 0xcf, 0x8b, 0x5c, 0xd2, 0x31, - 0xbb, 0xba, 0xbe, 0xfe, 0xbc, 0x27, 0x8a, 0xbd, 0xcf, 0x89, 0x94, 0x9f, 0xf7, 0x78, 0x2e, 0x15, 0xa3, 0x69, 0x14, - 0xa0, 0x9e, 0xee, 0x2c, 0x91, 0xf2, 0x1d, 0xbb, 0x53, 0x44, 0x61, 0xfd, 0xa9, 0x08, 0x5b, 0x4f, 0x98, 0xda, 0x93, - 0xe5, 0xbc, 0x42, 0xb4, 0xcc, 0x98, 0xda, 0x53, 0x44, 0xe7, 0x0b, 0x0b, 0x7f, 0x66, 0x3e, 0x55, 0x8f, 0x8f, 0xc3, - 0xaf, 0xf2, 0xe0, 0x40, 0x95, 0x80, 0x46, 0x4b, 0xbb, 0x42, 0x84, 0xed, 0xbb, 0xb4, 0x83, 0x03, 0x16, 0x65, 0x2c, - 0x9f, 0xa8, 0x29, 0x21, 0xa4, 0xdd, 0x93, 0x07, 0x07, 0xa1, 0x22, 0xcf, 0x65, 0x34, 0x61, 0x2a, 0x64, 0x08, 0xe1, - 0xaa, 0xf6, 0xc1, 0x41, 0x68, 0x80, 0x20, 0x88, 0xd2, 0x80, 0xab, 0xc1, 0x18, 0x45, 0x16, 0xfa, 0xd7, 0xf7, 0x79, - 0x12, 0xfa, 0xe3, 0x47, 0x58, 0x1e, 0x1c, 0x3c, 0x97, 0x91, 0x84, 0x16, 0xb1, 0x42, 0x68, 0x5d, 0x30, 0xb5, 0x28, - 0xf2, 0x3d, 0xb5, 0x56, 0xe2, 0x5a, 0x15, 0x3c, 0x9f, 0x84, 0x68, 0xe9, 0xd2, 0xbc, 0x8a, 0xeb, 0xb5, 0x19, 0xee, - 0x6f, 0x05, 0xe1, 0xe4, 0x02, 0x7a, 0x7c, 0x26, 0x42, 0x8b, 0x83, 0x9c, 0x90, 0x40, 0xea, 0xba, 0x41, 0x9f, 0xc7, - 0xbc, 0x11, 0x04, 0xd8, 0x8c, 0x12, 0xdf, 0x4a, 0x84, 0xb9, 0x02, 0xd4, 0x8d, 0xa2, 0x48, 0x21, 0x72, 0xb1, 0x74, - 0x60, 0xe1, 0xde, 0x44, 0xfb, 0x7c, 0xd0, 0x1a, 0xc6, 0x2a, 0x2a, 0x58, 0xba, 0x48, 0x58, 0x18, 0x4a, 0x9c, 0x63, - 0x81, 0xc8, 0x85, 0x6c, 0x84, 0x05, 0xb9, 0x80, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xd9, 0x41, 0x16, - 0x6e, 0x84, 0x00, 0x62, 0x3b, 0xa0, 0x82, 0x90, 0x20, 0x5f, 0xcc, 0x46, 0xac, 0x08, 0xca, 0x62, 0xbd, 0x1a, 0x5e, - 0x2c, 0x24, 0xdb, 0x4b, 0xa4, 0xdc, 0x1b, 0x2f, 0xf2, 0x44, 0x71, 0x91, 0xef, 0x05, 0x8d, 0xa2, 0x11, 0x18, 0x7c, - 0x28, 0xd1, 0x21, 0x40, 0x6b, 0x14, 0xe6, 0xa8, 0xc1, 0x07, 0xa2, 0xd1, 0x1e, 0x62, 0x18, 0x25, 0xea, 0xd9, 0xf6, - 0x2c, 0x04, 0x18, 0xe6, 0x30, 0xc9, 0x35, 0xfe, 0x64, 0x76, 0x3e, 0x4c, 0xf1, 0xab, 0xec, 0xf3, 0x68, 0x7b, 0xa7, - 0x10, 0x15, 0xcd, 0xe8, 0x3c, 0x64, 0xe4, 0x82, 0x69, 0xec, 0xa2, 0x79, 0x02, 0x63, 0xad, 0x2d, 0x5c, 0x9f, 0xc5, - 0x2c, 0xaa, 0x70, 0x0a, 0xc5, 0x2a, 0x1a, 0x8b, 0xe2, 0x29, 0x4d, 0xa6, 0x50, 0xaf, 0xc4, 0x98, 0xd4, 0x6d, 0xb8, - 0xa4, 0x60, 0x54, 0xb1, 0xa7, 0x19, 0x83, 0xaf, 0x30, 0xd0, 0x35, 0x03, 0x84, 0x73, 0xd8, 0xea, 0x19, 0x57, 0xaf, - 0x44, 0x9e, 0xb0, 0x5e, 0xee, 0xe1, 0x97, 0x5e, 0xf9, 0x4b, 0xa5, 0x0a, 0x3e, 0x5a, 0x28, 0x16, 0x06, 0x39, 0x94, - 0x08, 0x70, 0x8e, 0xb0, 0x8c, 0x14, 0xbb, 0x53, 0x57, 0x22, 0x57, 0x2c, 0x57, 0x84, 0x39, 0xa8, 0x62, 0x1e, 0xd1, - 0xf9, 0x9c, 0xe5, 0xe9, 0xd5, 0x94, 0x67, 0x69, 0x28, 0xd1, 0x1a, 0xad, 0xf1, 0x07, 0x49, 0x60, 0x92, 0xe4, 0x82, - 0xc7, 0xf0, 0xcf, 0xb7, 0xa7, 0x13, 0x2a, 0x72, 0xa1, 0xb7, 0x05, 0x23, 0x41, 0xd0, 0x1b, 0x8b, 0x22, 0xb4, 0x53, - 0xd8, 0x03, 0xd2, 0x05, 0x7d, 0xbc, 0x5d, 0x64, 0x4c, 0x22, 0xd6, 0x20, 0x25, 0xa6, 0x39, 0x08, 0xff, 0x56, 0x84, - 0x0c, 0x16, 0x80, 0xa3, 0x98, 0x6b, 0x12, 0xf8, 0x92, 0xdb, 0x4d, 0x95, 0x96, 0x44, 0xed, 0x77, 0x49, 0x52, 0x1e, - 0xa9, 0x62, 0x21, 0x15, 0x4b, 0xdf, 0xdd, 0xcf, 0x99, 0xc4, 0x3f, 0x17, 0xe4, 0x77, 0xd9, 0xff, 0x5d, 0x46, 0x6c, - 0x36, 0x57, 0xf7, 0xd7, 0x9a, 0x9a, 0xc7, 0x41, 0x80, 0x3f, 0xea, 0xa2, 0x05, 0xa3, 0x09, 0x90, 0x34, 0x0b, 0xb2, - 0x37, 0x22, 0xbb, 0x1f, 0xf3, 0x2c, 0xbb, 0x5e, 0xcc, 0xe7, 0xa2, 0x50, 0x58, 0x49, 0xb2, 0x54, 0xa2, 0x82, 0x0f, - 0xac, 0xe8, 0x52, 0xde, 0x72, 0x95, 0x4c, 0x43, 0x85, 0x96, 0x09, 0x95, 0x6c, 0xef, 0xb1, 0x10, 0x19, 0xa3, 0x79, - 0xcc, 0x09, 0xef, 0xff, 0x5c, 0xc4, 0xf9, 0x22, 0xcb, 0x7a, 0xa3, 0x82, 0xd1, 0x2f, 0x3d, 0x9d, 0x6d, 0x0e, 0x87, - 0x58, 0xff, 0xbe, 0x2c, 0x0a, 0x7a, 0x0f, 0x05, 0x09, 0x81, 0x62, 0x7d, 0x1e, 0xff, 0x7c, 0xfd, 0xfa, 0x55, 0x64, - 0xf6, 0x0a, 0x1f, 0xdf, 0x87, 0xbc, 0xdc, 0x7f, 0x7c, 0x8d, 0xc7, 0x85, 0x98, 0x6d, 0x74, 0x6d, 0x40, 0xc7, 0x7b, - 0xdf, 0x18, 0x02, 0x23, 0x7c, 0xdf, 0x34, 0xed, 0x8f, 0xe0, 0x95, 0xc6, 0x7c, 0xc8, 0x24, 0xb6, 0x5f, 0xf8, 0x27, - 0x36, 0xc9, 0x21, 0x47, 0xdf, 0x1f, 0xad, 0x2a, 0xee, 0x97, 0x8c, 0xe8, 0x71, 0xce, 0xe1, 0x60, 0x84, 0x31, 0x26, - 0x54, 0x25, 0xd3, 0x25, 0xd3, 0x8d, 0xad, 0xdd, 0x88, 0xd9, 0x7a, 0x8d, 0x5f, 0x09, 0x87, 0xf5, 0x6a, 0x9f, 0x10, - 0xae, 0xe9, 0x15, 0x51, 0xab, 0x15, 0x27, 0x84, 0x23, 0xfc, 0x96, 0x93, 0x25, 0x75, 0x13, 0x82, 0x93, 0x0d, 0xb6, - 0x67, 0x6c, 0xa8, 0x0c, 0x9c, 0x80, 0x5f, 0x59, 0xa1, 0x58, 0x11, 0x2b, 0x89, 0x0b, 0x36, 0xce, 0x60, 0x1c, 0xfb, - 0x6d, 0x3c, 0xa5, 0xf2, 0x6a, 0x4a, 0xf3, 0x09, 0x4b, 0xe3, 0x57, 0x62, 0x8d, 0x99, 0x24, 0xc1, 0x98, 0xe7, 0x34, - 0xe3, 0xff, 0xb0, 0x34, 0xb0, 0xe7, 0xc2, 0x63, 0xb5, 0xc7, 0xee, 0x14, 0xcb, 0x53, 0xb9, 0xf7, 0xfc, 0xdd, 0xaf, - 0x2f, 0xed, 0x62, 0xd6, 0xce, 0x0a, 0xb4, 0x94, 0x8b, 0x39, 0x2b, 0x42, 0x84, 0xed, 0x59, 0xf1, 0x94, 0x6b, 0x3a, - 0xf9, 0x2b, 0x9d, 0x9b, 0x14, 0x2e, 0x7f, 0x9f, 0xa7, 0x54, 0xb1, 0x37, 0x2c, 0x4f, 0x79, 0x3e, 0x21, 0xfb, 0x6d, - 0x93, 0x3e, 0xa5, 0x36, 0x23, 0x2d, 0x93, 0x6e, 0x1e, 0x3c, 0xcd, 0xf4, 0xdc, 0xcb, 0xcf, 0x45, 0x88, 0xd6, 0x52, - 0x51, 0xc5, 0x93, 0x3d, 0x9a, 0xa6, 0x2f, 0x72, 0xae, 0xb8, 0x1e, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xcc, 0xa9, - 0xe1, 0x46, 0x1e, 0x22, 0x1c, 0x86, 0xf6, 0x2c, 0x98, 0x22, 0xbb, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb3, 0xd8, - 0x64, 0x92, 0xc1, 0x10, 0x45, 0xf3, 0x85, 0x84, 0xc5, 0x76, 0x5d, 0xc0, 0x41, 0x23, 0x46, 0x92, 0x15, 0x5f, 0x59, - 0x5a, 0x22, 0x88, 0x0c, 0xd1, 0x72, 0xa3, 0x0f, 0xbb, 0x3d, 0x14, 0x19, 0x0c, 0x7b, 0x3e, 0x09, 0x67, 0x16, 0xd9, - 0x0d, 0xa7, 0xc2, 0x99, 0x2c, 0x89, 0x4a, 0x08, 0x07, 0x6a, 0x49, 0x58, 0x72, 0xe2, 0xe6, 0x37, 0x0f, 0x25, 0xf0, - 0x10, 0x3e, 0xe5, 0x70, 0x67, 0xee, 0xd3, 0xaf, 0xfa, 0xf0, 0xc8, 0xb1, 0x44, 0x58, 0x99, 0x91, 0xe6, 0x08, 0xad, - 0x11, 0x56, 0x6e, 0xb8, 0x86, 0x28, 0x39, 0xbe, 0x08, 0x4e, 0x6d, 0xf2, 0x96, 0xeb, 0x63, 0x1b, 0x68, 0x1b, 0x55, - 0xec, 0xe0, 0x20, 0x64, 0x51, 0x89, 0x18, 0x64, 0xbf, 0x6d, 0x17, 0xc9, 0x83, 0xd6, 0x37, 0xc6, 0x0d, 0x3d, 0x6b, - 0x06, 0x67, 0x9f, 0x45, 0xb9, 0xb8, 0x4c, 0x12, 0x26, 0xa5, 0x28, 0x0e, 0x0e, 0xf6, 0x75, 0xf9, 0x92, 0xb3, 0x80, - 0x45, 0x7c, 0x7d, 0x9b, 0x57, 0x43, 0x40, 0xd5, 0x69, 0xeb, 0xf8, 0x26, 0x52, 0xf1, 0x4d, 0x8e, 0x09, 0x89, 0x83, - 0x9b, 0x9b, 0xa0, 0xa1, 0xb0, 0x85, 0xc3, 0x84, 0xb9, 0xae, 0xef, 0x9f, 0x30, 0xc3, 0x16, 0x6a, 0x26, 0x64, 0x0b, - 0x34, 0x3b, 0xf9, 0xc1, 0xb0, 0x3e, 0x24, 0xac, 0x70, 0x8e, 0xd6, 0xde, 0x8a, 0xee, 0x6c, 0x5a, 0xf3, 0x37, 0x66, - 0xe9, 0x96, 0x13, 0xcd, 0x53, 0x78, 0xeb, 0x38, 0x60, 0xc3, 0x35, 0xd6, 0xb0, 0x77, 0xb3, 0x11, 0x7a, 0xa0, 0x03, - 0x35, 0xec, 0xd9, 0x7c, 0x92, 0x1b, 0xc8, 0x15, 0xec, 0xef, 0x05, 0x93, 0xca, 0x20, 0x72, 0xa8, 0xb0, 0xc0, 0x70, - 0x46, 0x6d, 0x32, 0x9d, 0x35, 0x96, 0x74, 0xd7, 0xd8, 0x5e, 0xcf, 0xe1, 0x6c, 0x94, 0x80, 0xd4, 0xdf, 0xc7, 0x27, - 0x18, 0xab, 0x42, 0xab, 0xd5, 0x5b, 0xee, 0x5a, 0xa9, 0xd6, 0xb2, 0xe4, 0xd7, 0x36, 0x16, 0x85, 0x49, 0x64, 0x0f, - 0xe7, 0xfd, 0xb6, 0x1d, 0xbf, 0x1c, 0x92, 0xfd, 0x56, 0x89, 0xc5, 0x16, 0xac, 0x66, 0x3c, 0x06, 0x8a, 0xaf, 0x4d, - 0x53, 0x48, 0x9f, 0xf5, 0x35, 0x7c, 0x89, 0xa6, 0x5b, 0xb8, 0x3a, 0x25, 0x03, 0xe0, 0x3a, 0xa2, 0xe9, 0xf0, 0x5b, - 0xf8, 0xe4, 0x28, 0x42, 0xa8, 0xb6, 0xf3, 0x2a, 0xc2, 0xf1, 0xb5, 0x4e, 0x38, 0x36, 0xa6, 0x11, 0xcc, 0xcb, 0x2a, - 0x41, 0x89, 0x66, 0x76, 0xab, 0x57, 0x59, 0x58, 0xea, 0xc1, 0x54, 0x53, 0xf2, 0x9a, 0x78, 0x45, 0x67, 0x4c, 0x86, - 0x0c, 0xe1, 0x6f, 0x15, 0x30, 0xf8, 0x09, 0x45, 0x86, 0xde, 0x19, 0x9a, 0xc3, 0x19, 0x0a, 0xec, 0x2e, 0x30, 0x69, - 0xf5, 0x2d, 0x97, 0x63, 0x36, 0xc8, 0x87, 0x15, 0x6f, 0xe7, 0x4d, 0x5e, 0x1f, 0xce, 0x92, 0xd4, 0xf6, 0x9b, 0x49, - 0x33, 0x40, 0xd3, 0x2c, 0x84, 0x44, 0x78, 0xbf, 0xb5, 0xb9, 0x92, 0xae, 0x54, 0x35, 0xc7, 0xc1, 0x10, 0xd6, 0x41, - 0x1f, 0x1b, 0x11, 0x97, 0xfa, 0x6f, 0x6d, 0xab, 0x01, 0xd8, 0xae, 0x01, 0x33, 0xa2, 0x71, 0x46, 0x55, 0xd8, 0x3e, - 0x6a, 0x01, 0x63, 0xfa, 0x95, 0xc1, 0xa9, 0x82, 0xd0, 0xf6, 0x54, 0x58, 0xb4, 0xc8, 0xe5, 0x94, 0x8f, 0x55, 0xf8, - 0x41, 0x6a, 0xa2, 0xc2, 0x32, 0xc9, 0x40, 0xc2, 0xf1, 0xd8, 0x63, 0x4d, 0x70, 0x3e, 0xc0, 0x30, 0x4a, 0x56, 0x8c, - 0xb9, 0x91, 0x6a, 0xc2, 0x05, 0xe4, 0xa1, 0x62, 0xad, 0x2b, 0x32, 0xe3, 0x4a, 0x4b, 0xe0, 0x1e, 0xdb, 0x7d, 0xd3, - 0x62, 0x6c, 0xa9, 0x81, 0xf4, 0x38, 0x58, 0x19, 0xfb, 0x24, 0xc2, 0x26, 0xaa, 0x48, 0x89, 0x97, 0xe2, 0x96, 0x15, - 0x57, 0x14, 0x06, 0x1f, 0x9b, 0xea, 0x6b, 0x73, 0x14, 0x68, 0x8a, 0xaf, 0x7a, 0x0e, 0x5f, 0x6e, 0xf4, 0xc4, 0xdf, - 0x14, 0x62, 0xc6, 0x25, 0x03, 0xbe, 0xcd, 0xc0, 0x3f, 0x87, 0x8d, 0xa6, 0x77, 0x24, 0x1c, 0x37, 0xac, 0xc4, 0xaf, - 0xcb, 0x97, 0x75, 0xfc, 0xba, 0x79, 0xf0, 0x74, 0xe2, 0x28, 0x60, 0x7d, 0x1f, 0x23, 0x1c, 0x5a, 0xf1, 0xc2, 0x3b, - 0xe9, 0xa2, 0x29, 0xb2, 0xc7, 0xfc, 0x6a, 0xa5, 0x3c, 0x31, 0xae, 0xc6, 0x39, 0x32, 0xb3, 0x6d, 0xd0, 0x9a, 0xa6, - 0x29, 0xb0, 0x78, 0x85, 0xc8, 0x32, 0xef, 0xb0, 0xc2, 0xb2, 0x57, 0x1e, 0x4f, 0x37, 0x0f, 0x9e, 0x5e, 0x7f, 0xef, - 0x84, 0x82, 0x7c, 0xff, 0x90, 0x72, 0x03, 0xcd, 0x53, 0x56, 0x80, 0x5c, 0xe9, 0xad, 0x96, 0x3d, 0x67, 0xaf, 0x44, - 0x9e, 0xb3, 0x44, 0xb1, 0x14, 0x84, 0x16, 0x60, 0x83, 0xa7, 0x42, 0xaa, 0x32, 0xb1, 0x1a, 0xbd, 0xf4, 0x85, 0xd0, - 0x28, 0xa1, 0x59, 0x16, 0x1a, 0x01, 0x65, 0x26, 0xbe, 0xb2, 0x1d, 0xa3, 0xee, 0xd5, 0x86, 0x5c, 0x36, 0xc3, 0xbc, - 0x66, 0x58, 0x24, 0xe7, 0x19, 0x4f, 0x58, 0x79, 0x78, 0x5d, 0x47, 0x3c, 0x4f, 0xd9, 0x1d, 0xd0, 0x11, 0x74, 0x71, - 0x71, 0xd1, 0xc2, 0x6d, 0xb4, 0x36, 0x00, 0x5f, 0x6e, 0x01, 0xf6, 0x3b, 0xc7, 0xa6, 0x11, 0xc4, 0x97, 0x3b, 0xc9, - 0x1a, 0xf2, 0xce, 0x4a, 0xee, 0x04, 0x2d, 0x43, 0x9e, 0x11, 0x4e, 0x59, 0xc6, 0x14, 0x73, 0xe4, 0x1c, 0x98, 0x69, - 0xb3, 0x75, 0xdf, 0x96, 0xf0, 0x2b, 0xd1, 0xc9, 0xed, 0x32, 0xb7, 0xe6, 0xb2, 0x14, 0xdd, 0xab, 0xe5, 0xa9, 0xa0, - 0xdd, 0x57, 0x66, 0x79, 0xa8, 0x52, 0x34, 0x99, 0x1a, 0x89, 0x3d, 0xdc, 0x9a, 0x52, 0xd5, 0x86, 0x25, 0xed, 0xe5, - 0x26, 0xfa, 0x54, 0xd8, 0x61, 0xee, 0x02, 0xc1, 0xb5, 0x25, 0x0a, 0x0c, 0x84, 0x40, 0xb3, 0x6c, 0x57, 0x34, 0xcb, - 0x46, 0x34, 0xf9, 0x52, 0xc7, 0xfe, 0x0a, 0x0d, 0xc8, 0x26, 0x35, 0xf6, 0xb2, 0x3c, 0x92, 0xe5, 0xcf, 0xdb, 0x51, - 0xe9, 0xda, 0x46, 0x09, 0xf7, 0x5b, 0x15, 0xda, 0xd7, 0x17, 0xfa, 0x9b, 0xd8, 0xae, 0x47, 0x24, 0xed, 0xcc, 0x42, - 0xa0, 0x02, 0xff, 0x12, 0xe3, 0x1c, 0x3d, 0xb0, 0x78, 0x07, 0x82, 0xc7, 0x7a, 0x63, 0x20, 0x0a, 0x2d, 0xd7, 0x29, - 0x97, 0xdf, 0x86, 0xc0, 0xff, 0x96, 0x51, 0x3e, 0xf1, 0x7a, 0xf8, 0x77, 0x07, 0x5a, 0xd2, 0x38, 0xcb, 0x38, 0x97, - 0x23, 0xb3, 0x0c, 0x85, 0x23, 0x34, 0xbf, 0x00, 0xf3, 0xa2, 0xf1, 0xfd, 0xb5, 0xc9, 0xd2, 0x7c, 0x19, 0x0c, 0x23, - 0xef, 0xf9, 0x0c, 0x45, 0x0d, 0x05, 0x2c, 0x51, 0x35, 0x67, 0xae, 0xa8, 0x89, 0x92, 0x96, 0x6b, 0x37, 0xe2, 0xb8, - 0xa5, 0xb9, 0x05, 0x09, 0xc3, 0x30, 0x27, 0xba, 0x0d, 0xc3, 0xdf, 0x57, 0xb3, 0xc8, 0xb7, 0x66, 0x91, 0x47, 0x9e, - 0xb4, 0x85, 0x2a, 0x64, 0xf6, 0xaa, 0xc7, 0x4a, 0x22, 0xbf, 0x14, 0xb0, 0xac, 0x11, 0x50, 0x68, 0x54, 0x12, 0xdc, - 0x8c, 0x28, 0x5c, 0x58, 0x51, 0xc7, 0xe2, 0x1a, 0x90, 0x8c, 0xaa, 0x8a, 0x40, 0x66, 0x73, 0xd4, 0x64, 0x5f, 0x81, - 0x0b, 0xb4, 0xc1, 0xdf, 0xaf, 0xd7, 0x16, 0x4a, 0x0c, 0xd9, 0xd5, 0xa9, 0x31, 0xc6, 0x1e, 0x58, 0xb0, 0x20, 0xb9, - 0x61, 0x86, 0x0d, 0xeb, 0xb3, 0x09, 0x9c, 0xb2, 0xdd, 0x7d, 0x42, 0x44, 0x05, 0x9b, 0x3c, 0xda, 0xc1, 0x5d, 0x09, - 0x84, 0xa9, 0x63, 0x4b, 0x8b, 0x6a, 0xe2, 0x84, 0x04, 0x4e, 0x3b, 0x11, 0xf4, 0x97, 0x35, 0xe1, 0x30, 0xf6, 0x8a, - 0xad, 0x63, 0x20, 0xaa, 0xc5, 0x2e, 0x78, 0xef, 0xc2, 0x9a, 0x5a, 0x3b, 0x1e, 0xc4, 0x8b, 0x1a, 0xc4, 0x3d, 0xd0, - 0x0a, 0x43, 0xbc, 0xc4, 0x90, 0xd0, 0x7a, 0xe5, 0x90, 0xe1, 0xc2, 0x2c, 0xc4, 0x16, 0x14, 0x37, 0xd9, 0x4f, 0x8d, - 0x85, 0x20, 0xcb, 0xe6, 0xc0, 0xdf, 0xf9, 0x47, 0x44, 0x08, 0x83, 0x97, 0xab, 0xd5, 0x16, 0xda, 0xed, 0xe4, 0x42, - 0x51, 0x54, 0x49, 0x87, 0xab, 0xd5, 0x2b, 0x81, 0x42, 0xcb, 0xff, 0x62, 0x86, 0xfa, 0x8e, 0xe8, 0x5e, 0xbe, 0x84, - 0x52, 0x9a, 0x1d, 0xad, 0x52, 0x4a, 0xc1, 0xa1, 0x8e, 0xb5, 0xf5, 0x85, 0x52, 0x1e, 0xe5, 0xbe, 0xda, 0x22, 0x60, - 0x3a, 0xd1, 0x9e, 0xd4, 0xd5, 0x94, 0xaf, 0x6c, 0xd3, 0x12, 0x21, 0x14, 0xe7, 0x5a, 0x96, 0xd9, 0xdf, 0x25, 0x5f, - 0x1e, 0x1c, 0xe4, 0x5e, 0x43, 0x37, 0x25, 0xa5, 0xf8, 0x2b, 0x84, 0x53, 0x59, 0xde, 0xe7, 0x9a, 0x7d, 0xf9, 0xcb, - 0x9d, 0x43, 0x5b, 0xd2, 0x69, 0xab, 0x07, 0x82, 0x39, 0xbd, 0xa5, 0x5c, 0xed, 0x95, 0xad, 0x18, 0xc1, 0x3c, 0x64, - 0x68, 0x69, 0xb9, 0x8d, 0xa8, 0x60, 0xc0, 0x3f, 0x02, 0x59, 0x70, 0x5c, 0xb4, 0x41, 0xfc, 0x64, 0xca, 0x40, 0x95, - 0xed, 0x18, 0x89, 0x52, 0x3c, 0xdc, 0xb7, 0x07, 0x89, 0x6d, 0x78, 0xf7, 0xd8, 0xd7, 0x9b, 0xd5, 0x6b, 0xd2, 0xc0, - 0x9c, 0x15, 0x63, 0x51, 0xcc, 0x5c, 0xde, 0x7a, 0xe3, 0xdb, 0x12, 0x47, 0x3e, 0x0e, 0x77, 0xb6, 0x6d, 0x45, 0x80, - 0xde, 0x86, 0xec, 0x5d, 0x49, 0xed, 0xb5, 0xd3, 0xb4, 0x3c, 0x80, 0x8d, 0x82, 0xd0, 0x61, 0x66, 0xee, 0x4b, 0xf9, - 0x56, 0xbd, 0xda, 0x33, 0xba, 0x93, 0xfd, 0x76, 0xaf, 0x94, 0xfc, 0x1c, 0x36, 0xf4, 0x8c, 0x8e, 0xc3, 0x9e, 0xaa, - 0x62, 0x91, 0xa5, 0x76, 0xb0, 0x70, 0xc4, 0x59, 0x3c, 0xba, 0xe5, 0x59, 0x56, 0xa5, 0xfe, 0x27, 0xa4, 0x3d, 0xb7, - 0xa4, 0x5d, 0x38, 0xd2, 0x0e, 0xa4, 0x02, 0x48, 0xbb, 0x69, 0xae, 0xaa, 0x2e, 0xb6, 0xb6, 0xa7, 0x30, 0x44, 0x3d, - 0xd7, 0xe2, 0x34, 0xf4, 0xb7, 0x70, 0x23, 0x40, 0x25, 0xf3, 0xf5, 0x25, 0xb4, 0xfa, 0x18, 0x10, 0x03, 0x8d, 0x4e, - 0x93, 0xf9, 0x9a, 0x8a, 0x2f, 0x21, 0xc2, 0xf9, 0x9a, 0x95, 0x98, 0x7d, 0xf9, 0x14, 0x94, 0x76, 0xde, 0x74, 0xe0, - 0x1c, 0xd3, 0xc9, 0xff, 0x11, 0x1f, 0xe5, 0x66, 0x27, 0xed, 0xec, 0x72, 0x37, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0xd2, - 0xef, 0x53, 0x7b, 0x3d, 0x3d, 0x59, 0x4e, 0xaf, 0x5a, 0xef, 0xd5, 0x2a, 0xdc, 0x48, 0x01, 0x8d, 0xbe, 0x95, 0x52, - 0x8a, 0xb2, 0x75, 0xa0, 0x01, 0x3e, 0x64, 0x20, 0x61, 0x6d, 0x26, 0x5d, 0x9e, 0x72, 0x2f, 0xff, 0x95, 0x9e, 0x47, - 0x2b, 0xee, 0x4d, 0xfd, 0x2b, 0x31, 0x9b, 0x03, 0x43, 0xb6, 0x81, 0xd2, 0x13, 0x66, 0x3b, 0xac, 0xf2, 0xd7, 0x3b, - 0xd2, 0x6a, 0x75, 0xf4, 0x7e, 0xac, 0x61, 0x53, 0x29, 0x35, 0xef, 0xb7, 0xd6, 0x8b, 0x32, 0xa9, 0x24, 0x1c, 0xbb, - 0x74, 0x2b, 0x57, 0x9b, 0x9a, 0x19, 0x97, 0xf1, 0x3a, 0x94, 0x86, 0x0e, 0x4b, 0xa0, 0x75, 0x1e, 0xf9, 0x71, 0xe8, - 0xee, 0xaf, 0xff, 0xba, 0x02, 0xce, 0x72, 0xbd, 0x01, 0xbe, 0xe5, 0x7a, 0xfd, 0x58, 0x59, 0x49, 0x1b, 0x3f, 0xde, - 0x21, 0xf7, 0x96, 0xd0, 0xab, 0x32, 0xad, 0xcc, 0x38, 0x18, 0x42, 0xda, 0x16, 0x0b, 0x49, 0x96, 0x33, 0x91, 0xb2, - 0x38, 0x10, 0x73, 0x96, 0x07, 0x6b, 0xd0, 0xb3, 0x5a, 0x04, 0xf8, 0x28, 0xc3, 0xe5, 0xdb, 0xba, 0xbe, 0x35, 0x7e, - 0xac, 0xd6, 0xa0, 0x0a, 0x7b, 0xc9, 0x77, 0x28, 0x63, 0xdf, 0xb3, 0x42, 0x6a, 0x9e, 0xb4, 0x64, 0x6f, 0x5f, 0xf2, - 0xea, 0x80, 0x7a, 0xc9, 0xe3, 0x6f, 0x57, 0xa9, 0x04, 0x92, 0xa0, 0x1d, 0x9d, 0x46, 0xc7, 0x01, 0xd2, 0x1a, 0xe3, - 0x67, 0x4e, 0x63, 0xbc, 0x28, 0x35, 0xc6, 0xcf, 0x15, 0x59, 0x6c, 0x68, 0x8c, 0xff, 0x96, 0xe4, 0xb9, 0xea, 0x3f, - 0x77, 0xda, 0xf4, 0x37, 0x22, 0xe3, 0xc9, 0x7d, 0x18, 0x64, 0x5c, 0x35, 0xe1, 0x36, 0x31, 0xc0, 0x4b, 0x93, 0x01, - 0xaa, 0x46, 0xad, 0xef, 0x5e, 0x3b, 0xf9, 0x0f, 0x73, 0x49, 0x82, 0x07, 0x19, 0x57, 0x0f, 0x02, 0x3c, 0x55, 0xe4, - 0x33, 0xfc, 0x7a, 0xb0, 0x0c, 0x7f, 0xa5, 0x6a, 0x1a, 0x15, 0x34, 0x4f, 0xc5, 0x2c, 0x44, 0x8d, 0x20, 0x40, 0x91, - 0xd4, 0x42, 0xc8, 0x23, 0xb4, 0x7e, 0xf0, 0x19, 0xff, 0x23, 0x48, 0xd0, 0x0f, 0x1a, 0x53, 0x85, 0x15, 0x25, 0x9f, - 0xcf, 0x1f, 0x2c, 0xff, 0x11, 0xeb, 0x8b, 0xcf, 0xf8, 0xa9, 0x2a, 0xd5, 0xfa, 0xf8, 0x8e, 0x91, 0x10, 0x91, 0x8b, - 0xa7, 0x6e, 0x48, 0x57, 0x62, 0x66, 0x14, 0xfc, 0x01, 0xc2, 0x5f, 0x41, 0xaf, 0x7b, 0xc1, 0x2b, 0x22, 0x64, 0xef, - 0x60, 0xf6, 0x49, 0x20, 0xb4, 0xf2, 0x20, 0x38, 0x38, 0xf0, 0xd2, 0x4a, 0x16, 0x02, 0xff, 0x25, 0x48, 0x4d, 0x54, - 0xc7, 0x8c, 0x42, 0x4b, 0x7f, 0x89, 0x90, 0x23, 0xd7, 0x4c, 0xe8, 0x34, 0xd5, 0x76, 0xc7, 0xf2, 0x81, 0xd1, 0x3d, - 0x44, 0x5c, 0xb1, 0x82, 0x2a, 0x51, 0x0c, 0x91, 0xcf, 0x96, 0xe0, 0x57, 0x9c, 0x7c, 0x1e, 0xec, 0xfd, 0x3f, 0xff, - 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xf0, 0x33, 0x96, 0x8c, 0x1c, 0x9d, 0x87, 0xfd, 0x38, 0xdc, 0x6f, 0x36, 0x57, 0x7f, - 0x1e, 0x0d, 0xfe, 0x9b, 0x36, 0xff, 0xb9, 0x6c, 0x7e, 0x1a, 0xa2, 0x55, 0xf8, 0xe7, 0x51, 0x7f, 0x60, 0xbf, 0x06, - 0xff, 0x7d, 0xf1, 0xa7, 0x1c, 0x1e, 0x9a, 0xc4, 0x07, 0x08, 0x1d, 0x4d, 0xf0, 0x1f, 0x92, 0x1c, 0x35, 0x9b, 0x17, - 0x47, 0x13, 0xfc, 0x8b, 0x24, 0x47, 0xf0, 0xf7, 0x5e, 0x91, 0xb7, 0x6c, 0xf2, 0xf4, 0x6e, 0x1e, 0x7e, 0xbe, 0x58, - 0x3d, 0x58, 0xbe, 0xe2, 0x6b, 0x68, 0x77, 0xf0, 0xdf, 0x7f, 0xfe, 0x29, 0x83, 0x1f, 0x2f, 0xc8, 0xd1, 0xb0, 0x81, - 0x42, 0x9d, 0x7c, 0x48, 0xcc, 0x9f, 0xb0, 0x1f, 0x0f, 0xfe, 0xdb, 0x0e, 0x25, 0xf8, 0xf1, 0xcf, 0xcf, 0xe7, 0x17, - 0x64, 0xb8, 0x0a, 0x83, 0xd5, 0x8f, 0x68, 0x85, 0xd0, 0xea, 0x01, 0xfa, 0x8c, 0x83, 0x49, 0x80, 0xf0, 0x4f, 0x92, - 0x1c, 0xfd, 0x78, 0x34, 0xc1, 0xbf, 0x49, 0x72, 0x14, 0x1c, 0x4d, 0xf0, 0x7b, 0x41, 0x8e, 0xfe, 0x3b, 0xec, 0xc7, - 0x46, 0x09, 0xb7, 0xd2, 0xea, 0x8f, 0x15, 0xdc, 0x84, 0xd0, 0x82, 0xd1, 0x95, 0xe2, 0x2a, 0x63, 0xe8, 0xc1, 0x11, - 0xc7, 0x8f, 0x05, 0x00, 0x2b, 0x54, 0xa0, 0xa4, 0xd1, 0x97, 0xb0, 0xcb, 0x1b, 0x58, 0x78, 0xc0, 0xa0, 0x07, 0x31, - 0xc7, 0x46, 0x4f, 0x20, 0x63, 0x65, 0x6e, 0x6f, 0x25, 0x5c, 0xdf, 0xe2, 0x2b, 0xf2, 0x58, 0x84, 0x6d, 0x84, 0x39, - 0x85, 0x1f, 0x1d, 0x84, 0x3f, 0x28, 0x7b, 0xe1, 0x09, 0xdb, 0xdc, 0x60, 0x58, 0x2e, 0x0c, 0x3f, 0x13, 0x20, 0xfc, - 0x72, 0x47, 0xa6, 0x9a, 0x82, 0xfa, 0x01, 0xe1, 0x4f, 0xb5, 0xeb, 0x51, 0x7c, 0xa5, 0x48, 0x89, 0x1c, 0xef, 0x0a, - 0xc6, 0x3e, 0xd0, 0xec, 0x0b, 0x2b, 0xc2, 0xa7, 0x0a, 0xb7, 0x3b, 0x8f, 0xb0, 0x56, 0x55, 0xef, 0xb7, 0x51, 0xaf, - 0xbc, 0xdd, 0x7a, 0x2e, 0xcc, 0x7d, 0x02, 0x9c, 0xc2, 0x75, 0x7d, 0x0d, 0xac, 0xfd, 0x3e, 0xdf, 0x52, 0x6a, 0x15, - 0xf4, 0x36, 0x40, 0xf5, 0xab, 0x54, 0x9e, 0x7f, 0xa5, 0x19, 0x4f, 0xf7, 0x14, 0x9b, 0xcd, 0x33, 0xaa, 0xd8, 0x9e, - 0x9d, 0xf3, 0x1e, 0x85, 0x86, 0x82, 0x92, 0xa7, 0xf8, 0x5b, 0x56, 0x9b, 0xf6, 0x6f, 0x27, 0xe7, 0xc1, 0xde, 0x09, - 0xe1, 0x3e, 0xcb, 0xf2, 0x25, 0x92, 0x96, 0xd7, 0x65, 0x9b, 0x37, 0x82, 0xcd, 0x36, 0x28, 0xcb, 0x86, 0xfa, 0xfc, - 0xce, 0x31, 0xdc, 0x6f, 0x12, 0xd2, 0xe9, 0x07, 0xe7, 0xf2, 0xeb, 0xe4, 0x22, 0x80, 0x9b, 0x9c, 0x82, 0x48, 0xa6, - 0x95, 0x47, 0x50, 0x82, 0x92, 0x56, 0x8f, 0x9e, 0xb3, 0x1e, 0x6d, 0x34, 0x1c, 0x9b, 0x9d, 0x10, 0x3e, 0xa0, 0xa6, - 0x7e, 0x86, 0xa7, 0x38, 0x25, 0xcd, 0x36, 0x5e, 0x90, 0x96, 0xae, 0xd2, 0x5b, 0x9c, 0x27, 0xb6, 0x9f, 0x83, 0x83, - 0xb0, 0x88, 0x32, 0x2a, 0xd5, 0x0b, 0xd0, 0x08, 0x90, 0x05, 0x9e, 0x92, 0x22, 0x62, 0x77, 0x2c, 0x09, 0x13, 0x84, - 0xa7, 0x96, 0x06, 0xa1, 0x1e, 0x5a, 0x10, 0xaf, 0x18, 0xc8, 0x19, 0x44, 0xb2, 0xfe, 0x74, 0xd0, 0x1e, 0x12, 0x42, - 0x82, 0xfd, 0x66, 0x33, 0xe8, 0x17, 0xe4, 0x0f, 0x19, 0x43, 0x8a, 0xc7, 0x4e, 0x93, 0x5f, 0x20, 0xa9, 0xe3, 0x25, - 0x85, 0xef, 0x45, 0xa4, 0x98, 0x54, 0x21, 0x24, 0x83, 0x92, 0x20, 0x77, 0x18, 0x1e, 0x9c, 0x1f, 0x05, 0x0d, 0x48, - 0xd5, 0x28, 0x8a, 0x70, 0x41, 0xee, 0x15, 0x8a, 0xa7, 0x83, 0xe3, 0xa1, 0x7f, 0x46, 0x98, 0x54, 0xe8, 0xff, 0x5e, - 0xf5, 0xa7, 0x83, 0x96, 0xee, 0xff, 0x22, 0xe8, 0x87, 0x05, 0xc9, 0xf7, 0xed, 0x3d, 0x4f, 0x2c, 0x99, 0x9e, 0x2f, - 0x8a, 0xed, 0x00, 0x6d, 0xdf, 0x29, 0x69, 0x76, 0xe2, 0x30, 0xf5, 0x67, 0xd2, 0x84, 0x0e, 0x2d, 0x28, 0x70, 0x46, - 0xa0, 0x3c, 0x2e, 0x08, 0x74, 0x5a, 0x55, 0xbb, 0x57, 0xb1, 0x4d, 0xf8, 0x31, 0xf8, 0xb1, 0xff, 0x9b, 0x8c, 0x7f, - 0x92, 0x66, 0x04, 0xbf, 0xc9, 0xd5, 0x0a, 0xfe, 0xfe, 0x24, 0xfb, 0x30, 0x2c, 0x9d, 0xf6, 0x87, 0x4d, 0xfb, 0x05, - 0xd2, 0x24, 0x8b, 0xf5, 0x80, 0x71, 0x5e, 0xf2, 0x63, 0x66, 0x71, 0xc6, 0xc4, 0xcc, 0xe0, 0xe0, 0x80, 0x0f, 0x68, - 0xa3, 0x3d, 0x84, 0x1b, 0x81, 0x42, 0xc9, 0x0f, 0x5c, 0x4d, 0xc3, 0xe0, 0xe8, 0x22, 0x40, 0xfd, 0x60, 0x0f, 0x56, - 0xb9, 0x27, 0x1a, 0xc4, 0xc2, 0x3a, 0x69, 0x28, 0x1a, 0xa7, 0x17, 0xa4, 0xd5, 0x0f, 0xa5, 0x21, 0xf2, 0x19, 0xc2, - 0x89, 0xa5, 0xa9, 0x2d, 0x9c, 0xa2, 0x06, 0x97, 0x0d, 0xf7, 0x9d, 0xa2, 0xc6, 0x54, 0x35, 0xc6, 0x28, 0x4e, 0xe0, - 0x6f, 0x98, 0x12, 0x42, 0x9a, 0x9d, 0xb2, 0xa2, 0x3b, 0x2c, 0x29, 0x8a, 0xc7, 0x4e, 0x3d, 0x3a, 0xd0, 0x9b, 0x43, - 0x34, 0x42, 0x3e, 0x60, 0xc3, 0xd5, 0x2a, 0x38, 0xef, 0x5f, 0x04, 0xa8, 0x11, 0x3a, 0xb4, 0x3b, 0x72, 0x78, 0x87, - 0x10, 0x96, 0xc3, 0xb5, 0xbd, 0x81, 0xba, 0x65, 0xb5, 0xdb, 0xa6, 0x65, 0xb5, 0xff, 0x3d, 0xb2, 0xc0, 0xd6, 0xa5, - 0xdc, 0x63, 0xf8, 0xdb, 0x39, 0x4c, 0xd5, 0xe1, 0xb6, 0x20, 0x2d, 0x5c, 0x10, 0xa7, 0xee, 0xa6, 0x44, 0x55, 0xf8, - 0x9f, 0x90, 0xaa, 0x38, 0x1e, 0x64, 0x78, 0x3a, 0x24, 0x92, 0x6a, 0xf9, 0xa5, 0xe7, 0x94, 0xe9, 0x2c, 0x23, 0xb7, - 0x6c, 0xe3, 0xfe, 0x37, 0x83, 0x3b, 0x99, 0x2b, 0x15, 0x25, 0x8b, 0xa2, 0x60, 0xb9, 0x7a, 0x25, 0x52, 0xcb, 0xd8, - 0xb1, 0x0c, 0x64, 0x2b, 0xb8, 0xd8, 0xc5, 0xc0, 0xd5, 0x75, 0xdc, 0x4e, 0x49, 0xb7, 0xb2, 0x17, 0x24, 0x35, 0x0c, - 0x97, 0xbe, 0xee, 0xed, 0x2d, 0xac, 0x28, 0x1d, 0x22, 0x9c, 0xda, 0x7b, 0xe0, 0x30, 0x8a, 0xa2, 0x45, 0x94, 0x40, - 0x36, 0x74, 0x20, 0xd1, 0x5a, 0xef, 0xab, 0x30, 0x27, 0x57, 0x2a, 0xca, 0xd9, 0x9d, 0xee, 0x36, 0x44, 0xd5, 0x21, - 0xee, 0xf6, 0xdb, 0x39, 0xed, 0x69, 0x02, 0x94, 0x47, 0xb9, 0x48, 0x19, 0x40, 0x08, 0xee, 0xfe, 0x6d, 0xd2, 0x94, - 0x4a, 0xff, 0x66, 0xab, 0x1a, 0xe0, 0xc0, 0x57, 0x79, 0x2f, 0x40, 0x4f, 0xac, 0x65, 0xe8, 0xb2, 0xb0, 0x51, 0x9e, - 0x23, 0xc4, 0xc7, 0xe1, 0x22, 0x82, 0x1b, 0x41, 0x8d, 0x49, 0x5c, 0xa2, 0xd5, 0x6a, 0xe1, 0xe3, 0xd6, 0xb4, 0x52, - 0x4c, 0x8f, 0xc9, 0x74, 0x50, 0x34, 0x1a, 0x5a, 0x79, 0x9d, 0x1a, 0xbc, 0x58, 0x20, 0x3c, 0x2e, 0xf7, 0x9a, 0x2b, - 0x37, 0x27, 0xf5, 0xae, 0xc2, 0x71, 0x5d, 0x09, 0xdc, 0xe0, 0x12, 0x69, 0xfd, 0xa2, 0x82, 0xd6, 0xf1, 0x84, 0x1c, - 0x85, 0x83, 0xa8, 0xff, 0x3f, 0x87, 0xa8, 0x1f, 0x46, 0x87, 0xe8, 0xc8, 0xd0, 0x92, 0x31, 0xea, 0x25, 0xa6, 0x8f, - 0xa5, 0xbe, 0xfd, 0x6c, 0x63, 0xad, 0x80, 0x8c, 0x05, 0xce, 0xe9, 0x8c, 0xc5, 0x13, 0xd8, 0xf5, 0x0e, 0x79, 0xe6, - 0x18, 0x90, 0x29, 0x9e, 0x58, 0xda, 0x12, 0x05, 0x7d, 0x41, 0xcb, 0xaf, 0x7e, 0xd0, 0xa7, 0xd5, 0xd7, 0xff, 0x0c, - 0xfa, 0x09, 0x8d, 0xaf, 0xf8, 0xda, 0x2a, 0xc9, 0x6b, 0x7d, 0x9c, 0xba, 0x3e, 0xd6, 0x66, 0x71, 0x3c, 0xe0, 0xa5, - 0x28, 0xdf, 0xd2, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0x94, 0x47, 0x8a, 0x4e, 0x00, 0xaa, 0xde, 0x22, 0xe4, - 0xbe, 0x6d, 0x80, 0x37, 0x65, 0xc0, 0x16, 0x87, 0xb4, 0x00, 0xcd, 0xc5, 0x45, 0x0b, 0x2d, 0x6b, 0x85, 0x2d, 0x67, - 0x55, 0xbf, 0x8b, 0x2f, 0x89, 0xf7, 0x18, 0xa8, 0xf2, 0xf9, 0xa2, 0x37, 0x6e, 0x34, 0x50, 0xee, 0xf0, 0x2b, 0x1d, - 0x8c, 0x87, 0xf8, 0x0e, 0x50, 0x08, 0xd7, 0x30, 0x0a, 0xd7, 0xe6, 0xd8, 0xb1, 0x73, 0x6c, 0x34, 0xc4, 0x1a, 0xf5, - 0xbc, 0xca, 0x0b, 0x5b, 0x79, 0xbd, 0x36, 0x90, 0xd9, 0xc4, 0xb8, 0x33, 0xa4, 0x53, 0xc0, 0x10, 0x8c, 0x10, 0xf2, - 0x8f, 0x40, 0x3b, 0x9b, 0x85, 0x46, 0xa1, 0xba, 0xde, 0xbd, 0x40, 0x51, 0xcd, 0xe9, 0x11, 0x02, 0x2c, 0xa0, 0x6a, - 0xa9, 0x46, 0x9e, 0x2a, 0x9c, 0x36, 0xda, 0x1a, 0xdd, 0x9b, 0xed, 0x5e, 0xbd, 0xb1, 0x87, 0x55, 0x63, 0x38, 0x6d, - 0x90, 0x69, 0xb5, 0xc3, 0xd7, 0xa2, 0xd1, 0x58, 0xd7, 0xef, 0x4b, 0xdd, 0x26, 0xae, 0xdd, 0x5f, 0x3c, 0xdd, 0x32, - 0xf1, 0x70, 0xa7, 0x6f, 0x75, 0xde, 0xca, 0x88, 0xe7, 0x39, 0x2b, 0xe0, 0x84, 0x25, 0x0a, 0xcb, 0xf5, 0xba, 0x3c, - 0xf5, 0x7f, 0x57, 0xc6, 0x66, 0x8c, 0x70, 0xa0, 0x43, 0x5a, 0x6a, 0xc3, 0x02, 0x17, 0x98, 0x6a, 0x2a, 0x42, 0x08, - 0xf9, 0xa0, 0x9c, 0x79, 0x8c, 0xd2, 0x24, 0x29, 0x21, 0xde, 0xd9, 0x1d, 0xe6, 0x84, 0x45, 0x37, 0x0f, 0xae, 0xc4, - 0x77, 0x45, 0xba, 0x81, 0x1c, 0xc6, 0xba, 0x58, 0x66, 0x09, 0x59, 0x46, 0xbe, 0x82, 0x9c, 0x53, 0x5e, 0xb0, 0x44, - 0x9a, 0x20, 0x3e, 0xe1, 0x05, 0xd3, 0x8c, 0xfb, 0x03, 0x27, 0x37, 0x26, 0x75, 0x4e, 0x33, 0xf1, 0xb5, 0x3f, 0x00, - 0xcd, 0x0c, 0x94, 0x43, 0x82, 0x6c, 0x15, 0xbb, 0x79, 0x70, 0xf9, 0x7a, 0x97, 0x0c, 0xbd, 0x5a, 0x59, 0xe9, 0x39, - 0x01, 0xd6, 0x07, 0x67, 0xd5, 0x50, 0x13, 0xfb, 0x23, 0x0e, 0x13, 0xcd, 0x44, 0x65, 0x21, 0x07, 0x64, 0xba, 0x79, - 0x70, 0xf9, 0x2e, 0xe4, 0x5a, 0x37, 0x85, 0xb0, 0x3f, 0xef, 0xb0, 0x20, 0x21, 0x25, 0x0c, 0x99, 0xc9, 0x97, 0x74, - 0xac, 0xf0, 0x4e, 0xf7, 0x98, 0xea, 0x4c, 0x10, 0x3b, 0x06, 0x72, 0x48, 0x12, 0x0b, 0x02, 0x92, 0x20, 0x9c, 0xd4, - 0xe4, 0x3a, 0xa2, 0xd7, 0x40, 0x77, 0x76, 0x0d, 0x8b, 0x11, 0x19, 0xf6, 0x10, 0xe1, 0x44, 0x77, 0xab, 0xd6, 0xe6, - 0x38, 0xc9, 0xe9, 0xa6, 0xa1, 0x5b, 0x25, 0xcf, 0xbe, 0x07, 0xc1, 0xcb, 0x7d, 0xbc, 0xb2, 0x6d, 0x97, 0x09, 0x4f, - 0x9c, 0x45, 0xda, 0xcd, 0x83, 0xcb, 0x5f, 0xad, 0x51, 0xda, 0x9c, 0x3a, 0xf2, 0xbf, 0x25, 0xa3, 0x5e, 0xfe, 0x1a, - 0x55, 0xb9, 0xba, 0xf0, 0xcd, 0x83, 0xcb, 0xdf, 0x77, 0x15, 0x83, 0xf4, 0xf5, 0xa2, 0x52, 0x12, 0xe8, 0xf1, 0x2d, - 0x59, 0x16, 0x2f, 0xed, 0x59, 0x11, 0xcb, 0x35, 0xd6, 0x27, 0x54, 0x9c, 0xaf, 0x4b, 0xdd, 0xca, 0x13, 0x2c, 0x88, - 0xbe, 0x4a, 0xaa, 0x2f, 0x9b, 0x45, 0x63, 0x2e, 0xf2, 0xeb, 0x44, 0xcc, 0xd9, 0x37, 0xee, 0x97, 0x9e, 0x2a, 0x14, - 0xf1, 0x19, 0x18, 0xe2, 0xe8, 0xb1, 0x4b, 0xbc, 0xdf, 0x42, 0xbd, 0x8d, 0xf3, 0x4c, 0x68, 0x44, 0x2d, 0xea, 0x87, - 0x0d, 0xa6, 0xa4, 0x85, 0x13, 0xd2, 0xc2, 0x19, 0xc9, 0x07, 0x2d, 0x73, 0x62, 0xf4, 0xb2, 0xb2, 0x69, 0x73, 0xee, - 0xc0, 0x76, 0xcf, 0xcc, 0xbe, 0x35, 0x87, 0xf2, 0xb4, 0x97, 0x69, 0xfd, 0xa5, 0x3e, 0xe8, 0xa7, 0x1a, 0x35, 0x9e, - 0xb0, 0xb0, 0xc0, 0x85, 0x6e, 0xf9, 0x9a, 0x8f, 0x32, 0xb0, 0x53, 0x81, 0x99, 0x61, 0x85, 0xe2, 0xb2, 0x6c, 0xdb, - 0x96, 0xcd, 0x22, 0xbd, 0x56, 0x05, 0xce, 0x22, 0x20, 0xe5, 0x38, 0xb3, 0x76, 0x3d, 0x72, 0xbb, 0xca, 0xe9, 0xc1, - 0x41, 0x68, 0x2b, 0xd1, 0xb0, 0x70, 0xf9, 0xd5, 0x0d, 0xe0, 0x7b, 0x43, 0x35, 0xa6, 0x48, 0x4f, 0xa0, 0xd1, 0x48, - 0x86, 0x6b, 0xba, 0x4f, 0x48, 0x98, 0xd5, 0xa1, 0xe8, 0x46, 0xaf, 0x99, 0xc1, 0x0d, 0x00, 0x34, 0x1a, 0xe5, 0x75, - 0xef, 0x06, 0xc4, 0x9e, 0x2a, 0x2c, 0xd6, 0x5f, 0xc3, 0xd2, 0x9a, 0xa8, 0xb5, 0x65, 0x87, 0xe5, 0x46, 0x81, 0xa4, - 0x8f, 0xbb, 0xd2, 0xcd, 0xc7, 0xdb, 0x1a, 0xba, 0xdc, 0x0b, 0x6b, 0x03, 0x81, 0xb5, 0xd5, 0x96, 0x2d, 0xe4, 0x48, - 0x5b, 0x07, 0xc5, 0xae, 0x10, 0x5c, 0x70, 0x41, 0xa1, 0xc6, 0xda, 0x62, 0xf9, 0x13, 0xb6, 0x6d, 0xce, 0x89, 0x73, - 0x64, 0xb5, 0x65, 0x7a, 0x18, 0x1a, 0x60, 0x9d, 0x12, 0x30, 0xcf, 0xc9, 0xcb, 0x6f, 0xa3, 0xfe, 0xa5, 0x87, 0xfa, - 0x8f, 0x09, 0xf3, 0xb6, 0x81, 0x59, 0x82, 0x48, 0x58, 0x05, 0x45, 0xee, 0xb2, 0xae, 0xe6, 0x04, 0xb4, 0x71, 0x75, - 0xa8, 0xe6, 0xfe, 0x15, 0xe5, 0x37, 0x28, 0x8b, 0xbf, 0x53, 0xb4, 0x3e, 0x13, 0xbb, 0xfb, 0xe4, 0xb0, 0xba, 0xa0, - 0x83, 0xae, 0x77, 0x29, 0x07, 0x7d, 0x52, 0x78, 0xf9, 0xfb, 0xf7, 0xef, 0x56, 0xaf, 0xe6, 0xdb, 0x3b, 0xd8, 0x33, - 0x2b, 0x85, 0x59, 0x7b, 0x1b, 0xb8, 0x6e, 0x64, 0x0a, 0xfd, 0x97, 0x77, 0xe2, 0x75, 0x2a, 0xb4, 0xb1, 0x19, 0xdd, - 0x71, 0x08, 0xa3, 0x6d, 0xb7, 0x75, 0x09, 0xe6, 0x35, 0x0b, 0x74, 0xc9, 0x18, 0xb7, 0xd2, 0xe2, 0x1b, 0x64, 0xe4, - 0x52, 0x17, 0x60, 0x79, 0xba, 0x3b, 0xfb, 0xf1, 0xda, 0xe2, 0x89, 0x19, 0x1a, 0x5a, 0x6a, 0x42, 0x68, 0xf0, 0x1e, - 0x30, 0xc7, 0x1c, 0x11, 0x00, 0xa2, 0x97, 0x1a, 0x52, 0x15, 0xc8, 0x82, 0xa0, 0x52, 0xe4, 0x3f, 0xdf, 0x27, 0xe4, - 0x65, 0xa5, 0xc8, 0x7c, 0x5b, 0x19, 0x73, 0x01, 0x62, 0xa0, 0x18, 0x2e, 0x12, 0xca, 0x04, 0x73, 0x19, 0xfa, 0x41, - 0xb9, 0xf2, 0x5a, 0xda, 0x8c, 0x2a, 0x6e, 0xdc, 0xbb, 0x29, 0xd5, 0x2a, 0x3e, 0x93, 0xef, 0x20, 0xb1, 0x91, 0xfb, - 0x00, 0x72, 0x19, 0xd5, 0x83, 0x84, 0xef, 0x77, 0xba, 0xb4, 0x6b, 0x77, 0xfd, 0x65, 0xd3, 0x22, 0x66, 0x63, 0x5d, - 0x22, 0x9e, 0x4b, 0x56, 0xa8, 0xc7, 0x6c, 0x2c, 0x0a, 0xb8, 0xff, 0x28, 0xc1, 0x82, 0xd6, 0x0f, 0x3c, 0x1d, 0xa0, - 0x9e, 0xa0, 0x77, 0xe9, 0xb0, 0x31, 0x43, 0xfd, 0xeb, 0x8b, 0xbe, 0x03, 0xbf, 0xd9, 0xac, 0xf5, 0xf2, 0xe0, 0xe0, - 0x2b, 0xab, 0x00, 0x65, 0x87, 0xa9, 0x87, 0xe1, 0x11, 0x2f, 0xc3, 0xe5, 0xd8, 0x9b, 0xe1, 0x07, 0x61, 0xa5, 0x32, - 0x70, 0x84, 0xc3, 0x27, 0x42, 0xcf, 0x89, 0x5a, 0x4f, 0x36, 0xe9, 0xbd, 0xd5, 0x66, 0x48, 0x5f, 0xac, 0x01, 0x72, - 0x0f, 0x72, 0xb9, 0x51, 0x32, 0xe5, 0x95, 0xad, 0x6d, 0x39, 0x88, 0x2b, 0x00, 0x57, 0x98, 0x83, 0x90, 0xe2, 0xa1, - 0x61, 0xbe, 0x53, 0x68, 0x79, 0x2e, 0x80, 0xfd, 0xc7, 0x79, 0x04, 0x22, 0x2d, 0xaa, 0x6d, 0x5c, 0x84, 0x70, 0xae, - 0x25, 0x1e, 0xcf, 0x38, 0xe1, 0xf2, 0xf9, 0x2e, 0x0d, 0xb5, 0x43, 0x6d, 0xa6, 0xcf, 0x20, 0x28, 0x21, 0x50, 0x59, - 0x21, 0xfa, 0x1a, 0x4a, 0xcb, 0xcd, 0x95, 0xf7, 0x70, 0xec, 0x76, 0x2f, 0xa7, 0xa1, 0xb9, 0xdb, 0x82, 0xe3, 0xa3, - 0x88, 0x16, 0x61, 0xad, 0xeb, 0x5e, 0xa1, 0xab, 0x61, 0x0b, 0x3a, 0xea, 0xc3, 0xa9, 0xd0, 0xf7, 0x84, 0x57, 0x15, - 0x49, 0xfd, 0x64, 0x2d, 0xa0, 0x1c, 0x31, 0xac, 0x4c, 0x53, 0xbc, 0xf9, 0x7f, 0xb2, 0xe6, 0x6b, 0xe5, 0x31, 0xc1, - 0xf4, 0x30, 0x6e, 0xcd, 0x2a, 0xb0, 0x35, 0xe0, 0xd8, 0xf2, 0x2f, 0xe1, 0x2d, 0xaa, 0x53, 0x8a, 0xeb, 0x4e, 0x3d, - 0x26, 0xe0, 0x2d, 0x58, 0xcf, 0x6c, 0x6e, 0xfd, 0xe7, 0xfa, 0x60, 0x94, 0x38, 0xaf, 0x11, 0x78, 0xa1, 0x09, 0x3c, - 0x02, 0xc6, 0xcd, 0x99, 0x96, 0xf7, 0xad, 0x11, 0x8d, 0x74, 0x27, 0x9e, 0xc5, 0x33, 0xc3, 0x72, 0x6f, 0x7d, 0x6c, - 0xac, 0x48, 0x2c, 0x09, 0xd8, 0x16, 0x61, 0x4b, 0xe4, 0x05, 0xc2, 0x79, 0xa3, 0xd1, 0xcb, 0xcf, 0x59, 0xa5, 0x55, - 0xa9, 0x86, 0x29, 0xe1, 0x96, 0x18, 0xf0, 0xbe, 0x76, 0xa2, 0xe6, 0x08, 0x97, 0x66, 0xee, 0x39, 0xa8, 0xef, 0x2f, - 0xdf, 0x86, 0x3e, 0x7d, 0xf3, 0xcb, 0x96, 0x17, 0xb1, 0x30, 0xa5, 0xb0, 0xba, 0xc3, 0x79, 0xf3, 0x7d, 0xb3, 0x11, - 0x18, 0xf7, 0x7e, 0x1b, 0x83, 0x8d, 0x1b, 0xea, 0x29, 0x43, 0x1a, 0xca, 0x4d, 0xd8, 0x43, 0x95, 0xbd, 0xa3, 0xdf, - 0x59, 0x4f, 0x55, 0xd2, 0xae, 0x22, 0xf9, 0x7a, 0x2d, 0x59, 0x65, 0x34, 0xb0, 0x61, 0xd8, 0xa9, 0x8f, 0x99, 0x6d, - 0x05, 0xfe, 0xd5, 0x9c, 0x28, 0xec, 0x21, 0xeb, 0x9b, 0x6f, 0x5d, 0xa7, 0x54, 0xc3, 0x84, 0xed, 0x6d, 0xcf, 0xc7, - 0x2b, 0xbe, 0xeb, 0x7c, 0xc4, 0xc2, 0x6e, 0x7d, 0x7d, 0x36, 0xb6, 0xff, 0x8d, 0xb3, 0xd1, 0xaa, 0xed, 0xdd, 0xf1, - 0x08, 0xdc, 0x49, 0xed, 0x78, 0xcc, 0xeb, 0xc7, 0xa3, 0xc0, 0xee, 0xf4, 0xbe, 0xe8, 0xac, 0x56, 0x72, 0xd0, 0x02, - 0xb5, 0x53, 0x10, 0xc0, 0xcf, 0xb6, 0xf9, 0xe9, 0x91, 0x64, 0xa3, 0x43, 0x0e, 0xcb, 0xf3, 0xbe, 0x8d, 0x22, 0x30, - 0xa0, 0x0e, 0xb5, 0xad, 0x97, 0x46, 0x6c, 0x8b, 0x43, 0x16, 0xcb, 0x89, 0x2c, 0xaf, 0xae, 0x60, 0xc4, 0xfa, 0xd8, - 0xb0, 0x02, 0x66, 0xb8, 0xd3, 0xaa, 0xd0, 0x89, 0x9f, 0xff, 0x9a, 0x39, 0xad, 0x1d, 0x31, 0x86, 0x93, 0xa8, 0x59, - 0x31, 0xd8, 0x11, 0x58, 0x86, 0x71, 0x5f, 0x4b, 0xa8, 0xd5, 0xa9, 0x8e, 0x6a, 0x47, 0x12, 0x6e, 0x81, 0xda, 0x6d, - 0x5f, 0x9f, 0x4b, 0xab, 0xd5, 0xce, 0x83, 0x05, 0x17, 0x1e, 0x6e, 0x3f, 0x27, 0xaa, 0x46, 0x52, 0x28, 0xb1, 0x12, - 0x14, 0xce, 0x34, 0xaa, 0x2a, 0x22, 0x06, 0xad, 0x21, 0xf0, 0xa4, 0xbd, 0xe4, 0x5c, 0x54, 0x42, 0x72, 0xd2, 0x68, - 0xa0, 0xac, 0xec, 0x98, 0x0e, 0x64, 0x23, 0x19, 0x62, 0x86, 0x13, 0x23, 0xb0, 0xc0, 0xe9, 0x15, 0x66, 0x55, 0xd7, - 0x83, 0x64, 0x88, 0x70, 0xb1, 0x5a, 0x85, 0x66, 0x68, 0x19, 0x5a, 0xad, 0x32, 0x7f, 0x68, 0x3a, 0x1f, 0x2a, 0xbe, - 0xec, 0x2b, 0xf2, 0x52, 0x9f, 0x87, 0x2f, 0x61, 0x90, 0x0d, 0x12, 0x66, 0x56, 0x25, 0x98, 0x81, 0xe6, 0xaa, 0x21, - 0x06, 0x49, 0xa3, 0x3d, 0xf4, 0x68, 0xd8, 0x20, 0x19, 0x92, 0x6c, 0x0d, 0x96, 0xb3, 0xb9, 0x3d, 0x30, 0xff, 0x82, - 0x83, 0xed, 0x2f, 0x7d, 0xce, 0x98, 0x06, 0xfd, 0x35, 0xd9, 0x54, 0x19, 0x94, 0x78, 0x65, 0x17, 0xd7, 0x95, 0xab, - 0x19, 0x58, 0x94, 0x85, 0xb0, 0xbd, 0x66, 0xee, 0x83, 0xf0, 0x5f, 0x62, 0xbb, 0xa0, 0xa5, 0x11, 0xf7, 0x06, 0xe2, - 0x3b, 0xdb, 0xed, 0x28, 0x8a, 0x68, 0x31, 0xd1, 0x57, 0x22, 0x8e, 0x12, 0xeb, 0x3d, 0x70, 0x6c, 0xc7, 0xe9, 0xf5, - 0x3c, 0x28, 0x3b, 0x1b, 0x12, 0x33, 0x7e, 0xc7, 0xec, 0x38, 0xc7, 0x95, 0x82, 0xee, 0xd6, 0x45, 0x98, 0xc1, 0xd0, - 0xff, 0xe5, 0xc1, 0x9c, 0xd8, 0xc1, 0x18, 0x34, 0xd9, 0x80, 0xdb, 0x37, 0xe0, 0x51, 0xd0, 0x0d, 0xb8, 0x7d, 0x1b, - 0xbe, 0x0e, 0x5a, 0xc9, 0x37, 0x07, 0xe8, 0x91, 0x09, 0x33, 0xd2, 0x2a, 0xc1, 0x1b, 0x66, 0x77, 0x93, 0x23, 0x33, - 0x64, 0x15, 0x0e, 0x57, 0x45, 0x42, 0xb9, 0xb1, 0x17, 0x2a, 0x26, 0xd5, 0xe3, 0xfe, 0x65, 0xfc, 0x12, 0xf9, 0x4a, - 0x83, 0xba, 0x71, 0x0c, 0x60, 0x95, 0xd5, 0xd6, 0xbf, 0x3c, 0x38, 0x00, 0xf3, 0x68, 0x60, 0xed, 0xa2, 0x84, 0xce, - 0xd5, 0xa2, 0x00, 0xfe, 0x2a, 0x77, 0xbf, 0x21, 0x19, 0xdc, 0x4e, 0x74, 0x1a, 0xfc, 0x80, 0x84, 0x39, 0x95, 0x92, - 0x7f, 0x35, 0x69, 0xf6, 0x37, 0x2e, 0x88, 0xc3, 0xe8, 0xdc, 0x70, 0x8a, 0x02, 0xf5, 0x84, 0x45, 0xd7, 0x3a, 0xe4, - 0x9e, 0x7e, 0x65, 0xb9, 0x7a, 0xc9, 0xa5, 0x62, 0x39, 0x00, 0xa0, 0x42, 0x3c, 0x98, 0x52, 0x8e, 0x60, 0xeb, 0xd6, - 0x6a, 0xd1, 0x34, 0xfd, 0x6e, 0x15, 0x55, 0x67, 0x8b, 0xa6, 0x34, 0x4f, 0x33, 0xd3, 0x89, 0x6f, 0x33, 0xe9, 0xec, - 0x44, 0xcb, 0x92, 0xbe, 0xc5, 0x4e, 0xc5, 0x7e, 0x68, 0x5a, 0x1f, 0x4a, 0xe2, 0xce, 0x05, 0x77, 0x96, 0x7e, 0x97, - 0x8f, 0x81, 0x2b, 0xf5, 0x6f, 0xac, 0x82, 0x3f, 0x13, 0xac, 0x3c, 0xf2, 0x1a, 0xd5, 0xc7, 0xe9, 0x50, 0x27, 0xdb, - 0x52, 0x2e, 0x94, 0x46, 0x61, 0x1b, 0x27, 0x85, 0xc6, 0x94, 0xd3, 0x6f, 0x4b, 0x5c, 0xbf, 0xba, 0x63, 0xc4, 0x1d, - 0x1d, 0xf2, 0xdf, 0xa5, 0xd2, 0x68, 0x59, 0x22, 0x18, 0x72, 0x3b, 0xf2, 0x67, 0x09, 0x57, 0xb1, 0x19, 0x57, 0xcf, - 0xd5, 0x2c, 0xdb, 0xf0, 0xc4, 0xe9, 0xfd, 0x5c, 0x5e, 0x23, 0xff, 0x2c, 0xc3, 0x5b, 0x86, 0x9f, 0x30, 0xb8, 0x37, - 0x7e, 0xc6, 0xbd, 0x2a, 0xdb, 0xf7, 0xc5, 0xcf, 0xbc, 0xfb, 0xe2, 0x67, 0x3c, 0xde, 0x2e, 0xea, 0xdd, 0x13, 0x77, - 0xa2, 0xb3, 0xa8, 0x15, 0x38, 0x3e, 0x6a, 0x4a, 0x2b, 0xff, 0x4a, 0xb3, 0x35, 0x70, 0x65, 0x13, 0x07, 0xc6, 0x79, - 0x75, 0x11, 0x8a, 0x59, 0x73, 0x46, 0xc3, 0xe1, 0x7f, 0x6b, 0x9d, 0xec, 0xc9, 0x23, 0x8c, 0x14, 0xf2, 0x86, 0x16, - 0xea, 0x01, 0x6c, 0xb8, 0x62, 0xcb, 0x07, 0x90, 0x12, 0x50, 0xb6, 0xfd, 0x7b, 0x5d, 0x54, 0x8e, 0x07, 0xfd, 0xdc, - 0x38, 0x1f, 0xf9, 0xed, 0x93, 0xa2, 0xe4, 0xea, 0xea, 0x42, 0xc8, 0x9d, 0xd6, 0x12, 0x20, 0x4c, 0x9d, 0x6b, 0x1e, - 0xb3, 0x34, 0x99, 0xc5, 0xcb, 0x75, 0xa9, 0x3a, 0x28, 0x0c, 0x57, 0xc7, 0x11, 0x2e, 0xd6, 0xfa, 0x06, 0xfd, 0x1f, - 0x8e, 0xff, 0xe2, 0x96, 0x46, 0x7e, 0x2a, 0x29, 0xd0, 0xe3, 0xdd, 0xbe, 0x36, 0x3b, 0x48, 0xa4, 0x99, 0x43, 0x69, - 0x29, 0x00, 0x58, 0xad, 0xf1, 0x75, 0xed, 0x70, 0xea, 0x89, 0xb0, 0xb3, 0xf9, 0xa6, 0x21, 0x2c, 0x66, 0xa5, 0x05, - 0x8f, 0xee, 0x66, 0x87, 0xe5, 0xa8, 0x93, 0xc5, 0x55, 0xb9, 0xc7, 0x6a, 0xfd, 0xa2, 0x6f, 0x80, 0xb2, 0x32, 0x44, - 0x5b, 0xad, 0xc2, 0x3a, 0xbc, 0x89, 0xf4, 0xae, 0x41, 0x10, 0x96, 0x9e, 0x01, 0x47, 0x8d, 0xf1, 0x36, 0x75, 0x42, - 0xb4, 0x69, 0xbf, 0xe4, 0x58, 0xf7, 0xda, 0x38, 0x7c, 0x45, 0x83, 0xa9, 0xee, 0x6b, 0x1e, 0xb0, 0x99, 0x5d, 0xd9, - 0x91, 0x07, 0xa1, 0x29, 0x75, 0xc6, 0xb9, 0x95, 0x15, 0xed, 0x0e, 0xf8, 0xa2, 0xef, 0x98, 0xe7, 0x5a, 0xd0, 0x6d, - 0xe7, 0x7b, 0xb6, 0x4d, 0x4f, 0xc4, 0xb7, 0x6c, 0x9b, 0x6a, 0x9c, 0xf0, 0x7e, 0x0b, 0x7d, 0xdf, 0x10, 0xd6, 0xf4, - 0xb5, 0xbb, 0xc8, 0xff, 0x42, 0x77, 0x6d, 0x40, 0x4f, 0x03, 0x66, 0x47, 0x63, 0x3e, 0xa8, 0xf5, 0xfa, 0x53, 0xe9, - 0xbf, 0xa0, 0x6d, 0x85, 0x3e, 0x99, 0x5d, 0x60, 0xc5, 0x4a, 0xed, 0x10, 0x1c, 0xfe, 0xc3, 0xc9, 0x24, 0x13, 0x23, - 0x9a, 0xbd, 0x83, 0x1e, 0xab, 0xdc, 0xe7, 0xf7, 0x69, 0x41, 0x15, 0xb3, 0xb4, 0xa6, 0x1a, 0xc5, 0x3f, 0xdc, 0x1b, - 0xc6, 0x3f, 0xdc, 0x50, 0xee, 0xaa, 0x05, 0xbc, 0x7c, 0x59, 0x36, 0x11, 0x7f, 0x5a, 0x97, 0xfe, 0x56, 0xf9, 0xee, - 0x5e, 0x36, 0x49, 0x9a, 0xca, 0xcb, 0xd9, 0xe6, 0xe1, 0x66, 0x53, 0x61, 0xf8, 0xd7, 0x37, 0x06, 0xbb, 0x4d, 0xe6, - 0xfe, 0xf2, 0xc8, 0xdc, 0x5f, 0x3c, 0xfe, 0x6e, 0x2d, 0x8f, 0xe2, 0x1d, 0x47, 0xc7, 0xda, 0x32, 0xc6, 0x8c, 0xfa, - 0xad, 0x02, 0x83, 0x06, 0x45, 0x2e, 0x3c, 0x6f, 0x87, 0xea, 0xf4, 0x72, 0xf6, 0x47, 0x61, 0xb2, 0x90, 0x4a, 0xcc, - 0x6c, 0xa3, 0xd2, 0xfa, 0x38, 0xe9, 0x4c, 0x50, 0x60, 0xeb, 0x3b, 0xfc, 0xb8, 0xee, 0x46, 0xb6, 0xfc, 0xc2, 0xf3, - 0x34, 0xce, 0xb1, 0x3d, 0x5b, 0x64, 0x2c, 0xd6, 0xc4, 0x99, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0xcf, 0xb9, 0x9c, 0xb2, - 0x22, 0x2c, 0xd0, 0xf2, 0x5b, 0x9d, 0x15, 0x70, 0x9b, 0x63, 0x3a, 0xc3, 0x69, 0x69, 0x39, 0xa0, 0x22, 0x68, 0x0d, - 0x74, 0x46, 0x33, 0xa6, 0xa6, 0x22, 0x05, 0xc3, 0x97, 0x28, 0x2d, 0xdd, 0xa9, 0x0e, 0x0e, 0xf6, 0xc3, 0x40, 0xeb, - 0x2f, 0xc0, 0x07, 0xdd, 0xcf, 0x41, 0xfd, 0x25, 0x38, 0x06, 0x55, 0x5d, 0x33, 0xb4, 0x64, 0x9b, 0x3e, 0x34, 0x2a, - 0xfa, 0xc2, 0xee, 0x31, 0x47, 0xeb, 0x75, 0x6c, 0x46, 0x1d, 0x8c, 0x39, 0xcb, 0xd2, 0x00, 0x7f, 0x61, 0xf7, 0x71, - 0xe9, 0xb6, 0xae, 0xbd, 0xac, 0xf5, 0x22, 0x06, 0xe2, 0x36, 0x0f, 0x70, 0xd5, 0x49, 0xbc, 0x5c, 0x63, 0x51, 0xf0, - 0x09, 0xe0, 0xe8, 0x2f, 0xec, 0x3e, 0xb6, 0xed, 0x79, 0xae, 0x82, 0x68, 0xe9, 0x40, 0x1f, 0x79, 0xc9, 0xfe, 0x32, - 0x58, 0x81, 0x63, 0xa0, 0xeb, 0x0e, 0x49, 0xad, 0x5c, 0x25, 0x42, 0x22, 0xb4, 0xfe, 0x77, 0xa7, 0x82, 0x17, 0xfe, - 0x39, 0xa7, 0x6a, 0x16, 0xb7, 0x1b, 0x95, 0x18, 0x54, 0xa8, 0x2c, 0x48, 0x3e, 0x86, 0xdc, 0xed, 0x3e, 0xeb, 0xfd, - 0xe0, 0xe9, 0xcc, 0x16, 0xd4, 0x36, 0x1a, 0xa7, 0xfa, 0x17, 0xaa, 0xee, 0xa0, 0x66, 0xaa, 0xaa, 0xb8, 0xf7, 0x31, - 0x04, 0xc0, 0x83, 0xb5, 0x0c, 0xd5, 0x0e, 0xa1, 0x6b, 0x67, 0xa6, 0x3a, 0xa6, 0x24, 0x5c, 0xba, 0x39, 0xc4, 0xdc, - 0x07, 0xa3, 0x5a, 0x03, 0x1a, 0x5a, 0x04, 0x33, 0x96, 0x87, 0x7c, 0x1c, 0xca, 0xad, 0x33, 0x54, 0xe8, 0x33, 0x34, - 0xf2, 0x40, 0xfe, 0x8d, 0x33, 0x93, 0x69, 0x68, 0x68, 0xde, 0x52, 0x1f, 0x80, 0x76, 0x75, 0x2d, 0x0e, 0xf9, 0x2b, - 0x5a, 0x3a, 0xef, 0x99, 0x45, 0x17, 0xb5, 0x61, 0x85, 0xba, 0x1d, 0xb4, 0x8e, 0x61, 0x4a, 0xcc, 0x14, 0x58, 0x3b, - 0xbd, 0x0f, 0x77, 0x76, 0xb5, 0x61, 0x11, 0xb9, 0x69, 0x11, 0x07, 0x93, 0x90, 0xa2, 0x25, 0x0f, 0x29, 0x16, 0x60, - 0x07, 0x59, 0xac, 0xcb, 0xf1, 0x33, 0x7f, 0x39, 0x6a, 0x56, 0xd2, 0xbb, 0x1d, 0x0c, 0x81, 0xcb, 0x57, 0x60, 0x1b, - 0x8a, 0xb9, 0x23, 0x2c, 0x3c, 0xd4, 0x9e, 0x7e, 0xde, 0xba, 0xcd, 0xcd, 0x82, 0xb8, 0x15, 0x18, 0xd3, 0x70, 0xe9, - 0xcd, 0xc2, 0x77, 0x2a, 0xb7, 0x0e, 0x87, 0xf6, 0x9a, 0xb0, 0x32, 0x5e, 0x0d, 0x73, 0xb2, 0x71, 0xf4, 0x7c, 0xdf, - 0xc6, 0xf3, 0xef, 0x05, 0x2b, 0xee, 0xaf, 0x19, 0xd8, 0x58, 0x0b, 0x70, 0x37, 0xae, 0x96, 0xa1, 0x32, 0x90, 0xef, - 0x0b, 0xcd, 0xba, 0xac, 0xf1, 0x77, 0xa3, 0x62, 0xac, 0xf5, 0x3d, 0xa5, 0xa7, 0xad, 0x31, 0xdb, 0x85, 0x7d, 0xd3, - 0x75, 0x93, 0xf5, 0xb4, 0x22, 0xae, 0x82, 0xb4, 0xbd, 0x5b, 0xc0, 0x85, 0xef, 0x0f, 0x3b, 0xc8, 0x87, 0x9b, 0xaa, - 0x1b, 0x48, 0x82, 0x6b, 0x3f, 0xf1, 0xed, 0xa9, 0xee, 0xb2, 0xd6, 0xfd, 0xf6, 0x54, 0x6b, 0x97, 0x85, 0xda, 0x90, - 0x08, 0xdb, 0x7e, 0x4a, 0xff, 0x69, 0xb9, 0x5e, 0xa3, 0x35, 0x0c, 0xef, 0x3d, 0xef, 0x85, 0xe1, 0x7b, 0x67, 0xa1, - 0x18, 0xc1, 0x45, 0xee, 0x75, 0x26, 0x1c, 0x21, 0xaf, 0x46, 0xf0, 0x9e, 0x6f, 0x0d, 0xe1, 0x3d, 0xf7, 0x9c, 0x5e, - 0x41, 0x6a, 0x9a, 0xe4, 0x2c, 0x75, 0xf4, 0x13, 0x19, 0x24, 0xd4, 0x7c, 0xdc, 0x6b, 0x4e, 0xb8, 0xfa, 0x1c, 0x03, - 0xff, 0x85, 0x47, 0x0b, 0xa5, 0x44, 0x8e, 0x79, 0x3e, 0x5f, 0x28, 0x2c, 0xf5, 0xe8, 0x97, 0x63, 0x91, 0xab, 0xe6, - 0x98, 0xce, 0x78, 0x76, 0x1f, 0x2f, 0x78, 0x73, 0x26, 0x72, 0x21, 0xe7, 0x34, 0x61, 0x58, 0xde, 0x4b, 0xc5, 0x66, - 0xcd, 0x05, 0xc7, 0xcf, 0x59, 0xf6, 0x95, 0x29, 0x9e, 0x50, 0xfc, 0x56, 0x8c, 0x84, 0x12, 0xf8, 0xf5, 0xdd, 0xfd, - 0x84, 0xe5, 0xf8, 0xf7, 0xd1, 0x22, 0x57, 0x0b, 0x2c, 0x69, 0x2e, 0x9b, 0x92, 0x15, 0x7c, 0xdc, 0x6b, 0x36, 0xe7, - 0x05, 0x9f, 0xd1, 0xe2, 0xbe, 0x99, 0x88, 0x4c, 0x14, 0xf1, 0x7f, 0xb5, 0x8e, 0xe9, 0xa3, 0xf1, 0x49, 0x4f, 0x15, - 0x34, 0x97, 0x1c, 0x16, 0x26, 0xa6, 0x59, 0xb6, 0x77, 0xdc, 0x6d, 0xcd, 0xe4, 0xbe, 0xb9, 0xf0, 0xa3, 0xb9, 0x5a, - 0x7f, 0xc6, 0x1f, 0x04, 0x8c, 0x32, 0x1a, 0xa9, 0xdc, 0x0e, 0x72, 0x99, 0x2c, 0x0a, 0x29, 0x8a, 0x78, 0x2e, 0x78, - 0xae, 0x58, 0xd1, 0x1b, 0x89, 0x22, 0x65, 0x45, 0xb3, 0xa0, 0x29, 0x5f, 0xc8, 0xf8, 0x64, 0x7e, 0xd7, 0xab, 0xf7, - 0x60, 0xf2, 0xe3, 0x5c, 0xe4, 0xac, 0x07, 0xfc, 0xc6, 0xa4, 0x10, 0x8b, 0x3c, 0xb5, 0xc3, 0x58, 0xe4, 0x92, 0xa9, - 0xde, 0x9c, 0xa6, 0x60, 0x07, 0x1c, 0x9f, 0xcd, 0xef, 0x7a, 0x7a, 0xd6, 0xb7, 0x8c, 0x4f, 0xa6, 0x2a, 0xee, 0xb6, - 0x5a, 0xe6, 0x5b, 0xf2, 0x7f, 0x58, 0xdc, 0xee, 0x44, 0x9d, 0xee, 0xfc, 0x0e, 0x38, 0x78, 0xc5, 0x8a, 0x26, 0xc0, - 0x02, 0x2a, 0xb5, 0xa3, 0xd6, 0xa3, 0xe3, 0x87, 0x90, 0x01, 0x36, 0x0e, 0x4d, 0x3d, 0x21, 0x30, 0x76, 0x8f, 0x17, - 0xf3, 0x39, 0x2b, 0xc0, 0x8b, 0xbe, 0x37, 0xa3, 0xc5, 0x84, 0xe7, 0xcd, 0x42, 0x37, 0xda, 0x3c, 0x9b, 0xdf, 0xad, - 0x61, 0x3e, 0xb1, 0x31, 0x5b, 0xb5, 0xd3, 0xb2, 0x5f, 0x4b, 0x6f, 0x88, 0x3a, 0x26, 0x4d, 0x5c, 0x4c, 0x46, 0x34, - 0x6c, 0x77, 0x1e, 0x62, 0xf7, 0xbf, 0xa8, 0x83, 0x3c, 0xb0, 0x35, 0xd3, 0x45, 0xa1, 0x6f, 0x51, 0xe3, 0xb6, 0x34, - 0xcd, 0x4e, 0xc5, 0x57, 0x56, 0xb8, 0x56, 0xf5, 0xc7, 0x72, 0x6b, 0xde, 0xff, 0x49, 0xa3, 0x9f, 0xf1, 0x84, 0xc2, - 0x1a, 0x68, 0xe4, 0x18, 0x68, 0x79, 0x10, 0x66, 0x3a, 0x5c, 0xde, 0xf2, 0x54, 0x4d, 0xe3, 0x76, 0xab, 0xf5, 0x43, - 0xb5, 0x62, 0xbd, 0xa9, 0x01, 0x5d, 0xbb, 0x60, 0xb3, 0xda, 0x3a, 0xce, 0x68, 0x89, 0x6d, 0xcb, 0xb9, 0xb0, 0x4b, - 0x5e, 0xb0, 0x4c, 0x47, 0x93, 0x59, 0x5b, 0x94, 0xdb, 0x1a, 0x27, 0xcf, 0xa7, 0xac, 0xe0, 0xaa, 0x57, 0xff, 0xaa, - 0x3a, 0xde, 0x5e, 0xfd, 0xb5, 0x91, 0x43, 0x97, 0xa6, 0x86, 0xbd, 0xf4, 0xbc, 0x82, 0x8f, 0xed, 0xd5, 0xff, 0x4a, - 0x8b, 0x70, 0x03, 0x31, 0xb1, 0x5f, 0x03, 0xad, 0xbd, 0x39, 0x17, 0x60, 0x92, 0x39, 0xc4, 0xdf, 0x80, 0x42, 0x42, - 0xb3, 0x24, 0x84, 0x11, 0xed, 0x35, 0xf7, 0x8e, 0x0b, 0x36, 0x43, 0x0e, 0x10, 0xd1, 0xc3, 0x6e, 0xc1, 0x66, 0xeb, - 0x48, 0x57, 0x5f, 0x6a, 0x14, 0xa1, 0x19, 0x9f, 0xe4, 0x71, 0xc2, 0x00, 0x7d, 0xd7, 0x11, 0xcb, 0x15, 0x57, 0xf7, - 0xcd, 0x42, 0xdc, 0x2e, 0x53, 0x2e, 0xe7, 0x19, 0xbd, 0x8f, 0xc7, 0x19, 0xbb, 0xeb, 0xe9, 0x52, 0x4d, 0xae, 0xd8, - 0x4c, 0xda, 0xb2, 0x3d, 0x48, 0x6f, 0xa6, 0xc6, 0x6c, 0x02, 0xa0, 0x27, 0x6e, 0x37, 0xf7, 0x4f, 0x74, 0x2c, 0xf7, - 0x18, 0x95, 0xac, 0x29, 0x16, 0x6a, 0xaf, 0x25, 0x7b, 0x33, 0x9e, 0x37, 0xed, 0x40, 0x4e, 0x5a, 0xf3, 0xbb, 0xde, - 0x36, 0xe4, 0xbd, 0xfe, 0x23, 0x76, 0x37, 0xa7, 0x79, 0xca, 0xd2, 0xa5, 0x57, 0xad, 0x03, 0xf5, 0xfc, 0x52, 0x71, - 0xae, 0xa6, 0x4d, 0x6d, 0xeb, 0x15, 0x76, 0x72, 0xf4, 0x0d, 0xd4, 0x7a, 0xd4, 0xc2, 0xe6, 0xff, 0xa3, 0x36, 0xf2, - 0x2b, 0xef, 0x41, 0xd8, 0x25, 0x3e, 0xbe, 0x6f, 0xc2, 0xdf, 0x25, 0xf8, 0x16, 0xf1, 0x84, 0x66, 0x16, 0x22, 0x33, - 0x9e, 0xa6, 0x59, 0x6d, 0x44, 0x17, 0x5e, 0x67, 0x6d, 0xb4, 0x84, 0xf9, 0xc7, 0xad, 0xbd, 0xd6, 0x9e, 0x9e, 0x8b, - 0xdd, 0xe6, 0x27, 0x27, 0x0f, 0x8f, 0x1f, 0xb1, 0x5e, 0xc6, 0x73, 0x56, 0x9b, 0xea, 0x77, 0x41, 0xed, 0x37, 0xdc, - 0xb1, 0x0d, 0xb7, 0xf7, 0xda, 0x7b, 0x27, 0xad, 0x1f, 0xdc, 0x6e, 0xcd, 0xd8, 0x58, 0xc5, 0xed, 0xd3, 0xf9, 0x5d, - 0x7d, 0xfb, 0x9e, 0xb9, 0xa6, 0x6f, 0x0b, 0x3a, 0x8f, 0x73, 0x01, 0x7f, 0x7a, 0xb0, 0xc9, 0xc6, 0x99, 0xb8, 0x8d, - 0xa7, 0x3c, 0x4d, 0x59, 0x6e, 0x0a, 0x94, 0x89, 0x2c, 0xcb, 0xf8, 0x5c, 0x72, 0xb3, 0x1a, 0x16, 0x77, 0xbb, 0x1b, - 0x50, 0xf5, 0x07, 0x74, 0xec, 0x0d, 0xa8, 0x5b, 0x0d, 0xa8, 0xea, 0xdf, 0x1f, 0x61, 0x67, 0x63, 0xae, 0xba, 0x54, - 0xaf, 0x86, 0x49, 0x7f, 0x2d, 0xa4, 0x02, 0x98, 0x97, 0x46, 0x1a, 0x40, 0xc5, 0x9b, 0x23, 0xa6, 0x6e, 0x19, 0xcb, - 0xbf, 0x3d, 0x88, 0x8b, 0x58, 0xe4, 0xd9, 0xbd, 0xf9, 0x5c, 0xfa, 0x5d, 0xd2, 0x85, 0x12, 0xeb, 0x68, 0xc4, 0x73, - 0x5a, 0xdc, 0xdf, 0x48, 0x96, 0x4b, 0x51, 0xdc, 0x88, 0xf1, 0x78, 0xf9, 0x2d, 0xd2, 0xf2, 0x10, 0xad, 0x23, 0xc9, - 0xf3, 0x49, 0xc6, 0x0c, 0x51, 0xd2, 0x88, 0x60, 0x89, 0xb9, 0x69, 0x57, 0x37, 0x59, 0x1b, 0xb4, 0xbf, 0xf3, 0x74, - 0xbb, 0xc3, 0x38, 0x6e, 0xde, 0xb2, 0xd1, 0x17, 0xae, 0x0c, 0x9e, 0x35, 0xe5, 0x2d, 0x78, 0xbc, 0xe8, 0x65, 0x98, - 0xb3, 0x62, 0xe9, 0x68, 0x78, 0xcb, 0xa3, 0x3a, 0x51, 0x92, 0xf1, 0x19, 0x55, 0xcc, 0xa3, 0x54, 0x65, 0x27, 0x93, - 0x82, 0xa7, 0xdb, 0x38, 0xd2, 0x83, 0xe4, 0xa6, 0x33, 0xa8, 0x82, 0x9e, 0x16, 0xb3, 0x5c, 0xc6, 0x05, 0x9b, 0x33, - 0xaa, 0xc2, 0x63, 0xdc, 0x1e, 0x17, 0xa8, 0x37, 0xa1, 0xf3, 0x18, 0xf0, 0xc2, 0x75, 0xd9, 0x86, 0x25, 0xd8, 0xde, - 0xae, 0xeb, 0xcf, 0xf8, 0x8b, 0xd4, 0x87, 0x97, 0xa2, 0xa3, 0x26, 0x84, 0x1f, 0x63, 0x45, 0xb9, 0xc5, 0x79, 0xae, - 0x11, 0x56, 0xaf, 0xcf, 0xe6, 0x26, 0xf5, 0x8f, 0xa0, 0x93, 0x56, 0xcb, 0xf5, 0xd3, 0x34, 0x75, 0xe2, 0x76, 0xd4, - 0x65, 0xb3, 0x5d, 0xe4, 0xa1, 0x4e, 0x0b, 0xdb, 0x9d, 0xf9, 0xdd, 0x9e, 0xfe, 0xa7, 0xb5, 0xd7, 0xda, 0xa6, 0x7d, - 0xdb, 0xcb, 0x74, 0x8c, 0x1c, 0x62, 0x29, 0x31, 0x8f, 0xdb, 0x6c, 0xd6, 0x5b, 0x48, 0x38, 0xe7, 0x34, 0x69, 0xd6, - 0xe7, 0xe7, 0x5a, 0xcf, 0x04, 0xd0, 0x88, 0xf2, 0x1c, 0x8e, 0x15, 0x73, 0xb4, 0x42, 0x1f, 0x52, 0x80, 0x1d, 0xf8, - 0xce, 0x46, 0xeb, 0xc3, 0x6a, 0xed, 0x55, 0x03, 0x83, 0x7f, 0xd6, 0x9f, 0x2b, 0xc6, 0xf4, 0x05, 0xf3, 0x04, 0x03, - 0xde, 0x88, 0xba, 0xab, 0x96, 0x15, 0x06, 0x52, 0x55, 0xc9, 0x28, 0xda, 0x95, 0x62, 0x46, 0xef, 0x8c, 0x4f, 0xc5, - 0x8c, 0xe7, 0x60, 0xb1, 0x85, 0xb0, 0xf2, 0x6c, 0xdb, 0xa7, 0x7e, 0x43, 0xa9, 0x0a, 0xa1, 0xe1, 0xc3, 0x4e, 0xd4, - 0xed, 0x22, 0xdc, 0xc2, 0x9d, 0x6e, 0xd7, 0x13, 0x46, 0xc6, 0x6a, 0x57, 0xd1, 0x5d, 0x25, 0xf3, 0x1d, 0x25, 0x8f, - 0x74, 0xa3, 0x47, 0xed, 0x56, 0x0b, 0x6b, 0xbf, 0xf1, 0xb2, 0x30, 0xcb, 0x77, 0x34, 0xdb, 0x6e, 0xb5, 0xa0, 0x59, - 0xf8, 0x63, 0xe7, 0xf5, 0x0b, 0x59, 0xb6, 0xe2, 0x16, 0x6e, 0xc7, 0x6d, 0xdc, 0x89, 0x3b, 0xf8, 0x38, 0x3e, 0xc6, - 0x27, 0xf1, 0x09, 0xee, 0xc6, 0x5d, 0x7c, 0x1a, 0x9f, 0xe2, 0x87, 0xf1, 0x43, 0x7c, 0x16, 0x9f, 0xe1, 0x47, 0xf1, - 0x23, 0x7c, 0x19, 0xb7, 0x5b, 0xf8, 0x71, 0xdc, 0x6e, 0xe3, 0xab, 0xb8, 0xdd, 0xc1, 0x4f, 0xe2, 0xf6, 0x31, 0x7e, - 0x1a, 0xb7, 0x4f, 0xf0, 0xb3, 0xb8, 0xdd, 0xc5, 0x14, 0x72, 0x47, 0x90, 0x9b, 0x40, 0x6e, 0x0a, 0xb9, 0x0c, 0x72, - 0xc7, 0x71, 0xbb, 0xbb, 0xc6, 0xd2, 0xc4, 0x9a, 0x08, 0x5a, 0xed, 0xce, 0xf1, 0x49, 0xf7, 0xf4, 0xe1, 0xd9, 0xa3, - 0xcb, 0xc7, 0x57, 0x4f, 0x9e, 0x3e, 0x0b, 0x86, 0x78, 0xa4, 0x5d, 0x3e, 0xa4, 0x1c, 0xf0, 0x83, 0x76, 0x77, 0x88, - 0x6f, 0xdc, 0x67, 0xc8, 0x0f, 0x3a, 0x27, 0x2d, 0x74, 0x71, 0x71, 0x32, 0x6c, 0x94, 0xb9, 0xef, 0xb5, 0xa7, 0x49, - 0x95, 0x45, 0x08, 0x09, 0x21, 0x07, 0xe1, 0x7b, 0x5d, 0xef, 0x3d, 0x0b, 0x79, 0x54, 0xa0, 0x83, 0x03, 0xfd, 0x63, - 0xe2, 0x7e, 0x8c, 0xdc, 0x0f, 0xea, 0x2d, 0xd2, 0x1d, 0x0d, 0xad, 0xab, 0xb1, 0x2a, 0x0d, 0xfd, 0x4b, 0x1b, 0x9a, - 0x3d, 0x6e, 0xad, 0xd9, 0xff, 0x2b, 0x30, 0xd6, 0x2a, 0xe4, 0xc4, 0x68, 0x84, 0xba, 0x7d, 0x46, 0x96, 0x45, 0xdc, - 0xe9, 0x76, 0x0f, 0x7e, 0x19, 0xf0, 0x41, 0x7b, 0x38, 0x3c, 0x6c, 0x3f, 0xc4, 0x93, 0x32, 0xa1, 0x63, 0x12, 0x46, - 0x65, 0xc2, 0xb1, 0x49, 0xa0, 0xb1, 0xa9, 0x0d, 0x49, 0x27, 0x3a, 0x09, 0x4a, 0xac, 0x63, 0xdd, 0xf6, 0x43, 0xd3, - 0xf6, 0x23, 0x30, 0xa3, 0xd2, 0xcd, 0xdb, 0xa6, 0xcf, 0xcf, 0x4f, 0x56, 0xb6, 0x51, 0x3c, 0x89, 0x6d, 0x6b, 0x2e, - 0xf1, 0x64, 0x38, 0xc4, 0x23, 0x9d, 0xd8, 0xad, 0x12, 0x4f, 0x87, 0x43, 0xdb, 0xd5, 0x23, 0xdd, 0xd5, 0xc3, 0x2a, - 0xeb, 0x6c, 0x38, 0xd4, 0x5d, 0x22, 0xeb, 0x34, 0x2f, 0xd5, 0xde, 0xd7, 0x52, 0x71, 0xc1, 0xcf, 0x3b, 0xdd, 0x6e, - 0x1f, 0x30, 0x4c, 0x1b, 0xc3, 0x3a, 0x18, 0xdd, 0x7a, 0x30, 0xba, 0x87, 0xdf, 0xfd, 0x11, 0x8d, 0x6f, 0x68, 0x09, - 0xa4, 0x7e, 0xf0, 0x5f, 0x41, 0x43, 0x69, 0x98, 0xeb, 0x3f, 0x13, 0xf3, 0x67, 0x84, 0x1a, 0x5f, 0x29, 0x80, 0x1b, - 0x54, 0x31, 0x4e, 0x97, 0xaa, 0x7b, 0xfc, 0x42, 0xc1, 0xb7, 0x65, 0x2a, 0x33, 0xda, 0x5f, 0x4d, 0x6f, 0x47, 0xab, - 0xa9, 0xfc, 0x8a, 0xfe, 0x0c, 0xff, 0x94, 0x87, 0xe1, 0xa0, 0xd9, 0x88, 0xd8, 0x9f, 0x29, 0x38, 0xd1, 0xf4, 0xe3, - 0x94, 0x4d, 0x50, 0x7f, 0xf0, 0xa7, 0xc4, 0xc3, 0x86, 0x97, 0xf1, 0xc3, 0x76, 0x0a, 0xb8, 0xd8, 0x6c, 0x26, 0x86, - 0x3f, 0xa0, 0x3e, 0xea, 0xff, 0x29, 0x0f, 0xff, 0x44, 0x0f, 0x8e, 0xaa, 0xb9, 0xfc, 0x2e, 0xec, 0x16, 0xae, 0xe2, - 0xee, 0x1c, 0x96, 0x5b, 0x98, 0xe1, 0x76, 0x93, 0x41, 0x94, 0x32, 0xf0, 0xc1, 0x26, 0xa1, 0x68, 0xf0, 0xa3, 0xe3, - 0x16, 0xfa, 0xa1, 0xdd, 0x01, 0xad, 0x42, 0x53, 0x1e, 0x6e, 0x6f, 0xfa, 0xa2, 0x79, 0x8c, 0x1f, 0x35, 0x0b, 0xdc, - 0x46, 0xb8, 0xd9, 0x76, 0xea, 0xde, 0x41, 0x1e, 0xb6, 0x10, 0xce, 0xc3, 0x33, 0xf8, 0xe7, 0x04, 0x0d, 0xab, 0x0d, - 0x79, 0x4d, 0x37, 0x7b, 0x07, 0x87, 0x51, 0x12, 0xe6, 0x0d, 0x7e, 0x74, 0xda, 0x42, 0x3f, 0x9c, 0xea, 0x8e, 0xd8, - 0xa1, 0xda, 0xd1, 0x95, 0xc0, 0x27, 0x4d, 0x01, 0x1d, 0xb5, 0xca, 0x7e, 0x64, 0xd8, 0x45, 0x58, 0x86, 0xc7, 0xf0, - 0x4f, 0xdb, 0xef, 0xe7, 0xd7, 0xad, 0x7e, 0xf4, 0xbc, 0xdb, 0x38, 0xea, 0x1a, 0xff, 0xd3, 0xdc, 0x5c, 0x06, 0x37, - 0xd8, 0x45, 0x5b, 0xdf, 0x62, 0xb5, 0x8f, 0xe0, 0x03, 0x61, 0x75, 0x48, 0x72, 0xcc, 0x0e, 0xc1, 0x71, 0x15, 0xec, - 0x35, 0xf2, 0xf3, 0xe3, 0x5e, 0xde, 0x68, 0x20, 0x90, 0x0f, 0x0f, 0x49, 0xbb, 0xa9, 0x9a, 0x0c, 0xc3, 0xef, 0x06, - 0x29, 0xa3, 0xa1, 0xc9, 0xaa, 0xd7, 0x2b, 0xdb, 0xab, 0xb9, 0xf2, 0x76, 0xd8, 0x01, 0x62, 0x62, 0x3f, 0x54, 0x4d, - 0x86, 0x8e, 0x64, 0x23, 0x54, 0xe7, 0xac, 0x7f, 0x1a, 0xb7, 0x90, 0xc6, 0xce, 0xbc, 0x1f, 0xb2, 0x26, 0x87, 0xf4, - 0x4e, 0x1c, 0xf2, 0xa6, 0x82, 0x5f, 0x27, 0x1e, 0xb4, 0x24, 0xe0, 0x5d, 0xe5, 0x86, 0x53, 0x1c, 0x75, 0xba, 0x5d, - 0x2c, 0x09, 0x8f, 0x26, 0xfa, 0x57, 0x4e, 0x78, 0x34, 0xd2, 0xbf, 0x04, 0x29, 0xe1, 0x65, 0x7a, 0xc7, 0x05, 0xf1, - 0x56, 0x55, 0xa7, 0x50, 0x58, 0xd0, 0x02, 0x1d, 0x75, 0xdc, 0x7d, 0x38, 0x9e, 0xba, 0x39, 0x80, 0xfc, 0x5f, 0x68, - 0x53, 0x48, 0xd1, 0x2c, 0x70, 0x46, 0xe8, 0x45, 0xd4, 0xed, 0x4f, 0x8f, 0xc2, 0x4e, 0x53, 0x34, 0x0b, 0x14, 0x4f, - 0x8f, 0x74, 0x4d, 0x9c, 0x90, 0x2b, 0x6a, 0x5a, 0xc3, 0x53, 0xb8, 0xc4, 0x4c, 0x48, 0x72, 0x78, 0xda, 0x6a, 0x44, - 0x5d, 0x84, 0x07, 0xc9, 0xaa, 0x85, 0xb3, 0xd5, 0xaa, 0x85, 0xa9, 0xbf, 0x0c, 0xd2, 0x01, 0xa4, 0x54, 0x51, 0x6d, - 0x06, 0xa5, 0xe9, 0xf3, 0x50, 0xc1, 0x85, 0xbc, 0x02, 0x37, 0x17, 0x05, 0x0e, 0x38, 0x31, 0xb7, 0x37, 0x61, 0x48, - 0x87, 0xe5, 0x1b, 0xfb, 0x4a, 0xab, 0x2b, 0xe9, 0xd6, 0xd5, 0x8e, 0xfc, 0x57, 0x19, 0xfe, 0x2e, 0xb0, 0x49, 0xab, - 0x8a, 0xbd, 0xa6, 0xdb, 0xc5, 0x7e, 0xa5, 0x5b, 0xc5, 0xde, 0xec, 0x28, 0x76, 0xbd, 0x5d, 0xec, 0xa3, 0xf0, 0x54, - 0x6c, 0xfc, 0x87, 0xe3, 0xd3, 0x56, 0xe3, 0x18, 0x90, 0xf5, 0xf8, 0xb4, 0x55, 0x15, 0x7a, 0x40, 0xab, 0xb5, 0x52, - 0xe4, 0x0b, 0x35, 0x4e, 0x06, 0xdc, 0x79, 0x3b, 0xeb, 0x85, 0x33, 0xbe, 0xd6, 0xa5, 0x63, 0xf5, 0xa0, 0x0b, 0x46, - 0x1c, 0x52, 0x53, 0x3b, 0x35, 0x38, 0x1d, 0xf6, 0xa7, 0x2c, 0x6c, 0x40, 0x2a, 0x8a, 0xc7, 0xca, 0xfe, 0x42, 0xe5, - 0x5d, 0xee, 0x47, 0x01, 0x49, 0x9d, 0x21, 0xc2, 0x82, 0x34, 0xd4, 0xe0, 0x78, 0xa8, 0xcf, 0xbb, 0x02, 0x7e, 0x9f, - 0xe8, 0xdf, 0xa5, 0x26, 0xc5, 0x7a, 0x22, 0x4c, 0x6f, 0x47, 0x41, 0x5f, 0x92, 0xd7, 0x34, 0xd4, 0xc6, 0xe5, 0x28, - 0x2e, 0x33, 0xe4, 0x57, 0xc8, 0x78, 0x53, 0x66, 0x48, 0x72, 0x25, 0xed, 0x6f, 0xbc, 0x2c, 0x62, 0x30, 0x34, 0xc1, - 0x93, 0x18, 0x8c, 0x4c, 0xf0, 0x28, 0x96, 0xe0, 0x08, 0x41, 0x63, 0xe6, 0x99, 0xaf, 0x5f, 0x5a, 0xd5, 0x95, 0xbe, - 0x6e, 0x25, 0x1a, 0x4b, 0x7b, 0x0c, 0x4e, 0x8a, 0x8f, 0x22, 0x84, 0xbf, 0x0d, 0x85, 0x30, 0x83, 0x36, 0x19, 0xc2, - 0x3c, 0x2a, 0x08, 0xa4, 0x61, 0x1e, 0x4d, 0x08, 0x83, 0x26, 0x79, 0x34, 0x22, 0x6c, 0xd0, 0xf1, 0xd0, 0xe4, 0xa9, - 0x86, 0x1d, 0x00, 0x87, 0xd7, 0x6f, 0xb0, 0x95, 0x69, 0x1c, 0xae, 0xc6, 0xa1, 0x09, 0x49, 0x58, 0x1e, 0xc2, 0x2c, - 0x60, 0x73, 0xea, 0x9f, 0x9d, 0x2a, 0xee, 0x23, 0x8f, 0xa8, 0xa6, 0xde, 0x9f, 0x81, 0xac, 0x86, 0x0f, 0x96, 0x6c, - 0x8d, 0xf7, 0x1e, 0x2c, 0xe5, 0xfa, 0x07, 0xf8, 0x93, 0xdb, 0x3f, 0x4a, 0x9f, 0x7e, 0x6b, 0xf4, 0x39, 0x86, 0x62, - 0x3b, 0x4a, 0xa1, 0xcf, 0xce, 0x0f, 0x2e, 0x27, 0xcb, 0xbb, 0x38, 0x48, 0x69, 0xf1, 0x25, 0xc0, 0x9f, 0xe2, 0x20, - 0x03, 0x46, 0x30, 0xc0, 0x1f, 0xe3, 0xa0, 0x60, 0x01, 0xfe, 0x23, 0x0e, 0x46, 0xd9, 0x22, 0xc0, 0x1f, 0xe2, 0x60, - 0x52, 0x04, 0xf8, 0x3d, 0x68, 0x29, 0x53, 0xbe, 0x98, 0x05, 0xf8, 0xf7, 0x38, 0x90, 0xda, 0x0d, 0x00, 0x5f, 0xc6, - 0x01, 0x63, 0x01, 0x7e, 0x17, 0x07, 0x22, 0x0b, 0xf0, 0x75, 0x1c, 0x88, 0x22, 0xc0, 0x8f, 0xe3, 0xa0, 0xa0, 0x01, - 0xbe, 0x8a, 0x03, 0x28, 0x34, 0x09, 0xf0, 0x93, 0x38, 0x80, 0x96, 0x65, 0x80, 0xdf, 0xc6, 0x01, 0xcf, 0x03, 0xfc, - 0x5b, 0x1c, 0xa8, 0x45, 0xf1, 0xf7, 0x42, 0x70, 0x19, 0xe0, 0xa7, 0x71, 0x30, 0xe5, 0x01, 0x7e, 0x13, 0x07, 0x85, - 0x08, 0xf0, 0xeb, 0x38, 0xa0, 0x59, 0x80, 0x5f, 0xc5, 0x41, 0xc6, 0x02, 0xfc, 0x6b, 0x1c, 0xa4, 0x2c, 0xc0, 0x2f, - 0xe3, 0xe0, 0x9e, 0x65, 0x99, 0x08, 0xf0, 0xb3, 0x38, 0x60, 0x79, 0x80, 0x7f, 0x89, 0x83, 0x64, 0x1a, 0xe0, 0x9f, - 0xe2, 0x80, 0x16, 0x5f, 0x64, 0x80, 0x9f, 0xc7, 0x01, 0xa3, 0x01, 0x7e, 0x61, 0x3a, 0x9a, 0x04, 0xf8, 0xe7, 0x38, - 0xb8, 0x9d, 0x06, 0x6b, 0x9c, 0xe7, 0x64, 0xf9, 0x9a, 0x27, 0xec, 0x0f, 0x16, 0x07, 0xe3, 0xd6, 0xf8, 0x6c, 0x3c, - 0x0e, 0x30, 0xcd, 0x15, 0xff, 0x7b, 0xc1, 0x6e, 0x9f, 0x2a, 0x48, 0xa4, 0x6c, 0x94, 0x3e, 0x0c, 0x30, 0xfd, 0x7b, - 0x41, 0xe3, 0x60, 0x3c, 0xd6, 0x05, 0xfe, 0x5e, 0xd0, 0x19, 0x2d, 0xde, 0xb2, 0x38, 0x78, 0x38, 0x1e, 0x8f, 0xd3, - 0x93, 0x00, 0xd3, 0x7f, 0x16, 0x1f, 0x75, 0x0b, 0xba, 0xc0, 0x88, 0xf1, 0x09, 0xd4, 0xed, 0x8e, 0xbb, 0x69, 0x12, - 0xe0, 0x11, 0x97, 0x7f, 0x2f, 0xe0, 0x7b, 0xcc, 0x4e, 0x92, 0x93, 0x00, 0x8f, 0x32, 0x9a, 0x7c, 0x89, 0x83, 0x96, - 0xfe, 0x95, 0xff, 0xc2, 0xd2, 0xd7, 0x33, 0xa1, 0x75, 0xf8, 0x63, 0x36, 0x4a, 0xd2, 0x00, 0xeb, 0xc1, 0x8c, 0xe1, - 0xef, 0x57, 0xfe, 0x8e, 0xa9, 0x38, 0x38, 0xa3, 0x9d, 0x11, 0xeb, 0x04, 0x78, 0xf4, 0xe6, 0x36, 0x8f, 0x03, 0xda, - 0xed, 0xd0, 0x0e, 0x0d, 0xf0, 0x68, 0x51, 0x64, 0xf7, 0xb7, 0x42, 0xa4, 0x00, 0x84, 0xd1, 0xd9, 0xd9, 0xc3, 0x00, - 0x27, 0xf4, 0x57, 0x05, 0xb5, 0xbb, 0xe3, 0x47, 0x8c, 0xb6, 0x02, 0xfc, 0x0b, 0x2d, 0xd4, 0xc7, 0x85, 0xb4, 0x03, - 0x6d, 0x41, 0x8a, 0x48, 0xde, 0x81, 0x7e, 0x3b, 0x48, 0x3b, 0xa7, 0x8f, 0xda, 0x2c, 0xc0, 0xc9, 0xf5, 0x6b, 0xe8, - 0xed, 0xe1, 0xb8, 0xdb, 0x82, 0x8f, 0x1c, 0x04, 0x45, 0x56, 0x40, 0x23, 0xa7, 0x27, 0x8f, 0xba, 0x2c, 0xd5, 0x89, - 0x92, 0x67, 0x5f, 0xf4, 0xec, 0xcf, 0x60, 0x3e, 0x49, 0xc1, 0x67, 0x52, 0xe4, 0x71, 0x90, 0x26, 0xed, 0x93, 0x63, - 0x48, 0xb8, 0xa7, 0xb9, 0x03, 0xce, 0x1d, 0x54, 0x3d, 0x1b, 0x05, 0xf8, 0xce, 0xa4, 0x9e, 0x8d, 0xf4, 0xc7, 0xe4, - 0xdd, 0xaf, 0xf9, 0x9b, 0x34, 0x0e, 0x46, 0x67, 0x67, 0xa7, 0x2d, 0x48, 0xf8, 0x40, 0xef, 0xe3, 0x80, 0x3e, 0x82, - 0xff, 0x20, 0xfb, 0xe3, 0x33, 0xe8, 0x10, 0x46, 0x78, 0x37, 0xf9, 0xe8, 0xe7, 0x7c, 0x99, 0xd2, 0x2f, 0x3c, 0x0e, - 0x46, 0xe9, 0xe8, 0xe1, 0x29, 0xd4, 0x9b, 0xd1, 0xc9, 0x33, 0x45, 0xa1, 0xdd, 0x56, 0x4b, 0xb7, 0xfc, 0x8e, 0x7f, - 0x65, 0xba, 0x7a, 0xb7, 0x7b, 0x3a, 0xea, 0xc0, 0x08, 0xae, 0x41, 0xc3, 0x01, 0xe3, 0x39, 0x4b, 0x74, 0x83, 0xd7, - 0xc9, 0xd3, 0x34, 0x0e, 0x1e, 0x3d, 0x3a, 0xee, 0x24, 0x49, 0x80, 0xef, 0x3e, 0xa6, 0xa6, 0xb6, 0xce, 0x93, 0x00, - 0xfb, 0x38, 0x60, 0x8f, 0x1e, 0x9d, 0x3e, 0xa4, 0xf0, 0xfd, 0x5c, 0xb7, 0x75, 0x36, 0x1e, 0x25, 0x67, 0xd0, 0xd6, - 0xef, 0x30, 0x9d, 0x93, 0xb3, 0xe3, 0x54, 0xf7, 0xf5, 0xbb, 0x1e, 0x75, 0x67, 0x7c, 0x32, 0x3e, 0xd1, 0x99, 0x7a, - 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x0e, 0x12, 0x96, 0xb6, 0x03, 0x7c, 0x67, 0x17, 0xee, 0xd1, 0x49, 0xab, 0x95, 0x1e, - 0x07, 0x38, 0xbd, 0x9c, 0xcf, 0xdf, 0x6a, 0x08, 0xb6, 0x4f, 0x1e, 0x99, 0x6f, 0xf9, 0xe5, 0x1e, 0x9a, 0x1e, 0x69, - 0xa0, 0xa5, 0x7c, 0xa6, 0x5b, 0x3e, 0x7d, 0x04, 0xff, 0xe9, 0x6f, 0xdd, 0x74, 0xf9, 0x2d, 0xd2, 0x89, 0x59, 0x94, - 0x36, 0x7b, 0xd4, 0x82, 0x1a, 0x63, 0xfe, 0x71, 0x54, 0x70, 0x40, 0xa3, 0x51, 0x07, 0xfe, 0x2f, 0xc0, 0xe3, 0xec, - 0xfa, 0xb5, 0xc5, 0xd9, 0xf1, 0x98, 0x8e, 0x5b, 0x01, 0x1e, 0x8b, 0x8f, 0x52, 0x7d, 0xb8, 0xcc, 0xe3, 0xa0, 0xd3, - 0x39, 0x1b, 0xe9, 0x32, 0x8b, 0x5f, 0x24, 0xd7, 0x78, 0xdc, 0xd2, 0xad, 0x4c, 0xe8, 0x5b, 0x39, 0xba, 0x16, 0xb0, - 0x92, 0xf0, 0x5f, 0x80, 0x27, 0xa0, 0x16, 0xb3, 0xad, 0x9c, 0x99, 0xed, 0x30, 0x79, 0xa7, 0x51, 0x33, 0x7d, 0x08, - 0xf0, 0x72, 0xcb, 0x98, 0x52, 0xda, 0xed, 0xb4, 0x02, 0xac, 0x47, 0x7d, 0xd6, 0x82, 0xff, 0x02, 0x6c, 0x20, 0xa7, - 0xe1, 0x3a, 0xf9, 0xf8, 0xec, 0xe5, 0x6d, 0x1c, 0xd0, 0x74, 0x3c, 0x86, 0x25, 0xd1, 0x93, 0x71, 0xc5, 0xa6, 0x22, - 0x67, 0xf7, 0xbf, 0xde, 0xda, 0xed, 0xa2, 0x13, 0x94, 0x85, 0xce, 0xe9, 0xa3, 0xd1, 0x49, 0x80, 0xdf, 0xa6, 0x9c, - 0xe6, 0xb0, 0x4a, 0x49, 0xda, 0x4d, 0xba, 0x89, 0x4e, 0x98, 0x88, 0x38, 0x38, 0x81, 0x25, 0xef, 0x04, 0x98, 0x7f, - 0xbd, 0xbe, 0x37, 0xe8, 0x06, 0xb5, 0x2d, 0x82, 0x8c, 0x5b, 0xec, 0xf4, 0x2c, 0x09, 0x70, 0x46, 0xbf, 0x3e, 0xfb, - 0xb5, 0x88, 0x03, 0x76, 0xca, 0x4e, 0xc7, 0xd4, 0x7d, 0xff, 0x21, 0xa7, 0xba, 0x46, 0x6b, 0xdc, 0x85, 0xa4, 0xdb, - 0x5c, 0x8f, 0xf5, 0x61, 0x32, 0xd6, 0x18, 0xf2, 0x6a, 0x26, 0xf2, 0xe4, 0xe9, 0x78, 0x2c, 0x0c, 0x16, 0x53, 0xd8, - 0x84, 0x9f, 0x00, 0xda, 0x34, 0x4d, 0xcf, 0xd8, 0x69, 0x80, 0x3f, 0x99, 0x5d, 0x62, 0x27, 0xf0, 0xc9, 0x60, 0x36, - 0xb3, 0xbb, 0xfd, 0x93, 0x01, 0x0a, 0xcc, 0x77, 0x4c, 0xc7, 0x34, 0xed, 0x04, 0xf8, 0x93, 0x86, 0x4b, 0x7a, 0x0c, - 0xff, 0x41, 0x01, 0xe8, 0xec, 0x51, 0x8b, 0xb1, 0x47, 0x2d, 0xfd, 0xe5, 0xe7, 0xd9, 0x99, 0x8f, 0x4e, 0x93, 0x76, - 0x80, 0x3f, 0x59, 0x74, 0x1c, 0x8f, 0x69, 0x0b, 0xd0, 0xf1, 0x93, 0x45, 0xc7, 0x4e, 0x6b, 0xd4, 0xa1, 0xfa, 0xdb, - 0x60, 0xcd, 0xd9, 0xc3, 0x84, 0xc1, 0xe4, 0x3e, 0x19, 0x84, 0x7c, 0xf8, 0xf0, 0xec, 0xec, 0xd1, 0x23, 0xf8, 0xd4, - 0x6d, 0x97, 0x9f, 0x52, 0x5d, 0x66, 0x1a, 0xc9, 0x5a, 0xc9, 0x09, 0xd0, 0xc9, 0x4f, 0x7a, 0x8c, 0xe3, 0xf1, 0x98, - 0xb5, 0x02, 0x9c, 0xf1, 0x19, 0x33, 0x98, 0x60, 0x7e, 0xeb, 0x8e, 0x8e, 0x3b, 0x49, 0x7a, 0xdc, 0x09, 0x70, 0xf6, - 0xf6, 0x99, 0x9e, 0x4d, 0x0b, 0x66, 0xef, 0xb6, 0x9c, 0xc3, 0x9a, 0x19, 0x7d, 0x03, 0x83, 0x84, 0x95, 0x86, 0xca, - 0xef, 0x3d, 0x7a, 0x78, 0x7a, 0x9a, 0xa4, 0x30, 0xd0, 0xf7, 0xd0, 0x2d, 0x80, 0xf1, 0xbd, 0xd9, 0x7c, 0x23, 0xda, - 0xed, 0xc2, 0x74, 0xdf, 0xcf, 0x17, 0xc5, 0xfc, 0x55, 0x1c, 0x3c, 0x3a, 0x7e, 0xd8, 0x4a, 0x47, 0x01, 0x7e, 0x6f, - 0x27, 0x78, 0x9c, 0x8c, 0x8e, 0x1f, 0xb6, 0x03, 0xfc, 0x5e, 0xef, 0xb7, 0x87, 0xa3, 0xd3, 0x33, 0x38, 0x37, 0xde, - 0xcb, 0x79, 0xf1, 0x76, 0xa2, 0x0b, 0x8c, 0xe9, 0x23, 0x68, 0xf6, 0x37, 0xbd, 0x1b, 0xd3, 0x36, 0x6c, 0xe4, 0xf7, - 0x7a, 0x93, 0x69, 0x3c, 0x79, 0xd8, 0xee, 0x9e, 0x75, 0x03, 0x3c, 0xe3, 0x69, 0x0e, 0x04, 0x5e, 0x6f, 0x94, 0x47, - 0xed, 0x47, 0x0f, 0x5b, 0x01, 0x9e, 0xbd, 0x55, 0xc9, 0x47, 0x3a, 0xd3, 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa9, - 0xee, 0xdf, 0x48, 0x4b, 0x8f, 0x59, 0x3b, 0xc0, 0x33, 0x91, 0x24, 0x54, 0xbe, 0x35, 0x09, 0xa3, 0x6e, 0x80, 0x73, - 0xfa, 0x95, 0xfe, 0x25, 0xdc, 0x66, 0x4a, 0x19, 0x4d, 0x75, 0x9a, 0xc6, 0xe1, 0x00, 0xbf, 0x4b, 0xe1, 0x16, 0x2e, - 0x0e, 0xc6, 0xe9, 0xb8, 0x0b, 0xe0, 0x01, 0x02, 0x64, 0xb0, 0x1b, 0xa0, 0x01, 0x5f, 0xe9, 0xe3, 0x51, 0x1c, 0x9c, - 0x8e, 0xce, 0x58, 0xe7, 0x38, 0xc0, 0x25, 0x35, 0xa2, 0x5d, 0xc8, 0xd7, 0x9f, 0x1f, 0xf5, 0x96, 0x3a, 0x31, 0x09, - 0x1a, 0x40, 0x29, 0x7d, 0xd8, 0x4a, 0x4f, 0x03, 0x3c, 0x7f, 0xcd, 0xdc, 0x1e, 0x63, 0x8c, 0x9d, 0x01, 0x2c, 0x21, - 0x49, 0x23, 0xd0, 0xd9, 0x78, 0xf4, 0xe8, 0x4c, 0x7f, 0x03, 0x18, 0xe8, 0x98, 0x31, 0x00, 0xd2, 0xfc, 0x35, 0x2b, - 0x01, 0x91, 0x8e, 0x1e, 0xb6, 0x80, 0xbe, 0xcc, 0xe9, 0x9c, 0xde, 0xd3, 0xdb, 0xa7, 0x73, 0x3d, 0xa7, 0x71, 0xda, - 0x0d, 0xf0, 0xfc, 0xf9, 0x2f, 0xf3, 0xc5, 0x78, 0xac, 0x27, 0x44, 0x47, 0x8f, 0x02, 0x3c, 0x67, 0xc5, 0x02, 0xd6, - 0xe8, 0xac, 0x7b, 0x3c, 0x0e, 0xb0, 0x45, 0xc3, 0xa4, 0x95, 0x8c, 0xe0, 0x9a, 0x71, 0x31, 0x8b, 0x83, 0x34, 0xa5, - 0xad, 0x14, 0x2e, 0x1d, 0xc5, 0xed, 0xaf, 0x85, 0x41, 0x23, 0xa6, 0xf1, 0xc1, 0xae, 0x21, 0xcc, 0x17, 0xe0, 0xf1, - 0x71, 0xc4, 0x92, 0x84, 0xda, 0xc4, 0xd3, 0xd3, 0xe3, 0x63, 0xc0, 0x3d, 0x33, 0x43, 0x83, 0x20, 0x6f, 0xe4, 0xfd, - 0xa8, 0x10, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, 0xfe, 0xb5, 0xa6, 0xab, 0xed, 0xd3, 0x47, 0xb0, 0x00, - 0x92, 0xa6, 0xe9, 0x2b, 0x73, 0xb8, 0x9d, 0x8d, 0x4e, 0xba, 0xed, 0xe3, 0x00, 0xbb, 0x8d, 0x40, 0xcf, 0x5a, 0x0f, - 0x3b, 0x50, 0x22, 0x4f, 0xef, 0x4d, 0x89, 0xf1, 0x09, 0x3d, 0x39, 0x6d, 0x05, 0xd8, 0x6d, 0x0d, 0x76, 0x36, 0xea, - 0x3e, 0x84, 0x4f, 0x39, 0x65, 0x59, 0xa6, 0xf1, 0xbb, 0x0b, 0x70, 0x91, 0xfc, 0x59, 0x4e, 0xe3, 0x80, 0xb6, 0xba, - 0x9d, 0x4e, 0x0a, 0x9f, 0xd9, 0x57, 0x56, 0xc4, 0x41, 0xd2, 0x82, 0xff, 0x02, 0xec, 0xed, 0x24, 0x36, 0x0a, 0xb0, - 0xc6, 0xbb, 0x53, 0xda, 0xd5, 0x7b, 0xdf, 0xee, 0xaa, 0xd6, 0x59, 0x0b, 0x36, 0xac, 0xdd, 0x54, 0xf6, 0x4b, 0xe6, - 0xe2, 0xd6, 0x92, 0x58, 0x1a, 0x60, 0x0f, 0x41, 0xc7, 0x0f, 0xc7, 0x01, 0x76, 0x3b, 0xee, 0xe4, 0xf4, 0xac, 0x03, - 0xa4, 0x4c, 0x01, 0xa1, 0x48, 0x3b, 0xa3, 0x13, 0x20, 0x4d, 0x8a, 0xbd, 0x36, 0x78, 0x12, 0x60, 0xf5, 0x54, 0xaa, - 0x57, 0x71, 0x90, 0x9e, 0x8d, 0xc6, 0xe9, 0x59, 0x80, 0x95, 0x98, 0x51, 0x25, 0x34, 0x05, 0x3c, 0x3e, 0x79, 0x18, - 0x60, 0x8d, 0xe6, 0x2d, 0xd6, 0x4a, 0x5b, 0x01, 0xb6, 0x47, 0x09, 0x63, 0x67, 0x1d, 0x98, 0xd6, 0xcf, 0xcf, 0x15, - 0xe0, 0x72, 0xca, 0x46, 0xc7, 0x01, 0x2e, 0xe9, 0xbd, 0x26, 0x44, 0xf0, 0x25, 0x67, 0xe2, 0x8b, 0x65, 0x3d, 0x80, - 0xd4, 0xb9, 0x0d, 0x0f, 0xcb, 0xf0, 0xf2, 0xd6, 0xa0, 0x11, 0xd5, 0x5b, 0xdc, 0xbb, 0x86, 0x7d, 0x42, 0x43, 0xc7, - 0xb6, 0x73, 0xb2, 0x5c, 0xe3, 0x32, 0xba, 0xe9, 0x17, 0x76, 0x2f, 0xc3, 0x1c, 0x4c, 0xe2, 0x6b, 0x29, 0x32, 0x47, - 0xce, 0x9e, 0xdf, 0xba, 0x6c, 0x82, 0x20, 0x29, 0x49, 0xab, 0x27, 0xcf, 0x9d, 0x1b, 0x69, 0x4f, 0x42, 0xcc, 0x03, - 0x48, 0x2f, 0x08, 0x25, 0x0a, 0x42, 0xc3, 0x18, 0x61, 0xd2, 0x59, 0xd7, 0x6b, 0x99, 0x52, 0x18, 0x7b, 0x7d, 0x4a, - 0xa8, 0x0b, 0x0a, 0x0f, 0x77, 0xc4, 0xf9, 0x40, 0x0c, 0x51, 0x4f, 0x10, 0x1d, 0xe2, 0xf9, 0x45, 0xae, 0xc2, 0x3c, - 0x1f, 0x14, 0x43, 0xdc, 0x3e, 0x45, 0x18, 0x82, 0x27, 0x90, 0x81, 0xb8, 0xb8, 0x68, 0x9f, 0x1e, 0x68, 0xa1, 0xef, - 0xe2, 0xe2, 0xcc, 0xfc, 0x80, 0x7f, 0x87, 0x55, 0xc0, 0x6a, 0x18, 0xdf, 0x63, 0xe6, 0x69, 0xf4, 0x34, 0x7f, 0xfd, - 0x98, 0xad, 0x56, 0xe1, 0x63, 0x46, 0x60, 0xc6, 0xf8, 0x31, 0x8b, 0xf4, 0xa5, 0x85, 0x71, 0x8d, 0x21, 0x03, 0xd0, - 0x9c, 0xb5, 0x30, 0x84, 0x51, 0x77, 0x9c, 0xf7, 0x63, 0x36, 0xe0, 0x75, 0xb7, 0xea, 0x2a, 0x76, 0xf1, 0xc1, 0xc1, - 0xb2, 0x88, 0x95, 0x11, 0x13, 0x94, 0x11, 0x13, 0x94, 0x11, 0x13, 0x54, 0x15, 0x3d, 0xfe, 0xa4, 0x0f, 0x52, 0x8a, - 0x56, 0xb6, 0x58, 0x9e, 0xfa, 0x1d, 0xa8, 0x3d, 0x40, 0x3b, 0xd9, 0xaf, 0x94, 0x1d, 0xa5, 0xae, 0x62, 0xa7, 0x02, - 0x63, 0x67, 0xa2, 0xd5, 0x76, 0x1c, 0xfd, 0x3b, 0xea, 0x8e, 0x97, 0x35, 0xb1, 0xec, 0xdd, 0x4e, 0xb1, 0x0c, 0x56, - 0x52, 0x8b, 0x66, 0xfb, 0x26, 0x10, 0x87, 0x1a, 0x3c, 0xd4, 0x82, 0x59, 0x15, 0x1d, 0xae, 0x01, 0x49, 0x3d, 0x90, - 0x42, 0xce, 0xb4, 0x94, 0x56, 0xa0, 0x38, 0x55, 0x61, 0x01, 0x1a, 0x4a, 0xa7, 0xa0, 0x2c, 0x83, 0x98, 0x36, 0x34, - 0x40, 0x72, 0x23, 0xa3, 0x19, 0x59, 0xad, 0x0b, 0xa2, 0x0b, 0x68, 0xc2, 0xb4, 0xc4, 0x02, 0x0d, 0x48, 0xdd, 0x80, - 0xb4, 0x95, 0x41, 0x9c, 0xb1, 0xd9, 0x27, 0x3a, 0x3b, 0xd7, 0xd9, 0x79, 0x99, 0x2d, 0x5c, 0xb6, 0x11, 0x12, 0x85, - 0xce, 0x16, 0x65, 0x36, 0xc8, 0x6c, 0x78, 0x12, 0xe7, 0x78, 0x14, 0x0b, 0x23, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0xea, - 0x6b, 0x73, 0x0f, 0x0e, 0xc2, 0x52, 0x4e, 0xd2, 0x6a, 0xe2, 0x07, 0x4b, 0x1e, 0x15, 0x5a, 0x06, 0xe2, 0xd1, 0xc4, - 0xfe, 0x1d, 0xad, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfa, 0x46, 0x49, 0xf4, 0xd9, 0x29, 0x51, 0x1f, 0x73, 0x1d, 0xfe, - 0xe6, 0x9c, 0x44, 0xad, 0xd6, 0x71, 0xfb, 0xb8, 0x75, 0xd6, 0xe7, 0x87, 0xed, 0x4e, 0xf4, 0xa8, 0x13, 0x6b, 0x45, - 0xc4, 0x5c, 0xdc, 0x82, 0x02, 0xe6, 0xa8, 0x13, 0x9d, 0xa0, 0xc3, 0x76, 0xd4, 0xea, 0x76, 0x9b, 0xf0, 0x0f, 0x7e, - 0xaf, 0xca, 0x6a, 0x27, 0xad, 0x93, 0x6e, 0x9f, 0x1f, 0x6d, 0x54, 0x0a, 0x79, 0x03, 0x0a, 0xa2, 0x23, 0x5d, 0x09, - 0x43, 0xfd, 0x6a, 0x79, 0x9f, 0x6d, 0xe9, 0x79, 0xde, 0xab, 0x30, 0x37, 0xaa, 0x38, 0x80, 0xaa, 0xfb, 0x9a, 0x68, - 0x20, 0xba, 0xaf, 0x51, 0x19, 0xa2, 0x76, 0x59, 0x80, 0xa8, 0xfd, 0x98, 0x87, 0xb2, 0xc1, 0x0e, 0x43, 0x93, 0xaf, - 0xa0, 0x6e, 0x13, 0xc2, 0xc6, 0xe1, 0x89, 0xcd, 0xcd, 0xfd, 0xdc, 0x09, 0x42, 0xcd, 0x1c, 0x72, 0x47, 0x36, 0x57, - 0xf8, 0xb9, 0x23, 0x84, 0x9a, 0x02, 0x72, 0x69, 0xcc, 0x23, 0x0a, 0x39, 0x2a, 0xa2, 0x4d, 0x0d, 0xc9, 0x6a, 0x51, - 0x9e, 0x33, 0x37, 0x6c, 0x3e, 0x86, 0xe5, 0xd1, 0x04, 0xc5, 0x0a, 0xd2, 0x10, 0x35, 0xaf, 0xd2, 0xe6, 0xb4, 0x70, - 0xa9, 0xc6, 0x81, 0x8c, 0x06, 0xfc, 0x73, 0xc8, 0xf4, 0x7b, 0x13, 0xad, 0xfe, 0xf1, 0x69, 0x2b, 0x6e, 0x83, 0x8f, - 0x34, 0xc8, 0xda, 0xd2, 0xc8, 0xda, 0xd2, 0xc9, 0xda, 0xd2, 0xc9, 0xda, 0x20, 0xc0, 0x7b, 0x7d, 0xff, 0x2d, 0x6a, - 0x76, 0x27, 0xbc, 0x34, 0x62, 0x31, 0x56, 0x0a, 0xa1, 0x5a, 0xad, 0x96, 0x6b, 0x30, 0x31, 0x2a, 0x6b, 0x88, 0xbc, - 0x52, 0x7f, 0x2e, 0x8b, 0xb8, 0x85, 0x27, 0x31, 0x68, 0xb9, 0x5b, 0x98, 0xea, 0xcd, 0xed, 0xa8, 0xc2, 0x66, 0xf8, - 0x9a, 0xbe, 0x53, 0x27, 0x5f, 0x90, 0x63, 0xad, 0x3d, 0x5e, 0x16, 0x31, 0x37, 0x34, 0x83, 0x1b, 0x9a, 0xc1, 0x0d, - 0xcd, 0x80, 0x46, 0x70, 0x59, 0x58, 0x97, 0x8d, 0x28, 0x81, 0x2b, 0x81, 0xc1, 0xf1, 0x10, 0xa2, 0xf7, 0x85, 0x8a, - 0xe8, 0x51, 0x6f, 0x74, 0xde, 0x86, 0x68, 0x65, 0xa6, 0xa4, 0x8a, 0xa8, 0x76, 0xda, 0x2e, 0xc7, 0xfc, 0xaa, 0x86, - 0xf6, 0x11, 0x3c, 0x25, 0x73, 0xa9, 0xc2, 0x16, 0xd8, 0x6c, 0x04, 0x45, 0xd0, 0xd7, 0x64, 0x21, 0xd6, 0x3a, 0x1b, - 0x6b, 0x8b, 0xfd, 0x65, 0xc3, 0x05, 0xd6, 0x50, 0x02, 0xff, 0x01, 0x85, 0x2f, 0xac, 0xf2, 0xc9, 0x2f, 0x4d, 0x4d, - 0xad, 0x9d, 0x98, 0x39, 0x12, 0x7a, 0x60, 0x2f, 0xee, 0x82, 0x3d, 0xf5, 0x25, 0x11, 0xb9, 0xf6, 0x56, 0x24, 0x55, - 0xb8, 0x62, 0xf0, 0xde, 0x25, 0x77, 0x54, 0xfb, 0xb2, 0xbc, 0x30, 0x7f, 0x5e, 0x51, 0xcf, 0xd9, 0xaf, 0x98, 0x8c, - 0x9c, 0x8f, 0xec, 0x8d, 0x0e, 0xea, 0x43, 0xf6, 0xf7, 0x8d, 0x29, 0xb7, 0xfe, 0xda, 0xb4, 0xe5, 0xd6, 0x89, 0x3a, - 0x1b, 0x76, 0xa8, 0x5b, 0xa3, 0xbf, 0x9d, 0xab, 0x5a, 0x31, 0x19, 0x21, 0x8f, 0x66, 0x6b, 0xb0, 0xe6, 0x15, 0xb0, - 0xa4, 0xad, 0x57, 0x7a, 0x30, 0x42, 0xef, 0x7a, 0xcc, 0xeb, 0x62, 0x32, 0xda, 0xf9, 0xe6, 0x88, 0xe9, 0xb1, 0xff, - 0x96, 0x7a, 0x3d, 0x38, 0xd5, 0xf6, 0x94, 0xdd, 0x7d, 0xaf, 0xce, 0xed, 0xce, 0x3a, 0x32, 0xfb, 0x5e, 0x9d, 0xa7, - 0xbb, 0xea, 0xcc, 0xf8, 0x5d, 0xe8, 0xf6, 0x8e, 0xf2, 0xd4, 0xd8, 0xda, 0x3e, 0x68, 0x32, 0x82, 0x20, 0xf1, 0xf0, - 0xd7, 0x84, 0x72, 0xe9, 0x39, 0x12, 0x0e, 0xab, 0x20, 0xfa, 0x51, 0x37, 0x66, 0x98, 0x92, 0xce, 0x61, 0xa1, 0x83, - 0xb9, 0xc8, 0x88, 0x36, 0xf3, 0x88, 0xe2, 0x8c, 0x84, 0x21, 0x3d, 0x4c, 0x20, 0x24, 0x4d, 0xbb, 0x4f, 0xe3, 0x90, - 0x36, 0x12, 0x74, 0x14, 0xb6, 0x1b, 0xf4, 0x30, 0x41, 0xa8, 0xd1, 0x06, 0x9d, 0xa9, 0x20, 0xed, 0x66, 0x06, 0x41, - 0x2a, 0x35, 0x29, 0xce, 0x0e, 0x65, 0x54, 0x34, 0xc4, 0x61, 0x1e, 0x15, 0x8d, 0xa8, 0x8b, 0x65, 0x34, 0x29, 0x93, - 0x27, 0x3a, 0x79, 0x62, 0x92, 0x47, 0x65, 0xf2, 0x48, 0x27, 0x8f, 0x4c, 0x32, 0x25, 0xc5, 0xa1, 0x8c, 0x68, 0x23, - 0x6c, 0x37, 0x0b, 0x74, 0x08, 0x23, 0x70, 0xa3, 0x27, 0xd2, 0x8f, 0x0d, 0xbe, 0xd6, 0xc6, 0x35, 0x73, 0x91, 0xd9, - 0x68, 0x9d, 0x15, 0x90, 0x4a, 0x8f, 0x27, 0xa8, 0xf3, 0xcc, 0x03, 0x13, 0x56, 0xe6, 0x8f, 0x8b, 0x45, 0xb7, 0x4e, - 0x32, 0x91, 0x7b, 0x1e, 0x5d, 0x60, 0x84, 0xfe, 0xc5, 0xfa, 0xb1, 0x00, 0x54, 0xd7, 0x34, 0x9b, 0x4f, 0xe9, 0x96, - 0xdb, 0x6c, 0x31, 0x19, 0xd9, 0x9d, 0x55, 0x36, 0xc3, 0x68, 0x61, 0x62, 0x3c, 0xd7, 0x1d, 0x1c, 0x01, 0xd4, 0xce, - 0xa9, 0x32, 0xa2, 0x5a, 0x49, 0x6e, 0x6a, 0x4c, 0x0a, 0x76, 0x2f, 0x13, 0x9a, 0xb1, 0xb0, 0x3a, 0x80, 0xab, 0x61, - 0x32, 0xf2, 0x02, 0x4c, 0xe1, 0x8b, 0xc3, 0xe8, 0xb8, 0xa1, 0xa2, 0xc9, 0x61, 0xd4, 0x7d, 0xd4, 0x50, 0xd1, 0xe8, - 0x30, 0x6a, 0xb7, 0x2b, 0x9c, 0x8d, 0x0a, 0xa2, 0xa2, 0x09, 0x51, 0xa0, 0x31, 0x34, 0x8d, 0x8a, 0x39, 0x05, 0xdb, - 0xae, 0x7f, 0x63, 0x18, 0x0d, 0x3b, 0x8c, 0x9c, 0x4d, 0x4c, 0xb8, 0xcb, 0xad, 0x31, 0xf8, 0xdd, 0x74, 0xba, 0xdd, - 0xa6, 0x8a, 0x0a, 0xac, 0xcc, 0x4a, 0x36, 0x55, 0x34, 0xc1, 0xca, 0x2c, 0x5f, 0x53, 0x45, 0x23, 0xd3, 0x94, 0xd6, - 0x01, 0x82, 0xde, 0xb1, 0x04, 0xd6, 0x73, 0xe6, 0x41, 0xbe, 0xe3, 0xbc, 0x53, 0xd6, 0xa0, 0x35, 0xfc, 0x5e, 0xb9, - 0xa6, 0x2b, 0x28, 0xa9, 0x02, 0x1b, 0x1f, 0xf6, 0xad, 0xa2, 0xed, 0xaa, 0x49, 0xf6, 0xaf, 0xcb, 0x96, 0xcd, 0x16, - 0x42, 0xd5, 0x0b, 0x5e, 0xd6, 0x30, 0xc4, 0x96, 0xb2, 0x07, 0xf7, 0x3f, 0x94, 0x84, 0x10, 0xd4, 0x4e, 0x9f, 0x42, - 0x9c, 0x38, 0x3d, 0x32, 0x24, 0xf1, 0x46, 0x63, 0x8d, 0x42, 0xef, 0xbc, 0x7d, 0xea, 0x53, 0xd5, 0xad, 0x48, 0x77, - 0x84, 0x04, 0x8b, 0xdc, 0xd8, 0x42, 0xa6, 0x81, 0xc7, 0x82, 0x58, 0xed, 0x6e, 0xed, 0x80, 0x38, 0x38, 0xd8, 0x3c, - 0x2f, 0xdc, 0x9b, 0x03, 0x5b, 0xef, 0x0c, 0x54, 0x86, 0x74, 0xee, 0x25, 0x24, 0x63, 0x62, 0xcb, 0x3d, 0x44, 0x71, - 0x31, 0xa7, 0x1e, 0x6a, 0x0a, 0x3f, 0xa8, 0x02, 0xee, 0xd9, 0x9c, 0xe6, 0xa9, 0xce, 0xd0, 0x7d, 0x0d, 0xbd, 0xb1, - 0xbd, 0xf1, 0x27, 0x54, 0x1a, 0x09, 0xfe, 0xcb, 0x8e, 0xbd, 0x4e, 0xec, 0x4b, 0x2d, 0x7e, 0xa3, 0x7f, 0xf9, 0x26, - 0xb9, 0x15, 0x6c, 0xac, 0x33, 0xf6, 0x6a, 0x55, 0x7b, 0x97, 0xc7, 0xbc, 0xfe, 0x82, 0x0e, 0x0e, 0xb8, 0x7c, 0x06, - 0x56, 0xc4, 0x2c, 0x6c, 0xf8, 0x87, 0xef, 0xdf, 0xb5, 0xd3, 0xfa, 0x2f, 0x7d, 0xae, 0xc6, 0xde, 0x41, 0x77, 0x59, - 0xcb, 0xdf, 0xb9, 0x12, 0x7d, 0x15, 0x73, 0xbb, 0xd6, 0x7f, 0x55, 0x36, 0xda, 0x5b, 0x2f, 0x44, 0x1d, 0x1c, 0xf0, - 0x2a, 0x4e, 0x53, 0xf0, 0x43, 0x80, 0xfa, 0x5a, 0x06, 0x79, 0x96, 0x09, 0x0a, 0x37, 0xa2, 0x70, 0xc5, 0x10, 0x37, - 0xf8, 0x91, 0xc2, 0x7f, 0x88, 0xff, 0x4f, 0x8d, 0x1c, 0xaa, 0xb8, 0xc1, 0x3d, 0x01, 0xcc, 0x67, 0x85, 0xaa, 0x08, - 0x89, 0x1a, 0xd2, 0xbe, 0xc9, 0x35, 0x2a, 0x0f, 0x73, 0x3a, 0x9f, 0x67, 0xf7, 0xfa, 0x91, 0x2c, 0x8f, 0xa3, 0xaa, - 0x2e, 0x9a, 0x6c, 0x78, 0x3a, 0x5c, 0x00, 0x4f, 0x0f, 0xb8, 0x87, 0xb4, 0x7b, 0x69, 0x79, 0xb9, 0x2d, 0x11, 0x48, - 0x66, 0x39, 0x11, 0xcd, 0x76, 0x2f, 0xbf, 0x00, 0xb9, 0xac, 0xd9, 0x44, 0xca, 0x46, 0xed, 0xc6, 0x1c, 0x64, 0xb2, - 0xdc, 0xb8, 0x90, 0xee, 0x99, 0x82, 0x20, 0xb9, 0x09, 0x2d, 0xb2, 0xed, 0x2e, 0xc5, 0xc7, 0x21, 0xa0, 0x11, 0x32, - 0x02, 0x9f, 0x2f, 0x2c, 0x72, 0xe0, 0x3a, 0x0b, 0xd7, 0xf1, 0x37, 0x5a, 0x2a, 0x06, 0xf9, 0x70, 0x88, 0x0b, 0xfd, - 0x2e, 0x44, 0x39, 0x1f, 0xb8, 0x69, 0x2a, 0xdf, 0x19, 0xf2, 0x44, 0x14, 0xbe, 0x5a, 0xed, 0xc3, 0x33, 0x3e, 0xb6, - 0x4d, 0xf0, 0x39, 0xb5, 0x3f, 0xab, 0x27, 0x3b, 0x60, 0x1c, 0x8c, 0xb4, 0xf4, 0x45, 0xa1, 0x95, 0x37, 0xd9, 0xb9, - 0xec, 0x35, 0x1a, 0x4c, 0x47, 0x58, 0x22, 0x10, 0x4e, 0x0d, 0x1c, 0x02, 0xe1, 0x8f, 0x09, 0x9a, 0x24, 0x99, 0x09, - 0x3d, 0x07, 0x31, 0xb1, 0x6b, 0x09, 0xab, 0x55, 0x6e, 0x42, 0x9b, 0xe8, 0x1c, 0x13, 0xe4, 0xa4, 0xec, 0xa7, 0x8c, - 0xa1, 0x5a, 0x99, 0x71, 0x70, 0xbb, 0xd5, 0xdf, 0x56, 0xfb, 0x79, 0x8f, 0x9b, 0x6b, 0x3c, 0xae, 0x03, 0x06, 0x68, - 0x40, 0x2d, 0x37, 0x36, 0xb8, 0x31, 0x70, 0x0f, 0x8d, 0x35, 0x2e, 0xdb, 0x84, 0xa0, 0x2c, 0x1d, 0xe4, 0xcd, 0xcd, - 0xad, 0x0b, 0x18, 0x98, 0xeb, 0x39, 0xe5, 0x48, 0x0d, 0x40, 0x8e, 0x1e, 0x12, 0xe8, 0xdc, 0xfc, 0xac, 0xe8, 0x42, - 0x25, 0x13, 0x97, 0x63, 0xfc, 0xc5, 0xbb, 0xcd, 0x1b, 0x04, 0x37, 0x37, 0x7a, 0x93, 0xdf, 0xdc, 0x04, 0xd8, 0xb7, - 0x2a, 0x0f, 0x3c, 0x5e, 0x30, 0x18, 0x96, 0x31, 0xa5, 0xf4, 0xc6, 0x6f, 0xb6, 0xab, 0xc6, 0xde, 0xd3, 0x0a, 0xef, - 0x60, 0x79, 0x74, 0xe3, 0x5b, 0x5e, 0x98, 0x03, 0x0e, 0xf0, 0x66, 0x03, 0x3e, 0xec, 0xbd, 0x09, 0x73, 0x74, 0x70, - 0xf0, 0x26, 0x14, 0xa8, 0x7f, 0xcd, 0xf4, 0x9d, 0x1b, 0xb8, 0x61, 0x0f, 0xb8, 0x1e, 0xbe, 0xf0, 0x10, 0xe0, 0x9a, - 0x6d, 0x4a, 0x36, 0x6f, 0x75, 0xd0, 0x8b, 0x18, 0x82, 0x6a, 0x43, 0x68, 0x5f, 0x0b, 0x12, 0xe8, 0xf5, 0x8d, 0x0f, - 0xed, 0x1e, 0x23, 0x0c, 0x58, 0xf8, 0xd2, 0x49, 0x8e, 0x45, 0x33, 0x56, 0x4c, 0x58, 0xb1, 0x5a, 0xbd, 0xa7, 0xc6, - 0xf1, 0x6d, 0x23, 0x46, 0x63, 0xde, 0x6b, 0x34, 0xa8, 0x1e, 0x3f, 0x88, 0x0f, 0x74, 0x88, 0xf7, 0xdf, 0x84, 0x05, - 0x42, 0x60, 0x61, 0xc4, 0xf3, 0x85, 0x73, 0xf2, 0x4a, 0x6a, 0xeb, 0x52, 0xa0, 0xb2, 0x91, 0x8c, 0xb4, 0xf0, 0x94, - 0x24, 0xe5, 0x1a, 0x9d, 0x4f, 0x7b, 0x8d, 0x46, 0x86, 0x44, 0x98, 0x0c, 0xb2, 0x21, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, - 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0xb2, 0xf3, 0x5d, 0x9a, 0xb1, 0xc6, 0x8f, 0xe9, 0xda, 0x03, 0xc6, 0x63, 0xea, - 0x11, 0x89, 0x5d, 0x40, 0x96, 0x06, 0xc8, 0xb9, 0x03, 0xb2, 0xd4, 0x40, 0xce, 0x51, 0x7f, 0x0e, 0xd1, 0x8a, 0x72, - 0x14, 0x6f, 0x51, 0xf4, 0x7a, 0x5c, 0x4d, 0xeb, 0xb3, 0x81, 0xb9, 0x0e, 0xed, 0x60, 0x97, 0x03, 0x1e, 0x3a, 0xb1, - 0x6e, 0x80, 0x39, 0x59, 0x06, 0x81, 0x0e, 0x31, 0x8b, 0xef, 0xf4, 0x9f, 0xe8, 0x0e, 0xdf, 0x9b, 0x1f, 0xf7, 0x9e, - 0x32, 0xe9, 0x79, 0x4d, 0xdb, 0xc0, 0x6d, 0x40, 0xb6, 0x20, 0x0a, 0x00, 0xad, 0x6d, 0x74, 0x41, 0x59, 0x7f, 0x70, - 0x2d, 0x37, 0x71, 0x20, 0x64, 0x83, 0xe4, 0x58, 0x7a, 0xa4, 0xf3, 0xcf, 0x3f, 0x03, 0xd4, 0x97, 0x10, 0xc6, 0xc7, - 0x9e, 0x6c, 0xcd, 0x36, 0x6a, 0x04, 0x51, 0x10, 0x87, 0x2e, 0x4a, 0x04, 0xec, 0x8c, 0x20, 0xf0, 0x1e, 0x5b, 0x29, - 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x3d, 0xa8, 0x2a, 0xee, 0xc5, 0xc5, 0x72, 0x33, 0xca, 0x90, 0x86, 0xaa, 0xd4, 0x21, - 0x5e, 0x90, 0x79, 0x81, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0x06, 0x72, 0xe8, 0x3d, 0x29, 0x56, 0x5d, 0x87, 0x2b, 0x7f, - 0xe1, 0x42, 0x9a, 0x0f, 0xd4, 0x70, 0xb5, 0x32, 0x7f, 0xc9, 0x07, 0x2d, 0xcd, 0xc0, 0xdb, 0x70, 0xde, 0x6d, 0xbc, - 0xdc, 0x2d, 0x8b, 0x45, 0x4a, 0xfc, 0x0e, 0x56, 0x83, 0x2e, 0x68, 0x9f, 0x9d, 0x6a, 0xdb, 0x41, 0x7d, 0xae, 0x35, - 0x0a, 0x5e, 0xc8, 0xdc, 0xea, 0x48, 0xc3, 0x73, 0xe5, 0xe7, 0xd5, 0x42, 0xdf, 0x26, 0x79, 0x19, 0xc1, 0x14, 0x8e, - 0x94, 0x08, 0xcc, 0xc6, 0x35, 0x9d, 0x84, 0x1f, 0x75, 0x2a, 0x69, 0x59, 0x48, 0x80, 0x02, 0x47, 0xfa, 0x72, 0x5e, - 0x47, 0xa8, 0x67, 0x68, 0x07, 0x91, 0xf3, 0x4c, 0x68, 0xea, 0xb2, 0xa5, 0x0d, 0x25, 0x15, 0xcc, 0xc4, 0x42, 0xb2, - 0xc5, 0x1c, 0xce, 0xf7, 0x32, 0x2d, 0xc9, 0x78, 0xf2, 0xa5, 0x9e, 0x02, 0xe6, 0x9f, 0x77, 0x6a, 0xc6, 0xf2, 0x45, - 0x60, 0xe7, 0xf9, 0xca, 0x88, 0xfb, 0x6f, 0x5e, 0xe0, 0xc7, 0xa4, 0x73, 0xf8, 0x0a, 0x7f, 0xa4, 0xe4, 0x71, 0xe3, - 0x15, 0x9e, 0x70, 0x62, 0x78, 0x83, 0xe8, 0xcd, 0xeb, 0xeb, 0x17, 0xef, 0x5e, 0xbc, 0x7f, 0x7a, 0xf3, 0xe2, 0xd5, - 0xb3, 0x17, 0xaf, 0x5e, 0xbc, 0xfb, 0x88, 0xff, 0xa6, 0xe4, 0xd5, 0x51, 0xfb, 0xac, 0x85, 0x3f, 0x90, 0x57, 0x47, - 0x1d, 0x7c, 0xa7, 0xc8, 0xab, 0xa3, 0x13, 0x9c, 0xe5, 0xe4, 0xd5, 0x61, 0xe7, 0xe8, 0x18, 0x2f, 0x94, 0x69, 0x32, - 0x13, 0x93, 0x76, 0x0b, 0xff, 0x6d, 0xbf, 0x40, 0xbc, 0xaf, 0x66, 0x31, 0x61, 0x9b, 0xc6, 0x0f, 0x50, 0x86, 0x8e, - 0xa4, 0x36, 0x44, 0x39, 0xf7, 0xd0, 0x69, 0x9a, 0xfb, 0xe8, 0x64, 0x62, 0x28, 0x83, 0x0d, 0x23, 0xa0, 0x15, 0x27, - 0xb6, 0x1d, 0x7e, 0xd4, 0x66, 0xc7, 0x40, 0x9f, 0x78, 0x29, 0x1c, 0x97, 0x2a, 0x9c, 0xb6, 0xd5, 0x62, 0x8c, 0x33, - 0x21, 0x8a, 0x70, 0x01, 0x8c, 0x80, 0xd6, 0x5a, 0xf0, 0xa3, 0x32, 0x58, 0x93, 0x3c, 0x27, 0xed, 0x7e, 0x3b, 0x96, - 0xe7, 0xa4, 0xd3, 0xef, 0xc0, 0x9f, 0x6e, 0xbf, 0x1b, 0xb7, 0x5b, 0xe8, 0xd0, 0x1b, 0xc7, 0x1f, 0x35, 0xb4, 0x1e, - 0x0c, 0xb1, 0xed, 0x42, 0xfe, 0x5d, 0x28, 0xa7, 0xd2, 0x93, 0x56, 0x1d, 0xdb, 0xee, 0xc9, 0x73, 0xa6, 0xf5, 0xb0, - 0xfc, 0x07, 0x40, 0x6d, 0xed, 0x4f, 0x52, 0x6e, 0x1c, 0xfb, 0x8b, 0x1f, 0x49, 0x54, 0x8b, 0x08, 0x13, 0xb2, 0x55, - 0x0b, 0x01, 0xd3, 0xa8, 0xb3, 0xc1, 0x1c, 0x28, 0x92, 0xa2, 0x50, 0x2e, 0xaa, 0x7d, 0xde, 0x14, 0x28, 0x9a, 0x8b, - 0x79, 0x58, 0x53, 0x35, 0xfc, 0xea, 0x99, 0x39, 0xee, 0x73, 0xf9, 0x8a, 0xbe, 0x0a, 0x6b, 0x3c, 0x8f, 0xcf, 0xda, - 0xf9, 0xdb, 0xe2, 0x17, 0x6b, 0x45, 0x51, 0x03, 0x57, 0x09, 0x58, 0x37, 0xaa, 0xa6, 0x3a, 0x87, 0xe7, 0xfb, 0x58, - 0x43, 0x5d, 0x10, 0x8f, 0x7a, 0xfe, 0x54, 0x9a, 0x71, 0x95, 0xca, 0x68, 0xa7, 0x88, 0xd6, 0x66, 0x41, 0x4e, 0x11, - 0x7d, 0x9e, 0x6b, 0x20, 0x08, 0xc2, 0x07, 0x72, 0x08, 0x07, 0xbe, 0x19, 0xa0, 0xd0, 0x74, 0x0e, 0xd4, 0x4a, 0x95, - 0x99, 0x90, 0xfe, 0xd4, 0xb1, 0x09, 0x40, 0xf3, 0x54, 0xa9, 0xa0, 0xf4, 0x27, 0x16, 0xc8, 0x1b, 0xfa, 0x6f, 0xfe, - 0x06, 0x38, 0x0c, 0x35, 0x2a, 0xfa, 0x76, 0x35, 0xb2, 0x9e, 0xdf, 0x3e, 0x6b, 0x1d, 0xbd, 0xf2, 0xf2, 0xd3, 0xdc, - 0xd9, 0x7b, 0xfc, 0xe5, 0x51, 0x72, 0x13, 0x4d, 0xab, 0x8d, 0x5d, 0x20, 0xb4, 0x9e, 0x0f, 0x90, 0x43, 0x85, 0x8e, - 0xf4, 0x4b, 0x86, 0x3d, 0xa4, 0x0e, 0x49, 0xbb, 0x05, 0xd1, 0xcb, 0x76, 0x50, 0xbe, 0x9f, 0x36, 0x60, 0xaa, 0xa2, - 0xbb, 0x26, 0xd0, 0x6a, 0x78, 0xdc, 0xe8, 0xbe, 0xc9, 0xa3, 0x7b, 0x9c, 0x7b, 0x38, 0xc3, 0x0e, 0x59, 0x43, 0x1e, - 0x4a, 0x64, 0xa3, 0xbe, 0x9a, 0x0d, 0xa0, 0x68, 0xde, 0x31, 0x8f, 0xec, 0x39, 0xe3, 0xa8, 0xf3, 0x66, 0xd4, 0x3d, - 0x7c, 0x75, 0x70, 0x10, 0x8a, 0x06, 0x79, 0x8c, 0xf0, 0x92, 0x82, 0x11, 0x35, 0x38, 0x9d, 0x71, 0xc3, 0xc4, 0xc7, - 0xb9, 0x47, 0x1d, 0x17, 0x79, 0xed, 0x58, 0xab, 0x3a, 0x2b, 0x77, 0x83, 0x1b, 0x53, 0x07, 0x35, 0xbc, 0x34, 0x33, - 0xba, 0x4e, 0x0d, 0xca, 0x35, 0x0f, 0x31, 0xd8, 0x96, 0x8d, 0x8f, 0x14, 0xfd, 0xf0, 0xb8, 0xf9, 0xca, 0x9b, 0x70, - 0xcd, 0x34, 0xe9, 0x71, 0xe3, 0x31, 0xfa, 0xe1, 0xb1, 0xe7, 0xe3, 0xc7, 0x2b, 0xf6, 0xc4, 0x71, 0x23, 0x3f, 0x19, - 0xae, 0xf4, 0x27, 0x90, 0xec, 0x0b, 0xf2, 0x13, 0x60, 0x39, 0x25, 0x3f, 0x85, 0xa2, 0x99, 0x83, 0x41, 0xd7, 0x4f, - 0x61, 0x01, 0x3f, 0x32, 0xf2, 0x53, 0x08, 0xd8, 0x8e, 0xa7, 0xfa, 0x47, 0x51, 0xbd, 0xae, 0x0a, 0x6a, 0x14, 0xe3, - 0x5e, 0x56, 0xac, 0x56, 0xf2, 0xe0, 0x40, 0x98, 0x5f, 0xf4, 0x22, 0x39, 0x38, 0xc8, 0xce, 0xa7, 0x9e, 0xed, 0xad, - 0xda, 0x45, 0x5f, 0x34, 0x42, 0x61, 0xcf, 0x34, 0x8d, 0xfb, 0x33, 0xfe, 0xe4, 0x53, 0x56, 0xdd, 0x40, 0xf3, 0xb8, - 0xf3, 0xf0, 0xf4, 0x0c, 0xc3, 0xbf, 0x0f, 0xbd, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, 0xb3, 0xe6, 0x69, 0x85, 0x6c, - 0x17, 0x1e, 0x3e, 0x63, 0x86, 0x9a, 0xf2, 0xe0, 0x80, 0x9f, 0x7b, 0xb8, 0x8c, 0x19, 0x6a, 0x78, 0x16, 0x7b, 0x0f, - 0x4a, 0x7b, 0x32, 0xcd, 0x35, 0xc1, 0xab, 0xb6, 0x7c, 0x50, 0x0c, 0xcf, 0x95, 0xa5, 0x26, 0x7e, 0xec, 0xeb, 0x9c, - 0xb4, 0xec, 0x26, 0xeb, 0xc9, 0x66, 0x7e, 0xd1, 0xee, 0x21, 0x41, 0xf2, 0x86, 0xbc, 0xb8, 0x68, 0x63, 0x50, 0xc9, - 0xf7, 0x73, 0x22, 0x62, 0x49, 0x9c, 0x7f, 0xde, 0x32, 0x13, 0x71, 0x8e, 0xa7, 0x3c, 0x2e, 0xe5, 0xec, 0xd7, 0xce, - 0x7a, 0x5a, 0x7b, 0x4c, 0xea, 0x9e, 0x19, 0x96, 0xfd, 0xbc, 0xf4, 0xf4, 0x83, 0x4d, 0x9a, 0x0f, 0xe1, 0xd1, 0xc0, - 0x12, 0xf3, 0x98, 0x71, 0x6f, 0x63, 0x10, 0x94, 0x39, 0x6f, 0xb4, 0x21, 0x13, 0x3e, 0xd7, 0x71, 0x0e, 0x03, 0xd5, - 0x85, 0xcf, 0x81, 0x4c, 0x25, 0x95, 0x61, 0xb6, 0x6b, 0x18, 0x0a, 0x48, 0x28, 0x70, 0x41, 0x98, 0x27, 0xc1, 0xc3, - 0xed, 0x87, 0x47, 0x38, 0xea, 0xe4, 0xc2, 0x4c, 0xee, 0x3c, 0x87, 0xee, 0xe4, 0xf0, 0x5c, 0xf5, 0x90, 0x6c, 0x34, - 0x2c, 0xb7, 0x7d, 0x21, 0xf5, 0x20, 0x9a, 0xed, 0xe1, 0x05, 0xeb, 0xa1, 0xbc, 0xd9, 0x2c, 0x0d, 0x20, 0x2f, 0x5a, - 0xab, 0x55, 0x7e, 0xee, 0x1a, 0xe9, 0xbb, 0x73, 0x5c, 0xf3, 0x5d, 0x4e, 0xf0, 0xfc, 0x4d, 0x90, 0x41, 0x00, 0x54, - 0x15, 0xf8, 0x6c, 0x31, 0x0f, 0x70, 0xa0, 0xdf, 0x93, 0x83, 0xbf, 0xfa, 0x1d, 0xb0, 0x00, 0x07, 0xf6, 0x89, 0xb9, - 0x60, 0x58, 0x0d, 0x96, 0x27, 0x65, 0x74, 0x74, 0x1e, 0xdd, 0x00, 0xe3, 0xa0, 0xfe, 0x02, 0x4e, 0xbb, 0xfc, 0x1d, - 0x65, 0x36, 0x4e, 0x88, 0x74, 0xaf, 0x9e, 0xd9, 0x51, 0xad, 0x77, 0x7b, 0x66, 0x72, 0x1c, 0xb8, 0xaa, 0xf0, 0x7a, - 0xc0, 0x77, 0x9e, 0x5d, 0x6c, 0xdb, 0xd7, 0xbe, 0x97, 0x65, 0x0f, 0xc0, 0x79, 0xaf, 0xd7, 0x08, 0xff, 0x26, 0x76, - 0x3e, 0xfd, 0x1b, 0xdc, 0x88, 0xfc, 0x09, 0x55, 0x34, 0x68, 0xbc, 0xd6, 0x86, 0x6f, 0x46, 0xce, 0xea, 0x7d, 0x6b, - 0x1c, 0xec, 0xdf, 0xea, 0x1e, 0x22, 0x37, 0xd4, 0x5e, 0x29, 0x32, 0xb2, 0xaf, 0x8e, 0xd7, 0x21, 0x3c, 0xd3, 0xb7, - 0x1d, 0xf0, 0x70, 0x63, 0xa4, 0xe0, 0x4f, 0x6c, 0xf8, 0x24, 0x0a, 0x21, 0x51, 0x6b, 0x5e, 0xcc, 0x90, 0x62, 0xfa, - 0xd0, 0x1e, 0xaf, 0x6b, 0xe4, 0x73, 0xdd, 0xe3, 0xbc, 0x4e, 0x4c, 0xab, 0x6e, 0xb4, 0xd4, 0xc1, 0x36, 0x59, 0x70, - 0x56, 0xf5, 0xae, 0x25, 0x94, 0xea, 0x41, 0x37, 0xfd, 0x28, 0x67, 0xb3, 0xad, 0x5f, 0x39, 0x36, 0xcf, 0xbe, 0xe5, - 0x60, 0xc8, 0xbb, 0x5f, 0x46, 0xab, 0xba, 0x80, 0x63, 0x37, 0xf4, 0x20, 0x2b, 0xc8, 0xc5, 0xd2, 0x3e, 0xc9, 0xc6, - 0x07, 0x62, 0xb8, 0x2e, 0x1f, 0x68, 0xf3, 0xf0, 0xa0, 0x1a, 0xa9, 0x4c, 0x7c, 0xce, 0xc0, 0xbd, 0x6e, 0x58, 0xd3, - 0x0f, 0xf1, 0x7f, 0xe0, 0x80, 0xaf, 0x90, 0x34, 0x36, 0xea, 0x27, 0x78, 0x38, 0x09, 0x14, 0xde, 0xa6, 0xee, 0x27, - 0xe1, 0x7b, 0xa8, 0xd6, 0x75, 0x2a, 0xc6, 0x09, 0xb4, 0xae, 0x58, 0x29, 0x0b, 0x7b, 0xc7, 0x5d, 0x88, 0xd6, 0xb1, - 0x75, 0x18, 0xb5, 0xaf, 0x2d, 0x5d, 0xe6, 0xe0, 0xff, 0xc2, 0x45, 0xfe, 0xac, 0x80, 0xf0, 0x59, 0xbe, 0x3e, 0xed, - 0x67, 0xe1, 0x3f, 0x27, 0x3c, 0x80, 0x7b, 0xc2, 0x92, 0xe7, 0x2c, 0x9f, 0xc0, 0x86, 0x05, 0xca, 0x81, 0x42, 0xe5, - 0x58, 0xae, 0x56, 0xa1, 0xd4, 0x41, 0x15, 0x6c, 0x4c, 0x5d, 0xfb, 0x78, 0x86, 0xd6, 0xdf, 0x41, 0x5d, 0xec, 0xd4, - 0x23, 0xda, 0x84, 0x15, 0xf9, 0x97, 0x4e, 0x79, 0xe2, 0xf5, 0xb5, 0xab, 0x0f, 0x59, 0x4d, 0xb9, 0x1f, 0x6a, 0x7d, - 0xef, 0x3b, 0x3e, 0x63, 0x62, 0x01, 0xaf, 0x16, 0x61, 0x46, 0x24, 0x53, 0xee, 0x1b, 0x28, 0x08, 0x84, 0x9c, 0xe3, - 0x3e, 0x3e, 0x02, 0x5f, 0xe5, 0x68, 0x9d, 0x48, 0xdc, 0x5b, 0x18, 0x81, 0x8e, 0x55, 0x19, 0xf4, 0x03, 0x70, 0x5a, - 0x02, 0x11, 0x8a, 0x90, 0x80, 0xe5, 0x69, 0xd0, 0x0f, 0xb4, 0x8f, 0x54, 0x00, 0x56, 0x63, 0xa0, 0xe4, 0x0e, 0xf0, - 0x3c, 0xaf, 0x88, 0x98, 0x5f, 0x53, 0x79, 0x95, 0x58, 0xac, 0xcd, 0xb4, 0x8f, 0x3a, 0x15, 0x08, 0x8b, 0x64, 0x53, - 0x50, 0x56, 0x1b, 0xea, 0x02, 0x2c, 0x88, 0xc6, 0x58, 0x1e, 0xdd, 0x00, 0x37, 0xc7, 0x52, 0x5b, 0x74, 0xc9, 0xaf, - 0x41, 0x3d, 0x1d, 0x17, 0xf8, 0x46, 0x33, 0x6c, 0x69, 0x4c, 0xd7, 0x84, 0xe3, 0x84, 0x14, 0x11, 0xbd, 0x83, 0xa0, - 0x12, 0x33, 0x9e, 0xc7, 0x19, 0x9e, 0xd1, 0xbb, 0x78, 0x8a, 0x67, 0x3c, 0x7f, 0x62, 0x96, 0x3d, 0x4e, 0x21, 0xc9, - 0x7d, 0x2c, 0xd6, 0x44, 0xbf, 0x89, 0xf5, 0xbb, 0x64, 0xc5, 0x63, 0xe0, 0x55, 0x64, 0x88, 0x7a, 0xa9, 0xb6, 0x29, - 0x67, 0xaa, 0x32, 0x5e, 0x7f, 0xad, 0x42, 0x8a, 0x13, 0x9c, 0xa1, 0x28, 0x13, 0x98, 0xf5, 0x65, 0xfc, 0x1a, 0x02, - 0x4a, 0x27, 0xd8, 0xbc, 0xa7, 0xc5, 0xef, 0x58, 0xf6, 0x4c, 0x14, 0xef, 0xf5, 0x96, 0xcf, 0x10, 0x14, 0x02, 0x17, - 0x15, 0xd9, 0x84, 0xdb, 0xbd, 0x45, 0x5f, 0x54, 0x4d, 0xd1, 0x3b, 0xd3, 0x94, 0x1d, 0xe2, 0x14, 0x22, 0xf1, 0x46, - 0x53, 0xde, 0x68, 0x63, 0xd6, 0x6f, 0x7d, 0xa7, 0xd1, 0x29, 0x2a, 0x4b, 0x22, 0x0c, 0x4f, 0x04, 0x37, 0xf3, 0x58, - 0x10, 0xd9, 0xcc, 0xad, 0x84, 0xb7, 0xd4, 0xc0, 0x8e, 0x73, 0x9c, 0x88, 0x45, 0xae, 0x62, 0xe1, 0xe1, 0x0d, 0xad, - 0x36, 0xd7, 0xf2, 0xce, 0x40, 0x4c, 0xe1, 0x7b, 0xf3, 0x83, 0xe1, 0x1b, 0xad, 0xe2, 0x7f, 0x0b, 0x86, 0x3d, 0x32, - 0x96, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x19, 0x7e, 0xf2, 0x0e, 0xc0, 0x67, 0x58, 0xc8, 0x7b, 0x48, 0x65, 0x3a, - 0xf5, 0x1e, 0x52, 0x19, 0xa4, 0x6a, 0x57, 0xf2, 0x7d, 0x59, 0x29, 0x8b, 0xfc, 0x06, 0x49, 0x8e, 0x4b, 0x75, 0xb0, - 0x20, 0x32, 0x82, 0x76, 0xb5, 0x28, 0x37, 0xe3, 0x39, 0xc4, 0x14, 0x84, 0xc6, 0xcd, 0x37, 0xbd, 0x83, 0xef, 0x7b, - 0x93, 0xcf, 0x5c, 0xfe, 0xbd, 0xc9, 0xd7, 0x1d, 0x39, 0x8c, 0xaf, 0xdf, 0x76, 0x6a, 0xcb, 0x78, 0x61, 0xb1, 0xf6, - 0x43, 0xf9, 0x82, 0x4b, 0x4b, 0xbf, 0x94, 0x4d, 0xda, 0x78, 0xe2, 0x21, 0x65, 0xb3, 0xe2, 0xe1, 0x3a, 0xb8, 0xdd, - 0x3a, 0x0c, 0x79, 0x93, 0xb4, 0x11, 0x3a, 0xb4, 0xc2, 0x55, 0x1e, 0x6a, 0xc9, 0xe9, 0xf0, 0xf1, 0x11, 0xdc, 0xbd, - 0xcc, 0xf2, 0x0d, 0x5f, 0x29, 0x53, 0xad, 0xd9, 0x6e, 0x1d, 0xf2, 0x9d, 0x55, 0x1a, 0x6d, 0x3c, 0x63, 0x64, 0x09, - 0xce, 0x65, 0xb4, 0x30, 0xaa, 0x06, 0xf0, 0x21, 0x7d, 0x91, 0xff, 0xb6, 0xa0, 0xa9, 0xfe, 0x3e, 0x34, 0x29, 0xaf, - 0x17, 0xca, 0x25, 0x35, 0x39, 0x0c, 0xa2, 0x83, 0x6c, 0x49, 0x2f, 0x27, 0xe4, 0x47, 0x24, 0xea, 0xa2, 0xf3, 0x76, - 0x3f, 0xea, 0x1e, 0xf2, 0x43, 0x1e, 0x03, 0x0f, 0x1b, 0x36, 0x5d, 0x85, 0x66, 0xdb, 0xd5, 0xb9, 0x5a, 0x8c, 0x78, - 0x62, 0x9b, 0xaf, 0x3a, 0x28, 0x53, 0xcd, 0x1c, 0x21, 0x0b, 0x50, 0xcc, 0xf5, 0xe2, 0x65, 0xd7, 0xbb, 0x39, 0xe4, - 0x31, 0xf4, 0x03, 0xb5, 0x3a, 0xa6, 0x56, 0x39, 0xb8, 0xdf, 0x16, 0x80, 0x60, 0xae, 0xa3, 0xda, 0x5c, 0x4c, 0x7a, - 0x33, 0xac, 0x3a, 0x3b, 0xe4, 0xd5, 0x08, 0xfd, 0x32, 0xdb, 0xfd, 0xb9, 0xa9, 0x55, 0x5d, 0x1e, 0x7a, 0x10, 0xf9, - 0x6d, 0xc1, 0x73, 0xbf, 0x53, 0xbf, 0x5b, 0x9b, 0xe3, 0x77, 0x5a, 0x9f, 0xa5, 0x57, 0x64, 0xbb, 0xd7, 0xad, 0x99, - 0xd6, 0x67, 0x7b, 0x0d, 0x3e, 0x82, 0x30, 0x29, 0xbd, 0xd2, 0x89, 0x90, 0x21, 0x3f, 0xfc, 0x80, 0x6c, 0xeb, 0xaf, - 0x17, 0xca, 0xe5, 0x97, 0x88, 0x00, 0xd9, 0x55, 0xd7, 0x65, 0x75, 0xe8, 0xa3, 0x6c, 0xe2, 0xd5, 0x21, 0xf7, 0x56, - 0xee, 0xe9, 0xdd, 0x5c, 0xc4, 0x0e, 0x5f, 0xfb, 0xad, 0x78, 0x0b, 0x39, 0x81, 0x78, 0xd8, 0xee, 0xfc, 0xb2, 0x20, - 0x67, 0x37, 0xb7, 0x50, 0xd2, 0x9f, 0xb8, 0x2b, 0xfd, 0x81, 0x99, 0xeb, 0x06, 0x7e, 0x1e, 0x75, 0x61, 0xea, 0x9b, - 0x3d, 0x1c, 0x76, 0xa0, 0x0f, 0x0d, 0x87, 0xcd, 0x06, 0x5d, 0x66, 0x05, 0x91, 0x2b, 0x5e, 0x18, 0x3c, 0xbb, 0x20, - 0xed, 0x3e, 0x8f, 0xed, 0x66, 0xd2, 0xa2, 0x51, 0xbb, 0xc9, 0xbd, 0x99, 0x01, 0x7e, 0xd9, 0xb2, 0x7e, 0x11, 0xb7, - 0x4e, 0x1e, 0x94, 0x5c, 0xb1, 0x6a, 0x7d, 0x2a, 0x78, 0xd5, 0x1b, 0x8e, 0x37, 0xd3, 0xdd, 0xba, 0xc1, 0xed, 0xae, - 0x83, 0x27, 0xbc, 0xc0, 0x62, 0xd0, 0xda, 0x4d, 0x7c, 0x02, 0x1c, 0x50, 0xd4, 0x7a, 0xd8, 0x05, 0x17, 0xca, 0x12, - 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x0c, 0x1c, 0x4d, 0x49, 0x8f, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, 0xd8, 0xc1, - 0x51, 0xbb, 0xdd, 0xe9, 0xe2, 0xe8, 0xa4, 0x0b, 0x03, 0x6d, 0x44, 0xdd, 0xc3, 0x59, 0x6e, 0x00, 0xe8, 0xe5, 0xac, - 0x6d, 0xbb, 0x8f, 0x21, 0x5a, 0x93, 0x2f, 0x5e, 0xf3, 0xc3, 0x30, 0x6c, 0x47, 0x0f, 0x5b, 0xed, 0xee, 0x59, 0x03, - 0x00, 0xd4, 0xb4, 0x1f, 0xb6, 0xc6, 0xeb, 0x85, 0xaa, 0x57, 0x29, 0x11, 0xbe, 0x5e, 0xad, 0xe1, 0xaa, 0x35, 0xda, - 0xeb, 0x6a, 0x0a, 0xae, 0xaa, 0x15, 0xce, 0x4d, 0x11, 0xa7, 0xb4, 0xf1, 0xb7, 0x45, 0x68, 0x06, 0x12, 0x82, 0x74, - 0x1e, 0x75, 0x3b, 0x5d, 0x64, 0xc6, 0xa2, 0x2c, 0x7e, 0x94, 0xfb, 0x64, 0xab, 0x48, 0x43, 0x01, 0x92, 0x94, 0xb3, - 0x13, 0x0b, 0x90, 0xa8, 0x39, 0xb9, 0x68, 0x37, 0x67, 0x2c, 0x72, 0x13, 0xd0, 0xa9, 0xb0, 0x9c, 0xe5, 0x2a, 0xd8, - 0x24, 0x0f, 0x10, 0xe7, 0x60, 0x5c, 0xf4, 0xb0, 0xdb, 0x7f, 0x18, 0x75, 0x4f, 0x3b, 0x86, 0xe8, 0xf1, 0xf3, 0x4e, - 0x2d, 0x4d, 0x4f, 0x3d, 0xea, 0xea, 0x34, 0xe8, 0x3a, 0x7a, 0xd8, 0x85, 0x32, 0x36, 0xc5, 0x2f, 0x05, 0x51, 0x26, - 0xaa, 0x62, 0x10, 0x5a, 0x22, 0xae, 0xe5, 0x9e, 0xd6, 0xb2, 0xcf, 0x4e, 0x8e, 0x1f, 0x76, 0x7d, 0xa8, 0x95, 0xb3, - 0xd0, 0x0b, 0x6d, 0x27, 0xe2, 0x66, 0x07, 0x4b, 0x8b, 0x0e, 0xa3, 0x6e, 0xbc, 0x35, 0x41, 0xb3, 0x69, 0x0e, 0x35, - 0x0e, 0x78, 0x0a, 0xc7, 0x4b, 0x69, 0xf5, 0x25, 0xde, 0xfd, 0x58, 0x65, 0x68, 0xe2, 0x2b, 0x9c, 0xdd, 0x3d, 0xa5, - 0xf7, 0x90, 0xa4, 0x7f, 0x55, 0x79, 0x45, 0xf3, 0xaf, 0x54, 0xbe, 0xa1, 0x10, 0x3a, 0x23, 0x1f, 0x06, 0x36, 0xb0, - 0x77, 0x3d, 0xf7, 0x27, 0x70, 0x11, 0x66, 0x39, 0x5c, 0x68, 0x3a, 0x25, 0x68, 0xc5, 0x0b, 0x8c, 0x7c, 0x56, 0x57, - 0x0f, 0xab, 0xcf, 0x63, 0x6b, 0x52, 0xe0, 0xeb, 0xb6, 0x9e, 0xf3, 0xef, 0x95, 0x8b, 0xca, 0xab, 0xec, 0xa8, 0x8b, - 0x22, 0x7b, 0x59, 0x1e, 0xb5, 0x51, 0xe4, 0x99, 0x90, 0xd8, 0x23, 0x39, 0x49, 0xc8, 0x20, 0xb8, 0x0b, 0x70, 0x70, - 0x1f, 0xe0, 0xc0, 0xf8, 0x30, 0x7f, 0x00, 0x37, 0xf2, 0x00, 0x07, 0xc6, 0x95, 0x39, 0xc0, 0x81, 0x62, 0x39, 0x44, - 0xd4, 0x0a, 0x86, 0x38, 0x83, 0xd2, 0xda, 0xb3, 0xba, 0x2c, 0x7d, 0xe5, 0xbe, 0x4a, 0xd7, 0x6b, 0x93, 0xe2, 0x49, - 0x99, 0x53, 0xbd, 0x43, 0xcd, 0x8b, 0xd0, 0x01, 0x75, 0xcc, 0x7a, 0x80, 0x41, 0x00, 0xa1, 0xf7, 0xee, 0x45, 0xb9, - 0x2a, 0x18, 0x07, 0x3b, 0x86, 0x95, 0x06, 0x9f, 0xf3, 0xc0, 0x3f, 0xc3, 0x02, 0x3c, 0xce, 0x5d, 0x61, 0x10, 0x2b, - 0xdc, 0xef, 0x4c, 0x88, 0xb9, 0xfb, 0xad, 0x44, 0xf9, 0x0b, 0xde, 0x21, 0xb1, 0x16, 0x2d, 0x60, 0xb9, 0x65, 0x62, - 0xff, 0x8c, 0x58, 0x7d, 0x04, 0x37, 0x63, 0x1b, 0x9f, 0x0d, 0x24, 0xc2, 0x1b, 0x2d, 0x50, 0x39, 0xf9, 0xf0, 0xc6, - 0xc4, 0x0a, 0xd2, 0x9f, 0x10, 0x2c, 0x0c, 0xe2, 0x01, 0x0b, 0xb8, 0xd0, 0x98, 0x14, 0x4c, 0xca, 0xc0, 0x04, 0xd1, - 0x0b, 0x44, 0xee, 0x5e, 0x45, 0x74, 0x29, 0xe3, 0x3c, 0xd0, 0x1d, 0xd6, 0x67, 0x6b, 0xc4, 0xe1, 0x4c, 0x14, 0x32, - 0x36, 0x4f, 0xa4, 0x38, 0x30, 0xce, 0xcb, 0xf7, 0x07, 0xe3, 0x2c, 0x59, 0x63, 0x73, 0x87, 0x5d, 0x16, 0xb2, 0x57, - 0xda, 0x7e, 0xa9, 0x24, 0x59, 0x7f, 0x6b, 0x42, 0xb2, 0x36, 0x23, 0x6f, 0xa2, 0xd5, 0x80, 0xaa, 0x48, 0x1a, 0x50, - 0xd8, 0x44, 0x63, 0x89, 0x97, 0x65, 0xc9, 0x78, 0x59, 0x2e, 0xc3, 0x49, 0xab, 0xb5, 0x5e, 0xe3, 0x82, 0xe9, 0xa8, - 0x30, 0x3b, 0x4b, 0x40, 0xbe, 0x9c, 0x8a, 0x5b, 0x2f, 0x57, 0xc6, 0xe5, 0x2c, 0xf5, 0x12, 0x05, 0x9e, 0x11, 0x6c, - 0xb0, 0xc6, 0x5f, 0xb9, 0xe4, 0x00, 0x4f, 0x3b, 0xbb, 0x91, 0x10, 0x19, 0xa3, 0x10, 0x3c, 0xcc, 0x6b, 0x72, 0x8d, - 0xa7, 0x3c, 0x65, 0xbb, 0xdb, 0x04, 0x33, 0xe6, 0x7f, 0xaf, 0x45, 0x87, 0x40, 0x86, 0xdd, 0xd3, 0xa8, 0x03, 0x8b, - 0xb8, 0x82, 0x0e, 0x7c, 0x19, 0x3c, 0xf5, 0x71, 0x33, 0xa3, 0xf7, 0x62, 0xa1, 0x00, 0x2e, 0x0b, 0x25, 0xde, 0xd8, - 0xb8, 0x07, 0xfb, 0x2d, 0xec, 0x42, 0x20, 0x2c, 0x21, 0x64, 0x40, 0x0b, 0x9b, 0x10, 0x15, 0x2d, 0x3c, 0x12, 0x4a, - 0x89, 0x59, 0xdc, 0xc2, 0x3a, 0x5e, 0x44, 0x6b, 0x5d, 0x06, 0xf5, 0xba, 0xc9, 0xdd, 0x5b, 0x92, 0xd5, 0x26, 0x58, - 0x58, 0xe9, 0x50, 0x11, 0xe5, 0xdd, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbf, 0x7e, 0x65, 0x43, 0x36, 0xf3, 0x31, - 0xb8, 0x6c, 0x5a, 0xd5, 0xd8, 0x8d, 0x7e, 0x84, 0x29, 0xac, 0x14, 0xa5, 0x46, 0x38, 0x85, 0x96, 0x5f, 0xe4, 0x2a, - 0x8b, 0xcc, 0xe5, 0xc5, 0x33, 0x51, 0xcc, 0xa8, 0xb9, 0x31, 0xc2, 0x37, 0xb9, 0x7d, 0x75, 0x5d, 0x3f, 0xec, 0x52, - 0x4d, 0xf2, 0xdd, 0xe6, 0x55, 0xc4, 0x22, 0xd1, 0xf2, 0x2b, 0x68, 0x03, 0x74, 0xe5, 0xf2, 0xd1, 0xdc, 0x82, 0xd8, - 0xc0, 0xf7, 0x1e, 0x79, 0x79, 0x6b, 0xa8, 0x4b, 0x10, 0x34, 0xb8, 0xc6, 0x4f, 0x56, 0xf0, 0xc4, 0xbb, 0x2e, 0xd4, - 0xec, 0x91, 0x15, 0x2f, 0x82, 0x56, 0x50, 0x7f, 0x74, 0x56, 0xab, 0x12, 0x5c, 0xd0, 0xd4, 0x28, 0x13, 0x20, 0x7a, - 0x94, 0xef, 0xdb, 0x71, 0x10, 0x4d, 0xdc, 0xdd, 0xf3, 0x45, 0xdb, 0xd1, 0xd9, 0xac, 0x52, 0x27, 0x96, 0x57, 0x26, - 0xe0, 0xe1, 0x68, 0x5e, 0x90, 0x41, 0xd8, 0x4b, 0x64, 0xa5, 0xf6, 0xd0, 0xe5, 0xa2, 0x5e, 0x98, 0x9d, 0xb7, 0x59, - 0xf3, 0x64, 0xb5, 0xca, 0x2e, 0xda, 0xac, 0xdd, 0x35, 0xef, 0xcd, 0x05, 0x32, 0x01, 0x9a, 0xcb, 0xc7, 0x3c, 0x09, - 0x40, 0x3b, 0x3b, 0x4e, 0x74, 0x38, 0x05, 0x17, 0x21, 0x99, 0x2c, 0x54, 0xd5, 0x97, 0x00, 0xe3, 0x52, 0x62, 0xf4, - 0xf8, 0x05, 0xea, 0xb7, 0xe3, 0x6d, 0x57, 0xe9, 0x66, 0xfb, 0xd0, 0xbb, 0x70, 0x29, 0x10, 0xee, 0x40, 0xc8, 0x03, - 0xd0, 0xef, 0x2e, 0x73, 0x30, 0x0d, 0x02, 0x54, 0xce, 0x41, 0xa4, 0xe5, 0xb3, 0xc5, 0xec, 0x59, 0x41, 0xf5, 0x32, - 0x3c, 0xe1, 0x13, 0xae, 0x64, 0x4c, 0x41, 0xba, 0xdd, 0x95, 0xbe, 0xde, 0x2d, 0x41, 0x25, 0xb5, 0xc0, 0xb3, 0x91, - 0xe2, 0xc9, 0x17, 0x69, 0x17, 0x0e, 0x61, 0xbd, 0xb2, 0x12, 0x27, 0x68, 0x8d, 0x33, 0x31, 0xa1, 0x05, 0x57, 0xd3, - 0xd9, 0xbf, 0xb5, 0x3a, 0x6c, 0xa0, 0x86, 0xfa, 0xc2, 0x0a, 0x40, 0x42, 0xf3, 0x74, 0xb5, 0xe2, 0x47, 0xdf, 0xbf, - 0x4f, 0x72, 0x3e, 0xe1, 0x6d, 0xdc, 0xc1, 0xc7, 0xb8, 0x8b, 0xdb, 0x2d, 0xdc, 0xee, 0xc2, 0xd5, 0x7d, 0x92, 0x2d, - 0x52, 0x06, 0xf6, 0xb1, 0xab, 0x95, 0xba, 0x88, 0xce, 0x0e, 0xcb, 0x70, 0xfb, 0xaa, 0x88, 0x2c, 0xba, 0x78, 0x51, - 0xdf, 0x6d, 0xb8, 0xbc, 0x20, 0xf0, 0x63, 0xb5, 0x8d, 0x7d, 0xd5, 0x49, 0xa9, 0x5f, 0xb8, 0x38, 0xee, 0x83, 0x3d, - 0xb7, 0x59, 0xd9, 0x26, 0x98, 0x7d, 0x9b, 0x9f, 0x71, 0xf5, 0xb3, 0xa9, 0x4a, 0xc4, 0x70, 0xd0, 0xab, 0xd0, 0x03, - 0x5d, 0x90, 0xf6, 0xc1, 0x01, 0x58, 0x1d, 0x79, 0xb3, 0xe1, 0x26, 0xfa, 0x01, 0x6f, 0xd6, 0xd2, 0x20, 0x58, 0x01, - 0x18, 0x77, 0xbe, 0xe1, 0x64, 0x69, 0x60, 0xab, 0x80, 0x0a, 0xab, 0xc2, 0x0f, 0x28, 0xe7, 0x93, 0x0a, 0x2d, 0x44, - 0xc3, 0x11, 0x66, 0x23, 0x9d, 0xec, 0xb7, 0xb0, 0x18, 0x8f, 0x25, 0x53, 0x70, 0x74, 0x14, 0xec, 0x2b, 0x2b, 0xa4, - 0x3e, 0x45, 0x46, 0x6c, 0xc2, 0xf3, 0x4b, 0xf5, 0x89, 0x15, 0x42, 0x7f, 0x6a, 0x0d, 0x46, 0x1c, 0xe8, 0x55, 0x0c, - 0x70, 0x92, 0xf1, 0x39, 0x54, 0x9d, 0x14, 0xe0, 0xf4, 0x03, 0x7f, 0x79, 0x1a, 0xfb, 0x6d, 0x02, 0xf9, 0xfa, 0x60, - 0xc2, 0xba, 0xe0, 0xb4, 0xa0, 0xb7, 0xaf, 0xf3, 0x2b, 0xd8, 0x51, 0x97, 0x05, 0xa3, 0x90, 0x0d, 0x49, 0xef, 0xa0, - 0x29, 0xf8, 0x80, 0x36, 0x5f, 0x6a, 0xc0, 0xc5, 0x67, 0xfa, 0xc3, 0x54, 0x74, 0x41, 0x0b, 0xa3, 0xb2, 0x2d, 0x9d, - 0xa9, 0x4f, 0xe9, 0x2a, 0xd3, 0x84, 0x85, 0x2a, 0xa7, 0xb0, 0xc6, 0x36, 0xea, 0x89, 0x3f, 0x98, 0x94, 0xca, 0x69, - 0x3c, 0x18, 0xea, 0xbf, 0xaf, 0x4d, 0xc9, 0x16, 0xb6, 0x41, 0x67, 0xd6, 0x58, 0xbf, 0x18, 0xea, 0x95, 0x6f, 0x63, - 0xb8, 0x87, 0x85, 0x67, 0x2b, 0x6b, 0xe4, 0xf3, 0xc4, 0x91, 0xcd, 0x93, 0xf5, 0x5a, 0x0f, 0x44, 0xc6, 0xa0, 0x07, - 0x7a, 0xeb, 0xb6, 0x4d, 0x0b, 0xb6, 0x47, 0xf9, 0xd5, 0x6d, 0xe1, 0x19, 0x87, 0x57, 0x38, 0x5d, 0x7b, 0xd7, 0xaa, - 0x10, 0x5f, 0x2c, 0x48, 0x5a, 0x5e, 0x8a, 0x99, 0x8e, 0xd7, 0xd9, 0x31, 0xf6, 0x46, 0x0e, 0xf4, 0xfc, 0xfa, 0x8b, - 0x81, 0xb5, 0xfb, 0xfd, 0xa6, 0x2c, 0x98, 0xd1, 0x11, 0xcb, 0xca, 0x09, 0x25, 0xee, 0xfc, 0x7c, 0xc3, 0xa3, 0x0a, - 0x15, 0xec, 0xf3, 0x55, 0xb0, 0xa7, 0x4d, 0x84, 0xcb, 0x19, 0xfd, 0xcb, 0xfc, 0x30, 0x81, 0x75, 0x4a, 0x2d, 0x5b, - 0x52, 0x08, 0x29, 0x2f, 0x4d, 0x9a, 0x39, 0x7a, 0xe0, 0x88, 0x7c, 0x09, 0x5d, 0x00, 0xaf, 0x9f, 0x16, 0x62, 0xae, - 0x11, 0xc1, 0xfe, 0xb6, 0xe3, 0xd6, 0xbe, 0x02, 0xe0, 0xed, 0xb0, 0x57, 0xfd, 0xd3, 0x02, 0xf6, 0x37, 0x28, 0x4b, - 0xba, 0xf1, 0x76, 0xcc, 0xf1, 0x5f, 0x08, 0x08, 0x97, 0x6e, 0xf0, 0x30, 0xb2, 0xe8, 0x54, 0xb2, 0x66, 0xe5, 0xcf, - 0xad, 0x92, 0x80, 0x61, 0xf5, 0x82, 0x3e, 0x1b, 0xb7, 0x55, 0xdc, 0x64, 0xfe, 0x07, 0x15, 0x34, 0x16, 0x7c, 0x6b, - 0x24, 0x15, 0xcb, 0xe2, 0xb6, 0x4f, 0x9d, 0xff, 0xaa, 0x73, 0x5c, 0xfb, 0xaa, 0xf6, 0x44, 0xe6, 0x48, 0x87, 0x27, - 0x0e, 0xd0, 0xc1, 0xc1, 0x46, 0x06, 0x1d, 0x03, 0xe0, 0x91, 0x65, 0xbf, 0xdc, 0xf2, 0x39, 0x76, 0x4c, 0x6b, 0x1e, - 0x8b, 0xc0, 0x67, 0xee, 0x1c, 0x37, 0x67, 0x26, 0xf2, 0x84, 0xca, 0xa9, 0x2b, 0x0c, 0x70, 0x7c, 0xbc, 0x95, 0x0a, - 0xf8, 0x1e, 0xac, 0x77, 0x4c, 0x60, 0x83, 0xdf, 0x32, 0x93, 0xda, 0x55, 0xd0, 0x2d, 0xd0, 0x72, 0x17, 0x53, 0xb9, - 0xb1, 0xc0, 0xc1, 0xe6, 0x44, 0x76, 0x0e, 0x7d, 0xa3, 0x4e, 0xc9, 0x7a, 0x3c, 0xd9, 0x6d, 0xf4, 0x95, 0xcb, 0x5d, - 0xc9, 0x15, 0x6d, 0x1b, 0xb1, 0xea, 0x99, 0x5c, 0x55, 0x99, 0x3a, 0x55, 0xd7, 0xbc, 0x95, 0xa5, 0x4d, 0x69, 0x97, - 0x64, 0xee, 0xb6, 0x98, 0x7f, 0x15, 0xde, 0x68, 0x94, 0x17, 0xa1, 0x60, 0x8f, 0x25, 0x87, 0x3d, 0x4e, 0xe0, 0x7a, - 0x61, 0xb5, 0x0a, 0xe1, 0xcf, 0xae, 0x31, 0xec, 0x32, 0x5d, 0xfa, 0xc0, 0x37, 0xf8, 0x15, 0x2f, 0x52, 0xaf, 0xb5, - 0x83, 0x04, 0xeb, 0x2e, 0x3b, 0x68, 0x38, 0x4e, 0xdc, 0x17, 0xbc, 0x13, 0xad, 0x9c, 0xcb, 0xc1, 0x24, 0xf9, 0xc6, - 0xdb, 0x72, 0x25, 0x6b, 0x59, 0x0b, 0xf3, 0xbe, 0x21, 0xc1, 0x10, 0xb3, 0x29, 0xad, 0xe3, 0x56, 0xd4, 0x46, 0x81, - 0x2d, 0x56, 0xa1, 0xff, 0xb7, 0x8a, 0x24, 0x26, 0xf3, 0xbf, 0x4e, 0x4f, 0x4f, 0x6d, 0x8a, 0xb5, 0xf9, 0x93, 0xda, - 0x03, 0x4e, 0x27, 0xb0, 0xaf, 0x3c, 0x61, 0x5a, 0x87, 0xfc, 0x16, 0x86, 0x42, 0x24, 0xb9, 0x70, 0xec, 0x12, 0x44, - 0xe5, 0x02, 0xca, 0x03, 0xec, 0xdf, 0x93, 0x8d, 0x72, 0xee, 0x9d, 0x24, 0x17, 0x47, 0xb8, 0x6c, 0x90, 0x7d, 0xd5, - 0x9f, 0x03, 0x63, 0x26, 0x03, 0x4f, 0x03, 0x04, 0xd8, 0xfc, 0xd6, 0x2c, 0xad, 0xb5, 0x94, 0xc1, 0x81, 0x12, 0x8b, - 0x64, 0x6a, 0x34, 0xff, 0xf6, 0x43, 0x97, 0xb5, 0x6f, 0xec, 0x40, 0x50, 0x2e, 0xb2, 0xb4, 0xe1, 0x30, 0x83, 0x1f, - 0xcb, 0xc8, 0x97, 0x7b, 0xaf, 0xd8, 0x82, 0xfd, 0x88, 0xf7, 0xaa, 0x14, 0xf8, 0xb8, 0x2c, 0x38, 0xcd, 0x7e, 0xc4, - 0x7b, 0x55, 0x04, 0x4c, 0x70, 0x85, 0xd4, 0x41, 0x24, 0xb1, 0x7e, 0x4f, 0x3a, 0x0e, 0x72, 0xa0, 0xa0, 0x59, 0xa0, - 0x0f, 0xb2, 0xe7, 0x36, 0x68, 0x62, 0xd4, 0xc1, 0x36, 0xee, 0x97, 0x09, 0x85, 0x6a, 0x22, 0x88, 0x43, 0x20, 0xb9, - 0x72, 0x36, 0xfa, 0xeb, 0xf1, 0xc6, 0x82, 0x68, 0x65, 0x32, 0xb9, 0x78, 0xce, 0xc3, 0x7c, 0x73, 0xb1, 0x90, 0x5f, - 0xcd, 0x5b, 0xa0, 0x5a, 0x95, 0x2a, 0xdd, 0x2f, 0xbe, 0x5d, 0x30, 0xf1, 0x8a, 0xe8, 0xad, 0x77, 0x79, 0x07, 0xcf, - 0x9d, 0xdf, 0x05, 0x2e, 0x09, 0x9e, 0x04, 0xd7, 0x98, 0xea, 0x5e, 0x80, 0x07, 0x42, 0xcf, 0xa4, 0x0a, 0xb0, 0xce, - 0x93, 0x10, 0x49, 0x6c, 0xbf, 0x85, 0x2d, 0x6b, 0xf4, 0x22, 0x77, 0x42, 0x0a, 0x9c, 0xab, 0xba, 0x89, 0x19, 0xe5, - 0x3a, 0xba, 0xd8, 0xa5, 0x9c, 0xb3, 0x44, 0x19, 0x04, 0xd8, 0xb7, 0x68, 0x28, 0xf2, 0xe7, 0x1a, 0x14, 0xfa, 0x2d, - 0x6b, 0x9b, 0x72, 0x05, 0x8b, 0xe7, 0xa5, 0x00, 0x51, 0xe3, 0xf9, 0xa4, 0xac, 0x33, 0xcf, 0x16, 0x13, 0x9e, 0x57, - 0xc8, 0x50, 0x30, 0x39, 0x17, 0x39, 0x3c, 0x25, 0x51, 0x16, 0xd1, 0x74, 0xa8, 0x86, 0xef, 0x86, 0x84, 0x95, 0x75, - 0xf4, 0x31, 0xc5, 0xf3, 0xaa, 0x06, 0x30, 0x17, 0x97, 0xfe, 0x9b, 0xf3, 0xf2, 0x75, 0xfe, 0x4e, 0xcc, 0xab, 0x7c, - 0x47, 0xe3, 0x5c, 0xc4, 0x76, 0x6b, 0x37, 0x8c, 0xd6, 0xfa, 0xb5, 0x27, 0x6f, 0xfb, 0x7e, 0xe0, 0xd5, 0x0b, 0x68, - 0x6b, 0xfd, 0x5e, 0x54, 0x99, 0x35, 0x62, 0xe5, 0xe3, 0x08, 0x55, 0x7b, 0xf5, 0xaa, 0xb9, 0xad, 0x08, 0x50, 0x29, - 0x78, 0xba, 0x95, 0xff, 0x44, 0x99, 0x7c, 0x73, 0x0e, 0x95, 0xe1, 0x81, 0x1c, 0x19, 0xaa, 0x7a, 0xc0, 0x45, 0xf9, - 0xa1, 0x9f, 0xbe, 0x0a, 0x74, 0xe0, 0xdc, 0x5d, 0x17, 0xc8, 0x9c, 0xc9, 0x50, 0xe0, 0xe5, 0x80, 0x0e, 0x63, 0x23, - 0x0f, 0xc5, 0x02, 0x6c, 0x7b, 0x6e, 0x0b, 0xae, 0x5c, 0x84, 0x5e, 0x3c, 0x60, 0xc3, 0x78, 0x59, 0x8f, 0xe2, 0x6b, - 0xe2, 0x08, 0x3b, 0x73, 0x4e, 0x1d, 0xf6, 0x96, 0x0e, 0x71, 0x46, 0xc0, 0xf6, 0xd8, 0xb1, 0xa7, 0x6f, 0xc2, 0x04, - 0xf5, 0xeb, 0x1c, 0xfe, 0x72, 0x8d, 0x33, 0x9c, 0xa0, 0xf8, 0x32, 0x84, 0x0b, 0xac, 0x35, 0x06, 0xf0, 0x25, 0x86, - 0x54, 0x81, 0x47, 0x6a, 0xa2, 0x25, 0x56, 0x7b, 0x11, 0x88, 0x96, 0xca, 0xbf, 0x1d, 0x67, 0x2e, 0x0e, 0xb6, 0xe6, - 0x5e, 0x9f, 0x69, 0xe1, 0x70, 0x92, 0x84, 0xb5, 0x73, 0x86, 0x93, 0x8b, 0x7d, 0x5e, 0x3b, 0x31, 0xc1, 0xda, 0xdb, - 0x3f, 0x55, 0x40, 0x8f, 0x06, 0xa7, 0x8a, 0xa1, 0x21, 0x10, 0x33, 0x01, 0xbc, 0x99, 0xfd, 0xa3, 0xcd, 0xc3, 0xf9, - 0x60, 0x8d, 0xbd, 0xaf, 0xb8, 0xd6, 0xd5, 0xa6, 0x12, 0x65, 0xbd, 0xc6, 0x83, 0x69, 0x82, 0xd3, 0x04, 0xcf, 0x93, - 0xa1, 0x77, 0xdc, 0xcc, 0x12, 0xdf, 0xa4, 0x6b, 0xb5, 0x7a, 0x6a, 0xcd, 0x08, 0x91, 0xf9, 0x69, 0xe8, 0x0f, 0xea, - 0x03, 0xc2, 0xc7, 0x90, 0x05, 0xb4, 0xa4, 0x6f, 0xff, 0x36, 0xcc, 0x33, 0xd9, 0xa8, 0x11, 0xf2, 0xc8, 0x90, 0x91, - 0xbe, 0xfb, 0x51, 0x66, 0x99, 0xd6, 0x1a, 0xc1, 0xfc, 0x6e, 0x2f, 0x68, 0xb8, 0xf6, 0x3c, 0x2d, 0x5b, 0x69, 0xb6, - 0x03, 0x88, 0x62, 0x8c, 0x93, 0x94, 0xb7, 0x46, 0x62, 0xb5, 0x0a, 0x4d, 0x0a, 0xe1, 0xd1, 0x8c, 0x51, 0xb9, 0x28, - 0xf4, 0xcb, 0x71, 0x61, 0x8e, 0x22, 0xcd, 0xef, 0x62, 0x6b, 0x23, 0x9a, 0x83, 0xdb, 0x23, 0x18, 0x6e, 0x84, 0x92, - 0x88, 0x9a, 0xc8, 0x3d, 0x4a, 0x2a, 0xcb, 0x20, 0x49, 0xa4, 0x16, 0xf9, 0xcd, 0x75, 0xa9, 0x39, 0x0c, 0xec, 0x1f, - 0xed, 0x0b, 0x08, 0x37, 0x6f, 0x13, 0x5a, 0x8c, 0xe8, 0x04, 0xd8, 0x58, 0x88, 0x43, 0xb8, 0x95, 0xb0, 0x5a, 0x0d, - 0x86, 0x3d, 0x43, 0x9e, 0xed, 0xcb, 0x79, 0x65, 0x43, 0xbb, 0x1b, 0x80, 0xab, 0x6e, 0x43, 0xcd, 0x95, 0xd6, 0xfd, - 0x50, 0xfd, 0xb8, 0x17, 0xb7, 0x49, 0xf6, 0x7d, 0x8e, 0xea, 0x09, 0xee, 0x9a, 0x05, 0xb8, 0x0e, 0x5d, 0x85, 0x53, - 0xbc, 0x30, 0x36, 0x9c, 0xfa, 0x25, 0x27, 0xaa, 0x1f, 0x70, 0x82, 0x77, 0xa3, 0x09, 0x1b, 0x24, 0x43, 0x9c, 0xba, - 0x38, 0xdf, 0xfb, 0x6f, 0xc3, 0x14, 0xa1, 0x82, 0x68, 0x98, 0x1a, 0x97, 0xed, 0xb4, 0xb2, 0xdb, 0xd7, 0x99, 0x9a, - 0x61, 0xd0, 0x46, 0xcc, 0xa9, 0x6f, 0xc4, 0x9c, 0x35, 0x1a, 0x68, 0x41, 0x52, 0x30, 0x62, 0x5e, 0x78, 0xad, 0x2d, - 0xcc, 0x2b, 0x9f, 0x5e, 0x7b, 0x0b, 0x84, 0x7a, 0x1c, 0x68, 0x9a, 0x82, 0xf7, 0x3c, 0xaa, 0xf7, 0xd4, 0xdd, 0xeb, - 0x52, 0x47, 0x1d, 0x50, 0x24, 0x8c, 0x2f, 0xdc, 0x24, 0x8c, 0x6b, 0xb8, 0x19, 0xf7, 0x58, 0x8f, 0xdb, 0xda, 0x36, - 0xe4, 0x03, 0x31, 0x48, 0x86, 0xc3, 0x9e, 0x70, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x5e, 0x00, 0xa9, 0x16, 0xef, 0xab, - 0xda, 0xbc, 0xf2, 0xe6, 0xee, 0x61, 0xd1, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, 0x1f, 0xaa, 0xe2, 0x83, 0x1d, - 0x75, 0x20, 0x0a, 0x5a, 0xdc, 0xaa, 0x09, 0xa4, 0xc6, 0xcc, 0x2e, 0x54, 0xcd, 0x1c, 0x1d, 0x4a, 0x08, 0x43, 0x96, - 0x57, 0xdd, 0xdd, 0xe7, 0x9e, 0x6a, 0x88, 0xc3, 0xa9, 0x7f, 0x65, 0x8c, 0x58, 0xc3, 0xa0, 0x93, 0x06, 0xda, 0x48, - 0xd2, 0x2c, 0x1f, 0x3c, 0xfa, 0x03, 0x56, 0x02, 0x2e, 0xf8, 0xb2, 0x4e, 0xd2, 0x86, 0x04, 0x6f, 0x59, 0xa2, 0x34, - 0x1f, 0xc2, 0x2d, 0x82, 0xf2, 0xc8, 0xc4, 0xda, 0xb4, 0x95, 0x0c, 0xe4, 0xaa, 0x2e, 0x6f, 0x3c, 0xf4, 0xbc, 0x4f, - 0xaa, 0xdd, 0x00, 0x1c, 0x99, 0x37, 0xb0, 0x64, 0x6b, 0x9f, 0x80, 0x47, 0x3e, 0xae, 0x10, 0xc4, 0x2d, 0x85, 0x8a, - 0x74, 0xa0, 0xea, 0x6b, 0xd8, 0xa0, 0x78, 0x0e, 0x0e, 0x82, 0x56, 0x82, 0xc3, 0xe0, 0x5d, 0x66, 0x34, 0xc9, 0x1a, - 0xb7, 0x66, 0x24, 0x9c, 0xaf, 0x56, 0x2d, 0x74, 0xf8, 0xb7, 0x7e, 0x8b, 0x79, 0x5c, 0x2a, 0xdc, 0xc7, 0x95, 0xc2, - 0x1d, 0x2c, 0x01, 0xc9, 0xd8, 0xd3, 0xb5, 0x63, 0xe1, 0xab, 0xd1, 0x21, 0x4c, 0xf8, 0x0b, 0x08, 0x1a, 0x6d, 0x8f, - 0x25, 0xd0, 0xb3, 0x6f, 0x15, 0x30, 0xba, 0xf6, 0xb2, 0x04, 0xd2, 0x82, 0xbb, 0xdb, 0x04, 0x5a, 0x85, 0xa8, 0x7d, - 0xfe, 0xf4, 0x73, 0x0e, 0x3c, 0xb2, 0xfe, 0x5c, 0x33, 0xcd, 0xba, 0x17, 0xf4, 0x56, 0x37, 0x1f, 0x8e, 0x71, 0x73, - 0x6c, 0xc0, 0x79, 0xd4, 0x81, 0x9f, 0x06, 0xa2, 0x47, 0x1d, 0x6c, 0x53, 0xf1, 0xb8, 0x04, 0xb2, 0x8f, 0x9e, 0xd6, - 0x40, 0x0a, 0x58, 0xe9, 0xd0, 0x68, 0x91, 0x26, 0x68, 0xb5, 0x9a, 0x9c, 0x93, 0x16, 0x42, 0x4b, 0x79, 0xcb, 0x55, - 0x32, 0x05, 0x1f, 0x69, 0x50, 0x0c, 0xbc, 0xa1, 0x6a, 0x1a, 0x22, 0x3c, 0x46, 0xcb, 0x94, 0x8d, 0xe9, 0x22, 0x53, - 0x71, 0xde, 0xe7, 0x91, 0x89, 0xa4, 0xcb, 0x4c, 0x24, 0xb8, 0xa3, 0x0e, 0x9e, 0x68, 0xfe, 0xf2, 0xb1, 0x36, 0x07, - 0x29, 0x12, 0x9d, 0x3c, 0xd1, 0x09, 0x98, 0x47, 0x49, 0x26, 0x24, 0x33, 0xcd, 0xf4, 0x8c, 0x6d, 0x39, 0xc4, 0xe2, - 0x0e, 0x54, 0xc1, 0xb5, 0x15, 0x65, 0x10, 0x4f, 0x49, 0xde, 0xcf, 0x8f, 0x3a, 0xf1, 0x04, 0xf3, 0x08, 0x38, 0xbd, - 0x77, 0x22, 0x64, 0x8d, 0xf2, 0x56, 0x74, 0x86, 0x0e, 0xa7, 0x58, 0x56, 0x97, 0xa8, 0x33, 0x74, 0x38, 0x41, 0x78, - 0xd6, 0x20, 0x59, 0x0e, 0x1e, 0xc3, 0x3c, 0xff, 0x3f, 0x52, 0xfe, 0x9b, 0xc3, 0x86, 0x98, 0xcf, 0x6f, 0x61, 0xa7, - 0xb0, 0x34, 0x88, 0x33, 0x02, 0x5e, 0x8b, 0xed, 0x53, 0x9c, 0x90, 0x49, 0x33, 0x73, 0x01, 0xf7, 0x74, 0x2b, 0x8d, - 0x3b, 0x85, 0x0e, 0x13, 0x9c, 0x6e, 0x26, 0x85, 0x7a, 0xae, 0xcd, 0x2c, 0x4e, 0xe0, 0x7c, 0xaf, 0x46, 0x61, 0xcb, - 0x2f, 0x36, 0x93, 0xfc, 0xf2, 0x16, 0xb8, 0xcd, 0x14, 0xcb, 0x26, 0xc5, 0x19, 0x9e, 0x35, 0x5f, 0xe1, 0x59, 0xf3, - 0x43, 0x99, 0xd1, 0x58, 0x60, 0x09, 0xc1, 0xfb, 0x20, 0x11, 0xcf, 0xaa, 0xe4, 0x14, 0xcb, 0x86, 0x2e, 0x8f, 0x67, - 0x8d, 0xaa, 0x74, 0x73, 0x81, 0x65, 0x43, 0x97, 0x6e, 0x7c, 0xc0, 0xb3, 0xc6, 0xab, 0x7f, 0x31, 0xe9, 0x20, 0x06, - 0x74, 0x99, 0xa3, 0x65, 0x62, 0x86, 0x78, 0xfd, 0xdb, 0xdb, 0x77, 0xed, 0x9b, 0xce, 0xe1, 0x04, 0xbb, 0xf5, 0x4b, - 0x34, 0x8e, 0x25, 0x2a, 0x64, 0x4d, 0x80, 0x68, 0x82, 0x3b, 0x87, 0x53, 0xdc, 0x39, 0x4c, 0x6c, 0x53, 0xeb, 0x59, - 0x83, 0xdc, 0x29, 0x1f, 0x8a, 0x2a, 0x88, 0x7d, 0xf8, 0xb8, 0xc9, 0xc6, 0x13, 0x54, 0x03, 0x25, 0x3a, 0x9c, 0xd4, - 0x40, 0x05, 0xdf, 0x8b, 0xda, 0x77, 0x55, 0xaf, 0xc2, 0x20, 0x03, 0x25, 0xe4, 0xaf, 0xb9, 0x06, 0x4f, 0x2d, 0x45, - 0x43, 0xc6, 0x4f, 0x31, 0x40, 0xf9, 0x0e, 0x28, 0xb4, 0xf2, 0x44, 0x0f, 0xdd, 0x9b, 0x8e, 0x4e, 0xfc, 0xff, 0x79, - 0x32, 0xe5, 0xd0, 0xcb, 0x2d, 0xb3, 0x35, 0x3d, 0x3b, 0x19, 0x7f, 0xf8, 0xc0, 0x63, 0xfd, 0x5f, 0x3b, 0x50, 0xac, - 0x41, 0x8a, 0xff, 0x2f, 0x1d, 0x9d, 0x0f, 0x46, 0xc8, 0x0a, 0xe2, 0xc2, 0x22, 0xfe, 0xf7, 0x87, 0xe5, 0x75, 0x5f, - 0x6c, 0x75, 0x5f, 0xe8, 0xee, 0xfd, 0xa6, 0xb5, 0x2a, 0x27, 0xae, 0x2a, 0x19, 0xf2, 0x5f, 0xa7, 0x5b, 0x5b, 0xa0, - 0x91, 0x35, 0x7a, 0x36, 0xf1, 0x1b, 0xdc, 0x6f, 0xc7, 0x3b, 0x90, 0x79, 0xcd, 0xcd, 0xd3, 0xa0, 0x70, 0xf8, 0x7a, - 0x77, 0xaa, 0x17, 0x2d, 0xf0, 0xde, 0x94, 0x5a, 0x5f, 0x19, 0xfa, 0x96, 0x83, 0xc5, 0xa6, 0x29, 0xb7, 0x36, 0x96, - 0x8e, 0xba, 0x58, 0xbb, 0x22, 0x42, 0xa5, 0xbb, 0x0b, 0x50, 0x8a, 0x8f, 0x55, 0x93, 0xe9, 0xaf, 0x73, 0x15, 0xe9, - 0x4b, 0xa8, 0x86, 0xfe, 0xbc, 0xbf, 0x50, 0x91, 0x12, 0x73, 0x93, 0x77, 0x7f, 0x0e, 0x7d, 0x82, 0x86, 0xb5, 0xe1, - 0xd9, 0xed, 0xb3, 0xc2, 0xea, 0x77, 0xaa, 0x43, 0xd0, 0x3f, 0x80, 0x2c, 0x69, 0x31, 0x7d, 0x60, 0xdd, 0x1a, 0xb6, - 0x5d, 0x34, 0xcb, 0x44, 0xd3, 0x6a, 0x53, 0xe7, 0x9a, 0x3d, 0xcc, 0xe7, 0x3e, 0x4f, 0xc1, 0x0b, 0xa3, 0x1f, 0xdf, - 0xc1, 0x6e, 0xdc, 0xd5, 0x18, 0x89, 0xba, 0x92, 0xa9, 0x84, 0x7e, 0x74, 0x87, 0x59, 0x74, 0xaf, 0xbd, 0x18, 0x73, - 0xed, 0xef, 0xa3, 0x03, 0xe5, 0x07, 0x95, 0x24, 0x07, 0x96, 0xfd, 0x0d, 0x16, 0xdd, 0x81, 0x79, 0x62, 0x59, 0x4d, - 0x60, 0x15, 0xdd, 0x7b, 0x8b, 0x28, 0x74, 0x23, 0x6b, 0xcd, 0x80, 0xea, 0x66, 0x8c, 0x7a, 0x70, 0x1f, 0x02, 0x3d, - 0xf4, 0xcb, 0x52, 0xca, 0x76, 0x16, 0xd7, 0xba, 0x57, 0xba, 0xfb, 0xcd, 0x01, 0x79, 0x7c, 0xa1, 0xc7, 0x35, 0xfd, - 0xab, 0x49, 0x44, 0x23, 0xf6, 0x0f, 0x67, 0xc5, 0xd5, 0xa2, 0xd0, 0x98, 0x26, 0xfb, 0x2a, 0x4a, 0xe6, 0x6d, 0x30, - 0xd5, 0x4b, 0xe6, 0x9d, 0x3b, 0x6c, 0xbf, 0xef, 0xcd, 0xf7, 0x3d, 0x96, 0x7d, 0xa6, 0x33, 0x62, 0xa6, 0x8b, 0xb9, - 0xef, 0x7b, 0xf3, 0x7d, 0x8f, 0xb7, 0x07, 0x73, 0xeb, 0x2e, 0x14, 0x4b, 0x76, 0x86, 0x0b, 0x30, 0x2c, 0xf7, 0xb8, - 0x9b, 0x5a, 0x96, 0x0e, 0x02, 0x5b, 0x4b, 0x80, 0x38, 0x9f, 0x4f, 0xc3, 0x8a, 0x57, 0x43, 0xc0, 0x7d, 0x3a, 0xd7, - 0xf6, 0x2a, 0x15, 0x78, 0x4c, 0xd0, 0x88, 0xe8, 0xd8, 0x36, 0xfa, 0x59, 0x2f, 0xe0, 0xf2, 0x88, 0x2a, 0xf5, 0x24, - 0x11, 0xf0, 0xaa, 0x5a, 0xe5, 0xad, 0x8b, 0x94, 0x5f, 0xc4, 0xcb, 0x71, 0xc5, 0x1e, 0x53, 0xc9, 0x00, 0x56, 0x65, - 0x49, 0x97, 0x40, 0xea, 0xf9, 0xde, 0x44, 0xbf, 0x6c, 0x22, 0x4f, 0xae, 0x6f, 0x4b, 0xbf, 0x30, 0x35, 0x2d, 0xc4, - 0x62, 0x32, 0x05, 0x1f, 0x5a, 0x60, 0x19, 0x0a, 0x5d, 0xaf, 0xb2, 0xf5, 0xaf, 0x49, 0x6e, 0x12, 0x28, 0x9c, 0x6a, - 0x8a, 0x88, 0x26, 0x6a, 0x41, 0x33, 0x6d, 0x49, 0xca, 0xf3, 0xc9, 0x63, 0x71, 0xf7, 0x12, 0xb0, 0x9b, 0x12, 0xd5, - 0xd8, 0x91, 0xf7, 0x16, 0x76, 0x00, 0x4e, 0x08, 0xdb, 0x55, 0xf1, 0x52, 0x82, 0xce, 0x1f, 0x67, 0x84, 0xed, 0xaa, - 0xfa, 0x84, 0x99, 0xec, 0x29, 0xd9, 0x18, 0x6e, 0x3f, 0x4c, 0x1a, 0x19, 0x3a, 0xea, 0xc4, 0x59, 0xcf, 0x11, 0x03, - 0x03, 0x50, 0x0f, 0xb8, 0x5b, 0xdb, 0xb3, 0xbc, 0xbb, 0x21, 0x79, 0x94, 0xb2, 0x44, 0x98, 0xeb, 0x72, 0x9d, 0xb2, - 0x5a, 0x75, 0x2a, 0x2a, 0x58, 0xe0, 0xa9, 0xb7, 0x17, 0xa8, 0xf9, 0xda, 0x41, 0x71, 0xae, 0x93, 0x4d, 0xd3, 0xf3, - 0xb2, 0xef, 0xde, 0x8e, 0x45, 0xc6, 0x26, 0xed, 0xed, 0x0e, 0x22, 0x61, 0x38, 0x61, 0xe5, 0x71, 0xc2, 0x55, 0x6d, - 0x8f, 0x00, 0xdd, 0x78, 0x22, 0x37, 0x16, 0x64, 0xb9, 0xae, 0x8c, 0xee, 0x3d, 0xbf, 0x5b, 0x4a, 0x84, 0x1d, 0x6d, - 0x49, 0x30, 0x5d, 0x82, 0x56, 0xd3, 0xe9, 0x37, 0x99, 0x6b, 0xcf, 0x0d, 0x6f, 0x8a, 0xb6, 0xb9, 0xbd, 0x49, 0xc7, - 0x7a, 0x7b, 0xe8, 0x18, 0xca, 0x20, 0x06, 0x3a, 0x1f, 0xf1, 0x5e, 0xa3, 0x91, 0x20, 0x50, 0xc8, 0x24, 0x43, 0x2c, - 0x22, 0xa7, 0x45, 0x3f, 0x38, 0xd0, 0xf0, 0xa8, 0x12, 0x10, 0xa6, 0x20, 0x84, 0xf8, 0x5d, 0x6b, 0x84, 0xf5, 0x97, - 0xab, 0x96, 0x0b, 0x1b, 0xa9, 0x36, 0x74, 0xf0, 0xff, 0xf2, 0x97, 0xad, 0x9e, 0x59, 0x2e, 0x8a, 0xc6, 0xcd, 0x4c, - 0x83, 0x45, 0x80, 0xf4, 0x68, 0xb2, 0x1d, 0x14, 0x77, 0xe7, 0x62, 0xbd, 0x21, 0x20, 0x31, 0x83, 0x09, 0xca, 0x86, - 0x75, 0x63, 0x0c, 0xf3, 0xa8, 0xd2, 0xb2, 0xd6, 0x24, 0x66, 0xcf, 0x97, 0xce, 0x5f, 0xf7, 0xe5, 0x5d, 0xcc, 0xf0, - 0x7d, 0x2c, 0xf1, 0x2d, 0x78, 0xd2, 0xc4, 0x02, 0xdb, 0xc7, 0x0b, 0x8a, 0x35, 0x51, 0x3d, 0xc7, 0xde, 0x16, 0xb0, - 0xce, 0x7a, 0x8f, 0x48, 0xef, 0x77, 0xf5, 0xab, 0x0d, 0xbe, 0x5b, 0xf8, 0x15, 0x58, 0x3f, 0x7b, 0x27, 0x29, 0x96, - 0x0d, 0xd1, 0x2c, 0xec, 0x91, 0x01, 0xe5, 0x2a, 0x7e, 0xd9, 0x4f, 0xdd, 0x2a, 0x86, 0x6b, 0x1f, 0xaf, 0xf0, 0x87, - 0x8d, 0x76, 0x1b, 0x79, 0x59, 0xdc, 0xec, 0x4d, 0xd9, 0x10, 0x55, 0xd3, 0x3b, 0x32, 0x37, 0x52, 0xea, 0x5f, 0x1f, - 0x70, 0x6b, 0xab, 0x7d, 0x37, 0xcd, 0xb7, 0x0e, 0x9d, 0xab, 0xa6, 0x5d, 0x6a, 0xad, 0x08, 0xf6, 0x7e, 0xb6, 0x70, - 0x73, 0x6b, 0xc0, 0x1e, 0xfc, 0xdc, 0x1d, 0xcd, 0x55, 0x02, 0xd1, 0xe9, 0x8d, 0x66, 0x7c, 0x15, 0xfe, 0x99, 0x36, - 0xc2, 0x7e, 0xfc, 0x67, 0xf4, 0x67, 0xda, 0x40, 0x7d, 0x14, 0xce, 0xef, 0x56, 0x6c, 0xb6, 0x82, 0x60, 0x6b, 0x0f, - 0x8e, 0xf0, 0x6b, 0xbf, 0x24, 0x57, 0x34, 0xe3, 0xc9, 0xca, 0xbe, 0x84, 0xb7, 0xb2, 0xcf, 0x04, 0xad, 0xf4, 0xe3, - 0x4e, 0xab, 0x50, 0x8c, 0x32, 0x08, 0x2c, 0x1c, 0xee, 0x35, 0xfb, 0x83, 0x56, 0xf3, 0xd1, 0xd0, 0xfc, 0xab, 0x23, - 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x04, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, 0xe9, 0x55, 0x82, - 0x8c, 0xef, 0xc9, 0x6a, 0xc5, 0x6c, 0x34, 0x6b, 0xab, 0xc1, 0x2f, 0x63, 0x33, 0x1d, 0xb6, 0xa3, 0x4e, 0xcf, 0x89, - 0xb1, 0xa4, 0x01, 0x91, 0xa6, 0x31, 0x83, 0x40, 0x52, 0x4b, 0xcd, 0x61, 0xcd, 0xef, 0x82, 0xb8, 0xba, 0x3f, 0x82, - 0x94, 0x1f, 0x82, 0x98, 0x1f, 0x11, 0x08, 0xa0, 0x6d, 0x98, 0xa3, 0xb2, 0x21, 0xe7, 0xbb, 0xf4, 0x40, 0x3b, 0x33, - 0x34, 0xf8, 0x6a, 0xd5, 0xaa, 0x86, 0x29, 0x8b, 0xfa, 0x30, 0x97, 0x6b, 0x2c, 0xc9, 0x1b, 0xd0, 0x35, 0xe7, 0x44, - 0xf6, 0x7d, 0x57, 0x79, 0x78, 0x08, 0x18, 0x0b, 0x02, 0x4e, 0xfa, 0x7d, 0xd9, 0x2f, 0xc8, 0xc5, 0x65, 0x08, 0x3e, - 0x66, 0x98, 0x0f, 0xd4, 0xa0, 0x18, 0x0e, 0x51, 0x6c, 0x9d, 0xce, 0x62, 0x1d, 0x71, 0xc5, 0xf3, 0x4b, 0x2e, 0xc0, - 0x2f, 0x39, 0x47, 0x6c, 0x50, 0x0c, 0xc9, 0x83, 0x24, 0x14, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, 0xd2, 0x37, 0x30, - 0xd5, 0xc3, 0xd2, 0x17, 0xd9, 0x60, 0x31, 0x67, 0x2c, 0x81, 0xe0, 0x66, 0xc0, 0x5e, 0x6a, 0x43, 0xa2, 0xb6, 0x06, - 0x0a, 0xee, 0x02, 0xdf, 0xcc, 0xe8, 0xe9, 0x56, 0x1b, 0x83, 0xc0, 0xe2, 0x85, 0xbe, 0x86, 0x31, 0x08, 0xa4, 0x2f, - 0x57, 0x1d, 0xf6, 0x97, 0x1f, 0x26, 0xcb, 0x0f, 0x5e, 0xa1, 0x4d, 0x76, 0x4a, 0xab, 0x44, 0x3d, 0xbe, 0xca, 0x13, - 0x47, 0x13, 0x64, 0x62, 0xa8, 0x74, 0xc3, 0x32, 0x71, 0x25, 0x7d, 0x26, 0x9a, 0x6c, 0x37, 0x1c, 0x33, 0xe7, 0xbb, - 0xd9, 0xfe, 0x61, 0xdd, 0xce, 0x39, 0xe1, 0x5a, 0x2b, 0xa9, 0xb5, 0x51, 0xcf, 0x34, 0x55, 0xb5, 0xc1, 0xfc, 0x2e, - 0xad, 0x96, 0x16, 0x5b, 0x57, 0xef, 0x9e, 0xff, 0x2c, 0x5d, 0x19, 0x7f, 0x8b, 0x55, 0xa1, 0x15, 0x19, 0x6e, 0xb7, - 0x90, 0x33, 0x67, 0xba, 0x74, 0x8a, 0x5c, 0xa8, 0x0e, 0x7f, 0x51, 0x4f, 0xea, 0x97, 0x2a, 0x83, 0x86, 0x74, 0xe8, - 0xf7, 0x3a, 0x01, 0xe5, 0x1f, 0x4c, 0x4c, 0x64, 0x2c, 0xba, 0xa5, 0x45, 0x1e, 0xfe, 0xf8, 0x22, 0xd7, 0xb1, 0xaa, - 0xf6, 0x60, 0x20, 0x7b, 0xba, 0xe2, 0x1e, 0xdc, 0x9a, 0xf0, 0x31, 0x67, 0x69, 0xbc, 0x17, 0xfc, 0xd8, 0x90, 0x8d, - 0x1f, 0x83, 0x1f, 0xc1, 0xdd, 0xd9, 0x3e, 0x8b, 0x58, 0xc6, 0x85, 0x70, 0xf7, 0x58, 0x97, 0xa5, 0x4a, 0x19, 0x2b, - 0xa7, 0x5b, 0xf6, 0x2f, 0xa4, 0xde, 0x24, 0xe1, 0xa5, 0x25, 0xd6, 0x26, 0x05, 0x2b, 0x9f, 0x92, 0xc2, 0xb3, 0x2b, - 0xfa, 0x56, 0x8b, 0xd9, 0x4b, 0x2d, 0xe9, 0xae, 0xaf, 0x2e, 0x4b, 0x15, 0x34, 0x1c, 0x84, 0xb6, 0xb4, 0x81, 0x04, - 0x18, 0xb8, 0x94, 0x3e, 0x9d, 0xf6, 0x4c, 0x22, 0xb3, 0x24, 0x84, 0x77, 0x0f, 0x2a, 0x98, 0xff, 0xce, 0x36, 0xc2, - 0xaa, 0xc0, 0xe5, 0x4a, 0x15, 0xf5, 0x52, 0x10, 0x08, 0x40, 0x5f, 0x7a, 0x0f, 0x8a, 0xf3, 0xa2, 0xd7, 0x68, 0x08, - 0xd0, 0xc2, 0x52, 0x7d, 0xad, 0x8a, 0xe9, 0xbe, 0xff, 0x9c, 0x9f, 0xf7, 0xe1, 0x1c, 0xd2, 0x36, 0xde, 0xd4, 0xa4, - 0x84, 0x9a, 0x1d, 0xb4, 0x0f, 0x56, 0xd9, 0x5e, 0xf9, 0xb7, 0x21, 0x45, 0x26, 0x7f, 0xc0, 0x7e, 0xa0, 0xb6, 0xc3, - 0xa1, 0x2d, 0x58, 0xf5, 0x52, 0x46, 0xc1, 0x80, 0x95, 0x03, 0x6e, 0x4f, 0x46, 0x09, 0x4d, 0xa6, 0x0c, 0xd4, 0xfd, - 0xa6, 0x68, 0x35, 0xb7, 0x27, 0x75, 0xbf, 0x21, 0xed, 0xec, 0x23, 0xb5, 0xb3, 0x4f, 0x0e, 0x5e, 0x2c, 0x82, 0xfc, - 0x21, 0x42, 0x85, 0xc3, 0xbc, 0x29, 0xd1, 0x51, 0x07, 0xb8, 0x33, 0x70, 0xe0, 0x01, 0x5b, 0x94, 0x83, 0x03, 0x6a, - 0x2d, 0xee, 0x69, 0x23, 0x71, 0xde, 0x9e, 0x50, 0xbb, 0x08, 0x25, 0x6e, 0xd6, 0xcc, 0xb4, 0xa0, 0xb5, 0x42, 0x3b, - 0x8f, 0x7b, 0xbc, 0xcd, 0xb3, 0x5a, 0xfc, 0x84, 0x0d, 0x6b, 0xaa, 0xfa, 0x0d, 0x34, 0x47, 0xb5, 0x20, 0x37, 0x4f, - 0xb5, 0xb7, 0x2a, 0x19, 0x04, 0xc1, 0xd0, 0x70, 0x2a, 0x44, 0x93, 0x8c, 0x41, 0x6b, 0xe8, 0xdd, 0x6a, 0xaf, 0x56, - 0xdc, 0x21, 0xbe, 0xac, 0x79, 0xab, 0xe9, 0x5b, 0x00, 0x5a, 0x84, 0x41, 0x79, 0x6f, 0x12, 0x80, 0xf7, 0x6d, 0x19, - 0x21, 0x6d, 0x39, 0x30, 0x6f, 0x36, 0x96, 0x8a, 0xcd, 0x77, 0x74, 0x32, 0x8c, 0x03, 0x33, 0xa2, 0x00, 0xdf, 0x94, - 0x90, 0x84, 0xab, 0xa4, 0x1b, 0x99, 0x88, 0x39, 0x93, 0x31, 0xc7, 0x37, 0x85, 0x10, 0xea, 0xda, 0x7c, 0x09, 0x5c, - 0xdd, 0xc9, 0x48, 0x7c, 0x33, 0x61, 0xea, 0x1d, 0x2d, 0x26, 0x0c, 0xfc, 0x8a, 0xdc, 0xed, 0x58, 0x4c, 0xc9, 0xc5, - 0x53, 0x19, 0x0e, 0x28, 0x86, 0x07, 0x47, 0x87, 0x58, 0xe9, 0x10, 0x28, 0x15, 0x2e, 0xb2, 0xdb, 0xbd, 0x37, 0x85, - 0xb8, 0xbb, 0x0f, 0x0b, 0x6c, 0x1d, 0x00, 0x4b, 0xa7, 0x49, 0x80, 0x7f, 0xf9, 0x98, 0x8f, 0xd1, 0x98, 0x53, 0xad, - 0xeb, 0xb7, 0xbf, 0xa3, 0x1b, 0xa0, 0xb7, 0xa5, 0xa3, 0xe0, 0xa0, 0x35, 0x84, 0x5c, 0xb8, 0x0b, 0x83, 0x8b, 0x2f, - 0xbf, 0xb6, 0x28, 0xb4, 0x37, 0x16, 0x40, 0xef, 0xaf, 0x04, 0x2c, 0xd8, 0x30, 0xc7, 0x14, 0x5e, 0x6b, 0x9d, 0x30, - 0xe5, 0x45, 0x05, 0x79, 0x52, 0xbe, 0xc7, 0x59, 0xab, 0xfd, 0x96, 0x8d, 0xe1, 0x0e, 0x23, 0xfa, 0x76, 0xe1, 0xc8, - 0x82, 0x07, 0x64, 0x9a, 0xc4, 0x34, 0xfb, 0xc6, 0x45, 0x1e, 0x79, 0x3d, 0x0e, 0x77, 0xb5, 0xe4, 0xe7, 0xeb, 0x15, - 0x5d, 0x63, 0x08, 0x45, 0xe1, 0xf7, 0xfb, 0x15, 0x1e, 0x28, 0xad, 0x0c, 0xda, 0xa0, 0x61, 0x71, 0x9b, 0xff, 0x02, - 0x67, 0x0c, 0xad, 0x17, 0x32, 0x77, 0x74, 0xc6, 0xe1, 0xcc, 0x62, 0xc6, 0x94, 0xc0, 0xa8, 0x94, 0x28, 0xe8, 0x04, - 0x1c, 0x9d, 0xab, 0x0f, 0x92, 0x87, 0xd5, 0xb1, 0x02, 0xf0, 0x24, 0x53, 0xf8, 0x27, 0xdb, 0x04, 0xeb, 0x7e, 0xab, - 0x66, 0x98, 0xfa, 0x8b, 0xda, 0x76, 0x2d, 0x5f, 0xfa, 0x38, 0xd2, 0xc6, 0x10, 0x5a, 0xe7, 0xee, 0x1e, 0x50, 0xc4, - 0x06, 0xbd, 0x88, 0x15, 0xbe, 0x91, 0x8b, 0x91, 0x5e, 0x5f, 0xed, 0x3a, 0xa6, 0x00, 0x51, 0xac, 0xbb, 0x26, 0xbe, - 0xa9, 0x9e, 0x3f, 0x95, 0x71, 0x0e, 0x67, 0x10, 0x84, 0x38, 0x29, 0x2f, 0x1b, 0x62, 0x41, 0x2e, 0x74, 0xa7, 0x42, - 0x77, 0x5a, 0x21, 0x94, 0x4d, 0x8f, 0xca, 0xfb, 0x57, 0x08, 0x61, 0xa0, 0xcb, 0xec, 0xc0, 0xaa, 0x7c, 0x0b, 0xab, - 0xe0, 0xd5, 0x8b, 0x0d, 0xac, 0x12, 0x70, 0x3c, 0x97, 0x68, 0x54, 0x54, 0x38, 0xa4, 0x49, 0x9f, 0x8f, 0x45, 0x90, - 0x00, 0x58, 0xf4, 0x2e, 0xb1, 0x79, 0xdf, 0xc3, 0x21, 0xbf, 0x27, 0x11, 0xf9, 0xd3, 0x8d, 0x68, 0x06, 0xef, 0xe2, - 0xca, 0xbe, 0x43, 0x08, 0x58, 0x7a, 0x8e, 0xe1, 0x3d, 0xe4, 0xef, 0xbf, 0xc3, 0x6a, 0x2d, 0xc8, 0xe3, 0x7f, 0x89, - 0x92, 0xd0, 0xd8, 0x7f, 0x8e, 0x87, 0x16, 0x09, 0xfd, 0x81, 0x6f, 0x8e, 0xb0, 0xc2, 0xc1, 0xad, 0x22, 0x2e, 0x83, - 0x5b, 0x7c, 0xac, 0x43, 0x0f, 0x00, 0x4b, 0x28, 0xf6, 0x41, 0xbe, 0x81, 0x62, 0x1a, 0x07, 0x14, 0x59, 0xfa, 0x17, - 0xb8, 0x60, 0xb5, 0x50, 0xde, 0xdf, 0xb6, 0x9c, 0x94, 0x56, 0xbb, 0xe4, 0xd5, 0xe6, 0x40, 0xe5, 0xa7, 0x7f, 0xe1, - 0x2b, 0xf5, 0x43, 0xcd, 0xf6, 0x0b, 0xdf, 0x58, 0xa0, 0xc7, 0xa0, 0x08, 0xb0, 0xbf, 0xd7, 0x84, 0x3b, 0x8a, 0x5e, - 0xe6, 0x62, 0xbf, 0x6d, 0xaf, 0x7b, 0x89, 0xb9, 0xbc, 0xae, 0xb2, 0xe6, 0x60, 0x0a, 0x0d, 0x0e, 0xaa, 0x70, 0x46, - 0x60, 0x2e, 0x5f, 0x94, 0x05, 0xe7, 0x20, 0xde, 0xf7, 0xa5, 0xce, 0x29, 0xa3, 0x01, 0xbc, 0x48, 0xca, 0x47, 0xa7, - 0xfa, 0x1c, 0x5c, 0xc6, 0x35, 0x9b, 0xf8, 0x44, 0xba, 0x54, 0x60, 0x25, 0x8d, 0x71, 0x68, 0x40, 0x53, 0x3a, 0x07, - 0xb3, 0x0d, 0xa0, 0xe0, 0xf6, 0x7c, 0xd8, 0x58, 0x28, 0xef, 0x2d, 0xda, 0xda, 0xd3, 0xd1, 0x84, 0x58, 0x93, 0x26, - 0xef, 0x6e, 0x5b, 0x23, 0x83, 0x33, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, 0x84, 0x27, 0x28, - 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xb2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x5a, 0x6a, 0x20, 0x2b, 0x6a, 0x90, - 0x7b, 0xd4, 0x40, 0xd4, 0xb7, 0x7f, 0x01, 0x0b, 0x61, 0x22, 0x54, 0x49, 0x2f, 0x20, 0xc2, 0x5c, 0x69, 0x3e, 0xa0, - 0x88, 0x7c, 0xc8, 0x6b, 0x40, 0x85, 0x94, 0xbc, 0x04, 0xa3, 0x71, 0x78, 0xbd, 0x07, 0xdc, 0x2f, 0x0d, 0xc3, 0xe0, - 0x38, 0x05, 0x9d, 0xff, 0xd6, 0xe5, 0x43, 0xf5, 0x72, 0x75, 0x10, 0xc2, 0x4f, 0x24, 0x64, 0x98, 0x46, 0x7e, 0x01, - 0xb2, 0x99, 0x63, 0x71, 0x70, 0x20, 0x40, 0xe0, 0x87, 0x28, 0xc2, 0x1e, 0xcf, 0xf0, 0x32, 0xd9, 0x20, 0x7a, 0x6e, - 0x56, 0x79, 0x35, 0x2b, 0xe1, 0xcd, 0xaa, 0x70, 0x34, 0x8e, 0xae, 0x09, 0x03, 0xc1, 0x85, 0x9a, 0x7d, 0x83, 0x10, - 0x28, 0x5b, 0x6e, 0x35, 0x5d, 0x7a, 0x0a, 0xe6, 0xa3, 0x61, 0xf0, 0x96, 0xc1, 0x8b, 0xba, 0xda, 0xe4, 0x9f, 0x29, - 0x96, 0x28, 0xcd, 0x3c, 0x36, 0x3c, 0x27, 0x75, 0x8a, 0xa2, 0xbf, 0x04, 0xcf, 0xc3, 0xa0, 0x79, 0x11, 0xa0, 0x06, - 0xfc, 0xdb, 0xe0, 0xa8, 0x47, 0x23, 0x9a, 0xa6, 0x2e, 0xf8, 0x4d, 0x42, 0xf4, 0x26, 0x5b, 0xad, 0x64, 0x45, 0xd0, - 0x23, 0xb3, 0xc1, 0x80, 0x95, 0x78, 0x02, 0x3b, 0xd6, 0x70, 0xb0, 0xe4, 0x85, 0x0c, 0x73, 0x77, 0x4a, 0xe1, 0x1c, - 0x43, 0x3a, 0xc2, 0x89, 0x17, 0xb3, 0xf1, 0x3f, 0x9f, 0xa9, 0xbf, 0x7e, 0x6e, 0xbe, 0x96, 0x11, 0x11, 0x2e, 0x88, - 0x5c, 0x8d, 0x1d, 0x91, 0x5e, 0xd8, 0x32, 0x35, 0xb0, 0x65, 0x7e, 0x70, 0xd6, 0xd5, 0x43, 0x13, 0x2e, 0x0e, 0x0c, - 0xa8, 0x91, 0x67, 0xb4, 0x82, 0x33, 0x52, 0x0e, 0x1c, 0x94, 0x10, 0x8a, 0x15, 0xe1, 0x94, 0x5c, 0x40, 0x24, 0xbc, - 0x04, 0xf5, 0xc0, 0xb0, 0xc0, 0x93, 0xa0, 0xa6, 0x20, 0x41, 0x25, 0xae, 0x76, 0x0a, 0xb3, 0xce, 0xf4, 0x6c, 0xa7, - 0xa8, 0x67, 0x83, 0xfc, 0xfc, 0xa2, 0xc2, 0x14, 0x58, 0xda, 0x83, 0x83, 0x02, 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, - 0x40, 0x4f, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0x4a, 0x7b, 0x1d, 0x68, 0x5b, 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, - 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x7d, 0x15, 0x6f, 0x47, 0x48, 0xec, 0x7f, 0x54, 0x3a, 0xd0, 0x98, 0x25, 0xdd, 0xd5, - 0xc6, 0x7c, 0x55, 0xd3, 0x23, 0x56, 0x93, 0x10, 0x36, 0x48, 0x97, 0xe3, 0xd3, 0x9e, 0xc1, 0x15, 0xab, 0xd0, 0x72, - 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x16, 0x51, 0xc9, 0x86, 0x61, 0x06, 0x61, - 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0x33, 0x7f, 0x4a, 0x1f, 0x6c, 0xba, 0x76, 0xe6, 0x11, 0x40, - 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x37, 0x2a, 0x33, 0xbf, 0x96, 0xb6, 0x95, 0xdb, 0xf6, 0x18, 0x7b, 0x21, 0xb7, - 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x08, 0x55, 0x6d, 0xc8, 0x5a, 0x1b, 0x3a, 0xd0, 0x2f, - 0xd2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x59, 0x2e, 0xc1, 0x22, 0xbc, 0x74, 0x08, 0x7f, 0x97, 0x83, 0x33, 0x3c, 0x66, - 0x58, 0xac, 0x56, 0x50, 0xcf, 0xe1, 0x7d, 0xb2, 0x19, 0x9c, 0x54, 0x6c, 0x8c, 0x5d, 0x98, 0x89, 0x87, 0x65, 0x13, - 0x02, 0x27, 0xd0, 0xaf, 0xab, 0x88, 0xfa, 0xfb, 0xed, 0xf8, 0xa9, 0x0c, 0x6b, 0x3b, 0x10, 0x6b, 0xd6, 0x1b, 0xac, - 0x3e, 0x80, 0x96, 0xff, 0x93, 0xb8, 0x87, 0xca, 0xbc, 0x9b, 0x84, 0x7c, 0x73, 0x11, 0x7b, 0xac, 0x87, 0x18, 0xa9, - 0x2d, 0xee, 0x0e, 0x21, 0xfe, 0x9f, 0xad, 0x28, 0x06, 0x3c, 0xaa, 0xf8, 0xe7, 0x10, 0xf5, 0x20, 0x14, 0xb5, 0xf1, - 0xb0, 0x01, 0x4a, 0xbb, 0x5c, 0x57, 0x62, 0xa4, 0x4f, 0x20, 0xdf, 0xda, 0xf0, 0x82, 0xfa, 0x24, 0xca, 0x41, 0x4e, - 0xf6, 0xa2, 0x92, 0x26, 0x1b, 0xc2, 0x5c, 0x6f, 0x0b, 0xc7, 0xf4, 0xd5, 0x06, 0x2d, 0xc2, 0x17, 0xc0, 0xce, 0x70, - 0x2d, 0x59, 0x5a, 0xf0, 0xe5, 0x35, 0xf0, 0xb9, 0x35, 0xd7, 0x14, 0x25, 0x47, 0xfd, 0x17, 0x52, 0xdf, 0xfa, 0xc3, - 0xef, 0xd8, 0x13, 0x1f, 0xa9, 0xd5, 0x91, 0x6c, 0x84, 0x5a, 0xb3, 0x76, 0xbc, 0x6c, 0x33, 0xc2, 0xa0, 0x34, 0xd1, - 0xfb, 0x2a, 0x64, 0x95, 0x3b, 0x3b, 0x95, 0xde, 0x9c, 0xbe, 0xe6, 0x95, 0x73, 0x2a, 0x37, 0x8c, 0x6a, 0xa9, 0x69, - 0x80, 0x08, 0x57, 0x2e, 0x91, 0xbc, 0x4f, 0x74, 0xf8, 0x07, 0x8d, 0x71, 0xf5, 0x48, 0xe1, 0xef, 0x77, 0xc5, 0x0e, - 0xd9, 0x8e, 0x0e, 0xb7, 0x11, 0x34, 0xcf, 0x57, 0xf0, 0x80, 0xa3, 0x92, 0x21, 0x44, 0x39, 0xb9, 0xd8, 0xcf, 0x6b, - 0xa6, 0x6c, 0x37, 0x01, 0x42, 0x48, 0x39, 0x9c, 0x75, 0x0e, 0x91, 0xb5, 0xd0, 0x23, 0x55, 0x94, 0xc3, 0x2d, 0x9a, - 0x6b, 0x03, 0x54, 0x68, 0x81, 0x74, 0xf9, 0x85, 0xdd, 0xc7, 0x02, 0xa2, 0x97, 0xaf, 0x6d, 0x08, 0x63, 0x6b, 0x65, - 0x89, 0x0b, 0x3d, 0x6a, 0x13, 0x46, 0xd7, 0x6e, 0x0c, 0x6b, 0x03, 0xa3, 0xa7, 0x41, 0x49, 0x0b, 0x42, 0x5d, 0xf7, - 0xe8, 0x79, 0xa2, 0x03, 0x3d, 0x66, 0x84, 0x36, 0x18, 0x9e, 0x12, 0x05, 0x96, 0x4d, 0x05, 0x58, 0xf0, 0x2d, 0x8b, - 0x38, 0xd7, 0x36, 0x9b, 0x2c, 0xfc, 0xa8, 0x42, 0xfd, 0xb4, 0x5f, 0x56, 0x31, 0xcf, 0x85, 0xa5, 0x6e, 0xcf, 0x13, - 0x17, 0x8f, 0xee, 0xe9, 0x9b, 0xeb, 0x17, 0x2f, 0x5f, 0xbf, 0x5a, 0xad, 0xda, 0xac, 0xd9, 0x3e, 0xc1, 0x3f, 0xa9, - 0x32, 0x1e, 0x6c, 0x19, 0x05, 0xe8, 0xe0, 0x60, 0x9f, 0x6b, 0x17, 0x9e, 0x2f, 0x7c, 0x0e, 0x71, 0x83, 0xd4, 0x10, - 0x27, 0x45, 0x19, 0x13, 0xe4, 0x2e, 0xe8, 0x07, 0xf7, 0x01, 0x28, 0xa1, 0x2a, 0xf2, 0xf7, 0x61, 0x73, 0xf6, 0x7b, - 0x10, 0x98, 0x08, 0xea, 0x43, 0x04, 0x10, 0x88, 0x57, 0x8a, 0x0b, 0xc2, 0x5c, 0x02, 0x44, 0xf1, 0x5e, 0xc0, 0x9b, - 0x90, 0x3a, 0x6a, 0xd5, 0x22, 0x0f, 0x0b, 0x20, 0x89, 0x26, 0x1c, 0x25, 0x3d, 0xd2, 0x01, 0xbc, 0x21, 0x28, 0xa5, - 0xf9, 0xd5, 0xcb, 0xac, 0xbb, 0x54, 0x86, 0xfa, 0xad, 0x38, 0xc3, 0x53, 0xfb, 0x39, 0x85, 0xcf, 0x69, 0xcf, 0x9d, - 0x0e, 0xf2, 0x30, 0xc3, 0x0b, 0x22, 0x0f, 0xdd, 0xb3, 0x88, 0xcb, 0x79, 0xc1, 0xbe, 0x72, 0xb1, 0x90, 0xf1, 0xf2, - 0x2e, 0x16, 0xd1, 0x5d, 0x33, 0x3d, 0x0c, 0x8b, 0xe8, 0xae, 0x99, 0x47, 0x77, 0x08, 0xdf, 0xc7, 0x22, 0xba, 0x37, - 0x29, 0xf7, 0xcd, 0x1c, 0x6e, 0xbe, 0x70, 0x0e, 0x87, 0xa2, 0x29, 0xda, 0x58, 0x6c, 0x16, 0x35, 0x29, 0xb6, 0xa8, - 0x87, 0xc1, 0xbf, 0xef, 0xd8, 0xf8, 0x7e, 0xf8, 0x12, 0x5c, 0x9a, 0x34, 0x91, 0x9f, 0x40, 0xfa, 0x69, 0x55, 0x06, - 0xee, 0x53, 0xd2, 0xea, 0x4d, 0xcf, 0x65, 0xb3, 0xdd, 0x6b, 0x34, 0xa6, 0xb0, 0x77, 0x13, 0x92, 0xb9, 0x62, 0xd3, - 0x86, 0x8e, 0xaf, 0xb3, 0x9f, 0xac, 0x56, 0xfb, 0x19, 0xd2, 0x1b, 0x6e, 0xc2, 0x42, 0x35, 0x98, 0x0e, 0x71, 0x0b, - 0x3f, 0x4f, 0x10, 0x5a, 0xb2, 0xc1, 0x74, 0x48, 0xd8, 0x60, 0xda, 0x68, 0x0f, 0x8d, 0xa1, 0x9d, 0xde, 0x8a, 0x6b, - 0x08, 0xa1, 0x39, 0x1d, 0x1e, 0xe9, 0x92, 0xc2, 0xe6, 0x9b, 0x2f, 0x5a, 0x05, 0xf4, 0xcb, 0x6b, 0xc1, 0xcb, 0x04, - 0xee, 0x40, 0x5f, 0xf4, 0xdc, 0x3c, 0xdd, 0x5a, 0x90, 0xe3, 0xa3, 0xca, 0xd5, 0x9e, 0x22, 0xac, 0x7b, 0xca, 0x0f, - 0x8b, 0x43, 0xdd, 0x8c, 0xed, 0x52, 0xd8, 0x6f, 0x5f, 0x33, 0xf2, 0xd1, 0xc2, 0x02, 0x10, 0xa4, 0x82, 0x47, 0x52, - 0xd8, 0x70, 0x4a, 0x3e, 0x5c, 0x2c, 0x54, 0xb6, 0x60, 0x92, 0x91, 0x56, 0x2f, 0xd3, 0x96, 0xfe, 0x99, 0x8d, 0x68, - 0x4a, 0x31, 0x25, 0x89, 0x2b, 0x99, 0x69, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x10, 0xa7, 0x04, 0xe2, - 0x21, 0xf5, 0x0a, 0x6d, 0xe0, 0x15, 0x4e, 0x9b, 0xc5, 0x80, 0x0d, 0xd1, 0xd1, 0x31, 0xa6, 0x83, 0xcf, 0xc9, 0xbc, - 0x0d, 0x8f, 0x05, 0x7e, 0x1e, 0x92, 0x69, 0x53, 0x94, 0x09, 0x12, 0x12, 0xd2, 0xa6, 0x38, 0x84, 0xbd, 0x84, 0x70, - 0x62, 0x2a, 0x26, 0x03, 0x36, 0x6c, 0x4e, 0xcb, 0x8a, 0x1d, 0x57, 0xb1, 0x21, 0xca, 0x04, 0x53, 0xb1, 0x61, 0x2b, - 0xfa, 0xaf, 0x33, 0x68, 0x10, 0xf8, 0x00, 0x60, 0x00, 0x00, 0x85, 0xbc, 0x68, 0xbe, 0x38, 0x27, 0x6e, 0xb3, 0x9b, - 0x7b, 0xfc, 0x16, 0x58, 0xa0, 0xd5, 0xf6, 0xff, 0x2e, 0x94, 0x01, 0x7b, 0xca, 0x42, 0xc7, 0xcc, 0x2d, 0x8c, 0x8a, - 0x0e, 0xa0, 0x52, 0x22, 0x4c, 0xa1, 0x21, 0xb3, 0x9f, 0x68, 0xa8, 0x79, 0x5a, 0x83, 0x6c, 0xa0, 0x86, 0xcd, 0x04, - 0x8e, 0x18, 0x78, 0x87, 0x86, 0x4c, 0xb5, 0x31, 0x61, 0x98, 0xc1, 0x14, 0x13, 0x0d, 0x9e, 0x69, 0xdc, 0x5a, 0x0b, - 0x2d, 0xcb, 0xf5, 0xb3, 0xfe, 0xdf, 0x2a, 0xcc, 0x07, 0x45, 0xb3, 0x3d, 0x44, 0xfb, 0x84, 0x98, 0x8f, 0x21, 0x6c, - 0x32, 0x9b, 0xda, 0xd0, 0xdf, 0x47, 0x9d, 0xd8, 0x7c, 0xc2, 0x9f, 0xe1, 0x5a, 0xef, 0x00, 0x1d, 0x78, 0x50, 0xaf, - 0xbf, 0xa8, 0xa9, 0xbc, 0x3e, 0xee, 0x8c, 0x52, 0xb9, 0xeb, 0xdd, 0x69, 0x4f, 0x53, 0xec, 0x7b, 0xeb, 0xe1, 0xf2, - 0xa1, 0x1e, 0x02, 0x66, 0x0c, 0xfa, 0x96, 0x19, 0x7d, 0x2f, 0x44, 0x72, 0x41, 0x04, 0x16, 0x1a, 0x6b, 0x18, 0xec, - 0xad, 0x83, 0x03, 0x5d, 0x8d, 0x35, 0xe0, 0x79, 0x52, 0x04, 0x82, 0x81, 0x8b, 0xa0, 0x0c, 0x68, 0x92, 0xeb, 0xdb, - 0x70, 0xf2, 0x91, 0xd9, 0x5f, 0xb8, 0xbc, 0x7d, 0x2c, 0x8c, 0xb6, 0x55, 0x27, 0xdf, 0x97, 0x05, 0xee, 0xcb, 0x7b, - 0x49, 0xa3, 0xe0, 0x46, 0xe6, 0x26, 0x2f, 0xd7, 0x77, 0xeb, 0xae, 0x54, 0x67, 0x77, 0x33, 0x9d, 0xb2, 0x99, 0xce, - 0x76, 0x33, 0xbe, 0x66, 0xe6, 0x5b, 0x56, 0x91, 0xfa, 0x64, 0x8d, 0xe4, 0x9c, 0xe6, 0x3f, 0xd1, 0x39, 0x18, 0x05, - 0x73, 0x73, 0xaf, 0x0a, 0x27, 0x57, 0x46, 0x2e, 0xf6, 0x33, 0x4d, 0x5c, 0x91, 0xbe, 0x50, 0x87, 0x00, 0x2f, 0x2f, - 0xca, 0xc7, 0x07, 0xb8, 0xc8, 0x7f, 0x15, 0xa9, 0x8d, 0x72, 0x9a, 0x0b, 0x25, 0x72, 0x16, 0x20, 0x8d, 0xaa, 0x36, - 0x06, 0xf6, 0xd2, 0xec, 0x3d, 0xd9, 0xe7, 0x83, 0x2a, 0x62, 0xde, 0x50, 0x3f, 0xf7, 0xf1, 0x3d, 0x4d, 0xb1, 0x55, - 0x13, 0x27, 0xe4, 0x43, 0x12, 0x66, 0x20, 0x9b, 0x0d, 0xaa, 0xd7, 0x7e, 0x1b, 0x6d, 0x5c, 0x34, 0x43, 0xd9, 0xd7, - 0x4f, 0x9c, 0xfc, 0x50, 0x68, 0xe3, 0x00, 0xe3, 0xe8, 0x8f, 0x30, 0x35, 0x60, 0x4f, 0x22, 0x47, 0xa1, 0xa3, 0x3b, - 0x93, 0x76, 0xef, 0xa7, 0xdd, 0xeb, 0xb4, 0x0e, 0x94, 0x03, 0xd2, 0x6c, 0xcb, 0x74, 0xee, 0xdd, 0xf7, 0x3d, 0xbc, - 0x74, 0xbb, 0x86, 0x48, 0xdc, 0xf3, 0xc7, 0xda, 0x18, 0xe2, 0x0d, 0xd8, 0x88, 0xca, 0x83, 0x83, 0x3f, 0xac, 0xf7, - 0x6d, 0x25, 0xcb, 0xca, 0x6f, 0x84, 0x03, 0xdb, 0x60, 0x2a, 0x6d, 0x5e, 0x2a, 0x92, 0x05, 0xd8, 0x75, 0xee, 0xef, - 0x8e, 0x87, 0xff, 0x52, 0xfa, 0x4c, 0x8b, 0x71, 0x15, 0x7f, 0x25, 0xd2, 0xd2, 0x43, 0x54, 0x41, 0x04, 0xd2, 0xca, - 0xba, 0xd4, 0x37, 0x1d, 0xbd, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x0d, 0xcd, 0x8b, 0xdc, 0x2a, 0x82, 0x47, - 0x0b, 0x6b, 0x0c, 0xcd, 0x7d, 0xe9, 0x9d, 0x64, 0x02, 0xa2, 0xd6, 0xc7, 0xed, 0x4b, 0x22, 0xa1, 0xac, 0xee, 0x42, - 0x38, 0xdc, 0x85, 0x60, 0x5e, 0x06, 0x6d, 0x83, 0xd8, 0xed, 0x36, 0x68, 0x5b, 0x28, 0x89, 0x34, 0x81, 0xdb, 0xbd, - 0xc1, 0xc2, 0xde, 0x87, 0x97, 0x63, 0x39, 0x96, 0xee, 0x9a, 0xcc, 0x3c, 0x00, 0x04, 0x6a, 0x1f, 0x56, 0x3c, 0xb1, - 0x20, 0x88, 0xac, 0xe1, 0xe8, 0x7b, 0xce, 0x6e, 0x8d, 0xe5, 0xf0, 0x6c, 0xbe, 0x50, 0x2c, 0xd5, 0x77, 0xd4, 0x80, - 0x3f, 0x75, 0x3f, 0xaf, 0x9f, 0x92, 0x9a, 0x6e, 0xfc, 0x01, 0x84, 0x91, 0xb0, 0xca, 0x0e, 0xad, 0x90, 0x30, 0xc1, - 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0xa5, 0xc3, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x00, 0x9b, 0x78, 0x63, - 0x5e, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x07, 0xcd, 0xa0, 0xc1, 0x62, 0x1b, 0x94, - 0xd9, 0x45, 0x18, 0xcf, 0xcf, 0x4f, 0x74, 0x9c, 0xf6, 0x52, 0xaf, 0xfe, 0x5b, 0x02, 0x06, 0xf8, 0x12, 0xbc, 0xc4, - 0xfc, 0xe8, 0xae, 0x03, 0xd5, 0x80, 0xfa, 0xa2, 0xc1, 0x86, 0x68, 0xb5, 0x6a, 0x95, 0xcf, 0x40, 0xd9, 0x6b, 0x2e, - 0x69, 0xae, 0xb9, 0xa4, 0xbd, 0xe6, 0x92, 0xee, 0x9a, 0x4b, 0xea, 0x6b, 0x2e, 0xe9, 0xae, 0xb9, 0x1c, 0x08, 0x3f, - 0x79, 0x71, 0x1c, 0x43, 0x0e, 0x71, 0x15, 0x95, 0x89, 0x8c, 0x07, 0x17, 0x9e, 0xfb, 0x2c, 0x92, 0xe5, 0xf2, 0xfb, - 0x31, 0xe4, 0xb6, 0x6c, 0x25, 0xb4, 0xdb, 0x14, 0x93, 0x10, 0x39, 0xfd, 0xe0, 0xa0, 0x74, 0x77, 0x06, 0x1f, 0xf5, - 0x98, 0xe3, 0xa5, 0x71, 0xa2, 0xfd, 0x03, 0x74, 0xf2, 0xfa, 0xd7, 0xc7, 0x58, 0xac, 0x89, 0xb4, 0x26, 0xf7, 0xfb, - 0x6d, 0x47, 0x29, 0x3e, 0x25, 0x3a, 0x3c, 0x39, 0x8f, 0x94, 0x16, 0x41, 0x10, 0xa2, 0x24, 0xc7, 0x09, 0x11, 0x66, - 0xbf, 0x3b, 0x57, 0x78, 0xad, 0x8a, 0x72, 0x66, 0x25, 0x57, 0x19, 0x38, 0xb1, 0x6b, 0x2b, 0x0c, 0xd4, 0x03, 0x17, - 0x82, 0x44, 0x27, 0xfc, 0xd1, 0xcc, 0x0c, 0x39, 0x4b, 0xca, 0xa4, 0x8f, 0xcd, 0x4c, 0x13, 0xb0, 0x82, 0xec, 0x3b, - 0x98, 0x2d, 0xef, 0x62, 0x8a, 0xef, 0xe3, 0x04, 0xff, 0xbf, 0xec, 0xbd, 0xeb, 0x92, 0xdb, 0x46, 0x96, 0x2e, 0xfa, - 0x2a, 0x55, 0x0c, 0x99, 0x06, 0xc4, 0x24, 0x8b, 0xa5, 0xbd, 0x67, 0x22, 0x0e, 0x58, 0x29, 0x86, 0x2c, 0x59, 0xdd, - 0x72, 0x5b, 0x97, 0x56, 0xa9, 0xdd, 0x76, 0x33, 0x78, 0x68, 0x14, 0x90, 0x24, 0x20, 0x83, 0x00, 0x0d, 0x80, 0x55, - 0xa4, 0x48, 0xbc, 0xfb, 0x8e, 0xb5, 0x56, 0x5e, 0x41, 0xb0, 0xa4, 0x9e, 0xd9, 0xf3, 0xeb, 0x9c, 0x3f, 0x52, 0x31, - 0x91, 0x48, 0xe4, 0x3d, 0x57, 0xae, 0xcb, 0xf7, 0xdd, 0x15, 0xbb, 0xa0, 0xb4, 0x7d, 0x41, 0x94, 0xe1, 0x6f, 0xe9, - 0xf5, 0xf2, 0x10, 0xe2, 0x7d, 0x7a, 0x69, 0x7e, 0x91, 0xb6, 0xa2, 0x00, 0x0f, 0x11, 0x7a, 0x54, 0x07, 0x82, 0x9d, - 0xf1, 0x84, 0x07, 0x70, 0xb2, 0x9a, 0xe5, 0xfc, 0x49, 0x0a, 0xe2, 0x44, 0xc1, 0x21, 0xe0, 0x6a, 0x77, 0x9b, 0x7e, - 0x01, 0xc3, 0x97, 0x0e, 0xb6, 0x1c, 0xde, 0x15, 0xbb, 0x1e, 0x2b, 0xf9, 0x07, 0x60, 0xdf, 0xea, 0xc9, 0x58, 0xdd, - 0x1e, 0x38, 0xeb, 0x52, 0x8a, 0x8e, 0x37, 0xc5, 0xe1, 0xed, 0xf9, 0xec, 0xb0, 0x0b, 0x22, 0xb6, 0x0f, 0x32, 0xac, - 0x75, 0xd2, 0xf0, 0x9f, 0x68, 0xeb, 0x60, 0x31, 0xc2, 0xfe, 0x2f, 0xeb, 0x81, 0x97, 0x90, 0x1a, 0x0a, 0x5c, 0x0c, - 0xb6, 0x1c, 0xad, 0xed, 0x32, 0x0d, 0xdc, 0xd4, 0xa0, 0xd7, 0x0f, 0x14, 0xa2, 0xbc, 0x64, 0x34, 0x37, 0x82, 0x4d, - 0x63, 0xc8, 0xc5, 0xe1, 0xb8, 0x59, 0x0e, 0x79, 0x49, 0xd3, 0x69, 0x10, 0x4a, 0x77, 0x96, 0x0d, 0x24, 0x51, 0xf6, - 0x41, 0xa8, 0x5d, 0x5b, 0x0e, 0xbb, 0xc0, 0xf6, 0xe5, 0x8f, 0x86, 0xb1, 0x7f, 0xb5, 0x7c, 0x2a, 0xa4, 0x8b, 0x78, - 0x05, 0x82, 0xa8, 0xfd, 0x3c, 0x1b, 0x6e, 0xfd, 0xab, 0xcd, 0x53, 0xa1, 0xfc, 0xc6, 0x2b, 0x5b, 0x0e, 0xa9, 0xb3, - 0x16, 0xbe, 0x30, 0x1e, 0x1e, 0x5c, 0x19, 0xda, 0x8e, 0x47, 0xa1, 0xff, 0x36, 0x6b, 0x04, 0x37, 0x36, 0xb4, 0xcf, - 0x17, 0x3e, 0x6c, 0x6d, 0x34, 0xd6, 0x14, 0xd3, 0x2d, 0xf4, 0x6f, 0x32, 0x5b, 0xda, 0xd3, 0xa8, 0xe4, 0xc5, 0xb9, - 0x69, 0xc4, 0x42, 0x18, 0x30, 0xf4, 0x93, 0xf9, 0x00, 0xaa, 0xb9, 0xd3, 0x11, 0xc8, 0xe4, 0x03, 0x3d, 0x58, 0x93, - 0x5a, 0xf5, 0xd7, 0x30, 0x93, 0xff, 0x47, 0x2a, 0x2c, 0x46, 0x77, 0xdb, 0x30, 0x53, 0x7f, 0x44, 0xf2, 0x0f, 0x56, - 0xf1, 0x7d, 0xea, 0x85, 0xda, 0x8f, 0x85, 0x15, 0x18, 0x94, 0xa8, 0x1a, 0xd0, 0x03, 0x11, 0x54, 0x65, 0x90, 0x66, - 0x58, 0x9d, 0x83, 0x7e, 0xf7, 0xb4, 0xea, 0x48, 0x0e, 0x69, 0xad, 0x86, 0x54, 0x30, 0x55, 0x6a, 0x50, 0x1d, 0x8f, - 0xab, 0x94, 0xe9, 0x32, 0xe0, 0x92, 0xbe, 0x4a, 0x95, 0x52, 0xf8, 0x4f, 0x04, 0xa0, 0x73, 0x70, 0x8f, 0xaf, 0xc7, - 0x40, 0x9a, 0x61, 0xe1, 0xb7, 0x66, 0xa7, 0xd7, 0x24, 0xdc, 0x26, 0xc1, 0xc5, 0x00, 0xe7, 0xe8, 0x3a, 0x2c, 0x57, - 0x29, 0x44, 0x50, 0x95, 0x50, 0xdf, 0xdc, 0x34, 0x28, 0x6d, 0x35, 0x08, 0x6b, 0x12, 0xea, 0x4c, 0xb2, 0x51, 0x69, - 0xbb, 0x51, 0x98, 0x2d, 0xe2, 0x7a, 0x46, 0x58, 0x73, 0x36, 0x53, 0x0d, 0x4c, 0x1a, 0x8e, 0x9b, 0x46, 0x6b, 0x51, - 0xa1, 0xa6, 0x30, 0xaf, 0x71, 0x55, 0xa9, 0xea, 0x6e, 0xcf, 0x2d, 0xa5, 0x65, 0x7b, 0xd5, 0x4d, 0xb2, 0x21, 0x97, - 0xa1, 0x0c, 0x83, 0xad, 0x1c, 0xc1, 0x04, 0x92, 0xe4, 0xcc, 0xdf, 0xca, 0x3f, 0xd4, 0xa6, 0x6b, 0x01, 0x73, 0x8c, - 0x59, 0x36, 0x2c, 0xe8, 0x15, 0xb8, 0x07, 0x5a, 0xe9, 0xd5, 0x34, 0xbb, 0xaa, 0x82, 0x64, 0x58, 0xe8, 0x65, 0x93, - 0xf1, 0x3f, 0x85, 0x91, 0x26, 0x33, 0x56, 0xb2, 0xc8, 0x76, 0x75, 0x4a, 0x9c, 0xc7, 0x09, 0x6c, 0x8f, 0xa6, 0xb7, - 0x7c, 0x9f, 0x41, 0x54, 0x10, 0x28, 0x98, 0x31, 0x5f, 0x76, 0xf5, 0xcc, 0xf7, 0x99, 0x65, 0xea, 0x3e, 0x1e, 0x8d, - 0x19, 0xdb, 0xef, 0xf7, 0xab, 0x7e, 0x5f, 0xcd, 0xb7, 0x7e, 0x3f, 0x79, 0x6e, 0xfe, 0xf6, 0x80, 0x41, 0x41, 0x4e, - 0x44, 0x53, 0x21, 0x82, 0x7f, 0x48, 0x9e, 0x22, 0x19, 0xdd, 0x69, 0x9f, 0x5b, 0xce, 0x96, 0xf9, 0x09, 0x08, 0xe6, - 0xf1, 0x78, 0xad, 0xc0, 0xae, 0x25, 0x8a, 0x84, 0x2c, 0xff, 0x29, 0x18, 0xcf, 0xdc, 0x07, 0x58, 0x32, 0x00, 0x61, - 0xab, 0x3c, 0x5d, 0xef, 0xf9, 0x2a, 0x78, 0xa7, 0xe3, 0x5d, 0x63, 0x45, 0x06, 0xe2, 0x16, 0xd8, 0x88, 0xb5, 0xf6, - 0x80, 0x9c, 0x29, 0xc0, 0xf1, 0xe2, 0x78, 0xbc, 0x94, 0xbf, 0x74, 0xb3, 0x75, 0x02, 0x95, 0x02, 0xb7, 0x47, 0x27, - 0x07, 0xff, 0x1d, 0x68, 0x06, 0xe5, 0x30, 0x6f, 0x76, 0xbf, 0x33, 0x27, 0x3f, 0x3d, 0xc5, 0x3f, 0xe1, 0x21, 0x3a, - 0xfd, 0x76, 0x6f, 0xfe, 0xa0, 0xa8, 0x3c, 0x1e, 0xd5, 0xe2, 0x07, 0x9e, 0x1f, 0xf8, 0x85, 0x6f, 0x02, 0xb3, 0xc9, - 0xd4, 0x3b, 0xfb, 0x26, 0xaf, 0x98, 0x7a, 0x8d, 0xe7, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xdd, 0xc8, 0x89, - 0x76, 0xaa, 0x30, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, 0x96, 0x78, - 0x96, 0x2e, 0xaf, 0x27, 0x75, 0xb9, 0xd7, 0x8a, 0xa7, 0x03, 0xb0, 0xb8, 0x6d, 0xc0, 0x0b, 0xe0, 0xde, 0x62, 0xeb, - 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, 0x42, 0x30, - 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, 0x77, 0xf9, - 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0xe5, 0x60, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, 0x52, 0x3c, - 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfd, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xb3, 0x7b, 0x72, 0x65, - 0x20, 0x81, 0xa6, 0x03, 0xe0, 0x21, 0x54, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, 0x05, 0xf7, - 0xe9, 0xa7, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa7, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x2a, 0xfb, 0xa6, - 0x02, 0x2a, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, 0x53, 0x71, - 0x73, 0xad, 0xd3, 0xc5, 0xf3, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, 0x07, 0xf1, - 0xb6, 0xb6, 0xa7, 0x3f, 0xf6, 0x10, 0xe9, 0x78, 0x20, 0x17, 0xea, 0x6b, 0x48, 0x25, 0x17, 0xea, 0x06, 0x62, 0x17, - 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0xdb, 0x1a, 0x05, 0x2b, 0x01, 0x67, 0xda, 0x5b, 0x30, 0xd8, 0xc0, 0xba, 0x65, - 0x19, 0xfc, 0x0d, 0xd7, 0x34, 0x81, 0x1b, 0x16, 0x59, 0xef, 0x0d, 0xb6, 0xd2, 0x5b, 0x70, 0xb4, 0x4c, 0x9c, 0x4b, - 0x49, 0x56, 0xb6, 0xc8, 0xb8, 0x7a, 0x14, 0x52, 0x35, 0x3d, 0xdc, 0x89, 0xfa, 0x41, 0x88, 0x3c, 0x58, 0xa7, 0x2c, - 0x2a, 0xd6, 0x20, 0xb3, 0x07, 0x7f, 0x0f, 0x19, 0x39, 0xca, 0x81, 0xa3, 0xd0, 0x5f, 0x9a, 0x40, 0xe7, 0xf9, 0x29, - 0xd4, 0x79, 0x24, 0xd8, 0x4a, 0x3d, 0x14, 0x56, 0x5e, 0x40, 0x74, 0xb0, 0x85, 0xb1, 0xdc, 0x93, 0x50, 0xb1, 0x29, - 0x13, 0x79, 0x1c, 0xd4, 0x12, 0x30, 0x56, 0x10, 0xcc, 0x59, 0x25, 0x5d, 0x90, 0xf2, 0x46, 0x0f, 0x8b, 0xcc, 0xfd, - 0x9d, 0xa0, 0xfc, 0xdf, 0xa9, 0x9c, 0x70, 0x7d, 0x19, 0x02, 0x1c, 0xed, 0x77, 0x20, 0x4a, 0x8c, 0xf5, 0x8b, 0x16, - 0xef, 0x64, 0xe6, 0x6c, 0x6a, 0x07, 0x09, 0x32, 0xb6, 0xc7, 0xaf, 0x10, 0x5a, 0x2d, 0x14, 0x59, 0x34, 0x5c, 0x30, - 0xdd, 0x9e, 0xd2, 0xaa, 0x7b, 0xd8, 0xf0, 0xac, 0xf4, 0x50, 0xa9, 0x6f, 0x63, 0x02, 0xcb, 0x2a, 0x65, 0xf8, 0x76, - 0x42, 0xd5, 0x89, 0x41, 0xc5, 0xba, 0x65, 0x4b, 0x38, 0xc4, 0x62, 0xd2, 0x58, 0x67, 0x03, 0x1e, 0xb1, 0x04, 0xfe, - 0xd9, 0xf2, 0x31, 0x5b, 0xf2, 0x68, 0xb2, 0xbd, 0x59, 0xf6, 0xfb, 0xa5, 0x17, 0x7a, 0xf5, 0x2c, 0xfb, 0x2e, 0x9a, - 0xcf, 0xaa, 0xb9, 0x8f, 0x8a, 0x8b, 0xc9, 0x60, 0xb0, 0xf5, 0xb3, 0xe1, 0x90, 0x25, 0xc3, 0xe1, 0x24, 0xfb, 0x0e, - 0x5e, 0xfb, 0x8e, 0x47, 0x6a, 0x49, 0x25, 0x37, 0x19, 0xec, 0xef, 0x03, 0x1e, 0xf9, 0xac, 0xf3, 0xd3, 0xb2, 0xe9, - 0xd2, 0xfd, 0xcc, 0x8e, 0xbb, 0xd0, 0x1d, 0x60, 0xe3, 0x6d, 0x83, 0x8e, 0xfc, 0xeb, 0x1d, 0x52, 0xea, 0x26, 0x03, - 0xb0, 0x1b, 0x0d, 0x70, 0xc8, 0x54, 0x2f, 0x45, 0x56, 0x2f, 0x65, 0xaa, 0x97, 0x64, 0xe5, 0x12, 0x2c, 0x24, 0xa6, - 0xca, 0x6d, 0x65, 0xe5, 0x96, 0x0d, 0xd7, 0xc3, 0xc1, 0x36, 0x8a, 0xcb, 0x66, 0x05, 0xf7, 0x85, 0x35, 0x05, 0xfe, - 0xdf, 0xb1, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x5b, 0x74, 0x4c, 0x82, 0x0b, 0xc4, 0x3d, 0xbb, 0x03, 0x3b, 0x2c, 0xfc, - 0x05, 0xd7, 0xc9, 0x31, 0xdb, 0xe3, 0xa3, 0xd0, 0x2b, 0xd8, 0x9d, 0x4f, 0x40, 0xbb, 0x60, 0x6b, 0x80, 0x6c, 0x6c, - 0x87, 0x8f, 0x56, 0xc7, 0xe3, 0x5b, 0xcf, 0x67, 0x0f, 0xf8, 0xe3, 0x72, 0x75, 0x3c, 0xee, 0x3d, 0xa3, 0xde, 0xbb, - 0xe5, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xed, 0x0d, 0x8f, 0x27, 0x83, 0xc1, 0xad, 0xbf, 0xe0, 0xf5, 0xec, 0x16, 0xb4, - 0x03, 0x97, 0x0b, 0xa9, 0x6b, 0xf6, 0xee, 0x78, 0xe6, 0x2d, 0x70, 0x6c, 0xee, 0xe0, 0xe8, 0xed, 0xf7, 0xbd, 0x15, - 0x8f, 0xbc, 0x3b, 0x52, 0x31, 0xad, 0xb9, 0xe2, 0x78, 0xdb, 0xe1, 0x7e, 0xba, 0xe6, 0x21, 0x3c, 0xc2, 0xaa, 0x4c, - 0x6f, 0x83, 0xf7, 0x3e, 0x5b, 0x6b, 0x16, 0xb8, 0x07, 0xcc, 0xb1, 0x21, 0x3b, 0xa1, 0x99, 0xf8, 0x6b, 0xec, 0x9f, - 0x5b, 0xd5, 0x3f, 0x34, 0xff, 0x4b, 0xdd, 0x4f, 0xe0, 0xf6, 0x45, 0x16, 0x24, 0xf6, 0x9e, 0xdf, 0xb2, 0x7b, 0x6e, - 0xd8, 0x66, 0x2f, 0x4c, 0xd9, 0x67, 0x4a, 0x8d, 0x1f, 0x29, 0x75, 0x63, 0x19, 0x56, 0x32, 0x77, 0x5f, 0x46, 0xe0, - 0x70, 0x40, 0x7e, 0x5a, 0x21, 0x0e, 0x42, 0xeb, 0x26, 0xab, 0xb9, 0xa2, 0x9c, 0x0b, 0x6d, 0x99, 0x79, 0x15, 0xb0, - 0x98, 0xa5, 0x14, 0x1a, 0x0b, 0x00, 0x04, 0x93, 0x42, 0x6b, 0xef, 0x65, 0x00, 0x39, 0x41, 0xc3, 0x9f, 0x9a, 0xab, - 0xa2, 0xac, 0x65, 0x4b, 0x42, 0x94, 0xed, 0x7a, 0x78, 0x8d, 0x90, 0x69, 0xfd, 0xfe, 0x25, 0x91, 0xac, 0x4d, 0xf2, - 0x9b, 0x1a, 0x2d, 0x01, 0x39, 0x59, 0x02, 0x26, 0x7e, 0xae, 0xf9, 0x04, 0xe0, 0x49, 0xc7, 0x83, 0xfc, 0x3b, 0x5e, - 0x33, 0x41, 0x64, 0x1b, 0xb9, 0x3f, 0x29, 0x9e, 0x23, 0x19, 0x41, 0xf1, 0x5d, 0xad, 0x32, 0x16, 0x86, 0x79, 0xa0, - 0x80, 0xbc, 0x07, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, 0xe8, - 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x3d, 0x89, 0x6e, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, 0x67, - 0xd1, 0x77, 0xf9, 0x7c, 0x42, 0x4a, 0xb2, 0xe3, 0x31, 0x1b, 0x55, 0x75, 0xb1, 0x99, 0x86, 0xf2, 0xa7, 0x87, 0xe0, - 0xeb, 0x05, 0xf5, 0x9a, 0xac, 0x52, 0xfd, 0x1d, 0x55, 0xca, 0x8b, 0x86, 0xd7, 0xfe, 0x77, 0xb9, 0xdc, 0xf7, 0x80, - 0xb4, 0x96, 0x97, 0x5c, 0xbe, 0x1f, 0x21, 0xc6, 0x88, 0x1f, 0x78, 0x25, 0x8f, 0x58, 0xa8, 0xa6, 0x70, 0xcd, 0x23, - 0x04, 0x79, 0xcb, 0x74, 0xf0, 0xb7, 0x9e, 0x38, 0xdd, 0x9f, 0x28, 0xed, 0xe2, 0x0b, 0x8b, 0xba, 0x27, 0x6b, 0xeb, - 0x06, 0xe4, 0x60, 0xc3, 0x74, 0x51, 0x90, 0x6d, 0x4a, 0x23, 0x68, 0xa3, 0xe5, 0xc0, 0x86, 0x93, 0xab, 0x0d, 0x67, - 0xae, 0x21, 0xb8, 0x2f, 0x2f, 0xd3, 0xd1, 0x02, 0x3e, 0xa4, 0xba, 0xbd, 0xc4, 0xcf, 0x87, 0x0d, 0x8f, 0x80, 0xcc, - 0x8e, 0xf8, 0xcc, 0x26, 0x92, 0x4e, 0xea, 0x52, 0x01, 0xbb, 0x5d, 0xbc, 0x05, 0x39, 0x62, 0xe6, 0xbe, 0x42, 0xf5, - 0x2d, 0x1a, 0x70, 0x65, 0xac, 0x7d, 0x4d, 0x32, 0x16, 0xde, 0x94, 0xd3, 0x70, 0x90, 0xc3, 0x73, 0xfa, 0xda, 0x72, - 0x9b, 0x65, 0x3f, 0x17, 0x10, 0x04, 0x51, 0x12, 0x8f, 0x0f, 0x78, 0x5f, 0xe6, 0x43, 0x8d, 0x92, 0x8f, 0x65, 0x23, - 0x95, 0x5e, 0x89, 0xfe, 0x6e, 0xcc, 0x25, 0x06, 0x7c, 0x9b, 0xb7, 0x05, 0x85, 0xcb, 0xea, 0x78, 0xbc, 0xac, 0x46, - 0xc6, 0xb3, 0x0c, 0x54, 0x2b, 0xd3, 0x3a, 0x88, 0xcd, 0x7c, 0xb1, 0xf0, 0x17, 0x3b, 0x27, 0x11, 0x51, 0x10, 0xd8, - 0x91, 0xf0, 0x20, 0x52, 0xbf, 0xcc, 0x3d, 0xdd, 0xa9, 0x3e, 0x3b, 0x2c, 0x6c, 0x22, 0xbd, 0xa0, 0x64, 0xf2, 0x49, - 0x70, 0x50, 0xfd, 0x1d, 0x84, 0x0d, 0xe1, 0xcd, 0xab, 0x5e, 0x67, 0x99, 0x9a, 0x95, 0x20, 0x61, 0xc6, 0x1c, 0xc1, - 0xe3, 0xb0, 0xd3, 0xd8, 0x96, 0xc7, 0x16, 0x1c, 0x9d, 0xb7, 0x61, 0x2b, 0xb6, 0x66, 0x77, 0xaa, 0x4e, 0x0b, 0x1e, - 0x4e, 0x87, 0xd7, 0x01, 0xae, 0xbe, 0xcd, 0x25, 0xe7, 0x2b, 0x3a, 0xc1, 0x36, 0x03, 0x1e, 0x4d, 0xc4, 0x6c, 0xf3, - 0x5d, 0xa4, 0x16, 0xcf, 0x66, 0xc8, 0x17, 0xb4, 0xfe, 0xc4, 0x6c, 0x65, 0x92, 0x57, 0x03, 0xbe, 0x98, 0x6c, 0xbe, - 0x8b, 0xe0, 0xd5, 0xef, 0xc0, 0x8a, 0x91, 0x39, 0xb3, 0x6c, 0xf3, 0x5d, 0x84, 0x63, 0xb6, 0xfa, 0x2e, 0xa2, 0x51, - 0x5b, 0xcb, 0x7d, 0xe9, 0xae, 0x01, 0x61, 0xe5, 0x8e, 0xc5, 0xf0, 0x1a, 0x88, 0x67, 0xda, 0x48, 0xba, 0x91, 0x86, - 0xde, 0x98, 0x87, 0xd3, 0x38, 0xd8, 0x50, 0x2b, 0xe4, 0x99, 0x21, 0x66, 0xf1, 0x77, 0xd1, 0x9c, 0xad, 0xb1, 0x22, - 0x5b, 0x1e, 0x0f, 0xae, 0x27, 0xdb, 0x1b, 0xbe, 0x01, 0xf2, 0xb3, 0xc9, 0xd6, 0x6c, 0x51, 0x77, 0x5c, 0xcc, 0xb6, - 0xdf, 0x45, 0xf3, 0xc9, 0x1a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x35, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, 0x3d, - 0xb6, 0x19, 0x07, 0x2b, 0xb6, 0xb9, 0x0e, 0xee, 0xd8, 0x66, 0x0c, 0x44, 0x1c, 0xd4, 0xef, 0xde, 0x16, 0x16, 0x5f, - 0xc4, 0x36, 0xd7, 0x26, 0x6d, 0xfb, 0x5d, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xcd, 0xbc, 0x35, 0x83, 0x4b, - 0xc8, 0xd2, 0x8b, 0xd9, 0x76, 0x78, 0xcd, 0x36, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0x56, 0xfc, 0x8e, 0x25, 0x7c, 0xdd, - 0xc4, 0x37, 0x5b, 0xd0, 0x88, 0x9e, 0x64, 0xd0, 0x57, 0x50, 0x33, 0x73, 0x5e, 0x5a, 0x50, 0xb9, 0x87, 0x16, 0x1c, - 0x50, 0x90, 0xb6, 0x01, 0x82, 0x24, 0x9e, 0xdd, 0xcb, 0x70, 0x73, 0x2b, 0x85, 0x01, 0x37, 0x81, 0x19, 0x30, 0x30, - 0xfd, 0x0c, 0x7e, 0x58, 0xe9, 0x12, 0x21, 0xce, 0x7e, 0x4a, 0x49, 0x32, 0xcf, 0x4f, 0x45, 0x9a, 0xbb, 0x85, 0xeb, - 0x14, 0x66, 0x45, 0x81, 0xea, 0xa7, 0xa4, 0x34, 0xb0, 0x50, 0x89, 0x4c, 0xa5, 0xe0, 0x97, 0xcd, 0x79, 0x94, 0x9d, - 0xa2, 0x73, 0x5d, 0x5e, 0x4f, 0x9c, 0xd3, 0x49, 0xdf, 0x7f, 0xe0, 0x18, 0xb6, 0x90, 0x81, 0x0b, 0x7f, 0xea, 0x09, - 0xe3, 0xd4, 0x0a, 0xc4, 0x54, 0xf2, 0xec, 0x29, 0x7c, 0x26, 0xb4, 0x3a, 0xba, 0xf0, 0xfd, 0xa0, 0xd0, 0x26, 0xe9, - 0x16, 0x24, 0x29, 0x78, 0x8a, 0x5e, 0x72, 0xde, 0x06, 0x2a, 0xc5, 0x88, 0x16, 0x44, 0xda, 0x5a, 0x66, 0x0e, 0xd2, - 0x96, 0xe6, 0xbb, 0x26, 0x7e, 0x0e, 0x0b, 0xb8, 0x88, 0x16, 0x76, 0xa5, 0xe0, 0x51, 0x15, 0x2b, 0xf7, 0x36, 0xcf, - 0x11, 0xce, 0xe8, 0x5a, 0x26, 0x00, 0xae, 0xf7, 0xab, 0xb0, 0x56, 0x78, 0x45, 0xcd, 0x22, 0x2f, 0x6a, 0xfa, 0x64, - 0x0b, 0xdc, 0xc7, 0xa2, 0x44, 0x81, 0xb3, 0x16, 0x0c, 0xd8, 0x0a, 0x4b, 0x76, 0x52, 0xd8, 0x14, 0x2d, 0xa1, 0x77, - 0xc0, 0x4f, 0x07, 0x35, 0x93, 0x01, 0x34, 0x01, 0x34, 0x1e, 0xff, 0x02, 0x50, 0xd3, 0xdb, 0x5a, 0x6c, 0xaa, 0xa0, - 0x54, 0xca, 0x4d, 0xf8, 0x19, 0x18, 0x66, 0xf8, 0xa1, 0x90, 0xdb, 0x44, 0x89, 0x9c, 0x1f, 0x8b, 0x52, 0x2c, 0x4b, - 0x51, 0x25, 0xed, 0x86, 0x82, 0x47, 0x84, 0xdb, 0xa0, 0x31, 0x73, 0x7b, 0xa2, 0x8b, 0x56, 0x84, 0x72, 0x6c, 0x37, - 0x31, 0xd2, 0x28, 0xb3, 0xb3, 0x5d, 0x27, 0x0b, 0xed, 0xf7, 0x55, 0x0e, 0x59, 0x07, 0xac, 0x91, 0x7c, 0xbd, 0xe6, - 0xd0, 0x6d, 0xa3, 0xbc, 0x78, 0xf0, 0x7c, 0x05, 0xa7, 0x39, 0x9e, 0xd8, 0x5d, 0xaf, 0x3b, 0x45, 0x22, 0x5e, 0xe1, - 0xa4, 0xaa, 0x46, 0xb2, 0x70, 0xdc, 0xb9, 0xd3, 0x5a, 0xac, 0x95, 0x4c, 0xe3, 0x72, 0xd0, 0x00, 0xd0, 0x0c, 0x3e, - 0x95, 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, - 0x11, 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0xf3, 0x4a, - 0x0f, 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, - 0x3c, 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, - 0x5d, 0x28, 0xe7, 0x4c, 0xce, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, - 0x8c, 0x4e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x56, 0xa9, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, - 0xc6, 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, - 0x94, 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x07, 0x59, 0x14, 0x38, 0x80, - 0xab, 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0x0e, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, - 0xcc, 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, - 0xb4, 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x4f, 0x5f, - 0xa7, 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7d, 0x41, 0x11, 0x17, 0x35, 0xb8, - 0xf2, 0xce, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, - 0x0e, 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x46, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xac, 0x58, 0x3e, 0x5a, 0xa8, 0xcc, - 0x08, 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xd3, 0x3d, 0xba, 0xab, 0xce, - 0x32, 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, - 0x77, 0x9d, 0xe5, 0x5b, 0xa9, 0x66, 0x6b, 0x28, 0x2a, 0xb5, 0x92, 0x14, 0x07, 0x19, 0xae, 0xdb, 0xdc, 0x87, 0xcd, - 0x14, 0xf4, 0x8c, 0x91, 0xc8, 0x3c, 0x7f, 0x22, 0x5f, 0x82, 0x73, 0xc6, 0x59, 0x21, 0x30, 0x61, 0xac, 0xde, 0xb5, - 0x96, 0x4a, 0x43, 0x8a, 0xb1, 0x93, 0x51, 0x96, 0x55, 0x96, 0x2e, 0xb3, 0xb5, 0x84, 0x2d, 0xab, 0xc8, 0x2d, 0x6c, - 0x99, 0xc9, 0x6a, 0xbe, 0xcf, 0xb9, 0x83, 0xf2, 0xcd, 0x36, 0x19, 0x3f, 0x48, 0x64, 0xef, 0x36, 0x50, 0xc2, 0xf3, - 0xd1, 0x7f, 0x20, 0xfd, 0x36, 0xc3, 0x38, 0xe5, 0xb6, 0x92, 0x16, 0xe0, 0xf4, 0x8f, 0xc7, 0xf7, 0x39, 0x06, 0x0d, - 0x8e, 0x30, 0x8e, 0xac, 0xdf, 0xbf, 0xcb, 0xbd, 0x1a, 0x13, 0x75, 0xf4, 0x42, 0xbf, 0x9f, 0xd3, 0xc3, 0x69, 0x3e, - 0x5a, 0xa7, 0x3b, 0x64, 0x27, 0xb4, 0xb1, 0xf2, 0x83, 0x5a, 0x01, 0xb3, 0xb7, 0x3e, 0x9f, 0x0e, 0x40, 0xc7, 0x02, - 0x24, 0x9a, 0xcd, 0x44, 0x62, 0x4e, 0xba, 0x27, 0xe1, 0xe9, 0x81, 0x05, 0x0e, 0x30, 0x39, 0xff, 0x87, 0xf0, 0x66, - 0x60, 0x83, 0x46, 0x89, 0xbe, 0x46, 0x57, 0xb5, 0xb9, 0xd1, 0xf1, 0xd2, 0x53, 0x48, 0x64, 0x05, 0xcb, 0xe7, 0xbe, - 0xdc, 0xc0, 0x69, 0x0f, 0x35, 0x87, 0xca, 0x12, 0x3c, 0x3d, 0x97, 0xf9, 0xf1, 0xb8, 0xc9, 0xa0, 0xb0, 0xfd, 0x46, - 0x68, 0x6f, 0xcc, 0x52, 0x0d, 0x15, 0xe1, 0xa0, 0xf3, 0xb5, 0x98, 0xd5, 0x23, 0xfa, 0x7b, 0x7e, 0x3c, 0xae, 0x09, - 0x0c, 0x38, 0x2c, 0x65, 0x26, 0x5a, 0x28, 0x96, 0xd6, 0xd9, 0x8c, 0xea, 0xc0, 0x03, 0x13, 0x73, 0x16, 0xee, 0x01, - 0xb4, 0x49, 0xad, 0x02, 0xbd, 0x8a, 0xe8, 0x27, 0xee, 0xd7, 0xf6, 0xeb, 0xf5, 0xc8, 0x2c, 0x1d, 0xb9, 0x31, 0x16, - 0x00, 0x1c, 0x78, 0x59, 0x93, 0x3c, 0x27, 0x5f, 0x43, 0xbb, 0x27, 0x17, 0xf2, 0x27, 0x28, 0x5b, 0x78, 0xa5, 0x9a, - 0x56, 0x16, 0x6b, 0xae, 0xaa, 0x57, 0x17, 0x3c, 0x37, 0x99, 0xd6, 0x69, 0x25, 0x54, 0xac, 0x5f, 0x43, 0x5d, 0xe2, - 0xb5, 0xa6, 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x79, 0x6d, - 0x1c, 0x3e, 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0xab, 0x1a, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, - 0xc5, 0xc4, 0xee, 0xd0, 0xaa, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, - 0x01, 0x2f, 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x72, 0x26, - 0xc0, 0x0f, 0x4a, 0xad, 0xe9, 0x83, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, - 0xe7, 0xe3, 0xe5, 0xb5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x55, 0xab, 0x7f, 0x98, 0xea, 0x5b, - 0xe8, 0x4e, 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, - 0x1c, 0xec, 0x0d, 0x70, 0xe2, 0x97, 0xc7, 0xa3, 0xb8, 0xa9, 0x7c, 0x76, 0xd9, 0x35, 0xb2, 0x72, 0x00, 0x73, 0x88, - 0x82, 0x71, 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xcd, 0xf8, 0xf4, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0x55, - 0xdf, 0x3d, 0x03, 0xd2, 0xb2, 0x7e, 0x3f, 0x7a, 0x7e, 0x3d, 0x7d, 0x36, 0x8c, 0x02, 0x70, 0xec, 0xb2, 0x97, 0x97, - 0x31, 0x5f, 0x5d, 0x33, 0xcb, 0x14, 0x16, 0xf9, 0x66, 0x40, 0x75, 0xc9, 0x6a, 0xe9, 0x7a, 0x05, 0x58, 0xba, 0xfc, - 0xe6, 0x21, 0x4c, 0x0d, 0x68, 0x64, 0xcd, 0xdd, 0x69, 0xae, 0x05, 0x4a, 0x3d, 0xef, 0x67, 0x86, 0x7c, 0x5d, 0x06, - 0x5d, 0x41, 0xba, 0xe7, 0x11, 0xe9, 0xe5, 0x41, 0x3a, 0xdd, 0x1f, 0x4a, 0x01, 0x96, 0xfa, 0x52, 0x7c, 0x06, 0x85, - 0x45, 0xe3, 0x1b, 0x01, 0xda, 0x1a, 0xaa, 0x69, 0xaf, 0x14, 0x55, 0x2f, 0xe8, 0x95, 0xe2, 0x73, 0x4f, 0x0f, 0x95, - 0xf9, 0xb2, 0x74, 0xf4, 0x3f, 0xa3, 0xe6, 0x82, 0x13, 0x62, 0x26, 0xe6, 0x00, 0x2a, 0x41, 0x1b, 0xdf, 0xfa, 0x64, - 0xe3, 0x53, 0xbd, 0x8a, 0x9b, 0x3e, 0xaf, 0xad, 0x65, 0x4e, 0x08, 0x9b, 0xee, 0x25, 0x40, 0x45, 0x5e, 0x09, 0x8f, - 0x60, 0xf9, 0xe5, 0x0f, 0x79, 0xba, 0x42, 0xb4, 0x8e, 0x7b, 0x96, 0xb9, 0x34, 0xf6, 0xaf, 0x0d, 0xa6, 0xaf, 0x6f, - 0xb7, 0x45, 0x7e, 0x6a, 0x62, 0xc2, 0x7a, 0xac, 0xe8, 0x9b, 0x77, 0xe1, 0x5a, 0xa0, 0xc0, 0xa1, 0x44, 0x62, 0x9b, - 0x2a, 0x14, 0xf1, 0x20, 0xe9, 0xd3, 0x45, 0xeb, 0xd3, 0x00, 0x53, 0x6b, 0x39, 0x30, 0x87, 0x70, 0x15, 0x17, 0x3e, - 0x7a, 0xfa, 0x16, 0xb3, 0x70, 0x3e, 0xf1, 0x3e, 0x7a, 0xc5, 0xc8, 0x7c, 0xdc, 0x47, 0xa5, 0x92, 0xfe, 0x79, 0x3c, - 0xce, 0xf2, 0xb9, 0xef, 0xd0, 0x47, 0x7a, 0xa8, 0x72, 0x41, 0xd9, 0x1b, 0x63, 0x12, 0x81, 0xd2, 0x18, 0xef, 0xe3, - 0xe0, 0x38, 0xef, 0xd3, 0x00, 0x52, 0xfb, 0xc4, 0x7b, 0x52, 0x72, 0x78, 0xce, 0x31, 0x27, 0x94, 0x56, 0x84, 0xe5, - 0x7c, 0x91, 0xa1, 0x5c, 0x77, 0x4e, 0xc1, 0x24, 0x87, 0x04, 0xc3, 0x5f, 0x35, 0x6f, 0x62, 0x05, 0xc2, 0xae, 0x91, - 0x33, 0x47, 0x4f, 0xaa, 0x24, 0x2c, 0x05, 0x1c, 0x95, 0x99, 0x67, 0xd8, 0x1b, 0x9e, 0x18, 0x46, 0x0e, 0x56, 0xf9, - 0xa3, 0x3a, 0x11, 0xb9, 0x47, 0x17, 0x18, 0x95, 0x85, 0x57, 0x0d, 0x5d, 0x69, 0x50, 0x49, 0x76, 0xfa, 0x15, 0xd7, - 0x80, 0xda, 0x1a, 0x23, 0x96, 0x83, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, - 0x95, 0xdc, 0xf5, 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, - 0x2c, 0x85, 0x23, 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, - 0x42, 0x9a, 0x6c, 0x5f, 0xcf, 0x3f, 0xe4, 0x5a, 0x90, 0x95, 0x5b, 0xce, 0xe9, 0xb0, 0xf8, 0xc6, 0xd9, 0x57, 0x39, - 0x79, 0x8a, 0x59, 0x46, 0x7a, 0xa7, 0x98, 0x17, 0xf0, 0xa7, 0xb2, 0xd4, 0x93, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, - 0x97, 0xde, 0xb6, 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0x0f, 0xf1, 0x48, 0x9e, 0x61, 0x5b, 0x96, 0xb0, 0xd0, 0x2a, - 0x18, 0x03, 0x48, 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x8f, 0xc7, 0xcb, 0xad, 0x39, 0x4b, 0x0e, 0xe0, 0xfa, 0xca, - 0x13, 0xf3, 0x0e, 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x5b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, - 0x62, 0xad, 0x63, 0xc9, 0xad, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0x7f, 0x70, 0x83, 0xab, - 0x6b, 0x63, 0x50, 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0x8b, 0x8a, 0x7c, 0xf9, 0xad, - 0x9d, 0x03, 0x82, 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, - 0x33, 0xd8, 0xc4, 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, - 0xab, 0x85, 0x48, 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, - 0x41, 0x27, 0x68, 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, - 0x07, 0x99, 0x13, 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, - 0x74, 0x28, 0x59, 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, - 0x0a, 0x5c, 0x08, 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xd5, 0xb4, 0x90, 0xa6, 0x81, 0x6a, - 0x9a, 0x3b, 0xe6, 0x81, 0xbd, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0x55, 0xfc, 0x83, 0x74, 0x2f, 0xce, - 0xe1, 0x2f, 0x6b, 0xfa, 0x20, 0xc2, 0x46, 0x0e, 0x1a, 0x4b, 0x89, 0xb1, 0x51, 0xe1, 0xdf, 0x12, 0x65, 0x43, 0x86, - 0x80, 0x10, 0xd2, 0x46, 0x45, 0x3f, 0xac, 0x2f, 0xef, 0x32, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, - 0xa9, 0x47, 0x3c, 0x5e, 0x1b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, - 0x28, 0x17, 0xbc, 0xe2, 0x39, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xa8, 0xe8, 0xf3, 0x39, 0xf0, 0x4c, - 0x40, 0xa0, 0x63, 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0xb7, 0x48, - 0x94, 0xfa, 0x8a, 0x94, 0xa4, 0x6f, 0x45, 0x8d, 0x57, 0x62, 0x15, 0x91, 0x40, 0x86, 0x1a, 0x22, 0x56, 0xd5, 0x53, - 0xf7, 0xa6, 0x98, 0x0c, 0x06, 0xb9, 0x2f, 0xa7, 0x27, 0xde, 0xd0, 0x50, 0x79, 0xd7, 0x15, 0xed, 0xf4, 0x44, 0x2b, - 0xe5, 0x2d, 0xa4, 0x25, 0x68, 0x1a, 0x46, 0x9a, 0x43, 0xa9, 0x6b, 0xe9, 0x6e, 0x0c, 0xe2, 0x4b, 0x26, 0x7a, 0xb6, - 0x53, 0x3b, 0x4a, 0x5b, 0xd2, 0x1e, 0x42, 0x7a, 0xee, 0x92, 0x8f, 0x21, 0x42, 0x4c, 0x55, 0xa5, 0xbc, 0x09, 0xd1, - 0xc9, 0xfd, 0x80, 0x21, 0x11, 0xe8, 0x73, 0x8e, 0x61, 0x5d, 0x34, 0xd4, 0x18, 0x6c, 0x6d, 0xb6, 0x50, 0xc2, 0x7c, - 0xc9, 0x78, 0x2a, 0x19, 0x34, 0x00, 0x32, 0xe0, 0xb3, 0x97, 0x81, 0xe5, 0xaf, 0x20, 0x7e, 0xb4, 0xf1, 0xf1, 0xf8, - 0x67, 0x4d, 0x21, 0xb6, 0x7f, 0xc2, 0x66, 0x08, 0x8f, 0xea, 0x01, 0xcf, 0x7c, 0x13, 0x27, 0x68, 0x05, 0x24, 0x65, - 0x76, 0x34, 0x91, 0xbd, 0xea, 0x21, 0x9c, 0xca, 0x0a, 0xd4, 0x51, 0xd6, 0x59, 0x09, 0x3f, 0xc2, 0x54, 0xb7, 0x12, - 0x6b, 0x81, 0x36, 0x57, 0x2b, 0xd6, 0x02, 0x38, 0xf0, 0x2b, 0x08, 0x9e, 0xa8, 0xe6, 0xe0, 0x62, 0x50, 0x80, 0xcf, - 0x01, 0xf0, 0x22, 0x77, 0xe1, 0xc1, 0x3c, 0xb2, 0xac, 0x46, 0x18, 0x8e, 0x2a, 0x62, 0xfd, 0x9a, 0xed, 0xc8, 0x07, - 0x6e, 0xc7, 0xf8, 0x5c, 0x7b, 0x2c, 0x59, 0x0e, 0x46, 0x99, 0x7b, 0xb5, 0x44, 0xcf, 0x9b, 0x34, 0x6e, 0x46, 0x4f, - 0x0e, 0xb5, 0xfc, 0x5f, 0xd0, 0xcb, 0xa0, 0xbf, 0x85, 0x5b, 0x5e, 0xf3, 0xbb, 0x05, 0x91, 0x66, 0x7a, 0x05, 0x91, - 0x32, 0x6a, 0x44, 0xc6, 0x10, 0x36, 0xa9, 0x6e, 0x65, 0x93, 0xea, 0x42, 0xc0, 0xd3, 0x09, 0xa9, 0xae, 0x85, 0xb4, - 0x51, 0x4d, 0xeb, 0x40, 0xc6, 0x22, 0xbd, 0xfb, 0xf1, 0x2f, 0x2f, 0x3e, 0xbd, 0xf9, 0xe5, 0xc7, 0xc5, 0x9b, 0x77, - 0xaf, 0xdf, 0xbc, 0x7b, 0xf3, 0xe9, 0x37, 0x82, 0xf0, 0x98, 0x0a, 0x95, 0xe1, 0xc3, 0xfb, 0xdb, 0x37, 0x4e, 0x06, - 0xdb, 0x9b, 0x21, 0x6b, 0xdf, 0xc8, 0xc1, 0x10, 0x88, 0x6c, 0x10, 0x32, 0xc8, 0x4e, 0x6d, 0xfb, 0x33, 0x31, 0xc7, - 0xd8, 0x3b, 0x81, 0xc9, 0x16, 0x24, 0x87, 0x65, 0x5e, 0x32, 0x22, 0x57, 0x8e, 0xd6, 0x0f, 0x68, 0xc1, 0x5b, 0x70, - 0x91, 0x49, 0xf3, 0xd5, 0x2f, 0x04, 0xb1, 0x4f, 0x2b, 0xa9, 0xf2, 0xd5, 0xb6, 0xe6, 0xf9, 0xf6, 0x7e, 0x9f, 0xd3, - 0x8a, 0x99, 0x4b, 0x23, 0x6a, 0x01, 0x0e, 0xc0, 0x97, 0xf0, 0xc7, 0x8d, 0xb6, 0xa4, 0xc9, 0x2c, 0xfa, 0x2c, 0x84, - 0xa0, 0x4b, 0x03, 0x69, 0x62, 0x8f, 0xbc, 0xd4, 0x27, 0x0b, 0x09, 0xdc, 0x11, 0xc3, 0xa7, 0x15, 0x41, 0xaf, 0x18, - 0x51, 0x5c, 0x72, 0x85, 0x4a, 0x29, 0xf9, 0x37, 0xca, 0x2e, 0x2a, 0xe4, 0xac, 0x60, 0xf7, 0x8a, 0x1c, 0x19, 0x3f, - 0x08, 0x26, 0xbe, 0x0a, 0xdc, 0x7f, 0x89, 0x77, 0x38, 0x53, 0x1c, 0xc9, 0x09, 0x7f, 0xc8, 0x30, 0xb0, 0xbf, 0x02, - 0x9f, 0x57, 0x87, 0x79, 0x79, 0xab, 0x4f, 0xb9, 0x25, 0x1f, 0x4f, 0x96, 0x37, 0x60, 0xb0, 0x5f, 0xaa, 0xe6, 0x6e, - 0x78, 0x3d, 0x5b, 0xce, 0xd9, 0x61, 0x16, 0xcd, 0x83, 0x15, 0x9b, 0x65, 0xf3, 0x60, 0xdd, 0xf0, 0x0d, 0xbb, 0xe3, - 0x1b, 0xab, 0x6a, 0x1b, 0xbb, 0x6a, 0x93, 0x2d, 0xbf, 0x03, 0x09, 0xe1, 0x36, 0xf3, 0x72, 0x96, 0xb0, 0x95, 0xcf, - 0xb6, 0x20, 0xd1, 0xae, 0xd9, 0x16, 0x2e, 0x62, 0x1b, 0xfe, 0x63, 0xee, 0x6d, 0x59, 0xc9, 0x2e, 0xc7, 0xac, 0xc2, - 0xf9, 0xe7, 0xc3, 0x03, 0xda, 0x0b, 0xf5, 0xb3, 0x6b, 0xf5, 0x6c, 0xa2, 0xec, 0x66, 0xdb, 0xd1, 0xe2, 0x3e, 0xad, - 0xb6, 0x61, 0x86, 0x9e, 0xe5, 0xf0, 0xd1, 0x56, 0x0a, 0x7e, 0x7a, 0x81, 0x5f, 0xb2, 0xa3, 0xb6, 0xd2, 0xb6, 0x5d, - 0x95, 0xd8, 0x0a, 0x5a, 0x14, 0x59, 0xad, 0xf0, 0xc0, 0x8a, 0x3f, 0x87, 0x05, 0x8c, 0x3d, 0xc7, 0x39, 0xaf, 0xfd, - 0x11, 0x32, 0xde, 0x3b, 0x00, 0x68, 0x99, 0xe3, 0x00, 0x8f, 0x58, 0x31, 0x8a, 0x06, 0xef, 0xf2, 0x5a, 0x59, 0xad, - 0x34, 0x27, 0xa1, 0x6d, 0xc4, 0xaa, 0xe5, 0x48, 0xd5, 0x8c, 0x48, 0x1f, 0xa4, 0xe7, 0x7d, 0x8f, 0xa8, 0x06, 0x7b, - 0x32, 0xaf, 0x03, 0xfb, 0xf4, 0xb2, 0xb5, 0xaa, 0x3b, 0xbf, 0xa7, 0x4a, 0x97, 0x1c, 0xd9, 0xf2, 0xd3, 0x65, 0xf8, - 0xa0, 0xfe, 0x94, 0x5c, 0x1f, 0x0a, 0x1c, 0xe1, 0xb1, 0x0a, 0x38, 0x5f, 0xcf, 0x45, 0xbb, 0x13, 0x61, 0x57, 0x2e, - 0x01, 0x21, 0xbe, 0xa4, 0x69, 0x8e, 0xc7, 0x11, 0x4d, 0x44, 0xd8, 0xc4, 0xe8, 0x2f, 0xec, 0x3e, 0x94, 0x58, 0x2e, - 0x2b, 0x0d, 0x4a, 0x2e, 0x19, 0xbc, 0x27, 0xed, 0x35, 0x68, 0x96, 0x57, 0xae, 0x26, 0x13, 0x39, 0x28, 0x1f, 0x8f, - 0x05, 0xec, 0xa5, 0xc6, 0x4f, 0x13, 0x7e, 0xc2, 0xf2, 0xd6, 0xde, 0x9a, 0x52, 0x54, 0xd2, 0x00, 0x15, 0xf8, 0x98, - 0xc1, 0xff, 0xee, 0x0c, 0xb1, 0x60, 0x8a, 0x4e, 0x1f, 0xce, 0xc4, 0xdc, 0x7a, 0x6e, 0x95, 0x75, 0x92, 0xad, 0x51, - 0x4e, 0xc0, 0xbf, 0xa5, 0x3a, 0x4e, 0x12, 0xe1, 0xd4, 0x7b, 0xc4, 0x45, 0xdd, 0xcb, 0x21, 0xea, 0x86, 0xbd, 0xc9, - 0x75, 0xb0, 0xe5, 0x34, 0x0d, 0x4e, 0xc4, 0xaf, 0xd4, 0x67, 0xef, 0x33, 0x8b, 0x47, 0x1d, 0xd9, 0x88, 0x92, 0x34, - 0x8e, 0x45, 0x0e, 0xdb, 0xfb, 0x42, 0xee, 0xff, 0xfd, 0x3e, 0x84, 0x93, 0x56, 0x41, 0x52, 0x7a, 0x02, 0x11, 0xe1, - 0xe8, 0xf0, 0x23, 0xc2, 0x13, 0xa9, 0x2a, 0x7c, 0x52, 0x9f, 0xb9, 0x31, 0xbb, 0x17, 0xe6, 0xa8, 0xde, 0x01, 0x0c, - 0x63, 0xbd, 0xb3, 0x08, 0x49, 0xb4, 0xd2, 0x8c, 0xb6, 0x1e, 0x10, 0x23, 0xde, 0x6f, 0x2c, 0x32, 0x18, 0x6b, 0x4b, - 0x22, 0x01, 0x7c, 0x45, 0x42, 0x86, 0xb6, 0x8d, 0xc0, 0x8c, 0xe1, 0xed, 0xac, 0xb8, 0x74, 0x1d, 0xb6, 0x39, 0x87, - 0x2f, 0x64, 0xa1, 0x59, 0x47, 0x94, 0x26, 0x08, 0xf9, 0x07, 0x9c, 0x2c, 0x14, 0x46, 0xf3, 0xea, 0x24, 0x9d, 0x24, - 0xd6, 0xf7, 0x5d, 0xa5, 0x82, 0xcd, 0xe6, 0x16, 0xf5, 0x65, 0x27, 0xc9, 0x2f, 0xc1, 0x49, 0xc7, 0x49, 0x16, 0x39, - 0x88, 0x5a, 0x54, 0xce, 0x6d, 0x12, 0x96, 0x76, 0x75, 0xaa, 0xed, 0x66, 0x53, 0x94, 0x75, 0xf5, 0x4a, 0x44, 0x8a, - 0xde, 0x47, 0x3d, 0x7a, 0x22, 0x21, 0x15, 0x5a, 0x95, 0xda, 0xe7, 0x11, 0xb8, 0x6d, 0x6a, 0xc5, 0xb6, 0x5c, 0xc2, - 0x12, 0x35, 0xfe, 0x13, 0xf4, 0x51, 0x2e, 0x1e, 0x64, 0x80, 0x46, 0xc7, 0x53, 0xf3, 0xd6, 0x23, 0xaf, 0x9c, 0xe4, - 0x97, 0x56, 0x9b, 0xf4, 0x0b, 0x20, 0x33, 0xda, 0x3f, 0x5a, 0x4a, 0x20, 0x33, 0x30, 0x93, 0x96, 0x86, 0x44, 0x8e, - 0x62, 0x96, 0xe6, 0x7f, 0xe0, 0x8a, 0xad, 0x10, 0x69, 0x58, 0xcd, 0x3d, 0xfe, 0x22, 0xf7, 0x6a, 0xb9, 0x96, 0x99, - 0xe6, 0x66, 0x89, 0x63, 0xc5, 0xe2, 0xa2, 0x5e, 0x57, 0x22, 0x0b, 0x84, 0x38, 0xc2, 0x34, 0xd6, 0x53, 0x6f, 0x94, - 0x56, 0x1f, 0x90, 0x50, 0xe6, 0x47, 0xec, 0xed, 0xd8, 0xeb, 0x41, 0x16, 0xe2, 0xd8, 0x72, 0xb0, 0xd9, 0x7a, 0x9f, - 0xca, 0x54, 0xc4, 0x17, 0x75, 0x71, 0xb1, 0xad, 0xc4, 0x45, 0x9d, 0x88, 0x8b, 0xef, 0x21, 0xe7, 0xf7, 0x17, 0x54, - 0xf4, 0xc5, 0x43, 0x5a, 0x27, 0xc5, 0xb6, 0xa6, 0x27, 0xaf, 0xb1, 0x8c, 0xef, 0x2f, 0x88, 0xab, 0xe6, 0x82, 0x46, - 0x32, 0x1e, 0x5d, 0x7c, 0xc8, 0x80, 0xe4, 0xf5, 0x22, 0x5d, 0xc3, 0xe0, 0x5d, 0x84, 0x79, 0x7c, 0x51, 0x8a, 0x15, - 0x58, 0x9c, 0xca, 0xce, 0xf7, 0x20, 0xc3, 0x3a, 0xfc, 0x43, 0x5c, 0x00, 0xb4, 0xeb, 0x45, 0x5a, 0x5f, 0xa4, 0xd5, - 0x45, 0x5e, 0xd4, 0x17, 0x4a, 0x0a, 0x87, 0x30, 0x7e, 0x78, 0x4f, 0x5f, 0xd9, 0xe5, 0x6d, 0x16, 0x77, 0x59, 0xe4, - 0x4f, 0xd1, 0xab, 0x88, 0x98, 0x34, 0x72, 0xe1, 0xb5, 0xfb, 0xdb, 0xe6, 0xfe, 0xe1, 0x75, 0x63, 0xf7, 0xb3, 0x3b, - 0x46, 0x74, 0x41, 0x3d, 0x5d, 0x49, 0x4a, 0x05, 0x05, 0x04, 0x4e, 0x34, 0x6b, 0x3c, 0xb8, 0xe3, 0x80, 0x57, 0x03, - 0x5b, 0xb2, 0x8d, 0xcf, 0x9f, 0xc7, 0x32, 0x4c, 0x7b, 0x1b, 0xe0, 0x5f, 0x65, 0x6f, 0xba, 0x09, 0x96, 0x78, 0xdf, - 0x42, 0xb6, 0xa1, 0x37, 0xaf, 0xf8, 0x0b, 0xaf, 0x52, 0x7f, 0xb3, 0x7f, 0x00, 0x10, 0x06, 0xc4, 0xac, 0xfa, 0x68, - 0xe2, 0xde, 0x5b, 0x59, 0xf6, 0x4e, 0x96, 0x7d, 0x0f, 0xfd, 0x9a, 0xc4, 0xa8, 0xb4, 0xb2, 0x94, 0x4e, 0x96, 0x12, - 0xb2, 0x80, 0x4f, 0x8c, 0xa6, 0x36, 0x02, 0x08, 0xdb, 0x51, 0x2a, 0x5f, 0x00, 0xc2, 0x49, 0x02, 0x12, 0x62, 0x09, - 0x17, 0xa3, 0x7b, 0x2b, 0x19, 0x30, 0x1c, 0x42, 0x30, 0x07, 0xed, 0xb0, 0x37, 0x74, 0x13, 0xf1, 0xd7, 0xeb, 0xa2, - 0x7c, 0x13, 0x93, 0x4f, 0xc1, 0xfe, 0xec, 0xe3, 0x12, 0x1e, 0x97, 0x67, 0x1f, 0x87, 0xe8, 0x91, 0x70, 0xf6, 0x31, - 0xf8, 0x1e, 0xc9, 0x79, 0xdd, 0xf5, 0x38, 0x41, 0x6e, 0x21, 0xdd, 0xdf, 0x8e, 0x49, 0x80, 0xe6, 0x35, 0x2c, 0x47, - 0x4d, 0xc5, 0x35, 0x33, 0x63, 0x3c, 0x6f, 0xf4, 0xfe, 0xd8, 0xf1, 0x96, 0x29, 0x14, 0xb3, 0x98, 0xd7, 0xf0, 0x7b, - 0x56, 0x05, 0xea, 0xae, 0xb7, 0x49, 0x6e, 0x99, 0xd5, 0x73, 0xb4, 0xfb, 0xbe, 0xaf, 0x13, 0x41, 0xed, 0xef, 0xb0, - 0xe7, 0x99, 0xf5, 0xae, 0x8a, 0x81, 0x4b, 0x95, 0xec, 0x90, 0xa9, 0x6a, 0x7a, 0xa0, 0x52, 0x1a, 0x3c, 0xbd, 0xb4, - 0x2e, 0x5f, 0x2a, 0x6d, 0xe4, 0x99, 0xe6, 0x37, 0x80, 0x17, 0x53, 0x97, 0xc5, 0xfe, 0xab, 0xfb, 0x0a, 0x6e, 0xe3, - 0xfd, 0xfe, 0x32, 0xf7, 0xcc, 0x4f, 0x5c, 0x00, 0xf6, 0xa6, 0x42, 0xeb, 0x04, 0x4a, 0x0d, 0xeb, 0xf0, 0x65, 0x22, - 0xa2, 0x3f, 0xda, 0xe5, 0x3a, 0x73, 0x1d, 0x30, 0xa2, 0x88, 0xdf, 0xc6, 0xa3, 0x3f, 0x40, 0x71, 0x6d, 0xec, 0x01, - 0x61, 0x1d, 0x12, 0xfa, 0x8c, 0x00, 0xa4, 0x1e, 0x73, 0x94, 0x80, 0x66, 0x45, 0x73, 0xc7, 0xc0, 0xc1, 0x2f, 0xaf, - 0x94, 0xfe, 0x61, 0x99, 0x7b, 0x64, 0x4e, 0x69, 0x9b, 0x69, 0xac, 0xd6, 0xe4, 0x02, 0xe1, 0x15, 0x95, 0xac, 0xc2, - 0x67, 0xf3, 0x46, 0xf4, 0xfb, 0xf2, 0x08, 0x4f, 0xab, 0x1f, 0x77, 0x18, 0xdf, 0x0a, 0x88, 0x46, 0x02, 0xa0, 0x9f, - 0x00, 0xe6, 0x45, 0x36, 0xb3, 0xfb, 0x38, 0xa0, 0x4a, 0x89, 0xa6, 0x71, 0x36, 0xcf, 0x6f, 0xe9, 0x4d, 0xd9, 0x41, - 0xe7, 0x4e, 0x15, 0xb8, 0xe0, 0xaa, 0x64, 0xbc, 0xb2, 0x9e, 0xc9, 0xe7, 0x37, 0x77, 0xdb, 0x34, 0x8b, 0xdf, 0x97, - 0xff, 0xc0, 0xb1, 0xd5, 0x75, 0x78, 0x64, 0xea, 0x74, 0xed, 0x3c, 0xd2, 0xda, 0x0b, 0x01, 0x11, 0xed, 0x1a, 0x6a, - 0xbd, 0xb0, 0xd0, 0x23, 0x3d, 0x11, 0xce, 0x49, 0xa2, 0xa6, 0x1d, 0x68, 0x69, 0x84, 0xbe, 0xbe, 0xca, 0x8b, 0x2e, - 0x06, 0x6b, 0x5f, 0x8e, 0x59, 0x0e, 0x5d, 0xaa, 0x1e, 0xab, 0x87, 0xc6, 0x66, 0x0e, 0x3d, 0x6b, 0x55, 0x9e, 0x79, - 0xf9, 0xf1, 0x88, 0xf8, 0x30, 0xfa, 0x4b, 0x7e, 0xbf, 0xff, 0x8a, 0xe6, 0x1f, 0x13, 0x6a, 0xfc, 0x6c, 0x33, 0x40, - 0xd7, 0xbe, 0x2b, 0x0f, 0x44, 0x3d, 0xd7, 0x2a, 0x41, 0x88, 0x37, 0x88, 0x89, 0x66, 0xc4, 0x1c, 0x9c, 0x76, 0xa8, - 0xf9, 0x27, 0xa9, 0x01, 0x21, 0x4a, 0xbc, 0x8e, 0x29, 0x0b, 0x72, 0xda, 0xc4, 0x91, 0x7e, 0x14, 0x4e, 0xe4, 0x47, - 0x51, 0x15, 0xd9, 0x3d, 0x5c, 0x30, 0x98, 0x7a, 0x4f, 0xfb, 0x25, 0xfa, 0x2d, 0xe1, 0xc8, 0x39, 0x5a, 0x15, 0x82, - 0xc8, 0x19, 0x61, 0xad, 0x21, 0x4c, 0x10, 0x1b, 0xc4, 0xcb, 0xbe, 0x4b, 0x32, 0x1c, 0x29, 0xb8, 0xac, 0x63, 0xc7, - 0x98, 0xab, 0xa3, 0xea, 0x35, 0x80, 0xf1, 0xaa, 0x10, 0x34, 0x1b, 0x45, 0x76, 0x09, 0x51, 0x45, 0x8e, 0x27, 0xa0, - 0x76, 0x50, 0x1a, 0x9b, 0xe9, 0xe5, 0x38, 0x80, 0x09, 0x8e, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x2b, 0xd5, - 0xcf, 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x9c, 0xe9, - 0x72, 0x60, 0xdc, 0xb7, 0x3c, 0xa7, 0x38, 0xc3, 0x8f, 0x5e, 0x3e, 0xab, 0xe7, 0xfe, 0x74, 0x4b, 0xed, 0xc7, 0xdc, - 0xa8, 0x87, 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, - 0xfc, 0x43, 0x99, 0xae, 0x53, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, - 0xa2, 0xac, 0xdf, 0x87, 0xdf, 0x37, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, - 0x93, 0x41, 0x0d, 0xda, 0xf0, 0x2d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, - 0xec, 0x4f, 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xeb, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xa7, 0x97, 0xfc, - 0x06, 0xbd, 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, - 0x8f, 0x51, 0xc9, 0x62, 0x4b, 0x8f, 0x95, 0xd3, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x0e, 0xc1, - 0x12, 0x18, 0x17, 0xb1, 0xe1, 0xdb, 0x41, 0xc5, 0xe2, 0xd9, 0x76, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1e, 0x0b, 0x09, - 0x36, 0x93, 0xcd, 0x36, 0x73, 0xb6, 0xf1, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, - 0x35, 0x58, 0xad, 0xa6, 0xec, 0x54, 0x53, 0xf6, 0x4e, 0x53, 0x4e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, - 0x88, 0x4d, 0xa2, 0x9b, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, - 0x50, 0x85, 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, - 0xbe, 0xa5, 0x8e, 0x07, 0x94, 0x6d, 0xfe, 0x26, 0xf6, 0x41, 0x88, 0xdc, 0x8d, 0x7b, 0xf5, 0x33, 0xe2, 0xbd, 0xfd, - 0x09, 0xc6, 0x4f, 0x76, 0xda, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8c, 0xca, 0x24, 0x41, 0x2d, 0x4b, 0xe2, - 0x6f, 0x79, 0x32, 0xa8, 0xd8, 0x12, 0x3c, 0x68, 0xe7, 0x2c, 0x03, 0xfc, 0x15, 0xab, 0x45, 0xbf, 0xd5, 0xde, 0x12, - 0xe4, 0xa7, 0xad, 0xdd, 0x28, 0x4c, 0x8c, 0x20, 0x51, 0xb7, 0x2b, 0x03, 0xf9, 0xe1, 0x03, 0x4e, 0xc7, 0x53, 0x4f, - 0x19, 0x73, 0x2b, 0xd3, 0xcb, 0x74, 0xae, 0xe4, 0x1b, 0xb9, 0x97, 0x3e, 0xf6, 0x12, 0xec, 0x1c, 0xf0, 0x06, 0xd2, - 0x06, 0xde, 0xc2, 0x76, 0xe1, 0xb5, 0x41, 0xc2, 0x8c, 0x00, 0x5b, 0x9c, 0x1e, 0x23, 0x25, 0x30, 0x84, 0xe3, 0x2c, - 0x05, 0x60, 0x1a, 0x7d, 0x99, 0xcd, 0xed, 0xcb, 0xac, 0xd6, 0x6c, 0xa9, 0x9c, 0xee, 0x9d, 0x5b, 0xb7, 0xf3, 0x89, - 0x04, 0x00, 0x93, 0x3a, 0x07, 0xe2, 0xcc, 0x04, 0xbb, 0x34, 0x89, 0x2c, 0x1f, 0xc3, 0x7c, 0x25, 0x5e, 0x97, 0xc5, - 0x5a, 0x75, 0x45, 0xdb, 0x67, 0xa6, 0x9a, 0x91, 0x4e, 0x42, 0x05, 0x14, 0x14, 0x72, 0xad, 0x4f, 0xdf, 0x85, 0xef, - 0x82, 0x42, 0x03, 0xb3, 0xe5, 0xb8, 0xa7, 0xc9, 0x1a, 0xa9, 0x37, 0xf2, 0x7e, 0x9f, 0x5c, 0x03, 0xa9, 0xce, 0x1c, - 0x5a, 0xf6, 0x04, 0x9d, 0x64, 0x4f, 0x6e, 0xca, 0x52, 0xa8, 0x03, 0xa9, 0x07, 0x0c, 0x21, 0xda, 0xa6, 0x8f, 0x3f, - 0x19, 0x12, 0x5d, 0x80, 0x2d, 0x44, 0x1b, 0xf8, 0xf1, 0x27, 0xd8, 0x67, 0x41, 0x78, 0x4c, 0xf3, 0xb7, 0x90, 0x74, - 0x6a, 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0x95, - 0x94, 0xea, 0x00, 0x6d, 0x4a, 0xb9, 0xab, 0x2b, 0x3f, 0x88, 0xb6, 0xe0, 0xc8, 0x22, 0xfe, 0x3e, 0x43, 0x44, 0x30, - 0x33, 0x88, 0xb0, 0x6b, 0xa1, 0xee, 0xf6, 0x9c, 0x5a, 0x16, 0xf5, 0xb6, 0xe7, 0x94, 0xba, 0x0d, 0xc3, 0x77, 0x13, - 0xcc, 0x14, 0x37, 0xfc, 0x8f, 0xcc, 0x0b, 0xf5, 0xc6, 0x63, 0x51, 0xa0, 0x7b, 0xfe, 0x61, 0xc9, 0xf3, 0xd9, 0x56, - 0x99, 0x30, 0x57, 0x7c, 0x39, 0x0b, 0x65, 0x57, 0x4b, 0xe3, 0xce, 0x67, 0x6f, 0xa9, 0xe6, 0x83, 0x7f, 0x3c, 0x26, - 0x10, 0x6f, 0x14, 0xdf, 0xac, 0x1a, 0xb9, 0x75, 0x4d, 0xb6, 0x37, 0x25, 0xa0, 0x7e, 0x5f, 0x6e, 0x70, 0xbf, 0xc5, - 0xfa, 0x77, 0x4f, 0x83, 0x8c, 0xd5, 0x0c, 0x57, 0x4c, 0xe1, 0x53, 0x00, 0x18, 0x1c, 0x4e, 0x05, 0x69, 0x81, 0xb7, - 0xbc, 0x1c, 0x5e, 0x4f, 0xb6, 0x64, 0xd2, 0xdd, 0xfa, 0xc8, 0x9d, 0x05, 0xaa, 0xde, 0x6f, 0x28, 0x4e, 0x1a, 0x24, - 0x1a, 0x7b, 0x0d, 0xbe, 0xc8, 0x32, 0xca, 0x45, 0x13, 0xf7, 0x31, 0xf9, 0x4a, 0x0f, 0x60, 0xa5, 0x42, 0x09, 0x10, - 0xfd, 0xc6, 0xb2, 0xd8, 0x88, 0xb6, 0xc5, 0x06, 0x96, 0x52, 0x3e, 0xd7, 0xab, 0xe9, 0xb3, 0x57, 0xa2, 0x79, 0x1f, - 0xcd, 0x38, 0xa5, 0xd1, 0x80, 0xe3, 0x34, 0x0a, 0x77, 0xef, 0xef, 0x45, 0xb9, 0xcc, 0xc0, 0x92, 0xad, 0xc2, 0x29, - 0xae, 0x1b, 0x75, 0x46, 0xbc, 0xc8, 0x63, 0x05, 0xd0, 0xf1, 0x98, 0x00, 0xa8, 0x2e, 0x08, 0xa8, 0x88, 0x96, 0xd2, - 0x5b, 0xa1, 0xc5, 0x42, 0xbd, 0xe1, 0x28, 0x85, 0x3f, 0xd2, 0x9f, 0x07, 0xd5, 0x14, 0x80, 0xd8, 0xf5, 0x71, 0xf4, - 0xba, 0x28, 0xe9, 0x53, 0xc5, 0xac, 0x92, 0x83, 0x09, 0xec, 0xea, 0x44, 0x86, 0x9a, 0x43, 0xde, 0xbc, 0x2b, 0x6f, - 0x6e, 0xf2, 0x36, 0xc6, 0x29, 0xf9, 0x91, 0x9b, 0x8e, 0x35, 0x62, 0xe0, 0x95, 0xa7, 0x75, 0x9a, 0x20, 0x4d, 0x2e, - 0x80, 0x61, 0x88, 0xef, 0x32, 0xef, 0x85, 0xe7, 0x48, 0x55, 0x90, 0xcc, 0xf6, 0x99, 0xa7, 0x2e, 0xa2, 0xfa, 0xca, - 0xa9, 0xa5, 0x33, 0xa7, 0x1f, 0x01, 0xbc, 0xc7, 0xd4, 0xa4, 0x21, 0x1f, 0xe1, 0xb6, 0x14, 0x5f, 0xef, 0xd4, 0x35, - 0x5e, 0x1a, 0x9d, 0xbb, 0x97, 0x2f, 0xdd, 0x69, 0xd0, 0x4f, 0x41, 0x50, 0xce, 0x17, 0xa5, 0x80, 0x3d, 0x65, 0x36, - 0xd7, 0xab, 0x55, 0x2b, 0xb4, 0x8e, 0xc7, 0xb1, 0x76, 0x14, 0xd2, 0xea, 0x2c, 0x60, 0xab, 0x91, 0x4e, 0x09, 0x10, - 0x82, 0xe3, 0x34, 0xec, 0x0c, 0xe3, 0x2e, 0x9d, 0x46, 0x64, 0xbd, 0x52, 0x92, 0x2e, 0xcc, 0x20, 0xf9, 0x27, 0x79, - 0x3d, 0x03, 0x5a, 0x02, 0x38, 0x14, 0xb1, 0x84, 0x87, 0x93, 0xe4, 0x06, 0xa0, 0xd3, 0xe1, 0xa0, 0xd2, 0xd0, 0x9c, - 0xf9, 0x2c, 0x99, 0x4f, 0x62, 0xa9, 0xaa, 0x3c, 0x1e, 0x3d, 0xe5, 0x66, 0xd0, 0xef, 0x67, 0xd3, 0x52, 0xb9, 0x00, - 0x04, 0xb1, 0x2e, 0x0c, 0x10, 0x8f, 0xb4, 0xf0, 0x64, 0xd1, 0xa7, 0x24, 0x7e, 0x39, 0x4b, 0xe6, 0x26, 0x1b, 0xde, - 0x81, 0x11, 0x6c, 0xc6, 0x75, 0x49, 0x99, 0xf6, 0xa8, 0xfc, 0x9e, 0xd1, 0x53, 0xdb, 0xd7, 0x5a, 0x6d, 0x11, 0xeb, - 0x3a, 0xb8, 0x2a, 0x51, 0x4f, 0xf1, 0x41, 0x49, 0x82, 0xf7, 0x2b, 0xe7, 0x66, 0xa4, 0x7c, 0x2d, 0x2a, 0x3f, 0x68, - 0x67, 0x6a, 0xe5, 0xc0, 0x11, 0xa8, 0xb0, 0x8a, 0x4a, 0x5e, 0xef, 0x3a, 0x04, 0x4f, 0xee, 0x4a, 0x05, 0xca, 0xc1, - 0xcf, 0x41, 0x8c, 0xae, 0x6f, 0x3a, 0x6b, 0xa8, 0x99, 0x46, 0x95, 0x47, 0xd0, 0xb9, 0x03, 0x78, 0x52, 0xf0, 0x52, - 0xab, 0x1f, 0x8f, 0x47, 0xcf, 0xfc, 0xe0, 0x2f, 0x33, 0x7d, 0x0b, 0x31, 0x51, 0x4e, 0x35, 0x42, 0xe2, 0x4a, 0x49, - 0x22, 0x3e, 0x5d, 0xb4, 0xac, 0x18, 0x95, 0xe1, 0x03, 0xb0, 0x00, 0x51, 0xf9, 0xea, 0x54, 0xe5, 0xc5, 0x48, 0xdb, - 0x12, 0x78, 0x4d, 0xfe, 0x21, 0x72, 0xcd, 0x5b, 0x5f, 0x77, 0x95, 0xa1, 0x6f, 0x65, 0x05, 0x3a, 0x82, 0xad, 0x2c, - 0x25, 0x07, 0x7c, 0x52, 0xdf, 0x55, 0x5b, 0x9f, 0x53, 0xb6, 0x11, 0x6e, 0xf2, 0xeb, 0xd8, 0xc1, 0x91, 0xf2, 0x1b, - 0xbc, 0x14, 0xc0, 0x5e, 0x03, 0xf6, 0xe6, 0x8a, 0x15, 0xcd, 0xa3, 0x43, 0xda, 0x16, 0x68, 0x64, 0xe6, 0x76, 0xae, - 0xee, 0xdb, 0xf2, 0x28, 0x8d, 0x21, 0x32, 0xed, 0x91, 0xe9, 0x60, 0x33, 0xca, 0x7f, 0x4b, 0xf9, 0xad, 0xc2, 0x31, - 0xf0, 0xed, 0xdc, 0x3b, 0x80, 0xaa, 0xa7, 0x0d, 0x32, 0xd6, 0x0c, 0x43, 0x2b, 0xbb, 0x5c, 0x0a, 0x2d, 0x41, 0x4b, - 0xdd, 0x04, 0xc1, 0xf9, 0x11, 0x51, 0x8e, 0x00, 0x74, 0x91, 0x02, 0x26, 0xf8, 0x39, 0x6d, 0x77, 0xbf, 0xbf, 0x49, - 0x3d, 0x72, 0xef, 0x0a, 0x95, 0xcd, 0xf2, 0x4d, 0x8e, 0x30, 0xf6, 0x13, 0x8d, 0x19, 0x74, 0x72, 0x45, 0x4e, 0x78, - 0xd6, 0xea, 0xb0, 0xae, 0x9b, 0x32, 0x28, 0x8b, 0x63, 0x9e, 0x4f, 0x67, 0xbf, 0x3f, 0x39, 0xd4, 0x0d, 0xb2, 0x90, - 0xff, 0xce, 0x7a, 0x48, 0x06, 0xdd, 0x83, 0x50, 0x88, 0xde, 0x3c, 0x98, 0xe1, 0x7f, 0x6c, 0xcb, 0xb3, 0x6f, 0xb8, - 0x51, 0x27, 0x80, 0x39, 0xe2, 0x7a, 0xe9, 0x29, 0xda, 0x7a, 0xb8, 0x05, 0xb2, 0x0d, 0x5e, 0xde, 0xda, 0x6b, 0xa0, - 0xa2, 0x38, 0xfe, 0x15, 0xcf, 0xd4, 0xca, 0x06, 0x3f, 0x3d, 0x65, 0x3b, 0xf0, 0xf0, 0x22, 0x04, 0x14, 0xc3, 0xb2, - 0xf1, 0x2b, 0xcb, 0x71, 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, - 0x93, 0x7b, 0x2b, 0x72, 0xca, 0x5c, 0xe9, 0x61, 0x74, 0x5d, 0x92, 0xbe, 0x49, 0x3e, 0xb6, 0x86, 0xed, 0x77, 0xed, - 0x7e, 0x33, 0x44, 0x10, 0x42, 0x39, 0x7e, 0xce, 0xe8, 0x84, 0xc6, 0x87, 0x35, 0xd7, 0x3b, 0xbd, 0x7e, 0xef, 0x12, - 0x2f, 0xd8, 0x1a, 0x0d, 0xf0, 0x74, 0xe8, 0x62, 0x9e, 0xa8, 0xa1, 0xd3, 0x75, 0xed, 0x1c, 0x3c, 0x30, 0xc8, 0xf2, - 0xe4, 0x1b, 0x86, 0x25, 0xf6, 0x27, 0x11, 0x4f, 0xda, 0xaa, 0x8d, 0xed, 0x89, 0x6a, 0xa3, 0x66, 0xe0, 0x07, 0xaf, - 0xa0, 0xc0, 0xe8, 0x82, 0xb4, 0x06, 0xe3, 0x70, 0x04, 0x20, 0x2b, 0xc6, 0xf1, 0xc8, 0x60, 0x02, 0x43, 0xba, 0xa1, - 0x28, 0x00, 0x0f, 0x8f, 0xd3, 0x41, 0xc8, 0x00, 0xd2, 0x05, 0x0f, 0x0d, 0xdb, 0x24, 0xa4, 0xfc, 0x3c, 0x2f, 0x6b, - 0x35, 0x84, 0xbe, 0xb3, 0x50, 0x1d, 0xfb, 0x91, 0xf6, 0x8a, 0x75, 0xad, 0x4a, 0x27, 0xb6, 0x3a, 0x40, 0xdf, 0x90, - 0x81, 0x6f, 0x1d, 0x5b, 0x00, 0x44, 0x4b, 0xfc, 0x96, 0x7a, 0xb5, 0x2f, 0x63, 0x56, 0xa8, 0xd7, 0x17, 0xa6, 0x5d, - 0xaf, 0xa4, 0x45, 0x01, 0x15, 0xb7, 0xad, 0xda, 0x9e, 0xc8, 0xf9, 0x8f, 0xef, 0x3a, 0xda, 0xf1, 0xd9, 0xa9, 0xb1, - 0x25, 0x94, 0xb9, 0xc5, 0x13, 0x59, 0x1d, 0x6d, 0xa9, 0x4e, 0xf5, 0x01, 0x97, 0x9a, 0x54, 0x67, 0xda, 0xa7, 0xc9, - 0x12, 0xa0, 0xdc, 0x42, 0x24, 0x8d, 0xc3, 0xc1, 0xf9, 0x64, 0x50, 0x30, 0xb7, 0x48, 0x40, 0x02, 0xdb, 0xda, 0xda, - 0x45, 0x73, 0xfd, 0xfa, 0x2d, 0xf5, 0xf2, 0x36, 0x55, 0x3d, 0x78, 0xe3, 0x05, 0xce, 0xde, 0x69, 0x2d, 0x20, 0x80, - 0xc2, 0xd6, 0xb2, 0x1c, 0x9c, 0xbb, 0x5d, 0xd5, 0x52, 0x51, 0x46, 0xfd, 0xfe, 0xe5, 0x6f, 0x29, 0x2a, 0x62, 0xcf, - 0x15, 0xa7, 0xac, 0xdf, 0x6e, 0x99, 0x8b, 0xca, 0x92, 0x37, 0xa8, 0xa2, 0xb5, 0x3a, 0x6a, 0x72, 0xd7, 0xcd, 0x55, - 0x4b, 0x26, 0x88, 0xd1, 0x7d, 0xbe, 0xd6, 0x95, 0x53, 0xef, 0x83, 0x8a, 0x23, 0x06, 0x82, 0x9b, 0xee, 0xf1, 0xc1, - 0x41, 0x68, 0x54, 0x94, 0x0b, 0x6e, 0x94, 0x56, 0x95, 0x94, 0x42, 0xde, 0xaa, 0x68, 0xc5, 0xf4, 0x11, 0x00, 0x11, - 0x60, 0x95, 0xa8, 0xff, 0xcd, 0x97, 0xc6, 0x78, 0xf0, 0xc0, 0xd7, 0xe4, 0x3a, 0xb6, 0xde, 0x3f, 0xaf, 0x91, 0x56, - 0x1b, 0xc7, 0xa4, 0x56, 0xbd, 0x6c, 0x15, 0x2f, 0xbb, 0xd7, 0xa9, 0x18, 0x3c, 0xff, 0x9f, 0xfb, 0x00, 0x35, 0xa2, - 0xa5, 0x0c, 0x6e, 0x5d, 0x0d, 0xd0, 0xf8, 0x70, 0x2a, 0x7c, 0xe3, 0x87, 0x8c, 0xf3, 0xc1, 0x0c, 0x1d, 0xd5, 0xe6, - 0xe0, 0x80, 0xe0, 0xa8, 0xee, 0xd1, 0x98, 0x30, 0x0b, 0xe7, 0x1e, 0x04, 0xaa, 0x4f, 0xdc, 0x67, 0x5c, 0x7b, 0x41, - 0x9b, 0xc0, 0x27, 0xeb, 0xba, 0xa6, 0x08, 0x70, 0x11, 0x1b, 0x13, 0x31, 0xc4, 0x65, 0x93, 0x48, 0x7d, 0x33, 0x06, - 0x05, 0x40, 0xf1, 0x3c, 0x27, 0xb9, 0x74, 0x91, 0xe6, 0x95, 0x28, 0x6b, 0xdd, 0x8c, 0x9c, 0x15, 0xc3, 0x9c, 0xd5, - 0x7e, 0x50, 0xdc, 0xe4, 0x66, 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x7c, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, - 0xd2, 0xbb, 0x1c, 0xb7, 0xce, 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, - 0x3f, 0xe3, 0xcf, 0x09, 0x4c, 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x9c, 0x97, 0x93, - 0x70, 0x38, 0xf4, 0x41, 0x1f, 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, - 0x10, 0xd1, 0x42, 0x43, 0x1f, 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, - 0xda, 0xd0, 0x22, 0xc5, 0x45, 0xa3, 0xcc, 0x66, 0x95, 0xec, 0x84, 0xad, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, - 0x54, 0xad, 0xa7, 0x7a, 0x3d, 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa2, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, - 0xa3, 0x6a, 0x93, 0xa5, 0x11, 0x55, 0x6e, 0x52, 0xb9, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0xcd, 0xb5, 0xb3, 0x35, 0x38, - 0x71, 0xe4, 0xb9, 0xe4, 0x96, 0xef, 0xce, 0x2b, 0xba, 0x3b, 0xd5, 0xbe, 0x05, 0xb8, 0x37, 0xc3, 0x86, 0xcc, 0x79, - 0x8d, 0x9d, 0x06, 0x61, 0x12, 0xf8, 0x11, 0xfb, 0x98, 0x21, 0x1b, 0x0c, 0xe8, 0x28, 0xa4, 0x26, 0xc0, 0x32, 0x47, - 0x02, 0x26, 0x7f, 0x3d, 0xf7, 0x9b, 0x45, 0x91, 0xc3, 0x62, 0xfc, 0xb0, 0xc5, 0x48, 0x63, 0xb5, 0x06, 0xc3, 0x72, - 0x85, 0xc8, 0x9f, 0xda, 0x33, 0xd4, 0x54, 0xc7, 0x9b, 0xf5, 0x5a, 0xf3, 0xab, 0xa7, 0x4f, 0x75, 0x7d, 0xfe, 0xdb, - 0xf7, 0x97, 0x61, 0xcd, 0xec, 0x0f, 0x41, 0x28, 0xed, 0xc1, 0x2d, 0xce, 0x1d, 0x89, 0xde, 0xa9, 0xd2, 0xcc, 0x2e, - 0xed, 0x9a, 0x5d, 0x9b, 0xd2, 0x6e, 0xc9, 0xf5, 0xea, 0x2b, 0xe5, 0x8d, 0x9d, 0x57, 0x4c, 0xf7, 0x1f, 0x84, 0xde, - 0x51, 0xce, 0xd5, 0x04, 0x22, 0x9a, 0xb4, 0x23, 0x71, 0xbb, 0x57, 0x86, 0xcf, 0x26, 0x55, 0xbb, 0x84, 0x93, 0xae, - 0x61, 0x95, 0xf9, 0xf6, 0x3f, 0xf2, 0xaa, 0xb3, 0xc2, 0xed, 0x97, 0xc6, 0xac, 0xfd, 0x29, 0x88, 0xab, 0xfa, 0xc3, - 0x7b, 0x52, 0x33, 0x25, 0xff, 0x57, 0x3d, 0x06, 0xae, 0x7e, 0x32, 0xed, 0xe4, 0x9e, 0x42, 0xd8, 0x60, 0xf6, 0xf3, - 0xd3, 0x87, 0x16, 0xac, 0xaa, 0x0b, 0x14, 0xc9, 0x01, 0x74, 0xee, 0x9a, 0x11, 0xde, 0xef, 0x18, 0xe7, 0xfe, 0xcd, - 0x0f, 0x6a, 0x72, 0x84, 0x88, 0x76, 0x11, 0x0e, 0x00, 0xe2, 0x4e, 0x53, 0x59, 0x87, 0x1a, 0xa0, 0x0f, 0x08, 0xac, - 0x43, 0xdf, 0x66, 0x00, 0x07, 0x7d, 0xb4, 0x79, 0x16, 0x81, 0xbc, 0xee, 0xdd, 0xb3, 0xb7, 0x6c, 0xef, 0xf3, 0xe7, - 0xeb, 0xd4, 0xbb, 0x47, 0x87, 0xe0, 0xcb, 0xb1, 0x3f, 0xbd, 0x0e, 0x0c, 0x2e, 0x34, 0x7b, 0xfb, 0x54, 0xb0, 0x3d, - 0xdb, 0x3f, 0x45, 0xa4, 0xa2, 0xee, 0xfc, 0xc3, 0x6b, 0x13, 0x3d, 0xef, 0xbc, 0xb0, 0xe2, 0x4b, 0x00, 0x0f, 0x64, - 0x31, 0xa0, 0xf8, 0x2c, 0xbd, 0x7f, 0xb2, 0x04, 0xd4, 0xe4, 0x77, 0x7c, 0xe3, 0xbd, 0xa3, 0xd4, 0x05, 0xfc, 0x39, - 0xa0, 0xf4, 0x49, 0xc5, 0xbd, 0xd5, 0xf0, 0xce, 0xbf, 0x7a, 0x06, 0xce, 0x13, 0xeb, 0xe1, 0x02, 0xfe, 0x2a, 0xf8, - 0xd0, 0x5b, 0x0d, 0x30, 0xb1, 0xe4, 0x43, 0x6f, 0x3d, 0x80, 0x54, 0x85, 0x0b, 0x89, 0xb1, 0x0f, 0xbf, 0x06, 0x15, - 0xc3, 0x3f, 0x7e, 0xd3, 0x18, 0xac, 0xbf, 0x06, 0x85, 0x46, 0x63, 0x2d, 0x55, 0xc8, 0x52, 0x2c, 0x2e, 0x04, 0xd8, - 0x84, 0xe3, 0x6e, 0x5f, 0xac, 0x6a, 0xbb, 0x11, 0xf4, 0xe7, 0x23, 0xbe, 0x47, 0x63, 0x75, 0x55, 0xce, 0x45, 0xf9, - 0x11, 0xe9, 0x53, 0x1d, 0x1f, 0xa3, 0x62, 0x5b, 0x77, 0xa7, 0x53, 0xad, 0x3a, 0xd2, 0x7e, 0x53, 0xae, 0xc1, 0x8e, - 0xd7, 0xc9, 0x89, 0xa5, 0xf0, 0xa2, 0xc3, 0xce, 0x4b, 0xa7, 0x44, 0x87, 0x61, 0xbc, 0xdb, 0xaa, 0x67, 0x0c, 0xe5, - 0x95, 0xc1, 0x98, 0x2e, 0x78, 0xc4, 0x9f, 0x0f, 0x2a, 0x19, 0x1a, 0xf3, 0x01, 0xd9, 0x30, 0x94, 0x0f, 0x2d, 0x32, - 0x24, 0x44, 0xbc, 0x87, 0x4a, 0xc0, 0xb6, 0x05, 0x65, 0x52, 0xc0, 0x59, 0x34, 0xf8, 0xad, 0xf6, 0x2a, 0xe0, 0x3d, - 0x88, 0xfc, 0x46, 0xba, 0x94, 0x4b, 0x6c, 0x74, 0xe2, 0x58, 0x16, 0xda, 0x79, 0x5c, 0x7f, 0x1d, 0x83, 0xfa, 0xbd, - 0xd2, 0x6f, 0x50, 0xce, 0xfe, 0x28, 0x59, 0xa7, 0x8d, 0x27, 0xc6, 0xdf, 0x5d, 0xe5, 0x9f, 0xa2, 0xa5, 0x1e, 0xfe, - 0x3f, 0x63, 0x0a, 0xa5, 0x7f, 0x99, 0x96, 0xd1, 0x76, 0xbd, 0x14, 0xa5, 0xc8, 0x23, 0x71, 0xf6, 0xb5, 0xc8, 0xce, - 0xe5, 0x3b, 0x9f, 0x42, 0xbf, 0x00, 0xb4, 0xec, 0x13, 0x64, 0xf4, 0x0f, 0x4c, 0xf0, 0xe1, 0x0f, 0xda, 0xb9, 0xb6, - 0xe2, 0xe3, 0x49, 0x75, 0x63, 0xed, 0xdd, 0x8e, 0x17, 0x89, 0x51, 0x8c, 0x55, 0xbe, 0xea, 0x66, 0xe5, 0x44, 0x25, - 0x07, 0x46, 0xba, 0x26, 0x7b, 0x95, 0x92, 0x75, 0x3b, 0xdd, 0x4a, 0x20, 0xa2, 0x0a, 0xbc, 0xc7, 0xb8, 0x8a, 0x7d, - 0x04, 0xd3, 0x75, 0xc7, 0x65, 0xb4, 0xe3, 0x3d, 0xe3, 0xd5, 0x89, 0xb2, 0x82, 0xdb, 0x8d, 0x68, 0x4f, 0xe8, 0xe8, - 0xa7, 0x49, 0x6d, 0x59, 0x38, 0x00, 0xb9, 0x4b, 0x18, 0xcb, 0x86, 0x60, 0xc5, 0xa0, 0xf4, 0xf5, 0x9a, 0x92, 0x65, - 0x01, 0x16, 0x9d, 0x5d, 0x46, 0x20, 0x86, 0x75, 0xd3, 0x9c, 0xd1, 0xf1, 0xd2, 0xc5, 0xf9, 0xa0, 0x55, 0xa4, 0xe0, - 0x19, 0x2d, 0x3a, 0xe6, 0xa6, 0x23, 0xdd, 0x18, 0xed, 0xed, 0x0f, 0x06, 0x21, 0xc5, 0xf3, 0x07, 0xb6, 0x5a, 0x17, - 0x17, 0x89, 0x57, 0xc8, 0x44, 0x0b, 0x62, 0x29, 0x02, 0x33, 0x5e, 0x68, 0x1a, 0x61, 0x82, 0x32, 0x25, 0x58, 0xb4, - 0x46, 0x87, 0xf6, 0x87, 0x25, 0xec, 0x1e, 0x63, 0x04, 0x08, 0x54, 0x99, 0x3e, 0x87, 0xad, 0x09, 0xb3, 0xad, 0x8b, - 0x2d, 0xd0, 0x56, 0x31, 0x34, 0x08, 0x6b, 0x43, 0xcc, 0xc7, 0x34, 0x5f, 0xfd, 0x13, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, - 0xc1, 0xed, 0x9a, 0x84, 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xaa, 0x1d, 0x6b, - 0xa9, 0x77, 0xac, 0x8d, 0xde, 0xb1, 0x56, 0x0d, 0xff, 0x90, 0x79, 0x31, 0x4b, 0x40, 0xbf, 0xbb, 0xe6, 0xaa, 0x41, - 0xd0, 0x8c, 0x2d, 0xbb, 0x83, 0xdf, 0x12, 0x6b, 0xb7, 0xf4, 0xaf, 0x96, 0x6c, 0x61, 0xfa, 0x40, 0xb7, 0x0e, 0xb0, - 0x8c, 0xa8, 0xc9, 0xf7, 0xc8, 0xbb, 0xe9, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xc2, 0x67, 0x6f, 0xcd, 0x9b, 0xf7, 0x4f, - 0x23, 0xc8, 0xbd, 0xe7, 0xde, 0xfd, 0xf0, 0xad, 0x7f, 0xa5, 0x5b, 0x20, 0x27, 0xb3, 0x9c, 0x81, 0xd4, 0x11, 0x9f, - 0x20, 0x5a, 0xd9, 0x53, 0xbe, 0x13, 0x72, 0x67, 0xdb, 0x3c, 0xbd, 0x77, 0xb7, 0xb5, 0xd5, 0xd3, 0x7b, 0x96, 0x8f, - 0x28, 0x56, 0x9c, 0xa6, 0x48, 0x98, 0x45, 0x5b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xfd, 0xd3, 0x8e, - 0x8e, 0x97, 0x73, 0xc0, 0xee, 0xfe, 0x93, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0xf7, 0x4f, 0x33, 0x8d, 0xe7, - 0x70, 0x22, 0x9f, 0x8e, 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, - 0xd6, 0x35, 0x6f, 0xaf, 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, - 0x70, 0xba, 0xe4, 0xb1, 0xef, 0xd3, 0x2c, 0xad, 0xf7, 0xa8, 0xb5, 0xc8, 0x2d, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, - 0x61, 0xa9, 0xe9, 0x9f, 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2d, 0xae, 0x7e, 0x38, 0x2f, 0x94, - 0x6b, 0x37, 0x6f, 0xe3, 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x4e, 0x94, - 0x5d, 0x2c, 0xe1, 0x1e, 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf5, 0x8c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, - 0x62, 0x5b, 0xb8, 0x7a, 0xc6, 0xb6, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0xad, 0x6a, 0x8e, - 0x35, 0xd4, 0x6c, 0x63, 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0x56, 0x6d, 0xc5, 0xc7, 0xda, 0x5a, 0x97, 0xee, 0xf5, - 0x1e, 0xd5, 0x05, 0xb0, 0xf5, 0xdf, 0x9d, 0xae, 0x5c, 0xcf, 0x67, 0x04, 0xf0, 0xb5, 0xe0, 0xe3, 0xc9, 0x02, 0xbd, - 0x4a, 0x16, 0xfe, 0xdd, 0x40, 0x8d, 0xbf, 0xd3, 0xb9, 0x0b, 0x80, 0xae, 0xa4, 0xbc, 0x02, 0xf2, 0x0e, 0x2a, 0xcc, - 0x2d, 0xbb, 0xf2, 0xfe, 0xec, 0x3b, 0xec, 0x2d, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x83, 0x53, 0x41, 0x32, 0xb0, 0x97, - 0x15, 0xdb, 0x07, 0xb1, 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x80, 0x20, 0xae, 0xe0, 0x0e, 0xe2, 0xf0, 0xe4, 0x9f, - 0x83, 0xfb, 0xd6, 0x66, 0x7d, 0xcf, 0xac, 0xce, 0x09, 0x36, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0xd6, 0xfd, 0xbe, - 0xb7, 0xd7, 0x8e, 0x4f, 0x2b, 0xa9, 0x13, 0x3b, 0xaf, 0xd5, 0x5a, 0xb0, 0xb7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x80, - 0x5f, 0x70, 0x37, 0xe0, 0xf7, 0x1d, 0x6b, 0xcb, 0x7b, 0xcb, 0x16, 0x6c, 0x0f, 0x97, 0xa0, 0xa6, 0xbd, 0xec, 0xcf, - 0x2a, 0x17, 0xb4, 0x63, 0x97, 0xc4, 0xc3, 0x19, 0xb3, 0x5c, 0x99, 0x59, 0x27, 0xf9, 0x8d, 0xe8, 0x8c, 0xe9, 0xac, - 0xf5, 0x7c, 0xce, 0xe7, 0x93, 0x42, 0x83, 0xfa, 0x5d, 0x12, 0x1f, 0x51, 0xd1, 0x79, 0x02, 0x5b, 0xcb, 0x0a, 0xc8, - 0xbd, 0x2e, 0xc1, 0x5a, 0xab, 0x5d, 0xfa, 0xbd, 0x6a, 0xc0, 0x6d, 0xca, 0x61, 0x4d, 0x40, 0xd0, 0x9c, 0x59, 0x51, - 0x8f, 0xd9, 0x8e, 0x71, 0xf3, 0xd3, 0xcb, 0x1f, 0x9c, 0xb0, 0x64, 0xc5, 0x6a, 0x7f, 0xfa, 0xc3, 0x53, 0x4f, 0x7f, - 0xa7, 0xf6, 0xaf, 0x84, 0x1f, 0x8c, 0xff, 0x5d, 0xbb, 0xaf, 0xb5, 0x18, 0x95, 0xad, 0x72, 0x84, 0xc6, 0xdd, 0x4a, - 0x9a, 0x2c, 0x3f, 0x09, 0x4f, 0x58, 0x0b, 0x9e, 0x99, 0x33, 0x20, 0x2b, 0x60, 0x85, 0xb5, 0x4c, 0xc2, 0x39, 0xc6, - 0x6a, 0x69, 0xab, 0x6f, 0xd1, 0x34, 0xa7, 0x87, 0x73, 0x6d, 0x50, 0xa6, 0x9c, 0x9d, 0x11, 0xab, 0xe1, 0x32, 0x2c, - 0x4d, 0x28, 0x42, 0xf6, 0x60, 0x07, 0x37, 0x76, 0xca, 0x52, 0xca, 0x70, 0x8e, 0xc1, 0x84, 0x27, 0x62, 0x54, 0xee, - 0xfb, 0x87, 0x92, 0x57, 0x6d, 0x39, 0x28, 0x47, 0xd8, 0x47, 0x12, 0x25, 0x70, 0x2b, 0xd2, 0x42, 0x91, 0xb2, 0xf8, - 0xdb, 0x01, 0xba, 0xc0, 0x0b, 0xa8, 0xab, 0x51, 0xb7, 0x3f, 0x1c, 0xf1, 0xf0, 0x91, 0xa9, 0x0f, 0x8c, 0x58, 0x12, - 0xa8, 0xed, 0x45, 0x96, 0xae, 0x40, 0x85, 0xdf, 0xc3, 0xd5, 0x44, 0xec, 0xe7, 0x96, 0x14, 0x15, 0xd9, 0x48, 0x6f, - 0x68, 0x0d, 0x1e, 0xa1, 0x35, 0xe5, 0x07, 0x27, 0xd5, 0x26, 0x9d, 0x77, 0x84, 0x1c, 0xab, 0x6f, 0x2d, 0x61, 0xb4, - 0x2b, 0x7a, 0xf1, 0xe0, 0xe8, 0x3d, 0xcf, 0x57, 0xbd, 0xf2, 0x27, 0xae, 0x98, 0x27, 0xb7, 0x11, 0xa8, 0x5b, 0x41, - 0x75, 0x7b, 0xaf, 0x12, 0x2c, 0x58, 0xd2, 0xee, 0xe3, 0xb7, 0xb3, 0x76, 0x20, 0x2a, 0x63, 0x95, 0xbe, 0x26, 0x09, - 0x7b, 0x62, 0xd0, 0x29, 0x54, 0x55, 0x76, 0x77, 0xb4, 0x05, 0xae, 0x53, 0x96, 0xa2, 0x17, 0xb6, 0xc8, 0xdd, 0xf2, - 0xef, 0x9e, 0x2b, 0x72, 0xf6, 0x6b, 0x40, 0x70, 0x6a, 0xbe, 0x22, 0xbe, 0x9c, 0xe0, 0x51, 0x75, 0x0b, 0x1c, 0xe7, - 0xef, 0x00, 0xfe, 0xf1, 0x78, 0x0d, 0x9a, 0x80, 0x58, 0xb0, 0x5e, 0x1a, 0xf7, 0x58, 0x2f, 0x2e, 0xb6, 0xab, 0x24, - 0xdf, 0x82, 0x33, 0x03, 0xa5, 0x5a, 0xfa, 0x81, 0x53, 0xb5, 0x80, 0x0a, 0x07, 0xb3, 0x93, 0x7a, 0x61, 0x19, 0xf5, - 0x98, 0x3e, 0x3f, 0x83, 0x83, 0x23, 0x24, 0x00, 0xee, 0x97, 0x7d, 0x40, 0x02, 0x1e, 0x3a, 0xb3, 0x03, 0xc2, 0x09, - 0xb3, 0xa8, 0x0a, 0x24, 0x92, 0x23, 0xfd, 0xec, 0x31, 0x13, 0xc9, 0x1f, 0xcc, 0x7a, 0xce, 0x29, 0xd1, 0x63, 0x3d, - 0x75, 0x84, 0xf4, 0x58, 0xcf, 0x3a, 0x22, 0x7a, 0xac, 0x67, 0x1d, 0x1f, 0x3d, 0xd6, 0x33, 0xc7, 0x4e, 0x0f, 0x02, - 0x13, 0x20, 0xf2, 0x80, 0xf5, 0x68, 0x32, 0xf5, 0x14, 0xf7, 0x00, 0xd1, 0x20, 0xb0, 0x9e, 0x14, 0xce, 0x7b, 0x80, - 0x3c, 0x46, 0x62, 0x75, 0xd0, 0xfb, 0x8f, 0xf1, 0x77, 0x3d, 0x23, 0x23, 0x8f, 0x5b, 0x87, 0xd5, 0xff, 0xfa, 0x4f, - 0x08, 0x80, 0xc3, 0xb3, 0xa9, 0x77, 0x3d, 0x86, 0xac, 0xb2, 0x8c, 0x40, 0xf2, 0x13, 0x83, 0x2f, 0x5f, 0x00, 0x54, - 0x7d, 0xa6, 0x6b, 0x35, 0x39, 0x6a, 0x8f, 0x39, 0x74, 0xc5, 0x00, 0xb0, 0x0d, 0x4b, 0x54, 0xd5, 0xc2, 0x26, 0x2c, - 0x6e, 0x3f, 0xc3, 0x68, 0x2e, 0x9b, 0x5e, 0xd0, 0x40, 0x3d, 0x42, 0xf0, 0x4b, 0xeb, 0xa1, 0xb5, 0x96, 0x29, 0x87, - 0xae, 0x8d, 0xa2, 0xca, 0x86, 0xba, 0x84, 0xd5, 0x46, 0x44, 0x35, 0x51, 0xa4, 0x5c, 0x33, 0x8a, 0x62, 0xa9, 0x82, - 0x43, 0x26, 0x56, 0x10, 0x35, 0x4f, 0x5b, 0x6d, 0x15, 0x1c, 0x56, 0x80, 0xb0, 0x16, 0xd6, 0x42, 0x3a, 0x83, 0xda, - 0x3b, 0xfd, 0x48, 0xf9, 0xcb, 0x0b, 0xb9, 0x9d, 0x5b, 0x28, 0xc2, 0xed, 0x39, 0x28, 0x6f, 0xea, 0xaa, 0x54, 0x44, - 0xa3, 0x25, 0x50, 0xca, 0x8a, 0x20, 0xb2, 0x00, 0x01, 0x1c, 0x37, 0x10, 0xf8, 0xbc, 0xc6, 0x27, 0xd0, 0x28, 0x04, - 0xf2, 0x03, 0xeb, 0x70, 0xe3, 0x21, 0x2d, 0xb5, 0x46, 0x44, 0x89, 0xf8, 0xc9, 0xd5, 0x73, 0x6c, 0x5f, 0x3d, 0x8d, - 0xb5, 0xa5, 0x34, 0x41, 0xfc, 0xc4, 0x62, 0x0b, 0x31, 0x41, 0x54, 0x87, 0xe8, 0x04, 0x96, 0x13, 0x42, 0x14, 0xfe, - 0x10, 0xfa, 0xa9, 0x81, 0xbf, 0x64, 0xcb, 0x22, 0xaf, 0x09, 0x16, 0x33, 0x67, 0x80, 0x56, 0x45, 0xe0, 0x99, 0xce, - 0x96, 0xca, 0x9c, 0xe6, 0xd1, 0x91, 0x1d, 0x5c, 0x76, 0x1d, 0xec, 0xa5, 0x2f, 0x63, 0x27, 0xcb, 0xa6, 0x51, 0x1b, - 0x1b, 0x22, 0xe1, 0x15, 0xf9, 0xcb, 0x2c, 0x35, 0xce, 0x91, 0x6a, 0x7d, 0xd7, 0xc5, 0x6a, 0x45, 0xdb, 0x84, 0x55, - 0x88, 0x50, 0xb7, 0x0d, 0x95, 0x4b, 0x61, 0x36, 0x36, 0x4d, 0x03, 0x7c, 0xa1, 0xa8, 0x54, 0xca, 0x53, 0x5b, 0xa9, - 0xe4, 0x84, 0x77, 0x7d, 0x55, 0x8b, 0xd4, 0x15, 0xc1, 0x36, 0x66, 0xa8, 0x87, 0x72, 0xa3, 0xc6, 0xbe, 0xee, 0x58, - 0xa5, 0x77, 0x98, 0xa0, 0x62, 0xe4, 0x45, 0x0e, 0x2e, 0x4a, 0x0a, 0x32, 0x57, 0x43, 0x98, 0x3f, 0x6a, 0xf8, 0xb4, - 0xb0, 0xdc, 0x43, 0x09, 0x98, 0x1d, 0x35, 0xbc, 0x8c, 0x10, 0x88, 0xb8, 0x54, 0xf6, 0x15, 0x13, 0xbf, 0xa7, 0x60, - 0x96, 0x4c, 0xe8, 0x5e, 0xc4, 0xc2, 0x08, 0x6d, 0x7c, 0x92, 0x24, 0x53, 0xb9, 0x3e, 0x41, 0x17, 0x2a, 0x5c, 0x20, - 0x23, 0xb4, 0x48, 0xf3, 0x4f, 0x87, 0x53, 0x09, 0x3e, 0xa2, 0x4e, 0x01, 0xc7, 0xf3, 0xcb, 0xc2, 0xfa, 0xc9, 0x2a, - 0x89, 0xb9, 0xac, 0xcd, 0x7f, 0xd9, 0xc9, 0x31, 0xd8, 0xe5, 0x69, 0xe2, 0xb8, 0xfa, 0x8f, 0xaa, 0xa4, 0x78, 0xf8, - 0x39, 0xcd, 0x01, 0x45, 0x30, 0xb3, 0xa7, 0x18, 0x1f, 0xfb, 0x2c, 0x53, 0xc0, 0xdf, 0xae, 0xb7, 0x96, 0x4c, 0xec, - 0x92, 0x76, 0x2b, 0x65, 0xfc, 0x52, 0x1b, 0x76, 0x1c, 0x5c, 0x1a, 0x80, 0xe2, 0xac, 0xd1, 0x61, 0x79, 0xad, 0xdb, - 0x56, 0x8e, 0x0a, 0xd4, 0xfa, 0xdf, 0xbb, 0x85, 0x29, 0x6f, 0xf3, 0x52, 0x79, 0x9b, 0x87, 0x26, 0x40, 0x20, 0x32, - 0x43, 0x9e, 0x35, 0x1d, 0x93, 0xc4, 0xbd, 0x23, 0x25, 0xed, 0x3b, 0x52, 0xfc, 0xe8, 0x1d, 0x09, 0xf9, 0x96, 0xd0, - 0x91, 0x7d, 0xc9, 0xc9, 0x09, 0x94, 0x19, 0xec, 0xe5, 0x0d, 0x93, 0xfd, 0x03, 0xda, 0x0b, 0xe7, 0xb2, 0xbc, 0xe6, - 0x6f, 0x85, 0xb7, 0xf1, 0xa7, 0x9b, 0xf3, 0xae, 0xaa, 0x77, 0x5f, 0x99, 0x99, 0xc7, 0x63, 0x71, 0x3c, 0xe6, 0x26, - 0x68, 0x77, 0xc1, 0xc5, 0xa0, 0x62, 0xf7, 0x6e, 0x7c, 0xfc, 0x5b, 0x8e, 0x22, 0xb6, 0x52, 0x1e, 0x49, 0x17, 0x2a, - 0x31, 0xbc, 0x36, 0xf0, 0x30, 0x7b, 0x3e, 0x9e, 0xec, 0x6f, 0xee, 0x27, 0x83, 0xc1, 0x5e, 0xf5, 0xed, 0x8e, 0xd7, - 0xb3, 0xfd, 0x9c, 0x3d, 0xf0, 0xbb, 0xe9, 0x2e, 0x38, 0x34, 0xb0, 0xed, 0xee, 0x6f, 0xc4, 0xf1, 0xb8, 0x7f, 0xce, - 0x17, 0xfe, 0xe1, 0x01, 0x01, 0x9d, 0xf9, 0xe5, 0xb8, 0x8d, 0xf1, 0x73, 0xdb, 0x76, 0xd5, 0xda, 0x03, 0x3c, 0xfd, - 0x8f, 0xde, 0xed, 0x6c, 0x39, 0xf7, 0xd9, 0x13, 0xfe, 0x00, 0xfe, 0xf9, 0xb8, 0x49, 0x22, 0xf5, 0x89, 0x76, 0x99, - 0xbc, 0x05, 0x07, 0xf2, 0xbd, 0xcf, 0xde, 0xf0, 0x87, 0xd9, 0x72, 0xce, 0x8b, 0xe3, 0xf1, 0xfd, 0x34, 0x44, 0xb2, - 0xa6, 0xb0, 0x22, 0x96, 0x14, 0xcf, 0x0f, 0xc2, 0xd3, 0xf7, 0x22, 0x32, 0x44, 0x5a, 0xee, 0xdd, 0x21, 0xbb, 0x65, - 0x91, 0x1f, 0xc0, 0x07, 0xd9, 0xde, 0x9f, 0xc8, 0x9a, 0xd2, 0xfd, 0xe2, 0x89, 0x7f, 0x3c, 0xd2, 0x5f, 0x6f, 0xfc, - 0xe3, 0xf1, 0x3d, 0x7b, 0x40, 0x70, 0x74, 0xbe, 0x87, 0xfe, 0xd1, 0xb7, 0x0e, 0xa8, 0xca, 0xf0, 0xed, 0x6c, 0x3b, - 0xf7, 0x9f, 0xaf, 0xd9, 0x0a, 0xb8, 0x50, 0x94, 0x17, 0xda, 0x2d, 0x7b, 0x40, 0xaf, 0x33, 0x72, 0x22, 0x9a, 0xed, - 0xe7, 0x3e, 0x8b, 0xf1, 0xb9, 0xba, 0x2f, 0x26, 0x5f, 0xbd, 0x2f, 0xee, 0xd9, 0xae, 0xfb, 0xbe, 0x28, 0xdf, 0x74, - 0xd7, 0xcf, 0x8e, 0xed, 0xd9, 0x03, 0xcc, 0xb0, 0xb7, 0xfc, 0xb6, 0x39, 0x75, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, - 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0xb9, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x97, 0xde, - 0xa2, 0xd4, 0x45, 0x4f, 0xfb, 0x14, 0xe4, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x7c, - 0xa6, 0x1d, 0x3d, 0xaf, 0xbf, 0xed, 0x3d, 0x93, 0xdf, 0xc8, 0xc0, 0x16, 0x22, 0x29, 0x1c, 0xc7, 0x57, 0xcf, 0xce, - 0xf8, 0xaf, 0x5a, 0x1e, 0xb5, 0xda, 0x2f, 0x94, 0xfa, 0xf4, 0x25, 0x1d, 0xd1, 0xc4, 0xbd, 0x68, 0xcb, 0xb0, 0x46, - 0x59, 0x53, 0x4b, 0x87, 0x61, 0x5c, 0xc3, 0xbe, 0x3c, 0x70, 0xe8, 0x3b, 0x20, 0xd0, 0xe6, 0xa9, 0x14, 0x68, 0xe1, - 0x18, 0x46, 0x61, 0x16, 0x52, 0x1e, 0x17, 0x66, 0x29, 0xef, 0xa9, 0x40, 0x8b, 0x5b, 0x75, 0x8f, 0xa9, 0xed, 0x16, - 0x44, 0x58, 0xbd, 0x65, 0x5c, 0x5e, 0x37, 0xaa, 0x70, 0x5b, 0x80, 0xa2, 0x08, 0xca, 0xe0, 0x40, 0x72, 0xdb, 0x42, - 0x49, 0xb3, 0x51, 0x58, 0x8b, 0x55, 0x51, 0xee, 0x7b, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, - 0x75, 0x28, 0x17, 0xe9, 0xbf, 0x65, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xfb, 0x97, - 0xf4, 0xb3, 0xc1, 0x32, 0x72, 0x4a, 0xfd, 0x10, 0x8d, 0xee, 0xd2, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, - 0x0a, 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, - 0x26, 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, - 0x90, 0xdc, 0xa9, 0x73, 0x7f, 0x54, 0x4e, 0xfe, 0x1d, 0x0d, 0x91, 0x57, 0xdc, 0x20, 0x56, 0x16, 0x5c, 0x62, 0x31, - 0x54, 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xc7, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, - 0x13, 0x3e, 0x6e, 0xad, 0x45, 0x88, 0x3a, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, - 0x14, 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xc8, 0x49, 0xcf, 0x5f, 0x9a, 0x14, 0x65, - 0xcc, 0xf8, 0x20, 0xca, 0x48, 0xe4, 0x75, 0xb8, 0x12, 0xd3, 0x02, 0xf9, 0x46, 0x4f, 0x1f, 0x04, 0xd7, 0xf0, 0x6e, - 0xc8, 0xbd, 0x02, 0x6c, 0x09, 0xd8, 0x01, 0xee, 0x95, 0x19, 0xe5, 0x3a, 0xad, 0xeb, 0xb7, 0xd6, 0x43, 0x31, 0x0c, - 0x9f, 0x5a, 0x02, 0xdb, 0xc9, 0x3a, 0x3a, 0xd1, 0xc3, 0x87, 0xff, 0x75, 0x55, 0x73, 0xd4, 0xa9, 0x5c, 0xce, 0x4e, - 0x27, 0x2c, 0x45, 0xcc, 0xa0, 0xfb, 0xeb, 0xee, 0xa5, 0x00, 0xba, 0x5d, 0x16, 0xf3, 0x6c, 0xb4, 0x97, 0x7f, 0x4b, - 0x37, 0x56, 0x94, 0x36, 0xf1, 0x2e, 0xeb, 0x8d, 0xfd, 0xe1, 0xe8, 0x3f, 0x9e, 0xbe, 0x9b, 0x10, 0xaa, 0xce, 0x96, - 0x6d, 0x74, 0x9c, 0xcb, 0xff, 0xfa, 0xcf, 0x31, 0x59, 0x41, 0x50, 0x10, 0x96, 0x9d, 0x62, 0xa2, 0x82, 0x51, 0xa4, - 0xd8, 0xf0, 0xf1, 0x64, 0x83, 0x3a, 0xe1, 0x8d, 0xbf, 0xd4, 0x3a, 0x61, 0x62, 0x64, 0xa5, 0xf2, 0x37, 0x2c, 0x67, - 0x2b, 0x95, 0x59, 0x40, 0xe6, 0x41, 0x35, 0xd9, 0x18, 0x0d, 0xe6, 0x9a, 0xd7, 0xb3, 0xcd, 0x5c, 0x2a, 0x9f, 0xc1, - 0x94, 0xb3, 0x1c, 0x9c, 0x2d, 0x85, 0xdd, 0x93, 0x40, 0xd1, 0x9a, 0xa1, 0x1b, 0x7f, 0x8a, 0xad, 0x7a, 0x95, 0x56, - 0x35, 0xc0, 0x03, 0x42, 0x0c, 0x0c, 0xb5, 0x57, 0x0b, 0x0f, 0xad, 0x05, 0xb0, 0xf1, 0x47, 0xa5, 0x1f, 0x8c, 0x27, - 0x4b, 0xbe, 0x40, 0xfe, 0xe5, 0xc8, 0x51, 0xbb, 0xf7, 0xfb, 0xde, 0x3d, 0x48, 0xc1, 0x91, 0x6b, 0xa1, 0x40, 0x22, - 0xa0, 0x05, 0xdf, 0xfa, 0xca, 0x07, 0xe3, 0x2d, 0x6a, 0xab, 0x41, 0x41, 0xed, 0xe8, 0x96, 0xc7, 0x8e, 0xde, 0xf9, - 0xfe, 0x8c, 0xbe, 0x7a, 0xa1, 0x85, 0xe3, 0xaf, 0x9c, 0x91, 0x1b, 0xb6, 0xee, 0x90, 0x23, 0x9a, 0x49, 0x87, 0x10, - 0xb1, 0x66, 0x1b, 0xf6, 0x96, 0x54, 0xce, 0x9d, 0x43, 0x76, 0xfe, 0x08, 0x55, 0x7a, 0xad, 0xc7, 0xb7, 0x13, 0xa5, - 0xbb, 0x3d, 0xdd, 0x4d, 0xbe, 0x65, 0x13, 0x11, 0x83, 0x01, 0x6d, 0x10, 0xce, 0xc8, 0x3a, 0x44, 0x2a, 0x1d, 0x20, - 0x04, 0x8e, 0x09, 0x68, 0xfa, 0xf7, 0xaf, 0x49, 0x14, 0x70, 0xa4, 0x8d, 0x90, 0xb5, 0xec, 0x78, 0xac, 0x40, 0xa3, - 0xdc, 0xfc, 0xe1, 0x15, 0xea, 0x34, 0x07, 0xe6, 0xe9, 0x12, 0xf6, 0x1c, 0x3c, 0xd2, 0x8b, 0xd3, 0x23, 0xfd, 0xbf, - 0xa3, 0x89, 0x1a, 0xff, 0xfb, 0x9a, 0x28, 0xa5, 0x45, 0x72, 0x54, 0x4b, 0xdf, 0xa4, 0x8e, 0x82, 0x8b, 0xbc, 0xa3, - 0x16, 0xb2, 0x67, 0xd9, 0xb8, 0x51, 0xcd, 0xfb, 0xff, 0xb5, 0x32, 0xff, 0x5f, 0xd3, 0xca, 0x30, 0x25, 0x3b, 0x96, - 0x6a, 0xe6, 0x81, 0x56, 0x31, 0xcc, 0x7e, 0x26, 0x09, 0x91, 0xe1, 0xd2, 0x80, 0x1f, 0x55, 0x70, 0x88, 0xd3, 0x6a, - 0x93, 0x85, 0x7b, 0x54, 0xa2, 0xde, 0x89, 0x55, 0x9a, 0xbf, 0xa8, 0xff, 0x25, 0xca, 0x02, 0xa6, 0xf6, 0xaa, 0x4c, - 0xe3, 0x80, 0x2c, 0xfc, 0x59, 0x58, 0xe2, 0xe4, 0xc6, 0x36, 0xfe, 0x2c, 0xc7, 0xd3, 0x7e, 0xd5, 0x99, 0x79, 0x20, - 0x81, 0x1a, 0x88, 0x3f, 0x72, 0x2e, 0x2b, 0x8b, 0x07, 0x84, 0x6e, 0xfe, 0xb1, 0x2c, 0x8b, 0xd2, 0xeb, 0x7d, 0x4a, - 0xd2, 0xea, 0x62, 0x2d, 0xea, 0xa4, 0x88, 0x15, 0x94, 0x4d, 0x0a, 0x30, 0xfa, 0xb0, 0xf2, 0x44, 0x1c, 0x5c, 0x20, - 0x50, 0xc3, 0x45, 0x9d, 0x84, 0x00, 0x34, 0xac, 0x10, 0xf6, 0x2f, 0xa0, 0x85, 0x17, 0x61, 0x1c, 0x6e, 0x00, 0x26, - 0x27, 0xad, 0x2e, 0x36, 0x65, 0x71, 0x9f, 0xc6, 0x22, 0x1e, 0xf5, 0x14, 0x25, 0xcb, 0xc7, 0xca, 0x95, 0x73, 0xfd, - 0xc3, 0x1f, 0x14, 0xc0, 0x6e, 0xc0, 0x6c, 0x5b, 0x60, 0x07, 0x00, 0x09, 0x0a, 0x64, 0x0b, 0x75, 0x1a, 0x5d, 0xa8, - 0xa5, 0x02, 0xef, 0xb9, 0x1e, 0xe0, 0x1f, 0x2b, 0xc0, 0x32, 0xae, 0x0b, 0x19, 0x30, 0x82, 0x00, 0x46, 0xe0, 0xa0, - 0x04, 0x0c, 0x9d, 0x61, 0x6d, 0xf1, 0xb8, 0x43, 0x73, 0xa5, 0xdb, 0x92, 0x9b, 0x46, 0x39, 0x5b, 0x89, 0x00, 0xfa, - 0xea, 0xa6, 0xc4, 0xe9, 0x72, 0xd9, 0x4a, 0xc2, 0xbe, 0x7d, 0xdf, 0x4e, 0x15, 0x79, 0x7c, 0x92, 0x86, 0xbc, 0x02, - 0x4f, 0x32, 0x8e, 0x24, 0x51, 0x22, 0xf8, 0x58, 0x35, 0x66, 0x1c, 0x5e, 0xb4, 0x29, 0xa7, 0x0e, 0x66, 0xbd, 0x00, - 0x9c, 0x27, 0x68, 0xcb, 0x00, 0x63, 0x01, 0x83, 0x73, 0x21, 0x96, 0x3c, 0x45, 0xf0, 0x4b, 0x27, 0x52, 0x18, 0x77, - 0x39, 0x0c, 0xf3, 0xa0, 0xe8, 0x5d, 0x52, 0x7f, 0xf4, 0xfb, 0xa8, 0x4d, 0x06, 0x43, 0x50, 0x09, 0xa0, 0xb2, 0x6e, - 0x90, 0x18, 0x58, 0x95, 0x16, 0x12, 0x97, 0x10, 0x2f, 0xf3, 0xd5, 0xb4, 0x8e, 0x82, 0xf7, 0xf5, 0x84, 0x10, 0x4e, - 0x30, 0x3e, 0xc4, 0x0d, 0x10, 0x30, 0x58, 0xc5, 0x05, 0x06, 0xc9, 0x73, 0x89, 0xee, 0x8f, 0xe7, 0x3b, 0x06, 0xb8, - 0x72, 0xde, 0x53, 0xed, 0xea, 0x81, 0xbd, 0x5c, 0xa5, 0x4b, 0x46, 0x08, 0x2b, 0xfe, 0x2f, 0x22, 0xef, 0xdb, 0x61, - 0x02, 0x6a, 0x1b, 0xf9, 0x63, 0x90, 0x98, 0xcb, 0x44, 0x11, 0xc4, 0xa3, 0xac, 0x60, 0x49, 0x1a, 0x6c, 0x47, 0x49, - 0x0a, 0x1a, 0x4d, 0x8c, 0x21, 0x53, 0xa1, 0x1d, 0x92, 0x46, 0xb3, 0x31, 0xd9, 0xc7, 0x90, 0xd7, 0x70, 0xb1, 0x58, - 0xe0, 0x7d, 0x3f, 0x0b, 0xd5, 0xc1, 0xb6, 0x34, 0x87, 0x80, 0x93, 0x04, 0x7b, 0xea, 0x8a, 0x94, 0x84, 0xd9, 0xe8, - 0x53, 0xc8, 0xb9, 0x01, 0x1d, 0x27, 0x8d, 0xa1, 0xfa, 0xc0, 0x24, 0xbc, 0x89, 0xd0, 0x49, 0x59, 0x21, 0x2c, 0xe0, - 0xbe, 0x91, 0xd1, 0x68, 0x25, 0x0d, 0x02, 0x6f, 0x33, 0x6c, 0x05, 0x36, 0xa1, 0xe1, 0x2f, 0x32, 0x0f, 0xd3, 0x6a, - 0x56, 0x82, 0x39, 0xdf, 0x40, 0x25, 0xc6, 0x93, 0xe5, 0x0d, 0xdf, 0xba, 0x58, 0x89, 0xc9, 0x6c, 0x39, 0x9f, 0x6c, - 0x24, 0xd5, 0x1c, 0x08, 0x19, 0x19, 0x5b, 0xc2, 0xfe, 0x61, 0x60, 0x28, 0x1d, 0xd8, 0xd1, 0x54, 0xd3, 0x26, 0x01, - 0x26, 0xd3, 0x25, 0xe7, 0xc3, 0x6b, 0x44, 0x93, 0xd5, 0xa9, 0x7b, 0x99, 0xaa, 0x76, 0x70, 0x4d, 0xce, 0xe4, 0xf4, - 0x48, 0x3d, 0xd5, 0xba, 0x97, 0x6a, 0xb4, 0x1b, 0xe6, 0xa3, 0x9d, 0x1f, 0x80, 0x5b, 0xa7, 0xb0, 0xd3, 0xf7, 0xc3, - 0x7c, 0xb4, 0xf7, 0x35, 0xec, 0x2e, 0x29, 0x04, 0xaa, 0x3f, 0xcb, 0x9a, 0xcc, 0xc5, 0x9b, 0xe2, 0xc1, 0x2b, 0xd8, - 0x33, 0x7f, 0xa0, 0x7f, 0x95, 0xec, 0x99, 0x6f, 0x33, 0xb9, 0xfe, 0x99, 0x76, 0x8d, 0xc6, 0x4c, 0xc7, 0x6b, 0xe7, - 0x60, 0x85, 0x06, 0xc8, 0x2f, 0xd8, 0xd1, 0xde, 0xe4, 0x20, 0x10, 0xa0, 0x7b, 0x09, 0x8e, 0xa2, 0x80, 0xa8, 0x69, - 0x55, 0x79, 0x74, 0xba, 0xf7, 0x0f, 0xf8, 0x46, 0x09, 0xd8, 0xe4, 0xa9, 0x75, 0x6f, 0x19, 0xfb, 0xc7, 0x23, 0x84, - 0xd0, 0xcb, 0xe9, 0x37, 0xda, 0xb1, 0x7a, 0xb4, 0x67, 0x12, 0xfc, 0x1c, 0x31, 0xe9, 0x15, 0x8c, 0x61, 0xe8, 0xc2, - 0x2a, 0x46, 0xf2, 0x0c, 0xc8, 0x1a, 0xbf, 0x41, 0x74, 0x01, 0x8b, 0x5e, 0xef, 0xd5, 0x09, 0x0d, 0x22, 0xa0, 0xd2, - 0x6b, 0xfe, 0x52, 0xe4, 0x73, 0x55, 0x88, 0xde, 0x07, 0x6b, 0xe7, 0xcd, 0x8c, 0x64, 0x99, 0x34, 0x52, 0xed, 0x56, - 0x16, 0x9b, 0xca, 0x9b, 0x9d, 0x91, 0x2e, 0xe6, 0x18, 0x2a, 0x83, 0xc7, 0x01, 0x28, 0x3d, 0xff, 0x12, 0x7a, 0x25, - 0x43, 0xa6, 0x59, 0xa2, 0x99, 0xdd, 0x37, 0xfe, 0x64, 0x9d, 0x7a, 0x31, 0x22, 0x66, 0x03, 0x5b, 0x88, 0xdb, 0xa2, - 0xd2, 0x6d, 0x51, 0x28, 0x5b, 0x14, 0xe9, 0x43, 0xed, 0x42, 0x77, 0x66, 0xe1, 0xb3, 0xdc, 0xb4, 0xef, 0x4d, 0x66, - 0xc6, 0x06, 0x68, 0xbb, 0x08, 0xdf, 0x40, 0x07, 0x2a, 0x84, 0xfc, 0x47, 0x44, 0x44, 0x22, 0x60, 0x97, 0x73, 0x77, - 0x62, 0xd3, 0x21, 0x99, 0x87, 0x98, 0x15, 0x6a, 0x94, 0x97, 0x3c, 0x39, 0x19, 0x90, 0x9c, 0x50, 0xb7, 0xfb, 0xfd, - 0xcb, 0xa5, 0x0b, 0x6a, 0xbf, 0xa1, 0xd8, 0x31, 0xba, 0x29, 0xe0, 0x5c, 0xf0, 0x28, 0xef, 0xa5, 0x77, 0x09, 0x68, - 0x8e, 0xed, 0x29, 0xb2, 0x01, 0x9c, 0xde, 0x76, 0x21, 0xc0, 0xf6, 0x59, 0xb3, 0x8d, 0x3f, 0x59, 0xdf, 0x44, 0x53, - 0xaf, 0xe4, 0x33, 0xdd, 0x45, 0x89, 0xdb, 0x45, 0xb1, 0xec, 0xa2, 0x6d, 0x03, 0xc1, 0x8e, 0x6b, 0x3f, 0x00, 0xde, - 0xd0, 0xa8, 0xdf, 0x2f, 0x5b, 0x3d, 0x7b, 0xf6, 0xb5, 0xd3, 0x9e, 0xcd, 0x7c, 0x56, 0x9a, 0x9e, 0xfd, 0x35, 0x75, - 0x7b, 0x56, 0x4e, 0xf6, 0xa2, 0x73, 0xb2, 0x4f, 0x67, 0xf3, 0x40, 0x70, 0xb9, 0x73, 0x5f, 0x56, 0x53, 0x3d, 0xed, - 0x72, 0x3f, 0x68, 0x0d, 0x91, 0xf9, 0xc2, 0xa7, 0xbc, 0x7b, 0x5d, 0xc1, 0x02, 0x96, 0xe0, 0x6e, 0xbd, 0x34, 0xff, - 0x15, 0xbb, 0xbf, 0x17, 0xf4, 0xd2, 0xfc, 0x37, 0xfa, 0x93, 0x02, 0x38, 0x00, 0x8d, 0xa9, 0xdd, 0x02, 0x0f, 0x31, - 0x54, 0x50, 0xb8, 0x9b, 0x95, 0x73, 0xaf, 0x06, 0x38, 0x4c, 0xd2, 0x37, 0xb4, 0x7a, 0xa5, 0xc5, 0xae, 0x97, 0xc9, - 0x5e, 0x01, 0x1e, 0xaa, 0x90, 0x87, 0xc7, 0x63, 0xd4, 0x31, 0xec, 0xa0, 0x8e, 0x80, 0x61, 0x0f, 0xa1, 0xb1, 0x05, - 0x9e, 0x8f, 0x9f, 0x32, 0x7e, 0x10, 0xa0, 0x36, 0x42, 0x78, 0xbc, 0x5a, 0x94, 0x21, 0xb6, 0xec, 0x0d, 0x52, 0x49, - 0xfd, 0x2c, 0x10, 0x65, 0xb4, 0x0a, 0x68, 0xab, 0x3d, 0x65, 0x69, 0xbc, 0x85, 0x50, 0xb1, 0xd4, 0xc7, 0x10, 0x1a, - 0x38, 0xfc, 0x8e, 0x47, 0x90, 0xe0, 0x4b, 0xae, 0xc9, 0xe6, 0xde, 0xe4, 0xf7, 0xb4, 0xcf, 0x1f, 0x8f, 0x97, 0xd7, - 0x08, 0x4a, 0x97, 0xc2, 0x47, 0x2a, 0x11, 0xd5, 0x53, 0xdc, 0x94, 0x90, 0xcd, 0x92, 0x95, 0x7e, 0xf0, 0xab, 0xfa, - 0x05, 0x00, 0xb2, 0x10, 0x68, 0x13, 0x99, 0xfd, 0xe9, 0x42, 0x45, 0x17, 0x00, 0x87, 0xf8, 0xe3, 0x27, 0x88, 0xbe, - 0xa1, 0x65, 0x5a, 0x3e, 0x4e, 0x78, 0x08, 0x5a, 0x5b, 0xd2, 0x49, 0xc4, 0x4a, 0x81, 0x0d, 0x91, 0xf0, 0xfd, 0xfe, - 0x65, 0x2c, 0xe9, 0x40, 0xa3, 0x56, 0xf7, 0xc6, 0xad, 0xee, 0x95, 0xaf, 0xeb, 0x4e, 0x6e, 0x7c, 0x50, 0xb4, 0xcf, - 0xe6, 0x8d, 0xca, 0xf7, 0x6d, 0x9d, 0xb3, 0x3f, 0xdf, 0x3b, 0x72, 0x4e, 0x7c, 0x7b, 0x0f, 0xa1, 0xe8, 0xa1, 0x29, - 0xb2, 0x2c, 0x09, 0x03, 0x5a, 0x6b, 0xd7, 0x9e, 0x65, 0x74, 0xf0, 0xda, 0x37, 0x84, 0x88, 0x3c, 0xc5, 0x27, 0x21, - 0xb7, 0x38, 0x3e, 0x28, 0xd0, 0x3f, 0x33, 0xfe, 0xcc, 0x89, 0x1f, 0xb6, 0xfa, 0x05, 0x70, 0x6e, 0xba, 0xf7, 0xee, - 0xc4, 0xac, 0xc7, 0x50, 0xca, 0xc6, 0xff, 0xfd, 0x3e, 0x91, 0x05, 0x3a, 0x1d, 0xd1, 0x30, 0x10, 0xdc, 0x45, 0xf5, - 0x7f, 0xaf, 0x78, 0xdd, 0xb3, 0x56, 0xe7, 0xcb, 0x4f, 0x9d, 0x9f, 0xf4, 0xea, 0x65, 0xdc, 0x03, 0x72, 0x74, 0x80, - 0x70, 0x5e, 0xf7, 0x1b, 0xb6, 0xff, 0xe6, 0x97, 0xf7, 0x27, 0x2f, 0x03, 0x9b, 0x14, 0x89, 0x6d, 0x25, 0x9f, 0xf5, - 0x40, 0xe1, 0xd7, 0x63, 0xbd, 0xba, 0xd8, 0xf4, 0x58, 0x0f, 0xb5, 0x80, 0xe8, 0x61, 0x01, 0xea, 0xbf, 0x9e, 0x7d, - 0x1a, 0x0a, 0x07, 0xd9, 0x38, 0x55, 0xa0, 0xc8, 0x82, 0x3f, 0x17, 0xa3, 0x4d, 0x41, 0x80, 0xc8, 0x96, 0x90, 0x96, - 0x9f, 0xcd, 0x1e, 0x97, 0x5a, 0x92, 0xc1, 0x37, 0x01, 0x99, 0x1d, 0x58, 0x39, 0x41, 0xe9, 0xb8, 0x33, 0xe0, 0xca, - 0x16, 0x8f, 0x76, 0xfb, 0xd3, 0x20, 0x3b, 0x6b, 0x4e, 0x1a, 0xed, 0xc3, 0x3e, 0x05, 0x4e, 0x1a, 0x10, 0x7b, 0x44, - 0xa0, 0xef, 0xb6, 0xb9, 0xf4, 0xd1, 0xe1, 0x9c, 0x17, 0xf2, 0xcf, 0xa9, 0xc4, 0xe0, 0x1e, 0x4a, 0xac, 0x81, 0x40, - 0xe5, 0x19, 0xaa, 0x1c, 0x36, 0xc8, 0xf1, 0xcf, 0x8e, 0x64, 0x26, 0x31, 0x59, 0xe4, 0x6e, 0xcd, 0x54, 0xf8, 0x81, - 0x00, 0xfe, 0x73, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x01, 0x7f, 0x4c, 0xe1, 0xe7, 0x3c, 0x85, - 0x9d, 0xf6, 0xb0, 0x29, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, 0x3f, - 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x75, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x05, 0x39, - 0xdb, 0x14, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xf2, 0x51, 0x5a, 0xfd, 0x55, 0xff, - 0x04, 0xe6, 0x6d, 0x2a, 0x46, 0xb5, 0x8a, 0xc9, 0x6f, 0xf4, 0xfb, 0xc5, 0xa0, 0xf5, 0x21, 0x83, 0x8f, 0x5e, 0x9b, - 0x06, 0x7f, 0x74, 0x1a, 0xec, 0x30, 0xd1, 0x08, 0x80, 0x64, 0x4e, 0x2d, 0x79, 0x28, 0xfa, 0x23, 0xa8, 0xb0, 0x46, - 0xb9, 0x53, 0x30, 0x58, 0xff, 0xf1, 0x68, 0x07, 0xa6, 0x5e, 0x1c, 0x6d, 0xc9, 0x0e, 0x9a, 0xfb, 0x06, 0xb8, 0x5f, - 0x23, 0x5b, 0xcc, 0x2a, 0x80, 0x66, 0xaf, 0x11, 0x19, 0x9f, 0xbc, 0x00, 0xc6, 0x6c, 0x93, 0x85, 0x91, 0x88, 0x83, - 0xb1, 0x6a, 0xcc, 0x98, 0x81, 0x81, 0x0b, 0x74, 0x2d, 0x93, 0x92, 0x34, 0xa4, 0x83, 0x01, 0x2b, 0x65, 0x0b, 0x07, - 0xbc, 0x68, 0x4e, 0xdb, 0xf1, 0xba, 0x45, 0xe3, 0x81, 0xed, 0x62, 0x87, 0xfb, 0x1f, 0x8a, 0xdd, 0xdb, 0x70, 0x47, - 0x7a, 0x85, 0x8a, 0x25, 0xf4, 0xf3, 0xaf, 0xb2, 0xcf, 0x1a, 0x4e, 0x4e, 0x85, 0x66, 0x68, 0x29, 0x12, 0x4a, 0xf1, - 0x4e, 0x4f, 0x0a, 0x8c, 0x65, 0x2c, 0xfc, 0x03, 0x70, 0x4e, 0x17, 0x8a, 0xc8, 0x1d, 0x38, 0x8e, 0x6f, 0xa1, 0x82, - 0x51, 0xc3, 0xc1, 0xcb, 0x18, 0xb6, 0x45, 0x31, 0x0b, 0x09, 0xa7, 0x10, 0x2e, 0x56, 0x59, 0xbf, 0x2f, 0x7f, 0x51, - 0x17, 0x5d, 0x65, 0xb2, 0xee, 0x93, 0x70, 0x64, 0xc6, 0x72, 0xea, 0x85, 0xe4, 0x79, 0xcf, 0x93, 0x69, 0xf2, 0xb4, - 0x0a, 0x22, 0x80, 0x7c, 0x0e, 0xef, 0xc3, 0x34, 0x03, 0xab, 0x34, 0x29, 0x3f, 0x42, 0xe9, 0x8b, 0xcf, 0x73, 0x3f, - 0xd0, 0xd9, 0x2b, 0x93, 0x0c, 0x6f, 0xe6, 0xad, 0x37, 0xa9, 0x75, 0x5d, 0x3c, 0xe0, 0xef, 0x9c, 0xc1, 0xc6, 0xb9, - 0xce, 0x04, 0x07, 0x5e, 0x24, 0xb5, 0x5e, 0x33, 0xfe, 0x3c, 0xc3, 0x75, 0xa9, 0xda, 0xe8, 0xa3, 0x10, 0x5d, 0x41, - 0xa6, 0x02, 0x14, 0x8a, 0xb4, 0x7f, 0x50, 0x6a, 0x6e, 0x52, 0x69, 0x23, 0x01, 0x74, 0x0f, 0x93, 0x06, 0x5b, 0x0c, - 0x65, 0x2c, 0x4d, 0xa2, 0xdc, 0x69, 0x10, 0x57, 0xf6, 0xe7, 0x5c, 0xe2, 0xd0, 0xb2, 0x48, 0xfe, 0xbd, 0xef, 0xe9, - 0x2b, 0xa4, 0xee, 0x64, 0x81, 0xcc, 0x18, 0x2f, 0xf2, 0xf8, 0x13, 0x10, 0x66, 0x83, 0x36, 0x2a, 0x0a, 0x21, 0x64, - 0x83, 0x18, 0x34, 0x5e, 0xe4, 0xf1, 0x0f, 0x8a, 0xc6, 0x43, 0x3e, 0x8a, 0x7c, 0xf5, 0x57, 0xa9, 0xff, 0x0a, 0x7d, - 0x66, 0x82, 0x47, 0xa8, 0x26, 0xfa, 0x77, 0xcf, 0x67, 0xf7, 0xa0, 0x36, 0x8c, 0xc2, 0xcc, 0x94, 0x9f, 0xfb, 0xa6, - 0x38, 0x7b, 0xfd, 0x15, 0x5d, 0x65, 0x5b, 0xf7, 0xa3, 0x8f, 0x27, 0x04, 0xd6, 0xc6, 0xe8, 0x8a, 0x1b, 0x03, 0xc8, - 0x61, 0xf2, 0x7e, 0x45, 0x69, 0x15, 0xa4, 0x41, 0xe8, 0xa0, 0x21, 0xe8, 0x95, 0x44, 0x1f, 0x48, 0x2c, 0x62, 0x0c, - 0x2f, 0xc4, 0x33, 0x52, 0x93, 0x89, 0x86, 0x78, 0x45, 0xec, 0x87, 0x68, 0xc9, 0xa9, 0x89, 0x6e, 0x84, 0x29, 0x06, - 0x12, 0x3b, 0x83, 0xe4, 0x24, 0xa9, 0x95, 0x5f, 0x3c, 0x93, 0x84, 0x25, 0x76, 0x1e, 0x62, 0x30, 0xa9, 0xa5, 0x3b, - 0xbd, 0xa9, 0xd2, 0x97, 0x13, 0x2d, 0x07, 0xed, 0x03, 0xb0, 0x4b, 0x49, 0xef, 0x9f, 0x14, 0x8a, 0xf8, 0x10, 0xc6, - 0x31, 0x84, 0x6f, 0x11, 0xd5, 0x15, 0x38, 0xd7, 0x0a, 0x34, 0x56, 0x03, 0x0f, 0xcd, 0x2c, 0x9f, 0x0f, 0x39, 0xfd, - 0x54, 0x5a, 0xfe, 0x18, 0xd1, 0xd8, 0x68, 0xdd, 0x1c, 0x8f, 0x07, 0x5a, 0xf5, 0xd2, 0x39, 0xe8, 0xba, 0x99, 0xc4, - 0xc4, 0x0d, 0xa4, 0xeb, 0x47, 0xbf, 0x99, 0xb0, 0x17, 0x51, 0x21, 0x97, 0x42, 0x50, 0xd0, 0xea, 0x40, 0xe0, 0x50, - 0x78, 0x8b, 0x32, 0x5f, 0xc5, 0xb4, 0x81, 0x30, 0xf8, 0xfc, 0x40, 0x7e, 0xbe, 0x29, 0x48, 0xc5, 0x8e, 0x75, 0xed, - 0xf7, 0xb7, 0xa5, 0x07, 0x78, 0x72, 0x26, 0xc9, 0xd3, 0x66, 0x08, 0x2b, 0x02, 0x68, 0xcc, 0x6a, 0xb2, 0x38, 0xe1, - 0xca, 0x1c, 0x7e, 0xcc, 0xbd, 0x92, 0xa5, 0x4c, 0x9d, 0xa7, 0x7a, 0x01, 0x44, 0x1d, 0x6f, 0xd0, 0x8a, 0xd4, 0xaf, - 0xd0, 0xd9, 0x6b, 0x56, 0x42, 0xc6, 0xc3, 0x4b, 0xce, 0xd3, 0xd1, 0x03, 0x4b, 0x78, 0x84, 0x7f, 0x25, 0x13, 0x7d, - 0xf8, 0x3d, 0x70, 0xb8, 0x19, 0x27, 0x3c, 0x72, 0x9b, 0x7d, 0xa8, 0xc2, 0x35, 0xdc, 0x4c, 0x0b, 0x40, 0x72, 0x0b, - 0x92, 0x26, 0xa0, 0x84, 0x44, 0x26, 0x64, 0xd6, 0x94, 0xfc, 0xdc, 0xd2, 0x36, 0x58, 0xc3, 0xa4, 0xf3, 0x80, 0x17, - 0xad, 0x3e, 0x5a, 0x4d, 0xb4, 0xcb, 0xac, 0x9a, 0x0f, 0x71, 0x86, 0x6a, 0x8e, 0xbb, 0x0b, 0xf8, 0x39, 0xe0, 0x39, - 0xcb, 0x9b, 0x74, 0xb4, 0x1f, 0x70, 0xe1, 0xc9, 0x75, 0x9e, 0x8e, 0x76, 0xf8, 0x4b, 0xee, 0x0f, 0x00, 0x1d, 0x4c, - 0x5d, 0x02, 0x7f, 0xaa, 0xb6, 0x9a, 0x4a, 0xfd, 0xd2, 0xda, 0xaf, 0xeb, 0xce, 0x6a, 0xc1, 0x19, 0xa2, 0x2f, 0x43, - 0x07, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, - 0x82, 0x7b, 0xc9, 0x9f, 0x1f, 0x10, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, - 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xa9, 0x34, 0x26, 0x45, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0xeb, 0x7a, 0x1b, 0xb7, 0xb2, 0x20, 0xfa, + 0xfb, 0xcc, 0x53, 0x48, 0xbd, 0x1d, 0xa5, 0x21, 0x82, 0x2d, 0x92, 0xba, 0x58, 0x6e, 0x0a, 0xe2, 0xf8, 0x1a, 0x3b, + 0x71, 0x6c, 0xc7, 0x72, 0xec, 0xd8, 0x0c, 0xb7, 0x02, 0x36, 0x41, 0x12, 0x71, 0x13, 0x60, 0x1a, 0xa0, 0x25, 0x99, + 0xe4, 0xbb, 0x9f, 0xaf, 0x70, 0xe9, 0x46, 0x93, 0xb4, 0xd7, 0x5a, 0x73, 0x66, 0xce, 0x37, 0x3b, 0x7b, 0x59, 0x6c, + 0xdc, 0x51, 0x28, 0x14, 0xaa, 0x0a, 0x55, 0x85, 0x8b, 0xfd, 0x91, 0xcc, 0xf4, 0xdd, 0x9c, 0xed, 0x4d, 0xf5, 0x2c, + 0xbf, 0xbc, 0x70, 0xff, 0x32, 0x3a, 0xba, 0xbc, 0xc8, 0xb9, 0xf8, 0xbc, 0x57, 0xb0, 0x9c, 0xf0, 0x4c, 0x8a, 0xbd, + 0x69, 0xc1, 0xc6, 0x64, 0x44, 0x35, 0x4d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xe5, 0xc5, 0x8c, 0x69, 0xba, 0x97, + 0x4d, 0x69, 0xa1, 0x98, 0x26, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbf, 0xbc, 0x50, 0x59, 0xc1, 0xe7, 0x7a, 0x0f, 0x9a, + 0x24, 0x33, 0x39, 0x5a, 0xe4, 0xec, 0xf2, 0xe8, 0xe8, 0xe6, 0xe6, 0x26, 0xf9, 0x5b, 0xfd, 0x8f, 0x2f, 0xb4, 0xd8, + 0xfb, 0xa5, 0x20, 0xaf, 0x87, 0x7f, 0xb3, 0x4c, 0x27, 0x23, 0x36, 0xe6, 0x82, 0xbd, 0x29, 0xe4, 0x9c, 0x15, 0xfa, + 0xae, 0x0b, 0x99, 0x3f, 0x15, 0x24, 0xe6, 0x58, 0x63, 0x86, 0xc8, 0xa5, 0xde, 0xe3, 0x62, 0x8f, 0xf7, 0x7e, 0x29, + 0x4c, 0xca, 0x92, 0x89, 0xc5, 0x8c, 0x15, 0x74, 0x98, 0xb3, 0x74, 0xbf, 0x85, 0x33, 0x29, 0xc6, 0x7c, 0xb2, 0x28, + 0xbf, 0x6f, 0x0a, 0xae, 0xfd, 0xef, 0x2f, 0x34, 0x5f, 0xb0, 0x94, 0xad, 0x51, 0xca, 0xfb, 0x7a, 0x40, 0x98, 0x69, + 0xf9, 0x73, 0xd5, 0x70, 0xfc, 0x93, 0x69, 0xf2, 0x6e, 0xce, 0xe4, 0x78, 0x4f, 0xef, 0x93, 0x48, 0xdd, 0xcd, 0x86, + 0x32, 0x8f, 0x7a, 0xba, 0x11, 0x45, 0x29, 0x94, 0xc1, 0x0c, 0x75, 0x33, 0x29, 0x94, 0xde, 0x13, 0x9c, 0xdc, 0x70, + 0x31, 0x92, 0x37, 0xf8, 0x46, 0x10, 0xc1, 0x93, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x83, 0x83, 0xd8, + 0x7d, 0xdf, 0x3d, 0xbe, 0xba, 0x22, 0x84, 0x7c, 0x91, 0x7c, 0xb4, 0xd7, 0x5a, 0xad, 0x82, 0xd4, 0x44, 0x50, 0xcd, + 0xbf, 0x30, 0x5b, 0x09, 0x1d, 0x1c, 0x44, 0x74, 0x24, 0xe7, 0x9a, 0x8d, 0xae, 0xf4, 0x5d, 0xce, 0xae, 0xa6, 0x8c, + 0x69, 0x15, 0x71, 0xb1, 0xf7, 0x44, 0x66, 0x8b, 0x19, 0x13, 0x3a, 0x99, 0x17, 0x52, 0x4b, 0x18, 0xd8, 0xc1, 0x41, + 0x54, 0xb0, 0x79, 0x4e, 0x33, 0x06, 0xf9, 0x8f, 0xaf, 0xae, 0xaa, 0x1a, 0x55, 0x21, 0xfc, 0x59, 0x90, 0x2b, 0x33, + 0xf4, 0x18, 0xe1, 0x0f, 0x82, 0x08, 0x76, 0xb3, 0xf7, 0x81, 0xd1, 0xcf, 0xbf, 0xd2, 0x79, 0x37, 0xcb, 0xa9, 0x52, + 0x7b, 0xcf, 0xe4, 0xd2, 0x4c, 0xa3, 0x58, 0x64, 0x5a, 0x16, 0xb1, 0xc6, 0x0c, 0x0b, 0xb4, 0xe4, 0xe3, 0x58, 0x4f, + 0xb9, 0x4a, 0xae, 0xef, 0x65, 0x4a, 0xbd, 0x65, 0x6a, 0x91, 0xeb, 0x7b, 0x64, 0xbf, 0x85, 0xc5, 0x3e, 0x21, 0x9f, + 0x05, 0xd2, 0xd3, 0x42, 0xde, 0xec, 0x3d, 0x2d, 0x0a, 0x59, 0xc4, 0xd1, 0xe3, 0xab, 0x2b, 0x5b, 0x62, 0x8f, 0xab, + 0x3d, 0x21, 0xf5, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xd9, 0xfb, 0x5d, 0xb1, 0xbd, 0xbf, 0x16, 0x42, 0xd1, 0x31, 0x7b, + 0x7c, 0x75, 0xf5, 0xd7, 0x9e, 0x2c, 0xf6, 0xfe, 0xca, 0x94, 0xfa, 0x6b, 0x8f, 0x0b, 0xa5, 0x19, 0x1d, 0x25, 0x11, + 0xea, 0x9a, 0xce, 0x32, 0xa5, 0xde, 0xb1, 0x5b, 0x4d, 0x34, 0x36, 0x9f, 0x9a, 0xb0, 0xf5, 0x84, 0xe9, 0x3d, 0x55, + 0xce, 0x2b, 0x46, 0xcb, 0x9c, 0xe9, 0x3d, 0x4d, 0x4c, 0xbe, 0x74, 0xf0, 0x67, 0xf6, 0x53, 0x77, 0xf9, 0x38, 0xbe, + 0x11, 0x07, 0x07, 0xba, 0x04, 0x34, 0x5a, 0xba, 0x15, 0x22, 0x6c, 0xdf, 0xa7, 0x1d, 0x1c, 0xb0, 0x24, 0x67, 0x62, + 0xa2, 0xa7, 0x84, 0x90, 0x76, 0x57, 0x1c, 0x1c, 0xc4, 0x9a, 0x7c, 0x10, 0xc9, 0x84, 0xe9, 0x98, 0x21, 0x84, 0xab, + 0xda, 0x07, 0x07, 0xb1, 0x05, 0x82, 0x24, 0xda, 0x00, 0xae, 0x06, 0x63, 0x94, 0x38, 0xe8, 0x5f, 0xdd, 0x89, 0x2c, + 0x0e, 0xc7, 0x8f, 0xb0, 0x38, 0x38, 0xf8, 0x20, 0x12, 0x05, 0x2d, 0x62, 0x8d, 0xd0, 0xba, 0x60, 0x7a, 0x51, 0x88, + 0x3d, 0xbd, 0xd6, 0xf2, 0x4a, 0x17, 0x5c, 0x4c, 0x62, 0xb4, 0xf4, 0x69, 0x41, 0xc5, 0xf5, 0xda, 0x0e, 0xf7, 0xb7, + 0x82, 0x70, 0x72, 0x09, 0x3d, 0x3e, 0x93, 0xb1, 0xc3, 0x41, 0x4e, 0x48, 0xa4, 0x4c, 0xdd, 0xa8, 0xc7, 0x53, 0xde, + 0x88, 0x22, 0x6c, 0x47, 0x89, 0x3f, 0x0b, 0x84, 0xb9, 0x06, 0xd4, 0x4d, 0x92, 0x44, 0x23, 0x72, 0xb9, 0xf4, 0x60, + 0xe1, 0xc1, 0x44, 0x7b, 0xbc, 0xdf, 0x1a, 0xa4, 0x3a, 0x29, 0xd8, 0x68, 0x91, 0xb1, 0x38, 0x16, 0x58, 0x61, 0x89, + 0xc8, 0xa5, 0x68, 0xc4, 0x05, 0xb9, 0x84, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xb9, 0x41, 0x16, 0x7e, + 0x84, 0x00, 0x62, 0x37, 0xa0, 0x82, 0x90, 0x48, 0x2c, 0x66, 0x43, 0x56, 0x44, 0x65, 0xb1, 0x6e, 0x0d, 0x2f, 0x16, + 0x8a, 0xed, 0x65, 0x4a, 0xed, 0x8d, 0x17, 0x22, 0xd3, 0x5c, 0x8a, 0xbd, 0xa8, 0x51, 0x34, 0x22, 0x8b, 0x0f, 0x25, + 0x3a, 0x44, 0x68, 0x8d, 0x62, 0x85, 0x1a, 0xbc, 0x2f, 0x1b, 0xed, 0x01, 0x86, 0x51, 0xa2, 0xae, 0x6b, 0xcf, 0x41, + 0x80, 0x61, 0x0e, 0x93, 0x5c, 0xe3, 0x4f, 0x76, 0xe7, 0xc3, 0x14, 0x6f, 0x44, 0x8f, 0x27, 0xdb, 0x3b, 0x85, 0xe8, + 0x64, 0x46, 0xe7, 0x31, 0x23, 0x97, 0xcc, 0x60, 0x17, 0x15, 0x19, 0x8c, 0xb5, 0xb6, 0x70, 0x3d, 0x96, 0xb2, 0xa4, + 0xc2, 0x29, 0x94, 0xea, 0x64, 0x2c, 0x8b, 0xa7, 0x34, 0x9b, 0x42, 0xbd, 0x12, 0x63, 0x46, 0x7e, 0xc3, 0x65, 0x05, + 0xa3, 0x9a, 0x3d, 0xcd, 0x19, 0x7c, 0xc5, 0x91, 0xa9, 0x19, 0x21, 0xac, 0x60, 0xab, 0xe7, 0x5c, 0xbf, 0x92, 0x22, + 0x63, 0x5d, 0x15, 0xe0, 0x97, 0x59, 0xf9, 0x87, 0x5a, 0x17, 0x7c, 0xb8, 0xd0, 0x2c, 0x8e, 0x04, 0x94, 0x88, 0xb0, + 0x42, 0x58, 0x24, 0x9a, 0xdd, 0xea, 0xc7, 0x52, 0x68, 0x26, 0x34, 0x61, 0x1e, 0xaa, 0x98, 0x27, 0x74, 0x3e, 0x67, + 0x62, 0xf4, 0x78, 0xca, 0xf3, 0x51, 0x2c, 0xd0, 0x1a, 0xad, 0xf1, 0xef, 0x82, 0xc0, 0x24, 0xc9, 0x25, 0x4f, 0xe1, + 0x9f, 0x6f, 0x4f, 0x27, 0xd6, 0xe4, 0xd2, 0x6c, 0x0b, 0x46, 0xa2, 0xa8, 0x3b, 0x96, 0x45, 0xec, 0xa6, 0xb0, 0x07, + 0xa4, 0x0b, 0xfa, 0x78, 0xbb, 0xc8, 0x99, 0x42, 0xac, 0x41, 0x44, 0xb9, 0x8e, 0x0e, 0xc2, 0xbf, 0x15, 0x31, 0x83, + 0x05, 0xe0, 0x28, 0xe5, 0x86, 0x04, 0xbe, 0xe4, 0x6e, 0x53, 0x8d, 0x4a, 0xa2, 0xf6, 0x51, 0x90, 0x11, 0x4f, 0x74, + 0xb1, 0x50, 0x9a, 0x8d, 0xde, 0xdd, 0xcd, 0x99, 0xc2, 0x3f, 0x17, 0xe4, 0xa3, 0xe8, 0x7d, 0x14, 0x09, 0x9b, 0xcd, + 0xf5, 0xdd, 0x95, 0xa1, 0xe6, 0x69, 0x14, 0xe1, 0x7f, 0x4c, 0xd1, 0x82, 0xd1, 0x0c, 0x48, 0x9a, 0x03, 0xd9, 0x1b, + 0x99, 0xdf, 0x8d, 0x79, 0x9e, 0x5f, 0x2d, 0xe6, 0x73, 0x59, 0x68, 0xac, 0x05, 0x59, 0x6a, 0x59, 0xc1, 0x07, 0x56, + 0x74, 0xa9, 0x6e, 0xb8, 0xce, 0xa6, 0xb1, 0x46, 0xcb, 0x8c, 0x2a, 0xb6, 0xf7, 0x48, 0xca, 0x9c, 0x51, 0x91, 0x72, + 0xc2, 0x7b, 0x3f, 0x17, 0xa9, 0x58, 0xe4, 0x79, 0x77, 0x58, 0x30, 0xfa, 0xb9, 0x6b, 0xb2, 0xed, 0xe1, 0x90, 0x9a, + 0xdf, 0x0f, 0x8b, 0x82, 0xde, 0x41, 0x41, 0x42, 0xa0, 0x58, 0x8f, 0xa7, 0x3f, 0x5f, 0xbd, 0x7e, 0x95, 0xd8, 0xbd, + 0xc2, 0xc7, 0x77, 0x31, 0x2f, 0xf7, 0x1f, 0x5f, 0xe3, 0x71, 0x21, 0x67, 0x1b, 0x5d, 0x5b, 0xd0, 0xf1, 0xee, 0x37, + 0x86, 0xc0, 0x08, 0xdf, 0xb7, 0x4d, 0x87, 0x23, 0x78, 0x65, 0x30, 0x1f, 0x32, 0x89, 0xeb, 0x17, 0xfe, 0x49, 0x6d, + 0x72, 0xcc, 0xd1, 0xf7, 0x47, 0xab, 0x8b, 0xbb, 0x25, 0x23, 0x66, 0x9c, 0x73, 0x38, 0x18, 0x61, 0x8c, 0x19, 0xd5, + 0xd9, 0x74, 0xc9, 0x4c, 0x63, 0x6b, 0x3f, 0x62, 0xb6, 0x5e, 0xe3, 0xaf, 0xd2, 0x63, 0xbd, 0xde, 0x27, 0x84, 0x1b, + 0x7a, 0x45, 0xf4, 0x6a, 0xc5, 0x09, 0xe1, 0x08, 0xbf, 0xe5, 0x64, 0x49, 0xfd, 0x84, 0xe0, 0x64, 0x83, 0xed, 0x99, + 0x5a, 0x2a, 0x03, 0x27, 0xe0, 0x17, 0x56, 0x68, 0x56, 0xa4, 0x5a, 0xe0, 0x82, 0x8d, 0x73, 0x18, 0xc7, 0x7e, 0x1b, + 0x4f, 0xa9, 0x7a, 0x3c, 0xa5, 0x62, 0xc2, 0x46, 0xe9, 0x57, 0xb9, 0xc6, 0x4c, 0x90, 0x68, 0xcc, 0x05, 0xcd, 0xf9, + 0x57, 0x36, 0x8a, 0xdc, 0xb9, 0xf0, 0x48, 0xef, 0xb1, 0x5b, 0xcd, 0xc4, 0x48, 0xed, 0x3d, 0x7f, 0xf7, 0xeb, 0x4b, + 0xb7, 0x98, 0xb5, 0xb3, 0x02, 0x2d, 0xd5, 0x62, 0xce, 0x8a, 0x18, 0x61, 0x77, 0x56, 0x3c, 0xe5, 0x86, 0x4e, 0xfe, + 0x4a, 0xe7, 0x36, 0x85, 0xab, 0xdf, 0xe7, 0x23, 0xaa, 0xd9, 0x1b, 0x26, 0x46, 0x5c, 0x4c, 0xc8, 0x7e, 0xdb, 0xa6, + 0x4f, 0xa9, 0xcb, 0x18, 0x95, 0x49, 0xd7, 0xf7, 0x9e, 0xe6, 0x66, 0xee, 0xe5, 0xe7, 0x22, 0x46, 0x6b, 0xa5, 0xa9, + 0xe6, 0xd9, 0x1e, 0x1d, 0x8d, 0x5e, 0x08, 0xae, 0xb9, 0x19, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xec, 0xa9, 0xe1, + 0x47, 0x1e, 0x23, 0x1c, 0xc7, 0xee, 0x2c, 0x98, 0x22, 0xb7, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb1, 0xd4, 0x66, + 0x92, 0xfe, 0x00, 0x25, 0xf3, 0x85, 0x82, 0xc5, 0xf6, 0x5d, 0xc0, 0x41, 0x23, 0x87, 0x8a, 0x15, 0x5f, 0xd8, 0xa8, + 0x44, 0x10, 0x15, 0xa3, 0xe5, 0x46, 0x1f, 0x6e, 0x7b, 0x68, 0xd2, 0x1f, 0x74, 0x43, 0x12, 0xce, 0x1c, 0xb2, 0x5b, + 0x4e, 0x85, 0x33, 0x55, 0x12, 0x95, 0x18, 0x0e, 0xd4, 0x92, 0xb0, 0x28, 0xe2, 0xe7, 0x37, 0x8f, 0x05, 0xf0, 0x10, + 0x21, 0xe5, 0xf0, 0x67, 0xee, 0xd3, 0x2f, 0xe6, 0xf0, 0x50, 0x58, 0x20, 0xac, 0xed, 0x48, 0x15, 0x42, 0x6b, 0x84, + 0xb5, 0x1f, 0xae, 0x25, 0x4a, 0x9e, 0x2f, 0x82, 0x53, 0x9b, 0xbc, 0xe5, 0xe6, 0xd8, 0x06, 0xda, 0x46, 0x35, 0x3b, + 0x38, 0x88, 0x59, 0x52, 0x22, 0x06, 0xd9, 0x6f, 0xbb, 0x45, 0x0a, 0xa0, 0xf5, 0x8d, 0x71, 0x43, 0xcf, 0x86, 0xc1, + 0xd9, 0x67, 0x89, 0x90, 0x0f, 0xb3, 0x8c, 0x29, 0x25, 0x8b, 0x83, 0x83, 0x7d, 0x53, 0xbe, 0xe4, 0x2c, 0x60, 0x11, + 0x5f, 0xdf, 0x88, 0x6a, 0x08, 0xa8, 0x3a, 0x6d, 0x3d, 0xdf, 0x44, 0x2a, 0xbe, 0xc9, 0x33, 0x21, 0x69, 0x74, 0x7d, + 0x1d, 0x35, 0x34, 0x76, 0x70, 0x98, 0x30, 0xdf, 0xf5, 0xdd, 0x13, 0x66, 0xd9, 0x42, 0xc3, 0x84, 0x6c, 0x81, 0x66, + 0x27, 0x3f, 0x18, 0xd7, 0x87, 0x84, 0x35, 0x56, 0x68, 0x1d, 0xac, 0xe8, 0xce, 0xa6, 0x0d, 0x7f, 0x63, 0x97, 0x6e, + 0x39, 0x31, 0x3c, 0x45, 0xb0, 0x8e, 0x7d, 0x36, 0x58, 0x63, 0x03, 0x7b, 0x3f, 0x1b, 0x69, 0x06, 0xda, 0xd7, 0x83, + 0xae, 0xcb, 0x27, 0xca, 0x42, 0xae, 0x60, 0xff, 0x2c, 0x98, 0xd2, 0x16, 0x91, 0x63, 0x8d, 0x25, 0x86, 0x33, 0x6a, + 0x93, 0xe9, 0xac, 0xb1, 0xa4, 0xbb, 0xc6, 0xf6, 0x7a, 0x0e, 0x67, 0xa3, 0x02, 0xa4, 0xfe, 0x3e, 0x3e, 0xc1, 0x58, + 0x35, 0x5a, 0xad, 0xde, 0x72, 0xdf, 0x4a, 0xb5, 0x96, 0x25, 0xbf, 0xb6, 0xb1, 0x28, 0x4c, 0x20, 0x77, 0x38, 0xef, + 0xb7, 0xdd, 0xf8, 0xc5, 0x80, 0xec, 0xb7, 0x4a, 0x2c, 0x76, 0x60, 0xb5, 0xe3, 0xb1, 0x50, 0x7c, 0x6d, 0x9b, 0x42, + 0xe6, 0xac, 0xaf, 0xe1, 0x4b, 0x32, 0xdd, 0xc2, 0xd5, 0x29, 0xe9, 0x03, 0xd7, 0x91, 0x4c, 0x07, 0xdf, 0xc2, 0x27, + 0x4f, 0x11, 0x62, 0xbd, 0x9d, 0x57, 0x11, 0x8e, 0x2f, 0x75, 0xc2, 0xb1, 0x31, 0x8d, 0x68, 0x5e, 0x56, 0x89, 0x4a, + 0x34, 0x73, 0x5b, 0xbd, 0xca, 0xc2, 0xc2, 0x0c, 0xa6, 0x9a, 0x52, 0xd0, 0xc4, 0x2b, 0x3a, 0x63, 0x2a, 0x66, 0x08, + 0x7f, 0xab, 0x80, 0xc5, 0x4f, 0x28, 0x32, 0x08, 0xce, 0x50, 0x05, 0x67, 0x28, 0xb0, 0xbb, 0xc0, 0xa4, 0xd5, 0xb7, + 0x9c, 0xc2, 0xac, 0xaf, 0x06, 0x15, 0x6f, 0x17, 0x4c, 0xde, 0x1c, 0xce, 0x0e, 0xc1, 0x3d, 0xfc, 0x6c, 0x9a, 0x05, + 0x9a, 0x61, 0x21, 0x14, 0xc2, 0xfb, 0xad, 0xcd, 0x95, 0xf4, 0xa5, 0xaa, 0x39, 0xf6, 0x07, 0xb0, 0x0e, 0xe6, 0xd8, + 0x48, 0xb8, 0x32, 0x7f, 0x6b, 0x5b, 0x0d, 0xc0, 0x76, 0x05, 0x98, 0x91, 0x8c, 0x73, 0xaa, 0xe3, 0xf6, 0x51, 0x0b, + 0x18, 0xd3, 0x2f, 0x0c, 0x4e, 0x15, 0x84, 0xb6, 0xa7, 0xc2, 0x92, 0x85, 0x50, 0x53, 0x3e, 0xd6, 0xf1, 0xef, 0xc2, + 0x10, 0x15, 0x96, 0x2b, 0x06, 0x12, 0x4e, 0xc0, 0x1e, 0x1b, 0x82, 0xf3, 0xbb, 0x80, 0x7e, 0xba, 0xe5, 0x41, 0xe4, + 0x46, 0x6a, 0x08, 0x17, 0x90, 0x87, 0x8a, 0xb5, 0xae, 0xc8, 0x4c, 0xc9, 0xb8, 0x01, 0xf7, 0xd8, 0xee, 0xd9, 0x16, + 0x53, 0x47, 0x0d, 0x44, 0xc0, 0xc1, 0x8a, 0x34, 0x24, 0x11, 0x2e, 0x51, 0x27, 0x5a, 0xbe, 0x94, 0x37, 0xac, 0x78, + 0x4c, 0x61, 0xf0, 0xa9, 0xad, 0xbe, 0xb6, 0x47, 0x81, 0xa1, 0xf8, 0xba, 0xeb, 0xf1, 0xe5, 0xda, 0x4c, 0xfc, 0x4d, + 0x21, 0x67, 0x5c, 0x31, 0xe0, 0xdb, 0x2c, 0xfc, 0x05, 0x6c, 0x34, 0xb3, 0x23, 0xe1, 0xb8, 0x61, 0x25, 0x7e, 0x3d, + 0x7c, 0x59, 0xc7, 0xaf, 0xeb, 0x7b, 0x4f, 0x27, 0x9e, 0x02, 0xd6, 0xf7, 0x31, 0xc2, 0xb1, 0x13, 0x2f, 0x82, 0x93, + 0x2e, 0x99, 0x22, 0x77, 0xcc, 0xaf, 0x56, 0x3a, 0x10, 0xe3, 0x6a, 0x9c, 0x23, 0xb3, 0xdb, 0x06, 0xad, 0xe9, 0x68, + 0x04, 0x2c, 0x5e, 0x21, 0xf3, 0x3c, 0x38, 0xac, 0xb0, 0xe8, 0x96, 0xc7, 0xd3, 0xf5, 0xbd, 0xa7, 0x57, 0xdf, 0x3b, + 0xa1, 0x20, 0x3f, 0x3c, 0xa4, 0xfc, 0x40, 0xc5, 0x88, 0x15, 0x20, 0x57, 0x06, 0xab, 0xe5, 0xce, 0xd9, 0xc7, 0x52, + 0x08, 0x96, 0x69, 0x36, 0x02, 0xa1, 0x45, 0x10, 0x9d, 0x4c, 0xa5, 0xd2, 0x65, 0x62, 0x35, 0x7a, 0x11, 0x0a, 0xa1, + 0x49, 0x46, 0xf3, 0x3c, 0xb6, 0x02, 0xca, 0x4c, 0x7e, 0x61, 0x3b, 0x46, 0xdd, 0xad, 0x0d, 0xb9, 0x6c, 0x86, 0x05, + 0xcd, 0xb0, 0x44, 0xcd, 0x73, 0x9e, 0xb1, 0xf2, 0xf0, 0xba, 0x4a, 0xb8, 0x18, 0xb1, 0x5b, 0xa0, 0x23, 0xe8, 0xf2, + 0xf2, 0xb2, 0x85, 0xdb, 0x68, 0x6d, 0x01, 0xbe, 0xdc, 0x02, 0xec, 0x77, 0x8e, 0x4d, 0x2b, 0x88, 0x2f, 0x77, 0x92, + 0x35, 0x14, 0x9c, 0x95, 0xdc, 0x0b, 0x5a, 0x96, 0x3c, 0x23, 0x3c, 0x62, 0x39, 0xd3, 0xcc, 0x93, 0x73, 0x60, 0xa6, + 0xed, 0xd6, 0x7d, 0x5b, 0xc2, 0xaf, 0x44, 0x27, 0xbf, 0xcb, 0xfc, 0x9a, 0xab, 0x52, 0x74, 0xaf, 0x96, 0xa7, 0x82, + 0x76, 0x4f, 0xdb, 0xe5, 0xa1, 0x5a, 0xd3, 0x6c, 0x6a, 0x25, 0xf6, 0x78, 0x6b, 0x4a, 0x55, 0x1b, 0x8e, 0xb4, 0x97, + 0x9b, 0xe8, 0x53, 0xe1, 0x86, 0xb9, 0x0b, 0x04, 0x57, 0x8e, 0x28, 0x30, 0x10, 0x02, 0xed, 0xb2, 0x3d, 0xa6, 0x79, + 0x3e, 0xa4, 0xd9, 0xe7, 0x3a, 0xf6, 0x57, 0x68, 0x40, 0x36, 0xa9, 0x71, 0x90, 0x15, 0x90, 0xac, 0x70, 0xde, 0x9e, + 0x4a, 0xd7, 0x36, 0x4a, 0xbc, 0xdf, 0xaa, 0xd0, 0xbe, 0xbe, 0xd0, 0xdf, 0xc4, 0x76, 0x33, 0x22, 0xe1, 0x66, 0x16, + 0x03, 0x15, 0xf8, 0x97, 0x18, 0xe7, 0xe9, 0x81, 0xc3, 0x3b, 0x10, 0x3c, 0xd6, 0x1b, 0x03, 0xd1, 0x68, 0xb9, 0x1e, + 0x71, 0xf5, 0x6d, 0x08, 0xfc, 0x6f, 0x19, 0xe5, 0x93, 0xa0, 0x87, 0x7f, 0x77, 0xa0, 0x25, 0x8d, 0x73, 0x8c, 0x73, + 0x39, 0x32, 0xc7, 0x50, 0x78, 0x42, 0xf3, 0x0b, 0x30, 0x2f, 0x06, 0xdf, 0x5f, 0xdb, 0x2c, 0xc3, 0x97, 0xc1, 0x30, + 0x54, 0x37, 0x64, 0x28, 0x6a, 0x28, 0xe0, 0x88, 0xaa, 0x30, 0x67, 0xae, 0xac, 0x89, 0x92, 0x8e, 0x6b, 0xb7, 0xe2, + 0xb8, 0xa3, 0xb9, 0x05, 0x89, 0xe3, 0x58, 0x81, 0x34, 0xe7, 0xf9, 0xfb, 0x6a, 0x16, 0x6a, 0x6b, 0x16, 0x2a, 0x09, + 0xa4, 0x2d, 0x54, 0x21, 0x73, 0x50, 0x3d, 0xd5, 0x02, 0x85, 0xa5, 0x80, 0x65, 0x4d, 0x80, 0x42, 0xa3, 0x92, 0xe0, + 0xe6, 0x44, 0xe3, 0xc2, 0x89, 0x3a, 0x0e, 0xd7, 0x80, 0x64, 0x54, 0x55, 0x24, 0xb2, 0x9b, 0xa3, 0x26, 0xfb, 0x4a, + 0x5c, 0xa0, 0x0d, 0xfe, 0x7e, 0xbd, 0x76, 0x50, 0x62, 0xc8, 0xad, 0x4e, 0x8d, 0x31, 0x0e, 0xc0, 0x82, 0x25, 0x71, + 0xcc, 0xb0, 0x65, 0x7d, 0x36, 0x81, 0x53, 0xb6, 0xbb, 0x4f, 0x88, 0xac, 0x60, 0x53, 0x63, 0x2a, 0x3d, 0x77, 0x25, + 0x11, 0xa6, 0x9e, 0x2d, 0x2d, 0xaa, 0x89, 0x13, 0x12, 0x79, 0xed, 0x44, 0xd4, 0x5b, 0xd6, 0x84, 0xc3, 0x34, 0x28, + 0xb6, 0x4e, 0x81, 0xa8, 0x16, 0xbb, 0xe0, 0xbd, 0x0b, 0x6b, 0x6a, 0xed, 0x04, 0x10, 0x2f, 0x6a, 0x10, 0x0f, 0x40, + 0x2b, 0x2d, 0xf1, 0x92, 0x03, 0x42, 0xeb, 0x95, 0x63, 0x86, 0x0b, 0xbb, 0x10, 0x5b, 0x50, 0xdc, 0x64, 0x3f, 0x0d, + 0x16, 0x82, 0x2c, 0xab, 0x80, 0xbf, 0x0b, 0x8f, 0x88, 0x18, 0x06, 0x2f, 0x56, 0xab, 0x2d, 0xb4, 0xdb, 0xc9, 0x85, + 0xa2, 0xa4, 0x92, 0x0e, 0x57, 0xab, 0xaf, 0x12, 0xc5, 0x8e, 0xff, 0xc5, 0x0c, 0xf5, 0x3c, 0xd1, 0x7d, 0xf8, 0x12, + 0x4a, 0x19, 0x76, 0xb4, 0x4a, 0x29, 0x05, 0x87, 0x3a, 0xd6, 0xd6, 0x17, 0x4a, 0x07, 0x94, 0xfb, 0xf1, 0x16, 0x01, + 0x33, 0x89, 0xee, 0xa4, 0xae, 0xa6, 0xfc, 0xd8, 0x35, 0x2d, 0x10, 0x42, 0xa9, 0x32, 0xb2, 0xcc, 0xfe, 0x2e, 0xf9, + 0xf2, 0xe0, 0x40, 0x05, 0x0d, 0x5d, 0x97, 0x94, 0xe2, 0xef, 0x18, 0x4e, 0x65, 0x75, 0x27, 0x0c, 0xfb, 0xf2, 0xb7, + 0x3f, 0x87, 0xb6, 0xa4, 0xd3, 0x56, 0x17, 0x04, 0x73, 0x7a, 0x43, 0xb9, 0xde, 0x2b, 0x5b, 0xb1, 0x82, 0x79, 0xcc, + 0xd0, 0xd2, 0x71, 0x1b, 0x49, 0xc1, 0x80, 0x7f, 0x04, 0xb2, 0xe0, 0xb9, 0x68, 0x8b, 0xf8, 0xd9, 0x94, 0x81, 0x2a, + 0xdb, 0x33, 0x12, 0xa5, 0x78, 0xb8, 0xef, 0x0e, 0x12, 0xd7, 0xf0, 0xee, 0xb1, 0xaf, 0x37, 0xab, 0xd7, 0xa4, 0x81, + 0x39, 0x2b, 0xc6, 0xb2, 0x98, 0xf9, 0xbc, 0xf5, 0xc6, 0xb7, 0x23, 0x8e, 0x7c, 0x1c, 0xef, 0x6c, 0xdb, 0x89, 0x00, + 0xdd, 0x0d, 0xd9, 0xbb, 0x92, 0xda, 0x6b, 0xa7, 0x69, 0x79, 0x00, 0x5b, 0x05, 0xa1, 0xc7, 0x4c, 0x15, 0x4a, 0xf9, + 0x4e, 0xbd, 0xda, 0xb5, 0xba, 0x93, 0xfd, 0x76, 0xb7, 0x94, 0xfc, 0x3c, 0x36, 0x74, 0xad, 0x8e, 0xc3, 0x9d, 0xaa, + 0x72, 0x91, 0x8f, 0xdc, 0x60, 0x05, 0xc2, 0xcc, 0xe1, 0xd1, 0x0d, 0xcf, 0xf3, 0x2a, 0xf5, 0x3f, 0x21, 0xed, 0xca, + 0x91, 0x76, 0xe9, 0x49, 0x3b, 0x90, 0x0a, 0x20, 0xed, 0xb6, 0xb9, 0xaa, 0xba, 0xdc, 0xda, 0x9e, 0xd2, 0x12, 0x75, + 0x65, 0xc4, 0x69, 0xe8, 0x6f, 0xe1, 0x47, 0x80, 0x4a, 0xe6, 0xeb, 0x73, 0xec, 0xf4, 0x31, 0x20, 0x06, 0x5a, 0x9d, + 0x26, 0x0b, 0x35, 0x15, 0x9f, 0x63, 0x84, 0xd5, 0x9a, 0x95, 0x98, 0xfd, 0xf0, 0x29, 0x28, 0xed, 0x82, 0xe9, 0xc0, + 0x39, 0x66, 0x92, 0xff, 0x23, 0x3e, 0xca, 0xcf, 0x4e, 0xb8, 0xd9, 0x29, 0x3f, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0x46, + 0xdf, 0xa7, 0xf6, 0x66, 0x7a, 0xa2, 0x9c, 0x5e, 0xb5, 0xde, 0xab, 0x55, 0xbc, 0x91, 0x02, 0x1a, 0x7d, 0x27, 0xa5, + 0x14, 0x65, 0xeb, 0x40, 0x03, 0x42, 0xc8, 0x40, 0xc2, 0xda, 0x4e, 0xba, 0x3c, 0xe5, 0x5e, 0xfe, 0x2b, 0x3d, 0x8f, + 0x51, 0xdc, 0xdb, 0xfa, 0x8f, 0xe5, 0x6c, 0x0e, 0x0c, 0xd9, 0x06, 0x4a, 0x4f, 0x98, 0xeb, 0xb0, 0xca, 0x5f, 0xef, + 0x48, 0xab, 0xd5, 0x31, 0xfb, 0xb1, 0x86, 0x4d, 0xa5, 0xd4, 0xbc, 0xdf, 0x5a, 0x2f, 0xca, 0xa4, 0x92, 0x70, 0xec, + 0xd2, 0xad, 0x3c, 0xde, 0xd4, 0xcc, 0xf8, 0x8c, 0xd7, 0xb1, 0xb0, 0x74, 0x58, 0x00, 0xad, 0x0b, 0xc8, 0x8f, 0x47, + 0xf7, 0x70, 0xfd, 0xd7, 0x15, 0x70, 0x96, 0xeb, 0x0d, 0xf0, 0x2d, 0xd7, 0xeb, 0x47, 0xda, 0x49, 0xda, 0xf8, 0xd1, + 0x0e, 0xb9, 0xb7, 0x84, 0x5e, 0x95, 0xe9, 0x64, 0xc6, 0xfe, 0x00, 0xd2, 0xb6, 0x58, 0x48, 0xb2, 0x9c, 0xc9, 0x11, + 0x4b, 0x23, 0x39, 0x67, 0x22, 0x5a, 0x83, 0x9e, 0xd5, 0x21, 0xc0, 0x3f, 0x22, 0x5e, 0xbe, 0xad, 0xeb, 0x5b, 0xd3, + 0x47, 0x7a, 0x0d, 0xaa, 0xb0, 0x97, 0x7c, 0x87, 0x32, 0xf6, 0x3d, 0x2b, 0x94, 0xe1, 0x49, 0x4b, 0xf6, 0xf6, 0x25, + 0xaf, 0x0e, 0xa8, 0x97, 0x3c, 0xfd, 0x76, 0x95, 0x4a, 0x20, 0x89, 0xda, 0xc9, 0x59, 0x72, 0x1c, 0x21, 0xa3, 0x31, + 0x7e, 0xe6, 0x35, 0xc6, 0x8b, 0x52, 0x63, 0xfc, 0x5c, 0x93, 0xc5, 0x86, 0xc6, 0xf8, 0x0f, 0x41, 0x9e, 0xeb, 0xde, + 0x73, 0xaf, 0x4d, 0x7f, 0x23, 0x73, 0x9e, 0xdd, 0xc5, 0x51, 0xce, 0x75, 0x13, 0x6e, 0x13, 0x23, 0xbc, 0xb4, 0x19, + 0xa0, 0x6a, 0x34, 0xfa, 0xee, 0xb5, 0x97, 0xff, 0xb0, 0x10, 0x24, 0xba, 0x97, 0x73, 0x7d, 0x2f, 0xc2, 0x53, 0x4d, + 0xfe, 0x82, 0x5f, 0xf7, 0x96, 0xf1, 0xaf, 0x54, 0x4f, 0x93, 0x82, 0x8a, 0x91, 0x9c, 0xc5, 0xa8, 0x11, 0x45, 0x28, + 0x51, 0x46, 0x08, 0x79, 0x80, 0xd6, 0xf7, 0xfe, 0xc2, 0xaf, 0x24, 0x89, 0x7a, 0x51, 0x63, 0xaa, 0xb1, 0xa6, 0xe4, + 0xaf, 0x8b, 0x7b, 0xcb, 0x57, 0x72, 0x7d, 0xf9, 0x17, 0x7e, 0xaa, 0x4b, 0xb5, 0x3e, 0xbe, 0x65, 0x24, 0x46, 0xe4, + 0xf2, 0xa9, 0x1f, 0xd2, 0x63, 0x39, 0xb3, 0x0a, 0xfe, 0x08, 0xe1, 0x2f, 0xa0, 0xd7, 0xbd, 0xe4, 0x15, 0x11, 0x72, + 0x77, 0x30, 0xfb, 0x24, 0x92, 0x46, 0x79, 0x10, 0x1d, 0x1c, 0x04, 0x69, 0x25, 0x0b, 0x81, 0xff, 0x96, 0xa4, 0x26, + 0xaa, 0x63, 0x46, 0xa1, 0xa5, 0xbf, 0x65, 0xcc, 0x91, 0x6f, 0x26, 0xf6, 0x9a, 0x6a, 0xb7, 0x63, 0x79, 0xdf, 0xea, + 0x1e, 0x12, 0xae, 0x59, 0x41, 0xb5, 0x2c, 0x06, 0x28, 0x64, 0x4b, 0xf0, 0x57, 0x4e, 0xfe, 0xea, 0xef, 0xfd, 0x3f, + 0xff, 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xe0, 0x2f, 0x2c, 0x18, 0x39, 0xba, 0x88, 0x7b, 0x69, 0xbc, 0xdf, 0x6c, 0xae, + 0xfe, 0x3c, 0xea, 0xff, 0x37, 0x6d, 0x7e, 0x7d, 0xd8, 0xfc, 0x34, 0x40, 0xab, 0xf8, 0xcf, 0xa3, 0x5e, 0xdf, 0x7d, + 0xf5, 0xff, 0xfb, 0xf2, 0x4f, 0x35, 0x38, 0xb4, 0x89, 0xf7, 0x10, 0x3a, 0x9a, 0xe0, 0x5f, 0x04, 0x39, 0x6a, 0x36, + 0x2f, 0x8f, 0x26, 0xf8, 0x27, 0x41, 0x8e, 0xe0, 0xef, 0x9d, 0x26, 0x6f, 0xd9, 0xe4, 0xe9, 0xed, 0x3c, 0xfe, 0xeb, + 0x72, 0x75, 0x6f, 0xf9, 0x95, 0xaf, 0xa1, 0xdd, 0xfe, 0x7f, 0xff, 0xf9, 0xa7, 0x8a, 0x7e, 0xbc, 0x24, 0x47, 0x83, + 0x06, 0x8a, 0x4d, 0xf2, 0x21, 0xb1, 0x7f, 0xe2, 0x5e, 0xda, 0xff, 0x6f, 0x37, 0x94, 0xe8, 0xc7, 0x3f, 0xff, 0xba, + 0xb8, 0x24, 0x83, 0x55, 0x1c, 0xad, 0x7e, 0x44, 0x2b, 0x84, 0x56, 0xf7, 0xd0, 0x5f, 0x38, 0x9a, 0x44, 0x08, 0xff, + 0x26, 0xc8, 0xd1, 0x8f, 0x47, 0x13, 0xfc, 0x49, 0x90, 0xa3, 0xe8, 0x68, 0x82, 0xdf, 0x4b, 0x72, 0xf4, 0xdf, 0x71, + 0x2f, 0xb5, 0x4a, 0xb8, 0x95, 0x51, 0x7f, 0xac, 0xe0, 0x26, 0x84, 0x16, 0x8c, 0xae, 0x34, 0xd7, 0x39, 0x43, 0xf7, + 0x8e, 0x38, 0x7e, 0x24, 0x01, 0x58, 0xb1, 0x06, 0x25, 0x8d, 0xb9, 0x84, 0x5d, 0x5e, 0xc3, 0xc2, 0x03, 0x06, 0xdd, + 0x4b, 0x39, 0xb6, 0x7a, 0x02, 0x95, 0x6a, 0x7b, 0x7b, 0xab, 0xe0, 0xfa, 0x16, 0x3f, 0x26, 0x8f, 0x64, 0xdc, 0x46, + 0x98, 0x53, 0xf8, 0xd1, 0x41, 0xf8, 0x83, 0x76, 0x17, 0x9e, 0xb0, 0xcd, 0x2d, 0x86, 0x09, 0x69, 0xf9, 0x99, 0x08, + 0xe1, 0x97, 0x3b, 0x32, 0xf5, 0x14, 0xd4, 0x0f, 0x08, 0xff, 0x5c, 0xbb, 0x1e, 0xc5, 0x8f, 0x35, 0x29, 0x91, 0xe3, + 0x5d, 0xc1, 0xd8, 0x07, 0x9a, 0x7f, 0x66, 0x45, 0xfc, 0x54, 0xe3, 0x76, 0xe7, 0x01, 0x36, 0xaa, 0xea, 0xfd, 0x36, + 0xea, 0x96, 0xb7, 0x5b, 0xcf, 0xa5, 0xbd, 0x4f, 0x80, 0x53, 0xb8, 0xae, 0xaf, 0x81, 0xb5, 0xdf, 0xe7, 0x5b, 0x4a, + 0xad, 0x82, 0xde, 0x44, 0xa8, 0x7e, 0x95, 0xca, 0xc5, 0x17, 0x9a, 0xf3, 0xd1, 0x9e, 0x66, 0xb3, 0x79, 0x4e, 0x35, + 0xdb, 0x73, 0x73, 0xde, 0xa3, 0xd0, 0x50, 0x54, 0xf2, 0x14, 0x7f, 0x88, 0x6a, 0xd3, 0xfe, 0x21, 0x92, 0x6a, 0xef, + 0xc4, 0x70, 0x9f, 0xe5, 0xf8, 0x12, 0x41, 0xcb, 0xeb, 0xb2, 0xcd, 0x1b, 0xc1, 0x66, 0x1b, 0x94, 0x65, 0x03, 0x73, + 0x7e, 0x2b, 0x0c, 0xf7, 0x9b, 0x84, 0x74, 0x7a, 0xd1, 0x85, 0xfa, 0x32, 0xb9, 0x8c, 0xe0, 0x26, 0xa7, 0x20, 0x82, + 0x19, 0xe5, 0x11, 0x94, 0xa0, 0xa4, 0xd5, 0xa5, 0x17, 0xac, 0x4b, 0x1b, 0x0d, 0xcf, 0x66, 0x67, 0x84, 0xf7, 0xa9, + 0xad, 0x9f, 0xe3, 0x29, 0x1e, 0x91, 0x66, 0x1b, 0x2f, 0x48, 0xcb, 0x54, 0xe9, 0x2e, 0x2e, 0x32, 0xd7, 0xcf, 0xc1, + 0x41, 0x5c, 0x24, 0x39, 0x55, 0xfa, 0x05, 0x68, 0x04, 0xc8, 0x02, 0x4f, 0x49, 0x91, 0xb0, 0x5b, 0x96, 0xc5, 0x19, + 0xc2, 0x53, 0x47, 0x83, 0x50, 0x17, 0x2d, 0x48, 0x50, 0x0c, 0xe4, 0x0c, 0x22, 0x58, 0x6f, 0xda, 0x6f, 0x0f, 0x08, + 0x21, 0xd1, 0x7e, 0xb3, 0x19, 0xf5, 0x0a, 0xf2, 0x8b, 0x48, 0x21, 0x25, 0x60, 0xa7, 0xc9, 0x4f, 0x90, 0xd4, 0x09, + 0x92, 0xe2, 0xf7, 0x32, 0xd1, 0x4c, 0xe9, 0x18, 0x92, 0x41, 0x49, 0xa0, 0x3c, 0x86, 0x47, 0x17, 0x47, 0x51, 0x03, + 0x52, 0x0d, 0x8a, 0x22, 0x5c, 0x90, 0x3b, 0x8d, 0xd2, 0x69, 0xff, 0x78, 0x10, 0x9e, 0x11, 0x36, 0x15, 0xfa, 0xbf, + 0xd3, 0xbd, 0x69, 0xbf, 0x65, 0xfa, 0xbf, 0x8c, 0x7a, 0x71, 0x41, 0x94, 0x65, 0xe3, 0x7a, 0x2a, 0x15, 0xcc, 0xcc, + 0x17, 0xa5, 0x6e, 0x80, 0xae, 0xef, 0x11, 0x69, 0x76, 0xd2, 0x78, 0x14, 0xce, 0xa4, 0x09, 0x1d, 0x3a, 0x50, 0xe0, + 0x9c, 0x40, 0x79, 0x5c, 0x10, 0xe8, 0xb4, 0xaa, 0x76, 0xa7, 0x53, 0x97, 0xf0, 0x63, 0xf4, 0x63, 0xef, 0x93, 0x48, + 0x7f, 0x13, 0x76, 0x04, 0x9f, 0xc4, 0x6a, 0x05, 0x7f, 0x7f, 0x13, 0x3d, 0x18, 0x96, 0x49, 0xfb, 0xc5, 0xa5, 0xfd, + 0x04, 0x69, 0x82, 0xa5, 0x66, 0xc0, 0x58, 0x95, 0xfc, 0x98, 0x5d, 0x9c, 0x31, 0xb1, 0x33, 0x38, 0x38, 0xe0, 0x7d, + 0xda, 0x68, 0x0f, 0xe0, 0x46, 0xa0, 0xd0, 0xea, 0x03, 0xd7, 0xd3, 0x38, 0x3a, 0xba, 0x8c, 0x50, 0x2f, 0xda, 0x83, + 0x55, 0xee, 0xca, 0x06, 0x71, 0xb0, 0xce, 0x1a, 0x9a, 0xa6, 0xa3, 0x4b, 0xd2, 0xea, 0xc5, 0xc2, 0x12, 0xf9, 0x1c, + 0xe1, 0xcc, 0xd1, 0xd4, 0x16, 0x1e, 0xa1, 0x86, 0x10, 0x0d, 0xff, 0x3d, 0x42, 0x8d, 0xa9, 0x6e, 0x8c, 0x51, 0x9a, + 0xc1, 0xdf, 0x78, 0x44, 0x08, 0x69, 0x76, 0xca, 0x8a, 0xfe, 0xb0, 0xa4, 0x28, 0x1d, 0x7b, 0xf5, 0x68, 0xdf, 0x6c, + 0x0e, 0xd9, 0x88, 0x79, 0x9f, 0x0d, 0x56, 0xab, 0xe8, 0xa2, 0x77, 0x19, 0xa1, 0x46, 0xec, 0xd1, 0xee, 0xc8, 0xe3, + 0x1d, 0x42, 0x58, 0x0c, 0xd6, 0xee, 0x06, 0xea, 0x86, 0xd5, 0x6e, 0x9b, 0x96, 0xd5, 0xfe, 0x0f, 0xc8, 0x02, 0x5b, + 0x97, 0x72, 0x8f, 0xe5, 0x6f, 0xe7, 0x30, 0x55, 0x8f, 0xdb, 0x92, 0xb4, 0x70, 0x41, 0xbc, 0xba, 0x9b, 0x12, 0x5d, + 0xe1, 0x7f, 0x46, 0xaa, 0xe2, 0xb8, 0x9f, 0xe3, 0xe9, 0x80, 0x08, 0x6a, 0xe4, 0x97, 0xae, 0x57, 0xa6, 0xb3, 0x9c, + 0xdc, 0xb0, 0x8d, 0xfb, 0xdf, 0x1c, 0xee, 0x64, 0x1e, 0xeb, 0x24, 0x5b, 0x14, 0x05, 0x13, 0xfa, 0x95, 0x1c, 0x39, + 0xc6, 0x8e, 0xe5, 0x20, 0x5b, 0xc1, 0xc5, 0x2e, 0x06, 0xae, 0xae, 0xe3, 0x77, 0xca, 0x68, 0x2b, 0x7b, 0x41, 0x46, + 0x96, 0xe1, 0x32, 0xd7, 0xbd, 0xdd, 0x85, 0x13, 0xa5, 0x63, 0x84, 0x47, 0xee, 0x1e, 0x38, 0x4e, 0x92, 0x64, 0x91, + 0x64, 0x90, 0x0d, 0x1d, 0x28, 0xb4, 0x36, 0xfb, 0x2a, 0x56, 0xe4, 0xb1, 0x4e, 0x04, 0xbb, 0x35, 0xdd, 0xc6, 0xa8, + 0x3a, 0xc4, 0xfd, 0x7e, 0xbb, 0xa0, 0x5d, 0x43, 0x80, 0x54, 0x22, 0xe4, 0x88, 0x01, 0x84, 0xe0, 0xee, 0xdf, 0x25, + 0x4d, 0xa9, 0x0a, 0x6f, 0xb6, 0xaa, 0x01, 0xf6, 0x43, 0x95, 0xf7, 0x02, 0xf4, 0xc4, 0x86, 0x3d, 0x2b, 0x0b, 0x5b, + 0xe5, 0x39, 0x42, 0x7c, 0x1c, 0x2f, 0x12, 0xb8, 0x11, 0x34, 0x98, 0x24, 0x04, 0x5a, 0xad, 0x16, 0x21, 0x6e, 0x4d, + 0x2b, 0xc5, 0xf4, 0x98, 0x4c, 0xfb, 0x45, 0xa3, 0x61, 0x94, 0xd7, 0x23, 0x8b, 0x17, 0x0b, 0x84, 0xc7, 0xe5, 0x5e, + 0xf3, 0xe5, 0xe6, 0xa4, 0xde, 0x55, 0x3c, 0xae, 0x2b, 0x81, 0x1b, 0x42, 0x20, 0xa3, 0x5f, 0xd4, 0xd0, 0x3a, 0x9e, + 0x90, 0xa3, 0xb8, 0x9f, 0xf4, 0xfe, 0xe7, 0x00, 0xf5, 0xe2, 0xe4, 0x10, 0x1d, 0x59, 0x5a, 0x32, 0x46, 0xdd, 0xcc, + 0xf6, 0xb1, 0x34, 0xb7, 0x9f, 0x6d, 0x6c, 0x14, 0x90, 0xa9, 0xc4, 0x82, 0xce, 0x58, 0x3a, 0x81, 0x5d, 0xef, 0x91, + 0x67, 0x8e, 0x01, 0x99, 0xd2, 0x89, 0xa3, 0x2d, 0x49, 0xd4, 0x93, 0xb4, 0xfc, 0xea, 0x45, 0x3d, 0x5a, 0x7d, 0xfd, + 0xcf, 0xa8, 0x97, 0xd1, 0xf4, 0x31, 0x5f, 0x3b, 0x25, 0x79, 0xad, 0x8f, 0x33, 0xdf, 0xc7, 0xda, 0x2e, 0x4e, 0x00, + 0xbc, 0x11, 0xda, 0xd6, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0xa4, 0x12, 0x4d, 0x27, 0x00, 0xd5, 0x60, 0x11, + 0x54, 0x68, 0x1b, 0x10, 0x4c, 0x19, 0xb0, 0xc5, 0x23, 0x2d, 0x40, 0x73, 0x71, 0xd9, 0x42, 0xcb, 0x5a, 0x61, 0xc7, + 0x59, 0xd5, 0xef, 0xe2, 0x4b, 0xe2, 0x3d, 0x06, 0xaa, 0x7c, 0xb1, 0xe8, 0x8e, 0x1b, 0x0d, 0xa4, 0x3c, 0x7e, 0x8d, + 0xfa, 0xe3, 0x01, 0xbe, 0x05, 0x14, 0xc2, 0x35, 0x8c, 0xc2, 0xb5, 0x39, 0x76, 0xdc, 0x1c, 0x1b, 0x0d, 0xb9, 0x46, + 0xdd, 0xa0, 0xf2, 0xc2, 0x55, 0x5e, 0xaf, 0x2d, 0x64, 0x36, 0x31, 0xee, 0x1c, 0x99, 0x14, 0x30, 0x04, 0x23, 0x84, + 0xbc, 0x92, 0x68, 0x67, 0xb3, 0xd0, 0x28, 0x54, 0x37, 0xbb, 0x17, 0x28, 0xaa, 0x3d, 0x3d, 0x62, 0x80, 0x05, 0x54, + 0x2d, 0xd5, 0xc8, 0x53, 0x8d, 0x47, 0x8d, 0xb6, 0x41, 0xf7, 0x66, 0xbb, 0x5b, 0x6f, 0xec, 0x7e, 0xd5, 0x18, 0x1e, + 0x35, 0xc8, 0xb4, 0xda, 0xe1, 0x6b, 0xd9, 0x68, 0xac, 0xeb, 0xf7, 0xa5, 0x7e, 0x13, 0xd7, 0xee, 0x2f, 0x9e, 0x6e, + 0x99, 0x78, 0xf8, 0xd3, 0xb7, 0x3a, 0x6f, 0x45, 0xc2, 0x85, 0x60, 0x05, 0x9c, 0xb0, 0x44, 0x63, 0xb1, 0x5e, 0x97, + 0xa7, 0xfe, 0xef, 0xda, 0xda, 0x8c, 0x11, 0x0e, 0x74, 0xc8, 0x48, 0x6d, 0x58, 0xe2, 0x02, 0x53, 0x43, 0x45, 0x08, + 0x21, 0x1f, 0xb4, 0x37, 0x8f, 0xd1, 0x86, 0x24, 0x65, 0x24, 0x38, 0xbb, 0x63, 0x45, 0x58, 0x72, 0x7d, 0xef, 0xb1, + 0xfc, 0xae, 0x48, 0xd7, 0x17, 0x83, 0xd4, 0x14, 0xcb, 0x1d, 0x21, 0xcb, 0xc9, 0x17, 0x90, 0x73, 0xca, 0x0b, 0x96, + 0xc4, 0x10, 0xc4, 0x27, 0xbc, 0x60, 0x86, 0x71, 0xbf, 0xe7, 0xe5, 0xc6, 0xac, 0xce, 0x69, 0x66, 0xa1, 0xf6, 0x07, + 0xa0, 0x99, 0x83, 0x72, 0x48, 0x92, 0xad, 0x62, 0xd7, 0xf7, 0x1e, 0xbe, 0xde, 0x25, 0x43, 0xaf, 0x56, 0x4e, 0x7a, + 0xce, 0x80, 0xf5, 0xc1, 0x79, 0x35, 0xd4, 0xcc, 0xfd, 0x48, 0xe3, 0xcc, 0x30, 0x51, 0x79, 0xcc, 0x01, 0x99, 0xae, + 0xef, 0x3d, 0x7c, 0x17, 0x73, 0xa3, 0x9b, 0x42, 0x38, 0x9c, 0x77, 0x5c, 0x90, 0x98, 0x12, 0x86, 0xec, 0xe4, 0x4b, + 0x3a, 0x56, 0x04, 0xa7, 0x7b, 0x4a, 0x4d, 0x26, 0x88, 0x1d, 0x7d, 0x31, 0x20, 0x99, 0x03, 0x01, 0xc9, 0x10, 0xce, + 0x6a, 0x72, 0x1d, 0x31, 0x6b, 0x60, 0x3a, 0xbb, 0x82, 0xc5, 0x48, 0x2c, 0x7b, 0x88, 0x70, 0x66, 0xba, 0xd5, 0x6b, + 0x7b, 0x9c, 0x28, 0xba, 0x69, 0xe8, 0x56, 0xc9, 0xb3, 0xef, 0x41, 0xf0, 0xf2, 0x1f, 0xaf, 0x5c, 0xdb, 0x65, 0xc2, + 0x13, 0x6f, 0x91, 0x76, 0x7d, 0xef, 0xe1, 0xaf, 0xce, 0x28, 0x6d, 0x4e, 0x3d, 0xf9, 0xdf, 0x92, 0x51, 0x1f, 0xfe, + 0x9a, 0x54, 0xb9, 0xa6, 0xf0, 0xf5, 0xbd, 0x87, 0xbf, 0xef, 0x2a, 0x06, 0xe9, 0xeb, 0x45, 0xa5, 0x24, 0x30, 0xe3, + 0x5b, 0xb2, 0x3c, 0x5d, 0xba, 0xb3, 0x22, 0x15, 0x6b, 0x6c, 0x4e, 0xa8, 0x54, 0xad, 0x4b, 0xdd, 0xca, 0x13, 0x2c, + 0x89, 0xb9, 0x4a, 0xaa, 0x2f, 0x9b, 0x43, 0x63, 0x2e, 0xc5, 0x55, 0x26, 0xe7, 0xec, 0x1b, 0xf7, 0x4b, 0x4f, 0x35, + 0x4a, 0xf8, 0x0c, 0x0c, 0x71, 0xcc, 0xd8, 0x05, 0xde, 0x6f, 0xa1, 0xee, 0xc6, 0x79, 0x26, 0x0d, 0xa2, 0x16, 0xf5, + 0xc3, 0x06, 0x53, 0xd2, 0xc2, 0x19, 0x69, 0xe1, 0x9c, 0xa8, 0x7e, 0xcb, 0x9e, 0x18, 0xdd, 0xbc, 0x6c, 0xda, 0x9e, + 0x3b, 0xb0, 0xdd, 0x73, 0xbb, 0x6f, 0xed, 0xa1, 0x3c, 0xed, 0xe6, 0x46, 0x7f, 0x69, 0x0e, 0xfa, 0xa9, 0x41, 0x8d, + 0x27, 0x2c, 0x2e, 0x70, 0x61, 0x5a, 0xbe, 0xe2, 0xc3, 0x1c, 0xec, 0x54, 0x60, 0x66, 0x58, 0xa3, 0xb4, 0x2c, 0xdb, + 0x76, 0x65, 0xf3, 0xc4, 0xac, 0x55, 0x81, 0xf3, 0x04, 0x48, 0x39, 0xce, 0x9d, 0x5d, 0x8f, 0xda, 0xae, 0x72, 0x76, + 0x70, 0x10, 0xbb, 0x4a, 0x34, 0x2e, 0x7c, 0x7e, 0x75, 0x03, 0xf8, 0xde, 0x52, 0x8d, 0x29, 0x32, 0x13, 0x68, 0x34, + 0xb2, 0xc1, 0x9a, 0xee, 0x13, 0x12, 0xe7, 0x75, 0x28, 0xfa, 0xd1, 0x1b, 0x66, 0x70, 0x03, 0x00, 0x8d, 0x46, 0x79, + 0xdd, 0xbb, 0x01, 0xb1, 0xa7, 0x1a, 0xcb, 0xf5, 0x97, 0xb8, 0xb4, 0x26, 0x6a, 0x6d, 0xd9, 0x61, 0xf9, 0x51, 0x20, + 0x11, 0xe2, 0xae, 0xf0, 0xf3, 0x09, 0xb6, 0x86, 0x80, 0x72, 0x2f, 0x9c, 0x0d, 0x04, 0x36, 0x56, 0x5b, 0xae, 0x90, + 0x27, 0x6d, 0x1d, 0x94, 0xfa, 0x42, 0x70, 0xc1, 0x05, 0x85, 0x1a, 0x6b, 0x87, 0xe5, 0x4f, 0xd8, 0xb6, 0x39, 0x27, + 0x56, 0xc8, 0x69, 0xcb, 0xcc, 0x30, 0x0c, 0xc0, 0x3a, 0x25, 0x60, 0x9e, 0x93, 0x97, 0xdf, 0x46, 0xfd, 0x87, 0x01, + 0xea, 0x3f, 0x22, 0x2c, 0xd8, 0x06, 0x56, 0x57, 0x92, 0x48, 0xa7, 0xa0, 0x50, 0x3e, 0xeb, 0xf1, 0x9c, 0x80, 0x36, + 0xae, 0x0e, 0xd5, 0xda, 0x15, 0xe5, 0x37, 0x28, 0x4b, 0xb8, 0x53, 0x8c, 0x3e, 0x13, 0xfb, 0xfb, 0xe4, 0xb8, 0xba, + 0xa0, 0x83, 0xae, 0x77, 0x29, 0x07, 0x43, 0x52, 0xf8, 0xf0, 0xf7, 0xef, 0xdf, 0xad, 0x3e, 0x9e, 0x6f, 0xef, 0xe0, + 0xc0, 0xac, 0x14, 0x66, 0x1d, 0x6c, 0xe0, 0xba, 0x91, 0x29, 0xf4, 0x5f, 0xde, 0x89, 0xd7, 0xa9, 0xd0, 0xc6, 0x66, + 0xf4, 0xc7, 0x21, 0x8c, 0xb6, 0xdd, 0x36, 0x25, 0x58, 0xd0, 0x2c, 0xd0, 0x25, 0x6b, 0xdc, 0x4a, 0x8b, 0x6f, 0x90, + 0x91, 0x87, 0xa6, 0x00, 0x13, 0xa3, 0xdd, 0xd9, 0x8f, 0xd6, 0x0e, 0x4f, 0xec, 0xd0, 0xd0, 0xd2, 0x10, 0x42, 0x8b, + 0xf7, 0x80, 0x39, 0xf6, 0x88, 0x00, 0x10, 0xbd, 0x34, 0x90, 0xaa, 0x40, 0x16, 0x45, 0x95, 0x22, 0xff, 0xf9, 0x3e, + 0x21, 0x2f, 0x2b, 0x45, 0xe6, 0xdb, 0xca, 0x98, 0x0b, 0x10, 0x03, 0xa5, 0x70, 0x91, 0x50, 0x26, 0xd8, 0xcb, 0xd0, + 0x0f, 0xda, 0x97, 0x37, 0xd2, 0x66, 0x52, 0x71, 0xe3, 0xc1, 0x4d, 0xa9, 0x51, 0xf1, 0xd9, 0x7c, 0x0f, 0x89, 0x8d, + 0xdc, 0x7b, 0x90, 0xcb, 0xa8, 0x19, 0x24, 0x7c, 0xbf, 0x33, 0xa5, 0x7d, 0xbb, 0xeb, 0xcf, 0x9b, 0x16, 0x31, 0x1b, + 0xeb, 0x92, 0x70, 0xa1, 0x58, 0xa1, 0x1f, 0xb1, 0xb1, 0x2c, 0xe0, 0xfe, 0xa3, 0x04, 0x0b, 0x5a, 0xdf, 0x0b, 0x74, + 0x80, 0x66, 0x82, 0xc1, 0xa5, 0xc3, 0xc6, 0x0c, 0xcd, 0xaf, 0xcf, 0xe6, 0x0e, 0xfc, 0x7a, 0xb3, 0xd6, 0xcb, 0x83, + 0x83, 0x2f, 0xac, 0x02, 0x94, 0x1b, 0xa6, 0x19, 0x46, 0x40, 0xbc, 0x2c, 0x97, 0xe3, 0x6e, 0x86, 0xef, 0xc5, 0x95, + 0xca, 0xc0, 0x13, 0x8e, 0x90, 0x08, 0x3d, 0x27, 0x7a, 0x3d, 0xd9, 0xa4, 0xf7, 0x4e, 0x9b, 0x21, 0x42, 0xb1, 0x06, + 0xc8, 0x3d, 0xc8, 0xe5, 0x56, 0xc9, 0xa4, 0x2a, 0x5b, 0xdb, 0x72, 0x10, 0x8f, 0x01, 0x5c, 0xb1, 0x11, 0x52, 0x02, + 0x34, 0xdc, 0x2d, 0xb4, 0x3c, 0x97, 0xc0, 0xfe, 0x63, 0x95, 0x80, 0x48, 0x8b, 0x6a, 0x1b, 0x17, 0x21, 0x6c, 0x4d, + 0x7d, 0x02, 0xe3, 0x84, 0x87, 0xcf, 0x77, 0x69, 0xa8, 0x3d, 0x6a, 0x33, 0x73, 0x06, 0x41, 0x09, 0x89, 0xca, 0x0a, + 0xc9, 0x97, 0x58, 0x38, 0x6e, 0xce, 0xdf, 0xc3, 0x01, 0x29, 0x56, 0x34, 0xb6, 0x77, 0x5b, 0x70, 0x7c, 0x14, 0xc9, + 0x22, 0xae, 0x75, 0xdd, 0x2d, 0x4c, 0x35, 0xec, 0x40, 0x47, 0x43, 0x38, 0x15, 0xe6, 0x9e, 0xf0, 0x71, 0x45, 0x52, + 0x7f, 0xb6, 0x26, 0xda, 0xda, 0x13, 0xc3, 0xca, 0x34, 0x25, 0x98, 0xff, 0xcf, 0xd6, 0xea, 0xba, 0x2c, 0x84, 0x99, + 0x19, 0xc6, 0x8d, 0x5d, 0x05, 0xb6, 0x06, 0x1c, 0x5b, 0xfe, 0x2d, 0x83, 0x45, 0xf5, 0x4a, 0x71, 0xd3, 0x69, 0xc0, + 0x04, 0xbc, 0x05, 0xeb, 0x99, 0xcd, 0xad, 0xff, 0xdc, 0x1c, 0x8c, 0x02, 0xab, 0x1a, 0x81, 0x97, 0x86, 0xc0, 0x23, + 0x60, 0xdc, 0xbc, 0x69, 0x79, 0xcf, 0x19, 0xd1, 0x08, 0x7f, 0xe2, 0x39, 0x3c, 0xb3, 0x2c, 0xf7, 0xd6, 0xc7, 0xc6, + 0x8a, 0xa4, 0x82, 0x80, 0x6d, 0x11, 0x76, 0x44, 0x5e, 0x22, 0xac, 0x1a, 0x8d, 0xae, 0xba, 0x60, 0x95, 0x56, 0xa5, + 0x1a, 0xa6, 0x80, 0x5b, 0x62, 0xc0, 0xfb, 0xda, 0x89, 0x0a, 0x86, 0x04, 0xde, 0xfa, 0x5b, 0x81, 0xfa, 0xfe, 0xe1, + 0xdb, 0x38, 0xa4, 0x6f, 0x61, 0xd9, 0xf2, 0x22, 0x16, 0xa6, 0x14, 0x57, 0x77, 0x38, 0x6f, 0xbe, 0x6f, 0x36, 0x02, + 0xe3, 0xde, 0x6f, 0x63, 0xb0, 0x71, 0x43, 0x5d, 0x6d, 0x49, 0x43, 0xb9, 0x09, 0xbb, 0xa8, 0xb2, 0x77, 0x0c, 0x3b, + 0xeb, 0xea, 0x4a, 0xda, 0xd5, 0x44, 0xad, 0xd7, 0x8a, 0x55, 0x46, 0x03, 0x1b, 0x86, 0x9d, 0xe6, 0x98, 0xd9, 0x56, + 0xe0, 0x3f, 0x9e, 0x13, 0x8d, 0x03, 0x64, 0x7d, 0xf3, 0xad, 0xeb, 0x94, 0x6a, 0x98, 0xb0, 0xbd, 0xdd, 0xf9, 0xf8, + 0x98, 0xef, 0x3a, 0x1f, 0xb1, 0x74, 0x5b, 0xdf, 0x9c, 0x8d, 0xed, 0x7f, 0xe3, 0x6c, 0x74, 0x6a, 0x7b, 0x7f, 0x3c, + 0x02, 0x77, 0x52, 0x3b, 0x1e, 0xeb, 0x6b, 0x4a, 0x24, 0x16, 0x6e, 0x39, 0x2e, 0x3b, 0xab, 0x95, 0xe8, 0xb7, 0x40, + 0xed, 0x14, 0x45, 0xf0, 0xb3, 0x6d, 0x7f, 0x06, 0x24, 0xd9, 0xea, 0x90, 0x63, 0x51, 0x8a, 0x32, 0x28, 0x01, 0x03, + 0xea, 0xd8, 0xd8, 0x7a, 0x19, 0xc4, 0x76, 0x38, 0xe4, 0xb0, 0x9c, 0x88, 0xf2, 0xea, 0x0a, 0x46, 0x6c, 0x8e, 0x0d, + 0x27, 0x60, 0xc6, 0x3b, 0xad, 0x0a, 0xbd, 0xf8, 0xf9, 0xaf, 0x99, 0xd3, 0xda, 0x11, 0x63, 0x39, 0x89, 0x9a, 0x15, + 0x83, 0x1b, 0x81, 0x63, 0x18, 0xf7, 0x8d, 0x84, 0x5a, 0x9d, 0xea, 0xa8, 0x76, 0x24, 0xe1, 0x16, 0xa8, 0xdd, 0xf6, + 0xcd, 0xb9, 0xb4, 0x5a, 0xed, 0x3c, 0x58, 0x70, 0x11, 0xe0, 0xf6, 0x73, 0xa2, 0x6b, 0x24, 0x85, 0x12, 0x27, 0x41, + 0xe1, 0xdc, 0xa0, 0xaa, 0x26, 0xb2, 0xdf, 0x1a, 0x00, 0x4f, 0xda, 0xcd, 0x2e, 0x64, 0x25, 0x24, 0x67, 0x8d, 0x06, + 0xca, 0xcb, 0x8e, 0x69, 0x5f, 0x34, 0xb2, 0x01, 0x66, 0x38, 0xb3, 0x02, 0x0b, 0x9c, 0x5e, 0x71, 0x5e, 0x75, 0xdd, + 0xcf, 0x06, 0x08, 0x17, 0xab, 0x55, 0x6c, 0x87, 0x96, 0xa3, 0xd5, 0x2a, 0x0f, 0x87, 0x66, 0xf2, 0xa1, 0xe2, 0xcb, + 0x9e, 0x26, 0x2f, 0xcd, 0x79, 0xf8, 0x12, 0x06, 0xd9, 0x20, 0x71, 0xee, 0x54, 0x82, 0x39, 0x68, 0xae, 0x1a, 0xb2, + 0x9f, 0x35, 0xda, 0x83, 0x80, 0x86, 0xf5, 0xb3, 0x01, 0xc9, 0xd7, 0x60, 0x39, 0xab, 0xdc, 0x81, 0xf9, 0x37, 0x1c, + 0x6c, 0x7f, 0x9b, 0x73, 0xc6, 0x36, 0x18, 0xae, 0xc9, 0xa6, 0xca, 0xa0, 0xc4, 0x2b, 0xb7, 0xb8, 0xbe, 0x5c, 0xcd, + 0xc0, 0xa2, 0x2c, 0x84, 0xdd, 0x35, 0x73, 0x0f, 0x84, 0xff, 0x12, 0xdb, 0x25, 0x2d, 0x8d, 0xb8, 0x37, 0x10, 0xdf, + 0xdb, 0x6e, 0x27, 0x49, 0x42, 0x8b, 0x89, 0xb9, 0x12, 0xf1, 0x37, 0xbc, 0x66, 0x0f, 0x1c, 0xbb, 0x71, 0x06, 0x3d, + 0xf7, 0xcb, 0xce, 0x06, 0xc4, 0x8e, 0xdf, 0x33, 0x3b, 0xde, 0x71, 0xa5, 0xa0, 0xbb, 0x75, 0x11, 0x76, 0x30, 0xf4, + 0x7f, 0x79, 0x30, 0x27, 0x6e, 0x30, 0x16, 0x4d, 0x36, 0xe0, 0xf6, 0x0d, 0x78, 0x14, 0x74, 0x03, 0x6e, 0xdf, 0x86, + 0xaf, 0x87, 0x56, 0xf6, 0xcd, 0x01, 0x06, 0x64, 0xc2, 0x8e, 0xb4, 0x4a, 0x08, 0x86, 0x79, 0xba, 0xc9, 0x91, 0x59, + 0xb2, 0x0a, 0x87, 0xab, 0x26, 0xb1, 0xd8, 0xd8, 0x0b, 0x15, 0x93, 0x1a, 0x08, 0xc6, 0x22, 0x7d, 0x89, 0x42, 0xa5, + 0x41, 0xdd, 0x38, 0x06, 0xb0, 0xca, 0x69, 0xeb, 0x5f, 0x1e, 0x1c, 0x80, 0xd0, 0x00, 0xac, 0x5d, 0x92, 0xd1, 0xb9, + 0x5e, 0x14, 0xc0, 0x5f, 0x29, 0xff, 0x1b, 0x92, 0xc1, 0xed, 0xc4, 0xa4, 0xc1, 0x0f, 0x48, 0x98, 0x53, 0xa5, 0xf8, + 0x17, 0x9b, 0xe6, 0x7e, 0xe3, 0x82, 0x78, 0x8c, 0x56, 0x96, 0x53, 0x94, 0xa8, 0x2b, 0x1d, 0xba, 0xd6, 0x21, 0xf7, + 0xf4, 0x0b, 0x13, 0xfa, 0x25, 0x57, 0x9a, 0x09, 0x00, 0x40, 0x85, 0x78, 0x30, 0x25, 0x85, 0x60, 0xeb, 0xd6, 0x6a, + 0xd1, 0xd1, 0xe8, 0xbb, 0x55, 0x74, 0x9d, 0x2d, 0x9a, 0x52, 0x31, 0xca, 0x6d, 0x27, 0xa1, 0xcd, 0xa4, 0xb7, 0x13, + 0x2d, 0x4b, 0x86, 0x16, 0x3b, 0x15, 0xfb, 0x61, 0x68, 0x7d, 0x2c, 0x88, 0x3f, 0x17, 0xfc, 0x59, 0xfa, 0x5d, 0x3e, + 0x06, 0xae, 0xd4, 0xbf, 0xb1, 0x0a, 0xe1, 0x4c, 0xb0, 0x0e, 0xc8, 0x6b, 0x52, 0x1f, 0xa7, 0x47, 0x9d, 0x7c, 0x4b, + 0xb9, 0x50, 0x1a, 0x85, 0x6d, 0x9c, 0x14, 0x06, 0x53, 0xce, 0xbe, 0x2d, 0x71, 0xfd, 0xea, 0x8f, 0x11, 0x7f, 0x74, + 0x88, 0x7f, 0x97, 0x4a, 0xa3, 0x65, 0x89, 0x60, 0xc8, 0xef, 0x48, 0xad, 0xe0, 0x2a, 0x36, 0xe7, 0xfa, 0xb9, 0x9e, + 0xe5, 0x1b, 0x9e, 0x38, 0x5d, 0xad, 0x4a, 0xa9, 0x40, 0xc5, 0x37, 0x0c, 0x3f, 0x61, 0x70, 0x6f, 0xfc, 0x8c, 0x07, + 0x55, 0xb6, 0xef, 0x8b, 0x9f, 0x05, 0xf7, 0xc5, 0xcf, 0x78, 0xba, 0x5d, 0x34, 0xb8, 0x27, 0xee, 0x24, 0xe7, 0x49, + 0x2b, 0xf2, 0x7c, 0xd4, 0x94, 0x56, 0xfe, 0x95, 0x76, 0x6b, 0xe0, 0xca, 0x26, 0x0e, 0x8c, 0xf3, 0xea, 0x22, 0x14, + 0x73, 0xe6, 0x8c, 0x96, 0xc3, 0xff, 0xd6, 0x3a, 0xb9, 0x93, 0x47, 0x5a, 0x29, 0xe4, 0x0d, 0x2d, 0xf4, 0x3d, 0xd8, + 0x70, 0xc5, 0x96, 0x0f, 0x20, 0x25, 0xa0, 0x6c, 0xfb, 0xf7, 0xba, 0x08, 0xc4, 0x71, 0x65, 0x9d, 0x8f, 0xc2, 0xf6, + 0x49, 0x51, 0x72, 0x75, 0x75, 0x21, 0xe4, 0xd6, 0x68, 0x09, 0x10, 0xa6, 0xde, 0x35, 0x8f, 0x39, 0x9a, 0xcc, 0xd2, + 0xe5, 0xba, 0x54, 0x1d, 0x14, 0x96, 0xab, 0xe3, 0x08, 0x17, 0x6b, 0x73, 0x83, 0xfe, 0x8a, 0xe3, 0xbf, 0xb9, 0xa3, + 0x91, 0x9f, 0x4a, 0x0a, 0xf4, 0x68, 0xb7, 0xaf, 0xcd, 0x0e, 0x12, 0x69, 0xe7, 0x50, 0x5a, 0x0a, 0x00, 0x56, 0x1b, + 0x7c, 0x5d, 0x7b, 0x9c, 0x7a, 0x22, 0xdd, 0x6c, 0xbe, 0x69, 0x08, 0x8b, 0x59, 0x69, 0xc1, 0x63, 0xba, 0xd9, 0x61, + 0x39, 0xea, 0x65, 0x71, 0x5d, 0xee, 0xb1, 0x5a, 0xbf, 0xe8, 0x1b, 0xa0, 0xac, 0x0c, 0xd1, 0x56, 0xab, 0xb8, 0x0e, + 0x6f, 0x22, 0x82, 0x6b, 0x10, 0x84, 0x45, 0x60, 0xc0, 0x51, 0x63, 0xbc, 0x6d, 0x9d, 0x18, 0x6d, 0xda, 0x2f, 0x79, + 0xd6, 0xbd, 0x36, 0x8e, 0x50, 0xd1, 0x60, 0xab, 0x87, 0x9a, 0x07, 0x6c, 0x67, 0x57, 0x76, 0x14, 0x40, 0x68, 0x4a, + 0xbd, 0x71, 0x6e, 0x65, 0x45, 0xbb, 0x03, 0xbe, 0xe8, 0x3b, 0xe6, 0xb9, 0x0e, 0x74, 0xdb, 0xf9, 0x81, 0x6d, 0xd3, + 0x13, 0xf9, 0x2d, 0xdb, 0xa6, 0x1a, 0x27, 0xbc, 0xdf, 0x42, 0xdf, 0x37, 0x84, 0xb5, 0x7d, 0xed, 0x2e, 0xf2, 0xbf, + 0xd0, 0x5d, 0x1b, 0xd0, 0xd3, 0x82, 0xd9, 0xd3, 0x98, 0x0f, 0x7a, 0xbd, 0xfe, 0x54, 0xfa, 0x2f, 0x18, 0x5b, 0xa1, + 0x4f, 0x76, 0x17, 0x38, 0xb1, 0xd2, 0x38, 0x04, 0xc7, 0xaf, 0x38, 0x99, 0xe4, 0x72, 0x48, 0xf3, 0x77, 0xd0, 0x63, + 0x95, 0xfb, 0xfc, 0x6e, 0x54, 0x50, 0xcd, 0x1c, 0xad, 0xa9, 0x46, 0xf1, 0x8a, 0x07, 0xc3, 0x78, 0xc5, 0x2d, 0xe5, + 0xae, 0x5a, 0xc0, 0xcb, 0x97, 0x65, 0x13, 0xe9, 0xa7, 0x75, 0x29, 0x83, 0xa9, 0xdd, 0xbd, 0x6c, 0x92, 0x34, 0x56, + 0x92, 0x34, 0xa6, 0xe2, 0xcd, 0xa6, 0xe2, 0xf8, 0xef, 0x6f, 0x0c, 0x76, 0x9b, 0xcc, 0xfd, 0x1d, 0x90, 0xb9, 0xbf, + 0x79, 0xfa, 0xdd, 0x5a, 0x01, 0xc5, 0x3b, 0x4e, 0x8e, 0x8d, 0x65, 0x8c, 0x1d, 0xf5, 0x5b, 0x0d, 0x06, 0x0d, 0x9a, + 0x5c, 0x06, 0xde, 0x0e, 0xd5, 0xe9, 0xe5, 0xed, 0x8f, 0xe2, 0x6c, 0xa1, 0xb4, 0x9c, 0xb9, 0x46, 0x95, 0xf3, 0x71, + 0x32, 0x99, 0xa0, 0xc0, 0x36, 0x77, 0xf8, 0x69, 0xdd, 0x8d, 0x6c, 0xf9, 0x99, 0x8b, 0x51, 0xaa, 0xb0, 0x3b, 0x5b, + 0x54, 0x2a, 0xd7, 0xc4, 0x9b, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0x17, 0x5c, 0x4d, 0x59, 0x11, 0x17, 0x68, 0xf9, 0xad, + 0xce, 0x0a, 0xb8, 0xcd, 0xb1, 0x9d, 0xe1, 0x51, 0x69, 0x39, 0xa0, 0x13, 0x68, 0x0d, 0x74, 0x46, 0x33, 0xa6, 0xa7, + 0x72, 0x04, 0x86, 0x2f, 0xc9, 0xa8, 0x74, 0xa7, 0x3a, 0x38, 0xd8, 0x8f, 0x23, 0xa3, 0xbf, 0x00, 0x1f, 0xf4, 0x30, + 0x07, 0xf5, 0x96, 0xe0, 0x18, 0x54, 0x75, 0xcd, 0xd0, 0x92, 0x6d, 0xfa, 0xd0, 0xe8, 0xe4, 0x33, 0xbb, 0xc3, 0x1c, + 0xad, 0xd7, 0xa9, 0x1d, 0x75, 0x34, 0xe6, 0x2c, 0x1f, 0x45, 0xf8, 0x33, 0xbb, 0x4b, 0x4b, 0xb7, 0x75, 0xe3, 0x65, + 0x6d, 0x16, 0x31, 0x92, 0x37, 0x22, 0xc2, 0x55, 0x27, 0xe9, 0x72, 0x8d, 0x65, 0xc1, 0x27, 0x80, 0xa3, 0xbf, 0xb0, + 0xbb, 0xd4, 0xb5, 0x17, 0xb8, 0x0a, 0xa2, 0xa5, 0x07, 0x7d, 0x12, 0x24, 0x87, 0xcb, 0xe0, 0x04, 0x8e, 0xbe, 0xa9, + 0x3b, 0x20, 0xb5, 0x72, 0x95, 0x08, 0x89, 0xd0, 0xfa, 0xdf, 0x9d, 0x0a, 0x5e, 0x84, 0xe7, 0x9c, 0xae, 0x59, 0xdc, + 0x6e, 0x54, 0x62, 0x50, 0xa1, 0xb2, 0x20, 0xf9, 0x18, 0x73, 0xbf, 0xfb, 0x9c, 0xf7, 0x43, 0xa0, 0x33, 0x5b, 0x50, + 0xd7, 0x68, 0x3a, 0x32, 0xbf, 0x50, 0x75, 0x07, 0x35, 0xd3, 0x55, 0xc5, 0xbd, 0x8f, 0x31, 0x00, 0x1e, 0xac, 0x65, + 0xa8, 0x71, 0x08, 0x5d, 0x7b, 0x33, 0xd5, 0x31, 0x25, 0xf1, 0xd2, 0xcf, 0x21, 0xe5, 0x21, 0x18, 0xf5, 0x1a, 0xd0, + 0xd0, 0x21, 0x98, 0xb5, 0x3c, 0xe4, 0xe3, 0x58, 0x6c, 0x9d, 0xa1, 0xd2, 0x9c, 0xa1, 0x49, 0x00, 0xf2, 0x6f, 0x9c, + 0x99, 0xcc, 0x40, 0xc3, 0xf0, 0x96, 0xe6, 0x00, 0x74, 0xab, 0xeb, 0x70, 0x28, 0x5c, 0xd1, 0xd2, 0x79, 0xcf, 0x2e, + 0xba, 0xac, 0x0d, 0x2b, 0x36, 0xed, 0xa0, 0x75, 0x0a, 0x53, 0x62, 0xb6, 0xc0, 0xda, 0xeb, 0x7d, 0xb8, 0xb7, 0xab, + 0x8d, 0x8b, 0xc4, 0x4f, 0x8b, 0x78, 0x98, 0xc4, 0x14, 0x2d, 0x79, 0x4c, 0xb1, 0x04, 0x3b, 0xc8, 0x62, 0x5d, 0x8e, + 0x9f, 0x85, 0xcb, 0x51, 0xb3, 0x92, 0xde, 0xed, 0x60, 0x08, 0x5c, 0xbe, 0x06, 0xdb, 0x50, 0xcc, 0x3d, 0x61, 0xe1, + 0xb1, 0xf1, 0xf4, 0x0b, 0xd6, 0x6d, 0x6e, 0x17, 0xc4, 0xaf, 0xc0, 0x98, 0xc6, 0xcb, 0x60, 0x16, 0xa1, 0x53, 0xb9, + 0x73, 0x38, 0x74, 0xd7, 0x84, 0x95, 0xf1, 0x6a, 0xac, 0xc8, 0xc6, 0xd1, 0xf3, 0x7d, 0x1b, 0xcf, 0x7f, 0x16, 0xac, + 0xb8, 0xbb, 0x62, 0x60, 0x63, 0x2d, 0xc1, 0xdd, 0xb8, 0x5a, 0x86, 0xca, 0x40, 0xbe, 0x27, 0x0d, 0xeb, 0xb2, 0xc6, + 0xdf, 0x8d, 0x8a, 0xb1, 0x36, 0xf7, 0x94, 0x81, 0xb6, 0xc6, 0x6e, 0x17, 0xf6, 0x4d, 0xd7, 0x4d, 0xd6, 0x35, 0x8a, + 0xb8, 0x0a, 0xd2, 0xee, 0x6e, 0x01, 0x17, 0xa1, 0x3f, 0x6c, 0x5f, 0x0d, 0x36, 0x55, 0x37, 0x90, 0x04, 0xd7, 0x7e, + 0xf2, 0xdb, 0x53, 0xdd, 0x65, 0xad, 0xfb, 0xed, 0xa9, 0xd6, 0x2e, 0x0b, 0x8d, 0x21, 0x11, 0x76, 0xfd, 0x94, 0xfe, + 0xd3, 0x62, 0xbd, 0x46, 0x6b, 0x18, 0xde, 0x7b, 0xde, 0x8d, 0xe3, 0xf7, 0xde, 0x42, 0x31, 0x81, 0x8b, 0xdc, 0xab, + 0x5c, 0x7a, 0x42, 0x5e, 0x8d, 0xe0, 0x3d, 0xdf, 0x1a, 0xc2, 0x7b, 0x1e, 0x38, 0xbd, 0x82, 0xd4, 0x34, 0x11, 0x6c, + 0xe4, 0xe9, 0x27, 0xb2, 0x48, 0x68, 0xf8, 0xb8, 0xd7, 0x9c, 0x70, 0xfd, 0x57, 0x0a, 0xfc, 0x17, 0x1e, 0x2e, 0xb4, + 0x96, 0x02, 0x73, 0x31, 0x5f, 0x68, 0xac, 0xcc, 0xe8, 0x97, 0x63, 0x29, 0x74, 0x73, 0x4c, 0x67, 0x3c, 0xbf, 0x4b, + 0x17, 0xbc, 0x39, 0x93, 0x42, 0xaa, 0x39, 0xcd, 0x18, 0x56, 0x77, 0x4a, 0xb3, 0x59, 0x73, 0xc1, 0xf1, 0x73, 0x96, + 0x7f, 0x61, 0x9a, 0x67, 0x14, 0xbf, 0x95, 0x43, 0xa9, 0x25, 0x7e, 0x7d, 0x7b, 0x37, 0x61, 0x02, 0xff, 0x3e, 0x5c, + 0x08, 0xbd, 0xc0, 0x8a, 0x0a, 0xd5, 0x54, 0xac, 0xe0, 0xe3, 0x6e, 0xb3, 0x39, 0x2f, 0xf8, 0x8c, 0x16, 0x77, 0xcd, + 0x4c, 0xe6, 0xb2, 0x48, 0xff, 0xab, 0x75, 0x4c, 0x1f, 0x8c, 0x4f, 0xba, 0xba, 0xa0, 0x42, 0x71, 0x58, 0x98, 0x94, + 0xe6, 0xf9, 0xde, 0xf1, 0x69, 0x6b, 0xa6, 0xf6, 0xed, 0x85, 0x1f, 0x15, 0x7a, 0xfd, 0x17, 0xfe, 0x20, 0x61, 0x94, + 0xc9, 0x50, 0x0b, 0x37, 0xc8, 0x65, 0xb6, 0x28, 0x94, 0x2c, 0xd2, 0xb9, 0xe4, 0x42, 0xb3, 0xa2, 0x3b, 0x94, 0xc5, + 0x88, 0x15, 0xcd, 0x82, 0x8e, 0xf8, 0x42, 0xa5, 0x27, 0xf3, 0xdb, 0x6e, 0xbd, 0x07, 0x9b, 0x9f, 0x0a, 0x29, 0x58, + 0x17, 0xf8, 0x8d, 0x49, 0x21, 0x17, 0x62, 0xe4, 0x86, 0xb1, 0x10, 0x8a, 0xe9, 0xee, 0x9c, 0x8e, 0xc0, 0x0e, 0x38, + 0x3d, 0x9f, 0xdf, 0x76, 0xcd, 0xac, 0x6f, 0x18, 0x9f, 0x4c, 0x75, 0x7a, 0xda, 0x6a, 0xd9, 0x6f, 0xc5, 0xbf, 0xb2, + 0xb4, 0xdd, 0x49, 0x3a, 0xa7, 0xf3, 0x5b, 0xe0, 0xe0, 0x35, 0x2b, 0x9a, 0x00, 0x0b, 0xa8, 0xd4, 0x4e, 0x5a, 0x0f, + 0x8e, 0xef, 0x43, 0x06, 0xd8, 0x38, 0x34, 0xcd, 0x84, 0xc0, 0xd8, 0x3d, 0x5d, 0xcc, 0xe7, 0xac, 0x00, 0x2f, 0xfa, + 0xee, 0x8c, 0x16, 0x13, 0x2e, 0x9a, 0x85, 0x69, 0xb4, 0x79, 0x3e, 0xbf, 0x5d, 0xc3, 0x7c, 0x52, 0x6b, 0xb6, 0xea, + 0xa6, 0xe5, 0xbe, 0x96, 0xc1, 0x10, 0x4d, 0x4c, 0x9a, 0xb4, 0x98, 0x0c, 0x69, 0xdc, 0xee, 0xdc, 0xc7, 0xfe, 0x7f, + 0x49, 0x07, 0x05, 0x60, 0x6b, 0x8e, 0x16, 0x85, 0xb9, 0x45, 0x4d, 0xdb, 0xca, 0x36, 0x3b, 0x95, 0x5f, 0x58, 0xe1, + 0x5b, 0x35, 0x1f, 0xcb, 0xad, 0x79, 0xff, 0x27, 0x8d, 0xfe, 0x85, 0x27, 0x14, 0xd6, 0xc0, 0x20, 0x47, 0xdf, 0xc8, + 0x83, 0x30, 0xd3, 0xc1, 0xf2, 0x86, 0x8f, 0xf4, 0x34, 0x6d, 0xb7, 0x5a, 0x3f, 0x54, 0x2b, 0xd6, 0x9d, 0x5a, 0xd0, + 0xb5, 0x0b, 0x36, 0xab, 0xad, 0xe3, 0x8c, 0x96, 0xd8, 0xb6, 0x9c, 0x4b, 0xb7, 0xe4, 0x05, 0xcb, 0x4d, 0x34, 0x99, + 0xb5, 0x43, 0xb9, 0xad, 0x71, 0x72, 0x31, 0x65, 0x05, 0xd7, 0xdd, 0xfa, 0x57, 0xd5, 0xf1, 0xf6, 0xea, 0xaf, 0xad, + 0x1c, 0xba, 0xb4, 0x35, 0xdc, 0xa5, 0xe7, 0x63, 0xf8, 0xd8, 0x5e, 0xfd, 0x2f, 0xb4, 0x88, 0x37, 0x10, 0x13, 0x87, + 0x35, 0xd0, 0x3a, 0x98, 0x73, 0x01, 0x26, 0x99, 0x03, 0xfc, 0x0d, 0x28, 0x64, 0x34, 0xcf, 0x62, 0x18, 0xd1, 0x5e, + 0x73, 0xef, 0xb8, 0x60, 0x33, 0xe4, 0x01, 0x91, 0xdc, 0x3f, 0x2d, 0xd8, 0x6c, 0x9d, 0x98, 0xea, 0x4b, 0x83, 0x22, + 0x34, 0xe7, 0x13, 0x91, 0x66, 0x0c, 0xd0, 0x77, 0x9d, 0x30, 0xa1, 0xb9, 0xbe, 0x6b, 0x16, 0xf2, 0x66, 0x39, 0xe2, + 0x6a, 0x9e, 0xd3, 0xbb, 0x74, 0x9c, 0xb3, 0xdb, 0xae, 0x29, 0xd5, 0xe4, 0x9a, 0xcd, 0x94, 0x2b, 0xdb, 0x85, 0xf4, + 0xe6, 0xc8, 0x9a, 0x4d, 0x00, 0xf4, 0xe4, 0xcd, 0xe6, 0xfe, 0x49, 0x8e, 0xd5, 0x1e, 0xa3, 0x8a, 0x35, 0xe5, 0x42, + 0xef, 0xb5, 0x54, 0x77, 0xc6, 0x45, 0xd3, 0x0d, 0xe4, 0xa4, 0x35, 0xbf, 0xed, 0x6e, 0x43, 0x3e, 0xe8, 0x3f, 0x61, + 0xb7, 0x73, 0x2a, 0x46, 0x6c, 0xb4, 0x0c, 0xaa, 0x75, 0xa0, 0x5e, 0x58, 0x2a, 0x15, 0x7a, 0xda, 0x34, 0xb6, 0x5e, + 0x71, 0x47, 0xa0, 0x6f, 0xa0, 0xd6, 0x83, 0x16, 0xb6, 0xff, 0x9f, 0xb4, 0x51, 0x58, 0x79, 0x0f, 0xc2, 0x2e, 0xf1, + 0xf1, 0x5d, 0x13, 0xfe, 0x2e, 0xc1, 0xb7, 0x88, 0x67, 0x34, 0x77, 0x10, 0x99, 0xf1, 0xd1, 0x28, 0xaf, 0x8d, 0xe8, + 0x32, 0xe8, 0xac, 0x8d, 0x96, 0x30, 0xff, 0xb4, 0xb5, 0xd7, 0xda, 0x33, 0x73, 0x71, 0xdb, 0xfc, 0xe4, 0xe4, 0xfe, + 0xf1, 0x03, 0xd6, 0xcd, 0xb9, 0x60, 0xb5, 0xa9, 0x7e, 0x17, 0xd4, 0x61, 0xc3, 0x1d, 0xd7, 0x70, 0x7b, 0xaf, 0xbd, + 0x77, 0xd2, 0xfa, 0xc1, 0xef, 0xd6, 0x9c, 0x8d, 0x75, 0xda, 0x3e, 0x9b, 0xdf, 0xd6, 0xb7, 0xef, 0xb9, 0x6f, 0xfa, + 0xa6, 0xa0, 0xf3, 0x54, 0x48, 0xf8, 0xd3, 0x85, 0x4d, 0x36, 0xce, 0xe5, 0x4d, 0x3a, 0xe5, 0xa3, 0x11, 0x13, 0xb6, + 0x40, 0x99, 0xc8, 0xf2, 0x9c, 0xcf, 0x15, 0xb7, 0xab, 0xe1, 0x70, 0xf7, 0x74, 0x03, 0xaa, 0xe1, 0x80, 0x8e, 0x83, + 0x01, 0x9d, 0x56, 0x03, 0xaa, 0xfa, 0x0f, 0x47, 0xd8, 0xd9, 0x98, 0xab, 0x29, 0xd5, 0xad, 0x61, 0xd2, 0xdf, 0x0b, + 0xa5, 0x01, 0xe6, 0xde, 0x48, 0xc3, 0x50, 0xf1, 0xe6, 0x90, 0xe9, 0x1b, 0xc6, 0xc4, 0xb7, 0x07, 0x71, 0x99, 0x4a, + 0x91, 0xdf, 0xd9, 0xcf, 0x65, 0xd8, 0x25, 0x5d, 0x68, 0xb9, 0x4e, 0x86, 0x5c, 0xd0, 0xe2, 0xee, 0x5a, 0x31, 0xa1, + 0x64, 0x71, 0x2d, 0xc7, 0xe3, 0xe5, 0xb7, 0x48, 0xcb, 0x7d, 0xb4, 0x4e, 0x14, 0x17, 0x93, 0x9c, 0x59, 0xa2, 0x64, + 0x10, 0xc1, 0x11, 0x73, 0xdb, 0xae, 0x69, 0xb2, 0x36, 0xe8, 0x70, 0xe7, 0x99, 0x76, 0x07, 0x69, 0xda, 0xbc, 0x61, + 0xc3, 0xcf, 0x5c, 0x5b, 0x3c, 0x6b, 0xaa, 0x1b, 0xf0, 0x78, 0x31, 0xcb, 0x30, 0x67, 0xc5, 0xd2, 0xd3, 0xf0, 0x56, + 0x8d, 0xea, 0x5c, 0x09, 0x73, 0x7a, 0x68, 0x3a, 0x6c, 0x42, 0xfc, 0x2f, 0x56, 0x94, 0x7b, 0x8c, 0x0b, 0x83, 0x31, + 0x06, 0x40, 0x9b, 0xbb, 0x24, 0x3c, 0x03, 0x4e, 0x5a, 0x2d, 0x7f, 0x3e, 0x34, 0x6d, 0x9d, 0xb4, 0x9d, 0x9c, 0xb2, + 0xd9, 0xae, 0xfd, 0x59, 0x27, 0x46, 0xed, 0xce, 0xfc, 0x76, 0xcf, 0xfc, 0xd3, 0xda, 0x6b, 0x6d, 0x13, 0x9f, 0x6d, + 0x38, 0x1d, 0x23, 0xbf, 0xb2, 0x5a, 0xce, 0xd3, 0x36, 0x9b, 0x75, 0x17, 0x0a, 0x0e, 0x1a, 0x43, 0x1b, 0xcd, 0x01, + 0xb6, 0x36, 0x33, 0x81, 0x75, 0xa4, 0x5c, 0x00, 0x5d, 0xb7, 0x67, 0x1b, 0xf4, 0xa1, 0x24, 0x18, 0x62, 0xef, 0x6c, + 0xb4, 0x3e, 0xac, 0xd6, 0x5e, 0x35, 0x30, 0xf8, 0x67, 0xfd, 0x57, 0xc5, 0x19, 0xbe, 0x60, 0x01, 0x67, 0xce, 0x1b, + 0xc9, 0xe9, 0xaa, 0xe5, 0xb8, 0xf1, 0x91, 0xae, 0x84, 0x04, 0xe3, 0xcb, 0x30, 0xa3, 0xb7, 0xd6, 0xa9, 0x61, 0xc6, + 0x05, 0x98, 0x4c, 0x21, 0xac, 0x03, 0xe3, 0xf2, 0x69, 0xd8, 0xd0, 0x48, 0xc7, 0xd0, 0xf0, 0x61, 0x27, 0x39, 0x3d, + 0x45, 0xb8, 0x85, 0x3b, 0xa7, 0xa7, 0x81, 0x34, 0x30, 0xd6, 0xbb, 0x8a, 0xee, 0x2a, 0xa9, 0x76, 0x94, 0x3c, 0x32, + 0x8d, 0x1e, 0xb5, 0x5b, 0x2d, 0x6c, 0x1c, 0xb7, 0xcb, 0xc2, 0x5c, 0xed, 0x68, 0xb6, 0xdd, 0x6a, 0x41, 0xb3, 0xf0, + 0xc7, 0xcd, 0xeb, 0x17, 0xb2, 0x6c, 0xa5, 0x2d, 0xdc, 0x4e, 0xdb, 0xb8, 0x93, 0x76, 0xf0, 0x71, 0x7a, 0x8c, 0x4f, + 0xd2, 0x13, 0x7c, 0x9a, 0x9e, 0xe2, 0xb3, 0xf4, 0x0c, 0xdf, 0x4f, 0xef, 0xe3, 0xf3, 0xf4, 0x1c, 0x3f, 0x48, 0x1f, + 0xe0, 0x87, 0x69, 0xbb, 0x85, 0x1f, 0xa5, 0xed, 0x36, 0x7e, 0x9c, 0xb6, 0x3b, 0xf8, 0x49, 0xda, 0x3e, 0xc6, 0x4f, + 0xd3, 0xf6, 0x09, 0x7e, 0x96, 0xb6, 0x4f, 0x31, 0x85, 0xdc, 0x21, 0xe4, 0x66, 0x90, 0x3b, 0x82, 0x5c, 0x06, 0xb9, + 0xe3, 0xb4, 0x7d, 0xba, 0xc6, 0xca, 0x06, 0x7b, 0x88, 0x5a, 0xed, 0xce, 0xf1, 0xc9, 0xe9, 0xd9, 0xfd, 0xf3, 0x07, + 0x0f, 0x1f, 0x3d, 0x7e, 0xf2, 0xf4, 0x59, 0x34, 0xc0, 0x43, 0xe3, 0x73, 0xa1, 0x44, 0x9f, 0x1f, 0xb4, 0x4f, 0x07, + 0xf8, 0xda, 0x7f, 0xc6, 0xfc, 0xa0, 0x73, 0xd2, 0x42, 0x97, 0x97, 0x27, 0x83, 0x46, 0x99, 0xfb, 0xde, 0xb8, 0x7a, + 0x54, 0x59, 0x84, 0x90, 0x18, 0x72, 0x10, 0xbe, 0x33, 0xf5, 0xde, 0xb3, 0x98, 0x27, 0x05, 0x3a, 0x38, 0x30, 0x3f, + 0x26, 0xfe, 0xc7, 0xd0, 0xff, 0xa0, 0xc1, 0x22, 0xdd, 0xd2, 0xd8, 0xf9, 0xfa, 0xea, 0xd2, 0xd2, 0xbe, 0x34, 0x62, + 0xd9, 0xe3, 0xce, 0x9c, 0xfc, 0xbf, 0x22, 0x6b, 0x2e, 0x42, 0x4e, 0xac, 0x4a, 0xe6, 0xb4, 0xc7, 0xc8, 0xb2, 0x48, + 0x3b, 0xa7, 0xa7, 0x07, 0xbf, 0xf4, 0x79, 0xbf, 0x3d, 0x18, 0x1c, 0xb6, 0xef, 0xe3, 0x49, 0x99, 0xd0, 0xb1, 0x09, + 0xc3, 0x32, 0xe1, 0xd8, 0x26, 0xd0, 0xd4, 0xd6, 0x86, 0xa4, 0x13, 0x93, 0x04, 0x25, 0xd6, 0xa9, 0x69, 0xfb, 0xbe, + 0x6d, 0xfb, 0x01, 0xd8, 0x31, 0x99, 0xe6, 0x5d, 0xd3, 0x17, 0x17, 0x27, 0x2b, 0xd7, 0x28, 0x9e, 0xa4, 0xae, 0x35, + 0x9f, 0x78, 0x32, 0x18, 0xe0, 0xa1, 0x49, 0x3c, 0xad, 0x12, 0xcf, 0x06, 0x03, 0xd7, 0xd5, 0x03, 0xd3, 0xd5, 0xfd, + 0x2a, 0xeb, 0x7c, 0x30, 0x30, 0x5d, 0x22, 0xe7, 0xb5, 0xae, 0xf4, 0xde, 0x97, 0x52, 0x73, 0xc0, 0x2f, 0x3a, 0xa7, + 0xa7, 0x3d, 0xc0, 0x30, 0x63, 0x8d, 0xea, 0x61, 0x74, 0x13, 0xc0, 0xe8, 0x0e, 0x7e, 0xf7, 0x86, 0x34, 0xbd, 0xa6, + 0x25, 0x90, 0x7a, 0xd1, 0x7f, 0x45, 0x0d, 0x6d, 0x60, 0x6e, 0xfe, 0x4c, 0xec, 0x9f, 0x21, 0x6a, 0x7c, 0xa1, 0x00, + 0x6e, 0xd0, 0x85, 0x78, 0x65, 0xa6, 0xe9, 0xf1, 0x33, 0x05, 0xe7, 0x92, 0xa9, 0xca, 0x69, 0x6f, 0x35, 0xbd, 0x19, + 0xae, 0xa6, 0xea, 0x0b, 0xfa, 0x33, 0xfe, 0x53, 0x1d, 0xc6, 0xfd, 0x66, 0x23, 0x61, 0x7f, 0x8e, 0xc0, 0x8b, 0xa5, + 0x97, 0x8e, 0xd8, 0x04, 0xf5, 0xfa, 0x7f, 0x2a, 0x3c, 0x68, 0x04, 0x19, 0x3f, 0x6c, 0xa7, 0x80, 0x8f, 0xcb, 0x66, + 0x62, 0xfc, 0x03, 0xea, 0xa1, 0xde, 0x9f, 0xea, 0xf0, 0x4f, 0x74, 0xef, 0xa8, 0x9a, 0xcb, 0xef, 0xd2, 0x6d, 0xe1, + 0x2a, 0xf0, 0xcd, 0x61, 0xb9, 0x85, 0x19, 0x6e, 0x37, 0x19, 0x84, 0x09, 0x03, 0x27, 0x68, 0x12, 0xcb, 0x06, 0x3f, + 0x3a, 0x6e, 0xa1, 0x1f, 0xda, 0x1d, 0x10, 0xeb, 0x9b, 0xe2, 0x70, 0x7b, 0xd3, 0x17, 0xcd, 0x63, 0xfc, 0xa0, 0x59, + 0xe0, 0x36, 0xc2, 0xcd, 0xb6, 0xd7, 0xb7, 0xf6, 0x55, 0xdc, 0x42, 0x58, 0xc5, 0xe7, 0xf0, 0xcf, 0x09, 0x1a, 0x54, + 0x1b, 0xf2, 0x8a, 0x6e, 0xf6, 0x0e, 0x1e, 0x9b, 0x24, 0x56, 0x0d, 0x7e, 0x74, 0xd6, 0x42, 0x3f, 0x9c, 0x99, 0x8e, + 0xd8, 0xa1, 0xde, 0xd1, 0x95, 0xc4, 0x27, 0x4d, 0x09, 0x1d, 0xb5, 0xca, 0x7e, 0x44, 0x7c, 0x8a, 0xb0, 0x88, 0x8f, + 0xe1, 0x9f, 0x76, 0xd8, 0xcf, 0xaf, 0x5b, 0xfd, 0x98, 0x79, 0xb7, 0x71, 0x72, 0x6a, 0x1d, 0x40, 0x95, 0xbd, 0x8d, + 0x6d, 0xb0, 0xcb, 0xb6, 0xb9, 0x46, 0x6a, 0x1f, 0xc1, 0x07, 0xc2, 0xfa, 0x90, 0x28, 0xcc, 0x0e, 0xc1, 0x73, 0x14, + 0x0c, 0x26, 0xd4, 0xc5, 0x71, 0x57, 0x35, 0x1a, 0x48, 0xf4, 0xd5, 0xe0, 0x90, 0xb4, 0x9b, 0xba, 0xc9, 0x30, 0xfc, + 0x6e, 0x90, 0x32, 0x1c, 0x99, 0xa8, 0x7a, 0x7d, 0xec, 0x7a, 0xb5, 0x77, 0xce, 0x1e, 0x3b, 0x08, 0x21, 0xaa, 0x17, + 0xeb, 0x26, 0x43, 0x47, 0xa2, 0x11, 0xeb, 0x0b, 0xd6, 0x3b, 0x4b, 0x5b, 0xc8, 0x60, 0xa7, 0xea, 0xc5, 0xac, 0xc9, + 0x21, 0xbd, 0x93, 0xc6, 0xbc, 0xa9, 0xe1, 0xd7, 0x49, 0x30, 0x0b, 0x01, 0x78, 0x57, 0xf9, 0xc1, 0x14, 0x47, 0x9d, + 0xd3, 0x53, 0x2c, 0x08, 0x4f, 0x26, 0xe6, 0x97, 0x22, 0x3c, 0x19, 0x9a, 0x5f, 0x92, 0x94, 0xf0, 0xb2, 0xbd, 0xe3, + 0x82, 0x04, 0xab, 0x6a, 0x52, 0x28, 0x2c, 0x68, 0x81, 0x8e, 0x3a, 0xfe, 0x42, 0x1a, 0x4f, 0xfd, 0x1c, 0x40, 0x00, + 0x2f, 0x8c, 0x2d, 0xa2, 0x6c, 0x16, 0x38, 0x27, 0xf4, 0x32, 0x39, 0xed, 0x4d, 0x8f, 0xe2, 0x4e, 0x53, 0x36, 0x0b, + 0x94, 0x4e, 0x8f, 0x4c, 0x4d, 0x9c, 0x91, 0xc7, 0xd4, 0xb6, 0x86, 0xa7, 0x70, 0x8b, 0x98, 0x91, 0xec, 0xf0, 0xac, + 0xd5, 0x48, 0x4e, 0x11, 0xee, 0x67, 0xab, 0x16, 0xce, 0x57, 0xab, 0x16, 0xa6, 0xc1, 0x32, 0x3c, 0x16, 0x1e, 0x20, + 0xa5, 0x8e, 0x68, 0x33, 0x2a, 0x4c, 0x8f, 0xc7, 0x1a, 0x6e, 0xc4, 0x35, 0xf8, 0x99, 0x68, 0xf0, 0x80, 0x49, 0xb9, + 0xbb, 0x8a, 0x42, 0x26, 0x2e, 0xde, 0x38, 0xd4, 0x1a, 0xbd, 0x16, 0x7e, 0x5d, 0xbd, 0x4d, 0xa3, 0x88, 0x7f, 0x97, + 0xd8, 0xa6, 0x05, 0xc5, 0xe8, 0x76, 0xb1, 0x5f, 0xe9, 0x56, 0xb1, 0x37, 0x3b, 0x8a, 0x5d, 0x6d, 0x17, 0xfb, 0x28, + 0x03, 0x1d, 0x17, 0xff, 0xe1, 0xf8, 0xac, 0xd5, 0x38, 0x06, 0x64, 0x3d, 0x3e, 0x6b, 0x55, 0x85, 0xee, 0xd1, 0x6a, + 0xad, 0x34, 0xf9, 0x4c, 0xad, 0x95, 0x3f, 0xf7, 0xee, 0xc6, 0x66, 0xe1, 0xac, 0xb3, 0x73, 0xe9, 0xd9, 0xdc, 0x3f, + 0x05, 0x2b, 0x0a, 0x61, 0xa8, 0x9d, 0xee, 0x9f, 0x0d, 0x7a, 0x53, 0x16, 0x37, 0x20, 0x15, 0xa5, 0x63, 0xed, 0x7e, + 0xa1, 0xf2, 0x32, 0xf5, 0xa3, 0x84, 0xa4, 0xce, 0x00, 0x61, 0x49, 0x1a, 0xba, 0x7f, 0x3c, 0x30, 0xe7, 0x5d, 0x01, + 0xbf, 0x4f, 0xcc, 0xef, 0x52, 0x95, 0xe1, 0x5c, 0x01, 0xa6, 0x37, 0xc3, 0xa8, 0x27, 0xc8, 0x6b, 0x1a, 0x1b, 0xeb, + 0x6e, 0x94, 0x96, 0x19, 0xea, 0x0b, 0x64, 0xbc, 0x29, 0x33, 0x04, 0x79, 0x2d, 0xdc, 0x6f, 0xbc, 0x2c, 0x52, 0xb0, + 0xf4, 0xc0, 0x93, 0x14, 0xac, 0x3c, 0xf0, 0x30, 0x15, 0xe0, 0x89, 0x40, 0x53, 0x16, 0xd8, 0x8f, 0x3f, 0x74, 0xba, + 0x23, 0x73, 0xdf, 0x49, 0x0c, 0x96, 0x76, 0x19, 0x9c, 0x14, 0x1f, 0x65, 0x0c, 0x7f, 0x1b, 0x1a, 0x61, 0x06, 0x6d, + 0x32, 0x84, 0x79, 0x52, 0x10, 0x48, 0xc3, 0x3c, 0x99, 0x10, 0x06, 0x4d, 0xf2, 0x64, 0x48, 0x58, 0xbf, 0x13, 0xa0, + 0xc9, 0x53, 0x03, 0x3b, 0x00, 0x0e, 0xaf, 0x5f, 0x21, 0x6b, 0xdb, 0x38, 0xdc, 0x4d, 0x43, 0x13, 0x82, 0x70, 0x15, + 0xc3, 0x2c, 0x60, 0x73, 0x9a, 0x9f, 0x9d, 0x2a, 0xf0, 0x22, 0x4f, 0xa8, 0xa1, 0xde, 0x7f, 0x01, 0x59, 0x8d, 0xef, + 0x2d, 0xd9, 0x1a, 0xef, 0xdd, 0x5b, 0x8a, 0xf5, 0x0f, 0xf0, 0x47, 0xb9, 0x3f, 0xda, 0x9c, 0x7e, 0x6b, 0xf4, 0x57, + 0x0a, 0xc5, 0x76, 0x94, 0x42, 0x7f, 0x79, 0x47, 0x34, 0x45, 0x96, 0xb7, 0x69, 0x34, 0xa2, 0xc5, 0xe7, 0x08, 0x7f, + 0x4a, 0xa3, 0x1c, 0x18, 0xc1, 0x08, 0x7f, 0x4c, 0xa3, 0x82, 0x45, 0xf8, 0x8f, 0x34, 0x1a, 0xe6, 0x8b, 0x08, 0x7f, + 0x48, 0xa3, 0x49, 0x11, 0xe1, 0xf7, 0xa0, 0x26, 0x1c, 0xf1, 0xc5, 0x2c, 0xc2, 0xbf, 0xa7, 0x91, 0x32, 0x76, 0xf8, + 0xf8, 0x61, 0x1a, 0x31, 0x16, 0xe1, 0x77, 0x69, 0x24, 0xf3, 0x08, 0x5f, 0xa5, 0x91, 0x2c, 0x22, 0xfc, 0x28, 0x8d, + 0x0a, 0x1a, 0xe1, 0xc7, 0x69, 0x04, 0x85, 0x26, 0x11, 0x7e, 0x92, 0x46, 0xd0, 0xb2, 0x8a, 0xf0, 0xdb, 0x34, 0xe2, + 0x22, 0xc2, 0xbf, 0xa5, 0x91, 0x5e, 0x14, 0xff, 0x2c, 0x24, 0x57, 0x11, 0x7e, 0x9a, 0x46, 0x53, 0x1e, 0xe1, 0x37, + 0x69, 0x54, 0xc8, 0x08, 0xbf, 0x4e, 0x23, 0x9a, 0x47, 0xf8, 0x55, 0x1a, 0xe5, 0x2c, 0xc2, 0xbf, 0xa6, 0xd1, 0x88, + 0x45, 0xf8, 0x65, 0x1a, 0xdd, 0xb1, 0x3c, 0x97, 0x11, 0x7e, 0x96, 0x46, 0x4c, 0x44, 0xf8, 0x97, 0x34, 0xca, 0xa6, + 0x11, 0xfe, 0x29, 0x8d, 0x68, 0xf1, 0x59, 0x45, 0xf8, 0x79, 0x1a, 0x31, 0x1a, 0xe1, 0x17, 0xb6, 0xa3, 0x49, 0x84, + 0x7f, 0x4e, 0xa3, 0x9b, 0x69, 0xb4, 0xc6, 0x4a, 0x91, 0xe5, 0x6b, 0x9e, 0xb1, 0x3f, 0x58, 0x1a, 0x8d, 0x5b, 0xe3, + 0xf3, 0xf1, 0x38, 0xc2, 0x54, 0x68, 0xfe, 0xcf, 0x82, 0xdd, 0x3c, 0xd5, 0x90, 0x48, 0xd9, 0x70, 0x74, 0x3f, 0xc2, + 0xf4, 0x9f, 0x05, 0x4d, 0xa3, 0xf1, 0xd8, 0x14, 0xf8, 0x67, 0x41, 0x67, 0xb4, 0x78, 0xcb, 0xd2, 0xe8, 0xfe, 0x78, + 0x3c, 0x1e, 0x9d, 0x44, 0x98, 0x7e, 0x5d, 0x7c, 0x34, 0x2d, 0x98, 0x02, 0x43, 0xc6, 0x27, 0x50, 0xf7, 0x74, 0x7c, + 0x3a, 0xca, 0x22, 0x3c, 0xe4, 0xea, 0x9f, 0x05, 0x7c, 0x8f, 0xd9, 0x49, 0x76, 0x12, 0xe1, 0x61, 0x4e, 0xb3, 0xcf, + 0x69, 0xd4, 0x32, 0xbf, 0xc4, 0x2f, 0x6c, 0xf4, 0x7a, 0x26, 0x8d, 0x12, 0x7d, 0xcc, 0x86, 0xd9, 0x28, 0xc2, 0x66, + 0x30, 0x63, 0xf8, 0xfb, 0x85, 0xbf, 0x63, 0x3a, 0x8d, 0xce, 0x69, 0x67, 0xc8, 0x3a, 0x11, 0x1e, 0xbe, 0xb9, 0x11, + 0x69, 0x44, 0x4f, 0x3b, 0xb4, 0x43, 0x23, 0x3c, 0x5c, 0x14, 0xf9, 0xdd, 0x8d, 0x94, 0x23, 0x00, 0xc2, 0xf0, 0xfc, + 0xfc, 0x7e, 0x84, 0x33, 0xfa, 0xab, 0x86, 0xda, 0xa7, 0xe3, 0x07, 0x8c, 0xb6, 0x22, 0xfc, 0x0b, 0x2d, 0xf4, 0xc7, + 0x85, 0x72, 0x03, 0x6d, 0x41, 0x8a, 0xcc, 0xde, 0x81, 0x82, 0x39, 0x1a, 0x75, 0xce, 0x1e, 0xb4, 0x59, 0x84, 0xb3, + 0xab, 0xd7, 0xd0, 0xdb, 0xfd, 0xf1, 0x69, 0x0b, 0x3e, 0x04, 0x48, 0x6a, 0xac, 0x80, 0x46, 0xce, 0x4e, 0x1e, 0x9c, + 0xb2, 0x91, 0x49, 0x54, 0x3c, 0xff, 0x6c, 0x66, 0x7f, 0x0e, 0xf3, 0xc9, 0x0a, 0x3e, 0x53, 0x52, 0xa4, 0xd1, 0x28, + 0x6b, 0x9f, 0x1c, 0x43, 0xc2, 0x1d, 0x15, 0x1e, 0x38, 0xb7, 0x50, 0xf5, 0x7c, 0x18, 0xe1, 0x5b, 0x9b, 0x7a, 0x3e, + 0x34, 0x1f, 0x93, 0x77, 0xbf, 0x8a, 0x37, 0xa3, 0x34, 0x1a, 0x9e, 0x9f, 0x9f, 0xb5, 0x20, 0xe1, 0x03, 0xbd, 0x4b, + 0x23, 0xfa, 0x00, 0xfe, 0x83, 0xec, 0x8f, 0xcf, 0xa0, 0x43, 0x18, 0xe1, 0xed, 0xe4, 0x63, 0x98, 0xf3, 0x79, 0x4a, + 0x3f, 0xf3, 0x34, 0x1a, 0x8e, 0x86, 0xf7, 0xcf, 0xa0, 0xde, 0x8c, 0x4e, 0x9e, 0x69, 0x0a, 0xed, 0xb6, 0x5a, 0xa6, + 0xe5, 0x77, 0xfc, 0x0b, 0x33, 0xd5, 0x4f, 0x4f, 0xcf, 0x86, 0x1d, 0x18, 0xc1, 0x15, 0xa8, 0x18, 0x60, 0x3c, 0xe7, + 0x99, 0x69, 0xf0, 0x2a, 0x7b, 0x3a, 0x4a, 0xa3, 0x07, 0x0f, 0x8e, 0x3b, 0x59, 0x16, 0xe1, 0xdb, 0x8f, 0x23, 0x5b, + 0xdb, 0xe4, 0x29, 0x80, 0x7d, 0x1a, 0xb1, 0x07, 0x0f, 0xce, 0xee, 0x53, 0xf8, 0x7e, 0x6e, 0xda, 0x3a, 0x1f, 0x0f, + 0xb3, 0x73, 0x68, 0xeb, 0x77, 0x98, 0xce, 0xc9, 0xf9, 0xf1, 0xc8, 0xf4, 0xf5, 0xbb, 0x19, 0x75, 0x67, 0x7c, 0x32, + 0x3e, 0x31, 0x99, 0x66, 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x8d, 0x32, 0x36, 0x6a, 0x47, 0xf8, 0xd6, 0x2d, 0xdc, 0x83, + 0x93, 0x56, 0x6b, 0x74, 0x1c, 0xe1, 0xd1, 0xc3, 0xf9, 0xfc, 0xad, 0x81, 0x60, 0xfb, 0xe4, 0x81, 0xfd, 0x56, 0x9f, + 0xef, 0xa0, 0xe9, 0xa1, 0x01, 0xda, 0x88, 0xcf, 0x4c, 0xcb, 0x67, 0x0f, 0xe0, 0x3f, 0xf3, 0x6d, 0x9a, 0x2e, 0xbf, + 0xe5, 0x68, 0x62, 0x17, 0xa5, 0xcd, 0x1e, 0xb4, 0xa0, 0xc6, 0x98, 0x7f, 0x1c, 0x16, 0x1c, 0xd0, 0x68, 0xd8, 0x81, + 0xff, 0x8b, 0xf0, 0x38, 0xbf, 0x7a, 0xed, 0x70, 0x76, 0x3c, 0xa6, 0xe3, 0x56, 0x84, 0xc7, 0xf2, 0xa3, 0xd2, 0x1f, + 0x1e, 0x8a, 0x34, 0xea, 0x74, 0xce, 0x87, 0xa6, 0xcc, 0xe2, 0x17, 0xc5, 0x0d, 0x1e, 0xb7, 0x4c, 0x2b, 0x13, 0xfa, + 0x56, 0x0d, 0xaf, 0x24, 0xac, 0x24, 0xfc, 0x17, 0xe1, 0x09, 0xe8, 0xa5, 0x5c, 0x2b, 0xe7, 0x76, 0x3b, 0x4c, 0xde, + 0x19, 0xd4, 0x1c, 0xdd, 0x07, 0x78, 0xf9, 0x65, 0x1c, 0x51, 0x7a, 0xda, 0x69, 0x45, 0xd8, 0x8c, 0xfa, 0xbc, 0x05, + 0xff, 0x45, 0xd8, 0x42, 0xce, 0xc0, 0x75, 0xf2, 0xf1, 0xd9, 0xcb, 0x9b, 0x34, 0xa2, 0xa3, 0xf1, 0x18, 0x96, 0xc4, + 0x4c, 0xc6, 0x17, 0x9b, 0x4a, 0xc1, 0xee, 0x7e, 0xbd, 0x71, 0xdb, 0xc5, 0x24, 0x68, 0x07, 0x9d, 0xb3, 0x07, 0xc3, + 0x93, 0x08, 0xbf, 0x1d, 0x71, 0x2a, 0x60, 0x95, 0xb2, 0xd1, 0x69, 0x76, 0x9a, 0x99, 0x84, 0x89, 0x4c, 0xa3, 0x13, + 0x58, 0xf2, 0x4e, 0x84, 0xf9, 0x97, 0xab, 0x3b, 0x8b, 0x6e, 0x50, 0xdb, 0x21, 0xc8, 0xb8, 0xc5, 0xce, 0xce, 0xb3, + 0x08, 0xe7, 0xf4, 0xcb, 0xb3, 0x5f, 0x8b, 0x34, 0x62, 0x67, 0xec, 0x6c, 0x4c, 0xfd, 0xf7, 0x1f, 0x6a, 0x6a, 0x6a, + 0xb4, 0xc6, 0xa7, 0x90, 0x74, 0x23, 0xcc, 0x58, 0xef, 0x67, 0x63, 0x83, 0x21, 0xaf, 0x66, 0x52, 0x64, 0x4f, 0xc7, + 0x63, 0x69, 0xb1, 0x98, 0xc2, 0x26, 0xfc, 0x04, 0xd0, 0xa6, 0xa3, 0xd1, 0x39, 0x3b, 0x8b, 0xf0, 0x27, 0xbb, 0x4b, + 0xdc, 0x04, 0x3e, 0x59, 0xcc, 0x66, 0x6e, 0xb7, 0x7f, 0xb2, 0x40, 0x81, 0xf9, 0x8e, 0xe9, 0x98, 0x8e, 0x3a, 0x11, + 0xfe, 0x64, 0xe0, 0x32, 0x3a, 0x86, 0xff, 0xa0, 0x00, 0x74, 0xf6, 0xa0, 0xc5, 0xd8, 0x83, 0x96, 0xf9, 0x0a, 0xf3, + 0xdc, 0xcc, 0x87, 0x67, 0x59, 0x3b, 0xc2, 0x9f, 0x1c, 0x3a, 0x8e, 0xc7, 0xb4, 0x05, 0xe8, 0xf8, 0xc9, 0xa1, 0x63, + 0xa7, 0x35, 0xec, 0x50, 0xf3, 0x6d, 0xb1, 0xe6, 0xfc, 0x7e, 0xc6, 0x60, 0x72, 0x9f, 0x2c, 0x42, 0xde, 0xbf, 0x7f, + 0x7e, 0xfe, 0xe0, 0x01, 0x7c, 0x9a, 0xb6, 0xcb, 0x4f, 0xa5, 0x1f, 0xe6, 0x06, 0xc9, 0x5a, 0xd9, 0x09, 0xd0, 0xc9, + 0x4f, 0x66, 0x8c, 0xe3, 0xf1, 0x98, 0xb5, 0x22, 0x9c, 0xf3, 0x19, 0xb3, 0x98, 0x60, 0x7f, 0x9b, 0x8e, 0x8e, 0x3b, + 0xd9, 0xe8, 0xb8, 0x13, 0xe1, 0xfc, 0xed, 0x33, 0x33, 0x9b, 0x16, 0xcc, 0xde, 0x6f, 0x39, 0x8f, 0x35, 0x33, 0xfa, + 0x06, 0x06, 0x09, 0x2b, 0x0d, 0x95, 0xdf, 0x07, 0xf4, 0xf0, 0xec, 0x2c, 0x1b, 0xc1, 0x40, 0xdf, 0x43, 0xb7, 0x00, + 0xc6, 0xf7, 0x76, 0xf3, 0x0d, 0xe9, 0xe9, 0x29, 0x4c, 0xf7, 0xfd, 0x7c, 0x51, 0xcc, 0x5f, 0xa5, 0xd1, 0x83, 0xe3, + 0xfb, 0xad, 0xd1, 0x30, 0xc2, 0xef, 0xdd, 0x04, 0x8f, 0xb3, 0xe1, 0xf1, 0xfd, 0x76, 0x84, 0xdf, 0x9b, 0xfd, 0x76, + 0x7f, 0x78, 0x76, 0x0e, 0xe7, 0xc6, 0x7b, 0x35, 0x2f, 0xde, 0x4e, 0x4c, 0x81, 0x31, 0x7d, 0x00, 0xcd, 0xfe, 0x66, + 0x76, 0xe3, 0xa8, 0x0d, 0x1b, 0xf9, 0xbd, 0xd9, 0x64, 0x06, 0x4f, 0xee, 0xb7, 0x4f, 0xcf, 0x4f, 0x23, 0x3c, 0xe3, + 0x23, 0x01, 0x04, 0xde, 0x6c, 0x94, 0x07, 0xed, 0x07, 0xf7, 0x5b, 0x11, 0x9e, 0xbd, 0xd5, 0xd9, 0x47, 0x3a, 0x33, + 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa5, 0xef, 0xde, 0x28, 0x47, 0x8f, 0x59, 0x3b, 0xc2, 0x33, 0x99, 0x65, 0x54, + 0xbd, 0xb5, 0x09, 0xc3, 0xd3, 0x08, 0x0b, 0xfa, 0x85, 0xfe, 0x2d, 0xfd, 0x66, 0x1a, 0x31, 0x3a, 0x32, 0x69, 0x06, + 0x87, 0x23, 0xfc, 0x6e, 0x04, 0xd7, 0x60, 0x69, 0x34, 0x1e, 0x8d, 0x4f, 0x01, 0x3c, 0x40, 0x80, 0x2c, 0x76, 0x03, + 0x34, 0xe0, 0x6b, 0xf4, 0x68, 0x98, 0x46, 0x67, 0xc3, 0x73, 0xd6, 0x39, 0x8e, 0x70, 0x49, 0x8d, 0xe8, 0x29, 0xe4, + 0x9b, 0xcf, 0x8f, 0x66, 0x4b, 0x9d, 0xd8, 0x04, 0x03, 0xa0, 0x11, 0xbd, 0xdf, 0x1a, 0x9d, 0x45, 0x78, 0xfe, 0x9a, + 0xf9, 0x3d, 0xc6, 0x18, 0x3b, 0x07, 0x58, 0x42, 0x92, 0x41, 0xa0, 0xf3, 0xf1, 0xf0, 0xc1, 0xb9, 0xf9, 0x06, 0x30, + 0xd0, 0x31, 0x63, 0x00, 0xa4, 0xf9, 0x6b, 0x56, 0x02, 0x62, 0x34, 0xbc, 0xdf, 0x02, 0xfa, 0x32, 0xa7, 0x73, 0x7a, + 0x47, 0x6f, 0x9e, 0xce, 0xcd, 0x9c, 0xc6, 0xa3, 0xd3, 0x08, 0xcf, 0x9f, 0xff, 0x32, 0x5f, 0x8c, 0xc7, 0x66, 0x42, + 0x74, 0xf8, 0x20, 0xc2, 0x73, 0x56, 0x2c, 0x60, 0x8d, 0xce, 0x4f, 0x8f, 0xc7, 0x11, 0x76, 0x68, 0x98, 0xb5, 0xb2, + 0x21, 0xdc, 0xf3, 0x2d, 0x66, 0x69, 0x34, 0x1a, 0xd1, 0xd6, 0x08, 0x6e, 0xfd, 0xe4, 0xcd, 0xaf, 0x85, 0x45, 0x23, + 0x66, 0xf0, 0xc1, 0xad, 0x21, 0xcc, 0x17, 0xe0, 0xf1, 0x71, 0xc8, 0xb2, 0x8c, 0xba, 0xc4, 0xb3, 0xb3, 0xe3, 0x63, + 0xc0, 0x3d, 0x3b, 0x43, 0x8b, 0x20, 0x6f, 0xd4, 0xdd, 0xb0, 0x90, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, + 0xee, 0xb5, 0xa1, 0xab, 0xed, 0xb3, 0x07, 0xb0, 0x00, 0x8a, 0x8e, 0x46, 0xaf, 0xec, 0xe1, 0x76, 0x3e, 0x3c, 0x39, + 0x6d, 0x1f, 0x47, 0xd8, 0x6f, 0x04, 0x7a, 0xde, 0xba, 0xdf, 0x81, 0x12, 0x62, 0x74, 0x67, 0x4b, 0x8c, 0x4f, 0xe8, + 0xc9, 0x59, 0x2b, 0xc2, 0x7e, 0x6b, 0xb0, 0xf3, 0xe1, 0xe9, 0x7d, 0xf8, 0x54, 0x53, 0x96, 0xe7, 0x06, 0xbf, 0x4f, + 0x01, 0x2e, 0x8a, 0x3f, 0x13, 0x34, 0x8d, 0x68, 0xeb, 0xb4, 0xd3, 0x19, 0xc1, 0x67, 0xfe, 0x85, 0x15, 0x69, 0x94, + 0xb5, 0xe0, 0xbf, 0x08, 0x07, 0x3b, 0x89, 0x0d, 0x23, 0x6c, 0xf0, 0xee, 0x8c, 0x9e, 0x9a, 0xbd, 0xef, 0x76, 0x55, + 0xeb, 0xbc, 0x05, 0x1b, 0xd6, 0x6d, 0x2a, 0xf7, 0xa5, 0x84, 0xbc, 0x71, 0x24, 0x96, 0x46, 0x38, 0x40, 0xd0, 0xf1, + 0xfd, 0x71, 0x84, 0xfd, 0x8e, 0x3b, 0x39, 0x3b, 0xef, 0x00, 0x29, 0xd3, 0x40, 0x28, 0x46, 0x9d, 0xe1, 0x09, 0x90, + 0x26, 0xcd, 0x5e, 0x5b, 0x3c, 0x89, 0xb0, 0x7e, 0xaa, 0xf4, 0xab, 0x34, 0x1a, 0x9d, 0x0f, 0xc7, 0xa3, 0xf3, 0x08, + 0x6b, 0x39, 0xa3, 0x5a, 0x1a, 0x0a, 0x78, 0x7c, 0x72, 0x3f, 0xc2, 0x06, 0xcd, 0x5b, 0xac, 0x35, 0x6a, 0x45, 0xd8, + 0x1d, 0x25, 0x8c, 0x9d, 0x77, 0x60, 0x5a, 0x3f, 0x3f, 0xd7, 0x80, 0xcb, 0x23, 0x36, 0x3c, 0x8e, 0x70, 0x49, 0xef, + 0x0d, 0x21, 0x82, 0x2f, 0x35, 0x93, 0x9f, 0x1d, 0xeb, 0x01, 0xa4, 0xce, 0x6f, 0x78, 0x58, 0x86, 0x97, 0x37, 0x16, + 0x8d, 0xa8, 0xd9, 0xe2, 0xc1, 0x3d, 0xe8, 0x13, 0x1a, 0x7b, 0xb6, 0x9d, 0x93, 0xe5, 0x1a, 0x97, 0xe1, 0x45, 0x3f, + 0xb3, 0x3b, 0x15, 0x2b, 0x65, 0x38, 0xd9, 0x20, 0x05, 0x5c, 0x00, 0x9c, 0x41, 0xbd, 0xf3, 0x99, 0x04, 0x41, 0x52, + 0x90, 0x56, 0x57, 0x5c, 0x78, 0x3f, 0xce, 0xae, 0x80, 0xa0, 0x03, 0x90, 0x5e, 0x10, 0x4a, 0x34, 0xc4, 0x66, 0xb1, + 0xc2, 0xa4, 0x37, 0x6f, 0x37, 0x32, 0xa5, 0xb4, 0x06, 0xf3, 0x94, 0x50, 0x1f, 0x95, 0x1d, 0x2e, 0x69, 0x21, 0x6e, + 0x11, 0xea, 0x4a, 0x62, 0x62, 0x2c, 0xbf, 0x10, 0x3a, 0x56, 0xaa, 0x5f, 0x0c, 0x70, 0xfb, 0x0c, 0x61, 0x88, 0x5e, + 0x40, 0xfa, 0xf2, 0xf2, 0xb2, 0x7d, 0x76, 0x60, 0x84, 0xbe, 0xcb, 0xcb, 0x73, 0xfb, 0x03, 0xfe, 0x1d, 0x54, 0x11, + 0xa3, 0x61, 0x7c, 0x8f, 0x58, 0xa0, 0xd1, 0x33, 0xfc, 0xf5, 0x23, 0xb6, 0x5a, 0xc5, 0x8f, 0x18, 0x81, 0x19, 0xe3, + 0x47, 0x2c, 0x31, 0xb7, 0x06, 0xd6, 0x37, 0x85, 0xf4, 0x41, 0x73, 0xd6, 0xc2, 0x10, 0xc7, 0xdc, 0x73, 0xde, 0x8f, + 0x58, 0x9f, 0xd7, 0xfd, 0x9a, 0xab, 0xe0, 0xc1, 0x07, 0x07, 0xcb, 0x22, 0xd5, 0x56, 0x4c, 0xd0, 0x56, 0x4c, 0xd0, + 0x56, 0x4c, 0xd0, 0x55, 0xf8, 0xf6, 0x93, 0x1e, 0x48, 0x29, 0x46, 0xd9, 0xe2, 0x78, 0xea, 0x77, 0xa0, 0xf6, 0x00, + 0xed, 0x64, 0xaf, 0x52, 0x76, 0x94, 0xba, 0x8a, 0x9d, 0x0a, 0x8c, 0x9d, 0x89, 0x4e, 0xdb, 0x71, 0xf4, 0xef, 0xa8, + 0x3b, 0x5e, 0xd6, 0xc4, 0xb2, 0x77, 0x3b, 0xc5, 0x32, 0x58, 0x49, 0x23, 0x9a, 0xed, 0xdb, 0x48, 0x18, 0xba, 0x7f, + 0xdf, 0x08, 0x66, 0x55, 0x78, 0xb6, 0x06, 0x24, 0x75, 0x41, 0x0a, 0x39, 0x37, 0x52, 0x5a, 0x81, 0xd2, 0x91, 0x8e, + 0x0b, 0xd0, 0x50, 0x7a, 0x05, 0x65, 0x19, 0x45, 0xb4, 0x61, 0x00, 0xa2, 0xac, 0x8c, 0x66, 0x65, 0xb5, 0x53, 0x10, + 0x5d, 0x40, 0x13, 0x66, 0x24, 0x16, 0x68, 0x40, 0x98, 0x06, 0x84, 0xab, 0x0c, 0xe2, 0x8c, 0xcb, 0x3e, 0x31, 0xd9, + 0xca, 0x64, 0xab, 0x32, 0x5b, 0xfa, 0x6c, 0x2b, 0x24, 0x4a, 0x93, 0x2d, 0xcb, 0x6c, 0x90, 0xd9, 0xf0, 0x24, 0x55, + 0x78, 0x98, 0x4a, 0x2b, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0x1a, 0x6a, 0x73, 0x0f, 0x0e, 0xe2, 0x52, 0x4e, 0x32, 0x6a, + 0xe2, 0x7b, 0x4b, 0x9e, 0x14, 0x46, 0x06, 0xe2, 0xc9, 0xc4, 0xfd, 0x1d, 0xae, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfc, + 0x46, 0x49, 0xf4, 0x97, 0x57, 0xa2, 0x3e, 0xe2, 0x26, 0xfe, 0xcc, 0x05, 0x49, 0x5a, 0xad, 0xe3, 0xf6, 0x71, 0xeb, + 0xbc, 0xc7, 0x0f, 0xdb, 0x9d, 0xe4, 0x41, 0x27, 0x35, 0x8a, 0x88, 0xb9, 0xbc, 0x01, 0x05, 0xcc, 0x51, 0x27, 0x39, + 0x41, 0x87, 0xed, 0xa4, 0x75, 0x7a, 0xda, 0x84, 0x7f, 0xf0, 0x7b, 0x5d, 0x56, 0x3b, 0x69, 0x9d, 0x9c, 0xf6, 0xf8, + 0xd1, 0x46, 0xa5, 0x98, 0x37, 0xa0, 0x20, 0x3a, 0x32, 0x95, 0x30, 0xd4, 0xaf, 0x96, 0xf7, 0xd9, 0x96, 0x9e, 0xe7, + 0xbd, 0x8e, 0x95, 0x55, 0xc5, 0x01, 0x54, 0xfd, 0xd7, 0xc4, 0x00, 0xd1, 0x7f, 0x0d, 0xcb, 0x18, 0xb1, 0xcb, 0x02, + 0x44, 0xed, 0x47, 0x3c, 0x16, 0x0d, 0x76, 0x18, 0xdb, 0x7c, 0x0d, 0x75, 0x9b, 0x10, 0xb7, 0x0d, 0x4f, 0x5c, 0xae, + 0x0a, 0x73, 0x27, 0x08, 0x35, 0x15, 0xe4, 0x0e, 0x5d, 0xae, 0x0c, 0x73, 0x87, 0x08, 0x35, 0x25, 0xe4, 0xd2, 0x94, + 0x27, 0x14, 0x72, 0x74, 0x42, 0x9b, 0x06, 0x92, 0xd5, 0xa2, 0x3c, 0x67, 0x7e, 0xd8, 0x7c, 0x0c, 0xcb, 0x63, 0x08, + 0x8a, 0x13, 0xa4, 0x05, 0xbc, 0xed, 0x51, 0x6a, 0x73, 0x5a, 0xb8, 0x54, 0xe3, 0x40, 0x46, 0x03, 0xfe, 0x39, 0x64, + 0xe6, 0xc1, 0x87, 0x56, 0xef, 0xf8, 0xac, 0x95, 0xb6, 0xc1, 0x49, 0x19, 0x64, 0x6d, 0x61, 0x65, 0x6d, 0xe1, 0x65, + 0x6d, 0xe1, 0x65, 0x6d, 0x10, 0xe0, 0x83, 0xbe, 0xff, 0x91, 0x35, 0xc3, 0x0f, 0x5e, 0x5a, 0x91, 0x58, 0x33, 0x81, + 0x58, 0xaf, 0x56, 0xcb, 0x35, 0xd8, 0xf8, 0x94, 0x35, 0xa4, 0xaa, 0xd4, 0x9f, 0xcb, 0x22, 0x6d, 0xe1, 0x49, 0x0a, + 0x5a, 0xee, 0x16, 0xa6, 0x66, 0x73, 0x7b, 0xaa, 0xb0, 0x19, 0x3f, 0xa6, 0xe7, 0xd5, 0xc9, 0x97, 0xe4, 0xd8, 0x68, + 0x8f, 0x97, 0x45, 0xca, 0x2d, 0xcd, 0xe0, 0x96, 0x66, 0x70, 0x4b, 0x33, 0xa0, 0x11, 0x5c, 0x16, 0x36, 0x65, 0x13, + 0x4a, 0xe0, 0x4a, 0xa0, 0x7f, 0x3c, 0x80, 0xf0, 0x79, 0xb1, 0x26, 0x66, 0xd4, 0x1b, 0x9d, 0xb7, 0x21, 0x5c, 0x98, + 0x2d, 0xa9, 0x13, 0x6a, 0xbc, 0xa6, 0xcb, 0x31, 0x7f, 0xad, 0xa1, 0x7d, 0x02, 0x6f, 0xb9, 0x3c, 0xd4, 0x71, 0x0b, + 0x8c, 0x26, 0xa2, 0x22, 0xea, 0x19, 0xb2, 0x90, 0x1a, 0x9d, 0x8d, 0x33, 0x86, 0xfe, 0xbc, 0xe1, 0x83, 0x6a, 0x29, + 0x41, 0xf8, 0x82, 0xc1, 0x67, 0x56, 0x39, 0xc5, 0x97, 0xb6, 0x9e, 0xce, 0x50, 0xcb, 0x1e, 0x09, 0x5d, 0x30, 0xd8, + 0xf6, 0xd1, 0x96, 0x7a, 0x82, 0x48, 0x65, 0xdc, 0x05, 0x49, 0x15, 0x2f, 0x18, 0xdc, 0x67, 0xc9, 0x2d, 0x35, 0xce, + 0x24, 0x2f, 0xec, 0x9f, 0xaf, 0x34, 0xf0, 0xb6, 0x2b, 0x26, 0x43, 0xef, 0xa4, 0x7a, 0x6d, 0xa2, 0xea, 0x90, 0xfd, + 0x7d, 0x6b, 0x4b, 0x6d, 0xbe, 0x36, 0x8d, 0xa9, 0x4d, 0xa2, 0xc9, 0x86, 0x1d, 0xea, 0xd7, 0xe8, 0x1f, 0xef, 0x2b, + 0x56, 0x4c, 0x86, 0x28, 0xa0, 0xd9, 0x06, 0xac, 0xaa, 0x02, 0x96, 0x72, 0xf5, 0x4a, 0x17, 0x42, 0xe8, 0xdd, 0x8c, + 0x79, 0x5d, 0x4c, 0x86, 0x3b, 0x1f, 0xfd, 0xb0, 0x3d, 0xf6, 0xde, 0xd2, 0xa0, 0x07, 0xaf, 0xda, 0x9e, 0xb2, 0xdb, + 0xef, 0xd5, 0xb9, 0xd9, 0x59, 0x47, 0xe5, 0xdf, 0xab, 0xf3, 0x74, 0x57, 0x9d, 0x19, 0xbf, 0x8d, 0xfd, 0xde, 0xd1, + 0x81, 0x1a, 0xdb, 0x18, 0xe8, 0x4c, 0x86, 0x10, 0xa5, 0x1d, 0xfe, 0xda, 0x58, 0x2a, 0x5d, 0x4f, 0xc2, 0x61, 0x15, + 0x64, 0x2f, 0x39, 0x4d, 0x19, 0xa6, 0xa4, 0x73, 0x58, 0x98, 0x68, 0x2a, 0x22, 0xa1, 0x4d, 0x95, 0x50, 0x9c, 0x93, + 0x38, 0xa6, 0x87, 0x19, 0xc4, 0x84, 0x69, 0xf7, 0x68, 0x1a, 0xd3, 0x46, 0x86, 0x8e, 0xe2, 0x76, 0x83, 0x1e, 0x66, + 0x08, 0x35, 0xda, 0xa0, 0x33, 0x95, 0xa4, 0xdd, 0xcc, 0x21, 0x4a, 0xa4, 0x21, 0xc5, 0xf9, 0xa1, 0x48, 0x8a, 0x86, + 0x3c, 0x54, 0x49, 0xd1, 0x48, 0x4e, 0xb1, 0x48, 0x26, 0x65, 0xf2, 0xc4, 0x24, 0x4f, 0x6c, 0xf2, 0xb0, 0x4c, 0x1e, + 0x9a, 0xe4, 0xa1, 0x4d, 0xa6, 0xa4, 0x38, 0x14, 0x09, 0x6d, 0xc4, 0xed, 0x66, 0x81, 0x0e, 0x61, 0x04, 0x7e, 0xf4, + 0x44, 0x84, 0xc1, 0xb9, 0xd7, 0xc6, 0xba, 0x65, 0x2e, 0x73, 0x17, 0x2e, 0xb3, 0x02, 0x52, 0xe9, 0x72, 0x04, 0x75, + 0x9e, 0x05, 0x60, 0xc2, 0xda, 0xfe, 0xf1, 0xc1, 0xe0, 0xd6, 0x59, 0x2e, 0x45, 0xe0, 0x52, 0x05, 0x56, 0xe0, 0x9f, + 0x9d, 0x23, 0x09, 0x40, 0x75, 0x4d, 0xf3, 0xf9, 0x94, 0x6e, 0xf9, 0xad, 0x16, 0x93, 0xa1, 0xdb, 0x59, 0x65, 0x33, + 0x8c, 0x16, 0x36, 0xc8, 0x72, 0xdd, 0xc3, 0x10, 0x40, 0xed, 0xbd, 0x1a, 0x13, 0x6a, 0x94, 0xe4, 0xb6, 0xc6, 0xa4, + 0x60, 0x77, 0x2a, 0xa3, 0x39, 0x8b, 0xab, 0x03, 0xb8, 0x1a, 0x26, 0x23, 0x2f, 0xc0, 0x16, 0xbd, 0x38, 0x4c, 0x8e, + 0x1b, 0x3a, 0x99, 0x1c, 0x26, 0xa7, 0x0f, 0x1a, 0x3a, 0x19, 0x1e, 0x26, 0xed, 0x76, 0x85, 0xb3, 0x49, 0x41, 0x74, + 0x32, 0x21, 0x1a, 0x34, 0x86, 0xb6, 0x51, 0x39, 0xa7, 0x60, 0x5c, 0xf5, 0x6f, 0x0c, 0xa3, 0xe1, 0x86, 0x21, 0xd8, + 0xc4, 0xc6, 0x9b, 0xdc, 0x1a, 0x43, 0xd8, 0x4d, 0xe7, 0xf4, 0xb4, 0xa9, 0x93, 0x02, 0x6b, 0xbb, 0x92, 0x4d, 0x9d, + 0x4c, 0xb0, 0xb6, 0xcb, 0xd7, 0xd4, 0xc9, 0xd0, 0x36, 0x65, 0x74, 0x80, 0x4c, 0x04, 0xc0, 0x7a, 0xce, 0x02, 0xc8, + 0x77, 0xbc, 0x7b, 0xc8, 0x1a, 0xb4, 0x86, 0xdf, 0x2b, 0xd7, 0xf4, 0x05, 0x15, 0xd5, 0x60, 0x64, 0xc3, 0xbe, 0x55, + 0xb4, 0x5d, 0x35, 0xc9, 0xfe, 0x75, 0xd9, 0xb2, 0xd9, 0x42, 0xea, 0x7a, 0xc1, 0x87, 0x35, 0x0c, 0x71, 0xa5, 0xdc, + 0xc1, 0xfd, 0x8a, 0x92, 0x18, 0xa2, 0xca, 0x99, 0x53, 0x88, 0x13, 0xaf, 0x47, 0x86, 0x24, 0xde, 0x68, 0xac, 0x51, + 0x1c, 0x9c, 0xb7, 0x4f, 0x43, 0xaa, 0xba, 0x15, 0x6a, 0x8e, 0x90, 0x68, 0x21, 0xac, 0x31, 0xe2, 0x28, 0x0a, 0x58, + 0x10, 0xa7, 0xdd, 0xad, 0x1d, 0x10, 0x07, 0x07, 0x9b, 0xe7, 0x85, 0x0f, 0xfa, 0xbf, 0x15, 0xe8, 0xbf, 0xb2, 0x64, + 0xf3, 0x4f, 0x11, 0x59, 0x1b, 0x57, 0x1e, 0x20, 0x8a, 0x0f, 0xfa, 0x74, 0xdf, 0x50, 0xf8, 0x7e, 0x15, 0xf1, 0xce, + 0xe5, 0x34, 0xcf, 0x4c, 0x86, 0xe9, 0x6b, 0x10, 0x8c, 0xed, 0x4d, 0x38, 0xa1, 0xd2, 0x4a, 0xef, 0x5f, 0x76, 0x1c, + 0x74, 0xe2, 0x9e, 0x4a, 0x09, 0x1b, 0xfd, 0x3b, 0xb4, 0x89, 0xad, 0x60, 0xe3, 0xbc, 0xa1, 0x57, 0xab, 0xda, 0xc3, + 0x38, 0xf6, 0xf9, 0x15, 0x74, 0x70, 0xc0, 0xd5, 0x33, 0x30, 0xe3, 0x65, 0x71, 0x23, 0x3c, 0x7c, 0xff, 0xa9, 0x9d, + 0xd6, 0x7f, 0x9b, 0x73, 0x35, 0x0d, 0x0e, 0xba, 0x87, 0xb5, 0xfc, 0x9d, 0x2b, 0xd1, 0xd3, 0x29, 0x77, 0x6b, 0xfd, + 0x77, 0x65, 0x24, 0xbd, 0xf5, 0x44, 0xd3, 0xc1, 0x01, 0xaf, 0x02, 0x25, 0x45, 0x3f, 0x44, 0xa8, 0x67, 0x64, 0x90, + 0x67, 0xb9, 0xa4, 0x70, 0x23, 0x0a, 0x57, 0x0c, 0x69, 0x83, 0x1f, 0x69, 0xfc, 0x87, 0xfc, 0xff, 0xd4, 0xc8, 0xa1, + 0x4e, 0x1b, 0x3c, 0x10, 0xc0, 0x42, 0x56, 0xa8, 0x0a, 0x51, 0x68, 0x20, 0x1d, 0xda, 0x3c, 0xa3, 0xf2, 0x30, 0xa7, + 0xf3, 0x79, 0x7e, 0x67, 0x5e, 0xa9, 0x0a, 0x38, 0xaa, 0xea, 0xa2, 0xc9, 0xc5, 0x87, 0xc3, 0x05, 0xf0, 0xf4, 0x80, + 0x7b, 0xc8, 0xf8, 0x77, 0x96, 0x97, 0xdb, 0x02, 0x81, 0x64, 0xa6, 0x88, 0x6c, 0xb6, 0xbb, 0xea, 0x12, 0xe4, 0xb2, + 0x66, 0x13, 0x69, 0x17, 0x36, 0x1b, 0x73, 0x90, 0xc9, 0x94, 0xf5, 0xe1, 0xdc, 0xb3, 0x05, 0x41, 0x72, 0x93, 0x46, + 0x64, 0xdb, 0x5d, 0x8a, 0x8f, 0x63, 0x40, 0x23, 0x64, 0x05, 0xbe, 0x50, 0x58, 0xe4, 0xc0, 0x75, 0x16, 0xbe, 0xe3, + 0x6f, 0xb4, 0x54, 0xf4, 0xd5, 0x60, 0x80, 0x0b, 0xf3, 0x30, 0x43, 0x39, 0x9f, 0x42, 0x05, 0x0f, 0xfd, 0x04, 0x22, + 0x0a, 0x5f, 0xad, 0xf6, 0xe1, 0x1d, 0x1d, 0xd7, 0x26, 0x38, 0x7d, 0xba, 0x9f, 0xd5, 0x9b, 0x19, 0x30, 0x0e, 0x46, + 0x5a, 0xe6, 0xa2, 0xd0, 0xc9, 0x9b, 0xec, 0x42, 0x74, 0x1b, 0x0d, 0x66, 0x42, 0x1c, 0x11, 0x88, 0x67, 0x06, 0x1e, + 0x79, 0xf0, 0xc7, 0x46, 0x2d, 0x52, 0xcc, 0xc6, 0x7e, 0x83, 0xa0, 0xd4, 0xb5, 0x84, 0xd5, 0x4a, 0xd9, 0xd8, 0x22, + 0x26, 0xc7, 0x46, 0x19, 0x29, 0xfb, 0x29, 0x83, 0x98, 0x56, 0x66, 0x1c, 0xdc, 0x6d, 0xf5, 0xb7, 0xd5, 0x7e, 0xde, + 0xe3, 0xf6, 0x1a, 0x8f, 0x1b, 0x8f, 0x7d, 0x03, 0xa8, 0xe5, 0xc6, 0x06, 0xb7, 0x16, 0xe6, 0xb1, 0x35, 0x87, 0x65, + 0x9b, 0x10, 0x14, 0xa5, 0x87, 0xba, 0xbd, 0xb9, 0xf5, 0x11, 0xfb, 0x94, 0x99, 0x93, 0x42, 0xba, 0x0f, 0x72, 0xf4, + 0x80, 0x40, 0xe7, 0xf6, 0x67, 0x45, 0x17, 0x2a, 0x99, 0xb8, 0x1c, 0xe3, 0x2f, 0xc1, 0x6d, 0x5e, 0x3f, 0xba, 0xbe, + 0x36, 0x9b, 0xfc, 0xfa, 0x3a, 0xc2, 0xa1, 0x59, 0x77, 0x14, 0xf0, 0x82, 0xd1, 0xa0, 0x0c, 0xea, 0x64, 0x36, 0x7e, + 0xb3, 0x5d, 0x35, 0xf6, 0x9e, 0x56, 0x78, 0x07, 0xcb, 0x63, 0x1a, 0xdf, 0x72, 0x83, 0xec, 0x73, 0x80, 0x37, 0xeb, + 0xf3, 0x41, 0xf7, 0x4d, 0xac, 0xd0, 0xc1, 0xc1, 0x9b, 0x58, 0xa2, 0xde, 0x15, 0x33, 0x77, 0x6e, 0xe0, 0x07, 0xdd, + 0xe7, 0x66, 0xf8, 0x32, 0x40, 0x80, 0x2b, 0xb6, 0x29, 0xd9, 0xbc, 0x35, 0x51, 0x27, 0x52, 0x88, 0x6a, 0x0d, 0xb1, + 0x75, 0x1d, 0x48, 0xa0, 0xd7, 0x37, 0x21, 0xb4, 0xbb, 0x8c, 0x30, 0x60, 0xe1, 0x4b, 0x2f, 0x35, 0x96, 0xcc, 0x58, + 0x31, 0x61, 0xc5, 0x6a, 0xf5, 0x9e, 0x5a, 0xcf, 0xb3, 0x8d, 0x20, 0x89, 0xaa, 0xdb, 0x68, 0x50, 0x33, 0x7e, 0x10, + 0x1f, 0xe8, 0x00, 0xef, 0xbf, 0x89, 0x0b, 0x84, 0xc0, 0xc2, 0x88, 0x8b, 0x85, 0xf7, 0xb2, 0xca, 0x6a, 0xeb, 0x52, + 0xa0, 0xb2, 0x91, 0x9c, 0xb4, 0xf0, 0x94, 0x64, 0xe5, 0x1a, 0x5d, 0x4c, 0xbb, 0x8d, 0x46, 0x8e, 0x64, 0x9c, 0xf5, + 0xf3, 0x01, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0x72, 0xf3, 0x5d, 0xda, 0xb1, 0xa6, + 0x8f, 0xe8, 0x3a, 0x00, 0xc6, 0x23, 0x1a, 0x10, 0x89, 0x5d, 0x40, 0x16, 0x16, 0xc8, 0xca, 0x03, 0x59, 0x18, 0x20, + 0x2b, 0xd4, 0x9b, 0x43, 0xb8, 0x20, 0x85, 0xd2, 0x2d, 0x8a, 0x5e, 0x0f, 0x6c, 0xe9, 0x9c, 0x26, 0x30, 0x37, 0xb1, + 0x15, 0xdc, 0x72, 0x80, 0x03, 0x85, 0xf3, 0xc3, 0x53, 0x64, 0x19, 0x45, 0x26, 0xc6, 0x2b, 0xbe, 0x35, 0x7f, 0x92, + 0x5b, 0x7c, 0x67, 0x7f, 0xdc, 0x05, 0xca, 0xa4, 0xe7, 0x35, 0x6d, 0x03, 0x77, 0x11, 0xd1, 0xa2, 0x24, 0x02, 0xb4, + 0x76, 0xe1, 0xfd, 0x44, 0xfd, 0xc5, 0x33, 0x65, 0x03, 0x31, 0x88, 0x06, 0x51, 0x58, 0x04, 0xa4, 0xf3, 0xcf, 0x3f, + 0x23, 0xd4, 0x13, 0x10, 0x47, 0xc7, 0x9d, 0x6c, 0xcd, 0x36, 0x6a, 0x44, 0x49, 0x94, 0xc6, 0x3e, 0x4c, 0x03, 0xec, + 0x8c, 0x28, 0x0a, 0x5e, 0x3b, 0x29, 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x33, 0xa8, 0x2a, 0xf0, 0xc4, 0xe5, 0x72, 0x33, + 0xcc, 0x8f, 0x81, 0xaa, 0x30, 0x31, 0x56, 0x90, 0x7d, 0x02, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0xfa, 0x62, 0x10, 0xbc, + 0xe9, 0x55, 0x5d, 0x87, 0xeb, 0x70, 0xe1, 0x62, 0x0a, 0x71, 0xd6, 0x57, 0x2b, 0xfb, 0x97, 0x7c, 0x30, 0xd2, 0x0c, + 0x3c, 0xce, 0x16, 0x9c, 0xb1, 0x62, 0xb7, 0x2c, 0x96, 0x68, 0xf9, 0x3b, 0x98, 0xed, 0xb9, 0xa8, 0x79, 0xdc, 0x4d, + 0xb5, 0xed, 0xa1, 0x3e, 0x37, 0x1a, 0x85, 0x20, 0x66, 0x6d, 0x75, 0xa4, 0xe1, 0xb9, 0x0e, 0xf3, 0x6a, 0xb1, 0x67, + 0x33, 0x55, 0x86, 0x10, 0x85, 0x23, 0x25, 0x01, 0xbb, 0x6d, 0x43, 0x27, 0xe1, 0x47, 0x9d, 0x4a, 0x3a, 0x16, 0x12, + 0xa0, 0xc0, 0x91, 0xb9, 0x9c, 0x37, 0x21, 0xe2, 0x19, 0xda, 0x41, 0xe4, 0x02, 0x13, 0x9a, 0xba, 0x6c, 0xe9, 0x62, + 0x39, 0x45, 0x33, 0xb9, 0x50, 0x6c, 0x31, 0x87, 0xf3, 0xbd, 0x4c, 0xcb, 0x72, 0x9e, 0x7d, 0xae, 0xa7, 0x80, 0xfd, + 0xe5, 0xad, 0x9e, 0x31, 0xb1, 0x88, 0xdc, 0x3c, 0xbf, 0x5a, 0x71, 0xff, 0xcd, 0x0b, 0xfc, 0x88, 0x74, 0x0e, 0xbf, + 0xe2, 0x8f, 0x94, 0x3c, 0x6a, 0x7c, 0xc5, 0x13, 0x4e, 0x2c, 0x6f, 0x90, 0xbc, 0x79, 0x7d, 0xf5, 0xe2, 0xdd, 0x8b, + 0xf7, 0x4f, 0xaf, 0x5f, 0xbc, 0x7a, 0xf6, 0xe2, 0xd5, 0x8b, 0x77, 0x1f, 0xf1, 0x3f, 0x94, 0x7c, 0x3d, 0x6a, 0x9f, + 0xb7, 0xf0, 0x07, 0xf2, 0xf5, 0xa8, 0x83, 0x6f, 0x35, 0xf9, 0x7a, 0x74, 0x82, 0x73, 0x45, 0xbe, 0x1e, 0x76, 0x8e, + 0x8e, 0xf1, 0x42, 0xdb, 0x26, 0x73, 0x39, 0x69, 0xb7, 0xf0, 0x3f, 0xee, 0x0b, 0xc4, 0xfb, 0x6a, 0x16, 0x13, 0xb6, + 0x61, 0xfc, 0x60, 0xca, 0xd0, 0xa1, 0x32, 0x86, 0x28, 0x17, 0x01, 0x3a, 0x4d, 0x55, 0x88, 0x4e, 0x36, 0x88, 0x31, + 0xd8, 0x30, 0x02, 0x5a, 0x71, 0xe2, 0xda, 0xe1, 0x47, 0x6d, 0x76, 0x0c, 0xf4, 0x89, 0x97, 0xc2, 0x71, 0xa9, 0xc2, + 0x69, 0x3b, 0x2d, 0xc6, 0x38, 0x97, 0xb2, 0x88, 0x17, 0xc0, 0x08, 0x18, 0xad, 0x05, 0x3f, 0x2a, 0xa3, 0x25, 0x89, + 0x0b, 0xd2, 0xee, 0xb5, 0x53, 0x71, 0x41, 0x3a, 0xbd, 0x0e, 0xfc, 0x39, 0xed, 0x9d, 0xa6, 0xed, 0x16, 0x3a, 0x0c, + 0xc6, 0xf1, 0x47, 0x0d, 0xad, 0xfb, 0x03, 0xec, 0xba, 0x50, 0xff, 0x14, 0xda, 0xab, 0xf4, 0x84, 0x53, 0xc7, 0xb6, + 0xbb, 0xe2, 0x82, 0x19, 0x3d, 0x2c, 0xff, 0x01, 0x50, 0xdb, 0x38, 0x74, 0x94, 0x1b, 0xc7, 0xfd, 0xe2, 0x47, 0x02, + 0xd5, 0x42, 0xb2, 0xc4, 0x6c, 0xd5, 0x42, 0xc0, 0x34, 0x9a, 0x6c, 0x30, 0x07, 0x4a, 0x94, 0x2c, 0xb4, 0x0f, 0x2b, + 0xaf, 0x9a, 0x12, 0x25, 0x73, 0x39, 0x8f, 0x6b, 0xaa, 0x86, 0x5f, 0x03, 0x33, 0xc7, 0x7d, 0xae, 0x5e, 0xd1, 0x57, + 0x71, 0x8d, 0xe7, 0x09, 0x59, 0xbb, 0x70, 0x5b, 0xfc, 0xe2, 0xac, 0x28, 0x6a, 0xe0, 0x2a, 0x01, 0xeb, 0x47, 0xd5, + 0xd4, 0x17, 0xf0, 0x7e, 0x1e, 0x6b, 0xe8, 0x4b, 0x12, 0x50, 0xcf, 0x9f, 0x4a, 0x33, 0xae, 0x52, 0x19, 0xed, 0x15, + 0xd1, 0xc6, 0x2c, 0xc8, 0x2b, 0xa2, 0x2f, 0x94, 0x01, 0x82, 0x24, 0xbc, 0x2f, 0x06, 0x70, 0xe0, 0xdb, 0x01, 0x4a, + 0x43, 0xe7, 0x40, 0xad, 0x54, 0x99, 0x09, 0x99, 0x4f, 0x13, 0x1c, 0x00, 0x34, 0x4f, 0x95, 0x0a, 0xca, 0x7c, 0x62, + 0x89, 0x82, 0xa1, 0xff, 0x16, 0x6e, 0x80, 0xc3, 0xd8, 0xa0, 0x62, 0x90, 0x7d, 0x4f, 0xd4, 0xf3, 0xdb, 0xe7, 0xad, + 0xa3, 0xaf, 0x41, 0xfe, 0x48, 0x79, 0x7b, 0x8f, 0xbf, 0x03, 0x4a, 0x6e, 0xc3, 0x59, 0xb5, 0xb1, 0x8f, 0x44, 0xd6, + 0x0d, 0x01, 0x72, 0xa8, 0xd1, 0x91, 0x79, 0x4a, 0xb0, 0x8b, 0xf4, 0x21, 0x69, 0xb7, 0x20, 0x7c, 0xd8, 0x0e, 0xca, + 0xf7, 0xd3, 0x06, 0x4c, 0x75, 0x72, 0xdb, 0x04, 0x5a, 0x0d, 0xaf, 0x0b, 0xdd, 0x35, 0x79, 0x72, 0x87, 0x55, 0x80, + 0x33, 0xec, 0x90, 0x35, 0xc4, 0xa1, 0x40, 0x2e, 0xec, 0xaa, 0xdd, 0x00, 0x9a, 0x8a, 0x8e, 0x7d, 0xe5, 0xce, 0x1b, + 0x47, 0x5d, 0x34, 0x93, 0xd3, 0xc3, 0xaf, 0x07, 0x07, 0xb1, 0x6c, 0x90, 0x47, 0x08, 0x2f, 0x29, 0x58, 0x31, 0x83, + 0xd7, 0x17, 0xb7, 0x4c, 0x7c, 0xaa, 0x02, 0xea, 0xb8, 0x50, 0xb5, 0x63, 0xad, 0xea, 0xac, 0xdc, 0x0d, 0x7e, 0x4c, + 0x1d, 0xd4, 0x08, 0xd2, 0xec, 0xe8, 0x3a, 0x35, 0x28, 0xd7, 0x5c, 0xb4, 0x60, 0x5b, 0x36, 0x3e, 0x52, 0xf4, 0xc3, + 0xa3, 0xe6, 0xd7, 0x60, 0xc2, 0x35, 0xd3, 0xa4, 0x47, 0x8d, 0x47, 0xe8, 0x87, 0x47, 0x81, 0x93, 0x1d, 0xaf, 0xd8, + 0x13, 0xcf, 0x8d, 0xfc, 0x64, 0xb9, 0xd2, 0x9f, 0x40, 0xb2, 0x2f, 0xc8, 0x4f, 0x80, 0xe5, 0x94, 0xfc, 0x14, 0xcb, + 0x26, 0x04, 0x1f, 0x24, 0x3f, 0xc5, 0x05, 0xfc, 0xc8, 0xc9, 0x4f, 0x31, 0x60, 0x3b, 0x9e, 0x9a, 0x1f, 0x45, 0x09, + 0x0c, 0x70, 0xec, 0x92, 0xd6, 0xbf, 0xab, 0x58, 0xad, 0xc4, 0xc1, 0x81, 0xb4, 0xbf, 0xe8, 0x65, 0x76, 0x70, 0x90, + 0x5f, 0x4c, 0xab, 0xbe, 0x99, 0xde, 0x45, 0x5f, 0x0c, 0x42, 0xe1, 0xc0, 0x34, 0x8d, 0x87, 0x33, 0xfe, 0x14, 0x52, + 0x56, 0xd3, 0x40, 0xf3, 0xb8, 0x73, 0xff, 0xec, 0x1c, 0xc3, 0xbf, 0xf7, 0x83, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, + 0xb3, 0xe6, 0x59, 0x85, 0x6c, 0x97, 0x01, 0x3e, 0x63, 0x86, 0x9a, 0xe2, 0xe0, 0x80, 0x5f, 0x04, 0xb8, 0x8c, 0x19, + 0x6a, 0x04, 0x16, 0x7b, 0x0f, 0x4b, 0x7b, 0x32, 0xc3, 0x35, 0xc1, 0xb3, 0xb2, 0xbc, 0x5f, 0x0c, 0x2e, 0xb4, 0xa3, + 0x26, 0x61, 0xf0, 0x69, 0x45, 0x5a, 0x6e, 0x93, 0x75, 0x45, 0x53, 0x5d, 0xb6, 0xbb, 0x48, 0x12, 0xd5, 0x10, 0x97, + 0x97, 0x6d, 0x0c, 0x2a, 0xf9, 0x9e, 0x22, 0x32, 0x15, 0xc4, 0x3b, 0xc8, 0x2d, 0x73, 0x99, 0x2a, 0x3c, 0xe5, 0xa9, + 0xf0, 0x72, 0xf6, 0x6b, 0x6f, 0x3d, 0x6d, 0x5c, 0x16, 0x4d, 0xcf, 0x0c, 0x8b, 0x9e, 0x2a, 0x5d, 0xed, 0x60, 0x93, + 0xaa, 0x01, 0xbc, 0xda, 0x57, 0x62, 0x1e, 0xb3, 0xfe, 0x65, 0x0c, 0xa2, 0x22, 0xab, 0x46, 0x1b, 0x32, 0xe1, 0x73, + 0x9d, 0x2a, 0x18, 0xa8, 0x29, 0x7c, 0x01, 0x64, 0x2a, 0xab, 0x0c, 0xb3, 0x7d, 0xc3, 0x50, 0x40, 0x40, 0x81, 0x4b, + 0xc2, 0x02, 0x09, 0x1e, 0x6e, 0x3f, 0x02, 0xc2, 0x51, 0x27, 0x17, 0x76, 0x72, 0x17, 0x0a, 0xba, 0x13, 0x83, 0x0b, + 0xdd, 0x45, 0xa2, 0xd1, 0x70, 0xdc, 0xf6, 0xa5, 0x30, 0x83, 0x68, 0xb6, 0x07, 0x97, 0xac, 0x8b, 0x54, 0xb3, 0x59, + 0x1a, 0x40, 0x5e, 0xb6, 0x56, 0x2b, 0x75, 0xe1, 0x1b, 0xe9, 0xf9, 0x73, 0xdc, 0xf0, 0x5d, 0x5e, 0xf0, 0xfc, 0x4d, + 0x92, 0x7e, 0x04, 0x54, 0x15, 0xf8, 0x6c, 0x39, 0x8f, 0x70, 0x64, 0x1e, 0x74, 0x83, 0xbf, 0xe6, 0x21, 0xae, 0x08, + 0x47, 0xee, 0x8d, 0xb7, 0x68, 0x50, 0x0d, 0x96, 0x67, 0x65, 0x78, 0x72, 0x9e, 0x5c, 0x03, 0xe3, 0xa0, 0xff, 0x56, + 0x68, 0x59, 0xfd, 0x4e, 0x72, 0x17, 0xa8, 0x43, 0xf9, 0x67, 0xc7, 0xdc, 0xa8, 0xd6, 0xbb, 0x5d, 0x23, 0x39, 0x8e, + 0x7c, 0x55, 0x08, 0xdf, 0xff, 0x9d, 0x77, 0x0f, 0xdb, 0xee, 0xb9, 0xed, 0x65, 0xd9, 0x03, 0x70, 0xde, 0xeb, 0x35, + 0xc2, 0xbf, 0xc9, 0x9d, 0x6f, 0xef, 0x46, 0xd7, 0x52, 0x3c, 0xa1, 0x9a, 0x46, 0x8d, 0x37, 0xc6, 0xf0, 0xcd, 0xca, + 0x59, 0xdd, 0x6f, 0x8d, 0x83, 0xfd, 0x5b, 0xdd, 0x43, 0xe8, 0x84, 0xda, 0x33, 0x41, 0x56, 0xf6, 0x35, 0x01, 0x33, + 0x64, 0x60, 0xfa, 0xb6, 0x03, 0x1e, 0x7e, 0x8c, 0x14, 0x1c, 0x7a, 0x2d, 0x9f, 0x44, 0x21, 0x26, 0x69, 0xcd, 0x8d, + 0x18, 0x52, 0x6c, 0x1f, 0xc6, 0xe5, 0x74, 0x8d, 0x42, 0xae, 0x7b, 0xac, 0xea, 0xc4, 0xb4, 0xea, 0xc6, 0x48, 0x1d, + 0x6c, 0x93, 0x05, 0x67, 0x55, 0xef, 0x46, 0x42, 0xa9, 0x5e, 0x54, 0x33, 0xaf, 0x62, 0x36, 0xdb, 0xe6, 0x99, 0x61, + 0xfb, 0xee, 0x9a, 0x02, 0x43, 0xde, 0xfd, 0x32, 0x5c, 0xd4, 0x25, 0x1c, 0xbb, 0x71, 0x00, 0x59, 0x49, 0x2e, 0x97, + 0xee, 0x4d, 0x34, 0xde, 0x97, 0x83, 0x75, 0xf9, 0x42, 0x5a, 0x80, 0x07, 0xd5, 0x48, 0x45, 0x16, 0x72, 0x06, 0xfe, + 0x79, 0xc1, 0x9a, 0x7e, 0x88, 0x7f, 0x85, 0x03, 0xbe, 0x42, 0xd2, 0xd4, 0xaa, 0x9f, 0xe0, 0xe5, 0x22, 0x50, 0x78, + 0xdb, 0xba, 0x9f, 0x64, 0xe8, 0x22, 0x5a, 0xd7, 0xa9, 0x58, 0x2f, 0xcc, 0xba, 0x62, 0xa5, 0x2c, 0x1c, 0x1c, 0x77, + 0x31, 0x5a, 0xa7, 0xce, 0x63, 0xd3, 0x3d, 0x77, 0xf4, 0x50, 0xf0, 0x99, 0x71, 0xa4, 0x7b, 0x56, 0x40, 0xfc, 0xaa, + 0x50, 0x9f, 0xf6, 0xb3, 0x0c, 0xdf, 0xf3, 0xed, 0xc3, 0x3d, 0x61, 0xc9, 0x73, 0x96, 0x6f, 0x50, 0xc3, 0x02, 0x29, + 0xa0, 0x50, 0x0a, 0x8b, 0xd5, 0x2a, 0x16, 0x26, 0xaa, 0x81, 0x0b, 0x6a, 0xeb, 0x5e, 0xaf, 0x30, 0xfa, 0x3b, 0xa8, + 0x8b, 0xbd, 0x7a, 0xc4, 0x98, 0xb0, 0xa2, 0xf0, 0xd2, 0x49, 0x65, 0x41, 0x5f, 0xbb, 0xfa, 0x10, 0xd5, 0x94, 0x7b, + 0xb1, 0xd1, 0xf7, 0xbe, 0xe3, 0x33, 0x26, 0x17, 0xf0, 0x6c, 0x10, 0x66, 0x44, 0x31, 0xed, 0xbf, 0x81, 0x82, 0xc0, + 0xdb, 0x33, 0x3c, 0xc4, 0x47, 0xe0, 0xab, 0x3c, 0xad, 0x93, 0x99, 0x7f, 0x8c, 0x22, 0x32, 0xc1, 0x22, 0xa3, 0x5e, + 0x04, 0x5e, 0x43, 0x20, 0x42, 0x11, 0x12, 0x31, 0x31, 0x8a, 0x7a, 0x91, 0x71, 0x52, 0x8a, 0xc0, 0x6a, 0x0c, 0x94, + 0xdc, 0x11, 0x9e, 0xab, 0x8a, 0x88, 0x85, 0x35, 0x75, 0x50, 0x89, 0xa5, 0xc6, 0x4c, 0xfb, 0xa8, 0x53, 0x81, 0xb0, + 0xc8, 0x36, 0x05, 0x65, 0xbd, 0xa1, 0x2e, 0xc0, 0x92, 0x18, 0xd3, 0x5b, 0x9e, 0x5c, 0x03, 0x37, 0xc7, 0x46, 0xae, + 0xe8, 0x92, 0x5f, 0x81, 0x7a, 0x3a, 0x2d, 0xf0, 0xb5, 0x61, 0xd8, 0x46, 0x29, 0x5d, 0x13, 0x8e, 0x33, 0x52, 0x24, + 0xf4, 0x16, 0xa2, 0x3a, 0xcc, 0xb8, 0x48, 0x73, 0x3c, 0xa3, 0xb7, 0xe9, 0x14, 0xcf, 0xb8, 0x78, 0x62, 0x97, 0x3d, + 0x1d, 0x41, 0x92, 0xff, 0x58, 0xac, 0x89, 0x79, 0x94, 0xea, 0x77, 0xc5, 0x8a, 0x47, 0xc0, 0xab, 0xa8, 0x18, 0x75, + 0x47, 0xc6, 0xa6, 0x9c, 0xe9, 0xca, 0x78, 0xfd, 0xb5, 0x8e, 0x29, 0xce, 0x70, 0x8e, 0x92, 0x5c, 0x62, 0xd6, 0x13, + 0xe9, 0x6b, 0x88, 0xe8, 0x9c, 0x61, 0xfb, 0xa0, 0x15, 0xbf, 0x65, 0xf9, 0x33, 0x59, 0xbc, 0x37, 0x5b, 0x3e, 0x47, + 0x50, 0x08, 0x5c, 0x54, 0x44, 0x13, 0x6e, 0xf7, 0x16, 0x3d, 0x59, 0x35, 0x45, 0x6f, 0x6d, 0x53, 0x6e, 0x88, 0x53, + 0x08, 0x85, 0x9b, 0x4c, 0x79, 0xa3, 0x8d, 0x59, 0xaf, 0xf5, 0x9d, 0x46, 0xa7, 0xa8, 0x2c, 0x89, 0x30, 0xac, 0x55, + 0x53, 0xa5, 0x92, 0x88, 0xa6, 0x72, 0x12, 0xde, 0xd2, 0x00, 0x3b, 0x55, 0x38, 0x93, 0x0b, 0xa1, 0x53, 0x19, 0xe0, + 0x0d, 0xad, 0x36, 0xd7, 0xf2, 0xd6, 0x42, 0x4c, 0xe3, 0x3b, 0xfb, 0x83, 0xe1, 0x6b, 0xa3, 0xe2, 0x7f, 0x0b, 0x86, + 0x3d, 0x2a, 0x15, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x59, 0x7e, 0xf2, 0x16, 0xc0, 0x67, 0x59, 0xc8, 0x3b, 0x48, + 0x65, 0x26, 0xf5, 0x0e, 0x52, 0x19, 0xa4, 0x1a, 0x5f, 0xee, 0x7d, 0x51, 0x29, 0x8b, 0xc2, 0x06, 0x89, 0xc2, 0xa5, + 0x3a, 0x58, 0x12, 0x91, 0x40, 0xbb, 0x46, 0x94, 0x9b, 0x71, 0x01, 0x41, 0xfd, 0xa0, 0x71, 0xfb, 0x4d, 0x6f, 0xe1, + 0xfb, 0xce, 0xe6, 0x33, 0x9f, 0x7f, 0x67, 0xf3, 0x4d, 0x47, 0x1e, 0xe3, 0xeb, 0xb7, 0x9d, 0xc6, 0x32, 0x5e, 0x3a, + 0xac, 0xfd, 0x50, 0x3e, 0xa1, 0xd2, 0x32, 0x4f, 0x55, 0x93, 0x36, 0x9e, 0x04, 0x48, 0xd9, 0xac, 0x78, 0xb8, 0x0e, + 0x6e, 0xb7, 0x0e, 0x63, 0xde, 0x24, 0x6d, 0x84, 0x0e, 0x9d, 0x70, 0x25, 0x62, 0x23, 0x39, 0x1d, 0x3e, 0x3a, 0x82, + 0xbb, 0x97, 0x99, 0xda, 0xf0, 0x95, 0xb2, 0xd5, 0x9a, 0xed, 0xd6, 0x21, 0xdf, 0x59, 0xa5, 0xd1, 0xc6, 0x33, 0x46, + 0x96, 0xe0, 0x5c, 0x46, 0x0b, 0xab, 0x6a, 0x00, 0x27, 0xce, 0x17, 0xe2, 0xb7, 0x05, 0x1d, 0x99, 0xef, 0x43, 0x9b, + 0xf2, 0x7a, 0xa1, 0x7d, 0x52, 0x93, 0xc3, 0x20, 0x3a, 0xc8, 0x95, 0x0c, 0x72, 0x62, 0x7e, 0x44, 0x92, 0x53, 0x74, + 0xd1, 0xee, 0x25, 0xa7, 0x87, 0xfc, 0x90, 0xa7, 0xc0, 0xc3, 0xc6, 0x4d, 0x5f, 0xa1, 0xd9, 0xf6, 0x75, 0x1e, 0x2f, + 0x86, 0x3c, 0x73, 0xcd, 0x57, 0x1d, 0x94, 0xa9, 0x76, 0x8e, 0x90, 0x05, 0x28, 0xe6, 0x7b, 0x09, 0xb2, 0xeb, 0xdd, + 0x1c, 0xf2, 0x14, 0xfa, 0x81, 0x5a, 0x1d, 0x5b, 0xab, 0x1c, 0xdc, 0x6f, 0x0b, 0x40, 0x30, 0xdf, 0x51, 0x6d, 0x2e, + 0x36, 0xbd, 0x19, 0x57, 0x9d, 0x1d, 0xf2, 0x6a, 0x84, 0x61, 0x99, 0xed, 0xfe, 0xfc, 0xd4, 0xaa, 0x2e, 0x0f, 0x03, + 0x88, 0xfc, 0xb6, 0xe0, 0x22, 0xec, 0x34, 0xec, 0xd6, 0xe5, 0x84, 0x9d, 0xd6, 0x67, 0x19, 0x14, 0xd9, 0xee, 0x75, + 0x6b, 0xa6, 0xf5, 0xd9, 0x5e, 0x81, 0x8f, 0x20, 0x4c, 0xca, 0xac, 0x74, 0x06, 0x57, 0xe8, 0x87, 0x1f, 0x90, 0x6b, + 0xfd, 0xf5, 0x42, 0xfb, 0xfc, 0x12, 0x11, 0x20, 0xbb, 0xea, 0xba, 0xac, 0x0e, 0x7d, 0x94, 0x4d, 0x7c, 0x3d, 0xe4, + 0xc1, 0xca, 0x3d, 0xbd, 0x9d, 0xcb, 0xd4, 0xe3, 0x6b, 0xaf, 0x95, 0x6e, 0x21, 0x27, 0x10, 0x0f, 0xd7, 0x5d, 0x58, + 0x16, 0xe4, 0xec, 0xe6, 0x16, 0x4a, 0x86, 0x13, 0xf7, 0xa5, 0x3f, 0x30, 0x7b, 0xdd, 0xc0, 0x2f, 0x92, 0x53, 0x98, + 0xfa, 0x66, 0x0f, 0x87, 0x1d, 0xe8, 0xc3, 0xc0, 0x61, 0xb3, 0x41, 0x9f, 0x59, 0x41, 0xe4, 0x31, 0x2f, 0x2c, 0x9e, + 0x5d, 0x92, 0x76, 0x8f, 0xa7, 0x6e, 0x33, 0x19, 0xd1, 0xa8, 0xdd, 0xe4, 0xc1, 0xcc, 0x00, 0xbf, 0x5c, 0xd9, 0xb0, + 0x88, 0x5f, 0xa7, 0x00, 0x4a, 0xbe, 0x58, 0xb5, 0x3e, 0x15, 0xbc, 0xea, 0x0d, 0xa7, 0x9b, 0xe9, 0x7e, 0xdd, 0xe0, + 0x76, 0xd7, 0xc3, 0x13, 0x9e, 0x40, 0xb1, 0x68, 0xed, 0x27, 0x3e, 0x01, 0x0e, 0x28, 0x69, 0xdd, 0x3f, 0x05, 0x17, + 0xca, 0x12, 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x2c, 0x1c, 0x6d, 0xc9, 0x80, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, + 0xd8, 0xc1, 0x49, 0xbb, 0xdd, 0x39, 0xc5, 0xc9, 0xc9, 0x29, 0x0c, 0xb4, 0x91, 0x9c, 0x1e, 0xce, 0x94, 0x05, 0x60, + 0x90, 0xb3, 0x76, 0xed, 0x3e, 0x82, 0x70, 0x49, 0xa1, 0x78, 0xcd, 0x0f, 0xe3, 0xb8, 0x9d, 0xdc, 0x6f, 0xb5, 0x4f, + 0xcf, 0x1b, 0x00, 0xa0, 0xa6, 0xfb, 0x70, 0x35, 0x5e, 0x2f, 0x74, 0xbd, 0x4a, 0x89, 0xf0, 0xf5, 0x6a, 0x0d, 0x5f, + 0xad, 0xd1, 0x5e, 0x57, 0x53, 0xf0, 0x55, 0x9d, 0x70, 0x6e, 0x8b, 0x78, 0xa5, 0x4d, 0xb8, 0x2d, 0x62, 0x3b, 0x90, + 0x18, 0xa4, 0xf3, 0xe4, 0xb4, 0x73, 0x8a, 0xec, 0x58, 0xb4, 0xc3, 0x8f, 0x72, 0x9f, 0x6c, 0x15, 0x69, 0x68, 0x40, + 0x92, 0x72, 0x76, 0x72, 0x01, 0x12, 0x35, 0x27, 0x97, 0xed, 0xe6, 0x8c, 0x25, 0x7e, 0x02, 0x26, 0x15, 0x96, 0xb3, + 0x5c, 0x05, 0x97, 0x14, 0x00, 0xe2, 0x02, 0x8c, 0x8b, 0xee, 0x9f, 0xf6, 0xee, 0x27, 0xa7, 0x67, 0x1d, 0x4b, 0xf4, + 0xf8, 0x45, 0xa7, 0x96, 0x66, 0xa6, 0x9e, 0x9c, 0x9a, 0x34, 0xe8, 0x3a, 0xb9, 0x7f, 0x0a, 0x65, 0x5c, 0x4a, 0x58, + 0x0a, 0xc2, 0x3c, 0x54, 0xc5, 0x20, 0xb6, 0x43, 0x5a, 0xcb, 0x3d, 0xab, 0x65, 0x9f, 0x9f, 0x1c, 0xdf, 0x3f, 0x0d, + 0xa1, 0x56, 0xce, 0xc2, 0x2c, 0xb4, 0x9b, 0x88, 0x9f, 0x1d, 0x2c, 0x2d, 0x3a, 0x4c, 0x4e, 0xd3, 0xad, 0x09, 0xda, + 0x4d, 0x73, 0x68, 0x70, 0x20, 0x50, 0x38, 0x3e, 0x15, 0x4e, 0x5f, 0x12, 0xdc, 0x8f, 0x55, 0x86, 0x26, 0xa1, 0xc2, + 0xd9, 0xdf, 0x53, 0x06, 0x2f, 0x39, 0x86, 0x57, 0x95, 0x8f, 0xa9, 0xf8, 0x42, 0xd5, 0x1b, 0x0a, 0xb1, 0x2b, 0xc4, + 0x20, 0x72, 0x91, 0xb5, 0xeb, 0xb9, 0x3f, 0x81, 0x8b, 0x30, 0x13, 0x70, 0xa1, 0xe9, 0x95, 0xa0, 0x15, 0x2f, 0x30, + 0x0c, 0x1d, 0x6a, 0xcd, 0xb0, 0x7a, 0x3c, 0x75, 0x26, 0x05, 0xa1, 0x6e, 0xeb, 0x39, 0xff, 0x5e, 0xb9, 0xa4, 0xbc, + 0xca, 0x4e, 0x4e, 0x51, 0xe2, 0x2e, 0xcb, 0x93, 0x36, 0x4a, 0x02, 0x13, 0x12, 0x77, 0x24, 0x67, 0x19, 0xe9, 0x47, + 0xb7, 0x11, 0x8e, 0xee, 0x22, 0x1c, 0x59, 0x1f, 0xe6, 0x0f, 0xe0, 0x3c, 0x1f, 0xe1, 0xc8, 0xba, 0x32, 0x47, 0x38, + 0xd2, 0x4c, 0x40, 0x48, 0xab, 0x68, 0x80, 0x73, 0x28, 0x6d, 0x3c, 0xab, 0xcb, 0xd2, 0x8f, 0xfd, 0x57, 0xe9, 0x7a, + 0x6d, 0x53, 0x02, 0x29, 0x73, 0x6a, 0x76, 0xa8, 0x7d, 0x92, 0x39, 0xa2, 0x9e, 0x59, 0x8f, 0x30, 0x08, 0x20, 0xf4, + 0xce, 0x3f, 0xe9, 0x56, 0x45, 0xc3, 0x60, 0xc7, 0xb0, 0xd2, 0xe0, 0x67, 0x1e, 0x85, 0x67, 0x58, 0x84, 0xc7, 0xc2, + 0x17, 0x06, 0xb1, 0xc2, 0xff, 0xce, 0xa5, 0x9c, 0xfb, 0xdf, 0x5a, 0x96, 0xbf, 0xe0, 0x21, 0x10, 0x67, 0xd1, 0x02, + 0x96, 0x5b, 0x36, 0xf8, 0xce, 0x90, 0xd5, 0x47, 0x70, 0x3d, 0x76, 0x01, 0xd2, 0x40, 0x22, 0xbc, 0x36, 0x02, 0x95, + 0x97, 0x0f, 0xaf, 0x6d, 0xb0, 0x1e, 0xf3, 0x09, 0xd1, 0xba, 0x20, 0x20, 0xaf, 0x84, 0x0b, 0x8d, 0x49, 0xc1, 0x94, + 0x8a, 0x6c, 0x14, 0xbb, 0x48, 0x0a, 0xff, 0x2c, 0xa1, 0x4f, 0x19, 0x8b, 0xc8, 0x74, 0x58, 0x9f, 0xad, 0x15, 0x87, + 0x73, 0x59, 0xa8, 0xd4, 0xbe, 0x51, 0xe2, 0xc1, 0x58, 0x3d, 0x55, 0x9f, 0xe6, 0xd9, 0x1a, 0xdb, 0x3b, 0xec, 0xb2, + 0x90, 0xbb, 0xd2, 0x0e, 0x4b, 0x65, 0xd9, 0xfa, 0x5b, 0x13, 0x52, 0xb5, 0x19, 0x05, 0x13, 0xad, 0x06, 0x54, 0x85, + 0xb2, 0x80, 0xc2, 0x36, 0x1c, 0x4a, 0xba, 0x2c, 0x4b, 0xa6, 0xcb, 0x72, 0x19, 0x4e, 0x5a, 0xad, 0xf5, 0x1a, 0x17, + 0xcc, 0x84, 0x65, 0xd9, 0x59, 0x02, 0xf2, 0xd5, 0x54, 0xde, 0x04, 0xb9, 0x2a, 0x2d, 0x67, 0x69, 0x96, 0x28, 0x0a, + 0x8c, 0x60, 0xa3, 0x35, 0xfe, 0xc2, 0x15, 0x07, 0x78, 0xba, 0xd9, 0x0d, 0xa5, 0xcc, 0x19, 0x85, 0xe8, 0x5d, 0x41, + 0x93, 0x6b, 0x3c, 0xe5, 0x23, 0xb6, 0xbb, 0x4d, 0x30, 0x63, 0xfe, 0xf7, 0x5a, 0xf4, 0x08, 0x64, 0xd9, 0x3d, 0x83, + 0x3a, 0xb0, 0x88, 0x2b, 0xe8, 0x20, 0x94, 0xc1, 0x47, 0x21, 0x6e, 0xe6, 0xf4, 0x4e, 0x2e, 0x34, 0xc0, 0x65, 0xa1, + 0xe5, 0x1b, 0x17, 0xeb, 0x60, 0xbf, 0x85, 0x7d, 0xd8, 0x83, 0x25, 0x84, 0x0c, 0x68, 0x61, 0x1b, 0x23, 0xa2, 0x85, + 0x87, 0x52, 0x6b, 0x39, 0x4b, 0x5b, 0xd8, 0x04, 0x6c, 0x68, 0xad, 0xcb, 0xa8, 0x5a, 0xd7, 0xe5, 0x63, 0x8e, 0xd5, + 0x26, 0x58, 0x38, 0xe9, 0x50, 0x13, 0x1d, 0xdc, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbd, 0x7e, 0xe5, 0x62, 0x26, + 0xf3, 0x31, 0xb8, 0x6c, 0x3a, 0xd5, 0xd8, 0xb5, 0x79, 0x05, 0x29, 0xae, 0x14, 0xa5, 0x56, 0x38, 0x85, 0x96, 0x5f, + 0x08, 0x9d, 0x27, 0xf6, 0xf2, 0xe2, 0x99, 0x2c, 0x66, 0xd4, 0xde, 0x18, 0xe1, 0x6b, 0xe5, 0x9e, 0x3d, 0x37, 0x2f, + 0xab, 0x54, 0x93, 0x7c, 0xb7, 0x79, 0x15, 0xb1, 0xc8, 0x8c, 0xfc, 0x0a, 0xda, 0x00, 0x53, 0xb9, 0x7c, 0xb5, 0xb6, + 0x20, 0x2e, 0xf2, 0x7c, 0x40, 0x5e, 0xde, 0x5a, 0xea, 0x12, 0x45, 0x0d, 0x6e, 0xf0, 0x93, 0x15, 0x3c, 0x0b, 0xae, + 0x0b, 0x0d, 0x7b, 0xe4, 0xc4, 0x8b, 0xa8, 0x15, 0xd5, 0x5f, 0x7d, 0x35, 0xaa, 0x04, 0x1f, 0xb5, 0x34, 0xc9, 0x25, + 0x88, 0x1e, 0xe5, 0x03, 0x73, 0x1c, 0x44, 0x13, 0x7f, 0xf7, 0x7c, 0xd9, 0xf6, 0x74, 0x36, 0xaf, 0xd4, 0x89, 0xe5, + 0x95, 0x09, 0x78, 0x38, 0xda, 0x27, 0x5c, 0x10, 0x0e, 0x12, 0x59, 0xa9, 0x3d, 0xf4, 0xb9, 0xa8, 0x1b, 0xe7, 0x17, + 0x6d, 0xd6, 0x3c, 0x59, 0xad, 0xf2, 0xcb, 0x36, 0x6b, 0x9f, 0xda, 0x07, 0xdf, 0x22, 0x95, 0x01, 0xcd, 0xe5, 0x63, + 0x9e, 0x45, 0xa0, 0x9d, 0x1d, 0x67, 0x26, 0x9c, 0x82, 0x0f, 0x51, 0x4c, 0x16, 0xba, 0xea, 0x4b, 0x82, 0x71, 0x29, + 0xb1, 0x7a, 0xfc, 0x02, 0xf5, 0xda, 0xe9, 0xb6, 0xab, 0x74, 0xb3, 0x7d, 0x18, 0x5c, 0xb8, 0x14, 0x08, 0x77, 0x20, + 0xe4, 0x01, 0xe8, 0x77, 0x97, 0x02, 0x4c, 0x83, 0x00, 0x95, 0x15, 0x88, 0xb4, 0x7c, 0xb6, 0x98, 0x3d, 0x2b, 0xa8, + 0x59, 0x86, 0x27, 0x7c, 0xc2, 0xb5, 0x4a, 0x29, 0x48, 0xb7, 0xbb, 0xd2, 0xd7, 0xbb, 0x25, 0xa8, 0xac, 0x16, 0xf9, + 0x35, 0xd1, 0x3c, 0xfb, 0xac, 0xdc, 0xc2, 0x21, 0x6c, 0x56, 0x56, 0xe0, 0x0c, 0xad, 0x71, 0x2e, 0x27, 0xb4, 0xe0, + 0x7a, 0x3a, 0xfb, 0xb7, 0x56, 0x87, 0xf5, 0xf5, 0xc0, 0x5c, 0x58, 0x01, 0x48, 0xa8, 0x18, 0xad, 0x56, 0xfc, 0xe8, + 0xfb, 0xf7, 0x49, 0xde, 0x27, 0xbc, 0x8d, 0x3b, 0xf8, 0x18, 0x9f, 0xe2, 0x76, 0x0b, 0xb7, 0x4f, 0xe1, 0xea, 0x3e, + 0xcb, 0x17, 0x23, 0xa6, 0x62, 0x78, 0xf9, 0x4b, 0x5f, 0x26, 0xe7, 0x87, 0x65, 0xbc, 0x7b, 0x5d, 0x24, 0x0e, 0x5d, + 0x82, 0xb0, 0xeb, 0x2e, 0x5e, 0x5d, 0x14, 0x85, 0xc1, 0xd2, 0xc6, 0xa1, 0xea, 0xa4, 0xd4, 0x2f, 0x5c, 0x1e, 0xf7, + 0xc0, 0x9e, 0xdb, 0xae, 0x6c, 0x13, 0xcc, 0xbe, 0xed, 0xcf, 0xb4, 0xfa, 0xd9, 0xd4, 0x25, 0x62, 0x78, 0xe8, 0x55, + 0xe8, 0x81, 0x2e, 0x49, 0xfb, 0xe0, 0x00, 0xac, 0x8e, 0x82, 0xd9, 0x70, 0x1b, 0xfd, 0x80, 0x37, 0x6b, 0x69, 0x10, + 0xac, 0x00, 0x8c, 0x3b, 0xdf, 0x70, 0xb2, 0xb4, 0xb0, 0xd5, 0x40, 0x85, 0x75, 0x11, 0x46, 0x74, 0x0b, 0x49, 0x85, + 0x11, 0xa2, 0xe1, 0x08, 0x73, 0x91, 0x4e, 0xf6, 0x5b, 0x58, 0x8e, 0xc7, 0x8a, 0x69, 0x38, 0x3a, 0x0a, 0xf6, 0x85, + 0x15, 0xca, 0x9c, 0x22, 0x43, 0x36, 0xe1, 0xe2, 0xa1, 0xfe, 0xc4, 0x0a, 0x69, 0x3e, 0x8d, 0x06, 0x23, 0x8d, 0xcc, + 0x2a, 0x46, 0x38, 0xcb, 0xf9, 0x1c, 0xaa, 0x4e, 0x0a, 0x70, 0xfa, 0x81, 0xbf, 0x7c, 0x94, 0x86, 0x6d, 0x02, 0xf9, + 0xfa, 0x60, 0x83, 0xd9, 0xe0, 0x51, 0x41, 0x6f, 0x5e, 0x8b, 0xc7, 0xb0, 0xa3, 0x1e, 0x16, 0x8c, 0x42, 0x36, 0x24, + 0xbd, 0x83, 0xa6, 0xe0, 0x03, 0xda, 0x7c, 0x69, 0x00, 0x97, 0x9e, 0x9b, 0x0f, 0x5b, 0xd1, 0x47, 0x0d, 0x4c, 0xca, + 0xb6, 0x4c, 0xa6, 0x39, 0xa5, 0xab, 0x4c, 0x1b, 0x97, 0xa9, 0x9c, 0xc2, 0x1a, 0xbb, 0xa8, 0x27, 0xe1, 0x60, 0x46, + 0x54, 0x4d, 0xd3, 0xfe, 0xc0, 0xfc, 0x7d, 0x6d, 0x4b, 0xb6, 0xb0, 0x0b, 0xb5, 0xb3, 0xc6, 0xe6, 0xc9, 0xce, 0xa0, + 0x7c, 0x1b, 0xc3, 0x3d, 0x2c, 0xbc, 0x1b, 0x59, 0x23, 0x9f, 0x27, 0x9e, 0x6c, 0x9e, 0xac, 0xd7, 0x66, 0x20, 0x2a, + 0x05, 0x3d, 0xd0, 0x5b, 0xbf, 0x6d, 0x5a, 0xb0, 0x3d, 0xca, 0xaf, 0xd3, 0x16, 0x9e, 0x71, 0x78, 0x06, 0xd3, 0xb7, + 0x77, 0xa5, 0x0b, 0xf9, 0xd9, 0x81, 0xa4, 0x15, 0xa4, 0xd8, 0xe9, 0x04, 0x9d, 0x1d, 0xe3, 0x60, 0xe4, 0x40, 0xcf, + 0xaf, 0x3e, 0x5b, 0x58, 0xfb, 0xdf, 0x6f, 0xca, 0x82, 0x39, 0x1d, 0xb2, 0xbc, 0x9c, 0x50, 0xe6, 0xcf, 0xcf, 0x37, + 0x3c, 0xa9, 0x50, 0xc1, 0xbd, 0x1f, 0x05, 0x7b, 0xda, 0x86, 0x98, 0x9c, 0xd1, 0xbf, 0xed, 0x0f, 0x1b, 0x11, 0xa8, + 0xd4, 0xb2, 0x65, 0x85, 0x54, 0xea, 0xa1, 0x4d, 0xb3, 0x47, 0x0f, 0x1c, 0x91, 0x2f, 0xa1, 0x0b, 0xe0, 0xf5, 0x47, + 0x85, 0x9c, 0x1b, 0x44, 0x70, 0xbf, 0xdd, 0xb8, 0x8d, 0xaf, 0x00, 0x78, 0x3b, 0xec, 0x55, 0xff, 0xb4, 0x80, 0xfd, + 0x8d, 0xca, 0x92, 0x7e, 0xbc, 0x1d, 0x7b, 0xfc, 0x17, 0x12, 0xe2, 0x95, 0x5b, 0x3c, 0x4c, 0x1c, 0x3a, 0x95, 0xac, + 0x59, 0xf9, 0x73, 0xab, 0x24, 0x60, 0x58, 0xbd, 0x60, 0xc8, 0xc6, 0x6d, 0x15, 0xb7, 0x99, 0xff, 0x41, 0x05, 0x83, + 0x05, 0xdf, 0x1a, 0x49, 0xc5, 0xb2, 0xf8, 0xed, 0x53, 0xe7, 0xbf, 0xea, 0x1c, 0xd7, 0xbe, 0xae, 0xbd, 0x51, 0x39, + 0x34, 0xf1, 0x81, 0x23, 0x74, 0x70, 0xb0, 0x91, 0x41, 0xc7, 0x00, 0x78, 0xe4, 0xd8, 0x2f, 0xbf, 0x7c, 0x9e, 0x1d, + 0x33, 0x9a, 0xc7, 0x22, 0x0a, 0x99, 0x3b, 0xcf, 0xcd, 0xd9, 0x89, 0x3c, 0xa1, 0x6a, 0xea, 0x0b, 0x03, 0x1c, 0x1f, + 0x6d, 0xa5, 0x02, 0xbe, 0x47, 0xeb, 0x1d, 0x13, 0xd8, 0xe0, 0xb7, 0xec, 0xa4, 0x76, 0x15, 0xf4, 0x0b, 0xb4, 0xdc, + 0xc5, 0x54, 0x6e, 0x2c, 0x70, 0xb4, 0x39, 0x91, 0x9d, 0x43, 0xdf, 0xa8, 0x53, 0xb2, 0x1e, 0x4f, 0x76, 0x1b, 0x7d, + 0x49, 0xb1, 0x2b, 0xb9, 0xa2, 0x6d, 0x43, 0x56, 0xbd, 0x53, 0xab, 0x2b, 0x53, 0xa7, 0xea, 0x9a, 0xb7, 0xb2, 0xb4, + 0x29, 0xed, 0x92, 0xec, 0xdd, 0x16, 0x0b, 0xaf, 0xc2, 0x1b, 0x8d, 0xf2, 0x22, 0x14, 0xec, 0xb1, 0xc4, 0xa0, 0xcb, + 0x09, 0x5c, 0x2f, 0xac, 0x56, 0x31, 0xfc, 0xd9, 0x35, 0x86, 0x5d, 0xa6, 0x4b, 0x1f, 0xf8, 0x06, 0xbf, 0x12, 0x84, + 0xca, 0x75, 0x76, 0x90, 0x60, 0xdd, 0xe5, 0x06, 0x0d, 0xc7, 0x89, 0xff, 0x82, 0x87, 0x9a, 0xb5, 0x77, 0x39, 0x98, + 0x64, 0xdf, 0x78, 0xdc, 0xad, 0x64, 0x2d, 0x6b, 0x71, 0xd6, 0x37, 0x24, 0x18, 0x62, 0x37, 0xa5, 0x73, 0xdc, 0x4a, + 0xda, 0x28, 0x72, 0xc5, 0x2a, 0xf4, 0xff, 0x56, 0x91, 0xcc, 0x66, 0xfe, 0xd7, 0xd9, 0xd9, 0x99, 0x4b, 0x71, 0x36, + 0x7f, 0xca, 0x78, 0xc0, 0x99, 0x04, 0xf6, 0x85, 0x67, 0xcc, 0xe8, 0x90, 0xdf, 0xc2, 0x50, 0x88, 0x20, 0x97, 0xc2, + 0xb1, 0x4b, 0xf0, 0xce, 0x20, 0x50, 0x1e, 0x60, 0xff, 0x9e, 0x6c, 0x94, 0xf3, 0x0f, 0x15, 0xf9, 0x40, 0xbe, 0x65, + 0x83, 0xec, 0x8b, 0xf9, 0xec, 0x5b, 0x33, 0x19, 0x88, 0xcd, 0x1f, 0x61, 0xfb, 0xdb, 0xb0, 0xb4, 0xce, 0x52, 0x06, + 0x47, 0x5a, 0x2e, 0xb2, 0xa9, 0xd5, 0xfc, 0xbb, 0x0f, 0x53, 0xd6, 0x3d, 0x72, 0x03, 0x41, 0xb9, 0xc8, 0xd2, 0xc5, + 0xa3, 0x8c, 0x7e, 0x2c, 0x43, 0x4f, 0xee, 0xbd, 0x62, 0x0b, 0xf6, 0x23, 0xde, 0xab, 0x52, 0xe0, 0xe3, 0x61, 0xc1, + 0x69, 0xfe, 0x23, 0xde, 0xab, 0x42, 0x50, 0x82, 0x2b, 0xa4, 0x89, 0xe2, 0x88, 0xcd, 0x83, 0xce, 0x69, 0x24, 0x80, + 0x82, 0xe6, 0x91, 0x39, 0xc8, 0x9e, 0xbb, 0xa8, 0x85, 0x49, 0x07, 0xbb, 0xb8, 0x5f, 0x36, 0x16, 0xa9, 0x0d, 0xe1, + 0x0d, 0x91, 0xdc, 0xca, 0xd9, 0x98, 0xaf, 0x47, 0x1b, 0x0b, 0x62, 0x94, 0xc9, 0xe4, 0xf2, 0x39, 0x8f, 0xb7, 0x16, + 0x0b, 0x85, 0xd5, 0x82, 0x05, 0xaa, 0x55, 0xa9, 0xd2, 0xc3, 0xe2, 0xdb, 0x05, 0xb3, 0xa0, 0x88, 0xd9, 0x7a, 0x0f, + 0x6f, 0xb9, 0x22, 0x20, 0x25, 0xbb, 0x24, 0x78, 0x93, 0xdb, 0x60, 0xaa, 0x7f, 0x82, 0x1d, 0x08, 0x3d, 0x53, 0x3a, + 0xc2, 0x26, 0x4f, 0x41, 0x24, 0xb1, 0xfd, 0x16, 0x76, 0xac, 0xd1, 0x0b, 0xe1, 0x85, 0x14, 0x38, 0x57, 0x4d, 0x13, + 0x33, 0xca, 0x4d, 0x74, 0xb1, 0x87, 0x6a, 0xce, 0x32, 0x6d, 0x11, 0x60, 0xdf, 0xa1, 0xa1, 0x14, 0xcf, 0x0d, 0x28, + 0xcc, 0x63, 0xd2, 0x2e, 0xe5, 0x31, 0x2c, 0x5e, 0x90, 0x02, 0x44, 0x8d, 0x8b, 0x49, 0x59, 0x67, 0x9e, 0x2f, 0x26, + 0x5c, 0x54, 0xc8, 0x50, 0x30, 0x35, 0x97, 0x02, 0xde, 0x72, 0x28, 0x8b, 0x18, 0x3a, 0x54, 0xc3, 0x77, 0x4b, 0xc2, + 0xca, 0x3a, 0xe6, 0x98, 0xe2, 0xa2, 0xaa, 0x01, 0xcc, 0xc5, 0xc3, 0xf0, 0xd1, 0x77, 0xf5, 0x5a, 0xbc, 0x93, 0xf3, + 0x2a, 0xdf, 0xd3, 0x38, 0x1f, 0x32, 0xdd, 0xd9, 0x0d, 0xa3, 0xb5, 0x79, 0x6e, 0x29, 0xd8, 0xbe, 0x1f, 0x78, 0xf5, + 0x04, 0xd9, 0xda, 0x3c, 0xd8, 0x54, 0x66, 0x0d, 0x59, 0xf9, 0x3a, 0x41, 0xd5, 0x5e, 0xbd, 0xaa, 0x14, 0xb6, 0x22, + 0x40, 0xa5, 0xe0, 0xa3, 0xad, 0xfc, 0x27, 0xda, 0xe6, 0xdb, 0x73, 0xa8, 0x0c, 0x0f, 0xe4, 0xc9, 0x50, 0xd5, 0x03, + 0x2e, 0xca, 0x0f, 0x01, 0x2c, 0x7e, 0x64, 0x22, 0xd7, 0xee, 0xba, 0x40, 0xe6, 0x4c, 0xc5, 0x12, 0x2f, 0xfb, 0x74, + 0x90, 0x5a, 0x79, 0x28, 0x95, 0x60, 0xdb, 0x73, 0x53, 0x70, 0xed, 0x43, 0xe4, 0xe2, 0x3e, 0x1b, 0xa4, 0xcb, 0x7a, + 0x18, 0x5d, 0x1b, 0xc8, 0xd7, 0x9b, 0x73, 0x9a, 0xb8, 0xb3, 0x74, 0x80, 0x73, 0x02, 0xb6, 0xc7, 0x9e, 0x3d, 0x7d, + 0x13, 0x67, 0xa8, 0x57, 0xe7, 0xf0, 0x97, 0x6b, 0x9c, 0xe3, 0x0c, 0xa5, 0x0f, 0x63, 0xb8, 0xc0, 0x5a, 0x63, 0x00, + 0x5f, 0x66, 0x49, 0x15, 0x78, 0xa4, 0x66, 0x46, 0x62, 0x75, 0x17, 0x81, 0x68, 0xa9, 0xc3, 0xdb, 0x71, 0xe6, 0x03, + 0x51, 0x1b, 0xee, 0xf5, 0x99, 0x11, 0x0e, 0x27, 0x59, 0x5c, 0x3b, 0x67, 0x38, 0xb9, 0xdc, 0xe7, 0xb5, 0x13, 0x13, + 0xac, 0xbd, 0xc3, 0x53, 0x05, 0xf4, 0x68, 0x70, 0xaa, 0x58, 0x1a, 0x02, 0x31, 0x13, 0xc0, 0x9b, 0x39, 0x3c, 0xda, + 0x02, 0x9c, 0x8f, 0xd6, 0x38, 0xf8, 0x4a, 0x6b, 0x5d, 0x6d, 0x2a, 0x51, 0xd6, 0x6b, 0xdc, 0x9f, 0x66, 0x78, 0x94, + 0xe1, 0x79, 0x36, 0x08, 0x8e, 0x9b, 0x59, 0x16, 0x9a, 0x74, 0xad, 0x56, 0x4f, 0x9d, 0x19, 0x21, 0xb2, 0x3f, 0x2d, + 0xfd, 0x41, 0x3d, 0x40, 0xf8, 0x14, 0xb2, 0x80, 0x96, 0xf4, 0xdc, 0xdf, 0x86, 0x7d, 0xa7, 0x1a, 0x35, 0x62, 0x9e, + 0x58, 0x32, 0xd2, 0xf3, 0x3f, 0xca, 0x2c, 0xdb, 0x5a, 0x23, 0x9a, 0xdf, 0xee, 0x45, 0x0d, 0xdf, 0x5e, 0xa0, 0x65, + 0x2b, 0xcd, 0x76, 0x00, 0x51, 0xac, 0x71, 0x92, 0x0e, 0xd6, 0x48, 0xae, 0x56, 0xb1, 0x4d, 0x21, 0x3c, 0x99, 0x31, + 0xaa, 0x16, 0x85, 0x79, 0xba, 0x2d, 0x56, 0x28, 0x31, 0xfc, 0x2e, 0x76, 0x36, 0xa2, 0xf0, 0x52, 0x9a, 0x04, 0xc3, + 0x8d, 0x58, 0x10, 0x59, 0x13, 0xb9, 0x87, 0x59, 0x65, 0x19, 0x24, 0x88, 0x30, 0x22, 0xbf, 0xbd, 0x2e, 0x15, 0xf6, + 0x71, 0x38, 0xfb, 0xc7, 0xf8, 0x02, 0xc2, 0xcd, 0xdb, 0x84, 0x16, 0x43, 0x3a, 0x01, 0x36, 0x16, 0xe2, 0x10, 0x6e, + 0x25, 0xac, 0x56, 0xfd, 0x41, 0x57, 0x18, 0xf2, 0xec, 0x9e, 0xae, 0x2b, 0x1b, 0xda, 0xdd, 0x00, 0x5c, 0x75, 0x5b, + 0x6a, 0xae, 0x8d, 0xee, 0x87, 0x9a, 0xd7, 0xb5, 0xb8, 0x4b, 0x72, 0x0f, 0x64, 0x54, 0x6f, 0x60, 0xd7, 0x2c, 0xc0, + 0x4d, 0xe8, 0x2a, 0x3c, 0xc2, 0x0b, 0x6b, 0xc3, 0x69, 0x9e, 0x52, 0xa2, 0xe6, 0x05, 0x25, 0x78, 0xb8, 0x99, 0xb0, + 0x7e, 0x36, 0xc0, 0x23, 0x1f, 0x68, 0x7b, 0xff, 0x6d, 0x3c, 0x42, 0xa8, 0x20, 0x06, 0xa6, 0xd6, 0x65, 0x7b, 0x54, + 0xd9, 0xed, 0x9b, 0x4c, 0xc3, 0x30, 0x18, 0x23, 0xe6, 0x51, 0x68, 0xc4, 0x9c, 0x37, 0x1a, 0x68, 0x41, 0x46, 0x60, + 0xc4, 0xbc, 0x08, 0x5a, 0x5b, 0xd8, 0x67, 0x36, 0x83, 0xf6, 0x16, 0x08, 0x75, 0x39, 0xd0, 0x34, 0x0d, 0x0f, 0x6a, + 0x54, 0x0f, 0x9a, 0xfb, 0xe7, 0x9d, 0x8e, 0x3a, 0xa0, 0x48, 0x18, 0x5f, 0xfa, 0x49, 0x58, 0xd7, 0x70, 0x3b, 0xee, + 0xb1, 0x19, 0xb7, 0xb3, 0x6d, 0x50, 0x7d, 0xd9, 0xcf, 0x06, 0x83, 0xae, 0xf4, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x9e, + 0xe0, 0xa8, 0x16, 0xef, 0x8b, 0xde, 0xbc, 0xf2, 0xe6, 0xfe, 0x65, 0xcf, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, + 0x1f, 0xaa, 0xe2, 0x83, 0x1d, 0x75, 0x20, 0x0a, 0x5a, 0xda, 0xaa, 0x09, 0xa4, 0xd6, 0xcc, 0x2e, 0xd6, 0x4d, 0x85, + 0x0e, 0x05, 0x84, 0x21, 0x53, 0x55, 0x77, 0x77, 0x2a, 0x50, 0x0d, 0x71, 0x38, 0xf5, 0x1f, 0x5b, 0x23, 0xd6, 0x38, + 0xea, 0x8c, 0x22, 0x63, 0x24, 0x69, 0x97, 0x0f, 0x5e, 0xdd, 0x01, 0x2b, 0x01, 0x1f, 0xfd, 0xd8, 0x24, 0x19, 0x43, + 0x82, 0xb7, 0x2c, 0xd3, 0x86, 0x0f, 0xe1, 0x0e, 0x41, 0x79, 0x62, 0x63, 0x6d, 0xba, 0x4a, 0x16, 0x72, 0x55, 0x97, + 0xd7, 0x01, 0x7a, 0xde, 0x95, 0xbf, 0xb1, 0xe1, 0xc8, 0x82, 0x81, 0x65, 0x5b, 0xfb, 0x04, 0x3c, 0xf2, 0x71, 0x85, + 0x20, 0x7e, 0x29, 0x74, 0x62, 0x22, 0x45, 0x5f, 0xc1, 0x06, 0xc5, 0x73, 0x70, 0x10, 0x74, 0x12, 0x1c, 0x06, 0xef, + 0x32, 0xab, 0x49, 0x36, 0xb8, 0x35, 0x23, 0xf1, 0x7c, 0xb5, 0x6a, 0xa1, 0xc3, 0x7f, 0xcc, 0x63, 0xc8, 0xe3, 0x52, + 0xe1, 0x3e, 0xae, 0x14, 0xee, 0x60, 0x09, 0x48, 0xc6, 0x81, 0xae, 0x1d, 0xcb, 0x50, 0x8d, 0x0e, 0x71, 0xba, 0x5f, + 0x40, 0xd4, 0x66, 0x77, 0x2c, 0x81, 0x9e, 0x7d, 0xab, 0x80, 0xd5, 0xb5, 0x97, 0x25, 0x90, 0x11, 0xdc, 0xfd, 0x26, + 0x30, 0x2a, 0x44, 0xe3, 0xf3, 0x67, 0xde, 0x53, 0xe0, 0x89, 0xf3, 0xe7, 0x9a, 0x19, 0xd6, 0xbd, 0xa0, 0x37, 0xa6, + 0xf9, 0x78, 0x8c, 0x9b, 0x63, 0x0b, 0xce, 0xa3, 0x0e, 0xfc, 0xb4, 0x10, 0x3d, 0xea, 0x60, 0x97, 0x8a, 0xc7, 0x25, + 0x90, 0x43, 0xf4, 0x74, 0x06, 0x52, 0xc0, 0x4a, 0xc7, 0x56, 0x8b, 0x34, 0x41, 0xab, 0xd5, 0xe4, 0x82, 0xb4, 0x10, + 0x5a, 0xaa, 0x1b, 0xae, 0xb3, 0x29, 0xf8, 0x48, 0x83, 0x62, 0xe0, 0x0d, 0xd5, 0xd3, 0x18, 0xe1, 0x31, 0x5a, 0x8e, + 0xd8, 0x98, 0x2e, 0x72, 0x9d, 0xaa, 0x1e, 0x4f, 0x6c, 0x28, 0x5b, 0x66, 0x23, 0xc1, 0x1d, 0x75, 0xf0, 0xc4, 0xf0, + 0x97, 0x8f, 0x8c, 0x39, 0x48, 0x91, 0x99, 0xe4, 0x89, 0x49, 0xc0, 0x3c, 0xc9, 0x72, 0xa9, 0x98, 0x6d, 0xa6, 0x6b, + 0x6d, 0xcb, 0x21, 0x18, 0x76, 0xa4, 0x0b, 0x6e, 0xac, 0x28, 0xa3, 0x74, 0x4a, 0x54, 0x4f, 0x1d, 0x75, 0xd2, 0x09, + 0xe6, 0x09, 0x70, 0x7a, 0xef, 0x64, 0xcc, 0x1a, 0xe5, 0xad, 0xe8, 0x0c, 0x1d, 0x4e, 0xb1, 0xa8, 0x2e, 0x51, 0x67, + 0xe8, 0x70, 0x82, 0xf0, 0xac, 0x41, 0x72, 0x05, 0x1e, 0xc3, 0x5c, 0xfc, 0x1f, 0x29, 0xff, 0xcd, 0x61, 0x43, 0xd0, + 0xe5, 0xb7, 0xb0, 0x53, 0xd8, 0x28, 0x4a, 0x73, 0x02, 0x5e, 0x8b, 0xed, 0x33, 0x9c, 0x91, 0x49, 0x33, 0xf7, 0x01, + 0xf7, 0x4c, 0x2b, 0x8d, 0x5b, 0x8d, 0x0e, 0x33, 0x3c, 0xda, 0x4c, 0x8a, 0xcd, 0x5c, 0x9b, 0x79, 0x9a, 0xc1, 0xf9, + 0x5e, 0x8d, 0xc2, 0x95, 0x5f, 0x6c, 0x26, 0x85, 0xe5, 0x1d, 0x70, 0x9b, 0x23, 0x2c, 0x9a, 0x14, 0xe7, 0x78, 0xd6, + 0xfc, 0x8a, 0x67, 0xcd, 0x0f, 0x65, 0x46, 0x63, 0x81, 0x05, 0x04, 0xef, 0x83, 0x44, 0x3c, 0xab, 0x92, 0x47, 0x58, + 0x34, 0x4c, 0x79, 0x3c, 0x6b, 0x54, 0xa5, 0x9b, 0x0b, 0x2c, 0x1a, 0xa6, 0x74, 0xe3, 0x03, 0x9e, 0x35, 0xbe, 0xfe, + 0x8b, 0x49, 0x47, 0x29, 0xa0, 0xcb, 0x1c, 0x2d, 0x33, 0x3b, 0xc4, 0xab, 0xdf, 0xde, 0xbe, 0x6b, 0x5f, 0x77, 0x0e, + 0x27, 0xd8, 0xaf, 0x5f, 0x66, 0x70, 0x2c, 0xd3, 0x31, 0x6b, 0x02, 0x44, 0x33, 0xdc, 0x39, 0x9c, 0xe2, 0xce, 0x61, + 0xe6, 0x9a, 0x5a, 0xcf, 0x1a, 0xe4, 0x56, 0x87, 0x50, 0xd4, 0x51, 0x1a, 0xc2, 0xc7, 0x4f, 0x36, 0x9d, 0xa0, 0x1a, + 0x28, 0xd1, 0xe1, 0xa4, 0x06, 0x2a, 0xf8, 0x5e, 0xd4, 0xbe, 0xab, 0x7a, 0x15, 0x06, 0x59, 0x28, 0xa1, 0x70, 0xcd, + 0x0d, 0x78, 0x6a, 0x29, 0x06, 0x32, 0x61, 0x8a, 0x05, 0xca, 0x77, 0x40, 0x61, 0x94, 0x27, 0x66, 0xe8, 0xc1, 0x74, + 0x4c, 0xe2, 0xff, 0xcf, 0x93, 0x29, 0x87, 0x5e, 0x6e, 0x99, 0xad, 0xe9, 0xb9, 0xc9, 0x84, 0xc3, 0x07, 0x1e, 0xeb, + 0xff, 0xda, 0x81, 0x62, 0x03, 0x52, 0xfc, 0x7f, 0xe9, 0xe8, 0x42, 0x30, 0x42, 0x56, 0x94, 0x16, 0x0e, 0xf1, 0xbf, + 0x3f, 0xac, 0xa0, 0xfb, 0x62, 0xab, 0xfb, 0xc2, 0x74, 0x1f, 0x36, 0x6d, 0x54, 0x39, 0x69, 0x55, 0xc9, 0x92, 0xff, + 0x3a, 0xdd, 0xda, 0x02, 0x8d, 0xa8, 0xd1, 0xb3, 0x49, 0xd8, 0xe0, 0x7e, 0x3b, 0xdd, 0x81, 0xcc, 0x6b, 0x6e, 0xdf, + 0xe6, 0x84, 0xc3, 0x37, 0xb8, 0x53, 0xbd, 0x6c, 0x81, 0xf7, 0xa6, 0x32, 0xfa, 0xca, 0x38, 0xb4, 0x1c, 0x2c, 0x36, + 0x4d, 0xb9, 0x8d, 0xb1, 0x74, 0x72, 0x8a, 0x8d, 0x2b, 0x22, 0x54, 0xba, 0xbd, 0x04, 0xa5, 0xf8, 0x58, 0x37, 0x99, + 0xf9, 0xba, 0xd0, 0x89, 0xb9, 0x84, 0x6a, 0x98, 0xcf, 0xbb, 0x4b, 0x9d, 0x68, 0x39, 0xb7, 0x79, 0x77, 0x17, 0xd0, + 0x27, 0x68, 0x58, 0x1b, 0x81, 0xdd, 0x3e, 0x2b, 0x9c, 0x7e, 0xa7, 0x3a, 0x04, 0xc3, 0x03, 0xc8, 0x91, 0x16, 0xdb, + 0x07, 0x36, 0xad, 0x61, 0xd7, 0x45, 0xb3, 0x4c, 0xb4, 0xad, 0x36, 0x4d, 0xae, 0xdd, 0xc3, 0x7c, 0x1e, 0xf2, 0x14, + 0xbc, 0xb0, 0xfa, 0xf1, 0x1d, 0xec, 0xc6, 0x6d, 0x8d, 0x91, 0xa8, 0x2b, 0x99, 0x4a, 0xe8, 0x27, 0xb7, 0x98, 0x25, + 0x77, 0xc6, 0x8b, 0x51, 0x19, 0x7f, 0x1f, 0x13, 0xa9, 0x3e, 0xaa, 0x24, 0x39, 0xb0, 0xec, 0x6f, 0xb0, 0xe4, 0x16, + 0xcc, 0x13, 0xcb, 0x6a, 0x12, 0xeb, 0xe4, 0x2e, 0x58, 0x44, 0x69, 0x1a, 0x59, 0x1b, 0x06, 0xd4, 0x34, 0x63, 0xd5, + 0x83, 0xfb, 0x10, 0xe8, 0xa1, 0x57, 0x96, 0xd2, 0xae, 0xb3, 0xb4, 0xd6, 0xbd, 0x36, 0xdd, 0x6f, 0x0e, 0x28, 0xe0, + 0x0b, 0x03, 0xae, 0xe9, 0x5f, 0x4d, 0x22, 0x19, 0xb2, 0xaf, 0x9c, 0x15, 0x8f, 0x17, 0x85, 0xc1, 0x34, 0xd1, 0xd3, + 0x49, 0x36, 0x6f, 0x83, 0xa9, 0x5e, 0x36, 0xef, 0xdc, 0x62, 0xf7, 0x7d, 0x67, 0xbf, 0xef, 0xb0, 0xe8, 0x31, 0x93, + 0x91, 0x32, 0x53, 0xcc, 0x7f, 0xdf, 0xd9, 0xef, 0x3b, 0xbc, 0x3d, 0x98, 0x1b, 0x7f, 0xa1, 0x58, 0xb2, 0x33, 0x5c, + 0x82, 0x09, 0x79, 0xc0, 0xdd, 0xd4, 0xb2, 0x4c, 0x10, 0xd8, 0x5a, 0x02, 0xc4, 0xf9, 0x7c, 0x1a, 0x57, 0xbc, 0x1a, + 0x02, 0xee, 0xd3, 0xbb, 0xb6, 0x57, 0xa9, 0xc0, 0x63, 0x82, 0x46, 0xc4, 0xc4, 0xb6, 0x31, 0xef, 0x6a, 0x01, 0x97, + 0x47, 0x74, 0xa9, 0x27, 0x49, 0x80, 0x57, 0x35, 0x2a, 0x6f, 0x53, 0xa4, 0xfc, 0x22, 0x41, 0x8e, 0x2f, 0xf6, 0x88, + 0x2a, 0x06, 0xb0, 0x2a, 0x4b, 0xfa, 0x04, 0x52, 0xcf, 0x0f, 0x26, 0xfa, 0x79, 0x13, 0x79, 0xec, 0x0b, 0xb3, 0x9f, + 0x99, 0x9e, 0x16, 0x72, 0x31, 0x99, 0x82, 0x0f, 0x2d, 0xb0, 0x0c, 0x85, 0xa9, 0x57, 0xd9, 0xfa, 0xd7, 0x24, 0x37, + 0x01, 0x14, 0x4e, 0x37, 0x65, 0x42, 0x33, 0xbd, 0xa0, 0xb9, 0xb1, 0x24, 0xe5, 0x62, 0xf2, 0x48, 0xde, 0xbe, 0x04, + 0xec, 0xa6, 0x44, 0x37, 0x76, 0xe4, 0xbd, 0x85, 0x1d, 0x80, 0x33, 0xc2, 0x76, 0x55, 0x7c, 0xa8, 0x40, 0xe7, 0x8f, + 0x73, 0xc2, 0x76, 0x55, 0x7d, 0xc2, 0x6c, 0xf6, 0x94, 0x6c, 0x0c, 0xb7, 0x17, 0x67, 0x8d, 0x1c, 0x1d, 0x75, 0xd2, + 0xbc, 0xeb, 0x89, 0x81, 0x05, 0x68, 0x00, 0xdc, 0xad, 0xed, 0x59, 0xde, 0xdd, 0x10, 0xd0, 0xbb, 0x64, 0xd2, 0x5e, + 0x97, 0x9b, 0x94, 0xd5, 0xaa, 0x53, 0x51, 0xc1, 0x02, 0x4f, 0x83, 0xbd, 0x40, 0xed, 0xd7, 0x0e, 0x8a, 0x73, 0x95, + 0x6d, 0x9a, 0x9e, 0x97, 0x7d, 0x77, 0x77, 0x2c, 0x32, 0xb6, 0x69, 0x6f, 0x77, 0x10, 0x09, 0xcb, 0x09, 0xeb, 0x80, + 0x13, 0xae, 0x6a, 0x07, 0x04, 0xe8, 0x3a, 0x10, 0xb9, 0xb1, 0x24, 0xcb, 0x75, 0x65, 0x74, 0x1f, 0xf8, 0xdd, 0x52, + 0x22, 0xdd, 0x68, 0x4b, 0x82, 0xe9, 0x13, 0x8c, 0x9a, 0xce, 0x3c, 0x8a, 0x5c, 0x7b, 0xef, 0x77, 0x53, 0xb4, 0xf5, + 0xaf, 0x0f, 0x63, 0xb3, 0x3d, 0x4c, 0x0c, 0x65, 0x10, 0x03, 0xbd, 0x8f, 0x78, 0xb7, 0xd1, 0xc8, 0x10, 0x28, 0x64, + 0xb2, 0x01, 0x96, 0x89, 0xd7, 0xa2, 0x1f, 0x1c, 0x18, 0x78, 0x54, 0x09, 0x08, 0x53, 0x10, 0x42, 0xc2, 0xae, 0x0d, + 0xc2, 0x86, 0xcb, 0x55, 0xcb, 0x85, 0x8d, 0x54, 0x1b, 0x3a, 0xf8, 0x7f, 0x85, 0xcb, 0x56, 0xcf, 0x2c, 0x17, 0xc5, + 0xe0, 0x66, 0x6e, 0xc0, 0x22, 0x41, 0x7a, 0xb4, 0xd9, 0x1e, 0x8a, 0xbb, 0x73, 0xb1, 0xd9, 0x10, 0x90, 0x98, 0xc3, + 0x04, 0x45, 0xc3, 0xb9, 0x31, 0xc6, 0x2a, 0xa9, 0xb4, 0xac, 0x35, 0x89, 0x39, 0xf0, 0xa5, 0x0b, 0xd7, 0x7d, 0x79, + 0x9b, 0x32, 0x7c, 0x97, 0x0a, 0x7c, 0x03, 0x9e, 0x34, 0xa9, 0xc4, 0xee, 0xf1, 0x82, 0x62, 0x4d, 0x74, 0xd7, 0xb3, + 0xb7, 0x05, 0xac, 0xb3, 0xd9, 0x23, 0x22, 0xf8, 0x5d, 0xfd, 0x6a, 0x83, 0xef, 0x16, 0xfe, 0x0a, 0xd6, 0xcf, 0xc1, + 0x49, 0x8a, 0x45, 0x43, 0x36, 0x0b, 0x77, 0x64, 0x40, 0xb9, 0x8a, 0x5f, 0x0e, 0x53, 0xb7, 0x8a, 0xe1, 0xda, 0xc7, + 0x57, 0xfc, 0x61, 0xa3, 0xdd, 0x86, 0x2a, 0x8b, 0xdb, 0xbd, 0x29, 0x1a, 0xb2, 0x6a, 0x7a, 0x47, 0xe6, 0x46, 0x4a, + 0xfd, 0xeb, 0x03, 0x6e, 0x6d, 0xb5, 0xef, 0xa7, 0xf9, 0xd6, 0xa3, 0x73, 0xd5, 0xb4, 0x4f, 0xad, 0x15, 0xc1, 0xc1, + 0xcf, 0x16, 0x6e, 0x6e, 0x0d, 0x38, 0x80, 0x9f, 0xbf, 0xa3, 0x79, 0x9c, 0x41, 0x74, 0x7a, 0xab, 0x19, 0x5f, 0xc5, + 0x7f, 0x8e, 0x1a, 0x71, 0x2f, 0xfd, 0x33, 0xf9, 0x73, 0xd4, 0x40, 0x3d, 0x14, 0xcf, 0x6f, 0x57, 0x6c, 0xb6, 0x82, + 0x60, 0x6b, 0xf7, 0x8e, 0xf0, 0xeb, 0xb0, 0x24, 0xd7, 0x34, 0xe7, 0xd9, 0xca, 0x3d, 0x45, 0xb7, 0x72, 0xef, 0xf4, + 0xac, 0xcc, 0xeb, 0x4a, 0xab, 0x58, 0x0e, 0x73, 0x08, 0x2c, 0x1c, 0xef, 0x35, 0x7b, 0xfd, 0x56, 0xf3, 0xc1, 0xc0, + 0xfe, 0x6b, 0x22, 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x06, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, + 0xe9, 0xe3, 0x0c, 0x59, 0xdf, 0x93, 0xd5, 0x8a, 0xb9, 0x68, 0xd6, 0x4e, 0x83, 0x5f, 0xc6, 0x66, 0x3a, 0x6c, 0x27, + 0x9d, 0xae, 0x17, 0x63, 0x49, 0x03, 0x22, 0x4d, 0x63, 0x06, 0x81, 0xa4, 0x96, 0x86, 0xc3, 0x9a, 0xdf, 0x46, 0x69, + 0x75, 0x7f, 0x04, 0x29, 0x3f, 0x44, 0x29, 0x3f, 0x22, 0x10, 0x40, 0xdb, 0x32, 0x47, 0x65, 0x43, 0xde, 0x77, 0xe9, + 0x9e, 0x71, 0x66, 0x68, 0xf0, 0xd5, 0xaa, 0x55, 0x0d, 0x53, 0x14, 0xf5, 0x61, 0x2e, 0xd7, 0x58, 0x90, 0x37, 0xa0, + 0x6b, 0x56, 0x44, 0xf4, 0x42, 0x57, 0x79, 0x78, 0x89, 0x17, 0x4b, 0x02, 0x4e, 0xfa, 0x3d, 0xd1, 0x2b, 0xc8, 0xe5, + 0xc3, 0x18, 0x7c, 0xcc, 0x30, 0xef, 0xeb, 0x7e, 0x31, 0x18, 0xa0, 0xd4, 0x39, 0x9d, 0xa5, 0x26, 0xe2, 0x4a, 0xe0, + 0x97, 0x5c, 0x80, 0x5f, 0xb2, 0x42, 0xac, 0x5f, 0x0c, 0xc8, 0xbd, 0x2c, 0x96, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, + 0x61, 0x68, 0x60, 0x6a, 0x86, 0x65, 0x2e, 0xb2, 0xc1, 0x62, 0xce, 0x5a, 0x02, 0xc1, 0xcd, 0x80, 0xbb, 0xd4, 0x86, + 0x44, 0x63, 0x0d, 0x14, 0xdd, 0x46, 0xa1, 0x99, 0xd1, 0xd3, 0xad, 0x36, 0xfa, 0x91, 0xc3, 0x0b, 0x73, 0x0d, 0x63, + 0x11, 0xc8, 0x5c, 0xae, 0x7a, 0xec, 0x2f, 0x3f, 0x6c, 0x56, 0x18, 0xbc, 0xc2, 0x98, 0xec, 0x94, 0x56, 0x89, 0x66, + 0x7c, 0x95, 0x27, 0x8e, 0x21, 0xc8, 0xc4, 0x52, 0xe9, 0x86, 0x63, 0xe2, 0x4a, 0xfa, 0x4c, 0x0c, 0xd9, 0x6e, 0x78, + 0x66, 0x2e, 0x74, 0xb3, 0xfd, 0xc3, 0xb9, 0x9d, 0x73, 0xc2, 0x8d, 0x56, 0xd2, 0x68, 0xa3, 0x9e, 0x19, 0xaa, 0xea, + 0x82, 0xf9, 0x3d, 0x74, 0x5a, 0x5a, 0xec, 0x5c, 0xbd, 0xbb, 0xe1, 0xbb, 0x70, 0x65, 0xfc, 0x2d, 0x56, 0x85, 0x56, + 0x64, 0xb8, 0xdd, 0x42, 0xde, 0x9c, 0xe9, 0xa1, 0x57, 0xe4, 0x42, 0x75, 0xf8, 0x8b, 0xba, 0xc2, 0x3c, 0x15, 0x19, + 0x35, 0x84, 0x47, 0xbf, 0xd7, 0x19, 0x28, 0xff, 0x60, 0x62, 0x32, 0x67, 0xc9, 0x0d, 0x2d, 0x44, 0xfc, 0xe3, 0x0b, + 0x61, 0x62, 0x55, 0xed, 0xc1, 0x40, 0xf6, 0x4c, 0xc5, 0x3d, 0xb8, 0x35, 0xe1, 0x63, 0xce, 0x46, 0xe9, 0x5e, 0xf4, + 0x63, 0x43, 0x34, 0x7e, 0x8c, 0x7e, 0x04, 0x77, 0x67, 0xf7, 0x2e, 0x61, 0x19, 0x17, 0xc2, 0xdf, 0x63, 0x3d, 0x2c, + 0x55, 0xca, 0x58, 0x7b, 0xdd, 0x72, 0x78, 0x21, 0xf5, 0x26, 0x8b, 0x1f, 0x3a, 0x62, 0x6d, 0x53, 0xb0, 0x0e, 0x29, + 0x29, 0x3c, 0xbb, 0x62, 0x6e, 0xb5, 0x98, 0xbb, 0xd4, 0x12, 0xfe, 0xfa, 0xea, 0x61, 0xa9, 0x82, 0x86, 0x83, 0xd0, + 0x95, 0xb6, 0x90, 0x00, 0x03, 0x97, 0xd2, 0xa7, 0xd3, 0x9d, 0x49, 0x64, 0x96, 0xc5, 0xf0, 0xee, 0x41, 0x05, 0xf3, + 0xdf, 0xd9, 0x46, 0x58, 0x15, 0xb8, 0x5c, 0xa9, 0xa2, 0x5e, 0x4a, 0x02, 0x01, 0xe8, 0x4b, 0xef, 0x41, 0x79, 0x51, + 0x74, 0x1b, 0x0d, 0x09, 0x5a, 0x58, 0x6a, 0xae, 0x55, 0x31, 0xdd, 0x0f, 0xdf, 0xd3, 0x0b, 0x3e, 0xbc, 0x43, 0xda, + 0xc6, 0xa3, 0x96, 0x94, 0x50, 0xbb, 0x83, 0xf6, 0xc1, 0x2a, 0x3b, 0x28, 0xff, 0x36, 0xa6, 0xc8, 0xe6, 0xf7, 0xd9, + 0x0f, 0xd4, 0x75, 0x38, 0x70, 0x05, 0xab, 0x5e, 0xca, 0x28, 0x18, 0xc2, 0x3e, 0x60, 0x1f, 0x8b, 0x24, 0xa3, 0xd9, + 0x94, 0x81, 0xba, 0xdf, 0x16, 0xad, 0xe6, 0xf6, 0xa4, 0xee, 0x37, 0x64, 0x9c, 0x7d, 0x84, 0x71, 0xf6, 0x51, 0xe0, + 0xc5, 0x22, 0xc9, 0x1f, 0x32, 0xd6, 0x38, 0x56, 0x4d, 0x81, 0x8e, 0x3a, 0xc0, 0x9d, 0x81, 0x03, 0x0f, 0xd8, 0xa2, + 0x1c, 0x1c, 0x50, 0x67, 0x71, 0x4f, 0x1b, 0x99, 0xf7, 0xf6, 0x84, 0xda, 0x45, 0x2c, 0x70, 0xb3, 0x66, 0xa6, 0x05, + 0xad, 0x15, 0xc6, 0x79, 0x3c, 0xe0, 0x6d, 0x9e, 0xd5, 0xe2, 0x27, 0x6c, 0x58, 0x53, 0xd5, 0x6f, 0xa0, 0x39, 0xaa, + 0x05, 0xb9, 0x79, 0x62, 0xbc, 0x55, 0x49, 0x3f, 0x8a, 0x06, 0x96, 0x53, 0x21, 0x86, 0x64, 0xf4, 0x5b, 0x83, 0xe0, + 0x56, 0x7b, 0xb5, 0xe2, 0x1e, 0xf1, 0x45, 0xcd, 0x5b, 0xcd, 0xdc, 0x02, 0xd0, 0x22, 0x8e, 0xca, 0x7b, 0x93, 0x08, + 0xbc, 0x6f, 0xcb, 0x08, 0x69, 0xcb, 0xbe, 0x7d, 0x34, 0xb1, 0x54, 0x6c, 0xbe, 0xa3, 0x93, 0x41, 0x1a, 0xd9, 0x11, + 0x45, 0xf8, 0xba, 0x84, 0x24, 0x5c, 0x25, 0x5d, 0xab, 0x4c, 0xce, 0x99, 0x4a, 0x39, 0xbe, 0x2e, 0xa4, 0xd4, 0x57, + 0xf6, 0x4b, 0xe2, 0xea, 0x4e, 0x46, 0xe0, 0xeb, 0x09, 0xd3, 0xef, 0x68, 0x31, 0x61, 0xe0, 0x57, 0xe4, 0x6f, 0xc7, + 0x52, 0x4a, 0x2e, 0x9f, 0x88, 0xb8, 0x4f, 0x31, 0xbc, 0xf8, 0x39, 0xc0, 0xda, 0x84, 0x40, 0x29, 0x71, 0x11, 0x2e, + 0x88, 0xde, 0x14, 0xf2, 0xf6, 0x2e, 0x2e, 0xb0, 0x73, 0x00, 0x2c, 0x9d, 0x26, 0x01, 0xfe, 0xe5, 0x63, 0x3e, 0x56, + 0x63, 0x4e, 0x8d, 0xae, 0xdf, 0xfd, 0x4e, 0xae, 0x81, 0xde, 0x96, 0x8e, 0x82, 0xfd, 0xd6, 0x00, 0x72, 0xe1, 0x2e, + 0x0c, 0x2e, 0xbe, 0xc2, 0xda, 0xb2, 0x30, 0xde, 0x58, 0x00, 0xbd, 0xbf, 0x33, 0xb0, 0x60, 0xc3, 0x1c, 0x53, 0x78, + 0x2e, 0x75, 0xc2, 0x74, 0x10, 0x15, 0xe4, 0x49, 0xf9, 0x20, 0x66, 0xad, 0xf6, 0x5b, 0x36, 0x86, 0x3b, 0x8c, 0xe4, + 0xdb, 0x85, 0x13, 0x07, 0x1e, 0x90, 0x69, 0x32, 0xdb, 0xec, 0x1b, 0x1f, 0x79, 0xe4, 0xf5, 0x38, 0xde, 0xd5, 0x52, + 0x98, 0x6f, 0x56, 0x74, 0x8d, 0x21, 0x14, 0x45, 0xd8, 0xef, 0x17, 0x15, 0x53, 0x54, 0x19, 0xb4, 0x41, 0xc3, 0xf2, + 0x46, 0xfc, 0x02, 0x67, 0x0c, 0xad, 0x17, 0xb2, 0x77, 0x74, 0xd6, 0xe1, 0xcc, 0x61, 0xc6, 0x94, 0xc0, 0xa8, 0xb4, + 0x2c, 0xe8, 0x04, 0x1c, 0x9d, 0xab, 0x0f, 0xa2, 0xe2, 0xea, 0x58, 0x01, 0x78, 0x92, 0x29, 0xfc, 0x93, 0x6f, 0x82, + 0x75, 0xbf, 0x55, 0x33, 0x4c, 0xfd, 0x45, 0x6f, 0xbb, 0x96, 0x2f, 0x43, 0x1c, 0x69, 0x63, 0x08, 0xad, 0x73, 0x7b, + 0x07, 0x28, 0xe2, 0x82, 0x5e, 0xa4, 0x1a, 0x5f, 0xab, 0xc5, 0xd0, 0xac, 0xaf, 0x71, 0x1d, 0xd3, 0x06, 0x51, 0xac, + 0xbb, 0x26, 0xbe, 0xae, 0xde, 0x1f, 0x55, 0xa9, 0x82, 0x33, 0x48, 0x20, 0xac, 0xca, 0xcb, 0x86, 0x54, 0x92, 0x4b, + 0xd3, 0xa9, 0x34, 0x9d, 0x56, 0x08, 0xe5, 0xd2, 0x93, 0xf2, 0xfe, 0x15, 0x42, 0x18, 0x98, 0x32, 0x3b, 0xb0, 0x4a, + 0x6d, 0x61, 0x15, 0xbc, 0x7a, 0xb1, 0x81, 0x55, 0x12, 0x8e, 0xe7, 0x12, 0x8d, 0x8a, 0x0a, 0x87, 0x0c, 0xe9, 0x0b, + 0xb1, 0x08, 0x12, 0x00, 0x8b, 0xde, 0x65, 0x2e, 0xef, 0x7b, 0x38, 0x14, 0xf6, 0x24, 0x93, 0x70, 0xba, 0x09, 0xcd, + 0xe1, 0x61, 0x5a, 0xd5, 0xf3, 0x08, 0x01, 0x4b, 0xcf, 0x31, 0x3c, 0x48, 0xfc, 0xfd, 0x87, 0x50, 0x9d, 0x05, 0x79, + 0xfa, 0x2f, 0x51, 0x12, 0x1a, 0xfb, 0xcf, 0xf1, 0xd0, 0x21, 0x61, 0x38, 0xf0, 0xcd, 0x11, 0x56, 0x38, 0xb8, 0x55, + 0xc4, 0x67, 0x70, 0x87, 0x8f, 0x75, 0xe8, 0x01, 0x60, 0x09, 0xc5, 0x21, 0xc8, 0x37, 0x50, 0xcc, 0xe0, 0x80, 0x26, + 0xcb, 0xf0, 0x02, 0x17, 0xac, 0x16, 0xca, 0xfb, 0xdb, 0x96, 0x97, 0xd2, 0x6a, 0x97, 0xbc, 0xc6, 0x1c, 0xa8, 0xfc, + 0x0c, 0x2f, 0x7c, 0x85, 0x79, 0x29, 0xd9, 0x7d, 0xe1, 0x6b, 0x07, 0xf4, 0x14, 0x02, 0x46, 0xba, 0xdf, 0x6b, 0xc2, + 0x3d, 0x45, 0x2f, 0x73, 0x71, 0xd8, 0x76, 0xd0, 0xbd, 0xc0, 0x5c, 0x5d, 0x55, 0x59, 0x73, 0x30, 0x85, 0x06, 0x07, + 0x55, 0x38, 0x23, 0x30, 0x57, 0x2f, 0xca, 0x82, 0x73, 0x10, 0xef, 0x7b, 0xc2, 0xe4, 0x94, 0xd1, 0x00, 0x5e, 0x64, + 0xe5, 0xa3, 0x53, 0x3d, 0x0e, 0x2e, 0xe3, 0x86, 0x4d, 0x7c, 0x21, 0x7c, 0x2a, 0xb0, 0x92, 0xd6, 0x38, 0x34, 0xa2, + 0x23, 0x3a, 0x07, 0xb3, 0x0d, 0xa0, 0xe0, 0xee, 0x7c, 0xd8, 0x58, 0xa8, 0xe0, 0x31, 0xd8, 0xda, 0xdb, 0xcd, 0x84, + 0x38, 0x93, 0xa6, 0xe0, 0x6e, 0xdb, 0x20, 0x83, 0x37, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, + 0x84, 0x27, 0x28, 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xa2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x3a, 0x6a, 0x20, + 0x2a, 0x6a, 0xa0, 0x02, 0x6a, 0x20, 0xeb, 0xdb, 0xbf, 0x80, 0x85, 0xb0, 0x11, 0xaa, 0x44, 0x10, 0x10, 0x61, 0xae, + 0x0d, 0x1f, 0x50, 0x24, 0x21, 0xe4, 0x0d, 0xa0, 0x62, 0x4a, 0x5e, 0x82, 0xd1, 0x38, 0xbc, 0xde, 0x03, 0xee, 0x97, + 0x96, 0x61, 0xf0, 0x9c, 0x82, 0xc9, 0x7f, 0xeb, 0xf3, 0xa1, 0x7a, 0xb9, 0x3a, 0x08, 0xe1, 0x17, 0x10, 0x2b, 0xc2, + 0xf1, 0x17, 0xbf, 0x00, 0xd9, 0x54, 0x58, 0x1e, 0x1c, 0x48, 0x10, 0xf8, 0x21, 0x8a, 0x70, 0xc0, 0x33, 0xbc, 0xcc, + 0x36, 0x88, 0x9e, 0x9f, 0x95, 0xaa, 0x66, 0x25, 0x83, 0x59, 0x15, 0x9e, 0xc6, 0xd1, 0x35, 0x61, 0x20, 0xb8, 0x50, + 0xbb, 0x6f, 0x10, 0x02, 0x65, 0xcb, 0x8d, 0xa1, 0x4b, 0x4f, 0xc1, 0x7c, 0x34, 0x8e, 0xde, 0x32, 0x78, 0xd2, 0xd6, + 0x98, 0xfc, 0x33, 0x6d, 0x1e, 0xb8, 0x4f, 0xf7, 0xa2, 0x46, 0xe0, 0xa4, 0x4e, 0x51, 0xf2, 0xb7, 0xe4, 0x22, 0x8e, + 0x9a, 0x97, 0x11, 0x6a, 0xc0, 0xbf, 0x0d, 0x8e, 0xba, 0x34, 0xa1, 0xa3, 0x91, 0x0f, 0x7e, 0x93, 0x11, 0xb3, 0xc9, + 0x56, 0x2b, 0x51, 0x11, 0xf4, 0xc4, 0x6e, 0x30, 0x60, 0x25, 0x5e, 0x00, 0xfb, 0x60, 0x39, 0x58, 0xf2, 0x4e, 0xc4, + 0xca, 0x9f, 0x52, 0x18, 0xac, 0x9e, 0x33, 0x84, 0x70, 0x16, 0xc4, 0x6c, 0xfc, 0xcf, 0x67, 0x1a, 0xae, 0x9f, 0x9f, + 0xaf, 0x63, 0x44, 0xa4, 0x0f, 0x22, 0x57, 0x63, 0x47, 0x44, 0x10, 0xb6, 0x4c, 0xf7, 0x5d, 0x99, 0x1f, 0xbc, 0x75, + 0xf5, 0xc0, 0x86, 0x8b, 0x03, 0x03, 0x6a, 0x14, 0x18, 0xad, 0xe0, 0x9c, 0x94, 0x03, 0x07, 0x25, 0x84, 0x66, 0x45, + 0x3c, 0x25, 0x97, 0x10, 0x09, 0x2f, 0x43, 0x5d, 0x30, 0x2c, 0x08, 0x24, 0xa8, 0x29, 0x48, 0x50, 0x99, 0xaf, 0x3d, + 0x82, 0x59, 0xe7, 0x66, 0xb6, 0x53, 0xd4, 0x75, 0x41, 0x7e, 0x7e, 0xd1, 0xf1, 0x08, 0x58, 0xda, 0x83, 0x83, 0x02, + 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, 0xc0, 0x40, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0xda, 0x78, 0x1d, 0x18, 0x5b, + 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x3d, 0x9d, 0x6e, 0x47, 0x48, 0xec, 0x7d, 0xd4, + 0x26, 0xd0, 0x98, 0x23, 0xdd, 0xd5, 0xc6, 0xfc, 0x5a, 0xd3, 0x23, 0x56, 0x93, 0x90, 0x2e, 0x48, 0x97, 0xe7, 0xd3, + 0x9e, 0xc1, 0x15, 0xab, 0x34, 0x72, 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x17, + 0x49, 0xc9, 0x86, 0x61, 0x06, 0x61, 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0xb3, 0x7f, 0x4a, 0x1f, + 0x6c, 0xba, 0xf6, 0xe6, 0x11, 0x40, 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x36, 0x2a, 0xb3, 0xb0, 0x96, 0xb1, 0x95, + 0xdb, 0xf6, 0x18, 0x7b, 0x27, 0xb6, 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x88, 0x75, 0x6d, + 0xc8, 0x46, 0x1b, 0xda, 0x37, 0x4f, 0xc2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x39, 0x2e, 0xc1, 0x21, 0xbc, 0xf0, 0x08, + 0x7f, 0x0b, 0x2c, 0x52, 0x81, 0x19, 0x96, 0xab, 0x15, 0xd4, 0xf3, 0x78, 0x9f, 0x6d, 0x06, 0x27, 0x95, 0x1b, 0x63, + 0x97, 0x76, 0xe2, 0x71, 0xd9, 0x84, 0xc4, 0x19, 0xf4, 0xeb, 0x2b, 0xa2, 0xde, 0x7e, 0x3b, 0x7d, 0xe2, 0xdf, 0x2b, + 0x73, 0x3b, 0x10, 0x1b, 0xd6, 0x1b, 0xac, 0x3e, 0x80, 0x96, 0xbf, 0xca, 0xfc, 0x43, 0x65, 0xc1, 0x4d, 0x82, 0xda, + 0x5c, 0xc4, 0x2e, 0xeb, 0x22, 0x46, 0x6a, 0x8b, 0xbb, 0x43, 0x88, 0x7f, 0xb5, 0x15, 0xc5, 0x80, 0x27, 0x15, 0xff, + 0x1c, 0xa3, 0x2e, 0x84, 0xa2, 0xb6, 0x1e, 0x36, 0x40, 0x69, 0x97, 0xeb, 0x4a, 0x8c, 0x0c, 0x09, 0xe4, 0x5b, 0x17, + 0x5e, 0xd0, 0x9c, 0x44, 0x0a, 0xe4, 0xe4, 0x20, 0x2a, 0x69, 0xb6, 0x21, 0xcc, 0x75, 0xb7, 0x70, 0xcc, 0x5c, 0x6d, + 0xd0, 0x22, 0x7e, 0x01, 0xec, 0x0c, 0x37, 0x92, 0xa5, 0x03, 0x9f, 0xaa, 0x81, 0xcf, 0xaf, 0xb9, 0xa1, 0x28, 0x0a, + 0xf5, 0xde, 0xd9, 0x47, 0xe6, 0xe0, 0x77, 0x1a, 0x88, 0x8f, 0xd4, 0xe9, 0x48, 0x36, 0x42, 0xad, 0x39, 0x3b, 0x5e, + 0xb6, 0x19, 0x61, 0x50, 0xd8, 0xe8, 0x7d, 0x15, 0xb2, 0x8a, 0x9d, 0x9d, 0x8a, 0x60, 0x4e, 0x5f, 0x54, 0xe5, 0x9c, + 0xca, 0x2d, 0xa3, 0x5a, 0x6a, 0x1a, 0x20, 0xc2, 0x95, 0x4f, 0x24, 0xef, 0x33, 0x13, 0xfe, 0xc1, 0x60, 0x5c, 0x3d, + 0x52, 0xf8, 0xfb, 0x5d, 0xb1, 0x43, 0xb6, 0xa3, 0xc3, 0x6d, 0x04, 0xcd, 0x0b, 0x15, 0x3c, 0xe0, 0xa8, 0x64, 0x09, + 0x91, 0x22, 0x97, 0xfb, 0xaa, 0x66, 0xca, 0x76, 0x1d, 0x21, 0x84, 0xb4, 0xc7, 0x59, 0x37, 0xb4, 0x7a, 0xe8, 0x91, + 0x2a, 0xca, 0xe1, 0x16, 0xcd, 0x75, 0x01, 0x2a, 0x8c, 0x40, 0xba, 0xfc, 0xcc, 0xee, 0x52, 0x09, 0xd1, 0xcb, 0xd7, + 0x2e, 0x84, 0xb1, 0xb3, 0xb2, 0xc4, 0x85, 0x19, 0xb5, 0x0d, 0xa3, 0xeb, 0x36, 0x86, 0xb3, 0x81, 0x31, 0xd3, 0xa0, + 0xa4, 0x05, 0xa1, 0xae, 0xbb, 0xf4, 0x22, 0x33, 0x81, 0x1e, 0x73, 0x42, 0x1b, 0x0c, 0x4f, 0x89, 0x06, 0xcb, 0xa6, + 0x02, 0x2c, 0xf8, 0x96, 0x45, 0x6a, 0x6d, 0x36, 0x59, 0xfc, 0x51, 0xc7, 0xe6, 0x69, 0xbf, 0xbc, 0x62, 0x9e, 0x0b, + 0x47, 0xdd, 0x9e, 0x67, 0x3e, 0x1e, 0xdd, 0xd3, 0x37, 0x57, 0x2f, 0x5e, 0xbe, 0x7e, 0xb5, 0x5a, 0xb5, 0x59, 0xb3, + 0x7d, 0x82, 0x7f, 0xd2, 0x65, 0x3c, 0xd8, 0x32, 0x0a, 0xd0, 0xc1, 0xc1, 0x3e, 0x37, 0x2e, 0x3c, 0x9f, 0xf9, 0x1c, + 0xe2, 0x06, 0xe9, 0x01, 0xce, 0x8a, 0x32, 0x26, 0xc8, 0x6d, 0xd4, 0x8b, 0xee, 0x22, 0x50, 0x42, 0x55, 0xe4, 0xef, + 0xc3, 0xe6, 0xec, 0xf7, 0x20, 0x30, 0x11, 0xd4, 0x87, 0x08, 0x20, 0x10, 0xaf, 0x14, 0x17, 0x84, 0xf9, 0x04, 0x88, + 0xe2, 0xbd, 0x00, 0xce, 0xd4, 0x44, 0xad, 0x5a, 0xa8, 0xb8, 0x00, 0x92, 0x68, 0xc3, 0x51, 0xd2, 0x23, 0x13, 0xc0, + 0x1b, 0x82, 0x52, 0xda, 0x5f, 0xdd, 0xdc, 0xb9, 0x4b, 0xe5, 0xa8, 0xd7, 0x4a, 0x73, 0x3c, 0x75, 0x9f, 0x53, 0xf8, + 0x9c, 0x76, 0xfd, 0xe9, 0x20, 0x0e, 0x73, 0xbc, 0x20, 0xe2, 0xd0, 0x3f, 0x8b, 0xb8, 0x9c, 0x17, 0xec, 0x0b, 0x97, + 0x0b, 0x95, 0x2e, 0x6f, 0x53, 0x99, 0xdc, 0x36, 0x47, 0x87, 0x71, 0x91, 0xdc, 0x36, 0x55, 0x72, 0x8b, 0xf0, 0x5d, + 0x2a, 0x93, 0x3b, 0x9b, 0x72, 0xd7, 0x54, 0x70, 0xf3, 0x85, 0x05, 0x1c, 0x8a, 0xb6, 0x68, 0x63, 0xb1, 0x59, 0xd4, + 0xa6, 0xb8, 0xa2, 0x01, 0x06, 0xff, 0xbe, 0x63, 0xe3, 0x87, 0xe1, 0x4b, 0x70, 0x69, 0xd2, 0x44, 0x7e, 0x02, 0xe9, + 0xa7, 0x55, 0x19, 0xb8, 0x4f, 0x49, 0xab, 0x3b, 0xbd, 0x10, 0xcd, 0x76, 0xb7, 0xd1, 0x98, 0xc2, 0xde, 0xcd, 0x48, + 0xee, 0x8b, 0x4d, 0x1b, 0x26, 0xbe, 0xce, 0x7e, 0xb6, 0x5a, 0xed, 0xe7, 0xc8, 0x6c, 0xb8, 0x09, 0x8b, 0x75, 0x7f, + 0x3a, 0xc0, 0x2d, 0xfc, 0x3c, 0x43, 0x68, 0xc9, 0xfa, 0xd3, 0x01, 0x61, 0xfd, 0x69, 0xa3, 0x3d, 0xb0, 0x86, 0x76, + 0x66, 0x2b, 0xae, 0x21, 0x84, 0xe6, 0x74, 0x70, 0x64, 0x4a, 0x4a, 0x97, 0x6f, 0xbf, 0x68, 0x15, 0xd0, 0x4f, 0xd5, + 0x82, 0x97, 0x49, 0xdc, 0x81, 0xbe, 0xe8, 0x85, 0x7d, 0xba, 0xb5, 0x20, 0xc7, 0x47, 0x95, 0xab, 0x3d, 0x45, 0xd8, + 0xf4, 0xa4, 0x0e, 0x8b, 0x43, 0xd3, 0x8c, 0xeb, 0x52, 0xba, 0xef, 0x50, 0x33, 0xf2, 0xd1, 0xc1, 0x02, 0x10, 0xa4, + 0x82, 0x47, 0x56, 0xb8, 0x70, 0x4a, 0x21, 0x5c, 0x1c, 0x54, 0xb6, 0x60, 0x92, 0x93, 0x56, 0x37, 0x37, 0x96, 0xfe, + 0xb9, 0x8b, 0x68, 0x4a, 0x31, 0x25, 0x99, 0x2f, 0x99, 0x1b, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x00, + 0x8f, 0x08, 0xc4, 0x43, 0xea, 0x16, 0xc6, 0xc0, 0x2b, 0x9e, 0x36, 0x8b, 0x3e, 0x1b, 0xa0, 0xa3, 0x63, 0x4c, 0xfb, + 0x7f, 0x65, 0xf3, 0x36, 0x3c, 0x16, 0xf8, 0xd7, 0x80, 0x4c, 0x9b, 0xb2, 0x4c, 0x10, 0x90, 0x30, 0x6a, 0xca, 0x43, + 0xd8, 0x4b, 0x08, 0x67, 0xb6, 0x62, 0xd6, 0x67, 0x83, 0xe6, 0xb4, 0xac, 0xd8, 0xf1, 0x15, 0x1b, 0xb2, 0x4c, 0xb0, + 0x15, 0x1b, 0xae, 0x62, 0xf8, 0x3a, 0x83, 0x01, 0x41, 0x08, 0x00, 0x06, 0x00, 0xd0, 0x28, 0x88, 0xe6, 0x8b, 0x15, + 0xf1, 0x9b, 0xdd, 0xde, 0xe3, 0xb7, 0xc0, 0x02, 0xad, 0xb6, 0xff, 0x77, 0xa1, 0x0c, 0xd8, 0x53, 0x16, 0x26, 0x66, + 0x6e, 0x61, 0x55, 0x74, 0x00, 0x95, 0x12, 0x61, 0x0a, 0x03, 0x99, 0xfd, 0xcc, 0x40, 0x2d, 0xd0, 0x1a, 0xe4, 0x7d, + 0x3d, 0x68, 0x66, 0x70, 0xc4, 0xc0, 0x3b, 0x34, 0x64, 0x6a, 0x8c, 0x09, 0xe3, 0x1c, 0xa6, 0x98, 0x19, 0xf0, 0x4c, + 0xd3, 0xd6, 0x5a, 0x1a, 0x59, 0xae, 0x97, 0xf7, 0xfe, 0xd1, 0xb1, 0xea, 0x17, 0xcd, 0xf6, 0x00, 0xed, 0x13, 0x62, + 0x3f, 0x06, 0xb0, 0xc9, 0x5c, 0x6a, 0xc3, 0x7c, 0x1f, 0x75, 0x52, 0xfb, 0x09, 0x7f, 0x06, 0x6b, 0xb3, 0x03, 0x40, + 0x47, 0x86, 0xcd, 0xfa, 0xcb, 0x9a, 0xca, 0xeb, 0xe3, 0xce, 0x28, 0x95, 0xbb, 0xde, 0x9d, 0x0e, 0x34, 0xc5, 0xa1, + 0xb7, 0x1e, 0x2e, 0x1f, 0xea, 0x21, 0x60, 0xc6, 0x60, 0x6e, 0x99, 0xd1, 0xf7, 0x42, 0x24, 0x17, 0x44, 0x62, 0x69, + 0xb0, 0x86, 0xc1, 0xde, 0x3a, 0x38, 0x30, 0xd5, 0x58, 0x03, 0x9e, 0x27, 0x45, 0x20, 0x18, 0xf8, 0x08, 0xca, 0x80, + 0x26, 0xca, 0xdc, 0x86, 0x93, 0x8f, 0xcc, 0xfd, 0xc2, 0xe5, 0xed, 0x63, 0xe1, 0xb4, 0xad, 0xe6, 0x7a, 0xbc, 0x2c, + 0x70, 0x57, 0xde, 0x4b, 0x5a, 0x05, 0x37, 0xb2, 0x37, 0x79, 0xca, 0xdc, 0xad, 0xfb, 0x52, 0x9d, 0xdd, 0xcd, 0x74, + 0xca, 0x66, 0x3a, 0xdb, 0xcd, 0x84, 0x9a, 0x99, 0x6f, 0x59, 0x45, 0x9a, 0x93, 0x35, 0x51, 0x73, 0x2a, 0x7e, 0xa2, + 0x73, 0xd0, 0x8e, 0x72, 0x7b, 0xaf, 0x0a, 0x27, 0x57, 0x4e, 0x2e, 0xf7, 0x73, 0x43, 0x5c, 0x91, 0xb9, 0x50, 0x87, + 0x00, 0x2f, 0x2f, 0xca, 0xc7, 0x07, 0xb8, 0x14, 0xbf, 0xca, 0x91, 0x8b, 0x72, 0x2a, 0xa4, 0x96, 0x82, 0x45, 0xc8, + 0xa0, 0xaa, 0x8b, 0x81, 0xbd, 0xb4, 0x7b, 0x4f, 0xf4, 0x78, 0xbf, 0x8a, 0x98, 0x37, 0x30, 0xcf, 0x7d, 0x7c, 0x4f, + 0x53, 0xec, 0xd4, 0xc4, 0x19, 0xf9, 0x90, 0xc5, 0x39, 0xc8, 0x66, 0xfd, 0xea, 0xb5, 0xdf, 0x46, 0x1b, 0x17, 0xcd, + 0x58, 0xf4, 0xcc, 0x13, 0x27, 0x3f, 0x14, 0xc6, 0x38, 0xc0, 0x3a, 0xfa, 0x23, 0x4c, 0x2d, 0xd8, 0xb3, 0xc4, 0x53, + 0xe8, 0xe4, 0xd6, 0xa6, 0xdd, 0x85, 0x69, 0x77, 0x26, 0xad, 0x03, 0xe5, 0x80, 0x34, 0xbb, 0x32, 0x9d, 0x3b, 0xff, + 0x7d, 0x07, 0x2f, 0xdd, 0xae, 0x21, 0x12, 0xf7, 0xfc, 0x91, 0x31, 0x86, 0x78, 0x03, 0x36, 0xa2, 0xea, 0xe0, 0xe0, + 0x0f, 0xe7, 0x7d, 0x5b, 0xc9, 0x7d, 0xdf, 0x0a, 0x07, 0xb6, 0xc1, 0x54, 0xba, 0xbc, 0x91, 0xcc, 0x16, 0x60, 0xd7, + 0xb9, 0xff, 0x8d, 0x78, 0xf8, 0x22, 0x64, 0x5a, 0xac, 0xab, 0xf8, 0x2b, 0x39, 0x2a, 0x3d, 0x44, 0x35, 0x44, 0x20, + 0xad, 0xac, 0x4b, 0x43, 0xd3, 0xd1, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x81, 0x7d, 0x91, 0x5b, 0x27, + 0xf0, 0x68, 0x61, 0x8d, 0xa1, 0xb9, 0x2b, 0xbd, 0x93, 0x6c, 0x40, 0xd4, 0xfa, 0xb8, 0x43, 0x49, 0x24, 0x16, 0xd5, + 0x5d, 0x08, 0x87, 0xbb, 0x10, 0xcc, 0xcb, 0xa0, 0x6d, 0x10, 0xbb, 0xdd, 0x05, 0x6d, 0x03, 0xa7, 0x6e, 0x1b, 0xb8, + 0x3d, 0x18, 0x2c, 0xec, 0x7d, 0x78, 0x39, 0x96, 0x63, 0xe1, 0xaf, 0xc9, 0xec, 0x03, 0x40, 0xa0, 0xf6, 0x61, 0xc5, + 0x13, 0x07, 0x82, 0xc4, 0x19, 0x8e, 0xbe, 0xe7, 0xec, 0xc6, 0x5a, 0x0e, 0xcf, 0xe6, 0x0b, 0xcd, 0x46, 0xe6, 0x8e, + 0x1a, 0x54, 0x7c, 0x75, 0x3f, 0xaf, 0x9f, 0xb2, 0x9a, 0x6e, 0xfc, 0x1e, 0x84, 0x91, 0x70, 0xca, 0x0e, 0xa3, 0x90, + 0xb0, 0xc1, 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0x6d, 0xc2, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x08, 0xdb, + 0x78, 0x63, 0x41, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x45, 0xcd, 0xa8, 0xc1, 0x52, + 0x17, 0x94, 0xd9, 0x47, 0x18, 0x57, 0x17, 0x27, 0x26, 0x4e, 0x7b, 0xa9, 0x57, 0xff, 0x2d, 0x03, 0x03, 0x7c, 0x01, + 0x5e, 0x62, 0x61, 0x74, 0xd7, 0xbe, 0x6e, 0x40, 0x7d, 0xd9, 0x60, 0x03, 0xb4, 0x5a, 0xb5, 0xca, 0x67, 0xa0, 0xdc, + 0x35, 0x97, 0xb0, 0xd7, 0x5c, 0xc2, 0x5d, 0x73, 0x09, 0x7f, 0xcd, 0x25, 0xcc, 0x35, 0x97, 0xf0, 0xd7, 0x5c, 0x1e, + 0x84, 0x9f, 0x82, 0x38, 0x8e, 0x31, 0x87, 0xb8, 0x8a, 0xda, 0x46, 0xc6, 0x83, 0x0b, 0xcf, 0x7d, 0x96, 0xa8, 0x72, + 0xf9, 0xc3, 0x18, 0x72, 0x5b, 0xb6, 0x12, 0xc6, 0x6d, 0x8a, 0x29, 0x88, 0x9c, 0x7e, 0x70, 0x50, 0xba, 0x3b, 0x83, + 0x8f, 0x7a, 0xca, 0xf1, 0xd2, 0x3a, 0xd1, 0xfe, 0x01, 0x3a, 0x79, 0xf3, 0xeb, 0x63, 0x2a, 0xd7, 0x44, 0x38, 0x93, + 0xfb, 0xfd, 0xb6, 0xa7, 0x14, 0x9f, 0x32, 0x13, 0x9e, 0x9c, 0x27, 0xda, 0x88, 0x20, 0x08, 0x51, 0xa2, 0x70, 0x46, + 0xa4, 0xdd, 0xef, 0xde, 0x15, 0xde, 0xa8, 0xa2, 0xbc, 0x59, 0xc9, 0xe3, 0x1c, 0x9c, 0xd8, 0x8d, 0x15, 0x06, 0xea, + 0x82, 0x0b, 0x41, 0x66, 0x12, 0xfe, 0x68, 0xe6, 0x96, 0x9c, 0x65, 0x65, 0xd2, 0xc7, 0x66, 0x6e, 0x08, 0x58, 0x41, + 0xf6, 0x3d, 0xcc, 0x96, 0xb7, 0x29, 0xc5, 0x77, 0x69, 0x86, 0x87, 0xf2, 0x36, 0x2d, 0x42, 0x5b, 0x10, 0x7f, 0xf1, + 0x37, 0x8e, 0x23, 0x41, 0xc1, 0xdf, 0x27, 0xe2, 0x62, 0x8f, 0x6f, 0x78, 0x01, 0x2e, 0x33, 0x63, 0x51, 0x9d, 0x32, + 0xfc, 0x0d, 0x4b, 0x78, 0x08, 0x4e, 0xa6, 0xb1, 0x22, 0xf7, 0x38, 0xb0, 0x13, 0x92, 0x80, 0xc3, 0xd5, 0xed, 0x15, + 0xff, 0x0a, 0x17, 0x5f, 0xa5, 0xb3, 0x65, 0x73, 0x28, 0x6f, 0x23, 0x5c, 0x90, 0x37, 0xf0, 0xfa, 0xd6, 0xff, 0xcb, + 0xde, 0xdb, 0x36, 0xb7, 0x6d, 0x64, 0xeb, 0xa2, 0x7f, 0x45, 0x62, 0xd9, 0x0c, 0x60, 0x36, 0x29, 0xca, 0xe7, 0xcc, + 0x54, 0x5d, 0x50, 0x6d, 0x96, 0x63, 0xc7, 0x13, 0x67, 0x22, 0xdb, 0x63, 0x79, 0x32, 0xc9, 0xb0, 0x78, 0x19, 0x08, + 0x68, 0x0a, 0x70, 0x40, 0x80, 0x01, 0x40, 0x89, 0x34, 0x89, 0xff, 0x7e, 0x6a, 0xad, 0xd5, 0xaf, 0x20, 0x28, 0x7b, + 0xf6, 0x3e, 0xfb, 0xd3, 0xbd, 0x5f, 0x6c, 0xb1, 0xd1, 0x68, 0xf4, 0x7b, 0xaf, 0x5e, 0x2f, 0xcf, 0xd3, 0x93, 0xb1, + 0xba, 0x3d, 0x70, 0xd6, 0xa5, 0x14, 0x1d, 0x6f, 0x8a, 0xc3, 0xdb, 0xf3, 0xd9, 0x7e, 0x1b, 0x44, 0x6c, 0x17, 0x64, + 0x58, 0xeb, 0xa4, 0xe1, 0x3f, 0xd1, 0xd6, 0xc1, 0x62, 0x84, 0xfd, 0x5f, 0xd6, 0x03, 0x2f, 0x21, 0x35, 0x14, 0xb8, + 0x18, 0x6c, 0x38, 0x5a, 0xdb, 0x65, 0x1a, 0xb8, 0xa9, 0x41, 0xaf, 0xef, 0x29, 0x44, 0x79, 0xc9, 0x68, 0x6e, 0x04, + 0xeb, 0xc6, 0x90, 0x8b, 0xc3, 0x71, 0xb3, 0x1c, 0xf2, 0x92, 0xa6, 0xd3, 0x20, 0x94, 0xee, 0x2c, 0x6b, 0x48, 0xa2, + 0xec, 0x83, 0x50, 0xbb, 0xb6, 0xec, 0xb7, 0x81, 0xed, 0xcb, 0x1f, 0x0d, 0x63, 0xff, 0x62, 0xf9, 0x4c, 0x48, 0x17, + 0xf1, 0x1c, 0x04, 0x51, 0xfb, 0x79, 0x36, 0xdc, 0xf8, 0x17, 0xeb, 0x67, 0x42, 0xf9, 0x8d, 0xe7, 0xb6, 0x1c, 0x52, + 0x67, 0x2d, 0x7c, 0x61, 0x3c, 0x3c, 0xb8, 0x32, 0xb4, 0x1d, 0x0e, 0x42, 0xff, 0x6d, 0xd6, 0x08, 0x6e, 0x6c, 0x68, + 0x9f, 0x2f, 0x7c, 0xd8, 0xda, 0x68, 0xac, 0x29, 0xa6, 0x5b, 0xe8, 0xdf, 0x64, 0xb6, 0xb4, 0xa7, 0x51, 0xc9, 0x8b, + 0x53, 0xd3, 0x88, 0x85, 0x30, 0x60, 0xe8, 0x27, 0xf3, 0x01, 0x54, 0x73, 0xc7, 0x23, 0x90, 0xc9, 0x07, 0x7a, 0xb0, + 0x26, 0xb5, 0xea, 0xaf, 0x61, 0x26, 0xff, 0x8f, 0x54, 0x58, 0x8c, 0xee, 0xb6, 0x61, 0xa6, 0xfe, 0x88, 0xe4, 0x1f, + 0x2c, 0xe7, 0xbb, 0xd4, 0x0b, 0xb5, 0x1f, 0x0b, 0x2b, 0x30, 0x28, 0x51, 0x35, 0xa0, 0x07, 0x22, 0xa8, 0xca, 0x20, + 0xcd, 0xb0, 0x3a, 0x07, 0xfd, 0xee, 0x69, 0xd5, 0x91, 0x1c, 0xd2, 0x5a, 0x0d, 0xa9, 0x60, 0xaa, 0xd4, 0x20, 0x3f, + 0x1c, 0xee, 0x52, 0xa6, 0xcb, 0x80, 0x4b, 0xfa, 0x5d, 0xaa, 0x94, 0xc2, 0x7f, 0x22, 0x00, 0x9d, 0x83, 0x7b, 0x7c, + 0x39, 0x06, 0xd2, 0x0c, 0x0b, 0xbf, 0x35, 0x3b, 0xbe, 0x26, 0xe1, 0x36, 0x09, 0x2e, 0x06, 0x38, 0x47, 0x57, 0x61, + 0x79, 0x97, 0x42, 0x04, 0x55, 0x09, 0xf5, 0xad, 0x4c, 0x83, 0xd2, 0x56, 0x83, 0xb0, 0x26, 0xa1, 0xce, 0x24, 0x1b, + 0x95, 0xb6, 0x1b, 0x85, 0xd9, 0x22, 0xae, 0x67, 0x84, 0x35, 0x67, 0x33, 0xd5, 0xc0, 0xa4, 0xe1, 0xb8, 0x69, 0xb4, + 0x16, 0x15, 0x6a, 0x0a, 0xf3, 0x1a, 0x57, 0x95, 0xaa, 0xee, 0xe6, 0xd4, 0x52, 0x5a, 0xb6, 0x57, 0xdd, 0x24, 0x1b, + 0x72, 0x19, 0xca, 0x30, 0xd8, 0xc8, 0x11, 0x4c, 0x20, 0x49, 0xce, 0xfc, 0x8d, 0xfc, 0x43, 0x6d, 0xba, 0x16, 0x30, + 0xc7, 0x98, 0x65, 0xc3, 0x82, 0x5e, 0x81, 0x7b, 0xa0, 0x95, 0x9e, 0x4f, 0xb3, 0x8b, 0x3c, 0x48, 0x86, 0x85, 0x5e, + 0x36, 0x19, 0xff, 0x53, 0x18, 0x69, 0x32, 0x63, 0x25, 0x8b, 0x6c, 0x57, 0xa7, 0xc4, 0x79, 0x9c, 0xc0, 0xf6, 0x68, + 0x7a, 0xcb, 0xf7, 0x19, 0x44, 0x05, 0x81, 0x82, 0x19, 0xf3, 0x65, 0x17, 0xcf, 0x7d, 0x9f, 0x59, 0xa6, 0xee, 0xc3, + 0xc1, 0x98, 0xb1, 0xfd, 0x7e, 0x3f, 0xef, 0xf7, 0xd5, 0x7c, 0xeb, 0xf7, 0x93, 0x17, 0xe6, 0x6f, 0x0f, 0x18, 0x14, + 0xe4, 0x44, 0x34, 0x15, 0x22, 0xf8, 0x87, 0xe4, 0x19, 0x92, 0xd1, 0x1d, 0xf7, 0xb9, 0xe5, 0x6c, 0x59, 0x1d, 0x81, + 0x60, 0x1e, 0x0e, 0x97, 0x0a, 0xec, 0x5a, 0xa2, 0x48, 0xc8, 0xf2, 0x9f, 0x81, 0xf1, 0xcc, 0x7d, 0x80, 0x25, 0x03, + 0x10, 0xb6, 0xca, 0xd3, 0xf5, 0x9e, 0xaf, 0x82, 0x77, 0x3a, 0xde, 0x35, 0x56, 0x64, 0x20, 0x6e, 0x81, 0x8d, 0x58, + 0x6b, 0x0f, 0xc8, 0x99, 0x02, 0x1c, 0x2f, 0x0e, 0x87, 0x73, 0xf9, 0x4b, 0x37, 0x5b, 0x27, 0x50, 0x29, 0x70, 0x7b, + 0x74, 0x72, 0xf0, 0xdf, 0x81, 0x66, 0x50, 0x0e, 0xf3, 0x7a, 0xfb, 0x3b, 0x73, 0xf2, 0xd3, 0x53, 0xfc, 0x13, 0x1e, + 0xa2, 0xd3, 0x6f, 0xf7, 0xe6, 0x0f, 0x8a, 0xca, 0xc3, 0x41, 0x2d, 0xfe, 0x73, 0xce, 0x2b, 0xf8, 0x85, 0x6f, 0x02, + 0xb3, 0xc9, 0xd4, 0x3b, 0xf9, 0x26, 0xcf, 0x99, 0x7a, 0x8d, 0x57, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xed, + 0xc8, 0x89, 0x76, 0xca, 0x31, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, + 0x96, 0x78, 0x96, 0xce, 0x2f, 0x27, 0x75, 0xb9, 0xd3, 0x8a, 0xa7, 0x3d, 0xb0, 0xb8, 0xad, 0xc1, 0x0b, 0xe0, 0xde, + 0x62, 0xeb, 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, + 0x40, 0x30, 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, + 0x77, 0xf9, 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0x65, 0x6f, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, + 0x52, 0x3c, 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfc, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xbd, 0x7d, + 0x72, 0x61, 0x20, 0x81, 0xa6, 0x03, 0xf0, 0xe3, 0x55, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, + 0x05, 0xf7, 0xe9, 0x67, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa3, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x3c, + 0xfb, 0xa6, 0x02, 0x72, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, + 0x53, 0x71, 0x75, 0xa9, 0xd3, 0xc5, 0x8b, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, + 0x07, 0xf1, 0xb6, 0xb6, 0xa3, 0x3f, 0x76, 0x10, 0xe9, 0xb8, 0x27, 0x17, 0xea, 0x4b, 0x48, 0x25, 0x17, 0xea, 0x06, + 0x62, 0x17, 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0x75, 0x8d, 0x82, 0x95, 0x80, 0x33, 0xed, 0x1a, 0x0c, 0x36, 0xb0, + 0x6e, 0x59, 0x06, 0x7f, 0xc3, 0x35, 0x4d, 0xe0, 0x86, 0x45, 0xd6, 0x7b, 0x83, 0xad, 0x74, 0x0d, 0x8e, 0x96, 0x89, + 0x73, 0x29, 0xc9, 0xca, 0x16, 0x19, 0x57, 0x8f, 0x42, 0xaa, 0xa6, 0xfb, 0x5b, 0x51, 0x3f, 0x08, 0x91, 0x07, 0xab, + 0x94, 0x45, 0xc5, 0x0a, 0x64, 0xf6, 0xe0, 0x1f, 0x21, 0x23, 0x47, 0x39, 0x70, 0x14, 0xfa, 0x5b, 0x13, 0xe8, 0x3c, + 0x3f, 0x85, 0x3a, 0x8f, 0x04, 0x5b, 0xa9, 0x87, 0xc2, 0xca, 0x0b, 0x88, 0x0e, 0xb6, 0x30, 0x56, 0x79, 0x12, 0x2a, + 0x36, 0x65, 0x22, 0x8f, 0x83, 0x5a, 0x02, 0xc6, 0x0a, 0x82, 0x39, 0xcb, 0xa5, 0x0b, 0x52, 0xd5, 0xe8, 0x61, 0x91, + 0xb9, 0x9f, 0x0a, 0xca, 0xff, 0x54, 0xe5, 0x84, 0xeb, 0xcb, 0x10, 0xe0, 0x68, 0x9f, 0x82, 0x28, 0x31, 0xd6, 0x2f, + 0x5a, 0xbc, 0x93, 0x99, 0xb3, 0xa9, 0xed, 0x25, 0xc8, 0xd8, 0x0e, 0xbf, 0x42, 0x68, 0xb5, 0x50, 0x64, 0xd1, 0x70, + 0xc1, 0x74, 0x7b, 0x4a, 0xab, 0xee, 0x61, 0xc3, 0xb3, 0xd2, 0x43, 0xa5, 0xbe, 0x8d, 0x09, 0x2c, 0xab, 0x94, 0xe1, + 0xdb, 0x09, 0x55, 0x27, 0x06, 0x15, 0xeb, 0x86, 0x2d, 0xe1, 0x10, 0x8b, 0x49, 0x63, 0x9d, 0x0d, 0x78, 0xc4, 0x12, + 0xf8, 0x67, 0xc3, 0xc7, 0x6c, 0xc9, 0xa3, 0xc9, 0xe6, 0x6a, 0xd9, 0xef, 0x97, 0x5e, 0xe8, 0xd5, 0xb3, 0xec, 0x69, + 0x34, 0x9f, 0xe5, 0x73, 0x1f, 0x15, 0x17, 0x93, 0xc1, 0x60, 0xe3, 0x67, 0xc3, 0x21, 0x4b, 0x86, 0xc3, 0x49, 0xf6, + 0x14, 0x5e, 0x7b, 0xca, 0x23, 0xb5, 0xa4, 0x92, 0xab, 0x0c, 0xf6, 0xf7, 0x01, 0x8f, 0x7c, 0xd6, 0xf9, 0x69, 0xd9, + 0x74, 0xe9, 0x7e, 0x66, 0xc7, 0x5d, 0xe8, 0x0e, 0xb0, 0xf1, 0xb6, 0x41, 0x47, 0xfe, 0xf5, 0x0e, 0x29, 0x75, 0x93, + 0x01, 0xd8, 0x8d, 0x06, 0x38, 0x64, 0xaa, 0x97, 0x22, 0xab, 0x97, 0x32, 0xd5, 0x4b, 0xb2, 0x72, 0x09, 0x16, 0x12, + 0x53, 0xe5, 0x36, 0xb2, 0x72, 0xcb, 0x86, 0xeb, 0xe1, 0x60, 0x6b, 0xc5, 0x65, 0x73, 0x07, 0xf7, 0x85, 0x15, 0x05, + 0xfe, 0xdf, 0xb2, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x35, 0x3a, 0x26, 0xc1, 0x05, 0xe2, 0x9e, 0xdd, 0x82, 0x1d, 0x16, + 0xfe, 0x82, 0xeb, 0xe4, 0x98, 0xed, 0xf0, 0x51, 0xe8, 0x15, 0xec, 0xd6, 0x27, 0xa0, 0x5d, 0xb0, 0x35, 0x40, 0x36, + 0xb6, 0xc5, 0x47, 0x77, 0x87, 0xc3, 0xb5, 0xe7, 0xb3, 0x07, 0xfc, 0x71, 0x7e, 0x77, 0x38, 0xec, 0x3c, 0xa3, 0xde, + 0xbb, 0xe1, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xcd, 0x15, 0x8f, 0x27, 0x83, 0xc1, 0x8d, 0xbf, 0xe0, 0xf5, 0xec, 0x06, + 0xb4, 0x03, 0xe7, 0x0b, 0xa9, 0x6b, 0xf6, 0x6e, 0x79, 0xe6, 0x2d, 0x70, 0x6c, 0x6e, 0xe1, 0xe8, 0xed, 0xf7, 0xbd, + 0x3b, 0x1e, 0x79, 0xb7, 0xa4, 0x62, 0x5a, 0x71, 0xc5, 0xf1, 0xb6, 0xc5, 0xfd, 0x74, 0xc5, 0x43, 0x78, 0x84, 0x55, + 0x99, 0xde, 0x04, 0xef, 0x7d, 0xb6, 0xd2, 0x2c, 0x70, 0x0f, 0x98, 0x63, 0x4d, 0x76, 0x42, 0x33, 0xf1, 0x57, 0xd8, + 0x3f, 0x37, 0xaa, 0x7f, 0x68, 0xfe, 0x97, 0xba, 0x9f, 0xc0, 0xed, 0x8b, 0x2c, 0x48, 0xec, 0x3d, 0xbf, 0x61, 0xf7, + 0xdc, 0xb0, 0xcd, 0x9e, 0x99, 0xb2, 0x4f, 0x94, 0x1a, 0x3f, 0x52, 0xea, 0xda, 0x32, 0xac, 0x64, 0xee, 0xbe, 0x8c, + 0xc0, 0xe1, 0x80, 0xfc, 0x74, 0x87, 0x38, 0x08, 0xad, 0x9b, 0xac, 0xe6, 0x8a, 0x72, 0x2e, 0xb4, 0x65, 0xe6, 0xe5, + 0xc0, 0x62, 0x96, 0x52, 0x68, 0x2c, 0x00, 0x10, 0x4c, 0x0a, 0xad, 0xbd, 0x97, 0x01, 0xe4, 0x04, 0x0d, 0x7f, 0x6c, + 0xae, 0x8a, 0xb2, 0x96, 0x2d, 0x09, 0x51, 0xb6, 0xeb, 0xe1, 0x25, 0x42, 0xa6, 0xf5, 0xfb, 0xe7, 0x44, 0xb2, 0x36, + 0xa9, 0xae, 0x6a, 0xb4, 0x04, 0x54, 0x64, 0x09, 0x98, 0xf8, 0x95, 0xe6, 0x13, 0x80, 0x27, 0x1d, 0x0f, 0xaa, 0xa7, + 0xbc, 0x66, 0x82, 0xc8, 0x36, 0x2a, 0x7f, 0x52, 0xbc, 0x40, 0x32, 0x82, 0xe2, 0x69, 0xad, 0x32, 0x16, 0x86, 0x79, + 0xa0, 0x80, 0xbc, 0x7b, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, + 0xe8, 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x39, 0x89, 0xae, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, + 0x67, 0xd1, 0xd3, 0x6a, 0x3e, 0x21, 0x25, 0xd9, 0xe1, 0x90, 0x8d, 0xaa, 0xba, 0x58, 0x4f, 0x43, 0xf9, 0xd3, 0x43, + 0xf0, 0xf5, 0x82, 0x7a, 0x4d, 0x56, 0xa9, 0x7e, 0x4a, 0x95, 0xf2, 0xa2, 0xe1, 0xa5, 0xff, 0xb4, 0x92, 0xfb, 0x1e, + 0x90, 0xd6, 0xf2, 0x92, 0xcb, 0xf7, 0x23, 0xc4, 0x18, 0xf1, 0x03, 0xaf, 0xe4, 0x11, 0x0b, 0xd5, 0x14, 0xae, 0x79, + 0x84, 0x20, 0x6f, 0x99, 0x0e, 0xfe, 0xd6, 0x13, 0xa7, 0xfb, 0x13, 0xa5, 0x5d, 0x7c, 0x61, 0x51, 0xf7, 0x64, 0x6d, + 0xdd, 0x80, 0x1c, 0x6c, 0x98, 0x2e, 0x0a, 0xb2, 0x4d, 0x69, 0x04, 0x6d, 0xb4, 0x1c, 0xd8, 0x70, 0x2a, 0xb5, 0xe1, + 0xcc, 0x35, 0x04, 0xf7, 0xf9, 0x79, 0x3a, 0x5a, 0xc0, 0x87, 0x54, 0xb7, 0x97, 0xf8, 0xf9, 0xb0, 0xe1, 0x11, 0x90, + 0xd9, 0x11, 0x9f, 0xd9, 0x44, 0xd2, 0x49, 0x9d, 0x2b, 0x60, 0xb7, 0xb3, 0x6b, 0x90, 0x23, 0x66, 0xee, 0x2b, 0x54, + 0xdf, 0xa2, 0x01, 0x57, 0xc6, 0xda, 0xd7, 0x24, 0x63, 0xe1, 0x55, 0x39, 0x0d, 0x07, 0x00, 0x43, 0x97, 0xd1, 0xd7, + 0x96, 0x9b, 0x2c, 0xfb, 0xb9, 0x80, 0x20, 0x88, 0x92, 0x78, 0x7c, 0xc0, 0xfb, 0xb2, 0x1a, 0x6a, 0x94, 0x7c, 0x2c, + 0x1b, 0xa9, 0xf4, 0x4a, 0xf4, 0x77, 0x63, 0x2e, 0x31, 0xe0, 0x75, 0xd5, 0x16, 0x14, 0xce, 0xf3, 0xc3, 0xe1, 0x3c, + 0x1f, 0x19, 0xcf, 0x32, 0x50, 0xad, 0x4c, 0xeb, 0x20, 0x36, 0xf3, 0xc5, 0xc2, 0x5f, 0xec, 0x9c, 0x44, 0x44, 0x41, + 0x60, 0x47, 0xc2, 0x83, 0x48, 0xfd, 0xaa, 0xf2, 0x74, 0xa7, 0xfa, 0x6c, 0xbf, 0xb0, 0x89, 0xf4, 0x82, 0x92, 0xc9, + 0x27, 0xc1, 0x5e, 0xf5, 0x77, 0x10, 0x36, 0x84, 0x37, 0xaf, 0x7a, 0x9d, 0x65, 0x6a, 0x56, 0x82, 0x84, 0x19, 0x73, + 0x04, 0x8f, 0xc3, 0x4e, 0x63, 0x1b, 0x1e, 0x5b, 0x70, 0x74, 0xde, 0x9a, 0xdd, 0xb1, 0x15, 0xbb, 0x55, 0x75, 0x5a, + 0xf0, 0x70, 0x3a, 0xbc, 0x0c, 0x70, 0xf5, 0xad, 0xcf, 0x39, 0xbf, 0xa3, 0x13, 0x6c, 0x3d, 0xe0, 0xd1, 0x44, 0xcc, + 0xd6, 0x4f, 0x23, 0xb5, 0x78, 0xd6, 0x43, 0xbe, 0xa0, 0xf5, 0x27, 0x66, 0x77, 0x26, 0xf9, 0x6e, 0xc0, 0x17, 0x93, + 0xf5, 0xd3, 0x08, 0x5e, 0x7d, 0x0a, 0x56, 0x8c, 0xcc, 0x99, 0x65, 0xeb, 0xa7, 0x11, 0x8e, 0xd9, 0xdd, 0xd3, 0x88, + 0x46, 0x6d, 0x25, 0xf7, 0xa5, 0xdb, 0x06, 0x84, 0x95, 0x5b, 0x16, 0xc3, 0x6b, 0x20, 0x9e, 0x69, 0x23, 0xe9, 0x5a, + 0x1a, 0x7a, 0x63, 0x1e, 0x4e, 0xe3, 0x60, 0x4d, 0xad, 0x90, 0x67, 0x86, 0x98, 0xc5, 0x4f, 0xa3, 0x39, 0x5b, 0x61, + 0x45, 0x36, 0x3c, 0x1e, 0x5c, 0x4e, 0x36, 0x57, 0x7c, 0x0d, 0xe4, 0x67, 0x93, 0x8d, 0xd9, 0xa2, 0x6e, 0xb9, 0x98, + 0x6d, 0x9e, 0x46, 0xf3, 0xc9, 0x0a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x0d, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, + 0x3d, 0xb6, 0x1e, 0x07, 0x77, 0x6c, 0x7d, 0x19, 0xdc, 0xb2, 0xf5, 0x18, 0x88, 0x38, 0xa8, 0xdf, 0xbd, 0x0d, 0x2c, + 0xbe, 0x88, 0xad, 0x2f, 0x4d, 0xda, 0xe6, 0x69, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xc9, 0xbc, 0x15, 0x83, + 0x4b, 0xc8, 0xd2, 0x8b, 0xd9, 0x66, 0x78, 0xc9, 0xd6, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0xee, 0xf8, 0x2d, 0x4b, 0xf8, + 0xaa, 0x89, 0xaf, 0x36, 0xa0, 0x11, 0x3d, 0xca, 0xa0, 0xaf, 0xa0, 0x66, 0xe6, 0xbc, 0xb2, 0x30, 0x2a, 0xf7, 0x2d, + 0x38, 0xa0, 0x20, 0x6d, 0x03, 0x04, 0x49, 0x3c, 0xbb, 0x57, 0xe1, 0xfa, 0x46, 0x0a, 0x03, 0x6e, 0x02, 0x33, 0x60, + 0x60, 0xfa, 0x19, 0xfc, 0xb0, 0xd2, 0x25, 0x42, 0x9c, 0xfd, 0x94, 0x92, 0x64, 0x9e, 0x9f, 0x8a, 0x34, 0x77, 0x0b, + 0xd7, 0x29, 0xcc, 0x8a, 0x02, 0xd5, 0x4f, 0x49, 0x69, 0x60, 0xa1, 0x12, 0x99, 0x4a, 0xc1, 0x2f, 0x9b, 0xf3, 0x28, + 0x3b, 0x46, 0xe7, 0x3a, 0xbf, 0x9c, 0x38, 0xa7, 0x93, 0xbe, 0xff, 0xc0, 0x31, 0x6c, 0x21, 0x03, 0x17, 0xfe, 0xd4, + 0x13, 0xc6, 0xa9, 0x15, 0x88, 0xa9, 0xe4, 0xd9, 0x53, 0xf8, 0x4c, 0x68, 0x75, 0x74, 0xe1, 0xfb, 0x41, 0xa1, 0x4d, + 0xd2, 0x2d, 0x48, 0x52, 0xf0, 0x14, 0x3d, 0xe7, 0xbc, 0x0d, 0x54, 0x8a, 0x11, 0x2d, 0x88, 0xb4, 0xb5, 0xcc, 0x1c, + 0xa4, 0x2d, 0xcd, 0x77, 0x4d, 0xfc, 0x1c, 0x16, 0x70, 0x11, 0x2d, 0x6c, 0x0d, 0x8f, 0xaa, 0x58, 0xb9, 0x37, 0x79, + 0x8e, 0x70, 0x46, 0x97, 0x32, 0x01, 0x70, 0xbd, 0x5f, 0x87, 0xb5, 0xc2, 0x2b, 0x6a, 0x16, 0x79, 0x51, 0xd3, 0x27, + 0x5b, 0xe0, 0x3e, 0x16, 0x25, 0x0a, 0x9c, 0xb5, 0x60, 0xc0, 0x56, 0x58, 0xb2, 0x93, 0xc2, 0xa6, 0x68, 0x09, 0xbd, + 0x3d, 0x7e, 0x3a, 0xa8, 0x99, 0x0c, 0xa0, 0x09, 0xa0, 0xf1, 0xf8, 0x17, 0x80, 0x9a, 0xde, 0xd4, 0x62, 0x5d, 0x05, + 0xa5, 0x52, 0x6e, 0xc2, 0xcf, 0xc0, 0x30, 0xc3, 0x0f, 0x85, 0xdc, 0x26, 0x4a, 0xe4, 0xfc, 0x58, 0x94, 0x62, 0x59, + 0x8a, 0x2a, 0x69, 0x37, 0x14, 0x3c, 0x22, 0xdc, 0x06, 0x8d, 0x99, 0xdb, 0x13, 0x5d, 0xb4, 0x22, 0x94, 0x63, 0xb3, + 0x8e, 0x91, 0x46, 0x99, 0x9d, 0xec, 0x3a, 0x59, 0x68, 0xbf, 0xaf, 0x72, 0xc8, 0x3a, 0x60, 0x8d, 0xe4, 0xeb, 0x35, + 0x87, 0x6e, 0x1b, 0xe5, 0xc5, 0x83, 0xe7, 0x2b, 0x38, 0xcd, 0xf1, 0xc4, 0xee, 0x7a, 0xdd, 0x29, 0x12, 0xf1, 0x0a, + 0x27, 0x55, 0x3e, 0x92, 0x85, 0xe3, 0xce, 0x9d, 0xd6, 0x62, 0x55, 0xb9, 0xac, 0xa7, 0x16, 0x47, 0x04, 0x3e, 0x95, + 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, 0x11, + 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0x8b, 0x5c, 0x0f, + 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, 0x3c, + 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, 0x5d, + 0x28, 0xe7, 0x4c, 0xc5, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, 0x8c, + 0x8e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x96, 0xab, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, 0xc6, + 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, 0x98, + 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x7b, 0x59, 0x14, 0x38, 0x80, 0xab, + 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0xf6, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, 0xcc, + 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, 0xb4, + 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x8f, 0x5f, 0xa7, + 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7e, 0x41, 0x11, 0x17, 0x35, 0xb8, 0xf2, + 0x4e, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, 0x0e, + 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x44, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xcc, 0x59, 0x35, 0x5a, 0xa8, 0xcc, 0x08, + 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xe3, 0x3d, 0xba, 0xab, 0xce, 0x32, + 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, 0x77, + 0x9d, 0xe5, 0xab, 0x9b, 0xad, 0xa1, 0xa8, 0xd4, 0x4a, 0x52, 0x1c, 0x64, 0xb8, 0x6e, 0x2b, 0x1f, 0x2e, 0x2e, 0xa0, + 0x67, 0x8c, 0x44, 0xe6, 0xf9, 0x13, 0xf9, 0x12, 0x9c, 0x33, 0xce, 0x0a, 0x81, 0x09, 0x63, 0xf5, 0xae, 0xb5, 0x54, + 0x1a, 0x52, 0x8c, 0x1d, 0x8d, 0xb2, 0xac, 0xb2, 0x74, 0x99, 0xad, 0x25, 0x6c, 0x59, 0x4e, 0x6e, 0x61, 0xcb, 0x4c, + 0x56, 0xf3, 0x7d, 0xc5, 0x1d, 0x94, 0x6f, 0xb6, 0xce, 0xf8, 0x5e, 0x22, 0x7b, 0xb7, 0x81, 0x12, 0x5e, 0x8c, 0xfe, + 0x82, 0xf4, 0xdb, 0x0c, 0xe3, 0x94, 0xdb, 0x4a, 0x5a, 0x80, 0xd3, 0x3f, 0x1c, 0xde, 0x57, 0x18, 0x34, 0x38, 0xc2, + 0x38, 0xb2, 0x7e, 0xff, 0xb6, 0xf2, 0x6a, 0x4c, 0xd4, 0xf1, 0x59, 0xfd, 0x7e, 0x45, 0x0f, 0xa7, 0xd5, 0x68, 0x95, + 0x6e, 0x91, 0x9d, 0xd0, 0xc6, 0xca, 0x0f, 0x6a, 0x05, 0xcc, 0xde, 0xfa, 0x7c, 0x3a, 0x00, 0x1d, 0x0b, 0x90, 0x68, + 0x36, 0x13, 0x89, 0x39, 0xe9, 0x9e, 0x84, 0xc7, 0x07, 0x16, 0x38, 0xc0, 0x54, 0xfc, 0x9f, 0xc2, 0x9b, 0x81, 0x0d, + 0x1a, 0x25, 0xfa, 0x1a, 0x5d, 0xd5, 0xe6, 0x46, 0xc7, 0x4b, 0x4f, 0x21, 0x91, 0x15, 0xac, 0x9a, 0xfb, 0x72, 0x03, + 0xa7, 0x3d, 0xd4, 0x1c, 0x2a, 0x4b, 0xf0, 0xb7, 0x5f, 0xe6, 0x87, 0xc3, 0x3a, 0x83, 0xc2, 0x76, 0x6b, 0xa1, 0xbd, + 0x31, 0x4b, 0x35, 0x54, 0x84, 0x83, 0xce, 0x57, 0x62, 0x56, 0x8f, 0xe8, 0xef, 0xf9, 0xe1, 0xb0, 0x22, 0x30, 0xe0, + 0xb0, 0x94, 0x99, 0x68, 0xa1, 0x58, 0x5a, 0x67, 0x33, 0xaa, 0x03, 0x0f, 0x4c, 0xcc, 0x59, 0xb8, 0x03, 0xd0, 0x26, + 0xb5, 0x0a, 0xf4, 0x2a, 0xa2, 0x9f, 0xb8, 0x5f, 0xdb, 0xaf, 0xd7, 0x23, 0xb3, 0x74, 0xe4, 0xc6, 0x58, 0x00, 0x70, + 0xe0, 0x79, 0x4d, 0xf2, 0x9c, 0x7c, 0x0d, 0xed, 0x9e, 0x5c, 0xc8, 0x9f, 0xa0, 0x6c, 0xe1, 0xb9, 0x6a, 0x5a, 0x59, + 0xac, 0xb8, 0xaa, 0x5e, 0x5d, 0xf0, 0xca, 0x64, 0x5a, 0xa5, 0x95, 0xa8, 0x94, 0x60, 0x40, 0x5d, 0xe2, 0xb5, 0xa6, + 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x7e, 0x69, 0x1c, 0x3e, + 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0x2b, 0x1f, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, 0xc5, 0xc4, + 0xee, 0xd0, 0xbc, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, 0x01, 0x2f, + 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x2a, 0x26, 0xc0, 0x0f, + 0x4a, 0xad, 0xe9, 0xbd, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, 0xe7, 0xe3, + 0xf9, 0xa5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x79, 0xab, 0x7f, 0x98, 0xea, 0x5b, 0xe8, 0x4e, + 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, 0x1c, 0xec, + 0x0d, 0x70, 0xe2, 0x97, 0x87, 0x83, 0xb8, 0xca, 0x7d, 0x76, 0xde, 0x35, 0xb2, 0x72, 0x00, 0x2b, 0x88, 0x82, 0x71, + 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xd5, 0xf8, 0xf8, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0xe4, 0x4f, 0x9f, + 0x03, 0x69, 0x59, 0xbf, 0x1f, 0xbd, 0xb8, 0x9c, 0x3e, 0x1f, 0x46, 0x01, 0x38, 0x76, 0xd9, 0xcb, 0xcb, 0x98, 0xaf, + 0x2e, 0x99, 0x65, 0x0a, 0x8b, 0x7c, 0x33, 0xa0, 0xba, 0x64, 0xb5, 0x74, 0xbd, 0x02, 0x2c, 0x5d, 0x7e, 0xf3, 0x10, + 0xa6, 0x06, 0x34, 0xb2, 0xe6, 0xee, 0x34, 0xd7, 0x02, 0xa5, 0x9e, 0xf7, 0x33, 0x43, 0xbe, 0x2e, 0x83, 0xae, 0x20, + 0xdd, 0xf3, 0x88, 0xf4, 0x72, 0x2f, 0x9d, 0xee, 0xf7, 0xa5, 0x00, 0x4b, 0x7d, 0x29, 0x3e, 0x83, 0xc2, 0xa2, 0xf1, + 0x8d, 0x00, 0x6d, 0x0d, 0xd5, 0xb4, 0x57, 0x8a, 0xaa, 0x17, 0xf4, 0x4a, 0xf1, 0xb9, 0xa7, 0x87, 0xca, 0x7c, 0x59, + 0x3a, 0xfa, 0x9f, 0x50, 0x73, 0xc1, 0x09, 0x31, 0x13, 0x73, 0x00, 0x95, 0xa0, 0x8d, 0x6f, 0x75, 0xb4, 0xf1, 0xa9, + 0x5e, 0xc5, 0x4d, 0x9f, 0xd7, 0xd6, 0x32, 0x27, 0x84, 0x4d, 0xf7, 0x12, 0xa0, 0x22, 0xaf, 0x84, 0x47, 0xb0, 0xfc, + 0xf2, 0x87, 0x3c, 0x5d, 0x21, 0x5a, 0xc7, 0x3d, 0xcb, 0x5c, 0x1a, 0xfb, 0x37, 0x06, 0xd3, 0xd7, 0xb7, 0xdb, 0x22, + 0x3f, 0x35, 0x31, 0x61, 0x3d, 0x56, 0xf4, 0xcd, 0xbb, 0x70, 0x25, 0x50, 0xe0, 0x50, 0x22, 0xb1, 0x4d, 0x15, 0x8a, + 0x78, 0x90, 0xf4, 0xe9, 0xa2, 0xf5, 0x69, 0x80, 0xa9, 0xb5, 0x1c, 0x98, 0x43, 0xb8, 0x8a, 0x0b, 0x1f, 0x3d, 0x7d, + 0x8b, 0x59, 0x38, 0x9f, 0x78, 0x1f, 0xbd, 0x62, 0x64, 0x3e, 0xee, 0xa3, 0x52, 0x49, 0xff, 0x3c, 0x1c, 0x66, 0xd5, + 0xdc, 0x77, 0xe8, 0x23, 0x3d, 0x54, 0xb9, 0xa0, 0xec, 0x8d, 0x31, 0x89, 0x40, 0x69, 0x8c, 0xf7, 0x71, 0x70, 0x9c, + 0xf7, 0x69, 0x00, 0xa9, 0x7d, 0xe2, 0x3d, 0x29, 0x39, 0x3c, 0xe7, 0x98, 0x13, 0x4a, 0x2b, 0xc2, 0x2a, 0xbe, 0xc8, + 0x50, 0xae, 0x3b, 0xa5, 0x60, 0x92, 0x43, 0x82, 0xe1, 0xaf, 0x9a, 0x37, 0xb1, 0x02, 0x61, 0xd7, 0xcc, 0xab, 0xd1, + 0x93, 0x2a, 0x09, 0x4b, 0x01, 0x47, 0x65, 0xe6, 0x19, 0xf6, 0x86, 0x27, 0x86, 0x91, 0x83, 0xe5, 0xfe, 0xa8, 0x4e, + 0x44, 0xee, 0xd1, 0x05, 0x46, 0x65, 0xe1, 0x79, 0x43, 0x57, 0x1a, 0x54, 0x92, 0x1d, 0x7f, 0xc5, 0x35, 0xa0, 0xb6, + 0xc6, 0x88, 0xa1, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, 0x95, 0xdc, 0xf5, + 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, 0x2c, 0x85, 0x23, + 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, 0x42, 0x9a, 0x6c, + 0x5f, 0xcf, 0xdf, 0x1b, 0x41, 0x56, 0x6e, 0x39, 0xc7, 0xc3, 0xe2, 0x1b, 0x67, 0x5f, 0xe5, 0xe4, 0x29, 0x66, 0x19, + 0xe9, 0x9d, 0x62, 0x5e, 0xc0, 0x9f, 0xca, 0x52, 0x9f, 0xa3, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, 0x97, 0xde, 0xa6, + 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0xf7, 0xf1, 0x48, 0x9e, 0x61, 0x1b, 0x96, 0xb0, 0xd0, 0x2a, 0x18, 0x03, 0x48, + 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x0e, 0x87, 0xf3, 0x8d, 0x39, 0x4b, 0xf6, 0xe0, 0xfa, 0xca, 0x13, 0xf3, 0x0e, + 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x1b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, 0x62, 0xad, 0x63, + 0xa9, 0xac, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0xbf, 0x77, 0x83, 0xab, 0x6b, 0x63, 0x50, + 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0xb3, 0x9c, 0x7c, 0xf9, 0xad, 0x9d, 0x03, 0x82, + 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, 0x33, 0xd8, 0xc4, + 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, 0xab, 0x85, 0x48, + 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, 0x5e, 0x27, 0x68, + 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, 0x7b, 0x99, 0x13, + 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, 0x74, 0x28, 0x59, + 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, 0x0a, 0x5c, 0x08, + 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xf9, 0xb4, 0x90, 0xa6, 0x81, 0x7c, 0x5a, 0x39, 0xe6, + 0x81, 0x9d, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0xe5, 0x1c, 0xab, 0x88, 0xde, 0xe7, 0x1f, 0x2a, 0x7b, + 0xfa, 0x20, 0xc2, 0x46, 0x05, 0x1a, 0x4b, 0x89, 0xb1, 0x91, 0xe3, 0xdf, 0x12, 0x65, 0x43, 0x86, 0x80, 0x10, 0xd2, + 0x46, 0x4e, 0x3f, 0xac, 0x2f, 0x6f, 0x33, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, 0xa9, 0x47, 0x3c, + 0x5e, 0x6b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, 0x28, 0x17, 0x3c, + 0xe7, 0x15, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xc8, 0xe9, 0xf3, 0x15, 0xf0, 0x4c, 0x40, 0xa0, 0x63, + 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0x37, 0x48, 0x94, 0xfa, 0x9a, + 0x94, 0xa4, 0xd7, 0xa2, 0xc6, 0x2b, 0xb1, 0x8a, 0x48, 0x20, 0x43, 0x0d, 0x11, 0xab, 0xea, 0xa9, 0x7b, 0x55, 0x4c, + 0x06, 0x83, 0xca, 0x97, 0xd3, 0x13, 0x6f, 0x68, 0xa8, 0xbc, 0xeb, 0x8a, 0x76, 0x7a, 0xa2, 0x95, 0xf2, 0x16, 0xd2, + 0x12, 0x34, 0x0d, 0x23, 0xcd, 0xa1, 0xd4, 0x95, 0x74, 0x37, 0x06, 0xf1, 0x25, 0x13, 0x3d, 0xdb, 0xa9, 0x1d, 0xa5, + 0x2d, 0x69, 0x0f, 0x21, 0x3d, 0x77, 0xc9, 0xc7, 0x2c, 0xe4, 0xea, 0x4e, 0x39, 0x29, 0xaf, 0x42, 0x74, 0x72, 0xdf, + 0x63, 0x48, 0x04, 0xfa, 0x9c, 0x63, 0x58, 0x17, 0x0d, 0x75, 0x0e, 0x2b, 0xc4, 0x6c, 0xa1, 0x84, 0xf9, 0x92, 0xf1, + 0x54, 0x32, 0x68, 0x00, 0x64, 0xc0, 0x67, 0x2f, 0x03, 0xcb, 0x5f, 0x41, 0xfc, 0x68, 0xe3, 0xc3, 0xe1, 0xcf, 0x9a, + 0x42, 0x6c, 0xff, 0x84, 0xcd, 0x10, 0x1e, 0xd5, 0x03, 0x9e, 0xf9, 0x26, 0x4e, 0xd0, 0x0a, 0x48, 0xca, 0xec, 0x68, + 0x22, 0x7b, 0xd5, 0x43, 0x38, 0x95, 0x15, 0xa8, 0xa3, 0xac, 0xb3, 0x12, 0x7e, 0x84, 0xa9, 0x6e, 0x25, 0xd6, 0x02, + 0x6d, 0xae, 0x56, 0xac, 0x05, 0x70, 0xe0, 0xe7, 0x10, 0x3c, 0x91, 0xcf, 0xc1, 0xc5, 0xa0, 0x00, 0x9f, 0x03, 0xe0, + 0x45, 0xee, 0xc2, 0x83, 0x79, 0x64, 0x59, 0x8d, 0x30, 0x1c, 0x55, 0xc4, 0xfa, 0x35, 0xdb, 0x91, 0x0f, 0xdc, 0x8e, + 0xf1, 0xb9, 0xf6, 0x58, 0xb2, 0x1c, 0x8c, 0x32, 0xf7, 0x6a, 0x89, 0x9e, 0x37, 0x69, 0xdc, 0x8c, 0x9e, 0xec, 0x6b, + 0xf9, 0xbf, 0xa0, 0x97, 0x41, 0x7f, 0x0b, 0xb7, 0xbc, 0xe6, 0x77, 0x0b, 0x22, 0xcd, 0xf4, 0x0a, 0x22, 0x65, 0xd4, + 0x88, 0x8c, 0x21, 0x6c, 0x52, 0xdd, 0xdc, 0x26, 0xd5, 0x85, 0x80, 0xa7, 0x23, 0x52, 0x5d, 0x0b, 0x69, 0x23, 0x9f, + 0xd6, 0x81, 0x8c, 0x45, 0x7a, 0xf7, 0xc3, 0xdf, 0x5e, 0x7e, 0x7a, 0xfb, 0xcb, 0x0f, 0x8b, 0xb7, 0xef, 0xde, 0xbc, + 0x7d, 0xf7, 0xf6, 0xd3, 0x6f, 0x04, 0xe1, 0x31, 0x15, 0x2a, 0xc3, 0x87, 0xf7, 0x37, 0x6f, 0x9d, 0x0c, 0xb6, 0x37, + 0x43, 0xd6, 0xbe, 0x91, 0x83, 0x21, 0x10, 0xd9, 0x20, 0x64, 0x90, 0x9d, 0xda, 0xf6, 0x67, 0x62, 0x8e, 0xb1, 0x77, + 0x02, 0x93, 0x2d, 0xe0, 0x1c, 0xcb, 0xbc, 0x64, 0x44, 0xae, 0x0a, 0xad, 0x1f, 0xd0, 0x82, 0x6b, 0x70, 0x91, 0x49, + 0xf3, 0xbb, 0x5f, 0x08, 0x62, 0x9f, 0x56, 0x52, 0xee, 0xab, 0x6d, 0xcd, 0xf3, 0xed, 0xfd, 0x5e, 0xc2, 0xf9, 0xcf, + 0xa5, 0x11, 0xb5, 0x00, 0x07, 0xe0, 0x73, 0xf8, 0xe3, 0x4a, 0x5b, 0xd2, 0x64, 0x16, 0xed, 0x67, 0x0c, 0x41, 0x97, + 0x06, 0x1f, 0xc4, 0x1e, 0x79, 0xa9, 0x4f, 0x16, 0x12, 0xb8, 0x23, 0x86, 0x4f, 0x2b, 0x82, 0x5e, 0x31, 0xa2, 0xb8, + 0xe4, 0x0a, 0x95, 0x52, 0xf2, 0x6f, 0x94, 0x5d, 0x54, 0xc8, 0x59, 0xc1, 0xee, 0x15, 0x39, 0x32, 0x7e, 0x10, 0x4c, + 0x7c, 0x39, 0xb8, 0xff, 0x12, 0xef, 0x70, 0xa6, 0x38, 0x92, 0x13, 0xfe, 0x90, 0x61, 0x60, 0x7f, 0x0e, 0x3e, 0xaf, + 0x0e, 0xf3, 0xf2, 0x46, 0x9f, 0x72, 0x4b, 0x3e, 0x9e, 0x2c, 0xaf, 0xc0, 0x60, 0xbf, 0x54, 0xcd, 0x5d, 0xf3, 0x7a, + 0xb6, 0x9c, 0xb3, 0xfd, 0x2c, 0x9a, 0x07, 0x77, 0x6c, 0x96, 0xcd, 0x83, 0x55, 0xc3, 0xd7, 0xec, 0x96, 0xaf, 0xad, + 0xaa, 0xad, 0xed, 0xaa, 0x4d, 0x36, 0xfc, 0x16, 0x24, 0x84, 0x9b, 0xcc, 0x03, 0xde, 0xe3, 0x3b, 0x9f, 0x6d, 0x40, + 0xa2, 0x5d, 0xb1, 0x0d, 0x5c, 0xc4, 0xd6, 0xfc, 0x87, 0xca, 0xdb, 0xb0, 0x92, 0x9d, 0x8f, 0x59, 0x8e, 0xf3, 0xcf, + 0x87, 0x07, 0xb4, 0x17, 0xea, 0x67, 0x97, 0xea, 0xd9, 0x44, 0xd9, 0xcd, 0x36, 0xa3, 0xc5, 0x7d, 0x5a, 0x6d, 0xc2, + 0x0c, 0x3d, 0xcb, 0xe1, 0xa3, 0xad, 0x14, 0xfc, 0xf4, 0x02, 0xbf, 0x64, 0x47, 0x6d, 0xa5, 0x6d, 0xbb, 0x2a, 0xb1, + 0x15, 0xb4, 0x28, 0xb2, 0x5a, 0xe1, 0x81, 0x39, 0x7f, 0x01, 0x0b, 0x18, 0x7b, 0x8e, 0x73, 0x5e, 0xfb, 0x23, 0x64, + 0xbc, 0x77, 0x00, 0xd0, 0x32, 0xc7, 0x01, 0x1e, 0xb1, 0x62, 0x14, 0x0d, 0xde, 0xf9, 0xa5, 0xb2, 0x5a, 0x69, 0x4e, + 0x42, 0xdb, 0x88, 0x55, 0xcb, 0x91, 0xaa, 0x19, 0x91, 0x3e, 0x48, 0xcf, 0xfb, 0x1e, 0x51, 0x0d, 0xf6, 0x64, 0x5e, + 0x07, 0xf6, 0xe9, 0x55, 0x6b, 0x55, 0x77, 0x7e, 0x4f, 0x95, 0x2e, 0x39, 0xb2, 0xe5, 0xa7, 0xcb, 0xf0, 0x41, 0xfd, + 0x29, 0xb9, 0x3e, 0x14, 0x38, 0xc2, 0x63, 0x15, 0x70, 0xbe, 0x5e, 0x89, 0x76, 0x27, 0xc2, 0xae, 0x5c, 0x02, 0x42, + 0x7c, 0x49, 0xd3, 0x1c, 0x8f, 0x23, 0x9a, 0x88, 0xb0, 0x89, 0xd1, 0x5f, 0xd8, 0x7d, 0x28, 0xb1, 0x9c, 0xe7, 0x1a, + 0x94, 0x5c, 0x32, 0x78, 0x4f, 0xda, 0x6b, 0xd0, 0x2c, 0xaf, 0x4a, 0x4d, 0x26, 0x72, 0x50, 0x3e, 0x1c, 0x0a, 0xd8, + 0x4b, 0x8d, 0x9f, 0x26, 0xfc, 0x84, 0xe5, 0xad, 0xbd, 0x35, 0xa5, 0xa8, 0xa4, 0x01, 0x2a, 0xf0, 0x31, 0x83, 0xff, + 0xdd, 0x19, 0x62, 0xc1, 0x14, 0x1d, 0x3f, 0x9c, 0x89, 0xb9, 0xf5, 0xdc, 0x2a, 0xeb, 0x28, 0x5b, 0xa3, 0x9c, 0x80, + 0x7f, 0x4b, 0x75, 0x9c, 0x24, 0xc2, 0xa9, 0xf7, 0x88, 0x8b, 0xba, 0x97, 0x43, 0xd4, 0x0d, 0x7b, 0x5b, 0xe9, 0x60, + 0xcb, 0x69, 0x1a, 0x1c, 0x89, 0x5f, 0xa9, 0xcf, 0xde, 0x67, 0x16, 0x8f, 0x3a, 0xb2, 0x11, 0x25, 0x69, 0x1c, 0x8b, + 0x1c, 0xb6, 0xf7, 0x85, 0xdc, 0xff, 0xfb, 0x7d, 0x08, 0x27, 0xad, 0x82, 0xa4, 0xf4, 0x04, 0x22, 0xc2, 0xd1, 0xe1, + 0x47, 0x84, 0x27, 0x52, 0x55, 0xf8, 0xa4, 0x3e, 0x71, 0x63, 0x76, 0x2f, 0xcc, 0x51, 0xbd, 0x05, 0x18, 0xc6, 0x7a, + 0x6b, 0x11, 0x92, 0x68, 0xa5, 0x19, 0x6d, 0x3d, 0x20, 0x46, 0xbc, 0x5f, 0x5b, 0x64, 0x30, 0xd6, 0x96, 0x44, 0x02, + 0xf8, 0x1d, 0x09, 0x19, 0xda, 0x36, 0x02, 0x33, 0x86, 0xb7, 0xb3, 0xe2, 0xd2, 0x75, 0xd8, 0xe6, 0x1c, 0xbe, 0x90, + 0x85, 0x66, 0x1d, 0x51, 0x9a, 0x20, 0xe4, 0x1f, 0x70, 0xb2, 0x50, 0x18, 0xcd, 0xeb, 0xa3, 0x74, 0x92, 0x58, 0xdf, + 0x77, 0x95, 0x0a, 0x36, 0x9b, 0x1b, 0xd4, 0x97, 0x1d, 0x25, 0xbf, 0x02, 0x27, 0x1d, 0x27, 0x59, 0xe4, 0x20, 0x6a, + 0x51, 0x39, 0x37, 0x49, 0x58, 0xda, 0xd5, 0xa9, 0x36, 0xeb, 0x75, 0x51, 0xd6, 0xd5, 0x6b, 0x11, 0x29, 0x7a, 0x1f, + 0xf5, 0xe8, 0x89, 0x84, 0x54, 0x68, 0x55, 0x6a, 0x97, 0x47, 0xe0, 0xb6, 0xa9, 0x15, 0xdb, 0x72, 0x09, 0x4b, 0xd4, + 0xf8, 0x4f, 0xd0, 0x47, 0xb9, 0x78, 0x90, 0x01, 0x1a, 0x1d, 0x4f, 0xcd, 0x5b, 0x8f, 0xbc, 0x72, 0x94, 0x5f, 0x5a, + 0x6d, 0xd2, 0x2f, 0x80, 0xcc, 0x68, 0xff, 0x68, 0x29, 0x81, 0xcc, 0xc0, 0x4c, 0x5a, 0x1a, 0x12, 0x39, 0x8a, 0x59, + 0x9a, 0xff, 0x81, 0x2b, 0xb6, 0x42, 0xa4, 0x61, 0x35, 0xf7, 0xf8, 0xcb, 0xca, 0xab, 0xe5, 0x5a, 0x66, 0x9a, 0x9b, + 0x25, 0x8e, 0x15, 0x8b, 0x8b, 0x7a, 0x5d, 0x89, 0x2c, 0x10, 0xe2, 0x08, 0xd3, 0x58, 0x4f, 0xbd, 0x51, 0x5a, 0x7d, + 0x40, 0x42, 0x99, 0x1f, 0xb0, 0xb7, 0x63, 0xaf, 0x07, 0x59, 0x88, 0x63, 0xcb, 0xc1, 0x66, 0xeb, 0x7d, 0x2a, 0x53, + 0x11, 0x9f, 0xd5, 0xc5, 0xd9, 0xa6, 0x12, 0x67, 0x75, 0x22, 0xce, 0xbe, 0x83, 0x9c, 0xdf, 0x9d, 0x51, 0xd1, 0x67, + 0x0f, 0x69, 0x9d, 0x14, 0x9b, 0x9a, 0x9e, 0xbc, 0xc1, 0x32, 0xbe, 0x3b, 0x23, 0xae, 0x9a, 0x33, 0x1a, 0xc9, 0x78, + 0x74, 0xf6, 0x21, 0x03, 0x92, 0xd7, 0xb3, 0x74, 0x05, 0x83, 0x77, 0x16, 0xe6, 0xf1, 0x59, 0x29, 0xee, 0xc0, 0xe2, + 0x54, 0x76, 0xbe, 0x07, 0x19, 0x56, 0xe1, 0x1f, 0xe2, 0x0c, 0xa0, 0x5d, 0xcf, 0xd2, 0xfa, 0x2c, 0xad, 0xce, 0xf2, + 0xa2, 0x3e, 0x53, 0x52, 0x38, 0x84, 0xf1, 0xc3, 0x7b, 0xfa, 0xca, 0x2e, 0x6f, 0xb3, 0xb8, 0xcb, 0x22, 0x7f, 0x8a, + 0x5e, 0x45, 0xc4, 0xa4, 0x51, 0x09, 0xaf, 0xdd, 0xdf, 0x36, 0xf7, 0x0f, 0xaf, 0x1b, 0xbb, 0x9f, 0xdd, 0x31, 0xa2, + 0x0b, 0xea, 0xf1, 0x4a, 0x52, 0x2a, 0x28, 0x20, 0x70, 0xa2, 0x59, 0xe3, 0xc1, 0x1d, 0x07, 0xbc, 0x1a, 0xd8, 0x92, + 0xad, 0x7d, 0xfe, 0x22, 0x96, 0x61, 0xda, 0x9b, 0x00, 0xff, 0x2a, 0x7b, 0xd3, 0x75, 0xb0, 0xc4, 0xfb, 0x16, 0xb2, + 0x0d, 0xbd, 0x7d, 0xcd, 0x5f, 0x7a, 0xb9, 0xfa, 0x9b, 0xfd, 0x13, 0x80, 0x30, 0x20, 0x66, 0xd5, 0x47, 0x13, 0xf7, + 0xce, 0xca, 0xb2, 0x73, 0xb2, 0xec, 0x7a, 0xe8, 0xd7, 0x24, 0x46, 0xa5, 0x95, 0xa5, 0x74, 0xb2, 0x94, 0x90, 0x05, + 0x7c, 0x62, 0x34, 0xb5, 0x11, 0x40, 0xd8, 0x8e, 0x52, 0xf9, 0x42, 0xe5, 0x45, 0x14, 0xce, 0x09, 0x9e, 0x27, 0x62, + 0x74, 0x6f, 0x25, 0x03, 0x86, 0x43, 0x08, 0xe6, 0xa0, 0x2d, 0xf6, 0x86, 0x6e, 0x22, 0xfe, 0x7a, 0x53, 0x94, 0x6f, + 0x63, 0xf2, 0x29, 0xd8, 0x9d, 0x7c, 0x5c, 0xc2, 0xe3, 0xf2, 0xe4, 0xe3, 0x10, 0x3d, 0x12, 0x4e, 0x3e, 0x06, 0xdf, + 0x23, 0x39, 0xaf, 0xbb, 0x1e, 0x27, 0xc8, 0x2d, 0xa4, 0xfb, 0xdb, 0x31, 0x09, 0xd0, 0xbc, 0x86, 0xe5, 0xa8, 0xa9, + 0xb8, 0x66, 0x66, 0x8c, 0xe7, 0x8d, 0xde, 0x1f, 0x3b, 0xde, 0x32, 0x85, 0x62, 0x16, 0xf3, 0x1a, 0x7e, 0xcf, 0xaa, + 0x40, 0xdd, 0xf5, 0x36, 0xc9, 0x2d, 0xb3, 0x7a, 0x8e, 0x76, 0xdf, 0xf7, 0x75, 0x22, 0xa8, 0xfd, 0x1d, 0xf6, 0x3c, + 0xb3, 0xde, 0x55, 0x31, 0x70, 0xa9, 0x92, 0x1d, 0x32, 0x55, 0x4d, 0x0f, 0x54, 0x4a, 0x83, 0xa7, 0x97, 0xd6, 0xe5, + 0x4b, 0xa5, 0x8d, 0x3c, 0xd3, 0xfc, 0x06, 0xf0, 0x62, 0xea, 0xb2, 0xd8, 0x7d, 0x75, 0x5f, 0xc1, 0x6d, 0xbc, 0xdf, + 0x5f, 0x56, 0x9e, 0xf9, 0x89, 0x0b, 0xc0, 0xde, 0x54, 0x68, 0x9d, 0x40, 0xa9, 0x61, 0x1d, 0xbe, 0x4a, 0x44, 0xf4, + 0x47, 0xbb, 0x5c, 0x67, 0xae, 0x03, 0x46, 0x14, 0xf1, 0xdb, 0x78, 0xf4, 0x07, 0x28, 0xae, 0x8d, 0x3d, 0x20, 0xac, + 0x43, 0x42, 0x9f, 0x11, 0x80, 0xd4, 0x63, 0x8e, 0x12, 0xd0, 0xac, 0x68, 0xee, 0x98, 0xfc, 0x5c, 0x5f, 0x29, 0xfd, + 0xfd, 0xb2, 0xf2, 0xc8, 0x9c, 0xd2, 0x36, 0xd3, 0x58, 0xad, 0xa9, 0x04, 0xc2, 0x2b, 0x2a, 0x59, 0x85, 0xcf, 0xe6, + 0x8d, 0xe8, 0xf7, 0xe5, 0x11, 0x9e, 0x56, 0x3f, 0x6c, 0x31, 0xbe, 0x15, 0x10, 0x8d, 0x04, 0x40, 0x3f, 0x01, 0xcc, + 0x8b, 0x6c, 0x66, 0xf7, 0x71, 0x40, 0x95, 0x12, 0x4d, 0xe3, 0x6c, 0x9e, 0xdf, 0xd2, 0x9b, 0xb2, 0x83, 0x4e, 0x9d, + 0x2a, 0x70, 0xc1, 0x55, 0xc9, 0x78, 0x65, 0x3d, 0x91, 0xcf, 0x6f, 0x6e, 0x37, 0x69, 0x16, 0xbf, 0x2f, 0xff, 0x89, + 0x63, 0xab, 0xeb, 0xf0, 0xc8, 0xd4, 0xe9, 0xda, 0x79, 0xa4, 0xb5, 0x17, 0x02, 0x22, 0xda, 0x35, 0xd4, 0x7a, 0x61, + 0xa1, 0x47, 0x7a, 0x22, 0x9c, 0x93, 0x44, 0x4d, 0x3b, 0xd0, 0xd2, 0x08, 0x7d, 0x7d, 0xcd, 0xe9, 0x2f, 0x0c, 0xd6, + 0x3e, 0x1f, 0x33, 0x20, 0x2b, 0xd1, 0x8f, 0xd5, 0x43, 0x63, 0x33, 0x87, 0x9e, 0xb5, 0x2a, 0xcf, 0xbc, 0xea, 0x70, + 0x40, 0x7c, 0x18, 0xfd, 0x25, 0xbf, 0xdf, 0x7f, 0x4d, 0xf3, 0x8f, 0x09, 0x35, 0x7e, 0xb6, 0x19, 0xa0, 0x6b, 0xdf, + 0x95, 0x07, 0xa2, 0x9e, 0x6b, 0x95, 0x20, 0xc4, 0x1b, 0xc4, 0x44, 0x33, 0x62, 0x0e, 0x4e, 0x3b, 0xd4, 0xfc, 0x93, + 0xd4, 0x80, 0x10, 0x25, 0x5e, 0xc7, 0x94, 0x05, 0x39, 0x6d, 0xe2, 0x48, 0x3f, 0x0a, 0x27, 0xf2, 0xa3, 0xa8, 0x8a, + 0xec, 0x1e, 0x2e, 0x18, 0x4c, 0xbd, 0xa7, 0xfd, 0x12, 0xfd, 0x96, 0x70, 0xe4, 0x1c, 0xad, 0x0a, 0x41, 0xe4, 0x84, + 0xb0, 0xd6, 0x10, 0x26, 0x88, 0x0d, 0xe2, 0x65, 0xdf, 0x25, 0x19, 0x8e, 0x14, 0x5c, 0xd6, 0xb1, 0x63, 0xcc, 0xd5, + 0x51, 0xf5, 0x1a, 0xc0, 0x78, 0xe5, 0x08, 0x9a, 0x8d, 0x22, 0xbb, 0x84, 0xa8, 0x22, 0xc7, 0x13, 0x50, 0x3b, 0x28, + 0x8d, 0xcd, 0xf4, 0x7c, 0x1c, 0xe4, 0xa3, 0x45, 0x85, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x73, 0xd5, 0xcf, + 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x8a, 0xe9, 0x72, + 0x60, 0xdc, 0x37, 0xbc, 0xa2, 0x38, 0xc3, 0x8f, 0x1e, 0x6c, 0x71, 0xfe, 0x74, 0x43, 0xed, 0xc7, 0xdc, 0xa8, 0x87, + 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, 0xfc, 0x43, + 0x99, 0xae, 0x52, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, 0xa2, 0xac, + 0xdf, 0x87, 0xdf, 0x57, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, 0x93, 0x41, + 0x0d, 0xda, 0xf0, 0x0d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, 0xec, 0x4f, + 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xe3, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xc7, 0x97, 0xfc, 0x06, 0xbd, + 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, 0x8f, 0x51, + 0xc9, 0x62, 0x4b, 0x8f, 0x55, 0xd1, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x05, 0xc1, 0x12, 0x18, + 0x17, 0xb1, 0xe6, 0x9b, 0x41, 0xce, 0xe2, 0xd9, 0x66, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1c, 0x0a, 0x09, 0x36, 0x93, + 0xcd, 0xd6, 0x73, 0xb6, 0xf6, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, 0x35, 0x58, + 0xad, 0xa6, 0x6c, 0x55, 0x53, 0x76, 0x4e, 0x53, 0x8e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, 0x88, 0x4d, + 0xa2, 0xab, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, 0x50, 0x85, + 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, 0xbe, 0xa5, + 0x8e, 0x7b, 0x94, 0x6d, 0xfe, 0x2e, 0x76, 0x41, 0x88, 0xdc, 0x8d, 0x3b, 0xf5, 0x33, 0xe2, 0xbd, 0xdd, 0x11, 0xc6, + 0x4f, 0x76, 0xdc, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8b, 0x79, 0x35, 0x49, 0x50, 0xcb, 0x92, 0xf8, 0x1b, + 0x9e, 0x0c, 0x72, 0xb6, 0x04, 0x0f, 0xda, 0x39, 0xcb, 0x00, 0x7f, 0xc5, 0x6a, 0xd1, 0x6f, 0xb5, 0xb7, 0x04, 0xf9, + 0x69, 0x63, 0x37, 0x0a, 0x13, 0x23, 0x48, 0xd4, 0xed, 0xca, 0x40, 0x7e, 0xf8, 0x80, 0xd3, 0xf1, 0xd8, 0x53, 0xc6, + 0xdc, 0xca, 0xf4, 0x32, 0x9d, 0x2b, 0xf9, 0x46, 0xee, 0xa5, 0x8f, 0xbd, 0x04, 0x3b, 0x07, 0xbc, 0x81, 0xb4, 0x81, + 0x37, 0xb0, 0x5d, 0x78, 0x6d, 0x90, 0x30, 0x23, 0xc0, 0x16, 0xc7, 0xc7, 0x48, 0x09, 0x0c, 0xe1, 0x38, 0x4b, 0x01, + 0x98, 0x46, 0x5f, 0x66, 0x2b, 0xfb, 0x32, 0xab, 0x35, 0x5b, 0x2a, 0xa7, 0x7b, 0xe7, 0xd6, 0xed, 0x7c, 0x22, 0x01, + 0xc0, 0xa4, 0xce, 0x81, 0x38, 0x33, 0xc1, 0x2e, 0x4d, 0x22, 0xcb, 0xc7, 0x30, 0xbf, 0x13, 0x6f, 0xca, 0x62, 0xa5, + 0xba, 0xa2, 0xed, 0x33, 0x93, 0xcf, 0x48, 0x27, 0xa1, 0x02, 0x0a, 0x0a, 0xb9, 0xd6, 0xa7, 0xef, 0xc2, 0x77, 0x41, + 0xa1, 0x81, 0xd9, 0x2a, 0xdc, 0xd3, 0x64, 0x8d, 0xd4, 0x1b, 0x55, 0xbf, 0x4f, 0xae, 0x81, 0x54, 0x67, 0x0e, 0x2d, + 0x7b, 0x52, 0x61, 0x80, 0xd8, 0x51, 0x9f, 0x91, 0x50, 0x07, 0x52, 0x0f, 0x18, 0x42, 0xb4, 0x4d, 0x1f, 0x7f, 0x32, + 0x24, 0xba, 0x00, 0x5b, 0x88, 0x36, 0xf0, 0xe3, 0x4f, 0xb0, 0xcf, 0x82, 0xf0, 0x98, 0xe6, 0xd7, 0x90, 0x74, 0x6c, + 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0xb9, 0x94, + 0xea, 0x58, 0xa9, 0xb7, 0x6d, 0xed, 0x07, 0xd1, 0x16, 0x1c, 0x59, 0xc4, 0xdf, 0x67, 0x88, 0x08, 0x66, 0x06, 0x11, + 0x76, 0x2d, 0xd4, 0xdd, 0x9e, 0x52, 0xcb, 0xa2, 0xde, 0xf6, 0x94, 0x52, 0xb7, 0x61, 0xf8, 0x6e, 0x82, 0x99, 0xe2, + 0x86, 0xff, 0x91, 0x79, 0xa1, 0xde, 0x78, 0x2c, 0x0a, 0x74, 0xcf, 0xdf, 0x2f, 0x79, 0x35, 0xdb, 0x28, 0x13, 0xe6, + 0x1d, 0x5f, 0xce, 0x42, 0xd9, 0xd5, 0xd2, 0xb8, 0xf3, 0xd9, 0x5b, 0xaa, 0xf9, 0xe0, 0x1f, 0x0e, 0x09, 0xc4, 0x1b, + 0xc5, 0x57, 0x77, 0x8d, 0xdc, 0xba, 0x26, 0x9b, 0xab, 0x12, 0x50, 0xbf, 0xcf, 0xd7, 0xb8, 0xdf, 0x62, 0xfd, 0xbb, + 0xa7, 0x41, 0xc6, 0x6a, 0x86, 0x2b, 0xa6, 0xf0, 0x29, 0x00, 0x0c, 0x0e, 0xa7, 0x82, 0xb4, 0xc0, 0x1b, 0x5e, 0x0e, + 0x2f, 0x27, 0x1b, 0x32, 0xe9, 0x6e, 0x7c, 0xe4, 0xce, 0x02, 0x55, 0xef, 0x37, 0x14, 0x27, 0x0d, 0x12, 0x8d, 0xbd, + 0x06, 0x5f, 0x66, 0x19, 0xe5, 0xa2, 0x89, 0xfb, 0x98, 0x7c, 0xa5, 0x07, 0x30, 0x57, 0xa1, 0x04, 0x88, 0x7e, 0x63, + 0x59, 0x6c, 0x44, 0xdb, 0x62, 0x03, 0x4b, 0xa9, 0x9a, 0xeb, 0xd5, 0xf4, 0xd9, 0x2b, 0xd1, 0xbc, 0x8f, 0x66, 0x9c, + 0xd2, 0x68, 0xc0, 0x71, 0x1a, 0x85, 0xdb, 0xf7, 0xf7, 0xa2, 0x5c, 0x66, 0x60, 0xc9, 0x56, 0xe1, 0x14, 0x97, 0x8d, + 0x3a, 0x23, 0x5e, 0xe6, 0xb1, 0x02, 0xe8, 0x78, 0x4c, 0x00, 0x54, 0x17, 0x04, 0x54, 0x44, 0x4b, 0xe9, 0xad, 0xd0, + 0x62, 0xa1, 0xde, 0x70, 0x94, 0xc2, 0x1f, 0xe9, 0xcf, 0x83, 0x7c, 0x0a, 0x40, 0xec, 0xfa, 0x38, 0x7a, 0x53, 0x94, + 0xf4, 0xa9, 0x62, 0x96, 0xcb, 0xc1, 0x04, 0x76, 0x75, 0x22, 0x43, 0xad, 0x20, 0x6f, 0xd5, 0x95, 0xb7, 0x32, 0x79, + 0x1b, 0xe3, 0x94, 0xfc, 0xc8, 0x4d, 0xc7, 0x1a, 0x31, 0xf0, 0xca, 0xd3, 0x3a, 0x4d, 0x90, 0x26, 0x17, 0xc0, 0x30, + 0xc4, 0xb7, 0x99, 0xf7, 0xd2, 0x73, 0xa4, 0x2a, 0x48, 0x66, 0xbb, 0xcc, 0x53, 0x17, 0x51, 0x7d, 0xe5, 0xd4, 0xd2, + 0x99, 0xd3, 0x8f, 0x00, 0xde, 0x63, 0x6a, 0xd2, 0x90, 0x8f, 0x70, 0x5b, 0x8a, 0xaf, 0xb7, 0xea, 0x1a, 0x2f, 0x8d, + 0xce, 0xdd, 0xcb, 0x97, 0xee, 0x34, 0xe8, 0xa7, 0x20, 0x28, 0xe7, 0xcb, 0x52, 0xc0, 0x9e, 0x32, 0x9b, 0xeb, 0xd5, + 0xaa, 0x15, 0x5a, 0x87, 0xc3, 0x58, 0x3b, 0x0a, 0x69, 0x75, 0x16, 0xb0, 0xd5, 0x48, 0xa7, 0x04, 0x08, 0xc1, 0x71, + 0x1a, 0x76, 0x82, 0x71, 0x97, 0x4e, 0x23, 0xb2, 0x5e, 0x29, 0x49, 0x17, 0x66, 0x90, 0xfc, 0x93, 0xbc, 0x9e, 0x01, + 0x2d, 0x01, 0x1c, 0x8a, 0x58, 0xc2, 0xc3, 0x49, 0x72, 0x05, 0xd0, 0xe9, 0x70, 0x50, 0x69, 0x68, 0xce, 0x6a, 0x96, + 0xcc, 0x27, 0xb1, 0x54, 0x55, 0x1e, 0x0e, 0x9e, 0x72, 0x33, 0xe8, 0xf7, 0xb3, 0x69, 0xa9, 0x5c, 0x00, 0x82, 0x58, + 0x17, 0x06, 0x88, 0x47, 0x5a, 0x78, 0xb2, 0xe8, 0x53, 0x12, 0xbf, 0x9c, 0x25, 0x73, 0x93, 0x0d, 0xef, 0xc0, 0x08, + 0x36, 0xe3, 0xba, 0xa4, 0x4c, 0x7b, 0x54, 0x7e, 0xcf, 0xe8, 0xa9, 0xed, 0x6b, 0xad, 0xb6, 0x88, 0x75, 0x1d, 0x5c, + 0x95, 0xa8, 0xa7, 0xf8, 0xa0, 0x24, 0xc1, 0xfb, 0xb5, 0x73, 0x33, 0x52, 0xbe, 0x16, 0xb9, 0x1f, 0xb4, 0x33, 0xb5, + 0x72, 0xe0, 0x08, 0xe4, 0x58, 0x45, 0x25, 0xaf, 0x77, 0x1d, 0x82, 0x47, 0x77, 0xa5, 0x02, 0xe5, 0xe0, 0x17, 0x20, + 0x46, 0xd7, 0x57, 0x9d, 0x35, 0xd4, 0x4c, 0xa3, 0xca, 0x23, 0xe8, 0xd4, 0x01, 0x3c, 0x29, 0x78, 0xa9, 0xd5, 0x8f, + 0x87, 0x83, 0x67, 0x7e, 0xf0, 0x57, 0x99, 0xbe, 0x85, 0x98, 0x28, 0xa7, 0x1a, 0x21, 0x71, 0xa5, 0x24, 0x11, 0x1f, + 0x2f, 0x5a, 0x56, 0x8c, 0xca, 0xf0, 0x81, 0x57, 0xaa, 0x7c, 0x75, 0xaa, 0xf2, 0x62, 0xa4, 0x6d, 0x09, 0xbc, 0x26, + 0xff, 0x10, 0xb9, 0xe6, 0xad, 0xaf, 0xbb, 0xca, 0xd0, 0x6b, 0x59, 0x81, 0x8e, 0x60, 0x2b, 0x4b, 0xc9, 0x01, 0x9f, + 0x54, 0x77, 0xd5, 0xaa, 0xf5, 0x39, 0x65, 0x1b, 0xe1, 0x26, 0xbf, 0x8e, 0x1d, 0x1c, 0x29, 0xbf, 0xc1, 0x73, 0x01, + 0xec, 0x35, 0x60, 0x6f, 0xce, 0x59, 0xd1, 0x3c, 0x3a, 0xa4, 0x6d, 0x81, 0x46, 0x66, 0x6e, 0xe7, 0xea, 0xbe, 0x2d, + 0x8f, 0xd2, 0x18, 0x22, 0xd3, 0x1e, 0x99, 0x0e, 0x36, 0xa3, 0xfc, 0xb7, 0x94, 0xdf, 0x2a, 0x1c, 0x03, 0xdf, 0x4e, + 0xbd, 0x03, 0xa8, 0x7a, 0xda, 0x20, 0x63, 0xcd, 0x30, 0xb4, 0xb2, 0xcb, 0xa5, 0xd0, 0x12, 0xb4, 0xd4, 0x4d, 0x10, + 0x9c, 0x1f, 0x11, 0xe5, 0x08, 0x40, 0x17, 0x29, 0x60, 0x82, 0x9f, 0xd2, 0x76, 0xf7, 0xfb, 0xeb, 0xd4, 0x23, 0xf7, + 0xae, 0x50, 0xa3, 0x84, 0x12, 0x8c, 0xfd, 0x44, 0x63, 0x06, 0x1d, 0x5d, 0x91, 0x13, 0x9e, 0xb5, 0x3a, 0xac, 0xeb, + 0xa6, 0x0c, 0xca, 0xe2, 0x98, 0x57, 0xd3, 0xd9, 0xef, 0x4f, 0xf6, 0x75, 0x83, 0x2c, 0xe4, 0xbf, 0xb3, 0x1e, 0x92, + 0x41, 0xf7, 0x20, 0x14, 0xa2, 0x37, 0x0f, 0x66, 0xf8, 0x1f, 0xdb, 0xf0, 0xec, 0x1b, 0x6e, 0xd4, 0x09, 0x60, 0x8e, + 0xb8, 0x5e, 0x7a, 0x8a, 0xb6, 0x1e, 0x6e, 0x81, 0x6c, 0x8d, 0x97, 0xb7, 0xf6, 0x1a, 0xc8, 0x29, 0x8e, 0xff, 0x8e, + 0x67, 0x6a, 0x65, 0x83, 0x9f, 0x9e, 0xb2, 0x1d, 0x78, 0x78, 0x11, 0x02, 0x8a, 0x61, 0xd9, 0xf8, 0x3b, 0xcb, 0x71, + 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, 0x5b, 0x79, 0x77, 0xe4, + 0x94, 0x79, 0xa7, 0x87, 0xd1, 0x75, 0x49, 0xfa, 0x26, 0xf9, 0xd8, 0x1a, 0xb6, 0xdf, 0xb5, 0xfb, 0xcd, 0x10, 0x41, + 0x08, 0xe5, 0xf8, 0x39, 0xa3, 0x13, 0x1a, 0x1f, 0x56, 0xb3, 0xd3, 0xeb, 0xf7, 0xce, 0xf1, 0x82, 0xad, 0xd1, 0x00, + 0x8f, 0x87, 0x2e, 0xe6, 0x89, 0x1a, 0x3a, 0x5d, 0xd7, 0xce, 0xc1, 0x03, 0x83, 0x2c, 0x4f, 0xbe, 0x61, 0x58, 0x62, + 0x7f, 0x12, 0xf1, 0xa4, 0xad, 0xda, 0xd8, 0x1c, 0xa9, 0x36, 0x6a, 0x06, 0x7e, 0xf0, 0x0a, 0x0a, 0x8c, 0x2e, 0x48, + 0x2b, 0x30, 0x0e, 0x47, 0x00, 0xb2, 0x62, 0x1c, 0x8f, 0x0c, 0x26, 0x30, 0xa4, 0x1b, 0x8a, 0x02, 0xf0, 0xf0, 0x38, + 0x1e, 0x84, 0x0c, 0x20, 0x5d, 0xf0, 0xd0, 0xb0, 0x4d, 0x42, 0xca, 0xcf, 0xf3, 0xbc, 0x56, 0x43, 0xe8, 0x3b, 0x0b, + 0xd5, 0xb1, 0x1f, 0x69, 0xaf, 0x58, 0xd7, 0xaa, 0x74, 0x64, 0xab, 0x03, 0xf4, 0x0d, 0x19, 0xf8, 0xd6, 0xb1, 0x05, + 0x40, 0xb4, 0xc4, 0x6f, 0xa9, 0x57, 0xfb, 0x32, 0x66, 0x85, 0x7a, 0x7d, 0x61, 0xda, 0xf5, 0x5a, 0x5a, 0x14, 0x50, + 0x71, 0xdb, 0xaa, 0xed, 0x91, 0x9c, 0xff, 0xf8, 0xae, 0xa3, 0x1d, 0x9f, 0x9d, 0x1a, 0x5b, 0x42, 0x99, 0x5b, 0x3c, + 0x91, 0xd5, 0xd1, 0x96, 0xea, 0x54, 0x1f, 0x70, 0xa9, 0x49, 0x75, 0x66, 0x60, 0x78, 0x8d, 0x00, 0xe5, 0x16, 0x22, + 0x69, 0x1c, 0xf6, 0xce, 0x27, 0x83, 0x82, 0xb9, 0x45, 0x02, 0x12, 0xd8, 0xc6, 0xd6, 0x2e, 0x9a, 0xeb, 0xd7, 0x6f, + 0xa9, 0x57, 0xb5, 0xa9, 0xea, 0xc1, 0x1b, 0x2f, 0x70, 0xf6, 0x4e, 0x6b, 0x01, 0x01, 0x14, 0xb6, 0x96, 0xe5, 0xe0, + 0xdc, 0xed, 0xaa, 0x96, 0x8a, 0x32, 0xea, 0xf7, 0xcf, 0x7f, 0x4b, 0x51, 0x11, 0x7b, 0xaa, 0x38, 0x65, 0xfd, 0x76, + 0xcb, 0x5c, 0x54, 0x96, 0xbc, 0x41, 0x15, 0xad, 0xd5, 0x51, 0x53, 0xb9, 0x6e, 0xae, 0x5a, 0x32, 0x41, 0x8c, 0xee, + 0xd3, 0xb5, 0xce, 0x9d, 0x7a, 0xef, 0x55, 0x1c, 0x31, 0x10, 0xdc, 0x74, 0x8f, 0x0f, 0x0e, 0x42, 0xa3, 0xa2, 0x5c, + 0x70, 0xa3, 0xb4, 0xaa, 0xa4, 0x14, 0xf2, 0x56, 0x45, 0x73, 0xa6, 0x8f, 0x00, 0x88, 0x00, 0xab, 0x44, 0xfd, 0x1f, + 0xbe, 0x34, 0xc6, 0x83, 0x07, 0xbe, 0x26, 0xd7, 0xb1, 0xf5, 0xfe, 0x69, 0x8d, 0xb4, 0xda, 0x38, 0x26, 0xb5, 0xea, + 0x65, 0xab, 0x78, 0xd9, 0xbd, 0x4e, 0xc5, 0xe0, 0xf9, 0xff, 0xdc, 0x07, 0xa8, 0x11, 0x2d, 0x65, 0x70, 0xeb, 0x6a, + 0x80, 0xc6, 0x87, 0x63, 0xe1, 0x1b, 0x3f, 0x64, 0x9c, 0x0f, 0x66, 0xe8, 0xa8, 0x36, 0x07, 0x07, 0x04, 0x47, 0x75, + 0x8f, 0xc6, 0x84, 0x59, 0x38, 0xf7, 0x20, 0x50, 0x7d, 0xe2, 0x3e, 0xe3, 0xda, 0x0b, 0xda, 0x04, 0x3e, 0x59, 0xd7, + 0x35, 0x45, 0x80, 0x8b, 0xd8, 0x98, 0x88, 0x21, 0x2e, 0x9b, 0x44, 0xea, 0x9b, 0x31, 0x28, 0x00, 0x8a, 0x17, 0x15, + 0xc9, 0xa5, 0x8b, 0x34, 0xaf, 0x44, 0x59, 0xeb, 0x66, 0x54, 0xac, 0x18, 0x02, 0xc0, 0x43, 0x50, 0x5c, 0x55, 0x66, + 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x6a, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, 0xd2, 0x3b, 0x1f, 0xb7, 0xce, + 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, 0x3f, 0xe3, 0x2f, 0x08, 0x4c, + 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x82, 0x97, 0x93, 0x70, 0x38, 0xf4, 0x41, 0x1f, + 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, 0x10, 0xd1, 0x42, 0x43, 0x1f, + 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, 0xda, 0xd0, 0x22, 0xc5, 0x45, + 0xa3, 0xcc, 0x66, 0xb9, 0xec, 0x84, 0x8d, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, 0x54, 0xad, 0xa7, 0x7a, 0x3d, + 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa4, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, 0xa3, 0x6a, 0x9d, 0xa5, 0x11, + 0x55, 0x6e, 0x92, 0xbb, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0x97, 0x29, 0x3b, 0x5b, 0x83, 0x13, 0x47, 0x9e, 0x4b, 0x6e, + 0xf9, 0xee, 0xbc, 0xa2, 0xbb, 0x53, 0xed, 0x5b, 0x80, 0x7b, 0x33, 0x6c, 0xc8, 0x9c, 0xd7, 0xd8, 0x69, 0x10, 0x26, + 0x81, 0x1f, 0xb1, 0x8f, 0x19, 0xb2, 0xc1, 0x80, 0x8e, 0x42, 0xfa, 0x5f, 0x5b, 0xe6, 0x48, 0xc0, 0xe4, 0xaf, 0xe7, + 0x7e, 0xb3, 0x28, 0x72, 0x58, 0x8c, 0x1f, 0x36, 0x18, 0x69, 0xac, 0xd6, 0x60, 0x58, 0xde, 0x21, 0xf2, 0xa7, 0x76, + 0xc7, 0x34, 0xd5, 0xf1, 0x66, 0xbd, 0xd6, 0xfc, 0xea, 0xe9, 0x53, 0x5d, 0x9f, 0xff, 0xf6, 0xfd, 0x65, 0x58, 0x33, + 0xfb, 0x43, 0x10, 0x4a, 0xbb, 0x77, 0x8b, 0x73, 0x47, 0xa2, 0x77, 0xac, 0x34, 0xb3, 0x4b, 0xbb, 0x64, 0x97, 0xa6, + 0xb4, 0x1b, 0x72, 0xbd, 0xfa, 0x4a, 0x79, 0x63, 0xe7, 0x15, 0xd3, 0xfd, 0x7b, 0xa1, 0x77, 0x94, 0x53, 0x35, 0x81, + 0x88, 0x26, 0xed, 0x48, 0xdc, 0xee, 0x95, 0xe1, 0xf3, 0x49, 0xde, 0x2e, 0xe1, 0xa8, 0x6b, 0x58, 0x6e, 0xbe, 0xfd, + 0xcf, 0xbc, 0xea, 0xac, 0x70, 0xfb, 0xa5, 0x31, 0x6b, 0x7f, 0x0a, 0xe2, 0xaa, 0xfe, 0xf0, 0x9e, 0xd4, 0x4c, 0xc9, + 0xff, 0x55, 0x8f, 0x81, 0xab, 0x9f, 0x4c, 0x3b, 0xba, 0xa7, 0x10, 0x36, 0x98, 0xfd, 0xfc, 0xf8, 0xa1, 0x05, 0xab, + 0xea, 0x02, 0x45, 0x72, 0x00, 0x9d, 0xbb, 0x64, 0x84, 0xf7, 0x3b, 0xc6, 0xb9, 0x7f, 0xf5, 0xbd, 0x9a, 0x1c, 0x21, + 0xa2, 0x5d, 0x84, 0x03, 0x80, 0xb8, 0xd3, 0x54, 0xd6, 0xa1, 0x06, 0xe8, 0x03, 0x02, 0xeb, 0xd0, 0xb7, 0x19, 0xc0, + 0x41, 0x1f, 0x6d, 0x9e, 0x45, 0x20, 0xaf, 0x7b, 0xf7, 0xec, 0x9a, 0xed, 0x7c, 0xfe, 0x62, 0x95, 0x7a, 0xf7, 0xe8, + 0x10, 0x7c, 0x3e, 0xf6, 0xa7, 0x97, 0x81, 0xc1, 0x85, 0x66, 0xd7, 0xcf, 0x04, 0xdb, 0xb1, 0xdd, 0x33, 0x44, 0x2a, + 0xea, 0xce, 0x3f, 0xbc, 0x34, 0xd1, 0xf3, 0xce, 0x0b, 0x77, 0x7c, 0x09, 0xe0, 0x81, 0x2c, 0x06, 0x14, 0x9f, 0xa5, + 0xf7, 0x2f, 0x96, 0x80, 0x9a, 0xfc, 0x96, 0xaf, 0xbd, 0x2f, 0x94, 0xba, 0x80, 0x3f, 0x07, 0x94, 0x3e, 0xc9, 0xb9, + 0x77, 0x37, 0xbc, 0xf5, 0x2f, 0x9e, 0x83, 0xf3, 0xc4, 0x6a, 0xb8, 0x80, 0xbf, 0x0a, 0x3e, 0xf4, 0xee, 0x06, 0x98, + 0x58, 0xf2, 0xa1, 0xb7, 0x1a, 0x40, 0xaa, 0xc2, 0x85, 0xc4, 0xd8, 0x87, 0x5f, 0x83, 0x9c, 0xe1, 0x1f, 0xbf, 0x69, + 0x0c, 0xd6, 0x5f, 0x83, 0x42, 0xa3, 0xb1, 0x96, 0x2a, 0x64, 0x29, 0x16, 0x67, 0x02, 0x6c, 0xc2, 0x71, 0xb7, 0x2f, + 0x56, 0xb5, 0x59, 0x0b, 0xfa, 0xf3, 0x11, 0xdf, 0xa3, 0xb1, 0xba, 0x2a, 0xe7, 0xa2, 0xfc, 0x88, 0xf4, 0xa9, 0x8e, + 0x8f, 0x51, 0xb1, 0xa9, 0xbb, 0xd3, 0xa9, 0x56, 0x1d, 0x69, 0xbf, 0x29, 0xd7, 0x60, 0xc7, 0xeb, 0xe4, 0xc8, 0x52, + 0x78, 0xd6, 0x61, 0xe7, 0xa5, 0x53, 0xa2, 0xc3, 0x30, 0xde, 0x6d, 0xd5, 0x33, 0x86, 0xf2, 0xdc, 0x60, 0x4c, 0x17, + 0x3c, 0xe2, 0x2f, 0x06, 0xb9, 0x0c, 0x8d, 0xf9, 0x80, 0x6c, 0x18, 0xca, 0x87, 0x16, 0x19, 0x12, 0x22, 0xde, 0x43, + 0x25, 0x60, 0xdb, 0x82, 0x32, 0x29, 0xe0, 0x2c, 0x1a, 0xfc, 0x56, 0x7b, 0x39, 0xf0, 0x1e, 0x44, 0x7e, 0x23, 0x5d, + 0xca, 0x25, 0x36, 0x3a, 0x71, 0x2c, 0x0b, 0xed, 0x3c, 0xae, 0xbf, 0x8e, 0x41, 0xfd, 0x5e, 0xe9, 0x37, 0x28, 0x67, + 0x7f, 0x94, 0xac, 0xd3, 0xc6, 0x13, 0xe3, 0x1f, 0xae, 0xf2, 0x4f, 0xd1, 0x52, 0x0f, 0xff, 0x9f, 0x31, 0x85, 0xd2, + 0xbf, 0x4a, 0xcb, 0x68, 0xb3, 0x5a, 0x8a, 0x52, 0xe4, 0x91, 0x38, 0xf9, 0x5a, 0x64, 0xe7, 0xf2, 0x9d, 0x4f, 0xa1, + 0x5f, 0x00, 0x5a, 0xf6, 0x09, 0x32, 0xfa, 0x7b, 0x26, 0xf8, 0xf0, 0x7b, 0xed, 0x5c, 0x9b, 0xf3, 0xf1, 0x24, 0xbf, + 0xb2, 0xf6, 0x6e, 0xc7, 0x8b, 0xc4, 0x28, 0xc6, 0x72, 0x5f, 0x75, 0xb3, 0x72, 0xa2, 0x92, 0x03, 0x23, 0x5d, 0x93, + 0xbd, 0x5c, 0xc9, 0xba, 0x9d, 0x6e, 0x25, 0x10, 0x51, 0x05, 0xde, 0x63, 0x5c, 0xc5, 0x3e, 0x82, 0xe9, 0xba, 0xe3, + 0x32, 0xda, 0xf1, 0x9e, 0xf1, 0xea, 0x44, 0x59, 0xc1, 0xed, 0x46, 0xb4, 0x27, 0x74, 0xf4, 0xd3, 0xa4, 0xb6, 0x2c, + 0x1c, 0x80, 0xdc, 0x25, 0x8c, 0x65, 0x43, 0xb0, 0x62, 0x50, 0xfa, 0x7a, 0x4d, 0xc9, 0xb2, 0x00, 0x8b, 0xce, 0x2e, + 0x23, 0x10, 0xc3, 0xba, 0x69, 0x4e, 0xe8, 0x78, 0xe9, 0xe2, 0xbc, 0xd7, 0x2a, 0x52, 0xf0, 0x8c, 0x16, 0x1d, 0x73, + 0xd3, 0x91, 0x6e, 0x8c, 0xf6, 0xf6, 0x7b, 0x83, 0x90, 0xe2, 0xf9, 0x03, 0x5b, 0xad, 0x8b, 0x8b, 0xc4, 0x2b, 0x64, + 0xa2, 0x05, 0xb1, 0x14, 0x81, 0x19, 0x2f, 0x34, 0x8d, 0x30, 0x41, 0x99, 0x12, 0x2c, 0x5a, 0xa3, 0x43, 0xfb, 0xc3, + 0x12, 0x76, 0x8f, 0x31, 0x02, 0x04, 0xaa, 0x4c, 0x9f, 0xc3, 0xd6, 0x84, 0xd9, 0xd4, 0xc5, 0x06, 0x68, 0xab, 0x18, + 0x1a, 0x84, 0xb5, 0x21, 0xe6, 0x63, 0x9a, 0xdf, 0xfd, 0x0b, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, 0xde, 0xed, 0x9a, 0x84, + 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xa8, 0x1d, 0x6b, 0xa9, 0x77, 0xac, 0xb5, + 0xde, 0xb1, 0xee, 0x1a, 0xfe, 0x21, 0xf3, 0x62, 0x96, 0x80, 0x7e, 0x77, 0xc5, 0x55, 0x83, 0xa0, 0x19, 0x1b, 0x76, + 0x0b, 0xbf, 0x25, 0xd6, 0x6e, 0xe9, 0x5f, 0x2c, 0xd9, 0xc2, 0xf4, 0x81, 0x6e, 0x1d, 0x60, 0x19, 0x51, 0x93, 0xef, + 0x91, 0x77, 0xd3, 0x59, 0x51, 0xb8, 0x3d, 0xb1, 0x85, 0xcf, 0xae, 0xcd, 0x9b, 0xf7, 0xcf, 0x22, 0xc8, 0xbd, 0xe3, + 0xde, 0xfd, 0xf0, 0xda, 0xbf, 0xd0, 0x2d, 0x90, 0x93, 0x59, 0xce, 0x40, 0xea, 0x88, 0x4f, 0x10, 0xad, 0xec, 0x29, + 0xdf, 0x09, 0xb9, 0xb3, 0xad, 0x9f, 0xdd, 0xbb, 0xdb, 0xda, 0xdd, 0xb3, 0x7b, 0x56, 0x8d, 0x28, 0x56, 0x9c, 0xa6, + 0x48, 0x98, 0x45, 0x1b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xdd, 0xb3, 0x8e, 0x8e, 0x97, 0x73, 0xc0, + 0xee, 0xfe, 0xa3, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0x77, 0xcf, 0x32, 0x8d, 0xe7, 0x70, 0x24, 0x9f, 0x8e, + 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, 0xd6, 0x35, 0x6f, 0xaf, + 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, 0x70, 0xbc, 0xe4, 0xb1, + 0xef, 0xd3, 0x2c, 0xad, 0x77, 0xa8, 0xb5, 0xa8, 0x2c, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, 0x61, 0xa9, 0xe9, 0x9f, + 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2b, 0x2e, 0xbe, 0x3f, 0x2d, 0x94, 0x6b, 0x37, 0x6f, 0xe3, + 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x8e, 0x94, 0x5d, 0x2c, 0xe1, 0x1e, + 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf1, 0x9c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, 0x62, 0x5b, 0xb8, 0x78, + 0xce, 0x36, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0x8d, 0x6a, 0x8e, 0x35, 0xd4, 0x6c, 0x6d, + 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0xee, 0xda, 0x8a, 0x8f, 0x95, 0xb5, 0x2e, 0xdd, 0xeb, 0x3d, 0xaa, 0x0b, 0x60, + 0xeb, 0xbf, 0x3d, 0x5e, 0xb9, 0x9e, 0xcf, 0x08, 0xe0, 0x6b, 0xc1, 0xc7, 0x93, 0x05, 0x7a, 0x95, 0x2c, 0xfc, 0xdb, + 0x81, 0x1a, 0x7f, 0xa7, 0x73, 0x17, 0x00, 0x5d, 0x49, 0x79, 0x05, 0xe4, 0x1d, 0xe4, 0x98, 0x5b, 0x76, 0xe5, 0xfd, + 0xc9, 0x77, 0xd8, 0x35, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x81, 0x53, 0x41, 0x32, 0xb0, 0x97, 0x15, 0xdb, 0x05, 0xb1, + 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x84, 0x20, 0xae, 0xe0, 0x16, 0xe2, 0xf0, 0xe4, 0x9f, 0x83, 0xfb, 0xd6, 0x66, + 0x7d, 0xcf, 0xac, 0xce, 0x09, 0xd6, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0x56, 0xfd, 0xbe, 0xb7, 0xd3, 0x8e, 0x4f, + 0x77, 0x52, 0x27, 0x76, 0x5a, 0xab, 0xb5, 0x60, 0xd7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x40, 0xfc, 0x74, 0x3b, 0xe0, + 0xf7, 0x1d, 0x6b, 0xcb, 0xbb, 0x66, 0x0b, 0xb6, 0x83, 0x4b, 0x50, 0xd3, 0x5e, 0xf6, 0x27, 0x95, 0x0b, 0xda, 0xb1, + 0x4b, 0xe2, 0xe1, 0x8c, 0x59, 0xa5, 0xcc, 0xac, 0x93, 0xea, 0x4a, 0x74, 0xc6, 0x74, 0xd6, 0x7a, 0x3e, 0x57, 0xf3, + 0x49, 0xa1, 0x41, 0xfd, 0xce, 0x89, 0x8f, 0xa8, 0xe8, 0x3c, 0x81, 0xad, 0x65, 0x05, 0xb1, 0xda, 0xe7, 0x60, 0xad, + 0xd5, 0x2e, 0xfd, 0x5e, 0x3e, 0xe0, 0x36, 0xe5, 0xb0, 0x0e, 0x0c, 0x6a, 0x4e, 0xac, 0xa8, 0xc7, 0x6c, 0xc7, 0xb8, + 0xf9, 0xe9, 0xe5, 0x0f, 0x4e, 0x58, 0xb2, 0x62, 0xb5, 0x3f, 0xfd, 0xfe, 0x99, 0xa7, 0xbf, 0x53, 0xfb, 0x17, 0xc2, + 0x0f, 0xc6, 0xff, 0xa9, 0xdd, 0xd7, 0x5a, 0x8c, 0xca, 0x56, 0x39, 0x42, 0xe3, 0x6e, 0x25, 0x4d, 0x96, 0x9f, 0x84, + 0x27, 0xac, 0x05, 0xcf, 0x72, 0xbd, 0x44, 0xb3, 0x02, 0x56, 0x58, 0xcb, 0x24, 0x5c, 0x61, 0xac, 0x96, 0xb6, 0xfa, + 0x16, 0x4d, 0x73, 0x7c, 0x38, 0xd7, 0x06, 0x65, 0xca, 0xd9, 0x19, 0xb1, 0x1a, 0x2e, 0xc3, 0xd2, 0x84, 0x22, 0x64, + 0xf7, 0x76, 0x70, 0x63, 0xa7, 0x2c, 0xa5, 0x0c, 0xe7, 0x18, 0x4c, 0x78, 0x24, 0x46, 0x55, 0xbe, 0xbf, 0x2f, 0x29, + 0x72, 0xda, 0x96, 0x83, 0x2a, 0x84, 0x7d, 0x24, 0x51, 0x02, 0xb7, 0x22, 0x2d, 0x14, 0x29, 0x8b, 0xbf, 0x1d, 0xa0, + 0x0b, 0xbc, 0x80, 0xba, 0x1a, 0x75, 0xfb, 0xc3, 0x11, 0x0f, 0x1f, 0x99, 0xfa, 0xc0, 0x88, 0x25, 0x81, 0xda, 0x5e, + 0x66, 0xe9, 0x1d, 0xa8, 0xf0, 0x7b, 0xb8, 0x9a, 0x88, 0xfd, 0xdc, 0x92, 0xa2, 0x22, 0x1b, 0xe9, 0x0d, 0xad, 0xc1, + 0x23, 0xb4, 0xa6, 0x7c, 0xef, 0xa4, 0xda, 0xa4, 0xf3, 0x8e, 0x90, 0x63, 0xf5, 0xad, 0x25, 0x8c, 0x76, 0x45, 0x2f, + 0xee, 0x1d, 0xbd, 0xe7, 0xe9, 0xaa, 0xe7, 0xfe, 0xc4, 0x15, 0xf3, 0xe4, 0x36, 0x02, 0x75, 0x2b, 0xa8, 0x6e, 0xef, + 0x55, 0x82, 0x05, 0x4b, 0xda, 0x7d, 0xfc, 0x76, 0xd6, 0x0e, 0x44, 0x65, 0xac, 0xd2, 0xd7, 0x24, 0x61, 0x4f, 0x0c, + 0x3a, 0x85, 0xaa, 0xdc, 0xee, 0x8e, 0xb6, 0xc0, 0x75, 0xcc, 0x52, 0xf4, 0xd2, 0x16, 0xb9, 0x5b, 0xfe, 0xdd, 0x73, + 0x45, 0xce, 0x7e, 0x09, 0x08, 0x4e, 0xcd, 0x57, 0xc4, 0x97, 0x23, 0x3c, 0xaa, 0x6e, 0x81, 0xe3, 0xf4, 0x1d, 0xc0, + 0x3f, 0x1c, 0x2e, 0x41, 0x13, 0x10, 0x0b, 0xd6, 0x4b, 0xe3, 0x1e, 0xeb, 0xc5, 0xc5, 0xe6, 0x2e, 0xc9, 0x37, 0xe0, + 0xcc, 0x40, 0xa9, 0x96, 0x7e, 0xe0, 0x58, 0x2d, 0xa0, 0xc2, 0xc1, 0xec, 0xa4, 0x5e, 0x58, 0x46, 0x3d, 0xa6, 0xcf, + 0xcf, 0x60, 0xef, 0x08, 0x09, 0x80, 0xfb, 0x65, 0x1f, 0x90, 0x80, 0x87, 0xce, 0xec, 0x80, 0x70, 0xc2, 0x2c, 0xaa, + 0x02, 0x89, 0xe4, 0x48, 0x3f, 0x7b, 0xcc, 0x44, 0xf2, 0x07, 0xb3, 0x9e, 0x73, 0x4a, 0xf4, 0x58, 0x4f, 0x1d, 0x21, + 0x3d, 0xd6, 0xb3, 0x8e, 0x88, 0x1e, 0xeb, 0x59, 0xc7, 0x47, 0x8f, 0xf5, 0xcc, 0xb1, 0xd3, 0x83, 0xc0, 0x04, 0x88, + 0x3c, 0x60, 0x3d, 0x9a, 0x4c, 0x3d, 0xc5, 0x3d, 0x40, 0x34, 0x08, 0xac, 0x27, 0x85, 0xf3, 0x1e, 0x20, 0x8f, 0x91, + 0x58, 0x1d, 0xf4, 0xfe, 0x32, 0x7e, 0xda, 0x33, 0x32, 0xf2, 0xb8, 0x75, 0x58, 0xfd, 0xaf, 0xbf, 0x42, 0x00, 0x1c, + 0x9e, 0x4d, 0xbd, 0xcb, 0x31, 0x64, 0x95, 0x65, 0x04, 0x92, 0x9f, 0x18, 0x7c, 0xf9, 0x02, 0xa0, 0xea, 0x33, 0x5d, + 0xab, 0xc9, 0x51, 0x7b, 0xcc, 0xa1, 0x2b, 0x06, 0x80, 0x6d, 0x58, 0xa2, 0xaa, 0x16, 0x36, 0x61, 0x71, 0xfb, 0x19, + 0x46, 0x73, 0xd9, 0xf4, 0x82, 0x06, 0xea, 0x11, 0x82, 0x5f, 0x5a, 0x0f, 0xad, 0xb5, 0x4c, 0x39, 0x74, 0x6d, 0x14, + 0x55, 0x36, 0xd4, 0x25, 0xac, 0xd6, 0x22, 0xaa, 0x89, 0x22, 0xe5, 0x92, 0x51, 0x14, 0x4b, 0x15, 0xec, 0x33, 0x71, + 0x07, 0x51, 0xf3, 0xb4, 0xd5, 0x56, 0xc1, 0xfe, 0x0e, 0x10, 0xd6, 0xc2, 0x5a, 0x48, 0x67, 0x50, 0x7b, 0xa7, 0x1f, + 0x29, 0x7f, 0x79, 0x21, 0xb7, 0x73, 0x0b, 0x45, 0xb8, 0x3d, 0x07, 0xe5, 0x4d, 0x5d, 0x95, 0x8a, 0x68, 0xb4, 0x04, + 0x4a, 0x99, 0x13, 0x44, 0x16, 0x20, 0x80, 0xe3, 0x06, 0x02, 0x9f, 0xd7, 0xf8, 0x04, 0x1a, 0x85, 0x40, 0x7e, 0x60, + 0x15, 0xae, 0x3d, 0xa4, 0xa5, 0xd6, 0x88, 0x28, 0x11, 0x3f, 0xba, 0x7a, 0x8e, 0xed, 0xab, 0xa7, 0xb1, 0xb6, 0x94, + 0x26, 0x88, 0x9f, 0x58, 0x6c, 0x21, 0x26, 0x88, 0xea, 0x10, 0x1d, 0xc1, 0x72, 0x42, 0x88, 0xc2, 0x1f, 0x42, 0x3f, + 0x35, 0xf0, 0x97, 0x6c, 0x59, 0xe4, 0x35, 0xc1, 0x62, 0x56, 0x0c, 0xd0, 0xaa, 0x08, 0x3c, 0xd3, 0xd9, 0x52, 0x99, + 0xd3, 0x3c, 0x3a, 0xb2, 0x83, 0xf3, 0xae, 0x83, 0xbd, 0xf4, 0x65, 0xec, 0x64, 0xd9, 0x34, 0x6a, 0x63, 0x43, 0x24, + 0xbc, 0x22, 0x7f, 0x95, 0xa5, 0xc6, 0x39, 0x32, 0x97, 0xeb, 0xbb, 0x2e, 0xee, 0xee, 0x68, 0x9b, 0xb0, 0x0a, 0x11, + 0xea, 0xb6, 0xa1, 0x72, 0x29, 0xcc, 0xc6, 0xa6, 0x69, 0x80, 0x2f, 0x14, 0x95, 0x4a, 0x55, 0x6a, 0x2b, 0x95, 0x9c, + 0xf0, 0xae, 0xaf, 0x6a, 0x91, 0xba, 0x22, 0xd8, 0xc6, 0x0c, 0xf5, 0x50, 0x6e, 0xd4, 0xd8, 0xd7, 0x1d, 0xab, 0xf4, + 0x0e, 0x13, 0xe4, 0x8c, 0xbc, 0xc8, 0xc1, 0x45, 0x49, 0x41, 0xe6, 0x6a, 0x08, 0xf3, 0x47, 0x0d, 0x9f, 0x16, 0x96, + 0x7b, 0x28, 0x01, 0xb3, 0xa3, 0x86, 0x97, 0x11, 0x02, 0x11, 0x97, 0xca, 0xbe, 0x62, 0xe2, 0xf7, 0x14, 0xcc, 0x92, + 0x09, 0xdd, 0x8b, 0x58, 0x18, 0xa1, 0x8d, 0x4f, 0x92, 0x64, 0xea, 0x69, 0x0a, 0x6e, 0xe4, 0x32, 0xcc, 0xd1, 0x08, + 0x2d, 0xf9, 0xc8, 0x81, 0xf4, 0xb5, 0x9c, 0x4a, 0xf0, 0x11, 0x75, 0x0a, 0x38, 0x9e, 0x9f, 0x17, 0xd6, 0x4f, 0x96, + 0x4b, 0xcc, 0x65, 0x6d, 0xfe, 0xcb, 0x8e, 0x8e, 0xc1, 0x2e, 0x4f, 0x13, 0xc7, 0xd5, 0x7f, 0x54, 0x25, 0xc5, 0xc3, + 0xcf, 0x69, 0x0e, 0x28, 0x82, 0x99, 0x3d, 0xc5, 0xf8, 0xd8, 0x67, 0x99, 0x02, 0xfe, 0x76, 0xbd, 0xb5, 0x64, 0x62, + 0x97, 0xb4, 0x9b, 0x2b, 0xe3, 0x97, 0xda, 0xb0, 0xe3, 0xe0, 0xdc, 0x00, 0x14, 0x67, 0x8d, 0x0e, 0xcb, 0x6b, 0xdd, + 0xb6, 0x2a, 0x54, 0xa0, 0xd6, 0xff, 0xd9, 0x2d, 0x4c, 0x79, 0x9b, 0x97, 0xca, 0xdb, 0x3c, 0x34, 0x01, 0x02, 0x91, + 0x19, 0xf2, 0xac, 0xe9, 0x98, 0x24, 0xee, 0x1d, 0x29, 0x69, 0xdf, 0x91, 0xe2, 0x47, 0xef, 0x48, 0xc8, 0xb7, 0x84, + 0x8e, 0xec, 0x4b, 0x4e, 0x4e, 0xa0, 0xcc, 0x60, 0x2f, 0xaf, 0x99, 0xec, 0x1f, 0xd0, 0x5e, 0x38, 0x97, 0xe5, 0x15, + 0xbf, 0x16, 0xde, 0xda, 0x9f, 0xae, 0x4f, 0xbb, 0xaa, 0xde, 0x7e, 0x65, 0x66, 0x1e, 0x0e, 0xc5, 0xe1, 0x50, 0x99, + 0xa0, 0xdd, 0x05, 0x17, 0x83, 0x9c, 0xdd, 0xbb, 0xf1, 0xf1, 0xd7, 0x1c, 0x45, 0x6c, 0xa5, 0x3c, 0x92, 0x2e, 0x54, + 0x62, 0x78, 0x69, 0xe0, 0x61, 0x76, 0x7c, 0x3c, 0xd9, 0x5d, 0xdd, 0x4f, 0x06, 0x83, 0x9d, 0xea, 0xdb, 0x2d, 0xaf, + 0x67, 0xbb, 0x39, 0x7b, 0xe0, 0xb7, 0xd3, 0x6d, 0xb0, 0x6f, 0x60, 0xdb, 0xdd, 0x5d, 0x89, 0xc3, 0x61, 0xf7, 0x82, + 0x2f, 0xfc, 0xfd, 0x03, 0x02, 0x3a, 0xf3, 0xf3, 0x71, 0x1b, 0xe3, 0xe7, 0xa6, 0xed, 0xaa, 0xb5, 0x03, 0x78, 0xfa, + 0x1f, 0xbc, 0x9b, 0xd9, 0x72, 0xee, 0xb3, 0x27, 0xfc, 0x01, 0xfc, 0xf3, 0x71, 0x93, 0x44, 0xea, 0x13, 0xed, 0x32, + 0x79, 0x03, 0x0e, 0xe4, 0x3b, 0x9f, 0xbd, 0xe5, 0x0f, 0xb3, 0xe5, 0x9c, 0x17, 0x87, 0xc3, 0xfb, 0x69, 0x88, 0x64, + 0x4d, 0x61, 0x45, 0x2c, 0x29, 0x9e, 0x1f, 0x84, 0xc7, 0xef, 0x45, 0x64, 0x88, 0xb4, 0xdc, 0xbb, 0x43, 0x76, 0xc3, + 0x22, 0x3f, 0x80, 0x0f, 0xb2, 0x9d, 0x3f, 0x91, 0x35, 0xa5, 0xfb, 0xc5, 0x13, 0xff, 0x70, 0xa0, 0xbf, 0xde, 0xfa, + 0x87, 0xc3, 0x7b, 0xf6, 0x80, 0xe0, 0xe8, 0x7c, 0x07, 0xfd, 0xa3, 0x6f, 0x1d, 0x50, 0x95, 0xe1, 0xf5, 0x6c, 0x33, + 0xf7, 0x5f, 0xac, 0xd8, 0x1d, 0x70, 0xa1, 0x28, 0x2f, 0xb4, 0x1b, 0xf6, 0x80, 0x5e, 0x67, 0xe4, 0x44, 0x34, 0xdb, + 0xcd, 0x7d, 0x16, 0xe3, 0x73, 0x75, 0x5f, 0x4c, 0xbe, 0x7a, 0x5f, 0xdc, 0xb1, 0x6d, 0xf7, 0x7d, 0x51, 0xbe, 0xe9, + 0xae, 0x9f, 0x2d, 0xdb, 0xb1, 0x07, 0x98, 0x61, 0xd7, 0xfc, 0xa6, 0x39, 0x76, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, + 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0x95, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x57, 0x0b, + 0x39, 0xf3, 0xcc, 0x40, 0xdf, 0x56, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x6a, 0xa6, + 0x6d, 0x51, 0x97, 0xdf, 0xf6, 0x9e, 0xc9, 0x6f, 0x64, 0x60, 0x0b, 0x91, 0x14, 0x8e, 0xe3, 0x8b, 0xe7, 0x27, 0xfc, + 0x57, 0x2d, 0x8f, 0x5a, 0xed, 0x17, 0x4a, 0x7d, 0xfa, 0x8a, 0x8e, 0x68, 0xe2, 0x5e, 0xb4, 0x65, 0x58, 0xa3, 0xac, + 0xa9, 0xa5, 0xc3, 0x30, 0xae, 0x61, 0x5f, 0x1e, 0x38, 0xf4, 0x1d, 0x10, 0x68, 0xab, 0x54, 0x0a, 0xb4, 0x70, 0x0c, + 0xa3, 0x30, 0x0b, 0x29, 0x8f, 0x0b, 0xb3, 0x94, 0xf7, 0x58, 0xa0, 0xc5, 0xad, 0xba, 0xc7, 0xd4, 0x76, 0x0b, 0x22, + 0xac, 0xde, 0x32, 0xce, 0x2f, 0x1b, 0x55, 0xb8, 0x2d, 0x40, 0x51, 0x04, 0x65, 0xb0, 0x27, 0xb9, 0x6d, 0xa1, 0xa4, + 0xd9, 0x28, 0xac, 0xc5, 0x5d, 0x51, 0xee, 0x7a, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, 0x75, + 0x28, 0x17, 0xe9, 0x7f, 0x64, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xe7, 0x97, 0xf4, + 0x93, 0xc1, 0x32, 0x72, 0x4a, 0x7d, 0x1f, 0x8d, 0x6e, 0xd3, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, 0x0a, + 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, 0x26, + 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, 0x90, + 0xdc, 0xa9, 0x2b, 0x7f, 0x54, 0x4e, 0xfe, 0x13, 0x0d, 0x91, 0x57, 0x5c, 0x21, 0x56, 0x16, 0x5c, 0x62, 0x31, 0x54, + 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xcb, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, 0x11, + 0x3e, 0x6e, 0xad, 0x45, 0x08, 0x56, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, 0x14, + 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xa8, 0x48, 0xcf, 0x5f, 0x9a, 0x94, 0x5c, 0x1a, + 0x33, 0x3e, 0x88, 0x32, 0x12, 0x79, 0x1d, 0xde, 0x89, 0x69, 0x81, 0x7c, 0xa3, 0xc7, 0x0f, 0x82, 0x4b, 0x78, 0x37, + 0xe4, 0x5e, 0x01, 0xb6, 0x04, 0xec, 0x00, 0xf7, 0xca, 0x8c, 0x72, 0x9d, 0xd6, 0xf5, 0x5b, 0xeb, 0xa1, 0x18, 0x86, + 0xcf, 0x2c, 0x81, 0xed, 0x68, 0x1d, 0x1d, 0xe9, 0xe1, 0xc3, 0xff, 0xba, 0xaa, 0x39, 0xea, 0x54, 0x2e, 0x67, 0xc7, + 0x13, 0x96, 0x22, 0x66, 0xd0, 0xfd, 0x75, 0xfb, 0x4a, 0x00, 0xdd, 0x2e, 0x8b, 0x79, 0x36, 0xda, 0xc9, 0xbf, 0xa5, + 0x1b, 0x2b, 0x4a, 0x9b, 0x78, 0x97, 0xf5, 0xc6, 0xfe, 0x70, 0xf4, 0x97, 0x67, 0x5f, 0x26, 0x84, 0xaa, 0xb3, 0x61, + 0x6b, 0x1d, 0xe7, 0xf2, 0xbf, 0xfe, 0x3a, 0x26, 0x2b, 0x08, 0x0a, 0xc2, 0xb2, 0x53, 0x4c, 0x54, 0x30, 0x8a, 0x14, + 0x6b, 0x3e, 0x9e, 0xac, 0x51, 0x27, 0xbc, 0xf6, 0x97, 0x5a, 0x27, 0x4c, 0x8c, 0xac, 0x54, 0xfe, 0x9a, 0x55, 0xec, + 0x4e, 0x65, 0x16, 0x90, 0x79, 0x90, 0x4f, 0xd6, 0x46, 0x83, 0xb9, 0xe2, 0xf5, 0x6c, 0x3d, 0x97, 0xca, 0x67, 0x30, + 0xe5, 0x2c, 0x07, 0x27, 0x4b, 0x61, 0xf7, 0x24, 0x50, 0xb4, 0x66, 0xe8, 0xda, 0x9f, 0x62, 0xab, 0x5e, 0xa7, 0x55, + 0x0d, 0xf0, 0x80, 0x10, 0x03, 0x43, 0xed, 0xd5, 0xc2, 0x43, 0x6b, 0x01, 0xac, 0xfd, 0x51, 0xe9, 0x07, 0xe3, 0xc9, + 0x92, 0x2f, 0x90, 0x7f, 0x39, 0x72, 0xd4, 0xee, 0xfd, 0xbe, 0x77, 0x0f, 0x52, 0x70, 0xe4, 0x5a, 0x28, 0x90, 0x08, + 0x68, 0xc1, 0x37, 0xbe, 0xf2, 0xc1, 0xb8, 0x46, 0x6d, 0x35, 0x28, 0xa8, 0x1d, 0xdd, 0xf2, 0xd8, 0xd1, 0x3b, 0xdf, + 0x9f, 0xd0, 0x57, 0x2f, 0xb4, 0x70, 0xfc, 0x95, 0x33, 0x72, 0xcd, 0x56, 0x1d, 0x72, 0x44, 0x33, 0xe9, 0x10, 0x22, + 0x56, 0x6c, 0xcd, 0xae, 0x49, 0xe5, 0xdc, 0x39, 0x64, 0xa7, 0x8f, 0x50, 0xa5, 0xd7, 0x7a, 0x7c, 0x3b, 0x51, 0xba, + 0xdb, 0xe3, 0xdd, 0xe4, 0x5b, 0x36, 0x11, 0x31, 0x18, 0xd0, 0x06, 0xe1, 0x8c, 0xac, 0x43, 0xa4, 0xd2, 0x01, 0x42, + 0xe0, 0x98, 0x80, 0xa6, 0xff, 0xf8, 0x9a, 0x44, 0x01, 0x47, 0xda, 0x08, 0x59, 0xcb, 0x0e, 0x87, 0x1c, 0x34, 0xca, + 0xcd, 0x1f, 0x5e, 0xa1, 0x4e, 0x73, 0x60, 0x9e, 0x2e, 0x61, 0xcf, 0xc1, 0x23, 0xbd, 0x38, 0x3e, 0xd2, 0xff, 0x3b, + 0x9a, 0xa8, 0xf1, 0x7f, 0xae, 0x89, 0x52, 0x5a, 0x24, 0x47, 0xb5, 0xf4, 0x4d, 0xea, 0x28, 0xb8, 0xc8, 0x3b, 0x6a, + 0x21, 0x7b, 0x96, 0x8d, 0x1b, 0xd5, 0xbc, 0xff, 0x5f, 0x2b, 0xf3, 0xff, 0x35, 0xad, 0x0c, 0x53, 0xb2, 0x63, 0xa9, + 0x66, 0x1e, 0x68, 0x15, 0xc3, 0xec, 0x67, 0x92, 0x10, 0x19, 0x2e, 0x0d, 0xf8, 0x51, 0x05, 0xfb, 0x38, 0xad, 0xd6, + 0x59, 0xb8, 0x43, 0x25, 0xea, 0xad, 0xb8, 0x4b, 0xf3, 0x97, 0xf5, 0xbf, 0x45, 0x59, 0xc0, 0xd4, 0xbe, 0x2b, 0xd3, + 0x38, 0x20, 0x0b, 0x7f, 0x16, 0x96, 0x38, 0xb9, 0xb1, 0x8d, 0x3f, 0xcb, 0xf1, 0xb4, 0x5f, 0x75, 0x66, 0x1e, 0x48, + 0xa0, 0x06, 0xe2, 0x8f, 0x9c, 0xcb, 0xca, 0xe2, 0x01, 0xa1, 0x9b, 0x7f, 0x28, 0xcb, 0xa2, 0xf4, 0x7a, 0x9f, 0x92, + 0xb4, 0x3a, 0x5b, 0x89, 0x3a, 0x29, 0x62, 0x05, 0x65, 0x93, 0x02, 0x8c, 0x3e, 0xac, 0x3c, 0x11, 0x07, 0x67, 0x08, + 0xd4, 0x70, 0x56, 0x27, 0x21, 0x00, 0x0d, 0x2b, 0x84, 0xfd, 0x33, 0x68, 0xe1, 0x59, 0x18, 0x87, 0x6b, 0x80, 0xc9, + 0x49, 0xab, 0xb3, 0x75, 0x59, 0xdc, 0xa7, 0xb1, 0x88, 0x47, 0x3d, 0x45, 0xc9, 0xf2, 0x26, 0x77, 0xe5, 0x5c, 0x7f, + 0xff, 0x07, 0x05, 0xb0, 0x1b, 0x30, 0xdb, 0x16, 0xd8, 0x01, 0x40, 0x82, 0x02, 0xd9, 0x42, 0x9d, 0x46, 0x67, 0x6a, + 0xa9, 0xc0, 0x7b, 0xae, 0x07, 0xf8, 0x9b, 0x1c, 0xb0, 0x8c, 0xeb, 0x42, 0x06, 0x8c, 0x20, 0x80, 0x11, 0x38, 0x28, + 0x01, 0x43, 0x67, 0x88, 0xdb, 0xaa, 0x9c, 0xb5, 0xd0, 0x5c, 0xe9, 0xb6, 0xe4, 0xa6, 0x51, 0xce, 0x56, 0x22, 0x80, + 0xbe, 0xba, 0x29, 0x71, 0xba, 0x5c, 0xb6, 0x92, 0xb0, 0x6f, 0xdf, 0xb7, 0x53, 0x45, 0x1e, 0x1f, 0xa5, 0x21, 0xaf, + 0xc0, 0x93, 0x8c, 0x23, 0x49, 0x94, 0x08, 0xde, 0xe4, 0x8d, 0x19, 0x87, 0x97, 0x6d, 0xca, 0xa9, 0xbd, 0x59, 0x2f, + 0x00, 0xe7, 0x09, 0xda, 0x32, 0xc0, 0x58, 0xc0, 0xe0, 0x5c, 0x88, 0x25, 0x4f, 0x11, 0xfc, 0xd2, 0x89, 0x14, 0xc6, + 0x5d, 0x0e, 0xc3, 0x3c, 0x28, 0x7a, 0x97, 0xd4, 0x1f, 0xfd, 0x3e, 0x6a, 0x93, 0xc1, 0x10, 0x54, 0x02, 0xa8, 0xac, + 0x1b, 0x24, 0x06, 0x56, 0xa5, 0x85, 0xc4, 0x25, 0xc4, 0xcb, 0x7c, 0x35, 0xad, 0xa3, 0xe0, 0x7d, 0x3d, 0x21, 0x84, + 0x13, 0x8c, 0x0f, 0x71, 0x03, 0x04, 0x0c, 0x56, 0x71, 0x81, 0x41, 0xf2, 0x5c, 0xa2, 0xfb, 0xe3, 0xf9, 0x8e, 0x01, + 0xae, 0x9c, 0xf7, 0x54, 0xbb, 0x7a, 0x60, 0x2f, 0x57, 0xe9, 0x92, 0x11, 0xc2, 0x8a, 0xff, 0x8b, 0xc8, 0xfb, 0x76, + 0x98, 0x80, 0xda, 0x46, 0xfe, 0x18, 0x24, 0xe6, 0x32, 0x51, 0x04, 0xf1, 0x28, 0x2b, 0x58, 0x92, 0x06, 0x9b, 0x51, + 0x92, 0x82, 0x46, 0x13, 0x63, 0xc8, 0x54, 0x68, 0x87, 0xa4, 0xd1, 0x6c, 0x4c, 0xf6, 0x31, 0xe4, 0x35, 0x5c, 0x2c, + 0x16, 0x78, 0xdf, 0xcf, 0x42, 0x75, 0xb0, 0x2d, 0xcd, 0x21, 0xe0, 0x24, 0xc1, 0x9e, 0xba, 0x22, 0x25, 0x61, 0x36, + 0xfa, 0x14, 0x72, 0x6e, 0x40, 0xc7, 0x49, 0x63, 0xa8, 0x3e, 0x30, 0x09, 0xaf, 0x22, 0x74, 0x52, 0x56, 0x08, 0x0b, + 0xb8, 0x6f, 0x64, 0x34, 0x5a, 0x49, 0x83, 0xc0, 0xdb, 0x0c, 0x5b, 0x81, 0x4d, 0x68, 0xf8, 0xcb, 0xcc, 0xc3, 0xb4, + 0x9a, 0x95, 0x60, 0xce, 0x37, 0x50, 0x89, 0xf1, 0x64, 0x79, 0xc5, 0x37, 0x2e, 0x56, 0x62, 0x32, 0x5b, 0xce, 0x27, + 0x6b, 0x49, 0x35, 0x97, 0x7b, 0x6b, 0x96, 0xb1, 0x25, 0xec, 0x1f, 0x06, 0x86, 0xd2, 0x81, 0x1d, 0x4d, 0x35, 0x6d, + 0x12, 0x60, 0x32, 0x9d, 0x73, 0x3e, 0xbc, 0x44, 0x34, 0x59, 0x9d, 0xba, 0x93, 0xa9, 0x6a, 0x07, 0xd7, 0xe4, 0x4c, + 0x4e, 0x8f, 0xd4, 0x53, 0xad, 0x7b, 0xc9, 0x47, 0xdb, 0x61, 0x35, 0xda, 0xfa, 0x01, 0xb8, 0x75, 0x0a, 0x3b, 0x7d, + 0x37, 0xac, 0x46, 0x3b, 0x5f, 0xc3, 0xee, 0x92, 0x42, 0xa0, 0xfa, 0xb3, 0xac, 0xc9, 0x5c, 0xbc, 0x2e, 0x1e, 0xbc, + 0x82, 0x3d, 0xf7, 0x07, 0xfa, 0x57, 0xc9, 0x9e, 0xfb, 0x36, 0x93, 0xeb, 0x9f, 0x69, 0xd7, 0x68, 0xcc, 0x74, 0xbc, + 0x76, 0x05, 0x56, 0x68, 0x80, 0xfc, 0x82, 0x1d, 0xed, 0x6d, 0x0e, 0x02, 0x01, 0xba, 0x97, 0xe0, 0x28, 0x0a, 0x88, + 0x9a, 0x56, 0x95, 0x47, 0xa7, 0x7b, 0x7f, 0x8f, 0x6f, 0x94, 0x80, 0x4d, 0x9e, 0x5a, 0xf7, 0x96, 0xb1, 0x7f, 0x38, + 0x40, 0x08, 0xbd, 0x9c, 0x7e, 0xa3, 0x2d, 0xab, 0x47, 0x3b, 0x96, 0xfb, 0x86, 0x51, 0x4f, 0xc1, 0x18, 0x86, 0x2e, + 0xac, 0x62, 0x24, 0xcf, 0x80, 0xac, 0xf1, 0x1b, 0x44, 0x17, 0xb0, 0xe8, 0xf5, 0x5e, 0x1f, 0xd1, 0x20, 0x02, 0x2a, + 0xbd, 0xe6, 0x2f, 0x45, 0x3e, 0x57, 0x85, 0xe8, 0xbd, 0xb7, 0x76, 0xde, 0xcc, 0x48, 0x96, 0x49, 0x23, 0xd5, 0x6e, + 0x65, 0xb1, 0xae, 0xbc, 0xd9, 0x09, 0xe9, 0x62, 0x8e, 0xa1, 0x32, 0x78, 0x1c, 0x80, 0xd2, 0xf3, 0x6f, 0xa1, 0x57, + 0x32, 0x64, 0x9a, 0x25, 0x9a, 0xd9, 0x5d, 0xe3, 0x4f, 0x56, 0xa9, 0x17, 0x23, 0x62, 0x36, 0xb0, 0x85, 0xb8, 0x2d, + 0x2a, 0xdd, 0x16, 0x85, 0xb2, 0x45, 0x91, 0x3e, 0xd4, 0xce, 0x74, 0x67, 0x16, 0x3e, 0xab, 0x4c, 0xfb, 0xde, 0x66, + 0x66, 0x6c, 0x80, 0xb6, 0x8b, 0xf0, 0x0d, 0x74, 0xa0, 0x42, 0xc8, 0x7f, 0x40, 0x44, 0x24, 0x02, 0x76, 0x39, 0x75, + 0x27, 0x36, 0x1d, 0x92, 0x79, 0x88, 0x59, 0xa1, 0x46, 0x79, 0xc9, 0x93, 0xa3, 0x01, 0xa9, 0x08, 0x75, 0xbb, 0xdf, + 0x3f, 0x5f, 0xba, 0xa0, 0xf6, 0x6b, 0x8a, 0x1d, 0xa3, 0x9b, 0x02, 0xce, 0x05, 0x8f, 0xf2, 0x9e, 0x7b, 0xe7, 0x80, + 0xe6, 0xd8, 0x9e, 0x22, 0x6b, 0xc0, 0xe9, 0x6d, 0x17, 0x02, 0x6c, 0x9f, 0x35, 0x5b, 0xfb, 0x93, 0xd5, 0x55, 0x34, + 0xf5, 0x4a, 0x3e, 0xd3, 0x5d, 0x94, 0xb8, 0x5d, 0x14, 0xcb, 0x2e, 0xda, 0x34, 0x10, 0xec, 0xb8, 0xf2, 0x03, 0xe0, + 0x0d, 0x8d, 0xfa, 0xfd, 0xb2, 0xd5, 0xb3, 0x27, 0x5f, 0x3b, 0xee, 0xd9, 0xcc, 0x67, 0xa5, 0xe9, 0xd9, 0x5f, 0x53, + 0xb7, 0x67, 0xe5, 0x64, 0x2f, 0x3a, 0x27, 0xfb, 0x74, 0x36, 0x0f, 0x04, 0x97, 0x3b, 0xf7, 0x79, 0x3e, 0xd5, 0xd3, + 0xae, 0xf2, 0x83, 0xd6, 0x10, 0x99, 0x2f, 0x7c, 0xaa, 0xba, 0xd7, 0x15, 0x2c, 0x60, 0x09, 0xee, 0xd6, 0x4b, 0xf3, + 0x5f, 0xb1, 0xfb, 0x7b, 0x41, 0x2f, 0xcd, 0x7f, 0xa3, 0x3f, 0x29, 0x80, 0x03, 0xd0, 0x98, 0xda, 0x2d, 0xf0, 0x10, + 0x43, 0x05, 0x85, 0xbb, 0x59, 0x39, 0xf7, 0x6a, 0x80, 0xc3, 0x24, 0x7d, 0x43, 0xab, 0x57, 0x5a, 0xec, 0x7a, 0x99, + 0xec, 0x15, 0xe0, 0xa1, 0x0a, 0x79, 0x78, 0x38, 0x44, 0x1d, 0xc3, 0x0e, 0xea, 0x08, 0x18, 0xf6, 0x10, 0x1a, 0x5b, + 0xe0, 0xf9, 0xf8, 0x29, 0xe3, 0x7b, 0x01, 0x6a, 0x23, 0x84, 0xc7, 0xab, 0x45, 0x19, 0x62, 0xcb, 0xde, 0x22, 0x95, + 0xd4, 0xcf, 0x02, 0x51, 0x46, 0xab, 0x80, 0xb6, 0xda, 0x63, 0x96, 0xc6, 0x1b, 0x08, 0x15, 0x4b, 0x7d, 0x0c, 0xa1, + 0x81, 0xc3, 0xef, 0x70, 0x00, 0x09, 0xbe, 0xe4, 0x9a, 0x6c, 0xee, 0x6d, 0x7e, 0x4f, 0xfb, 0xfc, 0xe1, 0x70, 0x7e, + 0x89, 0xa0, 0x74, 0x29, 0x7c, 0xa4, 0x12, 0x51, 0x3d, 0xc5, 0x4d, 0x09, 0xd9, 0x2c, 0x59, 0xe9, 0x07, 0xbf, 0xaa, + 0x5f, 0x00, 0x20, 0x0b, 0x81, 0x36, 0x91, 0xd9, 0x9f, 0xce, 0x54, 0x74, 0x01, 0x70, 0x88, 0x3f, 0x7e, 0x82, 0xe8, + 0x1b, 0x5a, 0xa6, 0xe5, 0xe3, 0x84, 0x87, 0xa0, 0xb5, 0x25, 0x9d, 0x44, 0xac, 0x14, 0xd8, 0x10, 0x09, 0xdf, 0xef, + 0x9f, 0xc7, 0x92, 0x0e, 0x34, 0x6a, 0x75, 0x6f, 0xdc, 0xea, 0x5e, 0xf9, 0xba, 0xee, 0xe4, 0xc6, 0x07, 0x45, 0xfb, + 0x6c, 0xde, 0xa8, 0x7c, 0xdf, 0xd6, 0x39, 0xbb, 0xd3, 0xbd, 0x23, 0xe7, 0xc4, 0xb7, 0xf7, 0x10, 0x8a, 0x1e, 0x9a, + 0x22, 0xcb, 0x92, 0x30, 0xa0, 0xb5, 0x76, 0xed, 0x59, 0x46, 0x07, 0xaf, 0x7d, 0x43, 0x88, 0xc8, 0x53, 0x7c, 0x12, + 0x72, 0x8b, 0xe3, 0x83, 0x02, 0xfd, 0x33, 0xe3, 0xcf, 0x9c, 0xf8, 0x61, 0xab, 0x5f, 0x00, 0xe7, 0xa6, 0x7b, 0xef, + 0x4e, 0xcc, 0x7a, 0x0c, 0xa5, 0x6c, 0xfc, 0xdf, 0xef, 0x13, 0x59, 0xa0, 0xd3, 0x11, 0x0d, 0x03, 0xc1, 0x5d, 0x54, + 0xff, 0xf7, 0x8a, 0xd7, 0x3d, 0x6b, 0x75, 0xbe, 0xfc, 0xd4, 0xe9, 0x49, 0xaf, 0x5e, 0xc6, 0x3d, 0xa0, 0x42, 0x07, + 0x08, 0xe7, 0x75, 0xbf, 0x61, 0xbb, 0x6f, 0x7e, 0x79, 0x77, 0xf4, 0x32, 0xb0, 0x49, 0x91, 0xd8, 0x56, 0xf2, 0x59, + 0x0f, 0x14, 0x7e, 0x3d, 0xd6, 0xab, 0x8b, 0x75, 0x8f, 0xf5, 0x50, 0x0b, 0x88, 0x1e, 0x16, 0xa0, 0xfe, 0xeb, 0xd9, + 0xa7, 0xa1, 0x70, 0x90, 0x8d, 0x53, 0x05, 0x8a, 0x2c, 0xf8, 0x0b, 0x31, 0x5a, 0x17, 0x04, 0x88, 0x6c, 0x09, 0x69, + 0xd5, 0xc9, 0xec, 0x71, 0xa9, 0x25, 0x19, 0x7c, 0x13, 0x90, 0xd9, 0x81, 0x95, 0x13, 0x94, 0x8e, 0x5b, 0x03, 0xae, + 0x6c, 0xf1, 0x68, 0xb7, 0x3f, 0x0d, 0xb2, 0xb3, 0xe6, 0xa4, 0xd1, 0x3e, 0xec, 0xd3, 0x3c, 0x40, 0x20, 0x92, 0xa9, + 0x08, 0x72, 0xcd, 0xbd, 0x25, 0x7d, 0x74, 0x38, 0xe7, 0x85, 0xfc, 0x73, 0x2a, 0x75, 0x88, 0x43, 0x89, 0x35, 0x10, + 0xa8, 0x3c, 0x43, 0x95, 0xc3, 0x06, 0x39, 0xfe, 0xd9, 0x91, 0xcc, 0x24, 0x26, 0x8b, 0xdc, 0xad, 0x99, 0x0a, 0x3f, + 0x10, 0x7c, 0xcc, 0x72, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x02, 0x7f, 0x4c, 0xe1, 0x57, 0x3c, + 0x85, 0x9d, 0x76, 0xbf, 0x2e, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, + 0x3f, 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x65, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x06, + 0x15, 0x5b, 0x17, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xaa, 0x51, 0x5a, 0xfd, 0xa8, + 0x7f, 0x02, 0xf3, 0x36, 0x15, 0xa3, 0x5a, 0xc5, 0xe4, 0x37, 0xfa, 0xfd, 0x62, 0xd0, 0xfa, 0x90, 0xc1, 0x47, 0xaf, + 0x4d, 0x83, 0x3f, 0x3a, 0x0d, 0x76, 0x98, 0x68, 0x04, 0x40, 0x32, 0xa7, 0x96, 0x3c, 0x14, 0xfd, 0x11, 0xe4, 0x58, + 0xa3, 0xca, 0x29, 0x18, 0xac, 0xff, 0x78, 0xb4, 0x03, 0x53, 0x2f, 0x8e, 0xb6, 0x64, 0x07, 0xad, 0x7c, 0x03, 0xdc, + 0xaf, 0x91, 0x2d, 0x66, 0x39, 0x40, 0xb3, 0xd7, 0x88, 0x8c, 0x4f, 0x5e, 0x00, 0x63, 0xb6, 0xce, 0xc2, 0x48, 0xc4, + 0xc1, 0x58, 0x35, 0x66, 0xcc, 0xc0, 0xc0, 0x05, 0xba, 0x96, 0x49, 0x49, 0x1a, 0xd2, 0xc1, 0x80, 0x95, 0xb2, 0x85, + 0x03, 0x5e, 0x34, 0xc7, 0xed, 0x78, 0xd3, 0xa2, 0xf1, 0xc0, 0x76, 0xb1, 0xfd, 0xfd, 0xf7, 0xc5, 0xf6, 0x3a, 0xdc, + 0x92, 0x5e, 0x21, 0x67, 0x09, 0xfd, 0xfc, 0x51, 0xf6, 0x59, 0xc3, 0xc9, 0xa9, 0xd0, 0x0c, 0x2d, 0x45, 0x42, 0x29, + 0xde, 0xe9, 0x49, 0x81, 0xb1, 0x8c, 0x85, 0xbf, 0x07, 0xce, 0xe9, 0x42, 0x11, 0xb9, 0x03, 0xc7, 0xf1, 0x0d, 0x54, + 0x30, 0x6a, 0x38, 0x78, 0x19, 0xc3, 0xb6, 0x28, 0x66, 0x21, 0xe1, 0x14, 0xc2, 0xc5, 0x2a, 0xeb, 0xf7, 0xe5, 0x2f, + 0xea, 0xa2, 0x8b, 0x4c, 0xd6, 0x7d, 0x12, 0x8e, 0xcc, 0x58, 0x4e, 0xbd, 0x90, 0x3c, 0xef, 0x79, 0x32, 0x4d, 0x9e, + 0xe5, 0x41, 0x04, 0x90, 0xcf, 0xe1, 0x7d, 0x98, 0x66, 0x60, 0x95, 0x26, 0xe5, 0x47, 0x28, 0x7d, 0xf1, 0x79, 0xe5, + 0x07, 0x3a, 0x7b, 0x6e, 0x92, 0xe1, 0xcd, 0xaa, 0xf5, 0x26, 0xb5, 0xae, 0x8b, 0x07, 0xfc, 0x8b, 0x33, 0xd8, 0x38, + 0xd7, 0x99, 0xe0, 0xc0, 0x8b, 0xa4, 0xd6, 0x6b, 0xc6, 0x5f, 0x64, 0xb8, 0x2e, 0x55, 0x1b, 0x7d, 0x14, 0xa2, 0x73, + 0xc8, 0x54, 0x80, 0x42, 0x91, 0xf6, 0x0f, 0x4a, 0xad, 0x4c, 0x2a, 0x6d, 0x24, 0x80, 0xee, 0x61, 0xd2, 0x60, 0x8b, + 0xa1, 0x8c, 0xa5, 0x49, 0x94, 0x3b, 0x0d, 0xe2, 0xca, 0xfe, 0x5c, 0x49, 0x1c, 0x5a, 0x16, 0xc9, 0xbf, 0x77, 0x3d, + 0x7d, 0x85, 0xd4, 0x9d, 0x2c, 0x90, 0x19, 0xe3, 0x65, 0x1e, 0x7f, 0x02, 0xc2, 0x6c, 0xd0, 0x46, 0x45, 0x21, 0x84, + 0x6c, 0x10, 0x83, 0xc6, 0xcb, 0x3c, 0xfe, 0x5e, 0xd1, 0x78, 0xc8, 0x47, 0x91, 0xaf, 0xfe, 0x2a, 0xf5, 0x5f, 0xa1, + 0xcf, 0x4c, 0xf0, 0x08, 0xd5, 0x44, 0xff, 0xee, 0xf9, 0xec, 0x1e, 0xd4, 0x86, 0x51, 0x98, 0x99, 0xf2, 0x2b, 0xdf, + 0x14, 0x67, 0xaf, 0xbf, 0xa2, 0xab, 0x6c, 0xeb, 0x7e, 0xf4, 0xf1, 0x88, 0xc0, 0xda, 0x18, 0x5d, 0x71, 0x63, 0x00, + 0x39, 0x4c, 0xde, 0xaf, 0x28, 0x2d, 0x87, 0x34, 0x08, 0x1d, 0x34, 0x04, 0xbd, 0x92, 0xe8, 0x03, 0x89, 0x45, 0x8c, + 0xe1, 0x85, 0x78, 0x46, 0x6a, 0x32, 0xd1, 0x10, 0xaf, 0x88, 0xfd, 0x10, 0x2d, 0x39, 0x35, 0xd1, 0x8d, 0x30, 0xc5, + 0x40, 0x62, 0x67, 0x90, 0x9c, 0x24, 0xb5, 0xf2, 0x8b, 0x67, 0x92, 0xb0, 0xc4, 0xce, 0x43, 0x0c, 0x26, 0xb5, 0x74, + 0xa7, 0x37, 0x55, 0x7a, 0x77, 0xa4, 0xe5, 0xa0, 0x7d, 0x00, 0x76, 0x29, 0xe9, 0xfd, 0x93, 0x42, 0x11, 0x1f, 0xc2, + 0x38, 0x86, 0xf0, 0x2d, 0xa2, 0xba, 0x02, 0xe7, 0x5a, 0x81, 0xc6, 0x6a, 0xe0, 0xa1, 0x99, 0x55, 0xf3, 0x21, 0xa7, + 0x9f, 0x4a, 0xcb, 0x1f, 0x23, 0x1a, 0x1b, 0xad, 0x9b, 0xc3, 0x61, 0x4f, 0xab, 0x5e, 0x3a, 0x07, 0x5d, 0x36, 0x93, + 0x98, 0xb8, 0x81, 0x74, 0xfd, 0xe8, 0x37, 0x13, 0xf6, 0x22, 0x2a, 0xe4, 0x52, 0x08, 0x0a, 0x5a, 0x1d, 0x08, 0x1c, + 0x0a, 0x6f, 0x51, 0xe6, 0x8b, 0x98, 0x36, 0x10, 0x06, 0x9f, 0x1f, 0xc8, 0xcf, 0x37, 0x05, 0xa9, 0xd8, 0xb1, 0xae, + 0xfd, 0xfe, 0xa6, 0xf4, 0x00, 0x4f, 0xce, 0x24, 0x79, 0xda, 0x0c, 0x61, 0x45, 0x00, 0x8d, 0x59, 0x4d, 0x16, 0x27, + 0x5c, 0x99, 0xc3, 0x8f, 0x95, 0x57, 0xb2, 0x94, 0xa9, 0xf3, 0x54, 0x2f, 0x80, 0xa8, 0xe3, 0x0d, 0x5a, 0x91, 0xfa, + 0x15, 0x3a, 0x7b, 0xcd, 0x4a, 0xc8, 0x78, 0x78, 0xce, 0x79, 0x3a, 0x7a, 0x60, 0x09, 0x8f, 0xf0, 0xaf, 0x64, 0xa2, + 0x0f, 0xbf, 0x07, 0x0e, 0x37, 0xe3, 0x84, 0x47, 0x6e, 0xb3, 0xf7, 0x55, 0xb8, 0x82, 0x9b, 0x69, 0x01, 0x48, 0x6e, + 0x41, 0xd2, 0x04, 0x94, 0x90, 0xc8, 0x84, 0xcc, 0x9a, 0x92, 0x9f, 0x5b, 0xda, 0x06, 0x6b, 0x98, 0x74, 0x1e, 0xf0, + 0xa2, 0xd5, 0x47, 0xab, 0x89, 0x76, 0x99, 0xe5, 0xf3, 0x21, 0xce, 0x50, 0xcd, 0x71, 0x77, 0x06, 0x3f, 0x07, 0xbc, + 0x62, 0x55, 0x93, 0x8e, 0x76, 0x03, 0x2e, 0x3c, 0xb9, 0xce, 0xd3, 0xd1, 0x16, 0x7f, 0xc9, 0xfd, 0x01, 0xa0, 0x83, + 0xa9, 0x4b, 0xe0, 0x4f, 0xd5, 0x56, 0x53, 0xa9, 0x5f, 0x5a, 0xfb, 0x75, 0xdd, 0x59, 0xad, 0xdc, 0xb3, 0x2e, 0x43, + 0x7b, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, + 0x82, 0x7b, 0xc9, 0x5f, 0xec, 0x11, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, + 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xb1, 0x34, 0x26, 0x45, 0x05, 0xe9, 0x9c, 0x0e, 0x37, 0xaf, 0x8e, 0xf3, 0x84, 0x65, 0x7c, 0xdc, 0x3e, 0x53, 0x20, 0xc4, 0x16, 0xcf, 0x90, - 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x3c, 0xd6, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, - 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1b, 0xfe, 0x25, 0x43, 0x75, 0x77, 0x08, - 0x4c, 0x6c, 0xd9, 0x91, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x5b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, - 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x15, 0x5e, 0x2e, 0x5b, 0x79, 0x3c, 0x26, 0xd6, 0x5d, 0xd8, 0xd1, - 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0x54, 0x66, 0x17, 0x12, 0x83, 0x9c, 0xa5, 0xfa, - 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xf9, 0x69, 0x9f, 0x8a, 0xd1, 0x46, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, - 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x4a, 0x1f, 0xc7, 0xc7, 0xa3, 0x14, 0x33, - 0xae, 0x4f, 0xc4, 0x8c, 0xeb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xe3, 0xf1, 0x9a, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, - 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4d, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x4d, 0xea, 0x65, 0xe4, - 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x72, 0xda, 0xad, 0x4b, 0x26, - 0xec, 0x2d, 0x25, 0x97, 0x56, 0x79, 0xf9, 0x74, 0xeb, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, + 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x38, 0xd4, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, + 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1a, 0xfe, 0x2e, 0x43, 0x75, 0x77, 0x08, + 0x4c, 0x6c, 0xd9, 0x81, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x1b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, + 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x11, 0x5e, 0x25, 0x5b, 0x79, 0x38, 0x24, 0xd6, 0x5d, 0xd8, 0xd1, + 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0xe4, 0x66, 0x17, 0x12, 0x83, 0x8a, 0xa5, 0xfa, + 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xd5, 0x71, 0x9f, 0x8a, 0xd1, 0x5a, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, + 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x5c, 0x1f, 0xc7, 0x87, 0x83, 0x14, 0x33, + 0x2e, 0x8f, 0xc4, 0x8c, 0xcb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xc3, 0xe1, 0x92, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, + 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4b, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x75, 0xea, 0x65, 0xe4, + 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x2a, 0xda, 0xad, 0x4b, 0x26, + 0xec, 0x2d, 0xa5, 0x92, 0x56, 0x79, 0xf9, 0x74, 0xe3, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, 0x12, 0xb5, 0x32, 0x4c, 0x16, 0xce, 0x4b, 0xa6, 0x9e, 0x0c, 0x78, 0xcc, 0x4a, 0x1e, 0xc9, 0x4e, 0x6f, 0x0c, 0x82, - 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x7c, 0x95, 0x0b, 0x0c, 0xb7, 0xdb, 0xb0, 0xad, - 0xaa, 0xb3, 0xdc, 0xd4, 0x72, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0xb7, 0x10, 0x8c, - 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x03, 0x96, 0xd2, 0xd1, 0x9e, 0x97, - 0xa8, 0x52, 0xf8, 0x9b, 0xe0, 0x87, 0x30, 0x8e, 0x7f, 0x28, 0x76, 0xea, 0x40, 0xbc, 0x2b, 0x76, 0x48, 0xfb, 0x22, + 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x74, 0x95, 0x0b, 0x0c, 0xb7, 0x5b, 0xb3, 0x8d, + 0xaa, 0xb3, 0xdc, 0xd4, 0x2a, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0x37, 0x10, 0x8c, + 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x05, 0x96, 0xd2, 0xd1, 0x8e, 0x97, + 0xa8, 0x52, 0xf8, 0xbb, 0xe0, 0xfb, 0x30, 0x8e, 0xbf, 0x2f, 0xb6, 0xea, 0x40, 0xbc, 0x2d, 0xb6, 0x48, 0xfb, 0x22, 0xff, 0x42, 0x1c, 0xf0, 0x5a, 0xd7, 0x94, 0xd7, 0xd6, 0x9c, 0x06, 0xb6, 0x86, 0x91, 0x92, 0xc2, 0xb9, 0xf9, 0xf3, - 0x78, 0xa4, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x45, 0x09, 0x7e, 0x13, - 0xf2, 0xaf, 0xe3, 0x51, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0x3b, 0x7c, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, + 0x70, 0xa0, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x44, 0x09, 0x8e, 0x5c, + 0xf2, 0xaf, 0xc3, 0x41, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0xdb, 0x7f, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, 0x24, 0xff, 0x6a, 0x9a, 0x79, 0xc3, 0x64, 0xcd, 0x14, 0x8e, 0x43, 0xc3, 0x08, 0x69, 0x40, 0xb7, 0x41, 0x6d, 0x78, - 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0xd7, 0x13, 0x71, 0x49, 0x97, 0x24, 0xf5, 0x54, 0x42, - 0x49, 0x08, 0x76, 0xed, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, - 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xcb, - 0x79, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8b, 0x6d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, - 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xcc, 0xe5, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, - 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0xbf, 0xaa, 0x6c, 0x6c, 0x05, 0xe4, 0x90, 0x64, 0xb2, 0x58, 0x8d, 0xee, - 0xc4, 0xb2, 0x28, 0xc5, 0xcf, 0x58, 0x0f, 0xd7, 0x6c, 0xe1, 0x3e, 0x03, 0x42, 0xfb, 0x89, 0xd2, 0xde, 0x44, 0x9a, - 0xa0, 0x7b, 0xc5, 0xd6, 0x00, 0x32, 0x80, 0xa2, 0xae, 0x76, 0xeb, 0x73, 0x7e, 0x8e, 0xa4, 0x19, 0x0e, 0xa3, 0xdb, - 0xa7, 0xab, 0x60, 0x35, 0xb8, 0x46, 0xad, 0xf4, 0x35, 0x8b, 0x5b, 0x18, 0x54, 0x07, 0xb3, 0x84, 0x83, 0x9a, 0x59, - 0x6b, 0x23, 0x10, 0x4c, 0xf6, 0x50, 0x90, 0x33, 0x57, 0xb0, 0x0f, 0x0a, 0xd6, 0x92, 0xd7, 0xc1, 0xe1, 0xd6, 0xbe, - 0xac, 0x14, 0x57, 0xcf, 0xae, 0x92, 0xd6, 0x85, 0xa5, 0xbc, 0x7a, 0xd6, 0x80, 0xc1, 0xe5, 0x04, 0x9b, 0x2a, 0xf7, - 0x27, 0x5b, 0x00, 0xdd, 0x0a, 0x29, 0xe2, 0x45, 0x29, 0x6c, 0x5b, 0xf9, 0xcc, 0x09, 0x1b, 0x6c, 0xd9, 0x03, 0xdc, - 0x2b, 0x83, 0x92, 0xc1, 0x85, 0x18, 0xb7, 0x9b, 0x7d, 0x80, 0x2b, 0x18, 0x0a, 0x63, 0x1b, 0xfe, 0x3a, 0xf3, 0x22, - 0x25, 0xe0, 0x66, 0x88, 0xf2, 0xb5, 0x85, 0x93, 0x49, 0x4f, 0xae, 0x25, 0x8b, 0x01, 0x0b, 0x1a, 0x7c, 0x47, 0xad, - 0xbf, 0x33, 0xf9, 0x37, 0x9e, 0x1e, 0xfa, 0xc1, 0xe7, 0xcc, 0x5b, 0xfa, 0xec, 0x75, 0x2e, 0xa3, 0x35, 0x49, 0x94, - 0x57, 0x0f, 0x97, 0x20, 0x37, 0x2c, 0x47, 0x0f, 0x6c, 0x09, 0xe2, 0xc4, 0x72, 0x94, 0x50, 0x46, 0x57, 0xb8, 0x57, - 0x99, 0x2d, 0x13, 0x81, 0x14, 0x07, 0x96, 0x52, 0xee, 0x2d, 0x36, 0xc1, 0x12, 0xf7, 0x27, 0x92, 0x0b, 0x28, 0x79, - 0x00, 0xe5, 0x4a, 0x01, 0x01, 0x9f, 0x0e, 0xa0, 0x7c, 0x29, 0x2f, 0xc2, 0x9f, 0x38, 0x51, 0x83, 0xe5, 0xe8, 0xa1, - 0x61, 0x7f, 0xf5, 0x42, 0xcb, 0xfe, 0xb0, 0xd2, 0x9a, 0x86, 0x35, 0x5f, 0xc1, 0xb4, 0x98, 0xb8, 0x7d, 0xb9, 0xb6, - 0xab, 0xe2, 0xb3, 0xb5, 0x3a, 0xbb, 0xa9, 0x21, 0x09, 0xfb, 0x8a, 0xac, 0x02, 0x1c, 0xac, 0x8a, 0xb8, 0x67, 0x59, - 0x1e, 0xc2, 0xe8, 0xcf, 0x6d, 0x5a, 0x0a, 0x0b, 0x55, 0xd2, 0x3f, 0x34, 0xa5, 0x40, 0x2a, 0x13, 0x9d, 0x68, 0x21, - 0xb8, 0x02, 0x83, 0xc0, 0xbd, 0xc8, 0x6b, 0x00, 0x8c, 0x01, 0x97, 0x02, 0x65, 0xd9, 0x96, 0x10, 0x52, 0xdd, 0xcf, - 0x40, 0x6d, 0x27, 0xee, 0xd3, 0x88, 0xac, 0x85, 0xe8, 0xab, 0x60, 0xcc, 0x9c, 0xd7, 0xd2, 0x2d, 0x36, 0x5d, 0x6f, - 0xd7, 0xb7, 0xe8, 0x5c, 0xda, 0x72, 0xf3, 0x13, 0xb6, 0x58, 0x2b, 0x50, 0x36, 0x21, 0x69, 0xbb, 0xe2, 0x15, 0xca, - 0x26, 0xb4, 0xb4, 0x0f, 0xd4, 0xa3, 0x42, 0x75, 0xb2, 0xf5, 0x52, 0x3e, 0xb5, 0x08, 0xab, 0xc5, 0x55, 0xee, 0x07, - 0xa0, 0x9b, 0x4a, 0xab, 0x17, 0x75, 0x8d, 0xa6, 0x50, 0xab, 0x85, 0xe3, 0x46, 0x3b, 0x9b, 0x2e, 0xd3, 0x15, 0xe2, - 0xac, 0x4a, 0x3b, 0xf4, 0x0f, 0x99, 0x76, 0xbd, 0xec, 0xe8, 0x37, 0xe3, 0xea, 0x02, 0x17, 0x62, 0x03, 0x3e, 0xe7, - 0xfe, 0xf2, 0x7a, 0xcf, 0xe2, 0x1e, 0x44, 0x3c, 0x03, 0x7b, 0x52, 0xfb, 0x43, 0xf5, 0xa9, 0x2b, 0x18, 0xb2, 0x30, - 0x4a, 0xfd, 0x45, 0xca, 0x7b, 0x4f, 0x70, 0xdc, 0x3f, 0x57, 0x3d, 0xf6, 0xd7, 0x8c, 0x1f, 0xea, 0x62, 0x1b, 0x25, - 0x14, 0xd5, 0xd0, 0x5b, 0x17, 0xdb, 0x4a, 0xc4, 0xc5, 0x43, 0xde, 0x63, 0x98, 0x0c, 0x63, 0x21, 0x53, 0xe1, 0x4f, - 0x99, 0x0a, 0x1e, 0x21, 0x94, 0xb8, 0xdd, 0xf4, 0x48, 0xbb, 0x09, 0x71, 0x4a, 0xb5, 0x28, 0x65, 0x32, 0xfe, 0xad, - 0x9f, 0x40, 0x79, 0x4e, 0xd1, 0x32, 0xfd, 0xa4, 0x70, 0x99, 0xbe, 0xdd, 0x9c, 0x96, 0x9e, 0x89, 0x50, 0x67, 0x2e, - 0xb6, 0xb5, 0x4e, 0xc7, 0xd8, 0x29, 0x9d, 0xda, 0xb0, 0x77, 0xb9, 0xe2, 0xb2, 0xa2, 0xf0, 0x6f, 0x24, 0xb2, 0xea, - 0x19, 0x71, 0xfc, 0x9f, 0x59, 0xfb, 0x0c, 0xab, 0xc0, 0x2f, 0x03, 0x79, 0xbf, 0x00, 0xf8, 0xb8, 0xae, 0xcb, 0xf4, - 0x6e, 0x0b, 0xb4, 0x21, 0x34, 0xfc, 0x3d, 0x1f, 0x19, 0x30, 0xdd, 0x47, 0x38, 0x43, 0x7a, 0xa8, 0x73, 0x4e, 0x67, - 0x65, 0x3a, 0xe7, 0x2a, 0xac, 0x25, 0x38, 0xc8, 0x49, 0x53, 0xc9, 0x75, 0x09, 0x6a, 0x26, 0x70, 0xfb, 0xd0, 0x1e, - 0x11, 0x42, 0x6d, 0xca, 0x6a, 0x7a, 0x09, 0x35, 0xef, 0xe4, 0xb4, 0xa3, 0x49, 0x09, 0xae, 0x1a, 0x3a, 0x2b, 0xd7, - 0x7f, 0x1d, 0x8f, 0xbd, 0xbb, 0xac, 0x88, 0xfe, 0xe8, 0xa1, 0xbf, 0xe3, 0xee, 0x36, 0xfd, 0x02, 0xd1, 0x32, 0xd6, - 0xdf, 0x90, 0x01, 0x1d, 0x4f, 0x86, 0x77, 0xc5, 0xae, 0xc7, 0xde, 0xe5, 0x78, 0x81, 0x55, 0xd7, 0x8f, 0x3f, 0x40, - 0x42, 0xd5, 0xb5, 0x2f, 0x2c, 0x9e, 0x30, 0x4f, 0x89, 0xb6, 0x85, 0x0f, 0x61, 0xa1, 0xef, 0x72, 0xd8, 0x84, 0xa1, - 0x79, 0xd4, 0x3d, 0x4a, 0xda, 0x85, 0xbe, 0xf4, 0xb5, 0xec, 0x2b, 0xdf, 0xb9, 0x02, 0x58, 0xd9, 0x67, 0x36, 0xdc, - 0x93, 0xfe, 0x94, 0xea, 0xc3, 0xf6, 0xb7, 0x64, 0x01, 0x85, 0x16, 0xd6, 0x53, 0x39, 0x3b, 0x37, 0x25, 0x4f, 0xb3, - 0xe9, 0x61, 0x03, 0x7b, 0xd4, 0x3d, 0x7a, 0x4d, 0x05, 0x97, 0xd7, 0x66, 0xf4, 0xfe, 0x61, 0x28, 0x54, 0x47, 0x9d, - 0x3b, 0xc8, 0xa6, 0xb4, 0x2e, 0x39, 0xbf, 0x59, 0xb9, 0xa3, 0x30, 0xbf, 0x0f, 0xc1, 0x33, 0xac, 0x7b, 0x77, 0x71, - 0xde, 0xfb, 0xb3, 0x35, 0x47, 0xfe, 0x9a, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0x0e, 0xbb, - 0xa0, 0x82, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, - 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xbb, 0xc0, 0xd0, 0xb6, 0x4d, 0x89, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x39, 0x51, 0xa1, - 0x59, 0xa4, 0xad, 0x92, 0xf1, 0xef, 0x44, 0x9b, 0x29, 0xd9, 0x63, 0x6b, 0xe0, 0xbd, 0x04, 0xe5, 0x64, 0x98, 0x62, - 0xf8, 0x8e, 0xaf, 0x77, 0x1e, 0x73, 0xcf, 0x39, 0x65, 0x9b, 0x94, 0x1d, 0xc1, 0x72, 0x22, 0x1b, 0xdf, 0x52, 0xbc, - 0xe1, 0xfb, 0xbb, 0x4a, 0x94, 0x00, 0x7a, 0x59, 0xf0, 0xe7, 0xd2, 0xe6, 0x0a, 0xdd, 0xee, 0xde, 0x51, 0x0a, 0xbf, - 0xe4, 0xe5, 0xf1, 0xb8, 0x4b, 0xbd, 0x10, 0x3a, 0x5f, 0xc4, 0xef, 0xc0, 0x1c, 0xc6, 0x10, 0x9b, 0x11, 0x20, 0xcc, - 0xf1, 0x01, 0x75, 0xb0, 0x7e, 0x04, 0xa0, 0x71, 0x02, 0x05, 0x18, 0x7d, 0xb5, 0x2d, 0xe8, 0x5b, 0x5e, 0x5c, 0x44, - 0x88, 0x1a, 0x05, 0x98, 0x28, 0x69, 0x16, 0xc3, 0x70, 0xa0, 0xf3, 0xfb, 0xf6, 0xae, 0x2e, 0x05, 0x0e, 0xbd, 0x63, - 0x19, 0xfe, 0xdb, 0xff, 0x58, 0x5b, 0x5a, 0x55, 0xb6, 0x5b, 0xe3, 0x34, 0xf3, 0xbf, 0xdd, 0x16, 0xfa, 0xfe, 0x4b, - 0xa1, 0x78, 0xde, 0xf1, 0xba, 0xfd, 0x05, 0xa2, 0xf7, 0x75, 0x2b, 0x57, 0xa5, 0x76, 0xc3, 0x4c, 0xf9, 0x43, 0x9a, - 0xc7, 0xc5, 0xc3, 0x28, 0x6e, 0x1d, 0x79, 0x93, 0xf4, 0x92, 0xf3, 0x2f, 0xe0, 0x6c, 0xfd, 0x05, 0xc8, 0x78, 0x5f, - 0x0a, 0xe3, 0x88, 0x49, 0x1c, 0x7c, 0x07, 0x31, 0x8a, 0xb6, 0x25, 0x6c, 0xc8, 0xed, 0xd3, 0x12, 0x34, 0x33, 0xfd, - 0x3e, 0x4a, 0x94, 0xd6, 0x7c, 0xff, 0x8b, 0x9c, 0xef, 0x2f, 0x85, 0xbc, 0x59, 0xc9, 0x0f, 0x9f, 0xac, 0x30, 0xf0, - 0x3d, 0x4e, 0xbf, 0x88, 0x1e, 0x5b, 0x95, 0x3e, 0x7c, 0x57, 0x5a, 0xfa, 0xac, 0xa2, 0xfe, 0x8e, 0x8a, 0x9a, 0x97, - 0x62, 0x44, 0xc4, 0x83, 0xa0, 0x9d, 0x6d, 0x97, 0xda, 0xb5, 0x04, 0xed, 0x82, 0x4d, 0x61, 0xff, 0x7a, 0x6c, 0xc8, - 0xab, 0x7e, 0xff, 0xe7, 0xca, 0x6b, 0xf1, 0xba, 0xeb, 0xd0, 0x94, 0x9f, 0x0a, 0x0f, 0x21, 0x80, 0xb5, 0x0c, 0x94, - 0xf1, 0x1c, 0x60, 0xd2, 0x45, 0x5e, 0xa3, 0x6c, 0x3a, 0x11, 0xf8, 0x98, 0x65, 0x37, 0x4e, 0x32, 0x0d, 0x30, 0xa3, - 0x9a, 0x62, 0xcc, 0x8a, 0x78, 0xb8, 0xf8, 0x88, 0x75, 0xd3, 0xd3, 0x2a, 0xb4, 0x7c, 0x0d, 0xc1, 0xba, 0xc8, 0x32, - 0x8e, 0x62, 0x26, 0x00, 0xd8, 0x7c, 0x04, 0xf9, 0x8a, 0xae, 0x0e, 0x49, 0x2b, 0x55, 0xde, 0xaf, 0x33, 0x22, 0xa3, - 0x49, 0x88, 0xe6, 0xb7, 0xf0, 0xc0, 0xbe, 0x6d, 0x66, 0x54, 0xa9, 0x67, 0x54, 0xee, 0x33, 0x1c, 0x96, 0xc2, 0x31, - 0xe2, 0xff, 0x2d, 0x55, 0x3d, 0x22, 0xd0, 0xab, 0x32, 0xad, 0xa2, 0x22, 0xcf, 0x45, 0x84, 0x08, 0xd5, 0xd2, 0x39, - 0x1c, 0xfa, 0xb1, 0xdf, 0xc7, 0x81, 0x30, 0x2f, 0xfe, 0xf4, 0x58, 0x57, 0xfe, 0x54, 0xe0, 0x5a, 0x49, 0x81, 0x53, - 0x51, 0x23, 0x44, 0x08, 0xef, 0x4f, 0xe0, 0x59, 0x4d, 0x7d, 0xbf, 0xb1, 0x4c, 0x74, 0xff, 0xc8, 0x80, 0xf2, 0x07, - 0xe4, 0xeb, 0x5c, 0x8a, 0x33, 0x75, 0xf2, 0x98, 0x38, 0xe3, 0x00, 0xc4, 0x7c, 0x5d, 0xa2, 0xd1, 0xd8, 0xff, 0x80, - 0x04, 0x43, 0xf5, 0x83, 0x9d, 0x6e, 0xea, 0xfd, 0x33, 0x93, 0x38, 0x8a, 0x3e, 0x6d, 0x93, 0xa7, 0x92, 0xa5, 0xd1, - 0xc2, 0xd1, 0x7b, 0xc4, 0x30, 0x0e, 0xa7, 0xf3, 0x29, 0xc9, 0x36, 0x26, 0xab, 0x00, 0xd2, 0xc9, 0x4c, 0x1d, 0x53, - 0xea, 0x68, 0x9c, 0xeb, 0x05, 0x55, 0xe8, 0xb1, 0x2e, 0x79, 0x05, 0xd6, 0x93, 0x1f, 0xbd, 0xd2, 0x9f, 0x0a, 0x39, - 0x87, 0x8d, 0x44, 0x50, 0xf8, 0x01, 0xae, 0x06, 0x2b, 0x05, 0x0c, 0xa6, 0xbe, 0x85, 0xaf, 0x89, 0xe7, 0x28, 0x78, - 0x14, 0x76, 0x31, 0xb6, 0xe6, 0xbe, 0xf3, 0x49, 0x41, 0xb9, 0x67, 0xc5, 0x9c, 0xe7, 0xc0, 0xb9, 0x0c, 0x0a, 0x61, - 0x3a, 0x9e, 0xe5, 0xff, 0x4c, 0xf2, 0x7a, 0x62, 0x43, 0x80, 0x0c, 0xfe, 0x9c, 0x38, 0x2d, 0xdd, 0xa1, 0x3b, 0x0f, - 0x3d, 0x8b, 0x38, 0x6c, 0xf4, 0x64, 0x53, 0x16, 0xbb, 0x14, 0xf5, 0x12, 0xe6, 0x07, 0xf2, 0xf3, 0x96, 0xfc, 0x10, - 0xa2, 0x78, 0x1b, 0xfc, 0x9a, 0xb1, 0x58, 0xe0, 0x5f, 0x7f, 0xcb, 0x18, 0x4d, 0xb4, 0xe0, 0x5f, 0x59, 0x83, 0x44, - 0xc5, 0x3f, 0x65, 0x93, 0x1c, 0xb8, 0x4c, 0xd5, 0x87, 0xcf, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x39, 0xe8, - 0xd4, 0xe7, 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x96, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4b, 0xa9, 0x1a, 0xbf, - 0x65, 0x14, 0xbf, 0x93, 0xfb, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xf9, 0x7b, 0xc3, 0x99, 0x5d, 0xf6, 0xab, 0xb7, - 0x89, 0xcc, 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x35, 0x13, 0x7f, 0xae, 0x0c, 0xa7, 0xc4, 0xe5, 0xa5, 0x87, 0x2b, 0x36, - 0xad, 0x5e, 0xd2, 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0xa9, 0xf2, 0x00, 0x82, - 0x99, 0xd4, 0x04, 0x80, 0xb4, 0x10, 0x95, 0x42, 0xe4, 0x2f, 0x71, 0x56, 0x5f, 0xf2, 0xde, 0x36, 0x8f, 0x89, 0xb4, - 0xba, 0xd7, 0xef, 0xa7, 0x17, 0x69, 0x4e, 0x41, 0x0d, 0xa7, 0x59, 0xa7, 0x3f, 0x64, 0x41, 0x9d, 0xc8, 0x55, 0xfa, - 0x77, 0x37, 0xc8, 0xcb, 0xf8, 0xbe, 0xee, 0x7a, 0xfe, 0x44, 0xfd, 0xbd, 0xb7, 0xfe, 0xb6, 0x40, 0x70, 0x27, 0xa7, - 0x7e, 0xb2, 0x2a, 0xe5, 0x89, 0x71, 0x69, 0xef, 0xf9, 0x4d, 0x5d, 0x14, 0x59, 0x9d, 0x6e, 0x3e, 0x48, 0x3d, 0x8d, - 0xee, 0x8b, 0x03, 0x18, 0x83, 0xf7, 0x00, 0x78, 0xa6, 0x43, 0x03, 0xa4, 0xef, 0x19, 0x79, 0xb8, 0xcf, 0x2d, 0xf9, - 0x49, 0x65, 0x6d, 0x92, 0xb0, 0xa2, 0xd8, 0x0c, 0x63, 0x84, 0x92, 0x71, 0x1a, 0x3b, 0xbf, 0xdf, 0x57, 0x7f, 0xef, - 0x31, 0x8a, 0x8a, 0x8a, 0x3b, 0x45, 0xa3, 0xb2, 0xaa, 0x47, 0xdb, 0xc1, 0xf1, 0x78, 0x59, 0xd9, 0x38, 0xda, 0x7a, - 0x05, 0x1c, 0xac, 0x50, 0x29, 0x7b, 0x25, 0xc2, 0xf2, 0xc3, 0x95, 0xdf, 0xef, 0xc3, 0xbf, 0x32, 0xd2, 0xc2, 0xf3, - 0xa7, 0xf8, 0x6b, 0x51, 0x17, 0x18, 0x9e, 0x41, 0x6b, 0x34, 0x87, 0x60, 0x82, 0xbf, 0x77, 0xa0, 0x5e, 0x5a, 0x69, - 0x1f, 0x41, 0xb7, 0x02, 0x3d, 0xa8, 0x87, 0x3e, 0x4d, 0xda, 0x17, 0x12, 0x75, 0x7b, 0xab, 0xd3, 0xe8, 0x8f, 0x0a, - 0x2e, 0xa7, 0x30, 0x39, 0xdc, 0xd0, 0xa7, 0x75, 0xb8, 0xfb, 0x04, 0x4f, 0x7f, 0x06, 0xca, 0xad, 0xe3, 0x11, 0xc5, - 0x16, 0x70, 0xf3, 0x58, 0x87, 0x9f, 0x8b, 0x52, 0x46, 0xd4, 0xc7, 0xd3, 0x02, 0xb4, 0x77, 0x01, 0x3a, 0x60, 0x69, - 0x10, 0xaf, 0x90, 0x3c, 0x67, 0x23, 0x80, 0x65, 0x07, 0x96, 0xb3, 0x8c, 0x53, 0x98, 0x67, 0xf9, 0x5c, 0xad, 0xb4, - 0x8b, 0x32, 0xf1, 0x6a, 0x96, 0x81, 0xb3, 0xc0, 0x55, 0xee, 0xb3, 0x4c, 0xab, 0x9e, 0xf2, 0x04, 0x7d, 0x5e, 0xc9, - 0x09, 0xae, 0x04, 0x27, 0x1b, 0x90, 0x5f, 0x80, 0x24, 0x4d, 0x29, 0x6b, 0xca, 0xe7, 0xd7, 0x74, 0x43, 0x46, 0xcf, - 0x79, 0xcf, 0x8b, 0x86, 0xa1, 0x7f, 0xe5, 0x95, 0x10, 0xbe, 0x89, 0xdb, 0x36, 0x4a, 0x61, 0x7f, 0x11, 0x58, 0x7c, - 0xc2, 0x7e, 0xf4, 0x96, 0xfe, 0x74, 0x1c, 0x84, 0x43, 0xe4, 0x86, 0x8a, 0x39, 0xb0, 0xa7, 0x01, 0x8b, 0x4d, 0x7c, - 0xb3, 0x9d, 0xc4, 0x83, 0x81, 0xaf, 0x33, 0x16, 0xb3, 0x18, 0x68, 0x90, 0xe3, 0xc1, 0xf5, 0x5c, 0x9f, 0x10, 0xfa, - 0x61, 0x44, 0xe5, 0xa8, 0x40, 0xe7, 0x20, 0x1a, 0x2c, 0x01, 0x4f, 0xbd, 0x95, 0x0d, 0x92, 0x8c, 0x49, 0x26, 0x71, - 0xad, 0x49, 0xaa, 0xc3, 0x09, 0xad, 0x03, 0x1d, 0x57, 0x17, 0xd0, 0xf9, 0xb8, 0xee, 0x7d, 0xbc, 0x1a, 0x2e, 0xa8, - 0xf4, 0x2b, 0x31, 0xf0, 0xea, 0xe9, 0x38, 0xb8, 0xa6, 0x5b, 0xe1, 0x62, 0x1d, 0xee, 0x7e, 0x96, 0x0f, 0x1c, 0x77, - 0x54, 0xd2, 0x10, 0x18, 0xbc, 0x3d, 0x74, 0x37, 0x33, 0x34, 0xd4, 0x49, 0xfb, 0x30, 0x0e, 0xe5, 0x10, 0xab, 0x56, - 0x5c, 0x49, 0x6f, 0x04, 0xdf, 0x2e, 0x14, 0x63, 0xd9, 0xd8, 0xb5, 0xa1, 0x28, 0xfc, 0x15, 0xc0, 0x0e, 0xb5, 0xbf, - 0x52, 0xc9, 0xc7, 0xc8, 0xa8, 0xa6, 0x81, 0x8e, 0x01, 0x58, 0xb2, 0x34, 0x91, 0x54, 0x91, 0x46, 0xe2, 0x8f, 0xcc, - 0x58, 0x47, 0x4d, 0xd7, 0x17, 0x4c, 0x55, 0x8b, 0xa4, 0xdb, 0x99, 0xc4, 0x72, 0x22, 0x49, 0x6d, 0xf7, 0x11, 0x31, - 0x18, 0xf8, 0x60, 0x23, 0xa6, 0x99, 0x08, 0x47, 0x3c, 0x2a, 0x91, 0x45, 0x97, 0xdf, 0x46, 0x99, 0xb4, 0x7d, 0x59, - 0x91, 0x2d, 0x08, 0xa6, 0x27, 0xd1, 0x07, 0x49, 0xd0, 0xba, 0x48, 0xa4, 0x19, 0x21, 0xc0, 0x8f, 0x27, 0xe5, 0x8d, - 0xfe, 0x1c, 0x34, 0xad, 0x04, 0x2f, 0x19, 0x24, 0x8f, 0xc4, 0xcf, 0xa4, 0x60, 0x16, 0x63, 0xf9, 0x60, 0x80, 0xe5, - 0xe4, 0x4f, 0x1d, 0x93, 0xf4, 0x5f, 0x3a, 0x9d, 0xb0, 0x5f, 0x78, 0x95, 0xad, 0xe5, 0x4d, 0x73, 0xef, 0x85, 0x97, - 0xb3, 0x54, 0xc3, 0x32, 0xe8, 0xbf, 0x26, 0xda, 0x05, 0x5b, 0x5b, 0xc6, 0x84, 0x55, 0x3f, 0x80, 0xb4, 0x47, 0xba, - 0xbc, 0x7c, 0x58, 0x31, 0xc1, 0xa3, 0x2b, 0x6b, 0x1e, 0x44, 0x57, 0xc2, 0x47, 0x2e, 0xbb, 0x49, 0x72, 0x33, 0x9e, - 0xf8, 0xe1, 0x60, 0xa0, 0x00, 0x68, 0x69, 0x9d, 0x14, 0x83, 0xf0, 0xa9, 0x90, 0x03, 0x69, 0x74, 0x54, 0x05, 0x58, - 0x2c, 0xb3, 0x9b, 0x72, 0x92, 0x0d, 0x06, 0x3e, 0x88, 0x8d, 0x89, 0xdd, 0xd0, 0x6c, 0xee, 0xb3, 0x33, 0x05, 0x59, - 0x6d, 0x0e, 0x5b, 0x33, 0xdd, 0x02, 0x03, 0x80, 0x41, 0x44, 0xb0, 0xdc, 0x67, 0x46, 0x3e, 0xa2, 0x4e, 0x4f, 0x61, - 0x04, 0x04, 0xbf, 0x9e, 0x08, 0x44, 0x2e, 0x12, 0xa8, 0x07, 0x98, 0x09, 0x30, 0xa3, 0x8a, 0xe1, 0x35, 0xb0, 0x8b, - 0x57, 0xe6, 0x15, 0x83, 0xfe, 0x45, 0x93, 0x2c, 0xd1, 0x54, 0xe2, 0x68, 0x8c, 0x9c, 0x4a, 0x63, 0x64, 0x40, 0xec, - 0xe2, 0xf8, 0xf7, 0x94, 0x1e, 0x05, 0x29, 0xfb, 0x9c, 0x1b, 0xe2, 0x70, 0x14, 0x5f, 0xc1, 0xaa, 0x71, 0x3c, 0xd6, - 0xe6, 0xf5, 0x74, 0x56, 0xcf, 0x07, 0x22, 0x80, 0xff, 0x86, 0x82, 0xfd, 0xa2, 0xa9, 0xc8, 0x0d, 0x52, 0xe7, 0xf1, - 0x98, 0x82, 0x7c, 0xaa, 0x9b, 0xfc, 0x43, 0xee, 0xee, 0xa7, 0xb3, 0xb9, 0x35, 0x47, 0xaf, 0x6a, 0x5c, 0xb7, 0x56, - 0x37, 0x14, 0x12, 0xad, 0x69, 0x52, 0xdc, 0xe4, 0x93, 0x62, 0xc0, 0x2b, 0x5f, 0xa8, 0x2e, 0xb6, 0x46, 0xb0, 0xf0, - 0xe7, 0x16, 0x08, 0x93, 0x71, 0x2f, 0x3e, 0x59, 0xc8, 0x29, 0xed, 0xda, 0x6a, 0xb7, 0xb5, 0x49, 0xd3, 0x58, 0x35, - 0xbc, 0x86, 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, - 0x2d, 0x86, 0xff, 0x29, 0xdd, 0x9b, 0x53, 0x1b, 0xe4, 0x00, 0xb6, 0x7b, 0x0f, 0xb7, 0x63, 0xf4, 0x40, 0x06, 0x6f, - 0x04, 0x10, 0x8d, 0xaf, 0xa7, 0xd6, 0x8c, 0x89, 0x86, 0x05, 0x2b, 0x87, 0x91, 0x1f, 0x20, 0xe3, 0xe5, 0x14, 0x58, - 0xd9, 0x4f, 0x8a, 0xb8, 0xf6, 0x87, 0x91, 0x7f, 0xf5, 0x2c, 0xc8, 0xb8, 0x17, 0x0d, 0x3b, 0xbe, 0x00, 0x7b, 0xf5, - 0xd5, 0x33, 0x16, 0x0d, 0x78, 0x7e, 0x53, 0x4f, 0xb3, 0x60, 0x98, 0xb1, 0xe8, 0xa6, 0x18, 0x82, 0x0f, 0xed, 0xf3, - 0x72, 0x10, 0xfa, 0xbe, 0xd9, 0x39, 0x74, 0x37, 0x24, 0xf2, 0x08, 0xfb, 0x2b, 0xb8, 0xed, 0x6a, 0x89, 0x19, 0xe0, - 0x06, 0x56, 0x11, 0x33, 0xd8, 0xf2, 0x57, 0xcf, 0x0c, 0x97, 0x50, 0xfe, 0x5c, 0x6a, 0x36, 0x0a, 0x34, 0x27, 0xe7, - 0x68, 0x4e, 0x56, 0x42, 0x2d, 0xf9, 0xa4, 0xc2, 0xa9, 0x3a, 0x9f, 0x68, 0xbb, 0xd1, 0x18, 0x03, 0x17, 0xed, 0xb9, - 0x2d, 0x8c, 0xcc, 0x74, 0x91, 0xa2, 0x01, 0x0b, 0xcf, 0xc4, 0x29, 0x8d, 0x01, 0xed, 0xcb, 0x81, 0xa5, 0x0d, 0xf9, - 0xab, 0x9c, 0x19, 0x68, 0x1b, 0x52, 0x1a, 0x35, 0x03, 0x7f, 0xa6, 0x26, 0xcc, 0xaf, 0x60, 0x25, 0x82, 0xa8, 0x2e, - 0xc0, 0x24, 0xa9, 0xc8, 0x68, 0xa4, 0xac, 0x44, 0x72, 0x0e, 0x78, 0x1f, 0xc1, 0x93, 0x45, 0xec, 0x6a, 0x7f, 0x4a, - 0xff, 0xab, 0xc3, 0xe7, 0xda, 0x7f, 0x2a, 0x80, 0x85, 0x5c, 0x1a, 0x44, 0x06, 0x0a, 0x87, 0xd4, 0x54, 0x22, 0x4e, - 0x1c, 0xcf, 0xc0, 0xd7, 0x70, 0x81, 0xa6, 0x80, 0xfe, 0xa0, 0x66, 0x14, 0x91, 0x85, 0xbf, 0x7a, 0x76, 0x53, 0xb7, - 0x7a, 0x9e, 0x39, 0xaf, 0x41, 0x33, 0x03, 0x21, 0x3d, 0x4e, 0xd5, 0xdb, 0x90, 0xe8, 0xbc, 0xbc, 0xd4, 0x2f, 0x13, - 0x22, 0x59, 0x11, 0x79, 0xfa, 0x3e, 0x07, 0xf3, 0x88, 0x22, 0x74, 0x70, 0x65, 0x1e, 0x8f, 0x97, 0x82, 0xc2, 0x77, - 0x94, 0xe7, 0x03, 0x4e, 0xb3, 0x28, 0x01, 0x6d, 0x20, 0xab, 0x4c, 0x99, 0x9b, 0xa4, 0x65, 0xea, 0x3e, 0x80, 0x95, - 0x20, 0x47, 0x37, 0xa7, 0xa0, 0x50, 0x46, 0x82, 0x52, 0x5a, 0x0d, 0x42, 0xa9, 0x0e, 0x8b, 0x20, 0x72, 0xc8, 0x42, - 0xc0, 0xcd, 0x54, 0x34, 0x5a, 0xd2, 0xf0, 0x08, 0xe7, 0x06, 0x0a, 0x01, 0x48, 0xec, 0xa9, 0xa2, 0x8c, 0xcb, 0x61, - 0xce, 0xd6, 0x3c, 0x1c, 0xe2, 0xac, 0x49, 0x5b, 0x9e, 0x83, 0x38, 0x96, 0x4b, 0xbe, 0xc9, 0x11, 0x0c, 0x22, 0xf4, - 0x19, 0xf2, 0x27, 0xcb, 0xf9, 0x77, 0xe7, 0x30, 0xed, 0x08, 0x1f, 0x76, 0xb5, 0x05, 0x17, 0xb3, 0xbb, 0xf9, 0x04, - 0xe2, 0x5b, 0xee, 0xe6, 0xa7, 0x18, 0x22, 0x0b, 0x7f, 0xb0, 0x1a, 0x4a, 0xae, 0x28, 0x74, 0x59, 0x8f, 0x48, 0x91, - 0x3d, 0xdd, 0x70, 0x04, 0xc1, 0x81, 0x56, 0x0d, 0x32, 0x34, 0x12, 0x5f, 0x3d, 0x83, 0xac, 0xc1, 0x86, 0x7f, 0xce, - 0xc9, 0x59, 0xdd, 0x9f, 0x6c, 0xa1, 0x9a, 0x64, 0xb2, 0x56, 0x54, 0xce, 0x5f, 0xaf, 0xca, 0xf2, 0x6c, 0x55, 0x86, - 0xeb, 0x41, 0x57, 0x55, 0x96, 0x1c, 0xa9, 0x0d, 0xd0, 0x9a, 0xae, 0x10, 0x43, 0x21, 0x6b, 0xb0, 0xb4, 0xaa, 0xb2, - 0xa1, 0x3e, 0x81, 0x40, 0x1f, 0x60, 0x19, 0x35, 0xfb, 0xe9, 0xf0, 0x9f, 0xc1, 0x3f, 0x55, 0xc8, 0x52, 0x9d, 0xd6, - 0x99, 0xf8, 0x35, 0x58, 0x32, 0xfc, 0xe3, 0xb7, 0x60, 0x03, 0x58, 0x02, 0x64, 0xb9, 0xdb, 0xda, 0x68, 0xbd, 0xf2, - 0x0a, 0xf1, 0xae, 0xd6, 0x17, 0xfd, 0xd6, 0x6d, 0xa2, 0x56, 0x80, 0x11, 0x0a, 0x2d, 0x02, 0x6c, 0xf5, 0xc0, 0x3d, - 0x05, 0x3f, 0x10, 0xc3, 0xb9, 0x26, 0xad, 0xa9, 0x13, 0x5e, 0x67, 0xe3, 0x48, 0x44, 0xf5, 0x0e, 0x2e, 0xee, 0xf5, - 0xce, 0xe2, 0x6f, 0x54, 0x20, 0x00, 0xb2, 0x98, 0x62, 0xe3, 0xbc, 0x21, 0xbd, 0x32, 0xec, 0x24, 0xf4, 0xde, 0xb0, - 0x13, 0xc8, 0x8b, 0xc3, 0x4e, 0xa1, 0x4b, 0xb4, 0x9d, 0x22, 0x35, 0xd1, 0x76, 0xd2, 0x62, 0x1d, 0x96, 0x10, 0xfc, - 0xaa, 0xbd, 0x75, 0x94, 0xed, 0x8b, 0x2c, 0x61, 0xda, 0x02, 0x46, 0xb9, 0x55, 0x9f, 0x39, 0x45, 0xac, 0x95, 0xbd, - 0xd3, 0x49, 0x95, 0xbb, 0xc8, 0xa7, 0x56, 0x53, 0x64, 0xf2, 0x0f, 0xa7, 0x2d, 0x92, 0x4f, 0x7e, 0x6e, 0x37, 0x4c, - 0xa6, 0x7f, 0x3c, 0xf9, 0x02, 0xba, 0x22, 0x3b, 0x7d, 0x02, 0x01, 0x99, 0x0a, 0xaa, 0xd5, 0xad, 0x62, 0x9a, 0xb7, - 0xab, 0xec, 0xf6, 0x42, 0x89, 0xe1, 0x74, 0x76, 0x12, 0x1e, 0x6d, 0x86, 0x0c, 0x1c, 0x82, 0x40, 0x21, 0x54, 0x14, - 0xc3, 0x23, 0x50, 0x6b, 0x24, 0x1f, 0xe0, 0x47, 0xbb, 0x53, 0x41, 0xa4, 0x76, 0x53, 0x71, 0xe3, 0xe4, 0xa6, 0xeb, - 0xa5, 0x40, 0xad, 0x53, 0xb2, 0x02, 0x28, 0x21, 0xea, 0x4f, 0x62, 0x57, 0xbf, 0x84, 0x2b, 0x36, 0x3f, 0x34, 0x8a, - 0x9e, 0x5c, 0x9f, 0xa2, 0x6e, 0xc5, 0xd5, 0x69, 0xda, 0x6a, 0x8e, 0x1d, 0x67, 0xc8, 0xc1, 0xb3, 0x82, 0x60, 0x3b, - 0x2a, 0x51, 0xbe, 0x6d, 0x37, 0x1d, 0x13, 0x5b, 0xfd, 0xb3, 0xa8, 0xb6, 0x2b, 0xa8, 0x88, 0x88, 0x4f, 0xb2, 0x9b, - 0x27, 0xed, 0x77, 0xb0, 0xc7, 0x5a, 0x0d, 0x22, 0xfb, 0x0c, 0xae, 0x72, 0x9d, 0x16, 0xb9, 0x2d, 0x83, 0xf3, 0x0f, - 0xaf, 0x76, 0x15, 0x36, 0x39, 0xd6, 0xd5, 0xd5, 0x4c, 0x75, 0x52, 0xb1, 0x81, 0xb1, 0xa6, 0xb5, 0x54, 0xf3, 0x18, - 0x92, 0xee, 0xca, 0xe2, 0xac, 0x4a, 0xba, 0xe9, 0xb9, 0x71, 0xa6, 0x10, 0x03, 0x67, 0xab, 0xd1, 0x72, 0x86, 0x21, - 0xba, 0x3e, 0xcc, 0x12, 0xbf, 0xd5, 0x53, 0xee, 0xf3, 0x70, 0xe7, 0x77, 0xf5, 0x82, 0x93, 0xc9, 0x7e, 0x72, 0x9a, - 0xbb, 0x5d, 0xa4, 0xfd, 0xc4, 0xb7, 0x61, 0xfe, 0xf5, 0x0d, 0x62, 0x25, 0xea, 0x7f, 0x54, 0x00, 0x34, 0xb8, 0xcd, - 0x63, 0x89, 0x52, 0x7f, 0x50, 0xd5, 0x0f, 0x6a, 0xa6, 0x6a, 0x1a, 0x08, 0xe6, 0x54, 0x0a, 0xf8, 0xc3, 0xed, 0xc2, - 0x15, 0x8f, 0xb8, 0x61, 0x61, 0xfc, 0xd3, 0xab, 0xd9, 0xb9, 0xa0, 0x32, 0x70, 0x33, 0xfe, 0xd3, 0x13, 0xec, 0x1c, - 0xd6, 0x0a, 0xc8, 0x0a, 0x7f, 0x7a, 0xd5, 0x23, 0xef, 0xe7, 0xfc, 0x4f, 0x2f, 0x7f, 0xe4, 0x7d, 0xc4, 0x79, 0xf9, - 0x13, 0x49, 0x9d, 0x10, 0xd5, 0xe5, 0x4f, 0xc2, 0x14, 0x5b, 0xa7, 0xf9, 0x2b, 0x52, 0xf8, 0x04, 0x9f, 0x81, 0xef, - 0x70, 0x1d, 0xee, 0xcc, 0x6f, 0xf0, 0xd8, 0xb1, 0xd8, 0x76, 0xa9, 0x2f, 0xa0, 0x1c, 0x81, 0x45, 0x54, 0xf6, 0xdb, - 0xb9, 0xfd, 0x6a, 0x61, 0x94, 0x31, 0x76, 0x5f, 0xb2, 0x12, 0xa5, 0xb3, 0x7e, 0xbf, 0x90, 0x82, 0x91, 0x5d, 0x58, - 0xa3, 0x3d, 0x4a, 0xd5, 0xab, 0x6f, 0xc3, 0x3a, 0x4a, 0xd2, 0x7c, 0x25, 0xa3, 0x8f, 0x64, 0xd8, 0x91, 0xbe, 0x92, - 0x12, 0xed, 0xb5, 0x0a, 0xcb, 0xd1, 0xec, 0xd7, 0x25, 0x07, 0xca, 0xeb, 0x56, 0x50, 0xbe, 0x6a, 0x02, 0xe8, 0x95, - 0x6a, 0x9f, 0x01, 0x23, 0xa7, 0xb0, 0x54, 0x1e, 0xac, 0xc4, 0xb9, 0xe8, 0xb3, 0xe2, 0x78, 0xf4, 0x2c, 0x34, 0xf3, - 0x0a, 0x1e, 0x84, 0x3b, 0x0b, 0x23, 0x15, 0x2e, 0x84, 0xe2, 0x79, 0x85, 0xb1, 0x15, 0x15, 0x70, 0x20, 0xc3, 0x0f, - 0x08, 0xbc, 0x97, 0xfd, 0x2b, 0x18, 0x0c, 0x13, 0xdc, 0xc8, 0xa8, 0x93, 0x2b, 0xf6, 0x27, 0x06, 0x66, 0x50, 0x4f, - 0x6a, 0xf7, 0xd9, 0x83, 0x0a, 0xec, 0x85, 0x33, 0xa0, 0xbd, 0x1b, 0xa3, 0x9f, 0x55, 0xb1, 0x71, 0xd2, 0x3f, 0x15, - 0x1b, 0x48, 0xa6, 0xc3, 0xe2, 0x64, 0x9b, 0x86, 0x47, 0xf2, 0xe4, 0x38, 0xdd, 0xf4, 0x8f, 0xc7, 0x31, 0x7e, 0x1c, - 0xe5, 0xd7, 0x16, 0xf0, 0x2a, 0x6e, 0x21, 0x8d, 0x45, 0x8a, 0xde, 0x81, 0x98, 0x43, 0xd1, 0x4b, 0xf6, 0x5b, 0xc6, - 0xcb, 0x89, 0xa0, 0x94, 0x24, 0x36, 0xbc, 0x23, 0x3d, 0x4d, 0xeb, 0xd1, 0x4e, 0x06, 0xec, 0xd7, 0xa3, 0x3d, 0xfd, - 0x05, 0x8a, 0x47, 0x0b, 0x7f, 0x49, 0x7f, 0x17, 0x77, 0x73, 0xcf, 0xf9, 0xa6, 0xf1, 0x1d, 0x71, 0x81, 0x62, 0xcd, - 0xee, 0xaf, 0x69, 0xe9, 0xac, 0x03, 0xc1, 0x01, 0x6f, 0xb1, 0x8b, 0xf6, 0xfd, 0xc6, 0x75, 0x7a, 0x3a, 0x7c, 0xeb, - 0xd6, 0x28, 0xdf, 0xfb, 0x87, 0x44, 0x39, 0x38, 0xbc, 0x72, 0xd1, 0xfc, 0xed, 0xa7, 0x0c, 0x49, 0x85, 0xe6, 0x06, - 0xdb, 0xc9, 0x16, 0x61, 0x6d, 0x8c, 0x83, 0x9c, 0xad, 0xca, 0x30, 0x02, 0x06, 0x75, 0xec, 0x7f, 0xf4, 0xd9, 0xb4, - 0x21, 0xfb, 0x00, 0x50, 0xb9, 0x0a, 0x01, 0x7b, 0x00, 0x4e, 0x34, 0xc2, 0x0d, 0x70, 0xab, 0xd1, 0x92, 0x0e, 0xea, - 0xb6, 0x60, 0x20, 0x5a, 0xc2, 0xc6, 0x09, 0x5d, 0xdf, 0x57, 0x84, 0x8f, 0xca, 0xb7, 0x0f, 0xe5, 0xaf, 0x9e, 0xb3, - 0xff, 0xde, 0x61, 0x4d, 0x4d, 0xb9, 0x05, 0xcc, 0x9c, 0xb5, 0xc8, 0x2b, 0x84, 0x4e, 0x91, 0xdf, 0xab, 0xba, 0x12, - 0xc3, 0x65, 0x2d, 0xca, 0xce, 0xec, 0xd6, 0x89, 0xde, 0x39, 0x05, 0xb5, 0x54, 0x36, 0x20, 0x01, 0x6e, 0x20, 0xc5, - 0xb6, 0xc0, 0x92, 0xce, 0x06, 0x28, 0xfe, 0x0d, 0x2a, 0xed, 0xfe, 0xdf, 0x39, 0x13, 0xd4, 0x6c, 0xa3, 0xba, 0xbf, - 0xd2, 0x4f, 0x55, 0x4d, 0x62, 0x01, 0x2e, 0x27, 0x69, 0xde, 0xf1, 0x08, 0xab, 0x7f, 0x9a, 0x2c, 0x45, 0xa0, 0x57, - 0x11, 0xed, 0x4a, 0x40, 0x82, 0x76, 0x76, 0x16, 0x2a, 0x02, 0x05, 0xfa, 0xfa, 0x0f, 0xdb, 0x34, 0x8b, 0xe5, 0x6a, - 0xb6, 0x87, 0x89, 0xb2, 0x58, 0x0f, 0x11, 0xe4, 0xcc, 0xd4, 0xc1, 0x7e, 0x4f, 0x33, 0x9a, 0x85, 0x37, 0xa6, 0x04, - 0x97, 0xe2, 0x2a, 0x2a, 0x72, 0xf0, 0x39, 0xc4, 0x17, 0x3e, 0x15, 0x72, 0x83, 0x88, 0xa6, 0x3f, 0xe4, 0x9e, 0x79, - 0x83, 0x85, 0x92, 0x9f, 0x10, 0x7f, 0xc9, 0xda, 0x18, 0xf7, 0x4b, 0xa7, 0xda, 0x2f, 0x15, 0x82, 0xfb, 0xcf, 0xb6, - 0xd8, 0xa8, 0xf2, 0x44, 0x8f, 0x3e, 0xc5, 0xfa, 0x9f, 0x2d, 0xa0, 0x54, 0xf7, 0x6d, 0x70, 0x2a, 0x1e, 0x85, 0xdb, - 0xba, 0xb8, 0x45, 0x68, 0x81, 0x72, 0x54, 0x15, 0xdb, 0x32, 0x22, 0x4e, 0xd8, 0x6d, 0x5d, 0xf4, 0x34, 0x07, 0x3a, - 0x75, 0x58, 0x9a, 0xc8, 0x13, 0xa1, 0xdd, 0x82, 0xee, 0x69, 0x8e, 0x95, 0x78, 0x21, 0x4b, 0x07, 0x59, 0x27, 0xd2, - 0x84, 0xca, 0x5d, 0x5d, 0x75, 0x52, 0x2a, 0x75, 0xc3, 0xeb, 0x54, 0x33, 0xfe, 0x2e, 0xcd, 0x9f, 0x58, 0xf6, 0xeb, - 0xd6, 0x6f, 0xb5, 0xda, 0x1b, 0xab, 0x47, 0x25, 0x6b, 0x8e, 0xb3, 0x09, 0x49, 0xe9, 0x13, 0xb6, 0x9b, 0x49, 0xd7, - 0x3a, 0xf0, 0x24, 0xb8, 0x1c, 0x7a, 0x02, 0x2a, 0x06, 0x4d, 0xbc, 0xdd, 0x05, 0xea, 0x11, 0x78, 0x06, 0xaa, 0x19, - 0x24, 0xd7, 0x01, 0xbf, 0xac, 0xb5, 0x3c, 0x65, 0x84, 0x61, 0xb5, 0xb3, 0x68, 0x39, 0x58, 0x49, 0x78, 0xae, 0x08, - 0x5c, 0xbb, 0x12, 0x78, 0x35, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, - 0xa7, 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, - 0x36, 0x9f, 0x43, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, - 0xcf, 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, - 0x76, 0x7a, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, - 0x88, 0xc2, 0x2c, 0xfb, 0x6b, 0x51, 0xfc, 0x51, 0xe9, 0x3b, 0x02, 0x1d, 0xdd, 0x79, 0x51, 0xa7, 0xcb, 0xfd, 0x07, - 0xc2, 0x78, 0xf2, 0xea, 0x13, 0xa2, 0x5b, 0xdf, 0x67, 0xee, 0x57, 0x80, 0x1b, 0xc1, 0x1d, 0x44, 0x7b, 0xb7, 0xd4, - 0x27, 0xb5, 0xfa, 0x5a, 0xaf, 0x9d, 0xa7, 0xe7, 0x37, 0x9d, 0xdb, 0xef, 0xa1, 0x39, 0xd9, 0x7a, 0x4f, 0x0b, 0x6b, - 0x65, 0xe9, 0xa9, 0x2a, 0xd8, 0x9b, 0xe5, 0xb9, 0x2a, 0x98, 0x3c, 0xf0, 0x9a, 0xfd, 0x82, 0x06, 0x57, 0x3a, 0xd9, - 0x78, 0xcf, 0xd4, 0xc0, 0x2d, 0x0a, 0x4b, 0x87, 0x5f, 0x72, 0x33, 0x79, 0x89, 0xfb, 0x4b, 0x45, 0x2e, 0xf6, 0x9d, - 0x33, 0xba, 0x33, 0xb3, 0xee, 0x55, 0x85, 0xab, 0x05, 0xb9, 0x3a, 0xb0, 0xb5, 0xec, 0xe2, 0x70, 0xc3, 0x22, 0x0a, - 0x10, 0x88, 0xe9, 0x95, 0x5a, 0xfb, 0x13, 0x1a, 0x84, 0x6a, 0x30, 0xf0, 0x0b, 0x0c, 0x56, 0x05, 0x0a, 0x1f, 0x28, - 0x92, 0xbf, 0xf2, 0x04, 0xec, 0xe2, 0x19, 0xa0, 0x5b, 0xb1, 0x59, 0x31, 0x42, 0x84, 0x4c, 0x56, 0xb1, 0x9a, 0xce, - 0x20, 0x9f, 0xfa, 0xe2, 0x1b, 0x5b, 0x75, 0x3e, 0x6f, 0x6b, 0xaa, 0x9c, 0x3b, 0x14, 0xba, 0xbb, 0xa9, 0x3b, 0xb7, - 0x2e, 0xf2, 0xdc, 0x21, 0xe4, 0x4a, 0xc5, 0x4a, 0x4c, 0x43, 0xcd, 0x93, 0x34, 0xa3, 0xfe, 0x62, 0x9f, 0x8a, 0x1a, - 0x85, 0x53, 0xfe, 0x74, 0x0c, 0xaa, 0x70, 0x55, 0x43, 0x1c, 0x4b, 0x55, 0x3c, 0xb2, 0x41, 0xa0, 0x79, 0x75, 0xa7, - 0x92, 0x26, 0x64, 0x72, 0x23, 0x7c, 0x6a, 0x52, 0xca, 0xd3, 0xb4, 0x49, 0x2b, 0x45, 0xea, 0xe0, 0x83, 0x3a, 0xd5, - 0x78, 0x6e, 0xe6, 0xcf, 0x01, 0xcc, 0xb8, 0xba, 0xe1, 0xd7, 0x8a, 0xcb, 0xa8, 0xad, 0xcc, 0xa4, 0xfd, 0xc9, 0xd1, - 0xd8, 0x28, 0x56, 0xe3, 0x46, 0x19, 0x61, 0xa5, 0x34, 0x27, 0xc5, 0x72, 0x3c, 0xff, 0x80, 0xc1, 0x9a, 0x27, 0xb0, - 0x83, 0x89, 0x4a, 0x79, 0x1f, 0x01, 0xf1, 0x75, 0x92, 0xae, 0x12, 0x48, 0x91, 0xfe, 0xa5, 0x4b, 0xee, 0x32, 0x36, - 0x10, 0x63, 0x56, 0xcc, 0x8c, 0xfe, 0x07, 0x77, 0x49, 0x7f, 0x12, 0x02, 0xe0, 0x26, 0x9a, 0x42, 0xa7, 0xce, 0x93, - 0xab, 0x2a, 0x58, 0x5e, 0x79, 0x68, 0xc5, 0x88, 0x07, 0xff, 0xf9, 0x3c, 0x44, 0x10, 0x73, 0x4c, 0xf1, 0xf4, 0x0b, - 0xa3, 0xff, 0x08, 0xae, 0x31, 0x82, 0xd0, 0xdd, 0x3b, 0x87, 0x21, 0xdc, 0xec, 0x41, 0x06, 0xf5, 0x87, 0x3a, 0x24, - 0x6a, 0xf8, 0xd7, 0xdc, 0x83, 0xfe, 0xaf, 0x33, 0x61, 0xa9, 0xfd, 0xf4, 0x74, 0x00, 0x15, 0xbc, 0xaf, 0x78, 0x1b, - 0x11, 0xdf, 0x27, 0x7e, 0x1a, 0x0f, 0xb6, 0x4f, 0xb7, 0x60, 0xad, 0xfb, 0x50, 0x19, 0xeb, 0x2a, 0x61, 0x03, 0x01, - 0x5f, 0xa3, 0xa8, 0x3d, 0xaf, 0xdd, 0xee, 0xc1, 0x7f, 0xfa, 0x57, 0x21, 0x03, 0x26, 0x4e, 0xdf, 0x67, 0x4e, 0xd6, - 0xe8, 0x2a, 0x93, 0xe9, 0x43, 0x27, 0x7d, 0xab, 0xd3, 0x7d, 0x27, 0xfc, 0x23, 0x67, 0x16, 0x1f, 0x6e, 0xe9, 0x2b, - 0x4d, 0x8a, 0x3b, 0x60, 0x65, 0xf3, 0xa8, 0x20, 0xd4, 0xb9, 0x88, 0xbe, 0x32, 0xe5, 0x5b, 0x42, 0xcd, 0xa1, 0xb1, - 0xa4, 0x94, 0xee, 0x35, 0xf4, 0x3a, 0xad, 0xf5, 0xdb, 0x28, 0xc1, 0x98, 0xe8, 0x78, 0xf2, 0x32, 0x1e, 0x2b, 0xef, - 0xe3, 0x71, 0x23, 0x15, 0xf2, 0x00, 0x44, 0xa0, 0x62, 0xfc, 0xe9, 0xca, 0x53, 0x91, 0x5e, 0x18, 0xaf, 0x42, 0x29, - 0x28, 0x0c, 0xe8, 0x0a, 0xa4, 0x80, 0x47, 0xed, 0x89, 0xce, 0xc2, 0x2e, 0xe1, 0x1e, 0xdd, 0x04, 0x8c, 0xf5, 0xf9, - 0xaf, 0xb9, 0x97, 0x33, 0xe1, 0x0e, 0x2f, 0x06, 0xa8, 0x4d, 0xbd, 0xba, 0xfb, 0xb8, 0x56, 0xe7, 0x70, 0x08, 0x0e, - 0x56, 0x83, 0x08, 0x4e, 0xe7, 0x73, 0x47, 0xb3, 0x2c, 0x40, 0xe5, 0x64, 0x95, 0x91, 0x37, 0x4f, 0x16, 0xbd, 0xba, - 0xef, 0x2d, 0xd3, 0xb2, 0xaa, 0x83, 0x8c, 0x65, 0x61, 0x05, 0xb8, 0x3a, 0xb4, 0x7e, 0x10, 0x2e, 0x0b, 0xe7, 0x0f, - 0x84, 0x20, 0x76, 0xaf, 0xb6, 0x25, 0xd7, 0x47, 0xf5, 0xd3, 0x67, 0x6c, 0xc3, 0x25, 0xea, 0xa4, 0x33, 0x11, 0x80, - 0xd8, 0x53, 0xb3, 0x8a, 0x6e, 0x80, 0xa4, 0x4e, 0xb3, 0x8a, 0x6e, 0xa8, 0xd9, 0xc6, 0x38, 0x00, 0xca, 0x58, 0xc0, - 0xbe, 0x9b, 0x8e, 0x83, 0xf5, 0xd3, 0x58, 0x5e, 0x87, 0x56, 0x4f, 0xb7, 0xca, 0x67, 0x50, 0xb7, 0xda, 0x18, 0x13, - 0xdb, 0xcd, 0x97, 0x73, 0xfd, 0x6e, 0xb0, 0xf4, 0xed, 0xa0, 0x39, 0xa7, 0xec, 0x95, 0x2e, 0x7b, 0x6d, 0x97, 0x4d, - 0x3d, 0x77, 0x52, 0xb4, 0x1a, 0x03, 0x7a, 0x03, 0x0b, 0xd6, 0xe7, 0x22, 0xcd, 0x56, 0xa5, 0x2a, 0x01, 0x2f, 0x8c, - 0x35, 0x5b, 0xf9, 0x8d, 0xcc, 0x90, 0x84, 0x79, 0x9c, 0x89, 0xb7, 0x74, 0xaf, 0x85, 0xc9, 0x71, 0x2a, 0x92, 0x29, - 0xa1, 0x53, 0xba, 0xb3, 0x0d, 0x9d, 0xab, 0x30, 0x8a, 0x68, 0xad, 0xa4, 0xd2, 0x48, 0x60, 0x6a, 0x06, 0x28, 0x99, - 0x2b, 0x70, 0x4a, 0x97, 0xfb, 0xdf, 0x89, 0x18, 0x67, 0xbe, 0x28, 0x99, 0x01, 0xdd, 0xf2, 0xeb, 0x62, 0xd3, 0x4a, - 0x91, 0x11, 0xe6, 0xcd, 0x69, 0x7b, 0x5d, 0x1f, 0x02, 0xb9, 0x5a, 0x0e, 0x28, 0x1a, 0x07, 0x85, 0x0e, 0x97, 0x2a, - 0x01, 0xf6, 0x45, 0xe2, 0x67, 0x84, 0x2d, 0xed, 0x81, 0xdc, 0x1e, 0x9d, 0x09, 0x73, 0xc9, 0x49, 0x59, 0x76, 0x29, - 0xcd, 0xe0, 0x72, 0xe2, 0x4a, 0x70, 0x91, 0xde, 0xae, 0xa7, 0x49, 0x4b, 0xdb, 0xc7, 0x86, 0x73, 0x34, 0xb4, 0x0d, - 0xba, 0x63, 0x7f, 0x68, 0x2e, 0x16, 0xb1, 0x75, 0xb1, 0x18, 0x76, 0x66, 0x3f, 0x59, 0x2c, 0x40, 0x0e, 0x00, 0x47, - 0xdd, 0x96, 0x8f, 0xd9, 0x12, 0x38, 0xad, 0xa6, 0xd9, 0xd4, 0xdb, 0xf2, 0xfc, 0xa9, 0xea, 0xe9, 0x25, 0xaf, 0x9e, - 0x0a, 0x33, 0x16, 0x5b, 0x5e, 0x3d, 0xb5, 0x8e, 0x9c, 0xfc, 0xa9, 0x50, 0xa2, 0x75, 0x01, 0xcd, 0xc0, 0x6b, 0x0a, - 0x18, 0xb1, 0x64, 0x32, 0xa5, 0x8a, 0x3c, 0xee, 0x4d, 0xb7, 0x6a, 0xf0, 0x82, 0xc2, 0x21, 0x90, 0xd2, 0xe9, 0x57, - 0xcf, 0x98, 0x7e, 0xef, 0xea, 0x59, 0x87, 0xac, 0x6d, 0x98, 0x2e, 0xb7, 0xc3, 0x64, 0x50, 0xfa, 0x4f, 0xcd, 0xc4, - 0xb8, 0xb2, 0x26, 0x09, 0x20, 0xfe, 0x8d, 0xfd, 0x0e, 0x29, 0xdc, 0xbc, 0xbf, 0x1c, 0xc6, 0x8f, 0xbc, 0x1f, 0x23, - 0x7b, 0x92, 0x66, 0x88, 0x35, 0x93, 0x0a, 0xb9, 0xfb, 0x6a, 0xfd, 0x63, 0x62, 0x37, 0xd9, 0x03, 0x0b, 0x40, 0x6c, - 0x4d, 0x5b, 0xdd, 0xf2, 0x7e, 0xdf, 0x33, 0x45, 0x80, 0x1f, 0x94, 0x7f, 0x72, 0x67, 0x48, 0x06, 0x65, 0xd7, 0x0d, - 0x21, 0x1e, 0x94, 0x4d, 0xd3, 0x5e, 0x6f, 0x07, 0x67, 0x1e, 0xab, 0xeb, 0xb4, 0xb3, 0xb8, 0x5a, 0x64, 0x90, 0x56, - 0x1f, 0xb2, 0xd3, 0xcc, 0x3e, 0x3b, 0x59, 0x2a, 0xdd, 0xef, 0x43, 0x44, 0xdc, 0x49, 0xd6, 0xf6, 0xdb, 0x2d, 0xb8, - 0x86, 0x93, 0x41, 0xe8, 0xca, 0xde, 0x2e, 0xa3, 0x8d, 0x0b, 0x71, 0xda, 0x33, 0x9d, 0x2f, 0xf8, 0xf2, 0x28, 0xed, - 0x3c, 0x38, 0xd5, 0x13, 0x7d, 0x6e, 0xba, 0xab, 0x4c, 0xae, 0x75, 0x58, 0x8d, 0x41, 0x6d, 0x16, 0xb6, 0x70, 0x17, - 0xb6, 0xd1, 0x41, 0x6b, 0x5f, 0x16, 0xfc, 0x53, 0x06, 0xe0, 0x4b, 0xcf, 0x96, 0x5d, 0xaf, 0x49, 0xab, 0xd7, 0x32, - 0x0a, 0xb1, 0xa5, 0xed, 0xd5, 0xa7, 0xa3, 0x7c, 0xdc, 0x9c, 0x51, 0x5c, 0xc8, 0x51, 0x7e, 0xf4, 0x1a, 0xa2, 0xae, - 0x75, 0x1d, 0x17, 0x8b, 0x0e, 0x37, 0xae, 0xba, 0xed, 0xc6, 0xf5, 0x23, 0xe2, 0xad, 0xd1, 0x26, 0x85, 0x5a, 0x19, - 0x3b, 0x82, 0x97, 0x55, 0xc3, 0x21, 0x13, 0xc3, 0xa1, 0x84, 0x4c, 0x7d, 0xec, 0xde, 0xd0, 0xb4, 0xcf, 0x4f, 0x5b, - 0x3f, 0x62, 0xa9, 0x71, 0x14, 0x1b, 0xde, 0xf9, 0x3b, 0x8f, 0xad, 0x71, 0x25, 0x5f, 0x06, 0xb3, 0x5d, 0x41, 0xb5, - 0x35, 0xde, 0xb0, 0x57, 0xf1, 0x1f, 0x72, 0xa9, 0xe4, 0x6f, 0x7f, 0x86, 0x6b, 0x78, 0x6b, 0x4b, 0x07, 0x4d, 0x35, - 0xab, 0x98, 0xb9, 0x17, 0x9c, 0x7e, 0xdc, 0xbd, 0x22, 0x18, 0xfc, 0x9e, 0x8e, 0x82, 0x5c, 0x2c, 0xd5, 0x1a, 0x50, - 0x90, 0x4e, 0xec, 0x98, 0xca, 0x02, 0xc3, 0x00, 0xde, 0x90, 0x01, 0xf2, 0x98, 0xc2, 0xdd, 0x50, 0xe1, 0x85, 0xbf, - 0xe4, 0x64, 0x97, 0xc0, 0xb6, 0x66, 0x7c, 0xcc, 0x70, 0x07, 0x21, 0xff, 0x08, 0xb6, 0x62, 0x6b, 0x76, 0xc7, 0x16, - 0x0c, 0xc9, 0xc6, 0x71, 0x18, 0x63, 0x3e, 0x9e, 0xc4, 0x37, 0x62, 0x12, 0x0f, 0x78, 0x84, 0x8e, 0x11, 0x1b, 0x5e, - 0xcf, 0x62, 0x39, 0x80, 0x6c, 0xc5, 0x95, 0x0e, 0x08, 0xa1, 0xb1, 0xa1, 0x25, 0xaf, 0x0b, 0x83, 0x8b, 0x1d, 0xfb, - 0x2c, 0x47, 0x91, 0x8c, 0x43, 0xb0, 0x68, 0x55, 0x03, 0x0b, 0x13, 0xbb, 0xe3, 0xc5, 0x6c, 0x3d, 0xc7, 0x7f, 0x8e, - 0x47, 0x04, 0xc0, 0x0e, 0x0e, 0x0d, 0x5b, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x2b, 0xcb, 0xd3, 0x85, 0xdd, 0xf3, 0xb7, - 0x7c, 0xcc, 0x2e, 0x7f, 0xf4, 0x20, 0x72, 0xf6, 0xf2, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xbb, 0xd4, 0xcb, 0xd9, 0x1d, - 0x51, 0x10, 0xde, 0x81, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0xbe, 0xe5, 0x0b, 0x8c, 0x15, 0xbb, 0x48, 0x97, 0x1e, 0x66, - 0x84, 0xda, 0xd3, 0xf9, 0xb2, 0x51, 0x93, 0x70, 0x7b, 0xb3, 0x9c, 0x0c, 0x06, 0x5b, 0x7f, 0xcf, 0x37, 0xc0, 0x07, - 0x73, 0xf9, 0xa3, 0xb7, 0xa7, 0x72, 0xe1, 0x3f, 0xaf, 0xb3, 0xe4, 0xbd, 0xcf, 0xde, 0x0e, 0xf8, 0x02, 0xf0, 0x96, - 0xd0, 0x81, 0xeb, 0xde, 0x67, 0x12, 0xaf, 0xed, 0xad, 0xbe, 0x46, 0x20, 0x91, 0x2f, 0x00, 0x23, 0x26, 0xe6, 0xf7, - 0x5b, 0x88, 0xc0, 0x48, 0xc0, 0xb7, 0x55, 0x7b, 0xc4, 0xef, 0xb8, 0x01, 0xfc, 0xca, 0x7c, 0xf6, 0xc0, 0x43, 0xfd, - 0x33, 0xf1, 0xd9, 0x2d, 0x7f, 0xcf, 0x9f, 0x7b, 0x52, 0x92, 0x2e, 0x67, 0xef, 0xe7, 0x70, 0x3d, 0x94, 0xf2, 0x74, - 0x48, 0x3f, 0x1b, 0x83, 0x01, 0x84, 0x42, 0xe6, 0xad, 0x07, 0xac, 0x49, 0x21, 0xfe, 0x05, 0x7c, 0x3b, 0x4a, 0xd8, - 0xbc, 0xf5, 0x76, 0xbe, 0x96, 0x37, 0x6f, 0xbd, 0x07, 0x9f, 0xa2, 0x00, 0xab, 0xa0, 0x94, 0x05, 0x56, 0x41, 0xd8, - 0x68, 0x23, 0x8c, 0x81, 0xab, 0x77, 0x8d, 0xa1, 0xae, 0xe7, 0x88, 0x6d, 0x2b, 0x7d, 0x17, 0xbe, 0x83, 0x0c, 0xf8, - 0xe0, 0x75, 0x51, 0x12, 0x7d, 0x4e, 0x4d, 0x91, 0xb4, 0xee, 0xb9, 0xdf, 0x5a, 0x77, 0xb4, 0xa6, 0xd4, 0x47, 0x6e, - 0xc6, 0xc7, 0x63, 0xfd, 0x5c, 0x68, 0x91, 0x60, 0x0a, 0x1a, 0xd7, 0xa0, 0x2d, 0x40, 0xd0, 0xe7, 0x01, 0xb2, 0x96, - 0x14, 0x0b, 0xbe, 0xfd, 0x15, 0x62, 0xf0, 0xca, 0xf4, 0xce, 0xe5, 0x2a, 0x23, 0x61, 0x7b, 0xe1, 0xd7, 0xc3, 0xda, - 0x9f, 0x38, 0xb5, 0xb0, 0xb4, 0x9a, 0x83, 0xfa, 0xa9, 0x2d, 0xc7, 0xa9, 0xaa, 0xfd, 0x4b, 0x92, 0x54, 0xbb, 0x4a, - 0xcb, 0xe9, 0xbd, 0x7d, 0xd3, 0x65, 0x82, 0x8d, 0xfd, 0x80, 0xaa, 0x23, 0xab, 0x61, 0xf7, 0x85, 0xfa, 0xa2, 0xa7, - 0x64, 0x42, 0xf3, 0x51, 0x45, 0xf3, 0xec, 0x7e, 0xb3, 0xa3, 0xfe, 0xd3, 0xeb, 0xa1, 0x08, 0x90, 0xac, 0xd2, 0x62, - 0x29, 0x72, 0x36, 0xf6, 0xd3, 0x61, 0x92, 0xa9, 0xf0, 0x82, 0x74, 0x74, 0xf7, 0x1b, 0xf7, 0xb7, 0xdc, 0x40, 0xd6, - 0x68, 0xd5, 0x06, 0x63, 0xa5, 0x68, 0x19, 0xac, 0x6f, 0xc6, 0xfd, 0xbe, 0xb8, 0x19, 0x4f, 0x45, 0x50, 0x03, 0x71, - 0x91, 0x78, 0x3e, 0x9e, 0xd6, 0xc4, 0x92, 0xda, 0x15, 0x18, 0xa3, 0xc7, 0x55, 0x51, 0xfb, 0xd4, 0xcf, 0x21, 0x14, - 0xa9, 0xd6, 0xcc, 0xb1, 0xc6, 0x8d, 0x11, 0x71, 0x87, 0x95, 0x6b, 0xa7, 0xf6, 0x3a, 0x00, 0xcb, 0xab, 0x71, 0x41, - 0xd8, 0x26, 0xa7, 0xce, 0x05, 0xac, 0x46, 0x43, 0xaa, 0xdd, 0x70, 0xeb, 0x65, 0xe7, 0x37, 0x8f, 0x13, 0x5b, 0x1b, - 0xe1, 0x96, 0x02, 0xca, 0x28, 0xbf, 0xb1, 0x9c, 0xb0, 0x3b, 0xd5, 0x3b, 0x52, 0xb5, 0x23, 0xce, 0x5c, 0xc0, 0x2a, - 0xc3, 0x53, 0xab, 0x6f, 0x62, 0x70, 0x22, 0xe4, 0xad, 0x74, 0xbc, 0xf6, 0x23, 0xee, 0x57, 0xf7, 0x75, 0xaf, 0x04, - 0x3f, 0x09, 0x79, 0xfd, 0x96, 0x77, 0x00, 0x58, 0xf1, 0x21, 0x2f, 0xa6, 0x85, 0xa3, 0x75, 0x19, 0x94, 0x01, 0x22, - 0x34, 0x03, 0xa0, 0x93, 0xab, 0x83, 0x28, 0x0d, 0x5c, 0x71, 0x87, 0x08, 0x3f, 0x8d, 0x9e, 0x56, 0xcf, 0xc3, 0xa7, - 0xf9, 0x34, 0xbc, 0xaa, 0x82, 0xe8, 0x2a, 0x0f, 0xa2, 0xa7, 0xf9, 0x4d, 0xf8, 0xb4, 0x9a, 0x46, 0x57, 0x55, 0x10, - 0x5e, 0xe5, 0x8d, 0x7d, 0xd7, 0xee, 0xee, 0x09, 0x79, 0xdb, 0xd5, 0x1f, 0xb9, 0x54, 0xf6, 0x94, 0xe9, 0xe5, 0x65, - 0xad, 0x57, 0x6a, 0xb7, 0xb9, 0x5e, 0xa3, 0x66, 0xea, 0xa3, 0xec, 0x2f, 0xb6, 0xb1, 0xf0, 0x64, 0x0e, 0xa1, 0xcf, - 0x48, 0x8b, 0xb9, 0xc7, 0xb9, 0xde, 0x1c, 0x48, 0x61, 0x60, 0xc4, 0xa4, 0x92, 0x91, 0xd3, 0x0b, 0x5c, 0x84, 0x72, - 0xc4, 0xb0, 0x96, 0xae, 0xf6, 0x59, 0x97, 0xde, 0x40, 0x5d, 0x53, 0xec, 0x6b, 0xc8, 0xc0, 0x8b, 0xa6, 0xd7, 0xc1, - 0x18, 0x90, 0x23, 0xf0, 0x8e, 0xcf, 0x96, 0x70, 0x60, 0x6e, 0x00, 0xfa, 0xe6, 0x51, 0x5f, 0x97, 0x15, 0xdf, 0xa8, - 0xbe, 0x99, 0x6e, 0x46, 0x4a, 0xf9, 0xb1, 0xe6, 0xab, 0xab, 0x67, 0xec, 0x8e, 0x6b, 0x54, 0x94, 0x5f, 0xf4, 0x62, - 0xbd, 0x07, 0xae, 0xba, 0x5f, 0xe0, 0x36, 0x8b, 0xc7, 0xae, 0x3c, 0x60, 0xd9, 0x8e, 0x3d, 0xb0, 0x5b, 0xf6, 0x9e, - 0x3d, 0x61, 0x6f, 0xd8, 0x17, 0xf6, 0x13, 0xaa, 0x36, 0x94, 0x90, 0xe7, 0x2f, 0xf8, 0x9d, 0x34, 0x3d, 0x4a, 0x54, - 0xb2, 0x07, 0xdb, 0x4c, 0x33, 0xdc, 0xb2, 0xf7, 0x7c, 0x31, 0x5c, 0xb3, 0x37, 0x90, 0x0d, 0x65, 0xe2, 0xc1, 0x9a, - 0xfd, 0xc4, 0x15, 0x88, 0x99, 0x3e, 0x0b, 0x4b, 0x4b, 0x54, 0x34, 0x65, 0xa2, 0x0c, 0xfd, 0x86, 0xe3, 0x8b, 0xec, - 0x27, 0x2c, 0x42, 0x7e, 0x66, 0xb8, 0x66, 0x0f, 0x7c, 0x31, 0x58, 0xb3, 0xf7, 0xda, 0x40, 0x34, 0xd8, 0xba, 0xa5, - 0x11, 0x92, 0x95, 0x2e, 0x4b, 0x4a, 0xd3, 0x3b, 0xfb, 0x1a, 0xb8, 0x65, 0xb7, 0x58, 0xbb, 0x27, 0x58, 0x34, 0x0a, - 0xfc, 0x83, 0x35, 0xfb, 0xc2, 0x25, 0x80, 0x9a, 0x5b, 0x9e, 0xf4, 0x0a, 0xd5, 0x05, 0xd2, 0xfd, 0xe0, 0x09, 0xa7, - 0x17, 0xd9, 0x17, 0x2c, 0x83, 0xbe, 0x32, 0x5c, 0xb3, 0x1d, 0xd6, 0xee, 0xd6, 0x58, 0xb6, 0xac, 0xea, 0x49, 0x44, - 0x60, 0x14, 0x54, 0x4a, 0xcb, 0xbf, 0x11, 0xcb, 0xa6, 0x6e, 0x1a, 0xd4, 0x86, 0xfe, 0x7c, 0x30, 0xfa, 0x0f, 0x5f, - 0xbf, 0xfb, 0xc1, 0x2b, 0xf5, 0xb5, 0xf7, 0x17, 0xc7, 0xb5, 0xb2, 0x44, 0xd7, 0xca, 0x5f, 0x79, 0x39, 0xfb, 0x65, - 0x3e, 0xd1, 0xb5, 0xa4, 0x1d, 0x86, 0x7c, 0x4d, 0x67, 0xbf, 0x74, 0x38, 0x5b, 0xfe, 0xea, 0xfb, 0x8d, 0xe9, 0x62, - 0xf5, 0x59, 0xdd, 0xbb, 0x0f, 0x83, 0x6d, 0xe3, 0xd4, 0x7b, 0x7f, 0xbe, 0xde, 0xd8, 0xcc, 0x5a, 0x7b, 0x66, 0xfe, - 0x0f, 0x57, 0x7a, 0x87, 0x43, 0x77, 0xcb, 0x77, 0xc3, 0xad, 0x3d, 0x0a, 0xf2, 0xfb, 0x52, 0x69, 0x9c, 0xd5, 0xfc, - 0x85, 0x97, 0x77, 0x49, 0xb1, 0x80, 0x68, 0xf4, 0xc9, 0x48, 0x42, 0xd7, 0xcc, 0xc4, 0x33, 0xc4, 0x57, 0x19, 0x20, - 0x73, 0x81, 0x68, 0x76, 0xcf, 0xc7, 0x93, 0xfb, 0x9b, 0x78, 0x72, 0x3f, 0xe0, 0x9f, 0x4c, 0x0b, 0xda, 0x8b, 0xed, - 0xde, 0x67, 0xbf, 0xf2, 0xc2, 0x5e, 0x8e, 0xbf, 0xf8, 0xec, 0x9d, 0x70, 0x57, 0xe8, 0x2f, 0x3e, 0xfb, 0x22, 0xf8, - 0xaf, 0x23, 0x4d, 0x94, 0xc1, 0xbe, 0xd4, 0xfc, 0xd7, 0x11, 0x32, 0x7e, 0xb0, 0xcf, 0x82, 0xbf, 0x03, 0xdf, 0xef, - 0x2a, 0x41, 0xab, 0xf8, 0xe7, 0x5a, 0xfd, 0x7c, 0x2f, 0xe3, 0x72, 0xe0, 0x4d, 0x68, 0x05, 0xbd, 0x79, 0x57, 0xcb, - 0x9f, 0xc4, 0xc3, 0x91, 0xaa, 0xa7, 0x86, 0x7f, 0x16, 0x8b, 0x59, 0xd4, 0x27, 0xe9, 0x54, 0xde, 0xe4, 0x2d, 0xcf, - 0xa4, 0x75, 0xf9, 0x1e, 0x42, 0x81, 0xdf, 0xda, 0x10, 0x05, 0x7b, 0x8e, 0x1b, 0xc1, 0x5b, 0x06, 0xf0, 0x91, 0xd9, - 0x74, 0xc7, 0x6f, 0xf9, 0x13, 0xfe, 0x85, 0xef, 0x83, 0x07, 0xfe, 0x9e, 0xbf, 0xe1, 0x3f, 0xf1, 0x3d, 0x5b, 0x4a, - 0xb4, 0xd3, 0x7a, 0x77, 0x1d, 0xec, 0x58, 0xbd, 0xbf, 0x0e, 0x1e, 0x58, 0xbd, 0x7b, 0x16, 0xdc, 0xb2, 0x7a, 0xff, - 0x2c, 0x78, 0xcf, 0x76, 0xd7, 0xc1, 0x13, 0xb6, 0xbf, 0x0e, 0xde, 0xb0, 0xdd, 0xb3, 0xe0, 0x0b, 0xdb, 0x3f, 0x0b, - 0x7e, 0x92, 0x18, 0x0f, 0x5f, 0x84, 0xe4, 0x38, 0xf9, 0x52, 0x33, 0xc3, 0xa7, 0x1b, 0x7c, 0x16, 0xd6, 0x2f, 0xaa, - 0x63, 0xf0, 0xb9, 0x66, 0xba, 0xc5, 0x81, 0x10, 0x4c, 0xb7, 0x37, 0xb8, 0xa3, 0x27, 0xa6, 0x55, 0x41, 0x2a, 0x58, - 0x57, 0x3b, 0x83, 0x45, 0xdd, 0xb4, 0xce, 0x64, 0xc7, 0x2f, 0x31, 0xee, 0xf0, 0x4b, 0x5c, 0xb0, 0x65, 0xd3, 0xe9, - 0xa4, 0x73, 0xfe, 0x24, 0xd0, 0x9b, 0xbf, 0xde, 0xf5, 0x73, 0xe9, 0x3b, 0x53, 0x34, 0x5c, 0x6b, 0x8d, 0x5b, 0x3b, - 0x7d, 0x68, 0xed, 0xf4, 0x4c, 0xaa, 0xd0, 0x22, 0x16, 0x95, 0x45, 0x55, 0x21, 0x93, 0x78, 0x90, 0x69, 0x7d, 0x5a, - 0xc2, 0x48, 0x91, 0x09, 0x68, 0xf4, 0x05, 0x1d, 0x03, 0x15, 0x59, 0x14, 0xd8, 0x92, 0x6f, 0x07, 0x09, 0xdb, 0xf0, - 0x78, 0x3a, 0x4c, 0x82, 0x25, 0x5b, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x56, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, - 0x79, 0x6f, 0x9d, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x96, 0xeb, 0x0d, 0x7e, 0xe7, 0xec, 0xe7, 0x1b, 0xb5, 0xbf, 0x83, - 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xcf, 0xed, 0x2d, 0x7d, 0x67, - 0xb6, 0xe9, 0x7f, 0xb7, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xd6, 0x9f, 0x3c, - 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xcf, 0x3f, 0x8d, 0x76, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, - 0x68, 0xef, 0xe4, 0xb9, 0xbd, 0x23, 0xee, 0x78, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, - 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xf3, 0xd9, 0xa7, 0xf9, 0x64, 0xc7, 0x4f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, - 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x7b, 0x7e, 0xba, 0x89, 0x0f, 0xff, 0xed, - 0x4a, 0xef, 0xbf, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, + 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0x97, 0x13, 0x71, 0x4e, 0x97, 0x24, 0xf5, 0x54, 0x42, + 0x49, 0x08, 0x76, 0xe9, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, + 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xab, + 0x78, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8a, 0x4d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, + 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xac, 0xe4, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, + 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0x1f, 0x55, 0x36, 0x76, 0x07, 0xe4, 0x90, 0x64, 0xb2, 0xb8, 0x1b, 0xdd, + 0x8a, 0x65, 0x51, 0x8a, 0x9f, 0xb1, 0x1e, 0xae, 0xd9, 0xc2, 0x7d, 0x06, 0x84, 0xf6, 0x13, 0xa5, 0xbd, 0x89, 0x34, + 0x41, 0xf7, 0x1d, 0x5b, 0x01, 0xc8, 0x00, 0x8a, 0xba, 0xda, 0xad, 0xcf, 0xf9, 0x39, 0x92, 0x66, 0x38, 0x8c, 0x6e, + 0x9f, 0xde, 0x05, 0x77, 0x83, 0x4b, 0xd4, 0x4a, 0x5f, 0xb2, 0xb8, 0x85, 0x41, 0xb5, 0x37, 0x4b, 0x38, 0xa8, 0x99, + 0xb5, 0x36, 0x02, 0xc1, 0x64, 0x0f, 0x05, 0x15, 0x73, 0x05, 0xfb, 0xa0, 0x60, 0x2d, 0x79, 0x1d, 0x1c, 0x6e, 0xed, + 0xcb, 0x4a, 0x71, 0xf1, 0xfc, 0x22, 0x69, 0x5d, 0x58, 0xca, 0x8b, 0xe7, 0x0d, 0x18, 0x5c, 0x8e, 0xb0, 0xa9, 0x2a, + 0x7f, 0xb2, 0x01, 0xd0, 0xad, 0x90, 0x22, 0x5e, 0x94, 0xc2, 0xb6, 0x95, 0xcf, 0x9c, 0xb0, 0xc1, 0x86, 0x3d, 0xc0, + 0xbd, 0x32, 0x28, 0x19, 0x5c, 0x88, 0x71, 0xbb, 0xd9, 0x05, 0xb8, 0x82, 0xa1, 0x30, 0xb6, 0xe6, 0x6f, 0x32, 0x2f, + 0x52, 0x02, 0x6e, 0x86, 0x28, 0x5f, 0x1b, 0x38, 0x99, 0xf4, 0xe4, 0x5a, 0xb2, 0x18, 0xb0, 0xa0, 0xc1, 0x77, 0xd4, + 0xfa, 0x3b, 0x93, 0x7f, 0xe3, 0xe9, 0xa1, 0x1f, 0x7c, 0xce, 0xbc, 0xa5, 0xcf, 0xde, 0x54, 0x32, 0x5a, 0x93, 0x44, + 0x79, 0xf5, 0x70, 0x09, 0x72, 0xc3, 0x72, 0xf4, 0xc0, 0x96, 0x20, 0x4e, 0x2c, 0x47, 0x09, 0x65, 0x74, 0x85, 0x7b, + 0x95, 0xd9, 0x32, 0x11, 0x48, 0x71, 0x60, 0x29, 0xe5, 0xde, 0x62, 0x1d, 0x2c, 0x71, 0x7f, 0x22, 0xb9, 0x80, 0x92, + 0x07, 0x50, 0xae, 0x14, 0x10, 0xf0, 0xe9, 0x00, 0xca, 0x97, 0xf2, 0x22, 0xfc, 0x89, 0x13, 0x35, 0x58, 0x8e, 0x1e, + 0x1a, 0xf6, 0xa3, 0x17, 0x5a, 0xf6, 0x87, 0x3b, 0xad, 0x69, 0x58, 0xf1, 0x3b, 0x98, 0x16, 0x13, 0xb7, 0x2f, 0x57, + 0x76, 0x55, 0x7c, 0xb6, 0x52, 0x67, 0x37, 0x35, 0x24, 0x61, 0x5f, 0x91, 0x55, 0x80, 0x83, 0x55, 0x11, 0xf7, 0x2c, + 0xcb, 0x7d, 0x18, 0xfd, 0xb9, 0x49, 0x4b, 0x61, 0xa1, 0x4a, 0xfa, 0xfb, 0xa6, 0x14, 0x48, 0x65, 0xa2, 0x13, 0x2d, + 0x04, 0x57, 0x60, 0x10, 0xb8, 0x17, 0x79, 0x0d, 0x80, 0x31, 0xe0, 0x52, 0xa0, 0x2c, 0xdb, 0x12, 0x42, 0xaa, 0xfb, + 0x19, 0xa8, 0xed, 0xc4, 0x7d, 0x1a, 0x91, 0xb5, 0x10, 0x7d, 0x15, 0x8c, 0x99, 0xf3, 0x52, 0xba, 0xc5, 0xa6, 0xab, + 0xcd, 0xea, 0x06, 0x9d, 0x4b, 0x5b, 0x6e, 0x7e, 0xc2, 0x16, 0x6b, 0x05, 0xca, 0x26, 0x24, 0x6d, 0xe7, 0x3c, 0x47, + 0xd9, 0x84, 0x96, 0xf6, 0x9e, 0x7a, 0x54, 0xa8, 0x4e, 0xb6, 0x5e, 0xaa, 0xa6, 0x16, 0x61, 0xb5, 0xb8, 0xa8, 0xfc, + 0x00, 0x74, 0x53, 0x69, 0xf5, 0xb2, 0xae, 0xd1, 0x14, 0x6a, 0xb5, 0x70, 0xdc, 0x68, 0x67, 0xd3, 0x65, 0x7a, 0x87, + 0x38, 0xab, 0xd2, 0x0e, 0xfd, 0x7d, 0xa6, 0x5d, 0x2f, 0x3b, 0xfa, 0xcd, 0xb8, 0xba, 0xc0, 0x85, 0xd8, 0x80, 0xcf, + 0xb9, 0xbf, 0xbc, 0xde, 0xf3, 0xb8, 0xe7, 0x1f, 0x0e, 0xc8, 0x9e, 0xd4, 0xfe, 0x50, 0x7d, 0xec, 0x0a, 0x86, 0x2c, + 0x8c, 0x52, 0x7f, 0x91, 0xf2, 0xde, 0x13, 0x1c, 0xf7, 0xcf, 0x55, 0x8f, 0xfd, 0x98, 0xf1, 0x7d, 0x5d, 0x6c, 0xa2, + 0x84, 0xa2, 0x1a, 0x7a, 0xab, 0x62, 0x53, 0x89, 0xb8, 0x78, 0xc8, 0x7b, 0x0c, 0x93, 0x61, 0x2c, 0x64, 0x2a, 0xfc, + 0x29, 0x53, 0xc1, 0x23, 0x84, 0x12, 0x37, 0xeb, 0x1e, 0x69, 0x37, 0x21, 0x4e, 0xa9, 0x16, 0xa5, 0x4c, 0xc6, 0xbf, + 0xf5, 0x13, 0x28, 0xcf, 0x29, 0x5a, 0xa6, 0x1f, 0x15, 0x2e, 0xd3, 0x37, 0xeb, 0xe3, 0xd2, 0x33, 0x11, 0xea, 0xcc, + 0xc5, 0xa6, 0xd6, 0xe9, 0x18, 0x3b, 0xa5, 0x53, 0x1b, 0xf6, 0xa5, 0x52, 0x5c, 0x56, 0x14, 0xfe, 0x8d, 0x44, 0x56, + 0x3d, 0x23, 0x8e, 0xff, 0x2b, 0x6b, 0x9f, 0x61, 0x15, 0xf8, 0x65, 0x20, 0xef, 0x17, 0x00, 0x1f, 0xd7, 0x75, 0x99, + 0xde, 0x6e, 0x80, 0x36, 0x84, 0x86, 0xbf, 0xe7, 0x23, 0x03, 0xa6, 0xfb, 0x08, 0x67, 0x48, 0x0f, 0x75, 0xce, 0xe9, + 0xac, 0x4c, 0xe7, 0x5c, 0x85, 0xb5, 0x04, 0x7b, 0x39, 0x69, 0x72, 0xb9, 0x2e, 0x41, 0xcd, 0x04, 0x6e, 0x1f, 0xda, + 0x23, 0x42, 0xa8, 0x4d, 0x59, 0x4d, 0x2f, 0xa1, 0xe6, 0x9d, 0x9c, 0x76, 0x34, 0x29, 0xc1, 0x55, 0x43, 0x67, 0xe5, + 0xfa, 0xaf, 0xc3, 0xa1, 0x77, 0x9b, 0x15, 0xd1, 0x1f, 0x3d, 0xf4, 0x77, 0xdc, 0xde, 0xa4, 0x5f, 0x20, 0x5a, 0xc6, + 0xfa, 0x1b, 0x32, 0xa0, 0xe3, 0xc9, 0xf0, 0xb6, 0xd8, 0xf6, 0xd8, 0x17, 0xd4, 0x60, 0xe9, 0xeb, 0xc7, 0x1f, 0x20, + 0xa1, 0xea, 0xda, 0x17, 0x16, 0x4f, 0x98, 0xa7, 0x44, 0xdb, 0xc2, 0x87, 0xb0, 0xd0, 0x2f, 0x10, 0x19, 0x09, 0xe1, + 0xa6, 0xb2, 0x7b, 0x94, 0xb4, 0x0b, 0x7d, 0xe9, 0x6b, 0xd9, 0x57, 0xbe, 0x73, 0x01, 0xb0, 0xb2, 0xcf, 0x6d, 0xb8, + 0x27, 0xfd, 0x29, 0xd5, 0x87, 0xed, 0x6f, 0xc9, 0x02, 0x0a, 0x2d, 0xac, 0xa7, 0x72, 0x76, 0xae, 0x4b, 0x9e, 0x66, + 0xd3, 0xfd, 0x1a, 0xf6, 0xa8, 0x7b, 0xf4, 0x9a, 0x0a, 0xce, 0x2f, 0xcd, 0xe8, 0xfd, 0xd3, 0x50, 0xa8, 0x8e, 0x3a, + 0x77, 0x90, 0x75, 0x69, 0x5d, 0x72, 0x7e, 0xb3, 0x72, 0x47, 0x61, 0x7e, 0x1f, 0x82, 0x67, 0x58, 0xf7, 0xee, 0xe2, + 0xbc, 0xf7, 0x67, 0x6b, 0x8e, 0xfc, 0x98, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0xf6, 0xdb, + 0x20, 0x87, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, + 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xdb, 0x20, 0xd7, 0x5d, 0x30, 0xcd, 0x91, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x92, 0x0a, + 0xcd, 0x22, 0x6d, 0x95, 0x8c, 0x7f, 0x47, 0xda, 0x4c, 0xc9, 0x1e, 0x5b, 0x03, 0xef, 0x25, 0x28, 0x27, 0xc3, 0x14, + 0xc3, 0x77, 0x7c, 0xbd, 0xf3, 0x98, 0x7b, 0xce, 0x31, 0xdb, 0xa4, 0xec, 0x08, 0x26, 0xc9, 0xc6, 0x37, 0x14, 0x6f, + 0xf8, 0xfe, 0xb6, 0x12, 0x25, 0x80, 0x5e, 0x16, 0xfc, 0x85, 0xb4, 0xb9, 0x42, 0xb7, 0xbb, 0x77, 0x94, 0xc2, 0x2f, + 0x79, 0x79, 0x38, 0x6c, 0x53, 0x2f, 0x84, 0xce, 0x17, 0xf1, 0x3b, 0x30, 0x87, 0x31, 0xc4, 0x66, 0x04, 0x08, 0x73, + 0x7c, 0x40, 0x1d, 0xac, 0x1f, 0x01, 0x68, 0x9c, 0x40, 0x01, 0x46, 0x5f, 0x6d, 0x0b, 0xfa, 0x96, 0x17, 0x17, 0x11, + 0xa2, 0x46, 0x01, 0x26, 0x4a, 0x9a, 0xc5, 0x30, 0x1c, 0xe8, 0xfc, 0xbe, 0xb9, 0xad, 0x4b, 0x81, 0x43, 0xef, 0x58, + 0x86, 0xff, 0xfe, 0x3f, 0xd6, 0x96, 0x56, 0x95, 0xed, 0xd6, 0x38, 0xcd, 0xfc, 0x6f, 0xb7, 0x85, 0xbe, 0xff, 0x4a, + 0x28, 0x9e, 0x77, 0xbc, 0x6e, 0xbf, 0x83, 0xe8, 0x7d, 0xdd, 0xca, 0xbb, 0x52, 0xbb, 0x61, 0xa6, 0xfc, 0x21, 0xcd, + 0xe3, 0xe2, 0x61, 0x14, 0xb7, 0x8e, 0xbc, 0x49, 0x7a, 0xce, 0xf9, 0xbb, 0xaa, 0xdf, 0xf7, 0xde, 0x01, 0x19, 0xef, + 0x2b, 0x61, 0x1c, 0x31, 0x89, 0x83, 0x6f, 0x2f, 0x46, 0xd1, 0xa6, 0x84, 0x0d, 0xb9, 0x7d, 0x5a, 0x82, 0x66, 0xa6, + 0xdf, 0x47, 0x89, 0xd2, 0x9a, 0xef, 0x7f, 0x93, 0xf3, 0xfd, 0x95, 0x90, 0x37, 0x2b, 0xf9, 0xe1, 0xa3, 0x15, 0x06, + 0xbe, 0xc7, 0xe9, 0x17, 0xd1, 0x63, 0x77, 0xa5, 0x0f, 0xdf, 0x95, 0x96, 0x3e, 0xab, 0xa8, 0x7f, 0xa0, 0xa2, 0xe6, + 0x95, 0x18, 0x11, 0xf1, 0x20, 0x68, 0x67, 0xdb, 0xa5, 0x76, 0x2d, 0x41, 0xbb, 0x60, 0x53, 0xd8, 0xbf, 0x1f, 0x1d, + 0xf2, 0x7e, 0xff, 0x63, 0xee, 0xb5, 0x78, 0xdd, 0x75, 0x68, 0xca, 0x4f, 0x85, 0x87, 0x10, 0xc0, 0x5a, 0x06, 0xca, + 0x38, 0xc2, 0xa4, 0x8b, 0xbc, 0x46, 0xd9, 0x74, 0x22, 0xf0, 0x31, 0xcb, 0xae, 0x9c, 0x64, 0x1a, 0x60, 0x46, 0x35, + 0x85, 0x99, 0x00, 0x23, 0xf5, 0x11, 0xeb, 0xa6, 0xa7, 0x55, 0x68, 0xf9, 0x1a, 0x82, 0x75, 0x91, 0x65, 0x1c, 0xc5, + 0x4c, 0x00, 0xb0, 0xf9, 0x08, 0xf2, 0x15, 0x5d, 0x1d, 0x92, 0x56, 0xaa, 0xbc, 0x5f, 0x67, 0x44, 0x46, 0x93, 0x10, + 0xcd, 0x6f, 0xe1, 0x81, 0x7d, 0xdb, 0xcc, 0xa8, 0x52, 0xcf, 0xa8, 0xca, 0x67, 0x38, 0x2c, 0x85, 0x63, 0xc4, 0xff, + 0x7b, 0xaa, 0x7a, 0x44, 0xa0, 0x57, 0x65, 0x5a, 0x45, 0x45, 0x9e, 0x8b, 0x08, 0x11, 0xaa, 0xa5, 0x73, 0x38, 0xf4, + 0x63, 0xbf, 0x8f, 0x03, 0x61, 0x5e, 0xfc, 0xe9, 0xb1, 0xae, 0xfc, 0xa9, 0xc0, 0xb5, 0x92, 0x02, 0xa7, 0xa2, 0x46, + 0x88, 0x10, 0xde, 0x9f, 0xc0, 0xb3, 0x9a, 0xfa, 0x7e, 0x63, 0x99, 0xe8, 0xfe, 0x99, 0x01, 0xe5, 0x0f, 0xc8, 0xd7, + 0x95, 0x14, 0x67, 0xea, 0xe4, 0x31, 0x71, 0xc6, 0x01, 0x88, 0xf9, 0xba, 0x44, 0xa3, 0xb1, 0xff, 0x01, 0x09, 0x86, + 0xea, 0x07, 0x3b, 0xdd, 0xd4, 0xfb, 0x57, 0x26, 0x71, 0x14, 0x7d, 0xda, 0x26, 0x8f, 0x25, 0x4b, 0xa3, 0x85, 0xa3, + 0xf7, 0x88, 0x61, 0x1c, 0x4e, 0xe7, 0x63, 0x92, 0x6d, 0x4c, 0x56, 0x01, 0xa4, 0x93, 0x99, 0x3a, 0xa6, 0xd4, 0xd1, + 0x38, 0xd7, 0x0b, 0xaa, 0xd0, 0x63, 0x5d, 0xf2, 0x1c, 0xac, 0x27, 0x3f, 0x78, 0xa5, 0x3f, 0x15, 0x72, 0x0e, 0x1b, + 0x89, 0xa0, 0xf0, 0x03, 0x5c, 0x0d, 0x56, 0x0a, 0x18, 0x4c, 0x7d, 0x0b, 0x5f, 0x13, 0xcf, 0x51, 0xf0, 0x28, 0xec, + 0x62, 0x6c, 0xad, 0x7c, 0xe7, 0x93, 0x82, 0x72, 0xcf, 0x8a, 0x39, 0xaf, 0x80, 0x73, 0x19, 0x14, 0xc2, 0x74, 0x3c, + 0xcb, 0xff, 0x99, 0xe4, 0xf5, 0xc4, 0x86, 0x00, 0x19, 0xfc, 0x29, 0x71, 0x5a, 0xba, 0x43, 0x77, 0x1e, 0x7a, 0x16, + 0x71, 0xd8, 0xe8, 0xc9, 0xba, 0x2c, 0xb6, 0x29, 0xea, 0x25, 0xcc, 0x0f, 0xe4, 0xe7, 0x2d, 0xf9, 0x3e, 0x44, 0xf1, + 0x36, 0xf8, 0x35, 0x63, 0xb1, 0xc0, 0xbf, 0xfe, 0x9e, 0x31, 0x9a, 0x68, 0xc1, 0xbf, 0xb3, 0x06, 0x89, 0x8a, 0x7f, + 0xca, 0x26, 0x00, 0xeb, 0xc8, 0xd5, 0x87, 0x4f, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x15, 0xe8, 0xd4, 0xe7, + 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x9e, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4f, 0xa9, 0x1a, 0xbf, 0x65, 0x14, + 0xbf, 0x53, 0xf9, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xe9, 0x7b, 0xc3, 0x89, 0x5d, 0xf6, 0xab, 0xb7, 0x89, 0xcc, + 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x6d, 0xbf, 0xcb, 0x0d, 0xa7, 0xc4, 0xf9, 0xb9, 0x87, 0x2b, 0x36, 0xad, 0x5e, 0xd1, + 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0x73, 0xee, 0x01, 0x04, 0x33, 0xa9, 0x09, + 0x00, 0x69, 0x21, 0x2a, 0x85, 0xc8, 0x5f, 0xe1, 0xac, 0x3e, 0xe7, 0xbd, 0x4d, 0x1e, 0x13, 0x69, 0x75, 0xaf, 0xdf, + 0x4f, 0xcf, 0xd2, 0x9c, 0x82, 0x1a, 0x8e, 0xb3, 0x4e, 0xbf, 0xcf, 0x82, 0x3a, 0x91, 0xab, 0xf4, 0x1f, 0x6e, 0x90, + 0x97, 0xf1, 0x7d, 0xdd, 0xf6, 0xfc, 0x89, 0xfa, 0x7b, 0x67, 0xfd, 0x6d, 0x81, 0xe0, 0x4e, 0x8e, 0xfd, 0x64, 0x55, + 0xca, 0x13, 0xe3, 0xd2, 0xde, 0xf3, 0x9b, 0xba, 0x28, 0xb2, 0x3a, 0x5d, 0x7f, 0x90, 0x7a, 0x1a, 0xdd, 0x17, 0x7b, + 0x30, 0x06, 0xef, 0x00, 0xf0, 0x4c, 0x87, 0x06, 0x48, 0xdf, 0x33, 0xf2, 0x70, 0x9f, 0x5b, 0xf2, 0x93, 0xca, 0xda, + 0x24, 0x61, 0x45, 0xb1, 0x19, 0xc6, 0x08, 0x25, 0xe3, 0x34, 0xb6, 0x7e, 0xbf, 0xaf, 0xfe, 0xde, 0x61, 0x14, 0x15, + 0x15, 0x77, 0x8c, 0x46, 0x65, 0x55, 0x8f, 0xb6, 0x83, 0xc3, 0xe1, 0x3c, 0xb7, 0x71, 0xb4, 0xf5, 0x0a, 0xd8, 0x5b, + 0xa1, 0x52, 0xf6, 0x4a, 0x84, 0xe5, 0x87, 0x2b, 0xbf, 0xdf, 0x87, 0x7f, 0x65, 0xa4, 0x85, 0xe7, 0x4f, 0xf1, 0xd7, + 0xa2, 0x2e, 0x30, 0x3c, 0x83, 0xd6, 0x68, 0x05, 0xc1, 0x04, 0xff, 0xe8, 0x40, 0xbd, 0xb4, 0xd2, 0x3e, 0x82, 0x6e, + 0x05, 0x7a, 0x50, 0x0f, 0x7d, 0x9a, 0xb4, 0x2f, 0x24, 0xea, 0xf6, 0x56, 0xa7, 0xd1, 0x1f, 0x15, 0x5c, 0x4e, 0x61, + 0x72, 0xb8, 0xa1, 0x4f, 0xab, 0x70, 0xfb, 0x09, 0x9e, 0xfe, 0x0c, 0x94, 0x5b, 0x87, 0x43, 0x0e, 0x62, 0x0b, 0xb8, + 0x79, 0xac, 0xc2, 0xcf, 0x45, 0x29, 0x23, 0xea, 0xe3, 0x69, 0x01, 0xda, 0xbb, 0x00, 0x1d, 0xb0, 0x34, 0x88, 0x57, + 0x48, 0x9e, 0xb3, 0x11, 0xc0, 0xb2, 0x03, 0xcb, 0x59, 0xc6, 0x29, 0xcc, 0xb3, 0x7c, 0xa1, 0x56, 0xda, 0x59, 0x99, + 0x78, 0x35, 0xcb, 0xc0, 0x59, 0xe0, 0xa2, 0xf2, 0x59, 0xa6, 0x55, 0x4f, 0x55, 0x82, 0x3e, 0xaf, 0xe4, 0x04, 0x57, + 0x82, 0x93, 0x0d, 0xc8, 0x2f, 0x40, 0x92, 0xa6, 0x94, 0x35, 0xe5, 0x8b, 0x4b, 0xba, 0x21, 0xa3, 0xe7, 0xbc, 0xe7, + 0x45, 0xc3, 0xd0, 0xbf, 0xf0, 0x4a, 0x08, 0xdf, 0xc4, 0x6d, 0x1b, 0xa5, 0xb0, 0xbf, 0x09, 0x2c, 0x3e, 0x61, 0x3f, + 0x78, 0x4b, 0x7f, 0x3a, 0x0e, 0xc2, 0x21, 0x72, 0x43, 0xc5, 0x1c, 0xd8, 0xd3, 0x80, 0xc5, 0x26, 0xbe, 0xda, 0x4c, + 0xe2, 0xc1, 0xc0, 0xd7, 0x19, 0x8b, 0x59, 0x0c, 0x34, 0xc8, 0xf1, 0xe0, 0x72, 0xae, 0x4f, 0x08, 0xfd, 0x30, 0xa2, + 0x72, 0x54, 0xa0, 0x73, 0x10, 0x0d, 0x96, 0x80, 0xa7, 0xde, 0xca, 0x06, 0x49, 0xc6, 0x24, 0x93, 0xb8, 0xd6, 0x24, + 0xd5, 0xe1, 0x84, 0xd6, 0x81, 0x8e, 0xab, 0x0b, 0xe8, 0x7c, 0x5c, 0xf7, 0x3e, 0x5e, 0x0d, 0x17, 0x54, 0xfa, 0x85, + 0x18, 0x78, 0xf5, 0x74, 0x1c, 0x5c, 0xd2, 0xad, 0x70, 0xb1, 0x0a, 0xb7, 0x3f, 0xcb, 0x07, 0x8e, 0x3b, 0x2a, 0x69, + 0x08, 0x0c, 0xde, 0x1e, 0xba, 0x9b, 0x19, 0x1a, 0xea, 0xa4, 0x7d, 0x18, 0x87, 0x72, 0x88, 0x55, 0x2b, 0x2e, 0xa4, + 0x37, 0x82, 0x6f, 0x17, 0x8a, 0xb1, 0x6c, 0xec, 0xd2, 0x50, 0x14, 0xfe, 0x0a, 0x60, 0x87, 0xda, 0x5f, 0xa9, 0xe4, + 0x63, 0x64, 0x54, 0xd3, 0x40, 0xc7, 0x00, 0x2c, 0x59, 0x9a, 0x48, 0xaa, 0x48, 0x23, 0xf1, 0x47, 0x66, 0xac, 0xa3, + 0xa6, 0xeb, 0x0b, 0xa6, 0xaa, 0x45, 0xd2, 0xed, 0x4c, 0x62, 0x39, 0x91, 0xa4, 0xb6, 0xfb, 0x88, 0x18, 0x0c, 0x7c, + 0xb0, 0x11, 0xd3, 0x4c, 0x84, 0x23, 0x1e, 0x95, 0xc8, 0xa2, 0xcb, 0x6f, 0xa3, 0x4c, 0xda, 0xbe, 0xac, 0xc8, 0x16, + 0x04, 0xd3, 0x93, 0xe8, 0x83, 0x24, 0xe5, 0x54, 0x24, 0xd2, 0x8c, 0x10, 0xe0, 0xc7, 0x93, 0xf2, 0x4a, 0x7f, 0x0e, + 0x9a, 0x56, 0x82, 0x97, 0x0c, 0x92, 0x47, 0xe2, 0x67, 0x52, 0x30, 0x8b, 0xb1, 0x6a, 0x30, 0xc0, 0x72, 0xaa, 0x67, + 0x8e, 0x49, 0xfa, 0x6f, 0x9d, 0x4e, 0xd8, 0x2f, 0xbd, 0xdc, 0xd6, 0xf2, 0xa6, 0xb9, 0xf7, 0xd2, 0xab, 0x58, 0xaa, + 0x61, 0x19, 0xf4, 0x5f, 0x13, 0xed, 0x82, 0xad, 0x2d, 0x63, 0xc2, 0xaa, 0x1f, 0x40, 0xda, 0x23, 0x5d, 0x5e, 0x35, + 0xcc, 0x99, 0xe0, 0xd1, 0x85, 0x35, 0x0f, 0xa2, 0x0b, 0xe1, 0x23, 0x97, 0xdd, 0x24, 0xb9, 0x1a, 0x4f, 0xfc, 0x70, + 0x30, 0x50, 0x00, 0xb4, 0xb4, 0x4e, 0x8a, 0x41, 0xf8, 0x4c, 0xc8, 0x81, 0x34, 0x3a, 0xaa, 0x02, 0x2c, 0x96, 0xd9, + 0x55, 0x39, 0xc9, 0x06, 0x03, 0x1f, 0xc4, 0xc6, 0xc4, 0x6e, 0x68, 0x36, 0xf7, 0xd9, 0x89, 0x82, 0xac, 0x36, 0x87, + 0xad, 0x99, 0x6e, 0x81, 0x01, 0xc0, 0x20, 0x22, 0x58, 0xee, 0x73, 0x23, 0x1f, 0x51, 0xa7, 0xa7, 0x30, 0x02, 0x82, + 0x5f, 0x4e, 0x04, 0x22, 0x17, 0x09, 0xd4, 0x03, 0xcc, 0x04, 0x98, 0x51, 0xc5, 0xf0, 0x12, 0xd8, 0xc5, 0x73, 0xf3, + 0x8a, 0x41, 0xff, 0xa2, 0x49, 0x96, 0x68, 0x2a, 0x71, 0x34, 0x46, 0x4e, 0xa5, 0x31, 0x32, 0x20, 0x76, 0x71, 0xfc, + 0x7b, 0x4a, 0x8f, 0x82, 0x94, 0x7d, 0xae, 0x0c, 0x71, 0x38, 0x8a, 0xaf, 0x60, 0xd5, 0x38, 0x1c, 0x6a, 0xf3, 0x7a, + 0x3a, 0xab, 0xe7, 0x03, 0x11, 0xc0, 0x7f, 0x43, 0xc1, 0x7e, 0xd1, 0x54, 0xe4, 0x06, 0xa9, 0xf3, 0x70, 0x48, 0x41, + 0x3e, 0xd5, 0x4d, 0xfe, 0xbe, 0x72, 0xf7, 0xd3, 0xd9, 0xdc, 0x9a, 0xa3, 0x17, 0x35, 0xae, 0x5b, 0xab, 0x1b, 0x0a, + 0x89, 0xd6, 0x34, 0x29, 0xae, 0xaa, 0x49, 0x31, 0xe0, 0xb9, 0x2f, 0x54, 0x17, 0x5b, 0x23, 0x58, 0xf8, 0x73, 0x0b, + 0x84, 0xc9, 0xb8, 0x17, 0x1f, 0x2d, 0xe4, 0x94, 0x76, 0x6d, 0xb5, 0xdb, 0x56, 0x36, 0xa4, 0x68, 0x3e, 0xbc, 0x84, + 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, 0x29, 0x86, + 0x7f, 0x95, 0xee, 0xcd, 0xa9, 0x0d, 0x72, 0x00, 0xdb, 0xbd, 0x87, 0xdb, 0x31, 0x7a, 0x20, 0x83, 0x37, 0x42, 0xce, + 0x39, 0xbf, 0x9c, 0x5a, 0x33, 0x26, 0x1a, 0x16, 0xac, 0x1c, 0x46, 0x7e, 0x80, 0x8c, 0x97, 0x53, 0x60, 0x65, 0x3f, + 0x2a, 0xe2, 0xd2, 0x1f, 0x46, 0xfe, 0xc5, 0xf3, 0x20, 0xe3, 0x5e, 0x34, 0xec, 0xf8, 0x02, 0xec, 0xd5, 0x17, 0xcf, + 0x59, 0x34, 0xe0, 0xd5, 0x55, 0x3d, 0xcd, 0x82, 0x61, 0xc6, 0xa2, 0xab, 0x62, 0x08, 0x3e, 0xb4, 0x2f, 0xca, 0x41, + 0xe8, 0xfb, 0x66, 0xe7, 0xd0, 0xdd, 0x90, 0xc8, 0x23, 0xec, 0x47, 0x70, 0xdb, 0xd5, 0x12, 0x33, 0x98, 0x6c, 0xee, + 0x22, 0x66, 0xb0, 0xe5, 0x2f, 0x9e, 0x1b, 0x2e, 0xa1, 0xea, 0x85, 0xd4, 0x6c, 0x14, 0x68, 0x4e, 0xae, 0xd0, 0x9c, + 0xac, 0x84, 0x5a, 0xf2, 0x49, 0x85, 0x13, 0x76, 0x3e, 0xc9, 0x95, 0xdd, 0x68, 0x8c, 0x81, 0x8b, 0xf6, 0xdc, 0x16, + 0x46, 0x66, 0x3a, 0x4b, 0xd1, 0x80, 0x85, 0x67, 0xe2, 0x94, 0xc6, 0x80, 0xf6, 0xe5, 0xc0, 0xd2, 0x86, 0xfc, 0x28, + 0x67, 0x06, 0xda, 0x86, 0x94, 0x46, 0xcd, 0xc0, 0x9f, 0xa9, 0x09, 0xf3, 0x2b, 0x58, 0x89, 0x20, 0xaa, 0x0b, 0x30, + 0x49, 0x72, 0x32, 0x1a, 0x29, 0x2b, 0x91, 0x9c, 0x03, 0xde, 0x47, 0xf0, 0x64, 0x11, 0xdb, 0xda, 0x9f, 0xd2, 0xff, + 0xea, 0xf0, 0xb9, 0xf4, 0x9f, 0x09, 0x60, 0x21, 0x97, 0x06, 0x91, 0x81, 0xc2, 0x21, 0x35, 0x95, 0x88, 0x13, 0xc7, + 0x33, 0xf0, 0x0d, 0x5c, 0xa0, 0x29, 0xa0, 0x3f, 0xa8, 0x19, 0x45, 0x64, 0xe1, 0xaf, 0x9e, 0xdd, 0xd4, 0x8d, 0x9e, + 0x67, 0xce, 0x6b, 0xd0, 0xcc, 0x40, 0x48, 0x8f, 0x53, 0xf5, 0x36, 0x24, 0x3a, 0x2f, 0x2f, 0xf5, 0xcb, 0x84, 0x48, + 0x56, 0x44, 0x9e, 0xbe, 0xcf, 0xc1, 0x3c, 0xa2, 0x08, 0x1d, 0x5c, 0x99, 0x87, 0xc3, 0xb9, 0xa0, 0xf0, 0x1d, 0xe5, + 0xf9, 0x80, 0xd3, 0x2c, 0x4a, 0x40, 0x1b, 0xc8, 0x72, 0x53, 0xe6, 0x3a, 0x69, 0x99, 0xba, 0xf7, 0x60, 0x25, 0xa8, + 0xd0, 0xcd, 0x29, 0x28, 0x94, 0x91, 0xa0, 0x94, 0x56, 0x83, 0x50, 0xaa, 0xc3, 0x22, 0x88, 0x1c, 0xb2, 0x10, 0x70, + 0x33, 0x15, 0x8d, 0x96, 0x34, 0x3c, 0xc2, 0xb9, 0x81, 0x42, 0x00, 0x12, 0x7b, 0xaa, 0x28, 0xe3, 0x72, 0x08, 0xf8, + 0x28, 0xe1, 0x10, 0x67, 0x4d, 0xda, 0xf2, 0x1c, 0xc4, 0xb1, 0x5c, 0xf2, 0x75, 0x85, 0x60, 0x10, 0xa1, 0xcf, 0x90, + 0x3f, 0x59, 0xce, 0xbf, 0x5b, 0x87, 0x69, 0x47, 0xf8, 0xb0, 0xab, 0x2d, 0xb8, 0x98, 0xdd, 0xce, 0x27, 0x10, 0xdf, + 0x72, 0x3b, 0x3f, 0xc6, 0x10, 0x59, 0xf8, 0x83, 0xbb, 0xa1, 0xe4, 0x8a, 0x42, 0x97, 0xf5, 0x88, 0x14, 0xd9, 0xd3, + 0x35, 0x47, 0x10, 0x1c, 0x68, 0xd5, 0x20, 0x43, 0x23, 0xf1, 0xc5, 0x73, 0xc8, 0x1a, 0xac, 0xf9, 0xe7, 0x8a, 0x9c, + 0xd5, 0xfd, 0xc9, 0x06, 0xaa, 0x49, 0x26, 0x6b, 0x45, 0xe5, 0xfc, 0xf5, 0xaa, 0x2c, 0x4f, 0x56, 0x65, 0xb8, 0x1a, + 0x74, 0x55, 0x65, 0xc9, 0x91, 0xda, 0x00, 0xad, 0xe9, 0x0a, 0x31, 0x14, 0xb2, 0x06, 0x4b, 0xab, 0x2a, 0x6b, 0xea, + 0x13, 0x08, 0xf4, 0x01, 0x96, 0x51, 0xb3, 0x9f, 0x0e, 0xff, 0x15, 0xfc, 0x4b, 0x85, 0x2c, 0xd5, 0x69, 0x9d, 0x89, + 0x5f, 0x83, 0x25, 0xc3, 0x3f, 0x7e, 0x0b, 0xd6, 0x80, 0x25, 0x40, 0x96, 0xbb, 0x8d, 0x8d, 0xd6, 0x2b, 0xaf, 0x10, + 0x5f, 0x6a, 0x7d, 0xd1, 0x6f, 0xdd, 0x26, 0x6a, 0x05, 0x18, 0xa1, 0xd0, 0x22, 0xc0, 0x56, 0x0f, 0xdc, 0x53, 0xf0, + 0x03, 0x31, 0x9c, 0x6b, 0xd2, 0x9a, 0x3a, 0xe1, 0x75, 0x36, 0x8e, 0x44, 0x54, 0x6f, 0xe1, 0xe2, 0x5e, 0x6f, 0x2d, + 0xfe, 0x46, 0x05, 0x02, 0x20, 0x8b, 0x29, 0xd6, 0xce, 0x1b, 0xd2, 0x2b, 0xc3, 0x4e, 0x42, 0xef, 0x0d, 0x3b, 0x81, + 0xbc, 0x38, 0xec, 0x14, 0xba, 0x44, 0xdb, 0x29, 0x52, 0x13, 0x6d, 0x27, 0x2d, 0x56, 0x61, 0x09, 0xc1, 0xaf, 0xda, + 0x5b, 0x47, 0xd9, 0xbe, 0xc8, 0x12, 0xa6, 0x2d, 0x60, 0x94, 0x5b, 0xf5, 0x99, 0x53, 0xc4, 0x4a, 0xd9, 0x3b, 0x9d, + 0x54, 0xb9, 0x8b, 0x7c, 0x6a, 0x35, 0x45, 0x26, 0x7f, 0x7f, 0xdc, 0x22, 0xf9, 0xe4, 0xe7, 0x76, 0xc3, 0x64, 0xfa, + 0xc7, 0xa3, 0x2f, 0xa0, 0x2b, 0xb2, 0xd3, 0x27, 0x10, 0x90, 0xa9, 0xa0, 0x5a, 0xdd, 0x2a, 0xa6, 0x79, 0xbb, 0xca, + 0x6e, 0x2f, 0x94, 0x18, 0x4e, 0x67, 0x27, 0xe1, 0xd1, 0x66, 0xc8, 0xc0, 0x21, 0x08, 0x14, 0x42, 0x45, 0x31, 0x3c, + 0x02, 0xb5, 0x46, 0xf2, 0x01, 0x7e, 0xb4, 0x3b, 0x15, 0x44, 0x6a, 0x37, 0x15, 0x37, 0x4e, 0x6e, 0xba, 0x5e, 0x0a, + 0xd4, 0x3a, 0x25, 0x2b, 0x80, 0x12, 0xa2, 0xfe, 0x24, 0xb6, 0xf5, 0x2b, 0xb8, 0x62, 0xf3, 0x7d, 0xa3, 0xe8, 0xc9, + 0xf5, 0x29, 0xea, 0x56, 0x5c, 0x9d, 0xa6, 0xad, 0xe6, 0xd8, 0x71, 0x86, 0x1c, 0x3c, 0x2b, 0x08, 0xb6, 0xa3, 0x12, + 0xe5, 0x75, 0xbb, 0xe9, 0x98, 0xd8, 0xea, 0x9f, 0x45, 0xb5, 0xb9, 0x83, 0x8a, 0x88, 0xf8, 0x28, 0xbb, 0x79, 0xd2, + 0x7e, 0x07, 0x7b, 0xac, 0xd5, 0x20, 0xb2, 0xcf, 0xe0, 0x2a, 0xd7, 0x69, 0x91, 0xdb, 0x32, 0x38, 0xff, 0xf0, 0x6a, + 0x57, 0x61, 0x93, 0x63, 0x5d, 0x5d, 0xcd, 0x54, 0x27, 0x15, 0x1b, 0x18, 0x6b, 0x5a, 0x4b, 0x35, 0x8f, 0x21, 0xe9, + 0xae, 0x2c, 0xce, 0xaa, 0xa4, 0x9b, 0x9e, 0x1b, 0x67, 0x0a, 0x31, 0x70, 0xb6, 0x1a, 0x2d, 0x67, 0x18, 0xa2, 0xeb, + 0xc3, 0x2c, 0xf1, 0x5b, 0x3d, 0xe5, 0x3e, 0x0f, 0xb7, 0x7e, 0x57, 0x2f, 0x38, 0x99, 0xec, 0x27, 0xc7, 0xb9, 0xdb, + 0x45, 0xda, 0x4f, 0x7c, 0x1b, 0xe6, 0x5f, 0xdf, 0x20, 0xee, 0x44, 0xfd, 0xcf, 0x0a, 0x80, 0x06, 0x37, 0x79, 0x2c, + 0x51, 0xea, 0xf7, 0xaa, 0xfa, 0x41, 0xcd, 0x54, 0x4d, 0x03, 0xc1, 0x9c, 0x4a, 0x01, 0x7f, 0xb8, 0x5d, 0xb8, 0xe2, + 0x11, 0x37, 0x2c, 0x8c, 0x7f, 0x7a, 0x35, 0x3b, 0x15, 0x54, 0x06, 0x6e, 0xc6, 0x7f, 0x7a, 0x82, 0x9d, 0xc2, 0x5a, + 0x01, 0x59, 0xe1, 0x4f, 0x2f, 0x7f, 0xe4, 0xfd, 0x8a, 0xff, 0xe9, 0x55, 0x8f, 0xbc, 0x8f, 0x38, 0x2f, 0x7f, 0x22, + 0xa9, 0x13, 0xa2, 0xba, 0xfc, 0x49, 0x98, 0x62, 0xab, 0x34, 0x7f, 0x4d, 0x0a, 0x9f, 0xe0, 0x33, 0xf0, 0x1d, 0xae, + 0xc2, 0xad, 0xf9, 0x0d, 0x1e, 0x3b, 0x16, 0xdb, 0x2e, 0xf5, 0x05, 0x94, 0x23, 0xb0, 0x88, 0xdc, 0x7e, 0xbb, 0xb2, + 0x5f, 0x2d, 0x8c, 0x32, 0xc6, 0xee, 0x4b, 0x56, 0xa2, 0x74, 0xd6, 0xef, 0x17, 0x52, 0x30, 0xb2, 0x0b, 0x6b, 0xb4, + 0x47, 0xa9, 0x7a, 0xf5, 0x3a, 0xac, 0xa3, 0x24, 0xcd, 0xef, 0x64, 0xf4, 0x91, 0x0c, 0x3b, 0xd2, 0x57, 0x52, 0xa2, + 0xbd, 0x56, 0x61, 0x39, 0x9a, 0xfd, 0xba, 0xe4, 0x40, 0x79, 0xdd, 0x0a, 0xca, 0x57, 0x4d, 0x00, 0xbd, 0x52, 0xed, + 0x33, 0xd0, 0x0a, 0x0a, 0x4b, 0xe5, 0xc1, 0x4a, 0x9c, 0x8b, 0x3e, 0x2b, 0x0e, 0x07, 0x75, 0x31, 0x24, 0x14, 0xa8, + 0x12, 0x27, 0xa1, 0x11, 0xcf, 0xe1, 0x42, 0x28, 0x5e, 0xe4, 0x18, 0x5b, 0x91, 0x03, 0x07, 0x32, 0xfc, 0x80, 0xc0, + 0x7b, 0xd9, 0xbf, 0x82, 0xc1, 0x30, 0xc1, 0x8d, 0x8c, 0x3a, 0x39, 0x67, 0x7f, 0x62, 0x60, 0x06, 0xf5, 0xa4, 0x76, + 0x9f, 0xdd, 0xab, 0xc0, 0x5e, 0x38, 0x03, 0xda, 0xbb, 0x31, 0xfa, 0x59, 0x15, 0x6b, 0x27, 0xfd, 0x53, 0xb1, 0x86, + 0x64, 0x3a, 0x2c, 0x8e, 0xb6, 0x69, 0x78, 0x24, 0x4f, 0x8e, 0xe3, 0x4d, 0xff, 0x70, 0x18, 0xe3, 0xc7, 0x51, 0x7e, + 0x6d, 0x01, 0xaf, 0xe2, 0x16, 0xd2, 0x58, 0xa4, 0xe8, 0x1d, 0x88, 0x39, 0x14, 0xbd, 0x64, 0xbf, 0x65, 0xbc, 0x9c, + 0x08, 0x4a, 0x49, 0x62, 0xc3, 0x3b, 0xd2, 0xd3, 0xb4, 0x1e, 0x6d, 0x65, 0xc0, 0x7e, 0x3d, 0xda, 0xd1, 0x5f, 0xa0, + 0x78, 0xb4, 0xf0, 0x97, 0xf4, 0x77, 0x71, 0x37, 0xf7, 0x9c, 0x6f, 0x1a, 0xdf, 0x11, 0x17, 0x28, 0xd6, 0xec, 0xfe, + 0x9a, 0x96, 0xce, 0x3a, 0x10, 0x1c, 0xf0, 0x16, 0xbb, 0x68, 0xdf, 0x6f, 0x5c, 0xa7, 0xa7, 0xfd, 0xb7, 0x6e, 0x8d, + 0xf2, 0xbd, 0x7f, 0x4a, 0x94, 0x83, 0xfd, 0x6b, 0x17, 0xcd, 0xdf, 0x7e, 0xca, 0x90, 0x54, 0x68, 0x6e, 0xb0, 0x9d, + 0x6c, 0x11, 0xd6, 0xc6, 0x38, 0xa8, 0xd8, 0x5d, 0x19, 0x46, 0xc0, 0xa0, 0x8e, 0xfd, 0x8f, 0x3e, 0x9b, 0x36, 0x64, + 0x1f, 0x00, 0x2a, 0x57, 0x21, 0x60, 0x0f, 0xc0, 0x89, 0x46, 0xb8, 0x01, 0x6e, 0x35, 0x5a, 0xd2, 0x41, 0xdd, 0x16, + 0x0c, 0x44, 0x4b, 0xd8, 0xc8, 0xdb, 0xae, 0x4e, 0x5f, 0x11, 0x3e, 0xd4, 0x4e, 0x4a, 0x87, 0xf2, 0x57, 0xcf, 0xd9, + 0xff, 0xec, 0xb0, 0xa6, 0xa6, 0xdc, 0x00, 0x66, 0xce, 0x4a, 0xe4, 0x15, 0x42, 0xa7, 0xc8, 0xef, 0x55, 0x5d, 0x89, + 0xe1, 0xb2, 0x16, 0x65, 0x67, 0x76, 0xeb, 0x44, 0xef, 0x9c, 0x82, 0x5a, 0x2a, 0x1b, 0xe4, 0x24, 0xd5, 0xe6, 0x23, + 0x6b, 0x05, 0x25, 0xea, 0x1a, 0x05, 0x8e, 0x4f, 0xb9, 0x76, 0xff, 0xef, 0x9c, 0x09, 0x6a, 0xb6, 0x51, 0xdd, 0x5f, + 0xeb, 0xa7, 0xaa, 0x26, 0xb1, 0x00, 0x97, 0x93, 0x34, 0xef, 0x78, 0x84, 0xd5, 0x3f, 0x4e, 0x96, 0x22, 0xd0, 0xeb, + 0x88, 0x76, 0x25, 0x20, 0x41, 0x3b, 0x39, 0x0b, 0x15, 0x81, 0x02, 0x7d, 0xfd, 0xfb, 0x4d, 0x9a, 0xc5, 0x72, 0x35, + 0xdb, 0xc3, 0x44, 0x59, 0xac, 0x87, 0x08, 0x72, 0x66, 0xea, 0x60, 0xbf, 0xa7, 0x19, 0xcd, 0xc2, 0x2b, 0x53, 0x82, + 0x4b, 0x71, 0x15, 0x15, 0x39, 0xf8, 0x1c, 0xe2, 0x0b, 0x9f, 0x0a, 0xb9, 0x41, 0x44, 0xd3, 0xef, 0x25, 0xaa, 0x1d, + 0x29, 0x90, 0x43, 0xc9, 0x4f, 0x88, 0xbf, 0x64, 0x6d, 0x8c, 0xfb, 0xa5, 0x53, 0xed, 0x57, 0x0a, 0xc1, 0xfd, 0x67, + 0x5b, 0x6c, 0x54, 0x79, 0xa2, 0x47, 0x9f, 0x62, 0xfd, 0x4f, 0x16, 0x50, 0xaa, 0xfb, 0x36, 0x38, 0x15, 0x8f, 0xc2, + 0x4d, 0x5d, 0xdc, 0x20, 0xb4, 0x40, 0x39, 0xaa, 0x8a, 0x4d, 0x19, 0x11, 0x27, 0xec, 0xa6, 0x2e, 0x7a, 0x9a, 0x03, + 0x9d, 0x3a, 0x2c, 0x4d, 0xe4, 0x89, 0xd0, 0x6e, 0x41, 0xf7, 0x34, 0xc7, 0x4a, 0xbc, 0x94, 0xa5, 0x83, 0xac, 0x13, + 0x69, 0x42, 0xe5, 0xae, 0xae, 0x3a, 0x2a, 0x95, 0xba, 0xe1, 0x4d, 0xaa, 0x19, 0x7f, 0x97, 0xe6, 0x4f, 0x2c, 0xfb, + 0x4d, 0xeb, 0xb7, 0x5a, 0xed, 0x8d, 0xd5, 0xa3, 0x92, 0x35, 0xc7, 0xd9, 0x84, 0xa4, 0xf4, 0x09, 0xdb, 0xcd, 0xa4, + 0x6b, 0x1d, 0x78, 0x12, 0x5c, 0x0e, 0x3d, 0x01, 0x15, 0x83, 0x26, 0xde, 0xee, 0x02, 0xf5, 0x08, 0x3c, 0x03, 0xe5, + 0x13, 0xb5, 0x0e, 0xf8, 0x79, 0xad, 0xe5, 0x29, 0x23, 0x0c, 0xab, 0x9d, 0x45, 0xcb, 0xc1, 0x79, 0xa7, 0x08, 0x5c, + 0xbb, 0x12, 0x78, 0x3e, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, 0xa7, + 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, 0x36, + 0x9f, 0x7d, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, 0xcf, + 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, 0x76, + 0x7c, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, 0x88, + 0xc2, 0x2c, 0xfb, 0xb1, 0x28, 0xfe, 0xa8, 0xf4, 0x1d, 0x81, 0x8e, 0xee, 0xbc, 0xa8, 0xd3, 0xe5, 0xee, 0x03, 0x61, + 0x3c, 0x79, 0xf5, 0x11, 0xd1, 0xad, 0xef, 0x33, 0xf7, 0x2b, 0xc0, 0x8d, 0xe0, 0x0e, 0xa2, 0xbd, 0x5b, 0xea, 0x93, + 0x5a, 0x7d, 0xad, 0xd7, 0xce, 0xd3, 0xf3, 0x9b, 0xce, 0xed, 0x77, 0xdf, 0x1c, 0x6d, 0xbd, 0xc7, 0x85, 0xb5, 0xb2, + 0xf4, 0x54, 0x15, 0xec, 0xcd, 0xf2, 0x54, 0x15, 0x4c, 0x1e, 0x78, 0xcd, 0x7e, 0x41, 0x83, 0x2b, 0x1d, 0x6d, 0xbc, + 0x27, 0x6a, 0xe0, 0x16, 0x85, 0xa5, 0xc3, 0x2f, 0xb9, 0x99, 0xbc, 0xc2, 0xfd, 0xa5, 0x22, 0x17, 0xfb, 0xce, 0x19, + 0xdd, 0x99, 0x59, 0xf7, 0xaa, 0xc2, 0xd5, 0x82, 0x5c, 0x1d, 0xd8, 0x5a, 0x76, 0x71, 0xb8, 0x61, 0x11, 0x05, 0x08, + 0xc4, 0xf4, 0x4a, 0xad, 0xfd, 0x11, 0x0d, 0x42, 0x3e, 0x18, 0xf8, 0x05, 0x06, 0xab, 0x02, 0x85, 0x0f, 0x14, 0xc9, + 0x5f, 0x7b, 0x02, 0x76, 0xf1, 0x0c, 0xd0, 0xad, 0xd8, 0xac, 0x18, 0x21, 0x42, 0x26, 0xcb, 0x59, 0x4d, 0x67, 0x90, + 0x4f, 0x7d, 0xf1, 0x8d, 0xad, 0x3a, 0x9d, 0xb7, 0x35, 0x55, 0x4e, 0x1d, 0x0a, 0xdd, 0xdd, 0xd4, 0x9d, 0x5b, 0x17, + 0x79, 0xea, 0x10, 0x72, 0xa5, 0x62, 0x25, 0xa6, 0xa1, 0xe6, 0x49, 0x9a, 0x51, 0x7f, 0xb1, 0xf7, 0x7b, 0x8d, 0xc2, + 0x29, 0x7f, 0x3a, 0x06, 0x55, 0xb8, 0xaa, 0x21, 0x8e, 0xa5, 0x2a, 0x1e, 0xd9, 0x20, 0xd0, 0xbc, 0xba, 0x55, 0x49, + 0x13, 0x32, 0xb9, 0x11, 0x3e, 0x35, 0x29, 0xe5, 0x69, 0xda, 0xa4, 0x95, 0x22, 0x75, 0xf0, 0x41, 0x9d, 0x6a, 0x3c, + 0x37, 0xab, 0x17, 0x00, 0x66, 0x9c, 0x5f, 0xf1, 0x4b, 0xc5, 0x65, 0xd4, 0x56, 0x66, 0xd2, 0xfe, 0xe4, 0x68, 0x6c, + 0xd4, 0xe5, 0xb4, 0x51, 0x46, 0x58, 0x29, 0xcd, 0x49, 0xb1, 0x1c, 0xcf, 0x3f, 0x60, 0xb0, 0xe6, 0x09, 0xec, 0x60, + 0xa2, 0x52, 0xde, 0x47, 0x40, 0x7c, 0x9d, 0xa4, 0x77, 0x09, 0xa4, 0x48, 0xff, 0xd2, 0x25, 0x77, 0x19, 0x1b, 0x88, + 0x31, 0x2b, 0x66, 0x46, 0xff, 0x83, 0xbb, 0xa4, 0x3f, 0x09, 0x01, 0x70, 0x13, 0x4d, 0xa1, 0x53, 0xe7, 0xc9, 0x45, + 0x1e, 0x2c, 0x2f, 0x3c, 0xb4, 0x62, 0xc4, 0x83, 0xbf, 0xbe, 0x08, 0x11, 0xc4, 0x1c, 0x53, 0x3c, 0xfd, 0xc2, 0xe8, + 0x2f, 0xc1, 0x25, 0x46, 0x10, 0xba, 0x7b, 0xe7, 0x30, 0x84, 0x9b, 0x3d, 0xc8, 0xa0, 0xfe, 0x50, 0x87, 0x44, 0x0d, + 0x7f, 0xac, 0x3c, 0xe8, 0xff, 0x3a, 0x13, 0x96, 0xda, 0x4f, 0x4f, 0x07, 0x50, 0xc1, 0xfb, 0x8a, 0xb7, 0x11, 0xf1, + 0x7d, 0xe2, 0x67, 0xf1, 0x60, 0xf3, 0x6c, 0x03, 0xd6, 0xba, 0x27, 0xb9, 0xb1, 0xae, 0x12, 0x36, 0x10, 0xf0, 0x35, + 0x8a, 0xda, 0xf3, 0xda, 0xed, 0x1e, 0xfc, 0xd5, 0xbf, 0x08, 0x19, 0x30, 0x71, 0xfa, 0x3e, 0x73, 0xb2, 0x46, 0x17, + 0x99, 0x4c, 0x1f, 0x3a, 0xe9, 0x1b, 0x9d, 0xee, 0x3b, 0xe1, 0x1f, 0x15, 0xb3, 0xf8, 0x70, 0x4b, 0x5f, 0x69, 0x52, + 0xdc, 0x01, 0x2b, 0x9b, 0x47, 0x05, 0xa1, 0xce, 0x45, 0xf4, 0x95, 0x29, 0xdf, 0x12, 0x6a, 0xf6, 0x8d, 0x25, 0xa5, + 0x74, 0xaf, 0xa1, 0x37, 0x69, 0xad, 0xdf, 0x46, 0x09, 0xc6, 0x44, 0xc7, 0x93, 0x97, 0xf1, 0x58, 0x79, 0x1f, 0x8f, + 0x1b, 0xa9, 0x90, 0x07, 0x20, 0x02, 0x15, 0xe3, 0x4f, 0x57, 0x9e, 0x9c, 0xf4, 0xc2, 0x78, 0x15, 0x4a, 0x41, 0x61, + 0x40, 0x57, 0x20, 0x05, 0x3c, 0x6a, 0x4f, 0x74, 0x16, 0x76, 0x09, 0xf7, 0xe8, 0x26, 0x60, 0xac, 0xcf, 0x3f, 0x02, + 0x9a, 0xbb, 0x70, 0x87, 0x17, 0x03, 0xd4, 0xa6, 0x5e, 0xdd, 0x7d, 0x5c, 0xab, 0x73, 0x38, 0x04, 0x07, 0xab, 0x41, + 0x04, 0xa7, 0xf3, 0xa9, 0xa3, 0x59, 0x16, 0xa0, 0x72, 0xb2, 0xdc, 0xc8, 0x9b, 0x47, 0x8b, 0x5e, 0xdd, 0xf7, 0x96, + 0x69, 0x59, 0xd5, 0x41, 0xc6, 0xb2, 0xb0, 0x02, 0x5c, 0x1d, 0x5a, 0x3f, 0x08, 0x97, 0x85, 0xf3, 0x07, 0x42, 0x10, + 0xbb, 0x57, 0xdb, 0x92, 0xe7, 0x6a, 0x0e, 0x3f, 0x7b, 0xce, 0xd6, 0x5c, 0xa2, 0x4e, 0x3a, 0x13, 0x01, 0x88, 0x3d, + 0x35, 0xab, 0xe8, 0x1a, 0x48, 0xea, 0x34, 0xab, 0xe8, 0x9a, 0x9a, 0x6d, 0x8c, 0x03, 0xf9, 0x68, 0x95, 0x02, 0xf6, + 0xdd, 0x74, 0x1c, 0xac, 0x9e, 0xc5, 0xf2, 0x3a, 0x74, 0xf7, 0x6c, 0xa3, 0x7c, 0x06, 0x75, 0xab, 0x8d, 0x31, 0xb1, + 0xdd, 0x7c, 0x39, 0xd7, 0x6f, 0x07, 0x4b, 0xdf, 0x0e, 0x9a, 0x73, 0xca, 0xbe, 0xd3, 0x65, 0xaf, 0xec, 0xb2, 0xa9, + 0xe7, 0x8e, 0x8a, 0x56, 0x63, 0x40, 0x6f, 0x60, 0xc1, 0xfa, 0x5c, 0xa4, 0xd9, 0xaa, 0x54, 0x25, 0xe0, 0x85, 0xb1, + 0x62, 0x77, 0x7e, 0x23, 0x33, 0x24, 0x61, 0x1e, 0x67, 0xe2, 0x9a, 0xee, 0xb5, 0x30, 0x39, 0x8e, 0x45, 0x32, 0x25, + 0x74, 0x4a, 0x77, 0xb6, 0xa1, 0x73, 0x15, 0x46, 0x11, 0xad, 0x95, 0x54, 0x1a, 0x09, 0x4c, 0xcd, 0x00, 0x25, 0x73, + 0x05, 0x4e, 0xe9, 0x72, 0xff, 0x3b, 0x12, 0xe3, 0xcc, 0x17, 0x25, 0x33, 0xa0, 0x5b, 0x7e, 0x5d, 0xac, 0x5b, 0x29, + 0x32, 0xc2, 0xbc, 0x39, 0x6e, 0xaf, 0xeb, 0x43, 0x20, 0x57, 0xcb, 0x1e, 0x45, 0xe3, 0xa0, 0xd0, 0xe1, 0x52, 0x25, + 0xc0, 0xbe, 0x48, 0xfc, 0x8c, 0xb0, 0xa5, 0x3d, 0x90, 0xdb, 0xa3, 0x33, 0x61, 0xce, 0x39, 0x29, 0xcb, 0xce, 0xa5, + 0x19, 0x5c, 0x4e, 0x5c, 0x09, 0x2e, 0xd2, 0xdb, 0xf6, 0x34, 0x69, 0x69, 0xfb, 0xd8, 0x70, 0x8e, 0x86, 0xb6, 0x41, + 0x77, 0xec, 0x0f, 0xcd, 0xc5, 0x22, 0xb6, 0x2e, 0x16, 0xc3, 0xce, 0xec, 0x47, 0x8b, 0x05, 0xc8, 0x01, 0xe0, 0xa8, + 0xdb, 0xf0, 0x31, 0x5b, 0x02, 0xa7, 0xd5, 0x34, 0x9b, 0x7a, 0x1b, 0x5e, 0x3d, 0x53, 0x3d, 0xbd, 0xe4, 0xf9, 0x33, + 0x61, 0xc6, 0x62, 0xc3, 0xf3, 0x67, 0xd6, 0x91, 0x53, 0x3d, 0x13, 0x4a, 0xb4, 0x2e, 0xa0, 0x19, 0x78, 0x4d, 0x01, + 0x23, 0x96, 0x4c, 0xa6, 0x54, 0x91, 0xc7, 0xbd, 0xe9, 0x46, 0x0d, 0x5e, 0x50, 0x38, 0x04, 0x52, 0x3a, 0xfd, 0xe2, + 0x39, 0xd3, 0xef, 0x5d, 0x3c, 0xef, 0x90, 0xb5, 0x0d, 0xd3, 0xe5, 0x66, 0x98, 0x0c, 0x4a, 0xff, 0x99, 0x99, 0x18, + 0x17, 0xd6, 0x24, 0x01, 0xc4, 0xbf, 0xb1, 0xdf, 0x21, 0x85, 0x9b, 0xf7, 0x97, 0xc3, 0xf8, 0x91, 0xf7, 0x63, 0x64, + 0x4f, 0xd2, 0x0c, 0xb1, 0x66, 0x52, 0x21, 0x77, 0x5f, 0xad, 0x7f, 0x4c, 0xec, 0x26, 0x7b, 0x60, 0x01, 0x88, 0xad, + 0x69, 0xab, 0x5b, 0xde, 0xef, 0x7b, 0xa6, 0x08, 0xf0, 0x83, 0xf2, 0x8f, 0xee, 0x0c, 0xc9, 0xa0, 0xec, 0xba, 0x21, + 0xc4, 0x83, 0xb2, 0x69, 0xda, 0xeb, 0x6d, 0xef, 0xcc, 0x63, 0x75, 0x9d, 0x76, 0x16, 0x57, 0x8b, 0x0c, 0xd2, 0xea, + 0x43, 0x76, 0x9c, 0xd9, 0x67, 0x47, 0x4b, 0xa5, 0xfb, 0x7d, 0x88, 0x88, 0x3b, 0xca, 0xda, 0x7e, 0xbb, 0x05, 0xd7, + 0x70, 0x34, 0x08, 0x5d, 0xd9, 0xdb, 0x65, 0xb4, 0x71, 0x21, 0x8e, 0x7b, 0xa6, 0xf3, 0x05, 0x5f, 0x1e, 0xa5, 0x9d, + 0x07, 0xa7, 0x7a, 0xa2, 0xcf, 0x4d, 0x77, 0x95, 0xc9, 0xb5, 0x0e, 0xab, 0x31, 0xa8, 0xcd, 0xc2, 0x16, 0xee, 0xc2, + 0x36, 0x3a, 0x68, 0xed, 0xcb, 0x82, 0x7f, 0xca, 0x00, 0x7c, 0xe9, 0xd9, 0xb2, 0xed, 0x35, 0x69, 0xf5, 0x46, 0x46, + 0x21, 0xb6, 0xb4, 0xbd, 0xfa, 0x74, 0x94, 0x8f, 0x9b, 0x13, 0x8a, 0x0b, 0x39, 0xca, 0x8f, 0x5e, 0x43, 0xd4, 0xb5, + 0xae, 0xe3, 0x62, 0xd1, 0xe1, 0xc6, 0x55, 0xb7, 0xdd, 0xb8, 0x7e, 0x40, 0xbc, 0x35, 0xda, 0xa4, 0x50, 0x2b, 0x63, + 0x47, 0xf0, 0xb2, 0x7c, 0x38, 0x64, 0x62, 0x38, 0x94, 0x90, 0xa9, 0x8f, 0xdd, 0x1b, 0x9a, 0xf6, 0xf9, 0x69, 0xeb, + 0x47, 0x2c, 0x35, 0x8e, 0x62, 0xc3, 0x3b, 0x7d, 0xe7, 0xb1, 0x35, 0xae, 0xe4, 0xcb, 0x60, 0xb6, 0x2b, 0xa8, 0xb6, + 0xc6, 0x1b, 0xf6, 0x72, 0xfe, 0x7d, 0x25, 0x95, 0xfc, 0xed, 0xcf, 0x70, 0x0d, 0x6f, 0x6d, 0xe9, 0xa0, 0xa9, 0x66, + 0x39, 0xcb, 0xf5, 0xbd, 0xe0, 0xf8, 0xe3, 0xee, 0x15, 0xc1, 0xe0, 0xf7, 0x74, 0x14, 0xe4, 0x62, 0xa9, 0xd6, 0x80, + 0x82, 0x74, 0x64, 0xc7, 0x54, 0x16, 0x18, 0x06, 0xf0, 0x86, 0x0c, 0x90, 0xc7, 0x14, 0xee, 0x86, 0x0a, 0x2f, 0xfc, + 0xa5, 0x22, 0xbb, 0x04, 0xb6, 0x35, 0xe3, 0x63, 0x86, 0x3b, 0x08, 0xf9, 0x47, 0xb0, 0x3b, 0xb6, 0x62, 0xb7, 0x6c, + 0xc1, 0x90, 0x6c, 0x1c, 0x87, 0x31, 0xe6, 0xe3, 0x49, 0x7c, 0x25, 0x26, 0xf1, 0x80, 0x47, 0xe8, 0x18, 0xb1, 0xe6, + 0xf5, 0x2c, 0x96, 0x03, 0xc8, 0xee, 0xb8, 0xd2, 0x01, 0x21, 0x34, 0x36, 0xb4, 0xe4, 0x4d, 0x61, 0x70, 0xb1, 0x63, + 0x9f, 0x91, 0x48, 0xc6, 0x21, 0x58, 0xb4, 0xaa, 0x81, 0x85, 0x89, 0xdd, 0xf2, 0x62, 0xb6, 0x9a, 0xe3, 0x3f, 0x87, + 0x03, 0x02, 0x60, 0x07, 0xfb, 0x86, 0xdd, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x77, 0x96, 0xa7, 0x0b, 0xbb, 0xe7, 0xd7, + 0x7c, 0xcc, 0xce, 0x7f, 0xf0, 0x20, 0x72, 0xf6, 0xfc, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xdb, 0xd4, 0xab, 0xd8, 0x2d, + 0x51, 0x10, 0xde, 0x82, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0x5e, 0xf3, 0x05, 0xc6, 0x8a, 0x9d, 0xa5, 0x4b, 0x0f, 0x33, + 0x42, 0xed, 0xe9, 0x7c, 0x59, 0xab, 0x49, 0xb8, 0xb9, 0x5a, 0x4e, 0x06, 0x83, 0x8d, 0xbf, 0xe3, 0x6b, 0xe0, 0x83, + 0x39, 0xff, 0xc1, 0xdb, 0x51, 0xb9, 0xf0, 0x9f, 0xd7, 0x59, 0xf2, 0xce, 0x67, 0xd7, 0x03, 0xbe, 0x00, 0xbc, 0x25, + 0x74, 0xe0, 0xba, 0xf7, 0x99, 0xc4, 0x6b, 0xbb, 0xd6, 0xd7, 0x08, 0x24, 0xf2, 0x05, 0x60, 0xc4, 0xc4, 0xfc, 0xbe, + 0x86, 0x08, 0x8c, 0x04, 0x7c, 0x5b, 0xb5, 0x47, 0xfc, 0x96, 0x1b, 0xc0, 0xaf, 0xcc, 0x67, 0x0f, 0x3c, 0xd4, 0x3f, + 0x13, 0x9f, 0xdd, 0xf0, 0xf7, 0xfc, 0x85, 0x27, 0x25, 0xe9, 0x72, 0xf6, 0x7e, 0x0e, 0xd7, 0x43, 0x29, 0x4f, 0x87, + 0xf4, 0xb3, 0x31, 0x18, 0x40, 0x28, 0x64, 0xde, 0x78, 0xc0, 0x9a, 0x14, 0xe2, 0x5f, 0xc0, 0xb7, 0xa3, 0x84, 0xcd, + 0x1b, 0x6f, 0xeb, 0x6b, 0x79, 0xf3, 0xc6, 0x7b, 0xf0, 0x29, 0x0a, 0xb0, 0x0a, 0x4a, 0x59, 0x60, 0x15, 0x84, 0x8d, + 0x36, 0xc2, 0x18, 0xb8, 0x7a, 0xd7, 0x18, 0xea, 0x7a, 0x8e, 0xd8, 0xb6, 0xd2, 0x77, 0xe1, 0x3b, 0xc8, 0x80, 0x0f, + 0xde, 0x14, 0x25, 0xd1, 0xe7, 0xd4, 0x14, 0x49, 0xeb, 0x9e, 0xfb, 0xad, 0x75, 0x47, 0x6b, 0x4a, 0x7d, 0xe4, 0x6a, + 0x7c, 0x38, 0xd4, 0x2f, 0x84, 0x16, 0x09, 0xa6, 0xa0, 0x71, 0x0d, 0xda, 0x02, 0x04, 0x7d, 0x1e, 0x20, 0x6b, 0x49, + 0xb1, 0xe0, 0xdb, 0x5f, 0x21, 0x06, 0xaf, 0x4c, 0xef, 0x5c, 0xae, 0x32, 0x12, 0xb6, 0x17, 0x7e, 0x39, 0xac, 0xfd, + 0x89, 0x53, 0x0b, 0x4b, 0xab, 0x39, 0xa8, 0x9f, 0xd9, 0x72, 0x9c, 0xaa, 0xda, 0xbf, 0x25, 0x49, 0xb5, 0xab, 0xb4, + 0x9c, 0xde, 0xdb, 0x37, 0x5d, 0x26, 0xd8, 0xd8, 0x0f, 0xa8, 0x3a, 0xb2, 0x1a, 0x76, 0x5f, 0xa8, 0x2f, 0x7a, 0x4a, + 0x26, 0x34, 0x1f, 0x55, 0x34, 0xcf, 0xee, 0x37, 0x3b, 0xea, 0x3f, 0xbd, 0x1c, 0x8a, 0x00, 0xc9, 0x2a, 0x2d, 0x96, + 0x22, 0x67, 0x63, 0x3f, 0x1e, 0x26, 0x99, 0x0a, 0x2f, 0x48, 0x47, 0x77, 0xbf, 0x71, 0x7f, 0xcb, 0x0d, 0x64, 0x85, + 0x56, 0x6d, 0x30, 0x56, 0x8a, 0x96, 0xc1, 0xfa, 0x6a, 0xdc, 0xef, 0x8b, 0xab, 0xf1, 0x54, 0x04, 0x35, 0x10, 0x17, + 0x89, 0x17, 0xe3, 0x69, 0x4d, 0x2c, 0xa9, 0x5d, 0x81, 0x31, 0x7a, 0x5c, 0x15, 0xb5, 0x4f, 0xfd, 0x02, 0x42, 0x91, + 0x6a, 0xcd, 0x1c, 0x6b, 0xdc, 0x18, 0x11, 0x77, 0x58, 0xb9, 0x76, 0x6a, 0xaf, 0x03, 0xb0, 0xbc, 0x1a, 0x17, 0x84, + 0x4d, 0x72, 0xec, 0x5c, 0xc0, 0x6a, 0x34, 0xa4, 0xda, 0x0d, 0xb7, 0x5e, 0x76, 0x7e, 0xf3, 0x38, 0xb1, 0xb5, 0x11, + 0x6e, 0x29, 0xa0, 0x8c, 0xf2, 0x1b, 0xcb, 0x09, 0xbb, 0x53, 0xbd, 0x23, 0x55, 0x3b, 0xe2, 0xc4, 0x05, 0x2c, 0x37, + 0x3c, 0xb5, 0xfa, 0x26, 0x06, 0x27, 0x42, 0xd5, 0x4a, 0xc7, 0x6b, 0x3f, 0xe2, 0x7e, 0x75, 0x5f, 0xf7, 0x4a, 0xf0, + 0x93, 0x90, 0xd7, 0x6f, 0x79, 0x07, 0x80, 0x15, 0x1f, 0xf2, 0x62, 0x5a, 0x38, 0x5a, 0x97, 0x41, 0x19, 0x20, 0x42, + 0x33, 0x00, 0x3a, 0xb9, 0x3a, 0x88, 0xd2, 0xc0, 0x15, 0x77, 0x88, 0xf0, 0xd3, 0xe8, 0x59, 0xfe, 0x22, 0x7c, 0x56, + 0x4d, 0xc3, 0x8b, 0x3c, 0x88, 0x2e, 0xaa, 0x20, 0x7a, 0x56, 0x5d, 0x85, 0xcf, 0xf2, 0x69, 0x74, 0x91, 0x07, 0xe1, + 0x45, 0xd5, 0xd8, 0x77, 0xed, 0xee, 0x9e, 0x90, 0xb7, 0x5d, 0xfd, 0x91, 0x73, 0x65, 0x4f, 0x99, 0x9e, 0x9f, 0xd7, + 0x7a, 0xa5, 0x76, 0x9b, 0xeb, 0x35, 0x6a, 0xa6, 0x3e, 0xca, 0xfe, 0x66, 0x1b, 0x0b, 0x8f, 0xe6, 0x10, 0xfa, 0x8c, + 0xb4, 0x98, 0x7b, 0x9c, 0xeb, 0xcd, 0x9e, 0x14, 0x06, 0x46, 0x4c, 0x2a, 0x19, 0x39, 0xbd, 0xc0, 0x45, 0xa8, 0x42, + 0x0c, 0x6b, 0xe9, 0x6a, 0x9f, 0x75, 0xe9, 0x0d, 0xd4, 0x35, 0xc5, 0xbe, 0x86, 0x0c, 0xbc, 0x68, 0x7a, 0x19, 0x8c, + 0x01, 0x39, 0x02, 0xef, 0xf8, 0x6c, 0x09, 0x07, 0xe6, 0x1a, 0xa0, 0x6f, 0x1e, 0xf5, 0x75, 0xb9, 0xe3, 0x6b, 0xd5, + 0x37, 0xd3, 0xf5, 0x48, 0x29, 0x3f, 0x56, 0xfc, 0xee, 0xe2, 0x39, 0xbb, 0xe5, 0x1a, 0x15, 0xe5, 0x17, 0xbd, 0x58, + 0xef, 0x81, 0xab, 0xee, 0x17, 0xb8, 0xcd, 0xe2, 0xb1, 0x2b, 0x0f, 0x58, 0xb6, 0x65, 0x0f, 0xec, 0x86, 0xbd, 0x67, + 0x4f, 0xd8, 0x5b, 0xf6, 0x8e, 0xfd, 0x84, 0xaa, 0x0d, 0x25, 0xe4, 0xf9, 0x0b, 0x7e, 0x2b, 0x4d, 0x8f, 0x12, 0x95, + 0xec, 0xc1, 0x36, 0xd3, 0x0c, 0x37, 0xec, 0x3d, 0x5f, 0x0c, 0x57, 0xec, 0x2d, 0x64, 0x43, 0x99, 0x78, 0xb0, 0x62, + 0x3f, 0x71, 0x05, 0x62, 0xa6, 0xcf, 0xc2, 0xd2, 0x12, 0x15, 0x4d, 0x99, 0x28, 0x43, 0xbf, 0xe5, 0xf8, 0x22, 0xfb, + 0x09, 0x8b, 0x90, 0x9f, 0x19, 0xae, 0xd8, 0x03, 0x5f, 0x0c, 0x56, 0xec, 0xbd, 0x36, 0x10, 0x0d, 0x36, 0x6e, 0x69, + 0x84, 0x64, 0xa5, 0xcb, 0x92, 0xd2, 0xf4, 0xd6, 0xbe, 0x06, 0x6e, 0xd8, 0x0d, 0xd6, 0xee, 0x09, 0x16, 0x8d, 0x02, + 0xff, 0x60, 0xc5, 0xde, 0x71, 0x09, 0xa0, 0xe6, 0x96, 0x27, 0xbd, 0x42, 0x75, 0x81, 0x74, 0x3f, 0x78, 0xc2, 0xe9, + 0x45, 0xf6, 0x0e, 0xcb, 0xa0, 0xaf, 0x0c, 0x57, 0x6c, 0x8b, 0xb5, 0xbb, 0x31, 0x96, 0x2d, 0xab, 0x7a, 0x12, 0x11, + 0x18, 0x05, 0x95, 0xd2, 0xf2, 0x6f, 0xc4, 0xb2, 0xa9, 0x9b, 0x06, 0xb5, 0xa1, 0x3f, 0x1f, 0x8c, 0xfe, 0xe2, 0xeb, + 0x77, 0x3f, 0x78, 0xa5, 0xbe, 0xf6, 0xfe, 0xe2, 0xb8, 0x56, 0x96, 0xe8, 0x5a, 0xf9, 0x2b, 0x2f, 0x67, 0xbf, 0xcc, + 0x27, 0xba, 0x96, 0xb4, 0xc3, 0x90, 0xaf, 0xe9, 0xec, 0x97, 0x0e, 0x67, 0xcb, 0x5f, 0x7d, 0xbf, 0x31, 0x5d, 0xac, + 0x3e, 0xab, 0x7b, 0xf7, 0x61, 0xb0, 0x69, 0x9c, 0x7a, 0xef, 0x4e, 0xd7, 0x1b, 0x9b, 0x59, 0x6b, 0xcf, 0xcc, 0xff, + 0xe1, 0x4a, 0x6f, 0x71, 0xe8, 0x6e, 0xf8, 0x76, 0xb8, 0xb1, 0x47, 0x41, 0x7e, 0x5f, 0x2a, 0x8d, 0xb3, 0x9a, 0xbf, + 0xf4, 0x3a, 0xa5, 0x58, 0x40, 0x34, 0xfa, 0x64, 0x24, 0xa1, 0x4b, 0x66, 0xe2, 0x19, 0xe2, 0x8b, 0x0c, 0x90, 0xb9, + 0x40, 0x34, 0xbb, 0xe7, 0xe3, 0xc9, 0xfd, 0x55, 0x3c, 0xb9, 0x1f, 0xf0, 0x4f, 0xa6, 0x05, 0xed, 0xc5, 0x76, 0xef, + 0xb3, 0x5f, 0x79, 0x61, 0x2f, 0xc7, 0x5f, 0x7c, 0xf6, 0x45, 0xb8, 0x2b, 0xf4, 0x17, 0x9f, 0xbd, 0x13, 0xfc, 0xd7, + 0x91, 0x26, 0xca, 0x60, 0xef, 0x6a, 0xfe, 0xeb, 0x08, 0x19, 0x3f, 0xd8, 0x67, 0xc1, 0xbf, 0x80, 0xef, 0x77, 0x95, + 0xa0, 0x55, 0xfc, 0x73, 0xad, 0x7e, 0xbe, 0x97, 0x71, 0x39, 0xf0, 0x26, 0xb4, 0x82, 0xde, 0xbc, 0xad, 0xe5, 0x4f, + 0xe2, 0xe1, 0x48, 0xd5, 0x53, 0xc3, 0x3f, 0x8b, 0xc5, 0x2c, 0xea, 0xa3, 0x74, 0x2a, 0x6f, 0x72, 0xcd, 0x33, 0x69, + 0x5d, 0xbe, 0x87, 0x50, 0xe0, 0x6b, 0x1b, 0xa2, 0x60, 0xc7, 0x71, 0x23, 0xb8, 0x66, 0xef, 0x84, 0xcf, 0xb2, 0xe9, + 0x96, 0xdf, 0xf0, 0x27, 0xfc, 0x1d, 0xdf, 0x05, 0x0f, 0xfc, 0x3d, 0x7f, 0xcb, 0x7f, 0xe2, 0x3b, 0xb6, 0x94, 0x68, + 0xa7, 0xf5, 0xf6, 0x32, 0xd8, 0xb2, 0x7a, 0x77, 0x19, 0x3c, 0xb0, 0x7a, 0xfb, 0x3c, 0xb8, 0x61, 0xf5, 0xee, 0x79, + 0xf0, 0x9e, 0x6d, 0x2f, 0x83, 0x27, 0x6c, 0x77, 0x19, 0xbc, 0x65, 0xdb, 0xe7, 0xc1, 0x3b, 0xb6, 0x7b, 0x1e, 0xfc, + 0x24, 0x31, 0x1e, 0xde, 0x09, 0xc9, 0x71, 0xf2, 0xae, 0x66, 0x86, 0x4f, 0x37, 0xf8, 0x2c, 0xac, 0x5f, 0x54, 0xc7, + 0xe0, 0x73, 0xcd, 0x74, 0x8b, 0x03, 0x21, 0x98, 0x6e, 0x6f, 0x70, 0x4b, 0x4f, 0x4c, 0xab, 0x82, 0x54, 0xb0, 0xae, + 0x76, 0x06, 0x8b, 0xba, 0x69, 0x9d, 0xc9, 0x8e, 0x5f, 0x62, 0xdc, 0xe1, 0x97, 0xb8, 0x60, 0xcb, 0xa6, 0xd3, 0x49, + 0xe7, 0xf4, 0x49, 0xa0, 0x37, 0x7f, 0xbd, 0xeb, 0x57, 0xd2, 0x77, 0xa6, 0x68, 0x78, 0xae, 0xb4, 0xc6, 0xad, 0x9d, + 0x3e, 0xb4, 0x76, 0x7a, 0x26, 0x55, 0x68, 0x11, 0x8b, 0xca, 0xa2, 0xaa, 0x90, 0x49, 0x3c, 0xc8, 0xb4, 0x3e, 0x2d, + 0x61, 0xa4, 0xc8, 0x04, 0x34, 0xfa, 0x82, 0x8e, 0x81, 0x9c, 0x2c, 0x0a, 0x6c, 0xc9, 0x37, 0x83, 0x84, 0xad, 0x79, + 0x3c, 0x1d, 0x26, 0xc1, 0x92, 0xdd, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x52, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, + 0x79, 0x6f, 0x95, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x56, 0xe9, 0x0d, 0x7e, 0xeb, 0xec, 0xe7, 0x6b, 0xb5, 0xbf, 0x83, + 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xaf, 0xec, 0x2d, 0x7d, 0x6b, + 0xb6, 0xe9, 0xff, 0xb4, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xc6, 0x9f, 0x3c, + 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xc7, 0x3f, 0x8d, 0xb6, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, + 0x68, 0xef, 0xe4, 0x95, 0xbd, 0x23, 0x6e, 0x79, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, + 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xab, 0xd9, 0xa7, 0xf9, 0x64, 0xcb, 0x8f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, + 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x3b, 0x7e, 0xbc, 0x89, 0x0f, 0xff, 0xe3, + 0x4a, 0xef, 0xbe, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, 0xf8, 0x13, 0xcd, 0xd2, 0x20, 0xb2, 0x14, 0x8a, 0x3f, 0x99, 0x69, 0xa7, 0xee, 0x54, 0x59, 0xdd, 0x2d, 0xdf, 0xe2, - 0x1e, 0x7f, 0xc7, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0xef, 0x6e, 0x16, 0x93, 0xc1, 0xe0, 0xce, 0x3f, 0xdc, 0xf3, 0x70, - 0x76, 0x37, 0x67, 0x6f, 0xf9, 0x3d, 0x2d, 0xa6, 0x89, 0x6a, 0x7a, 0xf1, 0x98, 0xe0, 0x75, 0xe7, 0xfb, 0x13, 0x8b, - 0xff, 0xd5, 0xbe, 0x68, 0xde, 0xf9, 0x03, 0x69, 0x8d, 0x96, 0xbb, 0xfa, 0xfb, 0xc7, 0x15, 0x13, 0x77, 0x20, 0x5e, - 0xbc, 0xb7, 0x35, 0x0d, 0x6f, 0xf8, 0x47, 0xef, 0xad, 0x3f, 0x7d, 0xab, 0x63, 0x6e, 0x26, 0xea, 0x48, 0x7a, 0x73, - 0xf5, 0x8c, 0xfd, 0xca, 0x3f, 0xc9, 0xe3, 0xe4, 0x9d, 0x90, 0x93, 0xf6, 0x16, 0xb9, 0x9b, 0xe8, 0x94, 0xf8, 0xe2, - 0x26, 0x12, 0x16, 0x04, 0xc2, 0x70, 0xd4, 0xfc, 0x61, 0x52, 0x4e, 0xbd, 0x3d, 0x70, 0xbb, 0x72, 0x5b, 0xff, 0x7c, - 0xc7, 0x39, 0x5f, 0x0c, 0xaf, 0xa7, 0x5f, 0xba, 0x5d, 0x7a, 0x54, 0x34, 0x9b, 0x0a, 0x74, 0xbb, 0xc3, 0xd8, 0xab, - 0xb3, 0x99, 0x65, 0x2e, 0xf9, 0xd2, 0x97, 0xda, 0xcc, 0x3c, 0xa6, 0xf7, 0x9b, 0x69, 0x86, 0x44, 0xbe, 0x40, 0xc8, - 0x74, 0x3c, 0xae, 0x2e, 0xb1, 0x3c, 0x3e, 0x7c, 0xf3, 0xf4, 0xc9, 0xe0, 0x09, 0x46, 0x6e, 0x59, 0xd1, 0x20, 0x5f, - 0xf8, 0x30, 0xab, 0x5b, 0xb7, 0x8d, 0xab, 0x67, 0xc3, 0x5f, 0x20, 0x6f, 0xd0, 0xf5, 0xd0, 0x14, 0xd1, 0x2a, 0xbf, - 0xa3, 0xe8, 0x33, 0x25, 0x07, 0x1d, 0x4f, 0xa0, 0x76, 0x48, 0x81, 0xfb, 0xe5, 0x29, 0x07, 0xfd, 0x06, 0x96, 0xda, - 0xef, 0x5f, 0x7e, 0x22, 0x1e, 0x69, 0x18, 0xef, 0x1f, 0xc2, 0xe8, 0x8f, 0xb8, 0x2c, 0x36, 0x70, 0xba, 0x0e, 0xe0, - 0x73, 0x4f, 0xf5, 0xed, 0x6b, 0xe5, 0xfb, 0x7e, 0xe0, 0xed, 0xf8, 0x2d, 0xfb, 0xc2, 0xbd, 0xeb, 0xe1, 0x1b, 0xff, - 0xe9, 0x13, 0x10, 0x9d, 0x60, 0x5c, 0x3e, 0x63, 0x24, 0x6c, 0x47, 0x31, 0x6a, 0x15, 0x7e, 0xae, 0x21, 0x44, 0xeb, - 0x13, 0x32, 0x76, 0x41, 0xfa, 0x07, 0x05, 0xe8, 0x27, 0x04, 0x56, 0x93, 0xd4, 0x28, 0x30, 0x89, 0xef, 0x6a, 0x48, - 0x20, 0x05, 0x0b, 0x84, 0xde, 0x40, 0xf1, 0xa9, 0xe0, 0x5f, 0x86, 0x9f, 0x49, 0xf2, 0x5b, 0xd4, 0x7c, 0x0c, 0x7f, - 0xc3, 0xd0, 0x4c, 0xaa, 0x87, 0xb4, 0x8e, 0x12, 0xef, 0x27, 0xff, 0x10, 0x85, 0x95, 0x50, 0xc7, 0x42, 0x90, 0x8a, - 0x21, 0x17, 0xe2, 0xea, 0xd9, 0xe4, 0xae, 0x14, 0xe1, 0x1f, 0x13, 0x7c, 0x26, 0x17, 0x9a, 0x7c, 0x46, 0x4f, 0x1a, - 0xf9, 0xfe, 0x83, 0x7c, 0x5f, 0x76, 0x6a, 0xb0, 0xa8, 0x87, 0xfc, 0xae, 0x76, 0xdf, 0x97, 0x53, 0x82, 0x1e, 0xd9, - 0x0f, 0x68, 0x0a, 0x06, 0x6a, 0x02, 0x52, 0x86, 0xe0, 0x0e, 0xae, 0xfa, 0x9e, 0x2a, 0xc8, 0x97, 0xdf, 0xfb, 0x2c, - 0x64, 0xb8, 0xca, 0x82, 0x90, 0xe4, 0x52, 0x21, 0x85, 0x8d, 0xbb, 0x7a, 0xf0, 0x59, 0x63, 0x92, 0x48, 0xc8, 0x29, - 0x01, 0x49, 0xd2, 0xde, 0x40, 0x92, 0x88, 0xe9, 0x3f, 0x5c, 0x27, 0x4d, 0xb3, 0x96, 0xd2, 0x0d, 0x71, 0xaa, 0xbe, - 0x45, 0x9a, 0xb3, 0xe0, 0x3d, 0x83, 0xa5, 0x23, 0xc5, 0x8a, 0x2f, 0xc6, 0x60, 0xac, 0x83, 0x85, 0x56, 0xb2, 0xb8, - 0x5f, 0x25, 0x61, 0x1a, 0x89, 0x2a, 0xef, 0x84, 0xfc, 0xf9, 0x4f, 0x25, 0xfe, 0xe8, 0x2d, 0x0d, 0x44, 0x20, 0xf8, - 0x01, 0x5a, 0x0f, 0x58, 0xe3, 0xc1, 0x4f, 0xac, 0x2e, 0xc3, 0xbc, 0xca, 0xa8, 0xbc, 0xd9, 0x9e, 0xed, 0xe6, 0x4c, - 0x55, 0x2d, 0xf8, 0x2c, 0x0c, 0x2d, 0xda, 0xc5, 0xba, 0x39, 0xbb, 0xcd, 0x1b, 0x7c, 0x67, 0x92, 0x44, 0x6a, 0x29, - 0x89, 0xb4, 0xd5, 0xf5, 0xe9, 0xd2, 0xeb, 0x16, 0x15, 0x34, 0x46, 0x80, 0x5e, 0x92, 0xee, 0x2a, 0x9f, 0x50, 0xbc, - 0xb2, 0x1a, 0x56, 0xc3, 0x4b, 0x87, 0x22, 0x8c, 0xb5, 0x37, 0xe7, 0xf2, 0xec, 0x0e, 0xac, 0x47, 0x68, 0xed, 0xca, - 0xd5, 0x21, 0x6c, 0x3f, 0xd1, 0x7b, 0x4e, 0xae, 0xfe, 0x06, 0x54, 0x81, 0x73, 0x47, 0x43, 0x7d, 0xd2, 0x4e, 0x21, - 0xdb, 0x79, 0xb0, 0x24, 0xa8, 0x4a, 0xc9, 0x4d, 0xb9, 0x16, 0xa5, 0x94, 0x29, 0x5f, 0xcb, 0x6c, 0x65, 0xf7, 0xc9, - 0x00, 0xe2, 0xd9, 0xa0, 0x40, 0x72, 0x51, 0x5b, 0xcd, 0x41, 0xfa, 0x68, 0x96, 0x38, 0xd6, 0x0e, 0x0a, 0x2f, 0xcb, - 0xc1, 0xcc, 0x65, 0x2e, 0x97, 0x83, 0x82, 0x55, 0x7a, 0xab, 0x99, 0x66, 0xaa, 0x2f, 0x2a, 0x7b, 0x9b, 0xf1, 0x32, - 0xfd, 0x37, 0x4b, 0x06, 0x3c, 0xba, 0x7a, 0xe6, 0x07, 0x90, 0x26, 0x79, 0x1d, 0x20, 0x09, 0x36, 0x07, 0xbb, 0xd8, - 0x61, 0xd8, 0x2a, 0x56, 0xf6, 0xe4, 0xf9, 0x72, 0x87, 0xa6, 0x5c, 0xc2, 0x48, 0x4e, 0xcc, 0xa5, 0xd4, 0xf7, 0x25, - 0xd5, 0x0d, 0x05, 0x27, 0x9b, 0x26, 0xa0, 0x14, 0xd0, 0x6e, 0xc1, 0x7f, 0xe1, 0x53, 0x43, 0xa7, 0x05, 0x58, 0x6a, - 0xbb, 0x01, 0xff, 0x85, 0x7e, 0xb1, 0x7d, 0x44, 0xfd, 0xc0, 0x3c, 0x38, 0x98, 0xb5, 0x95, 0x31, 0x20, 0x22, 0x71, - 0x05, 0x79, 0x24, 0xf8, 0x41, 0xb1, 0xa7, 0xcb, 0xc4, 0x81, 0x33, 0xc5, 0xc5, 0x52, 0x6a, 0x33, 0xf3, 0xda, 0x6f, - 0xa9, 0x89, 0x37, 0x51, 0x12, 0x15, 0xb6, 0x43, 0x1a, 0xbd, 0xa4, 0x8c, 0xa9, 0x82, 0x0d, 0xd1, 0x7d, 0xdd, 0x04, - 0x53, 0xe0, 0x4d, 0x55, 0x05, 0x44, 0xa8, 0xbd, 0xc8, 0xf2, 0xfc, 0xa6, 0x0b, 0xac, 0x2e, 0xf8, 0xd4, 0x98, 0x66, - 0x17, 0xac, 0xe4, 0x6a, 0x26, 0x7d, 0xe6, 0xed, 0x40, 0x0b, 0x79, 0x97, 0x97, 0x45, 0x2b, 0x74, 0x3d, 0x88, 0x16, - 0xfe, 0x41, 0x73, 0x3c, 0x7a, 0xb6, 0xad, 0xa6, 0x36, 0xfb, 0x5a, 0x8b, 0x05, 0x32, 0x10, 0x0d, 0x7d, 0xa1, 0x62, - 0x14, 0xee, 0x2a, 0xcd, 0xd5, 0x6a, 0x5f, 0x95, 0x41, 0x02, 0x13, 0x41, 0xd6, 0xb2, 0xf0, 0x1e, 0xdd, 0xab, 0x47, - 0x9a, 0x57, 0x12, 0x3c, 0x73, 0xf1, 0x17, 0x00, 0x42, 0x79, 0x92, 0x90, 0x03, 0x72, 0x00, 0x7f, 0x4b, 0x51, 0x2a, - 0x0d, 0xf0, 0xcf, 0xea, 0x72, 0x6c, 0xeb, 0xfb, 0x3b, 0xad, 0x62, 0x70, 0xfd, 0xf9, 0xba, 0xeb, 0x59, 0x3b, 0xc4, - 0x39, 0xb7, 0xd5, 0x6b, 0xcb, 0x34, 0x8f, 0x91, 0xba, 0x06, 0xe0, 0x4e, 0xa4, 0x47, 0x20, 0x92, 0x99, 0x68, 0x90, - 0xb3, 0xe7, 0x7c, 0x3c, 0x15, 0x8f, 0x49, 0x7b, 0xb9, 0xef, 0x9b, 0x0b, 0x7d, 0x30, 0xc6, 0xbe, 0x05, 0x0d, 0xe2, - 0xa3, 0xd5, 0xd6, 0x0a, 0xc4, 0x7a, 0xa7, 0xd4, 0x87, 0x6e, 0x8c, 0x82, 0x0e, 0x1e, 0x71, 0x23, 0x17, 0x1c, 0xdb, - 0x5d, 0x5b, 0x4f, 0xe9, 0x2b, 0x00, 0x73, 0x1d, 0xa8, 0x64, 0x18, 0xa4, 0x2e, 0x13, 0x85, 0x49, 0x7e, 0x99, 0x90, - 0x84, 0x88, 0xea, 0x6c, 0x39, 0x4a, 0x95, 0x69, 0x01, 0x97, 0x19, 0x19, 0x60, 0x36, 0x69, 0xd6, 0x4f, 0x2e, 0x5f, - 0x62, 0x18, 0x01, 0xf1, 0x33, 0xfa, 0xb1, 0x56, 0x89, 0x97, 0x8c, 0xee, 0x1c, 0x75, 0x83, 0x2a, 0xc9, 0x5c, 0xbf, - 0xb9, 0x9d, 0x45, 0xca, 0xbc, 0x60, 0xb8, 0x5d, 0xa5, 0xf9, 0x87, 0xb0, 0x4e, 0xf0, 0xdb, 0x00, 0x95, 0xf4, 0xa9, - 0xf0, 0xa2, 0x11, 0x40, 0xa8, 0xef, 0x55, 0x19, 0x9f, 0x0a, 0x2f, 0x1b, 0xed, 0x58, 0x46, 0x29, 0x54, 0x17, 0xcc, - 0x6e, 0x4d, 0x17, 0xa2, 0x5b, 0x55, 0x03, 0x6d, 0xe0, 0xda, 0x15, 0x52, 0xba, 0x81, 0x6a, 0x57, 0x6e, 0x58, 0x80, - 0x68, 0x33, 0x11, 0x18, 0x2e, 0xff, 0x3e, 0x7f, 0xa9, 0x62, 0x78, 0xfa, 0xfd, 0xd0, 0x3b, 0xec, 0x82, 0x68, 0xb4, - 0xbb, 0x66, 0xfb, 0x20, 0x1a, 0xed, 0xaf, 0x1b, 0x46, 0xbf, 0x9f, 0xd1, 0xef, 0x67, 0x0d, 0xe8, 0x48, 0x84, 0x09, - 0xb3, 0xd7, 0x6f, 0xd4, 0xf2, 0x95, 0x5a, 0xbf, 0x53, 0xcb, 0x97, 0x6a, 0x78, 0xeb, 0x40, 0x12, 0x41, 0x64, 0xa9, - 0x6a, 0x1e, 0x24, 0x45, 0xaa, 0xa5, 0xcb, 0x31, 0x5a, 0x8c, 0xa8, 0xa5, 0xac, 0x39, 0xd5, 0x89, 0xb4, 0x73, 0x50, - 0x32, 0xc0, 0xd1, 0xe2, 0xaa, 0xc6, 0x74, 0xb3, 0xa2, 0x25, 0x10, 0x23, 0xac, 0x6c, 0xcb, 0xc5, 0x4d, 0xea, 0xa3, - 0x2b, 0xf2, 0x6d, 0xcb, 0x95, 0x6f, 0x5b, 0xc1, 0xab, 0xaf, 0x28, 0x94, 0x4b, 0xae, 0x95, 0xed, 0xd3, 0x42, 0x29, - 0x94, 0x71, 0x0d, 0xb6, 0xf6, 0x4d, 0x60, 0xc8, 0x7c, 0xa4, 0xa8, 0xb1, 0xbd, 0x68, 0x94, 0x43, 0x90, 0xad, 0x83, - 0x51, 0xa7, 0x2c, 0x58, 0x7c, 0xbb, 0x43, 0x06, 0x32, 0xd0, 0x51, 0xd5, 0xc6, 0xab, 0x9d, 0x95, 0xfe, 0xb0, 0xbc, - 0x7a, 0xc6, 0x12, 0x2b, 0x9d, 0xfc, 0xa6, 0x42, 0x7f, 0x10, 0xa2, 0x6f, 0xca, 0x96, 0x83, 0x17, 0x5d, 0x6c, 0x65, - 0x40, 0xbc, 0x61, 0x7a, 0x6f, 0x6b, 0x25, 0xcb, 0x5d, 0x53, 0xbe, 0x98, 0xf1, 0x84, 0xe3, 0xe8, 0xcb, 0xd5, 0x22, - 0xac, 0xd5, 0x22, 0x3b, 0x01, 0x1e, 0x5a, 0xab, 0xa5, 0x90, 0xab, 0x45, 0x38, 0x33, 0x5d, 0xa8, 0x99, 0x9e, 0x81, - 0xe6, 0x51, 0xa8, 0x59, 0x9e, 0x00, 0x16, 0xbc, 0x30, 0x33, 0x5c, 0x98, 0x19, 0x8e, 0x43, 0x6a, 0x9c, 0x1e, 0xf4, - 0x5e, 0xe7, 0x9e, 0x5b, 0xee, 0x46, 0xa7, 0x61, 0xde, 0x4e, 0x36, 0x98, 0xd3, 0x83, 0x70, 0x02, 0xf1, 0x81, 0x25, - 0x02, 0xf4, 0x68, 0x58, 0x1d, 0x35, 0x54, 0x8e, 0xe2, 0xcb, 0x02, 0x90, 0x2c, 0x09, 0x40, 0xf2, 0xa0, 0xc6, 0xb9, - 0xb4, 0xfc, 0xba, 0x4a, 0x42, 0x8e, 0xc8, 0x78, 0x29, 0xed, 0xee, 0x09, 0x2f, 0x47, 0x46, 0x68, 0x9e, 0x2c, 0x52, - 0xaf, 0x62, 0x19, 0x1b, 0x23, 0x70, 0x51, 0xe8, 0x37, 0x79, 0xbf, 0x9f, 0x96, 0x5e, 0x45, 0xed, 0xfc, 0x04, 0xfe, - 0x96, 0xe7, 0xce, 0x22, 0x47, 0xc8, 0xab, 0x91, 0x49, 0x58, 0x5e, 0x2a, 0xf5, 0xf4, 0x25, 0xcc, 0xa0, 0xee, 0xde, - 0x28, 0x00, 0xd7, 0x42, 0x39, 0xd5, 0x96, 0x70, 0x65, 0xaa, 0x0c, 0xf6, 0x79, 0xc8, 0x65, 0x68, 0x87, 0x44, 0x1e, - 0x29, 0xac, 0xfb, 0xf6, 0xd5, 0xb3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x8f, 0x00, 0x73, 0x30, 0xf5, 0xa2, - 0x01, 0x2f, 0xd5, 0x9c, 0xf9, 0xe8, 0x55, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x53, 0xf9, 0xc8, 0xf8, - 0x96, 0xf9, 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, - 0x6c, 0x50, 0x09, 0xb6, 0x0d, 0xdf, 0x48, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, - 0x1b, 0xb3, 0x31, 0x2b, 0xd4, 0xce, 0x53, 0xc9, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, - 0x71, 0xce, 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, - 0xa6, 0x25, 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, - 0xe8, 0x95, 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x2b, - 0xfe, 0x42, 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd0, 0xb4, 0x04, - 0x75, 0x80, 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x25, 0xe7, 0xef, 0x6a, 0x43, - 0x84, 0x8c, 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, - 0xc0, 0xe3, 0xaa, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x9c, 0xf6, 0x4e, 0xd3, 0xb0, 0xc3, 0x17, 0xa0, 0x29, 0x86, 0x72, - 0x3c, 0xdf, 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xce, 0x42, 0xda, 0x96, - 0x63, 0xb4, 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xca, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x79, 0xd5, 0x63, 0x36, - 0xc9, 0x8a, 0x45, 0xae, 0x22, 0xce, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, - 0x41, 0xc9, 0x72, 0x59, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xde, 0x9c, - 0x53, 0xa8, 0x7d, 0xc5, 0xc3, 0xea, 0xfc, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, - 0x7c, 0xe7, 0xab, 0x74, 0x45, 0xa1, 0x3b, 0xce, 0x4c, 0x3c, 0x57, 0x81, 0xb1, 0x6f, 0xed, 0x08, 0x0a, 0x87, 0xa6, - 0xeb, 0x80, 0xc3, 0x34, 0x3a, 0x61, 0xf1, 0x4f, 0xe9, 0x38, 0x79, 0x55, 0x2b, 0x44, 0x92, 0xbf, 0x0b, 0x17, 0x86, - 0xc4, 0x82, 0xbc, 0x24, 0xd4, 0x11, 0x19, 0xb1, 0x1a, 0x15, 0x1b, 0xa1, 0xa2, 0xe2, 0x14, 0x8f, 0xb7, 0x0a, 0x8a, - 0x4b, 0x51, 0xaa, 0x94, 0x8a, 0xdc, 0xa8, 0x14, 0x10, 0xcb, 0x06, 0xde, 0x2d, 0xe0, 0x00, 0x08, 0x3a, 0xcb, 0xfd, - 0xc6, 0x76, 0xb7, 0x91, 0xf9, 0xcc, 0x34, 0x4f, 0xab, 0x0f, 0xea, 0xef, 0xf7, 0x4b, 0x8c, 0xad, 0xf1, 0xf4, 0xf7, - 0x6d, 0x5a, 0x70, 0xf3, 0x37, 0x0c, 0xd1, 0x0a, 0x10, 0x31, 0x4b, 0x7b, 0x28, 0x64, 0xc1, 0x84, 0x65, 0xa8, 0xca, - 0x53, 0x8e, 0x7a, 0xd5, 0xe4, 0x0e, 0x20, 0xd4, 0xd0, 0xaf, 0x8d, 0x4e, 0x75, 0x55, 0x82, 0xf0, 0x7d, 0x57, 0xa8, - 0xc7, 0xe6, 0x80, 0x27, 0x03, 0xe0, 0xaf, 0xc8, 0x6b, 0x3d, 0xb6, 0x7f, 0xd0, 0x1b, 0xf5, 0x06, 0x08, 0xa2, 0x73, - 0x59, 0xf8, 0x27, 0x9c, 0xeb, 0xd4, 0x9f, 0x71, 0x21, 0x88, 0x6f, 0x3d, 0x09, 0xef, 0xc5, 0x45, 0x1a, 0x07, 0x17, - 0xbd, 0x81, 0xb9, 0x08, 0x14, 0x17, 0x69, 0x7e, 0x01, 0x61, 0xf9, 0x88, 0x89, 0x58, 0xb3, 0x15, 0xc0, 0x04, 0x96, - 0x3a, 0x0e, 0x59, 0x75, 0x6c, 0xbf, 0xff, 0x7a, 0x64, 0xc8, 0xd2, 0x11, 0x06, 0x46, 0xff, 0x06, 0x14, 0xa1, 0x12, - 0x96, 0x99, 0xed, 0xc1, 0xa4, 0xab, 0x3d, 0xab, 0xe7, 0xcd, 0x36, 0xef, 0xea, 0x1d, 0xab, 0x69, 0x15, 0x35, 0x2d, - 0xb7, 0x9a, 0x36, 0xa9, 0xa0, 0x66, 0xa2, 0xdf, 0xd7, 0xa0, 0xa8, 0xd5, 0x1c, 0xc0, 0xd8, 0x30, 0xf9, 0xf5, 0x2c, - 0x9f, 0xf7, 0xfb, 0x9e, 0x7c, 0x04, 0xbf, 0x90, 0xad, 0xcc, 0xad, 0xb1, 0x7c, 0xfa, 0x8a, 0x48, 0xcc, 0x0c, 0xcc, - 0xd1, 0xea, 0x04, 0xdf, 0xeb, 0x56, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x35, 0x0c, 0x9e, 0x27, 0x7c, 0x70, - 0x91, 0xa3, 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x6b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, - 0x78, 0x90, 0xfd, 0xfe, 0x1a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0x37, 0x75, 0x51, 0x56, 0xd0, 0xb1, - 0xf4, 0xf3, 0x4e, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x96, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, - 0x2e, 0x3e, 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0x67, 0xb8, 0xcf, 0x6f, 0x3c, 0xf0, 0x83, 0x99, 0xa5, - 0x73, 0x45, 0x9c, 0x51, 0xf9, 0xa3, 0xcf, 0x45, 0x9a, 0x53, 0x1e, 0xe0, 0x3e, 0x14, 0x73, 0xfb, 0x2d, 0x90, 0x7e, - 0xe8, 0x2d, 0x90, 0x7d, 0x74, 0xce, 0xc9, 0x6b, 0x40, 0xa4, 0x43, 0x18, 0xdc, 0x9c, 0x04, 0x1d, 0xab, 0x86, 0x77, - 0x16, 0xd8, 0x69, 0x2f, 0x8d, 0x7b, 0x69, 0x7e, 0x91, 0xf6, 0xfb, 0x06, 0x35, 0x33, 0x45, 0x38, 0x78, 0x9c, 0x91, - 0x8b, 0xa4, 0x05, 0x5b, 0x4a, 0xfb, 0xaf, 0x06, 0x8e, 0xa8, 0x10, 0xa0, 0xf9, 0xef, 0xc2, 0x7b, 0x02, 0x10, 0x9b, - 0xb4, 0x01, 0x57, 0x3d, 0xa6, 0xa3, 0xb1, 0x25, 0x51, 0xab, 0xce, 0x06, 0x48, 0x9c, 0x2a, 0xad, 0xa7, 0xdc, 0xac, - 0x29, 0x0c, 0x52, 0x65, 0xa1, 0x7e, 0x63, 0x3d, 0x99, 0xac, 0x72, 0x91, 0x11, 0x47, 0x65, 0x7a, 0x57, 0x33, 0x82, - 0xe9, 0xd2, 0xcf, 0x17, 0xb0, 0x64, 0xe3, 0x8f, 0x38, 0x79, 0x4b, 0xc0, 0xb1, 0x9d, 0xb5, 0xab, 0x6a, 0x97, 0xe3, - 0xd6, 0x6e, 0x0e, 0xf0, 0xbd, 0xde, 0x68, 0x34, 0xd2, 0xce, 0x71, 0x02, 0x86, 0xaa, 0xa7, 0x96, 0x42, 0x8f, 0xd5, - 0x0a, 0x50, 0xb7, 0x23, 0x97, 0x59, 0x32, 0x98, 0x2f, 0x8c, 0xe3, 0x97, 0xe6, 0xa3, 0x8f, 0x97, 0xca, 0xda, 0x75, - 0xc4, 0xd7, 0x7f, 0x94, 0xd5, 0xfa, 0x96, 0x77, 0x55, 0x13, 0xf0, 0x45, 0x15, 0x50, 0xfa, 0x0d, 0xef, 0xc9, 0xde, - 0xc5, 0xd7, 0x6e, 0xb1, 0x4b, 0xbe, 0xe5, 0x2d, 0xea, 0x3c, 0x5f, 0x39, 0xb8, 0x51, 0xa5, 0xdb, 0x7b, 0xc9, 0x02, - 0xd7, 0xde, 0x49, 0xd3, 0x58, 0xcf, 0xfc, 0xe8, 0x61, 0x11, 0xb2, 0x9d, 0x8f, 0xbd, 0xaf, 0x9a, 0xa7, 0x67, 0x0d, - 0xbd, 0x49, 0x0d, 0x7d, 0xec, 0x45, 0xd9, 0x3e, 0x35, 0x8d, 0xe8, 0x35, 0x6c, 0xe8, 0x63, 0x6f, 0xc9, 0xc9, 0x21, - 0x11, 0xe0, 0xd4, 0x98, 0x3f, 0x3e, 0x9c, 0xce, 0xf0, 0x77, 0x0c, 0xa8, 0x04, 0x62, 0x3e, 0x3f, 0xa6, 0x1d, 0x05, - 0x98, 0x51, 0xa5, 0xb7, 0xcf, 0x0f, 0x6c, 0xc7, 0xcb, 0x7a, 0x68, 0xe9, 0xdd, 0xb3, 0xa3, 0xdb, 0xf1, 0xaa, 0x1a, - 0x5f, 0xca, 0x21, 0xcf, 0xf3, 0xd9, 0x68, 0x34, 0x12, 0x06, 0x92, 0x3b, 0xd7, 0x1b, 0x58, 0x81, 0xb4, 0x2d, 0xaa, - 0x0f, 0xe5, 0xd2, 0xdb, 0xab, 0x43, 0x3b, 0xf7, 0x27, 0xd5, 0xf1, 0x58, 0x8c, 0xcc, 0x31, 0x9e, 0xfb, 0xc7, 0x63, - 0xa1, 0xe4, 0x28, 0x59, 0x4b, 0x10, 0x9d, 0xd2, 0x78, 0x2a, 0xeb, 0xb5, 0x13, 0x91, 0x57, 0x23, 0xce, 0x43, 0xf0, - 0x57, 0x2f, 0x67, 0xa5, 0xfe, 0x54, 0xf8, 0xe8, 0xa7, 0x4a, 0xe9, 0x05, 0xaf, 0x0a, 0x08, 0x11, 0xfb, 0xbb, 0x81, - 0x76, 0x50, 0x82, 0x43, 0x09, 0xf7, 0x1e, 0xaf, 0x93, 0xaf, 0xbc, 0x6a, 0x26, 0x63, 0x94, 0x7b, 0x83, 0x7c, 0xce, - 0x00, 0xa6, 0xd2, 0x67, 0xe0, 0x77, 0x09, 0x50, 0xa7, 0xf8, 0x14, 0x9d, 0xea, 0xcd, 0xc3, 0xa6, 0xeb, 0xd3, 0x12, - 0x45, 0x11, 0xdd, 0xf9, 0xf9, 0x18, 0x10, 0x3b, 0xbb, 0x36, 0x23, 0xed, 0xda, 0x6f, 0xd0, 0x60, 0x95, 0x26, 0xad, - 0x95, 0x53, 0xc2, 0x6e, 0x57, 0x23, 0x5b, 0xfa, 0x51, 0x0a, 0xc4, 0xca, 0x71, 0x22, 0x91, 0x3d, 0xd8, 0xc8, 0x09, - 0xdc, 0xa2, 0xbd, 0xa3, 0x03, 0x50, 0xb9, 0x51, 0x90, 0x5f, 0xcd, 0x89, 0xdc, 0xf1, 0x7d, 0xef, 0xfb, 0x41, 0x3d, - 0xf8, 0xbe, 0x77, 0x91, 0x92, 0xdc, 0x11, 0x5e, 0xa8, 0x29, 0x21, 0xe2, 0x8b, 0xef, 0x07, 0xd5, 0x00, 0xcf, 0x12, - 0x2d, 0xd2, 0x22, 0xa1, 0x5a, 0x5d, 0xe3, 0x26, 0xbc, 0x48, 0x24, 0xf7, 0xd0, 0xbe, 0xf3, 0x88, 0x58, 0x00, 0x32, - 0x16, 0x9f, 0xcd, 0x1b, 0x0a, 0x75, 0x37, 0x31, 0x5b, 0x74, 0x97, 0xc5, 0x7e, 0x7f, 0x93, 0xa7, 0x75, 0x4f, 0xc7, - 0xc7, 0xe0, 0x0b, 0x52, 0x4d, 0x80, 0x47, 0xfb, 0x2b, 0x73, 0xbc, 0x7a, 0xb5, 0x39, 0x52, 0x16, 0xaa, 0x44, 0xfd, - 0x16, 0xab, 0x59, 0x0f, 0x61, 0xb8, 0xb3, 0xcc, 0x58, 0xdb, 0x0b, 0x9e, 0xcb, 0x59, 0x15, 0xdb, 0xe5, 0xf8, 0x8a, - 0xa5, 0x36, 0x97, 0xa8, 0x1c, 0xad, 0xc7, 0xda, 0x14, 0x23, 0xbf, 0x52, 0x48, 0x94, 0x45, 0xc7, 0xd6, 0x42, 0x01, - 0xf1, 0x02, 0xf4, 0x25, 0x7b, 0xd3, 0x00, 0xeb, 0x8d, 0x5e, 0x45, 0x84, 0x96, 0x8f, 0x54, 0x78, 0x9b, 0x9b, 0x2a, - 0xb3, 0xb2, 0x59, 0xb4, 0xfb, 0x29, 0xe7, 0x39, 0x82, 0xd5, 0x1b, 0xb5, 0x47, 0x01, 0x6a, 0x0f, 0x2d, 0x94, 0x01, - 0xa4, 0x34, 0xcd, 0x00, 0x90, 0x01, 0x40, 0xa6, 0x8a, 0xf8, 0x4c, 0x80, 0x4a, 0x5b, 0xdd, 0x28, 0x70, 0x22, 0xbd, - 0x02, 0x9a, 0x05, 0x56, 0xfa, 0x48, 0x41, 0x06, 0x8b, 0x2d, 0x02, 0xb0, 0x72, 0xe4, 0x0c, 0xd3, 0x18, 0xb2, 0x8d, - 0x26, 0x2e, 0x49, 0xf3, 0xfb, 0x30, 0x4b, 0x25, 0x9e, 0xc4, 0x8f, 0xb2, 0xc6, 0x08, 0x00, 0xa4, 0xef, 0xd3, 0x8b, - 0x22, 0x8b, 0x09, 0x07, 0xce, 0x7a, 0xea, 0xa0, 0xa8, 0xc9, 0xb9, 0xd6, 0xb4, 0x7a, 0x56, 0x9b, 0x3c, 0x64, 0x81, - 0xce, 0x1e, 0x8c, 0x49, 0x2d, 0xdf, 0xf3, 0xc8, 0xfe, 0xca, 0xe9, 0x8c, 0xf0, 0x5d, 0x77, 0x70, 0xea, 0xbf, 0xdb, - 0x1a, 0x98, 0x98, 0x12, 0x80, 0x8d, 0xc1, 0xd1, 0x84, 0xf8, 0x9d, 0x8e, 0xc9, 0xd4, 0x26, 0x45, 0x20, 0xf0, 0x10, - 0xbc, 0x82, 0xeb, 0x0b, 0x19, 0x30, 0x20, 0x68, 0x3b, 0x8b, 0x3c, 0x4d, 0x00, 0x4e, 0xbc, 0xe0, 0x3b, 0x80, 0xe3, - 0xd4, 0xab, 0x42, 0xf6, 0xec, 0xa5, 0x98, 0xce, 0xe6, 0xc1, 0x43, 0x42, 0xfb, 0x17, 0x13, 0x7e, 0xd3, 0x5d, 0x25, - 0x57, 0xa6, 0xd6, 0xbd, 0x89, 0xae, 0x72, 0x95, 0xd3, 0xa7, 0x39, 0xc7, 0x30, 0x67, 0xb0, 0x0a, 0xc8, 0x39, 0x1b, - 0xf2, 0xe7, 0x97, 0x00, 0xd8, 0xb2, 0x16, 0x5e, 0xc4, 0x9f, 0x87, 0xb2, 0x5a, 0x00, 0xf7, 0xc8, 0x79, 0x64, 0x7e, - 0xf9, 0x6a, 0x3b, 0x94, 0x73, 0x8a, 0xc2, 0x58, 0xce, 0x4d, 0x4b, 0x8a, 0xd3, 0xa1, 0xa7, 0x60, 0x32, 0xb5, 0xe5, - 0xef, 0x5d, 0xe2, 0x32, 0x7b, 0x33, 0x09, 0xe7, 0xeb, 0xc8, 0xb6, 0xb5, 0xea, 0x1e, 0xba, 0x21, 0x18, 0xf4, 0x31, - 0x82, 0x96, 0xd5, 0x9b, 0x5f, 0x31, 0x18, 0x28, 0x6c, 0xdf, 0x9a, 0x6e, 0x5a, 0x74, 0x8a, 0x03, 0xce, 0xac, 0x75, - 0x8d, 0x4a, 0x55, 0x71, 0xe8, 0x25, 0xef, 0x96, 0x95, 0xdb, 0x65, 0xe9, 0x85, 0x20, 0x35, 0xea, 0x2a, 0x42, 0xa4, - 0x54, 0xec, 0xf0, 0x9e, 0xfc, 0x1a, 0x98, 0x78, 0x66, 0xe5, 0x28, 0x8d, 0xe7, 0x00, 0x13, 0xa4, 0xd0, 0x37, 0xe5, - 0x57, 0x80, 0x1b, 0xba, 0x88, 0xc2, 0xec, 0x4d, 0x5c, 0x05, 0xb5, 0xd5, 0xf4, 0x7b, 0x07, 0x27, 0xf6, 0xb2, 0xee, - 0xf7, 0x53, 0xa2, 0xf1, 0xc3, 0xd0, 0x0b, 0xfc, 0x7b, 0x3c, 0x3d, 0x34, 0x41, 0x6a, 0x5e, 0x79, 0x80, 0x57, 0x74, - 0xb9, 0xb5, 0x29, 0x57, 0x34, 0x2e, 0xe6, 0x35, 0x22, 0xc2, 0xa7, 0x8e, 0x62, 0xbb, 0xcd, 0x8f, 0x53, 0x1b, 0x83, - 0x41, 0x08, 0xf7, 0xad, 0x8c, 0xdf, 0x27, 0x5e, 0x35, 0x8b, 0xe6, 0xa0, 0x28, 0xcd, 0x34, 0x49, 0x48, 0x21, 0xbd, - 0x04, 0xe8, 0xa3, 0x41, 0xa8, 0xd5, 0x95, 0x7f, 0x24, 0x5e, 0xaa, 0xa6, 0xb5, 0x79, 0x8a, 0x35, 0x0a, 0xc4, 0x2c, - 0x9a, 0x37, 0x2c, 0xa3, 0x43, 0x52, 0x5d, 0x2e, 0x4d, 0x33, 0xfe, 0xb0, 0x9a, 0xa1, 0x5a, 0x71, 0xd2, 0x04, 0x35, - 0x4a, 0xb7, 0x70, 0x01, 0xfc, 0x1b, 0xdd, 0x71, 0x54, 0xa3, 0x48, 0xd1, 0x80, 0x4f, 0x20, 0xa6, 0xab, 0x30, 0x9b, - 0x27, 0xac, 0x35, 0x75, 0xcd, 0xe8, 0xf7, 0x65, 0x9c, 0x90, 0x49, 0x42, 0x72, 0x3e, 0x5c, 0xae, 0x1f, 0x49, 0x75, - 0x01, 0xa4, 0xca, 0x39, 0x9b, 0xf5, 0x7a, 0x73, 0xc0, 0xe8, 0x85, 0xf5, 0x0b, 0x1b, 0x57, 0x70, 0x79, 0x4d, 0x98, - 0xbb, 0xea, 0x47, 0x98, 0x65, 0x50, 0x05, 0xa4, 0xf9, 0xb1, 0xa0, 0xd3, 0x2b, 0x17, 0x88, 0xfa, 0xf5, 0x48, 0x5d, - 0x50, 0x66, 0xe9, 0xdc, 0x22, 0x02, 0x01, 0xaf, 0x61, 0xf5, 0x04, 0x92, 0x7d, 0xf9, 0xd8, 0xa7, 0x19, 0x05, 0xaa, - 0x23, 0x00, 0x65, 0xb3, 0x7e, 0x08, 0xfb, 0x07, 0x84, 0x13, 0xea, 0x6f, 0xde, 0xca, 0x59, 0x43, 0xf2, 0x40, 0xaa, - 0x09, 0x8f, 0xe1, 0xd4, 0x58, 0xe0, 0x4b, 0x8b, 0xde, 0x54, 0xf0, 0x9a, 0xe0, 0xb8, 0x17, 0x68, 0xed, 0x5b, 0xc0, - 0x11, 0x22, 0xb8, 0x0c, 0x4d, 0x9c, 0xf6, 0xf6, 0xbd, 0x00, 0x09, 0xcd, 0x2d, 0x9c, 0xeb, 0xb7, 0x2e, 0x68, 0x71, - 0x8a, 0x9c, 0x2c, 0xba, 0xc0, 0x40, 0x17, 0x64, 0xde, 0xf8, 0x67, 0x0e, 0x2b, 0x17, 0x20, 0x7b, 0xa9, 0x58, 0x49, - 0xc4, 0xb6, 0x57, 0x7f, 0x94, 0xca, 0x7e, 0x7b, 0x61, 0x4d, 0xe0, 0x97, 0x89, 0xfd, 0x12, 0x99, 0x7c, 0xd3, 0x53, - 0x93, 0xaf, 0x8c, 0x85, 0x4e, 0x2d, 0x83, 0x73, 0x7a, 0x62, 0x70, 0xee, 0xed, 0xad, 0xda, 0x94, 0x30, 0x14, 0x24, - 0x81, 0xa6, 0x4b, 0x0f, 0xeb, 0xa6, 0x3f, 0x3f, 0x69, 0xf1, 0x6b, 0xd5, 0xbe, 0x75, 0x3f, 0x0e, 0xb1, 0x8b, 0x5f, - 0x26, 0x9e, 0x61, 0x1f, 0xf5, 0x81, 0x03, 0x4c, 0x46, 0x4c, 0x5c, 0xf7, 0xfb, 0x50, 0xd8, 0x6c, 0x3c, 0x1f, 0xd5, - 0xc5, 0xcf, 0xc5, 0x03, 0x40, 0x39, 0x54, 0x60, 0x97, 0x43, 0x19, 0xca, 0x88, 0x4d, 0x6d, 0xb9, 0xe7, 0xf7, 0x97, - 0x61, 0x0e, 0xf2, 0x8e, 0xc6, 0xc4, 0xb9, 0x00, 0x31, 0x0c, 0xbe, 0xfe, 0xfd, 0x93, 0x43, 0xda, 0x7c, 0x7f, 0x01, - 0xdf, 0x1d, 0x5d, 0x7c, 0x40, 0x8e, 0x9b, 0x8b, 0x4d, 0x59, 0xdc, 0xa7, 0xb1, 0xb8, 0xf8, 0x1e, 0x52, 0xbf, 0xbf, - 0x28, 0xca, 0x8b, 0xef, 0x55, 0x65, 0xbe, 0xbf, 0xa0, 0x05, 0x37, 0xfa, 0xdd, 0x9a, 0x78, 0xff, 0xc8, 0x35, 0xed, - 0xd9, 0x12, 0xc2, 0xb1, 0xb4, 0xfa, 0x11, 0x94, 0x88, 0x8a, 0x14, 0x55, 0x86, 0xb2, 0x5a, 0x3b, 0xce, 0xfb, 0x44, - 0xc3, 0x63, 0xd3, 0x84, 0xc4, 0xd5, 0x12, 0xd6, 0xa1, 0x9e, 0x9d, 0x36, 0xc9, 0x8e, 0xf3, 0x40, 0x1d, 0x10, 0x15, - 0x7f, 0x5e, 0x8d, 0x76, 0xf4, 0x35, 0xf8, 0xd6, 0xf1, 0x58, 0x8d, 0xf6, 0xe6, 0xa7, 0x4f, 0xd6, 0x4a, 0x19, 0x6c, - 0xa4, 0x18, 0x85, 0x90, 0x28, 0x6e, 0xd7, 0x63, 0x00, 0xfc, 0xef, 0x1f, 0x8f, 0xf4, 0x7b, 0x2f, 0x7f, 0xab, 0xdd, - 0xd2, 0xaa, 0xe7, 0x87, 0x16, 0x61, 0xc6, 0xab, 0xda, 0xb0, 0xb3, 0x1d, 0x24, 0xa0, 0xf4, 0xa1, 0x69, 0x50, 0x53, - 0x44, 0x3f, 0x61, 0x35, 0xb1, 0x9c, 0xc3, 0x82, 0x94, 0x38, 0xc4, 0x70, 0x8c, 0x76, 0xe8, 0x71, 0xba, 0xa8, 0x79, - 0x2a, 0xdf, 0x21, 0xe3, 0xd6, 0xf7, 0x01, 0xc9, 0xa5, 0x70, 0xf9, 0xc1, 0x0b, 0x0d, 0x26, 0x7a, 0x91, 0x57, 0x45, - 0x26, 0x46, 0x82, 0x46, 0xf9, 0x0d, 0x89, 0x33, 0x17, 0x58, 0x8b, 0x0b, 0x85, 0x10, 0x16, 0x12, 0x2a, 0x77, 0x51, - 0x52, 0x7a, 0x70, 0xf1, 0xe4, 0x50, 0x36, 0xbf, 0x13, 0x26, 0xc4, 0x68, 0x01, 0x34, 0x38, 0xfb, 0x76, 0x79, 0x0f, - 0x61, 0x99, 0x7b, 0xbf, 0xbf, 0x59, 0xe5, 0x05, 0xc4, 0x65, 0x5e, 0x48, 0xc5, 0x6a, 0x79, 0x01, 0x34, 0x79, 0x22, - 0xbe, 0x08, 0x2b, 0x39, 0x0d, 0xaa, 0x8e, 0x62, 0xd5, 0x36, 0x5e, 0x56, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, - 0xdd, 0x67, 0xaf, 0x95, 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, - 0xe7, 0x26, 0xc8, 0x3f, 0xbe, 0x39, 0xa3, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, - 0x9b, 0x23, 0x35, 0x79, 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, - 0x67, 0x2b, 0x2a, 0x2f, 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xaa, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, - 0x62, 0x86, 0x29, 0xd6, 0x5f, 0xd8, 0xf2, 0xdb, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x6b, 0x16, 0xc2, - 0xf1, 0xb8, 0x9d, 0x14, 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0xc7, 0x63, 0x57, 0xcb, 0x36, 0xc2, 0x83, 0x87, 0xaa, - 0x85, 0xdb, 0x86, 0x55, 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, - 0x1b, 0x1b, 0xe0, 0x1a, 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, - 0x09, 0xa3, 0x15, 0xc2, 0xef, 0xa1, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, - 0x4a, 0xb1, 0x34, 0x6f, 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0xf3, 0xd0, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, - 0xcd, 0xe6, 0xc0, 0x7d, 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x67, 0xcb, 0xe3, - 0xf0, 0x2d, 0xfc, 0xcb, 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xcb, 0x15, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, - 0xad, 0xa8, 0x0d, 0x7f, 0xc3, 0xbf, 0x84, 0x7d, 0x84, 0xfd, 0x96, 0xe3, 0x4d, 0xd2, 0x10, 0x90, 0x09, 0xc4, 0x85, - 0x85, 0x20, 0xc1, 0xdf, 0x72, 0xc9, 0x3f, 0x27, 0x7c, 0xb6, 0x28, 0x81, 0xac, 0x0e, 0xa3, 0xf8, 0x84, 0x62, 0xa2, - 0x10, 0x86, 0x5b, 0x42, 0xef, 0xe8, 0xbf, 0x11, 0x25, 0xd9, 0xa4, 0xb2, 0x62, 0x3d, 0x90, 0x49, 0x12, 0x4c, 0xb0, - 0xf2, 0x42, 0xf9, 0xc2, 0xbd, 0x50, 0x6a, 0xad, 0x05, 0xad, 0x5f, 0xfe, 0x24, 0xf1, 0x0c, 0xe8, 0x1e, 0xc8, 0x18, - 0x74, 0x1b, 0x51, 0x4d, 0x72, 0x4c, 0x1f, 0xa5, 0xf3, 0x0c, 0x54, 0x40, 0x17, 0x9b, 0x2c, 0xac, 0x97, 0x45, 0xb9, - 0x6e, 0x85, 0x87, 0xca, 0xd2, 0x47, 0xea, 0x31, 0xe6, 0x85, 0x79, 0x72, 0x26, 0x1f, 0x3c, 0x02, 0x34, 0x3c, 0xca, - 0xd3, 0xaa, 0xa3, 0xb4, 0x7e, 0x60, 0x19, 0x30, 0x02, 0x67, 0xca, 0x80, 0x47, 0x58, 0x06, 0xe6, 0x69, 0x97, 0xa1, - 0x06, 0xb1, 0x46, 0xd5, 0x95, 0xda, 0x60, 0xce, 0x14, 0x25, 0x9f, 0x62, 0x69, 0x85, 0x31, 0x34, 0x75, 0xe5, 0x91, - 0xf5, 0x92, 0x13, 0xf6, 0x6c, 0x37, 0x90, 0x6e, 0x61, 0xab, 0xc0, 0x05, 0x5d, 0xcb, 0x12, 0xe5, 0xa2, 0x5b, 0x46, - 0x94, 0x89, 0x90, 0xfa, 0xd9, 0xc3, 0x99, 0x56, 0xfb, 0x8d, 0x9d, 0x74, 0x68, 0x8f, 0x14, 0xbd, 0x60, 0x20, 0x3e, - 0xed, 0x91, 0x52, 0xcf, 0x1a, 0xb9, 0x0c, 0x6c, 0xe9, 0x52, 0xd5, 0xf3, 0x5f, 0xa0, 0x7c, 0x07, 0x33, 0xe3, 0x6c, - 0xf6, 0xbb, 0xde, 0xdc, 0x9e, 0x1c, 0xea, 0xe6, 0x77, 0xd6, 0xeb, 0xc1, 0xd6, 0x20, 0x13, 0x5f, 0x28, 0xea, 0x29, - 0xab, 0x10, 0x2b, 0x32, 0xfb, 0x5f, 0xc2, 0xfb, 0x1d, 0xde, 0x1a, 0xa1, 0x59, 0x19, 0x0f, 0xf3, 0xd1, 0x93, 0x83, - 0x68, 0x7e, 0xef, 0x2c, 0xdb, 0xca, 0x55, 0xc9, 0x6c, 0xbf, 0x9f, 0x24, 0xcd, 0xd9, 0xe3, 0x35, 0x92, 0x3a, 0xc0, - 0xc7, 0xeb, 0x33, 0x7c, 0xa4, 0x12, 0x4a, 0x2d, 0xa8, 0x6a, 0xd0, 0xfa, 0xd8, 0xef, 0xad, 0xe7, 0xf4, 0xf1, 0x53, - 0x39, 0xdd, 0x92, 0x22, 0x8c, 0x1f, 0x18, 0x4c, 0xd9, 0x89, 0x53, 0x97, 0xaa, 0x19, 0xd2, 0xbb, 0x6e, 0x95, 0xd4, - 0x65, 0x8f, 0x12, 0x41, 0xa8, 0x83, 0xf5, 0x8b, 0xfd, 0x10, 0x66, 0xb6, 0xe8, 0x0f, 0x9b, 0xd5, 0x9c, 0x50, 0x10, - 0x01, 0xa2, 0x55, 0xde, 0x07, 0x4e, 0x49, 0xc2, 0xac, 0xb9, 0x21, 0xdd, 0x7a, 0x2b, 0xa5, 0xbd, 0x92, 0x02, 0xfa, - 0x65, 0x7e, 0x3c, 0xa2, 0xf9, 0xcd, 0xec, 0x5c, 0x95, 0xb4, 0xe5, 0x00, 0x22, 0x75, 0xde, 0xb4, 0x2f, 0x1d, 0x0e, - 0xfe, 0x83, 0xba, 0x12, 0xe5, 0x44, 0xd0, 0x51, 0xb4, 0x60, 0xb4, 0x5a, 0xb5, 0xab, 0xc8, 0xa6, 0x42, 0xb6, 0x24, - 0xc2, 0x89, 0x92, 0xbd, 0x12, 0xea, 0xa3, 0x5c, 0xed, 0x99, 0x86, 0xf8, 0x33, 0x01, 0x9b, 0x36, 0xf8, 0x5b, 0xe0, - 0x5e, 0x06, 0x67, 0xa6, 0x7d, 0x1a, 0x46, 0x40, 0x64, 0x0e, 0xc1, 0x7e, 0x7e, 0xd7, 0x83, 0x1c, 0x1e, 0x74, 0xa4, - 0xbf, 0xaa, 0x67, 0x05, 0x9e, 0xb9, 0x67, 0x9e, 0xbf, 0x3e, 0x93, 0x9e, 0x57, 0xf0, 0x40, 0x73, 0x1f, 0x66, 0xfc, - 0x45, 0x59, 0x86, 0xfb, 0xd1, 0xb2, 0x2c, 0xd6, 0x5e, 0xa4, 0xf7, 0xf1, 0x4c, 0x8a, 0x81, 0x44, 0x87, 0x99, 0xd1, - 0x55, 0xac, 0xe3, 0x1c, 0xc6, 0xbd, 0x3d, 0x09, 0x2b, 0xb4, 0x7f, 0x96, 0xd8, 0xeb, 0x02, 0x00, 0x1c, 0xb2, 0x06, - 0xad, 0xf0, 0x4e, 0xb7, 0xb7, 0x7b, 0x5c, 0x52, 0xa2, 0xb8, 0x51, 0xf3, 0xb3, 0x1a, 0x5a, 0x26, 0xa8, 0x65, 0xd6, - 0x9d, 0x4c, 0xa6, 0x48, 0x02, 0xdf, 0x86, 0xbd, 0x66, 0x79, 0x35, 0x6f, 0xe4, 0xf6, 0xf0, 0x2e, 0x5c, 0x8b, 0x58, - 0x5b, 0xd0, 0x49, 0x47, 0xc6, 0xe1, 0x5e, 0x68, 0x6e, 0xa4, 0x87, 0x27, 0x55, 0x12, 0x96, 0x22, 0x86, 0x5b, 0x20, - 0x3b, 0xa8, 0x6d, 0x25, 0x28, 0x81, 0x04, 0xf6, 0x43, 0x29, 0x96, 0xe9, 0x4e, 0x00, 0x98, 0x03, 0xff, 0x53, 0x1a, - 0xbb, 0xdd, 0x9d, 0x87, 0x78, 0xd5, 0xc8, 0xfb, 0x06, 0x21, 0xd8, 0x5f, 0x81, 0x9c, 0x06, 0x0c, 0x22, 0xc5, 0x48, - 0x16, 0x0c, 0x24, 0x00, 0x15, 0xdf, 0x80, 0x49, 0x6e, 0x5a, 0x79, 0x7e, 0x50, 0xe9, 0x0e, 0xa6, 0x7d, 0xd0, 0xbd, - 0xb8, 0xd6, 0x0c, 0x90, 0x7f, 0x27, 0x11, 0xff, 0x5b, 0xed, 0x95, 0xac, 0x62, 0x99, 0xdf, 0x98, 0x8b, 0x4e, 0x06, - 0x57, 0x0d, 0xe1, 0x17, 0xb3, 0x6c, 0xce, 0xa3, 0x59, 0xa6, 0x43, 0xfd, 0x8b, 0xe6, 0xa4, 0x14, 0xc0, 0x50, 0xc7, - 0x0b, 0xb0, 0xc6, 0xbb, 0xd2, 0x4d, 0x2b, 0x1e, 0x69, 0x8c, 0x51, 0x50, 0xa1, 0x83, 0xd0, 0xdf, 0x6a, 0x80, 0xd7, - 0x60, 0x92, 0x1b, 0x21, 0xf7, 0xc1, 0x05, 0xdd, 0xd0, 0x2d, 0xe7, 0x2e, 0x41, 0x4d, 0xaa, 0x96, 0x5f, 0x85, 0x50, - 0xef, 0x6a, 0xc9, 0xa5, 0xda, 0x7c, 0x6a, 0x94, 0x35, 0x82, 0x4c, 0x8e, 0xd2, 0xef, 0x53, 0x2e, 0xdc, 0xdc, 0x98, - 0xac, 0x8f, 0x47, 0xaf, 0xe0, 0xa6, 0xc6, 0x3f, 0x56, 0x92, 0x45, 0xd4, 0x1a, 0x12, 0x61, 0x6b, 0xb7, 0x42, 0xf7, - 0x1e, 0x37, 0x4a, 0xf3, 0x28, 0xdb, 0xc6, 0xa2, 0xf2, 0x7a, 0x09, 0x58, 0x8b, 0x7b, 0x40, 0x86, 0x4a, 0x4b, 0x3f, - 0x67, 0x05, 0x40, 0x06, 0x48, 0x61, 0xe3, 0x47, 0xa4, 0xbd, 0xfa, 0xe0, 0xa5, 0x7e, 0xbf, 0x6f, 0x4c, 0xf9, 0xef, - 0x1f, 0x72, 0x60, 0x26, 0x14, 0x65, 0xbd, 0x87, 0x09, 0x54, 0x79, 0xa9, 0x4f, 0xda, 0xb3, 0x9a, 0x3f, 0xdf, 0xd4, - 0x1e, 0x90, 0x5a, 0xf9, 0x16, 0x73, 0xd5, 0x2b, 0xfb, 0x62, 0x73, 0x48, 0xab, 0x5b, 0xa3, 0x71, 0x10, 0x2c, 0xad, - 0xde, 0x68, 0x95, 0x43, 0xd5, 0xf0, 0x1c, 0x44, 0x2a, 0xeb, 0xea, 0x9a, 0x3b, 0x57, 0xd7, 0x82, 0x23, 0x81, 0x6c, - 0xc9, 0x21, 0x2c, 0x8d, 0x85, 0xdc, 0x2b, 0x8f, 0xc7, 0xc2, 0xef, 0xf7, 0xd3, 0x59, 0x8e, 0x97, 0x16, 0xa0, 0x4c, - 0xdb, 0xd4, 0x5e, 0xe8, 0x1f, 0x8f, 0x3f, 0x82, 0xd7, 0x88, 0x7f, 0x3c, 0x96, 0xfd, 0xfe, 0x47, 0x73, 0x93, 0xb9, - 0x1c, 0x2b, 0xa5, 0xec, 0x35, 0x2a, 0xdd, 0xdf, 0x24, 0xbc, 0xf7, 0xbf, 0x47, 0xff, 0x7b, 0x74, 0xdd, 0x53, 0x01, - 0x60, 0x09, 0x9f, 0xe1, 0x0d, 0x9d, 0xa9, 0xcb, 0x39, 0x93, 0xee, 0xee, 0xca, 0x0f, 0xbd, 0xa7, 0xf1, 0xe1, 0x7b, - 0x73, 0xd3, 0xc6, 0x5f, 0xf3, 0x13, 0x4d, 0x42, 0xc7, 0x45, 0xff, 0x78, 0xfc, 0x94, 0x68, 0x7d, 0x5a, 0xaa, 0xf4, - 0x69, 0x0a, 0x3c, 0xc9, 0xb0, 0xe1, 0xba, 0x85, 0xe9, 0x68, 0x7e, 0xdc, 0x7c, 0x95, 0xbc, 0x38, 0x4b, 0xe1, 0xda, - 0x0b, 0x3a, 0x97, 0x29, 0x58, 0x57, 0x86, 0xe0, 0x66, 0x10, 0x40, 0xea, 0x10, 0xd2, 0xac, 0x69, 0xf8, 0x97, 0xdc, - 0x15, 0xbc, 0xb5, 0xc7, 0xbb, 0xc1, 0x88, 0x52, 0x47, 0xfa, 0xa4, 0x0d, 0xa1, 0x4b, 0x2a, 0xf9, 0x8f, 0x22, 0x8f, - 0x31, 0x66, 0xe3, 0x15, 0x91, 0x7d, 0x16, 0xf9, 0xcb, 0x02, 0x00, 0x8b, 0x00, 0x01, 0x39, 0x9d, 0x3b, 0x92, 0xf8, - 0xcf, 0xc9, 0xb7, 0x7f, 0x4c, 0x97, 0xf6, 0xa1, 0x2c, 0x56, 0xa5, 0xa8, 0xaa, 0x93, 0xd2, 0xf6, 0xb6, 0x5c, 0x0f, - 0xf4, 0xa1, 0xfd, 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, - 0x58, 0x3f, 0x7f, 0xd8, 0xbf, 0x89, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, - 0xc3, 0x54, 0xe2, 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0xbf, 0xe7, 0x30, 0xff, 0x75, - 0x7b, 0xb0, 0x3e, 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0xe7, 0xc2, 0x22, 0xf9, - 0xf5, 0xc9, 0x91, 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x89, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9d, 0xff, 0x95, 0x99, 0xff, - 0x03, 0x8c, 0x49, 0x28, 0x9e, 0x73, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0xcf, 0x81, - 0x83, 0xf9, 0x39, 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0xd7, 0x16, 0xcf, 0x95, - 0x5c, 0x10, 0xfa, 0xba, 0x0a, 0xb3, 0x71, 0x5d, 0x6c, 0x2b, 0x51, 0x6c, 0x21, 0x6c, 0x04, 0xd4, 0xb2, 0xd5, 0xb4, - 0xb6, 0x15, 0xb2, 0x3f, 0x89, 0x16, 0x6d, 0x97, 0xa1, 0x9a, 0x8c, 0xb2, 0x74, 0x33, 0x05, 0x52, 0xbd, 0x00, 0xce, - 0x22, 0xf3, 0xca, 0x3b, 0x67, 0x0f, 0xd8, 0xa1, 0xf1, 0x14, 0x18, 0x51, 0xe9, 0x8f, 0xaa, 0x31, 0x3a, 0x3d, 0xd1, - 0xef, 0x57, 0x53, 0x0a, 0xf9, 0xfa, 0x09, 0x30, 0xb9, 0x6a, 0xb9, 0x00, 0x7d, 0x19, 0xea, 0xa0, 0x12, 0xa5, 0x56, - 0x0c, 0x23, 0x16, 0x7e, 0x12, 0xc8, 0xde, 0x4c, 0x41, 0xcd, 0x2a, 0x4a, 0x42, 0x25, 0x2a, 0x25, 0x5b, 0x13, 0xd4, - 0xd2, 0xfb, 0xa2, 0xa8, 0x0f, 0x15, 0x38, 0x4a, 0x46, 0xda, 0x2c, 0xa7, 0xcc, 0xb8, 0x28, 0x73, 0xd1, 0x0f, 0xf6, - 0x2f, 0xc0, 0xf8, 0x92, 0xf9, 0x2c, 0xf7, 0x1d, 0x9d, 0xd3, 0x76, 0x5c, 0xa0, 0xcc, 0x2d, 0xa7, 0xad, 0x96, 0x3c, - 0x26, 0xef, 0x59, 0xb0, 0xed, 0xbf, 0x48, 0x90, 0x57, 0x11, 0xe6, 0x13, 0xaa, 0x6c, 0xfe, 0x9e, 0x7b, 0xc4, 0x3e, - 0xda, 0xe1, 0xc2, 0x44, 0xa4, 0xb7, 0x60, 0x49, 0x0c, 0xb3, 0x52, 0x84, 0xf1, 0x1e, 0xbc, 0x7f, 0xb6, 0x95, 0x18, - 0x5d, 0xa0, 0x93, 0xfb, 0xc5, 0x43, 0x5a, 0x27, 0x17, 0x6f, 0x5e, 0x5d, 0x7c, 0xdf, 0x1b, 0x14, 0xa3, 0x34, 0x1e, - 0xf4, 0xbe, 0xbf, 0x58, 0x6f, 0x01, 0x22, 0x53, 0x5c, 0xc4, 0x64, 0x4a, 0x13, 0xf1, 0x05, 0x19, 0x06, 0x2f, 0xea, - 0x44, 0x5c, 0xd0, 0xc4, 0x74, 0x5f, 0xa3, 0x34, 0xf9, 0x76, 0x14, 0xe6, 0xf0, 0x72, 0x29, 0xb6, 0x95, 0x88, 0xc1, - 0x4e, 0xa9, 0xe6, 0xd9, 0xc9, 0x59, 0x2c, 0x3d, 0x06, 0x5d, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, - 0x05, 0x84, 0x1e, 0xf0, 0xcc, 0xcf, 0xe3, 0x51, 0x24, 0x10, 0x6a, 0xc1, 0x9c, 0x4c, 0x23, 0xba, 0x21, 0xbd, 0xc4, - 0x3e, 0x03, 0xb3, 0x90, 0xd2, 0x3c, 0xb8, 0xb9, 0x5a, 0xb4, 0xdc, 0x39, 0x2b, 0x47, 0x61, 0xb5, 0x11, 0x51, 0x8d, - 0x54, 0xc7, 0xe0, 0xbc, 0x03, 0x11, 0x00, 0x8a, 0x11, 0x3c, 0xe3, 0x51, 0xbf, 0x1f, 0xa9, 0xa0, 0x9c, 0x84, 0x7e, - 0x51, 0xe8, 0x97, 0xc6, 0xa0, 0x8c, 0xf9, 0x97, 0x50, 0x13, 0x03, 0xd4, 0x3b, 0x1e, 0x2a, 0x8e, 0x00, 0x5c, 0xce, - 0x11, 0x33, 0xce, 0x7b, 0xdc, 0x45, 0xe3, 0x54, 0xbc, 0x13, 0xea, 0x3a, 0x58, 0x2a, 0xd4, 0x79, 0x53, 0x1f, 0xe9, - 0x39, 0x69, 0x12, 0x34, 0x88, 0x1b, 0x78, 0xbc, 0x1a, 0x02, 0xaa, 0xb5, 0x90, 0x7a, 0x0b, 0x9d, 0x52, 0xd5, 0x21, - 0xb0, 0x06, 0xb8, 0x44, 0x61, 0x3b, 0x61, 0x72, 0x44, 0xdb, 0xb2, 0x14, 0xf9, 0x09, 0x1b, 0xb4, 0x4b, 0x46, 0xa6, - 0x0e, 0x2e, 0x97, 0xcb, 0x89, 0xa8, 0x7f, 0xcd, 0xb7, 0x00, 0xce, 0x0b, 0xf9, 0xad, 0xdd, 0x6c, 0x99, 0x64, 0xbb, - 0xfe, 0x3f, 0xbc, 0x7d, 0x09, 0x77, 0xdb, 0x46, 0xb2, 0xee, 0x5f, 0x11, 0xf1, 0x1c, 0x06, 0x6d, 0x36, 0x29, 0x52, - 0xb1, 0x33, 0x09, 0xa8, 0x16, 0xaf, 0xe2, 0x25, 0x71, 0x26, 0x5e, 0x62, 0x39, 0x99, 0xcc, 0xf0, 0xf1, 0x2a, 0x10, - 0xd0, 0x12, 0x11, 0x43, 0x68, 0x06, 0x00, 0xb5, 0x84, 0xc4, 0x7f, 0x7f, 0xa7, 0xaa, 0x77, 0x10, 0x94, 0x3d, 0xf3, - 0xee, 0x7b, 0xc7, 0xe7, 0x58, 0x44, 0xa3, 0xd1, 0x7b, 0x57, 0x57, 0xd7, 0xf2, 0x55, 0x65, 0x63, 0x96, 0x94, 0xbc, - 0x5a, 0x89, 0xa2, 0xca, 0x6e, 0xf8, 0x4f, 0xe6, 0xa5, 0x1f, 0x40, 0x0a, 0xed, 0x48, 0x5f, 0xb7, 0xbb, 0xa3, 0xc4, - 0x38, 0xa6, 0x1c, 0xd7, 0x52, 0xe9, 0x5e, 0x8d, 0xaa, 0x13, 0x37, 0x5b, 0xe5, 0x5a, 0x66, 0x69, 0xca, 0x8b, 0x57, - 0x45, 0x9a, 0x25, 0x4e, 0x72, 0xac, 0x02, 0x54, 0xdb, 0xc8, 0x57, 0x36, 0x36, 0xf2, 0xf3, 0xac, 0xc2, 0x80, 0xc1, - 0x5e, 0xa3, 0x5a, 0xa1, 0xa6, 0x74, 0xe0, 0x0b, 0xf1, 0x1e, 0x23, 0x6e, 0xb3, 0x22, 0x01, 0x86, 0x1f, 0x13, 0xd5, - 0x25, 0x3d, 0x85, 0x28, 0x0f, 0x32, 0x1e, 0xf7, 0x73, 0x8e, 0x88, 0xd7, 0x46, 0x65, 0x0e, 0x4c, 0xb6, 0x52, 0x41, - 0x22, 0xd8, 0x5d, 0x36, 0x57, 0x8b, 0x68, 0x21, 0xef, 0x42, 0xbd, 0x78, 0xbb, 0xed, 0x25, 0x92, 0x0e, 0x58, 0xf9, - 0x69, 0xf0, 0x32, 0xce, 0x72, 0x9e, 0x1e, 0xd4, 0xe2, 0x40, 0x6e, 0xa8, 0x03, 0xe9, 0xcc, 0x01, 0x3b, 0xef, 0xcb, - 0xfa, 0x40, 0xad, 0xe9, 0x03, 0xd5, 0xce, 0x03, 0xb8, 0x60, 0xe0, 0xce, 0xbd, 0xca, 0x6e, 0x78, 0x71, 0x00, 0xca, - 0x40, 0x63, 0x3c, 0xd0, 0x54, 0xf5, 0x48, 0x4e, 0x8c, 0x0a, 0x5c, 0x9d, 0xa8, 0x83, 0x39, 0xa0, 0xdf, 0x03, 0x52, - 0x54, 0xeb, 0xed, 0x4a, 0x1d, 0xb4, 0x01, 0xfd, 0x69, 0xa9, 0xfb, 0xa0, 0xa2, 0xc5, 0xcb, 0x90, 0xc0, 0xde, 0x90, - 0x2a, 0xa4, 0x56, 0x2d, 0xab, 0x40, 0xf1, 0x86, 0xb3, 0x78, 0x77, 0xae, 0x25, 0x1b, 0xe7, 0x25, 0x02, 0x7b, 0x65, - 0x45, 0x1d, 0x67, 0xc5, 0xa9, 0x93, 0xca, 0x1b, 0xe5, 0x24, 0x53, 0x69, 0xdf, 0xb2, 0x82, 0xba, 0x3b, 0x44, 0xdf, - 0x22, 0xf5, 0x61, 0xf0, 0x22, 0xac, 0xc9, 0x8c, 0xf7, 0xfb, 0x62, 0x26, 0xa2, 0x62, 0x56, 0x1d, 0x16, 0x91, 0x44, - 0x68, 0xdb, 0x27, 0x02, 0x7a, 0x50, 0x02, 0xe4, 0x0a, 0x80, 0xea, 0x87, 0x84, 0x3f, 0x0f, 0x49, 0x7d, 0x3a, 0x85, - 0x3e, 0xa5, 0xb2, 0x5e, 0x71, 0x0a, 0xaa, 0x1b, 0x6f, 0x64, 0xbd, 0x0a, 0x5a, 0x3c, 0x96, 0x63, 0xb5, 0xa1, 0x6d, - 0x4e, 0x8d, 0x77, 0xbd, 0xde, 0x60, 0xd2, 0xe6, 0x42, 0xae, 0xc2, 0x90, 0x44, 0xb7, 0x85, 0x13, 0x3e, 0xc4, 0x60, - 0x65, 0xb5, 0x36, 0xbf, 0x8e, 0xfd, 0x91, 0x15, 0x29, 0xee, 0x67, 0x43, 0x9c, 0xbb, 0x78, 0x3c, 0xa7, 0xfa, 0x46, - 0x49, 0x8b, 0x74, 0x9b, 0xef, 0xd5, 0x65, 0x48, 0x51, 0x51, 0x4d, 0x1a, 0x55, 0x66, 0xd0, 0x7d, 0xdb, 0xbc, 0x55, - 0x3d, 0xc2, 0x04, 0x78, 0xa5, 0x32, 0xa8, 0x46, 0xe3, 0x81, 0x58, 0xd5, 0xa3, 0x72, 0x5d, 0x14, 0x88, 0x36, 0x0c, - 0x39, 0x66, 0x86, 0x90, 0x64, 0x7f, 0xf1, 0xef, 0x64, 0x70, 0x85, 0x32, 0xbe, 0xd5, 0x70, 0xde, 0xb5, 0xf1, 0xec, - 0x6e, 0x22, 0x37, 0x27, 0x16, 0xd6, 0xb8, 0x0f, 0xfe, 0x51, 0xab, 0x9d, 0x05, 0x94, 0x35, 0xad, 0x6a, 0x38, 0xdc, - 0xa3, 0x3a, 0x16, 0xa5, 0x06, 0x24, 0x76, 0xc8, 0x72, 0xd9, 0x3a, 0x66, 0xd0, 0x80, 0xfe, 0x2e, 0xbb, 0x5e, 0x5f, - 0x23, 0x6a, 0x5b, 0x81, 0xac, 0x93, 0x90, 0xfe, 0x25, 0xed, 0x51, 0x57, 0xf6, 0x54, 0xee, 0xb7, 0x6d, 0xaa, 0x1c, - 0x1a, 0x20, 0x79, 0xec, 0xe6, 0x2c, 0x90, 0x1d, 0x09, 0xa2, 0x40, 0x6e, 0xbd, 0x60, 0xea, 0x9c, 0x32, 0x65, 0x07, - 0xf2, 0x73, 0xa9, 0xcf, 0xb0, 0xcf, 0x38, 0x62, 0xf4, 0x52, 0x89, 0xc1, 0xd4, 0x47, 0x1b, 0xd5, 0xb4, 0x56, 0x80, - 0xaa, 0x9f, 0x6e, 0xe0, 0x4f, 0x54, 0x36, 0x68, 0xa8, 0x35, 0x12, 0x85, 0xa4, 0x89, 0x12, 0x3a, 0x96, 0x96, 0x2a, - 0x98, 0x42, 0x27, 0x91, 0x30, 0x04, 0x34, 0x4c, 0x88, 0x4a, 0x2a, 0xf1, 0xd6, 0x00, 0xce, 0x7c, 0xbc, 0xa8, 0xd6, - 0xa5, 0x32, 0x98, 0xfb, 0x21, 0xbe, 0xe1, 0xaf, 0x9e, 0x5b, 0xa3, 0xfa, 0x96, 0xb5, 0xbe, 0xa3, 0x05, 0xf9, 0x21, - 0xe4, 0x14, 0x1d, 0x98, 0xd8, 0xc9, 0x06, 0x0f, 0xe6, 0xa2, 0x51, 0xa1, 0x2e, 0xde, 0xaa, 0xf8, 0x2b, 0xca, 0x04, - 0xef, 0x01, 0x4f, 0x11, 0x65, 0x78, 0x58, 0x69, 0xab, 0x6a, 0x7c, 0x2a, 0x58, 0x4b, 0x0f, 0x56, 0xf2, 0x74, 0x9d, - 0xf0, 0x10, 0xf4, 0x48, 0x84, 0x9d, 0x84, 0xe5, 0x3c, 0x5e, 0xc0, 0x71, 0x52, 0x12, 0x50, 0x3b, 0xa8, 0x2b, 0xf8, - 0x7c, 0x81, 0xee, 0xaf, 0x02, 0x3d, 0xc0, 0xd0, 0x82, 0xd8, 0x0f, 0x7d, 0x3a, 0xba, 0x8e, 0x57, 0x9e, 0x8a, 0x84, - 0xcf, 0x4b, 0xb0, 0x1d, 0x92, 0xea, 0x29, 0xd0, 0x42, 0x25, 0x52, 0x3f, 0x0c, 0x7c, 0x87, 0x02, 0xbe, 0x56, 0x3a, - 0x40, 0x4d, 0x3f, 0x63, 0x9a, 0x1a, 0x67, 0xa8, 0x7c, 0xe6, 0xdc, 0x33, 0xa3, 0xe5, 0xcc, 0x80, 0x31, 0xa8, 0xdb, - 0x68, 0x8a, 0xe2, 0x9c, 0x7c, 0x16, 0x94, 0x71, 0x9a, 0xc5, 0x39, 0xf8, 0x6d, 0xc6, 0x25, 0x66, 0x4c, 0xe2, 0x9a, - 0x5f, 0x89, 0x12, 0xb4, 0xdd, 0xb9, 0x4c, 0x6d, 0x1a, 0x10, 0x90, 0xfd, 0x00, 0x56, 0x2f, 0x9e, 0x8e, 0xca, 0x7a, - 0x77, 0x29, 0x53, 0x88, 0xb2, 0x0a, 0xc1, 0xa6, 0x99, 0x2e, 0xd9, 0x69, 0x28, 0xb5, 0x39, 0x10, 0xdf, 0x08, 0x8d, - 0xfb, 0xa7, 0x61, 0x6c, 0x34, 0xc5, 0xc6, 0xee, 0x6d, 0xbb, 0xfd, 0xad, 0x70, 0xd2, 0x69, 0x4e, 0x7a, 0x8c, 0xfd, - 0x56, 0x84, 0xe5, 0xc8, 0x74, 0x84, 0xc0, 0x92, 0x73, 0x3e, 0x75, 0x5f, 0xd1, 0x62, 0x9e, 0x80, 0xe9, 0x88, 0x8a, - 0x90, 0x0b, 0x94, 0x1d, 0xa3, 0xb8, 0x03, 0x83, 0x0b, 0x66, 0x42, 0x10, 0x4b, 0x4f, 0x5d, 0x48, 0x96, 0x24, 0x65, - 0xf0, 0x3c, 0x75, 0x30, 0xe0, 0xd7, 0x4c, 0x9a, 0xbb, 0x48, 0xeb, 0xd3, 0x25, 0x99, 0xa6, 0xc8, 0x40, 0xac, 0xc3, - 0x4d, 0x96, 0x46, 0x89, 0x14, 0x91, 0x2d, 0xd1, 0x3f, 0x52, 0x53, 0x2c, 0x15, 0xae, 0x17, 0xa9, 0x12, 0xa1, 0xd5, - 0x3c, 0xc5, 0x93, 0x3a, 0x6d, 0xd2, 0x11, 0xc6, 0x9b, 0x04, 0xa5, 0x5c, 0x03, 0x03, 0x55, 0x50, 0xb5, 0x14, 0x36, - 0xe5, 0x76, 0xab, 0x2e, 0x56, 0xd5, 0x3c, 0x5e, 0xe0, 0xcb, 0x0a, 0x47, 0xf1, 0xef, 0xdc, 0x89, 0x35, 0x25, 0xb7, - 0x07, 0x35, 0x23, 0x4a, 0xe8, 0xdf, 0x39, 0x5c, 0x24, 0xbe, 0x13, 0x2a, 0xee, 0x1f, 0x5a, 0x84, 0x9c, 0xcb, 0x83, - 0x54, 0x73, 0x43, 0x3b, 0xc2, 0x7f, 0xcd, 0xf5, 0x69, 0x67, 0x74, 0x5f, 0xcd, 0xa8, 0xf0, 0x7b, 0x1d, 0x3c, 0x63, - 0xd4, 0x67, 0x03, 0x87, 0x15, 0xa2, 0xd0, 0x86, 0x9d, 0x14, 0x52, 0xb4, 0x30, 0x14, 0xf2, 0x2f, 0xa1, 0xd5, 0x09, - 0xb7, 0x66, 0x94, 0x05, 0xe3, 0xd3, 0xe2, 0xb8, 0x9a, 0x0e, 0x06, 0x05, 0xa9, 0xb5, 0x85, 0x1e, 0x5c, 0x0f, 0x1c, - 0xff, 0x1e, 0xb8, 0x85, 0x38, 0x70, 0xc8, 0xd5, 0x90, 0x6b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8f, 0x2a, 0x19, 0xbc, - 0x9a, 0xc8, 0x16, 0xfc, 0xbd, 0x08, 0x03, 0xf4, 0x49, 0x0a, 0xc0, 0x64, 0x30, 0xe5, 0x77, 0x20, 0x51, 0x3a, 0x97, - 0x37, 0xa4, 0x5f, 0x8a, 0x92, 0x5f, 0xf2, 0x92, 0x17, 0x89, 0x2d, 0xc0, 0xf0, 0x0e, 0xa6, 0xd7, 0x51, 0x4d, 0x25, - 0x10, 0xaf, 0xee, 0x71, 0xc4, 0xb5, 0xf7, 0x9f, 0xee, 0xb1, 0x01, 0x6a, 0x35, 0x8e, 0x0d, 0x2e, 0x73, 0x0c, 0x2e, - 0xe8, 0x4a, 0x62, 0xab, 0xa9, 0x86, 0x11, 0x81, 0x81, 0x0b, 0x38, 0x08, 0x4b, 0x24, 0xc7, 0x56, 0xf1, 0x9a, 0x78, - 0x52, 0xda, 0x07, 0x86, 0xa3, 0x4d, 0x72, 0x5c, 0x9b, 0x65, 0x3b, 0x81, 0xf3, 0x45, 0xe7, 0xa4, 0xe9, 0x58, 0x36, - 0x78, 0x9f, 0xd7, 0xe7, 0xd7, 0xfe, 0x21, 0xa1, 0x32, 0xd8, 0x0d, 0x6f, 0x07, 0xbb, 0xb1, 0xc2, 0xaf, 0x79, 0xb5, - 0x50, 0xf1, 0x59, 0xf4, 0x25, 0xcb, 0x6d, 0xad, 0x73, 0x4b, 0x12, 0x4a, 0x01, 0xed, 0xb2, 0x2c, 0xa8, 0x89, 0x00, - 0x74, 0x3f, 0xfc, 0x05, 0x42, 0x67, 0xf8, 0xdb, 0x63, 0x70, 0x45, 0x0a, 0xf7, 0x0e, 0x41, 0x65, 0x4c, 0x37, 0x77, - 0x6a, 0x03, 0xbe, 0x18, 0xf7, 0x67, 0x4c, 0x1d, 0xfd, 0x36, 0x13, 0xbb, 0xba, 0x6e, 0x87, 0x2c, 0xc3, 0x47, 0xb8, - 0x52, 0x00, 0x2c, 0x13, 0xfe, 0x62, 0x6c, 0x49, 0xf9, 0x09, 0xc0, 0xa9, 0xa9, 0x88, 0x3e, 0x41, 0xa0, 0xe1, 0x94, - 0x68, 0x39, 0xba, 0x91, 0x8e, 0x68, 0x1a, 0x69, 0x4d, 0xb5, 0x42, 0x7b, 0xeb, 0x61, 0x91, 0xd6, 0x34, 0x9c, 0xb8, - 0x0f, 0x8a, 0x79, 0x95, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0x51, 0x1f, 0x21, 0x2e, 0x61, 0x49, 0x14, 0x61, - 0x71, 0x4c, 0xf1, 0x63, 0x42, 0x37, 0xbe, 0xb6, 0xe9, 0x03, 0xd2, 0x5f, 0x5c, 0xb3, 0x6e, 0xca, 0xb2, 0x71, 0xed, - 0xa1, 0xe2, 0xc5, 0xd4, 0x0f, 0x7e, 0x98, 0xc8, 0x62, 0xdc, 0x2f, 0x6a, 0x57, 0x6a, 0x05, 0x30, 0xcc, 0x5d, 0xf5, - 0xf4, 0xfb, 0x7e, 0xb6, 0x1c, 0x08, 0x95, 0xdb, 0x19, 0x24, 0x7d, 0x2a, 0x9e, 0x1f, 0x1c, 0xd1, 0xca, 0x42, 0xcf, - 0x1d, 0x97, 0xc6, 0x87, 0xca, 0x6b, 0x53, 0x23, 0x5a, 0x23, 0x43, 0x65, 0xea, 0x80, 0xf5, 0xfd, 0x43, 0xb8, 0xbb, - 0xa8, 0x69, 0xa8, 0x74, 0xcf, 0x5d, 0x8b, 0x82, 0x13, 0x77, 0x80, 0xb1, 0xb8, 0x90, 0x34, 0x2a, 0x08, 0x93, 0x7a, - 0x34, 0x38, 0xc9, 0x5e, 0x5d, 0x9d, 0x9c, 0x29, 0xe6, 0x09, 0x6c, 0x54, 0xcb, 0xb6, 0xbf, 0xa2, 0x54, 0x97, 0x72, - 0x73, 0x45, 0xf1, 0x3d, 0xa4, 0xcd, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x33, 0x05, 0x17, 0xc6, 0xc1, 0xba, 0xe3, - 0x4e, 0xd9, 0x73, 0x45, 0x99, 0xc6, 0x06, 0x77, 0xed, 0x31, 0x26, 0xda, 0x7e, 0x77, 0xc9, 0x93, 0x8f, 0xc8, 0x82, - 0x7f, 0x97, 0x15, 0xe0, 0x99, 0x6c, 0x5f, 0xc9, 0xfc, 0x3f, 0xb8, 0x57, 0x5b, 0xf3, 0xce, 0x98, 0x7f, 0x3a, 0xd6, - 0xc3, 0x9d, 0xc3, 0xe4, 0x06, 0xe8, 0x0c, 0xe8, 0xe6, 0x5a, 0xa4, 0x1c, 0x90, 0x01, 0x8c, 0x45, 0x32, 0x1a, 0xf0, - 0xa1, 0x95, 0x65, 0xdb, 0x77, 0x5a, 0x5e, 0x10, 0xf6, 0x12, 0xb8, 0xe9, 0xfe, 0xda, 0xf4, 0xcc, 0xa9, 0x5a, 0x89, - 0xa2, 0x4b, 0x63, 0x63, 0x59, 0x2a, 0x81, 0xdd, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x78, 0x39, 0xcd, 0x0d, 0x75, 0xdb, - 0xd8, 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0x35, 0x22, 0xf4, 0x54, 0x8a, - 0xd0, 0xa7, 0xa9, 0xdf, 0x07, 0xb3, 0xaa, 0xd6, 0x5e, 0x9c, 0xa3, 0x41, 0xaa, 0x18, 0xf9, 0xb7, 0x37, 0xbc, 0xbc, - 0xcc, 0xc5, 0x2d, 0x60, 0x20, 0x93, 0x46, 0x2b, 0x2c, 0xaf, 0xc1, 0x9d, 0x1f, 0x1d, 0xc7, 0x19, 0xc0, 0x26, 0x41, - 0xb0, 0x56, 0x84, 0x47, 0x56, 0x89, 0x33, 0x00, 0x41, 0x76, 0x27, 0x4d, 0xc5, 0x73, 0x2d, 0x31, 0xa6, 0x2f, 0x70, - 0x57, 0x39, 0x3b, 0xd9, 0xe4, 0x66, 0xd1, 0xfb, 0x33, 0xac, 0x3a, 0x52, 0x19, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, - 0x06, 0x4d, 0x11, 0x52, 0x3e, 0x64, 0x4f, 0xda, 0xbf, 0x02, 0x1a, 0x9c, 0x67, 0xe9, 0x9d, 0xb1, 0xca, 0xdf, 0x28, - 0x21, 0x4e, 0x14, 0x53, 0x2b, 0xbe, 0x89, 0x12, 0x75, 0x7e, 0x26, 0xda, 0x0d, 0x04, 0x52, 0x7f, 0xc0, 0xa0, 0x1a, - 0x65, 0x98, 0xc0, 0x75, 0x20, 0x8a, 0xcd, 0x89, 0xea, 0x2d, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x01, 0x50, 0xef, 0xd8, - 0xfa, 0x08, 0x68, 0x96, 0xbe, 0x69, 0xad, 0x73, 0x4d, 0x28, 0xb4, 0x13, 0x98, 0x64, 0x90, 0xe4, 0x59, 0x67, 0x98, - 0xa0, 0xda, 0x8c, 0x49, 0xe7, 0x7d, 0x80, 0xee, 0xae, 0x45, 0x5d, 0x7c, 0xd3, 0xb9, 0x83, 0xf6, 0x71, 0xfd, 0x4a, - 0x8b, 0xec, 0xf1, 0xe7, 0x2d, 0x11, 0x16, 0x81, 0xb3, 0x56, 0xe7, 0xab, 0x47, 0x38, 0x30, 0x15, 0x99, 0x86, 0xbd, - 0x44, 0x2a, 0x59, 0xb6, 0xdb, 0x5e, 0x6f, 0xaf, 0x88, 0xab, 0xc7, 0x58, 0xed, 0xdc, 0xcc, 0xcd, 0x9d, 0x6a, 0x5d, - 0xec, 0xde, 0xb4, 0xdd, 0x14, 0x33, 0x6a, 0xad, 0xdd, 0xae, 0x39, 0x21, 0x4f, 0xbe, 0x15, 0xd5, 0x4a, 0x9d, 0xae, - 0x0d, 0xda, 0x21, 0x9e, 0x75, 0x91, 0xc1, 0x8d, 0xf2, 0xb9, 0x15, 0x3a, 0xc9, 0x38, 0xab, 0x56, 0x5d, 0xb0, 0xb9, - 0xe6, 0xf5, 0x52, 0xa4, 0x51, 0x45, 0xd1, 0xe6, 0x3c, 0x2a, 0x68, 0x22, 0xd6, 0x45, 0x1d, 0x89, 0x06, 0xf5, 0xa2, - 0x46, 0x63, 0x80, 0x80, 0x4c, 0xe7, 0xbe, 0x07, 0x55, 0x30, 0x1b, 0x8a, 0x48, 0x4c, 0xdf, 0x83, 0xa5, 0x7d, 0x01, - 0xfb, 0xa2, 0xd9, 0x57, 0x67, 0x8b, 0x6f, 0x75, 0x84, 0x60, 0x12, 0xb3, 0x07, 0xc2, 0xc0, 0xf9, 0xc6, 0x90, 0xd3, - 0x2e, 0x71, 0x99, 0xef, 0x96, 0xb0, 0x87, 0xdb, 0x15, 0xec, 0xc4, 0xce, 0x93, 0xe2, 0xe6, 0x4a, 0x76, 0x52, 0xce, - 0xc7, 0xa0, 0xfd, 0x12, 0xf2, 0xda, 0xa5, 0xb8, 0xf5, 0x78, 0x10, 0xd0, 0x60, 0x50, 0x6a, 0xfe, 0x75, 0xa2, 0x3d, - 0x3c, 0x69, 0x40, 0x90, 0x94, 0x83, 0x8b, 0xb6, 0x63, 0xf8, 0x3e, 0x99, 0x8a, 0x63, 0x8e, 0x16, 0xef, 0xd0, 0xea, - 0x04, 0xa2, 0x78, 0x81, 0xbd, 0x9b, 0x56, 0x15, 0x6a, 0x11, 0x94, 0xa3, 0xe5, 0x2f, 0x64, 0x75, 0x08, 0x28, 0xa4, - 0x7c, 0x45, 0xa1, 0x6c, 0x9d, 0x18, 0xea, 0xe1, 0x17, 0xf3, 0xc9, 0x42, 0xcd, 0xc0, 0x40, 0xcc, 0x8f, 0x16, 0x6a, - 0x16, 0x06, 0x62, 0xfe, 0xd5, 0xa2, 0xb1, 0xeb, 0x40, 0x11, 0x10, 0xc7, 0x85, 0xa3, 0x93, 0xd2, 0xca, 0x6c, 0x01, - 0xdd, 0x3c, 0x44, 0xd0, 0xff, 0x6e, 0x0e, 0x41, 0x2b, 0x17, 0xda, 0x91, 0x1b, 0xd0, 0x76, 0x1c, 0x02, 0x73, 0xc5, - 0xa4, 0x95, 0x0e, 0x40, 0x74, 0xcc, 0xc6, 0x60, 0x88, 0x2d, 0x3f, 0x38, 0x66, 0xe3, 0xa9, 0x4b, 0x82, 0x80, 0xd1, - 0xfd, 0x41, 0x43, 0x82, 0xdf, 0xe1, 0x55, 0xfa, 0x64, 0x83, 0xbe, 0x66, 0xce, 0xdd, 0xd0, 0xb9, 0xb8, 0x82, 0x53, - 0xb5, 0xbd, 0x27, 0xa1, 0x9b, 0x4c, 0x3b, 0x40, 0xaf, 0x26, 0x6e, 0xc8, 0xaf, 0x8c, 0x46, 0xa3, 0x62, 0x64, 0x00, - 0x20, 0x88, 0xe6, 0x1c, 0xfc, 0x9c, 0x86, 0xcb, 0x97, 0xb7, 0x9e, 0x4d, 0x31, 0x02, 0x5a, 0xc8, 0x44, 0xf3, 0x00, - 0x65, 0x55, 0x63, 0x68, 0x86, 0xde, 0x21, 0xc7, 0x0f, 0x0f, 0xbe, 0xce, 0xf8, 0x89, 0xc3, 0xb5, 0x87, 0x73, 0xe1, - 0xba, 0xac, 0x69, 0x99, 0x43, 0xe7, 0xd9, 0xc7, 0xf1, 0x1e, 0xc6, 0xc9, 0xa7, 0x59, 0x28, 0x67, 0xbc, 0xa6, 0xff, - 0x51, 0xe9, 0x7e, 0x87, 0x43, 0x4e, 0x57, 0xb0, 0xe2, 0x66, 0x75, 0xa8, 0xf9, 0x59, 0xe4, 0x8d, 0x23, 0xde, 0x90, - 0xa8, 0xee, 0x3e, 0xef, 0x4d, 0x98, 0xd2, 0x8e, 0x71, 0x00, 0x70, 0xa2, 0x56, 0x0d, 0xbb, 0xd2, 0xb8, 0x56, 0x07, - 0x31, 0x0c, 0x25, 0x6c, 0x95, 0x38, 0xaa, 0xa4, 0xbf, 0x01, 0x08, 0x8b, 0xa1, 0x38, 0xde, 0x1a, 0xd6, 0x07, 0xd8, - 0x0f, 0x55, 0xa0, 0x6e, 0x4e, 0x21, 0x67, 0x00, 0x90, 0x04, 0xdc, 0xd1, 0x53, 0x4d, 0x43, 0x65, 0x9b, 0xe3, 0xa1, - 0x65, 0x74, 0x05, 0x0f, 0xf4, 0xd4, 0x96, 0x0c, 0x8c, 0xab, 0x3c, 0xf6, 0x36, 0xfb, 0xdb, 0xa3, 0x54, 0xe4, 0x3b, - 0x9b, 0xd4, 0x34, 0xab, 0x46, 0x63, 0x1f, 0x47, 0xe8, 0x69, 0x05, 0x68, 0xbd, 0xb6, 0x54, 0xb4, 0xdf, 0x47, 0x31, - 0x6a, 0x5c, 0x4a, 0xb0, 0x0a, 0x1d, 0x09, 0x0e, 0x11, 0x46, 0x08, 0xfd, 0xbe, 0x08, 0x37, 0xae, 0x20, 0x83, 0x28, - 0xb8, 0x16, 0x15, 0x7f, 0xc8, 0xf2, 0xa2, 0x6d, 0xa9, 0xaa, 0x3e, 0x69, 0xda, 0x12, 0x78, 0x1d, 0x0e, 0xb0, 0x9d, - 0x7f, 0xea, 0x89, 0x5c, 0x2b, 0x1b, 0x25, 0x7c, 0x47, 0x5c, 0x0b, 0xa2, 0x9b, 0x46, 0xd7, 0xeb, 0xd9, 0x21, 0x5a, - 0x9a, 0xe2, 0xd0, 0x21, 0xfb, 0xdc, 0x3d, 0xb7, 0x65, 0x7c, 0xfb, 0x09, 0x72, 0xe7, 0x3b, 0x7b, 0x49, 0xc2, 0x20, - 0x6f, 0xd9, 0x40, 0xb1, 0x8e, 0xad, 0xa0, 0x00, 0xa3, 0xb6, 0xfc, 0x05, 0x74, 0x6c, 0x30, 0xa8, 0x09, 0x3e, 0x49, - 0x6c, 0x1b, 0x8f, 0xfc, 0x11, 0xe7, 0x86, 0x0e, 0xaf, 0x0d, 0x79, 0x20, 0x4e, 0x61, 0x9f, 0x28, 0x61, 0xff, 0x82, - 0x82, 0xee, 0x48, 0x2f, 0x57, 0x89, 0xab, 0xe2, 0x01, 0xaa, 0xec, 0x78, 0xae, 0xf9, 0x92, 0x16, 0x5a, 0x69, 0x64, - 0x15, 0x1d, 0x11, 0xb7, 0x60, 0x32, 0x66, 0xab, 0x6a, 0x54, 0x71, 0x2c, 0x50, 0xa4, 0x63, 0xce, 0x76, 0x0e, 0xd6, - 0x00, 0x78, 0x0a, 0x9b, 0x8b, 0x33, 0x2c, 0x28, 0xed, 0xb2, 0xa5, 0x2f, 0x81, 0x55, 0xf3, 0x30, 0xce, 0xcb, 0x8e, - 0x2f, 0x77, 0x47, 0xdb, 0x7b, 0xe8, 0x8d, 0xe8, 0x8d, 0xd7, 0xe7, 0x51, 0xd3, 0xcf, 0x9e, 0xe1, 0xda, 0x50, 0x90, - 0x07, 0x9a, 0xea, 0x10, 0x46, 0x8b, 0xc0, 0x34, 0xe5, 0x27, 0x6c, 0x3c, 0x1d, 0x0e, 0x35, 0x19, 0x74, 0x9a, 0x89, - 0xf1, 0xbf, 0x3e, 0x83, 0xd6, 0xe9, 0x89, 0xf3, 0x3e, 0x6d, 0x5f, 0x41, 0xeb, 0x3b, 0x94, 0xc9, 0x9d, 0x83, 0xe1, - 0x03, 0x2d, 0x98, 0x84, 0xa9, 0xc2, 0x1b, 0x22, 0x15, 0xec, 0xcd, 0xd2, 0x38, 0xec, 0x9b, 0x85, 0x42, 0x4b, 0x45, - 0xfc, 0x6a, 0x4d, 0xfc, 0xe4, 0x75, 0xe6, 0xdf, 0xa6, 0x7d, 0x72, 0x10, 0x4b, 0x43, 0x62, 0x24, 0xe2, 0x17, 0xa7, - 0xd2, 0x76, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x64, 0xec, 0x49, 0x8d, 0xa7, 0x86, 0xfb, 0x5e, 0xc7, - 0xac, 0xc3, 0x2c, 0x76, 0xb3, 0x46, 0x42, 0x61, 0x9c, 0x9a, 0xe0, 0x94, 0x62, 0x15, 0xc9, 0xe8, 0x78, 0xa6, 0x30, - 0x88, 0x2a, 0x29, 0x21, 0xd6, 0x94, 0xad, 0x85, 0x89, 0x5d, 0x67, 0x0b, 0x53, 0xd4, 0x45, 0xa8, 0x37, 0x03, 0x9d, - 0x05, 0x0d, 0xf9, 0x1d, 0x1a, 0xad, 0xa8, 0x9a, 0x04, 0x0c, 0xe3, 0x28, 0xd5, 0xf8, 0xb7, 0x08, 0xb5, 0x1e, 0x06, - 0x00, 0xb6, 0x79, 0x27, 0xb2, 0xa2, 0x7e, 0x55, 0x20, 0x04, 0x9a, 0xb5, 0x9f, 0x2a, 0xeb, 0x9d, 0x59, 0xd0, 0x8a, - 0x76, 0x73, 0xe5, 0x73, 0x81, 0x13, 0xaa, 0x53, 0x79, 0x81, 0x7a, 0x29, 0xca, 0xd7, 0x22, 0xe5, 0xad, 0xb8, 0x98, - 0x07, 0x82, 0x7d, 0xc8, 0x47, 0x70, 0x5e, 0xa1, 0x53, 0xb9, 0xde, 0x26, 0xd2, 0x2c, 0x49, 0x30, 0x16, 0x68, 0x9b, - 0x97, 0x60, 0x26, 0x14, 0x33, 0x86, 0x5f, 0x43, 0x70, 0xb1, 0x9d, 0x93, 0x70, 0xb3, 0x9f, 0x07, 0x86, 0xd0, 0xe4, - 0x55, 0x4b, 0x34, 0x6c, 0xec, 0x78, 0x1d, 0xb9, 0x26, 0xdc, 0x87, 0xb5, 0x58, 0x93, 0x31, 0xc6, 0x95, 0xb9, 0x91, - 0xf1, 0xa3, 0x05, 0x1e, 0x8c, 0x49, 0xeb, 0x4f, 0x20, 0xd3, 0x52, 0xca, 0x3a, 0x5f, 0x68, 0x31, 0x93, 0x4c, 0x74, - 0x6e, 0xdf, 0xf8, 0x2c, 0xef, 0x22, 0xf2, 0xb7, 0xf2, 0x7b, 0x92, 0x0f, 0xf7, 0xee, 0x83, 0xc4, 0x1a, 0x94, 0x46, - 0x5c, 0x5a, 0x94, 0xa7, 0x0f, 0x74, 0xdd, 0xa4, 0x88, 0xd3, 0xf3, 0x55, 0x5c, 0x56, 0x3c, 0x85, 0x4a, 0x15, 0x75, - 0x8b, 0x7a, 0x13, 0xb0, 0x37, 0x44, 0x92, 0x64, 0x2c, 0x8d, 0x8d, 0xd8, 0xc5, 0x23, 0x3d, 0x7b, 0xc3, 0x2c, 0xbd, - 0xac, 0xd1, 0x90, 0x96, 0x3a, 0x67, 0xa1, 0x94, 0xf9, 0x4b, 0xfe, 0x33, 0x68, 0x24, 0xe8, 0xa8, 0x4f, 0x31, 0x9e, - 0x01, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x08, 0x4a, 0xb3, 0x23, 0x76, 0xfc, 0xd4, 0xe4, 0xe1, 0x5d, - 0xc8, 0x3a, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0xa8, 0x1a, 0xc9, 0x19, 0x40, 0xd3, 0x41, 0x91, 0xf3, 0xb8, - 0x08, 0x66, 0x3d, 0x9d, 0x18, 0xf5, 0xb8, 0xfa, 0x05, 0x1a, 0x6a, 0xb7, 0x59, 0x59, 0x9e, 0xd5, 0xf7, 0x9f, 0xc3, - 0x81, 0x4d, 0x4d, 0x05, 0x3d, 0xde, 0xd4, 0xe2, 0xea, 0x4a, 0x76, 0xdb, 0x2d, 0x44, 0xcb, 0xe9, 0xbc, 0x6b, 0xe9, - 0xbc, 0x5e, 0xb0, 0x5e, 0x77, 0xba, 0x5e, 0xdc, 0x7e, 0x19, 0x1e, 0xc2, 0xda, 0xce, 0x27, 0x8a, 0x3f, 0xf3, 0xdb, - 0xee, 0xe2, 0x2d, 0x54, 0xb3, 0x00, 0x00, 0xd2, 0x83, 0x28, 0x58, 0x66, 0x29, 0x0f, 0xa8, 0xd8, 0xc7, 0x51, 0x96, - 0x52, 0x2f, 0x67, 0x18, 0x3f, 0x65, 0x1a, 0x6b, 0x9c, 0x15, 0xaa, 0xd0, 0xd8, 0xe8, 0x4e, 0x57, 0x19, 0x62, 0xfb, - 0x09, 0x9c, 0x2d, 0xc0, 0xfd, 0xd1, 0x43, 0xa1, 0xee, 0x4d, 0x5a, 0x9a, 0xa8, 0xf9, 0xae, 0x3d, 0x83, 0x8c, 0xe2, - 0x64, 0x95, 0x57, 0xd0, 0x8d, 0x3a, 0x6b, 0xa3, 0x4a, 0xdf, 0x43, 0xd4, 0xab, 0x18, 0x3c, 0xca, 0x5d, 0x5e, 0x1b, - 0x9d, 0x4c, 0x8b, 0x48, 0xb9, 0xf3, 0x93, 0x66, 0x99, 0xa5, 0x4a, 0x87, 0xed, 0x32, 0xec, 0xad, 0x31, 0xe9, 0x4d, - 0x48, 0x03, 0x23, 0xf1, 0xe9, 0x8c, 0x0a, 0x21, 0xa0, 0x2d, 0xc7, 0xdf, 0xe1, 0x33, 0x34, 0x4d, 0x81, 0xa5, 0x8a, - 0x5b, 0xd8, 0x0e, 0x9f, 0xff, 0x64, 0xd4, 0x02, 0x10, 0xc1, 0xca, 0xd5, 0xbb, 0x38, 0x25, 0x34, 0xe7, 0xca, 0x0c, - 0x00, 0x59, 0x50, 0xca, 0x2d, 0x3f, 0x25, 0xd3, 0xc1, 0x12, 0x45, 0xd9, 0xcb, 0xa9, 0x1b, 0x1d, 0x1b, 0x3f, 0xa4, - 0xe7, 0x02, 0xb6, 0x0b, 0xf9, 0xad, 0xbd, 0x7a, 0x89, 0x9a, 0x34, 0xa6, 0x59, 0x0f, 0xf0, 0xe5, 0x1a, 0x4d, 0x42, - 0x0b, 0xca, 0xa4, 0x29, 0x80, 0xc6, 0x4d, 0xd5, 0x0a, 0x26, 0xa5, 0x46, 0xc2, 0x96, 0x3a, 0x92, 0x65, 0xdf, 0x07, - 0xa7, 0xde, 0x23, 0xe8, 0x01, 0xf3, 0x08, 0xf4, 0xf4, 0x5f, 0xba, 0x6a, 0xff, 0x92, 0xa3, 0x93, 0xab, 0x26, 0x6a, - 0xfa, 0xbd, 0xb2, 0x23, 0x43, 0xca, 0xa5, 0x19, 0x08, 0x26, 0x1d, 0xf3, 0xd4, 0xd8, 0x3a, 0x46, 0x44, 0x0f, 0x9c, - 0x7d, 0xba, 0x5b, 0x4d, 0x2d, 0x00, 0xd1, 0xf1, 0xeb, 0x27, 0xaf, 0xae, 0xe3, 0x2b, 0x8d, 0xa2, 0xe4, 0x59, 0xc4, - 0x48, 0xd3, 0xbe, 0x5a, 0xc0, 0xe0, 0xfd, 0xf2, 0xfe, 0x27, 0x99, 0xa5, 0x71, 0x7b, 0xb0, 0x31, 0xa2, 0xaa, 0x5f, - 0x2a, 0x5e, 0xfa, 0x02, 0xac, 0x7d, 0x96, 0x28, 0x90, 0xfb, 0xbd, 0x49, 0xd3, 0xdf, 0x44, 0xde, 0xcd, 0x86, 0xf5, - 0xc6, 0x4d, 0xbb, 0xd4, 0x96, 0xec, 0xc8, 0x48, 0xe4, 0xf4, 0x62, 0xd0, 0xe3, 0x47, 0x2b, 0x8d, 0xd2, 0xb0, 0x41, - 0x55, 0x2a, 0x7e, 0xaf, 0x45, 0x70, 0xf2, 0x58, 0x95, 0x18, 0xd3, 0x80, 0xd9, 0x56, 0x36, 0x0a, 0xd4, 0x41, 0x2a, - 0x6d, 0x75, 0x14, 0xb6, 0xdf, 0x58, 0x49, 0xf5, 0xef, 0x7f, 0x6a, 0x43, 0x3e, 0x5f, 0x0a, 0x2a, 0x08, 0xd8, 0x19, - 0x78, 0x3d, 0x95, 0xc2, 0x40, 0x2a, 0xd8, 0x49, 0x05, 0x28, 0x5f, 0x44, 0x8e, 0xd5, 0x6e, 0x5f, 0xad, 0x1a, 0xa3, - 0x2d, 0x20, 0x34, 0x90, 0x1e, 0x5d, 0xf6, 0x71, 0x1b, 0xe3, 0x40, 0xe2, 0xc0, 0x09, 0xb6, 0x73, 0x75, 0x8d, 0x46, - 0x42, 0xf3, 0x87, 0x46, 0x03, 0x5e, 0xd3, 0x1a, 0x14, 0xea, 0x39, 0x8e, 0x86, 0xca, 0x0e, 0x29, 0x88, 0xd8, 0xa0, - 0x84, 0x7d, 0x7b, 0x3e, 0xd4, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x43, 0x85, 0xfd, 0xdc, 0x2e, 0x21, 0x63, 0xd5, 0x21, - 0xad, 0x3c, 0xc0, 0xf1, 0x42, 0xca, 0xfc, 0x2d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x6d, 0xc4, 0x02, 0x96, 0x04, 0xed, - 0xf5, 0x40, 0xdd, 0x32, 0x08, 0x75, 0x4c, 0x4f, 0x04, 0x3e, 0xa5, 0x5c, 0x7e, 0x5a, 0x92, 0x66, 0x5a, 0x32, 0x0b, - 0x7a, 0xe9, 0x5a, 0xf9, 0x15, 0xde, 0x47, 0xbb, 0x7b, 0x57, 0x5f, 0x58, 0xc7, 0x10, 0x0c, 0xbb, 0x72, 0x9b, 0xd3, - 0x50, 0x00, 0x36, 0x3c, 0x55, 0x65, 0xb9, 0x46, 0x4d, 0x64, 0x16, 0x87, 0x24, 0x02, 0xc9, 0xb6, 0xbf, 0xb9, 0xb5, - 0x60, 0xdb, 0x59, 0xa8, 0x9e, 0xfa, 0xcb, 0xd9, 0xee, 0x7b, 0x86, 0x97, 0x3b, 0x72, 0x6f, 0xdf, 0x86, 0xf2, 0x87, - 0xfd, 0xab, 0xe4, 0xff, 0xaa, 0x92, 0xfd, 0x56, 0x99, 0x4d, 0x5b, 0xbc, 0xdf, 0x75, 0xdc, 0x72, 0x8c, 0x06, 0x81, - 0x35, 0x05, 0x1a, 0xd2, 0x93, 0xc6, 0x34, 0x51, 0x21, 0x95, 0x19, 0xd3, 0x78, 0x74, 0x01, 0x9a, 0xc3, 0x74, 0x9e, - 0xc7, 0x00, 0x1c, 0xe0, 0x1e, 0x79, 0x84, 0xba, 0xa7, 0xf3, 0x3c, 0x38, 0x0f, 0x06, 0xc5, 0x20, 0x50, 0x9f, 0xd8, - 0xe6, 0x04, 0x0b, 0xd0, 0xb9, 0xc5, 0x0c, 0x82, 0x4d, 0x1a, 0x33, 0x87, 0xf8, 0x38, 0x99, 0x0e, 0x06, 0x31, 0xd9, - 0x00, 0x48, 0x5f, 0xbc, 0x30, 0xce, 0x41, 0xa5, 0x5a, 0x90, 0xad, 0xba, 0x4b, 0xbf, 0x62, 0xa7, 0xda, 0x69, 0xde, - 0xef, 0xe7, 0xf3, 0x62, 0x10, 0x78, 0x15, 0x96, 0xda, 0xfb, 0x8f, 0xfa, 0x5f, 0x6a, 0x9d, 0x34, 0xc1, 0x30, 0xb5, - 0xa7, 0xa8, 0x5e, 0x71, 0x34, 0xa3, 0xde, 0xed, 0x58, 0x2a, 0x5f, 0x40, 0x14, 0x0f, 0x0c, 0x59, 0x2b, 0xef, 0xce, - 0xc1, 0x6b, 0x73, 0xe3, 0xcd, 0x11, 0x05, 0xd8, 0xbe, 0x30, 0x4e, 0x28, 0x2e, 0xba, 0x6c, 0x88, 0x63, 0xb0, 0xd3, - 0xd5, 0x5b, 0x81, 0x56, 0xe3, 0xbd, 0x78, 0xd7, 0x6c, 0xfc, 0x8d, 0x38, 0x50, 0x65, 0x1e, 0x5c, 0x02, 0xe2, 0xec, - 0x41, 0x5c, 0x1f, 0x60, 0xa9, 0x07, 0xc1, 0xc0, 0x20, 0x87, 0xb4, 0xab, 0x55, 0x43, 0x11, 0xc9, 0xf3, 0x18, 0x0c, - 0x98, 0x74, 0x43, 0x1a, 0x32, 0xed, 0x95, 0x12, 0xd2, 0xc6, 0x58, 0x0b, 0x28, 0xc3, 0xe1, 0x6a, 0xc7, 0x6e, 0xd8, - 0x9e, 0x6e, 0x1d, 0x0a, 0x25, 0x8c, 0x5e, 0xdd, 0xf8, 0x87, 0x9a, 0xe7, 0x89, 0xa0, 0x06, 0x55, 0x6b, 0x3f, 0x1d, - 0x94, 0x27, 0xe5, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0xa2, 0xc0, 0x8b, 0xf6, 0x0e, 0xf2, 0x9c, 0xfe, 0x54, 0xfa, - 0x20, 0x7a, 0x6e, 0x19, 0x2e, 0xb4, 0x8f, 0x6b, 0x05, 0x32, 0x69, 0x3a, 0x9a, 0xda, 0xda, 0x1d, 0xde, 0x31, 0x81, - 0x7e, 0x53, 0x96, 0x52, 0x26, 0xba, 0x96, 0x25, 0x3b, 0xe9, 0xe5, 0xd2, 0x1b, 0x2a, 0x65, 0x27, 0xcb, 0x36, 0xe7, - 0x97, 0x7a, 0x09, 0xfd, 0xbe, 0x72, 0x07, 0xc2, 0x37, 0x72, 0xbd, 0x21, 0x2f, 0x1b, 0x22, 0x96, 0x43, 0xcc, 0xc0, - 0xf1, 0x42, 0x48, 0xd7, 0xee, 0xd2, 0x57, 0xd5, 0xed, 0x6c, 0xe5, 0x92, 0x16, 0x78, 0x2b, 0x05, 0x56, 0x91, 0x5a, - 0xbd, 0x9e, 0x4c, 0xdc, 0xf7, 0x51, 0x6c, 0x3e, 0x02, 0xb6, 0xd1, 0x3b, 0x1a, 0xbd, 0x5b, 0xc4, 0x06, 0x5f, 0x45, - 0x35, 0x2d, 0x39, 0x40, 0x70, 0xb7, 0x25, 0xb5, 0x34, 0xb3, 0x88, 0xfb, 0x92, 0x07, 0x68, 0xdf, 0xc5, 0xe1, 0x4c, - 0x2a, 0xc1, 0xb6, 0xae, 0x75, 0xce, 0x2a, 0x39, 0xa0, 0x9f, 0xe8, 0xf8, 0xa7, 0xd5, 0xa3, 0x22, 0x86, 0x55, 0x36, - 0x92, 0x56, 0x68, 0x0f, 0x4a, 0x97, 0x70, 0xf1, 0x05, 0x78, 0xd9, 0xde, 0xaf, 0xec, 0x3e, 0x5f, 0x62, 0xff, 0x30, - 0xaf, 0x9c, 0xe0, 0x91, 0xd3, 0x78, 0x73, 0x0f, 0xab, 0x3e, 0x57, 0x0a, 0xe1, 0x54, 0x4a, 0x43, 0x01, 0xc0, 0x20, - 0x09, 0x6a, 0xb8, 0xd2, 0xb6, 0x19, 0xa4, 0x34, 0x86, 0xdd, 0xad, 0xde, 0xe8, 0xff, 0x94, 0x0a, 0x17, 0xa0, 0x94, - 0x0d, 0xdc, 0x90, 0x75, 0xaa, 0xe5, 0x3a, 0xa6, 0xe0, 0xf9, 0x2e, 0x39, 0x02, 0x85, 0x1d, 0x18, 0x99, 0xd1, 0x84, - 0xfd, 0x82, 0xb7, 0xa1, 0x9c, 0xbd, 0x34, 0x92, 0x27, 0xbb, 0x2f, 0x69, 0x45, 0x13, 0x32, 0xad, 0xcc, 0xfe, 0x6d, - 0x6d, 0xd8, 0xe7, 0xa1, 0x18, 0x89, 0x02, 0x17, 0x07, 0x9d, 0x03, 0xd8, 0x1f, 0xe4, 0xd2, 0x36, 0x9f, 0x49, 0xbf, - 0x2f, 0xdf, 0x3f, 0xcb, 0xb3, 0xe4, 0xe3, 0xce, 0x7b, 0xcd, 0xd3, 0x2c, 0x19, 0x50, 0x89, 0x98, 0x1a, 0x57, 0xc5, - 0x70, 0xa9, 0x5c, 0x8c, 0x3d, 0x92, 0x11, 0xef, 0xa5, 0x0e, 0x31, 0x62, 0x7c, 0x91, 0x1d, 0x92, 0x92, 0xd3, 0x65, - 0xd3, 0xd9, 0x73, 0x25, 0x9a, 0x41, 0x63, 0xb8, 0x1d, 0xef, 0x25, 0xb5, 0x02, 0x64, 0x54, 0xe8, 0x9e, 0x01, 0xae, - 0xe1, 0xfe, 0x92, 0xf0, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xd8, 0x2b, 0x13, 0x12, 0x72, 0xe3, 0x00, 0x8b, 0xd8, 0x34, - 0x1f, 0x43, 0x01, 0x40, 0xad, 0x1a, 0xe9, 0x95, 0xbe, 0x24, 0x54, 0x26, 0x21, 0x18, 0x5d, 0x91, 0xf0, 0x2a, 0xa0, - 0x71, 0xa6, 0x13, 0x0d, 0x6c, 0x70, 0x40, 0x9f, 0xd7, 0x3a, 0x51, 0xdb, 0x90, 0x07, 0xb4, 0x36, 0x69, 0x00, 0x83, - 0x0f, 0x92, 0x24, 0xfa, 0x6a, 0xa9, 0x93, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x73, 0xe1, 0xf8, 0x58, 0x82, 0xff, - 0x91, 0x26, 0x82, 0x3f, 0x84, 0x02, 0x64, 0x8a, 0xaa, 0x62, 0x9a, 0xb1, 0x93, 0xac, 0xdb, 0x98, 0xc4, 0xf1, 0xb4, - 0xbb, 0x2b, 0xa5, 0x4b, 0x17, 0xf8, 0x95, 0x65, 0x88, 0x63, 0xfd, 0x2c, 0x5e, 0xb1, 0xd3, 0x90, 0x2b, 0xbc, 0xf4, - 0x67, 0xf1, 0x0a, 0x67, 0x88, 0xd6, 0xad, 0x04, 0x22, 0xfd, 0x57, 0x4d, 0xe0, 0x10, 0xfb, 0x09, 0x06, 0xb9, 0xa8, - 0x9d, 0x07, 0x02, 0x79, 0x5b, 0x41, 0x44, 0xfc, 0xec, 0x2a, 0x8c, 0x48, 0xbd, 0x93, 0xa4, 0xbf, 0xfc, 0x51, 0x64, - 0x85, 0xf3, 0x0d, 0x3c, 0xfa, 0xcd, 0x32, 0x29, 0xfa, 0x0b, 0x19, 0xcc, 0xc1, 0x7e, 0x22, 0xe3, 0x52, 0xd4, 0xee, - 0x13, 0x76, 0xc1, 0x89, 0xf1, 0xe0, 0xf4, 0x1a, 0x01, 0xf6, 0x6b, 0xf7, 0xc9, 0x19, 0xb3, 0xbf, 0x8c, 0x1b, 0x5f, - 0xa6, 0x23, 0x3e, 0xf0, 0xd1, 0x1d, 0xe5, 0xa3, 0x7b, 0x27, 0xd3, 0x1f, 0x1e, 0x94, 0xc8, 0xa8, 0xaa, 0xf9, 0x6a, - 0xc5, 0xd3, 0xd9, 0x5d, 0x12, 0x65, 0xa3, 0x9a, 0x17, 0x30, 0xbd, 0xe0, 0x78, 0x97, 0xac, 0x2f, 0xb2, 0xe4, 0x15, - 0xc4, 0x1e, 0x58, 0x09, 0x89, 0xc5, 0x0f, 0xcb, 0x4c, 0x2e, 0xe6, 0x42, 0xd4, 0xa2, 0xe0, 0xc1, 0xec, 0x26, 0x89, - 0xfe, 0x5a, 0x3a, 0x48, 0x6a, 0x7a, 0xca, 0x36, 0x8d, 0x25, 0xd4, 0xda, 0xd7, 0x91, 0x6e, 0x94, 0x05, 0x00, 0xdc, - 0xb3, 0x8b, 0x34, 0x12, 0xac, 0x1a, 0x4e, 0x1a, 0xc6, 0x75, 0x7a, 0x89, 0xa9, 0x71, 0xc3, 0x6a, 0x9a, 0x58, 0x0b, - 0x19, 0xd0, 0xfb, 0x03, 0x5e, 0x0e, 0x3e, 0x67, 0x45, 0x28, 0xa4, 0x35, 0x70, 0x71, 0x5c, 0xf6, 0xfb, 0xe2, 0xb8, - 0xdc, 0x6e, 0x8b, 0x93, 0xb8, 0xdf, 0x17, 0x27, 0xb1, 0xe6, 0x1f, 0xa4, 0x62, 0x5b, 0x9b, 0x1b, 0x24, 0x34, 0x17, - 0x10, 0xb5, 0x68, 0x04, 0x7f, 0x68, 0x96, 0xf3, 0x22, 0xca, 0x8f, 0x93, 0x7e, 0xbf, 0xb7, 0x9c, 0x55, 0x83, 0x7c, - 0x98, 0x44, 0xf9, 0x30, 0x71, 0x9c, 0x10, 0x7f, 0x75, 0x9c, 0x10, 0x25, 0x0d, 0x5c, 0xc1, 0x99, 0x01, 0x88, 0x02, - 0x2e, 0xfd, 0xa3, 0xaa, 0x96, 0x52, 0xd5, 0x12, 0xcb, 0x5a, 0x12, 0x55, 0x41, 0xc3, 0x6e, 0xca, 0xb0, 0xc0, 0x52, - 0xe8, 0x92, 0xfd, 0xb1, 0x04, 0x9e, 0x28, 0xe7, 0xf5, 0x06, 0x18, 0xd8, 0x08, 0xef, 0x1c, 0x3a, 0x9c, 0xc4, 0xba, - 0x61, 0x12, 0x32, 0xe9, 0x92, 0xae, 0xe8, 0x15, 0xf2, 0xb3, 0x97, 0x60, 0xb0, 0x74, 0xcc, 0xf2, 0xe9, 0x60, 0x70, - 0x49, 0x56, 0xac, 0x98, 0x87, 0xf1, 0x20, 0x5c, 0xcf, 0xf2, 0xe1, 0x65, 0x74, 0x49, 0xc8, 0x17, 0xe5, 0x82, 0xf6, - 0x56, 0xa3, 0xea, 0x63, 0x06, 0xc1, 0xfd, 0xd2, 0x59, 0x98, 0xe9, 0x38, 0x1f, 0xab, 0xd1, 0x1d, 0x5d, 0x41, 0xfc, - 0x1a, 0xb8, 0x91, 0x90, 0x08, 0x3a, 0x72, 0x45, 0x57, 0x74, 0x4d, 0x85, 0x9e, 0x61, 0x0c, 0xd1, 0x6d, 0x8e, 0x93, - 0x04, 0x1c, 0x93, 0x6d, 0xf1, 0xd1, 0x58, 0x16, 0xde, 0xf5, 0x1d, 0xa1, 0xbd, 0x5e, 0x62, 0x07, 0xe9, 0xbb, 0xf6, - 0x20, 0x01, 0x23, 0x32, 0x92, 0x03, 0xa5, 0x47, 0x46, 0x50, 0x3d, 0xa9, 0x38, 0x24, 0xb1, 0x3b, 0x24, 0x72, 0x1c, - 0x12, 0x77, 0x1c, 0x72, 0x35, 0x0e, 0xc8, 0xdd, 0x2f, 0xd9, 0x98, 0xa6, 0x6c, 0x4c, 0xd7, 0x72, 0x54, 0xe8, 0x35, - 0xbd, 0x50, 0xd4, 0xf1, 0x9c, 0xbd, 0x86, 0x03, 0x7b, 0x10, 0xe6, 0xb3, 0x78, 0xf8, 0x3a, 0x7a, 0x4d, 0xc8, 0x17, - 0x82, 0xde, 0xc8, 0x4b, 0x19, 0x84, 0x41, 0xbc, 0x06, 0xe7, 0x52, 0x1b, 0xea, 0xe4, 0x5a, 0xef, 0x38, 0x7c, 0xba, - 0xf2, 0x9e, 0x2e, 0x20, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x25, 0x2b, 0xe6, 0xe7, 0xe1, 0x98, 0x00, 0x0e, - 0x8f, 0x1a, 0xce, 0xcb, 0xd1, 0x1d, 0xbd, 0x1c, 0xdd, 0x13, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0xc7, 0x2c, 0x9e, 0x0e, - 0x06, 0x6b, 0xa4, 0xea, 0x32, 0xf7, 0x9a, 0x2c, 0xe8, 0x25, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x2b, 0xd6, 0x9a, 0x86, - 0xbf, 0x66, 0xf0, 0xf1, 0x3d, 0xbb, 0x1c, 0xdd, 0xd3, 0x3b, 0xf6, 0x7a, 0x3b, 0x9e, 0x02, 0x33, 0xb5, 0x9a, 0x85, - 0xf7, 0xc7, 0x57, 0xb3, 0x2b, 0x76, 0x1f, 0xdd, 0x9f, 0x40, 0x43, 0xaf, 0xd9, 0x3d, 0x02, 0x2e, 0xa5, 0x8f, 0x97, - 0x83, 0xd7, 0xe4, 0x70, 0x30, 0x48, 0x49, 0x14, 0xde, 0x84, 0x4e, 0x2b, 0x5f, 0xd3, 0x7b, 0x42, 0x57, 0xec, 0x0e, - 0x47, 0xe3, 0x8a, 0xe1, 0x07, 0x17, 0xec, 0xbe, 0xb9, 0x09, 0x9d, 0xdd, 0x1c, 0x57, 0x9d, 0x20, 0x46, 0xe8, 0x6b, - 0x60, 0x69, 0x96, 0x0d, 0x33, 0x01, 0x4f, 0xfa, 0x22, 0xa3, 0x44, 0xa1, 0x19, 0x88, 0xb3, 0x12, 0x10, 0x4b, 0xa2, - 0xee, 0x37, 0x1b, 0x9d, 0xc3, 0x72, 0xee, 0xf7, 0x7b, 0xb5, 0xa6, 0x07, 0x88, 0x9c, 0xd9, 0x49, 0x0f, 0x7a, 0x2e, - 0x3d, 0xc0, 0x4f, 0xd4, 0xaa, 0x41, 0x9c, 0xcc, 0xef, 0x96, 0xd1, 0xaf, 0x0e, 0x7d, 0xf8, 0xa1, 0x9b, 0xf2, 0x54, - 0xf9, 0xbf, 0x4f, 0x79, 0x8a, 0x3c, 0x7a, 0x5d, 0x3b, 0x20, 0x78, 0xce, 0x9a, 0x94, 0x1a, 0x89, 0x7a, 0x74, 0xbe, - 0x8a, 0x41, 0x1b, 0x89, 0xda, 0x06, 0xf5, 0x84, 0x16, 0x56, 0x10, 0x21, 0xe7, 0xe8, 0x39, 0x18, 0xa4, 0x42, 0xa8, - 0x1c, 0xb9, 0x28, 0xd1, 0x10, 0x24, 0x17, 0x15, 0x97, 0xe1, 0x73, 0x08, 0x95, 0xa7, 0x8f, 0x35, 0x11, 0xd6, 0xf4, - 0x18, 0x0c, 0xb0, 0x2d, 0xfc, 0xdb, 0x0e, 0xb9, 0xa8, 0xf8, 0x15, 0x9e, 0xcd, 0x6d, 0x82, 0x51, 0xb2, 0xb8, 0x15, - 0xda, 0x06, 0xb1, 0x1f, 0x0b, 0x82, 0xf5, 0x08, 0x1a, 0x8f, 0x2a, 0x7d, 0x44, 0xb8, 0x51, 0x7c, 0x24, 0x3d, 0x8d, - 0x35, 0x89, 0xe4, 0x48, 0x22, 0xf9, 0x00, 0x08, 0x27, 0x41, 0x7f, 0x71, 0xdb, 0x64, 0xdb, 0x42, 0xa2, 0xd1, 0x9f, - 0x96, 0x4c, 0xc9, 0xee, 0x65, 0x8f, 0x5d, 0x45, 0x90, 0x3d, 0xa6, 0xff, 0x74, 0xfa, 0xf0, 0xcf, 0x25, 0xce, 0xa0, - 0xf1, 0x7c, 0x91, 0x9d, 0x99, 0x39, 0x83, 0x1b, 0x39, 0x5d, 0x56, 0xae, 0xcb, 0x97, 0xfc, 0x80, 0xdf, 0xd5, 0xbc, - 0x48, 0xab, 0x83, 0x9f, 0xeb, 0x36, 0x9e, 0x53, 0xb5, 0x5e, 0xd9, 0x38, 0x2b, 0xd2, 0x38, 0xd5, 0x91, 0xba, 0x68, - 0x6b, 0x58, 0xcf, 0xef, 0x11, 0x75, 0x25, 0x2d, 0x47, 0x4f, 0x21, 0x56, 0x7e, 0xca, 0xe5, 0x3a, 0xcf, 0x7f, 0xda, - 0x49, 0xc5, 0x29, 0xf6, 0x53, 0x90, 0x2a, 0xb5, 0x5c, 0x40, 0xd5, 0x1c, 0xb5, 0xdc, 0x2d, 0xf5, 0x0e, 0xb0, 0x6e, - 0x9b, 0xf2, 0x63, 0x69, 0x76, 0xe1, 0x24, 0x7b, 0xf7, 0x27, 0x5d, 0x86, 0x01, 0xa3, 0x50, 0x66, 0xd5, 0xb5, 0xb2, - 0x2f, 0x34, 0x4e, 0xc3, 0x70, 0xe5, 0xc7, 0x0b, 0x48, 0x17, 0x30, 0x8e, 0x13, 0x25, 0x13, 0xe3, 0xf6, 0xa8, 0xad, - 0x50, 0x7d, 0xce, 0x56, 0x20, 0x60, 0xae, 0xe1, 0xec, 0xba, 0x8e, 0xb6, 0x3b, 0xe2, 0x94, 0x51, 0xb5, 0x8a, 0x8b, - 0xef, 0xe3, 0x55, 0x35, 0xb3, 0x43, 0x1b, 0xf9, 0x63, 0x3a, 0xfd, 0x7b, 0x12, 0xba, 0x85, 0x50, 0xb8, 0xe5, 0x16, - 0x46, 0x9e, 0xdc, 0x1e, 0x96, 0x71, 0x83, 0x5e, 0x89, 0x2b, 0xd5, 0x37, 0x2d, 0x85, 0x54, 0x23, 0x5f, 0xfb, 0x02, - 0x7a, 0x3d, 0xf6, 0x7e, 0x2a, 0xcc, 0xdb, 0x9e, 0x31, 0x97, 0x08, 0x56, 0xb2, 0xec, 0xf6, 0x9d, 0x1a, 0x53, 0x31, - 0x83, 0x2e, 0xb6, 0x9d, 0x45, 0xa7, 0x1b, 0xf9, 0xa7, 0x99, 0xfb, 0x65, 0xde, 0xe1, 0xae, 0xa8, 0xde, 0x02, 0x17, - 0x9a, 0x95, 0x55, 0xdd, 0x96, 0x0d, 0x9b, 0xc6, 0x6b, 0x59, 0x28, 0x36, 0xc0, 0xb0, 0xe7, 0xae, 0x85, 0x07, 0x88, - 0x9b, 0x70, 0xcf, 0x2e, 0x1a, 0xb8, 0x31, 0x7c, 0x5e, 0x49, 0xae, 0x2b, 0x8d, 0xbe, 0xf4, 0xc9, 0xd2, 0xaa, 0xe1, - 0x64, 0x31, 0xe2, 0x45, 0xba, 0x68, 0x32, 0xb3, 0x16, 0x3e, 0xe1, 0x65, 0x38, 0xe7, 0x0b, 0xad, 0x9b, 0x52, 0xa5, - 0x97, 0x2c, 0x56, 0x9d, 0xde, 0xac, 0x14, 0x56, 0x4a, 0xc4, 0x8d, 0x59, 0x26, 0x50, 0x96, 0xa2, 0x91, 0xc2, 0x9b, - 0xb2, 0x65, 0x2b, 0xa9, 0xe5, 0x3d, 0x73, 0x70, 0x1f, 0xfb, 0x01, 0x31, 0x91, 0x75, 0x60, 0x52, 0x34, 0x74, 0x40, - 0xbb, 0xea, 0xd2, 0x35, 0xa3, 0x1e, 0x0c, 0x72, 0x43, 0x12, 0xb1, 0x82, 0x14, 0x2b, 0x58, 0x37, 0xac, 0x9c, 0xe7, - 0x0b, 0x7a, 0xc9, 0xc4, 0x3c, 0x5d, 0xd0, 0x15, 0x13, 0xf3, 0x35, 0xde, 0x84, 0x2e, 0xe1, 0x84, 0x24, 0x9b, 0x58, - 0x2a, 0x60, 0x2f, 0xf1, 0xf2, 0x86, 0x67, 0xaa, 0xa2, 0x65, 0x57, 0x92, 0x03, 0x8c, 0x2f, 0xaa, 0x30, 0x2c, 0x86, - 0x97, 0x60, 0x2d, 0x71, 0x18, 0xae, 0xe6, 0x7c, 0x21, 0x7f, 0x43, 0xc0, 0xf9, 0x24, 0x94, 0xec, 0x82, 0xd9, 0x0b, - 0x64, 0x7a, 0x3d, 0xe7, 0x0b, 0x39, 0x12, 0xaa, 0xe0, 0x6b, 0x63, 0x6c, 0x12, 0x3b, 0x82, 0x96, 0x59, 0x3c, 0x1f, - 0x2f, 0xa2, 0xb8, 0x81, 0x65, 0x78, 0x26, 0x67, 0xa6, 0x25, 0xff, 0xd1, 0x76, 0x52, 0xea, 0x06, 0x2b, 0xc9, 0x1f, - 0x1e, 0x1f, 0x5d, 0x02, 0x19, 0x33, 0xbb, 0x82, 0xe9, 0x0f, 0x5d, 0x1f, 0x19, 0xdc, 0x73, 0x53, 0xce, 0xb8, 0x0c, - 0x12, 0xa5, 0x05, 0x0e, 0x72, 0x96, 0xb4, 0xb5, 0x08, 0xdf, 0x3d, 0x2a, 0xca, 0x3e, 0x13, 0xba, 0x01, 0xdd, 0x47, - 0x82, 0x3e, 0xd0, 0x7b, 0xa5, 0x0a, 0x97, 0xd5, 0x36, 0x13, 0x70, 0x17, 0x09, 0xf2, 0x5b, 0xa1, 0x53, 0x35, 0x06, - 0x55, 0x34, 0x8b, 0x58, 0xb8, 0xf7, 0x11, 0x37, 0xca, 0xe6, 0x9f, 0xfa, 0x1e, 0x2f, 0x25, 0x0c, 0x6e, 0x48, 0x4d, - 0x9f, 0xcc, 0x9b, 0x2b, 0xf6, 0x1e, 0x3a, 0xea, 0x50, 0x6b, 0xbc, 0xaf, 0x5e, 0x72, 0x0a, 0x31, 0x4a, 0x28, 0x3a, - 0x09, 0x06, 0x70, 0xbb, 0x84, 0x14, 0x7b, 0x83, 0xdd, 0xf8, 0xd7, 0xbc, 0x28, 0xb8, 0x58, 0xd7, 0x75, 0xe0, 0x06, - 0x34, 0x9c, 0x2f, 0x76, 0x43, 0x18, 0x8e, 0x69, 0xeb, 0x1a, 0x06, 0x61, 0xc6, 0x30, 0x12, 0x82, 0xd3, 0xbf, 0xe8, - 0x2b, 0x9a, 0xc4, 0xab, 0xef, 0xf8, 0x5f, 0x19, 0x2f, 0x25, 0x91, 0x06, 0x11, 0x52, 0x37, 0xf1, 0x8d, 0x74, 0x93, - 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0x58, 0xd3, 0x54, 0xfc, 0x2d, 0x17, 0x1f, 0xfc, 0x54, 0x74, 0x3c, 0x1a, 0x37, - 0xad, 0xce, 0xc8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0xa0, 0x1b, 0xa9, 0xdf, 0xda, 0x87, 0xc0, - 0x29, 0xd3, 0xe0, 0x9d, 0x07, 0x74, 0x73, 0xee, 0x82, 0x27, 0x8f, 0xe9, 0xb9, 0x45, 0x4f, 0xae, 0xd9, 0x49, 0xdd, - 0x43, 0xed, 0xbd, 0x1e, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0xd0, 0x38, 0x57, 0xf7, 0x1f, 0x8b, 0x5d, 0x0e, - 0xdf, 0x72, 0x96, 0x1b, 0xc0, 0x52, 0x11, 0x8d, 0x04, 0x8f, 0x02, 0xd4, 0xa5, 0x2a, 0x84, 0x2d, 0x66, 0x71, 0xa8, - 0xcc, 0x56, 0xad, 0x87, 0x82, 0x1c, 0x17, 0x23, 0x70, 0x08, 0x5d, 0x57, 0x83, 0x62, 0xb4, 0xcc, 0xea, 0xf7, 0xf8, - 0x5b, 0xb1, 0x0e, 0x49, 0xb6, 0x8f, 0x75, 0xe0, 0x86, 0x75, 0x98, 0x7e, 0xd4, 0x48, 0x01, 0x68, 0xb2, 0x11, 0xd8, - 0x04, 0xe0, 0xbd, 0xdd, 0x47, 0x84, 0x5a, 0x99, 0xee, 0x65, 0x2c, 0xe4, 0xf7, 0x5e, 0x12, 0x94, 0xe0, 0x27, 0xd4, - 0x96, 0xa5, 0xe0, 0x9d, 0x47, 0x3a, 0x27, 0x4d, 0x56, 0xbc, 0x07, 0x71, 0x5a, 0xf8, 0xc0, 0xde, 0x82, 0xe0, 0x9c, - 0x25, 0xbd, 0xc7, 0xdb, 0xac, 0x92, 0xda, 0xa8, 0x81, 0x02, 0xf8, 0xdd, 0xe0, 0x1e, 0x41, 0xbe, 0xbc, 0xe1, 0x5a, - 0x89, 0xdb, 0x90, 0x0f, 0x4b, 0x7a, 0x44, 0x06, 0xe6, 0xb9, 0x1a, 0xc6, 0xf4, 0x88, 0x1c, 0x9b, 0x67, 0x61, 0x07, - 0x70, 0x20, 0xd4, 0xa8, 0xd2, 0x23, 0x68, 0xd0, 0x6f, 0xa6, 0x45, 0x86, 0x64, 0xfd, 0xa8, 0x1b, 0x8c, 0x88, 0xbf, - 0x20, 0xa2, 0x2e, 0xfe, 0xf9, 0x60, 0xae, 0x7b, 0xcc, 0x05, 0xc2, 0x1c, 0x0c, 0x38, 0x88, 0xdb, 0x20, 0xd4, 0x07, - 0xcc, 0xe6, 0x2e, 0xaa, 0xe8, 0xbd, 0x31, 0xcc, 0xec, 0xe8, 0x0f, 0x37, 0x12, 0x7c, 0x9d, 0xb5, 0x41, 0x9d, 0x17, - 0x87, 0x40, 0x10, 0xdc, 0x17, 0xaa, 0x9a, 0xab, 0x1e, 0xd8, 0x78, 0xcb, 0x7e, 0x6c, 0xb7, 0xe3, 0x69, 0x65, 0xaf, - 0xfd, 0x15, 0x85, 0x93, 0x4f, 0xca, 0xbf, 0xde, 0xeb, 0x0c, 0x16, 0x8c, 0x0c, 0x5f, 0x3a, 0xfb, 0x17, 0xbe, 0x56, - 0xd2, 0xbd, 0x6a, 0x50, 0x90, 0xc7, 0x47, 0x92, 0xfe, 0xed, 0x95, 0x95, 0x4f, 0xcd, 0xf4, 0x6f, 0xb7, 0x7a, 0x7d, - 0x1e, 0x8f, 0x26, 0xdb, 0x6d, 0x4f, 0x19, 0xb8, 0x52, 0x1d, 0x43, 0x08, 0x9d, 0xeb, 0xc9, 0xe1, 0x11, 0x44, 0x45, - 0xf0, 0xe3, 0x6e, 0x16, 0x9e, 0x44, 0xc6, 0x8d, 0xd3, 0x59, 0x78, 0x82, 0x1d, 0xee, 0x44, 0x25, 0x2e, 0x46, 0xad, - 0x0d, 0x4e, 0xcf, 0x93, 0x10, 0x42, 0x39, 0x60, 0x65, 0x77, 0xf2, 0xcf, 0xbd, 0x34, 0x13, 0x92, 0x93, 0xd5, 0xed, - 0x94, 0xee, 0x60, 0x9a, 0x1f, 0xe8, 0x11, 0x1c, 0x70, 0x67, 0x7f, 0x35, 0x1f, 0xc3, 0x24, 0x53, 0xe4, 0x14, 0xc9, - 0x2f, 0xd2, 0x53, 0x48, 0xda, 0xa1, 0xa7, 0x92, 0x00, 0x4e, 0xa8, 0xf9, 0x18, 0x7e, 0xc3, 0xb8, 0x7f, 0xe7, 0xbf, - 0xb6, 0x53, 0x11, 0x3d, 0xa1, 0x58, 0xa6, 0x22, 0xa7, 0x49, 0x56, 0x26, 0x10, 0xb5, 0x51, 0x36, 0x23, 0xfa, 0xca, - 0xc6, 0x7c, 0x94, 0x84, 0xcf, 0xa9, 0xf5, 0x7f, 0x86, 0xf0, 0x69, 0x74, 0x46, 0x80, 0xcb, 0x2b, 0xaf, 0x2e, 0xc2, - 0xa7, 0x4f, 0xe8, 0xc1, 0xe4, 0xeb, 0x23, 0x7a, 0x70, 0xf4, 0xd5, 0x53, 0x02, 0xb0, 0x68, 0x57, 0x17, 0xe1, 0xd1, - 0xd3, 0xa7, 0xf4, 0xe0, 0xdb, 0x6f, 0xe9, 0xc1, 0xe4, 0xab, 0x23, 0x2f, 0x6d, 0xf2, 0xf4, 0x5b, 0x7a, 0xf0, 0xf5, - 0x13, 0x2f, 0xed, 0x68, 0xfc, 0x94, 0x1e, 0x7c, 0xf3, 0xb5, 0x4e, 0xfb, 0x1b, 0x64, 0xfb, 0xf6, 0x08, 0xff, 0xd3, - 0x69, 0x93, 0xa7, 0x5f, 0xd1, 0x83, 0xc9, 0x18, 0x2a, 0x79, 0x6a, 0x2b, 0x19, 0x4f, 0xe0, 0xe3, 0xaf, 0xe0, 0xbf, - 0xbf, 0x91, 0x60, 0x41, 0x6b, 0xc1, 0x92, 0x0a, 0xf5, 0x67, 0x28, 0xe2, 0x44, 0xd5, 0x44, 0xc2, 0x43, 0xcc, 0x2c, - 0xbf, 0x89, 0xc3, 0x80, 0xd8, 0x74, 0x28, 0x88, 0x1e, 0x8c, 0x47, 0x4f, 0x49, 0xe0, 0xc2, 0xd3, 0xdd, 0xba, 0x20, - 0x63, 0x49, 0x35, 0xcf, 0xbe, 0x48, 0x34, 0x63, 0xe0, 0x00, 0x58, 0x7d, 0x74, 0x73, 0xd5, 0x62, 0x9e, 0x7d, 0x51, - 0x8b, 0xdd, 0x5c, 0xbf, 0xb5, 0x00, 0xe5, 0xdd, 0x55, 0xcb, 0x6e, 0x4b, 0x19, 0x3a, 0xad, 0x35, 0xfa, 0xec, 0x23, - 0xa6, 0x0f, 0x06, 0xce, 0x0d, 0xfb, 0xef, 0x3b, 0xe5, 0xb4, 0xbe, 0x51, 0x28, 0xd4, 0xa8, 0x3c, 0x24, 0xec, 0x04, - 0x8a, 0x1e, 0x0c, 0x80, 0x27, 0x70, 0x70, 0xdf, 0xfe, 0xcd, 0x32, 0x3e, 0x76, 0x94, 0xf1, 0x33, 0xca, 0x10, 0xd0, - 0xa8, 0x87, 0x99, 0x4d, 0x0f, 0x1b, 0xdd, 0xe8, 0x25, 0x0b, 0x79, 0x32, 0xf9, 0x9e, 0xc1, 0xae, 0xd6, 0xb5, 0x38, - 0xd0, 0xa2, 0x68, 0x71, 0x79, 0x90, 0xf2, 0x59, 0xcd, 0xfe, 0xbe, 0x44, 0xf5, 0x56, 0xe4, 0xbd, 0x11, 0xd9, 0xac, - 0x66, 0xdf, 0xeb, 0x37, 0xc0, 0xcd, 0xb0, 0xdf, 0xe4, 0x93, 0x1b, 0x38, 0x83, 0x0b, 0xd3, 0x1e, 0x69, 0x62, 0x04, - 0x58, 0x01, 0x19, 0x38, 0xf0, 0x00, 0xe8, 0xa0, 0x3b, 0xda, 0xdb, 0xad, 0x4c, 0xf1, 0xfb, 0x6c, 0x60, 0x00, 0x35, - 0xf3, 0x36, 0xb1, 0x65, 0xff, 0xcb, 0x93, 0x97, 0xa0, 0x70, 0xcb, 0x2f, 0x6f, 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, - 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x55, 0x40, 0xf5, 0x96, 0x8f, 0x36, 0x5c, 0xaa, 0x27, 0x81, 0x33, 0xb8, - 0x14, 0x65, 0xc2, 0xdf, 0x2a, 0xb1, 0x3f, 0x5a, 0x3f, 0xba, 0xbe, 0x3d, 0x0e, 0xac, 0x7d, 0x8f, 0x8f, 0xd4, 0x67, - 0xde, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0xaf, 0x1a, 0x23, 0xf1, 0x28, 0x80, 0x37, 0xd0, 0x11, 0x29, 0x34, 0x52, 0x2d, - 0x70, 0x0c, 0x85, 0xb4, 0x40, 0x1c, 0x79, 0x75, 0x83, 0x2d, 0x88, 0x08, 0xc1, 0xc3, 0xed, 0x5f, 0x4b, 0x19, 0x38, - 0xaa, 0xdf, 0xe7, 0xc2, 0x75, 0x7b, 0xd2, 0x76, 0xe4, 0x38, 0xf5, 0x53, 0x07, 0xdf, 0x9c, 0x34, 0x8d, 0xb6, 0x5c, - 0x49, 0x99, 0x61, 0x59, 0xd8, 0x49, 0xa8, 0xe4, 0x1e, 0xb5, 0x03, 0xc9, 0x17, 0x72, 0x88, 0x64, 0x81, 0x51, 0x28, - 0xc8, 0x70, 0x42, 0xc1, 0x66, 0xaa, 0x5a, 0x66, 0x97, 0x75, 0xb8, 0x91, 0x0a, 0x65, 0x4e, 0xd1, 0xb7, 0x1b, 0x1c, - 0x48, 0x48, 0x94, 0x55, 0x6f, 0xe2, 0x37, 0x21, 0x82, 0xd5, 0x71, 0x65, 0x0b, 0xc5, 0x9d, 0xfd, 0xc9, 0xd3, 0x2e, - 0xfe, 0x48, 0xbb, 0x80, 0xda, 0x58, 0x4c, 0xc3, 0x89, 0x89, 0x7d, 0x63, 0xbf, 0x30, 0x9a, 0x1e, 0x80, 0xfa, 0xae, - 0xa4, 0x18, 0x41, 0x7e, 0xa5, 0xed, 0x63, 0x7b, 0x8c, 0x89, 0x19, 0xc4, 0x1a, 0x96, 0x39, 0x33, 0xd9, 0x37, 0xc2, - 0x4e, 0x00, 0xb8, 0x11, 0x5a, 0x23, 0x21, 0xf0, 0x78, 0x1d, 0xe2, 0x79, 0x29, 0xc3, 0xb7, 0x66, 0x84, 0x8e, 0xc1, - 0x9b, 0xca, 0x34, 0x32, 0x13, 0xae, 0x60, 0x50, 0x1f, 0xdb, 0x2a, 0x0a, 0xab, 0xa9, 0x2c, 0x3b, 0x01, 0xb8, 0x81, - 0xec, 0x58, 0x5f, 0x3c, 0x67, 0xf5, 0x3c, 0x5b, 0x44, 0x3a, 0x28, 0x60, 0x5e, 0x19, 0x06, 0xed, 0xcd, 0x1e, 0xd9, - 0x8e, 0x45, 0xe8, 0x86, 0xfb, 0x08, 0xc6, 0xd3, 0xf6, 0x05, 0x2b, 0x88, 0x46, 0x88, 0x87, 0x19, 0x33, 0xf8, 0x5e, - 0x69, 0xca, 0x53, 0xd9, 0x12, 0x08, 0x1c, 0x85, 0x50, 0x17, 0xbb, 0x46, 0x09, 0x36, 0x93, 0x17, 0xcc, 0x60, 0xc7, - 0x8e, 0xd4, 0x74, 0xc9, 0x3a, 0x1d, 0xca, 0x29, 0x2d, 0xd4, 0x94, 0x2a, 0x5f, 0xc3, 0x6a, 0x5e, 0xa0, 0x87, 0x1e, - 0xb8, 0x1e, 0x28, 0x87, 0xbc, 0x82, 0x4e, 0x74, 0x04, 0x9d, 0x56, 0x9b, 0xb0, 0x73, 0x23, 0xd5, 0xb2, 0x06, 0x79, - 0xc7, 0x50, 0xef, 0x88, 0x17, 0x4e, 0xa0, 0x2e, 0x84, 0x08, 0xd9, 0xdb, 0x22, 0x7d, 0x44, 0xb3, 0xac, 0x7a, 0x09, - 0x65, 0x71, 0xc4, 0xd6, 0x05, 0x2b, 0x6d, 0x34, 0xb9, 0xe4, 0x11, 0x4f, 0x11, 0x11, 0xf0, 0x54, 0x6a, 0xd7, 0x77, - 0x5a, 0x42, 0x68, 0x96, 0x02, 0x71, 0xb3, 0x51, 0x9c, 0x1b, 0x13, 0xc8, 0x02, 0xe8, 0xdb, 0x4f, 0xd9, 0xb5, 0x13, - 0x0e, 0x76, 0x73, 0x9d, 0x15, 0xcf, 0xf9, 0x65, 0x56, 0xf0, 0x14, 0xc1, 0xae, 0xee, 0xf4, 0x03, 0xb7, 0x6c, 0x1b, - 0x58, 0xbe, 0x7d, 0x07, 0x0b, 0xa6, 0x0a, 0x95, 0x52, 0x22, 0x2b, 0xa2, 0x0a, 0x32, 0xbb, 0xcc, 0xdd, 0xeb, 0xac, - 0x78, 0x1d, 0xdf, 0x81, 0x37, 0x85, 0xc7, 0x4f, 0x8f, 0x2e, 0xf0, 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, - 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x29, 0x68, 0x6d, 0x0d, 0x81, 0x13, 0x7f, 0x5a, 0x76, 0xef, 0x3a, 0x2b, 0xb4, - 0x7d, 0xc6, 0x75, 0x7c, 0xc7, 0x0a, 0x09, 0x66, 0x81, 0x71, 0xee, 0xdb, 0x52, 0x92, 0xeb, 0xac, 0xd0, 0x02, 0x92, - 0xeb, 0xf8, 0x8e, 0xfa, 0x32, 0x0e, 0x65, 0x45, 0xe7, 0xc4, 0xf9, 0xdd, 0x1d, 0x7e, 0x81, 0xa1, 0x56, 0xc6, 0xfd, - 0x3e, 0x48, 0xcc, 0x84, 0x69, 0xca, 0x4c, 0x44, 0x42, 0xa1, 0x85, 0xd4, 0x94, 0x0f, 0x26, 0x64, 0x77, 0xa5, 0x1a, - 0x46, 0xd4, 0x7c, 0x15, 0x56, 0xb3, 0x71, 0x34, 0x21, 0x74, 0xd2, 0xb1, 0xde, 0x75, 0x6b, 0x21, 0xd3, 0xe8, 0x69, - 0xe4, 0xf8, 0x74, 0x96, 0xac, 0x9e, 0x96, 0xc7, 0x8c, 0x4f, 0xcb, 0xc1, 0x80, 0xa8, 0xd0, 0xc1, 0x1b, 0xac, 0x07, - 0x4c, 0x69, 0x6c, 0xbc, 0x35, 0xdd, 0xea, 0x97, 0x42, 0x86, 0xa4, 0x77, 0x0c, 0x48, 0x32, 0x61, 0x83, 0xdd, 0x82, - 0x44, 0xd1, 0xf1, 0xbf, 0x93, 0x5b, 0x70, 0xd7, 0x83, 0xd1, 0x8f, 0xee, 0xeb, 0x18, 0xff, 0xa1, 0xb6, 0x05, 0x51, - 0x9f, 0x2a, 0xd6, 0xeb, 0x48, 0x94, 0x21, 0x17, 0xe1, 0x67, 0x47, 0x43, 0x34, 0x51, 0xed, 0xb1, 0xa0, 0x58, 0x5f, - 0x5f, 0xf0, 0x12, 0xa7, 0x9f, 0xd9, 0xcb, 0x15, 0x6c, 0x0b, 0x5a, 0x6b, 0x1a, 0xf5, 0x26, 0x7e, 0x13, 0x99, 0xcb, - 0x82, 0x2a, 0xf2, 0x39, 0x0a, 0x59, 0xf3, 0x30, 0xac, 0x87, 0xed, 0x41, 0x24, 0x87, 0xed, 0x49, 0xf0, 0x1a, 0x03, - 0x0b, 0x64, 0x87, 0x46, 0xe0, 0x22, 0x34, 0xf2, 0xb7, 0x63, 0x70, 0xe1, 0x32, 0x88, 0x2c, 0x43, 0x15, 0xbf, 0xa9, - 0xdd, 0x04, 0xd9, 0x2b, 0x74, 0x9a, 0xc2, 0xaa, 0xa4, 0x49, 0x3e, 0xfc, 0x7a, 0x29, 0x4a, 0xcc, 0xe4, 0x74, 0xd9, - 0xa1, 0xaf, 0xed, 0xf6, 0x0e, 0x74, 0xc1, 0xaa, 0x4f, 0xce, 0xd7, 0x8f, 0x3b, 0x7b, 0x02, 0x46, 0xb1, 0x32, 0x87, - 0x2f, 0xa4, 0x54, 0x3e, 0x28, 0xcd, 0xc7, 0x30, 0xaf, 0x14, 0xc7, 0x6e, 0x00, 0x93, 0x80, 0x7d, 0x86, 0x54, 0x87, - 0x69, 0xc7, 0x3e, 0x47, 0x1b, 0x58, 0x12, 0x70, 0xf8, 0x47, 0x99, 0x68, 0xdc, 0xab, 0x7b, 0x95, 0xfa, 0x21, 0x5b, - 0xe6, 0x0b, 0xe0, 0xf3, 0x61, 0xd7, 0x46, 0x05, 0xca, 0x26, 0x22, 0x41, 0x61, 0xcb, 0x63, 0x90, 0xf6, 0x28, 0xa6, - 0xab, 0x92, 0x27, 0x19, 0x4a, 0x29, 0x12, 0xe5, 0x13, 0x9c, 0xc3, 0x1b, 0xdc, 0x8f, 0x32, 0x20, 0xbc, 0x0c, 0x39, - 0x1d, 0xa5, 0x54, 0x59, 0xc0, 0x48, 0xea, 0x01, 0xa2, 0xbc, 0x0c, 0xe4, 0x78, 0xdb, 0xed, 0x84, 0xae, 0xd8, 0x72, - 0x38, 0xa1, 0x48, 0x4a, 0xae, 0xb0, 0xdc, 0x6b, 0xd0, 0x79, 0x5c, 0xb0, 0xde, 0x0b, 0xc0, 0x22, 0x38, 0x87, 0xbf, - 0x31, 0xa1, 0x37, 0xf0, 0x37, 0x27, 0xf4, 0x35, 0x0b, 0xaf, 0x87, 0x57, 0xe4, 0x30, 0x4c, 0x07, 0x13, 0x29, 0x18, - 0xbb, 0x67, 0xcb, 0x22, 0x94, 0x89, 0xab, 0xc3, 0x4b, 0xf2, 0xf8, 0x92, 0xde, 0xd1, 0x5b, 0x7a, 0x46, 0xdf, 0x02, - 0xe1, 0xbf, 0x3f, 0x9e, 0xf0, 0xe1, 0xe4, 0x49, 0xbf, 0xdf, 0xbb, 0xe8, 0xf7, 0x7b, 0xe7, 0xda, 0x80, 0x42, 0xed, - 0xa2, 0xab, 0x86, 0xaa, 0x5f, 0xd7, 0xcd, 0x62, 0xfa, 0x56, 0x6e, 0xdc, 0x84, 0x67, 0x79, 0x78, 0x7d, 0x78, 0x4f, - 0x86, 0xf8, 0x78, 0x99, 0x0b, 0x51, 0x86, 0x57, 0x87, 0xf7, 0x84, 0xbe, 0x3d, 0x01, 0xbd, 0x29, 0xd6, 0xf7, 0xf6, - 0xf1, 0xbd, 0xaa, 0x8d, 0xd0, 0x17, 0x61, 0x02, 0xdb, 0xe4, 0x8e, 0x99, 0xbb, 0xf6, 0x64, 0x0c, 0xb1, 0x4c, 0xee, - 0x9d, 0xf2, 0xee, 0x1f, 0xdf, 0x91, 0xc3, 0x3b, 0xf0, 0x14, 0x35, 0xe4, 0x6f, 0x16, 0xde, 0xb2, 0x56, 0x0d, 0x8f, - 0xef, 0xe9, 0x59, 0xab, 0x11, 0x8f, 0xef, 0x49, 0x14, 0xde, 0xb2, 0x2b, 0x7a, 0xc6, 0xae, 0x09, 0xbd, 0xe8, 0xf7, - 0xcf, 0xfb, 0x7d, 0xd1, 0xef, 0xff, 0x3d, 0x0e, 0xc3, 0x78, 0x58, 0x92, 0x43, 0x41, 0xef, 0x0f, 0x27, 0xfc, 0x2b, - 0x32, 0x0b, 0x55, 0xf3, 0xe5, 0x82, 0x33, 0x2a, 0x6f, 0x99, 0xeb, 0x9e, 0x82, 0xb5, 0xc2, 0x3d, 0x93, 0x4f, 0x6f, - 0xe9, 0x2d, 0x2b, 0xe9, 0x19, 0x8b, 0x49, 0x74, 0x03, 0xad, 0xb8, 0x98, 0x95, 0xd1, 0x2d, 0x3d, 0x63, 0xe7, 0xb3, - 0x38, 0x3a, 0xa3, 0x6f, 0x59, 0x3e, 0x9c, 0x40, 0xde, 0xb3, 0xe1, 0x2d, 0x39, 0x7c, 0x4b, 0xa2, 0xf0, 0xad, 0xfa, - 0x7d, 0x4f, 0xaf, 0x78, 0xf8, 0x96, 0x3a, 0xd5, 0xbc, 0x25, 0xba, 0x7a, 0xaf, 0xf6, 0xb7, 0x24, 0x72, 0x07, 0xf3, - 0xad, 0xb1, 0xa7, 0x79, 0x64, 0x69, 0x63, 0x5a, 0x84, 0xa0, 0x6f, 0x2e, 0xc2, 0x5b, 0x42, 0xa6, 0xfe, 0xd8, 0xc1, - 0x80, 0xce, 0x1e, 0x45, 0x09, 0xa1, 0xb7, 0x6e, 0xa9, 0xb7, 0x38, 0x86, 0x7a, 0x84, 0x64, 0xda, 0x19, 0xa6, 0xe1, - 0x3a, 0x78, 0xa5, 0xc0, 0x3a, 0x2e, 0xfa, 0xfd, 0x70, 0xdd, 0xef, 0x43, 0xa4, 0xfb, 0x72, 0xa6, 0x63, 0xbb, 0x59, - 0xb2, 0x49, 0x6f, 0x41, 0xfb, 0xff, 0x6a, 0x30, 0x80, 0xce, 0x38, 0x25, 0x85, 0xb7, 0x83, 0x57, 0x8f, 0xef, 0x89, - 0xac, 0xa3, 0xa4, 0x95, 0x08, 0x4b, 0xfa, 0x9a, 0x66, 0x00, 0xf8, 0xf5, 0x6a, 0x30, 0x20, 0x91, 0xfe, 0x8c, 0x4c, - 0x5f, 0x1d, 0xbf, 0x9d, 0x0e, 0x06, 0xaf, 0xf4, 0x36, 0xf9, 0x8b, 0xed, 0x29, 0x05, 0xd6, 0xdf, 0x79, 0xbf, 0xff, - 0xd7, 0x49, 0x4c, 0x2e, 0x4a, 0x1e, 0x7f, 0x9c, 0xfa, 0x6d, 0xf9, 0xcb, 0x46, 0x55, 0x3b, 0xef, 0xf7, 0xd7, 0xfd, - 0xfe, 0x19, 0x60, 0x17, 0xcd, 0xac, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x96, 0x22, 0x29, 0x92, 0x43, 0x63, 0x68, 0x5b, - 0x2c, 0xdb, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xc8, 0xaf, 0x28, 0x6e, 0x48, 0x14, 0xf6, 0xce, 0xb7, 0xdb, 0x33, 0xc6, - 0x58, 0x4c, 0x40, 0xfa, 0xe1, 0xbe, 0x3e, 0x6b, 0xbc, 0x18, 0x62, 0x95, 0x40, 0x66, 0x73, 0xb3, 0x34, 0x87, 0x40, - 0xc4, 0x61, 0xd3, 0xbf, 0xd7, 0xf7, 0xf2, 0xaa, 0xb1, 0x7c, 0xeb, 0xcf, 0x00, 0x42, 0x24, 0x58, 0xc8, 0x67, 0x38, - 0x06, 0x55, 0x06, 0xc0, 0xbf, 0x91, 0x9c, 0x79, 0x01, 0xa0, 0xe6, 0x64, 0xbb, 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb2, - 0xd1, 0xdf, 0x9e, 0x3e, 0xae, 0x1f, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, 0x61, 0x16, 0x6b, 0x7d, 0x08, 0x46, - 0xf0, 0x8a, 0x7d, 0xbc, 0xc9, 0x3e, 0x9b, 0x7d, 0x44, 0xc2, 0xea, 0x31, 0x8e, 0xbc, 0x48, 0x5b, 0x7a, 0xbb, 0x3d, - 0x0c, 0x26, 0x2f, 0xd2, 0x4f, 0xb0, 0x9d, 0x2e, 0xff, 0xe6, 0xc0, 0x78, 0xc2, 0xc1, 0x68, 0x2f, 0x0a, 0xea, 0x4c, - 0xdb, 0x6e, 0x6b, 0xf7, 0x12, 0xf8, 0x06, 0x53, 0x41, 0xc7, 0x66, 0x58, 0xb8, 0x41, 0x4d, 0xe4, 0xd1, 0x32, 0xa8, - 0x1b, 0x69, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0xd2, 0x71, 0x0b, 0x34, 0x43, 0x86, 0xba, 0xdc, 0xd3, 0xfa, 0x5f, 0xbc, - 0x14, 0x1a, 0x3e, 0xc3, 0x8a, 0x08, 0x1d, 0x6e, 0x8d, 0xbb, 0xdc, 0x5a, 0xf5, 0x09, 0x6e, 0xad, 0x40, 0x12, 0xab, - 0x61, 0x49, 0xf5, 0xe5, 0x28, 0x61, 0x27, 0x05, 0xe3, 0x33, 0xa0, 0xe3, 0x31, 0x3c, 0x08, 0x56, 0xcd, 0x44, 0x94, - 0xa0, 0x7d, 0xa2, 0x8d, 0x30, 0xf8, 0x27, 0x60, 0xf6, 0xd3, 0x1c, 0xfe, 0x0a, 0x32, 0x4d, 0x8e, 0x21, 0x20, 0xc4, - 0xf1, 0x78, 0x16, 0x87, 0x63, 0x12, 0x25, 0x27, 0xf0, 0x04, 0xff, 0x95, 0xe1, 0x98, 0x34, 0xea, 0x0e, 0x23, 0xe4, - 0xe5, 0x36, 0x61, 0x00, 0x57, 0x36, 0x9e, 0x4d, 0x22, 0x23, 0xdd, 0x15, 0x8f, 0x47, 0xe3, 0xa7, 0x64, 0x1a, 0x87, - 0x62, 0x90, 0x10, 0x0a, 0xde, 0xbd, 0x61, 0x31, 0x4c, 0x14, 0x3c, 0x1b, 0xb0, 0x79, 0x85, 0x65, 0xf3, 0x04, 0x9c, - 0x80, 0x30, 0x4c, 0xc8, 0xb1, 0xee, 0x41, 0x4a, 0x51, 0xe7, 0x39, 0xf6, 0x53, 0x1d, 0x41, 0x98, 0x1d, 0xb5, 0x54, - 0x7c, 0x05, 0x40, 0x97, 0x38, 0x38, 0xd4, 0x20, 0x61, 0x54, 0xb3, 0xb0, 0x70, 0xa8, 0x94, 0xae, 0xee, 0xb0, 0xf2, - 0x28, 0xbf, 0x6e, 0xd0, 0x61, 0x45, 0x06, 0x13, 0x5a, 0x9c, 0x4c, 0xf8, 0x57, 0x10, 0xc0, 0xc3, 0x8b, 0xf8, 0x25, - 0x71, 0x62, 0x20, 0xbc, 0x0a, 0x32, 0x50, 0x69, 0x23, 0x1b, 0x33, 0x32, 0x15, 0x1f, 0x40, 0x98, 0x94, 0x83, 0x5b, - 0xb1, 0xce, 0x53, 0x88, 0x0a, 0xb6, 0xce, 0xeb, 0x83, 0x2b, 0xb0, 0x64, 0x8f, 0x6b, 0x88, 0x13, 0xb6, 0x5e, 0x01, - 0x76, 0xee, 0xa3, 0x4d, 0xd1, 0x1c, 0xc8, 0xef, 0x0e, 0xb0, 0xe5, 0xf0, 0xaa, 0x16, 0x07, 0x93, 0xf1, 0x78, 0x3c, - 0xfa, 0x1d, 0x8e, 0x0e, 0x20, 0xb4, 0x24, 0xd2, 0x7c, 0x32, 0x40, 0xe3, 0xae, 0x6b, 0xee, 0x8c, 0x0b, 0x45, 0x59, - 0xe9, 0x64, 0x42, 0x40, 0xfc, 0xac, 0xfb, 0x06, 0xfb, 0x8a, 0xab, 0xf8, 0x27, 0xbb, 0x9f, 0xe8, 0x15, 0x2d, 0x57, - 0xea, 0xe8, 0xdd, 0xdb, 0xb3, 0x57, 0x1f, 0x5e, 0xfd, 0xfa, 0xe2, 0xfc, 0xd5, 0x9b, 0x97, 0xaf, 0xde, 0xbc, 0xfa, - 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xd7, 0x56, 0xc4, 0x8c, 0xbd, 0x73, 0x8f, 0x71, 0x6a, 0x71, 0x85, 0xb3, 0x47, 0xf6, - 0x16, 0x0b, 0xb0, 0x09, 0x9a, 0x5b, 0xa8, 0xa8, 0x62, 0x34, 0x6a, 0x75, 0x4f, 0x40, 0x46, 0xa3, 0x46, 0x36, 0x1e, - 0x56, 0x6c, 0x8d, 0x5c, 0xbc, 0x65, 0x38, 0xf8, 0xc8, 0xfc, 0x96, 0x9c, 0x09, 0x37, 0xa3, 0xad, 0x58, 0x11, 0xf0, - 0xf9, 0x5a, 0x17, 0xb5, 0xc3, 0x85, 0xc8, 0xbd, 0x6d, 0x9e, 0x43, 0x42, 0x1d, 0x22, 0xd7, 0xc1, 0xfb, 0x7a, 0x64, - 0x8f, 0x8f, 0x9c, 0x27, 0xe9, 0x19, 0xea, 0x72, 0x34, 0x7c, 0xe4, 0x3d, 0xa3, 0x13, 0x73, 0xa3, 0x75, 0xa8, 0xe7, - 0x25, 0xec, 0x6f, 0x29, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x58, 0xdd, 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, - 0x7e, 0xa4, 0x6a, 0x02, 0x69, 0x51, 0x20, 0x75, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, 0x52, 0xff, 0x0c, 0x3d, 0x02, 0x68, - 0x2e, 0x3b, 0x86, 0x04, 0xea, 0xc5, 0x6b, 0x5c, 0xff, 0x9c, 0x7c, 0x59, 0xd1, 0xce, 0x17, 0xdf, 0x41, 0x88, 0x61, - 0xf7, 0x8a, 0xe0, 0x4d, 0xb8, 0x9d, 0x64, 0x7b, 0x69, 0xd1, 0xf7, 0xaa, 0xeb, 0x18, 0x8f, 0xbb, 0x3d, 0x57, 0x0a, - 0xff, 0xd6, 0x05, 0xf6, 0x40, 0xfe, 0x75, 0xbc, 0x60, 0x21, 0x60, 0x33, 0x1e, 0x9a, 0x45, 0x62, 0xfd, 0xde, 0xe9, - 0x84, 0x1c, 0x1e, 0x4d, 0xf9, 0x90, 0x15, 0xb4, 0x1a, 0xb0, 0xa2, 0xd9, 0xa1, 0xe6, 0xbc, 0x4d, 0xc8, 0xab, 0x5d, - 0x1a, 0x5e, 0x0d, 0xf9, 0x43, 0x97, 0xa4, 0x0f, 0xdc, 0x73, 0xa8, 0x36, 0xcd, 0xc5, 0x90, 0xa6, 0x9c, 0xee, 0x52, - 0x19, 0x10, 0x22, 0x5d, 0xc7, 0x35, 0x69, 0xd4, 0x51, 0xb5, 0xb4, 0x92, 0x8e, 0x9b, 0x6c, 0xf3, 0x89, 0x4b, 0xb6, - 0xbc, 0x5d, 0xbb, 0xd7, 0xea, 0xf6, 0x85, 0x19, 0xc8, 0xdf, 0x1f, 0x88, 0x6a, 0xa2, 0x21, 0xba, 0x80, 0x0a, 0xfe, - 0x01, 0x5e, 0x9e, 0x3c, 0x52, 0x0a, 0xd0, 0x7d, 0x67, 0x47, 0xd7, 0x1e, 0xf7, 0x66, 0xb1, 0xb5, 0xc4, 0x39, 0xab, - 0x5d, 0x67, 0x79, 0x59, 0xb6, 0x44, 0xd7, 0xa9, 0xd8, 0xcf, 0x61, 0x47, 0xdf, 0x9d, 0x6d, 0x00, 0x44, 0x29, 0xac, - 0xed, 0xd9, 0x5f, 0x39, 0x67, 0x7f, 0x65, 0xce, 0x7e, 0xb3, 0x09, 0xa4, 0x0f, 0x2b, 0xb4, 0xec, 0xa5, 0x28, 0x6a, - 0xdd, 0xe4, 0xb1, 0xaf, 0xcb, 0x42, 0x5a, 0xcc, 0x0f, 0x0d, 0xed, 0x7a, 0x32, 0xa6, 0x02, 0xd5, 0x23, 0x3f, 0x60, - 0xab, 0x0e, 0x0b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0xb9, 0xef, 0x6e, 0xf7, 0x7f, 0x73, 0xa1, 0x83, 0xdb, - 0xda, 0xb2, 0x72, 0xd4, 0xd5, 0x71, 0x89, 0x77, 0xb5, 0xe5, 0xc3, 0x77, 0xb5, 0x77, 0x99, 0x5a, 0x76, 0x35, 0xa0, - 0x06, 0x15, 0xeb, 0x6b, 0x5e, 0x66, 0x49, 0x63, 0x14, 0x1a, 0x6f, 0x39, 0x84, 0xf6, 0x70, 0x0e, 0x2e, 0x90, 0xc3, - 0x12, 0x42, 0x3f, 0xd6, 0x5a, 0x00, 0xe8, 0xb2, 0xd8, 0x6f, 0x79, 0x98, 0x91, 0x81, 0x2b, 0xf1, 0x2b, 0x84, 0x2b, - 0x2e, 0x3e, 0xdc, 0xc9, 0x4c, 0xd0, 0xab, 0xc4, 0x46, 0xcd, 0x15, 0xed, 0x98, 0x1f, 0xee, 0x17, 0x18, 0x0d, 0xc2, - 0x69, 0x4b, 0x76, 0x58, 0x75, 0xcc, 0x72, 0x0d, 0x47, 0x6d, 0x61, 0xcb, 0x2c, 0x5a, 0xd7, 0xcf, 0x7a, 0x98, 0xa9, - 0x33, 0xe5, 0x2d, 0xc8, 0xbe, 0x90, 0xbb, 0x9f, 0xaa, 0x8a, 0x2b, 0x72, 0x32, 0x19, 0x4f, 0x49, 0x35, 0x18, 0xb4, - 0x92, 0x8f, 0x31, 0x79, 0x38, 0xdc, 0x61, 0x2e, 0x2b, 0xd5, 0x0f, 0xa7, 0x0f, 0x50, 0x9f, 0xb7, 0x25, 0xc9, 0xa6, - 0x66, 0x7f, 0x82, 0x59, 0x2c, 0x10, 0x47, 0x0b, 0xbf, 0x38, 0x5f, 0x00, 0xc8, 0x32, 0x2c, 0x33, 0x25, 0x2c, 0x82, - 0x2b, 0x3d, 0x74, 0xb2, 0x64, 0xe2, 0x78, 0x3c, 0x73, 0x7b, 0x6e, 0x19, 0x1c, 0x42, 0xa2, 0x89, 0x31, 0x7e, 0x71, - 0xb3, 0x60, 0x1c, 0x87, 0xe2, 0x44, 0x78, 0xdf, 0x15, 0x24, 0x1a, 0x6b, 0x53, 0x65, 0x75, 0x95, 0xa8, 0x87, 0x09, - 0x79, 0x5c, 0x92, 0xc3, 0x92, 0x2e, 0xdd, 0xb1, 0xc4, 0xf4, 0xc3, 0xf8, 0x70, 0x32, 0x26, 0x8f, 0xe3, 0xc7, 0x13, - 0x0d, 0x37, 0xec, 0xe6, 0xc8, 0x87, 0x4b, 0x72, 0xe8, 0x57, 0x09, 0xa6, 0xa8, 0xba, 0x67, 0x6e, 0x25, 0xc9, 0x60, - 0x39, 0x48, 0x1f, 0xb7, 0xf2, 0x62, 0xad, 0x6a, 0xbc, 0xd7, 0xc7, 0x7c, 0x4a, 0x2a, 0xef, 0xc6, 0xb0, 0xa6, 0xd7, - 0xf1, 0x1f, 0xa2, 0x8c, 0x0a, 0x01, 0x88, 0x84, 0xa0, 0xde, 0xce, 0x2e, 0xb3, 0x24, 0x2e, 0xd2, 0x28, 0x6d, 0x08, - 0x4d, 0x4f, 0xd8, 0x64, 0x3c, 0x4b, 0x59, 0x7a, 0x3c, 0x79, 0x3a, 0x9b, 0x3c, 0x8d, 0x8e, 0xc6, 0x51, 0x3a, 0x18, - 0x40, 0xf2, 0xd1, 0x18, 0x5c, 0xec, 0xe0, 0x37, 0x3b, 0x82, 0xa1, 0x3b, 0x41, 0x96, 0xb0, 0x84, 0xa6, 0x7d, 0x5e, - 0x93, 0xd4, 0x70, 0x5e, 0xca, 0x9e, 0xc4, 0x77, 0x74, 0xed, 0x38, 0xb8, 0xb8, 0x2d, 0xbc, 0xb4, 0x2d, 0xbc, 0xdc, - 0x6d, 0xa1, 0xb6, 0x20, 0x28, 0xc5, 0xff, 0x8f, 0x1b, 0xc6, 0xbe, 0xbb, 0x84, 0x5e, 0x5c, 0x37, 0xd9, 0x68, 0x55, - 0x8a, 0x5a, 0xc0, 0x6d, 0x42, 0x8a, 0xc2, 0x46, 0xf1, 0x6a, 0x95, 0x2b, 0x17, 0xb1, 0x79, 0x4d, 0x01, 0xdc, 0x05, - 0xce, 0x56, 0x60, 0xa1, 0xb5, 0x81, 0xdc, 0x5f, 0xbc, 0x14, 0xcc, 0xa8, 0x7d, 0xf4, 0x3d, 0xf2, 0x8f, 0x10, 0xc1, - 0x96, 0x4e, 0xc6, 0xb3, 0x0a, 0x11, 0x2d, 0x3e, 0x25, 0xef, 0xfd, 0x37, 0x8e, 0x22, 0x73, 0x34, 0x8f, 0x51, 0xa1, - 0x65, 0x3c, 0xe2, 0xcc, 0xc9, 0xe4, 0x64, 0xe0, 0x6e, 0x06, 0x23, 0xfd, 0xb5, 0xb7, 0x19, 0x63, 0xdb, 0xa3, 0x7a, - 0xa1, 0x85, 0xa2, 0x7f, 0xe1, 0x3b, 0x5d, 0x2f, 0xe0, 0x12, 0xca, 0x81, 0x5d, 0x5f, 0x5d, 0xf1, 0x0a, 0x40, 0x84, - 0xb2, 0xa2, 0xdf, 0xef, 0xfd, 0xa1, 0xa1, 0x49, 0x2b, 0x5e, 0xbe, 0xce, 0x0a, 0xe3, 0x8c, 0x03, 0x4d, 0x05, 0xea, - 0xff, 0xb1, 0x36, 0xcf, 0x74, 0x4c, 0x66, 0xee, 0xe3, 0x70, 0x42, 0x22, 0xff, 0x35, 0xf9, 0xc4, 0x69, 0xfa, 0x89, - 0x2b, 0xda, 0x7f, 0x20, 0x33, 0xd7, 0x1c, 0x32, 0xd4, 0x5f, 0x58, 0xe6, 0x49, 0xeb, 0x75, 0x62, 0x76, 0x52, 0xb1, - 0x7a, 0x06, 0xe8, 0xe9, 0x25, 0x3c, 0xc8, 0x6b, 0x59, 0x3c, 0x85, 0xd9, 0x07, 0x35, 0x62, 0x75, 0xcc, 0xc6, 0xb3, - 0x50, 0x84, 0x13, 0xb0, 0xef, 0x9d, 0x8c, 0xe1, 0x3e, 0x20, 0xc2, 0x8f, 0x75, 0x58, 0x51, 0x94, 0x92, 0x97, 0xf0, - 0x1b, 0x14, 0x13, 0x00, 0x11, 0x08, 0x79, 0xfb, 0x7d, 0x21, 0x93, 0xf0, 0x75, 0x81, 0x29, 0xa5, 0xfc, 0xe0, 0x3f, - 0x91, 0xaa, 0x5b, 0xa6, 0x5f, 0xae, 0x1f, 0x77, 0x26, 0x24, 0x9f, 0x6e, 0x53, 0xe2, 0x3b, 0x08, 0xee, 0x2c, 0x40, - 0x07, 0x51, 0xa3, 0x19, 0xdb, 0xc3, 0xfc, 0x6e, 0xb5, 0x9f, 0xdf, 0xad, 0xfe, 0xdf, 0xf1, 0xbb, 0xd5, 0x43, 0x8c, - 0x61, 0x6d, 0xa0, 0xe1, 0x67, 0xc1, 0x38, 0x88, 0xfe, 0x73, 0x3e, 0x71, 0x2f, 0x4f, 0x7d, 0x9d, 0x15, 0xd3, 0x3d, - 0x4c, 0xb3, 0x4b, 0x50, 0x10, 0x56, 0x71, 0x97, 0x9e, 0xac, 0x6b, 0x73, 0x6b, 0x25, 0x43, 0xcc, 0xf3, 0x00, 0x6b, - 0x14, 0xd6, 0x0e, 0xd0, 0x3d, 0xaa, 0x36, 0x88, 0x15, 0xc1, 0xc3, 0x98, 0x19, 0xe9, 0xfb, 0x76, 0xab, 0x55, 0x98, - 0x0f, 0x72, 0x51, 0x90, 0x5d, 0x7f, 0x3c, 0x1b, 0x47, 0x21, 0x36, 0xe0, 0x3f, 0x66, 0xac, 0x3c, 0xd9, 0x7c, 0x27, - 0x23, 0xb5, 0x63, 0xf2, 0x34, 0xd9, 0x25, 0xbd, 0x03, 0xde, 0x21, 0x3f, 0x6f, 0x3e, 0x86, 0xa5, 0xd0, 0xfc, 0x96, - 0xb8, 0x8a, 0xcb, 0xac, 0x5e, 0x5e, 0x67, 0x09, 0x32, 0x5d, 0xf0, 0xe2, 0xb3, 0x99, 0x2e, 0xe7, 0x63, 0x75, 0xc0, - 0x38, 0x4a, 0xf1, 0xc6, 0x13, 0xa5, 0xa7, 0x2d, 0xcf, 0x0a, 0x79, 0x79, 0x92, 0x31, 0xdb, 0xb3, 0x0a, 0x9c, 0x4e, - 0xc1, 0x04, 0x5f, 0xfd, 0xb4, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x4b, 0xb1, 0xd2, 0x58, 0x4e, 0x06, 0xba, - 0x13, 0x30, 0x43, 0x45, 0x81, 0x17, 0x28, 0xf8, 0x8b, 0x06, 0x46, 0xf4, 0xa5, 0xfd, 0x4d, 0x06, 0x1a, 0xe9, 0x52, - 0x9f, 0x08, 0x63, 0xcb, 0xed, 0x94, 0x69, 0x2b, 0xca, 0x19, 0x67, 0xef, 0xe5, 0x95, 0x02, 0x0c, 0xf0, 0x36, 0xb7, - 0xd1, 0x45, 0x82, 0x5e, 0x0b, 0x52, 0xe7, 0x0d, 0xdc, 0xcd, 0x32, 0xd2, 0xc2, 0xc5, 0xc7, 0xb5, 0xc3, 0x82, 0x3b, - 0xf6, 0x0b, 0xb1, 0xd0, 0x9a, 0x69, 0x30, 0x66, 0x73, 0x82, 0x05, 0x56, 0x32, 0x50, 0x60, 0x31, 0x53, 0x96, 0xa6, - 0xf5, 0x90, 0x1f, 0x1e, 0xa1, 0xb5, 0x69, 0x3d, 0xe0, 0x87, 0x47, 0x4d, 0x94, 0x1d, 0x43, 0x96, 0x13, 0x37, 0x83, - 0x7c, 0xdd, 0x44, 0x3a, 0x45, 0x67, 0x77, 0xeb, 0x4b, 0xdd, 0x51, 0xdd, 0x80, 0xeb, 0x07, 0x20, 0x80, 0x0d, 0xc0, - 0x21, 0x50, 0x0e, 0x96, 0x42, 0x04, 0x8b, 0x32, 0x89, 0xf6, 0x35, 0x74, 0xde, 0x28, 0xf8, 0x2f, 0x70, 0x17, 0x11, - 0x2b, 0xf7, 0x13, 0x04, 0xfe, 0x8a, 0x32, 0xa5, 0x4c, 0x71, 0x3f, 0x51, 0xea, 0x15, 0xca, 0x99, 0x6f, 0xcd, 0x07, - 0xd1, 0x9a, 0x08, 0x55, 0x8c, 0x21, 0xf8, 0xb7, 0xb2, 0x4c, 0x59, 0xaa, 0x4a, 0xf5, 0xa1, 0xf6, 0x5a, 0x2b, 0xad, - 0xe5, 0xe3, 0xc8, 0x79, 0x8d, 0xa1, 0x63, 0x13, 0x6b, 0x29, 0x27, 0x53, 0x67, 0x6f, 0x0e, 0x45, 0x64, 0x01, 0xa7, - 0x13, 0x36, 0x9e, 0x26, 0xc7, 0x62, 0x9a, 0x58, 0xc8, 0xfc, 0x9c, 0x61, 0x64, 0x55, 0x0d, 0xc2, 0x22, 0x6d, 0x28, - 0x4d, 0x01, 0x3a, 0x39, 0x21, 0x64, 0x8a, 0xa1, 0x28, 0xf2, 0x91, 0xea, 0x87, 0xf1, 0x66, 0xb5, 0x5f, 0xbc, 0x53, - 0x00, 0xa7, 0x61, 0x02, 0x81, 0xc0, 0xcb, 0xf8, 0x36, 0x2b, 0xae, 0xc0, 0x63, 0x78, 0x00, 0x5f, 0x82, 0x9b, 0x5c, - 0xca, 0x7e, 0xab, 0xc3, 0x1c, 0xd7, 0x16, 0x30, 0x68, 0xb0, 0x7a, 0x10, 0x1d, 0x2e, 0xa5, 0x7e, 0x57, 0x01, 0x62, - 0x63, 0x0a, 0xff, 0xb3, 0xb5, 0x61, 0xcf, 0xbe, 0x97, 0x4d, 0x43, 0xeb, 0x84, 0xd3, 0xe2, 0x2a, 0x87, 0x28, 0x2a, - 0x83, 0x18, 0xdc, 0x91, 0x1c, 0x3e, 0xef, 0x5d, 0x15, 0x5e, 0x12, 0x70, 0x2b, 0x8b, 0x45, 0xb8, 0xa2, 0xcb, 0xd1, - 0x1d, 0x5d, 0x8f, 0x6e, 0xe9, 0x98, 0x4e, 0xbe, 0x19, 0x83, 0x45, 0xb6, 0x4a, 0xbd, 0xa7, 0xeb, 0xd1, 0x92, 0x7e, - 0x3b, 0xa6, 0x47, 0x7f, 0x03, 0x13, 0x3e, 0x3c, 0x4c, 0xe8, 0x25, 0x38, 0x76, 0x91, 0x06, 0x3d, 0x35, 0x5d, 0x83, - 0xc3, 0x7a, 0x94, 0x0f, 0xf9, 0x28, 0xa7, 0x7c, 0x54, 0x0e, 0xeb, 0x11, 0x78, 0x3a, 0xd6, 0x43, 0x3e, 0xaa, 0x29, - 0x1f, 0x5d, 0x0c, 0xeb, 0xd1, 0x05, 0xf1, 0x9b, 0xfe, 0xaa, 0xe6, 0xd7, 0x15, 0x4b, 0x61, 0x5b, 0xc0, 0xf2, 0xb5, - 0xab, 0x2c, 0x49, 0xdd, 0x55, 0xad, 0x4f, 0x66, 0xc3, 0xd9, 0x9b, 0xeb, 0x2e, 0x27, 0x06, 0x8f, 0xdb, 0xa4, 0xc3, - 0xd5, 0x97, 0x13, 0x79, 0xd2, 0x4b, 0xe4, 0x87, 0xf1, 0x54, 0x9d, 0x43, 0x60, 0x26, 0x31, 0x0b, 0x63, 0x86, 0xcd, - 0x54, 0x69, 0xa0, 0xc0, 0xc9, 0x46, 0x8e, 0x8b, 0x62, 0x36, 0xca, 0x29, 0xbc, 0x8f, 0x09, 0x89, 0xf0, 0xac, 0x3a, - 0xa9, 0x47, 0x25, 0xc4, 0x1c, 0x61, 0x21, 0x3e, 0x42, 0xbf, 0xe4, 0x47, 0x0e, 0x12, 0x78, 0x86, 0x7d, 0x2d, 0x07, - 0x31, 0x1c, 0xf1, 0xa6, 0xb2, 0x7a, 0x16, 0x26, 0x50, 0x59, 0x3d, 0x2c, 0x74, 0x65, 0x25, 0xcd, 0x46, 0xb5, 0x5b, - 0x59, 0x8d, 0x63, 0x94, 0x10, 0x12, 0x15, 0xaa, 0x32, 0x50, 0x9f, 0x24, 0x2c, 0x2c, 0x54, 0x65, 0x17, 0xf2, 0xa3, - 0x0b, 0xb7, 0xb2, 0x0b, 0x70, 0x21, 0x1d, 0x24, 0xee, 0x55, 0x2a, 0x4f, 0xdb, 0xd7, 0x41, 0x6f, 0x55, 0xd1, 0x0d, - 0xbf, 0xab, 0xcb, 0x38, 0x2a, 0xa8, 0x8d, 0x01, 0x8d, 0x0b, 0x23, 0x12, 0x54, 0xad, 0x51, 0xf0, 0x87, 0x04, 0x51, - 0x69, 0x0c, 0x5e, 0x9d, 0x49, 0xd7, 0x4a, 0xad, 0x69, 0x35, 0x28, 0x06, 0x25, 0xdc, 0x9f, 0xf2, 0xd6, 0x42, 0xfa, - 0x1e, 0x22, 0x2a, 0x43, 0x79, 0x83, 0x7f, 0x60, 0xf0, 0x64, 0xb6, 0x4a, 0xc3, 0x64, 0x74, 0x4f, 0xe3, 0xd1, 0x12, - 0xe1, 0x60, 0xd8, 0x3a, 0x95, 0x78, 0xeb, 0x97, 0x90, 0x7e, 0x47, 0xe3, 0xd1, 0x2d, 0x4d, 0x8d, 0xcd, 0xa9, 0x86, - 0xba, 0xea, 0x8d, 0xe9, 0x5d, 0x04, 0xaf, 0xef, 0xa3, 0x25, 0x85, 0xad, 0x74, 0x9a, 0x67, 0x57, 0x45, 0x94, 0x52, - 0x44, 0x20, 0x5c, 0x23, 0x72, 0xe0, 0x52, 0xa1, 0x0d, 0xae, 0x07, 0x50, 0x86, 0x82, 0x0b, 0x5c, 0x0e, 0xe2, 0xd1, - 0xd2, 0x21, 0x53, 0x4b, 0x75, 0x91, 0x45, 0xf8, 0x68, 0x6b, 0xa3, 0x25, 0x79, 0x46, 0x2c, 0x8c, 0x4b, 0x18, 0x42, - 0x55, 0x58, 0xa1, 0x0b, 0x12, 0x36, 0x70, 0x64, 0x2f, 0x2c, 0xeb, 0x70, 0x03, 0xa6, 0x45, 0xf7, 0x60, 0x1e, 0x05, - 0x0a, 0x07, 0x9b, 0x20, 0xdc, 0x84, 0xa2, 0x9d, 0xa3, 0xd0, 0x39, 0x9c, 0x09, 0x4a, 0x77, 0x26, 0x08, 0x69, 0x57, - 0x37, 0xd9, 0x12, 0xae, 0xc1, 0xf6, 0x0e, 0x9d, 0x8a, 0x4a, 0xaa, 0xce, 0x2d, 0x98, 0x2c, 0xe1, 0x11, 0xb6, 0x84, - 0xa9, 0x99, 0x4e, 0xe1, 0x06, 0x7c, 0x78, 0xb4, 0x33, 0xdf, 0xe5, 0xec, 0xcd, 0x21, 0xd8, 0x76, 0x4a, 0x1f, 0x10, - 0x43, 0xec, 0x96, 0x6c, 0x3c, 0x5d, 0x1e, 0x17, 0xd3, 0x25, 0x12, 0x3b, 0x4d, 0xb7, 0x18, 0x9f, 0x2f, 0x17, 0x34, - 0xc1, 0xb3, 0x8d, 0xd5, 0xf3, 0xa5, 0x46, 0x4b, 0x49, 0x19, 0xae, 0xb7, 0x25, 0xfa, 0xff, 0xcb, 0x8b, 0x5f, 0x0a, - 0xf0, 0x12, 0x8c, 0x05, 0x80, 0x70, 0x0f, 0xa6, 0x05, 0xa9, 0x89, 0xb2, 0xb1, 0x4c, 0xc3, 0x14, 0x17, 0x81, 0x4e, - 0xe9, 0xf7, 0xc3, 0x9c, 0xa5, 0xc4, 0x81, 0x0e, 0x35, 0xa3, 0xb4, 0x4e, 0x5d, 0x21, 0x08, 0xf0, 0x48, 0xf2, 0x1c, - 0x9b, 0x7c, 0x33, 0x9e, 0x05, 0x72, 0x20, 0x82, 0x28, 0x3b, 0xc6, 0x47, 0x0c, 0x5c, 0x14, 0xa9, 0xb8, 0x9d, 0xb6, - 0x88, 0xcb, 0xdd, 0x63, 0x16, 0xe2, 0x24, 0x61, 0xae, 0x59, 0x36, 0x64, 0x75, 0x84, 0x09, 0xaa, 0x30, 0x30, 0xcb, - 0x1b, 0xb2, 0xfa, 0xf0, 0x08, 0x22, 0xb5, 0x9a, 0x32, 0x56, 0x5d, 0x65, 0x7c, 0x0b, 0x40, 0xd6, 0x8c, 0xb1, 0xa3, - 0xbf, 0x8d, 0x67, 0xf2, 0x9b, 0x28, 0xe4, 0x27, 0x47, 0x7f, 0x83, 0xe4, 0xe3, 0x6f, 0x91, 0x99, 0x83, 0x64, 0xaf, - 0xa0, 0x2b, 0x7f, 0xd6, 0x15, 0x94, 0x26, 0xae, 0xbd, 0x42, 0xad, 0x3d, 0xa1, 0xd7, 0x5e, 0x89, 0xee, 0xd4, 0x9a, - 0xf7, 0x90, 0xb6, 0xb3, 0x60, 0x82, 0x8e, 0x66, 0x77, 0xa0, 0x83, 0xb7, 0x8a, 0xa0, 0x17, 0x49, 0xa8, 0x3d, 0x42, - 0xa5, 0x51, 0x2f, 0xec, 0xc8, 0x6e, 0xd6, 0x25, 0x73, 0x0c, 0x98, 0x63, 0x73, 0x0e, 0x55, 0xc3, 0x5c, 0x1e, 0xd4, - 0x29, 0x2b, 0x86, 0x39, 0x1e, 0xc0, 0x6b, 0x26, 0x86, 0xd5, 0x20, 0x57, 0x28, 0xdf, 0x97, 0xac, 0x1c, 0x16, 0x83, - 0x5c, 0x71, 0x33, 0x53, 0x3f, 0x36, 0x6d, 0xa2, 0xc2, 0x33, 0xaf, 0xd8, 0xc9, 0xaa, 0x07, 0x7c, 0x2c, 0x78, 0x32, - 0xbb, 0x9e, 0x8f, 0xaf, 0x81, 0x93, 0xd9, 0xdc, 0x45, 0x4b, 0x7a, 0x1f, 0xa5, 0xf4, 0x36, 0x5a, 0xd3, 0x65, 0x74, - 0xa9, 0x4d, 0x8c, 0x93, 0x06, 0xce, 0x01, 0x68, 0x15, 0x40, 0xe2, 0xc9, 0x5f, 0xef, 0x79, 0x52, 0x87, 0x4b, 0x9a, - 0x82, 0xdb, 0xb0, 0x6b, 0x9f, 0x79, 0xed, 0x4a, 0xa4, 0x36, 0x88, 0xb1, 0x66, 0x0c, 0x15, 0x37, 0xce, 0xba, 0x8f, - 0xaa, 0x06, 0x76, 0xae, 0x8d, 0x4d, 0x54, 0x0f, 0x27, 0xd3, 0x02, 0x10, 0x5b, 0x8b, 0xe1, 0xd0, 0x1e, 0x21, 0xbb, - 0xc7, 0x8f, 0x0a, 0xf4, 0xdc, 0x13, 0x06, 0xdb, 0xb6, 0xe5, 0x0f, 0x0c, 0x61, 0x4a, 0x3f, 0x7d, 0xe4, 0x17, 0x84, - 0x4c, 0xaf, 0xe0, 0x6c, 0x04, 0xea, 0x68, 0x84, 0x4e, 0xbf, 0xd5, 0x61, 0xa9, 0x0e, 0xf0, 0xcd, 0x5d, 0x94, 0xd0, - 0xfb, 0x28, 0x77, 0xc8, 0xda, 0xb2, 0x61, 0x62, 0x7a, 0x9e, 0x85, 0xbc, 0x7d, 0xa0, 0x17, 0x0b, 0x00, 0xd1, 0x1a, - 0xc4, 0xae, 0xd4, 0xf5, 0x08, 0x9c, 0x86, 0xd0, 0x24, 0x34, 0x82, 0xab, 0x0a, 0xc2, 0x08, 0xd8, 0x92, 0xf0, 0x37, - 0x98, 0xa8, 0xc0, 0x17, 0xe0, 0x22, 0x93, 0xa6, 0x39, 0x0f, 0x1a, 0x77, 0x24, 0xcf, 0xca, 0xb6, 0xb7, 0x2b, 0x8c, - 0x26, 0x18, 0x7b, 0xa2, 0x7d, 0x1e, 0x29, 0x46, 0x71, 0x99, 0x84, 0xd9, 0xe8, 0x4e, 0x9e, 0xe7, 0x34, 0x1b, 0xdd, - 0xab, 0x5f, 0x35, 0x1d, 0xd3, 0xef, 0x54, 0x40, 0x1b, 0x29, 0x7d, 0xeb, 0x38, 0x1b, 0xd0, 0x7a, 0xb1, 0xd0, 0xfe, - 0xd7, 0x62, 0x74, 0x47, 0xc5, 0xe8, 0xde, 0xb5, 0xa4, 0x9a, 0x4c, 0xcb, 0xe3, 0x0a, 0x0d, 0xa9, 0x3a, 0xbf, 0x2f, - 0x81, 0x9f, 0x2b, 0xb4, 0xef, 0xb4, 0xfe, 0xde, 0x69, 0xff, 0x45, 0x27, 0x4f, 0x20, 0x59, 0xa2, 0x92, 0xd5, 0x23, - 0xb0, 0x63, 0x5f, 0xe7, 0x71, 0xa9, 0x47, 0x29, 0xa6, 0xc6, 0xa4, 0x1f, 0x03, 0x57, 0x4c, 0x7b, 0x25, 0xb8, 0x5a, - 0x6e, 0xb7, 0x32, 0x86, 0x26, 0xec, 0xd9, 0x31, 0x44, 0x3d, 0xd7, 0x8e, 0x51, 0xc2, 0x73, 0x0f, 0x88, 0x95, 0xcc, - 0x5b, 0xba, 0x04, 0x24, 0xf0, 0xd6, 0xc1, 0xa4, 0x28, 0x46, 0x29, 0xc0, 0x4f, 0xa8, 0x3c, 0x0e, 0xfa, 0x84, 0x7c, - 0xa1, 0x50, 0x27, 0x84, 0xb7, 0x25, 0x70, 0xfc, 0x61, 0x7d, 0x54, 0x08, 0x5e, 0xe5, 0xb8, 0xfe, 0x0a, 0xe3, 0xfa, - 0x4b, 0x85, 0xe3, 0x8e, 0x65, 0xbb, 0x7e, 0xde, 0xa6, 0x46, 0x2f, 0xc1, 0xc2, 0x77, 0x23, 0xcd, 0x23, 0xb9, 0x41, - 0x48, 0x95, 0x60, 0xa5, 0x76, 0x21, 0xc1, 0xfc, 0x4b, 0x39, 0x5b, 0x9d, 0xb9, 0xea, 0x91, 0x07, 0xe5, 0x6c, 0x6a, - 0xfa, 0x3d, 0x09, 0xda, 0x7d, 0x47, 0x9a, 0xc3, 0x5b, 0x74, 0xf8, 0xec, 0x1a, 0x4b, 0xcc, 0x9d, 0x44, 0xc9, 0xf3, - 0x49, 0x60, 0xab, 0xe7, 0xd9, 0xb5, 0xf4, 0xb1, 0xda, 0xc5, 0xf1, 0xd3, 0xe7, 0x4f, 0x5c, 0x87, 0x69, 0xe5, 0x29, - 0x41, 0xc0, 0x9b, 0x43, 0xdb, 0x15, 0xca, 0x80, 0x86, 0xfa, 0x06, 0x8e, 0x73, 0x35, 0xac, 0x15, 0x01, 0x53, 0x52, - 0x1e, 0x15, 0xe0, 0x50, 0xe7, 0x91, 0xbb, 0x69, 0x58, 0x6b, 0xba, 0xe6, 0xf5, 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, - 0x3f, 0x3c, 0x1a, 0xd4, 0xf8, 0x93, 0xf8, 0xa3, 0xd1, 0xce, 0x0d, 0x77, 0x9a, 0x0a, 0x33, 0xd7, 0x62, 0x45, 0x76, - 0x47, 0xc9, 0xc9, 0xef, 0xe8, 0x85, 0xb1, 0x3f, 0xff, 0xb9, 0x98, 0x70, 0xd2, 0x12, 0x13, 0xa2, 0xa5, 0x83, 0x12, - 0x1d, 0xec, 0x28, 0xaf, 0xcc, 0x4b, 0xbc, 0x74, 0x8e, 0xff, 0x7d, 0x3d, 0xd6, 0xae, 0x02, 0xa1, 0xd5, 0xc9, 0xc3, - 0xf6, 0x64, 0x81, 0xa8, 0x01, 0xd5, 0xec, 0xb2, 0x1c, 0x69, 0xda, 0x59, 0x93, 0x8d, 0x27, 0x73, 0xdd, 0xcd, 0xe2, - 0xd9, 0x4c, 0x76, 0x2c, 0x2c, 0x3d, 0x0c, 0xc6, 0x4e, 0x15, 0x7d, 0x0e, 0x5a, 0x7e, 0x04, 0xcf, 0x7d, 0xe5, 0x99, - 0xcb, 0x66, 0x69, 0xf1, 0x02, 0x9d, 0x73, 0xaa, 0x21, 0x87, 0x1c, 0x80, 0xe3, 0x02, 0x8d, 0x25, 0x8a, 0x28, 0x08, - 0x1a, 0x13, 0x84, 0x5d, 0x95, 0xee, 0x48, 0x9f, 0x76, 0xf1, 0x69, 0x2b, 0xf4, 0x3d, 0xde, 0x67, 0x20, 0x31, 0x75, - 0x24, 0x0f, 0xb5, 0xd7, 0x1c, 0x95, 0x3c, 0x8b, 0x53, 0x85, 0xcf, 0x2f, 0x65, 0x67, 0xfe, 0xdd, 0x6a, 0x4c, 0xf1, - 0x1f, 0x69, 0xda, 0x77, 0x2e, 0x4d, 0x13, 0xdd, 0xb5, 0x3c, 0x68, 0x29, 0x2c, 0x38, 0x6e, 0x1b, 0x77, 0xfd, 0xfa, - 0x39, 0xaa, 0x61, 0x61, 0x73, 0x38, 0x13, 0x3a, 0xb4, 0x77, 0x95, 0x9d, 0xb9, 0x3e, 0xa2, 0x56, 0x5d, 0xac, 0xda, - 0x80, 0x92, 0x25, 0xe7, 0xd6, 0xe9, 0x88, 0x95, 0xbe, 0x3b, 0x0c, 0x77, 0xe6, 0x51, 0xb1, 0xbb, 0xdb, 0xed, 0x84, - 0xb4, 0xed, 0x83, 0xf1, 0xbe, 0x84, 0x85, 0x58, 0xef, 0xb0, 0x83, 0xef, 0xc3, 0xfa, 0x31, 0x1f, 0xfc, 0x1c, 0xca, - 0x75, 0x55, 0x3f, 0xcf, 0xa4, 0xa1, 0xcf, 0xcb, 0x52, 0x5c, 0xcb, 0x4e, 0xb9, 0x42, 0xb7, 0x96, 0xa9, 0xf7, 0x9b, - 0xf8, 0x4d, 0x2b, 0x40, 0x8c, 0xd3, 0x15, 0x23, 0xc5, 0x1b, 0x1a, 0x61, 0x9c, 0x87, 0xdb, 0x64, 0x51, 0x4b, 0x95, - 0x40, 0xd4, 0xe6, 0x27, 0x8f, 0x79, 0xa4, 0xd5, 0x99, 0xf0, 0xdd, 0x63, 0xee, 0x4a, 0xd7, 0x76, 0x9b, 0xf8, 0xa9, - 0xa6, 0x1d, 0xee, 0x0e, 0x74, 0x47, 0xeb, 0x1e, 0x6e, 0x9e, 0xc9, 0xcf, 0x23, 0xfd, 0xc5, 0x00, 0x9b, 0xb5, 0xcb, - 0xb8, 0xec, 0x18, 0xee, 0x3b, 0xd3, 0x83, 0xb1, 0x80, 0x40, 0x62, 0x86, 0x5e, 0x06, 0x36, 0x70, 0x81, 0xbd, 0xc2, - 0x80, 0x21, 0xae, 0x6e, 0xc9, 0xb9, 0xb2, 0xb2, 0x75, 0x91, 0xb7, 0x51, 0x21, 0xd8, 0x34, 0x1d, 0x37, 0x49, 0x0e, - 0xc1, 0x09, 0x5b, 0xee, 0x7d, 0xed, 0xb5, 0x33, 0xfc, 0xc7, 0xa0, 0xb2, 0x6e, 0x89, 0x8e, 0x51, 0xdb, 0x63, 0xa5, - 0xee, 0xd5, 0xbc, 0xca, 0x7d, 0xe4, 0x58, 0xbf, 0xe9, 0x97, 0x9a, 0x7d, 0xc1, 0x6b, 0x29, 0x38, 0x34, 0xb6, 0x5b, - 0x61, 0x17, 0x8b, 0x73, 0xb4, 0x1a, 0x59, 0x6b, 0xab, 0xbd, 0x46, 0x2a, 0xba, 0x7f, 0xcd, 0x71, 0x62, 0x2d, 0x85, - 0xcd, 0x87, 0x0f, 0x17, 0x6c, 0x9b, 0x00, 0x06, 0x2d, 0x3a, 0x0b, 0x94, 0x20, 0x93, 0x95, 0xaa, 0xdd, 0x4c, 0x89, - 0x5b, 0xee, 0x67, 0x5d, 0x66, 0x3b, 0x8f, 0x5f, 0x3b, 0x69, 0x9f, 0xf8, 0x1c, 0xfd, 0x30, 0xbf, 0x33, 0x4e, 0x4a, - 0xd6, 0x30, 0xae, 0xe5, 0xff, 0x57, 0xd3, 0xab, 0x32, 0x4b, 0xa3, 0x8d, 0xe6, 0xc1, 0x4c, 0xa8, 0x4d, 0x17, 0x1a, - 0xa3, 0xb6, 0xcb, 0x46, 0x12, 0xd1, 0xfa, 0x0e, 0x04, 0x33, 0x92, 0xfb, 0xaa, 0xda, 0xbc, 0x52, 0x6d, 0xe0, 0x1d, - 0x3e, 0xb1, 0xd1, 0x3d, 0xdb, 0x13, 0x42, 0xf9, 0xee, 0x69, 0xa1, 0x57, 0x2d, 0xad, 0x3c, 0xb6, 0xab, 0x72, 0x2e, - 0x46, 0xb5, 0x7a, 0xc2, 0x64, 0xc3, 0x82, 0xc9, 0xfe, 0x7f, 0x5f, 0x66, 0x69, 0x9b, 0xa2, 0x03, 0xd3, 0xe9, 0xfb, - 0x74, 0xd2, 0x0d, 0xae, 0x33, 0x60, 0x11, 0xc1, 0x96, 0x0a, 0xc7, 0xa3, 0x50, 0x6e, 0x90, 0x30, 0x11, 0x5c, 0x47, - 0xbd, 0xec, 0x68, 0x99, 0x94, 0x55, 0x01, 0xcf, 0x2f, 0x5d, 0x65, 0x3a, 0x8e, 0x86, 0x7e, 0xff, 0x3a, 0xd5, 0xa1, - 0x5f, 0x69, 0xe1, 0x9c, 0x23, 0xcb, 0xcc, 0x51, 0x75, 0xc8, 0x30, 0x46, 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x86, - 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x8c, 0x81, 0x5c, 0x2a, 0x83, 0x7a, 0x45, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, - 0x42, 0x2f, 0x59, 0xe1, 0xde, 0x85, 0xd6, 0x20, 0x50, 0x14, 0x7e, 0xca, 0xf4, 0x42, 0xb5, 0xf3, 0x92, 0x26, 0xb4, - 0xa4, 0x2b, 0xd2, 0x80, 0xbe, 0xd7, 0xca, 0xd9, 0xd1, 0xc9, 0x4e, 0xcf, 0x7a, 0xcc, 0xca, 0xe1, 0x64, 0x1a, 0xc3, - 0x35, 0x2d, 0xb6, 0xd7, 0xb4, 0xa5, 0x7f, 0xe3, 0xf2, 0x36, 0x8e, 0x47, 0xbb, 0x40, 0xda, 0xa6, 0xb8, 0xfd, 0xd4, - 0xe1, 0xf6, 0xd7, 0x0d, 0x5b, 0x4e, 0x7b, 0xeb, 0xed, 0xb6, 0x97, 0x82, 0x8d, 0xa8, 0xc3, 0xc7, 0xaf, 0xa5, 0x74, - 0xdd, 0x70, 0xf9, 0x29, 0x3c, 0x3b, 0x7c, 0xfd, 0xd2, 0x05, 0x97, 0xa3, 0x75, 0x9b, 0xbb, 0x5f, 0xee, 0x22, 0xcb, - 0x7d, 0xd6, 0xd0, 0x72, 0x35, 0x43, 0x3e, 0x79, 0xd6, 0xda, 0x3b, 0xd4, 0x82, 0xe5, 0xac, 0x9b, 0xf0, 0xc4, 0x60, - 0xc7, 0x5e, 0x7b, 0x9b, 0xa3, 0xd6, 0x97, 0x2c, 0x8f, 0x04, 0xba, 0x24, 0x4f, 0x37, 0xfd, 0x83, 0x08, 0xf3, 0xd1, - 0x1d, 0xcd, 0x01, 0x57, 0xac, 0x36, 0x97, 0x0c, 0xd2, 0xd4, 0xed, 0x25, 0x2e, 0x7d, 0x85, 0x43, 0xb2, 0xc1, 0x27, - 0xcd, 0x54, 0x7d, 0x72, 0xc9, 0x83, 0xff, 0xb7, 0x51, 0xab, 0xf4, 0xec, 0x24, 0x7b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, - 0x4c, 0x34, 0x12, 0xf0, 0xd4, 0x2c, 0x86, 0x7a, 0x54, 0x97, 0x71, 0x51, 0xe5, 0x3a, 0xe6, 0xd8, 0xde, 0xae, 0xa1, - 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xfa, 0x0e, 0x6c, 0x04, 0x3a, 0x2a, 0x51, 0x5f, 0x86, 0x99, 0xbe, 0x0c, 0xd3, - 0xae, 0xad, 0x02, 0xc3, 0x2b, 0xb7, 0x4a, 0x22, 0x5d, 0x8d, 0x7a, 0x5c, 0xcf, 0x92, 0xdf, 0x8b, 0xbc, 0x7b, 0x4d, - 0x3a, 0x12, 0x7f, 0xba, 0x74, 0xe4, 0xf5, 0x30, 0x20, 0xe2, 0x73, 0x96, 0x86, 0x6d, 0x14, 0x04, 0xa7, 0x96, 0x3b, - 0x90, 0xe6, 0x23, 0x40, 0xe6, 0xc7, 0x69, 0xf8, 0x4e, 0x89, 0x73, 0xc8, 0x46, 0x6a, 0x9c, 0xd8, 0x52, 0xab, 0x87, - 0xe0, 0xce, 0x7b, 0xcd, 0x63, 0x08, 0x7c, 0xf8, 0x01, 0x37, 0x83, 0x8c, 0x6e, 0x4b, 0x74, 0x94, 0x36, 0x87, 0xba, - 0xe5, 0x23, 0x4f, 0xa8, 0x64, 0x64, 0x78, 0x31, 0xb4, 0x77, 0x47, 0x60, 0x54, 0x5b, 0x81, 0xcc, 0xb0, 0x3c, 0x3c, - 0x1a, 0xa6, 0x52, 0x50, 0x34, 0x14, 0xc3, 0x25, 0xca, 0x01, 0x31, 0x09, 0x04, 0x46, 0xe5, 0x20, 0x55, 0x95, 0xc9, - 0x17, 0x83, 0x54, 0xdd, 0xaa, 0x48, 0x73, 0x9e, 0x85, 0x35, 0x55, 0x2d, 0xa2, 0x63, 0x3a, 0x14, 0x74, 0xa9, 0x77, - 0x6a, 0xae, 0xa4, 0x17, 0x72, 0x39, 0x3e, 0x53, 0x69, 0x30, 0x8a, 0x67, 0x36, 0x45, 0xbd, 0x95, 0xfb, 0xd9, 0x7d, - 0x8b, 0x29, 0x0d, 0x62, 0x53, 0x3b, 0x8b, 0x18, 0x56, 0xed, 0x87, 0xac, 0xce, 0x41, 0xbb, 0x0b, 0xca, 0xc6, 0x5a, - 0x3b, 0xcf, 0x7b, 0xc1, 0xcc, 0x41, 0xdb, 0x58, 0xfb, 0x3e, 0xf4, 0x5a, 0x8c, 0xda, 0x1b, 0x53, 0x85, 0x7b, 0x02, - 0x3f, 0x4d, 0xd0, 0x74, 0x27, 0xf2, 0x1c, 0x75, 0xc8, 0xbb, 0xfb, 0x99, 0x25, 0x3b, 0x93, 0x4f, 0x62, 0x99, 0x34, - 0xed, 0x63, 0x12, 0xa3, 0x96, 0x18, 0x46, 0x17, 0x6e, 0x64, 0x52, 0xfb, 0xb9, 0x33, 0xfd, 0x88, 0x67, 0xf2, 0xb0, - 0x1d, 0x1a, 0x75, 0xa5, 0x61, 0x2d, 0x29, 0xa2, 0xba, 0xa0, 0xb7, 0xa6, 0x3a, 0x3a, 0xa2, 0x4e, 0x47, 0x60, 0x75, - 0x45, 0x1b, 0xd4, 0x00, 0x4c, 0xc6, 0x8d, 0xa9, 0xcd, 0xe5, 0x60, 0x1a, 0xa3, 0x2a, 0x78, 0x4a, 0x77, 0x85, 0xd2, - 0xbd, 0x49, 0xd3, 0xb4, 0x86, 0xd8, 0x00, 0x06, 0x04, 0x76, 0xf4, 0xe4, 0xf4, 0x07, 0x3e, 0x2a, 0x00, 0x0d, 0xbc, - 0xdb, 0x99, 0xca, 0x91, 0xa8, 0x77, 0x72, 0xd3, 0xfa, 0xa9, 0x4e, 0x55, 0x2e, 0x80, 0x8a, 0x3b, 0x4b, 0xe7, 0x97, - 0x7a, 0xc4, 0x02, 0x18, 0xf7, 0xc0, 0x9a, 0xea, 0x9d, 0x66, 0x60, 0x3d, 0x91, 0xe7, 0x59, 0xc5, 0x13, 0x51, 0xc0, - 0x8c, 0x88, 0xeb, 0x6b, 0x51, 0xc0, 0x30, 0xc8, 0x01, 0x40, 0x8b, 0xe6, 0x2a, 0x9a, 0xf0, 0xaf, 0x1a, 0xba, 0x2f, - 0x0f, 0xff, 0x4a, 0xe5, 0xfa, 0x7a, 0xdc, 0x80, 0xa1, 0xf2, 0xba, 0xe6, 0x3b, 0x99, 0xbe, 0xe6, 0x4f, 0x9c, 0x4c, - 0x4b, 0xb1, 0x2e, 0x77, 0xb2, 0x7c, 0xf5, 0x35, 0x7f, 0xaa, 0xf2, 0x1c, 0x3d, 0x69, 0x68, 0x1a, 0xdf, 0xef, 0x64, - 0xf9, 0xe6, 0xeb, 0x27, 0x26, 0xcf, 0x57, 0xe3, 0x86, 0xde, 0x72, 0xfe, 0xd1, 0x66, 0x9a, 0xa8, 0xaa, 0xc6, 0x4f, - 0xbe, 0x31, 0xb9, 0x9e, 0x34, 0xf4, 0x5a, 0x14, 0xf5, 0x72, 0xa7, 0xa8, 0xa3, 0xaf, 0x8f, 0xbe, 0xe1, 0x5f, 0xeb, - 0xee, 0x1d, 0x35, 0xf4, 0xcf, 0x75, 0x5c, 0xd6, 0xbc, 0xdc, 0x29, 0xee, 0x6f, 0xdf, 0x7c, 0xf3, 0xc4, 0x64, 0x7c, - 0xd2, 0xd0, 0x7b, 0x1e, 0x77, 0xb4, 0x7d, 0xf2, 0xf4, 0x09, 0xff, 0x5b, 0xd3, 0xd0, 0x5f, 0x98, 0x1b, 0x1c, 0xf5, - 0x34, 0x73, 0xf4, 0xf0, 0x89, 0xf0, 0x51, 0x03, 0x86, 0x0e, 0x1a, 0x40, 0x2e, 0x8c, 0x9a, 0x66, 0x8f, 0x57, 0x2e, - 0xb8, 0x7d, 0x9f, 0xc7, 0x69, 0xbc, 0x82, 0x83, 0x60, 0x83, 0xc6, 0x59, 0x25, 0x70, 0xaa, 0xc0, 0x7b, 0x46, 0x05, - 0xcd, 0x2a, 0xf1, 0x0f, 0xce, 0x3f, 0xc2, 0xa0, 0x21, 0xa4, 0x8d, 0x8c, 0x0c, 0xf4, 0x76, 0xa5, 0x22, 0x1b, 0xa1, - 0xff, 0xa6, 0x1f, 0x07, 0xc7, 0x85, 0xd1, 0xeb, 0xf7, 0xc3, 0x92, 0x55, 0x61, 0x49, 0x08, 0xfd, 0x23, 0x2c, 0xc1, - 0xa1, 0xa4, 0x64, 0x4e, 0x3e, 0xed, 0x7b, 0xae, 0x8c, 0xc2, 0x42, 0x10, 0xdd, 0x45, 0xe6, 0x01, 0x55, 0x8f, 0xae, - 0x43, 0x37, 0xc4, 0xcb, 0x0a, 0x4b, 0x86, 0x0e, 0x66, 0x30, 0x43, 0x50, 0xfc, 0x6b, 0x1e, 0x0a, 0xf0, 0x89, 0x07, - 0xf8, 0xe8, 0x31, 0x99, 0x71, 0x79, 0xad, 0x7d, 0x7b, 0x19, 0x96, 0x34, 0x50, 0x6d, 0x87, 0xa0, 0x03, 0x91, 0xfb, - 0x02, 0x3c, 0x05, 0x06, 0x2e, 0x2c, 0xec, 0x52, 0xec, 0xfa, 0xab, 0xff, 0xa2, 0x59, 0x47, 0x1b, 0x7e, 0xf4, 0x17, - 0xe3, 0xc2, 0x9e, 0x91, 0xa9, 0x38, 0x2e, 0x86, 0x93, 0xe9, 0x60, 0x20, 0x6c, 0x1c, 0xb7, 0xd3, 0x6c, 0xfe, 0xcb, - 0x5c, 0x2c, 0x16, 0xa8, 0xfb, 0xc6, 0x79, 0x9d, 0xa9, 0xbf, 0x91, 0x72, 0x3e, 0x78, 0x7d, 0xfa, 0xdb, 0xf9, 0xd9, - 0xe9, 0x4b, 0x70, 0x3e, 0xf8, 0xf0, 0xe2, 0xfb, 0x17, 0xef, 0x65, 0x70, 0x77, 0x39, 0xe7, 0xfd, 0xbe, 0x95, 0xfa, - 0x84, 0x7c, 0x58, 0x93, 0xc3, 0x30, 0x7e, 0x5c, 0x4a, 0xa3, 0x07, 0x72, 0xcc, 0x0c, 0x14, 0x32, 0x54, 0xd1, 0x98, - 0xdf, 0xc5, 0x70, 0xe2, 0x80, 0x59, 0xdc, 0x7b, 0x22, 0x5c, 0xb7, 0xe5, 0x26, 0xc8, 0x9a, 0x38, 0x71, 0xfa, 0xc1, - 0xc9, 0x54, 0x58, 0xb6, 0xb0, 0x64, 0x50, 0x36, 0xb4, 0xe9, 0x34, 0x9b, 0x97, 0x0b, 0xd3, 0x2e, 0xbb, 0x40, 0x46, - 0x69, 0x76, 0x79, 0x19, 0x4a, 0xe8, 0xea, 0x13, 0xd0, 0x00, 0xe8, 0x46, 0x95, 0xb6, 0x45, 0x7c, 0xe6, 0x96, 0x1f, - 0x8d, 0x9d, 0xe6, 0xdd, 0xa1, 0xee, 0x49, 0x37, 0xab, 0xf6, 0x06, 0x74, 0x30, 0xa1, 0xdc, 0x0e, 0xba, 0x0e, 0x26, - 0x23, 0xdb, 0xf2, 0xcb, 0xbc, 0x5e, 0xe8, 0xe6, 0xd8, 0x61, 0xa8, 0x9d, 0x92, 0xd7, 0xc2, 0x43, 0x64, 0x20, 0x19, - 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0xfd, 0x60, 0xd7, 0x3b, 0x7e, 0x93, 0x0b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x51, - 0x25, 0x9d, 0xcb, 0x05, 0xe3, 0xf3, 0x6a, 0x71, 0x02, 0x6e, 0xe7, 0xf3, 0x6a, 0x11, 0x61, 0x50, 0xbe, 0x0c, 0x62, - 0x95, 0x80, 0xdd, 0x8b, 0x85, 0xf0, 0xed, 0x84, 0x36, 0x30, 0x1b, 0x48, 0xb0, 0x41, 0x61, 0x56, 0x1a, 0xa2, 0xdc, - 0x49, 0x8f, 0x36, 0x88, 0x3c, 0xc4, 0xea, 0x79, 0xdd, 0xf6, 0x64, 0xd3, 0x17, 0x13, 0x5c, 0x65, 0x31, 0x13, 0xd3, - 0xf8, 0x98, 0x95, 0xd3, 0x18, 0x4a, 0x89, 0xd3, 0x34, 0x8c, 0xe9, 0x84, 0x56, 0x84, 0x24, 0x8c, 0xcf, 0xe3, 0x05, - 0x4d, 0x50, 0x4a, 0x10, 0x42, 0xc8, 0x8f, 0x11, 0xda, 0xe6, 0xc0, 0x92, 0x37, 0xdb, 0xcf, 0xd1, 0xcf, 0xed, 0x18, - 0x2e, 0xa3, 0x22, 0x74, 0x83, 0xce, 0x1a, 0xee, 0x8d, 0xa8, 0xa4, 0x31, 0x56, 0x0c, 0x41, 0xc0, 0x4b, 0x8c, 0x4a, - 0x58, 0x92, 0x98, 0xd5, 0x10, 0x45, 0xa0, 0x98, 0xc7, 0x0b, 0x56, 0x52, 0xdf, 0xe6, 0x34, 0x56, 0x26, 0x41, 0x3d, - 0x8b, 0xa5, 0x76, 0x20, 0xa4, 0x0a, 0xb1, 0xc7, 0x67, 0x55, 0x74, 0xa3, 0x0c, 0x0d, 0x00, 0x05, 0x4a, 0xca, 0xc5, - 0x6f, 0x3f, 0xdf, 0xc3, 0x4d, 0x42, 0xff, 0xb3, 0x8d, 0x8e, 0x76, 0x96, 0xcb, 0x43, 0x6f, 0xbe, 0xa0, 0x71, 0x9e, - 0x43, 0x28, 0x36, 0x8d, 0x40, 0x5e, 0x64, 0x35, 0x44, 0xb4, 0xb8, 0x0f, 0x74, 0x48, 0x38, 0x68, 0xd3, 0x2f, 0x90, - 0xea, 0x89, 0xc9, 0xa5, 0x27, 0x06, 0xc6, 0xed, 0x90, 0x09, 0x05, 0x1c, 0xe9, 0x79, 0xf6, 0x97, 0x8f, 0xb1, 0xa6, - 0xa8, 0x99, 0x8e, 0xb7, 0x21, 0x11, 0x0d, 0x5a, 0x10, 0xcd, 0xe0, 0xfd, 0x73, 0xcd, 0xf1, 0xaa, 0x03, 0x3f, 0xe0, - 0x9d, 0x8d, 0x33, 0x2f, 0x67, 0x1e, 0x91, 0x53, 0x1f, 0xe5, 0x88, 0x7e, 0xc9, 0xc3, 0x7a, 0xa4, 0x92, 0x31, 0x56, - 0x12, 0x07, 0xbd, 0x0d, 0x16, 0xcc, 0x09, 0x5d, 0xf1, 0xd0, 0xf0, 0xf1, 0x2f, 0x91, 0xc9, 0xa8, 0x68, 0xa1, 0xd8, - 0x8d, 0xca, 0x60, 0xc4, 0x39, 0x0d, 0x33, 0x34, 0x59, 0xd2, 0xc5, 0x52, 0x91, 0xe6, 0x4a, 0x9a, 0x06, 0xb8, 0x04, - 0x1a, 0x3c, 0x1f, 0xf4, 0x43, 0x43, 0x3d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, 0xfb, 0xd0, 0xe1, 0xff, 0xe7, 0xd8, - 0x05, 0x22, 0xed, 0xcd, 0x75, 0x64, 0x3c, 0xd2, 0x78, 0x38, 0x28, 0xda, 0xc7, 0xde, 0x4f, 0xfc, 0xcc, 0x19, 0x7d, - 0x48, 0x2a, 0xdf, 0xe1, 0x83, 0xe5, 0x8e, 0x37, 0xd5, 0xb3, 0x32, 0x82, 0xf5, 0xb0, 0xdd, 0xe2, 0x82, 0x68, 0xbb, - 0x00, 0x52, 0xc7, 0x78, 0xb5, 0x74, 0x8d, 0x57, 0xe3, 0x3d, 0xc6, 0xab, 0xf6, 0x4c, 0x0d, 0x73, 0xb2, 0x41, 0x7d, - 0x96, 0x94, 0xe7, 0xe7, 0x28, 0x13, 0xf4, 0x5d, 0xce, 0x0a, 0x2a, 0x53, 0x09, 0xed, 0xc5, 0x6e, 0xc6, 0xf8, 0x8e, - 0x60, 0x9c, 0x15, 0x8b, 0x91, 0x40, 0x65, 0x2a, 0x69, 0xc2, 0x5e, 0x09, 0xea, 0x31, 0x78, 0xaf, 0x31, 0x44, 0xb5, - 0x8c, 0x5d, 0xb7, 0x81, 0xd0, 0x50, 0x5b, 0x8f, 0xf6, 0x8c, 0xf5, 0xe8, 0x76, 0x5b, 0x6b, 0x7f, 0x3b, 0xb1, 0x2e, - 0x13, 0x44, 0x15, 0x96, 0xa3, 0x09, 0xf0, 0xa6, 0x89, 0xb9, 0x2d, 0x59, 0xa5, 0x05, 0x86, 0xcf, 0xfe, 0x23, 0x2c, - 0xac, 0x4a, 0xa2, 0x20, 0xb3, 0x22, 0x1a, 0xd8, 0x73, 0xf0, 0x79, 0x5c, 0xc3, 0x1a, 0x80, 0x48, 0x8e, 0xe8, 0xe1, - 0xfa, 0x47, 0x28, 0x6c, 0x66, 0x41, 0x66, 0x02, 0x32, 0xf3, 0x22, 0x6d, 0x67, 0x1d, 0x4c, 0xac, 0x49, 0xad, 0x33, - 0x16, 0x62, 0xa8, 0x91, 0x1f, 0x40, 0x19, 0x62, 0xf1, 0xc9, 0x07, 0x13, 0x2a, 0x64, 0x28, 0x55, 0xaf, 0x9b, 0xdd, - 0xc0, 0x2b, 0x1f, 0xb2, 0x6b, 0x5e, 0xd5, 0xf1, 0xf5, 0x4a, 0x5b, 0x12, 0x73, 0xb6, 0xcf, 0x6d, 0x8f, 0x56, 0xfa, - 0xd5, 0x9b, 0x17, 0xdf, 0x9f, 0x7a, 0xaf, 0x76, 0x11, 0x47, 0x43, 0xb0, 0xad, 0x18, 0x63, 0xf4, 0x16, 0x97, 0x06, - 0x13, 0xe9, 0x1a, 0x81, 0xde, 0xa5, 0xa0, 0xdf, 0xfe, 0x5c, 0x4f, 0xc0, 0x6b, 0xae, 0x96, 0x5f, 0xf2, 0x11, 0xb0, - 0x44, 0xf5, 0xac, 0x30, 0x3b, 0x2b, 0xb3, 0xbd, 0xdd, 0x8a, 0xf4, 0xb4, 0x4b, 0x8d, 0x0c, 0xc4, 0xab, 0xed, 0x30, - 0x16, 0x2e, 0x6c, 0xd3, 0xcd, 0x60, 0xd7, 0x4b, 0xc7, 0x12, 0x79, 0xbb, 0x2d, 0xa0, 0x43, 0x66, 0xc0, 0x9d, 0x97, - 0xf1, 0x1d, 0xbc, 0x2c, 0x9c, 0x6e, 0xfa, 0xc1, 0x13, 0xc0, 0x4c, 0xb8, 0xb4, 0x96, 0xc5, 0x31, 0xe3, 0x09, 0xcc, - 0x1f, 0x2d, 0x7d, 0x91, 0xb7, 0x24, 0xb4, 0x7a, 0x7f, 0x85, 0xd5, 0x08, 0xec, 0x4e, 0xce, 0x3e, 0x66, 0xab, 0xd9, - 0x12, 0x50, 0xf3, 0xaf, 0xb3, 0x02, 0x68, 0xae, 0x59, 0x0b, 0xa6, 0x29, 0xd4, 0x5f, 0xd7, 0xcf, 0xe2, 0x55, 0x9c, - 0x80, 0xea, 0x06, 0xbc, 0x45, 0xee, 0x95, 0xe8, 0x4a, 0xa3, 0x8b, 0xd2, 0x07, 0xca, 0x31, 0xa4, 0xd0, 0xd2, 0xf7, - 0x5e, 0x25, 0xcf, 0x3d, 0x0d, 0xb8, 0xa4, 0x50, 0xf3, 0x64, 0x4b, 0x19, 0x0b, 0x80, 0x85, 0x0e, 0x66, 0x92, 0x6c, - 0x45, 0x77, 0x1a, 0x93, 0x02, 0xde, 0x6a, 0xe0, 0x8f, 0x22, 0xab, 0xe5, 0x5d, 0xb1, 0x0a, 0x0b, 0xc7, 0xfe, 0xba, - 0xdf, 0x8f, 0x1d, 0xfb, 0xeb, 0x4b, 0x45, 0xeb, 0xe2, 0x76, 0x03, 0x48, 0x83, 0x01, 0x44, 0x4e, 0xd5, 0x40, 0xe8, - 0x88, 0x62, 0xbe, 0xef, 0xdf, 0xa9, 0xce, 0x22, 0x41, 0xe8, 0x77, 0xea, 0x75, 0xa4, 0x24, 0xa0, 0x53, 0xab, 0xd9, - 0xc9, 0x40, 0x99, 0x7d, 0x40, 0x40, 0x54, 0x37, 0x23, 0x9b, 0x2f, 0xa4, 0x73, 0xb1, 0x0c, 0x1f, 0x3e, 0xa6, 0x10, - 0x50, 0xb8, 0xa3, 0x46, 0xeb, 0x6d, 0x88, 0x04, 0xca, 0x08, 0x45, 0x8c, 0x79, 0xb1, 0x92, 0x84, 0xcc, 0xc7, 0x0b, - 0x14, 0x5c, 0x59, 0x60, 0x57, 0xce, 0x26, 0xc3, 0x22, 0xe2, 0x2c, 0xdc, 0xff, 0xcd, 0x64, 0x41, 0x50, 0x73, 0xe5, - 0x06, 0x72, 0xdc, 0xc9, 0xe4, 0xed, 0x29, 0xaf, 0x86, 0x8a, 0x89, 0x08, 0x02, 0xc3, 0x0d, 0x3f, 0xe3, 0xe3, 0xa3, - 0x05, 0x01, 0x15, 0x99, 0x31, 0x0b, 0xd1, 0x2f, 0x8e, 0xbf, 0x02, 0xd4, 0x98, 0xd1, 0xd1, 0x53, 0x00, 0x85, 0x85, - 0x80, 0xe8, 0x63, 0x90, 0xd1, 0x56, 0xf0, 0xbb, 0x92, 0xbf, 0x5b, 0x27, 0xbe, 0x0b, 0xfd, 0x5a, 0xd1, 0xcb, 0x18, - 0x18, 0x8e, 0x68, 0x72, 0x18, 0xf2, 0xc1, 0x64, 0x00, 0xda, 0x12, 0x67, 0xf7, 0xb5, 0xb4, 0xe2, 0xfa, 0x74, 0xe9, - 0x74, 0xff, 0xa4, 0x3e, 0x48, 0x22, 0x15, 0xac, 0x90, 0xc4, 0x00, 0x42, 0x59, 0xca, 0x6d, 0xb2, 0x04, 0xcb, 0x0a, - 0xbd, 0xa4, 0xb9, 0x46, 0x49, 0xdc, 0xdd, 0x0c, 0x1c, 0xa3, 0x66, 0x9d, 0x86, 0x45, 0xcb, 0x8d, 0x1a, 0xe0, 0x73, - 0x12, 0x56, 0x9a, 0x1b, 0xce, 0x4c, 0x38, 0x67, 0x3a, 0x5c, 0x1d, 0x73, 0xf6, 0x9a, 0x23, 0x18, 0x47, 0x82, 0x37, - 0x1e, 0xba, 0x64, 0x0a, 0x2a, 0x32, 0x65, 0x1c, 0x4c, 0x7b, 0x80, 0x7b, 0xcf, 0xc1, 0x38, 0x8c, 0x0d, 0x6a, 0x43, - 0xea, 0x53, 0xe7, 0x2e, 0x04, 0x82, 0xb4, 0xd6, 0xcb, 0x7c, 0x86, 0xa7, 0x67, 0x84, 0xb2, 0x3f, 0xe4, 0xf0, 0x01, - 0xf0, 0xb2, 0x24, 0x27, 0x13, 0xfe, 0xf4, 0xf1, 0x6e, 0xa0, 0x2a, 0x3e, 0x08, 0x0e, 0xe2, 0x22, 0x3d, 0x08, 0x06, - 0x15, 0xfc, 0x2a, 0xf9, 0x41, 0x2d, 0xc4, 0xc1, 0x65, 0x5c, 0x1e, 0xc4, 0xab, 0xb8, 0xac, 0x0f, 0x6e, 0xb3, 0x7a, - 0x79, 0xa0, 0x3b, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x07, 0xc1, 0xa0, 0xd4, 0x53, 0xbb, 0x62, 0x85, 0x77, - 0x9c, 0xe9, 0x10, 0x65, 0x81, 0x1f, 0x20, 0xcc, 0x3b, 0x0d, 0x80, 0x4f, 0x5d, 0xb3, 0x94, 0x5e, 0x62, 0xb8, 0x81, - 0x6a, 0xba, 0x86, 0x3e, 0x00, 0x8f, 0xbc, 0xa6, 0x31, 0x2c, 0x81, 0xcb, 0xc1, 0x80, 0xac, 0x21, 0x72, 0xc1, 0x9a, - 0x9a, 0x20, 0x0e, 0xe1, 0x5a, 0xda, 0x69, 0x17, 0x3b, 0x14, 0x76, 0xbb, 0x05, 0x44, 0xe5, 0x09, 0xe9, 0xf7, 0xcd, - 0x37, 0xd4, 0xbd, 0x60, 0x2f, 0xc1, 0xfe, 0xaa, 0xac, 0xc3, 0x44, 0x48, 0xcd, 0xf7, 0x15, 0x3b, 0x19, 0xc8, 0x88, - 0xc3, 0x3b, 0x8e, 0x14, 0x6d, 0x54, 0x2e, 0xc3, 0x9e, 0x2c, 0x3d, 0x5f, 0x89, 0x6b, 0x6e, 0xfd, 0xb8, 0x6a, 0x21, - 0xf2, 0x3a, 0x5b, 0x49, 0xf6, 0x6f, 0xc6, 0x15, 0xf7, 0x07, 0xd6, 0x9f, 0xfe, 0x2b, 0xb8, 0xb6, 0x3a, 0xef, 0x7c, - 0xae, 0x11, 0x39, 0x4b, 0x28, 0x97, 0x34, 0x26, 0x0f, 0x6f, 0xe9, 0xfb, 0xdc, 0xea, 0xdb, 0x4c, 0xa7, 0xf6, 0x59, - 0x85, 0x85, 0x0b, 0xd1, 0x8a, 0xe0, 0xd0, 0x10, 0x0b, 0xff, 0x08, 0xd0, 0xd7, 0x3e, 0x53, 0x41, 0x49, 0x9a, 0xf3, - 0x1a, 0xbd, 0x5b, 0x21, 0xe1, 0xa5, 0x62, 0x97, 0x1e, 0x06, 0x52, 0xc6, 0xed, 0xa1, 0x24, 0x4c, 0x4a, 0x5e, 0x84, - 0xf7, 0x5e, 0x7d, 0x93, 0x7b, 0x1e, 0x62, 0xf4, 0x22, 0xc7, 0x4e, 0x40, 0x5b, 0x77, 0x89, 0xce, 0x86, 0x27, 0x6e, - 0xc3, 0x73, 0xd6, 0xa2, 0xd1, 0x74, 0xc9, 0x92, 0x7e, 0x3f, 0x06, 0x13, 0xef, 0x94, 0xe5, 0xf0, 0x2b, 0x5f, 0xd0, - 0x35, 0x03, 0x4c, 0x31, 0x7a, 0x09, 0x09, 0x29, 0x22, 0x91, 0xac, 0xe5, 0x49, 0xf2, 0x89, 0xee, 0x42, 0x70, 0x84, - 0xcb, 0x59, 0x1a, 0x2d, 0xf7, 0x9a, 0x59, 0x20, 0x79, 0x86, 0xbe, 0xab, 0x60, 0x7b, 0x63, 0x17, 0xa4, 0x9c, 0x1f, - 0x57, 0xd3, 0xc1, 0x80, 0x13, 0x05, 0x37, 0x5e, 0x48, 0x71, 0xad, 0x6a, 0x71, 0xc7, 0x30, 0x16, 0xea, 0xb6, 0x88, - 0xc1, 0x01, 0xbb, 0x68, 0x65, 0xb7, 0x0f, 0xb0, 0xab, 0x1c, 0xef, 0x52, 0x65, 0x77, 0x7a, 0xcc, 0xf8, 0xcb, 0x56, - 0x91, 0x4e, 0x5a, 0xed, 0x27, 0xf2, 0x3e, 0x77, 0xd0, 0xe5, 0x72, 0xac, 0x78, 0xcb, 0x41, 0x45, 0x1e, 0xf3, 0x91, - 0xa4, 0xba, 0x9f, 0xe1, 0x08, 0xf3, 0x60, 0xdd, 0xfa, 0x93, 0x43, 0x5d, 0xe0, 0x10, 0x79, 0x52, 0xaf, 0x29, 0xa0, - 0x7b, 0xaf, 0x1e, 0x77, 0xf5, 0xdb, 0xd0, 0x5d, 0xa0, 0x44, 0x3b, 0x15, 0x7b, 0x7e, 0x4c, 0xd4, 0xea, 0x4c, 0x3d, - 0xa1, 0x7f, 0xad, 0xc5, 0xfd, 0x85, 0x76, 0x15, 0xf7, 0xbd, 0xcb, 0x67, 0x1c, 0xea, 0xec, 0x86, 0x50, 0x00, 0xae, - 0xda, 0xd1, 0xa9, 0x6b, 0x43, 0x7a, 0xa9, 0x44, 0x37, 0xc1, 0xc1, 0xf6, 0xfa, 0x8c, 0xa3, 0xe8, 0x47, 0xab, 0x91, - 0x6f, 0xa3, 0xea, 0xb1, 0x18, 0xc4, 0x8f, 0x4b, 0xba, 0x8c, 0xaa, 0xc7, 0xe5, 0x20, 0x7e, 0x2c, 0x9a, 0x66, 0xf7, - 0x5c, 0xd9, 0xdf, 0x47, 0xe4, 0x59, 0x77, 0xf6, 0x52, 0x01, 0x1b, 0x03, 0xcf, 0xae, 0x05, 0x84, 0x53, 0x70, 0x44, - 0xb6, 0x86, 0x3e, 0x74, 0x6e, 0xf7, 0xb1, 0x61, 0x92, 0x20, 0xe8, 0x79, 0x9b, 0x4d, 0xa2, 0xd8, 0x59, 0xff, 0xe8, - 0xc3, 0x29, 0x10, 0xd0, 0xed, 0xb6, 0x59, 0x57, 0x6b, 0x40, 0x31, 0x0d, 0xc7, 0xfc, 0xb0, 0x1c, 0xdd, 0xba, 0xee, - 0xfa, 0x87, 0xe5, 0x68, 0x49, 0x86, 0x13, 0x3d, 0xf9, 0xf1, 0xc9, 0x78, 0x16, 0x47, 0x93, 0xa6, 0xe3, 0xb4, 0x50, - 0xf8, 0xa7, 0xce, 0x2d, 0x14, 0x81, 0x53, 0x31, 0x82, 0x23, 0xa7, 0xca, 0x49, 0xc9, 0xc3, 0xf0, 0x3f, 0xa8, 0x77, - 0xb4, 0x69, 0xaf, 0xe3, 0x3a, 0x59, 0x66, 0xc5, 0x95, 0x0a, 0x1f, 0xae, 0xa2, 0x8b, 0x9b, 0x80, 0x76, 0xce, 0x65, - 0xda, 0xf2, 0xeb, 0xc4, 0xa3, 0x27, 0xb6, 0x66, 0x06, 0xdc, 0xba, 0x1b, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, - 0xc4, 0xdc, 0xfe, 0x55, 0xda, 0xfc, 0x4a, 0xda, 0x67, 0xc9, 0x48, 0xd1, 0x26, 0x23, 0x35, 0x18, 0x61, 0x8a, 0x22, - 0x89, 0xeb, 0xb0, 0x80, 0x20, 0xd8, 0x9f, 0x51, 0x5c, 0x8b, 0xa5, 0x77, 0x1a, 0x84, 0x09, 0xa6, 0x0b, 0xca, 0xaf, - 0x6e, 0xe7, 0xb6, 0xd2, 0x62, 0x8f, 0xe4, 0xf7, 0xb9, 0xb5, 0x5d, 0x51, 0xe4, 0xef, 0xf3, 0x06, 0xd4, 0x03, 0xa2, - 0xdc, 0xd7, 0x47, 0x29, 0x70, 0xd2, 0xe2, 0x86, 0x02, 0xa3, 0x17, 0x74, 0x75, 0x22, 0x77, 0xec, 0xd4, 0x9c, 0xa9, - 0x98, 0xc9, 0xb8, 0xf2, 0x7e, 0xcf, 0xdc, 0x07, 0x4d, 0x41, 0x2b, 0x30, 0xf0, 0xd6, 0x67, 0x3c, 0x3a, 0xd0, 0xdd, - 0x6a, 0x9d, 0x16, 0x6c, 0x16, 0xd4, 0x65, 0xdd, 0xb6, 0xf1, 0xa0, 0x11, 0x07, 0x45, 0xb2, 0x2a, 0x54, 0x4b, 0x78, - 0x22, 0x10, 0x30, 0x65, 0xd7, 0x3c, 0xd2, 0x82, 0x9a, 0xde, 0x84, 0xc2, 0x86, 0x82, 0xbf, 0x52, 0x54, 0xd3, 0x9b, - 0x50, 0x9f, 0x89, 0x53, 0x0c, 0x22, 0x98, 0x11, 0x9b, 0xfd, 0x16, 0x50, 0x7f, 0x6b, 0x46, 0x9b, 0xa6, 0x31, 0xda, - 0x2a, 0xe4, 0x92, 0x22, 0x69, 0xf9, 0x6f, 0xd5, 0x54, 0x50, 0x52, 0xcb, 0x45, 0x6f, 0xe2, 0xbb, 0xe8, 0xf1, 0x4c, - 0x4b, 0x02, 0xa5, 0x5b, 0xee, 0x18, 0xfd, 0x21, 0x0c, 0xf0, 0x88, 0x8e, 0x13, 0x0b, 0xe6, 0x56, 0x27, 0x2c, 0x9b, - 0x57, 0x8b, 0xd1, 0x4a, 0x40, 0xd8, 0xe0, 0x63, 0x96, 0xcd, 0x0b, 0xf5, 0x10, 0xba, 0xc2, 0xd2, 0xb7, 0x60, 0x17, - 0x1b, 0xac, 0x44, 0x15, 0x80, 0xef, 0x05, 0xdd, 0xac, 0x44, 0x15, 0x09, 0xd9, 0xfd, 0xb8, 0xc1, 0x12, 0x64, 0x5a, - 0x29, 0xd3, 0x92, 0x06, 0x0b, 0x02, 0x5f, 0x55, 0x55, 0x3e, 0x24, 0xdb, 0x0a, 0xe4, 0x53, 0x47, 0x0d, 0x38, 0x05, - 0xb2, 0x0a, 0x2c, 0x48, 0x80, 0xca, 0xd0, 0x56, 0x81, 0x69, 0x25, 0xa6, 0xe9, 0x2a, 0x6c, 0x94, 0xd9, 0xa1, 0xd0, - 0xeb, 0x25, 0x9f, 0xc5, 0x83, 0x30, 0x19, 0xc6, 0xe4, 0x31, 0x42, 0xed, 0x1f, 0xe6, 0x51, 0xac, 0xe4, 0x92, 0x2b, - 0xeb, 0x17, 0x7f, 0xfb, 0x09, 0x7b, 0xdd, 0x73, 0x0c, 0x16, 0x60, 0x2d, 0x6d, 0xaf, 0xb3, 0xe2, 0x9d, 0x68, 0x05, - 0xc7, 0xc1, 0x2c, 0xd2, 0x61, 0xd5, 0x91, 0x23, 0xea, 0x8b, 0x5c, 0x7b, 0x17, 0x21, 0x72, 0x90, 0xde, 0x63, 0x80, - 0xdd, 0x08, 0x5f, 0x87, 0xc6, 0xe6, 0x56, 0x55, 0x88, 0xbf, 0x51, 0x22, 0xf1, 0x93, 0x10, 0x1f, 0xd7, 0x2b, 0x99, - 0xab, 0xd6, 0x78, 0xac, 0xaa, 0x19, 0x3c, 0x53, 0xbe, 0xc7, 0xca, 0xbf, 0xb5, 0xdd, 0x1c, 0xe7, 0x3d, 0x78, 0xd0, - 0xba, 0xdf, 0x3a, 0x12, 0x42, 0x73, 0xe5, 0x24, 0x4d, 0x47, 0x8d, 0x8e, 0x99, 0xac, 0x16, 0x95, 0x30, 0xb9, 0x3b, - 0xa5, 0x63, 0xa0, 0xa2, 0x03, 0xb8, 0x96, 0xa8, 0x0e, 0x7a, 0x52, 0xb2, 0x31, 0x1c, 0x71, 0x06, 0x07, 0xed, 0x38, - 0x46, 0xf1, 0x72, 0x2e, 0xc5, 0xcb, 0xf9, 0x09, 0xe3, 0x00, 0xad, 0x05, 0x48, 0xf5, 0x0a, 0xf6, 0x33, 0x97, 0xb0, - 0xc0, 0xfa, 0xce, 0x77, 0x64, 0x80, 0x0c, 0x71, 0xb2, 0x39, 0x4e, 0xf6, 0xb8, 0x51, 0x73, 0x5f, 0xe1, 0xe3, 0xa4, - 0x59, 0x38, 0x75, 0x15, 0xed, 0xba, 0x96, 0xac, 0x98, 0x97, 0x83, 0x09, 0x04, 0x65, 0x29, 0xe6, 0xe5, 0x70, 0xb2, - 0xa0, 0x39, 0xfc, 0x58, 0x78, 0xe8, 0x10, 0xcb, 0x41, 0x02, 0x97, 0xce, 0x1e, 0x03, 0xde, 0x50, 0x28, 0x71, 0x37, - 0xd6, 0x91, 0x63, 0x1d, 0xe5, 0x61, 0x18, 0x03, 0xae, 0xac, 0x15, 0x78, 0xef, 0xbf, 0x3e, 0xfa, 0x80, 0xac, 0xca, - 0x15, 0x5e, 0x8e, 0x72, 0xd7, 0x95, 0x46, 0x5d, 0x52, 0x7a, 0x95, 0x13, 0x3c, 0x95, 0x6c, 0xb7, 0x3d, 0x63, 0x4f, - 0xe5, 0x20, 0xf1, 0x8e, 0x11, 0xbd, 0x98, 0x7a, 0x99, 0x39, 0x81, 0x33, 0xdb, 0x5e, 0xb6, 0x31, 0x3f, 0x76, 0x80, - 0x83, 0x45, 0x10, 0x12, 0x37, 0x84, 0x61, 0x62, 0x27, 0xc5, 0x50, 0x09, 0xe1, 0xba, 0x16, 0x5e, 0xc7, 0x69, 0x19, - 0x83, 0x8b, 0xb4, 0xb2, 0x4d, 0xdc, 0x43, 0xd7, 0x1d, 0x3f, 0xe6, 0x56, 0xc7, 0x68, 0xcb, 0x7c, 0xb8, 0xa3, 0xd3, - 0x07, 0x16, 0x03, 0x50, 0xf7, 0x60, 0x56, 0xb7, 0xcf, 0x24, 0xae, 0x4f, 0xbb, 0x8a, 0x90, 0x08, 0x44, 0x51, 0x2a, - 0x23, 0x4c, 0xff, 0x4e, 0x73, 0x59, 0x4d, 0xeb, 0x07, 0x79, 0xe6, 0x90, 0x67, 0xa1, 0xb3, 0x3d, 0x68, 0xed, 0xef, - 0x06, 0xed, 0xc4, 0x6d, 0xf7, 0xce, 0xff, 0x5b, 0xd6, 0xb5, 0xd5, 0x9a, 0xea, 0x71, 0xbb, 0xfa, 0x81, 0xb7, 0x57, - 0x7b, 0x32, 0x06, 0xcc, 0x4a, 0x38, 0x67, 0x54, 0xc5, 0xcb, 0x8c, 0x57, 0x78, 0x52, 0xad, 0x3c, 0x1f, 0xef, 0xdb, - 0x6c, 0xa4, 0x1f, 0xc8, 0x14, 0x10, 0xcf, 0x6f, 0x53, 0xad, 0x3e, 0x4e, 0x51, 0x02, 0xfe, 0x4e, 0xc5, 0x37, 0xa2, - 0x1f, 0xcd, 0x8b, 0x2b, 0x5e, 0xbf, 0xbd, 0x2d, 0xf4, 0x8b, 0xe7, 0x46, 0xe7, 0x4f, 0x5f, 0x97, 0x2e, 0x74, 0x38, - 0x6a, 0xef, 0xa0, 0xc8, 0x82, 0x55, 0x27, 0x13, 0x2d, 0x6b, 0xab, 0x66, 0x1f, 0x25, 0x5c, 0x4c, 0x54, 0xa3, 0x67, - 0x9d, 0x39, 0x61, 0x4a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x96, 0x0c, 0xd4, 0x69, 0x52, 0x88, 0x1e, 0x56, 0x33, - 0x8c, 0x57, 0x0c, 0xa0, 0x30, 0xa5, 0x04, 0x51, 0xb4, 0x06, 0xc1, 0x40, 0x13, 0xfa, 0xfd, 0xdb, 0x54, 0x65, 0xa0, - 0x45, 0x33, 0x15, 0x20, 0xaa, 0x83, 0x68, 0xab, 0xbc, 0x0c, 0x7f, 0x5c, 0xd2, 0x22, 0xa3, 0x79, 0x45, 0x97, 0x15, - 0x4d, 0x32, 0x7a, 0xc9, 0xa5, 0xa8, 0x78, 0x5d, 0x31, 0x49, 0xdb, 0x35, 0x61, 0xff, 0x97, 0x47, 0xd7, 0x5b, 0xb1, - 0xd6, 0xd0, 0xee, 0x04, 0x19, 0xa1, 0xf9, 0x42, 0x05, 0x21, 0x43, 0xe5, 0x24, 0x74, 0xad, 0x56, 0x78, 0x05, 0x36, - 0x99, 0x66, 0xa3, 0x65, 0x5c, 0x85, 0x81, 0xf9, 0x2a, 0x30, 0x98, 0x1c, 0x98, 0x74, 0xb6, 0xbe, 0x78, 0x26, 0xae, - 0x57, 0xa2, 0xe0, 0x45, 0x2d, 0x21, 0xfa, 0x35, 0xee, 0xbb, 0x8e, 0xab, 0xce, 0xfc, 0x5a, 0xe9, 0x43, 0xdf, 0xba, - 0xac, 0x8d, 0xfd, 0x42, 0xe3, 0x18, 0xec, 0x7c, 0x44, 0x34, 0xa4, 0x41, 0xad, 0x5a, 0x1c, 0xea, 0x00, 0x5d, 0x2a, - 0xa4, 0x90, 0x21, 0x53, 0x99, 0x2c, 0x41, 0xc6, 0x37, 0x7e, 0x2f, 0x44, 0x3d, 0xfa, 0x73, 0xcd, 0xcb, 0xfb, 0x33, - 0x9e, 0x73, 0x1c, 0xa3, 0x20, 0x89, 0x8b, 0x9b, 0xb8, 0x0a, 0x88, 0x6b, 0x79, 0x15, 0x1c, 0xa5, 0x3a, 0x6c, 0xcc, - 0x4e, 0xd5, 0xa8, 0xf5, 0x12, 0xe8, 0x2b, 0x23, 0x7d, 0x63, 0x30, 0x34, 0x11, 0x95, 0xd0, 0xf7, 0x4a, 0xdd, 0xd3, - 0xea, 0x86, 0x01, 0xc4, 0x9f, 0x4b, 0xbd, 0x50, 0xeb, 0xb5, 0x1f, 0x73, 0x43, 0x47, 0x08, 0x1a, 0x7d, 0xd5, 0x2c, - 0x1a, 0xc7, 0x2d, 0x4d, 0x46, 0xc6, 0x8d, 0x36, 0x39, 0xbf, 0x02, 0x19, 0x9f, 0x35, 0x17, 0x9a, 0x34, 0x0d, 0x95, - 0x50, 0x85, 0xd1, 0xe6, 0xce, 0x4b, 0xa7, 0xf7, 0xe0, 0xce, 0xa6, 0xcd, 0x8e, 0x94, 0x4b, 0x63, 0x43, 0x4b, 0x5e, - 0xad, 0x44, 0x51, 0x41, 0x18, 0xe7, 0xde, 0x98, 0x5e, 0xc7, 0x59, 0x51, 0xc7, 0x59, 0x71, 0x5a, 0xad, 0x78, 0x52, - 0xbf, 0x87, 0x5b, 0x9c, 0xb4, 0xba, 0x69, 0x2a, 0xb8, 0xd2, 0x25, 0x07, 0x18, 0x4c, 0x4d, 0xc6, 0x3d, 0xb6, 0x06, - 0x17, 0xf5, 0xef, 0xd1, 0x52, 0x60, 0x2c, 0x54, 0x55, 0x7c, 0x7c, 0x51, 0x89, 0x7c, 0x5d, 0x83, 0x76, 0xf7, 0xb2, - 0x8e, 0x8e, 0x9e, 0xac, 0xee, 0xa6, 0xf2, 0x06, 0x13, 0x3d, 0x39, 0x5a, 0xdd, 0xf5, 0xb2, 0xeb, 0x95, 0x28, 0xeb, - 0xb8, 0xa8, 0xa7, 0x12, 0x91, 0x2c, 0x89, 0xf3, 0x24, 0x9c, 0x8c, 0xc7, 0x5f, 0x1c, 0x0c, 0x0f, 0x20, 0x03, 0x99, - 0xfe, 0x35, 0x94, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x15, 0xf2, 0x6e, 0x17, 0x8d, 0x26, 0x0d, 0xd6, 0x33, 0x4c, - 0xd4, 0xcc, 0x8c, 0xf8, 0xdd, 0x2a, 0x2e, 0x52, 0x88, 0x5f, 0xa7, 0x8a, 0x3f, 0x7a, 0x32, 0xf6, 0xca, 0x37, 0x9f, - 0x3e, 0x6d, 0x7e, 0x6f, 0x74, 0x58, 0x6b, 0xdd, 0xee, 0x67, 0xbf, 0x1f, 0xcb, 0xf9, 0x3e, 0x39, 0x3e, 0x54, 0x3f, - 0x7e, 0x6f, 0x9a, 0xe9, 0xeb, 0x32, 0x9c, 0xff, 0x33, 0x94, 0xf3, 0x79, 0x5a, 0x96, 0xf1, 0x7d, 0x43, 0x16, 0x74, - 0x5d, 0x59, 0x6f, 0x12, 0xea, 0x6c, 0x03, 0x7a, 0x44, 0xa6, 0xeb, 0x8a, 0xc1, 0x37, 0xef, 0xeb, 0x30, 0xe0, 0xd5, - 0x6a, 0xc8, 0x8b, 0x3a, 0xab, 0xef, 0x87, 0x98, 0x27, 0xc0, 0x4f, 0x35, 0x6f, 0xf6, 0xac, 0xd4, 0xc4, 0xe6, 0xb2, - 0xe4, 0xfc, 0x2f, 0x1e, 0x4a, 0xe3, 0xe8, 0x31, 0x1a, 0x47, 0x8f, 0xa9, 0x1c, 0x8c, 0xc9, 0xd7, 0x54, 0x75, 0x66, - 0xf2, 0x35, 0x98, 0x20, 0x65, 0xed, 0x6f, 0xa4, 0x71, 0x62, 0x34, 0xa6, 0x37, 0x2f, 0xf3, 0x6c, 0x05, 0x4c, 0xf0, - 0x52, 0xfd, 0x68, 0x08, 0x7d, 0xcf, 0xdb, 0xd9, 0x47, 0xa3, 0xd1, 0xb3, 0x92, 0x8e, 0x46, 0xa3, 0x8f, 0x59, 0x43, - 0xe8, 0x65, 0xd5, 0xf1, 0xfe, 0x3d, 0xa7, 0x17, 0x22, 0xbd, 0x8f, 0x82, 0x80, 0x2e, 0xb3, 0x34, 0xe5, 0x85, 0x2c, - 0xeb, 0x2c, 0x6d, 0xe7, 0x95, 0x2d, 0x44, 0xe0, 0x1f, 0xd5, 0x46, 0x84, 0x20, 0x22, 0xf4, 0xed, 0x4e, 0xcf, 0x46, - 0xa3, 0xd1, 0x59, 0xaa, 0xab, 0xb5, 0x0c, 0xf9, 0x6b, 0x34, 0x1f, 0xb0, 0x76, 0xf9, 0x60, 0x7d, 0xa3, 0xa3, 0x9d, - 0x1c, 0xfe, 0xf7, 0x70, 0x36, 0x1f, 0x0f, 0xbf, 0x1d, 0x2d, 0x1e, 0x1f, 0xd2, 0x20, 0x70, 0x41, 0xab, 0x43, 0x65, - 0xcd, 0x31, 0x2d, 0x8e, 0xc7, 0x53, 0x52, 0x0c, 0xd8, 0x13, 0xe3, 0x4b, 0xf3, 0xc5, 0x13, 0x40, 0x22, 0x45, 0x11, - 0x6a, 0x60, 0xa5, 0x7f, 0x78, 0x15, 0x79, 0x55, 0x00, 0x3e, 0x9a, 0x89, 0x64, 0xa0, 0xb5, 0x80, 0xe3, 0x08, 0xca, - 0x6b, 0x8c, 0x69, 0x44, 0x8f, 0xb1, 0x4c, 0x47, 0x05, 0x1d, 0x4f, 0xab, 0xdb, 0xac, 0x4e, 0x96, 0x18, 0xd8, 0x28, - 0xae, 0x78, 0xf0, 0x45, 0x10, 0x15, 0xec, 0xe8, 0xe9, 0x54, 0xc2, 0xfb, 0x62, 0x52, 0xca, 0xaf, 0x20, 0xf1, 0xdb, - 0x31, 0x42, 0xa0, 0x12, 0xe5, 0xb1, 0x88, 0x35, 0xbe, 0xcc, 0x45, 0x0c, 0x1e, 0x9c, 0x95, 0xe2, 0x59, 0xcc, 0x49, - 0x60, 0xec, 0x2f, 0x5a, 0xcd, 0x11, 0xd0, 0x9c, 0x50, 0x30, 0x71, 0x58, 0x50, 0xf1, 0xc5, 0x04, 0xbd, 0x82, 0xc0, - 0xad, 0x3a, 0x82, 0xe3, 0xce, 0x58, 0x36, 0xa8, 0xe5, 0x93, 0xb2, 0xc3, 0xf9, 0xff, 0xae, 0xe8, 0x62, 0x70, 0x68, - 0x87, 0xe6, 0xad, 0x72, 0x5f, 0xad, 0x91, 0x51, 0xaa, 0xc3, 0x67, 0x29, 0x31, 0xc6, 0xa7, 0x9c, 0x9d, 0x6c, 0x74, - 0x77, 0x46, 0x75, 0x99, 0x5d, 0x87, 0x44, 0xf5, 0xca, 0x82, 0x62, 0x06, 0x51, 0x36, 0xc2, 0xf5, 0x03, 0xd6, 0x22, - 0x4e, 0x27, 0x6f, 0x78, 0x59, 0x67, 0x89, 0x7c, 0x7f, 0xe3, 0xbd, 0x07, 0x6a, 0x20, 0x1b, 0xf4, 0xae, 0x64, 0x30, - 0xcf, 0x6f, 0x4b, 0x00, 0xed, 0xac, 0x78, 0x79, 0xc3, 0x5d, 0xba, 0x11, 0x04, 0x8d, 0x6d, 0xe6, 0x95, 0x17, 0x6c, - 0x02, 0xbe, 0x7a, 0x57, 0x02, 0xe6, 0x46, 0x08, 0x52, 0x53, 0x08, 0x85, 0x03, 0x17, 0xf8, 0xba, 0x2e, 0xb3, 0x8b, - 0x75, 0xcd, 0x31, 0xd8, 0x47, 0x61, 0xb5, 0x98, 0xd2, 0x09, 0x8f, 0x87, 0x01, 0xfe, 0x08, 0xa8, 0x0c, 0xb8, 0xa1, - 0x3d, 0xec, 0xe0, 0x85, 0xfc, 0x65, 0xdf, 0xc8, 0x3d, 0xc2, 0x5e, 0xa7, 0x21, 0x04, 0xd7, 0xc1, 0x87, 0x00, 0x96, - 0x14, 0xa1, 0x6f, 0xf1, 0x54, 0x0d, 0x83, 0xcb, 0x3c, 0x5b, 0xa9, 0xa4, 0x7a, 0xd4, 0xd1, 0x7c, 0x28, 0xb5, 0x23, - 0x39, 0xa0, 0x4e, 0x7a, 0x8c, 0xe9, 0xa5, 0x4c, 0x97, 0x45, 0x59, 0x23, 0x94, 0x77, 0x6a, 0x62, 0x6c, 0x98, 0x3e, - 0x0e, 0x91, 0x5f, 0xde, 0x95, 0x32, 0xf4, 0x0b, 0x5f, 0x00, 0xf8, 0x15, 0xdc, 0xee, 0x77, 0xe3, 0xbb, 0xc8, 0xec, - 0xe7, 0x9c, 0x1d, 0xfe, 0xf7, 0x3c, 0x1e, 0xfe, 0x35, 0x1e, 0x7e, 0xbb, 0x18, 0x84, 0x43, 0xf3, 0x93, 0x3c, 0x7e, - 0x74, 0x48, 0x5f, 0x72, 0xc3, 0x95, 0xc0, 0xc2, 0xf7, 0x82, 0xdb, 0xc8, 0x95, 0x10, 0x44, 0x01, 0xde, 0x28, 0xec, - 0x6a, 0x9c, 0x00, 0xc0, 0x5f, 0xf0, 0x5f, 0x01, 0x1a, 0x09, 0xd9, 0x8b, 0x06, 0xe8, 0x07, 0xe4, 0xef, 0x93, 0xaf, - 0x3c, 0x03, 0x39, 0x10, 0x4f, 0xc8, 0x18, 0x28, 0x44, 0x95, 0x31, 0x91, 0xb0, 0xbf, 0x26, 0xfb, 0x76, 0xdb, 0x6b, - 0x4b, 0x7e, 0xf0, 0x4b, 0x37, 0xd3, 0x44, 0xcf, 0x3b, 0xdc, 0x50, 0x56, 0x62, 0x15, 0x22, 0x36, 0x9e, 0xfa, 0x95, - 0x33, 0x88, 0x35, 0x79, 0x93, 0x81, 0x0f, 0x83, 0xf9, 0x62, 0x3c, 0x03, 0x69, 0x11, 0xdc, 0x71, 0x4a, 0x7e, 0x99, - 0x81, 0x5b, 0x73, 0x11, 0xe3, 0x05, 0xdb, 0x2c, 0x89, 0x7e, 0xbf, 0x97, 0x67, 0x61, 0xae, 0x70, 0x96, 0xf3, 0x46, - 0x8b, 0xdd, 0x51, 0x27, 0x0c, 0xe2, 0x76, 0x35, 0x04, 0x43, 0x39, 0x04, 0x65, 0x47, 0x5b, 0x6c, 0xbd, 0xa6, 0x9e, - 0x52, 0xf7, 0x56, 0xd6, 0x57, 0x8e, 0xfe, 0x10, 0x59, 0x81, 0x85, 0xb4, 0x6b, 0x8e, 0x55, 0xcd, 0x31, 0xd2, 0x9e, - 0x7e, 0xbf, 0xf2, 0xc8, 0x4f, 0x67, 0xe1, 0x41, 0x20, 0x4b, 0x15, 0x3b, 0x65, 0x51, 0x6e, 0x4a, 0x73, 0xc6, 0xb0, - 0xa1, 0x79, 0x66, 0xe2, 0xba, 0xcc, 0x7a, 0xbd, 0x30, 0x44, 0x87, 0x46, 0x2c, 0x15, 0x6b, 0x83, 0xf0, 0x3e, 0x3a, - 0x61, 0x74, 0x0d, 0xb2, 0xba, 0xf0, 0x9c, 0x13, 0xe4, 0xcb, 0xc0, 0x64, 0x4d, 0x56, 0xeb, 0xe4, 0x84, 0x47, 0x2f, - 0x5f, 0x36, 0x82, 0x06, 0x39, 0x49, 0x51, 0x6f, 0x62, 0x77, 0xec, 0xa3, 0x16, 0x52, 0xe3, 0xa6, 0x99, 0xf6, 0x14, - 0xa9, 0xe8, 0xb1, 0x5e, 0x2d, 0x7f, 0x81, 0x65, 0x81, 0x21, 0x1f, 0x84, 0xf6, 0x14, 0xad, 0xc0, 0x0c, 0x37, 0x26, - 0x83, 0xa6, 0x1f, 0x16, 0x6d, 0x11, 0x3a, 0x23, 0xb7, 0x25, 0x84, 0x6d, 0x1b, 0x84, 0xb5, 0xf3, 0x44, 0xbe, 0x78, - 0xe2, 0x30, 0xc2, 0x21, 0xd7, 0x9b, 0xb9, 0xf2, 0x30, 0xcc, 0xaf, 0x85, 0xdf, 0x3c, 0xd5, 0x5c, 0x27, 0x2a, 0x66, - 0x05, 0xdb, 0xed, 0xb2, 0x22, 0xf8, 0xf7, 0x63, 0x36, 0xc3, 0xbf, 0x59, 0xbf, 0xdf, 0x0b, 0xf1, 0x17, 0xc7, 0xe0, - 0x3d, 0xf3, 0x6a, 0xc1, 0x3e, 0x82, 0x4c, 0x85, 0x44, 0x98, 0x2a, 0x8d, 0xdf, 0x58, 0x0d, 0x16, 0x70, 0xfa, 0x03, - 0x99, 0x0b, 0x33, 0x99, 0xcb, 0x8b, 0x6d, 0xc8, 0x69, 0x6b, 0x9c, 0xb2, 0x51, 0x96, 0x48, 0xd7, 0x85, 0x6c, 0x14, - 0xe7, 0x59, 0x5c, 0xf1, 0x6a, 0xbb, 0x55, 0x87, 0x63, 0x52, 0x72, 0xf4, 0x2b, 0x40, 0x2a, 0x55, 0xb0, 0x8e, 0x54, - 0x3b, 0xfe, 0x22, 0x2c, 0x71, 0x9f, 0xf2, 0x79, 0xb9, 0x30, 0x7b, 0x6b, 0x5e, 0x2e, 0x98, 0xbc, 0x95, 0xf6, 0xc2, - 0x12, 0x9a, 0x57, 0x10, 0xb2, 0xc1, 0x54, 0xc7, 0xa2, 0x35, 0x66, 0xd5, 0xbc, 0x5c, 0x40, 0x18, 0x99, 0x72, 0x01, - 0x36, 0x53, 0xbc, 0x00, 0x2f, 0x92, 0x18, 0x60, 0xe2, 0x62, 0x32, 0x85, 0x78, 0xe6, 0xb2, 0x9c, 0x78, 0xa1, 0xef, - 0x97, 0x89, 0x45, 0xca, 0x80, 0x57, 0x8d, 0x46, 0x13, 0x33, 0x0d, 0x47, 0x9d, 0x20, 0x27, 0x3a, 0xbf, 0x9b, 0x5a, - 0x11, 0x62, 0x4f, 0x1c, 0x01, 0x97, 0x15, 0xd3, 0x85, 0x17, 0x1d, 0x88, 0x31, 0x72, 0x70, 0x8a, 0x4f, 0x0c, 0x8e, - 0xc2, 0xe0, 0xdc, 0x38, 0x27, 0x48, 0x19, 0xc6, 0x64, 0x23, 0xd8, 0xb5, 0x08, 0xab, 0x79, 0xbc, 0x00, 0x65, 0x5d, - 0xbc, 0x00, 0xcb, 0x1a, 0x6d, 0x80, 0x09, 0xf2, 0x2a, 0xee, 0x84, 0x7e, 0xa2, 0xb8, 0x42, 0x84, 0x63, 0xe5, 0xfa, - 0xa8, 0x6c, 0x87, 0xbe, 0xc0, 0xeb, 0xbd, 0x34, 0xc7, 0xcd, 0x7a, 0x2c, 0x10, 0xd8, 0x10, 0x30, 0x36, 0x52, 0x69, - 0xb2, 0xb5, 0xf6, 0x8d, 0x9e, 0x07, 0x3e, 0xcd, 0x46, 0x85, 0xa8, 0xcf, 0x2f, 0x41, 0x84, 0xe2, 0xa2, 0xc1, 0x23, - 0xbf, 0x88, 0x3b, 0x4b, 0xbf, 0x35, 0x2d, 0x2a, 0xd8, 0xc9, 0x06, 0x40, 0xfa, 0x54, 0xb4, 0x28, 0x29, 0xa7, 0x28, - 0x48, 0x63, 0x37, 0x05, 0xac, 0x24, 0x77, 0x01, 0x43, 0xb0, 0xb1, 0x83, 0xca, 0xea, 0x14, 0x11, 0x49, 0x02, 0x91, - 0x15, 0xc3, 0x82, 0xe2, 0xd8, 0x16, 0x88, 0xfa, 0x69, 0xca, 0x32, 0x83, 0xa1, 0xa3, 0xe2, 0x3e, 0x4f, 0x1d, 0x4a, - 0x14, 0x04, 0x54, 0x0d, 0x39, 0x48, 0x6c, 0x4d, 0x03, 0xe1, 0x01, 0x79, 0x44, 0x67, 0xac, 0xbf, 0xcf, 0x3a, 0xcf, - 0x2e, 0x34, 0x47, 0xe5, 0x6a, 0x57, 0xe8, 0x31, 0xc2, 0x93, 0x4c, 0xc3, 0xe4, 0x3b, 0xe7, 0x99, 0x56, 0x53, 0xf4, - 0x1c, 0x7c, 0xb2, 0x53, 0x8c, 0x48, 0xb7, 0x67, 0xd0, 0x75, 0xf0, 0xaa, 0x0e, 0x1b, 0xed, 0x5a, 0x42, 0x48, 0xe8, - 0x5a, 0x14, 0x31, 0xeb, 0x19, 0x03, 0xea, 0xed, 0xb6, 0xa7, 0xe6, 0x6a, 0xff, 0xdc, 0x6d, 0xb7, 0x3d, 0xec, 0xd6, - 0xf3, 0xb4, 0xdb, 0x0a, 0xbc, 0x96, 0x1f, 0xb4, 0xc7, 0x9f, 0xdb, 0xf1, 0xe7, 0x1a, 0xc9, 0xa3, 0xb0, 0x34, 0xd3, - 0xd4, 0x07, 0xe1, 0x70, 0xd3, 0x7b, 0xaf, 0x49, 0xdf, 0x67, 0xa1, 0xa0, 0x97, 0x95, 0x57, 0x5d, 0x63, 0x4d, 0x2a, - 0x1f, 0x5c, 0xff, 0x0f, 0xaf, 0x02, 0x3c, 0xe2, 0xe4, 0xce, 0xde, 0xdb, 0xa0, 0xd2, 0x6b, 0x0b, 0x47, 0x8a, 0xd0, - 0x03, 0x92, 0xb0, 0xaf, 0x65, 0x2d, 0x6e, 0xf3, 0x2c, 0x7b, 0x98, 0x3e, 0xbd, 0x4a, 0x5d, 0xab, 0x7b, 0xbb, 0xcc, - 0x32, 0x7d, 0xe0, 0xd5, 0x14, 0x07, 0x34, 0xea, 0xa2, 0x7d, 0xd7, 0x59, 0x55, 0x81, 0x97, 0x07, 0x5c, 0x9f, 0xcf, - 0xb8, 0x0b, 0x37, 0x77, 0x55, 0xfb, 0x9b, 0xf4, 0x2c, 0x9b, 0x67, 0x8b, 0xed, 0x36, 0xc4, 0xbf, 0x5d, 0x2d, 0xb2, - 0x34, 0x79, 0x0e, 0x3a, 0x3c, 0x8c, 0xdc, 0xc3, 0x54, 0xe3, 0x9c, 0xcd, 0xff, 0xb2, 0xf2, 0x9c, 0x04, 0x4e, 0x81, - 0x5e, 0xcc, 0x1e, 0x81, 0x0c, 0x46, 0x3b, 0xf5, 0x57, 0x33, 0xb5, 0x66, 0x20, 0xfa, 0x56, 0x15, 0x01, 0x8e, 0x2e, - 0x36, 0x12, 0x8d, 0x2c, 0x38, 0x69, 0x08, 0x58, 0x6c, 0x9a, 0xf2, 0x3e, 0x18, 0xda, 0x56, 0x97, 0xf7, 0xce, 0x92, - 0xe6, 0xb8, 0x0e, 0xac, 0x6d, 0xbf, 0x1e, 0x62, 0x5d, 0x76, 0xbd, 0x40, 0xee, 0x97, 0x37, 0xb4, 0x37, 0x6e, 0x12, - 0x98, 0xb5, 0x4d, 0x63, 0x18, 0x3f, 0x53, 0xfa, 0x4f, 0x6a, 0x70, 0xa5, 0xf1, 0xd3, 0x5c, 0x5b, 0x25, 0x98, 0x7d, - 0xe3, 0xf8, 0x0e, 0x40, 0x38, 0x36, 0x97, 0x1e, 0x9f, 0x65, 0x0e, 0x3d, 0x06, 0xa2, 0xa3, 0x3f, 0x2a, 0xec, 0x47, - 0x66, 0xf7, 0xba, 0x01, 0xf0, 0xe6, 0x75, 0xbb, 0xa0, 0x79, 0xb1, 0x80, 0x40, 0xa2, 0x4e, 0x79, 0xa5, 0xe1, 0x33, - 0x63, 0x76, 0x05, 0x64, 0xa8, 0x24, 0x60, 0x93, 0xd4, 0x75, 0x2e, 0xc4, 0xb2, 0xc3, 0xd2, 0x7c, 0x24, 0x61, 0x27, - 0x21, 0xa0, 0xbd, 0x06, 0xc1, 0x2c, 0xf8, 0xaf, 0x60, 0x50, 0x0c, 0x82, 0x28, 0x88, 0x82, 0x80, 0x0c, 0x4a, 0xf8, - 0x85, 0x38, 0x63, 0x04, 0x63, 0x94, 0x40, 0x87, 0xdf, 0x71, 0xe6, 0x32, 0x22, 0x2f, 0xbc, 0x30, 0x96, 0x76, 0x00, - 0x2e, 0x84, 0xc8, 0x79, 0x8c, 0x3e, 0x16, 0xef, 0x38, 0xcb, 0x08, 0x7d, 0xe7, 0x9c, 0xca, 0x8f, 0xb8, 0x17, 0xdc, - 0x6e, 0x77, 0xd8, 0x5e, 0xf2, 0x30, 0xa3, 0xbd, 0x31, 0x7d, 0xc7, 0x49, 0x94, 0x79, 0xce, 0xc3, 0x1c, 0x7a, 0x56, - 0x1b, 0xd6, 0x8a, 0x6a, 0x72, 0x83, 0x62, 0x5d, 0x64, 0x99, 0xac, 0x0c, 0x57, 0xce, 0x69, 0x85, 0xeb, 0xce, 0xac, - 0x17, 0x90, 0x94, 0x55, 0x8a, 0xa5, 0x33, 0xe1, 0xab, 0x4d, 0xcb, 0x9e, 0xb7, 0x4e, 0x21, 0xa7, 0x21, 0x32, 0xfa, - 0xa1, 0x25, 0xa0, 0x9a, 0x56, 0x5c, 0xd5, 0xe0, 0xb2, 0xab, 0xdb, 0xc3, 0x75, 0x7b, 0x74, 0x33, 0x3e, 0x40, 0x8c, - 0x38, 0x8e, 0x2d, 0x03, 0xbb, 0x09, 0x8b, 0x67, 0x63, 0x7d, 0x5f, 0x76, 0xe9, 0xad, 0xad, 0xc5, 0x21, 0xac, 0x3d, - 0x67, 0x85, 0x84, 0x00, 0x69, 0xa9, 0x2b, 0xdd, 0x6e, 0x83, 0x00, 0x06, 0xb8, 0xdf, 0xef, 0x01, 0xd7, 0xaa, 0xd9, - 0x49, 0x7d, 0x6b, 0x36, 0xc4, 0x5e, 0x52, 0x78, 0x0c, 0x44, 0xa9, 0xf8, 0xcf, 0x20, 0xa0, 0x78, 0xee, 0x86, 0x60, - 0x5f, 0xc9, 0x4e, 0x36, 0x65, 0xbf, 0xff, 0xbc, 0xc4, 0x07, 0x94, 0x83, 0x82, 0x58, 0x57, 0xc5, 0xad, 0xd0, 0xec, - 0x93, 0xfc, 0x10, 0xc7, 0x22, 0xcf, 0x42, 0x4b, 0x58, 0x6a, 0x4d, 0x58, 0xb8, 0x64, 0xa4, 0x83, 0x38, 0x68, 0x48, - 0xe7, 0x60, 0xd5, 0x36, 0xd8, 0x70, 0xaf, 0xf7, 0xb2, 0x0a, 0x2b, 0x9a, 0x39, 0xc3, 0xf2, 0xde, 0x01, 0x00, 0xeb, - 0xf5, 0x70, 0xa1, 0x38, 0x64, 0xc2, 0x43, 0x9f, 0xc4, 0x97, 0x86, 0x5d, 0x9f, 0x29, 0x59, 0xc9, 0x68, 0x34, 0xaa, - 0x1b, 0x29, 0xf9, 0x30, 0xdf, 0xbd, 0x69, 0xa1, 0x56, 0x8a, 0x38, 0xe5, 0x29, 0x58, 0x7a, 0x6b, 0x4a, 0x37, 0x5f, - 0xd0, 0x15, 0x2f, 0x52, 0xf9, 0xd3, 0x41, 0x9b, 0xf4, 0x88, 0x6b, 0xe6, 0xeb, 0x2c, 0xcc, 0xf0, 0x43, 0xc0, 0x47, - 0xf3, 0x30, 0xb3, 0xe9, 0x0a, 0x96, 0x16, 0xc4, 0x91, 0x71, 0xc9, 0x43, 0x9b, 0x07, 0xb0, 0xfe, 0xf4, 0x21, 0x89, - 0x9f, 0xc2, 0xcf, 0x99, 0x4e, 0xeb, 0xf8, 0x0c, 0x67, 0x33, 0x2a, 0xe4, 0x8d, 0xa0, 0xfd, 0x1a, 0x12, 0x89, 0x46, - 0x36, 0xf6, 0x18, 0x8a, 0xd6, 0xdd, 0x06, 0xae, 0xfc, 0x86, 0xde, 0xb9, 0x34, 0x08, 0xb0, 0xad, 0xb1, 0x18, 0x38, - 0xe3, 0xf1, 0x07, 0xaa, 0x6a, 0xf4, 0x15, 0x45, 0x37, 0x4c, 0x26, 0x9a, 0x3b, 0x8e, 0xed, 0xa8, 0x76, 0x95, 0xad, - 0x58, 0x61, 0x6c, 0x79, 0xed, 0x5b, 0x5a, 0x9a, 0x12, 0x50, 0x0d, 0x86, 0x3b, 0x01, 0x7c, 0x46, 0x84, 0x3c, 0x10, - 0x44, 0xf7, 0xc1, 0x41, 0x73, 0x96, 0xe0, 0x79, 0x18, 0xc2, 0x1f, 0x58, 0x38, 0xb0, 0x2c, 0x65, 0x3f, 0x97, 0xd3, - 0x18, 0xce, 0xdd, 0x5c, 0xee, 0xf0, 0xd9, 0x12, 0x14, 0x79, 0x72, 0x4e, 0xf5, 0xe5, 0x2b, 0xf7, 0xf6, 0x7b, 0x4c, - 0x30, 0x8f, 0x9e, 0x6d, 0xf8, 0xad, 0xa6, 0xdb, 0xf8, 0xc2, 0xda, 0x81, 0x13, 0xe6, 0xc2, 0x69, 0x2e, 0xb6, 0x4b, - 0x0d, 0x71, 0xd7, 0x78, 0x42, 0x84, 0x57, 0x8a, 0x58, 0x64, 0x9e, 0x4c, 0xc7, 0x60, 0x63, 0xc8, 0x36, 0x95, 0xcf, - 0x94, 0x42, 0xbc, 0x9a, 0xca, 0x0b, 0x53, 0x2b, 0x95, 0x55, 0x1a, 0x61, 0xa6, 0x80, 0x45, 0x95, 0x81, 0xcf, 0x7e, - 0x8d, 0x14, 0xd7, 0xd4, 0xf3, 0x17, 0x2e, 0xdf, 0x4c, 0xb7, 0xd9, 0x7c, 0xfa, 0x32, 0x8f, 0xaf, 0xb6, 0xdb, 0xb0, - 0xfb, 0x05, 0x98, 0x5f, 0x56, 0x52, 0xa3, 0x06, 0x4e, 0x0f, 0x21, 0xfa, 0x39, 0xef, 0xc9, 0x39, 0xb1, 0x9c, 0x5c, - 0xbb, 0x79, 0xb3, 0x9d, 0x14, 0x2d, 0xb0, 0x80, 0x13, 0x17, 0xe9, 0x40, 0x4b, 0x05, 0xa7, 0x2c, 0xe3, 0x9d, 0x4d, - 0x6f, 0x29, 0x15, 0x5e, 0x2d, 0x14, 0x09, 0xa9, 0xed, 0xbd, 0xc4, 0x8c, 0x1a, 0x70, 0x4e, 0xf2, 0x0e, 0x02, 0x4e, - 0x6a, 0xaa, 0xb1, 0x46, 0x71, 0xaa, 0x13, 0x9c, 0x57, 0x6a, 0xe8, 0x12, 0xe5, 0xc4, 0x6d, 0xb7, 0x55, 0xd1, 0x42, - 0x7d, 0x3c, 0xc8, 0x59, 0x22, 0x8f, 0x07, 0x14, 0xba, 0xc8, 0xa3, 0x21, 0x5f, 0x90, 0x52, 0xad, 0x1c, 0xa5, 0x5a, - 0xdd, 0x95, 0x0c, 0x14, 0x72, 0x15, 0xe4, 0x0d, 0x31, 0xee, 0x5a, 0x99, 0xb7, 0xb8, 0x72, 0x42, 0x4a, 0x93, 0xf0, - 0xb9, 0xa5, 0x18, 0x58, 0xc1, 0xde, 0x98, 0xba, 0xc2, 0x25, 0x42, 0xdb, 0xdd, 0x86, 0x98, 0x64, 0xb0, 0x6e, 0xb6, - 0xdb, 0x57, 0x65, 0x38, 0xcf, 0x16, 0x54, 0x8c, 0xb2, 0x14, 0x21, 0xc4, 0xb4, 0x87, 0xae, 0xe9, 0x82, 0x9e, 0x18, - 0x6a, 0xdb, 0xe3, 0x24, 0xe9, 0x62, 0x4d, 0x92, 0x18, 0xc5, 0x17, 0xa2, 0x94, 0x6b, 0x8d, 0x10, 0x3c, 0xdc, 0xff, - 0x48, 0x21, 0x86, 0x9b, 0x5e, 0x77, 0xbf, 0xee, 0xdc, 0x10, 0xff, 0x80, 0x40, 0x02, 0x05, 0x7b, 0x55, 0x8e, 0x2e, - 0xb2, 0x22, 0xc5, 0x9d, 0x2a, 0xa3, 0xe2, 0xca, 0x75, 0xe0, 0xb7, 0xdc, 0xf0, 0xaf, 0x86, 0x28, 0x40, 0x5c, 0xe3, - 0x4a, 0x31, 0x9e, 0xb5, 0xb5, 0x14, 0xc9, 0x28, 0x36, 0x24, 0x2a, 0x9c, 0xa8, 0xe8, 0x2e, 0x4f, 0xa3, 0x7b, 0x68, - 0xd7, 0x20, 0xb8, 0x6a, 0xee, 0x6c, 0xa4, 0xf9, 0x82, 0x10, 0x39, 0x01, 0x02, 0x36, 0xaa, 0x3e, 0xb5, 0x56, 0xd5, - 0xc3, 0xac, 0xf2, 0xb9, 0x3a, 0x88, 0x57, 0x15, 0xf0, 0xb0, 0xce, 0xf6, 0xbe, 0xaa, 0x1c, 0xd6, 0x06, 0xdf, 0x6e, - 0xb7, 0xab, 0x6a, 0x1e, 0x04, 0x0e, 0xa3, 0xf9, 0x9d, 0x94, 0x98, 0xf7, 0xc6, 0x14, 0x56, 0xbc, 0xeb, 0xd2, 0xd6, - 0x4d, 0x6a, 0x8d, 0x05, 0xea, 0x0e, 0xd7, 0x07, 0x3c, 0x4f, 0x81, 0xa3, 0x1d, 0x15, 0x53, 0x61, 0x74, 0xe5, 0xd8, - 0x95, 0x0a, 0x03, 0x43, 0xff, 0x90, 0xb2, 0x0d, 0x98, 0xe3, 0x81, 0xb5, 0x0d, 0xfa, 0x29, 0x49, 0x2d, 0xcc, 0x18, - 0x8d, 0x59, 0xc4, 0xba, 0x8e, 0x8e, 0xb8, 0x8a, 0xde, 0xce, 0xa3, 0xbf, 0x3d, 0x1d, 0xd3, 0x32, 0x2e, 0x52, 0x71, - 0x0d, 0x2a, 0x08, 0x50, 0x86, 0xa0, 0xe1, 0xbf, 0xa2, 0x06, 0xa0, 0x41, 0xb0, 0x03, 0xf0, 0x8f, 0x4e, 0xa7, 0x41, - 0x53, 0x93, 0x8b, 0x49, 0x2a, 0x8b, 0x9c, 0xb5, 0xa1, 0xcc, 0x64, 0x72, 0x48, 0x1e, 0x17, 0x80, 0xe7, 0x88, 0xcd, - 0x92, 0x36, 0x17, 0x72, 0xb3, 0xc9, 0xd7, 0x92, 0x1d, 0xb9, 0xf3, 0x8a, 0xd6, 0x6b, 0x51, 0xd9, 0x49, 0xcc, 0x17, - 0xd3, 0x3b, 0x23, 0x0c, 0x9c, 0xea, 0xd6, 0xdc, 0xee, 0x40, 0xa7, 0x99, 0xfa, 0x74, 0x6e, 0x02, 0xc4, 0x01, 0x86, - 0xeb, 0x6e, 0x7e, 0xbb, 0x20, 0xf4, 0x8e, 0xdd, 0x19, 0xb1, 0xea, 0xad, 0x91, 0x8b, 0xe8, 0xb4, 0xdb, 0xc1, 0x04, - 0x2e, 0xe3, 0xac, 0x34, 0x2f, 0x94, 0xba, 0xa1, 0xec, 0x68, 0x9b, 0x30, 0x9f, 0x77, 0xb4, 0x1b, 0x2e, 0xf8, 0x46, - 0xac, 0x63, 0xdd, 0x90, 0xa6, 0x12, 0x3d, 0x3a, 0x50, 0xdb, 0x21, 0xa0, 0x39, 0x1b, 0xd3, 0x25, 0x40, 0x6d, 0xc2, - 0x7e, 0x59, 0x83, 0x59, 0xca, 0x25, 0xf4, 0xb5, 0xdb, 0x27, 0xf9, 0x52, 0xf6, 0xa4, 0x72, 0x96, 0x28, 0xf8, 0x72, - 0xa4, 0xe0, 0x95, 0x95, 0xf3, 0x58, 0xcf, 0x21, 0xe0, 0xb1, 0xc8, 0x12, 0x9d, 0x93, 0xe2, 0x0a, 0x94, 0xa9, 0x70, - 0x04, 0xea, 0xaa, 0x11, 0x4b, 0x38, 0xc0, 0xed, 0xc5, 0xd3, 0x80, 0x50, 0x90, 0xea, 0xae, 0xcd, 0x8a, 0xbc, 0x63, - 0x27, 0x9b, 0x3b, 0x30, 0x8b, 0xad, 0xd7, 0x55, 0xeb, 0x2b, 0x93, 0x6c, 0x3f, 0x6e, 0x08, 0xb6, 0xdd, 0x91, 0xf2, - 0x85, 0x77, 0xf4, 0x96, 0x6c, 0x6e, 0xfb, 0xfd, 0x10, 0xfa, 0x43, 0xa8, 0xea, 0xd0, 0x5d, 0x67, 0x87, 0xee, 0x5c, - 0xe6, 0xd7, 0xe8, 0xf9, 0xa4, 0x37, 0xc4, 0x07, 0x34, 0xd1, 0xa2, 0xab, 0xf8, 0x1e, 0x36, 0x75, 0x54, 0x53, 0x59, - 0x79, 0x94, 0x50, 0x50, 0x01, 0x67, 0xbc, 0x3a, 0xe3, 0x18, 0xdb, 0x54, 0x3d, 0xbd, 0x53, 0xbc, 0xda, 0x5a, 0xaf, - 0xcd, 0x6a, 0x7d, 0x01, 0x16, 0x01, 0x17, 0x3c, 0xba, 0x56, 0xb4, 0xe4, 0xca, 0x61, 0xea, 0xcf, 0x71, 0x54, 0x82, - 0xcb, 0x38, 0xcb, 0x79, 0x1a, 0xd0, 0x4b, 0xbf, 0xff, 0xa1, 0xb2, 0x95, 0x5a, 0x7a, 0x67, 0xee, 0x4d, 0x48, 0x36, - 0xff, 0x63, 0x03, 0xf5, 0x3a, 0xc4, 0x88, 0xa8, 0x7a, 0x41, 0xbf, 0x65, 0x10, 0x1b, 0x33, 0xa8, 0xd6, 0x49, 0xc2, - 0xab, 0x2a, 0xd0, 0x4a, 0xad, 0x35, 0x5b, 0xeb, 0xf3, 0xec, 0x11, 0x3b, 0x79, 0xd4, 0x63, 0xec, 0x8e, 0xd0, 0x44, - 0xe9, 0x84, 0x74, 0x8d, 0x91, 0xa3, 0x05, 0x52, 0x1d, 0x8a, 0xb2, 0xcb, 0xf0, 0x2d, 0x0a, 0x59, 0xda, 0xfb, 0x5c, - 0x9f, 0xc8, 0xf2, 0x1b, 0x65, 0x74, 0x11, 0xc9, 0x44, 0x90, 0x8d, 0xdf, 0x22, 0x60, 0x2f, 0x34, 0x3b, 0x20, 0x9b, - 0x25, 0x3b, 0xa3, 0xe7, 0xc6, 0x04, 0x06, 0x5e, 0xbf, 0x95, 0x89, 0x7a, 0x94, 0x25, 0xd1, 0x95, 0x46, 0x2e, 0xf7, - 0x21, 0x89, 0xce, 0x43, 0xe2, 0xe6, 0x86, 0xa5, 0x75, 0x13, 0xa2, 0x98, 0x59, 0x6f, 0x78, 0xd9, 0xdd, 0x47, 0xde, - 0xb6, 0xd2, 0x3e, 0xd5, 0x77, 0x26, 0x8d, 0x4c, 0xa1, 0xaf, 0xc3, 0x49, 0xbf, 0x0f, 0x7f, 0x15, 0xfd, 0xc0, 0x5b, - 0x0a, 0xfe, 0x62, 0x8f, 0x48, 0x93, 0xb0, 0x00, 0xe0, 0x08, 0x73, 0x5e, 0xfb, 0x13, 0xf8, 0x88, 0x9d, 0x6c, 0x1e, - 0x85, 0x67, 0xde, 0xcc, 0xdd, 0x87, 0x78, 0xa9, 0x4a, 0x7a, 0xce, 0x3c, 0xe9, 0x81, 0x58, 0x85, 0x7a, 0xbf, 0xde, - 0x31, 0xa3, 0x4f, 0x00, 0x22, 0x75, 0x67, 0x1c, 0x4a, 0xf1, 0x63, 0xdd, 0x65, 0xb2, 0x49, 0x59, 0x9b, 0x89, 0x92, - 0x2a, 0x12, 0x7f, 0x11, 0x40, 0xbf, 0x61, 0x38, 0x1a, 0x80, 0xf7, 0x56, 0x63, 0xaf, 0x87, 0xc6, 0x19, 0x53, 0x4d, - 0xcf, 0x36, 0x6a, 0x79, 0x5b, 0x0a, 0xa1, 0xc7, 0x22, 0xba, 0xb3, 0xc7, 0x62, 0x78, 0x46, 0xdf, 0x42, 0x85, 0xaf, - 0x43, 0x8c, 0xa6, 0x4b, 0x9a, 0x66, 0xba, 0x96, 0x5b, 0xe9, 0x96, 0xd0, 0x1c, 0xa3, 0xf8, 0x38, 0x6d, 0xbb, 0xa7, - 0x5a, 0x68, 0x4f, 0x28, 0x0f, 0xef, 0x68, 0x4d, 0x6f, 0x0d, 0x8b, 0x60, 0x91, 0x96, 0x9d, 0xfc, 0x84, 0x5e, 0x38, - 0x02, 0x93, 0xb2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x33, 0x35, 0x52, 0x0e, 0x47, 0xe1, 0x4b, 0x36, 0x20, - 0x57, 0x50, 0x8b, 0x35, 0x66, 0x27, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x33, 0x29, 0x88, 0x64, 0x44, 0x73, 0x0b, - 0xf1, 0xf4, 0x0f, 0xd0, 0xf4, 0x41, 0x5a, 0x98, 0xd2, 0x35, 0x0a, 0x78, 0x40, 0xdf, 0xd4, 0xef, 0xe7, 0xf8, 0xdc, - 0x38, 0x96, 0x58, 0xd8, 0xe3, 0x25, 0xa1, 0x4b, 0x27, 0x6e, 0x14, 0x48, 0x9b, 0x2d, 0xab, 0x00, 0xac, 0x48, 0x02, - 0x8d, 0x48, 0xd0, 0x52, 0xc7, 0x8a, 0xcb, 0x36, 0x68, 0x40, 0x12, 0x15, 0x14, 0xb2, 0x44, 0x02, 0xf8, 0x61, 0x04, - 0x21, 0x8a, 0x62, 0x10, 0xf7, 0xaa, 0xe5, 0x15, 0x37, 0x54, 0x83, 0x13, 0x45, 0x30, 0xc1, 0x2a, 0x9d, 0x02, 0xb1, - 0x2d, 0xd6, 0x2b, 0xf0, 0xbc, 0xb4, 0x17, 0x49, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x95, 0x4e, 0xdb, 0xe5, 0xed, 0x88, - 0x96, 0x6a, 0x36, 0x77, 0x5e, 0x2c, 0x0c, 0xf7, 0x58, 0xbb, 0xdb, 0x81, 0xf6, 0xc2, 0x7a, 0x47, 0x44, 0x0d, 0x56, - 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xaa, 0x5e, 0x59, 0x26, 0xa0, 0xa6, 0xab, 0xb8, 0x5e, 0x46, 0xd9, 0x08, 0xfe, - 0x6c, 0xb7, 0xc1, 0x61, 0x00, 0x16, 0x90, 0xbf, 0xbc, 0xff, 0x29, 0xc2, 0xf0, 0x4c, 0xbf, 0xbc, 0xff, 0x69, 0xbb, - 0x7d, 0x3a, 0x1e, 0x6b, 0xae, 0xc0, 0xaa, 0x75, 0x80, 0x3f, 0xd0, 0x6c, 0x83, 0x59, 0xb2, 0xdb, 0xed, 0x53, 0xe0, - 0x20, 0x24, 0xdb, 0xa0, 0x77, 0xb1, 0x74, 0xe4, 0x92, 0xac, 0x86, 0xda, 0x91, 0x80, 0x55, 0xb7, 0xc3, 0x52, 0xec, - 0x52, 0x1f, 0x19, 0x82, 0x51, 0x2d, 0xfa, 0x17, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, 0xb2, 0xae, 0x57, 0x55, - 0x74, 0x78, 0x18, 0xaf, 0xb2, 0x51, 0x95, 0xc1, 0x36, 0xaf, 0x6e, 0xae, 0x00, 0x50, 0x21, 0xa0, 0xde, 0xbb, 0x75, - 0x91, 0xe9, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0x8d, 0x6e, 0x72, 0x4a, 0xcc, 0x03, 0xd8, - 0x1c, 0x6e, 0xb7, 0x1e, 0xbf, 0x70, 0x32, 0x7a, 0x3a, 0x5b, 0x66, 0xca, 0xa0, 0x93, 0xeb, 0xfd, 0x4f, 0x22, 0x27, - 0x0d, 0x15, 0x9f, 0x64, 0xfa, 0x22, 0x03, 0x3e, 0x8f, 0xbd, 0xa9, 0x42, 0x97, 0xe5, 0xf2, 0x5a, 0x03, 0x6c, 0x6c, - 0x76, 0x79, 0x3f, 0x4a, 0x39, 0x44, 0xa4, 0x08, 0x8c, 0xba, 0x66, 0x99, 0x11, 0xd7, 0xa6, 0xe2, 0xbe, 0xa5, 0x0a, - 0x7b, 0x53, 0x39, 0xce, 0x2a, 0x5c, 0x3b, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x02, 0x85, 0xa8, 0x1c, 0x8d, 0xe9, 0xac, - 0x40, 0x2a, 0x73, 0x98, 0x50, 0xcc, 0x61, 0xdf, 0xfd, 0x92, 0x5a, 0x73, 0x19, 0x57, 0xb8, 0xf7, 0xc2, 0x95, 0x99, - 0xdc, 0x09, 0x00, 0x45, 0x92, 0xb5, 0xff, 0xfc, 0x09, 0xa9, 0xf1, 0x3f, 0x53, 0xa5, 0x01, 0xe8, 0xfd, 0x0c, 0x35, - 0x59, 0x82, 0x80, 0xad, 0x98, 0xba, 0x68, 0xfa, 0x46, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x15, 0xdb, 0xc8, 0xf8, 0x39, - 0x51, 0x4d, 0x4b, 0x9e, 0xae, 0x8b, 0x34, 0x2e, 0x92, 0xfb, 0x88, 0x37, 0x53, 0x2c, 0x89, 0x55, 0x9a, 0x02, 0xfd, - 0xec, 0x77, 0xe1, 0xa7, 0xd2, 0x33, 0x01, 0xa7, 0x85, 0xbb, 0xad, 0x9c, 0xcd, 0x64, 0x18, 0x67, 0x64, 0xca, 0x25, - 0x62, 0xb7, 0xd1, 0xf7, 0xe8, 0x13, 0xfc, 0xc9, 0xd1, 0x13, 0x42, 0xef, 0xc4, 0xb4, 0x40, 0x50, 0xba, 0x22, 0x35, - 0xae, 0x9a, 0xd8, 0xaf, 0x29, 0x44, 0x71, 0xa8, 0x18, 0x84, 0xee, 0xd4, 0xed, 0x93, 0x7c, 0x9f, 0x29, 0xfb, 0x8d, - 0x2e, 0x5b, 0x90, 0x4d, 0x05, 0x1d, 0x13, 0xd6, 0xdb, 0xd3, 0xd9, 0xb3, 0x33, 0xe7, 0x37, 0x68, 0xc2, 0x41, 0x75, - 0x03, 0xed, 0x2a, 0xc9, 0x34, 0x46, 0xb1, 0x59, 0x8c, 0xb5, 0x1b, 0x13, 0x11, 0x04, 0x9d, 0x2e, 0x66, 0x61, 0xbb, - 0x9d, 0x10, 0x5f, 0x02, 0x09, 0x14, 0xb8, 0x72, 0x51, 0x4e, 0x42, 0x22, 0x2f, 0x64, 0x6a, 0xb2, 0x6e, 0x04, 0x0b, - 0xd4, 0x1a, 0x3b, 0x0a, 0xe8, 0x29, 0x37, 0x4f, 0x01, 0x7d, 0x5f, 0xb2, 0x53, 0x3e, 0x08, 0x86, 0x18, 0x5f, 0x35, - 0xa0, 0xb7, 0x42, 0x3e, 0x82, 0x87, 0x30, 0xb0, 0x5c, 0xf4, 0x65, 0xc9, 0x10, 0x56, 0xe8, 0xcf, 0x94, 0x4d, 0xbe, - 0xfe, 0xc6, 0xce, 0xef, 0xb5, 0x12, 0xb3, 0x83, 0x50, 0xdc, 0x5c, 0x4f, 0x80, 0xf8, 0xd5, 0xfc, 0x1a, 0xac, 0xab, - 0x95, 0xc4, 0xdb, 0x91, 0x3c, 0x54, 0xae, 0x1c, 0xdd, 0x7c, 0x52, 0xe9, 0x4f, 0x20, 0x48, 0x8d, 0x95, 0x94, 0xdb, - 0xef, 0x3e, 0x0a, 0x5b, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xed, 0xad, 0xe4, 0xc2, 0x17, 0xfe, 0x63, 0x9d, 0xef, 0x31, - 0x76, 0x88, 0x38, 0xc3, 0xe9, 0xf7, 0xc1, 0xb0, 0xbd, 0x5b, 0x99, 0x36, 0x24, 0xba, 0x96, 0x1f, 0x01, 0xfd, 0x1f, - 0xab, 0xf1, 0x3b, 0x45, 0x49, 0x5f, 0x12, 0xe7, 0x08, 0x57, 0xc4, 0x2b, 0x34, 0xd5, 0xeb, 0x8d, 0x1b, 0xfa, 0xa6, - 0xd4, 0x2f, 0x94, 0x82, 0xc3, 0xbc, 0xd5, 0x0a, 0x0f, 0x3c, 0xf3, 0xfe, 0xa8, 0x3c, 0x41, 0xf7, 0x6f, 0xb8, 0x37, - 0xfe, 0xa8, 0x58, 0x86, 0x37, 0xe5, 0x2c, 0xd3, 0x77, 0xb8, 0xdb, 0xac, 0x48, 0xc5, 0x2d, 0x63, 0xc1, 0xba, 0x90, - 0xe6, 0xab, 0x69, 0x30, 0xdb, 0x34, 0x91, 0x4c, 0xb6, 0xdf, 0xff, 0xe5, 0x9d, 0xb0, 0xd9, 0x20, 0x38, 0xab, 0x45, - 0x19, 0x5f, 0xf1, 0x60, 0xaa, 0x54, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0x63, 0xb5, 0x77, 0xf0, 0x64, 0xa8, - 0x99, 0x0e, 0x71, 0x6d, 0x74, 0x16, 0xf0, 0x56, 0x8f, 0xe6, 0x69, 0x0d, 0xbb, 0xcc, 0x55, 0x52, 0xfc, 0xd1, 0x92, - 0x64, 0x63, 0xfd, 0x9e, 0x0c, 0xdb, 0xc8, 0x67, 0xae, 0x01, 0x63, 0xe6, 0x56, 0xc8, 0x20, 0x77, 0x3d, 0x60, 0x84, - 0x90, 0x08, 0x54, 0xd6, 0x62, 0xe2, 0xbc, 0xd2, 0xe1, 0x1f, 0x6d, 0x60, 0x9c, 0x18, 0x03, 0xe3, 0x7c, 0x14, 0x21, - 0xa7, 0xa7, 0x7c, 0x90, 0x78, 0xb3, 0xf5, 0x97, 0x2c, 0x91, 0xde, 0x08, 0x42, 0x2f, 0xe0, 0xf7, 0xb8, 0xc5, 0x03, - 0x79, 0xc1, 0x29, 0xed, 0xcd, 0xe9, 0xf0, 0x65, 0x49, 0x86, 0x7f, 0x82, 0x77, 0x57, 0x6c, 0x2e, 0xcb, 0x09, 0x2c, - 0xee, 0xd8, 0x29, 0x9e, 0xe6, 0xb2, 0xc5, 0x09, 0x71, 0x88, 0x45, 0xee, 0x12, 0x0b, 0x18, 0x51, 0xcd, 0x68, 0xfc, - 0x78, 0xf6, 0xf6, 0x8d, 0xc2, 0x6c, 0xca, 0xdd, 0x0f, 0x60, 0x44, 0x95, 0xb4, 0xdd, 0x0c, 0xf8, 0x72, 0x84, 0x06, - 0xdb, 0xa9, 0x1d, 0xec, 0x7e, 0x5f, 0xa7, 0x9d, 0x14, 0x4e, 0x36, 0x2b, 0x06, 0xdd, 0x51, 0xda, 0x2c, 0xa5, 0x41, - 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0xab, 0xc5, 0xaa, 0xce, 0x87, 0xe1, 0x92, 0xc6, 0x46, 0x56, 0x6e, 0x76, 0x13, 0x8e, - 0x6c, 0x02, 0x5c, 0x9f, 0x84, 0xb2, 0xf2, 0xe7, 0xa0, 0x05, 0x9d, 0x09, 0x1c, 0xd1, 0x76, 0x1b, 0x42, 0x04, 0x8e, - 0x72, 0x38, 0x99, 0x85, 0xe5, 0x70, 0x28, 0x07, 0xbe, 0x24, 0x24, 0x7a, 0x53, 0xce, 0xb3, 0x85, 0x44, 0xec, 0x71, - 0x77, 0xd2, 0xaf, 0xa5, 0xe4, 0x94, 0x7b, 0x7f, 0x54, 0x64, 0xf3, 0x5b, 0x8a, 0x31, 0x07, 0xad, 0x66, 0x33, 0x03, - 0x09, 0xeb, 0x69, 0x4d, 0xe4, 0x3a, 0x32, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, 0x75, 0x8b, 0x23, 0xd6, 0xd3, - 0x7a, 0x0f, 0x2a, 0x40, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x5e, 0x56, 0xa1, 0xa0, 0x9c, 0xf8, 0xcc, 0x8c, 0x11, - 0x0d, 0x96, 0x20, 0x24, 0x8d, 0xab, 0xfa, 0xb5, 0x48, 0xb3, 0xcb, 0x0c, 0x10, 0x13, 0xac, 0xff, 0x9c, 0xf0, 0xde, - 0x3c, 0x93, 0xf3, 0xd2, 0x95, 0x38, 0x33, 0x30, 0x1f, 0x5d, 0x6f, 0x69, 0x49, 0xa2, 0x12, 0x68, 0x94, 0xab, 0xe5, - 0xf9, 0xfb, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x69, 0x3b, 0xc4, 0x4f, 0x58, 0x4d, 0x9c, 0xd3, 0xba, 0x96, 0x22, - 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xc8, 0xe1, 0x03, 0x83, 0x0a, 0x2b, 0xf9, 0x29, 0x70, 0xf8, 0x8c, - 0x81, 0xa4, 0xab, 0x45, 0x70, 0x35, 0x3a, 0xc2, 0x8a, 0x32, 0xb5, 0xc4, 0x14, 0x12, 0xdd, 0x7a, 0xa1, 0x35, 0x86, - 0x51, 0x76, 0x15, 0xf9, 0xdf, 0xab, 0xee, 0xfd, 0x51, 0x6d, 0xb7, 0x30, 0xc9, 0x8e, 0xc7, 0x15, 0x6c, 0x6a, 0xd4, - 0x0a, 0xe1, 0xec, 0x9c, 0xd6, 0xa8, 0x1d, 0xeb, 0x85, 0x05, 0x90, 0x07, 0xb0, 0x15, 0xf1, 0x28, 0x83, 0x60, 0x6f, - 0xca, 0x79, 0xb5, 0xb0, 0xa2, 0x1c, 0x21, 0xf1, 0xbe, 0xc4, 0x28, 0xe5, 0x70, 0x15, 0x0b, 0x4b, 0x86, 0xfc, 0xea, - 0xe8, 0xb2, 0x14, 0xd7, 0x20, 0x29, 0xd1, 0x0c, 0x95, 0xe1, 0x75, 0x71, 0xd5, 0x16, 0x84, 0xf6, 0x2e, 0x2a, 0x50, - 0x47, 0x82, 0xe0, 0xc5, 0xab, 0x21, 0x66, 0x1b, 0xb9, 0xbb, 0xa2, 0xbd, 0xe4, 0x80, 0x5a, 0xdd, 0xb5, 0x5d, 0x6f, - 0xd2, 0x36, 0xdb, 0x88, 0x0b, 0xff, 0x82, 0xd2, 0x4f, 0xf9, 0xa0, 0x74, 0xa9, 0x04, 0x6e, 0x7c, 0xb9, 0xc9, 0xb2, - 0xcb, 0x7b, 0x5c, 0xfa, 0xb5, 0x37, 0x7e, 0xfd, 0x7e, 0x4f, 0x2e, 0x04, 0x2f, 0x15, 0x98, 0x6f, 0x97, 0x99, 0xaa, - 0xb5, 0xa6, 0xd4, 0x5c, 0x82, 0x6b, 0x6b, 0x3f, 0x82, 0x8a, 0xb8, 0xae, 0xc8, 0x64, 0x72, 0x80, 0x0e, 0x9c, 0xac, - 0x70, 0x2b, 0x0b, 0xf0, 0xd8, 0x09, 0xc8, 0x76, 0xcb, 0xc3, 0x40, 0x1d, 0x3a, 0x81, 0xbb, 0x25, 0xcf, 0x90, 0x59, - 0x33, 0x8f, 0x3f, 0x2b, 0xc1, 0x3f, 0xb6, 0xe0, 0x27, 0x14, 0x77, 0x1a, 0x99, 0x7f, 0x2b, 0xad, 0x5b, 0xdc, 0xbf, - 0x93, 0x69, 0x42, 0x51, 0x99, 0xd0, 0xb8, 0x95, 0xfe, 0x4b, 0x07, 0x4b, 0x92, 0xd9, 0x3f, 0x08, 0xf8, 0x60, 0xe6, - 0x3d, 0x31, 0xef, 0x49, 0x73, 0xba, 0xb5, 0x82, 0x21, 0x40, 0xa1, 0x9f, 0x93, 0xb9, 0xa6, 0xea, 0xf9, 0xe7, 0x35, - 0x5f, 0x73, 0xbf, 0xc5, 0x26, 0xe9, 0x81, 0x06, 0x3b, 0x79, 0x14, 0xa5, 0xb0, 0x12, 0x75, 0xae, 0x25, 0xea, 0x55, - 0xc3, 0x32, 0x54, 0x27, 0x38, 0x35, 0x4f, 0xd5, 0xb0, 0xfb, 0x89, 0x68, 0xad, 0x24, 0x2d, 0x31, 0x60, 0xad, 0x23, - 0x0f, 0xc9, 0xed, 0x5a, 0xc7, 0x9d, 0x86, 0xba, 0x34, 0x89, 0x12, 0x60, 0x84, 0x0b, 0x70, 0x04, 0xfd, 0x54, 0x86, - 0x1c, 0xae, 0xa9, 0x52, 0xbf, 0xa0, 0x28, 0x79, 0xe2, 0x28, 0x6a, 0x95, 0x22, 0xdd, 0x7c, 0x94, 0x63, 0x37, 0x5c, - 0xe3, 0x84, 0x9c, 0x68, 0xa1, 0xbf, 0x3d, 0x96, 0x72, 0x86, 0x16, 0x0f, 0xf2, 0x04, 0xeb, 0xe5, 0x2d, 0x05, 0x8a, - 0x3e, 0xba, 0x8c, 0xba, 0xe6, 0x15, 0xda, 0xbe, 0x2c, 0xfb, 0xfd, 0xdc, 0xd4, 0x93, 0xb2, 0x93, 0xcd, 0x52, 0xef, - 0x43, 0x54, 0x4c, 0xe1, 0xae, 0x4f, 0x14, 0x7f, 0x15, 0xaa, 0xab, 0xb6, 0xc8, 0xf9, 0x88, 0x23, 0x2e, 0x46, 0x4e, - 0x9a, 0x9f, 0xe5, 0xd4, 0x4b, 0x71, 0xbf, 0xac, 0xe4, 0xd7, 0x4a, 0x5b, 0x31, 0x5a, 0xa0, 0xfe, 0x54, 0xaa, 0xbc, - 0x5f, 0x94, 0x00, 0xf7, 0x54, 0xb1, 0x37, 0x60, 0x5f, 0xa1, 0x10, 0x7e, 0x5b, 0x02, 0xfe, 0x8d, 0xe4, 0x06, 0x8c, - 0x02, 0x03, 0x8c, 0x26, 0xdb, 0x73, 0x9a, 0xc0, 0x01, 0x57, 0x29, 0x15, 0x05, 0xad, 0xf4, 0xd0, 0x50, 0x53, 0x18, - 0x3d, 0x43, 0x19, 0xb7, 0xcc, 0xec, 0xdc, 0x18, 0x3b, 0x2d, 0xf0, 0x3c, 0x7f, 0x3e, 0x27, 0xf4, 0xb0, 0x56, 0x07, - 0xa9, 0xd1, 0x49, 0x74, 0x7f, 0xec, 0xc2, 0xc9, 0xf5, 0xc2, 0x59, 0x36, 0x2c, 0x81, 0xee, 0xc0, 0x05, 0x31, 0xee, - 0xf7, 0x73, 0x38, 0x32, 0xf5, 0xc8, 0x97, 0x2c, 0xa7, 0x31, 0x5b, 0x52, 0xe5, 0x69, 0x77, 0x55, 0x87, 0x39, 0x5d, - 0x1a, 0x19, 0x6f, 0xca, 0x8a, 0x79, 0x0e, 0x1a, 0x49, 0xf8, 0xd3, 0x6d, 0xed, 0x92, 0xce, 0x97, 0x90, 0x01, 0xfe, - 0x80, 0x44, 0x14, 0xb1, 0xaf, 0xff, 0xad, 0xc6, 0x49, 0x3d, 0x51, 0xda, 0xb0, 0x84, 0xae, 0x99, 0xaa, 0x9f, 0x5e, - 0xb2, 0xb5, 0xb7, 0x14, 0xb6, 0xdb, 0xd0, 0x4f, 0x60, 0x8a, 0x73, 0x25, 0xd3, 0x4b, 0xd4, 0x49, 0x01, 0x15, 0x0b, - 0x2f, 0x71, 0xf9, 0xa5, 0x84, 0x42, 0x73, 0xe7, 0xcb, 0x85, 0x56, 0x62, 0x42, 0xab, 0xc4, 0xe7, 0x0f, 0x95, 0xfe, - 0x5a, 0x7b, 0xc4, 0xfd, 0x2b, 0x0d, 0x13, 0x5d, 0x24, 0x2a, 0x44, 0x67, 0xbf, 0x82, 0x2c, 0xa7, 0x02, 0x1c, 0xcb, - 0x33, 0xd1, 0xd0, 0x1f, 0x53, 0x88, 0x83, 0x0e, 0x0d, 0x7a, 0x57, 0x8a, 0xeb, 0xac, 0xe2, 0x21, 0xde, 0x13, 0x1c, - 0xcd, 0xe8, 0x7e, 0x83, 0x0f, 0x65, 0xed, 0xd1, 0xab, 0xc8, 0xc6, 0x51, 0xee, 0x37, 0xbf, 0x56, 0xe1, 0x1c, 0xa2, - 0x55, 0x2e, 0xa8, 0x52, 0x57, 0x5b, 0x00, 0x2a, 0xc7, 0xf6, 0xea, 0x11, 0x9c, 0x6e, 0xea, 0xfa, 0x56, 0x87, 0xd6, - 0x1c, 0x40, 0x98, 0x43, 0xb2, 0x69, 0xb8, 0xda, 0x01, 0xf6, 0x48, 0xac, 0xd7, 0x40, 0x63, 0xed, 0xd6, 0xec, 0xb4, - 0x47, 0x71, 0x98, 0xc8, 0x4c, 0x5b, 0xa4, 0x68, 0x73, 0xb7, 0x4e, 0x8b, 0xa2, 0x0d, 0x9a, 0x21, 0xec, 0xde, 0x75, - 0xf8, 0xba, 0x15, 0x61, 0x7d, 0xbf, 0xed, 0x0b, 0x8c, 0x86, 0x36, 0xd7, 0xee, 0x39, 0x86, 0x6e, 0xd8, 0x60, 0x13, - 0x39, 0x0f, 0x91, 0x0f, 0x33, 0x79, 0x20, 0x8a, 0xc6, 0x18, 0xb0, 0x3d, 0xe2, 0x6a, 0xd3, 0x4a, 0x7e, 0x5e, 0xc6, - 0x9c, 0xed, 0x19, 0xe3, 0x94, 0xd6, 0xd7, 0xb8, 0xe6, 0xb8, 0x2c, 0xa4, 0x6a, 0x8c, 0x67, 0x3c, 0x0c, 0x3b, 0x5f, - 0xe0, 0xce, 0xac, 0x31, 0x78, 0x11, 0x96, 0x4a, 0x76, 0x2a, 0x57, 0x9f, 0xc3, 0x16, 0x47, 0xb3, 0x31, 0xa7, 0xbf, - 0xff, 0x72, 0xc5, 0x17, 0xe8, 0xa6, 0x66, 0xfd, 0x08, 0x82, 0xac, 0x40, 0x87, 0x2c, 0xa9, 0x7a, 0xfc, 0xae, 0x04, - 0x6a, 0x0f, 0xf3, 0xf0, 0x5d, 0xc9, 0x8a, 0xf8, 0x26, 0xbb, 0x8a, 0x6b, 0x51, 0x8e, 0x6e, 0x78, 0x91, 0x8a, 0xd2, - 0x48, 0x8d, 0x83, 0xd3, 0xd5, 0x2a, 0xe7, 0x01, 0x98, 0xca, 0x1b, 0x46, 0xd9, 0x54, 0x96, 0xa9, 0xc1, 0x55, 0xf2, - 0xf4, 0x5a, 0x89, 0xce, 0xab, 0x9b, 0xab, 0x20, 0xc2, 0x5f, 0x17, 0xfa, 0xc7, 0x75, 0x5c, 0x7d, 0x0c, 0x22, 0x63, - 0x53, 0xa7, 0x7f, 0xa0, 0x54, 0x1e, 0xfc, 0xa7, 0x40, 0xa6, 0xfb, 0x5d, 0x09, 0x96, 0xd9, 0xa6, 0xe2, 0xe3, 0x18, - 0x6b, 0x1d, 0x4e, 0xc8, 0x4c, 0x96, 0xe8, 0xbc, 0x4b, 0xd6, 0x25, 0x58, 0xfb, 0x49, 0x2c, 0x63, 0x99, 0x6b, 0x86, - 0x95, 0xc9, 0x8a, 0xf4, 0xac, 0xac, 0xd9, 0x61, 0x68, 0x9c, 0x68, 0xe6, 0xe8, 0x2d, 0xa0, 0x1e, 0xc8, 0xe1, 0x15, - 0x2d, 0xd6, 0xcc, 0xf1, 0xb1, 0xf1, 0x5e, 0x3f, 0x3a, 0xbc, 0x72, 0x04, 0x4a, 0xe6, 0x4e, 0x8e, 0xc2, 0x44, 0xf0, - 0xac, 0xd5, 0xe3, 0x8b, 0x3c, 0x2b, 0x60, 0xe5, 0x4c, 0xc6, 0x63, 0xea, 0x2c, 0xad, 0xd6, 0xcd, 0xd1, 0x22, 0xb9, - 0x66, 0x8f, 0xeb, 0xc7, 0x9c, 0x1c, 0xf2, 0x96, 0xa9, 0x6d, 0xdb, 0x3a, 0xce, 0xd1, 0xe4, 0x4b, 0xd3, 0xfd, 0x6a, - 0x6d, 0x22, 0xa2, 0x4b, 0xe7, 0x3e, 0xeb, 0x15, 0xdc, 0xfa, 0xa6, 0xd0, 0xf4, 0x5a, 0x00, 0x10, 0x9d, 0x32, 0xe0, - 0x2f, 0x59, 0xb1, 0x1e, 0xd5, 0xbc, 0xaa, 0x41, 0xc2, 0x82, 0x22, 0xbc, 0x29, 0xf6, 0xa6, 0xb4, 0x37, 0x4e, 0xc7, - 0x61, 0x07, 0x2e, 0xa6, 0xe8, 0x8e, 0x03, 0x76, 0xfd, 0x5a, 0x2b, 0x1a, 0xa9, 0x5f, 0xb6, 0x2f, 0xb1, 0xea, 0x8b, - 0x52, 0xe6, 0x99, 0x9c, 0x12, 0x8b, 0xdd, 0x56, 0x2e, 0xac, 0xa8, 0xdf, 0x30, 0xe1, 0xd2, 0x95, 0x20, 0x20, 0xd3, - 0x92, 0xf5, 0x4a, 0xbd, 0x8b, 0xc4, 0x1a, 0x08, 0x19, 0x18, 0xbe, 0x06, 0xeb, 0xa2, 0xe2, 0xda, 0x0a, 0xd6, 0xb9, - 0xe7, 0xab, 0x84, 0x42, 0x14, 0x3c, 0xb0, 0x13, 0xf4, 0x43, 0xeb, 0xe6, 0x6d, 0x29, 0x51, 0x06, 0xf1, 0xb8, 0x95, - 0x53, 0x0e, 0x12, 0x08, 0xc0, 0x3d, 0x95, 0x21, 0x38, 0x24, 0xc8, 0x3a, 0xb8, 0x9a, 0x71, 0x04, 0x57, 0x97, 0xce, - 0x5c, 0x5c, 0x03, 0xac, 0x4b, 0x7f, 0x2e, 0x13, 0x5c, 0x58, 0x8d, 0xa8, 0x34, 0x67, 0x9c, 0x62, 0x10, 0x23, 0x43, - 0xd0, 0x57, 0x86, 0xd2, 0x5e, 0x81, 0xa6, 0xf1, 0x9a, 0xad, 0xa4, 0x0f, 0x00, 0xbd, 0x60, 0x2b, 0x69, 0xec, 0x8f, - 0x5f, 0x9f, 0xb3, 0x95, 0x92, 0x06, 0x4f, 0xaf, 0x67, 0x17, 0xb3, 0xf3, 0x01, 0x3b, 0x8a, 0x42, 0x65, 0xc0, 0x10, - 0x58, 0x24, 0xfe, 0x60, 0x10, 0x16, 0xb2, 0x11, 0x83, 0x42, 0x46, 0xc1, 0x72, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, - 0xc3, 0x02, 0x43, 0x5e, 0x79, 0x2f, 0x48, 0x40, 0xa8, 0x2e, 0x0d, 0x5d, 0x1e, 0xc3, 0xe1, 0xe4, 0x60, 0x02, 0xa9, - 0x98, 0x99, 0xc9, 0xc2, 0xd8, 0x98, 0x44, 0x10, 0xef, 0xb4, 0xb3, 0x5e, 0x28, 0xb7, 0xbb, 0xc6, 0x42, 0x8d, 0xc3, - 0xe0, 0xb3, 0x2a, 0x9e, 0x1c, 0x0c, 0xbb, 0x2a, 0xc6, 0x51, 0xb8, 0xd1, 0xca, 0xb7, 0xf3, 0x63, 0x00, 0xaf, 0x3d, - 0x1f, 0xba, 0x72, 0x89, 0xf3, 0xc3, 0x27, 0xe4, 0xf1, 0x13, 0x42, 0xcf, 0xd9, 0xf9, 0x17, 0x4f, 0xe8, 0xb9, 0x24, - 0x27, 0x07, 0x93, 0xe8, 0x86, 0xe9, 0x06, 0x1c, 0x1e, 0xc9, 0x26, 0xd0, 0xab, 0xd1, 0xba, 0x90, 0x0b, 0x4c, 0x39, - 0x34, 0x85, 0xdf, 0x8e, 0x0f, 0x82, 0xc1, 0x4d, 0xbb, 0xe9, 0x37, 0xed, 0xb6, 0x3a, 0x5e, 0x5d, 0x07, 0x47, 0xd1, - 0x6e, 0x31, 0x93, 0x6f, 0xc6, 0x07, 0x76, 0x0e, 0xb0, 0xbe, 0x87, 0xc7, 0x44, 0x37, 0x69, 0x67, 0x54, 0xdc, 0x9a, - 0xbe, 0xc2, 0x3e, 0xf8, 0x45, 0x76, 0xf4, 0x61, 0xf8, 0x6f, 0x75, 0xa2, 0x39, 0xff, 0xe2, 0x08, 0xc8, 0x11, 0xc8, - 0x40, 0xb1, 0x44, 0x30, 0xc3, 0x81, 0xa6, 0x80, 0x82, 0x4c, 0x8d, 0x3b, 0x55, 0xc3, 0x2f, 0x47, 0x4d, 0xce, 0xc8, - 0x0d, 0x4c, 0x0d, 0xb6, 0x05, 0x3f, 0x90, 0xdd, 0x50, 0xdf, 0x28, 0x74, 0x23, 0xe5, 0x64, 0xa6, 0x5f, 0x52, 0xfd, - 0x83, 0xdd, 0x40, 0x00, 0x63, 0x0b, 0x2f, 0x28, 0xd8, 0x97, 0xc7, 0x57, 0x07, 0xb8, 0x8a, 0x00, 0x25, 0x8b, 0x05, - 0x5f, 0x0e, 0xae, 0xd4, 0xe6, 0x3e, 0x08, 0xc8, 0xe0, 0xcb, 0xe0, 0xe4, 0xcb, 0x81, 0x18, 0x04, 0xc7, 0x87, 0x57, - 0x27, 0x81, 0x35, 0xee, 0x87, 0x10, 0x8f, 0xb2, 0xa2, 0x98, 0x69, 0x34, 0x1f, 0xf4, 0x82, 0x92, 0x89, 0xb9, 0xa9, - 0x57, 0x1a, 0x9f, 0xd1, 0x74, 0x6a, 0x90, 0xbf, 0xc3, 0x94, 0xc5, 0xfa, 0x77, 0x30, 0xe1, 0xd7, 0x41, 0x64, 0x83, - 0xa0, 0xce, 0xf2, 0x28, 0xa6, 0x4b, 0x76, 0x5f, 0x85, 0x29, 0x4d, 0x0e, 0x73, 0x42, 0xa2, 0x70, 0x29, 0xc1, 0xf3, - 0xe4, 0xeb, 0x04, 0xe2, 0xb8, 0xda, 0xcf, 0x01, 0xd7, 0x8d, 0xe6, 0x87, 0x09, 0x69, 0x15, 0x61, 0x23, 0xb2, 0x6c, - 0x1a, 0x7a, 0xc9, 0xc2, 0x15, 0xbd, 0x02, 0x66, 0x4a, 0xac, 0xc3, 0x2b, 0xe0, 0xf2, 0xd6, 0xf3, 0xd5, 0x82, 0x5d, - 0x79, 0xd2, 0x37, 0xcd, 0x17, 0x5f, 0x1a, 0x9f, 0x3c, 0xe0, 0x21, 0xad, 0x1f, 0x5e, 0x0a, 0x36, 0x00, 0x37, 0x19, - 0xbf, 0xfd, 0x4e, 0xdc, 0xa9, 0x79, 0x69, 0x4f, 0x31, 0xce, 0x4c, 0x3b, 0x31, 0x69, 0x27, 0xe4, 0xee, 0x7d, 0x7b, - 0x13, 0xeb, 0x93, 0xbd, 0x8a, 0xd6, 0xd2, 0x65, 0xd5, 0x30, 0x24, 0xe5, 0x9a, 0x21, 0x7f, 0x8f, 0x92, 0x53, 0x23, - 0xf0, 0x64, 0x97, 0xbc, 0x4e, 0x96, 0xee, 0x41, 0x65, 0xac, 0x06, 0xcc, 0x31, 0x62, 0x58, 0x28, 0x1c, 0xfb, 0xd7, - 0x19, 0x2b, 0xd7, 0xae, 0x40, 0x23, 0x46, 0xee, 0xed, 0x75, 0xc6, 0x9c, 0x98, 0xab, 0xc9, 0xda, 0x09, 0x55, 0xe7, - 0xa4, 0xe7, 0x2d, 0xde, 0xcb, 0x2a, 0x35, 0xb4, 0x44, 0xf4, 0x60, 0x2c, 0xcd, 0x28, 0x65, 0xa2, 0xd2, 0xa0, 0x91, - 0x8a, 0x8d, 0x6d, 0xf0, 0x4b, 0x70, 0x42, 0xe5, 0x8e, 0x3a, 0xdb, 0xb5, 0x53, 0x2a, 0x1c, 0x60, 0x59, 0xaa, 0x55, - 0xe5, 0x76, 0x99, 0x09, 0x56, 0x0f, 0x82, 0xd1, 0x1f, 0x95, 0x28, 0x66, 0x78, 0x67, 0x64, 0xc1, 0x14, 0xac, 0x04, - 0x65, 0x2d, 0xc3, 0x62, 0xc8, 0x51, 0x8b, 0xa7, 0x7d, 0x52, 0x85, 0xfa, 0xd1, 0x11, 0x24, 0x77, 0xb9, 0x6e, 0x05, - 0xc9, 0x7d, 0x32, 0x7e, 0xa2, 0x06, 0x3a, 0x5d, 0x2b, 0xc7, 0x43, 0x97, 0xdf, 0x46, 0x7c, 0x6d, 0xd5, 0x7b, 0xaa, - 0xb4, 0x0a, 0x55, 0xa0, 0xc4, 0x8a, 0xd2, 0x95, 0x5a, 0xd0, 0xfd, 0x2e, 0x02, 0x60, 0x11, 0x1b, 0xb3, 0xf1, 0xae, - 0x6d, 0x56, 0x08, 0x1a, 0x5d, 0x76, 0xb2, 0x89, 0x07, 0x2c, 0x51, 0xad, 0x1d, 0x4c, 0x68, 0x7c, 0xc2, 0x8a, 0x7e, - 0x3f, 0x3f, 0x01, 0x7a, 0xaa, 0x8c, 0x98, 0x4a, 0x38, 0xf2, 0x3f, 0xb7, 0x22, 0x5d, 0x14, 0xd8, 0xac, 0xc9, 0xbb, - 0x35, 0x96, 0x91, 0xa8, 0xcb, 0x94, 0x2a, 0xaf, 0x72, 0x0c, 0x98, 0xd6, 0xeb, 0x96, 0xe3, 0xca, 0xae, 0xe2, 0xc8, - 0x51, 0x61, 0x19, 0x71, 0x5e, 0x8d, 0xe3, 0xad, 0xc6, 0x37, 0x38, 0xd4, 0x6c, 0xda, 0xa5, 0x3b, 0x84, 0xb0, 0x10, - 0x5e, 0x67, 0x70, 0x1b, 0x51, 0x76, 0x12, 0xa8, 0xbc, 0xd1, 0xd7, 0x09, 0x69, 0x73, 0xbb, 0x5e, 0x3b, 0x06, 0xe9, - 0x44, 0x1f, 0x28, 0xf5, 0x08, 0x5a, 0xa3, 0x58, 0x50, 0x39, 0xe2, 0x91, 0xe5, 0xe1, 0xad, 0x41, 0xac, 0x92, 0x2f, - 0x29, 0x2a, 0x45, 0x03, 0xf4, 0xbf, 0xe4, 0xb7, 0x07, 0xbf, 0xbc, 0xff, 0xe9, 0x8c, 0xc7, 0x65, 0xb2, 0x7c, 0x17, - 0x97, 0xf1, 0x75, 0x15, 0x6e, 0xe4, 0x18, 0xc5, 0x0d, 0x99, 0x56, 0x03, 0x26, 0xf4, 0x4a, 0xf2, 0x77, 0xa5, 0x22, - 0xc4, 0x58, 0x67, 0xb2, 0xae, 0x6a, 0x71, 0xed, 0x55, 0xba, 0x2e, 0x33, 0xfc, 0xb8, 0xe5, 0x73, 0x7a, 0x08, 0x40, - 0x9e, 0xda, 0x85, 0x34, 0x12, 0xaa, 0x10, 0x6d, 0x2e, 0xe2, 0x74, 0x7d, 0x3c, 0xf6, 0xba, 0x5e, 0xb0, 0xa7, 0xe3, - 0xaf, 0xa6, 0xaf, 0xb3, 0x30, 0x1b, 0x54, 0x64, 0x54, 0x2f, 0x79, 0xd1, 0x32, 0xe5, 0x94, 0x26, 0x01, 0xe8, 0xe3, - 0xd9, 0x63, 0xec, 0x68, 0x3c, 0x26, 0x9b, 0xb6, 0x78, 0x80, 0x87, 0xcb, 0x75, 0x58, 0x92, 0x99, 0xaa, 0x23, 0x0a, - 0x0a, 0x7e, 0x57, 0x07, 0x80, 0xe4, 0x68, 0xaa, 0xd2, 0x5c, 0x1a, 0x7b, 0x3a, 0x9e, 0x50, 0x81, 0xdd, 0x0e, 0x49, - 0xe3, 0x54, 0x68, 0x67, 0x5e, 0xb8, 0x1e, 0x45, 0x42, 0xbb, 0x2c, 0xed, 0x54, 0x2a, 0xe4, 0x9e, 0x99, 0xd9, 0xae, - 0x41, 0x0c, 0x86, 0x50, 0xd5, 0x5d, 0x38, 0x75, 0xef, 0x36, 0xd7, 0x98, 0xed, 0x80, 0xf7, 0x1a, 0x34, 0x43, 0xca, - 0x5b, 0xf4, 0x5b, 0x5b, 0x44, 0x43, 0x57, 0x6b, 0x30, 0x2b, 0x46, 0xd9, 0x52, 0x94, 0xae, 0x29, 0x28, 0x05, 0xa3, - 0xcb, 0xb5, 0xb3, 0x70, 0x5f, 0x0b, 0xef, 0xc2, 0x92, 0xa9, 0xd5, 0x22, 0xa5, 0x84, 0xf2, 0xa6, 0xa2, 0xa5, 0x84, - 0x91, 0xd4, 0xf0, 0xd4, 0xae, 0x17, 0x78, 0x9c, 0xe7, 0x41, 0xd4, 0xf2, 0x02, 0x3b, 0xad, 0xc9, 0x29, 0x38, 0x7a, - 0xe9, 0x9c, 0x9a, 0x02, 0xff, 0x98, 0x49, 0x10, 0xd3, 0xa1, 0xbc, 0xdf, 0xe0, 0xe6, 0xff, 0x47, 0xc9, 0x02, 0x87, - 0x6f, 0xbd, 0xc2, 0x6d, 0xf4, 0x8f, 0xd2, 0xa5, 0xa5, 0xcf, 0x84, 0xeb, 0xea, 0xe2, 0x48, 0x7b, 0xb3, 0x51, 0xb2, - 0xcc, 0xf2, 0xf4, 0x8d, 0x48, 0x79, 0x45, 0xa4, 0x09, 0x46, 0xc5, 0x4e, 0x2a, 0xef, 0x86, 0x07, 0x46, 0x8c, 0xde, - 0x8d, 0xef, 0xc7, 0x0c, 0x64, 0xc3, 0x60, 0xf5, 0xcd, 0x52, 0x91, 0xac, 0xaf, 0x01, 0x53, 0x44, 0xca, 0x4f, 0x5e, - 0xe4, 0x1c, 0x9e, 0x42, 0x75, 0xfd, 0x02, 0xb7, 0xb9, 0xca, 0xf5, 0x39, 0xff, 0x31, 0xa3, 0x3f, 0x22, 0xd0, 0x49, - 0xbc, 0x02, 0xb9, 0xc7, 0x33, 0xa8, 0x1b, 0x61, 0x6a, 0x39, 0x06, 0x07, 0x42, 0x34, 0x90, 0xa2, 0x66, 0x81, 0x84, - 0xba, 0xd0, 0xc0, 0x1a, 0xf2, 0x82, 0x39, 0xbc, 0xc8, 0x45, 0xf2, 0x71, 0xaa, 0x7d, 0xe6, 0x87, 0x31, 0xc6, 0x4c, - 0x0e, 0x06, 0x61, 0x3d, 0x0b, 0x86, 0xe3, 0xd1, 0xe4, 0xe8, 0x29, 0x9c, 0xdb, 0xc1, 0x38, 0x20, 0x83, 0xa0, 0xa9, - 0x56, 0x71, 0x41, 0xab, 0x9b, 0x2b, 0x53, 0x06, 0x7e, 0xdc, 0x04, 0x83, 0x7f, 0x94, 0x8e, 0xe2, 0x1d, 0x34, 0x27, - 0xe7, 0x22, 0x04, 0x1b, 0xfb, 0x35, 0x01, 0x49, 0x59, 0x4f, 0xf1, 0x93, 0xea, 0x70, 0x63, 0x52, 0xfb, 0xa7, 0x0f, - 0x2f, 0x38, 0xec, 0x90, 0x40, 0x81, 0x34, 0x9e, 0x66, 0xa3, 0x57, 0x52, 0x91, 0xfb, 0xae, 0xe4, 0x70, 0x67, 0xee, - 0x59, 0xd3, 0x23, 0xab, 0x90, 0xf0, 0xb3, 0x80, 0x1b, 0xf9, 0xab, 0xe2, 0x26, 0xce, 0xb3, 0xf4, 0xc0, 0x7f, 0x73, - 0x50, 0xdd, 0x17, 0x75, 0x7c, 0x37, 0x0a, 0xb4, 0x35, 0x21, 0x77, 0x55, 0x4f, 0x80, 0x9e, 0x00, 0x5b, 0x00, 0x0c, - 0x88, 0x77, 0xcc, 0x4c, 0x66, 0x3c, 0x02, 0x8f, 0x40, 0xdf, 0x07, 0xb2, 0xbc, 0xb7, 0x2e, 0x49, 0xee, 0x66, 0x2a, - 0xcc, 0x55, 0xaf, 0xd8, 0x29, 0xc8, 0x78, 0xb5, 0x15, 0xbb, 0x6e, 0x7d, 0xe6, 0x4d, 0x87, 0x57, 0xe0, 0x85, 0x00, - 0xb7, 0xc8, 0x7e, 0xdf, 0x17, 0x54, 0x56, 0x5a, 0x45, 0xbc, 0x93, 0xdc, 0xa0, 0x7f, 0xbb, 0x33, 0x36, 0x92, 0xe4, - 0x56, 0x0f, 0x0f, 0xa0, 0xca, 0xe4, 0x5c, 0x71, 0x3b, 0x87, 0xa8, 0xad, 0xbb, 0x71, 0xc0, 0x6a, 0x83, 0x76, 0x59, - 0x73, 0x04, 0x17, 0x5e, 0x1c, 0x64, 0x90, 0x13, 0x67, 0x65, 0x24, 0xd5, 0xb8, 0x9a, 0xd4, 0x82, 0x4f, 0xf2, 0x74, - 0x0f, 0x59, 0xea, 0x09, 0x50, 0xe4, 0x38, 0x16, 0x43, 0xba, 0xf1, 0x26, 0xf0, 0xf8, 0xbd, 0x08, 0x41, 0x9a, 0xb6, - 0xdd, 0xfa, 0x23, 0x50, 0x74, 0x0f, 0x4c, 0x41, 0x9a, 0x46, 0x9b, 0x1a, 0x28, 0xa8, 0x3d, 0xd4, 0x48, 0x45, 0x9c, - 0x9d, 0xbc, 0x06, 0x1d, 0x22, 0xf8, 0x7e, 0xa7, 0x59, 0xd5, 0xf1, 0x62, 0x42, 0xf0, 0xe4, 0x7d, 0x71, 0x97, 0x55, - 0x75, 0x15, 0xbd, 0x4f, 0xd1, 0x10, 0x2a, 0x11, 0x45, 0xf4, 0x12, 0xe2, 0xe9, 0x55, 0xf8, 0xbb, 0x8a, 0x7e, 0x4a, - 0x69, 0x9c, 0xa6, 0x98, 0xfe, 0xbc, 0x84, 0x9f, 0xcf, 0x00, 0xd5, 0x11, 0x77, 0x42, 0x74, 0x21, 0xc0, 0x5e, 0x0d, - 0xa2, 0x59, 0xd5, 0x1c, 0x30, 0x34, 0xa3, 0xfb, 0x8a, 0x22, 0x46, 0x1b, 0x66, 0xff, 0xa1, 0x44, 0xa1, 0x90, 0x2c, - 0xe6, 0xd7, 0xca, 0x3c, 0x44, 0x3f, 0x62, 0x91, 0xa7, 0xef, 0x5e, 0xe9, 0x21, 0x8d, 0xee, 0x05, 0x55, 0x5b, 0x1b, - 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xad, 0xe9, 0x79, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, 0x4f, 0xbc, 0x7b, 0xf5, 0x4c, - 0x5a, 0x98, 0x3c, 0xcf, 0x40, 0x71, 0x70, 0xfa, 0xee, 0xd5, 0x6b, 0x91, 0xae, 0x73, 0x1e, 0x9d, 0x0b, 0x24, 0xad, - 0xa7, 0xef, 0x5e, 0xfd, 0x8c, 0xe6, 0x5e, 0x3f, 0x95, 0xf0, 0xfe, 0x25, 0xf0, 0x96, 0x51, 0xbc, 0x86, 0x3e, 0xc9, - 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd4, 0x5a, 0x45, 0xbf, 0xa4, 0x8d, 0x23, 0xad, 0xfa, 0x67, 0xe9, 0x52, 0x3b, 0x47, - 0xc0, 0x73, 0x97, 0x67, 0xc5, 0xc7, 0xc8, 0x88, 0x76, 0x82, 0xe8, 0xcb, 0x83, 0xbb, 0xeb, 0xbc, 0xa8, 0x22, 0x7c, - 0xc1, 0xd0, 0x2e, 0x28, 0x3a, 0x3c, 0xbc, 0xbd, 0xbd, 0x1d, 0xdd, 0x7e, 0x35, 0x12, 0xe5, 0xd5, 0xe1, 0xe4, 0xdb, - 0x6f, 0xbf, 0x3d, 0xc4, 0xb7, 0xc1, 0x97, 0x6d, 0xb7, 0xf7, 0x9a, 0xf0, 0x01, 0x0b, 0x10, 0xa1, 0xfa, 0x4b, 0xb8, - 0xa2, 0x80, 0x16, 0x6e, 0xf0, 0x65, 0xf0, 0xa5, 0x3a, 0x74, 0xbe, 0x3c, 0xae, 0x6e, 0xae, 0x64, 0xf9, 0x5d, 0x25, - 0x1f, 0x8d, 0xc7, 0xe3, 0x43, 0x90, 0x40, 0x7d, 0x39, 0xe0, 0x83, 0xe0, 0x24, 0x18, 0x64, 0x70, 0xa1, 0xa9, 0x6e, - 0xae, 0x4e, 0x02, 0xc7, 0x34, 0xd7, 0x63, 0x11, 0x2d, 0x88, 0x4b, 0x70, 0x78, 0x45, 0x83, 0x2f, 0x03, 0x62, 0x53, - 0xbe, 0x80, 0x94, 0x2f, 0x8e, 0x9e, 0xba, 0x69, 0xff, 0x4b, 0xa6, 0x7d, 0xe5, 0xa6, 0x1d, 0x63, 0xda, 0x57, 0xcf, - 0xdc, 0xb4, 0x13, 0x99, 0xf6, 0xc2, 0x4d, 0xfb, 0xdf, 0xd5, 0x00, 0x52, 0x0f, 0x5c, 0xeb, 0xbf, 0x0b, 0xa7, 0x35, - 0x78, 0x0a, 0x45, 0xd9, 0x75, 0x7c, 0xc5, 0xa1, 0xd1, 0x83, 0xbb, 0xeb, 0x9c, 0x06, 0x03, 0x6c, 0xaf, 0x63, 0xe4, - 0xe1, 0x7c, 0xf0, 0xe5, 0xba, 0xcc, 0xc3, 0xe0, 0xcb, 0x01, 0x16, 0x32, 0xf8, 0x32, 0x20, 0x5f, 0xaa, 0x23, 0xed, - 0xae, 0x62, 0x9b, 0xc0, 0x86, 0x22, 0x1d, 0x9a, 0x00, 0x61, 0xae, 0x34, 0xae, 0xa1, 0x7f, 0x96, 0xdd, 0xd9, 0xf0, - 0x96, 0x28, 0xdd, 0x74, 0x83, 0x86, 0xbe, 0x05, 0xef, 0x04, 0x68, 0x54, 0x14, 0xdc, 0xc4, 0x65, 0x38, 0x1c, 0x56, - 0x37, 0x57, 0x04, 0xec, 0x32, 0x57, 0x3c, 0xae, 0xa3, 0xa0, 0x10, 0x43, 0xf9, 0x33, 0x90, 0x91, 0xaf, 0x02, 0x04, - 0x44, 0x82, 0xff, 0x82, 0x86, 0xbe, 0x13, 0x6c, 0x13, 0x0c, 0x6f, 0xf9, 0xc5, 0xc7, 0xac, 0x1e, 0x4a, 0xd1, 0xe2, - 0x5d, 0x45, 0xe1, 0x07, 0xfc, 0xb5, 0x55, 0x47, 0x7f, 0x82, 0x1b, 0xb7, 0xaf, 0x61, 0x7f, 0x27, 0x2c, 0x8b, 0xfa, - 0x4e, 0xcc, 0xb3, 0xc5, 0xb4, 0x75, 0xa0, 0xbf, 0x15, 0xa4, 0x9e, 0x67, 0x83, 0x60, 0x18, 0x0c, 0xf8, 0x82, 0xbd, - 0x15, 0x73, 0xee, 0x98, 0x4f, 0x3d, 0x12, 0xee, 0x34, 0xcf, 0xb2, 0x01, 0xf8, 0xa6, 0x20, 0x3f, 0x72, 0xf8, 0xdf, - 0xf3, 0x21, 0x0a, 0x0f, 0x07, 0x8f, 0x0e, 0xc9, 0x2c, 0x58, 0xdd, 0xa1, 0x47, 0x67, 0x14, 0x64, 0xc5, 0x92, 0x97, - 0x59, 0xed, 0x2c, 0x95, 0xfb, 0x75, 0xdb, 0xcb, 0x63, 0xef, 0xd9, 0xbc, 0x8a, 0x8b, 0x40, 0x9e, 0x73, 0xa0, 0x78, - 0x43, 0xd9, 0x53, 0xe1, 0x4b, 0x48, 0x95, 0x21, 0x6f, 0x58, 0x0c, 0x58, 0x70, 0xdc, 0x1b, 0x0e, 0x0f, 0x82, 0x81, - 0x55, 0xe7, 0x0e, 0x82, 0x83, 0xe1, 0xf0, 0x24, 0xb0, 0xf7, 0xa1, 0x6c, 0x64, 0xef, 0x8c, 0xb4, 0x64, 0xff, 0x2c, - 0xc3, 0x82, 0x82, 0x78, 0x4c, 0x28, 0xf1, 0x97, 0x02, 0x97, 0x19, 0x00, 0xf4, 0x91, 0x94, 0x80, 0x69, 0x58, 0x99, - 0x01, 0x84, 0xe6, 0xa6, 0x31, 0x3b, 0x07, 0xe6, 0x91, 0x26, 0x20, 0xde, 0x03, 0x8a, 0x01, 0x88, 0x25, 0x01, 0xce, - 0x5d, 0x10, 0xc5, 0xaa, 0x90, 0x47, 0x00, 0x7a, 0x8f, 0x3f, 0x89, 0x2e, 0x05, 0x93, 0x54, 0xac, 0x42, 0x10, 0xc4, - 0xf1, 0xd9, 0x5d, 0xd5, 0x9a, 0x9c, 0x25, 0x3a, 0x98, 0x91, 0x04, 0xd8, 0x10, 0x0d, 0x3b, 0x07, 0xf7, 0x73, 0x50, - 0x7a, 0x18, 0xbd, 0x13, 0x72, 0xc1, 0xf7, 0xdc, 0xb2, 0x50, 0x77, 0x70, 0xf5, 0x84, 0x83, 0xe0, 0x9e, 0x2b, 0x16, - 0x60, 0x54, 0x97, 0xeb, 0xaa, 0xe6, 0xe9, 0x87, 0xfb, 0x15, 0xc4, 0xbe, 0xc3, 0x01, 0x7d, 0x27, 0xf2, 0x2c, 0xb9, - 0x0f, 0xad, 0x3d, 0xd7, 0x46, 0xa6, 0xff, 0xf0, 0xe1, 0xf5, 0x4f, 0x11, 0x88, 0x1c, 0x1b, 0x4d, 0xe9, 0xef, 0x39, - 0x9e, 0x4d, 0x6e, 0x84, 0x27, 0x77, 0x63, 0xdf, 0x73, 0x73, 0x7a, 0xf4, 0xfb, 0x50, 0x37, 0xbd, 0xe7, 0xb3, 0x7b, - 0x3e, 0xb2, 0xc5, 0xa1, 0xba, 0xc2, 0x7e, 0x7d, 0xbb, 0x76, 0x8d, 0x90, 0x1e, 0x9e, 0x67, 0xca, 0xbd, 0xf9, 0x51, - 0x0e, 0x86, 0x41, 0x30, 0x55, 0x42, 0x49, 0x88, 0xba, 0xc1, 0xa4, 0x80, 0x21, 0x3a, 0x50, 0xcb, 0x6a, 0x8a, 0x9c, - 0x9b, 0x1c, 0x59, 0x78, 0x3f, 0x60, 0x4a, 0xe8, 0xe0, 0xe5, 0x90, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc0, 0x6f, 0x15, - 0x30, 0xfd, 0x72, 0x51, 0x59, 0x07, 0xd1, 0x03, 0x30, 0xc6, 0x2d, 0x78, 0x09, 0x5d, 0x61, 0x37, 0x6b, 0x19, 0x15, - 0x03, 0xc1, 0xe3, 0x90, 0x03, 0x74, 0xb0, 0x0b, 0x5a, 0x56, 0x96, 0xf2, 0x56, 0x65, 0x2d, 0x55, 0xe4, 0x65, 0x28, - 0xab, 0x62, 0x89, 0xf9, 0x5e, 0xb0, 0x1f, 0x4a, 0xf4, 0x2c, 0x9f, 0x56, 0x5d, 0xf0, 0x42, 0x28, 0xc1, 0xb2, 0x5d, - 0xef, 0x44, 0x20, 0xea, 0x4c, 0x75, 0xae, 0xfa, 0x0a, 0xc7, 0x8e, 0xa7, 0xaf, 0x45, 0xca, 0x95, 0x09, 0x85, 0xe2, - 0xf3, 0x85, 0xab, 0x98, 0x28, 0xd9, 0x2d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd7, 0x6a, 0x33, 0x48, 0xd1, 0x31, - 0x6f, 0x50, 0x70, 0x2d, 0x15, 0x0a, 0x5a, 0x7b, 0x1b, 0x7f, 0x82, 0x23, 0x37, 0xba, 0x3d, 0xf4, 0x7e, 0xab, 0xe3, - 0xab, 0x37, 0xe8, 0xdb, 0x69, 0x7e, 0x8e, 0x6a, 0xf1, 0xcb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, 0xe0, 0xd2, - 0x42, 0x3d, 0x67, 0xef, 0x4e, 0xdf, 0x80, 0x1f, 0x25, 0xfe, 0xfe, 0xf5, 0xfb, 0xa0, 0x21, 0xd3, 0x78, 0x56, 0xea, - 0x0f, 0x4d, 0x0e, 0x08, 0x4d, 0x62, 0xd3, 0xcc, 0xfb, 0x59, 0xec, 0xb3, 0xef, 0x8a, 0xad, 0xa7, 0xa5, 0x8f, 0x24, - 0xa5, 0xb9, 0x7d, 0x30, 0x20, 0x50, 0x07, 0x88, 0xe4, 0xec, 0x4b, 0x1a, 0x43, 0x9a, 0xcb, 0xec, 0xbb, 0x11, 0xf1, - 0x5e, 0xec, 0x84, 0x10, 0xe3, 0x12, 0x8b, 0x46, 0x0d, 0xf9, 0x8c, 0x47, 0xd2, 0xb0, 0xe8, 0x3d, 0x26, 0x10, 0x6b, - 0x38, 0x2d, 0xdf, 0x23, 0xe6, 0x31, 0xde, 0x0d, 0x94, 0xec, 0x21, 0xca, 0xa8, 0xcd, 0xee, 0x59, 0x7c, 0x7f, 0x5c, - 0x87, 0x99, 0xb1, 0xbc, 0x1c, 0xc2, 0xdf, 0x40, 0x19, 0x80, 0x53, 0x8e, 0x2c, 0x5f, 0xad, 0x37, 0xba, 0x5c, 0x62, - 0x6a, 0x13, 0x41, 0x2c, 0x1e, 0x95, 0x0e, 0x6b, 0x57, 0xa5, 0xaa, 0x5d, 0x6d, 0x7d, 0x26, 0x7a, 0x35, 0x68, 0xe5, - 0xda, 0xf6, 0x78, 0x08, 0x77, 0xa9, 0xa4, 0x15, 0x26, 0xb0, 0x5e, 0x65, 0x15, 0x2a, 0xd8, 0x9c, 0x80, 0x06, 0xd7, - 0x22, 0x05, 0xe0, 0x2c, 0xa5, 0x46, 0xa3, 0x5a, 0xd8, 0x67, 0xe4, 0x7c, 0x16, 0x5b, 0x0b, 0xf1, 0xb4, 0x00, 0x0c, - 0xd7, 0xc7, 0xa0, 0xe4, 0xdd, 0x18, 0x94, 0xd3, 0x8f, 0x12, 0xde, 0x3a, 0x38, 0xaf, 0x96, 0x71, 0x2a, 0x6e, 0x01, - 0x8b, 0x31, 0x70, 0x53, 0xb1, 0x54, 0x27, 0x21, 0x59, 0xf2, 0xe4, 0x23, 0x5a, 0x6d, 0xa4, 0x01, 0x70, 0x95, 0x53, - 0x6d, 0xb9, 0x27, 0x41, 0x42, 0x6d, 0x29, 0x32, 0x21, 0xae, 0xeb, 0x38, 0x59, 0x9e, 0x61, 0x6a, 0xb8, 0x81, 0x5e, - 0x44, 0x81, 0x58, 0xf1, 0x02, 0x48, 0x7a, 0xce, 0xfe, 0x95, 0x29, 0xac, 0xf1, 0x67, 0x02, 0x05, 0x4c, 0x0a, 0x35, - 0x18, 0x2b, 0x65, 0x2f, 0x84, 0x8e, 0xf6, 0x16, 0x04, 0x8d, 0x7d, 0xf9, 0x27, 0xd4, 0xfd, 0x0c, 0x5a, 0x11, 0x7a, - 0x60, 0x88, 0xe2, 0x02, 0x77, 0x68, 0x6a, 0x96, 0x9c, 0x03, 0x8c, 0x58, 0x18, 0xef, 0xb3, 0xc6, 0x6c, 0xf5, 0x67, - 0x4b, 0xc0, 0x36, 0x4d, 0xb5, 0x4f, 0x61, 0x98, 0x10, 0x1d, 0x1b, 0xd8, 0x28, 0x2b, 0xcd, 0x86, 0xd2, 0xed, 0xa4, - 0x4b, 0xe6, 0xb4, 0x70, 0x9a, 0xf7, 0x18, 0x5b, 0x8e, 0x64, 0xee, 0x7e, 0x3f, 0xd4, 0x3f, 0x59, 0x4e, 0x9f, 0xa9, - 0x90, 0xcd, 0xce, 0x78, 0xd0, 0x9c, 0x28, 0x75, 0x55, 0x47, 0x3f, 0xa0, 0x03, 0x30, 0xd3, 0x06, 0x20, 0xd3, 0x06, - 0x9b, 0x76, 0x95, 0xa8, 0xb8, 0x24, 0x61, 0xa9, 0x24, 0xb0, 0xb3, 0x7d, 0xc9, 0xce, 0x26, 0x20, 0x8e, 0xe1, 0xae, - 0xa3, 0xc5, 0x4e, 0x88, 0x0f, 0x6f, 0x71, 0x90, 0x80, 0xa8, 0x43, 0x56, 0x97, 0x90, 0x8d, 0x36, 0x74, 0x71, 0x2f, - 0x4a, 0x61, 0xc2, 0x5a, 0x26, 0x55, 0x89, 0x0e, 0x82, 0x54, 0xed, 0xb6, 0x08, 0x2c, 0x51, 0xb0, 0x03, 0xd8, 0x7b, - 0x3b, 0xea, 0x7a, 0xd4, 0x64, 0x75, 0xf2, 0x25, 0xf8, 0x38, 0xcd, 0xba, 0x0a, 0xd2, 0x0b, 0xbb, 0x2e, 0xd7, 0x3c, - 0x50, 0xb1, 0xa9, 0xa4, 0x31, 0x71, 0x97, 0x16, 0x19, 0xe2, 0x01, 0x63, 0x2c, 0x5d, 0x08, 0xe4, 0x9b, 0xed, 0x8e, - 0x9b, 0x9a, 0x20, 0xf4, 0x13, 0xd6, 0x94, 0xc0, 0x4e, 0x67, 0x7b, 0x6a, 0xfc, 0x7c, 0x40, 0xc4, 0x61, 0x40, 0x81, - 0x64, 0xe3, 0x90, 0xe6, 0x48, 0x5f, 0x90, 0x34, 0x61, 0x60, 0x68, 0xc9, 0x73, 0x82, 0xac, 0x28, 0x74, 0x6c, 0x5d, - 0x95, 0x71, 0xae, 0x08, 0x73, 0xb4, 0xe4, 0x94, 0xf8, 0x9c, 0x20, 0x13, 0xdb, 0xd3, 0x36, 0x3d, 0x19, 0x96, 0x92, - 0x05, 0xfa, 0x57, 0x10, 0x25, 0xf6, 0x4c, 0x33, 0x2a, 0x07, 0xed, 0x02, 0x16, 0x28, 0xe5, 0x7b, 0xd0, 0x78, 0x6b, - 0x68, 0xa3, 0x60, 0x88, 0xed, 0xfe, 0x04, 0xfb, 0xb5, 0x76, 0x5a, 0x97, 0x29, 0x96, 0x93, 0x29, 0x44, 0x7b, 0x21, - 0xfd, 0x1b, 0x45, 0xa2, 0x3b, 0x45, 0x68, 0x12, 0xd6, 0x51, 0xf6, 0xa4, 0x4d, 0x0d, 0xa0, 0xa7, 0x4e, 0xc0, 0xf3, - 0xce, 0xb5, 0x0c, 0xbb, 0x48, 0xf5, 0x57, 0x06, 0x9f, 0x52, 0x0d, 0x82, 0x14, 0xb5, 0x49, 0xc1, 0x9c, 0xd7, 0xa1, - 0xa4, 0xce, 0x9c, 0xb6, 0xcc, 0xa8, 0x3a, 0x2a, 0x42, 0xca, 0x09, 0xfe, 0x93, 0x57, 0x42, 0x11, 0x9b, 0x30, 0xc1, - 0x03, 0x1f, 0xe6, 0x19, 0x36, 0xf0, 0x76, 0xfb, 0x2e, 0x0d, 0x93, 0x36, 0xdb, 0x90, 0x82, 0xb4, 0x42, 0xc7, 0xc5, - 0x80, 0xca, 0x5e, 0xe1, 0x7e, 0xc1, 0x76, 0xd2, 0x14, 0x3c, 0x08, 0xbd, 0x06, 0x26, 0x76, 0x75, 0xf1, 0x75, 0x98, - 0xd0, 0x70, 0x49, 0x95, 0xb3, 0x93, 0x92, 0x34, 0xb7, 0xd7, 0xe5, 0xa5, 0xe9, 0x83, 0x8a, 0x1d, 0xd6, 0x35, 0x3c, - 0xd0, 0x3c, 0xbf, 0x8b, 0x2b, 0xa6, 0x68, 0xa2, 0xb6, 0x1e, 0x92, 0x96, 0x1c, 0xeb, 0x66, 0xba, 0xc2, 0xd5, 0x32, - 0x53, 0xc0, 0xee, 0x02, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x89, 0xcd, 0x66, 0xab, 0x86, 0x4c, 0xf3, - 0x7d, 0xd9, 0x72, 0x1d, 0x10, 0xce, 0x50, 0xdf, 0xdc, 0x25, 0xc7, 0x8a, 0xb6, 0xb9, 0x49, 0x80, 0xe3, 0xed, 0x14, - 0x90, 0x74, 0x2c, 0x41, 0x1b, 0xdf, 0xd2, 0x1d, 0x44, 0xaa, 0xa7, 0x82, 0xee, 0x9d, 0x2f, 0xd2, 0xf8, 0x5f, 0x80, - 0x6d, 0xd4, 0x46, 0x9b, 0x66, 0x65, 0xeb, 0x30, 0x91, 0x16, 0xd6, 0xc8, 0x42, 0x2e, 0xc1, 0x07, 0x73, 0xb7, 0xa9, - 0xd3, 0xd3, 0x0e, 0x22, 0xec, 0x76, 0xd1, 0xe1, 0x11, 0xc6, 0x92, 0x35, 0x48, 0x34, 0xab, 0xb0, 0xa6, 0xfe, 0x72, - 0x88, 0x72, 0xaa, 0x97, 0x4c, 0xb4, 0xa4, 0x2e, 0xa5, 0x88, 0x52, 0x30, 0x37, 0x9e, 0x16, 0x9e, 0x29, 0x21, 0x42, - 0x56, 0x08, 0x0b, 0x54, 0x6b, 0xa0, 0xa5, 0x7c, 0xd0, 0xeb, 0xd0, 0xc9, 0x42, 0x63, 0x0a, 0xa2, 0x8f, 0x48, 0x73, - 0x23, 0x96, 0x8c, 0xee, 0x8e, 0x51, 0x4c, 0x20, 0x54, 0xb5, 0x93, 0x17, 0x56, 0x9f, 0x92, 0x6d, 0x75, 0x10, 0xd7, - 0x98, 0x26, 0x7b, 0x08, 0x6a, 0x8c, 0x82, 0x36, 0xab, 0x1b, 0xfd, 0xa5, 0x0c, 0x5d, 0xbb, 0x70, 0xec, 0x46, 0x49, - 0x04, 0x44, 0x60, 0x75, 0x9a, 0x8a, 0x01, 0x59, 0xe7, 0xb1, 0x8d, 0xd0, 0xa4, 0xba, 0x85, 0x28, 0x6f, 0x54, 0x34, - 0x1f, 0xd7, 0x21, 0xd9, 0x6e, 0xb1, 0x2c, 0xf0, 0x65, 0x3f, 0x5b, 0xef, 0x81, 0xfc, 0x7e, 0xbd, 0xfe, 0x24, 0xe4, - 0xf7, 0xab, 0xec, 0x73, 0x20, 0xbf, 0x5f, 0xaf, 0xff, 0xa7, 0x21, 0xbf, 0xcf, 0xd6, 0x0e, 0xe4, 0xb7, 0x1c, 0x8c, - 0xdf, 0x4a, 0x16, 0xbc, 0x7d, 0x13, 0xd0, 0xe7, 0x82, 0x05, 0x6f, 0x5f, 0xbe, 0x74, 0x84, 0xe9, 0xdf, 0xe9, 0x38, - 0x2f, 0x5a, 0x16, 0x8c, 0xb8, 0x2d, 0xf0, 0x0a, 0xb5, 0x4e, 0x2e, 0x50, 0x51, 0x06, 0xc0, 0xeb, 0xd5, 0x3f, 0xb2, - 0x7a, 0x19, 0x06, 0x87, 0x01, 0x99, 0x59, 0x48, 0xd0, 0xe1, 0x04, 0x6e, 0x6f, 0x68, 0x64, 0x59, 0x7f, 0x16, 0x7c, - 0xf8, 0x68, 0x34, 0x8a, 0xcb, 0x2b, 0xbc, 0xd4, 0xe9, 0x8d, 0x84, 0x80, 0xc7, 0x19, 0xaf, 0x4c, 0x88, 0x88, 0x65, - 0x5c, 0x9d, 0xab, 0xd8, 0x2c, 0x95, 0xd9, 0x8a, 0x10, 0x71, 0xfe, 0x1c, 0x70, 0xea, 0xcd, 0xde, 0x8c, 0xb1, 0x1f, - 0x92, 0x23, 0x56, 0x01, 0x64, 0x9f, 0xad, 0xd5, 0xbb, 0x8b, 0xb8, 0xe2, 0xef, 0xe2, 0x7a, 0xc9, 0xa0, 0x97, 0x70, - 0x17, 0x29, 0x78, 0x52, 0x3b, 0x6c, 0x93, 0x04, 0x2a, 0xcf, 0x14, 0x50, 0x79, 0xc7, 0x7b, 0x1a, 0x9a, 0x61, 0x51, - 0x3e, 0xc0, 0x5a, 0xba, 0x9c, 0x81, 0xd1, 0xe2, 0x8b, 0x1b, 0x5e, 0xd4, 0x3f, 0x01, 0x9e, 0x7a, 0xc1, 0x4b, 0xb8, - 0x25, 0x20, 0x17, 0xeb, 0x39, 0x21, 0xd0, 0xca, 0xf5, 0xec, 0x90, 0x51, 0x63, 0xb4, 0x68, 0xc2, 0xeb, 0x37, 0xde, - 0x84, 0xd0, 0xbb, 0x13, 0x74, 0x45, 0x18, 0x09, 0xef, 0xcf, 0x35, 0x3f, 0xcf, 0xc0, 0x7c, 0xbe, 0x02, 0x28, 0x0d, - 0x84, 0x43, 0x65, 0x52, 0x6e, 0x81, 0x09, 0x1b, 0x6d, 0xae, 0x94, 0xa5, 0x0e, 0x52, 0x29, 0x95, 0x70, 0xba, 0x15, - 0x4d, 0x05, 0xe0, 0x70, 0x47, 0x02, 0xc0, 0x4c, 0x4d, 0x61, 0x10, 0xdd, 0x36, 0xa5, 0x59, 0x1a, 0x59, 0x45, 0x9a, - 0xc5, 0x27, 0xa5, 0x12, 0x74, 0xfa, 0x3c, 0x89, 0x6b, 0x7e, 0x25, 0x4a, 0x08, 0x85, 0xdb, 0x4a, 0x69, 0x0c, 0x16, - 0x80, 0x3c, 0xee, 0xac, 0xcd, 0xd6, 0xac, 0x94, 0x29, 0xe7, 0xc5, 0xfa, 0x9a, 0x97, 0x59, 0x72, 0xbe, 0xcc, 0xaa, - 0x5a, 0x94, 0xf7, 0x6c, 0xae, 0xb2, 0x2e, 0xa2, 0x6a, 0xa4, 0x24, 0x5e, 0xe7, 0x35, 0xbf, 0x5e, 0x41, 0xe8, 0x87, - 0x75, 0x09, 0xac, 0xe7, 0xde, 0x2f, 0x65, 0x64, 0xd2, 0xb0, 0xf3, 0x3b, 0xb2, 0x00, 0xbd, 0x2b, 0xac, 0x11, 0xb9, - 0x00, 0x98, 0x5e, 0x33, 0xa7, 0x92, 0xaa, 0x94, 0xfe, 0x6b, 0x8d, 0x33, 0xef, 0x2f, 0xaa, 0x71, 0x6b, 0xed, 0x19, - 0xad, 0xad, 0x9f, 0x2a, 0xe1, 0x94, 0x80, 0x12, 0xb1, 0x13, 0x5c, 0x31, 0x29, 0x5d, 0x1b, 0xb4, 0x16, 0xb0, 0xac, - 0xc0, 0x1c, 0x59, 0x71, 0x75, 0x7e, 0x2b, 0x65, 0x35, 0x3d, 0x49, 0xcd, 0xd2, 0x28, 0x96, 0x28, 0x42, 0x4b, 0x16, - 0xae, 0x59, 0xb2, 0x27, 0xd7, 0x3a, 0x4a, 0x3c, 0x3c, 0xb0, 0xb8, 0x3d, 0xe8, 0xc7, 0x49, 0x3b, 0x65, 0xbb, 0xdd, - 0xc9, 0x04, 0x6c, 0x48, 0x2b, 0x09, 0x22, 0x83, 0x2c, 0x67, 0xc3, 0x49, 0x04, 0x70, 0x2d, 0x8a, 0x84, 0xfe, 0xb9, - 0xe6, 0x1a, 0xd0, 0x3e, 0x54, 0x5e, 0x85, 0x72, 0x15, 0xcd, 0xc1, 0xce, 0xcb, 0xed, 0x35, 0x04, 0x96, 0xe9, 0x9c, - 0x97, 0xc5, 0xfe, 0x35, 0xa0, 0xcc, 0x91, 0xd5, 0x0b, 0xb2, 0x6f, 0xc6, 0x55, 0xb6, 0x07, 0xa7, 0xb7, 0x35, 0x07, - 0x7b, 0x5b, 0xa3, 0x50, 0x7a, 0x13, 0x1e, 0x0e, 0x9f, 0x8e, 0x8d, 0x3f, 0x03, 0xae, 0x72, 0xf3, 0x5b, 0xee, 0x04, - 0xfb, 0x6c, 0x76, 0x03, 0xf5, 0x5d, 0x22, 0xda, 0x35, 0xd2, 0x6a, 0xcf, 0xb8, 0x35, 0xa4, 0xb1, 0x2b, 0xcd, 0x88, - 0xb9, 0x7e, 0x97, 0x47, 0xeb, 0xf9, 0xa3, 0x4d, 0xa6, 0xaa, 0x6c, 0x7e, 0xcf, 0x4c, 0x50, 0x3c, 0x8f, 0x4c, 0x35, - 0x6a, 0x0d, 0xba, 0x98, 0x74, 0x1d, 0xd9, 0xd4, 0x8c, 0xb2, 0xac, 0x93, 0xd6, 0x8d, 0xe4, 0x23, 0x97, 0x31, 0xc2, - 0xba, 0xb3, 0xf0, 0x3b, 0x9e, 0x84, 0x5d, 0x0d, 0x93, 0xd7, 0x10, 0xdd, 0x05, 0x84, 0xe9, 0x04, 0xe5, 0x43, 0xf8, - 0xfb, 0xa3, 0x8d, 0x4f, 0x3b, 0x9b, 0x43, 0xe7, 0x33, 0xfc, 0x9d, 0xa5, 0xf0, 0xb7, 0x6e, 0x7e, 0xa7, 0x9b, 0x6b, - 0x5e, 0x2f, 0x45, 0x1a, 0x05, 0xef, 0xde, 0x9e, 0x7d, 0x08, 0x14, 0xfc, 0x3b, 0x5e, 0x82, 0xb4, 0xda, 0x5b, 0x03, - 0x4d, 0x81, 0x1a, 0x28, 0x17, 0x57, 0x88, 0x80, 0xa8, 0x20, 0xf4, 0xcf, 0x96, 0xe2, 0xf6, 0x34, 0xcf, 0x5d, 0x4e, - 0x5d, 0x53, 0x77, 0xc5, 0xbc, 0x7a, 0xa4, 0x31, 0x04, 0x81, 0xe3, 0x28, 0xab, 0xce, 0x95, 0x8a, 0x28, 0x3d, 0xbf, - 0xb8, 0x3f, 0x57, 0x62, 0x28, 0x03, 0x41, 0xf9, 0xec, 0xf7, 0xe3, 0x34, 0xbb, 0x39, 0xc0, 0x23, 0x88, 0x05, 0x60, - 0xbf, 0x9f, 0xf3, 0x8b, 0x75, 0x5d, 0x8b, 0x62, 0x58, 0x8a, 0xdb, 0xe0, 0xe4, 0x58, 0x3e, 0xe8, 0x0c, 0xb1, 0x7c, - 0x0c, 0x0e, 0xfe, 0x2b, 0xc9, 0xb3, 0xe4, 0x23, 0x0b, 0x1e, 0x6d, 0x32, 0x76, 0xd2, 0x3a, 0x68, 0xc6, 0x4d, 0x70, - 0x02, 0x6d, 0x3d, 0x38, 0xcd, 0xf3, 0xe3, 0x43, 0xf9, 0xc5, 0xc9, 0xf1, 0x61, 0x9a, 0xdd, 0x9c, 0x38, 0xd1, 0x00, - 0xac, 0x71, 0x2f, 0xe2, 0xae, 0xd9, 0xcb, 0x3b, 0x78, 0xf1, 0x26, 0x3c, 0x34, 0xec, 0x0e, 0x88, 0x8c, 0x74, 0x2c, - 0x15, 0x14, 0x33, 0x85, 0x31, 0x1c, 0xee, 0xdb, 0x6d, 0x68, 0x2c, 0x8f, 0x12, 0x07, 0x96, 0xa7, 0x04, 0x76, 0x08, - 0xb3, 0xd0, 0x84, 0xd0, 0xa4, 0x21, 0xa1, 0x06, 0x0f, 0x8a, 0x09, 0x2d, 0x1b, 0x0a, 0xe7, 0xdd, 0xeb, 0x78, 0xa5, - 0x25, 0x6d, 0x4a, 0x72, 0xa1, 0x5b, 0x3f, 0xf3, 0xc6, 0x31, 0x6a, 0x8f, 0xaa, 0x86, 0xf3, 0xea, 0x15, 0xfb, 0x06, - 0x16, 0x84, 0xab, 0x61, 0x4d, 0x83, 0x16, 0x69, 0x01, 0xe1, 0xa8, 0x2b, 0xd3, 0xe3, 0x34, 0x9c, 0x17, 0x54, 0x2c, - 0x08, 0x3b, 0x09, 0x37, 0xc8, 0xdb, 0x17, 0x54, 0xb2, 0xfa, 0xa2, 0xb1, 0xd8, 0x9a, 0x72, 0x76, 0x4e, 0x1e, 0x6d, - 0x64, 0xcc, 0xde, 0x82, 0x9d, 0xf8, 0xf3, 0x55, 0xc7, 0x17, 0xc3, 0x25, 0x07, 0x27, 0xa0, 0xe0, 0xe0, 0xbf, 0xd2, - 0x8b, 0xdc, 0x4c, 0x8a, 0x5c, 0x91, 0xcb, 0xb8, 0x48, 0x73, 0xfe, 0x21, 0xbe, 0xf8, 0x01, 0xf3, 0x3c, 0xbf, 0xc8, - 0x9f, 0x41, 0x86, 0x26, 0x38, 0x79, 0xb4, 0x49, 0xea, 0xd1, 0x8b, 0x37, 0x1f, 0x5e, 0x7d, 0xf8, 0xe7, 0xf9, 0xb3, - 0xd3, 0x0f, 0x2f, 0xbe, 0x7f, 0xfb, 0xfe, 0xd5, 0x8b, 0xb3, 0xb9, 0xf1, 0xba, 0x95, 0x60, 0x6e, 0x64, 0xb1, 0xdd, - 0xda, 0x7c, 0xbf, 0xbc, 0x79, 0xfe, 0xe2, 0xe5, 0xab, 0x37, 0x2f, 0x9e, 0x37, 0x72, 0x2e, 0xdb, 0x0d, 0x81, 0x1d, - 0x1a, 0x67, 0x05, 0x2f, 0xa1, 0x78, 0x75, 0xbb, 0xc3, 0x66, 0x2b, 0x0c, 0x42, 0xbf, 0xe9, 0x2a, 0x5c, 0x03, 0x2c, - 0xb2, 0x03, 0xb5, 0x59, 0xa0, 0xe1, 0x42, 0x6f, 0x1c, 0x77, 0x89, 0xb9, 0xbd, 0x79, 0x81, 0xdf, 0xbd, 0x17, 0xb7, - 0xba, 0x2b, 0x6a, 0x84, 0x24, 0xbc, 0xd8, 0xec, 0xd9, 0xef, 0xc7, 0xae, 0x48, 0x0f, 0xe5, 0x1e, 0xb2, 0x5c, 0xf8, - 0xd5, 0x04, 0x07, 0xca, 0xbc, 0x30, 0x80, 0xe8, 0x18, 0xc1, 0xc9, 0xf1, 0xa1, 0x9b, 0xfb, 0xe4, 0xf7, 0xe8, 0x27, - 0xa7, 0x73, 0x58, 0x2a, 0x8c, 0x83, 0x9f, 0xb6, 0x73, 0x2c, 0x02, 0x7d, 0xb6, 0x07, 0xa7, 0x5c, 0x41, 0x9a, 0x5c, - 0x09, 0x12, 0x99, 0x49, 0x94, 0x66, 0x33, 0xba, 0xb4, 0xdf, 0xd5, 0x5f, 0xdb, 0x67, 0x14, 0x43, 0xf0, 0xa2, 0x12, - 0x25, 0xd8, 0xb8, 0x38, 0x89, 0x49, 0x0e, 0x82, 0x0f, 0x1e, 0x40, 0xef, 0xda, 0xa1, 0x2e, 0x0e, 0x9c, 0x90, 0x32, - 0xd8, 0xcf, 0x4e, 0xa2, 0x0f, 0xe3, 0x74, 0xd8, 0xfe, 0xd4, 0xe9, 0xee, 0xef, 0xc4, 0xfe, 0x38, 0x50, 0x5d, 0x6c, - 0x11, 0x1d, 0xd3, 0xec, 0xfd, 0x21, 0x49, 0xe6, 0x6f, 0xff, 0x4f, 0x73, 0x4f, 0xbb, 0xdd, 0xb6, 0x71, 0xe5, 0xff, - 0x3e, 0x05, 0x0c, 0xbb, 0x0e, 0x60, 0x03, 0x10, 0x40, 0x8a, 0x92, 0x4c, 0x8a, 0x52, 0x13, 0xdb, 0x39, 0x51, 0xaa, - 0xd4, 0x39, 0x8e, 0xea, 0x6d, 0xa3, 0xe8, 0x98, 0x43, 0x70, 0x48, 0xa2, 0x02, 0x01, 0x1e, 0x00, 0x94, 0xa8, 0xd0, - 0xe8, 0x53, 0xec, 0xff, 0xed, 0x73, 0xec, 0xfe, 0xeb, 0x13, 0xed, 0x23, 0xec, 0xb9, 0x77, 0x3e, 0x30, 0xf8, 0x22, - 0xa9, 0xc4, 0x69, 0xf7, 0xa4, 0xaa, 0x89, 0xc1, 0xcc, 0x60, 0xe6, 0xce, 0xcc, 0x9d, 0xfb, 0x7d, 0x03, 0xeb, 0x3f, - 0x62, 0x6b, 0x46, 0xac, 0x05, 0xb1, 0x6e, 0xd3, 0x9b, 0xbc, 0x71, 0xcd, 0x64, 0xba, 0x1b, 0x4c, 0x89, 0x68, 0x18, - 0x10, 0x37, 0x83, 0x73, 0x33, 0x9c, 0xc6, 0x0f, 0xc4, 0x05, 0x77, 0x45, 0x92, 0x19, 0x15, 0x89, 0x66, 0xc4, 0xdb, - 0x8c, 0x43, 0xc6, 0x2c, 0xc1, 0xcb, 0x30, 0xe8, 0xe3, 0xba, 0xa1, 0x6a, 0x37, 0x02, 0xc2, 0x18, 0x43, 0xf3, 0x09, - 0xb7, 0xac, 0x08, 0x1c, 0x3f, 0x4b, 0xc2, 0x3f, 0xd2, 0x07, 0x20, 0x5e, 0xd3, 0x2c, 0x5e, 0x02, 0xcb, 0x42, 0x66, - 0x5c, 0x04, 0x65, 0x19, 0xe9, 0x7e, 0x1f, 0x84, 0x64, 0x59, 0xb8, 0xe9, 0x81, 0xee, 0x75, 0xb2, 0x78, 0x36, 0x0b, - 0xa9, 0xa1, 0x8b, 0x1c, 0x2a, 0xba, 0x25, 0x3f, 0x73, 0xfe, 0xc4, 0x15, 0x81, 0x4b, 0xcd, 0xbc, 0xed, 0xf0, 0x0a, - 0xe8, 0x51, 0x19, 0xd9, 0x8f, 0x11, 0xf0, 0x28, 0xa2, 0xbe, 0x43, 0x2d, 0x0f, 0x5f, 0xe3, 0x02, 0x39, 0xd8, 0x93, - 0x78, 0x35, 0x0e, 0xa9, 0x8d, 0x07, 0x0a, 0x3e, 0xb9, 0x19, 0xaf, 0xc6, 0x63, 0x48, 0x56, 0xf3, 0xc4, 0xb5, 0x20, - 0xfc, 0x4e, 0x9c, 0x22, 0x5b, 0x9c, 0x9b, 0x03, 0x80, 0xa2, 0x93, 0x95, 0x87, 0xcf, 0xb2, 0x77, 0x82, 0xc4, 0x8b, - 0x7d, 0x20, 0x03, 0x16, 0xb8, 0x01, 0x2f, 0x0c, 0xf5, 0x1f, 0x60, 0x7f, 0xa7, 0xfa, 0xa0, 0x09, 0xb9, 0x0c, 0xaf, - 0xf5, 0x1f, 0x70, 0xb1, 0x30, 0x89, 0xf3, 0x6b, 0x76, 0x3e, 0x74, 0x4b, 0x67, 0xba, 0xff, 0x15, 0xa6, 0x73, 0x00, - 0xd9, 0xf7, 0x9b, 0x80, 0xcc, 0xa2, 0x38, 0xcd, 0x02, 0x5f, 0xbf, 0x19, 0x5c, 0x04, 0xc6, 0xf5, 0x22, 0x33, 0xcc, - 0x1b, 0xcb, 0xcf, 0xd4, 0x4c, 0x30, 0x02, 0x25, 0x63, 0x22, 0x98, 0xb6, 0x4a, 0xea, 0x19, 0xdd, 0x5a, 0x51, 0x20, - 0x7f, 0xac, 0xe4, 0x67, 0x43, 0xa8, 0x57, 0x49, 0x2b, 0x83, 0xf9, 0xb1, 0x74, 0x6c, 0x69, 0x0e, 0x18, 0xc3, 0xf6, - 0x7a, 0xb5, 0x41, 0x62, 0x21, 0x2b, 0xee, 0x63, 0x0c, 0x85, 0x2c, 0xfc, 0x87, 0xd8, 0xf3, 0x13, 0xd5, 0xf6, 0xb5, - 0x74, 0xb3, 0x8f, 0xbe, 0x2c, 0x53, 0x1e, 0x40, 0x21, 0x80, 0xe1, 0x49, 0x14, 0x67, 0x1a, 0xc4, 0xf7, 0x81, 0x2f, - 0x8e, 0xaa, 0xb6, 0x72, 0xbc, 0x57, 0xc3, 0xcc, 0x39, 0xba, 0xf9, 0x0a, 0xaf, 0x57, 0x83, 0x47, 0x79, 0x2b, 0x05, - 0xf2, 0x60, 0x3c, 0x53, 0x0a, 0x0b, 0x98, 0xc5, 0x97, 0xf1, 0x7d, 0x55, 0x1d, 0xf4, 0x7a, 0xb4, 0xfb, 0x76, 0x37, - 0x04, 0x05, 0x2f, 0x92, 0x1b, 0x1a, 0x3c, 0x3f, 0xab, 0x20, 0xa5, 0x2a, 0xa7, 0x0a, 0xed, 0x5f, 0x04, 0x95, 0x94, - 0x81, 0xb9, 0x1c, 0xde, 0x36, 0x80, 0xf4, 0x38, 0x21, 0x30, 0xca, 0x91, 0x6c, 0x95, 0xc9, 0x9f, 0x84, 0xc3, 0x4b, - 0x79, 0xdc, 0xe9, 0x10, 0xa5, 0xb2, 0xf3, 0x60, 0x36, 0xd7, 0xcf, 0x33, 0xbe, 0x23, 0x55, 0x7a, 0xf7, 0x23, 0xbc, - 0xea, 0x37, 0xbd, 0x81, 0x84, 0x54, 0x0d, 0xf5, 0xc3, 0xf8, 0x1e, 0xbc, 0xd9, 0x8b, 0x5e, 0x39, 0x35, 0xdd, 0xda, - 0xb9, 0xf9, 0x52, 0xd6, 0x80, 0xac, 0xe2, 0x66, 0x7f, 0x4b, 0x83, 0xf6, 0x6f, 0x56, 0x7b, 0xb1, 0xe2, 0x47, 0x8d, - 0xc1, 0xfe, 0x2c, 0x63, 0xa8, 0xf4, 0x32, 0x88, 0x86, 0xd1, 0x99, 0x2c, 0x5a, 0x90, 0x35, 0x36, 0x30, 0xcf, 0xeb, - 0x45, 0xfd, 0xc8, 0x8a, 0x87, 0xf1, 0x9e, 0x75, 0x63, 0x6e, 0x78, 0x4c, 0xcf, 0x47, 0x29, 0xcd, 0xce, 0x1b, 0xc6, - 0x02, 0x1b, 0x61, 0xf8, 0x6c, 0x13, 0xe5, 0xa3, 0x7e, 0x4b, 0x15, 0xf6, 0xd6, 0x22, 0xbb, 0x3b, 0x89, 0xb7, 0x76, - 0x12, 0xe7, 0xa3, 0xc7, 0x6c, 0x73, 0x9f, 0xef, 0xf2, 0x70, 0xe0, 0x37, 0x61, 0xfa, 0xb0, 0x71, 0xcf, 0x43, 0x30, - 0xda, 0xd2, 0x6e, 0x4f, 0x70, 0xb7, 0xff, 0xef, 0x7f, 0xfd, 0xe7, 0x7f, 0x17, 0x64, 0xef, 0x38, 0x39, 0x3b, 0xc5, - 0x8c, 0x64, 0x40, 0xc5, 0xe5, 0xa7, 0x07, 0xec, 0x37, 0x16, 0xff, 0x8b, 0x46, 0x45, 0xc4, 0xa8, 0xfe, 0x47, 0x3d, - 0x83, 0x22, 0x8b, 0xbb, 0xc8, 0xa1, 0xae, 0x90, 0xe0, 0x40, 0x43, 0x45, 0xcb, 0x55, 0x86, 0x51, 0xbf, 0x61, 0x1c, - 0x34, 0xd7, 0x35, 0x8c, 0x22, 0x0c, 0xb4, 0x58, 0xc1, 0x0c, 0xe6, 0xba, 0x16, 0x4c, 0xea, 0x65, 0x9c, 0xc9, 0x05, - 0x62, 0x04, 0xa9, 0x38, 0x94, 0x99, 0xc3, 0x63, 0xc2, 0xa7, 0xe3, 0x5b, 0x45, 0xca, 0x0c, 0xc3, 0x47, 0xdd, 0x72, - 0xc3, 0xfd, 0xec, 0xb3, 0x7e, 0x06, 0xfb, 0x4e, 0x73, 0x04, 0xf0, 0x3d, 0x87, 0xed, 0x33, 0x7c, 0xb6, 0x21, 0xc0, - 0xaf, 0xe5, 0x3a, 0x4c, 0xb4, 0xf0, 0x19, 0x2c, 0xa6, 0x07, 0x88, 0x9d, 0x95, 0x6b, 0x68, 0x34, 0x34, 0xe4, 0xa6, - 0x41, 0xcb, 0x24, 0x58, 0x90, 0xe4, 0x81, 0x59, 0x12, 0x59, 0xaa, 0xb9, 0x91, 0xa9, 0x6b, 0x8c, 0x7a, 0x63, 0xf3, - 0x65, 0x84, 0x9c, 0xae, 0xfd, 0x41, 0x96, 0x51, 0x3e, 0x39, 0x81, 0xbe, 0x74, 0xf8, 0xd6, 0x47, 0xfd, 0x25, 0x75, - 0x26, 0x34, 0x23, 0x41, 0xc8, 0x9a, 0x0c, 0x8c, 0xa8, 0x65, 0x36, 0x51, 0x79, 0x36, 0x69, 0x19, 0x65, 0xe3, 0x64, - 0x18, 0x05, 0xc7, 0xc6, 0x8d, 0x33, 0x43, 0x14, 0xda, 0xbc, 0x80, 0xec, 0x9d, 0xb2, 0x97, 0x00, 0xf8, 0x49, 0x7d, - 0x17, 0xe5, 0xed, 0x4b, 0xd4, 0x50, 0xfb, 0xb7, 0x59, 0x36, 0x0a, 0xcb, 0x96, 0xc2, 0xb2, 0xd1, 0xc8, 0x8f, 0x27, - 0xf4, 0xcf, 0xef, 0x2f, 0x64, 0xa6, 0x3f, 0x10, 0x5a, 0x8f, 0xf8, 0x25, 0x12, 0x21, 0x37, 0x91, 0x20, 0x27, 0xc1, - 0x72, 0xf2, 0x69, 0x72, 0xab, 0x25, 0xb9, 0xae, 0x9d, 0xb3, 0x49, 0xd3, 0x09, 0x9b, 0xc9, 0x30, 0xc6, 0x56, 0x49, - 0x7e, 0x7a, 0xc0, 0x6a, 0x33, 0x2a, 0x97, 0x55, 0x02, 0xf8, 0x25, 0x30, 0xeb, 0x02, 0x7c, 0x90, 0x94, 0x78, 0xe8, - 0x15, 0xe2, 0x05, 0x67, 0x81, 0xaa, 0x41, 0xef, 0xbc, 0xcc, 0xb8, 0x60, 0x2b, 0xbd, 0x38, 0xd4, 0x31, 0x04, 0x26, - 0x12, 0xe7, 0x5a, 0xab, 0x9c, 0x9c, 0xa2, 0x13, 0x21, 0xf2, 0xe9, 0xf3, 0x0e, 0x1e, 0x75, 0xa4, 0x00, 0x6b, 0x43, - 0x29, 0xc9, 0x75, 0x6d, 0xc1, 0x19, 0x25, 0x1e, 0x01, 0x0d, 0xc2, 0xa3, 0xb8, 0x70, 0xcf, 0xea, 0xda, 0x82, 0xac, - 0x71, 0xe6, 0xe2, 0x0d, 0x59, 0x1b, 0x1e, 0x7f, 0x55, 0x9c, 0xc9, 0xa8, 0xbc, 0xe0, 0x02, 0xc5, 0x80, 0xef, 0x93, - 0x14, 0xd0, 0xcd, 0xd1, 0xa6, 0xa4, 0x61, 0x71, 0xe7, 0x62, 0x71, 0x27, 0x2d, 0x8b, 0x3b, 0xd9, 0xb2, 0xb8, 0x21, - 0x5f, 0x48, 0x4d, 0x82, 0x2e, 0x41, 0x7f, 0xd6, 0x02, 0x29, 0x32, 0x06, 0xa3, 0xcf, 0x0f, 0x28, 0xc2, 0xc9, 0x4e, - 0x43, 0xb0, 0xe7, 0x6c, 0x81, 0x55, 0x13, 0x5c, 0x14, 0x40, 0xd4, 0x27, 0x2e, 0x8f, 0xab, 0x44, 0xad, 0xd6, 0x1c, - 0xb6, 0xaa, 0x5f, 0xa5, 0x79, 0x43, 0xd6, 0xd0, 0x32, 0xe6, 0x2d, 0x33, 0x9d, 0x6f, 0x99, 0xa9, 0x5f, 0x3a, 0xf3, - 0x7c, 0xda, 0xec, 0xf4, 0xaa, 0x93, 0x62, 0xa4, 0xd0, 0x3a, 0xc3, 0x2d, 0x53, 0xde, 0x87, 0xed, 0xb8, 0x58, 0xd9, - 0x51, 0x4b, 0x92, 0xa6, 0xf7, 0x71, 0x02, 0x4a, 0x62, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x11, 0x44, 0x3c, 0xfe, 0x54, - 0xeb, 0x66, 0x2a, 0xde, 0xab, 0x5b, 0xaa, 0xd3, 0xeb, 0xb1, 0x1a, 0x4b, 0x92, 0x65, 0x34, 0x41, 0xa0, 0x13, 0x48, - 0x54, 0xf0, 0xff, 0x64, 0x9b, 0x35, 0xe0, 0x90, 0xd0, 0x2c, 0xae, 0x03, 0x44, 0xed, 0x4b, 0xe0, 0x83, 0x12, 0x41, - 0x34, 0x2b, 0xb1, 0x2c, 0x13, 0x09, 0x78, 0x4e, 0xdf, 0x24, 0x8a, 0xb7, 0xa5, 0x77, 0x64, 0x3a, 0x4b, 0x32, 0xf9, - 0x01, 0x6c, 0x11, 0x8c, 0x8e, 0x05, 0x7e, 0x05, 0x6a, 0xe4, 0xca, 0x84, 0x31, 0x66, 0x7e, 0x81, 0x24, 0x11, 0x4b, - 0x72, 0xab, 0x4d, 0x70, 0xf8, 0x26, 0xf6, 0xf4, 0x66, 0xd3, 0xc9, 0x0f, 0x66, 0x81, 0x59, 0xc3, 0x9a, 0x80, 0xda, - 0xc2, 0xe1, 0x99, 0x94, 0xc0, 0x84, 0x96, 0x77, 0x64, 0x82, 0xb2, 0xea, 0x1a, 0x52, 0x30, 0xbb, 0x42, 0xbc, 0x35, - 0x4a, 0xe0, 0x76, 0xbb, 0x76, 0x6f, 0xf2, 0xe7, 0x33, 0xfc, 0xe5, 0xdd, 0xe4, 0xcf, 0xc7, 0xf8, 0xab, 0x73, 0x83, - 0xc9, 0x36, 0x1b, 0xc4, 0x7a, 0xca, 0x9c, 0xf5, 0xb3, 0xd2, 0x7e, 0x62, 0x26, 0xb3, 0x8f, 0xd8, 0x36, 0x7c, 0x81, - 0x9f, 0x3e, 0xdb, 0x44, 0xe0, 0x24, 0xae, 0xce, 0x21, 0x75, 0x12, 0x33, 0x6f, 0x2c, 0x9f, 0xb5, 0x94, 0x8f, 0xcd, - 0x7f, 0x31, 0x81, 0x80, 0xbb, 0x24, 0x2e, 0xee, 0x94, 0xb2, 0x50, 0xf2, 0xe3, 0x38, 0x88, 0x48, 0xf2, 0xf0, 0x91, - 0xc9, 0x14, 0x0c, 0xc1, 0x67, 0x4b, 0x61, 0x2b, 0x63, 0x05, 0xcb, 0x1a, 0xfa, 0x4c, 0xd1, 0x49, 0x3d, 0x70, 0x0a, - 0x61, 0xf8, 0x97, 0x44, 0xa1, 0x3d, 0x4b, 0xe2, 0x28, 0xbe, 0x20, 0xa5, 0x0f, 0x7d, 0x7c, 0xb6, 0x31, 0x68, 0xbd, - 0x9b, 0x9a, 0xb8, 0xa2, 0x44, 0x10, 0xc0, 0xf2, 0xa0, 0x68, 0x6b, 0x31, 0x09, 0xfa, 0xa8, 0x82, 0x1f, 0xc7, 0x6b, - 0xfb, 0xd9, 0x26, 0x3b, 0xd7, 0x17, 0x24, 0xb9, 0xa5, 0x13, 0xdb, 0x0f, 0x12, 0x3f, 0xa4, 0x7a, 0x5f, 0x1f, 0x87, - 0x24, 0xba, 0xe5, 0x8f, 0x76, 0xbc, 0xca, 0xd0, 0xa8, 0x66, 0xa7, 0x24, 0x4c, 0xc0, 0x84, 0x09, 0xf0, 0x91, 0x41, - 0x6b, 0x80, 0x82, 0xf6, 0x5a, 0x8a, 0xbf, 0x0b, 0x82, 0xb2, 0xa8, 0x65, 0x81, 0x4d, 0x38, 0xd8, 0xf9, 0x80, 0x93, - 0xbd, 0xa5, 0xe3, 0x7a, 0xe9, 0x96, 0x3a, 0x55, 0xa6, 0xf7, 0x90, 0x59, 0x62, 0x3f, 0x62, 0x0f, 0xbf, 0xfc, 0x73, - 0x50, 0xf2, 0x98, 0xcf, 0x71, 0xe2, 0xb0, 0xfd, 0x83, 0x6a, 0x63, 0x92, 0xa6, 0xab, 0x05, 0x9d, 0x30, 0x7b, 0x82, - 0xf3, 0x62, 0x28, 0x65, 0x46, 0x5c, 0x1d, 0xce, 0x4f, 0xab, 0xce, 0xf1, 0xe1, 0x6b, 0xb0, 0x73, 0x02, 0x62, 0x30, - 0x9e, 0x4e, 0xf5, 0x42, 0xbc, 0xb6, 0xa3, 0x99, 0x77, 0xf8, 0xd3, 0xea, 0xeb, 0xb7, 0xee, 0xd7, 0xb2, 0x71, 0xa4, - 0x9b, 0xf9, 0x48, 0x18, 0x6d, 0x70, 0x9a, 0x56, 0x19, 0xaf, 0x98, 0xd1, 0x94, 0x44, 0xed, 0xd3, 0xb9, 0x2e, 0xed, - 0xb2, 0x25, 0xa5, 0x13, 0xb0, 0xe7, 0xb7, 0x6a, 0xa5, 0x1f, 0x43, 0x7a, 0x47, 0xa5, 0x41, 0x48, 0xfd, 0x63, 0x0d, - 0x2d, 0x30, 0x62, 0x25, 0x37, 0x34, 0xe1, 0x84, 0x95, 0x32, 0xa5, 0x11, 0xce, 0x81, 0xcf, 0x5c, 0xdd, 0xe5, 0x95, - 0x5d, 0x3d, 0xb2, 0x74, 0x65, 0x00, 0xad, 0x23, 0x3b, 0x6f, 0x29, 0xef, 0x63, 0xba, 0xfa, 0xe6, 0xb1, 0x59, 0x9e, - 0xd9, 0x87, 0x08, 0xff, 0x1c, 0x4e, 0x21, 0x6c, 0x7e, 0x43, 0x4a, 0x22, 0x07, 0x6d, 0x10, 0x6b, 0x92, 0x5a, 0xeb, - 0x4c, 0xf0, 0x29, 0x6c, 0xa4, 0xd1, 0x59, 0x40, 0x08, 0x86, 0x1b, 0xd7, 0x46, 0x2b, 0xcf, 0x7c, 0x8c, 0x69, 0xa0, - 0x23, 0x9a, 0xa6, 0xad, 0x00, 0x93, 0x8b, 0x6e, 0xe9, 0x45, 0xed, 0x32, 0x3c, 0x8a, 0x72, 0xcb, 0xb5, 0xe0, 0x56, - 0xc6, 0x09, 0x56, 0xbf, 0x85, 0x18, 0xfe, 0xe3, 0x82, 0x5b, 0xb9, 0x25, 0xb3, 0xb1, 0xce, 0x2d, 0x90, 0xda, 0xde, - 0xdf, 0xeb, 0x7c, 0x50, 0xa5, 0x9b, 0xb2, 0x71, 0x68, 0x46, 0x09, 0xfb, 0xd5, 0xc4, 0xb4, 0xd8, 0x81, 0x18, 0x53, - 0x05, 0xc5, 0xd1, 0xe9, 0x94, 0xfa, 0x59, 0x6a, 0x0a, 0x59, 0xab, 0x8c, 0x39, 0x0d, 0xbe, 0x86, 0x4f, 0x86, 0xfa, - 0x9f, 0x20, 0xf2, 0x86, 0x08, 0xcd, 0xc6, 0x07, 0x24, 0xf8, 0x9d, 0x66, 0x30, 0xb1, 0x1e, 0xcb, 0x20, 0xe2, 0x5f, - 0xf9, 0xf4, 0x49, 0x98, 0x48, 0x94, 0xca, 0x71, 0x68, 0xfc, 0x0a, 0x28, 0xf6, 0x45, 0x2c, 0x6d, 0xe1, 0xb6, 0x23, - 0xa0, 0x6d, 0xc7, 0x77, 0xe3, 0x7d, 0xdd, 0xf3, 0xdc, 0x5c, 0xb7, 0xc0, 0xe3, 0xf3, 0x76, 0xdf, 0x43, 0x8f, 0xad, - 0xba, 0xd0, 0x6a, 0x15, 0x3d, 0xa6, 0x5d, 0xc7, 0x7b, 0xe5, 0xe9, 0x16, 0x33, 0xb4, 0x55, 0x70, 0x9b, 0x1f, 0xdf, - 0xd1, 0xe4, 0x57, 0x4f, 0xa5, 0xdc, 0xf9, 0x7e, 0xe3, 0x39, 0xf2, 0x5c, 0x40, 0xc2, 0x59, 0xbc, 0x7c, 0xc4, 0x14, - 0xba, 0xba, 0xa5, 0xfb, 0x61, 0x9c, 0x52, 0x75, 0x0e, 0x4c, 0x5e, 0xf1, 0x2b, 0x27, 0xf1, 0xfd, 0xfb, 0xb7, 0x3f, - 0xfc, 0xa0, 0x5b, 0x98, 0x3f, 0x38, 0x55, 0x7b, 0xe7, 0x1b, 0x6a, 0x07, 0xf6, 0x6f, 0xdc, 0x77, 0xec, 0x86, 0x61, - 0x7c, 0x65, 0x79, 0xcf, 0xb1, 0xb2, 0xda, 0x96, 0xe3, 0x37, 0x0f, 0xff, 0x32, 0x63, 0x06, 0xf7, 0x9a, 0x57, 0x03, - 0x6e, 0xd8, 0x7e, 0xbd, 0x95, 0x4a, 0x16, 0x41, 0xf4, 0xb1, 0xa1, 0x94, 0xac, 0x1b, 0x4a, 0x51, 0x36, 0x58, 0xc5, - 0x1f, 0xab, 0x78, 0xa1, 0xdc, 0xce, 0x90, 0xfe, 0x7d, 0x17, 0xb8, 0x14, 0x96, 0xe6, 0x57, 0x0c, 0x9a, 0xe7, 0x7f, - 0xa8, 0x8e, 0xba, 0xa1, 0x98, 0xf3, 0x21, 0x12, 0xb6, 0x5c, 0x97, 0xa3, 0xaa, 0xc9, 0xcb, 0x94, 0x9b, 0xda, 0xb8, - 0x59, 0x60, 0xfa, 0xa4, 0x70, 0xbe, 0xd9, 0x51, 0x19, 0x84, 0xb4, 0xb2, 0x76, 0x41, 0x13, 0x6c, 0xed, 0x3d, 0xff, - 0xe7, 0x3f, 0x1c, 0xe7, 0x9f, 0xff, 0xd8, 0x59, 0x15, 0xfa, 0xce, 0x81, 0x1d, 0xde, 0x55, 0x33, 0x1f, 0xa1, 0xd0, - 0x29, 0x1b, 0xbe, 0x1e, 0x8d, 0x06, 0x46, 0x09, 0x64, 0xe0, 0x33, 0x72, 0x5e, 0x2b, 0xe1, 0x78, 0xb5, 0xef, 0x9a, - 0x18, 0xcc, 0x01, 0x1a, 0xca, 0xeb, 0xab, 0x75, 0xb3, 0x33, 0xa7, 0x84, 0x5a, 0x5f, 0xb5, 0x9d, 0x0e, 0xa5, 0x98, - 0xb8, 0x2e, 0x1f, 0x99, 0x3c, 0xc7, 0x00, 0x8c, 0x8b, 0xab, 0x0f, 0x4a, 0x2b, 0x07, 0x7e, 0x36, 0x59, 0x79, 0x7c, - 0xbc, 0xac, 0x32, 0x42, 0xba, 0xd7, 0x08, 0x59, 0xdb, 0xf2, 0x18, 0x79, 0x7f, 0xb5, 0x51, 0xb2, 0x72, 0x31, 0x4e, - 0x0b, 0x45, 0x66, 0x3c, 0xca, 0x08, 0x67, 0x9a, 0xb8, 0x4a, 0xb0, 0xa4, 0xf6, 0xad, 0xa8, 0x2e, 0x94, 0x21, 0xec, - 0x5e, 0xf6, 0x73, 0x3d, 0x8c, 0xef, 0xd1, 0x59, 0x4f, 0xd5, 0x27, 0x73, 0x61, 0xc8, 0x69, 0x9a, 0x25, 0x71, 0x34, - 0x3b, 0xab, 0x5c, 0xde, 0x75, 0x3b, 0x1f, 0x90, 0x60, 0xb1, 0xaa, 0x65, 0xb1, 0x89, 0x3a, 0xca, 0xed, 0x5b, 0xea, - 0x7c, 0xc7, 0x4c, 0x98, 0x6a, 0x42, 0xb9, 0x1c, 0x45, 0xd7, 0x0d, 0x6a, 0x70, 0x95, 0x94, 0x2b, 0xbf, 0x96, 0x8f, - 0x07, 0x1c, 0xae, 0x67, 0xa3, 0x1c, 0x93, 0x1d, 0xbd, 0x6b, 0x33, 0x10, 0xfd, 0x7e, 0xb7, 0x81, 0xe8, 0xd5, 0x5e, - 0x06, 0xa2, 0xdf, 0x7f, 0x76, 0x03, 0xd1, 0x77, 0xaa, 0x81, 0x28, 0x6c, 0xe9, 0xb7, 0x74, 0x2f, 0xab, 0x4d, 0x61, - 0x0d, 0x15, 0xdf, 0xa7, 0x43, 0x8f, 0x53, 0xa6, 0xa9, 0x3f, 0xa7, 0xc0, 0x6d, 0xf3, 0x6d, 0x1a, 0xc6, 0x33, 0xb0, - 0xe0, 0xfc, 0xed, 0x6d, 0x2d, 0xc3, 0x78, 0xa6, 0x5a, 0x5a, 0xa6, 0x3c, 0xdc, 0x73, 0x11, 0xc2, 0x8d, 0x59, 0x37, - 0xba, 0x96, 0x38, 0x7b, 0xf6, 0xa1, 0xa9, 0xa4, 0xb4, 0x97, 0xa6, 0xab, 0x1d, 0x61, 0xff, 0xd8, 0x47, 0xd3, 0x49, - 0xd9, 0xb0, 0xf3, 0x32, 0x96, 0x49, 0x7b, 0x8a, 0x1e, 0xa4, 0x8b, 0x00, 0x0b, 0x12, 0xb3, 0xd1, 0x7f, 0x5a, 0x7b, - 0x5f, 0x5d, 0x7b, 0x83, 0xae, 0x07, 0x91, 0x19, 0x80, 0x57, 0xc3, 0x02, 0x77, 0xd0, 0xed, 0x42, 0xc1, 0xbd, 0x52, - 0xd0, 0x81, 0x82, 0x40, 0x29, 0xe8, 0x41, 0x81, 0xaf, 0x14, 0x1c, 0x41, 0xc1, 0x44, 0x29, 0x38, 0x86, 0x82, 0x3b, - 0x3d, 0xbf, 0x2e, 0x12, 0x39, 0x1d, 0x9b, 0x37, 0x16, 0xe3, 0x0d, 0x44, 0xd9, 0xb1, 0xe5, 0x81, 0x19, 0x23, 0x99, - 0xf5, 0x63, 0x8b, 0xc9, 0xe9, 0xfa, 0x89, 0x75, 0x3f, 0xa7, 0x2c, 0x4a, 0xfc, 0x1b, 0xbc, 0x3a, 0x9c, 0x2c, 0x06, - 0xa7, 0x09, 0x11, 0x7d, 0x45, 0xc0, 0x41, 0xd3, 0x4d, 0x10, 0xbd, 0x0c, 0xe4, 0xca, 0x89, 0x08, 0x36, 0xca, 0x5a, - 0x16, 0xef, 0xd8, 0xe7, 0x6c, 0xb9, 0x05, 0x0a, 0x4b, 0x2e, 0x43, 0x95, 0xef, 0x7d, 0x0e, 0x7b, 0x9e, 0x37, 0x74, - 0xbc, 0x9a, 0x69, 0x97, 0xf1, 0x6c, 0xa7, 0x69, 0x8e, 0xfa, 0x0a, 0x46, 0xa9, 0x33, 0x0d, 0x88, 0x2d, 0xb6, 0x25, - 0xff, 0x16, 0x7b, 0xcc, 0xcb, 0xf5, 0x33, 0x18, 0x9b, 0x96, 0x31, 0xc3, 0x30, 0xf8, 0x0e, 0xc0, 0x48, 0x39, 0xf5, - 0x97, 0x00, 0x67, 0xe5, 0xf9, 0x8a, 0x28, 0xe3, 0x39, 0xfb, 0x8e, 0xa6, 0x29, 0x99, 0x89, 0xfa, 0xf5, 0x71, 0x82, - 0x31, 0x9c, 0x64, 0xa3, 0x10, 0x80, 0x20, 0x13, 0x0b, 0x6a, 0x36, 0x4f, 0x49, 0x7c, 0xaf, 0x81, 0x55, 0x1d, 0x6c, - 0xa8, 0xc2, 0xfe, 0x27, 0x70, 0x60, 0x09, 0xcb, 0x38, 0x08, 0x0e, 0xff, 0x1d, 0x0d, 0xab, 0x85, 0x19, 0x99, 0x55, - 0x8b, 0xd8, 0x3e, 0xc8, 0xd5, 0xb1, 0x49, 0x93, 0x98, 0x52, 0xe1, 0xaf, 0xb1, 0xcb, 0x08, 0xe3, 0xd9, 0x6f, 0x6a, - 0x94, 0xb1, 0xc5, 0x30, 0xe7, 0x36, 0xb5, 0x82, 0x6c, 0xe4, 0x20, 0x8c, 0x35, 0x07, 0x40, 0xd8, 0x8f, 0xb2, 0xb9, - 0x8d, 0x7e, 0xa5, 0x46, 0x27, 0x32, 0x2d, 0x07, 0xd7, 0x76, 0x53, 0xf5, 0xa6, 0xef, 0x27, 0xb3, 0x31, 0x31, 0xbc, - 0xce, 0xb1, 0x25, 0xfe, 0x1c, 0xb7, 0x67, 0xe6, 0xd8, 0x83, 0x36, 0x09, 0xee, 0x36, 0xd3, 0x38, 0xca, 0xec, 0x29, - 0x59, 0x04, 0xe1, 0x43, 0x7f, 0x11, 0x47, 0x71, 0xba, 0x24, 0x3e, 0x1d, 0x14, 0x7c, 0xf1, 0x00, 0xe3, 0xb4, 0x70, - 0x57, 0x61, 0xcf, 0xe9, 0x24, 0x74, 0xc1, 0x5a, 0xcb, 0x30, 0x2c, 0xd3, 0x90, 0xae, 0x73, 0xfe, 0xf9, 0x52, 0x65, - 0x56, 0x15, 0xb7, 0x1c, 0x6b, 0x01, 0x84, 0x25, 0x8f, 0xf1, 0x02, 0x91, 0xcd, 0x06, 0x4b, 0x32, 0xc1, 0xb0, 0xa4, - 0x4e, 0xa7, 0x97, 0xd0, 0x85, 0xe6, 0xf4, 0x5a, 0x3b, 0x4f, 0xe2, 0xfb, 0x33, 0x18, 0x2d, 0x36, 0xb6, 0x53, 0x1a, - 0x4e, 0xf1, 0x8d, 0x8d, 0x6e, 0x65, 0xa2, 0x1f, 0x1b, 0xf9, 0x69, 0xe8, 0x8d, 0x2e, 0x06, 0xf0, 0xba, 0xdf, 0xd1, - 0xdc, 0xc1, 0x22, 0x88, 0x6c, 0x36, 0x9d, 0x63, 0x77, 0xa9, 0xf4, 0xa5, 0xc2, 0xcf, 0xdc, 0x60, 0x75, 0x4f, 0x73, - 0x07, 0xc0, 0x73, 0x4d, 0xc3, 0xf8, 0xbe, 0x3f, 0x0f, 0x26, 0x13, 0x1a, 0x0d, 0x70, 0xcc, 0xb2, 0x90, 0x86, 0x61, - 0xb0, 0x4c, 0x83, 0x74, 0xb0, 0x20, 0x6b, 0xde, 0xeb, 0x61, 0x5b, 0xaf, 0x5d, 0xde, 0x6b, 0x77, 0xef, 0x5e, 0x95, - 0x6e, 0xc0, 0x85, 0x8d, 0xf5, 0xc3, 0x87, 0xd6, 0xd3, 0xdc, 0xca, 0x3c, 0xf7, 0xee, 0x75, 0x99, 0xd0, 0xcd, 0x82, - 0x24, 0xb3, 0x20, 0xea, 0xbb, 0xb9, 0x73, 0xb7, 0x61, 0x1b, 0xe3, 0xe9, 0xc9, 0xc9, 0x49, 0xee, 0x4c, 0xc4, 0x93, - 0x3b, 0x99, 0xe4, 0x8e, 0x2f, 0x9e, 0xa6, 0x53, 0xd7, 0x9d, 0x4e, 0x73, 0x27, 0x10, 0x05, 0xdd, 0x8e, 0x3f, 0xe9, - 0x76, 0x72, 0xe7, 0x5e, 0xa9, 0x91, 0x3b, 0x94, 0x3f, 0x25, 0x74, 0x32, 0xc0, 0x8d, 0xc4, 0xec, 0xbc, 0xfb, 0xc7, - 0xae, 0x9b, 0x23, 0x06, 0xb8, 0x2e, 0xe1, 0x26, 0x14, 0xd9, 0xdc, 0x6c, 0xf6, 0xae, 0xa9, 0x15, 0x9f, 0xf3, 0xfd, - 0xc6, 0x7a, 0x13, 0x92, 0xdc, 0xde, 0x68, 0xca, 0x2c, 0x08, 0x61, 0xd5, 0x36, 0x02, 0x0c, 0xf6, 0xba, 0x0f, 0xf1, - 0xfa, 0x06, 0xe3, 0x38, 0x81, 0x33, 0x9b, 0x90, 0x49, 0xb0, 0x4a, 0xfb, 0x5e, 0x67, 0xb9, 0x16, 0x45, 0x7c, 0xaf, - 0x17, 0x05, 0x78, 0xf6, 0xfa, 0x69, 0x1c, 0x06, 0x13, 0x51, 0xd4, 0x76, 0x96, 0xbc, 0x8e, 0x39, 0xc0, 0x68, 0x15, - 0x01, 0xc6, 0x5c, 0x21, 0x61, 0xa8, 0x39, 0xdd, 0x54, 0xa3, 0x24, 0x45, 0x49, 0xad, 0xe6, 0xa6, 0x0c, 0x2e, 0x18, - 0x99, 0xc2, 0x3b, 0x5c, 0xae, 0xe5, 0x9e, 0xf7, 0x8e, 0x96, 0xeb, 0xfc, 0x0f, 0x0b, 0x3a, 0x09, 0x88, 0x66, 0x14, - 0xbb, 0xc9, 0x73, 0x41, 0x9a, 0x6b, 0x6e, 0x5a, 0xb6, 0xa9, 0x38, 0x16, 0x10, 0xd7, 0xf4, 0x49, 0xb0, 0x58, 0xc6, - 0x49, 0x46, 0xa2, 0x2c, 0xcf, 0x47, 0x37, 0x79, 0x3e, 0xb8, 0x0a, 0x8c, 0xeb, 0xbf, 0x1a, 0xec, 0x9e, 0x66, 0xda, - 0x8f, 0xdc, 0xbc, 0xb1, 0xde, 0x52, 0xd5, 0x52, 0x0a, 0xae, 0x31, 0xb4, 0x92, 0x52, 0x2b, 0xb3, 0x5b, 0xb2, 0x5e, - 0x99, 0x01, 0x59, 0x56, 0x67, 0x96, 0x57, 0xe5, 0x2a, 0x78, 0x03, 0x41, 0x85, 0xb7, 0x74, 0x78, 0xa5, 0x58, 0x5d, - 0x01, 0xb1, 0x82, 0x95, 0x99, 0x53, 0xd1, 0xb3, 0x36, 0x9a, 0xf1, 0xcb, 0xdd, 0x34, 0xe3, 0x8f, 0xd9, 0x3e, 0x34, - 0xe3, 0x97, 0x9f, 0x9d, 0x66, 0x7c, 0x56, 0x77, 0x2a, 0xba, 0x88, 0x87, 0xba, 0x94, 0xd5, 0xc3, 0xd5, 0x94, 0xb0, - 0x70, 0x5d, 0x17, 0xbf, 0xd8, 0x07, 0x48, 0xf4, 0xc6, 0x12, 0x50, 0xb2, 0x9b, 0x1b, 0x68, 0xf1, 0x77, 0xd1, 0xf0, - 0x2f, 0x89, 0xfa, 0x3c, 0x9d, 0x0e, 0xdf, 0xc4, 0x4a, 0x81, 0x7c, 0xe2, 0xf6, 0x0f, 0xa5, 0xd0, 0x2a, 0xec, 0x8d, - 0xb0, 0x6e, 0xc6, 0xe4, 0x33, 0x10, 0x99, 0x81, 0x59, 0xf3, 0x4f, 0xa4, 0xfd, 0xe6, 0xa0, 0x3c, 0x04, 0x43, 0x9a, - 0x52, 0x0b, 0xff, 0xbb, 0x9a, 0x44, 0x70, 0x46, 0x33, 0xee, 0x30, 0xff, 0xd5, 0xc3, 0xc5, 0xc4, 0xb8, 0x88, 0xcd, - 0x3c, 0x48, 0xdf, 0x55, 0xbd, 0xdf, 0xb8, 0x16, 0x65, 0xa8, 0x4e, 0x27, 0xe7, 0x76, 0x93, 0x6a, 0x76, 0x79, 0x78, - 0xcd, 0x9a, 0x9f, 0x97, 0x66, 0xda, 0x57, 0x1b, 0x72, 0x0e, 0xb4, 0x76, 0x19, 0x73, 0xd7, 0xa3, 0x0d, 0xa7, 0x00, - 0x31, 0x71, 0x1f, 0x06, 0x0d, 0x98, 0xb0, 0xe6, 0xc1, 0x24, 0xcf, 0xcd, 0x81, 0x00, 0x84, 0x72, 0xd1, 0xd2, 0x5d, - 0x44, 0x5c, 0x7a, 0x2f, 0xad, 0x03, 0xb8, 0xae, 0x8d, 0x29, 0xd2, 0x2e, 0x40, 0x35, 0xcd, 0xd5, 0x6e, 0x1c, 0x66, - 0xba, 0xc6, 0xc0, 0xc7, 0x4c, 0x16, 0x94, 0x09, 0x81, 0x2e, 0x55, 0xc2, 0x5f, 0xbc, 0x12, 0x05, 0x75, 0xdb, 0x68, - 0x06, 0x1c, 0xd4, 0xad, 0x43, 0x88, 0x0f, 0x21, 0x9e, 0x66, 0x68, 0x87, 0xd7, 0xc1, 0x87, 0x5c, 0x97, 0xb4, 0x1f, - 0x6e, 0x3f, 0x60, 0xcf, 0x96, 0x24, 0xaa, 0xf0, 0x92, 0xbb, 0x6c, 0x7c, 0x81, 0x94, 0x48, 0xef, 0x2d, 0x27, 0xbd, - 0xd7, 0x5e, 0x6c, 0x44, 0x78, 0x9c, 0x8c, 0x2c, 0x6d, 0xe0, 0x1c, 0x11, 0xf7, 0x72, 0x8c, 0xa7, 0x44, 0xe2, 0x19, - 0xac, 0x52, 0xc0, 0x8d, 0xc8, 0x70, 0x22, 0xfe, 0x19, 0xf8, 0xab, 0x24, 0x8d, 0x93, 0xfe, 0x32, 0x0e, 0xa2, 0x8c, - 0x26, 0x39, 0x82, 0xea, 0x1a, 0xe1, 0x23, 0xc0, 0x73, 0xb3, 0x89, 0x97, 0xc4, 0x0f, 0xb2, 0x87, 0xbe, 0xcb, 0x49, - 0x0a, 0x77, 0xc0, 0xa9, 0x03, 0xb7, 0xb1, 0x7e, 0x9f, 0x43, 0xf3, 0x25, 0x12, 0x7e, 0x49, 0x9d, 0x9c, 0x51, 0xb7, - 0xf9, 0x40, 0x79, 0xcb, 0x02, 0x04, 0x01, 0xf9, 0x41, 0x12, 0x7b, 0x06, 0x58, 0x1e, 0x96, 0xda, 0x9d, 0xd0, 0x99, - 0x85, 0x58, 0x1b, 0xc4, 0xeb, 0xe2, 0xcf, 0xe9, 0x99, 0x9a, 0xdb, 0x5c, 0x0c, 0x14, 0x8f, 0xb9, 0xcf, 0xc8, 0xfa, - 0x04, 0xd2, 0xe9, 0x59, 0xfb, 0xd4, 0x1c, 0xd3, 0x69, 0x9c, 0x50, 0x16, 0x4c, 0xda, 0x3b, 0x59, 0xae, 0xf7, 0xef, - 0x7e, 0xfb, 0xf4, 0x9b, 0xfb, 0x89, 0xe2, 0xcc, 0x10, 0x9d, 0x99, 0x3b, 0x7a, 0xab, 0xdf, 0x67, 0x40, 0x1a, 0x32, - 0xc8, 0xfb, 0x2c, 0x6e, 0x5f, 0x5f, 0xd7, 0x07, 0x8d, 0x31, 0xfb, 0x96, 0x31, 0xbf, 0xf3, 0x12, 0x1a, 0x92, 0x2c, - 0xb8, 0x13, 0x34, 0x63, 0xf7, 0x68, 0xb9, 0x16, 0x6b, 0x8c, 0x17, 0xde, 0x23, 0x16, 0xa9, 0x32, 0x14, 0xb1, 0x48, - 0xd5, 0x62, 0x5c, 0xa4, 0x41, 0x6d, 0x36, 0x22, 0x8c, 0x4d, 0xe5, 0xa6, 0xef, 0x2d, 0xd7, 0xea, 0x15, 0x5d, 0x34, - 0x93, 0x37, 0x75, 0x35, 0xfe, 0xe0, 0x22, 0x98, 0x4c, 0x42, 0x9a, 0x97, 0x16, 0xba, 0xbc, 0x96, 0x0a, 0x70, 0x24, - 0x1c, 0xc8, 0x38, 0x8d, 0xc3, 0x55, 0x46, 0x9b, 0xc1, 0xc5, 0x80, 0xd3, 0x71, 0x0b, 0xe0, 0xe0, 0xef, 0xf2, 0x58, - 0x7b, 0x40, 0x6e, 0xc3, 0x36, 0x71, 0x07, 0x10, 0x6e, 0xdc, 0xee, 0x96, 0x87, 0x0e, 0xaf, 0xe4, 0xa0, 0xad, 0x86, - 0x89, 0x58, 0x70, 0x2d, 0x31, 0xec, 0xad, 0x39, 0x1e, 0x2f, 0x93, 0x21, 0x97, 0x65, 0x51, 0x5e, 0x9e, 0xcc, 0x6f, - 0x73, 0xc6, 0x5e, 0x35, 0x9f, 0xb1, 0x57, 0xe2, 0x8c, 0x6d, 0xdf, 0x99, 0x4f, 0xa7, 0x1e, 0xfc, 0x37, 0x28, 0x26, - 0xd4, 0x77, 0xb5, 0xee, 0x72, 0xad, 0x79, 0xcb, 0xb5, 0x66, 0x77, 0x96, 0x6b, 0x0d, 0xbb, 0x46, 0xcb, 0x0a, 0xcb, - 0xe9, 0x98, 0x96, 0xab, 0x41, 0x21, 0xfc, 0xb9, 0xa5, 0x57, 0xde, 0x21, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, - 0xf6, 0xa3, 0xce, 0xce, 0x92, 0x40, 0xda, 0xa6, 0x93, 0x91, 0xf1, 0x98, 0x4e, 0xfa, 0xd3, 0xd8, 0x5f, 0xa5, 0x7f, - 0xe7, 0xe3, 0xe7, 0x40, 0xdc, 0x8a, 0x08, 0x2a, 0xfd, 0x88, 0xa6, 0xa0, 0xef, 0xb8, 0xa3, 0xa2, 0x87, 0x8d, 0x5c, - 0xa7, 0x3e, 0x8b, 0x8d, 0xde, 0x71, 0x0e, 0x1b, 0x36, 0x79, 0x33, 0xa0, 0x7f, 0xb3, 0x55, 0x6a, 0x47, 0x31, 0xbf, - 0x02, 0x2c, 0x5b, 0xc1, 0xf1, 0x78, 0x68, 0xf0, 0xd5, 0x74, 0x4f, 0x9a, 0x87, 0x7b, 0x2d, 0xbe, 0x74, 0x23, 0x2e, - 0x15, 0x7e, 0x6f, 0x71, 0x87, 0xaf, 0xed, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x5b, 0x2e, 0x84, 0xa2, 0xee, 0x9e, - 0x58, 0xfe, 0xe9, 0xab, 0x43, 0xf8, 0x8f, 0x51, 0xf5, 0x3f, 0x66, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xff, 0x81, 0x91, - 0x4a, 0x48, 0x88, 0xef, 0x5f, 0x7f, 0x3a, 0x7d, 0x5c, 0x83, 0xbd, 0x6b, 0x33, 0xa3, 0xa4, 0x6a, 0xed, 0xaf, 0xe2, - 0x18, 0xf2, 0xf6, 0xd6, 0xab, 0x0b, 0xf0, 0x30, 0x17, 0x8f, 0x6c, 0x08, 0x8d, 0x04, 0x1f, 0xc1, 0x94, 0xf1, 0x3a, - 0xb6, 0x61, 0xac, 0xc4, 0xdb, 0x36, 0x56, 0xe2, 0xcd, 0x6e, 0x56, 0xe2, 0xdb, 0xbd, 0x58, 0x89, 0x37, 0x9f, 0x9d, - 0x95, 0x78, 0x5b, 0x67, 0x25, 0xae, 0x62, 0x61, 0x89, 0x6a, 0x5d, 0xac, 0xf8, 0xcf, 0x0f, 0x4c, 0xb7, 0x76, 0x19, - 0x0f, 0x7b, 0x2e, 0x8b, 0x77, 0x7e, 0xf5, 0x8b, 0x19, 0x0b, 0xdc, 0x88, 0xef, 0xd1, 0x30, 0xab, 0x60, 0x2d, 0x38, - 0x66, 0xc7, 0xef, 0x28, 0xc5, 0x61, 0x1c, 0xcd, 0xbe, 0x07, 0xdd, 0x2a, 0x88, 0x03, 0x13, 0xe5, 0x45, 0x90, 0x7e, - 0x1f, 0x2f, 0x57, 0xcb, 0x0b, 0xe8, 0xeb, 0x43, 0x90, 0x06, 0xe3, 0x90, 0xca, 0x30, 0x04, 0xcc, 0x90, 0x8c, 0xcb, - 0xc4, 0xc1, 0x76, 0x53, 0xfc, 0x24, 0x6b, 0xf1, 0x13, 0xad, 0x3b, 0xf9, 0x6f, 0x66, 0xa1, 0xa6, 0x37, 0x33, 0x22, - 0x10, 0xb0, 0xab, 0x32, 0xe8, 0xc7, 0x33, 0x23, 0x57, 0xb1, 0xd9, 0x30, 0x4b, 0x61, 0xb6, 0xd0, 0xda, 0x0f, 0xad, - 0x31, 0x35, 0x2b, 0xd3, 0x92, 0xf1, 0xf7, 0xea, 0x62, 0xf8, 0x45, 0xbc, 0x4a, 0xe9, 0x24, 0xbe, 0x8f, 0x74, 0x2b, - 0x95, 0xae, 0x35, 0xa0, 0xa8, 0x94, 0x6d, 0x30, 0x73, 0xac, 0xd4, 0xcc, 0xe8, 0x90, 0xb8, 0x78, 0xb5, 0xb4, 0x99, - 0xc6, 0xd8, 0xc6, 0x29, 0xea, 0x32, 0xc5, 0xd9, 0x13, 0xc3, 0x88, 0x87, 0x8f, 0x6b, 0x29, 0x2c, 0x2e, 0x62, 0x87, - 0x4b, 0x85, 0x53, 0x23, 0x15, 0xc2, 0x45, 0x11, 0x04, 0xa7, 0x61, 0xe1, 0xf8, 0x1b, 0xe6, 0x12, 0x5e, 0xbc, 0x85, - 0x10, 0x42, 0xf9, 0x8a, 0xaf, 0x07, 0x0f, 0x09, 0xc3, 0x1e, 0x5f, 0x2b, 0x60, 0x7c, 0x77, 0x47, 0x93, 0x90, 0x3c, - 0x18, 0x66, 0x1e, 0x47, 0xdf, 0x01, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0x33, 0x35, 0x35, 0xec, 0xa5, 0xc6, - 0xe0, 0x45, 0xe0, 0xae, 0xa5, 0x8c, 0x00, 0x72, 0x64, 0xcf, 0xe8, 0x5f, 0x2c, 0xf6, 0xef, 0x5f, 0xcd, 0xdc, 0xba, - 0x8c, 0xe5, 0x87, 0xfe, 0xbc, 0xdc, 0xe3, 0x33, 0xcf, 0x9f, 0x3f, 0x69, 0x9f, 0xb6, 0x01, 0xe9, 0xc2, 0x45, 0xe6, - 0x6b, 0xa3, 0xa1, 0xb5, 0xd9, 0x7a, 0x0a, 0x60, 0x14, 0x57, 0xf1, 0xca, 0x9f, 0xa3, 0xc9, 0xe8, 0xe7, 0x9b, 0x6f, - 0x06, 0x7d, 0x62, 0x8a, 0x62, 0x39, 0xf5, 0x4a, 0x51, 0x01, 0x05, 0xfc, 0xfe, 0x5b, 0x88, 0xbe, 0xfb, 0x6f, 0x04, - 0x43, 0x7d, 0xd7, 0x70, 0x2e, 0x3e, 0x78, 0xdc, 0xe6, 0x1d, 0x40, 0x26, 0x5d, 0x1e, 0xd7, 0x46, 0x28, 0xd7, 0x9a, - 0x91, 0x4c, 0x5e, 0x05, 0x9a, 0x1a, 0x43, 0xb2, 0x2d, 0x3c, 0xa6, 0xf8, 0x0a, 0x75, 0x18, 0x9b, 0xce, 0x4d, 0xf6, - 0x2d, 0xca, 0xb1, 0x55, 0x05, 0xc9, 0x70, 0xcb, 0x05, 0x8a, 0xe8, 0xab, 0xfa, 0x6e, 0x11, 0x44, 0x16, 0xa6, 0x80, - 0xa8, 0xbf, 0x21, 0x6b, 0x08, 0x82, 0x0e, 0xc8, 0xad, 0xfa, 0x0a, 0x0a, 0x2d, 0xaa, 0x78, 0x8b, 0x42, 0x9e, 0x37, - 0xbd, 0x11, 0x12, 0x42, 0x8b, 0x37, 0xfa, 0x9d, 0xa6, 0x69, 0x9a, 0x64, 0x23, 0x34, 0xc9, 0x47, 0x60, 0x39, 0xb2, - 0x03, 0xa0, 0x2d, 0xc9, 0x97, 0x6b, 0x56, 0x02, 0x9c, 0x01, 0x98, 0x78, 0xc8, 0x02, 0x1e, 0xe7, 0xb3, 0xe7, 0x8a, - 0x02, 0xc1, 0xd0, 0x43, 0x8c, 0x46, 0x92, 0x40, 0x38, 0xf0, 0xbe, 0x86, 0x0c, 0x3b, 0xbe, 0xe5, 0x92, 0x60, 0xcd, - 0x65, 0x8f, 0xa3, 0x01, 0x6d, 0x0e, 0x08, 0x99, 0x2a, 0x58, 0x10, 0xb4, 0x0e, 0x95, 0xf8, 0xee, 0x16, 0x6d, 0xc0, - 0x8d, 0xc8, 0x17, 0xad, 0xb3, 0x05, 0x8d, 0x56, 0x3a, 0x26, 0x84, 0xc3, 0xe0, 0xe2, 0x50, 0xe7, 0x0d, 0x23, 0xb6, - 0x00, 0xdb, 0x34, 0xb7, 0x9c, 0xb3, 0xbb, 0x30, 0xe2, 0x28, 0x95, 0x58, 0x3e, 0x57, 0x6c, 0x46, 0x1c, 0xb7, 0x55, - 0x6f, 0x08, 0xbe, 0xa4, 0x71, 0xd5, 0x7d, 0x91, 0xd9, 0x14, 0x43, 0x1f, 0x2c, 0x34, 0x0e, 0x17, 0x17, 0x09, 0xb0, - 0x1b, 0xa4, 0xba, 0x68, 0x52, 0x23, 0x43, 0x2a, 0x82, 0xa2, 0xc4, 0xac, 0x77, 0xc3, 0xc7, 0x09, 0x51, 0xc9, 0x5a, - 0xfb, 0xf1, 0x6b, 0xfd, 0xb4, 0x4c, 0xfa, 0x96, 0x3e, 0xb0, 0x8b, 0x84, 0x81, 0xea, 0x96, 0x3e, 0x80, 0x09, 0xdf, - 0x5b, 0x90, 0xa6, 0xe8, 0x5b, 0xd0, 0xb5, 0x05, 0x79, 0x3e, 0x7c, 0x88, 0x54, 0xb7, 0xe5, 0x00, 0xb9, 0xf9, 0x16, - 0x2c, 0x8e, 0x20, 0x86, 0x94, 0xee, 0xe2, 0x10, 0x73, 0x63, 0x79, 0xa3, 0x11, 0xc6, 0x76, 0xc3, 0xd1, 0x30, 0x5f, - 0x78, 0xae, 0x7b, 0x50, 0xab, 0x0f, 0x82, 0xec, 0xa6, 0xda, 0xa6, 0x95, 0x0d, 0x3d, 0xd7, 0x0e, 0x5e, 0x38, 0x9d, - 0x41, 0xed, 0x8e, 0x56, 0x02, 0xc9, 0x8e, 0x50, 0xfc, 0x75, 0xf6, 0x6c, 0x63, 0xa4, 0x2d, 0xe0, 0x2d, 0x8c, 0xcf, - 0x71, 0x6c, 0x39, 0x97, 0x7f, 0x8d, 0xea, 0x57, 0x3f, 0x0b, 0x63, 0xcb, 0x92, 0x1a, 0x8d, 0x20, 0x14, 0xba, 0x01, - 0xc7, 0xe8, 0xf7, 0xda, 0x4b, 0xcd, 0x60, 0xc7, 0xc7, 0x34, 0x47, 0x03, 0x81, 0x51, 0x84, 0x5b, 0x97, 0xda, 0x41, - 0xe5, 0x8b, 0x51, 0x15, 0xc3, 0xf1, 0xa0, 0xcb, 0xb4, 0xd0, 0xe8, 0x6d, 0xa5, 0x16, 0xb0, 0xff, 0x96, 0xeb, 0xd3, - 0x19, 0x43, 0xbc, 0x0f, 0xa8, 0x01, 0x89, 0x13, 0x76, 0x76, 0xb8, 0x5a, 0x96, 0xbb, 0x2b, 0x5f, 0x92, 0xfb, 0x77, - 0x86, 0x97, 0x0e, 0xea, 0xd0, 0x64, 0x7f, 0xcd, 0xd7, 0xdd, 0x23, 0xbb, 0xa4, 0xd1, 0xa4, 0xdc, 0x61, 0xe5, 0xfe, - 0xda, 0xbf, 0xbb, 0x12, 0x46, 0x81, 0x8c, 0x22, 0x71, 0x03, 0x46, 0xc9, 0xe3, 0x08, 0x37, 0x3f, 0x3b, 0x6e, 0xc1, - 0x5e, 0x54, 0x0c, 0x36, 0x60, 0xe1, 0x00, 0x65, 0x33, 0x45, 0x28, 0x0e, 0x61, 0xeb, 0xd1, 0x19, 0xde, 0x10, 0x84, - 0x68, 0xeb, 0x4e, 0xcc, 0x84, 0x69, 0x60, 0xd1, 0x26, 0xe0, 0x81, 0x68, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, - 0xd9, 0x2e, 0xa9, 0x35, 0x73, 0x4c, 0xba, 0x4f, 0xc8, 0x52, 0xf1, 0x6d, 0x13, 0xc4, 0xb9, 0xea, 0xe2, 0x56, 0x12, - 0x75, 0xa3, 0x1f, 0x93, 0x68, 0x55, 0xeb, 0x8d, 0x19, 0xfb, 0xa1, 0xf8, 0x5b, 0x61, 0x50, 0x84, 0x42, 0x5d, 0x95, - 0x8d, 0x5f, 0x15, 0xb2, 0x71, 0xc6, 0xd5, 0x14, 0x2e, 0x29, 0x82, 0xfa, 0x57, 0xdc, 0xbd, 0x24, 0x77, 0x50, 0xb8, - 0x7d, 0x15, 0x23, 0x55, 0x1c, 0x99, 0x0a, 0x46, 0x43, 0x71, 0x8f, 0x13, 0x5c, 0x46, 0xd9, 0x4b, 0xae, 0x5c, 0xb5, - 0xf0, 0x63, 0x2a, 0xca, 0x41, 0xea, 0x8e, 0x43, 0x96, 0xc5, 0xea, 0xb6, 0x29, 0x3b, 0xb2, 0xa8, 0xaf, 0x95, 0x4d, - 0x22, 0x3d, 0x4e, 0x18, 0x80, 0x85, 0x98, 0xbe, 0xa2, 0xd7, 0x96, 0x36, 0x10, 0x38, 0xc8, 0x06, 0x07, 0xb9, 0xdd, - 0xd2, 0x79, 0x96, 0x2c, 0xa5, 0xd0, 0xc2, 0xab, 0x32, 0x08, 0x84, 0xef, 0xcd, 0xa6, 0xe1, 0x96, 0xc7, 0x4b, 0x9e, - 0xdf, 0xef, 0x20, 0x5e, 0xd4, 0x5c, 0x55, 0x91, 0x8f, 0x27, 0xd3, 0x66, 0x56, 0xb6, 0x58, 0xb5, 0xde, 0x29, 0x13, - 0xe2, 0x6c, 0xb8, 0x8f, 0x49, 0x59, 0x46, 0xcf, 0x6b, 0xf4, 0xc5, 0x77, 0xf9, 0xd6, 0x49, 0x56, 0x11, 0x26, 0xb6, - 0xb0, 0xb3, 0x84, 0xf8, 0xb7, 0xca, 0x90, 0x85, 0x9c, 0x13, 0x64, 0xc0, 0x65, 0x4d, 0xc1, 0x80, 0x60, 0x1c, 0x58, - 0xda, 0x77, 0x3a, 0xa9, 0x22, 0x7d, 0xe9, 0x3f, 0x75, 0xbb, 0xe4, 0xd5, 0xf4, 0xb0, 0x22, 0x14, 0xed, 0xf4, 0xca, - 0x22, 0xf3, 0x96, 0x71, 0x64, 0xf3, 0xd5, 0x62, 0xbc, 0x51, 0x65, 0xab, 0x8a, 0xc8, 0xb5, 0x2e, 0x66, 0x55, 0x3f, - 0x3b, 0x9d, 0x4e, 0xcb, 0x82, 0x46, 0x57, 0x3b, 0x44, 0x61, 0xe1, 0x53, 0xd7, 0x75, 0xab, 0x63, 0xdf, 0x0e, 0x76, - 0x1b, 0xe5, 0xb6, 0x27, 0x8d, 0x23, 0x46, 0xd8, 0xee, 0x82, 0x5f, 0x1d, 0x1c, 0xb9, 0x53, 0x9c, 0xec, 0x92, 0x59, - 0xc4, 0x80, 0x19, 0x43, 0x04, 0x19, 0x5d, 0xa4, 0x7d, 0x9f, 0xa2, 0x0e, 0xc6, 0x51, 0x0e, 0x34, 0x1a, 0x0e, 0xd8, - 0x33, 0x30, 0x15, 0xf1, 0xc4, 0xae, 0x70, 0x35, 0x94, 0x87, 0xd7, 0x84, 0xf7, 0xe2, 0x23, 0x78, 0x50, 0x36, 0x75, - 0x99, 0x36, 0x4e, 0xab, 0xe7, 0xfe, 0xbe, 0x54, 0x4f, 0x83, 0x0b, 0x70, 0x23, 0x14, 0xda, 0x4c, 0x3e, 0x8b, 0xff, - 0x2f, 0xe5, 0xff, 0xaf, 0x96, 0xeb, 0xb2, 0xfd, 0xc8, 0x09, 0x48, 0xb4, 0x8b, 0xd3, 0xc2, 0x46, 0xdd, 0xb4, 0x07, - 0xa4, 0x95, 0xc1, 0x54, 0x55, 0xa0, 0x83, 0x92, 0xbe, 0x94, 0xfd, 0xa7, 0x41, 0xfc, 0x8e, 0x14, 0x33, 0x2c, 0x71, - 0x21, 0x42, 0x2c, 0x72, 0x57, 0xc2, 0x1c, 0xac, 0x97, 0x27, 0xa8, 0x3f, 0x28, 0xed, 0x09, 0xd0, 0xc6, 0xd7, 0xe6, - 0xb6, 0x97, 0xb8, 0xbf, 0xaa, 0xd7, 0x12, 0x1d, 0x03, 0xc8, 0x3c, 0x38, 0x84, 0x68, 0x48, 0xa0, 0x55, 0x36, 0x37, - 0x1b, 0xa5, 0x7c, 0xab, 0xea, 0xd9, 0xc4, 0xc0, 0xb0, 0xbb, 0xe6, 0x2a, 0xac, 0x6f, 0xa1, 0x2d, 0x80, 0xc9, 0xf2, - 0xed, 0x87, 0xcf, 0x36, 0x2c, 0xb1, 0xba, 0x1f, 0x3d, 0x5c, 0x72, 0xdc, 0xbf, 0x36, 0xde, 0x9d, 0x29, 0x3b, 0xff, - 0x28, 0x5f, 0xfc, 0xb6, 0x51, 0xa0, 0x77, 0x55, 0x92, 0xd0, 0x71, 0xa3, 0xef, 0x8e, 0xb9, 0x57, 0xed, 0x45, 0x10, - 0xed, 0x5f, 0x97, 0xac, 0xf7, 0xae, 0x0b, 0x17, 0xc6, 0xde, 0x95, 0xe1, 0xc6, 0x61, 0x96, 0x0b, 0xd9, 0xf0, 0x5b, - 0x45, 0xa0, 0xa8, 0xfa, 0xef, 0xea, 0xd8, 0x8a, 0x51, 0xf9, 0x57, 0x2b, 0x20, 0x3e, 0xf7, 0xca, 0xee, 0xa2, 0x89, - 0x04, 0x8d, 0xfa, 0xb1, 0x76, 0xa2, 0x1d, 0x77, 0xb5, 0x23, 0x57, 0x67, 0x5c, 0xd8, 0x50, 0xef, 0x75, 0x0a, 0xbf, - 0xbc, 0x43, 0x57, 0x3f, 0x3b, 0x9d, 0x89, 0x4b, 0x62, 0x1a, 0x84, 0x21, 0x43, 0x15, 0x60, 0xfe, 0x7b, 0x4b, 0xcb, - 0x6a, 0x16, 0x56, 0xc6, 0x8d, 0x40, 0x3a, 0xe2, 0x11, 0xce, 0x8e, 0x4f, 0x96, 0x7d, 0x3c, 0x1b, 0x6a, 0x21, 0x18, - 0x70, 0xb2, 0x52, 0xfc, 0x04, 0xdc, 0xc1, 0x63, 0xfd, 0xec, 0x14, 0xe2, 0x97, 0x6a, 0x93, 0xa1, 0xfe, 0x5d, 0xe7, - 0x58, 0xf3, 0x7a, 0x77, 0x76, 0xd7, 0x77, 0x6d, 0xcf, 0x39, 0xd4, 0x5c, 0xe7, 0xc8, 0xee, 0x38, 0xc7, 0x5a, 0xc7, - 0xe9, 0xc1, 0xbf, 0xbe, 0xe7, 0xbc, 0xd2, 0x5c, 0x78, 0xd2, 0x3c, 0xa7, 0x8b, 0xff, 0x76, 0x9c, 0xe3, 0xbb, 0x2e, - 0xbb, 0xe9, 0x89, 0xf4, 0x8e, 0xaa, 0x8c, 0x02, 0x7c, 0x39, 0xf4, 0x83, 0xb3, 0xd3, 0x55, 0x4a, 0xb5, 0xf5, 0x50, - 0x7f, 0xa5, 0x6b, 0xf3, 0x84, 0x4e, 0x87, 0xfa, 0x53, 0xa2, 0x94, 0x7a, 0x27, 0x8d, 0xc5, 0x9d, 0xe3, 0xc6, 0xe2, - 0xee, 0x51, 0x63, 0xf1, 0x61, 0xaf, 0x5c, 0x7c, 0x30, 0x63, 0xaf, 0x94, 0xf4, 0xa1, 0x0b, 0x92, 0x25, 0xc1, 0xda, - 0xf0, 0x34, 0x40, 0xd7, 0x36, 0xfc, 0x73, 0xdc, 0x31, 0x65, 0xab, 0x31, 0xb4, 0x92, 0xd0, 0x38, 0x3e, 0xd1, 0xbc, - 0xa3, 0x6f, 0x3a, 0x47, 0x3e, 0xd4, 0x83, 0x64, 0xb7, 0xf0, 0x77, 0xd7, 0x3d, 0xf1, 0x5d, 0x0d, 0x1a, 0x7a, 0xf0, - 0xdf, 0xbc, 0xd7, 0xf1, 0xd9, 0x83, 0x0b, 0xef, 0x3f, 0x78, 0xc7, 0xa9, 0x6b, 0x7b, 0xf0, 0xdf, 0xcf, 0x52, 0xe5, - 0x0e, 0x0a, 0x7f, 0xb5, 0xdf, 0x43, 0x57, 0xeb, 0x9e, 0xcc, 0x3b, 0xce, 0xab, 0xbb, 0x63, 0xe7, 0x64, 0xee, 0x1d, - 0x7f, 0x60, 0x4f, 0xa1, 0xdd, 0x71, 0x5e, 0xc1, 0xdf, 0x87, 0xae, 0x3b, 0xb7, 0x3d, 0xe7, 0xe4, 0xae, 0xeb, 0x74, - 0x43, 0xfb, 0xc8, 0x39, 0x81, 0xbf, 0x9f, 0x01, 0xbc, 0x00, 0x57, 0x9e, 0x9d, 0x58, 0x83, 0x8d, 0x51, 0xb1, 0xdf, - 0x50, 0x3f, 0xd2, 0x39, 0xd4, 0x7a, 0x87, 0xdf, 0x9c, 0xdc, 0xd9, 0x87, 0x73, 0xaf, 0x73, 0x67, 0xb7, 0xfe, 0xfc, - 0x00, 0x90, 0xdf, 0xbe, 0x70, 0x00, 0x46, 0x4c, 0x47, 0xf4, 0xbb, 0x91, 0x75, 0xd9, 0x26, 0x46, 0x7f, 0xbf, 0x5b, - 0x8c, 0xfe, 0xf5, 0x6a, 0x1f, 0x31, 0xfa, 0xfb, 0xcf, 0x2e, 0x46, 0xbf, 0xac, 0x5a, 0x71, 0xbf, 0xaf, 0xa6, 0x4d, - 0xf8, 0x71, 0x53, 0x25, 0x92, 0x03, 0x62, 0x5c, 0x5f, 0xad, 0x6e, 0x20, 0xe2, 0xd5, 0xfb, 0x78, 0xf8, 0xf5, 0xaa, - 0x64, 0xa2, 0x14, 0x03, 0x06, 0x78, 0x1f, 0x33, 0x0c, 0xf0, 0xa7, 0xd5, 0x10, 0xec, 0x22, 0xf8, 0xad, 0x19, 0x4c, - 0xec, 0x39, 0x09, 0xa7, 0xf2, 0xc6, 0x85, 0x92, 0x01, 0x16, 0x83, 0xdd, 0x3d, 0x5c, 0x26, 0xa0, 0xac, 0x59, 0x2d, - 0xa2, 0xb4, 0x7f, 0xe4, 0x02, 0x9a, 0xef, 0x4c, 0x93, 0xbc, 0xd2, 0xd8, 0x11, 0x31, 0xc2, 0x3e, 0x72, 0xcb, 0xfc, - 0xd6, 0xf7, 0x68, 0xb2, 0xd6, 0xdc, 0xbb, 0x57, 0xef, 0x57, 0x03, 0x5b, 0x10, 0x61, 0xd2, 0x07, 0xc4, 0x46, 0xd3, - 0xfb, 0xb2, 0xe1, 0x58, 0xc5, 0x54, 0xb0, 0x7d, 0xa4, 0x30, 0x92, 0x6a, 0x7b, 0xaf, 0x6c, 0x78, 0xb6, 0x6b, 0x9a, - 0x0d, 0x9f, 0x2f, 0x35, 0xdf, 0x62, 0xf5, 0x26, 0x3b, 0xae, 0x82, 0xaa, 0x92, 0xf4, 0xaf, 0x11, 0x20, 0x05, 0xed, - 0x59, 0x98, 0xc6, 0x15, 0x84, 0x8f, 0xab, 0xe1, 0x6d, 0xec, 0x2a, 0xef, 0x4a, 0x7d, 0xaa, 0xe6, 0x74, 0x2f, 0x36, - 0x48, 0x0f, 0x06, 0x3f, 0x03, 0x61, 0xc3, 0xef, 0xe3, 0x71, 0xac, 0xc2, 0x79, 0xa3, 0xf4, 0xcb, 0x48, 0xed, 0x7c, - 0xee, 0x6d, 0xea, 0xa4, 0x4d, 0xab, 0x21, 0xad, 0x47, 0x17, 0xe2, 0x8e, 0xc6, 0xcf, 0x33, 0xb3, 0xd5, 0x9c, 0x99, - 0x16, 0xa3, 0x65, 0xee, 0xb6, 0xce, 0x44, 0xbd, 0xa7, 0xb0, 0x89, 0x2d, 0xfe, 0xa0, 0xfa, 0x7f, 0x6f, 0xa6, 0x90, - 0xa0, 0xbd, 0x8f, 0x44, 0x84, 0x42, 0x41, 0x75, 0xd0, 0xc6, 0x76, 0xb0, 0xc5, 0xfc, 0x43, 0xed, 0x98, 0x77, 0x82, - 0xb6, 0xba, 0xdb, 0x2c, 0x46, 0xa4, 0x6b, 0xc3, 0xa6, 0xa4, 0x40, 0xf5, 0x7a, 0xc7, 0x96, 0x77, 0x64, 0x39, 0xc7, - 0x3d, 0x33, 0x17, 0x07, 0x4e, 0xed, 0xb2, 0x04, 0x10, 0x30, 0xd9, 0x95, 0xc3, 0x0c, 0xa2, 0x20, 0x0b, 0x48, 0x98, - 0x03, 0xaa, 0x2f, 0xd3, 0xbc, 0x7f, 0x5b, 0xa5, 0x19, 0xcc, 0x51, 0x90, 0x64, 0x68, 0xae, 0x6c, 0x8f, 0x69, 0x76, - 0x4f, 0x69, 0xd4, 0xa2, 0xca, 0xad, 0x5a, 0x3f, 0xff, 0x76, 0xb6, 0xa0, 0x39, 0xb3, 0xb3, 0x18, 0x67, 0x11, 0xdf, - 0x1f, 0xc2, 0x54, 0x37, 0x1f, 0x59, 0x3f, 0xb7, 0x21, 0xdc, 0xbf, 0xed, 0x46, 0xb8, 0x19, 0xdd, 0x07, 0xe1, 0xfe, - 0xed, 0xb3, 0x23, 0xdc, 0x9f, 0x55, 0x84, 0x5b, 0xf2, 0x54, 0x29, 0x64, 0xa2, 0x3f, 0xe0, 0xb3, 0x01, 0xf1, 0xc6, - 0x5f, 0xea, 0x07, 0x8c, 0xbc, 0xd4, 0x95, 0x3c, 0xd0, 0x1f, 0x4a, 0x89, 0xad, 0x90, 0x65, 0xc7, 0xd0, 0xc3, 0x2c, - 0x89, 0x0e, 0xe4, 0x48, 0x76, 0x85, 0xfb, 0x21, 0xf4, 0x79, 0x11, 0x65, 0xa1, 0xf3, 0x9e, 0xb3, 0x25, 0xa0, 0x82, - 0xf8, 0x3a, 0x4e, 0x16, 0x04, 0x83, 0x22, 0xea, 0x98, 0x10, 0x13, 0x1e, 0x5c, 0x70, 0x18, 0xf3, 0xe3, 0x68, 0x22, - 0xe5, 0xe8, 0x74, 0x78, 0xcd, 0xe8, 0x41, 0xfd, 0x81, 0x92, 0x44, 0xb7, 0xd8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xf7, - 0x45, 0xe7, 0xf0, 0xc5, 0x91, 0x0b, 0xff, 0xf3, 0x68, 0x37, 0xb7, 0x78, 0xc5, 0x45, 0x1c, 0x41, 0x4e, 0x1e, 0x51, - 0xb3, 0xad, 0xda, 0x3d, 0xa5, 0xb7, 0x45, 0xad, 0xe3, 0xe6, 0x4a, 0x13, 0xf2, 0x50, 0xd4, 0x69, 0xac, 0x31, 0x8f, - 0x57, 0xca, 0xb0, 0x1a, 0x46, 0x13, 0x44, 0x2b, 0x90, 0x0c, 0x29, 0x35, 0xd4, 0xd7, 0x7c, 0xba, 0xc5, 0xbc, 0x68, - 0x37, 0xbf, 0x29, 0x12, 0x7f, 0x89, 0x04, 0x44, 0x3b, 0x21, 0xc8, 0x85, 0xea, 0x2e, 0xa6, 0x0d, 0xc0, 0x68, 0x6f, - 0x1a, 0xa4, 0xdd, 0x14, 0x0b, 0x44, 0xd8, 0x02, 0x65, 0xc9, 0x2a, 0xf2, 0x0d, 0xfc, 0x49, 0xc6, 0xa9, 0x11, 0x1c, - 0x40, 0x4c, 0x5e, 0xfc, 0xb0, 0x89, 0xab, 0x46, 0xce, 0xdc, 0x22, 0x4b, 0x4a, 0x24, 0x56, 0x85, 0xbc, 0xc8, 0xac, - 0x84, 0xe5, 0x56, 0xc6, 0xa5, 0xb5, 0x87, 0xe4, 0x85, 0x6c, 0xf8, 0x22, 0xb3, 0x20, 0xbf, 0x31, 0x2c, 0xf7, 0xf3, - 0xe7, 0xac, 0x16, 0x64, 0x1c, 0x65, 0xd3, 0x3a, 0xf7, 0x65, 0x96, 0x42, 0x5d, 0x23, 0xb3, 0x58, 0xc7, 0x2c, 0x85, - 0x7d, 0xdf, 0x8a, 0x5f, 0xbe, 0x3c, 0x1b, 0x7a, 0x26, 0xcf, 0x97, 0x5b, 0x4a, 0xee, 0x76, 0xb9, 0x9f, 0x6a, 0xdc, - 0x6c, 0x74, 0xda, 0x5a, 0x06, 0xd1, 0x4c, 0x68, 0xa6, 0x25, 0xf6, 0x82, 0x64, 0x2b, 0x4c, 0x05, 0x46, 0x84, 0x8a, - 0x5a, 0xd4, 0xb9, 0xa3, 0x09, 0xe4, 0xfa, 0x1d, 0xea, 0x5d, 0xc7, 0x75, 0x5c, 0x5d, 0x36, 0x9c, 0x06, 0xb3, 0xe1, - 0x26, 0xce, 0x08, 0xa4, 0xad, 0x0a, 0xe3, 0x19, 0x78, 0x7e, 0x64, 0x41, 0x16, 0x42, 0x0e, 0x24, 0x70, 0x01, 0x59, - 0x30, 0xae, 0x31, 0xe7, 0xf6, 0xb8, 0x24, 0xb9, 0xc5, 0x3c, 0x98, 0xc2, 0xe9, 0x0b, 0x23, 0xcb, 0x7c, 0x07, 0x97, - 0xa1, 0xa1, 0x1b, 0x90, 0x85, 0x95, 0x26, 0xa9, 0xad, 0xda, 0xb7, 0xf7, 0x35, 0x68, 0x63, 0xea, 0x7c, 0x12, 0xd3, - 0x84, 0x2c, 0x20, 0x5d, 0xc0, 0x26, 0xb7, 0x38, 0xa6, 0xd5, 0x39, 0xaa, 0xd5, 0xbc, 0x57, 0x47, 0x96, 0xd6, 0xf1, - 0x2c, 0xcd, 0x05, 0x74, 0xab, 0xe7, 0xd6, 0x26, 0xbf, 0x19, 0xec, 0x52, 0xd1, 0x31, 0xfc, 0xf2, 0x94, 0xcd, 0x83, - 0x29, 0xe7, 0xb8, 0xf0, 0x33, 0x63, 0x41, 0x3d, 0x0d, 0x25, 0x90, 0x7f, 0xc0, 0xc4, 0xf4, 0x57, 0x74, 0x9d, 0x99, - 0x98, 0x23, 0x88, 0x57, 0x09, 0xcc, 0x0d, 0xba, 0xa6, 0x05, 0x91, 0x16, 0x7c, 0xfa, 0x64, 0x04, 0x60, 0x7e, 0x3f, - 0x54, 0xe0, 0x03, 0xcf, 0x66, 0x09, 0x60, 0x41, 0xa1, 0x58, 0x42, 0x60, 0x81, 0x6f, 0x0c, 0xfc, 0x5b, 0x14, 0x8b, - 0x1f, 0x5c, 0xb1, 0xe7, 0x84, 0x24, 0x9a, 0x01, 0x4a, 0x23, 0xd1, 0xac, 0x66, 0x40, 0xc0, 0xbc, 0xeb, 0x2a, 0xa5, - 0x45, 0x57, 0x85, 0x72, 0x3f, 0xfd, 0xea, 0xe1, 0x8a, 0xe5, 0x40, 0x33, 0x74, 0xb8, 0xe5, 0xd0, 0x15, 0xac, 0xd0, - 0x3d, 0xbc, 0x1c, 0x7e, 0x71, 0xba, 0xa0, 0x19, 0x61, 0x82, 0x4b, 0x60, 0xf1, 0x80, 0x1c, 0xd0, 0x7c, 0x91, 0xbf, - 0x98, 0x31, 0x78, 0x13, 0x7a, 0x17, 0xf8, 0x9c, 0x4f, 0xb3, 0x34, 0x7e, 0x4f, 0xd9, 0x68, 0xa3, 0x34, 0xf4, 0x2c, - 0x66, 0x22, 0xeb, 0x13, 0x0c, 0xfd, 0x39, 0x8c, 0x62, 0xfd, 0xec, 0x0b, 0xe9, 0x4d, 0xd4, 0xb6, 0x08, 0x90, 0x88, - 0xf4, 0x3a, 0xa1, 0xe1, 0xdf, 0x87, 0x5f, 0xc0, 0xc5, 0xfd, 0xc5, 0x8d, 0x6e, 0x0e, 0x32, 0x07, 0xf9, 0x98, 0x2f, - 0x1a, 0x12, 0x72, 0x22, 0x8f, 0xca, 0x99, 0xcd, 0xae, 0xc2, 0x6c, 0xc2, 0xef, 0xdd, 0xac, 0x2b, 0xb8, 0xa9, 0x3e, - 0x84, 0xf4, 0x0c, 0xb8, 0x8b, 0x4d, 0x89, 0xe7, 0xf4, 0x06, 0xc8, 0xa0, 0x8e, 0x43, 0xe2, 0xdf, 0x0a, 0x0e, 0x55, - 0x7d, 0xd8, 0x87, 0x17, 0x95, 0x94, 0x5d, 0xe3, 0x5e, 0xc6, 0xad, 0xbc, 0xc1, 0x2f, 0xe3, 0xa7, 0xee, 0xe7, 0x41, - 0x26, 0x99, 0x61, 0x7c, 0xc8, 0xd1, 0x37, 0x16, 0xc6, 0x57, 0xb0, 0x3f, 0xc0, 0xa0, 0x7a, 0x27, 0xdf, 0xf4, 0xee, - 0x3c, 0x77, 0xde, 0xf1, 0x1c, 0x60, 0x73, 0xe6, 0x5d, 0xe7, 0x38, 0xb4, 0xbb, 0xce, 0x31, 0xfc, 0x7d, 0x00, 0xd6, - 0xcb, 0xee, 0x38, 0x87, 0x1f, 0xbc, 0x4e, 0x68, 0x9f, 0x38, 0xc7, 0xf0, 0x77, 0xc9, 0x5a, 0xfd, 0x88, 0x4c, 0x0f, - 0x30, 0x3c, 0x5f, 0x94, 0xb0, 0x80, 0xf2, 0x5b, 0x6a, 0x11, 0xac, 0xd2, 0xf5, 0xd6, 0xa0, 0x89, 0x00, 0x94, 0xa1, - 0x5b, 0x22, 0x4a, 0x60, 0x3a, 0x30, 0xd2, 0x21, 0xcf, 0x6d, 0x21, 0x0c, 0x32, 0x84, 0xd7, 0xa4, 0xc8, 0xbc, 0xd0, - 0x78, 0x8c, 0x78, 0x9b, 0xe6, 0x30, 0xfb, 0x22, 0x69, 0x1a, 0x53, 0x5d, 0xfc, 0x79, 0x89, 0xf1, 0x71, 0xa8, 0x59, - 0xc3, 0x4a, 0x45, 0xe2, 0xce, 0x7c, 0xf7, 0xc0, 0xd1, 0x6f, 0x94, 0xca, 0xc4, 0x51, 0x9f, 0xb5, 0x6f, 0xae, 0xce, - 0x90, 0xbd, 0xff, 0xd2, 0x7e, 0x30, 0x5f, 0x32, 0xeb, 0x47, 0x44, 0xd8, 0x9d, 0x04, 0x89, 0x1c, 0x9e, 0x82, 0xa2, - 0xbd, 0xe6, 0xfc, 0x04, 0x26, 0x64, 0xd8, 0xb9, 0x00, 0x2a, 0xf9, 0x8e, 0x84, 0x8a, 0xe9, 0x85, 0xd2, 0xf2, 0x89, - 0xc4, 0xfc, 0xcf, 0x9f, 0x17, 0x83, 0xb3, 0x2b, 0xe3, 0x3e, 0xf5, 0x7a, 0x70, 0xed, 0xf6, 0x68, 0x77, 0xab, 0x15, - 0xd0, 0xee, 0x10, 0xcd, 0x45, 0x3c, 0x49, 0xa1, 0xe9, 0x17, 0x3a, 0xc6, 0x56, 0x53, 0xa4, 0x9a, 0x86, 0x11, 0xc2, - 0x5b, 0x57, 0x58, 0x1d, 0xdd, 0x1c, 0xa4, 0xfb, 0x84, 0xa5, 0xe6, 0xbc, 0x98, 0x0e, 0xa0, 0xd9, 0x32, 0x8f, 0x1d, - 0x2e, 0x8d, 0xff, 0xee, 0x49, 0xa0, 0x7b, 0x11, 0x68, 0xf8, 0x2a, 0xa7, 0xb5, 0xe4, 0x6e, 0x22, 0xef, 0x55, 0x76, - 0xa1, 0xd2, 0xf4, 0x5c, 0x87, 0x22, 0x48, 0xbd, 0x86, 0xd9, 0x16, 0xa5, 0x79, 0x93, 0xbc, 0x2d, 0x8a, 0x02, 0x2b, - 0x80, 0xc8, 0xef, 0x86, 0x70, 0x75, 0x32, 0x9f, 0x3f, 0x6f, 0xbd, 0x84, 0x98, 0x3a, 0x59, 0x4d, 0x3a, 0xab, 0xab, - 0xf8, 0x4d, 0x57, 0x51, 0x8c, 0xec, 0x17, 0xb1, 0x86, 0xb0, 0xca, 0x62, 0x7b, 0x0f, 0x7f, 0x8e, 0x29, 0xc9, 0x1c, - 0xae, 0x07, 0x31, 0x94, 0xcb, 0xdd, 0xf2, 0x68, 0x17, 0xec, 0xb1, 0x78, 0x18, 0x2d, 0x1e, 0x33, 0xee, 0xd9, 0xe6, - 0xc3, 0x8a, 0xfb, 0x21, 0x43, 0x1f, 0x9f, 0xdc, 0x22, 0x06, 0xca, 0xbb, 0x8c, 0xb0, 0x40, 0x19, 0xea, 0x95, 0x1b, - 0x67, 0x44, 0xa4, 0x38, 0x02, 0xba, 0x7c, 0xd0, 0xa8, 0x30, 0x54, 0x7c, 0x95, 0xcf, 0xde, 0x5d, 0x7d, 0xa9, 0xf1, - 0xfd, 0xcf, 0xf4, 0x5b, 0xc8, 0xc8, 0xb0, 0x5c, 0x17, 0x43, 0x96, 0xeb, 0x42, 0xe3, 0x59, 0x67, 0x20, 0x63, 0x44, - 0x7e, 0xc0, 0x20, 0xa8, 0x6b, 0x34, 0xf2, 0x99, 0xd6, 0x6f, 0xb1, 0x0a, 0xb3, 0x60, 0x49, 0x92, 0xec, 0x00, 0x9a, - 0xda, 0x80, 0xe4, 0xf4, 0x36, 0x0f, 0x66, 0xa6, 0x38, 0x14, 0x42, 0xb5, 0x2c, 0x12, 0x9a, 0xc3, 0x69, 0x10, 0x4a, - 0xc5, 0xa1, 0xf8, 0x00, 0xf1, 0x7d, 0xba, 0xcc, 0x86, 0x3a, 0x59, 0x42, 0xce, 0x13, 0x0c, 0x63, 0x7a, 0x10, 0xfb, - 0x19, 0xcd, 0xec, 0x34, 0x4b, 0x28, 0x59, 0xe8, 0x32, 0x64, 0x67, 0xbd, 0xbf, 0x74, 0x35, 0x5e, 0x04, 0x99, 0x8c, - 0x79, 0xc7, 0x26, 0x08, 0x2a, 0x3c, 0x18, 0x22, 0x84, 0x33, 0x60, 0x20, 0xbc, 0x8c, 0x67, 0x95, 0x1d, 0x55, 0x50, - 0x2e, 0xe7, 0x4a, 0x5c, 0x09, 0x10, 0x8e, 0xfa, 0x71, 0xf8, 0x91, 0x7b, 0x5d, 0xcb, 0xd0, 0x7c, 0xfa, 0xd9, 0x29, - 0x67, 0x6f, 0x35, 0x0c, 0x14, 0xa0, 0xf7, 0x5c, 0x08, 0x36, 0xdb, 0xe6, 0x8f, 0x7d, 0xc0, 0x2b, 0xab, 0x91, 0x15, - 0xfa, 0x97, 0x7c, 0x2c, 0x57, 0x40, 0x08, 0x95, 0x54, 0xbc, 0x73, 0xef, 0x4c, 0x3a, 0x00, 0xe1, 0xa8, 0x90, 0x56, - 0xfa, 0xf4, 0xe9, 0xf5, 0xe8, 0x9f, 0xff, 0x80, 0x14, 0x04, 0x73, 0x4f, 0x78, 0x41, 0x5f, 0xab, 0xb5, 0x38, 0xf5, - 0x69, 0x8d, 0x50, 0xbd, 0x4f, 0x27, 0x22, 0x2a, 0x8c, 0xd8, 0x5a, 0xf9, 0xe8, 0x46, 0x44, 0x6c, 0x82, 0x34, 0x23, - 0xa6, 0xf0, 0xd5, 0x1e, 0xc1, 0xf2, 0x8e, 0x44, 0x88, 0x00, 0xed, 0xa7, 0xf5, 0x57, 0xc7, 0x9a, 0x5e, 0xe4, 0x0e, - 0x68, 0xd0, 0x41, 0xb3, 0x3d, 0x74, 0x76, 0x4a, 0xb8, 0xf0, 0x15, 0xc8, 0x8f, 0xb4, 0x7f, 0x00, 0xd3, 0x9c, 0xc7, - 0x0b, 0xea, 0x04, 0xf1, 0xc1, 0x3d, 0x1d, 0xdb, 0x64, 0x19, 0x30, 0xf9, 0x32, 0xca, 0xdd, 0x34, 0x46, 0xf9, 0x49, - 0x05, 0x2d, 0xa3, 0xaf, 0xf3, 0x02, 0x94, 0x71, 0x01, 0x28, 0xf8, 0x49, 0xce, 0xca, 0x71, 0xf8, 0x1c, 0x91, 0x17, - 0xa2, 0x8c, 0xe5, 0xcf, 0x59, 0x38, 0x3d, 0x11, 0x39, 0xaf, 0x78, 0xb0, 0xe3, 0xe9, 0x54, 0x8d, 0x9d, 0xe7, 0x94, - 0xbf, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0xc9, 0xbe, 0x54, 0xff, 0x84, 0xfc, 0x09, 0xb1, 0x40, 0x78, 0x98, 0x45, - 0x38, 0xcf, 0xb5, 0x18, 0x7c, 0x12, 0x24, 0x4f, 0x59, 0x25, 0x8e, 0x28, 0xaa, 0xd1, 0xd9, 0x5b, 0x48, 0x93, 0x27, - 0xc3, 0x21, 0xc3, 0x63, 0x55, 0x74, 0x06, 0x50, 0x6a, 0xc8, 0x91, 0x01, 0x93, 0xcd, 0xa0, 0xa1, 0xcd, 0x3c, 0xb8, - 0xb0, 0x51, 0x75, 0x3a, 0xf5, 0x31, 0x1e, 0x10, 0xb1, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5f, 0x58, 0x40, 0xe0, - 0xa2, 0x9f, 0x0a, 0x1e, 0xd7, 0xfe, 0xc0, 0x50, 0xb6, 0x1d, 0x92, 0x87, 0x58, 0xd1, 0xac, 0x73, 0x27, 0xfb, 0x4b, - 0x2c, 0xbd, 0x12, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0xb3, 0x00, 0xd4, 0x4f, 0x93, 0x1a, 0xb6, 0x7f, 0xd7, 0x61, 0x52, - 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xf4, 0x00, 0xe6, 0x07, 0x81, - 0x01, 0x4a, 0x94, 0x51, 0x60, 0x42, 0xf4, 0x01, 0x92, 0x32, 0xeb, 0x80, 0x8b, 0x89, 0x20, 0xea, 0x90, 0x73, 0x94, - 0x41, 0x3e, 0x4b, 0x55, 0xea, 0xc4, 0x8a, 0xdb, 0x4c, 0xe5, 0xed, 0xce, 0xc0, 0xf1, 0xa7, 0x15, 0xa6, 0xdf, 0xc8, - 0x07, 0x19, 0x15, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x46, 0xb0, 0x6e, 0xa9, 0x50, 0xec, 0xe3, - 0x6d, 0xb5, 0x0a, 0xd2, 0x48, 0x56, 0x5b, 0x12, 0x43, 0x7f, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, 0x65, - 0x36, 0x84, 0xaa, 0x42, 0xd8, 0x4e, 0x96, 0x4b, 0x56, 0xd9, 0x1c, 0x9c, 0x1e, 0x30, 0xbe, 0xf3, 0x8c, 0xed, 0xb0, - 0xb3, 0x53, 0xb0, 0x2e, 0x64, 0x8b, 0x4e, 0x96, 0x4b, 0xbe, 0xa4, 0xec, 0x17, 0x7b, 0x73, 0x30, 0xcf, 0x16, 0xe1, - 0xd9, 0xff, 0x01, 0xff, 0xd7, 0x9f, 0x05, 0x1b, 0x5f, 0x03, 0x00}; + 0x1e, 0x7f, 0xcb, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0x6f, 0xaf, 0x16, 0x93, 0xc1, 0xe0, 0xd6, 0xdf, 0xdf, 0xf3, 0x70, + 0x76, 0x3b, 0x67, 0xd7, 0xfc, 0x9e, 0x16, 0xd3, 0x44, 0x35, 0xbd, 0x78, 0x4c, 0xf0, 0xba, 0xf5, 0xfd, 0x89, 0xc5, + 0xff, 0x6a, 0x5f, 0x34, 0x6f, 0xfd, 0x81, 0xb4, 0x46, 0xcb, 0x5d, 0xfd, 0xfd, 0xe3, 0x8a, 0x89, 0x5b, 0x10, 0x2f, + 0xde, 0xdb, 0x9a, 0x86, 0xb7, 0xfc, 0xa3, 0x77, 0xed, 0x4f, 0xaf, 0x75, 0xcc, 0xcd, 0x44, 0x1d, 0x49, 0x6f, 0x2f, + 0x9e, 0xb3, 0x5f, 0xf9, 0x27, 0x79, 0x9c, 0x7c, 0x11, 0x72, 0xd2, 0xde, 0x20, 0x77, 0x13, 0x9d, 0x12, 0xef, 0xdc, + 0x44, 0xc2, 0x82, 0x40, 0x18, 0x8e, 0x9a, 0x3f, 0x4c, 0xca, 0xa9, 0xb7, 0x03, 0x6e, 0x57, 0x6e, 0xeb, 0x9f, 0x6f, + 0x39, 0xe7, 0x8b, 0xe1, 0xe5, 0xf4, 0x5d, 0xb7, 0x4b, 0x8f, 0x8a, 0x66, 0x53, 0x81, 0x6e, 0xb7, 0x18, 0x7b, 0x75, + 0x32, 0xb3, 0xcc, 0x25, 0x5f, 0x7a, 0x57, 0x9b, 0x99, 0xc7, 0xf4, 0x7e, 0x33, 0xcd, 0x90, 0xc8, 0x17, 0x08, 0x99, + 0x0e, 0x87, 0xbb, 0x73, 0x2c, 0x8f, 0x0f, 0xdf, 0x3e, 0x7b, 0x32, 0x78, 0x82, 0x91, 0x5b, 0x56, 0x34, 0xc8, 0x3b, + 0x3e, 0xcc, 0xea, 0xd6, 0x6d, 0xe3, 0xe2, 0xf9, 0xf0, 0x17, 0xc8, 0x1b, 0x74, 0x3d, 0x34, 0x45, 0xb4, 0xca, 0xef, + 0x28, 0xfa, 0x44, 0xc9, 0x41, 0xc7, 0x13, 0xa8, 0x1d, 0x52, 0xe0, 0xbe, 0x7b, 0xc6, 0x41, 0xbf, 0x81, 0xa5, 0xf6, + 0xfb, 0xe7, 0x9f, 0x88, 0x47, 0x1a, 0xc6, 0xfb, 0xfb, 0x30, 0xfa, 0x23, 0x2e, 0x8b, 0x35, 0x9c, 0xae, 0x03, 0xf8, + 0xdc, 0x33, 0x7d, 0xfb, 0xba, 0xf3, 0x7d, 0x3f, 0xf0, 0xb6, 0xfc, 0x86, 0xbd, 0xe3, 0xde, 0xe5, 0xf0, 0xad, 0xff, + 0xec, 0x09, 0x88, 0x4e, 0x30, 0x2e, 0x9f, 0x31, 0x12, 0xb6, 0xa3, 0x18, 0xb5, 0x0a, 0x3f, 0xd7, 0x10, 0xa2, 0xf5, + 0x09, 0x19, 0xbb, 0x20, 0xfd, 0x83, 0x02, 0xf4, 0x13, 0x02, 0xab, 0x49, 0x6a, 0x14, 0x98, 0xc4, 0xb7, 0x35, 0x24, + 0x90, 0x82, 0x05, 0x42, 0x6f, 0xa0, 0xf8, 0x54, 0xf0, 0x77, 0xc3, 0xcf, 0x24, 0xf9, 0x2d, 0x6a, 0x3e, 0x86, 0xbf, + 0x61, 0x68, 0x26, 0xd5, 0x43, 0x5a, 0x47, 0x89, 0xf7, 0x93, 0xbf, 0x8f, 0xc2, 0x4a, 0xa8, 0x63, 0x21, 0x48, 0xc5, + 0x90, 0x0b, 0x71, 0xf1, 0x7c, 0x72, 0x5b, 0x8a, 0xf0, 0x8f, 0x09, 0x3e, 0x93, 0x0b, 0x4d, 0x3e, 0xa3, 0x27, 0x8d, + 0x7c, 0xff, 0x41, 0xbe, 0x2f, 0x3b, 0x35, 0x58, 0xd4, 0x43, 0x7e, 0x5b, 0xbb, 0xef, 0xcb, 0x29, 0x41, 0x8f, 0xec, + 0x07, 0x34, 0x05, 0x03, 0x35, 0x01, 0x29, 0x43, 0x70, 0x0b, 0x57, 0x7d, 0x4f, 0x15, 0xe4, 0xcb, 0xef, 0x7d, 0x16, + 0x32, 0x5c, 0x65, 0x41, 0x48, 0x72, 0xa9, 0x90, 0xc2, 0xc6, 0x6d, 0x3d, 0xf8, 0xac, 0x31, 0x49, 0x24, 0xe4, 0x94, + 0x80, 0x24, 0x69, 0x6f, 0x20, 0x49, 0xc4, 0xf4, 0x1f, 0xae, 0x93, 0xa6, 0x59, 0x49, 0xe9, 0x86, 0x38, 0x55, 0xaf, + 0x91, 0xe6, 0x2c, 0x78, 0xcf, 0x60, 0xe9, 0x48, 0xb1, 0xe2, 0x9d, 0x31, 0x18, 0xeb, 0x60, 0xa1, 0x3b, 0x59, 0xdc, + 0xaf, 0x92, 0x30, 0x8d, 0x44, 0x95, 0x2f, 0x42, 0xfe, 0xfc, 0x97, 0x12, 0x7f, 0xf4, 0x96, 0x06, 0x22, 0x10, 0xfc, + 0x00, 0xad, 0x07, 0xac, 0xf1, 0xe0, 0x27, 0x56, 0x97, 0x61, 0x5e, 0x65, 0x54, 0xde, 0x6c, 0xc7, 0xb6, 0x73, 0xa6, + 0xaa, 0x16, 0x7c, 0x16, 0x86, 0x16, 0xed, 0x6c, 0xd5, 0x9c, 0xdc, 0xe6, 0x0d, 0xbe, 0x33, 0x49, 0x22, 0xb5, 0x94, + 0x44, 0xda, 0xea, 0xfa, 0x74, 0xe9, 0x75, 0x8b, 0x0a, 0x1a, 0x23, 0x40, 0x2f, 0x49, 0x77, 0x95, 0x4f, 0x28, 0x5e, + 0x59, 0x0d, 0xab, 0xe1, 0xa5, 0x43, 0x11, 0xc6, 0xda, 0x9b, 0x2b, 0x79, 0x76, 0x07, 0xd6, 0x23, 0xb4, 0x76, 0x55, + 0xea, 0x10, 0xb6, 0x9f, 0xe8, 0x3d, 0xa7, 0x52, 0x7f, 0x03, 0xaa, 0xc0, 0xa9, 0xa3, 0xa1, 0x3e, 0x6a, 0xa7, 0x90, + 0xed, 0xdc, 0x5b, 0x12, 0x54, 0xae, 0xe4, 0xa6, 0x4a, 0x8b, 0x52, 0xca, 0x94, 0xaf, 0x65, 0xb6, 0xb2, 0xfb, 0x64, + 0x00, 0xf1, 0x6c, 0x50, 0x20, 0xb9, 0xa8, 0xad, 0xe6, 0x20, 0x7d, 0x34, 0x4b, 0x1c, 0x6b, 0x07, 0x85, 0x97, 0x55, + 0x60, 0xe6, 0x32, 0x97, 0xcb, 0x41, 0xc1, 0x72, 0xbd, 0xd5, 0x4c, 0x33, 0xd5, 0x17, 0xb9, 0xbd, 0xcd, 0x78, 0x99, + 0xfe, 0x9b, 0x25, 0x03, 0x1e, 0x5d, 0x3c, 0xf7, 0x03, 0x48, 0x93, 0xbc, 0x0e, 0x90, 0x04, 0x9b, 0x83, 0x5d, 0xec, + 0x30, 0x6c, 0x15, 0x2b, 0x7b, 0xf2, 0x74, 0xb9, 0x43, 0x53, 0x2e, 0x61, 0x24, 0x27, 0xe6, 0x52, 0xea, 0xfb, 0x92, + 0xea, 0x86, 0x82, 0x93, 0x4d, 0x13, 0x50, 0x0a, 0x68, 0xb7, 0xe0, 0xbf, 0xf0, 0xa9, 0xa1, 0xd3, 0x02, 0x2c, 0xb5, + 0xdd, 0x80, 0xff, 0x42, 0xbf, 0xd8, 0x3e, 0xa2, 0x7e, 0x60, 0x1e, 0xec, 0xcd, 0xda, 0xca, 0x18, 0x10, 0x91, 0xb8, + 0x82, 0x3c, 0x12, 0xfc, 0xa0, 0xd8, 0xd3, 0x65, 0xe2, 0xc0, 0x99, 0xe2, 0x62, 0x29, 0xb5, 0x99, 0x79, 0xed, 0xb7, + 0xd4, 0xc4, 0x9b, 0x28, 0x89, 0x0a, 0xdb, 0x21, 0x8d, 0x5e, 0x52, 0xc6, 0x54, 0xc1, 0x86, 0xe8, 0xbe, 0x6e, 0x82, + 0x29, 0xf0, 0xa6, 0xaa, 0x02, 0x22, 0xd4, 0x5e, 0x64, 0x79, 0x7e, 0xd3, 0x05, 0x56, 0x17, 0x7c, 0x6c, 0x4c, 0xb3, + 0x0b, 0x56, 0x72, 0x35, 0x93, 0x3e, 0xf3, 0x76, 0xa0, 0x85, 0xbc, 0xcb, 0xcb, 0xa2, 0x15, 0xba, 0x1e, 0x44, 0x0b, + 0x7f, 0xaf, 0x39, 0x1e, 0x3d, 0xdb, 0x56, 0x53, 0x9b, 0x7d, 0xad, 0xc5, 0x02, 0x19, 0x88, 0x86, 0xbe, 0x90, 0x33, + 0x0a, 0x77, 0x95, 0xe6, 0x6a, 0xb5, 0xaf, 0xca, 0x20, 0x81, 0x89, 0x20, 0x6b, 0x59, 0x78, 0x8f, 0xee, 0xd5, 0x23, + 0xcd, 0x2b, 0x09, 0x9e, 0xb9, 0xf8, 0x0b, 0x00, 0xa1, 0x3c, 0x49, 0xc8, 0x01, 0x39, 0x80, 0xbf, 0xa5, 0x28, 0x95, + 0x06, 0xf8, 0x67, 0x75, 0x39, 0xb6, 0xf5, 0xfd, 0x9d, 0x56, 0x31, 0xb8, 0xfe, 0x7c, 0xdd, 0xf5, 0xac, 0x1d, 0xe2, + 0x5c, 0xd9, 0xea, 0xb5, 0x65, 0x9a, 0xc7, 0x48, 0x5d, 0x03, 0x70, 0x27, 0xd2, 0x23, 0x10, 0xc9, 0x4c, 0x34, 0xc8, + 0xd9, 0x0b, 0x3e, 0x9e, 0x8a, 0xc7, 0xa4, 0xbd, 0xca, 0xf7, 0xcd, 0x85, 0x3e, 0x18, 0x63, 0xdf, 0x82, 0x06, 0xf1, + 0xd1, 0x6a, 0x6b, 0x05, 0x62, 0xbd, 0x55, 0xea, 0x43, 0x37, 0x46, 0x41, 0x07, 0x8f, 0xb8, 0x91, 0x0b, 0x8e, 0xed, + 0xae, 0xad, 0xa7, 0xf4, 0x15, 0x80, 0xb9, 0x0e, 0x54, 0x32, 0x0c, 0x52, 0xe7, 0x89, 0xc2, 0x24, 0x3f, 0x4f, 0x48, + 0x42, 0x44, 0x75, 0xb6, 0x1c, 0xa5, 0xdc, 0xb4, 0x80, 0xcb, 0x8c, 0x0c, 0x30, 0x9b, 0x34, 0xeb, 0x27, 0x97, 0x2f, + 0x41, 0x2a, 0x0d, 0x11, 0xdc, 0xb0, 0xbd, 0x64, 0x74, 0xeb, 0xa8, 0x1b, 0x54, 0x49, 0xe6, 0xfa, 0xcd, 0xed, 0x2c, + 0x52, 0xe6, 0xcd, 0x47, 0x18, 0x6b, 0xf2, 0x21, 0xac, 0x13, 0xfc, 0x36, 0x40, 0x25, 0x7d, 0x2a, 0xbc, 0x68, 0x04, + 0x10, 0xea, 0x3b, 0x55, 0xc6, 0xa7, 0xc2, 0xcb, 0x46, 0x5b, 0x96, 0x51, 0x0a, 0xd5, 0x05, 0xb3, 0x5b, 0xd3, 0x85, + 0xe8, 0x56, 0xd5, 0x40, 0x1b, 0xb8, 0x76, 0x1d, 0x28, 0xa0, 0xa1, 0xda, 0x95, 0x1b, 0x16, 0x80, 0xd5, 0x4c, 0x04, + 0x86, 0xcb, 0xbf, 0xcf, 0x5f, 0xa9, 0x18, 0x9e, 0x7e, 0x3f, 0xf4, 0xf6, 0xdb, 0x20, 0x1a, 0x6d, 0x2f, 0xd9, 0x2e, + 0x88, 0x46, 0xbb, 0xcb, 0x86, 0xd1, 0xef, 0xe7, 0xf4, 0xfb, 0x79, 0x03, 0x3a, 0x12, 0x61, 0xc2, 0xec, 0xf5, 0x1b, + 0xb5, 0x7c, 0xa5, 0xd6, 0xef, 0xd4, 0xf2, 0xa5, 0x1a, 0xde, 0xda, 0x93, 0x44, 0x10, 0x59, 0xaa, 0x9a, 0x07, 0x49, + 0x91, 0x6a, 0xe9, 0x72, 0x8c, 0x16, 0x23, 0x6a, 0x29, 0x6b, 0x8e, 0x75, 0x22, 0xed, 0x1c, 0x94, 0x0c, 0x70, 0xb4, + 0xb8, 0xaa, 0x31, 0xdd, 0xac, 0x68, 0x09, 0xc4, 0x08, 0x2b, 0xdb, 0x72, 0x71, 0x93, 0xfa, 0xe8, 0x9c, 0x7c, 0xdb, + 0x2a, 0xe5, 0xdb, 0x56, 0xf0, 0xfc, 0x2b, 0x0a, 0xe5, 0x92, 0x6b, 0xd7, 0xb2, 0x69, 0xa1, 0x14, 0xca, 0xb8, 0x06, + 0x5b, 0xfb, 0x26, 0x30, 0x64, 0x3e, 0x52, 0xd4, 0xd8, 0x5e, 0x34, 0xca, 0x21, 0xc8, 0xd6, 0xc1, 0xa8, 0x53, 0x16, + 0x2c, 0xbe, 0xdd, 0x21, 0x03, 0x19, 0xe8, 0xa8, 0x6a, 0xe3, 0xd5, 0xce, 0x4a, 0x7f, 0x58, 0x5e, 0x3c, 0x67, 0x89, + 0x95, 0x4e, 0x7e, 0x53, 0xa1, 0x3f, 0x08, 0xd1, 0x37, 0x65, 0xc3, 0xc1, 0x8b, 0x2e, 0xb6, 0x32, 0x20, 0xde, 0x30, + 0xbd, 0xb7, 0xb1, 0x92, 0xe5, 0xae, 0x29, 0x5f, 0xcc, 0x78, 0xc2, 0x71, 0xf4, 0xe5, 0x6a, 0x11, 0xd6, 0x6a, 0x91, + 0x9d, 0x00, 0x0f, 0xad, 0xd5, 0x52, 0xc8, 0xd5, 0x22, 0x9c, 0x99, 0x2e, 0xd4, 0x4c, 0xcf, 0x40, 0xf3, 0x28, 0xd4, + 0x2c, 0x4f, 0x00, 0x0b, 0x5e, 0x98, 0x19, 0x2e, 0xcc, 0x0c, 0xc7, 0x21, 0x35, 0x4e, 0x0f, 0x7a, 0xaf, 0x73, 0xcf, + 0x2d, 0x77, 0xa3, 0xd3, 0x30, 0x6f, 0x47, 0x1b, 0xcc, 0xf1, 0x41, 0x38, 0x81, 0xf8, 0xc0, 0x12, 0x01, 0x7a, 0x34, + 0xac, 0x8e, 0x1a, 0x2a, 0x47, 0xf1, 0x65, 0x01, 0x48, 0x96, 0x04, 0x20, 0xb9, 0x57, 0xe3, 0x5c, 0x5a, 0x7e, 0x5d, + 0x25, 0x21, 0x47, 0x64, 0xbc, 0x94, 0x76, 0xf7, 0x84, 0x97, 0x23, 0x23, 0x34, 0x4f, 0x16, 0xa9, 0x97, 0xb3, 0x8c, + 0x8d, 0x11, 0xb8, 0x28, 0xf4, 0x9b, 0xaa, 0xdf, 0x4f, 0x4b, 0x2f, 0xa7, 0x76, 0x7e, 0x02, 0x7f, 0xcb, 0x53, 0x67, + 0x91, 0x23, 0xe4, 0xd5, 0xc8, 0x24, 0x2c, 0x2f, 0x95, 0x7a, 0xfa, 0x12, 0x66, 0x50, 0x77, 0x6f, 0x14, 0x80, 0x6b, + 0x91, 0x4b, 0xa7, 0xda, 0x12, 0xae, 0x4c, 0xb9, 0xc1, 0x3e, 0x0f, 0x79, 0x4e, 0x42, 0xa8, 0x44, 0x1e, 0x29, 0xac, + 0xfb, 0xf6, 0xc5, 0xf3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x0e, 0x00, 0x73, 0x30, 0xf5, 0xa2, 0x01, 0x2f, + 0xd5, 0x9c, 0xf9, 0xe8, 0xe5, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x33, 0xf9, 0xc8, 0xf8, 0x96, 0xf9, + 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, 0x6c, 0x50, + 0x09, 0x36, 0x0d, 0x5f, 0x4b, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, 0x1b, 0xb3, + 0x31, 0x2b, 0xd4, 0xce, 0x93, 0xcb, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, 0x71, 0xce, + 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, 0xa6, 0x25, + 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, 0xe8, 0x95, + 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x73, 0xfe, 0x52, + 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd1, 0xb4, 0x04, 0x75, 0x80, + 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x39, 0xe7, 0x5f, 0x6a, 0x43, 0x84, 0x8c, + 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, 0xc0, 0xe3, + 0xbc, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x1c, 0xf7, 0x4e, 0xd3, 0xb0, 0xfd, 0x17, 0xa0, 0x29, 0x86, 0x72, 0x3c, 0xdf, + 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xca, 0x42, 0xda, 0x96, 0x63, 0xb4, + 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xdc, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x7d, 0xdd, 0x63, 0x36, 0xc9, 0x8a, + 0x45, 0xae, 0x22, 0x4e, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, 0x41, 0xc9, + 0x72, 0x5e, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xd5, 0x9c, 0x52, 0xa8, + 0x7d, 0xc5, 0xc3, 0xea, 0xf4, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, 0x7c, 0xe7, + 0xeb, 0xf4, 0x8e, 0x42, 0x77, 0x9c, 0x99, 0x78, 0xaa, 0x02, 0x63, 0xdf, 0xda, 0x11, 0x14, 0x0e, 0x4d, 0xd7, 0x01, + 0x87, 0x69, 0x74, 0xc2, 0xe2, 0x9f, 0xd2, 0x71, 0xf2, 0xa2, 0x56, 0x88, 0x24, 0xff, 0x10, 0x2e, 0x0c, 0x89, 0x05, + 0x79, 0x49, 0xa8, 0x23, 0x32, 0x62, 0x35, 0x2a, 0xd6, 0x42, 0x45, 0xc5, 0x29, 0x1e, 0x6f, 0x15, 0x14, 0x97, 0xa2, + 0x54, 0x29, 0x15, 0xb9, 0x51, 0x29, 0x20, 0x96, 0x0d, 0xbc, 0x5b, 0xc0, 0x01, 0x10, 0x74, 0x96, 0xbb, 0xb5, 0xed, + 0x6e, 0x23, 0xf3, 0x99, 0x69, 0x9e, 0x56, 0x1f, 0xd4, 0xdf, 0xef, 0x97, 0x18, 0x5b, 0xe3, 0xe9, 0xef, 0xdb, 0xb4, + 0xe0, 0xe6, 0x6f, 0x18, 0xa2, 0x3b, 0x40, 0xc4, 0x2c, 0xed, 0xa1, 0x90, 0x05, 0x13, 0x96, 0xa1, 0x2a, 0x4f, 0x39, + 0xea, 0xe5, 0x93, 0x5b, 0x80, 0x50, 0x43, 0xbf, 0x36, 0x3a, 0xd5, 0x55, 0x09, 0xc2, 0xf7, 0x5d, 0xa1, 0x1e, 0x9b, + 0x03, 0x9e, 0x0c, 0x80, 0xbf, 0x22, 0xaf, 0xf5, 0xd8, 0xfe, 0x41, 0x6f, 0xd4, 0x1b, 0x20, 0x88, 0xce, 0x79, 0xe1, + 0x1f, 0x71, 0xae, 0x53, 0x7f, 0xc6, 0x85, 0x20, 0xbe, 0xf5, 0x24, 0xbc, 0x17, 0x67, 0x69, 0x1c, 0x9c, 0xf5, 0x06, + 0xe6, 0x22, 0x50, 0x9c, 0xa5, 0xf9, 0x19, 0x88, 0xe5, 0x88, 0x89, 0x58, 0xb3, 0x3b, 0x80, 0x09, 0x2c, 0x75, 0x1c, + 0xb2, 0xea, 0xd8, 0x7e, 0xff, 0xcd, 0xc8, 0x90, 0xa5, 0x23, 0x0c, 0x8c, 0xfe, 0x5d, 0x81, 0x00, 0x05, 0xcb, 0xcc, + 0xf6, 0x60, 0xd2, 0xd5, 0x9e, 0xd5, 0xf3, 0x66, 0x93, 0x77, 0xf5, 0x8e, 0xd5, 0xb4, 0x9c, 0x9a, 0x56, 0x59, 0x4d, + 0x9b, 0xe4, 0x50, 0x33, 0xd1, 0xef, 0x6b, 0x50, 0xd4, 0x7c, 0x0e, 0x60, 0x6c, 0x98, 0xfc, 0x66, 0x56, 0xcd, 0xfb, + 0x7d, 0x4f, 0x3e, 0x82, 0x5f, 0xc8, 0x56, 0xe6, 0xd6, 0x58, 0x3e, 0x7d, 0x4d, 0x24, 0x66, 0x06, 0xe6, 0xe8, 0xee, + 0x08, 0xdf, 0xeb, 0x46, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x0d, 0x0c, 0x9e, 0x27, 0x7c, 0x70, 0x91, 0xa3, + 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x1b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, 0x78, 0x90, + 0xfd, 0xfe, 0x0a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0xd7, 0x75, 0x51, 0x56, 0xd0, 0xb1, 0xf4, 0xf3, + 0x56, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x92, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, 0x2e, 0x3e, + 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0xe7, 0x7c, 0xb4, 0x2e, 0xd6, 0x1e, 0xf8, 0xc1, 0xcc, 0xd2, 0xb9, + 0x22, 0xce, 0xc8, 0xfd, 0xd1, 0xe7, 0x22, 0xcd, 0x29, 0x0f, 0x70, 0x1f, 0x8a, 0xb9, 0xfd, 0x16, 0x48, 0x3f, 0xf4, + 0x16, 0xc8, 0x3e, 0x3a, 0xe7, 0xe4, 0x0d, 0x20, 0xd2, 0x21, 0x0c, 0x6e, 0x45, 0x82, 0x8e, 0x55, 0xc3, 0x5b, 0x0b, + 0xec, 0xb4, 0x97, 0xc6, 0xbd, 0x34, 0x3f, 0x4b, 0xfb, 0x7d, 0x83, 0x9a, 0x99, 0x22, 0x1c, 0x3c, 0xce, 0xc8, 0x45, + 0xd2, 0x82, 0x2d, 0xa5, 0xfd, 0x57, 0x03, 0x47, 0x10, 0xf2, 0xf7, 0x3f, 0x84, 0xf7, 0x04, 0x20, 0x36, 0x69, 0x03, + 0xae, 0x7a, 0x4c, 0x47, 0x63, 0x4b, 0xa2, 0x56, 0x9d, 0x0d, 0x90, 0x38, 0x55, 0x5a, 0x4f, 0xb9, 0x59, 0x53, 0x18, + 0xa4, 0xca, 0x42, 0xfd, 0xc6, 0x7a, 0x32, 0x59, 0xe5, 0x22, 0x23, 0x8e, 0xca, 0xf4, 0xa5, 0x66, 0x04, 0xd3, 0xa5, + 0x9f, 0x2f, 0x60, 0xc9, 0xc6, 0x1f, 0x71, 0xf2, 0x96, 0x80, 0x63, 0x3b, 0x6b, 0x57, 0xd5, 0x2e, 0xc7, 0xad, 0xdd, + 0x1c, 0xe0, 0x7b, 0xbd, 0xd1, 0x68, 0xa4, 0x9d, 0xe3, 0x04, 0x0c, 0x55, 0x4f, 0x2d, 0x85, 0x1e, 0xab, 0x15, 0xa0, + 0x6e, 0x47, 0x2e, 0xb3, 0x64, 0x30, 0x5f, 0x18, 0xc7, 0xaf, 0xcc, 0x47, 0x1f, 0x2f, 0x95, 0xb5, 0xeb, 0x88, 0xaf, + 0xff, 0x20, 0xab, 0xf5, 0x2d, 0xef, 0xaa, 0x26, 0xe0, 0x8b, 0x2a, 0xa0, 0xf4, 0x1b, 0xde, 0x93, 0xbd, 0x8b, 0xaf, + 0xdd, 0x60, 0x97, 0x7c, 0xcb, 0x5b, 0xd4, 0x79, 0xbe, 0x72, 0x70, 0xa3, 0x4a, 0xb7, 0xf7, 0x92, 0x05, 0xae, 0xbd, + 0xa3, 0xa6, 0xb1, 0x9e, 0xf9, 0xd1, 0xc3, 0x22, 0x64, 0x3b, 0x1f, 0x7b, 0x5f, 0x35, 0x4f, 0xcf, 0x1a, 0x7a, 0x93, + 0x1a, 0xfa, 0xd8, 0x8b, 0xb2, 0x7d, 0x6a, 0x1a, 0xd1, 0x6b, 0xd8, 0xd0, 0xc7, 0xde, 0x92, 0x93, 0x43, 0x22, 0xc0, + 0xa9, 0x31, 0x7f, 0x7c, 0x38, 0x9d, 0xe1, 0xef, 0x18, 0x50, 0x09, 0xc4, 0x7c, 0x7a, 0x4c, 0x3b, 0x0a, 0x30, 0xa3, + 0x4a, 0x6f, 0x9f, 0x1e, 0xd8, 0x8e, 0x97, 0xf5, 0xd0, 0xd2, 0xbb, 0x27, 0x47, 0xb7, 0xe3, 0x55, 0x35, 0xbe, 0x94, + 0x43, 0x9e, 0xe7, 0xb3, 0xd1, 0x68, 0x24, 0x0c, 0x24, 0x77, 0xa5, 0x37, 0xb0, 0x02, 0x69, 0x5b, 0x54, 0x1f, 0xca, + 0xa5, 0xb7, 0x53, 0x87, 0x76, 0xe5, 0x4f, 0xf2, 0xc3, 0xa1, 0x18, 0x99, 0x63, 0x1c, 0xc0, 0x4d, 0x0a, 0x25, 0x47, + 0xc9, 0x5a, 0x82, 0xe8, 0x94, 0xc6, 0x53, 0x59, 0xaf, 0xad, 0x88, 0xbc, 0x1a, 0x71, 0x1e, 0x82, 0x1f, 0x3d, 0x50, + 0x8b, 0xbf, 0xd0, 0x82, 0xd8, 0x63, 0x9f, 0x2a, 0xa5, 0x17, 0xbc, 0x2a, 0x20, 0x44, 0xec, 0xef, 0x06, 0xda, 0x41, + 0x09, 0x0e, 0x25, 0xdc, 0x07, 0x84, 0x85, 0x7e, 0xed, 0xe5, 0x33, 0x19, 0xa3, 0xdc, 0x1b, 0x54, 0x73, 0x06, 0x30, + 0x95, 0x3e, 0x03, 0xbf, 0x4b, 0x80, 0x3a, 0xc5, 0xa7, 0xe8, 0x54, 0x6f, 0x1e, 0x36, 0x5d, 0x9f, 0x96, 0x28, 0x8a, + 0xe8, 0xce, 0xcf, 0xc7, 0x80, 0xd8, 0xd9, 0xb5, 0x19, 0x69, 0xd7, 0x7e, 0x83, 0x06, 0x2b, 0x25, 0x89, 0x76, 0x4e, + 0x09, 0xbb, 0x9d, 0x8f, 0x6c, 0xe9, 0x47, 0x29, 0x10, 0x73, 0xc7, 0x89, 0x44, 0xf6, 0x60, 0x23, 0x27, 0x70, 0x8b, + 0xf6, 0x8e, 0x0e, 0x40, 0xe5, 0x46, 0x41, 0x7e, 0x35, 0x47, 0x72, 0xc7, 0x77, 0xbd, 0xef, 0x06, 0xf5, 0xe0, 0xbb, + 0xde, 0x59, 0x4a, 0x72, 0x47, 0x78, 0xa6, 0xa6, 0x84, 0x88, 0xcf, 0xbe, 0x1b, 0xe4, 0x03, 0x3c, 0x4b, 0xb4, 0x48, + 0x8b, 0x84, 0x6a, 0x75, 0x8d, 0x9b, 0xf0, 0x22, 0x91, 0xdc, 0x43, 0xbb, 0xce, 0x23, 0x62, 0x01, 0xc8, 0x58, 0x7c, + 0x36, 0x6f, 0x28, 0xd4, 0xdd, 0xc4, 0x6c, 0xd1, 0x5d, 0x16, 0xfb, 0xfd, 0x6d, 0x9e, 0xd6, 0x3d, 0x1d, 0x1f, 0x83, + 0x2f, 0x48, 0x35, 0x01, 0x1e, 0xed, 0xaf, 0xcd, 0xf1, 0xea, 0xd5, 0xe6, 0x48, 0x59, 0xa8, 0x12, 0xf5, 0x5b, 0xac, + 0x66, 0x3d, 0x84, 0xe1, 0xce, 0x32, 0x63, 0x6d, 0x2f, 0x78, 0x25, 0x67, 0x55, 0x6c, 0x97, 0xe3, 0x2b, 0x96, 0xda, + 0x4a, 0xa2, 0x72, 0xb4, 0x1e, 0x6b, 0x53, 0x8c, 0xfc, 0x4a, 0x21, 0x51, 0x16, 0x1d, 0x5b, 0x0b, 0x05, 0xc4, 0x0b, + 0xd0, 0x97, 0xec, 0x4c, 0x03, 0xac, 0x37, 0x7a, 0x15, 0x11, 0x5a, 0x3e, 0x52, 0xe1, 0x4d, 0x6e, 0xaa, 0xcc, 0xca, + 0x66, 0xd1, 0xee, 0xa7, 0x8a, 0x57, 0x08, 0x56, 0x6f, 0xd4, 0x1e, 0x05, 0xa8, 0x3d, 0xb4, 0x50, 0x06, 0x90, 0xd2, + 0x34, 0x03, 0x40, 0x06, 0x00, 0x99, 0x2a, 0xe2, 0x33, 0x01, 0x2a, 0x6d, 0x75, 0xa3, 0xc0, 0x89, 0xf4, 0x1a, 0x68, + 0x16, 0x58, 0xe9, 0x23, 0x05, 0x19, 0x2c, 0xb6, 0x08, 0xc0, 0xca, 0x91, 0x33, 0x4c, 0x63, 0xc8, 0x36, 0x9a, 0xb8, + 0x24, 0xcd, 0xef, 0xc3, 0x2c, 0x95, 0x78, 0x12, 0x3f, 0xc8, 0x1a, 0x23, 0x00, 0x90, 0xbe, 0x4f, 0x2f, 0x8a, 0x2c, + 0x26, 0x1c, 0x38, 0xeb, 0xa9, 0x83, 0xa2, 0x26, 0xe7, 0x5a, 0xd3, 0xea, 0x59, 0x6d, 0xf2, 0x90, 0x05, 0x3a, 0x7b, + 0x30, 0x26, 0xb5, 0x7c, 0xcf, 0x23, 0xfb, 0x2b, 0xc7, 0x33, 0xc2, 0x77, 0xdd, 0xc1, 0xa9, 0xff, 0x6e, 0x6a, 0x60, + 0x62, 0x4a, 0x00, 0x36, 0x06, 0x47, 0x13, 0xe2, 0x77, 0x3a, 0x26, 0x53, 0x9b, 0x14, 0x81, 0xc0, 0x43, 0xf0, 0x0a, + 0x9e, 0x1b, 0x2e, 0xb7, 0xdc, 0xd8, 0x59, 0xe4, 0x69, 0x02, 0x70, 0xe2, 0x05, 0xdf, 0x02, 0x1c, 0xa7, 0x5e, 0x15, + 0xb2, 0x67, 0xcf, 0xc5, 0x74, 0x36, 0x0f, 0x1e, 0x12, 0xda, 0xbf, 0x98, 0xf0, 0x9b, 0xee, 0x2a, 0xb9, 0x32, 0xb5, + 0xee, 0x4d, 0x74, 0x95, 0xcb, 0x9d, 0x3e, 0xad, 0x38, 0x86, 0x39, 0x83, 0x55, 0x40, 0xce, 0xd9, 0x90, 0xbf, 0x38, + 0x07, 0xc0, 0x96, 0x95, 0xf0, 0x22, 0xfe, 0x22, 0x94, 0xd5, 0x02, 0xb8, 0x47, 0xce, 0x23, 0xf3, 0xcb, 0x57, 0xdb, + 0xa1, 0x9c, 0x53, 0x14, 0xc6, 0x72, 0x6a, 0x5a, 0x52, 0x9c, 0x0e, 0x3d, 0x05, 0x93, 0xa9, 0x2d, 0x7f, 0x6f, 0x13, + 0x97, 0xd9, 0x9b, 0x49, 0x38, 0x5f, 0x47, 0xb6, 0xad, 0x55, 0xf7, 0xd0, 0x0d, 0xc1, 0xa0, 0x8f, 0x11, 0xb4, 0x6c, + 0xae, 0xef, 0xd6, 0x83, 0x81, 0xc2, 0xf6, 0xad, 0xe9, 0xa6, 0x45, 0xa7, 0x38, 0xe0, 0xcc, 0x5a, 0xd7, 0xa8, 0x54, + 0x15, 0x87, 0x5e, 0xf2, 0x6e, 0x59, 0x95, 0x5d, 0x96, 0x5e, 0x08, 0x52, 0xa3, 0xae, 0x22, 0x44, 0x4a, 0xc5, 0x0e, + 0xef, 0xc9, 0xaf, 0x81, 0x89, 0x67, 0x56, 0x8e, 0xd2, 0x78, 0x0e, 0x30, 0x41, 0x0a, 0x7d, 0x53, 0x7e, 0x05, 0xb8, + 0xa1, 0x8b, 0x28, 0xcc, 0xde, 0xc6, 0x55, 0x50, 0x5b, 0x4d, 0xbf, 0x77, 0x70, 0x62, 0xcf, 0xeb, 0x7e, 0x3f, 0x25, + 0x1a, 0x3f, 0x0c, 0xbd, 0xc0, 0xbf, 0xc7, 0xd3, 0x7d, 0x13, 0xa4, 0xe6, 0x95, 0x07, 0x78, 0x45, 0x97, 0x5b, 0x9b, + 0x72, 0x45, 0xe3, 0x62, 0x5e, 0x23, 0x22, 0x7c, 0xea, 0x28, 0xb6, 0xdb, 0xfc, 0x38, 0xb5, 0x31, 0x18, 0x84, 0x70, + 0xdf, 0xca, 0xf8, 0x7d, 0xe2, 0xe5, 0xb3, 0x68, 0x0e, 0x8a, 0xd2, 0x4c, 0x93, 0x84, 0x14, 0xd2, 0x4b, 0x80, 0x3e, + 0x1a, 0x84, 0x5a, 0x5d, 0xf9, 0x47, 0xe2, 0xa5, 0x6a, 0x5a, 0x9b, 0xa7, 0x58, 0xa3, 0x40, 0xcc, 0xa2, 0x79, 0xc3, + 0x32, 0x3a, 0x24, 0xd5, 0xe5, 0xd2, 0x34, 0xe3, 0x0f, 0xab, 0x19, 0xaa, 0x15, 0x47, 0x4d, 0x50, 0xa3, 0x74, 0x03, + 0x17, 0xc0, 0xbf, 0xd3, 0x1d, 0x47, 0x35, 0x8a, 0x14, 0x0d, 0xf8, 0x04, 0x81, 0x61, 0xcd, 0xe6, 0x09, 0x6b, 0x4d, + 0x5d, 0x33, 0xfa, 0x7d, 0x19, 0x27, 0x64, 0x92, 0x90, 0x9c, 0x0f, 0x97, 0xeb, 0x47, 0x52, 0x5d, 0x00, 0xa9, 0x72, + 0xc5, 0x66, 0xbd, 0xde, 0x1c, 0x30, 0x7a, 0x61, 0xfd, 0xc2, 0xc6, 0x15, 0x9c, 0x5f, 0x12, 0xe6, 0xae, 0xfa, 0x11, + 0x66, 0x19, 0x54, 0x01, 0x69, 0x7e, 0x2c, 0x78, 0xf3, 0xdc, 0x05, 0xa2, 0x7e, 0x33, 0x52, 0x17, 0x94, 0x59, 0x3a, + 0xb7, 0x88, 0x40, 0xc0, 0x6b, 0x58, 0x3d, 0x81, 0x64, 0x5f, 0x3e, 0xf6, 0x69, 0x46, 0x81, 0xea, 0x08, 0x40, 0xd9, + 0xac, 0x1f, 0xc2, 0xfe, 0x01, 0xe1, 0x84, 0xfa, 0x9b, 0x37, 0x72, 0xd6, 0x90, 0x3c, 0x90, 0x6a, 0xc2, 0x63, 0x38, + 0x35, 0x16, 0xf8, 0xd2, 0xa2, 0x37, 0x15, 0xbc, 0x26, 0x38, 0xee, 0x05, 0x5a, 0xfb, 0x16, 0x70, 0x84, 0x08, 0x2e, + 0x43, 0x13, 0xa7, 0xbd, 0x5d, 0x2f, 0x40, 0x42, 0x73, 0x0b, 0xe7, 0xfa, 0xda, 0x05, 0x2d, 0x4e, 0x91, 0x93, 0x45, + 0x17, 0x18, 0xe8, 0x82, 0xcc, 0x1b, 0xff, 0xaa, 0x60, 0xe5, 0x02, 0x64, 0x2f, 0x15, 0x2b, 0x89, 0xd8, 0x76, 0xea, + 0x8f, 0x52, 0xd9, 0x6f, 0xcf, 0xac, 0x09, 0xfc, 0x2a, 0xb1, 0x5f, 0x22, 0x93, 0x6f, 0x7a, 0x6c, 0xf2, 0x95, 0xb1, + 0xd0, 0xa9, 0x65, 0x70, 0x4e, 0x8f, 0x0c, 0xce, 0xbd, 0x9d, 0x55, 0x9b, 0x10, 0x86, 0x82, 0x24, 0xd0, 0x74, 0xe9, + 0x61, 0xdd, 0xf4, 0xe7, 0x27, 0x2d, 0x7e, 0xad, 0xda, 0xb7, 0xee, 0xc7, 0x21, 0x76, 0xf1, 0xab, 0xc4, 0x33, 0xec, + 0xa3, 0x3e, 0x70, 0x80, 0xc9, 0x88, 0x89, 0xcb, 0x7e, 0x1f, 0x0a, 0x9b, 0x8d, 0xe7, 0xa3, 0xba, 0xf8, 0xb9, 0x78, + 0x00, 0x28, 0x87, 0x0a, 0xec, 0x72, 0x28, 0x43, 0x19, 0xb1, 0xa9, 0x2d, 0xf7, 0xfc, 0xfe, 0x2a, 0xcc, 0x41, 0xde, + 0xd1, 0x98, 0x38, 0x67, 0x20, 0x86, 0xc1, 0xd7, 0xbf, 0x7b, 0xb2, 0x4f, 0x9b, 0xef, 0xce, 0xe0, 0xbb, 0xa3, 0xb3, + 0x0f, 0xc8, 0x71, 0x73, 0xb6, 0x2e, 0x8b, 0xfb, 0x34, 0x16, 0x67, 0xdf, 0x41, 0xea, 0x77, 0x67, 0x45, 0x79, 0xf6, + 0x9d, 0xaa, 0xcc, 0x77, 0x67, 0xb4, 0xe0, 0x46, 0xbf, 0x5b, 0x13, 0xef, 0x9f, 0x95, 0xa6, 0x3d, 0x5b, 0x42, 0x38, + 0x96, 0x56, 0x3f, 0x82, 0x12, 0x51, 0x91, 0xa2, 0xca, 0x50, 0x56, 0x6b, 0xc7, 0x79, 0x9f, 0x68, 0x78, 0x6c, 0x9a, + 0x90, 0xb8, 0x5a, 0xc2, 0x3a, 0xd4, 0xb3, 0xd3, 0x26, 0xd9, 0x71, 0x1e, 0xa8, 0x03, 0x22, 0xe7, 0x2f, 0xf2, 0xd1, + 0x96, 0xbe, 0x06, 0xdf, 0x3a, 0x1c, 0xf2, 0xd1, 0xce, 0xfc, 0xf4, 0xc9, 0x5a, 0x29, 0x83, 0x8d, 0x14, 0xa3, 0x10, + 0x12, 0xc5, 0x6d, 0x7b, 0x0c, 0x80, 0xff, 0xfd, 0xc3, 0x81, 0x7e, 0xef, 0xe4, 0x6f, 0xb5, 0x5b, 0x5a, 0xf5, 0xfc, + 0xd0, 0x22, 0xcc, 0x78, 0x5d, 0x1b, 0x76, 0xb6, 0xbd, 0x04, 0x94, 0xde, 0x37, 0x0d, 0x6a, 0x8a, 0xe8, 0x27, 0xac, + 0x26, 0x56, 0x71, 0x58, 0x90, 0x12, 0x87, 0x18, 0x8e, 0xd1, 0x0e, 0x3d, 0x4e, 0x17, 0x35, 0x4f, 0xee, 0x3b, 0x64, + 0xdc, 0xfa, 0x3e, 0x20, 0xb9, 0x14, 0xce, 0x3f, 0x78, 0xa1, 0xc1, 0x44, 0x2f, 0xf2, 0xaa, 0xc8, 0xc4, 0x48, 0xd0, + 0x28, 0xbf, 0x25, 0x71, 0xe6, 0x0c, 0x6b, 0x71, 0xa6, 0x10, 0xc2, 0x42, 0x42, 0xe5, 0x2e, 0x4a, 0x4a, 0x0f, 0xce, + 0x9e, 0xec, 0xcb, 0xe6, 0x77, 0xc2, 0x84, 0x18, 0x2d, 0x80, 0x06, 0x67, 0xd7, 0x2e, 0xef, 0x21, 0x2c, 0x73, 0xef, + 0xf7, 0xb7, 0x77, 0x79, 0x01, 0x71, 0x99, 0x67, 0x52, 0xb1, 0x5a, 0x9e, 0x01, 0x4d, 0x9e, 0x88, 0xcf, 0xc2, 0x4a, + 0x4e, 0x83, 0xaa, 0xa3, 0x58, 0xbd, 0x8d, 0xe7, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, 0xdd, 0x67, 0x6f, 0x94, + 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, 0xe7, 0x26, 0xc8, 0x3f, + 0xbe, 0x3e, 0xa1, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, 0x9b, 0x23, 0x35, 0x79, + 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, 0x67, 0x2b, 0x73, 0x2f, + 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xba, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, 0x62, 0x86, 0x29, 0xd6, + 0x5f, 0xd8, 0xf0, 0x9b, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x63, 0x16, 0xc2, 0xe1, 0xb0, 0x99, 0x14, + 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0x87, 0x43, 0x57, 0xcb, 0xd6, 0xc2, 0x83, 0x87, 0xaa, 0x85, 0x9b, 0x86, 0xe5, + 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, 0x1b, 0x6b, 0xe0, 0x1a, + 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, 0x09, 0xa3, 0x15, 0xc2, + 0xef, 0xbe, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, 0x4a, 0xb1, 0x34, 0x6f, + 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0x73, 0xdf, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, 0xcd, 0xe6, 0xc0, 0x7d, + 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x27, 0xcb, 0xe3, 0xf0, 0x2d, 0xfc, 0xcb, + 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xab, 0x14, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, 0x8d, 0xa8, 0x0d, 0x7f, + 0xc3, 0xbf, 0x85, 0x7d, 0x84, 0xfd, 0x86, 0x26, 0x08, 0x03, 0x58, 0x7f, 0x26, 0x10, 0x17, 0x16, 0x82, 0x04, 0x7f, + 0xab, 0x24, 0xff, 0x9c, 0xf0, 0xd9, 0xa2, 0x04, 0xb2, 0x3a, 0x8c, 0xe2, 0x13, 0x8a, 0x89, 0x42, 0x18, 0x6e, 0x09, + 0xbd, 0xa3, 0xff, 0x46, 0x94, 0x64, 0x93, 0xdc, 0x8a, 0xf5, 0x40, 0x26, 0x49, 0x30, 0xc1, 0xca, 0x0b, 0xe5, 0x4b, + 0xf7, 0x42, 0xa9, 0xb5, 0x16, 0xb4, 0x7e, 0xf9, 0x93, 0xc4, 0x33, 0xa0, 0x7b, 0x20, 0x63, 0xd0, 0x6d, 0x44, 0x35, + 0xc9, 0x31, 0x7d, 0x94, 0xce, 0x33, 0x50, 0x01, 0x9d, 0xad, 0xb3, 0xb0, 0x5e, 0x16, 0xe5, 0xaa, 0x15, 0x1e, 0x2a, + 0x4b, 0x1f, 0xa9, 0xc7, 0x98, 0x17, 0xe6, 0xc9, 0x89, 0x7c, 0xf0, 0x08, 0xd0, 0xf0, 0x28, 0x4f, 0xab, 0x8e, 0xd2, + 0xfa, 0x81, 0x65, 0xc0, 0x08, 0x9c, 0x28, 0x03, 0x1e, 0x61, 0x19, 0x98, 0xa7, 0x5d, 0x86, 0x1a, 0xc4, 0x1a, 0x55, + 0x57, 0x6a, 0x83, 0x39, 0x51, 0x94, 0x7c, 0x8a, 0xa5, 0x15, 0xc6, 0xd0, 0xd4, 0x95, 0x47, 0xd6, 0x4b, 0x4e, 0xd8, + 0x93, 0xdd, 0x40, 0xba, 0x85, 0x8d, 0x02, 0x17, 0x74, 0x2d, 0x4b, 0x94, 0x8b, 0x6e, 0x19, 0x51, 0x26, 0x42, 0xea, + 0x67, 0x0f, 0x67, 0x5a, 0xed, 0x37, 0x76, 0xd2, 0xbe, 0x3d, 0x52, 0xf4, 0x82, 0x81, 0xf8, 0xb4, 0x47, 0x4a, 0x3d, + 0x6b, 0xe4, 0x32, 0xb0, 0xa5, 0x4b, 0x55, 0xcf, 0x7f, 0x83, 0xf2, 0x1d, 0xcc, 0x8c, 0xb3, 0xd9, 0xef, 0x7a, 0x73, + 0x7b, 0xb2, 0xaf, 0x9b, 0xdf, 0x59, 0xaf, 0x07, 0x5b, 0x83, 0x4c, 0x7c, 0xa9, 0xa8, 0xa7, 0xac, 0x42, 0xac, 0xc8, + 0xec, 0x7f, 0x0b, 0xef, 0x77, 0x78, 0x6b, 0x84, 0x66, 0x65, 0x3c, 0xcc, 0x47, 0x4f, 0xf6, 0xa2, 0xf9, 0xbd, 0xb3, + 0x6c, 0x2b, 0x57, 0x25, 0xb3, 0xfd, 0x7e, 0x94, 0x34, 0x67, 0x8f, 0xd7, 0x48, 0xea, 0x00, 0x1f, 0xaf, 0xcf, 0xf0, + 0x91, 0x4a, 0x28, 0xb5, 0xa0, 0xaa, 0x41, 0xeb, 0x63, 0xbf, 0xb7, 0x9e, 0xd3, 0xc7, 0x8f, 0xe5, 0x74, 0x4b, 0x8a, + 0x30, 0x7e, 0x60, 0x30, 0x65, 0x27, 0x4e, 0x5d, 0xf2, 0x66, 0x48, 0xef, 0xba, 0x55, 0x52, 0x97, 0x3d, 0x4a, 0x04, + 0xa1, 0x0e, 0xd6, 0x2f, 0xf6, 0x43, 0x98, 0xd9, 0xa2, 0x3f, 0x6c, 0x56, 0x73, 0x42, 0x41, 0x04, 0x88, 0x56, 0x79, + 0x1f, 0x38, 0x26, 0x09, 0xb3, 0xe6, 0x86, 0x74, 0xeb, 0xcd, 0x95, 0xf6, 0x4a, 0x0a, 0xe8, 0xe7, 0x20, 0x73, 0xfb, + 0xe8, 0x96, 0xab, 0x96, 0x79, 0x2e, 0x6d, 0x39, 0x60, 0xd1, 0x42, 0x74, 0x66, 0xe7, 0xd2, 0xe1, 0xe0, 0x3f, 0xa8, + 0x2b, 0x51, 0x45, 0x04, 0x1d, 0x45, 0x0b, 0x46, 0xab, 0x55, 0xbb, 0x9c, 0x6c, 0x2a, 0x64, 0x4b, 0x22, 0x9c, 0x28, + 0xd9, 0x2b, 0xa1, 0x3e, 0xca, 0xd5, 0x9e, 0x69, 0x88, 0x3f, 0x13, 0xb0, 0x69, 0x83, 0xbf, 0x05, 0xee, 0x65, 0x70, + 0x66, 0xda, 0xa7, 0x61, 0x04, 0x44, 0xe6, 0x10, 0xec, 0xe7, 0x77, 0x3d, 0xa8, 0xe0, 0x41, 0x47, 0xfa, 0xeb, 0x7a, + 0x56, 0xe0, 0x99, 0x7b, 0xe2, 0xf9, 0x9b, 0x13, 0xe9, 0x45, 0x0e, 0x0f, 0x34, 0xf7, 0x61, 0xc6, 0x5f, 0x96, 0x65, + 0xb8, 0x1b, 0x2d, 0xcb, 0x62, 0xe5, 0x45, 0x7a, 0x1f, 0xcf, 0xa4, 0x18, 0x48, 0x74, 0x98, 0x19, 0x5d, 0xc5, 0x3a, + 0xce, 0x61, 0xdc, 0xdb, 0x93, 0xb0, 0x42, 0xfb, 0x67, 0x89, 0xbd, 0x2e, 0x00, 0xc0, 0x21, 0x6b, 0xd0, 0x0a, 0xef, + 0x74, 0x7b, 0xbb, 0xc7, 0x25, 0x25, 0x8a, 0x1b, 0x35, 0x3f, 0xab, 0xa1, 0x65, 0x82, 0x5a, 0x66, 0xdd, 0xc9, 0x64, + 0x8a, 0x24, 0xf0, 0x6d, 0xd8, 0x1b, 0x56, 0xe4, 0xf3, 0x46, 0x6e, 0x0f, 0xef, 0xc2, 0x95, 0x88, 0xb5, 0x05, 0x9d, + 0x74, 0x64, 0x1c, 0xee, 0x85, 0xe6, 0x46, 0xba, 0x7f, 0x52, 0x25, 0x61, 0x29, 0x62, 0xb8, 0x05, 0xb2, 0xbd, 0xda, + 0x56, 0x82, 0x12, 0x48, 0x60, 0x3f, 0x94, 0x62, 0x99, 0x6e, 0x05, 0x80, 0x39, 0xf0, 0x3f, 0x25, 0x0c, 0xa1, 0xbb, + 0xf3, 0x10, 0xaf, 0x1a, 0x79, 0xdf, 0x20, 0x04, 0xfb, 0x6b, 0x90, 0xd3, 0x80, 0x41, 0xa4, 0x18, 0xc9, 0x82, 0x81, + 0x04, 0x20, 0xe7, 0x6b, 0x30, 0xc9, 0x4d, 0x73, 0xcf, 0x0f, 0x72, 0xdd, 0xc1, 0xb4, 0x0f, 0xba, 0x17, 0xd7, 0x9a, + 0xe5, 0xe0, 0x15, 0x13, 0xf1, 0xbf, 0xd7, 0x5e, 0xc9, 0x72, 0x96, 0xf9, 0x8d, 0xb9, 0xe8, 0x64, 0x70, 0xd5, 0x10, + 0x7e, 0x31, 0xcb, 0xe6, 0x3c, 0x9a, 0x65, 0x3a, 0xd4, 0xbf, 0x68, 0x8e, 0x4a, 0x01, 0x0c, 0x75, 0xbc, 0x00, 0x6b, + 0xbc, 0x2b, 0xdd, 0xb4, 0xe2, 0x91, 0xc6, 0x18, 0x05, 0x15, 0x3a, 0x08, 0xfd, 0xbd, 0x06, 0x78, 0x0d, 0x26, 0xb9, + 0x11, 0x2a, 0x1f, 0x5c, 0xd0, 0x0d, 0xdd, 0x72, 0xe5, 0x12, 0xd4, 0xa4, 0x6a, 0xf9, 0xe5, 0x08, 0xf5, 0xae, 0x96, + 0x5c, 0xaa, 0xcd, 0xa7, 0x46, 0x59, 0x23, 0xc8, 0xe4, 0x28, 0xfd, 0x3e, 0xe5, 0xc2, 0xad, 0x8c, 0xc9, 0xfa, 0x70, + 0xf0, 0x0a, 0x6e, 0x6a, 0xfc, 0x3a, 0x27, 0x16, 0x51, 0x7b, 0x48, 0x84, 0xad, 0xdd, 0x0a, 0xdd, 0x7b, 0xdc, 0x28, + 0xcd, 0xa3, 0x6c, 0x13, 0x8b, 0xca, 0xeb, 0x25, 0x60, 0x2d, 0xee, 0x01, 0x19, 0x2a, 0x2d, 0xfd, 0x8a, 0x15, 0x00, + 0x19, 0x20, 0x85, 0x8d, 0x1f, 0x90, 0xf6, 0xea, 0x83, 0x97, 0xfa, 0xfd, 0xbe, 0x31, 0xe5, 0xbf, 0x7f, 0xc8, 0x81, + 0x99, 0x50, 0x94, 0xf5, 0x0e, 0x26, 0x10, 0x5c, 0x3b, 0x49, 0x7b, 0x56, 0xf3, 0x17, 0xeb, 0xda, 0x03, 0x52, 0x2b, + 0xdf, 0x62, 0xae, 0x7a, 0x6d, 0x5f, 0x6c, 0xf6, 0x69, 0x75, 0x63, 0x34, 0x0e, 0x82, 0xa5, 0xd5, 0x5b, 0xad, 0x72, + 0xc8, 0x1b, 0x5e, 0x81, 0x48, 0x65, 0x5d, 0x5d, 0x2b, 0xe7, 0xea, 0x5a, 0x70, 0x24, 0x90, 0x2d, 0x79, 0x0e, 0xff, + 0x85, 0xdc, 0x2b, 0x0f, 0x87, 0xc2, 0xef, 0xf7, 0xd3, 0x19, 0x69, 0x65, 0x81, 0x32, 0x6d, 0x5d, 0x7b, 0xa1, 0x7f, + 0x38, 0xfc, 0x00, 0x5e, 0x23, 0xfe, 0xe1, 0x50, 0xf6, 0xfb, 0x1f, 0xcd, 0x4d, 0xe6, 0x7c, 0xac, 0x94, 0xb2, 0x97, + 0xa8, 0x74, 0x7f, 0x9b, 0xf0, 0xde, 0xff, 0x1e, 0xfd, 0xef, 0xd1, 0x65, 0x4f, 0x05, 0x80, 0x25, 0x7c, 0x86, 0x37, + 0x74, 0xa6, 0x2e, 0xe7, 0x4c, 0xba, 0xbb, 0x2b, 0x3f, 0xf4, 0x9e, 0xc6, 0x87, 0xef, 0xcd, 0x4d, 0x1b, 0x7f, 0xad, + 0x8e, 0x34, 0x09, 0x1d, 0x17, 0xfd, 0xc3, 0xe1, 0x53, 0xa2, 0xf5, 0x69, 0xa9, 0xd2, 0xa7, 0x29, 0xf0, 0x24, 0xc3, + 0x86, 0xeb, 0x16, 0xa6, 0xa3, 0xf9, 0x71, 0xf3, 0x55, 0xf2, 0xe2, 0x2c, 0x85, 0x6b, 0x6f, 0x3e, 0x4b, 0xe7, 0x53, + 0xb0, 0xae, 0x0c, 0xf3, 0x59, 0x3d, 0x0f, 0x20, 0x75, 0x08, 0x69, 0xd6, 0x34, 0xfc, 0x5b, 0xe5, 0x0a, 0xde, 0xda, + 0xe3, 0xdd, 0x60, 0x44, 0xa9, 0x23, 0x7d, 0xd2, 0x86, 0xd0, 0x25, 0x95, 0xfc, 0x47, 0x91, 0xc7, 0x18, 0xb3, 0xf1, + 0x9a, 0xc8, 0x3e, 0x8b, 0xfc, 0x55, 0x01, 0x80, 0x45, 0x80, 0x80, 0x9c, 0xce, 0x1d, 0x49, 0xfc, 0xe7, 0xe4, 0xdb, + 0x3f, 0xa6, 0x4b, 0xfb, 0x50, 0x16, 0x77, 0xa5, 0xa8, 0xaa, 0xa3, 0xd2, 0x76, 0xb6, 0x5c, 0x0f, 0xf4, 0xa1, 0xfd, + 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, 0x58, 0x3f, 0xbf, + 0xdf, 0xbd, 0x8d, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, 0xc3, 0x54, 0xe2, + 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0x7f, 0x54, 0x30, 0xff, 0x75, 0x7b, 0xb0, 0x3e, + 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0x17, 0xc2, 0x22, 0xf9, 0xf5, 0xc9, 0x91, + 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x91, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9e, 0xff, 0xb9, 0x99, 0xff, 0x03, 0x74, 0x86, + 0x2c, 0x5e, 0x70, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0x2f, 0x80, 0x83, 0xf9, 0x05, + 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0x37, 0x16, 0xcf, 0x95, 0x5c, 0x10, 0xfa, + 0xba, 0x0a, 0xb3, 0x71, 0x55, 0x6c, 0x2a, 0x51, 0x6c, 0xea, 0x1e, 0xa9, 0x65, 0xf3, 0x69, 0x6d, 0x2b, 0x64, 0x7f, + 0x12, 0x2d, 0xda, 0x2e, 0x43, 0x35, 0x19, 0x65, 0xe9, 0x7a, 0x0a, 0xa4, 0x7a, 0x01, 0x9c, 0x45, 0xe6, 0x95, 0x2f, + 0xce, 0x1e, 0xb0, 0x45, 0xe3, 0x29, 0x30, 0xa2, 0xd2, 0x1f, 0x79, 0x63, 0x74, 0x7a, 0xa2, 0xdf, 0xcf, 0xa7, 0x14, + 0xf2, 0xf5, 0x13, 0x60, 0x72, 0xd5, 0x72, 0x01, 0xfa, 0x32, 0xd4, 0x41, 0x25, 0x4a, 0xad, 0x18, 0x46, 0x2c, 0xfc, + 0x24, 0x90, 0xbd, 0x99, 0x82, 0x9a, 0x55, 0x94, 0x84, 0x4a, 0x54, 0x4a, 0xb6, 0x26, 0xa8, 0xa5, 0xf7, 0x45, 0x51, + 0xef, 0x2b, 0x70, 0x94, 0x8c, 0xb4, 0x59, 0x4e, 0x99, 0x71, 0x51, 0xe6, 0xa2, 0x1f, 0xec, 0xdf, 0x95, 0xe7, 0x37, + 0x32, 0x9f, 0xe5, 0xbe, 0xa3, 0x73, 0xda, 0x8e, 0x0b, 0x94, 0xb9, 0xe5, 0xb4, 0xd5, 0x92, 0xc7, 0xe4, 0x3d, 0x0b, + 0xb6, 0xfd, 0x97, 0x09, 0xf2, 0x2a, 0xc2, 0x7c, 0x42, 0x95, 0xcd, 0x3f, 0x20, 0xcc, 0x16, 0x07, 0xf6, 0xd8, 0x85, + 0x89, 0x48, 0x6f, 0xc1, 0x92, 0x18, 0x66, 0xa5, 0x08, 0xe3, 0x1d, 0x78, 0xff, 0x6c, 0x2a, 0x31, 0x3a, 0x43, 0x27, + 0xf7, 0xb3, 0x87, 0xb4, 0x4e, 0xce, 0xde, 0xbe, 0x3e, 0xfb, 0xae, 0x37, 0x28, 0x46, 0x69, 0x3c, 0xe8, 0x7d, 0x77, + 0xb6, 0xda, 0x00, 0x44, 0xa6, 0x38, 0x8b, 0xc9, 0x94, 0x26, 0xe2, 0x33, 0x32, 0x0c, 0x9e, 0xd5, 0x89, 0x38, 0xa3, + 0x89, 0xe9, 0xbe, 0x46, 0x69, 0xf2, 0xed, 0x28, 0xcc, 0xe1, 0xe5, 0x52, 0x6c, 0x2a, 0x11, 0x83, 0x9d, 0x52, 0xcd, + 0xb3, 0xbc, 0x7d, 0x16, 0xe7, 0xa3, 0x0e, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, 0x05, 0x84, 0x1e, + 0x00, 0x27, 0x5d, 0xf9, 0xf3, 0x70, 0x10, 0x09, 0x84, 0x5a, 0x30, 0x27, 0xd3, 0x88, 0x6e, 0x48, 0xaf, 0xb0, 0xcf, + 0xc0, 0x2c, 0xa4, 0x34, 0x0f, 0x6e, 0xae, 0x16, 0x2d, 0x77, 0xc5, 0xca, 0x51, 0x58, 0xad, 0x45, 0x54, 0x23, 0xd5, + 0x31, 0x38, 0xef, 0x40, 0x04, 0x80, 0x62, 0x04, 0xcf, 0x78, 0xd4, 0xef, 0x47, 0x2a, 0x28, 0x27, 0xa1, 0x5f, 0x14, + 0xfa, 0xa5, 0x31, 0x28, 0x63, 0xfe, 0x2e, 0xd4, 0xc4, 0x00, 0xf5, 0x96, 0x87, 0x8a, 0x23, 0x00, 0x97, 0x73, 0xc4, + 0x8c, 0xf3, 0x1e, 0x77, 0xd1, 0x38, 0x15, 0xef, 0x84, 0xba, 0x0e, 0x96, 0x0a, 0x75, 0xde, 0xd4, 0x47, 0x7a, 0x4e, + 0x9a, 0x04, 0x0d, 0xe2, 0x06, 0x1e, 0xaf, 0x86, 0x80, 0x6a, 0x25, 0xa4, 0xde, 0x42, 0xa7, 0x54, 0x75, 0x08, 0xac, + 0x01, 0x2e, 0x51, 0xd8, 0x56, 0x98, 0x1c, 0xd1, 0xa6, 0x2c, 0x45, 0x7e, 0xc4, 0x06, 0xed, 0x92, 0x91, 0xa9, 0x83, + 0xcb, 0xe5, 0x72, 0x22, 0xea, 0x5f, 0xf3, 0x2d, 0x80, 0xf3, 0x42, 0x7e, 0x6b, 0x37, 0x5b, 0x26, 0xd9, 0xae, 0x2b, + 0xc3, 0x59, 0x52, 0x8a, 0x6a, 0x5d, 0xe4, 0x55, 0x7a, 0x2f, 0x7e, 0xd6, 0x0f, 0x5d, 0x02, 0x29, 0xf4, 0x23, 0xbd, + 0x6e, 0x37, 0x47, 0xaa, 0x71, 0x74, 0x39, 0xb6, 0xa7, 0xd2, 0x4e, 0xf6, 0xaa, 0xc5, 0x9b, 0x2d, 0x73, 0x25, 0x69, + 0x1c, 0x8b, 0xfc, 0x6d, 0x1e, 0xa7, 0x91, 0x95, 0x1c, 0xfe, 0x1f, 0xde, 0xbe, 0x85, 0xbb, 0x6d, 0x1b, 0x5b, 0xf7, + 0xaf, 0x58, 0xbc, 0xa9, 0x4a, 0x44, 0x90, 0x2c, 0x39, 0x49, 0x67, 0x4a, 0x19, 0xd6, 0x71, 0xf3, 0x68, 0xd3, 0x36, + 0x71, 0x1a, 0xa7, 0x9d, 0xce, 0xe8, 0xea, 0xb8, 0x34, 0x09, 0x5b, 0x6c, 0x68, 0x40, 0x25, 0x29, 0x3f, 0x22, 0xf1, + 0xbf, 0xdf, 0xb5, 0x37, 0x9e, 0xa4, 0x68, 0x27, 0x33, 0xf7, 0xdc, 0xbb, 0xb2, 0x56, 0x2c, 0x82, 0x20, 0xde, 0xd8, + 0xd8, 0xd8, 0x8f, 0x6f, 0xeb, 0x00, 0xd5, 0x2e, 0xf2, 0x95, 0x8b, 0x8d, 0xfc, 0x22, 0x2b, 0x31, 0x60, 0x70, 0xa3, + 0x51, 0xad, 0x50, 0x53, 0x26, 0xf0, 0x85, 0x7c, 0x8f, 0x11, 0xb7, 0x59, 0x99, 0x00, 0xc3, 0x8f, 0x89, 0xfa, 0x92, + 0x9e, 0x42, 0x94, 0x07, 0x15, 0x8f, 0xfb, 0x05, 0x47, 0xc4, 0x6b, 0xab, 0x32, 0x07, 0x26, 0x5b, 0xab, 0x20, 0x11, + 0xec, 0x2e, 0x9b, 0xeb, 0x45, 0xb4, 0x50, 0x77, 0xa1, 0x5e, 0xbc, 0xdd, 0xf6, 0x12, 0x45, 0x07, 0x9c, 0xfc, 0x34, + 0x78, 0x15, 0x67, 0x39, 0x4f, 0xf7, 0x2a, 0xb9, 0xa7, 0x36, 0xd4, 0x9e, 0x72, 0xe6, 0x80, 0x9d, 0xf7, 0x75, 0xb5, + 0xa7, 0xd7, 0xf4, 0x9e, 0x6e, 0xe7, 0x1e, 0x5c, 0x30, 0x70, 0xe7, 0x5e, 0x66, 0xd7, 0x5c, 0xec, 0x81, 0x32, 0xd0, + 0x1a, 0x0f, 0xd4, 0xa2, 0x1a, 0xa9, 0x89, 0xd1, 0x81, 0xab, 0x13, 0x7d, 0x30, 0x07, 0xf4, 0x7b, 0x88, 0x15, 0xde, + 0x7a, 0xbb, 0xd2, 0x07, 0x6d, 0x40, 0x7f, 0x5e, 0x9a, 0x3e, 0xe8, 0x68, 0xf1, 0x2a, 0x24, 0x70, 0x63, 0x48, 0x35, + 0x52, 0xab, 0x91, 0x55, 0xa0, 0x78, 0xc3, 0x5b, 0xbc, 0x3b, 0xd7, 0x92, 0x8d, 0xf7, 0x12, 0x81, 0xbd, 0x32, 0x51, + 0xc5, 0x99, 0x38, 0xf6, 0x52, 0x79, 0xad, 0x9d, 0x64, 0x84, 0xf1, 0x2d, 0x2b, 0xa9, 0xbf, 0x43, 0xcc, 0x2d, 0xd2, + 0x1c, 0x06, 0x2f, 0xc3, 0x8a, 0xcc, 0x78, 0xbf, 0x2f, 0x67, 0x32, 0x2a, 0x67, 0x62, 0xbf, 0x8c, 0x14, 0x42, 0xdb, + 0x7d, 0x22, 0xa0, 0x07, 0x25, 0x40, 0xbe, 0x00, 0xa8, 0x7a, 0x48, 0xf8, 0xf3, 0x90, 0xd4, 0xa7, 0x53, 0xe8, 0x53, + 0x68, 0xeb, 0x15, 0xaf, 0xa0, 0xaa, 0x6e, 0x8c, 0x6c, 0xa3, 0x82, 0x16, 0x8f, 0xe5, 0x59, 0x6d, 0x18, 0x9b, 0x53, + 0xeb, 0x5d, 0x6f, 0x36, 0x98, 0xb2, 0xb9, 0x50, 0xab, 0x30, 0x24, 0xd1, 0x4d, 0xe9, 0x85, 0x0f, 0xb1, 0x58, 0x59, + 0xad, 0xcd, 0x6f, 0x62, 0x7f, 0x64, 0x22, 0xc5, 0xfd, 0x6c, 0x89, 0x73, 0x17, 0x8f, 0xe7, 0x55, 0x5f, 0x6b, 0x69, + 0x91, 0x69, 0xf3, 0x9d, 0xbe, 0x0c, 0x69, 0x2a, 0x6a, 0x48, 0xa3, 0xce, 0x0c, 0xba, 0x6f, 0x97, 0x57, 0x54, 0x23, + 0x4c, 0x80, 0x57, 0x3a, 0x83, 0x6e, 0x34, 0x1e, 0x88, 0xa2, 0x1a, 0x15, 0x6b, 0x21, 0x10, 0x6d, 0x18, 0x72, 0xcc, + 0x2c, 0x21, 0xc9, 0x3e, 0xf1, 0xef, 0x54, 0x70, 0x85, 0x22, 0xbe, 0x31, 0x70, 0xde, 0x95, 0xf5, 0xec, 0xae, 0x23, + 0x3f, 0x27, 0x16, 0x56, 0xfb, 0x0f, 0xcd, 0xa3, 0xd6, 0x38, 0x0b, 0x68, 0x6b, 0x5a, 0xdd, 0x70, 0xb8, 0x47, 0x75, + 0x2c, 0x4a, 0x03, 0x48, 0xec, 0x91, 0xe5, 0xa2, 0x75, 0xcc, 0xa0, 0x01, 0xfd, 0x6d, 0x76, 0xb5, 0xbe, 0x42, 0xd4, + 0xb6, 0x12, 0x59, 0x27, 0xa9, 0xfc, 0x4b, 0xda, 0xa3, 0xae, 0xed, 0xa9, 0xfc, 0x6f, 0xdb, 0x54, 0x39, 0xb4, 0x40, + 0xf2, 0xd8, 0xcd, 0x59, 0xa0, 0x3a, 0x12, 0x44, 0x81, 0xda, 0x7a, 0xc1, 0xd4, 0x3b, 0x65, 0x8a, 0x0e, 0xe4, 0xe7, + 0xc2, 0x9c, 0x61, 0x5f, 0x70, 0xc4, 0x98, 0xa5, 0x12, 0x83, 0xa9, 0x8f, 0x31, 0xaa, 0x69, 0xad, 0x00, 0x5d, 0x3f, + 0xdd, 0xc0, 0x9f, 0xa8, 0xa8, 0xd1, 0x50, 0x6b, 0x24, 0x85, 0xa2, 0x89, 0x0a, 0x3a, 0x96, 0x16, 0x3a, 0x98, 0x42, + 0x27, 0x91, 0xb0, 0x04, 0x34, 0x4c, 0x88, 0x4e, 0x2a, 0xf0, 0xd6, 0x00, 0xce, 0x7c, 0x5c, 0x94, 0xeb, 0x42, 0x1b, + 0xcc, 0xfd, 0x10, 0x5f, 0xf3, 0xd7, 0x2f, 0x9c, 0x51, 0x7d, 0xcb, 0x5a, 0xdf, 0xd3, 0x82, 0xfc, 0x10, 0x72, 0x8a, + 0x0e, 0x4c, 0xec, 0x68, 0x83, 0xc6, 0x18, 0x65, 0xad, 0x43, 0x5d, 0x9c, 0xe8, 0xf8, 0x2b, 0xda, 0x04, 0xef, 0x01, + 0x4f, 0x11, 0x6d, 0x78, 0x28, 0x8c, 0x55, 0x35, 0x3e, 0x95, 0xac, 0xa5, 0x07, 0x2b, 0x78, 0xba, 0x4e, 0x78, 0x08, + 0x7a, 0x24, 0xc2, 0x8e, 0xc2, 0x62, 0x1e, 0x2f, 0xe0, 0x38, 0x29, 0x08, 0xa8, 0x1d, 0xf4, 0x15, 0x7c, 0xbe, 0x40, + 0xf7, 0x57, 0x89, 0x1e, 0x60, 0x68, 0x41, 0xdc, 0x0c, 0x7d, 0x3a, 0xba, 0x8a, 0x57, 0x0d, 0x15, 0x09, 0x9f, 0x17, + 0x60, 0x3b, 0xa4, 0xd4, 0x53, 0xa0, 0x85, 0x4a, 0x94, 0x7e, 0x18, 0xf8, 0x0e, 0x0d, 0x7c, 0xad, 0x75, 0x80, 0x86, + 0x7e, 0xc6, 0x34, 0xb5, 0xce, 0x50, 0xf9, 0xcc, 0xbb, 0x67, 0x46, 0xcb, 0x99, 0x05, 0x63, 0xd0, 0xb7, 0xd1, 0x14, + 0xc5, 0x39, 0xf9, 0x2c, 0x28, 0xe2, 0x34, 0x8b, 0x73, 0xf0, 0xdb, 0x8c, 0x0b, 0xcc, 0x98, 0xc4, 0x15, 0xbf, 0x94, + 0x05, 0x68, 0xbb, 0x73, 0x95, 0x5a, 0xd7, 0x20, 0x20, 0xfb, 0x01, 0xac, 0x5e, 0x1a, 0x3a, 0x2a, 0xe7, 0xdd, 0xa5, + 0x4d, 0x21, 0x62, 0x11, 0x82, 0x4d, 0x33, 0x5d, 0xb2, 0xe3, 0x50, 0x69, 0x73, 0x20, 0xbe, 0x11, 0x1a, 0xf7, 0x4f, + 0xc3, 0xd8, 0x6a, 0x8a, 0xad, 0xdd, 0xdb, 0x76, 0xfb, 0x7b, 0xe9, 0xa5, 0xd3, 0x9c, 0xf4, 0x18, 0xfb, 0xbd, 0x0c, + 0x8b, 0x91, 0xed, 0x08, 0x81, 0x25, 0xe7, 0x7d, 0xea, 0xbf, 0xa2, 0xe5, 0x3c, 0x01, 0xd3, 0x11, 0x1d, 0x21, 0x17, + 0x28, 0x3b, 0x46, 0x71, 0x07, 0x06, 0x57, 0xf4, 0xfb, 0x60, 0x95, 0x61, 0x2e, 0x24, 0x4b, 0x92, 0x32, 0x78, 0x9e, + 0x7a, 0x18, 0xf0, 0x6b, 0xa6, 0xcc, 0x5d, 0x94, 0xf5, 0xe9, 0x92, 0x4c, 0x53, 0x64, 0x20, 0xd6, 0xe1, 0x26, 0x4b, + 0xa3, 0x44, 0x89, 0xc8, 0x96, 0xe8, 0x1f, 0x69, 0x28, 0x96, 0x0e, 0xd7, 0x8b, 0x54, 0x89, 0x50, 0x31, 0x4f, 0xf1, + 0xa4, 0x4e, 0xeb, 0x74, 0x84, 0xf1, 0x26, 0x41, 0x29, 0x57, 0xc3, 0x40, 0x95, 0x54, 0x2f, 0x85, 0x4d, 0xb1, 0xdd, + 0xea, 0x8b, 0x95, 0x98, 0xc7, 0x0b, 0x7c, 0x29, 0x70, 0x14, 0x7f, 0xe2, 0x5e, 0xac, 0x29, 0xb5, 0x3d, 0xa8, 0x1d, + 0x51, 0x42, 0x7f, 0xe2, 0x70, 0x91, 0xf8, 0x4e, 0xea, 0xb8, 0x7f, 0x68, 0x11, 0x72, 0xa6, 0x0e, 0x52, 0xc3, 0x0d, + 0xed, 0x08, 0xff, 0x0d, 0xd7, 0x67, 0x9c, 0xd1, 0x9b, 0x6a, 0x46, 0x8d, 0xdf, 0xeb, 0xe1, 0x19, 0xa3, 0x3e, 0x1b, + 0x38, 0xac, 0x10, 0x85, 0x36, 0xec, 0xa8, 0x54, 0xa2, 0x85, 0xa1, 0x54, 0x7f, 0x09, 0x15, 0x47, 0xdc, 0x99, 0x51, + 0x96, 0x8c, 0x4f, 0xcb, 0x43, 0x31, 0x1d, 0x0c, 0x4a, 0x52, 0x19, 0x0b, 0x3d, 0xb8, 0x1e, 0x78, 0xfe, 0x3d, 0x70, + 0x0b, 0xf1, 0xe0, 0x90, 0xc5, 0x90, 0x1b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8d, 0x4a, 0x15, 0xbc, 0x9a, 0xa8, 0x16, + 0xfc, 0x54, 0x86, 0x01, 0xfa, 0x24, 0x05, 0x60, 0x32, 0x98, 0xf2, 0x5b, 0x90, 0x28, 0x9d, 0xa9, 0x1b, 0xd2, 0xaf, + 0xa2, 0xe0, 0x17, 0xbc, 0xe0, 0x22, 0x71, 0x05, 0x58, 0xde, 0xc1, 0xf6, 0x3a, 0xaa, 0xa8, 0x02, 0xe2, 0x35, 0x3d, + 0x8e, 0xb8, 0xf1, 0xfe, 0x33, 0x3d, 0xb6, 0x40, 0xad, 0xd6, 0xb1, 0xc1, 0x67, 0x8e, 0xc1, 0x05, 0x5d, 0x4b, 0x6c, + 0x0d, 0xd5, 0xb0, 0x22, 0x30, 0x70, 0x01, 0x07, 0x61, 0x89, 0xe2, 0xd8, 0x4a, 0x5e, 0x91, 0x86, 0x94, 0xf6, 0x81, + 0xe1, 0x68, 0x93, 0x1c, 0xdf, 0x66, 0xd9, 0x4d, 0xe0, 0x7c, 0xd1, 0x39, 0x69, 0x26, 0x96, 0x0d, 0xde, 0xe7, 0xcd, + 0xf9, 0x75, 0xff, 0x90, 0x50, 0x15, 0xec, 0x86, 0xb7, 0x83, 0xdd, 0x38, 0xe1, 0xd7, 0x5c, 0x2c, 0x74, 0x7c, 0x16, + 0x73, 0xc9, 0xf2, 0x5b, 0xeb, 0xdd, 0x92, 0xa4, 0x56, 0x40, 0xfb, 0x2c, 0x0b, 0x6a, 0x22, 0x00, 0xdd, 0x0f, 0x7f, + 0x81, 0xd0, 0x19, 0xfe, 0xf6, 0x18, 0x5c, 0x91, 0xc2, 0x7b, 0x87, 0x40, 0x58, 0xd3, 0xcd, 0x9d, 0xda, 0x80, 0x2f, + 0xc6, 0xfd, 0x19, 0x53, 0x4f, 0xbf, 0xcd, 0xe4, 0xae, 0xae, 0xdb, 0x23, 0xcb, 0xf0, 0x11, 0xae, 0x14, 0x00, 0xcb, + 0x84, 0xbf, 0x18, 0x5b, 0x52, 0x7d, 0x02, 0x70, 0x6a, 0x3a, 0xa2, 0x4f, 0x10, 0x18, 0x38, 0x25, 0x5a, 0x8c, 0xae, + 0x95, 0x23, 0x9a, 0x41, 0x5a, 0xd3, 0xad, 0x30, 0xde, 0x7a, 0xd0, 0x42, 0xcf, 0x34, 0x9c, 0xf8, 0x0f, 0x9a, 0x79, + 0x55, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0xd1, 0x1c, 0x21, 0x3e, 0x61, 0x49, 0x34, 0x61, 0xf1, 0x4c, 0xf1, + 0x63, 0x42, 0x37, 0x4d, 0x6d, 0xd3, 0x07, 0xa4, 0xbf, 0xb8, 0x66, 0xfd, 0x94, 0x65, 0xed, 0xdb, 0x43, 0xc5, 0x8b, + 0x69, 0x33, 0xf8, 0x61, 0xa2, 0x8a, 0xf1, 0xbf, 0xa8, 0x7c, 0xa9, 0x15, 0xc0, 0x30, 0x77, 0xd5, 0xd3, 0xef, 0x37, + 0xb3, 0xe5, 0x40, 0xa8, 0xfc, 0xce, 0x20, 0xe9, 0xd3, 0xf1, 0xfc, 0xc0, 0x26, 0x51, 0x5b, 0xe8, 0xf9, 0xe3, 0x52, + 0x37, 0xa1, 0xf2, 0xda, 0xd4, 0x88, 0x56, 0xc8, 0x50, 0xd9, 0x3a, 0x60, 0x7d, 0xff, 0x10, 0xee, 0x2e, 0x6a, 0x1a, + 0x6a, 0xdd, 0x73, 0xd7, 0xa2, 0xe0, 0xc4, 0x1f, 0x60, 0x2c, 0x2e, 0x24, 0xb5, 0x0e, 0xc2, 0xa4, 0x1f, 0x2d, 0x4e, + 0x72, 0xa3, 0xae, 0x4e, 0xce, 0x14, 0xf3, 0x04, 0x2e, 0xaa, 0x65, 0xdb, 0x5f, 0x51, 0xa9, 0x4b, 0xb9, 0xbd, 0xa2, + 0x34, 0x3d, 0xa4, 0xed, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x0b, 0x05, 0x17, 0xd6, 0xc1, 0xba, 0xe3, 0x4e, 0xd9, + 0x13, 0x9e, 0x28, 0xd3, 0xda, 0xe0, 0xae, 0x1b, 0x8c, 0x89, 0xb1, 0xdf, 0x5d, 0xf2, 0xe4, 0x23, 0xb2, 0xe0, 0xdf, + 0x65, 0x02, 0x3c, 0x93, 0xdd, 0x2b, 0x95, 0xff, 0x07, 0xff, 0x6a, 0x6b, 0xdf, 0x59, 0xf3, 0x4f, 0xcf, 0x7a, 0xb8, + 0x73, 0x98, 0xfc, 0x00, 0x9d, 0x01, 0xdd, 0x5c, 0xc9, 0x94, 0x03, 0x32, 0x80, 0xb5, 0x48, 0x46, 0x03, 0x3e, 0xb4, + 0xb2, 0x6c, 0xfb, 0x4e, 0xab, 0x0b, 0xc2, 0xbd, 0x04, 0x6e, 0x7a, 0x7f, 0x6d, 0x66, 0xe6, 0x74, 0xad, 0x44, 0xd3, + 0xa5, 0xb1, 0xb5, 0x2c, 0x55, 0xc0, 0xee, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x70, 0x39, 0xcd, 0x2d, 0x75, 0xdb, 0xb8, + 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0xb5, 0x22, 0xf4, 0x54, 0x89, 0xd0, + 0xa7, 0x69, 0xb3, 0x0f, 0x76, 0x55, 0xad, 0x1b, 0x71, 0x8e, 0x06, 0xa9, 0x66, 0xe4, 0x4f, 0xae, 0x79, 0x71, 0x91, + 0xcb, 0x1b, 0xc0, 0x40, 0x26, 0xb5, 0x51, 0x58, 0x5e, 0x81, 0x3b, 0x3f, 0x3a, 0x8e, 0x33, 0x31, 0xca, 0x31, 0x58, + 0x2b, 0xc2, 0x23, 0xeb, 0xc4, 0x19, 0x80, 0x20, 0xfb, 0x93, 0xa6, 0xe3, 0xb9, 0x16, 0x18, 0xd3, 0x17, 0xb8, 0xab, + 0x9c, 0x1d, 0x6d, 0x72, 0xbb, 0xe8, 0x9b, 0x33, 0xac, 0x3b, 0x52, 0x5a, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, 0x06, + 0x6d, 0x11, 0x4a, 0x3e, 0xe4, 0x4e, 0xda, 0x4f, 0x01, 0x0d, 0xce, 0xb2, 0xf4, 0xd6, 0x5a, 0xe5, 0x6f, 0xb4, 0x10, + 0x27, 0x8a, 0xa9, 0x13, 0xdf, 0x44, 0x89, 0x3e, 0x3f, 0x13, 0xe3, 0x06, 0x02, 0xa9, 0x3f, 0x60, 0x50, 0x8d, 0x22, + 0x4c, 0xe0, 0x3a, 0x10, 0xc5, 0xf6, 0x44, 0x6d, 0x2c, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x41, 0x19, 0xc6, 0xea, 0xe2, + 0x40, 0x1b, 0x2c, 0x7d, 0xdd, 0x5a, 0xe7, 0x86, 0x50, 0x18, 0x27, 0x30, 0xc5, 0x20, 0xa9, 0xb3, 0xce, 0x32, 0x41, + 0x95, 0x1d, 0x93, 0xce, 0xfb, 0x00, 0xdd, 0x5d, 0x8b, 0xa6, 0xf8, 0xba, 0x73, 0x07, 0xdd, 0xc7, 0xf5, 0x6b, 0x2d, + 0x72, 0x83, 0x3f, 0x6f, 0x89, 0xb0, 0x08, 0x9c, 0xb5, 0x26, 0x5f, 0x35, 0xc2, 0x81, 0x29, 0xc9, 0x34, 0xec, 0x25, + 0xca, 0xa6, 0x7b, 0xbb, 0xed, 0xf5, 0xee, 0x15, 0x71, 0xf5, 0x18, 0xab, 0xbc, 0x9b, 0xb9, 0xbd, 0x53, 0xad, 0xc5, + 0xee, 0x4d, 0xdb, 0x4f, 0xb1, 0xa3, 0xd6, 0xda, 0xed, 0x86, 0x13, 0x6a, 0xc8, 0xb7, 0xa2, 0x4a, 0xab, 0xd3, 0x8d, + 0x41, 0x3b, 0xc4, 0xb3, 0x16, 0x19, 0xdc, 0x28, 0x5f, 0x38, 0xa1, 0x93, 0x8a, 0xb3, 0xea, 0xd4, 0x05, 0x9b, 0x2b, + 0x5e, 0x2d, 0x65, 0x1a, 0x09, 0x8a, 0x36, 0xe7, 0x51, 0x49, 0x13, 0xb9, 0x16, 0x55, 0x24, 0x6b, 0xd4, 0x8b, 0x5a, + 0x8d, 0x01, 0x02, 0x32, 0x9d, 0x35, 0x3d, 0xa8, 0x82, 0xd9, 0x50, 0x46, 0x72, 0xfa, 0x1e, 0x2c, 0xed, 0x91, 0x63, + 0xad, 0xef, 0xab, 0xb3, 0xc5, 0xb7, 0x7a, 0x42, 0x30, 0x85, 0xd9, 0x03, 0x61, 0xe0, 0x9a, 0xc6, 0x90, 0xd3, 0x2e, + 0x71, 0x59, 0xd3, 0x2d, 0xe1, 0x1e, 0x6e, 0x57, 0xb2, 0x23, 0x37, 0x4f, 0x9a, 0x9b, 0x2b, 0xd8, 0x51, 0x31, 0x1f, + 0x83, 0xf6, 0x4b, 0xaa, 0x6b, 0x97, 0xe6, 0xd6, 0xe3, 0x41, 0x40, 0x83, 0x41, 0x61, 0xf8, 0xd7, 0x89, 0xf1, 0xf0, + 0xa4, 0x01, 0x41, 0x52, 0x2e, 0xc2, 0xb1, 0x6f, 0x44, 0x3f, 0x99, 0xca, 0x43, 0x8e, 0x16, 0xef, 0xd0, 0xea, 0x04, + 0xa2, 0x78, 0x89, 0x50, 0x12, 0xa3, 0x2a, 0x34, 0x22, 0x28, 0x4f, 0xcb, 0x5f, 0xaa, 0xea, 0x10, 0x50, 0x48, 0xfb, + 0x8a, 0x42, 0xd9, 0x26, 0x31, 0x34, 0xc3, 0x2f, 0xe7, 0x93, 0x85, 0x9e, 0x81, 0x81, 0x9c, 0x1f, 0x2c, 0xf4, 0x2c, + 0x0c, 0xe4, 0xfc, 0xc9, 0xa2, 0x76, 0xeb, 0x40, 0x13, 0x10, 0xcf, 0x85, 0xa3, 0x93, 0xd2, 0xaa, 0x6c, 0x01, 0xdd, + 0x3c, 0x44, 0xd0, 0x7f, 0xb2, 0x87, 0xa0, 0x93, 0x0b, 0xed, 0xc8, 0x0d, 0x68, 0x3b, 0x0e, 0x81, 0xbd, 0x62, 0x52, + 0x61, 0x02, 0x10, 0x1d, 0xb2, 0x31, 0x18, 0x62, 0xab, 0x0f, 0x0e, 0xd9, 0x78, 0xea, 0x93, 0x20, 0x60, 0x74, 0x7f, + 0x30, 0x90, 0xe0, 0xb7, 0x78, 0x95, 0x3e, 0xda, 0x08, 0x74, 0xd3, 0x77, 0x77, 0x43, 0xef, 0xe2, 0x0a, 0x4e, 0xd5, + 0xee, 0x9e, 0x84, 0x6e, 0x32, 0xed, 0x00, 0xbd, 0x86, 0xb8, 0x21, 0xbf, 0x32, 0x1a, 0x8d, 0x6c, 0x4a, 0x48, 0x88, + 0xe1, 0x1c, 0x9a, 0x39, 0x2d, 0x97, 0xaf, 0x6e, 0x3d, 0x1b, 0x90, 0x61, 0xa6, 0xb7, 0x4c, 0xd6, 0x0f, 0x50, 0x56, + 0x3d, 0x86, 0x76, 0xe8, 0x3d, 0x72, 0xfc, 0xf0, 0xe0, 0x9b, 0x8c, 0x9f, 0x39, 0x5c, 0x7b, 0x38, 0x17, 0xbe, 0xcb, + 0x9a, 0x91, 0x39, 0x74, 0x9e, 0x7d, 0x1c, 0xef, 0x61, 0x9c, 0x7c, 0x9e, 0x85, 0xf2, 0xc6, 0x6b, 0xfa, 0x1f, 0x95, + 0xde, 0xec, 0x70, 0xc8, 0xe9, 0x0a, 0x56, 0xdc, 0xac, 0x0a, 0x0d, 0x3f, 0x8b, 0xbc, 0x71, 0xc4, 0x6b, 0x12, 0x55, + 0xdd, 0xe7, 0xbd, 0x0d, 0x53, 0xda, 0x31, 0x0e, 0x00, 0x4e, 0xd4, 0xaa, 0x61, 0x57, 0x1a, 0xd7, 0xea, 0x20, 0x86, + 0xa1, 0x84, 0xad, 0x12, 0x47, 0x42, 0xf9, 0x1b, 0x80, 0xb0, 0x18, 0x8a, 0xe3, 0xad, 0x61, 0x7d, 0x80, 0xfd, 0xd0, + 0x05, 0x9a, 0xe6, 0x94, 0x6a, 0x06, 0x00, 0x49, 0xc0, 0x1f, 0x3d, 0xdd, 0x34, 0x54, 0xb6, 0x79, 0x1e, 0x5a, 0x56, + 0x57, 0xf0, 0x40, 0x4f, 0x5d, 0xc9, 0xc0, 0xb8, 0xaa, 0x63, 0x6f, 0x73, 0x7f, 0x7b, 0xb4, 0x8a, 0x7c, 0x67, 0x93, + 0xda, 0x66, 0x55, 0x68, 0xec, 0xe3, 0x09, 0x3d, 0x9d, 0x00, 0xad, 0xd7, 0x96, 0x8a, 0xf6, 0xfb, 0x28, 0x46, 0x8d, + 0x0b, 0x05, 0x56, 0x61, 0x22, 0xc1, 0x21, 0xc2, 0x08, 0xa1, 0xdf, 0x97, 0xe1, 0xc6, 0x17, 0x64, 0x10, 0x0d, 0xd7, + 0xa2, 0xe3, 0x0f, 0x39, 0x5e, 0xb4, 0x2d, 0x55, 0x35, 0x27, 0x4d, 0x5b, 0x02, 0x6f, 0xc2, 0x01, 0xb6, 0xf3, 0x4f, + 0x1b, 0x22, 0x57, 0xe1, 0xa2, 0x84, 0xef, 0x88, 0x6b, 0x41, 0x74, 0x53, 0x9b, 0x7a, 0x1b, 0x76, 0x88, 0x8e, 0xa6, + 0x78, 0x74, 0xc8, 0x3d, 0x77, 0xcf, 0x6d, 0x11, 0xdf, 0x7c, 0x86, 0xdc, 0x35, 0x9d, 0xbd, 0x14, 0x61, 0x50, 0xb7, + 0x6c, 0xa0, 0x58, 0x87, 0x4e, 0x50, 0x80, 0x51, 0x5b, 0x3e, 0x01, 0x1d, 0x1b, 0x0c, 0x2a, 0x82, 0x4f, 0x0a, 0xdb, + 0xa6, 0x41, 0xfe, 0x88, 0x77, 0x43, 0x87, 0xd7, 0x96, 0x3c, 0x10, 0xaf, 0xb0, 0xcf, 0x94, 0x70, 0xff, 0x82, 0x82, + 0xee, 0x28, 0x2f, 0x57, 0x85, 0xab, 0xd2, 0x00, 0x54, 0xd9, 0xf1, 0x5c, 0x6b, 0x4a, 0x5a, 0xc0, 0x4a, 0x49, 0xdd, + 0xf9, 0x4d, 0x44, 0xdc, 0x92, 0xa9, 0x98, 0xad, 0xba, 0x51, 0xe5, 0xa1, 0x44, 0x91, 0x8e, 0x3d, 0xdb, 0x39, 0x58, + 0x03, 0xe0, 0x29, 0x6c, 0x2f, 0xce, 0xb0, 0xa0, 0x8c, 0xcb, 0x96, 0xb9, 0x04, 0x8a, 0xfa, 0x61, 0x9c, 0x97, 0x1d, + 0x5f, 0xee, 0x8e, 0xb6, 0xf7, 0xd0, 0x1b, 0xb1, 0x31, 0x5e, 0x5f, 0x46, 0x4d, 0xbf, 0x78, 0x86, 0x2b, 0x4b, 0x41, + 0x1e, 0x68, 0xaa, 0x47, 0x18, 0x1d, 0x02, 0xd3, 0x94, 0x1f, 0xb1, 0xf1, 0x74, 0x38, 0x34, 0x64, 0xd0, 0x6b, 0x26, + 0xc6, 0xff, 0xfa, 0x02, 0x5a, 0x67, 0x26, 0xae, 0xf1, 0x69, 0xfb, 0x0a, 0x5a, 0xdd, 0xa2, 0x4c, 0xee, 0x0c, 0x0c, + 0x1f, 0x68, 0xc9, 0x14, 0x4c, 0x15, 0xde, 0x10, 0xa9, 0x64, 0x9f, 0x96, 0xd6, 0x61, 0xdf, 0x2e, 0x14, 0x5a, 0x68, + 0xe2, 0x57, 0x19, 0xe2, 0xa7, 0xae, 0x33, 0xff, 0x36, 0xed, 0x53, 0x83, 0x58, 0x58, 0x12, 0xa3, 0x10, 0xbf, 0x38, + 0x55, 0xb6, 0x13, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x55, 0xec, 0x49, 0xa1, 0xf1, 0xd4, 0x70, 0xdf, + 0x0b, 0x1d, 0xb3, 0x0e, 0xb3, 0xb8, 0xcd, 0x1a, 0x49, 0x8d, 0x71, 0x2a, 0x4c, 0x70, 0x4a, 0xb9, 0x8a, 0x04, 0x46, + 0xc7, 0xb3, 0x85, 0x41, 0x54, 0x49, 0x4c, 0x32, 0xb6, 0x16, 0xc2, 0xc4, 0xae, 0x73, 0x85, 0x69, 0xea, 0x22, 0xf5, + 0x9b, 0x81, 0xc9, 0x82, 0x86, 0xfc, 0x1e, 0x8d, 0xd6, 0x54, 0x4d, 0x01, 0x86, 0x71, 0x94, 0x6a, 0xfc, 0x5b, 0x84, + 0xda, 0x0c, 0x03, 0x00, 0xdb, 0xbc, 0x93, 0x99, 0xa8, 0x5e, 0x0b, 0x84, 0x40, 0x73, 0xf6, 0x53, 0x45, 0xb5, 0x33, + 0x0b, 0x46, 0xd1, 0x6e, 0xaf, 0x7c, 0x3e, 0x70, 0x42, 0x79, 0xac, 0x2e, 0x50, 0xaf, 0x64, 0xf1, 0x46, 0xa6, 0xbc, + 0x15, 0x17, 0x73, 0x4f, 0xb2, 0x0f, 0xf9, 0x08, 0xce, 0x2b, 0x74, 0x2a, 0x37, 0xdb, 0x44, 0x99, 0x25, 0x49, 0xc6, + 0x02, 0x63, 0xf3, 0x12, 0xcc, 0xa4, 0x66, 0xc6, 0xf0, 0x6b, 0x08, 0x2e, 0xb6, 0x73, 0x12, 0x6e, 0xee, 0xe7, 0x81, + 0x21, 0x34, 0xb9, 0x68, 0x89, 0x86, 0xad, 0x1d, 0xaf, 0x27, 0xd7, 0x84, 0xfb, 0xb0, 0x11, 0x6b, 0x32, 0xc6, 0xb8, + 0x36, 0x37, 0xb2, 0x7e, 0xb4, 0xc0, 0x83, 0x31, 0x65, 0xfd, 0x09, 0x64, 0x5a, 0x49, 0x59, 0xe7, 0x0b, 0x23, 0x66, + 0x52, 0x89, 0xde, 0xed, 0x1b, 0x9f, 0xd5, 0x5d, 0x44, 0xfd, 0xd6, 0x7e, 0x4f, 0xea, 0xe1, 0xce, 0x7f, 0x50, 0x58, + 0x83, 0xca, 0x88, 0xcb, 0x88, 0xf2, 0xcc, 0x81, 0x6e, 0x9a, 0x14, 0x71, 0x7a, 0xb6, 0x8a, 0x8b, 0x92, 0xa7, 0x50, + 0xa9, 0xa6, 0x6e, 0x51, 0x6f, 0x02, 0xf6, 0x86, 0x48, 0x92, 0xac, 0xa5, 0xb1, 0x15, 0xbb, 0x34, 0x48, 0xcf, 0xbd, + 0x61, 0x96, 0x5e, 0x55, 0x68, 0x48, 0x4b, 0xbd, 0xb3, 0x50, 0xc9, 0xfc, 0x15, 0xff, 0x19, 0xd4, 0x0a, 0x74, 0xb4, + 0x49, 0x31, 0x9e, 0x03, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x09, 0x4a, 0xbd, 0x23, 0x76, 0xfc, 0xdc, + 0xe4, 0xe1, 0x5d, 0xc8, 0x39, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0x48, 0x8c, 0xd4, 0x0c, 0xa0, 0xe9, 0xa0, + 0xcc, 0x79, 0x2c, 0x82, 0x59, 0xcf, 0x24, 0x46, 0x3d, 0xae, 0x7f, 0x81, 0x86, 0xda, 0x6f, 0x56, 0x96, 0x67, 0xd5, + 0xdd, 0x97, 0x70, 0x60, 0x53, 0x5b, 0x41, 0x8f, 0xd7, 0x95, 0xbc, 0xbc, 0x54, 0xdd, 0xf6, 0x0b, 0x31, 0x72, 0xba, + 0xc6, 0xb5, 0x74, 0x5e, 0x2d, 0x58, 0xaf, 0x3b, 0xdd, 0x2c, 0xee, 0x66, 0x19, 0x0d, 0x84, 0xb5, 0x9d, 0x4f, 0x34, + 0x7f, 0xd6, 0x6c, 0xbb, 0x8f, 0xb7, 0x20, 0x66, 0x01, 0x00, 0xa4, 0x07, 0x51, 0xb0, 0xcc, 0x52, 0x1e, 0x50, 0x79, + 0x1f, 0x47, 0x59, 0x28, 0xbd, 0x9c, 0x65, 0xfc, 0xb4, 0x69, 0xac, 0x75, 0x56, 0x28, 0x43, 0x6b, 0xa3, 0x3b, 0x5d, + 0x65, 0x88, 0xed, 0x27, 0x71, 0xb6, 0x00, 0xf7, 0xc7, 0x0c, 0x85, 0x86, 0xce, 0x32, 0xd2, 0x44, 0xc3, 0x77, 0xdd, + 0x33, 0xc8, 0x28, 0x4e, 0xd6, 0x79, 0x25, 0xdd, 0xe8, 0xb3, 0x36, 0x12, 0xe6, 0x1e, 0xa2, 0x5f, 0xc5, 0xe0, 0x51, + 0xee, 0xf3, 0xda, 0xe8, 0x64, 0x5a, 0x46, 0xda, 0x9d, 0x9f, 0xd4, 0xcb, 0x2c, 0xd5, 0x3a, 0x6c, 0x9f, 0x61, 0x6f, + 0x8d, 0x49, 0x6f, 0x42, 0x6a, 0x18, 0x89, 0xcf, 0x67, 0xd4, 0x08, 0x01, 0x6d, 0x39, 0xfe, 0x0e, 0x9f, 0x61, 0x68, + 0x0a, 0x2c, 0x55, 0xdc, 0xc2, 0x6e, 0xf8, 0x9a, 0x4f, 0x56, 0x2d, 0x00, 0x11, 0xac, 0x7c, 0xbd, 0x8b, 0x57, 0x42, + 0x7d, 0xa6, 0xcd, 0x00, 0x90, 0x05, 0xa5, 0xdc, 0xf1, 0x53, 0x2a, 0x1d, 0x2c, 0x51, 0xb4, 0xbd, 0x9c, 0xbe, 0xd1, + 0xb1, 0xf1, 0x43, 0x7a, 0x2e, 0x60, 0xbb, 0x90, 0xdf, 0xba, 0x57, 0x2f, 0x51, 0x91, 0xda, 0x36, 0xeb, 0x01, 0xbe, + 0xdc, 0xa0, 0x49, 0x18, 0x41, 0x99, 0x32, 0x05, 0x30, 0xb8, 0xa9, 0x46, 0xc1, 0xa4, 0xd5, 0x48, 0xd8, 0x52, 0x4f, + 0xb2, 0xdc, 0xf4, 0xc1, 0xa9, 0xee, 0x11, 0xf4, 0x68, 0x87, 0x93, 0x96, 0xfd, 0x5a, 0xc1, 0xd1, 0xc9, 0xd5, 0x10, + 0x35, 0xf3, 0x5e, 0xdb, 0x91, 0x21, 0xe5, 0x32, 0x0c, 0x04, 0x53, 0x8e, 0x79, 0x7a, 0x6c, 0x3d, 0x23, 0xa2, 0x07, + 0xce, 0x3e, 0xd3, 0xad, 0xba, 0x92, 0x80, 0xe8, 0xf8, 0xcd, 0xd3, 0xd7, 0x57, 0xf1, 0xa5, 0x41, 0x51, 0x6a, 0x58, + 0xc4, 0x28, 0xd3, 0xbe, 0x4a, 0xc2, 0xe0, 0xfd, 0xfa, 0xfe, 0x67, 0x95, 0xa5, 0xf6, 0x7b, 0xb0, 0xb1, 0xa2, 0xaa, + 0x5f, 0x4b, 0x5e, 0x34, 0x05, 0x58, 0xf7, 0x59, 0xa2, 0x40, 0xee, 0xf7, 0x36, 0xcd, 0x7c, 0x13, 0x35, 0x6e, 0x36, + 0xac, 0x37, 0xae, 0xdb, 0xa5, 0xb6, 0x64, 0x47, 0x56, 0x22, 0x67, 0x16, 0x83, 0x19, 0x3f, 0x2a, 0x0c, 0x4a, 0xc3, + 0x06, 0x55, 0xa9, 0xf8, 0xbd, 0x11, 0xc1, 0xa9, 0x63, 0x55, 0x61, 0x4c, 0x03, 0x66, 0x5b, 0x51, 0x6b, 0x50, 0x07, + 0xa5, 0xb4, 0x35, 0x51, 0xd8, 0x7e, 0x67, 0x05, 0x35, 0xbf, 0xff, 0x69, 0x0c, 0xf9, 0x9a, 0x52, 0x50, 0x49, 0xc0, + 0xce, 0xa0, 0xd1, 0x53, 0x25, 0x0c, 0xa4, 0x20, 0x78, 0x02, 0x94, 0x2f, 0xa2, 0xc6, 0x6a, 0xb7, 0xaf, 0x4e, 0x8d, + 0xd1, 0x16, 0x10, 0x5a, 0x48, 0x8f, 0x2e, 0xfb, 0xb8, 0x8d, 0x75, 0x20, 0xf1, 0xe0, 0x04, 0xdb, 0xb9, 0xba, 0x46, + 0x23, 0xa1, 0xf9, 0x43, 0xa3, 0x01, 0xaf, 0x69, 0x05, 0x0a, 0xf5, 0x1c, 0x47, 0x43, 0x67, 0x87, 0x14, 0x44, 0x6c, + 0xd0, 0xc2, 0xbe, 0x7b, 0x3e, 0x34, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x4d, 0xa5, 0xfb, 0xdc, 0x2d, 0x21, 0x6b, 0xd5, + 0xa1, 0xac, 0x3c, 0xc0, 0xf1, 0x42, 0xc9, 0xfc, 0x1d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x63, 0xc4, 0x02, 0x96, 0x04, + 0xed, 0xf5, 0x40, 0xfd, 0x32, 0x08, 0x15, 0xce, 0xf4, 0x44, 0xe2, 0x53, 0xca, 0xd5, 0xa7, 0x05, 0xa9, 0xa7, 0x05, + 0x73, 0xa0, 0x97, 0xbe, 0x95, 0x5f, 0xd9, 0xf8, 0x68, 0x77, 0xef, 0x9a, 0x0b, 0xeb, 0x18, 0x82, 0x61, 0x0b, 0xbf, + 0x39, 0x35, 0x05, 0x60, 0xc3, 0x63, 0x5d, 0x96, 0x6f, 0xd4, 0x44, 0x66, 0x71, 0x48, 0x22, 0x90, 0x6c, 0x37, 0x37, + 0xb7, 0x11, 0x6c, 0x7b, 0x0b, 0xb5, 0xa1, 0xfe, 0xf2, 0xb6, 0xfb, 0x3d, 0xc3, 0xcb, 0x3d, 0xb9, 0x77, 0xd3, 0x86, + 0xf2, 0x87, 0xfb, 0x57, 0xc9, 0xff, 0x55, 0x25, 0xf7, 0x5b, 0x65, 0xd6, 0x6d, 0xf1, 0x7e, 0xd7, 0x71, 0xcb, 0x31, + 0x1a, 0x04, 0xd6, 0x14, 0x18, 0x48, 0x4f, 0x1a, 0xd3, 0x44, 0x87, 0x54, 0x66, 0xcc, 0xe0, 0xd1, 0x05, 0x68, 0x0e, + 0xd3, 0x79, 0x1e, 0x03, 0x70, 0x80, 0x7f, 0xe4, 0x11, 0xea, 0x9f, 0xce, 0xf3, 0xe0, 0x2c, 0x18, 0x94, 0x83, 0x40, + 0x7f, 0xe2, 0x9a, 0x13, 0x2c, 0x40, 0xe7, 0x16, 0x33, 0x08, 0x36, 0x69, 0xcd, 0x1c, 0xe2, 0xc3, 0x64, 0x3a, 0x18, + 0xc4, 0x64, 0x03, 0x20, 0x7d, 0xf1, 0xc2, 0x3a, 0x07, 0x15, 0x7a, 0x41, 0xb6, 0xea, 0x2e, 0x9a, 0x15, 0x7b, 0xd5, + 0x4e, 0xf3, 0x7e, 0x3f, 0x9f, 0x97, 0x83, 0xa0, 0x51, 0x61, 0x61, 0xbc, 0xff, 0x68, 0xf3, 0x4b, 0xa3, 0x93, 0x26, + 0x18, 0xa6, 0xf6, 0x18, 0xd5, 0x2b, 0x9e, 0x66, 0xb4, 0x71, 0x3b, 0x56, 0xca, 0x17, 0x10, 0xc5, 0x03, 0x43, 0xd6, + 0xca, 0xbb, 0x73, 0xf0, 0xba, 0xdc, 0x78, 0x73, 0x44, 0x01, 0x76, 0x53, 0x18, 0x27, 0x35, 0x17, 0x5d, 0xd4, 0xc4, + 0x33, 0xd8, 0xe9, 0xea, 0xad, 0x44, 0xab, 0xf1, 0x5e, 0xbc, 0x6b, 0x36, 0xfe, 0x56, 0xee, 0xe9, 0x32, 0xf7, 0x2e, + 0x00, 0x71, 0x76, 0x2f, 0xae, 0xf6, 0xb0, 0xd4, 0xbd, 0x60, 0x60, 0x91, 0x43, 0xda, 0xd5, 0xea, 0xa1, 0x88, 0xd4, + 0x79, 0x0c, 0x06, 0x4c, 0xa6, 0x21, 0x35, 0x99, 0xf6, 0x0a, 0x05, 0x69, 0x63, 0xad, 0x05, 0xb4, 0xe1, 0xb0, 0xd8, + 0xb1, 0x1b, 0x76, 0xa7, 0x5b, 0x87, 0x42, 0x09, 0xa3, 0x57, 0xd7, 0xcd, 0x43, 0xad, 0xe1, 0x89, 0xa0, 0x07, 0xd5, + 0x68, 0x3f, 0x3d, 0x94, 0x27, 0xed, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0x52, 0xe0, 0x45, 0x7b, 0x07, 0x79, 0xce, + 0x7c, 0xaa, 0x7c, 0x10, 0x1b, 0x6e, 0x19, 0x3e, 0xb4, 0x8f, 0x6f, 0x05, 0x32, 0xa9, 0x3b, 0x9a, 0xda, 0xda, 0x1d, + 0x8d, 0x63, 0x02, 0xfd, 0xa6, 0x1c, 0xa5, 0x4c, 0x4c, 0x2d, 0x4b, 0x76, 0xd4, 0xcb, 0x95, 0x37, 0x54, 0xca, 0x8e, + 0x96, 0x6d, 0xce, 0x2f, 0x6d, 0x24, 0xf4, 0xfb, 0xda, 0x1d, 0x08, 0xdf, 0xa8, 0xf5, 0x86, 0xbc, 0x6c, 0x88, 0x58, + 0x0e, 0x31, 0x03, 0xc7, 0x0b, 0xa9, 0x5c, 0xbb, 0x8b, 0xa6, 0xaa, 0x6e, 0x67, 0x2b, 0x17, 0xb4, 0xc4, 0x5b, 0x29, + 0xb0, 0x8a, 0xd4, 0xe9, 0xf5, 0x54, 0xe2, 0x7d, 0x1f, 0xc5, 0xf6, 0x23, 0x60, 0x1b, 0x1b, 0x47, 0x63, 0xe3, 0x16, + 0xb1, 0xc1, 0x57, 0x51, 0x45, 0x0b, 0x0e, 0x10, 0xdc, 0x6d, 0x49, 0x2d, 0xcd, 0x1c, 0xe2, 0xbe, 0xe2, 0x01, 0xda, + 0x77, 0x71, 0xc4, 0xa9, 0x00, 0xdb, 0xba, 0xd6, 0x39, 0xab, 0xe5, 0x80, 0xcd, 0x44, 0xcf, 0x3f, 0xad, 0x1a, 0x89, + 0x18, 0x56, 0xd9, 0x48, 0x59, 0xa1, 0x3d, 0x28, 0x5d, 0xc2, 0xc5, 0x17, 0xe0, 0x65, 0xfb, 0x7e, 0x65, 0xf7, 0xd9, + 0x12, 0xfb, 0x87, 0x79, 0xd5, 0x04, 0x8f, 0xbc, 0xc6, 0xdb, 0x7b, 0x98, 0xf8, 0x52, 0x29, 0x84, 0x57, 0x29, 0x0d, + 0x25, 0x00, 0x83, 0x24, 0xa8, 0xe1, 0x4a, 0xdb, 0x66, 0x90, 0xca, 0x18, 0x76, 0xb7, 0x7a, 0xab, 0xff, 0xd3, 0x2a, + 0x5c, 0x54, 0xb2, 0x18, 0x93, 0x40, 0xe7, 0x54, 0xcb, 0x4d, 0x4c, 0xc1, 0xb3, 0x5d, 0x72, 0x04, 0x0a, 0x3b, 0x01, + 0xdc, 0x50, 0xc2, 0x7e, 0xc5, 0xdb, 0x50, 0xce, 0x5e, 0x59, 0xc9, 0x93, 0xdb, 0x97, 0x54, 0xd0, 0x84, 0x4c, 0x85, + 0xdd, 0xbf, 0xad, 0x0d, 0xfb, 0x22, 0x94, 0x23, 0x29, 0x70, 0x71, 0xd0, 0x39, 0x80, 0xfd, 0x41, 0x2e, 0x63, 0xf3, + 0x99, 0xf4, 0xfb, 0xea, 0xfd, 0xf3, 0x3c, 0x4b, 0x3e, 0xee, 0xbc, 0x37, 0x3c, 0xcd, 0x92, 0x01, 0x95, 0x88, 0xa9, + 0x75, 0x55, 0x0c, 0x97, 0xda, 0xc5, 0xb8, 0x41, 0x32, 0xe2, 0x7b, 0xa9, 0x43, 0x8c, 0x18, 0x5f, 0x64, 0x87, 0xa4, + 0xe4, 0x74, 0x59, 0x77, 0xf6, 0x5c, 0x8b, 0x66, 0xd0, 0x18, 0x6e, 0xc7, 0x7b, 0x49, 0xaf, 0x00, 0x15, 0x15, 0xba, + 0x67, 0x81, 0x6b, 0x78, 0x73, 0x49, 0x34, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xb8, 0x57, 0x26, 0x24, 0xd5, 0xc6, 0x01, + 0x16, 0xb1, 0xae, 0x3f, 0x86, 0x12, 0x80, 0x5a, 0x0d, 0xd2, 0x2b, 0x7d, 0x45, 0xa8, 0x4a, 0x42, 0x30, 0x3a, 0x91, + 0xf0, 0x32, 0xa0, 0x71, 0x66, 0x12, 0x2d, 0x6c, 0x70, 0x40, 0x5f, 0x54, 0x26, 0xd1, 0xd8, 0x90, 0x07, 0xb4, 0xb2, + 0x69, 0x00, 0x83, 0x0f, 0x92, 0x24, 0xfa, 0x7a, 0x69, 0x92, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x4b, 0xe9, 0xf9, + 0x58, 0xfe, 0xcb, 0x3b, 0x94, 0x7e, 0x08, 0x25, 0xc8, 0x14, 0x75, 0xc5, 0x34, 0x63, 0x47, 0x59, 0xb7, 0x31, 0x89, + 0xe7, 0x69, 0x77, 0x5b, 0x28, 0x97, 0x2e, 0xf0, 0x2b, 0xcb, 0x10, 0xc7, 0xfa, 0x79, 0xbc, 0x62, 0xc7, 0x21, 0xd7, + 0x78, 0xe9, 0xcf, 0xe3, 0x15, 0xce, 0x10, 0xad, 0x5a, 0x09, 0x44, 0xf9, 0xaf, 0xda, 0xc0, 0x21, 0xee, 0x13, 0x0c, + 0x72, 0x51, 0x79, 0x0f, 0x04, 0xf2, 0xb6, 0x82, 0x88, 0x34, 0xb3, 0xeb, 0x30, 0x22, 0xd5, 0x4e, 0x92, 0xf9, 0xf2, + 0x47, 0x99, 0x09, 0xef, 0x1b, 0x78, 0x6c, 0x36, 0xcb, 0xa6, 0x98, 0x2f, 0x54, 0x30, 0x07, 0xf7, 0x89, 0x8a, 0x4b, + 0x51, 0xf9, 0x4f, 0xd8, 0x05, 0x2f, 0xc6, 0x83, 0xd7, 0x6b, 0x04, 0xd8, 0xaf, 0xfc, 0x27, 0x6f, 0xcc, 0xde, 0x5a, + 0x37, 0xbe, 0xcc, 0x44, 0x7c, 0xe0, 0xa3, 0x5b, 0xca, 0x47, 0x77, 0x5e, 0xa6, 0x3f, 0x1b, 0x50, 0x22, 0xa3, 0xb2, + 0xe2, 0xab, 0x15, 0x4f, 0x67, 0xb7, 0x49, 0x94, 0x8d, 0x2a, 0x2e, 0x60, 0x7a, 0xc1, 0xf1, 0x2e, 0x59, 0x9f, 0x67, + 0xc9, 0x6b, 0x88, 0x3d, 0xb0, 0x92, 0x0a, 0x8b, 0x1f, 0x96, 0x99, 0x5a, 0xcc, 0x42, 0x56, 0x52, 0xf0, 0x60, 0x76, + 0x9d, 0x44, 0x6f, 0x97, 0x1e, 0x92, 0x9a, 0x99, 0xb2, 0x4d, 0xed, 0x08, 0xb5, 0xf1, 0x75, 0xa4, 0x1b, 0x6d, 0x01, + 0x00, 0xf7, 0x6c, 0x91, 0x46, 0x92, 0x89, 0xe1, 0xa4, 0x66, 0xdc, 0xa4, 0x17, 0x98, 0x1a, 0xd7, 0xac, 0xa2, 0x89, + 0xb3, 0x90, 0x01, 0xbd, 0x3f, 0xe0, 0xe5, 0xe0, 0x73, 0x06, 0xf7, 0x1f, 0xb4, 0x06, 0x2e, 0x0f, 0x8b, 0x7e, 0x5f, + 0x1e, 0x16, 0xdb, 0x6d, 0x79, 0x14, 0xf7, 0xfb, 0xf2, 0x28, 0x36, 0xfc, 0x83, 0x52, 0x6c, 0x1b, 0x73, 0x83, 0x84, + 0xe6, 0x12, 0xa2, 0x16, 0x8d, 0xe0, 0x0f, 0xcd, 0x72, 0x2e, 0xa2, 0xfc, 0x30, 0xe9, 0xf7, 0x7b, 0xcb, 0x99, 0x18, + 0xe4, 0xc3, 0x24, 0xca, 0x87, 0x89, 0xe7, 0x84, 0xf8, 0x9b, 0xe7, 0x84, 0xa8, 0x68, 0xe0, 0x0a, 0xce, 0x0c, 0x40, + 0x14, 0xf0, 0xe9, 0x1f, 0xd5, 0xb5, 0x14, 0xba, 0x96, 0x58, 0xd5, 0x92, 0xe8, 0x0a, 0x6a, 0x76, 0x5d, 0x84, 0x25, + 0x96, 0x42, 0x97, 0xec, 0xcf, 0x25, 0xf0, 0x44, 0x39, 0xaf, 0x36, 0xc0, 0xc0, 0x46, 0x78, 0xe7, 0x30, 0xe1, 0x24, + 0xd6, 0x35, 0xa0, 0x9d, 0x6e, 0x6a, 0x7a, 0x41, 0x57, 0xf4, 0x12, 0xf9, 0xd9, 0x0b, 0x30, 0x58, 0x3a, 0x64, 0xf9, + 0x74, 0x30, 0xb8, 0x20, 0x2b, 0x56, 0xce, 0xc3, 0x78, 0x10, 0xae, 0x67, 0xf9, 0xf0, 0x22, 0xba, 0x20, 0xe4, 0xab, + 0x62, 0x41, 0x7b, 0xab, 0x51, 0xf9, 0x31, 0x83, 0xe0, 0x7e, 0xe9, 0x2c, 0xcc, 0x4c, 0x9c, 0x8f, 0xd5, 0xe8, 0x96, + 0xae, 0x20, 0x7e, 0x0d, 0xdc, 0x48, 0x48, 0x04, 0x1d, 0xb9, 0xa4, 0x2b, 0xba, 0xa6, 0xd2, 0xcc, 0x30, 0x86, 0xe8, + 0xb6, 0xc7, 0x49, 0x02, 0x8e, 0xc9, 0xae, 0xf8, 0x68, 0xac, 0x0a, 0xef, 0xfa, 0x8e, 0xd0, 0x5e, 0x2f, 0x71, 0x83, + 0xf4, 0x5d, 0x7b, 0x90, 0x80, 0x11, 0x19, 0xa9, 0x81, 0x32, 0x23, 0x23, 0xa9, 0x99, 0x54, 0x1c, 0x92, 0xd8, 0x1f, + 0x12, 0x35, 0x0e, 0x89, 0x3f, 0x0e, 0xb9, 0x1e, 0x07, 0xe4, 0xee, 0x97, 0x6c, 0x4c, 0x53, 0x36, 0xa6, 0x6b, 0x35, + 0x2a, 0xf4, 0x8a, 0x9e, 0x6b, 0xea, 0x78, 0xc6, 0xde, 0xc0, 0x81, 0x3d, 0x08, 0xf3, 0x59, 0x3c, 0x7c, 0x13, 0xbd, + 0x21, 0xe4, 0x2b, 0x49, 0xaf, 0xd5, 0xa5, 0x0c, 0xc2, 0x20, 0x5e, 0x81, 0x73, 0xa9, 0x0b, 0x75, 0x72, 0x65, 0x76, + 0x1c, 0x3e, 0x5d, 0x36, 0x9e, 0xce, 0x21, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x05, 0x2b, 0xe7, 0x67, 0xe1, + 0x98, 0x00, 0x0e, 0x8f, 0x1e, 0xce, 0x8b, 0xd1, 0x2d, 0xbd, 0x18, 0xdd, 0x11, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0x87, + 0x2c, 0x9e, 0x0e, 0x06, 0x6b, 0xa4, 0xea, 0x2a, 0xf7, 0x9a, 0x2c, 0xe8, 0x05, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x13, + 0x6b, 0x43, 0xc3, 0xdf, 0x30, 0xf8, 0xf8, 0x8e, 0x5d, 0x8c, 0xee, 0xe8, 0x2d, 0x7b, 0xb3, 0x1d, 0x4f, 0x81, 0x99, + 0x5a, 0xcd, 0xc2, 0xbb, 0xc3, 0xcb, 0xd9, 0x25, 0xbb, 0x8b, 0xee, 0x8e, 0xa0, 0xa1, 0x57, 0xec, 0x0e, 0x01, 0x97, + 0xd2, 0xc7, 0xcb, 0xc1, 0x1b, 0xb2, 0x3f, 0x18, 0xa4, 0x24, 0x0a, 0xaf, 0x43, 0xaf, 0x95, 0x6f, 0xe8, 0x1d, 0xa1, + 0x2b, 0x76, 0x8b, 0xa3, 0x71, 0xc9, 0xf0, 0x83, 0x73, 0x76, 0x57, 0x5f, 0x87, 0xde, 0x6e, 0x4e, 0x44, 0x27, 0x88, + 0x11, 0xfa, 0x1a, 0x38, 0x9a, 0xe5, 0xc2, 0x4c, 0xc0, 0x93, 0xb9, 0xc8, 0x68, 0x51, 0x68, 0x06, 0xe2, 0xac, 0x04, + 0xc4, 0x92, 0xa8, 0xfb, 0xcd, 0x46, 0x67, 0xb0, 0x9c, 0xfb, 0xfd, 0x5e, 0x65, 0xe8, 0x01, 0x22, 0x67, 0x76, 0xd2, + 0x83, 0x9e, 0x4f, 0x0f, 0xf0, 0x13, 0xbd, 0x6a, 0x10, 0x27, 0xf3, 0xbb, 0x65, 0xf4, 0x9b, 0x47, 0x1f, 0x7e, 0xe8, + 0xa6, 0x3c, 0x22, 0xff, 0xf7, 0x29, 0x4f, 0x99, 0x47, 0x6f, 0x2a, 0x0f, 0x04, 0xcf, 0x5b, 0x93, 0x4a, 0x23, 0x51, + 0x8d, 0xce, 0x56, 0x31, 0x68, 0x23, 0x51, 0xdb, 0xa0, 0x9f, 0xd0, 0xc2, 0x0a, 0x22, 0xe4, 0x1c, 0xbc, 0x00, 0x83, + 0x54, 0x08, 0x95, 0xa3, 0x16, 0x25, 0x1a, 0x82, 0xe4, 0xb2, 0xe4, 0x2a, 0x7c, 0x0e, 0xa1, 0xea, 0xf4, 0x71, 0x26, + 0xc2, 0x86, 0x1e, 0x87, 0x3e, 0x00, 0xfc, 0xaf, 0x3b, 0xe4, 0xa2, 0xe4, 0x97, 0x78, 0x36, 0xb7, 0x09, 0x46, 0xc1, + 0x12, 0xd1, 0x0c, 0x6d, 0x83, 0xd8, 0x8f, 0x25, 0xc1, 0x7a, 0x24, 0x8d, 0x47, 0xa5, 0x39, 0x22, 0xfc, 0x28, 0x3e, + 0x8a, 0x9e, 0xc6, 0x86, 0x44, 0x72, 0x24, 0x91, 0x7c, 0x00, 0x84, 0x93, 0xa0, 0xbf, 0xb8, 0x6b, 0xb2, 0x6b, 0x21, + 0x31, 0xe8, 0x4f, 0x4b, 0xa6, 0x65, 0xf7, 0xaa, 0xc7, 0xbe, 0x22, 0xc8, 0x1d, 0xd3, 0x7f, 0x79, 0x7d, 0xf8, 0xe7, + 0x12, 0x67, 0xd0, 0x7a, 0xbe, 0xa8, 0xce, 0xcc, 0xbc, 0xc1, 0x8d, 0xbc, 0x2e, 0x6b, 0xd7, 0xe5, 0x0b, 0xbe, 0xc7, + 0x6f, 0x2b, 0x2e, 0xd2, 0x72, 0xef, 0x97, 0xaa, 0x8d, 0xe7, 0x54, 0xae, 0x57, 0x2e, 0xce, 0x8a, 0x32, 0x4e, 0xf5, + 0xa4, 0x2e, 0xc6, 0x1a, 0xb6, 0xe1, 0xf7, 0x88, 0xba, 0x92, 0x96, 0xa3, 0xa7, 0x94, 0xab, 0x66, 0xca, 0xc5, 0x3a, + 0xcf, 0x7f, 0xde, 0x49, 0xc5, 0x29, 0x6e, 0xa6, 0x20, 0x55, 0x6a, 0xb9, 0x80, 0xea, 0x39, 0x6a, 0xb9, 0x5b, 0x9a, + 0x1d, 0xe0, 0xdc, 0x36, 0xd5, 0xc7, 0xca, 0xec, 0xc2, 0x4b, 0x6e, 0xdc, 0x9f, 0x4c, 0x19, 0x16, 0x8c, 0x42, 0x9b, + 0x55, 0x57, 0xda, 0xbe, 0xd0, 0x3a, 0x0d, 0xc3, 0x95, 0x1f, 0x2f, 0x20, 0x5d, 0xc0, 0x38, 0x5e, 0x94, 0x4c, 0x8c, + 0xdb, 0xa3, 0xb7, 0x82, 0xf8, 0x92, 0xad, 0x40, 0xc0, 0x5c, 0xc3, 0xdb, 0x75, 0x1d, 0x6d, 0xf7, 0xc4, 0x29, 0xa3, + 0x72, 0x15, 0x8b, 0xef, 0xe3, 0x95, 0x81, 0x4c, 0x56, 0xc7, 0x63, 0x63, 0x4c, 0xa7, 0x3f, 0x25, 0xa1, 0x5f, 0x08, + 0x05, 0x9f, 0xf5, 0xd2, 0xca, 0x93, 0xdb, 0xc3, 0x32, 0xae, 0xd1, 0x2b, 0x71, 0xa5, 0xfb, 0x66, 0xa4, 0x90, 0x7a, + 0xe4, 0xab, 0xa6, 0x80, 0xde, 0x8c, 0x7d, 0x33, 0x15, 0xe6, 0xed, 0x9e, 0x31, 0x57, 0x08, 0x56, 0xaa, 0xec, 0xf6, + 0x9d, 0x1a, 0x53, 0x31, 0x83, 0x29, 0xb6, 0x9d, 0xc5, 0xa4, 0x5b, 0xf9, 0xa7, 0x9d, 0xfb, 0x65, 0xde, 0xe1, 0xae, + 0xa8, 0xdf, 0x02, 0x17, 0x9a, 0x15, 0x65, 0xd5, 0x96, 0x0d, 0xdb, 0xc6, 0x1b, 0x59, 0x28, 0x36, 0xc0, 0xb2, 0xe7, + 0xbe, 0x85, 0x07, 0x88, 0x9b, 0x70, 0xcf, 0x2e, 0x6a, 0xb8, 0x31, 0x7c, 0x59, 0x49, 0xbe, 0x2b, 0x8d, 0xb9, 0xf4, + 0xa9, 0xd2, 0xc4, 0x70, 0xb2, 0x18, 0x71, 0x91, 0x2e, 0xea, 0xcc, 0xae, 0x85, 0xcf, 0x78, 0x19, 0xce, 0xf9, 0xc2, + 0xe8, 0xa6, 0x74, 0xe9, 0x05, 0x8b, 0x75, 0xa7, 0x37, 0x2b, 0x8d, 0x95, 0x12, 0x71, 0x6b, 0x96, 0x09, 0x94, 0xa5, + 0xac, 0x95, 0xf0, 0xa6, 0x68, 0xd9, 0x4a, 0x1a, 0x79, 0xcf, 0x1c, 0xdc, 0xc7, 0x7e, 0x40, 0x4c, 0x64, 0x13, 0x98, + 0x14, 0x0d, 0x1d, 0xd0, 0xae, 0xba, 0xf0, 0xcd, 0xa8, 0x07, 0x83, 0xdc, 0x92, 0x44, 0xac, 0x20, 0xc5, 0x0a, 0xd6, + 0x35, 0x2b, 0xe6, 0xf9, 0x82, 0x5e, 0x30, 0x39, 0x4f, 0x17, 0x74, 0xc5, 0xe4, 0x7c, 0x8d, 0x37, 0xa1, 0x0b, 0x38, + 0x21, 0xc9, 0x26, 0x56, 0x0a, 0xd8, 0x0b, 0xbc, 0xbc, 0xe1, 0x99, 0xaa, 0x69, 0xd9, 0xa5, 0xe2, 0x00, 0xe3, 0xf3, + 0x32, 0x0c, 0xcb, 0xe1, 0x05, 0x58, 0x4b, 0xec, 0x87, 0xab, 0x39, 0x5f, 0xa8, 0xdf, 0x10, 0x70, 0x3e, 0x09, 0x15, + 0xbb, 0x60, 0xf7, 0x02, 0x99, 0x5e, 0xcd, 0xf9, 0x42, 0x8d, 0x84, 0x2e, 0xf8, 0xca, 0x1a, 0x9b, 0xc4, 0x9e, 0xa0, + 0x65, 0x16, 0xcf, 0xc7, 0x8b, 0x28, 0xae, 0x61, 0x19, 0x9e, 0xaa, 0x99, 0x69, 0xc9, 0x7f, 0x12, 0xb5, 0xa1, 0x89, + 0xbe, 0xc1, 0x2a, 0xf2, 0x87, 0xc7, 0x47, 0x97, 0x40, 0xc6, 0xce, 0xae, 0x64, 0xe6, 0x43, 0xdf, 0x47, 0x06, 0xf7, + 0xdc, 0x94, 0x33, 0xae, 0x82, 0x44, 0x19, 0xb8, 0x7b, 0x35, 0x4b, 0xc6, 0x5a, 0x84, 0xef, 0x1e, 0x15, 0x45, 0x9f, + 0x49, 0xd3, 0x80, 0xee, 0x23, 0xc1, 0x1c, 0xe8, 0xbd, 0x42, 0x87, 0xcb, 0x6a, 0x9b, 0x09, 0xf8, 0x8b, 0x04, 0xf9, + 0xad, 0xd0, 0xab, 0x1a, 0x83, 0x2a, 0xda, 0x45, 0x2c, 0xfd, 0xfb, 0x88, 0x1f, 0x65, 0xf3, 0x2f, 0x73, 0x8f, 0x57, + 0x12, 0x06, 0x3f, 0xa4, 0x66, 0x93, 0xcc, 0xdb, 0x2b, 0xf6, 0x3d, 0x74, 0xd4, 0xa3, 0xd6, 0x78, 0x5f, 0xbd, 0xe0, + 0x14, 0x62, 0x94, 0x50, 0x74, 0x12, 0x0c, 0xe0, 0x76, 0x09, 0x29, 0xee, 0x06, 0xbb, 0x69, 0x5e, 0xf3, 0xa2, 0xe0, + 0x7c, 0x5d, 0x55, 0x81, 0x1f, 0xd0, 0x70, 0xbe, 0xd8, 0x0d, 0x61, 0x38, 0xa6, 0xad, 0x6b, 0x18, 0x84, 0x19, 0xc3, + 0x48, 0x08, 0x5e, 0xff, 0xa2, 0x27, 0x34, 0x89, 0x57, 0xdf, 0xf1, 0x4f, 0x19, 0x2f, 0x14, 0x91, 0x06, 0x11, 0x52, + 0x37, 0xf1, 0x8d, 0x4c, 0x93, 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0xd8, 0xd0, 0x54, 0xfc, 0xad, 0x16, 0x1f, 0xfc, + 0xd4, 0x74, 0x3c, 0x1a, 0xd7, 0xad, 0xce, 0xa8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0x60, 0x1a, + 0x69, 0xde, 0xba, 0x87, 0xc0, 0x2b, 0xd3, 0xe2, 0x9d, 0x07, 0x74, 0x73, 0xe6, 0x83, 0x27, 0x8f, 0xe9, 0x99, 0x43, + 0x4f, 0xae, 0xd8, 0x51, 0xd5, 0x43, 0xed, 0xbd, 0x19, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0x50, 0x7b, 0x57, + 0xf7, 0x1f, 0xcb, 0x5d, 0x0e, 0xdf, 0x71, 0x96, 0x1b, 0xc0, 0x52, 0x91, 0xb5, 0x02, 0x8f, 0x02, 0xd4, 0xa5, 0x32, + 0x84, 0x2d, 0xe6, 0x70, 0xa8, 0xec, 0x56, 0xad, 0x86, 0x92, 0x1c, 0x96, 0x23, 0x70, 0x08, 0x5d, 0x97, 0x83, 0x72, + 0xb4, 0xcc, 0xaa, 0xf7, 0xf8, 0x5b, 0xb3, 0x0e, 0x49, 0x76, 0x1f, 0xeb, 0xc0, 0x2d, 0xeb, 0x30, 0xfd, 0x68, 0x90, + 0x02, 0xd0, 0x64, 0x23, 0x70, 0x09, 0xc0, 0x7b, 0xfb, 0x8f, 0x08, 0xb5, 0x32, 0xbd, 0x97, 0xb1, 0x50, 0xdf, 0x37, + 0x92, 0xa0, 0x84, 0x66, 0x42, 0xe5, 0x58, 0x0a, 0xde, 0x79, 0xa4, 0x73, 0x52, 0x67, 0xe2, 0x3d, 0x88, 0xd3, 0xc2, + 0x07, 0xf6, 0x16, 0x04, 0xe7, 0x2c, 0xe8, 0x1d, 0xde, 0x66, 0xb5, 0xd4, 0x46, 0x0f, 0x14, 0xc0, 0xef, 0x06, 0x77, + 0x08, 0xf2, 0xd5, 0x18, 0xae, 0x95, 0xbc, 0x09, 0xf9, 0xb0, 0xa0, 0x07, 0x64, 0x60, 0x9f, 0xc5, 0x30, 0xa6, 0x07, + 0xe4, 0xd0, 0x3e, 0x4b, 0x37, 0x80, 0x03, 0xa9, 0x47, 0x95, 0x1e, 0x40, 0x83, 0x7e, 0xb7, 0x2d, 0xb2, 0x24, 0xeb, + 0xc7, 0xd2, 0x28, 0x62, 0xa0, 0x4a, 0x10, 0x51, 0x8b, 0x7f, 0x3e, 0x98, 0xeb, 0x0e, 0x73, 0x81, 0x30, 0x07, 0x03, + 0x0e, 0xe2, 0x36, 0x08, 0xcd, 0x01, 0xb3, 0xb9, 0x8d, 0x04, 0xbd, 0xb3, 0x86, 0x99, 0x1d, 0xfd, 0xe1, 0x56, 0x82, + 0x6f, 0xb2, 0xd6, 0xa8, 0xf3, 0xe2, 0x10, 0x08, 0x82, 0x37, 0x85, 0xaa, 0xf6, 0xaa, 0x07, 0x36, 0xde, 0xaa, 0x1f, + 0xdb, 0xed, 0x78, 0x2a, 0xdc, 0xb5, 0x5f, 0x50, 0x38, 0xf9, 0x94, 0xfc, 0xeb, 0xbd, 0xc9, 0xe0, 0xc0, 0xc8, 0xf0, + 0xa5, 0xb7, 0x7f, 0xe1, 0x6b, 0x2d, 0xdd, 0x13, 0x83, 0x92, 0x3c, 0x3e, 0x50, 0xf4, 0xef, 0x5e, 0x59, 0xf9, 0xd4, + 0x4e, 0xff, 0x76, 0x6b, 0xd6, 0xe7, 0xe1, 0x68, 0xb2, 0xdd, 0xf6, 0xb4, 0x81, 0x2b, 0xd5, 0x2a, 0x04, 0xec, 0x42, + 0x49, 0xf6, 0x0f, 0x20, 0x2a, 0x42, 0x33, 0xee, 0x66, 0xd9, 0x90, 0xc8, 0xf8, 0x71, 0x3a, 0xcb, 0x86, 0x60, 0x87, + 0x7b, 0x51, 0x89, 0xcb, 0x51, 0x6b, 0x83, 0xd3, 0xb3, 0x24, 0x84, 0x50, 0x0e, 0x58, 0xd9, 0xad, 0xfa, 0x73, 0xa7, + 0xcc, 0x84, 0xd4, 0x64, 0x75, 0x3b, 0xa5, 0x7b, 0x98, 0xe6, 0x7b, 0x66, 0x04, 0x07, 0xdc, 0xdb, 0x5f, 0xf5, 0xc7, + 0x30, 0xc9, 0x34, 0x39, 0x45, 0xf2, 0x8b, 0xf4, 0x14, 0x92, 0x76, 0xe8, 0xa9, 0x22, 0x80, 0x13, 0x6a, 0x3f, 0x86, + 0xdf, 0x30, 0xee, 0xdf, 0x35, 0x5f, 0xbb, 0xa9, 0x88, 0x9e, 0x52, 0x2c, 0x53, 0x93, 0xd3, 0x24, 0x2b, 0x12, 0x88, + 0xda, 0xa8, 0x9a, 0x11, 0x3d, 0x71, 0x31, 0x1f, 0x15, 0xe1, 0xf3, 0x6a, 0xfd, 0x9f, 0x21, 0x7c, 0x46, 0xe1, 0x06, + 0x70, 0x79, 0xc5, 0xe5, 0x79, 0xf8, 0xec, 0x29, 0xdd, 0x9b, 0x7c, 0x73, 0x40, 0xf7, 0x0e, 0x9e, 0x3c, 0x23, 0x00, + 0x8b, 0x76, 0x79, 0x1e, 0x1e, 0x3c, 0x7b, 0x46, 0xf7, 0xbe, 0xfd, 0x96, 0xee, 0x4d, 0x9e, 0x1c, 0x34, 0xd2, 0x26, + 0xcf, 0xbe, 0xa5, 0x7b, 0xdf, 0x3c, 0x6d, 0xa4, 0x1d, 0x8c, 0x9f, 0xd1, 0xbd, 0xbf, 0x7f, 0x63, 0xd2, 0xfe, 0x06, + 0xd9, 0xbe, 0x3d, 0xc0, 0xff, 0x4c, 0xda, 0xe4, 0xd9, 0x13, 0xba, 0x37, 0x19, 0x43, 0x25, 0xcf, 0x5c, 0x25, 0xe3, + 0x09, 0x7c, 0xfc, 0x04, 0xfe, 0xfb, 0x1b, 0x09, 0x16, 0xb4, 0x92, 0x2c, 0x17, 0xa8, 0x3f, 0x43, 0x11, 0x27, 0xaa, + 0x26, 0x12, 0x1e, 0x62, 0x66, 0xf5, 0x4d, 0x1c, 0x06, 0xc4, 0xa5, 0x43, 0x41, 0x74, 0x6f, 0x3c, 0x7a, 0x46, 0x02, + 0x1f, 0x9e, 0xee, 0xc6, 0x07, 0x19, 0xcb, 0xc5, 0x3c, 0xfb, 0x2a, 0x37, 0xb1, 0x15, 0x3c, 0x00, 0xab, 0x8f, 0x7e, + 0xae, 0x4a, 0xce, 0xb3, 0xaf, 0x2a, 0xb9, 0x9b, 0xeb, 0xf7, 0x16, 0xa0, 0xbc, 0xbf, 0x6a, 0xd9, 0x4d, 0xa1, 0x42, + 0xa7, 0xb5, 0x46, 0x9f, 0x7d, 0xc4, 0xf4, 0xc1, 0xc0, 0xbb, 0x61, 0xff, 0xb4, 0x53, 0x4e, 0xeb, 0x1b, 0x8d, 0x42, + 0x8d, 0xca, 0x43, 0xc2, 0x8e, 0xa0, 0xe8, 0xc1, 0x00, 0x78, 0x02, 0x0f, 0xf7, 0xed, 0xdf, 0x2c, 0xe3, 0x63, 0x47, + 0x19, 0xbf, 0xa0, 0x0c, 0x01, 0x8d, 0x7a, 0x98, 0xdd, 0xf4, 0xb0, 0xd1, 0xad, 0x5e, 0xb2, 0x54, 0x27, 0x53, 0xd3, + 0x33, 0xd8, 0xd7, 0xba, 0x96, 0x7b, 0x46, 0x14, 0x2d, 0x2f, 0xf6, 0x52, 0x3e, 0xab, 0xd8, 0x4f, 0x4b, 0x54, 0x6f, + 0x45, 0x8d, 0x37, 0x32, 0x9b, 0x55, 0xec, 0x7b, 0xf3, 0x06, 0xb8, 0x19, 0xf6, 0xbb, 0x7a, 0xf2, 0x03, 0x67, 0x70, + 0x69, 0xdb, 0xa3, 0x4c, 0x8c, 0x00, 0x2b, 0x20, 0x03, 0x07, 0x1e, 0x00, 0x1d, 0xf4, 0x47, 0x7b, 0xbb, 0x55, 0x29, + 0xcd, 0x3e, 0x5b, 0x18, 0x40, 0xc3, 0xbc, 0x4d, 0x5c, 0xd9, 0xff, 0x6a, 0xc8, 0x4b, 0x50, 0xb8, 0xd5, 0x2c, 0x6f, + 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x65, 0x40, 0xcd, 0x96, 0x8f, 0x36, + 0x5c, 0xa9, 0x27, 0x81, 0x33, 0xb8, 0x90, 0x45, 0xc2, 0x4f, 0xb4, 0xd8, 0x1f, 0xad, 0x1f, 0x7d, 0xdf, 0x1e, 0x0f, + 0xd6, 0xbe, 0xc7, 0x47, 0xfa, 0xb3, 0xc6, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0x17, 0xb5, 0x95, 0x78, 0x94, 0xc0, 0x1b, + 0x98, 0x88, 0x14, 0x06, 0xa9, 0x16, 0x38, 0x06, 0xe5, 0x8d, 0x85, 0x58, 0xaa, 0xae, 0x6e, 0xb0, 0x05, 0x91, 0x21, + 0x78, 0xb8, 0xfd, 0x6b, 0xa9, 0x02, 0x47, 0xf5, 0xfb, 0x5c, 0xfa, 0x6e, 0x4f, 0xc6, 0x8e, 0x1c, 0xa7, 0x7e, 0x2a, + 0x1c, 0xfc, 0x37, 0xa9, 0x6b, 0x63, 0xb9, 0x92, 0x32, 0xcb, 0xb2, 0xb0, 0xa3, 0x50, 0xcb, 0x3d, 0x2a, 0x0f, 0x92, + 0x2f, 0xe4, 0x10, 0xc9, 0x02, 0xa3, 0x50, 0x90, 0xe1, 0x84, 0x8a, 0xd1, 0x5a, 0x94, 0xcb, 0xec, 0xa2, 0x0a, 0x37, + 0x4a, 0xa1, 0xcc, 0x29, 0xfa, 0x76, 0x83, 0x03, 0x09, 0x89, 0xb2, 0xf2, 0x6d, 0xfc, 0x36, 0x44, 0xb0, 0x3a, 0xae, + 0x6d, 0xa1, 0xb8, 0xb7, 0x3f, 0x79, 0xda, 0xc5, 0x1f, 0x19, 0x17, 0x50, 0x17, 0x8b, 0x69, 0x38, 0xb1, 0xb1, 0x6f, + 0xdc, 0x17, 0x56, 0xd3, 0x03, 0x50, 0xdf, 0xa5, 0x12, 0x23, 0xa8, 0xaf, 0x8c, 0x7d, 0x6c, 0x8f, 0x31, 0x39, 0x83, + 0x58, 0xc3, 0x2a, 0x67, 0xa6, 0xfa, 0x46, 0xd8, 0x11, 0x00, 0x37, 0x42, 0x6b, 0x14, 0x04, 0x1e, 0xaf, 0x42, 0x3c, + 0x2f, 0x55, 0xf8, 0xd6, 0x8c, 0xd0, 0x31, 0x78, 0x53, 0xd9, 0x46, 0x66, 0xd2, 0x17, 0x0c, 0x9a, 0x63, 0x5b, 0x47, + 0x61, 0xb5, 0x95, 0x65, 0x47, 0x00, 0x37, 0x90, 0x1d, 0x9a, 0x8b, 0xe7, 0xac, 0x9a, 0x67, 0x8b, 0xc8, 0x04, 0x05, + 0x5c, 0x0a, 0xcb, 0xa0, 0x7d, 0xba, 0x47, 0xb6, 0xe3, 0x10, 0xba, 0xe1, 0x3e, 0x82, 0xf1, 0xb4, 0x9b, 0x82, 0x15, + 0x44, 0x23, 0xc4, 0xc3, 0x8c, 0x59, 0x7c, 0xaf, 0x34, 0xe5, 0xa9, 0x6a, 0x09, 0x04, 0x8e, 0x42, 0xa8, 0x8b, 0x5d, + 0xa3, 0x04, 0x97, 0xa9, 0x11, 0xcc, 0x60, 0xc7, 0x8e, 0xd4, 0x76, 0xc9, 0x39, 0x1d, 0xaa, 0x29, 0x2d, 0xf5, 0x94, + 0x6a, 0x5f, 0x43, 0x31, 0x2f, 0xd1, 0x43, 0x0f, 0x5c, 0x0f, 0xb4, 0x43, 0x5e, 0x49, 0x27, 0x26, 0x82, 0x4e, 0xab, + 0x4d, 0xd8, 0xb9, 0x91, 0x6e, 0x59, 0x8d, 0xbc, 0x63, 0x68, 0x76, 0xc4, 0x4b, 0x3f, 0x50, 0x17, 0x40, 0x84, 0xdc, + 0xdb, 0x22, 0x73, 0x44, 0xb3, 0xac, 0x7c, 0x05, 0x65, 0x71, 0xc4, 0xd6, 0x15, 0x70, 0x2d, 0x05, 0x93, 0x4b, 0x1e, + 0xf1, 0x14, 0x11, 0x01, 0x8f, 0x95, 0x76, 0x7d, 0xa7, 0x25, 0x84, 0x66, 0x29, 0x10, 0x37, 0x17, 0xc5, 0xb9, 0xb6, + 0x81, 0x2c, 0x80, 0xbe, 0xfd, 0x9c, 0x5d, 0x79, 0xe1, 0x60, 0x37, 0x57, 0x99, 0x78, 0xc1, 0x2f, 0x32, 0xc1, 0x53, + 0x04, 0xbb, 0xba, 0x35, 0x0f, 0xdc, 0xb1, 0x6d, 0x60, 0xf9, 0xf6, 0x1d, 0x2c, 0x98, 0x32, 0xd4, 0x4a, 0x89, 0x4c, + 0x44, 0x02, 0x32, 0xfb, 0xcc, 0xdd, 0x9b, 0x4c, 0xbc, 0x89, 0x6f, 0xc1, 0x9b, 0xa2, 0xc1, 0x4f, 0x8f, 0xce, 0xf1, + 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x25, 0x68, 0x6d, 0x0d, 0x81, + 0x17, 0x7f, 0x5a, 0x75, 0xef, 0x2a, 0x13, 0xc6, 0x3e, 0xe3, 0x2a, 0xbe, 0x65, 0xa5, 0x02, 0xb3, 0xc0, 0x38, 0xf7, + 0x6d, 0x29, 0xc9, 0x55, 0x26, 0x8c, 0x80, 0xe4, 0x2a, 0xbe, 0xa5, 0x4d, 0x19, 0x87, 0xb6, 0xa2, 0xf3, 0xe2, 0xfc, + 0xee, 0x0e, 0xbf, 0xc4, 0x50, 0x2b, 0xe3, 0x7e, 0x1f, 0x24, 0x66, 0xd2, 0x36, 0x65, 0x26, 0x23, 0xa9, 0xd1, 0x42, + 0x2a, 0xca, 0x07, 0x13, 0xb2, 0xbb, 0x52, 0x2d, 0x23, 0x6a, 0xbf, 0x0a, 0xc5, 0x6c, 0x1c, 0x4d, 0x08, 0x9d, 0x74, + 0xac, 0x77, 0xd3, 0x5a, 0xc8, 0x34, 0x7a, 0x16, 0x79, 0x3e, 0x9d, 0x05, 0xab, 0xa6, 0xc5, 0x21, 0xe3, 0xd3, 0x62, + 0x30, 0x20, 0xda, 0xa5, 0x70, 0x83, 0xf5, 0x80, 0x29, 0x8d, 0x8b, 0xb7, 0x66, 0x5a, 0xfd, 0x4a, 0xaa, 0x90, 0xf4, + 0x9e, 0x01, 0x49, 0x26, 0x5d, 0xb0, 0x5b, 0x90, 0x28, 0x7a, 0xfe, 0x77, 0x6a, 0x0b, 0xee, 0x7a, 0x30, 0x36, 0xa3, + 0xfb, 0x7a, 0xc6, 0x7f, 0xa8, 0x6d, 0x41, 0xd4, 0xa7, 0x92, 0xf5, 0x3a, 0x12, 0x55, 0xc8, 0x45, 0xf8, 0xd9, 0xd1, + 0x10, 0x43, 0x54, 0x7b, 0x2c, 0x10, 0xeb, 0xab, 0x73, 0x5e, 0xe0, 0xf4, 0x33, 0x77, 0xb9, 0x82, 0x6d, 0x41, 0x2b, + 0x43, 0xa3, 0xde, 0xc6, 0x6f, 0x23, 0x7b, 0x59, 0xd0, 0x45, 0xbe, 0x40, 0x21, 0x6b, 0x1e, 0x86, 0xd5, 0xb0, 0x3d, + 0x88, 0x64, 0xbf, 0x3d, 0x09, 0x8d, 0xc6, 0xc0, 0x02, 0xd9, 0xa1, 0x11, 0xb8, 0x08, 0xad, 0xfc, 0xed, 0x10, 0x5c, + 0xb8, 0x2c, 0x22, 0xcb, 0x50, 0xc7, 0x6f, 0x6a, 0x37, 0x41, 0xf5, 0x0a, 0x9d, 0xa6, 0xb0, 0x2a, 0x65, 0x92, 0x0f, + 0xbf, 0x5e, 0xc9, 0x02, 0x33, 0x79, 0x5d, 0xf6, 0xe8, 0x6b, 0xbb, 0xbd, 0x03, 0x53, 0xb0, 0xee, 0x93, 0xf7, 0xf5, + 0xe3, 0xce, 0x9e, 0x80, 0x51, 0xac, 0xca, 0xd1, 0x14, 0x52, 0x6a, 0x1f, 0x94, 0xfa, 0x63, 0xb8, 0x14, 0x9a, 0x63, + 0xb7, 0x80, 0x49, 0xc0, 0x3e, 0x43, 0xaa, 0xc7, 0xb4, 0x63, 0x9f, 0xa3, 0x0d, 0x2c, 0x09, 0x38, 0xfc, 0xa3, 0x4c, + 0xd6, 0xfe, 0xd5, 0x5d, 0xa4, 0xcd, 0x90, 0x2d, 0xf3, 0x05, 0xf0, 0xf9, 0xb0, 0x6b, 0xa3, 0x12, 0x65, 0x13, 0x91, + 0xa4, 0xb0, 0xe5, 0x31, 0x48, 0x7b, 0x14, 0xd3, 0x55, 0xc1, 0x93, 0x0c, 0xa5, 0x14, 0x89, 0xf6, 0x09, 0xce, 0xe1, + 0x0d, 0xee, 0x47, 0x15, 0x10, 0x5e, 0x85, 0x9c, 0x8e, 0x52, 0xaa, 0x2d, 0x60, 0x14, 0xf5, 0x00, 0x51, 0x5e, 0x06, + 0x72, 0xbc, 0xed, 0x76, 0x42, 0x57, 0x6c, 0x39, 0x9c, 0x50, 0x24, 0x25, 0x97, 0x58, 0xee, 0x15, 0xe8, 0x3c, 0xce, + 0x59, 0xef, 0x25, 0x60, 0x11, 0x9c, 0xc1, 0xdf, 0x98, 0xd0, 0x6b, 0xf8, 0x9b, 0x13, 0xfa, 0x86, 0x85, 0x57, 0xc3, + 0x4b, 0xb2, 0x1f, 0xa6, 0x83, 0x89, 0x12, 0x8c, 0xdd, 0xb1, 0x65, 0x19, 0xaa, 0xc4, 0xd5, 0xfe, 0x05, 0x79, 0x7c, + 0x41, 0x6f, 0xe9, 0x0d, 0x3d, 0xa5, 0x27, 0x40, 0xf8, 0xef, 0x0e, 0x27, 0x7c, 0x38, 0x79, 0xda, 0xef, 0xf7, 0xce, + 0xfb, 0xfd, 0xde, 0x99, 0x31, 0xa0, 0xd0, 0xbb, 0xe8, 0xb2, 0xa6, 0xfa, 0xd7, 0x55, 0xbd, 0x98, 0x9e, 0xa8, 0x8d, + 0x9b, 0xf0, 0x2c, 0x0f, 0xaf, 0xf6, 0xef, 0xc8, 0x10, 0x1f, 0x2f, 0x72, 0x29, 0x8b, 0xf0, 0x72, 0xff, 0x8e, 0xd0, + 0x93, 0x23, 0xd0, 0x9b, 0x62, 0x7d, 0x27, 0x8f, 0xef, 0x74, 0x6d, 0x84, 0xbe, 0x0c, 0x13, 0xd8, 0x26, 0xb7, 0xcc, + 0xde, 0xb5, 0x27, 0x63, 0x88, 0x65, 0x72, 0xe7, 0x95, 0x77, 0xf7, 0xf8, 0x96, 0xec, 0xdf, 0x82, 0xa7, 0xa8, 0x25, + 0x7f, 0xb3, 0xf0, 0x86, 0xb5, 0x6a, 0x78, 0x7c, 0x47, 0x4f, 0x5b, 0x8d, 0x78, 0x7c, 0x47, 0xa2, 0xf0, 0x86, 0x5d, + 0xd2, 0x53, 0x76, 0x45, 0xe8, 0x79, 0xbf, 0x7f, 0xd6, 0xef, 0xcb, 0x7e, 0xff, 0xa7, 0x38, 0x0c, 0xe3, 0x61, 0x41, + 0xf6, 0x25, 0xbd, 0xdb, 0x9f, 0xf0, 0x27, 0x64, 0x16, 0xea, 0xe6, 0xab, 0x05, 0x67, 0x55, 0xde, 0x2a, 0xd7, 0x1d, + 0x05, 0x6b, 0x85, 0x3b, 0xa6, 0x9e, 0x4e, 0xe8, 0x0d, 0x2b, 0xe8, 0x29, 0x8b, 0x49, 0x74, 0x0d, 0xad, 0x38, 0x9f, + 0x15, 0xd1, 0x0d, 0x3d, 0x65, 0x67, 0xb3, 0x38, 0x3a, 0xa5, 0x27, 0x2c, 0x1f, 0x4e, 0x20, 0xef, 0xe9, 0xf0, 0x86, + 0xec, 0x9f, 0x90, 0x28, 0x3c, 0xd1, 0xbf, 0xef, 0xe8, 0x25, 0x0f, 0x4f, 0xa8, 0x57, 0xcd, 0x09, 0x31, 0xd5, 0x37, + 0x6a, 0x3f, 0x21, 0x91, 0x3f, 0x98, 0x27, 0xd6, 0x9e, 0xe6, 0x91, 0xa3, 0x8d, 0x69, 0x19, 0x82, 0xbe, 0xb9, 0x0c, + 0x6f, 0x08, 0x99, 0x36, 0xc7, 0x0e, 0x06, 0x74, 0xf6, 0x28, 0x4a, 0x08, 0xbd, 0xf1, 0x4b, 0xbd, 0xc1, 0x31, 0x34, + 0x23, 0xa4, 0xd2, 0x4e, 0x31, 0x0d, 0xd7, 0xc1, 0x6b, 0x0d, 0xd6, 0x71, 0xde, 0xef, 0x87, 0xeb, 0x7e, 0x1f, 0x22, + 0xdd, 0x17, 0x33, 0x13, 0xdb, 0xcd, 0x91, 0x4d, 0x7a, 0x03, 0xda, 0xff, 0xd7, 0x83, 0x01, 0x74, 0xc6, 0x2b, 0x29, + 0xbc, 0x19, 0xbc, 0x7e, 0x7c, 0x47, 0x54, 0x1d, 0x05, 0x15, 0x32, 0x2c, 0xe8, 0x1b, 0x9a, 0x01, 0xe0, 0xd7, 0xeb, + 0xc1, 0x80, 0x44, 0xe6, 0x33, 0x32, 0x7d, 0x7d, 0x78, 0x32, 0x1d, 0x0c, 0x5e, 0x9b, 0x6d, 0xf2, 0x96, 0xdd, 0x53, + 0x0a, 0xac, 0xbf, 0xb3, 0x7e, 0xff, 0xed, 0x51, 0x4c, 0xce, 0x0b, 0x1e, 0x7f, 0x9c, 0x36, 0xdb, 0xf2, 0xd6, 0x45, + 0x55, 0x3b, 0xeb, 0xf7, 0xd7, 0xfd, 0xfe, 0x29, 0x60, 0x17, 0xcd, 0x9c, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x8e, 0x22, + 0x69, 0x92, 0x43, 0x63, 0x68, 0x5b, 0xac, 0xda, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xa8, 0x59, 0x51, 0x5c, 0x93, 0x28, + 0xec, 0x9d, 0x6d, 0xb7, 0xa7, 0x8c, 0xb1, 0x98, 0x80, 0xf4, 0xc3, 0x7f, 0x7d, 0x5a, 0x37, 0x62, 0x88, 0x09, 0x89, + 0xcc, 0xe6, 0x66, 0x69, 0x0f, 0x81, 0x88, 0xc3, 0xa6, 0x7f, 0x6f, 0xee, 0xe5, 0xa2, 0x76, 0x7c, 0xeb, 0x2f, 0x00, + 0x42, 0x24, 0x59, 0xc8, 0x67, 0x38, 0x06, 0x65, 0x06, 0x40, 0xe6, 0x91, 0x9a, 0x79, 0x09, 0x20, 0xc0, 0x64, 0xbb, + 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb0, 0xd1, 0xdf, 0x9e, 0x3d, 0xae, 0x1e, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, + 0x61, 0x17, 0x6b, 0xb5, 0x0f, 0x46, 0xf0, 0x9a, 0x7d, 0xbc, 0xce, 0xbe, 0x98, 0x7d, 0x44, 0xc2, 0xda, 0x60, 0x1c, + 0xb9, 0x48, 0x5b, 0x7a, 0xbb, 0x7b, 0x18, 0x4c, 0x2e, 0xd2, 0xcf, 0xb0, 0x9d, 0x3e, 0xff, 0xe6, 0xc1, 0x78, 0xc2, + 0xc1, 0xe8, 0x2e, 0x0a, 0xfa, 0x4c, 0xdb, 0x6e, 0x2b, 0xff, 0x12, 0xf8, 0x16, 0x53, 0x41, 0xc7, 0x66, 0x59, 0xb8, + 0x41, 0x45, 0xd4, 0xd1, 0x32, 0xa8, 0x6a, 0x65, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0x32, 0x71, 0x0b, 0x0c, 0x43, 0x86, + 0xba, 0xdc, 0xe3, 0xea, 0x5f, 0xbc, 0x90, 0x06, 0x3e, 0xc3, 0x89, 0x08, 0x3d, 0x6e, 0x8d, 0xfb, 0xdc, 0x9a, 0xf8, + 0x0c, 0xb7, 0x56, 0x22, 0x89, 0x35, 0xb0, 0xa4, 0xe6, 0x72, 0x94, 0xb0, 0xa3, 0x92, 0xf1, 0x59, 0x19, 0x25, 0x34, + 0x86, 0x07, 0xc9, 0xc4, 0x4c, 0x46, 0x09, 0xda, 0x27, 0xba, 0x08, 0x83, 0x7f, 0x01, 0x66, 0x3f, 0xcd, 0xe1, 0xaf, + 0x24, 0xd3, 0xe4, 0x10, 0x02, 0x42, 0x1c, 0x8e, 0x67, 0x71, 0x38, 0x26, 0x51, 0x72, 0x04, 0x4f, 0xf0, 0x5f, 0x11, + 0x8e, 0x49, 0xad, 0xef, 0x30, 0x52, 0x5d, 0x6e, 0x13, 0x06, 0x70, 0x65, 0xe3, 0xd9, 0x24, 0xb2, 0xd2, 0x5d, 0xf9, + 0x78, 0x34, 0x7e, 0x46, 0xa6, 0x71, 0x28, 0x07, 0x09, 0xa1, 0xe0, 0xdd, 0x1b, 0x96, 0xc3, 0x44, 0xc3, 0xb3, 0x01, + 0x9b, 0x57, 0x3a, 0x36, 0x4f, 0xc2, 0x09, 0x08, 0xc3, 0x84, 0x1c, 0xeb, 0x3d, 0x48, 0x29, 0xfa, 0x3c, 0xc7, 0x7e, + 0xea, 0x23, 0x08, 0xb3, 0xa3, 0x96, 0x8a, 0xaf, 0x00, 0xe8, 0x12, 0x07, 0x87, 0xda, 0x33, 0x5f, 0xcc, 0xc2, 0xd2, + 0xa3, 0x52, 0xa6, 0xba, 0x7d, 0xd1, 0xa0, 0xfc, 0xa6, 0x41, 0xfb, 0x82, 0x0c, 0x26, 0xb4, 0x3c, 0x9a, 0xf0, 0x27, + 0x10, 0xc0, 0xa3, 0x11, 0xf1, 0x4b, 0xe1, 0xc4, 0x40, 0x78, 0x15, 0x64, 0xa0, 0xd2, 0x5a, 0x35, 0x66, 0x64, 0x2b, + 0xde, 0x83, 0x30, 0x29, 0x7b, 0x37, 0x72, 0x9d, 0xa7, 0x10, 0x15, 0x6c, 0x9d, 0x57, 0x7b, 0x97, 0x60, 0xc9, 0x1e, + 0x57, 0x10, 0x27, 0x6c, 0xbd, 0x02, 0xec, 0xdc, 0x47, 0x9b, 0xb2, 0xde, 0x53, 0xdf, 0xed, 0x61, 0xcb, 0xe1, 0x55, + 0x25, 0xf7, 0x26, 0xe3, 0xf1, 0x78, 0xf4, 0x07, 0x1c, 0x1d, 0x40, 0x68, 0x49, 0x64, 0xf8, 0x64, 0x80, 0xc6, 0x5d, + 0x57, 0xdc, 0x1b, 0x17, 0x8a, 0xb2, 0xd2, 0xc9, 0x84, 0x80, 0xf8, 0xd9, 0xf4, 0x0d, 0xf6, 0x15, 0xd7, 0xf1, 0x4f, + 0x76, 0x3f, 0x31, 0x2b, 0x5a, 0xad, 0xd4, 0xd1, 0xbb, 0x93, 0xd3, 0xd7, 0x1f, 0x5e, 0xff, 0xf6, 0xf2, 0xec, 0xf5, + 0xdb, 0x57, 0xaf, 0xdf, 0xbe, 0xfe, 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xdf, 0x56, 0xc4, 0x8e, 0xbd, 0x77, 0x8f, 0xf1, + 0x6a, 0xf1, 0x85, 0xb3, 0x07, 0xee, 0x16, 0x0b, 0xb0, 0x09, 0x86, 0x5b, 0x10, 0x54, 0x33, 0x1a, 0x95, 0xbe, 0x27, + 0x20, 0xa3, 0x51, 0x21, 0x1b, 0x0f, 0x2b, 0xb6, 0x42, 0x2e, 0xde, 0x31, 0x1c, 0x7c, 0x64, 0x7f, 0x2b, 0xce, 0x84, + 0xdb, 0xd1, 0xd6, 0xac, 0x08, 0xf8, 0x7c, 0xad, 0x45, 0xe5, 0x71, 0x21, 0x6a, 0x6f, 0xdb, 0xe7, 0x90, 0x50, 0x8f, + 0xc8, 0x75, 0xf0, 0xbe, 0x0d, 0xb2, 0xc7, 0x47, 0xde, 0x93, 0xf2, 0x0c, 0xf5, 0x39, 0x1a, 0x3e, 0x6a, 0x3c, 0xa3, + 0x13, 0x73, 0x6d, 0x74, 0xa8, 0x67, 0x05, 0xec, 0x6f, 0x25, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x38, 0xdd, + 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, 0x7e, 0x94, 0x6a, 0x02, 0x69, 0x51, 0xa0, 0x74, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, + 0xc2, 0xfc, 0x0c, 0x1b, 0x04, 0xd0, 0x5e, 0x76, 0x2c, 0x09, 0x34, 0x8b, 0xd7, 0xba, 0xfe, 0x79, 0xf9, 0x32, 0xd1, + 0xce, 0x17, 0xdf, 0x42, 0x88, 0x61, 0xff, 0x8a, 0xd0, 0x98, 0x70, 0x37, 0xc9, 0xee, 0xd2, 0x62, 0xee, 0x55, 0x57, + 0x31, 0x1e, 0x77, 0xf7, 0x5c, 0x29, 0x9a, 0xb7, 0x2e, 0xb0, 0x07, 0x6a, 0x5e, 0xc7, 0x4b, 0x16, 0x02, 0x36, 0xe3, + 0xbe, 0x5d, 0x24, 0xce, 0xef, 0x9d, 0x4e, 0xc8, 0xfe, 0xc1, 0x94, 0x0f, 0x59, 0x49, 0xc5, 0x80, 0x95, 0xf5, 0x0e, + 0x35, 0xe7, 0x6d, 0x42, 0x2e, 0x76, 0x69, 0xb8, 0x18, 0xf2, 0x87, 0x2e, 0x49, 0x1f, 0x78, 0xc3, 0xa1, 0xda, 0x36, + 0x17, 0x43, 0x9a, 0x72, 0xba, 0x4b, 0x65, 0x40, 0x88, 0x74, 0x15, 0x57, 0xa4, 0xd6, 0x47, 0x55, 0xea, 0x24, 0x1d, + 0xd7, 0xd9, 0xe6, 0x33, 0x97, 0x6c, 0x75, 0xbb, 0xf6, 0xaf, 0xd5, 0xed, 0x0b, 0x33, 0x90, 0xbf, 0x3f, 0x11, 0xd5, + 0xc4, 0x40, 0x74, 0x01, 0x15, 0xfc, 0x13, 0xbc, 0x3c, 0x79, 0xa4, 0x15, 0xa0, 0xf7, 0x9d, 0x1d, 0x5d, 0x7b, 0xbc, + 0x31, 0x8b, 0xad, 0x25, 0xce, 0x59, 0xe5, 0x3b, 0xcb, 0xab, 0xb2, 0x15, 0xba, 0x8e, 0x60, 0xbf, 0x84, 0x1d, 0x7d, + 0xf7, 0xb6, 0x01, 0x10, 0xa5, 0xb0, 0x72, 0x67, 0xbf, 0xf0, 0xce, 0x7e, 0x61, 0xcf, 0x7e, 0xbb, 0x09, 0x94, 0x0f, + 0x2b, 0xb4, 0xec, 0x95, 0x14, 0x95, 0x69, 0xf2, 0xb8, 0xa9, 0xcb, 0x42, 0x5a, 0xcc, 0xf7, 0x2d, 0xed, 0x7a, 0x3a, + 0xa6, 0x12, 0xd5, 0x23, 0x3f, 0x60, 0xab, 0xf6, 0x4b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0x79, 0xdf, 0xdd, + 0xee, 0xff, 0xe6, 0x42, 0x07, 0xb7, 0xb5, 0x54, 0x78, 0xea, 0xea, 0xb8, 0xc0, 0xbb, 0x5a, 0xfa, 0xf0, 0x5d, 0xed, + 0x5d, 0xa6, 0x97, 0x5d, 0x05, 0xa8, 0x41, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0xa9, 0xad, 0x42, 0xe3, 0x84, 0x43, 0x68, + 0x0f, 0xef, 0xe0, 0x02, 0x39, 0x2c, 0x21, 0xf4, 0x63, 0x65, 0x04, 0x80, 0x3e, 0x8b, 0x7d, 0xc2, 0xc3, 0x8c, 0x0c, + 0x7c, 0x89, 0x5f, 0x29, 0x7d, 0x71, 0xf1, 0xfe, 0x4e, 0x66, 0x82, 0x5e, 0x25, 0x36, 0xbb, 0x94, 0xed, 0x98, 0x1f, + 0xfe, 0x17, 0x18, 0x0d, 0xc2, 0x6b, 0x4b, 0xb6, 0x2f, 0x3a, 0x66, 0xb9, 0x82, 0xa3, 0xb6, 0x74, 0x65, 0x96, 0xad, + 0xeb, 0x67, 0x35, 0xcc, 0xf4, 0x99, 0x72, 0x02, 0xb2, 0x2f, 0xe4, 0xee, 0xa7, 0xba, 0x62, 0x41, 0x8e, 0x26, 0xe3, + 0x29, 0x11, 0x83, 0x41, 0x2b, 0xf9, 0x10, 0x93, 0x87, 0xc3, 0x1d, 0xe6, 0x52, 0xe8, 0x7e, 0x78, 0x7d, 0x80, 0xfa, + 0x1a, 0x5b, 0x92, 0x6c, 0x2a, 0xf6, 0x17, 0x98, 0xc5, 0x02, 0x71, 0x74, 0xf0, 0x8b, 0xf3, 0x05, 0x80, 0x2c, 0xc3, + 0x32, 0xd3, 0xc2, 0xa2, 0x32, 0x55, 0x3e, 0xb2, 0x05, 0x93, 0x87, 0xe3, 0x99, 0xdf, 0x73, 0xc7, 0xe0, 0x10, 0x12, + 0x4d, 0xac, 0xf1, 0x8b, 0x9f, 0x05, 0xe3, 0x38, 0x94, 0x47, 0xb2, 0xf1, 0x5d, 0x49, 0xa2, 0xb1, 0x31, 0x55, 0xd6, + 0x57, 0x89, 0x6a, 0x98, 0x90, 0xc7, 0x05, 0xd9, 0x2f, 0xe8, 0xd2, 0x1f, 0x4b, 0x4c, 0xdf, 0x8f, 0xf7, 0x27, 0x63, + 0xf2, 0x38, 0x7e, 0x3c, 0x31, 0x70, 0xc3, 0x7e, 0x8e, 0x7c, 0xb8, 0x24, 0xfb, 0xcd, 0x2a, 0xc1, 0x14, 0xd5, 0xf4, + 0xcc, 0xaf, 0x24, 0x19, 0x2c, 0x07, 0xe9, 0xe3, 0x56, 0x5e, 0xac, 0x55, 0x8f, 0xf7, 0xfa, 0x90, 0x4f, 0x89, 0x68, + 0xdc, 0x18, 0xd6, 0xf4, 0x2a, 0xfe, 0x53, 0x16, 0x51, 0x29, 0x01, 0x91, 0x10, 0xd4, 0xdb, 0xd9, 0x45, 0x96, 0xc4, + 0x22, 0x8d, 0xd2, 0x9a, 0xd0, 0xf4, 0x88, 0x4d, 0xc6, 0xb3, 0x94, 0xa5, 0x87, 0x93, 0x67, 0xb3, 0xc9, 0xb3, 0xe8, + 0x60, 0x1c, 0xa5, 0x83, 0x01, 0x24, 0x1f, 0x8c, 0xc1, 0xc5, 0x0e, 0x7e, 0xb3, 0x03, 0x18, 0xba, 0x23, 0x64, 0x09, + 0x0b, 0x68, 0xda, 0x97, 0x35, 0x49, 0x0f, 0xe7, 0x85, 0xea, 0x49, 0x7c, 0x4b, 0xd7, 0x9e, 0x83, 0x8b, 0xdf, 0xc2, + 0x0b, 0xd7, 0xc2, 0x8b, 0xdd, 0x16, 0x0a, 0x4d, 0xb6, 0x0b, 0xf9, 0xff, 0xe3, 0x86, 0x71, 0xdf, 0x5d, 0xc2, 0x2c, + 0xae, 0xeb, 0x6c, 0xb4, 0x2a, 0x64, 0x25, 0xe1, 0x36, 0xa1, 0x44, 0x61, 0xa3, 0x78, 0xb5, 0xca, 0xb5, 0x8b, 0xd8, + 0xbc, 0xa2, 0x00, 0xee, 0x02, 0x71, 0x8a, 0x81, 0x85, 0x36, 0x06, 0x72, 0x9f, 0x78, 0x21, 0x99, 0x55, 0xfb, 0x98, + 0x7b, 0xe4, 0x9f, 0x21, 0x18, 0xa3, 0x8a, 0xa3, 0xf1, 0x4c, 0x61, 0x5d, 0x7c, 0x4e, 0xde, 0xfb, 0x6f, 0x1c, 0x45, + 0xf6, 0x68, 0x06, 0x3d, 0x41, 0xe4, 0x3c, 0xe2, 0xec, 0xc9, 0xe4, 0x65, 0xe0, 0x7e, 0x06, 0x2b, 0xfd, 0x75, 0xb7, + 0x19, 0x6b, 0xdb, 0xa3, 0x7b, 0x61, 0x84, 0xa2, 0x9f, 0xf0, 0x9d, 0xa9, 0x17, 0x70, 0x09, 0xd5, 0xc0, 0xae, 0x2f, + 0x2f, 0x79, 0x09, 0x20, 0x42, 0x99, 0xe8, 0xf7, 0x7b, 0x7f, 0x1a, 0x68, 0xd2, 0x92, 0x17, 0x6f, 0x32, 0x61, 0x9d, + 0x71, 0xa0, 0xa9, 0x40, 0xfd, 0x3f, 0x56, 0xf6, 0x99, 0x8e, 0xc9, 0xcc, 0x7f, 0x1c, 0x4e, 0x48, 0xd4, 0x7c, 0x4d, + 0x3e, 0x73, 0x9a, 0x7e, 0xe6, 0x8a, 0xf6, 0x1f, 0xc8, 0xcc, 0x0d, 0x87, 0x0c, 0xf5, 0x97, 0x8e, 0x79, 0x32, 0x7a, + 0x9d, 0x98, 0x1d, 0x09, 0x56, 0xcd, 0x20, 0x0a, 0x7b, 0x01, 0x0f, 0xea, 0x5a, 0x16, 0x4f, 0x61, 0xf6, 0x41, 0x8d, + 0x28, 0x0e, 0xd9, 0x78, 0x16, 0xca, 0x70, 0x02, 0xf6, 0xbd, 0x93, 0x31, 0xdc, 0x07, 0x64, 0xf8, 0xb1, 0x0a, 0xb1, + 0x73, 0x90, 0xf6, 0xb1, 0x42, 0xc5, 0x04, 0x40, 0x04, 0x42, 0xde, 0x7e, 0x5f, 0xaa, 0x24, 0x7c, 0x5d, 0x62, 0x4a, + 0xa1, 0x3e, 0xf8, 0x4f, 0xa4, 0xea, 0x8e, 0xe9, 0x57, 0xeb, 0xc7, 0x9f, 0x09, 0xc5, 0xa7, 0xbb, 0x94, 0xf8, 0x16, + 0x82, 0x3b, 0x4b, 0xd0, 0x41, 0x54, 0x68, 0xc6, 0xf6, 0x30, 0xbf, 0x2b, 0xee, 0xe7, 0x77, 0xc5, 0xff, 0x3b, 0x7e, + 0x57, 0x3c, 0xc4, 0x18, 0x56, 0x16, 0x1a, 0x7e, 0x16, 0x8c, 0x83, 0xe8, 0x3f, 0xe7, 0x13, 0xef, 0xe5, 0xa9, 0xaf, + 0x32, 0x31, 0xbd, 0x87, 0x69, 0xf6, 0x09, 0x0a, 0xc2, 0x2a, 0xee, 0xd2, 0x93, 0x75, 0x65, 0x6f, 0xad, 0x64, 0x88, + 0x79, 0x1e, 0x60, 0x8d, 0xc2, 0xca, 0x03, 0xba, 0x47, 0xd5, 0x06, 0x71, 0x22, 0x78, 0x18, 0x33, 0x2b, 0x7d, 0xdf, + 0x6e, 0x8d, 0x0a, 0xf3, 0x41, 0x2e, 0x0a, 0xb2, 0x9b, 0x8f, 0x67, 0xe3, 0x28, 0xc4, 0x06, 0xfc, 0xc7, 0x8c, 0x55, + 0x43, 0x36, 0xdf, 0xc9, 0x48, 0xed, 0x98, 0x3c, 0x4d, 0x76, 0x49, 0xef, 0x80, 0x77, 0xc8, 0xcf, 0xeb, 0x8f, 0x61, + 0x21, 0x0d, 0xbf, 0x25, 0x2f, 0xe3, 0x22, 0xab, 0x96, 0x57, 0x59, 0x82, 0x4c, 0x17, 0xbc, 0xf8, 0x62, 0xa6, 0xcb, + 0xfb, 0x58, 0x1f, 0x30, 0x9e, 0x52, 0xbc, 0x6e, 0x88, 0xd2, 0xd7, 0x2d, 0xcf, 0x0a, 0x75, 0x79, 0x52, 0x31, 0xdb, + 0xb3, 0x12, 0x9c, 0x4e, 0xc1, 0x04, 0x5f, 0xff, 0x74, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x0b, 0xb9, 0x32, + 0x58, 0x4e, 0x16, 0xba, 0x13, 0x30, 0x43, 0xa5, 0xc0, 0x0b, 0x14, 0xfc, 0x45, 0x03, 0x23, 0xfa, 0xca, 0xfd, 0x26, + 0x03, 0x83, 0x74, 0x69, 0x4e, 0x84, 0xb1, 0xe3, 0x76, 0x8a, 0xb4, 0x15, 0xe5, 0x8c, 0xb3, 0xf7, 0xea, 0x4a, 0x01, + 0x06, 0x78, 0x9b, 0x9b, 0xe8, 0x3c, 0x41, 0xaf, 0x05, 0xa5, 0xf3, 0x06, 0xee, 0x66, 0x19, 0x19, 0xe1, 0xe2, 0xe3, + 0xca, 0x63, 0xc1, 0x3d, 0xfb, 0x85, 0x58, 0x1a, 0xcd, 0x34, 0x18, 0xb3, 0x79, 0xc1, 0x02, 0x85, 0x0a, 0x14, 0x58, + 0xce, 0xb4, 0xa5, 0x69, 0x35, 0xe4, 0xfb, 0x07, 0x68, 0x6d, 0x5a, 0x0d, 0xf8, 0xfe, 0x41, 0x1d, 0x65, 0x87, 0x90, + 0xe5, 0xc8, 0xcf, 0xa0, 0x5e, 0xd7, 0x91, 0x49, 0x31, 0xd9, 0xfd, 0xfa, 0x52, 0x7f, 0x54, 0x37, 0xe0, 0xfa, 0x01, + 0x08, 0x60, 0x03, 0x70, 0x08, 0x54, 0x83, 0xa5, 0x11, 0xc1, 0xa2, 0x4c, 0xa1, 0x7d, 0x0d, 0xbd, 0x37, 0x1a, 0xfe, + 0x0b, 0xdc, 0x45, 0xe4, 0xca, 0xff, 0x04, 0x81, 0xbf, 0xa2, 0x4c, 0x2b, 0x53, 0xfc, 0x4f, 0xb4, 0x7a, 0x85, 0x72, + 0xd6, 0xb4, 0xe6, 0x83, 0x68, 0x4d, 0x84, 0x6a, 0xc6, 0x10, 0xfc, 0x5b, 0x59, 0xa6, 0x2d, 0x55, 0x95, 0xfa, 0xd0, + 0x78, 0xad, 0x15, 0xce, 0xf2, 0x71, 0xe4, 0xbd, 0xc6, 0xd0, 0xb1, 0x89, 0xb3, 0x94, 0x53, 0xa9, 0xb3, 0x4f, 0xfb, + 0x32, 0x72, 0x80, 0xd3, 0x09, 0x1b, 0x4f, 0x93, 0x43, 0x39, 0x4d, 0x1c, 0x64, 0x7e, 0xce, 0x30, 0xb2, 0xaa, 0x01, + 0x61, 0x51, 0x36, 0x94, 0xb6, 0x00, 0x93, 0x9c, 0x10, 0x32, 0xc5, 0x50, 0x14, 0xf9, 0x48, 0xf7, 0xc3, 0x7a, 0xb3, + 0xba, 0x2f, 0xde, 0x69, 0x80, 0xd3, 0x30, 0x81, 0x40, 0xe0, 0x45, 0x7c, 0x93, 0x89, 0x4b, 0xf0, 0x18, 0x1e, 0xc0, + 0x97, 0xe0, 0x26, 0x97, 0xb2, 0xdf, 0xab, 0x30, 0xc7, 0xb5, 0x05, 0x0c, 0x1a, 0xac, 0x1e, 0x44, 0x87, 0x4b, 0x69, + 0xb3, 0xab, 0x00, 0xb1, 0x31, 0x85, 0x58, 0x16, 0x6c, 0x6d, 0xd9, 0xb3, 0xef, 0x55, 0xd3, 0xd0, 0x3a, 0xe1, 0x58, + 0x5c, 0xe6, 0x10, 0x45, 0x65, 0x10, 0x83, 0x3b, 0x92, 0xc7, 0xe7, 0x3d, 0x12, 0xe1, 0x05, 0x01, 0xb7, 0xb2, 0x58, + 0x86, 0x2b, 0xba, 0x1c, 0xdd, 0xd2, 0xf5, 0xe8, 0x86, 0x8e, 0xe9, 0xe4, 0xef, 0x63, 0xb0, 0xc8, 0xd6, 0xa9, 0x77, + 0x74, 0x3d, 0x5a, 0xd2, 0x6f, 0xc7, 0xf4, 0xe0, 0x6f, 0x60, 0xc2, 0x87, 0x87, 0x09, 0xbd, 0x00, 0xc7, 0x2e, 0x52, + 0xa3, 0xa7, 0xa6, 0x6f, 0x70, 0x58, 0x8d, 0xf2, 0x21, 0x1f, 0xe5, 0x94, 0x8f, 0x8a, 0x61, 0x35, 0x02, 0x4f, 0xc7, + 0x6a, 0xc8, 0x47, 0x15, 0xe5, 0xa3, 0xf3, 0x61, 0x35, 0x3a, 0x27, 0xcd, 0xa6, 0xbf, 0xae, 0xf8, 0x55, 0xc9, 0x52, + 0xd8, 0x16, 0xb0, 0x7c, 0x3d, 0xaf, 0xa8, 0xd4, 0x5f, 0xd5, 0xe6, 0x64, 0xb6, 0x9c, 0xbd, 0xbd, 0xee, 0x72, 0x62, + 0xf1, 0xb8, 0x6d, 0x3a, 0x5c, 0x7d, 0x39, 0x51, 0x27, 0xbd, 0x42, 0x7e, 0x18, 0x4f, 0x85, 0x3a, 0x87, 0xc0, 0x4c, + 0x62, 0x16, 0xc6, 0x0c, 0x9b, 0xa9, 0xd3, 0x40, 0x81, 0x93, 0x8d, 0x3c, 0x17, 0xc5, 0x6c, 0x94, 0x53, 0x78, 0x1f, + 0x13, 0x12, 0x09, 0x38, 0xab, 0x8e, 0xaa, 0x51, 0x01, 0x31, 0x47, 0x58, 0x88, 0x8f, 0xd0, 0x2f, 0xf5, 0x91, 0x87, + 0x04, 0x9e, 0x61, 0x5f, 0x8b, 0x41, 0x0c, 0x47, 0xbc, 0xad, 0xac, 0x9a, 0x85, 0x09, 0x54, 0x56, 0x0d, 0x4b, 0x53, + 0x59, 0x41, 0xb3, 0x51, 0xe5, 0x57, 0x56, 0xe1, 0x18, 0x25, 0x84, 0x44, 0xa5, 0xae, 0x0c, 0xd4, 0x27, 0x09, 0x0b, + 0x4b, 0x5d, 0xd9, 0xb9, 0xfa, 0xe8, 0xdc, 0xaf, 0xec, 0x1c, 0x5c, 0x48, 0x07, 0x89, 0x7f, 0x95, 0xca, 0xd3, 0xf6, + 0x75, 0xb0, 0xb1, 0xaa, 0xe8, 0x86, 0xdf, 0x56, 0x45, 0x1c, 0x95, 0xd4, 0xc5, 0x80, 0xc6, 0x85, 0x11, 0x49, 0xaa, + 0xd7, 0x28, 0xf8, 0x43, 0x82, 0xa8, 0x34, 0x06, 0xaf, 0xce, 0xa4, 0x6b, 0xa5, 0x56, 0x54, 0x0c, 0xca, 0x41, 0x01, + 0xf7, 0xa7, 0xbc, 0xb5, 0x90, 0xbe, 0x87, 0x88, 0xca, 0x50, 0xde, 0xe0, 0x1f, 0x18, 0x3c, 0x99, 0xad, 0xd2, 0x30, + 0x19, 0xdd, 0xd1, 0x78, 0xb4, 0x44, 0x38, 0x18, 0xb6, 0x4e, 0x15, 0xde, 0xfa, 0x05, 0xa4, 0xdf, 0xd2, 0x78, 0x74, + 0x43, 0x53, 0x6b, 0x73, 0x6a, 0xa0, 0xae, 0x7a, 0x63, 0x7a, 0x1b, 0xc1, 0xeb, 0xbb, 0x68, 0x49, 0x61, 0x2b, 0x1d, + 0xe7, 0xd9, 0xa5, 0x88, 0x52, 0x8a, 0x08, 0x84, 0x6b, 0x44, 0x0e, 0x5c, 0x6a, 0xb4, 0xc1, 0xf5, 0x00, 0xca, 0xd0, + 0x70, 0x81, 0xcb, 0x41, 0x3c, 0x5a, 0x7a, 0x64, 0x6a, 0xa9, 0x2f, 0xb2, 0x08, 0x1f, 0xed, 0x6c, 0xb4, 0x14, 0xcf, + 0x88, 0x85, 0x71, 0x05, 0x43, 0xa8, 0x0b, 0x2b, 0x4d, 0x41, 0xd2, 0x05, 0x8e, 0xec, 0x85, 0x45, 0x15, 0x6e, 0xc0, + 0xb4, 0xe8, 0x0e, 0xcc, 0xa3, 0x40, 0xe1, 0xe0, 0x12, 0xa4, 0x9f, 0x50, 0xb6, 0x73, 0x94, 0x26, 0x87, 0x37, 0x41, + 0xe9, 0xce, 0x04, 0x21, 0xed, 0xea, 0x26, 0x5b, 0xd2, 0x37, 0xd8, 0xde, 0xa1, 0x53, 0x51, 0x41, 0xf5, 0xb9, 0x05, + 0x93, 0x25, 0x1b, 0x84, 0x2d, 0x61, 0x7a, 0xa6, 0xd7, 0x80, 0x3d, 0xbd, 0x7f, 0xb0, 0x33, 0xdf, 0xc5, 0xec, 0xd3, + 0x7e, 0x19, 0x8d, 0x95, 0x05, 0x6f, 0x6e, 0x89, 0xdd, 0x92, 0x8d, 0xa7, 0xcb, 0xc3, 0x72, 0xba, 0x44, 0x62, 0x67, + 0xe8, 0x16, 0xe3, 0xf3, 0xe5, 0x82, 0x26, 0x78, 0xb6, 0xb1, 0x6a, 0xbe, 0x34, 0x68, 0x29, 0x29, 0xc3, 0xf5, 0xb6, + 0x44, 0xff, 0x7f, 0x75, 0xf1, 0x4b, 0x01, 0x5e, 0x82, 0xb1, 0x00, 0x10, 0xee, 0xc1, 0xb4, 0x20, 0xb5, 0x51, 0x36, + 0x96, 0x69, 0x98, 0xe2, 0x22, 0x30, 0x29, 0xfd, 0x7e, 0x98, 0xb3, 0x94, 0x78, 0xd0, 0xa1, 0xee, 0xd4, 0x4e, 0x7d, + 0x21, 0x08, 0xf0, 0x48, 0xea, 0x1c, 0x9b, 0xfc, 0x7d, 0x3c, 0x0b, 0xd4, 0x40, 0x04, 0x51, 0x76, 0x88, 0x8f, 0x18, + 0xb8, 0x28, 0xd2, 0x71, 0x3b, 0x5d, 0x11, 0x17, 0xbb, 0xc7, 0x2c, 0xc4, 0x49, 0xc2, 0x5c, 0xb3, 0x6c, 0xc8, 0xaa, + 0x08, 0x13, 0x74, 0x61, 0x60, 0x96, 0x37, 0x64, 0xd5, 0xfe, 0x01, 0x44, 0x6a, 0xb5, 0x65, 0xac, 0xba, 0xca, 0xf8, + 0x16, 0x80, 0xac, 0x19, 0x63, 0x07, 0x7f, 0x1b, 0xcf, 0xd4, 0x37, 0x51, 0xc8, 0x8f, 0x0e, 0xfe, 0x06, 0xc9, 0x87, + 0xdf, 0x22, 0x33, 0x07, 0xc9, 0x8d, 0x82, 0x2e, 0x9b, 0xb3, 0xae, 0xa1, 0x34, 0x71, 0xed, 0x95, 0x7a, 0xed, 0x49, + 0xb3, 0xf6, 0x0a, 0x74, 0xa7, 0x36, 0xbc, 0x87, 0xb2, 0x9d, 0x05, 0x13, 0x74, 0x34, 0xbb, 0x03, 0x1d, 0xbc, 0x53, + 0x04, 0xbd, 0x4c, 0x42, 0xe3, 0x11, 0xaa, 0x8c, 0x7a, 0x61, 0x47, 0x76, 0xb3, 0x2e, 0x99, 0x67, 0xc0, 0x1c, 0xdb, + 0x73, 0x48, 0x0c, 0x73, 0x75, 0x50, 0xa7, 0xac, 0x1c, 0xe6, 0x78, 0x00, 0xaf, 0x99, 0x1c, 0x8a, 0x41, 0xae, 0x51, + 0xbe, 0x2f, 0x58, 0x31, 0x2c, 0x07, 0xb9, 0xe6, 0x66, 0xa6, 0xcd, 0xd8, 0xb4, 0x89, 0x0e, 0xcf, 0xbc, 0x62, 0x47, + 0xab, 0x1e, 0xf0, 0xb1, 0xe0, 0xc9, 0xec, 0x7b, 0x3e, 0xbe, 0x01, 0x4e, 0x66, 0x73, 0x1b, 0x2d, 0xe9, 0x5d, 0x94, + 0xd2, 0x9b, 0x68, 0x4d, 0x97, 0xd1, 0x85, 0x31, 0x31, 0x4e, 0x6a, 0x38, 0x07, 0xa0, 0x55, 0x00, 0x89, 0xa7, 0x7e, + 0xbd, 0xe7, 0x49, 0x15, 0x2e, 0x69, 0x0a, 0x6e, 0xc3, 0xbe, 0x7d, 0xe6, 0x95, 0x2f, 0x91, 0xda, 0x20, 0xc6, 0x9a, + 0x35, 0x54, 0xdc, 0x78, 0xeb, 0x3e, 0x12, 0x35, 0xec, 0x5c, 0x17, 0x9b, 0xa8, 0x1a, 0x4e, 0xa6, 0x25, 0x20, 0xb6, + 0x96, 0xc3, 0xa1, 0x3b, 0x42, 0x76, 0x8f, 0x1f, 0x1d, 0xe8, 0xb9, 0x27, 0x2d, 0xb6, 0x6d, 0xcb, 0x1f, 0x18, 0xc2, + 0x94, 0x7e, 0xfe, 0xc8, 0x07, 0xc4, 0x8a, 0x4b, 0x38, 0x1b, 0x81, 0x3a, 0x5a, 0xa1, 0xd3, 0xef, 0x55, 0x58, 0xe8, + 0x03, 0x7c, 0x73, 0x1b, 0x25, 0xf4, 0x2e, 0xca, 0x3d, 0xb2, 0xb6, 0xac, 0x99, 0x9c, 0x9e, 0x65, 0x21, 0x6f, 0x1f, + 0xe8, 0xe5, 0x02, 0x40, 0xb4, 0x06, 0xb1, 0x2f, 0x75, 0x3d, 0x00, 0xa7, 0x21, 0x34, 0x09, 0x8d, 0xe0, 0xaa, 0x82, + 0x30, 0x02, 0xae, 0x24, 0xfc, 0x0d, 0x26, 0x2a, 0xf0, 0x05, 0xb8, 0xc8, 0xa4, 0x69, 0xce, 0x83, 0xda, 0x1f, 0xc9, + 0xd3, 0xa2, 0xed, 0xed, 0x0a, 0xa3, 0x09, 0xc6, 0x9e, 0x68, 0x9f, 0x47, 0xca, 0x51, 0x5c, 0x24, 0x61, 0x36, 0xba, + 0x55, 0xe7, 0x39, 0xcd, 0x46, 0x77, 0xfa, 0x57, 0x45, 0xc7, 0xf4, 0x3b, 0x1d, 0xd0, 0x46, 0x49, 0xdf, 0x3a, 0xce, + 0x06, 0xb4, 0x5e, 0x2c, 0x8d, 0xff, 0xb5, 0x1c, 0xdd, 0x52, 0x39, 0xba, 0xf3, 0x2d, 0xa9, 0x26, 0xd3, 0xe2, 0x50, + 0xa0, 0x21, 0x55, 0xe7, 0xf7, 0x05, 0xf0, 0x73, 0xa5, 0xf1, 0x9d, 0x36, 0xdf, 0x7b, 0xed, 0x3f, 0xef, 0xe4, 0x09, + 0x14, 0x4b, 0x54, 0xb0, 0x6a, 0x04, 0x76, 0xec, 0xeb, 0x3c, 0x2e, 0xcc, 0x28, 0xc5, 0xd4, 0x9a, 0xf4, 0x63, 0xe0, + 0x8a, 0x69, 0xaf, 0x00, 0x57, 0xcb, 0xed, 0x56, 0xc5, 0xd0, 0x84, 0x3d, 0x3b, 0x86, 0xa8, 0xe7, 0xc6, 0x31, 0x4a, + 0x36, 0xdc, 0x03, 0x62, 0x2d, 0xf3, 0x56, 0x2e, 0x01, 0x09, 0xbc, 0xf5, 0x30, 0x29, 0x00, 0x63, 0xb0, 0x5c, 0x12, + 0x9d, 0xc7, 0x43, 0x9f, 0x50, 0x2f, 0x34, 0xea, 0x84, 0x6c, 0x6c, 0x09, 0x1c, 0x7f, 0x58, 0x1f, 0x02, 0xc1, 0xab, + 0x3c, 0xd7, 0x5f, 0x69, 0x5d, 0x7f, 0xa9, 0xf4, 0xdc, 0xb1, 0x5c, 0xd7, 0xcf, 0xda, 0xd4, 0xe8, 0x15, 0x58, 0xf8, + 0x6e, 0x94, 0x79, 0x24, 0xb7, 0x08, 0xa9, 0x0a, 0xac, 0xd4, 0x2d, 0x24, 0x98, 0x7f, 0x25, 0x67, 0xab, 0x32, 0x5f, + 0x3d, 0xf2, 0xa0, 0x9c, 0x4d, 0x4f, 0x7f, 0x43, 0x82, 0x76, 0xd7, 0x91, 0xe6, 0xf1, 0x16, 0x1d, 0x3e, 0xbb, 0xd6, + 0x12, 0x73, 0x27, 0x51, 0xf1, 0x7c, 0x0a, 0xd8, 0xea, 0x45, 0x76, 0xa5, 0x7c, 0xac, 0x76, 0x71, 0xfc, 0xcc, 0xf9, + 0x13, 0x57, 0xe1, 0x5a, 0x34, 0x94, 0x20, 0xe0, 0xcd, 0x61, 0xec, 0x0a, 0x55, 0x40, 0x43, 0x73, 0x03, 0xc7, 0xb9, + 0x1a, 0x56, 0x9a, 0x80, 0x69, 0x29, 0x8f, 0x0e, 0x70, 0x68, 0xf2, 0xa8, 0xdd, 0x34, 0xac, 0x0c, 0x5d, 0x6b, 0xf4, + 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, 0xdf, 0x3f, 0x18, 0x54, 0xf8, 0x93, 0x34, 0x47, 0xa3, 0x9d, 0x1b, 0xee, 0x34, + 0x02, 0x33, 0x57, 0x72, 0x45, 0x76, 0x47, 0xc9, 0xcb, 0xef, 0xe9, 0x85, 0x05, 0xf4, 0xe7, 0x3f, 0x17, 0x13, 0x4e, + 0x5a, 0x62, 0x42, 0xb4, 0x74, 0xd0, 0xa2, 0x83, 0x1d, 0xe5, 0x95, 0x7d, 0x89, 0x97, 0xce, 0xf1, 0xbf, 0xaf, 0xc7, + 0xda, 0x55, 0x20, 0xb4, 0x3a, 0xb9, 0xdf, 0x9e, 0x2c, 0x10, 0x35, 0xa0, 0x9a, 0x5d, 0x95, 0xa3, 0x4c, 0x3b, 0x2b, + 0xb2, 0x69, 0xc8, 0x5c, 0x77, 0xb3, 0x34, 0x6c, 0x26, 0x3b, 0x16, 0x96, 0x19, 0x06, 0x6b, 0xa7, 0x8a, 0x3e, 0x07, + 0x2d, 0x3f, 0x82, 0x17, 0x4d, 0xe5, 0x99, 0xcf, 0x66, 0x19, 0xf1, 0x02, 0x9d, 0x73, 0x2a, 0x16, 0x4d, 0xe9, 0x58, + 0xb9, 0xdd, 0x96, 0x68, 0x2c, 0x51, 0x46, 0x41, 0x50, 0xdb, 0x20, 0xec, 0xba, 0x74, 0x4f, 0xfa, 0xb4, 0x8b, 0x4f, + 0x2b, 0xd0, 0xf7, 0xf8, 0x3e, 0x03, 0x89, 0xa9, 0x27, 0x79, 0xa8, 0x1a, 0xcd, 0xd1, 0xc9, 0xb3, 0x38, 0xd5, 0xf8, + 0xfc, 0x4a, 0x76, 0xd6, 0xbc, 0x5b, 0x8d, 0x29, 0xfe, 0x23, 0x75, 0xfb, 0xce, 0x65, 0x68, 0xa2, 0xbf, 0x96, 0x07, + 0x2d, 0x85, 0x05, 0xc7, 0x6d, 0xe3, 0xaf, 0xdf, 0x66, 0x0e, 0x31, 0x2c, 0x5d, 0x0e, 0x6f, 0x42, 0x87, 0xee, 0xae, + 0xb2, 0x33, 0xd7, 0x07, 0xd4, 0xa9, 0x8b, 0x75, 0x1b, 0x50, 0xb2, 0xe4, 0xdd, 0x3a, 0x3d, 0xb1, 0xd2, 0x77, 0xfb, + 0xe1, 0xce, 0x3c, 0x6a, 0x76, 0x77, 0xbb, 0x9d, 0x90, 0xb6, 0x7d, 0x30, 0xde, 0x97, 0xb0, 0x10, 0xe7, 0x1d, 0xb6, + 0xf7, 0x7d, 0x58, 0x3d, 0xe6, 0x83, 0x5f, 0x70, 0x9c, 0x61, 0xf4, 0x33, 0x65, 0xe8, 0xf3, 0xaa, 0x90, 0x57, 0xaa, + 0x53, 0xbe, 0xd0, 0xad, 0x65, 0xea, 0xfd, 0x36, 0x7e, 0xdb, 0x0a, 0x10, 0xe3, 0x75, 0xc5, 0x4a, 0xf1, 0x86, 0x56, + 0x18, 0xd7, 0xc0, 0x6d, 0x72, 0xa8, 0xa5, 0x5a, 0x20, 0xea, 0xf2, 0x93, 0xc7, 0x3c, 0x32, 0xea, 0x4c, 0xf8, 0xee, + 0x31, 0xf7, 0xa5, 0x6b, 0xbb, 0x4d, 0xfc, 0x5c, 0xd3, 0xf6, 0x77, 0x07, 0xba, 0xa3, 0x75, 0x0f, 0x37, 0xcf, 0xe6, + 0xe7, 0x91, 0xf9, 0x62, 0x80, 0xcd, 0xda, 0x65, 0x5c, 0x76, 0x0c, 0xf7, 0xbd, 0xe9, 0xc1, 0x58, 0x40, 0x20, 0x31, + 0x43, 0x2f, 0x03, 0x17, 0xb8, 0xc0, 0x5d, 0x61, 0xc0, 0x10, 0xd7, 0xb4, 0xe4, 0x4c, 0x5b, 0xd9, 0xfa, 0xc8, 0xdb, + 0xa8, 0x10, 0xac, 0xeb, 0x8e, 0x9b, 0x24, 0x87, 0xe0, 0x84, 0x2d, 0xf7, 0xbe, 0xf6, 0xda, 0x19, 0xfe, 0x63, 0x20, + 0x9c, 0x5b, 0xa2, 0x67, 0xd4, 0xf6, 0x58, 0xab, 0x7b, 0x0d, 0xaf, 0x72, 0x17, 0x79, 0xd6, 0x6f, 0xe6, 0xa5, 0x61, + 0x5f, 0xf0, 0x5a, 0x0a, 0x0e, 0x8d, 0xed, 0x56, 0xb8, 0xc5, 0xe2, 0x1d, 0xad, 0x56, 0xd6, 0xda, 0x6a, 0xaf, 0x95, + 0x8a, 0xde, 0xbf, 0xe6, 0x38, 0x71, 0x96, 0xc2, 0xf6, 0xc3, 0x87, 0x0b, 0x76, 0x4d, 0x00, 0x83, 0x16, 0x93, 0x05, + 0x4a, 0x50, 0xc9, 0x5a, 0xd5, 0x6e, 0xa7, 0xc4, 0x2f, 0xf7, 0x8b, 0x2e, 0xb3, 0x9d, 0xc7, 0xaf, 0x9b, 0xb4, 0xcf, + 0x7c, 0x8e, 0x7e, 0x98, 0xdf, 0x59, 0x27, 0x25, 0x67, 0x18, 0xd7, 0xf2, 0xff, 0xab, 0xe8, 0x65, 0x91, 0xa5, 0xd1, + 0xc6, 0xf0, 0x60, 0x36, 0xd4, 0xa6, 0x0f, 0x8d, 0x51, 0xb9, 0x65, 0xa3, 0x88, 0x68, 0x75, 0x0b, 0x82, 0x19, 0xc5, + 0x7d, 0x89, 0x36, 0xaf, 0x54, 0x59, 0x78, 0x87, 0xcf, 0x6c, 0xf4, 0x86, 0xed, 0x09, 0xa1, 0x7c, 0xf7, 0xb4, 0x30, + 0xab, 0x96, 0x8a, 0x06, 0xdb, 0x25, 0xbc, 0x8b, 0x51, 0xa5, 0x9f, 0x30, 0xd9, 0xb2, 0x60, 0xaa, 0xff, 0xdf, 0x17, + 0x59, 0xda, 0xa6, 0xe8, 0xc0, 0x74, 0x36, 0x7d, 0x3a, 0xe9, 0x06, 0xd7, 0x19, 0xb0, 0x88, 0x60, 0x4b, 0x85, 0xe3, + 0x51, 0x6a, 0x37, 0x48, 0x98, 0x08, 0x6e, 0xa2, 0x5e, 0x76, 0xb4, 0x4c, 0xc9, 0xaa, 0x80, 0xe7, 0x57, 0xae, 0x32, + 0x1d, 0x47, 0x43, 0xbf, 0x7f, 0x95, 0x9a, 0xd0, 0xaf, 0xd4, 0x4b, 0x55, 0x9c, 0x87, 0x51, 0x75, 0xa8, 0x30, 0x46, + 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x84, 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x82, 0x81, 0x5c, 0x6a, 0x83, 0x7a, + 0x4d, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, 0x42, 0x2f, 0x58, 0xe9, 0xdf, 0x85, 0xd6, 0x20, 0x50, 0x94, 0xcd, 0x94, + 0xe9, 0xb9, 0x6e, 0xe7, 0x05, 0x4d, 0x68, 0x41, 0x57, 0xa4, 0x06, 0x7d, 0xaf, 0x93, 0xb3, 0xa3, 0x93, 0x9d, 0x99, + 0xf5, 0x98, 0x15, 0xc3, 0xc9, 0x34, 0x86, 0x6b, 0x5a, 0xec, 0xae, 0x69, 0xcb, 0xe6, 0x8d, 0xab, 0xb1, 0x71, 0x1a, + 0xb4, 0x0b, 0xa4, 0x6d, 0x9a, 0xdb, 0x4f, 0x3d, 0x6e, 0x7f, 0x5d, 0xb3, 0xe5, 0xb4, 0xb7, 0xde, 0x6e, 0x7b, 0x29, + 0xd8, 0x88, 0x7a, 0x7c, 0xfc, 0x5a, 0x49, 0xd7, 0x2d, 0x97, 0x9f, 0xc2, 0xb3, 0xc7, 0xd7, 0x2f, 0x7d, 0x70, 0x39, + 0x5a, 0xb5, 0xb9, 0xfb, 0xe5, 0x2e, 0xb2, 0xdc, 0x17, 0x0d, 0x2d, 0xd7, 0x33, 0xd4, 0x24, 0xcf, 0x46, 0x7b, 0x87, + 0x5a, 0xb0, 0x9c, 0x75, 0x13, 0x9e, 0x18, 0xec, 0xd8, 0xab, 0xc6, 0xe6, 0xa8, 0xcc, 0x25, 0xab, 0x41, 0x02, 0x7d, + 0x92, 0x67, 0x9a, 0xfe, 0x41, 0x86, 0xf9, 0xe8, 0x96, 0xe6, 0x80, 0x2b, 0x56, 0xd9, 0x4b, 0x06, 0xa9, 0xab, 0xf6, + 0x12, 0x57, 0xbe, 0xc2, 0x21, 0xd9, 0xe0, 0x93, 0x61, 0xaa, 0x3e, 0xbb, 0xe4, 0xc1, 0xff, 0xdb, 0xaa, 0x55, 0x7a, + 0x6e, 0x92, 0x1b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, 0x4c, 0x0c, 0x12, 0xf0, 0xd4, 0x2e, 0x86, 0x6a, 0x54, 0x15, 0xb1, + 0x28, 0x73, 0x13, 0x73, 0xec, 0xde, 0xae, 0xa1, 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xe6, 0x0e, 0x6c, 0x05, 0x3a, + 0x3a, 0xd1, 0x5c, 0x86, 0x99, 0xb9, 0x0c, 0xd3, 0xae, 0xad, 0x02, 0xc3, 0xab, 0xb6, 0x4a, 0xa2, 0x5c, 0x8d, 0x7a, + 0xdc, 0xcc, 0x52, 0xb3, 0x17, 0x79, 0xf7, 0x9a, 0xf4, 0x24, 0xfe, 0x74, 0xe9, 0xc9, 0xeb, 0x61, 0x40, 0xe4, 0x97, + 0x2c, 0x0d, 0xd7, 0x28, 0x08, 0x4e, 0xad, 0x76, 0x20, 0xcd, 0x47, 0x80, 0xcc, 0x8f, 0xd3, 0xf0, 0x9d, 0x16, 0xe7, + 0x90, 0x8d, 0xd2, 0x38, 0xb1, 0xa5, 0x51, 0x0f, 0xc1, 0x9d, 0xf7, 0x8a, 0xc7, 0x10, 0xf8, 0xf0, 0x03, 0x6e, 0x06, + 0x15, 0xdd, 0x96, 0x98, 0x28, 0x6d, 0x1e, 0x75, 0xcb, 0x47, 0x0d, 0xa1, 0x92, 0x95, 0xe1, 0xc5, 0xd0, 0xde, 0x1d, + 0x81, 0x51, 0xe5, 0x04, 0x32, 0xc3, 0x62, 0xff, 0x60, 0x98, 0x2a, 0x41, 0xd1, 0x50, 0x0e, 0x97, 0x28, 0x07, 0xc4, + 0x24, 0x10, 0x18, 0x15, 0x83, 0x54, 0x57, 0xa6, 0x5e, 0x0c, 0x52, 0x7d, 0xab, 0x22, 0xf5, 0x59, 0x16, 0x56, 0x54, + 0xb7, 0x88, 0x8e, 0xe9, 0x50, 0xd2, 0xa5, 0xd9, 0xa9, 0xb9, 0x96, 0x5e, 0xa8, 0xe5, 0xf8, 0x5c, 0xa7, 0xc1, 0x28, + 0x9e, 0xba, 0x14, 0xfd, 0x56, 0xed, 0x67, 0xff, 0x2d, 0xa6, 0xd4, 0x88, 0x4d, 0xed, 0x2d, 0x62, 0x58, 0xb5, 0x1f, + 0xb2, 0x2a, 0x07, 0xed, 0x2e, 0x28, 0x1b, 0x2b, 0xe3, 0x3c, 0xdf, 0x08, 0x66, 0x0e, 0xda, 0xc6, 0xaa, 0xe9, 0x43, + 0x6f, 0xc4, 0xa8, 0xbd, 0x31, 0xd5, 0xb8, 0x27, 0xf0, 0xd3, 0x06, 0x4d, 0xf7, 0x22, 0xcf, 0x51, 0x8f, 0xbc, 0xfb, + 0x9f, 0x39, 0xb2, 0x33, 0xf9, 0x2c, 0x96, 0x49, 0xdd, 0x3e, 0x26, 0xc1, 0x42, 0xd5, 0x31, 0xba, 0x70, 0x23, 0x53, + 0xda, 0xcf, 0x9d, 0xe9, 0x47, 0x3c, 0x93, 0x87, 0xed, 0xd0, 0xa8, 0x2f, 0x0d, 0x6b, 0x49, 0x11, 0xf5, 0x05, 0xbd, + 0x35, 0xd5, 0xd1, 0x01, 0xf5, 0x3a, 0x02, 0xab, 0x2b, 0xda, 0xa0, 0x06, 0x60, 0x32, 0xae, 0x6d, 0x6d, 0x3e, 0x07, + 0x53, 0x5b, 0x55, 0xc1, 0x33, 0xba, 0x2b, 0x94, 0xee, 0x4d, 0xea, 0xba, 0x35, 0xc4, 0x16, 0x30, 0x20, 0x70, 0xa3, + 0xa7, 0xa6, 0x3f, 0x68, 0xa2, 0x02, 0xd0, 0xa0, 0x71, 0x3b, 0xd3, 0x39, 0x12, 0xfd, 0x4e, 0x6d, 0xda, 0x66, 0xaa, + 0x57, 0x95, 0x0f, 0xa0, 0xe2, 0xcf, 0xd2, 0xd9, 0x85, 0x19, 0xb1, 0x00, 0xc6, 0x3d, 0x70, 0xa6, 0x7a, 0xc7, 0x19, + 0x58, 0x4f, 0xe4, 0x79, 0x56, 0xf2, 0x44, 0x0a, 0x98, 0x11, 0x79, 0x75, 0x25, 0x05, 0x0c, 0x83, 0x1a, 0x00, 0xb4, + 0x68, 0x2e, 0xa3, 0x09, 0x7f, 0x52, 0xd3, 0xfb, 0xf2, 0xf0, 0x27, 0x3a, 0xd7, 0x37, 0xe3, 0x1a, 0x0c, 0x95, 0xd7, + 0x15, 0xdf, 0xc9, 0xf4, 0x0d, 0x7f, 0xea, 0x65, 0x5a, 0xca, 0x75, 0xb1, 0x93, 0xe5, 0xc9, 0x37, 0xfc, 0x99, 0xce, + 0x73, 0xf0, 0xb4, 0xa6, 0x69, 0x7c, 0xb7, 0x93, 0xe5, 0xef, 0xdf, 0x3c, 0xb5, 0x79, 0x9e, 0x8c, 0x6b, 0x7a, 0xc3, + 0xf9, 0x47, 0x97, 0x69, 0xa2, 0xab, 0x1a, 0x3f, 0xfd, 0xbb, 0xcd, 0xf5, 0xb4, 0xa6, 0x57, 0x52, 0x54, 0xcb, 0x9d, + 0xa2, 0x0e, 0xbe, 0x39, 0xf8, 0x3b, 0xff, 0xc6, 0x74, 0xef, 0xa0, 0xa6, 0x7f, 0xad, 0xe3, 0xa2, 0xe2, 0xc5, 0x4e, + 0x71, 0x7f, 0xfb, 0xfb, 0xdf, 0x9f, 0xda, 0x8c, 0x4f, 0x6b, 0x7a, 0xc7, 0xe3, 0x8e, 0xb6, 0x4f, 0x9e, 0x3d, 0xe5, + 0x7f, 0xab, 0x6b, 0xfa, 0x2b, 0xf3, 0x83, 0xa3, 0x1e, 0x67, 0x9e, 0x1e, 0x3e, 0x91, 0x4d, 0xd4, 0x80, 0xa1, 0x87, + 0x06, 0x90, 0x4b, 0xab, 0xa6, 0xb9, 0xc7, 0x2b, 0x17, 0xdc, 0xbe, 0xcf, 0xe2, 0x34, 0x5e, 0xc1, 0x41, 0xb0, 0x41, + 0xe3, 0xac, 0x02, 0x38, 0x55, 0xe0, 0x3d, 0xa3, 0x92, 0x66, 0xa5, 0xfc, 0x07, 0xe7, 0x1f, 0x61, 0xd0, 0x10, 0xd2, + 0x46, 0x45, 0x06, 0x3a, 0x59, 0xe9, 0xc8, 0x46, 0xe8, 0xbf, 0xd9, 0x8c, 0x83, 0xe3, 0xc3, 0xe8, 0xf5, 0xfb, 0x61, + 0xc1, 0x44, 0x58, 0x10, 0x42, 0xff, 0x0c, 0x0b, 0x70, 0x28, 0x29, 0x98, 0x97, 0xcf, 0xf8, 0x9e, 0x6b, 0xa3, 0xb0, + 0x10, 0x44, 0x77, 0x91, 0x7d, 0x40, 0xd5, 0xa3, 0xef, 0xd0, 0x0d, 0xf1, 0xb2, 0xc2, 0x82, 0xa1, 0x55, 0x0d, 0xcc, + 0x10, 0x14, 0xff, 0x86, 0x87, 0x12, 0x7c, 0xe2, 0x01, 0x3e, 0x7a, 0x4c, 0x66, 0x5c, 0x5d, 0x6b, 0x4f, 0x2e, 0xc2, + 0x82, 0x06, 0xba, 0xed, 0x10, 0x74, 0x20, 0xf2, 0x5f, 0x80, 0xa7, 0xc0, 0xc0, 0x87, 0x85, 0x5d, 0xca, 0x5d, 0x7f, + 0xf5, 0x5f, 0x0d, 0xeb, 0xe8, 0xc2, 0x8f, 0xfe, 0x6a, 0x5d, 0xd8, 0x33, 0x32, 0x95, 0x87, 0xe5, 0x70, 0x32, 0x1d, + 0x0c, 0xa4, 0x8b, 0xe3, 0x76, 0x9c, 0xcd, 0x7f, 0x9d, 0xcb, 0xc5, 0x02, 0x75, 0xdf, 0x38, 0xaf, 0x33, 0xfd, 0x37, + 0xd2, 0xce, 0x07, 0x6f, 0x8e, 0x7f, 0x3f, 0x3b, 0x3d, 0x7e, 0x05, 0xce, 0x07, 0x1f, 0x5e, 0x7e, 0xff, 0xf2, 0xbd, + 0x0a, 0xee, 0xae, 0xe6, 0xbc, 0xdf, 0x77, 0x52, 0x9f, 0x90, 0x0f, 0x2b, 0xb2, 0x1f, 0xc6, 0x8f, 0x0b, 0x65, 0xf4, + 0x40, 0x0e, 0x99, 0x85, 0x42, 0x86, 0x2a, 0x6a, 0xfb, 0xbb, 0x1c, 0x4e, 0x3c, 0x30, 0x8b, 0xbb, 0x86, 0x08, 0xd7, + 0x6f, 0xb9, 0x0d, 0xb2, 0x26, 0x8f, 0xbc, 0x7e, 0x70, 0x32, 0x95, 0x8e, 0x2d, 0x2c, 0x18, 0x94, 0x0d, 0x6d, 0x3a, + 0xce, 0xe6, 0xc5, 0xc2, 0xb6, 0xcb, 0x2d, 0x90, 0x51, 0x9a, 0x5d, 0x5c, 0x84, 0x0a, 0xba, 0xfa, 0x08, 0x34, 0x00, + 0xa6, 0x51, 0x85, 0x6b, 0x11, 0x9f, 0xf9, 0xe5, 0x47, 0x63, 0xaf, 0x79, 0xb7, 0xa8, 0x7b, 0x32, 0xcd, 0xaa, 0x1a, + 0x03, 0x3a, 0x98, 0x50, 0xee, 0x06, 0xdd, 0x04, 0x93, 0x51, 0x6d, 0xf9, 0x75, 0x5e, 0x2d, 0x4c, 0x73, 0xdc, 0x30, + 0x54, 0x5e, 0xc9, 0x6b, 0xd9, 0x40, 0x64, 0x20, 0x19, 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0x7d, 0x6f, 0xd7, 0x3b, 0x7e, + 0x93, 0x4b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x58, 0x28, 0xe7, 0x72, 0xc9, 0xf8, 0x5c, 0x2c, 0x8e, 0xc0, 0xed, + 0x7c, 0x2e, 0x16, 0x11, 0x06, 0xe5, 0xcb, 0x20, 0x56, 0x09, 0xd8, 0xbd, 0x38, 0x08, 0xdf, 0x4e, 0x68, 0x03, 0xbb, + 0x81, 0x24, 0x1b, 0x94, 0x76, 0xa5, 0x21, 0xca, 0x9d, 0xf2, 0x68, 0x83, 0xc8, 0x43, 0xac, 0x9a, 0x57, 0x6d, 0x4f, + 0x36, 0x73, 0x31, 0xc1, 0x55, 0x16, 0x33, 0x39, 0x8d, 0x0f, 0x59, 0x31, 0x8d, 0xa1, 0x94, 0x38, 0x4d, 0xc3, 0x98, + 0x4e, 0xa8, 0x20, 0x24, 0x61, 0x7c, 0x1e, 0x2f, 0x68, 0x82, 0x52, 0x82, 0x10, 0x42, 0x7e, 0x8c, 0xd0, 0x36, 0x07, + 0x96, 0xbc, 0xdd, 0x7e, 0x9e, 0x7e, 0x6e, 0xc7, 0x70, 0x19, 0x15, 0xa1, 0x1b, 0x74, 0xd6, 0xf0, 0x6f, 0x44, 0x05, + 0x8d, 0xb1, 0x62, 0x08, 0x02, 0x5e, 0x60, 0x54, 0xc2, 0x82, 0xc4, 0xac, 0x82, 0x28, 0x02, 0xe5, 0x3c, 0x5e, 0xb0, + 0x82, 0x36, 0x6d, 0x4e, 0x63, 0x6d, 0x12, 0xd4, 0x73, 0x58, 0x6a, 0x7b, 0x52, 0xa9, 0x10, 0x7b, 0x7c, 0x26, 0xa2, + 0x6b, 0x6d, 0x68, 0x00, 0x28, 0x50, 0x4a, 0x2e, 0x7e, 0xf3, 0xe5, 0x1e, 0x6e, 0x0a, 0xfa, 0x9f, 0x6d, 0x4c, 0xb4, + 0xb3, 0x5c, 0x1d, 0x7a, 0xf3, 0x05, 0x8d, 0xf3, 0x1c, 0x42, 0xb1, 0x19, 0x04, 0x72, 0x91, 0x55, 0x10, 0xd1, 0xe2, + 0x2e, 0x30, 0x21, 0xe1, 0xa0, 0x4d, 0xbf, 0x42, 0x6a, 0x43, 0x4c, 0xae, 0x3c, 0x31, 0xb0, 0xdb, 0x2a, 0x41, 0xc0, + 0x91, 0x9e, 0x67, 0x9f, 0x9a, 0x18, 0x6b, 0x9a, 0x9a, 0x99, 0x78, 0x1b, 0x0a, 0xd1, 0xa0, 0x05, 0xd1, 0x0c, 0xde, + 0x3f, 0x57, 0x1c, 0xaf, 0x3a, 0xf0, 0x03, 0xde, 0xb9, 0x38, 0xf3, 0x6a, 0xe6, 0x11, 0x39, 0xf5, 0x51, 0x8e, 0xe8, + 0x97, 0x3c, 0xac, 0x46, 0x3a, 0x19, 0x63, 0x25, 0x71, 0xd0, 0xdb, 0x60, 0xc1, 0x9c, 0xd0, 0x15, 0x0f, 0x2d, 0x1f, + 0xff, 0x0a, 0x99, 0x8c, 0x92, 0x1a, 0x2b, 0xba, 0xd2, 0x62, 0xc4, 0x79, 0x0d, 0xb3, 0x34, 0x59, 0xd1, 0xc5, 0x42, + 0x93, 0x66, 0xa1, 0x4c, 0x03, 0x7c, 0x02, 0x2d, 0x46, 0xee, 0xa1, 0xa6, 0x0d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, + 0xf7, 0xd0, 0xe1, 0xff, 0xe7, 0xd9, 0x05, 0x22, 0xed, 0xcd, 0x4d, 0x64, 0x3c, 0x52, 0x37, 0x70, 0x50, 0x8c, 0x8f, + 0x7d, 0x33, 0xf1, 0x0b, 0x67, 0xf4, 0x21, 0xa9, 0x7c, 0x87, 0x0f, 0x96, 0x3f, 0xde, 0xd4, 0xcc, 0xca, 0x08, 0xd6, + 0xc3, 0x76, 0x8b, 0x0b, 0xa2, 0xed, 0x02, 0x48, 0x3d, 0xe3, 0xd5, 0xc2, 0x37, 0x5e, 0x8d, 0xef, 0x31, 0x5e, 0x75, + 0x67, 0x6a, 0x98, 0x93, 0x0d, 0xea, 0xb3, 0x94, 0x3c, 0x3f, 0x47, 0x99, 0x60, 0xd3, 0xe5, 0xac, 0xa4, 0x2a, 0x95, + 0xd0, 0x5e, 0xec, 0x67, 0x8c, 0x6f, 0x09, 0xc6, 0x59, 0x71, 0x18, 0x09, 0x54, 0xa5, 0x92, 0x3a, 0xec, 0x15, 0xa0, + 0x1e, 0x83, 0xf7, 0x06, 0x43, 0xd4, 0xc8, 0xd8, 0x4d, 0x1b, 0x08, 0x0d, 0x8d, 0xf5, 0x68, 0xcf, 0x5a, 0x8f, 0x6e, + 0xb7, 0x95, 0xf1, 0xb7, 0x93, 0xeb, 0x22, 0x41, 0x54, 0x61, 0x35, 0x9a, 0x00, 0x6f, 0x9a, 0xd8, 0xdb, 0x92, 0x53, + 0x5a, 0x60, 0xf8, 0xec, 0x3f, 0xc3, 0xd2, 0xa9, 0x24, 0x4a, 0x32, 0x2b, 0xa3, 0x81, 0x3b, 0x07, 0x5f, 0xc4, 0x15, + 0xac, 0x01, 0x88, 0xe4, 0x88, 0x1e, 0xae, 0x7f, 0x86, 0xd2, 0x65, 0x96, 0x64, 0x26, 0x21, 0x33, 0x17, 0x69, 0x3b, + 0xeb, 0x60, 0xe2, 0x4c, 0x6a, 0xbd, 0xb1, 0x90, 0x43, 0x83, 0xfc, 0x00, 0xca, 0x10, 0x87, 0x4f, 0x3e, 0x98, 0x50, + 0xa9, 0x42, 0xa9, 0x36, 0xba, 0xd9, 0x0d, 0xbc, 0xf2, 0x21, 0xbb, 0xe2, 0x65, 0x15, 0x5f, 0xad, 0x8c, 0x25, 0x31, + 0x67, 0xf7, 0xb9, 0xed, 0x51, 0x61, 0x5e, 0xbd, 0x7d, 0xf9, 0xfd, 0x71, 0xe3, 0xd5, 0x2e, 0xe2, 0x68, 0x08, 0xb6, + 0x15, 0x63, 0x8c, 0xde, 0xe2, 0xd3, 0x60, 0xa2, 0x5c, 0x23, 0xd0, 0xbb, 0x14, 0xf4, 0xdb, 0x5f, 0xea, 0x09, 0x78, + 0xc5, 0xf5, 0xf2, 0x4b, 0x3e, 0x02, 0x96, 0xa8, 0xd0, 0xb3, 0xc2, 0xdc, 0xac, 0xcc, 0xee, 0xed, 0x56, 0x64, 0xa6, + 0x5d, 0x69, 0x64, 0x20, 0x5e, 0x6d, 0x87, 0xb1, 0x70, 0xe9, 0x9a, 0x6e, 0x07, 0xbb, 0x5a, 0x7a, 0x96, 0xc8, 0xdb, + 0x6d, 0x09, 0x1d, 0xb2, 0x03, 0xee, 0xbd, 0x8c, 0x6f, 0xe1, 0x65, 0xe9, 0x75, 0xb3, 0x19, 0x3c, 0x01, 0xcc, 0x84, + 0x0b, 0x67, 0x59, 0x1c, 0x33, 0x9e, 0x84, 0x2a, 0x36, 0x57, 0x43, 0xe4, 0xad, 0x08, 0xad, 0xd9, 0x5f, 0xa1, 0x18, + 0x81, 0xdd, 0xc9, 0xe9, 0xc7, 0x6c, 0x35, 0x5b, 0x02, 0x6a, 0xfe, 0x55, 0x26, 0x80, 0xe6, 0xda, 0xb5, 0x60, 0x9b, + 0x42, 0x9b, 0xeb, 0xfa, 0x79, 0xbc, 0x8a, 0x13, 0x50, 0xdd, 0x80, 0xb7, 0xc8, 0x9d, 0x16, 0x5d, 0x19, 0x74, 0x51, + 0xfa, 0x40, 0x39, 0x96, 0x14, 0x3a, 0xfa, 0xde, 0x13, 0xea, 0xdc, 0x33, 0x80, 0x4b, 0x1a, 0x35, 0x4f, 0xb5, 0x94, + 0xb1, 0x00, 0x58, 0xe8, 0x60, 0xa6, 0xc8, 0x56, 0x74, 0x6b, 0x30, 0x29, 0xe0, 0xad, 0x01, 0xfe, 0x10, 0x59, 0xa5, + 0xee, 0x8a, 0x65, 0x58, 0x7a, 0xf6, 0xd7, 0xfd, 0x7e, 0xec, 0xd9, 0x5f, 0x5f, 0x68, 0x5a, 0x17, 0xb7, 0x1b, 0x40, + 0x6a, 0x0c, 0x20, 0x72, 0xac, 0x07, 0xc2, 0x44, 0x14, 0x6b, 0xfa, 0xfe, 0x1d, 0x9b, 0x2c, 0x0a, 0x84, 0x7e, 0xa7, + 0x5e, 0x4f, 0x4a, 0x02, 0x3a, 0xb5, 0x8a, 0x1d, 0x0d, 0xb4, 0xd9, 0x07, 0x04, 0x44, 0xf5, 0x33, 0xb2, 0xf9, 0x42, + 0x39, 0x17, 0xab, 0xf0, 0xe1, 0x63, 0x0a, 0x01, 0x85, 0x3b, 0x6a, 0x74, 0xde, 0x86, 0x48, 0xa0, 0xac, 0x50, 0xc4, + 0x9a, 0x17, 0x6b, 0x49, 0xc8, 0x7c, 0xbc, 0x40, 0xc1, 0x95, 0x03, 0x76, 0xe5, 0x6c, 0x32, 0x2c, 0x23, 0xce, 0xc2, + 0xfb, 0xbf, 0x99, 0x2c, 0x08, 0x6a, 0xae, 0xfc, 0x40, 0x8e, 0x3b, 0x99, 0x1a, 0x7b, 0xaa, 0x51, 0x83, 0x60, 0x32, + 0x82, 0xc0, 0x70, 0xc3, 0x2f, 0xf8, 0xf8, 0x60, 0x41, 0x40, 0x45, 0x66, 0xcd, 0x42, 0xcc, 0x8b, 0xc3, 0x27, 0x80, + 0x1a, 0x33, 0x3a, 0x78, 0x06, 0xa0, 0xb0, 0x10, 0x10, 0x7d, 0x0c, 0x32, 0x5a, 0x01, 0xbf, 0x85, 0xfa, 0xdd, 0x3a, + 0xf1, 0x7d, 0xe8, 0x57, 0x41, 0x2f, 0x62, 0x60, 0x38, 0xa2, 0xc9, 0x7e, 0xc8, 0x07, 0x93, 0x01, 0x68, 0x4b, 0xbc, + 0xdd, 0xd7, 0xd2, 0x8a, 0x9b, 0xd3, 0xa5, 0xd3, 0xfd, 0x93, 0x36, 0x41, 0x12, 0xa9, 0x64, 0xa5, 0x22, 0x06, 0x10, + 0xca, 0x52, 0x6d, 0x93, 0x25, 0x58, 0x56, 0x98, 0x25, 0xcd, 0x0d, 0x4a, 0xe2, 0xee, 0x66, 0xe0, 0x18, 0x35, 0xeb, + 0x38, 0x2c, 0x5b, 0x6e, 0xd4, 0x00, 0x9f, 0x93, 0xb0, 0xc2, 0xde, 0x70, 0x66, 0xd2, 0x3b, 0xd3, 0xe1, 0xea, 0x98, + 0xb3, 0x37, 0x1c, 0xc1, 0x38, 0x12, 0xbc, 0xf1, 0xd0, 0x25, 0xd3, 0x50, 0x91, 0x29, 0xe3, 0x60, 0xda, 0x03, 0xdc, + 0x7b, 0x0e, 0xc6, 0x61, 0x6c, 0x50, 0x59, 0x52, 0x9f, 0x7a, 0x77, 0x21, 0x10, 0xa4, 0xb5, 0x5e, 0xe6, 0x33, 0x3c, + 0x3d, 0x23, 0x94, 0xfd, 0x21, 0x87, 0x2f, 0xc0, 0x8e, 0x82, 0x1c, 0x4d, 0xf8, 0xb3, 0xc7, 0xbb, 0x81, 0xaa, 0xf8, + 0x20, 0xd8, 0x8b, 0x45, 0xba, 0x17, 0x0c, 0x04, 0xfc, 0x2a, 0xf8, 0x5e, 0x25, 0xe5, 0xde, 0x45, 0x5c, 0xec, 0xc5, + 0xab, 0xb8, 0xa8, 0xf6, 0x6e, 0xb2, 0x6a, 0xb9, 0x67, 0x3a, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x7b, 0xc1, + 0xa0, 0x30, 0x53, 0xbb, 0x62, 0x65, 0xe3, 0x38, 0x33, 0x21, 0xca, 0x82, 0x66, 0x80, 0xb0, 0xc6, 0x69, 0x00, 0x7c, + 0xea, 0x9a, 0xa5, 0xf4, 0x02, 0xc3, 0x0d, 0x88, 0xe9, 0x1a, 0xfa, 0x00, 0x3c, 0xf2, 0x9a, 0xc6, 0xb0, 0x04, 0x2e, + 0x06, 0x03, 0xb2, 0x86, 0xc8, 0x05, 0x6b, 0x6a, 0x83, 0x38, 0x84, 0x6b, 0x65, 0xa7, 0xbd, 0x0b, 0xcc, 0xb4, 0xdd, + 0x02, 0xa2, 0xf2, 0x84, 0xf4, 0xfb, 0xf6, 0x1b, 0xea, 0x5f, 0xb0, 0x97, 0x60, 0x7f, 0x55, 0x54, 0x61, 0x22, 0x95, + 0xe6, 0xfb, 0x92, 0x1d, 0x0d, 0x54, 0xc4, 0xe1, 0x1d, 0x47, 0x8a, 0x36, 0x2a, 0x97, 0x65, 0x4f, 0x96, 0x0d, 0x5f, + 0x89, 0x2b, 0xee, 0xfc, 0xb8, 0x2a, 0x29, 0xf3, 0x2a, 0x5b, 0x29, 0xf6, 0x6f, 0xc6, 0x35, 0xf7, 0x07, 0xd6, 0x9f, + 0xcd, 0x57, 0x70, 0x6d, 0xf5, 0xde, 0x35, 0xb9, 0x46, 0xe4, 0x2c, 0xa1, 0x5c, 0x52, 0xdb, 0x3c, 0xbc, 0xa5, 0xef, + 0xf3, 0xab, 0x6f, 0x33, 0x9d, 0xc6, 0x67, 0x15, 0x16, 0x2e, 0x44, 0x2b, 0x82, 0x43, 0x43, 0x2e, 0x9a, 0x47, 0x80, + 0xb9, 0xf6, 0xd9, 0x0a, 0x0a, 0x52, 0x9f, 0x55, 0xe8, 0xdd, 0x0a, 0x09, 0xaf, 0x34, 0xbb, 0xf4, 0x30, 0x90, 0x32, + 0x6e, 0x0f, 0x2d, 0x61, 0xd2, 0xf2, 0x22, 0xbc, 0xf7, 0x9a, 0x9b, 0xdc, 0x8b, 0x10, 0xa3, 0x17, 0x79, 0x76, 0x02, + 0xc6, 0xba, 0x4b, 0x76, 0x36, 0x3c, 0xf1, 0x1b, 0x9e, 0xb3, 0x16, 0x8d, 0xa6, 0x4b, 0x96, 0xf4, 0xfb, 0x31, 0x98, + 0x78, 0xa7, 0x2c, 0x87, 0x5f, 0xf9, 0x82, 0xae, 0x19, 0x60, 0x8a, 0xd1, 0x0b, 0x48, 0x48, 0x11, 0x89, 0x64, 0xad, + 0x4e, 0x92, 0xcf, 0x74, 0x17, 0x80, 0xd1, 0x2f, 0x66, 0x69, 0xb4, 0xbc, 0xd7, 0xcc, 0x02, 0xc9, 0x33, 0xf4, 0x5d, + 0x07, 0xdb, 0x1b, 0xfb, 0x20, 0xe5, 0xfc, 0x50, 0x4c, 0x07, 0x03, 0x4e, 0x34, 0xdc, 0x78, 0xa9, 0xc4, 0xb5, 0xba, + 0xc5, 0x1d, 0xc3, 0x58, 0xea, 0xdb, 0x22, 0x06, 0x07, 0xec, 0xa2, 0x95, 0xdd, 0x3e, 0xc0, 0xbe, 0x72, 0xbc, 0x4b, + 0x95, 0xdd, 0xe9, 0x31, 0xd3, 0x5c, 0xb6, 0x9a, 0x74, 0x52, 0x71, 0x3f, 0x91, 0x6f, 0x72, 0x07, 0x5d, 0x2e, 0xc7, + 0x9a, 0xb7, 0x1c, 0x80, 0x8a, 0x7e, 0xa4, 0xa8, 0xee, 0x17, 0x38, 0xc2, 0x3c, 0x58, 0xb7, 0xf9, 0x64, 0xdf, 0x14, + 0x38, 0x44, 0x9e, 0xb4, 0xd1, 0x14, 0xd0, 0xbd, 0x8b, 0xc7, 0x5d, 0xfd, 0xb6, 0x74, 0x17, 0x28, 0xd1, 0x4e, 0xc5, + 0x0d, 0x3f, 0x26, 0xea, 0x74, 0xa6, 0x0d, 0xa1, 0x7f, 0x65, 0xc4, 0xfd, 0xa5, 0x71, 0x15, 0x6f, 0x7a, 0x97, 0xcf, + 0x38, 0xd4, 0xd9, 0x0d, 0xa1, 0x00, 0x5c, 0xb5, 0xa7, 0x53, 0x37, 0x86, 0xf4, 0x4a, 0x89, 0x6e, 0x83, 0x83, 0xdd, + 0xeb, 0x33, 0x8e, 0xa2, 0x1f, 0xa3, 0x46, 0xbe, 0x89, 0xc4, 0x63, 0x39, 0x88, 0x1f, 0x17, 0x74, 0x19, 0x89, 0xc7, + 0xc5, 0x20, 0x7e, 0x2c, 0xeb, 0x7a, 0xf7, 0x5c, 0xb9, 0xbf, 0x8f, 0xc8, 0xb3, 0xee, 0xec, 0xa5, 0x12, 0x36, 0x06, + 0x9e, 0x5d, 0x0b, 0x08, 0xa7, 0xe0, 0x89, 0x6c, 0x2d, 0x7d, 0xe8, 0xdc, 0xee, 0x63, 0xcb, 0x24, 0x41, 0xd0, 0xf3, + 0x36, 0x9b, 0x44, 0xb1, 0xb3, 0xcd, 0xa3, 0x0f, 0xa7, 0x40, 0x42, 0xb7, 0xdb, 0x66, 0x5d, 0xad, 0x01, 0xc5, 0x34, + 0x1c, 0xf3, 0xfd, 0x62, 0x74, 0xe3, 0xbb, 0xeb, 0xef, 0x17, 0xa3, 0x25, 0x19, 0x4e, 0xcc, 0xe4, 0xc7, 0x47, 0xe3, + 0x59, 0x1c, 0x4d, 0xea, 0x8e, 0xd3, 0x42, 0xe3, 0x9f, 0x7a, 0xb7, 0x50, 0x04, 0x4e, 0xc5, 0x08, 0x8e, 0x9c, 0x0a, + 0xe5, 0xa4, 0xd4, 0xc0, 0xf0, 0xdf, 0xab, 0x76, 0xb4, 0x69, 0x6f, 0xe2, 0x2a, 0x59, 0x66, 0xe2, 0x52, 0x87, 0x0f, + 0xd7, 0xd1, 0xc5, 0x6d, 0x40, 0x3b, 0xef, 0x32, 0xed, 0xf8, 0x75, 0xd2, 0xa0, 0x27, 0xae, 0x66, 0x06, 0xdc, 0xba, + 0x1f, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, 0xc4, 0xdc, 0xfe, 0x4d, 0xd9, 0xfc, 0x2a, 0xda, 0xe7, 0xc8, 0x48, + 0xd9, 0x26, 0x23, 0x15, 0x18, 0x61, 0x4a, 0x91, 0xc4, 0x55, 0x08, 0x81, 0xec, 0xbf, 0xa4, 0xb8, 0x16, 0x4b, 0xef, + 0x35, 0x08, 0x13, 0x6c, 0x17, 0xb4, 0x5f, 0xdd, 0xce, 0x6d, 0xa5, 0xc5, 0x1e, 0xa9, 0xef, 0x73, 0x67, 0xbb, 0xa2, + 0xc9, 0xdf, 0x97, 0x0d, 0x68, 0x03, 0x88, 0xf2, 0xbe, 0x3e, 0x2a, 0x81, 0x93, 0x11, 0x37, 0x94, 0x18, 0xbd, 0xa0, + 0xab, 0x13, 0xb9, 0x67, 0xa7, 0xe6, 0x4d, 0xc5, 0x4c, 0xc5, 0x95, 0x6f, 0xf6, 0xcc, 0x7f, 0x30, 0x14, 0x54, 0x80, + 0x81, 0xb7, 0x39, 0xe3, 0xd1, 0x81, 0xee, 0xc6, 0xe8, 0xb4, 0x60, 0xb3, 0xa0, 0x2e, 0xeb, 0xa6, 0x8d, 0x07, 0x8d, + 0x38, 0x28, 0x8a, 0x55, 0xa1, 0x46, 0xc2, 0x13, 0x81, 0x80, 0x29, 0xbb, 0xe2, 0x91, 0x11, 0xd4, 0xf4, 0x26, 0x14, + 0x36, 0x14, 0xfc, 0x55, 0xa2, 0x9a, 0xde, 0x84, 0x36, 0x99, 0x38, 0xcd, 0x20, 0x82, 0x19, 0xb1, 0xdd, 0x6f, 0x01, + 0x6d, 0x6e, 0xcd, 0x68, 0x53, 0xd7, 0x56, 0x5b, 0x85, 0x5c, 0x52, 0xa4, 0x2c, 0xff, 0x9d, 0x9a, 0x0a, 0x4a, 0x6a, + 0xb9, 0xe8, 0x4d, 0x9a, 0x2e, 0x7a, 0x3c, 0x33, 0x92, 0x40, 0xe5, 0x96, 0x3b, 0x46, 0x7f, 0x08, 0x0b, 0x3c, 0x62, + 0xe2, 0xc4, 0x82, 0xb9, 0xd5, 0x11, 0xcb, 0xe6, 0x62, 0x31, 0x5a, 0x49, 0x08, 0x1b, 0x7c, 0xc8, 0xb2, 0x79, 0xa9, + 0x1f, 0x42, 0x5f, 0x58, 0x7a, 0x02, 0x76, 0xb1, 0xc1, 0x4a, 0x96, 0x01, 0xf8, 0x5e, 0xd0, 0xcd, 0x4a, 0x96, 0x91, + 0x54, 0xdd, 0x8f, 0x6b, 0x2c, 0x41, 0xa5, 0x15, 0x2a, 0x2d, 0xa9, 0xb1, 0x20, 0xf0, 0x55, 0xd5, 0xe5, 0x43, 0xb2, + 0xab, 0x40, 0x3d, 0x75, 0xd4, 0x80, 0x53, 0xa0, 0xaa, 0xc0, 0x82, 0x24, 0xa8, 0x0c, 0x5d, 0x15, 0x98, 0x56, 0x60, + 0x9a, 0xa9, 0xc2, 0x45, 0x99, 0x1d, 0x4a, 0xb3, 0x5e, 0xf2, 0x59, 0x3c, 0x08, 0x93, 0x61, 0x4c, 0x1e, 0x23, 0xd4, + 0xfe, 0x7e, 0x1e, 0xc5, 0x5a, 0x2e, 0xb9, 0x72, 0x7e, 0xf1, 0x37, 0x9f, 0xb1, 0xd7, 0x3d, 0xc3, 0x60, 0x01, 0xce, + 0xd2, 0xf6, 0x2a, 0x13, 0xef, 0x64, 0x2b, 0x38, 0x0e, 0x66, 0x51, 0x0e, 0xab, 0x9e, 0x1c, 0xd1, 0x5c, 0xe4, 0xda, + 0xbb, 0x08, 0x91, 0x83, 0xcc, 0x1e, 0x03, 0xec, 0x46, 0xf8, 0x3a, 0xb4, 0x36, 0xb7, 0xba, 0x42, 0xfc, 0x8d, 0x12, + 0x89, 0x9f, 0xa5, 0xfc, 0xb8, 0x5e, 0xa9, 0x5c, 0x95, 0xc1, 0x63, 0xd5, 0xcd, 0xe0, 0x99, 0xf6, 0x3d, 0xd6, 0xfe, + 0xad, 0xed, 0xe6, 0x78, 0xef, 0xc1, 0x83, 0xd6, 0xff, 0xd6, 0x93, 0x10, 0xda, 0x2b, 0x27, 0xa9, 0x3b, 0x6a, 0xf4, + 0xcc, 0x64, 0x8d, 0xa8, 0x84, 0xa9, 0xdd, 0xa9, 0x1c, 0x03, 0x35, 0x1d, 0xc0, 0xb5, 0x44, 0x4d, 0xd0, 0x93, 0x82, + 0x8d, 0xe1, 0x88, 0xb3, 0x38, 0x68, 0x87, 0x31, 0x8a, 0x97, 0x73, 0x25, 0x5e, 0xce, 0x8f, 0x18, 0x07, 0x68, 0x2d, + 0x40, 0xaa, 0xd7, 0xb0, 0x9f, 0xb9, 0x82, 0x05, 0x36, 0x77, 0xbe, 0x03, 0x0b, 0x64, 0x88, 0x93, 0xcd, 0x71, 0xb2, + 0xc7, 0xb5, 0x9e, 0x7b, 0x81, 0x8f, 0x93, 0x7a, 0xe1, 0xd5, 0x55, 0xb6, 0xeb, 0x5a, 0xb2, 0x72, 0x5e, 0x0c, 0x26, + 0x10, 0x94, 0xa5, 0x9c, 0x17, 0xc3, 0xc9, 0x82, 0xe6, 0xf0, 0x63, 0xd1, 0x40, 0x87, 0x58, 0x0e, 0x12, 0xb8, 0x74, + 0xf6, 0x18, 0xf0, 0x86, 0x52, 0x8b, 0xbb, 0xb1, 0x8e, 0x1c, 0xeb, 0x28, 0xf6, 0xc3, 0x18, 0x70, 0x65, 0x9d, 0xc0, + 0xfb, 0xfe, 0xeb, 0x63, 0x13, 0x90, 0x55, 0xbb, 0xc2, 0xab, 0x51, 0xee, 0xba, 0xd2, 0xe8, 0x4b, 0x4a, 0x4f, 0x78, + 0xc1, 0x53, 0xc9, 0x76, 0xdb, 0x33, 0x70, 0xb6, 0xc4, 0x43, 0xe2, 0x1d, 0x23, 0x7a, 0x31, 0x6d, 0x64, 0xe6, 0x04, + 0xce, 0x6c, 0x77, 0xd9, 0xc6, 0xfc, 0xd8, 0x01, 0x0e, 0x16, 0x41, 0x48, 0xdc, 0x10, 0x86, 0x89, 0x1d, 0x95, 0x43, + 0x2d, 0x84, 0xeb, 0x5a, 0x78, 0x1d, 0xa7, 0x65, 0x0c, 0x2e, 0xd2, 0xda, 0x36, 0xf1, 0x1e, 0xba, 0xee, 0xf9, 0x31, + 0xb7, 0x3a, 0x46, 0x5b, 0x48, 0xbf, 0x1d, 0x9d, 0xde, 0x73, 0x18, 0x80, 0xa6, 0x07, 0xb3, 0xaa, 0x7d, 0x26, 0x71, + 0x73, 0xda, 0x09, 0x42, 0x22, 0x10, 0x45, 0xe9, 0x8c, 0x30, 0xfd, 0x3b, 0xcd, 0x65, 0x15, 0xad, 0x1e, 0xe4, 0x99, + 0x43, 0x9e, 0x85, 0xde, 0xf6, 0xa0, 0x55, 0x73, 0x37, 0x18, 0x27, 0x6e, 0xb7, 0x77, 0xfe, 0xdf, 0xb2, 0xae, 0xad, + 0xd6, 0x88, 0xc7, 0xed, 0xea, 0x07, 0x8d, 0xbd, 0xda, 0x53, 0x31, 0x60, 0x56, 0xd2, 0x3b, 0xa3, 0x4a, 0x5e, 0x64, + 0xbc, 0xc4, 0x93, 0x6a, 0xd5, 0xf0, 0xf1, 0xbe, 0xc9, 0x46, 0xe6, 0x81, 0x4c, 0x01, 0xf1, 0xfc, 0x26, 0x35, 0xea, + 0xe3, 0x14, 0x25, 0xe0, 0xef, 0x74, 0x7c, 0x23, 0xfa, 0xd1, 0xbe, 0xb8, 0xe4, 0xd5, 0xc9, 0x8d, 0x30, 0x2f, 0x5e, + 0x58, 0x9d, 0x3f, 0x7d, 0x53, 0xf8, 0xd0, 0xe1, 0xa8, 0xbd, 0x83, 0x22, 0x4b, 0x26, 0x8e, 0x26, 0x46, 0xd6, 0x26, + 0x66, 0x1f, 0x15, 0x5c, 0x4c, 0x54, 0xa1, 0x67, 0x9d, 0x3d, 0x61, 0x0a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x16, + 0x0c, 0xd4, 0x69, 0x4a, 0x88, 0x1e, 0x8a, 0x19, 0xc6, 0x2b, 0x06, 0x50, 0x98, 0x42, 0x81, 0x28, 0x3a, 0xfb, 0x70, + 0xa0, 0x09, 0xfd, 0xfe, 0x4d, 0xaa, 0x33, 0xd0, 0xb2, 0x9e, 0x4a, 0x10, 0xd5, 0x41, 0xb4, 0x55, 0x5e, 0x84, 0x3f, + 0x2e, 0x69, 0x99, 0xd1, 0xa5, 0xa0, 0xa9, 0xa0, 0x49, 0x46, 0x2f, 0xb8, 0x12, 0x15, 0x5f, 0x08, 0xa6, 0x68, 0xbb, + 0x21, 0xec, 0xff, 0x6a, 0xd0, 0xf5, 0x56, 0xac, 0x35, 0xb4, 0x3b, 0x41, 0x46, 0x68, 0xbe, 0xd0, 0x41, 0xc8, 0x50, + 0x39, 0x09, 0x5d, 0xab, 0x34, 0x5e, 0x81, 0x4b, 0xa6, 0xd9, 0x68, 0x19, 0x97, 0x61, 0x60, 0xbf, 0x0a, 0x2c, 0x26, + 0x07, 0x26, 0x9d, 0xae, 0xcf, 0x9f, 0xcb, 0xab, 0x95, 0x14, 0x5c, 0x54, 0x0a, 0xa2, 0xdf, 0xe0, 0xbe, 0x9b, 0xb8, + 0xea, 0xac, 0x59, 0x2b, 0x7d, 0xe8, 0x5b, 0x9f, 0xb5, 0x71, 0x5f, 0x18, 0x1c, 0x83, 0x9d, 0x8f, 0x88, 0x81, 0x34, + 0xa8, 0x74, 0x8b, 0x43, 0x13, 0xa0, 0x4b, 0x87, 0x14, 0xb2, 0x64, 0x2a, 0x53, 0x25, 0xa8, 0xf8, 0xc6, 0xef, 0xa5, + 0xac, 0x46, 0x7f, 0xad, 0x79, 0x71, 0x77, 0xca, 0x73, 0x8e, 0x63, 0x14, 0x24, 0xb1, 0xb8, 0x8e, 0xcb, 0x80, 0xf8, + 0x96, 0x57, 0xc1, 0x41, 0x6a, 0xc2, 0xc6, 0xec, 0x54, 0x8d, 0x5a, 0x2f, 0x89, 0xbe, 0x32, 0xca, 0x37, 0x06, 0x43, + 0x13, 0x51, 0x05, 0x7d, 0xaf, 0xd5, 0x3d, 0xad, 0x6e, 0x58, 0x40, 0xfc, 0xb9, 0xd2, 0x0b, 0xb5, 0x5e, 0x37, 0x63, + 0x6e, 0x98, 0x08, 0x41, 0xa3, 0x27, 0xf5, 0xa2, 0xf6, 0xdc, 0xd2, 0x54, 0x64, 0xdc, 0x68, 0x93, 0xf3, 0x4b, 0x90, + 0xf1, 0x39, 0x73, 0xa1, 0x49, 0x5d, 0x53, 0x05, 0x55, 0x18, 0x6d, 0x6e, 0x1b, 0xe9, 0xf4, 0x0e, 0xdc, 0xd9, 0x8c, + 0xd9, 0x91, 0x76, 0x69, 0xac, 0x69, 0xc1, 0xcb, 0x95, 0x14, 0x25, 0x84, 0x71, 0xee, 0x8d, 0xe9, 0x55, 0x9c, 0x89, + 0x2a, 0xce, 0xc4, 0x71, 0xb9, 0xe2, 0x49, 0xf5, 0x1e, 0x6e, 0x71, 0xca, 0xea, 0xa6, 0x2e, 0xe1, 0x4a, 0x97, 0xec, + 0x61, 0x30, 0x35, 0x15, 0xf7, 0xd8, 0x19, 0x5c, 0x54, 0x7f, 0x44, 0x4b, 0x89, 0xb1, 0x50, 0x75, 0xf1, 0xf1, 0x79, + 0x29, 0xf3, 0x75, 0x05, 0xda, 0xdd, 0x8b, 0x2a, 0x3a, 0x78, 0xba, 0xba, 0x9d, 0xaa, 0x1b, 0x4c, 0xf4, 0xf4, 0x60, + 0x75, 0xdb, 0xcb, 0xae, 0x56, 0xb2, 0xa8, 0x62, 0x51, 0x4d, 0x15, 0x22, 0x59, 0x12, 0xe7, 0x49, 0x38, 0x19, 0x8f, + 0xbf, 0xda, 0x1b, 0xee, 0x41, 0x06, 0x32, 0xfd, 0x34, 0x54, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x95, 0xea, 0x6e, + 0x17, 0x8d, 0x26, 0x35, 0xd6, 0x33, 0x4c, 0xf4, 0xcc, 0x8c, 0xf8, 0xed, 0x2a, 0x16, 0x29, 0xc4, 0xaf, 0xd3, 0xc5, + 0x1f, 0x3c, 0x1d, 0x37, 0xca, 0xb7, 0x9f, 0x3e, 0xab, 0xff, 0xa8, 0x4d, 0x58, 0x6b, 0xd3, 0xee, 0xe7, 0x7f, 0x1c, + 0xaa, 0xf9, 0x3e, 0x3a, 0xdc, 0xd7, 0x3f, 0xfe, 0xa8, 0xeb, 0xe9, 0x9b, 0x22, 0x9c, 0xff, 0x33, 0x54, 0xf3, 0x79, + 0x5c, 0x14, 0xf1, 0x5d, 0x0d, 0x91, 0x3c, 0x85, 0xf3, 0x26, 0xa1, 0xde, 0x36, 0xa0, 0x07, 0x64, 0x7a, 0x21, 0x18, + 0x7c, 0xf3, 0xbe, 0x0a, 0x03, 0x5e, 0xae, 0x86, 0x5c, 0x54, 0x59, 0x75, 0x37, 0xc4, 0x3c, 0x01, 0x7e, 0x6a, 0x78, + 0xb3, 0xe7, 0x85, 0x21, 0x36, 0x17, 0x05, 0xe7, 0x9f, 0x78, 0xa8, 0x8c, 0xa3, 0xc7, 0x68, 0x1c, 0x3d, 0xa6, 0x6a, + 0x30, 0x26, 0xdf, 0x50, 0xdd, 0x99, 0xc9, 0x37, 0x60, 0x82, 0x94, 0xb5, 0xbf, 0x51, 0xc6, 0x89, 0xd1, 0x98, 0x5e, + 0xbf, 0xca, 0xb3, 0x15, 0x30, 0xc1, 0x4b, 0xfd, 0xa3, 0x26, 0xf4, 0x3d, 0x6f, 0x67, 0x1f, 0x8d, 0x46, 0xcf, 0x0b, + 0x3a, 0x1a, 0x8d, 0x3e, 0x66, 0x35, 0xa1, 0x2b, 0xd1, 0xf1, 0xfe, 0x3d, 0xa7, 0xe7, 0x32, 0xbd, 0x8b, 0x82, 0x80, + 0x2e, 0xb3, 0x34, 0xe5, 0x42, 0x95, 0x75, 0x9a, 0xb6, 0xf3, 0xaa, 0x16, 0x22, 0xf0, 0x8f, 0x6e, 0x23, 0x42, 0x10, + 0x11, 0x7a, 0xb2, 0xd3, 0xb3, 0xd1, 0x68, 0x74, 0x9a, 0x9a, 0x6a, 0x1d, 0x43, 0xfe, 0x06, 0xcd, 0x07, 0x9c, 0x5d, + 0x3e, 0x58, 0xdf, 0x98, 0x68, 0x27, 0xfb, 0xff, 0x3d, 0x9c, 0xcd, 0xc7, 0xc3, 0x6f, 0x47, 0x8b, 0xc7, 0xfb, 0x34, + 0x08, 0x7c, 0xd0, 0xea, 0x50, 0x5b, 0x73, 0x4c, 0xcb, 0xc3, 0xf1, 0x94, 0x94, 0x03, 0xf6, 0xd4, 0xfa, 0xd2, 0x7c, + 0xf5, 0x14, 0x90, 0x48, 0x51, 0x84, 0x1a, 0x38, 0xe9, 0x1f, 0x5e, 0x45, 0x5e, 0x0b, 0xc0, 0x47, 0xb3, 0x91, 0x0c, + 0x8c, 0x16, 0x70, 0x1c, 0x41, 0x79, 0xb5, 0x35, 0x8d, 0xe8, 0x31, 0x96, 0x99, 0xa8, 0xa0, 0xe3, 0x69, 0x79, 0x93, + 0x55, 0xc9, 0x12, 0x03, 0x1b, 0xc5, 0x25, 0x0f, 0xbe, 0x0a, 0xa2, 0x92, 0x1d, 0x3c, 0x9b, 0x2a, 0x78, 0x5f, 0x4c, + 0x4a, 0xf9, 0x25, 0x24, 0x7e, 0x3b, 0x46, 0x08, 0x54, 0xa2, 0x3d, 0x16, 0xb1, 0xc6, 0x57, 0xb9, 0x8c, 0xc1, 0x83, + 0xb3, 0xd4, 0x3c, 0x8b, 0x3d, 0x09, 0xac, 0xfd, 0x45, 0xab, 0x39, 0x12, 0x9a, 0x13, 0x4a, 0x26, 0xf7, 0x4b, 0x2a, + 0xbf, 0x9a, 0xa0, 0x57, 0x10, 0xb8, 0x55, 0x47, 0x70, 0xdc, 0x59, 0xcb, 0x06, 0xbd, 0x7c, 0x52, 0xb6, 0x3f, 0xff, + 0xdf, 0x25, 0x5d, 0x0c, 0xf6, 0xdd, 0xd0, 0x9c, 0x68, 0xf7, 0xd5, 0x0a, 0x19, 0xa5, 0x2a, 0x7c, 0x9e, 0x12, 0x6b, + 0x7c, 0xca, 0xd9, 0xd1, 0xc6, 0x74, 0x67, 0x54, 0x15, 0xd9, 0x55, 0x48, 0x74, 0xaf, 0x1c, 0x28, 0x66, 0x10, 0x65, + 0x23, 0x5c, 0x3f, 0x60, 0x2d, 0xe2, 0x75, 0xf2, 0x9a, 0x17, 0x55, 0x96, 0xa8, 0xf7, 0xd7, 0x8d, 0xf7, 0x40, 0x0d, + 0x54, 0x83, 0xde, 0x15, 0x0c, 0xe6, 0xf9, 0xa4, 0x00, 0xd0, 0xce, 0x92, 0x17, 0xd7, 0xdc, 0xa7, 0x1b, 0x41, 0x50, + 0xbb, 0x66, 0x5e, 0x36, 0x82, 0x4d, 0xc0, 0x57, 0xef, 0x0a, 0xc0, 0xdc, 0x08, 0x41, 0x6a, 0x0a, 0xa1, 0x70, 0xe0, + 0x02, 0x5f, 0x55, 0x45, 0x76, 0xbe, 0xae, 0x38, 0x06, 0xfb, 0xf0, 0xe2, 0x26, 0x2a, 0x27, 0x3c, 0x1e, 0x06, 0xf8, + 0x23, 0xa0, 0x2a, 0xe0, 0x86, 0xf1, 0xb0, 0x83, 0x17, 0xea, 0x97, 0x7b, 0xa3, 0xf6, 0x08, 0x7b, 0x93, 0x86, 0x10, + 0x5c, 0x07, 0x1f, 0x02, 0x58, 0x52, 0x84, 0x9e, 0xe0, 0xa9, 0x1a, 0x06, 0x17, 0x79, 0xb6, 0xd2, 0x49, 0xd5, 0xa8, + 0xa3, 0xf9, 0x50, 0x6a, 0x47, 0x72, 0x40, 0xbd, 0xf4, 0x18, 0xd3, 0x0b, 0x95, 0xae, 0x8a, 0x72, 0x46, 0x28, 0xef, + 0xf4, 0xc4, 0xb8, 0x30, 0x7d, 0x1c, 0x22, 0xbf, 0xbc, 0x2b, 0x54, 0xe8, 0x17, 0xbe, 0x00, 0xf0, 0x2b, 0xb8, 0xdd, + 0xef, 0xc6, 0x77, 0x51, 0xd9, 0xcf, 0x38, 0xdb, 0xff, 0xef, 0x79, 0x3c, 0xfc, 0x34, 0x1e, 0x7e, 0xbb, 0x18, 0x84, + 0x43, 0xfb, 0x93, 0x3c, 0x7e, 0xb4, 0x4f, 0x5f, 0x71, 0xcb, 0x95, 0xc0, 0xc2, 0x6f, 0x04, 0xb7, 0x51, 0x2b, 0x21, + 0x88, 0x02, 0xbc, 0x51, 0xb8, 0xd5, 0x38, 0x01, 0x80, 0xbf, 0xe0, 0xbf, 0x02, 0x34, 0x12, 0x72, 0x17, 0x0d, 0xd0, + 0x0f, 0xa8, 0xdf, 0x47, 0x4f, 0x1a, 0x06, 0x72, 0x20, 0x9e, 0x50, 0x31, 0x50, 0x88, 0x2e, 0x63, 0xa2, 0x60, 0x7f, + 0x6d, 0xf6, 0xed, 0xb6, 0xd7, 0x96, 0xfc, 0xe0, 0x97, 0x7e, 0xa6, 0x89, 0x99, 0x77, 0xb8, 0xa1, 0xac, 0xe4, 0x2a, + 0x44, 0x6c, 0x3c, 0xfd, 0x2b, 0x67, 0x10, 0x6b, 0xf2, 0x3a, 0x03, 0x1f, 0x06, 0xfb, 0xc5, 0x78, 0x06, 0x6c, 0x03, + 0xdc, 0x71, 0x0a, 0x7e, 0x91, 0x81, 0x5b, 0xb3, 0x88, 0xf1, 0x82, 0x6d, 0x97, 0x44, 0xbf, 0xdf, 0xcb, 0xb3, 0x30, + 0xd7, 0x38, 0xcb, 0x79, 0x6d, 0xc4, 0xee, 0xa8, 0x13, 0x06, 0x71, 0xbb, 0x1e, 0x82, 0xa1, 0x1a, 0x82, 0xa2, 0xa3, + 0x2d, 0xae, 0x5e, 0x5b, 0x4f, 0x61, 0x7a, 0xab, 0xea, 0x2b, 0x46, 0x7f, 0xca, 0x4c, 0x60, 0x21, 0xed, 0x9a, 0x63, + 0x5d, 0x73, 0x8c, 0xb4, 0xa7, 0xdf, 0x17, 0x0d, 0xf2, 0xd3, 0x59, 0x78, 0x10, 0xa8, 0x52, 0xe5, 0x4e, 0x59, 0x94, + 0xdb, 0xd2, 0xbc, 0x31, 0xac, 0x69, 0x9e, 0xd9, 0xb8, 0x2e, 0xb3, 0x5e, 0x2f, 0x0c, 0xd1, 0xa1, 0x11, 0x4b, 0xc5, + 0xda, 0x20, 0xbc, 0x8f, 0x49, 0x18, 0x5d, 0x81, 0xac, 0x2e, 0x3c, 0xe3, 0x04, 0xf9, 0x32, 0x30, 0x59, 0x53, 0xd5, + 0x7a, 0x39, 0xe1, 0xb1, 0x91, 0x2f, 0x1b, 0x41, 0x83, 0xbc, 0xa4, 0xa8, 0x37, 0x71, 0x3b, 0xf6, 0x51, 0x0b, 0xa9, + 0x71, 0x53, 0x4f, 0x7b, 0x9a, 0x54, 0xf4, 0x58, 0xaf, 0x52, 0xbf, 0xc0, 0xb2, 0xc0, 0x92, 0x0f, 0x42, 0x7b, 0x9a, + 0x56, 0x60, 0x86, 0x6b, 0x9b, 0xc1, 0xd0, 0x0f, 0x87, 0xb6, 0x08, 0x9d, 0x51, 0xdb, 0x12, 0xc2, 0xb6, 0x0d, 0xc2, + 0xca, 0x7b, 0x22, 0x5f, 0x3d, 0xf5, 0x18, 0xe1, 0x90, 0x9b, 0xcd, 0x2c, 0x1a, 0x18, 0xe6, 0x57, 0xb2, 0xd9, 0x3c, + 0xdd, 0x5c, 0x2f, 0x2a, 0xa6, 0x80, 0xed, 0xb6, 0x12, 0x04, 0xff, 0x7e, 0xcc, 0x66, 0xf8, 0x37, 0xeb, 0xf7, 0x7b, + 0x21, 0xfe, 0xe2, 0x18, 0xbc, 0x67, 0x2e, 0x16, 0xec, 0x23, 0xc8, 0x54, 0x48, 0x84, 0xa9, 0xca, 0xf8, 0x8d, 0x55, + 0x60, 0x01, 0x67, 0x3e, 0x50, 0xb9, 0x30, 0x93, 0xbd, 0xbc, 0xb8, 0x86, 0x1c, 0xb7, 0xc6, 0x29, 0x1b, 0x65, 0x89, + 0x72, 0x5d, 0xc8, 0x46, 0x71, 0x9e, 0xc5, 0x25, 0x2f, 0xb7, 0x5b, 0x7d, 0x38, 0x26, 0x05, 0x07, 0xf6, 0x54, 0x51, + 0xa9, 0x92, 0x75, 0xa4, 0xba, 0xf1, 0x97, 0x61, 0x81, 0xfb, 0x94, 0xcf, 0x0b, 0x43, 0x23, 0xf6, 0xe0, 0xf2, 0xce, + 0xd4, 0xad, 0xb4, 0x17, 0x16, 0xd0, 0xbc, 0x92, 0x90, 0x0d, 0xa6, 0x7a, 0x16, 0xad, 0x31, 0x13, 0xf3, 0x62, 0x01, + 0x61, 0x64, 0x8a, 0x05, 0xd8, 0x4c, 0x71, 0x01, 0x5e, 0x24, 0x31, 0xc0, 0xc4, 0xc5, 0x64, 0x0a, 0xf1, 0xcc, 0x55, + 0x39, 0xf1, 0xc2, 0xdc, 0x2f, 0x13, 0x87, 0x94, 0x01, 0xaf, 0x6a, 0x83, 0x26, 0x66, 0x1b, 0x8e, 0x3a, 0x41, 0x4e, + 0x4c, 0x7e, 0x3f, 0x55, 0x10, 0xe2, 0x4e, 0x1c, 0x09, 0x97, 0x15, 0xdb, 0x85, 0x97, 0x1d, 0x88, 0x31, 0x6a, 0x70, + 0xca, 0xcf, 0x0c, 0x8e, 0xc6, 0xe0, 0xdc, 0x78, 0x27, 0x48, 0x11, 0xc6, 0x64, 0x23, 0xd9, 0x95, 0x0c, 0xc5, 0x3c, + 0x5e, 0x80, 0xb2, 0x2e, 0x5e, 0x80, 0x65, 0x8d, 0x31, 0xc0, 0x04, 0x79, 0x15, 0xf7, 0x42, 0x3f, 0x51, 0x5c, 0x21, + 0xd2, 0xb3, 0x72, 0x7d, 0x54, 0xb4, 0x43, 0x5f, 0xe0, 0xf5, 0x5e, 0x99, 0xe3, 0x66, 0x3d, 0x16, 0x48, 0x6c, 0x08, + 0x18, 0x1b, 0xe9, 0x34, 0xd5, 0x5a, 0xf7, 0xc6, 0xcc, 0x03, 0x9f, 0x66, 0x23, 0x21, 0xab, 0xb3, 0x0b, 0x10, 0xa1, + 0xf8, 0x68, 0xf0, 0xc8, 0x2f, 0xe2, 0xce, 0x32, 0x6f, 0x6d, 0x8b, 0x4a, 0x76, 0xb4, 0x01, 0x90, 0x3e, 0x1d, 0x2d, + 0x4a, 0xc9, 0x29, 0x4a, 0x52, 0xbb, 0x4d, 0x01, 0x2b, 0xc9, 0x5f, 0xc0, 0x10, 0x6c, 0x6c, 0x4f, 0x38, 0x9d, 0x22, + 0xc4, 0x27, 0x9a, 0x22, 0xb2, 0x62, 0x58, 0x52, 0x1c, 0xdb, 0x12, 0x51, 0x3f, 0x6d, 0x59, 0x76, 0x30, 0x4c, 0x54, + 0xdc, 0x17, 0xa9, 0x47, 0x89, 0x82, 0x80, 0xea, 0x21, 0x07, 0x89, 0xad, 0x6d, 0x20, 0x3c, 0x20, 0x8f, 0xe8, 0x8d, + 0xf5, 0xf7, 0x59, 0xe7, 0xd9, 0x85, 0xe6, 0xa8, 0x5c, 0xef, 0x0a, 0x33, 0x46, 0x78, 0x92, 0x19, 0x98, 0x7c, 0xef, + 0x3c, 0x33, 0x6a, 0x8a, 0x9e, 0x87, 0x4f, 0x76, 0x8c, 0x11, 0xe9, 0xee, 0x19, 0x74, 0x13, 0xbc, 0xaa, 0xc3, 0x46, + 0xbb, 0x52, 0x10, 0x12, 0xa6, 0x16, 0x4d, 0xcc, 0x7a, 0xd6, 0x80, 0x7a, 0xbb, 0xed, 0xe9, 0xb9, 0xba, 0x7f, 0xee, + 0xb6, 0xdb, 0x1e, 0x76, 0xeb, 0x45, 0xda, 0x6d, 0x05, 0x5e, 0xa9, 0x0f, 0xda, 0xe3, 0xcf, 0xdd, 0xf8, 0x73, 0x83, + 0xe4, 0x51, 0x3a, 0x9a, 0x69, 0xeb, 0x83, 0x70, 0xb8, 0xe9, 0x5d, 0xa3, 0x49, 0xdf, 0x67, 0xa1, 0xa4, 0x2b, 0xd1, + 0xa8, 0xae, 0x76, 0x26, 0x95, 0x0f, 0xae, 0xff, 0x87, 0x57, 0x01, 0x1e, 0x71, 0x6a, 0x67, 0xdf, 0xdb, 0xa0, 0xa2, + 0xd1, 0x16, 0x8e, 0x14, 0xa1, 0x07, 0x24, 0xe1, 0xbe, 0x96, 0xb5, 0xb8, 0xcd, 0xd3, 0xec, 0x61, 0xfa, 0xf4, 0x3a, + 0xf5, 0xad, 0xee, 0xdd, 0x32, 0xcb, 0xcc, 0x81, 0x57, 0x51, 0x1c, 0xd0, 0xa8, 0x8b, 0xf6, 0x5d, 0x65, 0x65, 0x09, + 0x5e, 0x1e, 0x70, 0x7d, 0x3e, 0xe5, 0x3e, 0xdc, 0xdc, 0x65, 0xd5, 0xdc, 0xa4, 0xa7, 0xd9, 0x3c, 0x5b, 0x6c, 0xb7, + 0x21, 0xfe, 0xed, 0x6a, 0x91, 0xa3, 0xc9, 0x73, 0xd0, 0xe1, 0x61, 0xe4, 0x1e, 0xa6, 0x1b, 0xe7, 0x6d, 0xfe, 0x4f, + 0xa2, 0xe1, 0x24, 0x70, 0x0c, 0xf4, 0x62, 0xf6, 0x08, 0x64, 0x30, 0xc6, 0xa9, 0x5f, 0xcc, 0xf4, 0x9a, 0x81, 0xe8, + 0x5b, 0x22, 0x02, 0x1c, 0x5d, 0x6c, 0x24, 0x1a, 0x59, 0x70, 0x52, 0x13, 0xb0, 0xd8, 0xb4, 0xe5, 0x7d, 0xb0, 0xb4, + 0xad, 0x2a, 0xee, 0xbc, 0x25, 0xcd, 0x71, 0x1d, 0x38, 0xdb, 0x7e, 0x33, 0xc4, 0xa6, 0xec, 0x6a, 0x81, 0xdc, 0x2f, + 0xaf, 0x69, 0x6f, 0x5c, 0x27, 0x30, 0x6b, 0x9b, 0xda, 0x32, 0x7e, 0xb6, 0xf4, 0x9f, 0xf5, 0xe0, 0x2a, 0xe3, 0xa7, + 0xb9, 0xb1, 0x4a, 0xb0, 0xfb, 0xc6, 0xf3, 0x1d, 0x80, 0x70, 0x6c, 0x3e, 0x3d, 0x3e, 0xcd, 0x3c, 0x7a, 0x0c, 0x44, + 0xc7, 0x7c, 0x54, 0xba, 0x8f, 0xec, 0xee, 0xf5, 0x03, 0xe0, 0xcd, 0xab, 0x76, 0x41, 0xf3, 0x72, 0x01, 0x81, 0x44, + 0xbd, 0xf2, 0x0a, 0xcb, 0x67, 0xc6, 0xec, 0x12, 0xc8, 0x50, 0x41, 0xc0, 0x26, 0xa9, 0xeb, 0x5c, 0x88, 0x55, 0x87, + 0x95, 0xf9, 0x48, 0xc2, 0x8e, 0x42, 0x34, 0xe7, 0x0c, 0x66, 0xc1, 0x7f, 0x05, 0x83, 0x72, 0x10, 0x44, 0x41, 0x14, + 0x04, 0x64, 0x50, 0xc0, 0x2f, 0xc4, 0x19, 0x23, 0x18, 0xa3, 0x04, 0x3a, 0xfc, 0x8e, 0x33, 0x9f, 0x11, 0x79, 0xd9, + 0x08, 0x63, 0xe9, 0x06, 0xe0, 0x5c, 0xca, 0x9c, 0xc7, 0xe8, 0x63, 0xf1, 0x8e, 0xb3, 0x8c, 0xd0, 0x77, 0xde, 0xa9, + 0xfc, 0x88, 0x37, 0x82, 0xdb, 0xed, 0x0e, 0xdb, 0x2b, 0x1e, 0x66, 0xb4, 0x37, 0xa6, 0xef, 0x38, 0x89, 0xb2, 0x86, + 0xf3, 0x30, 0x87, 0x9e, 0x55, 0x96, 0xb5, 0xa2, 0x86, 0xdc, 0xa0, 0x58, 0x17, 0x59, 0x26, 0x27, 0xc3, 0x55, 0x73, + 0x2a, 0x70, 0xdd, 0xd9, 0xf5, 0x02, 0x92, 0x32, 0xa1, 0x59, 0x3a, 0x1b, 0xbe, 0xda, 0xb6, 0xec, 0x45, 0xeb, 0x14, + 0xf2, 0x1a, 0xa2, 0xa2, 0x1f, 0x3a, 0x02, 0x6a, 0x68, 0xc5, 0x65, 0x05, 0x2e, 0xbb, 0xa6, 0x3d, 0xdc, 0xb4, 0xc7, + 0x34, 0xe3, 0x03, 0xc4, 0x88, 0xe3, 0xd8, 0x32, 0xb0, 0x9b, 0x70, 0x78, 0x36, 0xce, 0xf7, 0x65, 0x97, 0xde, 0xba, + 0x5a, 0x3c, 0xc2, 0xda, 0xf3, 0x56, 0x48, 0x08, 0x90, 0x96, 0xa6, 0xd2, 0xed, 0x36, 0x08, 0x60, 0x80, 0xfb, 0xfd, + 0x1e, 0x70, 0xad, 0x86, 0x9d, 0x34, 0xb7, 0x66, 0x4b, 0xec, 0x15, 0x85, 0xc7, 0x40, 0x94, 0x9a, 0xff, 0x0c, 0x02, + 0x8a, 0xe7, 0x6e, 0x08, 0xf6, 0x95, 0xec, 0x68, 0x53, 0xf4, 0xfb, 0x2f, 0x0a, 0x7c, 0x40, 0x39, 0x28, 0x88, 0x75, + 0x75, 0xdc, 0x0a, 0xc3, 0x3e, 0xa9, 0x0f, 0x71, 0x2c, 0xf2, 0x2c, 0x74, 0x84, 0xa5, 0x32, 0x84, 0x85, 0x2b, 0x46, + 0x3a, 0x88, 0x83, 0x9a, 0x74, 0x0e, 0x56, 0xe5, 0x82, 0x0d, 0xf7, 0x7a, 0x9f, 0x00, 0x16, 0x3c, 0xf3, 0x86, 0xe5, + 0xbd, 0x07, 0x00, 0xd6, 0xeb, 0xe1, 0x42, 0x71, 0x2f, 0x5f, 0x35, 0xd0, 0x27, 0xf1, 0xa5, 0x65, 0xd7, 0x67, 0x5a, + 0x56, 0x32, 0x1a, 0x8d, 0xaa, 0x5a, 0x49, 0x3e, 0x1c, 0x79, 0x69, 0xa1, 0x56, 0xca, 0x38, 0xe5, 0x29, 0x58, 0x7a, + 0x1b, 0x4a, 0x37, 0x5f, 0xd0, 0x15, 0x17, 0xa9, 0xfa, 0xe9, 0xa1, 0x4d, 0x36, 0x88, 0x6b, 0xd6, 0xd4, 0x59, 0xd8, + 0xe1, 0x87, 0x80, 0x8f, 0xf6, 0x61, 0xe6, 0xd2, 0x35, 0x2c, 0x2d, 0x88, 0x23, 0xe3, 0x82, 0x87, 0x2e, 0x0f, 0x60, + 0xfd, 0x99, 0x43, 0x12, 0x3f, 0x85, 0x9f, 0x33, 0x93, 0xd6, 0xf1, 0x19, 0xce, 0x66, 0x54, 0xaa, 0x1b, 0x41, 0xfb, + 0x35, 0x24, 0x12, 0x83, 0x6c, 0xdc, 0x60, 0x28, 0x5a, 0x77, 0x1b, 0xb8, 0xf2, 0x5b, 0x7a, 0xe7, 0xd3, 0x20, 0xc0, + 0xb6, 0xc6, 0x62, 0x00, 0x30, 0x14, 0x7f, 0xa0, 0xaa, 0xc6, 0x5c, 0x51, 0x4c, 0xc3, 0x54, 0xa2, 0xbd, 0xe3, 0xb8, + 0x8e, 0x1a, 0x57, 0x59, 0xc1, 0x4a, 0x6b, 0xcb, 0xeb, 0xde, 0xd2, 0xc2, 0x96, 0x80, 0x6a, 0x30, 0xdc, 0x09, 0xe0, + 0x33, 0x22, 0xd5, 0x81, 0x20, 0xbb, 0x0f, 0x0e, 0x9a, 0xb3, 0x04, 0xcf, 0xc3, 0x10, 0xfe, 0xc0, 0xc2, 0x81, 0x65, + 0xa9, 0xfa, 0xb9, 0x9c, 0xc6, 0x70, 0xee, 0xe6, 0x6a, 0x87, 0xcf, 0x96, 0xa0, 0xc8, 0x53, 0x73, 0x6a, 0x2e, 0x5f, + 0x79, 0x63, 0xbf, 0xc7, 0x04, 0xf3, 0x98, 0xd9, 0x86, 0xdf, 0x7a, 0xba, 0xad, 0x2f, 0xac, 0x1b, 0x38, 0x69, 0x2f, + 0x9c, 0xf6, 0x62, 0xbb, 0x34, 0x10, 0x77, 0x75, 0x43, 0x88, 0xf0, 0x5a, 0x13, 0x8b, 0xac, 0x21, 0xd3, 0xb1, 0xd8, + 0x18, 0xaa, 0x4d, 0xc5, 0x73, 0xad, 0x10, 0x2f, 0xa7, 0xea, 0xc2, 0xd4, 0x4a, 0x65, 0xc2, 0x20, 0xcc, 0x94, 0xb0, + 0xa8, 0x32, 0xf0, 0xd9, 0xaf, 0x90, 0xe2, 0xda, 0x7a, 0xde, 0xe2, 0xf2, 0xcd, 0x4c, 0x9b, 0xed, 0xa7, 0xaf, 0xf2, + 0xf8, 0x72, 0xbb, 0x0d, 0xbb, 0x5f, 0x80, 0xf9, 0x65, 0xa9, 0x34, 0x6a, 0xe0, 0xf4, 0x10, 0xa2, 0x9f, 0xf3, 0x3d, + 0x39, 0x27, 0x8e, 0x93, 0x6b, 0x37, 0x6f, 0xb6, 0x93, 0x62, 0x04, 0x16, 0x70, 0xe2, 0x22, 0x1d, 0x68, 0xa9, 0xe0, + 0xb4, 0x65, 0xbc, 0xb7, 0xe9, 0x1d, 0xa5, 0xc2, 0xab, 0x85, 0x26, 0x21, 0x95, 0xbb, 0x97, 0xd8, 0x51, 0x03, 0xce, + 0x49, 0xdd, 0x41, 0xc0, 0x49, 0x4d, 0x37, 0xd6, 0x2a, 0x4e, 0x4d, 0x82, 0xf7, 0x4a, 0x0f, 0x5d, 0xa2, 0x9d, 0xb8, + 0xdd, 0xb6, 0x2a, 0x5b, 0xa8, 0x8f, 0x7b, 0x39, 0x4b, 0xd4, 0xf1, 0x80, 0x42, 0x17, 0x75, 0x34, 0xe4, 0x0b, 0x52, + 0xe8, 0x95, 0xa3, 0x55, 0xab, 0xbb, 0x92, 0x81, 0x52, 0xad, 0x82, 0xbc, 0x26, 0xd6, 0x5d, 0x2b, 0x6b, 0x2c, 0xae, + 0x9c, 0x90, 0xc2, 0x26, 0x7c, 0x69, 0x29, 0x16, 0x56, 0xb0, 0x37, 0xa6, 0xbe, 0x70, 0x89, 0xd0, 0x76, 0xb7, 0x21, + 0x26, 0x19, 0xac, 0x9b, 0xed, 0xf6, 0x75, 0x11, 0xce, 0xb3, 0x05, 0x95, 0xa3, 0x2c, 0x45, 0x08, 0x31, 0xe3, 0xa1, + 0x6b, 0xbb, 0x60, 0x26, 0x86, 0xba, 0xf6, 0x78, 0x49, 0xa6, 0x58, 0x9b, 0x24, 0x47, 0xf1, 0xb9, 0x2c, 0xd4, 0x5a, + 0x23, 0x04, 0x0f, 0xf7, 0x3f, 0x53, 0x88, 0xe1, 0x66, 0xd6, 0xdd, 0x6f, 0x3b, 0x37, 0xc4, 0x3f, 0x21, 0x90, 0x40, + 0xc9, 0x5e, 0x17, 0xa3, 0xf3, 0x4c, 0xa4, 0xb8, 0x53, 0x55, 0x54, 0x5c, 0xb5, 0x0e, 0x9a, 0x2d, 0xb7, 0xf7, 0x62, + 0x4b, 0x14, 0x20, 0xae, 0xb1, 0xd0, 0x8c, 0x67, 0xe5, 0x2c, 0x45, 0x32, 0x8a, 0x0d, 0x89, 0x4a, 0x2f, 0x2a, 0xba, + 0xcf, 0xd3, 0x98, 0x1e, 0xba, 0x35, 0x08, 0xae, 0x9a, 0x3b, 0x1b, 0x69, 0xbe, 0x20, 0x44, 0x4d, 0x80, 0x84, 0x8d, + 0x6a, 0x4e, 0xad, 0x4b, 0xf1, 0x30, 0xab, 0x7c, 0xa6, 0x0f, 0xe2, 0x4b, 0x01, 0x3c, 0xac, 0xb7, 0xbd, 0xaf, 0x84, + 0xc7, 0xda, 0xe0, 0xdb, 0xed, 0xf6, 0x52, 0xcc, 0x83, 0xc0, 0x63, 0x34, 0xbf, 0x53, 0x12, 0xf3, 0xde, 0x98, 0xc2, + 0x8a, 0xf7, 0x5d, 0xda, 0xba, 0x49, 0xad, 0xb5, 0x40, 0xdd, 0xe1, 0xfa, 0x80, 0xe7, 0x29, 0x71, 0xb4, 0xa3, 0x72, + 0x2a, 0xad, 0xae, 0x1c, 0xbb, 0x22, 0x30, 0x30, 0xf4, 0x0f, 0x29, 0xdb, 0x80, 0x39, 0x1e, 0x58, 0xdb, 0xa0, 0x9f, + 0x92, 0xd2, 0xc2, 0x8c, 0xd1, 0x98, 0x45, 0xae, 0xab, 0xe8, 0x80, 0xeb, 0xe8, 0xed, 0x3c, 0xfa, 0xdb, 0xb3, 0x31, + 0x2d, 0x62, 0x91, 0xca, 0x2b, 0x50, 0x41, 0x80, 0x32, 0x04, 0x0d, 0xff, 0x35, 0x35, 0x00, 0x0d, 0x82, 0x1b, 0x80, + 0x7f, 0x74, 0x3a, 0x0d, 0xda, 0x9a, 0x7c, 0x4c, 0x52, 0x55, 0xe4, 0xac, 0x0d, 0x65, 0xa6, 0x92, 0x43, 0xf2, 0xb8, + 0x04, 0x3c, 0x47, 0x6c, 0x96, 0xb2, 0xb9, 0x50, 0x9b, 0x4d, 0xbd, 0x56, 0xec, 0xc8, 0x6d, 0xa3, 0x68, 0xb3, 0x16, + 0xb5, 0x9d, 0xc4, 0x7c, 0x31, 0xbd, 0xb5, 0xc2, 0xc0, 0xa9, 0x69, 0xcd, 0xcd, 0x0e, 0x74, 0x9a, 0xad, 0xcf, 0xe4, + 0x26, 0x40, 0x1c, 0x60, 0xb8, 0x6e, 0xe7, 0x37, 0x0b, 0x42, 0x6f, 0xd9, 0xad, 0x15, 0xab, 0xde, 0x58, 0xb9, 0x88, + 0x49, 0xbb, 0x19, 0x4c, 0xe0, 0x32, 0xce, 0x0a, 0xfb, 0x42, 0xab, 0x1b, 0x8a, 0x8e, 0xb6, 0x49, 0xfb, 0x79, 0x47, + 0xbb, 0xe1, 0x82, 0x6f, 0xc5, 0x3a, 0xce, 0x0d, 0x69, 0xaa, 0xd0, 0xa3, 0x03, 0xbd, 0x1d, 0x02, 0x9a, 0xb3, 0x31, + 0x5d, 0xd2, 0x14, 0x2f, 0xd0, 0x74, 0x0d, 0x66, 0x29, 0x17, 0xd0, 0xd7, 0x6e, 0x9f, 0xe4, 0x0b, 0xd5, 0x13, 0xe1, + 0x2d, 0x51, 0xf0, 0xe5, 0x48, 0xc1, 0x2b, 0x2b, 0xe7, 0xb1, 0x99, 0x43, 0xc0, 0x63, 0x51, 0x25, 0x7a, 0x27, 0xc5, + 0x25, 0x28, 0x53, 0xe1, 0x08, 0x34, 0x55, 0x23, 0x96, 0x70, 0x80, 0xdb, 0x8b, 0xa7, 0x01, 0xa1, 0x20, 0xd5, 0x5d, + 0xdb, 0x15, 0x79, 0xcb, 0x8e, 0x36, 0xb7, 0x60, 0x16, 0x5b, 0xad, 0xcb, 0xd6, 0x57, 0x36, 0xd9, 0x7d, 0x5c, 0x13, + 0x6c, 0xbb, 0xb7, 0x41, 0xc2, 0x5b, 0x7a, 0x43, 0x36, 0x37, 0xfd, 0x7e, 0x08, 0xfd, 0x21, 0x54, 0x77, 0xe8, 0xb6, + 0xb3, 0x43, 0xb7, 0x3e, 0xf3, 0x6b, 0xf5, 0x7c, 0xca, 0x1b, 0xe2, 0x03, 0x9a, 0x68, 0xd1, 0x55, 0x7c, 0x07, 0x9b, + 0x3a, 0xaa, 0xa8, 0xaa, 0x3c, 0x4a, 0x28, 0xa8, 0x80, 0x33, 0x5e, 0x9e, 0x72, 0x8c, 0x6d, 0xaa, 0x9f, 0xde, 0x69, + 0x5e, 0x6d, 0x6d, 0xd6, 0x66, 0xb9, 0x3e, 0x07, 0x8b, 0x80, 0x73, 0x1e, 0x5d, 0x69, 0x5a, 0x72, 0xe9, 0x31, 0xf5, + 0x67, 0x38, 0x2a, 0xc1, 0x45, 0x9c, 0xe5, 0x3c, 0x0d, 0xe8, 0x45, 0xb3, 0xff, 0xa1, 0xb6, 0x95, 0x5a, 0x36, 0xce, + 0xdc, 0xeb, 0x90, 0x6c, 0xfe, 0xc7, 0x06, 0xea, 0x4d, 0x88, 0x11, 0x51, 0xcd, 0x82, 0x3e, 0x61, 0x10, 0x1b, 0x33, + 0x28, 0xd7, 0x49, 0xc2, 0xcb, 0x32, 0x30, 0x4a, 0xad, 0x35, 0x5b, 0x9b, 0xf3, 0xec, 0x11, 0x3b, 0x7a, 0xd4, 0x63, + 0xec, 0x96, 0xd0, 0x44, 0xeb, 0x84, 0x4c, 0x8d, 0x91, 0xa7, 0x05, 0xd2, 0x1d, 0x8a, 0xb2, 0x8b, 0xf0, 0x04, 0x85, + 0x2c, 0xed, 0x7d, 0x6e, 0x4e, 0x64, 0xf5, 0x8d, 0x36, 0xba, 0x88, 0x54, 0x22, 0xc8, 0xc6, 0x6f, 0x10, 0xb0, 0x17, + 0x9a, 0x1d, 0x90, 0xcd, 0x92, 0x9d, 0xd2, 0x33, 0x6b, 0x02, 0x03, 0xaf, 0x4f, 0x54, 0xa2, 0x19, 0x65, 0x45, 0x74, + 0x95, 0x91, 0xcb, 0x5d, 0x48, 0xa2, 0xb3, 0x90, 0xf8, 0xb9, 0x61, 0x69, 0x5d, 0x87, 0x28, 0x66, 0x36, 0x1b, 0x5e, + 0x75, 0xf7, 0x51, 0x63, 0x5b, 0x19, 0x9f, 0xea, 0x5b, 0x9b, 0x46, 0xa6, 0xd0, 0xd7, 0xe1, 0xa4, 0xdf, 0x87, 0xbf, + 0x9a, 0x7e, 0xe0, 0x2d, 0x05, 0x7f, 0xb1, 0x47, 0xa4, 0x4e, 0x58, 0x00, 0x70, 0x84, 0x39, 0xaf, 0x9a, 0x13, 0xf8, + 0x88, 0x1d, 0x6d, 0x1e, 0x85, 0xa7, 0x8d, 0x99, 0xbb, 0x0b, 0xf1, 0x52, 0x95, 0xf4, 0xbc, 0x79, 0x32, 0x03, 0xb1, + 0x0a, 0xcd, 0x7e, 0xbd, 0x65, 0x56, 0x9f, 0x00, 0x44, 0xea, 0xd6, 0x3a, 0x94, 0xe2, 0xc7, 0xa6, 0xcb, 0x64, 0x93, + 0xb2, 0x36, 0x13, 0xa5, 0x54, 0x24, 0xcd, 0x45, 0x00, 0xfd, 0x86, 0xe1, 0xa8, 0x01, 0xde, 0x5b, 0x8f, 0xbd, 0x19, + 0x1a, 0x6f, 0x4c, 0x0d, 0x3d, 0xdb, 0xe8, 0xe5, 0xed, 0x28, 0x84, 0x19, 0x8b, 0xe8, 0xd6, 0x1d, 0x8b, 0xe1, 0x29, + 0x3d, 0x81, 0x0a, 0xdf, 0x84, 0x18, 0x4d, 0x97, 0xd4, 0xf5, 0x74, 0xad, 0xb6, 0xd2, 0x0d, 0xa1, 0x39, 0x46, 0xf1, + 0xf1, 0xda, 0x76, 0x47, 0x8d, 0xd0, 0x9e, 0x50, 0x1e, 0xde, 0xd2, 0x8a, 0xde, 0x58, 0x16, 0xc1, 0xc9, 0x8f, 0xbd, + 0xfc, 0x84, 0x9e, 0x7b, 0x02, 0x93, 0xa2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x3d, 0xb5, 0x52, 0x0e, 0x4f, + 0xe1, 0x4b, 0x36, 0x20, 0x57, 0xd0, 0x8b, 0x35, 0x66, 0x47, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x37, 0x29, 0x65, + 0x88, 0xd6, 0x77, 0x0e, 0xe2, 0xe9, 0x1f, 0xa0, 0xe9, 0x83, 0xb4, 0x30, 0xa5, 0x6b, 0x14, 0xf0, 0x80, 0xbe, 0xa9, + 0xdf, 0xcf, 0xf1, 0xb9, 0xf6, 0x2c, 0xb1, 0xb0, 0xc7, 0x4b, 0x42, 0x97, 0x5e, 0xdc, 0x28, 0x90, 0x36, 0x3b, 0x56, + 0x01, 0x58, 0x91, 0x04, 0x1a, 0x91, 0x80, 0xa5, 0x8e, 0x27, 0x2e, 0xdb, 0xa0, 0x01, 0x49, 0x54, 0x52, 0xc8, 0x12, + 0x49, 0xe0, 0x87, 0x11, 0x84, 0x28, 0x8a, 0x41, 0xdc, 0xab, 0x97, 0x57, 0x5c, 0x53, 0x03, 0x4e, 0x14, 0xc1, 0x04, + 0xeb, 0x74, 0x0a, 0xc4, 0x56, 0xac, 0x57, 0xe0, 0x79, 0xe9, 0x38, 0x71, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x97, 0x4e, + 0xbb, 0xe5, 0xed, 0x89, 0x96, 0x2a, 0x36, 0xf7, 0x5e, 0x2c, 0x2c, 0xf7, 0x58, 0xf9, 0xdb, 0x81, 0xf6, 0xc2, 0x6a, + 0x47, 0x44, 0x0d, 0x56, 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xea, 0x5e, 0x39, 0x26, 0xa0, 0xa2, 0xab, 0xb8, 0x5a, + 0x46, 0xd9, 0x08, 0xfe, 0x6c, 0xb7, 0xc1, 0x7e, 0x00, 0x16, 0x90, 0xbf, 0xbe, 0xff, 0x39, 0xc2, 0xf0, 0x4c, 0xbf, + 0xbe, 0xff, 0x79, 0xbb, 0x7d, 0x36, 0x1e, 0x1b, 0xae, 0xc0, 0xa9, 0x75, 0x80, 0x3f, 0x30, 0x6c, 0x83, 0x5d, 0xb2, + 0xdb, 0xed, 0x33, 0xe0, 0x20, 0x14, 0xdb, 0x60, 0x76, 0xb1, 0x72, 0xe4, 0x52, 0xac, 0x86, 0xde, 0x91, 0x80, 0x55, + 0xb7, 0xc3, 0x52, 0xec, 0x52, 0x1f, 0x15, 0x82, 0x51, 0x2f, 0xfa, 0x97, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, + 0xb2, 0xaa, 0x56, 0x65, 0xb4, 0xbf, 0x1f, 0xaf, 0xb2, 0x51, 0x99, 0xc1, 0x36, 0x2f, 0xaf, 0x2f, 0x01, 0x50, 0x21, + 0xa0, 0x8d, 0x77, 0x6b, 0x91, 0x99, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0xad, 0x6e, 0x72, + 0x4a, 0xec, 0x03, 0xd8, 0x1c, 0x6e, 0xb7, 0x0d, 0x7e, 0xe1, 0x68, 0xf4, 0x6c, 0xb6, 0xcc, 0xb4, 0x41, 0x27, 0x37, + 0xfb, 0x9f, 0x44, 0x5e, 0x1a, 0x2a, 0x3e, 0xc9, 0xf4, 0x65, 0x06, 0x7c, 0x1e, 0x7b, 0x2b, 0x42, 0x9f, 0xe5, 0x6a, + 0xb4, 0x06, 0xd8, 0xd8, 0xec, 0xe2, 0x6e, 0x94, 0x72, 0x88, 0x48, 0x11, 0x58, 0x75, 0xcd, 0x32, 0x23, 0xbe, 0x4d, + 0xc5, 0x5d, 0x4b, 0x15, 0xf6, 0x56, 0x78, 0xce, 0x2a, 0xdc, 0x38, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x12, 0x85, 0xa8, + 0x1c, 0x8d, 0xe9, 0x9c, 0x40, 0x2a, 0xf3, 0x98, 0x50, 0xcc, 0xe1, 0xde, 0xfd, 0x9a, 0x3a, 0x73, 0x19, 0x5f, 0xb8, + 0xf7, 0xd2, 0x97, 0x99, 0xdc, 0x4a, 0x00, 0x45, 0x52, 0xb5, 0xff, 0xf2, 0x19, 0xa9, 0xf1, 0x3f, 0x53, 0xad, 0x01, + 0xe8, 0xfd, 0x02, 0x35, 0x39, 0x82, 0x80, 0xad, 0x98, 0xfa, 0x68, 0xfa, 0x56, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x82, + 0x6d, 0x54, 0xfc, 0x9c, 0xa8, 0xa2, 0x05, 0x4f, 0xd7, 0x22, 0x8d, 0x45, 0x72, 0x17, 0xf1, 0x7a, 0x8a, 0x25, 0x31, + 0x1b, 0x21, 0xeb, 0x97, 0x66, 0x17, 0x7e, 0x2e, 0x1a, 0x26, 0xe0, 0xb4, 0xf4, 0xb7, 0x95, 0xb7, 0x99, 0x2c, 0xe3, + 0x8c, 0x4c, 0xb9, 0x42, 0xec, 0xb6, 0xfa, 0x1e, 0x73, 0x82, 0x3f, 0x3d, 0x78, 0x4a, 0xe8, 0xad, 0x9c, 0x96, 0x08, + 0x4a, 0x27, 0x52, 0xeb, 0xaa, 0x89, 0xfd, 0x9a, 0x42, 0x14, 0x07, 0xc1, 0x20, 0x74, 0xa7, 0x69, 0x9f, 0xe2, 0xfb, + 0x6c, 0xd9, 0x6f, 0x4d, 0xd9, 0x92, 0x6c, 0x04, 0x74, 0x4c, 0x3a, 0x6f, 0x4f, 0x6f, 0xcf, 0xce, 0xbc, 0xdf, 0xa0, + 0x09, 0x07, 0xd5, 0x0d, 0xb4, 0xab, 0x20, 0xd3, 0x18, 0xc5, 0x66, 0x31, 0xd6, 0x6e, 0x4d, 0x44, 0x10, 0x74, 0xba, + 0x9c, 0x85, 0xed, 0x76, 0x42, 0x7c, 0x09, 0x24, 0x50, 0xe0, 0xca, 0x45, 0x39, 0x09, 0x89, 0xba, 0x90, 0xe9, 0xc9, + 0xba, 0x96, 0x2c, 0xd0, 0x6b, 0xec, 0x20, 0xa0, 0xc7, 0xdc, 0x3e, 0x05, 0xf4, 0x7d, 0xc1, 0x8e, 0xf9, 0x20, 0x18, + 0x62, 0x7c, 0xd5, 0x80, 0xde, 0x48, 0xf5, 0x08, 0x1e, 0xc2, 0xc0, 0x72, 0xd1, 0x57, 0x05, 0x43, 0x58, 0xa1, 0xbf, + 0x52, 0x36, 0xf9, 0xe6, 0xef, 0x6e, 0x7e, 0xcf, 0xb5, 0x98, 0x1d, 0x84, 0xe2, 0xf6, 0x7a, 0x02, 0xc4, 0xaf, 0xe2, + 0x57, 0x60, 0x5d, 0xad, 0x25, 0xde, 0x6e, 0x7a, 0xfe, 0x14, 0xbe, 0x1c, 0xdd, 0x7e, 0x52, 0x9a, 0x4f, 0x20, 0x48, + 0x8d, 0x93, 0x94, 0xbb, 0xef, 0x3e, 0x4a, 0x57, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xdd, 0x5b, 0xc9, 0x59, 0x53, 0xf8, + 0x8f, 0x75, 0xbe, 0xc7, 0xd8, 0x21, 0xf2, 0x14, 0xa7, 0xbf, 0x01, 0x86, 0x7d, 0xe7, 0xdf, 0xca, 0xac, 0x21, 0xd1, + 0xb9, 0xfa, 0x08, 0xe8, 0xff, 0x58, 0x8f, 0xdf, 0x31, 0x4a, 0xfa, 0x92, 0x38, 0x47, 0xb8, 0x22, 0x5e, 0xa2, 0xa9, + 0x5e, 0x6f, 0x5c, 0xd3, 0x4f, 0x85, 0x79, 0xa1, 0x15, 0x1c, 0xf6, 0xad, 0x51, 0x78, 0xe0, 0x99, 0xf7, 0x9b, 0x68, + 0x08, 0xba, 0x7f, 0xc7, 0xbd, 0xf1, 0x9b, 0x60, 0x19, 0xde, 0x94, 0xb3, 0xcc, 0xdc, 0xe1, 0x6e, 0x32, 0x91, 0xca, + 0x1b, 0xc6, 0x82, 0xb5, 0x50, 0xe6, 0xab, 0x69, 0x30, 0xdb, 0xd4, 0x91, 0x4a, 0x76, 0xdf, 0xbf, 0x6d, 0x9c, 0xb0, + 0xd9, 0x20, 0x38, 0xad, 0x64, 0x11, 0x5f, 0xf2, 0x60, 0xaa, 0x55, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0xe3, + 0xb4, 0x77, 0xf0, 0x64, 0xa9, 0x99, 0x09, 0x71, 0x6d, 0x75, 0x16, 0xf0, 0xd6, 0x8c, 0xe6, 0x71, 0x05, 0xbb, 0xcc, + 0x57, 0x52, 0xfc, 0xd9, 0x92, 0x64, 0x63, 0xfd, 0x0d, 0x19, 0xb6, 0x95, 0xcf, 0x9c, 0x03, 0xc6, 0xcc, 0x8d, 0x54, + 0x41, 0xee, 0x7a, 0xc0, 0x08, 0x21, 0x11, 0x10, 0xce, 0x62, 0xe2, 0x4e, 0x98, 0xf0, 0x8f, 0x2e, 0x30, 0x4e, 0x8c, + 0x81, 0x71, 0x3e, 0xca, 0x90, 0xd3, 0x63, 0x3e, 0x48, 0x1a, 0xb3, 0xf5, 0xa7, 0x2a, 0x91, 0x5e, 0x4b, 0x42, 0xcf, + 0xe0, 0xf7, 0xb8, 0xc5, 0x03, 0x35, 0x82, 0x53, 0xba, 0x9b, 0xd3, 0xfe, 0xab, 0x82, 0x0c, 0xff, 0x02, 0xef, 0xae, + 0xd8, 0x5e, 0x96, 0x13, 0x58, 0xdc, 0xb1, 0x57, 0x3c, 0xcd, 0x55, 0x8b, 0x13, 0xe2, 0x11, 0x8b, 0xdc, 0x27, 0x16, + 0x30, 0xa2, 0x86, 0xd1, 0xf8, 0xf1, 0xf4, 0xe4, 0xad, 0xc6, 0x6c, 0xca, 0xfd, 0x0f, 0x60, 0x44, 0xb5, 0xb4, 0xdd, + 0x0e, 0xf8, 0x72, 0x84, 0x06, 0xdb, 0xa9, 0x1b, 0xec, 0x7e, 0xdf, 0xa4, 0x1d, 0x95, 0x5e, 0x36, 0x27, 0x06, 0xdd, + 0x51, 0xda, 0x2c, 0x95, 0x41, 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0x6b, 0xc4, 0xaa, 0xde, 0x87, 0xe1, 0x92, 0xc6, 0x56, + 0x56, 0x6e, 0x77, 0x13, 0x8e, 0x6c, 0x02, 0x5c, 0x9f, 0x82, 0xb2, 0x6a, 0xce, 0x41, 0x0b, 0x3a, 0x13, 0x38, 0xa2, + 0xed, 0x36, 0x84, 0x08, 0x1c, 0xc5, 0x70, 0x32, 0x0b, 0x8b, 0xe1, 0x50, 0x0d, 0x7c, 0x41, 0x48, 0xf4, 0xa9, 0x98, + 0x67, 0x0b, 0x85, 0xd8, 0xe3, 0xef, 0xa4, 0xdf, 0x0a, 0xc5, 0x29, 0xf7, 0x7e, 0x13, 0x64, 0xf3, 0x7b, 0x8a, 0x31, + 0x07, 0x9d, 0x66, 0x33, 0x03, 0x09, 0xeb, 0x71, 0x45, 0xd4, 0x3a, 0xb2, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, + 0x75, 0x8b, 0x27, 0xd6, 0x33, 0x7a, 0x0f, 0x2a, 0x41, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x3e, 0x89, 0x50, 0x52, + 0x4e, 0x9a, 0xcc, 0x8c, 0x15, 0x0d, 0x16, 0x20, 0x24, 0x8d, 0xcb, 0xea, 0x8d, 0x4c, 0xb3, 0x8b, 0x0c, 0x10, 0x13, + 0x9c, 0xff, 0x9c, 0x6c, 0xbc, 0x79, 0xae, 0xe6, 0xa5, 0x2b, 0x71, 0x66, 0x61, 0x3e, 0xba, 0xde, 0xd2, 0x82, 0x44, + 0x05, 0xd0, 0x28, 0x5f, 0xcb, 0xf3, 0xd3, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x65, 0x3b, 0xc4, 0x8f, 0x58, 0x45, + 0xbc, 0xd3, 0xba, 0x52, 0x22, 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xa8, 0xe1, 0x83, 0x30, 0x83, 0x4e, + 0xf2, 0x83, 0x9e, 0xd1, 0xb1, 0x35, 0x90, 0xf4, 0xb5, 0x08, 0xbe, 0x46, 0x47, 0x3a, 0x51, 0xa6, 0x91, 0x98, 0x42, + 0xa2, 0x5f, 0x2f, 0xb4, 0xc6, 0x32, 0xca, 0xbe, 0x22, 0xff, 0x7b, 0xdd, 0xbd, 0xdf, 0xc4, 0x76, 0x0b, 0x93, 0xec, + 0x79, 0x5c, 0xc1, 0xa6, 0x46, 0xad, 0x10, 0xce, 0xce, 0x71, 0x85, 0xda, 0xb1, 0x5e, 0x58, 0x02, 0x79, 0x00, 0x5b, + 0x91, 0x06, 0x65, 0x90, 0xec, 0x53, 0x31, 0x17, 0x0b, 0x27, 0xca, 0x91, 0x0a, 0xef, 0x4b, 0x8e, 0x52, 0x0e, 0x57, + 0xb1, 0xb0, 0x60, 0xc8, 0xaf, 0x8e, 0x2e, 0x0a, 0x79, 0x05, 0x92, 0x12, 0xc3, 0x50, 0x59, 0x5e, 0x17, 0x57, 0x6d, + 0x49, 0x68, 0xef, 0x0c, 0x40, 0x58, 0x0a, 0x10, 0xbc, 0x34, 0x6a, 0x88, 0xd9, 0x46, 0xed, 0xae, 0xe8, 0x5e, 0x72, + 0x40, 0x9d, 0xee, 0xda, 0xad, 0x37, 0x65, 0x9b, 0x6d, 0xc5, 0x85, 0x7f, 0x42, 0xe9, 0xc7, 0x7c, 0x50, 0xf8, 0x54, + 0x02, 0x37, 0xbe, 0xda, 0x64, 0xd9, 0xc5, 0x1d, 0x2e, 0xfd, 0xaa, 0x31, 0x7e, 0xfd, 0x7e, 0x4f, 0x2d, 0x84, 0x46, + 0x2a, 0x30, 0xdf, 0x3e, 0x33, 0x55, 0x19, 0x4d, 0xa9, 0xbd, 0x04, 0x57, 0xce, 0x7e, 0x04, 0x15, 0x71, 0x5d, 0x91, + 0xc9, 0xd4, 0x00, 0xed, 0x79, 0x59, 0xe1, 0x56, 0x16, 0xe0, 0xb1, 0x13, 0x90, 0xed, 0x96, 0x87, 0x81, 0x3e, 0x74, + 0x02, 0x7f, 0x4b, 0x9e, 0x22, 0xb3, 0x66, 0x1f, 0x7f, 0xd1, 0x82, 0x7f, 0x6c, 0xc1, 0xcf, 0x28, 0xee, 0xb4, 0x32, + 0xff, 0x56, 0x5a, 0xb7, 0xb8, 0x7f, 0x27, 0xd3, 0x84, 0xa2, 0x32, 0xa1, 0xf6, 0x2b, 0xfd, 0x97, 0x09, 0x96, 0xa4, + 0xb2, 0x7f, 0x90, 0xf0, 0xc1, 0xac, 0xf1, 0xc4, 0x1a, 0x4f, 0x86, 0xd3, 0xad, 0x34, 0x0c, 0x01, 0x0a, 0xfd, 0xbc, + 0xcc, 0x15, 0xd5, 0xcf, 0xbf, 0xac, 0xf9, 0x9a, 0x37, 0x5b, 0x6c, 0x93, 0x1e, 0x68, 0xb0, 0x97, 0x47, 0x53, 0x0a, + 0x27, 0x51, 0xe7, 0x46, 0xa2, 0x2e, 0x6a, 0x96, 0xa1, 0x3a, 0xc1, 0xab, 0x79, 0xaa, 0x87, 0xbd, 0x99, 0x88, 0xd6, + 0x4a, 0xca, 0x12, 0x03, 0xd6, 0x3a, 0xf2, 0x90, 0xdc, 0xad, 0x75, 0xdc, 0x69, 0xa8, 0x4b, 0x53, 0x28, 0x01, 0x56, + 0xb8, 0x00, 0x47, 0xd0, 0xcf, 0x45, 0xc8, 0xe1, 0x9a, 0xaa, 0xf4, 0x0b, 0x9a, 0x92, 0x27, 0x9e, 0xa2, 0x56, 0x2b, + 0xd2, 0xed, 0x47, 0x39, 0x76, 0xc3, 0x37, 0x4e, 0xc8, 0x89, 0x11, 0xfa, 0xbb, 0x63, 0x29, 0x67, 0x68, 0xf1, 0xa0, + 0x4e, 0xb0, 0x5e, 0xde, 0x52, 0xa0, 0x98, 0xa3, 0xcb, 0xaa, 0x6b, 0x5e, 0xa3, 0xed, 0xcb, 0xb2, 0xdf, 0xcf, 0x6d, + 0x3d, 0x29, 0x3b, 0xda, 0x2c, 0xcd, 0x3e, 0x44, 0xc5, 0x14, 0xee, 0xfa, 0x44, 0xf3, 0x57, 0xa1, 0xbe, 0x6a, 0xcb, + 0x9c, 0x8f, 0x38, 0xe2, 0x62, 0xe4, 0xa4, 0xfe, 0x45, 0x4d, 0xbd, 0x12, 0xf7, 0xab, 0x4a, 0xbe, 0x13, 0xc6, 0x8a, + 0xd1, 0x01, 0xf5, 0xa7, 0x4a, 0xe5, 0xfd, 0xb2, 0x00, 0xb8, 0x27, 0xc1, 0x3e, 0x81, 0x7d, 0x85, 0x46, 0xf8, 0x6d, + 0x09, 0xf8, 0x37, 0x8a, 0x1b, 0xb0, 0x0a, 0x0c, 0x30, 0x9a, 0x6c, 0xcf, 0x69, 0x02, 0x07, 0x9c, 0xd0, 0x2a, 0x0a, + 0x2a, 0xcc, 0xd0, 0x50, 0x5b, 0x18, 0x3d, 0x45, 0x19, 0xb7, 0xca, 0xec, 0xdd, 0x18, 0x3b, 0x2d, 0xf0, 0x1a, 0xfe, + 0x7c, 0x5e, 0xe8, 0x61, 0xa3, 0x0e, 0xd2, 0xa3, 0x93, 0x98, 0xfe, 0xb8, 0x85, 0x93, 0x9b, 0x85, 0xb3, 0xac, 0x59, + 0x02, 0xdd, 0x81, 0x0b, 0x62, 0xdc, 0xef, 0xe7, 0x70, 0x64, 0x9a, 0x91, 0x2f, 0x58, 0x4e, 0x63, 0xb6, 0xa4, 0xda, + 0xd3, 0xee, 0xb2, 0x0a, 0x73, 0xba, 0xb4, 0x32, 0xde, 0x94, 0x81, 0xca, 0x68, 0xbb, 0x0d, 0xe1, 0x4f, 0xb7, 0xb5, + 0x4b, 0x3a, 0x5f, 0x42, 0x06, 0xf8, 0x03, 0x12, 0x51, 0xc4, 0xbe, 0xfe, 0xb7, 0x1a, 0xa7, 0xf4, 0x44, 0x69, 0xcd, + 0x12, 0xba, 0x66, 0xba, 0x7e, 0x7a, 0xc1, 0xd6, 0x8d, 0xa5, 0xb0, 0xdd, 0x86, 0xcd, 0x04, 0xa6, 0x39, 0x57, 0x32, + 0xbd, 0x40, 0x9d, 0x14, 0x50, 0xb1, 0xf0, 0x02, 0x97, 0x5f, 0x4a, 0x28, 0x34, 0x77, 0xbe, 0x5c, 0x18, 0x25, 0x26, + 0xb4, 0x4a, 0x7e, 0xf9, 0x50, 0x99, 0xaf, 0x8d, 0x47, 0xdc, 0xbf, 0xd2, 0x30, 0x31, 0x45, 0xa2, 0x42, 0x74, 0xf6, + 0x1b, 0xc8, 0x72, 0x04, 0xe0, 0x58, 0x9e, 0xca, 0x9a, 0xfe, 0x98, 0x42, 0x1c, 0x74, 0x68, 0xd0, 0xbb, 0x42, 0x5e, + 0x65, 0x25, 0x0f, 0xf1, 0x9e, 0xe0, 0x69, 0x46, 0xef, 0x37, 0xf8, 0xd0, 0xd6, 0x1e, 0x3d, 0x41, 0x36, 0x9e, 0x72, + 0xbf, 0xfe, 0x4e, 0x84, 0x73, 0x88, 0x56, 0xb9, 0xa0, 0x5a, 0x5d, 0xed, 0x00, 0xa8, 0x3c, 0xdb, 0xab, 0x47, 0x70, + 0xba, 0xe9, 0xeb, 0x5b, 0x15, 0x3a, 0x73, 0x00, 0x69, 0x0f, 0xc9, 0xba, 0xe6, 0x7a, 0x07, 0xb8, 0x23, 0xb1, 0x5a, + 0x03, 0x8d, 0x75, 0x5b, 0xb3, 0xd3, 0x1e, 0xc5, 0x63, 0x22, 0x33, 0x63, 0x91, 0x62, 0xcc, 0xdd, 0x3a, 0x2d, 0x8a, + 0x36, 0x68, 0x86, 0xb0, 0x7b, 0xd7, 0xe1, 0xeb, 0x56, 0x84, 0xf5, 0xfb, 0x6d, 0x5f, 0x60, 0x34, 0x8c, 0xb9, 0x76, + 0xcf, 0x33, 0x74, 0xc3, 0x06, 0xdb, 0xc8, 0x79, 0x88, 0x7c, 0x98, 0xa9, 0x03, 0x51, 0xd6, 0xd6, 0x80, 0xed, 0x11, + 0xd7, 0x9b, 0x56, 0xf1, 0xf3, 0x2a, 0xe6, 0x6c, 0xcf, 0x1a, 0xa7, 0xb4, 0xbe, 0xc6, 0x35, 0xc7, 0x55, 0x21, 0xa2, + 0xb6, 0x9e, 0xf1, 0x30, 0xec, 0x7c, 0x81, 0x3b, 0xb3, 0xc2, 0xe0, 0x45, 0x58, 0x2a, 0xd9, 0xa9, 0x5c, 0x7f, 0x0e, + 0x5b, 0x1c, 0xa4, 0xf2, 0xa5, 0xd7, 0xdf, 0x7f, 0xf9, 0xe2, 0x0b, 0x74, 0x53, 0x73, 0x7e, 0x04, 0x41, 0x26, 0xd0, + 0x21, 0x4b, 0xa9, 0x1e, 0xbf, 0x2b, 0x80, 0xda, 0xc3, 0x3c, 0x7c, 0x57, 0x30, 0x11, 0x5f, 0x67, 0x97, 0x71, 0x25, + 0x8b, 0xd1, 0x35, 0x17, 0xa9, 0x2c, 0xac, 0xd4, 0x38, 0x38, 0x5e, 0xad, 0x72, 0x1e, 0x80, 0xa9, 0xbc, 0x65, 0x94, + 0x6d, 0x65, 0x99, 0x1e, 0x5c, 0x2d, 0x4f, 0xaf, 0xb4, 0xe8, 0xbc, 0xbc, 0xbe, 0x0c, 0x22, 0xfc, 0x75, 0x6e, 0x7e, + 0x5c, 0xc5, 0xe5, 0xc7, 0x20, 0xb2, 0x36, 0x75, 0xe6, 0x07, 0x4a, 0xe5, 0xc1, 0x7f, 0x0a, 0x64, 0xba, 0xdf, 0x15, + 0x60, 0x99, 0x6d, 0x2b, 0x3e, 0x8c, 0xb1, 0xd6, 0xe1, 0x84, 0xcc, 0x54, 0x89, 0xde, 0xbb, 0x64, 0x5d, 0x80, 0xb5, + 0x9f, 0xc2, 0x32, 0x56, 0xb9, 0x66, 0x58, 0x99, 0xaa, 0xc8, 0xcc, 0xca, 0x9a, 0xed, 0x87, 0xd6, 0x89, 0x66, 0x8e, + 0xde, 0x02, 0xfa, 0x81, 0xec, 0x5f, 0xd2, 0x72, 0xcd, 0x3c, 0x1f, 0x9b, 0xc6, 0xeb, 0x47, 0xfb, 0x97, 0x6e, 0xc1, + 0xde, 0xda, 0x3b, 0x39, 0x0a, 0x13, 0xc1, 0xb3, 0xd6, 0x8c, 0x2f, 0xf2, 0xac, 0x80, 0x95, 0x33, 0x19, 0x8f, 0xa9, + 0xb7, 0xb4, 0x5a, 0x37, 0x47, 0x87, 0xe4, 0x9a, 0x3d, 0xae, 0x1e, 0x73, 0xb2, 0xcf, 0x5b, 0xa6, 0xb6, 0x6d, 0xeb, + 0x38, 0x4f, 0x93, 0xaf, 0x4c, 0xf7, 0xc5, 0xda, 0x46, 0x44, 0x57, 0xce, 0x7d, 0xce, 0x2b, 0xb8, 0xf5, 0x4d, 0x69, + 0xe8, 0xb5, 0x04, 0x20, 0x3a, 0x6d, 0xc0, 0x5f, 0xb0, 0x72, 0x3d, 0xaa, 0x78, 0x59, 0x81, 0x84, 0x05, 0x45, 0x78, + 0x53, 0xec, 0x4d, 0xe1, 0x6e, 0x9c, 0x9e, 0xc3, 0x0e, 0x5c, 0x4c, 0xd1, 0x1d, 0x27, 0x26, 0xb3, 0xd2, 0x68, 0x45, + 0x23, 0xfd, 0xcb, 0xf5, 0x25, 0xd6, 0x7d, 0xd1, 0xca, 0x3c, 0x9b, 0x53, 0x61, 0xb1, 0xbb, 0xca, 0xa5, 0x13, 0xf5, + 0x5b, 0x26, 0x5c, 0xb9, 0x12, 0x04, 0x64, 0x5a, 0xb0, 0x5e, 0x61, 0x76, 0x91, 0x5c, 0x03, 0x21, 0x03, 0xc3, 0xd7, + 0x60, 0x2d, 0x4a, 0x6e, 0xac, 0x60, 0xbd, 0x7b, 0xbe, 0x4e, 0x10, 0x52, 0xf0, 0xc0, 0x4d, 0xd0, 0x0f, 0xad, 0x9b, + 0xb7, 0xa3, 0x44, 0x19, 0xc4, 0xe3, 0xd6, 0x4e, 0x39, 0x48, 0x20, 0x00, 0xf7, 0x54, 0x85, 0xe0, 0x50, 0x20, 0xeb, + 0xe0, 0x6a, 0xc6, 0x11, 0x5c, 0x5d, 0x39, 0x73, 0x71, 0x03, 0xb0, 0xae, 0xfc, 0xb9, 0x6c, 0x70, 0x61, 0x3d, 0xa2, + 0xca, 0x9c, 0x71, 0x8a, 0x41, 0x8c, 0x2c, 0x41, 0x5f, 0x59, 0x4a, 0x7b, 0x09, 0x9a, 0xc6, 0x2b, 0xb6, 0x52, 0x3e, + 0x00, 0xf4, 0x9c, 0xad, 0x94, 0xb1, 0x3f, 0x7e, 0x7d, 0xc6, 0x56, 0x5a, 0x1a, 0x3c, 0xbd, 0x9a, 0x9d, 0xcf, 0xce, + 0x06, 0xec, 0x20, 0x0a, 0xb5, 0x01, 0x43, 0xe0, 0x90, 0xf8, 0x83, 0x41, 0xa8, 0xf1, 0x4e, 0x06, 0x2a, 0x20, 0x16, + 0xf1, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, 0x43, 0x0c, 0x7e, 0xd5, 0x7c, 0x41, 0x02, 0x42, 0x4d, 0x69, 0xe8, 0xf2, + 0x18, 0x0e, 0x27, 0x7b, 0x13, 0x48, 0xc5, 0xcc, 0x4c, 0x15, 0xc6, 0xc6, 0x24, 0x82, 0x78, 0xa7, 0x9d, 0xf5, 0x42, + 0xb9, 0xdd, 0x35, 0x1a, 0xc8, 0x95, 0xc1, 0x17, 0x55, 0x3c, 0xd9, 0x1b, 0x76, 0x55, 0x8c, 0xa3, 0x70, 0x6d, 0x94, + 0x6f, 0x67, 0x87, 0x00, 0x5e, 0x7b, 0x36, 0xf4, 0xe5, 0x12, 0x67, 0xfb, 0x4f, 0xc9, 0xe3, 0xa7, 0x84, 0x9e, 0xb1, + 0xb3, 0xaf, 0x9e, 0xd2, 0x33, 0x45, 0x4e, 0xf6, 0x26, 0xd1, 0x35, 0xb3, 0x98, 0x2f, 0x07, 0xaa, 0x09, 0xf4, 0x72, + 0xb4, 0x16, 0x6a, 0x81, 0x69, 0x87, 0xa6, 0xf0, 0xdb, 0xf1, 0x5e, 0x30, 0xb8, 0x6e, 0x37, 0xfd, 0xba, 0xdd, 0x56, + 0xcf, 0xab, 0x6b, 0xef, 0x20, 0xda, 0x2d, 0x66, 0xf2, 0xf7, 0xf1, 0x9e, 0x9b, 0x03, 0xac, 0xef, 0xe1, 0x31, 0x31, + 0x4d, 0xda, 0x19, 0x15, 0xbf, 0xa6, 0x27, 0xd8, 0x87, 0x66, 0x91, 0x1d, 0x7d, 0x18, 0xfe, 0x5b, 0x9d, 0xa8, 0xcf, + 0xbe, 0x3a, 0x00, 0x72, 0x04, 0x32, 0x50, 0x2c, 0x11, 0xcc, 0x70, 0xa0, 0x29, 0xa0, 0x20, 0xd3, 0xe3, 0x4e, 0xf5, + 0xf0, 0xab, 0x51, 0x53, 0x33, 0x72, 0x0d, 0x53, 0x83, 0x6d, 0xc1, 0x0f, 0x54, 0x37, 0xf4, 0x37, 0x1a, 0xdd, 0x48, + 0x3b, 0x99, 0x99, 0x97, 0xd4, 0xc6, 0x75, 0xbb, 0x86, 0x00, 0xc6, 0x0e, 0x5e, 0x50, 0xb2, 0xaf, 0x0f, 0x2f, 0xf7, + 0x70, 0x15, 0x01, 0x4a, 0x16, 0x0b, 0xbe, 0x1e, 0x5c, 0xea, 0xcd, 0xbd, 0x17, 0x90, 0xc1, 0xd7, 0xc1, 0xd1, 0xd7, + 0x03, 0x39, 0x08, 0x0e, 0xf7, 0x2f, 0x8f, 0x02, 0x67, 0xdc, 0x0f, 0x21, 0x1e, 0x55, 0x45, 0x31, 0x13, 0xa6, 0x8a, + 0xc4, 0xd6, 0x9e, 0xdb, 0x7a, 0x95, 0xf1, 0x19, 0x4d, 0xa7, 0x16, 0xf9, 0x3b, 0x4c, 0x59, 0x6c, 0x7e, 0x07, 0x13, + 0x7e, 0x15, 0x44, 0x2e, 0x08, 0xea, 0x2c, 0x8f, 0x62, 0xba, 0x64, 0xb7, 0x22, 0x4c, 0x69, 0xb2, 0x9f, 0x13, 0x12, + 0x85, 0x4b, 0x05, 0x9e, 0xa7, 0x5e, 0x27, 0x10, 0xc7, 0xd5, 0x7d, 0x7e, 0x2b, 0xc2, 0x25, 0xcd, 0xf7, 0x13, 0xd2, + 0x2a, 0xc2, 0x45, 0x64, 0xd9, 0xd4, 0xf4, 0x82, 0x85, 0x2b, 0x7a, 0x09, 0xcc, 0x94, 0x5c, 0x87, 0x97, 0xc0, 0xe5, + 0xad, 0xe7, 0xab, 0x05, 0xbb, 0x6c, 0x48, 0xdf, 0x0c, 0x5f, 0x7c, 0x61, 0x7d, 0xf2, 0x80, 0x87, 0x74, 0x7e, 0x78, + 0x29, 0xd8, 0x00, 0x5c, 0x67, 0xfc, 0xe6, 0x3b, 0x79, 0xab, 0xe7, 0xa5, 0x3d, 0xc5, 0x38, 0x33, 0xed, 0xc4, 0xa4, + 0x9d, 0x90, 0xfb, 0xf7, 0xed, 0x4d, 0x6c, 0x4e, 0xf6, 0x32, 0x5a, 0x2b, 0x97, 0x55, 0xcb, 0x90, 0x14, 0x6b, 0x86, + 0xfc, 0x3d, 0x4a, 0x4e, 0xad, 0xc0, 0x93, 0x5d, 0xf0, 0x2a, 0x59, 0xfa, 0x07, 0x95, 0xb5, 0x1a, 0xb0, 0xc7, 0x88, + 0x65, 0xa1, 0x70, 0xec, 0xdf, 0x64, 0xac, 0x58, 0xfb, 0x02, 0x8d, 0x18, 0xb9, 0xb7, 0x37, 0x19, 0xf3, 0x62, 0xae, + 0x26, 0x6b, 0x2f, 0x54, 0x9d, 0x97, 0x9e, 0xb7, 0x78, 0x2f, 0xa7, 0xd4, 0x30, 0x12, 0xd1, 0xbd, 0xb1, 0x32, 0xa3, + 0x54, 0x89, 0x5a, 0x83, 0x46, 0x04, 0x1b, 0xbb, 0xe0, 0x97, 0xe0, 0x84, 0xca, 0x3d, 0x75, 0xb6, 0x6f, 0xa7, 0x54, + 0x7a, 0xc0, 0xb2, 0xd4, 0xa8, 0xca, 0xdd, 0x32, 0x93, 0xac, 0x1a, 0x04, 0xa3, 0x3f, 0x4b, 0x29, 0x66, 0x78, 0x67, + 0x64, 0xc1, 0x14, 0xac, 0x04, 0x55, 0x2d, 0xc3, 0x72, 0xc8, 0x51, 0x8b, 0x67, 0x7c, 0x52, 0xa5, 0xfe, 0xd1, 0x11, + 0x24, 0x77, 0xb9, 0x6e, 0x05, 0xc9, 0x7d, 0x3a, 0x7e, 0xaa, 0x07, 0x3a, 0x5d, 0x6b, 0xc7, 0x43, 0x9f, 0xdf, 0x46, + 0x7c, 0x6d, 0xdd, 0x7b, 0xaa, 0xb5, 0x0a, 0x65, 0xa0, 0xc5, 0x8a, 0xca, 0x95, 0x5a, 0xd2, 0xfb, 0x5d, 0x04, 0xc0, + 0x22, 0x36, 0x66, 0xe3, 0x5d, 0xdb, 0xac, 0x10, 0x34, 0xba, 0xec, 0x68, 0x13, 0x0f, 0x58, 0xa2, 0x5b, 0x3b, 0x98, + 0xd0, 0xf8, 0x88, 0x95, 0xfd, 0x7e, 0x7e, 0x04, 0xf4, 0x54, 0x1b, 0x31, 0x15, 0x70, 0xe4, 0x7f, 0x69, 0x45, 0xa6, + 0x28, 0xb0, 0x59, 0x53, 0x77, 0x6b, 0x2c, 0x23, 0xd1, 0x97, 0x29, 0x5d, 0x9e, 0xf0, 0x0c, 0x98, 0xd6, 0xeb, 0x96, + 0xe3, 0xca, 0xae, 0xe2, 0xc8, 0x53, 0x61, 0x59, 0x71, 0x5e, 0x85, 0xe3, 0xad, 0xc7, 0x37, 0xd8, 0x37, 0x6c, 0xda, + 0x85, 0x3f, 0x84, 0xb0, 0x10, 0xde, 0x64, 0x70, 0x1b, 0xd1, 0x76, 0x12, 0xa8, 0xbc, 0x31, 0xd7, 0x09, 0x65, 0x73, + 0xbb, 0x5e, 0x7b, 0x06, 0xe9, 0xc4, 0x1c, 0x28, 0xd5, 0x08, 0x5a, 0xa3, 0x59, 0x50, 0x35, 0xe2, 0x91, 0xe3, 0xe1, + 0x9d, 0x41, 0xac, 0x96, 0x2f, 0x69, 0x2a, 0x45, 0x03, 0x30, 0x2e, 0x80, 0xcb, 0xd3, 0xaf, 0xef, 0x7f, 0x3e, 0xe5, + 0x71, 0x91, 0x2c, 0xdf, 0xc5, 0x45, 0x7c, 0x55, 0x86, 0x1b, 0x35, 0x46, 0x71, 0x4d, 0xa6, 0x62, 0xc0, 0xa4, 0x59, + 0x49, 0xcd, 0x5d, 0xa9, 0x09, 0x31, 0xd6, 0x99, 0xac, 0xcb, 0x4a, 0x5e, 0x35, 0x2a, 0x5d, 0x17, 0x19, 0x7e, 0xdc, + 0xf2, 0x39, 0xdd, 0x07, 0x20, 0x4f, 0xe3, 0x42, 0x1a, 0x49, 0x5d, 0x88, 0x31, 0x17, 0xf1, 0xba, 0x3e, 0x1e, 0x37, + 0xba, 0x5e, 0xb2, 0x67, 0xe3, 0x27, 0xd3, 0x37, 0x59, 0x98, 0x0d, 0x04, 0x19, 0x55, 0x4b, 0x2e, 0x5a, 0xa6, 0x9c, + 0xca, 0x24, 0x00, 0x7d, 0x3c, 0x7b, 0x8c, 0x1d, 0x8c, 0xc7, 0x64, 0xd3, 0x16, 0x0f, 0xf0, 0x70, 0xb9, 0x0e, 0x0b, + 0x32, 0xd3, 0x75, 0x44, 0x81, 0xe0, 0xb7, 0x55, 0x00, 0x48, 0x8e, 0xb6, 0x2a, 0xc3, 0xa5, 0xb1, 0x67, 0xe3, 0x09, + 0x95, 0xd8, 0xed, 0x90, 0xd4, 0x5e, 0x85, 0x6e, 0xe6, 0xa5, 0xef, 0x51, 0x24, 0x8d, 0xcb, 0xd2, 0x4e, 0xa5, 0x52, + 0xed, 0x99, 0x99, 0xeb, 0x1a, 0xc4, 0x60, 0x08, 0x75, 0xdd, 0xa5, 0x57, 0xf7, 0x6e, 0x73, 0xad, 0xd9, 0x0e, 0x78, + 0xaf, 0x41, 0x33, 0x94, 0xbc, 0xc5, 0xbc, 0x75, 0x45, 0xd4, 0x74, 0xb5, 0x06, 0xb3, 0x62, 0x94, 0x2d, 0x45, 0xe9, + 0x9a, 0x82, 0x52, 0x30, 0xba, 0x58, 0x7b, 0x0b, 0xf7, 0x8d, 0x6c, 0x5c, 0x58, 0x32, 0xbd, 0x5a, 0x94, 0x94, 0x50, + 0xdd, 0x54, 0x8c, 0x94, 0x30, 0x52, 0x1a, 0x9e, 0xca, 0xf7, 0x02, 0x8f, 0xf3, 0x3c, 0x88, 0x5a, 0x5e, 0x60, 0xc7, + 0x15, 0x39, 0x06, 0x47, 0x2f, 0x93, 0xd3, 0x50, 0xe0, 0x1f, 0x33, 0x05, 0x62, 0x3a, 0x54, 0xf7, 0x1b, 0xdc, 0xfc, + 0xff, 0x28, 0x58, 0xe0, 0xf1, 0xad, 0x97, 0xb8, 0x8d, 0xfe, 0x51, 0xf8, 0xb4, 0xf4, 0xb9, 0xf4, 0x5d, 0x5d, 0x3c, + 0x69, 0x6f, 0x36, 0x4a, 0x96, 0x59, 0x9e, 0xbe, 0x95, 0x29, 0x07, 0x91, 0x19, 0x5a, 0x83, 0xb2, 0x23, 0xd1, 0xb8, + 0xe1, 0x81, 0x11, 0x63, 0xe3, 0xc6, 0xf7, 0x63, 0x06, 0xb2, 0x61, 0xb0, 0xfa, 0x66, 0xa9, 0x4c, 0xd6, 0x57, 0x80, + 0x29, 0xa2, 0xe4, 0x27, 0x2f, 0x73, 0x0e, 0x4f, 0xa1, 0xbe, 0x7e, 0x81, 0xdb, 0x5c, 0xe9, 0xfb, 0x9c, 0xff, 0x98, + 0xd1, 0x1f, 0x11, 0xe8, 0x24, 0x5e, 0x81, 0xdc, 0xe3, 0x39, 0xd4, 0x8d, 0x30, 0xb5, 0x1c, 0x83, 0x03, 0x21, 0x1a, + 0x88, 0xa8, 0x58, 0xa0, 0xa0, 0x2e, 0x0c, 0xb0, 0x86, 0xba, 0x60, 0x0e, 0xcf, 0x73, 0x99, 0x7c, 0x9c, 0x1a, 0x9f, + 0xf9, 0x61, 0x8c, 0x31, 0x93, 0x83, 0x41, 0x58, 0xcd, 0x82, 0xe1, 0x78, 0x34, 0x39, 0x78, 0x06, 0xe7, 0x76, 0x30, + 0x0e, 0xc8, 0x20, 0xa8, 0xcb, 0x55, 0x2c, 0x68, 0x79, 0x7d, 0x69, 0xcb, 0xc0, 0x8f, 0xeb, 0x60, 0xf0, 0x8f, 0xc2, + 0x53, 0xbc, 0x83, 0xe6, 0xe4, 0x4c, 0x86, 0x60, 0x63, 0xbf, 0x26, 0x20, 0x29, 0xeb, 0x69, 0x7e, 0x52, 0x1f, 0x6e, + 0x4c, 0x69, 0xff, 0xcc, 0xe1, 0x05, 0x87, 0x1d, 0x12, 0x28, 0x90, 0xc6, 0xd3, 0x6c, 0xf4, 0x5a, 0x29, 0x72, 0xdf, + 0x15, 0x1c, 0xee, 0xcc, 0x3d, 0x67, 0x7a, 0xe4, 0x14, 0x12, 0xcd, 0x2c, 0xe0, 0x46, 0xfe, 0x5a, 0x5c, 0xc7, 0x79, + 0x96, 0xee, 0x35, 0xdf, 0xec, 0x95, 0x77, 0xa2, 0x8a, 0x6f, 0x47, 0x81, 0xb1, 0x26, 0xe4, 0xbe, 0xea, 0x09, 0xd0, + 0x13, 0x60, 0x0b, 0x80, 0x01, 0xf1, 0x8e, 0x99, 0xc9, 0x8c, 0x47, 0xe0, 0x11, 0xd8, 0xf4, 0x81, 0x2c, 0xee, 0x9c, + 0x4b, 0x92, 0xbf, 0x99, 0x4a, 0x7b, 0xd5, 0x2b, 0x77, 0x0a, 0xb2, 0x5e, 0x6d, 0xe5, 0xae, 0x5b, 0x9f, 0x7d, 0xd3, + 0xe1, 0x15, 0x78, 0x2e, 0xc1, 0x2d, 0xb2, 0xdf, 0x6f, 0x0a, 0x2a, 0x85, 0x51, 0x11, 0xef, 0x24, 0xd7, 0xe8, 0xdf, + 0xee, 0x8d, 0x8d, 0x22, 0xb9, 0xe5, 0xc3, 0x03, 0xa8, 0x33, 0x79, 0x57, 0xdc, 0xce, 0x21, 0x6a, 0xeb, 0x6e, 0x3c, + 0xb0, 0xda, 0xa0, 0x5d, 0xd6, 0x1c, 0xc1, 0x85, 0x17, 0x7b, 0x19, 0x8c, 0x05, 0xce, 0xca, 0x48, 0xa9, 0x71, 0x0d, + 0xa9, 0x05, 0x9f, 0xe4, 0xe9, 0x3d, 0x64, 0xa9, 0x27, 0x41, 0x91, 0xe3, 0x59, 0x0c, 0x99, 0xc6, 0xdb, 0xc0, 0xe3, + 0x77, 0x32, 0x04, 0x69, 0xda, 0x76, 0xdb, 0x1c, 0x81, 0xb2, 0x7b, 0x60, 0x4a, 0x52, 0xd7, 0xc6, 0xd4, 0x40, 0x43, + 0xed, 0xa1, 0x46, 0x2a, 0xe2, 0xec, 0xe8, 0x0d, 0xe8, 0x10, 0xc1, 0xf7, 0x3b, 0xcd, 0xca, 0x8e, 0x17, 0x13, 0x82, + 0x27, 0xef, 0xcb, 0xdb, 0xac, 0xac, 0xca, 0xe8, 0x7d, 0x8a, 0x86, 0x50, 0x89, 0x14, 0xd1, 0x2b, 0x88, 0xa7, 0x57, + 0xe2, 0xef, 0x32, 0xfa, 0x39, 0xa5, 0x71, 0x9a, 0x62, 0xfa, 0x8b, 0x02, 0x7e, 0x3e, 0x07, 0x54, 0x47, 0xdc, 0x09, + 0xd1, 0xb9, 0x04, 0x7b, 0x35, 0x88, 0x66, 0x55, 0x71, 0xc0, 0xd0, 0x8c, 0x6e, 0x05, 0x45, 0x8c, 0x36, 0xcc, 0xfe, + 0x43, 0x81, 0x42, 0x21, 0x55, 0xcc, 0x77, 0xc2, 0x3e, 0x44, 0x3f, 0x62, 0x91, 0xc7, 0xef, 0x5e, 0x9b, 0x21, 0x8d, + 0xee, 0x24, 0xd5, 0x5b, 0x1b, 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xae, 0xe9, 0x59, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, + 0x4f, 0xbc, 0x7b, 0xfd, 0x5c, 0x59, 0x98, 0xbc, 0xc8, 0x40, 0x71, 0x70, 0xfc, 0xee, 0xf5, 0x1b, 0x99, 0xae, 0x73, + 0x1e, 0x9d, 0x49, 0x24, 0xad, 0xc7, 0xef, 0x5e, 0xff, 0x82, 0xe6, 0x5e, 0x3f, 0x17, 0xf0, 0xfe, 0x15, 0xf0, 0x96, + 0x51, 0xbc, 0x86, 0x3e, 0xa9, 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd5, 0x5a, 0x46, 0xbf, 0xa6, 0xb5, 0x27, 0xad, 0xfa, + 0x67, 0xe1, 0x53, 0x3b, 0x4f, 0xc0, 0x73, 0x9b, 0x67, 0xe2, 0x63, 0x64, 0x45, 0x3b, 0x41, 0xf4, 0xf5, 0xde, 0xed, + 0x55, 0x2e, 0xca, 0x08, 0x5f, 0x30, 0xb4, 0x0b, 0x8a, 0xf6, 0xf7, 0x6f, 0x6e, 0x6e, 0x46, 0x37, 0x4f, 0x46, 0xb2, + 0xb8, 0xdc, 0x9f, 0x7c, 0xfb, 0xed, 0xb7, 0xfb, 0xf8, 0x36, 0xf8, 0xba, 0xed, 0xf6, 0x5e, 0x11, 0x3e, 0x60, 0x01, + 0x22, 0x54, 0x7f, 0x0d, 0x57, 0x14, 0xd0, 0xc2, 0x0d, 0xbe, 0x0e, 0xbe, 0xd6, 0x87, 0xce, 0xd7, 0x87, 0xe5, 0xf5, + 0xa5, 0x2a, 0xbf, 0xab, 0xe4, 0x83, 0xf1, 0x78, 0xbc, 0x0f, 0x12, 0xa8, 0xaf, 0x07, 0x7c, 0x10, 0x1c, 0x05, 0x83, + 0x0c, 0x2e, 0x34, 0xe5, 0xf5, 0xe5, 0x51, 0xe0, 0x99, 0xe6, 0x36, 0x58, 0x44, 0x07, 0xe2, 0x12, 0xec, 0x5f, 0xd2, + 0xe0, 0xeb, 0x80, 0xb8, 0x94, 0xaf, 0x20, 0xe5, 0xab, 0x83, 0x67, 0x7e, 0xda, 0xff, 0x52, 0x69, 0x4f, 0xfc, 0xb4, + 0x43, 0x4c, 0x7b, 0xf2, 0xdc, 0x4f, 0x3b, 0x52, 0x69, 0x2f, 0xfd, 0xb4, 0xff, 0x5d, 0x0e, 0x20, 0x75, 0xcf, 0xb7, + 0xfe, 0x3b, 0xf7, 0x5a, 0x83, 0xa7, 0x50, 0x94, 0x5d, 0xc5, 0x97, 0x1c, 0x1a, 0x3d, 0xb8, 0xbd, 0xca, 0x69, 0x30, + 0xc0, 0xf6, 0x7a, 0x26, 0x21, 0xde, 0x07, 0x5f, 0xaf, 0x8b, 0x3c, 0x0c, 0xbe, 0x1e, 0x60, 0x21, 0x83, 0xaf, 0x03, + 0xf2, 0xb5, 0x31, 0x90, 0x11, 0x6c, 0x13, 0xb8, 0x50, 0xa4, 0x43, 0x1b, 0x20, 0xcc, 0x97, 0xc6, 0xd5, 0xf4, 0xaf, + 0xa2, 0x3b, 0x1b, 0xde, 0x12, 0x95, 0x9b, 0x6e, 0x50, 0xd3, 0x13, 0xf0, 0x4e, 0x80, 0x46, 0x45, 0xc1, 0x75, 0x5c, + 0x84, 0xc3, 0x61, 0x79, 0x7d, 0x49, 0xc0, 0x2e, 0x73, 0xc5, 0xe3, 0x2a, 0x0a, 0x84, 0x1c, 0xaa, 0x9f, 0x81, 0x8a, + 0x7c, 0x15, 0x20, 0x20, 0x12, 0xfc, 0x17, 0xd4, 0xf4, 0x9d, 0x64, 0x9b, 0x60, 0x78, 0xc3, 0xcf, 0x3f, 0x66, 0xd5, + 0x50, 0x89, 0x16, 0xaf, 0x05, 0x85, 0x1f, 0xf0, 0xd7, 0x55, 0x1d, 0xfd, 0x05, 0x6e, 0xdc, 0x4d, 0x0d, 0xfb, 0x3b, + 0xe9, 0x58, 0xd4, 0x77, 0x72, 0x9e, 0x2d, 0xa6, 0xad, 0x03, 0xfd, 0x44, 0x92, 0x6a, 0x9e, 0x0d, 0x82, 0x61, 0x30, + 0xe0, 0x0b, 0x76, 0x22, 0xe7, 0xdc, 0x33, 0x9f, 0x7a, 0x24, 0xfd, 0x69, 0x9e, 0x65, 0x03, 0xf0, 0x4d, 0x41, 0x7e, + 0x64, 0xff, 0xbf, 0xe7, 0x43, 0x14, 0x1e, 0x0e, 0x1e, 0xed, 0x93, 0x59, 0xb0, 0xba, 0x45, 0x8f, 0xce, 0x28, 0xc8, + 0xc4, 0x92, 0x17, 0x59, 0xe5, 0x2d, 0x95, 0xbb, 0x75, 0xdb, 0xcb, 0xe3, 0xde, 0xb3, 0x79, 0x15, 0x8b, 0x40, 0x9d, + 0x73, 0xa0, 0x78, 0x43, 0xd9, 0x53, 0xd9, 0x94, 0x90, 0x6a, 0x43, 0xde, 0xb0, 0x1c, 0xb0, 0xe0, 0xb0, 0x37, 0x1c, + 0xee, 0x05, 0x03, 0xa7, 0xce, 0x1d, 0x04, 0x7b, 0xc3, 0xe1, 0x51, 0xe0, 0xee, 0x43, 0xd9, 0xc8, 0xdd, 0x19, 0x69, + 0xc1, 0xfe, 0x59, 0x84, 0x25, 0x05, 0xf1, 0x98, 0xd4, 0xe2, 0x2f, 0x0d, 0x2e, 0x33, 0x00, 0xe8, 0x23, 0x25, 0x01, + 0x33, 0xb0, 0x32, 0x03, 0x08, 0xcd, 0x4d, 0x63, 0x76, 0x06, 0xcc, 0x23, 0x70, 0xcc, 0x23, 0x64, 0x1c, 0x00, 0xb1, + 0x24, 0xc0, 0xb9, 0x0b, 0xa2, 0x58, 0x17, 0xf2, 0x08, 0x40, 0xef, 0xf1, 0x27, 0x31, 0xa5, 0x60, 0x92, 0x8e, 0x55, + 0x08, 0x82, 0x38, 0x3e, 0xbb, 0x16, 0xad, 0xc9, 0x59, 0xa2, 0x83, 0x19, 0x49, 0x80, 0x0d, 0x31, 0xb0, 0x73, 0x70, + 0x3f, 0x07, 0xa5, 0x87, 0xd5, 0x3b, 0x21, 0x17, 0x7c, 0xc7, 0x3d, 0xd9, 0x2c, 0x5c, 0x3d, 0xe1, 0x20, 0xb8, 0xe3, + 0x9a, 0x05, 0x18, 0x55, 0xc5, 0xba, 0xac, 0x78, 0xfa, 0xe1, 0x6e, 0x05, 0xb1, 0xef, 0x70, 0x40, 0xdf, 0xc9, 0x3c, + 0x4b, 0xee, 0x42, 0x67, 0xcf, 0xb5, 0x51, 0xe9, 0x3f, 0x7c, 0x78, 0xf3, 0x73, 0x04, 0x22, 0xc7, 0xda, 0x50, 0xfa, + 0x3b, 0x8e, 0x67, 0x93, 0x1f, 0xe1, 0xc9, 0xdf, 0xd8, 0x77, 0xdc, 0x9e, 0x1e, 0xfd, 0x3e, 0xd4, 0x4d, 0xef, 0xf8, + 0xec, 0x8e, 0x8f, 0x5c, 0x71, 0xa8, 0xae, 0x70, 0x5f, 0xdf, 0xac, 0x7d, 0x23, 0xa4, 0x87, 0xe7, 0x99, 0xf2, 0xc6, + 0xfc, 0x68, 0x07, 0xc3, 0x20, 0x98, 0x6a, 0xa1, 0x24, 0x44, 0xdd, 0x60, 0x4a, 0xc0, 0x10, 0xed, 0xe9, 0x65, 0x35, + 0x45, 0xce, 0x4d, 0x8d, 0x2c, 0xbc, 0x1f, 0x30, 0x2d, 0x74, 0x68, 0xe4, 0x50, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc2, + 0x6f, 0x95, 0x30, 0xfd, 0x6a, 0x51, 0x39, 0x07, 0xd1, 0x3d, 0x30, 0xc6, 0x15, 0xbc, 0x80, 0xae, 0xb0, 0xeb, 0xb5, + 0x8a, 0x8a, 0x81, 0xe0, 0x71, 0xc8, 0x01, 0x7a, 0xd8, 0x05, 0x2d, 0x2b, 0x4b, 0x75, 0xab, 0x72, 0x96, 0x2a, 0xea, + 0x32, 0x94, 0x95, 0xb1, 0xc2, 0x7c, 0x2f, 0xd9, 0x0f, 0x05, 0x7a, 0x96, 0x4f, 0x45, 0x17, 0xbc, 0x10, 0x4a, 0xb0, + 0x5c, 0xd7, 0x3b, 0x11, 0x88, 0x3a, 0x3f, 0xf4, 0xae, 0xfa, 0x1a, 0xc7, 0x8e, 0xa7, 0x6f, 0x64, 0xca, 0xb5, 0x09, + 0x85, 0xe6, 0xf3, 0xa5, 0xaf, 0x98, 0x28, 0xd8, 0x0d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd6, 0x7a, 0x33, 0x28, + 0xd1, 0x31, 0xaf, 0x51, 0x70, 0xad, 0x14, 0x0a, 0x46, 0x7b, 0x1b, 0x7f, 0x86, 0x23, 0xb7, 0xba, 0x3d, 0xf4, 0x7e, + 0xab, 0xe2, 0xcb, 0xb7, 0xe8, 0xdb, 0x69, 0x7f, 0x8e, 0x2a, 0xf9, 0xeb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, + 0xe2, 0xd2, 0x42, 0x3d, 0xa7, 0xef, 0x8e, 0xdf, 0x82, 0x1f, 0x25, 0xfe, 0xfe, 0xed, 0xfb, 0xa0, 0x26, 0xd3, 0x78, + 0x56, 0x98, 0x0f, 0x6d, 0x0e, 0x08, 0x4d, 0xe2, 0xd2, 0xec, 0xfb, 0x59, 0xdc, 0x64, 0xdf, 0x35, 0x5b, 0x4f, 0x8b, + 0x26, 0x92, 0x94, 0xe1, 0xf6, 0xc1, 0x80, 0x40, 0x1f, 0x20, 0x8a, 0xb3, 0x2f, 0x68, 0x0c, 0x69, 0x3e, 0xb3, 0xef, + 0x47, 0xc4, 0x7b, 0xb9, 0x13, 0x42, 0x8c, 0x2b, 0x2c, 0x1a, 0x3d, 0xe4, 0x33, 0x1e, 0x29, 0xc3, 0xa2, 0xf7, 0x98, + 0x40, 0x9c, 0xe1, 0xb4, 0x7a, 0x8f, 0x98, 0xc7, 0x78, 0x37, 0xd0, 0xb2, 0x87, 0x28, 0xa3, 0x2e, 0x7b, 0xc3, 0xe2, + 0xfb, 0xe3, 0x3a, 0xcc, 0xac, 0xe5, 0xe5, 0x10, 0xfe, 0x06, 0xda, 0x00, 0x9c, 0x72, 0x64, 0xf9, 0x2a, 0xb3, 0xd1, + 0xd5, 0x12, 0xd3, 0x9b, 0x08, 0x62, 0xf1, 0xe8, 0x74, 0x58, 0xbb, 0x3a, 0x55, 0xef, 0x6a, 0xe7, 0x33, 0xd1, 0xab, + 0x40, 0x2b, 0xd7, 0xb6, 0xc7, 0x43, 0xb8, 0x4b, 0x2d, 0xad, 0xb0, 0x11, 0xe5, 0x5c, 0x3c, 0xdd, 0x39, 0x36, 0x27, + 0xa0, 0xc1, 0x95, 0x4c, 0x01, 0x38, 0x4b, 0xab, 0xd1, 0xa8, 0x11, 0xf6, 0x59, 0x39, 0x9f, 0xc3, 0xd6, 0x42, 0x3c, + 0x2d, 0x00, 0xc3, 0x6d, 0x62, 0x50, 0xf2, 0x6e, 0x0c, 0xca, 0xe9, 0x47, 0x05, 0x6f, 0x1d, 0x9c, 0x95, 0xcb, 0x38, + 0x95, 0x37, 0x80, 0xc5, 0x18, 0xf8, 0xa9, 0x58, 0xaa, 0x97, 0x90, 0x2c, 0x79, 0xf2, 0x11, 0xad, 0x36, 0xd2, 0x00, + 0xb8, 0xca, 0xa9, 0xb1, 0xdc, 0x53, 0x20, 0xa1, 0xae, 0x14, 0x95, 0x10, 0x57, 0x55, 0x9c, 0x2c, 0x4f, 0x31, 0x35, + 0xdc, 0x40, 0x2f, 0xa2, 0x40, 0xae, 0xb8, 0x00, 0x92, 0x9e, 0xb3, 0x7f, 0x65, 0x1a, 0x6b, 0xfc, 0xb9, 0x44, 0x01, + 0x93, 0x46, 0x0d, 0xc6, 0x4a, 0xd9, 0x4b, 0x69, 0xa2, 0xbd, 0x05, 0x41, 0xed, 0x5e, 0xfe, 0x05, 0x75, 0x3f, 0x87, + 0x56, 0x84, 0x0d, 0x30, 0x44, 0x79, 0x8e, 0x3b, 0x34, 0xb5, 0x4b, 0xce, 0x03, 0x46, 0x74, 0xde, 0x67, 0xb5, 0xdd, + 0xea, 0xcf, 0x97, 0x80, 0x6d, 0x9a, 0x1a, 0x9f, 0xc2, 0x30, 0x21, 0x26, 0x36, 0xb0, 0x55, 0x56, 0xda, 0x0d, 0x65, + 0xda, 0x49, 0x97, 0xcc, 0x6b, 0xe1, 0x34, 0xef, 0x31, 0xb6, 0x1c, 0xa9, 0xdc, 0xfd, 0x7e, 0x68, 0x7e, 0xb2, 0x9c, + 0x3e, 0xd7, 0x21, 0x9b, 0xbd, 0xf1, 0xa0, 0x39, 0xd1, 0xea, 0xaa, 0x8e, 0x7e, 0x40, 0x07, 0x60, 0xa6, 0x2d, 0x40, + 0xa6, 0x0b, 0x36, 0xed, 0x2b, 0x51, 0x71, 0x49, 0xc2, 0x52, 0x49, 0x60, 0x67, 0x37, 0x25, 0x3b, 0x9b, 0x80, 0x78, + 0x86, 0xbb, 0x9e, 0x16, 0x3b, 0x21, 0x4d, 0x78, 0x8b, 0xbd, 0x04, 0x44, 0x1d, 0xaa, 0xba, 0x84, 0x6c, 0x8c, 0xa1, + 0x8b, 0x7f, 0x51, 0x0a, 0x13, 0xd6, 0x32, 0xa9, 0x4a, 0x4c, 0x10, 0xa4, 0x72, 0xb7, 0x45, 0x60, 0x89, 0x82, 0x1d, + 0xc0, 0xde, 0xbb, 0x51, 0x37, 0xa3, 0xa6, 0xaa, 0x53, 0x2f, 0xc1, 0xc7, 0x69, 0xd6, 0x55, 0x90, 0x59, 0xd8, 0x55, + 0xb1, 0xe6, 0x81, 0x8e, 0x4d, 0xa5, 0x8c, 0x89, 0xbb, 0xb4, 0xc8, 0x10, 0x0f, 0x18, 0x63, 0xe9, 0x42, 0x20, 0xdf, + 0x6c, 0x77, 0xdc, 0xf4, 0x04, 0xa1, 0x9f, 0xb0, 0xa1, 0x04, 0x6e, 0x3a, 0xdb, 0x53, 0xd3, 0xcc, 0x07, 0x44, 0x1c, + 0x06, 0x14, 0x48, 0x36, 0x0e, 0x69, 0x8e, 0xf4, 0x05, 0x49, 0x13, 0x06, 0x86, 0x56, 0x3c, 0x27, 0xc8, 0x8a, 0x42, + 0xcf, 0xd6, 0x55, 0x1b, 0xe7, 0xca, 0x30, 0x47, 0x4b, 0x4e, 0x85, 0xcf, 0x09, 0x32, 0xb1, 0x7b, 0xda, 0x66, 0x26, + 0xc3, 0x51, 0xb2, 0xc0, 0xfc, 0x0a, 0xa2, 0xc4, 0x9d, 0x69, 0x56, 0xe5, 0x60, 0x5c, 0xc0, 0x02, 0xad, 0x7c, 0x0f, + 0xea, 0xc6, 0x1a, 0xda, 0x68, 0x18, 0x62, 0xb7, 0x3f, 0xc1, 0x7e, 0xad, 0x9d, 0xd6, 0x65, 0x8a, 0xe5, 0x65, 0x0a, + 0xd1, 0x5e, 0xc8, 0xfc, 0x46, 0x91, 0xe8, 0x4e, 0x11, 0x86, 0x84, 0x75, 0x94, 0x3d, 0x69, 0x53, 0x03, 0xe8, 0xa9, + 0x17, 0xf0, 0xbc, 0x73, 0x2d, 0xc3, 0x2e, 0xd2, 0xfd, 0x55, 0xc1, 0xa7, 0x74, 0x83, 0x20, 0x45, 0x6f, 0x52, 0x30, + 0xe7, 0xf5, 0x28, 0xa9, 0x37, 0xa7, 0x2d, 0x33, 0xaa, 0x8e, 0x8a, 0x90, 0x72, 0x82, 0xff, 0xe4, 0xa5, 0xd4, 0xc4, + 0x26, 0x4c, 0xf0, 0xc0, 0x87, 0x79, 0x86, 0x0d, 0xbc, 0xdd, 0xbe, 0x4b, 0xc3, 0xa4, 0xcd, 0x36, 0xa4, 0x20, 0xad, + 0x30, 0x71, 0x31, 0xa0, 0xb2, 0xd7, 0xb8, 0x5f, 0xb0, 0x9d, 0x34, 0x05, 0x0f, 0xc2, 0x46, 0x03, 0x13, 0xb7, 0xba, + 0xf8, 0x3a, 0x4c, 0x68, 0xb8, 0xa4, 0xda, 0xd9, 0x49, 0x4b, 0x9a, 0xdb, 0xeb, 0xf2, 0xc2, 0xf6, 0x41, 0xc7, 0x0e, + 0xeb, 0x1a, 0x1e, 0x68, 0x5e, 0xb3, 0x8b, 0x2b, 0xa6, 0x69, 0xa2, 0xb1, 0x1e, 0x52, 0x96, 0x1c, 0xeb, 0x7a, 0xba, + 0xc2, 0xd5, 0x32, 0xd3, 0xc0, 0xee, 0x12, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x81, 0xcd, 0x66, 0xab, + 0x9a, 0x4c, 0xf3, 0xfb, 0xb2, 0xe5, 0x26, 0x20, 0x9c, 0xa5, 0xbe, 0xb9, 0x4f, 0x8e, 0x35, 0x6d, 0xf3, 0x93, 0x00, + 0xc7, 0xdb, 0x2b, 0x20, 0xe9, 0x58, 0x82, 0x2e, 0xbe, 0xa5, 0x3f, 0x88, 0xd4, 0x4c, 0x05, 0xbd, 0x77, 0xbe, 0x48, + 0xdd, 0xfc, 0x02, 0x6c, 0xa3, 0x36, 0xc6, 0x34, 0x2b, 0x5b, 0x87, 0x89, 0xb2, 0xb0, 0x46, 0x16, 0x72, 0x09, 0x3e, + 0x98, 0xbb, 0x4d, 0x9d, 0x1e, 0x77, 0x10, 0x61, 0xbf, 0x8b, 0x1e, 0x8f, 0x30, 0x56, 0xac, 0x41, 0x62, 0x58, 0x85, + 0x35, 0x6d, 0x2e, 0x87, 0x28, 0xa7, 0x66, 0xc9, 0x44, 0x4b, 0xea, 0x53, 0x8a, 0x28, 0x05, 0x73, 0xe3, 0x69, 0xd9, + 0x30, 0x25, 0x44, 0xc8, 0x0a, 0xe9, 0x80, 0x6a, 0x2d, 0xb4, 0x54, 0x13, 0xf4, 0x3a, 0xf4, 0xb2, 0xd0, 0x98, 0x82, + 0xe8, 0x23, 0x32, 0xdc, 0x88, 0x23, 0xa3, 0xbb, 0x63, 0x14, 0x13, 0x08, 0x55, 0xed, 0xe5, 0x85, 0xd5, 0xa7, 0x65, + 0x5b, 0x1d, 0xc4, 0x15, 0x22, 0xdf, 0x77, 0x13, 0xd4, 0x18, 0x05, 0x6d, 0x4e, 0x37, 0xfa, 0x6b, 0x11, 0xfa, 0x76, + 0xe1, 0xd8, 0x8d, 0x82, 0x48, 0x88, 0xc0, 0xea, 0x35, 0x15, 0x03, 0xb2, 0xce, 0x63, 0x17, 0xa1, 0x49, 0x77, 0x0b, + 0x51, 0xde, 0xa8, 0xac, 0x3f, 0xae, 0x43, 0xb2, 0xdd, 0x62, 0x59, 0xe0, 0xcb, 0x7e, 0xba, 0xbe, 0x07, 0xf2, 0xfb, + 0xcd, 0xfa, 0xb3, 0x90, 0xdf, 0xaf, 0xb3, 0x2f, 0x81, 0xfc, 0x7e, 0xb3, 0xfe, 0x9f, 0x86, 0xfc, 0x3e, 0x5d, 0x7b, + 0x90, 0xdf, 0x6a, 0x30, 0x7e, 0x2f, 0x58, 0x70, 0xf2, 0x36, 0xa0, 0x2f, 0x24, 0x0b, 0x4e, 0x5e, 0xbd, 0xf2, 0x8d, + 0x40, 0x84, 0x46, 0xae, 0x37, 0xb2, 0x60, 0xc4, 0x6d, 0x81, 0x57, 0xa8, 0x75, 0xf2, 0x81, 0x8a, 0x32, 0x00, 0x5e, + 0x2f, 0xff, 0x91, 0x55, 0xcb, 0x30, 0xd8, 0x0f, 0xc8, 0xcc, 0x41, 0x82, 0x0e, 0x27, 0x70, 0x7b, 0x43, 0x23, 0xcb, + 0xea, 0x8b, 0xe0, 0xc3, 0x47, 0xa3, 0x51, 0x5c, 0x5c, 0xe2, 0xa5, 0xce, 0x6c, 0x24, 0x04, 0x3c, 0xce, 0x78, 0x69, + 0x43, 0x44, 0x2c, 0xe3, 0xf2, 0x4c, 0xc7, 0x66, 0x29, 0xed, 0x56, 0x84, 0x88, 0xf3, 0x67, 0x80, 0x53, 0x6f, 0xf7, + 0x66, 0x8c, 0xfd, 0x50, 0x1c, 0xb1, 0x0e, 0x20, 0xfb, 0x7c, 0xad, 0xdf, 0x9d, 0xc7, 0x25, 0x7f, 0x17, 0x57, 0x4b, + 0x06, 0xbd, 0x84, 0xbb, 0x88, 0xe0, 0x49, 0xe5, 0xb1, 0x4d, 0x0a, 0xa8, 0x3c, 0xd3, 0x40, 0xe5, 0x1d, 0xef, 0x69, + 0x68, 0x87, 0x45, 0xfb, 0x00, 0x1b, 0xe9, 0x72, 0x06, 0x46, 0x8b, 0x2f, 0xaf, 0xb9, 0xa8, 0x7e, 0x06, 0x3c, 0x75, + 0xc1, 0x0b, 0xb8, 0x25, 0x20, 0x17, 0xdb, 0x70, 0x42, 0xa0, 0xc2, 0xf7, 0xec, 0x50, 0x51, 0x63, 0x8c, 0x68, 0xa2, + 0xd1, 0x6f, 0xbc, 0x09, 0xa1, 0x77, 0x27, 0xe8, 0x8a, 0x30, 0x12, 0xde, 0x5f, 0x6b, 0x7e, 0x96, 0x81, 0xf9, 0xbc, + 0x00, 0x28, 0x0d, 0x84, 0x43, 0x65, 0x4a, 0x6e, 0x81, 0x09, 0x1b, 0x63, 0xae, 0x94, 0xa5, 0x1e, 0x52, 0x29, 0x55, + 0x70, 0xba, 0x82, 0xa6, 0x12, 0x70, 0xb8, 0x23, 0x09, 0x60, 0xa6, 0xb6, 0x30, 0x88, 0x6e, 0x9b, 0xd2, 0x2c, 0x8d, + 0x9c, 0x22, 0xcd, 0xe1, 0x93, 0x52, 0x05, 0x3a, 0x7d, 0x96, 0xc4, 0x15, 0xbf, 0x94, 0x05, 0x84, 0xc2, 0x6d, 0xa5, + 0x50, 0xa4, 0xdf, 0x67, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0x39, 0x5b, 0x66, 0x65, 0x05, 0xf9, 0xe6, 0xfa, 0xf4, 0x5b, + 0xd4, 0xd3, 0x02, 0xe7, 0x4d, 0x4d, 0x0a, 0x33, 0xf3, 0x78, 0xac, 0x76, 0x3a, 0xa8, 0x57, 0xbd, 0xd7, 0x06, 0xfb, + 0xbd, 0x39, 0xd1, 0xe3, 0xd6, 0x7a, 0xb0, 0x9a, 0xd4, 0x66, 0xaa, 0x82, 0x38, 0x02, 0xea, 0xc0, 0x8e, 0x70, 0x16, + 0x53, 0xba, 0xb6, 0x08, 0x2a, 0x60, 0xed, 0x80, 0x39, 0x32, 0x71, 0x79, 0x76, 0xa3, 0xe4, 0x27, 0x3d, 0x45, 0x61, + 0xd2, 0x28, 0x56, 0xc8, 0x3e, 0x4b, 0x16, 0xae, 0x59, 0x72, 0x4f, 0xae, 0x75, 0x94, 0x34, 0x30, 0xba, 0xe2, 0xf6, + 0x40, 0x1c, 0x26, 0xed, 0x94, 0xed, 0x76, 0x27, 0x13, 0xb0, 0x06, 0xad, 0x24, 0x88, 0xd6, 0xb1, 0x9c, 0x0d, 0x27, + 0x11, 0x40, 0xa8, 0x68, 0xb2, 0xf6, 0xd7, 0x9a, 0x1b, 0x90, 0xf9, 0x50, 0x7b, 0xfa, 0x39, 0x91, 0xbc, 0x1e, 0x59, + 0xcf, 0x38, 0x4e, 0x4f, 0xfb, 0x1c, 0x0c, 0xb3, 0xfc, 0x21, 0x81, 0x48, 0x30, 0x9d, 0xd3, 0xb3, 0x98, 0x6a, 0x33, + 0x61, 0xc3, 0xa3, 0xd0, 0x2f, 0xfb, 0x4e, 0x03, 0xe0, 0x26, 0x3c, 0x1c, 0x3e, 0x1b, 0x93, 0x5a, 0xdb, 0xac, 0xe3, + 0x02, 0xb2, 0xbf, 0xd5, 0x22, 0x73, 0xcf, 0x76, 0xa1, 0xd1, 0xa6, 0xb7, 0x41, 0xbb, 0x46, 0x2a, 0xee, 0xe9, 0x7e, + 0x4d, 0x6a, 0xb7, 0x60, 0xac, 0x04, 0xe9, 0x0f, 0x75, 0x6a, 0x9d, 0x3d, 0xda, 0x64, 0xba, 0xca, 0xfa, 0x8f, 0xcc, + 0xc6, 0x9b, 0x6b, 0x50, 0x80, 0x5a, 0x2f, 0x25, 0x1f, 0xee, 0xad, 0x23, 0x9b, 0x9e, 0x18, 0x96, 0x75, 0x92, 0x91, + 0x91, 0x7a, 0xe4, 0x2a, 0xfc, 0x56, 0x77, 0x16, 0x7e, 0xcb, 0x93, 0xb0, 0xab, 0x61, 0x8a, 0xc3, 0x37, 0x5d, 0x40, + 0x04, 0x4c, 0x90, 0xeb, 0x87, 0x7f, 0x3c, 0xda, 0x34, 0xc9, 0x52, 0xbd, 0xef, 0x7d, 0x86, 0xbf, 0xb3, 0x14, 0xfe, + 0x56, 0xf5, 0x1f, 0x74, 0x73, 0xc5, 0xab, 0xa5, 0x4c, 0xa3, 0xe0, 0xdd, 0xc9, 0xe9, 0x87, 0x40, 0x23, 0xab, 0xe3, + 0xfd, 0xc2, 0x68, 0x94, 0x0d, 0x86, 0x13, 0x68, 0x58, 0x72, 0x79, 0x89, 0xe0, 0x82, 0x1a, 0x9d, 0xfe, 0x74, 0x29, + 0x6f, 0x8e, 0xf3, 0xdc, 0x67, 0x82, 0x0d, 0xe1, 0xd4, 0x7c, 0x61, 0x83, 0xea, 0x84, 0x20, 0xcb, 0x1b, 0x65, 0xe5, + 0x99, 0xd6, 0xbe, 0xa4, 0x67, 0xe7, 0x77, 0x67, 0x5a, 0xc2, 0x63, 0xd1, 0x1d, 0x9f, 0xff, 0x71, 0x98, 0x66, 0xd7, + 0x7b, 0x48, 0xdd, 0x59, 0x00, 0xa6, 0xf1, 0x39, 0x3f, 0x5f, 0x57, 0x95, 0x14, 0xc3, 0x42, 0xde, 0x04, 0x47, 0x87, + 0xea, 0xc1, 0x64, 0x88, 0xd5, 0x63, 0xb0, 0xf7, 0x5f, 0x49, 0x9e, 0x25, 0x1f, 0x59, 0xf0, 0x68, 0x93, 0xb1, 0xa3, + 0x16, 0x0d, 0x1f, 0xd7, 0xc1, 0x11, 0xb4, 0x75, 0xef, 0x38, 0xcf, 0x0f, 0xf7, 0xd5, 0x17, 0x47, 0x87, 0xfb, 0x69, + 0x76, 0x7d, 0xe4, 0x01, 0xed, 0x3b, 0xbb, 0x59, 0x84, 0x34, 0x73, 0xf7, 0x62, 0x70, 0x90, 0x4d, 0x78, 0x68, 0x39, + 0x09, 0x90, 0xc6, 0x98, 0x30, 0x25, 0x28, 0xc1, 0x09, 0x63, 0x38, 0x37, 0xb7, 0xdb, 0xd0, 0x1a, 0xf5, 0x24, 0x1e, + 0xe2, 0x4d, 0x01, 0x9c, 0x06, 0x66, 0xa1, 0x09, 0xa1, 0x49, 0x4d, 0x42, 0x83, 0xcb, 0x13, 0x13, 0x5a, 0xd4, 0x14, + 0x8e, 0x92, 0x37, 0xf1, 0xca, 0x08, 0xb1, 0xb4, 0x50, 0xc0, 0xb4, 0x7e, 0xd6, 0x18, 0xc7, 0xa8, 0x3d, 0xaa, 0x06, + 0x29, 0xab, 0x57, 0xde, 0x37, 0xb0, 0x20, 0xb7, 0x0c, 0x2b, 0x1a, 0xb4, 0x28, 0x04, 0xc8, 0x1d, 0x7d, 0x71, 0x19, + 0xa7, 0xe1, 0xbc, 0xa4, 0x72, 0x41, 0xd8, 0x51, 0xb8, 0x41, 0xb6, 0xb9, 0x54, 0x54, 0x38, 0x92, 0xb5, 0x83, 0xad, + 0x54, 0xb3, 0x73, 0xf4, 0x68, 0x23, 0x10, 0x29, 0xb1, 0x64, 0x47, 0xcd, 0xf9, 0xaa, 0xe2, 0xf3, 0xe1, 0x92, 0x83, + 0x7f, 0x4d, 0xb0, 0xf7, 0x5f, 0xe9, 0x79, 0x6e, 0x27, 0x45, 0xad, 0xc8, 0x65, 0x2c, 0xd2, 0x9c, 0x7f, 0x88, 0xcf, + 0x7f, 0xc0, 0x3c, 0x2f, 0xce, 0xf3, 0xe7, 0x90, 0xa1, 0x0e, 0x8e, 0x1e, 0x6d, 0x92, 0x6a, 0xf4, 0xf2, 0xed, 0x87, + 0xd7, 0x1f, 0xfe, 0x79, 0xf6, 0xfc, 0xf8, 0xc3, 0xcb, 0xef, 0x4f, 0xde, 0xbf, 0x7e, 0x79, 0x3a, 0xb7, 0x0e, 0xad, + 0x0a, 0x27, 0x8d, 0x2c, 0xb6, 0x5b, 0x97, 0xef, 0xd7, 0xb7, 0x2f, 0x5e, 0xbe, 0x7a, 0xfd, 0xf6, 0xe5, 0x8b, 0x5a, + 0xcd, 0x65, 0xbb, 0x21, 0xb0, 0x43, 0xe3, 0x4c, 0xf0, 0x02, 0x8a, 0xd7, 0xd1, 0x1a, 0xb1, 0xd9, 0x1a, 0xde, 0xaf, + 0xd9, 0x74, 0x1d, 0x09, 0x01, 0x16, 0xd9, 0x9e, 0xde, 0x2c, 0xd0, 0x70, 0x69, 0x36, 0x8e, 0xbf, 0xc4, 0xfc, 0xde, + 0xbc, 0xc4, 0xef, 0xde, 0xcb, 0x1b, 0xd3, 0x15, 0x3d, 0x42, 0x0a, 0xb9, 0x6b, 0xf6, 0xfc, 0x8f, 0x43, 0x5f, 0x5a, + 0x86, 0x22, 0x05, 0x55, 0x2e, 0xfc, 0xaa, 0x83, 0x3d, 0x6d, 0xb9, 0x17, 0x40, 0xe0, 0x89, 0xe0, 0xe8, 0x70, 0xdf, + 0xcf, 0x7d, 0xf4, 0x47, 0xf4, 0xb3, 0xd7, 0x39, 0x2c, 0x15, 0xc6, 0xa1, 0x99, 0xb6, 0x73, 0xba, 0x41, 0x68, 0x24, + 0x77, 0xfe, 0xa9, 0x15, 0x64, 0xc8, 0x95, 0x24, 0x91, 0x9d, 0x44, 0x65, 0x91, 0x62, 0x4a, 0xfb, 0x43, 0xff, 0x75, + 0x7d, 0xc6, 0x1b, 0x3e, 0x17, 0xa5, 0x2c, 0x02, 0xe8, 0x47, 0x3b, 0x5e, 0xc4, 0x9e, 0x17, 0x97, 0x05, 0x7b, 0xd4, + 0x49, 0xde, 0x61, 0x44, 0xf6, 0xdb, 0x9f, 0x7a, 0x1d, 0xfb, 0x83, 0xb8, 0x1f, 0x7b, 0xba, 0x33, 0x2d, 0xf2, 0x62, + 0x1b, 0x78, 0x7f, 0x5c, 0x8f, 0xf9, 0x49, 0x46, 0xff, 0x21, 0xe9, 0x65, 0x4c, 0xaf, 0x62, 0x7a, 0x2a, 0x16, 0x75, + 0xe7, 0xec, 0xd8, 0x98, 0x31, 0x94, 0x4f, 0x43, 0x40, 0x9e, 0xd0, 0xf7, 0x01, 0xcd, 0x25, 0x67, 0x23, 0xad, 0x2b, + 0xfb, 0x10, 0x17, 0x97, 0xdc, 0x84, 0x6a, 0x31, 0x6f, 0x2b, 0x3d, 0x2a, 0xc4, 0x1b, 0x16, 0x80, 0x65, 0xe9, 0x69, + 0x93, 0x82, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xae, 0xad, 0xac, 0xe4, 0x0a, 0x78, 0xf5, 0xff, 0xd3, + 0xdc, 0xb3, 0x2e, 0xb7, 0x6d, 0x5c, 0xfd, 0xbf, 0x4f, 0x01, 0xc3, 0xae, 0x03, 0xd8, 0x00, 0x04, 0x90, 0xa2, 0x28, + 0x93, 0x22, 0x95, 0xc4, 0x76, 0xa6, 0xea, 0x28, 0x71, 0xc6, 0x56, 0x3d, 0x6d, 0x14, 0x8d, 0x08, 0x82, 0x4b, 0x12, + 0x35, 0x08, 0x60, 0x00, 0x50, 0xa2, 0x42, 0xa3, 0xcf, 0xd2, 0x67, 0xe9, 0x93, 0x7d, 0x73, 0xce, 0x5e, 0xb0, 0xb8, + 0x91, 0x54, 0xec, 0xb4, 0xdf, 0xa4, 0xaa, 0x89, 0xc5, 0xee, 0x62, 0xf7, 0xec, 0xee, 0xd9, 0x73, 0x3f, 0xee, 0x82, + 0xc9, 0x5e, 0x0c, 0x8d, 0x1c, 0xf6, 0xb9, 0xcf, 0x9f, 0x89, 0x85, 0x5b, 0x12, 0x08, 0x3e, 0x2b, 0x8b, 0x16, 0x8b, + 0x80, 0x68, 0x2a, 0x4f, 0x1e, 0xa2, 0x1a, 0xe2, 0x33, 0xe7, 0x4f, 0x6c, 0x1e, 0xb1, 0x53, 0xcf, 0xdb, 0x8e, 0x16, + 0x9f, 0x31, 0x11, 0x21, 0xed, 0x28, 0xe5, 0x8a, 0xb2, 0xd9, 0x3b, 0x54, 0x6f, 0xb0, 0x75, 0x29, 0x8e, 0xae, 0x39, + 0x8b, 0xd6, 0xd3, 0x80, 0x98, 0xb8, 0xdd, 0xe1, 0x93, 0xdb, 0xe9, 0x7a, 0x3a, 0x85, 0x2c, 0x2d, 0x4f, 0x6c, 0x03, + 0xe2, 0xce, 0x44, 0x29, 0xf2, 0x83, 0xb9, 0x3e, 0x84, 0x49, 0x59, 0x59, 0x75, 0xf8, 0x60, 0x2b, 0x02, 0xa2, 0x1e, + 0xfa, 0x81, 0x0c, 0x78, 0xbf, 0x86, 0x53, 0x3b, 0x52, 0x3f, 0xc0, 0xee, 0x4b, 0xd5, 0x61, 0xd3, 0xd1, 0x1f, 0x5d, + 0xab, 0x1f, 0x10, 0xc6, 0x98, 0xbd, 0xf8, 0x35, 0xdd, 0xbd, 0xaa, 0xa1, 0x52, 0xa5, 0xf7, 0x1a, 0xf3, 0x18, 0x80, + 0xd0, 0xf7, 0x8d, 0xef, 0x2e, 0xc2, 0x28, 0xcd, 0x7c, 0x4f, 0xbd, 0x19, 0x5e, 0xf8, 0xda, 0xf5, 0x2a, 0xd3, 0xf4, + 0x1b, 0xc3, 0xcb, 0xe4, 0x14, 0x28, 0x1c, 0x61, 0x62, 0x06, 0x94, 0xb6, 0x4a, 0xf2, 0x09, 0xda, 0x59, 0x91, 0xa3, + 0x66, 0xac, 0xe4, 0x65, 0x23, 0xa8, 0x57, 0xc9, 0xa7, 0x82, 0x89, 0xa1, 0x54, 0x6c, 0xa9, 0x0f, 0x29, 0xa7, 0xf2, + 0x7a, 0xbd, 0xc5, 0xab, 0x3c, 0x2b, 0x6e, 0x4b, 0x8c, 0x01, 0xcc, 0x1d, 0x67, 0xe8, 0xf3, 0x13, 0xd9, 0xe8, 0xb3, + 0x74, 0xef, 0x4e, 0xbe, 0x2b, 0xd3, 0x05, 0x70, 0x7f, 0x83, 0xc5, 0x45, 0x18, 0x65, 0x0a, 0x04, 0xb6, 0x81, 0x2f, + 0x4e, 0xaa, 0x46, 0x62, 0xac, 0x57, 0x4d, 0xcf, 0x19, 0x32, 0xf8, 0x1e, 0x2f, 0x3f, 0x8d, 0x85, 0x37, 0x2b, 0x45, + 0xb0, 0xa0, 0xcc, 0x42, 0x08, 0x0b, 0x98, 0x45, 0x97, 0xd1, 0x7d, 0x55, 0x0f, 0xf2, 0x7a, 0xb2, 0xff, 0xee, 0xd5, + 0x38, 0x99, 0xcc, 0xb3, 0xfa, 0x69, 0x2c, 0x31, 0x29, 0x27, 0x74, 0x2a, 0x67, 0x0a, 0x0d, 0x3f, 0x38, 0x0d, 0x93, + 0x81, 0x9d, 0x18, 0xde, 0x05, 0x80, 0x92, 0xd8, 0x35, 0x3d, 0xc9, 0x6f, 0x79, 0xea, 0x64, 0x9e, 0xb8, 0x58, 0xba, + 0x9c, 0x01, 0xbb, 0x86, 0xf1, 0x3a, 0xc3, 0x50, 0xbb, 0x30, 0x00, 0x92, 0xab, 0x0a, 0x86, 0xee, 0x04, 0x2c, 0x5d, + 0x90, 0x89, 0xb9, 0xaa, 0xf8, 0xb3, 0x7a, 0x19, 0x23, 0x7a, 0x01, 0x79, 0x21, 0x7e, 0x47, 0x41, 0x15, 0x3c, 0x26, + 0x6c, 0x1a, 0x9e, 0x51, 0xc4, 0xa9, 0xd7, 0x3c, 0x54, 0xe8, 0x34, 0x60, 0x06, 0x8f, 0xf6, 0x33, 0xd4, 0x82, 0xc6, + 0xc9, 0x42, 0xf8, 0xcd, 0xd2, 0x34, 0x27, 0xcf, 0xb6, 0x61, 0x7e, 0xfe, 0x6c, 0x9b, 0xe6, 0xa3, 0x67, 0x5b, 0x17, + 0x28, 0xb9, 0x5c, 0x85, 0x89, 0x16, 0x8e, 0x3a, 0xc5, 0xf4, 0x60, 0x53, 0xd1, 0x72, 0x05, 0x35, 0xf5, 0x23, 0xa6, + 0x8f, 0x8f, 0x13, 0x7f, 0xe5, 0x26, 0x0f, 0x54, 0x7d, 0x6f, 0xc8, 0x3a, 0x7e, 0x5d, 0x55, 0x28, 0x5e, 0xa7, 0xf3, + 0xa5, 0x28, 0x5e, 0x55, 0xbe, 0x15, 0x65, 0x84, 0x4d, 0x4e, 0xe8, 0x30, 0xe1, 0x5b, 0xb7, 0xea, 0x4b, 0x62, 0xcd, + 0x48, 0xe6, 0xfa, 0x01, 0x6d, 0x32, 0xe4, 0xc9, 0xe9, 0x6b, 0xb3, 0x49, 0xcb, 0xb3, 0x09, 0xcb, 0xdb, 0x05, 0x27, + 0x43, 0x31, 0x3e, 0x1d, 0x37, 0xce, 0x0c, 0x93, 0x56, 0x35, 0x2f, 0x20, 0x7d, 0xf7, 0x5f, 0x85, 0x3e, 0x01, 0xe8, + 0x87, 0x00, 0x7d, 0x12, 0x7a, 0xd1, 0x8c, 0xfc, 0xed, 0xfd, 0x85, 0xc8, 0x92, 0x05, 0x02, 0x9f, 0x09, 0xdb, 0x87, + 0x29, 0x92, 0x0b, 0x09, 0x92, 0x0a, 0x34, 0x9f, 0x95, 0x22, 0x76, 0x4c, 0x92, 0xab, 0xca, 0x39, 0x1d, 0x3b, 0x99, + 0xd1, 0x51, 0x8f, 0x22, 0x6c, 0x95, 0xe4, 0x67, 0x47, 0xb4, 0x36, 0xbd, 0xdc, 0x68, 0x25, 0x00, 0x43, 0x02, 0x33, + 0x2c, 0xa0, 0x00, 0x09, 0x3d, 0x47, 0x4e, 0xc1, 0x3f, 0x58, 0x2b, 0x14, 0xab, 0x3b, 0xe7, 0x65, 0xca, 0x04, 0x5b, + 0xa9, 0xe3, 0x33, 0x4c, 0xd1, 0x05, 0xd7, 0x33, 0x04, 0xf5, 0x38, 0x3b, 0xa2, 0x8f, 0x4a, 0xe5, 0x00, 0x14, 0x9d, + 0x70, 0x4e, 0x6e, 0xc0, 0x3a, 0x78, 0xd4, 0xc9, 0x80, 0x8c, 0xf0, 0x50, 0xea, 0xe6, 0xaa, 0xb2, 0x62, 0x94, 0x10, + 0x8b, 0x1e, 0x04, 0xa1, 0x05, 0x6c, 0x38, 0xaa, 0xaa, 0xb2, 0x72, 0x37, 0x38, 0x73, 0xfe, 0xc6, 0xdd, 0x68, 0x0e, + 0x7b, 0x55, 0x1c, 0xad, 0xb4, 0x7c, 0xb4, 0x3c, 0xb6, 0xb8, 0xe0, 0x37, 0x20, 0x18, 0xe9, 0x25, 0xea, 0x63, 0x1b, + 0x16, 0x77, 0xc9, 0x17, 0x77, 0xd6, 0xb2, 0xb8, 0xb3, 0x1d, 0x8b, 0x1b, 0xb0, 0x85, 0x54, 0x04, 0xe8, 0x12, 0xf4, + 0x05, 0x13, 0xc0, 0x63, 0x74, 0xc5, 0x80, 0x9d, 0x33, 0x84, 0x93, 0x99, 0x06, 0x60, 0x0b, 0xd5, 0x02, 0xab, 0x26, + 0xb8, 0x48, 0x80, 0xa8, 0x4f, 0x5c, 0x9c, 0x3a, 0x3e, 0x6f, 0x48, 0xb9, 0xa9, 0x05, 0xd5, 0xf9, 0xc2, 0x2e, 0xa5, + 0xe9, 0xc4, 0xb5, 0x65, 0xcb, 0x4c, 0x97, 0x3b, 0x66, 0xea, 0x95, 0x8e, 0x2e, 0x9b, 0x36, 0x3d, 0x84, 0xf2, 0xa4, + 0x60, 0x0f, 0x82, 0x7d, 0x28, 0x6e, 0x99, 0xf2, 0x3e, 0x6c, 0x47, 0xa9, 0xd2, 0x8e, 0x8a, 0xdd, 0x34, 0xbd, 0x8f, + 0x12, 0x50, 0xb0, 0x40, 0x37, 0x8f, 0xdb, 0x52, 0x2b, 0x3f, 0x64, 0xb1, 0x5b, 0x5a, 0x37, 0x53, 0xf1, 0x5e, 0xde, + 0x52, 0x9d, 0x5e, 0x8f, 0xd6, 0x88, 0xdd, 0x2c, 0x23, 0x09, 0x02, 0xdd, 0x85, 0x20, 0xdf, 0xff, 0x4f, 0xb6, 0x59, + 0x03, 0x0e, 0x09, 0xf4, 0x02, 0xab, 0x23, 0x86, 0x8e, 0x81, 0x94, 0x4a, 0xf8, 0xbd, 0x2b, 0xc5, 0x81, 0x4b, 0x04, + 0xe0, 0x7f, 0xc2, 0xe3, 0xaa, 0x25, 0x92, 0xa7, 0x92, 0x73, 0xa2, 0x5b, 0xb1, 0x3b, 0xfb, 0x00, 0x7a, 0x3c, 0xad, + 0x63, 0x80, 0x4d, 0xae, 0x1c, 0xf5, 0x2d, 0xa1, 0xb4, 0x9d, 0x57, 0x20, 0x49, 0xc4, 0x92, 0xcc, 0xe2, 0x09, 0x9c, + 0x25, 0x5d, 0x73, 0x7e, 0xb3, 0xed, 0xe4, 0x47, 0x0b, 0x5f, 0xaf, 0x61, 0x4d, 0x40, 0x6d, 0xc1, 0x68, 0x2c, 0x58, + 0xac, 0xc0, 0x70, 0x4e, 0x74, 0x10, 0xf4, 0x5e, 0x43, 0xfa, 0x52, 0x9b, 0xf3, 0xaf, 0x93, 0x04, 0x2e, 0xa9, 0x6b, + 0xfb, 0x26, 0x7f, 0xbe, 0xc0, 0x5f, 0xce, 0x4d, 0xfe, 0x7c, 0x8a, 0xbf, 0x3a, 0x37, 0x98, 0xa8, 0xae, 0x81, 0x6f, + 0x97, 0xe6, 0xac, 0x8e, 0x4b, 0xfb, 0x89, 0x9a, 0x9b, 0x3d, 0x62, 0xdb, 0xb0, 0x05, 0x7e, 0xfa, 0x6c, 0x9b, 0x82, + 0x83, 0xa5, 0x3c, 0x87, 0xd0, 0x4a, 0xf4, 0xbc, 0xb1, 0x7c, 0xd1, 0x52, 0x3e, 0xd5, 0xff, 0xcb, 0xf7, 0x3c, 0xee, + 0x92, 0xa8, 0xb8, 0x53, 0xca, 0x52, 0x87, 0xdb, 0xa9, 0x1f, 0xba, 0xc9, 0xc3, 0x2d, 0xe5, 0x26, 0x34, 0x4e, 0xaa, + 0x0b, 0x69, 0x0a, 0xa5, 0x26, 0xcb, 0xda, 0xad, 0x4c, 0x92, 0xe7, 0x3e, 0xb0, 0x8b, 0x7e, 0xf4, 0xf7, 0x44, 0xa2, + 0xd2, 0x4a, 0xfc, 0x26, 0x5b, 0x90, 0xd2, 0x87, 0x6e, 0x9f, 0x6d, 0x35, 0x52, 0xef, 0xa6, 0x32, 0xdb, 0x0a, 0x19, + 0x08, 0xcb, 0x83, 0xbc, 0xeb, 0x6a, 0xe6, 0x0f, 0x50, 0x7d, 0x35, 0x8d, 0x36, 0xe6, 0xb3, 0x6d, 0x76, 0xae, 0xae, + 0xdc, 0xe4, 0x13, 0x99, 0x99, 0x9e, 0x9f, 0x78, 0x01, 0x51, 0x07, 0xea, 0x34, 0x70, 0xc3, 0x4f, 0xec, 0xd1, 0x8c, + 0xd6, 0x19, 0x2a, 0xa4, 0xf7, 0xb2, 0xba, 0x1c, 0x26, 0x54, 0x42, 0x87, 0xb4, 0x69, 0x03, 0x14, 0x94, 0xd7, 0x42, + 0xbe, 0x55, 0xd0, 0x85, 0x45, 0x2d, 0x03, 0xec, 0x29, 0x41, 0x47, 0x0e, 0x0e, 0xaa, 0x86, 0x8a, 0xeb, 0xa5, 0x1a, + 0xf2, 0x54, 0xa9, 0x6c, 0x52, 0x64, 0x58, 0xbc, 0xc5, 0x1e, 0x7e, 0xff, 0xe7, 0x68, 0xee, 0xeb, 0xc3, 0x3f, 0xc7, + 0x68, 0xbc, 0xf6, 0x0f, 0xca, 0x8d, 0xdd, 0x34, 0x5d, 0xaf, 0xc8, 0x8c, 0xea, 0xe2, 0xce, 0x8b, 0xa1, 0x94, 0x69, + 0x79, 0x79, 0x38, 0xbf, 0xae, 0x3b, 0xfd, 0xe3, 0xd7, 0x60, 0x23, 0x00, 0x34, 0x5d, 0x34, 0x9f, 0xab, 0x05, 0x57, + 0xbd, 0xa7, 0x99, 0x73, 0xfc, 0xeb, 0xfa, 0x87, 0xb7, 0xf6, 0x0f, 0xa2, 0x71, 0xa8, 0xea, 0xf9, 0x84, 0x2b, 0x3c, + 0x19, 0x69, 0x2a, 0x8d, 0x97, 0xcf, 0x68, 0xee, 0x86, 0xed, 0xd3, 0xb9, 0x2e, 0xed, 0xb2, 0x98, 0x90, 0x19, 0xd8, + 0xc2, 0x1a, 0xb5, 0xd2, 0xdb, 0x80, 0xdc, 0x11, 0xa1, 0x4c, 0xad, 0x7f, 0xac, 0xa1, 0x05, 0x46, 0x7b, 0x63, 0x4a, + 0x5a, 0x46, 0x58, 0x49, 0x53, 0x9a, 0xe0, 0x1c, 0xd8, 0xcc, 0xe5, 0x5d, 0x5e, 0xd9, 0xd5, 0x13, 0x43, 0x95, 0x06, + 0xd0, 0x3a, 0xb2, 0xf3, 0x96, 0xf2, 0x01, 0xa6, 0x7a, 0x6e, 0x1e, 0x9b, 0xe1, 0xe8, 0x03, 0x88, 0x8e, 0xcd, 0xe0, + 0x14, 0xc0, 0xe6, 0xd7, 0x0a, 0x01, 0x44, 0x1b, 0xc4, 0x9a, 0xc4, 0x52, 0x2a, 0x95, 0x77, 0x70, 0xfb, 0x42, 0x34, + 0xb4, 0xe5, 0x92, 0x9f, 0xc6, 0xb5, 0x51, 0xca, 0x33, 0x9f, 0x62, 0x0a, 0xd5, 0x90, 0xa4, 0x69, 0x2b, 0xc0, 0xc4, + 0xa2, 0x1b, 0x6a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0xb0, 0x0d, 0xb8, 0x95, 0x71, 0x82, 0xd5, 0x6f, 0x21, 0x86, + 0xbf, 0x5d, 0x31, 0x0b, 0x91, 0x64, 0x31, 0x55, 0x99, 0xf6, 0xbe, 0xed, 0xfd, 0xbd, 0xca, 0x06, 0x55, 0xba, 0x29, + 0x1b, 0x87, 0xa6, 0x95, 0xb0, 0x5f, 0x4d, 0x40, 0x83, 0x1d, 0xf0, 0x31, 0x55, 0x50, 0x1c, 0x99, 0xcf, 0x89, 0x97, + 0xa5, 0x3a, 0x17, 0xd7, 0x88, 0x78, 0xad, 0xe0, 0xa7, 0xf3, 0x64, 0xa4, 0xfe, 0x04, 0x5e, 0xeb, 0x3c, 0xac, 0x11, + 0x1b, 0x10, 0x67, 0x5b, 0x9a, 0xc1, 0x44, 0x7b, 0x2c, 0x83, 0x88, 0x7d, 0x05, 0xd2, 0x71, 0x37, 0x94, 0xe3, 0xd0, + 0xd8, 0x15, 0x50, 0xec, 0x8b, 0x48, 0xd8, 0x91, 0xec, 0x46, 0x40, 0xbb, 0x8e, 0xef, 0xd6, 0xf9, 0xa1, 0xe7, 0xd8, + 0xb9, 0x6a, 0x80, 0xb7, 0xd4, 0xa7, 0x43, 0x0f, 0x3d, 0xb6, 0xea, 0x42, 0xab, 0x75, 0xf8, 0x98, 0x76, 0x1d, 0xe7, + 0x95, 0xa3, 0x1a, 0xd4, 0x48, 0x4d, 0xc2, 0x6d, 0x5e, 0x74, 0x47, 0x92, 0x2f, 0x9e, 0x4a, 0xb9, 0xf3, 0xc3, 0xc6, + 0x73, 0xe2, 0xd8, 0x80, 0x84, 0xb3, 0x28, 0x7e, 0xc4, 0x14, 0xba, 0xaa, 0xa1, 0x7a, 0x41, 0x94, 0x12, 0x79, 0x0e, + 0x54, 0xec, 0xf0, 0x85, 0x93, 0xf8, 0xf9, 0xfd, 0xdb, 0x0f, 0x1f, 0x54, 0x03, 0x73, 0x6f, 0xa6, 0x72, 0xef, 0x6c, + 0x43, 0xed, 0xc1, 0xfe, 0x8d, 0xfb, 0x8e, 0xde, 0x30, 0x94, 0xaf, 0x2c, 0xef, 0x39, 0x5a, 0x56, 0xdb, 0x72, 0xec, + 0xe6, 0x61, 0x5f, 0xa6, 0xcc, 0xe0, 0x41, 0xf3, 0x6a, 0xc0, 0x0d, 0xbb, 0xaf, 0xb7, 0x52, 0xc9, 0xca, 0x0f, 0x6f, + 0x1b, 0x4a, 0xdd, 0x4d, 0x43, 0x29, 0x70, 0x53, 0x35, 0x5c, 0xb5, 0x8e, 0x56, 0xd2, 0xed, 0x0c, 0xa9, 0x93, 0xf7, + 0x81, 0x4b, 0x62, 0x69, 0xbe, 0x60, 0xd0, 0x2c, 0x76, 0x7a, 0x75, 0xd4, 0x0d, 0xc5, 0x8c, 0x0f, 0x11, 0xb0, 0xf5, + 0x02, 0x30, 0xb1, 0x23, 0xb2, 0x1e, 0xac, 0x4c, 0xb9, 0x09, 0x03, 0x59, 0xa9, 0x13, 0x4a, 0x61, 0xde, 0x66, 0x64, + 0x15, 0x93, 0xc4, 0xcd, 0xd6, 0x09, 0xb9, 0x0d, 0xa2, 0xfb, 0x27, 0x85, 0x01, 0xfb, 0x9e, 0xca, 0x4b, 0x7f, 0xb1, + 0x14, 0xb5, 0xcf, 0x35, 0x32, 0x12, 0x0b, 0xb8, 0xf3, 0x03, 0xf9, 0x7f, 0xfe, 0x6d, 0x59, 0xff, 0xf9, 0xf7, 0xde, + 0xaa, 0xd0, 0x7d, 0x3e, 0x31, 0xb2, 0xd1, 0x01, 0xfb, 0xa2, 0xf9, 0x4b, 0x65, 0x98, 0x37, 0xd7, 0xa9, 0x2d, 0x02, + 0xbc, 0xaf, 0x2d, 0x41, 0xad, 0xb0, 0xbc, 0x6f, 0x1e, 0x35, 0x30, 0x98, 0xd7, 0xde, 0x91, 0x41, 0xa5, 0x2f, 0x1a, + 0xda, 0x44, 0x1f, 0x1c, 0xb4, 0x22, 0xbf, 0x1f, 0xc2, 0xfb, 0xe6, 0xf0, 0x85, 0xc3, 0x67, 0xa2, 0xc1, 0xd7, 0x93, + 0x89, 0xc8, 0xe6, 0x26, 0x37, 0x05, 0xa3, 0xfa, 0xf3, 0x5a, 0x09, 0xbb, 0x3c, 0x07, 0xb6, 0x4e, 0xbd, 0xdd, 0x47, + 0xaf, 0x27, 0x68, 0xfe, 0x75, 0x36, 0x4d, 0x0a, 0x62, 0xa5, 0x15, 0xb5, 0x51, 0xf3, 0xed, 0x5a, 0xa7, 0x35, 0xbc, + 0x06, 0xa5, 0x98, 0xe2, 0x2b, 0x9f, 0xe8, 0xc6, 0xeb, 0x09, 0x93, 0xed, 0x30, 0x8b, 0xd3, 0x41, 0x75, 0x6b, 0x33, + 0xc9, 0x68, 0x09, 0xe8, 0x86, 0x42, 0x35, 0x2e, 0x58, 0x99, 0x14, 0xa2, 0x34, 0x14, 0xa9, 0x03, 0x53, 0x3f, 0xc9, + 0x31, 0xc3, 0xc8, 0xbb, 0x36, 0xab, 0xac, 0x9f, 0xf7, 0x5b, 0x65, 0x5d, 0x1d, 0x64, 0x95, 0xf5, 0xf3, 0x57, 0xb7, + 0xca, 0x7a, 0x27, 0x5b, 0x65, 0xc1, 0x22, 0xbe, 0x25, 0x07, 0x99, 0x4a, 0x71, 0x3b, 0x89, 0xe8, 0x3e, 0x1d, 0x39, + 0x8c, 0xa4, 0x4d, 0xbd, 0x25, 0x01, 0x36, 0x9d, 0xad, 0x4a, 0x10, 0x2d, 0xc0, 0x6c, 0xea, 0x8f, 0x37, 0x70, 0x0a, + 0xa2, 0x85, 0x6c, 0xde, 0x14, 0xb2, 0x18, 0xab, 0x45, 0xdc, 0x24, 0x6a, 0x52, 0x64, 0x1b, 0x3c, 0xca, 0x92, 0x79, + 0xac, 0x4b, 0x79, 0xa4, 0x85, 0xbd, 0x58, 0x87, 0x1b, 0x1d, 0x0d, 0xd0, 0x5e, 0x49, 0x34, 0xec, 0xbc, 0xe4, 0xd1, + 0x24, 0xe4, 0x1e, 0x84, 0x5d, 0x2e, 0x8d, 0xcc, 0xb0, 0x55, 0x7f, 0xdd, 0x38, 0xdf, 0x5f, 0x3b, 0xc3, 0xae, 0x03, + 0xee, 0xd0, 0xc0, 0xe4, 0x61, 0x81, 0x3d, 0xec, 0x76, 0xa1, 0xe0, 0x5e, 0x2a, 0xe8, 0x40, 0x81, 0x2f, 0x15, 0xf4, + 0xa0, 0xc0, 0x93, 0x0a, 0x4e, 0xa0, 0x60, 0x26, 0x15, 0xf4, 0xa1, 0xe0, 0x4e, 0xcd, 0xaf, 0x43, 0x31, 0xdc, 0xbe, + 0x7e, 0x63, 0x50, 0xa6, 0x82, 0x97, 0xf5, 0x0d, 0x07, 0xec, 0x94, 0xdc, 0xc5, 0x20, 0x32, 0xa8, 0x80, 0x6f, 0x90, + 0x18, 0xf7, 0x4b, 0x42, 0x43, 0x33, 0xbf, 0xc1, 0x3b, 0xc7, 0xca, 0x22, 0xb0, 0x54, 0xe6, 0x21, 0x0f, 0x38, 0x1c, + 0x14, 0x55, 0x07, 0x99, 0xcd, 0x50, 0xac, 0x1c, 0x0f, 0x1b, 0x21, 0xad, 0x65, 0xf1, 0x8e, 0x7e, 0xce, 0x14, 0x5b, + 0xa0, 0xb0, 0xf1, 0xd0, 0x64, 0xc1, 0xe0, 0xd7, 0xd0, 0xf4, 0xbf, 0x21, 0xd3, 0xf5, 0x42, 0xb9, 0x8c, 0x16, 0x7b, + 0x95, 0xf6, 0xf2, 0x2b, 0x18, 0xa5, 0x4a, 0x35, 0x20, 0x26, 0xdf, 0x96, 0xec, 0x5b, 0xf4, 0x31, 0x2f, 0xd7, 0xcf, + 0x60, 0x6c, 0x4a, 0x46, 0x4d, 0x46, 0xe0, 0x3b, 0x00, 0x23, 0x49, 0x6b, 0x7e, 0x09, 0x70, 0x96, 0x9e, 0xaf, 0x5c, + 0x69, 0x3c, 0xe3, 0x1f, 0x49, 0x9a, 0xba, 0x0b, 0x5e, 0xbf, 0x3e, 0x4e, 0x30, 0x93, 0x11, 0xfc, 0x17, 0x02, 0x10, + 0x84, 0x69, 0x7e, 0xcd, 0x1a, 0x22, 0x89, 0xee, 0x15, 0xb0, 0xb7, 0x81, 0x0d, 0x55, 0x58, 0x06, 0xf8, 0x16, 0x2c, + 0x61, 0x59, 0x87, 0x0f, 0x87, 0xff, 0x8e, 0x04, 0xd5, 0xc2, 0xcc, 0x5d, 0x54, 0x8b, 0xe8, 0x3e, 0xc8, 0xe5, 0xb1, + 0x09, 0x15, 0x7a, 0xa9, 0xf0, 0x4b, 0x74, 0xc2, 0x41, 0xb4, 0xf8, 0x43, 0x15, 0xc2, 0x3b, 0x14, 0xf9, 0x1f, 0x42, + 0xc3, 0xcf, 0x26, 0x16, 0xc2, 0x58, 0xb1, 0x00, 0x84, 0x83, 0x30, 0x5b, 0x9a, 0xe8, 0xcc, 0xa5, 0x75, 0x42, 0xdd, + 0xb0, 0x70, 0x6d, 0xb7, 0x55, 0x17, 0xd6, 0x41, 0xb2, 0x98, 0xba, 0x9a, 0xd3, 0xe9, 0x1b, 0xfc, 0xcf, 0xb2, 0x7b, + 0x7a, 0x8e, 0x3d, 0x28, 0x33, 0xff, 0x6e, 0x3b, 0x8f, 0xc2, 0xcc, 0x9c, 0xbb, 0x2b, 0x3f, 0x78, 0x18, 0xac, 0xa2, + 0x30, 0x4a, 0x63, 0xd7, 0x23, 0xc3, 0x82, 0xa1, 0x1e, 0x62, 0x70, 0x04, 0xe6, 0x9f, 0xe7, 0x58, 0x9d, 0x84, 0xac, + 0x68, 0x6b, 0x11, 0xfb, 0x60, 0x1e, 0x90, 0x4d, 0xce, 0x3e, 0x5f, 0xaa, 0x4c, 0xab, 0xe2, 0x96, 0xa3, 0x2d, 0x80, + 0x22, 0x65, 0x81, 0x15, 0x20, 0x9c, 0xd0, 0x30, 0x76, 0x67, 0x18, 0x0b, 0xd0, 0xea, 0xf4, 0x12, 0xb2, 0x52, 0xac, + 0x5e, 0x6b, 0xe7, 0x49, 0x74, 0x3f, 0x86, 0xd1, 0x62, 0x63, 0x33, 0x25, 0xc1, 0x1c, 0xdf, 0x98, 0xe8, 0xcb, 0xc1, + 0xfb, 0x31, 0x91, 0x11, 0x87, 0xde, 0xc8, 0x6a, 0x08, 0xaf, 0x07, 0x1d, 0xc5, 0x1e, 0xae, 0xfc, 0xd0, 0xa4, 0xd3, + 0xe9, 0xdb, 0xb1, 0xd4, 0x97, 0x0c, 0x3f, 0x7d, 0x8b, 0xd5, 0x1d, 0xc5, 0x1e, 0x02, 0xb3, 0x36, 0x0f, 0xa2, 0xfb, + 0xc1, 0xd2, 0x9f, 0xcd, 0x48, 0x38, 0xc4, 0x31, 0x8b, 0x42, 0x12, 0x04, 0x7e, 0x9c, 0xfa, 0xe9, 0x70, 0xe5, 0x6e, + 0x58, 0xaf, 0xc7, 0x6d, 0xbd, 0x76, 0x59, 0xaf, 0xdd, 0x83, 0x7b, 0x95, 0xba, 0x01, 0xbf, 0x11, 0xda, 0x0f, 0x1b, + 0x5a, 0x4f, 0xb1, 0x2b, 0xf3, 0x3c, 0xb8, 0xd7, 0x38, 0x21, 0xdb, 0x95, 0x9b, 0x2c, 0xfc, 0x70, 0x60, 0xe7, 0xd6, + 0xdd, 0x96, 0x6e, 0x8c, 0xa7, 0xa7, 0xa7, 0xa7, 0xb9, 0x35, 0xe3, 0x4f, 0xf6, 0x6c, 0x96, 0x5b, 0x1e, 0x7f, 0x9a, + 0xcf, 0x6d, 0x7b, 0x3e, 0xcf, 0x2d, 0x9f, 0x17, 0x74, 0x3b, 0xde, 0xac, 0xdb, 0xc9, 0xad, 0x7b, 0xa9, 0x46, 0x6e, + 0x11, 0xf6, 0x94, 0x90, 0xd9, 0x10, 0x37, 0x12, 0x35, 0xe4, 0x1c, 0xf4, 0x6d, 0x3b, 0x47, 0x0c, 0x70, 0x5d, 0xc2, + 0x4d, 0x28, 0xeb, 0xb9, 0xd9, 0x1e, 0x5c, 0x53, 0x29, 0x3e, 0xe7, 0x79, 0x8d, 0xf5, 0x66, 0x6e, 0xf2, 0xe9, 0x46, + 0x91, 0x66, 0xe1, 0xba, 0xb4, 0xda, 0x96, 0x83, 0xc1, 0xdc, 0x0c, 0x20, 0x48, 0xd6, 0x70, 0x1a, 0x25, 0x70, 0x66, + 0x13, 0x77, 0xe6, 0xaf, 0xd3, 0x81, 0xd3, 0x89, 0x37, 0xbc, 0x88, 0xed, 0xf5, 0xa2, 0x00, 0xcf, 0xde, 0x20, 0x8d, + 0x02, 0x7f, 0xc6, 0x8b, 0xda, 0xce, 0x92, 0xd3, 0xd1, 0x87, 0xe8, 0x22, 0xee, 0x63, 0xa0, 0x03, 0x37, 0x08, 0x14, + 0xab, 0x9b, 0x2a, 0xc4, 0x4d, 0x51, 0xc4, 0xab, 0xd8, 0x29, 0x85, 0x0b, 0xba, 0x83, 0x3b, 0xc7, 0xf1, 0x46, 0xec, + 0x79, 0xe7, 0x24, 0xde, 0xe4, 0xdf, 0xae, 0xc8, 0xcc, 0x77, 0x15, 0xad, 0xd8, 0x4d, 0x8e, 0x0d, 0x62, 0x60, 0x7d, + 0xdb, 0xb2, 0x4d, 0xf9, 0xb1, 0x80, 0x60, 0x82, 0x4f, 0xfc, 0x55, 0x1c, 0x25, 0x99, 0x1b, 0x66, 0x79, 0x3e, 0xb9, + 0xc9, 0xf3, 0xe1, 0x95, 0xaf, 0x5d, 0xff, 0x43, 0xa3, 0xf7, 0x34, 0x55, 0x9b, 0xe4, 0xfa, 0x8d, 0xf1, 0x96, 0xc8, + 0x56, 0x1a, 0x70, 0x8d, 0xa1, 0x85, 0x86, 0x5c, 0x99, 0xde, 0x92, 0xf5, 0xca, 0x14, 0xc8, 0xa2, 0x3a, 0xb5, 0xfa, + 0x28, 0x57, 0xc1, 0x1b, 0x08, 0x2a, 0xbc, 0x25, 0xa3, 0x2b, 0xc9, 0xe2, 0x03, 0x88, 0x15, 0xac, 0x4c, 0x2d, 0xf9, + 0x9f, 0xb5, 0xd1, 0x8c, 0xdf, 0xed, 0xa7, 0x19, 0x7f, 0xc9, 0x0e, 0xa1, 0x19, 0xbf, 0xfb, 0xea, 0x34, 0xe3, 0xb3, + 0xba, 0x25, 0xff, 0x45, 0x34, 0x52, 0x85, 0x90, 0x1f, 0xae, 0xa6, 0x84, 0xc6, 0xc8, 0xb9, 0xf8, 0xdd, 0x86, 0xf7, + 0xbc, 0x37, 0x9a, 0xf5, 0x8d, 0xde, 0xdc, 0x20, 0x8f, 0x7d, 0x17, 0x8e, 0xfe, 0x9e, 0xc8, 0xcf, 0xf3, 0xf9, 0xe8, + 0x4d, 0x24, 0x15, 0x88, 0x27, 0x66, 0xff, 0x50, 0x8a, 0x67, 0x40, 0xdf, 0x70, 0xbb, 0x47, 0xcc, 0xf8, 0x00, 0xee, + 0xd0, 0xd4, 0xce, 0x77, 0x26, 0xec, 0xbd, 0x86, 0xe5, 0x21, 0x68, 0xc2, 0xc8, 0x92, 0x3b, 0xbd, 0xd4, 0x44, 0x89, + 0x0b, 0x92, 0x31, 0x2f, 0xd5, 0xef, 0x1f, 0x2e, 0x66, 0xda, 0x45, 0xa4, 0xe7, 0x7e, 0xfa, 0xae, 0xea, 0x72, 0xc2, + 0xd4, 0x2f, 0x23, 0x79, 0x3a, 0x39, 0xb3, 0xd9, 0x92, 0x53, 0x3a, 0xc3, 0x6b, 0xda, 0xfc, 0xbc, 0x34, 0xd3, 0x81, + 0xdc, 0x90, 0xa5, 0x96, 0xaa, 0x5d, 0xc6, 0xcc, 0xde, 0x7f, 0xcb, 0x28, 0x40, 0xcc, 0x96, 0x85, 0x9e, 0xba, 0x33, + 0xda, 0xdc, 0x9f, 0xe5, 0xb9, 0x3e, 0xe4, 0x80, 0x90, 0x2e, 0x5a, 0xb2, 0x8f, 0x88, 0x4b, 0xef, 0x85, 0x59, 0x01, + 0x53, 0xd2, 0x51, 0x0d, 0xdc, 0x05, 0xe8, 0xb4, 0x99, 0xbe, 0x8e, 0xc1, 0x4c, 0x55, 0x28, 0xf8, 0xa8, 0xad, 0x83, + 0x34, 0x21, 0x50, 0xc2, 0x0a, 0xf8, 0xf3, 0x57, 0xbc, 0xa0, 0x6e, 0x35, 0x49, 0x81, 0x83, 0x4a, 0x79, 0xf0, 0xab, + 0xe7, 0x72, 0x6d, 0x8a, 0x76, 0x58, 0x1d, 0x7c, 0xc8, 0x55, 0x41, 0xfb, 0xe1, 0xf6, 0x1b, 0x9f, 0x1d, 0x41, 0x83, + 0x71, 0x45, 0x77, 0xbf, 0xc7, 0x26, 0x10, 0x48, 0x89, 0xf4, 0xde, 0xb0, 0xd2, 0x7b, 0xe5, 0xc5, 0x96, 0xc7, 0xa4, + 0xc8, 0xdc, 0xd8, 0x04, 0x16, 0x1f, 0x71, 0x2f, 0xc3, 0x78, 0x52, 0xf8, 0x8b, 0xe1, 0x3a, 0x05, 0xdc, 0x88, 0x8c, + 0x2a, 0xe2, 0x9f, 0xa1, 0xb7, 0x4e, 0xd2, 0x28, 0x19, 0xc4, 0x91, 0x1f, 0x66, 0x24, 0xc9, 0x11, 0x54, 0xd7, 0x08, + 0x1f, 0x0e, 0x9e, 0x9b, 0x6d, 0x14, 0xbb, 0x9e, 0x9f, 0x3d, 0x0c, 0x6c, 0x46, 0x52, 0xd8, 0x43, 0x46, 0x1d, 0xd8, + 0x8d, 0xf5, 0x07, 0x0c, 0x9a, 0x2f, 0x91, 0xf0, 0x4b, 0xea, 0xe4, 0x8c, 0xbc, 0xcd, 0x87, 0xd2, 0x5b, 0x1a, 0x95, + 0x03, 0xc8, 0x0f, 0x37, 0x31, 0x17, 0x80, 0xe5, 0x61, 0xa9, 0xed, 0x19, 0x59, 0x18, 0x88, 0xb5, 0x41, 0x2e, 0xcf, + 0xff, 0xac, 0x9e, 0xae, 0xd8, 0xcd, 0xc5, 0x40, 0xf1, 0xe8, 0x87, 0x8c, 0x6c, 0xe0, 0x42, 0x0e, 0x2b, 0xe3, 0x90, + 0x9a, 0x53, 0x32, 0x8f, 0x12, 0x42, 0x23, 0xb8, 0x3a, 0xa7, 0xf1, 0xe6, 0xf0, 0xee, 0x77, 0x4f, 0xbf, 0xb9, 0x9f, + 0x30, 0xca, 0x34, 0xde, 0x99, 0xbe, 0xa7, 0xb7, 0xfa, 0x7d, 0x06, 0xa4, 0x21, 0x85, 0xbc, 0x47, 0x83, 0x65, 0x0d, + 0x54, 0x75, 0xd8, 0x18, 0x28, 0x2b, 0x8e, 0xd8, 0x9d, 0x97, 0x90, 0xc0, 0xcd, 0xfc, 0x3b, 0x4e, 0x33, 0x76, 0x4f, + 0xe2, 0x0d, 0x5f, 0x63, 0xbc, 0xf0, 0x1e, 0xb1, 0x48, 0x95, 0xa1, 0xf0, 0x45, 0xaa, 0x16, 0xe3, 0x22, 0x0d, 0x6b, + 0xb3, 0xe1, 0xb1, 0x23, 0x2a, 0x37, 0x7d, 0x2f, 0xde, 0xc8, 0x57, 0x74, 0xd1, 0x4c, 0xdc, 0xd4, 0xd5, 0xa0, 0x5f, + 0x2b, 0x7f, 0x36, 0x0b, 0x48, 0x5e, 0x5a, 0xe8, 0xf2, 0x5a, 0x4a, 0xc0, 0x11, 0x70, 0x70, 0xa7, 0x69, 0x14, 0xac, + 0x33, 0xd2, 0x0c, 0x2e, 0x0a, 0x9c, 0x8e, 0x5d, 0x00, 0x07, 0x7f, 0x97, 0xc7, 0xda, 0x03, 0x72, 0x1b, 0xb6, 0x89, + 0x3d, 0x84, 0x18, 0xbf, 0x66, 0xb7, 0x3c, 0x74, 0x78, 0x25, 0x06, 0x6d, 0x34, 0x4c, 0xc4, 0x80, 0x6b, 0x89, 0x62, + 0x6f, 0xc5, 0x72, 0x58, 0x99, 0x88, 0x73, 0x2a, 0x8a, 0xf2, 0xf2, 0x64, 0xfe, 0x98, 0x33, 0xf6, 0xaa, 0xf9, 0x8c, + 0xbd, 0xe2, 0x67, 0x6c, 0xf7, 0xce, 0x7c, 0x3a, 0x77, 0xe0, 0xbf, 0x61, 0x31, 0xa1, 0x81, 0xad, 0x74, 0xe3, 0x8d, + 0xe2, 0xc4, 0x1b, 0xc5, 0xec, 0xc4, 0x1b, 0x05, 0xbb, 0x46, 0x93, 0x0c, 0xc3, 0xea, 0xe8, 0x86, 0xad, 0x40, 0x21, + 0xfc, 0xd9, 0xa5, 0x57, 0xce, 0x31, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, 0xee, 0xa3, 0x4e, 0xcf, 0x12, 0x47, + 0xda, 0xba, 0x95, 0xb9, 0xd3, 0x29, 0x99, 0x0d, 0xe6, 0x91, 0xb7, 0x4e, 0xff, 0xc5, 0xc6, 0xcf, 0x80, 0xb8, 0x13, + 0x11, 0x54, 0xfa, 0xe1, 0x4d, 0x41, 0x51, 0x72, 0x47, 0x78, 0x0f, 0x5b, 0xb1, 0x4e, 0x03, 0x1a, 0x90, 0xb8, 0x63, + 0x1d, 0x37, 0x6c, 0xf2, 0x66, 0x40, 0xff, 0x61, 0xab, 0xd4, 0x8e, 0x62, 0xbe, 0x00, 0x2c, 0x3b, 0xc1, 0xf1, 0x78, + 0x68, 0xb0, 0xd5, 0xb4, 0x4f, 0x9b, 0x87, 0x7b, 0xcd, 0xbf, 0x74, 0xc3, 0x2f, 0x15, 0x76, 0x6f, 0x31, 0x57, 0x90, + 0xdd, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x3b, 0x2e, 0x84, 0xa2, 0xee, 0x81, 0x58, 0xfe, 0xe9, 0xab, 0x63, 0xf8, + 0x8f, 0x52, 0xf5, 0xbf, 0x64, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xf6, 0x9a, 0x92, 0x4a, 0x48, 0x88, 0x1f, 0x5e, 0x7f, + 0x3e, 0x7f, 0x5c, 0x83, 0x83, 0x6b, 0x53, 0x6b, 0xa6, 0x6a, 0xed, 0xef, 0xa3, 0x08, 0x92, 0x65, 0xd6, 0xab, 0x73, + 0xf0, 0x50, 0xf3, 0xf2, 0x6c, 0x04, 0x8d, 0x38, 0x1f, 0x41, 0xb5, 0xf8, 0x2a, 0xb6, 0xa1, 0xac, 0xc4, 0xdb, 0x36, + 0x56, 0xe2, 0xcd, 0x7e, 0x56, 0xe2, 0xaf, 0x07, 0xb1, 0x12, 0x6f, 0xbe, 0x3a, 0x2b, 0xf1, 0xb6, 0xce, 0x4a, 0x5c, + 0x45, 0xdc, 0x84, 0xd5, 0xb8, 0x58, 0xb3, 0x9f, 0x1f, 0xa9, 0x52, 0xee, 0x32, 0x1a, 0xf5, 0x6c, 0x1a, 0x64, 0xf8, + 0xea, 0x77, 0x33, 0x16, 0xb8, 0x11, 0xdf, 0xa3, 0x45, 0x57, 0xc1, 0x5a, 0x30, 0xcc, 0x8e, 0xdf, 0x91, 0x8a, 0x83, + 0x28, 0x5c, 0xfc, 0x0c, 0x4a, 0x59, 0x10, 0x07, 0x26, 0xd2, 0x0b, 0x3f, 0xfd, 0x39, 0x8a, 0xd7, 0xf1, 0x05, 0xf4, + 0xf5, 0xd1, 0x4f, 0xfd, 0x69, 0x40, 0x84, 0xef, 0x2f, 0xb5, 0x40, 0x63, 0x32, 0x71, 0x30, 0xfa, 0xe4, 0x3f, 0xdd, + 0x0d, 0xff, 0x89, 0x66, 0xa1, 0xec, 0x37, 0x35, 0x6d, 0x53, 0x9b, 0x19, 0x11, 0xae, 0x04, 0x94, 0x06, 0xfd, 0x78, + 0x66, 0xe4, 0x2a, 0xd2, 0x1b, 0x66, 0xc9, 0xed, 0x1d, 0x5a, 0xfb, 0x21, 0x35, 0xa6, 0x66, 0xad, 0x1b, 0x22, 0xe8, + 0x55, 0x5d, 0x0c, 0xbf, 0x8a, 0xd6, 0x29, 0x99, 0x45, 0xf7, 0xa1, 0x6a, 0x84, 0xc2, 0xac, 0x1f, 0x34, 0x9c, 0xa2, + 0x0d, 0xa6, 0x6b, 0xfc, 0x80, 0x84, 0x72, 0x94, 0x68, 0x2a, 0x64, 0x0b, 0x5d, 0xc7, 0x26, 0x55, 0x35, 0x9b, 0x38, + 0x45, 0x55, 0xe4, 0x15, 0x7a, 0xa2, 0x69, 0xd1, 0xe8, 0x71, 0x2d, 0xb9, 0xa9, 0x46, 0x64, 0x31, 0xa9, 0x70, 0xaa, + 0x85, 0x5c, 0xb8, 0xc8, 0x23, 0x4f, 0x34, 0x2c, 0x1c, 0x7b, 0x43, 0x9d, 0x45, 0x8b, 0xb7, 0x10, 0xb7, 0x23, 0x5f, + 0xb3, 0xf5, 0x60, 0x71, 0x18, 0xe8, 0xe3, 0x6b, 0x09, 0x8c, 0xef, 0xee, 0x48, 0x12, 0xb8, 0x0f, 0x9a, 0x9e, 0x47, + 0xe1, 0x8f, 0x00, 0x80, 0x37, 0xd1, 0x7d, 0x28, 0x57, 0xc0, 0xf4, 0x28, 0x0d, 0x7b, 0xa9, 0x31, 0x62, 0x08, 0xb8, + 0x8a, 0x48, 0x23, 0x80, 0xc4, 0xb4, 0x0b, 0xf2, 0x77, 0x83, 0xfe, 0xfb, 0x0f, 0x3d, 0x37, 0x2e, 0x23, 0xf1, 0xa1, + 0xbf, 0xc5, 0x07, 0x7c, 0xe6, 0xf9, 0xf3, 0x27, 0xed, 0xd3, 0x2e, 0x27, 0x44, 0x6f, 0x68, 0xad, 0xb7, 0x9e, 0x02, + 0x18, 0xc5, 0x55, 0xb4, 0xf6, 0x96, 0x68, 0x6b, 0xfa, 0xf5, 0xe6, 0x9b, 0x41, 0x9f, 0x98, 0x17, 0x54, 0x4c, 0xbd, + 0x52, 0x54, 0x40, 0x01, 0xbf, 0xff, 0x16, 0x42, 0x5e, 0xfe, 0x0f, 0xc1, 0x50, 0xdf, 0x35, 0x8c, 0x8b, 0xf7, 0x1f, + 0xb7, 0x79, 0x87, 0x90, 0xbe, 0x92, 0x05, 0x93, 0xe0, 0xca, 0xb5, 0x66, 0x24, 0x93, 0x57, 0x81, 0x26, 0x07, 0x6e, + 0x6b, 0x8b, 0x49, 0xc7, 0xbf, 0x42, 0x2c, 0xca, 0xa6, 0x33, 0x5b, 0x7f, 0x83, 0x30, 0x6c, 0x55, 0x41, 0x32, 0xcc, + 0xe4, 0x81, 0x20, 0xfa, 0xaa, 0xbe, 0x5b, 0xf9, 0xa1, 0x81, 0x71, 0xd7, 0xeb, 0x6f, 0xdc, 0x0d, 0x44, 0x1e, 0x06, + 0xe4, 0x56, 0x7d, 0x05, 0x85, 0x86, 0xec, 0xa9, 0x06, 0xc9, 0x95, 0xd4, 0x46, 0x48, 0x70, 0x2d, 0xde, 0xe4, 0x4f, + 0x8a, 0xa2, 0x28, 0x82, 0x8d, 0x50, 0x04, 0x1f, 0x81, 0xe5, 0xc8, 0x0e, 0x80, 0xb6, 0x24, 0x8f, 0x37, 0xb4, 0x04, + 0x38, 0x03, 0xd4, 0xc9, 0xf2, 0x02, 0x16, 0x5c, 0xaf, 0x67, 0xf3, 0x02, 0xce, 0xd0, 0x43, 0x60, 0x34, 0x37, 0x81, + 0x18, 0xbc, 0x03, 0x05, 0x19, 0x76, 0x7c, 0xcb, 0x24, 0xc1, 0x8a, 0x4d, 0x1f, 0x27, 0x43, 0xd2, 0x1c, 0x85, 0x2d, + 0x94, 0xb0, 0x20, 0x68, 0x1d, 0x2a, 0x41, 0x95, 0x0d, 0xd2, 0x80, 0x1b, 0x91, 0x2f, 0xda, 0x64, 0x2b, 0x12, 0xae, + 0x55, 0xcc, 0xc2, 0x84, 0x51, 0xf1, 0xa0, 0xce, 0x1b, 0x4a, 0x6c, 0x01, 0xb6, 0x69, 0x6e, 0xb9, 0xa4, 0x77, 0x61, + 0xca, 0x50, 0xaa, 0x6b, 0x78, 0x4c, 0xb1, 0x99, 0x32, 0xdc, 0x56, 0xbd, 0x21, 0xd8, 0x92, 0x46, 0x55, 0xd7, 0x29, + 0x6a, 0x8c, 0x0c, 0x7d, 0xd0, 0x78, 0x14, 0x4c, 0x5c, 0xc4, 0xc1, 0xae, 0xb9, 0xd5, 0x45, 0x13, 0x1a, 0x19, 0xb7, + 0x22, 0x28, 0x4a, 0xf4, 0x7a, 0x37, 0x6c, 0x9c, 0x10, 0x0a, 0xa8, 0xb5, 0x1f, 0xaf, 0xd6, 0x4f, 0xcb, 0xa4, 0x3f, + 0x91, 0x07, 0x7a, 0x91, 0x50, 0x50, 0x7d, 0x22, 0x0f, 0x60, 0xfb, 0xf7, 0x16, 0xa4, 0x29, 0xea, 0x0e, 0x74, 0x6d, + 0x40, 0x70, 0x7d, 0x0f, 0xc2, 0x43, 0xed, 0x38, 0x40, 0x76, 0xbe, 0x03, 0x8b, 0x23, 0x88, 0x21, 0x8f, 0x32, 0x3f, + 0xc4, 0xcc, 0xca, 0x5e, 0x6b, 0x84, 0xb1, 0xd9, 0x70, 0x34, 0xf4, 0x17, 0x8e, 0x6d, 0x1f, 0xd5, 0xea, 0x83, 0x20, + 0xbb, 0xa9, 0xb6, 0x6e, 0x64, 0x23, 0xc7, 0x36, 0xfd, 0x17, 0x56, 0x67, 0x58, 0xbb, 0xa3, 0xa5, 0xe8, 0x8d, 0x13, + 0x14, 0x7f, 0x8d, 0x9f, 0x6d, 0xb5, 0xda, 0x81, 0xd4, 0xab, 0x56, 0xeb, 0x38, 0xb6, 0x9c, 0xc9, 0xbf, 0x26, 0xf5, + 0xab, 0x9f, 0xc6, 0x8e, 0xa4, 0x99, 0x44, 0x26, 0x10, 0x7f, 0x58, 0x83, 0x63, 0xf4, 0x67, 0xe5, 0xa5, 0xa2, 0xd1, + 0xe3, 0xa3, 0xeb, 0x13, 0x91, 0xa0, 0x9a, 0xbb, 0x75, 0xc9, 0x1d, 0x54, 0xbe, 0x98, 0x56, 0x31, 0x1c, 0x8b, 0x74, + 0x4a, 0x0a, 0x8d, 0xde, 0x4e, 0x6a, 0x01, 0xfb, 0x6f, 0xb9, 0x3e, 0xad, 0x29, 0x44, 0x02, 0x80, 0x1a, 0x10, 0xad, + 0x7c, 0x6f, 0x87, 0xeb, 0xb8, 0xdc, 0x5d, 0xf9, 0x92, 0x3c, 0xbc, 0x33, 0xbc, 0x74, 0x50, 0x87, 0x26, 0xfa, 0x6b, + 0xbe, 0xee, 0x1e, 0xd9, 0x25, 0x09, 0x67, 0xe5, 0x0e, 0x2b, 0xf7, 0xd7, 0xe1, 0xdd, 0x95, 0x30, 0x0a, 0x84, 0xf1, + 0x8f, 0x1a, 0x30, 0x4a, 0x1e, 0x85, 0xb8, 0xf9, 0xe9, 0x71, 0xf3, 0x0f, 0xa2, 0x62, 0xb0, 0x01, 0x8d, 0xc1, 0x25, + 0x9a, 0x49, 0x42, 0x71, 0x88, 0x15, 0x8d, 0x8e, 0xb8, 0x1a, 0x27, 0x44, 0x5b, 0x77, 0x62, 0xc6, 0x6d, 0x0a, 0x8b, + 0x36, 0x3e, 0x8b, 0xfe, 0x78, 0xa8, 0xd4, 0xda, 0xdf, 0x2f, 0xb5, 0xce, 0xf6, 0x49, 0xad, 0xa9, 0x47, 0xd3, 0x7d, + 0xe2, 0xc6, 0x92, 0x53, 0x1c, 0x27, 0xce, 0x65, 0xdf, 0xb8, 0x92, 0xa8, 0x1b, 0x1d, 0xa0, 0x78, 0xab, 0x5a, 0x6f, + 0xd4, 0x4a, 0x10, 0xc5, 0xdf, 0x12, 0x83, 0xc2, 0x15, 0xea, 0xb2, 0x6c, 0xfc, 0xaa, 0x90, 0x8d, 0x53, 0xae, 0xa6, + 0xf0, 0x65, 0xe1, 0xd4, 0xbf, 0xe4, 0x27, 0x26, 0xb8, 0x83, 0xc2, 0x5f, 0xac, 0x18, 0xa9, 0xe4, 0x01, 0x55, 0x30, + 0x1a, 0x92, 0x5f, 0x1d, 0xe7, 0x32, 0xca, 0xee, 0x75, 0xe5, 0xaa, 0x85, 0x03, 0x54, 0x51, 0x0e, 0x52, 0x77, 0x1c, + 0xb2, 0x28, 0x96, 0xb7, 0x4d, 0xd9, 0x03, 0x46, 0x7e, 0x2d, 0x6d, 0x12, 0xe1, 0xaa, 0x42, 0x01, 0xcc, 0xc5, 0xf4, + 0x15, 0xbd, 0xb6, 0xb0, 0x81, 0xc0, 0x41, 0x36, 0x78, 0xd6, 0xed, 0x97, 0xce, 0xd3, 0x0c, 0x05, 0x85, 0x16, 0x5e, + 0x96, 0x41, 0x20, 0x7c, 0x6f, 0xb6, 0x0d, 0xb7, 0x3c, 0x5e, 0xf2, 0xec, 0x7e, 0x07, 0xf1, 0xa2, 0x62, 0xcb, 0x8a, + 0x7c, 0x3c, 0x99, 0x26, 0x35, 0xcf, 0xc5, 0xaa, 0xf5, 0x4e, 0xa9, 0x10, 0x67, 0xcb, 0x9c, 0x53, 0xca, 0x32, 0x7a, + 0x56, 0x63, 0xc0, 0xbf, 0xcb, 0xb6, 0x4e, 0xb2, 0x0e, 0x31, 0x9a, 0xbc, 0x99, 0x25, 0xae, 0xf7, 0x49, 0x1a, 0x32, + 0x97, 0x73, 0x82, 0x0c, 0xb8, 0xac, 0x29, 0x18, 0xba, 0x18, 0x7c, 0x91, 0x0c, 0xac, 0x4e, 0x2a, 0x49, 0x5f, 0x06, + 0x4f, 0xed, 0xae, 0xfb, 0x6a, 0x7e, 0x5c, 0x11, 0x8a, 0x76, 0x7a, 0x65, 0x91, 0x79, 0xcb, 0x38, 0xb2, 0xe5, 0x7a, + 0x35, 0xdd, 0xca, 0xb2, 0x55, 0x49, 0xe4, 0x5a, 0x17, 0xb3, 0xca, 0x9f, 0x9d, 0xcf, 0xe7, 0x65, 0x41, 0xa3, 0xad, + 0x1c, 0xa3, 0xb0, 0xf0, 0xa9, 0x6d, 0xdb, 0xd5, 0xb1, 0xef, 0x06, 0xbb, 0x89, 0x72, 0xdb, 0xd3, 0xc6, 0x11, 0x23, + 0x6c, 0xf7, 0xc1, 0xaf, 0x0e, 0x8e, 0xdc, 0x2a, 0x4e, 0x76, 0xc9, 0x2c, 0x62, 0x48, 0x8d, 0x21, 0xfc, 0x8c, 0xac, + 0xd2, 0x81, 0x47, 0x50, 0x07, 0x63, 0x49, 0x07, 0x1a, 0x0d, 0x07, 0xcc, 0x05, 0x98, 0x8a, 0x38, 0x7c, 0x57, 0xd8, + 0x0a, 0xca, 0xc3, 0x6b, 0xc2, 0x7b, 0xfe, 0x11, 0x3c, 0x28, 0xdb, 0xba, 0x4c, 0x1b, 0xa7, 0xd5, 0xb3, 0xff, 0x5c, + 0xaa, 0xa7, 0xc0, 0x05, 0xb8, 0xe5, 0x0a, 0x6d, 0x2a, 0x9f, 0xc5, 0xff, 0x17, 0xf2, 0xff, 0x57, 0xf1, 0xa6, 0x6c, + 0x3f, 0x72, 0x0a, 0x12, 0xed, 0xe2, 0xb4, 0xd0, 0x51, 0x37, 0xed, 0x01, 0x61, 0x65, 0x30, 0x97, 0x15, 0xe8, 0xa0, + 0xa4, 0x2f, 0xa5, 0xdc, 0x68, 0x10, 0xbf, 0x23, 0xc5, 0x0c, 0x4b, 0x5c, 0x88, 0x10, 0x8b, 0x84, 0x71, 0x30, 0x07, + 0xe3, 0xe5, 0x29, 0xea, 0x0f, 0x4a, 0x7b, 0x02, 0xb4, 0xf1, 0xb5, 0xb9, 0x1d, 0x24, 0xee, 0xaf, 0xea, 0xb5, 0x78, + 0xc7, 0x00, 0x32, 0x07, 0x0e, 0x21, 0x1a, 0x12, 0x28, 0x95, 0xcd, 0x4d, 0x47, 0x29, 0xde, 0xca, 0x7a, 0x36, 0x3e, + 0x30, 0xec, 0xae, 0xb9, 0x0a, 0xed, 0x9b, 0x6b, 0x0b, 0x60, 0xb2, 0x6c, 0xfb, 0xe1, 0xb3, 0x09, 0x4b, 0x2c, 0xef, + 0x47, 0x07, 0x97, 0x1c, 0xf7, 0xaf, 0x89, 0x77, 0x67, 0x4a, 0xcf, 0x3f, 0xca, 0x17, 0xff, 0xda, 0x28, 0xd0, 0xbb, + 0x2a, 0x49, 0xe8, 0x98, 0xb5, 0x78, 0x47, 0x3f, 0xa8, 0xf6, 0xca, 0x0f, 0x0f, 0xaf, 0xeb, 0x6e, 0x0e, 0xae, 0x0b, + 0x17, 0xc6, 0xc1, 0x95, 0xe1, 0xc6, 0xa1, 0x96, 0x0b, 0xd9, 0xe8, 0xaf, 0x92, 0x40, 0x51, 0x76, 0xfc, 0x55, 0xb1, + 0x15, 0xa5, 0xf2, 0xaf, 0xd6, 0x40, 0x7c, 0x1e, 0x94, 0x52, 0x41, 0xe1, 0x59, 0xd1, 0xd4, 0xbe, 0x72, 0xaa, 0xf4, + 0xbb, 0xca, 0x89, 0xad, 0x52, 0x2e, 0x6c, 0xa4, 0xf6, 0x3a, 0x85, 0x43, 0xdf, 0xb1, 0xad, 0x8e, 0xcf, 0x16, 0xfc, + 0x92, 0x98, 0xfb, 0x41, 0x40, 0x51, 0x45, 0x9a, 0x25, 0xd1, 0x27, 0x52, 0x56, 0xb3, 0xd0, 0x32, 0x66, 0x04, 0xd2, + 0xe1, 0x8f, 0x70, 0x76, 0x3c, 0x37, 0x1e, 0xe0, 0xd9, 0x90, 0x0b, 0xc1, 0x80, 0x93, 0x96, 0xe2, 0x27, 0xe0, 0x0e, + 0x9e, 0xaa, 0xe3, 0x33, 0x08, 0x1a, 0xa8, 0xcc, 0x46, 0xea, 0x8f, 0x9d, 0xbe, 0xe2, 0xf4, 0xee, 0xcc, 0xae, 0x67, + 0x9b, 0x8e, 0x75, 0xac, 0xd8, 0xd6, 0x89, 0xd9, 0xb1, 0xfa, 0x4a, 0xc7, 0xea, 0xc1, 0xbf, 0x9e, 0x63, 0xbd, 0x52, + 0x6c, 0x78, 0x52, 0x1c, 0xab, 0x8b, 0xff, 0x76, 0xac, 0xfe, 0x5d, 0x97, 0xde, 0xf4, 0xae, 0x70, 0xab, 0xaa, 0x8c, + 0x02, 0x9c, 0x40, 0xd4, 0xa3, 0xf1, 0xd9, 0x3a, 0x25, 0xca, 0x66, 0xa4, 0xbe, 0x52, 0x95, 0x65, 0x42, 0xe6, 0x23, + 0xf5, 0xa9, 0x2b, 0x95, 0x3a, 0xa7, 0x8d, 0xc5, 0x9d, 0x7e, 0x63, 0x71, 0xf7, 0xa4, 0xb1, 0xf8, 0xb8, 0x57, 0x2e, + 0x3e, 0x5a, 0xd0, 0x57, 0x52, 0xce, 0xbe, 0x95, 0x9b, 0x25, 0xfe, 0x46, 0x73, 0x14, 0x40, 0xd7, 0x26, 0xfc, 0xd3, + 0xef, 0xe8, 0xa2, 0xd5, 0x14, 0x5a, 0x09, 0x68, 0xf4, 0x4f, 0x15, 0xe7, 0xe4, 0x2f, 0x9d, 0x13, 0x0f, 0xea, 0x41, + 0x86, 0x49, 0xf8, 0xbb, 0xeb, 0x9e, 0x7a, 0xb6, 0x02, 0x0d, 0x1d, 0xf8, 0x6f, 0xd9, 0xeb, 0x78, 0xf4, 0xc1, 0x86, + 0xf7, 0x1f, 0x9d, 0x7e, 0x6a, 0x9b, 0x0e, 0xfc, 0xf7, 0x9b, 0x50, 0xb9, 0x83, 0xc2, 0x5f, 0xee, 0xf7, 0xd8, 0x56, + 0xba, 0xa7, 0xcb, 0x8e, 0xf5, 0xea, 0xae, 0x6f, 0x9d, 0x2e, 0x9d, 0xfe, 0x47, 0xfa, 0x14, 0x98, 0x1d, 0xeb, 0x15, + 0xfc, 0x7d, 0xec, 0xda, 0x4b, 0xd3, 0xb1, 0x4e, 0xef, 0xba, 0x56, 0x37, 0x30, 0x4f, 0xac, 0x53, 0xf8, 0xfb, 0x0d, + 0xc0, 0x0b, 0x70, 0x65, 0x29, 0x41, 0x15, 0xd8, 0x18, 0x15, 0xfb, 0x0d, 0xf9, 0x23, 0x9d, 0x63, 0xa5, 0x77, 0xfc, + 0x97, 0xd3, 0x3b, 0xf3, 0x78, 0xe9, 0x74, 0xee, 0xcc, 0xd6, 0x9f, 0x1f, 0x01, 0xf2, 0xbb, 0x17, 0x0e, 0xc0, 0x88, + 0x39, 0x40, 0xfe, 0x34, 0x31, 0x2e, 0xdb, 0xc4, 0xe8, 0xef, 0xf7, 0x8b, 0xd1, 0x7f, 0x58, 0x1f, 0x22, 0x46, 0x7f, + 0xff, 0xd5, 0xc5, 0xe8, 0x97, 0x55, 0x2b, 0xee, 0xf7, 0xd5, 0x58, 0xe5, 0xbf, 0x6c, 0xab, 0x44, 0xb2, 0xef, 0x6a, + 0xd7, 0x57, 0xeb, 0x1b, 0x88, 0xb6, 0xf3, 0x3e, 0x1a, 0xfd, 0xb0, 0x2e, 0x99, 0x28, 0x45, 0x80, 0x01, 0xde, 0x47, + 0x14, 0x03, 0xfc, 0xb6, 0x1e, 0x81, 0x5d, 0x04, 0xbb, 0x35, 0xfd, 0x99, 0xb9, 0x74, 0x83, 0xb9, 0xb8, 0x71, 0xa1, + 0x64, 0x88, 0xc5, 0x60, 0x33, 0x0f, 0x97, 0x09, 0x28, 0x6b, 0xd6, 0xab, 0x30, 0x1d, 0x9c, 0xd8, 0x80, 0xe6, 0x3b, + 0xf3, 0x24, 0xaf, 0x34, 0xb6, 0x78, 0x7c, 0xa2, 0x5b, 0x66, 0xd3, 0xdf, 0xfa, 0x1e, 0x4d, 0xd6, 0x9a, 0x7b, 0x77, + 0xea, 0xfd, 0x2a, 0x60, 0x0b, 0xc2, 0x4d, 0xfa, 0x80, 0xd8, 0x68, 0x7a, 0x5f, 0x36, 0x1c, 0xab, 0x98, 0x0a, 0xb6, + 0x8f, 0x14, 0x46, 0x52, 0x6d, 0xef, 0x94, 0x0d, 0xcf, 0xf6, 0x4d, 0xb3, 0xe1, 0xf3, 0xa5, 0xe6, 0x3b, 0xac, 0xde, + 0x44, 0xc7, 0x55, 0x50, 0x55, 0x32, 0x6d, 0x35, 0x02, 0xa4, 0xa0, 0x3d, 0x0b, 0xd3, 0xb8, 0x82, 0xf0, 0xb1, 0x15, + 0xbc, 0x8d, 0x6d, 0xe9, 0x5d, 0xa9, 0x4f, 0xd9, 0x9c, 0xee, 0xc5, 0x16, 0xe9, 0x41, 0xff, 0x37, 0x20, 0x6c, 0xd8, + 0x7d, 0x3c, 0x8d, 0x64, 0x38, 0x6f, 0xa5, 0x7e, 0x29, 0xa9, 0x9d, 0x2f, 0x9d, 0x6d, 0x9d, 0xb4, 0x69, 0x35, 0xa4, + 0x75, 0xc8, 0x8a, 0xdf, 0xd1, 0xf8, 0x79, 0x6a, 0xb6, 0x9a, 0x53, 0xd3, 0x62, 0xb4, 0xcc, 0xdd, 0xd5, 0x19, 0xaf, + 0xf7, 0x14, 0x36, 0xb1, 0xc1, 0x1e, 0x64, 0xc7, 0xf1, 0xed, 0x1c, 0xb2, 0x22, 0x0f, 0x90, 0x88, 0x90, 0x28, 0xa8, + 0x0e, 0xda, 0xd8, 0x0e, 0x77, 0x98, 0x7f, 0xc8, 0x1d, 0xb3, 0x4e, 0xd0, 0x56, 0x77, 0x97, 0xc5, 0x88, 0x70, 0x6d, + 0xd8, 0x96, 0x14, 0xa8, 0x4e, 0xaf, 0x6f, 0x38, 0x27, 0x86, 0xd5, 0xef, 0xe9, 0x39, 0x3f, 0x70, 0x72, 0x97, 0x25, + 0x80, 0x80, 0xc9, 0xae, 0x18, 0xa6, 0x1f, 0xfa, 0x99, 0xef, 0x06, 0x39, 0xa0, 0xfa, 0x32, 0xcd, 0xfb, 0xcf, 0x75, + 0x9a, 0xc1, 0x1c, 0x39, 0x49, 0x86, 0xe6, 0xca, 0xe6, 0x94, 0x64, 0xf7, 0x84, 0x84, 0x2d, 0xaa, 0xdc, 0xaa, 0xf5, + 0xf3, 0x1f, 0x67, 0x0b, 0x9a, 0x53, 0x3b, 0x8b, 0x69, 0x16, 0xb2, 0xfd, 0xc1, 0x4d, 0x75, 0xf3, 0x89, 0xf1, 0x53, + 0x1b, 0xc2, 0xfd, 0xe7, 0x7e, 0x84, 0x9b, 0x91, 0x43, 0x10, 0xee, 0x3f, 0xbf, 0x3a, 0xc2, 0xfd, 0x49, 0x46, 0xb8, + 0x25, 0x4f, 0x95, 0x42, 0x26, 0xfa, 0x01, 0x9f, 0x35, 0x08, 0xf2, 0xfb, 0x52, 0x3d, 0xa2, 0xe4, 0xa5, 0x2a, 0x25, + 0x5f, 0xfd, 0x58, 0xca, 0x26, 0x83, 0x2c, 0x3b, 0x06, 0x25, 0xa5, 0x99, 0x2b, 0x20, 0x31, 0xa9, 0x48, 0xb1, 0x0d, + 0x7d, 0x5e, 0x84, 0x59, 0x60, 0xbd, 0x67, 0x6c, 0x09, 0xa8, 0x20, 0x7e, 0x88, 0x92, 0x95, 0x8b, 0x01, 0xd9, 0x54, + 0xcc, 0x42, 0x07, 0x0f, 0x36, 0x78, 0x47, 0x79, 0x51, 0x38, 0x13, 0x72, 0x74, 0x32, 0xba, 0xa6, 0xf4, 0xa0, 0xfa, + 0x40, 0xdc, 0x44, 0x35, 0xe8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xfb, 0x45, 0xe7, 0xf8, 0xc5, 0x89, 0x0d, 0xff, 0x73, + 0x48, 0x37, 0x37, 0x58, 0xc5, 0x55, 0x14, 0x42, 0x22, 0x0c, 0x5e, 0xb3, 0xad, 0xda, 0x3d, 0x21, 0x9f, 0x8a, 0x5a, + 0xfd, 0xe6, 0x4a, 0x33, 0xf7, 0xa1, 0xa8, 0xd3, 0x58, 0x63, 0x19, 0xad, 0xa5, 0x61, 0x35, 0x8c, 0xc6, 0x0f, 0xd7, + 0x20, 0x19, 0x92, 0x6a, 0xc8, 0xaf, 0xd9, 0x74, 0x8b, 0x79, 0x91, 0x6e, 0x7e, 0x53, 0x64, 0xdb, 0xe1, 0x59, 0x3f, + 0xf6, 0x42, 0x90, 0x09, 0xd5, 0x6d, 0x8c, 0xd5, 0x8d, 0xf9, 0x66, 0x14, 0xc8, 0x75, 0x57, 0xa4, 0x54, 0xc7, 0x05, + 0xca, 0x92, 0x75, 0xe8, 0xd1, 0xac, 0xe9, 0xee, 0x34, 0xd5, 0xfc, 0x23, 0x88, 0xd6, 0x89, 0x1f, 0xd6, 0x71, 0xd5, + 0xdc, 0xb1, 0x5d, 0xa4, 0x26, 0x48, 0xf9, 0xaa, 0xb8, 0x2f, 0x32, 0x23, 0xa1, 0x09, 0x4d, 0x71, 0x69, 0xcd, 0x91, + 0xfb, 0x42, 0x34, 0x7c, 0x91, 0x19, 0x90, 0x54, 0x14, 0x96, 0xfb, 0xf9, 0x73, 0x5a, 0x0b, 0xd2, 0xfc, 0xd1, 0x69, + 0x9d, 0x7b, 0x22, 0x35, 0x98, 0xaa, 0xb8, 0x8b, 0x48, 0xc5, 0xd4, 0x60, 0x03, 0xcf, 0x88, 0x5e, 0xbe, 0x1c, 0x8f, + 0x1c, 0x9d, 0x25, 0xa9, 0x2c, 0x65, 0x54, 0xba, 0x3c, 0x4c, 0x35, 0xae, 0x37, 0x3a, 0x6d, 0xc5, 0x7e, 0xb8, 0xe0, + 0x9a, 0x69, 0x81, 0xbd, 0x20, 0xc3, 0x01, 0x55, 0x81, 0xb9, 0x5c, 0x45, 0xcd, 0xeb, 0xdc, 0x91, 0x04, 0x12, 0x6c, + 0x8e, 0xd4, 0xae, 0x65, 0x5b, 0xb6, 0x2a, 0x1a, 0xce, 0xfd, 0xc5, 0x68, 0x1b, 0x65, 0x2e, 0xe4, 0x8a, 0x09, 0xa2, + 0x05, 0x78, 0x7e, 0x64, 0x7e, 0x16, 0x40, 0xe2, 0x11, 0x70, 0x01, 0x59, 0x51, 0xae, 0x31, 0x67, 0xf6, 0xb8, 0x6e, + 0xf2, 0x09, 0x93, 0xcf, 0x71, 0xa7, 0x2f, 0x0c, 0x49, 0xf3, 0x23, 0x5c, 0x86, 0x9a, 0xaa, 0x41, 0xea, 0x43, 0x92, + 0xa4, 0xa6, 0x6c, 0xdf, 0x3e, 0x50, 0xa0, 0x0d, 0xa4, 0x25, 0xc7, 0x0e, 0xe6, 0x89, 0xbb, 0x82, 0x18, 0xdd, 0xdb, + 0xdc, 0x60, 0x98, 0x56, 0x65, 0xa8, 0x56, 0x71, 0x5e, 0x9d, 0x18, 0x4a, 0xc7, 0x31, 0x14, 0x1b, 0xd0, 0xad, 0x9a, + 0x1b, 0xdb, 0xfc, 0x66, 0xb8, 0x4f, 0x45, 0x47, 0xf1, 0xcb, 0x53, 0x3a, 0x0f, 0xaa, 0x9c, 0x63, 0xc2, 0xcf, 0x8c, + 0x06, 0x14, 0xd4, 0xa4, 0xe8, 0xd9, 0x3e, 0x15, 0xd3, 0x5f, 0x91, 0x4d, 0xa6, 0x63, 0x62, 0x0e, 0x56, 0xc5, 0xd7, + 0xb7, 0xe8, 0x9a, 0xe6, 0x87, 0x8a, 0xff, 0xf9, 0xb3, 0xe6, 0x83, 0xf9, 0xfd, 0x48, 0x82, 0x0f, 0x3c, 0xeb, 0x25, + 0x80, 0xf9, 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0xcc, 0x7f, 0x30, 0xc5, 0x9e, 0x15, 0xb8, + 0xe1, 0x02, 0x50, 0x9a, 0x1b, 0x2e, 0x6a, 0x06, 0x04, 0xd4, 0xbb, 0xae, 0x52, 0x5a, 0x74, 0x55, 0x28, 0xf7, 0xd3, + 0xef, 0x1f, 0xae, 0x68, 0xe2, 0x21, 0x48, 0x72, 0xed, 0xce, 0xd0, 0x15, 0xac, 0xd0, 0x3d, 0xbc, 0x1c, 0x7d, 0x73, + 0xb6, 0x22, 0x99, 0x4b, 0x05, 0x97, 0xc0, 0xe2, 0x01, 0x39, 0xa0, 0x78, 0x3c, 0x69, 0x28, 0x65, 0xf0, 0x66, 0xe4, + 0xce, 0xf7, 0x18, 0x9f, 0x66, 0x28, 0xec, 0x9e, 0x32, 0xd1, 0x46, 0x69, 0xe4, 0x18, 0xd4, 0x44, 0xd6, 0x73, 0x31, + 0xec, 0xe0, 0x28, 0x8c, 0xd4, 0xf1, 0x37, 0xc2, 0x9b, 0xa8, 0x6d, 0x11, 0x20, 0xfb, 0xdf, 0x75, 0x42, 0x82, 0x7f, + 0x8d, 0xbe, 0x81, 0x8b, 0xfb, 0x9b, 0x1b, 0x55, 0x1f, 0x66, 0x16, 0xf2, 0x31, 0xdf, 0x34, 0x64, 0xc1, 0x43, 0x1e, + 0x95, 0x31, 0x9b, 0x5d, 0x89, 0xd9, 0x84, 0xdf, 0xfb, 0x59, 0xd7, 0xf1, 0x19, 0x5e, 0x68, 0x63, 0xe0, 0x2e, 0xb6, + 0x25, 0x9e, 0xd3, 0x19, 0x22, 0x83, 0x3a, 0x0d, 0x5c, 0xef, 0x13, 0xe7, 0x50, 0xe5, 0x87, 0x43, 0x78, 0x51, 0x41, + 0xd9, 0x35, 0xee, 0x65, 0xdc, 0xca, 0x5b, 0xfc, 0x32, 0x7e, 0xea, 0x7e, 0xe9, 0x67, 0x82, 0x19, 0xc6, 0x87, 0x1c, + 0xb4, 0x39, 0x38, 0xbe, 0x82, 0xfd, 0x01, 0x06, 0xd5, 0x39, 0xfd, 0x4b, 0xef, 0xce, 0xb1, 0x97, 0x1d, 0xc7, 0x02, + 0x36, 0x67, 0xd9, 0xb5, 0xfa, 0x81, 0xd9, 0xb5, 0xfa, 0xf0, 0xf7, 0x11, 0x58, 0x2f, 0xb3, 0x63, 0x1d, 0x7f, 0x74, + 0x3a, 0x81, 0x79, 0x6a, 0xf5, 0xe1, 0xef, 0x92, 0xb6, 0xfa, 0x05, 0x99, 0x1e, 0x60, 0x78, 0xbe, 0x29, 0x61, 0x01, + 0xe9, 0xb7, 0xd0, 0x22, 0x18, 0xa5, 0xeb, 0xad, 0x41, 0x13, 0x01, 0x28, 0x43, 0x35, 0x78, 0x94, 0xc0, 0x70, 0xa8, + 0x41, 0x5a, 0x6e, 0x0c, 0x28, 0xcf, 0x0d, 0x32, 0xc2, 0x22, 0xc5, 0x7c, 0xfb, 0x31, 0x62, 0x6d, 0x9a, 0x03, 0x70, + 0xf3, 0x4c, 0x45, 0x54, 0x75, 0xf1, 0xb7, 0x18, 0x03, 0xeb, 0xf0, 0x90, 0xe1, 0x12, 0x56, 0x2a, 0xb2, 0xe5, 0xe5, + 0xfb, 0x07, 0x8e, 0x7e, 0xa3, 0x44, 0x64, 0x6b, 0xf9, 0xaa, 0x7d, 0x33, 0x75, 0x86, 0xe8, 0xfd, 0xf7, 0xf6, 0x83, + 0x49, 0x4a, 0x69, 0x3f, 0x3c, 0xba, 0xe7, 0xcc, 0x4f, 0xc4, 0xf0, 0x24, 0x14, 0xed, 0x34, 0x47, 0x2e, 0xd7, 0x21, + 0xad, 0xc5, 0x05, 0x50, 0xc9, 0x77, 0x6e, 0x20, 0x99, 0x5e, 0x48, 0x2d, 0x9f, 0x08, 0xcc, 0xff, 0xfc, 0x79, 0x31, + 0x38, 0xb3, 0x32, 0xee, 0x33, 0xa7, 0x07, 0xd7, 0x6e, 0x8f, 0x74, 0x77, 0x5a, 0x01, 0xed, 0x0f, 0x0f, 0x5b, 0xc4, + 0x93, 0xe4, 0x9a, 0x7e, 0xae, 0x63, 0x6c, 0x35, 0x45, 0xaa, 0x69, 0x18, 0x21, 0xb0, 0x6e, 0x85, 0xd5, 0x51, 0xf5, + 0x61, 0xc8, 0x15, 0x66, 0xe1, 0x8e, 0x90, 0xb8, 0x8c, 0x17, 0x53, 0x01, 0x34, 0x3b, 0xe6, 0xb1, 0xc7, 0xa5, 0xf1, + 0x7f, 0x3d, 0x09, 0x74, 0x2f, 0x02, 0x0d, 0x5f, 0xe5, 0xb4, 0x96, 0xdc, 0x4d, 0xc4, 0xbd, 0x4a, 0x2f, 0x54, 0x92, + 0x9e, 0xab, 0x50, 0x04, 0xf9, 0x8e, 0x30, 0xc5, 0x99, 0x30, 0x6f, 0x12, 0xb7, 0x45, 0x51, 0x60, 0xf8, 0x10, 0x13, + 0x5a, 0xe3, 0xae, 0x4e, 0xfa, 0xf3, 0xe7, 0xad, 0x97, 0x10, 0x55, 0x27, 0xcb, 0x99, 0x1e, 0x55, 0x19, 0xbf, 0xa9, + 0x32, 0x8a, 0x11, 0xfd, 0x22, 0xd6, 0xe0, 0x56, 0x59, 0x74, 0xef, 0xe1, 0xcf, 0x29, 0x71, 0x33, 0x8b, 0xe9, 0x41, + 0x34, 0xe9, 0x72, 0x37, 0x1c, 0xd2, 0x05, 0x7b, 0x2c, 0x16, 0x7f, 0x8b, 0x05, 0x9b, 0x7b, 0xb6, 0xfd, 0xb8, 0x66, + 0x7e, 0xc8, 0xd0, 0xc7, 0x67, 0xbb, 0x08, 0x9e, 0xf2, 0x2e, 0x73, 0x69, 0x84, 0x0d, 0xf9, 0xca, 0x8d, 0x32, 0x97, + 0xe7, 0x15, 0x01, 0xba, 0x7c, 0xd8, 0xa8, 0x30, 0x94, 0x7c, 0x95, 0xc7, 0xef, 0xae, 0xbe, 0x53, 0xd8, 0xfe, 0xa7, + 0xfa, 0x2d, 0x64, 0x64, 0x68, 0x14, 0xfc, 0x11, 0x8d, 0x82, 0xaf, 0xb0, 0xb4, 0x12, 0x10, 0x4b, 0x3e, 0x3f, 0xa2, + 0x10, 0x54, 0x15, 0x12, 0x7a, 0x54, 0xeb, 0xb7, 0x5a, 0x07, 0x99, 0x1f, 0xbb, 0x49, 0x76, 0x04, 0x4d, 0x4d, 0x40, + 0x72, 0x6a, 0x9b, 0x07, 0x33, 0x55, 0x1c, 0x72, 0xa1, 0x5a, 0x16, 0x72, 0xcd, 0xe1, 0xdc, 0x0f, 0x84, 0xe2, 0x90, + 0x7f, 0xc0, 0xf5, 0x3c, 0x12, 0x67, 0x23, 0xd5, 0x8d, 0x21, 0x1b, 0x02, 0xc6, 0x37, 0x3e, 0x8a, 0xbc, 0x8c, 0x64, + 0x66, 0x9a, 0x25, 0xc4, 0x5d, 0xa9, 0x22, 0xd6, 0x67, 0xbd, 0xbf, 0x74, 0x3d, 0x5d, 0xf9, 0x99, 0x08, 0x96, 0x47, + 0x27, 0x08, 0x2a, 0x3c, 0x18, 0xe2, 0x78, 0x92, 0x33, 0x10, 0x5e, 0x46, 0x8b, 0xca, 0x8e, 0x2a, 0x28, 0x97, 0x73, + 0x0c, 0xc5, 0xca, 0x22, 0xe0, 0xcf, 0xd0, 0x23, 0xe7, 0x96, 0x79, 0x5d, 0x8b, 0x98, 0x7e, 0xea, 0xf8, 0x8c, 0xb1, + 0xb7, 0x0a, 0x06, 0x0a, 0x50, 0x7b, 0x36, 0x04, 0x9b, 0x6d, 0xf3, 0xc7, 0x3e, 0x62, 0x95, 0xe1, 0x6a, 0xa2, 0x3d, + 0x63, 0xdc, 0x6f, 0x3a, 0x96, 0x2b, 0x20, 0x84, 0x4a, 0x2a, 0xde, 0xa5, 0x33, 0x16, 0x0e, 0x40, 0x38, 0x2a, 0xa4, + 0x95, 0x3e, 0x7f, 0x7e, 0x3d, 0xf9, 0xcf, 0xbf, 0x21, 0x38, 0xf9, 0xd2, 0xe1, 0x5e, 0xd0, 0xd7, 0x72, 0x2d, 0x46, + 0x7d, 0x1a, 0x13, 0x54, 0xef, 0x93, 0x19, 0x0f, 0x0b, 0xc2, 0xb7, 0x56, 0x3e, 0xb9, 0xe1, 0xa1, 0x9e, 0x20, 0x01, + 0x81, 0xce, 0x7d, 0xb5, 0x27, 0xb0, 0xbc, 0x13, 0x1e, 0x22, 0x40, 0xf9, 0x75, 0xf3, 0x7d, 0x1f, 0xb2, 0xf4, 0xd6, + 0xf2, 0x02, 0x48, 0x03, 0xc4, 0x3d, 0x34, 0x3e, 0x73, 0x99, 0xf0, 0x15, 0xc8, 0x8f, 0x74, 0x70, 0x04, 0xd3, 0x5c, + 0x46, 0x2b, 0x62, 0xf9, 0xd1, 0xd1, 0x3d, 0x99, 0x9a, 0x6e, 0xec, 0x53, 0xf9, 0x32, 0xca, 0xdd, 0x14, 0x4a, 0xf9, + 0x09, 0x05, 0x2d, 0xa5, 0xaf, 0xf3, 0x02, 0x94, 0x51, 0x01, 0x28, 0xf8, 0xe9, 0x8e, 0xcb, 0x01, 0xfc, 0x2c, 0x1e, + 0x31, 0xbe, 0x8c, 0xe5, 0xcf, 0x69, 0x1c, 0x3e, 0x1e, 0x72, 0xaf, 0x78, 0x30, 0xa3, 0xf9, 0x5c, 0x0e, 0xba, 0x67, + 0x95, 0xbf, 0x2f, 0xa0, 0x52, 0xec, 0xd9, 0x28, 0xa6, 0x5f, 0xaa, 0x7f, 0x42, 0xfc, 0x84, 0x6c, 0xb9, 0x2c, 0x3e, + 0x23, 0x9c, 0xe7, 0x5a, 0xf0, 0x3e, 0x01, 0x92, 0xa7, 0xb4, 0x12, 0x43, 0x14, 0xd5, 0xc8, 0xd0, 0x2d, 0xa4, 0xc9, + 0x93, 0xd1, 0x88, 0xe2, 0xb1, 0x2a, 0x3a, 0x03, 0x28, 0x35, 0x44, 0xcf, 0x87, 0xc9, 0x66, 0xd0, 0xd0, 0xa4, 0x1e, + 0x5c, 0xd8, 0xa8, 0x3a, 0x9d, 0xfa, 0x18, 0x8f, 0x5c, 0xbe, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5b, 0x58, 0x40, + 0xe0, 0xbc, 0x9f, 0x0a, 0x1e, 0x57, 0xbe, 0xa5, 0x28, 0xdb, 0x0c, 0xdc, 0x87, 0x48, 0xd2, 0xac, 0x33, 0x27, 0xfb, + 0x4b, 0x2c, 0xbd, 0xe2, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0x22, 0x90, 0xd7, 0x4f, 0x93, 0x1c, 0x32, 0x7c, 0xdf, 0x61, + 0x92, 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xec, 0x08, 0xe6, 0x07, + 0x81, 0x01, 0x4a, 0x94, 0x91, 0xaf, 0x43, 0xf4, 0x01, 0x37, 0xa5, 0xd6, 0x01, 0x17, 0x33, 0x4e, 0xd4, 0x21, 0xe7, + 0x28, 0xa2, 0x83, 0x96, 0xaa, 0xd4, 0x89, 0x15, 0xbb, 0x99, 0xca, 0xdb, 0x1f, 0xb1, 0xff, 0xb7, 0x35, 0x86, 0xeb, + 0xcf, 0x87, 0x19, 0xe1, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x4a, 0xb0, 0xee, 0xa8, 0x50, 0xec, + 0xe3, 0x5d, 0xb5, 0x0a, 0xd2, 0x48, 0x54, 0x8b, 0x5d, 0x4d, 0x7d, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, + 0x65, 0x36, 0x82, 0xaa, 0x5c, 0xd8, 0xee, 0xc6, 0x31, 0xad, 0xac, 0x0f, 0xcf, 0x8e, 0x28, 0xdf, 0x39, 0xa6, 0x3b, + 0x6c, 0x7c, 0x06, 0xd6, 0x85, 0x74, 0xd1, 0xdd, 0x38, 0x66, 0x4b, 0x4a, 0x7f, 0xd1, 0x37, 0x47, 0xcb, 0x6c, 0x15, + 0x8c, 0xff, 0x0f, 0x00, 0xa3, 0x9b, 0x76, 0x11, 0x5a, 0x03, 0x00}; } // namespace web_server } // namespace esphome From 2eebee1de7d4f8b38ee84e15ff29500f0ca5eb57 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 20 May 2024 01:49:00 -1000 Subject: [PATCH 240/313] Revert "Fix MQTT dashboard discovery (Exception in MqttStatusThread)." (#6782) --- esphome/dashboard/status/mqtt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/dashboard/status/mqtt.py b/esphome/dashboard/status/mqtt.py index 0e53c21679..8c35dd2535 100644 --- a/esphome/dashboard/status/mqtt.py +++ b/esphome/dashboard/status/mqtt.py @@ -18,7 +18,7 @@ class MqttStatusThread(threading.Thread): """Run the status thread.""" dashboard = DASHBOARD entries = dashboard.entries - current_entries = entries.async_all() + current_entries = entries.all() config = mqtt.config_from_env() topic = "esphome/discover/#" @@ -33,7 +33,7 @@ class MqttStatusThread(threading.Thread): return for entry in current_entries: if entry.name == data["name"]: - entries.async_set_state(entry, EntryState.ONLINE) + entries.set_state(entry, EntryState.ONLINE) return def on_connect(client, userdata, flags, return_code): @@ -53,11 +53,11 @@ class MqttStatusThread(threading.Thread): client.loop_start() while not dashboard.stop_event.wait(2): - current_entries = entries.async_all() + current_entries = entries.all() # will be set to true on on_message for entry in current_entries: if entry.no_mdns: - entries.async_set_state(entry, EntryState.OFFLINE) + entries.set_state(entry, EntryState.OFFLINE) client.publish("esphome/discover", None, retain=False) dashboard.mqtt_ping_request.wait() From efde677ca905548986d4ed02d7154bc7b17e3249 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 20 May 2024 01:52:24 -1000 Subject: [PATCH 241/313] Fix DashboardEntries.all() call (#6783) --- esphome/dashboard/entries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/dashboard/entries.py b/esphome/dashboard/entries.py index cd318ba8a7..7a9bff4ec1 100644 --- a/esphome/dashboard/entries.py +++ b/esphome/dashboard/entries.py @@ -103,7 +103,7 @@ class DashboardEntries: def all(self) -> list[DashboardEntry]: """Return all entries.""" - return asyncio.run_coroutine_threadsafe(self._async_all, self._loop).result() + return asyncio.run_coroutine_threadsafe(self._async_all(), self._loop).result() def async_all(self) -> list[DashboardEntry]: """Return all entries.""" From cd0f55794053cb19d2f966e2489cd67ec6d45786 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 21 May 2024 10:53:16 +1200 Subject: [PATCH 242/313] [remote_receiver] Add better error message for tolerance breaking change (#6784) --- esphome/components/remote_receiver/__init__.py | 8 +++++++- tests/components/remote_receiver/esp32-common.yaml | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/esphome/components/remote_receiver/__init__.py b/esphome/components/remote_receiver/__init__.py index 6fe20153f4..e5085bb33c 100644 --- a/esphome/components/remote_receiver/__init__.py +++ b/esphome/components/remote_receiver/__init__.py @@ -63,7 +63,13 @@ def validate_tolerance(value): if "%" in str(value): type_ = TYPE_PERCENTAGE else: - type_ = TYPE_TIME + try: + cv.positive_time_period_microseconds(value) + type_ = TYPE_TIME + except cv.Invalid as exc: + raise cv.Invalid( + "Tolerance must be a percentage or time. Configurations made before 2024.5.0 treated the value as a percentage." + ) from exc return TOLERANCE_SCHEMA( { diff --git a/tests/components/remote_receiver/esp32-common.yaml b/tests/components/remote_receiver/esp32-common.yaml index 0e71143fc3..ad76bf51f0 100644 --- a/tests/components/remote_receiver/esp32-common.yaml +++ b/tests/components/remote_receiver/esp32-common.yaml @@ -3,6 +3,7 @@ remote_receiver: pin: ${pin} rmt_channel: ${rmt_channel} dump: all + tolerance: 25% on_abbwelcome: then: - logger.log: From 5eb8efd8b3e3d6d626a869126cced35606082262 Mon Sep 17 00:00:00 2001 From: esphomebot Date: Tue, 21 May 2024 10:55:56 +1200 Subject: [PATCH 243/313] Update webserver local assets to 20240519-215627 (#6779) --- .../components/web_server/server_index_v3.h | 7970 ++++++++--------- 1 file changed, 3977 insertions(+), 3993 deletions(-) diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h index 66cd9de47a..f2f278b08f 100644 --- a/esphome/components/web_server/server_index_v3.h +++ b/esphome/components/web_server/server_index_v3.h @@ -10,4004 +10,3988 @@ namespace esphome { namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0x6d, 0x7b, 0xdb, 0xb6, 0xb2, 0x28, 0xfa, - 0xf9, 0x9e, 0x5f, 0x61, 0x73, 0xa7, 0x2e, 0x61, 0x41, 0xb4, 0x24, 0x5b, 0x8e, 0x43, 0x19, 0xd6, 0x71, 0x9c, 0xa4, - 0x49, 0x9b, 0x26, 0x69, 0x9c, 0x26, 0x4d, 0x54, 0x6d, 0x07, 0x22, 0x21, 0x09, 0x0d, 0x45, 0xa8, 0x04, 0x14, 0xdb, - 0x95, 0xf4, 0xdf, 0xef, 0x33, 0x78, 0x21, 0x41, 0x49, 0xc9, 0x5a, 0xeb, 0xdc, 0x73, 0xee, 0x73, 0x76, 0xf7, 0x8a, - 0x45, 0xbc, 0x63, 0x30, 0x18, 0xcc, 0x0c, 0x66, 0x06, 0xe7, 0xfb, 0xa9, 0x48, 0xd4, 0xfd, 0x9c, 0xed, 0x4d, 0xd5, - 0x2c, 0xbb, 0x38, 0xb7, 0xff, 0x32, 0x9a, 0x5e, 0x9c, 0x67, 0x3c, 0xff, 0xb2, 0x57, 0xb0, 0x8c, 0xf0, 0x44, 0xe4, - 0x7b, 0xd3, 0x82, 0x8d, 0x49, 0x4a, 0x15, 0x8d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xc5, 0xf9, 0x8c, 0x29, 0xba, - 0x97, 0x4c, 0x69, 0x21, 0x99, 0x22, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbb, 0x38, 0x97, 0x49, 0xc1, 0xe7, 0x6a, 0x0f, - 0x9a, 0x24, 0x33, 0x91, 0x2e, 0x32, 0x76, 0x71, 0x74, 0x74, 0x7b, 0x7b, 0x1b, 0xfd, 0x25, 0xff, 0xc7, 0x57, 0x5a, - 0xec, 0xfd, 0x52, 0x90, 0xd7, 0xa3, 0xbf, 0x58, 0xa2, 0xa2, 0x94, 0x8d, 0x79, 0xce, 0xde, 0x14, 0x62, 0xce, 0x0a, - 0x75, 0xdf, 0x83, 0xcc, 0x9f, 0x0a, 0x12, 0x72, 0xac, 0x30, 0x43, 0xe4, 0x42, 0xed, 0xf1, 0x7c, 0x8f, 0xf7, 0x7f, - 0x29, 0x74, 0xca, 0x92, 0xe5, 0x8b, 0x19, 0x2b, 0xe8, 0x28, 0x63, 0xf1, 0x7e, 0x0b, 0x27, 0x22, 0x1f, 0xf3, 0xc9, - 0xa2, 0xfc, 0xbe, 0x2d, 0xb8, 0x72, 0xbf, 0xbf, 0xd2, 0x6c, 0xc1, 0x62, 0xb6, 0x46, 0x31, 0x1f, 0xa8, 0x21, 0x61, - 0xba, 0xe5, 0x2f, 0x55, 0xc3, 0xe1, 0x4f, 0xba, 0xc9, 0xfb, 0x39, 0x13, 0xe3, 0x3d, 0xb5, 0x4f, 0x02, 0x79, 0x3f, - 0x1b, 0x89, 0x2c, 0xe8, 0xab, 0x46, 0x10, 0xc4, 0x50, 0x06, 0x33, 0xd4, 0x4b, 0x44, 0x2e, 0xd5, 0x9e, 0xe4, 0xe4, - 0x96, 0xe7, 0xa9, 0xb8, 0xc5, 0x5f, 0x25, 0x91, 0x3c, 0xba, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x1d, 0x1c, - 0x84, 0xf6, 0xfb, 0xfe, 0xea, 0xfa, 0x9a, 0x10, 0xf2, 0x55, 0xf0, 0x74, 0xaf, 0xb5, 0x5a, 0x79, 0xa9, 0x51, 0x4e, - 0x15, 0xff, 0xca, 0x4c, 0x25, 0x74, 0x70, 0x10, 0xd0, 0x54, 0xcc, 0x15, 0x4b, 0xaf, 0xd5, 0x7d, 0xc6, 0xae, 0xa7, - 0x8c, 0x29, 0x19, 0xf0, 0x7c, 0xef, 0x89, 0x48, 0x16, 0x33, 0x96, 0xab, 0x68, 0x5e, 0x08, 0x25, 0x60, 0x60, 0x07, - 0x07, 0x41, 0xc1, 0xe6, 0x19, 0x4d, 0x18, 0xe4, 0x5f, 0x5d, 0x5f, 0x57, 0x35, 0xaa, 0x42, 0xf8, 0x56, 0x92, 0x6b, - 0x3d, 0xf4, 0x10, 0xe1, 0xe7, 0x92, 0xe4, 0xec, 0x76, 0xef, 0x03, 0xa3, 0x5f, 0x7e, 0xa5, 0xf3, 0x5e, 0x92, 0x51, - 0x29, 0xf7, 0x9e, 0x89, 0xa5, 0x9e, 0x46, 0xb1, 0x48, 0x94, 0x28, 0x42, 0x85, 0x19, 0x96, 0x68, 0xc9, 0xc7, 0xa1, - 0x9a, 0x72, 0x19, 0xdd, 0x3c, 0x48, 0xa4, 0x7c, 0xcb, 0xe4, 0x22, 0x53, 0x0f, 0xc8, 0x7e, 0x0b, 0xcb, 0x7d, 0x42, - 0x6e, 0x25, 0x52, 0xd3, 0x42, 0xdc, 0xee, 0x3d, 0x2d, 0x0a, 0x51, 0x84, 0xc1, 0xd5, 0xf5, 0xb5, 0x29, 0xb1, 0xc7, - 0xe5, 0x5e, 0x2e, 0xd4, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xda, 0xfb, 0x5d, 0xb2, 0xbd, 0xcf, 0x8b, 0x5c, 0xd2, 0x31, - 0xbb, 0xba, 0xbe, 0xfe, 0xbc, 0x27, 0x8a, 0xbd, 0xcf, 0x89, 0x94, 0x9f, 0xf7, 0x78, 0x2e, 0x15, 0xa3, 0x69, 0x14, - 0xa0, 0x9e, 0xee, 0x2c, 0x91, 0xf2, 0x1d, 0xbb, 0x53, 0x44, 0x61, 0xfd, 0xa9, 0x08, 0x5b, 0x4f, 0x98, 0xda, 0x93, - 0xe5, 0xbc, 0x42, 0xb4, 0xcc, 0x98, 0xda, 0x53, 0x44, 0xe7, 0x0b, 0x0b, 0x7f, 0x66, 0x3e, 0x55, 0x8f, 0x8f, 0xc3, - 0xaf, 0xf2, 0xe0, 0x40, 0x95, 0x80, 0x46, 0x4b, 0xbb, 0x42, 0x84, 0xed, 0xbb, 0xb4, 0x83, 0x03, 0x16, 0x65, 0x2c, - 0x9f, 0xa8, 0x29, 0x21, 0xa4, 0xdd, 0x93, 0x07, 0x07, 0xa1, 0x22, 0xcf, 0x65, 0x34, 0x61, 0x2a, 0x64, 0x08, 0xe1, - 0xaa, 0xf6, 0xc1, 0x41, 0x68, 0x80, 0x20, 0x88, 0xd2, 0x80, 0xab, 0xc1, 0x18, 0x45, 0x16, 0xfa, 0xd7, 0xf7, 0x79, - 0x12, 0xfa, 0xe3, 0x47, 0x58, 0x1e, 0x1c, 0x3c, 0x97, 0x91, 0x84, 0x16, 0xb1, 0x42, 0x68, 0x5d, 0x30, 0xb5, 0x28, - 0xf2, 0x3d, 0xb5, 0x56, 0xe2, 0x5a, 0x15, 0x3c, 0x9f, 0x84, 0x68, 0xe9, 0xd2, 0xbc, 0x8a, 0xeb, 0xb5, 0x19, 0xee, - 0x6f, 0x05, 0xe1, 0xe4, 0x02, 0x7a, 0x7c, 0x26, 0x42, 0x8b, 0x83, 0x9c, 0x90, 0x40, 0xea, 0xba, 0x41, 0x9f, 0xc7, - 0xbc, 0x11, 0x04, 0xd8, 0x8c, 0x12, 0xdf, 0x4a, 0x84, 0xb9, 0x02, 0xd4, 0x8d, 0xa2, 0x48, 0x21, 0x72, 0xb1, 0x74, - 0x60, 0xe1, 0xde, 0x44, 0xfb, 0x7c, 0xd0, 0x1a, 0xc6, 0x2a, 0x2a, 0x58, 0xba, 0x48, 0x58, 0x18, 0x4a, 0x9c, 0x63, - 0x81, 0xc8, 0x85, 0x6c, 0x84, 0x05, 0xb9, 0x80, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xd9, 0x41, 0x16, - 0x6e, 0x84, 0x00, 0x62, 0x3b, 0xa0, 0x82, 0x90, 0x20, 0x5f, 0xcc, 0x46, 0xac, 0x08, 0xca, 0x62, 0xbd, 0x1a, 0x5e, - 0x2c, 0x24, 0xdb, 0x4b, 0xa4, 0xdc, 0x1b, 0x2f, 0xf2, 0x44, 0x71, 0x91, 0xef, 0x05, 0x8d, 0xa2, 0x11, 0x18, 0x7c, - 0x28, 0xd1, 0x21, 0x40, 0x6b, 0x14, 0xe6, 0xa8, 0xc1, 0x07, 0xa2, 0xd1, 0x1e, 0x62, 0x18, 0x25, 0xea, 0xd9, 0xf6, - 0x2c, 0x04, 0x18, 0xe6, 0x30, 0xc9, 0x35, 0xfe, 0x64, 0x76, 0x3e, 0x4c, 0xf1, 0xab, 0xec, 0xf3, 0x68, 0x7b, 0xa7, - 0x10, 0x15, 0xcd, 0xe8, 0x3c, 0x64, 0xe4, 0x82, 0x69, 0xec, 0xa2, 0x79, 0x02, 0x63, 0xad, 0x2d, 0x5c, 0x9f, 0xc5, - 0x2c, 0xaa, 0x70, 0x0a, 0xc5, 0x2a, 0x1a, 0x8b, 0xe2, 0x29, 0x4d, 0xa6, 0x50, 0xaf, 0xc4, 0x98, 0xd4, 0x6d, 0xb8, - 0xa4, 0x60, 0x54, 0xb1, 0xa7, 0x19, 0x83, 0xaf, 0x30, 0xd0, 0x35, 0x03, 0x84, 0x73, 0xd8, 0xea, 0x19, 0x57, 0xaf, - 0x44, 0x9e, 0xb0, 0x5e, 0xee, 0xe1, 0x97, 0x5e, 0xf9, 0x4b, 0xa5, 0x0a, 0x3e, 0x5a, 0x28, 0x16, 0x06, 0x39, 0x94, - 0x08, 0x70, 0x8e, 0xb0, 0x8c, 0x14, 0xbb, 0x53, 0x57, 0x22, 0x57, 0x2c, 0x57, 0x84, 0x39, 0xa8, 0x62, 0x1e, 0xd1, - 0xf9, 0x9c, 0xe5, 0xe9, 0xd5, 0x94, 0x67, 0x69, 0x28, 0xd1, 0x1a, 0xad, 0xf1, 0x07, 0x49, 0x60, 0x92, 0xe4, 0x82, - 0xc7, 0xf0, 0xcf, 0xb7, 0xa7, 0x13, 0x2a, 0x72, 0xa1, 0xb7, 0x05, 0x23, 0x41, 0xd0, 0x1b, 0x8b, 0x22, 0xb4, 0x53, - 0xd8, 0x03, 0xd2, 0x05, 0x7d, 0xbc, 0x5d, 0x64, 0x4c, 0x22, 0xd6, 0x20, 0x25, 0xa6, 0x39, 0x08, 0xff, 0x56, 0x84, - 0x0c, 0x16, 0x80, 0xa3, 0x98, 0x6b, 0x12, 0xf8, 0x92, 0xdb, 0x4d, 0x95, 0x96, 0x44, 0xed, 0x77, 0x49, 0x52, 0x1e, - 0xa9, 0x62, 0x21, 0x15, 0x4b, 0xdf, 0xdd, 0xcf, 0x99, 0xc4, 0x3f, 0x17, 0xe4, 0x77, 0xd9, 0xff, 0x5d, 0x46, 0x6c, - 0x36, 0x57, 0xf7, 0xd7, 0x9a, 0x9a, 0xc7, 0x41, 0x80, 0x3f, 0xea, 0xa2, 0x05, 0xa3, 0x09, 0x90, 0x34, 0x0b, 0xb2, - 0x37, 0x22, 0xbb, 0x1f, 0xf3, 0x2c, 0xbb, 0x5e, 0xcc, 0xe7, 0xa2, 0x50, 0x58, 0x49, 0xb2, 0x54, 0xa2, 0x82, 0x0f, - 0xac, 0xe8, 0x52, 0xde, 0x72, 0x95, 0x4c, 0x43, 0x85, 0x96, 0x09, 0x95, 0x6c, 0xef, 0xb1, 0x10, 0x19, 0xa3, 0x79, - 0xcc, 0x09, 0xef, 0xff, 0x5c, 0xc4, 0xf9, 0x22, 0xcb, 0x7a, 0xa3, 0x82, 0xd1, 0x2f, 0x3d, 0x9d, 0x6d, 0x0e, 0x87, - 0x58, 0xff, 0xbe, 0x2c, 0x0a, 0x7a, 0x0f, 0x05, 0x09, 0x81, 0x62, 0x7d, 0x1e, 0xff, 0x7c, 0xfd, 0xfa, 0x55, 0x64, - 0xf6, 0x0a, 0x1f, 0xdf, 0x87, 0xbc, 0xdc, 0x7f, 0x7c, 0x8d, 0xc7, 0x85, 0x98, 0x6d, 0x74, 0x6d, 0x40, 0xc7, 0x7b, - 0xdf, 0x18, 0x02, 0x23, 0x7c, 0xdf, 0x34, 0xed, 0x8f, 0xe0, 0x95, 0xc6, 0x7c, 0xc8, 0x24, 0xb6, 0x5f, 0xf8, 0x27, - 0x36, 0xc9, 0x21, 0x47, 0xdf, 0x1f, 0xad, 0x2a, 0xee, 0x97, 0x8c, 0xe8, 0x71, 0xce, 0xe1, 0x60, 0x84, 0x31, 0x26, - 0x54, 0x25, 0xd3, 0x25, 0xd3, 0x8d, 0xad, 0xdd, 0x88, 0xd9, 0x7a, 0x8d, 0x5f, 0x09, 0x87, 0xf5, 0x6a, 0x9f, 0x10, - 0xae, 0xe9, 0x15, 0x51, 0xab, 0x15, 0x27, 0x84, 0x23, 0xfc, 0x96, 0x93, 0x25, 0x75, 0x13, 0x82, 0x93, 0x0d, 0xb6, - 0x67, 0x6c, 0xa8, 0x0c, 0x9c, 0x80, 0x5f, 0x59, 0xa1, 0x58, 0x11, 0x2b, 0x89, 0x0b, 0x36, 0xce, 0x60, 0x1c, 0xfb, - 0x6d, 0x3c, 0xa5, 0xf2, 0x6a, 0x4a, 0xf3, 0x09, 0x4b, 0xe3, 0x57, 0x62, 0x8d, 0x99, 0x24, 0xc1, 0x98, 0xe7, 0x34, - 0xe3, 0xff, 0xb0, 0x34, 0xb0, 0xe7, 0xc2, 0x63, 0xb5, 0xc7, 0xee, 0x14, 0xcb, 0x53, 0xb9, 0xf7, 0xfc, 0xdd, 0xaf, - 0x2f, 0xed, 0x62, 0xd6, 0xce, 0x0a, 0xb4, 0x94, 0x8b, 0x39, 0x2b, 0x42, 0x84, 0xed, 0x59, 0xf1, 0x94, 0x6b, 0x3a, - 0xf9, 0x2b, 0x9d, 0x9b, 0x14, 0x2e, 0x7f, 0x9f, 0xa7, 0x54, 0xb1, 0x37, 0x2c, 0x4f, 0x79, 0x3e, 0x21, 0xfb, 0x6d, - 0x93, 0x3e, 0xa5, 0x36, 0x23, 0x2d, 0x93, 0x6e, 0x1e, 0x3c, 0xcd, 0xf4, 0xdc, 0xcb, 0xcf, 0x45, 0x88, 0xd6, 0x52, - 0x51, 0xc5, 0x93, 0x3d, 0x9a, 0xa6, 0x2f, 0x72, 0xae, 0xb8, 0x1e, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xcc, 0xa9, - 0xe1, 0x46, 0x1e, 0x22, 0x1c, 0x86, 0xf6, 0x2c, 0x98, 0x22, 0xbb, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb3, 0xd8, - 0x64, 0x92, 0xc1, 0x10, 0x45, 0xf3, 0x85, 0x84, 0xc5, 0x76, 0x5d, 0xc0, 0x41, 0x23, 0x46, 0x92, 0x15, 0x5f, 0x59, - 0x5a, 0x22, 0x88, 0x0c, 0xd1, 0x72, 0xa3, 0x0f, 0xbb, 0x3d, 0x14, 0x19, 0x0c, 0x7b, 0x3e, 0x09, 0x67, 0x16, 0xd9, - 0x0d, 0xa7, 0xc2, 0x99, 0x2c, 0x89, 0x4a, 0x08, 0x07, 0x6a, 0x49, 0x58, 0x72, 0xe2, 0xe6, 0x37, 0x0f, 0x25, 0xf0, - 0x10, 0x3e, 0xe5, 0x70, 0x67, 0xee, 0xd3, 0xaf, 0xfa, 0xf0, 0xc8, 0xb1, 0x44, 0x58, 0x99, 0x91, 0xe6, 0x08, 0xad, - 0x11, 0x56, 0x6e, 0xb8, 0x86, 0x28, 0x39, 0xbe, 0x08, 0x4e, 0x6d, 0xf2, 0x96, 0xeb, 0x63, 0x1b, 0x68, 0x1b, 0x55, - 0xec, 0xe0, 0x20, 0x64, 0x51, 0x89, 0x18, 0x64, 0xbf, 0x6d, 0x17, 0xc9, 0x83, 0xd6, 0x37, 0xc6, 0x0d, 0x3d, 0x6b, - 0x06, 0x67, 0x9f, 0x45, 0xb9, 0xb8, 0x4c, 0x12, 0x26, 0xa5, 0x28, 0x0e, 0x0e, 0xf6, 0x75, 0xf9, 0x92, 0xb3, 0x80, - 0x45, 0x7c, 0x7d, 0x9b, 0x57, 0x43, 0x40, 0xd5, 0x69, 0xeb, 0xf8, 0x26, 0x52, 0xf1, 0x4d, 0x8e, 0x09, 0x89, 0x83, - 0x9b, 0x9b, 0xa0, 0xa1, 0xb0, 0x85, 0xc3, 0x84, 0xb9, 0xae, 0xef, 0x9f, 0x30, 0xc3, 0x16, 0x6a, 0x26, 0x64, 0x0b, - 0x34, 0x3b, 0xf9, 0xc1, 0xb0, 0x3e, 0x24, 0xac, 0x70, 0x8e, 0xd6, 0xde, 0x8a, 0xee, 0x6c, 0x5a, 0xf3, 0x37, 0x66, - 0xe9, 0x96, 0x13, 0xcd, 0x53, 0x78, 0xeb, 0x38, 0x60, 0xc3, 0x35, 0xd6, 0xb0, 0x77, 0xb3, 0x11, 0x7a, 0xa0, 0x03, - 0x35, 0xec, 0xd9, 0x7c, 0x92, 0x1b, 0xc8, 0x15, 0xec, 0xef, 0x05, 0x93, 0xca, 0x20, 0x72, 0xa8, 0xb0, 0xc0, 0x70, - 0x46, 0x6d, 0x32, 0x9d, 0x35, 0x96, 0x74, 0xd7, 0xd8, 0x5e, 0xcf, 0xe1, 0x6c, 0x94, 0x80, 0xd4, 0xdf, 0xc7, 0x27, - 0x18, 0xab, 0x42, 0xab, 0xd5, 0x5b, 0xee, 0x5a, 0xa9, 0xd6, 0xb2, 0xe4, 0xd7, 0x36, 0x16, 0x85, 0x49, 0x64, 0x0f, - 0xe7, 0xfd, 0xb6, 0x1d, 0xbf, 0x1c, 0x92, 0xfd, 0x56, 0x89, 0xc5, 0x16, 0xac, 0x66, 0x3c, 0x06, 0x8a, 0xaf, 0x4d, - 0x53, 0x48, 0x9f, 0xf5, 0x35, 0x7c, 0x89, 0xa6, 0x5b, 0xb8, 0x3a, 0x25, 0x03, 0xe0, 0x3a, 0xa2, 0xe9, 0xf0, 0x5b, - 0xf8, 0xe4, 0x28, 0x42, 0xa8, 0xb6, 0xf3, 0x2a, 0xc2, 0xf1, 0xb5, 0x4e, 0x38, 0x36, 0xa6, 0x11, 0xcc, 0xcb, 0x2a, - 0x41, 0x89, 0x66, 0x76, 0xab, 0x57, 0x59, 0x58, 0xea, 0xc1, 0x54, 0x53, 0xf2, 0x9a, 0x78, 0x45, 0x67, 0x4c, 0x86, - 0x0c, 0xe1, 0x6f, 0x15, 0x30, 0xf8, 0x09, 0x45, 0x86, 0xde, 0x19, 0x9a, 0xc3, 0x19, 0x0a, 0xec, 0x2e, 0x30, 0x69, - 0xf5, 0x2d, 0x97, 0x63, 0x36, 0xc8, 0x87, 0x15, 0x6f, 0xe7, 0x4d, 0x5e, 0x1f, 0xce, 0x92, 0xd4, 0xf6, 0x9b, 0x49, - 0x33, 0x40, 0xd3, 0x2c, 0x84, 0x44, 0x78, 0xbf, 0xb5, 0xb9, 0x92, 0xae, 0x54, 0x35, 0xc7, 0xc1, 0x10, 0xd6, 0x41, - 0x1f, 0x1b, 0x11, 0x97, 0xfa, 0x6f, 0x6d, 0xab, 0x01, 0xd8, 0xae, 0x01, 0x33, 0xa2, 0x71, 0x46, 0x55, 0xd8, 0x3e, - 0x6a, 0x01, 0x63, 0xfa, 0x95, 0xc1, 0xa9, 0x82, 0xd0, 0xf6, 0x54, 0x58, 0xb4, 0xc8, 0xe5, 0x94, 0x8f, 0x55, 0xf8, - 0x41, 0x6a, 0xa2, 0xc2, 0x32, 0xc9, 0x40, 0xc2, 0xf1, 0xd8, 0x63, 0x4d, 0x70, 0x3e, 0xc0, 0x30, 0x4a, 0x56, 0x8c, - 0xb9, 0x91, 0x6a, 0xc2, 0x05, 0xe4, 0xa1, 0x62, 0xad, 0x2b, 0x32, 0xe3, 0x4a, 0x4b, 0xe0, 0x1e, 0xdb, 0x7d, 0xd3, - 0x62, 0x6c, 0xa9, 0x81, 0xf4, 0x38, 0x58, 0x19, 0xfb, 0x24, 0xc2, 0x26, 0xaa, 0x48, 0x89, 0x97, 0xe2, 0x96, 0x15, - 0x57, 0x14, 0x06, 0x1f, 0x9b, 0xea, 0x6b, 0x73, 0x14, 0x68, 0x8a, 0xaf, 0x7a, 0x0e, 0x5f, 0x6e, 0xf4, 0xc4, 0xdf, - 0x14, 0x62, 0xc6, 0x25, 0x03, 0xbe, 0xcd, 0xc0, 0x3f, 0x87, 0x8d, 0xa6, 0x77, 0x24, 0x1c, 0x37, 0xac, 0xc4, 0xaf, - 0xcb, 0x97, 0x75, 0xfc, 0xba, 0x79, 0xf0, 0x74, 0xe2, 0x28, 0x60, 0x7d, 0x1f, 0x23, 0x1c, 0x5a, 0xf1, 0xc2, 0x3b, - 0xe9, 0xa2, 0x29, 0xb2, 0xc7, 0xfc, 0x6a, 0xa5, 0x3c, 0x31, 0xae, 0xc6, 0x39, 0x32, 0xb3, 0x6d, 0xd0, 0x9a, 0xa6, - 0x29, 0xb0, 0x78, 0x85, 0xc8, 0x32, 0xef, 0xb0, 0xc2, 0xb2, 0x57, 0x1e, 0x4f, 0x37, 0x0f, 0x9e, 0x5e, 0x7f, 0xef, - 0x84, 0x82, 0x7c, 0xff, 0x90, 0x72, 0x03, 0xcd, 0x53, 0x56, 0x80, 0x5c, 0xe9, 0xad, 0x96, 0x3d, 0x67, 0xaf, 0x44, - 0x9e, 0xb3, 0x44, 0xb1, 0x14, 0x84, 0x16, 0x60, 0x83, 0xa7, 0x42, 0xaa, 0x32, 0xb1, 0x1a, 0xbd, 0xf4, 0x85, 0xd0, - 0x28, 0xa1, 0x59, 0x16, 0x1a, 0x01, 0x65, 0x26, 0xbe, 0xb2, 0x1d, 0xa3, 0xee, 0xd5, 0x86, 0x5c, 0x36, 0xc3, 0xbc, - 0x66, 0x58, 0x24, 0xe7, 0x19, 0x4f, 0x58, 0x79, 0x78, 0x5d, 0x47, 0x3c, 0x4f, 0xd9, 0x1d, 0xd0, 0x11, 0x74, 0x71, - 0x71, 0xd1, 0xc2, 0x6d, 0xb4, 0x36, 0x00, 0x5f, 0x6e, 0x01, 0xf6, 0x3b, 0xc7, 0xa6, 0x11, 0xc4, 0x97, 0x3b, 0xc9, - 0x1a, 0xf2, 0xce, 0x4a, 0xee, 0x04, 0x2d, 0x43, 0x9e, 0x11, 0x4e, 0x59, 0xc6, 0x14, 0x73, 0xe4, 0x1c, 0x98, 0x69, - 0xb3, 0x75, 0xdf, 0x96, 0xf0, 0x2b, 0xd1, 0xc9, 0xed, 0x32, 0xb7, 0xe6, 0xb2, 0x14, 0xdd, 0xab, 0xe5, 0xa9, 0xa0, - 0xdd, 0x57, 0x66, 0x79, 0xa8, 0x52, 0x34, 0x99, 0x1a, 0x89, 0x3d, 0xdc, 0x9a, 0x52, 0xd5, 0x86, 0x25, 0xed, 0xe5, - 0x26, 0xfa, 0x54, 0xd8, 0x61, 0xee, 0x02, 0xc1, 0xb5, 0x25, 0x0a, 0x0c, 0x84, 0x40, 0xb3, 0x6c, 0x57, 0x34, 0xcb, - 0x46, 0x34, 0xf9, 0x52, 0xc7, 0xfe, 0x0a, 0x0d, 0xc8, 0x26, 0x35, 0xf6, 0xb2, 0x3c, 0x92, 0xe5, 0xcf, 0xdb, 0x51, - 0xe9, 0xda, 0x46, 0x09, 0xf7, 0x5b, 0x15, 0xda, 0xd7, 0x17, 0xfa, 0x9b, 0xd8, 0xae, 0x47, 0x24, 0xed, 0xcc, 0x42, - 0xa0, 0x02, 0xff, 0x12, 0xe3, 0x1c, 0x3d, 0xb0, 0x78, 0x07, 0x82, 0xc7, 0x7a, 0x63, 0x20, 0x0a, 0x2d, 0xd7, 0x29, - 0x97, 0xdf, 0x86, 0xc0, 0xff, 0x96, 0x51, 0x3e, 0xf1, 0x7a, 0xf8, 0x77, 0x07, 0x5a, 0xd2, 0x38, 0xcb, 0x38, 0x97, - 0x23, 0xb3, 0x0c, 0x85, 0x23, 0x34, 0xbf, 0x00, 0xf3, 0xa2, 0xf1, 0xfd, 0xb5, 0xc9, 0xd2, 0x7c, 0x19, 0x0c, 0x23, - 0xef, 0xf9, 0x0c, 0x45, 0x0d, 0x05, 0x2c, 0x51, 0x35, 0x67, 0xae, 0xa8, 0x89, 0x92, 0x96, 0x6b, 0x37, 0xe2, 0xb8, - 0xa5, 0xb9, 0x05, 0x09, 0xc3, 0x30, 0x27, 0xba, 0x0d, 0xc3, 0xdf, 0x57, 0xb3, 0xc8, 0xb7, 0x66, 0x91, 0x47, 0x9e, - 0xb4, 0x85, 0x2a, 0x64, 0xf6, 0xaa, 0xc7, 0x4a, 0x22, 0xbf, 0x14, 0xb0, 0xac, 0x11, 0x50, 0x68, 0x54, 0x12, 0xdc, - 0x8c, 0x28, 0x5c, 0x58, 0x51, 0xc7, 0xe2, 0x1a, 0x90, 0x8c, 0xaa, 0x8a, 0x40, 0x66, 0x73, 0xd4, 0x64, 0x5f, 0x81, - 0x0b, 0xb4, 0xc1, 0xdf, 0xaf, 0xd7, 0x16, 0x4a, 0x0c, 0xd9, 0xd5, 0xa9, 0x31, 0xc6, 0x1e, 0x58, 0xb0, 0x20, 0xb9, - 0x61, 0x86, 0x0d, 0xeb, 0xb3, 0x09, 0x9c, 0xb2, 0xdd, 0x7d, 0x42, 0x44, 0x05, 0x9b, 0x3c, 0xda, 0xc1, 0x5d, 0x09, - 0x84, 0xa9, 0x63, 0x4b, 0x8b, 0x6a, 0xe2, 0x84, 0x04, 0x4e, 0x3b, 0x11, 0xf4, 0x97, 0x35, 0xe1, 0x30, 0xf6, 0x8a, - 0xad, 0x63, 0x20, 0xaa, 0xc5, 0x2e, 0x78, 0xef, 0xc2, 0x9a, 0x5a, 0x3b, 0x1e, 0xc4, 0x8b, 0x1a, 0xc4, 0x3d, 0xd0, - 0x0a, 0x43, 0xbc, 0xc4, 0x90, 0xd0, 0x7a, 0xe5, 0x90, 0xe1, 0xc2, 0x2c, 0xc4, 0x16, 0x14, 0x37, 0xd9, 0x4f, 0x8d, - 0x85, 0x20, 0xcb, 0xe6, 0xc0, 0xdf, 0xf9, 0x47, 0x44, 0x08, 0x83, 0x97, 0xab, 0xd5, 0x16, 0xda, 0xed, 0xe4, 0x42, - 0x51, 0x54, 0x49, 0x87, 0xab, 0xd5, 0x2b, 0x81, 0x42, 0xcb, 0xff, 0x62, 0x86, 0xfa, 0x8e, 0xe8, 0x5e, 0xbe, 0x84, - 0x52, 0x9a, 0x1d, 0xad, 0x52, 0x4a, 0xc1, 0xa1, 0x8e, 0xb5, 0xf5, 0x85, 0x52, 0x1e, 0xe5, 0xbe, 0xda, 0x22, 0x60, - 0x3a, 0xd1, 0x9e, 0xd4, 0xd5, 0x94, 0xaf, 0x6c, 0xd3, 0x12, 0x21, 0x14, 0xe7, 0x5a, 0x96, 0xd9, 0xdf, 0x25, 0x5f, - 0x1e, 0x1c, 0xe4, 0x5e, 0x43, 0x37, 0x25, 0xa5, 0xf8, 0x2b, 0x84, 0x53, 0x59, 0xde, 0xe7, 0x9a, 0x7d, 0xf9, 0xcb, - 0x9d, 0x43, 0x5b, 0xd2, 0x69, 0xab, 0x07, 0x82, 0x39, 0xbd, 0xa5, 0x5c, 0xed, 0x95, 0xad, 0x18, 0xc1, 0x3c, 0x64, - 0x68, 0x69, 0xb9, 0x8d, 0xa8, 0x60, 0xc0, 0x3f, 0x02, 0x59, 0x70, 0x5c, 0xb4, 0x41, 0xfc, 0x64, 0xca, 0x40, 0x95, - 0xed, 0x18, 0x89, 0x52, 0x3c, 0xdc, 0xb7, 0x07, 0x89, 0x6d, 0x78, 0xf7, 0xd8, 0xd7, 0x9b, 0xd5, 0x6b, 0xd2, 0xc0, - 0x9c, 0x15, 0x63, 0x51, 0xcc, 0x5c, 0xde, 0x7a, 0xe3, 0xdb, 0x12, 0x47, 0x3e, 0x0e, 0x77, 0xb6, 0x6d, 0x45, 0x80, - 0xde, 0x86, 0xec, 0x5d, 0x49, 0xed, 0xb5, 0xd3, 0xb4, 0x3c, 0x80, 0x8d, 0x82, 0xd0, 0x61, 0x66, 0xee, 0x4b, 0xf9, - 0x56, 0xbd, 0xda, 0x33, 0xba, 0x93, 0xfd, 0x76, 0xaf, 0x94, 0xfc, 0x1c, 0x36, 0xf4, 0x8c, 0x8e, 0xc3, 0x9e, 0xaa, - 0x62, 0x91, 0xa5, 0x76, 0xb0, 0x70, 0xc4, 0x59, 0x3c, 0xba, 0xe5, 0x59, 0x56, 0xa5, 0xfe, 0x27, 0xa4, 0x3d, 0xb7, - 0xa4, 0x5d, 0x38, 0xd2, 0x0e, 0xa4, 0x02, 0x48, 0xbb, 0x69, 0xae, 0xaa, 0x2e, 0xb6, 0xb6, 0xa7, 0x30, 0x44, 0x3d, - 0xd7, 0xe2, 0x34, 0xf4, 0xb7, 0x70, 0x23, 0x40, 0x25, 0xf3, 0xf5, 0x25, 0xb4, 0xfa, 0x18, 0x10, 0x03, 0x8d, 0x4e, - 0x93, 0xf9, 0x9a, 0x8a, 0x2f, 0x21, 0xc2, 0xf9, 0x9a, 0x95, 0x98, 0x7d, 0xf9, 0x14, 0x94, 0x76, 0xde, 0x74, 0xe0, - 0x1c, 0xd3, 0xc9, 0xff, 0x11, 0x1f, 0xe5, 0x66, 0x27, 0xed, 0xec, 0x72, 0x37, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0xd2, - 0xef, 0x53, 0x7b, 0x3d, 0x3d, 0x59, 0x4e, 0xaf, 0x5a, 0xef, 0xd5, 0x2a, 0xdc, 0x48, 0x01, 0x8d, 0xbe, 0x95, 0x52, - 0x8a, 0xb2, 0x75, 0xa0, 0x01, 0x3e, 0x64, 0x20, 0x61, 0x6d, 0x26, 0x5d, 0x9e, 0x72, 0x2f, 0xff, 0x95, 0x9e, 0x47, - 0x2b, 0xee, 0x4d, 0xfd, 0x2b, 0x31, 0x9b, 0x03, 0x43, 0xb6, 0x81, 0xd2, 0x13, 0x66, 0x3b, 0xac, 0xf2, 0xd7, 0x3b, - 0xd2, 0x6a, 0x75, 0xf4, 0x7e, 0xac, 0x61, 0x53, 0x29, 0x35, 0xef, 0xb7, 0xd6, 0x8b, 0x32, 0xa9, 0x24, 0x1c, 0xbb, - 0x74, 0x2b, 0x57, 0x9b, 0x9a, 0x19, 0x97, 0xf1, 0x3a, 0x94, 0x86, 0x0e, 0x4b, 0xa0, 0x75, 0x1e, 0xf9, 0x71, 0xe8, - 0xee, 0xaf, 0xff, 0xba, 0x02, 0xce, 0x72, 0xbd, 0x01, 0xbe, 0xe5, 0x7a, 0xfd, 0x58, 0x59, 0x49, 0x1b, 0x3f, 0xde, - 0x21, 0xf7, 0x96, 0xd0, 0xab, 0x32, 0xad, 0xcc, 0x38, 0x18, 0x42, 0xda, 0x16, 0x0b, 0x49, 0x96, 0x33, 0x91, 0xb2, - 0x38, 0x10, 0x73, 0x96, 0x07, 0x6b, 0xd0, 0xb3, 0x5a, 0x04, 0xf8, 0x28, 0xc3, 0xe5, 0xdb, 0xba, 0xbe, 0x35, 0x7e, - 0xac, 0xd6, 0xa0, 0x0a, 0x7b, 0xc9, 0x77, 0x28, 0x63, 0xdf, 0xb3, 0x42, 0x6a, 0x9e, 0xb4, 0x64, 0x6f, 0x5f, 0xf2, - 0xea, 0x80, 0x7a, 0xc9, 0xe3, 0x6f, 0x57, 0xa9, 0x04, 0x92, 0xa0, 0x1d, 0x9d, 0x46, 0xc7, 0x01, 0xd2, 0x1a, 0xe3, - 0x67, 0x4e, 0x63, 0xbc, 0x28, 0x35, 0xc6, 0xcf, 0x15, 0x59, 0x6c, 0x68, 0x8c, 0xff, 0x96, 0xe4, 0xb9, 0xea, 0x3f, - 0x77, 0xda, 0xf4, 0x37, 0x22, 0xe3, 0xc9, 0x7d, 0x18, 0x64, 0x5c, 0x35, 0xe1, 0x36, 0x31, 0xc0, 0x4b, 0x93, 0x01, - 0xaa, 0x46, 0xad, 0xef, 0x5e, 0x3b, 0xf9, 0x0f, 0x73, 0x49, 0x82, 0x07, 0x19, 0x57, 0x0f, 0x02, 0x3c, 0x55, 0xe4, - 0x33, 0xfc, 0x7a, 0xb0, 0x0c, 0x7f, 0xa5, 0x6a, 0x1a, 0x15, 0x34, 0x4f, 0xc5, 0x2c, 0x44, 0x8d, 0x20, 0x40, 0x91, - 0xd4, 0x42, 0xc8, 0x23, 0xb4, 0x7e, 0xf0, 0x19, 0xff, 0x23, 0x48, 0xd0, 0x0f, 0x1a, 0x53, 0x85, 0x15, 0x25, 0x9f, - 0xcf, 0x1f, 0x2c, 0xff, 0x11, 0xeb, 0x8b, 0xcf, 0xf8, 0xa9, 0x2a, 0xd5, 0xfa, 0xf8, 0x8e, 0x91, 0x10, 0x91, 0x8b, - 0xa7, 0x6e, 0x48, 0x57, 0x62, 0x66, 0x14, 0xfc, 0x01, 0xc2, 0x5f, 0x41, 0xaf, 0x7b, 0xc1, 0x2b, 0x22, 0x64, 0xef, - 0x60, 0xf6, 0x49, 0x20, 0xb4, 0xf2, 0x20, 0x38, 0x38, 0xf0, 0xd2, 0x4a, 0x16, 0x02, 0xff, 0x25, 0x48, 0x4d, 0x54, - 0xc7, 0x8c, 0x42, 0x4b, 0x7f, 0x89, 0x90, 0x23, 0xd7, 0x4c, 0xe8, 0x34, 0xd5, 0x76, 0xc7, 0xf2, 0x81, 0xd1, 0x3d, - 0x44, 0x5c, 0xb1, 0x82, 0x2a, 0x51, 0x0c, 0x91, 0xcf, 0x96, 0xe0, 0x57, 0x9c, 0x7c, 0x1e, 0xec, 0xfd, 0x3f, 0xff, - 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xf0, 0x33, 0x96, 0x8c, 0x1c, 0x9d, 0x87, 0xfd, 0x38, 0xdc, 0x6f, 0x36, 0x57, 0x7f, - 0x1e, 0x0d, 0xfe, 0x9b, 0x36, 0xff, 0xb9, 0x6c, 0x7e, 0x1a, 0xa2, 0x55, 0xf8, 0xe7, 0x51, 0x7f, 0x60, 0xbf, 0x06, - 0xff, 0x7d, 0xf1, 0xa7, 0x1c, 0x1e, 0x9a, 0xc4, 0x07, 0x08, 0x1d, 0x4d, 0xf0, 0x1f, 0x92, 0x1c, 0x35, 0x9b, 0x17, - 0x47, 0x13, 0xfc, 0x8b, 0x24, 0x47, 0xf0, 0xf7, 0x5e, 0x91, 0xb7, 0x6c, 0xf2, 0xf4, 0x6e, 0x1e, 0x7e, 0xbe, 0x58, - 0x3d, 0x58, 0xbe, 0xe2, 0x6b, 0x68, 0x77, 0xf0, 0xdf, 0x7f, 0xfe, 0x29, 0x83, 0x1f, 0x2f, 0xc8, 0xd1, 0xb0, 0x81, - 0x42, 0x9d, 0x7c, 0x48, 0xcc, 0x9f, 0xb0, 0x1f, 0x0f, 0xfe, 0xdb, 0x0e, 0x25, 0xf8, 0xf1, 0xcf, 0xcf, 0xe7, 0x17, - 0x64, 0xb8, 0x0a, 0x83, 0xd5, 0x8f, 0x68, 0x85, 0xd0, 0xea, 0x01, 0xfa, 0x8c, 0x83, 0x49, 0x80, 0xf0, 0x4f, 0x92, - 0x1c, 0xfd, 0x78, 0x34, 0xc1, 0xbf, 0x49, 0x72, 0x14, 0x1c, 0x4d, 0xf0, 0x7b, 0x41, 0x8e, 0xfe, 0x3b, 0xec, 0xc7, - 0x46, 0x09, 0xb7, 0xd2, 0xea, 0x8f, 0x15, 0xdc, 0x84, 0xd0, 0x82, 0xd1, 0x95, 0xe2, 0x2a, 0x63, 0xe8, 0xc1, 0x11, - 0xc7, 0x8f, 0x05, 0x00, 0x2b, 0x54, 0xa0, 0xa4, 0xd1, 0x97, 0xb0, 0xcb, 0x1b, 0x58, 0x78, 0xc0, 0xa0, 0x07, 0x31, - 0xc7, 0x46, 0x4f, 0x20, 0x63, 0x65, 0x6e, 0x6f, 0x25, 0x5c, 0xdf, 0xe2, 0x2b, 0xf2, 0x58, 0x84, 0x6d, 0x84, 0x39, - 0x85, 0x1f, 0x1d, 0x84, 0x3f, 0x28, 0x7b, 0xe1, 0x09, 0xdb, 0xdc, 0x60, 0x58, 0x2e, 0x0c, 0x3f, 0x13, 0x20, 0xfc, - 0x72, 0x47, 0xa6, 0x9a, 0x82, 0xfa, 0x01, 0xe1, 0x4f, 0xb5, 0xeb, 0x51, 0x7c, 0xa5, 0x48, 0x89, 0x1c, 0xef, 0x0a, - 0xc6, 0x3e, 0xd0, 0xec, 0x0b, 0x2b, 0xc2, 0xa7, 0x0a, 0xb7, 0x3b, 0x8f, 0xb0, 0x56, 0x55, 0xef, 0xb7, 0x51, 0xaf, - 0xbc, 0xdd, 0x7a, 0x2e, 0xcc, 0x7d, 0x02, 0x9c, 0xc2, 0x75, 0x7d, 0x0d, 0xac, 0xfd, 0x3e, 0xdf, 0x52, 0x6a, 0x15, - 0xf4, 0x36, 0x40, 0xf5, 0xab, 0x54, 0x9e, 0x7f, 0xa5, 0x19, 0x4f, 0xf7, 0x14, 0x9b, 0xcd, 0x33, 0xaa, 0xd8, 0x9e, - 0x9d, 0xf3, 0x1e, 0x85, 0x86, 0x82, 0x92, 0xa7, 0xf8, 0x5b, 0x56, 0x9b, 0xf6, 0x6f, 0x27, 0xe7, 0xc1, 0xde, 0x09, - 0xe1, 0x3e, 0xcb, 0xf2, 0x25, 0x92, 0x96, 0xd7, 0x65, 0x9b, 0x37, 0x82, 0xcd, 0x36, 0x28, 0xcb, 0x86, 0xfa, 0xfc, - 0xce, 0x31, 0xdc, 0x6f, 0x12, 0xd2, 0xe9, 0x07, 0xe7, 0xf2, 0xeb, 0xe4, 0x22, 0x80, 0x9b, 0x9c, 0x82, 0x48, 0xa6, - 0x95, 0x47, 0x50, 0x82, 0x92, 0x56, 0x8f, 0x9e, 0xb3, 0x1e, 0x6d, 0x34, 0x1c, 0x9b, 0x9d, 0x10, 0x3e, 0xa0, 0xa6, - 0x7e, 0x86, 0xa7, 0x38, 0x25, 0xcd, 0x36, 0x5e, 0x90, 0x96, 0xae, 0xd2, 0x5b, 0x9c, 0x27, 0xb6, 0x9f, 0x83, 0x83, - 0xb0, 0x88, 0x32, 0x2a, 0xd5, 0x0b, 0xd0, 0x08, 0x90, 0x05, 0x9e, 0x92, 0x22, 0x62, 0x77, 0x2c, 0x09, 0x13, 0x84, - 0xa7, 0x96, 0x06, 0xa1, 0x1e, 0x5a, 0x10, 0xaf, 0x18, 0xc8, 0x19, 0x44, 0xb2, 0xfe, 0x74, 0xd0, 0x1e, 0x12, 0x42, - 0x82, 0xfd, 0x66, 0x33, 0xe8, 0x17, 0xe4, 0x0f, 0x19, 0x43, 0x8a, 0xc7, 0x4e, 0x93, 0x5f, 0x20, 0xa9, 0xe3, 0x25, - 0x85, 0xef, 0x45, 0xa4, 0x98, 0x54, 0x21, 0x24, 0x83, 0x92, 0x20, 0x77, 0x18, 0x1e, 0x9c, 0x1f, 0x05, 0x0d, 0x48, - 0xd5, 0x28, 0x8a, 0x70, 0x41, 0xee, 0x15, 0x8a, 0xa7, 0x83, 0xe3, 0xa1, 0x7f, 0x46, 0x98, 0x54, 0xe8, 0xff, 0x5e, - 0xf5, 0xa7, 0x83, 0x96, 0xee, 0xff, 0x22, 0xe8, 0x87, 0x05, 0xc9, 0xf7, 0xed, 0x3d, 0x4f, 0x2c, 0x99, 0x9e, 0x2f, - 0x8a, 0xed, 0x00, 0x6d, 0xdf, 0x29, 0x69, 0x76, 0xe2, 0x30, 0xf5, 0x67, 0xd2, 0x84, 0x0e, 0x2d, 0x28, 0x70, 0x46, - 0xa0, 0x3c, 0x2e, 0x08, 0x74, 0x5a, 0x55, 0xbb, 0x57, 0xb1, 0x4d, 0xf8, 0x31, 0xf8, 0xb1, 0xff, 0x9b, 0x8c, 0x7f, - 0x92, 0x66, 0x04, 0xbf, 0xc9, 0xd5, 0x0a, 0xfe, 0xfe, 0x24, 0xfb, 0x30, 0x2c, 0x9d, 0xf6, 0x87, 0x4d, 0xfb, 0x05, - 0xd2, 0x24, 0x8b, 0xf5, 0x80, 0x71, 0x5e, 0xf2, 0x63, 0x66, 0x71, 0xc6, 0xc4, 0xcc, 0xe0, 0xe0, 0x80, 0x0f, 0x68, - 0xa3, 0x3d, 0x84, 0x1b, 0x81, 0x42, 0xc9, 0x0f, 0x5c, 0x4d, 0xc3, 0xe0, 0xe8, 0x22, 0x40, 0xfd, 0x60, 0x0f, 0x56, - 0xb9, 0x27, 0x1a, 0xc4, 0xc2, 0x3a, 0x69, 0x28, 0x1a, 0xa7, 0x17, 0xa4, 0xd5, 0x0f, 0xa5, 0x21, 0xf2, 0x19, 0xc2, - 0x89, 0xa5, 0xa9, 0x2d, 0x9c, 0xa2, 0x06, 0x97, 0x0d, 0xf7, 0x9d, 0xa2, 0xc6, 0x54, 0x35, 0xc6, 0x28, 0x4e, 0xe0, - 0x6f, 0x98, 0x12, 0x42, 0x9a, 0x9d, 0xb2, 0xa2, 0x3b, 0x2c, 0x29, 0x8a, 0xc7, 0x4e, 0x3d, 0x3a, 0xd0, 0x9b, 0x43, - 0x34, 0x42, 0x3e, 0x60, 0xc3, 0xd5, 0x2a, 0x38, 0xef, 0x5f, 0x04, 0xa8, 0x11, 0x3a, 0xb4, 0x3b, 0x72, 0x78, 0x87, - 0x10, 0x96, 0xc3, 0xb5, 0xbd, 0x81, 0xba, 0x65, 0xb5, 0xdb, 0xa6, 0x65, 0xb5, 0xff, 0x3d, 0xb2, 0xc0, 0xd6, 0xa5, - 0xdc, 0x63, 0xf8, 0xdb, 0x39, 0x4c, 0xd5, 0xe1, 0xb6, 0x20, 0x2d, 0x5c, 0x10, 0xa7, 0xee, 0xa6, 0x44, 0x55, 0xf8, - 0x9f, 0x90, 0xaa, 0x38, 0x1e, 0x64, 0x78, 0x3a, 0x24, 0x92, 0x6a, 0xf9, 0xa5, 0xe7, 0x94, 0xe9, 0x2c, 0x23, 0xb7, - 0x6c, 0xe3, 0xfe, 0x37, 0x83, 0x3b, 0x99, 0x2b, 0x15, 0x25, 0x8b, 0xa2, 0x60, 0xb9, 0x7a, 0x25, 0x52, 0xcb, 0xd8, - 0xb1, 0x0c, 0x64, 0x2b, 0xb8, 0xd8, 0xc5, 0xc0, 0xd5, 0x75, 0xdc, 0x4e, 0x49, 0xb7, 0xb2, 0x17, 0x24, 0x35, 0x0c, - 0x97, 0xbe, 0xee, 0xed, 0x2d, 0xac, 0x28, 0x1d, 0x22, 0x9c, 0xda, 0x7b, 0xe0, 0x30, 0x8a, 0xa2, 0x45, 0x94, 0x40, - 0x36, 0x74, 0x20, 0xd1, 0x5a, 0xef, 0xab, 0x30, 0x27, 0x57, 0x2a, 0xca, 0xd9, 0x9d, 0xee, 0x36, 0x44, 0xd5, 0x21, - 0xee, 0xf6, 0xdb, 0x39, 0xed, 0x69, 0x02, 0x94, 0x47, 0xb9, 0x48, 0x19, 0x40, 0x08, 0xee, 0xfe, 0x6d, 0xd2, 0x94, - 0x4a, 0xff, 0x66, 0xab, 0x1a, 0xe0, 0xc0, 0x57, 0x79, 0x2f, 0x40, 0x4f, 0xac, 0x65, 0xe8, 0xb2, 0xb0, 0x51, 0x9e, - 0x23, 0xc4, 0xc7, 0xe1, 0x22, 0x82, 0x1b, 0x41, 0x8d, 0x49, 0x5c, 0xa2, 0xd5, 0x6a, 0xe1, 0xe3, 0xd6, 0xb4, 0x52, - 0x4c, 0x8f, 0xc9, 0x74, 0x50, 0x34, 0x1a, 0x5a, 0x79, 0x9d, 0x1a, 0xbc, 0x58, 0x20, 0x3c, 0x2e, 0xf7, 0x9a, 0x2b, - 0x37, 0x27, 0xf5, 0xae, 0xc2, 0x71, 0x5d, 0x09, 0xdc, 0xe0, 0x12, 0x69, 0xfd, 0xa2, 0x82, 0xd6, 0xf1, 0x84, 0x1c, - 0x85, 0x83, 0xa8, 0xff, 0x3f, 0x87, 0xa8, 0x1f, 0x46, 0x87, 0xe8, 0xc8, 0xd0, 0x92, 0x31, 0xea, 0x25, 0xa6, 0x8f, - 0xa5, 0xbe, 0xfd, 0x6c, 0x63, 0xad, 0x80, 0x8c, 0x05, 0xce, 0xe9, 0x8c, 0xc5, 0x13, 0xd8, 0xf5, 0x0e, 0x79, 0xe6, - 0x18, 0x90, 0x29, 0x9e, 0x58, 0xda, 0x12, 0x05, 0x7d, 0x41, 0xcb, 0xaf, 0x7e, 0xd0, 0xa7, 0xd5, 0xd7, 0xff, 0x0c, - 0xfa, 0x09, 0x8d, 0xaf, 0xf8, 0xda, 0x2a, 0xc9, 0x6b, 0x7d, 0x9c, 0xba, 0x3e, 0xd6, 0x66, 0x71, 0x3c, 0xe0, 0xa5, - 0x28, 0xdf, 0xd2, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0x94, 0x47, 0x8a, 0x4e, 0x00, 0xaa, 0xde, 0x22, 0xe4, - 0xbe, 0x6d, 0x80, 0x37, 0x65, 0xc0, 0x16, 0x87, 0xb4, 0x00, 0xcd, 0xc5, 0x45, 0x0b, 0x2d, 0x6b, 0x85, 0x2d, 0x67, - 0x55, 0xbf, 0x8b, 0x2f, 0x89, 0xf7, 0x18, 0xa8, 0xf2, 0xf9, 0xa2, 0x37, 0x6e, 0x34, 0x50, 0xee, 0xf0, 0x2b, 0x1d, - 0x8c, 0x87, 0xf8, 0x0e, 0x50, 0x08, 0xd7, 0x30, 0x0a, 0xd7, 0xe6, 0xd8, 0xb1, 0x73, 0x6c, 0x34, 0xc4, 0x1a, 0xf5, - 0xbc, 0xca, 0x0b, 0x5b, 0x79, 0xbd, 0x36, 0x90, 0xd9, 0xc4, 0xb8, 0x33, 0xa4, 0x53, 0xc0, 0x10, 0x8c, 0x10, 0xf2, - 0x8f, 0x40, 0x3b, 0x9b, 0x85, 0x46, 0xa1, 0xba, 0xde, 0xbd, 0x40, 0x51, 0xcd, 0xe9, 0x11, 0x02, 0x2c, 0xa0, 0x6a, - 0xa9, 0x46, 0x9e, 0x2a, 0x9c, 0x36, 0xda, 0x1a, 0xdd, 0x9b, 0xed, 0x5e, 0xbd, 0xb1, 0x87, 0x55, 0x63, 0x38, 0x6d, - 0x90, 0x69, 0xb5, 0xc3, 0xd7, 0xa2, 0xd1, 0x58, 0xd7, 0xef, 0x4b, 0xdd, 0x26, 0xae, 0xdd, 0x5f, 0x3c, 0xdd, 0x32, - 0xf1, 0x70, 0xa7, 0x6f, 0x75, 0xde, 0xca, 0x88, 0xe7, 0x39, 0x2b, 0xe0, 0x84, 0x25, 0x0a, 0xcb, 0xf5, 0xba, 0x3c, - 0xf5, 0x7f, 0x57, 0xc6, 0x66, 0x8c, 0x70, 0xa0, 0x43, 0x5a, 0x6a, 0xc3, 0x02, 0x17, 0x98, 0x6a, 0x2a, 0x42, 0x08, - 0xf9, 0xa0, 0x9c, 0x79, 0x8c, 0xd2, 0x24, 0x29, 0x21, 0xde, 0xd9, 0x1d, 0xe6, 0x84, 0x45, 0x37, 0x0f, 0xae, 0xc4, - 0x77, 0x45, 0xba, 0x81, 0x1c, 0xc6, 0xba, 0x58, 0x66, 0x09, 0x59, 0x46, 0xbe, 0x82, 0x9c, 0x53, 0x5e, 0xb0, 0x44, - 0x9a, 0x20, 0x3e, 0xe1, 0x05, 0xd3, 0x8c, 0xfb, 0x03, 0x27, 0x37, 0x26, 0x75, 0x4e, 0x33, 0xf1, 0xb5, 0x3f, 0x00, - 0xcd, 0x0c, 0x94, 0x43, 0x82, 0x6c, 0x15, 0xbb, 0x79, 0x70, 0xf9, 0x7a, 0x97, 0x0c, 0xbd, 0x5a, 0x59, 0xe9, 0x39, - 0x01, 0xd6, 0x07, 0x67, 0xd5, 0x50, 0x13, 0xfb, 0x23, 0x0e, 0x13, 0xcd, 0x44, 0x65, 0x21, 0x07, 0x64, 0xba, 0x79, - 0x70, 0xf9, 0x2e, 0xe4, 0x5a, 0x37, 0x85, 0xb0, 0x3f, 0xef, 0xb0, 0x20, 0x21, 0x25, 0x0c, 0x99, 0xc9, 0x97, 0x74, - 0xac, 0xf0, 0x4e, 0xf7, 0x98, 0xea, 0x4c, 0x10, 0x3b, 0x06, 0x72, 0x48, 0x12, 0x0b, 0x02, 0x92, 0x20, 0x9c, 0xd4, - 0xe4, 0x3a, 0xa2, 0xd7, 0x40, 0x77, 0x76, 0x0d, 0x8b, 0x11, 0x19, 0xf6, 0x10, 0xe1, 0x44, 0x77, 0xab, 0xd6, 0xe6, - 0x38, 0xc9, 0xe9, 0xa6, 0xa1, 0x5b, 0x25, 0xcf, 0xbe, 0x07, 0xc1, 0xcb, 0x7d, 0xbc, 0xb2, 0x6d, 0x97, 0x09, 0x4f, - 0x9c, 0x45, 0xda, 0xcd, 0x83, 0xcb, 0x5f, 0xad, 0x51, 0xda, 0x9c, 0x3a, 0xf2, 0xbf, 0x25, 0xa3, 0x5e, 0xfe, 0x1a, - 0x55, 0xb9, 0xba, 0xf0, 0xcd, 0x83, 0xcb, 0xdf, 0x77, 0x15, 0x83, 0xf4, 0xf5, 0xa2, 0x52, 0x12, 0xe8, 0xf1, 0x2d, - 0x59, 0x16, 0x2f, 0xed, 0x59, 0x11, 0xcb, 0x35, 0xd6, 0x27, 0x54, 0x9c, 0xaf, 0x4b, 0xdd, 0xca, 0x13, 0x2c, 0x88, - 0xbe, 0x4a, 0xaa, 0x2f, 0x9b, 0x45, 0x63, 0x2e, 0xf2, 0xeb, 0x44, 0xcc, 0xd9, 0x37, 0xee, 0x97, 0x9e, 0x2a, 0x14, - 0xf1, 0x19, 0x18, 0xe2, 0xe8, 0xb1, 0x4b, 0xbc, 0xdf, 0x42, 0xbd, 0x8d, 0xf3, 0x4c, 0x68, 0x44, 0x2d, 0xea, 0x87, - 0x0d, 0xa6, 0xa4, 0x85, 0x13, 0xd2, 0xc2, 0x19, 0xc9, 0x07, 0x2d, 0x73, 0x62, 0xf4, 0xb2, 0xb2, 0x69, 0x73, 0xee, - 0xc0, 0x76, 0xcf, 0xcc, 0xbe, 0x35, 0x87, 0xf2, 0xb4, 0x97, 0x69, 0xfd, 0xa5, 0x3e, 0xe8, 0xa7, 0x1a, 0x35, 0x9e, - 0xb0, 0xb0, 0xc0, 0x85, 0x6e, 0xf9, 0x9a, 0x8f, 0x32, 0xb0, 0x53, 0x81, 0x99, 0x61, 0x85, 0xe2, 0xb2, 0x6c, 0xdb, - 0x96, 0xcd, 0x22, 0xbd, 0x56, 0x05, 0xce, 0x22, 0x20, 0xe5, 0x38, 0xb3, 0x76, 0x3d, 0x72, 0xbb, 0xca, 0xe9, 0xc1, - 0x41, 0x68, 0x2b, 0xd1, 0xb0, 0x70, 0xf9, 0xd5, 0x0d, 0xe0, 0x7b, 0x43, 0x35, 0xa6, 0x48, 0x4f, 0xa0, 0xd1, 0x48, - 0x86, 0x6b, 0xba, 0x4f, 0x48, 0x98, 0xd5, 0xa1, 0xe8, 0x46, 0xaf, 0x99, 0xc1, 0x0d, 0x00, 0x34, 0x1a, 0xe5, 0x75, - 0xef, 0x06, 0xc4, 0x9e, 0x2a, 0x2c, 0xd6, 0x5f, 0xc3, 0xd2, 0x9a, 0xa8, 0xb5, 0x65, 0x87, 0xe5, 0x46, 0x81, 0xa4, - 0x8f, 0xbb, 0xd2, 0xcd, 0xc7, 0xdb, 0x1a, 0xba, 0xdc, 0x0b, 0x6b, 0x03, 0x81, 0xb5, 0xd5, 0x96, 0x2d, 0xe4, 0x48, - 0x5b, 0x07, 0xc5, 0xae, 0x10, 0x5c, 0x70, 0x41, 0xa1, 0xc6, 0xda, 0x62, 0xf9, 0x13, 0xb6, 0x6d, 0xce, 0x89, 0x73, - 0x64, 0xb5, 0x65, 0x7a, 0x18, 0x1a, 0x60, 0x9d, 0x12, 0x30, 0xcf, 0xc9, 0xcb, 0x6f, 0xa3, 0xfe, 0xa5, 0x87, 0xfa, - 0x8f, 0x09, 0xf3, 0xb6, 0x81, 0x59, 0x82, 0x48, 0x58, 0x05, 0x45, 0xee, 0xb2, 0xae, 0xe6, 0x04, 0xb4, 0x71, 0x75, - 0xa8, 0xe6, 0xfe, 0x15, 0xe5, 0x37, 0x28, 0x8b, 0xbf, 0x53, 0xb4, 0x3e, 0x13, 0xbb, 0xfb, 0xe4, 0xb0, 0xba, 0xa0, - 0x83, 0xae, 0x77, 0x29, 0x07, 0x7d, 0x52, 0x78, 0xf9, 0xfb, 0xf7, 0xef, 0x56, 0xaf, 0xe6, 0xdb, 0x3b, 0xd8, 0x33, - 0x2b, 0x85, 0x59, 0x7b, 0x1b, 0xb8, 0x6e, 0x64, 0x0a, 0xfd, 0x97, 0x77, 0xe2, 0x75, 0x2a, 0xb4, 0xb1, 0x19, 0xdd, - 0x71, 0x08, 0xa3, 0x6d, 0xb7, 0x75, 0x09, 0xe6, 0x35, 0x0b, 0x74, 0xc9, 0x18, 0xb7, 0xd2, 0xe2, 0x1b, 0x64, 0xe4, - 0x52, 0x17, 0x60, 0x79, 0xba, 0x3b, 0xfb, 0xf1, 0xda, 0xe2, 0x89, 0x19, 0x1a, 0x5a, 0x6a, 0x42, 0x68, 0xf0, 0x1e, - 0x30, 0xc7, 0x1c, 0x11, 0x00, 0xa2, 0x97, 0x1a, 0x52, 0x15, 0xc8, 0x82, 0xa0, 0x52, 0xe4, 0x3f, 0xdf, 0x27, 0xe4, - 0x65, 0xa5, 0xc8, 0x7c, 0x5b, 0x19, 0x73, 0x01, 0x62, 0xa0, 0x18, 0x2e, 0x12, 0xca, 0x04, 0x73, 0x19, 0xfa, 0x41, - 0xb9, 0xf2, 0x5a, 0xda, 0x8c, 0x2a, 0x6e, 0xdc, 0xbb, 0x29, 0xd5, 0x2a, 0x3e, 0x93, 0xef, 0x20, 0xb1, 0x91, 0xfb, - 0x00, 0x72, 0x19, 0xd5, 0x83, 0x84, 0xef, 0x77, 0xba, 0xb4, 0x6b, 0x77, 0xfd, 0x65, 0xd3, 0x22, 0x66, 0x63, 0x5d, - 0x22, 0x9e, 0x4b, 0x56, 0xa8, 0xc7, 0x6c, 0x2c, 0x0a, 0xb8, 0xff, 0x28, 0xc1, 0x82, 0xd6, 0x0f, 0x3c, 0x1d, 0xa0, - 0x9e, 0xa0, 0x77, 0xe9, 0xb0, 0x31, 0x43, 0xfd, 0xeb, 0x8b, 0xbe, 0x03, 0xbf, 0xd9, 0xac, 0xf5, 0xf2, 0xe0, 0xe0, - 0x2b, 0xab, 0x00, 0x65, 0x87, 0xa9, 0x87, 0xe1, 0x11, 0x2f, 0xc3, 0xe5, 0xd8, 0x9b, 0xe1, 0x07, 0x61, 0xa5, 0x32, - 0x70, 0x84, 0xc3, 0x27, 0x42, 0xcf, 0x89, 0x5a, 0x4f, 0x36, 0xe9, 0xbd, 0xd5, 0x66, 0x48, 0x5f, 0xac, 0x01, 0x72, - 0x0f, 0x72, 0xb9, 0x51, 0x32, 0xe5, 0x95, 0xad, 0x6d, 0x39, 0x88, 0x2b, 0x00, 0x57, 0x98, 0x83, 0x90, 0xe2, 0xa1, - 0x61, 0xbe, 0x53, 0x68, 0x79, 0x2e, 0x80, 0xfd, 0xc7, 0x79, 0x04, 0x22, 0x2d, 0xaa, 0x6d, 0x5c, 0x84, 0x70, 0xae, - 0x25, 0x1e, 0xcf, 0x38, 0xe1, 0xf2, 0xf9, 0x2e, 0x0d, 0xb5, 0x43, 0x6d, 0xa6, 0xcf, 0x20, 0x28, 0x21, 0x50, 0x59, - 0x21, 0xfa, 0x1a, 0x4a, 0xcb, 0xcd, 0x95, 0xf7, 0x70, 0xec, 0x76, 0x2f, 0xa7, 0xa1, 0xb9, 0xdb, 0x82, 0xe3, 0xa3, - 0x88, 0x16, 0x61, 0xad, 0xeb, 0x5e, 0xa1, 0xab, 0x61, 0x0b, 0x3a, 0xea, 0xc3, 0xa9, 0xd0, 0xf7, 0x84, 0x57, 0x15, - 0x49, 0xfd, 0x64, 0x2d, 0xa0, 0x1c, 0x31, 0xac, 0x4c, 0x53, 0xbc, 0xf9, 0x7f, 0xb2, 0xe6, 0x6b, 0xe5, 0x31, 0xc1, - 0xf4, 0x30, 0x6e, 0xcd, 0x2a, 0xb0, 0x35, 0xe0, 0xd8, 0xf2, 0x2f, 0xe1, 0x2d, 0xaa, 0x53, 0x8a, 0xeb, 0x4e, 0x3d, - 0x26, 0xe0, 0x2d, 0x58, 0xcf, 0x6c, 0x6e, 0xfd, 0xe7, 0xfa, 0x60, 0x94, 0x38, 0xaf, 0x11, 0x78, 0xa1, 0x09, 0x3c, - 0x02, 0xc6, 0xcd, 0x99, 0x96, 0xf7, 0xad, 0x11, 0x8d, 0x74, 0x27, 0x9e, 0xc5, 0x33, 0xc3, 0x72, 0x6f, 0x7d, 0x6c, - 0xac, 0x48, 0x2c, 0x09, 0xd8, 0x16, 0x61, 0x4b, 0xe4, 0x05, 0xc2, 0x79, 0xa3, 0xd1, 0xcb, 0xcf, 0x59, 0xa5, 0x55, - 0xa9, 0x86, 0x29, 0xe1, 0x96, 0x18, 0xf0, 0xbe, 0x76, 0xa2, 0xe6, 0x08, 0x97, 0x66, 0xee, 0x39, 0xa8, 0xef, 0x2f, - 0xdf, 0x86, 0x3e, 0x7d, 0xf3, 0xcb, 0x96, 0x17, 0xb1, 0x30, 0xa5, 0xb0, 0xba, 0xc3, 0x79, 0xf3, 0x7d, 0xb3, 0x11, - 0x18, 0xf7, 0x7e, 0x1b, 0x83, 0x8d, 0x1b, 0xea, 0x29, 0x43, 0x1a, 0xca, 0x4d, 0xd8, 0x43, 0x95, 0xbd, 0xa3, 0xdf, - 0x59, 0x4f, 0x55, 0xd2, 0xae, 0x22, 0xf9, 0x7a, 0x2d, 0x59, 0x65, 0x34, 0xb0, 0x61, 0xd8, 0xa9, 0x8f, 0x99, 0x6d, - 0x05, 0xfe, 0xd5, 0x9c, 0x28, 0xec, 0x21, 0xeb, 0x9b, 0x6f, 0x5d, 0xa7, 0x54, 0xc3, 0x84, 0xed, 0x6d, 0xcf, 0xc7, - 0x2b, 0xbe, 0xeb, 0x7c, 0xc4, 0xc2, 0x6e, 0x7d, 0x7d, 0x36, 0xb6, 0xff, 0x8d, 0xb3, 0xd1, 0xaa, 0xed, 0xdd, 0xf1, - 0x08, 0xdc, 0x49, 0xed, 0x78, 0xcc, 0xeb, 0xc7, 0xa3, 0xc0, 0xee, 0xf4, 0xbe, 0xe8, 0xac, 0x56, 0x72, 0xd0, 0x02, - 0xb5, 0x53, 0x10, 0xc0, 0xcf, 0xb6, 0xf9, 0xe9, 0x91, 0x64, 0xa3, 0x43, 0x0e, 0xcb, 0xf3, 0xbe, 0x8d, 0x22, 0x30, - 0xa0, 0x0e, 0xb5, 0xad, 0x97, 0x46, 0x6c, 0x8b, 0x43, 0x16, 0xcb, 0x89, 0x2c, 0xaf, 0xae, 0x60, 0xc4, 0xfa, 0xd8, - 0xb0, 0x02, 0x66, 0xb8, 0xd3, 0xaa, 0xd0, 0x89, 0x9f, 0xff, 0x9a, 0x39, 0xad, 0x1d, 0x31, 0x86, 0x93, 0xa8, 0x59, - 0x31, 0xd8, 0x11, 0x58, 0x86, 0x71, 0x5f, 0x4b, 0xa8, 0xd5, 0xa9, 0x8e, 0x6a, 0x47, 0x12, 0x6e, 0x81, 0xda, 0x6d, - 0x5f, 0x9f, 0x4b, 0xab, 0xd5, 0xce, 0x83, 0x05, 0x17, 0x1e, 0x6e, 0x3f, 0x27, 0xaa, 0x46, 0x52, 0x28, 0xb1, 0x12, - 0x14, 0xce, 0x34, 0xaa, 0x2a, 0x22, 0x06, 0xad, 0x21, 0xf0, 0xa4, 0xbd, 0xe4, 0x5c, 0x54, 0x42, 0x72, 0xd2, 0x68, - 0xa0, 0xac, 0xec, 0x98, 0x0e, 0x64, 0x23, 0x19, 0x62, 0x86, 0x13, 0x23, 0xb0, 0xc0, 0xe9, 0x15, 0x66, 0x55, 0xd7, - 0x83, 0x64, 0x88, 0x70, 0xb1, 0x5a, 0x85, 0x66, 0x68, 0x19, 0x5a, 0xad, 0x32, 0x7f, 0x68, 0x3a, 0x1f, 0x2a, 0xbe, - 0xec, 0x2b, 0xf2, 0x52, 0x9f, 0x87, 0x2f, 0x61, 0x90, 0x0d, 0x12, 0x66, 0x56, 0x25, 0x98, 0x81, 0xe6, 0xaa, 0x21, - 0x06, 0x49, 0xa3, 0x3d, 0xf4, 0x68, 0xd8, 0x20, 0x19, 0x92, 0x6c, 0x0d, 0x96, 0xb3, 0xb9, 0x3d, 0x30, 0xff, 0x82, - 0x83, 0xed, 0x2f, 0x7d, 0xce, 0x98, 0x06, 0xfd, 0x35, 0xd9, 0x54, 0x19, 0x94, 0x78, 0x65, 0x17, 0xd7, 0x95, 0xab, - 0x19, 0x58, 0x94, 0x85, 0xb0, 0xbd, 0x66, 0xee, 0x83, 0xf0, 0x5f, 0x62, 0xbb, 0xa0, 0xa5, 0x11, 0xf7, 0x06, 0xe2, - 0x3b, 0xdb, 0xed, 0x28, 0x8a, 0x68, 0x31, 0xd1, 0x57, 0x22, 0x8e, 0x12, 0xeb, 0x3d, 0x70, 0x6c, 0xc7, 0xe9, 0xf5, - 0x3c, 0x28, 0x3b, 0x1b, 0x12, 0x33, 0x7e, 0xc7, 0xec, 0x38, 0xc7, 0x95, 0x82, 0xee, 0xd6, 0x45, 0x98, 0xc1, 0xd0, - 0xff, 0xe5, 0xc1, 0x9c, 0xd8, 0xc1, 0x18, 0x34, 0xd9, 0x80, 0xdb, 0x37, 0xe0, 0x51, 0xd0, 0x0d, 0xb8, 0x7d, 0x1b, - 0xbe, 0x0e, 0x5a, 0xc9, 0x37, 0x07, 0xe8, 0x91, 0x09, 0x33, 0xd2, 0x2a, 0xc1, 0x1b, 0x66, 0x77, 0x93, 0x23, 0x33, - 0x64, 0x15, 0x0e, 0x57, 0x45, 0x42, 0xb9, 0xb1, 0x17, 0x2a, 0x26, 0xd5, 0xe3, 0xfe, 0x65, 0xfc, 0x12, 0xf9, 0x4a, - 0x83, 0xba, 0x71, 0x0c, 0x60, 0x95, 0xd5, 0xd6, 0xbf, 0x3c, 0x38, 0x00, 0xf3, 0x68, 0x60, 0xed, 0xa2, 0x84, 0xce, - 0xd5, 0xa2, 0x00, 0xfe, 0x2a, 0x77, 0xbf, 0x21, 0x19, 0xdc, 0x4e, 0x74, 0x1a, 0xfc, 0x80, 0x84, 0x39, 0x95, 0x92, - 0x7f, 0x35, 0x69, 0xf6, 0x37, 0x2e, 0x88, 0xc3, 0xe8, 0xdc, 0x70, 0x8a, 0x02, 0xf5, 0x84, 0x45, 0xd7, 0x3a, 0xe4, - 0x9e, 0x7e, 0x65, 0xb9, 0x7a, 0xc9, 0xa5, 0x62, 0x39, 0x00, 0xa0, 0x42, 0x3c, 0x98, 0x52, 0x8e, 0x60, 0xeb, 0xd6, - 0x6a, 0xd1, 0x34, 0xfd, 0x6e, 0x15, 0x55, 0x67, 0x8b, 0xa6, 0x34, 0x4f, 0x33, 0xd3, 0x89, 0x6f, 0x33, 0xe9, 0xec, - 0x44, 0xcb, 0x92, 0xbe, 0xc5, 0x4e, 0xc5, 0x7e, 0x68, 0x5a, 0x1f, 0x4a, 0xe2, 0xce, 0x05, 0x77, 0x96, 0x7e, 0x97, - 0x8f, 0x81, 0x2b, 0xf5, 0x6f, 0xac, 0x82, 0x3f, 0x13, 0xac, 0x3c, 0xf2, 0x1a, 0xd5, 0xc7, 0xe9, 0x50, 0x27, 0xdb, - 0x52, 0x2e, 0x94, 0x46, 0x61, 0x1b, 0x27, 0x85, 0xc6, 0x94, 0xd3, 0x6f, 0x4b, 0x5c, 0xbf, 0xba, 0x63, 0xc4, 0x1d, - 0x1d, 0xf2, 0xdf, 0xa5, 0xd2, 0x68, 0x59, 0x22, 0x18, 0x72, 0x3b, 0xf2, 0x67, 0x09, 0x57, 0xb1, 0x19, 0x57, 0xcf, - 0xd5, 0x2c, 0xdb, 0xf0, 0xc4, 0xe9, 0xfd, 0x5c, 0x5e, 0x23, 0xff, 0x2c, 0xc3, 0x5b, 0x86, 0x9f, 0x30, 0xb8, 0x37, - 0x7e, 0xc6, 0xbd, 0x2a, 0xdb, 0xf7, 0xc5, 0xcf, 0xbc, 0xfb, 0xe2, 0x67, 0x3c, 0xde, 0x2e, 0xea, 0xdd, 0x13, 0x77, - 0xa2, 0xb3, 0xa8, 0x15, 0x38, 0x3e, 0x6a, 0x4a, 0x2b, 0xff, 0x4a, 0xb3, 0x35, 0x70, 0x65, 0x13, 0x07, 0xc6, 0x79, - 0x75, 0x11, 0x8a, 0x59, 0x73, 0x46, 0xc3, 0xe1, 0x7f, 0x6b, 0x9d, 0xec, 0xc9, 0x23, 0x8c, 0x14, 0xf2, 0x86, 0x16, - 0xea, 0x01, 0x6c, 0xb8, 0x62, 0xcb, 0x07, 0x90, 0x12, 0x50, 0xb6, 0xfd, 0x7b, 0x5d, 0x54, 0x8e, 0x07, 0xfd, 0xdc, - 0x38, 0x1f, 0xf9, 0xed, 0x93, 0xa2, 0xe4, 0xea, 0xea, 0x42, 0xc8, 0x9d, 0xd6, 0x12, 0x20, 0x4c, 0x9d, 0x6b, 0x1e, - 0xb3, 0x34, 0x99, 0xc5, 0xcb, 0x75, 0xa9, 0x3a, 0x28, 0x0c, 0x57, 0xc7, 0x11, 0x2e, 0xd6, 0xfa, 0x06, 0xfd, 0x1f, - 0x8e, 0xff, 0xe2, 0x96, 0x46, 0x7e, 0x2a, 0x29, 0xd0, 0xe3, 0xdd, 0xbe, 0x36, 0x3b, 0x48, 0xa4, 0x99, 0x43, 0x69, - 0x29, 0x00, 0x58, 0xad, 0xf1, 0x75, 0xed, 0x70, 0xea, 0x89, 0xb0, 0xb3, 0xf9, 0xa6, 0x21, 0x2c, 0x66, 0xa5, 0x05, - 0x8f, 0xee, 0x66, 0x87, 0xe5, 0xa8, 0x93, 0xc5, 0x55, 0xb9, 0xc7, 0x6a, 0xfd, 0xa2, 0x6f, 0x80, 0xb2, 0x32, 0x44, - 0x5b, 0xad, 0xc2, 0x3a, 0xbc, 0x89, 0xf4, 0xae, 0x41, 0x10, 0x96, 0x9e, 0x01, 0x47, 0x8d, 0xf1, 0x36, 0x75, 0x42, - 0xb4, 0x69, 0xbf, 0xe4, 0x58, 0xf7, 0xda, 0x38, 0x7c, 0x45, 0x83, 0xa9, 0xee, 0x6b, 0x1e, 0xb0, 0x99, 0x5d, 0xd9, - 0x91, 0x07, 0xa1, 0x29, 0x75, 0xc6, 0xb9, 0x95, 0x15, 0xed, 0x0e, 0xf8, 0xa2, 0xef, 0x98, 0xe7, 0x5a, 0xd0, 0x6d, - 0xe7, 0x7b, 0xb6, 0x4d, 0x4f, 0xc4, 0xb7, 0x6c, 0x9b, 0x6a, 0x9c, 0xf0, 0x7e, 0x0b, 0x7d, 0xdf, 0x10, 0xd6, 0xf4, - 0xb5, 0xbb, 0xc8, 0xff, 0x42, 0x77, 0x6d, 0x40, 0x4f, 0x03, 0x66, 0x47, 0x63, 0x3e, 0xa8, 0xf5, 0xfa, 0x53, 0xe9, - 0xbf, 0xa0, 0x6d, 0x85, 0x3e, 0x99, 0x5d, 0x60, 0xc5, 0x4a, 0xed, 0x10, 0x1c, 0xfe, 0xc3, 0xc9, 0x24, 0x13, 0x23, - 0x9a, 0xbd, 0x83, 0x1e, 0xab, 0xdc, 0xe7, 0xf7, 0x69, 0x41, 0x15, 0xb3, 0xb4, 0xa6, 0x1a, 0xc5, 0x3f, 0xdc, 0x1b, - 0xc6, 0x3f, 0xdc, 0x50, 0xee, 0xaa, 0x05, 0xbc, 0x7c, 0x59, 0x36, 0x11, 0x7f, 0x5a, 0x97, 0xfe, 0x56, 0xf9, 0xee, - 0x5e, 0x36, 0x49, 0x9a, 0xca, 0xcb, 0xd9, 0xe6, 0xe1, 0x66, 0x53, 0x61, 0xf8, 0xd7, 0x37, 0x06, 0xbb, 0x4d, 0xe6, - 0xfe, 0xf2, 0xc8, 0xdc, 0x5f, 0x3c, 0xfe, 0x6e, 0x2d, 0x8f, 0xe2, 0x1d, 0x47, 0xc7, 0xda, 0x32, 0xc6, 0x8c, 0xfa, - 0xad, 0x02, 0x83, 0x06, 0x45, 0x2e, 0x3c, 0x6f, 0x87, 0xea, 0xf4, 0x72, 0xf6, 0x47, 0x61, 0xb2, 0x90, 0x4a, 0xcc, - 0x6c, 0xa3, 0xd2, 0xfa, 0x38, 0xe9, 0x4c, 0x50, 0x60, 0xeb, 0x3b, 0xfc, 0xb8, 0xee, 0x46, 0xb6, 0xfc, 0xc2, 0xf3, - 0x34, 0xce, 0xb1, 0x3d, 0x5b, 0x64, 0x2c, 0xd6, 0xc4, 0x99, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0xcf, 0xb9, 0x9c, 0xb2, - 0x22, 0x2c, 0xd0, 0xf2, 0x5b, 0x9d, 0x15, 0x70, 0x9b, 0x63, 0x3a, 0xc3, 0x69, 0x69, 0x39, 0xa0, 0x22, 0x68, 0x0d, - 0x74, 0x46, 0x33, 0xa6, 0xa6, 0x22, 0x05, 0xc3, 0x97, 0x28, 0x2d, 0xdd, 0xa9, 0x0e, 0x0e, 0xf6, 0xc3, 0x40, 0xeb, - 0x2f, 0xc0, 0x07, 0xdd, 0xcf, 0x41, 0xfd, 0x25, 0x38, 0x06, 0x55, 0x5d, 0x33, 0xb4, 0x64, 0x9b, 0x3e, 0x34, 0x2a, - 0xfa, 0xc2, 0xee, 0x31, 0x47, 0xeb, 0x75, 0x6c, 0x46, 0x1d, 0x8c, 0x39, 0xcb, 0xd2, 0x00, 0x7f, 0x61, 0xf7, 0x71, - 0xe9, 0xb6, 0xae, 0xbd, 0xac, 0xf5, 0x22, 0x06, 0xe2, 0x36, 0x0f, 0x70, 0xd5, 0x49, 0xbc, 0x5c, 0x63, 0x51, 0xf0, - 0x09, 0xe0, 0xe8, 0x2f, 0xec, 0x3e, 0xb6, 0xed, 0x79, 0xae, 0x82, 0x68, 0xe9, 0x40, 0x1f, 0x79, 0xc9, 0xfe, 0x32, - 0x58, 0x81, 0x63, 0xa0, 0xeb, 0x0e, 0x49, 0xad, 0x5c, 0x25, 0x42, 0x22, 0xb4, 0xfe, 0x77, 0xa7, 0x82, 0x17, 0xfe, - 0x39, 0xa7, 0x6a, 0x16, 0xb7, 0x1b, 0x95, 0x18, 0x54, 0xa8, 0x2c, 0x48, 0x3e, 0x86, 0xdc, 0xed, 0x3e, 0xeb, 0xfd, - 0xe0, 0xe9, 0xcc, 0x16, 0xd4, 0x36, 0x1a, 0xa7, 0xfa, 0x17, 0xaa, 0xee, 0xa0, 0x66, 0xaa, 0xaa, 0xb8, 0xf7, 0x31, - 0x04, 0xc0, 0x83, 0xb5, 0x0c, 0xd5, 0x0e, 0xa1, 0x6b, 0x67, 0xa6, 0x3a, 0xa6, 0x24, 0x5c, 0xba, 0x39, 0xc4, 0xdc, - 0x07, 0xa3, 0x5a, 0x03, 0x1a, 0x5a, 0x04, 0x33, 0x96, 0x87, 0x7c, 0x1c, 0xca, 0xad, 0x33, 0x54, 0xe8, 0x33, 0x34, - 0xf2, 0x40, 0xfe, 0x8d, 0x33, 0x93, 0x69, 0x68, 0x68, 0xde, 0x52, 0x1f, 0x80, 0x76, 0x75, 0x2d, 0x0e, 0xf9, 0x2b, - 0x5a, 0x3a, 0xef, 0x99, 0x45, 0x17, 0xb5, 0x61, 0x85, 0xba, 0x1d, 0xb4, 0x8e, 0x61, 0x4a, 0xcc, 0x14, 0x58, 0x3b, - 0xbd, 0x0f, 0x77, 0x76, 0xb5, 0x61, 0x11, 0xb9, 0x69, 0x11, 0x07, 0x93, 0x90, 0xa2, 0x25, 0x0f, 0x29, 0x16, 0x60, - 0x07, 0x59, 0xac, 0xcb, 0xf1, 0x33, 0x7f, 0x39, 0x6a, 0x56, 0xd2, 0xbb, 0x1d, 0x0c, 0x81, 0xcb, 0x57, 0x60, 0x1b, - 0x8a, 0xb9, 0x23, 0x2c, 0x3c, 0xd4, 0x9e, 0x7e, 0xde, 0xba, 0xcd, 0xcd, 0x82, 0xb8, 0x15, 0x18, 0xd3, 0x70, 0xe9, - 0xcd, 0xc2, 0x77, 0x2a, 0xb7, 0x0e, 0x87, 0xf6, 0x9a, 0xb0, 0x32, 0x5e, 0x0d, 0x73, 0xb2, 0x71, 0xf4, 0x7c, 0xdf, - 0xc6, 0xf3, 0xef, 0x05, 0x2b, 0xee, 0xaf, 0x19, 0xd8, 0x58, 0x0b, 0x70, 0x37, 0xae, 0x96, 0xa1, 0x32, 0x90, 0xef, - 0x0b, 0xcd, 0xba, 0xac, 0xf1, 0x77, 0xa3, 0x62, 0xac, 0xf5, 0x3d, 0xa5, 0xa7, 0xad, 0x31, 0xdb, 0x85, 0x7d, 0xd3, - 0x75, 0x93, 0xf5, 0xb4, 0x22, 0xae, 0x82, 0xb4, 0xbd, 0x5b, 0xc0, 0x85, 0xef, 0x0f, 0x3b, 0xc8, 0x87, 0x9b, 0xaa, - 0x1b, 0x48, 0x82, 0x6b, 0x3f, 0xf1, 0xed, 0xa9, 0xee, 0xb2, 0xd6, 0xfd, 0xf6, 0x54, 0x6b, 0x97, 0x85, 0xda, 0x90, - 0x08, 0xdb, 0x7e, 0x4a, 0xff, 0x69, 0xb9, 0x5e, 0xa3, 0x35, 0x0c, 0xef, 0x3d, 0xef, 0x85, 0xe1, 0x7b, 0x67, 0xa1, - 0x18, 0xc1, 0x45, 0xee, 0x75, 0x26, 0x1c, 0x21, 0xaf, 0x46, 0xf0, 0x9e, 0x6f, 0x0d, 0xe1, 0x3d, 0xf7, 0x9c, 0x5e, - 0x41, 0x6a, 0x9a, 0xe4, 0x2c, 0x75, 0xf4, 0x13, 0x19, 0x24, 0xd4, 0x7c, 0xdc, 0x6b, 0x4e, 0xb8, 0xfa, 0x1c, 0x03, - 0xff, 0x85, 0x47, 0x0b, 0xa5, 0x44, 0x8e, 0x79, 0x3e, 0x5f, 0x28, 0x2c, 0xf5, 0xe8, 0x97, 0x63, 0x91, 0xab, 0xe6, - 0x98, 0xce, 0x78, 0x76, 0x1f, 0x2f, 0x78, 0x73, 0x26, 0x72, 0x21, 0xe7, 0x34, 0x61, 0x58, 0xde, 0x4b, 0xc5, 0x66, - 0xcd, 0x05, 0xc7, 0xcf, 0x59, 0xf6, 0x95, 0x29, 0x9e, 0x50, 0xfc, 0x56, 0x8c, 0x84, 0x12, 0xf8, 0xf5, 0xdd, 0xfd, - 0x84, 0xe5, 0xf8, 0xf7, 0xd1, 0x22, 0x57, 0x0b, 0x2c, 0x69, 0x2e, 0x9b, 0x92, 0x15, 0x7c, 0xdc, 0x6b, 0x36, 0xe7, - 0x05, 0x9f, 0xd1, 0xe2, 0xbe, 0x99, 0x88, 0x4c, 0x14, 0xf1, 0x7f, 0xb5, 0x8e, 0xe9, 0xa3, 0xf1, 0x49, 0x4f, 0x15, - 0x34, 0x97, 0x1c, 0x16, 0x26, 0xa6, 0x59, 0xb6, 0x77, 0xdc, 0x6d, 0xcd, 0xe4, 0xbe, 0xb9, 0xf0, 0xa3, 0xb9, 0x5a, - 0x7f, 0xc6, 0x1f, 0x04, 0x8c, 0x32, 0x1a, 0xa9, 0xdc, 0x0e, 0x72, 0x99, 0x2c, 0x0a, 0x29, 0x8a, 0x78, 0x2e, 0x78, - 0xae, 0x58, 0xd1, 0x1b, 0x89, 0x22, 0x65, 0x45, 0xb3, 0xa0, 0x29, 0x5f, 0xc8, 0xf8, 0x64, 0x7e, 0xd7, 0xab, 0xf7, - 0x60, 0xf2, 0xe3, 0x5c, 0xe4, 0xac, 0x07, 0xfc, 0xc6, 0xa4, 0x10, 0x8b, 0x3c, 0xb5, 0xc3, 0x58, 0xe4, 0x92, 0xa9, - 0xde, 0x9c, 0xa6, 0x60, 0x07, 0x1c, 0x9f, 0xcd, 0xef, 0x7a, 0x7a, 0xd6, 0xb7, 0x8c, 0x4f, 0xa6, 0x2a, 0xee, 0xb6, - 0x5a, 0xe6, 0x5b, 0xf2, 0x7f, 0x58, 0xdc, 0xee, 0x44, 0x9d, 0xee, 0xfc, 0x0e, 0x38, 0x78, 0xc5, 0x8a, 0x26, 0xc0, - 0x02, 0x2a, 0xb5, 0xa3, 0xd6, 0xa3, 0xe3, 0x87, 0x90, 0x01, 0x36, 0x0e, 0x4d, 0x3d, 0x21, 0x30, 0x76, 0x8f, 0x17, - 0xf3, 0x39, 0x2b, 0xc0, 0x8b, 0xbe, 0x37, 0xa3, 0xc5, 0x84, 0xe7, 0xcd, 0x42, 0x37, 0xda, 0x3c, 0x9b, 0xdf, 0xad, - 0x61, 0x3e, 0xb1, 0x31, 0x5b, 0xb5, 0xd3, 0xb2, 0x5f, 0x4b, 0x6f, 0x88, 0x3a, 0x26, 0x4d, 0x5c, 0x4c, 0x46, 0x34, - 0x6c, 0x77, 0x1e, 0x62, 0xf7, 0xbf, 0xa8, 0x83, 0x3c, 0xb0, 0x35, 0xd3, 0x45, 0xa1, 0x6f, 0x51, 0xe3, 0xb6, 0x34, - 0xcd, 0x4e, 0xc5, 0x57, 0x56, 0xb8, 0x56, 0xf5, 0xc7, 0x72, 0x6b, 0xde, 0xff, 0x49, 0xa3, 0x9f, 0xf1, 0x84, 0xc2, - 0x1a, 0x68, 0xe4, 0x18, 0x68, 0x79, 0x10, 0x66, 0x3a, 0x5c, 0xde, 0xf2, 0x54, 0x4d, 0xe3, 0x76, 0xab, 0xf5, 0x43, - 0xb5, 0x62, 0xbd, 0xa9, 0x01, 0x5d, 0xbb, 0x60, 0xb3, 0xda, 0x3a, 0xce, 0x68, 0x89, 0x6d, 0xcb, 0xb9, 0xb0, 0x4b, - 0x5e, 0xb0, 0x4c, 0x47, 0x93, 0x59, 0x5b, 0x94, 0xdb, 0x1a, 0x27, 0xcf, 0xa7, 0xac, 0xe0, 0xaa, 0x57, 0xff, 0xaa, - 0x3a, 0xde, 0x5e, 0xfd, 0xb5, 0x91, 0x43, 0x97, 0xa6, 0x86, 0xbd, 0xf4, 0xbc, 0x82, 0x8f, 0xed, 0xd5, 0xff, 0x4a, - 0x8b, 0x70, 0x03, 0x31, 0xb1, 0x5f, 0x03, 0xad, 0xbd, 0x39, 0x17, 0x60, 0x92, 0x39, 0xc4, 0xdf, 0x80, 0x42, 0x42, - 0xb3, 0x24, 0x84, 0x11, 0xed, 0x35, 0xf7, 0x8e, 0x0b, 0x36, 0x43, 0x0e, 0x10, 0xd1, 0xc3, 0x6e, 0xc1, 0x66, 0xeb, - 0x48, 0x57, 0x5f, 0x6a, 0x14, 0xa1, 0x19, 0x9f, 0xe4, 0x71, 0xc2, 0x00, 0x7d, 0xd7, 0x11, 0xcb, 0x15, 0x57, 0xf7, - 0xcd, 0x42, 0xdc, 0x2e, 0x53, 0x2e, 0xe7, 0x19, 0xbd, 0x8f, 0xc7, 0x19, 0xbb, 0xeb, 0xe9, 0x52, 0x4d, 0xae, 0xd8, - 0x4c, 0xda, 0xb2, 0x3d, 0x48, 0x6f, 0xa6, 0xc6, 0x6c, 0x02, 0xa0, 0x27, 0x6e, 0x37, 0xf7, 0x4f, 0x74, 0x2c, 0xf7, - 0x18, 0x95, 0xac, 0x29, 0x16, 0x6a, 0xaf, 0x25, 0x7b, 0x33, 0x9e, 0x37, 0xed, 0x40, 0x4e, 0x5a, 0xf3, 0xbb, 0xde, - 0x36, 0xe4, 0xbd, 0xfe, 0x23, 0x76, 0x37, 0xa7, 0x79, 0xca, 0xd2, 0xa5, 0x57, 0xad, 0x03, 0xf5, 0xfc, 0x52, 0x71, - 0xae, 0xa6, 0x4d, 0x6d, 0xeb, 0x15, 0x76, 0x72, 0xf4, 0x0d, 0xd4, 0x7a, 0xd4, 0xc2, 0xe6, 0xff, 0xa3, 0x36, 0xf2, - 0x2b, 0xef, 0x41, 0xd8, 0x25, 0x3e, 0xbe, 0x6f, 0xc2, 0xdf, 0x25, 0xf8, 0x16, 0xf1, 0x84, 0x66, 0x16, 0x22, 0x33, - 0x9e, 0xa6, 0x59, 0x6d, 0x44, 0x17, 0x5e, 0x67, 0x6d, 0xb4, 0x84, 0xf9, 0xc7, 0xad, 0xbd, 0xd6, 0x9e, 0x9e, 0x8b, - 0xdd, 0xe6, 0x27, 0x27, 0x0f, 0x8f, 0x1f, 0xb1, 0x5e, 0xc6, 0x73, 0x56, 0x9b, 0xea, 0x77, 0x41, 0xed, 0x37, 0xdc, - 0xb1, 0x0d, 0xb7, 0xf7, 0xda, 0x7b, 0x27, 0xad, 0x1f, 0xdc, 0x6e, 0xcd, 0xd8, 0x58, 0xc5, 0xed, 0xd3, 0xf9, 0x5d, - 0x7d, 0xfb, 0x9e, 0xb9, 0xa6, 0x6f, 0x0b, 0x3a, 0x8f, 0x73, 0x01, 0x7f, 0x7a, 0xb0, 0xc9, 0xc6, 0x99, 0xb8, 0x8d, - 0xa7, 0x3c, 0x4d, 0x59, 0x6e, 0x0a, 0x94, 0x89, 0x2c, 0xcb, 0xf8, 0x5c, 0x72, 0xb3, 0x1a, 0x16, 0x77, 0xbb, 0x1b, - 0x50, 0xf5, 0x07, 0x74, 0xec, 0x0d, 0xa8, 0x5b, 0x0d, 0xa8, 0xea, 0xdf, 0x1f, 0x61, 0x67, 0x63, 0xae, 0xba, 0x54, - 0xaf, 0x86, 0x49, 0x7f, 0x2d, 0xa4, 0x02, 0x98, 0x97, 0x46, 0x1a, 0x40, 0xc5, 0x9b, 0x23, 0xa6, 0x6e, 0x19, 0xcb, - 0xbf, 0x3d, 0x88, 0x8b, 0x58, 0xe4, 0xd9, 0xbd, 0xf9, 0x5c, 0xfa, 0x5d, 0xd2, 0x85, 0x12, 0xeb, 0x68, 0xc4, 0x73, - 0x5a, 0xdc, 0xdf, 0x48, 0x96, 0x4b, 0x51, 0xdc, 0x88, 0xf1, 0x78, 0xf9, 0x2d, 0xd2, 0xf2, 0x10, 0xad, 0x23, 0xc9, - 0xf3, 0x49, 0xc6, 0x0c, 0x51, 0xd2, 0x88, 0x60, 0x89, 0xb9, 0x69, 0x57, 0x37, 0x59, 0x1b, 0xb4, 0xbf, 0xf3, 0x74, - 0xbb, 0xc3, 0x38, 0x6e, 0xde, 0xb2, 0xd1, 0x17, 0xae, 0x0c, 0x9e, 0x35, 0xe5, 0x2d, 0x78, 0xbc, 0xe8, 0x65, 0x98, - 0xb3, 0x62, 0xe9, 0x68, 0x78, 0xcb, 0xa3, 0x3a, 0x51, 0x92, 0xf1, 0x19, 0x55, 0xcc, 0xa3, 0x54, 0x65, 0x27, 0x93, - 0x82, 0xa7, 0xdb, 0x38, 0xd2, 0x83, 0xe4, 0xa6, 0x33, 0xa8, 0x82, 0x9e, 0x16, 0xb3, 0x5c, 0xc6, 0x05, 0x9b, 0x33, - 0xaa, 0xc2, 0x63, 0xdc, 0x1e, 0x17, 0xa8, 0x37, 0xa1, 0xf3, 0x18, 0xf0, 0xc2, 0x75, 0xd9, 0x86, 0x25, 0xd8, 0xde, - 0xae, 0xeb, 0xcf, 0xf8, 0x8b, 0xd4, 0x87, 0x97, 0xa2, 0xa3, 0x26, 0x84, 0x1f, 0x63, 0x45, 0xb9, 0xc5, 0x79, 0xae, - 0x11, 0x56, 0xaf, 0xcf, 0xe6, 0x26, 0xf5, 0x8f, 0xa0, 0x93, 0x56, 0xcb, 0xf5, 0xd3, 0x34, 0x75, 0xe2, 0x76, 0xd4, - 0x65, 0xb3, 0x5d, 0xe4, 0xa1, 0x4e, 0x0b, 0xdb, 0x9d, 0xf9, 0xdd, 0x9e, 0xfe, 0xa7, 0xb5, 0xd7, 0xda, 0xa6, 0x7d, - 0xdb, 0xcb, 0x74, 0x8c, 0x1c, 0x62, 0x29, 0x31, 0x8f, 0xdb, 0x6c, 0xd6, 0x5b, 0x48, 0x38, 0xe7, 0x34, 0x69, 0xd6, - 0xe7, 0xe7, 0x5a, 0xcf, 0x04, 0xd0, 0x88, 0xf2, 0x1c, 0x8e, 0x15, 0x73, 0xb4, 0x42, 0x1f, 0x52, 0x80, 0x1d, 0xf8, - 0xce, 0x46, 0xeb, 0xc3, 0x6a, 0xed, 0x55, 0x03, 0x83, 0x7f, 0xd6, 0x9f, 0x2b, 0xc6, 0xf4, 0x05, 0xf3, 0x04, 0x03, - 0xde, 0x88, 0xba, 0xab, 0x96, 0x15, 0x06, 0x52, 0x55, 0xc9, 0x28, 0xda, 0x95, 0x62, 0x46, 0xef, 0x8c, 0x4f, 0xc5, - 0x8c, 0xe7, 0x60, 0xb1, 0x85, 0xb0, 0xf2, 0x6c, 0xdb, 0xa7, 0x7e, 0x43, 0xa9, 0x0a, 0xa1, 0xe1, 0xc3, 0x4e, 0xd4, - 0xed, 0x22, 0xdc, 0xc2, 0x9d, 0x6e, 0xd7, 0x13, 0x46, 0xc6, 0x6a, 0x57, 0xd1, 0x5d, 0x25, 0xf3, 0x1d, 0x25, 0x8f, - 0x74, 0xa3, 0x47, 0xed, 0x56, 0x0b, 0x6b, 0xbf, 0xf1, 0xb2, 0x30, 0xcb, 0x77, 0x34, 0xdb, 0x6e, 0xb5, 0xa0, 0x59, - 0xf8, 0x63, 0xe7, 0xf5, 0x0b, 0x59, 0xb6, 0xe2, 0x16, 0x6e, 0xc7, 0x6d, 0xdc, 0x89, 0x3b, 0xf8, 0x38, 0x3e, 0xc6, - 0x27, 0xf1, 0x09, 0xee, 0xc6, 0x5d, 0x7c, 0x1a, 0x9f, 0xe2, 0x87, 0xf1, 0x43, 0x7c, 0x16, 0x9f, 0xe1, 0x47, 0xf1, - 0x23, 0x7c, 0x19, 0xb7, 0x5b, 0xf8, 0x71, 0xdc, 0x6e, 0xe3, 0xab, 0xb8, 0xdd, 0xc1, 0x4f, 0xe2, 0xf6, 0x31, 0x7e, - 0x1a, 0xb7, 0x4f, 0xf0, 0xb3, 0xb8, 0xdd, 0xc5, 0x14, 0x72, 0x47, 0x90, 0x9b, 0x40, 0x6e, 0x0a, 0xb9, 0x0c, 0x72, - 0xc7, 0x71, 0xbb, 0xbb, 0xc6, 0xd2, 0xc4, 0x9a, 0x08, 0x5a, 0xed, 0xce, 0xf1, 0x49, 0xf7, 0xf4, 0xe1, 0xd9, 0xa3, - 0xcb, 0xc7, 0x57, 0x4f, 0x9e, 0x3e, 0x0b, 0x86, 0x78, 0xa4, 0x5d, 0x3e, 0xa4, 0x1c, 0xf0, 0x83, 0x76, 0x77, 0x88, - 0x6f, 0xdc, 0x67, 0xc8, 0x0f, 0x3a, 0x27, 0x2d, 0x74, 0x71, 0x71, 0x32, 0x6c, 0x94, 0xb9, 0xef, 0xb5, 0xa7, 0x49, - 0x95, 0x45, 0x08, 0x09, 0x21, 0x07, 0xe1, 0x7b, 0x5d, 0xef, 0x3d, 0x0b, 0x79, 0x54, 0xa0, 0x83, 0x03, 0xfd, 0x63, - 0xe2, 0x7e, 0x8c, 0xdc, 0x0f, 0xea, 0x2d, 0xd2, 0x1d, 0x0d, 0xad, 0xab, 0xb1, 0x2a, 0x0d, 0xfd, 0x4b, 0x1b, 0x9a, - 0x3d, 0x6e, 0xad, 0xd9, 0xff, 0x2b, 0x30, 0xd6, 0x2a, 0xe4, 0xc4, 0x68, 0x84, 0xba, 0x7d, 0x46, 0x96, 0x45, 0xdc, - 0xe9, 0x76, 0x0f, 0x7e, 0x19, 0xf0, 0x41, 0x7b, 0x38, 0x3c, 0x6c, 0x3f, 0xc4, 0x93, 0x32, 0xa1, 0x63, 0x12, 0x46, - 0x65, 0xc2, 0xb1, 0x49, 0xa0, 0xb1, 0xa9, 0x0d, 0x49, 0x27, 0x3a, 0x09, 0x4a, 0xac, 0x63, 0xdd, 0xf6, 0x43, 0xd3, - 0xf6, 0x23, 0x30, 0xa3, 0xd2, 0xcd, 0xdb, 0xa6, 0xcf, 0xcf, 0x4f, 0x56, 0xb6, 0x51, 0x3c, 0x89, 0x6d, 0x6b, 0x2e, - 0xf1, 0x64, 0x38, 0xc4, 0x23, 0x9d, 0xd8, 0xad, 0x12, 0x4f, 0x87, 0x43, 0xdb, 0xd5, 0x23, 0xdd, 0xd5, 0xc3, 0x2a, - 0xeb, 0x6c, 0x38, 0xd4, 0x5d, 0x22, 0xeb, 0x34, 0x2f, 0xd5, 0xde, 0xd7, 0x52, 0x71, 0xc1, 0xcf, 0x3b, 0xdd, 0x6e, - 0x1f, 0x30, 0x4c, 0x1b, 0xc3, 0x3a, 0x18, 0xdd, 0x7a, 0x30, 0xba, 0x87, 0xdf, 0xfd, 0x11, 0x8d, 0x6f, 0x68, 0x09, - 0xa4, 0x7e, 0xf0, 0x5f, 0x41, 0x43, 0x69, 0x98, 0xeb, 0x3f, 0x13, 0xf3, 0x67, 0x84, 0x1a, 0x5f, 0x29, 0x80, 0x1b, - 0x54, 0x31, 0x4e, 0x97, 0xaa, 0x7b, 0xfc, 0x42, 0xc1, 0xb7, 0x65, 0x2a, 0x33, 0xda, 0x5f, 0x4d, 0x6f, 0x47, 0xab, - 0xa9, 0xfc, 0x8a, 0xfe, 0x0c, 0xff, 0x94, 0x87, 0xe1, 0xa0, 0xd9, 0x88, 0xd8, 0x9f, 0x29, 0x38, 0xd1, 0xf4, 0xe3, - 0x94, 0x4d, 0x50, 0x7f, 0xf0, 0xa7, 0xc4, 0xc3, 0x86, 0x97, 0xf1, 0xc3, 0x76, 0x0a, 0xb8, 0xd8, 0x6c, 0x26, 0x86, - 0x3f, 0xa0, 0x3e, 0xea, 0xff, 0x29, 0x0f, 0xff, 0x44, 0x0f, 0x8e, 0xaa, 0xb9, 0xfc, 0x2e, 0xec, 0x16, 0xae, 0xe2, - 0xee, 0x1c, 0x96, 0x5b, 0x98, 0xe1, 0x76, 0x93, 0x41, 0x94, 0x32, 0xf0, 0xc1, 0x26, 0xa1, 0x68, 0xf0, 0xa3, 0xe3, - 0x16, 0xfa, 0xa1, 0xdd, 0x01, 0xad, 0x42, 0x53, 0x1e, 0x6e, 0x6f, 0xfa, 0xa2, 0x79, 0x8c, 0x1f, 0x35, 0x0b, 0xdc, - 0x46, 0xb8, 0xd9, 0x76, 0xea, 0xde, 0x41, 0x1e, 0xb6, 0x10, 0xce, 0xc3, 0x33, 0xf8, 0xe7, 0x04, 0x0d, 0xab, 0x0d, - 0x79, 0x4d, 0x37, 0x7b, 0x07, 0x87, 0x51, 0x12, 0xe6, 0x0d, 0x7e, 0x74, 0xda, 0x42, 0x3f, 0x9c, 0xea, 0x8e, 0xd8, - 0xa1, 0xda, 0xd1, 0x95, 0xc0, 0x27, 0x4d, 0x01, 0x1d, 0xb5, 0xca, 0x7e, 0x64, 0xd8, 0x45, 0x58, 0x86, 0xc7, 0xf0, - 0x4f, 0xdb, 0xef, 0xe7, 0xd7, 0xad, 0x7e, 0xf4, 0xbc, 0xdb, 0x38, 0xea, 0x1a, 0xff, 0xd3, 0xdc, 0x5c, 0x06, 0x37, - 0xd8, 0x45, 0x5b, 0xdf, 0x62, 0xb5, 0x8f, 0xe0, 0x03, 0x61, 0x75, 0x48, 0x72, 0xcc, 0x0e, 0xc1, 0x71, 0x15, 0xec, - 0x35, 0xf2, 0xf3, 0xe3, 0x5e, 0xde, 0x68, 0x20, 0x90, 0x0f, 0x0f, 0x49, 0xbb, 0xa9, 0x9a, 0x0c, 0xc3, 0xef, 0x06, - 0x29, 0xa3, 0xa1, 0xc9, 0xaa, 0xd7, 0x2b, 0xdb, 0xab, 0xb9, 0xf2, 0x76, 0xd8, 0x01, 0x62, 0x62, 0x3f, 0x54, 0x4d, - 0x86, 0x8e, 0x64, 0x23, 0x54, 0xe7, 0xac, 0x7f, 0x1a, 0xb7, 0x90, 0xc6, 0xce, 0xbc, 0x1f, 0xb2, 0x26, 0x87, 0xf4, - 0x4e, 0x1c, 0xf2, 0xa6, 0x82, 0x5f, 0x27, 0x1e, 0xb4, 0x24, 0xe0, 0x5d, 0xe5, 0x86, 0x53, 0x1c, 0x75, 0xba, 0x5d, - 0x2c, 0x09, 0x8f, 0x26, 0xfa, 0x57, 0x4e, 0x78, 0x34, 0xd2, 0xbf, 0x04, 0x29, 0xe1, 0x65, 0x7a, 0xc7, 0x05, 0xf1, - 0x56, 0x55, 0xa7, 0x50, 0x58, 0xd0, 0x02, 0x1d, 0x75, 0xdc, 0x7d, 0x38, 0x9e, 0xba, 0x39, 0x80, 0xfc, 0x5f, 0x68, - 0x53, 0x48, 0xd1, 0x2c, 0x70, 0x46, 0xe8, 0x45, 0xd4, 0xed, 0x4f, 0x8f, 0xc2, 0x4e, 0x53, 0x34, 0x0b, 0x14, 0x4f, - 0x8f, 0x74, 0x4d, 0x9c, 0x90, 0x2b, 0x6a, 0x5a, 0xc3, 0x53, 0xb8, 0xc4, 0x4c, 0x48, 0x72, 0x78, 0xda, 0x6a, 0x44, - 0x5d, 0x84, 0x07, 0xc9, 0xaa, 0x85, 0xb3, 0xd5, 0xaa, 0x85, 0xa9, 0xbf, 0x0c, 0xd2, 0x01, 0xa4, 0x54, 0x51, 0x6d, - 0x06, 0xa5, 0xe9, 0xf3, 0x50, 0xc1, 0x85, 0xbc, 0x02, 0x37, 0x17, 0x05, 0x0e, 0x38, 0x31, 0xb7, 0x37, 0x61, 0x48, - 0x87, 0xe5, 0x1b, 0xfb, 0x4a, 0xab, 0x2b, 0xe9, 0xd6, 0xd5, 0x8e, 0xfc, 0x57, 0x19, 0xfe, 0x2e, 0xb0, 0x49, 0xab, - 0x8a, 0xbd, 0xa6, 0xdb, 0xc5, 0x7e, 0xa5, 0x5b, 0xc5, 0xde, 0xec, 0x28, 0x76, 0xbd, 0x5d, 0xec, 0xa3, 0xf0, 0x54, - 0x6c, 0xfc, 0x87, 0xe3, 0xd3, 0x56, 0xe3, 0x18, 0x90, 0xf5, 0xf8, 0xb4, 0x55, 0x15, 0x7a, 0x40, 0xab, 0xb5, 0x52, - 0xe4, 0x0b, 0x35, 0x4e, 0x06, 0xdc, 0x79, 0x3b, 0xeb, 0x85, 0x33, 0xbe, 0xd6, 0xa5, 0x63, 0xf5, 0xa0, 0x0b, 0x46, - 0x1c, 0x52, 0x53, 0x3b, 0x35, 0x38, 0x1d, 0xf6, 0xa7, 0x2c, 0x6c, 0x40, 0x2a, 0x8a, 0xc7, 0xca, 0xfe, 0x42, 0xe5, - 0x5d, 0xee, 0x47, 0x01, 0x49, 0x9d, 0x21, 0xc2, 0x82, 0x34, 0xd4, 0xe0, 0x78, 0xa8, 0xcf, 0xbb, 0x02, 0x7e, 0x9f, - 0xe8, 0xdf, 0xa5, 0x26, 0xc5, 0x7a, 0x22, 0x4c, 0x6f, 0x47, 0x41, 0x5f, 0x92, 0xd7, 0x34, 0xd4, 0xc6, 0xe5, 0x28, - 0x2e, 0x33, 0xe4, 0x57, 0xc8, 0x78, 0x53, 0x66, 0x48, 0x72, 0x25, 0xed, 0x6f, 0xbc, 0x2c, 0x62, 0x30, 0x34, 0xc1, - 0x93, 0x18, 0x8c, 0x4c, 0xf0, 0x28, 0x96, 0xe0, 0x08, 0x41, 0x63, 0xe6, 0x99, 0xaf, 0x5f, 0x5a, 0xd5, 0x95, 0xbe, - 0x6e, 0x25, 0x1a, 0x4b, 0x7b, 0x0c, 0x4e, 0x8a, 0x8f, 0x22, 0x84, 0xbf, 0x0d, 0x85, 0x30, 0x83, 0x36, 0x19, 0xc2, - 0x3c, 0x2a, 0x08, 0xa4, 0x61, 0x1e, 0x4d, 0x08, 0x83, 0x26, 0x79, 0x34, 0x22, 0x6c, 0xd0, 0xf1, 0xd0, 0xe4, 0xa9, - 0x86, 0x1d, 0x00, 0x87, 0xd7, 0x6f, 0xb0, 0x95, 0x69, 0x1c, 0xae, 0xc6, 0xa1, 0x09, 0x49, 0x58, 0x1e, 0xc2, 0x2c, - 0x60, 0x73, 0xea, 0x9f, 0x9d, 0x2a, 0xee, 0x23, 0x8f, 0xa8, 0xa6, 0xde, 0x9f, 0x81, 0xac, 0x86, 0x0f, 0x96, 0x6c, - 0x8d, 0xf7, 0x1e, 0x2c, 0xe5, 0xfa, 0x07, 0xf8, 0x93, 0xdb, 0x3f, 0x4a, 0x9f, 0x7e, 0x6b, 0xf4, 0x39, 0x86, 0x62, - 0x3b, 0x4a, 0xa1, 0xcf, 0xce, 0x0f, 0x2e, 0x27, 0xcb, 0xbb, 0x38, 0x48, 0x69, 0xf1, 0x25, 0xc0, 0x9f, 0xe2, 0x20, - 0x03, 0x46, 0x30, 0xc0, 0x1f, 0xe3, 0xa0, 0x60, 0x01, 0xfe, 0x23, 0x0e, 0x46, 0xd9, 0x22, 0xc0, 0x1f, 0xe2, 0x60, - 0x52, 0x04, 0xf8, 0x3d, 0x68, 0x29, 0x53, 0xbe, 0x98, 0x05, 0xf8, 0xf7, 0x38, 0x90, 0xda, 0x0d, 0x00, 0x5f, 0xc6, - 0x01, 0x63, 0x01, 0x7e, 0x17, 0x07, 0x22, 0x0b, 0xf0, 0x75, 0x1c, 0x88, 0x22, 0xc0, 0x8f, 0xe3, 0xa0, 0xa0, 0x01, - 0xbe, 0x8a, 0x03, 0x28, 0x34, 0x09, 0xf0, 0x93, 0x38, 0x80, 0x96, 0x65, 0x80, 0xdf, 0xc6, 0x01, 0xcf, 0x03, 0xfc, - 0x5b, 0x1c, 0xa8, 0x45, 0xf1, 0xf7, 0x42, 0x70, 0x19, 0xe0, 0xa7, 0x71, 0x30, 0xe5, 0x01, 0x7e, 0x13, 0x07, 0x85, - 0x08, 0xf0, 0xeb, 0x38, 0xa0, 0x59, 0x80, 0x5f, 0xc5, 0x41, 0xc6, 0x02, 0xfc, 0x6b, 0x1c, 0xa4, 0x2c, 0xc0, 0x2f, - 0xe3, 0xe0, 0x9e, 0x65, 0x99, 0x08, 0xf0, 0xb3, 0x38, 0x60, 0x79, 0x80, 0x7f, 0x89, 0x83, 0x64, 0x1a, 0xe0, 0x9f, - 0xe2, 0x80, 0x16, 0x5f, 0x64, 0x80, 0x9f, 0xc7, 0x01, 0xa3, 0x01, 0x7e, 0x61, 0x3a, 0x9a, 0x04, 0xf8, 0xe7, 0x38, - 0xb8, 0x9d, 0x06, 0x6b, 0x9c, 0xe7, 0x64, 0xf9, 0x9a, 0x27, 0xec, 0x0f, 0x16, 0x07, 0xe3, 0xd6, 0xf8, 0x6c, 0x3c, - 0x0e, 0x30, 0xcd, 0x15, 0xff, 0x7b, 0xc1, 0x6e, 0x9f, 0x2a, 0x48, 0xa4, 0x6c, 0x94, 0x3e, 0x0c, 0x30, 0xfd, 0x7b, - 0x41, 0xe3, 0x60, 0x3c, 0xd6, 0x05, 0xfe, 0x5e, 0xd0, 0x19, 0x2d, 0xde, 0xb2, 0x38, 0x78, 0x38, 0x1e, 0x8f, 0xd3, - 0x93, 0x00, 0xd3, 0x7f, 0x16, 0x1f, 0x75, 0x0b, 0xba, 0xc0, 0x88, 0xf1, 0x09, 0xd4, 0xed, 0x8e, 0xbb, 0x69, 0x12, - 0xe0, 0x11, 0x97, 0x7f, 0x2f, 0xe0, 0x7b, 0xcc, 0x4e, 0x92, 0x93, 0x00, 0x8f, 0x32, 0x9a, 0x7c, 0x89, 0x83, 0x96, - 0xfe, 0x95, 0xff, 0xc2, 0xd2, 0xd7, 0x33, 0xa1, 0x75, 0xf8, 0x63, 0x36, 0x4a, 0xd2, 0x00, 0xeb, 0xc1, 0x8c, 0xe1, - 0xef, 0x57, 0xfe, 0x8e, 0xa9, 0x38, 0x38, 0xa3, 0x9d, 0x11, 0xeb, 0x04, 0x78, 0xf4, 0xe6, 0x36, 0x8f, 0x03, 0xda, - 0xed, 0xd0, 0x0e, 0x0d, 0xf0, 0x68, 0x51, 0x64, 0xf7, 0xb7, 0x42, 0xa4, 0x00, 0x84, 0xd1, 0xd9, 0xd9, 0xc3, 0x00, - 0x27, 0xf4, 0x57, 0x05, 0xb5, 0xbb, 0xe3, 0x47, 0x8c, 0xb6, 0x02, 0xfc, 0x0b, 0x2d, 0xd4, 0xc7, 0x85, 0xb4, 0x03, - 0x6d, 0x41, 0x8a, 0x48, 0xde, 0x81, 0x7e, 0x3b, 0x48, 0x3b, 0xa7, 0x8f, 0xda, 0x2c, 0xc0, 0xc9, 0xf5, 0x6b, 0xe8, - 0xed, 0xe1, 0xb8, 0xdb, 0x82, 0x8f, 0x1c, 0x04, 0x45, 0x56, 0x40, 0x23, 0xa7, 0x27, 0x8f, 0xba, 0x2c, 0xd5, 0x89, - 0x92, 0x67, 0x5f, 0xf4, 0xec, 0xcf, 0x60, 0x3e, 0x49, 0xc1, 0x67, 0x52, 0xe4, 0x71, 0x90, 0x26, 0xed, 0x93, 0x63, - 0x48, 0xb8, 0xa7, 0xb9, 0x03, 0xce, 0x1d, 0x54, 0x3d, 0x1b, 0x05, 0xf8, 0xce, 0xa4, 0x9e, 0x8d, 0xf4, 0xc7, 0xe4, - 0xdd, 0xaf, 0xf9, 0x9b, 0x34, 0x0e, 0x46, 0x67, 0x67, 0xa7, 0x2d, 0x48, 0xf8, 0x40, 0xef, 0xe3, 0x80, 0x3e, 0x82, - 0xff, 0x20, 0xfb, 0xe3, 0x33, 0xe8, 0x10, 0x46, 0x78, 0x37, 0xf9, 0xe8, 0xe7, 0x7c, 0x99, 0xd2, 0x2f, 0x3c, 0x0e, - 0x46, 0xe9, 0xe8, 0xe1, 0x29, 0xd4, 0x9b, 0xd1, 0xc9, 0x33, 0x45, 0xa1, 0xdd, 0x56, 0x4b, 0xb7, 0xfc, 0x8e, 0x7f, - 0x65, 0xba, 0x7a, 0xb7, 0x7b, 0x3a, 0xea, 0xc0, 0x08, 0xae, 0x41, 0xc3, 0x01, 0xe3, 0x39, 0x4b, 0x74, 0x83, 0xd7, - 0xc9, 0xd3, 0x34, 0x0e, 0x1e, 0x3d, 0x3a, 0xee, 0x24, 0x49, 0x80, 0xef, 0x3e, 0xa6, 0xa6, 0xb6, 0xce, 0x93, 0x00, - 0xfb, 0x38, 0x60, 0x8f, 0x1e, 0x9d, 0x3e, 0xa4, 0xf0, 0xfd, 0x5c, 0xb7, 0x75, 0x36, 0x1e, 0x25, 0x67, 0xd0, 0xd6, - 0xef, 0x30, 0x9d, 0x93, 0xb3, 0xe3, 0x54, 0xf7, 0xf5, 0xbb, 0x1e, 0x75, 0x67, 0x7c, 0x32, 0x3e, 0xd1, 0x99, 0x7a, - 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x0e, 0x12, 0x96, 0xb6, 0x03, 0x7c, 0x67, 0x17, 0xee, 0xd1, 0x49, 0xab, 0x95, 0x1e, - 0x07, 0x38, 0xbd, 0x9c, 0xcf, 0xdf, 0x6a, 0x08, 0xb6, 0x4f, 0x1e, 0x99, 0x6f, 0xf9, 0xe5, 0x1e, 0x9a, 0x1e, 0x69, - 0xa0, 0xa5, 0x7c, 0xa6, 0x5b, 0x3e, 0x7d, 0x04, 0xff, 0xe9, 0x6f, 0xdd, 0x74, 0xf9, 0x2d, 0xd2, 0x89, 0x59, 0x94, - 0x36, 0x7b, 0xd4, 0x82, 0x1a, 0x63, 0xfe, 0x71, 0x54, 0x70, 0x40, 0xa3, 0x51, 0x07, 0xfe, 0x2f, 0xc0, 0xe3, 0xec, - 0xfa, 0xb5, 0xc5, 0xd9, 0xf1, 0x98, 0x8e, 0x5b, 0x01, 0x1e, 0x8b, 0x8f, 0x52, 0x7d, 0xb8, 0xcc, 0xe3, 0xa0, 0xd3, - 0x39, 0x1b, 0xe9, 0x32, 0x8b, 0x5f, 0x24, 0xd7, 0x78, 0xdc, 0xd2, 0xad, 0x4c, 0xe8, 0x5b, 0x39, 0xba, 0x16, 0xb0, - 0x92, 0xf0, 0x5f, 0x80, 0x27, 0xa0, 0x16, 0xb3, 0xad, 0x9c, 0x99, 0xed, 0x30, 0x79, 0xa7, 0x51, 0x33, 0x7d, 0x08, - 0xf0, 0x72, 0xcb, 0x98, 0x52, 0xda, 0xed, 0xb4, 0x02, 0xac, 0x47, 0x7d, 0xd6, 0x82, 0xff, 0x02, 0x6c, 0x20, 0xa7, - 0xe1, 0x3a, 0xf9, 0xf8, 0xec, 0xe5, 0x6d, 0x1c, 0xd0, 0x74, 0x3c, 0x86, 0x25, 0xd1, 0x93, 0x71, 0xc5, 0xa6, 0x22, - 0x67, 0xf7, 0xbf, 0xde, 0xda, 0xed, 0xa2, 0x13, 0x94, 0x85, 0xce, 0xe9, 0xa3, 0xd1, 0x49, 0x80, 0xdf, 0xa6, 0x9c, - 0xe6, 0xb0, 0x4a, 0x49, 0xda, 0x4d, 0xba, 0x89, 0x4e, 0x98, 0x88, 0x38, 0x38, 0x81, 0x25, 0xef, 0x04, 0x98, 0x7f, - 0xbd, 0xbe, 0x37, 0xe8, 0x06, 0xb5, 0x2d, 0x82, 0x8c, 0x5b, 0xec, 0xf4, 0x2c, 0x09, 0x70, 0x46, 0xbf, 0x3e, 0xfb, - 0xb5, 0x88, 0x03, 0x76, 0xca, 0x4e, 0xc7, 0xd4, 0x7d, 0xff, 0x21, 0xa7, 0xba, 0x46, 0x6b, 0xdc, 0x85, 0xa4, 0xdb, - 0x5c, 0x8f, 0xf5, 0x61, 0x32, 0xd6, 0x18, 0xf2, 0x6a, 0x26, 0xf2, 0xe4, 0xe9, 0x78, 0x2c, 0x0c, 0x16, 0x53, 0xd8, - 0x84, 0x9f, 0x00, 0xda, 0x34, 0x4d, 0xcf, 0xd8, 0x69, 0x80, 0x3f, 0x99, 0x5d, 0x62, 0x27, 0xf0, 0xc9, 0x60, 0x36, - 0xb3, 0xbb, 0xfd, 0x93, 0x01, 0x0a, 0xcc, 0x77, 0x4c, 0xc7, 0x34, 0xed, 0x04, 0xf8, 0x93, 0x86, 0x4b, 0x7a, 0x0c, - 0xff, 0x41, 0x01, 0xe8, 0xec, 0x51, 0x8b, 0xb1, 0x47, 0x2d, 0xfd, 0xe5, 0xe7, 0xd9, 0x99, 0x8f, 0x4e, 0x93, 0x76, - 0x80, 0x3f, 0x59, 0x74, 0x1c, 0x8f, 0x69, 0x0b, 0xd0, 0xf1, 0x93, 0x45, 0xc7, 0x4e, 0x6b, 0xd4, 0xa1, 0xfa, 0xdb, - 0x60, 0xcd, 0xd9, 0xc3, 0x84, 0xc1, 0xe4, 0x3e, 0x19, 0x84, 0x7c, 0xf8, 0xf0, 0xec, 0xec, 0xd1, 0x23, 0xf8, 0xd4, - 0x6d, 0x97, 0x9f, 0x52, 0x5d, 0x66, 0x1a, 0xc9, 0x5a, 0xc9, 0x09, 0xd0, 0xc9, 0x4f, 0x7a, 0x8c, 0xe3, 0xf1, 0x98, - 0xb5, 0x02, 0x9c, 0xf1, 0x19, 0x33, 0x98, 0x60, 0x7e, 0xeb, 0x8e, 0x8e, 0x3b, 0x49, 0x7a, 0xdc, 0x09, 0x70, 0xf6, - 0xf6, 0x99, 0x9e, 0x4d, 0x0b, 0x66, 0xef, 0xb6, 0x9c, 0xc3, 0x9a, 0x19, 0x7d, 0x03, 0x83, 0x84, 0x95, 0x86, 0xca, - 0xef, 0x3d, 0x7a, 0x78, 0x7a, 0x9a, 0xa4, 0x30, 0xd0, 0xf7, 0xd0, 0x2d, 0x80, 0xf1, 0xbd, 0xd9, 0x7c, 0x23, 0xda, - 0xed, 0xc2, 0x74, 0xdf, 0xcf, 0x17, 0xc5, 0xfc, 0x55, 0x1c, 0x3c, 0x3a, 0x7e, 0xd8, 0x4a, 0x47, 0x01, 0x7e, 0x6f, - 0x27, 0x78, 0x9c, 0x8c, 0x8e, 0x1f, 0xb6, 0x03, 0xfc, 0x5e, 0xef, 0xb7, 0x87, 0xa3, 0xd3, 0x33, 0x38, 0x37, 0xde, - 0xcb, 0x79, 0xf1, 0x76, 0xa2, 0x0b, 0x8c, 0xe9, 0x23, 0x68, 0xf6, 0x37, 0xbd, 0x1b, 0xd3, 0x36, 0x6c, 0xe4, 0xf7, - 0x7a, 0x93, 0x69, 0x3c, 0x79, 0xd8, 0xee, 0x9e, 0x75, 0x03, 0x3c, 0xe3, 0x69, 0x0e, 0x04, 0x5e, 0x6f, 0x94, 0x47, - 0xed, 0x47, 0x0f, 0x5b, 0x01, 0x9e, 0xbd, 0x55, 0xc9, 0x47, 0x3a, 0xd3, 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa9, - 0xee, 0xdf, 0x48, 0x4b, 0x8f, 0x59, 0x3b, 0xc0, 0x33, 0x91, 0x24, 0x54, 0xbe, 0x35, 0x09, 0xa3, 0x6e, 0x80, 0x73, - 0xfa, 0x95, 0xfe, 0x25, 0xdc, 0x66, 0x4a, 0x19, 0x4d, 0x75, 0x9a, 0xc6, 0xe1, 0x00, 0xbf, 0x4b, 0xe1, 0x16, 0x2e, - 0x0e, 0xc6, 0xe9, 0xb8, 0x0b, 0xe0, 0x01, 0x02, 0x64, 0xb0, 0x1b, 0xa0, 0x01, 0x5f, 0xe9, 0xe3, 0x51, 0x1c, 0x9c, - 0x8e, 0xce, 0x58, 0xe7, 0x38, 0xc0, 0x25, 0x35, 0xa2, 0x5d, 0xc8, 0xd7, 0x9f, 0x1f, 0xf5, 0x96, 0x3a, 0x31, 0x09, - 0x1a, 0x40, 0x29, 0x7d, 0xd8, 0x4a, 0x4f, 0x03, 0x3c, 0x7f, 0xcd, 0xdc, 0x1e, 0x63, 0x8c, 0x9d, 0x01, 0x2c, 0x21, - 0x49, 0x23, 0xd0, 0xd9, 0x78, 0xf4, 0xe8, 0x4c, 0x7f, 0x03, 0x18, 0xe8, 0x98, 0x31, 0x00, 0xd2, 0xfc, 0x35, 0x2b, - 0x01, 0x91, 0x8e, 0x1e, 0xb6, 0x80, 0xbe, 0xcc, 0xe9, 0x9c, 0xde, 0xd3, 0xdb, 0xa7, 0x73, 0x3d, 0xa7, 0x71, 0xda, - 0x0d, 0xf0, 0xfc, 0xf9, 0x2f, 0xf3, 0xc5, 0x78, 0xac, 0x27, 0x44, 0x47, 0x8f, 0x02, 0x3c, 0x67, 0xc5, 0x02, 0xd6, - 0xe8, 0xac, 0x7b, 0x3c, 0x0e, 0xb0, 0x45, 0xc3, 0xa4, 0x95, 0x8c, 0xe0, 0x9a, 0x71, 0x31, 0x8b, 0x83, 0x34, 0xa5, - 0xad, 0x14, 0x2e, 0x1d, 0xc5, 0xed, 0xaf, 0x85, 0x41, 0x23, 0xa6, 0xf1, 0xc1, 0xae, 0x21, 0xcc, 0x17, 0xe0, 0xf1, - 0x71, 0xc4, 0x92, 0x84, 0xda, 0xc4, 0xd3, 0xd3, 0xe3, 0x63, 0xc0, 0x3d, 0x33, 0x43, 0x83, 0x20, 0x6f, 0xe4, 0xfd, - 0xa8, 0x10, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, 0xfe, 0xb5, 0xa6, 0xab, 0xed, 0xd3, 0x47, 0xb0, 0x00, - 0x92, 0xa6, 0xe9, 0x2b, 0x73, 0xb8, 0x9d, 0x8d, 0x4e, 0xba, 0xed, 0xe3, 0x00, 0xbb, 0x8d, 0x40, 0xcf, 0x5a, 0x0f, - 0x3b, 0x50, 0x22, 0x4f, 0xef, 0x4d, 0x89, 0xf1, 0x09, 0x3d, 0x39, 0x6d, 0x05, 0xd8, 0x6d, 0x0d, 0x76, 0x36, 0xea, - 0x3e, 0x84, 0x4f, 0x39, 0x65, 0x59, 0xa6, 0xf1, 0xbb, 0x0b, 0x70, 0x91, 0xfc, 0x59, 0x4e, 0xe3, 0x80, 0xb6, 0xba, - 0x9d, 0x4e, 0x0a, 0x9f, 0xd9, 0x57, 0x56, 0xc4, 0x41, 0xd2, 0x82, 0xff, 0x02, 0xec, 0xed, 0x24, 0x36, 0x0a, 0xb0, - 0xc6, 0xbb, 0x53, 0xda, 0xd5, 0x7b, 0xdf, 0xee, 0xaa, 0xd6, 0x59, 0x0b, 0x36, 0xac, 0xdd, 0x54, 0xf6, 0x4b, 0xe6, - 0xe2, 0xd6, 0x92, 0x58, 0x1a, 0x60, 0x0f, 0x41, 0xc7, 0x0f, 0xc7, 0x01, 0x76, 0x3b, 0xee, 0xe4, 0xf4, 0xac, 0x03, - 0xa4, 0x4c, 0x01, 0xa1, 0x48, 0x3b, 0xa3, 0x13, 0x20, 0x4d, 0x8a, 0xbd, 0x36, 0x78, 0x12, 0x60, 0xf5, 0x54, 0xaa, - 0x57, 0x71, 0x90, 0x9e, 0x8d, 0xc6, 0xe9, 0x59, 0x80, 0x95, 0x98, 0x51, 0x25, 0x34, 0x05, 0x3c, 0x3e, 0x79, 0x18, - 0x60, 0x8d, 0xe6, 0x2d, 0xd6, 0x4a, 0x5b, 0x01, 0xb6, 0x47, 0x09, 0x63, 0x67, 0x1d, 0x98, 0xd6, 0xcf, 0xcf, 0x15, - 0xe0, 0x72, 0xca, 0x46, 0xc7, 0x01, 0x2e, 0xe9, 0xbd, 0x26, 0x44, 0xf0, 0x25, 0x67, 0xe2, 0x8b, 0x65, 0x3d, 0x80, - 0xd4, 0xb9, 0x0d, 0x0f, 0xcb, 0xf0, 0xf2, 0xd6, 0xa0, 0x11, 0xd5, 0x5b, 0xdc, 0xbb, 0x86, 0x7d, 0x42, 0x43, 0xc7, - 0xb6, 0x73, 0xb2, 0x5c, 0xe3, 0x32, 0xba, 0xe9, 0x17, 0x76, 0x2f, 0xc3, 0x1c, 0x4c, 0xe2, 0x6b, 0x29, 0x32, 0x47, - 0xce, 0x9e, 0xdf, 0xba, 0x6c, 0x82, 0x20, 0x29, 0x49, 0xab, 0x27, 0xcf, 0x9d, 0x1b, 0x69, 0x4f, 0x42, 0xcc, 0x03, - 0x48, 0x2f, 0x08, 0x25, 0x0a, 0x42, 0xc3, 0x18, 0x61, 0xd2, 0x59, 0xd7, 0x6b, 0x99, 0x52, 0x18, 0x7b, 0x7d, 0x4a, - 0xa8, 0x0b, 0x0a, 0x0f, 0x77, 0xc4, 0xf9, 0x40, 0x0c, 0x51, 0x4f, 0x10, 0x1d, 0xe2, 0xf9, 0x45, 0xae, 0xc2, 0x3c, - 0x1f, 0x14, 0x43, 0xdc, 0x3e, 0x45, 0x18, 0x82, 0x27, 0x90, 0x81, 0xb8, 0xb8, 0x68, 0x9f, 0x1e, 0x68, 0xa1, 0xef, - 0xe2, 0xe2, 0xcc, 0xfc, 0x80, 0x7f, 0x87, 0x55, 0xc0, 0x6a, 0x18, 0xdf, 0x63, 0xe6, 0x69, 0xf4, 0x34, 0x7f, 0xfd, - 0x98, 0xad, 0x56, 0xe1, 0x63, 0x46, 0x60, 0xc6, 0xf8, 0x31, 0x8b, 0xf4, 0xa5, 0x85, 0x71, 0x8d, 0x21, 0x03, 0xd0, - 0x9c, 0xb5, 0x30, 0x84, 0x51, 0x77, 0x9c, 0xf7, 0x63, 0x36, 0xe0, 0x75, 0xb7, 0xea, 0x2a, 0x76, 0xf1, 0xc1, 0xc1, - 0xb2, 0x88, 0x95, 0x11, 0x13, 0x94, 0x11, 0x13, 0x94, 0x11, 0x13, 0x54, 0x15, 0x3d, 0xfe, 0xa4, 0x0f, 0x52, 0x8a, - 0x56, 0xb6, 0x58, 0x9e, 0xfa, 0x1d, 0xa8, 0x3d, 0x40, 0x3b, 0xd9, 0xaf, 0x94, 0x1d, 0xa5, 0xae, 0x62, 0xa7, 0x02, - 0x63, 0x67, 0xa2, 0xd5, 0x76, 0x1c, 0xfd, 0x3b, 0xea, 0x8e, 0x97, 0x35, 0xb1, 0xec, 0xdd, 0x4e, 0xb1, 0x0c, 0x56, - 0x52, 0x8b, 0x66, 0xfb, 0x26, 0x10, 0x87, 0x1a, 0x3c, 0xd4, 0x82, 0x59, 0x15, 0x1d, 0xae, 0x01, 0x49, 0x3d, 0x90, - 0x42, 0xce, 0xb4, 0x94, 0x56, 0xa0, 0x38, 0x55, 0x61, 0x01, 0x1a, 0x4a, 0xa7, 0xa0, 0x2c, 0x83, 0x98, 0x36, 0x34, - 0x40, 0x72, 0x23, 0xa3, 0x19, 0x59, 0xad, 0x0b, 0xa2, 0x0b, 0x68, 0xc2, 0xb4, 0xc4, 0x02, 0x0d, 0x48, 0xdd, 0x80, - 0xb4, 0x95, 0x41, 0x9c, 0xb1, 0xd9, 0x27, 0x3a, 0x3b, 0xd7, 0xd9, 0x79, 0x99, 0x2d, 0x5c, 0xb6, 0x11, 0x12, 0x85, - 0xce, 0x16, 0x65, 0x36, 0xc8, 0x6c, 0x78, 0x12, 0xe7, 0x78, 0x14, 0x0b, 0x23, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0xea, - 0x6b, 0x73, 0x0f, 0x0e, 0xc2, 0x52, 0x4e, 0xd2, 0x6a, 0xe2, 0x07, 0x4b, 0x1e, 0x15, 0x5a, 0x06, 0xe2, 0xd1, 0xc4, - 0xfe, 0x1d, 0xad, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfa, 0x46, 0x49, 0xf4, 0xd9, 0x29, 0x51, 0x1f, 0x73, 0x1d, 0xfe, - 0xe6, 0x9c, 0x44, 0xad, 0xd6, 0x71, 0xfb, 0xb8, 0x75, 0xd6, 0xe7, 0x87, 0xed, 0x4e, 0xf4, 0xa8, 0x13, 0x6b, 0x45, - 0xc4, 0x5c, 0xdc, 0x82, 0x02, 0xe6, 0xa8, 0x13, 0x9d, 0xa0, 0xc3, 0x76, 0xd4, 0xea, 0x76, 0x9b, 0xf0, 0x0f, 0x7e, - 0xaf, 0xca, 0x6a, 0x27, 0xad, 0x93, 0x6e, 0x9f, 0x1f, 0x6d, 0x54, 0x0a, 0x79, 0x03, 0x0a, 0xa2, 0x23, 0x5d, 0x09, - 0x43, 0xfd, 0x6a, 0x79, 0x9f, 0x6d, 0xe9, 0x79, 0xde, 0xab, 0x30, 0x37, 0xaa, 0x38, 0x80, 0xaa, 0xfb, 0x9a, 0x68, - 0x20, 0xba, 0xaf, 0x51, 0x19, 0xa2, 0x76, 0x59, 0x80, 0xa8, 0xfd, 0x98, 0x87, 0xb2, 0xc1, 0x0e, 0x43, 0x93, 0xaf, - 0xa0, 0x6e, 0x13, 0xc2, 0xc6, 0xe1, 0x89, 0xcd, 0xcd, 0xfd, 0xdc, 0x09, 0x42, 0xcd, 0x1c, 0x72, 0x47, 0x36, 0x57, - 0xf8, 0xb9, 0x23, 0x84, 0x9a, 0x02, 0x72, 0x69, 0xcc, 0x23, 0x0a, 0x39, 0x2a, 0xa2, 0x4d, 0x0d, 0xc9, 0x6a, 0x51, - 0x9e, 0x33, 0x37, 0x6c, 0x3e, 0x86, 0xe5, 0xd1, 0x04, 0xc5, 0x0a, 0xd2, 0x10, 0x35, 0xaf, 0xd2, 0xe6, 0xb4, 0x70, - 0xa9, 0xc6, 0x81, 0x8c, 0x06, 0xfc, 0x73, 0xc8, 0xf4, 0x7b, 0x13, 0xad, 0xfe, 0xf1, 0x69, 0x2b, 0x6e, 0x83, 0x8f, - 0x34, 0xc8, 0xda, 0xd2, 0xc8, 0xda, 0xd2, 0xc9, 0xda, 0xd2, 0xc9, 0xda, 0x20, 0xc0, 0x7b, 0x7d, 0xff, 0x2d, 0x6a, - 0x76, 0x27, 0xbc, 0x34, 0x62, 0x31, 0x56, 0x0a, 0xa1, 0x5a, 0xad, 0x96, 0x6b, 0x30, 0x31, 0x2a, 0x6b, 0x88, 0xbc, - 0x52, 0x7f, 0x2e, 0x8b, 0xb8, 0x85, 0x27, 0x31, 0x68, 0xb9, 0x5b, 0x98, 0xea, 0xcd, 0xed, 0xa8, 0xc2, 0x66, 0xf8, - 0x9a, 0xbe, 0x53, 0x27, 0x5f, 0x90, 0x63, 0xad, 0x3d, 0x5e, 0x16, 0x31, 0x37, 0x34, 0x83, 0x1b, 0x9a, 0xc1, 0x0d, - 0xcd, 0x80, 0x46, 0x70, 0x59, 0x58, 0x97, 0x8d, 0x28, 0x81, 0x2b, 0x81, 0xc1, 0xf1, 0x10, 0xa2, 0xf7, 0x85, 0x8a, - 0xe8, 0x51, 0x6f, 0x74, 0xde, 0x86, 0x68, 0x65, 0xa6, 0xa4, 0x8a, 0xa8, 0x76, 0xda, 0x2e, 0xc7, 0xfc, 0xaa, 0x86, - 0xf6, 0x11, 0x3c, 0x25, 0x73, 0xa9, 0xc2, 0x16, 0xd8, 0x6c, 0x04, 0x45, 0xd0, 0xd7, 0x64, 0x21, 0xd6, 0x3a, 0x1b, - 0x6b, 0x8b, 0xfd, 0x65, 0xc3, 0x05, 0xd6, 0x50, 0x02, 0xff, 0x01, 0x85, 0x2f, 0xac, 0xf2, 0xc9, 0x2f, 0x4d, 0x4d, - 0xad, 0x9d, 0x98, 0x39, 0x12, 0x7a, 0x60, 0x2f, 0xee, 0x82, 0x3d, 0xf5, 0x25, 0x11, 0xb9, 0xf6, 0x56, 0x24, 0x55, - 0xb8, 0x62, 0xf0, 0xde, 0x25, 0x77, 0x54, 0xfb, 0xb2, 0xbc, 0x30, 0x7f, 0x5e, 0x51, 0xcf, 0xd9, 0xaf, 0x98, 0x8c, - 0x9c, 0x8f, 0xec, 0x8d, 0x0e, 0xea, 0x43, 0xf6, 0xf7, 0x8d, 0x29, 0xb7, 0xfe, 0xda, 0xb4, 0xe5, 0xd6, 0x89, 0x3a, - 0x1b, 0x76, 0xa8, 0x5b, 0xa3, 0xbf, 0x9d, 0xab, 0x5a, 0x31, 0x19, 0x21, 0x8f, 0x66, 0x6b, 0xb0, 0xe6, 0x15, 0xb0, - 0xa4, 0xad, 0x57, 0x7a, 0x30, 0x42, 0xef, 0x7a, 0xcc, 0xeb, 0x62, 0x32, 0xda, 0xf9, 0xe6, 0x88, 0xe9, 0xb1, 0xff, - 0x96, 0x7a, 0x3d, 0x38, 0xd5, 0xf6, 0x94, 0xdd, 0x7d, 0xaf, 0xce, 0xed, 0xce, 0x3a, 0x32, 0xfb, 0x5e, 0x9d, 0xa7, - 0xbb, 0xea, 0xcc, 0xf8, 0x5d, 0xe8, 0xf6, 0x8e, 0xf2, 0xd4, 0xd8, 0xda, 0x3e, 0x68, 0x32, 0x82, 0x20, 0xf1, 0xf0, - 0xd7, 0x84, 0x72, 0xe9, 0x39, 0x12, 0x0e, 0xab, 0x20, 0xfa, 0x51, 0x37, 0x66, 0x98, 0x92, 0xce, 0x61, 0xa1, 0x83, - 0xb9, 0xc8, 0x88, 0x36, 0xf3, 0x88, 0xe2, 0x8c, 0x84, 0x21, 0x3d, 0x4c, 0x20, 0x24, 0x4d, 0xbb, 0x4f, 0xe3, 0x90, - 0x36, 0x12, 0x74, 0x14, 0xb6, 0x1b, 0xf4, 0x30, 0x41, 0xa8, 0xd1, 0x06, 0x9d, 0xa9, 0x20, 0xed, 0x66, 0x06, 0x41, - 0x2a, 0x35, 0x29, 0xce, 0x0e, 0x65, 0x54, 0x34, 0xc4, 0x61, 0x1e, 0x15, 0x8d, 0xa8, 0x8b, 0x65, 0x34, 0x29, 0x93, - 0x27, 0x3a, 0x79, 0x62, 0x92, 0x47, 0x65, 0xf2, 0x48, 0x27, 0x8f, 0x4c, 0x32, 0x25, 0xc5, 0xa1, 0x8c, 0x68, 0x23, - 0x6c, 0x37, 0x0b, 0x74, 0x08, 0x23, 0x70, 0xa3, 0x27, 0xd2, 0x8f, 0x0d, 0xbe, 0xd6, 0xc6, 0x35, 0x73, 0x91, 0xd9, - 0x68, 0x9d, 0x15, 0x90, 0x4a, 0x8f, 0x27, 0xa8, 0xf3, 0xcc, 0x03, 0x13, 0x56, 0xe6, 0x8f, 0x8b, 0x45, 0xb7, 0x4e, - 0x32, 0x91, 0x7b, 0x1e, 0x5d, 0x60, 0x84, 0xfe, 0xc5, 0xfa, 0xb1, 0x00, 0x54, 0xd7, 0x34, 0x9b, 0x4f, 0xe9, 0x96, - 0xdb, 0x6c, 0x31, 0x19, 0xd9, 0x9d, 0x55, 0x36, 0xc3, 0x68, 0x61, 0x62, 0x3c, 0xd7, 0x1d, 0x1c, 0x01, 0xd4, 0xce, - 0xa9, 0x32, 0xa2, 0x5a, 0x49, 0x6e, 0x6a, 0x4c, 0x0a, 0x76, 0x2f, 0x13, 0x9a, 0xb1, 0xb0, 0x3a, 0x80, 0xab, 0x61, - 0x32, 0xf2, 0x02, 0x4c, 0xe1, 0x8b, 0xc3, 0xe8, 0xb8, 0xa1, 0xa2, 0xc9, 0x61, 0xd4, 0x7d, 0xd4, 0x50, 0xd1, 0xe8, - 0x30, 0x6a, 0xb7, 0x2b, 0x9c, 0x8d, 0x0a, 0xa2, 0xa2, 0x09, 0x51, 0xa0, 0x31, 0x34, 0x8d, 0x8a, 0x39, 0x05, 0xdb, - 0xae, 0x7f, 0x63, 0x18, 0x0d, 0x3b, 0x8c, 0x9c, 0x4d, 0x4c, 0xb8, 0xcb, 0xad, 0x31, 0xf8, 0xdd, 0x74, 0xba, 0xdd, - 0xa6, 0x8a, 0x0a, 0xac, 0xcc, 0x4a, 0x36, 0x55, 0x34, 0xc1, 0xca, 0x2c, 0x5f, 0x53, 0x45, 0x23, 0xd3, 0x94, 0xd6, - 0x01, 0x82, 0xde, 0xb1, 0x04, 0xd6, 0x73, 0xe6, 0x41, 0xbe, 0xe3, 0xbc, 0x53, 0xd6, 0xa0, 0x35, 0xfc, 0x5e, 0xb9, - 0xa6, 0x2b, 0x28, 0xa9, 0x02, 0x1b, 0x1f, 0xf6, 0xad, 0xa2, 0xed, 0xaa, 0x49, 0xf6, 0xaf, 0xcb, 0x96, 0xcd, 0x16, - 0x42, 0xd5, 0x0b, 0x5e, 0xd6, 0x30, 0xc4, 0x96, 0xb2, 0x07, 0xf7, 0x3f, 0x94, 0x84, 0x10, 0xd4, 0x4e, 0x9f, 0x42, - 0x9c, 0x38, 0x3d, 0x32, 0x24, 0xf1, 0x46, 0x63, 0x8d, 0x42, 0xef, 0xbc, 0x7d, 0xea, 0x53, 0xd5, 0xad, 0x48, 0x77, - 0x84, 0x04, 0x8b, 0xdc, 0xd8, 0x42, 0xa6, 0x81, 0xc7, 0x82, 0x58, 0xed, 0x6e, 0xed, 0x80, 0x38, 0x38, 0xd8, 0x3c, - 0x2f, 0xdc, 0x9b, 0x03, 0x5b, 0xef, 0x0c, 0x54, 0x86, 0x74, 0xee, 0x25, 0x24, 0x63, 0x62, 0xcb, 0x3d, 0x44, 0x71, - 0x31, 0xa7, 0x1e, 0x6a, 0x0a, 0x3f, 0xa8, 0x02, 0xee, 0xd9, 0x9c, 0xe6, 0xa9, 0xce, 0xd0, 0x7d, 0x0d, 0xbd, 0xb1, - 0xbd, 0xf1, 0x27, 0x54, 0x1a, 0x09, 0xfe, 0xcb, 0x8e, 0xbd, 0x4e, 0xec, 0x4b, 0x2d, 0x7e, 0xa3, 0x7f, 0xf9, 0x26, - 0xb9, 0x15, 0x6c, 0xac, 0x33, 0xf6, 0x6a, 0x55, 0x7b, 0x97, 0xc7, 0xbc, 0xfe, 0x82, 0x0e, 0x0e, 0xb8, 0x7c, 0x06, - 0x56, 0xc4, 0x2c, 0x6c, 0xf8, 0x87, 0xef, 0xdf, 0xb5, 0xd3, 0xfa, 0x2f, 0x7d, 0xae, 0xc6, 0xde, 0x41, 0x77, 0x59, - 0xcb, 0xdf, 0xb9, 0x12, 0x7d, 0x15, 0x73, 0xbb, 0xd6, 0x7f, 0x55, 0x36, 0xda, 0x5b, 0x2f, 0x44, 0x1d, 0x1c, 0xf0, - 0x2a, 0x4e, 0x53, 0xf0, 0x43, 0x80, 0xfa, 0x5a, 0x06, 0x79, 0x96, 0x09, 0x0a, 0x37, 0xa2, 0x70, 0xc5, 0x10, 0x37, - 0xf8, 0x91, 0xc2, 0x7f, 0x88, 0xff, 0x4f, 0x8d, 0x1c, 0xaa, 0xb8, 0xc1, 0x3d, 0x01, 0xcc, 0x67, 0x85, 0xaa, 0x08, - 0x89, 0x1a, 0xd2, 0xbe, 0xc9, 0x35, 0x2a, 0x0f, 0x73, 0x3a, 0x9f, 0x67, 0xf7, 0xfa, 0x91, 0x2c, 0x8f, 0xa3, 0xaa, - 0x2e, 0x9a, 0x6c, 0x78, 0x3a, 0x5c, 0x00, 0x4f, 0x0f, 0xb8, 0x87, 0xb4, 0x7b, 0x69, 0x79, 0xb9, 0x2d, 0x11, 0x48, - 0x66, 0x39, 0x11, 0xcd, 0x76, 0x2f, 0xbf, 0x00, 0xb9, 0xac, 0xd9, 0x44, 0xca, 0x46, 0xed, 0xc6, 0x1c, 0x64, 0xb2, - 0xdc, 0xb8, 0x90, 0xee, 0x99, 0x82, 0x20, 0xb9, 0x09, 0x2d, 0xb2, 0xed, 0x2e, 0xc5, 0xc7, 0x21, 0xa0, 0x11, 0x32, - 0x02, 0x9f, 0x2f, 0x2c, 0x72, 0xe0, 0x3a, 0x0b, 0xd7, 0xf1, 0x37, 0x5a, 0x2a, 0x06, 0xf9, 0x70, 0x88, 0x0b, 0xfd, - 0x2e, 0x44, 0x39, 0x1f, 0xb8, 0x69, 0x2a, 0xdf, 0x19, 0xf2, 0x44, 0x14, 0xbe, 0x5a, 0xed, 0xc3, 0x33, 0x3e, 0xb6, - 0x4d, 0xf0, 0x39, 0xb5, 0x3f, 0xab, 0x27, 0x3b, 0x60, 0x1c, 0x8c, 0xb4, 0xf4, 0x45, 0xa1, 0x95, 0x37, 0xd9, 0xb9, - 0xec, 0x35, 0x1a, 0x4c, 0x47, 0x58, 0x22, 0x10, 0x4e, 0x0d, 0x1c, 0x02, 0xe1, 0x8f, 0x09, 0x9a, 0x24, 0x99, 0x09, - 0x3d, 0x07, 0x31, 0xb1, 0x6b, 0x09, 0xab, 0x55, 0x6e, 0x42, 0x9b, 0xe8, 0x1c, 0x13, 0xe4, 0xa4, 0xec, 0xa7, 0x8c, - 0xa1, 0x5a, 0x99, 0x71, 0x70, 0xbb, 0xd5, 0xdf, 0x56, 0xfb, 0x79, 0x8f, 0x9b, 0x6b, 0x3c, 0xae, 0x03, 0x06, 0x68, - 0x40, 0x2d, 0x37, 0x36, 0xb8, 0x31, 0x70, 0x0f, 0x8d, 0x35, 0x2e, 0xdb, 0x84, 0xa0, 0x2c, 0x1d, 0xe4, 0xcd, 0xcd, - 0xad, 0x0b, 0x18, 0x98, 0xeb, 0x39, 0xe5, 0x48, 0x0d, 0x40, 0x8e, 0x1e, 0x12, 0xe8, 0xdc, 0xfc, 0xac, 0xe8, 0x42, - 0x25, 0x13, 0x97, 0x63, 0xfc, 0xc5, 0xbb, 0xcd, 0x1b, 0x04, 0x37, 0x37, 0x7a, 0x93, 0xdf, 0xdc, 0x04, 0xd8, 0xb7, - 0x2a, 0x0f, 0x3c, 0x5e, 0x30, 0x18, 0x96, 0x31, 0xa5, 0xf4, 0xc6, 0x6f, 0xb6, 0xab, 0xc6, 0xde, 0xd3, 0x0a, 0xef, - 0x60, 0x79, 0x74, 0xe3, 0x5b, 0x5e, 0x98, 0x03, 0x0e, 0xf0, 0x66, 0x03, 0x3e, 0xec, 0xbd, 0x09, 0x73, 0x74, 0x70, - 0xf0, 0x26, 0x14, 0xa8, 0x7f, 0xcd, 0xf4, 0x9d, 0x1b, 0xb8, 0x61, 0x0f, 0xb8, 0x1e, 0xbe, 0xf0, 0x10, 0xe0, 0x9a, - 0x6d, 0x4a, 0x36, 0x6f, 0x75, 0xd0, 0x8b, 0x18, 0x82, 0x6a, 0x43, 0x68, 0x5f, 0x0b, 0x12, 0xe8, 0xf5, 0x8d, 0x0f, - 0xed, 0x1e, 0x23, 0x0c, 0x58, 0xf8, 0xd2, 0x49, 0x8e, 0x45, 0x33, 0x56, 0x4c, 0x58, 0xb1, 0x5a, 0xbd, 0xa7, 0xc6, - 0xf1, 0x6d, 0x23, 0x46, 0x63, 0xde, 0x6b, 0x34, 0xa8, 0x1e, 0x3f, 0x88, 0x0f, 0x74, 0x88, 0xf7, 0xdf, 0x84, 0x05, - 0x42, 0x60, 0x61, 0xc4, 0xf3, 0x85, 0x73, 0xf2, 0x4a, 0x6a, 0xeb, 0x52, 0xa0, 0xb2, 0x91, 0x8c, 0xb4, 0xf0, 0x94, - 0x24, 0xe5, 0x1a, 0x9d, 0x4f, 0x7b, 0x8d, 0x46, 0x86, 0x44, 0x98, 0x0c, 0xb2, 0x21, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, - 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0xb2, 0xf3, 0x5d, 0x9a, 0xb1, 0xc6, 0x8f, 0xe9, 0xda, 0x03, 0xc6, 0x63, 0xea, - 0x11, 0x89, 0x5d, 0x40, 0x96, 0x06, 0xc8, 0xb9, 0x03, 0xb2, 0xd4, 0x40, 0xce, 0x51, 0x7f, 0x0e, 0xd1, 0x8a, 0x72, - 0x14, 0x6f, 0x51, 0xf4, 0x7a, 0x5c, 0x4d, 0xeb, 0xb3, 0x81, 0xb9, 0x0e, 0xed, 0x60, 0x97, 0x03, 0x1e, 0x3a, 0xb1, - 0x6e, 0x80, 0x39, 0x59, 0x06, 0x81, 0x0e, 0x31, 0x8b, 0xef, 0xf4, 0x9f, 0xe8, 0x0e, 0xdf, 0x9b, 0x1f, 0xf7, 0x9e, - 0x32, 0xe9, 0x79, 0x4d, 0xdb, 0xc0, 0x6d, 0x40, 0xb6, 0x20, 0x0a, 0x00, 0xad, 0x6d, 0x74, 0x41, 0x59, 0x7f, 0x70, - 0x2d, 0x37, 0x71, 0x20, 0x64, 0x83, 0xe4, 0x58, 0x7a, 0xa4, 0xf3, 0xcf, 0x3f, 0x03, 0xd4, 0x97, 0x10, 0xc6, 0xc7, - 0x9e, 0x6c, 0xcd, 0x36, 0x6a, 0x04, 0x51, 0x10, 0x87, 0x2e, 0x4a, 0x04, 0xec, 0x8c, 0x20, 0xf0, 0x1e, 0x5b, 0x29, - 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x3d, 0xa8, 0x2a, 0xee, 0xc5, 0xc5, 0x72, 0x33, 0xca, 0x90, 0x86, 0xaa, 0xd4, 0x21, - 0x5e, 0x90, 0x79, 0x81, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0x06, 0x72, 0xe8, 0x3d, 0x29, 0x56, 0x5d, 0x87, 0x2b, 0x7f, - 0xe1, 0x42, 0x9a, 0x0f, 0xd4, 0x70, 0xb5, 0x32, 0x7f, 0xc9, 0x07, 0x2d, 0xcd, 0xc0, 0xdb, 0x70, 0xde, 0x6d, 0xbc, - 0xdc, 0x2d, 0x8b, 0x45, 0x4a, 0xfc, 0x0e, 0x56, 0x83, 0x2e, 0x68, 0x9f, 0x9d, 0x6a, 0xdb, 0x41, 0x7d, 0xae, 0x35, - 0x0a, 0x5e, 0xc8, 0xdc, 0xea, 0x48, 0xc3, 0x73, 0xe5, 0xe7, 0xd5, 0x42, 0xdf, 0x26, 0x79, 0x19, 0xc1, 0x14, 0x8e, - 0x94, 0x08, 0xcc, 0xc6, 0x35, 0x9d, 0x84, 0x1f, 0x75, 0x2a, 0x69, 0x59, 0x48, 0x80, 0x02, 0x47, 0xfa, 0x72, 0x5e, - 0x47, 0xa8, 0x67, 0x68, 0x07, 0x91, 0xf3, 0x4c, 0x68, 0xea, 0xb2, 0xa5, 0x0d, 0x25, 0x15, 0xcc, 0xc4, 0x42, 0xb2, - 0xc5, 0x1c, 0xce, 0xf7, 0x32, 0x2d, 0xc9, 0x78, 0xf2, 0xa5, 0x9e, 0x02, 0xe6, 0x9f, 0x77, 0x6a, 0xc6, 0xf2, 0x45, - 0x60, 0xe7, 0xf9, 0xca, 0x88, 0xfb, 0x6f, 0x5e, 0xe0, 0xc7, 0xa4, 0x73, 0xf8, 0x0a, 0x7f, 0xa4, 0xe4, 0x71, 0xe3, - 0x15, 0x9e, 0x70, 0x62, 0x78, 0x83, 0xe8, 0xcd, 0xeb, 0xeb, 0x17, 0xef, 0x5e, 0xbc, 0x7f, 0x7a, 0xf3, 0xe2, 0xd5, - 0xb3, 0x17, 0xaf, 0x5e, 0xbc, 0xfb, 0x88, 0xff, 0xa6, 0xe4, 0xd5, 0x51, 0xfb, 0xac, 0x85, 0x3f, 0x90, 0x57, 0x47, - 0x1d, 0x7c, 0xa7, 0xc8, 0xab, 0xa3, 0x13, 0x9c, 0xe5, 0xe4, 0xd5, 0x61, 0xe7, 0xe8, 0x18, 0x2f, 0x94, 0x69, 0x32, - 0x13, 0x93, 0x76, 0x0b, 0xff, 0x6d, 0xbf, 0x40, 0xbc, 0xaf, 0x66, 0x31, 0x61, 0x9b, 0xc6, 0x0f, 0x50, 0x86, 0x8e, - 0xa4, 0x36, 0x44, 0x39, 0xf7, 0xd0, 0x69, 0x9a, 0xfb, 0xe8, 0x64, 0x62, 0x28, 0x83, 0x0d, 0x23, 0xa0, 0x15, 0x27, - 0xb6, 0x1d, 0x7e, 0xd4, 0x66, 0xc7, 0x40, 0x9f, 0x78, 0x29, 0x1c, 0x97, 0x2a, 0x9c, 0xb6, 0xd5, 0x62, 0x8c, 0x33, - 0x21, 0x8a, 0x70, 0x01, 0x8c, 0x80, 0xd6, 0x5a, 0xf0, 0xa3, 0x32, 0x58, 0x93, 0x3c, 0x27, 0xed, 0x7e, 0x3b, 0x96, - 0xe7, 0xa4, 0xd3, 0xef, 0xc0, 0x9f, 0x6e, 0xbf, 0x1b, 0xb7, 0x5b, 0xe8, 0xd0, 0x1b, 0xc7, 0x1f, 0x35, 0xb4, 0x1e, - 0x0c, 0xb1, 0xed, 0x42, 0xfe, 0x5d, 0x28, 0xa7, 0xd2, 0x93, 0x56, 0x1d, 0xdb, 0xee, 0xc9, 0x73, 0xa6, 0xf5, 0xb0, - 0xfc, 0x07, 0x40, 0x6d, 0xed, 0x4f, 0x52, 0x6e, 0x1c, 0xfb, 0x8b, 0x1f, 0x49, 0x54, 0x8b, 0x08, 0x13, 0xb2, 0x55, - 0x0b, 0x01, 0xd3, 0xa8, 0xb3, 0xc1, 0x1c, 0x28, 0x92, 0xa2, 0x50, 0x2e, 0xaa, 0x7d, 0xde, 0x14, 0x28, 0x9a, 0x8b, - 0x79, 0x58, 0x53, 0x35, 0xfc, 0xea, 0x99, 0x39, 0xee, 0x73, 0xf9, 0x8a, 0xbe, 0x0a, 0x6b, 0x3c, 0x8f, 0xcf, 0xda, - 0xf9, 0xdb, 0xe2, 0x17, 0x6b, 0x45, 0x51, 0x03, 0x57, 0x09, 0x58, 0x37, 0xaa, 0xa6, 0x3a, 0x87, 0xe7, 0xfb, 0x58, - 0x43, 0x5d, 0x10, 0x8f, 0x7a, 0xfe, 0x54, 0x9a, 0x71, 0x95, 0xca, 0x68, 0xa7, 0x88, 0xd6, 0x66, 0x41, 0x4e, 0x11, - 0x7d, 0x9e, 0x6b, 0x20, 0x08, 0xc2, 0x07, 0x72, 0x08, 0x07, 0xbe, 0x19, 0xa0, 0xd0, 0x74, 0x0e, 0xd4, 0x4a, 0x95, - 0x99, 0x90, 0xfe, 0xd4, 0xb1, 0x09, 0x40, 0xf3, 0x54, 0xa9, 0xa0, 0xf4, 0x27, 0x16, 0xc8, 0x1b, 0xfa, 0x6f, 0xfe, - 0x06, 0x38, 0x0c, 0x35, 0x2a, 0xfa, 0x76, 0x35, 0xb2, 0x9e, 0xdf, 0x3e, 0x6b, 0x1d, 0xbd, 0xf2, 0xf2, 0xd3, 0xdc, - 0xd9, 0x7b, 0xfc, 0xe5, 0x51, 0x72, 0x13, 0x4d, 0xab, 0x8d, 0x5d, 0x20, 0xb4, 0x9e, 0x0f, 0x90, 0x43, 0x85, 0x8e, - 0xf4, 0x4b, 0x86, 0x3d, 0xa4, 0x0e, 0x49, 0xbb, 0x05, 0xd1, 0xcb, 0x76, 0x50, 0xbe, 0x9f, 0x36, 0x60, 0xaa, 0xa2, - 0xbb, 0x26, 0xd0, 0x6a, 0x78, 0xdc, 0xe8, 0xbe, 0xc9, 0xa3, 0x7b, 0x9c, 0x7b, 0x38, 0xc3, 0x0e, 0x59, 0x43, 0x1e, - 0x4a, 0x64, 0xa3, 0xbe, 0x9a, 0x0d, 0xa0, 0x68, 0xde, 0x31, 0x8f, 0xec, 0x39, 0xe3, 0xa8, 0xf3, 0x66, 0xd4, 0x3d, - 0x7c, 0x75, 0x70, 0x10, 0x8a, 0x06, 0x79, 0x8c, 0xf0, 0x92, 0x82, 0x11, 0x35, 0x38, 0x9d, 0x71, 0xc3, 0xc4, 0xc7, - 0xb9, 0x47, 0x1d, 0x17, 0x79, 0xed, 0x58, 0xab, 0x3a, 0x2b, 0x77, 0x83, 0x1b, 0x53, 0x07, 0x35, 0xbc, 0x34, 0x33, - 0xba, 0x4e, 0x0d, 0xca, 0x35, 0x0f, 0x31, 0xd8, 0x96, 0x8d, 0x8f, 0x14, 0xfd, 0xf0, 0xb8, 0xf9, 0xca, 0x9b, 0x70, - 0xcd, 0x34, 0xe9, 0x71, 0xe3, 0x31, 0xfa, 0xe1, 0xb1, 0xe7, 0xe3, 0xc7, 0x2b, 0xf6, 0xc4, 0x71, 0x23, 0x3f, 0x19, - 0xae, 0xf4, 0x27, 0x90, 0xec, 0x0b, 0xf2, 0x13, 0x60, 0x39, 0x25, 0x3f, 0x85, 0xa2, 0x99, 0x83, 0x41, 0xd7, 0x4f, - 0x61, 0x01, 0x3f, 0x32, 0xf2, 0x53, 0x08, 0xd8, 0x8e, 0xa7, 0xfa, 0x47, 0x51, 0xbd, 0xae, 0x0a, 0x6a, 0x14, 0xe3, - 0x5e, 0x56, 0xac, 0x56, 0xf2, 0xe0, 0x40, 0x98, 0x5f, 0xf4, 0x22, 0x39, 0x38, 0xc8, 0xce, 0xa7, 0x9e, 0xed, 0xad, - 0xda, 0x45, 0x5f, 0x34, 0x42, 0x61, 0xcf, 0x34, 0x8d, 0xfb, 0x33, 0xfe, 0xe4, 0x53, 0x56, 0xdd, 0x40, 0xf3, 0xb8, - 0xf3, 0xf0, 0xf4, 0x0c, 0xc3, 0xbf, 0x0f, 0xbd, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, 0xb3, 0xe6, 0x69, 0x85, 0x6c, - 0x17, 0x1e, 0x3e, 0x63, 0x86, 0x9a, 0xf2, 0xe0, 0x80, 0x9f, 0x7b, 0xb8, 0x8c, 0x19, 0x6a, 0x78, 0x16, 0x7b, 0x0f, - 0x4a, 0x7b, 0x32, 0xcd, 0x35, 0xc1, 0xab, 0xb6, 0x7c, 0x50, 0x0c, 0xcf, 0x95, 0xa5, 0x26, 0x7e, 0xec, 0xeb, 0x9c, - 0xb4, 0xec, 0x26, 0xeb, 0xc9, 0x66, 0x7e, 0xd1, 0xee, 0x21, 0x41, 0xf2, 0x86, 0xbc, 0xb8, 0x68, 0x63, 0x50, 0xc9, - 0xf7, 0x73, 0x22, 0x62, 0x49, 0x9c, 0x7f, 0xde, 0x32, 0x13, 0x71, 0x8e, 0xa7, 0x3c, 0x2e, 0xe5, 0xec, 0xd7, 0xce, - 0x7a, 0x5a, 0x7b, 0x4c, 0xea, 0x9e, 0x19, 0x96, 0xfd, 0xbc, 0xf4, 0xf4, 0x83, 0x4d, 0x9a, 0x0f, 0xe1, 0xd1, 0xc0, - 0x12, 0xf3, 0x98, 0x71, 0x6f, 0x63, 0x10, 0x94, 0x39, 0x6f, 0xb4, 0x21, 0x13, 0x3e, 0xd7, 0x71, 0x0e, 0x03, 0xd5, - 0x85, 0xcf, 0x81, 0x4c, 0x25, 0x95, 0x61, 0xb6, 0x6b, 0x18, 0x0a, 0x48, 0x28, 0x70, 0x41, 0x98, 0x27, 0xc1, 0xc3, - 0xed, 0x87, 0x47, 0x38, 0xea, 0xe4, 0xc2, 0x4c, 0xee, 0x3c, 0x87, 0xee, 0xe4, 0xf0, 0x5c, 0xf5, 0x90, 0x6c, 0x34, - 0x2c, 0xb7, 0x7d, 0x21, 0xf5, 0x20, 0x9a, 0xed, 0xe1, 0x05, 0xeb, 0xa1, 0xbc, 0xd9, 0x2c, 0x0d, 0x20, 0x2f, 0x5a, - 0xab, 0x55, 0x7e, 0xee, 0x1a, 0xe9, 0xbb, 0x73, 0x5c, 0xf3, 0x5d, 0x4e, 0xf0, 0xfc, 0x4d, 0x90, 0x41, 0x00, 0x54, - 0x15, 0xf8, 0x6c, 0x31, 0x0f, 0x70, 0xa0, 0xdf, 0x93, 0x83, 0xbf, 0xfa, 0x1d, 0xb0, 0x00, 0x07, 0xf6, 0x89, 0xb9, - 0x60, 0x58, 0x0d, 0x96, 0x27, 0x65, 0x74, 0x74, 0x1e, 0xdd, 0x00, 0xe3, 0xa0, 0xfe, 0x02, 0x4e, 0xbb, 0xfc, 0x1d, - 0x65, 0x36, 0x4e, 0x88, 0x74, 0xaf, 0x9e, 0xd9, 0x51, 0xad, 0x77, 0x7b, 0x66, 0x72, 0x1c, 0xb8, 0xaa, 0xf0, 0x7a, - 0xc0, 0x77, 0x9e, 0x5d, 0x6c, 0xdb, 0xd7, 0xbe, 0x97, 0x65, 0x0f, 0xc0, 0x79, 0xaf, 0xd7, 0x08, 0xff, 0x26, 0x76, - 0x3e, 0xfd, 0x1b, 0xdc, 0x88, 0xfc, 0x09, 0x55, 0x34, 0x68, 0xbc, 0xd6, 0x86, 0x6f, 0x46, 0xce, 0xea, 0x7d, 0x6b, - 0x1c, 0xec, 0xdf, 0xea, 0x1e, 0x22, 0x37, 0xd4, 0x5e, 0x29, 0x32, 0xb2, 0xaf, 0x8e, 0xd7, 0x21, 0x3c, 0xd3, 0xb7, - 0x1d, 0xf0, 0x70, 0x63, 0xa4, 0xe0, 0x4f, 0x6c, 0xf8, 0x24, 0x0a, 0x21, 0x51, 0x6b, 0x5e, 0xcc, 0x90, 0x62, 0xfa, - 0xd0, 0x1e, 0xaf, 0x6b, 0xe4, 0x73, 0xdd, 0xe3, 0xbc, 0x4e, 0x4c, 0xab, 0x6e, 0xb4, 0xd4, 0xc1, 0x36, 0x59, 0x70, - 0x56, 0xf5, 0xae, 0x25, 0x94, 0xea, 0x41, 0x37, 0xfd, 0x28, 0x67, 0xb3, 0xad, 0x5f, 0x39, 0x36, 0xcf, 0xbe, 0xe5, - 0x60, 0xc8, 0xbb, 0x5f, 0x46, 0xab, 0xba, 0x80, 0x63, 0x37, 0xf4, 0x20, 0x2b, 0xc8, 0xc5, 0xd2, 0x3e, 0xc9, 0xc6, - 0x07, 0x62, 0xb8, 0x2e, 0x1f, 0x68, 0xf3, 0xf0, 0xa0, 0x1a, 0xa9, 0x4c, 0x7c, 0xce, 0xc0, 0xbd, 0x6e, 0x58, 0xd3, - 0x0f, 0xf1, 0x7f, 0xe0, 0x80, 0xaf, 0x90, 0x34, 0x36, 0xea, 0x27, 0x78, 0x38, 0x09, 0x14, 0xde, 0xa6, 0xee, 0x27, - 0xe1, 0x7b, 0xa8, 0xd6, 0x75, 0x2a, 0xc6, 0x09, 0xb4, 0xae, 0x58, 0x29, 0x0b, 0x7b, 0xc7, 0x5d, 0x88, 0xd6, 0xb1, - 0x75, 0x18, 0xb5, 0xaf, 0x2d, 0x5d, 0xe6, 0xe0, 0xff, 0xc2, 0x45, 0xfe, 0xac, 0x80, 0xf0, 0x59, 0xbe, 0x3e, 0xed, - 0x67, 0xe1, 0x3f, 0x27, 0x3c, 0x80, 0x7b, 0xc2, 0x92, 0xe7, 0x2c, 0x9f, 0xc0, 0x86, 0x05, 0xca, 0x81, 0x42, 0xe5, - 0x58, 0xae, 0x56, 0xa1, 0xd4, 0x41, 0x15, 0x6c, 0x4c, 0x5d, 0xfb, 0x78, 0x86, 0xd6, 0xdf, 0x41, 0x5d, 0xec, 0xd4, - 0x23, 0xda, 0x84, 0x15, 0xf9, 0x97, 0x4e, 0x79, 0xe2, 0xf5, 0xb5, 0xab, 0x0f, 0x59, 0x4d, 0xb9, 0x1f, 0x6a, 0x7d, - 0xef, 0x3b, 0x3e, 0x63, 0x62, 0x01, 0xaf, 0x16, 0x61, 0x46, 0x24, 0x53, 0xee, 0x1b, 0x28, 0x08, 0x84, 0x9c, 0xe3, - 0x3e, 0x3e, 0x02, 0x5f, 0xe5, 0x68, 0x9d, 0x48, 0xdc, 0x5b, 0x18, 0x81, 0x8e, 0x55, 0x19, 0xf4, 0x03, 0x70, 0x5a, - 0x02, 0x11, 0x8a, 0x90, 0x80, 0xe5, 0x69, 0xd0, 0x0f, 0xb4, 0x8f, 0x54, 0x00, 0x56, 0x63, 0xa0, 0xe4, 0x0e, 0xf0, - 0x3c, 0xaf, 0x88, 0x98, 0x5f, 0x53, 0x79, 0x95, 0x58, 0xac, 0xcd, 0xb4, 0x8f, 0x3a, 0x15, 0x08, 0x8b, 0x64, 0x53, - 0x50, 0x56, 0x1b, 0xea, 0x02, 0x2c, 0x88, 0xc6, 0x58, 0x1e, 0xdd, 0x00, 0x37, 0xc7, 0x52, 0x5b, 0x74, 0xc9, 0xaf, - 0x41, 0x3d, 0x1d, 0x17, 0xf8, 0x46, 0x33, 0x6c, 0x69, 0x4c, 0xd7, 0x84, 0xe3, 0x84, 0x14, 0x11, 0xbd, 0x83, 0xa0, - 0x12, 0x33, 0x9e, 0xc7, 0x19, 0x9e, 0xd1, 0xbb, 0x78, 0x8a, 0x67, 0x3c, 0x7f, 0x62, 0x96, 0x3d, 0x4e, 0x21, 0xc9, - 0x7d, 0x2c, 0xd6, 0x44, 0xbf, 0x89, 0xf5, 0xbb, 0x64, 0xc5, 0x63, 0xe0, 0x55, 0x64, 0x88, 0x7a, 0xa9, 0xb6, 0x29, - 0x67, 0xaa, 0x32, 0x5e, 0x7f, 0xad, 0x42, 0x8a, 0x13, 0x9c, 0xa1, 0x28, 0x13, 0x98, 0xf5, 0x65, 0xfc, 0x1a, 0x02, - 0x4a, 0x27, 0xd8, 0xbc, 0xa7, 0xc5, 0xef, 0x58, 0xf6, 0x4c, 0x14, 0xef, 0xf5, 0x96, 0xcf, 0x10, 0x14, 0x02, 0x17, - 0x15, 0xd9, 0x84, 0xdb, 0xbd, 0x45, 0x5f, 0x54, 0x4d, 0xd1, 0x3b, 0xd3, 0x94, 0x1d, 0xe2, 0x14, 0x22, 0xf1, 0x46, - 0x53, 0xde, 0x68, 0x63, 0xd6, 0x6f, 0x7d, 0xa7, 0xd1, 0x29, 0x2a, 0x4b, 0x22, 0x0c, 0x4f, 0x04, 0x37, 0xf3, 0x58, - 0x10, 0xd9, 0xcc, 0xad, 0x84, 0xb7, 0xd4, 0xc0, 0x8e, 0x73, 0x9c, 0x88, 0x45, 0xae, 0x62, 0xe1, 0xe1, 0x0d, 0xad, - 0x36, 0xd7, 0xf2, 0xce, 0x40, 0x4c, 0xe1, 0x7b, 0xf3, 0x83, 0xe1, 0x1b, 0xad, 0xe2, 0x7f, 0x0b, 0x86, 0x3d, 0x32, - 0x96, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x19, 0x7e, 0xf2, 0x0e, 0xc0, 0x67, 0x58, 0xc8, 0x7b, 0x48, 0x65, 0x3a, - 0xf5, 0x1e, 0x52, 0x19, 0xa4, 0x6a, 0x57, 0xf2, 0x7d, 0x59, 0x29, 0x8b, 0xfc, 0x06, 0x49, 0x8e, 0x4b, 0x75, 0xb0, - 0x20, 0x32, 0x82, 0x76, 0xb5, 0x28, 0x37, 0xe3, 0x39, 0xc4, 0x14, 0x84, 0xc6, 0xcd, 0x37, 0xbd, 0x83, 0xef, 0x7b, - 0x93, 0xcf, 0x5c, 0xfe, 0xbd, 0xc9, 0xd7, 0x1d, 0x39, 0x8c, 0xaf, 0xdf, 0x76, 0x6a, 0xcb, 0x78, 0x61, 0xb1, 0xf6, - 0x43, 0xf9, 0x82, 0x4b, 0x4b, 0xbf, 0x94, 0x4d, 0xda, 0x78, 0xe2, 0x21, 0x65, 0xb3, 0xe2, 0xe1, 0x3a, 0xb8, 0xdd, - 0x3a, 0x0c, 0x79, 0x93, 0xb4, 0x11, 0x3a, 0xb4, 0xc2, 0x55, 0x1e, 0x6a, 0xc9, 0xe9, 0xf0, 0xf1, 0x11, 0xdc, 0xbd, - 0xcc, 0xf2, 0x0d, 0x5f, 0x29, 0x53, 0xad, 0xd9, 0x6e, 0x1d, 0xf2, 0x9d, 0x55, 0x1a, 0x6d, 0x3c, 0x63, 0x64, 0x09, - 0xce, 0x65, 0xb4, 0x30, 0xaa, 0x06, 0xf0, 0x21, 0x7d, 0x91, 0xff, 0xb6, 0xa0, 0xa9, 0xfe, 0x3e, 0x34, 0x29, 0xaf, - 0x17, 0xca, 0x25, 0x35, 0x39, 0x0c, 0xa2, 0x83, 0x6c, 0x49, 0x2f, 0x27, 0xe4, 0x47, 0x24, 0xea, 0xa2, 0xf3, 0x76, - 0x3f, 0xea, 0x1e, 0xf2, 0x43, 0x1e, 0x03, 0x0f, 0x1b, 0x36, 0x5d, 0x85, 0x66, 0xdb, 0xd5, 0xb9, 0x5a, 0x8c, 0x78, - 0x62, 0x9b, 0xaf, 0x3a, 0x28, 0x53, 0xcd, 0x1c, 0x21, 0x0b, 0x50, 0xcc, 0xf5, 0xe2, 0x65, 0xd7, 0xbb, 0x39, 0xe4, - 0x31, 0xf4, 0x03, 0xb5, 0x3a, 0xa6, 0x56, 0x39, 0xb8, 0xdf, 0x16, 0x80, 0x60, 0xae, 0xa3, 0xda, 0x5c, 0x4c, 0x7a, - 0x33, 0xac, 0x3a, 0x3b, 0xe4, 0xd5, 0x08, 0xfd, 0x32, 0xdb, 0xfd, 0xb9, 0xa9, 0x55, 0x5d, 0x1e, 0x7a, 0x10, 0xf9, - 0x6d, 0xc1, 0x73, 0xbf, 0x53, 0xbf, 0x5b, 0x9b, 0xe3, 0x77, 0x5a, 0x9f, 0xa5, 0x57, 0x64, 0xbb, 0xd7, 0xad, 0x99, - 0xd6, 0x67, 0x7b, 0x0d, 0x3e, 0x82, 0x30, 0x29, 0xbd, 0xd2, 0x89, 0x90, 0x21, 0x3f, 0xfc, 0x80, 0x6c, 0xeb, 0xaf, - 0x17, 0xca, 0xe5, 0x97, 0x88, 0x00, 0xd9, 0x55, 0xd7, 0x65, 0x75, 0xe8, 0xa3, 0x6c, 0xe2, 0xd5, 0x21, 0xf7, 0x56, - 0xee, 0xe9, 0xdd, 0x5c, 0xc4, 0x0e, 0x5f, 0xfb, 0xad, 0x78, 0x0b, 0x39, 0x81, 0x78, 0xd8, 0xee, 0xfc, 0xb2, 0x20, - 0x67, 0x37, 0xb7, 0x50, 0xd2, 0x9f, 0xb8, 0x2b, 0xfd, 0x81, 0x99, 0xeb, 0x06, 0x7e, 0x1e, 0x75, 0x61, 0xea, 0x9b, - 0x3d, 0x1c, 0x76, 0xa0, 0x0f, 0x0d, 0x87, 0xcd, 0x06, 0x5d, 0x66, 0x05, 0x91, 0x2b, 0x5e, 0x18, 0x3c, 0xbb, 0x20, - 0xed, 0x3e, 0x8f, 0xed, 0x66, 0xd2, 0xa2, 0x51, 0xbb, 0xc9, 0xbd, 0x99, 0x01, 0x7e, 0xd9, 0xb2, 0x7e, 0x11, 0xb7, - 0x4e, 0x1e, 0x94, 0x5c, 0xb1, 0x6a, 0x7d, 0x2a, 0x78, 0xd5, 0x1b, 0x8e, 0x37, 0xd3, 0xdd, 0xba, 0xc1, 0xed, 0xae, - 0x83, 0x27, 0xbc, 0xc0, 0x62, 0xd0, 0xda, 0x4d, 0x7c, 0x02, 0x1c, 0x50, 0xd4, 0x7a, 0xd8, 0x05, 0x17, 0xca, 0x12, - 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x0c, 0x1c, 0x4d, 0x49, 0x8f, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, 0xd8, 0xc1, - 0x51, 0xbb, 0xdd, 0xe9, 0xe2, 0xe8, 0xa4, 0x0b, 0x03, 0x6d, 0x44, 0xdd, 0xc3, 0x59, 0x6e, 0x00, 0xe8, 0xe5, 0xac, - 0x6d, 0xbb, 0x8f, 0x21, 0x5a, 0x93, 0x2f, 0x5e, 0xf3, 0xc3, 0x30, 0x6c, 0x47, 0x0f, 0x5b, 0xed, 0xee, 0x59, 0x03, - 0x00, 0xd4, 0xb4, 0x1f, 0xb6, 0xc6, 0xeb, 0x85, 0xaa, 0x57, 0x29, 0x11, 0xbe, 0x5e, 0xad, 0xe1, 0xaa, 0x35, 0xda, - 0xeb, 0x6a, 0x0a, 0xae, 0xaa, 0x15, 0xce, 0x4d, 0x11, 0xa7, 0xb4, 0xf1, 0xb7, 0x45, 0x68, 0x06, 0x12, 0x82, 0x74, - 0x1e, 0x75, 0x3b, 0x5d, 0x64, 0xc6, 0xa2, 0x2c, 0x7e, 0x94, 0xfb, 0x64, 0xab, 0x48, 0x43, 0x01, 0x92, 0x94, 0xb3, - 0x13, 0x0b, 0x90, 0xa8, 0x39, 0xb9, 0x68, 0x37, 0x67, 0x2c, 0x72, 0x13, 0xd0, 0xa9, 0xb0, 0x9c, 0xe5, 0x2a, 0xd8, - 0x24, 0x0f, 0x10, 0xe7, 0x60, 0x5c, 0xf4, 0xb0, 0xdb, 0x7f, 0x18, 0x75, 0x4f, 0x3b, 0x86, 0xe8, 0xf1, 0xf3, 0x4e, - 0x2d, 0x4d, 0x4f, 0x3d, 0xea, 0xea, 0x34, 0xe8, 0x3a, 0x7a, 0xd8, 0x85, 0x32, 0x36, 0xc5, 0x2f, 0x05, 0x51, 0x26, - 0xaa, 0x62, 0x10, 0x5a, 0x22, 0xae, 0xe5, 0x9e, 0xd6, 0xb2, 0xcf, 0x4e, 0x8e, 0x1f, 0x76, 0x7d, 0xa8, 0x95, 0xb3, - 0xd0, 0x0b, 0x6d, 0x27, 0xe2, 0x66, 0x07, 0x4b, 0x8b, 0x0e, 0xa3, 0x6e, 0xbc, 0x35, 0x41, 0xb3, 0x69, 0x0e, 0x35, - 0x0e, 0x78, 0x0a, 0xc7, 0x4b, 0x69, 0xf5, 0x25, 0xde, 0xfd, 0x58, 0x65, 0x68, 0xe2, 0x2b, 0x9c, 0xdd, 0x3d, 0xa5, - 0xf7, 0x90, 0xa4, 0x7f, 0x55, 0x79, 0x45, 0xf3, 0xaf, 0x54, 0xbe, 0xa1, 0x10, 0x3a, 0x23, 0x1f, 0x06, 0x36, 0xb0, - 0x77, 0x3d, 0xf7, 0x27, 0x70, 0x11, 0x66, 0x39, 0x5c, 0x68, 0x3a, 0x25, 0x68, 0xc5, 0x0b, 0x8c, 0x7c, 0x56, 0x57, - 0x0f, 0xab, 0xcf, 0x63, 0x6b, 0x52, 0xe0, 0xeb, 0xb6, 0x9e, 0xf3, 0xef, 0x95, 0x8b, 0xca, 0xab, 0xec, 0xa8, 0x8b, - 0x22, 0x7b, 0x59, 0x1e, 0xb5, 0x51, 0xe4, 0x99, 0x90, 0xd8, 0x23, 0x39, 0x49, 0xc8, 0x20, 0xb8, 0x0b, 0x70, 0x70, - 0x1f, 0xe0, 0xc0, 0xf8, 0x30, 0x7f, 0x00, 0x37, 0xf2, 0x00, 0x07, 0xc6, 0x95, 0x39, 0xc0, 0x81, 0x62, 0x39, 0x44, - 0xd4, 0x0a, 0x86, 0x38, 0x83, 0xd2, 0xda, 0xb3, 0xba, 0x2c, 0x7d, 0xe5, 0xbe, 0x4a, 0xd7, 0x6b, 0x93, 0xe2, 0x49, - 0x99, 0x53, 0xbd, 0x43, 0xcd, 0x8b, 0xd0, 0x01, 0x75, 0xcc, 0x7a, 0x80, 0x41, 0x00, 0xa1, 0xf7, 0xee, 0x45, 0xb9, - 0x2a, 0x18, 0x07, 0x3b, 0x86, 0x95, 0x06, 0x9f, 0xf3, 0xc0, 0x3f, 0xc3, 0x02, 0x3c, 0xce, 0x5d, 0x61, 0x10, 0x2b, - 0xdc, 0xef, 0x4c, 0x88, 0xb9, 0xfb, 0xad, 0x44, 0xf9, 0x0b, 0xde, 0x21, 0xb1, 0x16, 0x2d, 0x60, 0xb9, 0x65, 0x62, - 0xff, 0x8c, 0x58, 0x7d, 0x04, 0x37, 0x63, 0x1b, 0x9f, 0x0d, 0x24, 0xc2, 0x1b, 0x2d, 0x50, 0x39, 0xf9, 0xf0, 0xc6, - 0xc4, 0x0a, 0xd2, 0x9f, 0x10, 0x2c, 0x0c, 0xe2, 0x01, 0x0b, 0xb8, 0xd0, 0x98, 0x14, 0x4c, 0xca, 0xc0, 0x04, 0xd1, - 0x0b, 0x44, 0xee, 0x5e, 0x45, 0x74, 0x29, 0xe3, 0x3c, 0xd0, 0x1d, 0xd6, 0x67, 0x6b, 0xc4, 0xe1, 0x4c, 0x14, 0x32, - 0x36, 0x4f, 0xa4, 0x38, 0x30, 0xce, 0xcb, 0xf7, 0x07, 0xe3, 0x2c, 0x59, 0x63, 0x73, 0x87, 0x5d, 0x16, 0xb2, 0x57, - 0xda, 0x7e, 0xa9, 0x24, 0x59, 0x7f, 0x6b, 0x42, 0xb2, 0x36, 0x23, 0x6f, 0xa2, 0xd5, 0x80, 0xaa, 0x48, 0x1a, 0x50, - 0xd8, 0x44, 0x63, 0x89, 0x97, 0x65, 0xc9, 0x78, 0x59, 0x2e, 0xc3, 0x49, 0xab, 0xb5, 0x5e, 0xe3, 0x82, 0xe9, 0xa8, - 0x30, 0x3b, 0x4b, 0x40, 0xbe, 0x9c, 0x8a, 0x5b, 0x2f, 0x57, 0xc6, 0xe5, 0x2c, 0xf5, 0x12, 0x05, 0x9e, 0x11, 0x6c, - 0xb0, 0xc6, 0x5f, 0xb9, 0xe4, 0x00, 0x4f, 0x3b, 0xbb, 0x91, 0x10, 0x19, 0xa3, 0x10, 0x3c, 0xcc, 0x6b, 0x72, 0x8d, - 0xa7, 0x3c, 0x65, 0xbb, 0xdb, 0x04, 0x33, 0xe6, 0x7f, 0xaf, 0x45, 0x87, 0x40, 0x86, 0xdd, 0xd3, 0xa8, 0x03, 0x8b, - 0xb8, 0x82, 0x0e, 0x7c, 0x19, 0x3c, 0xf5, 0x71, 0x33, 0xa3, 0xf7, 0x62, 0xa1, 0x00, 0x2e, 0x0b, 0x25, 0xde, 0xd8, - 0xb8, 0x07, 0xfb, 0x2d, 0xec, 0x42, 0x20, 0x2c, 0x21, 0x64, 0x40, 0x0b, 0x9b, 0x10, 0x15, 0x2d, 0x3c, 0x12, 0x4a, - 0x89, 0x59, 0xdc, 0xc2, 0x3a, 0x5e, 0x44, 0x6b, 0x5d, 0x06, 0xf5, 0xba, 0xc9, 0xdd, 0x5b, 0x92, 0xd5, 0x26, 0x58, - 0x58, 0xe9, 0x50, 0x11, 0xe5, 0xdd, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbf, 0x7e, 0x65, 0x43, 0x36, 0xf3, 0x31, - 0xb8, 0x6c, 0x5a, 0xd5, 0xd8, 0x8d, 0x7e, 0x84, 0x29, 0xac, 0x14, 0xa5, 0x46, 0x38, 0x85, 0x96, 0x5f, 0xe4, 0x2a, - 0x8b, 0xcc, 0xe5, 0xc5, 0x33, 0x51, 0xcc, 0xa8, 0xb9, 0x31, 0xc2, 0x37, 0xb9, 0x7d, 0x75, 0x5d, 0x3f, 0xec, 0x52, - 0x4d, 0xf2, 0xdd, 0xe6, 0x55, 0xc4, 0x22, 0xd1, 0xf2, 0x2b, 0x68, 0x03, 0x74, 0xe5, 0xf2, 0xd1, 0xdc, 0x82, 0xd8, - 0xc0, 0xf7, 0x1e, 0x79, 0x79, 0x6b, 0xa8, 0x4b, 0x10, 0x34, 0xb8, 0xc6, 0x4f, 0x56, 0xf0, 0xc4, 0xbb, 0x2e, 0xd4, - 0xec, 0x91, 0x15, 0x2f, 0x82, 0x56, 0x50, 0x7f, 0x74, 0x56, 0xab, 0x12, 0x5c, 0xd0, 0xd4, 0x28, 0x13, 0x20, 0x7a, - 0x94, 0xef, 0xdb, 0x71, 0x10, 0x4d, 0xdc, 0xdd, 0xf3, 0x45, 0xdb, 0xd1, 0xd9, 0xac, 0x52, 0x27, 0x96, 0x57, 0x26, - 0xe0, 0xe1, 0x68, 0x5e, 0x90, 0x41, 0xd8, 0x4b, 0x64, 0xa5, 0xf6, 0xd0, 0xe5, 0xa2, 0x5e, 0x98, 0x9d, 0xb7, 0x59, - 0xf3, 0x64, 0xb5, 0xca, 0x2e, 0xda, 0xac, 0xdd, 0x35, 0xef, 0xcd, 0x05, 0x32, 0x01, 0x9a, 0xcb, 0xc7, 0x3c, 0x09, - 0x40, 0x3b, 0x3b, 0x4e, 0x74, 0x38, 0x05, 0x17, 0x21, 0x99, 0x2c, 0x54, 0xd5, 0x97, 0x00, 0xe3, 0x52, 0x62, 0xf4, - 0xf8, 0x05, 0xea, 0xb7, 0xe3, 0x6d, 0x57, 0xe9, 0x66, 0xfb, 0xd0, 0xbb, 0x70, 0x29, 0x10, 0xee, 0x40, 0xc8, 0x03, - 0xd0, 0xef, 0x2e, 0x73, 0x30, 0x0d, 0x02, 0x54, 0xce, 0x41, 0xa4, 0xe5, 0xb3, 0xc5, 0xec, 0x59, 0x41, 0xf5, 0x32, - 0x3c, 0xe1, 0x13, 0xae, 0x64, 0x4c, 0x41, 0xba, 0xdd, 0x95, 0xbe, 0xde, 0x2d, 0x41, 0x25, 0xb5, 0xc0, 0xb3, 0x91, - 0xe2, 0xc9, 0x17, 0x69, 0x17, 0x0e, 0x61, 0xbd, 0xb2, 0x12, 0x27, 0x68, 0x8d, 0x33, 0x31, 0xa1, 0x05, 0x57, 0xd3, - 0xd9, 0xbf, 0xb5, 0x3a, 0x6c, 0xa0, 0x86, 0xfa, 0xc2, 0x0a, 0x40, 0x42, 0xf3, 0x74, 0xb5, 0xe2, 0x47, 0xdf, 0xbf, - 0x4f, 0x72, 0x3e, 0xe1, 0x6d, 0xdc, 0xc1, 0xc7, 0xb8, 0x8b, 0xdb, 0x2d, 0xdc, 0xee, 0xc2, 0xd5, 0x7d, 0x92, 0x2d, - 0x52, 0x06, 0xf6, 0xb1, 0xab, 0x95, 0xba, 0x88, 0xce, 0x0e, 0xcb, 0x70, 0xfb, 0xaa, 0x88, 0x2c, 0xba, 0x78, 0x51, - 0xdf, 0x6d, 0xb8, 0xbc, 0x20, 0xf0, 0x63, 0xb5, 0x8d, 0x7d, 0xd5, 0x49, 0xa9, 0x5f, 0xb8, 0x38, 0xee, 0x83, 0x3d, - 0xb7, 0x59, 0xd9, 0x26, 0x98, 0x7d, 0x9b, 0x9f, 0x71, 0xf5, 0xb3, 0xa9, 0x4a, 0xc4, 0x70, 0xd0, 0xab, 0xd0, 0x03, - 0x5d, 0x90, 0xf6, 0xc1, 0x01, 0x58, 0x1d, 0x79, 0xb3, 0xe1, 0x26, 0xfa, 0x01, 0x6f, 0xd6, 0xd2, 0x20, 0x58, 0x01, - 0x18, 0x77, 0xbe, 0xe1, 0x64, 0x69, 0x60, 0xab, 0x80, 0x0a, 0xab, 0xc2, 0x0f, 0x28, 0xe7, 0x93, 0x0a, 0x2d, 0x44, - 0xc3, 0x11, 0x66, 0x23, 0x9d, 0xec, 0xb7, 0xb0, 0x18, 0x8f, 0x25, 0x53, 0x70, 0x74, 0x14, 0xec, 0x2b, 0x2b, 0xa4, - 0x3e, 0x45, 0x46, 0x6c, 0xc2, 0xf3, 0x4b, 0xf5, 0x89, 0x15, 0x42, 0x7f, 0x6a, 0x0d, 0x46, 0x1c, 0xe8, 0x55, 0x0c, - 0x70, 0x92, 0xf1, 0x39, 0x54, 0x9d, 0x14, 0xe0, 0xf4, 0x03, 0x7f, 0x79, 0x1a, 0xfb, 0x6d, 0x02, 0xf9, 0xfa, 0x60, - 0xc2, 0xba, 0xe0, 0xb4, 0xa0, 0xb7, 0xaf, 0xf3, 0x2b, 0xd8, 0x51, 0x97, 0x05, 0xa3, 0x90, 0x0d, 0x49, 0xef, 0xa0, - 0x29, 0xf8, 0x80, 0x36, 0x5f, 0x6a, 0xc0, 0xc5, 0x67, 0xfa, 0xc3, 0x54, 0x74, 0x41, 0x0b, 0xa3, 0xb2, 0x2d, 0x9d, - 0xa9, 0x4f, 0xe9, 0x2a, 0xd3, 0x84, 0x85, 0x2a, 0xa7, 0xb0, 0xc6, 0x36, 0xea, 0x89, 0x3f, 0x98, 0x94, 0xca, 0x69, - 0x3c, 0x18, 0xea, 0xbf, 0xaf, 0x4d, 0xc9, 0x16, 0xb6, 0x41, 0x67, 0xd6, 0x58, 0xbf, 0x18, 0xea, 0x95, 0x6f, 0x63, - 0xb8, 0x87, 0x85, 0x67, 0x2b, 0x6b, 0xe4, 0xf3, 0xc4, 0x91, 0xcd, 0x93, 0xf5, 0x5a, 0x0f, 0x44, 0xc6, 0xa0, 0x07, - 0x7a, 0xeb, 0xb6, 0x4d, 0x0b, 0xb6, 0x47, 0xf9, 0xd5, 0x6d, 0xe1, 0x19, 0x87, 0x57, 0x38, 0x5d, 0x7b, 0xd7, 0xaa, - 0x10, 0x5f, 0x2c, 0x48, 0x5a, 0x5e, 0x8a, 0x99, 0x8e, 0xd7, 0xd9, 0x31, 0xf6, 0x46, 0x0e, 0xf4, 0xfc, 0xfa, 0x8b, - 0x81, 0xb5, 0xfb, 0xfd, 0xa6, 0x2c, 0x98, 0xd1, 0x11, 0xcb, 0xca, 0x09, 0x25, 0xee, 0xfc, 0x7c, 0xc3, 0xa3, 0x0a, - 0x15, 0xec, 0xf3, 0x55, 0xb0, 0xa7, 0x4d, 0x84, 0xcb, 0x19, 0xfd, 0xcb, 0xfc, 0x30, 0x81, 0x75, 0x4a, 0x2d, 0x5b, - 0x52, 0x08, 0x29, 0x2f, 0x4d, 0x9a, 0x39, 0x7a, 0xe0, 0x88, 0x7c, 0x09, 0x5d, 0x00, 0xaf, 0x9f, 0x16, 0x62, 0xae, - 0x11, 0xc1, 0xfe, 0xb6, 0xe3, 0xd6, 0xbe, 0x02, 0xe0, 0xed, 0xb0, 0x57, 0xfd, 0xd3, 0x02, 0xf6, 0x37, 0x28, 0x4b, - 0xba, 0xf1, 0x76, 0xcc, 0xf1, 0x5f, 0x08, 0x08, 0x97, 0x6e, 0xf0, 0x30, 0xb2, 0xe8, 0x54, 0xb2, 0x66, 0xe5, 0xcf, - 0xad, 0x92, 0x80, 0x61, 0xf5, 0x82, 0x3e, 0x1b, 0xb7, 0x55, 0xdc, 0x64, 0xfe, 0x07, 0x15, 0x34, 0x16, 0x7c, 0x6b, - 0x24, 0x15, 0xcb, 0xe2, 0xb6, 0x4f, 0x9d, 0xff, 0xaa, 0x73, 0x5c, 0xfb, 0xaa, 0xf6, 0x44, 0xe6, 0x48, 0x87, 0x27, - 0x0e, 0xd0, 0xc1, 0xc1, 0x46, 0x06, 0x1d, 0x03, 0xe0, 0x91, 0x65, 0xbf, 0xdc, 0xf2, 0x39, 0x76, 0x4c, 0x6b, 0x1e, - 0x8b, 0xc0, 0x67, 0xee, 0x1c, 0x37, 0x67, 0x26, 0xf2, 0x84, 0xca, 0xa9, 0x2b, 0x0c, 0x70, 0x7c, 0xbc, 0x95, 0x0a, - 0xf8, 0x1e, 0xac, 0x77, 0x4c, 0x60, 0x83, 0xdf, 0x32, 0x93, 0xda, 0x55, 0xd0, 0x2d, 0xd0, 0x72, 0x17, 0x53, 0xb9, - 0xb1, 0xc0, 0xc1, 0xe6, 0x44, 0x76, 0x0e, 0x7d, 0xa3, 0x4e, 0xc9, 0x7a, 0x3c, 0xd9, 0x6d, 0xf4, 0x95, 0xcb, 0x5d, - 0xc9, 0x15, 0x6d, 0x1b, 0xb1, 0xea, 0x99, 0x5c, 0x55, 0x99, 0x3a, 0x55, 0xd7, 0xbc, 0x95, 0xa5, 0x4d, 0x69, 0x97, - 0x64, 0xee, 0xb6, 0x98, 0x7f, 0x15, 0xde, 0x68, 0x94, 0x17, 0xa1, 0x60, 0x8f, 0x25, 0x87, 0x3d, 0x4e, 0xe0, 0x7a, - 0x61, 0xb5, 0x0a, 0xe1, 0xcf, 0xae, 0x31, 0xec, 0x32, 0x5d, 0xfa, 0xc0, 0x37, 0xf8, 0x15, 0x2f, 0x52, 0xaf, 0xb5, - 0x83, 0x04, 0xeb, 0x2e, 0x3b, 0x68, 0x38, 0x4e, 0xdc, 0x17, 0xbc, 0x13, 0xad, 0x9c, 0xcb, 0xc1, 0x24, 0xf9, 0xc6, - 0xdb, 0x72, 0x25, 0x6b, 0x59, 0x0b, 0xf3, 0xbe, 0x21, 0xc1, 0x10, 0xb3, 0x29, 0xad, 0xe3, 0x56, 0xd4, 0x46, 0x81, - 0x2d, 0x56, 0xa1, 0xff, 0xb7, 0x8a, 0x24, 0x26, 0xf3, 0xbf, 0x4e, 0x4f, 0x4f, 0x6d, 0x8a, 0xb5, 0xf9, 0x93, 0xda, - 0x03, 0x4e, 0x27, 0xb0, 0xaf, 0x3c, 0x61, 0x5a, 0x87, 0xfc, 0x16, 0x86, 0x42, 0x24, 0xb9, 0x70, 0xec, 0x12, 0x44, - 0xe5, 0x02, 0xca, 0x03, 0xec, 0xdf, 0x93, 0x8d, 0x72, 0xee, 0x9d, 0x24, 0x17, 0x47, 0xb8, 0x6c, 0x90, 0x7d, 0xd5, - 0x9f, 0x03, 0x63, 0x26, 0x03, 0x4f, 0x03, 0x04, 0xd8, 0xfc, 0xd6, 0x2c, 0xad, 0xb5, 0x94, 0xc1, 0x81, 0x12, 0x8b, - 0x64, 0x6a, 0x34, 0xff, 0xf6, 0x43, 0x97, 0xb5, 0x6f, 0xec, 0x40, 0x50, 0x2e, 0xb2, 0xb4, 0xe1, 0x30, 0x83, 0x1f, - 0xcb, 0xc8, 0x97, 0x7b, 0xaf, 0xd8, 0x82, 0xfd, 0x88, 0xf7, 0xaa, 0x14, 0xf8, 0xb8, 0x2c, 0x38, 0xcd, 0x7e, 0xc4, - 0x7b, 0x55, 0x04, 0x4c, 0x70, 0x85, 0xd4, 0x41, 0x24, 0xb1, 0x7e, 0x4f, 0x3a, 0x0e, 0x72, 0xa0, 0xa0, 0x59, 0xa0, - 0x0f, 0xb2, 0xe7, 0x36, 0x68, 0x62, 0xd4, 0xc1, 0x36, 0xee, 0x97, 0x09, 0x85, 0x6a, 0x22, 0x88, 0x43, 0x20, 0xb9, - 0x72, 0x36, 0xfa, 0xeb, 0xf1, 0xc6, 0x82, 0x68, 0x65, 0x32, 0xb9, 0x78, 0xce, 0xc3, 0x7c, 0x73, 0xb1, 0x90, 0x5f, - 0xcd, 0x5b, 0xa0, 0x5a, 0x95, 0x2a, 0xdd, 0x2f, 0xbe, 0x5d, 0x30, 0xf1, 0x8a, 0xe8, 0xad, 0x77, 0x79, 0x07, 0xcf, - 0x9d, 0xdf, 0x05, 0x2e, 0x09, 0x9e, 0x04, 0xd7, 0x98, 0xea, 0x5e, 0x80, 0x07, 0x42, 0xcf, 0xa4, 0x0a, 0xb0, 0xce, - 0x93, 0x10, 0x49, 0x6c, 0xbf, 0x85, 0x2d, 0x6b, 0xf4, 0x22, 0x77, 0x42, 0x0a, 0x9c, 0xab, 0xba, 0x89, 0x19, 0xe5, - 0x3a, 0xba, 0xd8, 0xa5, 0x9c, 0xb3, 0x44, 0x19, 0x04, 0xd8, 0xb7, 0x68, 0x28, 0xf2, 0xe7, 0x1a, 0x14, 0xfa, 0x2d, - 0x6b, 0x9b, 0x72, 0x05, 0x8b, 0xe7, 0xa5, 0x00, 0x51, 0xe3, 0xf9, 0xa4, 0xac, 0x33, 0xcf, 0x16, 0x13, 0x9e, 0x57, - 0xc8, 0x50, 0x30, 0x39, 0x17, 0x39, 0x3c, 0x25, 0x51, 0x16, 0xd1, 0x74, 0xa8, 0x86, 0xef, 0x86, 0x84, 0x95, 0x75, - 0xf4, 0x31, 0xc5, 0xf3, 0xaa, 0x06, 0x30, 0x17, 0x97, 0xfe, 0x9b, 0xf3, 0xf2, 0x75, 0xfe, 0x4e, 0xcc, 0xab, 0x7c, - 0x47, 0xe3, 0x5c, 0xc4, 0x76, 0x6b, 0x37, 0x8c, 0xd6, 0xfa, 0xb5, 0x27, 0x6f, 0xfb, 0x7e, 0xe0, 0xd5, 0x0b, 0x68, - 0x6b, 0xfd, 0x5e, 0x54, 0x99, 0x35, 0x62, 0xe5, 0xe3, 0x08, 0x55, 0x7b, 0xf5, 0xaa, 0xb9, 0xad, 0x08, 0x50, 0x29, - 0x78, 0xba, 0x95, 0xff, 0x44, 0x99, 0x7c, 0x73, 0x0e, 0x95, 0xe1, 0x81, 0x1c, 0x19, 0xaa, 0x7a, 0xc0, 0x45, 0xf9, - 0xa1, 0x9f, 0xbe, 0x0a, 0x74, 0xe0, 0xdc, 0x5d, 0x17, 0xc8, 0x9c, 0xc9, 0x50, 0xe0, 0xe5, 0x80, 0x0e, 0x63, 0x23, - 0x0f, 0xc5, 0x02, 0x6c, 0x7b, 0x6e, 0x0b, 0xae, 0x5c, 0x84, 0x5e, 0x3c, 0x60, 0xc3, 0x78, 0x59, 0x8f, 0xe2, 0x6b, - 0xe2, 0x08, 0x3b, 0x73, 0x4e, 0x1d, 0xf6, 0x96, 0x0e, 0x71, 0x46, 0xc0, 0xf6, 0xd8, 0xb1, 0xa7, 0x6f, 0xc2, 0x04, - 0xf5, 0xeb, 0x1c, 0xfe, 0x72, 0x8d, 0x33, 0x9c, 0xa0, 0xf8, 0x32, 0x84, 0x0b, 0xac, 0x35, 0x06, 0xf0, 0x25, 0x86, - 0x54, 0x81, 0x47, 0x6a, 0xa2, 0x25, 0x56, 0x7b, 0x11, 0x88, 0x96, 0xca, 0xbf, 0x1d, 0x67, 0x2e, 0x0e, 0xb6, 0xe6, - 0x5e, 0x9f, 0x69, 0xe1, 0x70, 0x92, 0x84, 0xb5, 0x73, 0x86, 0x93, 0x8b, 0x7d, 0x5e, 0x3b, 0x31, 0xc1, 0xda, 0xdb, - 0x3f, 0x55, 0x40, 0x8f, 0x06, 0xa7, 0x8a, 0xa1, 0x21, 0x10, 0x33, 0x01, 0xbc, 0x99, 0xfd, 0xa3, 0xcd, 0xc3, 0xf9, - 0x60, 0x8d, 0xbd, 0xaf, 0xb8, 0xd6, 0xd5, 0xa6, 0x12, 0x65, 0xbd, 0xc6, 0x83, 0x69, 0x82, 0xd3, 0x04, 0xcf, 0x93, - 0xa1, 0x77, 0xdc, 0xcc, 0x12, 0xdf, 0xa4, 0x6b, 0xb5, 0x7a, 0x6a, 0xcd, 0x08, 0x91, 0xf9, 0x69, 0xe8, 0x0f, 0xea, - 0x03, 0xc2, 0xc7, 0x90, 0x05, 0xb4, 0xa4, 0x6f, 0xff, 0x36, 0xcc, 0x33, 0xd9, 0xa8, 0x11, 0xf2, 0xc8, 0x90, 0x91, - 0xbe, 0xfb, 0x51, 0x66, 0x99, 0xd6, 0x1a, 0xc1, 0xfc, 0x6e, 0x2f, 0x68, 0xb8, 0xf6, 0x3c, 0x2d, 0x5b, 0x69, 0xb6, - 0x03, 0x88, 0x62, 0x8c, 0x93, 0x94, 0xb7, 0x46, 0x62, 0xb5, 0x0a, 0x4d, 0x0a, 0xe1, 0xd1, 0x8c, 0x51, 0xb9, 0x28, - 0xf4, 0xcb, 0x71, 0x61, 0x8e, 0x22, 0xcd, 0xef, 0x62, 0x6b, 0x23, 0x9a, 0x83, 0xdb, 0x23, 0x18, 0x6e, 0x84, 0x92, - 0x88, 0x9a, 0xc8, 0x3d, 0x4a, 0x2a, 0xcb, 0x20, 0x49, 0xa4, 0x16, 0xf9, 0xcd, 0x75, 0xa9, 0x39, 0x0c, 0xec, 0x1f, - 0xed, 0x0b, 0x08, 0x37, 0x6f, 0x13, 0x5a, 0x8c, 0xe8, 0x04, 0xd8, 0x58, 0x88, 0x43, 0xb8, 0x95, 0xb0, 0x5a, 0x0d, - 0x86, 0x3d, 0x43, 0x9e, 0xed, 0xcb, 0x79, 0x65, 0x43, 0xbb, 0x1b, 0x80, 0xab, 0x6e, 0x43, 0xcd, 0x95, 0xd6, 0xfd, - 0x50, 0xfd, 0xb8, 0x17, 0xb7, 0x49, 0xf6, 0x7d, 0x8e, 0xea, 0x09, 0xee, 0x9a, 0x05, 0xb8, 0x0e, 0x5d, 0x85, 0x53, - 0xbc, 0x30, 0x36, 0x9c, 0xfa, 0x25, 0x27, 0xaa, 0x1f, 0x70, 0x82, 0x77, 0xa3, 0x09, 0x1b, 0x24, 0x43, 0x9c, 0xba, - 0x38, 0xdf, 0xfb, 0x6f, 0xc3, 0x14, 0xa1, 0x82, 0x68, 0x98, 0x1a, 0x97, 0xed, 0xb4, 0xb2, 0xdb, 0xd7, 0x99, 0x9a, - 0x61, 0xd0, 0x46, 0xcc, 0xa9, 0x6f, 0xc4, 0x9c, 0x35, 0x1a, 0x68, 0x41, 0x52, 0x30, 0x62, 0x5e, 0x78, 0xad, 0x2d, - 0xcc, 0x2b, 0x9f, 0x5e, 0x7b, 0x0b, 0x84, 0x7a, 0x1c, 0x68, 0x9a, 0x82, 0xf7, 0x3c, 0xaa, 0xf7, 0xd4, 0xdd, 0xeb, - 0x52, 0x47, 0x1d, 0x50, 0x24, 0x8c, 0x2f, 0xdc, 0x24, 0x8c, 0x6b, 0xb8, 0x19, 0xf7, 0x58, 0x8f, 0xdb, 0xda, 0x36, - 0xe4, 0x03, 0x31, 0x48, 0x86, 0xc3, 0x9e, 0x70, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x5e, 0x00, 0xa9, 0x16, 0xef, 0xab, - 0xda, 0xbc, 0xf2, 0xe6, 0xee, 0x61, 0xd1, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, 0x1f, 0xaa, 0xe2, 0x83, 0x1d, - 0x75, 0x20, 0x0a, 0x5a, 0xdc, 0xaa, 0x09, 0xa4, 0xc6, 0xcc, 0x2e, 0x54, 0xcd, 0x1c, 0x1d, 0x4a, 0x08, 0x43, 0x96, - 0x57, 0xdd, 0xdd, 0xe7, 0x9e, 0x6a, 0x88, 0xc3, 0xa9, 0x7f, 0x65, 0x8c, 0x58, 0xc3, 0xa0, 0x93, 0x06, 0xda, 0x48, - 0xd2, 0x2c, 0x1f, 0x3c, 0xfa, 0x03, 0x56, 0x02, 0x2e, 0xf8, 0xb2, 0x4e, 0xd2, 0x86, 0x04, 0x6f, 0x59, 0xa2, 0x34, - 0x1f, 0xc2, 0x2d, 0x82, 0xf2, 0xc8, 0xc4, 0xda, 0xb4, 0x95, 0x0c, 0xe4, 0xaa, 0x2e, 0x6f, 0x3c, 0xf4, 0xbc, 0x4f, - 0xaa, 0xdd, 0x00, 0x1c, 0x99, 0x37, 0xb0, 0x64, 0x6b, 0x9f, 0x80, 0x47, 0x3e, 0xae, 0x10, 0xc4, 0x2d, 0x85, 0x8a, - 0x74, 0xa0, 0xea, 0x6b, 0xd8, 0xa0, 0x78, 0x0e, 0x0e, 0x82, 0x56, 0x82, 0xc3, 0xe0, 0x5d, 0x66, 0x34, 0xc9, 0x1a, - 0xb7, 0x66, 0x24, 0x9c, 0xaf, 0x56, 0x2d, 0x74, 0xf8, 0xb7, 0x7e, 0x8b, 0x79, 0x5c, 0x2a, 0xdc, 0xc7, 0x95, 0xc2, - 0x1d, 0x2c, 0x01, 0xc9, 0xd8, 0xd3, 0xb5, 0x63, 0xe1, 0xab, 0xd1, 0x21, 0x4c, 0xf8, 0x0b, 0x08, 0x1a, 0x6d, 0x8f, - 0x25, 0xd0, 0xb3, 0x6f, 0x15, 0x30, 0xba, 0xf6, 0xb2, 0x04, 0xd2, 0x82, 0xbb, 0xdb, 0x04, 0x5a, 0x85, 0xa8, 0x7d, - 0xfe, 0xf4, 0x73, 0x0e, 0x3c, 0xb2, 0xfe, 0x5c, 0x33, 0xcd, 0xba, 0x17, 0xf4, 0x56, 0x37, 0x1f, 0x8e, 0x71, 0x73, - 0x6c, 0xc0, 0x79, 0xd4, 0x81, 0x9f, 0x06, 0xa2, 0x47, 0x1d, 0x6c, 0x53, 0xf1, 0xb8, 0x04, 0xb2, 0x8f, 0x9e, 0xd6, - 0x40, 0x0a, 0x58, 0xe9, 0xd0, 0x68, 0x91, 0x26, 0x68, 0xb5, 0x9a, 0x9c, 0x93, 0x16, 0x42, 0x4b, 0x79, 0xcb, 0x55, - 0x32, 0x05, 0x1f, 0x69, 0x50, 0x0c, 0xbc, 0xa1, 0x6a, 0x1a, 0x22, 0x3c, 0x46, 0xcb, 0x94, 0x8d, 0xe9, 0x22, 0x53, - 0x71, 0xde, 0xe7, 0x91, 0x89, 0xa4, 0xcb, 0x4c, 0x24, 0xb8, 0xa3, 0x0e, 0x9e, 0x68, 0xfe, 0xf2, 0xb1, 0x36, 0x07, - 0x29, 0x12, 0x9d, 0x3c, 0xd1, 0x09, 0x98, 0x47, 0x49, 0x26, 0x24, 0x33, 0xcd, 0xf4, 0x8c, 0x6d, 0x39, 0xc4, 0xe2, - 0x0e, 0x54, 0xc1, 0xb5, 0x15, 0x65, 0x10, 0x4f, 0x49, 0xde, 0xcf, 0x8f, 0x3a, 0xf1, 0x04, 0xf3, 0x08, 0x38, 0xbd, - 0x77, 0x22, 0x64, 0x8d, 0xf2, 0x56, 0x74, 0x86, 0x0e, 0xa7, 0x58, 0x56, 0x97, 0xa8, 0x33, 0x74, 0x38, 0x41, 0x78, - 0xd6, 0x20, 0x59, 0x0e, 0x1e, 0xc3, 0x3c, 0xff, 0x3f, 0x52, 0xfe, 0x9b, 0xc3, 0x86, 0x98, 0xcf, 0x6f, 0x61, 0xa7, - 0xb0, 0x34, 0x88, 0x33, 0x02, 0x5e, 0x8b, 0xed, 0x53, 0x9c, 0x90, 0x49, 0x33, 0x73, 0x01, 0xf7, 0x74, 0x2b, 0x8d, - 0x3b, 0x85, 0x0e, 0x13, 0x9c, 0x6e, 0x26, 0x85, 0x7a, 0xae, 0xcd, 0x2c, 0x4e, 0xe0, 0x7c, 0xaf, 0x46, 0x61, 0xcb, - 0x2f, 0x36, 0x93, 0xfc, 0xf2, 0x16, 0xb8, 0xcd, 0x14, 0xcb, 0x26, 0xc5, 0x19, 0x9e, 0x35, 0x5f, 0xe1, 0x59, 0xf3, - 0x43, 0x99, 0xd1, 0x58, 0x60, 0x09, 0xc1, 0xfb, 0x20, 0x11, 0xcf, 0xaa, 0xe4, 0x14, 0xcb, 0x86, 0x2e, 0x8f, 0x67, - 0x8d, 0xaa, 0x74, 0x73, 0x81, 0x65, 0x43, 0x97, 0x6e, 0x7c, 0xc0, 0xb3, 0xc6, 0xab, 0x7f, 0x31, 0xe9, 0x20, 0x06, - 0x74, 0x99, 0xa3, 0x65, 0x62, 0x86, 0x78, 0xfd, 0xdb, 0xdb, 0x77, 0xed, 0x9b, 0xce, 0xe1, 0x04, 0xbb, 0xf5, 0x4b, - 0x34, 0x8e, 0x25, 0x2a, 0x64, 0x4d, 0x80, 0x68, 0x82, 0x3b, 0x87, 0x53, 0xdc, 0x39, 0x4c, 0x6c, 0x53, 0xeb, 0x59, - 0x83, 0xdc, 0x29, 0x1f, 0x8a, 0x2a, 0x88, 0x7d, 0xf8, 0xb8, 0xc9, 0xc6, 0x13, 0x54, 0x03, 0x25, 0x3a, 0x9c, 0xd4, - 0x40, 0x05, 0xdf, 0x8b, 0xda, 0x77, 0x55, 0xaf, 0xc2, 0x20, 0x03, 0x25, 0xe4, 0xaf, 0xb9, 0x06, 0x4f, 0x2d, 0x45, - 0x43, 0xc6, 0x4f, 0x31, 0x40, 0xf9, 0x0e, 0x28, 0xb4, 0xf2, 0x44, 0x0f, 0xdd, 0x9b, 0x8e, 0x4e, 0xfc, 0xff, 0x79, - 0x32, 0xe5, 0xd0, 0xcb, 0x2d, 0xb3, 0x35, 0x3d, 0x3b, 0x19, 0x7f, 0xf8, 0xc0, 0x63, 0xfd, 0x5f, 0x3b, 0x50, 0xac, - 0x41, 0x8a, 0xff, 0x2f, 0x1d, 0x9d, 0x0f, 0x46, 0xc8, 0x0a, 0xe2, 0xc2, 0x22, 0xfe, 0xf7, 0x87, 0xe5, 0x75, 0x5f, - 0x6c, 0x75, 0x5f, 0xe8, 0xee, 0xfd, 0xa6, 0xb5, 0x2a, 0x27, 0xae, 0x2a, 0x19, 0xf2, 0x5f, 0xa7, 0x5b, 0x5b, 0xa0, - 0x91, 0x35, 0x7a, 0x36, 0xf1, 0x1b, 0xdc, 0x6f, 0xc7, 0x3b, 0x90, 0x79, 0xcd, 0xcd, 0xd3, 0xa0, 0x70, 0xf8, 0x7a, - 0x77, 0xaa, 0x17, 0x2d, 0xf0, 0xde, 0x94, 0x5a, 0x5f, 0x19, 0xfa, 0x96, 0x83, 0xc5, 0xa6, 0x29, 0xb7, 0x36, 0x96, - 0x8e, 0xba, 0x58, 0xbb, 0x22, 0x42, 0xa5, 0xbb, 0x0b, 0x50, 0x8a, 0x8f, 0x55, 0x93, 0xe9, 0xaf, 0x73, 0x15, 0xe9, - 0x4b, 0xa8, 0x86, 0xfe, 0xbc, 0xbf, 0x50, 0x91, 0x12, 0x73, 0x93, 0x77, 0x7f, 0x0e, 0x7d, 0x82, 0x86, 0xb5, 0xe1, - 0xd9, 0xed, 0xb3, 0xc2, 0xea, 0x77, 0xaa, 0x43, 0xd0, 0x3f, 0x80, 0x2c, 0x69, 0x31, 0x7d, 0x60, 0xdd, 0x1a, 0xb6, - 0x5d, 0x34, 0xcb, 0x44, 0xd3, 0x6a, 0x53, 0xe7, 0x9a, 0x3d, 0xcc, 0xe7, 0x3e, 0x4f, 0xc1, 0x0b, 0xa3, 0x1f, 0xdf, - 0xc1, 0x6e, 0xdc, 0xd5, 0x18, 0x89, 0xba, 0x92, 0xa9, 0x84, 0x7e, 0x74, 0x87, 0x59, 0x74, 0xaf, 0xbd, 0x18, 0x73, - 0xed, 0xef, 0xa3, 0x03, 0xe5, 0x07, 0x95, 0x24, 0x07, 0x96, 0xfd, 0x0d, 0x16, 0xdd, 0x81, 0x79, 0x62, 0x59, 0x4d, - 0x60, 0x15, 0xdd, 0x7b, 0x8b, 0x28, 0x74, 0x23, 0x6b, 0xcd, 0x80, 0xea, 0x66, 0x8c, 0x7a, 0x70, 0x1f, 0x02, 0x3d, - 0xf4, 0xcb, 0x52, 0xca, 0x76, 0x16, 0xd7, 0xba, 0x57, 0xba, 0xfb, 0xcd, 0x01, 0x79, 0x7c, 0xa1, 0xc7, 0x35, 0xfd, - 0xab, 0x49, 0x44, 0x23, 0xf6, 0x0f, 0x67, 0xc5, 0xd5, 0xa2, 0xd0, 0x98, 0x26, 0xfb, 0x2a, 0x4a, 0xe6, 0x6d, 0x30, - 0xd5, 0x4b, 0xe6, 0x9d, 0x3b, 0x6c, 0xbf, 0xef, 0xcd, 0xf7, 0x3d, 0x96, 0x7d, 0xa6, 0x33, 0x62, 0xa6, 0x8b, 0xb9, - 0xef, 0x7b, 0xf3, 0x7d, 0x8f, 0xb7, 0x07, 0x73, 0xeb, 0x2e, 0x14, 0x4b, 0x76, 0x86, 0x0b, 0x30, 0x2c, 0xf7, 0xb8, - 0x9b, 0x5a, 0x96, 0x0e, 0x02, 0x5b, 0x4b, 0x80, 0x38, 0x9f, 0x4f, 0xc3, 0x8a, 0x57, 0x43, 0xc0, 0x7d, 0x3a, 0xd7, - 0xf6, 0x2a, 0x15, 0x78, 0x4c, 0xd0, 0x88, 0xe8, 0xd8, 0x36, 0xfa, 0x59, 0x2f, 0xe0, 0xf2, 0x88, 0x2a, 0xf5, 0x24, - 0x11, 0xf0, 0xaa, 0x5a, 0xe5, 0xad, 0x8b, 0x94, 0x5f, 0xc4, 0xcb, 0x71, 0xc5, 0x1e, 0x53, 0xc9, 0x00, 0x56, 0x65, - 0x49, 0x97, 0x40, 0xea, 0xf9, 0xde, 0x44, 0xbf, 0x6c, 0x22, 0x4f, 0xae, 0x6f, 0x4b, 0xbf, 0x30, 0x35, 0x2d, 0xc4, - 0x62, 0x32, 0x05, 0x1f, 0x5a, 0x60, 0x19, 0x0a, 0x5d, 0xaf, 0xb2, 0xf5, 0xaf, 0x49, 0x6e, 0x12, 0x28, 0x9c, 0x6a, - 0x8a, 0x88, 0x26, 0x6a, 0x41, 0x33, 0x6d, 0x49, 0xca, 0xf3, 0xc9, 0x63, 0x71, 0xf7, 0x12, 0xb0, 0x9b, 0x12, 0xd5, - 0xd8, 0x91, 0xf7, 0x16, 0x76, 0x00, 0x4e, 0x08, 0xdb, 0x55, 0xf1, 0x52, 0x82, 0xce, 0x1f, 0x67, 0x84, 0xed, 0xaa, - 0xfa, 0x84, 0x99, 0xec, 0x29, 0xd9, 0x18, 0x6e, 0x3f, 0x4c, 0x1a, 0x19, 0x3a, 0xea, 0xc4, 0x59, 0xcf, 0x11, 0x03, - 0x03, 0x50, 0x0f, 0xb8, 0x5b, 0xdb, 0xb3, 0xbc, 0xbb, 0x21, 0x79, 0x94, 0xb2, 0x44, 0x98, 0xeb, 0x72, 0x9d, 0xb2, - 0x5a, 0x75, 0x2a, 0x2a, 0x58, 0xe0, 0xa9, 0xb7, 0x17, 0xa8, 0xf9, 0xda, 0x41, 0x71, 0xae, 0x93, 0x4d, 0xd3, 0xf3, - 0xb2, 0xef, 0xde, 0x8e, 0x45, 0xc6, 0x26, 0xed, 0xed, 0x0e, 0x22, 0x61, 0x38, 0x61, 0xe5, 0x71, 0xc2, 0x55, 0x6d, - 0x8f, 0x00, 0xdd, 0x78, 0x22, 0x37, 0x16, 0x64, 0xb9, 0xae, 0x8c, 0xee, 0x3d, 0xbf, 0x5b, 0x4a, 0x84, 0x1d, 0x6d, - 0x49, 0x30, 0x5d, 0x82, 0x56, 0xd3, 0xe9, 0x37, 0x99, 0x6b, 0xcf, 0x0d, 0x6f, 0x8a, 0xb6, 0xb9, 0xbd, 0x49, 0xc7, - 0x7a, 0x7b, 0xe8, 0x18, 0xca, 0x20, 0x06, 0x3a, 0x1f, 0xf1, 0x5e, 0xa3, 0x91, 0x20, 0x50, 0xc8, 0x24, 0x43, 0x2c, - 0x22, 0xa7, 0x45, 0x3f, 0x38, 0xd0, 0xf0, 0xa8, 0x12, 0x10, 0xa6, 0x20, 0x84, 0xf8, 0x5d, 0x6b, 0x84, 0xf5, 0x97, - 0xab, 0x96, 0x0b, 0x1b, 0xa9, 0x36, 0x74, 0xf0, 0xff, 0xf2, 0x97, 0xad, 0x9e, 0x59, 0x2e, 0x8a, 0xc6, 0xcd, 0x4c, - 0x83, 0x45, 0x80, 0xf4, 0x68, 0xb2, 0x1d, 0x14, 0x77, 0xe7, 0x62, 0xbd, 0x21, 0x20, 0x31, 0x83, 0x09, 0xca, 0x86, - 0x75, 0x63, 0x0c, 0xf3, 0xa8, 0xd2, 0xb2, 0xd6, 0x24, 0x66, 0xcf, 0x97, 0xce, 0x5f, 0xf7, 0xe5, 0x5d, 0xcc, 0xf0, - 0x7d, 0x2c, 0xf1, 0x2d, 0x78, 0xd2, 0xc4, 0x02, 0xdb, 0xc7, 0x0b, 0x8a, 0x35, 0x51, 0x3d, 0xc7, 0xde, 0x16, 0xb0, - 0xce, 0x7a, 0x8f, 0x48, 0xef, 0x77, 0xf5, 0xab, 0x0d, 0xbe, 0x5b, 0xf8, 0x15, 0x58, 0x3f, 0x7b, 0x27, 0x29, 0x96, - 0x0d, 0xd1, 0x2c, 0xec, 0x91, 0x01, 0xe5, 0x2a, 0x7e, 0xd9, 0x4f, 0xdd, 0x2a, 0x86, 0x6b, 0x1f, 0xaf, 0xf0, 0x87, - 0x8d, 0x76, 0x1b, 0x79, 0x59, 0xdc, 0xec, 0x4d, 0xd9, 0x10, 0x55, 0xd3, 0x3b, 0x32, 0x37, 0x52, 0xea, 0x5f, 0x1f, - 0x70, 0x6b, 0xab, 0x7d, 0x37, 0xcd, 0xb7, 0x0e, 0x9d, 0xab, 0xa6, 0x5d, 0x6a, 0xad, 0x08, 0xf6, 0x7e, 0xb6, 0x70, - 0x73, 0x6b, 0xc0, 0x1e, 0xfc, 0xdc, 0x1d, 0xcd, 0x55, 0x02, 0xd1, 0xe9, 0x8d, 0x66, 0x7c, 0x15, 0xfe, 0x99, 0x36, - 0xc2, 0x7e, 0xfc, 0x67, 0xf4, 0x67, 0xda, 0x40, 0x7d, 0x14, 0xce, 0xef, 0x56, 0x6c, 0xb6, 0x82, 0x60, 0x6b, 0x0f, - 0x8e, 0xf0, 0x6b, 0xbf, 0x24, 0x57, 0x34, 0xe3, 0xc9, 0xca, 0xbe, 0x84, 0xb7, 0xb2, 0xcf, 0x04, 0xad, 0xf4, 0xe3, - 0x4e, 0xab, 0x50, 0x8c, 0x32, 0x08, 0x2c, 0x1c, 0xee, 0x35, 0xfb, 0x83, 0x56, 0xf3, 0xd1, 0xd0, 0xfc, 0xab, 0x23, - 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x04, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, 0xe9, 0x55, 0x82, - 0x8c, 0xef, 0xc9, 0x6a, 0xc5, 0x6c, 0x34, 0x6b, 0xab, 0xc1, 0x2f, 0x63, 0x33, 0x1d, 0xb6, 0xa3, 0x4e, 0xcf, 0x89, - 0xb1, 0xa4, 0x01, 0x91, 0xa6, 0x31, 0x83, 0x40, 0x52, 0x4b, 0xcd, 0x61, 0xcd, 0xef, 0x82, 0xb8, 0xba, 0x3f, 0x82, - 0x94, 0x1f, 0x82, 0x98, 0x1f, 0x11, 0x08, 0xa0, 0x6d, 0x98, 0xa3, 0xb2, 0x21, 0xe7, 0xbb, 0xf4, 0x40, 0x3b, 0x33, - 0x34, 0xf8, 0x6a, 0xd5, 0xaa, 0x86, 0x29, 0x8b, 0xfa, 0x30, 0x97, 0x6b, 0x2c, 0xc9, 0x1b, 0xd0, 0x35, 0xe7, 0x44, - 0xf6, 0x7d, 0x57, 0x79, 0x78, 0x08, 0x18, 0x0b, 0x02, 0x4e, 0xfa, 0x7d, 0xd9, 0x2f, 0xc8, 0xc5, 0x65, 0x08, 0x3e, - 0x66, 0x98, 0x0f, 0xd4, 0xa0, 0x18, 0x0e, 0x51, 0x6c, 0x9d, 0xce, 0x62, 0x1d, 0x71, 0xc5, 0xf3, 0x4b, 0x2e, 0xc0, - 0x2f, 0x39, 0x47, 0x6c, 0x50, 0x0c, 0xc9, 0x83, 0x24, 0x14, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, 0xd2, 0x37, 0x30, - 0xd5, 0xc3, 0xd2, 0x17, 0xd9, 0x60, 0x31, 0x67, 0x2c, 0x81, 0xe0, 0x66, 0xc0, 0x5e, 0x6a, 0x43, 0xa2, 0xb6, 0x06, - 0x0a, 0xee, 0x02, 0xdf, 0xcc, 0xe8, 0xe9, 0x56, 0x1b, 0x83, 0xc0, 0xe2, 0x85, 0xbe, 0x86, 0x31, 0x08, 0xa4, 0x2f, - 0x57, 0x1d, 0xf6, 0x97, 0x1f, 0x26, 0xcb, 0x0f, 0x5e, 0xa1, 0x4d, 0x76, 0x4a, 0xab, 0x44, 0x3d, 0xbe, 0xca, 0x13, - 0x47, 0x13, 0x64, 0x62, 0xa8, 0x74, 0xc3, 0x32, 0x71, 0x25, 0x7d, 0x26, 0x9a, 0x6c, 0x37, 0x1c, 0x33, 0xe7, 0xbb, - 0xd9, 0xfe, 0x61, 0xdd, 0xce, 0x39, 0xe1, 0x5a, 0x2b, 0xa9, 0xb5, 0x51, 0xcf, 0x34, 0x55, 0xb5, 0xc1, 0xfc, 0x2e, - 0xad, 0x96, 0x16, 0x5b, 0x57, 0xef, 0x9e, 0xff, 0x2c, 0x5d, 0x19, 0x7f, 0x8b, 0x55, 0xa1, 0x15, 0x19, 0x6e, 0xb7, - 0x90, 0x33, 0x67, 0xba, 0x74, 0x8a, 0x5c, 0xa8, 0x0e, 0x7f, 0x51, 0x4f, 0xea, 0x97, 0x2a, 0x83, 0x86, 0x74, 0xe8, - 0xf7, 0x3a, 0x01, 0xe5, 0x1f, 0x4c, 0x4c, 0x64, 0x2c, 0xba, 0xa5, 0x45, 0x1e, 0xfe, 0xf8, 0x22, 0xd7, 0xb1, 0xaa, - 0xf6, 0x60, 0x20, 0x7b, 0xba, 0xe2, 0x1e, 0xdc, 0x9a, 0xf0, 0x31, 0x67, 0x69, 0xbc, 0x17, 0xfc, 0xd8, 0x90, 0x8d, - 0x1f, 0x83, 0x1f, 0xc1, 0xdd, 0xd9, 0x3e, 0x8b, 0x58, 0xc6, 0x85, 0x70, 0xf7, 0x58, 0x97, 0xa5, 0x4a, 0x19, 0x2b, - 0xa7, 0x5b, 0xf6, 0x2f, 0xa4, 0xde, 0x24, 0xe1, 0xa5, 0x25, 0xd6, 0x26, 0x05, 0x2b, 0x9f, 0x92, 0xc2, 0xb3, 0x2b, - 0xfa, 0x56, 0x8b, 0xd9, 0x4b, 0x2d, 0xe9, 0xae, 0xaf, 0x2e, 0x4b, 0x15, 0x34, 0x1c, 0x84, 0xb6, 0xb4, 0x81, 0x04, - 0x18, 0xb8, 0x94, 0x3e, 0x9d, 0xf6, 0x4c, 0x22, 0xb3, 0x24, 0x84, 0x77, 0x0f, 0x2a, 0x98, 0xff, 0xce, 0x36, 0xc2, - 0xaa, 0xc0, 0xe5, 0x4a, 0x15, 0xf5, 0x52, 0x10, 0x08, 0x40, 0x5f, 0x7a, 0x0f, 0x8a, 0xf3, 0xa2, 0xd7, 0x68, 0x08, - 0xd0, 0xc2, 0x52, 0x7d, 0xad, 0x8a, 0xe9, 0xbe, 0xff, 0x9c, 0x9f, 0xf7, 0xe1, 0x1c, 0xd2, 0x36, 0xde, 0xd4, 0xa4, - 0x84, 0x9a, 0x1d, 0xb4, 0x0f, 0x56, 0xd9, 0x5e, 0xf9, 0xb7, 0x21, 0x45, 0x26, 0x7f, 0xc0, 0x7e, 0xa0, 0xb6, 0xc3, - 0xa1, 0x2d, 0x58, 0xf5, 0x52, 0x46, 0xc1, 0x80, 0x95, 0x03, 0x6e, 0x4f, 0x46, 0x09, 0x4d, 0xa6, 0x0c, 0xd4, 0xfd, - 0xa6, 0x68, 0x35, 0xb7, 0x27, 0x75, 0xbf, 0x21, 0xed, 0xec, 0x23, 0xb5, 0xb3, 0x4f, 0x0e, 0x5e, 0x2c, 0x82, 0xfc, - 0x21, 0x42, 0x85, 0xc3, 0xbc, 0x29, 0xd1, 0x51, 0x07, 0xb8, 0x33, 0x70, 0xe0, 0x01, 0x5b, 0x94, 0x83, 0x03, 0x6a, - 0x2d, 0xee, 0x69, 0x23, 0x71, 0xde, 0x9e, 0x50, 0xbb, 0x08, 0x25, 0x6e, 0xd6, 0xcc, 0xb4, 0xa0, 0xb5, 0x42, 0x3b, - 0x8f, 0x7b, 0xbc, 0xcd, 0xb3, 0x5a, 0xfc, 0x84, 0x0d, 0x6b, 0xaa, 0xfa, 0x0d, 0x34, 0x47, 0xb5, 0x20, 0x37, 0x4f, - 0xb5, 0xb7, 0x2a, 0x19, 0x04, 0xc1, 0xd0, 0x70, 0x2a, 0x44, 0x93, 0x8c, 0x41, 0x6b, 0xe8, 0xdd, 0x6a, 0xaf, 0x56, - 0xdc, 0x21, 0xbe, 0xac, 0x79, 0xab, 0xe9, 0x5b, 0x00, 0x5a, 0x84, 0x41, 0x79, 0x6f, 0x12, 0x80, 0xf7, 0x6d, 0x19, - 0x21, 0x6d, 0x39, 0x30, 0x6f, 0x36, 0x96, 0x8a, 0xcd, 0x77, 0x74, 0x32, 0x8c, 0x03, 0x33, 0xa2, 0x00, 0xdf, 0x94, - 0x90, 0x84, 0xab, 0xa4, 0x1b, 0x99, 0x88, 0x39, 0x93, 0x31, 0xc7, 0x37, 0x85, 0x10, 0xea, 0xda, 0x7c, 0x09, 0x5c, - 0xdd, 0xc9, 0x48, 0x7c, 0x33, 0x61, 0xea, 0x1d, 0x2d, 0x26, 0x0c, 0xfc, 0x8a, 0xdc, 0xed, 0x58, 0x4c, 0xc9, 0xc5, - 0x53, 0x19, 0x0e, 0x28, 0x86, 0x07, 0x47, 0x87, 0x58, 0xe9, 0x10, 0x28, 0x15, 0x2e, 0xb2, 0xdb, 0xbd, 0x37, 0x85, - 0xb8, 0xbb, 0x0f, 0x0b, 0x6c, 0x1d, 0x00, 0x4b, 0xa7, 0x49, 0x80, 0x7f, 0xf9, 0x98, 0x8f, 0xd1, 0x98, 0x53, 0xad, - 0xeb, 0xb7, 0xbf, 0xa3, 0x1b, 0xa0, 0xb7, 0xa5, 0xa3, 0xe0, 0xa0, 0x35, 0x84, 0x5c, 0xb8, 0x0b, 0x83, 0x8b, 0x2f, - 0xbf, 0xb6, 0x28, 0xb4, 0x37, 0x16, 0x40, 0xef, 0xaf, 0x04, 0x2c, 0xd8, 0x30, 0xc7, 0x14, 0x5e, 0x6b, 0x9d, 0x30, - 0xe5, 0x45, 0x05, 0x79, 0x52, 0xbe, 0xc7, 0x59, 0xab, 0xfd, 0x96, 0x8d, 0xe1, 0x0e, 0x23, 0xfa, 0x76, 0xe1, 0xc8, - 0x82, 0x07, 0x64, 0x9a, 0xc4, 0x34, 0xfb, 0xc6, 0x45, 0x1e, 0x79, 0x3d, 0x0e, 0x77, 0xb5, 0xe4, 0xe7, 0xeb, 0x15, - 0x5d, 0x63, 0x08, 0x45, 0xe1, 0xf7, 0xfb, 0x15, 0x1e, 0x28, 0xad, 0x0c, 0xda, 0xa0, 0x61, 0x71, 0x9b, 0xff, 0x02, - 0x67, 0x0c, 0xad, 0x17, 0x32, 0x77, 0x74, 0xc6, 0xe1, 0xcc, 0x62, 0xc6, 0x94, 0xc0, 0xa8, 0x94, 0x28, 0xe8, 0x04, - 0x1c, 0x9d, 0xab, 0x0f, 0x92, 0x87, 0xd5, 0xb1, 0x02, 0xf0, 0x24, 0x53, 0xf8, 0x27, 0xdb, 0x04, 0xeb, 0x7e, 0xab, - 0x66, 0x98, 0xfa, 0x8b, 0xda, 0x76, 0x2d, 0x5f, 0xfa, 0x38, 0xd2, 0xc6, 0x10, 0x5a, 0xe7, 0xee, 0x1e, 0x50, 0xc4, - 0x06, 0xbd, 0x88, 0x15, 0xbe, 0x91, 0x8b, 0x91, 0x5e, 0x5f, 0xed, 0x3a, 0xa6, 0x00, 0x51, 0xac, 0xbb, 0x26, 0xbe, - 0xa9, 0x9e, 0x3f, 0x95, 0x71, 0x0e, 0x67, 0x10, 0x84, 0x38, 0x29, 0x2f, 0x1b, 0x62, 0x41, 0x2e, 0x74, 0xa7, 0x42, - 0x77, 0x5a, 0x21, 0x94, 0x4d, 0x8f, 0xca, 0xfb, 0x57, 0x08, 0x61, 0xa0, 0xcb, 0xec, 0xc0, 0xaa, 0x7c, 0x0b, 0xab, - 0xe0, 0xd5, 0x8b, 0x0d, 0xac, 0x12, 0x70, 0x3c, 0x97, 0x68, 0x54, 0x54, 0x38, 0xa4, 0x49, 0x9f, 0x8f, 0x45, 0x90, - 0x00, 0x58, 0xf4, 0x2e, 0xb1, 0x79, 0xdf, 0xc3, 0x21, 0xbf, 0x27, 0x11, 0xf9, 0xd3, 0x8d, 0x68, 0x06, 0xef, 0xe2, - 0xca, 0xbe, 0x43, 0x08, 0x58, 0x7a, 0x8e, 0xe1, 0x3d, 0xe4, 0xef, 0xbf, 0xc3, 0x6a, 0x2d, 0xc8, 0xe3, 0x7f, 0x89, - 0x92, 0xd0, 0xd8, 0x7f, 0x8e, 0x87, 0x16, 0x09, 0xfd, 0x81, 0x6f, 0x8e, 0xb0, 0xc2, 0xc1, 0xad, 0x22, 0x2e, 0x83, - 0x5b, 0x7c, 0xac, 0x43, 0x0f, 0x00, 0x4b, 0x28, 0xf6, 0x41, 0xbe, 0x81, 0x62, 0x1a, 0x07, 0x14, 0x59, 0xfa, 0x17, - 0xb8, 0x60, 0xb5, 0x50, 0xde, 0xdf, 0xb6, 0x9c, 0x94, 0x56, 0xbb, 0xe4, 0xd5, 0xe6, 0x40, 0xe5, 0xa7, 0x7f, 0xe1, - 0x2b, 0xf5, 0x43, 0xcd, 0xf6, 0x0b, 0xdf, 0x58, 0xa0, 0xc7, 0xa0, 0x08, 0xb0, 0xbf, 0xd7, 0x84, 0x3b, 0x8a, 0x5e, - 0xe6, 0x62, 0xbf, 0x6d, 0xaf, 0x7b, 0x89, 0xb9, 0xbc, 0xae, 0xb2, 0xe6, 0x60, 0x0a, 0x0d, 0x0e, 0xaa, 0x70, 0x46, - 0x60, 0x2e, 0x5f, 0x94, 0x05, 0xe7, 0x20, 0xde, 0xf7, 0xa5, 0xce, 0x29, 0xa3, 0x01, 0xbc, 0x48, 0xca, 0x47, 0xa7, - 0xfa, 0x1c, 0x5c, 0xc6, 0x35, 0x9b, 0xf8, 0x44, 0xba, 0x54, 0x60, 0x25, 0x8d, 0x71, 0x68, 0x40, 0x53, 0x3a, 0x07, - 0xb3, 0x0d, 0xa0, 0xe0, 0xf6, 0x7c, 0xd8, 0x58, 0x28, 0xef, 0x2d, 0xda, 0xda, 0xd3, 0xd1, 0x84, 0x58, 0x93, 0x26, - 0xef, 0x6e, 0x5b, 0x23, 0x83, 0x33, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, 0x84, 0x27, 0x28, - 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xb2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x5a, 0x6a, 0x20, 0x2b, 0x6a, 0x90, - 0x7b, 0xd4, 0x40, 0xd4, 0xb7, 0x7f, 0x01, 0x0b, 0x61, 0x22, 0x54, 0x49, 0x2f, 0x20, 0xc2, 0x5c, 0x69, 0x3e, 0xa0, - 0x88, 0x7c, 0xc8, 0x6b, 0x40, 0x85, 0x94, 0xbc, 0x04, 0xa3, 0x71, 0x78, 0xbd, 0x07, 0xdc, 0x2f, 0x0d, 0xc3, 0xe0, - 0x38, 0x05, 0x9d, 0xff, 0xd6, 0xe5, 0x43, 0xf5, 0x72, 0x75, 0x10, 0xc2, 0x4f, 0x24, 0x64, 0x98, 0x46, 0x7e, 0x01, - 0xb2, 0x99, 0x63, 0x71, 0x70, 0x20, 0x40, 0xe0, 0x87, 0x28, 0xc2, 0x1e, 0xcf, 0xf0, 0x32, 0xd9, 0x20, 0x7a, 0x6e, - 0x56, 0x79, 0x35, 0x2b, 0xe1, 0xcd, 0xaa, 0x70, 0x34, 0x8e, 0xae, 0x09, 0x03, 0xc1, 0x85, 0x9a, 0x7d, 0x83, 0x10, - 0x28, 0x5b, 0x6e, 0x35, 0x5d, 0x7a, 0x0a, 0xe6, 0xa3, 0x61, 0xf0, 0x96, 0xc1, 0x8b, 0xba, 0xda, 0xe4, 0x9f, 0x29, - 0x96, 0x28, 0xcd, 0x3c, 0x36, 0x3c, 0x27, 0x75, 0x8a, 0xa2, 0xbf, 0x04, 0xcf, 0xc3, 0xa0, 0x79, 0x11, 0xa0, 0x06, - 0xfc, 0xdb, 0xe0, 0xa8, 0x47, 0x23, 0x9a, 0xa6, 0x2e, 0xf8, 0x4d, 0x42, 0xf4, 0x26, 0x5b, 0xad, 0x64, 0x45, 0xd0, - 0x23, 0xb3, 0xc1, 0x80, 0x95, 0x78, 0x02, 0x3b, 0xd6, 0x70, 0xb0, 0xe4, 0x85, 0x0c, 0x73, 0x77, 0x4a, 0xe1, 0x1c, - 0x43, 0x3a, 0xc2, 0x89, 0x17, 0xb3, 0xf1, 0x3f, 0x9f, 0xa9, 0xbf, 0x7e, 0x6e, 0xbe, 0x96, 0x11, 0x11, 0x2e, 0x88, - 0x5c, 0x8d, 0x1d, 0x91, 0x5e, 0xd8, 0x32, 0x35, 0xb0, 0x65, 0x7e, 0x70, 0xd6, 0xd5, 0x43, 0x13, 0x2e, 0x0e, 0x0c, - 0xa8, 0x91, 0x67, 0xb4, 0x82, 0x33, 0x52, 0x0e, 0x1c, 0x94, 0x10, 0x8a, 0x15, 0xe1, 0x94, 0x5c, 0x40, 0x24, 0xbc, - 0x04, 0xf5, 0xc0, 0xb0, 0xc0, 0x93, 0xa0, 0xa6, 0x20, 0x41, 0x25, 0xae, 0x76, 0x0a, 0xb3, 0xce, 0xf4, 0x6c, 0xa7, - 0xa8, 0x67, 0x83, 0xfc, 0xfc, 0xa2, 0xc2, 0x14, 0x58, 0xda, 0x83, 0x83, 0x02, 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, - 0x40, 0x4f, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0x4a, 0x7b, 0x1d, 0x68, 0x5b, 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, - 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x7d, 0x15, 0x6f, 0x47, 0x48, 0xec, 0x7f, 0x54, 0x3a, 0xd0, 0x98, 0x25, 0xdd, 0xd5, - 0xc6, 0x7c, 0x55, 0xd3, 0x23, 0x56, 0x93, 0x10, 0x36, 0x48, 0x97, 0xe3, 0xd3, 0x9e, 0xc1, 0x15, 0xab, 0xd0, 0x72, - 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x16, 0x51, 0xc9, 0x86, 0x61, 0x06, 0x61, - 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0x33, 0x7f, 0x4a, 0x1f, 0x6c, 0xba, 0x76, 0xe6, 0x11, 0x40, - 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x37, 0x2a, 0x33, 0xbf, 0x96, 0xb6, 0x95, 0xdb, 0xf6, 0x18, 0x7b, 0x21, 0xb7, - 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x08, 0x55, 0x6d, 0xc8, 0x5a, 0x1b, 0x3a, 0xd0, 0x2f, - 0xd2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x59, 0x2e, 0xc1, 0x22, 0xbc, 0x74, 0x08, 0x7f, 0x97, 0x83, 0x33, 0x3c, 0x66, - 0x58, 0xac, 0x56, 0x50, 0xcf, 0xe1, 0x7d, 0xb2, 0x19, 0x9c, 0x54, 0x6c, 0x8c, 0x5d, 0x98, 0x89, 0x87, 0x65, 0x13, - 0x02, 0x27, 0xd0, 0xaf, 0xab, 0x88, 0xfa, 0xfb, 0xed, 0xf8, 0xa9, 0x0c, 0x6b, 0x3b, 0x10, 0x6b, 0xd6, 0x1b, 0xac, - 0x3e, 0x80, 0x96, 0xff, 0x93, 0xb8, 0x87, 0xca, 0xbc, 0x9b, 0x84, 0x7c, 0x73, 0x11, 0x7b, 0xac, 0x87, 0x18, 0xa9, - 0x2d, 0xee, 0x0e, 0x21, 0xfe, 0x9f, 0xad, 0x28, 0x06, 0x3c, 0xaa, 0xf8, 0xe7, 0x10, 0xf5, 0x20, 0x14, 0xb5, 0xf1, - 0xb0, 0x01, 0x4a, 0xbb, 0x5c, 0x57, 0x62, 0xa4, 0x4f, 0x20, 0xdf, 0xda, 0xf0, 0x82, 0xfa, 0x24, 0xca, 0x41, 0x4e, - 0xf6, 0xa2, 0x92, 0x26, 0x1b, 0xc2, 0x5c, 0x6f, 0x0b, 0xc7, 0xf4, 0xd5, 0x06, 0x2d, 0xc2, 0x17, 0xc0, 0xce, 0x70, - 0x2d, 0x59, 0x5a, 0xf0, 0xe5, 0x35, 0xf0, 0xb9, 0x35, 0xd7, 0x14, 0x25, 0x47, 0xfd, 0x17, 0x52, 0xdf, 0xfa, 0xc3, - 0xef, 0xd8, 0x13, 0x1f, 0xa9, 0xd5, 0x91, 0x6c, 0x84, 0x5a, 0xb3, 0x76, 0xbc, 0x6c, 0x33, 0xc2, 0xa0, 0x34, 0xd1, - 0xfb, 0x2a, 0x64, 0x95, 0x3b, 0x3b, 0x95, 0xde, 0x9c, 0xbe, 0xe6, 0x95, 0x73, 0x2a, 0x37, 0x8c, 0x6a, 0xa9, 0x69, - 0x80, 0x08, 0x57, 0x2e, 0x91, 0xbc, 0x4f, 0x74, 0xf8, 0x07, 0x8d, 0x71, 0xf5, 0x48, 0xe1, 0xef, 0x77, 0xc5, 0x0e, - 0xd9, 0x8e, 0x0e, 0xb7, 0x11, 0x34, 0xcf, 0x57, 0xf0, 0x80, 0xa3, 0x92, 0x21, 0x44, 0x39, 0xb9, 0xd8, 0xcf, 0x6b, - 0xa6, 0x6c, 0x37, 0x01, 0x42, 0x48, 0x39, 0x9c, 0x75, 0x0e, 0x91, 0xb5, 0xd0, 0x23, 0x55, 0x94, 0xc3, 0x2d, 0x9a, - 0x6b, 0x03, 0x54, 0x68, 0x81, 0x74, 0xf9, 0x85, 0xdd, 0xc7, 0x02, 0xa2, 0x97, 0xaf, 0x6d, 0x08, 0x63, 0x6b, 0x65, - 0x89, 0x0b, 0x3d, 0x6a, 0x13, 0x46, 0xd7, 0x6e, 0x0c, 0x6b, 0x03, 0xa3, 0xa7, 0x41, 0x49, 0x0b, 0x42, 0x5d, 0xf7, - 0xe8, 0x79, 0xa2, 0x03, 0x3d, 0x66, 0x84, 0x36, 0x18, 0x9e, 0x12, 0x05, 0x96, 0x4d, 0x05, 0x58, 0xf0, 0x2d, 0x8b, - 0x38, 0xd7, 0x36, 0x9b, 0x2c, 0xfc, 0xa8, 0x42, 0xfd, 0xb4, 0x5f, 0x56, 0x31, 0xcf, 0x85, 0xa5, 0x6e, 0xcf, 0x13, - 0x17, 0x8f, 0xee, 0xe9, 0x9b, 0xeb, 0x17, 0x2f, 0x5f, 0xbf, 0x5a, 0xad, 0xda, 0xac, 0xd9, 0x3e, 0xc1, 0x3f, 0xa9, - 0x32, 0x1e, 0x6c, 0x19, 0x05, 0xe8, 0xe0, 0x60, 0x9f, 0x6b, 0x17, 0x9e, 0x2f, 0x7c, 0x0e, 0x71, 0x83, 0xd4, 0x10, - 0x27, 0x45, 0x19, 0x13, 0xe4, 0x2e, 0xe8, 0x07, 0xf7, 0x01, 0x28, 0xa1, 0x2a, 0xf2, 0xf7, 0x61, 0x73, 0xf6, 0x7b, - 0x10, 0x98, 0x08, 0xea, 0x43, 0x04, 0x10, 0x88, 0x57, 0x8a, 0x0b, 0xc2, 0x5c, 0x02, 0x44, 0xf1, 0x5e, 0xc0, 0x9b, - 0x90, 0x3a, 0x6a, 0xd5, 0x22, 0x0f, 0x0b, 0x20, 0x89, 0x26, 0x1c, 0x25, 0x3d, 0xd2, 0x01, 0xbc, 0x21, 0x28, 0xa5, - 0xf9, 0xd5, 0xcb, 0xac, 0xbb, 0x54, 0x86, 0xfa, 0xad, 0x38, 0xc3, 0x53, 0xfb, 0x39, 0x85, 0xcf, 0x69, 0xcf, 0x9d, - 0x0e, 0xf2, 0x30, 0xc3, 0x0b, 0x22, 0x0f, 0xdd, 0xb3, 0x88, 0xcb, 0x79, 0xc1, 0xbe, 0x72, 0xb1, 0x90, 0xf1, 0xf2, - 0x2e, 0x16, 0xd1, 0x5d, 0x33, 0x3d, 0x0c, 0x8b, 0xe8, 0xae, 0x99, 0x47, 0x77, 0x08, 0xdf, 0xc7, 0x22, 0xba, 0x37, - 0x29, 0xf7, 0xcd, 0x1c, 0x6e, 0xbe, 0x70, 0x0e, 0x87, 0xa2, 0x29, 0xda, 0x58, 0x6c, 0x16, 0x35, 0x29, 0xb6, 0xa8, - 0x87, 0xc1, 0xbf, 0xef, 0xd8, 0xf8, 0x7e, 0xf8, 0x12, 0x5c, 0x9a, 0x34, 0x91, 0x9f, 0x40, 0xfa, 0x69, 0x55, 0x06, - 0xee, 0x53, 0xd2, 0xea, 0x4d, 0xcf, 0x65, 0xb3, 0xdd, 0x6b, 0x34, 0xa6, 0xb0, 0x77, 0x13, 0x92, 0xb9, 0x62, 0xd3, - 0x86, 0x8e, 0xaf, 0xb3, 0x9f, 0xac, 0x56, 0xfb, 0x19, 0xd2, 0x1b, 0x6e, 0xc2, 0x42, 0x35, 0x98, 0x0e, 0x71, 0x0b, - 0x3f, 0x4f, 0x10, 0x5a, 0xb2, 0xc1, 0x74, 0x48, 0xd8, 0x60, 0xda, 0x68, 0x0f, 0x8d, 0xa1, 0x9d, 0xde, 0x8a, 0x6b, - 0x08, 0xa1, 0x39, 0x1d, 0x1e, 0xe9, 0x92, 0xc2, 0xe6, 0x9b, 0x2f, 0x5a, 0x05, 0xf4, 0xcb, 0x6b, 0xc1, 0xcb, 0x04, - 0xee, 0x40, 0x5f, 0xf4, 0xdc, 0x3c, 0xdd, 0x5a, 0x90, 0xe3, 0xa3, 0xca, 0xd5, 0x9e, 0x22, 0xac, 0x7b, 0xca, 0x0f, - 0x8b, 0x43, 0xdd, 0x8c, 0xed, 0x52, 0xd8, 0x6f, 0x5f, 0x33, 0xf2, 0xd1, 0xc2, 0x02, 0x10, 0xa4, 0x82, 0x47, 0x52, - 0xd8, 0x70, 0x4a, 0x3e, 0x5c, 0x2c, 0x54, 0xb6, 0x60, 0x92, 0x91, 0x56, 0x2f, 0xd3, 0x96, 0xfe, 0x99, 0x8d, 0x68, - 0x4a, 0x31, 0x25, 0x89, 0x2b, 0x99, 0x69, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x10, 0xa7, 0x04, 0xe2, - 0x21, 0xf5, 0x0a, 0x6d, 0xe0, 0x15, 0x4e, 0x9b, 0xc5, 0x80, 0x0d, 0xd1, 0xd1, 0x31, 0xa6, 0x83, 0xcf, 0xc9, 0xbc, - 0x0d, 0x8f, 0x05, 0x7e, 0x1e, 0x92, 0x69, 0x53, 0x94, 0x09, 0x12, 0x12, 0xd2, 0xa6, 0x38, 0x84, 0xbd, 0x84, 0x70, - 0x62, 0x2a, 0x26, 0x03, 0x36, 0x6c, 0x4e, 0xcb, 0x8a, 0x1d, 0x57, 0xb1, 0x21, 0xca, 0x04, 0x53, 0xb1, 0x61, 0x2b, - 0xfa, 0xaf, 0x33, 0x68, 0x10, 0xf8, 0x00, 0x60, 0x00, 0x00, 0x85, 0xbc, 0x68, 0xbe, 0x38, 0x27, 0x6e, 0xb3, 0x9b, - 0x7b, 0xfc, 0x16, 0x58, 0xa0, 0xd5, 0xf6, 0xff, 0x2e, 0x94, 0x01, 0x7b, 0xca, 0x42, 0xc7, 0xcc, 0x2d, 0x8c, 0x8a, - 0x0e, 0xa0, 0x52, 0x22, 0x4c, 0xa1, 0x21, 0xb3, 0x9f, 0x68, 0xa8, 0x79, 0x5a, 0x83, 0x6c, 0xa0, 0x86, 0xcd, 0x04, - 0x8e, 0x18, 0x78, 0x87, 0x86, 0x4c, 0xb5, 0x31, 0x61, 0x98, 0xc1, 0x14, 0x13, 0x0d, 0x9e, 0x69, 0xdc, 0x5a, 0x0b, - 0x2d, 0xcb, 0xf5, 0xb3, 0xfe, 0xdf, 0x2a, 0xcc, 0x07, 0x45, 0xb3, 0x3d, 0x44, 0xfb, 0x84, 0x98, 0x8f, 0x21, 0x6c, - 0x32, 0x9b, 0xda, 0xd0, 0xdf, 0x47, 0x9d, 0xd8, 0x7c, 0xc2, 0x9f, 0xe1, 0x5a, 0xef, 0x00, 0x1d, 0x78, 0x50, 0xaf, - 0xbf, 0xa8, 0xa9, 0xbc, 0x3e, 0xee, 0x8c, 0x52, 0xb9, 0xeb, 0xdd, 0x69, 0x4f, 0x53, 0xec, 0x7b, 0xeb, 0xe1, 0xf2, - 0xa1, 0x1e, 0x02, 0x66, 0x0c, 0xfa, 0x96, 0x19, 0x7d, 0x2f, 0x44, 0x72, 0x41, 0x04, 0x16, 0x1a, 0x6b, 0x18, 0xec, - 0xad, 0x83, 0x03, 0x5d, 0x8d, 0x35, 0xe0, 0x79, 0x52, 0x04, 0x82, 0x81, 0x8b, 0xa0, 0x0c, 0x68, 0x92, 0xeb, 0xdb, - 0x70, 0xf2, 0x91, 0xd9, 0x5f, 0xb8, 0xbc, 0x7d, 0x2c, 0x8c, 0xb6, 0x55, 0x27, 0xdf, 0x97, 0x05, 0xee, 0xcb, 0x7b, - 0x49, 0xa3, 0xe0, 0x46, 0xe6, 0x26, 0x2f, 0xd7, 0x77, 0xeb, 0xae, 0x54, 0x67, 0x77, 0x33, 0x9d, 0xb2, 0x99, 0xce, - 0x76, 0x33, 0xbe, 0x66, 0xe6, 0x5b, 0x56, 0x91, 0xfa, 0x64, 0x8d, 0xe4, 0x9c, 0xe6, 0x3f, 0xd1, 0x39, 0x18, 0x05, - 0x73, 0x73, 0xaf, 0x0a, 0x27, 0x57, 0x46, 0x2e, 0xf6, 0x33, 0x4d, 0x5c, 0x91, 0xbe, 0x50, 0x87, 0x00, 0x2f, 0x2f, - 0xca, 0xc7, 0x07, 0xb8, 0xc8, 0x7f, 0x15, 0xa9, 0x8d, 0x72, 0x9a, 0x0b, 0x25, 0x72, 0x16, 0x20, 0x8d, 0xaa, 0x36, - 0x06, 0xf6, 0xd2, 0xec, 0x3d, 0xd9, 0xe7, 0x83, 0x2a, 0x62, 0xde, 0x50, 0x3f, 0xf7, 0xf1, 0x3d, 0x4d, 0xb1, 0x55, - 0x13, 0x27, 0xe4, 0x43, 0x12, 0x66, 0x20, 0x9b, 0x0d, 0xaa, 0xd7, 0x7e, 0x1b, 0x6d, 0x5c, 0x34, 0x43, 0xd9, 0xd7, - 0x4f, 0x9c, 0xfc, 0x50, 0x68, 0xe3, 0x00, 0xe3, 0xe8, 0x8f, 0x30, 0x35, 0x60, 0x4f, 0x22, 0x47, 0xa1, 0xa3, 0x3b, - 0x93, 0x76, 0xef, 0xa7, 0xdd, 0xeb, 0xb4, 0x0e, 0x94, 0x03, 0xd2, 0x6c, 0xcb, 0x74, 0xee, 0xdd, 0xf7, 0x3d, 0xbc, - 0x74, 0xbb, 0x86, 0x48, 0xdc, 0xf3, 0xc7, 0xda, 0x18, 0xe2, 0x0d, 0xd8, 0x88, 0xca, 0x83, 0x83, 0x3f, 0xac, 0xf7, - 0x6d, 0x25, 0xcb, 0xca, 0x6f, 0x84, 0x03, 0xdb, 0x60, 0x2a, 0x6d, 0x5e, 0x2a, 0x92, 0x05, 0xd8, 0x75, 0xee, 0xef, - 0x8e, 0x87, 0xff, 0x52, 0xfa, 0x4c, 0x8b, 0x71, 0x15, 0x7f, 0x25, 0xd2, 0xd2, 0x43, 0x54, 0x41, 0x04, 0xd2, 0xca, - 0xba, 0xd4, 0x37, 0x1d, 0xbd, 0x9e, 0xd2, 0x54, 0xdc, 0xbe, 0x15, 0x42, 0x0d, 0xcd, 0x8b, 0xdc, 0x2a, 0x82, 0x47, - 0x0b, 0x6b, 0x0c, 0xcd, 0x7d, 0xe9, 0x9d, 0x64, 0x02, 0xa2, 0xd6, 0xc7, 0xed, 0x4b, 0x22, 0xa1, 0xac, 0xee, 0x42, - 0x38, 0xdc, 0x85, 0x60, 0x5e, 0x06, 0x6d, 0x83, 0xd8, 0xed, 0x36, 0x68, 0x5b, 0x28, 0x89, 0x34, 0x81, 0xdb, 0xbd, - 0xc1, 0xc2, 0xde, 0x87, 0x97, 0x63, 0x39, 0x96, 0xee, 0x9a, 0xcc, 0x3c, 0x00, 0x04, 0x6a, 0x1f, 0x56, 0x3c, 0xb1, - 0x20, 0x88, 0xac, 0xe1, 0xe8, 0x7b, 0xce, 0x6e, 0x8d, 0xe5, 0xf0, 0x6c, 0xbe, 0x50, 0x2c, 0xd5, 0x77, 0xd4, 0x80, - 0x3f, 0x75, 0x3f, 0xaf, 0x9f, 0x92, 0x9a, 0x6e, 0xfc, 0x01, 0x84, 0x91, 0xb0, 0xca, 0x0e, 0xad, 0x90, 0x30, 0xc1, - 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0xa5, 0xc3, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x00, 0x9b, 0x78, 0x63, - 0x5e, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x07, 0xcd, 0xa0, 0xc1, 0x62, 0x1b, 0x94, - 0xd9, 0x45, 0x18, 0xcf, 0xcf, 0x4f, 0x74, 0x9c, 0xf6, 0x52, 0xaf, 0xfe, 0x5b, 0x02, 0x06, 0xf8, 0x12, 0xbc, 0xc4, - 0xfc, 0xe8, 0xae, 0x03, 0xd5, 0x80, 0xfa, 0xa2, 0xc1, 0x86, 0x68, 0xb5, 0x6a, 0x95, 0xcf, 0x40, 0xd9, 0x6b, 0x2e, - 0x69, 0xae, 0xb9, 0xa4, 0xbd, 0xe6, 0x92, 0xee, 0x9a, 0x4b, 0xea, 0x6b, 0x2e, 0xe9, 0xae, 0xb9, 0x1c, 0x08, 0x3f, - 0x79, 0x71, 0x1c, 0x43, 0x0e, 0x71, 0x15, 0x95, 0x89, 0x8c, 0x07, 0x17, 0x9e, 0xfb, 0x2c, 0x92, 0xe5, 0xf2, 0xfb, - 0x31, 0xe4, 0xb6, 0x6c, 0x25, 0xb4, 0xdb, 0x14, 0x93, 0x10, 0x39, 0xfd, 0xe0, 0xa0, 0x74, 0x77, 0x06, 0x1f, 0xf5, - 0x98, 0xe3, 0xa5, 0x71, 0xa2, 0xfd, 0x03, 0x74, 0xf2, 0xfa, 0xd7, 0xc7, 0x58, 0xac, 0x89, 0xb4, 0x26, 0xf7, 0xfb, - 0x6d, 0x47, 0x29, 0x3e, 0x25, 0x3a, 0x3c, 0x39, 0x8f, 0x94, 0x16, 0x41, 0x10, 0xa2, 0x24, 0xc7, 0x09, 0x11, 0x66, - 0xbf, 0x3b, 0x57, 0x78, 0xad, 0x8a, 0x72, 0x66, 0x25, 0x57, 0x19, 0x38, 0xb1, 0x6b, 0x2b, 0x0c, 0xd4, 0x03, 0x17, - 0x82, 0x44, 0x27, 0xfc, 0xd1, 0xcc, 0x0c, 0x39, 0x4b, 0xca, 0xa4, 0x8f, 0xcd, 0x4c, 0x13, 0xb0, 0x82, 0xec, 0x3b, - 0x98, 0x2d, 0xef, 0x62, 0x8a, 0xef, 0xe3, 0x04, 0xff, 0xbf, 0xec, 0xbd, 0xeb, 0x92, 0xdb, 0x46, 0x96, 0x2e, 0xfa, - 0x2a, 0x55, 0x0c, 0x99, 0x06, 0xc4, 0x24, 0x8b, 0xa5, 0xbd, 0x67, 0x22, 0x0e, 0x58, 0x29, 0x86, 0x2c, 0x59, 0xdd, - 0x72, 0x5b, 0x97, 0x56, 0xa9, 0xdd, 0x76, 0x33, 0x78, 0x68, 0x14, 0x90, 0x24, 0x20, 0x83, 0x00, 0x0d, 0x80, 0x55, - 0xa4, 0x48, 0xbc, 0xfb, 0x8e, 0xb5, 0x56, 0x5e, 0x41, 0xb0, 0xa4, 0x9e, 0xd9, 0xf3, 0xeb, 0x9c, 0x3f, 0x52, 0x31, - 0x91, 0x48, 0xe4, 0x3d, 0x57, 0xae, 0xcb, 0xf7, 0xdd, 0x15, 0xbb, 0xa0, 0xb4, 0x7d, 0x41, 0x94, 0xe1, 0x6f, 0xe9, - 0xf5, 0xf2, 0x10, 0xe2, 0x7d, 0x7a, 0x69, 0x7e, 0x91, 0xb6, 0xa2, 0x00, 0x0f, 0x11, 0x7a, 0x54, 0x07, 0x82, 0x9d, - 0xf1, 0x84, 0x07, 0x70, 0xb2, 0x9a, 0xe5, 0xfc, 0x49, 0x0a, 0xe2, 0x44, 0xc1, 0x21, 0xe0, 0x6a, 0x77, 0x9b, 0x7e, - 0x01, 0xc3, 0x97, 0x0e, 0xb6, 0x1c, 0xde, 0x15, 0xbb, 0x1e, 0x2b, 0xf9, 0x07, 0x60, 0xdf, 0xea, 0xc9, 0x58, 0xdd, - 0x1e, 0x38, 0xeb, 0x52, 0x8a, 0x8e, 0x37, 0xc5, 0xe1, 0xed, 0xf9, 0xec, 0xb0, 0x0b, 0x22, 0xb6, 0x0f, 0x32, 0xac, - 0x75, 0xd2, 0xf0, 0x9f, 0x68, 0xeb, 0x60, 0x31, 0xc2, 0xfe, 0x2f, 0xeb, 0x81, 0x97, 0x90, 0x1a, 0x0a, 0x5c, 0x0c, - 0xb6, 0x1c, 0xad, 0xed, 0x32, 0x0d, 0xdc, 0xd4, 0xa0, 0xd7, 0x0f, 0x14, 0xa2, 0xbc, 0x64, 0x34, 0x37, 0x82, 0x4d, - 0x63, 0xc8, 0xc5, 0xe1, 0xb8, 0x59, 0x0e, 0x79, 0x49, 0xd3, 0x69, 0x10, 0x4a, 0x77, 0x96, 0x0d, 0x24, 0x51, 0xf6, - 0x41, 0xa8, 0x5d, 0x5b, 0x0e, 0xbb, 0xc0, 0xf6, 0xe5, 0x8f, 0x86, 0xb1, 0x7f, 0xb5, 0x7c, 0x2a, 0xa4, 0x8b, 0x78, - 0x05, 0x82, 0xa8, 0xfd, 0x3c, 0x1b, 0x6e, 0xfd, 0xab, 0xcd, 0x53, 0xa1, 0xfc, 0xc6, 0x2b, 0x5b, 0x0e, 0xa9, 0xb3, - 0x16, 0xbe, 0x30, 0x1e, 0x1e, 0x5c, 0x19, 0xda, 0x8e, 0x47, 0xa1, 0xff, 0x36, 0x6b, 0x04, 0x37, 0x36, 0xb4, 0xcf, - 0x17, 0x3e, 0x6c, 0x6d, 0x34, 0xd6, 0x14, 0xd3, 0x2d, 0xf4, 0x6f, 0x32, 0x5b, 0xda, 0xd3, 0xa8, 0xe4, 0xc5, 0xb9, - 0x69, 0xc4, 0x42, 0x18, 0x30, 0xf4, 0x93, 0xf9, 0x00, 0xaa, 0xb9, 0xd3, 0x11, 0xc8, 0xe4, 0x03, 0x3d, 0x58, 0x93, - 0x5a, 0xf5, 0xd7, 0x30, 0x93, 0xff, 0x47, 0x2a, 0x2c, 0x46, 0x77, 0xdb, 0x30, 0x53, 0x7f, 0x44, 0xf2, 0x0f, 0x56, - 0xf1, 0x7d, 0xea, 0x85, 0xda, 0x8f, 0x85, 0x15, 0x18, 0x94, 0xa8, 0x1a, 0xd0, 0x03, 0x11, 0x54, 0x65, 0x90, 0x66, - 0x58, 0x9d, 0x83, 0x7e, 0xf7, 0xb4, 0xea, 0x48, 0x0e, 0x69, 0xad, 0x86, 0x54, 0x30, 0x55, 0x6a, 0x50, 0x1d, 0x8f, - 0xab, 0x94, 0xe9, 0x32, 0xe0, 0x92, 0xbe, 0x4a, 0x95, 0x52, 0xf8, 0x4f, 0x04, 0xa0, 0x73, 0x70, 0x8f, 0xaf, 0xc7, - 0x40, 0x9a, 0x61, 0xe1, 0xb7, 0x66, 0xa7, 0xd7, 0x24, 0xdc, 0x26, 0xc1, 0xc5, 0x00, 0xe7, 0xe8, 0x3a, 0x2c, 0x57, - 0x29, 0x44, 0x50, 0x95, 0x50, 0xdf, 0xdc, 0x34, 0x28, 0x6d, 0x35, 0x08, 0x6b, 0x12, 0xea, 0x4c, 0xb2, 0x51, 0x69, - 0xbb, 0x51, 0x98, 0x2d, 0xe2, 0x7a, 0x46, 0x58, 0x73, 0x36, 0x53, 0x0d, 0x4c, 0x1a, 0x8e, 0x9b, 0x46, 0x6b, 0x51, - 0xa1, 0xa6, 0x30, 0xaf, 0x71, 0x55, 0xa9, 0xea, 0x6e, 0xcf, 0x2d, 0xa5, 0x65, 0x7b, 0xd5, 0x4d, 0xb2, 0x21, 0x97, - 0xa1, 0x0c, 0x83, 0xad, 0x1c, 0xc1, 0x04, 0x92, 0xe4, 0xcc, 0xdf, 0xca, 0x3f, 0xd4, 0xa6, 0x6b, 0x01, 0x73, 0x8c, - 0x59, 0x36, 0x2c, 0xe8, 0x15, 0xb8, 0x07, 0x5a, 0xe9, 0xd5, 0x34, 0xbb, 0xaa, 0x82, 0x64, 0x58, 0xe8, 0x65, 0x93, - 0xf1, 0x3f, 0x85, 0x91, 0x26, 0x33, 0x56, 0xb2, 0xc8, 0x76, 0x75, 0x4a, 0x9c, 0xc7, 0x09, 0x6c, 0x8f, 0xa6, 0xb7, - 0x7c, 0x9f, 0x41, 0x54, 0x10, 0x28, 0x98, 0x31, 0x5f, 0x76, 0xf5, 0xcc, 0xf7, 0x99, 0x65, 0xea, 0x3e, 0x1e, 0x8d, - 0x19, 0xdb, 0xef, 0xf7, 0xab, 0x7e, 0x5f, 0xcd, 0xb7, 0x7e, 0x3f, 0x79, 0x6e, 0xfe, 0xf6, 0x80, 0x41, 0x41, 0x4e, - 0x44, 0x53, 0x21, 0x82, 0x7f, 0x48, 0x9e, 0x22, 0x19, 0xdd, 0x69, 0x9f, 0x5b, 0xce, 0x96, 0xf9, 0x09, 0x08, 0xe6, - 0xf1, 0x78, 0xad, 0xc0, 0xae, 0x25, 0x8a, 0x84, 0x2c, 0xff, 0x29, 0x18, 0xcf, 0xdc, 0x07, 0x58, 0x32, 0x00, 0x61, - 0xab, 0x3c, 0x5d, 0xef, 0xf9, 0x2a, 0x78, 0xa7, 0xe3, 0x5d, 0x63, 0x45, 0x06, 0xe2, 0x16, 0xd8, 0x88, 0xb5, 0xf6, - 0x80, 0x9c, 0x29, 0xc0, 0xf1, 0xe2, 0x78, 0xbc, 0x94, 0xbf, 0x74, 0xb3, 0x75, 0x02, 0x95, 0x02, 0xb7, 0x47, 0x27, - 0x07, 0xff, 0x1d, 0x68, 0x06, 0xe5, 0x30, 0x6f, 0x76, 0xbf, 0x33, 0x27, 0x3f, 0x3d, 0xc5, 0x3f, 0xe1, 0x21, 0x3a, - 0xfd, 0x76, 0x6f, 0xfe, 0xa0, 0xa8, 0x3c, 0x1e, 0xd5, 0xe2, 0x07, 0x9e, 0x1f, 0xf8, 0x85, 0x6f, 0x02, 0xb3, 0xc9, - 0xd4, 0x3b, 0xfb, 0x26, 0xaf, 0x98, 0x7a, 0x8d, 0xe7, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xdd, 0xc8, 0x89, - 0x76, 0xaa, 0x30, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, 0x96, 0x78, - 0x96, 0x2e, 0xaf, 0x27, 0x75, 0xb9, 0xd7, 0x8a, 0xa7, 0x03, 0xb0, 0xb8, 0x6d, 0xc0, 0x0b, 0xe0, 0xde, 0x62, 0xeb, - 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, 0x42, 0x30, - 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, 0x77, 0xf9, - 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0xe5, 0x60, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, 0x52, 0x3c, - 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfd, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xb3, 0x7b, 0x72, 0x65, - 0x20, 0x81, 0xa6, 0x03, 0xe0, 0x21, 0x54, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, 0x05, 0xf7, - 0xe9, 0xa7, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa7, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x2a, 0xfb, 0xa6, - 0x02, 0x2a, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, 0x53, 0x71, - 0x73, 0xad, 0xd3, 0xc5, 0xf3, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, 0x07, 0xf1, - 0xb6, 0xb6, 0xa7, 0x3f, 0xf6, 0x10, 0xe9, 0x78, 0x20, 0x17, 0xea, 0x6b, 0x48, 0x25, 0x17, 0xea, 0x06, 0x62, 0x17, - 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0xdb, 0x1a, 0x05, 0x2b, 0x01, 0x67, 0xda, 0x5b, 0x30, 0xd8, 0xc0, 0xba, 0x65, - 0x19, 0xfc, 0x0d, 0xd7, 0x34, 0x81, 0x1b, 0x16, 0x59, 0xef, 0x0d, 0xb6, 0xd2, 0x5b, 0x70, 0xb4, 0x4c, 0x9c, 0x4b, - 0x49, 0x56, 0xb6, 0xc8, 0xb8, 0x7a, 0x14, 0x52, 0x35, 0x3d, 0xdc, 0x89, 0xfa, 0x41, 0x88, 0x3c, 0x58, 0xa7, 0x2c, - 0x2a, 0xd6, 0x20, 0xb3, 0x07, 0x7f, 0x0f, 0x19, 0x39, 0xca, 0x81, 0xa3, 0xd0, 0x5f, 0x9a, 0x40, 0xe7, 0xf9, 0x29, - 0xd4, 0x79, 0x24, 0xd8, 0x4a, 0x3d, 0x14, 0x56, 0x5e, 0x40, 0x74, 0xb0, 0x85, 0xb1, 0xdc, 0x93, 0x50, 0xb1, 0x29, - 0x13, 0x79, 0x1c, 0xd4, 0x12, 0x30, 0x56, 0x10, 0xcc, 0x59, 0x25, 0x5d, 0x90, 0xf2, 0x46, 0x0f, 0x8b, 0xcc, 0xfd, - 0x9d, 0xa0, 0xfc, 0xdf, 0xa9, 0x9c, 0x70, 0x7d, 0x19, 0x02, 0x1c, 0xed, 0x77, 0x20, 0x4a, 0x8c, 0xf5, 0x8b, 0x16, - 0xef, 0x64, 0xe6, 0x6c, 0x6a, 0x07, 0x09, 0x32, 0xb6, 0xc7, 0xaf, 0x10, 0x5a, 0x2d, 0x14, 0x59, 0x34, 0x5c, 0x30, - 0xdd, 0x9e, 0xd2, 0xaa, 0x7b, 0xd8, 0xf0, 0xac, 0xf4, 0x50, 0xa9, 0x6f, 0x63, 0x02, 0xcb, 0x2a, 0x65, 0xf8, 0x76, - 0x42, 0xd5, 0x89, 0x41, 0xc5, 0xba, 0x65, 0x4b, 0x38, 0xc4, 0x62, 0xd2, 0x58, 0x67, 0x03, 0x1e, 0xb1, 0x04, 0xfe, - 0xd9, 0xf2, 0x31, 0x5b, 0xf2, 0x68, 0xb2, 0xbd, 0x59, 0xf6, 0xfb, 0xa5, 0x17, 0x7a, 0xf5, 0x2c, 0xfb, 0x2e, 0x9a, - 0xcf, 0xaa, 0xb9, 0x8f, 0x8a, 0x8b, 0xc9, 0x60, 0xb0, 0xf5, 0xb3, 0xe1, 0x90, 0x25, 0xc3, 0xe1, 0x24, 0xfb, 0x0e, - 0x5e, 0xfb, 0x8e, 0x47, 0x6a, 0x49, 0x25, 0x37, 0x19, 0xec, 0xef, 0x03, 0x1e, 0xf9, 0xac, 0xf3, 0xd3, 0xb2, 0xe9, - 0xd2, 0xfd, 0xcc, 0x8e, 0xbb, 0xd0, 0x1d, 0x60, 0xe3, 0x6d, 0x83, 0x8e, 0xfc, 0xeb, 0x1d, 0x52, 0xea, 0x26, 0x03, - 0xb0, 0x1b, 0x0d, 0x70, 0xc8, 0x54, 0x2f, 0x45, 0x56, 0x2f, 0x65, 0xaa, 0x97, 0x64, 0xe5, 0x12, 0x2c, 0x24, 0xa6, - 0xca, 0x6d, 0x65, 0xe5, 0x96, 0x0d, 0xd7, 0xc3, 0xc1, 0x36, 0x8a, 0xcb, 0x66, 0x05, 0xf7, 0x85, 0x35, 0x05, 0xfe, - 0xdf, 0xb1, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x5b, 0x74, 0x4c, 0x82, 0x0b, 0xc4, 0x3d, 0xbb, 0x03, 0x3b, 0x2c, 0xfc, - 0x05, 0xd7, 0xc9, 0x31, 0xdb, 0xe3, 0xa3, 0xd0, 0x2b, 0xd8, 0x9d, 0x4f, 0x40, 0xbb, 0x60, 0x6b, 0x80, 0x6c, 0x6c, - 0x87, 0x8f, 0x56, 0xc7, 0xe3, 0x5b, 0xcf, 0x67, 0x0f, 0xf8, 0xe3, 0x72, 0x75, 0x3c, 0xee, 0x3d, 0xa3, 0xde, 0xbb, - 0xe5, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xed, 0x0d, 0x8f, 0x27, 0x83, 0xc1, 0xad, 0xbf, 0xe0, 0xf5, 0xec, 0x16, 0xb4, - 0x03, 0x97, 0x0b, 0xa9, 0x6b, 0xf6, 0xee, 0x78, 0xe6, 0x2d, 0x70, 0x6c, 0xee, 0xe0, 0xe8, 0xed, 0xf7, 0xbd, 0x15, - 0x8f, 0xbc, 0x3b, 0x52, 0x31, 0xad, 0xb9, 0xe2, 0x78, 0xdb, 0xe1, 0x7e, 0xba, 0xe6, 0x21, 0x3c, 0xc2, 0xaa, 0x4c, - 0x6f, 0x83, 0xf7, 0x3e, 0x5b, 0x6b, 0x16, 0xb8, 0x07, 0xcc, 0xb1, 0x21, 0x3b, 0xa1, 0x99, 0xf8, 0x6b, 0xec, 0x9f, - 0x5b, 0xd5, 0x3f, 0x34, 0xff, 0x4b, 0xdd, 0x4f, 0xe0, 0xf6, 0x45, 0x16, 0x24, 0xf6, 0x9e, 0xdf, 0xb2, 0x7b, 0x6e, - 0xd8, 0x66, 0x2f, 0x4c, 0xd9, 0x67, 0x4a, 0x8d, 0x1f, 0x29, 0x75, 0x63, 0x19, 0x56, 0x32, 0x77, 0x5f, 0x46, 0xe0, - 0x70, 0x40, 0x7e, 0x5a, 0x21, 0x0e, 0x42, 0xeb, 0x26, 0xab, 0xb9, 0xa2, 0x9c, 0x0b, 0x6d, 0x99, 0x79, 0x15, 0xb0, - 0x98, 0xa5, 0x14, 0x1a, 0x0b, 0x00, 0x04, 0x93, 0x42, 0x6b, 0xef, 0x65, 0x00, 0x39, 0x41, 0xc3, 0x9f, 0x9a, 0xab, - 0xa2, 0xac, 0x65, 0x4b, 0x42, 0x94, 0xed, 0x7a, 0x78, 0x8d, 0x90, 0x69, 0xfd, 0xfe, 0x25, 0x91, 0xac, 0x4d, 0xf2, - 0x9b, 0x1a, 0x2d, 0x01, 0x39, 0x59, 0x02, 0x26, 0x7e, 0xae, 0xf9, 0x04, 0xe0, 0x49, 0xc7, 0x83, 0xfc, 0x3b, 0x5e, - 0x33, 0x41, 0x64, 0x1b, 0xb9, 0x3f, 0x29, 0x9e, 0x23, 0x19, 0x41, 0xf1, 0x5d, 0xad, 0x32, 0x16, 0x86, 0x79, 0xa0, - 0x80, 0xbc, 0x07, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, 0xe8, - 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x3d, 0x89, 0x6e, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, 0x67, - 0xd1, 0x77, 0xf9, 0x7c, 0x42, 0x4a, 0xb2, 0xe3, 0x31, 0x1b, 0x55, 0x75, 0xb1, 0x99, 0x86, 0xf2, 0xa7, 0x87, 0xe0, - 0xeb, 0x05, 0xf5, 0x9a, 0xac, 0x52, 0xfd, 0x1d, 0x55, 0xca, 0x8b, 0x86, 0xd7, 0xfe, 0x77, 0xb9, 0xdc, 0xf7, 0x80, - 0xb4, 0x96, 0x97, 0x5c, 0xbe, 0x1f, 0x21, 0xc6, 0x88, 0x1f, 0x78, 0x25, 0x8f, 0x58, 0xa8, 0xa6, 0x70, 0xcd, 0x23, - 0x04, 0x79, 0xcb, 0x74, 0xf0, 0xb7, 0x9e, 0x38, 0xdd, 0x9f, 0x28, 0xed, 0xe2, 0x0b, 0x8b, 0xba, 0x27, 0x6b, 0xeb, - 0x06, 0xe4, 0x60, 0xc3, 0x74, 0x51, 0x90, 0x6d, 0x4a, 0x23, 0x68, 0xa3, 0xe5, 0xc0, 0x86, 0x93, 0xab, 0x0d, 0x67, - 0xae, 0x21, 0xb8, 0x2f, 0x2f, 0xd3, 0xd1, 0x02, 0x3e, 0xa4, 0xba, 0xbd, 0xc4, 0xcf, 0x87, 0x0d, 0x8f, 0x80, 0xcc, - 0x8e, 0xf8, 0xcc, 0x26, 0x92, 0x4e, 0xea, 0x52, 0x01, 0xbb, 0x5d, 0xbc, 0x05, 0x39, 0x62, 0xe6, 0xbe, 0x42, 0xf5, - 0x2d, 0x1a, 0x70, 0x65, 0xac, 0x7d, 0x4d, 0x32, 0x16, 0xde, 0x94, 0xd3, 0x70, 0x90, 0xc3, 0x73, 0xfa, 0xda, 0x72, - 0x9b, 0x65, 0x3f, 0x17, 0x10, 0x04, 0x51, 0x12, 0x8f, 0x0f, 0x78, 0x5f, 0xe6, 0x43, 0x8d, 0x92, 0x8f, 0x65, 0x23, - 0x95, 0x5e, 0x89, 0xfe, 0x6e, 0xcc, 0x25, 0x06, 0x7c, 0x9b, 0xb7, 0x05, 0x85, 0xcb, 0xea, 0x78, 0xbc, 0xac, 0x46, - 0xc6, 0xb3, 0x0c, 0x54, 0x2b, 0xd3, 0x3a, 0x88, 0xcd, 0x7c, 0xb1, 0xf0, 0x17, 0x3b, 0x27, 0x11, 0x51, 0x10, 0xd8, - 0x91, 0xf0, 0x20, 0x52, 0xbf, 0xcc, 0x3d, 0xdd, 0xa9, 0x3e, 0x3b, 0x2c, 0x6c, 0x22, 0xbd, 0xa0, 0x64, 0xf2, 0x49, - 0x70, 0x50, 0xfd, 0x1d, 0x84, 0x0d, 0xe1, 0xcd, 0xab, 0x5e, 0x67, 0x99, 0x9a, 0x95, 0x20, 0x61, 0xc6, 0x1c, 0xc1, - 0xe3, 0xb0, 0xd3, 0xd8, 0x96, 0xc7, 0x16, 0x1c, 0x9d, 0xb7, 0x61, 0x2b, 0xb6, 0x66, 0x77, 0xaa, 0x4e, 0x0b, 0x1e, - 0x4e, 0x87, 0xd7, 0x01, 0xae, 0xbe, 0xcd, 0x25, 0xe7, 0x2b, 0x3a, 0xc1, 0x36, 0x03, 0x1e, 0x4d, 0xc4, 0x6c, 0xf3, - 0x5d, 0xa4, 0x16, 0xcf, 0x66, 0xc8, 0x17, 0xb4, 0xfe, 0xc4, 0x6c, 0x65, 0x92, 0x57, 0x03, 0xbe, 0x98, 0x6c, 0xbe, - 0x8b, 0xe0, 0xd5, 0xef, 0xc0, 0x8a, 0x91, 0x39, 0xb3, 0x6c, 0xf3, 0x5d, 0x84, 0x63, 0xb6, 0xfa, 0x2e, 0xa2, 0x51, - 0x5b, 0xcb, 0x7d, 0xe9, 0xae, 0x01, 0x61, 0xe5, 0x8e, 0xc5, 0xf0, 0x1a, 0x88, 0x67, 0xda, 0x48, 0xba, 0x91, 0x86, - 0xde, 0x98, 0x87, 0xd3, 0x38, 0xd8, 0x50, 0x2b, 0xe4, 0x99, 0x21, 0x66, 0xf1, 0x77, 0xd1, 0x9c, 0xad, 0xb1, 0x22, - 0x5b, 0x1e, 0x0f, 0xae, 0x27, 0xdb, 0x1b, 0xbe, 0x01, 0xf2, 0xb3, 0xc9, 0xd6, 0x6c, 0x51, 0x77, 0x5c, 0xcc, 0xb6, - 0xdf, 0x45, 0xf3, 0xc9, 0x1a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x35, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, 0x3d, - 0xb6, 0x19, 0x07, 0x2b, 0xb6, 0xb9, 0x0e, 0xee, 0xd8, 0x66, 0x0c, 0x44, 0x1c, 0xd4, 0xef, 0xde, 0x16, 0x16, 0x5f, - 0xc4, 0x36, 0xd7, 0x26, 0x6d, 0xfb, 0x5d, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xcd, 0xbc, 0x35, 0x83, 0x4b, - 0xc8, 0xd2, 0x8b, 0xd9, 0x76, 0x78, 0xcd, 0x36, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0x56, 0xfc, 0x8e, 0x25, 0x7c, 0xdd, - 0xc4, 0x37, 0x5b, 0xd0, 0x88, 0x9e, 0x64, 0xd0, 0x57, 0x50, 0x33, 0x73, 0x5e, 0x5a, 0x50, 0xb9, 0x87, 0x16, 0x1c, - 0x50, 0x90, 0xb6, 0x01, 0x82, 0x24, 0x9e, 0xdd, 0xcb, 0x70, 0x73, 0x2b, 0x85, 0x01, 0x37, 0x81, 0x19, 0x30, 0x30, - 0xfd, 0x0c, 0x7e, 0x58, 0xe9, 0x12, 0x21, 0xce, 0x7e, 0x4a, 0x49, 0x32, 0xcf, 0x4f, 0x45, 0x9a, 0xbb, 0x85, 0xeb, - 0x14, 0x66, 0x45, 0x81, 0xea, 0xa7, 0xa4, 0x34, 0xb0, 0x50, 0x89, 0x4c, 0xa5, 0xe0, 0x97, 0xcd, 0x79, 0x94, 0x9d, - 0xa2, 0x73, 0x5d, 0x5e, 0x4f, 0x9c, 0xd3, 0x49, 0xdf, 0x7f, 0xe0, 0x18, 0xb6, 0x90, 0x81, 0x0b, 0x7f, 0xea, 0x09, - 0xe3, 0xd4, 0x0a, 0xc4, 0x54, 0xf2, 0xec, 0x29, 0x7c, 0x26, 0xb4, 0x3a, 0xba, 0xf0, 0xfd, 0xa0, 0xd0, 0x26, 0xe9, - 0x16, 0x24, 0x29, 0x78, 0x8a, 0x5e, 0x72, 0xde, 0x06, 0x2a, 0xc5, 0x88, 0x16, 0x44, 0xda, 0x5a, 0x66, 0x0e, 0xd2, - 0x96, 0xe6, 0xbb, 0x26, 0x7e, 0x0e, 0x0b, 0xb8, 0x88, 0x16, 0x76, 0xa5, 0xe0, 0x51, 0x15, 0x2b, 0xf7, 0x36, 0xcf, - 0x11, 0xce, 0xe8, 0x5a, 0x26, 0x00, 0xae, 0xf7, 0xab, 0xb0, 0x56, 0x78, 0x45, 0xcd, 0x22, 0x2f, 0x6a, 0xfa, 0x64, - 0x0b, 0xdc, 0xc7, 0xa2, 0x44, 0x81, 0xb3, 0x16, 0x0c, 0xd8, 0x0a, 0x4b, 0x76, 0x52, 0xd8, 0x14, 0x2d, 0xa1, 0x77, - 0xc0, 0x4f, 0x07, 0x35, 0x93, 0x01, 0x34, 0x01, 0x34, 0x1e, 0xff, 0x02, 0x50, 0xd3, 0xdb, 0x5a, 0x6c, 0xaa, 0xa0, - 0x54, 0xca, 0x4d, 0xf8, 0x19, 0x18, 0x66, 0xf8, 0xa1, 0x90, 0xdb, 0x44, 0x89, 0x9c, 0x1f, 0x8b, 0x52, 0x2c, 0x4b, - 0x51, 0x25, 0xed, 0x86, 0x82, 0x47, 0x84, 0xdb, 0xa0, 0x31, 0x73, 0x7b, 0xa2, 0x8b, 0x56, 0x84, 0x72, 0x6c, 0x37, - 0x31, 0xd2, 0x28, 0xb3, 0xb3, 0x5d, 0x27, 0x0b, 0xed, 0xf7, 0x55, 0x0e, 0x59, 0x07, 0xac, 0x91, 0x7c, 0xbd, 0xe6, - 0xd0, 0x6d, 0xa3, 0xbc, 0x78, 0xf0, 0x7c, 0x05, 0xa7, 0x39, 0x9e, 0xd8, 0x5d, 0xaf, 0x3b, 0x45, 0x22, 0x5e, 0xe1, - 0xa4, 0xaa, 0x46, 0xb2, 0x70, 0xdc, 0xb9, 0xd3, 0x5a, 0xac, 0x95, 0x4c, 0xe3, 0x72, 0xd0, 0x00, 0xd0, 0x0c, 0x3e, - 0x95, 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, - 0x11, 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0xf3, 0x4a, - 0x0f, 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, - 0x3c, 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, - 0x5d, 0x28, 0xe7, 0x4c, 0xce, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, - 0x8c, 0x4e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x56, 0xa9, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, - 0xc6, 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, - 0x94, 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x07, 0x59, 0x14, 0x38, 0x80, - 0xab, 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0x0e, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, - 0xcc, 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, - 0xb4, 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x4f, 0x5f, - 0xa7, 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7d, 0x41, 0x11, 0x17, 0x35, 0xb8, - 0xf2, 0xce, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, - 0x0e, 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x46, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xac, 0x58, 0x3e, 0x5a, 0xa8, 0xcc, - 0x08, 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xd3, 0x3d, 0xba, 0xab, 0xce, - 0x32, 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, - 0x77, 0x9d, 0xe5, 0x5b, 0xa9, 0x66, 0x6b, 0x28, 0x2a, 0xb5, 0x92, 0x14, 0x07, 0x19, 0xae, 0xdb, 0xdc, 0x87, 0xcd, - 0x14, 0xf4, 0x8c, 0x91, 0xc8, 0x3c, 0x7f, 0x22, 0x5f, 0x82, 0x73, 0xc6, 0x59, 0x21, 0x30, 0x61, 0xac, 0xde, 0xb5, - 0x96, 0x4a, 0x43, 0x8a, 0xb1, 0x93, 0x51, 0x96, 0x55, 0x96, 0x2e, 0xb3, 0xb5, 0x84, 0x2d, 0xab, 0xc8, 0x2d, 0x6c, - 0x99, 0xc9, 0x6a, 0xbe, 0xcf, 0xb9, 0x83, 0xf2, 0xcd, 0x36, 0x19, 0x3f, 0x48, 0x64, 0xef, 0x36, 0x50, 0xc2, 0xf3, - 0xd1, 0x7f, 0x20, 0xfd, 0x36, 0xc3, 0x38, 0xe5, 0xb6, 0x92, 0x16, 0xe0, 0xf4, 0x8f, 0xc7, 0xf7, 0x39, 0x06, 0x0d, - 0x8e, 0x30, 0x8e, 0xac, 0xdf, 0xbf, 0xcb, 0xbd, 0x1a, 0x13, 0x75, 0xf4, 0x42, 0xbf, 0x9f, 0xd3, 0xc3, 0x69, 0x3e, - 0x5a, 0xa7, 0x3b, 0x64, 0x27, 0xb4, 0xb1, 0xf2, 0x83, 0x5a, 0x01, 0xb3, 0xb7, 0x3e, 0x9f, 0x0e, 0x40, 0xc7, 0x02, - 0x24, 0x9a, 0xcd, 0x44, 0x62, 0x4e, 0xba, 0x27, 0xe1, 0xe9, 0x81, 0x05, 0x0e, 0x30, 0x39, 0xff, 0x87, 0xf0, 0x66, - 0x60, 0x83, 0x46, 0x89, 0xbe, 0x46, 0x57, 0xb5, 0xb9, 0xd1, 0xf1, 0xd2, 0x53, 0x48, 0x64, 0x05, 0xcb, 0xe7, 0xbe, - 0xdc, 0xc0, 0x69, 0x0f, 0x35, 0x87, 0xca, 0x12, 0x3c, 0x3d, 0x97, 0xf9, 0xf1, 0xb8, 0xc9, 0xa0, 0xb0, 0xfd, 0x46, - 0x68, 0x6f, 0xcc, 0x52, 0x0d, 0x15, 0xe1, 0xa0, 0xf3, 0xb5, 0x98, 0xd5, 0x23, 0xfa, 0x7b, 0x7e, 0x3c, 0xae, 0x09, - 0x0c, 0x38, 0x2c, 0x65, 0x26, 0x5a, 0x28, 0x96, 0xd6, 0xd9, 0x8c, 0xea, 0xc0, 0x03, 0x13, 0x73, 0x16, 0xee, 0x01, - 0xb4, 0x49, 0xad, 0x02, 0xbd, 0x8a, 0xe8, 0x27, 0xee, 0xd7, 0xf6, 0xeb, 0xf5, 0xc8, 0x2c, 0x1d, 0xb9, 0x31, 0x16, - 0x00, 0x1c, 0x78, 0x59, 0x93, 0x3c, 0x27, 0x5f, 0x43, 0xbb, 0x27, 0x17, 0xf2, 0x27, 0x28, 0x5b, 0x78, 0xa5, 0x9a, - 0x56, 0x16, 0x6b, 0xae, 0xaa, 0x57, 0x17, 0x3c, 0x37, 0x99, 0xd6, 0x69, 0x25, 0x54, 0xac, 0x5f, 0x43, 0x5d, 0xe2, - 0xb5, 0xa6, 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x79, 0x6d, - 0x1c, 0x3e, 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0xab, 0x1a, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, - 0xc5, 0xc4, 0xee, 0xd0, 0xaa, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, - 0x01, 0x2f, 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x72, 0x26, - 0xc0, 0x0f, 0x4a, 0xad, 0xe9, 0x83, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, - 0xe7, 0xe3, 0xe5, 0xb5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x55, 0xab, 0x7f, 0x98, 0xea, 0x5b, - 0xe8, 0x4e, 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, - 0x1c, 0xec, 0x0d, 0x70, 0xe2, 0x97, 0xc7, 0xa3, 0xb8, 0xa9, 0x7c, 0x76, 0xd9, 0x35, 0xb2, 0x72, 0x00, 0x73, 0x88, - 0x82, 0x71, 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xcd, 0xf8, 0xf4, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0x55, - 0xdf, 0x3d, 0x03, 0xd2, 0xb2, 0x7e, 0x3f, 0x7a, 0x7e, 0x3d, 0x7d, 0x36, 0x8c, 0x02, 0x70, 0xec, 0xb2, 0x97, 0x97, - 0x31, 0x5f, 0x5d, 0x33, 0xcb, 0x14, 0x16, 0xf9, 0x66, 0x40, 0x75, 0xc9, 0x6a, 0xe9, 0x7a, 0x05, 0x58, 0xba, 0xfc, - 0xe6, 0x21, 0x4c, 0x0d, 0x68, 0x64, 0xcd, 0xdd, 0x69, 0xae, 0x05, 0x4a, 0x3d, 0xef, 0x67, 0x86, 0x7c, 0x5d, 0x06, - 0x5d, 0x41, 0xba, 0xe7, 0x11, 0xe9, 0xe5, 0x41, 0x3a, 0xdd, 0x1f, 0x4a, 0x01, 0x96, 0xfa, 0x52, 0x7c, 0x06, 0x85, - 0x45, 0xe3, 0x1b, 0x01, 0xda, 0x1a, 0xaa, 0x69, 0xaf, 0x14, 0x55, 0x2f, 0xe8, 0x95, 0xe2, 0x73, 0x4f, 0x0f, 0x95, - 0xf9, 0xb2, 0x74, 0xf4, 0x3f, 0xa3, 0xe6, 0x82, 0x13, 0x62, 0x26, 0xe6, 0x00, 0x2a, 0x41, 0x1b, 0xdf, 0xfa, 0x64, - 0xe3, 0x53, 0xbd, 0x8a, 0x9b, 0x3e, 0xaf, 0xad, 0x65, 0x4e, 0x08, 0x9b, 0xee, 0x25, 0x40, 0x45, 0x5e, 0x09, 0x8f, - 0x60, 0xf9, 0xe5, 0x0f, 0x79, 0xba, 0x42, 0xb4, 0x8e, 0x7b, 0x96, 0xb9, 0x34, 0xf6, 0xaf, 0x0d, 0xa6, 0xaf, 0x6f, - 0xb7, 0x45, 0x7e, 0x6a, 0x62, 0xc2, 0x7a, 0xac, 0xe8, 0x9b, 0x77, 0xe1, 0x5a, 0xa0, 0xc0, 0xa1, 0x44, 0x62, 0x9b, - 0x2a, 0x14, 0xf1, 0x20, 0xe9, 0xd3, 0x45, 0xeb, 0xd3, 0x00, 0x53, 0x6b, 0x39, 0x30, 0x87, 0x70, 0x15, 0x17, 0x3e, - 0x7a, 0xfa, 0x16, 0xb3, 0x70, 0x3e, 0xf1, 0x3e, 0x7a, 0xc5, 0xc8, 0x7c, 0xdc, 0x47, 0xa5, 0x92, 0xfe, 0x79, 0x3c, - 0xce, 0xf2, 0xb9, 0xef, 0xd0, 0x47, 0x7a, 0xa8, 0x72, 0x41, 0xd9, 0x1b, 0x63, 0x12, 0x81, 0xd2, 0x18, 0xef, 0xe3, - 0xe0, 0x38, 0xef, 0xd3, 0x00, 0x52, 0xfb, 0xc4, 0x7b, 0x52, 0x72, 0x78, 0xce, 0x31, 0x27, 0x94, 0x56, 0x84, 0xe5, - 0x7c, 0x91, 0xa1, 0x5c, 0x77, 0x4e, 0xc1, 0x24, 0x87, 0x04, 0xc3, 0x5f, 0x35, 0x6f, 0x62, 0x05, 0xc2, 0xae, 0x91, - 0x33, 0x47, 0x4f, 0xaa, 0x24, 0x2c, 0x05, 0x1c, 0x95, 0x99, 0x67, 0xd8, 0x1b, 0x9e, 0x18, 0x46, 0x0e, 0x56, 0xf9, - 0xa3, 0x3a, 0x11, 0xb9, 0x47, 0x17, 0x18, 0x95, 0x85, 0x57, 0x0d, 0x5d, 0x69, 0x50, 0x49, 0x76, 0xfa, 0x15, 0xd7, - 0x80, 0xda, 0x1a, 0x23, 0x96, 0x83, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, - 0x95, 0xdc, 0xf5, 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, - 0x2c, 0x85, 0x23, 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, - 0x42, 0x9a, 0x6c, 0x5f, 0xcf, 0x3f, 0xe4, 0x5a, 0x90, 0x95, 0x5b, 0xce, 0xe9, 0xb0, 0xf8, 0xc6, 0xd9, 0x57, 0x39, - 0x79, 0x8a, 0x59, 0x46, 0x7a, 0xa7, 0x98, 0x17, 0xf0, 0xa7, 0xb2, 0xd4, 0x93, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, - 0x97, 0xde, 0xb6, 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0x0f, 0xf1, 0x48, 0x9e, 0x61, 0x5b, 0x96, 0xb0, 0xd0, 0x2a, - 0x18, 0x03, 0x48, 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x8f, 0xc7, 0xcb, 0xad, 0x39, 0x4b, 0x0e, 0xe0, 0xfa, 0xca, - 0x13, 0xf3, 0x0e, 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x5b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, - 0x62, 0xad, 0x63, 0xc9, 0xad, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0x7f, 0x70, 0x83, 0xab, - 0x6b, 0x63, 0x50, 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0x8b, 0x8a, 0x7c, 0xf9, 0xad, - 0x9d, 0x03, 0x82, 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, - 0x33, 0xd8, 0xc4, 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, - 0xab, 0x85, 0x48, 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, - 0x41, 0x27, 0x68, 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, - 0x07, 0x99, 0x13, 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, - 0x74, 0x28, 0x59, 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, - 0x0a, 0x5c, 0x08, 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xd5, 0xb4, 0x90, 0xa6, 0x81, 0x6a, - 0x9a, 0x3b, 0xe6, 0x81, 0xbd, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0x55, 0xfc, 0x83, 0x74, 0x2f, 0xce, - 0xe1, 0x2f, 0x6b, 0xfa, 0x20, 0xc2, 0x46, 0x0e, 0x1a, 0x4b, 0x89, 0xb1, 0x51, 0xe1, 0xdf, 0x12, 0x65, 0x43, 0x86, - 0x80, 0x10, 0xd2, 0x46, 0x45, 0x3f, 0xac, 0x2f, 0xef, 0x32, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, - 0xa9, 0x47, 0x3c, 0x5e, 0x1b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, - 0x28, 0x17, 0xbc, 0xe2, 0x39, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xa8, 0xe8, 0xf3, 0x39, 0xf0, 0x4c, - 0x40, 0xa0, 0x63, 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0xb7, 0x48, - 0x94, 0xfa, 0x8a, 0x94, 0xa4, 0x6f, 0x45, 0x8d, 0x57, 0x62, 0x15, 0x91, 0x40, 0x86, 0x1a, 0x22, 0x56, 0xd5, 0x53, - 0xf7, 0xa6, 0x98, 0x0c, 0x06, 0xb9, 0x2f, 0xa7, 0x27, 0xde, 0xd0, 0x50, 0x79, 0xd7, 0x15, 0xed, 0xf4, 0x44, 0x2b, - 0xe5, 0x2d, 0xa4, 0x25, 0x68, 0x1a, 0x46, 0x9a, 0x43, 0xa9, 0x6b, 0xe9, 0x6e, 0x0c, 0xe2, 0x4b, 0x26, 0x7a, 0xb6, - 0x53, 0x3b, 0x4a, 0x5b, 0xd2, 0x1e, 0x42, 0x7a, 0xee, 0x92, 0x8f, 0x21, 0x42, 0x4c, 0x55, 0xa5, 0xbc, 0x09, 0xd1, - 0xc9, 0xfd, 0x80, 0x21, 0x11, 0xe8, 0x73, 0x8e, 0x61, 0x5d, 0x34, 0xd4, 0x18, 0x6c, 0x6d, 0xb6, 0x50, 0xc2, 0x7c, - 0xc9, 0x78, 0x2a, 0x19, 0x34, 0x00, 0x32, 0xe0, 0xb3, 0x97, 0x81, 0xe5, 0xaf, 0x20, 0x7e, 0xb4, 0xf1, 0xf1, 0xf8, - 0x67, 0x4d, 0x21, 0xb6, 0x7f, 0xc2, 0x66, 0x08, 0x8f, 0xea, 0x01, 0xcf, 0x7c, 0x13, 0x27, 0x68, 0x05, 0x24, 0x65, - 0x76, 0x34, 0x91, 0xbd, 0xea, 0x21, 0x9c, 0xca, 0x0a, 0xd4, 0x51, 0xd6, 0x59, 0x09, 0x3f, 0xc2, 0x54, 0xb7, 0x12, - 0x6b, 0x81, 0x36, 0x57, 0x2b, 0xd6, 0x02, 0x38, 0xf0, 0x2b, 0x08, 0x9e, 0xa8, 0xe6, 0xe0, 0x62, 0x50, 0x80, 0xcf, - 0x01, 0xf0, 0x22, 0x77, 0xe1, 0xc1, 0x3c, 0xb2, 0xac, 0x46, 0x18, 0x8e, 0x2a, 0x62, 0xfd, 0x9a, 0xed, 0xc8, 0x07, - 0x6e, 0xc7, 0xf8, 0x5c, 0x7b, 0x2c, 0x59, 0x0e, 0x46, 0x99, 0x7b, 0xb5, 0x44, 0xcf, 0x9b, 0x34, 0x6e, 0x46, 0x4f, - 0x0e, 0xb5, 0xfc, 0x5f, 0xd0, 0xcb, 0xa0, 0xbf, 0x85, 0x5b, 0x5e, 0xf3, 0xbb, 0x05, 0x91, 0x66, 0x7a, 0x05, 0x91, - 0x32, 0x6a, 0x44, 0xc6, 0x10, 0x36, 0xa9, 0x6e, 0x65, 0x93, 0xea, 0x42, 0xc0, 0xd3, 0x09, 0xa9, 0xae, 0x85, 0xb4, - 0x51, 0x4d, 0xeb, 0x40, 0xc6, 0x22, 0xbd, 0xfb, 0xf1, 0x2f, 0x2f, 0x3e, 0xbd, 0xf9, 0xe5, 0xc7, 0xc5, 0x9b, 0x77, - 0xaf, 0xdf, 0xbc, 0x7b, 0xf3, 0xe9, 0x37, 0x82, 0xf0, 0x98, 0x0a, 0x95, 0xe1, 0xc3, 0xfb, 0xdb, 0x37, 0x4e, 0x06, - 0xdb, 0x9b, 0x21, 0x6b, 0xdf, 0xc8, 0xc1, 0x10, 0x88, 0x6c, 0x10, 0x32, 0xc8, 0x4e, 0x6d, 0xfb, 0x33, 0x31, 0xc7, - 0xd8, 0x3b, 0x81, 0xc9, 0x16, 0x24, 0x87, 0x65, 0x5e, 0x32, 0x22, 0x57, 0x8e, 0xd6, 0x0f, 0x68, 0xc1, 0x5b, 0x70, - 0x91, 0x49, 0xf3, 0xd5, 0x2f, 0x04, 0xb1, 0x4f, 0x2b, 0xa9, 0xf2, 0xd5, 0xb6, 0xe6, 0xf9, 0xf6, 0x7e, 0x9f, 0xd3, - 0x8a, 0x99, 0x4b, 0x23, 0x6a, 0x01, 0x0e, 0xc0, 0x97, 0xf0, 0xc7, 0x8d, 0xb6, 0xa4, 0xc9, 0x2c, 0xfa, 0x2c, 0x84, - 0xa0, 0x4b, 0x03, 0x69, 0x62, 0x8f, 0xbc, 0xd4, 0x27, 0x0b, 0x09, 0xdc, 0x11, 0xc3, 0xa7, 0x15, 0x41, 0xaf, 0x18, - 0x51, 0x5c, 0x72, 0x85, 0x4a, 0x29, 0xf9, 0x37, 0xca, 0x2e, 0x2a, 0xe4, 0xac, 0x60, 0xf7, 0x8a, 0x1c, 0x19, 0x3f, - 0x08, 0x26, 0xbe, 0x0a, 0xdc, 0x7f, 0x89, 0x77, 0x38, 0x53, 0x1c, 0xc9, 0x09, 0x7f, 0xc8, 0x30, 0xb0, 0xbf, 0x02, - 0x9f, 0x57, 0x87, 0x79, 0x79, 0xab, 0x4f, 0xb9, 0x25, 0x1f, 0x4f, 0x96, 0x37, 0x60, 0xb0, 0x5f, 0xaa, 0xe6, 0x6e, - 0x78, 0x3d, 0x5b, 0xce, 0xd9, 0x61, 0x16, 0xcd, 0x83, 0x15, 0x9b, 0x65, 0xf3, 0x60, 0xdd, 0xf0, 0x0d, 0xbb, 0xe3, - 0x1b, 0xab, 0x6a, 0x1b, 0xbb, 0x6a, 0x93, 0x2d, 0xbf, 0x03, 0x09, 0xe1, 0x36, 0xf3, 0x72, 0x96, 0xb0, 0x95, 0xcf, - 0xb6, 0x20, 0xd1, 0xae, 0xd9, 0x16, 0x2e, 0x62, 0x1b, 0xfe, 0x63, 0xee, 0x6d, 0x59, 0xc9, 0x2e, 0xc7, 0xac, 0xc2, - 0xf9, 0xe7, 0xc3, 0x03, 0xda, 0x0b, 0xf5, 0xb3, 0x6b, 0xf5, 0x6c, 0xa2, 0xec, 0x66, 0xdb, 0xd1, 0xe2, 0x3e, 0xad, - 0xb6, 0x61, 0x86, 0x9e, 0xe5, 0xf0, 0xd1, 0x56, 0x0a, 0x7e, 0x7a, 0x81, 0x5f, 0xb2, 0xa3, 0xb6, 0xd2, 0xb6, 0x5d, - 0x95, 0xd8, 0x0a, 0x5a, 0x14, 0x59, 0xad, 0xf0, 0xc0, 0x8a, 0x3f, 0x87, 0x05, 0x8c, 0x3d, 0xc7, 0x39, 0xaf, 0xfd, - 0x11, 0x32, 0xde, 0x3b, 0x00, 0x68, 0x99, 0xe3, 0x00, 0x8f, 0x58, 0x31, 0x8a, 0x06, 0xef, 0xf2, 0x5a, 0x59, 0xad, - 0x34, 0x27, 0xa1, 0x6d, 0xc4, 0xaa, 0xe5, 0x48, 0xd5, 0x8c, 0x48, 0x1f, 0xa4, 0xe7, 0x7d, 0x8f, 0xa8, 0x06, 0x7b, - 0x32, 0xaf, 0x03, 0xfb, 0xf4, 0xb2, 0xb5, 0xaa, 0x3b, 0xbf, 0xa7, 0x4a, 0x97, 0x1c, 0xd9, 0xf2, 0xd3, 0x65, 0xf8, - 0xa0, 0xfe, 0x94, 0x5c, 0x1f, 0x0a, 0x1c, 0xe1, 0xb1, 0x0a, 0x38, 0x5f, 0xcf, 0x45, 0xbb, 0x13, 0x61, 0x57, 0x2e, - 0x01, 0x21, 0xbe, 0xa4, 0x69, 0x8e, 0xc7, 0x11, 0x4d, 0x44, 0xd8, 0xc4, 0xe8, 0x2f, 0xec, 0x3e, 0x94, 0x58, 0x2e, - 0x2b, 0x0d, 0x4a, 0x2e, 0x19, 0xbc, 0x27, 0xed, 0x35, 0x68, 0x96, 0x57, 0xae, 0x26, 0x13, 0x39, 0x28, 0x1f, 0x8f, - 0x05, 0xec, 0xa5, 0xc6, 0x4f, 0x13, 0x7e, 0xc2, 0xf2, 0xd6, 0xde, 0x9a, 0x52, 0x54, 0xd2, 0x00, 0x15, 0xf8, 0x98, - 0xc1, 0xff, 0xee, 0x0c, 0xb1, 0x60, 0x8a, 0x4e, 0x1f, 0xce, 0xc4, 0xdc, 0x7a, 0x6e, 0x95, 0x75, 0x92, 0xad, 0x51, - 0x4e, 0xc0, 0xbf, 0xa5, 0x3a, 0x4e, 0x12, 0xe1, 0xd4, 0x7b, 0xc4, 0x45, 0xdd, 0xcb, 0x21, 0xea, 0x86, 0xbd, 0xc9, - 0x75, 0xb0, 0xe5, 0x34, 0x0d, 0x4e, 0xc4, 0xaf, 0xd4, 0x67, 0xef, 0x33, 0x8b, 0x47, 0x1d, 0xd9, 0x88, 0x92, 0x34, - 0x8e, 0x45, 0x0e, 0xdb, 0xfb, 0x42, 0xee, 0xff, 0xfd, 0x3e, 0x84, 0x93, 0x56, 0x41, 0x52, 0x7a, 0x02, 0x11, 0xe1, - 0xe8, 0xf0, 0x23, 0xc2, 0x13, 0xa9, 0x2a, 0x7c, 0x52, 0x9f, 0xb9, 0x31, 0xbb, 0x17, 0xe6, 0xa8, 0xde, 0x01, 0x0c, - 0x63, 0xbd, 0xb3, 0x08, 0x49, 0xb4, 0xd2, 0x8c, 0xb6, 0x1e, 0x10, 0x23, 0xde, 0x6f, 0x2c, 0x32, 0x18, 0x6b, 0x4b, - 0x22, 0x01, 0x7c, 0x45, 0x42, 0x86, 0xb6, 0x8d, 0xc0, 0x8c, 0xe1, 0xed, 0xac, 0xb8, 0x74, 0x1d, 0xb6, 0x39, 0x87, - 0x2f, 0x64, 0xa1, 0x59, 0x47, 0x94, 0x26, 0x08, 0xf9, 0x07, 0x9c, 0x2c, 0x14, 0x46, 0xf3, 0xea, 0x24, 0x9d, 0x24, - 0xd6, 0xf7, 0x5d, 0xa5, 0x82, 0xcd, 0xe6, 0x16, 0xf5, 0x65, 0x27, 0xc9, 0x2f, 0xc1, 0x49, 0xc7, 0x49, 0x16, 0x39, - 0x88, 0x5a, 0x54, 0xce, 0x6d, 0x12, 0x96, 0x76, 0x75, 0xaa, 0xed, 0x66, 0x53, 0x94, 0x75, 0xf5, 0x4a, 0x44, 0x8a, - 0xde, 0x47, 0x3d, 0x7a, 0x22, 0x21, 0x15, 0x5a, 0x95, 0xda, 0xe7, 0x11, 0xb8, 0x6d, 0x6a, 0xc5, 0xb6, 0x5c, 0xc2, - 0x12, 0x35, 0xfe, 0x13, 0xf4, 0x51, 0x2e, 0x1e, 0x64, 0x80, 0x46, 0xc7, 0x53, 0xf3, 0xd6, 0x23, 0xaf, 0x9c, 0xe4, - 0x97, 0x56, 0x9b, 0xf4, 0x0b, 0x20, 0x33, 0xda, 0x3f, 0x5a, 0x4a, 0x20, 0x33, 0x30, 0x93, 0x96, 0x86, 0x44, 0x8e, - 0x62, 0x96, 0xe6, 0x7f, 0xe0, 0x8a, 0xad, 0x10, 0x69, 0x58, 0xcd, 0x3d, 0xfe, 0x22, 0xf7, 0x6a, 0xb9, 0x96, 0x99, - 0xe6, 0x66, 0x89, 0x63, 0xc5, 0xe2, 0xa2, 0x5e, 0x57, 0x22, 0x0b, 0x84, 0x38, 0xc2, 0x34, 0xd6, 0x53, 0x6f, 0x94, - 0x56, 0x1f, 0x90, 0x50, 0xe6, 0x47, 0xec, 0xed, 0xd8, 0xeb, 0x41, 0x16, 0xe2, 0xd8, 0x72, 0xb0, 0xd9, 0x7a, 0x9f, - 0xca, 0x54, 0xc4, 0x17, 0x75, 0x71, 0xb1, 0xad, 0xc4, 0x45, 0x9d, 0x88, 0x8b, 0xef, 0x21, 0xe7, 0xf7, 0x17, 0x54, - 0xf4, 0xc5, 0x43, 0x5a, 0x27, 0xc5, 0xb6, 0xa6, 0x27, 0xaf, 0xb1, 0x8c, 0xef, 0x2f, 0x88, 0xab, 0xe6, 0x82, 0x46, - 0x32, 0x1e, 0x5d, 0x7c, 0xc8, 0x80, 0xe4, 0xf5, 0x22, 0x5d, 0xc3, 0xe0, 0x5d, 0x84, 0x79, 0x7c, 0x51, 0x8a, 0x15, - 0x58, 0x9c, 0xca, 0xce, 0xf7, 0x20, 0xc3, 0x3a, 0xfc, 0x43, 0x5c, 0x00, 0xb4, 0xeb, 0x45, 0x5a, 0x5f, 0xa4, 0xd5, - 0x45, 0x5e, 0xd4, 0x17, 0x4a, 0x0a, 0x87, 0x30, 0x7e, 0x78, 0x4f, 0x5f, 0xd9, 0xe5, 0x6d, 0x16, 0x77, 0x59, 0xe4, - 0x4f, 0xd1, 0xab, 0x88, 0x98, 0x34, 0x72, 0xe1, 0xb5, 0xfb, 0xdb, 0xe6, 0xfe, 0xe1, 0x75, 0x63, 0xf7, 0xb3, 0x3b, - 0x46, 0x74, 0x41, 0x3d, 0x5d, 0x49, 0x4a, 0x05, 0x05, 0x04, 0x4e, 0x34, 0x6b, 0x3c, 0xb8, 0xe3, 0x80, 0x57, 0x03, - 0x5b, 0xb2, 0x8d, 0xcf, 0x9f, 0xc7, 0x32, 0x4c, 0x7b, 0x1b, 0xe0, 0x5f, 0x65, 0x6f, 0xba, 0x09, 0x96, 0x78, 0xdf, - 0x42, 0xb6, 0xa1, 0x37, 0xaf, 0xf8, 0x0b, 0xaf, 0x52, 0x7f, 0xb3, 0x7f, 0x00, 0x10, 0x06, 0xc4, 0xac, 0xfa, 0x68, - 0xe2, 0xde, 0x5b, 0x59, 0xf6, 0x4e, 0x96, 0x7d, 0x0f, 0xfd, 0x9a, 0xc4, 0xa8, 0xb4, 0xb2, 0x94, 0x4e, 0x96, 0x12, - 0xb2, 0x80, 0x4f, 0x8c, 0xa6, 0x36, 0x02, 0x08, 0xdb, 0x51, 0x2a, 0x5f, 0x00, 0xc2, 0x49, 0x02, 0x12, 0x62, 0x09, - 0x17, 0xa3, 0x7b, 0x2b, 0x19, 0x30, 0x1c, 0x42, 0x30, 0x07, 0xed, 0xb0, 0x37, 0x74, 0x13, 0xf1, 0xd7, 0xeb, 0xa2, - 0x7c, 0x13, 0x93, 0x4f, 0xc1, 0xfe, 0xec, 0xe3, 0x12, 0x1e, 0x97, 0x67, 0x1f, 0x87, 0xe8, 0x91, 0x70, 0xf6, 0x31, - 0xf8, 0x1e, 0xc9, 0x79, 0xdd, 0xf5, 0x38, 0x41, 0x6e, 0x21, 0xdd, 0xdf, 0x8e, 0x49, 0x80, 0xe6, 0x35, 0x2c, 0x47, - 0x4d, 0xc5, 0x35, 0x33, 0x63, 0x3c, 0x6f, 0xf4, 0xfe, 0xd8, 0xf1, 0x96, 0x29, 0x14, 0xb3, 0x98, 0xd7, 0xf0, 0x7b, - 0x56, 0x05, 0xea, 0xae, 0xb7, 0x49, 0x6e, 0x99, 0xd5, 0x73, 0xb4, 0xfb, 0xbe, 0xaf, 0x13, 0x41, 0xed, 0xef, 0xb0, - 0xe7, 0x99, 0xf5, 0xae, 0x8a, 0x81, 0x4b, 0x95, 0xec, 0x90, 0xa9, 0x6a, 0x7a, 0xa0, 0x52, 0x1a, 0x3c, 0xbd, 0xb4, - 0x2e, 0x5f, 0x2a, 0x6d, 0xe4, 0x99, 0xe6, 0x37, 0x80, 0x17, 0x53, 0x97, 0xc5, 0xfe, 0xab, 0xfb, 0x0a, 0x6e, 0xe3, - 0xfd, 0xfe, 0x32, 0xf7, 0xcc, 0x4f, 0x5c, 0x00, 0xf6, 0xa6, 0x42, 0xeb, 0x04, 0x4a, 0x0d, 0xeb, 0xf0, 0x65, 0x22, - 0xa2, 0x3f, 0xda, 0xe5, 0x3a, 0x73, 0x1d, 0x30, 0xa2, 0x88, 0xdf, 0xc6, 0xa3, 0x3f, 0x40, 0x71, 0x6d, 0xec, 0x01, - 0x61, 0x1d, 0x12, 0xfa, 0x8c, 0x00, 0xa4, 0x1e, 0x73, 0x94, 0x80, 0x66, 0x45, 0x73, 0xc7, 0xc0, 0xc1, 0x2f, 0xaf, - 0x94, 0xfe, 0x61, 0x99, 0x7b, 0x64, 0x4e, 0x69, 0x9b, 0x69, 0xac, 0xd6, 0xe4, 0x02, 0xe1, 0x15, 0x95, 0xac, 0xc2, - 0x67, 0xf3, 0x46, 0xf4, 0xfb, 0xf2, 0x08, 0x4f, 0xab, 0x1f, 0x77, 0x18, 0xdf, 0x0a, 0x88, 0x46, 0x02, 0xa0, 0x9f, - 0x00, 0xe6, 0x45, 0x36, 0xb3, 0xfb, 0x38, 0xa0, 0x4a, 0x89, 0xa6, 0x71, 0x36, 0xcf, 0x6f, 0xe9, 0x4d, 0xd9, 0x41, - 0xe7, 0x4e, 0x15, 0xb8, 0xe0, 0xaa, 0x64, 0xbc, 0xb2, 0x9e, 0xc9, 0xe7, 0x37, 0x77, 0xdb, 0x34, 0x8b, 0xdf, 0x97, - 0xff, 0xc0, 0xb1, 0xd5, 0x75, 0x78, 0x64, 0xea, 0x74, 0xed, 0x3c, 0xd2, 0xda, 0x0b, 0x01, 0x11, 0xed, 0x1a, 0x6a, - 0xbd, 0xb0, 0xd0, 0x23, 0x3d, 0x11, 0xce, 0x49, 0xa2, 0xa6, 0x1d, 0x68, 0x69, 0x84, 0xbe, 0xbe, 0xca, 0x8b, 0x2e, - 0x06, 0x6b, 0x5f, 0x8e, 0x59, 0x0e, 0x5d, 0xaa, 0x1e, 0xab, 0x87, 0xc6, 0x66, 0x0e, 0x3d, 0x6b, 0x55, 0x9e, 0x79, - 0xf9, 0xf1, 0x88, 0xf8, 0x30, 0xfa, 0x4b, 0x7e, 0xbf, 0xff, 0x8a, 0xe6, 0x1f, 0x13, 0x6a, 0xfc, 0x6c, 0x33, 0x40, - 0xd7, 0xbe, 0x2b, 0x0f, 0x44, 0x3d, 0xd7, 0x2a, 0x41, 0x88, 0x37, 0x88, 0x89, 0x66, 0xc4, 0x1c, 0x9c, 0x76, 0xa8, - 0xf9, 0x27, 0xa9, 0x01, 0x21, 0x4a, 0xbc, 0x8e, 0x29, 0x0b, 0x72, 0xda, 0xc4, 0x91, 0x7e, 0x14, 0x4e, 0xe4, 0x47, - 0x51, 0x15, 0xd9, 0x3d, 0x5c, 0x30, 0x98, 0x7a, 0x4f, 0xfb, 0x25, 0xfa, 0x2d, 0xe1, 0xc8, 0x39, 0x5a, 0x15, 0x82, - 0xc8, 0x19, 0x61, 0xad, 0x21, 0x4c, 0x10, 0x1b, 0xc4, 0xcb, 0xbe, 0x4b, 0x32, 0x1c, 0x29, 0xb8, 0xac, 0x63, 0xc7, - 0x98, 0xab, 0xa3, 0xea, 0x35, 0x80, 0xf1, 0xaa, 0x10, 0x34, 0x1b, 0x45, 0x76, 0x09, 0x51, 0x45, 0x8e, 0x27, 0xa0, - 0x76, 0x50, 0x1a, 0x9b, 0xe9, 0xe5, 0x38, 0x80, 0x09, 0x8e, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x2b, 0xd5, - 0xcf, 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x9c, 0xe9, - 0x72, 0x60, 0xdc, 0xb7, 0x3c, 0xa7, 0x38, 0xc3, 0x8f, 0x5e, 0x3e, 0xab, 0xe7, 0xfe, 0x74, 0x4b, 0xed, 0xc7, 0xdc, - 0xa8, 0x87, 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, - 0xfc, 0x43, 0x99, 0xae, 0x53, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, - 0xa2, 0xac, 0xdf, 0x87, 0xdf, 0x37, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, - 0x93, 0x41, 0x0d, 0xda, 0xf0, 0x2d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, - 0xec, 0x4f, 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xeb, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xa7, 0x97, 0xfc, - 0x06, 0xbd, 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, - 0x8f, 0x51, 0xc9, 0x62, 0x4b, 0x8f, 0x95, 0xd3, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x0e, 0xc1, - 0x12, 0x18, 0x17, 0xb1, 0xe1, 0xdb, 0x41, 0xc5, 0xe2, 0xd9, 0x76, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1e, 0x0b, 0x09, - 0x36, 0x93, 0xcd, 0x36, 0x73, 0xb6, 0xf1, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, - 0x35, 0x58, 0xad, 0xa6, 0xec, 0x54, 0x53, 0xf6, 0x4e, 0x53, 0x4e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, - 0x88, 0x4d, 0xa2, 0x9b, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, - 0x50, 0x85, 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, - 0xbe, 0xa5, 0x8e, 0x07, 0x94, 0x6d, 0xfe, 0x26, 0xf6, 0x41, 0x88, 0xdc, 0x8d, 0x7b, 0xf5, 0x33, 0xe2, 0xbd, 0xfd, - 0x09, 0xc6, 0x4f, 0x76, 0xda, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8c, 0xca, 0x24, 0x41, 0x2d, 0x4b, 0xe2, - 0x6f, 0x79, 0x32, 0xa8, 0xd8, 0x12, 0x3c, 0x68, 0xe7, 0x2c, 0x03, 0xfc, 0x15, 0xab, 0x45, 0xbf, 0xd5, 0xde, 0x12, - 0xe4, 0xa7, 0xad, 0xdd, 0x28, 0x4c, 0x8c, 0x20, 0x51, 0xb7, 0x2b, 0x03, 0xf9, 0xe1, 0x03, 0x4e, 0xc7, 0x53, 0x4f, - 0x19, 0x73, 0x2b, 0xd3, 0xcb, 0x74, 0xae, 0xe4, 0x1b, 0xb9, 0x97, 0x3e, 0xf6, 0x12, 0xec, 0x1c, 0xf0, 0x06, 0xd2, - 0x06, 0xde, 0xc2, 0x76, 0xe1, 0xb5, 0x41, 0xc2, 0x8c, 0x00, 0x5b, 0x9c, 0x1e, 0x23, 0x25, 0x30, 0x84, 0xe3, 0x2c, - 0x05, 0x60, 0x1a, 0x7d, 0x99, 0xcd, 0xed, 0xcb, 0xac, 0xd6, 0x6c, 0xa9, 0x9c, 0xee, 0x9d, 0x5b, 0xb7, 0xf3, 0x89, - 0x04, 0x00, 0x93, 0x3a, 0x07, 0xe2, 0xcc, 0x04, 0xbb, 0x34, 0x89, 0x2c, 0x1f, 0xc3, 0x7c, 0x25, 0x5e, 0x97, 0xc5, - 0x5a, 0x75, 0x45, 0xdb, 0x67, 0xa6, 0x9a, 0x91, 0x4e, 0x42, 0x05, 0x14, 0x14, 0x72, 0xad, 0x4f, 0xdf, 0x85, 0xef, - 0x82, 0x42, 0x03, 0xb3, 0xe5, 0xb8, 0xa7, 0xc9, 0x1a, 0xa9, 0x37, 0xf2, 0x7e, 0x9f, 0x5c, 0x03, 0xa9, 0xce, 0x1c, - 0x5a, 0xf6, 0x04, 0x9d, 0x64, 0x4f, 0x6e, 0xca, 0x52, 0xa8, 0x03, 0xa9, 0x07, 0x0c, 0x21, 0xda, 0xa6, 0x8f, 0x3f, - 0x19, 0x12, 0x5d, 0x80, 0x2d, 0x44, 0x1b, 0xf8, 0xf1, 0x27, 0xd8, 0x67, 0x41, 0x78, 0x4c, 0xf3, 0xb7, 0x90, 0x74, - 0x6a, 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0x95, - 0x94, 0xea, 0x00, 0x6d, 0x4a, 0xb9, 0xab, 0x2b, 0x3f, 0x88, 0xb6, 0xe0, 0xc8, 0x22, 0xfe, 0x3e, 0x43, 0x44, 0x30, - 0x33, 0x88, 0xb0, 0x6b, 0xa1, 0xee, 0xf6, 0x9c, 0x5a, 0x16, 0xf5, 0xb6, 0xe7, 0x94, 0xba, 0x0d, 0xc3, 0x77, 0x13, - 0xcc, 0x14, 0x37, 0xfc, 0x8f, 0xcc, 0x0b, 0xf5, 0xc6, 0x63, 0x51, 0xa0, 0x7b, 0xfe, 0x61, 0xc9, 0xf3, 0xd9, 0x56, - 0x99, 0x30, 0x57, 0x7c, 0x39, 0x0b, 0x65, 0x57, 0x4b, 0xe3, 0xce, 0x67, 0x6f, 0xa9, 0xe6, 0x83, 0x7f, 0x3c, 0x26, - 0x10, 0x6f, 0x14, 0xdf, 0xac, 0x1a, 0xb9, 0x75, 0x4d, 0xb6, 0x37, 0x25, 0xa0, 0x7e, 0x5f, 0x6e, 0x70, 0xbf, 0xc5, - 0xfa, 0x77, 0x4f, 0x83, 0x8c, 0xd5, 0x0c, 0x57, 0x4c, 0xe1, 0x53, 0x00, 0x18, 0x1c, 0x4e, 0x05, 0x69, 0x81, 0xb7, - 0xbc, 0x1c, 0x5e, 0x4f, 0xb6, 0x64, 0xd2, 0xdd, 0xfa, 0xc8, 0x9d, 0x05, 0xaa, 0xde, 0x6f, 0x28, 0x4e, 0x1a, 0x24, - 0x1a, 0x7b, 0x0d, 0xbe, 0xc8, 0x32, 0xca, 0x45, 0x13, 0xf7, 0x31, 0xf9, 0x4a, 0x0f, 0x60, 0xa5, 0x42, 0x09, 0x10, - 0xfd, 0xc6, 0xb2, 0xd8, 0x88, 0xb6, 0xc5, 0x06, 0x96, 0x52, 0x3e, 0xd7, 0xab, 0xe9, 0xb3, 0x57, 0xa2, 0x79, 0x1f, - 0xcd, 0x38, 0xa5, 0xd1, 0x80, 0xe3, 0x34, 0x0a, 0x77, 0xef, 0xef, 0x45, 0xb9, 0xcc, 0xc0, 0x92, 0xad, 0xc2, 0x29, - 0xae, 0x1b, 0x75, 0x46, 0xbc, 0xc8, 0x63, 0x05, 0xd0, 0xf1, 0x98, 0x00, 0xa8, 0x2e, 0x08, 0xa8, 0x88, 0x96, 0xd2, - 0x5b, 0xa1, 0xc5, 0x42, 0xbd, 0xe1, 0x28, 0x85, 0x3f, 0xd2, 0x9f, 0x07, 0xd5, 0x14, 0x80, 0xd8, 0xf5, 0x71, 0xf4, - 0xba, 0x28, 0xe9, 0x53, 0xc5, 0xac, 0x92, 0x83, 0x09, 0xec, 0xea, 0x44, 0x86, 0x9a, 0x43, 0xde, 0xbc, 0x2b, 0x6f, - 0x6e, 0xf2, 0x36, 0xc6, 0x29, 0xf9, 0x91, 0x9b, 0x8e, 0x35, 0x62, 0xe0, 0x95, 0xa7, 0x75, 0x9a, 0x20, 0x4d, 0x2e, - 0x80, 0x61, 0x88, 0xef, 0x32, 0xef, 0x85, 0xe7, 0x48, 0x55, 0x90, 0xcc, 0xf6, 0x99, 0xa7, 0x2e, 0xa2, 0xfa, 0xca, - 0xa9, 0xa5, 0x33, 0xa7, 0x1f, 0x01, 0xbc, 0xc7, 0xd4, 0xa4, 0x21, 0x1f, 0xe1, 0xb6, 0x14, 0x5f, 0xef, 0xd4, 0x35, - 0x5e, 0x1a, 0x9d, 0xbb, 0x97, 0x2f, 0xdd, 0x69, 0xd0, 0x4f, 0x41, 0x50, 0xce, 0x17, 0xa5, 0x80, 0x3d, 0x65, 0x36, - 0xd7, 0xab, 0x55, 0x2b, 0xb4, 0x8e, 0xc7, 0xb1, 0x76, 0x14, 0xd2, 0xea, 0x2c, 0x60, 0xab, 0x91, 0x4e, 0x09, 0x10, - 0x82, 0xe3, 0x34, 0xec, 0x0c, 0xe3, 0x2e, 0x9d, 0x46, 0x64, 0xbd, 0x52, 0x92, 0x2e, 0xcc, 0x20, 0xf9, 0x27, 0x79, - 0x3d, 0x03, 0x5a, 0x02, 0x38, 0x14, 0xb1, 0x84, 0x87, 0x93, 0xe4, 0x06, 0xa0, 0xd3, 0xe1, 0xa0, 0xd2, 0xd0, 0x9c, - 0xf9, 0x2c, 0x99, 0x4f, 0x62, 0xa9, 0xaa, 0x3c, 0x1e, 0x3d, 0xe5, 0x66, 0xd0, 0xef, 0x67, 0xd3, 0x52, 0xb9, 0x00, - 0x04, 0xb1, 0x2e, 0x0c, 0x10, 0x8f, 0xb4, 0xf0, 0x64, 0xd1, 0xa7, 0x24, 0x7e, 0x39, 0x4b, 0xe6, 0x26, 0x1b, 0xde, - 0x81, 0x11, 0x6c, 0xc6, 0x75, 0x49, 0x99, 0xf6, 0xa8, 0xfc, 0x9e, 0xd1, 0x53, 0xdb, 0xd7, 0x5a, 0x6d, 0x11, 0xeb, - 0x3a, 0xb8, 0x2a, 0x51, 0x4f, 0xf1, 0x41, 0x49, 0x82, 0xf7, 0x2b, 0xe7, 0x66, 0xa4, 0x7c, 0x2d, 0x2a, 0x3f, 0x68, - 0x67, 0x6a, 0xe5, 0xc0, 0x11, 0xa8, 0xb0, 0x8a, 0x4a, 0x5e, 0xef, 0x3a, 0x04, 0x4f, 0xee, 0x4a, 0x05, 0xca, 0xc1, - 0xcf, 0x41, 0x8c, 0xae, 0x6f, 0x3a, 0x6b, 0xa8, 0x99, 0x46, 0x95, 0x47, 0xd0, 0xb9, 0x03, 0x78, 0x52, 0xf0, 0x52, - 0xab, 0x1f, 0x8f, 0x47, 0xcf, 0xfc, 0xe0, 0x2f, 0x33, 0x7d, 0x0b, 0x31, 0x51, 0x4e, 0x35, 0x42, 0xe2, 0x4a, 0x49, - 0x22, 0x3e, 0x5d, 0xb4, 0xac, 0x18, 0x95, 0xe1, 0x03, 0xb0, 0x00, 0x51, 0xf9, 0xea, 0x54, 0xe5, 0xc5, 0x48, 0xdb, - 0x12, 0x78, 0x4d, 0xfe, 0x21, 0x72, 0xcd, 0x5b, 0x5f, 0x77, 0x95, 0xa1, 0x6f, 0x65, 0x05, 0x3a, 0x82, 0xad, 0x2c, - 0x25, 0x07, 0x7c, 0x52, 0xdf, 0x55, 0x5b, 0x9f, 0x53, 0xb6, 0x11, 0x6e, 0xf2, 0xeb, 0xd8, 0xc1, 0x91, 0xf2, 0x1b, - 0xbc, 0x14, 0xc0, 0x5e, 0x03, 0xf6, 0xe6, 0x8a, 0x15, 0xcd, 0xa3, 0x43, 0xda, 0x16, 0x68, 0x64, 0xe6, 0x76, 0xae, - 0xee, 0xdb, 0xf2, 0x28, 0x8d, 0x21, 0x32, 0xed, 0x91, 0xe9, 0x60, 0x33, 0xca, 0x7f, 0x4b, 0xf9, 0xad, 0xc2, 0x31, - 0xf0, 0xed, 0xdc, 0x3b, 0x80, 0xaa, 0xa7, 0x0d, 0x32, 0xd6, 0x0c, 0x43, 0x2b, 0xbb, 0x5c, 0x0a, 0x2d, 0x41, 0x4b, - 0xdd, 0x04, 0xc1, 0xf9, 0x11, 0x51, 0x8e, 0x00, 0x74, 0x91, 0x02, 0x26, 0xf8, 0x39, 0x6d, 0x77, 0xbf, 0xbf, 0x49, - 0x3d, 0x72, 0xef, 0x0a, 0x95, 0xcd, 0xf2, 0x4d, 0x8e, 0x30, 0xf6, 0x13, 0x8d, 0x19, 0x74, 0x72, 0x45, 0x4e, 0x78, - 0xd6, 0xea, 0xb0, 0xae, 0x9b, 0x32, 0x28, 0x8b, 0x63, 0x9e, 0x4f, 0x67, 0xbf, 0x3f, 0x39, 0xd4, 0x0d, 0xb2, 0x90, - 0xff, 0xce, 0x7a, 0x48, 0x06, 0xdd, 0x83, 0x50, 0x88, 0xde, 0x3c, 0x98, 0xe1, 0x7f, 0x6c, 0xcb, 0xb3, 0x6f, 0xb8, - 0x51, 0x27, 0x80, 0x39, 0xe2, 0x7a, 0xe9, 0x29, 0xda, 0x7a, 0xb8, 0x05, 0xb2, 0x0d, 0x5e, 0xde, 0xda, 0x6b, 0xa0, - 0xa2, 0x38, 0xfe, 0x15, 0xcf, 0xd4, 0xca, 0x06, 0x3f, 0x3d, 0x65, 0x3b, 0xf0, 0xf0, 0x22, 0x04, 0x14, 0xc3, 0xb2, - 0xf1, 0x2b, 0xcb, 0x71, 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, - 0x93, 0x7b, 0x2b, 0x72, 0xca, 0x5c, 0xe9, 0x61, 0x74, 0x5d, 0x92, 0xbe, 0x49, 0x3e, 0xb6, 0x86, 0xed, 0x77, 0xed, - 0x7e, 0x33, 0x44, 0x10, 0x42, 0x39, 0x7e, 0xce, 0xe8, 0x84, 0xc6, 0x87, 0x35, 0xd7, 0x3b, 0xbd, 0x7e, 0xef, 0x12, - 0x2f, 0xd8, 0x1a, 0x0d, 0xf0, 0x74, 0xe8, 0x62, 0x9e, 0xa8, 0xa1, 0xd3, 0x75, 0xed, 0x1c, 0x3c, 0x30, 0xc8, 0xf2, - 0xe4, 0x1b, 0x86, 0x25, 0xf6, 0x27, 0x11, 0x4f, 0xda, 0xaa, 0x8d, 0xed, 0x89, 0x6a, 0xa3, 0x66, 0xe0, 0x07, 0xaf, - 0xa0, 0xc0, 0xe8, 0x82, 0xb4, 0x06, 0xe3, 0x70, 0x04, 0x20, 0x2b, 0xc6, 0xf1, 0xc8, 0x60, 0x02, 0x43, 0xba, 0xa1, - 0x28, 0x00, 0x0f, 0x8f, 0xd3, 0x41, 0xc8, 0x00, 0xd2, 0x05, 0x0f, 0x0d, 0xdb, 0x24, 0xa4, 0xfc, 0x3c, 0x2f, 0x6b, - 0x35, 0x84, 0xbe, 0xb3, 0x50, 0x1d, 0xfb, 0x91, 0xf6, 0x8a, 0x75, 0xad, 0x4a, 0x27, 0xb6, 0x3a, 0x40, 0xdf, 0x90, - 0x81, 0x6f, 0x1d, 0x5b, 0x00, 0x44, 0x4b, 0xfc, 0x96, 0x7a, 0xb5, 0x2f, 0x63, 0x56, 0xa8, 0xd7, 0x17, 0xa6, 0x5d, - 0xaf, 0xa4, 0x45, 0x01, 0x15, 0xb7, 0xad, 0xda, 0x9e, 0xc8, 0xf9, 0x8f, 0xef, 0x3a, 0xda, 0xf1, 0xd9, 0xa9, 0xb1, - 0x25, 0x94, 0xb9, 0xc5, 0x13, 0x59, 0x1d, 0x6d, 0xa9, 0x4e, 0xf5, 0x01, 0x97, 0x9a, 0x54, 0x67, 0xda, 0xa7, 0xc9, - 0x12, 0xa0, 0xdc, 0x42, 0x24, 0x8d, 0xc3, 0xc1, 0xf9, 0x64, 0x50, 0x30, 0xb7, 0x48, 0x40, 0x02, 0xdb, 0xda, 0xda, - 0x45, 0x73, 0xfd, 0xfa, 0x2d, 0xf5, 0xf2, 0x36, 0x55, 0x3d, 0x78, 0xe3, 0x05, 0xce, 0xde, 0x69, 0x2d, 0x20, 0x80, - 0xc2, 0xd6, 0xb2, 0x1c, 0x9c, 0xbb, 0x5d, 0xd5, 0x52, 0x51, 0x46, 0xfd, 0xfe, 0xe5, 0x6f, 0x29, 0x2a, 0x62, 0xcf, - 0x15, 0xa7, 0xac, 0xdf, 0x6e, 0x99, 0x8b, 0xca, 0x92, 0x37, 0xa8, 0xa2, 0xb5, 0x3a, 0x6a, 0x72, 0xd7, 0xcd, 0x55, - 0x4b, 0x26, 0x88, 0xd1, 0x7d, 0xbe, 0xd6, 0x95, 0x53, 0xef, 0x83, 0x8a, 0x23, 0x06, 0x82, 0x9b, 0xee, 0xf1, 0xc1, - 0x41, 0x68, 0x54, 0x94, 0x0b, 0x6e, 0x94, 0x56, 0x95, 0x94, 0x42, 0xde, 0xaa, 0x68, 0xc5, 0xf4, 0x11, 0x00, 0x11, - 0x60, 0x95, 0xa8, 0xff, 0xcd, 0x97, 0xc6, 0x78, 0xf0, 0xc0, 0xd7, 0xe4, 0x3a, 0xb6, 0xde, 0x3f, 0xaf, 0x91, 0x56, - 0x1b, 0xc7, 0xa4, 0x56, 0xbd, 0x6c, 0x15, 0x2f, 0xbb, 0xd7, 0xa9, 0x18, 0x3c, 0xff, 0x9f, 0xfb, 0x00, 0x35, 0xa2, - 0xa5, 0x0c, 0x6e, 0x5d, 0x0d, 0xd0, 0xf8, 0x70, 0x2a, 0x7c, 0xe3, 0x87, 0x8c, 0xf3, 0xc1, 0x0c, 0x1d, 0xd5, 0xe6, - 0xe0, 0x80, 0xe0, 0xa8, 0xee, 0xd1, 0x98, 0x30, 0x0b, 0xe7, 0x1e, 0x04, 0xaa, 0x4f, 0xdc, 0x67, 0x5c, 0x7b, 0x41, - 0x9b, 0xc0, 0x27, 0xeb, 0xba, 0xa6, 0x08, 0x70, 0x11, 0x1b, 0x13, 0x31, 0xc4, 0x65, 0x93, 0x48, 0x7d, 0x33, 0x06, - 0x05, 0x40, 0xf1, 0x3c, 0x27, 0xb9, 0x74, 0x91, 0xe6, 0x95, 0x28, 0x6b, 0xdd, 0x8c, 0x9c, 0x15, 0xc3, 0x9c, 0xd5, - 0x7e, 0x50, 0xdc, 0xe4, 0x66, 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x7c, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, - 0xd2, 0xbb, 0x1c, 0xb7, 0xce, 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, - 0x3f, 0xe3, 0xcf, 0x09, 0x4c, 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x9c, 0x97, 0x93, - 0x70, 0x38, 0xf4, 0x41, 0x1f, 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, - 0x10, 0xd1, 0x42, 0x43, 0x1f, 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, - 0xda, 0xd0, 0x22, 0xc5, 0x45, 0xa3, 0xcc, 0x66, 0x95, 0xec, 0x84, 0xad, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, - 0x54, 0xad, 0xa7, 0x7a, 0x3d, 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa2, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, - 0xa3, 0x6a, 0x93, 0xa5, 0x11, 0x55, 0x6e, 0x52, 0xb9, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0xcd, 0xb5, 0xb3, 0x35, 0x38, - 0x71, 0xe4, 0xb9, 0xe4, 0x96, 0xef, 0xce, 0x2b, 0xba, 0x3b, 0xd5, 0xbe, 0x05, 0xb8, 0x37, 0xc3, 0x86, 0xcc, 0x79, - 0x8d, 0x9d, 0x06, 0x61, 0x12, 0xf8, 0x11, 0xfb, 0x98, 0x21, 0x1b, 0x0c, 0xe8, 0x28, 0xa4, 0x26, 0xc0, 0x32, 0x47, - 0x02, 0x26, 0x7f, 0x3d, 0xf7, 0x9b, 0x45, 0x91, 0xc3, 0x62, 0xfc, 0xb0, 0xc5, 0x48, 0x63, 0xb5, 0x06, 0xc3, 0x72, - 0x85, 0xc8, 0x9f, 0xda, 0x33, 0xd4, 0x54, 0xc7, 0x9b, 0xf5, 0x5a, 0xf3, 0xab, 0xa7, 0x4f, 0x75, 0x7d, 0xfe, 0xdb, - 0xf7, 0x97, 0x61, 0xcd, 0xec, 0x0f, 0x41, 0x28, 0xed, 0xc1, 0x2d, 0xce, 0x1d, 0x89, 0xde, 0xa9, 0xd2, 0xcc, 0x2e, - 0xed, 0x9a, 0x5d, 0x9b, 0xd2, 0x6e, 0xc9, 0xf5, 0xea, 0x2b, 0xe5, 0x8d, 0x9d, 0x57, 0x4c, 0xf7, 0x1f, 0x84, 0xde, - 0x51, 0xce, 0xd5, 0x04, 0x22, 0x9a, 0xb4, 0x23, 0x71, 0xbb, 0x57, 0x86, 0xcf, 0x26, 0x55, 0xbb, 0x84, 0x93, 0xae, - 0x61, 0x95, 0xf9, 0xf6, 0x3f, 0xf2, 0xaa, 0xb3, 0xc2, 0xed, 0x97, 0xc6, 0xac, 0xfd, 0x29, 0x88, 0xab, 0xfa, 0xc3, - 0x7b, 0x52, 0x33, 0x25, 0xff, 0x57, 0x3d, 0x06, 0xae, 0x7e, 0x32, 0xed, 0xe4, 0x9e, 0x42, 0xd8, 0x60, 0xf6, 0xf3, - 0xd3, 0x87, 0x16, 0xac, 0xaa, 0x0b, 0x14, 0xc9, 0x01, 0x74, 0xee, 0x9a, 0x11, 0xde, 0xef, 0x18, 0xe7, 0xfe, 0xcd, - 0x0f, 0x6a, 0x72, 0x84, 0x88, 0x76, 0x11, 0x0e, 0x00, 0xe2, 0x4e, 0x53, 0x59, 0x87, 0x1a, 0xa0, 0x0f, 0x08, 0xac, - 0x43, 0xdf, 0x66, 0x00, 0x07, 0x7d, 0xb4, 0x79, 0x16, 0x81, 0xbc, 0xee, 0xdd, 0xb3, 0xb7, 0x6c, 0xef, 0xf3, 0xe7, - 0xeb, 0xd4, 0xbb, 0x47, 0x87, 0xe0, 0xcb, 0xb1, 0x3f, 0xbd, 0x0e, 0x0c, 0x2e, 0x34, 0x7b, 0xfb, 0x54, 0xb0, 0x3d, - 0xdb, 0x3f, 0x45, 0xa4, 0xa2, 0xee, 0xfc, 0xc3, 0x6b, 0x13, 0x3d, 0xef, 0xbc, 0xb0, 0xe2, 0x4b, 0x00, 0x0f, 0x64, - 0x31, 0xa0, 0xf8, 0x2c, 0xbd, 0x7f, 0xb2, 0x04, 0xd4, 0xe4, 0x77, 0x7c, 0xe3, 0xbd, 0xa3, 0xd4, 0x05, 0xfc, 0x39, - 0xa0, 0xf4, 0x49, 0xc5, 0xbd, 0xd5, 0xf0, 0xce, 0xbf, 0x7a, 0x06, 0xce, 0x13, 0xeb, 0xe1, 0x02, 0xfe, 0x2a, 0xf8, - 0xd0, 0x5b, 0x0d, 0x30, 0xb1, 0xe4, 0x43, 0x6f, 0x3d, 0x80, 0x54, 0x85, 0x0b, 0x89, 0xb1, 0x0f, 0xbf, 0x06, 0x15, - 0xc3, 0x3f, 0x7e, 0xd3, 0x18, 0xac, 0xbf, 0x06, 0x85, 0x46, 0x63, 0x2d, 0x55, 0xc8, 0x52, 0x2c, 0x2e, 0x04, 0xd8, - 0x84, 0xe3, 0x6e, 0x5f, 0xac, 0x6a, 0xbb, 0x11, 0xf4, 0xe7, 0x23, 0xbe, 0x47, 0x63, 0x75, 0x55, 0xce, 0x45, 0xf9, - 0x11, 0xe9, 0x53, 0x1d, 0x1f, 0xa3, 0x62, 0x5b, 0x77, 0xa7, 0x53, 0xad, 0x3a, 0xd2, 0x7e, 0x53, 0xae, 0xc1, 0x8e, - 0xd7, 0xc9, 0x89, 0xa5, 0xf0, 0xa2, 0xc3, 0xce, 0x4b, 0xa7, 0x44, 0x87, 0x61, 0xbc, 0xdb, 0xaa, 0x67, 0x0c, 0xe5, - 0x95, 0xc1, 0x98, 0x2e, 0x78, 0xc4, 0x9f, 0x0f, 0x2a, 0x19, 0x1a, 0xf3, 0x01, 0xd9, 0x30, 0x94, 0x0f, 0x2d, 0x32, - 0x24, 0x44, 0xbc, 0x87, 0x4a, 0xc0, 0xb6, 0x05, 0x65, 0x52, 0xc0, 0x59, 0x34, 0xf8, 0xad, 0xf6, 0x2a, 0xe0, 0x3d, - 0x88, 0xfc, 0x46, 0xba, 0x94, 0x4b, 0x6c, 0x74, 0xe2, 0x58, 0x16, 0xda, 0x79, 0x5c, 0x7f, 0x1d, 0x83, 0xfa, 0xbd, - 0xd2, 0x6f, 0x50, 0xce, 0xfe, 0x28, 0x59, 0xa7, 0x8d, 0x27, 0xc6, 0xdf, 0x5d, 0xe5, 0x9f, 0xa2, 0xa5, 0x1e, 0xfe, - 0x3f, 0x63, 0x0a, 0xa5, 0x7f, 0x99, 0x96, 0xd1, 0x76, 0xbd, 0x14, 0xa5, 0xc8, 0x23, 0x71, 0xf6, 0xb5, 0xc8, 0xce, - 0xe5, 0x3b, 0x9f, 0x42, 0xbf, 0x00, 0xb4, 0xec, 0x13, 0x64, 0xf4, 0x0f, 0x4c, 0xf0, 0xe1, 0x0f, 0xda, 0xb9, 0xb6, - 0xe2, 0xe3, 0x49, 0x75, 0x63, 0xed, 0xdd, 0x8e, 0x17, 0x89, 0x51, 0x8c, 0x55, 0xbe, 0xea, 0x66, 0xe5, 0x44, 0x25, - 0x07, 0x46, 0xba, 0x26, 0x7b, 0x95, 0x92, 0x75, 0x3b, 0xdd, 0x4a, 0x20, 0xa2, 0x0a, 0xbc, 0xc7, 0xb8, 0x8a, 0x7d, - 0x04, 0xd3, 0x75, 0xc7, 0x65, 0xb4, 0xe3, 0x3d, 0xe3, 0xd5, 0x89, 0xb2, 0x82, 0xdb, 0x8d, 0x68, 0x4f, 0xe8, 0xe8, - 0xa7, 0x49, 0x6d, 0x59, 0x38, 0x00, 0xb9, 0x4b, 0x18, 0xcb, 0x86, 0x60, 0xc5, 0xa0, 0xf4, 0xf5, 0x9a, 0x92, 0x65, - 0x01, 0x16, 0x9d, 0x5d, 0x46, 0x20, 0x86, 0x75, 0xd3, 0x9c, 0xd1, 0xf1, 0xd2, 0xc5, 0xf9, 0xa0, 0x55, 0xa4, 0xe0, - 0x19, 0x2d, 0x3a, 0xe6, 0xa6, 0x23, 0xdd, 0x18, 0xed, 0xed, 0x0f, 0x06, 0x21, 0xc5, 0xf3, 0x07, 0xb6, 0x5a, 0x17, - 0x17, 0x89, 0x57, 0xc8, 0x44, 0x0b, 0x62, 0x29, 0x02, 0x33, 0x5e, 0x68, 0x1a, 0x61, 0x82, 0x32, 0x25, 0x58, 0xb4, - 0x46, 0x87, 0xf6, 0x87, 0x25, 0xec, 0x1e, 0x63, 0x04, 0x08, 0x54, 0x99, 0x3e, 0x87, 0xad, 0x09, 0xb3, 0xad, 0x8b, - 0x2d, 0xd0, 0x56, 0x31, 0x34, 0x08, 0x6b, 0x43, 0xcc, 0xc7, 0x34, 0x5f, 0xfd, 0x13, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, - 0xc1, 0xed, 0x9a, 0x84, 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xaa, 0x1d, 0x6b, - 0xa9, 0x77, 0xac, 0x8d, 0xde, 0xb1, 0x56, 0x0d, 0xff, 0x90, 0x79, 0x31, 0x4b, 0x40, 0xbf, 0xbb, 0xe6, 0xaa, 0x41, - 0xd0, 0x8c, 0x2d, 0xbb, 0x83, 0xdf, 0x12, 0x6b, 0xb7, 0xf4, 0xaf, 0x96, 0x6c, 0x61, 0xfa, 0x40, 0xb7, 0x0e, 0xb0, - 0x8c, 0xa8, 0xc9, 0xf7, 0xc8, 0xbb, 0xe9, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xc2, 0x67, 0x6f, 0xcd, 0x9b, 0xf7, 0x4f, - 0x23, 0xc8, 0xbd, 0xe7, 0xde, 0xfd, 0xf0, 0xad, 0x7f, 0xa5, 0x5b, 0x20, 0x27, 0xb3, 0x9c, 0x81, 0xd4, 0x11, 0x9f, - 0x20, 0x5a, 0xd9, 0x53, 0xbe, 0x13, 0x72, 0x67, 0xdb, 0x3c, 0xbd, 0x77, 0xb7, 0xb5, 0xd5, 0xd3, 0x7b, 0x96, 0x8f, - 0x28, 0x56, 0x9c, 0xa6, 0x48, 0x98, 0x45, 0x5b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xfd, 0xd3, 0x8e, - 0x8e, 0x97, 0x73, 0xc0, 0xee, 0xfe, 0x93, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0xf7, 0x4f, 0x33, 0x8d, 0xe7, - 0x70, 0x22, 0x9f, 0x8e, 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, - 0xd6, 0x35, 0x6f, 0xaf, 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, - 0x70, 0xba, 0xe4, 0xb1, 0xef, 0xd3, 0x2c, 0xad, 0xf7, 0xa8, 0xb5, 0xc8, 0x2d, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, - 0x61, 0xa9, 0xe9, 0x9f, 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2d, 0xae, 0x7e, 0x38, 0x2f, 0x94, - 0x6b, 0x37, 0x6f, 0xe3, 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x4e, 0x94, - 0x5d, 0x2c, 0xe1, 0x1e, 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf5, 0x8c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, - 0x62, 0x5b, 0xb8, 0x7a, 0xc6, 0xb6, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0xad, 0x6a, 0x8e, - 0x35, 0xd4, 0x6c, 0x63, 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0x56, 0x6d, 0xc5, 0xc7, 0xda, 0x5a, 0x97, 0xee, 0xf5, - 0x1e, 0xd5, 0x05, 0xb0, 0xf5, 0xdf, 0x9d, 0xae, 0x5c, 0xcf, 0x67, 0x04, 0xf0, 0xb5, 0xe0, 0xe3, 0xc9, 0x02, 0xbd, - 0x4a, 0x16, 0xfe, 0xdd, 0x40, 0x8d, 0xbf, 0xd3, 0xb9, 0x0b, 0x80, 0xae, 0xa4, 0xbc, 0x02, 0xf2, 0x0e, 0x2a, 0xcc, - 0x2d, 0xbb, 0xf2, 0xfe, 0xec, 0x3b, 0xec, 0x2d, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x83, 0x53, 0x41, 0x32, 0xb0, 0x97, - 0x15, 0xdb, 0x07, 0xb1, 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x80, 0x20, 0xae, 0xe0, 0x0e, 0xe2, 0xf0, 0xe4, 0x9f, - 0x83, 0xfb, 0xd6, 0x66, 0x7d, 0xcf, 0xac, 0xce, 0x09, 0x36, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0xd6, 0xfd, 0xbe, - 0xb7, 0xd7, 0x8e, 0x4f, 0x2b, 0xa9, 0x13, 0x3b, 0xaf, 0xd5, 0x5a, 0xb0, 0xb7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x80, - 0x5f, 0x70, 0x37, 0xe0, 0xf7, 0x1d, 0x6b, 0xcb, 0x7b, 0xcb, 0x16, 0x6c, 0x0f, 0x97, 0xa0, 0xa6, 0xbd, 0xec, 0xcf, - 0x2a, 0x17, 0xb4, 0x63, 0x97, 0xc4, 0xc3, 0x19, 0xb3, 0x5c, 0x99, 0x59, 0x27, 0xf9, 0x8d, 0xe8, 0x8c, 0xe9, 0xac, - 0xf5, 0x7c, 0xce, 0xe7, 0x93, 0x42, 0x83, 0xfa, 0x5d, 0x12, 0x1f, 0x51, 0xd1, 0x79, 0x02, 0x5b, 0xcb, 0x0a, 0xc8, - 0xbd, 0x2e, 0xc1, 0x5a, 0xab, 0x5d, 0xfa, 0xbd, 0x6a, 0xc0, 0x6d, 0xca, 0x61, 0x4d, 0x40, 0xd0, 0x9c, 0x59, 0x51, - 0x8f, 0xd9, 0x8e, 0x71, 0xf3, 0xd3, 0xcb, 0x1f, 0x9c, 0xb0, 0x64, 0xc5, 0x6a, 0x7f, 0xfa, 0xc3, 0x53, 0x4f, 0x7f, - 0xa7, 0xf6, 0xaf, 0x84, 0x1f, 0x8c, 0xff, 0x5d, 0xbb, 0xaf, 0xb5, 0x18, 0x95, 0xad, 0x72, 0x84, 0xc6, 0xdd, 0x4a, - 0x9a, 0x2c, 0x3f, 0x09, 0x4f, 0x58, 0x0b, 0x9e, 0x99, 0x33, 0x20, 0x2b, 0x60, 0x85, 0xb5, 0x4c, 0xc2, 0x39, 0xc6, - 0x6a, 0x69, 0xab, 0x6f, 0xd1, 0x34, 0xa7, 0x87, 0x73, 0x6d, 0x50, 0xa6, 0x9c, 0x9d, 0x11, 0xab, 0xe1, 0x32, 0x2c, - 0x4d, 0x28, 0x42, 0xf6, 0x60, 0x07, 0x37, 0x76, 0xca, 0x52, 0xca, 0x70, 0x8e, 0xc1, 0x84, 0x27, 0x62, 0x54, 0xee, - 0xfb, 0x87, 0x92, 0x57, 0x6d, 0x39, 0x28, 0x47, 0xd8, 0x47, 0x12, 0x25, 0x70, 0x2b, 0xd2, 0x42, 0x91, 0xb2, 0xf8, - 0xdb, 0x01, 0xba, 0xc0, 0x0b, 0xa8, 0xab, 0x51, 0xb7, 0x3f, 0x1c, 0xf1, 0xf0, 0x91, 0xa9, 0x0f, 0x8c, 0x58, 0x12, - 0xa8, 0xed, 0x45, 0x96, 0xae, 0x40, 0x85, 0xdf, 0xc3, 0xd5, 0x44, 0xec, 0xe7, 0x96, 0x14, 0x15, 0xd9, 0x48, 0x6f, - 0x68, 0x0d, 0x1e, 0xa1, 0x35, 0xe5, 0x07, 0x27, 0xd5, 0x26, 0x9d, 0x77, 0x84, 0x1c, 0xab, 0x6f, 0x2d, 0x61, 0xb4, - 0x2b, 0x7a, 0xf1, 0xe0, 0xe8, 0x3d, 0xcf, 0x57, 0xbd, 0xf2, 0x27, 0xae, 0x98, 0x27, 0xb7, 0x11, 0xa8, 0x5b, 0x41, - 0x75, 0x7b, 0xaf, 0x12, 0x2c, 0x58, 0xd2, 0xee, 0xe3, 0xb7, 0xb3, 0x76, 0x20, 0x2a, 0x63, 0x95, 0xbe, 0x26, 0x09, - 0x7b, 0x62, 0xd0, 0x29, 0x54, 0x55, 0x76, 0x77, 0xb4, 0x05, 0xae, 0x53, 0x96, 0xa2, 0x17, 0xb6, 0xc8, 0xdd, 0xf2, - 0xef, 0x9e, 0x2b, 0x72, 0xf6, 0x6b, 0x40, 0x70, 0x6a, 0xbe, 0x22, 0xbe, 0x9c, 0xe0, 0x51, 0x75, 0x0b, 0x1c, 0xe7, - 0xef, 0x00, 0xfe, 0xf1, 0x78, 0x0d, 0x9a, 0x80, 0x58, 0xb0, 0x5e, 0x1a, 0xf7, 0x58, 0x2f, 0x2e, 0xb6, 0xab, 0x24, - 0xdf, 0x82, 0x33, 0x03, 0xa5, 0x5a, 0xfa, 0x81, 0x53, 0xb5, 0x80, 0x0a, 0x07, 0xb3, 0x93, 0x7a, 0x61, 0x19, 0xf5, - 0x98, 0x3e, 0x3f, 0x83, 0x83, 0x23, 0x24, 0x00, 0xee, 0x97, 0x7d, 0x40, 0x02, 0x1e, 0x3a, 0xb3, 0x03, 0xc2, 0x09, - 0xb3, 0xa8, 0x0a, 0x24, 0x92, 0x23, 0xfd, 0xec, 0x31, 0x13, 0xc9, 0x1f, 0xcc, 0x7a, 0xce, 0x29, 0xd1, 0x63, 0x3d, - 0x75, 0x84, 0xf4, 0x58, 0xcf, 0x3a, 0x22, 0x7a, 0xac, 0x67, 0x1d, 0x1f, 0x3d, 0xd6, 0x33, 0xc7, 0x4e, 0x0f, 0x02, - 0x13, 0x20, 0xf2, 0x80, 0xf5, 0x68, 0x32, 0xf5, 0x14, 0xf7, 0x00, 0xd1, 0x20, 0xb0, 0x9e, 0x14, 0xce, 0x7b, 0x80, - 0x3c, 0x46, 0x62, 0x75, 0xd0, 0xfb, 0x8f, 0xf1, 0x77, 0x3d, 0x23, 0x23, 0x8f, 0x5b, 0x87, 0xd5, 0xff, 0xfa, 0x4f, - 0x08, 0x80, 0xc3, 0xb3, 0xa9, 0x77, 0x3d, 0x86, 0xac, 0xb2, 0x8c, 0x40, 0xf2, 0x13, 0x83, 0x2f, 0x5f, 0x00, 0x54, - 0x7d, 0xa6, 0x6b, 0x35, 0x39, 0x6a, 0x8f, 0x39, 0x74, 0xc5, 0x00, 0xb0, 0x0d, 0x4b, 0x54, 0xd5, 0xc2, 0x26, 0x2c, - 0x6e, 0x3f, 0xc3, 0x68, 0x2e, 0x9b, 0x5e, 0xd0, 0x40, 0x3d, 0x42, 0xf0, 0x4b, 0xeb, 0xa1, 0xb5, 0x96, 0x29, 0x87, - 0xae, 0x8d, 0xa2, 0xca, 0x86, 0xba, 0x84, 0xd5, 0x46, 0x44, 0x35, 0x51, 0xa4, 0x5c, 0x33, 0x8a, 0x62, 0xa9, 0x82, - 0x43, 0x26, 0x56, 0x10, 0x35, 0x4f, 0x5b, 0x6d, 0x15, 0x1c, 0x56, 0x80, 0xb0, 0x16, 0xd6, 0x42, 0x3a, 0x83, 0xda, - 0x3b, 0xfd, 0x48, 0xf9, 0xcb, 0x0b, 0xb9, 0x9d, 0x5b, 0x28, 0xc2, 0xed, 0x39, 0x28, 0x6f, 0xea, 0xaa, 0x54, 0x44, - 0xa3, 0x25, 0x50, 0xca, 0x8a, 0x20, 0xb2, 0x00, 0x01, 0x1c, 0x37, 0x10, 0xf8, 0xbc, 0xc6, 0x27, 0xd0, 0x28, 0x04, - 0xf2, 0x03, 0xeb, 0x70, 0xe3, 0x21, 0x2d, 0xb5, 0x46, 0x44, 0x89, 0xf8, 0xc9, 0xd5, 0x73, 0x6c, 0x5f, 0x3d, 0x8d, - 0xb5, 0xa5, 0x34, 0x41, 0xfc, 0xc4, 0x62, 0x0b, 0x31, 0x41, 0x54, 0x87, 0xe8, 0x04, 0x96, 0x13, 0x42, 0x14, 0xfe, - 0x10, 0xfa, 0xa9, 0x81, 0xbf, 0x64, 0xcb, 0x22, 0xaf, 0x09, 0x16, 0x33, 0x67, 0x80, 0x56, 0x45, 0xe0, 0x99, 0xce, - 0x96, 0xca, 0x9c, 0xe6, 0xd1, 0x91, 0x1d, 0x5c, 0x76, 0x1d, 0xec, 0xa5, 0x2f, 0x63, 0x27, 0xcb, 0xa6, 0x51, 0x1b, - 0x1b, 0x22, 0xe1, 0x15, 0xf9, 0xcb, 0x2c, 0x35, 0xce, 0x91, 0x6a, 0x7d, 0xd7, 0xc5, 0x6a, 0x45, 0xdb, 0x84, 0x55, - 0x88, 0x50, 0xb7, 0x0d, 0x95, 0x4b, 0x61, 0x36, 0x36, 0x4d, 0x03, 0x7c, 0xa1, 0xa8, 0x54, 0xca, 0x53, 0x5b, 0xa9, - 0xe4, 0x84, 0x77, 0x7d, 0x55, 0x8b, 0xd4, 0x15, 0xc1, 0x36, 0x66, 0xa8, 0x87, 0x72, 0xa3, 0xc6, 0xbe, 0xee, 0x58, - 0xa5, 0x77, 0x98, 0xa0, 0x62, 0xe4, 0x45, 0x0e, 0x2e, 0x4a, 0x0a, 0x32, 0x57, 0x43, 0x98, 0x3f, 0x6a, 0xf8, 0xb4, - 0xb0, 0xdc, 0x43, 0x09, 0x98, 0x1d, 0x35, 0xbc, 0x8c, 0x10, 0x88, 0xb8, 0x54, 0xf6, 0x15, 0x13, 0xbf, 0xa7, 0x60, - 0x96, 0x4c, 0xe8, 0x5e, 0xc4, 0xc2, 0x08, 0x6d, 0x7c, 0x92, 0x24, 0x53, 0xb9, 0x3e, 0x41, 0x17, 0x2a, 0x5c, 0x20, - 0x23, 0xb4, 0x48, 0xf3, 0x4f, 0x87, 0x53, 0x09, 0x3e, 0xa2, 0x4e, 0x01, 0xc7, 0xf3, 0xcb, 0xc2, 0xfa, 0xc9, 0x2a, - 0x89, 0xb9, 0xac, 0xcd, 0x7f, 0xd9, 0xc9, 0x31, 0xd8, 0xe5, 0x69, 0xe2, 0xb8, 0xfa, 0x8f, 0xaa, 0xa4, 0x78, 0xf8, - 0x39, 0xcd, 0x01, 0x45, 0x30, 0xb3, 0xa7, 0x18, 0x1f, 0xfb, 0x2c, 0x53, 0xc0, 0xdf, 0xae, 0xb7, 0x96, 0x4c, 0xec, - 0x92, 0x76, 0x2b, 0x65, 0xfc, 0x52, 0x1b, 0x76, 0x1c, 0x5c, 0x1a, 0x80, 0xe2, 0xac, 0xd1, 0x61, 0x79, 0xad, 0xdb, - 0x56, 0x8e, 0x0a, 0xd4, 0xfa, 0xdf, 0xbb, 0x85, 0x29, 0x6f, 0xf3, 0x52, 0x79, 0x9b, 0x87, 0x26, 0x40, 0x20, 0x32, - 0x43, 0x9e, 0x35, 0x1d, 0x93, 0xc4, 0xbd, 0x23, 0x25, 0xed, 0x3b, 0x52, 0xfc, 0xe8, 0x1d, 0x09, 0xf9, 0x96, 0xd0, - 0x91, 0x7d, 0xc9, 0xc9, 0x09, 0x94, 0x19, 0xec, 0xe5, 0x0d, 0x93, 0xfd, 0x03, 0xda, 0x0b, 0xe7, 0xb2, 0xbc, 0xe6, - 0x6f, 0x85, 0xb7, 0xf1, 0xa7, 0x9b, 0xf3, 0xae, 0xaa, 0x77, 0x5f, 0x99, 0x99, 0xc7, 0x63, 0x71, 0x3c, 0xe6, 0x26, - 0x68, 0x77, 0xc1, 0xc5, 0xa0, 0x62, 0xf7, 0x6e, 0x7c, 0xfc, 0x5b, 0x8e, 0x22, 0xb6, 0x52, 0x1e, 0x49, 0x17, 0x2a, - 0x31, 0xbc, 0x36, 0xf0, 0x30, 0x7b, 0x3e, 0x9e, 0xec, 0x6f, 0xee, 0x27, 0x83, 0xc1, 0x5e, 0xf5, 0xed, 0x8e, 0xd7, - 0xb3, 0xfd, 0x9c, 0x3d, 0xf0, 0xbb, 0xe9, 0x2e, 0x38, 0x34, 0xb0, 0xed, 0xee, 0x6f, 0xc4, 0xf1, 0xb8, 0x7f, 0xce, - 0x17, 0xfe, 0xe1, 0x01, 0x01, 0x9d, 0xf9, 0xe5, 0xb8, 0x8d, 0xf1, 0x73, 0xdb, 0x76, 0xd5, 0xda, 0x03, 0x3c, 0xfd, - 0x8f, 0xde, 0xed, 0x6c, 0x39, 0xf7, 0xd9, 0x13, 0xfe, 0x00, 0xfe, 0xf9, 0xb8, 0x49, 0x22, 0xf5, 0x89, 0x76, 0x99, - 0xbc, 0x05, 0x07, 0xf2, 0xbd, 0xcf, 0xde, 0xf0, 0x87, 0xd9, 0x72, 0xce, 0x8b, 0xe3, 0xf1, 0xfd, 0x34, 0x44, 0xb2, - 0xa6, 0xb0, 0x22, 0x96, 0x14, 0xcf, 0x0f, 0xc2, 0xd3, 0xf7, 0x22, 0x32, 0x44, 0x5a, 0xee, 0xdd, 0x21, 0xbb, 0x65, - 0x91, 0x1f, 0xc0, 0x07, 0xd9, 0xde, 0x9f, 0xc8, 0x9a, 0xd2, 0xfd, 0xe2, 0x89, 0x7f, 0x3c, 0xd2, 0x5f, 0x6f, 0xfc, - 0xe3, 0xf1, 0x3d, 0x7b, 0x40, 0x70, 0x74, 0xbe, 0x87, 0xfe, 0xd1, 0xb7, 0x0e, 0xa8, 0xca, 0xf0, 0xed, 0x6c, 0x3b, - 0xf7, 0x9f, 0xaf, 0xd9, 0x0a, 0xb8, 0x50, 0x94, 0x17, 0xda, 0x2d, 0x7b, 0x40, 0xaf, 0x33, 0x72, 0x22, 0x9a, 0xed, - 0xe7, 0x3e, 0x8b, 0xf1, 0xb9, 0xba, 0x2f, 0x26, 0x5f, 0xbd, 0x2f, 0xee, 0xd9, 0xae, 0xfb, 0xbe, 0x28, 0xdf, 0x74, - 0xd7, 0xcf, 0x8e, 0xed, 0xd9, 0x03, 0xcc, 0xb0, 0xb7, 0xfc, 0xb6, 0x39, 0x75, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, - 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0xb9, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x97, 0xde, - 0xa2, 0xd4, 0x45, 0x4f, 0xfb, 0x14, 0xe4, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x7c, - 0xa6, 0x1d, 0x3d, 0xaf, 0xbf, 0xed, 0x3d, 0x93, 0xdf, 0xc8, 0xc0, 0x16, 0x22, 0x29, 0x1c, 0xc7, 0x57, 0xcf, 0xce, - 0xf8, 0xaf, 0x5a, 0x1e, 0xb5, 0xda, 0x2f, 0x94, 0xfa, 0xf4, 0x25, 0x1d, 0xd1, 0xc4, 0xbd, 0x68, 0xcb, 0xb0, 0x46, - 0x59, 0x53, 0x4b, 0x87, 0x61, 0x5c, 0xc3, 0xbe, 0x3c, 0x70, 0xe8, 0x3b, 0x20, 0xd0, 0xe6, 0xa9, 0x14, 0x68, 0xe1, - 0x18, 0x46, 0x61, 0x16, 0x52, 0x1e, 0x17, 0x66, 0x29, 0xef, 0xa9, 0x40, 0x8b, 0x5b, 0x75, 0x8f, 0xa9, 0xed, 0x16, - 0x44, 0x58, 0xbd, 0x65, 0x5c, 0x5e, 0x37, 0xaa, 0x70, 0x5b, 0x80, 0xa2, 0x08, 0xca, 0xe0, 0x40, 0x72, 0xdb, 0x42, - 0x49, 0xb3, 0x51, 0x58, 0x8b, 0x55, 0x51, 0xee, 0x7b, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, - 0x75, 0x28, 0x17, 0xe9, 0xbf, 0x65, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xfb, 0x97, - 0xf4, 0xb3, 0xc1, 0x32, 0x72, 0x4a, 0xfd, 0x10, 0x8d, 0xee, 0xd2, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, - 0x0a, 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, - 0x26, 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, - 0x90, 0xdc, 0xa9, 0x73, 0x7f, 0x54, 0x4e, 0xfe, 0x1d, 0x0d, 0x91, 0x57, 0xdc, 0x20, 0x56, 0x16, 0x5c, 0x62, 0x31, - 0x54, 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xc7, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, - 0x13, 0x3e, 0x6e, 0xad, 0x45, 0x88, 0x3a, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, - 0x14, 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xc8, 0x49, 0xcf, 0x5f, 0x9a, 0x14, 0x65, - 0xcc, 0xf8, 0x20, 0xca, 0x48, 0xe4, 0x75, 0xb8, 0x12, 0xd3, 0x02, 0xf9, 0x46, 0x4f, 0x1f, 0x04, 0xd7, 0xf0, 0x6e, - 0xc8, 0xbd, 0x02, 0x6c, 0x09, 0xd8, 0x01, 0xee, 0x95, 0x19, 0xe5, 0x3a, 0xad, 0xeb, 0xb7, 0xd6, 0x43, 0x31, 0x0c, - 0x9f, 0x5a, 0x02, 0xdb, 0xc9, 0x3a, 0x3a, 0xd1, 0xc3, 0x87, 0xff, 0x75, 0x55, 0x73, 0xd4, 0xa9, 0x5c, 0xce, 0x4e, - 0x27, 0x2c, 0x45, 0xcc, 0xa0, 0xfb, 0xeb, 0xee, 0xa5, 0x00, 0xba, 0x5d, 0x16, 0xf3, 0x6c, 0xb4, 0x97, 0x7f, 0x4b, - 0x37, 0x56, 0x94, 0x36, 0xf1, 0x2e, 0xeb, 0x8d, 0xfd, 0xe1, 0xe8, 0x3f, 0x9e, 0xbe, 0x9b, 0x10, 0xaa, 0xce, 0x96, - 0x6d, 0x74, 0x9c, 0xcb, 0xff, 0xfa, 0xcf, 0x31, 0x59, 0x41, 0x50, 0x10, 0x96, 0x9d, 0x62, 0xa2, 0x82, 0x51, 0xa4, - 0xd8, 0xf0, 0xf1, 0x64, 0x83, 0x3a, 0xe1, 0x8d, 0xbf, 0xd4, 0x3a, 0x61, 0x62, 0x64, 0xa5, 0xf2, 0x37, 0x2c, 0x67, - 0x2b, 0x95, 0x59, 0x40, 0xe6, 0x41, 0x35, 0xd9, 0x18, 0x0d, 0xe6, 0x9a, 0xd7, 0xb3, 0xcd, 0x5c, 0x2a, 0x9f, 0xc1, - 0x94, 0xb3, 0x1c, 0x9c, 0x2d, 0x85, 0xdd, 0x93, 0x40, 0xd1, 0x9a, 0xa1, 0x1b, 0x7f, 0x8a, 0xad, 0x7a, 0x95, 0x56, - 0x35, 0xc0, 0x03, 0x42, 0x0c, 0x0c, 0xb5, 0x57, 0x0b, 0x0f, 0xad, 0x05, 0xb0, 0xf1, 0x47, 0xa5, 0x1f, 0x8c, 0x27, - 0x4b, 0xbe, 0x40, 0xfe, 0xe5, 0xc8, 0x51, 0xbb, 0xf7, 0xfb, 0xde, 0x3d, 0x48, 0xc1, 0x91, 0x6b, 0xa1, 0x40, 0x22, - 0xa0, 0x05, 0xdf, 0xfa, 0xca, 0x07, 0xe3, 0x2d, 0x6a, 0xab, 0x41, 0x41, 0xed, 0xe8, 0x96, 0xc7, 0x8e, 0xde, 0xf9, - 0xfe, 0x8c, 0xbe, 0x7a, 0xa1, 0x85, 0xe3, 0xaf, 0x9c, 0x91, 0x1b, 0xb6, 0xee, 0x90, 0x23, 0x9a, 0x49, 0x87, 0x10, - 0xb1, 0x66, 0x1b, 0xf6, 0x96, 0x54, 0xce, 0x9d, 0x43, 0x76, 0xfe, 0x08, 0x55, 0x7a, 0xad, 0xc7, 0xb7, 0x13, 0xa5, - 0xbb, 0x3d, 0xdd, 0x4d, 0xbe, 0x65, 0x13, 0x11, 0x83, 0x01, 0x6d, 0x10, 0xce, 0xc8, 0x3a, 0x44, 0x2a, 0x1d, 0x20, - 0x04, 0x8e, 0x09, 0x68, 0xfa, 0xf7, 0xaf, 0x49, 0x14, 0x70, 0xa4, 0x8d, 0x90, 0xb5, 0xec, 0x78, 0xac, 0x40, 0xa3, - 0xdc, 0xfc, 0xe1, 0x15, 0xea, 0x34, 0x07, 0xe6, 0xe9, 0x12, 0xf6, 0x1c, 0x3c, 0xd2, 0x8b, 0xd3, 0x23, 0xfd, 0xbf, - 0xa3, 0x89, 0x1a, 0xff, 0xfb, 0x9a, 0x28, 0xa5, 0x45, 0x72, 0x54, 0x4b, 0xdf, 0xa4, 0x8e, 0x82, 0x8b, 0xbc, 0xa3, - 0x16, 0xb2, 0x67, 0xd9, 0xb8, 0x51, 0xcd, 0xfb, 0xff, 0xb5, 0x32, 0xff, 0x5f, 0xd3, 0xca, 0x30, 0x25, 0x3b, 0x96, - 0x6a, 0xe6, 0x81, 0x56, 0x31, 0xcc, 0x7e, 0x26, 0x09, 0x91, 0xe1, 0xd2, 0x80, 0x1f, 0x55, 0x70, 0x88, 0xd3, 0x6a, - 0x93, 0x85, 0x7b, 0x54, 0xa2, 0xde, 0x89, 0x55, 0x9a, 0xbf, 0xa8, 0xff, 0x25, 0xca, 0x02, 0xa6, 0xf6, 0xaa, 0x4c, - 0xe3, 0x80, 0x2c, 0xfc, 0x59, 0x58, 0xe2, 0xe4, 0xc6, 0x36, 0xfe, 0x2c, 0xc7, 0xd3, 0x7e, 0xd5, 0x99, 0x79, 0x20, - 0x81, 0x1a, 0x88, 0x3f, 0x72, 0x2e, 0x2b, 0x8b, 0x07, 0x84, 0x6e, 0xfe, 0xb1, 0x2c, 0x8b, 0xd2, 0xeb, 0x7d, 0x4a, - 0xd2, 0xea, 0x62, 0x2d, 0xea, 0xa4, 0x88, 0x15, 0x94, 0x4d, 0x0a, 0x30, 0xfa, 0xb0, 0xf2, 0x44, 0x1c, 0x5c, 0x20, - 0x50, 0xc3, 0x45, 0x9d, 0x84, 0x00, 0x34, 0xac, 0x10, 0xf6, 0x2f, 0xa0, 0x85, 0x17, 0x61, 0x1c, 0x6e, 0x00, 0x26, - 0x27, 0xad, 0x2e, 0x36, 0x65, 0x71, 0x9f, 0xc6, 0x22, 0x1e, 0xf5, 0x14, 0x25, 0xcb, 0xc7, 0xca, 0x95, 0x73, 0xfd, - 0xc3, 0x1f, 0x14, 0xc0, 0x6e, 0xc0, 0x6c, 0x5b, 0x60, 0x07, 0x00, 0x09, 0x0a, 0x64, 0x0b, 0x75, 0x1a, 0x5d, 0xa8, - 0xa5, 0x02, 0xef, 0xb9, 0x1e, 0xe0, 0x1f, 0x2b, 0xc0, 0x32, 0xae, 0x0b, 0x19, 0x30, 0x82, 0x00, 0x46, 0xe0, 0xa0, - 0x04, 0x0c, 0x9d, 0x61, 0x6d, 0xf1, 0xb8, 0x43, 0x73, 0xa5, 0xdb, 0x92, 0x9b, 0x46, 0x39, 0x5b, 0x89, 0x00, 0xfa, - 0xea, 0xa6, 0xc4, 0xe9, 0x72, 0xd9, 0x4a, 0xc2, 0xbe, 0x7d, 0xdf, 0x4e, 0x15, 0x79, 0x7c, 0x92, 0x86, 0xbc, 0x02, - 0x4f, 0x32, 0x8e, 0x24, 0x51, 0x22, 0xf8, 0x58, 0x35, 0x66, 0x1c, 0x5e, 0xb4, 0x29, 0xa7, 0x0e, 0x66, 0xbd, 0x00, - 0x9c, 0x27, 0x68, 0xcb, 0x00, 0x63, 0x01, 0x83, 0x73, 0x21, 0x96, 0x3c, 0x45, 0xf0, 0x4b, 0x27, 0x52, 0x18, 0x77, - 0x39, 0x0c, 0xf3, 0xa0, 0xe8, 0x5d, 0x52, 0x7f, 0xf4, 0xfb, 0xa8, 0x4d, 0x06, 0x43, 0x50, 0x09, 0xa0, 0xb2, 0x6e, - 0x90, 0x18, 0x58, 0x95, 0x16, 0x12, 0x97, 0x10, 0x2f, 0xf3, 0xd5, 0xb4, 0x8e, 0x82, 0xf7, 0xf5, 0x84, 0x10, 0x4e, - 0x30, 0x3e, 0xc4, 0x0d, 0x10, 0x30, 0x58, 0xc5, 0x05, 0x06, 0xc9, 0x73, 0x89, 0xee, 0x8f, 0xe7, 0x3b, 0x06, 0xb8, - 0x72, 0xde, 0x53, 0xed, 0xea, 0x81, 0xbd, 0x5c, 0xa5, 0x4b, 0x46, 0x08, 0x2b, 0xfe, 0x2f, 0x22, 0xef, 0xdb, 0x61, - 0x02, 0x6a, 0x1b, 0xf9, 0x63, 0x90, 0x98, 0xcb, 0x44, 0x11, 0xc4, 0xa3, 0xac, 0x60, 0x49, 0x1a, 0x6c, 0x47, 0x49, - 0x0a, 0x1a, 0x4d, 0x8c, 0x21, 0x53, 0xa1, 0x1d, 0x92, 0x46, 0xb3, 0x31, 0xd9, 0xc7, 0x90, 0xd7, 0x70, 0xb1, 0x58, - 0xe0, 0x7d, 0x3f, 0x0b, 0xd5, 0xc1, 0xb6, 0x34, 0x87, 0x80, 0x93, 0x04, 0x7b, 0xea, 0x8a, 0x94, 0x84, 0xd9, 0xe8, - 0x53, 0xc8, 0xb9, 0x01, 0x1d, 0x27, 0x8d, 0xa1, 0xfa, 0xc0, 0x24, 0xbc, 0x89, 0xd0, 0x49, 0x59, 0x21, 0x2c, 0xe0, - 0xbe, 0x91, 0xd1, 0x68, 0x25, 0x0d, 0x02, 0x6f, 0x33, 0x6c, 0x05, 0x36, 0xa1, 0xe1, 0x2f, 0x32, 0x0f, 0xd3, 0x6a, - 0x56, 0x82, 0x39, 0xdf, 0x40, 0x25, 0xc6, 0x93, 0xe5, 0x0d, 0xdf, 0xba, 0x58, 0x89, 0xc9, 0x6c, 0x39, 0x9f, 0x6c, - 0x24, 0xd5, 0x1c, 0x08, 0x19, 0x19, 0x5b, 0xc2, 0xfe, 0x61, 0x60, 0x28, 0x1d, 0xd8, 0xd1, 0x54, 0xd3, 0x26, 0x01, - 0x26, 0xd3, 0x25, 0xe7, 0xc3, 0x6b, 0x44, 0x93, 0xd5, 0xa9, 0x7b, 0x99, 0xaa, 0x76, 0x70, 0x4d, 0xce, 0xe4, 0xf4, - 0x48, 0x3d, 0xd5, 0xba, 0x97, 0x6a, 0xb4, 0x1b, 0xe6, 0xa3, 0x9d, 0x1f, 0x80, 0x5b, 0xa7, 0xb0, 0xd3, 0xf7, 0xc3, - 0x7c, 0xb4, 0xf7, 0x35, 0xec, 0x2e, 0x29, 0x04, 0xaa, 0x3f, 0xcb, 0x9a, 0xcc, 0xc5, 0x9b, 0xe2, 0xc1, 0x2b, 0xd8, - 0x33, 0x7f, 0xa0, 0x7f, 0x95, 0xec, 0x99, 0x6f, 0x33, 0xb9, 0xfe, 0x99, 0x76, 0x8d, 0xc6, 0x4c, 0xc7, 0x6b, 0xe7, - 0x60, 0x85, 0x06, 0xc8, 0x2f, 0xd8, 0xd1, 0xde, 0xe4, 0x20, 0x10, 0xa0, 0x7b, 0x09, 0x8e, 0xa2, 0x80, 0xa8, 0x69, - 0x55, 0x79, 0x74, 0xba, 0xf7, 0x0f, 0xf8, 0x46, 0x09, 0xd8, 0xe4, 0xa9, 0x75, 0x6f, 0x19, 0xfb, 0xc7, 0x23, 0x84, - 0xd0, 0xcb, 0xe9, 0x37, 0xda, 0xb1, 0x7a, 0xb4, 0x67, 0x12, 0xfc, 0x1c, 0x31, 0xe9, 0x15, 0x8c, 0x61, 0xe8, 0xc2, - 0x2a, 0x46, 0xf2, 0x0c, 0xc8, 0x1a, 0xbf, 0x41, 0x74, 0x01, 0x8b, 0x5e, 0xef, 0xd5, 0x09, 0x0d, 0x22, 0xa0, 0xd2, - 0x6b, 0xfe, 0x52, 0xe4, 0x73, 0x55, 0x88, 0xde, 0x07, 0x6b, 0xe7, 0xcd, 0x8c, 0x64, 0x99, 0x34, 0x52, 0xed, 0x56, - 0x16, 0x9b, 0xca, 0x9b, 0x9d, 0x91, 0x2e, 0xe6, 0x18, 0x2a, 0x83, 0xc7, 0x01, 0x28, 0x3d, 0xff, 0x12, 0x7a, 0x25, - 0x43, 0xa6, 0x59, 0xa2, 0x99, 0xdd, 0x37, 0xfe, 0x64, 0x9d, 0x7a, 0x31, 0x22, 0x66, 0x03, 0x5b, 0x88, 0xdb, 0xa2, - 0xd2, 0x6d, 0x51, 0x28, 0x5b, 0x14, 0xe9, 0x43, 0xed, 0x42, 0x77, 0x66, 0xe1, 0xb3, 0xdc, 0xb4, 0xef, 0x4d, 0x66, - 0xc6, 0x06, 0x68, 0xbb, 0x08, 0xdf, 0x40, 0x07, 0x2a, 0x84, 0xfc, 0x47, 0x44, 0x44, 0x22, 0x60, 0x97, 0x73, 0x77, - 0x62, 0xd3, 0x21, 0x99, 0x87, 0x98, 0x15, 0x6a, 0x94, 0x97, 0x3c, 0x39, 0x19, 0x90, 0x9c, 0x50, 0xb7, 0xfb, 0xfd, - 0xcb, 0xa5, 0x0b, 0x6a, 0xbf, 0xa1, 0xd8, 0x31, 0xba, 0x29, 0xe0, 0x5c, 0xf0, 0x28, 0xef, 0xa5, 0x77, 0x09, 0x68, - 0x8e, 0xed, 0x29, 0xb2, 0x01, 0x9c, 0xde, 0x76, 0x21, 0xc0, 0xf6, 0x59, 0xb3, 0x8d, 0x3f, 0x59, 0xdf, 0x44, 0x53, - 0xaf, 0xe4, 0x33, 0xdd, 0x45, 0x89, 0xdb, 0x45, 0xb1, 0xec, 0xa2, 0x6d, 0x03, 0xc1, 0x8e, 0x6b, 0x3f, 0x00, 0xde, - 0xd0, 0xa8, 0xdf, 0x2f, 0x5b, 0x3d, 0x7b, 0xf6, 0xb5, 0xd3, 0x9e, 0xcd, 0x7c, 0x56, 0x9a, 0x9e, 0xfd, 0x35, 0x75, - 0x7b, 0x56, 0x4e, 0xf6, 0xa2, 0x73, 0xb2, 0x4f, 0x67, 0xf3, 0x40, 0x70, 0xb9, 0x73, 0x5f, 0x56, 0x53, 0x3d, 0xed, - 0x72, 0x3f, 0x68, 0x0d, 0x91, 0xf9, 0xc2, 0xa7, 0xbc, 0x7b, 0x5d, 0xc1, 0x02, 0x96, 0xe0, 0x6e, 0xbd, 0x34, 0xff, - 0x15, 0xbb, 0xbf, 0x17, 0xf4, 0xd2, 0xfc, 0x37, 0xfa, 0x93, 0x02, 0x38, 0x00, 0x8d, 0xa9, 0xdd, 0x02, 0x0f, 0x31, - 0x54, 0x50, 0xb8, 0x9b, 0x95, 0x73, 0xaf, 0x06, 0x38, 0x4c, 0xd2, 0x37, 0xb4, 0x7a, 0xa5, 0xc5, 0xae, 0x97, 0xc9, - 0x5e, 0x01, 0x1e, 0xaa, 0x90, 0x87, 0xc7, 0x63, 0xd4, 0x31, 0xec, 0xa0, 0x8e, 0x80, 0x61, 0x0f, 0xa1, 0xb1, 0x05, - 0x9e, 0x8f, 0x9f, 0x32, 0x7e, 0x10, 0xa0, 0x36, 0x42, 0x78, 0xbc, 0x5a, 0x94, 0x21, 0xb6, 0xec, 0x0d, 0x52, 0x49, - 0xfd, 0x2c, 0x10, 0x65, 0xb4, 0x0a, 0x68, 0xab, 0x3d, 0x65, 0x69, 0xbc, 0x85, 0x50, 0xb1, 0xd4, 0xc7, 0x10, 0x1a, - 0x38, 0xfc, 0x8e, 0x47, 0x90, 0xe0, 0x4b, 0xae, 0xc9, 0xe6, 0xde, 0xe4, 0xf7, 0xb4, 0xcf, 0x1f, 0x8f, 0x97, 0xd7, - 0x08, 0x4a, 0x97, 0xc2, 0x47, 0x2a, 0x11, 0xd5, 0x53, 0xdc, 0x94, 0x90, 0xcd, 0x92, 0x95, 0x7e, 0xf0, 0xab, 0xfa, - 0x05, 0x00, 0xb2, 0x10, 0x68, 0x13, 0x99, 0xfd, 0xe9, 0x42, 0x45, 0x17, 0x00, 0x87, 0xf8, 0xe3, 0x27, 0x88, 0xbe, - 0xa1, 0x65, 0x5a, 0x3e, 0x4e, 0x78, 0x08, 0x5a, 0x5b, 0xd2, 0x49, 0xc4, 0x4a, 0x81, 0x0d, 0x91, 0xf0, 0xfd, 0xfe, - 0x65, 0x2c, 0xe9, 0x40, 0xa3, 0x56, 0xf7, 0xc6, 0xad, 0xee, 0x95, 0xaf, 0xeb, 0x4e, 0x6e, 0x7c, 0x50, 0xb4, 0xcf, - 0xe6, 0x8d, 0xca, 0xf7, 0x6d, 0x9d, 0xb3, 0x3f, 0xdf, 0x3b, 0x72, 0x4e, 0x7c, 0x7b, 0x0f, 0xa1, 0xe8, 0xa1, 0x29, - 0xb2, 0x2c, 0x09, 0x03, 0x5a, 0x6b, 0xd7, 0x9e, 0x65, 0x74, 0xf0, 0xda, 0x37, 0x84, 0x88, 0x3c, 0xc5, 0x27, 0x21, - 0xb7, 0x38, 0x3e, 0x28, 0xd0, 0x3f, 0x33, 0xfe, 0xcc, 0x89, 0x1f, 0xb6, 0xfa, 0x05, 0x70, 0x6e, 0xba, 0xf7, 0xee, - 0xc4, 0xac, 0xc7, 0x50, 0xca, 0xc6, 0xff, 0xfd, 0x3e, 0x91, 0x05, 0x3a, 0x1d, 0xd1, 0x30, 0x10, 0xdc, 0x45, 0xf5, - 0x7f, 0xaf, 0x78, 0xdd, 0xb3, 0x56, 0xe7, 0xcb, 0x4f, 0x9d, 0x9f, 0xf4, 0xea, 0x65, 0xdc, 0x03, 0x72, 0x74, 0x80, - 0x70, 0x5e, 0xf7, 0x1b, 0xb6, 0xff, 0xe6, 0x97, 0xf7, 0x27, 0x2f, 0x03, 0x9b, 0x14, 0x89, 0x6d, 0x25, 0x9f, 0xf5, - 0x40, 0xe1, 0xd7, 0x63, 0xbd, 0xba, 0xd8, 0xf4, 0x58, 0x0f, 0xb5, 0x80, 0xe8, 0x61, 0x01, 0xea, 0xbf, 0x9e, 0x7d, - 0x1a, 0x0a, 0x07, 0xd9, 0x38, 0x55, 0xa0, 0xc8, 0x82, 0x3f, 0x17, 0xa3, 0x4d, 0x41, 0x80, 0xc8, 0x96, 0x90, 0x96, - 0x9f, 0xcd, 0x1e, 0x97, 0x5a, 0x92, 0xc1, 0x37, 0x01, 0x99, 0x1d, 0x58, 0x39, 0x41, 0xe9, 0xb8, 0x33, 0xe0, 0xca, - 0x16, 0x8f, 0x76, 0xfb, 0xd3, 0x20, 0x3b, 0x6b, 0x4e, 0x1a, 0xed, 0xc3, 0x3e, 0x05, 0x4e, 0x1a, 0x10, 0x7b, 0x44, - 0xa0, 0xef, 0xb6, 0xb9, 0xf4, 0xd1, 0xe1, 0x9c, 0x17, 0xf2, 0xcf, 0xa9, 0xc4, 0xe0, 0x1e, 0x4a, 0xac, 0x81, 0x40, - 0xe5, 0x19, 0xaa, 0x1c, 0x36, 0xc8, 0xf1, 0xcf, 0x8e, 0x64, 0x26, 0x31, 0x59, 0xe4, 0x6e, 0xcd, 0x54, 0xf8, 0x81, - 0x00, 0xfe, 0x73, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x01, 0x7f, 0x4c, 0xe1, 0xe7, 0x3c, 0x85, - 0x9d, 0xf6, 0xb0, 0x29, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, 0x3f, - 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x75, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x05, 0x39, - 0xdb, 0x14, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xf2, 0x51, 0x5a, 0xfd, 0x55, 0xff, - 0x04, 0xe6, 0x6d, 0x2a, 0x46, 0xb5, 0x8a, 0xc9, 0x6f, 0xf4, 0xfb, 0xc5, 0xa0, 0xf5, 0x21, 0x83, 0x8f, 0x5e, 0x9b, - 0x06, 0x7f, 0x74, 0x1a, 0xec, 0x30, 0xd1, 0x08, 0x80, 0x64, 0x4e, 0x2d, 0x79, 0x28, 0xfa, 0x23, 0xa8, 0xb0, 0x46, - 0xb9, 0x53, 0x30, 0x58, 0xff, 0xf1, 0x68, 0x07, 0xa6, 0x5e, 0x1c, 0x6d, 0xc9, 0x0e, 0x9a, 0xfb, 0x06, 0xb8, 0x5f, - 0x23, 0x5b, 0xcc, 0x2a, 0x80, 0x66, 0xaf, 0x11, 0x19, 0x9f, 0xbc, 0x00, 0xc6, 0x6c, 0x93, 0x85, 0x91, 0x88, 0x83, - 0xb1, 0x6a, 0xcc, 0x98, 0x81, 0x81, 0x0b, 0x74, 0x2d, 0x93, 0x92, 0x34, 0xa4, 0x83, 0x01, 0x2b, 0x65, 0x0b, 0x07, - 0xbc, 0x68, 0x4e, 0xdb, 0xf1, 0xba, 0x45, 0xe3, 0x81, 0xed, 0x62, 0x87, 0xfb, 0x1f, 0x8a, 0xdd, 0xdb, 0x70, 0x47, - 0x7a, 0x85, 0x8a, 0x25, 0xf4, 0xf3, 0xaf, 0xb2, 0xcf, 0x1a, 0x4e, 0x4e, 0x85, 0x66, 0x68, 0x29, 0x12, 0x4a, 0xf1, - 0x4e, 0x4f, 0x0a, 0x8c, 0x65, 0x2c, 0xfc, 0x03, 0x70, 0x4e, 0x17, 0x8a, 0xc8, 0x1d, 0x38, 0x8e, 0x6f, 0xa1, 0x82, - 0x51, 0xc3, 0xc1, 0xcb, 0x18, 0xb6, 0x45, 0x31, 0x0b, 0x09, 0xa7, 0x10, 0x2e, 0x56, 0x59, 0xbf, 0x2f, 0x7f, 0x51, - 0x17, 0x5d, 0x65, 0xb2, 0xee, 0x93, 0x70, 0x64, 0xc6, 0x72, 0xea, 0x85, 0xe4, 0x79, 0xcf, 0x93, 0x69, 0xf2, 0xb4, - 0x0a, 0x22, 0x80, 0x7c, 0x0e, 0xef, 0xc3, 0x34, 0x03, 0xab, 0x34, 0x29, 0x3f, 0x42, 0xe9, 0x8b, 0xcf, 0x73, 0x3f, - 0xd0, 0xd9, 0x2b, 0x93, 0x0c, 0x6f, 0xe6, 0xad, 0x37, 0xa9, 0x75, 0x5d, 0x3c, 0xe0, 0xef, 0x9c, 0xc1, 0xc6, 0xb9, - 0xce, 0x04, 0x07, 0x5e, 0x24, 0xb5, 0x5e, 0x33, 0xfe, 0x3c, 0xc3, 0x75, 0xa9, 0xda, 0xe8, 0xa3, 0x10, 0x5d, 0x41, - 0xa6, 0x02, 0x14, 0x8a, 0xb4, 0x7f, 0x50, 0x6a, 0x6e, 0x52, 0x69, 0x23, 0x01, 0x74, 0x0f, 0x93, 0x06, 0x5b, 0x0c, - 0x65, 0x2c, 0x4d, 0xa2, 0xdc, 0x69, 0x10, 0x57, 0xf6, 0xe7, 0x5c, 0xe2, 0xd0, 0xb2, 0x48, 0xfe, 0xbd, 0xef, 0xe9, - 0x2b, 0xa4, 0xee, 0x64, 0x81, 0xcc, 0x18, 0x2f, 0xf2, 0xf8, 0x13, 0x10, 0x66, 0x83, 0x36, 0x2a, 0x0a, 0x21, 0x64, - 0x83, 0x18, 0x34, 0x5e, 0xe4, 0xf1, 0x0f, 0x8a, 0xc6, 0x43, 0x3e, 0x8a, 0x7c, 0xf5, 0x57, 0xa9, 0xff, 0x0a, 0x7d, - 0x66, 0x82, 0x47, 0xa8, 0x26, 0xfa, 0x77, 0xcf, 0x67, 0xf7, 0xa0, 0x36, 0x8c, 0xc2, 0xcc, 0x94, 0x9f, 0xfb, 0xa6, - 0x38, 0x7b, 0xfd, 0x15, 0x5d, 0x65, 0x5b, 0xf7, 0xa3, 0x8f, 0x27, 0x04, 0xd6, 0xc6, 0xe8, 0x8a, 0x1b, 0x03, 0xc8, - 0x61, 0xf2, 0x7e, 0x45, 0x69, 0x15, 0xa4, 0x41, 0xe8, 0xa0, 0x21, 0xe8, 0x95, 0x44, 0x1f, 0x48, 0x2c, 0x62, 0x0c, - 0x2f, 0xc4, 0x33, 0x52, 0x93, 0x89, 0x86, 0x78, 0x45, 0xec, 0x87, 0x68, 0xc9, 0xa9, 0x89, 0x6e, 0x84, 0x29, 0x06, - 0x12, 0x3b, 0x83, 0xe4, 0x24, 0xa9, 0x95, 0x5f, 0x3c, 0x93, 0x84, 0x25, 0x76, 0x1e, 0x62, 0x30, 0xa9, 0xa5, 0x3b, - 0xbd, 0xa9, 0xd2, 0x97, 0x13, 0x2d, 0x07, 0xed, 0x03, 0xb0, 0x4b, 0x49, 0xef, 0x9f, 0x14, 0x8a, 0xf8, 0x10, 0xc6, - 0x31, 0x84, 0x6f, 0x11, 0xd5, 0x15, 0x38, 0xd7, 0x0a, 0x34, 0x56, 0x03, 0x0f, 0xcd, 0x2c, 0x9f, 0x0f, 0x39, 0xfd, - 0x54, 0x5a, 0xfe, 0x18, 0xd1, 0xd8, 0x68, 0xdd, 0x1c, 0x8f, 0x07, 0x5a, 0xf5, 0xd2, 0x39, 0xe8, 0xba, 0x99, 0xc4, - 0xc4, 0x0d, 0xa4, 0xeb, 0x47, 0xbf, 0x99, 0xb0, 0x17, 0x51, 0x21, 0x97, 0x42, 0x50, 0xd0, 0xea, 0x40, 0xe0, 0x50, - 0x78, 0x8b, 0x32, 0x5f, 0xc5, 0xb4, 0x81, 0x30, 0xf8, 0xfc, 0x40, 0x7e, 0xbe, 0x29, 0x48, 0xc5, 0x8e, 0x75, 0xed, - 0xf7, 0xb7, 0xa5, 0x07, 0x78, 0x72, 0x26, 0xc9, 0xd3, 0x66, 0x08, 0x2b, 0x02, 0x68, 0xcc, 0x6a, 0xb2, 0x38, 0xe1, - 0xca, 0x1c, 0x7e, 0xcc, 0xbd, 0x92, 0xa5, 0x4c, 0x9d, 0xa7, 0x7a, 0x01, 0x44, 0x1d, 0x6f, 0xd0, 0x8a, 0xd4, 0xaf, - 0xd0, 0xd9, 0x6b, 0x56, 0x42, 0xc6, 0xc3, 0x4b, 0xce, 0xd3, 0xd1, 0x03, 0x4b, 0x78, 0x84, 0x7f, 0x25, 0x13, 0x7d, - 0xf8, 0x3d, 0x70, 0xb8, 0x19, 0x27, 0x3c, 0x72, 0x9b, 0x7d, 0xa8, 0xc2, 0x35, 0xdc, 0x4c, 0x0b, 0x40, 0x72, 0x0b, - 0x92, 0x26, 0xa0, 0x84, 0x44, 0x26, 0x64, 0xd6, 0x94, 0xfc, 0xdc, 0xd2, 0x36, 0x58, 0xc3, 0xa4, 0xf3, 0x80, 0x17, - 0xad, 0x3e, 0x5a, 0x4d, 0xb4, 0xcb, 0xac, 0x9a, 0x0f, 0x71, 0x86, 0x6a, 0x8e, 0xbb, 0x0b, 0xf8, 0x39, 0xe0, 0x39, - 0xcb, 0x9b, 0x74, 0xb4, 0x1f, 0x70, 0xe1, 0xc9, 0x75, 0x9e, 0x8e, 0x76, 0xf8, 0x4b, 0xee, 0x0f, 0x00, 0x1d, 0x4c, - 0x5d, 0x02, 0x7f, 0xaa, 0xb6, 0x9a, 0x4a, 0xfd, 0xd2, 0xda, 0xaf, 0xeb, 0xce, 0x6a, 0xc1, 0x19, 0xa2, 0x2f, 0x43, - 0x07, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, - 0x82, 0x7b, 0xc9, 0x9f, 0x1f, 0x10, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, - 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xa9, 0x34, 0x26, 0x45, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcc, 0xbd, 0xeb, 0x7a, 0x1b, 0xb7, 0xb2, 0x20, 0xfa, + 0xfb, 0xcc, 0x53, 0x48, 0xbd, 0x1d, 0xa5, 0x21, 0x82, 0x2d, 0x92, 0xba, 0x58, 0x6e, 0x0a, 0xe2, 0xf8, 0x1a, 0x3b, + 0x71, 0x6c, 0xc7, 0x72, 0xec, 0xd8, 0x0c, 0xb7, 0x02, 0x36, 0x41, 0x12, 0x71, 0x13, 0x60, 0x1a, 0xa0, 0x25, 0x99, + 0xe4, 0xbb, 0x9f, 0xaf, 0x70, 0xe9, 0x46, 0x93, 0xb4, 0xd7, 0x5a, 0x73, 0x66, 0xce, 0x37, 0x3b, 0x7b, 0x59, 0x6c, + 0xdc, 0x51, 0x28, 0x14, 0xaa, 0x0a, 0x55, 0x85, 0x8b, 0xfd, 0x91, 0xcc, 0xf4, 0xdd, 0x9c, 0xed, 0x4d, 0xf5, 0x2c, + 0xbf, 0xbc, 0x70, 0xff, 0x32, 0x3a, 0xba, 0xbc, 0xc8, 0xb9, 0xf8, 0xbc, 0x57, 0xb0, 0x9c, 0xf0, 0x4c, 0x8a, 0xbd, + 0x69, 0xc1, 0xc6, 0x64, 0x44, 0x35, 0x4d, 0xf9, 0x8c, 0x4e, 0xd8, 0xde, 0xd1, 0xe5, 0xc5, 0x8c, 0x69, 0xba, 0x97, + 0x4d, 0x69, 0xa1, 0x98, 0x26, 0xbf, 0xbf, 0x7b, 0xd6, 0x3c, 0xbf, 0xbc, 0x50, 0x59, 0xc1, 0xe7, 0x7a, 0x0f, 0x9a, + 0x24, 0x33, 0x39, 0x5a, 0xe4, 0xec, 0xf2, 0xe8, 0xe8, 0xe6, 0xe6, 0x26, 0xf9, 0x5b, 0xfd, 0x8f, 0x2f, 0xb4, 0xd8, + 0xfb, 0xa5, 0x20, 0xaf, 0x87, 0x7f, 0xb3, 0x4c, 0x27, 0x23, 0x36, 0xe6, 0x82, 0xbd, 0x29, 0xe4, 0x9c, 0x15, 0xfa, + 0xae, 0x0b, 0x99, 0x3f, 0x15, 0x24, 0xe6, 0x58, 0x63, 0x86, 0xc8, 0xa5, 0xde, 0xe3, 0x62, 0x8f, 0xf7, 0x7e, 0x29, + 0x4c, 0xca, 0x92, 0x89, 0xc5, 0x8c, 0x15, 0x74, 0x98, 0xb3, 0x74, 0xbf, 0x85, 0x33, 0x29, 0xc6, 0x7c, 0xb2, 0x28, + 0xbf, 0x6f, 0x0a, 0xae, 0xfd, 0xef, 0x2f, 0x34, 0x5f, 0xb0, 0x94, 0xad, 0x51, 0xca, 0xfb, 0x7a, 0x40, 0x98, 0x69, + 0xf9, 0x73, 0xd5, 0x70, 0xfc, 0x93, 0x69, 0xf2, 0x6e, 0xce, 0xe4, 0x78, 0x4f, 0xef, 0x93, 0x48, 0xdd, 0xcd, 0x86, + 0x32, 0x8f, 0x7a, 0xba, 0x11, 0x45, 0x29, 0x94, 0xc1, 0x0c, 0x75, 0x33, 0x29, 0x94, 0xde, 0x13, 0x9c, 0xdc, 0x70, + 0x31, 0x92, 0x37, 0xf8, 0x46, 0x10, 0xc1, 0x93, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x83, 0x83, 0xd8, + 0x7d, 0xdf, 0x3d, 0xbe, 0xba, 0x22, 0x84, 0x7c, 0x91, 0x7c, 0xb4, 0xd7, 0x5a, 0xad, 0x82, 0xd4, 0x44, 0x50, 0xcd, + 0xbf, 0x30, 0x5b, 0x09, 0x1d, 0x1c, 0x44, 0x74, 0x24, 0xe7, 0x9a, 0x8d, 0xae, 0xf4, 0x5d, 0xce, 0xae, 0xa6, 0x8c, + 0x69, 0x15, 0x71, 0xb1, 0xf7, 0x44, 0x66, 0x8b, 0x19, 0x13, 0x3a, 0x99, 0x17, 0x52, 0x4b, 0x18, 0xd8, 0xc1, 0x41, + 0x54, 0xb0, 0x79, 0x4e, 0x33, 0x06, 0xf9, 0x8f, 0xaf, 0xae, 0xaa, 0x1a, 0x55, 0x21, 0xfc, 0x59, 0x90, 0x2b, 0x33, + 0xf4, 0x18, 0xe1, 0x0f, 0x82, 0x08, 0x76, 0xb3, 0xf7, 0x81, 0xd1, 0xcf, 0xbf, 0xd2, 0x79, 0x37, 0xcb, 0xa9, 0x52, + 0x7b, 0xcf, 0xe4, 0xd2, 0x4c, 0xa3, 0x58, 0x64, 0x5a, 0x16, 0xb1, 0xc6, 0x0c, 0x0b, 0xb4, 0xe4, 0xe3, 0x58, 0x4f, + 0xb9, 0x4a, 0xae, 0xef, 0x65, 0x4a, 0xbd, 0x65, 0x6a, 0x91, 0xeb, 0x7b, 0x64, 0xbf, 0x85, 0xc5, 0x3e, 0x21, 0x9f, + 0x05, 0xd2, 0xd3, 0x42, 0xde, 0xec, 0x3d, 0x2d, 0x0a, 0x59, 0xc4, 0xd1, 0xe3, 0xab, 0x2b, 0x5b, 0x62, 0x8f, 0xab, + 0x3d, 0x21, 0xf5, 0x5e, 0xd9, 0x1e, 0x40, 0x3b, 0xd9, 0xfb, 0x5d, 0xb1, 0xbd, 0xbf, 0x16, 0x42, 0xd1, 0x31, 0x7b, + 0x7c, 0x75, 0xf5, 0xd7, 0x9e, 0x2c, 0xf6, 0xfe, 0xca, 0x94, 0xfa, 0x6b, 0x8f, 0x0b, 0xa5, 0x19, 0x1d, 0x25, 0x11, + 0xea, 0x9a, 0xce, 0x32, 0xa5, 0xde, 0xb1, 0x5b, 0x4d, 0x34, 0x36, 0x9f, 0x9a, 0xb0, 0xf5, 0x84, 0xe9, 0x3d, 0x55, + 0xce, 0x2b, 0x46, 0xcb, 0x9c, 0xe9, 0x3d, 0x4d, 0x4c, 0xbe, 0x74, 0xf0, 0x67, 0xf6, 0x53, 0x77, 0xf9, 0x38, 0xbe, + 0x11, 0x07, 0x07, 0xba, 0x04, 0x34, 0x5a, 0xba, 0x15, 0x22, 0x6c, 0xdf, 0xa7, 0x1d, 0x1c, 0xb0, 0x24, 0x67, 0x62, + 0xa2, 0xa7, 0x84, 0x90, 0x76, 0x57, 0x1c, 0x1c, 0xc4, 0x9a, 0x7c, 0x10, 0xc9, 0x84, 0xe9, 0x98, 0x21, 0x84, 0xab, + 0xda, 0x07, 0x07, 0xb1, 0x05, 0x82, 0x24, 0xda, 0x00, 0xae, 0x06, 0x63, 0x94, 0x38, 0xe8, 0x5f, 0xdd, 0x89, 0x2c, + 0x0e, 0xc7, 0x8f, 0xb0, 0x38, 0x38, 0xf8, 0x20, 0x12, 0x05, 0x2d, 0x62, 0x8d, 0xd0, 0xba, 0x60, 0x7a, 0x51, 0x88, + 0x3d, 0xbd, 0xd6, 0xf2, 0x4a, 0x17, 0x5c, 0x4c, 0x62, 0xb4, 0xf4, 0x69, 0x41, 0xc5, 0xf5, 0xda, 0x0e, 0xf7, 0xb7, + 0x82, 0x70, 0x72, 0x09, 0x3d, 0x3e, 0x93, 0xb1, 0xc3, 0x41, 0x4e, 0x48, 0xa4, 0x4c, 0xdd, 0xa8, 0xc7, 0x53, 0xde, + 0x88, 0x22, 0x6c, 0x47, 0x89, 0x3f, 0x0b, 0x84, 0xb9, 0x06, 0xd4, 0x4d, 0x92, 0x44, 0x23, 0x72, 0xb9, 0xf4, 0x60, + 0xe1, 0xc1, 0x44, 0x7b, 0xbc, 0xdf, 0x1a, 0xa4, 0x3a, 0x29, 0xd8, 0x68, 0x91, 0xb1, 0x38, 0x16, 0x58, 0x61, 0x89, + 0xc8, 0xa5, 0x68, 0xc4, 0x05, 0xb9, 0x84, 0xf5, 0x2e, 0xea, 0x8b, 0x4d, 0xc8, 0x7e, 0x0b, 0xb9, 0x41, 0x16, 0x7e, + 0x84, 0x00, 0x62, 0x37, 0xa0, 0x82, 0x90, 0x48, 0x2c, 0x66, 0x43, 0x56, 0x44, 0x65, 0xb1, 0x6e, 0x0d, 0x2f, 0x16, + 0x8a, 0xed, 0x65, 0x4a, 0xed, 0x8d, 0x17, 0x22, 0xd3, 0x5c, 0x8a, 0xbd, 0xa8, 0x51, 0x34, 0x22, 0x8b, 0x0f, 0x25, + 0x3a, 0x44, 0x68, 0x8d, 0x62, 0x85, 0x1a, 0xbc, 0x2f, 0x1b, 0xed, 0x01, 0x86, 0x51, 0xa2, 0xae, 0x6b, 0xcf, 0x41, + 0x80, 0x61, 0x0e, 0x93, 0x5c, 0xe3, 0x4f, 0x76, 0xe7, 0xc3, 0x14, 0x6f, 0x44, 0x8f, 0x27, 0xdb, 0x3b, 0x85, 0xe8, + 0x64, 0x46, 0xe7, 0x31, 0x23, 0x97, 0xcc, 0x60, 0x17, 0x15, 0x19, 0x8c, 0xb5, 0xb6, 0x70, 0x3d, 0x96, 0xb2, 0xa4, + 0xc2, 0x29, 0x94, 0xea, 0x64, 0x2c, 0x8b, 0xa7, 0x34, 0x9b, 0x42, 0xbd, 0x12, 0x63, 0x46, 0x7e, 0xc3, 0x65, 0x05, + 0xa3, 0x9a, 0x3d, 0xcd, 0x19, 0x7c, 0xc5, 0x91, 0xa9, 0x19, 0x21, 0xac, 0x60, 0xab, 0xe7, 0x5c, 0xbf, 0x92, 0x22, + 0x63, 0x5d, 0x15, 0xe0, 0x97, 0x59, 0xf9, 0x87, 0x5a, 0x17, 0x7c, 0xb8, 0xd0, 0x2c, 0x8e, 0x04, 0x94, 0x88, 0xb0, + 0x42, 0x58, 0x24, 0x9a, 0xdd, 0xea, 0xc7, 0x52, 0x68, 0x26, 0x34, 0x61, 0x1e, 0xaa, 0x98, 0x27, 0x74, 0x3e, 0x67, + 0x62, 0xf4, 0x78, 0xca, 0xf3, 0x51, 0x2c, 0xd0, 0x1a, 0xad, 0xf1, 0xef, 0x82, 0xc0, 0x24, 0xc9, 0x25, 0x4f, 0xe1, + 0x9f, 0x6f, 0x4f, 0x27, 0xd6, 0xe4, 0xd2, 0x6c, 0x0b, 0x46, 0xa2, 0xa8, 0x3b, 0x96, 0x45, 0xec, 0xa6, 0xb0, 0x07, + 0xa4, 0x0b, 0xfa, 0x78, 0xbb, 0xc8, 0x99, 0x42, 0xac, 0x41, 0x44, 0xb9, 0x8e, 0x0e, 0xc2, 0xbf, 0x15, 0x31, 0x83, + 0x05, 0xe0, 0x28, 0xe5, 0x86, 0x04, 0xbe, 0xe4, 0x6e, 0x53, 0x8d, 0x4a, 0xa2, 0xf6, 0x51, 0x90, 0x11, 0x4f, 0x74, + 0xb1, 0x50, 0x9a, 0x8d, 0xde, 0xdd, 0xcd, 0x99, 0xc2, 0x3f, 0x17, 0xe4, 0xa3, 0xe8, 0x7d, 0x14, 0x09, 0x9b, 0xcd, + 0xf5, 0xdd, 0x95, 0xa1, 0xe6, 0x69, 0x14, 0xe1, 0x7f, 0x4c, 0xd1, 0x82, 0xd1, 0x0c, 0x48, 0x9a, 0x03, 0xd9, 0x1b, + 0x99, 0xdf, 0x8d, 0x79, 0x9e, 0x5f, 0x2d, 0xe6, 0x73, 0x59, 0x68, 0xac, 0x05, 0x59, 0x6a, 0x59, 0xc1, 0x07, 0x56, + 0x74, 0xa9, 0x6e, 0xb8, 0xce, 0xa6, 0xb1, 0x46, 0xcb, 0x8c, 0x2a, 0xb6, 0xf7, 0x48, 0xca, 0x9c, 0x51, 0x91, 0x72, + 0xc2, 0x7b, 0x3f, 0x17, 0xa9, 0x58, 0xe4, 0x79, 0x77, 0x58, 0x30, 0xfa, 0xb9, 0x6b, 0xb2, 0xed, 0xe1, 0x90, 0x9a, + 0xdf, 0x0f, 0x8b, 0x82, 0xde, 0x41, 0x41, 0x42, 0xa0, 0x58, 0x8f, 0xa7, 0x3f, 0x5f, 0xbd, 0x7e, 0x95, 0xd8, 0xbd, + 0xc2, 0xc7, 0x77, 0x31, 0x2f, 0xf7, 0x1f, 0x5f, 0xe3, 0x71, 0x21, 0x67, 0x1b, 0x5d, 0x5b, 0xd0, 0xf1, 0xee, 0x37, + 0x86, 0xc0, 0x08, 0xdf, 0xb7, 0x4d, 0x87, 0x23, 0x78, 0x65, 0x30, 0x1f, 0x32, 0x89, 0xeb, 0x17, 0xfe, 0x49, 0x6d, + 0x72, 0xcc, 0xd1, 0xf7, 0x47, 0xab, 0x8b, 0xbb, 0x25, 0x23, 0x66, 0x9c, 0x73, 0x38, 0x18, 0x61, 0x8c, 0x19, 0xd5, + 0xd9, 0x74, 0xc9, 0x4c, 0x63, 0x6b, 0x3f, 0x62, 0xb6, 0x5e, 0xe3, 0xaf, 0xd2, 0x63, 0xbd, 0xde, 0x27, 0x84, 0x1b, + 0x7a, 0x45, 0xf4, 0x6a, 0xc5, 0x09, 0xe1, 0x08, 0xbf, 0xe5, 0x64, 0x49, 0xfd, 0x84, 0xe0, 0x64, 0x83, 0xed, 0x99, + 0x5a, 0x2a, 0x03, 0x27, 0xe0, 0x17, 0x56, 0x68, 0x56, 0xa4, 0x5a, 0xe0, 0x82, 0x8d, 0x73, 0x18, 0xc7, 0x7e, 0x1b, + 0x4f, 0xa9, 0x7a, 0x3c, 0xa5, 0x62, 0xc2, 0x46, 0xe9, 0x57, 0xb9, 0xc6, 0x4c, 0x90, 0x68, 0xcc, 0x05, 0xcd, 0xf9, + 0x57, 0x36, 0x8a, 0xdc, 0xb9, 0xf0, 0x48, 0xef, 0xb1, 0x5b, 0xcd, 0xc4, 0x48, 0xed, 0x3d, 0x7f, 0xf7, 0xeb, 0x4b, + 0xb7, 0x98, 0xb5, 0xb3, 0x02, 0x2d, 0xd5, 0x62, 0xce, 0x8a, 0x18, 0x61, 0x77, 0x56, 0x3c, 0xe5, 0x86, 0x4e, 0xfe, + 0x4a, 0xe7, 0x36, 0x85, 0xab, 0xdf, 0xe7, 0x23, 0xaa, 0xd9, 0x1b, 0x26, 0x46, 0x5c, 0x4c, 0xc8, 0x7e, 0xdb, 0xa6, + 0x4f, 0xa9, 0xcb, 0x18, 0x95, 0x49, 0xd7, 0xf7, 0x9e, 0xe6, 0x66, 0xee, 0xe5, 0xe7, 0x22, 0x46, 0x6b, 0xa5, 0xa9, + 0xe6, 0xd9, 0x1e, 0x1d, 0x8d, 0x5e, 0x08, 0xae, 0xb9, 0x19, 0x61, 0x01, 0x4b, 0x04, 0xb8, 0xca, 0xec, 0xa9, 0xe1, + 0x47, 0x1e, 0x23, 0x1c, 0xc7, 0xee, 0x2c, 0x98, 0x22, 0xb7, 0x66, 0x07, 0x07, 0x15, 0xe5, 0xef, 0xb1, 0xd4, 0x66, + 0x92, 0xfe, 0x00, 0x25, 0xf3, 0x85, 0x82, 0xc5, 0xf6, 0x5d, 0xc0, 0x41, 0x23, 0x87, 0x8a, 0x15, 0x5f, 0xd8, 0xa8, + 0x44, 0x10, 0x15, 0xa3, 0xe5, 0x46, 0x1f, 0x6e, 0x7b, 0x68, 0xd2, 0x1f, 0x74, 0x43, 0x12, 0xce, 0x1c, 0xb2, 0x5b, + 0x4e, 0x85, 0x33, 0x55, 0x12, 0x95, 0x18, 0x0e, 0xd4, 0x92, 0xb0, 0x28, 0xe2, 0xe7, 0x37, 0x8f, 0x05, 0xf0, 0x10, + 0x21, 0xe5, 0xf0, 0x67, 0xee, 0xd3, 0x2f, 0xe6, 0xf0, 0x50, 0x58, 0x20, 0xac, 0xed, 0x48, 0x15, 0x42, 0x6b, 0x84, + 0xb5, 0x1f, 0xae, 0x25, 0x4a, 0x9e, 0x2f, 0x82, 0x53, 0x9b, 0xbc, 0xe5, 0xe6, 0xd8, 0x06, 0xda, 0x46, 0x35, 0x3b, + 0x38, 0x88, 0x59, 0x52, 0x22, 0x06, 0xd9, 0x6f, 0xbb, 0x45, 0x0a, 0xa0, 0xf5, 0x8d, 0x71, 0x43, 0xcf, 0x86, 0xc1, + 0xd9, 0x67, 0x89, 0x90, 0x0f, 0xb3, 0x8c, 0x29, 0x25, 0x8b, 0x83, 0x83, 0x7d, 0x53, 0xbe, 0xe4, 0x2c, 0x60, 0x11, + 0x5f, 0xdf, 0x88, 0x6a, 0x08, 0xa8, 0x3a, 0x6d, 0x3d, 0xdf, 0x44, 0x2a, 0xbe, 0xc9, 0x33, 0x21, 0x69, 0x74, 0x7d, + 0x1d, 0x35, 0x34, 0x76, 0x70, 0x98, 0x30, 0xdf, 0xf5, 0xdd, 0x13, 0x66, 0xd9, 0x42, 0xc3, 0x84, 0x6c, 0x81, 0x66, + 0x27, 0x3f, 0x18, 0xd7, 0x87, 0x84, 0x35, 0x56, 0x68, 0x1d, 0xac, 0xe8, 0xce, 0xa6, 0x0d, 0x7f, 0x63, 0x97, 0x6e, + 0x39, 0x31, 0x3c, 0x45, 0xb0, 0x8e, 0x7d, 0x36, 0x58, 0x63, 0x03, 0x7b, 0x3f, 0x1b, 0x69, 0x06, 0xda, 0xd7, 0x83, + 0xae, 0xcb, 0x27, 0xca, 0x42, 0xae, 0x60, 0xff, 0x2c, 0x98, 0xd2, 0x16, 0x91, 0x63, 0x8d, 0x25, 0x86, 0x33, 0x6a, + 0x93, 0xe9, 0xac, 0xb1, 0xa4, 0xbb, 0xc6, 0xf6, 0x7a, 0x0e, 0x67, 0xa3, 0x02, 0xa4, 0xfe, 0x3e, 0x3e, 0xc1, 0x58, + 0x35, 0x5a, 0xad, 0xde, 0x72, 0xdf, 0x4a, 0xb5, 0x96, 0x25, 0xbf, 0xb6, 0xb1, 0x28, 0x4c, 0x20, 0x77, 0x38, 0xef, + 0xb7, 0xdd, 0xf8, 0xc5, 0x80, 0xec, 0xb7, 0x4a, 0x2c, 0x76, 0x60, 0xb5, 0xe3, 0xb1, 0x50, 0x7c, 0x6d, 0x9b, 0x42, + 0xe6, 0xac, 0xaf, 0xe1, 0x4b, 0x32, 0xdd, 0xc2, 0xd5, 0x29, 0xe9, 0x03, 0xd7, 0x91, 0x4c, 0x07, 0xdf, 0xc2, 0x27, + 0x4f, 0x11, 0x62, 0xbd, 0x9d, 0x57, 0x11, 0x8e, 0x2f, 0x75, 0xc2, 0xb1, 0x31, 0x8d, 0x68, 0x5e, 0x56, 0x89, 0x4a, + 0x34, 0x73, 0x5b, 0xbd, 0xca, 0xc2, 0xc2, 0x0c, 0xa6, 0x9a, 0x52, 0xd0, 0xc4, 0x2b, 0x3a, 0x63, 0x2a, 0x66, 0x08, + 0x7f, 0xab, 0x80, 0xc5, 0x4f, 0x28, 0x32, 0x08, 0xce, 0x50, 0x05, 0x67, 0x28, 0xb0, 0xbb, 0xc0, 0xa4, 0xd5, 0xb7, + 0x9c, 0xc2, 0xac, 0xaf, 0x06, 0x15, 0x6f, 0x17, 0x4c, 0xde, 0x1c, 0xce, 0x0e, 0xc1, 0x3d, 0xfc, 0x6c, 0x9a, 0x05, + 0x9a, 0x61, 0x21, 0x14, 0xc2, 0xfb, 0xad, 0xcd, 0x95, 0xf4, 0xa5, 0xaa, 0x39, 0xf6, 0x07, 0xb0, 0x0e, 0xe6, 0xd8, + 0x48, 0xb8, 0x32, 0x7f, 0x6b, 0x5b, 0x0d, 0xc0, 0x76, 0x05, 0x98, 0x91, 0x8c, 0x73, 0xaa, 0xe3, 0xf6, 0x51, 0x0b, + 0x18, 0xd3, 0x2f, 0x0c, 0x4e, 0x15, 0x84, 0xb6, 0xa7, 0xc2, 0x92, 0x85, 0x50, 0x53, 0x3e, 0xd6, 0xf1, 0xef, 0xc2, + 0x10, 0x15, 0x96, 0x2b, 0x06, 0x12, 0x4e, 0xc0, 0x1e, 0x1b, 0x82, 0xf3, 0xbb, 0x80, 0x7e, 0xba, 0xe5, 0x41, 0xe4, + 0x46, 0x6a, 0x08, 0x17, 0x90, 0x87, 0x8a, 0xb5, 0xae, 0xc8, 0x4c, 0xc9, 0xb8, 0x01, 0xf7, 0xd8, 0xee, 0xd9, 0x16, + 0x53, 0x47, 0x0d, 0x44, 0xc0, 0xc1, 0x8a, 0x34, 0x24, 0x11, 0x2e, 0x51, 0x27, 0x5a, 0xbe, 0x94, 0x37, 0xac, 0x78, + 0x4c, 0x61, 0xf0, 0xa9, 0xad, 0xbe, 0xb6, 0x47, 0x81, 0xa1, 0xf8, 0xba, 0xeb, 0xf1, 0xe5, 0xda, 0x4c, 0xfc, 0x4d, + 0x21, 0x67, 0x5c, 0x31, 0xe0, 0xdb, 0x2c, 0xfc, 0x05, 0x6c, 0x34, 0xb3, 0x23, 0xe1, 0xb8, 0x61, 0x25, 0x7e, 0x3d, + 0x7c, 0x59, 0xc7, 0xaf, 0xeb, 0x7b, 0x4f, 0x27, 0x9e, 0x02, 0xd6, 0xf7, 0x31, 0xc2, 0xb1, 0x13, 0x2f, 0x82, 0x93, + 0x2e, 0x99, 0x22, 0x77, 0xcc, 0xaf, 0x56, 0x3a, 0x10, 0xe3, 0x6a, 0x9c, 0x23, 0xb3, 0xdb, 0x06, 0xad, 0xe9, 0x68, + 0x04, 0x2c, 0x5e, 0x21, 0xf3, 0x3c, 0x38, 0xac, 0xb0, 0xe8, 0x96, 0xc7, 0xd3, 0xf5, 0xbd, 0xa7, 0x57, 0xdf, 0x3b, + 0xa1, 0x20, 0x3f, 0x3c, 0xa4, 0xfc, 0x40, 0xc5, 0x88, 0x15, 0x20, 0x57, 0x06, 0xab, 0xe5, 0xce, 0xd9, 0xc7, 0x52, + 0x08, 0x96, 0x69, 0x36, 0x02, 0xa1, 0x45, 0x10, 0x9d, 0x4c, 0xa5, 0xd2, 0x65, 0x62, 0x35, 0x7a, 0x11, 0x0a, 0xa1, + 0x49, 0x46, 0xf3, 0x3c, 0xb6, 0x02, 0xca, 0x4c, 0x7e, 0x61, 0x3b, 0x46, 0xdd, 0xad, 0x0d, 0xb9, 0x6c, 0x86, 0x05, + 0xcd, 0xb0, 0x44, 0xcd, 0x73, 0x9e, 0xb1, 0xf2, 0xf0, 0xba, 0x4a, 0xb8, 0x18, 0xb1, 0x5b, 0xa0, 0x23, 0xe8, 0xf2, + 0xf2, 0xb2, 0x85, 0xdb, 0x68, 0x6d, 0x01, 0xbe, 0xdc, 0x02, 0xec, 0x77, 0x8e, 0x4d, 0x2b, 0x88, 0x2f, 0x77, 0x92, + 0x35, 0x14, 0x9c, 0x95, 0xdc, 0x0b, 0x5a, 0x96, 0x3c, 0x23, 0x3c, 0x62, 0x39, 0xd3, 0xcc, 0x93, 0x73, 0x60, 0xa6, + 0xed, 0xd6, 0x7d, 0x5b, 0xc2, 0xaf, 0x44, 0x27, 0xbf, 0xcb, 0xfc, 0x9a, 0xab, 0x52, 0x74, 0xaf, 0x96, 0xa7, 0x82, + 0x76, 0x4f, 0xdb, 0xe5, 0xa1, 0x5a, 0xd3, 0x6c, 0x6a, 0x25, 0xf6, 0x78, 0x6b, 0x4a, 0x55, 0x1b, 0x8e, 0xb4, 0x97, + 0x9b, 0xe8, 0x53, 0xe1, 0x86, 0xb9, 0x0b, 0x04, 0x57, 0x8e, 0x28, 0x30, 0x10, 0x02, 0xed, 0xb2, 0x3d, 0xa6, 0x79, + 0x3e, 0xa4, 0xd9, 0xe7, 0x3a, 0xf6, 0x57, 0x68, 0x40, 0x36, 0xa9, 0x71, 0x90, 0x15, 0x90, 0xac, 0x70, 0xde, 0x9e, + 0x4a, 0xd7, 0x36, 0x4a, 0xbc, 0xdf, 0xaa, 0xd0, 0xbe, 0xbe, 0xd0, 0xdf, 0xc4, 0x76, 0x33, 0x22, 0xe1, 0x66, 0x16, + 0x03, 0x15, 0xf8, 0x97, 0x18, 0xe7, 0xe9, 0x81, 0xc3, 0x3b, 0x10, 0x3c, 0xd6, 0x1b, 0x03, 0xd1, 0x68, 0xb9, 0x1e, + 0x71, 0xf5, 0x6d, 0x08, 0xfc, 0x6f, 0x19, 0xe5, 0x93, 0xa0, 0x87, 0x7f, 0x77, 0xa0, 0x25, 0x8d, 0x73, 0x8c, 0x73, + 0x39, 0x32, 0xc7, 0x50, 0x78, 0x42, 0xf3, 0x0b, 0x30, 0x2f, 0x06, 0xdf, 0x5f, 0xdb, 0x2c, 0xc3, 0x97, 0xc1, 0x30, + 0x54, 0x37, 0x64, 0x28, 0x6a, 0x28, 0xe0, 0x88, 0xaa, 0x30, 0x67, 0xae, 0xac, 0x89, 0x92, 0x8e, 0x6b, 0xb7, 0xe2, + 0xb8, 0xa3, 0xb9, 0x05, 0x89, 0xe3, 0x58, 0x81, 0x34, 0xe7, 0xf9, 0xfb, 0x6a, 0x16, 0x6a, 0x6b, 0x16, 0x2a, 0x09, + 0xa4, 0x2d, 0x54, 0x21, 0x73, 0x50, 0x3d, 0xd5, 0x02, 0x85, 0xa5, 0x80, 0x65, 0x4d, 0x80, 0x42, 0xa3, 0x92, 0xe0, + 0xe6, 0x44, 0xe3, 0xc2, 0x89, 0x3a, 0x0e, 0xd7, 0x80, 0x64, 0x54, 0x55, 0x24, 0xb2, 0x9b, 0xa3, 0x26, 0xfb, 0x4a, + 0x5c, 0xa0, 0x0d, 0xfe, 0x7e, 0xbd, 0x76, 0x50, 0x62, 0xc8, 0xad, 0x4e, 0x8d, 0x31, 0x0e, 0xc0, 0x82, 0x25, 0x71, + 0xcc, 0xb0, 0x65, 0x7d, 0x36, 0x81, 0x53, 0xb6, 0xbb, 0x4f, 0x88, 0xac, 0x60, 0x53, 0x63, 0x2a, 0x3d, 0x77, 0x25, + 0x11, 0xa6, 0x9e, 0x2d, 0x2d, 0xaa, 0x89, 0x13, 0x12, 0x79, 0xed, 0x44, 0xd4, 0x5b, 0xd6, 0x84, 0xc3, 0x34, 0x28, + 0xb6, 0x4e, 0x81, 0xa8, 0x16, 0xbb, 0xe0, 0xbd, 0x0b, 0x6b, 0x6a, 0xed, 0x04, 0x10, 0x2f, 0x6a, 0x10, 0x0f, 0x40, + 0x2b, 0x2d, 0xf1, 0x92, 0x03, 0x42, 0xeb, 0x95, 0x63, 0x86, 0x0b, 0xbb, 0x10, 0x5b, 0x50, 0xdc, 0x64, 0x3f, 0x0d, + 0x16, 0x82, 0x2c, 0xab, 0x80, 0xbf, 0x0b, 0x8f, 0x88, 0x18, 0x06, 0x2f, 0x56, 0xab, 0x2d, 0xb4, 0xdb, 0xc9, 0x85, + 0xa2, 0xa4, 0x92, 0x0e, 0x57, 0xab, 0xaf, 0x12, 0xc5, 0x8e, 0xff, 0xc5, 0x0c, 0xf5, 0x3c, 0xd1, 0x7d, 0xf8, 0x12, + 0x4a, 0x19, 0x76, 0xb4, 0x4a, 0x29, 0x05, 0x87, 0x3a, 0xd6, 0xd6, 0x17, 0x4a, 0x07, 0x94, 0xfb, 0xf1, 0x16, 0x01, + 0x33, 0x89, 0xee, 0xa4, 0xae, 0xa6, 0xfc, 0xd8, 0x35, 0x2d, 0x10, 0x42, 0xa9, 0x32, 0xb2, 0xcc, 0xfe, 0x2e, 0xf9, + 0xf2, 0xe0, 0x40, 0x05, 0x0d, 0x5d, 0x97, 0x94, 0xe2, 0xef, 0x18, 0x4e, 0x65, 0x75, 0x27, 0x0c, 0xfb, 0xf2, 0xb7, + 0x3f, 0x87, 0xb6, 0xa4, 0xd3, 0x56, 0x17, 0x04, 0x73, 0x7a, 0x43, 0xb9, 0xde, 0x2b, 0x5b, 0xb1, 0x82, 0x79, 0xcc, + 0xd0, 0xd2, 0x71, 0x1b, 0x49, 0xc1, 0x80, 0x7f, 0x04, 0xb2, 0xe0, 0xb9, 0x68, 0x8b, 0xf8, 0xd9, 0x94, 0x81, 0x2a, + 0xdb, 0x33, 0x12, 0xa5, 0x78, 0xb8, 0xef, 0x0e, 0x12, 0xd7, 0xf0, 0xee, 0xb1, 0xaf, 0x37, 0xab, 0xd7, 0xa4, 0x81, + 0x39, 0x2b, 0xc6, 0xb2, 0x98, 0xf9, 0xbc, 0xf5, 0xc6, 0xb7, 0x23, 0x8e, 0x7c, 0x1c, 0xef, 0x6c, 0xdb, 0x89, 0x00, + 0xdd, 0x0d, 0xd9, 0xbb, 0x92, 0xda, 0x6b, 0xa7, 0x69, 0x79, 0x00, 0x5b, 0x05, 0xa1, 0xc7, 0x4c, 0x15, 0x4a, 0xf9, + 0x4e, 0xbd, 0xda, 0xb5, 0xba, 0x93, 0xfd, 0x76, 0xb7, 0x94, 0xfc, 0x3c, 0x36, 0x74, 0xad, 0x8e, 0xc3, 0x9d, 0xaa, + 0x72, 0x91, 0x8f, 0xdc, 0x60, 0x05, 0xc2, 0xcc, 0xe1, 0xd1, 0x0d, 0xcf, 0xf3, 0x2a, 0xf5, 0x3f, 0x21, 0xed, 0xca, + 0x91, 0x76, 0xe9, 0x49, 0x3b, 0x90, 0x0a, 0x20, 0xed, 0xb6, 0xb9, 0xaa, 0xba, 0xdc, 0xda, 0x9e, 0xd2, 0x12, 0x75, + 0x65, 0xc4, 0x69, 0xe8, 0x6f, 0xe1, 0x47, 0x80, 0x4a, 0xe6, 0xeb, 0x73, 0xec, 0xf4, 0x31, 0x20, 0x06, 0x5a, 0x9d, + 0x26, 0x0b, 0x35, 0x15, 0x9f, 0x63, 0x84, 0xd5, 0x9a, 0x95, 0x98, 0xfd, 0xf0, 0x29, 0x28, 0xed, 0x82, 0xe9, 0xc0, + 0x39, 0x66, 0x92, 0xff, 0x23, 0x3e, 0xca, 0xcf, 0x4e, 0xb8, 0xd9, 0x29, 0x3f, 0x3b, 0xa0, 0xf5, 0xd5, 0xec, 0x46, + 0xdf, 0xa7, 0xf6, 0x66, 0x7a, 0xa2, 0x9c, 0x5e, 0xb5, 0xde, 0xab, 0x55, 0xbc, 0x91, 0x02, 0x1a, 0x7d, 0x27, 0xa5, + 0x14, 0x65, 0xeb, 0x40, 0x03, 0x42, 0xc8, 0x40, 0xc2, 0xda, 0x4e, 0xba, 0x3c, 0xe5, 0x5e, 0xfe, 0x2b, 0x3d, 0x8f, + 0x51, 0xdc, 0xdb, 0xfa, 0x8f, 0xe5, 0x6c, 0x0e, 0x0c, 0xd9, 0x06, 0x4a, 0x4f, 0x98, 0xeb, 0xb0, 0xca, 0x5f, 0xef, + 0x48, 0xab, 0xd5, 0x31, 0xfb, 0xb1, 0x86, 0x4d, 0xa5, 0xd4, 0xbc, 0xdf, 0x5a, 0x2f, 0xca, 0xa4, 0x92, 0x70, 0xec, + 0xd2, 0xad, 0x3c, 0xde, 0xd4, 0xcc, 0xf8, 0x8c, 0xd7, 0xb1, 0xb0, 0x74, 0x58, 0x00, 0xad, 0x0b, 0xc8, 0x8f, 0x47, + 0xf7, 0x70, 0xfd, 0xd7, 0x15, 0x70, 0x96, 0xeb, 0x0d, 0xf0, 0x2d, 0xd7, 0xeb, 0x47, 0xda, 0x49, 0xda, 0xf8, 0xd1, + 0x0e, 0xb9, 0xb7, 0x84, 0x5e, 0x95, 0xe9, 0x64, 0xc6, 0xfe, 0x00, 0xd2, 0xb6, 0x58, 0x48, 0xb2, 0x9c, 0xc9, 0x11, + 0x4b, 0x23, 0x39, 0x67, 0x22, 0x5a, 0x83, 0x9e, 0xd5, 0x21, 0xc0, 0x3f, 0x22, 0x5e, 0xbe, 0xad, 0xeb, 0x5b, 0xd3, + 0x47, 0x7a, 0x0d, 0xaa, 0xb0, 0x97, 0x7c, 0x87, 0x32, 0xf6, 0x3d, 0x2b, 0x94, 0xe1, 0x49, 0x4b, 0xf6, 0xf6, 0x25, + 0xaf, 0x0e, 0xa8, 0x97, 0x3c, 0xfd, 0x76, 0x95, 0x4a, 0x20, 0x89, 0xda, 0xc9, 0x59, 0x72, 0x1c, 0x21, 0xa3, 0x31, + 0x7e, 0xe6, 0x35, 0xc6, 0x8b, 0x52, 0x63, 0xfc, 0x5c, 0x93, 0xc5, 0x86, 0xc6, 0xf8, 0x0f, 0x41, 0x9e, 0xeb, 0xde, + 0x73, 0xaf, 0x4d, 0x7f, 0x23, 0x73, 0x9e, 0xdd, 0xc5, 0x51, 0xce, 0x75, 0x13, 0x6e, 0x13, 0x23, 0xbc, 0xb4, 0x19, + 0xa0, 0x6a, 0x34, 0xfa, 0xee, 0xb5, 0x97, 0xff, 0xb0, 0x10, 0x24, 0xba, 0x97, 0x73, 0x7d, 0x2f, 0xc2, 0x53, 0x4d, + 0xfe, 0x82, 0x5f, 0xf7, 0x96, 0xf1, 0xaf, 0x54, 0x4f, 0x93, 0x82, 0x8a, 0x91, 0x9c, 0xc5, 0xa8, 0x11, 0x45, 0x28, + 0x51, 0x46, 0x08, 0x79, 0x80, 0xd6, 0xf7, 0xfe, 0xc2, 0xaf, 0x24, 0x89, 0x7a, 0x51, 0x63, 0xaa, 0xb1, 0xa6, 0xe4, + 0xaf, 0x8b, 0x7b, 0xcb, 0x57, 0x72, 0x7d, 0xf9, 0x17, 0x7e, 0xaa, 0x4b, 0xb5, 0x3e, 0xbe, 0x65, 0x24, 0x46, 0xe4, + 0xf2, 0xa9, 0x1f, 0xd2, 0x63, 0x39, 0xb3, 0x0a, 0xfe, 0x08, 0xe1, 0x2f, 0xa0, 0xd7, 0xbd, 0xe4, 0x15, 0x11, 0x72, + 0x77, 0x30, 0xfb, 0x24, 0x92, 0x46, 0x79, 0x10, 0x1d, 0x1c, 0x04, 0x69, 0x25, 0x0b, 0x81, 0xff, 0x96, 0xa4, 0x26, + 0xaa, 0x63, 0x46, 0xa1, 0xa5, 0xbf, 0x65, 0xcc, 0x91, 0x6f, 0x26, 0xf6, 0x9a, 0x6a, 0xb7, 0x63, 0x79, 0xdf, 0xea, + 0x1e, 0x12, 0xae, 0x59, 0x41, 0xb5, 0x2c, 0x06, 0x28, 0x64, 0x4b, 0xf0, 0x57, 0x4e, 0xfe, 0xea, 0xef, 0xfd, 0x3f, + 0xff, 0xe3, 0xcf, 0xf1, 0x9f, 0xc5, 0xe0, 0x2f, 0x2c, 0x18, 0x39, 0xba, 0x88, 0x7b, 0x69, 0xbc, 0xdf, 0x6c, 0xae, + 0xfe, 0x3c, 0xea, 0xff, 0x37, 0x6d, 0x7e, 0x7d, 0xd8, 0xfc, 0x34, 0x40, 0xab, 0xf8, 0xcf, 0xa3, 0x5e, 0xdf, 0x7d, + 0xf5, 0xff, 0xfb, 0xf2, 0x4f, 0x35, 0x38, 0xb4, 0x89, 0xf7, 0x10, 0x3a, 0x9a, 0xe0, 0x5f, 0x04, 0x39, 0x6a, 0x36, + 0x2f, 0x8f, 0x26, 0xf8, 0x27, 0x41, 0x8e, 0xe0, 0xef, 0x9d, 0x26, 0x6f, 0xd9, 0xe4, 0xe9, 0xed, 0x3c, 0xfe, 0xeb, + 0x72, 0x75, 0x6f, 0xf9, 0x95, 0xaf, 0xa1, 0xdd, 0xfe, 0x7f, 0xff, 0xf9, 0xa7, 0x8a, 0x7e, 0xbc, 0x24, 0x47, 0x83, + 0x06, 0x8a, 0x4d, 0xf2, 0x21, 0xb1, 0x7f, 0xe2, 0x5e, 0xda, 0xff, 0x6f, 0x37, 0x94, 0xe8, 0xc7, 0x3f, 0xff, 0xba, + 0xb8, 0x24, 0x83, 0x55, 0x1c, 0xad, 0x7e, 0x44, 0x2b, 0x84, 0x56, 0xf7, 0xd0, 0x5f, 0x38, 0x9a, 0x44, 0x08, 0xff, + 0x26, 0xc8, 0xd1, 0x8f, 0x47, 0x13, 0xfc, 0x49, 0x90, 0xa3, 0xe8, 0x68, 0x82, 0xdf, 0x4b, 0x72, 0xf4, 0xdf, 0x71, + 0x2f, 0xb5, 0x4a, 0xb8, 0x95, 0x51, 0x7f, 0xac, 0xe0, 0x26, 0x84, 0x16, 0x8c, 0xae, 0x34, 0xd7, 0x39, 0x43, 0xf7, + 0x8e, 0x38, 0x7e, 0x24, 0x01, 0x58, 0xb1, 0x06, 0x25, 0x8d, 0xb9, 0x84, 0x5d, 0x5e, 0xc3, 0xc2, 0x03, 0x06, 0xdd, + 0x4b, 0x39, 0xb6, 0x7a, 0x02, 0x95, 0x6a, 0x7b, 0x7b, 0xab, 0xe0, 0xfa, 0x16, 0x3f, 0x26, 0x8f, 0x64, 0xdc, 0x46, + 0x98, 0x53, 0xf8, 0xd1, 0x41, 0xf8, 0x83, 0x76, 0x17, 0x9e, 0xb0, 0xcd, 0x2d, 0x86, 0x09, 0x69, 0xf9, 0x99, 0x08, + 0xe1, 0x97, 0x3b, 0x32, 0xf5, 0x14, 0xd4, 0x0f, 0x08, 0xff, 0x5c, 0xbb, 0x1e, 0xc5, 0x8f, 0x35, 0x29, 0x91, 0xe3, + 0x5d, 0xc1, 0xd8, 0x07, 0x9a, 0x7f, 0x66, 0x45, 0xfc, 0x54, 0xe3, 0x76, 0xe7, 0x01, 0x36, 0xaa, 0xea, 0xfd, 0x36, + 0xea, 0x96, 0xb7, 0x5b, 0xcf, 0xa5, 0xbd, 0x4f, 0x80, 0x53, 0xb8, 0xae, 0xaf, 0x81, 0xb5, 0xdf, 0xe7, 0x5b, 0x4a, + 0xad, 0x82, 0xde, 0x44, 0xa8, 0x7e, 0x95, 0xca, 0xc5, 0x17, 0x9a, 0xf3, 0xd1, 0x9e, 0x66, 0xb3, 0x79, 0x4e, 0x35, + 0xdb, 0x73, 0x73, 0xde, 0xa3, 0xd0, 0x50, 0x54, 0xf2, 0x14, 0x7f, 0x88, 0x6a, 0xd3, 0xfe, 0x21, 0x92, 0x6a, 0xef, + 0xc4, 0x70, 0x9f, 0xe5, 0xf8, 0x12, 0x41, 0xcb, 0xeb, 0xb2, 0xcd, 0x1b, 0xc1, 0x66, 0x1b, 0x94, 0x65, 0x03, 0x73, + 0x7e, 0x2b, 0x0c, 0xf7, 0x9b, 0x84, 0x74, 0x7a, 0xd1, 0x85, 0xfa, 0x32, 0xb9, 0x8c, 0xe0, 0x26, 0xa7, 0x20, 0x82, + 0x19, 0xe5, 0x11, 0x94, 0xa0, 0xa4, 0xd5, 0xa5, 0x17, 0xac, 0x4b, 0x1b, 0x0d, 0xcf, 0x66, 0x67, 0x84, 0xf7, 0xa9, + 0xad, 0x9f, 0xe3, 0x29, 0x1e, 0x91, 0x66, 0x1b, 0x2f, 0x48, 0xcb, 0x54, 0xe9, 0x2e, 0x2e, 0x32, 0xd7, 0xcf, 0xc1, + 0x41, 0x5c, 0x24, 0x39, 0x55, 0xfa, 0x05, 0x68, 0x04, 0xc8, 0x02, 0x4f, 0x49, 0x91, 0xb0, 0x5b, 0x96, 0xc5, 0x19, + 0xc2, 0x53, 0x47, 0x83, 0x50, 0x17, 0x2d, 0x48, 0x50, 0x0c, 0xe4, 0x0c, 0x22, 0x58, 0x6f, 0xda, 0x6f, 0x0f, 0x08, + 0x21, 0xd1, 0x7e, 0xb3, 0x19, 0xf5, 0x0a, 0xf2, 0x8b, 0x48, 0x21, 0x25, 0x60, 0xa7, 0xc9, 0x4f, 0x90, 0xd4, 0x09, + 0x92, 0xe2, 0xf7, 0x32, 0xd1, 0x4c, 0xe9, 0x18, 0x92, 0x41, 0x49, 0xa0, 0x3c, 0x86, 0x47, 0x17, 0x47, 0x51, 0x03, + 0x52, 0x0d, 0x8a, 0x22, 0x5c, 0x90, 0x3b, 0x8d, 0xd2, 0x69, 0xff, 0x78, 0x10, 0x9e, 0x11, 0x36, 0x15, 0xfa, 0xbf, + 0xd3, 0xbd, 0x69, 0xbf, 0x65, 0xfa, 0xbf, 0x8c, 0x7a, 0x71, 0x41, 0x94, 0x65, 0xe3, 0x7a, 0x2a, 0x15, 0xcc, 0xcc, + 0x17, 0xa5, 0x6e, 0x80, 0xae, 0xef, 0x11, 0x69, 0x76, 0xd2, 0x78, 0x14, 0xce, 0xa4, 0x09, 0x1d, 0x3a, 0x50, 0xe0, + 0x9c, 0x40, 0x79, 0x5c, 0x10, 0xe8, 0xb4, 0xaa, 0x76, 0xa7, 0x53, 0x97, 0xf0, 0x63, 0xf4, 0x63, 0xef, 0x93, 0x48, + 0x7f, 0x13, 0x76, 0x04, 0x9f, 0xc4, 0x6a, 0x05, 0x7f, 0x7f, 0x13, 0x3d, 0x18, 0x96, 0x49, 0xfb, 0xc5, 0xa5, 0xfd, + 0x04, 0x69, 0x82, 0xa5, 0x66, 0xc0, 0x58, 0x95, 0xfc, 0x98, 0x5d, 0x9c, 0x31, 0xb1, 0x33, 0x38, 0x38, 0xe0, 0x7d, + 0xda, 0x68, 0x0f, 0xe0, 0x46, 0xa0, 0xd0, 0xea, 0x03, 0xd7, 0xd3, 0x38, 0x3a, 0xba, 0x8c, 0x50, 0x2f, 0xda, 0x83, + 0x55, 0xee, 0xca, 0x06, 0x71, 0xb0, 0xce, 0x1a, 0x9a, 0xa6, 0xa3, 0x4b, 0xd2, 0xea, 0xc5, 0xc2, 0x12, 0xf9, 0x1c, + 0xe1, 0xcc, 0xd1, 0xd4, 0x16, 0x1e, 0xa1, 0x86, 0x10, 0x0d, 0xff, 0x3d, 0x42, 0x8d, 0xa9, 0x6e, 0x8c, 0x51, 0x9a, + 0xc1, 0xdf, 0x78, 0x44, 0x08, 0x69, 0x76, 0xca, 0x8a, 0xfe, 0xb0, 0xa4, 0x28, 0x1d, 0x7b, 0xf5, 0x68, 0xdf, 0x6c, + 0x0e, 0xd9, 0x88, 0x79, 0x9f, 0x0d, 0x56, 0xab, 0xe8, 0xa2, 0x77, 0x19, 0xa1, 0x46, 0xec, 0xd1, 0xee, 0xc8, 0xe3, + 0x1d, 0x42, 0x58, 0x0c, 0xd6, 0xee, 0x06, 0xea, 0x86, 0xd5, 0x6e, 0x9b, 0x96, 0xd5, 0xfe, 0x0f, 0xc8, 0x02, 0x5b, + 0x97, 0x72, 0x8f, 0xe5, 0x6f, 0xe7, 0x30, 0x55, 0x8f, 0xdb, 0x92, 0xb4, 0x70, 0x41, 0xbc, 0xba, 0x9b, 0x12, 0x5d, + 0xe1, 0x7f, 0x46, 0xaa, 0xe2, 0xb8, 0x9f, 0xe3, 0xe9, 0x80, 0x08, 0x6a, 0xe4, 0x97, 0xae, 0x57, 0xa6, 0xb3, 0x9c, + 0xdc, 0xb0, 0x8d, 0xfb, 0xdf, 0x1c, 0xee, 0x64, 0x1e, 0xeb, 0x24, 0x5b, 0x14, 0x05, 0x13, 0xfa, 0x95, 0x1c, 0x39, + 0xc6, 0x8e, 0xe5, 0x20, 0x5b, 0xc1, 0xc5, 0x2e, 0x06, 0xae, 0xae, 0xe3, 0x77, 0xca, 0x68, 0x2b, 0x7b, 0x41, 0x46, + 0x96, 0xe1, 0x32, 0xd7, 0xbd, 0xdd, 0x85, 0x13, 0xa5, 0x63, 0x84, 0x47, 0xee, 0x1e, 0x38, 0x4e, 0x92, 0x64, 0x91, + 0x64, 0x90, 0x0d, 0x1d, 0x28, 0xb4, 0x36, 0xfb, 0x2a, 0x56, 0xe4, 0xb1, 0x4e, 0x04, 0xbb, 0x35, 0xdd, 0xc6, 0xa8, + 0x3a, 0xc4, 0xfd, 0x7e, 0xbb, 0xa0, 0x5d, 0x43, 0x80, 0x54, 0x22, 0xe4, 0x88, 0x01, 0x84, 0xe0, 0xee, 0xdf, 0x25, + 0x4d, 0xa9, 0x0a, 0x6f, 0xb6, 0xaa, 0x01, 0xf6, 0x43, 0x95, 0xf7, 0x02, 0xf4, 0xc4, 0x86, 0x3d, 0x2b, 0x0b, 0x5b, + 0xe5, 0x39, 0x42, 0x7c, 0x1c, 0x2f, 0x12, 0xb8, 0x11, 0x34, 0x98, 0x24, 0x04, 0x5a, 0xad, 0x16, 0x21, 0x6e, 0x4d, + 0x2b, 0xc5, 0xf4, 0x98, 0x4c, 0xfb, 0x45, 0xa3, 0x61, 0x94, 0xd7, 0x23, 0x8b, 0x17, 0x0b, 0x84, 0xc7, 0xe5, 0x5e, + 0xf3, 0xe5, 0xe6, 0xa4, 0xde, 0x55, 0x3c, 0xae, 0x2b, 0x81, 0x1b, 0x42, 0x20, 0xa3, 0x5f, 0xd4, 0xd0, 0x3a, 0x9e, + 0x90, 0xa3, 0xb8, 0x9f, 0xf4, 0xfe, 0xe7, 0x00, 0xf5, 0xe2, 0xe4, 0x10, 0x1d, 0x59, 0x5a, 0x32, 0x46, 0xdd, 0xcc, + 0xf6, 0xb1, 0x34, 0xb7, 0x9f, 0x6d, 0x6c, 0x14, 0x90, 0xa9, 0xc4, 0x82, 0xce, 0x58, 0x3a, 0x81, 0x5d, 0xef, 0x91, + 0x67, 0x8e, 0x01, 0x99, 0xd2, 0x89, 0xa3, 0x2d, 0x49, 0xd4, 0x93, 0xb4, 0xfc, 0xea, 0x45, 0x3d, 0x5a, 0x7d, 0xfd, + 0xcf, 0xa8, 0x97, 0xd1, 0xf4, 0x31, 0x5f, 0x3b, 0x25, 0x79, 0xad, 0x8f, 0x33, 0xdf, 0xc7, 0xda, 0x2e, 0x4e, 0x00, + 0xbc, 0x11, 0xda, 0xd6, 0x8e, 0x2c, 0xd0, 0x9a, 0x8f, 0x4b, 0xea, 0xa4, 0x12, 0x4d, 0x27, 0x00, 0xd5, 0x60, 0x11, + 0x54, 0x68, 0x1b, 0x10, 0x4c, 0x19, 0xb0, 0xc5, 0x23, 0x2d, 0x40, 0x73, 0x71, 0xd9, 0x42, 0xcb, 0x5a, 0x61, 0xc7, + 0x59, 0xd5, 0xef, 0xe2, 0x4b, 0xe2, 0x3d, 0x06, 0xaa, 0x7c, 0xb1, 0xe8, 0x8e, 0x1b, 0x0d, 0xa4, 0x3c, 0x7e, 0x8d, + 0xfa, 0xe3, 0x01, 0xbe, 0x05, 0x14, 0xc2, 0x35, 0x8c, 0xc2, 0xb5, 0x39, 0x76, 0xdc, 0x1c, 0x1b, 0x0d, 0xb9, 0x46, + 0xdd, 0xa0, 0xf2, 0xc2, 0x55, 0x5e, 0xaf, 0x2d, 0x64, 0x36, 0x31, 0xee, 0x1c, 0x99, 0x14, 0x30, 0x04, 0x23, 0x84, + 0xbc, 0x92, 0x68, 0x67, 0xb3, 0xd0, 0x28, 0x54, 0x37, 0xbb, 0x17, 0x28, 0xaa, 0x3d, 0x3d, 0x62, 0x80, 0x05, 0x54, + 0x2d, 0xd5, 0xc8, 0x53, 0x8d, 0x47, 0x8d, 0xb6, 0x41, 0xf7, 0x66, 0xbb, 0x5b, 0x6f, 0xec, 0x7e, 0xd5, 0x18, 0x1e, + 0x35, 0xc8, 0xb4, 0xda, 0xe1, 0x6b, 0xd9, 0x68, 0xac, 0xeb, 0xf7, 0xa5, 0x7e, 0x13, 0xd7, 0xee, 0x2f, 0x9e, 0x6e, + 0x99, 0x78, 0xf8, 0xd3, 0xb7, 0x3a, 0x6f, 0x45, 0xc2, 0x85, 0x60, 0x05, 0x9c, 0xb0, 0x44, 0x63, 0xb1, 0x5e, 0x97, + 0xa7, 0xfe, 0xef, 0xda, 0xda, 0x8c, 0x11, 0x0e, 0x74, 0xc8, 0x48, 0x6d, 0x58, 0xe2, 0x02, 0x53, 0x43, 0x45, 0x08, + 0x21, 0x1f, 0xb4, 0x37, 0x8f, 0xd1, 0x86, 0x24, 0x65, 0x24, 0x38, 0xbb, 0x63, 0x45, 0x58, 0x72, 0x7d, 0xef, 0xb1, + 0xfc, 0xae, 0x48, 0xd7, 0x17, 0x83, 0xd4, 0x14, 0xcb, 0x1d, 0x21, 0xcb, 0xc9, 0x17, 0x90, 0x73, 0xca, 0x0b, 0x96, + 0xc4, 0x10, 0xc4, 0x27, 0xbc, 0x60, 0x86, 0x71, 0xbf, 0xe7, 0xe5, 0xc6, 0xac, 0xce, 0x69, 0x66, 0xa1, 0xf6, 0x07, + 0xa0, 0x99, 0x83, 0x72, 0x48, 0x92, 0xad, 0x62, 0xd7, 0xf7, 0x1e, 0xbe, 0xde, 0x25, 0x43, 0xaf, 0x56, 0x4e, 0x7a, + 0xce, 0x80, 0xf5, 0xc1, 0x79, 0x35, 0xd4, 0xcc, 0xfd, 0x48, 0xe3, 0xcc, 0x30, 0x51, 0x79, 0xcc, 0x01, 0x99, 0xae, + 0xef, 0x3d, 0x7c, 0x17, 0x73, 0xa3, 0x9b, 0x42, 0x38, 0x9c, 0x77, 0x5c, 0x90, 0x98, 0x12, 0x86, 0xec, 0xe4, 0x4b, + 0x3a, 0x56, 0x04, 0xa7, 0x7b, 0x4a, 0x4d, 0x26, 0x88, 0x1d, 0x7d, 0x31, 0x20, 0x99, 0x03, 0x01, 0xc9, 0x10, 0xce, + 0x6a, 0x72, 0x1d, 0x31, 0x6b, 0x60, 0x3a, 0xbb, 0x82, 0xc5, 0x48, 0x2c, 0x7b, 0x88, 0x70, 0x66, 0xba, 0xd5, 0x6b, + 0x7b, 0x9c, 0x28, 0xba, 0x69, 0xe8, 0x56, 0xc9, 0xb3, 0xef, 0x41, 0xf0, 0xf2, 0x1f, 0xaf, 0x5c, 0xdb, 0x65, 0xc2, + 0x13, 0x6f, 0x91, 0x76, 0x7d, 0xef, 0xe1, 0xaf, 0xce, 0x28, 0x6d, 0x4e, 0x3d, 0xf9, 0xdf, 0x92, 0x51, 0x1f, 0xfe, + 0x9a, 0x54, 0xb9, 0xa6, 0xf0, 0xf5, 0xbd, 0x87, 0xbf, 0xef, 0x2a, 0x06, 0xe9, 0xeb, 0x45, 0xa5, 0x24, 0x30, 0xe3, + 0x5b, 0xb2, 0x3c, 0x5d, 0xba, 0xb3, 0x22, 0x15, 0x6b, 0x6c, 0x4e, 0xa8, 0x54, 0xad, 0x4b, 0xdd, 0xca, 0x13, 0x2c, + 0x89, 0xb9, 0x4a, 0xaa, 0x2f, 0x9b, 0x43, 0x63, 0x2e, 0xc5, 0x55, 0x26, 0xe7, 0xec, 0x1b, 0xf7, 0x4b, 0x4f, 0x35, + 0x4a, 0xf8, 0x0c, 0x0c, 0x71, 0xcc, 0xd8, 0x05, 0xde, 0x6f, 0xa1, 0xee, 0xc6, 0x79, 0x26, 0x0d, 0xa2, 0x16, 0xf5, + 0xc3, 0x06, 0x53, 0xd2, 0xc2, 0x19, 0x69, 0xe1, 0x9c, 0xa8, 0x7e, 0xcb, 0x9e, 0x18, 0xdd, 0xbc, 0x6c, 0xda, 0x9e, + 0x3b, 0xb0, 0xdd, 0x73, 0xbb, 0x6f, 0xed, 0xa1, 0x3c, 0xed, 0xe6, 0x46, 0x7f, 0x69, 0x0e, 0xfa, 0xa9, 0x41, 0x8d, + 0x27, 0x2c, 0x2e, 0x70, 0x61, 0x5a, 0xbe, 0xe2, 0xc3, 0x1c, 0xec, 0x54, 0x60, 0x66, 0x58, 0xa3, 0xb4, 0x2c, 0xdb, + 0x76, 0x65, 0xf3, 0xc4, 0xac, 0x55, 0x81, 0xf3, 0x04, 0x48, 0x39, 0xce, 0x9d, 0x5d, 0x8f, 0xda, 0xae, 0x72, 0x76, + 0x70, 0x10, 0xbb, 0x4a, 0x34, 0x2e, 0x7c, 0x7e, 0x75, 0x03, 0xf8, 0xde, 0x52, 0x8d, 0x29, 0x32, 0x13, 0x68, 0x34, + 0xb2, 0xc1, 0x9a, 0xee, 0x13, 0x12, 0xe7, 0x75, 0x28, 0xfa, 0xd1, 0x1b, 0x66, 0x70, 0x03, 0x00, 0x8d, 0x46, 0x79, + 0xdd, 0xbb, 0x01, 0xb1, 0xa7, 0x1a, 0xcb, 0xf5, 0x97, 0xb8, 0xb4, 0x26, 0x6a, 0x6d, 0xd9, 0x61, 0xf9, 0x51, 0x20, + 0x11, 0xe2, 0xae, 0xf0, 0xf3, 0x09, 0xb6, 0x86, 0x80, 0x72, 0x2f, 0x9c, 0x0d, 0x04, 0x36, 0x56, 0x5b, 0xae, 0x90, + 0x27, 0x6d, 0x1d, 0x94, 0xfa, 0x42, 0x70, 0xc1, 0x05, 0x85, 0x1a, 0x6b, 0x87, 0xe5, 0x4f, 0xd8, 0xb6, 0x39, 0x27, + 0x56, 0xc8, 0x69, 0xcb, 0xcc, 0x30, 0x0c, 0xc0, 0x3a, 0x25, 0x60, 0x9e, 0x93, 0x97, 0xdf, 0x46, 0xfd, 0x87, 0x01, + 0xea, 0x3f, 0x22, 0x2c, 0xd8, 0x06, 0x56, 0x57, 0x92, 0x48, 0xa7, 0xa0, 0x50, 0x3e, 0xeb, 0xf1, 0x9c, 0x80, 0x36, + 0xae, 0x0e, 0xd5, 0xda, 0x15, 0xe5, 0x37, 0x28, 0x4b, 0xb8, 0x53, 0x8c, 0x3e, 0x13, 0xfb, 0xfb, 0xe4, 0xb8, 0xba, + 0xa0, 0x83, 0xae, 0x77, 0x29, 0x07, 0x43, 0x52, 0xf8, 0xf0, 0xf7, 0xef, 0xdf, 0xad, 0x3e, 0x9e, 0x6f, 0xef, 0xe0, + 0xc0, 0xac, 0x14, 0x66, 0x1d, 0x6c, 0xe0, 0xba, 0x91, 0x29, 0xf4, 0x5f, 0xde, 0x89, 0xd7, 0xa9, 0xd0, 0xc6, 0x66, + 0xf4, 0xc7, 0x21, 0x8c, 0xb6, 0xdd, 0x36, 0x25, 0x58, 0xd0, 0x2c, 0xd0, 0x25, 0x6b, 0xdc, 0x4a, 0x8b, 0x6f, 0x90, + 0x91, 0x87, 0xa6, 0x00, 0x13, 0xa3, 0xdd, 0xd9, 0x8f, 0xd6, 0x0e, 0x4f, 0xec, 0xd0, 0xd0, 0xd2, 0x10, 0x42, 0x8b, + 0xf7, 0x80, 0x39, 0xf6, 0x88, 0x00, 0x10, 0xbd, 0x34, 0x90, 0xaa, 0x40, 0x16, 0x45, 0x95, 0x22, 0xff, 0xf9, 0x3e, + 0x21, 0x2f, 0x2b, 0x45, 0xe6, 0xdb, 0xca, 0x98, 0x0b, 0x10, 0x03, 0xa5, 0x70, 0x91, 0x50, 0x26, 0xd8, 0xcb, 0xd0, + 0x0f, 0xda, 0x97, 0x37, 0xd2, 0x66, 0x52, 0x71, 0xe3, 0xc1, 0x4d, 0xa9, 0x51, 0xf1, 0xd9, 0x7c, 0x0f, 0x89, 0x8d, + 0xdc, 0x7b, 0x90, 0xcb, 0xa8, 0x19, 0x24, 0x7c, 0xbf, 0x33, 0xa5, 0x7d, 0xbb, 0xeb, 0xcf, 0x9b, 0x16, 0x31, 0x1b, + 0xeb, 0x92, 0x70, 0xa1, 0x58, 0xa1, 0x1f, 0xb1, 0xb1, 0x2c, 0xe0, 0xfe, 0xa3, 0x04, 0x0b, 0x5a, 0xdf, 0x0b, 0x74, + 0x80, 0x66, 0x82, 0xc1, 0xa5, 0xc3, 0xc6, 0x0c, 0xcd, 0xaf, 0xcf, 0xe6, 0x0e, 0xfc, 0x7a, 0xb3, 0xd6, 0xcb, 0x83, + 0x83, 0x2f, 0xac, 0x02, 0x94, 0x1b, 0xa6, 0x19, 0x46, 0x40, 0xbc, 0x2c, 0x97, 0xe3, 0x6e, 0x86, 0xef, 0xc5, 0x95, + 0xca, 0xc0, 0x13, 0x8e, 0x90, 0x08, 0x3d, 0x27, 0x7a, 0x3d, 0xd9, 0xa4, 0xf7, 0x4e, 0x9b, 0x21, 0x42, 0xb1, 0x06, + 0xc8, 0x3d, 0xc8, 0xe5, 0x56, 0xc9, 0xa4, 0x2a, 0x5b, 0xdb, 0x72, 0x10, 0x8f, 0x01, 0x5c, 0xb1, 0x11, 0x52, 0x02, + 0x34, 0xdc, 0x2d, 0xb4, 0x3c, 0x97, 0xc0, 0xfe, 0x63, 0x95, 0x80, 0x48, 0x8b, 0x6a, 0x1b, 0x17, 0x21, 0x6c, 0x4d, + 0x7d, 0x02, 0xe3, 0x84, 0x87, 0xcf, 0x77, 0x69, 0xa8, 0x3d, 0x6a, 0x33, 0x73, 0x06, 0x41, 0x09, 0x89, 0xca, 0x0a, + 0xc9, 0x97, 0x58, 0x38, 0x6e, 0xce, 0xdf, 0xc3, 0x01, 0x29, 0x56, 0x34, 0xb6, 0x77, 0x5b, 0x70, 0x7c, 0x14, 0xc9, + 0x22, 0xae, 0x75, 0xdd, 0x2d, 0x4c, 0x35, 0xec, 0x40, 0x47, 0x43, 0x38, 0x15, 0xe6, 0x9e, 0xf0, 0x71, 0x45, 0x52, + 0x7f, 0xb6, 0x26, 0xda, 0xda, 0x13, 0xc3, 0xca, 0x34, 0x25, 0x98, 0xff, 0xcf, 0xd6, 0xea, 0xba, 0x2c, 0x84, 0x99, + 0x19, 0xc6, 0x8d, 0x5d, 0x05, 0xb6, 0x06, 0x1c, 0x5b, 0xfe, 0x2d, 0x83, 0x45, 0xf5, 0x4a, 0x71, 0xd3, 0x69, 0xc0, + 0x04, 0xbc, 0x05, 0xeb, 0x99, 0xcd, 0xad, 0xff, 0xdc, 0x1c, 0x8c, 0x02, 0xab, 0x1a, 0x81, 0x97, 0x86, 0xc0, 0x23, + 0x60, 0xdc, 0xbc, 0x69, 0x79, 0xcf, 0x19, 0xd1, 0x08, 0x7f, 0xe2, 0x39, 0x3c, 0xb3, 0x2c, 0xf7, 0xd6, 0xc7, 0xc6, + 0x8a, 0xa4, 0x82, 0x80, 0x6d, 0x11, 0x76, 0x44, 0x5e, 0x22, 0xac, 0x1a, 0x8d, 0xae, 0xba, 0x60, 0x95, 0x56, 0xa5, + 0x1a, 0xa6, 0x80, 0x5b, 0x62, 0xc0, 0xfb, 0xda, 0x89, 0x0a, 0x86, 0x04, 0xde, 0xfa, 0x5b, 0x81, 0xfa, 0xfe, 0xe1, + 0xdb, 0x38, 0xa4, 0x6f, 0x61, 0xd9, 0xf2, 0x22, 0x16, 0xa6, 0x14, 0x57, 0x77, 0x38, 0x6f, 0xbe, 0x6f, 0x36, 0x02, + 0xe3, 0xde, 0x6f, 0x63, 0xb0, 0x71, 0x43, 0x5d, 0x6d, 0x49, 0x43, 0xb9, 0x09, 0xbb, 0xa8, 0xb2, 0x77, 0x0c, 0x3b, + 0xeb, 0xea, 0x4a, 0xda, 0xd5, 0x44, 0xad, 0xd7, 0x8a, 0x55, 0x46, 0x03, 0x1b, 0x86, 0x9d, 0xe6, 0x98, 0xd9, 0x56, + 0xe0, 0x3f, 0x9e, 0x13, 0x8d, 0x03, 0x64, 0x7d, 0xf3, 0xad, 0xeb, 0x94, 0x6a, 0x98, 0xb0, 0xbd, 0xdd, 0xf9, 0xf8, + 0x98, 0xef, 0x3a, 0x1f, 0xb1, 0x74, 0x5b, 0xdf, 0x9c, 0x8d, 0xed, 0x7f, 0xe3, 0x6c, 0x74, 0x6a, 0x7b, 0x7f, 0x3c, + 0x02, 0x77, 0x52, 0x3b, 0x1e, 0xeb, 0x6b, 0x4a, 0x24, 0x16, 0x6e, 0x39, 0x2e, 0x3b, 0xab, 0x95, 0xe8, 0xb7, 0x40, + 0xed, 0x14, 0x45, 0xf0, 0xb3, 0x6d, 0x7f, 0x06, 0x24, 0xd9, 0xea, 0x90, 0x63, 0x51, 0x8a, 0x32, 0x28, 0x01, 0x03, + 0xea, 0xd8, 0xd8, 0x7a, 0x19, 0xc4, 0x76, 0x38, 0xe4, 0xb0, 0x9c, 0x88, 0xf2, 0xea, 0x0a, 0x46, 0x6c, 0x8e, 0x0d, + 0x27, 0x60, 0xc6, 0x3b, 0xad, 0x0a, 0xbd, 0xf8, 0xf9, 0xaf, 0x99, 0xd3, 0xda, 0x11, 0x63, 0x39, 0x89, 0x9a, 0x15, + 0x83, 0x1b, 0x81, 0x63, 0x18, 0xf7, 0x8d, 0x84, 0x5a, 0x9d, 0xea, 0xa8, 0x76, 0x24, 0xe1, 0x16, 0xa8, 0xdd, 0xf6, + 0xcd, 0xb9, 0xb4, 0x5a, 0xed, 0x3c, 0x58, 0x70, 0x11, 0xe0, 0xf6, 0x73, 0xa2, 0x6b, 0x24, 0x85, 0x12, 0x27, 0x41, + 0xe1, 0xdc, 0xa0, 0xaa, 0x26, 0xb2, 0xdf, 0x1a, 0x00, 0x4f, 0xda, 0xcd, 0x2e, 0x64, 0x25, 0x24, 0x67, 0x8d, 0x06, + 0xca, 0xcb, 0x8e, 0x69, 0x5f, 0x34, 0xb2, 0x01, 0x66, 0x38, 0xb3, 0x02, 0x0b, 0x9c, 0x5e, 0x71, 0x5e, 0x75, 0xdd, + 0xcf, 0x06, 0x08, 0x17, 0xab, 0x55, 0x6c, 0x87, 0x96, 0xa3, 0xd5, 0x2a, 0x0f, 0x87, 0x66, 0xf2, 0xa1, 0xe2, 0xcb, + 0x9e, 0x26, 0x2f, 0xcd, 0x79, 0xf8, 0x12, 0x06, 0xd9, 0x20, 0x71, 0xee, 0x54, 0x82, 0x39, 0x68, 0xae, 0x1a, 0xb2, + 0x9f, 0x35, 0xda, 0x83, 0x80, 0x86, 0xf5, 0xb3, 0x01, 0xc9, 0xd7, 0x60, 0x39, 0xab, 0xdc, 0x81, 0xf9, 0x37, 0x1c, + 0x6c, 0x7f, 0x9b, 0x73, 0xc6, 0x36, 0x18, 0xae, 0xc9, 0xa6, 0xca, 0xa0, 0xc4, 0x2b, 0xb7, 0xb8, 0xbe, 0x5c, 0xcd, + 0xc0, 0xa2, 0x2c, 0x84, 0xdd, 0x35, 0x73, 0x0f, 0x84, 0xff, 0x12, 0xdb, 0x25, 0x2d, 0x8d, 0xb8, 0x37, 0x10, 0xdf, + 0xdb, 0x6e, 0x27, 0x49, 0x42, 0x8b, 0x89, 0xb9, 0x12, 0xf1, 0x37, 0xbc, 0x66, 0x0f, 0x1c, 0xbb, 0x71, 0x06, 0x3d, + 0xf7, 0xcb, 0xce, 0x06, 0xc4, 0x8e, 0xdf, 0x33, 0x3b, 0xde, 0x71, 0xa5, 0xa0, 0xbb, 0x75, 0x11, 0x76, 0x30, 0xf4, + 0x7f, 0x79, 0x30, 0x27, 0x6e, 0x30, 0x16, 0x4d, 0x36, 0xe0, 0xf6, 0x0d, 0x78, 0x14, 0x74, 0x03, 0x6e, 0xdf, 0x86, + 0xaf, 0x87, 0x56, 0xf6, 0xcd, 0x01, 0x06, 0x64, 0xc2, 0x8e, 0xb4, 0x4a, 0x08, 0x86, 0x79, 0xba, 0xc9, 0x91, 0x59, + 0xb2, 0x0a, 0x87, 0xab, 0x26, 0xb1, 0xd8, 0xd8, 0x0b, 0x15, 0x93, 0x1a, 0x08, 0xc6, 0x22, 0x7d, 0x89, 0x42, 0xa5, + 0x41, 0xdd, 0x38, 0x06, 0xb0, 0xca, 0x69, 0xeb, 0x5f, 0x1e, 0x1c, 0x80, 0xd0, 0x00, 0xac, 0x5d, 0x92, 0xd1, 0xb9, + 0x5e, 0x14, 0xc0, 0x5f, 0x29, 0xff, 0x1b, 0x92, 0xc1, 0xed, 0xc4, 0xa4, 0xc1, 0x0f, 0x48, 0x98, 0x53, 0xa5, 0xf8, + 0x17, 0x9b, 0xe6, 0x7e, 0xe3, 0x82, 0x78, 0x8c, 0x56, 0x96, 0x53, 0x94, 0xa8, 0x2b, 0x1d, 0xba, 0xd6, 0x21, 0xf7, + 0xf4, 0x0b, 0x13, 0xfa, 0x25, 0x57, 0x9a, 0x09, 0x00, 0x40, 0x85, 0x78, 0x30, 0x25, 0x85, 0x60, 0xeb, 0xd6, 0x6a, + 0xd1, 0xd1, 0xe8, 0xbb, 0x55, 0x74, 0x9d, 0x2d, 0x9a, 0x52, 0x31, 0xca, 0x6d, 0x27, 0xa1, 0xcd, 0xa4, 0xb7, 0x13, + 0x2d, 0x4b, 0x86, 0x16, 0x3b, 0x15, 0xfb, 0x61, 0x68, 0x7d, 0x2c, 0x88, 0x3f, 0x17, 0xfc, 0x59, 0xfa, 0x5d, 0x3e, + 0x06, 0xae, 0xd4, 0xbf, 0xb1, 0x0a, 0xe1, 0x4c, 0xb0, 0x0e, 0xc8, 0x6b, 0x52, 0x1f, 0xa7, 0x47, 0x9d, 0x7c, 0x4b, + 0xb9, 0x50, 0x1a, 0x85, 0x6d, 0x9c, 0x14, 0x06, 0x53, 0xce, 0xbe, 0x2d, 0x71, 0xfd, 0xea, 0x8f, 0x11, 0x7f, 0x74, + 0x88, 0x7f, 0x97, 0x4a, 0xa3, 0x65, 0x89, 0x60, 0xc8, 0xef, 0x48, 0xad, 0xe0, 0x2a, 0x36, 0xe7, 0xfa, 0xb9, 0x9e, + 0xe5, 0x1b, 0x9e, 0x38, 0x5d, 0xad, 0x4a, 0xa9, 0x40, 0xc5, 0x37, 0x0c, 0x3f, 0x61, 0x70, 0x6f, 0xfc, 0x8c, 0x07, + 0x55, 0xb6, 0xef, 0x8b, 0x9f, 0x05, 0xf7, 0xc5, 0xcf, 0x78, 0xba, 0x5d, 0x34, 0xb8, 0x27, 0xee, 0x24, 0xe7, 0x49, + 0x2b, 0xf2, 0x7c, 0xd4, 0x94, 0x56, 0xfe, 0x95, 0x76, 0x6b, 0xe0, 0xca, 0x26, 0x0e, 0x8c, 0xf3, 0xea, 0x22, 0x14, + 0x73, 0xe6, 0x8c, 0x96, 0xc3, 0xff, 0xd6, 0x3a, 0xb9, 0x93, 0x47, 0x5a, 0x29, 0xe4, 0x0d, 0x2d, 0xf4, 0x3d, 0xd8, + 0x70, 0xc5, 0x96, 0x0f, 0x20, 0x25, 0xa0, 0x6c, 0xfb, 0xf7, 0xba, 0x08, 0xc4, 0x71, 0x65, 0x9d, 0x8f, 0xc2, 0xf6, + 0x49, 0x51, 0x72, 0x75, 0x75, 0x21, 0xe4, 0xd6, 0x68, 0x09, 0x10, 0xa6, 0xde, 0x35, 0x8f, 0x39, 0x9a, 0xcc, 0xd2, + 0xe5, 0xba, 0x54, 0x1d, 0x14, 0x96, 0xab, 0xe3, 0x08, 0x17, 0x6b, 0x73, 0x83, 0xfe, 0x8a, 0xe3, 0xbf, 0xb9, 0xa3, + 0x91, 0x9f, 0x4a, 0x0a, 0xf4, 0x68, 0xb7, 0xaf, 0xcd, 0x0e, 0x12, 0x69, 0xe7, 0x50, 0x5a, 0x0a, 0x00, 0x56, 0x1b, + 0x7c, 0x5d, 0x7b, 0x9c, 0x7a, 0x22, 0xdd, 0x6c, 0xbe, 0x69, 0x08, 0x8b, 0x59, 0x69, 0xc1, 0x63, 0xba, 0xd9, 0x61, + 0x39, 0xea, 0x65, 0x71, 0x5d, 0xee, 0xb1, 0x5a, 0xbf, 0xe8, 0x1b, 0xa0, 0xac, 0x0c, 0xd1, 0x56, 0xab, 0xb8, 0x0e, + 0x6f, 0x22, 0x82, 0x6b, 0x10, 0x84, 0x45, 0x60, 0xc0, 0x51, 0x63, 0xbc, 0x6d, 0x9d, 0x18, 0x6d, 0xda, 0x2f, 0x79, + 0xd6, 0xbd, 0x36, 0x8e, 0x50, 0xd1, 0x60, 0xab, 0x87, 0x9a, 0x07, 0x6c, 0x67, 0x57, 0x76, 0x14, 0x40, 0x68, 0x4a, + 0xbd, 0x71, 0x6e, 0x65, 0x45, 0xbb, 0x03, 0xbe, 0xe8, 0x3b, 0xe6, 0xb9, 0x0e, 0x74, 0xdb, 0xf9, 0x81, 0x6d, 0xd3, + 0x13, 0xf9, 0x2d, 0xdb, 0xa6, 0x1a, 0x27, 0xbc, 0xdf, 0x42, 0xdf, 0x37, 0x84, 0xb5, 0x7d, 0xed, 0x2e, 0xf2, 0xbf, + 0xd0, 0x5d, 0x1b, 0xd0, 0xd3, 0x82, 0xd9, 0xd3, 0x98, 0x0f, 0x7a, 0xbd, 0xfe, 0x54, 0xfa, 0x2f, 0x18, 0x5b, 0xa1, + 0x4f, 0x76, 0x17, 0x38, 0xb1, 0xd2, 0x38, 0x04, 0xc7, 0xaf, 0x38, 0x99, 0xe4, 0x72, 0x48, 0xf3, 0x77, 0xd0, 0x63, + 0x95, 0xfb, 0xfc, 0x6e, 0x54, 0x50, 0xcd, 0x1c, 0xad, 0xa9, 0x46, 0xf1, 0x8a, 0x07, 0xc3, 0x78, 0xc5, 0x2d, 0xe5, + 0xae, 0x5a, 0xc0, 0xcb, 0x97, 0x65, 0x13, 0xe9, 0xa7, 0x75, 0x29, 0x83, 0xa9, 0xdd, 0xbd, 0x6c, 0x92, 0x34, 0x56, + 0x92, 0x34, 0xa6, 0xe2, 0xcd, 0xa6, 0xe2, 0xf8, 0xef, 0x6f, 0x0c, 0x76, 0x9b, 0xcc, 0xfd, 0x1d, 0x90, 0xb9, 0xbf, + 0x79, 0xfa, 0xdd, 0x5a, 0x01, 0xc5, 0x3b, 0x4e, 0x8e, 0x8d, 0x65, 0x8c, 0x1d, 0xf5, 0x5b, 0x0d, 0x06, 0x0d, 0x9a, + 0x5c, 0x06, 0xde, 0x0e, 0xd5, 0xe9, 0xe5, 0xed, 0x8f, 0xe2, 0x6c, 0xa1, 0xb4, 0x9c, 0xb9, 0x46, 0x95, 0xf3, 0x71, + 0x32, 0x99, 0xa0, 0xc0, 0x36, 0x77, 0xf8, 0x69, 0xdd, 0x8d, 0x6c, 0xf9, 0x99, 0x8b, 0x51, 0xaa, 0xb0, 0x3b, 0x5b, + 0x54, 0x2a, 0xd7, 0xc4, 0x9b, 0x39, 0x6f, 0xe7, 0xe1, 0x31, 0x17, 0x5c, 0x4d, 0x59, 0x11, 0x17, 0x68, 0xf9, 0xad, + 0xce, 0x0a, 0xb8, 0xcd, 0xb1, 0x9d, 0xe1, 0x51, 0x69, 0x39, 0xa0, 0x13, 0x68, 0x0d, 0x74, 0x46, 0x33, 0xa6, 0xa7, + 0x72, 0x04, 0x86, 0x2f, 0xc9, 0xa8, 0x74, 0xa7, 0x3a, 0x38, 0xd8, 0x8f, 0x23, 0xa3, 0xbf, 0x00, 0x1f, 0xf4, 0x30, + 0x07, 0xf5, 0x96, 0xe0, 0x18, 0x54, 0x75, 0xcd, 0xd0, 0x92, 0x6d, 0xfa, 0xd0, 0xe8, 0xe4, 0x33, 0xbb, 0xc3, 0x1c, + 0xad, 0xd7, 0xa9, 0x1d, 0x75, 0x34, 0xe6, 0x2c, 0x1f, 0x45, 0xf8, 0x33, 0xbb, 0x4b, 0x4b, 0xb7, 0x75, 0xe3, 0x65, + 0x6d, 0x16, 0x31, 0x92, 0x37, 0x22, 0xc2, 0x55, 0x27, 0xe9, 0x72, 0x8d, 0x65, 0xc1, 0x27, 0x80, 0xa3, 0xbf, 0xb0, + 0xbb, 0xd4, 0xb5, 0x17, 0xb8, 0x0a, 0xa2, 0xa5, 0x07, 0x7d, 0x12, 0x24, 0x87, 0xcb, 0xe0, 0x04, 0x8e, 0xbe, 0xa9, + 0x3b, 0x20, 0xb5, 0x72, 0x95, 0x08, 0x89, 0xd0, 0xfa, 0xdf, 0x9d, 0x0a, 0x5e, 0x84, 0xe7, 0x9c, 0xae, 0x59, 0xdc, + 0x6e, 0x54, 0x62, 0x50, 0xa1, 0xb2, 0x20, 0xf9, 0x18, 0x73, 0xbf, 0xfb, 0x9c, 0xf7, 0x43, 0xa0, 0x33, 0x5b, 0x50, + 0xd7, 0x68, 0x3a, 0x32, 0xbf, 0x50, 0x75, 0x07, 0x35, 0xd3, 0x55, 0xc5, 0xbd, 0x8f, 0x31, 0x00, 0x1e, 0xac, 0x65, + 0xa8, 0x71, 0x08, 0x5d, 0x7b, 0x33, 0xd5, 0x31, 0x25, 0xf1, 0xd2, 0xcf, 0x21, 0xe5, 0x21, 0x18, 0xf5, 0x1a, 0xd0, + 0xd0, 0x21, 0x98, 0xb5, 0x3c, 0xe4, 0xe3, 0x58, 0x6c, 0x9d, 0xa1, 0xd2, 0x9c, 0xa1, 0x49, 0x00, 0xf2, 0x6f, 0x9c, + 0x99, 0xcc, 0x40, 0xc3, 0xf0, 0x96, 0xe6, 0x00, 0x74, 0xab, 0xeb, 0x70, 0x28, 0x5c, 0xd1, 0xd2, 0x79, 0xcf, 0x2e, + 0xba, 0xac, 0x0d, 0x2b, 0x36, 0xed, 0xa0, 0x75, 0x0a, 0x53, 0x62, 0xb6, 0xc0, 0xda, 0xeb, 0x7d, 0xb8, 0xb7, 0xab, + 0x8d, 0x8b, 0xc4, 0x4f, 0x8b, 0x78, 0x98, 0xc4, 0x14, 0x2d, 0x79, 0x4c, 0xb1, 0x04, 0x3b, 0xc8, 0x62, 0x5d, 0x8e, + 0x9f, 0x85, 0xcb, 0x51, 0xb3, 0x92, 0xde, 0xed, 0x60, 0x08, 0x5c, 0xbe, 0x06, 0xdb, 0x50, 0xcc, 0x3d, 0x61, 0xe1, + 0xb1, 0xf1, 0xf4, 0x0b, 0xd6, 0x6d, 0x6e, 0x17, 0xc4, 0xaf, 0xc0, 0x98, 0xc6, 0xcb, 0x60, 0x16, 0xa1, 0x53, 0xb9, + 0x73, 0x38, 0x74, 0xd7, 0x84, 0x95, 0xf1, 0x6a, 0xac, 0xc8, 0xc6, 0xd1, 0xf3, 0x7d, 0x1b, 0xcf, 0x7f, 0x16, 0xac, + 0xb8, 0xbb, 0x62, 0x60, 0x63, 0x2d, 0xc1, 0xdd, 0xb8, 0x5a, 0x86, 0xca, 0x40, 0xbe, 0x27, 0x0d, 0xeb, 0xb2, 0xc6, + 0xdf, 0x8d, 0x8a, 0xb1, 0x36, 0xf7, 0x94, 0x81, 0xb6, 0xc6, 0x6e, 0x17, 0xf6, 0x4d, 0xd7, 0x4d, 0xd6, 0x35, 0x8a, + 0xb8, 0x0a, 0xd2, 0xee, 0x6e, 0x01, 0x17, 0xa1, 0x3f, 0x6c, 0x5f, 0x0d, 0x36, 0x55, 0x37, 0x90, 0x04, 0xd7, 0x7e, + 0xf2, 0xdb, 0x53, 0xdd, 0x65, 0xad, 0xfb, 0xed, 0xa9, 0xd6, 0x2e, 0x0b, 0x8d, 0x21, 0x11, 0x76, 0xfd, 0x94, 0xfe, + 0xd3, 0x62, 0xbd, 0x46, 0x6b, 0x18, 0xde, 0x7b, 0xde, 0x8d, 0xe3, 0xf7, 0xde, 0x42, 0x31, 0x81, 0x8b, 0xdc, 0xab, + 0x5c, 0x7a, 0x42, 0x5e, 0x8d, 0xe0, 0x3d, 0xdf, 0x1a, 0xc2, 0x7b, 0x1e, 0x38, 0xbd, 0x82, 0xd4, 0x34, 0x11, 0x6c, + 0xe4, 0xe9, 0x27, 0xb2, 0x48, 0x68, 0xf8, 0xb8, 0xd7, 0x9c, 0x70, 0xfd, 0x57, 0x0a, 0xfc, 0x17, 0x1e, 0x2e, 0xb4, + 0x96, 0x02, 0x73, 0x31, 0x5f, 0x68, 0xac, 0xcc, 0xe8, 0x97, 0x63, 0x29, 0x74, 0x73, 0x4c, 0x67, 0x3c, 0xbf, 0x4b, + 0x17, 0xbc, 0x39, 0x93, 0x42, 0xaa, 0x39, 0xcd, 0x18, 0x56, 0x77, 0x4a, 0xb3, 0x59, 0x73, 0xc1, 0xf1, 0x73, 0x96, + 0x7f, 0x61, 0x9a, 0x67, 0x14, 0xbf, 0x95, 0x43, 0xa9, 0x25, 0x7e, 0x7d, 0x7b, 0x37, 0x61, 0x02, 0xff, 0x3e, 0x5c, + 0x08, 0xbd, 0xc0, 0x8a, 0x0a, 0xd5, 0x54, 0xac, 0xe0, 0xe3, 0x6e, 0xb3, 0x39, 0x2f, 0xf8, 0x8c, 0x16, 0x77, 0xcd, + 0x4c, 0xe6, 0xb2, 0x48, 0xff, 0xab, 0x75, 0x4c, 0x1f, 0x8c, 0x4f, 0xba, 0xba, 0xa0, 0x42, 0x71, 0x58, 0x98, 0x94, + 0xe6, 0xf9, 0xde, 0xf1, 0x69, 0x6b, 0xa6, 0xf6, 0xed, 0x85, 0x1f, 0x15, 0x7a, 0xfd, 0x17, 0xfe, 0x20, 0x61, 0x94, + 0xc9, 0x50, 0x0b, 0x37, 0xc8, 0x65, 0xb6, 0x28, 0x94, 0x2c, 0xd2, 0xb9, 0xe4, 0x42, 0xb3, 0xa2, 0x3b, 0x94, 0xc5, + 0x88, 0x15, 0xcd, 0x82, 0x8e, 0xf8, 0x42, 0xa5, 0x27, 0xf3, 0xdb, 0x6e, 0xbd, 0x07, 0x9b, 0x9f, 0x0a, 0x29, 0x58, + 0x17, 0xf8, 0x8d, 0x49, 0x21, 0x17, 0x62, 0xe4, 0x86, 0xb1, 0x10, 0x8a, 0xe9, 0xee, 0x9c, 0x8e, 0xc0, 0x0e, 0x38, + 0x3d, 0x9f, 0xdf, 0x76, 0xcd, 0xac, 0x6f, 0x18, 0x9f, 0x4c, 0x75, 0x7a, 0xda, 0x6a, 0xd9, 0x6f, 0xc5, 0xbf, 0xb2, + 0xb4, 0xdd, 0x49, 0x3a, 0xa7, 0xf3, 0x5b, 0xe0, 0xe0, 0x35, 0x2b, 0x9a, 0x00, 0x0b, 0xa8, 0xd4, 0x4e, 0x5a, 0x0f, + 0x8e, 0xef, 0x43, 0x06, 0xd8, 0x38, 0x34, 0xcd, 0x84, 0xc0, 0xd8, 0x3d, 0x5d, 0xcc, 0xe7, 0xac, 0x00, 0x2f, 0xfa, + 0xee, 0x8c, 0x16, 0x13, 0x2e, 0x9a, 0x85, 0x69, 0xb4, 0x79, 0x3e, 0xbf, 0x5d, 0xc3, 0x7c, 0x52, 0x6b, 0xb6, 0xea, + 0xa6, 0xe5, 0xbe, 0x96, 0xc1, 0x10, 0x4d, 0x4c, 0x9a, 0xb4, 0x98, 0x0c, 0x69, 0xdc, 0xee, 0xdc, 0xc7, 0xfe, 0x7f, + 0x49, 0x07, 0x05, 0x60, 0x6b, 0x8e, 0x16, 0x85, 0xb9, 0x45, 0x4d, 0xdb, 0xca, 0x36, 0x3b, 0x95, 0x5f, 0x58, 0xe1, + 0x5b, 0x35, 0x1f, 0xcb, 0xad, 0x79, 0xff, 0x27, 0x8d, 0xfe, 0x85, 0x27, 0x14, 0xd6, 0xc0, 0x20, 0x47, 0xdf, 0xc8, + 0x83, 0x30, 0xd3, 0xc1, 0xf2, 0x86, 0x8f, 0xf4, 0x34, 0x6d, 0xb7, 0x5a, 0x3f, 0x54, 0x2b, 0xd6, 0x9d, 0x5a, 0xd0, + 0xb5, 0x0b, 0x36, 0xab, 0xad, 0xe3, 0x8c, 0x96, 0xd8, 0xb6, 0x9c, 0x4b, 0xb7, 0xe4, 0x05, 0xcb, 0x4d, 0x34, 0x99, + 0xb5, 0x43, 0xb9, 0xad, 0x71, 0x72, 0x31, 0x65, 0x05, 0xd7, 0xdd, 0xfa, 0x57, 0xd5, 0xf1, 0xf6, 0xea, 0xaf, 0xad, + 0x1c, 0xba, 0xb4, 0x35, 0xdc, 0xa5, 0xe7, 0x63, 0xf8, 0xd8, 0x5e, 0xfd, 0x2f, 0xb4, 0x88, 0x37, 0x10, 0x13, 0x87, + 0x35, 0xd0, 0x3a, 0x98, 0x73, 0x01, 0x26, 0x99, 0x03, 0xfc, 0x0d, 0x28, 0x64, 0x34, 0xcf, 0x62, 0x18, 0xd1, 0x5e, + 0x73, 0xef, 0xb8, 0x60, 0x33, 0xe4, 0x01, 0x91, 0xdc, 0x3f, 0x2d, 0xd8, 0x6c, 0x9d, 0x98, 0xea, 0x4b, 0x83, 0x22, + 0x34, 0xe7, 0x13, 0x91, 0x66, 0x0c, 0xd0, 0x77, 0x9d, 0x30, 0xa1, 0xb9, 0xbe, 0x6b, 0x16, 0xf2, 0x66, 0x39, 0xe2, + 0x6a, 0x9e, 0xd3, 0xbb, 0x74, 0x9c, 0xb3, 0xdb, 0xae, 0x29, 0xd5, 0xe4, 0x9a, 0xcd, 0x94, 0x2b, 0xdb, 0x85, 0xf4, + 0xe6, 0xc8, 0x9a, 0x4d, 0x00, 0xf4, 0xe4, 0xcd, 0xe6, 0xfe, 0x49, 0x8e, 0xd5, 0x1e, 0xa3, 0x8a, 0x35, 0xe5, 0x42, + 0xef, 0xb5, 0x54, 0x77, 0xc6, 0x45, 0xd3, 0x0d, 0xe4, 0xa4, 0x35, 0xbf, 0xed, 0x6e, 0x43, 0x3e, 0xe8, 0x3f, 0x61, + 0xb7, 0x73, 0x2a, 0x46, 0x6c, 0xb4, 0x0c, 0xaa, 0x75, 0xa0, 0x5e, 0x58, 0x2a, 0x15, 0x7a, 0xda, 0x34, 0xb6, 0x5e, + 0x71, 0x47, 0xa0, 0x6f, 0xa0, 0xd6, 0x83, 0x16, 0xb6, 0xff, 0x9f, 0xb4, 0x51, 0x58, 0x79, 0x0f, 0xc2, 0x2e, 0xf1, + 0xf1, 0x5d, 0x13, 0xfe, 0x2e, 0xc1, 0xb7, 0x88, 0x67, 0x34, 0x77, 0x10, 0x99, 0xf1, 0xd1, 0x28, 0xaf, 0x8d, 0xe8, + 0x32, 0xe8, 0xac, 0x8d, 0x96, 0x30, 0xff, 0xb4, 0xb5, 0xd7, 0xda, 0x33, 0x73, 0x71, 0xdb, 0xfc, 0xe4, 0xe4, 0xfe, + 0xf1, 0x03, 0xd6, 0xcd, 0xb9, 0x60, 0xb5, 0xa9, 0x7e, 0x17, 0xd4, 0x61, 0xc3, 0x1d, 0xd7, 0x70, 0x7b, 0xaf, 0xbd, + 0x77, 0xd2, 0xfa, 0xc1, 0xef, 0xd6, 0x9c, 0x8d, 0x75, 0xda, 0x3e, 0x9b, 0xdf, 0xd6, 0xb7, 0xef, 0xb9, 0x6f, 0xfa, + 0xa6, 0xa0, 0xf3, 0x54, 0x48, 0xf8, 0xd3, 0x85, 0x4d, 0x36, 0xce, 0xe5, 0x4d, 0x3a, 0xe5, 0xa3, 0x11, 0x13, 0xb6, + 0x40, 0x99, 0xc8, 0xf2, 0x9c, 0xcf, 0x15, 0xb7, 0xab, 0xe1, 0x70, 0xf7, 0x74, 0x03, 0xaa, 0xe1, 0x80, 0x8e, 0x83, + 0x01, 0x9d, 0x56, 0x03, 0xaa, 0xfa, 0x0f, 0x47, 0xd8, 0xd9, 0x98, 0xab, 0x29, 0xd5, 0xad, 0x61, 0xd2, 0xdf, 0x0b, + 0xa5, 0x01, 0xe6, 0xde, 0x48, 0xc3, 0x50, 0xf1, 0xe6, 0x90, 0xe9, 0x1b, 0xc6, 0xc4, 0xb7, 0x07, 0x71, 0x99, 0x4a, + 0x91, 0xdf, 0xd9, 0xcf, 0x65, 0xd8, 0x25, 0x5d, 0x68, 0xb9, 0x4e, 0x86, 0x5c, 0xd0, 0xe2, 0xee, 0x5a, 0x31, 0xa1, + 0x64, 0x71, 0x2d, 0xc7, 0xe3, 0xe5, 0xb7, 0x48, 0xcb, 0x7d, 0xb4, 0x4e, 0x14, 0x17, 0x93, 0x9c, 0x59, 0xa2, 0x64, + 0x10, 0xc1, 0x11, 0x73, 0xdb, 0xae, 0x69, 0xb2, 0x36, 0xe8, 0x70, 0xe7, 0x99, 0x76, 0x07, 0x69, 0xda, 0xbc, 0x61, + 0xc3, 0xcf, 0x5c, 0x5b, 0x3c, 0x6b, 0xaa, 0x1b, 0xf0, 0x78, 0x31, 0xcb, 0x30, 0x67, 0xc5, 0xd2, 0xd3, 0xf0, 0x56, + 0x8d, 0xea, 0x5c, 0x09, 0x73, 0x7a, 0x68, 0x3a, 0x6c, 0x42, 0xfc, 0x2f, 0x56, 0x94, 0x7b, 0x8c, 0x0b, 0x83, 0x31, + 0x06, 0x40, 0x9b, 0xbb, 0x24, 0x3c, 0x03, 0x4e, 0x5a, 0x2d, 0x7f, 0x3e, 0x34, 0x6d, 0x9d, 0xb4, 0x9d, 0x9c, 0xb2, + 0xd9, 0xae, 0xfd, 0x59, 0x27, 0x46, 0xed, 0xce, 0xfc, 0x76, 0xcf, 0xfc, 0xd3, 0xda, 0x6b, 0x6d, 0x13, 0x9f, 0x6d, + 0x38, 0x1d, 0x23, 0xbf, 0xb2, 0x5a, 0xce, 0xd3, 0x36, 0x9b, 0x75, 0x17, 0x0a, 0x0e, 0x1a, 0x43, 0x1b, 0xcd, 0x01, + 0xb6, 0x36, 0x33, 0x81, 0x75, 0xa4, 0x5c, 0x00, 0x5d, 0xb7, 0x67, 0x1b, 0xf4, 0xa1, 0x24, 0x18, 0x62, 0xef, 0x6c, + 0xb4, 0x3e, 0xac, 0xd6, 0x5e, 0x35, 0x30, 0xf8, 0x67, 0xfd, 0x57, 0xc5, 0x19, 0xbe, 0x60, 0x01, 0x67, 0xce, 0x1b, + 0xc9, 0xe9, 0xaa, 0xe5, 0xb8, 0xf1, 0x91, 0xae, 0x84, 0x04, 0xe3, 0xcb, 0x30, 0xa3, 0xb7, 0xd6, 0xa9, 0x61, 0xc6, + 0x05, 0x98, 0x4c, 0x21, 0xac, 0x03, 0xe3, 0xf2, 0x69, 0xd8, 0xd0, 0x48, 0xc7, 0xd0, 0xf0, 0x61, 0x27, 0x39, 0x3d, + 0x45, 0xb8, 0x85, 0x3b, 0xa7, 0xa7, 0x81, 0x34, 0x30, 0xd6, 0xbb, 0x8a, 0xee, 0x2a, 0xa9, 0x76, 0x94, 0x3c, 0x32, + 0x8d, 0x1e, 0xb5, 0x5b, 0x2d, 0x6c, 0x1c, 0xb7, 0xcb, 0xc2, 0x5c, 0xed, 0x68, 0xb6, 0xdd, 0x6a, 0x41, 0xb3, 0xf0, + 0xc7, 0xcd, 0xeb, 0x17, 0xb2, 0x6c, 0xa5, 0x2d, 0xdc, 0x4e, 0xdb, 0xb8, 0x93, 0x76, 0xf0, 0x71, 0x7a, 0x8c, 0x4f, + 0xd2, 0x13, 0x7c, 0x9a, 0x9e, 0xe2, 0xb3, 0xf4, 0x0c, 0xdf, 0x4f, 0xef, 0xe3, 0xf3, 0xf4, 0x1c, 0x3f, 0x48, 0x1f, + 0xe0, 0x87, 0x69, 0xbb, 0x85, 0x1f, 0xa5, 0xed, 0x36, 0x7e, 0x9c, 0xb6, 0x3b, 0xf8, 0x49, 0xda, 0x3e, 0xc6, 0x4f, + 0xd3, 0xf6, 0x09, 0x7e, 0x96, 0xb6, 0x4f, 0x31, 0x85, 0xdc, 0x21, 0xe4, 0x66, 0x90, 0x3b, 0x82, 0x5c, 0x06, 0xb9, + 0xe3, 0xb4, 0x7d, 0xba, 0xc6, 0xca, 0x06, 0x7b, 0x88, 0x5a, 0xed, 0xce, 0xf1, 0xc9, 0xe9, 0xd9, 0xfd, 0xf3, 0x07, + 0x0f, 0x1f, 0x3d, 0x7e, 0xf2, 0xf4, 0x59, 0x34, 0xc0, 0x43, 0xe3, 0x73, 0xa1, 0x44, 0x9f, 0x1f, 0xb4, 0x4f, 0x07, + 0xf8, 0xda, 0x7f, 0xc6, 0xfc, 0xa0, 0x73, 0xd2, 0x42, 0x97, 0x97, 0x27, 0x83, 0x46, 0x99, 0xfb, 0xde, 0xb8, 0x7a, + 0x54, 0x59, 0x84, 0x90, 0x18, 0x72, 0x10, 0xbe, 0x33, 0xf5, 0xde, 0xb3, 0x98, 0x27, 0x05, 0x3a, 0x38, 0x30, 0x3f, + 0x26, 0xfe, 0xc7, 0xd0, 0xff, 0xa0, 0xc1, 0x22, 0xdd, 0xd2, 0xd8, 0xf9, 0xfa, 0xea, 0xd2, 0xd2, 0xbe, 0x34, 0x62, + 0xd9, 0xe3, 0xce, 0x9c, 0xfc, 0xbf, 0x22, 0x6b, 0x2e, 0x42, 0x4e, 0xac, 0x4a, 0xe6, 0xb4, 0xc7, 0xc8, 0xb2, 0x48, + 0x3b, 0xa7, 0xa7, 0x07, 0xbf, 0xf4, 0x79, 0xbf, 0x3d, 0x18, 0x1c, 0xb6, 0xef, 0xe3, 0x49, 0x99, 0xd0, 0xb1, 0x09, + 0xc3, 0x32, 0xe1, 0xd8, 0x26, 0xd0, 0xd4, 0xd6, 0x86, 0xa4, 0x13, 0x93, 0x04, 0x25, 0xd6, 0xa9, 0x69, 0xfb, 0xbe, + 0x6d, 0xfb, 0x01, 0xd8, 0x31, 0x99, 0xe6, 0x5d, 0xd3, 0x17, 0x17, 0x27, 0x2b, 0xd7, 0x28, 0x9e, 0xa4, 0xae, 0x35, + 0x9f, 0x78, 0x32, 0x18, 0xe0, 0xa1, 0x49, 0x3c, 0xad, 0x12, 0xcf, 0x06, 0x03, 0xd7, 0xd5, 0x03, 0xd3, 0xd5, 0xfd, + 0x2a, 0xeb, 0x7c, 0x30, 0x30, 0x5d, 0x22, 0xe7, 0xb5, 0xae, 0xf4, 0xde, 0x97, 0x52, 0x73, 0xc0, 0x2f, 0x3a, 0xa7, + 0xa7, 0x3d, 0xc0, 0x30, 0x63, 0x8d, 0xea, 0x61, 0x74, 0x13, 0xc0, 0xe8, 0x0e, 0x7e, 0xf7, 0x86, 0x34, 0xbd, 0xa6, + 0x25, 0x90, 0x7a, 0xd1, 0x7f, 0x45, 0x0d, 0x6d, 0x60, 0x6e, 0xfe, 0x4c, 0xec, 0x9f, 0x21, 0x6a, 0x7c, 0xa1, 0x00, + 0x6e, 0xd0, 0x85, 0x78, 0x65, 0xa6, 0xe9, 0xf1, 0x33, 0x05, 0xe7, 0x92, 0xa9, 0xca, 0x69, 0x6f, 0x35, 0xbd, 0x19, + 0xae, 0xa6, 0xea, 0x0b, 0xfa, 0x33, 0xfe, 0x53, 0x1d, 0xc6, 0xfd, 0x66, 0x23, 0x61, 0x7f, 0x8e, 0xc0, 0x8b, 0xa5, + 0x97, 0x8e, 0xd8, 0x04, 0xf5, 0xfa, 0x7f, 0x2a, 0x3c, 0x68, 0x04, 0x19, 0x3f, 0x6c, 0xa7, 0x80, 0x8f, 0xcb, 0x66, + 0x62, 0xfc, 0x03, 0xea, 0xa1, 0xde, 0x9f, 0xea, 0xf0, 0x4f, 0x74, 0xef, 0xa8, 0x9a, 0xcb, 0xef, 0xd2, 0x6d, 0xe1, + 0x2a, 0xf0, 0xcd, 0x61, 0xb9, 0x85, 0x19, 0x6e, 0x37, 0x19, 0x84, 0x09, 0x03, 0x27, 0x68, 0x12, 0xcb, 0x06, 0x3f, + 0x3a, 0x6e, 0xa1, 0x1f, 0xda, 0x1d, 0x10, 0xeb, 0x9b, 0xe2, 0x70, 0x7b, 0xd3, 0x17, 0xcd, 0x63, 0xfc, 0xa0, 0x59, + 0xe0, 0x36, 0xc2, 0xcd, 0xb6, 0xd7, 0xb7, 0xf6, 0x55, 0xdc, 0x42, 0x58, 0xc5, 0xe7, 0xf0, 0xcf, 0x09, 0x1a, 0x54, + 0x1b, 0xf2, 0x8a, 0x6e, 0xf6, 0x0e, 0x1e, 0x9b, 0x24, 0x56, 0x0d, 0x7e, 0x74, 0xd6, 0x42, 0x3f, 0x9c, 0x99, 0x8e, + 0xd8, 0xa1, 0xde, 0xd1, 0x95, 0xc4, 0x27, 0x4d, 0x09, 0x1d, 0xb5, 0xca, 0x7e, 0x44, 0x7c, 0x8a, 0xb0, 0x88, 0x8f, + 0xe1, 0x9f, 0x76, 0xd8, 0xcf, 0xaf, 0x5b, 0xfd, 0x98, 0x79, 0xb7, 0x71, 0x72, 0x6a, 0x1d, 0x40, 0x95, 0xbd, 0x8d, + 0x6d, 0xb0, 0xcb, 0xb6, 0xb9, 0x46, 0x6a, 0x1f, 0xc1, 0x07, 0xc2, 0xfa, 0x90, 0x28, 0xcc, 0x0e, 0xc1, 0x73, 0x14, + 0x0c, 0x26, 0xd4, 0xc5, 0x71, 0x57, 0x35, 0x1a, 0x48, 0xf4, 0xd5, 0xe0, 0x90, 0xb4, 0x9b, 0xba, 0xc9, 0x30, 0xfc, + 0x6e, 0x90, 0x32, 0x1c, 0x99, 0xa8, 0x7a, 0x7d, 0xec, 0x7a, 0xb5, 0x77, 0xce, 0x1e, 0x3b, 0x08, 0x21, 0xaa, 0x17, + 0xeb, 0x26, 0x43, 0x47, 0xa2, 0x11, 0xeb, 0x0b, 0xd6, 0x3b, 0x4b, 0x5b, 0xc8, 0x60, 0xa7, 0xea, 0xc5, 0xac, 0xc9, + 0x21, 0xbd, 0x93, 0xc6, 0xbc, 0xa9, 0xe1, 0xd7, 0x49, 0x30, 0x0b, 0x01, 0x78, 0x57, 0xf9, 0xc1, 0x14, 0x47, 0x9d, + 0xd3, 0x53, 0x2c, 0x08, 0x4f, 0x26, 0xe6, 0x97, 0x22, 0x3c, 0x19, 0x9a, 0x5f, 0x92, 0x94, 0xf0, 0xb2, 0xbd, 0xe3, + 0x82, 0x04, 0xab, 0x6a, 0x52, 0x28, 0x2c, 0x68, 0x81, 0x8e, 0x3a, 0xfe, 0x42, 0x1a, 0x4f, 0xfd, 0x1c, 0x40, 0x00, + 0x2f, 0x8c, 0x2d, 0xa2, 0x6c, 0x16, 0x38, 0x27, 0xf4, 0x32, 0x39, 0xed, 0x4d, 0x8f, 0xe2, 0x4e, 0x53, 0x36, 0x0b, + 0x94, 0x4e, 0x8f, 0x4c, 0x4d, 0x9c, 0x91, 0xc7, 0xd4, 0xb6, 0x86, 0xa7, 0x70, 0x8b, 0x98, 0x91, 0xec, 0xf0, 0xac, + 0xd5, 0x48, 0x4e, 0x11, 0xee, 0x67, 0xab, 0x16, 0xce, 0x57, 0xab, 0x16, 0xa6, 0xc1, 0x32, 0x3c, 0x16, 0x1e, 0x20, + 0xa5, 0x8e, 0x68, 0x33, 0x2a, 0x4c, 0x8f, 0xc7, 0x1a, 0x6e, 0xc4, 0x35, 0xf8, 0x99, 0x68, 0xf0, 0x80, 0x49, 0xb9, + 0xbb, 0x8a, 0x42, 0x26, 0x2e, 0xde, 0x38, 0xd4, 0x1a, 0xbd, 0x16, 0x7e, 0x5d, 0xbd, 0x4d, 0xa3, 0x88, 0x7f, 0x97, + 0xd8, 0xa6, 0x05, 0xc5, 0xe8, 0x76, 0xb1, 0x5f, 0xe9, 0x56, 0xb1, 0x37, 0x3b, 0x8a, 0x5d, 0x6d, 0x17, 0xfb, 0x28, + 0x03, 0x1d, 0x17, 0xff, 0xe1, 0xf8, 0xac, 0xd5, 0x38, 0x06, 0x64, 0x3d, 0x3e, 0x6b, 0x55, 0x85, 0xee, 0xd1, 0x6a, + 0xad, 0x34, 0xf9, 0x4c, 0xad, 0x95, 0x3f, 0xf7, 0xee, 0xc6, 0x66, 0xe1, 0xac, 0xb3, 0x73, 0xe9, 0xd9, 0xdc, 0x3f, + 0x05, 0x2b, 0x0a, 0x61, 0xa8, 0x9d, 0xee, 0x9f, 0x0d, 0x7a, 0x53, 0x16, 0x37, 0x20, 0x15, 0xa5, 0x63, 0xed, 0x7e, + 0xa1, 0xf2, 0x32, 0xf5, 0xa3, 0x84, 0xa4, 0xce, 0x00, 0x61, 0x49, 0x1a, 0xba, 0x7f, 0x3c, 0x30, 0xe7, 0x5d, 0x01, + 0xbf, 0x4f, 0xcc, 0xef, 0x52, 0x95, 0xe1, 0x5c, 0x01, 0xa6, 0x37, 0xc3, 0xa8, 0x27, 0xc8, 0x6b, 0x1a, 0x1b, 0xeb, + 0x6e, 0x94, 0x96, 0x19, 0xea, 0x0b, 0x64, 0xbc, 0x29, 0x33, 0x04, 0x79, 0x2d, 0xdc, 0x6f, 0xbc, 0x2c, 0x52, 0xb0, + 0xf4, 0xc0, 0x93, 0x14, 0xac, 0x3c, 0xf0, 0x30, 0x15, 0xe0, 0x89, 0x40, 0x53, 0x16, 0xd8, 0x8f, 0x3f, 0x74, 0xba, + 0x23, 0x73, 0xdf, 0x49, 0x0c, 0x96, 0x76, 0x19, 0x9c, 0x14, 0x1f, 0x65, 0x0c, 0x7f, 0x1b, 0x1a, 0x61, 0x06, 0x6d, + 0x32, 0x84, 0x79, 0x52, 0x10, 0x48, 0xc3, 0x3c, 0x99, 0x10, 0x06, 0x4d, 0xf2, 0x64, 0x48, 0x58, 0xbf, 0x13, 0xa0, + 0xc9, 0x53, 0x03, 0x3b, 0x00, 0x0e, 0xaf, 0x5f, 0x21, 0x6b, 0xdb, 0x38, 0xdc, 0x4d, 0x43, 0x13, 0x82, 0x70, 0x15, + 0xc3, 0x2c, 0x60, 0x73, 0x9a, 0x9f, 0x9d, 0x2a, 0xf0, 0x22, 0x4f, 0xa8, 0xa1, 0xde, 0x7f, 0x01, 0x59, 0x8d, 0xef, + 0x2d, 0xd9, 0x1a, 0xef, 0xdd, 0x5b, 0x8a, 0xf5, 0x0f, 0xf0, 0x47, 0xb9, 0x3f, 0xda, 0x9c, 0x7e, 0x6b, 0xf4, 0x57, + 0x0a, 0xc5, 0x76, 0x94, 0x42, 0x7f, 0x79, 0x47, 0x34, 0x45, 0x96, 0xb7, 0x69, 0x34, 0xa2, 0xc5, 0xe7, 0x08, 0x7f, + 0x4a, 0xa3, 0x1c, 0x18, 0xc1, 0x08, 0x7f, 0x4c, 0xa3, 0x82, 0x45, 0xf8, 0x8f, 0x34, 0x1a, 0xe6, 0x8b, 0x08, 0x7f, + 0x48, 0xa3, 0x49, 0x11, 0xe1, 0xf7, 0xa0, 0x26, 0x1c, 0xf1, 0xc5, 0x2c, 0xc2, 0xbf, 0xa7, 0x91, 0x32, 0x76, 0xf8, + 0xf8, 0x61, 0x1a, 0x31, 0x16, 0xe1, 0x77, 0x69, 0x24, 0xf3, 0x08, 0x5f, 0xa5, 0x91, 0x2c, 0x22, 0xfc, 0x28, 0x8d, + 0x0a, 0x1a, 0xe1, 0xc7, 0x69, 0x04, 0x85, 0x26, 0x11, 0x7e, 0x92, 0x46, 0xd0, 0xb2, 0x8a, 0xf0, 0xdb, 0x34, 0xe2, + 0x22, 0xc2, 0xbf, 0xa5, 0x91, 0x5e, 0x14, 0xff, 0x2c, 0x24, 0x57, 0x11, 0x7e, 0x9a, 0x46, 0x53, 0x1e, 0xe1, 0x37, + 0x69, 0x54, 0xc8, 0x08, 0xbf, 0x4e, 0x23, 0x9a, 0x47, 0xf8, 0x55, 0x1a, 0xe5, 0x2c, 0xc2, 0xbf, 0xa6, 0xd1, 0x88, + 0x45, 0xf8, 0x65, 0x1a, 0xdd, 0xb1, 0x3c, 0x97, 0x11, 0x7e, 0x96, 0x46, 0x4c, 0x44, 0xf8, 0x97, 0x34, 0xca, 0xa6, + 0x11, 0xfe, 0x29, 0x8d, 0x68, 0xf1, 0x59, 0x45, 0xf8, 0x79, 0x1a, 0x31, 0x1a, 0xe1, 0x17, 0xb6, 0xa3, 0x49, 0x84, + 0x7f, 0x4e, 0xa3, 0x9b, 0x69, 0xb4, 0xc6, 0x4a, 0x91, 0xe5, 0x6b, 0x9e, 0xb1, 0x3f, 0x58, 0x1a, 0x8d, 0x5b, 0xe3, + 0xf3, 0xf1, 0x38, 0xc2, 0x54, 0x68, 0xfe, 0xcf, 0x82, 0xdd, 0x3c, 0xd5, 0x90, 0x48, 0xd9, 0x70, 0x74, 0x3f, 0xc2, + 0xf4, 0x9f, 0x05, 0x4d, 0xa3, 0xf1, 0xd8, 0x14, 0xf8, 0x67, 0x41, 0x67, 0xb4, 0x78, 0xcb, 0xd2, 0xe8, 0xfe, 0x78, + 0x3c, 0x1e, 0x9d, 0x44, 0x98, 0x7e, 0x5d, 0x7c, 0x34, 0x2d, 0x98, 0x02, 0x43, 0xc6, 0x27, 0x50, 0xf7, 0x74, 0x7c, + 0x3a, 0xca, 0x22, 0x3c, 0xe4, 0xea, 0x9f, 0x05, 0x7c, 0x8f, 0xd9, 0x49, 0x76, 0x12, 0xe1, 0x61, 0x4e, 0xb3, 0xcf, + 0x69, 0xd4, 0x32, 0xbf, 0xc4, 0x2f, 0x6c, 0xf4, 0x7a, 0x26, 0x8d, 0x12, 0x7d, 0xcc, 0x86, 0xd9, 0x28, 0xc2, 0x66, + 0x30, 0x63, 0xf8, 0xfb, 0x85, 0xbf, 0x63, 0x3a, 0x8d, 0xce, 0x69, 0x67, 0xc8, 0x3a, 0x11, 0x1e, 0xbe, 0xb9, 0x11, + 0x69, 0x44, 0x4f, 0x3b, 0xb4, 0x43, 0x23, 0x3c, 0x5c, 0x14, 0xf9, 0xdd, 0x8d, 0x94, 0x23, 0x00, 0xc2, 0xf0, 0xfc, + 0xfc, 0x7e, 0x84, 0x33, 0xfa, 0xab, 0x86, 0xda, 0xa7, 0xe3, 0x07, 0x8c, 0xb6, 0x22, 0xfc, 0x0b, 0x2d, 0xf4, 0xc7, + 0x85, 0x72, 0x03, 0x6d, 0x41, 0x8a, 0xcc, 0xde, 0x81, 0x82, 0x39, 0x1a, 0x75, 0xce, 0x1e, 0xb4, 0x59, 0x84, 0xb3, + 0xab, 0xd7, 0xd0, 0xdb, 0xfd, 0xf1, 0x69, 0x0b, 0x3e, 0x04, 0x48, 0x6a, 0xac, 0x80, 0x46, 0xce, 0x4e, 0x1e, 0x9c, + 0xb2, 0x91, 0x49, 0x54, 0x3c, 0xff, 0x6c, 0x66, 0x7f, 0x0e, 0xf3, 0xc9, 0x0a, 0x3e, 0x53, 0x52, 0xa4, 0xd1, 0x28, + 0x6b, 0x9f, 0x1c, 0x43, 0xc2, 0x1d, 0x15, 0x1e, 0x38, 0xb7, 0x50, 0xf5, 0x7c, 0x18, 0xe1, 0x5b, 0x9b, 0x7a, 0x3e, + 0x34, 0x1f, 0x93, 0x77, 0xbf, 0x8a, 0x37, 0xa3, 0x34, 0x1a, 0x9e, 0x9f, 0x9f, 0xb5, 0x20, 0xe1, 0x03, 0xbd, 0x4b, + 0x23, 0xfa, 0x00, 0xfe, 0x83, 0xec, 0x8f, 0xcf, 0xa0, 0x43, 0x18, 0xe1, 0xed, 0xe4, 0x63, 0x98, 0xf3, 0x79, 0x4a, + 0x3f, 0xf3, 0x34, 0x1a, 0x8e, 0x86, 0xf7, 0xcf, 0xa0, 0xde, 0x8c, 0x4e, 0x9e, 0x69, 0x0a, 0xed, 0xb6, 0x5a, 0xa6, + 0xe5, 0x77, 0xfc, 0x0b, 0x33, 0xd5, 0x4f, 0x4f, 0xcf, 0x86, 0x1d, 0x18, 0xc1, 0x15, 0xa8, 0x18, 0x60, 0x3c, 0xe7, + 0x99, 0x69, 0xf0, 0x2a, 0x7b, 0x3a, 0x4a, 0xa3, 0x07, 0x0f, 0x8e, 0x3b, 0x59, 0x16, 0xe1, 0xdb, 0x8f, 0x23, 0x5b, + 0xdb, 0xe4, 0x29, 0x80, 0x7d, 0x1a, 0xb1, 0x07, 0x0f, 0xce, 0xee, 0x53, 0xf8, 0x7e, 0x6e, 0xda, 0x3a, 0x1f, 0x0f, + 0xb3, 0x73, 0x68, 0xeb, 0x77, 0x98, 0xce, 0xc9, 0xf9, 0xf1, 0xc8, 0xf4, 0xf5, 0xbb, 0x19, 0x75, 0x67, 0x7c, 0x32, + 0x3e, 0x31, 0x99, 0x66, 0xa8, 0xe5, 0xe7, 0x6f, 0x2c, 0x8d, 0x32, 0x36, 0x6a, 0x47, 0xf8, 0xd6, 0x2d, 0xdc, 0x83, + 0x93, 0x56, 0x6b, 0x74, 0x1c, 0xe1, 0xd1, 0xc3, 0xf9, 0xfc, 0xad, 0x81, 0x60, 0xfb, 0xe4, 0x81, 0xfd, 0x56, 0x9f, + 0xef, 0xa0, 0xe9, 0xa1, 0x01, 0xda, 0x88, 0xcf, 0x4c, 0xcb, 0x67, 0x0f, 0xe0, 0x3f, 0xf3, 0x6d, 0x9a, 0x2e, 0xbf, + 0xe5, 0x68, 0x62, 0x17, 0xa5, 0xcd, 0x1e, 0xb4, 0xa0, 0xc6, 0x98, 0x7f, 0x1c, 0x16, 0x1c, 0xd0, 0x68, 0xd8, 0x81, + 0xff, 0x8b, 0xf0, 0x38, 0xbf, 0x7a, 0xed, 0x70, 0x76, 0x3c, 0xa6, 0xe3, 0x56, 0x84, 0xc7, 0xf2, 0xa3, 0xd2, 0x1f, + 0x1e, 0x8a, 0x34, 0xea, 0x74, 0xce, 0x87, 0xa6, 0xcc, 0xe2, 0x17, 0xc5, 0x0d, 0x1e, 0xb7, 0x4c, 0x2b, 0x13, 0xfa, + 0x56, 0x0d, 0xaf, 0x24, 0xac, 0x24, 0xfc, 0x17, 0xe1, 0x09, 0xe8, 0xa5, 0x5c, 0x2b, 0xe7, 0x76, 0x3b, 0x4c, 0xde, + 0x19, 0xd4, 0x1c, 0xdd, 0x07, 0x78, 0xf9, 0x65, 0x1c, 0x51, 0x7a, 0xda, 0x69, 0x45, 0xd8, 0x8c, 0xfa, 0xbc, 0x05, + 0xff, 0x45, 0xd8, 0x42, 0xce, 0xc0, 0x75, 0xf2, 0xf1, 0xd9, 0xcb, 0x9b, 0x34, 0xa2, 0xa3, 0xf1, 0x18, 0x96, 0xc4, + 0x4c, 0xc6, 0x17, 0x9b, 0x4a, 0xc1, 0xee, 0x7e, 0xbd, 0x71, 0xdb, 0xc5, 0x24, 0x68, 0x07, 0x9d, 0xb3, 0x07, 0xc3, + 0x93, 0x08, 0xbf, 0x1d, 0x71, 0x2a, 0x60, 0x95, 0xb2, 0xd1, 0x69, 0x76, 0x9a, 0x99, 0x84, 0x89, 0x4c, 0xa3, 0x13, + 0x58, 0xf2, 0x4e, 0x84, 0xf9, 0x97, 0xab, 0x3b, 0x8b, 0x6e, 0x50, 0xdb, 0x21, 0xc8, 0xb8, 0xc5, 0xce, 0xce, 0xb3, + 0x08, 0xe7, 0xf4, 0xcb, 0xb3, 0x5f, 0x8b, 0x34, 0x62, 0x67, 0xec, 0x6c, 0x4c, 0xfd, 0xf7, 0x1f, 0x6a, 0x6a, 0x6a, + 0xb4, 0xc6, 0xa7, 0x90, 0x74, 0x23, 0xcc, 0x58, 0xef, 0x67, 0x63, 0x83, 0x21, 0xaf, 0x66, 0x52, 0x64, 0x4f, 0xc7, + 0x63, 0x69, 0xb1, 0x98, 0xc2, 0x26, 0xfc, 0x04, 0xd0, 0xa6, 0xa3, 0xd1, 0x39, 0x3b, 0x8b, 0xf0, 0x27, 0xbb, 0x4b, + 0xdc, 0x04, 0x3e, 0x59, 0xcc, 0x66, 0x6e, 0xb7, 0x7f, 0xb2, 0x40, 0x81, 0xf9, 0x8e, 0xe9, 0x98, 0x8e, 0x3a, 0x11, + 0xfe, 0x64, 0xe0, 0x32, 0x3a, 0x86, 0xff, 0xa0, 0x00, 0x74, 0xf6, 0xa0, 0xc5, 0xd8, 0x83, 0x96, 0xf9, 0x0a, 0xf3, + 0xdc, 0xcc, 0x87, 0x67, 0x59, 0x3b, 0xc2, 0x9f, 0x1c, 0x3a, 0x8e, 0xc7, 0xb4, 0x05, 0xe8, 0xf8, 0xc9, 0xa1, 0x63, + 0xa7, 0x35, 0xec, 0x50, 0xf3, 0x6d, 0xb1, 0xe6, 0xfc, 0x7e, 0xc6, 0x60, 0x72, 0x9f, 0x2c, 0x42, 0xde, 0xbf, 0x7f, + 0x7e, 0xfe, 0xe0, 0x01, 0x7c, 0x9a, 0xb6, 0xcb, 0x4f, 0xa5, 0x1f, 0xe6, 0x06, 0xc9, 0x5a, 0xd9, 0x09, 0xd0, 0xc9, + 0x4f, 0x66, 0x8c, 0xe3, 0xf1, 0x98, 0xb5, 0x22, 0x9c, 0xf3, 0x19, 0xb3, 0x98, 0x60, 0x7f, 0x9b, 0x8e, 0x8e, 0x3b, + 0xd9, 0xe8, 0xb8, 0x13, 0xe1, 0xfc, 0xed, 0x33, 0x33, 0x9b, 0x16, 0xcc, 0xde, 0x6f, 0x39, 0x8f, 0x35, 0x33, 0xfa, + 0x06, 0x06, 0x09, 0x2b, 0x0d, 0x95, 0xdf, 0x07, 0xf4, 0xf0, 0xec, 0x2c, 0x1b, 0xc1, 0x40, 0xdf, 0x43, 0xb7, 0x00, + 0xc6, 0xf7, 0x76, 0xf3, 0x0d, 0xe9, 0xe9, 0x29, 0x4c, 0xf7, 0xfd, 0x7c, 0x51, 0xcc, 0x5f, 0xa5, 0xd1, 0x83, 0xe3, + 0xfb, 0xad, 0xd1, 0x30, 0xc2, 0xef, 0xdd, 0x04, 0x8f, 0xb3, 0xe1, 0xf1, 0xfd, 0x76, 0x84, 0xdf, 0x9b, 0xfd, 0x76, + 0x7f, 0x78, 0x76, 0x0e, 0xe7, 0xc6, 0x7b, 0x35, 0x2f, 0xde, 0x4e, 0x4c, 0x81, 0x31, 0x7d, 0x00, 0xcd, 0xfe, 0x66, + 0x76, 0xe3, 0xa8, 0x0d, 0x1b, 0xf9, 0xbd, 0xd9, 0x64, 0x06, 0x4f, 0xee, 0xb7, 0x4f, 0xcf, 0x4f, 0x23, 0x3c, 0xe3, + 0x23, 0x01, 0x04, 0xde, 0x6c, 0x94, 0x07, 0xed, 0x07, 0xf7, 0x5b, 0x11, 0x9e, 0xbd, 0xd5, 0xd9, 0x47, 0x3a, 0x33, + 0xd4, 0x78, 0x0c, 0x30, 0x9b, 0x71, 0xa5, 0xef, 0xde, 0x28, 0x47, 0x8f, 0x59, 0x3b, 0xc2, 0x33, 0x99, 0x65, 0x54, + 0xbd, 0xb5, 0x09, 0xc3, 0xd3, 0x08, 0x0b, 0xfa, 0x85, 0xfe, 0x2d, 0xfd, 0x66, 0x1a, 0x31, 0x3a, 0x32, 0x69, 0x06, + 0x87, 0x23, 0xfc, 0x6e, 0x04, 0xd7, 0x60, 0x69, 0x34, 0x1e, 0x8d, 0x4f, 0x01, 0x3c, 0x40, 0x80, 0x2c, 0x76, 0x03, + 0x34, 0xe0, 0x6b, 0xf4, 0x68, 0x98, 0x46, 0x67, 0xc3, 0x73, 0xd6, 0x39, 0x8e, 0x70, 0x49, 0x8d, 0xe8, 0x29, 0xe4, + 0x9b, 0xcf, 0x8f, 0x66, 0x4b, 0x9d, 0xd8, 0x04, 0x03, 0xa0, 0x11, 0xbd, 0xdf, 0x1a, 0x9d, 0x45, 0x78, 0xfe, 0x9a, + 0xf9, 0x3d, 0xc6, 0x18, 0x3b, 0x07, 0x58, 0x42, 0x92, 0x41, 0xa0, 0xf3, 0xf1, 0xf0, 0xc1, 0xb9, 0xf9, 0x06, 0x30, + 0xd0, 0x31, 0x63, 0x00, 0xa4, 0xf9, 0x6b, 0x56, 0x02, 0x62, 0x34, 0xbc, 0xdf, 0x02, 0xfa, 0x32, 0xa7, 0x73, 0x7a, + 0x47, 0x6f, 0x9e, 0xce, 0xcd, 0x9c, 0xc6, 0xa3, 0xd3, 0x08, 0xcf, 0x9f, 0xff, 0x32, 0x5f, 0x8c, 0xc7, 0x66, 0x42, + 0x74, 0xf8, 0x20, 0xc2, 0x73, 0x56, 0x2c, 0x60, 0x8d, 0xce, 0x4f, 0x8f, 0xc7, 0x11, 0x76, 0x68, 0x98, 0xb5, 0xb2, + 0x21, 0xdc, 0xf3, 0x2d, 0x66, 0x69, 0x34, 0x1a, 0xd1, 0xd6, 0x08, 0x6e, 0xfd, 0xe4, 0xcd, 0xaf, 0x85, 0x45, 0x23, + 0x66, 0xf0, 0xc1, 0xad, 0x21, 0xcc, 0x17, 0xe0, 0xf1, 0x71, 0xc8, 0xb2, 0x8c, 0xba, 0xc4, 0xb3, 0xb3, 0xe3, 0x63, + 0xc0, 0x3d, 0x3b, 0x43, 0x8b, 0x20, 0x6f, 0xd4, 0xdd, 0xb0, 0x90, 0x70, 0x74, 0x01, 0x51, 0x05, 0xb2, 0xfa, 0xe6, + 0xee, 0xb5, 0xa1, 0xab, 0xed, 0xb3, 0x07, 0xb0, 0x00, 0x8a, 0x8e, 0x46, 0xaf, 0xec, 0xe1, 0x76, 0x3e, 0x3c, 0x39, + 0x6d, 0x1f, 0x47, 0xd8, 0x6f, 0x04, 0x7a, 0xde, 0xba, 0xdf, 0x81, 0x12, 0x62, 0x74, 0x67, 0x4b, 0x8c, 0x4f, 0xe8, + 0xc9, 0x59, 0x2b, 0xc2, 0x7e, 0x6b, 0xb0, 0xf3, 0xe1, 0xe9, 0x7d, 0xf8, 0x54, 0x53, 0x96, 0xe7, 0x06, 0xbf, 0x4f, + 0x01, 0x2e, 0x8a, 0x3f, 0x13, 0x34, 0x8d, 0x68, 0xeb, 0xb4, 0xd3, 0x19, 0xc1, 0x67, 0xfe, 0x85, 0x15, 0x69, 0x94, + 0xb5, 0xe0, 0xbf, 0x08, 0x07, 0x3b, 0x89, 0x0d, 0x23, 0x6c, 0xf0, 0xee, 0x8c, 0x9e, 0x9a, 0xbd, 0xef, 0x76, 0x55, + 0xeb, 0xbc, 0x05, 0x1b, 0xd6, 0x6d, 0x2a, 0xf7, 0xa5, 0x84, 0xbc, 0x71, 0x24, 0x96, 0x46, 0x38, 0x40, 0xd0, 0xf1, + 0xfd, 0x71, 0x84, 0xfd, 0x8e, 0x3b, 0x39, 0x3b, 0xef, 0x00, 0x29, 0xd3, 0x40, 0x28, 0x46, 0x9d, 0xe1, 0x09, 0x90, + 0x26, 0xcd, 0x5e, 0x5b, 0x3c, 0x89, 0xb0, 0x7e, 0xaa, 0xf4, 0xab, 0x34, 0x1a, 0x9d, 0x0f, 0xc7, 0xa3, 0xf3, 0x08, + 0x6b, 0x39, 0xa3, 0x5a, 0x1a, 0x0a, 0x78, 0x7c, 0x72, 0x3f, 0xc2, 0x06, 0xcd, 0x5b, 0xac, 0x35, 0x6a, 0x45, 0xd8, + 0x1d, 0x25, 0x8c, 0x9d, 0x77, 0x60, 0x5a, 0x3f, 0x3f, 0xd7, 0x80, 0xcb, 0x23, 0x36, 0x3c, 0x8e, 0x70, 0x49, 0xef, + 0x0d, 0x21, 0x82, 0x2f, 0x35, 0x93, 0x9f, 0x1d, 0xeb, 0x01, 0xa4, 0xce, 0x6f, 0x78, 0x58, 0x86, 0x97, 0x37, 0x16, + 0x8d, 0xa8, 0xd9, 0xe2, 0xc1, 0x3d, 0xe8, 0x13, 0x1a, 0x7b, 0xb6, 0x9d, 0x93, 0xe5, 0x1a, 0x97, 0xe1, 0x45, 0x3f, + 0xb3, 0x3b, 0x15, 0x2b, 0x65, 0x38, 0xd9, 0x20, 0x05, 0x5c, 0x00, 0x9c, 0x41, 0xbd, 0xf3, 0x99, 0x04, 0x41, 0x52, + 0x90, 0x56, 0x57, 0x5c, 0x78, 0x3f, 0xce, 0xae, 0x80, 0xa0, 0x03, 0x90, 0x5e, 0x10, 0x4a, 0x34, 0xc4, 0x66, 0xb1, + 0xc2, 0xa4, 0x37, 0x6f, 0x37, 0x32, 0xa5, 0xb4, 0x06, 0xf3, 0x94, 0x50, 0x1f, 0x95, 0x1d, 0x2e, 0x69, 0x21, 0x6e, + 0x11, 0xea, 0x4a, 0x62, 0x62, 0x2c, 0xbf, 0x10, 0x3a, 0x56, 0xaa, 0x5f, 0x0c, 0x70, 0xfb, 0x0c, 0x61, 0x88, 0x5e, + 0x40, 0xfa, 0xf2, 0xf2, 0xb2, 0x7d, 0x76, 0x60, 0x84, 0xbe, 0xcb, 0xcb, 0x73, 0xfb, 0x03, 0xfe, 0x1d, 0x54, 0x11, + 0xa3, 0x61, 0x7c, 0x8f, 0x58, 0xa0, 0xd1, 0x33, 0xfc, 0xf5, 0x23, 0xb6, 0x5a, 0xc5, 0x8f, 0x18, 0x81, 0x19, 0xe3, + 0x47, 0x2c, 0x31, 0xb7, 0x06, 0xd6, 0x37, 0x85, 0xf4, 0x41, 0x73, 0xd6, 0xc2, 0x10, 0xc7, 0xdc, 0x73, 0xde, 0x8f, + 0x58, 0x9f, 0xd7, 0xfd, 0x9a, 0xab, 0xe0, 0xc1, 0x07, 0x07, 0xcb, 0x22, 0xd5, 0x56, 0x4c, 0xd0, 0x56, 0x4c, 0xd0, + 0x56, 0x4c, 0xd0, 0x55, 0xf8, 0xf6, 0x93, 0x1e, 0x48, 0x29, 0x46, 0xd9, 0xe2, 0x78, 0xea, 0x77, 0xa0, 0xf6, 0x00, + 0xed, 0x64, 0xaf, 0x52, 0x76, 0x94, 0xba, 0x8a, 0x9d, 0x0a, 0x8c, 0x9d, 0x89, 0x4e, 0xdb, 0x71, 0xf4, 0xef, 0xa8, + 0x3b, 0x5e, 0xd6, 0xc4, 0xb2, 0x77, 0x3b, 0xc5, 0x32, 0x58, 0x49, 0x23, 0x9a, 0xed, 0xdb, 0x48, 0x18, 0xba, 0x7f, + 0xdf, 0x08, 0x66, 0x55, 0x78, 0xb6, 0x06, 0x24, 0x75, 0x41, 0x0a, 0x39, 0x37, 0x52, 0x5a, 0x81, 0xd2, 0x91, 0x8e, + 0x0b, 0xd0, 0x50, 0x7a, 0x05, 0x65, 0x19, 0x45, 0xb4, 0x61, 0x00, 0xa2, 0xac, 0x8c, 0x66, 0x65, 0xb5, 0x53, 0x10, + 0x5d, 0x40, 0x13, 0x66, 0x24, 0x16, 0x68, 0x40, 0x98, 0x06, 0x84, 0xab, 0x0c, 0xe2, 0x8c, 0xcb, 0x3e, 0x31, 0xd9, + 0xca, 0x64, 0xab, 0x32, 0x5b, 0xfa, 0x6c, 0x2b, 0x24, 0x4a, 0x93, 0x2d, 0xcb, 0x6c, 0x90, 0xd9, 0xf0, 0x24, 0x55, + 0x78, 0x98, 0x4a, 0x2b, 0xaa, 0x55, 0xb2, 0xd5, 0x5b, 0x1a, 0x6a, 0x73, 0x0f, 0x0e, 0xe2, 0x52, 0x4e, 0x32, 0x6a, + 0xe2, 0x7b, 0x4b, 0x9e, 0x14, 0x46, 0x06, 0xe2, 0xc9, 0xc4, 0xfd, 0x1d, 0xae, 0x37, 0x65, 0xa5, 0x62, 0x32, 0xfc, + 0x46, 0x49, 0xf4, 0x97, 0x57, 0xa2, 0x3e, 0xe2, 0x26, 0xfe, 0xcc, 0x05, 0x49, 0x5a, 0xad, 0xe3, 0xf6, 0x71, 0xeb, + 0xbc, 0xc7, 0x0f, 0xdb, 0x9d, 0xe4, 0x41, 0x27, 0x35, 0x8a, 0x88, 0xb9, 0xbc, 0x01, 0x05, 0xcc, 0x51, 0x27, 0x39, + 0x41, 0x87, 0xed, 0xa4, 0x75, 0x7a, 0xda, 0x84, 0x7f, 0xf0, 0x7b, 0x5d, 0x56, 0x3b, 0x69, 0x9d, 0x9c, 0xf6, 0xf8, + 0xd1, 0x46, 0xa5, 0x98, 0x37, 0xa0, 0x20, 0x3a, 0x32, 0x95, 0x30, 0xd4, 0xaf, 0x96, 0xf7, 0xd9, 0x96, 0x9e, 0xe7, + 0xbd, 0x8e, 0x95, 0x55, 0xc5, 0x01, 0x54, 0xfd, 0xd7, 0xc4, 0x00, 0xd1, 0x7f, 0x0d, 0xcb, 0x18, 0xb1, 0xcb, 0x02, + 0x44, 0xed, 0x47, 0x3c, 0x16, 0x0d, 0x76, 0x18, 0xdb, 0x7c, 0x0d, 0x75, 0x9b, 0x10, 0xb7, 0x0d, 0x4f, 0x5c, 0xae, + 0x0a, 0x73, 0x27, 0x08, 0x35, 0x15, 0xe4, 0x0e, 0x5d, 0xae, 0x0c, 0x73, 0x87, 0x08, 0x35, 0x25, 0xe4, 0xd2, 0x94, + 0x27, 0x14, 0x72, 0x74, 0x42, 0x9b, 0x06, 0x92, 0xd5, 0xa2, 0x3c, 0x67, 0x7e, 0xd8, 0x7c, 0x0c, 0xcb, 0x63, 0x08, + 0x8a, 0x13, 0xa4, 0x05, 0xbc, 0xed, 0x51, 0x6a, 0x73, 0x5a, 0xb8, 0x54, 0xe3, 0x40, 0x46, 0x03, 0xfe, 0x39, 0x64, + 0xe6, 0xc1, 0x87, 0x56, 0xef, 0xf8, 0xac, 0x95, 0xb6, 0xc1, 0x49, 0x19, 0x64, 0x6d, 0x61, 0x65, 0x6d, 0xe1, 0x65, + 0x6d, 0xe1, 0x65, 0x6d, 0x10, 0xe0, 0x83, 0xbe, 0xff, 0x91, 0x35, 0xc3, 0x0f, 0x5e, 0x5a, 0x91, 0x58, 0x33, 0x81, + 0x58, 0xaf, 0x56, 0xcb, 0x35, 0xd8, 0xf8, 0x94, 0x35, 0xa4, 0xaa, 0xd4, 0x9f, 0xcb, 0x22, 0x6d, 0xe1, 0x49, 0x0a, + 0x5a, 0xee, 0x16, 0xa6, 0x66, 0x73, 0x7b, 0xaa, 0xb0, 0x19, 0x3f, 0xa6, 0xe7, 0xd5, 0xc9, 0x97, 0xe4, 0xd8, 0x68, + 0x8f, 0x97, 0x45, 0xca, 0x2d, 0xcd, 0xe0, 0x96, 0x66, 0x70, 0x4b, 0x33, 0xa0, 0x11, 0x5c, 0x16, 0x36, 0x65, 0x13, + 0x4a, 0xe0, 0x4a, 0xa0, 0x7f, 0x3c, 0x80, 0xf0, 0x79, 0xb1, 0x26, 0x66, 0xd4, 0x1b, 0x9d, 0xb7, 0x21, 0x5c, 0x98, + 0x2d, 0xa9, 0x13, 0x6a, 0xbc, 0xa6, 0xcb, 0x31, 0x7f, 0xad, 0xa1, 0x7d, 0x02, 0x6f, 0xb9, 0x3c, 0xd4, 0x71, 0x0b, + 0x8c, 0x26, 0xa2, 0x22, 0xea, 0x19, 0xb2, 0x90, 0x1a, 0x9d, 0x8d, 0x33, 0x86, 0xfe, 0xbc, 0xe1, 0x83, 0x6a, 0x29, + 0x41, 0xf8, 0x82, 0xc1, 0x67, 0x56, 0x39, 0xc5, 0x97, 0xb6, 0x9e, 0xce, 0x50, 0xcb, 0x1e, 0x09, 0x5d, 0x30, 0xd8, + 0xf6, 0xd1, 0x96, 0x7a, 0x82, 0x48, 0x65, 0xdc, 0x05, 0x49, 0x15, 0x2f, 0x18, 0xdc, 0x67, 0xc9, 0x2d, 0x35, 0xce, + 0x24, 0x2f, 0xec, 0x9f, 0xaf, 0x34, 0xf0, 0xb6, 0x2b, 0x26, 0x43, 0xef, 0xa4, 0x7a, 0x6d, 0xa2, 0xea, 0x90, 0xfd, + 0x7d, 0x6b, 0x4b, 0x6d, 0xbe, 0x36, 0x8d, 0xa9, 0x4d, 0xa2, 0xc9, 0x86, 0x1d, 0xea, 0xd7, 0xe8, 0x1f, 0xef, 0x2b, + 0x56, 0x4c, 0x86, 0x28, 0xa0, 0xd9, 0x06, 0xac, 0xaa, 0x02, 0x96, 0x72, 0xf5, 0x4a, 0x17, 0x42, 0xe8, 0xdd, 0x8c, + 0x79, 0x5d, 0x4c, 0x86, 0x3b, 0x1f, 0xfd, 0xb0, 0x3d, 0xf6, 0xde, 0xd2, 0xa0, 0x07, 0xaf, 0xda, 0x9e, 0xb2, 0xdb, + 0xef, 0xd5, 0xb9, 0xd9, 0x59, 0x47, 0xe5, 0xdf, 0xab, 0xf3, 0x74, 0x57, 0x9d, 0x19, 0xbf, 0x8d, 0xfd, 0xde, 0xd1, + 0x81, 0x1a, 0xdb, 0x18, 0xe8, 0x4c, 0x86, 0x10, 0xa5, 0x1d, 0xfe, 0xda, 0x58, 0x2a, 0x5d, 0x4f, 0xc2, 0x61, 0x15, + 0x64, 0x2f, 0x39, 0x4d, 0x19, 0xa6, 0xa4, 0x73, 0x58, 0x98, 0x68, 0x2a, 0x22, 0xa1, 0x4d, 0x95, 0x50, 0x9c, 0x93, + 0x38, 0xa6, 0x87, 0x19, 0xc4, 0x84, 0x69, 0xf7, 0x68, 0x1a, 0xd3, 0x46, 0x86, 0x8e, 0xe2, 0x76, 0x83, 0x1e, 0x66, + 0x08, 0x35, 0xda, 0xa0, 0x33, 0x95, 0xa4, 0xdd, 0xcc, 0x21, 0x4a, 0xa4, 0x21, 0xc5, 0xf9, 0xa1, 0x48, 0x8a, 0x86, + 0x3c, 0x54, 0x49, 0xd1, 0x48, 0x4e, 0xb1, 0x48, 0x26, 0x65, 0xf2, 0xc4, 0x24, 0x4f, 0x6c, 0xf2, 0xb0, 0x4c, 0x1e, + 0x9a, 0xe4, 0xa1, 0x4d, 0xa6, 0xa4, 0x38, 0x14, 0x09, 0x6d, 0xc4, 0xed, 0x66, 0x81, 0x0e, 0x61, 0x04, 0x7e, 0xf4, + 0x44, 0x84, 0xc1, 0xb9, 0xd7, 0xc6, 0xba, 0x65, 0x2e, 0x73, 0x17, 0x2e, 0xb3, 0x02, 0x52, 0xe9, 0x72, 0x04, 0x75, + 0x9e, 0x05, 0x60, 0xc2, 0xda, 0xfe, 0xf1, 0xc1, 0xe0, 0xd6, 0x59, 0x2e, 0x45, 0xe0, 0x52, 0x05, 0x56, 0xe0, 0x9f, + 0x9d, 0x23, 0x09, 0x40, 0x75, 0x4d, 0xf3, 0xf9, 0x94, 0x6e, 0xf9, 0xad, 0x16, 0x93, 0xa1, 0xdb, 0x59, 0x65, 0x33, + 0x8c, 0x16, 0x36, 0xc8, 0x72, 0xdd, 0xc3, 0x10, 0x40, 0xed, 0xbd, 0x1a, 0x13, 0x6a, 0x94, 0xe4, 0xb6, 0xc6, 0xa4, + 0x60, 0x77, 0x2a, 0xa3, 0x39, 0x8b, 0xab, 0x03, 0xb8, 0x1a, 0x26, 0x23, 0x2f, 0xc0, 0x16, 0xbd, 0x38, 0x4c, 0x8e, + 0x1b, 0x3a, 0x99, 0x1c, 0x26, 0xa7, 0x0f, 0x1a, 0x3a, 0x19, 0x1e, 0x26, 0xed, 0x76, 0x85, 0xb3, 0x49, 0x41, 0x74, + 0x32, 0x21, 0x1a, 0x34, 0x86, 0xb6, 0x51, 0x39, 0xa7, 0x60, 0x5c, 0xf5, 0x6f, 0x0c, 0xa3, 0xe1, 0x86, 0x21, 0xd8, + 0xc4, 0xc6, 0x9b, 0xdc, 0x1a, 0x43, 0xd8, 0x4d, 0xe7, 0xf4, 0xb4, 0xa9, 0x93, 0x02, 0x6b, 0xbb, 0x92, 0x4d, 0x9d, + 0x4c, 0xb0, 0xb6, 0xcb, 0xd7, 0xd4, 0xc9, 0xd0, 0x36, 0x65, 0x74, 0x80, 0x4c, 0x04, 0xc0, 0x7a, 0xce, 0x02, 0xc8, + 0x77, 0xbc, 0x7b, 0xc8, 0x1a, 0xb4, 0x86, 0xdf, 0x2b, 0xd7, 0xf4, 0x05, 0x15, 0xd5, 0x60, 0x64, 0xc3, 0xbe, 0x55, + 0xb4, 0x5d, 0x35, 0xc9, 0xfe, 0x75, 0xd9, 0xb2, 0xd9, 0x42, 0xea, 0x7a, 0xc1, 0x87, 0x35, 0x0c, 0x71, 0xa5, 0xdc, + 0xc1, 0xfd, 0x8a, 0x92, 0x18, 0xa2, 0xca, 0x99, 0x53, 0x88, 0x13, 0xaf, 0x47, 0x86, 0x24, 0xde, 0x68, 0xac, 0x51, + 0x1c, 0x9c, 0xb7, 0x4f, 0x43, 0xaa, 0xba, 0x15, 0x6a, 0x8e, 0x90, 0x68, 0x21, 0xac, 0x31, 0xe2, 0x28, 0x0a, 0x58, + 0x10, 0xa7, 0xdd, 0xad, 0x1d, 0x10, 0x07, 0x07, 0x9b, 0xe7, 0x85, 0x0f, 0xfa, 0xbf, 0x15, 0xe8, 0xbf, 0xb2, 0x64, + 0xf3, 0x4f, 0x11, 0x59, 0x1b, 0x57, 0x1e, 0x20, 0x8a, 0x0f, 0xfa, 0x74, 0xdf, 0x50, 0xf8, 0x7e, 0x15, 0xf1, 0xce, + 0xe5, 0x34, 0xcf, 0x4c, 0x86, 0xe9, 0x6b, 0x10, 0x8c, 0xed, 0x4d, 0x38, 0xa1, 0xd2, 0x4a, 0xef, 0x5f, 0x76, 0x1c, + 0x74, 0xe2, 0x9e, 0x4a, 0x09, 0x1b, 0xfd, 0x3b, 0xb4, 0x89, 0xad, 0x60, 0xe3, 0xbc, 0xa1, 0x57, 0xab, 0xda, 0xc3, + 0x38, 0xf6, 0xf9, 0x15, 0x74, 0x70, 0xc0, 0xd5, 0x33, 0x30, 0xe3, 0x65, 0x71, 0x23, 0x3c, 0x7c, 0xff, 0xa9, 0x9d, + 0xd6, 0x7f, 0x9b, 0x73, 0x35, 0x0d, 0x0e, 0xba, 0x87, 0xb5, 0xfc, 0x9d, 0x2b, 0xd1, 0xd3, 0x29, 0x77, 0x6b, 0xfd, + 0x77, 0x65, 0x24, 0xbd, 0xf5, 0x44, 0xd3, 0xc1, 0x01, 0xaf, 0x02, 0x25, 0x45, 0x3f, 0x44, 0xa8, 0x67, 0x64, 0x90, + 0x67, 0xb9, 0xa4, 0x70, 0x23, 0x0a, 0x57, 0x0c, 0x69, 0x83, 0x1f, 0x69, 0xfc, 0x87, 0xfc, 0xff, 0xd4, 0xc8, 0xa1, + 0x4e, 0x1b, 0x3c, 0x10, 0xc0, 0x42, 0x56, 0xa8, 0x0a, 0x51, 0x68, 0x20, 0x1d, 0xda, 0x3c, 0xa3, 0xf2, 0x30, 0xa7, + 0xf3, 0x79, 0x7e, 0x67, 0x5e, 0xa9, 0x0a, 0x38, 0xaa, 0xea, 0xa2, 0xc9, 0xc5, 0x87, 0xc3, 0x05, 0xf0, 0xf4, 0x80, + 0x7b, 0xc8, 0xf8, 0x77, 0x96, 0x97, 0xdb, 0x02, 0x81, 0x64, 0xa6, 0x88, 0x6c, 0xb6, 0xbb, 0xea, 0x12, 0xe4, 0xb2, + 0x66, 0x13, 0x69, 0x17, 0x36, 0x1b, 0x73, 0x90, 0xc9, 0x94, 0xf5, 0xe1, 0xdc, 0xb3, 0x05, 0x41, 0x72, 0x93, 0x46, + 0x64, 0xdb, 0x5d, 0x8a, 0x8f, 0x63, 0x40, 0x23, 0x64, 0x05, 0xbe, 0x50, 0x58, 0xe4, 0xc0, 0x75, 0x16, 0xbe, 0xe3, + 0x6f, 0xb4, 0x54, 0xf4, 0xd5, 0x60, 0x80, 0x0b, 0xf3, 0x30, 0x43, 0x39, 0x9f, 0x42, 0x05, 0x0f, 0xfd, 0x04, 0x22, + 0x0a, 0x5f, 0xad, 0xf6, 0xe1, 0x1d, 0x1d, 0xd7, 0x26, 0x38, 0x7d, 0xba, 0x9f, 0xd5, 0x9b, 0x19, 0x30, 0x0e, 0x46, + 0x5a, 0xe6, 0xa2, 0xd0, 0xc9, 0x9b, 0xec, 0x42, 0x74, 0x1b, 0x0d, 0x66, 0x42, 0x1c, 0x11, 0x88, 0x67, 0x06, 0x1e, + 0x79, 0xf0, 0xc7, 0x46, 0x2d, 0x52, 0xcc, 0xc6, 0x7e, 0x83, 0xa0, 0xd4, 0xb5, 0x84, 0xd5, 0x4a, 0xd9, 0xd8, 0x22, + 0x26, 0xc7, 0x46, 0x19, 0x29, 0xfb, 0x29, 0x83, 0x98, 0x56, 0x66, 0x1c, 0xdc, 0x6d, 0xf5, 0xb7, 0xd5, 0x7e, 0xde, + 0xe3, 0xf6, 0x1a, 0x8f, 0x1b, 0x8f, 0x7d, 0x03, 0xa8, 0xe5, 0xc6, 0x06, 0xb7, 0x16, 0xe6, 0xb1, 0x35, 0x87, 0x65, + 0x9b, 0x10, 0x14, 0xa5, 0x87, 0xba, 0xbd, 0xb9, 0xf5, 0x11, 0xfb, 0x94, 0x99, 0x93, 0x42, 0xba, 0x0f, 0x72, 0xf4, + 0x80, 0x40, 0xe7, 0xf6, 0x67, 0x45, 0x17, 0x2a, 0x99, 0xb8, 0x1c, 0xe3, 0x2f, 0xc1, 0x6d, 0x5e, 0x3f, 0xba, 0xbe, + 0x36, 0x9b, 0xfc, 0xfa, 0x3a, 0xc2, 0xa1, 0x59, 0x77, 0x14, 0xf0, 0x82, 0xd1, 0xa0, 0x0c, 0xea, 0x64, 0x36, 0x7e, + 0xb3, 0x5d, 0x35, 0xf6, 0x9e, 0x56, 0x78, 0x07, 0xcb, 0x63, 0x1a, 0xdf, 0x72, 0x83, 0xec, 0x73, 0x80, 0x37, 0xeb, + 0xf3, 0x41, 0xf7, 0x4d, 0xac, 0xd0, 0xc1, 0xc1, 0x9b, 0x58, 0xa2, 0xde, 0x15, 0x33, 0x77, 0x6e, 0xe0, 0x07, 0xdd, + 0xe7, 0x66, 0xf8, 0x32, 0x40, 0x80, 0x2b, 0xb6, 0x29, 0xd9, 0xbc, 0x35, 0x51, 0x27, 0x52, 0x88, 0x6a, 0x0d, 0xb1, + 0x75, 0x1d, 0x48, 0xa0, 0xd7, 0x37, 0x21, 0xb4, 0xbb, 0x8c, 0x30, 0x60, 0xe1, 0x4b, 0x2f, 0x35, 0x96, 0xcc, 0x58, + 0x31, 0x61, 0xc5, 0x6a, 0xf5, 0x9e, 0x5a, 0xcf, 0xb3, 0x8d, 0x20, 0x89, 0xaa, 0xdb, 0x68, 0x50, 0x33, 0x7e, 0x10, + 0x1f, 0xe8, 0x00, 0xef, 0xbf, 0x89, 0x0b, 0x84, 0xc0, 0xc2, 0x88, 0x8b, 0x85, 0xf7, 0xb2, 0xca, 0x6a, 0xeb, 0x52, + 0xa0, 0xb2, 0x91, 0x9c, 0xb4, 0xf0, 0x94, 0x64, 0xe5, 0x1a, 0x5d, 0x4c, 0xbb, 0x8d, 0x46, 0x8e, 0x64, 0x9c, 0xf5, + 0xf3, 0x01, 0xe6, 0xb8, 0x80, 0xcb, 0xd4, 0xed, 0x75, 0x98, 0xb3, 0x1a, 0xe5, 0x72, 0xf3, 0x5d, 0xda, 0xb1, 0xa6, + 0x8f, 0xe8, 0x3a, 0x00, 0xc6, 0x23, 0x1a, 0x10, 0x89, 0x5d, 0x40, 0x16, 0x16, 0xc8, 0xca, 0x03, 0x59, 0x18, 0x20, + 0x2b, 0xd4, 0x9b, 0x43, 0xb8, 0x20, 0x85, 0xd2, 0x2d, 0x8a, 0x5e, 0x0f, 0x6c, 0xe9, 0x9c, 0x26, 0x30, 0x37, 0xb1, + 0x15, 0xdc, 0x72, 0x80, 0x03, 0x85, 0xf3, 0xc3, 0x53, 0x64, 0x19, 0x45, 0x26, 0xc6, 0x2b, 0xbe, 0x35, 0x7f, 0x92, + 0x5b, 0x7c, 0x67, 0x7f, 0xdc, 0x05, 0xca, 0xa4, 0xe7, 0x35, 0x6d, 0x03, 0x77, 0x11, 0xd1, 0xa2, 0x24, 0x02, 0xb4, + 0x76, 0xe1, 0xfd, 0x44, 0xfd, 0xc5, 0x33, 0x65, 0x03, 0x31, 0x88, 0x06, 0x51, 0x58, 0x04, 0xa4, 0xf3, 0xcf, 0x3f, + 0x23, 0xd4, 0x13, 0x10, 0x47, 0xc7, 0x9d, 0x6c, 0xcd, 0x36, 0x6a, 0x44, 0x49, 0x94, 0xc6, 0x3e, 0x4c, 0x03, 0xec, + 0x8c, 0x28, 0x0a, 0x5e, 0x3b, 0x29, 0x87, 0xf1, 0xa1, 0x36, 0x0c, 0x33, 0xa8, 0x2a, 0xf0, 0xc4, 0xe5, 0x72, 0x33, + 0xcc, 0x8f, 0x81, 0xaa, 0x30, 0x31, 0x56, 0x90, 0x7d, 0x02, 0x8c, 0x11, 0x76, 0x70, 0xc0, 0xfa, 0x62, 0x10, 0xbc, + 0xe9, 0x55, 0x5d, 0x87, 0xeb, 0x70, 0xe1, 0x62, 0x0a, 0x71, 0xd6, 0x57, 0x2b, 0xfb, 0x97, 0x7c, 0x30, 0xd2, 0x0c, + 0x3c, 0xce, 0x16, 0x9c, 0xb1, 0x62, 0xb7, 0x2c, 0x96, 0x68, 0xf9, 0x3b, 0x98, 0xed, 0xb9, 0xa8, 0x79, 0xdc, 0x4d, + 0xb5, 0xed, 0xa1, 0x3e, 0x37, 0x1a, 0x85, 0x20, 0x66, 0x6d, 0x75, 0xa4, 0xe1, 0xb9, 0x0e, 0xf3, 0x6a, 0xb1, 0x67, + 0x33, 0x55, 0x86, 0x10, 0x85, 0x23, 0x25, 0x01, 0xbb, 0x6d, 0x43, 0x27, 0xe1, 0x47, 0x9d, 0x4a, 0x3a, 0x16, 0x12, + 0xa0, 0xc0, 0x91, 0xb9, 0x9c, 0x37, 0x21, 0xe2, 0x19, 0xda, 0x41, 0xe4, 0x02, 0x13, 0x9a, 0xba, 0x6c, 0xe9, 0x62, + 0x39, 0x45, 0x33, 0xb9, 0x50, 0x6c, 0x31, 0x87, 0xf3, 0xbd, 0x4c, 0xcb, 0x72, 0x9e, 0x7d, 0xae, 0xa7, 0x80, 0xfd, + 0xe5, 0xad, 0x9e, 0x31, 0xb1, 0x88, 0xdc, 0x3c, 0xbf, 0x5a, 0x71, 0xff, 0xcd, 0x0b, 0xfc, 0x88, 0x74, 0x0e, 0xbf, + 0xe2, 0x8f, 0x94, 0x3c, 0x6a, 0x7c, 0xc5, 0x13, 0x4e, 0x2c, 0x6f, 0x90, 0xbc, 0x79, 0x7d, 0xf5, 0xe2, 0xdd, 0x8b, + 0xf7, 0x4f, 0xaf, 0x5f, 0xbc, 0x7a, 0xf6, 0xe2, 0xd5, 0x8b, 0x77, 0x1f, 0xf1, 0x3f, 0x94, 0x7c, 0x3d, 0x6a, 0x9f, + 0xb7, 0xf0, 0x07, 0xf2, 0xf5, 0xa8, 0x83, 0x6f, 0x35, 0xf9, 0x7a, 0x74, 0x82, 0x73, 0x45, 0xbe, 0x1e, 0x76, 0x8e, + 0x8e, 0xf1, 0x42, 0xdb, 0x26, 0x73, 0x39, 0x69, 0xb7, 0xf0, 0x3f, 0xee, 0x0b, 0xc4, 0xfb, 0x6a, 0x16, 0x13, 0xb6, + 0x61, 0xfc, 0x60, 0xca, 0xd0, 0xa1, 0x32, 0x86, 0x28, 0x17, 0x01, 0x3a, 0x4d, 0x55, 0x88, 0x4e, 0x36, 0x88, 0x31, + 0xd8, 0x30, 0x02, 0x5a, 0x71, 0xe2, 0xda, 0xe1, 0x47, 0x6d, 0x76, 0x0c, 0xf4, 0x89, 0x97, 0xc2, 0x71, 0xa9, 0xc2, + 0x69, 0x3b, 0x2d, 0xc6, 0x38, 0x97, 0xb2, 0x88, 0x17, 0xc0, 0x08, 0x18, 0xad, 0x05, 0x3f, 0x2a, 0xa3, 0x25, 0x89, + 0x0b, 0xd2, 0xee, 0xb5, 0x53, 0x71, 0x41, 0x3a, 0xbd, 0x0e, 0xfc, 0x39, 0xed, 0x9d, 0xa6, 0xed, 0x16, 0x3a, 0x0c, + 0xc6, 0xf1, 0x47, 0x0d, 0xad, 0xfb, 0x03, 0xec, 0xba, 0x50, 0xff, 0x14, 0xda, 0xab, 0xf4, 0x84, 0x53, 0xc7, 0xb6, + 0xbb, 0xe2, 0x82, 0x19, 0x3d, 0x2c, 0xff, 0x01, 0x50, 0xdb, 0x38, 0x74, 0x94, 0x1b, 0xc7, 0xfd, 0xe2, 0x47, 0x02, + 0xd5, 0x42, 0xb2, 0xc4, 0x6c, 0xd5, 0x42, 0xc0, 0x34, 0x9a, 0x6c, 0x30, 0x07, 0x4a, 0x94, 0x2c, 0xb4, 0x0f, 0x2b, + 0xaf, 0x9a, 0x12, 0x25, 0x73, 0x39, 0x8f, 0x6b, 0xaa, 0x86, 0x5f, 0x03, 0x33, 0xc7, 0x7d, 0xae, 0x5e, 0xd1, 0x57, + 0x71, 0x8d, 0xe7, 0x09, 0x59, 0xbb, 0x70, 0x5b, 0xfc, 0xe2, 0xac, 0x28, 0x6a, 0xe0, 0x2a, 0x01, 0xeb, 0x47, 0xd5, + 0xd4, 0x17, 0xf0, 0x7e, 0x1e, 0x6b, 0xe8, 0x4b, 0x12, 0x50, 0xcf, 0x9f, 0x4a, 0x33, 0xae, 0x52, 0x19, 0xed, 0x15, + 0xd1, 0xc6, 0x2c, 0xc8, 0x2b, 0xa2, 0x2f, 0x94, 0x01, 0x82, 0x24, 0xbc, 0x2f, 0x06, 0x70, 0xe0, 0xdb, 0x01, 0x4a, + 0x43, 0xe7, 0x40, 0xad, 0x54, 0x99, 0x09, 0x99, 0x4f, 0x13, 0x1c, 0x00, 0x34, 0x4f, 0x95, 0x0a, 0xca, 0x7c, 0x62, + 0x89, 0x82, 0xa1, 0xff, 0x16, 0x6e, 0x80, 0xc3, 0xd8, 0xa0, 0x62, 0x90, 0x7d, 0x4f, 0xd4, 0xf3, 0xdb, 0xe7, 0xad, + 0xa3, 0xaf, 0x41, 0xfe, 0x48, 0x79, 0x7b, 0x8f, 0xbf, 0x03, 0x4a, 0x6e, 0xc3, 0x59, 0xb5, 0xb1, 0x8f, 0x44, 0xd6, + 0x0d, 0x01, 0x72, 0xa8, 0xd1, 0x91, 0x79, 0x4a, 0xb0, 0x8b, 0xf4, 0x21, 0x69, 0xb7, 0x20, 0x7c, 0xd8, 0x0e, 0xca, + 0xf7, 0xd3, 0x06, 0x4c, 0x75, 0x72, 0xdb, 0x04, 0x5a, 0x0d, 0xaf, 0x0b, 0xdd, 0x35, 0x79, 0x72, 0x87, 0x55, 0x80, + 0x33, 0xec, 0x90, 0x35, 0xc4, 0xa1, 0x40, 0x2e, 0xec, 0xaa, 0xdd, 0x00, 0x9a, 0x8a, 0x8e, 0x7d, 0xe5, 0xce, 0x1b, + 0x47, 0x5d, 0x34, 0x93, 0xd3, 0xc3, 0xaf, 0x07, 0x07, 0xb1, 0x6c, 0x90, 0x47, 0x08, 0x2f, 0x29, 0x58, 0x31, 0x83, + 0xd7, 0x17, 0xb7, 0x4c, 0x7c, 0xaa, 0x02, 0xea, 0xb8, 0x50, 0xb5, 0x63, 0xad, 0xea, 0xac, 0xdc, 0x0d, 0x7e, 0x4c, + 0x1d, 0xd4, 0x08, 0xd2, 0xec, 0xe8, 0x3a, 0x35, 0x28, 0xd7, 0x5c, 0xb4, 0x60, 0x5b, 0x36, 0x3e, 0x52, 0xf4, 0xc3, + 0xa3, 0xe6, 0xd7, 0x60, 0xc2, 0x35, 0xd3, 0xa4, 0x47, 0x8d, 0x47, 0xe8, 0x87, 0x47, 0x81, 0x93, 0x1d, 0xaf, 0xd8, + 0x13, 0xcf, 0x8d, 0xfc, 0x64, 0xb9, 0xd2, 0x9f, 0x40, 0xb2, 0x2f, 0xc8, 0x4f, 0x80, 0xe5, 0x94, 0xfc, 0x14, 0xcb, + 0x26, 0x04, 0x1f, 0x24, 0x3f, 0xc5, 0x05, 0xfc, 0xc8, 0xc9, 0x4f, 0x31, 0x60, 0x3b, 0x9e, 0x9a, 0x1f, 0x45, 0x09, + 0x0c, 0x70, 0xec, 0x92, 0xd6, 0xbf, 0xab, 0x58, 0xad, 0xc4, 0xc1, 0x81, 0xb4, 0xbf, 0xe8, 0x65, 0x76, 0x70, 0x90, + 0x5f, 0x4c, 0xab, 0xbe, 0x99, 0xde, 0x45, 0x5f, 0x0c, 0x42, 0xe1, 0xc0, 0x34, 0x8d, 0x87, 0x33, 0xfe, 0x14, 0x52, + 0x56, 0xd3, 0x40, 0xf3, 0xb8, 0x73, 0xff, 0xec, 0x1c, 0xc3, 0xbf, 0xf7, 0x83, 0x82, 0x3f, 0x97, 0x7c, 0x17, 0x69, + 0xb3, 0xe6, 0x59, 0x85, 0x6c, 0x97, 0x01, 0x3e, 0x63, 0x86, 0x9a, 0xe2, 0xe0, 0x80, 0x5f, 0x04, 0xb8, 0x8c, 0x19, + 0x6a, 0x04, 0x16, 0x7b, 0x0f, 0x4b, 0x7b, 0x32, 0xc3, 0x35, 0xc1, 0xb3, 0xb2, 0xbc, 0x5f, 0x0c, 0x2e, 0xb4, 0xa3, + 0x26, 0x61, 0xf0, 0x69, 0x45, 0x5a, 0x6e, 0x93, 0x75, 0x45, 0x53, 0x5d, 0xb6, 0xbb, 0x48, 0x12, 0xd5, 0x10, 0x97, + 0x97, 0x6d, 0x0c, 0x2a, 0xf9, 0x9e, 0x22, 0x32, 0x15, 0xc4, 0x3b, 0xc8, 0x2d, 0x73, 0x99, 0x2a, 0x3c, 0xe5, 0xa9, + 0xf0, 0x72, 0xf6, 0x6b, 0x6f, 0x3d, 0x6d, 0x5c, 0x16, 0x4d, 0xcf, 0x0c, 0x8b, 0x9e, 0x2a, 0x5d, 0xed, 0x60, 0x93, + 0xaa, 0x01, 0xbc, 0xda, 0x57, 0x62, 0x1e, 0xb3, 0xfe, 0x65, 0x0c, 0xa2, 0x22, 0xab, 0x46, 0x1b, 0x32, 0xe1, 0x73, + 0x9d, 0x2a, 0x18, 0xa8, 0x29, 0x7c, 0x01, 0x64, 0x2a, 0xab, 0x0c, 0xb3, 0x7d, 0xc3, 0x50, 0x40, 0x40, 0x81, 0x4b, + 0xc2, 0x02, 0x09, 0x1e, 0x6e, 0x3f, 0x02, 0xc2, 0x51, 0x27, 0x17, 0x76, 0x72, 0x17, 0x0a, 0xba, 0x13, 0x83, 0x0b, + 0xdd, 0x45, 0xa2, 0xd1, 0x70, 0xdc, 0xf6, 0xa5, 0x30, 0x83, 0x68, 0xb6, 0x07, 0x97, 0xac, 0x8b, 0x54, 0xb3, 0x59, + 0x1a, 0x40, 0x5e, 0xb6, 0x56, 0x2b, 0x75, 0xe1, 0x1b, 0xe9, 0xf9, 0x73, 0xdc, 0xf0, 0x5d, 0x5e, 0xf0, 0xfc, 0x4d, + 0x92, 0x7e, 0x04, 0x54, 0x15, 0xf8, 0x6c, 0x39, 0x8f, 0x70, 0x64, 0x1e, 0x74, 0x83, 0xbf, 0xe6, 0x21, 0xae, 0x08, + 0x47, 0xee, 0x8d, 0xb7, 0x68, 0x50, 0x0d, 0x96, 0x67, 0x65, 0x78, 0x72, 0x9e, 0x5c, 0x03, 0xe3, 0xa0, 0xff, 0x56, + 0x68, 0x59, 0xfd, 0x4e, 0x72, 0x17, 0xa8, 0x43, 0xf9, 0x67, 0xc7, 0xdc, 0xa8, 0xd6, 0xbb, 0x5d, 0x23, 0x39, 0x8e, + 0x7c, 0x55, 0x08, 0xdf, 0xff, 0x9d, 0x77, 0x0f, 0xdb, 0xee, 0xb9, 0xed, 0x65, 0xd9, 0x03, 0x70, 0xde, 0xeb, 0x35, + 0xc2, 0xbf, 0xc9, 0x9d, 0x6f, 0xef, 0x46, 0xd7, 0x52, 0x3c, 0xa1, 0x9a, 0x46, 0x8d, 0x37, 0xc6, 0xf0, 0xcd, 0xca, + 0x59, 0xdd, 0x6f, 0x8d, 0x83, 0xfd, 0x5b, 0xdd, 0x43, 0xe8, 0x84, 0xda, 0x33, 0x41, 0x56, 0xf6, 0x35, 0x01, 0x33, + 0x64, 0x60, 0xfa, 0xb6, 0x03, 0x1e, 0x7e, 0x8c, 0x14, 0x1c, 0x7a, 0x2d, 0x9f, 0x44, 0x21, 0x26, 0x69, 0xcd, 0x8d, + 0x18, 0x52, 0x6c, 0x1f, 0xc6, 0xe5, 0x74, 0x8d, 0x42, 0xae, 0x7b, 0xac, 0xea, 0xc4, 0xb4, 0xea, 0xc6, 0x48, 0x1d, + 0x6c, 0x93, 0x05, 0x67, 0x55, 0xef, 0x46, 0x42, 0xa9, 0x5e, 0x54, 0x33, 0xaf, 0x62, 0x36, 0xdb, 0xe6, 0x99, 0x61, + 0xfb, 0xee, 0x9a, 0x02, 0x43, 0xde, 0xfd, 0x32, 0x5c, 0xd4, 0x25, 0x1c, 0xbb, 0x71, 0x00, 0x59, 0x49, 0x2e, 0x97, + 0xee, 0x4d, 0x34, 0xde, 0x97, 0x83, 0x75, 0xf9, 0x42, 0x5a, 0x80, 0x07, 0xd5, 0x48, 0x45, 0x16, 0x72, 0x06, 0xfe, + 0x79, 0xc1, 0x9a, 0x7e, 0x88, 0x7f, 0x85, 0x03, 0xbe, 0x42, 0xd2, 0xd4, 0xaa, 0x9f, 0xe0, 0xe5, 0x22, 0x50, 0x78, + 0xdb, 0xba, 0x9f, 0x64, 0xe8, 0x22, 0x5a, 0xd7, 0xa9, 0x58, 0x2f, 0xcc, 0xba, 0x62, 0xa5, 0x2c, 0x1c, 0x1c, 0x77, + 0x31, 0x5a, 0xa7, 0xce, 0x63, 0xd3, 0x3d, 0x77, 0xf4, 0x50, 0xf0, 0x99, 0x71, 0xa4, 0x7b, 0x56, 0x40, 0xfc, 0xaa, + 0x50, 0x9f, 0xf6, 0xb3, 0x0c, 0xdf, 0xf3, 0xed, 0xc3, 0x3d, 0x61, 0xc9, 0x73, 0x96, 0x6f, 0x50, 0xc3, 0x02, 0x29, + 0xa0, 0x50, 0x0a, 0x8b, 0xd5, 0x2a, 0x16, 0x26, 0xaa, 0x81, 0x0b, 0x6a, 0xeb, 0x5e, 0xaf, 0x30, 0xfa, 0x3b, 0xa8, + 0x8b, 0xbd, 0x7a, 0xc4, 0x98, 0xb0, 0xa2, 0xf0, 0xd2, 0x49, 0x65, 0x41, 0x5f, 0xbb, 0xfa, 0x10, 0xd5, 0x94, 0x7b, + 0xb1, 0xd1, 0xf7, 0xbe, 0xe3, 0x33, 0x26, 0x17, 0xf0, 0x6c, 0x10, 0x66, 0x44, 0x31, 0xed, 0xbf, 0x81, 0x82, 0xc0, + 0xdb, 0x33, 0x3c, 0xc4, 0x47, 0xe0, 0xab, 0x3c, 0xad, 0x93, 0x99, 0x7f, 0x8c, 0x22, 0x32, 0xc1, 0x22, 0xa3, 0x5e, + 0x04, 0x5e, 0x43, 0x20, 0x42, 0x11, 0x12, 0x31, 0x31, 0x8a, 0x7a, 0x91, 0x71, 0x52, 0x8a, 0xc0, 0x6a, 0x0c, 0x94, + 0xdc, 0x11, 0x9e, 0xab, 0x8a, 0x88, 0x85, 0x35, 0x75, 0x50, 0x89, 0xa5, 0xc6, 0x4c, 0xfb, 0xa8, 0x53, 0x81, 0xb0, + 0xc8, 0x36, 0x05, 0x65, 0xbd, 0xa1, 0x2e, 0xc0, 0x92, 0x18, 0xd3, 0x5b, 0x9e, 0x5c, 0x03, 0x37, 0xc7, 0x46, 0xae, + 0xe8, 0x92, 0x5f, 0x81, 0x7a, 0x3a, 0x2d, 0xf0, 0xb5, 0x61, 0xd8, 0x46, 0x29, 0x5d, 0x13, 0x8e, 0x33, 0x52, 0x24, + 0xf4, 0x16, 0xa2, 0x3a, 0xcc, 0xb8, 0x48, 0x73, 0x3c, 0xa3, 0xb7, 0xe9, 0x14, 0xcf, 0xb8, 0x78, 0x62, 0x97, 0x3d, + 0x1d, 0x41, 0x92, 0xff, 0x58, 0xac, 0x89, 0x79, 0x94, 0xea, 0x77, 0xc5, 0x8a, 0x47, 0xc0, 0xab, 0xa8, 0x18, 0x75, + 0x47, 0xc6, 0xa6, 0x9c, 0xe9, 0xca, 0x78, 0xfd, 0xb5, 0x8e, 0x29, 0xce, 0x70, 0x8e, 0x92, 0x5c, 0x62, 0xd6, 0x13, + 0xe9, 0x6b, 0x88, 0xe8, 0x9c, 0x61, 0xfb, 0xa0, 0x15, 0xbf, 0x65, 0xf9, 0x33, 0x59, 0xbc, 0x37, 0x5b, 0x3e, 0x47, + 0x50, 0x08, 0x5c, 0x54, 0x44, 0x13, 0x6e, 0xf7, 0x16, 0x3d, 0x59, 0x35, 0x45, 0x6f, 0x6d, 0x53, 0x6e, 0x88, 0x53, + 0x08, 0x85, 0x9b, 0x4c, 0x79, 0xa3, 0x8d, 0x59, 0xaf, 0xf5, 0x9d, 0x46, 0xa7, 0xa8, 0x2c, 0x89, 0x30, 0xac, 0x55, + 0x53, 0xa5, 0x92, 0x88, 0xa6, 0x72, 0x12, 0xde, 0xd2, 0x00, 0x3b, 0x55, 0x38, 0x93, 0x0b, 0xa1, 0x53, 0x19, 0xe0, + 0x0d, 0xad, 0x36, 0xd7, 0xf2, 0xd6, 0x42, 0x4c, 0xe3, 0x3b, 0xfb, 0x83, 0xe1, 0x6b, 0xa3, 0xe2, 0x7f, 0x0b, 0x86, + 0x3d, 0x2a, 0x15, 0x00, 0x3f, 0x30, 0x9c, 0x05, 0xc8, 0x59, 0x7e, 0xf2, 0x16, 0xc0, 0x67, 0x59, 0xc8, 0x3b, 0x48, + 0x65, 0x26, 0xf5, 0x0e, 0x52, 0x19, 0xa4, 0x1a, 0x5f, 0xee, 0x7d, 0x51, 0x29, 0x8b, 0xc2, 0x06, 0x89, 0xc2, 0xa5, + 0x3a, 0x58, 0x12, 0x91, 0x40, 0xbb, 0x46, 0x94, 0x9b, 0x71, 0x01, 0x41, 0xfd, 0xa0, 0x71, 0xfb, 0x4d, 0x6f, 0xe1, + 0xfb, 0xce, 0xe6, 0x33, 0x9f, 0x7f, 0x67, 0xf3, 0x4d, 0x47, 0x1e, 0xe3, 0xeb, 0xb7, 0x9d, 0xc6, 0x32, 0x5e, 0x3a, + 0xac, 0xfd, 0x50, 0x3e, 0xa1, 0xd2, 0x32, 0x4f, 0x55, 0x93, 0x36, 0x9e, 0x04, 0x48, 0xd9, 0xac, 0x78, 0xb8, 0x0e, + 0x6e, 0xb7, 0x0e, 0x63, 0xde, 0x24, 0x6d, 0x84, 0x0e, 0x9d, 0x70, 0x25, 0x62, 0x23, 0x39, 0x1d, 0x3e, 0x3a, 0x82, + 0xbb, 0x97, 0x99, 0xda, 0xf0, 0x95, 0xb2, 0xd5, 0x9a, 0xed, 0xd6, 0x21, 0xdf, 0x59, 0xa5, 0xd1, 0xc6, 0x33, 0x46, + 0x96, 0xe0, 0x5c, 0x46, 0x0b, 0xab, 0x6a, 0x00, 0x27, 0xce, 0x17, 0xe2, 0xb7, 0x05, 0x1d, 0x99, 0xef, 0x43, 0x9b, + 0xf2, 0x7a, 0xa1, 0x7d, 0x52, 0x93, 0xc3, 0x20, 0x3a, 0xc8, 0x95, 0x0c, 0x72, 0x62, 0x7e, 0x44, 0x92, 0x53, 0x74, + 0xd1, 0xee, 0x25, 0xa7, 0x87, 0xfc, 0x90, 0xa7, 0xc0, 0xc3, 0xc6, 0x4d, 0x5f, 0xa1, 0xd9, 0xf6, 0x75, 0x1e, 0x2f, + 0x86, 0x3c, 0x73, 0xcd, 0x57, 0x1d, 0x94, 0xa9, 0x76, 0x8e, 0x90, 0x05, 0x28, 0xe6, 0x7b, 0x09, 0xb2, 0xeb, 0xdd, + 0x1c, 0xf2, 0x14, 0xfa, 0x81, 0x5a, 0x1d, 0x5b, 0xab, 0x1c, 0xdc, 0x6f, 0x0b, 0x40, 0x30, 0xdf, 0x51, 0x6d, 0x2e, + 0x36, 0xbd, 0x19, 0x57, 0x9d, 0x1d, 0xf2, 0x6a, 0x84, 0x61, 0x99, 0xed, 0xfe, 0xfc, 0xd4, 0xaa, 0x2e, 0x0f, 0x03, + 0x88, 0xfc, 0xb6, 0xe0, 0x22, 0xec, 0x34, 0xec, 0xd6, 0xe5, 0x84, 0x9d, 0xd6, 0x67, 0x19, 0x14, 0xd9, 0xee, 0x75, + 0x6b, 0xa6, 0xf5, 0xd9, 0x5e, 0x81, 0x8f, 0x20, 0x4c, 0xca, 0xac, 0x74, 0x06, 0x57, 0xe8, 0x87, 0x1f, 0x90, 0x6b, + 0xfd, 0xf5, 0x42, 0xfb, 0xfc, 0x12, 0x11, 0x20, 0xbb, 0xea, 0xba, 0xac, 0x0e, 0x7d, 0x94, 0x4d, 0x7c, 0x3d, 0xe4, + 0xc1, 0xca, 0x3d, 0xbd, 0x9d, 0xcb, 0xd4, 0xe3, 0x6b, 0xaf, 0x95, 0x6e, 0x21, 0x27, 0x10, 0x0f, 0xd7, 0x5d, 0x58, + 0x16, 0xe4, 0xec, 0xe6, 0x16, 0x4a, 0x86, 0x13, 0xf7, 0xa5, 0x3f, 0x30, 0x7b, 0xdd, 0xc0, 0x2f, 0x92, 0x53, 0x98, + 0xfa, 0x66, 0x0f, 0x87, 0x1d, 0xe8, 0xc3, 0xc0, 0x61, 0xb3, 0x41, 0x9f, 0x59, 0x41, 0xe4, 0x31, 0x2f, 0x2c, 0x9e, + 0x5d, 0x92, 0x76, 0x8f, 0xa7, 0x6e, 0x33, 0x19, 0xd1, 0xa8, 0xdd, 0xe4, 0xc1, 0xcc, 0x00, 0xbf, 0x5c, 0xd9, 0xb0, + 0x88, 0x5f, 0xa7, 0x00, 0x4a, 0xbe, 0x58, 0xb5, 0x3e, 0x15, 0xbc, 0xea, 0x0d, 0xa7, 0x9b, 0xe9, 0x7e, 0xdd, 0xe0, + 0x76, 0xd7, 0xc3, 0x13, 0x9e, 0x40, 0xb1, 0x68, 0xed, 0x27, 0x3e, 0x01, 0x0e, 0x28, 0x69, 0xdd, 0x3f, 0x05, 0x17, + 0xca, 0x12, 0x96, 0xdb, 0xe5, 0x66, 0x5b, 0xe5, 0x2c, 0x1c, 0x6d, 0xc9, 0x80, 0x3b, 0xd8, 0x84, 0x28, 0x74, 0x70, + 0xd8, 0xc1, 0x49, 0xbb, 0xdd, 0x39, 0xc5, 0xc9, 0xc9, 0x29, 0x0c, 0xb4, 0x91, 0x9c, 0x1e, 0xce, 0x94, 0x05, 0x60, + 0x90, 0xb3, 0x76, 0xed, 0x3e, 0x82, 0x70, 0x49, 0xa1, 0x78, 0xcd, 0x0f, 0xe3, 0xb8, 0x9d, 0xdc, 0x6f, 0xb5, 0x4f, + 0xcf, 0x1b, 0x00, 0xa0, 0xa6, 0xfb, 0x70, 0x35, 0x5e, 0x2f, 0x74, 0xbd, 0x4a, 0x89, 0xf0, 0xf5, 0x6a, 0x0d, 0x5f, + 0xad, 0xd1, 0x5e, 0x57, 0x53, 0xf0, 0x55, 0x9d, 0x70, 0x6e, 0x8b, 0x78, 0xa5, 0x4d, 0xb8, 0x2d, 0x62, 0x3b, 0x90, + 0x18, 0xa4, 0xf3, 0xe4, 0xb4, 0x73, 0x8a, 0xec, 0x58, 0xb4, 0xc3, 0x8f, 0x72, 0x9f, 0x6c, 0x15, 0x69, 0x68, 0x40, + 0x92, 0x72, 0x76, 0x72, 0x01, 0x12, 0x35, 0x27, 0x97, 0xed, 0xe6, 0x8c, 0x25, 0x7e, 0x02, 0x26, 0x15, 0x96, 0xb3, + 0x5c, 0x05, 0x97, 0x14, 0x00, 0xe2, 0x02, 0x8c, 0x8b, 0xee, 0x9f, 0xf6, 0xee, 0x27, 0xa7, 0x67, 0x1d, 0x4b, 0xf4, + 0xf8, 0x45, 0xa7, 0x96, 0x66, 0xa6, 0x9e, 0x9c, 0x9a, 0x34, 0xe8, 0x3a, 0xb9, 0x7f, 0x0a, 0x65, 0x5c, 0x4a, 0x58, + 0x0a, 0xc2, 0x3c, 0x54, 0xc5, 0x20, 0xb6, 0x43, 0x5a, 0xcb, 0x3d, 0xab, 0x65, 0x9f, 0x9f, 0x1c, 0xdf, 0x3f, 0x0d, + 0xa1, 0x56, 0xce, 0xc2, 0x2c, 0xb4, 0x9b, 0x88, 0x9f, 0x1d, 0x2c, 0x2d, 0x3a, 0x4c, 0x4e, 0xd3, 0xad, 0x09, 0xda, + 0x4d, 0x73, 0x68, 0x70, 0x20, 0x50, 0x38, 0x3e, 0x15, 0x4e, 0x5f, 0x12, 0xdc, 0x8f, 0x55, 0x86, 0x26, 0xa1, 0xc2, + 0xd9, 0xdf, 0x53, 0x06, 0x2f, 0x39, 0x86, 0x57, 0x95, 0x8f, 0xa9, 0xf8, 0x42, 0xd5, 0x1b, 0x0a, 0xb1, 0x2b, 0xc4, + 0x20, 0x72, 0x91, 0xb5, 0xeb, 0xb9, 0x3f, 0x81, 0x8b, 0x30, 0x13, 0x70, 0xa1, 0xe9, 0x95, 0xa0, 0x15, 0x2f, 0x30, + 0x0c, 0x1d, 0x6a, 0xcd, 0xb0, 0x7a, 0x3c, 0x75, 0x26, 0x05, 0xa1, 0x6e, 0xeb, 0x39, 0xff, 0x5e, 0xb9, 0xa4, 0xbc, + 0xca, 0x4e, 0x4e, 0x51, 0xe2, 0x2e, 0xcb, 0x93, 0x36, 0x4a, 0x02, 0x13, 0x12, 0x77, 0x24, 0x67, 0x19, 0xe9, 0x47, + 0xb7, 0x11, 0x8e, 0xee, 0x22, 0x1c, 0x59, 0x1f, 0xe6, 0x0f, 0xe0, 0x3c, 0x1f, 0xe1, 0xc8, 0xba, 0x32, 0x47, 0x38, + 0xd2, 0x4c, 0x40, 0x48, 0xab, 0x68, 0x80, 0x73, 0x28, 0x6d, 0x3c, 0xab, 0xcb, 0xd2, 0x8f, 0xfd, 0x57, 0xe9, 0x7a, + 0x6d, 0x53, 0x02, 0x29, 0x73, 0x6a, 0x76, 0xa8, 0x7d, 0x92, 0x39, 0xa2, 0x9e, 0x59, 0x8f, 0x30, 0x08, 0x20, 0xf4, + 0xce, 0x3f, 0xe9, 0x56, 0x45, 0xc3, 0x60, 0xc7, 0xb0, 0xd2, 0xe0, 0x67, 0x1e, 0x85, 0x67, 0x58, 0x84, 0xc7, 0xc2, + 0x17, 0x06, 0xb1, 0xc2, 0xff, 0xce, 0xa5, 0x9c, 0xfb, 0xdf, 0x5a, 0x96, 0xbf, 0xe0, 0x21, 0x10, 0x67, 0xd1, 0x02, + 0x96, 0x5b, 0x36, 0xf8, 0xce, 0x90, 0xd5, 0x47, 0x70, 0x3d, 0x76, 0x01, 0xd2, 0x40, 0x22, 0xbc, 0x36, 0x02, 0x95, + 0x97, 0x0f, 0xaf, 0x6d, 0xb0, 0x1e, 0xf3, 0x09, 0xd1, 0xba, 0x20, 0x20, 0xaf, 0x84, 0x0b, 0x8d, 0x49, 0xc1, 0x94, + 0x8a, 0x6c, 0x14, 0xbb, 0x48, 0x0a, 0xff, 0x2c, 0xa1, 0x4f, 0x19, 0x8b, 0xc8, 0x74, 0x58, 0x9f, 0xad, 0x15, 0x87, + 0x73, 0x59, 0xa8, 0xd4, 0xbe, 0x51, 0xe2, 0xc1, 0x58, 0x3d, 0x55, 0x9f, 0xe6, 0xd9, 0x1a, 0xdb, 0x3b, 0xec, 0xb2, + 0x90, 0xbb, 0xd2, 0x0e, 0x4b, 0x65, 0xd9, 0xfa, 0x5b, 0x13, 0x52, 0xb5, 0x19, 0x05, 0x13, 0xad, 0x06, 0x54, 0x85, + 0xb2, 0x80, 0xc2, 0x36, 0x1c, 0x4a, 0xba, 0x2c, 0x4b, 0xa6, 0xcb, 0x72, 0x19, 0x4e, 0x5a, 0xad, 0xf5, 0x1a, 0x17, + 0xcc, 0x84, 0x65, 0xd9, 0x59, 0x02, 0xf2, 0xd5, 0x54, 0xde, 0x04, 0xb9, 0x2a, 0x2d, 0x67, 0x69, 0x96, 0x28, 0x0a, + 0x8c, 0x60, 0xa3, 0x35, 0xfe, 0xc2, 0x15, 0x07, 0x78, 0xba, 0xd9, 0x0d, 0xa5, 0xcc, 0x19, 0x85, 0xe8, 0x5d, 0x41, + 0x93, 0x6b, 0x3c, 0xe5, 0x23, 0xb6, 0xbb, 0x4d, 0x30, 0x63, 0xfe, 0xf7, 0x5a, 0xf4, 0x08, 0x64, 0xd9, 0x3d, 0x83, + 0x3a, 0xb0, 0x88, 0x2b, 0xe8, 0x20, 0x94, 0xc1, 0x47, 0x21, 0x6e, 0xe6, 0xf4, 0x4e, 0x2e, 0x34, 0xc0, 0x65, 0xa1, + 0xe5, 0x1b, 0x17, 0xeb, 0x60, 0xbf, 0x85, 0x7d, 0xd8, 0x83, 0x25, 0x84, 0x0c, 0x68, 0x61, 0x1b, 0x23, 0xa2, 0x85, + 0x87, 0x52, 0x6b, 0x39, 0x4b, 0x5b, 0xd8, 0x04, 0x6c, 0x68, 0xad, 0xcb, 0xa8, 0x5a, 0xd7, 0xe5, 0x63, 0x8e, 0xd5, + 0x26, 0x58, 0x38, 0xe9, 0x50, 0x13, 0x1d, 0xdc, 0x1e, 0x32, 0xc2, 0x1b, 0x3f, 0x5f, 0xbd, 0x7e, 0xe5, 0x62, 0x26, + 0xf3, 0x31, 0xb8, 0x6c, 0x3a, 0xd5, 0xd8, 0xb5, 0x79, 0x05, 0x29, 0xae, 0x14, 0xa5, 0x56, 0x38, 0x85, 0x96, 0x5f, + 0x08, 0x9d, 0x27, 0xf6, 0xf2, 0xe2, 0x99, 0x2c, 0x66, 0xd4, 0xde, 0x18, 0xe1, 0x6b, 0xe5, 0x9e, 0x3d, 0x37, 0x2f, + 0xab, 0x54, 0x93, 0x7c, 0xb7, 0x79, 0x15, 0xb1, 0xc8, 0x8c, 0xfc, 0x0a, 0xda, 0x00, 0x53, 0xb9, 0x7c, 0xb5, 0xb6, + 0x20, 0x2e, 0xf2, 0x7c, 0x40, 0x5e, 0xde, 0x5a, 0xea, 0x12, 0x45, 0x0d, 0x6e, 0xf0, 0x93, 0x15, 0x3c, 0x0b, 0xae, + 0x0b, 0x0d, 0x7b, 0xe4, 0xc4, 0x8b, 0xa8, 0x15, 0xd5, 0x5f, 0x7d, 0x35, 0xaa, 0x04, 0x1f, 0xb5, 0x34, 0xc9, 0x25, + 0x88, 0x1e, 0xe5, 0x03, 0x73, 0x1c, 0x44, 0x13, 0x7f, 0xf7, 0x7c, 0xd9, 0xf6, 0x74, 0x36, 0xaf, 0xd4, 0x89, 0xe5, + 0x95, 0x09, 0x78, 0x38, 0xda, 0x27, 0x5c, 0x10, 0x0e, 0x12, 0x59, 0xa9, 0x3d, 0xf4, 0xb9, 0xa8, 0x1b, 0xe7, 0x17, + 0x6d, 0xd6, 0x3c, 0x59, 0xad, 0xf2, 0xcb, 0x36, 0x6b, 0x9f, 0xda, 0x07, 0xdf, 0x22, 0x95, 0x01, 0xcd, 0xe5, 0x63, + 0x9e, 0x45, 0xa0, 0x9d, 0x1d, 0x67, 0x26, 0x9c, 0x82, 0x0f, 0x51, 0x4c, 0x16, 0xba, 0xea, 0x4b, 0x82, 0x71, 0x29, + 0xb1, 0x7a, 0xfc, 0x02, 0xf5, 0xda, 0xe9, 0xb6, 0xab, 0x74, 0xb3, 0x7d, 0x18, 0x5c, 0xb8, 0x14, 0x08, 0x77, 0x20, + 0xe4, 0x01, 0xe8, 0x77, 0x97, 0x02, 0x4c, 0x83, 0x00, 0x95, 0x15, 0x88, 0xb4, 0x7c, 0xb6, 0x98, 0x3d, 0x2b, 0xa8, + 0x59, 0x86, 0x27, 0x7c, 0xc2, 0xb5, 0x4a, 0x29, 0x48, 0xb7, 0xbb, 0xd2, 0xd7, 0xbb, 0x25, 0xa8, 0xac, 0x16, 0xf9, + 0x35, 0xd1, 0x3c, 0xfb, 0xac, 0xdc, 0xc2, 0x21, 0x6c, 0x56, 0x56, 0xe0, 0x0c, 0xad, 0x71, 0x2e, 0x27, 0xb4, 0xe0, + 0x7a, 0x3a, 0xfb, 0xb7, 0x56, 0x87, 0xf5, 0xf5, 0xc0, 0x5c, 0x58, 0x01, 0x48, 0xa8, 0x18, 0xad, 0x56, 0xfc, 0xe8, + 0xfb, 0xf7, 0x49, 0xde, 0x27, 0xbc, 0x8d, 0x3b, 0xf8, 0x18, 0x9f, 0xe2, 0x76, 0x0b, 0xb7, 0x4f, 0xe1, 0xea, 0x3e, + 0xcb, 0x17, 0x23, 0xa6, 0x62, 0x78, 0xf9, 0x4b, 0x5f, 0x26, 0xe7, 0x87, 0x65, 0xbc, 0x7b, 0x5d, 0x24, 0x0e, 0x5d, + 0x82, 0xb0, 0xeb, 0x2e, 0x5e, 0x5d, 0x14, 0x85, 0xc1, 0xd2, 0xc6, 0xa1, 0xea, 0xa4, 0xd4, 0x2f, 0x5c, 0x1e, 0xf7, + 0xc0, 0x9e, 0xdb, 0xae, 0x6c, 0x13, 0xcc, 0xbe, 0xed, 0xcf, 0xb4, 0xfa, 0xd9, 0xd4, 0x25, 0x62, 0x78, 0xe8, 0x55, + 0xe8, 0x81, 0x2e, 0x49, 0xfb, 0xe0, 0x00, 0xac, 0x8e, 0x82, 0xd9, 0x70, 0x1b, 0xfd, 0x80, 0x37, 0x6b, 0x69, 0x10, + 0xac, 0x00, 0x8c, 0x3b, 0xdf, 0x70, 0xb2, 0xb4, 0xb0, 0xd5, 0x40, 0x85, 0x75, 0x11, 0x46, 0x74, 0x0b, 0x49, 0x85, + 0x11, 0xa2, 0xe1, 0x08, 0x73, 0x91, 0x4e, 0xf6, 0x5b, 0x58, 0x8e, 0xc7, 0x8a, 0x69, 0x38, 0x3a, 0x0a, 0xf6, 0x85, + 0x15, 0xca, 0x9c, 0x22, 0x43, 0x36, 0xe1, 0xe2, 0xa1, 0xfe, 0xc4, 0x0a, 0x69, 0x3e, 0x8d, 0x06, 0x23, 0x8d, 0xcc, + 0x2a, 0x46, 0x38, 0xcb, 0xf9, 0x1c, 0xaa, 0x4e, 0x0a, 0x70, 0xfa, 0x81, 0xbf, 0x7c, 0x94, 0x86, 0x6d, 0x02, 0xf9, + 0xfa, 0x60, 0x83, 0xd9, 0xe0, 0x51, 0x41, 0x6f, 0x5e, 0x8b, 0xc7, 0xb0, 0xa3, 0x1e, 0x16, 0x8c, 0x42, 0x36, 0x24, + 0xbd, 0x83, 0xa6, 0xe0, 0x03, 0xda, 0x7c, 0x69, 0x00, 0x97, 0x9e, 0x9b, 0x0f, 0x5b, 0xd1, 0x47, 0x0d, 0x4c, 0xca, + 0xb6, 0x4c, 0xa6, 0x39, 0xa5, 0xab, 0x4c, 0x1b, 0x97, 0xa9, 0x9c, 0xc2, 0x1a, 0xbb, 0xa8, 0x27, 0xe1, 0x60, 0x46, + 0x54, 0x4d, 0xd3, 0xfe, 0xc0, 0xfc, 0x7d, 0x6d, 0x4b, 0xb6, 0xb0, 0x0b, 0xb5, 0xb3, 0xc6, 0xe6, 0xc9, 0xce, 0xa0, + 0x7c, 0x1b, 0xc3, 0x3d, 0x2c, 0xbc, 0x1b, 0x59, 0x23, 0x9f, 0x27, 0x9e, 0x6c, 0x9e, 0xac, 0xd7, 0x66, 0x20, 0x2a, + 0x05, 0x3d, 0xd0, 0x5b, 0xbf, 0x6d, 0x5a, 0xb0, 0x3d, 0xca, 0xaf, 0xd3, 0x16, 0x9e, 0x71, 0x78, 0x06, 0xd3, 0xb7, + 0x77, 0xa5, 0x0b, 0xf9, 0xd9, 0x81, 0xa4, 0x15, 0xa4, 0xd8, 0xe9, 0x04, 0x9d, 0x1d, 0xe3, 0x60, 0xe4, 0x40, 0xcf, + 0xaf, 0x3e, 0x5b, 0x58, 0xfb, 0xdf, 0x6f, 0xca, 0x82, 0x39, 0x1d, 0xb2, 0xbc, 0x9c, 0x50, 0xe6, 0xcf, 0xcf, 0x37, + 0x3c, 0xa9, 0x50, 0xc1, 0xbd, 0x1f, 0x05, 0x7b, 0xda, 0x86, 0x98, 0x9c, 0xd1, 0xbf, 0xed, 0x0f, 0x1b, 0x11, 0xa8, + 0xd4, 0xb2, 0x65, 0x85, 0x54, 0xea, 0xa1, 0x4d, 0xb3, 0x47, 0x0f, 0x1c, 0x91, 0x2f, 0xa1, 0x0b, 0xe0, 0xf5, 0x47, + 0x85, 0x9c, 0x1b, 0x44, 0x70, 0xbf, 0xdd, 0xb8, 0x8d, 0xaf, 0x00, 0x78, 0x3b, 0xec, 0x55, 0xff, 0xb4, 0x80, 0xfd, + 0x8d, 0xca, 0x92, 0x7e, 0xbc, 0x1d, 0x7b, 0xfc, 0x17, 0x12, 0xe2, 0x95, 0x5b, 0x3c, 0x4c, 0x1c, 0x3a, 0x95, 0xac, + 0x59, 0xf9, 0x73, 0xab, 0x24, 0x60, 0x58, 0xbd, 0x60, 0xc8, 0xc6, 0x6d, 0x15, 0xb7, 0x99, 0xff, 0x41, 0x05, 0x83, + 0x05, 0xdf, 0x1a, 0x49, 0xc5, 0xb2, 0xf8, 0xed, 0x53, 0xe7, 0xbf, 0xea, 0x1c, 0xd7, 0xbe, 0xae, 0xbd, 0x51, 0x39, + 0x34, 0xf1, 0x81, 0x23, 0x74, 0x70, 0xb0, 0x91, 0x41, 0xc7, 0x00, 0x78, 0xe4, 0xd8, 0x2f, 0xbf, 0x7c, 0x9e, 0x1d, + 0x33, 0x9a, 0xc7, 0x22, 0x0a, 0x99, 0x3b, 0xcf, 0xcd, 0xd9, 0x89, 0x3c, 0xa1, 0x6a, 0xea, 0x0b, 0x03, 0x1c, 0x1f, + 0x6d, 0xa5, 0x02, 0xbe, 0x47, 0xeb, 0x1d, 0x13, 0xd8, 0xe0, 0xb7, 0xec, 0xa4, 0x76, 0x15, 0xf4, 0x0b, 0xb4, 0xdc, + 0xc5, 0x54, 0x6e, 0x2c, 0x70, 0xb4, 0x39, 0x91, 0x9d, 0x43, 0xdf, 0xa8, 0x53, 0xb2, 0x1e, 0x4f, 0x76, 0x1b, 0x7d, + 0x49, 0xb1, 0x2b, 0xb9, 0xa2, 0x6d, 0x43, 0x56, 0xbd, 0x53, 0xab, 0x2b, 0x53, 0xa7, 0xea, 0x9a, 0xb7, 0xb2, 0xb4, + 0x29, 0xed, 0x92, 0xec, 0xdd, 0x16, 0x0b, 0xaf, 0xc2, 0x1b, 0x8d, 0xf2, 0x22, 0x14, 0xec, 0xb1, 0xc4, 0xa0, 0xcb, + 0x09, 0x5c, 0x2f, 0xac, 0x56, 0x31, 0xfc, 0xd9, 0x35, 0x86, 0x5d, 0xa6, 0x4b, 0x1f, 0xf8, 0x06, 0xbf, 0x12, 0x84, + 0xca, 0x75, 0x76, 0x90, 0x60, 0xdd, 0xe5, 0x06, 0x0d, 0xc7, 0x89, 0xff, 0x82, 0x87, 0x9a, 0xb5, 0x77, 0x39, 0x98, + 0x64, 0xdf, 0x78, 0xdc, 0xad, 0x64, 0x2d, 0x6b, 0x71, 0xd6, 0x37, 0x24, 0x18, 0x62, 0x37, 0xa5, 0x73, 0xdc, 0x4a, + 0xda, 0x28, 0x72, 0xc5, 0x2a, 0xf4, 0xff, 0x56, 0x91, 0xcc, 0x66, 0xfe, 0xd7, 0xd9, 0xd9, 0x99, 0x4b, 0x71, 0x36, + 0x7f, 0xca, 0x78, 0xc0, 0x99, 0x04, 0xf6, 0x85, 0x67, 0xcc, 0xe8, 0x90, 0xdf, 0xc2, 0x50, 0x88, 0x20, 0x97, 0xc2, + 0xb1, 0x4b, 0xf0, 0xce, 0x20, 0x50, 0x1e, 0x60, 0xff, 0x9e, 0x6c, 0x94, 0xf3, 0x0f, 0x15, 0xf9, 0x40, 0xbe, 0x65, + 0x83, 0xec, 0x8b, 0xf9, 0xec, 0x5b, 0x33, 0x19, 0x88, 0xcd, 0x1f, 0x61, 0xfb, 0xdb, 0xb0, 0xb4, 0xce, 0x52, 0x06, + 0x47, 0x5a, 0x2e, 0xb2, 0xa9, 0xd5, 0xfc, 0xbb, 0x0f, 0x53, 0xd6, 0x3d, 0x72, 0x03, 0x41, 0xb9, 0xc8, 0xd2, 0xc5, + 0xa3, 0x8c, 0x7e, 0x2c, 0x43, 0x4f, 0xee, 0xbd, 0x62, 0x0b, 0xf6, 0x23, 0xde, 0xab, 0x52, 0xe0, 0xe3, 0x61, 0xc1, + 0x69, 0xfe, 0x23, 0xde, 0xab, 0x42, 0x50, 0x82, 0x2b, 0xa4, 0x89, 0xe2, 0x88, 0xcd, 0x83, 0xce, 0x69, 0x24, 0x80, + 0x82, 0xe6, 0x91, 0x39, 0xc8, 0x9e, 0xbb, 0xa8, 0x85, 0x49, 0x07, 0xbb, 0xb8, 0x5f, 0x36, 0x16, 0xa9, 0x0d, 0xe1, + 0x0d, 0x91, 0xdc, 0xca, 0xd9, 0x98, 0xaf, 0x47, 0x1b, 0x0b, 0x62, 0x94, 0xc9, 0xe4, 0xf2, 0x39, 0x8f, 0xb7, 0x16, + 0x0b, 0x85, 0xd5, 0x82, 0x05, 0xaa, 0x55, 0xa9, 0xd2, 0xc3, 0xe2, 0xdb, 0x05, 0xb3, 0xa0, 0x88, 0xd9, 0x7a, 0x0f, + 0x6f, 0xb9, 0x22, 0x20, 0x25, 0xbb, 0x24, 0x78, 0x93, 0xdb, 0x60, 0xaa, 0x7f, 0x82, 0x1d, 0x08, 0x3d, 0x53, 0x3a, + 0xc2, 0x26, 0x4f, 0x41, 0x24, 0xb1, 0xfd, 0x16, 0x76, 0xac, 0xd1, 0x0b, 0xe1, 0x85, 0x14, 0x38, 0x57, 0x4d, 0x13, + 0x33, 0xca, 0x4d, 0x74, 0xb1, 0x87, 0x6a, 0xce, 0x32, 0x6d, 0x11, 0x60, 0xdf, 0xa1, 0xa1, 0x14, 0xcf, 0x0d, 0x28, + 0xcc, 0x63, 0xd2, 0x2e, 0xe5, 0x31, 0x2c, 0x5e, 0x90, 0x02, 0x44, 0x8d, 0x8b, 0x49, 0x59, 0x67, 0x9e, 0x2f, 0x26, + 0x5c, 0x54, 0xc8, 0x50, 0x30, 0x35, 0x97, 0x02, 0xde, 0x72, 0x28, 0x8b, 0x18, 0x3a, 0x54, 0xc3, 0x77, 0x4b, 0xc2, + 0xca, 0x3a, 0xe6, 0x98, 0xe2, 0xa2, 0xaa, 0x01, 0xcc, 0xc5, 0xc3, 0xf0, 0xd1, 0x77, 0xf5, 0x5a, 0xbc, 0x93, 0xf3, + 0x2a, 0xdf, 0xd3, 0x38, 0x1f, 0x32, 0xdd, 0xd9, 0x0d, 0xa3, 0xb5, 0x79, 0x6e, 0x29, 0xd8, 0xbe, 0x1f, 0x78, 0xf5, + 0x04, 0xd9, 0xda, 0x3c, 0xd8, 0x54, 0x66, 0x0d, 0x59, 0xf9, 0x3a, 0x41, 0xd5, 0x5e, 0xbd, 0xaa, 0x14, 0xb6, 0x22, + 0x40, 0xa5, 0xe0, 0xa3, 0xad, 0xfc, 0x27, 0xda, 0xe6, 0xdb, 0x73, 0xa8, 0x0c, 0x0f, 0xe4, 0xc9, 0x50, 0xd5, 0x03, + 0x2e, 0xca, 0x0f, 0x01, 0x2c, 0x7e, 0x64, 0x22, 0xd7, 0xee, 0xba, 0x40, 0xe6, 0x4c, 0xc5, 0x12, 0x2f, 0xfb, 0x74, + 0x90, 0x5a, 0x79, 0x28, 0x95, 0x60, 0xdb, 0x73, 0x53, 0x70, 0xed, 0x43, 0xe4, 0xe2, 0x3e, 0x1b, 0xa4, 0xcb, 0x7a, + 0x18, 0x5d, 0x1b, 0xc8, 0xd7, 0x9b, 0x73, 0x9a, 0xb8, 0xb3, 0x74, 0x80, 0x73, 0x02, 0xb6, 0xc7, 0x9e, 0x3d, 0x7d, + 0x13, 0x67, 0xa8, 0x57, 0xe7, 0xf0, 0x97, 0x6b, 0x9c, 0xe3, 0x0c, 0xa5, 0x0f, 0x63, 0xb8, 0xc0, 0x5a, 0x63, 0x00, + 0x5f, 0x66, 0x49, 0x15, 0x78, 0xa4, 0x66, 0x46, 0x62, 0x75, 0x17, 0x81, 0x68, 0xa9, 0xc3, 0xdb, 0x71, 0xe6, 0x03, + 0x51, 0x1b, 0xee, 0xf5, 0x99, 0x11, 0x0e, 0x27, 0x59, 0x5c, 0x3b, 0x67, 0x38, 0xb9, 0xdc, 0xe7, 0xb5, 0x13, 0x13, + 0xac, 0xbd, 0xc3, 0x53, 0x05, 0xf4, 0x68, 0x70, 0xaa, 0x58, 0x1a, 0x02, 0x31, 0x13, 0xc0, 0x9b, 0x39, 0x3c, 0xda, + 0x02, 0x9c, 0x8f, 0xd6, 0x38, 0xf8, 0x4a, 0x6b, 0x5d, 0x6d, 0x2a, 0x51, 0xd6, 0x6b, 0xdc, 0x9f, 0x66, 0x78, 0x94, + 0xe1, 0x79, 0x36, 0x08, 0x8e, 0x9b, 0x59, 0x16, 0x9a, 0x74, 0xad, 0x56, 0x4f, 0x9d, 0x19, 0x21, 0xb2, 0x3f, 0x2d, + 0xfd, 0x41, 0x3d, 0x40, 0xf8, 0x14, 0xb2, 0x80, 0x96, 0xf4, 0xdc, 0xdf, 0x86, 0x7d, 0xa7, 0x1a, 0x35, 0x62, 0x9e, + 0x58, 0x32, 0xd2, 0xf3, 0x3f, 0xca, 0x2c, 0xdb, 0x5a, 0x23, 0x9a, 0xdf, 0xee, 0x45, 0x0d, 0xdf, 0x5e, 0xa0, 0x65, + 0x2b, 0xcd, 0x76, 0x00, 0x51, 0xac, 0x71, 0x92, 0x0e, 0xd6, 0x48, 0xae, 0x56, 0xb1, 0x4d, 0x21, 0x3c, 0x99, 0x31, + 0xaa, 0x16, 0x85, 0x79, 0xba, 0x2d, 0x56, 0x28, 0x31, 0xfc, 0x2e, 0x76, 0x36, 0xa2, 0xf0, 0x52, 0x9a, 0x04, 0xc3, + 0x8d, 0x58, 0x10, 0x59, 0x13, 0xb9, 0x87, 0x59, 0x65, 0x19, 0x24, 0x88, 0x30, 0x22, 0xbf, 0xbd, 0x2e, 0x15, 0xf6, + 0x71, 0x38, 0xfb, 0xc7, 0xf8, 0x02, 0xc2, 0xcd, 0xdb, 0x84, 0x16, 0x43, 0x3a, 0x01, 0x36, 0x16, 0xe2, 0x10, 0x6e, + 0x25, 0xac, 0x56, 0xfd, 0x41, 0x57, 0x18, 0xf2, 0xec, 0x9e, 0xae, 0x2b, 0x1b, 0xda, 0xdd, 0x00, 0x5c, 0x75, 0x5b, + 0x6a, 0xae, 0x8d, 0xee, 0x87, 0x9a, 0xd7, 0xb5, 0xb8, 0x4b, 0x72, 0x0f, 0x64, 0x54, 0x6f, 0x60, 0xd7, 0x2c, 0xc0, + 0x4d, 0xe8, 0x2a, 0x3c, 0xc2, 0x0b, 0x6b, 0xc3, 0x69, 0x9e, 0x52, 0xa2, 0xe6, 0x05, 0x25, 0x78, 0xb8, 0x99, 0xb0, + 0x7e, 0x36, 0xc0, 0x23, 0x1f, 0x68, 0x7b, 0xff, 0x6d, 0x3c, 0x42, 0xa8, 0x20, 0x06, 0xa6, 0xd6, 0x65, 0x7b, 0x54, + 0xd9, 0xed, 0x9b, 0x4c, 0xc3, 0x30, 0x18, 0x23, 0xe6, 0x51, 0x68, 0xc4, 0x9c, 0x37, 0x1a, 0x68, 0x41, 0x46, 0x60, + 0xc4, 0xbc, 0x08, 0x5a, 0x5b, 0xd8, 0x67, 0x36, 0x83, 0xf6, 0x16, 0x08, 0x75, 0x39, 0xd0, 0x34, 0x0d, 0x0f, 0x6a, + 0x54, 0x0f, 0x9a, 0xfb, 0xe7, 0x9d, 0x8e, 0x3a, 0xa0, 0x48, 0x18, 0x5f, 0xfa, 0x49, 0x58, 0xd7, 0x70, 0x3b, 0xee, + 0xb1, 0x19, 0xb7, 0xb3, 0x6d, 0x50, 0x7d, 0xd9, 0xcf, 0x06, 0x83, 0xae, 0xf4, 0x56, 0x12, 0x2d, 0x3c, 0xae, 0x9e, + 0xe0, 0xa8, 0x16, 0xef, 0x8b, 0xde, 0xbc, 0xf2, 0xe6, 0xfe, 0x65, 0xcf, 0xcd, 0xf3, 0x18, 0x38, 0xa0, 0x7d, 0xb8, + 0x1f, 0xaa, 0xe2, 0x83, 0x1d, 0x75, 0x20, 0x0a, 0x5a, 0xda, 0xaa, 0x09, 0xa4, 0xd6, 0xcc, 0x2e, 0xd6, 0x4d, 0x85, + 0x0e, 0x05, 0x84, 0x21, 0x53, 0x55, 0x77, 0x77, 0x2a, 0x50, 0x0d, 0x71, 0x38, 0xf5, 0x1f, 0x5b, 0x23, 0xd6, 0x38, + 0xea, 0x8c, 0x22, 0x63, 0x24, 0x69, 0x97, 0x0f, 0x5e, 0xdd, 0x01, 0x2b, 0x01, 0x1f, 0xfd, 0xd8, 0x24, 0x19, 0x43, + 0x82, 0xb7, 0x2c, 0xd3, 0x86, 0x0f, 0xe1, 0x0e, 0x41, 0x79, 0x62, 0x63, 0x6d, 0xba, 0x4a, 0x16, 0x72, 0x55, 0x97, + 0xd7, 0x01, 0x7a, 0xde, 0x95, 0xbf, 0xb1, 0xe1, 0xc8, 0x82, 0x81, 0x65, 0x5b, 0xfb, 0x04, 0x3c, 0xf2, 0x71, 0x85, + 0x20, 0x7e, 0x29, 0x74, 0x62, 0x22, 0x45, 0x5f, 0xc1, 0x06, 0xc5, 0x73, 0x70, 0x10, 0x74, 0x12, 0x1c, 0x06, 0xef, + 0x32, 0xab, 0x49, 0x36, 0xb8, 0x35, 0x23, 0xf1, 0x7c, 0xb5, 0x6a, 0xa1, 0xc3, 0x7f, 0xcc, 0x63, 0xc8, 0xe3, 0x52, + 0xe1, 0x3e, 0xae, 0x14, 0xee, 0x60, 0x09, 0x48, 0xc6, 0x81, 0xae, 0x1d, 0xcb, 0x50, 0x8d, 0x0e, 0x71, 0xba, 0x5f, + 0x40, 0xd4, 0x66, 0x77, 0x2c, 0x81, 0x9e, 0x7d, 0xab, 0x80, 0xd5, 0xb5, 0x97, 0x25, 0x90, 0x11, 0xdc, 0xfd, 0x26, + 0x30, 0x2a, 0x44, 0xe3, 0xf3, 0x67, 0xde, 0x53, 0xe0, 0x89, 0xf3, 0xe7, 0x9a, 0x19, 0xd6, 0xbd, 0xa0, 0x37, 0xa6, + 0xf9, 0x78, 0x8c, 0x9b, 0x63, 0x0b, 0xce, 0xa3, 0x0e, 0xfc, 0xb4, 0x10, 0x3d, 0xea, 0x60, 0x97, 0x8a, 0xc7, 0x25, + 0x90, 0x43, 0xf4, 0x74, 0x06, 0x52, 0xc0, 0x4a, 0xc7, 0x56, 0x8b, 0x34, 0x41, 0xab, 0xd5, 0xe4, 0x82, 0xb4, 0x10, + 0x5a, 0xaa, 0x1b, 0xae, 0xb3, 0x29, 0xf8, 0x48, 0x83, 0x62, 0xe0, 0x0d, 0xd5, 0xd3, 0x18, 0xe1, 0x31, 0x5a, 0x8e, + 0xd8, 0x98, 0x2e, 0x72, 0x9d, 0xaa, 0x1e, 0x4f, 0x6c, 0x28, 0x5b, 0x66, 0x23, 0xc1, 0x1d, 0x75, 0xf0, 0xc4, 0xf0, + 0x97, 0x8f, 0x8c, 0x39, 0x48, 0x91, 0x99, 0xe4, 0x89, 0x49, 0xc0, 0x3c, 0xc9, 0x72, 0xa9, 0x98, 0x6d, 0xa6, 0x6b, + 0x6d, 0xcb, 0x21, 0x18, 0x76, 0xa4, 0x0b, 0x6e, 0xac, 0x28, 0xa3, 0x74, 0x4a, 0x54, 0x4f, 0x1d, 0x75, 0xd2, 0x09, + 0xe6, 0x09, 0x70, 0x7a, 0xef, 0x64, 0xcc, 0x1a, 0xe5, 0xad, 0xe8, 0x0c, 0x1d, 0x4e, 0xb1, 0xa8, 0x2e, 0x51, 0x67, + 0xe8, 0x70, 0x82, 0xf0, 0xac, 0x41, 0x72, 0x05, 0x1e, 0xc3, 0x5c, 0xfc, 0x1f, 0x29, 0xff, 0xcd, 0x61, 0x43, 0xd0, + 0xe5, 0xb7, 0xb0, 0x53, 0xd8, 0x28, 0x4a, 0x73, 0x02, 0x5e, 0x8b, 0xed, 0x33, 0x9c, 0x91, 0x49, 0x33, 0xf7, 0x01, + 0xf7, 0x4c, 0x2b, 0x8d, 0x5b, 0x8d, 0x0e, 0x33, 0x3c, 0xda, 0x4c, 0x8a, 0xcd, 0x5c, 0x9b, 0x79, 0x9a, 0xc1, 0xf9, + 0x5e, 0x8d, 0xc2, 0x95, 0x5f, 0x6c, 0x26, 0x85, 0xe5, 0x1d, 0x70, 0x9b, 0x23, 0x2c, 0x9a, 0x14, 0xe7, 0x78, 0xd6, + 0xfc, 0x8a, 0x67, 0xcd, 0x0f, 0x65, 0x46, 0x63, 0x81, 0x05, 0x04, 0xef, 0x83, 0x44, 0x3c, 0xab, 0x92, 0x47, 0x58, + 0x34, 0x4c, 0x79, 0x3c, 0x6b, 0x54, 0xa5, 0x9b, 0x0b, 0x2c, 0x1a, 0xa6, 0x74, 0xe3, 0x03, 0x9e, 0x35, 0xbe, 0xfe, + 0x8b, 0x49, 0x47, 0x29, 0xa0, 0xcb, 0x1c, 0x2d, 0x33, 0x3b, 0xc4, 0xab, 0xdf, 0xde, 0xbe, 0x6b, 0x5f, 0x77, 0x0e, + 0x27, 0xd8, 0xaf, 0x5f, 0x66, 0x70, 0x2c, 0xd3, 0x31, 0x6b, 0x02, 0x44, 0x33, 0xdc, 0x39, 0x9c, 0xe2, 0xce, 0x61, + 0xe6, 0x9a, 0x5a, 0xcf, 0x1a, 0xe4, 0x56, 0x87, 0x50, 0xd4, 0x51, 0x1a, 0xc2, 0xc7, 0x4f, 0x36, 0x9d, 0xa0, 0x1a, + 0x28, 0xd1, 0xe1, 0xa4, 0x06, 0x2a, 0xf8, 0x5e, 0xd4, 0xbe, 0xab, 0x7a, 0x15, 0x06, 0x59, 0x28, 0xa1, 0x70, 0xcd, + 0x0d, 0x78, 0x6a, 0x29, 0x06, 0x32, 0x61, 0x8a, 0x05, 0xca, 0x77, 0x40, 0x61, 0x94, 0x27, 0x66, 0xe8, 0xc1, 0x74, + 0x4c, 0xe2, 0xff, 0xcf, 0x93, 0x29, 0x87, 0x5e, 0x6e, 0x99, 0xad, 0xe9, 0xb9, 0xc9, 0x84, 0xc3, 0x07, 0x1e, 0xeb, + 0xff, 0xda, 0x81, 0x62, 0x03, 0x52, 0xfc, 0x7f, 0xe9, 0xe8, 0x42, 0x30, 0x42, 0x56, 0x94, 0x16, 0x0e, 0xf1, 0xbf, + 0x3f, 0xac, 0xa0, 0xfb, 0x62, 0xab, 0xfb, 0xc2, 0x74, 0x1f, 0x36, 0x6d, 0x54, 0x39, 0x69, 0x55, 0xc9, 0x92, 0xff, + 0x3a, 0xdd, 0xda, 0x02, 0x8d, 0xa8, 0xd1, 0xb3, 0x49, 0xd8, 0xe0, 0x7e, 0x3b, 0xdd, 0x81, 0xcc, 0x6b, 0x6e, 0xdf, + 0xe6, 0x84, 0xc3, 0x37, 0xb8, 0x53, 0xbd, 0x6c, 0x81, 0xf7, 0xa6, 0x32, 0xfa, 0xca, 0x38, 0xb4, 0x1c, 0x2c, 0x36, + 0x4d, 0xb9, 0x8d, 0xb1, 0x74, 0x72, 0x8a, 0x8d, 0x2b, 0x22, 0x54, 0xba, 0xbd, 0x04, 0xa5, 0xf8, 0x58, 0x37, 0x99, + 0xf9, 0xba, 0xd0, 0x89, 0xb9, 0x84, 0x6a, 0x98, 0xcf, 0xbb, 0x4b, 0x9d, 0x68, 0x39, 0xb7, 0x79, 0x77, 0x17, 0xd0, + 0x27, 0x68, 0x58, 0x1b, 0x81, 0xdd, 0x3e, 0x2b, 0x9c, 0x7e, 0xa7, 0x3a, 0x04, 0xc3, 0x03, 0xc8, 0x91, 0x16, 0xdb, + 0x07, 0x36, 0xad, 0x61, 0xd7, 0x45, 0xb3, 0x4c, 0xb4, 0xad, 0x36, 0x4d, 0xae, 0xdd, 0xc3, 0x7c, 0x1e, 0xf2, 0x14, + 0xbc, 0xb0, 0xfa, 0xf1, 0x1d, 0xec, 0xc6, 0x6d, 0x8d, 0x91, 0xa8, 0x2b, 0x99, 0x4a, 0xe8, 0x27, 0xb7, 0x98, 0x25, + 0x77, 0xc6, 0x8b, 0x51, 0x19, 0x7f, 0x1f, 0x13, 0xa9, 0x3e, 0xaa, 0x24, 0x39, 0xb0, 0xec, 0x6f, 0xb0, 0xe4, 0x16, + 0xcc, 0x13, 0xcb, 0x6a, 0x12, 0xeb, 0xe4, 0x2e, 0x58, 0x44, 0x69, 0x1a, 0x59, 0x1b, 0x06, 0xd4, 0x34, 0x63, 0xd5, + 0x83, 0xfb, 0x10, 0xe8, 0xa1, 0x57, 0x96, 0xd2, 0xae, 0xb3, 0xb4, 0xd6, 0xbd, 0x36, 0xdd, 0x6f, 0x0e, 0x28, 0xe0, + 0x0b, 0x03, 0xae, 0xe9, 0x5f, 0x4d, 0x22, 0x19, 0xb2, 0xaf, 0x9c, 0x15, 0x8f, 0x17, 0x85, 0xc1, 0x34, 0xd1, 0xd3, + 0x49, 0x36, 0x6f, 0x83, 0xa9, 0x5e, 0x36, 0xef, 0xdc, 0x62, 0xf7, 0x7d, 0x67, 0xbf, 0xef, 0xb0, 0xe8, 0x31, 0x93, + 0x91, 0x32, 0x53, 0xcc, 0x7f, 0xdf, 0xd9, 0xef, 0x3b, 0xbc, 0x3d, 0x98, 0x1b, 0x7f, 0xa1, 0x58, 0xb2, 0x33, 0x5c, + 0x82, 0x09, 0x79, 0xc0, 0xdd, 0xd4, 0xb2, 0x4c, 0x10, 0xd8, 0x5a, 0x02, 0xc4, 0xf9, 0x7c, 0x1a, 0x57, 0xbc, 0x1a, + 0x02, 0xee, 0xd3, 0xbb, 0xb6, 0x57, 0xa9, 0xc0, 0x63, 0x82, 0x46, 0xc4, 0xc4, 0xb6, 0x31, 0xef, 0x6a, 0x01, 0x97, + 0x47, 0x74, 0xa9, 0x27, 0x49, 0x80, 0x57, 0x35, 0x2a, 0x6f, 0x53, 0xa4, 0xfc, 0x22, 0x41, 0x8e, 0x2f, 0xf6, 0x88, + 0x2a, 0x06, 0xb0, 0x2a, 0x4b, 0xfa, 0x04, 0x52, 0xcf, 0x0f, 0x26, 0xfa, 0x79, 0x13, 0x79, 0xec, 0x0b, 0xb3, 0x9f, + 0x99, 0x9e, 0x16, 0x72, 0x31, 0x99, 0x82, 0x0f, 0x2d, 0xb0, 0x0c, 0x85, 0xa9, 0x57, 0xd9, 0xfa, 0xd7, 0x24, 0x37, + 0x01, 0x14, 0x4e, 0x37, 0x65, 0x42, 0x33, 0xbd, 0xa0, 0xb9, 0xb1, 0x24, 0xe5, 0x62, 0xf2, 0x48, 0xde, 0xbe, 0x04, + 0xec, 0xa6, 0x44, 0x37, 0x76, 0xe4, 0xbd, 0x85, 0x1d, 0x80, 0x33, 0xc2, 0x76, 0x55, 0x7c, 0xa8, 0x40, 0xe7, 0x8f, + 0x73, 0xc2, 0x76, 0x55, 0x7d, 0xc2, 0x6c, 0xf6, 0x94, 0x6c, 0x0c, 0xb7, 0x17, 0x67, 0x8d, 0x1c, 0x1d, 0x75, 0xd2, + 0xbc, 0xeb, 0x89, 0x81, 0x05, 0x68, 0x00, 0xdc, 0xad, 0xed, 0x59, 0xde, 0xdd, 0x10, 0xd0, 0xbb, 0x64, 0xd2, 0x5e, + 0x97, 0x9b, 0x94, 0xd5, 0xaa, 0x53, 0x51, 0xc1, 0x02, 0x4f, 0x83, 0xbd, 0x40, 0xed, 0xd7, 0x0e, 0x8a, 0x73, 0x95, + 0x6d, 0x9a, 0x9e, 0x97, 0x7d, 0x77, 0x77, 0x2c, 0x32, 0xb6, 0x69, 0x6f, 0x77, 0x10, 0x09, 0xcb, 0x09, 0xeb, 0x80, + 0x13, 0xae, 0x6a, 0x07, 0x04, 0xe8, 0x3a, 0x10, 0xb9, 0xb1, 0x24, 0xcb, 0x75, 0x65, 0x74, 0x1f, 0xf8, 0xdd, 0x52, + 0x22, 0xdd, 0x68, 0x4b, 0x82, 0xe9, 0x13, 0x8c, 0x9a, 0xce, 0x3c, 0x8a, 0x5c, 0x7b, 0xef, 0x77, 0x53, 0xb4, 0xf5, + 0xaf, 0x0f, 0x63, 0xb3, 0x3d, 0x4c, 0x0c, 0x65, 0x10, 0x03, 0xbd, 0x8f, 0x78, 0xb7, 0xd1, 0xc8, 0x10, 0x28, 0x64, + 0xb2, 0x01, 0x96, 0x89, 0xd7, 0xa2, 0x1f, 0x1c, 0x18, 0x78, 0x54, 0x09, 0x08, 0x53, 0x10, 0x42, 0xc2, 0xae, 0x0d, + 0xc2, 0x86, 0xcb, 0x55, 0xcb, 0x85, 0x8d, 0x54, 0x1b, 0x3a, 0xf8, 0x7f, 0x85, 0xcb, 0x56, 0xcf, 0x2c, 0x17, 0xc5, + 0xe0, 0x66, 0x6e, 0xc0, 0x22, 0x41, 0x7a, 0xb4, 0xd9, 0x1e, 0x8a, 0xbb, 0x73, 0xb1, 0xd9, 0x10, 0x90, 0x98, 0xc3, + 0x04, 0x45, 0xc3, 0xb9, 0x31, 0xc6, 0x2a, 0xa9, 0xb4, 0xac, 0x35, 0x89, 0x39, 0xf0, 0xa5, 0x0b, 0xd7, 0x7d, 0x79, + 0x9b, 0x32, 0x7c, 0x97, 0x0a, 0x7c, 0x03, 0x9e, 0x34, 0xa9, 0xc4, 0xee, 0xf1, 0x82, 0x62, 0x4d, 0x74, 0xd7, 0xb3, + 0xb7, 0x05, 0xac, 0xb3, 0xd9, 0x23, 0x22, 0xf8, 0x5d, 0xfd, 0x6a, 0x83, 0xef, 0x16, 0xfe, 0x0a, 0xd6, 0xcf, 0xc1, + 0x49, 0x8a, 0x45, 0x43, 0x36, 0x0b, 0x77, 0x64, 0x40, 0xb9, 0x8a, 0x5f, 0x0e, 0x53, 0xb7, 0x8a, 0xe1, 0xda, 0xc7, + 0x57, 0xfc, 0x61, 0xa3, 0xdd, 0x86, 0x2a, 0x8b, 0xdb, 0xbd, 0x29, 0x1a, 0xb2, 0x6a, 0x7a, 0x47, 0xe6, 0x46, 0x4a, + 0xfd, 0xeb, 0x03, 0x6e, 0x6d, 0xb5, 0xef, 0xa7, 0xf9, 0xd6, 0xa3, 0x73, 0xd5, 0xb4, 0x4f, 0xad, 0x15, 0xc1, 0xc1, + 0xcf, 0x16, 0x6e, 0x6e, 0x0d, 0x38, 0x80, 0x9f, 0xbf, 0xa3, 0x79, 0x9c, 0x41, 0x74, 0x7a, 0xab, 0x19, 0x5f, 0xc5, + 0x7f, 0x8e, 0x1a, 0x71, 0x2f, 0xfd, 0x33, 0xf9, 0x73, 0xd4, 0x40, 0x3d, 0x14, 0xcf, 0x6f, 0x57, 0x6c, 0xb6, 0x82, + 0x60, 0x6b, 0xf7, 0x8e, 0xf0, 0xeb, 0xb0, 0x24, 0xd7, 0x34, 0xe7, 0xd9, 0xca, 0x3d, 0x45, 0xb7, 0x72, 0xef, 0xf4, + 0xac, 0xcc, 0xeb, 0x4a, 0xab, 0x58, 0x0e, 0x73, 0x08, 0x2c, 0x1c, 0xef, 0x35, 0x7b, 0xfd, 0x56, 0xf3, 0xc1, 0xc0, + 0xfe, 0x6b, 0x22, 0xdc, 0xa3, 0x5a, 0xc4, 0xb6, 0x37, 0x1b, 0x5b, 0x3f, 0x06, 0xc3, 0x0e, 0x08, 0x05, 0x0e, 0x72, + 0xe9, 0xe3, 0x0c, 0x59, 0xdf, 0x93, 0xd5, 0x8a, 0xb9, 0x68, 0xd6, 0x4e, 0x83, 0x5f, 0xc6, 0x66, 0x3a, 0x6c, 0x27, + 0x9d, 0xae, 0x17, 0x63, 0x49, 0x03, 0x22, 0x4d, 0x63, 0x06, 0x81, 0xa4, 0x96, 0x86, 0xc3, 0x9a, 0xdf, 0x46, 0x69, + 0x75, 0x7f, 0x04, 0x29, 0x3f, 0x44, 0x29, 0x3f, 0x22, 0x10, 0x40, 0xdb, 0x32, 0x47, 0x65, 0x43, 0xde, 0x77, 0xe9, + 0x9e, 0x71, 0x66, 0x68, 0xf0, 0xd5, 0xaa, 0x55, 0x0d, 0x53, 0x14, 0xf5, 0x61, 0x2e, 0xd7, 0x58, 0x90, 0x37, 0xa0, + 0x6b, 0x56, 0x44, 0xf4, 0x42, 0x57, 0x79, 0x78, 0x89, 0x17, 0x4b, 0x02, 0x4e, 0xfa, 0x3d, 0xd1, 0x2b, 0xc8, 0xe5, + 0xc3, 0x18, 0x7c, 0xcc, 0x30, 0xef, 0xeb, 0x7e, 0x31, 0x18, 0xa0, 0xd4, 0x39, 0x9d, 0xa5, 0x26, 0xe2, 0x4a, 0xe0, + 0x97, 0x5c, 0x80, 0x5f, 0xb2, 0x42, 0xac, 0x5f, 0x0c, 0xc8, 0xbd, 0x2c, 0x96, 0xe0, 0x94, 0xbf, 0xc3, 0xe7, 0xf1, + 0x61, 0x68, 0x60, 0x6a, 0x86, 0x65, 0x2e, 0xb2, 0xc1, 0x62, 0xce, 0x5a, 0x02, 0xc1, 0xcd, 0x80, 0xbb, 0xd4, 0x86, + 0x44, 0x63, 0x0d, 0x14, 0xdd, 0x46, 0xa1, 0x99, 0xd1, 0xd3, 0xad, 0x36, 0xfa, 0x91, 0xc3, 0x0b, 0x73, 0x0d, 0x63, + 0x11, 0xc8, 0x5c, 0xae, 0x7a, 0xec, 0x2f, 0x3f, 0x6c, 0x56, 0x18, 0xbc, 0xc2, 0x98, 0xec, 0x94, 0x56, 0x89, 0x66, + 0x7c, 0x95, 0x27, 0x8e, 0x21, 0xc8, 0xc4, 0x52, 0xe9, 0x86, 0x63, 0xe2, 0x4a, 0xfa, 0x4c, 0x0c, 0xd9, 0x6e, 0x78, + 0x66, 0x2e, 0x74, 0xb3, 0xfd, 0xc3, 0xb9, 0x9d, 0x73, 0xc2, 0x8d, 0x56, 0xd2, 0x68, 0xa3, 0x9e, 0x19, 0xaa, 0xea, + 0x82, 0xf9, 0x3d, 0x74, 0x5a, 0x5a, 0xec, 0x5c, 0xbd, 0xbb, 0xe1, 0xbb, 0x70, 0x65, 0xfc, 0x2d, 0x56, 0x85, 0x56, + 0x64, 0xb8, 0xdd, 0x42, 0xde, 0x9c, 0xe9, 0xa1, 0x57, 0xe4, 0x42, 0x75, 0xf8, 0x8b, 0xba, 0xc2, 0x3c, 0x15, 0x19, + 0x35, 0x84, 0x47, 0xbf, 0xd7, 0x19, 0x28, 0xff, 0x60, 0x62, 0x32, 0x67, 0xc9, 0x0d, 0x2d, 0x44, 0xfc, 0xe3, 0x0b, + 0x61, 0x62, 0x55, 0xed, 0xc1, 0x40, 0xf6, 0x4c, 0xc5, 0x3d, 0xb8, 0x35, 0xe1, 0x63, 0xce, 0x46, 0xe9, 0x5e, 0xf4, + 0x63, 0x43, 0x34, 0x7e, 0x8c, 0x7e, 0x04, 0x77, 0x67, 0xf7, 0x2e, 0x61, 0x19, 0x17, 0xc2, 0xdf, 0x63, 0x3d, 0x2c, + 0x55, 0xca, 0x58, 0x7b, 0xdd, 0x72, 0x78, 0x21, 0xf5, 0x26, 0x8b, 0x1f, 0x3a, 0x62, 0x6d, 0x53, 0xb0, 0x0e, 0x29, + 0x29, 0x3c, 0xbb, 0x62, 0x6e, 0xb5, 0x98, 0xbb, 0xd4, 0x12, 0xfe, 0xfa, 0xea, 0x61, 0xa9, 0x82, 0x86, 0x83, 0xd0, + 0x95, 0xb6, 0x90, 0x00, 0x03, 0x97, 0xd2, 0xa7, 0xd3, 0x9d, 0x49, 0x64, 0x96, 0xc5, 0xf0, 0xee, 0x41, 0x05, 0xf3, + 0xdf, 0xd9, 0x46, 0x58, 0x15, 0xb8, 0x5c, 0xa9, 0xa2, 0x5e, 0x4a, 0x02, 0x01, 0xe8, 0x4b, 0xef, 0x41, 0x79, 0x51, + 0x74, 0x1b, 0x0d, 0x09, 0x5a, 0x58, 0x6a, 0xae, 0x55, 0x31, 0xdd, 0x0f, 0xdf, 0xd3, 0x0b, 0x3e, 0xbc, 0x43, 0xda, + 0xc6, 0xa3, 0x96, 0x94, 0x50, 0xbb, 0x83, 0xf6, 0xc1, 0x2a, 0x3b, 0x28, 0xff, 0x36, 0xa6, 0xc8, 0xe6, 0xf7, 0xd9, + 0x0f, 0xd4, 0x75, 0x38, 0x70, 0x05, 0xab, 0x5e, 0xca, 0x28, 0x18, 0xc2, 0x3e, 0x60, 0x1f, 0x8b, 0x24, 0xa3, 0xd9, + 0x94, 0x81, 0xba, 0xdf, 0x16, 0xad, 0xe6, 0xf6, 0xa4, 0xee, 0x37, 0x64, 0x9c, 0x7d, 0x84, 0x71, 0xf6, 0x51, 0xe0, + 0xc5, 0x22, 0xc9, 0x1f, 0x32, 0xd6, 0x38, 0x56, 0x4d, 0x81, 0x8e, 0x3a, 0xc0, 0x9d, 0x81, 0x03, 0x0f, 0xd8, 0xa2, + 0x1c, 0x1c, 0x50, 0x67, 0x71, 0x4f, 0x1b, 0x99, 0xf7, 0xf6, 0x84, 0xda, 0x45, 0x2c, 0x70, 0xb3, 0x66, 0xa6, 0x05, + 0xad, 0x15, 0xc6, 0x79, 0x3c, 0xe0, 0x6d, 0x9e, 0xd5, 0xe2, 0x27, 0x6c, 0x58, 0x53, 0xd5, 0x6f, 0xa0, 0x39, 0xaa, + 0x05, 0xb9, 0x79, 0x62, 0xbc, 0x55, 0x49, 0x3f, 0x8a, 0x06, 0x96, 0x53, 0x21, 0x86, 0x64, 0xf4, 0x5b, 0x83, 0xe0, + 0x56, 0x7b, 0xb5, 0xe2, 0x1e, 0xf1, 0x45, 0xcd, 0x5b, 0xcd, 0xdc, 0x02, 0xd0, 0x22, 0x8e, 0xca, 0x7b, 0x93, 0x08, + 0xbc, 0x6f, 0xcb, 0x08, 0x69, 0xcb, 0xbe, 0x7d, 0x34, 0xb1, 0x54, 0x6c, 0xbe, 0xa3, 0x93, 0x41, 0x1a, 0xd9, 0x11, + 0x45, 0xf8, 0xba, 0x84, 0x24, 0x5c, 0x25, 0x5d, 0xab, 0x4c, 0xce, 0x99, 0x4a, 0x39, 0xbe, 0x2e, 0xa4, 0xd4, 0x57, + 0xf6, 0x4b, 0xe2, 0xea, 0x4e, 0x46, 0xe0, 0xeb, 0x09, 0xd3, 0xef, 0x68, 0x31, 0x61, 0xe0, 0x57, 0xe4, 0x6f, 0xc7, + 0x52, 0x4a, 0x2e, 0x9f, 0x88, 0xb8, 0x4f, 0x31, 0xbc, 0xf8, 0x39, 0xc0, 0xda, 0x84, 0x40, 0x29, 0x71, 0x11, 0x2e, + 0x88, 0xde, 0x14, 0xf2, 0xf6, 0x2e, 0x2e, 0xb0, 0x73, 0x00, 0x2c, 0x9d, 0x26, 0x01, 0xfe, 0xe5, 0x63, 0x3e, 0x56, + 0x63, 0x4e, 0x8d, 0xae, 0xdf, 0xfd, 0x4e, 0xae, 0x81, 0xde, 0x96, 0x8e, 0x82, 0xfd, 0xd6, 0x00, 0x72, 0xe1, 0x2e, + 0x0c, 0x2e, 0xbe, 0xc2, 0xda, 0xb2, 0x30, 0xde, 0x58, 0x00, 0xbd, 0xbf, 0x33, 0xb0, 0x60, 0xc3, 0x1c, 0x53, 0x78, + 0x2e, 0x75, 0xc2, 0x74, 0x10, 0x15, 0xe4, 0x49, 0xf9, 0x20, 0x66, 0xad, 0xf6, 0x5b, 0x36, 0x86, 0x3b, 0x8c, 0xe4, + 0xdb, 0x85, 0x13, 0x07, 0x1e, 0x90, 0x69, 0x32, 0xdb, 0xec, 0x1b, 0x1f, 0x79, 0xe4, 0xf5, 0x38, 0xde, 0xd5, 0x52, + 0x98, 0x6f, 0x56, 0x74, 0x8d, 0x21, 0x14, 0x45, 0xd8, 0xef, 0x17, 0x15, 0x53, 0x54, 0x19, 0xb4, 0x41, 0xc3, 0xf2, + 0x46, 0xfc, 0x02, 0x67, 0x0c, 0xad, 0x17, 0xb2, 0x77, 0x74, 0xd6, 0xe1, 0xcc, 0x61, 0xc6, 0x94, 0xc0, 0xa8, 0xb4, + 0x2c, 0xe8, 0x04, 0x1c, 0x9d, 0xab, 0x0f, 0xa2, 0xe2, 0xea, 0x58, 0x01, 0x78, 0x92, 0x29, 0xfc, 0x93, 0x6f, 0x82, + 0x75, 0xbf, 0x55, 0x33, 0x4c, 0xfd, 0x45, 0x6f, 0xbb, 0x96, 0x2f, 0x43, 0x1c, 0x69, 0x63, 0x08, 0xad, 0x73, 0x7b, + 0x07, 0x28, 0xe2, 0x82, 0x5e, 0xa4, 0x1a, 0x5f, 0xab, 0xc5, 0xd0, 0xac, 0xaf, 0x71, 0x1d, 0xd3, 0x06, 0x51, 0xac, + 0xbb, 0x26, 0xbe, 0xae, 0xde, 0x1f, 0x55, 0xa9, 0x82, 0x33, 0x48, 0x20, 0xac, 0xca, 0xcb, 0x86, 0x54, 0x92, 0x4b, + 0xd3, 0xa9, 0x34, 0x9d, 0x56, 0x08, 0xe5, 0xd2, 0x93, 0xf2, 0xfe, 0x15, 0x42, 0x18, 0x98, 0x32, 0x3b, 0xb0, 0x4a, + 0x6d, 0x61, 0x15, 0xbc, 0x7a, 0xb1, 0x81, 0x55, 0x12, 0x8e, 0xe7, 0x12, 0x8d, 0x8a, 0x0a, 0x87, 0x0c, 0xe9, 0x0b, + 0xb1, 0x08, 0x12, 0x00, 0x8b, 0xde, 0x65, 0x2e, 0xef, 0x7b, 0x38, 0x14, 0xf6, 0x24, 0x93, 0x70, 0xba, 0x09, 0xcd, + 0xe1, 0x61, 0x5a, 0xd5, 0xf3, 0x08, 0x01, 0x4b, 0xcf, 0x31, 0x3c, 0x48, 0xfc, 0xfd, 0x87, 0x50, 0x9d, 0x05, 0x79, + 0xfa, 0x2f, 0x51, 0x12, 0x1a, 0xfb, 0xcf, 0xf1, 0xd0, 0x21, 0x61, 0x38, 0xf0, 0xcd, 0x11, 0x56, 0x38, 0xb8, 0x55, + 0xc4, 0x67, 0x70, 0x87, 0x8f, 0x75, 0xe8, 0x01, 0x60, 0x09, 0xc5, 0x21, 0xc8, 0x37, 0x50, 0xcc, 0xe0, 0x80, 0x26, + 0xcb, 0xf0, 0x02, 0x17, 0xac, 0x16, 0xca, 0xfb, 0xdb, 0x96, 0x97, 0xd2, 0x6a, 0x97, 0xbc, 0xc6, 0x1c, 0xa8, 0xfc, + 0x0c, 0x2f, 0x7c, 0x85, 0x79, 0x29, 0xd9, 0x7d, 0xe1, 0x6b, 0x07, 0xf4, 0x14, 0x02, 0x46, 0xba, 0xdf, 0x6b, 0xc2, + 0x3d, 0x45, 0x2f, 0x73, 0x71, 0xd8, 0x76, 0xd0, 0xbd, 0xc0, 0x5c, 0x5d, 0x55, 0x59, 0x73, 0x30, 0x85, 0x06, 0x07, + 0x55, 0x38, 0x23, 0x30, 0x57, 0x2f, 0xca, 0x82, 0x73, 0x10, 0xef, 0x7b, 0xc2, 0xe4, 0x94, 0xd1, 0x00, 0x5e, 0x64, + 0xe5, 0xa3, 0x53, 0x3d, 0x0e, 0x2e, 0xe3, 0x86, 0x4d, 0x7c, 0x21, 0x7c, 0x2a, 0xb0, 0x92, 0xd6, 0x38, 0x34, 0xa2, + 0x23, 0x3a, 0x07, 0xb3, 0x0d, 0xa0, 0xe0, 0xee, 0x7c, 0xd8, 0x58, 0xa8, 0xe0, 0x31, 0xd8, 0xda, 0xdb, 0xcd, 0x84, + 0x38, 0x93, 0xa6, 0xe0, 0x6e, 0xdb, 0x20, 0x83, 0x37, 0xbf, 0xfd, 0xb7, 0xc2, 0x22, 0xc1, 0x80, 0x4a, 0x4d, 0x12, + 0x84, 0x27, 0x28, 0x8d, 0x74, 0x2b, 0x37, 0x13, 0x48, 0x27, 0xa2, 0x66, 0xd4, 0xbd, 0x71, 0xbe, 0x3a, 0x6a, 0x20, + 0x2a, 0x6a, 0xa0, 0x02, 0x6a, 0x20, 0xeb, 0xdb, 0xbf, 0x80, 0x85, 0xb0, 0x11, 0xaa, 0x44, 0x10, 0x10, 0x61, 0xae, + 0x0d, 0x1f, 0x50, 0x24, 0x21, 0xe4, 0x0d, 0xa0, 0x62, 0x4a, 0x5e, 0x82, 0xd1, 0x38, 0xbc, 0xde, 0x03, 0xee, 0x97, + 0x96, 0x61, 0xf0, 0x9c, 0x82, 0xc9, 0x7f, 0xeb, 0xf3, 0xa1, 0x7a, 0xb9, 0x3a, 0x08, 0xe1, 0x17, 0x10, 0x2b, 0xc2, + 0xf1, 0x17, 0xbf, 0x00, 0xd9, 0x54, 0x58, 0x1e, 0x1c, 0x48, 0x10, 0xf8, 0x21, 0x8a, 0x70, 0xc0, 0x33, 0xbc, 0xcc, + 0x36, 0x88, 0x9e, 0x9f, 0x95, 0xaa, 0x66, 0x25, 0x83, 0x59, 0x15, 0x9e, 0xc6, 0xd1, 0x35, 0x61, 0x20, 0xb8, 0x50, + 0xbb, 0x6f, 0x10, 0x02, 0x65, 0xcb, 0x8d, 0xa1, 0x4b, 0x4f, 0xc1, 0x7c, 0x34, 0x8e, 0xde, 0x32, 0x78, 0xd2, 0xd6, + 0x98, 0xfc, 0x33, 0x6d, 0x1e, 0xb8, 0x4f, 0xf7, 0xa2, 0x46, 0xe0, 0xa4, 0x4e, 0x51, 0xf2, 0xb7, 0xe4, 0x22, 0x8e, + 0x9a, 0x97, 0x11, 0x6a, 0xc0, 0xbf, 0x0d, 0x8e, 0xba, 0x34, 0xa1, 0xa3, 0x91, 0x0f, 0x7e, 0x93, 0x11, 0xb3, 0xc9, + 0x56, 0x2b, 0x51, 0x11, 0xf4, 0xc4, 0x6e, 0x30, 0x60, 0x25, 0x5e, 0x00, 0xfb, 0x60, 0x39, 0x58, 0xf2, 0x4e, 0xc4, + 0xca, 0x9f, 0x52, 0x18, 0xac, 0x9e, 0x33, 0x84, 0x70, 0x16, 0xc4, 0x6c, 0xfc, 0xcf, 0x67, 0x1a, 0xae, 0x9f, 0x9f, + 0xaf, 0x63, 0x44, 0xa4, 0x0f, 0x22, 0x57, 0x63, 0x47, 0x44, 0x10, 0xb6, 0x4c, 0xf7, 0x5d, 0x99, 0x1f, 0xbc, 0x75, + 0xf5, 0xc0, 0x86, 0x8b, 0x03, 0x03, 0x6a, 0x14, 0x18, 0xad, 0xe0, 0x9c, 0x94, 0x03, 0x07, 0x25, 0x84, 0x66, 0x45, + 0x3c, 0x25, 0x97, 0x10, 0x09, 0x2f, 0x43, 0x5d, 0x30, 0x2c, 0x08, 0x24, 0xa8, 0x29, 0x48, 0x50, 0x99, 0xaf, 0x3d, + 0x82, 0x59, 0xe7, 0x66, 0xb6, 0x53, 0xd4, 0x75, 0x41, 0x7e, 0x7e, 0xd1, 0xf1, 0x08, 0x58, 0xda, 0x83, 0x83, 0x02, + 0x22, 0x88, 0x01, 0x05, 0x2f, 0x25, 0xc0, 0x40, 0x03, 0x5e, 0x6c, 0x68, 0xc0, 0xe7, 0xda, 0x78, 0x1d, 0x18, 0x5b, + 0x9f, 0x32, 0xc8, 0xc5, 0xb3, 0x6a, 0x4f, 0x13, 0x42, 0xf6, 0x5b, 0x3d, 0x9d, 0x6e, 0x47, 0x48, 0xec, 0x7d, 0xd4, + 0x26, 0xd0, 0x98, 0x23, 0xdd, 0xd5, 0xc6, 0xfc, 0x5a, 0xd3, 0x23, 0x56, 0x93, 0x90, 0x2e, 0x48, 0x97, 0xe7, 0xd3, + 0x9e, 0xc1, 0x15, 0xab, 0x34, 0x72, 0x70, 0x01, 0xfa, 0x6c, 0x40, 0x80, 0x02, 0x95, 0xa6, 0x12, 0x45, 0x11, 0x17, + 0x49, 0xc9, 0x86, 0x61, 0x06, 0x61, 0x0a, 0xab, 0x95, 0xa0, 0x1b, 0x6b, 0x00, 0xbc, 0x33, 0xb3, 0x7f, 0x4a, 0x1f, + 0x6c, 0xba, 0xf6, 0xe6, 0x11, 0x40, 0x40, 0xf6, 0xdb, 0x25, 0xbb, 0x2e, 0x36, 0x2a, 0xb3, 0xb0, 0x96, 0xb1, 0x95, + 0xdb, 0xf6, 0x18, 0x7b, 0x27, 0xb6, 0xf9, 0x04, 0x08, 0x51, 0x5b, 0x32, 0x8d, 0x10, 0x21, 0xb1, 0x88, 0x75, 0x6d, + 0xc8, 0x46, 0x1b, 0xda, 0x37, 0x4f, 0xc2, 0x43, 0xec, 0x03, 0x50, 0xbc, 0x39, 0x2e, 0xc1, 0x21, 0xbc, 0xf0, 0x08, + 0x7f, 0x0b, 0x2c, 0x52, 0x81, 0x19, 0x96, 0xab, 0x15, 0xd4, 0xf3, 0x78, 0x9f, 0x6d, 0x06, 0x27, 0x95, 0x1b, 0x63, + 0x97, 0x76, 0xe2, 0x71, 0xd9, 0x84, 0xc4, 0x19, 0xf4, 0xeb, 0x2b, 0xa2, 0xde, 0x7e, 0x3b, 0x7d, 0xe2, 0xdf, 0x2b, + 0x73, 0x3b, 0x10, 0x1b, 0xd6, 0x1b, 0xac, 0x3e, 0x80, 0x96, 0xbf, 0xca, 0xfc, 0x43, 0x65, 0xc1, 0x4d, 0x82, 0xda, + 0x5c, 0xc4, 0x2e, 0xeb, 0x22, 0x46, 0x6a, 0x8b, 0xbb, 0x43, 0x88, 0x7f, 0xb5, 0x15, 0xc5, 0x80, 0x27, 0x15, 0xff, + 0x1c, 0xa3, 0x2e, 0x84, 0xa2, 0xb6, 0x1e, 0x36, 0x40, 0x69, 0x97, 0xeb, 0x4a, 0x8c, 0x0c, 0x09, 0xe4, 0x5b, 0x17, + 0x5e, 0xd0, 0x9c, 0x44, 0x0a, 0xe4, 0xe4, 0x20, 0x2a, 0x69, 0xb6, 0x21, 0xcc, 0x75, 0xb7, 0x70, 0xcc, 0x5c, 0x6d, + 0xd0, 0x22, 0x7e, 0x01, 0xec, 0x0c, 0x37, 0x92, 0xa5, 0x03, 0x9f, 0xaa, 0x81, 0xcf, 0xaf, 0xb9, 0xa1, 0x28, 0x0a, + 0xf5, 0xde, 0xd9, 0x47, 0xe6, 0xe0, 0x77, 0x1a, 0x88, 0x8f, 0xd4, 0xe9, 0x48, 0x36, 0x42, 0xad, 0x39, 0x3b, 0x5e, + 0xb6, 0x19, 0x61, 0x50, 0xd8, 0xe8, 0x7d, 0x15, 0xb2, 0x8a, 0x9d, 0x9d, 0x8a, 0x60, 0x4e, 0x5f, 0x54, 0xe5, 0x9c, + 0xca, 0x2d, 0xa3, 0x5a, 0x6a, 0x1a, 0x20, 0xc2, 0x95, 0x4f, 0x24, 0xef, 0x33, 0x13, 0xfe, 0xc1, 0x60, 0x5c, 0x3d, + 0x52, 0xf8, 0xfb, 0x5d, 0xb1, 0x43, 0xb6, 0xa3, 0xc3, 0x6d, 0x04, 0xcd, 0x0b, 0x15, 0x3c, 0xe0, 0xa8, 0x64, 0x09, + 0x91, 0x22, 0x97, 0xfb, 0xaa, 0x66, 0xca, 0x76, 0x1d, 0x21, 0x84, 0xb4, 0xc7, 0x59, 0x37, 0xb4, 0x7a, 0xe8, 0x91, + 0x2a, 0xca, 0xe1, 0x16, 0xcd, 0x75, 0x01, 0x2a, 0x8c, 0x40, 0xba, 0xfc, 0xcc, 0xee, 0x52, 0x09, 0xd1, 0xcb, 0xd7, + 0x2e, 0x84, 0xb1, 0xb3, 0xb2, 0xc4, 0x85, 0x19, 0xb5, 0x0d, 0xa3, 0xeb, 0x36, 0x86, 0xb3, 0x81, 0x31, 0xd3, 0xa0, + 0xa4, 0x05, 0xa1, 0xae, 0xbb, 0xf4, 0x22, 0x33, 0x81, 0x1e, 0x73, 0x42, 0x1b, 0x0c, 0x4f, 0x89, 0x06, 0xcb, 0xa6, + 0x02, 0x2c, 0xf8, 0x96, 0x45, 0x6a, 0x6d, 0x36, 0x59, 0xfc, 0x51, 0xc7, 0xe6, 0x69, 0xbf, 0xbc, 0x62, 0x9e, 0x0b, + 0x47, 0xdd, 0x9e, 0x67, 0x3e, 0x1e, 0xdd, 0xd3, 0x37, 0x57, 0x2f, 0x5e, 0xbe, 0x7e, 0xb5, 0x5a, 0xb5, 0x59, 0xb3, + 0x7d, 0x82, 0x7f, 0xd2, 0x65, 0x3c, 0xd8, 0x32, 0x0a, 0xd0, 0xc1, 0xc1, 0x3e, 0x37, 0x2e, 0x3c, 0x9f, 0xf9, 0x1c, + 0xe2, 0x06, 0xe9, 0x01, 0xce, 0x8a, 0x32, 0x26, 0xc8, 0x6d, 0xd4, 0x8b, 0xee, 0x22, 0x50, 0x42, 0x55, 0xe4, 0xef, + 0xc3, 0xe6, 0xec, 0xf7, 0x20, 0x30, 0x11, 0xd4, 0x87, 0x08, 0x20, 0x10, 0xaf, 0x14, 0x17, 0x84, 0xf9, 0x04, 0x88, + 0xe2, 0xbd, 0x00, 0xce, 0xd4, 0x44, 0xad, 0x5a, 0xa8, 0xb8, 0x00, 0x92, 0x68, 0xc3, 0x51, 0xd2, 0x23, 0x13, 0xc0, + 0x1b, 0x82, 0x52, 0xda, 0x5f, 0xdd, 0xdc, 0xb9, 0x4b, 0xe5, 0xa8, 0xd7, 0x4a, 0x73, 0x3c, 0x75, 0x9f, 0x53, 0xf8, + 0x9c, 0x76, 0xfd, 0xe9, 0x20, 0x0e, 0x73, 0xbc, 0x20, 0xe2, 0xd0, 0x3f, 0x8b, 0xb8, 0x9c, 0x17, 0xec, 0x0b, 0x97, + 0x0b, 0x95, 0x2e, 0x6f, 0x53, 0x99, 0xdc, 0x36, 0x47, 0x87, 0x71, 0x91, 0xdc, 0x36, 0x55, 0x72, 0x8b, 0xf0, 0x5d, + 0x2a, 0x93, 0x3b, 0x9b, 0x72, 0xd7, 0x54, 0x70, 0xf3, 0x85, 0x05, 0x1c, 0x8a, 0xb6, 0x68, 0x63, 0xb1, 0x59, 0xd4, + 0xa6, 0xb8, 0xa2, 0x01, 0x06, 0xff, 0xbe, 0x63, 0xe3, 0x87, 0xe1, 0x4b, 0x70, 0x69, 0xd2, 0x44, 0x7e, 0x02, 0xe9, + 0xa7, 0x55, 0x19, 0xb8, 0x4f, 0x49, 0xab, 0x3b, 0xbd, 0x10, 0xcd, 0x76, 0xb7, 0xd1, 0x98, 0xc2, 0xde, 0xcd, 0x48, + 0xee, 0x8b, 0x4d, 0x1b, 0x26, 0xbe, 0xce, 0x7e, 0xb6, 0x5a, 0xed, 0xe7, 0xc8, 0x6c, 0xb8, 0x09, 0x8b, 0x75, 0x7f, + 0x3a, 0xc0, 0x2d, 0xfc, 0x3c, 0x43, 0x68, 0xc9, 0xfa, 0xd3, 0x01, 0x61, 0xfd, 0x69, 0xa3, 0x3d, 0xb0, 0x86, 0x76, + 0x66, 0x2b, 0xae, 0x21, 0x84, 0xe6, 0x74, 0x70, 0x64, 0x4a, 0x4a, 0x97, 0x6f, 0xbf, 0x68, 0x15, 0xd0, 0x4f, 0xd5, + 0x82, 0x97, 0x49, 0xdc, 0x81, 0xbe, 0xe8, 0x85, 0x7d, 0xba, 0xb5, 0x20, 0xc7, 0x47, 0x95, 0xab, 0x3d, 0x45, 0xd8, + 0xf4, 0xa4, 0x0e, 0x8b, 0x43, 0xd3, 0x8c, 0xeb, 0x52, 0xba, 0xef, 0x50, 0x33, 0xf2, 0xd1, 0xc1, 0x02, 0x10, 0xa4, + 0x82, 0x47, 0x56, 0xb8, 0x70, 0x4a, 0x21, 0x5c, 0x1c, 0x54, 0xb6, 0x60, 0x92, 0x93, 0x56, 0x37, 0x37, 0x96, 0xfe, + 0xb9, 0x8b, 0x68, 0x4a, 0x31, 0x25, 0x99, 0x2f, 0x99, 0x1b, 0xb0, 0xd0, 0x4d, 0xca, 0x33, 0x05, 0xbd, 0xd2, 0x00, + 0x8f, 0x08, 0xc4, 0x43, 0xea, 0x16, 0xc6, 0xc0, 0x2b, 0x9e, 0x36, 0x8b, 0x3e, 0x1b, 0xa0, 0xa3, 0x63, 0x4c, 0xfb, + 0x7f, 0x65, 0xf3, 0x36, 0x3c, 0x16, 0xf8, 0xd7, 0x80, 0x4c, 0x9b, 0xb2, 0x4c, 0x10, 0x90, 0x30, 0x6a, 0xca, 0x43, + 0xd8, 0x4b, 0x08, 0x67, 0xb6, 0x62, 0xd6, 0x67, 0x83, 0xe6, 0xb4, 0xac, 0xd8, 0xf1, 0x15, 0x1b, 0xb2, 0x4c, 0xb0, + 0x15, 0x1b, 0xae, 0x62, 0xf8, 0x3a, 0x83, 0x01, 0x41, 0x08, 0x00, 0x06, 0x00, 0xd0, 0x28, 0x88, 0xe6, 0x8b, 0x15, + 0xf1, 0x9b, 0xdd, 0xde, 0xe3, 0xb7, 0xc0, 0x02, 0xad, 0xb6, 0xff, 0x77, 0xa1, 0x0c, 0xd8, 0x53, 0x16, 0x26, 0x66, + 0x6e, 0x61, 0x55, 0x74, 0x00, 0x95, 0x12, 0x61, 0x0a, 0x03, 0x99, 0xfd, 0xcc, 0x40, 0x2d, 0xd0, 0x1a, 0xe4, 0x7d, + 0x3d, 0x68, 0x66, 0x70, 0xc4, 0xc0, 0x3b, 0x34, 0x64, 0x6a, 0x8c, 0x09, 0xe3, 0x1c, 0xa6, 0x98, 0x19, 0xf0, 0x4c, + 0xd3, 0xd6, 0x5a, 0x1a, 0x59, 0xae, 0x97, 0xf7, 0xfe, 0xd1, 0xb1, 0xea, 0x17, 0xcd, 0xf6, 0x00, 0xed, 0x13, 0x62, + 0x3f, 0x06, 0xb0, 0xc9, 0x5c, 0x6a, 0xc3, 0x7c, 0x1f, 0x75, 0x52, 0xfb, 0x09, 0x7f, 0x06, 0x6b, 0xb3, 0x03, 0x40, + 0x47, 0x86, 0xcd, 0xfa, 0xcb, 0x9a, 0xca, 0xeb, 0xe3, 0xce, 0x28, 0x95, 0xbb, 0xde, 0x9d, 0x0e, 0x34, 0xc5, 0xa1, + 0xb7, 0x1e, 0x2e, 0x1f, 0xea, 0x21, 0x60, 0xc6, 0x60, 0x6e, 0x99, 0xd1, 0xf7, 0x42, 0x24, 0x17, 0x44, 0x62, 0x69, + 0xb0, 0x86, 0xc1, 0xde, 0x3a, 0x38, 0x30, 0xd5, 0x58, 0x03, 0x9e, 0x27, 0x45, 0x20, 0x18, 0xf8, 0x08, 0xca, 0x80, + 0x26, 0xca, 0xdc, 0x86, 0x93, 0x8f, 0xcc, 0xfd, 0xc2, 0xe5, 0xed, 0x63, 0xe1, 0xb4, 0xad, 0xe6, 0x7a, 0xbc, 0x2c, + 0x70, 0x57, 0xde, 0x4b, 0x5a, 0x05, 0x37, 0xb2, 0x37, 0x79, 0xca, 0xdc, 0xad, 0xfb, 0x52, 0x9d, 0xdd, 0xcd, 0x74, + 0xca, 0x66, 0x3a, 0xdb, 0xcd, 0x84, 0x9a, 0x99, 0x6f, 0x59, 0x45, 0x9a, 0x93, 0x35, 0x51, 0x73, 0x2a, 0x7e, 0xa2, + 0x73, 0xd0, 0x8e, 0x72, 0x7b, 0xaf, 0x0a, 0x27, 0x57, 0x4e, 0x2e, 0xf7, 0x73, 0x43, 0x5c, 0x91, 0xb9, 0x50, 0x87, + 0x00, 0x2f, 0x2f, 0xca, 0xc7, 0x07, 0xb8, 0x14, 0xbf, 0xca, 0x91, 0x8b, 0x72, 0x2a, 0xa4, 0x96, 0x82, 0x45, 0xc8, + 0xa0, 0xaa, 0x8b, 0x81, 0xbd, 0xb4, 0x7b, 0x4f, 0xf4, 0x78, 0xbf, 0x8a, 0x98, 0x37, 0x30, 0xcf, 0x7d, 0x7c, 0x4f, + 0x53, 0xec, 0xd4, 0xc4, 0x19, 0xf9, 0x90, 0xc5, 0x39, 0xc8, 0x66, 0xfd, 0xea, 0xb5, 0xdf, 0x46, 0x1b, 0x17, 0xcd, + 0x58, 0xf4, 0xcc, 0x13, 0x27, 0x3f, 0x14, 0xc6, 0x38, 0xc0, 0x3a, 0xfa, 0x23, 0x4c, 0x2d, 0xd8, 0xb3, 0xc4, 0x53, + 0xe8, 0xe4, 0xd6, 0xa6, 0xdd, 0x85, 0x69, 0x77, 0x26, 0xad, 0x03, 0xe5, 0x80, 0x34, 0xbb, 0x32, 0x9d, 0x3b, 0xff, + 0x7d, 0x07, 0x2f, 0xdd, 0xae, 0x21, 0x12, 0xf7, 0xfc, 0x91, 0x31, 0x86, 0x78, 0x03, 0x36, 0xa2, 0xea, 0xe0, 0xe0, + 0x0f, 0xe7, 0x7d, 0x5b, 0xc9, 0x7d, 0xdf, 0x0a, 0x07, 0xb6, 0xc1, 0x54, 0xba, 0xbc, 0x91, 0xcc, 0x16, 0x60, 0xd7, + 0xb9, 0xff, 0x8d, 0x78, 0xf8, 0x22, 0x64, 0x5a, 0xac, 0xab, 0xf8, 0x2b, 0x39, 0x2a, 0x3d, 0x44, 0x35, 0x44, 0x20, + 0xad, 0xac, 0x4b, 0x43, 0xd3, 0xd1, 0xab, 0x29, 0x1d, 0xc9, 0x9b, 0xb7, 0x52, 0xea, 0x81, 0x7d, 0x91, 0x5b, 0x27, + 0xf0, 0x68, 0x61, 0x8d, 0xa1, 0xb9, 0x2b, 0xbd, 0x93, 0x6c, 0x40, 0xd4, 0xfa, 0xb8, 0x43, 0x49, 0x24, 0x16, 0xd5, + 0x5d, 0x08, 0x87, 0xbb, 0x10, 0xcc, 0xcb, 0xa0, 0x6d, 0x10, 0xbb, 0xdd, 0x05, 0x6d, 0x03, 0xa7, 0x6e, 0x1b, 0xb8, + 0x3d, 0x18, 0x2c, 0xec, 0x7d, 0x78, 0x39, 0x96, 0x63, 0xe1, 0xaf, 0xc9, 0xec, 0x03, 0x40, 0xa0, 0xf6, 0x61, 0xc5, + 0x13, 0x07, 0x82, 0xc4, 0x19, 0x8e, 0xbe, 0xe7, 0xec, 0xc6, 0x5a, 0x0e, 0xcf, 0xe6, 0x0b, 0xcd, 0x46, 0xe6, 0x8e, + 0x1a, 0x54, 0x7c, 0x75, 0x3f, 0xaf, 0x9f, 0xb2, 0x9a, 0x6e, 0xfc, 0x1e, 0x84, 0x91, 0x70, 0xca, 0x0e, 0xa3, 0x90, + 0xb0, 0xc1, 0xac, 0xca, 0x78, 0x6d, 0xbf, 0x41, 0xbc, 0x07, 0x6d, 0xc2, 0x09, 0x16, 0xb5, 0x0b, 0xaa, 0x08, 0xdb, + 0x78, 0x63, 0x41, 0x94, 0x87, 0x37, 0x5b, 0x46, 0xd3, 0xcb, 0x35, 0x04, 0x3a, 0xee, 0x45, 0xcd, 0xa8, 0xc1, 0x52, + 0x17, 0x94, 0xd9, 0x47, 0x18, 0x57, 0x17, 0x27, 0x26, 0x4e, 0x7b, 0xa9, 0x57, 0xff, 0x2d, 0x03, 0x03, 0x7c, 0x01, + 0x5e, 0x62, 0x61, 0x74, 0xd7, 0xbe, 0x6e, 0x40, 0x7d, 0xd9, 0x60, 0x03, 0xb4, 0x5a, 0xb5, 0xca, 0x67, 0xa0, 0xdc, + 0x35, 0x97, 0xb0, 0xd7, 0x5c, 0xc2, 0x5d, 0x73, 0x09, 0x7f, 0xcd, 0x25, 0xcc, 0x35, 0x97, 0xf0, 0xd7, 0x5c, 0x1e, + 0x84, 0x9f, 0x82, 0x38, 0x8e, 0x31, 0x87, 0xb8, 0x8a, 0xda, 0x46, 0xc6, 0x83, 0x0b, 0xcf, 0x7d, 0x96, 0xa8, 0x72, + 0xf9, 0xc3, 0x18, 0x72, 0x5b, 0xb6, 0x12, 0xc6, 0x6d, 0x8a, 0x29, 0x88, 0x9c, 0x7e, 0x70, 0x50, 0xba, 0x3b, 0x83, + 0x8f, 0x7a, 0xca, 0xf1, 0xd2, 0x3a, 0xd1, 0xfe, 0x01, 0x3a, 0x79, 0xf3, 0xeb, 0x63, 0x2a, 0xd7, 0x44, 0x38, 0x93, + 0xfb, 0xfd, 0xb6, 0xa7, 0x14, 0x9f, 0x32, 0x13, 0x9e, 0x9c, 0x27, 0xda, 0x88, 0x20, 0x08, 0x51, 0xa2, 0x70, 0x46, + 0xa4, 0xdd, 0xef, 0xde, 0x15, 0xde, 0xa8, 0xa2, 0xbc, 0x59, 0xc9, 0xe3, 0x1c, 0x9c, 0xd8, 0x8d, 0x15, 0x06, 0xea, + 0x82, 0x0b, 0x41, 0x66, 0x12, 0xfe, 0x68, 0xe6, 0x96, 0x9c, 0x65, 0x65, 0xd2, 0xc7, 0x66, 0x6e, 0x08, 0x58, 0x41, + 0xf6, 0x3d, 0xcc, 0x96, 0xb7, 0x29, 0xc5, 0x77, 0x69, 0x86, 0x87, 0xf2, 0x36, 0x2d, 0x42, 0x5b, 0x10, 0x7f, 0xf1, + 0x37, 0x8e, 0x23, 0x41, 0xc1, 0xdf, 0x27, 0xe2, 0x62, 0x8f, 0x6f, 0x78, 0x01, 0x2e, 0x33, 0x63, 0x51, 0x9d, 0x32, + 0xfc, 0x0d, 0x4b, 0x78, 0x08, 0x4e, 0xa6, 0xb1, 0x22, 0xf7, 0x38, 0xb0, 0x13, 0x92, 0x80, 0xc3, 0xd5, 0xed, 0x15, + 0xff, 0x0a, 0x17, 0x5f, 0xa5, 0xb3, 0x65, 0x73, 0x28, 0x6f, 0x23, 0x5c, 0x90, 0x37, 0xf0, 0xfa, 0xd6, 0xff, 0xcb, + 0xde, 0xdb, 0x36, 0xb7, 0x6d, 0x64, 0xeb, 0xa2, 0x7f, 0x45, 0x62, 0xd9, 0x0c, 0x60, 0x36, 0x29, 0xca, 0xe7, 0xcc, + 0x54, 0x5d, 0x50, 0x6d, 0x96, 0x63, 0xc7, 0x13, 0x67, 0x22, 0xdb, 0x63, 0x79, 0x32, 0xc9, 0xb0, 0x78, 0x19, 0x08, + 0x68, 0x0a, 0x70, 0x40, 0x80, 0x01, 0x40, 0x89, 0x34, 0x89, 0xff, 0x7e, 0x6a, 0xad, 0xd5, 0xaf, 0x20, 0x28, 0x7b, + 0xf6, 0x3e, 0xfb, 0xd3, 0xbd, 0x5f, 0x6c, 0xb1, 0xd1, 0x68, 0xf4, 0x7b, 0xaf, 0x5e, 0x2f, 0xcf, 0xd3, 0x93, 0xb1, + 0xba, 0x3d, 0x70, 0xd6, 0xa5, 0x14, 0x1d, 0x6f, 0x8a, 0xc3, 0xdb, 0xf3, 0xd9, 0x7e, 0x1b, 0x44, 0x6c, 0x17, 0x64, + 0x58, 0xeb, 0xa4, 0xe1, 0x3f, 0xd1, 0xd6, 0xc1, 0x62, 0x84, 0xfd, 0x5f, 0xd6, 0x03, 0x2f, 0x21, 0x35, 0x14, 0xb8, + 0x18, 0x6c, 0x38, 0x5a, 0xdb, 0x65, 0x1a, 0xb8, 0xa9, 0x41, 0xaf, 0xef, 0x29, 0x44, 0x79, 0xc9, 0x68, 0x6e, 0x04, + 0xeb, 0xc6, 0x90, 0x8b, 0xc3, 0x71, 0xb3, 0x1c, 0xf2, 0x92, 0xa6, 0xd3, 0x20, 0x94, 0xee, 0x2c, 0x6b, 0x48, 0xa2, + 0xec, 0x83, 0x50, 0xbb, 0xb6, 0xec, 0xb7, 0x81, 0xed, 0xcb, 0x1f, 0x0d, 0x63, 0xff, 0x62, 0xf9, 0x4c, 0x48, 0x17, + 0xf1, 0x1c, 0x04, 0x51, 0xfb, 0x79, 0x36, 0xdc, 0xf8, 0x17, 0xeb, 0x67, 0x42, 0xf9, 0x8d, 0xe7, 0xb6, 0x1c, 0x52, + 0x67, 0x2d, 0x7c, 0x61, 0x3c, 0x3c, 0xb8, 0x32, 0xb4, 0x1d, 0x0e, 0x42, 0xff, 0x6d, 0xd6, 0x08, 0x6e, 0x6c, 0x68, + 0x9f, 0x2f, 0x7c, 0xd8, 0xda, 0x68, 0xac, 0x29, 0xa6, 0x5b, 0xe8, 0xdf, 0x64, 0xb6, 0xb4, 0xa7, 0x51, 0xc9, 0x8b, + 0x53, 0xd3, 0x88, 0x85, 0x30, 0x60, 0xe8, 0x27, 0xf3, 0x01, 0x54, 0x73, 0xc7, 0x23, 0x90, 0xc9, 0x07, 0x7a, 0xb0, + 0x26, 0xb5, 0xea, 0xaf, 0x61, 0x26, 0xff, 0x8f, 0x54, 0x58, 0x8c, 0xee, 0xb6, 0x61, 0xa6, 0xfe, 0x88, 0xe4, 0x1f, + 0x2c, 0xe7, 0xbb, 0xd4, 0x0b, 0xb5, 0x1f, 0x0b, 0x2b, 0x30, 0x28, 0x51, 0x35, 0xa0, 0x07, 0x22, 0xa8, 0xca, 0x20, + 0xcd, 0xb0, 0x3a, 0x07, 0xfd, 0xee, 0x69, 0xd5, 0x91, 0x1c, 0xd2, 0x5a, 0x0d, 0xa9, 0x60, 0xaa, 0xd4, 0x20, 0x3f, + 0x1c, 0xee, 0x52, 0xa6, 0xcb, 0x80, 0x4b, 0xfa, 0x5d, 0xaa, 0x94, 0xc2, 0x7f, 0x22, 0x00, 0x9d, 0x83, 0x7b, 0x7c, + 0x39, 0x06, 0xd2, 0x0c, 0x0b, 0xbf, 0x35, 0x3b, 0xbe, 0x26, 0xe1, 0x36, 0x09, 0x2e, 0x06, 0x38, 0x47, 0x57, 0x61, + 0x79, 0x97, 0x42, 0x04, 0x55, 0x09, 0xf5, 0xad, 0x4c, 0x83, 0xd2, 0x56, 0x83, 0xb0, 0x26, 0xa1, 0xce, 0x24, 0x1b, + 0x95, 0xb6, 0x1b, 0x85, 0xd9, 0x22, 0xae, 0x67, 0x84, 0x35, 0x67, 0x33, 0xd5, 0xc0, 0xa4, 0xe1, 0xb8, 0x69, 0xb4, + 0x16, 0x15, 0x6a, 0x0a, 0xf3, 0x1a, 0x57, 0x95, 0xaa, 0xee, 0xe6, 0xd4, 0x52, 0x5a, 0xb6, 0x57, 0xdd, 0x24, 0x1b, + 0x72, 0x19, 0xca, 0x30, 0xd8, 0xc8, 0x11, 0x4c, 0x20, 0x49, 0xce, 0xfc, 0x8d, 0xfc, 0x43, 0x6d, 0xba, 0x16, 0x30, + 0xc7, 0x98, 0x65, 0xc3, 0x82, 0x5e, 0x81, 0x7b, 0xa0, 0x95, 0x9e, 0x4f, 0xb3, 0x8b, 0x3c, 0x48, 0x86, 0x85, 0x5e, + 0x36, 0x19, 0xff, 0x53, 0x18, 0x69, 0x32, 0x63, 0x25, 0x8b, 0x6c, 0x57, 0xa7, 0xc4, 0x79, 0x9c, 0xc0, 0xf6, 0x68, + 0x7a, 0xcb, 0xf7, 0x19, 0x44, 0x05, 0x81, 0x82, 0x19, 0xf3, 0x65, 0x17, 0xcf, 0x7d, 0x9f, 0x59, 0xa6, 0xee, 0xc3, + 0xc1, 0x98, 0xb1, 0xfd, 0x7e, 0x3f, 0xef, 0xf7, 0xd5, 0x7c, 0xeb, 0xf7, 0x93, 0x17, 0xe6, 0x6f, 0x0f, 0x18, 0x14, + 0xe4, 0x44, 0x34, 0x15, 0x22, 0xf8, 0x87, 0xe4, 0x19, 0x92, 0xd1, 0x1d, 0xf7, 0xb9, 0xe5, 0x6c, 0x59, 0x1d, 0x81, + 0x60, 0x1e, 0x0e, 0x97, 0x0a, 0xec, 0x5a, 0xa2, 0x48, 0xc8, 0xf2, 0x9f, 0x81, 0xf1, 0xcc, 0x7d, 0x80, 0x25, 0x03, + 0x10, 0xb6, 0xca, 0xd3, 0xf5, 0x9e, 0xaf, 0x82, 0x77, 0x3a, 0xde, 0x35, 0x56, 0x64, 0x20, 0x6e, 0x81, 0x8d, 0x58, + 0x6b, 0x0f, 0xc8, 0x99, 0x02, 0x1c, 0x2f, 0x0e, 0x87, 0x73, 0xf9, 0x4b, 0x37, 0x5b, 0x27, 0x50, 0x29, 0x70, 0x7b, + 0x74, 0x72, 0xf0, 0xdf, 0x81, 0x66, 0x50, 0x0e, 0xf3, 0x7a, 0xfb, 0x3b, 0x73, 0xf2, 0xd3, 0x53, 0xfc, 0x13, 0x1e, + 0xa2, 0xd3, 0x6f, 0xf7, 0xe6, 0x0f, 0x8a, 0xca, 0xc3, 0x41, 0x2d, 0xfe, 0x73, 0xce, 0x2b, 0xf8, 0x85, 0x6f, 0x02, + 0xb3, 0xc9, 0xd4, 0x3b, 0xf9, 0x26, 0xcf, 0x99, 0x7a, 0x8d, 0x57, 0x4c, 0xbe, 0xc3, 0xe1, 0x5c, 0x8c, 0xea, 0xed, + 0xc8, 0x89, 0x76, 0xca, 0x31, 0x0e, 0x06, 0xff, 0x45, 0xb4, 0x4d, 0x08, 0x30, 0xa4, 0x6e, 0x49, 0x33, 0x1b, 0x57, + 0x96, 0x78, 0x96, 0xce, 0x2f, 0x27, 0x75, 0xb9, 0xd3, 0x8a, 0xa7, 0x3d, 0xb0, 0xb8, 0xad, 0xc1, 0x0b, 0xe0, 0xde, + 0x62, 0xeb, 0x4a, 0xc1, 0xe1, 0x02, 0xe2, 0x14, 0x27, 0x20, 0x82, 0xf6, 0xfb, 0x12, 0xef, 0x15, 0xf4, 0x49, 0x3f, + 0x40, 0x30, 0xe4, 0xcf, 0x12, 0x70, 0xd7, 0xeb, 0xd5, 0x18, 0xdf, 0x4b, 0x21, 0xb8, 0x3e, 0xd3, 0x00, 0xb4, 0xe0, + 0x77, 0xf9, 0x58, 0x4e, 0xbf, 0x89, 0xc0, 0xb3, 0x65, 0x6f, 0xa2, 0xdc, 0x6d, 0x78, 0xda, 0x3f, 0x5a, 0x08, 0xc0, + 0x52, 0x3c, 0x53, 0x82, 0x05, 0x39, 0xc5, 0x5c, 0xfc, 0xbf, 0xe0, 0x23, 0xe6, 0x7b, 0xd2, 0x45, 0x6c, 0xbd, 0x7d, + 0x72, 0x61, 0x20, 0x81, 0xa6, 0x03, 0xf0, 0xe3, 0x55, 0x40, 0x57, 0xc6, 0xcf, 0xcf, 0xb2, 0x1e, 0xeb, 0xe3, 0x3f, + 0x05, 0xf7, 0xe9, 0x67, 0x0a, 0x1f, 0x1d, 0x8e, 0xab, 0x74, 0xb4, 0xa3, 0x14, 0x44, 0x47, 0xb7, 0xcf, 0xa7, 0x3c, + 0xfb, 0xa6, 0x02, 0x72, 0xcb, 0x51, 0x7b, 0x2a, 0x00, 0x8b, 0x2d, 0x1d, 0x81, 0x4f, 0xb3, 0x7c, 0x42, 0xbe, 0xd7, + 0x53, 0x71, 0x75, 0xa9, 0xd3, 0xc5, 0x8b, 0xf1, 0x14, 0xfe, 0x07, 0x62, 0x0f, 0xcb, 0x14, 0xd9, 0xb1, 0xeb, 0xe2, + 0x07, 0xf1, 0xb6, 0xb6, 0xa3, 0x3f, 0x76, 0x10, 0xe9, 0xb8, 0x27, 0x17, 0xea, 0x4b, 0x48, 0x25, 0x17, 0xea, 0x06, + 0x62, 0x17, 0x6a, 0xbc, 0xe3, 0x22, 0xd6, 0xfa, 0x75, 0x8d, 0x82, 0x95, 0x80, 0x33, 0xed, 0x1a, 0x0c, 0x36, 0xb0, + 0x6e, 0x59, 0x06, 0x7f, 0xc3, 0x35, 0x4d, 0xe0, 0x86, 0x45, 0xd6, 0x7b, 0x83, 0xad, 0x74, 0x0d, 0x8e, 0x96, 0x89, + 0x73, 0x29, 0xc9, 0xca, 0x16, 0x19, 0x57, 0x8f, 0x42, 0xaa, 0xa6, 0xfb, 0x5b, 0x51, 0x3f, 0x08, 0x91, 0x07, 0xab, + 0x94, 0x45, 0xc5, 0x0a, 0x64, 0xf6, 0xe0, 0x1f, 0x21, 0x23, 0x47, 0x39, 0x70, 0x14, 0xfa, 0x5b, 0x13, 0xe8, 0x3c, + 0x3f, 0x85, 0x3a, 0x8f, 0x04, 0x5b, 0xa9, 0x87, 0xc2, 0xca, 0x0b, 0x88, 0x0e, 0xb6, 0x30, 0x56, 0x79, 0x12, 0x2a, + 0x36, 0x65, 0x22, 0x8f, 0x83, 0x5a, 0x02, 0xc6, 0x0a, 0x82, 0x39, 0xcb, 0xa5, 0x0b, 0x52, 0xd5, 0xe8, 0x61, 0x91, + 0xb9, 0x9f, 0x0a, 0xca, 0xff, 0x54, 0xe5, 0x84, 0xeb, 0xcb, 0x10, 0xe0, 0x68, 0x9f, 0x82, 0x28, 0x31, 0xd6, 0x2f, + 0x5a, 0xbc, 0x93, 0x99, 0xb3, 0xa9, 0xed, 0x25, 0xc8, 0xd8, 0x0e, 0xbf, 0x42, 0x68, 0xb5, 0x50, 0x64, 0xd1, 0x70, + 0xc1, 0x74, 0x7b, 0x4a, 0xab, 0xee, 0x61, 0xc3, 0xb3, 0xd2, 0x43, 0xa5, 0xbe, 0x8d, 0x09, 0x2c, 0xab, 0x94, 0xe1, + 0xdb, 0x09, 0x55, 0x27, 0x06, 0x15, 0xeb, 0x86, 0x2d, 0xe1, 0x10, 0x8b, 0x49, 0x63, 0x9d, 0x0d, 0x78, 0xc4, 0x12, + 0xf8, 0x67, 0xc3, 0xc7, 0x6c, 0xc9, 0xa3, 0xc9, 0xe6, 0x6a, 0xd9, 0xef, 0x97, 0x5e, 0xe8, 0xd5, 0xb3, 0xec, 0x69, + 0x34, 0x9f, 0xe5, 0x73, 0x1f, 0x15, 0x17, 0x93, 0xc1, 0x60, 0xe3, 0x67, 0xc3, 0x21, 0x4b, 0x86, 0xc3, 0x49, 0xf6, + 0x14, 0x5e, 0x7b, 0xca, 0x23, 0xb5, 0xa4, 0x92, 0xab, 0x0c, 0xf6, 0xf7, 0x01, 0x8f, 0x7c, 0xd6, 0xf9, 0x69, 0xd9, + 0x74, 0xe9, 0x7e, 0x66, 0xc7, 0x5d, 0xe8, 0x0e, 0xb0, 0xf1, 0xb6, 0x41, 0x47, 0xfe, 0xf5, 0x0e, 0x29, 0x75, 0x93, + 0x01, 0xd8, 0x8d, 0x06, 0x38, 0x64, 0xaa, 0x97, 0x22, 0xab, 0x97, 0x32, 0xd5, 0x4b, 0xb2, 0x72, 0x09, 0x16, 0x12, + 0x53, 0xe5, 0x36, 0xb2, 0x72, 0xcb, 0x86, 0xeb, 0xe1, 0x60, 0x6b, 0xc5, 0x65, 0x73, 0x07, 0xf7, 0x85, 0x15, 0x05, + 0xfe, 0xdf, 0xb2, 0x05, 0xbb, 0x97, 0xc7, 0xc0, 0x35, 0x3a, 0x26, 0xc1, 0x05, 0xe2, 0x9e, 0xdd, 0x82, 0x1d, 0x16, + 0xfe, 0x82, 0xeb, 0xe4, 0x98, 0xed, 0xf0, 0x51, 0xe8, 0x15, 0xec, 0xd6, 0x27, 0xa0, 0x5d, 0xb0, 0x35, 0x40, 0x36, + 0xb6, 0xc5, 0x47, 0x77, 0x87, 0xc3, 0xb5, 0xe7, 0xb3, 0x07, 0xfc, 0x71, 0x7e, 0x77, 0x38, 0xec, 0x3c, 0xa3, 0xde, + 0xbb, 0xe1, 0x09, 0x7b, 0xcf, 0x93, 0xc9, 0xcd, 0x15, 0x8f, 0x27, 0x83, 0xc1, 0x8d, 0xbf, 0xe0, 0xf5, 0xec, 0x06, + 0xb4, 0x03, 0xe7, 0x0b, 0xa9, 0x6b, 0xf6, 0x6e, 0x79, 0xe6, 0x2d, 0x70, 0x6c, 0x6e, 0xe1, 0xe8, 0xed, 0xf7, 0xbd, + 0x3b, 0x1e, 0x79, 0xb7, 0xa4, 0x62, 0x5a, 0x71, 0xc5, 0xf1, 0xb6, 0xc5, 0xfd, 0x74, 0xc5, 0x43, 0x78, 0x84, 0x55, + 0x99, 0xde, 0x04, 0xef, 0x7d, 0xb6, 0xd2, 0x2c, 0x70, 0x0f, 0x98, 0x63, 0x4d, 0x76, 0x42, 0x33, 0xf1, 0x57, 0xd8, + 0x3f, 0x37, 0xaa, 0x7f, 0x68, 0xfe, 0x97, 0xba, 0x9f, 0xc0, 0xed, 0x8b, 0x2c, 0x48, 0xec, 0x3d, 0xbf, 0x61, 0xf7, + 0xdc, 0xb0, 0xcd, 0x9e, 0x99, 0xb2, 0x4f, 0x94, 0x1a, 0x3f, 0x52, 0xea, 0xda, 0x32, 0xac, 0x64, 0xee, 0xbe, 0x8c, + 0xc0, 0xe1, 0x80, 0xfc, 0x74, 0x87, 0x38, 0x08, 0xad, 0x9b, 0xac, 0xe6, 0x8a, 0x72, 0x2e, 0xb4, 0x65, 0xe6, 0xe5, + 0xc0, 0x62, 0x96, 0x52, 0x68, 0x2c, 0x00, 0x10, 0x4c, 0x0a, 0xad, 0xbd, 0x97, 0x01, 0xe4, 0x04, 0x0d, 0x7f, 0x6c, + 0xae, 0x8a, 0xb2, 0x96, 0x2d, 0x09, 0x51, 0xb6, 0xeb, 0xe1, 0x25, 0x42, 0xa6, 0xf5, 0xfb, 0xe7, 0x44, 0xb2, 0x36, + 0xa9, 0xae, 0x6a, 0xb4, 0x04, 0x54, 0x64, 0x09, 0x98, 0xf8, 0x95, 0xe6, 0x13, 0x80, 0x27, 0x1d, 0x0f, 0xaa, 0xa7, + 0xbc, 0x66, 0x82, 0xc8, 0x36, 0x2a, 0x7f, 0x52, 0xbc, 0x40, 0x32, 0x82, 0xe2, 0x69, 0xad, 0x32, 0x16, 0x86, 0x79, + 0xa0, 0x80, 0xbc, 0x7b, 0x77, 0xea, 0x5b, 0xfb, 0x63, 0xc7, 0x9e, 0xad, 0x55, 0xa8, 0x85, 0x9a, 0xc2, 0x25, 0x87, + 0xe8, 0x0a, 0x32, 0x50, 0xc8, 0x78, 0xf2, 0x7a, 0x70, 0x39, 0x89, 0xae, 0xb8, 0x40, 0x67, 0x7c, 0x7d, 0xd3, 0x4d, + 0x67, 0xd1, 0xd3, 0x6a, 0x3e, 0x21, 0x25, 0xd9, 0xe1, 0x90, 0x8d, 0xaa, 0xba, 0x58, 0x4f, 0x43, 0xf9, 0xd3, 0x43, + 0xf0, 0xf5, 0x82, 0x7a, 0x4d, 0x56, 0xa9, 0x7e, 0x4a, 0x95, 0xf2, 0xa2, 0xe1, 0xa5, 0xff, 0xb4, 0x92, 0xfb, 0x1e, + 0x90, 0xd6, 0xf2, 0x92, 0xcb, 0xf7, 0x23, 0xc4, 0x18, 0xf1, 0x03, 0xaf, 0xe4, 0x11, 0x0b, 0xd5, 0x14, 0xae, 0x79, + 0x84, 0x20, 0x6f, 0x99, 0x0e, 0xfe, 0xd6, 0x13, 0xa7, 0xfb, 0x13, 0xa5, 0x5d, 0x7c, 0x61, 0x51, 0xf7, 0x64, 0x6d, + 0xdd, 0x80, 0x1c, 0x6c, 0x98, 0x2e, 0x0a, 0xb2, 0x4d, 0x69, 0x04, 0x6d, 0xb4, 0x1c, 0xd8, 0x70, 0x2a, 0xb5, 0xe1, + 0xcc, 0x35, 0x04, 0xf7, 0xf9, 0x79, 0x3a, 0x5a, 0xc0, 0x87, 0x54, 0xb7, 0x97, 0xf8, 0xf9, 0xb0, 0xe1, 0x11, 0x90, + 0xd9, 0x11, 0x9f, 0xd9, 0x44, 0xd2, 0x49, 0x9d, 0x2b, 0x60, 0xb7, 0xb3, 0x6b, 0x90, 0x23, 0x66, 0xee, 0x2b, 0x54, + 0xdf, 0xa2, 0x01, 0x57, 0xc6, 0xda, 0xd7, 0x24, 0x63, 0xe1, 0x55, 0x39, 0x0d, 0x07, 0x00, 0x43, 0x97, 0xd1, 0xd7, + 0x96, 0x9b, 0x2c, 0xfb, 0xb9, 0x80, 0x20, 0x88, 0x92, 0x78, 0x7c, 0xc0, 0xfb, 0xb2, 0x1a, 0x6a, 0x94, 0x7c, 0x2c, + 0x1b, 0xa9, 0xf4, 0x4a, 0xf4, 0x77, 0x63, 0x2e, 0x31, 0xe0, 0x75, 0xd5, 0x16, 0x14, 0xce, 0xf3, 0xc3, 0xe1, 0x3c, + 0x1f, 0x19, 0xcf, 0x32, 0x50, 0xad, 0x4c, 0xeb, 0x20, 0x36, 0xf3, 0xc5, 0xc2, 0x5f, 0xec, 0x9c, 0x44, 0x44, 0x41, + 0x60, 0x47, 0xc2, 0x83, 0x48, 0xfd, 0xaa, 0xf2, 0x74, 0xa7, 0xfa, 0x6c, 0xbf, 0xb0, 0x89, 0xf4, 0x82, 0x92, 0xc9, + 0x27, 0xc1, 0x5e, 0xf5, 0x77, 0x10, 0x36, 0x84, 0x37, 0xaf, 0x7a, 0x9d, 0x65, 0x6a, 0x56, 0x82, 0x84, 0x19, 0x73, + 0x04, 0x8f, 0xc3, 0x4e, 0x63, 0x1b, 0x1e, 0x5b, 0x70, 0x74, 0xde, 0x9a, 0xdd, 0xb1, 0x15, 0xbb, 0x55, 0x75, 0x5a, + 0xf0, 0x70, 0x3a, 0xbc, 0x0c, 0x70, 0xf5, 0xad, 0xcf, 0x39, 0xbf, 0xa3, 0x13, 0x6c, 0x3d, 0xe0, 0xd1, 0x44, 0xcc, + 0xd6, 0x4f, 0x23, 0xb5, 0x78, 0xd6, 0x43, 0xbe, 0xa0, 0xf5, 0x27, 0x66, 0x77, 0x26, 0xf9, 0x6e, 0xc0, 0x17, 0x93, + 0xf5, 0xd3, 0x08, 0x5e, 0x7d, 0x0a, 0x56, 0x8c, 0xcc, 0x99, 0x65, 0xeb, 0xa7, 0x11, 0x8e, 0xd9, 0xdd, 0xd3, 0x88, + 0x46, 0x6d, 0x25, 0xf7, 0xa5, 0xdb, 0x06, 0x84, 0x95, 0x5b, 0x16, 0xc3, 0x6b, 0x20, 0x9e, 0x69, 0x23, 0xe9, 0x5a, + 0x1a, 0x7a, 0x63, 0x1e, 0x4e, 0xe3, 0x60, 0x4d, 0xad, 0x90, 0x67, 0x86, 0x98, 0xc5, 0x4f, 0xa3, 0x39, 0x5b, 0x61, + 0x45, 0x36, 0x3c, 0x1e, 0x5c, 0x4e, 0x36, 0x57, 0x7c, 0x0d, 0xe4, 0x67, 0x93, 0x8d, 0xd9, 0xa2, 0x6e, 0xb9, 0x98, + 0x6d, 0x9e, 0x46, 0xf3, 0xc9, 0x0a, 0x7a, 0xd6, 0x1e, 0x30, 0xef, 0x0d, 0x88, 0x50, 0x12, 0x52, 0x53, 0x6e, 0x7a, + 0x3d, 0xb6, 0x1e, 0x07, 0x77, 0x6c, 0x7d, 0x19, 0xdc, 0xb2, 0xf5, 0x18, 0x88, 0x38, 0xa8, 0xdf, 0xbd, 0x0d, 0x2c, + 0xbe, 0x88, 0xad, 0x2f, 0x4d, 0xda, 0xe6, 0x69, 0xc4, 0xdc, 0xc1, 0x69, 0xe0, 0x82, 0xb5, 0xc9, 0xbc, 0x15, 0x83, + 0x4b, 0xc8, 0xd2, 0x8b, 0xd9, 0x66, 0x78, 0xc9, 0xd6, 0x23, 0x9c, 0xea, 0x89, 0xcf, 0xee, 0xf8, 0x2d, 0x4b, 0xf8, + 0xaa, 0x89, 0xaf, 0x36, 0xa0, 0x11, 0x3d, 0xca, 0xa0, 0xaf, 0xa0, 0x66, 0xe6, 0xbc, 0xb2, 0x30, 0x2a, 0xf7, 0x2d, + 0x38, 0xa0, 0x20, 0x6d, 0x03, 0x04, 0x49, 0x3c, 0xbb, 0x57, 0xe1, 0xfa, 0x46, 0x0a, 0x03, 0x6e, 0x02, 0x33, 0x60, + 0x60, 0xfa, 0x19, 0xfc, 0xb0, 0xd2, 0x25, 0x42, 0x9c, 0xfd, 0x94, 0x92, 0x64, 0x9e, 0x9f, 0x8a, 0x34, 0x77, 0x0b, + 0xd7, 0x29, 0xcc, 0x8a, 0x02, 0xd5, 0x4f, 0x49, 0x69, 0x60, 0xa1, 0x12, 0x99, 0x4a, 0xc1, 0x2f, 0x9b, 0xf3, 0x28, + 0x3b, 0x46, 0xe7, 0x3a, 0xbf, 0x9c, 0x38, 0xa7, 0x93, 0xbe, 0xff, 0xc0, 0x31, 0x6c, 0x21, 0x03, 0x17, 0xfe, 0xd4, + 0x13, 0xc6, 0xa9, 0x15, 0x88, 0xa9, 0xe4, 0xd9, 0x53, 0xf8, 0x4c, 0x68, 0x75, 0x74, 0xe1, 0xfb, 0x41, 0xa1, 0x4d, + 0xd2, 0x2d, 0x48, 0x52, 0xf0, 0x14, 0x3d, 0xe7, 0xbc, 0x0d, 0x54, 0x8a, 0x11, 0x2d, 0x88, 0xb4, 0xb5, 0xcc, 0x1c, + 0xa4, 0x2d, 0xcd, 0x77, 0x4d, 0xfc, 0x1c, 0x16, 0x70, 0x11, 0x2d, 0x6c, 0x0d, 0x8f, 0xaa, 0x58, 0xb9, 0x37, 0x79, + 0x8e, 0x70, 0x46, 0x97, 0x32, 0x01, 0x70, 0xbd, 0x5f, 0x87, 0xb5, 0xc2, 0x2b, 0x6a, 0x16, 0x79, 0x51, 0xd3, 0x27, + 0x5b, 0xe0, 0x3e, 0x16, 0x25, 0x0a, 0x9c, 0xb5, 0x60, 0xc0, 0x56, 0x58, 0xb2, 0x93, 0xc2, 0xa6, 0x68, 0x09, 0xbd, + 0x3d, 0x7e, 0x3a, 0xa8, 0x99, 0x0c, 0xa0, 0x09, 0xa0, 0xf1, 0xf8, 0x17, 0x80, 0x9a, 0xde, 0xd4, 0x62, 0x5d, 0x05, + 0xa5, 0x52, 0x6e, 0xc2, 0xcf, 0xc0, 0x30, 0xc3, 0x0f, 0x85, 0xdc, 0x26, 0x4a, 0xe4, 0xfc, 0x58, 0x94, 0x62, 0x59, + 0x8a, 0x2a, 0x69, 0x37, 0x14, 0x3c, 0x22, 0xdc, 0x06, 0x8d, 0x99, 0xdb, 0x13, 0x5d, 0xb4, 0x22, 0x94, 0x63, 0xb3, + 0x8e, 0x91, 0x46, 0x99, 0x9d, 0xec, 0x3a, 0x59, 0x68, 0xbf, 0xaf, 0x72, 0xc8, 0x3a, 0x60, 0x8d, 0xe4, 0xeb, 0x35, + 0x87, 0x6e, 0x1b, 0xe5, 0xc5, 0x83, 0xe7, 0x2b, 0x38, 0xcd, 0xf1, 0xc4, 0xee, 0x7a, 0xdd, 0x29, 0x12, 0xf1, 0x0a, + 0x27, 0x55, 0x3e, 0x92, 0x85, 0xe3, 0xce, 0x9d, 0xd6, 0x62, 0x55, 0xb9, 0xac, 0xa7, 0x16, 0x47, 0x04, 0x3e, 0x95, + 0x47, 0x7b, 0xa1, 0x6d, 0x51, 0x2c, 0x84, 0xd1, 0xa3, 0x13, 0x7e, 0x52, 0x02, 0xeb, 0xeb, 0x70, 0x58, 0xfa, 0x11, + 0x47, 0xbf, 0xd3, 0x68, 0xb4, 0x20, 0xa4, 0xe1, 0xa9, 0x17, 0x8d, 0x16, 0x75, 0x51, 0x87, 0xd9, 0x8b, 0x5c, 0x0f, + 0x14, 0x86, 0x11, 0xa8, 0x1f, 0x5c, 0x65, 0xf0, 0x59, 0x84, 0xa8, 0x79, 0x60, 0x9a, 0x0d, 0xe1, 0xa8, 0x0b, 0x3c, + 0xb4, 0x82, 0x16, 0x33, 0xf3, 0x51, 0x88, 0xe1, 0x43, 0xba, 0x38, 0x7f, 0x42, 0x56, 0x3e, 0xc0, 0xee, 0xd0, 0x5d, + 0x28, 0xe7, 0x4c, 0xc5, 0x00, 0x3f, 0x0a, 0xc8, 0x47, 0x09, 0xb8, 0x19, 0x20, 0x7b, 0x64, 0x09, 0x20, 0x56, 0x8c, + 0x8e, 0x26, 0x9f, 0xfb, 0x5e, 0xa4, 0xe0, 0x9d, 0x7d, 0x96, 0xab, 0x09, 0x43, 0xe1, 0x13, 0x03, 0xdd, 0xfc, 0xc6, + 0x6f, 0xcf, 0x5b, 0x30, 0xb2, 0x4b, 0x52, 0xbc, 0xd6, 0x0c, 0xf7, 0x1b, 0x70, 0x3b, 0x02, 0xca, 0x9a, 0xea, 0x98, + 0x64, 0x9b, 0x86, 0x48, 0x06, 0xcc, 0x88, 0x11, 0x41, 0x65, 0xb9, 0xf0, 0xbf, 0x7b, 0x59, 0x14, 0x38, 0x80, 0xab, + 0x99, 0x0c, 0x5e, 0xbb, 0x30, 0x2a, 0x00, 0xce, 0x69, 0xe8, 0x94, 0xf6, 0xaa, 0xea, 0x90, 0xac, 0x9a, 0x1f, 0xcc, + 0xe6, 0x4d, 0xc3, 0xc4, 0x88, 0x20, 0xba, 0x08, 0x27, 0x98, 0x5e, 0x91, 0xbe, 0x56, 0x72, 0x3a, 0x5a, 0x75, 0xb4, + 0x96, 0x98, 0x98, 0x2b, 0x8a, 0xbf, 0x06, 0x3c, 0x6e, 0xf0, 0xea, 0x24, 0x4d, 0x27, 0xaa, 0x47, 0x8f, 0x5f, 0xa7, + 0xe9, 0xa4, 0xc4, 0x5d, 0xe1, 0x37, 0xe0, 0xa2, 0xd9, 0xe6, 0x43, 0x3f, 0x7e, 0x41, 0x11, 0x17, 0x35, 0xb8, 0xf2, + 0x4e, 0xf5, 0x95, 0xea, 0x23, 0xa8, 0x85, 0x27, 0x46, 0xd6, 0xc2, 0x93, 0x4b, 0xd6, 0x5a, 0x10, 0xcc, 0x6c, 0x0e, + 0x5c, 0xc8, 0xaf, 0x94, 0x22, 0xde, 0x44, 0x42, 0x2d, 0x06, 0xad, 0xc7, 0xcc, 0x59, 0x35, 0x5a, 0xa8, 0xcc, 0x08, + 0xed, 0xdb, 0x5a, 0x74, 0x7e, 0x23, 0x3f, 0xe5, 0xa9, 0x7d, 0xd9, 0x1e, 0xe7, 0xe3, 0x3d, 0xba, 0xab, 0xce, 0x32, + 0x93, 0x32, 0x3e, 0x99, 0x25, 0x28, 0xdc, 0x25, 0xd8, 0x80, 0x24, 0xfb, 0xb5, 0x0e, 0x90, 0x51, 0x7b, 0xed, 0x77, + 0x9d, 0xe5, 0xab, 0x9b, 0xad, 0xa1, 0xa8, 0xd4, 0x4a, 0x52, 0x1c, 0x64, 0xb8, 0x6e, 0x2b, 0x1f, 0x2e, 0x2e, 0xa0, + 0x67, 0x8c, 0x44, 0xe6, 0xf9, 0x13, 0xf9, 0x12, 0x9c, 0x33, 0xce, 0x0a, 0x81, 0x09, 0x63, 0xf5, 0xae, 0xb5, 0x54, + 0x1a, 0x52, 0x8c, 0x1d, 0x8d, 0xb2, 0xac, 0xb2, 0x74, 0x99, 0xad, 0x25, 0x6c, 0x59, 0x4e, 0x6e, 0x61, 0xcb, 0x4c, + 0x56, 0xf3, 0x7d, 0xc5, 0x1d, 0x94, 0x6f, 0xb6, 0xce, 0xf8, 0x5e, 0x22, 0x7b, 0xb7, 0x81, 0x12, 0x5e, 0x8c, 0xfe, + 0x82, 0xf4, 0xdb, 0x0c, 0xe3, 0x94, 0xdb, 0x4a, 0x5a, 0x80, 0xd3, 0x3f, 0x1c, 0xde, 0x57, 0x18, 0x34, 0x38, 0xc2, + 0x38, 0xb2, 0x7e, 0xff, 0xb6, 0xf2, 0x6a, 0x4c, 0xd4, 0xf1, 0x59, 0xfd, 0x7e, 0x45, 0x0f, 0xa7, 0xd5, 0x68, 0x95, + 0x6e, 0x91, 0x9d, 0xd0, 0xc6, 0xca, 0x0f, 0x6a, 0x05, 0xcc, 0xde, 0xfa, 0x7c, 0x3a, 0x00, 0x1d, 0x0b, 0x90, 0x68, + 0x36, 0x13, 0x89, 0x39, 0xe9, 0x9e, 0x84, 0xc7, 0x07, 0x16, 0x38, 0xc0, 0x54, 0xfc, 0x9f, 0xc2, 0x9b, 0x81, 0x0d, + 0x1a, 0x25, 0xfa, 0x1a, 0x5d, 0xd5, 0xe6, 0x46, 0xc7, 0x4b, 0x4f, 0x21, 0x91, 0x15, 0xac, 0x9a, 0xfb, 0x72, 0x03, + 0xa7, 0x3d, 0xd4, 0x1c, 0x2a, 0x4b, 0xf0, 0xb7, 0x5f, 0xe6, 0x87, 0xc3, 0x3a, 0x83, 0xc2, 0x76, 0x6b, 0xa1, 0xbd, + 0x31, 0x4b, 0x35, 0x54, 0x84, 0x83, 0xce, 0x57, 0x62, 0x56, 0x8f, 0xe8, 0xef, 0xf9, 0xe1, 0xb0, 0x22, 0x30, 0xe0, + 0xb0, 0x94, 0x99, 0x68, 0xa1, 0x58, 0x5a, 0x67, 0x33, 0xaa, 0x03, 0x0f, 0x4c, 0xcc, 0x59, 0xb8, 0x03, 0xd0, 0x26, + 0xb5, 0x0a, 0xf4, 0x2a, 0xa2, 0x9f, 0xb8, 0x5f, 0xdb, 0xaf, 0xd7, 0x23, 0xb3, 0x74, 0xe4, 0xc6, 0x58, 0x00, 0x70, + 0xe0, 0x79, 0x4d, 0xf2, 0x9c, 0x7c, 0x0d, 0xed, 0x9e, 0x5c, 0xc8, 0x9f, 0xa0, 0x6c, 0xe1, 0xb9, 0x6a, 0x5a, 0x59, + 0xac, 0xb8, 0xaa, 0x5e, 0x5d, 0xf0, 0xca, 0x64, 0x5a, 0xa5, 0x95, 0xa8, 0x94, 0x60, 0x40, 0x5d, 0xe2, 0xb5, 0xa6, + 0x19, 0xa5, 0x36, 0xea, 0x4c, 0xd4, 0x80, 0x0d, 0xf6, 0x53, 0xb5, 0xd1, 0xc9, 0xb9, 0x7c, 0x7e, 0x69, 0x1c, 0x3e, + 0xed, 0xea, 0xcd, 0x4c, 0xe5, 0xc0, 0x5f, 0x2b, 0x1f, 0x5a, 0x3d, 0x06, 0x3a, 0x20, 0xa7, 0x3f, 0x86, 0xc5, 0xc4, + 0xee, 0xd0, 0xbc, 0xdd, 0x5d, 0x56, 0x17, 0xe9, 0x9d, 0xa6, 0x64, 0x56, 0x6f, 0xf9, 0xcc, 0xea, 0xd1, 0x01, 0x2f, + 0x1e, 0xeb, 0xbd, 0xc2, 0x4c, 0x22, 0xb8, 0x18, 0xaa, 0x49, 0x64, 0x77, 0xa0, 0x35, 0x8f, 0x2a, 0x26, 0xc0, 0x0f, + 0x4a, 0xad, 0xe9, 0xbd, 0xdd, 0x15, 0xea, 0x94, 0xc2, 0xe3, 0xd6, 0x92, 0x1f, 0x98, 0x3b, 0xed, 0x5a, 0xe7, 0xe3, + 0xf9, 0xa5, 0xef, 0x37, 0xf2, 0x84, 0x36, 0x3b, 0x93, 0xd3, 0x3f, 0x79, 0xab, 0x7f, 0x98, 0xea, 0x5b, 0xe8, 0x4e, + 0xd0, 0x67, 0xe8, 0xaa, 0xea, 0xae, 0xc4, 0x16, 0x86, 0x7a, 0x62, 0x91, 0x17, 0xf2, 0xa4, 0x35, 0x76, 0x1c, 0xec, + 0x0d, 0x70, 0xe2, 0x97, 0x87, 0x83, 0xb8, 0xca, 0x7d, 0x76, 0xde, 0x35, 0xb2, 0x72, 0x00, 0x2b, 0x88, 0x82, 0x71, + 0x6b, 0x3e, 0xb6, 0x41, 0xba, 0xc4, 0xd5, 0xf8, 0xf8, 0x0d, 0xc5, 0x32, 0xd9, 0x44, 0x5c, 0x5c, 0xe4, 0x4f, 0x9f, + 0x03, 0x69, 0x59, 0xbf, 0x1f, 0xbd, 0xb8, 0x9c, 0x3e, 0x1f, 0x46, 0x01, 0x38, 0x76, 0xd9, 0xcb, 0xcb, 0x98, 0xaf, + 0x2e, 0x99, 0x65, 0x0a, 0x8b, 0x7c, 0x33, 0xa0, 0xba, 0x64, 0xb5, 0x74, 0xbd, 0x02, 0x2c, 0x5d, 0x7e, 0xf3, 0x10, + 0xa6, 0x06, 0x34, 0xb2, 0xe6, 0xee, 0x34, 0xd7, 0x02, 0xa5, 0x9e, 0xf7, 0x33, 0x43, 0xbe, 0x2e, 0x83, 0xae, 0x20, + 0xdd, 0xf3, 0x88, 0xf4, 0x72, 0x2f, 0x9d, 0xee, 0xf7, 0xa5, 0x00, 0x4b, 0x7d, 0x29, 0x3e, 0x83, 0xc2, 0xa2, 0xf1, + 0x8d, 0x00, 0x6d, 0x0d, 0xd5, 0xb4, 0x57, 0x8a, 0xaa, 0x17, 0xf4, 0x4a, 0xf1, 0xb9, 0xa7, 0x87, 0xca, 0x7c, 0x59, + 0x3a, 0xfa, 0x9f, 0x50, 0x73, 0xc1, 0x09, 0x31, 0x13, 0x73, 0x00, 0x95, 0xa0, 0x8d, 0x6f, 0x75, 0xb4, 0xf1, 0xa9, + 0x5e, 0xc5, 0x4d, 0x9f, 0xd7, 0xd6, 0x32, 0x27, 0x84, 0x4d, 0xf7, 0x12, 0xa0, 0x22, 0xaf, 0x84, 0x47, 0xb0, 0xfc, + 0xf2, 0x87, 0x3c, 0x5d, 0x21, 0x5a, 0xc7, 0x3d, 0xcb, 0x5c, 0x1a, 0xfb, 0x37, 0x06, 0xd3, 0xd7, 0xb7, 0xdb, 0x22, + 0x3f, 0x35, 0x31, 0x61, 0x3d, 0x56, 0xf4, 0xcd, 0xbb, 0x70, 0x25, 0x50, 0xe0, 0x50, 0x22, 0xb1, 0x4d, 0x15, 0x8a, + 0x78, 0x90, 0xf4, 0xe9, 0xa2, 0xf5, 0x69, 0x80, 0xa9, 0xb5, 0x1c, 0x98, 0x43, 0xb8, 0x8a, 0x0b, 0x1f, 0x3d, 0x7d, + 0x8b, 0x59, 0x38, 0x9f, 0x78, 0x1f, 0xbd, 0x62, 0x64, 0x3e, 0xee, 0xa3, 0x52, 0x49, 0xff, 0x3c, 0x1c, 0x66, 0xd5, + 0xdc, 0x77, 0xe8, 0x23, 0x3d, 0x54, 0xb9, 0xa0, 0xec, 0x8d, 0x31, 0x89, 0x40, 0x69, 0x8c, 0xf7, 0x71, 0x70, 0x9c, + 0xf7, 0x69, 0x00, 0xa9, 0x7d, 0xe2, 0x3d, 0x29, 0x39, 0x3c, 0xe7, 0x98, 0x13, 0x4a, 0x2b, 0xc2, 0x2a, 0xbe, 0xc8, + 0x50, 0xae, 0x3b, 0xa5, 0x60, 0x92, 0x43, 0x82, 0xe1, 0xaf, 0x9a, 0x37, 0xb1, 0x02, 0x61, 0xd7, 0xcc, 0xab, 0xd1, + 0x93, 0x2a, 0x09, 0x4b, 0x01, 0x47, 0x65, 0xe6, 0x19, 0xf6, 0x86, 0x27, 0x86, 0x91, 0x83, 0xe5, 0xfe, 0xa8, 0x4e, + 0x44, 0xee, 0xd1, 0x05, 0x46, 0x65, 0xe1, 0x79, 0x43, 0x57, 0x1a, 0x54, 0x92, 0x1d, 0x7f, 0xc5, 0x35, 0xa0, 0xb6, + 0xc6, 0x88, 0xa1, 0x80, 0x51, 0xf0, 0xda, 0xfe, 0x10, 0xb2, 0x28, 0x5b, 0xbf, 0xc1, 0x31, 0x9f, 0x95, 0xdc, 0xf5, + 0x0e, 0x67, 0xa1, 0x25, 0xe4, 0xc9, 0x1d, 0x83, 0x34, 0x8d, 0xa5, 0x11, 0x70, 0x22, 0x92, 0x6d, 0x2c, 0x85, 0x23, + 0x80, 0x80, 0x40, 0x37, 0x65, 0x86, 0x31, 0x1d, 0x8c, 0x3c, 0x4f, 0x7a, 0xc6, 0x7b, 0x15, 0x9e, 0x42, 0x9a, 0x6c, + 0x5f, 0xcf, 0xdf, 0x1b, 0x41, 0x56, 0x6e, 0x39, 0xc7, 0xc3, 0xe2, 0x1b, 0x67, 0x5f, 0xe5, 0xe4, 0x29, 0x66, 0x19, + 0xe9, 0x9d, 0x62, 0x5e, 0xc0, 0x9f, 0xca, 0x52, 0x9f, 0xa3, 0xf4, 0x96, 0xf9, 0x64, 0x15, 0x49, 0x97, 0xde, 0xa6, + 0xdf, 0x8f, 0x47, 0xea, 0x50, 0xf3, 0xf7, 0xf1, 0x48, 0x9e, 0x61, 0x1b, 0x96, 0xb0, 0xd0, 0x2a, 0x18, 0x03, 0x48, + 0x62, 0x23, 0xa2, 0xc1, 0x68, 0x6f, 0x0e, 0x87, 0xf3, 0x8d, 0x39, 0x4b, 0xf6, 0xe0, 0xfa, 0xca, 0x13, 0xf3, 0x0e, + 0x7c, 0x99, 0xc7, 0x04, 0x11, 0x9b, 0x79, 0x1b, 0x56, 0x83, 0x07, 0x3b, 0xb8, 0x3e, 0x62, 0x8b, 0x62, 0xad, 0x63, + 0xa9, 0xac, 0x83, 0xd3, 0x3a, 0x36, 0xcd, 0x48, 0x29, 0xb2, 0xcf, 0xb1, 0xbf, 0x77, 0x83, 0xab, 0x6b, 0x63, 0x50, + 0x6b, 0xdc, 0x61, 0xee, 0x9c, 0x0a, 0xa8, 0xc7, 0x74, 0x05, 0xd5, 0xb3, 0x9c, 0x7c, 0xf9, 0xad, 0x9d, 0x03, 0x82, + 0x46, 0x20, 0x70, 0xd1, 0x40, 0xab, 0x76, 0x29, 0xe7, 0x5d, 0x40, 0x88, 0x6f, 0x52, 0xd0, 0xa7, 0x33, 0xd8, 0xc4, + 0xe6, 0x13, 0x88, 0x45, 0xd3, 0x7d, 0xae, 0x35, 0xf3, 0xc5, 0x88, 0x76, 0x66, 0xdd, 0x2d, 0x72, 0xab, 0x85, 0x48, + 0x46, 0xcf, 0x36, 0x13, 0x2e, 0x3a, 0x94, 0x33, 0x12, 0x30, 0x41, 0x6b, 0x2b, 0x25, 0x9f, 0xeb, 0x5e, 0x27, 0x68, + 0x0f, 0x24, 0xad, 0xfb, 0x37, 0x8b, 0xce, 0x28, 0x39, 0xb9, 0xde, 0xe4, 0x0c, 0x52, 0xb0, 0x60, 0x7b, 0x99, 0x13, + 0x6e, 0x80, 0x4f, 0x6c, 0x96, 0x9c, 0xa6, 0x41, 0x1e, 0x0b, 0xe3, 0x91, 0xd7, 0xe6, 0x97, 0x05, 0x74, 0x28, 0x59, + 0x34, 0x42, 0x3c, 0xc0, 0xce, 0x21, 0xb9, 0x2a, 0x50, 0x37, 0x0d, 0x74, 0xe5, 0xca, 0x99, 0x62, 0x0a, 0x5c, 0x08, + 0x05, 0x51, 0x3b, 0x3a, 0x89, 0xca, 0x79, 0x9f, 0x54, 0x97, 0xf9, 0xb4, 0x90, 0xa6, 0x81, 0x7c, 0x5a, 0x39, 0xe6, + 0x81, 0x9d, 0x6d, 0x5c, 0x13, 0x18, 0xe8, 0xd4, 0xbe, 0x16, 0xe5, 0x1c, 0xab, 0x88, 0xde, 0xe7, 0x1f, 0x2a, 0x7b, + 0xfa, 0x20, 0xc2, 0x46, 0x05, 0x1a, 0x4b, 0x89, 0xb1, 0x91, 0xe3, 0xdf, 0x12, 0x65, 0x43, 0x86, 0x80, 0x10, 0xd2, + 0x46, 0x4e, 0x3f, 0xac, 0x2f, 0x6f, 0x33, 0xed, 0xff, 0x49, 0xe2, 0xb7, 0xc1, 0x5e, 0x4e, 0xfd, 0xa9, 0x47, 0x3c, + 0x5e, 0x6b, 0xf4, 0x98, 0x92, 0x6e, 0x83, 0x3c, 0x55, 0x9e, 0x82, 0x64, 0xc2, 0x58, 0x42, 0xb0, 0x28, 0x17, 0x3c, + 0xe7, 0x15, 0x97, 0x70, 0x1f, 0xb5, 0xac, 0x88, 0x50, 0x95, 0xc8, 0xe9, 0xf3, 0x15, 0xf0, 0x4c, 0x40, 0xa0, 0x63, + 0x8c, 0x34, 0xaa, 0xe0, 0x4b, 0x60, 0xac, 0x03, 0x65, 0xa7, 0x19, 0x09, 0x2e, 0xbb, 0x37, 0x48, 0x94, 0xfa, 0x9a, + 0x94, 0xa4, 0xd7, 0xa2, 0xc6, 0x2b, 0xb1, 0x8a, 0x48, 0x20, 0x43, 0x0d, 0x11, 0xab, 0xea, 0xa9, 0x7b, 0x55, 0x4c, + 0x06, 0x83, 0xca, 0x97, 0xd3, 0x13, 0x6f, 0x68, 0xa8, 0xbc, 0xeb, 0x8a, 0x76, 0x7a, 0xa2, 0x95, 0xf2, 0x16, 0xd2, + 0x12, 0x34, 0x0d, 0x23, 0xcd, 0xa1, 0xd4, 0x95, 0x74, 0x37, 0x06, 0xf1, 0x25, 0x13, 0x3d, 0xdb, 0xa9, 0x1d, 0xa5, + 0x2d, 0x69, 0x0f, 0x21, 0x3d, 0x77, 0xc9, 0xc7, 0x2c, 0xe4, 0xea, 0x4e, 0x39, 0x29, 0xaf, 0x42, 0x74, 0x72, 0xdf, + 0x63, 0x48, 0x04, 0xfa, 0x9c, 0x63, 0x58, 0x17, 0x0d, 0x75, 0x0e, 0x2b, 0xc4, 0x6c, 0xa1, 0x84, 0xf9, 0x92, 0xf1, + 0x54, 0x32, 0x68, 0x00, 0x64, 0xc0, 0x67, 0x2f, 0x03, 0xcb, 0x5f, 0x41, 0xfc, 0x68, 0xe3, 0xc3, 0xe1, 0xcf, 0x9a, + 0x42, 0x6c, 0xff, 0x84, 0xcd, 0x10, 0x1e, 0xd5, 0x03, 0x9e, 0xf9, 0x26, 0x4e, 0xd0, 0x0a, 0x48, 0xca, 0xec, 0x68, + 0x22, 0x7b, 0xd5, 0x43, 0x38, 0x95, 0x15, 0xa8, 0xa3, 0xac, 0xb3, 0x12, 0x7e, 0x84, 0xa9, 0x6e, 0x25, 0xd6, 0x02, + 0x6d, 0xae, 0x56, 0xac, 0x05, 0x70, 0xe0, 0xe7, 0x10, 0x3c, 0x91, 0xcf, 0xc1, 0xc5, 0xa0, 0x00, 0x9f, 0x03, 0xe0, + 0x45, 0xee, 0xc2, 0x83, 0x79, 0x64, 0x59, 0x8d, 0x30, 0x1c, 0x55, 0xc4, 0xfa, 0x35, 0xdb, 0x91, 0x0f, 0xdc, 0x8e, + 0xf1, 0xb9, 0xf6, 0x58, 0xb2, 0x1c, 0x8c, 0x32, 0xf7, 0x6a, 0x89, 0x9e, 0x37, 0x69, 0xdc, 0x8c, 0x9e, 0xec, 0x6b, + 0xf9, 0xbf, 0xa0, 0x97, 0x41, 0x7f, 0x0b, 0xb7, 0xbc, 0xe6, 0x77, 0x0b, 0x22, 0xcd, 0xf4, 0x0a, 0x22, 0x65, 0xd4, + 0x88, 0x8c, 0x21, 0x6c, 0x52, 0xdd, 0xdc, 0x26, 0xd5, 0x85, 0x80, 0xa7, 0x23, 0x52, 0x5d, 0x0b, 0x69, 0x23, 0x9f, + 0xd6, 0x81, 0x8c, 0x45, 0x7a, 0xf7, 0xc3, 0xdf, 0x5e, 0x7e, 0x7a, 0xfb, 0xcb, 0x0f, 0x8b, 0xb7, 0xef, 0xde, 0xbc, + 0x7d, 0xf7, 0xf6, 0xd3, 0x6f, 0x04, 0xe1, 0x31, 0x15, 0x2a, 0xc3, 0x87, 0xf7, 0x37, 0x6f, 0x9d, 0x0c, 0xb6, 0x37, + 0x43, 0xd6, 0xbe, 0x91, 0x83, 0x21, 0x10, 0xd9, 0x20, 0x64, 0x90, 0x9d, 0xda, 0xf6, 0x67, 0x62, 0x8e, 0xb1, 0x77, + 0x02, 0x93, 0x2d, 0xe0, 0x1c, 0xcb, 0xbc, 0x64, 0x44, 0xae, 0x0a, 0xad, 0x1f, 0xd0, 0x82, 0x6b, 0x70, 0x91, 0x49, + 0xf3, 0xbb, 0x5f, 0x08, 0x62, 0x9f, 0x56, 0x52, 0xee, 0xab, 0x6d, 0xcd, 0xf3, 0xed, 0xfd, 0x5e, 0xc2, 0xf9, 0xcf, + 0xa5, 0x11, 0xb5, 0x00, 0x07, 0xe0, 0x73, 0xf8, 0xe3, 0x4a, 0x5b, 0xd2, 0x64, 0x16, 0xed, 0x67, 0x0c, 0x41, 0x97, + 0x06, 0x1f, 0xc4, 0x1e, 0x79, 0xa9, 0x4f, 0x16, 0x12, 0xb8, 0x23, 0x86, 0x4f, 0x2b, 0x82, 0x5e, 0x31, 0xa2, 0xb8, + 0xe4, 0x0a, 0x95, 0x52, 0xf2, 0x6f, 0x94, 0x5d, 0x54, 0xc8, 0x59, 0xc1, 0xee, 0x15, 0x39, 0x32, 0x7e, 0x10, 0x4c, + 0x7c, 0x39, 0xb8, 0xff, 0x12, 0xef, 0x70, 0xa6, 0x38, 0x92, 0x13, 0xfe, 0x90, 0x61, 0x60, 0x7f, 0x0e, 0x3e, 0xaf, + 0x0e, 0xf3, 0xf2, 0x46, 0x9f, 0x72, 0x4b, 0x3e, 0x9e, 0x2c, 0xaf, 0xc0, 0x60, 0xbf, 0x54, 0xcd, 0x5d, 0xf3, 0x7a, + 0xb6, 0x9c, 0xb3, 0xfd, 0x2c, 0x9a, 0x07, 0x77, 0x6c, 0x96, 0xcd, 0x83, 0x55, 0xc3, 0xd7, 0xec, 0x96, 0xaf, 0xad, + 0xaa, 0xad, 0xed, 0xaa, 0x4d, 0x36, 0xfc, 0x16, 0x24, 0x84, 0x9b, 0xcc, 0x03, 0xde, 0xe3, 0x3b, 0x9f, 0x6d, 0x40, + 0xa2, 0x5d, 0xb1, 0x0d, 0x5c, 0xc4, 0xd6, 0xfc, 0x87, 0xca, 0xdb, 0xb0, 0x92, 0x9d, 0x8f, 0x59, 0x8e, 0xf3, 0xcf, + 0x87, 0x07, 0xb4, 0x17, 0xea, 0x67, 0x97, 0xea, 0xd9, 0x44, 0xd9, 0xcd, 0x36, 0xa3, 0xc5, 0x7d, 0x5a, 0x6d, 0xc2, + 0x0c, 0x3d, 0xcb, 0xe1, 0xa3, 0xad, 0x14, 0xfc, 0xf4, 0x02, 0xbf, 0x64, 0x47, 0x6d, 0xa5, 0x6d, 0xbb, 0x2a, 0xb1, + 0x15, 0xb4, 0x28, 0xb2, 0x5a, 0xe1, 0x81, 0x39, 0x7f, 0x01, 0x0b, 0x18, 0x7b, 0x8e, 0x73, 0x5e, 0xfb, 0x23, 0x64, + 0xbc, 0x77, 0x00, 0xd0, 0x32, 0xc7, 0x01, 0x1e, 0xb1, 0x62, 0x14, 0x0d, 0xde, 0xf9, 0xa5, 0xb2, 0x5a, 0x69, 0x4e, + 0x42, 0xdb, 0x88, 0x55, 0xcb, 0x91, 0xaa, 0x19, 0x91, 0x3e, 0x48, 0xcf, 0xfb, 0x1e, 0x51, 0x0d, 0xf6, 0x64, 0x5e, + 0x07, 0xf6, 0xe9, 0x55, 0x6b, 0x55, 0x77, 0x7e, 0x4f, 0x95, 0x2e, 0x39, 0xb2, 0xe5, 0xa7, 0xcb, 0xf0, 0x41, 0xfd, + 0x29, 0xb9, 0x3e, 0x14, 0x38, 0xc2, 0x63, 0x15, 0x70, 0xbe, 0x5e, 0x89, 0x76, 0x27, 0xc2, 0xae, 0x5c, 0x02, 0x42, + 0x7c, 0x49, 0xd3, 0x1c, 0x8f, 0x23, 0x9a, 0x88, 0xb0, 0x89, 0xd1, 0x5f, 0xd8, 0x7d, 0x28, 0xb1, 0x9c, 0xe7, 0x1a, + 0x94, 0x5c, 0x32, 0x78, 0x4f, 0xda, 0x6b, 0xd0, 0x2c, 0xaf, 0x4a, 0x4d, 0x26, 0x72, 0x50, 0x3e, 0x1c, 0x0a, 0xd8, + 0x4b, 0x8d, 0x9f, 0x26, 0xfc, 0x84, 0xe5, 0xad, 0xbd, 0x35, 0xa5, 0xa8, 0xa4, 0x01, 0x2a, 0xf0, 0x31, 0x83, 0xff, + 0xdd, 0x19, 0x62, 0xc1, 0x14, 0x1d, 0x3f, 0x9c, 0x89, 0xb9, 0xf5, 0xdc, 0x2a, 0xeb, 0x28, 0x5b, 0xa3, 0x9c, 0x80, + 0x7f, 0x4b, 0x75, 0x9c, 0x24, 0xc2, 0xa9, 0xf7, 0x88, 0x8b, 0xba, 0x97, 0x43, 0xd4, 0x0d, 0x7b, 0x5b, 0xe9, 0x60, + 0xcb, 0x69, 0x1a, 0x1c, 0x89, 0x5f, 0xa9, 0xcf, 0xde, 0x67, 0x16, 0x8f, 0x3a, 0xb2, 0x11, 0x25, 0x69, 0x1c, 0x8b, + 0x1c, 0xb6, 0xf7, 0x85, 0xdc, 0xff, 0xfb, 0x7d, 0x08, 0x27, 0xad, 0x82, 0xa4, 0xf4, 0x04, 0x22, 0xc2, 0xd1, 0xe1, + 0x47, 0x84, 0x27, 0x52, 0x55, 0xf8, 0xa4, 0x3e, 0x71, 0x63, 0x76, 0x2f, 0xcc, 0x51, 0xbd, 0x05, 0x18, 0xc6, 0x7a, + 0x6b, 0x11, 0x92, 0x68, 0xa5, 0x19, 0x6d, 0x3d, 0x20, 0x46, 0xbc, 0x5f, 0x5b, 0x64, 0x30, 0xd6, 0x96, 0x44, 0x02, + 0xf8, 0x1d, 0x09, 0x19, 0xda, 0x36, 0x02, 0x33, 0x86, 0xb7, 0xb3, 0xe2, 0xd2, 0x75, 0xd8, 0xe6, 0x1c, 0xbe, 0x90, + 0x85, 0x66, 0x1d, 0x51, 0x9a, 0x20, 0xe4, 0x1f, 0x70, 0xb2, 0x50, 0x18, 0xcd, 0xeb, 0xa3, 0x74, 0x92, 0x58, 0xdf, + 0x77, 0x95, 0x0a, 0x36, 0x9b, 0x1b, 0xd4, 0x97, 0x1d, 0x25, 0xbf, 0x02, 0x27, 0x1d, 0x27, 0x59, 0xe4, 0x20, 0x6a, + 0x51, 0x39, 0x37, 0x49, 0x58, 0xda, 0xd5, 0xa9, 0x36, 0xeb, 0x75, 0x51, 0xd6, 0xd5, 0x6b, 0x11, 0x29, 0x7a, 0x1f, + 0xf5, 0xe8, 0x89, 0x84, 0x54, 0x68, 0x55, 0x6a, 0x97, 0x47, 0xe0, 0xb6, 0xa9, 0x15, 0xdb, 0x72, 0x09, 0x4b, 0xd4, + 0xf8, 0x4f, 0xd0, 0x47, 0xb9, 0x78, 0x90, 0x01, 0x1a, 0x1d, 0x4f, 0xcd, 0x5b, 0x8f, 0xbc, 0x72, 0x94, 0x5f, 0x5a, + 0x6d, 0xd2, 0x2f, 0x80, 0xcc, 0x68, 0xff, 0x68, 0x29, 0x81, 0xcc, 0xc0, 0x4c, 0x5a, 0x1a, 0x12, 0x39, 0x8a, 0x59, + 0x9a, 0xff, 0x81, 0x2b, 0xb6, 0x42, 0xa4, 0x61, 0x35, 0xf7, 0xf8, 0xcb, 0xca, 0xab, 0xe5, 0x5a, 0x66, 0x9a, 0x9b, + 0x25, 0x8e, 0x15, 0x8b, 0x8b, 0x7a, 0x5d, 0x89, 0x2c, 0x10, 0xe2, 0x08, 0xd3, 0x58, 0x4f, 0xbd, 0x51, 0x5a, 0x7d, + 0x40, 0x42, 0x99, 0x1f, 0xb0, 0xb7, 0x63, 0xaf, 0x07, 0x59, 0x88, 0x63, 0xcb, 0xc1, 0x66, 0xeb, 0x7d, 0x2a, 0x53, + 0x11, 0x9f, 0xd5, 0xc5, 0xd9, 0xa6, 0x12, 0x67, 0x75, 0x22, 0xce, 0xbe, 0x83, 0x9c, 0xdf, 0x9d, 0x51, 0xd1, 0x67, + 0x0f, 0x69, 0x9d, 0x14, 0x9b, 0x9a, 0x9e, 0xbc, 0xc1, 0x32, 0xbe, 0x3b, 0x23, 0xae, 0x9a, 0x33, 0x1a, 0xc9, 0x78, + 0x74, 0xf6, 0x21, 0x03, 0x92, 0xd7, 0xb3, 0x74, 0x05, 0x83, 0x77, 0x16, 0xe6, 0xf1, 0x59, 0x29, 0xee, 0xc0, 0xe2, + 0x54, 0x76, 0xbe, 0x07, 0x19, 0x56, 0xe1, 0x1f, 0xe2, 0x0c, 0xa0, 0x5d, 0xcf, 0xd2, 0xfa, 0x2c, 0xad, 0xce, 0xf2, + 0xa2, 0x3e, 0x53, 0x52, 0x38, 0x84, 0xf1, 0xc3, 0x7b, 0xfa, 0xca, 0x2e, 0x6f, 0xb3, 0xb8, 0xcb, 0x22, 0x7f, 0x8a, + 0x5e, 0x45, 0xc4, 0xa4, 0x51, 0x09, 0xaf, 0xdd, 0xdf, 0x36, 0xf7, 0x0f, 0xaf, 0x1b, 0xbb, 0x9f, 0xdd, 0x31, 0xa2, + 0x0b, 0xea, 0xf1, 0x4a, 0x52, 0x2a, 0x28, 0x20, 0x70, 0xa2, 0x59, 0xe3, 0xc1, 0x1d, 0x07, 0xbc, 0x1a, 0xd8, 0x92, + 0xad, 0x7d, 0xfe, 0x22, 0x96, 0x61, 0xda, 0x9b, 0x00, 0xff, 0x2a, 0x7b, 0xd3, 0x75, 0xb0, 0xc4, 0xfb, 0x16, 0xb2, + 0x0d, 0xbd, 0x7d, 0xcd, 0x5f, 0x7a, 0xb9, 0xfa, 0x9b, 0xfd, 0x13, 0x80, 0x30, 0x20, 0x66, 0xd5, 0x47, 0x13, 0xf7, + 0xce, 0xca, 0xb2, 0x73, 0xb2, 0xec, 0x7a, 0xe8, 0xd7, 0x24, 0x46, 0xa5, 0x95, 0xa5, 0x74, 0xb2, 0x94, 0x90, 0x05, + 0x7c, 0x62, 0x34, 0xb5, 0x11, 0x40, 0xd8, 0x8e, 0x52, 0xf9, 0x42, 0xe5, 0x45, 0x14, 0xce, 0x09, 0x9e, 0x27, 0x62, + 0x74, 0x6f, 0x25, 0x03, 0x86, 0x43, 0x08, 0xe6, 0xa0, 0x2d, 0xf6, 0x86, 0x6e, 0x22, 0xfe, 0x7a, 0x53, 0x94, 0x6f, + 0x63, 0xf2, 0x29, 0xd8, 0x9d, 0x7c, 0x5c, 0xc2, 0xe3, 0xf2, 0xe4, 0xe3, 0x10, 0x3d, 0x12, 0x4e, 0x3e, 0x06, 0xdf, + 0x23, 0x39, 0xaf, 0xbb, 0x1e, 0x27, 0xc8, 0x2d, 0xa4, 0xfb, 0xdb, 0x31, 0x09, 0xd0, 0xbc, 0x86, 0xe5, 0xa8, 0xa9, + 0xb8, 0x66, 0x66, 0x8c, 0xe7, 0x8d, 0xde, 0x1f, 0x3b, 0xde, 0x32, 0x85, 0x62, 0x16, 0xf3, 0x1a, 0x7e, 0xcf, 0xaa, + 0x40, 0xdd, 0xf5, 0x36, 0xc9, 0x2d, 0xb3, 0x7a, 0x8e, 0x76, 0xdf, 0xf7, 0x75, 0x22, 0xa8, 0xfd, 0x1d, 0xf6, 0x3c, + 0xb3, 0xde, 0x55, 0x31, 0x70, 0xa9, 0x92, 0x1d, 0x32, 0x55, 0x4d, 0x0f, 0x54, 0x4a, 0x83, 0xa7, 0x97, 0xd6, 0xe5, + 0x4b, 0xa5, 0x8d, 0x3c, 0xd3, 0xfc, 0x06, 0xf0, 0x62, 0xea, 0xb2, 0xd8, 0x7d, 0x75, 0x5f, 0xc1, 0x6d, 0xbc, 0xdf, + 0x5f, 0x56, 0x9e, 0xf9, 0x89, 0x0b, 0xc0, 0xde, 0x54, 0x68, 0x9d, 0x40, 0xa9, 0x61, 0x1d, 0xbe, 0x4a, 0x44, 0xf4, + 0x47, 0xbb, 0x5c, 0x67, 0xae, 0x03, 0x46, 0x14, 0xf1, 0xdb, 0x78, 0xf4, 0x07, 0x28, 0xae, 0x8d, 0x3d, 0x20, 0xac, + 0x43, 0x42, 0x9f, 0x11, 0x80, 0xd4, 0x63, 0x8e, 0x12, 0xd0, 0xac, 0x68, 0xee, 0x98, 0xfc, 0x5c, 0x5f, 0x29, 0xfd, + 0xfd, 0xb2, 0xf2, 0xc8, 0x9c, 0xd2, 0x36, 0xd3, 0x58, 0xad, 0xa9, 0x04, 0xc2, 0x2b, 0x2a, 0x59, 0x85, 0xcf, 0xe6, + 0x8d, 0xe8, 0xf7, 0xe5, 0x11, 0x9e, 0x56, 0x3f, 0x6c, 0x31, 0xbe, 0x15, 0x10, 0x8d, 0x04, 0x40, 0x3f, 0x01, 0xcc, + 0x8b, 0x6c, 0x66, 0xf7, 0x71, 0x40, 0x95, 0x12, 0x4d, 0xe3, 0x6c, 0x9e, 0xdf, 0xd2, 0x9b, 0xb2, 0x83, 0x4e, 0x9d, + 0x2a, 0x70, 0xc1, 0x55, 0xc9, 0x78, 0x65, 0x3d, 0x91, 0xcf, 0x6f, 0x6e, 0x37, 0x69, 0x16, 0xbf, 0x2f, 0xff, 0x89, + 0x63, 0xab, 0xeb, 0xf0, 0xc8, 0xd4, 0xe9, 0xda, 0x79, 0xa4, 0xb5, 0x17, 0x02, 0x22, 0xda, 0x35, 0xd4, 0x7a, 0x61, + 0xa1, 0x47, 0x7a, 0x22, 0x9c, 0x93, 0x44, 0x4d, 0x3b, 0xd0, 0xd2, 0x08, 0x7d, 0x7d, 0xcd, 0xe9, 0x2f, 0x0c, 0xd6, + 0x3e, 0x1f, 0x33, 0x20, 0x2b, 0xd1, 0x8f, 0xd5, 0x43, 0x63, 0x33, 0x87, 0x9e, 0xb5, 0x2a, 0xcf, 0xbc, 0xea, 0x70, + 0x40, 0x7c, 0x18, 0xfd, 0x25, 0xbf, 0xdf, 0x7f, 0x4d, 0xf3, 0x8f, 0x09, 0x35, 0x7e, 0xb6, 0x19, 0xa0, 0x6b, 0xdf, + 0x95, 0x07, 0xa2, 0x9e, 0x6b, 0x95, 0x20, 0xc4, 0x1b, 0xc4, 0x44, 0x33, 0x62, 0x0e, 0x4e, 0x3b, 0xd4, 0xfc, 0x93, + 0xd4, 0x80, 0x10, 0x25, 0x5e, 0xc7, 0x94, 0x05, 0x39, 0x6d, 0xe2, 0x48, 0x3f, 0x0a, 0x27, 0xf2, 0xa3, 0xa8, 0x8a, + 0xec, 0x1e, 0x2e, 0x18, 0x4c, 0xbd, 0xa7, 0xfd, 0x12, 0xfd, 0x96, 0x70, 0xe4, 0x1c, 0xad, 0x0a, 0x41, 0xe4, 0x84, + 0xb0, 0xd6, 0x10, 0x26, 0x88, 0x0d, 0xe2, 0x65, 0xdf, 0x25, 0x19, 0x8e, 0x14, 0x5c, 0xd6, 0xb1, 0x63, 0xcc, 0xd5, + 0x51, 0xf5, 0x1a, 0xc0, 0x78, 0xe5, 0x08, 0x9a, 0x8d, 0x22, 0xbb, 0x84, 0xa8, 0x22, 0xc7, 0x13, 0x50, 0x3b, 0x28, + 0x8d, 0xcd, 0xf4, 0x7c, 0x1c, 0xe4, 0xa3, 0x45, 0x85, 0x3a, 0x27, 0x96, 0xf1, 0x1a, 0x80, 0xb5, 0x73, 0xd5, 0xcf, + 0xb3, 0x1a, 0x3c, 0x69, 0x88, 0xcf, 0xc7, 0x68, 0x7b, 0x65, 0x73, 0x50, 0x6d, 0xa7, 0xb3, 0xf2, 0x8a, 0xe9, 0x72, + 0x60, 0xdc, 0x37, 0xbc, 0xa2, 0x38, 0xc3, 0x8f, 0x1e, 0x6c, 0x71, 0xfe, 0x74, 0x43, 0xed, 0xc7, 0xdc, 0xa8, 0x87, + 0x81, 0xd6, 0x82, 0x37, 0x05, 0xb1, 0xfe, 0x7e, 0xe8, 0xc8, 0xf6, 0x5e, 0x8b, 0x8c, 0x26, 0x9f, 0xfd, 0xfc, 0x43, + 0x99, 0xae, 0x52, 0xb8, 0x2f, 0x39, 0x59, 0x34, 0xf3, 0x10, 0xd8, 0x1b, 0x62, 0xb8, 0x3e, 0x2a, 0x3c, 0xa2, 0xac, + 0xdf, 0x87, 0xdf, 0x57, 0x19, 0x98, 0x62, 0xe0, 0xba, 0x42, 0x30, 0x1e, 0x02, 0x41, 0x3c, 0x4c, 0xa3, 0x93, 0x41, + 0x0d, 0xda, 0xf0, 0x0d, 0x40, 0x66, 0x80, 0x47, 0xe6, 0xd2, 0x23, 0xe0, 0x2e, 0x70, 0xed, 0xc9, 0x78, 0xec, 0x4f, + 0x4c, 0x43, 0xa3, 0xa6, 0x34, 0xd3, 0x73, 0xe3, 0x37, 0x1d, 0xd5, 0x72, 0xed, 0xfc, 0xc7, 0x97, 0xfc, 0x06, 0xbd, + 0xa0, 0xe5, 0xe5, 0x3e, 0x52, 0x97, 0xfb, 0x8c, 0xe2, 0x32, 0x91, 0x1c, 0x16, 0xc4, 0xb2, 0x84, 0x03, 0x8f, 0x51, + 0xc9, 0x62, 0x4b, 0x8f, 0x55, 0xd1, 0xf2, 0x45, 0xb9, 0x41, 0x3a, 0x74, 0x42, 0xb0, 0x44, 0x05, 0xc1, 0x12, 0x18, + 0x17, 0xb1, 0xe6, 0x9b, 0x41, 0xce, 0xe2, 0xd9, 0x66, 0xce, 0x91, 0xb0, 0x2e, 0x39, 0x1c, 0x0a, 0x09, 0x36, 0x93, + 0xcd, 0xd6, 0x73, 0xb6, 0xf6, 0x19, 0x28, 0x01, 0x4a, 0x99, 0x26, 0x28, 0x4d, 0x2b, 0xb6, 0xe2, 0xa6, 0x35, 0x58, + 0xad, 0xa6, 0x6c, 0x55, 0x53, 0x76, 0x4e, 0x53, 0x8e, 0x2a, 0x28, 0x39, 0xa1, 0x14, 0x65, 0x18, 0xc0, 0x88, 0x4d, + 0xa2, 0xab, 0x0c, 0x7d, 0xbc, 0x13, 0x1e, 0x41, 0x15, 0x11, 0xf9, 0x84, 0x21, 0x04, 0x26, 0xa2, 0xb8, 0x50, 0x85, + 0x62, 0x80, 0x8c, 0x48, 0x20, 0x98, 0xa8, 0xd4, 0x29, 0x30, 0x1f, 0x4d, 0x15, 0xc3, 0xa6, 0x3d, 0x51, 0xbe, 0xa5, + 0x8e, 0x7b, 0x94, 0x6d, 0xfe, 0x2e, 0x76, 0x41, 0x88, 0xdc, 0x8d, 0x3b, 0xf5, 0x33, 0xe2, 0xbd, 0xdd, 0x11, 0xc6, + 0x4f, 0x76, 0xdc, 0x22, 0x5c, 0x11, 0x6c, 0xa9, 0xe6, 0x10, 0x8b, 0x79, 0x35, 0x49, 0x50, 0xcb, 0x92, 0xf8, 0x1b, + 0x9e, 0x0c, 0x72, 0xb6, 0x04, 0x0f, 0xda, 0x39, 0xcb, 0x00, 0x7f, 0xc5, 0x6a, 0xd1, 0x6f, 0xb5, 0xb7, 0x04, 0xf9, + 0x69, 0x63, 0x37, 0x0a, 0x13, 0x23, 0x48, 0xd4, 0xed, 0xca, 0x40, 0x7e, 0xf8, 0x80, 0xd3, 0xf1, 0xd8, 0x53, 0xc6, + 0xdc, 0xca, 0xf4, 0x32, 0x9d, 0x2b, 0xf9, 0x46, 0xee, 0xa5, 0x8f, 0xbd, 0x04, 0x3b, 0x07, 0xbc, 0x81, 0xb4, 0x81, + 0x37, 0xb0, 0x5d, 0x78, 0x6d, 0x90, 0x30, 0x23, 0xc0, 0x16, 0xc7, 0xc7, 0x48, 0x09, 0x0c, 0xe1, 0x38, 0x4b, 0x01, + 0x98, 0x46, 0x5f, 0x66, 0x2b, 0xfb, 0x32, 0xab, 0x35, 0x5b, 0x2a, 0xa7, 0x7b, 0xe7, 0xd6, 0xed, 0x7c, 0x22, 0x01, + 0xc0, 0xa4, 0xce, 0x81, 0x38, 0x33, 0xc1, 0x2e, 0x4d, 0x22, 0xcb, 0xc7, 0x30, 0xbf, 0x13, 0x6f, 0xca, 0x62, 0xa5, + 0xba, 0xa2, 0xed, 0x33, 0x93, 0xcf, 0x48, 0x27, 0xa1, 0x02, 0x0a, 0x0a, 0xb9, 0xd6, 0xa7, 0xef, 0xc2, 0x77, 0x41, + 0xa1, 0x81, 0xd9, 0x2a, 0xdc, 0xd3, 0x64, 0x8d, 0xd4, 0x1b, 0x55, 0xbf, 0x4f, 0xae, 0x81, 0x54, 0x67, 0x0e, 0x2d, + 0x7b, 0x52, 0x61, 0x80, 0xd8, 0x51, 0x9f, 0x91, 0x50, 0x07, 0x52, 0x0f, 0x18, 0x42, 0xb4, 0x4d, 0x1f, 0x7f, 0x32, + 0x24, 0xba, 0x00, 0x5b, 0x88, 0x36, 0xf0, 0xe3, 0x4f, 0xb0, 0xcf, 0x82, 0xf0, 0x98, 0xe6, 0xd7, 0x90, 0x74, 0x6c, + 0xe0, 0xb4, 0xfa, 0x14, 0x7c, 0x90, 0xe4, 0x60, 0xa2, 0x0e, 0x5e, 0xee, 0x2f, 0xfd, 0x3e, 0x6c, 0xd9, 0xb9, 0x94, + 0xea, 0x58, 0xa9, 0xb7, 0x6d, 0xed, 0x07, 0xd1, 0x16, 0x1c, 0x59, 0xc4, 0xdf, 0x67, 0x88, 0x08, 0x66, 0x06, 0x11, + 0x76, 0x2d, 0xd4, 0xdd, 0x9e, 0x52, 0xcb, 0xa2, 0xde, 0xf6, 0x94, 0x52, 0xb7, 0x61, 0xf8, 0x6e, 0x82, 0x99, 0xe2, + 0x86, 0xff, 0x91, 0x79, 0xa1, 0xde, 0x78, 0x2c, 0x0a, 0x74, 0xcf, 0xdf, 0x2f, 0x79, 0x35, 0xdb, 0x28, 0x13, 0xe6, + 0x1d, 0x5f, 0xce, 0x42, 0xd9, 0xd5, 0xd2, 0xb8, 0xf3, 0xd9, 0x5b, 0xaa, 0xf9, 0xe0, 0x1f, 0x0e, 0x09, 0xc4, 0x1b, + 0xc5, 0x57, 0x77, 0x8d, 0xdc, 0xba, 0x26, 0x9b, 0xab, 0x12, 0x50, 0xbf, 0xcf, 0xd7, 0xb8, 0xdf, 0x62, 0xfd, 0xbb, + 0xa7, 0x41, 0xc6, 0x6a, 0x86, 0x2b, 0xa6, 0xf0, 0x29, 0x00, 0x0c, 0x0e, 0xa7, 0x82, 0xb4, 0xc0, 0x1b, 0x5e, 0x0e, + 0x2f, 0x27, 0x1b, 0x32, 0xe9, 0x6e, 0x7c, 0xe4, 0xce, 0x02, 0x55, 0xef, 0x37, 0x14, 0x27, 0x0d, 0x12, 0x8d, 0xbd, + 0x06, 0x5f, 0x66, 0x19, 0xe5, 0xa2, 0x89, 0xfb, 0x98, 0x7c, 0xa5, 0x07, 0x30, 0x57, 0xa1, 0x04, 0x88, 0x7e, 0x63, + 0x59, 0x6c, 0x44, 0xdb, 0x62, 0x03, 0x4b, 0xa9, 0x9a, 0xeb, 0xd5, 0xf4, 0xd9, 0x2b, 0xd1, 0xbc, 0x8f, 0x66, 0x9c, + 0xd2, 0x68, 0xc0, 0x71, 0x1a, 0x85, 0xdb, 0xf7, 0xf7, 0xa2, 0x5c, 0x66, 0x60, 0xc9, 0x56, 0xe1, 0x14, 0x97, 0x8d, + 0x3a, 0x23, 0x5e, 0xe6, 0xb1, 0x02, 0xe8, 0x78, 0x4c, 0x00, 0x54, 0x17, 0x04, 0x54, 0x44, 0x4b, 0xe9, 0xad, 0xd0, + 0x62, 0xa1, 0xde, 0x70, 0x94, 0xc2, 0x1f, 0xe9, 0xcf, 0x83, 0x7c, 0x0a, 0x40, 0xec, 0xfa, 0x38, 0x7a, 0x53, 0x94, + 0xf4, 0xa9, 0x62, 0x96, 0xcb, 0xc1, 0x04, 0x76, 0x75, 0x22, 0x43, 0xad, 0x20, 0x6f, 0xd5, 0x95, 0xb7, 0x32, 0x79, + 0x1b, 0xe3, 0x94, 0xfc, 0xc8, 0x4d, 0xc7, 0x1a, 0x31, 0xf0, 0xca, 0xd3, 0x3a, 0x4d, 0x90, 0x26, 0x17, 0xc0, 0x30, + 0xc4, 0xb7, 0x99, 0xf7, 0xd2, 0x73, 0xa4, 0x2a, 0x48, 0x66, 0xbb, 0xcc, 0x53, 0x17, 0x51, 0x7d, 0xe5, 0xd4, 0xd2, + 0x99, 0xd3, 0x8f, 0x00, 0xde, 0x63, 0x6a, 0xd2, 0x90, 0x8f, 0x70, 0x5b, 0x8a, 0xaf, 0xb7, 0xea, 0x1a, 0x2f, 0x8d, + 0xce, 0xdd, 0xcb, 0x97, 0xee, 0x34, 0xe8, 0xa7, 0x20, 0x28, 0xe7, 0xcb, 0x52, 0xc0, 0x9e, 0x32, 0x9b, 0xeb, 0xd5, + 0xaa, 0x15, 0x5a, 0x87, 0xc3, 0x58, 0x3b, 0x0a, 0x69, 0x75, 0x16, 0xb0, 0xd5, 0x48, 0xa7, 0x04, 0x08, 0xc1, 0x71, + 0x1a, 0x76, 0x82, 0x71, 0x97, 0x4e, 0x23, 0xb2, 0x5e, 0x29, 0x49, 0x17, 0x66, 0x90, 0xfc, 0x93, 0xbc, 0x9e, 0x01, + 0x2d, 0x01, 0x1c, 0x8a, 0x58, 0xc2, 0xc3, 0x49, 0x72, 0x05, 0xd0, 0xe9, 0x70, 0x50, 0x69, 0x68, 0xce, 0x6a, 0x96, + 0xcc, 0x27, 0xb1, 0x54, 0x55, 0x1e, 0x0e, 0x9e, 0x72, 0x33, 0xe8, 0xf7, 0xb3, 0x69, 0xa9, 0x5c, 0x00, 0x82, 0x58, + 0x17, 0x06, 0x88, 0x47, 0x5a, 0x78, 0xb2, 0xe8, 0x53, 0x12, 0xbf, 0x9c, 0x25, 0x73, 0x93, 0x0d, 0xef, 0xc0, 0x08, + 0x36, 0xe3, 0xba, 0xa4, 0x4c, 0x7b, 0x54, 0x7e, 0xcf, 0xe8, 0xa9, 0xed, 0x6b, 0xad, 0xb6, 0x88, 0x75, 0x1d, 0x5c, + 0x95, 0xa8, 0xa7, 0xf8, 0xa0, 0x24, 0xc1, 0xfb, 0xb5, 0x73, 0x33, 0x52, 0xbe, 0x16, 0xb9, 0x1f, 0xb4, 0x33, 0xb5, + 0x72, 0xe0, 0x08, 0xe4, 0x58, 0x45, 0x25, 0xaf, 0x77, 0x1d, 0x82, 0x47, 0x77, 0xa5, 0x02, 0xe5, 0xe0, 0x17, 0x20, + 0x46, 0xd7, 0x57, 0x9d, 0x35, 0xd4, 0x4c, 0xa3, 0xca, 0x23, 0xe8, 0xd4, 0x01, 0x3c, 0x29, 0x78, 0xa9, 0xd5, 0x8f, + 0x87, 0x83, 0x67, 0x7e, 0xf0, 0x57, 0x99, 0xbe, 0x85, 0x98, 0x28, 0xa7, 0x1a, 0x21, 0x71, 0xa5, 0x24, 0x11, 0x1f, + 0x2f, 0x5a, 0x56, 0x8c, 0xca, 0xf0, 0x81, 0x57, 0xaa, 0x7c, 0x75, 0xaa, 0xf2, 0x62, 0xa4, 0x6d, 0x09, 0xbc, 0x26, + 0xff, 0x10, 0xb9, 0xe6, 0xad, 0xaf, 0xbb, 0xca, 0xd0, 0x6b, 0x59, 0x81, 0x8e, 0x60, 0x2b, 0x4b, 0xc9, 0x01, 0x9f, + 0x54, 0x77, 0xd5, 0xaa, 0xf5, 0x39, 0x65, 0x1b, 0xe1, 0x26, 0xbf, 0x8e, 0x1d, 0x1c, 0x29, 0xbf, 0xc1, 0x73, 0x01, + 0xec, 0x35, 0x60, 0x6f, 0xce, 0x59, 0xd1, 0x3c, 0x3a, 0xa4, 0x6d, 0x81, 0x46, 0x66, 0x6e, 0xe7, 0xea, 0xbe, 0x2d, + 0x8f, 0xd2, 0x18, 0x22, 0xd3, 0x1e, 0x99, 0x0e, 0x36, 0xa3, 0xfc, 0xb7, 0x94, 0xdf, 0x2a, 0x1c, 0x03, 0xdf, 0x4e, + 0xbd, 0x03, 0xa8, 0x7a, 0xda, 0x20, 0x63, 0xcd, 0x30, 0xb4, 0xb2, 0xcb, 0xa5, 0xd0, 0x12, 0xb4, 0xd4, 0x4d, 0x10, + 0x9c, 0x1f, 0x11, 0xe5, 0x08, 0x40, 0x17, 0x29, 0x60, 0x82, 0x9f, 0xd2, 0x76, 0xf7, 0xfb, 0xeb, 0xd4, 0x23, 0xf7, + 0xae, 0x50, 0xa3, 0x84, 0x12, 0x8c, 0xfd, 0x44, 0x63, 0x06, 0x1d, 0x5d, 0x91, 0x13, 0x9e, 0xb5, 0x3a, 0xac, 0xeb, + 0xa6, 0x0c, 0xca, 0xe2, 0x98, 0x57, 0xd3, 0xd9, 0xef, 0x4f, 0xf6, 0x75, 0x83, 0x2c, 0xe4, 0xbf, 0xb3, 0x1e, 0x92, + 0x41, 0xf7, 0x20, 0x14, 0xa2, 0x37, 0x0f, 0x66, 0xf8, 0x1f, 0xdb, 0xf0, 0xec, 0x1b, 0x6e, 0xd4, 0x09, 0x60, 0x8e, + 0xb8, 0x5e, 0x7a, 0x8a, 0xb6, 0x1e, 0x6e, 0x81, 0x6c, 0x8d, 0x97, 0xb7, 0xf6, 0x1a, 0xc8, 0x29, 0x8e, 0xff, 0x8e, + 0x67, 0x6a, 0x65, 0x83, 0x9f, 0x9e, 0xb2, 0x1d, 0x78, 0x78, 0x11, 0x02, 0x8a, 0x61, 0xd9, 0xf8, 0x3b, 0xcb, 0x71, + 0x46, 0xff, 0xcd, 0x23, 0x86, 0xc1, 0x22, 0xf2, 0xe3, 0xcb, 0x52, 0x88, 0x2f, 0xc2, 0x7b, 0x5b, 0x79, 0x77, 0xe4, + 0x94, 0x79, 0xa7, 0x87, 0xd1, 0x75, 0x49, 0xfa, 0x26, 0xf9, 0xd8, 0x1a, 0xb6, 0xdf, 0xb5, 0xfb, 0xcd, 0x10, 0x41, + 0x08, 0xe5, 0xf8, 0x39, 0xa3, 0x13, 0x1a, 0x1f, 0x56, 0xb3, 0xd3, 0xeb, 0xf7, 0xce, 0xf1, 0x82, 0xad, 0xd1, 0x00, + 0x8f, 0x87, 0x2e, 0xe6, 0x89, 0x1a, 0x3a, 0x5d, 0xd7, 0xce, 0xc1, 0x03, 0x83, 0x2c, 0x4f, 0xbe, 0x61, 0x58, 0x62, + 0x7f, 0x12, 0xf1, 0xa4, 0xad, 0xda, 0xd8, 0x1c, 0xa9, 0x36, 0x6a, 0x06, 0x7e, 0xf0, 0x0a, 0x0a, 0x8c, 0x2e, 0x48, + 0x2b, 0x30, 0x0e, 0x47, 0x00, 0xb2, 0x62, 0x1c, 0x8f, 0x0c, 0x26, 0x30, 0xa4, 0x1b, 0x8a, 0x02, 0xf0, 0xf0, 0x38, + 0x1e, 0x84, 0x0c, 0x20, 0x5d, 0xf0, 0xd0, 0xb0, 0x4d, 0x42, 0xca, 0xcf, 0xf3, 0xbc, 0x56, 0x43, 0xe8, 0x3b, 0x0b, + 0xd5, 0xb1, 0x1f, 0x69, 0xaf, 0x58, 0xd7, 0xaa, 0x74, 0x64, 0xab, 0x03, 0xf4, 0x0d, 0x19, 0xf8, 0xd6, 0xb1, 0x05, + 0x40, 0xb4, 0xc4, 0x6f, 0xa9, 0x57, 0xfb, 0x32, 0x66, 0x85, 0x7a, 0x7d, 0x61, 0xda, 0xf5, 0x5a, 0x5a, 0x14, 0x50, + 0x71, 0xdb, 0xaa, 0xed, 0x91, 0x9c, 0xff, 0xf8, 0xae, 0xa3, 0x1d, 0x9f, 0x9d, 0x1a, 0x5b, 0x42, 0x99, 0x5b, 0x3c, + 0x91, 0xd5, 0xd1, 0x96, 0xea, 0x54, 0x1f, 0x70, 0xa9, 0x49, 0x75, 0x66, 0x60, 0x78, 0x8d, 0x00, 0xe5, 0x16, 0x22, + 0x69, 0x1c, 0xf6, 0xce, 0x27, 0x83, 0x82, 0xb9, 0x45, 0x02, 0x12, 0xd8, 0xc6, 0xd6, 0x2e, 0x9a, 0xeb, 0xd7, 0x6f, + 0xa9, 0x57, 0xb5, 0xa9, 0xea, 0xc1, 0x1b, 0x2f, 0x70, 0xf6, 0x4e, 0x6b, 0x01, 0x01, 0x14, 0xb6, 0x96, 0xe5, 0xe0, + 0xdc, 0xed, 0xaa, 0x96, 0x8a, 0x32, 0xea, 0xf7, 0xcf, 0x7f, 0x4b, 0x51, 0x11, 0x7b, 0xaa, 0x38, 0x65, 0xfd, 0x76, + 0xcb, 0x5c, 0x54, 0x96, 0xbc, 0x41, 0x15, 0xad, 0xd5, 0x51, 0x53, 0xb9, 0x6e, 0xae, 0x5a, 0x32, 0x41, 0x8c, 0xee, + 0xd3, 0xb5, 0xce, 0x9d, 0x7a, 0xef, 0x55, 0x1c, 0x31, 0x10, 0xdc, 0x74, 0x8f, 0x0f, 0x0e, 0x42, 0xa3, 0xa2, 0x5c, + 0x70, 0xa3, 0xb4, 0xaa, 0xa4, 0x14, 0xf2, 0x56, 0x45, 0x73, 0xa6, 0x8f, 0x00, 0x88, 0x00, 0xab, 0x44, 0xfd, 0x1f, + 0xbe, 0x34, 0xc6, 0x83, 0x07, 0xbe, 0x26, 0xd7, 0xb1, 0xf5, 0xfe, 0x69, 0x8d, 0xb4, 0xda, 0x38, 0x26, 0xb5, 0xea, + 0x65, 0xab, 0x78, 0xd9, 0xbd, 0x4e, 0xc5, 0xe0, 0xf9, 0xff, 0xdc, 0x07, 0xa8, 0x11, 0x2d, 0x65, 0x70, 0xeb, 0x6a, + 0x80, 0xc6, 0x87, 0x63, 0xe1, 0x1b, 0x3f, 0x64, 0x9c, 0x0f, 0x66, 0xe8, 0xa8, 0x36, 0x07, 0x07, 0x04, 0x47, 0x75, + 0x8f, 0xc6, 0x84, 0x59, 0x38, 0xf7, 0x20, 0x50, 0x7d, 0xe2, 0x3e, 0xe3, 0xda, 0x0b, 0xda, 0x04, 0x3e, 0x59, 0xd7, + 0x35, 0x45, 0x80, 0x8b, 0xd8, 0x98, 0x88, 0x21, 0x2e, 0x9b, 0x44, 0xea, 0x9b, 0x31, 0x28, 0x00, 0x8a, 0x17, 0x15, + 0xc9, 0xa5, 0x8b, 0x34, 0xaf, 0x44, 0x59, 0xeb, 0x66, 0x54, 0xac, 0x18, 0x02, 0xc0, 0x43, 0x50, 0x5c, 0x55, 0x66, + 0x42, 0x23, 0x36, 0x90, 0xca, 0x52, 0xb0, 0x6a, 0x58, 0xf8, 0x4d, 0xfb, 0x4d, 0x72, 0xd2, 0x3b, 0x1f, 0xb7, 0xce, + 0x1d, 0xfb, 0xde, 0x51, 0x48, 0x69, 0x0f, 0xc5, 0x04, 0x41, 0xf0, 0xd3, 0x3a, 0x9c, 0x3f, 0xe3, 0x2f, 0x08, 0x4c, + 0x45, 0x36, 0x63, 0xc0, 0x41, 0x88, 0xc8, 0x8c, 0xdf, 0x73, 0xf8, 0x82, 0x97, 0x93, 0x70, 0x38, 0xf4, 0x41, 0x1f, + 0xca, 0xb3, 0x59, 0x38, 0x14, 0x73, 0xe9, 0xbd, 0x0e, 0xd6, 0xba, 0x90, 0xd7, 0x93, 0x10, 0xd1, 0x42, 0x43, 0x1f, + 0x9c, 0xd7, 0x5d, 0x73, 0x84, 0x25, 0x00, 0x4d, 0x1c, 0x7d, 0x59, 0xbf, 0x1f, 0x79, 0xda, 0xd0, 0x22, 0xc5, 0x45, + 0xa3, 0xcc, 0x66, 0xb9, 0xec, 0x84, 0x8d, 0x6b, 0xb7, 0x40, 0x28, 0x1e, 0xa6, 0x2d, 0x54, 0xad, 0xa7, 0x7a, 0x3d, + 0x37, 0xed, 0xbe, 0x7b, 0x54, 0xad, 0x72, 0xa4, 0xb3, 0x36, 0x5d, 0xa9, 0xd5, 0x2d, 0xa3, 0x6a, 0x9d, 0xa5, 0x11, + 0x55, 0x6e, 0x92, 0xbb, 0x46, 0x2d, 0xf8, 0x64, 0x43, 0x97, 0x29, 0x3b, 0x5b, 0x83, 0x13, 0x47, 0x9e, 0x4b, 0x6e, + 0xf9, 0xee, 0xbc, 0xa2, 0xbb, 0x53, 0xed, 0x5b, 0x80, 0x7b, 0x33, 0x6c, 0xc8, 0x9c, 0xd7, 0xd8, 0x69, 0x10, 0x26, + 0x81, 0x1f, 0xb1, 0x8f, 0x19, 0xb2, 0xc1, 0x80, 0x8e, 0x42, 0xfa, 0x5f, 0x5b, 0xe6, 0x48, 0xc0, 0xe4, 0xaf, 0xe7, + 0x7e, 0xb3, 0x28, 0x72, 0x58, 0x8c, 0x1f, 0x36, 0x18, 0x69, 0xac, 0xd6, 0x60, 0x58, 0xde, 0x21, 0xf2, 0xa7, 0x76, + 0xc7, 0x34, 0xd5, 0xf1, 0x66, 0xbd, 0xd6, 0xfc, 0xea, 0xe9, 0x53, 0x5d, 0x9f, 0xff, 0xf6, 0xfd, 0x65, 0x58, 0x33, + 0xfb, 0x43, 0x10, 0x4a, 0xbb, 0x77, 0x8b, 0x73, 0x47, 0xa2, 0x77, 0xac, 0x34, 0xb3, 0x4b, 0xbb, 0x64, 0x97, 0xa6, + 0xb4, 0x1b, 0x72, 0xbd, 0xfa, 0x4a, 0x79, 0x63, 0xe7, 0x15, 0xd3, 0xfd, 0x7b, 0xa1, 0x77, 0x94, 0x53, 0x35, 0x81, + 0x88, 0x26, 0xed, 0x48, 0xdc, 0xee, 0x95, 0xe1, 0xf3, 0x49, 0xde, 0x2e, 0xe1, 0xa8, 0x6b, 0x58, 0x6e, 0xbe, 0xfd, + 0xcf, 0xbc, 0xea, 0xac, 0x70, 0xfb, 0xa5, 0x31, 0x6b, 0x7f, 0x0a, 0xe2, 0xaa, 0xfe, 0xf0, 0x9e, 0xd4, 0x4c, 0xc9, + 0xff, 0x55, 0x8f, 0x81, 0xab, 0x9f, 0x4c, 0x3b, 0xba, 0xa7, 0x10, 0x36, 0x98, 0xfd, 0xfc, 0xf8, 0xa1, 0x05, 0xab, + 0xea, 0x02, 0x45, 0x72, 0x00, 0x9d, 0xbb, 0x64, 0x84, 0xf7, 0x3b, 0xc6, 0xb9, 0x7f, 0xf5, 0xbd, 0x9a, 0x1c, 0x21, + 0xa2, 0x5d, 0x84, 0x03, 0x80, 0xb8, 0xd3, 0x54, 0xd6, 0xa1, 0x06, 0xe8, 0x03, 0x02, 0xeb, 0xd0, 0xb7, 0x19, 0xc0, + 0x41, 0x1f, 0x6d, 0x9e, 0x45, 0x20, 0xaf, 0x7b, 0xf7, 0xec, 0x9a, 0xed, 0x7c, 0xfe, 0x62, 0x95, 0x7a, 0xf7, 0xe8, + 0x10, 0x7c, 0x3e, 0xf6, 0xa7, 0x97, 0x81, 0xc1, 0x85, 0x66, 0xd7, 0xcf, 0x04, 0xdb, 0xb1, 0xdd, 0x33, 0x44, 0x2a, + 0xea, 0xce, 0x3f, 0xbc, 0x34, 0xd1, 0xf3, 0xce, 0x0b, 0x77, 0x7c, 0x09, 0xe0, 0x81, 0x2c, 0x06, 0x14, 0x9f, 0xa5, + 0xf7, 0x2f, 0x96, 0x80, 0x9a, 0xfc, 0x96, 0xaf, 0xbd, 0x2f, 0x94, 0xba, 0x80, 0x3f, 0x07, 0x94, 0x3e, 0xc9, 0xb9, + 0x77, 0x37, 0xbc, 0xf5, 0x2f, 0x9e, 0x83, 0xf3, 0xc4, 0x6a, 0xb8, 0x80, 0xbf, 0x0a, 0x3e, 0xf4, 0xee, 0x06, 0x98, + 0x58, 0xf2, 0xa1, 0xb7, 0x1a, 0x40, 0xaa, 0xc2, 0x85, 0xc4, 0xd8, 0x87, 0x5f, 0x83, 0x9c, 0xe1, 0x1f, 0xbf, 0x69, + 0x0c, 0xd6, 0x5f, 0x83, 0x42, 0xa3, 0xb1, 0x96, 0x2a, 0x64, 0x29, 0x16, 0x67, 0x02, 0x6c, 0xc2, 0x71, 0xb7, 0x2f, + 0x56, 0xb5, 0x59, 0x0b, 0xfa, 0xf3, 0x11, 0xdf, 0xa3, 0xb1, 0xba, 0x2a, 0xe7, 0xa2, 0xfc, 0x88, 0xf4, 0xa9, 0x8e, + 0x8f, 0x51, 0xb1, 0xa9, 0xbb, 0xd3, 0xa9, 0x56, 0x1d, 0x69, 0xbf, 0x29, 0xd7, 0x60, 0xc7, 0xeb, 0xe4, 0xc8, 0x52, + 0x78, 0xd6, 0x61, 0xe7, 0xa5, 0x53, 0xa2, 0xc3, 0x30, 0xde, 0x6d, 0xd5, 0x33, 0x86, 0xf2, 0xdc, 0x60, 0x4c, 0x17, + 0x3c, 0xe2, 0x2f, 0x06, 0xb9, 0x0c, 0x8d, 0xf9, 0x80, 0x6c, 0x18, 0xca, 0x87, 0x16, 0x19, 0x12, 0x22, 0xde, 0x43, + 0x25, 0x60, 0xdb, 0x82, 0x32, 0x29, 0xe0, 0x2c, 0x1a, 0xfc, 0x56, 0x7b, 0x39, 0xf0, 0x1e, 0x44, 0x7e, 0x23, 0x5d, + 0xca, 0x25, 0x36, 0x3a, 0x71, 0x2c, 0x0b, 0xed, 0x3c, 0xae, 0xbf, 0x8e, 0x41, 0xfd, 0x5e, 0xe9, 0x37, 0x28, 0x67, + 0x7f, 0x94, 0xac, 0xd3, 0xc6, 0x13, 0xe3, 0x1f, 0xae, 0xf2, 0x4f, 0xd1, 0x52, 0x0f, 0xff, 0x9f, 0x31, 0x85, 0xd2, + 0xbf, 0x4a, 0xcb, 0x68, 0xb3, 0x5a, 0x8a, 0x52, 0xe4, 0x91, 0x38, 0xf9, 0x5a, 0x64, 0xe7, 0xf2, 0x9d, 0x4f, 0xa1, + 0x5f, 0x00, 0x5a, 0xf6, 0x09, 0x32, 0xfa, 0x7b, 0x26, 0xf8, 0xf0, 0x7b, 0xed, 0x5c, 0x9b, 0xf3, 0xf1, 0x24, 0xbf, + 0xb2, 0xf6, 0x6e, 0xc7, 0x8b, 0xc4, 0x28, 0xc6, 0x72, 0x5f, 0x75, 0xb3, 0x72, 0xa2, 0x92, 0x03, 0x23, 0x5d, 0x93, + 0xbd, 0x5c, 0xc9, 0xba, 0x9d, 0x6e, 0x25, 0x10, 0x51, 0x05, 0xde, 0x63, 0x5c, 0xc5, 0x3e, 0x82, 0xe9, 0xba, 0xe3, + 0x32, 0xda, 0xf1, 0x9e, 0xf1, 0xea, 0x44, 0x59, 0xc1, 0xed, 0x46, 0xb4, 0x27, 0x74, 0xf4, 0xd3, 0xa4, 0xb6, 0x2c, + 0x1c, 0x80, 0xdc, 0x25, 0x8c, 0x65, 0x43, 0xb0, 0x62, 0x50, 0xfa, 0x7a, 0x4d, 0xc9, 0xb2, 0x00, 0x8b, 0xce, 0x2e, + 0x23, 0x10, 0xc3, 0xba, 0x69, 0x4e, 0xe8, 0x78, 0xe9, 0xe2, 0xbc, 0xd7, 0x2a, 0x52, 0xf0, 0x8c, 0x16, 0x1d, 0x73, + 0xd3, 0x91, 0x6e, 0x8c, 0xf6, 0xf6, 0x7b, 0x83, 0x90, 0xe2, 0xf9, 0x03, 0x5b, 0xad, 0x8b, 0x8b, 0xc4, 0x2b, 0x64, + 0xa2, 0x05, 0xb1, 0x14, 0x81, 0x19, 0x2f, 0x34, 0x8d, 0x30, 0x41, 0x99, 0x12, 0x2c, 0x5a, 0xa3, 0x43, 0xfb, 0xc3, + 0x12, 0x76, 0x8f, 0x31, 0x02, 0x04, 0xaa, 0x4c, 0x9f, 0xc3, 0xd6, 0x84, 0xd9, 0xd4, 0xc5, 0x06, 0x68, 0xab, 0x18, + 0x1a, 0x84, 0xb5, 0x21, 0xe6, 0x63, 0x9a, 0xdf, 0xfd, 0x0b, 0x8b, 0xb1, 0x3d, 0x81, 0xd8, 0xde, 0xed, 0x9a, 0x84, + 0xe9, 0x5e, 0x8b, 0x1b, 0xeb, 0xe5, 0xf6, 0x94, 0x63, 0x6a, 0xc7, 0xda, 0xa8, 0x1d, 0x6b, 0xa9, 0x77, 0xac, 0xb5, + 0xde, 0xb1, 0xee, 0x1a, 0xfe, 0x21, 0xf3, 0x62, 0x96, 0x80, 0x7e, 0x77, 0xc5, 0x55, 0x83, 0xa0, 0x19, 0x1b, 0x76, + 0x0b, 0xbf, 0x25, 0xd6, 0x6e, 0xe9, 0x5f, 0x2c, 0xd9, 0xc2, 0xf4, 0x81, 0x6e, 0x1d, 0x60, 0x19, 0x51, 0x93, 0xef, + 0x91, 0x77, 0xd3, 0x59, 0x51, 0xb8, 0x3d, 0xb1, 0x85, 0xcf, 0xae, 0xcd, 0x9b, 0xf7, 0xcf, 0x22, 0xc8, 0xbd, 0xe3, + 0xde, 0xfd, 0xf0, 0xda, 0xbf, 0xd0, 0x2d, 0x90, 0x93, 0x59, 0xce, 0x40, 0xea, 0x88, 0x4f, 0x10, 0xad, 0xec, 0x29, + 0xdf, 0x09, 0xb9, 0xb3, 0xad, 0x9f, 0xdd, 0xbb, 0xdb, 0xda, 0xdd, 0xb3, 0x7b, 0x56, 0x8d, 0x28, 0x56, 0x9c, 0xa6, + 0x48, 0x98, 0x45, 0x1b, 0xe0, 0xa9, 0x97, 0xef, 0x77, 0xec, 0x98, 0xc3, 0xdd, 0xb3, 0x8e, 0x8e, 0x97, 0x73, 0xc0, + 0xee, 0xfe, 0xa3, 0x4d, 0xd8, 0x58, 0xe9, 0x5a, 0x85, 0x0e, 0x77, 0xcf, 0x32, 0x8d, 0xe7, 0x70, 0x24, 0x9f, 0x8e, + 0x35, 0x36, 0x08, 0xea, 0xfa, 0x9c, 0x41, 0xed, 0xd8, 0x7d, 0x4d, 0xd8, 0x65, 0xc7, 0xbc, 0xd6, 0x35, 0x6f, 0xaf, + 0x3c, 0x15, 0x1b, 0x02, 0x3a, 0x7c, 0xad, 0x6e, 0x90, 0x7f, 0x09, 0x9c, 0x22, 0x00, 0xe4, 0x70, 0xbc, 0xe4, 0xb1, + 0xef, 0xd3, 0x2c, 0xad, 0x77, 0xa8, 0xb5, 0xa8, 0x2c, 0xcb, 0xb0, 0xf6, 0x7e, 0xd0, 0x8a, 0x61, 0xa9, 0xe9, 0x9f, + 0x8e, 0x03, 0xb7, 0xb3, 0xdd, 0xca, 0xd8, 0x65, 0x3c, 0x2b, 0x2e, 0xbe, 0x3f, 0x2d, 0x94, 0x6b, 0x37, 0x6f, 0xe3, + 0x37, 0xad, 0x96, 0x2c, 0xad, 0xf5, 0x90, 0x97, 0x96, 0x45, 0x04, 0x02, 0x18, 0x8e, 0x94, 0x5d, 0x2c, 0xe1, 0x1e, + 0x61, 0x75, 0x0f, 0x42, 0xc9, 0xbc, 0x70, 0xf1, 0x9c, 0xc5, 0x90, 0x08, 0xb0, 0xdd, 0xa1, 0x62, 0x5b, 0xb8, 0x78, + 0xce, 0x36, 0xbc, 0xe8, 0xf7, 0x33, 0xd5, 0x29, 0x64, 0xdd, 0x59, 0xf2, 0x8d, 0x6a, 0x8e, 0x35, 0xd4, 0x6c, 0x6d, + 0x92, 0xad, 0x71, 0x6e, 0x2b, 0x3e, 0xee, 0xda, 0x8a, 0x8f, 0x95, 0xb5, 0x2e, 0xdd, 0xeb, 0x3d, 0xaa, 0x0b, 0x60, + 0xeb, 0xbf, 0x3d, 0x5e, 0xb9, 0x9e, 0xcf, 0x08, 0xe0, 0x6b, 0xc1, 0xc7, 0x93, 0x05, 0x7a, 0x95, 0x2c, 0xfc, 0xdb, + 0x81, 0x1a, 0x7f, 0xa7, 0x73, 0x17, 0x00, 0x5d, 0x49, 0x79, 0x05, 0xe4, 0x1d, 0xe4, 0x98, 0x5b, 0x76, 0xe5, 0xfd, + 0xc9, 0x77, 0xd8, 0x35, 0xaf, 0x67, 0x8b, 0x39, 0xdb, 0x81, 0x53, 0x41, 0x32, 0xb0, 0x97, 0x15, 0xdb, 0x05, 0xb1, + 0x9d, 0xf0, 0x1b, 0x01, 0x53, 0xbe, 0x84, 0x20, 0xae, 0xe0, 0x16, 0xe2, 0xf0, 0xe4, 0x9f, 0x83, 0xfb, 0xd6, 0x66, + 0x7d, 0xcf, 0xac, 0xce, 0x09, 0xd6, 0xcc, 0xea, 0xc1, 0x60, 0xd9, 0x4c, 0x56, 0xfd, 0xbe, 0xb7, 0xd3, 0x8e, 0x4f, + 0x77, 0x52, 0x27, 0x76, 0x5a, 0xab, 0xb5, 0x60, 0xd7, 0x52, 0xeb, 0x62, 0x0c, 0x3d, 0x40, 0xfc, 0x74, 0x3b, 0xe0, + 0xf7, 0x1d, 0x6b, 0xcb, 0xbb, 0x66, 0x0b, 0xb6, 0x83, 0x4b, 0x50, 0xd3, 0x5e, 0xf6, 0x27, 0x95, 0x0b, 0xda, 0xb1, + 0x4b, 0xe2, 0xe1, 0x8c, 0x59, 0xa5, 0xcc, 0xac, 0x93, 0xea, 0x4a, 0x74, 0xc6, 0x74, 0xd6, 0x7a, 0x3e, 0x57, 0xf3, + 0x49, 0xa1, 0x41, 0xfd, 0xce, 0x89, 0x8f, 0xa8, 0xe8, 0x3c, 0x81, 0xad, 0x65, 0x05, 0xb1, 0xda, 0xe7, 0x60, 0xad, + 0xd5, 0x2e, 0xfd, 0x5e, 0x3e, 0xe0, 0x36, 0xe5, 0xb0, 0x0e, 0x0c, 0x6a, 0x4e, 0xac, 0xa8, 0xc7, 0x6c, 0xc7, 0xb8, + 0xf9, 0xe9, 0xe5, 0x0f, 0x4e, 0x58, 0xb2, 0x62, 0xb5, 0x3f, 0xfd, 0xfe, 0x99, 0xa7, 0xbf, 0x53, 0xfb, 0x17, 0xc2, + 0x0f, 0xc6, 0xff, 0xa9, 0xdd, 0xd7, 0x5a, 0x8c, 0xca, 0x56, 0x39, 0x42, 0xe3, 0x6e, 0x25, 0x4d, 0x96, 0x9f, 0x84, + 0x27, 0xac, 0x05, 0xcf, 0x72, 0xbd, 0x44, 0xb3, 0x02, 0x56, 0x58, 0xcb, 0x24, 0x5c, 0x61, 0xac, 0x96, 0xb6, 0xfa, + 0x16, 0x4d, 0x73, 0x7c, 0x38, 0xd7, 0x06, 0x65, 0xca, 0xd9, 0x19, 0xb1, 0x1a, 0x2e, 0xc3, 0xd2, 0x84, 0x22, 0x64, + 0xf7, 0x76, 0x70, 0x63, 0xa7, 0x2c, 0xa5, 0x0c, 0xe7, 0x18, 0x4c, 0x78, 0x24, 0x46, 0x55, 0xbe, 0xbf, 0x2f, 0x29, + 0x72, 0xda, 0x96, 0x83, 0x2a, 0x84, 0x7d, 0x24, 0x51, 0x02, 0xb7, 0x22, 0x2d, 0x14, 0x29, 0x8b, 0xbf, 0x1d, 0xa0, + 0x0b, 0xbc, 0x80, 0xba, 0x1a, 0x75, 0xfb, 0xc3, 0x11, 0x0f, 0x1f, 0x99, 0xfa, 0xc0, 0x88, 0x25, 0x81, 0xda, 0x5e, + 0x66, 0xe9, 0x1d, 0xa8, 0xf0, 0x7b, 0xb8, 0x9a, 0x88, 0xfd, 0xdc, 0x92, 0xa2, 0x22, 0x1b, 0xe9, 0x0d, 0xad, 0xc1, + 0x23, 0xb4, 0xa6, 0x7c, 0xef, 0xa4, 0xda, 0xa4, 0xf3, 0x8e, 0x90, 0x63, 0xf5, 0xad, 0x25, 0x8c, 0x76, 0x45, 0x2f, + 0xee, 0x1d, 0xbd, 0xe7, 0xe9, 0xaa, 0xe7, 0xfe, 0xc4, 0x15, 0xf3, 0xe4, 0x36, 0x02, 0x75, 0x2b, 0xa8, 0x6e, 0xef, + 0x55, 0x82, 0x05, 0x4b, 0xda, 0x7d, 0xfc, 0x76, 0xd6, 0x0e, 0x44, 0x65, 0xac, 0xd2, 0xd7, 0x24, 0x61, 0x4f, 0x0c, + 0x3a, 0x85, 0xaa, 0xdc, 0xee, 0x8e, 0xb6, 0xc0, 0x75, 0xcc, 0x52, 0xf4, 0xd2, 0x16, 0xb9, 0x5b, 0xfe, 0xdd, 0x73, + 0x45, 0xce, 0x7e, 0x09, 0x08, 0x4e, 0xcd, 0x57, 0xc4, 0x97, 0x23, 0x3c, 0xaa, 0x6e, 0x81, 0xe3, 0xf4, 0x1d, 0xc0, + 0x3f, 0x1c, 0x2e, 0x41, 0x13, 0x10, 0x0b, 0xd6, 0x4b, 0xe3, 0x1e, 0xeb, 0xc5, 0xc5, 0xe6, 0x2e, 0xc9, 0x37, 0xe0, + 0xcc, 0x40, 0xa9, 0x96, 0x7e, 0xe0, 0x58, 0x2d, 0xa0, 0xc2, 0xc1, 0xec, 0xa4, 0x5e, 0x58, 0x46, 0x3d, 0xa6, 0xcf, + 0xcf, 0x60, 0xef, 0x08, 0x09, 0x80, 0xfb, 0x65, 0x1f, 0x90, 0x80, 0x87, 0xce, 0xec, 0x80, 0x70, 0xc2, 0x2c, 0xaa, + 0x02, 0x89, 0xe4, 0x48, 0x3f, 0x7b, 0xcc, 0x44, 0xf2, 0x07, 0xb3, 0x9e, 0x73, 0x4a, 0xf4, 0x58, 0x4f, 0x1d, 0x21, + 0x3d, 0xd6, 0xb3, 0x8e, 0x88, 0x1e, 0xeb, 0x59, 0xc7, 0x47, 0x8f, 0xf5, 0xcc, 0xb1, 0xd3, 0x83, 0xc0, 0x04, 0x88, + 0x3c, 0x60, 0x3d, 0x9a, 0x4c, 0x3d, 0xc5, 0x3d, 0x40, 0x34, 0x08, 0xac, 0x27, 0x85, 0xf3, 0x1e, 0x20, 0x8f, 0x91, + 0x58, 0x1d, 0xf4, 0xfe, 0x32, 0x7e, 0xda, 0x33, 0x32, 0xf2, 0xb8, 0x75, 0x58, 0xfd, 0xaf, 0xbf, 0x42, 0x00, 0x1c, + 0x9e, 0x4d, 0xbd, 0xcb, 0x31, 0x64, 0x95, 0x65, 0x04, 0x92, 0x9f, 0x18, 0x7c, 0xf9, 0x02, 0xa0, 0xea, 0x33, 0x5d, + 0xab, 0xc9, 0x51, 0x7b, 0xcc, 0xa1, 0x2b, 0x06, 0x80, 0x6d, 0x58, 0xa2, 0xaa, 0x16, 0x36, 0x61, 0x71, 0xfb, 0x19, + 0x46, 0x73, 0xd9, 0xf4, 0x82, 0x06, 0xea, 0x11, 0x82, 0x5f, 0x5a, 0x0f, 0xad, 0xb5, 0x4c, 0x39, 0x74, 0x6d, 0x14, + 0x55, 0x36, 0xd4, 0x25, 0xac, 0xd6, 0x22, 0xaa, 0x89, 0x22, 0xe5, 0x92, 0x51, 0x14, 0x4b, 0x15, 0xec, 0x33, 0x71, + 0x07, 0x51, 0xf3, 0xb4, 0xd5, 0x56, 0xc1, 0xfe, 0x0e, 0x10, 0xd6, 0xc2, 0x5a, 0x48, 0x67, 0x50, 0x7b, 0xa7, 0x1f, + 0x29, 0x7f, 0x79, 0x21, 0xb7, 0x73, 0x0b, 0x45, 0xb8, 0x3d, 0x07, 0xe5, 0x4d, 0x5d, 0x95, 0x8a, 0x68, 0xb4, 0x04, + 0x4a, 0x99, 0x13, 0x44, 0x16, 0x20, 0x80, 0xe3, 0x06, 0x02, 0x9f, 0xd7, 0xf8, 0x04, 0x1a, 0x85, 0x40, 0x7e, 0x60, + 0x15, 0xae, 0x3d, 0xa4, 0xa5, 0xd6, 0x88, 0x28, 0x11, 0x3f, 0xba, 0x7a, 0x8e, 0xed, 0xab, 0xa7, 0xb1, 0xb6, 0x94, + 0x26, 0x88, 0x9f, 0x58, 0x6c, 0x21, 0x26, 0x88, 0xea, 0x10, 0x1d, 0xc1, 0x72, 0x42, 0x88, 0xc2, 0x1f, 0x42, 0x3f, + 0x35, 0xf0, 0x97, 0x6c, 0x59, 0xe4, 0x35, 0xc1, 0x62, 0x56, 0x0c, 0xd0, 0xaa, 0x08, 0x3c, 0xd3, 0xd9, 0x52, 0x99, + 0xd3, 0x3c, 0x3a, 0xb2, 0x83, 0xf3, 0xae, 0x83, 0xbd, 0xf4, 0x65, 0xec, 0x64, 0xd9, 0x34, 0x6a, 0x63, 0x43, 0x24, + 0xbc, 0x22, 0x7f, 0x95, 0xa5, 0xc6, 0x39, 0x32, 0x97, 0xeb, 0xbb, 0x2e, 0xee, 0xee, 0x68, 0x9b, 0xb0, 0x0a, 0x11, + 0xea, 0xb6, 0xa1, 0x72, 0x29, 0xcc, 0xc6, 0xa6, 0x69, 0x80, 0x2f, 0x14, 0x95, 0x4a, 0x55, 0x6a, 0x2b, 0x95, 0x9c, + 0xf0, 0xae, 0xaf, 0x6a, 0x91, 0xba, 0x22, 0xd8, 0xc6, 0x0c, 0xf5, 0x50, 0x6e, 0xd4, 0xd8, 0xd7, 0x1d, 0xab, 0xf4, + 0x0e, 0x13, 0xe4, 0x8c, 0xbc, 0xc8, 0xc1, 0x45, 0x49, 0x41, 0xe6, 0x6a, 0x08, 0xf3, 0x47, 0x0d, 0x9f, 0x16, 0x96, + 0x7b, 0x28, 0x01, 0xb3, 0xa3, 0x86, 0x97, 0x11, 0x02, 0x11, 0x97, 0xca, 0xbe, 0x62, 0xe2, 0xf7, 0x14, 0xcc, 0x92, + 0x09, 0xdd, 0x8b, 0x58, 0x18, 0xa1, 0x8d, 0x4f, 0x92, 0x64, 0xea, 0x69, 0x0a, 0x6e, 0xe4, 0x32, 0xcc, 0xd1, 0x08, + 0x2d, 0xf9, 0xc8, 0x81, 0xf4, 0xb5, 0x9c, 0x4a, 0xf0, 0x11, 0x75, 0x0a, 0x38, 0x9e, 0x9f, 0x17, 0xd6, 0x4f, 0x96, + 0x4b, 0xcc, 0x65, 0x6d, 0xfe, 0xcb, 0x8e, 0x8e, 0xc1, 0x2e, 0x4f, 0x13, 0xc7, 0xd5, 0x7f, 0x54, 0x25, 0xc5, 0xc3, + 0xcf, 0x69, 0x0e, 0x28, 0x82, 0x99, 0x3d, 0xc5, 0xf8, 0xd8, 0x67, 0x99, 0x02, 0xfe, 0x76, 0xbd, 0xb5, 0x64, 0x62, + 0x97, 0xb4, 0x9b, 0x2b, 0xe3, 0x97, 0xda, 0xb0, 0xe3, 0xe0, 0xdc, 0x00, 0x14, 0x67, 0x8d, 0x0e, 0xcb, 0x6b, 0xdd, + 0xb6, 0x2a, 0x54, 0xa0, 0xd6, 0xff, 0xd9, 0x2d, 0x4c, 0x79, 0x9b, 0x97, 0xca, 0xdb, 0x3c, 0x34, 0x01, 0x02, 0x91, + 0x19, 0xf2, 0xac, 0xe9, 0x98, 0x24, 0xee, 0x1d, 0x29, 0x69, 0xdf, 0x91, 0xe2, 0x47, 0xef, 0x48, 0xc8, 0xb7, 0x84, + 0x8e, 0xec, 0x4b, 0x4e, 0x4e, 0xa0, 0xcc, 0x60, 0x2f, 0xaf, 0x99, 0xec, 0x1f, 0xd0, 0x5e, 0x38, 0x97, 0xe5, 0x15, + 0xbf, 0x16, 0xde, 0xda, 0x9f, 0xae, 0x4f, 0xbb, 0xaa, 0xde, 0x7e, 0x65, 0x66, 0x1e, 0x0e, 0xc5, 0xe1, 0x50, 0x99, + 0xa0, 0xdd, 0x05, 0x17, 0x83, 0x9c, 0xdd, 0xbb, 0xf1, 0xf1, 0xd7, 0x1c, 0x45, 0x6c, 0xa5, 0x3c, 0x92, 0x2e, 0x54, + 0x62, 0x78, 0x69, 0xe0, 0x61, 0x76, 0x7c, 0x3c, 0xd9, 0x5d, 0xdd, 0x4f, 0x06, 0x83, 0x9d, 0xea, 0xdb, 0x2d, 0xaf, + 0x67, 0xbb, 0x39, 0x7b, 0xe0, 0xb7, 0xd3, 0x6d, 0xb0, 0x6f, 0x60, 0xdb, 0xdd, 0x5d, 0x89, 0xc3, 0x61, 0xf7, 0x82, + 0x2f, 0xfc, 0xfd, 0x03, 0x02, 0x3a, 0xf3, 0xf3, 0x71, 0x1b, 0xe3, 0xe7, 0xa6, 0xed, 0xaa, 0xb5, 0x03, 0x78, 0xfa, + 0x1f, 0xbc, 0x9b, 0xd9, 0x72, 0xee, 0xb3, 0x27, 0xfc, 0x01, 0xfc, 0xf3, 0x71, 0x93, 0x44, 0xea, 0x13, 0xed, 0x32, + 0x79, 0x03, 0x0e, 0xe4, 0x3b, 0x9f, 0xbd, 0xe5, 0x0f, 0xb3, 0xe5, 0x9c, 0x17, 0x87, 0xc3, 0xfb, 0x69, 0x88, 0x64, + 0x4d, 0x61, 0x45, 0x2c, 0x29, 0x9e, 0x1f, 0x84, 0xc7, 0xef, 0x45, 0x64, 0x88, 0xb4, 0xdc, 0xbb, 0x43, 0x76, 0xc3, + 0x22, 0x3f, 0x80, 0x0f, 0xb2, 0x9d, 0x3f, 0x91, 0x35, 0xa5, 0xfb, 0xc5, 0x13, 0xff, 0x70, 0xa0, 0xbf, 0xde, 0xfa, + 0x87, 0xc3, 0x7b, 0xf6, 0x80, 0xe0, 0xe8, 0x7c, 0x07, 0xfd, 0xa3, 0x6f, 0x1d, 0x50, 0x95, 0xe1, 0xf5, 0x6c, 0x33, + 0xf7, 0x5f, 0xac, 0xd8, 0x1d, 0x70, 0xa1, 0x28, 0x2f, 0xb4, 0x1b, 0xf6, 0x80, 0x5e, 0x67, 0xe4, 0x44, 0x34, 0xdb, + 0xcd, 0x7d, 0x16, 0xe3, 0x73, 0x75, 0x5f, 0x4c, 0xbe, 0x7a, 0x5f, 0xdc, 0xb1, 0x6d, 0xf7, 0x7d, 0x51, 0xbe, 0xe9, + 0xae, 0x9f, 0x2d, 0xdb, 0xb1, 0x07, 0x98, 0x61, 0xd7, 0xfc, 0xa6, 0x39, 0x76, 0x8c, 0xfd, 0xea, 0x8d, 0x11, 0x40, + 0x99, 0x2d, 0x58, 0x2c, 0x38, 0x28, 0xd5, 0xaa, 0x6d, 0x49, 0xe4, 0x95, 0x0e, 0x54, 0x9b, 0x11, 0xdc, 0x57, 0x0b, + 0x39, 0xf3, 0xcc, 0x40, 0xdf, 0x56, 0x88, 0x16, 0x0e, 0x1b, 0xf0, 0x57, 0xda, 0x3a, 0xc6, 0x30, 0xcd, 0x6a, 0xa6, + 0x6d, 0x51, 0x97, 0xdf, 0xf6, 0x9e, 0xc9, 0x6f, 0x64, 0x60, 0x0b, 0x91, 0x14, 0x8e, 0xe3, 0x8b, 0xe7, 0x27, 0xfc, + 0x57, 0x2d, 0x8f, 0x5a, 0xed, 0x17, 0x4a, 0x7d, 0xfa, 0x8a, 0x8e, 0x68, 0xe2, 0x5e, 0xb4, 0x65, 0x58, 0xa3, 0xac, + 0xa9, 0xa5, 0xc3, 0x30, 0xae, 0x61, 0x5f, 0x1e, 0x38, 0xf4, 0x1d, 0x10, 0x68, 0xab, 0x54, 0x0a, 0xb4, 0x70, 0x0c, + 0xa3, 0x30, 0x0b, 0x29, 0x8f, 0x0b, 0xb3, 0x94, 0xf7, 0x58, 0xa0, 0xc5, 0xad, 0xba, 0xc7, 0xd4, 0x76, 0x0b, 0x22, + 0xac, 0xde, 0x32, 0xce, 0x2f, 0x1b, 0x55, 0xb8, 0x2d, 0x40, 0x51, 0x04, 0x65, 0xb0, 0x27, 0xb9, 0x6d, 0xa1, 0xa4, + 0xd9, 0x28, 0xac, 0xc5, 0x5d, 0x51, 0xee, 0x7a, 0x0d, 0x5b, 0xe0, 0x05, 0x55, 0x3f, 0x21, 0x6c, 0xcb, 0x9e, 0x75, + 0x28, 0x17, 0xe9, 0x7f, 0x64, 0xe9, 0xf9, 0x76, 0x6b, 0xce, 0xff, 0xf4, 0x15, 0x7d, 0x54, 0xfe, 0xe7, 0x97, 0xf4, + 0x93, 0xc1, 0x32, 0x72, 0x4a, 0x7d, 0x1f, 0x8d, 0x6e, 0xd3, 0x9c, 0x30, 0xb6, 0x7c, 0xfd, 0xf4, 0x1b, 0x64, 0x0a, + 0x92, 0x43, 0x29, 0x55, 0x39, 0xd9, 0x43, 0x5f, 0x78, 0xdd, 0x87, 0x99, 0x60, 0x00, 0xc2, 0x6b, 0xb4, 0xa9, 0x26, + 0x4c, 0xe2, 0xd1, 0x15, 0xfc, 0xdf, 0x08, 0x62, 0xd0, 0x3e, 0x51, 0xd4, 0xb1, 0x6d, 0xa4, 0xeb, 0xb6, 0x73, 0x90, + 0xdc, 0xa9, 0x2b, 0x7f, 0x54, 0x4e, 0xfe, 0x13, 0x0d, 0x91, 0x57, 0x5c, 0x21, 0x56, 0x16, 0x5c, 0x62, 0x31, 0x54, + 0xa4, 0x00, 0xd7, 0x10, 0x44, 0xca, 0xa2, 0xa4, 0x70, 0xcb, 0x41, 0x55, 0x04, 0x60, 0x5c, 0xad, 0x8e, 0x3a, 0x11, + 0x3e, 0x6e, 0xad, 0x45, 0x08, 0x56, 0x34, 0x6a, 0x65, 0xad, 0xc0, 0x17, 0xa4, 0x2f, 0x1d, 0x0a, 0x62, 0x7a, 0x14, + 0x52, 0x55, 0x3a, 0x14, 0x48, 0x73, 0xa8, 0xf8, 0xc6, 0x60, 0xa3, 0xa8, 0x48, 0xcf, 0x5f, 0x9a, 0x94, 0x5c, 0x1a, + 0x33, 0x3e, 0x88, 0x32, 0x12, 0x79, 0x1d, 0xde, 0x89, 0x69, 0x81, 0x7c, 0xa3, 0xc7, 0x0f, 0x82, 0x4b, 0x78, 0x37, + 0xe4, 0x5e, 0x01, 0xb6, 0x04, 0xec, 0x00, 0xf7, 0xca, 0x8c, 0x72, 0x9d, 0xd6, 0xf5, 0x5b, 0xeb, 0xa1, 0x18, 0x86, + 0xcf, 0x2c, 0x81, 0xed, 0x68, 0x1d, 0x1d, 0xe9, 0xe1, 0xc3, 0xff, 0xba, 0xaa, 0x39, 0xea, 0x54, 0x2e, 0x67, 0xc7, + 0x13, 0x96, 0x22, 0x66, 0xd0, 0xfd, 0x75, 0xfb, 0x4a, 0x00, 0xdd, 0x2e, 0x8b, 0x79, 0x36, 0xda, 0xc9, 0xbf, 0xa5, + 0x1b, 0x2b, 0x4a, 0x9b, 0x78, 0x97, 0xf5, 0xc6, 0xfe, 0x70, 0xf4, 0x97, 0x67, 0x5f, 0x26, 0x84, 0xaa, 0xb3, 0x61, + 0x6b, 0x1d, 0xe7, 0xf2, 0xbf, 0xfe, 0x3a, 0x26, 0x2b, 0x08, 0x0a, 0xc2, 0xb2, 0x53, 0x4c, 0x54, 0x30, 0x8a, 0x14, + 0x6b, 0x3e, 0x9e, 0xac, 0x51, 0x27, 0xbc, 0xf6, 0x97, 0x5a, 0x27, 0x4c, 0x8c, 0xac, 0x54, 0xfe, 0x9a, 0x55, 0xec, + 0x4e, 0x65, 0x16, 0x90, 0x79, 0x90, 0x4f, 0xd6, 0x46, 0x83, 0xb9, 0xe2, 0xf5, 0x6c, 0x3d, 0x97, 0xca, 0x67, 0x30, + 0xe5, 0x2c, 0x07, 0x27, 0x4b, 0x61, 0xf7, 0x24, 0x50, 0xb4, 0x66, 0xe8, 0xda, 0x9f, 0x62, 0xab, 0x5e, 0xa7, 0x55, + 0x0d, 0xf0, 0x80, 0x10, 0x03, 0x43, 0xed, 0xd5, 0xc2, 0x43, 0x6b, 0x01, 0xac, 0xfd, 0x51, 0xe9, 0x07, 0xe3, 0xc9, + 0x92, 0x2f, 0x90, 0x7f, 0x39, 0x72, 0xd4, 0xee, 0xfd, 0xbe, 0x77, 0x0f, 0x52, 0x70, 0xe4, 0x5a, 0x28, 0x90, 0x08, + 0x68, 0xc1, 0x37, 0xbe, 0xf2, 0xc1, 0xb8, 0x46, 0x6d, 0x35, 0x28, 0xa8, 0x1d, 0xdd, 0xf2, 0xd8, 0xd1, 0x3b, 0xdf, + 0x9f, 0xd0, 0x57, 0x2f, 0xb4, 0x70, 0xfc, 0x95, 0x33, 0x72, 0xcd, 0x56, 0x1d, 0x72, 0x44, 0x33, 0xe9, 0x10, 0x22, + 0x56, 0x6c, 0xcd, 0xae, 0x49, 0xe5, 0xdc, 0x39, 0x64, 0xa7, 0x8f, 0x50, 0xa5, 0xd7, 0x7a, 0x7c, 0x3b, 0x51, 0xba, + 0xdb, 0xe3, 0xdd, 0xe4, 0x5b, 0x36, 0x11, 0x31, 0x18, 0xd0, 0x06, 0xe1, 0x8c, 0xac, 0x43, 0xa4, 0xd2, 0x01, 0x42, + 0xe0, 0x98, 0x80, 0xa6, 0xff, 0xf8, 0x9a, 0x44, 0x01, 0x47, 0xda, 0x08, 0x59, 0xcb, 0x0e, 0x87, 0x1c, 0x34, 0xca, + 0xcd, 0x1f, 0x5e, 0xa1, 0x4e, 0x73, 0x60, 0x9e, 0x2e, 0x61, 0xcf, 0xc1, 0x23, 0xbd, 0x38, 0x3e, 0xd2, 0xff, 0x3b, + 0x9a, 0xa8, 0xf1, 0x7f, 0xae, 0x89, 0x52, 0x5a, 0x24, 0x47, 0xb5, 0xf4, 0x4d, 0xea, 0x28, 0xb8, 0xc8, 0x3b, 0x6a, + 0x21, 0x7b, 0x96, 0x8d, 0x1b, 0xd5, 0xbc, 0xff, 0x5f, 0x2b, 0xf3, 0xff, 0x35, 0xad, 0x0c, 0x53, 0xb2, 0x63, 0xa9, + 0x66, 0x1e, 0x68, 0x15, 0xc3, 0xec, 0x67, 0x92, 0x10, 0x19, 0x2e, 0x0d, 0xf8, 0x51, 0x05, 0xfb, 0x38, 0xad, 0xd6, + 0x59, 0xb8, 0x43, 0x25, 0xea, 0xad, 0xb8, 0x4b, 0xf3, 0x97, 0xf5, 0xbf, 0x45, 0x59, 0xc0, 0xd4, 0xbe, 0x2b, 0xd3, + 0x38, 0x20, 0x0b, 0x7f, 0x16, 0x96, 0x38, 0xb9, 0xb1, 0x8d, 0x3f, 0xcb, 0xf1, 0xb4, 0x5f, 0x75, 0x66, 0x1e, 0x48, + 0xa0, 0x06, 0xe2, 0x8f, 0x9c, 0xcb, 0xca, 0xe2, 0x01, 0xa1, 0x9b, 0x7f, 0x28, 0xcb, 0xa2, 0xf4, 0x7a, 0x9f, 0x92, + 0xb4, 0x3a, 0x5b, 0x89, 0x3a, 0x29, 0x62, 0x05, 0x65, 0x93, 0x02, 0x8c, 0x3e, 0xac, 0x3c, 0x11, 0x07, 0x67, 0x08, + 0xd4, 0x70, 0x56, 0x27, 0x21, 0x00, 0x0d, 0x2b, 0x84, 0xfd, 0x33, 0x68, 0xe1, 0x59, 0x18, 0x87, 0x6b, 0x80, 0xc9, + 0x49, 0xab, 0xb3, 0x75, 0x59, 0xdc, 0xa7, 0xb1, 0x88, 0x47, 0x3d, 0x45, 0xc9, 0xf2, 0x26, 0x77, 0xe5, 0x5c, 0x7f, + 0xff, 0x07, 0x05, 0xb0, 0x1b, 0x30, 0xdb, 0x16, 0xd8, 0x01, 0x40, 0x82, 0x02, 0xd9, 0x42, 0x9d, 0x46, 0x67, 0x6a, + 0xa9, 0xc0, 0x7b, 0xae, 0x07, 0xf8, 0x9b, 0x1c, 0xb0, 0x8c, 0xeb, 0x42, 0x06, 0x8c, 0x20, 0x80, 0x11, 0x38, 0x28, + 0x01, 0x43, 0x67, 0x88, 0xdb, 0xaa, 0x9c, 0xb5, 0xd0, 0x5c, 0xe9, 0xb6, 0xe4, 0xa6, 0x51, 0xce, 0x56, 0x22, 0x80, + 0xbe, 0xba, 0x29, 0x71, 0xba, 0x5c, 0xb6, 0x92, 0xb0, 0x6f, 0xdf, 0xb7, 0x53, 0x45, 0x1e, 0x1f, 0xa5, 0x21, 0xaf, + 0xc0, 0x93, 0x8c, 0x23, 0x49, 0x94, 0x08, 0xde, 0xe4, 0x8d, 0x19, 0x87, 0x97, 0x6d, 0xca, 0xa9, 0xbd, 0x59, 0x2f, + 0x00, 0xe7, 0x09, 0xda, 0x32, 0xc0, 0x58, 0xc0, 0xe0, 0x5c, 0x88, 0x25, 0x4f, 0x11, 0xfc, 0xd2, 0x89, 0x14, 0xc6, + 0x5d, 0x0e, 0xc3, 0x3c, 0x28, 0x7a, 0x97, 0xd4, 0x1f, 0xfd, 0x3e, 0x6a, 0x93, 0xc1, 0x10, 0x54, 0x02, 0xa8, 0xac, + 0x1b, 0x24, 0x06, 0x56, 0xa5, 0x85, 0xc4, 0x25, 0xc4, 0xcb, 0x7c, 0x35, 0xad, 0xa3, 0xe0, 0x7d, 0x3d, 0x21, 0x84, + 0x13, 0x8c, 0x0f, 0x71, 0x03, 0x04, 0x0c, 0x56, 0x71, 0x81, 0x41, 0xf2, 0x5c, 0xa2, 0xfb, 0xe3, 0xf9, 0x8e, 0x01, + 0xae, 0x9c, 0xf7, 0x54, 0xbb, 0x7a, 0x60, 0x2f, 0x57, 0xe9, 0x92, 0x11, 0xc2, 0x8a, 0xff, 0x8b, 0xc8, 0xfb, 0x76, + 0x98, 0x80, 0xda, 0x46, 0xfe, 0x18, 0x24, 0xe6, 0x32, 0x51, 0x04, 0xf1, 0x28, 0x2b, 0x58, 0x92, 0x06, 0x9b, 0x51, + 0x92, 0x82, 0x46, 0x13, 0x63, 0xc8, 0x54, 0x68, 0x87, 0xa4, 0xd1, 0x6c, 0x4c, 0xf6, 0x31, 0xe4, 0x35, 0x5c, 0x2c, + 0x16, 0x78, 0xdf, 0xcf, 0x42, 0x75, 0xb0, 0x2d, 0xcd, 0x21, 0xe0, 0x24, 0xc1, 0x9e, 0xba, 0x22, 0x25, 0x61, 0x36, + 0xfa, 0x14, 0x72, 0x6e, 0x40, 0xc7, 0x49, 0x63, 0xa8, 0x3e, 0x30, 0x09, 0xaf, 0x22, 0x74, 0x52, 0x56, 0x08, 0x0b, + 0xb8, 0x6f, 0x64, 0x34, 0x5a, 0x49, 0x83, 0xc0, 0xdb, 0x0c, 0x5b, 0x81, 0x4d, 0x68, 0xf8, 0xcb, 0xcc, 0xc3, 0xb4, + 0x9a, 0x95, 0x60, 0xce, 0x37, 0x50, 0x89, 0xf1, 0x64, 0x79, 0xc5, 0x37, 0x2e, 0x56, 0x62, 0x32, 0x5b, 0xce, 0x27, + 0x6b, 0x49, 0x35, 0x97, 0x7b, 0x6b, 0x96, 0xb1, 0x25, 0xec, 0x1f, 0x06, 0x86, 0xd2, 0x81, 0x1d, 0x4d, 0x35, 0x6d, + 0x12, 0x60, 0x32, 0x9d, 0x73, 0x3e, 0xbc, 0x44, 0x34, 0x59, 0x9d, 0xba, 0x93, 0xa9, 0x6a, 0x07, 0xd7, 0xe4, 0x4c, + 0x4e, 0x8f, 0xd4, 0x53, 0xad, 0x7b, 0xc9, 0x47, 0xdb, 0x61, 0x35, 0xda, 0xfa, 0x01, 0xb8, 0x75, 0x0a, 0x3b, 0x7d, + 0x37, 0xac, 0x46, 0x3b, 0x5f, 0xc3, 0xee, 0x92, 0x42, 0xa0, 0xfa, 0xb3, 0xac, 0xc9, 0x5c, 0xbc, 0x2e, 0x1e, 0xbc, + 0x82, 0x3d, 0xf7, 0x07, 0xfa, 0x57, 0xc9, 0x9e, 0xfb, 0x36, 0x93, 0xeb, 0x9f, 0x69, 0xd7, 0x68, 0xcc, 0x74, 0xbc, + 0x76, 0x05, 0x56, 0x68, 0x80, 0xfc, 0x82, 0x1d, 0xed, 0x6d, 0x0e, 0x02, 0x01, 0xba, 0x97, 0xe0, 0x28, 0x0a, 0x88, + 0x9a, 0x56, 0x95, 0x47, 0xa7, 0x7b, 0x7f, 0x8f, 0x6f, 0x94, 0x80, 0x4d, 0x9e, 0x5a, 0xf7, 0x96, 0xb1, 0x7f, 0x38, + 0x40, 0x08, 0xbd, 0x9c, 0x7e, 0xa3, 0x2d, 0xab, 0x47, 0x3b, 0x96, 0xfb, 0x86, 0x51, 0x4f, 0xc1, 0x18, 0x86, 0x2e, + 0xac, 0x62, 0x24, 0xcf, 0x80, 0xac, 0xf1, 0x1b, 0x44, 0x17, 0xb0, 0xe8, 0xf5, 0x5e, 0x1f, 0xd1, 0x20, 0x02, 0x2a, + 0xbd, 0xe6, 0x2f, 0x45, 0x3e, 0x57, 0x85, 0xe8, 0xbd, 0xb7, 0x76, 0xde, 0xcc, 0x48, 0x96, 0x49, 0x23, 0xd5, 0x6e, + 0x65, 0xb1, 0xae, 0xbc, 0xd9, 0x09, 0xe9, 0x62, 0x8e, 0xa1, 0x32, 0x78, 0x1c, 0x80, 0xd2, 0xf3, 0x6f, 0xa1, 0x57, + 0x32, 0x64, 0x9a, 0x25, 0x9a, 0xd9, 0x5d, 0xe3, 0x4f, 0x56, 0xa9, 0x17, 0x23, 0x62, 0x36, 0xb0, 0x85, 0xb8, 0x2d, + 0x2a, 0xdd, 0x16, 0x85, 0xb2, 0x45, 0x91, 0x3e, 0xd4, 0xce, 0x74, 0x67, 0x16, 0x3e, 0xab, 0x4c, 0xfb, 0xde, 0x66, + 0x66, 0x6c, 0x80, 0xb6, 0x8b, 0xf0, 0x0d, 0x74, 0xa0, 0x42, 0xc8, 0x7f, 0x40, 0x44, 0x24, 0x02, 0x76, 0x39, 0x75, + 0x27, 0x36, 0x1d, 0x92, 0x79, 0x88, 0x59, 0xa1, 0x46, 0x79, 0xc9, 0x93, 0xa3, 0x01, 0xa9, 0x08, 0x75, 0xbb, 0xdf, + 0x3f, 0x5f, 0xba, 0xa0, 0xf6, 0x6b, 0x8a, 0x1d, 0xa3, 0x9b, 0x02, 0xce, 0x05, 0x8f, 0xf2, 0x9e, 0x7b, 0xe7, 0x80, + 0xe6, 0xd8, 0x9e, 0x22, 0x6b, 0xc0, 0xe9, 0x6d, 0x17, 0x02, 0x6c, 0x9f, 0x35, 0x5b, 0xfb, 0x93, 0xd5, 0x55, 0x34, + 0xf5, 0x4a, 0x3e, 0xd3, 0x5d, 0x94, 0xb8, 0x5d, 0x14, 0xcb, 0x2e, 0xda, 0x34, 0x10, 0xec, 0xb8, 0xf2, 0x03, 0xe0, + 0x0d, 0x8d, 0xfa, 0xfd, 0xb2, 0xd5, 0xb3, 0x27, 0x5f, 0x3b, 0xee, 0xd9, 0xcc, 0x67, 0xa5, 0xe9, 0xd9, 0x5f, 0x53, + 0xb7, 0x67, 0xe5, 0x64, 0x2f, 0x3a, 0x27, 0xfb, 0x74, 0x36, 0x0f, 0x04, 0x97, 0x3b, 0xf7, 0x79, 0x3e, 0xd5, 0xd3, + 0xae, 0xf2, 0x83, 0xd6, 0x10, 0x99, 0x2f, 0x7c, 0xaa, 0xba, 0xd7, 0x15, 0x2c, 0x60, 0x09, 0xee, 0xd6, 0x4b, 0xf3, + 0x5f, 0xb1, 0xfb, 0x7b, 0x41, 0x2f, 0xcd, 0x7f, 0xa3, 0x3f, 0x29, 0x80, 0x03, 0xd0, 0x98, 0xda, 0x2d, 0xf0, 0x10, + 0x43, 0x05, 0x85, 0xbb, 0x59, 0x39, 0xf7, 0x6a, 0x80, 0xc3, 0x24, 0x7d, 0x43, 0xab, 0x57, 0x5a, 0xec, 0x7a, 0x99, + 0xec, 0x15, 0xe0, 0xa1, 0x0a, 0x79, 0x78, 0x38, 0x44, 0x1d, 0xc3, 0x0e, 0xea, 0x08, 0x18, 0xf6, 0x10, 0x1a, 0x5b, + 0xe0, 0xf9, 0xf8, 0x29, 0xe3, 0x7b, 0x01, 0x6a, 0x23, 0x84, 0xc7, 0xab, 0x45, 0x19, 0x62, 0xcb, 0xde, 0x22, 0x95, + 0xd4, 0xcf, 0x02, 0x51, 0x46, 0xab, 0x80, 0xb6, 0xda, 0x63, 0x96, 0xc6, 0x1b, 0x08, 0x15, 0x4b, 0x7d, 0x0c, 0xa1, + 0x81, 0xc3, 0xef, 0x70, 0x00, 0x09, 0xbe, 0xe4, 0x9a, 0x6c, 0xee, 0x6d, 0x7e, 0x4f, 0xfb, 0xfc, 0xe1, 0x70, 0x7e, + 0x89, 0xa0, 0x74, 0x29, 0x7c, 0xa4, 0x12, 0x51, 0x3d, 0xc5, 0x4d, 0x09, 0xd9, 0x2c, 0x59, 0xe9, 0x07, 0xbf, 0xaa, + 0x5f, 0x00, 0x20, 0x0b, 0x81, 0x36, 0x91, 0xd9, 0x9f, 0xce, 0x54, 0x74, 0x01, 0x70, 0x88, 0x3f, 0x7e, 0x82, 0xe8, + 0x1b, 0x5a, 0xa6, 0xe5, 0xe3, 0x84, 0x87, 0xa0, 0xb5, 0x25, 0x9d, 0x44, 0xac, 0x14, 0xd8, 0x10, 0x09, 0xdf, 0xef, + 0x9f, 0xc7, 0x92, 0x0e, 0x34, 0x6a, 0x75, 0x6f, 0xdc, 0xea, 0x5e, 0xf9, 0xba, 0xee, 0xe4, 0xc6, 0x07, 0x45, 0xfb, + 0x6c, 0xde, 0xa8, 0x7c, 0xdf, 0xd6, 0x39, 0xbb, 0xd3, 0xbd, 0x23, 0xe7, 0xc4, 0xb7, 0xf7, 0x10, 0x8a, 0x1e, 0x9a, + 0x22, 0xcb, 0x92, 0x30, 0xa0, 0xb5, 0x76, 0xed, 0x59, 0x46, 0x07, 0xaf, 0x7d, 0x43, 0x88, 0xc8, 0x53, 0x7c, 0x12, + 0x72, 0x8b, 0xe3, 0x83, 0x02, 0xfd, 0x33, 0xe3, 0xcf, 0x9c, 0xf8, 0x61, 0xab, 0x5f, 0x00, 0xe7, 0xa6, 0x7b, 0xef, + 0x4e, 0xcc, 0x7a, 0x0c, 0xa5, 0x6c, 0xfc, 0xdf, 0xef, 0x13, 0x59, 0xa0, 0xd3, 0x11, 0x0d, 0x03, 0xc1, 0x5d, 0x54, + 0xff, 0xf7, 0x8a, 0xd7, 0x3d, 0x6b, 0x75, 0xbe, 0xfc, 0xd4, 0xe9, 0x49, 0xaf, 0x5e, 0xc6, 0x3d, 0xa0, 0x42, 0x07, + 0x08, 0xe7, 0x75, 0xbf, 0x61, 0xbb, 0x6f, 0x7e, 0x79, 0x77, 0xf4, 0x32, 0xb0, 0x49, 0x91, 0xd8, 0x56, 0xf2, 0x59, + 0x0f, 0x14, 0x7e, 0x3d, 0xd6, 0xab, 0x8b, 0x75, 0x8f, 0xf5, 0x50, 0x0b, 0x88, 0x1e, 0x16, 0xa0, 0xfe, 0xeb, 0xd9, + 0xa7, 0xa1, 0x70, 0x90, 0x8d, 0x53, 0x05, 0x8a, 0x2c, 0xf8, 0x0b, 0x31, 0x5a, 0x17, 0x04, 0x88, 0x6c, 0x09, 0x69, + 0xd5, 0xc9, 0xec, 0x71, 0xa9, 0x25, 0x19, 0x7c, 0x13, 0x90, 0xd9, 0x81, 0x95, 0x13, 0x94, 0x8e, 0x5b, 0x03, 0xae, + 0x6c, 0xf1, 0x68, 0xb7, 0x3f, 0x0d, 0xb2, 0xb3, 0xe6, 0xa4, 0xd1, 0x3e, 0xec, 0xd3, 0x3c, 0x40, 0x20, 0x92, 0xa9, + 0x08, 0x72, 0xcd, 0xbd, 0x25, 0x7d, 0x74, 0x38, 0xe7, 0x85, 0xfc, 0x73, 0x2a, 0x75, 0x88, 0x43, 0x89, 0x35, 0x10, + 0xa8, 0x3c, 0x43, 0x95, 0xc3, 0x06, 0x39, 0xfe, 0xd9, 0x91, 0xcc, 0x24, 0x26, 0x8b, 0xdc, 0xad, 0x99, 0x0a, 0x3f, + 0x10, 0x7c, 0xcc, 0x72, 0x0e, 0x5c, 0x60, 0xb3, 0xb9, 0xaf, 0xa6, 0xb8, 0xb8, 0x02, 0x7f, 0x4c, 0xe1, 0x57, 0x3c, + 0x85, 0x9d, 0x76, 0xbf, 0x2e, 0xaa, 0x14, 0x75, 0x1b, 0x85, 0x45, 0x25, 0x0b, 0xa6, 0x35, 0xa4, 0x89, 0x0e, 0xa3, + 0x3f, 0xc8, 0x19, 0x28, 0x08, 0xf9, 0x65, 0xd3, 0x00, 0x23, 0x95, 0x5c, 0x1e, 0x54, 0x49, 0xe0, 0x05, 0xd8, 0x06, + 0x15, 0x5b, 0x17, 0x10, 0x64, 0x9b, 0x14, 0x65, 0xfa, 0xa5, 0xc8, 0xeb, 0x30, 0x0b, 0xaa, 0x51, 0x5a, 0xfd, 0xa8, + 0x7f, 0x02, 0xf3, 0x36, 0x15, 0xa3, 0x5a, 0xc5, 0xe4, 0x37, 0xfa, 0xfd, 0x62, 0xd0, 0xfa, 0x90, 0xc1, 0x47, 0xaf, + 0x4d, 0x83, 0x3f, 0x3a, 0x0d, 0x76, 0x98, 0x68, 0x04, 0x40, 0x32, 0xa7, 0x96, 0x3c, 0x14, 0xfd, 0x11, 0xe4, 0x58, + 0xa3, 0xca, 0x29, 0x18, 0xac, 0xff, 0x78, 0xb4, 0x03, 0x53, 0x2f, 0x8e, 0xb6, 0x64, 0x07, 0xad, 0x7c, 0x03, 0xdc, + 0xaf, 0x91, 0x2d, 0x66, 0x39, 0x40, 0xb3, 0xd7, 0x88, 0x8c, 0x4f, 0x5e, 0x00, 0x63, 0xb6, 0xce, 0xc2, 0x48, 0xc4, + 0xc1, 0x58, 0x35, 0x66, 0xcc, 0xc0, 0xc0, 0x05, 0xba, 0x96, 0x49, 0x49, 0x1a, 0xd2, 0xc1, 0x80, 0x95, 0xb2, 0x85, + 0x03, 0x5e, 0x34, 0xc7, 0xed, 0x78, 0xd3, 0xa2, 0xf1, 0xc0, 0x76, 0xb1, 0xfd, 0xfd, 0xf7, 0xc5, 0xf6, 0x3a, 0xdc, + 0x92, 0x5e, 0x21, 0x67, 0x09, 0xfd, 0xfc, 0x51, 0xf6, 0x59, 0xc3, 0xc9, 0xa9, 0xd0, 0x0c, 0x2d, 0x45, 0x42, 0x29, + 0xde, 0xe9, 0x49, 0x81, 0xb1, 0x8c, 0x85, 0xbf, 0x07, 0xce, 0xe9, 0x42, 0x11, 0xb9, 0x03, 0xc7, 0xf1, 0x0d, 0x54, + 0x30, 0x6a, 0x38, 0x78, 0x19, 0xc3, 0xb6, 0x28, 0x66, 0x21, 0xe1, 0x14, 0xc2, 0xc5, 0x2a, 0xeb, 0xf7, 0xe5, 0x2f, + 0xea, 0xa2, 0x8b, 0x4c, 0xd6, 0x7d, 0x12, 0x8e, 0xcc, 0x58, 0x4e, 0xbd, 0x90, 0x3c, 0xef, 0x79, 0x32, 0x4d, 0x9e, + 0xe5, 0x41, 0x04, 0x90, 0xcf, 0xe1, 0x7d, 0x98, 0x66, 0x60, 0x95, 0x26, 0xe5, 0x47, 0x28, 0x7d, 0xf1, 0x79, 0xe5, + 0x07, 0x3a, 0x7b, 0x6e, 0x92, 0xe1, 0xcd, 0xaa, 0xf5, 0x26, 0xb5, 0xae, 0x8b, 0x07, 0xfc, 0x8b, 0x33, 0xd8, 0x38, + 0xd7, 0x99, 0xe0, 0xc0, 0x8b, 0xa4, 0xd6, 0x6b, 0xc6, 0x5f, 0x64, 0xb8, 0x2e, 0x55, 0x1b, 0x7d, 0x14, 0xa2, 0x73, + 0xc8, 0x54, 0x80, 0x42, 0x91, 0xf6, 0x0f, 0x4a, 0xad, 0x4c, 0x2a, 0x6d, 0x24, 0x80, 0xee, 0x61, 0xd2, 0x60, 0x8b, + 0xa1, 0x8c, 0xa5, 0x49, 0x94, 0x3b, 0x0d, 0xe2, 0xca, 0xfe, 0x5c, 0x49, 0x1c, 0x5a, 0x16, 0xc9, 0xbf, 0x77, 0x3d, + 0x7d, 0x85, 0xd4, 0x9d, 0x2c, 0x90, 0x19, 0xe3, 0x65, 0x1e, 0x7f, 0x02, 0xc2, 0x6c, 0xd0, 0x46, 0x45, 0x21, 0x84, + 0x6c, 0x10, 0x83, 0xc6, 0xcb, 0x3c, 0xfe, 0x5e, 0xd1, 0x78, 0xc8, 0x47, 0x91, 0xaf, 0xfe, 0x2a, 0xf5, 0x5f, 0xa1, + 0xcf, 0x4c, 0xf0, 0x08, 0xd5, 0x44, 0xff, 0xee, 0xf9, 0xec, 0x1e, 0xd4, 0x86, 0x51, 0x98, 0x99, 0xf2, 0x2b, 0xdf, + 0x14, 0x67, 0xaf, 0xbf, 0xa2, 0xab, 0x6c, 0xeb, 0x7e, 0xf4, 0xf1, 0x88, 0xc0, 0xda, 0x18, 0x5d, 0x71, 0x63, 0x00, + 0x39, 0x4c, 0xde, 0xaf, 0x28, 0x2d, 0x87, 0x34, 0x08, 0x1d, 0x34, 0x04, 0xbd, 0x92, 0xe8, 0x03, 0x89, 0x45, 0x8c, + 0xe1, 0x85, 0x78, 0x46, 0x6a, 0x32, 0xd1, 0x10, 0xaf, 0x88, 0xfd, 0x10, 0x2d, 0x39, 0x35, 0xd1, 0x8d, 0x30, 0xc5, + 0x40, 0x62, 0x67, 0x90, 0x9c, 0x24, 0xb5, 0xf2, 0x8b, 0x67, 0x92, 0xb0, 0xc4, 0xce, 0x43, 0x0c, 0x26, 0xb5, 0x74, + 0xa7, 0x37, 0x55, 0x7a, 0x77, 0xa4, 0xe5, 0xa0, 0x7d, 0x00, 0x76, 0x29, 0xe9, 0xfd, 0x93, 0x42, 0x11, 0x1f, 0xc2, + 0x38, 0x86, 0xf0, 0x2d, 0xa2, 0xba, 0x02, 0xe7, 0x5a, 0x81, 0xc6, 0x6a, 0xe0, 0xa1, 0x99, 0x55, 0xf3, 0x21, 0xa7, + 0x9f, 0x4a, 0xcb, 0x1f, 0x23, 0x1a, 0x1b, 0xad, 0x9b, 0xc3, 0x61, 0x4f, 0xab, 0x5e, 0x3a, 0x07, 0x5d, 0x36, 0x93, + 0x98, 0xb8, 0x81, 0x74, 0xfd, 0xe8, 0x37, 0x13, 0xf6, 0x22, 0x2a, 0xe4, 0x52, 0x08, 0x0a, 0x5a, 0x1d, 0x08, 0x1c, + 0x0a, 0x6f, 0x51, 0xe6, 0x8b, 0x98, 0x36, 0x10, 0x06, 0x9f, 0x1f, 0xc8, 0xcf, 0x37, 0x05, 0xa9, 0xd8, 0xb1, 0xae, + 0xfd, 0xfe, 0xa6, 0xf4, 0x00, 0x4f, 0xce, 0x24, 0x79, 0xda, 0x0c, 0x61, 0x45, 0x00, 0x8d, 0x59, 0x4d, 0x16, 0x27, + 0x5c, 0x99, 0xc3, 0x8f, 0x95, 0x57, 0xb2, 0x94, 0xa9, 0xf3, 0x54, 0x2f, 0x80, 0xa8, 0xe3, 0x0d, 0x5a, 0x91, 0xfa, + 0x15, 0x3a, 0x7b, 0xcd, 0x4a, 0xc8, 0x78, 0x78, 0xce, 0x79, 0x3a, 0x7a, 0x60, 0x09, 0x8f, 0xf0, 0xaf, 0x64, 0xa2, + 0x0f, 0xbf, 0x07, 0x0e, 0x37, 0xe3, 0x84, 0x47, 0x6e, 0xb3, 0xf7, 0x55, 0xb8, 0x82, 0x9b, 0x69, 0x01, 0x48, 0x6e, + 0x41, 0xd2, 0x04, 0x94, 0x90, 0xc8, 0x84, 0xcc, 0x9a, 0x92, 0x9f, 0x5b, 0xda, 0x06, 0x6b, 0x98, 0x74, 0x1e, 0xf0, + 0xa2, 0xd5, 0x47, 0xab, 0x89, 0x76, 0x99, 0xe5, 0xf3, 0x21, 0xce, 0x50, 0xcd, 0x71, 0x77, 0x06, 0x3f, 0x07, 0xbc, + 0x62, 0x55, 0x93, 0x8e, 0x76, 0x03, 0x2e, 0x3c, 0xb9, 0xce, 0xd3, 0xd1, 0x16, 0x7f, 0xc9, 0xfd, 0x01, 0xa0, 0x83, + 0xa9, 0x4b, 0xe0, 0x4f, 0xd5, 0x56, 0x53, 0xa9, 0x5f, 0x5a, 0xfb, 0x75, 0xdd, 0x59, 0xad, 0xdc, 0xb3, 0x2e, 0x43, + 0x7b, 0x64, 0xc8, 0x19, 0x33, 0xe0, 0xcf, 0x19, 0x4b, 0xfe, 0x9c, 0xb1, 0xe2, 0xcf, 0x19, 0x37, 0x46, 0x06, 0x50, + 0x82, 0x7b, 0xc9, 0x5f, 0xec, 0x11, 0x33, 0xc4, 0x6a, 0x50, 0x09, 0xac, 0x2c, 0xe5, 0xdc, 0x47, 0x4e, 0x31, 0xe5, + 0x94, 0xe1, 0xa5, 0xd3, 0x99, 0x3b, 0x90, 0xf3, 0x60, 0xe6, 0x0e, 0x93, 0xb3, 0x3e, 0xc5, 0xb1, 0x34, 0x26, 0x45, 0x05, 0xe9, 0x9c, 0x0e, 0x37, 0xaf, 0x8e, 0xf3, 0x84, 0x65, 0x7c, 0xdc, 0x3e, 0x53, 0x20, 0xc4, 0x16, 0xcf, 0x90, - 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x3c, 0xd6, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, - 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1b, 0xfe, 0x25, 0x43, 0x75, 0x77, 0x08, - 0x4c, 0x6c, 0xd9, 0x91, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x5b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, - 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x15, 0x5e, 0x2e, 0x5b, 0x79, 0x3c, 0x26, 0xd6, 0x5d, 0xd8, 0xd1, - 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0x54, 0x66, 0x17, 0x12, 0x83, 0x9c, 0xa5, 0xfa, - 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xf9, 0x69, 0x9f, 0x8a, 0xd1, 0x46, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, - 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x4a, 0x1f, 0xc7, 0xc7, 0xa3, 0x14, 0x33, - 0xae, 0x4f, 0xc4, 0x8c, 0xeb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xe3, 0xf1, 0x9a, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, - 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4d, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x4d, 0xea, 0x65, 0xe4, - 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x72, 0xda, 0xad, 0x4b, 0x26, - 0xec, 0x2d, 0x25, 0x97, 0x56, 0x79, 0xf9, 0x74, 0xeb, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, + 0x48, 0xa9, 0x9a, 0xe5, 0x36, 0x7f, 0x38, 0xd4, 0xa3, 0x07, 0xbd, 0xd3, 0xc3, 0xaf, 0x84, 0xfd, 0x92, 0x79, 0xf6, + 0x09, 0x02, 0x98, 0x24, 0xf2, 0x4c, 0xc2, 0xd1, 0x8f, 0xe5, 0xe8, 0x6f, 0x1a, 0xfe, 0x2e, 0x43, 0x75, 0x77, 0x08, + 0x4c, 0x6c, 0xd9, 0x81, 0x43, 0x70, 0xba, 0xaa, 0x44, 0x02, 0x0e, 0x36, 0x1b, 0x16, 0xe9, 0x3d, 0x1e, 0xe2, 0x7c, + 0x50, 0xf8, 0x08, 0x0d, 0x33, 0x7a, 0xbf, 0xbf, 0x11, 0x5e, 0x25, 0x5b, 0x79, 0x38, 0x24, 0xd6, 0x5d, 0xd8, 0xd1, + 0xc7, 0xd1, 0x1e, 0x25, 0xd4, 0x7e, 0x54, 0xeb, 0x4d, 0xa5, 0x1e, 0xe4, 0x66, 0x17, 0x12, 0x83, 0x8a, 0xa5, 0xfa, + 0xf4, 0x4a, 0xf5, 0xa1, 0x66, 0x9d, 0xdf, 0xd5, 0x71, 0x9f, 0x8a, 0xd1, 0x5a, 0x4e, 0x08, 0x70, 0x1d, 0x24, 0x1a, + 0x1d, 0x00, 0xe3, 0x6c, 0xb3, 0xe5, 0xa5, 0xb6, 0x4e, 0x94, 0x8e, 0xe3, 0x5c, 0x1f, 0xc7, 0x87, 0x83, 0x14, 0x33, + 0x2e, 0x8f, 0xc4, 0x8c, 0xcb, 0x06, 0xe0, 0xcd, 0x3a, 0x0f, 0xea, 0xc3, 0xe1, 0x92, 0x2e, 0x45, 0xa6, 0xb3, 0x8d, + 0xf2, 0xb3, 0x1e, 0x3d, 0x3c, 0x4b, 0xd0, 0xdc, 0x5b, 0x61, 0xef, 0x45, 0xb2, 0x3d, 0x93, 0x75, 0xea, 0x65, 0xe4, + 0xd3, 0x0b, 0xf7, 0xec, 0x92, 0xab, 0x1f, 0x56, 0x5f, 0x4f, 0x7f, 0x15, 0x5e, 0xc4, 0x2a, 0xda, 0xad, 0x4b, 0x26, + 0xec, 0x2d, 0xa5, 0x92, 0x56, 0x79, 0xf9, 0x74, 0xe3, 0x07, 0x98, 0x99, 0xf6, 0xf4, 0x41, 0x36, 0xa2, 0xfa, 0xb3, 0x12, 0xb5, 0x32, 0x4c, 0x16, 0xce, 0x4b, 0xa6, 0x9e, 0x0c, 0x78, 0xcc, 0x4a, 0x1e, 0xc9, 0x4e, 0x6f, 0x0c, 0x82, - 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x7c, 0x95, 0x0b, 0x0c, 0xb7, 0xdb, 0xb0, 0xad, - 0xaa, 0xb3, 0xdc, 0xd4, 0x72, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0xb7, 0x10, 0x8c, - 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x03, 0x96, 0xd2, 0xd1, 0x9e, 0x97, - 0xa8, 0x52, 0xf8, 0x9b, 0xe0, 0x87, 0x30, 0x8e, 0x7f, 0x28, 0x76, 0xea, 0x40, 0xbc, 0x2b, 0x76, 0x48, 0xfb, 0x22, + 0x00, 0xd6, 0x39, 0x69, 0xd5, 0x19, 0x47, 0xa3, 0x55, 0xe5, 0xe2, 0x74, 0x95, 0x0b, 0x0c, 0xb7, 0x5b, 0xb3, 0x8d, + 0xaa, 0xb3, 0xdc, 0xd4, 0x2a, 0xe5, 0x3b, 0x80, 0x8f, 0x65, 0x95, 0x0b, 0x3a, 0xa6, 0x4c, 0x9d, 0x37, 0x10, 0x8c, + 0xad, 0x6a, 0x5c, 0x38, 0x35, 0x2e, 0x78, 0x44, 0xed, 0x6e, 0x9a, 0x7a, 0xb4, 0x05, 0x96, 0xd2, 0xd1, 0x8e, 0x97, + 0xa8, 0x52, 0xf8, 0xbb, 0xe0, 0xfb, 0x30, 0x8e, 0xbf, 0x2f, 0xb6, 0xea, 0x40, 0xbc, 0x2d, 0xb6, 0x48, 0xfb, 0x22, 0xff, 0x42, 0x1c, 0xf0, 0x5a, 0xd7, 0x94, 0xd7, 0xd6, 0x9c, 0x06, 0xb6, 0x86, 0x91, 0x92, 0xc2, 0xb9, 0xf9, 0xf3, - 0x78, 0xa4, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x45, 0x09, 0x7e, 0x13, - 0xf2, 0xaf, 0xe3, 0x51, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0x3b, 0x7c, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, + 0x70, 0xa0, 0x95, 0x5d, 0xab, 0xbb, 0x42, 0xad, 0xc7, 0x1c, 0x36, 0xec, 0x45, 0x16, 0xee, 0x44, 0x09, 0x8e, 0x5c, + 0xf2, 0xaf, 0xc3, 0x41, 0xab, 0x2c, 0xd5, 0x91, 0x3e, 0xdb, 0x7f, 0x09, 0xc6, 0x0c, 0x5d, 0x9a, 0x80, 0x65, 0x63, 0x24, 0xff, 0x6a, 0x9a, 0x79, 0xc3, 0x64, 0xcd, 0x14, 0x8e, 0x43, 0xc3, 0x08, 0x69, 0x40, 0xb7, 0x41, 0x6d, 0x78, - 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0xd7, 0x13, 0x71, 0x49, 0x97, 0x24, 0xf5, 0x54, 0x42, - 0x49, 0x08, 0x76, 0xed, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, - 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xcb, - 0x79, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8b, 0x6d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, - 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xcc, 0xe5, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, - 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0xbf, 0xaa, 0x6c, 0x6c, 0x05, 0xe4, 0x90, 0x64, 0xb2, 0x58, 0x8d, 0xee, - 0xc4, 0xb2, 0x28, 0xc5, 0xcf, 0x58, 0x0f, 0xd7, 0x6c, 0xe1, 0x3e, 0x03, 0x42, 0xfb, 0x89, 0xd2, 0xde, 0x44, 0x9a, - 0xa0, 0x7b, 0xc5, 0xd6, 0x00, 0x32, 0x80, 0xa2, 0xae, 0x76, 0xeb, 0x73, 0x7e, 0x8e, 0xa4, 0x19, 0x0e, 0xa3, 0xdb, - 0xa7, 0xab, 0x60, 0x35, 0xb8, 0x46, 0xad, 0xf4, 0x35, 0x8b, 0x5b, 0x18, 0x54, 0x07, 0xb3, 0x84, 0x83, 0x9a, 0x59, - 0x6b, 0x23, 0x10, 0x4c, 0xf6, 0x50, 0x90, 0x33, 0x57, 0xb0, 0x0f, 0x0a, 0xd6, 0x92, 0xd7, 0xc1, 0xe1, 0xd6, 0xbe, - 0xac, 0x14, 0x57, 0xcf, 0xae, 0x92, 0xd6, 0x85, 0xa5, 0xbc, 0x7a, 0xd6, 0x80, 0xc1, 0xe5, 0x04, 0x9b, 0x2a, 0xf7, - 0x27, 0x5b, 0x00, 0xdd, 0x0a, 0x29, 0xe2, 0x45, 0x29, 0x6c, 0x5b, 0xf9, 0xcc, 0x09, 0x1b, 0x6c, 0xd9, 0x03, 0xdc, - 0x2b, 0x83, 0x92, 0xc1, 0x85, 0x18, 0xb7, 0x9b, 0x7d, 0x80, 0x2b, 0x18, 0x0a, 0x63, 0x1b, 0xfe, 0x3a, 0xf3, 0x22, - 0x25, 0xe0, 0x66, 0x88, 0xf2, 0xb5, 0x85, 0x93, 0x49, 0x4f, 0xae, 0x25, 0x8b, 0x01, 0x0b, 0x1a, 0x7c, 0x47, 0xad, - 0xbf, 0x33, 0xf9, 0x37, 0x9e, 0x1e, 0xfa, 0xc1, 0xe7, 0xcc, 0x5b, 0xfa, 0xec, 0x75, 0x2e, 0xa3, 0x35, 0x49, 0x94, - 0x57, 0x0f, 0x97, 0x20, 0x37, 0x2c, 0x47, 0x0f, 0x6c, 0x09, 0xe2, 0xc4, 0x72, 0x94, 0x50, 0x46, 0x57, 0xb8, 0x57, - 0x99, 0x2d, 0x13, 0x81, 0x14, 0x07, 0x96, 0x52, 0xee, 0x2d, 0x36, 0xc1, 0x12, 0xf7, 0x27, 0x92, 0x0b, 0x28, 0x79, - 0x00, 0xe5, 0x4a, 0x01, 0x01, 0x9f, 0x0e, 0xa0, 0x7c, 0x29, 0x2f, 0xc2, 0x9f, 0x38, 0x51, 0x83, 0xe5, 0xe8, 0xa1, - 0x61, 0x7f, 0xf5, 0x42, 0xcb, 0xfe, 0xb0, 0xd2, 0x9a, 0x86, 0x35, 0x5f, 0xc1, 0xb4, 0x98, 0xb8, 0x7d, 0xb9, 0xb6, - 0xab, 0xe2, 0xb3, 0xb5, 0x3a, 0xbb, 0xa9, 0x21, 0x09, 0xfb, 0x8a, 0xac, 0x02, 0x1c, 0xac, 0x8a, 0xb8, 0x67, 0x59, - 0x1e, 0xc2, 0xe8, 0xcf, 0x6d, 0x5a, 0x0a, 0x0b, 0x55, 0xd2, 0x3f, 0x34, 0xa5, 0x40, 0x2a, 0x13, 0x9d, 0x68, 0x21, - 0xb8, 0x02, 0x83, 0xc0, 0xbd, 0xc8, 0x6b, 0x00, 0x8c, 0x01, 0x97, 0x02, 0x65, 0xd9, 0x96, 0x10, 0x52, 0xdd, 0xcf, - 0x40, 0x6d, 0x27, 0xee, 0xd3, 0x88, 0xac, 0x85, 0xe8, 0xab, 0x60, 0xcc, 0x9c, 0xd7, 0xd2, 0x2d, 0x36, 0x5d, 0x6f, - 0xd7, 0xb7, 0xe8, 0x5c, 0xda, 0x72, 0xf3, 0x13, 0xb6, 0x58, 0x2b, 0x50, 0x36, 0x21, 0x69, 0xbb, 0xe2, 0x15, 0xca, - 0x26, 0xb4, 0xb4, 0x0f, 0xd4, 0xa3, 0x42, 0x75, 0xb2, 0xf5, 0x52, 0x3e, 0xb5, 0x08, 0xab, 0xc5, 0x55, 0xee, 0x07, - 0xa0, 0x9b, 0x4a, 0xab, 0x17, 0x75, 0x8d, 0xa6, 0x50, 0xab, 0x85, 0xe3, 0x46, 0x3b, 0x9b, 0x2e, 0xd3, 0x15, 0xe2, - 0xac, 0x4a, 0x3b, 0xf4, 0x0f, 0x99, 0x76, 0xbd, 0xec, 0xe8, 0x37, 0xe3, 0xea, 0x02, 0x17, 0x62, 0x03, 0x3e, 0xe7, - 0xfe, 0xf2, 0x7a, 0xcf, 0xe2, 0x1e, 0x44, 0x3c, 0x03, 0x7b, 0x52, 0xfb, 0x43, 0xf5, 0xa9, 0x2b, 0x18, 0xb2, 0x30, - 0x4a, 0xfd, 0x45, 0xca, 0x7b, 0x4f, 0x70, 0xdc, 0x3f, 0x57, 0x3d, 0xf6, 0xd7, 0x8c, 0x1f, 0xea, 0x62, 0x1b, 0x25, - 0x14, 0xd5, 0xd0, 0x5b, 0x17, 0xdb, 0x4a, 0xc4, 0xc5, 0x43, 0xde, 0x63, 0x98, 0x0c, 0x63, 0x21, 0x53, 0xe1, 0x4f, - 0x99, 0x0a, 0x1e, 0x21, 0x94, 0xb8, 0xdd, 0xf4, 0x48, 0xbb, 0x09, 0x71, 0x4a, 0xb5, 0x28, 0x65, 0x32, 0xfe, 0xad, - 0x9f, 0x40, 0x79, 0x4e, 0xd1, 0x32, 0xfd, 0xa4, 0x70, 0x99, 0xbe, 0xdd, 0x9c, 0x96, 0x9e, 0x89, 0x50, 0x67, 0x2e, - 0xb6, 0xb5, 0x4e, 0xc7, 0xd8, 0x29, 0x9d, 0xda, 0xb0, 0x77, 0xb9, 0xe2, 0xb2, 0xa2, 0xf0, 0x6f, 0x24, 0xb2, 0xea, - 0x19, 0x71, 0xfc, 0x9f, 0x59, 0xfb, 0x0c, 0xab, 0xc0, 0x2f, 0x03, 0x79, 0xbf, 0x00, 0xf8, 0xb8, 0xae, 0xcb, 0xf4, - 0x6e, 0x0b, 0xb4, 0x21, 0x34, 0xfc, 0x3d, 0x1f, 0x19, 0x30, 0xdd, 0x47, 0x38, 0x43, 0x7a, 0xa8, 0x73, 0x4e, 0x67, - 0x65, 0x3a, 0xe7, 0x2a, 0xac, 0x25, 0x38, 0xc8, 0x49, 0x53, 0xc9, 0x75, 0x09, 0x6a, 0x26, 0x70, 0xfb, 0xd0, 0x1e, - 0x11, 0x42, 0x6d, 0xca, 0x6a, 0x7a, 0x09, 0x35, 0xef, 0xe4, 0xb4, 0xa3, 0x49, 0x09, 0xae, 0x1a, 0x3a, 0x2b, 0xd7, - 0x7f, 0x1d, 0x8f, 0xbd, 0xbb, 0xac, 0x88, 0xfe, 0xe8, 0xa1, 0xbf, 0xe3, 0xee, 0x36, 0xfd, 0x02, 0xd1, 0x32, 0xd6, - 0xdf, 0x90, 0x01, 0x1d, 0x4f, 0x86, 0x77, 0xc5, 0xae, 0xc7, 0xde, 0xe5, 0x78, 0x81, 0x55, 0xd7, 0x8f, 0x3f, 0x40, - 0x42, 0xd5, 0xb5, 0x2f, 0x2c, 0x9e, 0x30, 0x4f, 0x89, 0xb6, 0x85, 0x0f, 0x61, 0xa1, 0xef, 0x72, 0xd8, 0x84, 0xa1, - 0x79, 0xd4, 0x3d, 0x4a, 0xda, 0x85, 0xbe, 0xf4, 0xb5, 0xec, 0x2b, 0xdf, 0xb9, 0x02, 0x58, 0xd9, 0x67, 0x36, 0xdc, - 0x93, 0xfe, 0x94, 0xea, 0xc3, 0xf6, 0xb7, 0x64, 0x01, 0x85, 0x16, 0xd6, 0x53, 0x39, 0x3b, 0x37, 0x25, 0x4f, 0xb3, - 0xe9, 0x61, 0x03, 0x7b, 0xd4, 0x3d, 0x7a, 0x4d, 0x05, 0x97, 0xd7, 0x66, 0xf4, 0xfe, 0x61, 0x28, 0x54, 0x47, 0x9d, - 0x3b, 0xc8, 0xa6, 0xb4, 0x2e, 0x39, 0xbf, 0x59, 0xb9, 0xa3, 0x30, 0xbf, 0x0f, 0xc1, 0x33, 0xac, 0x7b, 0x77, 0x71, - 0xde, 0xfb, 0xb3, 0x35, 0x47, 0xfe, 0x9a, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0x0e, 0xbb, - 0xa0, 0x82, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, - 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xbb, 0xc0, 0xd0, 0xb6, 0x4d, 0x89, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x39, 0x51, 0xa1, - 0x59, 0xa4, 0xad, 0x92, 0xf1, 0xef, 0x44, 0x9b, 0x29, 0xd9, 0x63, 0x6b, 0xe0, 0xbd, 0x04, 0xe5, 0x64, 0x98, 0x62, - 0xf8, 0x8e, 0xaf, 0x77, 0x1e, 0x73, 0xcf, 0x39, 0x65, 0x9b, 0x94, 0x1d, 0xc1, 0x72, 0x22, 0x1b, 0xdf, 0x52, 0xbc, - 0xe1, 0xfb, 0xbb, 0x4a, 0x94, 0x00, 0x7a, 0x59, 0xf0, 0xe7, 0xd2, 0xe6, 0x0a, 0xdd, 0xee, 0xde, 0x51, 0x0a, 0xbf, - 0xe4, 0xe5, 0xf1, 0xb8, 0x4b, 0xbd, 0x10, 0x3a, 0x5f, 0xc4, 0xef, 0xc0, 0x1c, 0xc6, 0x10, 0x9b, 0x11, 0x20, 0xcc, - 0xf1, 0x01, 0x75, 0xb0, 0x7e, 0x04, 0xa0, 0x71, 0x02, 0x05, 0x18, 0x7d, 0xb5, 0x2d, 0xe8, 0x5b, 0x5e, 0x5c, 0x44, - 0x88, 0x1a, 0x05, 0x98, 0x28, 0x69, 0x16, 0xc3, 0x70, 0xa0, 0xf3, 0xfb, 0xf6, 0xae, 0x2e, 0x05, 0x0e, 0xbd, 0x63, - 0x19, 0xfe, 0xdb, 0xff, 0x58, 0x5b, 0x5a, 0x55, 0xb6, 0x5b, 0xe3, 0x34, 0xf3, 0xbf, 0xdd, 0x16, 0xfa, 0xfe, 0x4b, - 0xa1, 0x78, 0xde, 0xf1, 0xba, 0xfd, 0x05, 0xa2, 0xf7, 0x75, 0x2b, 0x57, 0xa5, 0x76, 0xc3, 0x4c, 0xf9, 0x43, 0x9a, - 0xc7, 0xc5, 0xc3, 0x28, 0x6e, 0x1d, 0x79, 0x93, 0xf4, 0x92, 0xf3, 0x2f, 0xe0, 0x6c, 0xfd, 0x05, 0xc8, 0x78, 0x5f, - 0x0a, 0xe3, 0x88, 0x49, 0x1c, 0x7c, 0x07, 0x31, 0x8a, 0xb6, 0x25, 0x6c, 0xc8, 0xed, 0xd3, 0x12, 0x34, 0x33, 0xfd, - 0x3e, 0x4a, 0x94, 0xd6, 0x7c, 0xff, 0x8b, 0x9c, 0xef, 0x2f, 0x85, 0xbc, 0x59, 0xc9, 0x0f, 0x9f, 0xac, 0x30, 0xf0, - 0x3d, 0x4e, 0xbf, 0x88, 0x1e, 0x5b, 0x95, 0x3e, 0x7c, 0x57, 0x5a, 0xfa, 0xac, 0xa2, 0xfe, 0x8e, 0x8a, 0x9a, 0x97, - 0x62, 0x44, 0xc4, 0x83, 0xa0, 0x9d, 0x6d, 0x97, 0xda, 0xb5, 0x04, 0xed, 0x82, 0x4d, 0x61, 0xff, 0x7a, 0x6c, 0xc8, - 0xab, 0x7e, 0xff, 0xe7, 0xca, 0x6b, 0xf1, 0xba, 0xeb, 0xd0, 0x94, 0x9f, 0x0a, 0x0f, 0x21, 0x80, 0xb5, 0x0c, 0x94, - 0xf1, 0x1c, 0x60, 0xd2, 0x45, 0x5e, 0xa3, 0x6c, 0x3a, 0x11, 0xf8, 0x98, 0x65, 0x37, 0x4e, 0x32, 0x0d, 0x30, 0xa3, - 0x9a, 0x62, 0xcc, 0x8a, 0x78, 0xb8, 0xf8, 0x88, 0x75, 0xd3, 0xd3, 0x2a, 0xb4, 0x7c, 0x0d, 0xc1, 0xba, 0xc8, 0x32, - 0x8e, 0x62, 0x26, 0x00, 0xd8, 0x7c, 0x04, 0xf9, 0x8a, 0xae, 0x0e, 0x49, 0x2b, 0x55, 0xde, 0xaf, 0x33, 0x22, 0xa3, - 0x49, 0x88, 0xe6, 0xb7, 0xf0, 0xc0, 0xbe, 0x6d, 0x66, 0x54, 0xa9, 0x67, 0x54, 0xee, 0x33, 0x1c, 0x96, 0xc2, 0x31, - 0xe2, 0xff, 0x2d, 0x55, 0x3d, 0x22, 0xd0, 0xab, 0x32, 0xad, 0xa2, 0x22, 0xcf, 0x45, 0x84, 0x08, 0xd5, 0xd2, 0x39, - 0x1c, 0xfa, 0xb1, 0xdf, 0xc7, 0x81, 0x30, 0x2f, 0xfe, 0xf4, 0x58, 0x57, 0xfe, 0x54, 0xe0, 0x5a, 0x49, 0x81, 0x53, - 0x51, 0x23, 0x44, 0x08, 0xef, 0x4f, 0xe0, 0x59, 0x4d, 0x7d, 0xbf, 0xb1, 0x4c, 0x74, 0xff, 0xc8, 0x80, 0xf2, 0x07, - 0xe4, 0xeb, 0x5c, 0x8a, 0x33, 0x75, 0xf2, 0x98, 0x38, 0xe3, 0x00, 0xc4, 0x7c, 0x5d, 0xa2, 0xd1, 0xd8, 0xff, 0x80, - 0x04, 0x43, 0xf5, 0x83, 0x9d, 0x6e, 0xea, 0xfd, 0x33, 0x93, 0x38, 0x8a, 0x3e, 0x6d, 0x93, 0xa7, 0x92, 0xa5, 0xd1, - 0xc2, 0xd1, 0x7b, 0xc4, 0x30, 0x0e, 0xa7, 0xf3, 0x29, 0xc9, 0x36, 0x26, 0xab, 0x00, 0xd2, 0xc9, 0x4c, 0x1d, 0x53, - 0xea, 0x68, 0x9c, 0xeb, 0x05, 0x55, 0xe8, 0xb1, 0x2e, 0x79, 0x05, 0xd6, 0x93, 0x1f, 0xbd, 0xd2, 0x9f, 0x0a, 0x39, - 0x87, 0x8d, 0x44, 0x50, 0xf8, 0x01, 0xae, 0x06, 0x2b, 0x05, 0x0c, 0xa6, 0xbe, 0x85, 0xaf, 0x89, 0xe7, 0x28, 0x78, - 0x14, 0x76, 0x31, 0xb6, 0xe6, 0xbe, 0xf3, 0x49, 0x41, 0xb9, 0x67, 0xc5, 0x9c, 0xe7, 0xc0, 0xb9, 0x0c, 0x0a, 0x61, - 0x3a, 0x9e, 0xe5, 0xff, 0x4c, 0xf2, 0x7a, 0x62, 0x43, 0x80, 0x0c, 0xfe, 0x9c, 0x38, 0x2d, 0xdd, 0xa1, 0x3b, 0x0f, - 0x3d, 0x8b, 0x38, 0x6c, 0xf4, 0x64, 0x53, 0x16, 0xbb, 0x14, 0xf5, 0x12, 0xe6, 0x07, 0xf2, 0xf3, 0x96, 0xfc, 0x10, - 0xa2, 0x78, 0x1b, 0xfc, 0x9a, 0xb1, 0x58, 0xe0, 0x5f, 0x7f, 0xcb, 0x18, 0x4d, 0xb4, 0xe0, 0x5f, 0x59, 0x83, 0x44, - 0xc5, 0x3f, 0x65, 0x93, 0x1c, 0xb8, 0x4c, 0xd5, 0x87, 0xcf, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x39, 0xe8, - 0xd4, 0xe7, 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x96, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4b, 0xa9, 0x1a, 0xbf, - 0x65, 0x14, 0xbf, 0x93, 0xfb, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xf9, 0x7b, 0xc3, 0x99, 0x5d, 0xf6, 0xab, 0xb7, - 0x89, 0xcc, 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x35, 0x13, 0x7f, 0xae, 0x0c, 0xa7, 0xc4, 0xe5, 0xa5, 0x87, 0x2b, 0x36, - 0xad, 0x5e, 0xd2, 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0xa9, 0xf2, 0x00, 0x82, - 0x99, 0xd4, 0x04, 0x80, 0xb4, 0x10, 0x95, 0x42, 0xe4, 0x2f, 0x71, 0x56, 0x5f, 0xf2, 0xde, 0x36, 0x8f, 0x89, 0xb4, - 0xba, 0xd7, 0xef, 0xa7, 0x17, 0x69, 0x4e, 0x41, 0x0d, 0xa7, 0x59, 0xa7, 0x3f, 0x64, 0x41, 0x9d, 0xc8, 0x55, 0xfa, - 0x77, 0x37, 0xc8, 0xcb, 0xf8, 0xbe, 0xee, 0x7a, 0xfe, 0x44, 0xfd, 0xbd, 0xb7, 0xfe, 0xb6, 0x40, 0x70, 0x27, 0xa7, - 0x7e, 0xb2, 0x2a, 0xe5, 0x89, 0x71, 0x69, 0xef, 0xf9, 0x4d, 0x5d, 0x14, 0x59, 0x9d, 0x6e, 0x3e, 0x48, 0x3d, 0x8d, - 0xee, 0x8b, 0x03, 0x18, 0x83, 0xf7, 0x00, 0x78, 0xa6, 0x43, 0x03, 0xa4, 0xef, 0x19, 0x79, 0xb8, 0xcf, 0x2d, 0xf9, - 0x49, 0x65, 0x6d, 0x92, 0xb0, 0xa2, 0xd8, 0x0c, 0x63, 0x84, 0x92, 0x71, 0x1a, 0x3b, 0xbf, 0xdf, 0x57, 0x7f, 0xef, - 0x31, 0x8a, 0x8a, 0x8a, 0x3b, 0x45, 0xa3, 0xb2, 0xaa, 0x47, 0xdb, 0xc1, 0xf1, 0x78, 0x59, 0xd9, 0x38, 0xda, 0x7a, - 0x05, 0x1c, 0xac, 0x50, 0x29, 0x7b, 0x25, 0xc2, 0xf2, 0xc3, 0x95, 0xdf, 0xef, 0xc3, 0xbf, 0x32, 0xd2, 0xc2, 0xf3, - 0xa7, 0xf8, 0x6b, 0x51, 0x17, 0x18, 0x9e, 0x41, 0x6b, 0x34, 0x87, 0x60, 0x82, 0xbf, 0x77, 0xa0, 0x5e, 0x5a, 0x69, - 0x1f, 0x41, 0xb7, 0x02, 0x3d, 0xa8, 0x87, 0x3e, 0x4d, 0xda, 0x17, 0x12, 0x75, 0x7b, 0xab, 0xd3, 0xe8, 0x8f, 0x0a, - 0x2e, 0xa7, 0x30, 0x39, 0xdc, 0xd0, 0xa7, 0x75, 0xb8, 0xfb, 0x04, 0x4f, 0x7f, 0x06, 0xca, 0xad, 0xe3, 0x11, 0xc5, - 0x16, 0x70, 0xf3, 0x58, 0x87, 0x9f, 0x8b, 0x52, 0x46, 0xd4, 0xc7, 0xd3, 0x02, 0xb4, 0x77, 0x01, 0x3a, 0x60, 0x69, - 0x10, 0xaf, 0x90, 0x3c, 0x67, 0x23, 0x80, 0x65, 0x07, 0x96, 0xb3, 0x8c, 0x53, 0x98, 0x67, 0xf9, 0x5c, 0xad, 0xb4, - 0x8b, 0x32, 0xf1, 0x6a, 0x96, 0x81, 0xb3, 0xc0, 0x55, 0xee, 0xb3, 0x4c, 0xab, 0x9e, 0xf2, 0x04, 0x7d, 0x5e, 0xc9, - 0x09, 0xae, 0x04, 0x27, 0x1b, 0x90, 0x5f, 0x80, 0x24, 0x4d, 0x29, 0x6b, 0xca, 0xe7, 0xd7, 0x74, 0x43, 0x46, 0xcf, - 0x79, 0xcf, 0x8b, 0x86, 0xa1, 0x7f, 0xe5, 0x95, 0x10, 0xbe, 0x89, 0xdb, 0x36, 0x4a, 0x61, 0x7f, 0x11, 0x58, 0x7c, - 0xc2, 0x7e, 0xf4, 0x96, 0xfe, 0x74, 0x1c, 0x84, 0x43, 0xe4, 0x86, 0x8a, 0x39, 0xb0, 0xa7, 0x01, 0x8b, 0x4d, 0x7c, - 0xb3, 0x9d, 0xc4, 0x83, 0x81, 0xaf, 0x33, 0x16, 0xb3, 0x18, 0x68, 0x90, 0xe3, 0xc1, 0xf5, 0x5c, 0x9f, 0x10, 0xfa, - 0x61, 0x44, 0xe5, 0xa8, 0x40, 0xe7, 0x20, 0x1a, 0x2c, 0x01, 0x4f, 0xbd, 0x95, 0x0d, 0x92, 0x8c, 0x49, 0x26, 0x71, - 0xad, 0x49, 0xaa, 0xc3, 0x09, 0xad, 0x03, 0x1d, 0x57, 0x17, 0xd0, 0xf9, 0xb8, 0xee, 0x7d, 0xbc, 0x1a, 0x2e, 0xa8, - 0xf4, 0x2b, 0x31, 0xf0, 0xea, 0xe9, 0x38, 0xb8, 0xa6, 0x5b, 0xe1, 0x62, 0x1d, 0xee, 0x7e, 0x96, 0x0f, 0x1c, 0x77, - 0x54, 0xd2, 0x10, 0x18, 0xbc, 0x3d, 0x74, 0x37, 0x33, 0x34, 0xd4, 0x49, 0xfb, 0x30, 0x0e, 0xe5, 0x10, 0xab, 0x56, - 0x5c, 0x49, 0x6f, 0x04, 0xdf, 0x2e, 0x14, 0x63, 0xd9, 0xd8, 0xb5, 0xa1, 0x28, 0xfc, 0x15, 0xc0, 0x0e, 0xb5, 0xbf, - 0x52, 0xc9, 0xc7, 0xc8, 0xa8, 0xa6, 0x81, 0x8e, 0x01, 0x58, 0xb2, 0x34, 0x91, 0x54, 0x91, 0x46, 0xe2, 0x8f, 0xcc, - 0x58, 0x47, 0x4d, 0xd7, 0x17, 0x4c, 0x55, 0x8b, 0xa4, 0xdb, 0x99, 0xc4, 0x72, 0x22, 0x49, 0x6d, 0xf7, 0x11, 0x31, - 0x18, 0xf8, 0x60, 0x23, 0xa6, 0x99, 0x08, 0x47, 0x3c, 0x2a, 0x91, 0x45, 0x97, 0xdf, 0x46, 0x99, 0xb4, 0x7d, 0x59, - 0x91, 0x2d, 0x08, 0xa6, 0x27, 0xd1, 0x07, 0x49, 0xd0, 0xba, 0x48, 0xa4, 0x19, 0x21, 0xc0, 0x8f, 0x27, 0xe5, 0x8d, - 0xfe, 0x1c, 0x34, 0xad, 0x04, 0x2f, 0x19, 0x24, 0x8f, 0xc4, 0xcf, 0xa4, 0x60, 0x16, 0x63, 0xf9, 0x60, 0x80, 0xe5, - 0xe4, 0x4f, 0x1d, 0x93, 0xf4, 0x5f, 0x3a, 0x9d, 0xb0, 0x5f, 0x78, 0x95, 0xad, 0xe5, 0x4d, 0x73, 0xef, 0x85, 0x97, - 0xb3, 0x54, 0xc3, 0x32, 0xe8, 0xbf, 0x26, 0xda, 0x05, 0x5b, 0x5b, 0xc6, 0x84, 0x55, 0x3f, 0x80, 0xb4, 0x47, 0xba, - 0xbc, 0x7c, 0x58, 0x31, 0xc1, 0xa3, 0x2b, 0x6b, 0x1e, 0x44, 0x57, 0xc2, 0x47, 0x2e, 0xbb, 0x49, 0x72, 0x33, 0x9e, - 0xf8, 0xe1, 0x60, 0xa0, 0x00, 0x68, 0x69, 0x9d, 0x14, 0x83, 0xf0, 0xa9, 0x90, 0x03, 0x69, 0x74, 0x54, 0x05, 0x58, - 0x2c, 0xb3, 0x9b, 0x72, 0x92, 0x0d, 0x06, 0x3e, 0x88, 0x8d, 0x89, 0xdd, 0xd0, 0x6c, 0xee, 0xb3, 0x33, 0x05, 0x59, - 0x6d, 0x0e, 0x5b, 0x33, 0xdd, 0x02, 0x03, 0x80, 0x41, 0x44, 0xb0, 0xdc, 0x67, 0x46, 0x3e, 0xa2, 0x4e, 0x4f, 0x61, - 0x04, 0x04, 0xbf, 0x9e, 0x08, 0x44, 0x2e, 0x12, 0xa8, 0x07, 0x98, 0x09, 0x30, 0xa3, 0x8a, 0xe1, 0x35, 0xb0, 0x8b, - 0x57, 0xe6, 0x15, 0x83, 0xfe, 0x45, 0x93, 0x2c, 0xd1, 0x54, 0xe2, 0x68, 0x8c, 0x9c, 0x4a, 0x63, 0x64, 0x40, 0xec, - 0xe2, 0xf8, 0xf7, 0x94, 0x1e, 0x05, 0x29, 0xfb, 0x9c, 0x1b, 0xe2, 0x70, 0x14, 0x5f, 0xc1, 0xaa, 0x71, 0x3c, 0xd6, - 0xe6, 0xf5, 0x74, 0x56, 0xcf, 0x07, 0x22, 0x80, 0xff, 0x86, 0x82, 0xfd, 0xa2, 0xa9, 0xc8, 0x0d, 0x52, 0xe7, 0xf1, - 0x98, 0x82, 0x7c, 0xaa, 0x9b, 0xfc, 0x43, 0xee, 0xee, 0xa7, 0xb3, 0xb9, 0x35, 0x47, 0xaf, 0x6a, 0x5c, 0xb7, 0x56, - 0x37, 0x14, 0x12, 0xad, 0x69, 0x52, 0xdc, 0xe4, 0x93, 0x62, 0xc0, 0x2b, 0x5f, 0xa8, 0x2e, 0xb6, 0x46, 0xb0, 0xf0, - 0xe7, 0x16, 0x08, 0x93, 0x71, 0x2f, 0x3e, 0x59, 0xc8, 0x29, 0xed, 0xda, 0x6a, 0xb7, 0xb5, 0x49, 0xd3, 0x58, 0x35, - 0xbc, 0x86, 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, - 0x2d, 0x86, 0xff, 0x29, 0xdd, 0x9b, 0x53, 0x1b, 0xe4, 0x00, 0xb6, 0x7b, 0x0f, 0xb7, 0x63, 0xf4, 0x40, 0x06, 0x6f, - 0x04, 0x10, 0x8d, 0xaf, 0xa7, 0xd6, 0x8c, 0x89, 0x86, 0x05, 0x2b, 0x87, 0x91, 0x1f, 0x20, 0xe3, 0xe5, 0x14, 0x58, - 0xd9, 0x4f, 0x8a, 0xb8, 0xf6, 0x87, 0x91, 0x7f, 0xf5, 0x2c, 0xc8, 0xb8, 0x17, 0x0d, 0x3b, 0xbe, 0x00, 0x7b, 0xf5, - 0xd5, 0x33, 0x16, 0x0d, 0x78, 0x7e, 0x53, 0x4f, 0xb3, 0x60, 0x98, 0xb1, 0xe8, 0xa6, 0x18, 0x82, 0x0f, 0xed, 0xf3, - 0x72, 0x10, 0xfa, 0xbe, 0xd9, 0x39, 0x74, 0x37, 0x24, 0xf2, 0x08, 0xfb, 0x2b, 0xb8, 0xed, 0x6a, 0x89, 0x19, 0xe0, - 0x06, 0x56, 0x11, 0x33, 0xd8, 0xf2, 0x57, 0xcf, 0x0c, 0x97, 0x50, 0xfe, 0x5c, 0x6a, 0x36, 0x0a, 0x34, 0x27, 0xe7, - 0x68, 0x4e, 0x56, 0x42, 0x2d, 0xf9, 0xa4, 0xc2, 0xa9, 0x3a, 0x9f, 0x68, 0xbb, 0xd1, 0x18, 0x03, 0x17, 0xed, 0xb9, - 0x2d, 0x8c, 0xcc, 0x74, 0x91, 0xa2, 0x01, 0x0b, 0xcf, 0xc4, 0x29, 0x8d, 0x01, 0xed, 0xcb, 0x81, 0xa5, 0x0d, 0xf9, - 0xab, 0x9c, 0x19, 0x68, 0x1b, 0x52, 0x1a, 0x35, 0x03, 0x7f, 0xa6, 0x26, 0xcc, 0xaf, 0x60, 0x25, 0x82, 0xa8, 0x2e, - 0xc0, 0x24, 0xa9, 0xc8, 0x68, 0xa4, 0xac, 0x44, 0x72, 0x0e, 0x78, 0x1f, 0xc1, 0x93, 0x45, 0xec, 0x6a, 0x7f, 0x4a, - 0xff, 0xab, 0xc3, 0xe7, 0xda, 0x7f, 0x2a, 0x80, 0x85, 0x5c, 0x1a, 0x44, 0x06, 0x0a, 0x87, 0xd4, 0x54, 0x22, 0x4e, - 0x1c, 0xcf, 0xc0, 0xd7, 0x70, 0x81, 0xa6, 0x80, 0xfe, 0xa0, 0x66, 0x14, 0x91, 0x85, 0xbf, 0x7a, 0x76, 0x53, 0xb7, - 0x7a, 0x9e, 0x39, 0xaf, 0x41, 0x33, 0x03, 0x21, 0x3d, 0x4e, 0xd5, 0xdb, 0x90, 0xe8, 0xbc, 0xbc, 0xd4, 0x2f, 0x13, - 0x22, 0x59, 0x11, 0x79, 0xfa, 0x3e, 0x07, 0xf3, 0x88, 0x22, 0x74, 0x70, 0x65, 0x1e, 0x8f, 0x97, 0x82, 0xc2, 0x77, - 0x94, 0xe7, 0x03, 0x4e, 0xb3, 0x28, 0x01, 0x6d, 0x20, 0xab, 0x4c, 0x99, 0x9b, 0xa4, 0x65, 0xea, 0x3e, 0x80, 0x95, - 0x20, 0x47, 0x37, 0xa7, 0xa0, 0x50, 0x46, 0x82, 0x52, 0x5a, 0x0d, 0x42, 0xa9, 0x0e, 0x8b, 0x20, 0x72, 0xc8, 0x42, - 0xc0, 0xcd, 0x54, 0x34, 0x5a, 0xd2, 0xf0, 0x08, 0xe7, 0x06, 0x0a, 0x01, 0x48, 0xec, 0xa9, 0xa2, 0x8c, 0xcb, 0x61, - 0xce, 0xd6, 0x3c, 0x1c, 0xe2, 0xac, 0x49, 0x5b, 0x9e, 0x83, 0x38, 0x96, 0x4b, 0xbe, 0xc9, 0x11, 0x0c, 0x22, 0xf4, - 0x19, 0xf2, 0x27, 0xcb, 0xf9, 0x77, 0xe7, 0x30, 0xed, 0x08, 0x1f, 0x76, 0xb5, 0x05, 0x17, 0xb3, 0xbb, 0xf9, 0x04, - 0xe2, 0x5b, 0xee, 0xe6, 0xa7, 0x18, 0x22, 0x0b, 0x7f, 0xb0, 0x1a, 0x4a, 0xae, 0x28, 0x74, 0x59, 0x8f, 0x48, 0x91, - 0x3d, 0xdd, 0x70, 0x04, 0xc1, 0x81, 0x56, 0x0d, 0x32, 0x34, 0x12, 0x5f, 0x3d, 0x83, 0xac, 0xc1, 0x86, 0x7f, 0xce, - 0xc9, 0x59, 0xdd, 0x9f, 0x6c, 0xa1, 0x9a, 0x64, 0xb2, 0x56, 0x54, 0xce, 0x5f, 0xaf, 0xca, 0xf2, 0x6c, 0x55, 0x86, - 0xeb, 0x41, 0x57, 0x55, 0x96, 0x1c, 0xa9, 0x0d, 0xd0, 0x9a, 0xae, 0x10, 0x43, 0x21, 0x6b, 0xb0, 0xb4, 0xaa, 0xb2, - 0xa1, 0x3e, 0x81, 0x40, 0x1f, 0x60, 0x19, 0x35, 0xfb, 0xe9, 0xf0, 0x9f, 0xc1, 0x3f, 0x55, 0xc8, 0x52, 0x9d, 0xd6, - 0x99, 0xf8, 0x35, 0x58, 0x32, 0xfc, 0xe3, 0xb7, 0x60, 0x03, 0x58, 0x02, 0x64, 0xb9, 0xdb, 0xda, 0x68, 0xbd, 0xf2, - 0x0a, 0xf1, 0xae, 0xd6, 0x17, 0xfd, 0xd6, 0x6d, 0xa2, 0x56, 0x80, 0x11, 0x0a, 0x2d, 0x02, 0x6c, 0xf5, 0xc0, 0x3d, - 0x05, 0x3f, 0x10, 0xc3, 0xb9, 0x26, 0xad, 0xa9, 0x13, 0x5e, 0x67, 0xe3, 0x48, 0x44, 0xf5, 0x0e, 0x2e, 0xee, 0xf5, - 0xce, 0xe2, 0x6f, 0x54, 0x20, 0x00, 0xb2, 0x98, 0x62, 0xe3, 0xbc, 0x21, 0xbd, 0x32, 0xec, 0x24, 0xf4, 0xde, 0xb0, - 0x13, 0xc8, 0x8b, 0xc3, 0x4e, 0xa1, 0x4b, 0xb4, 0x9d, 0x22, 0x35, 0xd1, 0x76, 0xd2, 0x62, 0x1d, 0x96, 0x10, 0xfc, - 0xaa, 0xbd, 0x75, 0x94, 0xed, 0x8b, 0x2c, 0x61, 0xda, 0x02, 0x46, 0xb9, 0x55, 0x9f, 0x39, 0x45, 0xac, 0x95, 0xbd, - 0xd3, 0x49, 0x95, 0xbb, 0xc8, 0xa7, 0x56, 0x53, 0x64, 0xf2, 0x0f, 0xa7, 0x2d, 0x92, 0x4f, 0x7e, 0x6e, 0x37, 0x4c, - 0xa6, 0x7f, 0x3c, 0xf9, 0x02, 0xba, 0x22, 0x3b, 0x7d, 0x02, 0x01, 0x99, 0x0a, 0xaa, 0xd5, 0xad, 0x62, 0x9a, 0xb7, - 0xab, 0xec, 0xf6, 0x42, 0x89, 0xe1, 0x74, 0x76, 0x12, 0x1e, 0x6d, 0x86, 0x0c, 0x1c, 0x82, 0x40, 0x21, 0x54, 0x14, - 0xc3, 0x23, 0x50, 0x6b, 0x24, 0x1f, 0xe0, 0x47, 0xbb, 0x53, 0x41, 0xa4, 0x76, 0x53, 0x71, 0xe3, 0xe4, 0xa6, 0xeb, - 0xa5, 0x40, 0xad, 0x53, 0xb2, 0x02, 0x28, 0x21, 0xea, 0x4f, 0x62, 0x57, 0xbf, 0x84, 0x2b, 0x36, 0x3f, 0x34, 0x8a, - 0x9e, 0x5c, 0x9f, 0xa2, 0x6e, 0xc5, 0xd5, 0x69, 0xda, 0x6a, 0x8e, 0x1d, 0x67, 0xc8, 0xc1, 0xb3, 0x82, 0x60, 0x3b, - 0x2a, 0x51, 0xbe, 0x6d, 0x37, 0x1d, 0x13, 0x5b, 0xfd, 0xb3, 0xa8, 0xb6, 0x2b, 0xa8, 0x88, 0x88, 0x4f, 0xb2, 0x9b, - 0x27, 0xed, 0x77, 0xb0, 0xc7, 0x5a, 0x0d, 0x22, 0xfb, 0x0c, 0xae, 0x72, 0x9d, 0x16, 0xb9, 0x2d, 0x83, 0xf3, 0x0f, - 0xaf, 0x76, 0x15, 0x36, 0x39, 0xd6, 0xd5, 0xd5, 0x4c, 0x75, 0x52, 0xb1, 0x81, 0xb1, 0xa6, 0xb5, 0x54, 0xf3, 0x18, - 0x92, 0xee, 0xca, 0xe2, 0xac, 0x4a, 0xba, 0xe9, 0xb9, 0x71, 0xa6, 0x10, 0x03, 0x67, 0xab, 0xd1, 0x72, 0x86, 0x21, - 0xba, 0x3e, 0xcc, 0x12, 0xbf, 0xd5, 0x53, 0xee, 0xf3, 0x70, 0xe7, 0x77, 0xf5, 0x82, 0x93, 0xc9, 0x7e, 0x72, 0x9a, - 0xbb, 0x5d, 0xa4, 0xfd, 0xc4, 0xb7, 0x61, 0xfe, 0xf5, 0x0d, 0x62, 0x25, 0xea, 0x7f, 0x54, 0x00, 0x34, 0xb8, 0xcd, - 0x63, 0x89, 0x52, 0x7f, 0x50, 0xd5, 0x0f, 0x6a, 0xa6, 0x6a, 0x1a, 0x08, 0xe6, 0x54, 0x0a, 0xf8, 0xc3, 0xed, 0xc2, - 0x15, 0x8f, 0xb8, 0x61, 0x61, 0xfc, 0xd3, 0xab, 0xd9, 0xb9, 0xa0, 0x32, 0x70, 0x33, 0xfe, 0xd3, 0x13, 0xec, 0x1c, - 0xd6, 0x0a, 0xc8, 0x0a, 0x7f, 0x7a, 0xd5, 0x23, 0xef, 0xe7, 0xfc, 0x4f, 0x2f, 0x7f, 0xe4, 0x7d, 0xc4, 0x79, 0xf9, - 0x13, 0x49, 0x9d, 0x10, 0xd5, 0xe5, 0x4f, 0xc2, 0x14, 0x5b, 0xa7, 0xf9, 0x2b, 0x52, 0xf8, 0x04, 0x9f, 0x81, 0xef, - 0x70, 0x1d, 0xee, 0xcc, 0x6f, 0xf0, 0xd8, 0xb1, 0xd8, 0x76, 0xa9, 0x2f, 0xa0, 0x1c, 0x81, 0x45, 0x54, 0xf6, 0xdb, - 0xb9, 0xfd, 0x6a, 0x61, 0x94, 0x31, 0x76, 0x5f, 0xb2, 0x12, 0xa5, 0xb3, 0x7e, 0xbf, 0x90, 0x82, 0x91, 0x5d, 0x58, - 0xa3, 0x3d, 0x4a, 0xd5, 0xab, 0x6f, 0xc3, 0x3a, 0x4a, 0xd2, 0x7c, 0x25, 0xa3, 0x8f, 0x64, 0xd8, 0x91, 0xbe, 0x92, - 0x12, 0xed, 0xb5, 0x0a, 0xcb, 0xd1, 0xec, 0xd7, 0x25, 0x07, 0xca, 0xeb, 0x56, 0x50, 0xbe, 0x6a, 0x02, 0xe8, 0x95, - 0x6a, 0x9f, 0x01, 0x23, 0xa7, 0xb0, 0x54, 0x1e, 0xac, 0xc4, 0xb9, 0xe8, 0xb3, 0xe2, 0x78, 0xf4, 0x2c, 0x34, 0xf3, - 0x0a, 0x1e, 0x84, 0x3b, 0x0b, 0x23, 0x15, 0x2e, 0x84, 0xe2, 0x79, 0x85, 0xb1, 0x15, 0x15, 0x70, 0x20, 0xc3, 0x0f, - 0x08, 0xbc, 0x97, 0xfd, 0x2b, 0x18, 0x0c, 0x13, 0xdc, 0xc8, 0xa8, 0x93, 0x2b, 0xf6, 0x27, 0x06, 0x66, 0x50, 0x4f, - 0x6a, 0xf7, 0xd9, 0x83, 0x0a, 0xec, 0x85, 0x33, 0xa0, 0xbd, 0x1b, 0xa3, 0x9f, 0x55, 0xb1, 0x71, 0xd2, 0x3f, 0x15, - 0x1b, 0x48, 0xa6, 0xc3, 0xe2, 0x64, 0x9b, 0x86, 0x47, 0xf2, 0xe4, 0x38, 0xdd, 0xf4, 0x8f, 0xc7, 0x31, 0x7e, 0x1c, - 0xe5, 0xd7, 0x16, 0xf0, 0x2a, 0x6e, 0x21, 0x8d, 0x45, 0x8a, 0xde, 0x81, 0x98, 0x43, 0xd1, 0x4b, 0xf6, 0x5b, 0xc6, - 0xcb, 0x89, 0xa0, 0x94, 0x24, 0x36, 0xbc, 0x23, 0x3d, 0x4d, 0xeb, 0xd1, 0x4e, 0x06, 0xec, 0xd7, 0xa3, 0x3d, 0xfd, - 0x05, 0x8a, 0x47, 0x0b, 0x7f, 0x49, 0x7f, 0x17, 0x77, 0x73, 0xcf, 0xf9, 0xa6, 0xf1, 0x1d, 0x71, 0x81, 0x62, 0xcd, - 0xee, 0xaf, 0x69, 0xe9, 0xac, 0x03, 0xc1, 0x01, 0x6f, 0xb1, 0x8b, 0xf6, 0xfd, 0xc6, 0x75, 0x7a, 0x3a, 0x7c, 0xeb, - 0xd6, 0x28, 0xdf, 0xfb, 0x87, 0x44, 0x39, 0x38, 0xbc, 0x72, 0xd1, 0xfc, 0xed, 0xa7, 0x0c, 0x49, 0x85, 0xe6, 0x06, - 0xdb, 0xc9, 0x16, 0x61, 0x6d, 0x8c, 0x83, 0x9c, 0xad, 0xca, 0x30, 0x02, 0x06, 0x75, 0xec, 0x7f, 0xf4, 0xd9, 0xb4, - 0x21, 0xfb, 0x00, 0x50, 0xb9, 0x0a, 0x01, 0x7b, 0x00, 0x4e, 0x34, 0xc2, 0x0d, 0x70, 0xab, 0xd1, 0x92, 0x0e, 0xea, - 0xb6, 0x60, 0x20, 0x5a, 0xc2, 0xc6, 0x09, 0x5d, 0xdf, 0x57, 0x84, 0x8f, 0xca, 0xb7, 0x0f, 0xe5, 0xaf, 0x9e, 0xb3, - 0xff, 0xde, 0x61, 0x4d, 0x4d, 0xb9, 0x05, 0xcc, 0x9c, 0xb5, 0xc8, 0x2b, 0x84, 0x4e, 0x91, 0xdf, 0xab, 0xba, 0x12, - 0xc3, 0x65, 0x2d, 0xca, 0xce, 0xec, 0xd6, 0x89, 0xde, 0x39, 0x05, 0xb5, 0x54, 0x36, 0x20, 0x01, 0x6e, 0x20, 0xc5, - 0xb6, 0xc0, 0x92, 0xce, 0x06, 0x28, 0xfe, 0x0d, 0x2a, 0xed, 0xfe, 0xdf, 0x39, 0x13, 0xd4, 0x6c, 0xa3, 0xba, 0xbf, - 0xd2, 0x4f, 0x55, 0x4d, 0x62, 0x01, 0x2e, 0x27, 0x69, 0xde, 0xf1, 0x08, 0xab, 0x7f, 0x9a, 0x2c, 0x45, 0xa0, 0x57, - 0x11, 0xed, 0x4a, 0x40, 0x82, 0x76, 0x76, 0x16, 0x2a, 0x02, 0x05, 0xfa, 0xfa, 0x0f, 0xdb, 0x34, 0x8b, 0xe5, 0x6a, - 0xb6, 0x87, 0x89, 0xb2, 0x58, 0x0f, 0x11, 0xe4, 0xcc, 0xd4, 0xc1, 0x7e, 0x4f, 0x33, 0x9a, 0x85, 0x37, 0xa6, 0x04, - 0x97, 0xe2, 0x2a, 0x2a, 0x72, 0xf0, 0x39, 0xc4, 0x17, 0x3e, 0x15, 0x72, 0x83, 0x88, 0xa6, 0x3f, 0xe4, 0x9e, 0x79, - 0x83, 0x85, 0x92, 0x9f, 0x10, 0x7f, 0xc9, 0xda, 0x18, 0xf7, 0x4b, 0xa7, 0xda, 0x2f, 0x15, 0x82, 0xfb, 0xcf, 0xb6, - 0xd8, 0xa8, 0xf2, 0x44, 0x8f, 0x3e, 0xc5, 0xfa, 0x9f, 0x2d, 0xa0, 0x54, 0xf7, 0x6d, 0x70, 0x2a, 0x1e, 0x85, 0xdb, - 0xba, 0xb8, 0x45, 0x68, 0x81, 0x72, 0x54, 0x15, 0xdb, 0x32, 0x22, 0x4e, 0xd8, 0x6d, 0x5d, 0xf4, 0x34, 0x07, 0x3a, - 0x75, 0x58, 0x9a, 0xc8, 0x13, 0xa1, 0xdd, 0x82, 0xee, 0x69, 0x8e, 0x95, 0x78, 0x21, 0x4b, 0x07, 0x59, 0x27, 0xd2, - 0x84, 0xca, 0x5d, 0x5d, 0x75, 0x52, 0x2a, 0x75, 0xc3, 0xeb, 0x54, 0x33, 0xfe, 0x2e, 0xcd, 0x9f, 0x58, 0xf6, 0xeb, - 0xd6, 0x6f, 0xb5, 0xda, 0x1b, 0xab, 0x47, 0x25, 0x6b, 0x8e, 0xb3, 0x09, 0x49, 0xe9, 0x13, 0xb6, 0x9b, 0x49, 0xd7, - 0x3a, 0xf0, 0x24, 0xb8, 0x1c, 0x7a, 0x02, 0x2a, 0x06, 0x4d, 0xbc, 0xdd, 0x05, 0xea, 0x11, 0x78, 0x06, 0xaa, 0x19, - 0x24, 0xd7, 0x01, 0xbf, 0xac, 0xb5, 0x3c, 0x65, 0x84, 0x61, 0xb5, 0xb3, 0x68, 0x39, 0x58, 0x49, 0x78, 0xae, 0x08, - 0x5c, 0xbb, 0x12, 0x78, 0x35, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, - 0xa7, 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, - 0x36, 0x9f, 0x43, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, - 0xcf, 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, - 0x76, 0x7a, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, - 0x88, 0xc2, 0x2c, 0xfb, 0x6b, 0x51, 0xfc, 0x51, 0xe9, 0x3b, 0x02, 0x1d, 0xdd, 0x79, 0x51, 0xa7, 0xcb, 0xfd, 0x07, - 0xc2, 0x78, 0xf2, 0xea, 0x13, 0xa2, 0x5b, 0xdf, 0x67, 0xee, 0x57, 0x80, 0x1b, 0xc1, 0x1d, 0x44, 0x7b, 0xb7, 0xd4, - 0x27, 0xb5, 0xfa, 0x5a, 0xaf, 0x9d, 0xa7, 0xe7, 0x37, 0x9d, 0xdb, 0xef, 0xa1, 0x39, 0xd9, 0x7a, 0x4f, 0x0b, 0x6b, - 0x65, 0xe9, 0xa9, 0x2a, 0xd8, 0x9b, 0xe5, 0xb9, 0x2a, 0x98, 0x3c, 0xf0, 0x9a, 0xfd, 0x82, 0x06, 0x57, 0x3a, 0xd9, - 0x78, 0xcf, 0xd4, 0xc0, 0x2d, 0x0a, 0x4b, 0x87, 0x5f, 0x72, 0x33, 0x79, 0x89, 0xfb, 0x4b, 0x45, 0x2e, 0xf6, 0x9d, - 0x33, 0xba, 0x33, 0xb3, 0xee, 0x55, 0x85, 0xab, 0x05, 0xb9, 0x3a, 0xb0, 0xb5, 0xec, 0xe2, 0x70, 0xc3, 0x22, 0x0a, - 0x10, 0x88, 0xe9, 0x95, 0x5a, 0xfb, 0x13, 0x1a, 0x84, 0x6a, 0x30, 0xf0, 0x0b, 0x0c, 0x56, 0x05, 0x0a, 0x1f, 0x28, - 0x92, 0xbf, 0xf2, 0x04, 0xec, 0xe2, 0x19, 0xa0, 0x5b, 0xb1, 0x59, 0x31, 0x42, 0x84, 0x4c, 0x56, 0xb1, 0x9a, 0xce, - 0x20, 0x9f, 0xfa, 0xe2, 0x1b, 0x5b, 0x75, 0x3e, 0x6f, 0x6b, 0xaa, 0x9c, 0x3b, 0x14, 0xba, 0xbb, 0xa9, 0x3b, 0xb7, - 0x2e, 0xf2, 0xdc, 0x21, 0xe4, 0x4a, 0xc5, 0x4a, 0x4c, 0x43, 0xcd, 0x93, 0x34, 0xa3, 0xfe, 0x62, 0x9f, 0x8a, 0x1a, - 0x85, 0x53, 0xfe, 0x74, 0x0c, 0xaa, 0x70, 0x55, 0x43, 0x1c, 0x4b, 0x55, 0x3c, 0xb2, 0x41, 0xa0, 0x79, 0x75, 0xa7, - 0x92, 0x26, 0x64, 0x72, 0x23, 0x7c, 0x6a, 0x52, 0xca, 0xd3, 0xb4, 0x49, 0x2b, 0x45, 0xea, 0xe0, 0x83, 0x3a, 0xd5, - 0x78, 0x6e, 0xe6, 0xcf, 0x01, 0xcc, 0xb8, 0xba, 0xe1, 0xd7, 0x8a, 0xcb, 0xa8, 0xad, 0xcc, 0xa4, 0xfd, 0xc9, 0xd1, - 0xd8, 0x28, 0x56, 0xe3, 0x46, 0x19, 0x61, 0xa5, 0x34, 0x27, 0xc5, 0x72, 0x3c, 0xff, 0x80, 0xc1, 0x9a, 0x27, 0xb0, - 0x83, 0x89, 0x4a, 0x79, 0x1f, 0x01, 0xf1, 0x75, 0x92, 0xae, 0x12, 0x48, 0x91, 0xfe, 0xa5, 0x4b, 0xee, 0x32, 0x36, - 0x10, 0x63, 0x56, 0xcc, 0x8c, 0xfe, 0x07, 0x77, 0x49, 0x7f, 0x12, 0x02, 0xe0, 0x26, 0x9a, 0x42, 0xa7, 0xce, 0x93, - 0xab, 0x2a, 0x58, 0x5e, 0x79, 0x68, 0xc5, 0x88, 0x07, 0xff, 0xf9, 0x3c, 0x44, 0x10, 0x73, 0x4c, 0xf1, 0xf4, 0x0b, - 0xa3, 0xff, 0x08, 0xae, 0x31, 0x82, 0xd0, 0xdd, 0x3b, 0x87, 0x21, 0xdc, 0xec, 0x41, 0x06, 0xf5, 0x87, 0x3a, 0x24, - 0x6a, 0xf8, 0xd7, 0xdc, 0x83, 0xfe, 0xaf, 0x33, 0x61, 0xa9, 0xfd, 0xf4, 0x74, 0x00, 0x15, 0xbc, 0xaf, 0x78, 0x1b, - 0x11, 0xdf, 0x27, 0x7e, 0x1a, 0x0f, 0xb6, 0x4f, 0xb7, 0x60, 0xad, 0xfb, 0x50, 0x19, 0xeb, 0x2a, 0x61, 0x03, 0x01, - 0x5f, 0xa3, 0xa8, 0x3d, 0xaf, 0xdd, 0xee, 0xc1, 0x7f, 0xfa, 0x57, 0x21, 0x03, 0x26, 0x4e, 0xdf, 0x67, 0x4e, 0xd6, - 0xe8, 0x2a, 0x93, 0xe9, 0x43, 0x27, 0x7d, 0xab, 0xd3, 0x7d, 0x27, 0xfc, 0x23, 0x67, 0x16, 0x1f, 0x6e, 0xe9, 0x2b, - 0x4d, 0x8a, 0x3b, 0x60, 0x65, 0xf3, 0xa8, 0x20, 0xd4, 0xb9, 0x88, 0xbe, 0x32, 0xe5, 0x5b, 0x42, 0xcd, 0xa1, 0xb1, - 0xa4, 0x94, 0xee, 0x35, 0xf4, 0x3a, 0xad, 0xf5, 0xdb, 0x28, 0xc1, 0x98, 0xe8, 0x78, 0xf2, 0x32, 0x1e, 0x2b, 0xef, - 0xe3, 0x71, 0x23, 0x15, 0xf2, 0x00, 0x44, 0xa0, 0x62, 0xfc, 0xe9, 0xca, 0x53, 0x91, 0x5e, 0x18, 0xaf, 0x42, 0x29, - 0x28, 0x0c, 0xe8, 0x0a, 0xa4, 0x80, 0x47, 0xed, 0x89, 0xce, 0xc2, 0x2e, 0xe1, 0x1e, 0xdd, 0x04, 0x8c, 0xf5, 0xf9, - 0xaf, 0xb9, 0x97, 0x33, 0xe1, 0x0e, 0x2f, 0x06, 0xa8, 0x4d, 0xbd, 0xba, 0xfb, 0xb8, 0x56, 0xe7, 0x70, 0x08, 0x0e, - 0x56, 0x83, 0x08, 0x4e, 0xe7, 0x73, 0x47, 0xb3, 0x2c, 0x40, 0xe5, 0x64, 0x95, 0x91, 0x37, 0x4f, 0x16, 0xbd, 0xba, - 0xef, 0x2d, 0xd3, 0xb2, 0xaa, 0x83, 0x8c, 0x65, 0x61, 0x05, 0xb8, 0x3a, 0xb4, 0x7e, 0x10, 0x2e, 0x0b, 0xe7, 0x0f, - 0x84, 0x20, 0x76, 0xaf, 0xb6, 0x25, 0xd7, 0x47, 0xf5, 0xd3, 0x67, 0x6c, 0xc3, 0x25, 0xea, 0xa4, 0x33, 0x11, 0x80, - 0xd8, 0x53, 0xb3, 0x8a, 0x6e, 0x80, 0xa4, 0x4e, 0xb3, 0x8a, 0x6e, 0xa8, 0xd9, 0xc6, 0x38, 0x00, 0xca, 0x58, 0xc0, - 0xbe, 0x9b, 0x8e, 0x83, 0xf5, 0xd3, 0x58, 0x5e, 0x87, 0x56, 0x4f, 0xb7, 0xca, 0x67, 0x50, 0xb7, 0xda, 0x18, 0x13, - 0xdb, 0xcd, 0x97, 0x73, 0xfd, 0x6e, 0xb0, 0xf4, 0xed, 0xa0, 0x39, 0xa7, 0xec, 0x95, 0x2e, 0x7b, 0x6d, 0x97, 0x4d, - 0x3d, 0x77, 0x52, 0xb4, 0x1a, 0x03, 0x7a, 0x03, 0x0b, 0xd6, 0xe7, 0x22, 0xcd, 0x56, 0xa5, 0x2a, 0x01, 0x2f, 0x8c, - 0x35, 0x5b, 0xf9, 0x8d, 0xcc, 0x90, 0x84, 0x79, 0x9c, 0x89, 0xb7, 0x74, 0xaf, 0x85, 0xc9, 0x71, 0x2a, 0x92, 0x29, - 0xa1, 0x53, 0xba, 0xb3, 0x0d, 0x9d, 0xab, 0x30, 0x8a, 0x68, 0xad, 0xa4, 0xd2, 0x48, 0x60, 0x6a, 0x06, 0x28, 0x99, - 0x2b, 0x70, 0x4a, 0x97, 0xfb, 0xdf, 0x89, 0x18, 0x67, 0xbe, 0x28, 0x99, 0x01, 0xdd, 0xf2, 0xeb, 0x62, 0xd3, 0x4a, - 0x91, 0x11, 0xe6, 0xcd, 0x69, 0x7b, 0x5d, 0x1f, 0x02, 0xb9, 0x5a, 0x0e, 0x28, 0x1a, 0x07, 0x85, 0x0e, 0x97, 0x2a, - 0x01, 0xf6, 0x45, 0xe2, 0x67, 0x84, 0x2d, 0xed, 0x81, 0xdc, 0x1e, 0x9d, 0x09, 0x73, 0xc9, 0x49, 0x59, 0x76, 0x29, - 0xcd, 0xe0, 0x72, 0xe2, 0x4a, 0x70, 0x91, 0xde, 0xae, 0xa7, 0x49, 0x4b, 0xdb, 0xc7, 0x86, 0x73, 0x34, 0xb4, 0x0d, - 0xba, 0x63, 0x7f, 0x68, 0x2e, 0x16, 0xb1, 0x75, 0xb1, 0x18, 0x76, 0x66, 0x3f, 0x59, 0x2c, 0x40, 0x0e, 0x00, 0x47, - 0xdd, 0x96, 0x8f, 0xd9, 0x12, 0x38, 0xad, 0xa6, 0xd9, 0xd4, 0xdb, 0xf2, 0xfc, 0xa9, 0xea, 0xe9, 0x25, 0xaf, 0x9e, - 0x0a, 0x33, 0x16, 0x5b, 0x5e, 0x3d, 0xb5, 0x8e, 0x9c, 0xfc, 0xa9, 0x50, 0xa2, 0x75, 0x01, 0xcd, 0xc0, 0x6b, 0x0a, - 0x18, 0xb1, 0x64, 0x32, 0xa5, 0x8a, 0x3c, 0xee, 0x4d, 0xb7, 0x6a, 0xf0, 0x82, 0xc2, 0x21, 0x90, 0xd2, 0xe9, 0x57, - 0xcf, 0x98, 0x7e, 0xef, 0xea, 0x59, 0x87, 0xac, 0x6d, 0x98, 0x2e, 0xb7, 0xc3, 0x64, 0x50, 0xfa, 0x4f, 0xcd, 0xc4, - 0xb8, 0xb2, 0x26, 0x09, 0x20, 0xfe, 0x8d, 0xfd, 0x0e, 0x29, 0xdc, 0xbc, 0xbf, 0x1c, 0xc6, 0x8f, 0xbc, 0x1f, 0x23, - 0x7b, 0x92, 0x66, 0x88, 0x35, 0x93, 0x0a, 0xb9, 0xfb, 0x6a, 0xfd, 0x63, 0x62, 0x37, 0xd9, 0x03, 0x0b, 0x40, 0x6c, - 0x4d, 0x5b, 0xdd, 0xf2, 0x7e, 0xdf, 0x33, 0x45, 0x80, 0x1f, 0x94, 0x7f, 0x72, 0x67, 0x48, 0x06, 0x65, 0xd7, 0x0d, - 0x21, 0x1e, 0x94, 0x4d, 0xd3, 0x5e, 0x6f, 0x07, 0x67, 0x1e, 0xab, 0xeb, 0xb4, 0xb3, 0xb8, 0x5a, 0x64, 0x90, 0x56, - 0x1f, 0xb2, 0xd3, 0xcc, 0x3e, 0x3b, 0x59, 0x2a, 0xdd, 0xef, 0x43, 0x44, 0xdc, 0x49, 0xd6, 0xf6, 0xdb, 0x2d, 0xb8, - 0x86, 0x93, 0x41, 0xe8, 0xca, 0xde, 0x2e, 0xa3, 0x8d, 0x0b, 0x71, 0xda, 0x33, 0x9d, 0x2f, 0xf8, 0xf2, 0x28, 0xed, - 0x3c, 0x38, 0xd5, 0x13, 0x7d, 0x6e, 0xba, 0xab, 0x4c, 0xae, 0x75, 0x58, 0x8d, 0x41, 0x6d, 0x16, 0xb6, 0x70, 0x17, - 0xb6, 0xd1, 0x41, 0x6b, 0x5f, 0x16, 0xfc, 0x53, 0x06, 0xe0, 0x4b, 0xcf, 0x96, 0x5d, 0xaf, 0x49, 0xab, 0xd7, 0x32, - 0x0a, 0xb1, 0xa5, 0xed, 0xd5, 0xa7, 0xa3, 0x7c, 0xdc, 0x9c, 0x51, 0x5c, 0xc8, 0x51, 0x7e, 0xf4, 0x1a, 0xa2, 0xae, - 0x75, 0x1d, 0x17, 0x8b, 0x0e, 0x37, 0xae, 0xba, 0xed, 0xc6, 0xf5, 0x23, 0xe2, 0xad, 0xd1, 0x26, 0x85, 0x5a, 0x19, - 0x3b, 0x82, 0x97, 0x55, 0xc3, 0x21, 0x13, 0xc3, 0xa1, 0x84, 0x4c, 0x7d, 0xec, 0xde, 0xd0, 0xb4, 0xcf, 0x4f, 0x5b, - 0x3f, 0x62, 0xa9, 0x71, 0x14, 0x1b, 0xde, 0xf9, 0x3b, 0x8f, 0xad, 0x71, 0x25, 0x5f, 0x06, 0xb3, 0x5d, 0x41, 0xb5, - 0x35, 0xde, 0xb0, 0x57, 0xf1, 0x1f, 0x72, 0xa9, 0xe4, 0x6f, 0x7f, 0x86, 0x6b, 0x78, 0x6b, 0x4b, 0x07, 0x4d, 0x35, - 0xab, 0x98, 0xb9, 0x17, 0x9c, 0x7e, 0xdc, 0xbd, 0x22, 0x18, 0xfc, 0x9e, 0x8e, 0x82, 0x5c, 0x2c, 0xd5, 0x1a, 0x50, - 0x90, 0x4e, 0xec, 0x98, 0xca, 0x02, 0xc3, 0x00, 0xde, 0x90, 0x01, 0xf2, 0x98, 0xc2, 0xdd, 0x50, 0xe1, 0x85, 0xbf, - 0xe4, 0x64, 0x97, 0xc0, 0xb6, 0x66, 0x7c, 0xcc, 0x70, 0x07, 0x21, 0xff, 0x08, 0xb6, 0x62, 0x6b, 0x76, 0xc7, 0x16, - 0x0c, 0xc9, 0xc6, 0x71, 0x18, 0x63, 0x3e, 0x9e, 0xc4, 0x37, 0x62, 0x12, 0x0f, 0x78, 0x84, 0x8e, 0x11, 0x1b, 0x5e, - 0xcf, 0x62, 0x39, 0x80, 0x6c, 0xc5, 0x95, 0x0e, 0x08, 0xa1, 0xb1, 0xa1, 0x25, 0xaf, 0x0b, 0x83, 0x8b, 0x1d, 0xfb, - 0x2c, 0x47, 0x91, 0x8c, 0x43, 0xb0, 0x68, 0x55, 0x03, 0x0b, 0x13, 0xbb, 0xe3, 0xc5, 0x6c, 0x3d, 0xc7, 0x7f, 0x8e, - 0x47, 0x04, 0xc0, 0x0e, 0x0e, 0x0d, 0x5b, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x2b, 0xcb, 0xd3, 0x85, 0xdd, 0xf3, 0xb7, - 0x7c, 0xcc, 0x2e, 0x7f, 0xf4, 0x20, 0x72, 0xf6, 0xf2, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xbb, 0xd4, 0xcb, 0xd9, 0x1d, - 0x51, 0x10, 0xde, 0x81, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0xbe, 0xe5, 0x0b, 0x8c, 0x15, 0xbb, 0x48, 0x97, 0x1e, 0x66, - 0x84, 0xda, 0xd3, 0xf9, 0xb2, 0x51, 0x93, 0x70, 0x7b, 0xb3, 0x9c, 0x0c, 0x06, 0x5b, 0x7f, 0xcf, 0x37, 0xc0, 0x07, - 0x73, 0xf9, 0xa3, 0xb7, 0xa7, 0x72, 0xe1, 0x3f, 0xaf, 0xb3, 0xe4, 0xbd, 0xcf, 0xde, 0x0e, 0xf8, 0x02, 0xf0, 0x96, - 0xd0, 0x81, 0xeb, 0xde, 0x67, 0x12, 0xaf, 0xed, 0xad, 0xbe, 0x46, 0x20, 0x91, 0x2f, 0x00, 0x23, 0x26, 0xe6, 0xf7, - 0x5b, 0x88, 0xc0, 0x48, 0xc0, 0xb7, 0x55, 0x7b, 0xc4, 0xef, 0xb8, 0x01, 0xfc, 0xca, 0x7c, 0xf6, 0xc0, 0x43, 0xfd, - 0x33, 0xf1, 0xd9, 0x2d, 0x7f, 0xcf, 0x9f, 0x7b, 0x52, 0x92, 0x2e, 0x67, 0xef, 0xe7, 0x70, 0x3d, 0x94, 0xf2, 0x74, - 0x48, 0x3f, 0x1b, 0x83, 0x01, 0x84, 0x42, 0xe6, 0xad, 0x07, 0xac, 0x49, 0x21, 0xfe, 0x05, 0x7c, 0x3b, 0x4a, 0xd8, - 0xbc, 0xf5, 0x76, 0xbe, 0x96, 0x37, 0x6f, 0xbd, 0x07, 0x9f, 0xa2, 0x00, 0xab, 0xa0, 0x94, 0x05, 0x56, 0x41, 0xd8, - 0x68, 0x23, 0x8c, 0x81, 0xab, 0x77, 0x8d, 0xa1, 0xae, 0xe7, 0x88, 0x6d, 0x2b, 0x7d, 0x17, 0xbe, 0x83, 0x0c, 0xf8, - 0xe0, 0x75, 0x51, 0x12, 0x7d, 0x4e, 0x4d, 0x91, 0xb4, 0xee, 0xb9, 0xdf, 0x5a, 0x77, 0xb4, 0xa6, 0xd4, 0x47, 0x6e, - 0xc6, 0xc7, 0x63, 0xfd, 0x5c, 0x68, 0x91, 0x60, 0x0a, 0x1a, 0xd7, 0xa0, 0x2d, 0x40, 0xd0, 0xe7, 0x01, 0xb2, 0x96, - 0x14, 0x0b, 0xbe, 0xfd, 0x15, 0x62, 0xf0, 0xca, 0xf4, 0xce, 0xe5, 0x2a, 0x23, 0x61, 0x7b, 0xe1, 0xd7, 0xc3, 0xda, - 0x9f, 0x38, 0xb5, 0xb0, 0xb4, 0x9a, 0x83, 0xfa, 0xa9, 0x2d, 0xc7, 0xa9, 0xaa, 0xfd, 0x4b, 0x92, 0x54, 0xbb, 0x4a, - 0xcb, 0xe9, 0xbd, 0x7d, 0xd3, 0x65, 0x82, 0x8d, 0xfd, 0x80, 0xaa, 0x23, 0xab, 0x61, 0xf7, 0x85, 0xfa, 0xa2, 0xa7, - 0x64, 0x42, 0xf3, 0x51, 0x45, 0xf3, 0xec, 0x7e, 0xb3, 0xa3, 0xfe, 0xd3, 0xeb, 0xa1, 0x08, 0x90, 0xac, 0xd2, 0x62, - 0x29, 0x72, 0x36, 0xf6, 0xd3, 0x61, 0x92, 0xa9, 0xf0, 0x82, 0x74, 0x74, 0xf7, 0x1b, 0xf7, 0xb7, 0xdc, 0x40, 0xd6, - 0x68, 0xd5, 0x06, 0x63, 0xa5, 0x68, 0x19, 0xac, 0x6f, 0xc6, 0xfd, 0xbe, 0xb8, 0x19, 0x4f, 0x45, 0x50, 0x03, 0x71, - 0x91, 0x78, 0x3e, 0x9e, 0xd6, 0xc4, 0x92, 0xda, 0x15, 0x18, 0xa3, 0xc7, 0x55, 0x51, 0xfb, 0xd4, 0xcf, 0x21, 0x14, - 0xa9, 0xd6, 0xcc, 0xb1, 0xc6, 0x8d, 0x11, 0x71, 0x87, 0x95, 0x6b, 0xa7, 0xf6, 0x3a, 0x00, 0xcb, 0xab, 0x71, 0x41, - 0xd8, 0x26, 0xa7, 0xce, 0x05, 0xac, 0x46, 0x43, 0xaa, 0xdd, 0x70, 0xeb, 0x65, 0xe7, 0x37, 0x8f, 0x13, 0x5b, 0x1b, - 0xe1, 0x96, 0x02, 0xca, 0x28, 0xbf, 0xb1, 0x9c, 0xb0, 0x3b, 0xd5, 0x3b, 0x52, 0xb5, 0x23, 0xce, 0x5c, 0xc0, 0x2a, - 0xc3, 0x53, 0xab, 0x6f, 0x62, 0x70, 0x22, 0xe4, 0xad, 0x74, 0xbc, 0xf6, 0x23, 0xee, 0x57, 0xf7, 0x75, 0xaf, 0x04, - 0x3f, 0x09, 0x79, 0xfd, 0x96, 0x77, 0x00, 0x58, 0xf1, 0x21, 0x2f, 0xa6, 0x85, 0xa3, 0x75, 0x19, 0x94, 0x01, 0x22, - 0x34, 0x03, 0xa0, 0x93, 0xab, 0x83, 0x28, 0x0d, 0x5c, 0x71, 0x87, 0x08, 0x3f, 0x8d, 0x9e, 0x56, 0xcf, 0xc3, 0xa7, - 0xf9, 0x34, 0xbc, 0xaa, 0x82, 0xe8, 0x2a, 0x0f, 0xa2, 0xa7, 0xf9, 0x4d, 0xf8, 0xb4, 0x9a, 0x46, 0x57, 0x55, 0x10, - 0x5e, 0xe5, 0x8d, 0x7d, 0xd7, 0xee, 0xee, 0x09, 0x79, 0xdb, 0xd5, 0x1f, 0xb9, 0x54, 0xf6, 0x94, 0xe9, 0xe5, 0x65, - 0xad, 0x57, 0x6a, 0xb7, 0xb9, 0x5e, 0xa3, 0x66, 0xea, 0xa3, 0xec, 0x2f, 0xb6, 0xb1, 0xf0, 0x64, 0x0e, 0xa1, 0xcf, - 0x48, 0x8b, 0xb9, 0xc7, 0xb9, 0xde, 0x1c, 0x48, 0x61, 0x60, 0xc4, 0xa4, 0x92, 0x91, 0xd3, 0x0b, 0x5c, 0x84, 0x72, - 0xc4, 0xb0, 0x96, 0xae, 0xf6, 0x59, 0x97, 0xde, 0x40, 0x5d, 0x53, 0xec, 0x6b, 0xc8, 0xc0, 0x8b, 0xa6, 0xd7, 0xc1, - 0x18, 0x90, 0x23, 0xf0, 0x8e, 0xcf, 0x96, 0x70, 0x60, 0x6e, 0x00, 0xfa, 0xe6, 0x51, 0x5f, 0x97, 0x15, 0xdf, 0xa8, - 0xbe, 0x99, 0x6e, 0x46, 0x4a, 0xf9, 0xb1, 0xe6, 0xab, 0xab, 0x67, 0xec, 0x8e, 0x6b, 0x54, 0x94, 0x5f, 0xf4, 0x62, - 0xbd, 0x07, 0xae, 0xba, 0x5f, 0xe0, 0x36, 0x8b, 0xc7, 0xae, 0x3c, 0x60, 0xd9, 0x8e, 0x3d, 0xb0, 0x5b, 0xf6, 0x9e, - 0x3d, 0x61, 0x6f, 0xd8, 0x17, 0xf6, 0x13, 0xaa, 0x36, 0x94, 0x90, 0xe7, 0x2f, 0xf8, 0x9d, 0x34, 0x3d, 0x4a, 0x54, - 0xb2, 0x07, 0xdb, 0x4c, 0x33, 0xdc, 0xb2, 0xf7, 0x7c, 0x31, 0x5c, 0xb3, 0x37, 0x90, 0x0d, 0x65, 0xe2, 0xc1, 0x9a, - 0xfd, 0xc4, 0x15, 0x88, 0x99, 0x3e, 0x0b, 0x4b, 0x4b, 0x54, 0x34, 0x65, 0xa2, 0x0c, 0xfd, 0x86, 0xe3, 0x8b, 0xec, - 0x27, 0x2c, 0x42, 0x7e, 0x66, 0xb8, 0x66, 0x0f, 0x7c, 0x31, 0x58, 0xb3, 0xf7, 0xda, 0x40, 0x34, 0xd8, 0xba, 0xa5, - 0x11, 0x92, 0x95, 0x2e, 0x4b, 0x4a, 0xd3, 0x3b, 0xfb, 0x1a, 0xb8, 0x65, 0xb7, 0x58, 0xbb, 0x27, 0x58, 0x34, 0x0a, - 0xfc, 0x83, 0x35, 0xfb, 0xc2, 0x25, 0x80, 0x9a, 0x5b, 0x9e, 0xf4, 0x0a, 0xd5, 0x05, 0xd2, 0xfd, 0xe0, 0x09, 0xa7, - 0x17, 0xd9, 0x17, 0x2c, 0x83, 0xbe, 0x32, 0x5c, 0xb3, 0x1d, 0xd6, 0xee, 0xd6, 0x58, 0xb6, 0xac, 0xea, 0x49, 0x44, - 0x60, 0x14, 0x54, 0x4a, 0xcb, 0xbf, 0x11, 0xcb, 0xa6, 0x6e, 0x1a, 0xd4, 0x86, 0xfe, 0x7c, 0x30, 0xfa, 0x0f, 0x5f, - 0xbf, 0xfb, 0xc1, 0x2b, 0xf5, 0xb5, 0xf7, 0x17, 0xc7, 0xb5, 0xb2, 0x44, 0xd7, 0xca, 0x5f, 0x79, 0x39, 0xfb, 0x65, - 0x3e, 0xd1, 0xb5, 0xa4, 0x1d, 0x86, 0x7c, 0x4d, 0x67, 0xbf, 0x74, 0x38, 0x5b, 0xfe, 0xea, 0xfb, 0x8d, 0xe9, 0x62, - 0xf5, 0x59, 0xdd, 0xbb, 0x0f, 0x83, 0x6d, 0xe3, 0xd4, 0x7b, 0x7f, 0xbe, 0xde, 0xd8, 0xcc, 0x5a, 0x7b, 0x66, 0xfe, - 0x0f, 0x57, 0x7a, 0x87, 0x43, 0x77, 0xcb, 0x77, 0xc3, 0xad, 0x3d, 0x0a, 0xf2, 0xfb, 0x52, 0x69, 0x9c, 0xd5, 0xfc, - 0x85, 0x97, 0x77, 0x49, 0xb1, 0x80, 0x68, 0xf4, 0xc9, 0x48, 0x42, 0xd7, 0xcc, 0xc4, 0x33, 0xc4, 0x57, 0x19, 0x20, - 0x73, 0x81, 0x68, 0x76, 0xcf, 0xc7, 0x93, 0xfb, 0x9b, 0x78, 0x72, 0x3f, 0xe0, 0x9f, 0x4c, 0x0b, 0xda, 0x8b, 0xed, - 0xde, 0x67, 0xbf, 0xf2, 0xc2, 0x5e, 0x8e, 0xbf, 0xf8, 0xec, 0x9d, 0x70, 0x57, 0xe8, 0x2f, 0x3e, 0xfb, 0x22, 0xf8, - 0xaf, 0x23, 0x4d, 0x94, 0xc1, 0xbe, 0xd4, 0xfc, 0xd7, 0x11, 0x32, 0x7e, 0xb0, 0xcf, 0x82, 0xbf, 0x03, 0xdf, 0xef, - 0x2a, 0x41, 0xab, 0xf8, 0xe7, 0x5a, 0xfd, 0x7c, 0x2f, 0xe3, 0x72, 0xe0, 0x4d, 0x68, 0x05, 0xbd, 0x79, 0x57, 0xcb, - 0x9f, 0xc4, 0xc3, 0x91, 0xaa, 0xa7, 0x86, 0x7f, 0x16, 0x8b, 0x59, 0xd4, 0x27, 0xe9, 0x54, 0xde, 0xe4, 0x2d, 0xcf, - 0xa4, 0x75, 0xf9, 0x1e, 0x42, 0x81, 0xdf, 0xda, 0x10, 0x05, 0x7b, 0x8e, 0x1b, 0xc1, 0x5b, 0x06, 0xf0, 0x91, 0xd9, - 0x74, 0xc7, 0x6f, 0xf9, 0x13, 0xfe, 0x85, 0xef, 0x83, 0x07, 0xfe, 0x9e, 0xbf, 0xe1, 0x3f, 0xf1, 0x3d, 0x5b, 0x4a, - 0xb4, 0xd3, 0x7a, 0x77, 0x1d, 0xec, 0x58, 0xbd, 0xbf, 0x0e, 0x1e, 0x58, 0xbd, 0x7b, 0x16, 0xdc, 0xb2, 0x7a, 0xff, - 0x2c, 0x78, 0xcf, 0x76, 0xd7, 0xc1, 0x13, 0xb6, 0xbf, 0x0e, 0xde, 0xb0, 0xdd, 0xb3, 0xe0, 0x0b, 0xdb, 0x3f, 0x0b, - 0x7e, 0x92, 0x18, 0x0f, 0x5f, 0x84, 0xe4, 0x38, 0xf9, 0x52, 0x33, 0xc3, 0xa7, 0x1b, 0x7c, 0x16, 0xd6, 0x2f, 0xaa, - 0x63, 0xf0, 0xb9, 0x66, 0xba, 0xc5, 0x81, 0x10, 0x4c, 0xb7, 0x37, 0xb8, 0xa3, 0x27, 0xa6, 0x55, 0x41, 0x2a, 0x58, - 0x57, 0x3b, 0x83, 0x45, 0xdd, 0xb4, 0xce, 0x64, 0xc7, 0x2f, 0x31, 0xee, 0xf0, 0x4b, 0x5c, 0xb0, 0x65, 0xd3, 0xe9, - 0xa4, 0x73, 0xfe, 0x24, 0xd0, 0x9b, 0xbf, 0xde, 0xf5, 0x73, 0xe9, 0x3b, 0x53, 0x34, 0x5c, 0x6b, 0x8d, 0x5b, 0x3b, - 0x7d, 0x68, 0xed, 0xf4, 0x4c, 0xaa, 0xd0, 0x22, 0x16, 0x95, 0x45, 0x55, 0x21, 0x93, 0x78, 0x90, 0x69, 0x7d, 0x5a, - 0xc2, 0x48, 0x91, 0x09, 0x68, 0xf4, 0x05, 0x1d, 0x03, 0x15, 0x59, 0x14, 0xd8, 0x92, 0x6f, 0x07, 0x09, 0xdb, 0xf0, - 0x78, 0x3a, 0x4c, 0x82, 0x25, 0x5b, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x56, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, - 0x79, 0x6f, 0x9d, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x96, 0xeb, 0x0d, 0x7e, 0xe7, 0xec, 0xe7, 0x1b, 0xb5, 0xbf, 0x83, - 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xcf, 0xed, 0x2d, 0x7d, 0x67, - 0xb6, 0xe9, 0x7f, 0xb7, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xd6, 0x9f, 0x3c, - 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xcf, 0x3f, 0x8d, 0x76, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, - 0x68, 0xef, 0xe4, 0xb9, 0xbd, 0x23, 0xee, 0x78, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, - 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xf3, 0xd9, 0xa7, 0xf9, 0x64, 0xc7, 0x4f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, - 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x7b, 0x7e, 0xba, 0x89, 0x0f, 0xff, 0xed, - 0x4a, 0xef, 0xbf, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, + 0x32, 0xdf, 0x54, 0xe5, 0x57, 0x77, 0xa4, 0xda, 0x0f, 0x86, 0x97, 0x13, 0x71, 0x4e, 0x97, 0x24, 0xf5, 0x54, 0x42, + 0x49, 0x08, 0x76, 0xe9, 0x03, 0x39, 0xb1, 0x02, 0xb2, 0x96, 0xb1, 0xfc, 0x56, 0x0f, 0x08, 0xfd, 0xa7, 0xdd, 0x7a, + 0xa1, 0xff, 0x34, 0xcd, 0x16, 0xea, 0xfa, 0xc3, 0xe4, 0xbe, 0xa3, 0xd7, 0x1f, 0x1c, 0xde, 0xa9, 0xab, 0x8a, 0xab, + 0x78, 0x58, 0x1b, 0x26, 0xb9, 0x51, 0x16, 0xee, 0x8a, 0x4d, 0xad, 0x96, 0xa7, 0xe3, 0x30, 0x02, 0x33, 0x82, 0x02, + 0x64, 0x5d, 0xb7, 0x11, 0x31, 0xac, 0xe4, 0x32, 0x21, 0x9f, 0x10, 0x90, 0x45, 0xa9, 0x71, 0x3e, 0x6e, 0x81, 0x4a, + 0x04, 0x83, 0xd3, 0xd0, 0x5a, 0x75, 0x93, 0x1f, 0x55, 0x36, 0x76, 0x07, 0xe4, 0x90, 0x64, 0xb2, 0xb8, 0x1b, 0xdd, + 0x8a, 0x65, 0x51, 0x8a, 0x9f, 0xb1, 0x1e, 0xae, 0xd9, 0xc2, 0x7d, 0x06, 0x84, 0xf6, 0x13, 0xa5, 0xbd, 0x89, 0x34, + 0x41, 0xf7, 0x1d, 0x5b, 0x01, 0xc8, 0x00, 0x8a, 0xba, 0xda, 0xad, 0xcf, 0xf9, 0x39, 0x92, 0x66, 0x38, 0x8c, 0x6e, + 0x9f, 0xde, 0x05, 0x77, 0x83, 0x4b, 0xd4, 0x4a, 0x5f, 0xb2, 0xb8, 0x85, 0x41, 0xb5, 0x37, 0x4b, 0x38, 0xa8, 0x99, + 0xb5, 0x36, 0x02, 0xc1, 0x64, 0x0f, 0x05, 0x15, 0x73, 0x05, 0xfb, 0xa0, 0x60, 0x2d, 0x79, 0x1d, 0x1c, 0x6e, 0xed, + 0xcb, 0x4a, 0x71, 0xf1, 0xfc, 0x22, 0x69, 0x5d, 0x58, 0xca, 0x8b, 0xe7, 0x0d, 0x18, 0x5c, 0x8e, 0xb0, 0xa9, 0x2a, + 0x7f, 0xb2, 0x01, 0xd0, 0xad, 0x90, 0x22, 0x5e, 0x94, 0xc2, 0xb6, 0x95, 0xcf, 0x9c, 0xb0, 0xc1, 0x86, 0x3d, 0xc0, + 0xbd, 0x32, 0x28, 0x19, 0x5c, 0x88, 0x71, 0xbb, 0xd9, 0x05, 0xb8, 0x82, 0xa1, 0x30, 0xb6, 0xe6, 0x6f, 0x32, 0x2f, + 0x52, 0x02, 0x6e, 0x86, 0x28, 0x5f, 0x1b, 0x38, 0x99, 0xf4, 0xe4, 0x5a, 0xb2, 0x18, 0xb0, 0xa0, 0xc1, 0x77, 0xd4, + 0xfa, 0x3b, 0x93, 0x7f, 0xe3, 0xe9, 0xa1, 0x1f, 0x7c, 0xce, 0xbc, 0xa5, 0xcf, 0xde, 0x54, 0x32, 0x5a, 0x93, 0x44, + 0x79, 0xf5, 0x70, 0x09, 0x72, 0xc3, 0x72, 0xf4, 0xc0, 0x96, 0x20, 0x4e, 0x2c, 0x47, 0x09, 0x65, 0x74, 0x85, 0x7b, + 0x95, 0xd9, 0x32, 0x11, 0x48, 0x71, 0x60, 0x29, 0xe5, 0xde, 0x62, 0x1d, 0x2c, 0x71, 0x7f, 0x22, 0xb9, 0x80, 0x92, + 0x07, 0x50, 0xae, 0x14, 0x10, 0xf0, 0xe9, 0x00, 0xca, 0x97, 0xf2, 0x22, 0xfc, 0x89, 0x13, 0x35, 0x58, 0x8e, 0x1e, + 0x1a, 0xf6, 0xa3, 0x17, 0x5a, 0xf6, 0x87, 0x3b, 0xad, 0x69, 0x58, 0xf1, 0x3b, 0x98, 0x16, 0x13, 0xb7, 0x2f, 0x57, + 0x76, 0x55, 0x7c, 0xb6, 0x52, 0x67, 0x37, 0x35, 0x24, 0x61, 0x5f, 0x91, 0x55, 0x80, 0x83, 0x55, 0x11, 0xf7, 0x2c, + 0xcb, 0x7d, 0x18, 0xfd, 0xb9, 0x49, 0x4b, 0x61, 0xa1, 0x4a, 0xfa, 0xfb, 0xa6, 0x14, 0x48, 0x65, 0xa2, 0x13, 0x2d, + 0x04, 0x57, 0x60, 0x10, 0xb8, 0x17, 0x79, 0x0d, 0x80, 0x31, 0xe0, 0x52, 0xa0, 0x2c, 0xdb, 0x12, 0x42, 0xaa, 0xfb, + 0x19, 0xa8, 0xed, 0xc4, 0x7d, 0x1a, 0x91, 0xb5, 0x10, 0x7d, 0x15, 0x8c, 0x99, 0xf3, 0x52, 0xba, 0xc5, 0xa6, 0xab, + 0xcd, 0xea, 0x06, 0x9d, 0x4b, 0x5b, 0x6e, 0x7e, 0xc2, 0x16, 0x6b, 0x05, 0xca, 0x26, 0x24, 0x6d, 0xe7, 0x3c, 0x47, + 0xd9, 0x84, 0x96, 0xf6, 0x9e, 0x7a, 0x54, 0xa8, 0x4e, 0xb6, 0x5e, 0xaa, 0xa6, 0x16, 0x61, 0xb5, 0xb8, 0xa8, 0xfc, + 0x00, 0x74, 0x53, 0x69, 0xf5, 0xb2, 0xae, 0xd1, 0x14, 0x6a, 0xb5, 0x70, 0xdc, 0x68, 0x67, 0xd3, 0x65, 0x7a, 0x87, + 0x38, 0xab, 0xd2, 0x0e, 0xfd, 0x7d, 0xa6, 0x5d, 0x2f, 0x3b, 0xfa, 0xcd, 0xb8, 0xba, 0xc0, 0x85, 0xd8, 0x80, 0xcf, + 0xb9, 0xbf, 0xbc, 0xde, 0xf3, 0xb8, 0xe7, 0x1f, 0x0e, 0xc8, 0x9e, 0xd4, 0xfe, 0x50, 0x7d, 0xec, 0x0a, 0x86, 0x2c, + 0x8c, 0x52, 0x7f, 0x91, 0xf2, 0xde, 0x13, 0x1c, 0xf7, 0xcf, 0x55, 0x8f, 0xfd, 0x98, 0xf1, 0x7d, 0x5d, 0x6c, 0xa2, + 0x84, 0xa2, 0x1a, 0x7a, 0xab, 0x62, 0x53, 0x89, 0xb8, 0x78, 0xc8, 0x7b, 0x0c, 0x93, 0x61, 0x2c, 0x64, 0x2a, 0xfc, + 0x29, 0x53, 0xc1, 0x23, 0x84, 0x12, 0x37, 0xeb, 0x1e, 0x69, 0x37, 0x21, 0x4e, 0xa9, 0x16, 0xa5, 0x4c, 0xc6, 0xbf, + 0xf5, 0x13, 0x28, 0xcf, 0x29, 0x5a, 0xa6, 0x1f, 0x15, 0x2e, 0xd3, 0x37, 0xeb, 0xe3, 0xd2, 0x33, 0x11, 0xea, 0xcc, + 0xc5, 0xa6, 0xd6, 0xe9, 0x18, 0x3b, 0xa5, 0x53, 0x1b, 0xf6, 0xa5, 0x52, 0x5c, 0x56, 0x14, 0xfe, 0x8d, 0x44, 0x56, + 0x3d, 0x23, 0x8e, 0xff, 0x2b, 0x6b, 0x9f, 0x61, 0x15, 0xf8, 0x65, 0x20, 0xef, 0x17, 0x00, 0x1f, 0xd7, 0x75, 0x99, + 0xde, 0x6e, 0x80, 0x36, 0x84, 0x86, 0xbf, 0xe7, 0x23, 0x03, 0xa6, 0xfb, 0x08, 0x67, 0x48, 0x0f, 0x75, 0xce, 0xe9, + 0xac, 0x4c, 0xe7, 0x5c, 0x85, 0xb5, 0x04, 0x7b, 0x39, 0x69, 0x72, 0xb9, 0x2e, 0x41, 0xcd, 0x04, 0x6e, 0x1f, 0xda, + 0x23, 0x42, 0xa8, 0x4d, 0x59, 0x4d, 0x2f, 0xa1, 0xe6, 0x9d, 0x9c, 0x76, 0x34, 0x29, 0xc1, 0x55, 0x43, 0x67, 0xe5, + 0xfa, 0xaf, 0xc3, 0xa1, 0x77, 0x9b, 0x15, 0xd1, 0x1f, 0x3d, 0xf4, 0x77, 0xdc, 0xde, 0xa4, 0x5f, 0x20, 0x5a, 0xc6, + 0xfa, 0x1b, 0x32, 0xa0, 0xe3, 0xc9, 0xf0, 0xb6, 0xd8, 0xf6, 0xd8, 0x17, 0xd4, 0x60, 0xe9, 0xeb, 0xc7, 0x1f, 0x20, + 0xa1, 0xea, 0xda, 0x17, 0x16, 0x4f, 0x98, 0xa7, 0x44, 0xdb, 0xc2, 0x87, 0xb0, 0xd0, 0x2f, 0x10, 0x19, 0x09, 0xe1, + 0xa6, 0xb2, 0x7b, 0x94, 0xb4, 0x0b, 0x7d, 0xe9, 0x6b, 0xd9, 0x57, 0xbe, 0x73, 0x01, 0xb0, 0xb2, 0xcf, 0x6d, 0xb8, + 0x27, 0xfd, 0x29, 0xd5, 0x87, 0xed, 0x6f, 0xc9, 0x02, 0x0a, 0x2d, 0xac, 0xa7, 0x72, 0x76, 0xae, 0x4b, 0x9e, 0x66, + 0xd3, 0xfd, 0x1a, 0xf6, 0xa8, 0x7b, 0xf4, 0x9a, 0x0a, 0xce, 0x2f, 0xcd, 0xe8, 0xfd, 0xd3, 0x50, 0xa8, 0x8e, 0x3a, + 0x77, 0x90, 0x75, 0x69, 0x5d, 0x72, 0x7e, 0xb3, 0x72, 0x47, 0x61, 0x7e, 0x1f, 0x82, 0x67, 0x58, 0xf7, 0xee, 0xe2, + 0xbc, 0xf7, 0x67, 0x6b, 0x8e, 0xfc, 0x98, 0xcd, 0x52, 0xc4, 0x22, 0x99, 0x83, 0xd5, 0x0f, 0xfd, 0x3c, 0xf6, 0xdb, + 0x20, 0x87, 0xe3, 0xa6, 0x01, 0x1d, 0x36, 0x64, 0xd6, 0xbe, 0x44, 0xe0, 0x54, 0x23, 0x48, 0x53, 0x13, 0xd4, 0x2c, + 0x0f, 0x91, 0xd8, 0x2e, 0x65, 0xdb, 0x20, 0xd7, 0x5d, 0x30, 0xcd, 0x91, 0xf6, 0x0c, 0xde, 0x37, 0x69, 0x92, 0x0a, + 0xcd, 0x22, 0x6d, 0x95, 0x8c, 0x7f, 0x47, 0xda, 0x4c, 0xc9, 0x1e, 0x5b, 0x03, 0xef, 0x25, 0x28, 0x27, 0xc3, 0x14, + 0xc3, 0x77, 0x7c, 0xbd, 0xf3, 0x98, 0x7b, 0xce, 0x31, 0xdb, 0xa4, 0xec, 0x08, 0x26, 0xc9, 0xc6, 0x37, 0x14, 0x6f, + 0xf8, 0xfe, 0xb6, 0x12, 0x25, 0x80, 0x5e, 0x16, 0xfc, 0x85, 0xb4, 0xb9, 0x42, 0xb7, 0xbb, 0x77, 0x94, 0xc2, 0x2f, + 0x79, 0x79, 0x38, 0x6c, 0x53, 0x2f, 0x84, 0xce, 0x17, 0xf1, 0x3b, 0x30, 0x87, 0x31, 0xc4, 0x66, 0x04, 0x08, 0x73, + 0x7c, 0x40, 0x1d, 0xac, 0x1f, 0x01, 0x68, 0x9c, 0x40, 0x01, 0x46, 0x5f, 0x6d, 0x0b, 0xfa, 0x96, 0x17, 0x17, 0x11, + 0xa2, 0x46, 0x01, 0x26, 0x4a, 0x9a, 0xc5, 0x30, 0x1c, 0xe8, 0xfc, 0xbe, 0xb9, 0xad, 0x4b, 0x81, 0x43, 0xef, 0x58, + 0x86, 0xff, 0xfe, 0x3f, 0xd6, 0x96, 0x56, 0x95, 0xed, 0xd6, 0x38, 0xcd, 0xfc, 0x6f, 0xb7, 0x85, 0xbe, 0xff, 0x4a, + 0x28, 0x9e, 0x77, 0xbc, 0x6e, 0xbf, 0x83, 0xe8, 0x7d, 0xdd, 0xca, 0xbb, 0x52, 0xbb, 0x61, 0xa6, 0xfc, 0x21, 0xcd, + 0xe3, 0xe2, 0x61, 0x14, 0xb7, 0x8e, 0xbc, 0x49, 0x7a, 0xce, 0xf9, 0xbb, 0xaa, 0xdf, 0xf7, 0xde, 0x01, 0x19, 0xef, + 0x2b, 0x61, 0x1c, 0x31, 0x89, 0x83, 0x6f, 0x2f, 0x46, 0xd1, 0xa6, 0x84, 0x0d, 0xb9, 0x7d, 0x5a, 0x82, 0x66, 0xa6, + 0xdf, 0x47, 0x89, 0xd2, 0x9a, 0xef, 0x7f, 0x93, 0xf3, 0xfd, 0x95, 0x90, 0x37, 0x2b, 0xf9, 0xe1, 0xa3, 0x15, 0x06, + 0xbe, 0xc7, 0xe9, 0x17, 0xd1, 0x63, 0x77, 0xa5, 0x0f, 0xdf, 0x95, 0x96, 0x3e, 0xab, 0xa8, 0x7f, 0xa0, 0xa2, 0xe6, + 0x95, 0x18, 0x11, 0xf1, 0x20, 0x68, 0x67, 0xdb, 0xa5, 0x76, 0x2d, 0x41, 0xbb, 0x60, 0x53, 0xd8, 0xbf, 0x1f, 0x1d, + 0xf2, 0x7e, 0xff, 0x63, 0xee, 0xb5, 0x78, 0xdd, 0x75, 0x68, 0xca, 0x4f, 0x85, 0x87, 0x10, 0xc0, 0x5a, 0x06, 0xca, + 0x38, 0xc2, 0xa4, 0x8b, 0xbc, 0x46, 0xd9, 0x74, 0x22, 0xf0, 0x31, 0xcb, 0xae, 0x9c, 0x64, 0x1a, 0x60, 0x46, 0x35, + 0x85, 0x99, 0x00, 0x23, 0xf5, 0x11, 0xeb, 0xa6, 0xa7, 0x55, 0x68, 0xf9, 0x1a, 0x82, 0x75, 0x91, 0x65, 0x1c, 0xc5, + 0x4c, 0x00, 0xb0, 0xf9, 0x08, 0xf2, 0x15, 0x5d, 0x1d, 0x92, 0x56, 0xaa, 0xbc, 0x5f, 0x67, 0x44, 0x46, 0x93, 0x10, + 0xcd, 0x6f, 0xe1, 0x81, 0x7d, 0xdb, 0xcc, 0xa8, 0x52, 0xcf, 0xa8, 0xca, 0x67, 0x38, 0x2c, 0x85, 0x63, 0xc4, 0xff, + 0x7b, 0xaa, 0x7a, 0x44, 0xa0, 0x57, 0x65, 0x5a, 0x45, 0x45, 0x9e, 0x8b, 0x08, 0x11, 0xaa, 0xa5, 0x73, 0x38, 0xf4, + 0x63, 0xbf, 0x8f, 0x03, 0x61, 0x5e, 0xfc, 0xe9, 0xb1, 0xae, 0xfc, 0xa9, 0xc0, 0xb5, 0x92, 0x02, 0xa7, 0xa2, 0x46, + 0x88, 0x10, 0xde, 0x9f, 0xc0, 0xb3, 0x9a, 0xfa, 0x7e, 0x63, 0x99, 0xe8, 0xfe, 0x99, 0x01, 0xe5, 0x0f, 0xc8, 0xd7, + 0x95, 0x14, 0x67, 0xea, 0xe4, 0x31, 0x71, 0xc6, 0x01, 0x88, 0xf9, 0xba, 0x44, 0xa3, 0xb1, 0xff, 0x01, 0x09, 0x86, + 0xea, 0x07, 0x3b, 0xdd, 0xd4, 0xfb, 0x57, 0x26, 0x71, 0x14, 0x7d, 0xda, 0x26, 0x8f, 0x25, 0x4b, 0xa3, 0x85, 0xa3, + 0xf7, 0x88, 0x61, 0x1c, 0x4e, 0xe7, 0x63, 0x92, 0x6d, 0x4c, 0x56, 0x01, 0xa4, 0x93, 0x99, 0x3a, 0xa6, 0xd4, 0xd1, + 0x38, 0xd7, 0x0b, 0xaa, 0xd0, 0x63, 0x5d, 0xf2, 0x1c, 0xac, 0x27, 0x3f, 0x78, 0xa5, 0x3f, 0x15, 0x72, 0x0e, 0x1b, + 0x89, 0xa0, 0xf0, 0x03, 0x5c, 0x0d, 0x56, 0x0a, 0x18, 0x4c, 0x7d, 0x0b, 0x5f, 0x13, 0xcf, 0x51, 0xf0, 0x28, 0xec, + 0x62, 0x6c, 0xad, 0x7c, 0xe7, 0x93, 0x82, 0x72, 0xcf, 0x8a, 0x39, 0xaf, 0x80, 0x73, 0x19, 0x14, 0xc2, 0x74, 0x3c, + 0xcb, 0xff, 0x99, 0xe4, 0xf5, 0xc4, 0x86, 0x00, 0x19, 0xfc, 0x29, 0x71, 0x5a, 0xba, 0x43, 0x77, 0x1e, 0x7a, 0x16, + 0x71, 0xd8, 0xe8, 0xc9, 0xba, 0x2c, 0xb6, 0x29, 0xea, 0x25, 0xcc, 0x0f, 0xe4, 0xe7, 0x2d, 0xf9, 0x3e, 0x44, 0xf1, + 0x36, 0xf8, 0x35, 0x63, 0xb1, 0xc0, 0xbf, 0xfe, 0x9e, 0x31, 0x9a, 0x68, 0xc1, 0xbf, 0xb3, 0x06, 0x89, 0x8a, 0x7f, + 0xca, 0x26, 0x00, 0xeb, 0xc8, 0xd5, 0x87, 0x4f, 0x89, 0xf1, 0xd6, 0x6c, 0x78, 0xe4, 0x9b, 0x15, 0xe8, 0xd4, 0xe7, + 0xee, 0xca, 0xf6, 0x54, 0x35, 0xfe, 0x9e, 0xea, 0x6a, 0xa4, 0xaa, 0x1a, 0x7f, 0x4f, 0xa9, 0x1a, 0xbf, 0x65, 0x14, + 0xbf, 0x53, 0xf9, 0x0c, 0x99, 0x93, 0x4d, 0x4c, 0xd2, 0xe9, 0x7b, 0xc3, 0x89, 0x5d, 0xf6, 0xab, 0xb7, 0x89, 0xcc, + 0x44, 0x0a, 0xb9, 0x37, 0x00, 0x6d, 0xbf, 0xcb, 0x0d, 0xa7, 0xc4, 0xf9, 0xb9, 0x87, 0x2b, 0x36, 0xad, 0x5e, 0xd1, + 0x82, 0x05, 0x36, 0x2f, 0xb3, 0x3c, 0x45, 0x02, 0xdb, 0xa6, 0xcc, 0xfa, 0x73, 0xee, 0x01, 0x04, 0x33, 0xa9, 0x09, + 0x00, 0x69, 0x21, 0x2a, 0x85, 0xc8, 0x5f, 0xe1, 0xac, 0x3e, 0xe7, 0xbd, 0x4d, 0x1e, 0x13, 0x69, 0x75, 0xaf, 0xdf, + 0x4f, 0xcf, 0xd2, 0x9c, 0x82, 0x1a, 0x8e, 0xb3, 0x4e, 0xbf, 0xcf, 0x82, 0x3a, 0x91, 0xab, 0xf4, 0x1f, 0x6e, 0x90, + 0x97, 0xf1, 0x7d, 0xdd, 0xf6, 0xfc, 0x89, 0xfa, 0x7b, 0x67, 0xfd, 0x6d, 0x81, 0xe0, 0x4e, 0x8e, 0xfd, 0x64, 0x55, + 0xca, 0x13, 0xe3, 0xd2, 0xde, 0xf3, 0x9b, 0xba, 0x28, 0xb2, 0x3a, 0x5d, 0x7f, 0x90, 0x7a, 0x1a, 0xdd, 0x17, 0x7b, + 0x30, 0x06, 0xef, 0x00, 0xf0, 0x4c, 0x87, 0x06, 0x48, 0xdf, 0x33, 0xf2, 0x70, 0x9f, 0x5b, 0xf2, 0x93, 0xca, 0xda, + 0x24, 0x61, 0x45, 0xb1, 0x19, 0xc6, 0x08, 0x25, 0xe3, 0x34, 0xb6, 0x7e, 0xbf, 0xaf, 0xfe, 0xde, 0x61, 0x14, 0x15, + 0x15, 0x77, 0x8c, 0x46, 0x65, 0x55, 0x8f, 0xb6, 0x83, 0xc3, 0xe1, 0x3c, 0xb7, 0x71, 0xb4, 0xf5, 0x0a, 0xd8, 0x5b, + 0xa1, 0x52, 0xf6, 0x4a, 0x84, 0xe5, 0x87, 0x2b, 0xbf, 0xdf, 0x87, 0x7f, 0x65, 0xa4, 0x85, 0xe7, 0x4f, 0xf1, 0xd7, + 0xa2, 0x2e, 0x30, 0x3c, 0x83, 0xd6, 0x68, 0x05, 0xc1, 0x04, 0xff, 0xe8, 0x40, 0xbd, 0xb4, 0xd2, 0x3e, 0x82, 0x6e, + 0x05, 0x7a, 0x50, 0x0f, 0x7d, 0x9a, 0xb4, 0x2f, 0x24, 0xea, 0xf6, 0x56, 0xa7, 0xd1, 0x1f, 0x15, 0x5c, 0x4e, 0x61, + 0x72, 0xb8, 0xa1, 0x4f, 0xab, 0x70, 0xfb, 0x09, 0x9e, 0xfe, 0x0c, 0x94, 0x5b, 0x87, 0x43, 0x0e, 0x62, 0x0b, 0xb8, + 0x79, 0xac, 0xc2, 0xcf, 0x45, 0x29, 0x23, 0xea, 0xe3, 0x69, 0x01, 0xda, 0xbb, 0x00, 0x1d, 0xb0, 0x34, 0x88, 0x57, + 0x48, 0x9e, 0xb3, 0x11, 0xc0, 0xb2, 0x03, 0xcb, 0x59, 0xc6, 0x29, 0xcc, 0xb3, 0x7c, 0xa1, 0x56, 0xda, 0x59, 0x99, + 0x78, 0x35, 0xcb, 0xc0, 0x59, 0xe0, 0xa2, 0xf2, 0x59, 0xa6, 0x55, 0x4f, 0x55, 0x82, 0x3e, 0xaf, 0xe4, 0x04, 0x57, + 0x82, 0x93, 0x0d, 0xc8, 0x2f, 0x40, 0x92, 0xa6, 0x94, 0x35, 0xe5, 0x8b, 0x4b, 0xba, 0x21, 0xa3, 0xe7, 0xbc, 0xe7, + 0x45, 0xc3, 0xd0, 0xbf, 0xf0, 0x4a, 0x08, 0xdf, 0xc4, 0x6d, 0x1b, 0xa5, 0xb0, 0xbf, 0x09, 0x2c, 0x3e, 0x61, 0x3f, + 0x78, 0x4b, 0x7f, 0x3a, 0x0e, 0xc2, 0x21, 0x72, 0x43, 0xc5, 0x1c, 0xd8, 0xd3, 0x80, 0xc5, 0x26, 0xbe, 0xda, 0x4c, + 0xe2, 0xc1, 0xc0, 0xd7, 0x19, 0x8b, 0x59, 0x0c, 0x34, 0xc8, 0xf1, 0xe0, 0x72, 0xae, 0x4f, 0x08, 0xfd, 0x30, 0xa2, + 0x72, 0x54, 0xa0, 0x73, 0x10, 0x0d, 0x96, 0x80, 0xa7, 0xde, 0xca, 0x06, 0x49, 0xc6, 0x24, 0x93, 0xb8, 0xd6, 0x24, + 0xd5, 0xe1, 0x84, 0xd6, 0x81, 0x8e, 0xab, 0x0b, 0xe8, 0x7c, 0x5c, 0xf7, 0x3e, 0x5e, 0x0d, 0x17, 0x54, 0xfa, 0x85, + 0x18, 0x78, 0xf5, 0x74, 0x1c, 0x5c, 0xd2, 0xad, 0x70, 0xb1, 0x0a, 0xb7, 0x3f, 0xcb, 0x07, 0x8e, 0x3b, 0x2a, 0x69, + 0x08, 0x0c, 0xde, 0x1e, 0xba, 0x9b, 0x19, 0x1a, 0xea, 0xa4, 0x7d, 0x18, 0x87, 0x72, 0x88, 0x55, 0x2b, 0x2e, 0xa4, + 0x37, 0x82, 0x6f, 0x17, 0x8a, 0xb1, 0x6c, 0xec, 0xd2, 0x50, 0x14, 0xfe, 0x0a, 0x60, 0x87, 0xda, 0x5f, 0xa9, 0xe4, + 0x63, 0x64, 0x54, 0xd3, 0x40, 0xc7, 0x00, 0x2c, 0x59, 0x9a, 0x48, 0xaa, 0x48, 0x23, 0xf1, 0x47, 0x66, 0xac, 0xa3, + 0xa6, 0xeb, 0x0b, 0xa6, 0xaa, 0x45, 0xd2, 0xed, 0x4c, 0x62, 0x39, 0x91, 0xa4, 0xb6, 0xfb, 0x88, 0x18, 0x0c, 0x7c, + 0xb0, 0x11, 0xd3, 0x4c, 0x84, 0x23, 0x1e, 0x95, 0xc8, 0xa2, 0xcb, 0x6f, 0xa3, 0x4c, 0xda, 0xbe, 0xac, 0xc8, 0x16, + 0x04, 0xd3, 0x93, 0xe8, 0x83, 0x24, 0xe5, 0x54, 0x24, 0xd2, 0x8c, 0x10, 0xe0, 0xc7, 0x93, 0xf2, 0x4a, 0x7f, 0x0e, + 0x9a, 0x56, 0x82, 0x97, 0x0c, 0x92, 0x47, 0xe2, 0x67, 0x52, 0x30, 0x8b, 0xb1, 0x6a, 0x30, 0xc0, 0x72, 0xaa, 0x67, + 0x8e, 0x49, 0xfa, 0x6f, 0x9d, 0x4e, 0xd8, 0x2f, 0xbd, 0xdc, 0xd6, 0xf2, 0xa6, 0xb9, 0xf7, 0xd2, 0xab, 0x58, 0xaa, + 0x61, 0x19, 0xf4, 0x5f, 0x13, 0xed, 0x82, 0xad, 0x2d, 0x63, 0xc2, 0xaa, 0x1f, 0x40, 0xda, 0x23, 0x5d, 0x5e, 0x35, + 0xcc, 0x99, 0xe0, 0xd1, 0x85, 0x35, 0x0f, 0xa2, 0x0b, 0xe1, 0x23, 0x97, 0xdd, 0x24, 0xb9, 0x1a, 0x4f, 0xfc, 0x70, + 0x30, 0x50, 0x00, 0xb4, 0xb4, 0x4e, 0x8a, 0x41, 0xf8, 0x4c, 0xc8, 0x81, 0x34, 0x3a, 0xaa, 0x02, 0x2c, 0x96, 0xd9, + 0x55, 0x39, 0xc9, 0x06, 0x03, 0x1f, 0xc4, 0xc6, 0xc4, 0x6e, 0x68, 0x36, 0xf7, 0xd9, 0x89, 0x82, 0xac, 0x36, 0x87, + 0xad, 0x99, 0x6e, 0x81, 0x01, 0xc0, 0x20, 0x22, 0x58, 0xee, 0x73, 0x23, 0x1f, 0x51, 0xa7, 0xa7, 0x30, 0x02, 0x82, + 0x5f, 0x4e, 0x04, 0x22, 0x17, 0x09, 0xd4, 0x03, 0xcc, 0x04, 0x98, 0x51, 0xc5, 0xf0, 0x12, 0xd8, 0xc5, 0x73, 0xf3, + 0x8a, 0x41, 0xff, 0xa2, 0x49, 0x96, 0x68, 0x2a, 0x71, 0x34, 0x46, 0x4e, 0xa5, 0x31, 0x32, 0x20, 0x76, 0x71, 0xfc, + 0x7b, 0x4a, 0x8f, 0x82, 0x94, 0x7d, 0xae, 0x0c, 0x71, 0x38, 0x8a, 0xaf, 0x60, 0xd5, 0x38, 0x1c, 0x6a, 0xf3, 0x7a, + 0x3a, 0xab, 0xe7, 0x03, 0x11, 0xc0, 0x7f, 0x43, 0xc1, 0x7e, 0xd1, 0x54, 0xe4, 0x06, 0xa9, 0xf3, 0x70, 0x48, 0x41, + 0x3e, 0xd5, 0x4d, 0xfe, 0xbe, 0x72, 0xf7, 0xd3, 0xd9, 0xdc, 0x9a, 0xa3, 0x17, 0x35, 0xae, 0x5b, 0xab, 0x1b, 0x0a, + 0x89, 0xd6, 0x34, 0x29, 0xae, 0xaa, 0x49, 0x31, 0xe0, 0xb9, 0x2f, 0x54, 0x17, 0x5b, 0x23, 0x58, 0xf8, 0x73, 0x0b, + 0x84, 0xc9, 0xb8, 0x17, 0x1f, 0x2d, 0xe4, 0x94, 0x76, 0x6d, 0xb5, 0xdb, 0x56, 0x36, 0xa4, 0x68, 0x3e, 0xbc, 0x84, + 0x5d, 0x3a, 0x45, 0xb4, 0xed, 0x92, 0xe0, 0x0b, 0xd0, 0xb2, 0xba, 0x10, 0x79, 0x4c, 0xbf, 0x42, 0x7e, 0x29, 0x86, + 0x7f, 0x95, 0xee, 0xcd, 0xa9, 0x0d, 0x72, 0x00, 0xdb, 0xbd, 0x87, 0xdb, 0x31, 0x7a, 0x20, 0x83, 0x37, 0x42, 0xce, + 0x39, 0xbf, 0x9c, 0x5a, 0x33, 0x26, 0x1a, 0x16, 0xac, 0x1c, 0x46, 0x7e, 0x80, 0x8c, 0x97, 0x53, 0x60, 0x65, 0x3f, + 0x2a, 0xe2, 0xd2, 0x1f, 0x46, 0xfe, 0xc5, 0xf3, 0x20, 0xe3, 0x5e, 0x34, 0xec, 0xf8, 0x02, 0xec, 0xd5, 0x17, 0xcf, + 0x59, 0x34, 0xe0, 0xd5, 0x55, 0x3d, 0xcd, 0x82, 0x61, 0xc6, 0xa2, 0xab, 0x62, 0x08, 0x3e, 0xb4, 0x2f, 0xca, 0x41, + 0xe8, 0xfb, 0x66, 0xe7, 0xd0, 0xdd, 0x90, 0xc8, 0x23, 0xec, 0x47, 0x70, 0xdb, 0xd5, 0x12, 0x33, 0x98, 0x6c, 0xee, + 0x22, 0x66, 0xb0, 0xe5, 0x2f, 0x9e, 0x1b, 0x2e, 0xa1, 0xea, 0x85, 0xd4, 0x6c, 0x14, 0x68, 0x4e, 0xae, 0xd0, 0x9c, + 0xac, 0x84, 0x5a, 0xf2, 0x49, 0x85, 0x13, 0x76, 0x3e, 0xc9, 0x95, 0xdd, 0x68, 0x8c, 0x81, 0x8b, 0xf6, 0xdc, 0x16, + 0x46, 0x66, 0x3a, 0x4b, 0xd1, 0x80, 0x85, 0x67, 0xe2, 0x94, 0xc6, 0x80, 0xf6, 0xe5, 0xc0, 0xd2, 0x86, 0xfc, 0x28, + 0x67, 0x06, 0xda, 0x86, 0x94, 0x46, 0xcd, 0xc0, 0x9f, 0xa9, 0x09, 0xf3, 0x2b, 0x58, 0x89, 0x20, 0xaa, 0x0b, 0x30, + 0x49, 0x72, 0x32, 0x1a, 0x29, 0x2b, 0x91, 0x9c, 0x03, 0xde, 0x47, 0xf0, 0x64, 0x11, 0xdb, 0xda, 0x9f, 0xd2, 0xff, + 0xea, 0xf0, 0xb9, 0xf4, 0x9f, 0x09, 0x60, 0x21, 0x97, 0x06, 0x91, 0x81, 0xc2, 0x21, 0x35, 0x95, 0x88, 0x13, 0xc7, + 0x33, 0xf0, 0x0d, 0x5c, 0xa0, 0x29, 0xa0, 0x3f, 0xa8, 0x19, 0x45, 0x64, 0xe1, 0xaf, 0x9e, 0xdd, 0xd4, 0x8d, 0x9e, + 0x67, 0xce, 0x6b, 0xd0, 0xcc, 0x40, 0x48, 0x8f, 0x53, 0xf5, 0x36, 0x24, 0x3a, 0x2f, 0x2f, 0xf5, 0xcb, 0x84, 0x48, + 0x56, 0x44, 0x9e, 0xbe, 0xcf, 0xc1, 0x3c, 0xa2, 0x08, 0x1d, 0x5c, 0x99, 0x87, 0xc3, 0xb9, 0xa0, 0xf0, 0x1d, 0xe5, + 0xf9, 0x80, 0xd3, 0x2c, 0x4a, 0x40, 0x1b, 0xc8, 0x72, 0x53, 0xe6, 0x3a, 0x69, 0x99, 0xba, 0xf7, 0x60, 0x25, 0xa8, + 0xd0, 0xcd, 0x29, 0x28, 0x94, 0x91, 0xa0, 0x94, 0x56, 0x83, 0x50, 0xaa, 0xc3, 0x22, 0x88, 0x1c, 0xb2, 0x10, 0x70, + 0x33, 0x15, 0x8d, 0x96, 0x34, 0x3c, 0xc2, 0xb9, 0x81, 0x42, 0x00, 0x12, 0x7b, 0xaa, 0x28, 0xe3, 0x72, 0x08, 0xf8, + 0x28, 0xe1, 0x10, 0x67, 0x4d, 0xda, 0xf2, 0x1c, 0xc4, 0xb1, 0x5c, 0xf2, 0x75, 0x85, 0x60, 0x10, 0xa1, 0xcf, 0x90, + 0x3f, 0x59, 0xce, 0xbf, 0x5b, 0x87, 0x69, 0x47, 0xf8, 0xb0, 0xab, 0x2d, 0xb8, 0x98, 0xdd, 0xce, 0x27, 0x10, 0xdf, + 0x72, 0x3b, 0x3f, 0xc6, 0x10, 0x59, 0xf8, 0x83, 0xbb, 0xa1, 0xe4, 0x8a, 0x42, 0x97, 0xf5, 0x88, 0x14, 0xd9, 0xd3, + 0x35, 0x47, 0x10, 0x1c, 0x68, 0xd5, 0x20, 0x43, 0x23, 0xf1, 0xc5, 0x73, 0xc8, 0x1a, 0xac, 0xf9, 0xe7, 0x8a, 0x9c, + 0xd5, 0xfd, 0xc9, 0x06, 0xaa, 0x49, 0x26, 0x6b, 0x45, 0xe5, 0xfc, 0xf5, 0xaa, 0x2c, 0x4f, 0x56, 0x65, 0xb8, 0x1a, + 0x74, 0x55, 0x65, 0xc9, 0x91, 0xda, 0x00, 0xad, 0xe9, 0x0a, 0x31, 0x14, 0xb2, 0x06, 0x4b, 0xab, 0x2a, 0x6b, 0xea, + 0x13, 0x08, 0xf4, 0x01, 0x96, 0x51, 0xb3, 0x9f, 0x0e, 0xff, 0x15, 0xfc, 0x4b, 0x85, 0x2c, 0xd5, 0x69, 0x9d, 0x89, + 0x5f, 0x83, 0x25, 0xc3, 0x3f, 0x7e, 0x0b, 0xd6, 0x80, 0x25, 0x40, 0x96, 0xbb, 0x8d, 0x8d, 0xd6, 0x2b, 0xaf, 0x10, + 0x5f, 0x6a, 0x7d, 0xd1, 0x6f, 0xdd, 0x26, 0x6a, 0x05, 0x18, 0xa1, 0xd0, 0x22, 0xc0, 0x56, 0x0f, 0xdc, 0x53, 0xf0, + 0x03, 0x31, 0x9c, 0x6b, 0xd2, 0x9a, 0x3a, 0xe1, 0x75, 0x36, 0x8e, 0x44, 0x54, 0x6f, 0xe1, 0xe2, 0x5e, 0x6f, 0x2d, + 0xfe, 0x46, 0x05, 0x02, 0x20, 0x8b, 0x29, 0xd6, 0xce, 0x1b, 0xd2, 0x2b, 0xc3, 0x4e, 0x42, 0xef, 0x0d, 0x3b, 0x81, + 0xbc, 0x38, 0xec, 0x14, 0xba, 0x44, 0xdb, 0x29, 0x52, 0x13, 0x6d, 0x27, 0x2d, 0x56, 0x61, 0x09, 0xc1, 0xaf, 0xda, + 0x5b, 0x47, 0xd9, 0xbe, 0xc8, 0x12, 0xa6, 0x2d, 0x60, 0x94, 0x5b, 0xf5, 0x99, 0x53, 0xc4, 0x4a, 0xd9, 0x3b, 0x9d, + 0x54, 0xb9, 0x8b, 0x7c, 0x6a, 0x35, 0x45, 0x26, 0x7f, 0x7f, 0xdc, 0x22, 0xf9, 0xe4, 0xe7, 0x76, 0xc3, 0x64, 0xfa, + 0xc7, 0xa3, 0x2f, 0xa0, 0x2b, 0xb2, 0xd3, 0x27, 0x10, 0x90, 0xa9, 0xa0, 0x5a, 0xdd, 0x2a, 0xa6, 0x79, 0xbb, 0xca, + 0x6e, 0x2f, 0x94, 0x18, 0x4e, 0x67, 0x27, 0xe1, 0xd1, 0x66, 0xc8, 0xc0, 0x21, 0x08, 0x14, 0x42, 0x45, 0x31, 0x3c, + 0x02, 0xb5, 0x46, 0xf2, 0x01, 0x7e, 0xb4, 0x3b, 0x15, 0x44, 0x6a, 0x37, 0x15, 0x37, 0x4e, 0x6e, 0xba, 0x5e, 0x0a, + 0xd4, 0x3a, 0x25, 0x2b, 0x80, 0x12, 0xa2, 0xfe, 0x24, 0xb6, 0xf5, 0x2b, 0xb8, 0x62, 0xf3, 0x7d, 0xa3, 0xe8, 0xc9, + 0xf5, 0x29, 0xea, 0x56, 0x5c, 0x9d, 0xa6, 0xad, 0xe6, 0xd8, 0x71, 0x86, 0x1c, 0x3c, 0x2b, 0x08, 0xb6, 0xa3, 0x12, + 0xe5, 0x75, 0xbb, 0xe9, 0x98, 0xd8, 0xea, 0x9f, 0x45, 0xb5, 0xb9, 0x83, 0x8a, 0x88, 0xf8, 0x28, 0xbb, 0x79, 0xd2, + 0x7e, 0x07, 0x7b, 0xac, 0xd5, 0x20, 0xb2, 0xcf, 0xe0, 0x2a, 0xd7, 0x69, 0x91, 0xdb, 0x32, 0x38, 0xff, 0xf0, 0x6a, + 0x57, 0x61, 0x93, 0x63, 0x5d, 0x5d, 0xcd, 0x54, 0x27, 0x15, 0x1b, 0x18, 0x6b, 0x5a, 0x4b, 0x35, 0x8f, 0x21, 0xe9, + 0xae, 0x2c, 0xce, 0xaa, 0xa4, 0x9b, 0x9e, 0x1b, 0x67, 0x0a, 0x31, 0x70, 0xb6, 0x1a, 0x2d, 0x67, 0x18, 0xa2, 0xeb, + 0xc3, 0x2c, 0xf1, 0x5b, 0x3d, 0xe5, 0x3e, 0x0f, 0xb7, 0x7e, 0x57, 0x2f, 0x38, 0x99, 0xec, 0x27, 0xc7, 0xb9, 0xdb, + 0x45, 0xda, 0x4f, 0x7c, 0x1b, 0xe6, 0x5f, 0xdf, 0x20, 0xee, 0x44, 0xfd, 0xcf, 0x0a, 0x80, 0x06, 0x37, 0x79, 0x2c, + 0x51, 0xea, 0xf7, 0xaa, 0xfa, 0x41, 0xcd, 0x54, 0x4d, 0x03, 0xc1, 0x9c, 0x4a, 0x01, 0x7f, 0xb8, 0x5d, 0xb8, 0xe2, + 0x11, 0x37, 0x2c, 0x8c, 0x7f, 0x7a, 0x35, 0x3b, 0x15, 0x54, 0x06, 0x6e, 0xc6, 0x7f, 0x7a, 0x82, 0x9d, 0xc2, 0x5a, + 0x01, 0x59, 0xe1, 0x4f, 0x2f, 0x7f, 0xe4, 0xfd, 0x8a, 0xff, 0xe9, 0x55, 0x8f, 0xbc, 0x8f, 0x38, 0x2f, 0x7f, 0x22, + 0xa9, 0x13, 0xa2, 0xba, 0xfc, 0x49, 0x98, 0x62, 0xab, 0x34, 0x7f, 0x4d, 0x0a, 0x9f, 0xe0, 0x33, 0xf0, 0x1d, 0xae, + 0xc2, 0xad, 0xf9, 0x0d, 0x1e, 0x3b, 0x16, 0xdb, 0x2e, 0xf5, 0x05, 0x94, 0x23, 0xb0, 0x88, 0xdc, 0x7e, 0xbb, 0xb2, + 0x5f, 0x2d, 0x8c, 0x32, 0xc6, 0xee, 0x4b, 0x56, 0xa2, 0x74, 0xd6, 0xef, 0x17, 0x52, 0x30, 0xb2, 0x0b, 0x6b, 0xb4, + 0x47, 0xa9, 0x7a, 0xf5, 0x3a, 0xac, 0xa3, 0x24, 0xcd, 0xef, 0x64, 0xf4, 0x91, 0x0c, 0x3b, 0xd2, 0x57, 0x52, 0xa2, + 0xbd, 0x56, 0x61, 0x39, 0x9a, 0xfd, 0xba, 0xe4, 0x40, 0x79, 0xdd, 0x0a, 0xca, 0x57, 0x4d, 0x00, 0xbd, 0x52, 0xed, + 0x33, 0xd0, 0x0a, 0x0a, 0x4b, 0xe5, 0xc1, 0x4a, 0x9c, 0x8b, 0x3e, 0x2b, 0x0e, 0x07, 0x75, 0x31, 0x24, 0x14, 0xa8, + 0x12, 0x27, 0xa1, 0x11, 0xcf, 0xe1, 0x42, 0x28, 0x5e, 0xe4, 0x18, 0x5b, 0x91, 0x03, 0x07, 0x32, 0xfc, 0x80, 0xc0, + 0x7b, 0xd9, 0xbf, 0x82, 0xc1, 0x30, 0xc1, 0x8d, 0x8c, 0x3a, 0x39, 0x67, 0x7f, 0x62, 0x60, 0x06, 0xf5, 0xa4, 0x76, + 0x9f, 0xdd, 0xab, 0xc0, 0x5e, 0x38, 0x03, 0xda, 0xbb, 0x31, 0xfa, 0x59, 0x15, 0x6b, 0x27, 0xfd, 0x53, 0xb1, 0x86, + 0x64, 0x3a, 0x2c, 0x8e, 0xb6, 0x69, 0x78, 0x24, 0x4f, 0x8e, 0xe3, 0x4d, 0xff, 0x70, 0x18, 0xe3, 0xc7, 0x51, 0x7e, + 0x6d, 0x01, 0xaf, 0xe2, 0x16, 0xd2, 0x58, 0xa4, 0xe8, 0x1d, 0x88, 0x39, 0x14, 0xbd, 0x64, 0xbf, 0x65, 0xbc, 0x9c, + 0x08, 0x4a, 0x49, 0x62, 0xc3, 0x3b, 0xd2, 0xd3, 0xb4, 0x1e, 0x6d, 0x65, 0xc0, 0x7e, 0x3d, 0xda, 0xd1, 0x5f, 0xa0, + 0x78, 0xb4, 0xf0, 0x97, 0xf4, 0x77, 0x71, 0x37, 0xf7, 0x9c, 0x6f, 0x1a, 0xdf, 0x11, 0x17, 0x28, 0xd6, 0xec, 0xfe, + 0x9a, 0x96, 0xce, 0x3a, 0x10, 0x1c, 0xf0, 0x16, 0xbb, 0x68, 0xdf, 0x6f, 0x5c, 0xa7, 0xa7, 0xfd, 0xb7, 0x6e, 0x8d, + 0xf2, 0xbd, 0x7f, 0x4a, 0x94, 0x83, 0xfd, 0x6b, 0x17, 0xcd, 0xdf, 0x7e, 0xca, 0x90, 0x54, 0x68, 0x6e, 0xb0, 0x9d, + 0x6c, 0x11, 0xd6, 0xc6, 0x38, 0xa8, 0xd8, 0x5d, 0x19, 0x46, 0xc0, 0xa0, 0x8e, 0xfd, 0x8f, 0x3e, 0x9b, 0x36, 0x64, + 0x1f, 0x00, 0x2a, 0x57, 0x21, 0x60, 0x0f, 0xc0, 0x89, 0x46, 0xb8, 0x01, 0x6e, 0x35, 0x5a, 0xd2, 0x41, 0xdd, 0x16, + 0x0c, 0x44, 0x4b, 0xd8, 0xc8, 0xdb, 0xae, 0x4e, 0x5f, 0x11, 0x3e, 0xd4, 0x4e, 0x4a, 0x87, 0xf2, 0x57, 0xcf, 0xd9, + 0xff, 0xec, 0xb0, 0xa6, 0xa6, 0xdc, 0x00, 0x66, 0xce, 0x4a, 0xe4, 0x15, 0x42, 0xa7, 0xc8, 0xef, 0x55, 0x5d, 0x89, + 0xe1, 0xb2, 0x16, 0x65, 0x67, 0x76, 0xeb, 0x44, 0xef, 0x9c, 0x82, 0x5a, 0x2a, 0x1b, 0xe4, 0x24, 0xd5, 0xe6, 0x23, + 0x6b, 0x05, 0x25, 0xea, 0x1a, 0x05, 0x8e, 0x4f, 0xb9, 0x76, 0xff, 0xef, 0x9c, 0x09, 0x6a, 0xb6, 0x51, 0xdd, 0x5f, + 0xeb, 0xa7, 0xaa, 0x26, 0xb1, 0x00, 0x97, 0x93, 0x34, 0xef, 0x78, 0x84, 0xd5, 0x3f, 0x4e, 0x96, 0x22, 0xd0, 0xeb, + 0x88, 0x76, 0x25, 0x20, 0x41, 0x3b, 0x39, 0x0b, 0x15, 0x81, 0x02, 0x7d, 0xfd, 0xfb, 0x4d, 0x9a, 0xc5, 0x72, 0x35, + 0xdb, 0xc3, 0x44, 0x59, 0xac, 0x87, 0x08, 0x72, 0x66, 0xea, 0x60, 0xbf, 0xa7, 0x19, 0xcd, 0xc2, 0x2b, 0x53, 0x82, + 0x4b, 0x71, 0x15, 0x15, 0x39, 0xf8, 0x1c, 0xe2, 0x0b, 0x9f, 0x0a, 0xb9, 0x41, 0x44, 0xd3, 0xef, 0x25, 0xaa, 0x1d, + 0x29, 0x90, 0x43, 0xc9, 0x4f, 0x88, 0xbf, 0x64, 0x6d, 0x8c, 0xfb, 0xa5, 0x53, 0xed, 0x57, 0x0a, 0xc1, 0xfd, 0x67, + 0x5b, 0x6c, 0x54, 0x79, 0xa2, 0x47, 0x9f, 0x62, 0xfd, 0x4f, 0x16, 0x50, 0xaa, 0xfb, 0x36, 0x38, 0x15, 0x8f, 0xc2, + 0x4d, 0x5d, 0xdc, 0x20, 0xb4, 0x40, 0x39, 0xaa, 0x8a, 0x4d, 0x19, 0x11, 0x27, 0xec, 0xa6, 0x2e, 0x7a, 0x9a, 0x03, + 0x9d, 0x3a, 0x2c, 0x4d, 0xe4, 0x89, 0xd0, 0x6e, 0x41, 0xf7, 0x34, 0xc7, 0x4a, 0xbc, 0x94, 0xa5, 0x83, 0xac, 0x13, + 0x69, 0x42, 0xe5, 0xae, 0xae, 0x3a, 0x2a, 0x95, 0xba, 0xe1, 0x4d, 0xaa, 0x19, 0x7f, 0x97, 0xe6, 0x4f, 0x2c, 0xfb, + 0x4d, 0xeb, 0xb7, 0x5a, 0xed, 0x8d, 0xd5, 0xa3, 0x92, 0x35, 0xc7, 0xd9, 0x84, 0xa4, 0xf4, 0x09, 0xdb, 0xcd, 0xa4, + 0x6b, 0x1d, 0x78, 0x12, 0x5c, 0x0e, 0x3d, 0x01, 0x15, 0x83, 0x26, 0xde, 0xee, 0x02, 0xf5, 0x08, 0x3c, 0x03, 0xe5, + 0x13, 0xb5, 0x0e, 0xf8, 0x79, 0xad, 0xe5, 0x29, 0x23, 0x0c, 0xab, 0x9d, 0x45, 0xcb, 0xc1, 0x79, 0xa7, 0x08, 0x5c, + 0xbb, 0x12, 0x78, 0x3e, 0x54, 0xef, 0x85, 0x80, 0xe1, 0xfe, 0xa9, 0x50, 0xd9, 0xec, 0x66, 0x38, 0x8f, 0x1a, 0xa7, + 0x07, 0xda, 0xdb, 0xae, 0xf5, 0x50, 0xef, 0xba, 0x9d, 0xdb, 0x4a, 0xf7, 0x7e, 0xed, 0x64, 0xd2, 0x05, 0xb4, 0x36, + 0x9f, 0x7d, 0x67, 0x57, 0x5a, 0x37, 0x3d, 0x67, 0x0f, 0xb6, 0x6e, 0x89, 0xce, 0x05, 0xd1, 0xe4, 0xf7, 0x03, 0xcf, + 0xda, 0x76, 0xf4, 0xdb, 0xb4, 0x63, 0x9b, 0x7b, 0xa8, 0x7b, 0x05, 0xb5, 0xde, 0xd0, 0xbc, 0x7f, 0xe6, 0xda, 0x76, + 0x7c, 0xf5, 0xeb, 0xba, 0xc3, 0x75, 0xde, 0x04, 0xc7, 0x4d, 0xd7, 0xb6, 0xda, 0xd9, 0xcf, 0xdd, 0xbd, 0xb5, 0x88, + 0xc2, 0x2c, 0xfb, 0xb1, 0x28, 0xfe, 0xa8, 0xf4, 0x1d, 0x81, 0x8e, 0xee, 0xbc, 0xa8, 0xd3, 0xe5, 0xee, 0x03, 0x61, + 0x3c, 0x79, 0xf5, 0x11, 0xd1, 0xad, 0xef, 0x33, 0xf7, 0x2b, 0xc0, 0x8d, 0xe0, 0x0e, 0xa2, 0xbd, 0x5b, 0xea, 0x93, + 0x5a, 0x7d, 0xad, 0xd7, 0xce, 0xd3, 0xf3, 0x9b, 0xce, 0xed, 0x77, 0xdf, 0x1c, 0x6d, 0xbd, 0xc7, 0x85, 0xb5, 0xb2, + 0xf4, 0x54, 0x15, 0xec, 0xcd, 0xf2, 0x54, 0x15, 0x4c, 0x1e, 0x78, 0xcd, 0x7e, 0x41, 0x83, 0x2b, 0x1d, 0x6d, 0xbc, + 0x27, 0x6a, 0xe0, 0x16, 0x85, 0xa5, 0xc3, 0x2f, 0xb9, 0x99, 0xbc, 0xc2, 0xfd, 0xa5, 0x22, 0x17, 0xfb, 0xce, 0x19, + 0xdd, 0x99, 0x59, 0xf7, 0xaa, 0xc2, 0xd5, 0x82, 0x5c, 0x1d, 0xd8, 0x5a, 0x76, 0x71, 0xb8, 0x61, 0x11, 0x05, 0x08, + 0xc4, 0xf4, 0x4a, 0xad, 0xfd, 0x11, 0x0d, 0x42, 0x3e, 0x18, 0xf8, 0x05, 0x06, 0xab, 0x02, 0x85, 0x0f, 0x14, 0xc9, + 0x5f, 0x7b, 0x02, 0x76, 0xf1, 0x0c, 0xd0, 0xad, 0xd8, 0xac, 0x18, 0x21, 0x42, 0x26, 0xcb, 0x59, 0x4d, 0x67, 0x90, + 0x4f, 0x7d, 0xf1, 0x8d, 0xad, 0x3a, 0x9d, 0xb7, 0x35, 0x55, 0x4e, 0x1d, 0x0a, 0xdd, 0xdd, 0xd4, 0x9d, 0x5b, 0x17, + 0x79, 0xea, 0x10, 0x72, 0xa5, 0x62, 0x25, 0xa6, 0xa1, 0xe6, 0x49, 0x9a, 0x51, 0x7f, 0xb1, 0xf7, 0x7b, 0x8d, 0xc2, + 0x29, 0x7f, 0x3a, 0x06, 0x55, 0xb8, 0xaa, 0x21, 0x8e, 0xa5, 0x2a, 0x1e, 0xd9, 0x20, 0xd0, 0xbc, 0xba, 0x55, 0x49, + 0x13, 0x32, 0xb9, 0x11, 0x3e, 0x35, 0x29, 0xe5, 0x69, 0xda, 0xa4, 0x95, 0x22, 0x75, 0xf0, 0x41, 0x9d, 0x6a, 0x3c, + 0x37, 0xab, 0x17, 0x00, 0x66, 0x9c, 0x5f, 0xf1, 0x4b, 0xc5, 0x65, 0xd4, 0x56, 0x66, 0xd2, 0xfe, 0xe4, 0x68, 0x6c, + 0xd4, 0xe5, 0xb4, 0x51, 0x46, 0x58, 0x29, 0xcd, 0x49, 0xb1, 0x1c, 0xcf, 0x3f, 0x60, 0xb0, 0xe6, 0x09, 0xec, 0x60, + 0xa2, 0x52, 0xde, 0x47, 0x40, 0x7c, 0x9d, 0xa4, 0x77, 0x09, 0xa4, 0x48, 0xff, 0xd2, 0x25, 0x77, 0x19, 0x1b, 0x88, + 0x31, 0x2b, 0x66, 0x46, 0xff, 0x83, 0xbb, 0xa4, 0x3f, 0x09, 0x01, 0x70, 0x13, 0x4d, 0xa1, 0x53, 0xe7, 0xc9, 0x45, + 0x1e, 0x2c, 0x2f, 0x3c, 0xb4, 0x62, 0xc4, 0x83, 0xbf, 0xbe, 0x08, 0x11, 0xc4, 0x1c, 0x53, 0x3c, 0xfd, 0xc2, 0xe8, + 0x2f, 0xc1, 0x25, 0x46, 0x10, 0xba, 0x7b, 0xe7, 0x30, 0x84, 0x9b, 0x3d, 0xc8, 0xa0, 0xfe, 0x50, 0x87, 0x44, 0x0d, + 0x7f, 0xac, 0x3c, 0xe8, 0xff, 0x3a, 0x13, 0x96, 0xda, 0x4f, 0x4f, 0x07, 0x50, 0xc1, 0xfb, 0x8a, 0xb7, 0x11, 0xf1, + 0x7d, 0xe2, 0x67, 0xf1, 0x60, 0xf3, 0x6c, 0x03, 0xd6, 0xba, 0x27, 0xb9, 0xb1, 0xae, 0x12, 0x36, 0x10, 0xf0, 0x35, + 0x8a, 0xda, 0xf3, 0xda, 0xed, 0x1e, 0xfc, 0xd5, 0xbf, 0x08, 0x19, 0x30, 0x71, 0xfa, 0x3e, 0x73, 0xb2, 0x46, 0x17, + 0x99, 0x4c, 0x1f, 0x3a, 0xe9, 0x1b, 0x9d, 0xee, 0x3b, 0xe1, 0x1f, 0x15, 0xb3, 0xf8, 0x70, 0x4b, 0x5f, 0x69, 0x52, + 0xdc, 0x01, 0x2b, 0x9b, 0x47, 0x05, 0xa1, 0xce, 0x45, 0xf4, 0x95, 0x29, 0xdf, 0x12, 0x6a, 0xf6, 0x8d, 0x25, 0xa5, + 0x74, 0xaf, 0xa1, 0x37, 0x69, 0xad, 0xdf, 0x46, 0x09, 0xc6, 0x44, 0xc7, 0x93, 0x97, 0xf1, 0x58, 0x79, 0x1f, 0x8f, + 0x1b, 0xa9, 0x90, 0x07, 0x20, 0x02, 0x15, 0xe3, 0x4f, 0x57, 0x9e, 0x9c, 0xf4, 0xc2, 0x78, 0x15, 0x4a, 0x41, 0x61, + 0x40, 0x57, 0x20, 0x05, 0x3c, 0x6a, 0x4f, 0x74, 0x16, 0x76, 0x09, 0xf7, 0xe8, 0x26, 0x60, 0xac, 0xcf, 0x3f, 0x02, + 0x9a, 0xbb, 0x70, 0x87, 0x17, 0x03, 0xd4, 0xa6, 0x5e, 0xdd, 0x7d, 0x5c, 0xab, 0x73, 0x38, 0x04, 0x07, 0xab, 0x41, + 0x04, 0xa7, 0xf3, 0xa9, 0xa3, 0x59, 0x16, 0xa0, 0x72, 0xb2, 0xdc, 0xc8, 0x9b, 0x47, 0x8b, 0x5e, 0xdd, 0xf7, 0x96, + 0x69, 0x59, 0xd5, 0x41, 0xc6, 0xb2, 0xb0, 0x02, 0x5c, 0x1d, 0x5a, 0x3f, 0x08, 0x97, 0x85, 0xf3, 0x07, 0x42, 0x10, + 0xbb, 0x57, 0xdb, 0x92, 0xe7, 0x6a, 0x0e, 0x3f, 0x7b, 0xce, 0xd6, 0x5c, 0xa2, 0x4e, 0x3a, 0x13, 0x01, 0x88, 0x3d, + 0x35, 0xab, 0xe8, 0x1a, 0x48, 0xea, 0x34, 0xab, 0xe8, 0x9a, 0x9a, 0x6d, 0x8c, 0x03, 0xf9, 0x68, 0x95, 0x02, 0xf6, + 0xdd, 0x74, 0x1c, 0xac, 0x9e, 0xc5, 0xf2, 0x3a, 0x74, 0xf7, 0x6c, 0xa3, 0x7c, 0x06, 0x75, 0xab, 0x8d, 0x31, 0xb1, + 0xdd, 0x7c, 0x39, 0xd7, 0x6f, 0x07, 0x4b, 0xdf, 0x0e, 0x9a, 0x73, 0xca, 0xbe, 0xd3, 0x65, 0xaf, 0xec, 0xb2, 0xa9, + 0xe7, 0x8e, 0x8a, 0x56, 0x63, 0x40, 0x6f, 0x60, 0xc1, 0xfa, 0x5c, 0xa4, 0xd9, 0xaa, 0x54, 0x25, 0xe0, 0x85, 0xb1, + 0x62, 0x77, 0x7e, 0x23, 0x33, 0x24, 0x61, 0x1e, 0x67, 0xe2, 0x9a, 0xee, 0xb5, 0x30, 0x39, 0x8e, 0x45, 0x32, 0x25, + 0x74, 0x4a, 0x77, 0xb6, 0xa1, 0x73, 0x15, 0x46, 0x11, 0xad, 0x95, 0x54, 0x1a, 0x09, 0x4c, 0xcd, 0x00, 0x25, 0x73, + 0x05, 0x4e, 0xe9, 0x72, 0xff, 0x3b, 0x12, 0xe3, 0xcc, 0x17, 0x25, 0x33, 0xa0, 0x5b, 0x7e, 0x5d, 0xac, 0x5b, 0x29, + 0x32, 0xc2, 0xbc, 0x39, 0x6e, 0xaf, 0xeb, 0x43, 0x20, 0x57, 0xcb, 0x1e, 0x45, 0xe3, 0xa0, 0xd0, 0xe1, 0x52, 0x25, + 0xc0, 0xbe, 0x48, 0xfc, 0x8c, 0xb0, 0xa5, 0x3d, 0x90, 0xdb, 0xa3, 0x33, 0x61, 0xce, 0x39, 0x29, 0xcb, 0xce, 0xa5, + 0x19, 0x5c, 0x4e, 0x5c, 0x09, 0x2e, 0xd2, 0xdb, 0xf6, 0x34, 0x69, 0x69, 0xfb, 0xd8, 0x70, 0x8e, 0x86, 0xb6, 0x41, + 0x77, 0xec, 0x0f, 0xcd, 0xc5, 0x22, 0xb6, 0x2e, 0x16, 0xc3, 0xce, 0xec, 0x47, 0x8b, 0x05, 0xc8, 0x01, 0xe0, 0xa8, + 0xdb, 0xf0, 0x31, 0x5b, 0x02, 0xa7, 0xd5, 0x34, 0x9b, 0x7a, 0x1b, 0x5e, 0x3d, 0x53, 0x3d, 0xbd, 0xe4, 0xf9, 0x33, + 0x61, 0xc6, 0x62, 0xc3, 0xf3, 0x67, 0xd6, 0x91, 0x53, 0x3d, 0x13, 0x4a, 0xb4, 0x2e, 0xa0, 0x19, 0x78, 0x4d, 0x01, + 0x23, 0x96, 0x4c, 0xa6, 0x54, 0x91, 0xc7, 0xbd, 0xe9, 0x46, 0x0d, 0x5e, 0x50, 0x38, 0x04, 0x52, 0x3a, 0xfd, 0xe2, + 0x39, 0xd3, 0xef, 0x5d, 0x3c, 0xef, 0x90, 0xb5, 0x0d, 0xd3, 0xe5, 0x66, 0x98, 0x0c, 0x4a, 0xff, 0x99, 0x99, 0x18, + 0x17, 0xd6, 0x24, 0x01, 0xc4, 0xbf, 0xb1, 0xdf, 0x21, 0x85, 0x9b, 0xf7, 0x97, 0xc3, 0xf8, 0x91, 0xf7, 0x63, 0x64, + 0x4f, 0xd2, 0x0c, 0xb1, 0x66, 0x52, 0x21, 0x77, 0x5f, 0xad, 0x7f, 0x4c, 0xec, 0x26, 0x7b, 0x60, 0x01, 0x88, 0xad, + 0x69, 0xab, 0x5b, 0xde, 0xef, 0x7b, 0xa6, 0x08, 0xf0, 0x83, 0xf2, 0x8f, 0xee, 0x0c, 0xc9, 0xa0, 0xec, 0xba, 0x21, + 0xc4, 0x83, 0xb2, 0x69, 0xda, 0xeb, 0x6d, 0xef, 0xcc, 0x63, 0x75, 0x9d, 0x76, 0x16, 0x57, 0x8b, 0x0c, 0xd2, 0xea, + 0x43, 0x76, 0x9c, 0xd9, 0x67, 0x47, 0x4b, 0xa5, 0xfb, 0x7d, 0x88, 0x88, 0x3b, 0xca, 0xda, 0x7e, 0xbb, 0x05, 0xd7, + 0x70, 0x34, 0x08, 0x5d, 0xd9, 0xdb, 0x65, 0xb4, 0x71, 0x21, 0x8e, 0x7b, 0xa6, 0xf3, 0x05, 0x5f, 0x1e, 0xa5, 0x9d, + 0x07, 0xa7, 0x7a, 0xa2, 0xcf, 0x4d, 0x77, 0x95, 0xc9, 0xb5, 0x0e, 0xab, 0x31, 0xa8, 0xcd, 0xc2, 0x16, 0xee, 0xc2, + 0x36, 0x3a, 0x68, 0xed, 0xcb, 0x82, 0x7f, 0xca, 0x00, 0x7c, 0xe9, 0xd9, 0xb2, 0xed, 0x35, 0x69, 0xf5, 0x46, 0x46, + 0x21, 0xb6, 0xb4, 0xbd, 0xfa, 0x74, 0x94, 0x8f, 0x9b, 0x13, 0x8a, 0x0b, 0x39, 0xca, 0x8f, 0x5e, 0x43, 0xd4, 0xb5, + 0xae, 0xe3, 0x62, 0xd1, 0xe1, 0xc6, 0x55, 0xb7, 0xdd, 0xb8, 0x7e, 0x40, 0xbc, 0x35, 0xda, 0xa4, 0x50, 0x2b, 0x63, + 0x47, 0xf0, 0xb2, 0x7c, 0x38, 0x64, 0x62, 0x38, 0x94, 0x90, 0xa9, 0x8f, 0xdd, 0x1b, 0x9a, 0xf6, 0xf9, 0x69, 0xeb, + 0x47, 0x2c, 0x35, 0x8e, 0x62, 0xc3, 0x3b, 0x7d, 0xe7, 0xb1, 0x35, 0xae, 0xe4, 0xcb, 0x60, 0xb6, 0x2b, 0xa8, 0xb6, + 0xc6, 0x1b, 0xf6, 0x72, 0xfe, 0x7d, 0x25, 0x95, 0xfc, 0xed, 0xcf, 0x70, 0x0d, 0x6f, 0x6d, 0xe9, 0xa0, 0xa9, 0x66, + 0x39, 0xcb, 0xf5, 0xbd, 0xe0, 0xf8, 0xe3, 0xee, 0x15, 0xc1, 0xe0, 0xf7, 0x74, 0x14, 0xe4, 0x62, 0xa9, 0xd6, 0x80, + 0x82, 0x74, 0x64, 0xc7, 0x54, 0x16, 0x18, 0x06, 0xf0, 0x86, 0x0c, 0x90, 0xc7, 0x14, 0xee, 0x86, 0x0a, 0x2f, 0xfc, + 0xa5, 0x22, 0xbb, 0x04, 0xb6, 0x35, 0xe3, 0x63, 0x86, 0x3b, 0x08, 0xf9, 0x47, 0xb0, 0x3b, 0xb6, 0x62, 0xb7, 0x6c, + 0xc1, 0x90, 0x6c, 0x1c, 0x87, 0x31, 0xe6, 0xe3, 0x49, 0x7c, 0x25, 0x26, 0xf1, 0x80, 0x47, 0xe8, 0x18, 0xb1, 0xe6, + 0xf5, 0x2c, 0x96, 0x03, 0xc8, 0xee, 0xb8, 0xd2, 0x01, 0x21, 0x34, 0x36, 0xb4, 0xe4, 0x4d, 0x61, 0x70, 0xb1, 0x63, + 0x9f, 0x91, 0x48, 0xc6, 0x21, 0x58, 0xb4, 0xaa, 0x81, 0x85, 0x89, 0xdd, 0xf2, 0x62, 0xb6, 0x9a, 0xe3, 0x3f, 0x87, + 0x03, 0x02, 0x60, 0x07, 0xfb, 0x86, 0xdd, 0x45, 0x88, 0xf4, 0xb6, 0xe0, 0x77, 0x96, 0xa7, 0x0b, 0xbb, 0xe7, 0xd7, + 0x7c, 0xcc, 0xce, 0x7f, 0xf0, 0x20, 0x72, 0xf6, 0xfc, 0x23, 0xa0, 0x21, 0xde, 0xf3, 0xdb, 0xd4, 0xab, 0xd8, 0x2d, + 0x51, 0x10, 0xde, 0x82, 0x33, 0xd0, 0x3d, 0x44, 0xc0, 0x5e, 0xf3, 0x05, 0xc6, 0x8a, 0x9d, 0xa5, 0x4b, 0x0f, 0x33, + 0x42, 0xed, 0xe9, 0x7c, 0x59, 0xab, 0x49, 0xb8, 0xb9, 0x5a, 0x4e, 0x06, 0x83, 0x8d, 0xbf, 0xe3, 0x6b, 0xe0, 0x83, + 0x39, 0xff, 0xc1, 0xdb, 0x51, 0xb9, 0xf0, 0x9f, 0xd7, 0x59, 0xf2, 0xce, 0x67, 0xd7, 0x03, 0xbe, 0x00, 0xbc, 0x25, + 0x74, 0xe0, 0xba, 0xf7, 0x99, 0xc4, 0x6b, 0xbb, 0xd6, 0xd7, 0x08, 0x24, 0xf2, 0x05, 0x60, 0xc4, 0xc4, 0xfc, 0xbe, + 0x86, 0x08, 0x8c, 0x04, 0x7c, 0x5b, 0xb5, 0x47, 0xfc, 0x96, 0x1b, 0xc0, 0xaf, 0xcc, 0x67, 0x0f, 0x3c, 0xd4, 0x3f, + 0x13, 0x9f, 0xdd, 0xf0, 0xf7, 0xfc, 0x85, 0x27, 0x25, 0xe9, 0x72, 0xf6, 0x7e, 0x0e, 0xd7, 0x43, 0x29, 0x4f, 0x87, + 0xf4, 0xb3, 0x31, 0x18, 0x40, 0x28, 0x64, 0xde, 0x78, 0xc0, 0x9a, 0x14, 0xe2, 0x5f, 0xc0, 0xb7, 0xa3, 0x84, 0xcd, + 0x1b, 0x6f, 0xeb, 0x6b, 0x79, 0xf3, 0xc6, 0x7b, 0xf0, 0x29, 0x0a, 0xb0, 0x0a, 0x4a, 0x59, 0x60, 0x15, 0x84, 0x8d, + 0x36, 0xc2, 0x18, 0xb8, 0x7a, 0xd7, 0x18, 0xea, 0x7a, 0x8e, 0xd8, 0xb6, 0xd2, 0x77, 0xe1, 0x3b, 0xc8, 0x80, 0x0f, + 0xde, 0x14, 0x25, 0xd1, 0xe7, 0xd4, 0x14, 0x49, 0xeb, 0x9e, 0xfb, 0xad, 0x75, 0x47, 0x6b, 0x4a, 0x7d, 0xe4, 0x6a, + 0x7c, 0x38, 0xd4, 0x2f, 0x84, 0x16, 0x09, 0xa6, 0xa0, 0x71, 0x0d, 0xda, 0x02, 0x04, 0x7d, 0x1e, 0x20, 0x6b, 0x49, + 0xb1, 0xe0, 0xdb, 0x5f, 0x21, 0x06, 0xaf, 0x4c, 0xef, 0x5c, 0xae, 0x32, 0x12, 0xb6, 0x17, 0x7e, 0x39, 0xac, 0xfd, + 0x89, 0x53, 0x0b, 0x4b, 0xab, 0x39, 0xa8, 0x9f, 0xd9, 0x72, 0x9c, 0xaa, 0xda, 0xbf, 0x25, 0x49, 0xb5, 0xab, 0xb4, + 0x9c, 0xde, 0xdb, 0x37, 0x5d, 0x26, 0xd8, 0xd8, 0x0f, 0xa8, 0x3a, 0xb2, 0x1a, 0x76, 0x5f, 0xa8, 0x2f, 0x7a, 0x4a, + 0x26, 0x34, 0x1f, 0x55, 0x34, 0xcf, 0xee, 0x37, 0x3b, 0xea, 0x3f, 0xbd, 0x1c, 0x8a, 0x00, 0xc9, 0x2a, 0x2d, 0x96, + 0x22, 0x67, 0x63, 0x3f, 0x1e, 0x26, 0x99, 0x0a, 0x2f, 0x48, 0x47, 0x77, 0xbf, 0x71, 0x7f, 0xcb, 0x0d, 0x64, 0x85, + 0x56, 0x6d, 0x30, 0x56, 0x8a, 0x96, 0xc1, 0xfa, 0x6a, 0xdc, 0xef, 0x8b, 0xab, 0xf1, 0x54, 0x04, 0x35, 0x10, 0x17, + 0x89, 0x17, 0xe3, 0x69, 0x4d, 0x2c, 0xa9, 0x5d, 0x81, 0x31, 0x7a, 0x5c, 0x15, 0xb5, 0x4f, 0xfd, 0x02, 0x42, 0x91, + 0x6a, 0xcd, 0x1c, 0x6b, 0xdc, 0x18, 0x11, 0x77, 0x58, 0xb9, 0x76, 0x6a, 0xaf, 0x03, 0xb0, 0xbc, 0x1a, 0x17, 0x84, + 0x4d, 0x72, 0xec, 0x5c, 0xc0, 0x6a, 0x34, 0xa4, 0xda, 0x0d, 0xb7, 0x5e, 0x76, 0x7e, 0xf3, 0x38, 0xb1, 0xb5, 0x11, + 0x6e, 0x29, 0xa0, 0x8c, 0xf2, 0x1b, 0xcb, 0x09, 0xbb, 0x53, 0xbd, 0x23, 0x55, 0x3b, 0xe2, 0xc4, 0x05, 0x2c, 0x37, + 0x3c, 0xb5, 0xfa, 0x26, 0x06, 0x27, 0x42, 0xd5, 0x4a, 0xc7, 0x6b, 0x3f, 0xe2, 0x7e, 0x75, 0x5f, 0xf7, 0x4a, 0xf0, + 0x93, 0x90, 0xd7, 0x6f, 0x79, 0x07, 0x80, 0x15, 0x1f, 0xf2, 0x62, 0x5a, 0x38, 0x5a, 0x97, 0x41, 0x19, 0x20, 0x42, + 0x33, 0x00, 0x3a, 0xb9, 0x3a, 0x88, 0xd2, 0xc0, 0x15, 0x77, 0x88, 0xf0, 0xd3, 0xe8, 0x59, 0xfe, 0x22, 0x7c, 0x56, + 0x4d, 0xc3, 0x8b, 0x3c, 0x88, 0x2e, 0xaa, 0x20, 0x7a, 0x56, 0x5d, 0x85, 0xcf, 0xf2, 0x69, 0x74, 0x91, 0x07, 0xe1, + 0x45, 0xd5, 0xd8, 0x77, 0xed, 0xee, 0x9e, 0x90, 0xb7, 0x5d, 0xfd, 0x91, 0x73, 0x65, 0x4f, 0x99, 0x9e, 0x9f, 0xd7, + 0x7a, 0xa5, 0x76, 0x9b, 0xeb, 0x35, 0x6a, 0xa6, 0x3e, 0xca, 0xfe, 0x66, 0x1b, 0x0b, 0x8f, 0xe6, 0x10, 0xfa, 0x8c, + 0xb4, 0x98, 0x7b, 0x9c, 0xeb, 0xcd, 0x9e, 0x14, 0x06, 0x46, 0x4c, 0x2a, 0x19, 0x39, 0xbd, 0xc0, 0x45, 0xa8, 0x42, + 0x0c, 0x6b, 0xe9, 0x6a, 0x9f, 0x75, 0xe9, 0x0d, 0xd4, 0x35, 0xc5, 0xbe, 0x86, 0x0c, 0xbc, 0x68, 0x7a, 0x19, 0x8c, + 0x01, 0x39, 0x02, 0xef, 0xf8, 0x6c, 0x09, 0x07, 0xe6, 0x1a, 0xa0, 0x6f, 0x1e, 0xf5, 0x75, 0xb9, 0xe3, 0x6b, 0xd5, + 0x37, 0xd3, 0xf5, 0x48, 0x29, 0x3f, 0x56, 0xfc, 0xee, 0xe2, 0x39, 0xbb, 0xe5, 0x1a, 0x15, 0xe5, 0x17, 0xbd, 0x58, + 0xef, 0x81, 0xab, 0xee, 0x17, 0xb8, 0xcd, 0xe2, 0xb1, 0x2b, 0x0f, 0x58, 0xb6, 0x65, 0x0f, 0xec, 0x86, 0xbd, 0x67, + 0x4f, 0xd8, 0x5b, 0xf6, 0x8e, 0xfd, 0x84, 0xaa, 0x0d, 0x25, 0xe4, 0xf9, 0x0b, 0x7e, 0x2b, 0x4d, 0x8f, 0x12, 0x95, + 0xec, 0xc1, 0x36, 0xd3, 0x0c, 0x37, 0xec, 0x3d, 0x5f, 0x0c, 0x57, 0xec, 0x2d, 0x64, 0x43, 0x99, 0x78, 0xb0, 0x62, + 0x3f, 0x71, 0x05, 0x62, 0xa6, 0xcf, 0xc2, 0xd2, 0x12, 0x15, 0x4d, 0x99, 0x28, 0x43, 0xbf, 0xe5, 0xf8, 0x22, 0xfb, + 0x09, 0x8b, 0x90, 0x9f, 0x19, 0xae, 0xd8, 0x03, 0x5f, 0x0c, 0x56, 0xec, 0xbd, 0x36, 0x10, 0x0d, 0x36, 0x6e, 0x69, + 0x84, 0x64, 0xa5, 0xcb, 0x92, 0xd2, 0xf4, 0xd6, 0xbe, 0x06, 0x6e, 0xd8, 0x0d, 0xd6, 0xee, 0x09, 0x16, 0x8d, 0x02, + 0xff, 0x60, 0xc5, 0xde, 0x71, 0x09, 0xa0, 0xe6, 0x96, 0x27, 0xbd, 0x42, 0x75, 0x81, 0x74, 0x3f, 0x78, 0xc2, 0xe9, + 0x45, 0xf6, 0x0e, 0xcb, 0xa0, 0xaf, 0x0c, 0x57, 0x6c, 0x8b, 0xb5, 0xbb, 0x31, 0x96, 0x2d, 0xab, 0x7a, 0x12, 0x11, + 0x18, 0x05, 0x95, 0xd2, 0xf2, 0x6f, 0xc4, 0xb2, 0xa9, 0x9b, 0x06, 0xb5, 0xa1, 0x3f, 0x1f, 0x8c, 0xfe, 0xe2, 0xeb, + 0x77, 0x3f, 0x78, 0xa5, 0xbe, 0xf6, 0xfe, 0xe2, 0xb8, 0x56, 0x96, 0xe8, 0x5a, 0xf9, 0x2b, 0x2f, 0x67, 0xbf, 0xcc, + 0x27, 0xba, 0x96, 0xb4, 0xc3, 0x90, 0xaf, 0xe9, 0xec, 0x97, 0x0e, 0x67, 0xcb, 0x5f, 0x7d, 0xbf, 0x31, 0x5d, 0xac, + 0x3e, 0xab, 0x7b, 0xf7, 0x61, 0xb0, 0x69, 0x9c, 0x7a, 0xef, 0x4e, 0xd7, 0x1b, 0x9b, 0x59, 0x6b, 0xcf, 0xcc, 0xff, + 0xe1, 0x4a, 0x6f, 0x71, 0xe8, 0x6e, 0xf8, 0x76, 0xb8, 0xb1, 0x47, 0x41, 0x7e, 0x5f, 0x2a, 0x8d, 0xb3, 0x9a, 0xbf, + 0xf4, 0x3a, 0xa5, 0x58, 0x40, 0x34, 0xfa, 0x64, 0x24, 0xa1, 0x4b, 0x66, 0xe2, 0x19, 0xe2, 0x8b, 0x0c, 0x90, 0xb9, + 0x40, 0x34, 0xbb, 0xe7, 0xe3, 0xc9, 0xfd, 0x55, 0x3c, 0xb9, 0x1f, 0xf0, 0x4f, 0xa6, 0x05, 0xed, 0xc5, 0x76, 0xef, + 0xb3, 0x5f, 0x79, 0x61, 0x2f, 0xc7, 0x5f, 0x7c, 0xf6, 0x45, 0xb8, 0x2b, 0xf4, 0x17, 0x9f, 0xbd, 0x13, 0xfc, 0xd7, + 0x91, 0x26, 0xca, 0x60, 0xef, 0x6a, 0xfe, 0xeb, 0x08, 0x19, 0x3f, 0xd8, 0x67, 0xc1, 0xbf, 0x80, 0xef, 0x77, 0x95, + 0xa0, 0x55, 0xfc, 0x73, 0xad, 0x7e, 0xbe, 0x97, 0x71, 0x39, 0xf0, 0x26, 0xb4, 0x82, 0xde, 0xbc, 0xad, 0xe5, 0x4f, + 0xe2, 0xe1, 0x48, 0xd5, 0x53, 0xc3, 0x3f, 0x8b, 0xc5, 0x2c, 0xea, 0xa3, 0x74, 0x2a, 0x6f, 0x72, 0xcd, 0x33, 0x69, + 0x5d, 0xbe, 0x87, 0x50, 0xe0, 0x6b, 0x1b, 0xa2, 0x60, 0xc7, 0x71, 0x23, 0xb8, 0x66, 0xef, 0x84, 0xcf, 0xb2, 0xe9, + 0x96, 0xdf, 0xf0, 0x27, 0xfc, 0x1d, 0xdf, 0x05, 0x0f, 0xfc, 0x3d, 0x7f, 0xcb, 0x7f, 0xe2, 0x3b, 0xb6, 0x94, 0x68, + 0xa7, 0xf5, 0xf6, 0x32, 0xd8, 0xb2, 0x7a, 0x77, 0x19, 0x3c, 0xb0, 0x7a, 0xfb, 0x3c, 0xb8, 0x61, 0xf5, 0xee, 0x79, + 0xf0, 0x9e, 0x6d, 0x2f, 0x83, 0x27, 0x6c, 0x77, 0x19, 0xbc, 0x65, 0xdb, 0xe7, 0xc1, 0x3b, 0xb6, 0x7b, 0x1e, 0xfc, + 0x24, 0x31, 0x1e, 0xde, 0x09, 0xc9, 0x71, 0xf2, 0xae, 0x66, 0x86, 0x4f, 0x37, 0xf8, 0x2c, 0xac, 0x5f, 0x54, 0xc7, + 0xe0, 0x73, 0xcd, 0x74, 0x8b, 0x03, 0x21, 0x98, 0x6e, 0x6f, 0x70, 0x4b, 0x4f, 0x4c, 0xab, 0x82, 0x54, 0xb0, 0xae, + 0x76, 0x06, 0x8b, 0xba, 0x69, 0x9d, 0xc9, 0x8e, 0x5f, 0x62, 0xdc, 0xe1, 0x97, 0xb8, 0x60, 0xcb, 0xa6, 0xd3, 0x49, + 0xe7, 0xf4, 0x49, 0xa0, 0x37, 0x7f, 0xbd, 0xeb, 0x57, 0xd2, 0x77, 0xa6, 0x68, 0x78, 0xae, 0xb4, 0xc6, 0xad, 0x9d, + 0x3e, 0xb4, 0x76, 0x7a, 0x26, 0x55, 0x68, 0x11, 0x8b, 0xca, 0xa2, 0xaa, 0x90, 0x49, 0x3c, 0xc8, 0xb4, 0x3e, 0x2d, + 0x61, 0xa4, 0xc8, 0x04, 0x34, 0xfa, 0x82, 0x8e, 0x81, 0x9c, 0x2c, 0x0a, 0x6c, 0xc9, 0x37, 0x83, 0x84, 0xad, 0x79, + 0x3c, 0x1d, 0x26, 0xc1, 0x92, 0xdd, 0xf1, 0x61, 0xb7, 0x40, 0xb0, 0x52, 0x01, 0x4c, 0xfa, 0xe2, 0xd4, 0xde, 0xd7, + 0x79, 0x6f, 0x95, 0xc6, 0x71, 0x26, 0x50, 0xd9, 0x56, 0xe9, 0x0d, 0x7e, 0xeb, 0xec, 0xe7, 0x6b, 0xb5, 0xbf, 0x83, + 0xa4, 0xf0, 0x2b, 0x30, 0xec, 0x10, 0xe1, 0x1d, 0x54, 0x18, 0x79, 0x96, 0xcc, 0xa2, 0xaf, 0xec, 0x2d, 0x7d, 0x6b, + 0xb6, 0xe9, 0xff, 0xb4, 0x08, 0xda, 0xc7, 0x65, 0xe7, 0x7f, 0x32, 0xaf, 0xfe, 0xd6, 0xf1, 0xea, 0xc6, 0x9f, 0x3c, + 0xf0, 0x4f, 0x18, 0x96, 0x80, 0x89, 0x6c, 0xc7, 0x3f, 0x8d, 0xb6, 0x8d, 0x53, 0x9e, 0xdc, 0xc7, 0xff, 0xaf, 0x14, + 0x68, 0xef, 0xe4, 0x95, 0xbd, 0x23, 0x6e, 0x79, 0xc7, 0x3e, 0xbe, 0xb4, 0x36, 0x44, 0x03, 0x4d, 0xf2, 0x89, 0xbb, + 0xd1, 0xd0, 0xb0, 0x21, 0xfe, 0xc2, 0xab, 0xd9, 0xa7, 0xf9, 0x64, 0xcb, 0x8f, 0xb7, 0xc3, 0x4f, 0x1d, 0xdb, 0xe1, + 0x2f, 0xfe, 0x60, 0xd9, 0x7c, 0xad, 0x57, 0x3b, 0xb7, 0x71, 0xa7, 0xd2, 0x3b, 0x7e, 0xbc, 0x89, 0x0f, 0xff, 0xe3, + 0x4a, 0xef, 0xbe, 0xb9, 0xd2, 0x76, 0x95, 0xbb, 0x3b, 0xdf, 0x74, 0x7c, 0x23, 0x6b, 0x8d, 0x71, 0x66, 0x46, 0xb3, 0xf8, 0x13, 0xcd, 0xd2, 0x20, 0xb2, 0x14, 0x8a, 0x3f, 0x99, 0x69, 0xa7, 0xee, 0x54, 0x59, 0xdd, 0x2d, 0xdf, 0xe2, - 0x1e, 0x7f, 0xc7, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0xef, 0x6e, 0x16, 0x93, 0xc1, 0xe0, 0xce, 0x3f, 0xdc, 0xf3, 0x70, - 0x76, 0x37, 0x67, 0x6f, 0xf9, 0x3d, 0x2d, 0xa6, 0x89, 0x6a, 0x7a, 0xf1, 0x98, 0xe0, 0x75, 0xe7, 0xfb, 0x13, 0x8b, - 0xff, 0xd5, 0xbe, 0x68, 0xde, 0xf9, 0x03, 0x69, 0x8d, 0x96, 0xbb, 0xfa, 0xfb, 0xc7, 0x15, 0x13, 0x77, 0x20, 0x5e, - 0xbc, 0xb7, 0x35, 0x0d, 0x6f, 0xf8, 0x47, 0xef, 0xad, 0x3f, 0x7d, 0xab, 0x63, 0x6e, 0x26, 0xea, 0x48, 0x7a, 0x73, - 0xf5, 0x8c, 0xfd, 0xca, 0x3f, 0xc9, 0xe3, 0xe4, 0x9d, 0x90, 0x93, 0xf6, 0x16, 0xb9, 0x9b, 0xe8, 0x94, 0xf8, 0xe2, - 0x26, 0x12, 0x16, 0x04, 0xc2, 0x70, 0xd4, 0xfc, 0x61, 0x52, 0x4e, 0xbd, 0x3d, 0x70, 0xbb, 0x72, 0x5b, 0xff, 0x7c, - 0xc7, 0x39, 0x5f, 0x0c, 0xaf, 0xa7, 0x5f, 0xba, 0x5d, 0x7a, 0x54, 0x34, 0x9b, 0x0a, 0x74, 0xbb, 0xc3, 0xd8, 0xab, - 0xb3, 0x99, 0x65, 0x2e, 0xf9, 0xd2, 0x97, 0xda, 0xcc, 0x3c, 0xa6, 0xf7, 0x9b, 0x69, 0x86, 0x44, 0xbe, 0x40, 0xc8, - 0x74, 0x3c, 0xae, 0x2e, 0xb1, 0x3c, 0x3e, 0x7c, 0xf3, 0xf4, 0xc9, 0xe0, 0x09, 0x46, 0x6e, 0x59, 0xd1, 0x20, 0x5f, - 0xf8, 0x30, 0xab, 0x5b, 0xb7, 0x8d, 0xab, 0x67, 0xc3, 0x5f, 0x20, 0x6f, 0xd0, 0xf5, 0xd0, 0x14, 0xd1, 0x2a, 0xbf, - 0xa3, 0xe8, 0x33, 0x25, 0x07, 0x1d, 0x4f, 0xa0, 0x76, 0x48, 0x81, 0xfb, 0xe5, 0x29, 0x07, 0xfd, 0x06, 0x96, 0xda, - 0xef, 0x5f, 0x7e, 0x22, 0x1e, 0x69, 0x18, 0xef, 0x1f, 0xc2, 0xe8, 0x8f, 0xb8, 0x2c, 0x36, 0x70, 0xba, 0x0e, 0xe0, - 0x73, 0x4f, 0xf5, 0xed, 0x6b, 0xe5, 0xfb, 0x7e, 0xe0, 0xed, 0xf8, 0x2d, 0xfb, 0xc2, 0xbd, 0xeb, 0xe1, 0x1b, 0xff, - 0xe9, 0x13, 0x10, 0x9d, 0x60, 0x5c, 0x3e, 0x63, 0x24, 0x6c, 0x47, 0x31, 0x6a, 0x15, 0x7e, 0xae, 0x21, 0x44, 0xeb, - 0x13, 0x32, 0x76, 0x41, 0xfa, 0x07, 0x05, 0xe8, 0x27, 0x04, 0x56, 0x93, 0xd4, 0x28, 0x30, 0x89, 0xef, 0x6a, 0x48, - 0x20, 0x05, 0x0b, 0x84, 0xde, 0x40, 0xf1, 0xa9, 0xe0, 0x5f, 0x86, 0x9f, 0x49, 0xf2, 0x5b, 0xd4, 0x7c, 0x0c, 0x7f, - 0xc3, 0xd0, 0x4c, 0xaa, 0x87, 0xb4, 0x8e, 0x12, 0xef, 0x27, 0xff, 0x10, 0x85, 0x95, 0x50, 0xc7, 0x42, 0x90, 0x8a, - 0x21, 0x17, 0xe2, 0xea, 0xd9, 0xe4, 0xae, 0x14, 0xe1, 0x1f, 0x13, 0x7c, 0x26, 0x17, 0x9a, 0x7c, 0x46, 0x4f, 0x1a, - 0xf9, 0xfe, 0x83, 0x7c, 0x5f, 0x76, 0x6a, 0xb0, 0xa8, 0x87, 0xfc, 0xae, 0x76, 0xdf, 0x97, 0x53, 0x82, 0x1e, 0xd9, - 0x0f, 0x68, 0x0a, 0x06, 0x6a, 0x02, 0x52, 0x86, 0xe0, 0x0e, 0xae, 0xfa, 0x9e, 0x2a, 0xc8, 0x97, 0xdf, 0xfb, 0x2c, - 0x64, 0xb8, 0xca, 0x82, 0x90, 0xe4, 0x52, 0x21, 0x85, 0x8d, 0xbb, 0x7a, 0xf0, 0x59, 0x63, 0x92, 0x48, 0xc8, 0x29, - 0x01, 0x49, 0xd2, 0xde, 0x40, 0x92, 0x88, 0xe9, 0x3f, 0x5c, 0x27, 0x4d, 0xb3, 0x96, 0xd2, 0x0d, 0x71, 0xaa, 0xbe, - 0x45, 0x9a, 0xb3, 0xe0, 0x3d, 0x83, 0xa5, 0x23, 0xc5, 0x8a, 0x2f, 0xc6, 0x60, 0xac, 0x83, 0x85, 0x56, 0xb2, 0xb8, - 0x5f, 0x25, 0x61, 0x1a, 0x89, 0x2a, 0xef, 0x84, 0xfc, 0xf9, 0x4f, 0x25, 0xfe, 0xe8, 0x2d, 0x0d, 0x44, 0x20, 0xf8, - 0x01, 0x5a, 0x0f, 0x58, 0xe3, 0xc1, 0x4f, 0xac, 0x2e, 0xc3, 0xbc, 0xca, 0xa8, 0xbc, 0xd9, 0x9e, 0xed, 0xe6, 0x4c, - 0x55, 0x2d, 0xf8, 0x2c, 0x0c, 0x2d, 0xda, 0xc5, 0xba, 0x39, 0xbb, 0xcd, 0x1b, 0x7c, 0x67, 0x92, 0x44, 0x6a, 0x29, - 0x89, 0xb4, 0xd5, 0xf5, 0xe9, 0xd2, 0xeb, 0x16, 0x15, 0x34, 0x46, 0x80, 0x5e, 0x92, 0xee, 0x2a, 0x9f, 0x50, 0xbc, - 0xb2, 0x1a, 0x56, 0xc3, 0x4b, 0x87, 0x22, 0x8c, 0xb5, 0x37, 0xe7, 0xf2, 0xec, 0x0e, 0xac, 0x47, 0x68, 0xed, 0xca, - 0xd5, 0x21, 0x6c, 0x3f, 0xd1, 0x7b, 0x4e, 0xae, 0xfe, 0x06, 0x54, 0x81, 0x73, 0x47, 0x43, 0x7d, 0xd2, 0x4e, 0x21, - 0xdb, 0x79, 0xb0, 0x24, 0xa8, 0x4a, 0xc9, 0x4d, 0xb9, 0x16, 0xa5, 0x94, 0x29, 0x5f, 0xcb, 0x6c, 0x65, 0xf7, 0xc9, - 0x00, 0xe2, 0xd9, 0xa0, 0x40, 0x72, 0x51, 0x5b, 0xcd, 0x41, 0xfa, 0x68, 0x96, 0x38, 0xd6, 0x0e, 0x0a, 0x2f, 0xcb, - 0xc1, 0xcc, 0x65, 0x2e, 0x97, 0x83, 0x82, 0x55, 0x7a, 0xab, 0x99, 0x66, 0xaa, 0x2f, 0x2a, 0x7b, 0x9b, 0xf1, 0x32, - 0xfd, 0x37, 0x4b, 0x06, 0x3c, 0xba, 0x7a, 0xe6, 0x07, 0x90, 0x26, 0x79, 0x1d, 0x20, 0x09, 0x36, 0x07, 0xbb, 0xd8, - 0x61, 0xd8, 0x2a, 0x56, 0xf6, 0xe4, 0xf9, 0x72, 0x87, 0xa6, 0x5c, 0xc2, 0x48, 0x4e, 0xcc, 0xa5, 0xd4, 0xf7, 0x25, - 0xd5, 0x0d, 0x05, 0x27, 0x9b, 0x26, 0xa0, 0x14, 0xd0, 0x6e, 0xc1, 0x7f, 0xe1, 0x53, 0x43, 0xa7, 0x05, 0x58, 0x6a, - 0xbb, 0x01, 0xff, 0x85, 0x7e, 0xb1, 0x7d, 0x44, 0xfd, 0xc0, 0x3c, 0x38, 0x98, 0xb5, 0x95, 0x31, 0x20, 0x22, 0x71, - 0x05, 0x79, 0x24, 0xf8, 0x41, 0xb1, 0xa7, 0xcb, 0xc4, 0x81, 0x33, 0xc5, 0xc5, 0x52, 0x6a, 0x33, 0xf3, 0xda, 0x6f, - 0xa9, 0x89, 0x37, 0x51, 0x12, 0x15, 0xb6, 0x43, 0x1a, 0xbd, 0xa4, 0x8c, 0xa9, 0x82, 0x0d, 0xd1, 0x7d, 0xdd, 0x04, - 0x53, 0xe0, 0x4d, 0x55, 0x05, 0x44, 0xa8, 0xbd, 0xc8, 0xf2, 0xfc, 0xa6, 0x0b, 0xac, 0x2e, 0xf8, 0xd4, 0x98, 0x66, - 0x17, 0xac, 0xe4, 0x6a, 0x26, 0x7d, 0xe6, 0xed, 0x40, 0x0b, 0x79, 0x97, 0x97, 0x45, 0x2b, 0x74, 0x3d, 0x88, 0x16, - 0xfe, 0x41, 0x73, 0x3c, 0x7a, 0xb6, 0xad, 0xa6, 0x36, 0xfb, 0x5a, 0x8b, 0x05, 0x32, 0x10, 0x0d, 0x7d, 0xa1, 0x62, - 0x14, 0xee, 0x2a, 0xcd, 0xd5, 0x6a, 0x5f, 0x95, 0x41, 0x02, 0x13, 0x41, 0xd6, 0xb2, 0xf0, 0x1e, 0xdd, 0xab, 0x47, - 0x9a, 0x57, 0x12, 0x3c, 0x73, 0xf1, 0x17, 0x00, 0x42, 0x79, 0x92, 0x90, 0x03, 0x72, 0x00, 0x7f, 0x4b, 0x51, 0x2a, - 0x0d, 0xf0, 0xcf, 0xea, 0x72, 0x6c, 0xeb, 0xfb, 0x3b, 0xad, 0x62, 0x70, 0xfd, 0xf9, 0xba, 0xeb, 0x59, 0x3b, 0xc4, - 0x39, 0xb7, 0xd5, 0x6b, 0xcb, 0x34, 0x8f, 0x91, 0xba, 0x06, 0xe0, 0x4e, 0xa4, 0x47, 0x20, 0x92, 0x99, 0x68, 0x90, - 0xb3, 0xe7, 0x7c, 0x3c, 0x15, 0x8f, 0x49, 0x7b, 0xb9, 0xef, 0x9b, 0x0b, 0x7d, 0x30, 0xc6, 0xbe, 0x05, 0x0d, 0xe2, - 0xa3, 0xd5, 0xd6, 0x0a, 0xc4, 0x7a, 0xa7, 0xd4, 0x87, 0x6e, 0x8c, 0x82, 0x0e, 0x1e, 0x71, 0x23, 0x17, 0x1c, 0xdb, - 0x5d, 0x5b, 0x4f, 0xe9, 0x2b, 0x00, 0x73, 0x1d, 0xa8, 0x64, 0x18, 0xa4, 0x2e, 0x13, 0x85, 0x49, 0x7e, 0x99, 0x90, - 0x84, 0x88, 0xea, 0x6c, 0x39, 0x4a, 0x95, 0x69, 0x01, 0x97, 0x19, 0x19, 0x60, 0x36, 0x69, 0xd6, 0x4f, 0x2e, 0x5f, - 0x62, 0x18, 0x01, 0xf1, 0x33, 0xfa, 0xb1, 0x56, 0x89, 0x97, 0x8c, 0xee, 0x1c, 0x75, 0x83, 0x2a, 0xc9, 0x5c, 0xbf, - 0xb9, 0x9d, 0x45, 0xca, 0xbc, 0x60, 0xb8, 0x5d, 0xa5, 0xf9, 0x87, 0xb0, 0x4e, 0xf0, 0xdb, 0x00, 0x95, 0xf4, 0xa9, - 0xf0, 0xa2, 0x11, 0x40, 0xa8, 0xef, 0x55, 0x19, 0x9f, 0x0a, 0x2f, 0x1b, 0xed, 0x58, 0x46, 0x29, 0x54, 0x17, 0xcc, - 0x6e, 0x4d, 0x17, 0xa2, 0x5b, 0x55, 0x03, 0x6d, 0xe0, 0xda, 0x15, 0x52, 0xba, 0x81, 0x6a, 0x57, 0x6e, 0x58, 0x80, - 0x68, 0x33, 0x11, 0x18, 0x2e, 0xff, 0x3e, 0x7f, 0xa9, 0x62, 0x78, 0xfa, 0xfd, 0xd0, 0x3b, 0xec, 0x82, 0x68, 0xb4, - 0xbb, 0x66, 0xfb, 0x20, 0x1a, 0xed, 0xaf, 0x1b, 0x46, 0xbf, 0x9f, 0xd1, 0xef, 0x67, 0x0d, 0xe8, 0x48, 0x84, 0x09, - 0xb3, 0xd7, 0x6f, 0xd4, 0xf2, 0x95, 0x5a, 0xbf, 0x53, 0xcb, 0x97, 0x6a, 0x78, 0xeb, 0x40, 0x12, 0x41, 0x64, 0xa9, - 0x6a, 0x1e, 0x24, 0x45, 0xaa, 0xa5, 0xcb, 0x31, 0x5a, 0x8c, 0xa8, 0xa5, 0xac, 0x39, 0xd5, 0x89, 0xb4, 0x73, 0x50, - 0x32, 0xc0, 0xd1, 0xe2, 0xaa, 0xc6, 0x74, 0xb3, 0xa2, 0x25, 0x10, 0x23, 0xac, 0x6c, 0xcb, 0xc5, 0x4d, 0xea, 0xa3, - 0x2b, 0xf2, 0x6d, 0xcb, 0x95, 0x6f, 0x5b, 0xc1, 0xab, 0xaf, 0x28, 0x94, 0x4b, 0xae, 0x95, 0xed, 0xd3, 0x42, 0x29, - 0x94, 0x71, 0x0d, 0xb6, 0xf6, 0x4d, 0x60, 0xc8, 0x7c, 0xa4, 0xa8, 0xb1, 0xbd, 0x68, 0x94, 0x43, 0x90, 0xad, 0x83, - 0x51, 0xa7, 0x2c, 0x58, 0x7c, 0xbb, 0x43, 0x06, 0x32, 0xd0, 0x51, 0xd5, 0xc6, 0xab, 0x9d, 0x95, 0xfe, 0xb0, 0xbc, - 0x7a, 0xc6, 0x12, 0x2b, 0x9d, 0xfc, 0xa6, 0x42, 0x7f, 0x10, 0xa2, 0x6f, 0xca, 0x96, 0x83, 0x17, 0x5d, 0x6c, 0x65, - 0x40, 0xbc, 0x61, 0x7a, 0x6f, 0x6b, 0x25, 0xcb, 0x5d, 0x53, 0xbe, 0x98, 0xf1, 0x84, 0xe3, 0xe8, 0xcb, 0xd5, 0x22, - 0xac, 0xd5, 0x22, 0x3b, 0x01, 0x1e, 0x5a, 0xab, 0xa5, 0x90, 0xab, 0x45, 0x38, 0x33, 0x5d, 0xa8, 0x99, 0x9e, 0x81, - 0xe6, 0x51, 0xa8, 0x59, 0x9e, 0x00, 0x16, 0xbc, 0x30, 0x33, 0x5c, 0x98, 0x19, 0x8e, 0x43, 0x6a, 0x9c, 0x1e, 0xf4, - 0x5e, 0xe7, 0x9e, 0x5b, 0xee, 0x46, 0xa7, 0x61, 0xde, 0x4e, 0x36, 0x98, 0xd3, 0x83, 0x70, 0x02, 0xf1, 0x81, 0x25, - 0x02, 0xf4, 0x68, 0x58, 0x1d, 0x35, 0x54, 0x8e, 0xe2, 0xcb, 0x02, 0x90, 0x2c, 0x09, 0x40, 0xf2, 0xa0, 0xc6, 0xb9, - 0xb4, 0xfc, 0xba, 0x4a, 0x42, 0x8e, 0xc8, 0x78, 0x29, 0xed, 0xee, 0x09, 0x2f, 0x47, 0x46, 0x68, 0x9e, 0x2c, 0x52, - 0xaf, 0x62, 0x19, 0x1b, 0x23, 0x70, 0x51, 0xe8, 0x37, 0x79, 0xbf, 0x9f, 0x96, 0x5e, 0x45, 0xed, 0xfc, 0x04, 0xfe, - 0x96, 0xe7, 0xce, 0x22, 0x47, 0xc8, 0xab, 0x91, 0x49, 0x58, 0x5e, 0x2a, 0xf5, 0xf4, 0x25, 0xcc, 0xa0, 0xee, 0xde, - 0x28, 0x00, 0xd7, 0x42, 0x39, 0xd5, 0x96, 0x70, 0x65, 0xaa, 0x0c, 0xf6, 0x79, 0xc8, 0x65, 0x68, 0x87, 0x44, 0x1e, - 0x29, 0xac, 0xfb, 0xf6, 0xd5, 0xb3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x8f, 0x00, 0x73, 0x30, 0xf5, 0xa2, - 0x01, 0x2f, 0xd5, 0x9c, 0xf9, 0xe8, 0x55, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x53, 0xf9, 0xc8, 0xf8, - 0x96, 0xf9, 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, - 0x6c, 0x50, 0x09, 0xb6, 0x0d, 0xdf, 0x48, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, - 0x1b, 0xb3, 0x31, 0x2b, 0xd4, 0xce, 0x53, 0xc9, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, - 0x71, 0xce, 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, - 0xa6, 0x25, 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, - 0xe8, 0x95, 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x2b, - 0xfe, 0x42, 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd0, 0xb4, 0x04, - 0x75, 0x80, 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x25, 0xe7, 0xef, 0x6a, 0x43, - 0x84, 0x8c, 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, - 0xc0, 0xe3, 0xaa, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x9c, 0xf6, 0x4e, 0xd3, 0xb0, 0xc3, 0x17, 0xa0, 0x29, 0x86, 0x72, - 0x3c, 0xdf, 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xce, 0x42, 0xda, 0x96, - 0x63, 0xb4, 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xca, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x79, 0xd5, 0x63, 0x36, - 0xc9, 0x8a, 0x45, 0xae, 0x22, 0xce, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, - 0x41, 0xc9, 0x72, 0x59, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xde, 0x9c, - 0x53, 0xa8, 0x7d, 0xc5, 0xc3, 0xea, 0xfc, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, - 0x7c, 0xe7, 0xab, 0x74, 0x45, 0xa1, 0x3b, 0xce, 0x4c, 0x3c, 0x57, 0x81, 0xb1, 0x6f, 0xed, 0x08, 0x0a, 0x87, 0xa6, - 0xeb, 0x80, 0xc3, 0x34, 0x3a, 0x61, 0xf1, 0x4f, 0xe9, 0x38, 0x79, 0x55, 0x2b, 0x44, 0x92, 0xbf, 0x0b, 0x17, 0x86, - 0xc4, 0x82, 0xbc, 0x24, 0xd4, 0x11, 0x19, 0xb1, 0x1a, 0x15, 0x1b, 0xa1, 0xa2, 0xe2, 0x14, 0x8f, 0xb7, 0x0a, 0x8a, - 0x4b, 0x51, 0xaa, 0x94, 0x8a, 0xdc, 0xa8, 0x14, 0x10, 0xcb, 0x06, 0xde, 0x2d, 0xe0, 0x00, 0x08, 0x3a, 0xcb, 0xfd, - 0xc6, 0x76, 0xb7, 0x91, 0xf9, 0xcc, 0x34, 0x4f, 0xab, 0x0f, 0xea, 0xef, 0xf7, 0x4b, 0x8c, 0xad, 0xf1, 0xf4, 0xf7, - 0x6d, 0x5a, 0x70, 0xf3, 0x37, 0x0c, 0xd1, 0x0a, 0x10, 0x31, 0x4b, 0x7b, 0x28, 0x64, 0xc1, 0x84, 0x65, 0xa8, 0xca, - 0x53, 0x8e, 0x7a, 0xd5, 0xe4, 0x0e, 0x20, 0xd4, 0xd0, 0xaf, 0x8d, 0x4e, 0x75, 0x55, 0x82, 0xf0, 0x7d, 0x57, 0xa8, - 0xc7, 0xe6, 0x80, 0x27, 0x03, 0xe0, 0xaf, 0xc8, 0x6b, 0x3d, 0xb6, 0x7f, 0xd0, 0x1b, 0xf5, 0x06, 0x08, 0xa2, 0x73, - 0x59, 0xf8, 0x27, 0x9c, 0xeb, 0xd4, 0x9f, 0x71, 0x21, 0x88, 0x6f, 0x3d, 0x09, 0xef, 0xc5, 0x45, 0x1a, 0x07, 0x17, - 0xbd, 0x81, 0xb9, 0x08, 0x14, 0x17, 0x69, 0x7e, 0x01, 0x61, 0xf9, 0x88, 0x89, 0x58, 0xb3, 0x15, 0xc0, 0x04, 0x96, - 0x3a, 0x0e, 0x59, 0x75, 0x6c, 0xbf, 0xff, 0x7a, 0x64, 0xc8, 0xd2, 0x11, 0x06, 0x46, 0xff, 0x06, 0x14, 0xa1, 0x12, - 0x96, 0x99, 0xed, 0xc1, 0xa4, 0xab, 0x3d, 0xab, 0xe7, 0xcd, 0x36, 0xef, 0xea, 0x1d, 0xab, 0x69, 0x15, 0x35, 0x2d, - 0xb7, 0x9a, 0x36, 0xa9, 0xa0, 0x66, 0xa2, 0xdf, 0xd7, 0xa0, 0xa8, 0xd5, 0x1c, 0xc0, 0xd8, 0x30, 0xf9, 0xf5, 0x2c, - 0x9f, 0xf7, 0xfb, 0x9e, 0x7c, 0x04, 0xbf, 0x90, 0xad, 0xcc, 0xad, 0xb1, 0x7c, 0xfa, 0x8a, 0x48, 0xcc, 0x0c, 0xcc, - 0xd1, 0xea, 0x04, 0xdf, 0xeb, 0x56, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x35, 0x0c, 0x9e, 0x27, 0x7c, 0x70, - 0x91, 0xa3, 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x6b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, - 0x78, 0x90, 0xfd, 0xfe, 0x1a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0x37, 0x75, 0x51, 0x56, 0xd0, 0xb1, - 0xf4, 0xf3, 0x4e, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x96, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, - 0x2e, 0x3e, 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0x67, 0xb8, 0xcf, 0x6f, 0x3c, 0xf0, 0x83, 0x99, 0xa5, - 0x73, 0x45, 0x9c, 0x51, 0xf9, 0xa3, 0xcf, 0x45, 0x9a, 0x53, 0x1e, 0xe0, 0x3e, 0x14, 0x73, 0xfb, 0x2d, 0x90, 0x7e, - 0xe8, 0x2d, 0x90, 0x7d, 0x74, 0xce, 0xc9, 0x6b, 0x40, 0xa4, 0x43, 0x18, 0xdc, 0x9c, 0x04, 0x1d, 0xab, 0x86, 0x77, - 0x16, 0xd8, 0x69, 0x2f, 0x8d, 0x7b, 0x69, 0x7e, 0x91, 0xf6, 0xfb, 0x06, 0x35, 0x33, 0x45, 0x38, 0x78, 0x9c, 0x91, - 0x8b, 0xa4, 0x05, 0x5b, 0x4a, 0xfb, 0xaf, 0x06, 0x8e, 0xa8, 0x10, 0xa0, 0xf9, 0xef, 0xc2, 0x7b, 0x02, 0x10, 0x9b, - 0xb4, 0x01, 0x57, 0x3d, 0xa6, 0xa3, 0xb1, 0x25, 0x51, 0xab, 0xce, 0x06, 0x48, 0x9c, 0x2a, 0xad, 0xa7, 0xdc, 0xac, - 0x29, 0x0c, 0x52, 0x65, 0xa1, 0x7e, 0x63, 0x3d, 0x99, 0xac, 0x72, 0x91, 0x11, 0x47, 0x65, 0x7a, 0x57, 0x33, 0x82, - 0xe9, 0xd2, 0xcf, 0x17, 0xb0, 0x64, 0xe3, 0x8f, 0x38, 0x79, 0x4b, 0xc0, 0xb1, 0x9d, 0xb5, 0xab, 0x6a, 0x97, 0xe3, - 0xd6, 0x6e, 0x0e, 0xf0, 0xbd, 0xde, 0x68, 0x34, 0xd2, 0xce, 0x71, 0x02, 0x86, 0xaa, 0xa7, 0x96, 0x42, 0x8f, 0xd5, - 0x0a, 0x50, 0xb7, 0x23, 0x97, 0x59, 0x32, 0x98, 0x2f, 0x8c, 0xe3, 0x97, 0xe6, 0xa3, 0x8f, 0x97, 0xca, 0xda, 0x75, - 0xc4, 0xd7, 0x7f, 0x94, 0xd5, 0xfa, 0x96, 0x77, 0x55, 0x13, 0xf0, 0x45, 0x15, 0x50, 0xfa, 0x0d, 0xef, 0xc9, 0xde, - 0xc5, 0xd7, 0x6e, 0xb1, 0x4b, 0xbe, 0xe5, 0x2d, 0xea, 0x3c, 0x5f, 0x39, 0xb8, 0x51, 0xa5, 0xdb, 0x7b, 0xc9, 0x02, - 0xd7, 0xde, 0x49, 0xd3, 0x58, 0xcf, 0xfc, 0xe8, 0x61, 0x11, 0xb2, 0x9d, 0x8f, 0xbd, 0xaf, 0x9a, 0xa7, 0x67, 0x0d, - 0xbd, 0x49, 0x0d, 0x7d, 0xec, 0x45, 0xd9, 0x3e, 0x35, 0x8d, 0xe8, 0x35, 0x6c, 0xe8, 0x63, 0x6f, 0xc9, 0xc9, 0x21, - 0x11, 0xe0, 0xd4, 0x98, 0x3f, 0x3e, 0x9c, 0xce, 0xf0, 0x77, 0x0c, 0xa8, 0x04, 0x62, 0x3e, 0x3f, 0xa6, 0x1d, 0x05, - 0x98, 0x51, 0xa5, 0xb7, 0xcf, 0x0f, 0x6c, 0xc7, 0xcb, 0x7a, 0x68, 0xe9, 0xdd, 0xb3, 0xa3, 0xdb, 0xf1, 0xaa, 0x1a, - 0x5f, 0xca, 0x21, 0xcf, 0xf3, 0xd9, 0x68, 0x34, 0x12, 0x06, 0x92, 0x3b, 0xd7, 0x1b, 0x58, 0x81, 0xb4, 0x2d, 0xaa, - 0x0f, 0xe5, 0xd2, 0xdb, 0xab, 0x43, 0x3b, 0xf7, 0x27, 0xd5, 0xf1, 0x58, 0x8c, 0xcc, 0x31, 0x9e, 0xfb, 0xc7, 0x63, - 0xa1, 0xe4, 0x28, 0x59, 0x4b, 0x10, 0x9d, 0xd2, 0x78, 0x2a, 0xeb, 0xb5, 0x13, 0x91, 0x57, 0x23, 0xce, 0x43, 0xf0, - 0x57, 0x2f, 0x67, 0xa5, 0xfe, 0x54, 0xf8, 0xe8, 0xa7, 0x4a, 0xe9, 0x05, 0xaf, 0x0a, 0x08, 0x11, 0xfb, 0xbb, 0x81, - 0x76, 0x50, 0x82, 0x43, 0x09, 0xf7, 0x1e, 0xaf, 0x93, 0xaf, 0xbc, 0x6a, 0x26, 0x63, 0x94, 0x7b, 0x83, 0x7c, 0xce, - 0x00, 0xa6, 0xd2, 0x67, 0xe0, 0x77, 0x09, 0x50, 0xa7, 0xf8, 0x14, 0x9d, 0xea, 0xcd, 0xc3, 0xa6, 0xeb, 0xd3, 0x12, - 0x45, 0x11, 0xdd, 0xf9, 0xf9, 0x18, 0x10, 0x3b, 0xbb, 0x36, 0x23, 0xed, 0xda, 0x6f, 0xd0, 0x60, 0x95, 0x26, 0xad, - 0x95, 0x53, 0xc2, 0x6e, 0x57, 0x23, 0x5b, 0xfa, 0x51, 0x0a, 0xc4, 0xca, 0x71, 0x22, 0x91, 0x3d, 0xd8, 0xc8, 0x09, - 0xdc, 0xa2, 0xbd, 0xa3, 0x03, 0x50, 0xb9, 0x51, 0x90, 0x5f, 0xcd, 0x89, 0xdc, 0xf1, 0x7d, 0xef, 0xfb, 0x41, 0x3d, - 0xf8, 0xbe, 0x77, 0x91, 0x92, 0xdc, 0x11, 0x5e, 0xa8, 0x29, 0x21, 0xe2, 0x8b, 0xef, 0x07, 0xd5, 0x00, 0xcf, 0x12, - 0x2d, 0xd2, 0x22, 0xa1, 0x5a, 0x5d, 0xe3, 0x26, 0xbc, 0x48, 0x24, 0xf7, 0xd0, 0xbe, 0xf3, 0x88, 0x58, 0x00, 0x32, - 0x16, 0x9f, 0xcd, 0x1b, 0x0a, 0x75, 0x37, 0x31, 0x5b, 0x74, 0x97, 0xc5, 0x7e, 0x7f, 0x93, 0xa7, 0x75, 0x4f, 0xc7, - 0xc7, 0xe0, 0x0b, 0x52, 0x4d, 0x80, 0x47, 0xfb, 0x2b, 0x73, 0xbc, 0x7a, 0xb5, 0x39, 0x52, 0x16, 0xaa, 0x44, 0xfd, - 0x16, 0xab, 0x59, 0x0f, 0x61, 0xb8, 0xb3, 0xcc, 0x58, 0xdb, 0x0b, 0x9e, 0xcb, 0x59, 0x15, 0xdb, 0xe5, 0xf8, 0x8a, - 0xa5, 0x36, 0x97, 0xa8, 0x1c, 0xad, 0xc7, 0xda, 0x14, 0x23, 0xbf, 0x52, 0x48, 0x94, 0x45, 0xc7, 0xd6, 0x42, 0x01, - 0xf1, 0x02, 0xf4, 0x25, 0x7b, 0xd3, 0x00, 0xeb, 0x8d, 0x5e, 0x45, 0x84, 0x96, 0x8f, 0x54, 0x78, 0x9b, 0x9b, 0x2a, - 0xb3, 0xb2, 0x59, 0xb4, 0xfb, 0x29, 0xe7, 0x39, 0x82, 0xd5, 0x1b, 0xb5, 0x47, 0x01, 0x6a, 0x0f, 0x2d, 0x94, 0x01, - 0xa4, 0x34, 0xcd, 0x00, 0x90, 0x01, 0x40, 0xa6, 0x8a, 0xf8, 0x4c, 0x80, 0x4a, 0x5b, 0xdd, 0x28, 0x70, 0x22, 0xbd, - 0x02, 0x9a, 0x05, 0x56, 0xfa, 0x48, 0x41, 0x06, 0x8b, 0x2d, 0x02, 0xb0, 0x72, 0xe4, 0x0c, 0xd3, 0x18, 0xb2, 0x8d, - 0x26, 0x2e, 0x49, 0xf3, 0xfb, 0x30, 0x4b, 0x25, 0x9e, 0xc4, 0x8f, 0xb2, 0xc6, 0x08, 0x00, 0xa4, 0xef, 0xd3, 0x8b, - 0x22, 0x8b, 0x09, 0x07, 0xce, 0x7a, 0xea, 0xa0, 0xa8, 0xc9, 0xb9, 0xd6, 0xb4, 0x7a, 0x56, 0x9b, 0x3c, 0x64, 0x81, - 0xce, 0x1e, 0x8c, 0x49, 0x2d, 0xdf, 0xf3, 0xc8, 0xfe, 0xca, 0xe9, 0x8c, 0xf0, 0x5d, 0x77, 0x70, 0xea, 0xbf, 0xdb, - 0x1a, 0x98, 0x98, 0x12, 0x80, 0x8d, 0xc1, 0xd1, 0x84, 0xf8, 0x9d, 0x8e, 0xc9, 0xd4, 0x26, 0x45, 0x20, 0xf0, 0x10, - 0xbc, 0x82, 0xeb, 0x0b, 0x19, 0x30, 0x20, 0x68, 0x3b, 0x8b, 0x3c, 0x4d, 0x00, 0x4e, 0xbc, 0xe0, 0x3b, 0x80, 0xe3, - 0xd4, 0xab, 0x42, 0xf6, 0xec, 0xa5, 0x98, 0xce, 0xe6, 0xc1, 0x43, 0x42, 0xfb, 0x17, 0x13, 0x7e, 0xd3, 0x5d, 0x25, - 0x57, 0xa6, 0xd6, 0xbd, 0x89, 0xae, 0x72, 0x95, 0xd3, 0xa7, 0x39, 0xc7, 0x30, 0x67, 0xb0, 0x0a, 0xc8, 0x39, 0x1b, - 0xf2, 0xe7, 0x97, 0x00, 0xd8, 0xb2, 0x16, 0x5e, 0xc4, 0x9f, 0x87, 0xb2, 0x5a, 0x00, 0xf7, 0xc8, 0x79, 0x64, 0x7e, - 0xf9, 0x6a, 0x3b, 0x94, 0x73, 0x8a, 0xc2, 0x58, 0xce, 0x4d, 0x4b, 0x8a, 0xd3, 0xa1, 0xa7, 0x60, 0x32, 0xb5, 0xe5, - 0xef, 0x5d, 0xe2, 0x32, 0x7b, 0x33, 0x09, 0xe7, 0xeb, 0xc8, 0xb6, 0xb5, 0xea, 0x1e, 0xba, 0x21, 0x18, 0xf4, 0x31, - 0x82, 0x96, 0xd5, 0x9b, 0x5f, 0x31, 0x18, 0x28, 0x6c, 0xdf, 0x9a, 0x6e, 0x5a, 0x74, 0x8a, 0x03, 0xce, 0xac, 0x75, - 0x8d, 0x4a, 0x55, 0x71, 0xe8, 0x25, 0xef, 0x96, 0x95, 0xdb, 0x65, 0xe9, 0x85, 0x20, 0x35, 0xea, 0x2a, 0x42, 0xa4, - 0x54, 0xec, 0xf0, 0x9e, 0xfc, 0x1a, 0x98, 0x78, 0x66, 0xe5, 0x28, 0x8d, 0xe7, 0x00, 0x13, 0xa4, 0xd0, 0x37, 0xe5, - 0x57, 0x80, 0x1b, 0xba, 0x88, 0xc2, 0xec, 0x4d, 0x5c, 0x05, 0xb5, 0xd5, 0xf4, 0x7b, 0x07, 0x27, 0xf6, 0xb2, 0xee, - 0xf7, 0x53, 0xa2, 0xf1, 0xc3, 0xd0, 0x0b, 0xfc, 0x7b, 0x3c, 0x3d, 0x34, 0x41, 0x6a, 0x5e, 0x79, 0x80, 0x57, 0x74, - 0xb9, 0xb5, 0x29, 0x57, 0x34, 0x2e, 0xe6, 0x35, 0x22, 0xc2, 0xa7, 0x8e, 0x62, 0xbb, 0xcd, 0x8f, 0x53, 0x1b, 0x83, - 0x41, 0x08, 0xf7, 0xad, 0x8c, 0xdf, 0x27, 0x5e, 0x35, 0x8b, 0xe6, 0xa0, 0x28, 0xcd, 0x34, 0x49, 0x48, 0x21, 0xbd, - 0x04, 0xe8, 0xa3, 0x41, 0xa8, 0xd5, 0x95, 0x7f, 0x24, 0x5e, 0xaa, 0xa6, 0xb5, 0x79, 0x8a, 0x35, 0x0a, 0xc4, 0x2c, - 0x9a, 0x37, 0x2c, 0xa3, 0x43, 0x52, 0x5d, 0x2e, 0x4d, 0x33, 0xfe, 0xb0, 0x9a, 0xa1, 0x5a, 0x71, 0xd2, 0x04, 0x35, - 0x4a, 0xb7, 0x70, 0x01, 0xfc, 0x1b, 0xdd, 0x71, 0x54, 0xa3, 0x48, 0xd1, 0x80, 0x4f, 0x20, 0xa6, 0xab, 0x30, 0x9b, - 0x27, 0xac, 0x35, 0x75, 0xcd, 0xe8, 0xf7, 0x65, 0x9c, 0x90, 0x49, 0x42, 0x72, 0x3e, 0x5c, 0xae, 0x1f, 0x49, 0x75, - 0x01, 0xa4, 0xca, 0x39, 0x9b, 0xf5, 0x7a, 0x73, 0xc0, 0xe8, 0x85, 0xf5, 0x0b, 0x1b, 0x57, 0x70, 0x79, 0x4d, 0x98, - 0xbb, 0xea, 0x47, 0x98, 0x65, 0x50, 0x05, 0xa4, 0xf9, 0xb1, 0xa0, 0xd3, 0x2b, 0x17, 0x88, 0xfa, 0xf5, 0x48, 0x5d, - 0x50, 0x66, 0xe9, 0xdc, 0x22, 0x02, 0x01, 0xaf, 0x61, 0xf5, 0x04, 0x92, 0x7d, 0xf9, 0xd8, 0xa7, 0x19, 0x05, 0xaa, - 0x23, 0x00, 0x65, 0xb3, 0x7e, 0x08, 0xfb, 0x07, 0x84, 0x13, 0xea, 0x6f, 0xde, 0xca, 0x59, 0x43, 0xf2, 0x40, 0xaa, - 0x09, 0x8f, 0xe1, 0xd4, 0x58, 0xe0, 0x4b, 0x8b, 0xde, 0x54, 0xf0, 0x9a, 0xe0, 0xb8, 0x17, 0x68, 0xed, 0x5b, 0xc0, - 0x11, 0x22, 0xb8, 0x0c, 0x4d, 0x9c, 0xf6, 0xf6, 0xbd, 0x00, 0x09, 0xcd, 0x2d, 0x9c, 0xeb, 0xb7, 0x2e, 0x68, 0x71, - 0x8a, 0x9c, 0x2c, 0xba, 0xc0, 0x40, 0x17, 0x64, 0xde, 0xf8, 0x67, 0x0e, 0x2b, 0x17, 0x20, 0x7b, 0xa9, 0x58, 0x49, - 0xc4, 0xb6, 0x57, 0x7f, 0x94, 0xca, 0x7e, 0x7b, 0x61, 0x4d, 0xe0, 0x97, 0x89, 0xfd, 0x12, 0x99, 0x7c, 0xd3, 0x53, - 0x93, 0xaf, 0x8c, 0x85, 0x4e, 0x2d, 0x83, 0x73, 0x7a, 0x62, 0x70, 0xee, 0xed, 0xad, 0xda, 0x94, 0x30, 0x14, 0x24, - 0x81, 0xa6, 0x4b, 0x0f, 0xeb, 0xa6, 0x3f, 0x3f, 0x69, 0xf1, 0x6b, 0xd5, 0xbe, 0x75, 0x3f, 0x0e, 0xb1, 0x8b, 0x5f, - 0x26, 0x9e, 0x61, 0x1f, 0xf5, 0x81, 0x03, 0x4c, 0x46, 0x4c, 0x5c, 0xf7, 0xfb, 0x50, 0xd8, 0x6c, 0x3c, 0x1f, 0xd5, - 0xc5, 0xcf, 0xc5, 0x03, 0x40, 0x39, 0x54, 0x60, 0x97, 0x43, 0x19, 0xca, 0x88, 0x4d, 0x6d, 0xb9, 0xe7, 0xf7, 0x97, - 0x61, 0x0e, 0xf2, 0x8e, 0xc6, 0xc4, 0xb9, 0x00, 0x31, 0x0c, 0xbe, 0xfe, 0xfd, 0x93, 0x43, 0xda, 0x7c, 0x7f, 0x01, - 0xdf, 0x1d, 0x5d, 0x7c, 0x40, 0x8e, 0x9b, 0x8b, 0x4d, 0x59, 0xdc, 0xa7, 0xb1, 0xb8, 0xf8, 0x1e, 0x52, 0xbf, 0xbf, - 0x28, 0xca, 0x8b, 0xef, 0x55, 0x65, 0xbe, 0xbf, 0xa0, 0x05, 0x37, 0xfa, 0xdd, 0x9a, 0x78, 0xff, 0xc8, 0x35, 0xed, - 0xd9, 0x12, 0xc2, 0xb1, 0xb4, 0xfa, 0x11, 0x94, 0x88, 0x8a, 0x14, 0x55, 0x86, 0xb2, 0x5a, 0x3b, 0xce, 0xfb, 0x44, - 0xc3, 0x63, 0xd3, 0x84, 0xc4, 0xd5, 0x12, 0xd6, 0xa1, 0x9e, 0x9d, 0x36, 0xc9, 0x8e, 0xf3, 0x40, 0x1d, 0x10, 0x15, - 0x7f, 0x5e, 0x8d, 0x76, 0xf4, 0x35, 0xf8, 0xd6, 0xf1, 0x58, 0x8d, 0xf6, 0xe6, 0xa7, 0x4f, 0xd6, 0x4a, 0x19, 0x6c, - 0xa4, 0x18, 0x85, 0x90, 0x28, 0x6e, 0xd7, 0x63, 0x00, 0xfc, 0xef, 0x1f, 0x8f, 0xf4, 0x7b, 0x2f, 0x7f, 0xab, 0xdd, - 0xd2, 0xaa, 0xe7, 0x87, 0x16, 0x61, 0xc6, 0xab, 0xda, 0xb0, 0xb3, 0x1d, 0x24, 0xa0, 0xf4, 0xa1, 0x69, 0x50, 0x53, - 0x44, 0x3f, 0x61, 0x35, 0xb1, 0x9c, 0xc3, 0x82, 0x94, 0x38, 0xc4, 0x70, 0x8c, 0x76, 0xe8, 0x71, 0xba, 0xa8, 0x79, - 0x2a, 0xdf, 0x21, 0xe3, 0xd6, 0xf7, 0x01, 0xc9, 0xa5, 0x70, 0xf9, 0xc1, 0x0b, 0x0d, 0x26, 0x7a, 0x91, 0x57, 0x45, - 0x26, 0x46, 0x82, 0x46, 0xf9, 0x0d, 0x89, 0x33, 0x17, 0x58, 0x8b, 0x0b, 0x85, 0x10, 0x16, 0x12, 0x2a, 0x77, 0x51, - 0x52, 0x7a, 0x70, 0xf1, 0xe4, 0x50, 0x36, 0xbf, 0x13, 0x26, 0xc4, 0x68, 0x01, 0x34, 0x38, 0xfb, 0x76, 0x79, 0x0f, - 0x61, 0x99, 0x7b, 0xbf, 0xbf, 0x59, 0xe5, 0x05, 0xc4, 0x65, 0x5e, 0x48, 0xc5, 0x6a, 0x79, 0x01, 0x34, 0x79, 0x22, - 0xbe, 0x08, 0x2b, 0x39, 0x0d, 0xaa, 0x8e, 0x62, 0xd5, 0x36, 0x5e, 0x56, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, - 0xdd, 0x67, 0xaf, 0x95, 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, - 0xe7, 0x26, 0xc8, 0x3f, 0xbe, 0x39, 0xa3, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, - 0x9b, 0x23, 0x35, 0x79, 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, - 0x67, 0x2b, 0x2a, 0x2f, 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xaa, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, - 0x62, 0x86, 0x29, 0xd6, 0x5f, 0xd8, 0xf2, 0xdb, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x6b, 0x16, 0xc2, - 0xf1, 0xb8, 0x9d, 0x14, 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0xc7, 0x63, 0x57, 0xcb, 0x36, 0xc2, 0x83, 0x87, 0xaa, - 0x85, 0xdb, 0x86, 0x55, 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, - 0x1b, 0x1b, 0xe0, 0x1a, 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, - 0x09, 0xa3, 0x15, 0xc2, 0xef, 0xa1, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, - 0x4a, 0xb1, 0x34, 0x6f, 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0xf3, 0xd0, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, - 0xcd, 0xe6, 0xc0, 0x7d, 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x67, 0xcb, 0xe3, - 0xf0, 0x2d, 0xfc, 0xcb, 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xcb, 0x15, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, - 0xad, 0xa8, 0x0d, 0x7f, 0xc3, 0xbf, 0x84, 0x7d, 0x84, 0xfd, 0x96, 0xe3, 0x4d, 0xd2, 0x10, 0x90, 0x09, 0xc4, 0x85, - 0x85, 0x20, 0xc1, 0xdf, 0x72, 0xc9, 0x3f, 0x27, 0x7c, 0xb6, 0x28, 0x81, 0xac, 0x0e, 0xa3, 0xf8, 0x84, 0x62, 0xa2, - 0x10, 0x86, 0x5b, 0x42, 0xef, 0xe8, 0xbf, 0x11, 0x25, 0xd9, 0xa4, 0xb2, 0x62, 0x3d, 0x90, 0x49, 0x12, 0x4c, 0xb0, - 0xf2, 0x42, 0xf9, 0xc2, 0xbd, 0x50, 0x6a, 0xad, 0x05, 0xad, 0x5f, 0xfe, 0x24, 0xf1, 0x0c, 0xe8, 0x1e, 0xc8, 0x18, - 0x74, 0x1b, 0x51, 0x4d, 0x72, 0x4c, 0x1f, 0xa5, 0xf3, 0x0c, 0x54, 0x40, 0x17, 0x9b, 0x2c, 0xac, 0x97, 0x45, 0xb9, - 0x6e, 0x85, 0x87, 0xca, 0xd2, 0x47, 0xea, 0x31, 0xe6, 0x85, 0x79, 0x72, 0x26, 0x1f, 0x3c, 0x02, 0x34, 0x3c, 0xca, - 0xd3, 0xaa, 0xa3, 0xb4, 0x7e, 0x60, 0x19, 0x30, 0x02, 0x67, 0xca, 0x80, 0x47, 0x58, 0x06, 0xe6, 0x69, 0x97, 0xa1, - 0x06, 0xb1, 0x46, 0xd5, 0x95, 0xda, 0x60, 0xce, 0x14, 0x25, 0x9f, 0x62, 0x69, 0x85, 0x31, 0x34, 0x75, 0xe5, 0x91, - 0xf5, 0x92, 0x13, 0xf6, 0x6c, 0x37, 0x90, 0x6e, 0x61, 0xab, 0xc0, 0x05, 0x5d, 0xcb, 0x12, 0xe5, 0xa2, 0x5b, 0x46, - 0x94, 0x89, 0x90, 0xfa, 0xd9, 0xc3, 0x99, 0x56, 0xfb, 0x8d, 0x9d, 0x74, 0x68, 0x8f, 0x14, 0xbd, 0x60, 0x20, 0x3e, - 0xed, 0x91, 0x52, 0xcf, 0x1a, 0xb9, 0x0c, 0x6c, 0xe9, 0x52, 0xd5, 0xf3, 0x5f, 0xa0, 0x7c, 0x07, 0x33, 0xe3, 0x6c, - 0xf6, 0xbb, 0xde, 0xdc, 0x9e, 0x1c, 0xea, 0xe6, 0x77, 0xd6, 0xeb, 0xc1, 0xd6, 0x20, 0x13, 0x5f, 0x28, 0xea, 0x29, - 0xab, 0x10, 0x2b, 0x32, 0xfb, 0x5f, 0xc2, 0xfb, 0x1d, 0xde, 0x1a, 0xa1, 0x59, 0x19, 0x0f, 0xf3, 0xd1, 0x93, 0x83, - 0x68, 0x7e, 0xef, 0x2c, 0xdb, 0xca, 0x55, 0xc9, 0x6c, 0xbf, 0x9f, 0x24, 0xcd, 0xd9, 0xe3, 0x35, 0x92, 0x3a, 0xc0, - 0xc7, 0xeb, 0x33, 0x7c, 0xa4, 0x12, 0x4a, 0x2d, 0xa8, 0x6a, 0xd0, 0xfa, 0xd8, 0xef, 0xad, 0xe7, 0xf4, 0xf1, 0x53, - 0x39, 0xdd, 0x92, 0x22, 0x8c, 0x1f, 0x18, 0x4c, 0xd9, 0x89, 0x53, 0x97, 0xaa, 0x19, 0xd2, 0xbb, 0x6e, 0x95, 0xd4, - 0x65, 0x8f, 0x12, 0x41, 0xa8, 0x83, 0xf5, 0x8b, 0xfd, 0x10, 0x66, 0xb6, 0xe8, 0x0f, 0x9b, 0xd5, 0x9c, 0x50, 0x10, - 0x01, 0xa2, 0x55, 0xde, 0x07, 0x4e, 0x49, 0xc2, 0xac, 0xb9, 0x21, 0xdd, 0x7a, 0x2b, 0xa5, 0xbd, 0x92, 0x02, 0xfa, - 0x65, 0x7e, 0x3c, 0xa2, 0xf9, 0xcd, 0xec, 0x5c, 0x95, 0xb4, 0xe5, 0x00, 0x22, 0x75, 0xde, 0xb4, 0x2f, 0x1d, 0x0e, - 0xfe, 0x83, 0xba, 0x12, 0xe5, 0x44, 0xd0, 0x51, 0xb4, 0x60, 0xb4, 0x5a, 0xb5, 0xab, 0xc8, 0xa6, 0x42, 0xb6, 0x24, - 0xc2, 0x89, 0x92, 0xbd, 0x12, 0xea, 0xa3, 0x5c, 0xed, 0x99, 0x86, 0xf8, 0x33, 0x01, 0x9b, 0x36, 0xf8, 0x5b, 0xe0, - 0x5e, 0x06, 0x67, 0xa6, 0x7d, 0x1a, 0x46, 0x40, 0x64, 0x0e, 0xc1, 0x7e, 0x7e, 0xd7, 0x83, 0x1c, 0x1e, 0x74, 0xa4, - 0xbf, 0xaa, 0x67, 0x05, 0x9e, 0xb9, 0x67, 0x9e, 0xbf, 0x3e, 0x93, 0x9e, 0x57, 0xf0, 0x40, 0x73, 0x1f, 0x66, 0xfc, - 0x45, 0x59, 0x86, 0xfb, 0xd1, 0xb2, 0x2c, 0xd6, 0x5e, 0xa4, 0xf7, 0xf1, 0x4c, 0x8a, 0x81, 0x44, 0x87, 0x99, 0xd1, - 0x55, 0xac, 0xe3, 0x1c, 0xc6, 0xbd, 0x3d, 0x09, 0x2b, 0xb4, 0x7f, 0x96, 0xd8, 0xeb, 0x02, 0x00, 0x1c, 0xb2, 0x06, - 0xad, 0xf0, 0x4e, 0xb7, 0xb7, 0x7b, 0x5c, 0x52, 0xa2, 0xb8, 0x51, 0xf3, 0xb3, 0x1a, 0x5a, 0x26, 0xa8, 0x65, 0xd6, - 0x9d, 0x4c, 0xa6, 0x48, 0x02, 0xdf, 0x86, 0xbd, 0x66, 0x79, 0x35, 0x6f, 0xe4, 0xf6, 0xf0, 0x2e, 0x5c, 0x8b, 0x58, - 0x5b, 0xd0, 0x49, 0x47, 0xc6, 0xe1, 0x5e, 0x68, 0x6e, 0xa4, 0x87, 0x27, 0x55, 0x12, 0x96, 0x22, 0x86, 0x5b, 0x20, - 0x3b, 0xa8, 0x6d, 0x25, 0x28, 0x81, 0x04, 0xf6, 0x43, 0x29, 0x96, 0xe9, 0x4e, 0x00, 0x98, 0x03, 0xff, 0x53, 0x1a, - 0xbb, 0xdd, 0x9d, 0x87, 0x78, 0xd5, 0xc8, 0xfb, 0x06, 0x21, 0xd8, 0x5f, 0x81, 0x9c, 0x06, 0x0c, 0x22, 0xc5, 0x48, - 0x16, 0x0c, 0x24, 0x00, 0x15, 0xdf, 0x80, 0x49, 0x6e, 0x5a, 0x79, 0x7e, 0x50, 0xe9, 0x0e, 0xa6, 0x7d, 0xd0, 0xbd, - 0xb8, 0xd6, 0x0c, 0x90, 0x7f, 0x27, 0x11, 0xff, 0x5b, 0xed, 0x95, 0xac, 0x62, 0x99, 0xdf, 0x98, 0x8b, 0x4e, 0x06, - 0x57, 0x0d, 0xe1, 0x17, 0xb3, 0x6c, 0xce, 0xa3, 0x59, 0xa6, 0x43, 0xfd, 0x8b, 0xe6, 0xa4, 0x14, 0xc0, 0x50, 0xc7, - 0x0b, 0xb0, 0xc6, 0xbb, 0xd2, 0x4d, 0x2b, 0x1e, 0x69, 0x8c, 0x51, 0x50, 0xa1, 0x83, 0xd0, 0xdf, 0x6a, 0x80, 0xd7, - 0x60, 0x92, 0x1b, 0x21, 0xf7, 0xc1, 0x05, 0xdd, 0xd0, 0x2d, 0xe7, 0x2e, 0x41, 0x4d, 0xaa, 0x96, 0x5f, 0x85, 0x50, - 0xef, 0x6a, 0xc9, 0xa5, 0xda, 0x7c, 0x6a, 0x94, 0x35, 0x82, 0x4c, 0x8e, 0xd2, 0xef, 0x53, 0x2e, 0xdc, 0xdc, 0x98, - 0xac, 0x8f, 0x47, 0xaf, 0xe0, 0xa6, 0xc6, 0x3f, 0x56, 0x92, 0x45, 0xd4, 0x1a, 0x12, 0x61, 0x6b, 0xb7, 0x42, 0xf7, - 0x1e, 0x37, 0x4a, 0xf3, 0x28, 0xdb, 0xc6, 0xa2, 0xf2, 0x7a, 0x09, 0x58, 0x8b, 0x7b, 0x40, 0x86, 0x4a, 0x4b, 0x3f, - 0x67, 0x05, 0x40, 0x06, 0x48, 0x61, 0xe3, 0x47, 0xa4, 0xbd, 0xfa, 0xe0, 0xa5, 0x7e, 0xbf, 0x6f, 0x4c, 0xf9, 0xef, - 0x1f, 0x72, 0x60, 0x26, 0x14, 0x65, 0xbd, 0x87, 0x09, 0x54, 0x79, 0xa9, 0x4f, 0xda, 0xb3, 0x9a, 0x3f, 0xdf, 0xd4, - 0x1e, 0x90, 0x5a, 0xf9, 0x16, 0x73, 0xd5, 0x2b, 0xfb, 0x62, 0x73, 0x48, 0xab, 0x5b, 0xa3, 0x71, 0x10, 0x2c, 0xad, - 0xde, 0x68, 0x95, 0x43, 0xd5, 0xf0, 0x1c, 0x44, 0x2a, 0xeb, 0xea, 0x9a, 0x3b, 0x57, 0xd7, 0x82, 0x23, 0x81, 0x6c, - 0xc9, 0x21, 0x2c, 0x8d, 0x85, 0xdc, 0x2b, 0x8f, 0xc7, 0xc2, 0xef, 0xf7, 0xd3, 0x59, 0x8e, 0x97, 0x16, 0xa0, 0x4c, - 0xdb, 0xd4, 0x5e, 0xe8, 0x1f, 0x8f, 0x3f, 0x82, 0xd7, 0x88, 0x7f, 0x3c, 0x96, 0xfd, 0xfe, 0x47, 0x73, 0x93, 0xb9, - 0x1c, 0x2b, 0xa5, 0xec, 0x35, 0x2a, 0xdd, 0xdf, 0x24, 0xbc, 0xf7, 0xbf, 0x47, 0xff, 0x7b, 0x74, 0xdd, 0x53, 0x01, - 0x60, 0x09, 0x9f, 0xe1, 0x0d, 0x9d, 0xa9, 0xcb, 0x39, 0x93, 0xee, 0xee, 0xca, 0x0f, 0xbd, 0xa7, 0xf1, 0xe1, 0x7b, - 0x73, 0xd3, 0xc6, 0x5f, 0xf3, 0x13, 0x4d, 0x42, 0xc7, 0x45, 0xff, 0x78, 0xfc, 0x94, 0x68, 0x7d, 0x5a, 0xaa, 0xf4, - 0x69, 0x0a, 0x3c, 0xc9, 0xb0, 0xe1, 0xba, 0x85, 0xe9, 0x68, 0x7e, 0xdc, 0x7c, 0x95, 0xbc, 0x38, 0x4b, 0xe1, 0xda, - 0x0b, 0x3a, 0x97, 0x29, 0x58, 0x57, 0x86, 0xe0, 0x66, 0x10, 0x40, 0xea, 0x10, 0xd2, 0xac, 0x69, 0xf8, 0x97, 0xdc, - 0x15, 0xbc, 0xb5, 0xc7, 0xbb, 0xc1, 0x88, 0x52, 0x47, 0xfa, 0xa4, 0x0d, 0xa1, 0x4b, 0x2a, 0xf9, 0x8f, 0x22, 0x8f, - 0x31, 0x66, 0xe3, 0x15, 0x91, 0x7d, 0x16, 0xf9, 0xcb, 0x02, 0x00, 0x8b, 0x00, 0x01, 0x39, 0x9d, 0x3b, 0x92, 0xf8, - 0xcf, 0xc9, 0xb7, 0x7f, 0x4c, 0x97, 0xf6, 0xa1, 0x2c, 0x56, 0xa5, 0xa8, 0xaa, 0x93, 0xd2, 0xf6, 0xb6, 0x5c, 0x0f, - 0xf4, 0xa1, 0xfd, 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, - 0x58, 0x3f, 0x7f, 0xd8, 0xbf, 0x89, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, - 0xc3, 0x54, 0xe2, 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0xbf, 0xe7, 0x30, 0xff, 0x75, - 0x7b, 0xb0, 0x3e, 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0xe7, 0xc2, 0x22, 0xf9, - 0xf5, 0xc9, 0x91, 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x89, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9d, 0xff, 0x95, 0x99, 0xff, - 0x03, 0x8c, 0x49, 0x28, 0x9e, 0x73, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0xcf, 0x81, - 0x83, 0xf9, 0x39, 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0xd7, 0x16, 0xcf, 0x95, - 0x5c, 0x10, 0xfa, 0xba, 0x0a, 0xb3, 0x71, 0x5d, 0x6c, 0x2b, 0x51, 0x6c, 0x21, 0x6c, 0x04, 0xd4, 0xb2, 0xd5, 0xb4, - 0xb6, 0x15, 0xb2, 0x3f, 0x89, 0x16, 0x6d, 0x97, 0xa1, 0x9a, 0x8c, 0xb2, 0x74, 0x33, 0x05, 0x52, 0xbd, 0x00, 0xce, - 0x22, 0xf3, 0xca, 0x3b, 0x67, 0x0f, 0xd8, 0xa1, 0xf1, 0x14, 0x18, 0x51, 0xe9, 0x8f, 0xaa, 0x31, 0x3a, 0x3d, 0xd1, - 0xef, 0x57, 0x53, 0x0a, 0xf9, 0xfa, 0x09, 0x30, 0xb9, 0x6a, 0xb9, 0x00, 0x7d, 0x19, 0xea, 0xa0, 0x12, 0xa5, 0x56, - 0x0c, 0x23, 0x16, 0x7e, 0x12, 0xc8, 0xde, 0x4c, 0x41, 0xcd, 0x2a, 0x4a, 0x42, 0x25, 0x2a, 0x25, 0x5b, 0x13, 0xd4, - 0xd2, 0xfb, 0xa2, 0xa8, 0x0f, 0x15, 0x38, 0x4a, 0x46, 0xda, 0x2c, 0xa7, 0xcc, 0xb8, 0x28, 0x73, 0xd1, 0x0f, 0xf6, - 0x2f, 0xc0, 0xf8, 0x92, 0xf9, 0x2c, 0xf7, 0x1d, 0x9d, 0xd3, 0x76, 0x5c, 0xa0, 0xcc, 0x2d, 0xa7, 0xad, 0x96, 0x3c, - 0x26, 0xef, 0x59, 0xb0, 0xed, 0xbf, 0x48, 0x90, 0x57, 0x11, 0xe6, 0x13, 0xaa, 0x6c, 0xfe, 0x9e, 0x7b, 0xc4, 0x3e, - 0xda, 0xe1, 0xc2, 0x44, 0xa4, 0xb7, 0x60, 0x49, 0x0c, 0xb3, 0x52, 0x84, 0xf1, 0x1e, 0xbc, 0x7f, 0xb6, 0x95, 0x18, - 0x5d, 0xa0, 0x93, 0xfb, 0xc5, 0x43, 0x5a, 0x27, 0x17, 0x6f, 0x5e, 0x5d, 0x7c, 0xdf, 0x1b, 0x14, 0xa3, 0x34, 0x1e, - 0xf4, 0xbe, 0xbf, 0x58, 0x6f, 0x01, 0x22, 0x53, 0x5c, 0xc4, 0x64, 0x4a, 0x13, 0xf1, 0x05, 0x19, 0x06, 0x2f, 0xea, - 0x44, 0x5c, 0xd0, 0xc4, 0x74, 0x5f, 0xa3, 0x34, 0xf9, 0x76, 0x14, 0xe6, 0xf0, 0x72, 0x29, 0xb6, 0x95, 0x88, 0xc1, - 0x4e, 0xa9, 0xe6, 0xd9, 0xc9, 0x59, 0x2c, 0x3d, 0x06, 0x5d, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, - 0x05, 0x84, 0x1e, 0xf0, 0xcc, 0xcf, 0xe3, 0x51, 0x24, 0x10, 0x6a, 0xc1, 0x9c, 0x4c, 0x23, 0xba, 0x21, 0xbd, 0xc4, - 0x3e, 0x03, 0xb3, 0x90, 0xd2, 0x3c, 0xb8, 0xb9, 0x5a, 0xb4, 0xdc, 0x39, 0x2b, 0x47, 0x61, 0xb5, 0x11, 0x51, 0x8d, - 0x54, 0xc7, 0xe0, 0xbc, 0x03, 0x11, 0x00, 0x8a, 0x11, 0x3c, 0xe3, 0x51, 0xbf, 0x1f, 0xa9, 0xa0, 0x9c, 0x84, 0x7e, - 0x51, 0xe8, 0x97, 0xc6, 0xa0, 0x8c, 0xf9, 0x97, 0x50, 0x13, 0x03, 0xd4, 0x3b, 0x1e, 0x2a, 0x8e, 0x00, 0x5c, 0xce, - 0x11, 0x33, 0xce, 0x7b, 0xdc, 0x45, 0xe3, 0x54, 0xbc, 0x13, 0xea, 0x3a, 0x58, 0x2a, 0xd4, 0x79, 0x53, 0x1f, 0xe9, - 0x39, 0x69, 0x12, 0x34, 0x88, 0x1b, 0x78, 0xbc, 0x1a, 0x02, 0xaa, 0xb5, 0x90, 0x7a, 0x0b, 0x9d, 0x52, 0xd5, 0x21, - 0xb0, 0x06, 0xb8, 0x44, 0x61, 0x3b, 0x61, 0x72, 0x44, 0xdb, 0xb2, 0x14, 0xf9, 0x09, 0x1b, 0xb4, 0x4b, 0x46, 0xa6, - 0x0e, 0x2e, 0x97, 0xcb, 0x89, 0xa8, 0x7f, 0xcd, 0xb7, 0x00, 0xce, 0x0b, 0xf9, 0xad, 0xdd, 0x6c, 0x99, 0x64, 0xbb, - 0xfe, 0x3f, 0xbc, 0x7d, 0x09, 0x77, 0xdb, 0x46, 0xb2, 0xee, 0x5f, 0x11, 0xf1, 0x1c, 0x06, 0x6d, 0x36, 0x29, 0x52, - 0xb1, 0x33, 0x09, 0xa8, 0x16, 0xaf, 0xe2, 0x25, 0x71, 0x26, 0x5e, 0x62, 0x39, 0x99, 0xcc, 0xf0, 0xf1, 0x2a, 0x10, - 0xd0, 0x12, 0x11, 0x43, 0x68, 0x06, 0x00, 0xb5, 0x84, 0xc4, 0x7f, 0x7f, 0xa7, 0xaa, 0x77, 0x10, 0x94, 0x3d, 0xf3, - 0xee, 0x7b, 0xc7, 0xe7, 0x58, 0x44, 0xa3, 0xd1, 0x7b, 0x57, 0x57, 0xd7, 0xf2, 0x55, 0x65, 0x63, 0x96, 0x94, 0xbc, - 0x5a, 0x89, 0xa2, 0xca, 0x6e, 0xf8, 0x4f, 0xe6, 0xa5, 0x1f, 0x40, 0x0a, 0xed, 0x48, 0x5f, 0xb7, 0xbb, 0xa3, 0xc4, - 0x38, 0xa6, 0x1c, 0xd7, 0x52, 0xe9, 0x5e, 0x8d, 0xaa, 0x13, 0x37, 0x5b, 0xe5, 0x5a, 0x66, 0x69, 0xca, 0x8b, 0x57, - 0x45, 0x9a, 0x25, 0x4e, 0x72, 0xac, 0x02, 0x54, 0xdb, 0xc8, 0x57, 0x36, 0x36, 0xf2, 0xf3, 0xac, 0xc2, 0x80, 0xc1, - 0x5e, 0xa3, 0x5a, 0xa1, 0xa6, 0x74, 0xe0, 0x0b, 0xf1, 0x1e, 0x23, 0x6e, 0xb3, 0x22, 0x01, 0x86, 0x1f, 0x13, 0xd5, - 0x25, 0x3d, 0x85, 0x28, 0x0f, 0x32, 0x1e, 0xf7, 0x73, 0x8e, 0x88, 0xd7, 0x46, 0x65, 0x0e, 0x4c, 0xb6, 0x52, 0x41, - 0x22, 0xd8, 0x5d, 0x36, 0x57, 0x8b, 0x68, 0x21, 0xef, 0x42, 0xbd, 0x78, 0xbb, 0xed, 0x25, 0x92, 0x0e, 0x58, 0xf9, - 0x69, 0xf0, 0x32, 0xce, 0x72, 0x9e, 0x1e, 0xd4, 0xe2, 0x40, 0x6e, 0xa8, 0x03, 0xe9, 0xcc, 0x01, 0x3b, 0xef, 0xcb, - 0xfa, 0x40, 0xad, 0xe9, 0x03, 0xd5, 0xce, 0x03, 0xb8, 0x60, 0xe0, 0xce, 0xbd, 0xca, 0x6e, 0x78, 0x71, 0x00, 0xca, - 0x40, 0x63, 0x3c, 0xd0, 0x54, 0xf5, 0x48, 0x4e, 0x8c, 0x0a, 0x5c, 0x9d, 0xa8, 0x83, 0x39, 0xa0, 0xdf, 0x03, 0x52, - 0x54, 0xeb, 0xed, 0x4a, 0x1d, 0xb4, 0x01, 0xfd, 0x69, 0xa9, 0xfb, 0xa0, 0xa2, 0xc5, 0xcb, 0x90, 0xc0, 0xde, 0x90, - 0x2a, 0xa4, 0x56, 0x2d, 0xab, 0x40, 0xf1, 0x86, 0xb3, 0x78, 0x77, 0xae, 0x25, 0x1b, 0xe7, 0x25, 0x02, 0x7b, 0x65, - 0x45, 0x1d, 0x67, 0xc5, 0xa9, 0x93, 0xca, 0x1b, 0xe5, 0x24, 0x53, 0x69, 0xdf, 0xb2, 0x82, 0xba, 0x3b, 0x44, 0xdf, - 0x22, 0xf5, 0x61, 0xf0, 0x22, 0xac, 0xc9, 0x8c, 0xf7, 0xfb, 0x62, 0x26, 0xa2, 0x62, 0x56, 0x1d, 0x16, 0x91, 0x44, - 0x68, 0xdb, 0x27, 0x02, 0x7a, 0x50, 0x02, 0xe4, 0x0a, 0x80, 0xea, 0x87, 0x84, 0x3f, 0x0f, 0x49, 0x7d, 0x3a, 0x85, - 0x3e, 0xa5, 0xb2, 0x5e, 0x71, 0x0a, 0xaa, 0x1b, 0x6f, 0x64, 0xbd, 0x0a, 0x5a, 0x3c, 0x96, 0x63, 0xb5, 0xa1, 0x6d, - 0x4e, 0x8d, 0x77, 0xbd, 0xde, 0x60, 0xd2, 0xe6, 0x42, 0xae, 0xc2, 0x90, 0x44, 0xb7, 0x85, 0x13, 0x3e, 0xc4, 0x60, - 0x65, 0xb5, 0x36, 0xbf, 0x8e, 0xfd, 0x91, 0x15, 0x29, 0xee, 0x67, 0x43, 0x9c, 0xbb, 0x78, 0x3c, 0xa7, 0xfa, 0x46, - 0x49, 0x8b, 0x74, 0x9b, 0xef, 0xd5, 0x65, 0x48, 0x51, 0x51, 0x4d, 0x1a, 0x55, 0x66, 0xd0, 0x7d, 0xdb, 0xbc, 0x55, - 0x3d, 0xc2, 0x04, 0x78, 0xa5, 0x32, 0xa8, 0x46, 0xe3, 0x81, 0x58, 0xd5, 0xa3, 0x72, 0x5d, 0x14, 0x88, 0x36, 0x0c, - 0x39, 0x66, 0x86, 0x90, 0x64, 0x7f, 0xf1, 0xef, 0x64, 0x70, 0x85, 0x32, 0xbe, 0xd5, 0x70, 0xde, 0xb5, 0xf1, 0xec, - 0x6e, 0x22, 0x37, 0x27, 0x16, 0xd6, 0xb8, 0x0f, 0xfe, 0x51, 0xab, 0x9d, 0x05, 0x94, 0x35, 0xad, 0x6a, 0x38, 0xdc, - 0xa3, 0x3a, 0x16, 0xa5, 0x06, 0x24, 0x76, 0xc8, 0x72, 0xd9, 0x3a, 0x66, 0xd0, 0x80, 0xfe, 0x2e, 0xbb, 0x5e, 0x5f, - 0x23, 0x6a, 0x5b, 0x81, 0xac, 0x93, 0x90, 0xfe, 0x25, 0xed, 0x51, 0x57, 0xf6, 0x54, 0xee, 0xb7, 0x6d, 0xaa, 0x1c, - 0x1a, 0x20, 0x79, 0xec, 0xe6, 0x2c, 0x90, 0x1d, 0x09, 0xa2, 0x40, 0x6e, 0xbd, 0x60, 0xea, 0x9c, 0x32, 0x65, 0x07, - 0xf2, 0x73, 0xa9, 0xcf, 0xb0, 0xcf, 0x38, 0x62, 0xf4, 0x52, 0x89, 0xc1, 0xd4, 0x47, 0x1b, 0xd5, 0xb4, 0x56, 0x80, - 0xaa, 0x9f, 0x6e, 0xe0, 0x4f, 0x54, 0x36, 0x68, 0xa8, 0x35, 0x12, 0x85, 0xa4, 0x89, 0x12, 0x3a, 0x96, 0x96, 0x2a, - 0x98, 0x42, 0x27, 0x91, 0x30, 0x04, 0x34, 0x4c, 0x88, 0x4a, 0x2a, 0xf1, 0xd6, 0x00, 0xce, 0x7c, 0xbc, 0xa8, 0xd6, - 0xa5, 0x32, 0x98, 0xfb, 0x21, 0xbe, 0xe1, 0xaf, 0x9e, 0x5b, 0xa3, 0xfa, 0x96, 0xb5, 0xbe, 0xa3, 0x05, 0xf9, 0x21, - 0xe4, 0x14, 0x1d, 0x98, 0xd8, 0xc9, 0x06, 0x0f, 0xe6, 0xa2, 0x51, 0xa1, 0x2e, 0xde, 0xaa, 0xf8, 0x2b, 0xca, 0x04, - 0xef, 0x01, 0x4f, 0x11, 0x65, 0x78, 0x58, 0x69, 0xab, 0x6a, 0x7c, 0x2a, 0x58, 0x4b, 0x0f, 0x56, 0xf2, 0x74, 0x9d, - 0xf0, 0x10, 0xf4, 0x48, 0x84, 0x9d, 0x84, 0xe5, 0x3c, 0x5e, 0xc0, 0x71, 0x52, 0x12, 0x50, 0x3b, 0xa8, 0x2b, 0xf8, - 0x7c, 0x81, 0xee, 0xaf, 0x02, 0x3d, 0xc0, 0xd0, 0x82, 0xd8, 0x0f, 0x7d, 0x3a, 0xba, 0x8e, 0x57, 0x9e, 0x8a, 0x84, - 0xcf, 0x4b, 0xb0, 0x1d, 0x92, 0xea, 0x29, 0xd0, 0x42, 0x25, 0x52, 0x3f, 0x0c, 0x7c, 0x87, 0x02, 0xbe, 0x56, 0x3a, - 0x40, 0x4d, 0x3f, 0x63, 0x9a, 0x1a, 0x67, 0xa8, 0x7c, 0xe6, 0xdc, 0x33, 0xa3, 0xe5, 0xcc, 0x80, 0x31, 0xa8, 0xdb, - 0x68, 0x8a, 0xe2, 0x9c, 0x7c, 0x16, 0x94, 0x71, 0x9a, 0xc5, 0x39, 0xf8, 0x6d, 0xc6, 0x25, 0x66, 0x4c, 0xe2, 0x9a, - 0x5f, 0x89, 0x12, 0xb4, 0xdd, 0xb9, 0x4c, 0x6d, 0x1a, 0x10, 0x90, 0xfd, 0x00, 0x56, 0x2f, 0x9e, 0x8e, 0xca, 0x7a, - 0x77, 0x29, 0x53, 0x88, 0xb2, 0x0a, 0xc1, 0xa6, 0x99, 0x2e, 0xd9, 0x69, 0x28, 0xb5, 0x39, 0x10, 0xdf, 0x08, 0x8d, - 0xfb, 0xa7, 0x61, 0x6c, 0x34, 0xc5, 0xc6, 0xee, 0x6d, 0xbb, 0xfd, 0xad, 0x70, 0xd2, 0x69, 0x4e, 0x7a, 0x8c, 0xfd, - 0x56, 0x84, 0xe5, 0xc8, 0x74, 0x84, 0xc0, 0x92, 0x73, 0x3e, 0x75, 0x5f, 0xd1, 0x62, 0x9e, 0x80, 0xe9, 0x88, 0x8a, - 0x90, 0x0b, 0x94, 0x1d, 0xa3, 0xb8, 0x03, 0x83, 0x0b, 0x66, 0x42, 0x10, 0x4b, 0x4f, 0x5d, 0x48, 0x96, 0x24, 0x65, - 0xf0, 0x3c, 0x75, 0x30, 0xe0, 0xd7, 0x4c, 0x9a, 0xbb, 0x48, 0xeb, 0xd3, 0x25, 0x99, 0xa6, 0xc8, 0x40, 0xac, 0xc3, - 0x4d, 0x96, 0x46, 0x89, 0x14, 0x91, 0x2d, 0xd1, 0x3f, 0x52, 0x53, 0x2c, 0x15, 0xae, 0x17, 0xa9, 0x12, 0xa1, 0xd5, - 0x3c, 0xc5, 0x93, 0x3a, 0x6d, 0xd2, 0x11, 0xc6, 0x9b, 0x04, 0xa5, 0x5c, 0x03, 0x03, 0x55, 0x50, 0xb5, 0x14, 0x36, - 0xe5, 0x76, 0xab, 0x2e, 0x56, 0xd5, 0x3c, 0x5e, 0xe0, 0xcb, 0x0a, 0x47, 0xf1, 0xef, 0xdc, 0x89, 0x35, 0x25, 0xb7, - 0x07, 0x35, 0x23, 0x4a, 0xe8, 0xdf, 0x39, 0x5c, 0x24, 0xbe, 0x13, 0x2a, 0xee, 0x1f, 0x5a, 0x84, 0x9c, 0xcb, 0x83, - 0x54, 0x73, 0x43, 0x3b, 0xc2, 0x7f, 0xcd, 0xf5, 0x69, 0x67, 0x74, 0x5f, 0xcd, 0xa8, 0xf0, 0x7b, 0x1d, 0x3c, 0x63, - 0xd4, 0x67, 0x03, 0x87, 0x15, 0xa2, 0xd0, 0x86, 0x9d, 0x14, 0x52, 0xb4, 0x30, 0x14, 0xf2, 0x2f, 0xa1, 0xd5, 0x09, - 0xb7, 0x66, 0x94, 0x05, 0xe3, 0xd3, 0xe2, 0xb8, 0x9a, 0x0e, 0x06, 0x05, 0xa9, 0xb5, 0x85, 0x1e, 0x5c, 0x0f, 0x1c, - 0xff, 0x1e, 0xb8, 0x85, 0x38, 0x70, 0xc8, 0xd5, 0x90, 0x6b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8f, 0x2a, 0x19, 0xbc, - 0x9a, 0xc8, 0x16, 0xfc, 0xbd, 0x08, 0x03, 0xf4, 0x49, 0x0a, 0xc0, 0x64, 0x30, 0xe5, 0x77, 0x20, 0x51, 0x3a, 0x97, - 0x37, 0xa4, 0x5f, 0x8a, 0x92, 0x5f, 0xf2, 0x92, 0x17, 0x89, 0x2d, 0xc0, 0xf0, 0x0e, 0xa6, 0xd7, 0x51, 0x4d, 0x25, - 0x10, 0xaf, 0xee, 0x71, 0xc4, 0xb5, 0xf7, 0x9f, 0xee, 0xb1, 0x01, 0x6a, 0x35, 0x8e, 0x0d, 0x2e, 0x73, 0x0c, 0x2e, - 0xe8, 0x4a, 0x62, 0xab, 0xa9, 0x86, 0x11, 0x81, 0x81, 0x0b, 0x38, 0x08, 0x4b, 0x24, 0xc7, 0x56, 0xf1, 0x9a, 0x78, - 0x52, 0xda, 0x07, 0x86, 0xa3, 0x4d, 0x72, 0x5c, 0x9b, 0x65, 0x3b, 0x81, 0xf3, 0x45, 0xe7, 0xa4, 0xe9, 0x58, 0x36, - 0x78, 0x9f, 0xd7, 0xe7, 0xd7, 0xfe, 0x21, 0xa1, 0x32, 0xd8, 0x0d, 0x6f, 0x07, 0xbb, 0xb1, 0xc2, 0xaf, 0x79, 0xb5, - 0x50, 0xf1, 0x59, 0xf4, 0x25, 0xcb, 0x6d, 0xad, 0x73, 0x4b, 0x12, 0x4a, 0x01, 0xed, 0xb2, 0x2c, 0xa8, 0x89, 0x00, - 0x74, 0x3f, 0xfc, 0x05, 0x42, 0x67, 0xf8, 0xdb, 0x63, 0x70, 0x45, 0x0a, 0xf7, 0x0e, 0x41, 0x65, 0x4c, 0x37, 0x77, - 0x6a, 0x03, 0xbe, 0x18, 0xf7, 0x67, 0x4c, 0x1d, 0xfd, 0x36, 0x13, 0xbb, 0xba, 0x6e, 0x87, 0x2c, 0xc3, 0x47, 0xb8, - 0x52, 0x00, 0x2c, 0x13, 0xfe, 0x62, 0x6c, 0x49, 0xf9, 0x09, 0xc0, 0xa9, 0xa9, 0x88, 0x3e, 0x41, 0xa0, 0xe1, 0x94, - 0x68, 0x39, 0xba, 0x91, 0x8e, 0x68, 0x1a, 0x69, 0x4d, 0xb5, 0x42, 0x7b, 0xeb, 0x61, 0x91, 0xd6, 0x34, 0x9c, 0xb8, - 0x0f, 0x8a, 0x79, 0x95, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0x51, 0x1f, 0x21, 0x2e, 0x61, 0x49, 0x14, 0x61, - 0x71, 0x4c, 0xf1, 0x63, 0x42, 0x37, 0xbe, 0xb6, 0xe9, 0x03, 0xd2, 0x5f, 0x5c, 0xb3, 0x6e, 0xca, 0xb2, 0x71, 0xed, - 0xa1, 0xe2, 0xc5, 0xd4, 0x0f, 0x7e, 0x98, 0xc8, 0x62, 0xdc, 0x2f, 0x6a, 0x57, 0x6a, 0x05, 0x30, 0xcc, 0x5d, 0xf5, - 0xf4, 0xfb, 0x7e, 0xb6, 0x1c, 0x08, 0x95, 0xdb, 0x19, 0x24, 0x7d, 0x2a, 0x9e, 0x1f, 0x1c, 0xd1, 0xca, 0x42, 0xcf, - 0x1d, 0x97, 0xc6, 0x87, 0xca, 0x6b, 0x53, 0x23, 0x5a, 0x23, 0x43, 0x65, 0xea, 0x80, 0xf5, 0xfd, 0x43, 0xb8, 0xbb, - 0xa8, 0x69, 0xa8, 0x74, 0xcf, 0x5d, 0x8b, 0x82, 0x13, 0x77, 0x80, 0xb1, 0xb8, 0x90, 0x34, 0x2a, 0x08, 0x93, 0x7a, - 0x34, 0x38, 0xc9, 0x5e, 0x5d, 0x9d, 0x9c, 0x29, 0xe6, 0x09, 0x6c, 0x54, 0xcb, 0xb6, 0xbf, 0xa2, 0x54, 0x97, 0x72, - 0x73, 0x45, 0xf1, 0x3d, 0xa4, 0xcd, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x33, 0x05, 0x17, 0xc6, 0xc1, 0xba, 0xe3, - 0x4e, 0xd9, 0x73, 0x45, 0x99, 0xc6, 0x06, 0x77, 0xed, 0x31, 0x26, 0xda, 0x7e, 0x77, 0xc9, 0x93, 0x8f, 0xc8, 0x82, - 0x7f, 0x97, 0x15, 0xe0, 0x99, 0x6c, 0x5f, 0xc9, 0xfc, 0x3f, 0xb8, 0x57, 0x5b, 0xf3, 0xce, 0x98, 0x7f, 0x3a, 0xd6, - 0xc3, 0x9d, 0xc3, 0xe4, 0x06, 0xe8, 0x0c, 0xe8, 0xe6, 0x5a, 0xa4, 0x1c, 0x90, 0x01, 0x8c, 0x45, 0x32, 0x1a, 0xf0, - 0xa1, 0x95, 0x65, 0xdb, 0x77, 0x5a, 0x5e, 0x10, 0xf6, 0x12, 0xb8, 0xe9, 0xfe, 0xda, 0xf4, 0xcc, 0xa9, 0x5a, 0x89, - 0xa2, 0x4b, 0x63, 0x63, 0x59, 0x2a, 0x81, 0xdd, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x78, 0x39, 0xcd, 0x0d, 0x75, 0xdb, - 0xd8, 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0x35, 0x22, 0xf4, 0x54, 0x8a, - 0xd0, 0xa7, 0xa9, 0xdf, 0x07, 0xb3, 0xaa, 0xd6, 0x5e, 0x9c, 0xa3, 0x41, 0xaa, 0x18, 0xf9, 0xb7, 0x37, 0xbc, 0xbc, - 0xcc, 0xc5, 0x2d, 0x60, 0x20, 0x93, 0x46, 0x2b, 0x2c, 0xaf, 0xc1, 0x9d, 0x1f, 0x1d, 0xc7, 0x19, 0xc0, 0x26, 0x41, - 0xb0, 0x56, 0x84, 0x47, 0x56, 0x89, 0x33, 0x00, 0x41, 0x76, 0x27, 0x4d, 0xc5, 0x73, 0x2d, 0x31, 0xa6, 0x2f, 0x70, - 0x57, 0x39, 0x3b, 0xd9, 0xe4, 0x66, 0xd1, 0xfb, 0x33, 0xac, 0x3a, 0x52, 0x19, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, - 0x06, 0x4d, 0x11, 0x52, 0x3e, 0x64, 0x4f, 0xda, 0xbf, 0x02, 0x1a, 0x9c, 0x67, 0xe9, 0x9d, 0xb1, 0xca, 0xdf, 0x28, - 0x21, 0x4e, 0x14, 0x53, 0x2b, 0xbe, 0x89, 0x12, 0x75, 0x7e, 0x26, 0xda, 0x0d, 0x04, 0x52, 0x7f, 0xc0, 0xa0, 0x1a, - 0x65, 0x98, 0xc0, 0x75, 0x20, 0x8a, 0xcd, 0x89, 0xea, 0x2d, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x01, 0x50, 0xef, 0xd8, - 0xfa, 0x08, 0x68, 0x96, 0xbe, 0x69, 0xad, 0x73, 0x4d, 0x28, 0xb4, 0x13, 0x98, 0x64, 0x90, 0xe4, 0x59, 0x67, 0x98, - 0xa0, 0xda, 0x8c, 0x49, 0xe7, 0x7d, 0x80, 0xee, 0xae, 0x45, 0x5d, 0x7c, 0xd3, 0xb9, 0x83, 0xf6, 0x71, 0xfd, 0x4a, - 0x8b, 0xec, 0xf1, 0xe7, 0x2d, 0x11, 0x16, 0x81, 0xb3, 0x56, 0xe7, 0xab, 0x47, 0x38, 0x30, 0x15, 0x99, 0x86, 0xbd, - 0x44, 0x2a, 0x59, 0xb6, 0xdb, 0x5e, 0x6f, 0xaf, 0x88, 0xab, 0xc7, 0x58, 0xed, 0xdc, 0xcc, 0xcd, 0x9d, 0x6a, 0x5d, - 0xec, 0xde, 0xb4, 0xdd, 0x14, 0x33, 0x6a, 0xad, 0xdd, 0xae, 0x39, 0x21, 0x4f, 0xbe, 0x15, 0xd5, 0x4a, 0x9d, 0xae, - 0x0d, 0xda, 0x21, 0x9e, 0x75, 0x91, 0xc1, 0x8d, 0xf2, 0xb9, 0x15, 0x3a, 0xc9, 0x38, 0xab, 0x56, 0x5d, 0xb0, 0xb9, - 0xe6, 0xf5, 0x52, 0xa4, 0x51, 0x45, 0xd1, 0xe6, 0x3c, 0x2a, 0x68, 0x22, 0xd6, 0x45, 0x1d, 0x89, 0x06, 0xf5, 0xa2, - 0x46, 0x63, 0x80, 0x80, 0x4c, 0xe7, 0xbe, 0x07, 0x55, 0x30, 0x1b, 0x8a, 0x48, 0x4c, 0xdf, 0x83, 0xa5, 0x7d, 0x01, - 0xfb, 0xa2, 0xd9, 0x57, 0x67, 0x8b, 0x6f, 0x75, 0x84, 0x60, 0x12, 0xb3, 0x07, 0xc2, 0xc0, 0xf9, 0xc6, 0x90, 0xd3, - 0x2e, 0x71, 0x99, 0xef, 0x96, 0xb0, 0x87, 0xdb, 0x15, 0xec, 0xc4, 0xce, 0x93, 0xe2, 0xe6, 0x4a, 0x76, 0x52, 0xce, - 0xc7, 0xa0, 0xfd, 0x12, 0xf2, 0xda, 0xa5, 0xb8, 0xf5, 0x78, 0x10, 0xd0, 0x60, 0x50, 0x6a, 0xfe, 0x75, 0xa2, 0x3d, - 0x3c, 0x69, 0x40, 0x90, 0x94, 0x83, 0x8b, 0xb6, 0x63, 0xf8, 0x3e, 0x99, 0x8a, 0x63, 0x8e, 0x16, 0xef, 0xd0, 0xea, - 0x04, 0xa2, 0x78, 0x81, 0xbd, 0x9b, 0x56, 0x15, 0x6a, 0x11, 0x94, 0xa3, 0xe5, 0x2f, 0x64, 0x75, 0x08, 0x28, 0xa4, - 0x7c, 0x45, 0xa1, 0x6c, 0x9d, 0x18, 0xea, 0xe1, 0x17, 0xf3, 0xc9, 0x42, 0xcd, 0xc0, 0x40, 0xcc, 0x8f, 0x16, 0x6a, - 0x16, 0x06, 0x62, 0xfe, 0xd5, 0xa2, 0xb1, 0xeb, 0x40, 0x11, 0x10, 0xc7, 0x85, 0xa3, 0x93, 0xd2, 0xca, 0x6c, 0x01, - 0xdd, 0x3c, 0x44, 0xd0, 0xff, 0x6e, 0x0e, 0x41, 0x2b, 0x17, 0xda, 0x91, 0x1b, 0xd0, 0x76, 0x1c, 0x02, 0x73, 0xc5, - 0xa4, 0x95, 0x0e, 0x40, 0x74, 0xcc, 0xc6, 0x60, 0x88, 0x2d, 0x3f, 0x38, 0x66, 0xe3, 0xa9, 0x4b, 0x82, 0x80, 0xd1, - 0xfd, 0x41, 0x43, 0x82, 0xdf, 0xe1, 0x55, 0xfa, 0x64, 0x83, 0xbe, 0x66, 0xce, 0xdd, 0xd0, 0xb9, 0xb8, 0x82, 0x53, - 0xb5, 0xbd, 0x27, 0xa1, 0x9b, 0x4c, 0x3b, 0x40, 0xaf, 0x26, 0x6e, 0xc8, 0xaf, 0x8c, 0x46, 0xa3, 0x62, 0x64, 0x00, - 0x20, 0x88, 0xe6, 0x1c, 0xfc, 0x9c, 0x86, 0xcb, 0x97, 0xb7, 0x9e, 0x4d, 0x31, 0x02, 0x5a, 0xc8, 0x44, 0xf3, 0x00, - 0x65, 0x55, 0x63, 0x68, 0x86, 0xde, 0x21, 0xc7, 0x0f, 0x0f, 0xbe, 0xce, 0xf8, 0x89, 0xc3, 0xb5, 0x87, 0x73, 0xe1, - 0xba, 0xac, 0x69, 0x99, 0x43, 0xe7, 0xd9, 0xc7, 0xf1, 0x1e, 0xc6, 0xc9, 0xa7, 0x59, 0x28, 0x67, 0xbc, 0xa6, 0xff, - 0x51, 0xe9, 0x7e, 0x87, 0x43, 0x4e, 0x57, 0xb0, 0xe2, 0x66, 0x75, 0xa8, 0xf9, 0x59, 0xe4, 0x8d, 0x23, 0xde, 0x90, - 0xa8, 0xee, 0x3e, 0xef, 0x4d, 0x98, 0xd2, 0x8e, 0x71, 0x00, 0x70, 0xa2, 0x56, 0x0d, 0xbb, 0xd2, 0xb8, 0x56, 0x07, - 0x31, 0x0c, 0x25, 0x6c, 0x95, 0x38, 0xaa, 0xa4, 0xbf, 0x01, 0x08, 0x8b, 0xa1, 0x38, 0xde, 0x1a, 0xd6, 0x07, 0xd8, - 0x0f, 0x55, 0xa0, 0x6e, 0x4e, 0x21, 0x67, 0x00, 0x90, 0x04, 0xdc, 0xd1, 0x53, 0x4d, 0x43, 0x65, 0x9b, 0xe3, 0xa1, - 0x65, 0x74, 0x05, 0x0f, 0xf4, 0xd4, 0x96, 0x0c, 0x8c, 0xab, 0x3c, 0xf6, 0x36, 0xfb, 0xdb, 0xa3, 0x54, 0xe4, 0x3b, - 0x9b, 0xd4, 0x34, 0xab, 0x46, 0x63, 0x1f, 0x47, 0xe8, 0x69, 0x05, 0x68, 0xbd, 0xb6, 0x54, 0xb4, 0xdf, 0x47, 0x31, - 0x6a, 0x5c, 0x4a, 0xb0, 0x0a, 0x1d, 0x09, 0x0e, 0x11, 0x46, 0x08, 0xfd, 0xbe, 0x08, 0x37, 0xae, 0x20, 0x83, 0x28, - 0xb8, 0x16, 0x15, 0x7f, 0xc8, 0xf2, 0xa2, 0x6d, 0xa9, 0xaa, 0x3e, 0x69, 0xda, 0x12, 0x78, 0x1d, 0x0e, 0xb0, 0x9d, - 0x7f, 0xea, 0x89, 0x5c, 0x2b, 0x1b, 0x25, 0x7c, 0x47, 0x5c, 0x0b, 0xa2, 0x9b, 0x46, 0xd7, 0xeb, 0xd9, 0x21, 0x5a, - 0x9a, 0xe2, 0xd0, 0x21, 0xfb, 0xdc, 0x3d, 0xb7, 0x65, 0x7c, 0xfb, 0x09, 0x72, 0xe7, 0x3b, 0x7b, 0x49, 0xc2, 0x20, - 0x6f, 0xd9, 0x40, 0xb1, 0x8e, 0xad, 0xa0, 0x00, 0xa3, 0xb6, 0xfc, 0x05, 0x74, 0x6c, 0x30, 0xa8, 0x09, 0x3e, 0x49, - 0x6c, 0x1b, 0x8f, 0xfc, 0x11, 0xe7, 0x86, 0x0e, 0xaf, 0x0d, 0x79, 0x20, 0x4e, 0x61, 0x9f, 0x28, 0x61, 0xff, 0x82, - 0x82, 0xee, 0x48, 0x2f, 0x57, 0x89, 0xab, 0xe2, 0x01, 0xaa, 0xec, 0x78, 0xae, 0xf9, 0x92, 0x16, 0x5a, 0x69, 0x64, - 0x15, 0x1d, 0x11, 0xb7, 0x60, 0x32, 0x66, 0xab, 0x6a, 0x54, 0x71, 0x2c, 0x50, 0xa4, 0x63, 0xce, 0x76, 0x0e, 0xd6, - 0x00, 0x78, 0x0a, 0x9b, 0x8b, 0x33, 0x2c, 0x28, 0xed, 0xb2, 0xa5, 0x2f, 0x81, 0x55, 0xf3, 0x30, 0xce, 0xcb, 0x8e, - 0x2f, 0x77, 0x47, 0xdb, 0x7b, 0xe8, 0x8d, 0xe8, 0x8d, 0xd7, 0xe7, 0x51, 0xd3, 0xcf, 0x9e, 0xe1, 0xda, 0x50, 0x90, - 0x07, 0x9a, 0xea, 0x10, 0x46, 0x8b, 0xc0, 0x34, 0xe5, 0x27, 0x6c, 0x3c, 0x1d, 0x0e, 0x35, 0x19, 0x74, 0x9a, 0x89, - 0xf1, 0xbf, 0x3e, 0x83, 0xd6, 0xe9, 0x89, 0xf3, 0x3e, 0x6d, 0x5f, 0x41, 0xeb, 0x3b, 0x94, 0xc9, 0x9d, 0x83, 0xe1, - 0x03, 0x2d, 0x98, 0x84, 0xa9, 0xc2, 0x1b, 0x22, 0x15, 0xec, 0xcd, 0xd2, 0x38, 0xec, 0x9b, 0x85, 0x42, 0x4b, 0x45, - 0xfc, 0x6a, 0x4d, 0xfc, 0xe4, 0x75, 0xe6, 0xdf, 0xa6, 0x7d, 0x72, 0x10, 0x4b, 0x43, 0x62, 0x24, 0xe2, 0x17, 0xa7, - 0xd2, 0x76, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x64, 0xec, 0x49, 0x8d, 0xa7, 0x86, 0xfb, 0x5e, 0xc7, - 0xac, 0xc3, 0x2c, 0x76, 0xb3, 0x46, 0x42, 0x61, 0x9c, 0x9a, 0xe0, 0x94, 0x62, 0x15, 0xc9, 0xe8, 0x78, 0xa6, 0x30, - 0x88, 0x2a, 0x29, 0x21, 0xd6, 0x94, 0xad, 0x85, 0x89, 0x5d, 0x67, 0x0b, 0x53, 0xd4, 0x45, 0xa8, 0x37, 0x03, 0x9d, - 0x05, 0x0d, 0xf9, 0x1d, 0x1a, 0xad, 0xa8, 0x9a, 0x04, 0x0c, 0xe3, 0x28, 0xd5, 0xf8, 0xb7, 0x08, 0xb5, 0x1e, 0x06, - 0x00, 0xb6, 0x79, 0x27, 0xb2, 0xa2, 0x7e, 0x55, 0x20, 0x04, 0x9a, 0xb5, 0x9f, 0x2a, 0xeb, 0x9d, 0x59, 0xd0, 0x8a, - 0x76, 0x73, 0xe5, 0x73, 0x81, 0x13, 0xaa, 0x53, 0x79, 0x81, 0x7a, 0x29, 0xca, 0xd7, 0x22, 0xe5, 0xad, 0xb8, 0x98, - 0x07, 0x82, 0x7d, 0xc8, 0x47, 0x70, 0x5e, 0xa1, 0x53, 0xb9, 0xde, 0x26, 0xd2, 0x2c, 0x49, 0x30, 0x16, 0x68, 0x9b, - 0x97, 0x60, 0x26, 0x14, 0x33, 0x86, 0x5f, 0x43, 0x70, 0xb1, 0x9d, 0x93, 0x70, 0xb3, 0x9f, 0x07, 0x86, 0xd0, 0xe4, - 0x55, 0x4b, 0x34, 0x6c, 0xec, 0x78, 0x1d, 0xb9, 0x26, 0xdc, 0x87, 0xb5, 0x58, 0x93, 0x31, 0xc6, 0x95, 0xb9, 0x91, - 0xf1, 0xa3, 0x05, 0x1e, 0x8c, 0x49, 0xeb, 0x4f, 0x20, 0xd3, 0x52, 0xca, 0x3a, 0x5f, 0x68, 0x31, 0x93, 0x4c, 0x74, - 0x6e, 0xdf, 0xf8, 0x2c, 0xef, 0x22, 0xf2, 0xb7, 0xf2, 0x7b, 0x92, 0x0f, 0xf7, 0xee, 0x83, 0xc4, 0x1a, 0x94, 0x46, - 0x5c, 0x5a, 0x94, 0xa7, 0x0f, 0x74, 0xdd, 0xa4, 0x88, 0xd3, 0xf3, 0x55, 0x5c, 0x56, 0x3c, 0x85, 0x4a, 0x15, 0x75, - 0x8b, 0x7a, 0x13, 0xb0, 0x37, 0x44, 0x92, 0x64, 0x2c, 0x8d, 0x8d, 0xd8, 0xc5, 0x23, 0x3d, 0x7b, 0xc3, 0x2c, 0xbd, - 0xac, 0xd1, 0x90, 0x96, 0x3a, 0x67, 0xa1, 0x94, 0xf9, 0x4b, 0xfe, 0x33, 0x68, 0x24, 0xe8, 0xa8, 0x4f, 0x31, 0x9e, - 0x01, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x08, 0x4a, 0xb3, 0x23, 0x76, 0xfc, 0xd4, 0xe4, 0xe1, 0x5d, - 0xc8, 0x3a, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0xa8, 0x1a, 0xc9, 0x19, 0x40, 0xd3, 0x41, 0x91, 0xf3, 0xb8, - 0x08, 0x66, 0x3d, 0x9d, 0x18, 0xf5, 0xb8, 0xfa, 0x05, 0x1a, 0x6a, 0xb7, 0x59, 0x59, 0x9e, 0xd5, 0xf7, 0x9f, 0xc3, - 0x81, 0x4d, 0x4d, 0x05, 0x3d, 0xde, 0xd4, 0xe2, 0xea, 0x4a, 0x76, 0xdb, 0x2d, 0x44, 0xcb, 0xe9, 0xbc, 0x6b, 0xe9, - 0xbc, 0x5e, 0xb0, 0x5e, 0x77, 0xba, 0x5e, 0xdc, 0x7e, 0x19, 0x1e, 0xc2, 0xda, 0xce, 0x27, 0x8a, 0x3f, 0xf3, 0xdb, - 0xee, 0xe2, 0x2d, 0x54, 0xb3, 0x00, 0x00, 0xd2, 0x83, 0x28, 0x58, 0x66, 0x29, 0x0f, 0xa8, 0xd8, 0xc7, 0x51, 0x96, - 0x52, 0x2f, 0x67, 0x18, 0x3f, 0x65, 0x1a, 0x6b, 0x9c, 0x15, 0xaa, 0xd0, 0xd8, 0xe8, 0x4e, 0x57, 0x19, 0x62, 0xfb, - 0x09, 0x9c, 0x2d, 0xc0, 0xfd, 0xd1, 0x43, 0xa1, 0xee, 0x4d, 0x5a, 0x9a, 0xa8, 0xf9, 0xae, 0x3d, 0x83, 0x8c, 0xe2, - 0x64, 0x95, 0x57, 0xd0, 0x8d, 0x3a, 0x6b, 0xa3, 0x4a, 0xdf, 0x43, 0xd4, 0xab, 0x18, 0x3c, 0xca, 0x5d, 0x5e, 0x1b, - 0x9d, 0x4c, 0x8b, 0x48, 0xb9, 0xf3, 0x93, 0x66, 0x99, 0xa5, 0x4a, 0x87, 0xed, 0x32, 0xec, 0xad, 0x31, 0xe9, 0x4d, - 0x48, 0x03, 0x23, 0xf1, 0xe9, 0x8c, 0x0a, 0x21, 0xa0, 0x2d, 0xc7, 0xdf, 0xe1, 0x33, 0x34, 0x4d, 0x81, 0xa5, 0x8a, - 0x5b, 0xd8, 0x0e, 0x9f, 0xff, 0x64, 0xd4, 0x02, 0x10, 0xc1, 0xca, 0xd5, 0xbb, 0x38, 0x25, 0x34, 0xe7, 0xca, 0x0c, - 0x00, 0x59, 0x50, 0xca, 0x2d, 0x3f, 0x25, 0xd3, 0xc1, 0x12, 0x45, 0xd9, 0xcb, 0xa9, 0x1b, 0x1d, 0x1b, 0x3f, 0xa4, - 0xe7, 0x02, 0xb6, 0x0b, 0xf9, 0xad, 0xbd, 0x7a, 0x89, 0x9a, 0x34, 0xa6, 0x59, 0x0f, 0xf0, 0xe5, 0x1a, 0x4d, 0x42, - 0x0b, 0xca, 0xa4, 0x29, 0x80, 0xc6, 0x4d, 0xd5, 0x0a, 0x26, 0xa5, 0x46, 0xc2, 0x96, 0x3a, 0x92, 0x65, 0xdf, 0x07, - 0xa7, 0xde, 0x23, 0xe8, 0x01, 0xf3, 0x08, 0xf4, 0xf4, 0x5f, 0xba, 0x6a, 0xff, 0x92, 0xa3, 0x93, 0xab, 0x26, 0x6a, - 0xfa, 0xbd, 0xb2, 0x23, 0x43, 0xca, 0xa5, 0x19, 0x08, 0x26, 0x1d, 0xf3, 0xd4, 0xd8, 0x3a, 0x46, 0x44, 0x0f, 0x9c, - 0x7d, 0xba, 0x5b, 0x4d, 0x2d, 0x00, 0xd1, 0xf1, 0xeb, 0x27, 0xaf, 0xae, 0xe3, 0x2b, 0x8d, 0xa2, 0xe4, 0x59, 0xc4, - 0x48, 0xd3, 0xbe, 0x5a, 0xc0, 0xe0, 0xfd, 0xf2, 0xfe, 0x27, 0x99, 0xa5, 0x71, 0x7b, 0xb0, 0x31, 0xa2, 0xaa, 0x5f, - 0x2a, 0x5e, 0xfa, 0x02, 0xac, 0x7d, 0x96, 0x28, 0x90, 0xfb, 0xbd, 0x49, 0xd3, 0xdf, 0x44, 0xde, 0xcd, 0x86, 0xf5, - 0xc6, 0x4d, 0xbb, 0xd4, 0x96, 0xec, 0xc8, 0x48, 0xe4, 0xf4, 0x62, 0xd0, 0xe3, 0x47, 0x2b, 0x8d, 0xd2, 0xb0, 0x41, - 0x55, 0x2a, 0x7e, 0xaf, 0x45, 0x70, 0xf2, 0x58, 0x95, 0x18, 0xd3, 0x80, 0xd9, 0x56, 0x36, 0x0a, 0xd4, 0x41, 0x2a, - 0x6d, 0x75, 0x14, 0xb6, 0xdf, 0x58, 0x49, 0xf5, 0xef, 0x7f, 0x6a, 0x43, 0x3e, 0x5f, 0x0a, 0x2a, 0x08, 0xd8, 0x19, - 0x78, 0x3d, 0x95, 0xc2, 0x40, 0x2a, 0xd8, 0x49, 0x05, 0x28, 0x5f, 0x44, 0x8e, 0xd5, 0x6e, 0x5f, 0xad, 0x1a, 0xa3, - 0x2d, 0x20, 0x34, 0x90, 0x1e, 0x5d, 0xf6, 0x71, 0x1b, 0xe3, 0x40, 0xe2, 0xc0, 0x09, 0xb6, 0x73, 0x75, 0x8d, 0x46, - 0x42, 0xf3, 0x87, 0x46, 0x03, 0x5e, 0xd3, 0x1a, 0x14, 0xea, 0x39, 0x8e, 0x86, 0xca, 0x0e, 0x29, 0x88, 0xd8, 0xa0, - 0x84, 0x7d, 0x7b, 0x3e, 0xd4, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x43, 0x85, 0xfd, 0xdc, 0x2e, 0x21, 0x63, 0xd5, 0x21, - 0xad, 0x3c, 0xc0, 0xf1, 0x42, 0xca, 0xfc, 0x2d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x6d, 0xc4, 0x02, 0x96, 0x04, 0xed, - 0xf5, 0x40, 0xdd, 0x32, 0x08, 0x75, 0x4c, 0x4f, 0x04, 0x3e, 0xa5, 0x5c, 0x7e, 0x5a, 0x92, 0x66, 0x5a, 0x32, 0x0b, - 0x7a, 0xe9, 0x5a, 0xf9, 0x15, 0xde, 0x47, 0xbb, 0x7b, 0x57, 0x5f, 0x58, 0xc7, 0x10, 0x0c, 0xbb, 0x72, 0x9b, 0xd3, - 0x50, 0x00, 0x36, 0x3c, 0x55, 0x65, 0xb9, 0x46, 0x4d, 0x64, 0x16, 0x87, 0x24, 0x02, 0xc9, 0xb6, 0xbf, 0xb9, 0xb5, - 0x60, 0xdb, 0x59, 0xa8, 0x9e, 0xfa, 0xcb, 0xd9, 0xee, 0x7b, 0x86, 0x97, 0x3b, 0x72, 0x6f, 0xdf, 0x86, 0xf2, 0x87, - 0xfd, 0xab, 0xe4, 0xff, 0xaa, 0x92, 0xfd, 0x56, 0x99, 0x4d, 0x5b, 0xbc, 0xdf, 0x75, 0xdc, 0x72, 0x8c, 0x06, 0x81, - 0x35, 0x05, 0x1a, 0xd2, 0x93, 0xc6, 0x34, 0x51, 0x21, 0x95, 0x19, 0xd3, 0x78, 0x74, 0x01, 0x9a, 0xc3, 0x74, 0x9e, - 0xc7, 0x00, 0x1c, 0xe0, 0x1e, 0x79, 0x84, 0xba, 0xa7, 0xf3, 0x3c, 0x38, 0x0f, 0x06, 0xc5, 0x20, 0x50, 0x9f, 0xd8, - 0xe6, 0x04, 0x0b, 0xd0, 0xb9, 0xc5, 0x0c, 0x82, 0x4d, 0x1a, 0x33, 0x87, 0xf8, 0x38, 0x99, 0x0e, 0x06, 0x31, 0xd9, - 0x00, 0x48, 0x5f, 0xbc, 0x30, 0xce, 0x41, 0xa5, 0x5a, 0x90, 0xad, 0xba, 0x4b, 0xbf, 0x62, 0xa7, 0xda, 0x69, 0xde, - 0xef, 0xe7, 0xf3, 0x62, 0x10, 0x78, 0x15, 0x96, 0xda, 0xfb, 0x8f, 0xfa, 0x5f, 0x6a, 0x9d, 0x34, 0xc1, 0x30, 0xb5, - 0xa7, 0xa8, 0x5e, 0x71, 0x34, 0xa3, 0xde, 0xed, 0x58, 0x2a, 0x5f, 0x40, 0x14, 0x0f, 0x0c, 0x59, 0x2b, 0xef, 0xce, - 0xc1, 0x6b, 0x73, 0xe3, 0xcd, 0x11, 0x05, 0xd8, 0xbe, 0x30, 0x4e, 0x28, 0x2e, 0xba, 0x6c, 0x88, 0x63, 0xb0, 0xd3, - 0xd5, 0x5b, 0x81, 0x56, 0xe3, 0xbd, 0x78, 0xd7, 0x6c, 0xfc, 0x8d, 0x38, 0x50, 0x65, 0x1e, 0x5c, 0x02, 0xe2, 0xec, - 0x41, 0x5c, 0x1f, 0x60, 0xa9, 0x07, 0xc1, 0xc0, 0x20, 0x87, 0xb4, 0xab, 0x55, 0x43, 0x11, 0xc9, 0xf3, 0x18, 0x0c, - 0x98, 0x74, 0x43, 0x1a, 0x32, 0xed, 0x95, 0x12, 0xd2, 0xc6, 0x58, 0x0b, 0x28, 0xc3, 0xe1, 0x6a, 0xc7, 0x6e, 0xd8, - 0x9e, 0x6e, 0x1d, 0x0a, 0x25, 0x8c, 0x5e, 0xdd, 0xf8, 0x87, 0x9a, 0xe7, 0x89, 0xa0, 0x06, 0x55, 0x6b, 0x3f, 0x1d, - 0x94, 0x27, 0xe5, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0xa2, 0xc0, 0x8b, 0xf6, 0x0e, 0xf2, 0x9c, 0xfe, 0x54, 0xfa, - 0x20, 0x7a, 0x6e, 0x19, 0x2e, 0xb4, 0x8f, 0x6b, 0x05, 0x32, 0x69, 0x3a, 0x9a, 0xda, 0xda, 0x1d, 0xde, 0x31, 0x81, - 0x7e, 0x53, 0x96, 0x52, 0x26, 0xba, 0x96, 0x25, 0x3b, 0xe9, 0xe5, 0xd2, 0x1b, 0x2a, 0x65, 0x27, 0xcb, 0x36, 0xe7, - 0x97, 0x7a, 0x09, 0xfd, 0xbe, 0x72, 0x07, 0xc2, 0x37, 0x72, 0xbd, 0x21, 0x2f, 0x1b, 0x22, 0x96, 0x43, 0xcc, 0xc0, - 0xf1, 0x42, 0x48, 0xd7, 0xee, 0xd2, 0x57, 0xd5, 0xed, 0x6c, 0xe5, 0x92, 0x16, 0x78, 0x2b, 0x05, 0x56, 0x91, 0x5a, - 0xbd, 0x9e, 0x4c, 0xdc, 0xf7, 0x51, 0x6c, 0x3e, 0x02, 0xb6, 0xd1, 0x3b, 0x1a, 0xbd, 0x5b, 0xc4, 0x06, 0x5f, 0x45, - 0x35, 0x2d, 0x39, 0x40, 0x70, 0xb7, 0x25, 0xb5, 0x34, 0xb3, 0x88, 0xfb, 0x92, 0x07, 0x68, 0xdf, 0xc5, 0xe1, 0x4c, - 0x2a, 0xc1, 0xb6, 0xae, 0x75, 0xce, 0x2a, 0x39, 0xa0, 0x9f, 0xe8, 0xf8, 0xa7, 0xd5, 0xa3, 0x22, 0x86, 0x55, 0x36, - 0x92, 0x56, 0x68, 0x0f, 0x4a, 0x97, 0x70, 0xf1, 0x05, 0x78, 0xd9, 0xde, 0xaf, 0xec, 0x3e, 0x5f, 0x62, 0xff, 0x30, - 0xaf, 0x9c, 0xe0, 0x91, 0xd3, 0x78, 0x73, 0x0f, 0xab, 0x3e, 0x57, 0x0a, 0xe1, 0x54, 0x4a, 0x43, 0x01, 0xc0, 0x20, - 0x09, 0x6a, 0xb8, 0xd2, 0xb6, 0x19, 0xa4, 0x34, 0x86, 0xdd, 0xad, 0xde, 0xe8, 0xff, 0x94, 0x0a, 0x17, 0xa0, 0x94, - 0x0d, 0xdc, 0x90, 0x75, 0xaa, 0xe5, 0x3a, 0xa6, 0xe0, 0xf9, 0x2e, 0x39, 0x02, 0x85, 0x1d, 0x18, 0x99, 0xd1, 0x84, - 0xfd, 0x82, 0xb7, 0xa1, 0x9c, 0xbd, 0x34, 0x92, 0x27, 0xbb, 0x2f, 0x69, 0x45, 0x13, 0x32, 0xad, 0xcc, 0xfe, 0x6d, - 0x6d, 0xd8, 0xe7, 0xa1, 0x18, 0x89, 0x02, 0x17, 0x07, 0x9d, 0x03, 0xd8, 0x1f, 0xe4, 0xd2, 0x36, 0x9f, 0x49, 0xbf, - 0x2f, 0xdf, 0x3f, 0xcb, 0xb3, 0xe4, 0xe3, 0xce, 0x7b, 0xcd, 0xd3, 0x2c, 0x19, 0x50, 0x89, 0x98, 0x1a, 0x57, 0xc5, - 0x70, 0xa9, 0x5c, 0x8c, 0x3d, 0x92, 0x11, 0xef, 0xa5, 0x0e, 0x31, 0x62, 0x7c, 0x91, 0x1d, 0x92, 0x92, 0xd3, 0x65, - 0xd3, 0xd9, 0x73, 0x25, 0x9a, 0x41, 0x63, 0xb8, 0x1d, 0xef, 0x25, 0xb5, 0x02, 0x64, 0x54, 0xe8, 0x9e, 0x01, 0xae, - 0xe1, 0xfe, 0x92, 0xf0, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xd8, 0x2b, 0x13, 0x12, 0x72, 0xe3, 0x00, 0x8b, 0xd8, 0x34, - 0x1f, 0x43, 0x01, 0x40, 0xad, 0x1a, 0xe9, 0x95, 0xbe, 0x24, 0x54, 0x26, 0x21, 0x18, 0x5d, 0x91, 0xf0, 0x2a, 0xa0, - 0x71, 0xa6, 0x13, 0x0d, 0x6c, 0x70, 0x40, 0x9f, 0xd7, 0x3a, 0x51, 0xdb, 0x90, 0x07, 0xb4, 0x36, 0x69, 0x00, 0x83, - 0x0f, 0x92, 0x24, 0xfa, 0x6a, 0xa9, 0x93, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x73, 0xe1, 0xf8, 0x58, 0x82, 0xff, - 0x91, 0x26, 0x82, 0x3f, 0x84, 0x02, 0x64, 0x8a, 0xaa, 0x62, 0x9a, 0xb1, 0x93, 0xac, 0xdb, 0x98, 0xc4, 0xf1, 0xb4, - 0xbb, 0x2b, 0xa5, 0x4b, 0x17, 0xf8, 0x95, 0x65, 0x88, 0x63, 0xfd, 0x2c, 0x5e, 0xb1, 0xd3, 0x90, 0x2b, 0xbc, 0xf4, - 0x67, 0xf1, 0x0a, 0x67, 0x88, 0xd6, 0xad, 0x04, 0x22, 0xfd, 0x57, 0x4d, 0xe0, 0x10, 0xfb, 0x09, 0x06, 0xb9, 0xa8, - 0x9d, 0x07, 0x02, 0x79, 0x5b, 0x41, 0x44, 0xfc, 0xec, 0x2a, 0x8c, 0x48, 0xbd, 0x93, 0xa4, 0xbf, 0xfc, 0x51, 0x64, - 0x85, 0xf3, 0x0d, 0x3c, 0xfa, 0xcd, 0x32, 0x29, 0xfa, 0x0b, 0x19, 0xcc, 0xc1, 0x7e, 0x22, 0xe3, 0x52, 0xd4, 0xee, - 0x13, 0x76, 0xc1, 0x89, 0xf1, 0xe0, 0xf4, 0x1a, 0x01, 0xf6, 0x6b, 0xf7, 0xc9, 0x19, 0xb3, 0xbf, 0x8c, 0x1b, 0x5f, - 0xa6, 0x23, 0x3e, 0xf0, 0xd1, 0x1d, 0xe5, 0xa3, 0x7b, 0x27, 0xd3, 0x1f, 0x1e, 0x94, 0xc8, 0xa8, 0xaa, 0xf9, 0x6a, - 0xc5, 0xd3, 0xd9, 0x5d, 0x12, 0x65, 0xa3, 0x9a, 0x17, 0x30, 0xbd, 0xe0, 0x78, 0x97, 0xac, 0x2f, 0xb2, 0xe4, 0x15, - 0xc4, 0x1e, 0x58, 0x09, 0x89, 0xc5, 0x0f, 0xcb, 0x4c, 0x2e, 0xe6, 0x42, 0xd4, 0xa2, 0xe0, 0xc1, 0xec, 0x26, 0x89, - 0xfe, 0x5a, 0x3a, 0x48, 0x6a, 0x7a, 0xca, 0x36, 0x8d, 0x25, 0xd4, 0xda, 0xd7, 0x91, 0x6e, 0x94, 0x05, 0x00, 0xdc, - 0xb3, 0x8b, 0x34, 0x12, 0xac, 0x1a, 0x4e, 0x1a, 0xc6, 0x75, 0x7a, 0x89, 0xa9, 0x71, 0xc3, 0x6a, 0x9a, 0x58, 0x0b, - 0x19, 0xd0, 0xfb, 0x03, 0x5e, 0x0e, 0x3e, 0x67, 0x45, 0x28, 0xa4, 0x35, 0x70, 0x71, 0x5c, 0xf6, 0xfb, 0xe2, 0xb8, - 0xdc, 0x6e, 0x8b, 0x93, 0xb8, 0xdf, 0x17, 0x27, 0xb1, 0xe6, 0x1f, 0xa4, 0x62, 0x5b, 0x9b, 0x1b, 0x24, 0x34, 0x17, - 0x10, 0xb5, 0x68, 0x04, 0x7f, 0x68, 0x96, 0xf3, 0x22, 0xca, 0x8f, 0x93, 0x7e, 0xbf, 0xb7, 0x9c, 0x55, 0x83, 0x7c, - 0x98, 0x44, 0xf9, 0x30, 0x71, 0x9c, 0x10, 0x7f, 0x75, 0x9c, 0x10, 0x25, 0x0d, 0x5c, 0xc1, 0x99, 0x01, 0x88, 0x02, - 0x2e, 0xfd, 0xa3, 0xaa, 0x96, 0x52, 0xd5, 0x12, 0xcb, 0x5a, 0x12, 0x55, 0x41, 0xc3, 0x6e, 0xca, 0xb0, 0xc0, 0x52, - 0xe8, 0x92, 0xfd, 0xb1, 0x04, 0x9e, 0x28, 0xe7, 0xf5, 0x06, 0x18, 0xd8, 0x08, 0xef, 0x1c, 0x3a, 0x9c, 0xc4, 0xba, - 0x61, 0x12, 0x32, 0xe9, 0x92, 0xae, 0xe8, 0x15, 0xf2, 0xb3, 0x97, 0x60, 0xb0, 0x74, 0xcc, 0xf2, 0xe9, 0x60, 0x70, - 0x49, 0x56, 0xac, 0x98, 0x87, 0xf1, 0x20, 0x5c, 0xcf, 0xf2, 0xe1, 0x65, 0x74, 0x49, 0xc8, 0x17, 0xe5, 0x82, 0xf6, - 0x56, 0xa3, 0xea, 0x63, 0x06, 0xc1, 0xfd, 0xd2, 0x59, 0x98, 0xe9, 0x38, 0x1f, 0xab, 0xd1, 0x1d, 0x5d, 0x41, 0xfc, - 0x1a, 0xb8, 0x91, 0x90, 0x08, 0x3a, 0x72, 0x45, 0x57, 0x74, 0x4d, 0x85, 0x9e, 0x61, 0x0c, 0xd1, 0x6d, 0x8e, 0x93, - 0x04, 0x1c, 0x93, 0x6d, 0xf1, 0xd1, 0x58, 0x16, 0xde, 0xf5, 0x1d, 0xa1, 0xbd, 0x5e, 0x62, 0x07, 0xe9, 0xbb, 0xf6, - 0x20, 0x01, 0x23, 0x32, 0x92, 0x03, 0xa5, 0x47, 0x46, 0x50, 0x3d, 0xa9, 0x38, 0x24, 0xb1, 0x3b, 0x24, 0x72, 0x1c, - 0x12, 0x77, 0x1c, 0x72, 0x35, 0x0e, 0xc8, 0xdd, 0x2f, 0xd9, 0x98, 0xa6, 0x6c, 0x4c, 0xd7, 0x72, 0x54, 0xe8, 0x35, - 0xbd, 0x50, 0xd4, 0xf1, 0x9c, 0xbd, 0x86, 0x03, 0x7b, 0x10, 0xe6, 0xb3, 0x78, 0xf8, 0x3a, 0x7a, 0x4d, 0xc8, 0x17, - 0x82, 0xde, 0xc8, 0x4b, 0x19, 0x84, 0x41, 0xbc, 0x06, 0xe7, 0x52, 0x1b, 0xea, 0xe4, 0x5a, 0xef, 0x38, 0x7c, 0xba, - 0xf2, 0x9e, 0x2e, 0x20, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x25, 0x2b, 0xe6, 0xe7, 0xe1, 0x98, 0x00, 0x0e, - 0x8f, 0x1a, 0xce, 0xcb, 0xd1, 0x1d, 0xbd, 0x1c, 0xdd, 0x13, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0xc7, 0x2c, 0x9e, 0x0e, - 0x06, 0x6b, 0xa4, 0xea, 0x32, 0xf7, 0x9a, 0x2c, 0xe8, 0x25, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x2b, 0xd6, 0x9a, 0x86, - 0xbf, 0x66, 0xf0, 0xf1, 0x3d, 0xbb, 0x1c, 0xdd, 0xd3, 0x3b, 0xf6, 0x7a, 0x3b, 0x9e, 0x02, 0x33, 0xb5, 0x9a, 0x85, - 0xf7, 0xc7, 0x57, 0xb3, 0x2b, 0x76, 0x1f, 0xdd, 0x9f, 0x40, 0x43, 0xaf, 0xd9, 0x3d, 0x02, 0x2e, 0xa5, 0x8f, 0x97, - 0x83, 0xd7, 0xe4, 0x70, 0x30, 0x48, 0x49, 0x14, 0xde, 0x84, 0x4e, 0x2b, 0x5f, 0xd3, 0x7b, 0x42, 0x57, 0xec, 0x0e, - 0x47, 0xe3, 0x8a, 0xe1, 0x07, 0x17, 0xec, 0xbe, 0xb9, 0x09, 0x9d, 0xdd, 0x1c, 0x57, 0x9d, 0x20, 0x46, 0xe8, 0x6b, - 0x60, 0x69, 0x96, 0x0d, 0x33, 0x01, 0x4f, 0xfa, 0x22, 0xa3, 0x44, 0xa1, 0x19, 0x88, 0xb3, 0x12, 0x10, 0x4b, 0xa2, - 0xee, 0x37, 0x1b, 0x9d, 0xc3, 0x72, 0xee, 0xf7, 0x7b, 0xb5, 0xa6, 0x07, 0x88, 0x9c, 0xd9, 0x49, 0x0f, 0x7a, 0x2e, - 0x3d, 0xc0, 0x4f, 0xd4, 0xaa, 0x41, 0x9c, 0xcc, 0xef, 0x96, 0xd1, 0xaf, 0x0e, 0x7d, 0xf8, 0xa1, 0x9b, 0xf2, 0x54, - 0xf9, 0xbf, 0x4f, 0x79, 0x8a, 0x3c, 0x7a, 0x5d, 0x3b, 0x20, 0x78, 0xce, 0x9a, 0x94, 0x1a, 0x89, 0x7a, 0x74, 0xbe, - 0x8a, 0x41, 0x1b, 0x89, 0xda, 0x06, 0xf5, 0x84, 0x16, 0x56, 0x10, 0x21, 0xe7, 0xe8, 0x39, 0x18, 0xa4, 0x42, 0xa8, - 0x1c, 0xb9, 0x28, 0xd1, 0x10, 0x24, 0x17, 0x15, 0x97, 0xe1, 0x73, 0x08, 0x95, 0xa7, 0x8f, 0x35, 0x11, 0xd6, 0xf4, - 0x18, 0x0c, 0xb0, 0x2d, 0xfc, 0xdb, 0x0e, 0xb9, 0xa8, 0xf8, 0x15, 0x9e, 0xcd, 0x6d, 0x82, 0x51, 0xb2, 0xb8, 0x15, - 0xda, 0x06, 0xb1, 0x1f, 0x0b, 0x82, 0xf5, 0x08, 0x1a, 0x8f, 0x2a, 0x7d, 0x44, 0xb8, 0x51, 0x7c, 0x24, 0x3d, 0x8d, - 0x35, 0x89, 0xe4, 0x48, 0x22, 0xf9, 0x00, 0x08, 0x27, 0x41, 0x7f, 0x71, 0xdb, 0x64, 0xdb, 0x42, 0xa2, 0xd1, 0x9f, - 0x96, 0x4c, 0xc9, 0xee, 0x65, 0x8f, 0x5d, 0x45, 0x90, 0x3d, 0xa6, 0xff, 0x74, 0xfa, 0xf0, 0xcf, 0x25, 0xce, 0xa0, - 0xf1, 0x7c, 0x91, 0x9d, 0x99, 0x39, 0x83, 0x1b, 0x39, 0x5d, 0x56, 0xae, 0xcb, 0x97, 0xfc, 0x80, 0xdf, 0xd5, 0xbc, - 0x48, 0xab, 0x83, 0x9f, 0xeb, 0x36, 0x9e, 0x53, 0xb5, 0x5e, 0xd9, 0x38, 0x2b, 0xd2, 0x38, 0xd5, 0x91, 0xba, 0x68, - 0x6b, 0x58, 0xcf, 0xef, 0x11, 0x75, 0x25, 0x2d, 0x47, 0x4f, 0x21, 0x56, 0x7e, 0xca, 0xe5, 0x3a, 0xcf, 0x7f, 0xda, - 0x49, 0xc5, 0x29, 0xf6, 0x53, 0x90, 0x2a, 0xb5, 0x5c, 0x40, 0xd5, 0x1c, 0xb5, 0xdc, 0x2d, 0xf5, 0x0e, 0xb0, 0x6e, - 0x9b, 0xf2, 0x63, 0x69, 0x76, 0xe1, 0x24, 0x7b, 0xf7, 0x27, 0x5d, 0x86, 0x01, 0xa3, 0x50, 0x66, 0xd5, 0xb5, 0xb2, - 0x2f, 0x34, 0x4e, 0xc3, 0x70, 0xe5, 0xc7, 0x0b, 0x48, 0x17, 0x30, 0x8e, 0x13, 0x25, 0x13, 0xe3, 0xf6, 0xa8, 0xad, - 0x50, 0x7d, 0xce, 0x56, 0x20, 0x60, 0xae, 0xe1, 0xec, 0xba, 0x8e, 0xb6, 0x3b, 0xe2, 0x94, 0x51, 0xb5, 0x8a, 0x8b, - 0xef, 0xe3, 0x55, 0x35, 0xb3, 0x43, 0x1b, 0xf9, 0x63, 0x3a, 0xfd, 0x7b, 0x12, 0xba, 0x85, 0x50, 0xb8, 0xe5, 0x16, - 0x46, 0x9e, 0xdc, 0x1e, 0x96, 0x71, 0x83, 0x5e, 0x89, 0x2b, 0xd5, 0x37, 0x2d, 0x85, 0x54, 0x23, 0x5f, 0xfb, 0x02, - 0x7a, 0x3d, 0xf6, 0x7e, 0x2a, 0xcc, 0xdb, 0x9e, 0x31, 0x97, 0x08, 0x56, 0xb2, 0xec, 0xf6, 0x9d, 0x1a, 0x53, 0x31, - 0x83, 0x2e, 0xb6, 0x9d, 0x45, 0xa7, 0x1b, 0xf9, 0xa7, 0x99, 0xfb, 0x65, 0xde, 0xe1, 0xae, 0xa8, 0xde, 0x02, 0x17, - 0x9a, 0x95, 0x55, 0xdd, 0x96, 0x0d, 0x9b, 0xc6, 0x6b, 0x59, 0x28, 0x36, 0xc0, 0xb0, 0xe7, 0xae, 0x85, 0x07, 0x88, - 0x9b, 0x70, 0xcf, 0x2e, 0x1a, 0xb8, 0x31, 0x7c, 0x5e, 0x49, 0xae, 0x2b, 0x8d, 0xbe, 0xf4, 0xc9, 0xd2, 0xaa, 0xe1, - 0x64, 0x31, 0xe2, 0x45, 0xba, 0x68, 0x32, 0xb3, 0x16, 0x3e, 0xe1, 0x65, 0x38, 0xe7, 0x0b, 0xad, 0x9b, 0x52, 0xa5, - 0x97, 0x2c, 0x56, 0x9d, 0xde, 0xac, 0x14, 0x56, 0x4a, 0xc4, 0x8d, 0x59, 0x26, 0x50, 0x96, 0xa2, 0x91, 0xc2, 0x9b, - 0xb2, 0x65, 0x2b, 0xa9, 0xe5, 0x3d, 0x73, 0x70, 0x1f, 0xfb, 0x01, 0x31, 0x91, 0x75, 0x60, 0x52, 0x34, 0x74, 0x40, - 0xbb, 0xea, 0xd2, 0x35, 0xa3, 0x1e, 0x0c, 0x72, 0x43, 0x12, 0xb1, 0x82, 0x14, 0x2b, 0x58, 0x37, 0xac, 0x9c, 0xe7, - 0x0b, 0x7a, 0xc9, 0xc4, 0x3c, 0x5d, 0xd0, 0x15, 0x13, 0xf3, 0x35, 0xde, 0x84, 0x2e, 0xe1, 0x84, 0x24, 0x9b, 0x58, - 0x2a, 0x60, 0x2f, 0xf1, 0xf2, 0x86, 0x67, 0xaa, 0xa2, 0x65, 0x57, 0x92, 0x03, 0x8c, 0x2f, 0xaa, 0x30, 0x2c, 0x86, - 0x97, 0x60, 0x2d, 0x71, 0x18, 0xae, 0xe6, 0x7c, 0x21, 0x7f, 0x43, 0xc0, 0xf9, 0x24, 0x94, 0xec, 0x82, 0xd9, 0x0b, - 0x64, 0x7a, 0x3d, 0xe7, 0x0b, 0x39, 0x12, 0xaa, 0xe0, 0x6b, 0x63, 0x6c, 0x12, 0x3b, 0x82, 0x96, 0x59, 0x3c, 0x1f, - 0x2f, 0xa2, 0xb8, 0x81, 0x65, 0x78, 0x26, 0x67, 0xa6, 0x25, 0xff, 0xd1, 0x76, 0x52, 0xea, 0x06, 0x2b, 0xc9, 0x1f, - 0x1e, 0x1f, 0x5d, 0x02, 0x19, 0x33, 0xbb, 0x82, 0xe9, 0x0f, 0x5d, 0x1f, 0x19, 0xdc, 0x73, 0x53, 0xce, 0xb8, 0x0c, - 0x12, 0xa5, 0x05, 0x0e, 0x72, 0x96, 0xb4, 0xb5, 0x08, 0xdf, 0x3d, 0x2a, 0xca, 0x3e, 0x13, 0xba, 0x01, 0xdd, 0x47, - 0x82, 0x3e, 0xd0, 0x7b, 0xa5, 0x0a, 0x97, 0xd5, 0x36, 0x13, 0x70, 0x17, 0x09, 0xf2, 0x5b, 0xa1, 0x53, 0x35, 0x06, - 0x55, 0x34, 0x8b, 0x58, 0xb8, 0xf7, 0x11, 0x37, 0xca, 0xe6, 0x9f, 0xfa, 0x1e, 0x2f, 0x25, 0x0c, 0x6e, 0x48, 0x4d, - 0x9f, 0xcc, 0x9b, 0x2b, 0xf6, 0x1e, 0x3a, 0xea, 0x50, 0x6b, 0xbc, 0xaf, 0x5e, 0x72, 0x0a, 0x31, 0x4a, 0x28, 0x3a, - 0x09, 0x06, 0x70, 0xbb, 0x84, 0x14, 0x7b, 0x83, 0xdd, 0xf8, 0xd7, 0xbc, 0x28, 0xb8, 0x58, 0xd7, 0x75, 0xe0, 0x06, - 0x34, 0x9c, 0x2f, 0x76, 0x43, 0x18, 0x8e, 0x69, 0xeb, 0x1a, 0x06, 0x61, 0xc6, 0x30, 0x12, 0x82, 0xd3, 0xbf, 0xe8, - 0x2b, 0x9a, 0xc4, 0xab, 0xef, 0xf8, 0x5f, 0x19, 0x2f, 0x25, 0x91, 0x06, 0x11, 0x52, 0x37, 0xf1, 0x8d, 0x74, 0x93, - 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0x58, 0xd3, 0x54, 0xfc, 0x2d, 0x17, 0x1f, 0xfc, 0x54, 0x74, 0x3c, 0x1a, 0x37, - 0xad, 0xce, 0xc8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0xa0, 0x1b, 0xa9, 0xdf, 0xda, 0x87, 0xc0, - 0x29, 0xd3, 0xe0, 0x9d, 0x07, 0x74, 0x73, 0xee, 0x82, 0x27, 0x8f, 0xe9, 0xb9, 0x45, 0x4f, 0xae, 0xd9, 0x49, 0xdd, - 0x43, 0xed, 0xbd, 0x1e, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0xd0, 0x38, 0x57, 0xf7, 0x1f, 0x8b, 0x5d, 0x0e, - 0xdf, 0x72, 0x96, 0x1b, 0xc0, 0x52, 0x11, 0x8d, 0x04, 0x8f, 0x02, 0xd4, 0xa5, 0x2a, 0x84, 0x2d, 0x66, 0x71, 0xa8, - 0xcc, 0x56, 0xad, 0x87, 0x82, 0x1c, 0x17, 0x23, 0x70, 0x08, 0x5d, 0x57, 0x83, 0x62, 0xb4, 0xcc, 0xea, 0xf7, 0xf8, - 0x5b, 0xb1, 0x0e, 0x49, 0xb6, 0x8f, 0x75, 0xe0, 0x86, 0x75, 0x98, 0x7e, 0xd4, 0x48, 0x01, 0x68, 0xb2, 0x11, 0xd8, - 0x04, 0xe0, 0xbd, 0xdd, 0x47, 0x84, 0x5a, 0x99, 0xee, 0x65, 0x2c, 0xe4, 0xf7, 0x5e, 0x12, 0x94, 0xe0, 0x27, 0xd4, - 0x96, 0xa5, 0xe0, 0x9d, 0x47, 0x3a, 0x27, 0x4d, 0x56, 0xbc, 0x07, 0x71, 0x5a, 0xf8, 0xc0, 0xde, 0x82, 0xe0, 0x9c, - 0x25, 0xbd, 0xc7, 0xdb, 0xac, 0x92, 0xda, 0xa8, 0x81, 0x02, 0xf8, 0xdd, 0xe0, 0x1e, 0x41, 0xbe, 0xbc, 0xe1, 0x5a, - 0x89, 0xdb, 0x90, 0x0f, 0x4b, 0x7a, 0x44, 0x06, 0xe6, 0xb9, 0x1a, 0xc6, 0xf4, 0x88, 0x1c, 0x9b, 0x67, 0x61, 0x07, - 0x70, 0x20, 0xd4, 0xa8, 0xd2, 0x23, 0x68, 0xd0, 0x6f, 0xa6, 0x45, 0x86, 0x64, 0xfd, 0xa8, 0x1b, 0x8c, 0x88, 0xbf, - 0x20, 0xa2, 0x2e, 0xfe, 0xf9, 0x60, 0xae, 0x7b, 0xcc, 0x05, 0xc2, 0x1c, 0x0c, 0x38, 0x88, 0xdb, 0x20, 0xd4, 0x07, - 0xcc, 0xe6, 0x2e, 0xaa, 0xe8, 0xbd, 0x31, 0xcc, 0xec, 0xe8, 0x0f, 0x37, 0x12, 0x7c, 0x9d, 0xb5, 0x41, 0x9d, 0x17, - 0x87, 0x40, 0x10, 0xdc, 0x17, 0xaa, 0x9a, 0xab, 0x1e, 0xd8, 0x78, 0xcb, 0x7e, 0x6c, 0xb7, 0xe3, 0x69, 0x65, 0xaf, - 0xfd, 0x15, 0x85, 0x93, 0x4f, 0xca, 0xbf, 0xde, 0xeb, 0x0c, 0x16, 0x8c, 0x0c, 0x5f, 0x3a, 0xfb, 0x17, 0xbe, 0x56, - 0xd2, 0xbd, 0x6a, 0x50, 0x90, 0xc7, 0x47, 0x92, 0xfe, 0xed, 0x95, 0x95, 0x4f, 0xcd, 0xf4, 0x6f, 0xb7, 0x7a, 0x7d, - 0x1e, 0x8f, 0x26, 0xdb, 0x6d, 0x4f, 0x19, 0xb8, 0x52, 0x1d, 0x43, 0x08, 0x9d, 0xeb, 0xc9, 0xe1, 0x11, 0x44, 0x45, - 0xf0, 0xe3, 0x6e, 0x16, 0x9e, 0x44, 0xc6, 0x8d, 0xd3, 0x59, 0x78, 0x82, 0x1d, 0xee, 0x44, 0x25, 0x2e, 0x46, 0xad, - 0x0d, 0x4e, 0xcf, 0x93, 0x10, 0x42, 0x39, 0x60, 0x65, 0x77, 0xf2, 0xcf, 0xbd, 0x34, 0x13, 0x92, 0x93, 0xd5, 0xed, - 0x94, 0xee, 0x60, 0x9a, 0x1f, 0xe8, 0x11, 0x1c, 0x70, 0x67, 0x7f, 0x35, 0x1f, 0xc3, 0x24, 0x53, 0xe4, 0x14, 0xc9, - 0x2f, 0xd2, 0x53, 0x48, 0xda, 0xa1, 0xa7, 0x92, 0x00, 0x4e, 0xa8, 0xf9, 0x18, 0x7e, 0xc3, 0xb8, 0x7f, 0xe7, 0xbf, - 0xb6, 0x53, 0x11, 0x3d, 0xa1, 0x58, 0xa6, 0x22, 0xa7, 0x49, 0x56, 0x26, 0x10, 0xb5, 0x51, 0x36, 0x23, 0xfa, 0xca, - 0xc6, 0x7c, 0x94, 0x84, 0xcf, 0xa9, 0xf5, 0x7f, 0x86, 0xf0, 0x69, 0x74, 0x46, 0x80, 0xcb, 0x2b, 0xaf, 0x2e, 0xc2, - 0xa7, 0x4f, 0xe8, 0xc1, 0xe4, 0xeb, 0x23, 0x7a, 0x70, 0xf4, 0xd5, 0x53, 0x02, 0xb0, 0x68, 0x57, 0x17, 0xe1, 0xd1, - 0xd3, 0xa7, 0xf4, 0xe0, 0xdb, 0x6f, 0xe9, 0xc1, 0xe4, 0xab, 0x23, 0x2f, 0x6d, 0xf2, 0xf4, 0x5b, 0x7a, 0xf0, 0xf5, - 0x13, 0x2f, 0xed, 0x68, 0xfc, 0x94, 0x1e, 0x7c, 0xf3, 0xb5, 0x4e, 0xfb, 0x1b, 0x64, 0xfb, 0xf6, 0x08, 0xff, 0xd3, - 0x69, 0x93, 0xa7, 0x5f, 0xd1, 0x83, 0xc9, 0x18, 0x2a, 0x79, 0x6a, 0x2b, 0x19, 0x4f, 0xe0, 0xe3, 0xaf, 0xe0, 0xbf, - 0xbf, 0x91, 0x60, 0x41, 0x6b, 0xc1, 0x92, 0x0a, 0xf5, 0x67, 0x28, 0xe2, 0x44, 0xd5, 0x44, 0xc2, 0x43, 0xcc, 0x2c, - 0xbf, 0x89, 0xc3, 0x80, 0xd8, 0x74, 0x28, 0x88, 0x1e, 0x8c, 0x47, 0x4f, 0x49, 0xe0, 0xc2, 0xd3, 0xdd, 0xba, 0x20, - 0x63, 0x49, 0x35, 0xcf, 0xbe, 0x48, 0x34, 0x63, 0xe0, 0x00, 0x58, 0x7d, 0x74, 0x73, 0xd5, 0x62, 0x9e, 0x7d, 0x51, - 0x8b, 0xdd, 0x5c, 0xbf, 0xb5, 0x00, 0xe5, 0xdd, 0x55, 0xcb, 0x6e, 0x4b, 0x19, 0x3a, 0xad, 0x35, 0xfa, 0xec, 0x23, - 0xa6, 0x0f, 0x06, 0xce, 0x0d, 0xfb, 0xef, 0x3b, 0xe5, 0xb4, 0xbe, 0x51, 0x28, 0xd4, 0xa8, 0x3c, 0x24, 0xec, 0x04, - 0x8a, 0x1e, 0x0c, 0x80, 0x27, 0x70, 0x70, 0xdf, 0xfe, 0xcd, 0x32, 0x3e, 0x76, 0x94, 0xf1, 0x33, 0xca, 0x10, 0xd0, - 0xa8, 0x87, 0x99, 0x4d, 0x0f, 0x1b, 0xdd, 0xe8, 0x25, 0x0b, 0x79, 0x32, 0xf9, 0x9e, 0xc1, 0xae, 0xd6, 0xb5, 0x38, - 0xd0, 0xa2, 0x68, 0x71, 0x79, 0x90, 0xf2, 0x59, 0xcd, 0xfe, 0xbe, 0x44, 0xf5, 0x56, 0xe4, 0xbd, 0x11, 0xd9, 0xac, - 0x66, 0xdf, 0xeb, 0x37, 0xc0, 0xcd, 0xb0, 0xdf, 0xe4, 0x93, 0x1b, 0x38, 0x83, 0x0b, 0xd3, 0x1e, 0x69, 0x62, 0x04, - 0x58, 0x01, 0x19, 0x38, 0xf0, 0x00, 0xe8, 0xa0, 0x3b, 0xda, 0xdb, 0xad, 0x4c, 0xf1, 0xfb, 0x6c, 0x60, 0x00, 0x35, - 0xf3, 0x36, 0xb1, 0x65, 0xff, 0xcb, 0x93, 0x97, 0xa0, 0x70, 0xcb, 0x2f, 0x6f, 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, - 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x55, 0x40, 0xf5, 0x96, 0x8f, 0x36, 0x5c, 0xaa, 0x27, 0x81, 0x33, 0xb8, - 0x14, 0x65, 0xc2, 0xdf, 0x2a, 0xb1, 0x3f, 0x5a, 0x3f, 0xba, 0xbe, 0x3d, 0x0e, 0xac, 0x7d, 0x8f, 0x8f, 0xd4, 0x67, - 0xde, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0xaf, 0x1a, 0x23, 0xf1, 0x28, 0x80, 0x37, 0xd0, 0x11, 0x29, 0x34, 0x52, 0x2d, - 0x70, 0x0c, 0x85, 0xb4, 0x40, 0x1c, 0x79, 0x75, 0x83, 0x2d, 0x88, 0x08, 0xc1, 0xc3, 0xed, 0x5f, 0x4b, 0x19, 0x38, - 0xaa, 0xdf, 0xe7, 0xc2, 0x75, 0x7b, 0xd2, 0x76, 0xe4, 0x38, 0xf5, 0x53, 0x07, 0xdf, 0x9c, 0x34, 0x8d, 0xb6, 0x5c, - 0x49, 0x99, 0x61, 0x59, 0xd8, 0x49, 0xa8, 0xe4, 0x1e, 0xb5, 0x03, 0xc9, 0x17, 0x72, 0x88, 0x64, 0x81, 0x51, 0x28, - 0xc8, 0x70, 0x42, 0xc1, 0x66, 0xaa, 0x5a, 0x66, 0x97, 0x75, 0xb8, 0x91, 0x0a, 0x65, 0x4e, 0xd1, 0xb7, 0x1b, 0x1c, - 0x48, 0x48, 0x94, 0x55, 0x6f, 0xe2, 0x37, 0x21, 0x82, 0xd5, 0x71, 0x65, 0x0b, 0xc5, 0x9d, 0xfd, 0xc9, 0xd3, 0x2e, - 0xfe, 0x48, 0xbb, 0x80, 0xda, 0x58, 0x4c, 0xc3, 0x89, 0x89, 0x7d, 0x63, 0xbf, 0x30, 0x9a, 0x1e, 0x80, 0xfa, 0xae, - 0xa4, 0x18, 0x41, 0x7e, 0xa5, 0xed, 0x63, 0x7b, 0x8c, 0x89, 0x19, 0xc4, 0x1a, 0x96, 0x39, 0x33, 0xd9, 0x37, 0xc2, - 0x4e, 0x00, 0xb8, 0x11, 0x5a, 0x23, 0x21, 0xf0, 0x78, 0x1d, 0xe2, 0x79, 0x29, 0xc3, 0xb7, 0x66, 0x84, 0x8e, 0xc1, - 0x9b, 0xca, 0x34, 0x32, 0x13, 0xae, 0x60, 0x50, 0x1f, 0xdb, 0x2a, 0x0a, 0xab, 0xa9, 0x2c, 0x3b, 0x01, 0xb8, 0x81, - 0xec, 0x58, 0x5f, 0x3c, 0x67, 0xf5, 0x3c, 0x5b, 0x44, 0x3a, 0x28, 0x60, 0x5e, 0x19, 0x06, 0xed, 0xcd, 0x1e, 0xd9, - 0x8e, 0x45, 0xe8, 0x86, 0xfb, 0x08, 0xc6, 0xd3, 0xf6, 0x05, 0x2b, 0x88, 0x46, 0x88, 0x87, 0x19, 0x33, 0xf8, 0x5e, - 0x69, 0xca, 0x53, 0xd9, 0x12, 0x08, 0x1c, 0x85, 0x50, 0x17, 0xbb, 0x46, 0x09, 0x36, 0x93, 0x17, 0xcc, 0x60, 0xc7, - 0x8e, 0xd4, 0x74, 0xc9, 0x3a, 0x1d, 0xca, 0x29, 0x2d, 0xd4, 0x94, 0x2a, 0x5f, 0xc3, 0x6a, 0x5e, 0xa0, 0x87, 0x1e, - 0xb8, 0x1e, 0x28, 0x87, 0xbc, 0x82, 0x4e, 0x74, 0x04, 0x9d, 0x56, 0x9b, 0xb0, 0x73, 0x23, 0xd5, 0xb2, 0x06, 0x79, - 0xc7, 0x50, 0xef, 0x88, 0x17, 0x4e, 0xa0, 0x2e, 0x84, 0x08, 0xd9, 0xdb, 0x22, 0x7d, 0x44, 0xb3, 0xac, 0x7a, 0x09, - 0x65, 0x71, 0xc4, 0xd6, 0x05, 0x2b, 0x6d, 0x34, 0xb9, 0xe4, 0x11, 0x4f, 0x11, 0x11, 0xf0, 0x54, 0x6a, 0xd7, 0x77, - 0x5a, 0x42, 0x68, 0x96, 0x02, 0x71, 0xb3, 0x51, 0x9c, 0x1b, 0x13, 0xc8, 0x02, 0xe8, 0xdb, 0x4f, 0xd9, 0xb5, 0x13, - 0x0e, 0x76, 0x73, 0x9d, 0x15, 0xcf, 0xf9, 0x65, 0x56, 0xf0, 0x14, 0xc1, 0xae, 0xee, 0xf4, 0x03, 0xb7, 0x6c, 0x1b, - 0x58, 0xbe, 0x7d, 0x07, 0x0b, 0xa6, 0x0a, 0x95, 0x52, 0x22, 0x2b, 0xa2, 0x0a, 0x32, 0xbb, 0xcc, 0xdd, 0xeb, 0xac, - 0x78, 0x1d, 0xdf, 0x81, 0x37, 0x85, 0xc7, 0x4f, 0x8f, 0x2e, 0xf0, 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, - 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x29, 0x68, 0x6d, 0x0d, 0x81, 0x13, 0x7f, 0x5a, 0x76, 0xef, 0x3a, 0x2b, 0xb4, - 0x7d, 0xc6, 0x75, 0x7c, 0xc7, 0x0a, 0x09, 0x66, 0x81, 0x71, 0xee, 0xdb, 0x52, 0x92, 0xeb, 0xac, 0xd0, 0x02, 0x92, - 0xeb, 0xf8, 0x8e, 0xfa, 0x32, 0x0e, 0x65, 0x45, 0xe7, 0xc4, 0xf9, 0xdd, 0x1d, 0x7e, 0x81, 0xa1, 0x56, 0xc6, 0xfd, - 0x3e, 0x48, 0xcc, 0x84, 0x69, 0xca, 0x4c, 0x44, 0x42, 0xa1, 0x85, 0xd4, 0x94, 0x0f, 0x26, 0x64, 0x77, 0xa5, 0x1a, - 0x46, 0xd4, 0x7c, 0x15, 0x56, 0xb3, 0x71, 0x34, 0x21, 0x74, 0xd2, 0xb1, 0xde, 0x75, 0x6b, 0x21, 0xd3, 0xe8, 0x69, - 0xe4, 0xf8, 0x74, 0x96, 0xac, 0x9e, 0x96, 0xc7, 0x8c, 0x4f, 0xcb, 0xc1, 0x80, 0xa8, 0xd0, 0xc1, 0x1b, 0xac, 0x07, - 0x4c, 0x69, 0x6c, 0xbc, 0x35, 0xdd, 0xea, 0x97, 0x42, 0x86, 0xa4, 0x77, 0x0c, 0x48, 0x32, 0x61, 0x83, 0xdd, 0x82, - 0x44, 0xd1, 0xf1, 0xbf, 0x93, 0x5b, 0x70, 0xd7, 0x83, 0xd1, 0x8f, 0xee, 0xeb, 0x18, 0xff, 0xa1, 0xb6, 0x05, 0x51, - 0x9f, 0x2a, 0xd6, 0xeb, 0x48, 0x94, 0x21, 0x17, 0xe1, 0x67, 0x47, 0x43, 0x34, 0x51, 0xed, 0xb1, 0xa0, 0x58, 0x5f, - 0x5f, 0xf0, 0x12, 0xa7, 0x9f, 0xd9, 0xcb, 0x15, 0x6c, 0x0b, 0x5a, 0x6b, 0x1a, 0xf5, 0x26, 0x7e, 0x13, 0x99, 0xcb, - 0x82, 0x2a, 0xf2, 0x39, 0x0a, 0x59, 0xf3, 0x30, 0xac, 0x87, 0xed, 0x41, 0x24, 0x87, 0xed, 0x49, 0xf0, 0x1a, 0x03, - 0x0b, 0x64, 0x87, 0x46, 0xe0, 0x22, 0x34, 0xf2, 0xb7, 0x63, 0x70, 0xe1, 0x32, 0x88, 0x2c, 0x43, 0x15, 0xbf, 0xa9, - 0xdd, 0x04, 0xd9, 0x2b, 0x74, 0x9a, 0xc2, 0xaa, 0xa4, 0x49, 0x3e, 0xfc, 0x7a, 0x29, 0x4a, 0xcc, 0xe4, 0x74, 0xd9, - 0xa1, 0xaf, 0xed, 0xf6, 0x0e, 0x74, 0xc1, 0xaa, 0x4f, 0xce, 0xd7, 0x8f, 0x3b, 0x7b, 0x02, 0x46, 0xb1, 0x32, 0x87, - 0x2f, 0xa4, 0x54, 0x3e, 0x28, 0xcd, 0xc7, 0x30, 0xaf, 0x14, 0xc7, 0x6e, 0x00, 0x93, 0x80, 0x7d, 0x86, 0x54, 0x87, - 0x69, 0xc7, 0x3e, 0x47, 0x1b, 0x58, 0x12, 0x70, 0xf8, 0x47, 0x99, 0x68, 0xdc, 0xab, 0x7b, 0x95, 0xfa, 0x21, 0x5b, - 0xe6, 0x0b, 0xe0, 0xf3, 0x61, 0xd7, 0x46, 0x05, 0xca, 0x26, 0x22, 0x41, 0x61, 0xcb, 0x63, 0x90, 0xf6, 0x28, 0xa6, - 0xab, 0x92, 0x27, 0x19, 0x4a, 0x29, 0x12, 0xe5, 0x13, 0x9c, 0xc3, 0x1b, 0xdc, 0x8f, 0x32, 0x20, 0xbc, 0x0c, 0x39, - 0x1d, 0xa5, 0x54, 0x59, 0xc0, 0x48, 0xea, 0x01, 0xa2, 0xbc, 0x0c, 0xe4, 0x78, 0xdb, 0xed, 0x84, 0xae, 0xd8, 0x72, - 0x38, 0xa1, 0x48, 0x4a, 0xae, 0xb0, 0xdc, 0x6b, 0xd0, 0x79, 0x5c, 0xb0, 0xde, 0x0b, 0xc0, 0x22, 0x38, 0x87, 0xbf, - 0x31, 0xa1, 0x37, 0xf0, 0x37, 0x27, 0xf4, 0x35, 0x0b, 0xaf, 0x87, 0x57, 0xe4, 0x30, 0x4c, 0x07, 0x13, 0x29, 0x18, - 0xbb, 0x67, 0xcb, 0x22, 0x94, 0x89, 0xab, 0xc3, 0x4b, 0xf2, 0xf8, 0x92, 0xde, 0xd1, 0x5b, 0x7a, 0x46, 0xdf, 0x02, - 0xe1, 0xbf, 0x3f, 0x9e, 0xf0, 0xe1, 0xe4, 0x49, 0xbf, 0xdf, 0xbb, 0xe8, 0xf7, 0x7b, 0xe7, 0xda, 0x80, 0x42, 0xed, - 0xa2, 0xab, 0x86, 0xaa, 0x5f, 0xd7, 0xcd, 0x62, 0xfa, 0x56, 0x6e, 0xdc, 0x84, 0x67, 0x79, 0x78, 0x7d, 0x78, 0x4f, - 0x86, 0xf8, 0x78, 0x99, 0x0b, 0x51, 0x86, 0x57, 0x87, 0xf7, 0x84, 0xbe, 0x3d, 0x01, 0xbd, 0x29, 0xd6, 0xf7, 0xf6, - 0xf1, 0xbd, 0xaa, 0x8d, 0xd0, 0x17, 0x61, 0x02, 0xdb, 0xe4, 0x8e, 0x99, 0xbb, 0xf6, 0x64, 0x0c, 0xb1, 0x4c, 0xee, - 0x9d, 0xf2, 0xee, 0x1f, 0xdf, 0x91, 0xc3, 0x3b, 0xf0, 0x14, 0x35, 0xe4, 0x6f, 0x16, 0xde, 0xb2, 0x56, 0x0d, 0x8f, - 0xef, 0xe9, 0x59, 0xab, 0x11, 0x8f, 0xef, 0x49, 0x14, 0xde, 0xb2, 0x2b, 0x7a, 0xc6, 0xae, 0x09, 0xbd, 0xe8, 0xf7, - 0xcf, 0xfb, 0x7d, 0xd1, 0xef, 0xff, 0x3d, 0x0e, 0xc3, 0x78, 0x58, 0x92, 0x43, 0x41, 0xef, 0x0f, 0x27, 0xfc, 0x2b, - 0x32, 0x0b, 0x55, 0xf3, 0xe5, 0x82, 0x33, 0x2a, 0x6f, 0x99, 0xeb, 0x9e, 0x82, 0xb5, 0xc2, 0x3d, 0x93, 0x4f, 0x6f, - 0xe9, 0x2d, 0x2b, 0xe9, 0x19, 0x8b, 0x49, 0x74, 0x03, 0xad, 0xb8, 0x98, 0x95, 0xd1, 0x2d, 0x3d, 0x63, 0xe7, 0xb3, - 0x38, 0x3a, 0xa3, 0x6f, 0x59, 0x3e, 0x9c, 0x40, 0xde, 0xb3, 0xe1, 0x2d, 0x39, 0x7c, 0x4b, 0xa2, 0xf0, 0xad, 0xfa, - 0x7d, 0x4f, 0xaf, 0x78, 0xf8, 0x96, 0x3a, 0xd5, 0xbc, 0x25, 0xba, 0x7a, 0xaf, 0xf6, 0xb7, 0x24, 0x72, 0x07, 0xf3, - 0xad, 0xb1, 0xa7, 0x79, 0x64, 0x69, 0x63, 0x5a, 0x84, 0xa0, 0x6f, 0x2e, 0xc2, 0x5b, 0x42, 0xa6, 0xfe, 0xd8, 0xc1, - 0x80, 0xce, 0x1e, 0x45, 0x09, 0xa1, 0xb7, 0x6e, 0xa9, 0xb7, 0x38, 0x86, 0x7a, 0x84, 0x64, 0xda, 0x19, 0xa6, 0xe1, - 0x3a, 0x78, 0xa5, 0xc0, 0x3a, 0x2e, 0xfa, 0xfd, 0x70, 0xdd, 0xef, 0x43, 0xa4, 0xfb, 0x72, 0xa6, 0x63, 0xbb, 0x59, - 0xb2, 0x49, 0x6f, 0x41, 0xfb, 0xff, 0x6a, 0x30, 0x80, 0xce, 0x38, 0x25, 0x85, 0xb7, 0x83, 0x57, 0x8f, 0xef, 0x89, - 0xac, 0xa3, 0xa4, 0x95, 0x08, 0x4b, 0xfa, 0x9a, 0x66, 0x00, 0xf8, 0xf5, 0x6a, 0x30, 0x20, 0x91, 0xfe, 0x8c, 0x4c, - 0x5f, 0x1d, 0xbf, 0x9d, 0x0e, 0x06, 0xaf, 0xf4, 0x36, 0xf9, 0x8b, 0xed, 0x29, 0x05, 0xd6, 0xdf, 0x79, 0xbf, 0xff, - 0xd7, 0x49, 0x4c, 0x2e, 0x4a, 0x1e, 0x7f, 0x9c, 0xfa, 0x6d, 0xf9, 0xcb, 0x46, 0x55, 0x3b, 0xef, 0xf7, 0xd7, 0xfd, - 0xfe, 0x19, 0x60, 0x17, 0xcd, 0xac, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x96, 0x22, 0x29, 0x92, 0x43, 0x63, 0x68, 0x5b, - 0x2c, 0xdb, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xc8, 0xaf, 0x28, 0x6e, 0x48, 0x14, 0xf6, 0xce, 0xb7, 0xdb, 0x33, 0xc6, - 0x58, 0x4c, 0x40, 0xfa, 0xe1, 0xbe, 0x3e, 0x6b, 0xbc, 0x18, 0x62, 0x95, 0x40, 0x66, 0x73, 0xb3, 0x34, 0x87, 0x40, - 0xc4, 0x61, 0xd3, 0xbf, 0xd7, 0xf7, 0xf2, 0xaa, 0xb1, 0x7c, 0xeb, 0xcf, 0x00, 0x42, 0x24, 0x58, 0xc8, 0x67, 0x38, - 0x06, 0x55, 0x06, 0xc0, 0xbf, 0x91, 0x9c, 0x79, 0x01, 0xa0, 0xe6, 0x64, 0xbb, 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb2, - 0xd1, 0xdf, 0x9e, 0x3e, 0xae, 0x1f, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, 0x61, 0x16, 0x6b, 0x7d, 0x08, 0x46, - 0xf0, 0x8a, 0x7d, 0xbc, 0xc9, 0x3e, 0x9b, 0x7d, 0x44, 0xc2, 0xea, 0x31, 0x8e, 0xbc, 0x48, 0x5b, 0x7a, 0xbb, 0x3d, - 0x0c, 0x26, 0x2f, 0xd2, 0x4f, 0xb0, 0x9d, 0x2e, 0xff, 0xe6, 0xc0, 0x78, 0xc2, 0xc1, 0x68, 0x2f, 0x0a, 0xea, 0x4c, - 0xdb, 0x6e, 0x6b, 0xf7, 0x12, 0xf8, 0x06, 0x53, 0x41, 0xc7, 0x66, 0x58, 0xb8, 0x41, 0x4d, 0xe4, 0xd1, 0x32, 0xa8, - 0x1b, 0x69, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0xd2, 0x71, 0x0b, 0x34, 0x43, 0x86, 0xba, 0xdc, 0xd3, 0xfa, 0x5f, 0xbc, - 0x14, 0x1a, 0x3e, 0xc3, 0x8a, 0x08, 0x1d, 0x6e, 0x8d, 0xbb, 0xdc, 0x5a, 0xf5, 0x09, 0x6e, 0xad, 0x40, 0x12, 0xab, - 0x61, 0x49, 0xf5, 0xe5, 0x28, 0x61, 0x27, 0x05, 0xe3, 0x33, 0xa0, 0xe3, 0x31, 0x3c, 0x08, 0x56, 0xcd, 0x44, 0x94, - 0xa0, 0x7d, 0xa2, 0x8d, 0x30, 0xf8, 0x27, 0x60, 0xf6, 0xd3, 0x1c, 0xfe, 0x0a, 0x32, 0x4d, 0x8e, 0x21, 0x20, 0xc4, - 0xf1, 0x78, 0x16, 0x87, 0x63, 0x12, 0x25, 0x27, 0xf0, 0x04, 0xff, 0x95, 0xe1, 0x98, 0x34, 0xea, 0x0e, 0x23, 0xe4, - 0xe5, 0x36, 0x61, 0x00, 0x57, 0x36, 0x9e, 0x4d, 0x22, 0x23, 0xdd, 0x15, 0x8f, 0x47, 0xe3, 0xa7, 0x64, 0x1a, 0x87, - 0x62, 0x90, 0x10, 0x0a, 0xde, 0xbd, 0x61, 0x31, 0x4c, 0x14, 0x3c, 0x1b, 0xb0, 0x79, 0x85, 0x65, 0xf3, 0x04, 0x9c, - 0x80, 0x30, 0x4c, 0xc8, 0xb1, 0xee, 0x41, 0x4a, 0x51, 0xe7, 0x39, 0xf6, 0x53, 0x1d, 0x41, 0x98, 0x1d, 0xb5, 0x54, - 0x7c, 0x05, 0x40, 0x97, 0x38, 0x38, 0xd4, 0x20, 0x61, 0x54, 0xb3, 0xb0, 0x70, 0xa8, 0x94, 0xae, 0xee, 0xb0, 0xf2, - 0x28, 0xbf, 0x6e, 0xd0, 0x61, 0x45, 0x06, 0x13, 0x5a, 0x9c, 0x4c, 0xf8, 0x57, 0x10, 0xc0, 0xc3, 0x8b, 0xf8, 0x25, - 0x71, 0x62, 0x20, 0xbc, 0x0a, 0x32, 0x50, 0x69, 0x23, 0x1b, 0x33, 0x32, 0x15, 0x1f, 0x40, 0x98, 0x94, 0x83, 0x5b, - 0xb1, 0xce, 0x53, 0x88, 0x0a, 0xb6, 0xce, 0xeb, 0x83, 0x2b, 0xb0, 0x64, 0x8f, 0x6b, 0x88, 0x13, 0xb6, 0x5e, 0x01, - 0x76, 0xee, 0xa3, 0x4d, 0xd1, 0x1c, 0xc8, 0xef, 0x0e, 0xb0, 0xe5, 0xf0, 0xaa, 0x16, 0x07, 0x93, 0xf1, 0x78, 0x3c, - 0xfa, 0x1d, 0x8e, 0x0e, 0x20, 0xb4, 0x24, 0xd2, 0x7c, 0x32, 0x40, 0xe3, 0xae, 0x6b, 0xee, 0x8c, 0x0b, 0x45, 0x59, - 0xe9, 0x64, 0x42, 0x40, 0xfc, 0xac, 0xfb, 0x06, 0xfb, 0x8a, 0xab, 0xf8, 0x27, 0xbb, 0x9f, 0xe8, 0x15, 0x2d, 0x57, - 0xea, 0xe8, 0xdd, 0xdb, 0xb3, 0x57, 0x1f, 0x5e, 0xfd, 0xfa, 0xe2, 0xfc, 0xd5, 0x9b, 0x97, 0xaf, 0xde, 0xbc, 0xfa, - 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xd7, 0x56, 0xc4, 0x8c, 0xbd, 0x73, 0x8f, 0x71, 0x6a, 0x71, 0x85, 0xb3, 0x47, 0xf6, - 0x16, 0x0b, 0xb0, 0x09, 0x9a, 0x5b, 0xa8, 0xa8, 0x62, 0x34, 0x6a, 0x75, 0x4f, 0x40, 0x46, 0xa3, 0x46, 0x36, 0x1e, - 0x56, 0x6c, 0x8d, 0x5c, 0xbc, 0x65, 0x38, 0xf8, 0xc8, 0xfc, 0x96, 0x9c, 0x09, 0x37, 0xa3, 0xad, 0x58, 0x11, 0xf0, - 0xf9, 0x5a, 0x17, 0xb5, 0xc3, 0x85, 0xc8, 0xbd, 0x6d, 0x9e, 0x43, 0x42, 0x1d, 0x22, 0xd7, 0xc1, 0xfb, 0x7a, 0x64, - 0x8f, 0x8f, 0x9c, 0x27, 0xe9, 0x19, 0xea, 0x72, 0x34, 0x7c, 0xe4, 0x3d, 0xa3, 0x13, 0x73, 0xa3, 0x75, 0xa8, 0xe7, - 0x25, 0xec, 0x6f, 0x29, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x58, 0xdd, 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, - 0x7e, 0xa4, 0x6a, 0x02, 0x69, 0x51, 0x20, 0x75, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, 0x52, 0xff, 0x0c, 0x3d, 0x02, 0x68, - 0x2e, 0x3b, 0x86, 0x04, 0xea, 0xc5, 0x6b, 0x5c, 0xff, 0x9c, 0x7c, 0x59, 0xd1, 0xce, 0x17, 0xdf, 0x41, 0x88, 0x61, - 0xf7, 0x8a, 0xe0, 0x4d, 0xb8, 0x9d, 0x64, 0x7b, 0x69, 0xd1, 0xf7, 0xaa, 0xeb, 0x18, 0x8f, 0xbb, 0x3d, 0x57, 0x0a, - 0xff, 0xd6, 0x05, 0xf6, 0x40, 0xfe, 0x75, 0xbc, 0x60, 0x21, 0x60, 0x33, 0x1e, 0x9a, 0x45, 0x62, 0xfd, 0xde, 0xe9, - 0x84, 0x1c, 0x1e, 0x4d, 0xf9, 0x90, 0x15, 0xb4, 0x1a, 0xb0, 0xa2, 0xd9, 0xa1, 0xe6, 0xbc, 0x4d, 0xc8, 0xab, 0x5d, - 0x1a, 0x5e, 0x0d, 0xf9, 0x43, 0x97, 0xa4, 0x0f, 0xdc, 0x73, 0xa8, 0x36, 0xcd, 0xc5, 0x90, 0xa6, 0x9c, 0xee, 0x52, - 0x19, 0x10, 0x22, 0x5d, 0xc7, 0x35, 0x69, 0xd4, 0x51, 0xb5, 0xb4, 0x92, 0x8e, 0x9b, 0x6c, 0xf3, 0x89, 0x4b, 0xb6, - 0xbc, 0x5d, 0xbb, 0xd7, 0xea, 0xf6, 0x85, 0x19, 0xc8, 0xdf, 0x1f, 0x88, 0x6a, 0xa2, 0x21, 0xba, 0x80, 0x0a, 0xfe, - 0x01, 0x5e, 0x9e, 0x3c, 0x52, 0x0a, 0xd0, 0x7d, 0x67, 0x47, 0xd7, 0x1e, 0xf7, 0x66, 0xb1, 0xb5, 0xc4, 0x39, 0xab, - 0x5d, 0x67, 0x79, 0x59, 0xb6, 0x44, 0xd7, 0xa9, 0xd8, 0xcf, 0x61, 0x47, 0xdf, 0x9d, 0x6d, 0x00, 0x44, 0x29, 0xac, - 0xed, 0xd9, 0x5f, 0x39, 0x67, 0x7f, 0x65, 0xce, 0x7e, 0xb3, 0x09, 0xa4, 0x0f, 0x2b, 0xb4, 0xec, 0xa5, 0x28, 0x6a, - 0xdd, 0xe4, 0xb1, 0xaf, 0xcb, 0x42, 0x5a, 0xcc, 0x0f, 0x0d, 0xed, 0x7a, 0x32, 0xa6, 0x02, 0xd5, 0x23, 0x3f, 0x60, - 0xab, 0x0e, 0x0b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0xb9, 0xef, 0x6e, 0xf7, 0x7f, 0x73, 0xa1, 0x83, 0xdb, - 0xda, 0xb2, 0x72, 0xd4, 0xd5, 0x71, 0x89, 0x77, 0xb5, 0xe5, 0xc3, 0x77, 0xb5, 0x77, 0x99, 0x5a, 0x76, 0x35, 0xa0, - 0x06, 0x15, 0xeb, 0x6b, 0x5e, 0x66, 0x49, 0x63, 0x14, 0x1a, 0x6f, 0x39, 0x84, 0xf6, 0x70, 0x0e, 0x2e, 0x90, 0xc3, - 0x12, 0x42, 0x3f, 0xd6, 0x5a, 0x00, 0xe8, 0xb2, 0xd8, 0x6f, 0x79, 0x98, 0x91, 0x81, 0x2b, 0xf1, 0x2b, 0x84, 0x2b, - 0x2e, 0x3e, 0xdc, 0xc9, 0x4c, 0xd0, 0xab, 0xc4, 0x46, 0xcd, 0x15, 0xed, 0x98, 0x1f, 0xee, 0x17, 0x18, 0x0d, 0xc2, - 0x69, 0x4b, 0x76, 0x58, 0x75, 0xcc, 0x72, 0x0d, 0x47, 0x6d, 0x61, 0xcb, 0x2c, 0x5a, 0xd7, 0xcf, 0x7a, 0x98, 0xa9, - 0x33, 0xe5, 0x2d, 0xc8, 0xbe, 0x90, 0xbb, 0x9f, 0xaa, 0x8a, 0x2b, 0x72, 0x32, 0x19, 0x4f, 0x49, 0x35, 0x18, 0xb4, - 0x92, 0x8f, 0x31, 0x79, 0x38, 0xdc, 0x61, 0x2e, 0x2b, 0xd5, 0x0f, 0xa7, 0x0f, 0x50, 0x9f, 0xb7, 0x25, 0xc9, 0xa6, - 0x66, 0x7f, 0x82, 0x59, 0x2c, 0x10, 0x47, 0x0b, 0xbf, 0x38, 0x5f, 0x00, 0xc8, 0x32, 0x2c, 0x33, 0x25, 0x2c, 0x82, - 0x2b, 0x3d, 0x74, 0xb2, 0x64, 0xe2, 0x78, 0x3c, 0x73, 0x7b, 0x6e, 0x19, 0x1c, 0x42, 0xa2, 0x89, 0x31, 0x7e, 0x71, - 0xb3, 0x60, 0x1c, 0x87, 0xe2, 0x44, 0x78, 0xdf, 0x15, 0x24, 0x1a, 0x6b, 0x53, 0x65, 0x75, 0x95, 0xa8, 0x87, 0x09, - 0x79, 0x5c, 0x92, 0xc3, 0x92, 0x2e, 0xdd, 0xb1, 0xc4, 0xf4, 0xc3, 0xf8, 0x70, 0x32, 0x26, 0x8f, 0xe3, 0xc7, 0x13, - 0x0d, 0x37, 0xec, 0xe6, 0xc8, 0x87, 0x4b, 0x72, 0xe8, 0x57, 0x09, 0xa6, 0xa8, 0xba, 0x67, 0x6e, 0x25, 0xc9, 0x60, - 0x39, 0x48, 0x1f, 0xb7, 0xf2, 0x62, 0xad, 0x6a, 0xbc, 0xd7, 0xc7, 0x7c, 0x4a, 0x2a, 0xef, 0xc6, 0xb0, 0xa6, 0xd7, - 0xf1, 0x1f, 0xa2, 0x8c, 0x0a, 0x01, 0x88, 0x84, 0xa0, 0xde, 0xce, 0x2e, 0xb3, 0x24, 0x2e, 0xd2, 0x28, 0x6d, 0x08, - 0x4d, 0x4f, 0xd8, 0x64, 0x3c, 0x4b, 0x59, 0x7a, 0x3c, 0x79, 0x3a, 0x9b, 0x3c, 0x8d, 0x8e, 0xc6, 0x51, 0x3a, 0x18, - 0x40, 0xf2, 0xd1, 0x18, 0x5c, 0xec, 0xe0, 0x37, 0x3b, 0x82, 0xa1, 0x3b, 0x41, 0x96, 0xb0, 0x84, 0xa6, 0x7d, 0x5e, - 0x93, 0xd4, 0x70, 0x5e, 0xca, 0x9e, 0xc4, 0x77, 0x74, 0xed, 0x38, 0xb8, 0xb8, 0x2d, 0xbc, 0xb4, 0x2d, 0xbc, 0xdc, - 0x6d, 0xa1, 0xb6, 0x20, 0x28, 0xc5, 0xff, 0x8f, 0x1b, 0xc6, 0xbe, 0xbb, 0x84, 0x5e, 0x5c, 0x37, 0xd9, 0x68, 0x55, - 0x8a, 0x5a, 0xc0, 0x6d, 0x42, 0x8a, 0xc2, 0x46, 0xf1, 0x6a, 0x95, 0x2b, 0x17, 0xb1, 0x79, 0x4d, 0x01, 0xdc, 0x05, - 0xce, 0x56, 0x60, 0xa1, 0xb5, 0x81, 0xdc, 0x5f, 0xbc, 0x14, 0xcc, 0xa8, 0x7d, 0xf4, 0x3d, 0xf2, 0x8f, 0x10, 0xc1, - 0x96, 0x4e, 0xc6, 0xb3, 0x0a, 0x11, 0x2d, 0x3e, 0x25, 0xef, 0xfd, 0x37, 0x8e, 0x22, 0x73, 0x34, 0x8f, 0x51, 0xa1, - 0x65, 0x3c, 0xe2, 0xcc, 0xc9, 0xe4, 0x64, 0xe0, 0x6e, 0x06, 0x23, 0xfd, 0xb5, 0xb7, 0x19, 0x63, 0xdb, 0xa3, 0x7a, - 0xa1, 0x85, 0xa2, 0x7f, 0xe1, 0x3b, 0x5d, 0x2f, 0xe0, 0x12, 0xca, 0x81, 0x5d, 0x5f, 0x5d, 0xf1, 0x0a, 0x40, 0x84, - 0xb2, 0xa2, 0xdf, 0xef, 0xfd, 0xa1, 0xa1, 0x49, 0x2b, 0x5e, 0xbe, 0xce, 0x0a, 0xe3, 0x8c, 0x03, 0x4d, 0x05, 0xea, - 0xff, 0xb1, 0x36, 0xcf, 0x74, 0x4c, 0x66, 0xee, 0xe3, 0x70, 0x42, 0x22, 0xff, 0x35, 0xf9, 0xc4, 0x69, 0xfa, 0x89, - 0x2b, 0xda, 0x7f, 0x20, 0x33, 0xd7, 0x1c, 0x32, 0xd4, 0x5f, 0x58, 0xe6, 0x49, 0xeb, 0x75, 0x62, 0x76, 0x52, 0xb1, - 0x7a, 0x06, 0xe8, 0xe9, 0x25, 0x3c, 0xc8, 0x6b, 0x59, 0x3c, 0x85, 0xd9, 0x07, 0x35, 0x62, 0x75, 0xcc, 0xc6, 0xb3, - 0x50, 0x84, 0x13, 0xb0, 0xef, 0x9d, 0x8c, 0xe1, 0x3e, 0x20, 0xc2, 0x8f, 0x75, 0x58, 0x51, 0x94, 0x92, 0x97, 0xf0, - 0x1b, 0x14, 0x13, 0x00, 0x11, 0x08, 0x79, 0xfb, 0x7d, 0x21, 0x93, 0xf0, 0x75, 0x81, 0x29, 0xa5, 0xfc, 0xe0, 0x3f, - 0x91, 0xaa, 0x5b, 0xa6, 0x5f, 0xae, 0x1f, 0x77, 0x26, 0x24, 0x9f, 0x6e, 0x53, 0xe2, 0x3b, 0x08, 0xee, 0x2c, 0x40, - 0x07, 0x51, 0xa3, 0x19, 0xdb, 0xc3, 0xfc, 0x6e, 0xb5, 0x9f, 0xdf, 0xad, 0xfe, 0xdf, 0xf1, 0xbb, 0xd5, 0x43, 0x8c, - 0x61, 0x6d, 0xa0, 0xe1, 0x67, 0xc1, 0x38, 0x88, 0xfe, 0x73, 0x3e, 0x71, 0x2f, 0x4f, 0x7d, 0x9d, 0x15, 0xd3, 0x3d, - 0x4c, 0xb3, 0x4b, 0x50, 0x10, 0x56, 0x71, 0x97, 0x9e, 0xac, 0x6b, 0x73, 0x6b, 0x25, 0x43, 0xcc, 0xf3, 0x00, 0x6b, - 0x14, 0xd6, 0x0e, 0xd0, 0x3d, 0xaa, 0x36, 0x88, 0x15, 0xc1, 0xc3, 0x98, 0x19, 0xe9, 0xfb, 0x76, 0xab, 0x55, 0x98, - 0x0f, 0x72, 0x51, 0x90, 0x5d, 0x7f, 0x3c, 0x1b, 0x47, 0x21, 0x36, 0xe0, 0x3f, 0x66, 0xac, 0x3c, 0xd9, 0x7c, 0x27, - 0x23, 0xb5, 0x63, 0xf2, 0x34, 0xd9, 0x25, 0xbd, 0x03, 0xde, 0x21, 0x3f, 0x6f, 0x3e, 0x86, 0xa5, 0xd0, 0xfc, 0x96, - 0xb8, 0x8a, 0xcb, 0xac, 0x5e, 0x5e, 0x67, 0x09, 0x32, 0x5d, 0xf0, 0xe2, 0xb3, 0x99, 0x2e, 0xe7, 0x63, 0x75, 0xc0, - 0x38, 0x4a, 0xf1, 0xc6, 0x13, 0xa5, 0xa7, 0x2d, 0xcf, 0x0a, 0x79, 0x79, 0x92, 0x31, 0xdb, 0xb3, 0x0a, 0x9c, 0x4e, - 0xc1, 0x04, 0x5f, 0xfd, 0xb4, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x4b, 0xb1, 0xd2, 0x58, 0x4e, 0x06, 0xba, - 0x13, 0x30, 0x43, 0x45, 0x81, 0x17, 0x28, 0xf8, 0x8b, 0x06, 0x46, 0xf4, 0xa5, 0xfd, 0x4d, 0x06, 0x1a, 0xe9, 0x52, - 0x9f, 0x08, 0x63, 0xcb, 0xed, 0x94, 0x69, 0x2b, 0xca, 0x19, 0x67, 0xef, 0xe5, 0x95, 0x02, 0x0c, 0xf0, 0x36, 0xb7, - 0xd1, 0x45, 0x82, 0x5e, 0x0b, 0x52, 0xe7, 0x0d, 0xdc, 0xcd, 0x32, 0xd2, 0xc2, 0xc5, 0xc7, 0xb5, 0xc3, 0x82, 0x3b, - 0xf6, 0x0b, 0xb1, 0xd0, 0x9a, 0x69, 0x30, 0x66, 0x73, 0x82, 0x05, 0x56, 0x32, 0x50, 0x60, 0x31, 0x53, 0x96, 0xa6, - 0xf5, 0x90, 0x1f, 0x1e, 0xa1, 0xb5, 0x69, 0x3d, 0xe0, 0x87, 0x47, 0x4d, 0x94, 0x1d, 0x43, 0x96, 0x13, 0x37, 0x83, - 0x7c, 0xdd, 0x44, 0x3a, 0x45, 0x67, 0x77, 0xeb, 0x4b, 0xdd, 0x51, 0xdd, 0x80, 0xeb, 0x07, 0x20, 0x80, 0x0d, 0xc0, - 0x21, 0x50, 0x0e, 0x96, 0x42, 0x04, 0x8b, 0x32, 0x89, 0xf6, 0x35, 0x74, 0xde, 0x28, 0xf8, 0x2f, 0x70, 0x17, 0x11, - 0x2b, 0xf7, 0x13, 0x04, 0xfe, 0x8a, 0x32, 0xa5, 0x4c, 0x71, 0x3f, 0x51, 0xea, 0x15, 0xca, 0x99, 0x6f, 0xcd, 0x07, - 0xd1, 0x9a, 0x08, 0x55, 0x8c, 0x21, 0xf8, 0xb7, 0xb2, 0x4c, 0x59, 0xaa, 0x4a, 0xf5, 0xa1, 0xf6, 0x5a, 0x2b, 0xad, - 0xe5, 0xe3, 0xc8, 0x79, 0x8d, 0xa1, 0x63, 0x13, 0x6b, 0x29, 0x27, 0x53, 0x67, 0x6f, 0x0e, 0x45, 0x64, 0x01, 0xa7, - 0x13, 0x36, 0x9e, 0x26, 0xc7, 0x62, 0x9a, 0x58, 0xc8, 0xfc, 0x9c, 0x61, 0x64, 0x55, 0x0d, 0xc2, 0x22, 0x6d, 0x28, - 0x4d, 0x01, 0x3a, 0x39, 0x21, 0x64, 0x8a, 0xa1, 0x28, 0xf2, 0x91, 0xea, 0x87, 0xf1, 0x66, 0xb5, 0x5f, 0xbc, 0x53, - 0x00, 0xa7, 0x61, 0x02, 0x81, 0xc0, 0xcb, 0xf8, 0x36, 0x2b, 0xae, 0xc0, 0x63, 0x78, 0x00, 0x5f, 0x82, 0x9b, 0x5c, - 0xca, 0x7e, 0xab, 0xc3, 0x1c, 0xd7, 0x16, 0x30, 0x68, 0xb0, 0x7a, 0x10, 0x1d, 0x2e, 0xa5, 0x7e, 0x57, 0x01, 0x62, - 0x63, 0x0a, 0xff, 0xb3, 0xb5, 0x61, 0xcf, 0xbe, 0x97, 0x4d, 0x43, 0xeb, 0x84, 0xd3, 0xe2, 0x2a, 0x87, 0x28, 0x2a, - 0x83, 0x18, 0xdc, 0x91, 0x1c, 0x3e, 0xef, 0x5d, 0x15, 0x5e, 0x12, 0x70, 0x2b, 0x8b, 0x45, 0xb8, 0xa2, 0xcb, 0xd1, - 0x1d, 0x5d, 0x8f, 0x6e, 0xe9, 0x98, 0x4e, 0xbe, 0x19, 0x83, 0x45, 0xb6, 0x4a, 0xbd, 0xa7, 0xeb, 0xd1, 0x92, 0x7e, - 0x3b, 0xa6, 0x47, 0x7f, 0x03, 0x13, 0x3e, 0x3c, 0x4c, 0xe8, 0x25, 0x38, 0x76, 0x91, 0x06, 0x3d, 0x35, 0x5d, 0x83, - 0xc3, 0x7a, 0x94, 0x0f, 0xf9, 0x28, 0xa7, 0x7c, 0x54, 0x0e, 0xeb, 0x11, 0x78, 0x3a, 0xd6, 0x43, 0x3e, 0xaa, 0x29, - 0x1f, 0x5d, 0x0c, 0xeb, 0xd1, 0x05, 0xf1, 0x9b, 0xfe, 0xaa, 0xe6, 0xd7, 0x15, 0x4b, 0x61, 0x5b, 0xc0, 0xf2, 0xb5, - 0xab, 0x2c, 0x49, 0xdd, 0x55, 0xad, 0x4f, 0x66, 0xc3, 0xd9, 0x9b, 0xeb, 0x2e, 0x27, 0x06, 0x8f, 0xdb, 0xa4, 0xc3, - 0xd5, 0x97, 0x13, 0x79, 0xd2, 0x4b, 0xe4, 0x87, 0xf1, 0x54, 0x9d, 0x43, 0x60, 0x26, 0x31, 0x0b, 0x63, 0x86, 0xcd, - 0x54, 0x69, 0xa0, 0xc0, 0xc9, 0x46, 0x8e, 0x8b, 0x62, 0x36, 0xca, 0x29, 0xbc, 0x8f, 0x09, 0x89, 0xf0, 0xac, 0x3a, - 0xa9, 0x47, 0x25, 0xc4, 0x1c, 0x61, 0x21, 0x3e, 0x42, 0xbf, 0xe4, 0x47, 0x0e, 0x12, 0x78, 0x86, 0x7d, 0x2d, 0x07, - 0x31, 0x1c, 0xf1, 0xa6, 0xb2, 0x7a, 0x16, 0x26, 0x50, 0x59, 0x3d, 0x2c, 0x74, 0x65, 0x25, 0xcd, 0x46, 0xb5, 0x5b, - 0x59, 0x8d, 0x63, 0x94, 0x10, 0x12, 0x15, 0xaa, 0x32, 0x50, 0x9f, 0x24, 0x2c, 0x2c, 0x54, 0x65, 0x17, 0xf2, 0xa3, - 0x0b, 0xb7, 0xb2, 0x0b, 0x70, 0x21, 0x1d, 0x24, 0xee, 0x55, 0x2a, 0x4f, 0xdb, 0xd7, 0x41, 0x6f, 0x55, 0xd1, 0x0d, - 0xbf, 0xab, 0xcb, 0x38, 0x2a, 0xa8, 0x8d, 0x01, 0x8d, 0x0b, 0x23, 0x12, 0x54, 0xad, 0x51, 0xf0, 0x87, 0x04, 0x51, - 0x69, 0x0c, 0x5e, 0x9d, 0x49, 0xd7, 0x4a, 0xad, 0x69, 0x35, 0x28, 0x06, 0x25, 0xdc, 0x9f, 0xf2, 0xd6, 0x42, 0xfa, - 0x1e, 0x22, 0x2a, 0x43, 0x79, 0x83, 0x7f, 0x60, 0xf0, 0x64, 0xb6, 0x4a, 0xc3, 0x64, 0x74, 0x4f, 0xe3, 0xd1, 0x12, - 0xe1, 0x60, 0xd8, 0x3a, 0x95, 0x78, 0xeb, 0x97, 0x90, 0x7e, 0x47, 0xe3, 0xd1, 0x2d, 0x4d, 0x8d, 0xcd, 0xa9, 0x86, - 0xba, 0xea, 0x8d, 0xe9, 0x5d, 0x04, 0xaf, 0xef, 0xa3, 0x25, 0x85, 0xad, 0x74, 0x9a, 0x67, 0x57, 0x45, 0x94, 0x52, - 0x44, 0x20, 0x5c, 0x23, 0x72, 0xe0, 0x52, 0xa1, 0x0d, 0xae, 0x07, 0x50, 0x86, 0x82, 0x0b, 0x5c, 0x0e, 0xe2, 0xd1, - 0xd2, 0x21, 0x53, 0x4b, 0x75, 0x91, 0x45, 0xf8, 0x68, 0x6b, 0xa3, 0x25, 0x79, 0x46, 0x2c, 0x8c, 0x4b, 0x18, 0x42, - 0x55, 0x58, 0xa1, 0x0b, 0x12, 0x36, 0x70, 0x64, 0x2f, 0x2c, 0xeb, 0x70, 0x03, 0xa6, 0x45, 0xf7, 0x60, 0x1e, 0x05, - 0x0a, 0x07, 0x9b, 0x20, 0xdc, 0x84, 0xa2, 0x9d, 0xa3, 0xd0, 0x39, 0x9c, 0x09, 0x4a, 0x77, 0x26, 0x08, 0x69, 0x57, - 0x37, 0xd9, 0x12, 0xae, 0xc1, 0xf6, 0x0e, 0x9d, 0x8a, 0x4a, 0xaa, 0xce, 0x2d, 0x98, 0x2c, 0xe1, 0x11, 0xb6, 0x84, - 0xa9, 0x99, 0x4e, 0xe1, 0x06, 0x7c, 0x78, 0xb4, 0x33, 0xdf, 0xe5, 0xec, 0xcd, 0x21, 0xd8, 0x76, 0x4a, 0x1f, 0x10, - 0x43, 0xec, 0x96, 0x6c, 0x3c, 0x5d, 0x1e, 0x17, 0xd3, 0x25, 0x12, 0x3b, 0x4d, 0xb7, 0x18, 0x9f, 0x2f, 0x17, 0x34, - 0xc1, 0xb3, 0x8d, 0xd5, 0xf3, 0xa5, 0x46, 0x4b, 0x49, 0x19, 0xae, 0xb7, 0x25, 0xfa, 0xff, 0xcb, 0x8b, 0x5f, 0x0a, - 0xf0, 0x12, 0x8c, 0x05, 0x80, 0x70, 0x0f, 0xa6, 0x05, 0xa9, 0x89, 0xb2, 0xb1, 0x4c, 0xc3, 0x14, 0x17, 0x81, 0x4e, - 0xe9, 0xf7, 0xc3, 0x9c, 0xa5, 0xc4, 0x81, 0x0e, 0x35, 0xa3, 0xb4, 0x4e, 0x5d, 0x21, 0x08, 0xf0, 0x48, 0xf2, 0x1c, - 0x9b, 0x7c, 0x33, 0x9e, 0x05, 0x72, 0x20, 0x82, 0x28, 0x3b, 0xc6, 0x47, 0x0c, 0x5c, 0x14, 0xa9, 0xb8, 0x9d, 0xb6, - 0x88, 0xcb, 0xdd, 0x63, 0x16, 0xe2, 0x24, 0x61, 0xae, 0x59, 0x36, 0x64, 0x75, 0x84, 0x09, 0xaa, 0x30, 0x30, 0xcb, - 0x1b, 0xb2, 0xfa, 0xf0, 0x08, 0x22, 0xb5, 0x9a, 0x32, 0x56, 0x5d, 0x65, 0x7c, 0x0b, 0x40, 0xd6, 0x8c, 0xb1, 0xa3, - 0xbf, 0x8d, 0x67, 0xf2, 0x9b, 0x28, 0xe4, 0x27, 0x47, 0x7f, 0x83, 0xe4, 0xe3, 0x6f, 0x91, 0x99, 0x83, 0x64, 0xaf, - 0xa0, 0x2b, 0x7f, 0xd6, 0x15, 0x94, 0x26, 0xae, 0xbd, 0x42, 0xad, 0x3d, 0xa1, 0xd7, 0x5e, 0x89, 0xee, 0xd4, 0x9a, - 0xf7, 0x90, 0xb6, 0xb3, 0x60, 0x82, 0x8e, 0x66, 0x77, 0xa0, 0x83, 0xb7, 0x8a, 0xa0, 0x17, 0x49, 0xa8, 0x3d, 0x42, - 0xa5, 0x51, 0x2f, 0xec, 0xc8, 0x6e, 0xd6, 0x25, 0x73, 0x0c, 0x98, 0x63, 0x73, 0x0e, 0x55, 0xc3, 0x5c, 0x1e, 0xd4, - 0x29, 0x2b, 0x86, 0x39, 0x1e, 0xc0, 0x6b, 0x26, 0x86, 0xd5, 0x20, 0x57, 0x28, 0xdf, 0x97, 0xac, 0x1c, 0x16, 0x83, - 0x5c, 0x71, 0x33, 0x53, 0x3f, 0x36, 0x6d, 0xa2, 0xc2, 0x33, 0xaf, 0xd8, 0xc9, 0xaa, 0x07, 0x7c, 0x2c, 0x78, 0x32, - 0xbb, 0x9e, 0x8f, 0xaf, 0x81, 0x93, 0xd9, 0xdc, 0x45, 0x4b, 0x7a, 0x1f, 0xa5, 0xf4, 0x36, 0x5a, 0xd3, 0x65, 0x74, - 0xa9, 0x4d, 0x8c, 0x93, 0x06, 0xce, 0x01, 0x68, 0x15, 0x40, 0xe2, 0xc9, 0x5f, 0xef, 0x79, 0x52, 0x87, 0x4b, 0x9a, - 0x82, 0xdb, 0xb0, 0x6b, 0x9f, 0x79, 0xed, 0x4a, 0xa4, 0x36, 0x88, 0xb1, 0x66, 0x0c, 0x15, 0x37, 0xce, 0xba, 0x8f, - 0xaa, 0x06, 0x76, 0xae, 0x8d, 0x4d, 0x54, 0x0f, 0x27, 0xd3, 0x02, 0x10, 0x5b, 0x8b, 0xe1, 0xd0, 0x1e, 0x21, 0xbb, - 0xc7, 0x8f, 0x0a, 0xf4, 0xdc, 0x13, 0x06, 0xdb, 0xb6, 0xe5, 0x0f, 0x0c, 0x61, 0x4a, 0x3f, 0x7d, 0xe4, 0x17, 0x84, - 0x4c, 0xaf, 0xe0, 0x6c, 0x04, 0xea, 0x68, 0x84, 0x4e, 0xbf, 0xd5, 0x61, 0xa9, 0x0e, 0xf0, 0xcd, 0x5d, 0x94, 0xd0, - 0xfb, 0x28, 0x77, 0xc8, 0xda, 0xb2, 0x61, 0x62, 0x7a, 0x9e, 0x85, 0xbc, 0x7d, 0xa0, 0x17, 0x0b, 0x00, 0xd1, 0x1a, - 0xc4, 0xae, 0xd4, 0xf5, 0x08, 0x9c, 0x86, 0xd0, 0x24, 0x34, 0x82, 0xab, 0x0a, 0xc2, 0x08, 0xd8, 0x92, 0xf0, 0x37, - 0x98, 0xa8, 0xc0, 0x17, 0xe0, 0x22, 0x93, 0xa6, 0x39, 0x0f, 0x1a, 0x77, 0x24, 0xcf, 0xca, 0xb6, 0xb7, 0x2b, 0x8c, - 0x26, 0x18, 0x7b, 0xa2, 0x7d, 0x1e, 0x29, 0x46, 0x71, 0x99, 0x84, 0xd9, 0xe8, 0x4e, 0x9e, 0xe7, 0x34, 0x1b, 0xdd, - 0xab, 0x5f, 0x35, 0x1d, 0xd3, 0xef, 0x54, 0x40, 0x1b, 0x29, 0x7d, 0xeb, 0x38, 0x1b, 0xd0, 0x7a, 0xb1, 0xd0, 0xfe, - 0xd7, 0x62, 0x74, 0x47, 0xc5, 0xe8, 0xde, 0xb5, 0xa4, 0x9a, 0x4c, 0xcb, 0xe3, 0x0a, 0x0d, 0xa9, 0x3a, 0xbf, 0x2f, - 0x81, 0x9f, 0x2b, 0xb4, 0xef, 0xb4, 0xfe, 0xde, 0x69, 0xff, 0x45, 0x27, 0x4f, 0x20, 0x59, 0xa2, 0x92, 0xd5, 0x23, - 0xb0, 0x63, 0x5f, 0xe7, 0x71, 0xa9, 0x47, 0x29, 0xa6, 0xc6, 0xa4, 0x1f, 0x03, 0x57, 0x4c, 0x7b, 0x25, 0xb8, 0x5a, - 0x6e, 0xb7, 0x32, 0x86, 0x26, 0xec, 0xd9, 0x31, 0x44, 0x3d, 0xd7, 0x8e, 0x51, 0xc2, 0x73, 0x0f, 0x88, 0x95, 0xcc, - 0x5b, 0xba, 0x04, 0x24, 0xf0, 0xd6, 0xc1, 0xa4, 0x28, 0x46, 0x29, 0xc0, 0x4f, 0xa8, 0x3c, 0x0e, 0xfa, 0x84, 0x7c, - 0xa1, 0x50, 0x27, 0x84, 0xb7, 0x25, 0x70, 0xfc, 0x61, 0x7d, 0x54, 0x08, 0x5e, 0xe5, 0xb8, 0xfe, 0x0a, 0xe3, 0xfa, - 0x4b, 0x85, 0xe3, 0x8e, 0x65, 0xbb, 0x7e, 0xde, 0xa6, 0x46, 0x2f, 0xc1, 0xc2, 0x77, 0x23, 0xcd, 0x23, 0xb9, 0x41, - 0x48, 0x95, 0x60, 0xa5, 0x76, 0x21, 0xc1, 0xfc, 0x4b, 0x39, 0x5b, 0x9d, 0xb9, 0xea, 0x91, 0x07, 0xe5, 0x6c, 0x6a, - 0xfa, 0x3d, 0x09, 0xda, 0x7d, 0x47, 0x9a, 0xc3, 0x5b, 0x74, 0xf8, 0xec, 0x1a, 0x4b, 0xcc, 0x9d, 0x44, 0xc9, 0xf3, - 0x49, 0x60, 0xab, 0xe7, 0xd9, 0xb5, 0xf4, 0xb1, 0xda, 0xc5, 0xf1, 0xd3, 0xe7, 0x4f, 0x5c, 0x87, 0x69, 0xe5, 0x29, - 0x41, 0xc0, 0x9b, 0x43, 0xdb, 0x15, 0xca, 0x80, 0x86, 0xfa, 0x06, 0x8e, 0x73, 0x35, 0xac, 0x15, 0x01, 0x53, 0x52, - 0x1e, 0x15, 0xe0, 0x50, 0xe7, 0x91, 0xbb, 0x69, 0x58, 0x6b, 0xba, 0xe6, 0xf5, 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, - 0x3f, 0x3c, 0x1a, 0xd4, 0xf8, 0x93, 0xf8, 0xa3, 0xd1, 0xce, 0x0d, 0x77, 0x9a, 0x0a, 0x33, 0xd7, 0x62, 0x45, 0x76, - 0x47, 0xc9, 0xc9, 0xef, 0xe8, 0x85, 0xb1, 0x3f, 0xff, 0xb9, 0x98, 0x70, 0xd2, 0x12, 0x13, 0xa2, 0xa5, 0x83, 0x12, - 0x1d, 0xec, 0x28, 0xaf, 0xcc, 0x4b, 0xbc, 0x74, 0x8e, 0xff, 0x7d, 0x3d, 0xd6, 0xae, 0x02, 0xa1, 0xd5, 0xc9, 0xc3, - 0xf6, 0x64, 0x81, 0xa8, 0x01, 0xd5, 0xec, 0xb2, 0x1c, 0x69, 0xda, 0x59, 0x93, 0x8d, 0x27, 0x73, 0xdd, 0xcd, 0xe2, - 0xd9, 0x4c, 0x76, 0x2c, 0x2c, 0x3d, 0x0c, 0xc6, 0x4e, 0x15, 0x7d, 0x0e, 0x5a, 0x7e, 0x04, 0xcf, 0x7d, 0xe5, 0x99, - 0xcb, 0x66, 0x69, 0xf1, 0x02, 0x9d, 0x73, 0xaa, 0x21, 0x87, 0x1c, 0x80, 0xe3, 0x02, 0x8d, 0x25, 0x8a, 0x28, 0x08, - 0x1a, 0x13, 0x84, 0x5d, 0x95, 0xee, 0x48, 0x9f, 0x76, 0xf1, 0x69, 0x2b, 0xf4, 0x3d, 0xde, 0x67, 0x20, 0x31, 0x75, - 0x24, 0x0f, 0xb5, 0xd7, 0x1c, 0x95, 0x3c, 0x8b, 0x53, 0x85, 0xcf, 0x2f, 0x65, 0x67, 0xfe, 0xdd, 0x6a, 0x4c, 0xf1, - 0x1f, 0x69, 0xda, 0x77, 0x2e, 0x4d, 0x13, 0xdd, 0xb5, 0x3c, 0x68, 0x29, 0x2c, 0x38, 0x6e, 0x1b, 0x77, 0xfd, 0xfa, - 0x39, 0xaa, 0x61, 0x61, 0x73, 0x38, 0x13, 0x3a, 0xb4, 0x77, 0x95, 0x9d, 0xb9, 0x3e, 0xa2, 0x56, 0x5d, 0xac, 0xda, - 0x80, 0x92, 0x25, 0xe7, 0xd6, 0xe9, 0x88, 0x95, 0xbe, 0x3b, 0x0c, 0x77, 0xe6, 0x51, 0xb1, 0xbb, 0xdb, 0xed, 0x84, - 0xb4, 0xed, 0x83, 0xf1, 0xbe, 0x84, 0x85, 0x58, 0xef, 0xb0, 0x83, 0xef, 0xc3, 0xfa, 0x31, 0x1f, 0xfc, 0x1c, 0xca, - 0x75, 0x55, 0x3f, 0xcf, 0xa4, 0xa1, 0xcf, 0xcb, 0x52, 0x5c, 0xcb, 0x4e, 0xb9, 0x42, 0xb7, 0x96, 0xa9, 0xf7, 0x9b, - 0xf8, 0x4d, 0x2b, 0x40, 0x8c, 0xd3, 0x15, 0x23, 0xc5, 0x1b, 0x1a, 0x61, 0x9c, 0x87, 0xdb, 0x64, 0x51, 0x4b, 0x95, - 0x40, 0xd4, 0xe6, 0x27, 0x8f, 0x79, 0xa4, 0xd5, 0x99, 0xf0, 0xdd, 0x63, 0xee, 0x4a, 0xd7, 0x76, 0x9b, 0xf8, 0xa9, - 0xa6, 0x1d, 0xee, 0x0e, 0x74, 0x47, 0xeb, 0x1e, 0x6e, 0x9e, 0xc9, 0xcf, 0x23, 0xfd, 0xc5, 0x00, 0x9b, 0xb5, 0xcb, - 0xb8, 0xec, 0x18, 0xee, 0x3b, 0xd3, 0x83, 0xb1, 0x80, 0x40, 0x62, 0x86, 0x5e, 0x06, 0x36, 0x70, 0x81, 0xbd, 0xc2, - 0x80, 0x21, 0xae, 0x6e, 0xc9, 0xb9, 0xb2, 0xb2, 0x75, 0x91, 0xb7, 0x51, 0x21, 0xd8, 0x34, 0x1d, 0x37, 0x49, 0x0e, - 0xc1, 0x09, 0x5b, 0xee, 0x7d, 0xed, 0xb5, 0x33, 0xfc, 0xc7, 0xa0, 0xb2, 0x6e, 0x89, 0x8e, 0x51, 0xdb, 0x63, 0xa5, - 0xee, 0xd5, 0xbc, 0xca, 0x7d, 0xe4, 0x58, 0xbf, 0xe9, 0x97, 0x9a, 0x7d, 0xc1, 0x6b, 0x29, 0x38, 0x34, 0xb6, 0x5b, - 0x61, 0x17, 0x8b, 0x73, 0xb4, 0x1a, 0x59, 0x6b, 0xab, 0xbd, 0x46, 0x2a, 0xba, 0x7f, 0xcd, 0x71, 0x62, 0x2d, 0x85, - 0xcd, 0x87, 0x0f, 0x17, 0x6c, 0x9b, 0x00, 0x06, 0x2d, 0x3a, 0x0b, 0x94, 0x20, 0x93, 0x95, 0xaa, 0xdd, 0x4c, 0x89, - 0x5b, 0xee, 0x67, 0x5d, 0x66, 0x3b, 0x8f, 0x5f, 0x3b, 0x69, 0x9f, 0xf8, 0x1c, 0xfd, 0x30, 0xbf, 0x33, 0x4e, 0x4a, - 0xd6, 0x30, 0xae, 0xe5, 0xff, 0x57, 0xd3, 0xab, 0x32, 0x4b, 0xa3, 0x8d, 0xe6, 0xc1, 0x4c, 0xa8, 0x4d, 0x17, 0x1a, - 0xa3, 0xb6, 0xcb, 0x46, 0x12, 0xd1, 0xfa, 0x0e, 0x04, 0x33, 0x92, 0xfb, 0xaa, 0xda, 0xbc, 0x52, 0x6d, 0xe0, 0x1d, - 0x3e, 0xb1, 0xd1, 0x3d, 0xdb, 0x13, 0x42, 0xf9, 0xee, 0x69, 0xa1, 0x57, 0x2d, 0xad, 0x3c, 0xb6, 0xab, 0x72, 0x2e, - 0x46, 0xb5, 0x7a, 0xc2, 0x64, 0xc3, 0x82, 0xc9, 0xfe, 0x7f, 0x5f, 0x66, 0x69, 0x9b, 0xa2, 0x03, 0xd3, 0xe9, 0xfb, - 0x74, 0xd2, 0x0d, 0xae, 0x33, 0x60, 0x11, 0xc1, 0x96, 0x0a, 0xc7, 0xa3, 0x50, 0x6e, 0x90, 0x30, 0x11, 0x5c, 0x47, - 0xbd, 0xec, 0x68, 0x99, 0x94, 0x55, 0x01, 0xcf, 0x2f, 0x5d, 0x65, 0x3a, 0x8e, 0x86, 0x7e, 0xff, 0x3a, 0xd5, 0xa1, - 0x5f, 0x69, 0xe1, 0x9c, 0x23, 0xcb, 0xcc, 0x51, 0x75, 0xc8, 0x30, 0x46, 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x86, - 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x8c, 0x81, 0x5c, 0x2a, 0x83, 0x7a, 0x45, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, - 0x42, 0x2f, 0x59, 0xe1, 0xde, 0x85, 0xd6, 0x20, 0x50, 0x14, 0x7e, 0xca, 0xf4, 0x42, 0xb5, 0xf3, 0x92, 0x26, 0xb4, - 0xa4, 0x2b, 0xd2, 0x80, 0xbe, 0xd7, 0xca, 0xd9, 0xd1, 0xc9, 0x4e, 0xcf, 0x7a, 0xcc, 0xca, 0xe1, 0x64, 0x1a, 0xc3, - 0x35, 0x2d, 0xb6, 0xd7, 0xb4, 0xa5, 0x7f, 0xe3, 0xf2, 0x36, 0x8e, 0x47, 0xbb, 0x40, 0xda, 0xa6, 0xb8, 0xfd, 0xd4, - 0xe1, 0xf6, 0xd7, 0x0d, 0x5b, 0x4e, 0x7b, 0xeb, 0xed, 0xb6, 0x97, 0x82, 0x8d, 0xa8, 0xc3, 0xc7, 0xaf, 0xa5, 0x74, - 0xdd, 0x70, 0xf9, 0x29, 0x3c, 0x3b, 0x7c, 0xfd, 0xd2, 0x05, 0x97, 0xa3, 0x75, 0x9b, 0xbb, 0x5f, 0xee, 0x22, 0xcb, - 0x7d, 0xd6, 0xd0, 0x72, 0x35, 0x43, 0x3e, 0x79, 0xd6, 0xda, 0x3b, 0xd4, 0x82, 0xe5, 0xac, 0x9b, 0xf0, 0xc4, 0x60, - 0xc7, 0x5e, 0x7b, 0x9b, 0xa3, 0xd6, 0x97, 0x2c, 0x8f, 0x04, 0xba, 0x24, 0x4f, 0x37, 0xfd, 0x83, 0x08, 0xf3, 0xd1, - 0x1d, 0xcd, 0x01, 0x57, 0xac, 0x36, 0x97, 0x0c, 0xd2, 0xd4, 0xed, 0x25, 0x2e, 0x7d, 0x85, 0x43, 0xb2, 0xc1, 0x27, - 0xcd, 0x54, 0x7d, 0x72, 0xc9, 0x83, 0xff, 0xb7, 0x51, 0xab, 0xf4, 0xec, 0x24, 0x7b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, - 0x4c, 0x34, 0x12, 0xf0, 0xd4, 0x2c, 0x86, 0x7a, 0x54, 0x97, 0x71, 0x51, 0xe5, 0x3a, 0xe6, 0xd8, 0xde, 0xae, 0xa1, - 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xfa, 0x0e, 0x6c, 0x04, 0x3a, 0x2a, 0x51, 0x5f, 0x86, 0x99, 0xbe, 0x0c, 0xd3, - 0xae, 0xad, 0x02, 0xc3, 0x2b, 0xb7, 0x4a, 0x22, 0x5d, 0x8d, 0x7a, 0x5c, 0xcf, 0x92, 0xdf, 0x8b, 0xbc, 0x7b, 0x4d, - 0x3a, 0x12, 0x7f, 0xba, 0x74, 0xe4, 0xf5, 0x30, 0x20, 0xe2, 0x73, 0x96, 0x86, 0x6d, 0x14, 0x04, 0xa7, 0x96, 0x3b, - 0x90, 0xe6, 0x23, 0x40, 0xe6, 0xc7, 0x69, 0xf8, 0x4e, 0x89, 0x73, 0xc8, 0x46, 0x6a, 0x9c, 0xd8, 0x52, 0xab, 0x87, - 0xe0, 0xce, 0x7b, 0xcd, 0x63, 0x08, 0x7c, 0xf8, 0x01, 0x37, 0x83, 0x8c, 0x6e, 0x4b, 0x74, 0x94, 0x36, 0x87, 0xba, - 0xe5, 0x23, 0x4f, 0xa8, 0x64, 0x64, 0x78, 0x31, 0xb4, 0x77, 0x47, 0x60, 0x54, 0x5b, 0x81, 0xcc, 0xb0, 0x3c, 0x3c, - 0x1a, 0xa6, 0x52, 0x50, 0x34, 0x14, 0xc3, 0x25, 0xca, 0x01, 0x31, 0x09, 0x04, 0x46, 0xe5, 0x20, 0x55, 0x95, 0xc9, - 0x17, 0x83, 0x54, 0xdd, 0xaa, 0x48, 0x73, 0x9e, 0x85, 0x35, 0x55, 0x2d, 0xa2, 0x63, 0x3a, 0x14, 0x74, 0xa9, 0x77, - 0x6a, 0xae, 0xa4, 0x17, 0x72, 0x39, 0x3e, 0x53, 0x69, 0x30, 0x8a, 0x67, 0x36, 0x45, 0xbd, 0x95, 0xfb, 0xd9, 0x7d, - 0x8b, 0x29, 0x0d, 0x62, 0x53, 0x3b, 0x8b, 0x18, 0x56, 0xed, 0x87, 0xac, 0xce, 0x41, 0xbb, 0x0b, 0xca, 0xc6, 0x5a, - 0x3b, 0xcf, 0x7b, 0xc1, 0xcc, 0x41, 0xdb, 0x58, 0xfb, 0x3e, 0xf4, 0x5a, 0x8c, 0xda, 0x1b, 0x53, 0x85, 0x7b, 0x02, - 0x3f, 0x4d, 0xd0, 0x74, 0x27, 0xf2, 0x1c, 0x75, 0xc8, 0xbb, 0xfb, 0x99, 0x25, 0x3b, 0x93, 0x4f, 0x62, 0x99, 0x34, - 0xed, 0x63, 0x12, 0xa3, 0x96, 0x18, 0x46, 0x17, 0x6e, 0x64, 0x52, 0xfb, 0xb9, 0x33, 0xfd, 0x88, 0x67, 0xf2, 0xb0, - 0x1d, 0x1a, 0x75, 0xa5, 0x61, 0x2d, 0x29, 0xa2, 0xba, 0xa0, 0xb7, 0xa6, 0x3a, 0x3a, 0xa2, 0x4e, 0x47, 0x60, 0x75, - 0x45, 0x1b, 0xd4, 0x00, 0x4c, 0xc6, 0x8d, 0xa9, 0xcd, 0xe5, 0x60, 0x1a, 0xa3, 0x2a, 0x78, 0x4a, 0x77, 0x85, 0xd2, - 0xbd, 0x49, 0xd3, 0xb4, 0x86, 0xd8, 0x00, 0x06, 0x04, 0x76, 0xf4, 0xe4, 0xf4, 0x07, 0x3e, 0x2a, 0x00, 0x0d, 0xbc, - 0xdb, 0x99, 0xca, 0x91, 0xa8, 0x77, 0x72, 0xd3, 0xfa, 0xa9, 0x4e, 0x55, 0x2e, 0x80, 0x8a, 0x3b, 0x4b, 0xe7, 0x97, - 0x7a, 0xc4, 0x02, 0x18, 0xf7, 0xc0, 0x9a, 0xea, 0x9d, 0x66, 0x60, 0x3d, 0x91, 0xe7, 0x59, 0xc5, 0x13, 0x51, 0xc0, - 0x8c, 0x88, 0xeb, 0x6b, 0x51, 0xc0, 0x30, 0xc8, 0x01, 0x40, 0x8b, 0xe6, 0x2a, 0x9a, 0xf0, 0xaf, 0x1a, 0xba, 0x2f, - 0x0f, 0xff, 0x4a, 0xe5, 0xfa, 0x7a, 0xdc, 0x80, 0xa1, 0xf2, 0xba, 0xe6, 0x3b, 0x99, 0xbe, 0xe6, 0x4f, 0x9c, 0x4c, - 0x4b, 0xb1, 0x2e, 0x77, 0xb2, 0x7c, 0xf5, 0x35, 0x7f, 0xaa, 0xf2, 0x1c, 0x3d, 0x69, 0x68, 0x1a, 0xdf, 0xef, 0x64, - 0xf9, 0xe6, 0xeb, 0x27, 0x26, 0xcf, 0x57, 0xe3, 0x86, 0xde, 0x72, 0xfe, 0xd1, 0x66, 0x9a, 0xa8, 0xaa, 0xc6, 0x4f, - 0xbe, 0x31, 0xb9, 0x9e, 0x34, 0xf4, 0x5a, 0x14, 0xf5, 0x72, 0xa7, 0xa8, 0xa3, 0xaf, 0x8f, 0xbe, 0xe1, 0x5f, 0xeb, - 0xee, 0x1d, 0x35, 0xf4, 0xcf, 0x75, 0x5c, 0xd6, 0xbc, 0xdc, 0x29, 0xee, 0x6f, 0xdf, 0x7c, 0xf3, 0xc4, 0x64, 0x7c, - 0xd2, 0xd0, 0x7b, 0x1e, 0x77, 0xb4, 0x7d, 0xf2, 0xf4, 0x09, 0xff, 0x5b, 0xd3, 0xd0, 0x5f, 0x98, 0x1b, 0x1c, 0xf5, - 0x34, 0x73, 0xf4, 0xf0, 0x89, 0xf0, 0x51, 0x03, 0x86, 0x0e, 0x1a, 0x40, 0x2e, 0x8c, 0x9a, 0x66, 0x8f, 0x57, 0x2e, - 0xb8, 0x7d, 0x9f, 0xc7, 0x69, 0xbc, 0x82, 0x83, 0x60, 0x83, 0xc6, 0x59, 0x25, 0x70, 0xaa, 0xc0, 0x7b, 0x46, 0x05, - 0xcd, 0x2a, 0xf1, 0x0f, 0xce, 0x3f, 0xc2, 0xa0, 0x21, 0xa4, 0x8d, 0x8c, 0x0c, 0xf4, 0x76, 0xa5, 0x22, 0x1b, 0xa1, - 0xff, 0xa6, 0x1f, 0x07, 0xc7, 0x85, 0xd1, 0xeb, 0xf7, 0xc3, 0x92, 0x55, 0x61, 0x49, 0x08, 0xfd, 0x23, 0x2c, 0xc1, - 0xa1, 0xa4, 0x64, 0x4e, 0x3e, 0xed, 0x7b, 0xae, 0x8c, 0xc2, 0x42, 0x10, 0xdd, 0x45, 0xe6, 0x01, 0x55, 0x8f, 0xae, - 0x43, 0x37, 0xc4, 0xcb, 0x0a, 0x4b, 0x86, 0x0e, 0x66, 0x30, 0x43, 0x50, 0xfc, 0x6b, 0x1e, 0x0a, 0xf0, 0x89, 0x07, - 0xf8, 0xe8, 0x31, 0x99, 0x71, 0x79, 0xad, 0x7d, 0x7b, 0x19, 0x96, 0x34, 0x50, 0x6d, 0x87, 0xa0, 0x03, 0x91, 0xfb, - 0x02, 0x3c, 0x05, 0x06, 0x2e, 0x2c, 0xec, 0x52, 0xec, 0xfa, 0xab, 0xff, 0xa2, 0x59, 0x47, 0x1b, 0x7e, 0xf4, 0x17, - 0xe3, 0xc2, 0x9e, 0x91, 0xa9, 0x38, 0x2e, 0x86, 0x93, 0xe9, 0x60, 0x20, 0x6c, 0x1c, 0xb7, 0xd3, 0x6c, 0xfe, 0xcb, - 0x5c, 0x2c, 0x16, 0xa8, 0xfb, 0xc6, 0x79, 0x9d, 0xa9, 0xbf, 0x91, 0x72, 0x3e, 0x78, 0x7d, 0xfa, 0xdb, 0xf9, 0xd9, - 0xe9, 0x4b, 0x70, 0x3e, 0xf8, 0xf0, 0xe2, 0xfb, 0x17, 0xef, 0x65, 0x70, 0x77, 0x39, 0xe7, 0xfd, 0xbe, 0x95, 0xfa, - 0x84, 0x7c, 0x58, 0x93, 0xc3, 0x30, 0x7e, 0x5c, 0x4a, 0xa3, 0x07, 0x72, 0xcc, 0x0c, 0x14, 0x32, 0x54, 0xd1, 0x98, - 0xdf, 0xc5, 0x70, 0xe2, 0x80, 0x59, 0xdc, 0x7b, 0x22, 0x5c, 0xb7, 0xe5, 0x26, 0xc8, 0x9a, 0x38, 0x71, 0xfa, 0xc1, - 0xc9, 0x54, 0x58, 0xb6, 0xb0, 0x64, 0x50, 0x36, 0xb4, 0xe9, 0x34, 0x9b, 0x97, 0x0b, 0xd3, 0x2e, 0xbb, 0x40, 0x46, - 0x69, 0x76, 0x79, 0x19, 0x4a, 0xe8, 0xea, 0x13, 0xd0, 0x00, 0xe8, 0x46, 0x95, 0xb6, 0x45, 0x7c, 0xe6, 0x96, 0x1f, - 0x8d, 0x9d, 0xe6, 0xdd, 0xa1, 0xee, 0x49, 0x37, 0xab, 0xf6, 0x06, 0x74, 0x30, 0xa1, 0xdc, 0x0e, 0xba, 0x0e, 0x26, - 0x23, 0xdb, 0xf2, 0xcb, 0xbc, 0x5e, 0xe8, 0xe6, 0xd8, 0x61, 0xa8, 0x9d, 0x92, 0xd7, 0xc2, 0x43, 0x64, 0x20, 0x19, - 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0xfd, 0x60, 0xd7, 0x3b, 0x7e, 0x93, 0x0b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x51, - 0x25, 0x9d, 0xcb, 0x05, 0xe3, 0xf3, 0x6a, 0x71, 0x02, 0x6e, 0xe7, 0xf3, 0x6a, 0x11, 0x61, 0x50, 0xbe, 0x0c, 0x62, - 0x95, 0x80, 0xdd, 0x8b, 0x85, 0xf0, 0xed, 0x84, 0x36, 0x30, 0x1b, 0x48, 0xb0, 0x41, 0x61, 0x56, 0x1a, 0xa2, 0xdc, - 0x49, 0x8f, 0x36, 0x88, 0x3c, 0xc4, 0xea, 0x79, 0xdd, 0xf6, 0x64, 0xd3, 0x17, 0x13, 0x5c, 0x65, 0x31, 0x13, 0xd3, - 0xf8, 0x98, 0x95, 0xd3, 0x18, 0x4a, 0x89, 0xd3, 0x34, 0x8c, 0xe9, 0x84, 0x56, 0x84, 0x24, 0x8c, 0xcf, 0xe3, 0x05, - 0x4d, 0x50, 0x4a, 0x10, 0x42, 0xc8, 0x8f, 0x11, 0xda, 0xe6, 0xc0, 0x92, 0x37, 0xdb, 0xcf, 0xd1, 0xcf, 0xed, 0x18, - 0x2e, 0xa3, 0x22, 0x74, 0x83, 0xce, 0x1a, 0xee, 0x8d, 0xa8, 0xa4, 0x31, 0x56, 0x0c, 0x41, 0xc0, 0x4b, 0x8c, 0x4a, - 0x58, 0x92, 0x98, 0xd5, 0x10, 0x45, 0xa0, 0x98, 0xc7, 0x0b, 0x56, 0x52, 0xdf, 0xe6, 0x34, 0x56, 0x26, 0x41, 0x3d, - 0x8b, 0xa5, 0x76, 0x20, 0xa4, 0x0a, 0xb1, 0xc7, 0x67, 0x55, 0x74, 0xa3, 0x0c, 0x0d, 0x00, 0x05, 0x4a, 0xca, 0xc5, - 0x6f, 0x3f, 0xdf, 0xc3, 0x4d, 0x42, 0xff, 0xb3, 0x8d, 0x8e, 0x76, 0x96, 0xcb, 0x43, 0x6f, 0xbe, 0xa0, 0x71, 0x9e, - 0x43, 0x28, 0x36, 0x8d, 0x40, 0x5e, 0x64, 0x35, 0x44, 0xb4, 0xb8, 0x0f, 0x74, 0x48, 0x38, 0x68, 0xd3, 0x2f, 0x90, - 0xea, 0x89, 0xc9, 0xa5, 0x27, 0x06, 0xc6, 0xed, 0x90, 0x09, 0x05, 0x1c, 0xe9, 0x79, 0xf6, 0x97, 0x8f, 0xb1, 0xa6, - 0xa8, 0x99, 0x8e, 0xb7, 0x21, 0x11, 0x0d, 0x5a, 0x10, 0xcd, 0xe0, 0xfd, 0x73, 0xcd, 0xf1, 0xaa, 0x03, 0x3f, 0xe0, - 0x9d, 0x8d, 0x33, 0x2f, 0x67, 0x1e, 0x91, 0x53, 0x1f, 0xe5, 0x88, 0x7e, 0xc9, 0xc3, 0x7a, 0xa4, 0x92, 0x31, 0x56, - 0x12, 0x07, 0xbd, 0x0d, 0x16, 0xcc, 0x09, 0x5d, 0xf1, 0xd0, 0xf0, 0xf1, 0x2f, 0x91, 0xc9, 0xa8, 0x68, 0xa1, 0xd8, - 0x8d, 0xca, 0x60, 0xc4, 0x39, 0x0d, 0x33, 0x34, 0x59, 0xd2, 0xc5, 0x52, 0x91, 0xe6, 0x4a, 0x9a, 0x06, 0xb8, 0x04, - 0x1a, 0x3c, 0x1f, 0xf4, 0x43, 0x43, 0x3d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, 0xfb, 0xd0, 0xe1, 0xff, 0xe7, 0xd8, - 0x05, 0x22, 0xed, 0xcd, 0x75, 0x64, 0x3c, 0xd2, 0x78, 0x38, 0x28, 0xda, 0xc7, 0xde, 0x4f, 0xfc, 0xcc, 0x19, 0x7d, - 0x48, 0x2a, 0xdf, 0xe1, 0x83, 0xe5, 0x8e, 0x37, 0xd5, 0xb3, 0x32, 0x82, 0xf5, 0xb0, 0xdd, 0xe2, 0x82, 0x68, 0xbb, - 0x00, 0x52, 0xc7, 0x78, 0xb5, 0x74, 0x8d, 0x57, 0xe3, 0x3d, 0xc6, 0xab, 0xf6, 0x4c, 0x0d, 0x73, 0xb2, 0x41, 0x7d, - 0x96, 0x94, 0xe7, 0xe7, 0x28, 0x13, 0xf4, 0x5d, 0xce, 0x0a, 0x2a, 0x53, 0x09, 0xed, 0xc5, 0x6e, 0xc6, 0xf8, 0x8e, - 0x60, 0x9c, 0x15, 0x8b, 0x91, 0x40, 0x65, 0x2a, 0x69, 0xc2, 0x5e, 0x09, 0xea, 0x31, 0x78, 0xaf, 0x31, 0x44, 0xb5, - 0x8c, 0x5d, 0xb7, 0x81, 0xd0, 0x50, 0x5b, 0x8f, 0xf6, 0x8c, 0xf5, 0xe8, 0x76, 0x5b, 0x6b, 0x7f, 0x3b, 0xb1, 0x2e, - 0x13, 0x44, 0x15, 0x96, 0xa3, 0x09, 0xf0, 0xa6, 0x89, 0xb9, 0x2d, 0x59, 0xa5, 0x05, 0x86, 0xcf, 0xfe, 0x23, 0x2c, - 0xac, 0x4a, 0xa2, 0x20, 0xb3, 0x22, 0x1a, 0xd8, 0x73, 0xf0, 0x79, 0x5c, 0xc3, 0x1a, 0x80, 0x48, 0x8e, 0xe8, 0xe1, - 0xfa, 0x47, 0x28, 0x6c, 0x66, 0x41, 0x66, 0x02, 0x32, 0xf3, 0x22, 0x6d, 0x67, 0x1d, 0x4c, 0xac, 0x49, 0xad, 0x33, - 0x16, 0x62, 0xa8, 0x91, 0x1f, 0x40, 0x19, 0x62, 0xf1, 0xc9, 0x07, 0x13, 0x2a, 0x64, 0x28, 0x55, 0xaf, 0x9b, 0xdd, - 0xc0, 0x2b, 0x1f, 0xb2, 0x6b, 0x5e, 0xd5, 0xf1, 0xf5, 0x4a, 0x5b, 0x12, 0x73, 0xb6, 0xcf, 0x6d, 0x8f, 0x56, 0xfa, - 0xd5, 0x9b, 0x17, 0xdf, 0x9f, 0x7a, 0xaf, 0x76, 0x11, 0x47, 0x43, 0xb0, 0xad, 0x18, 0x63, 0xf4, 0x16, 0x97, 0x06, - 0x13, 0xe9, 0x1a, 0x81, 0xde, 0xa5, 0xa0, 0xdf, 0xfe, 0x5c, 0x4f, 0xc0, 0x6b, 0xae, 0x96, 0x5f, 0xf2, 0x11, 0xb0, - 0x44, 0xf5, 0xac, 0x30, 0x3b, 0x2b, 0xb3, 0xbd, 0xdd, 0x8a, 0xf4, 0xb4, 0x4b, 0x8d, 0x0c, 0xc4, 0xab, 0xed, 0x30, - 0x16, 0x2e, 0x6c, 0xd3, 0xcd, 0x60, 0xd7, 0x4b, 0xc7, 0x12, 0x79, 0xbb, 0x2d, 0xa0, 0x43, 0x66, 0xc0, 0x9d, 0x97, - 0xf1, 0x1d, 0xbc, 0x2c, 0x9c, 0x6e, 0xfa, 0xc1, 0x13, 0xc0, 0x4c, 0xb8, 0xb4, 0x96, 0xc5, 0x31, 0xe3, 0x09, 0xcc, - 0x1f, 0x2d, 0x7d, 0x91, 0xb7, 0x24, 0xb4, 0x7a, 0x7f, 0x85, 0xd5, 0x08, 0xec, 0x4e, 0xce, 0x3e, 0x66, 0xab, 0xd9, - 0x12, 0x50, 0xf3, 0xaf, 0xb3, 0x02, 0x68, 0xae, 0x59, 0x0b, 0xa6, 0x29, 0xd4, 0x5f, 0xd7, 0xcf, 0xe2, 0x55, 0x9c, - 0x80, 0xea, 0x06, 0xbc, 0x45, 0xee, 0x95, 0xe8, 0x4a, 0xa3, 0x8b, 0xd2, 0x07, 0xca, 0x31, 0xa4, 0xd0, 0xd2, 0xf7, - 0x5e, 0x25, 0xcf, 0x3d, 0x0d, 0xb8, 0xa4, 0x50, 0xf3, 0x64, 0x4b, 0x19, 0x0b, 0x80, 0x85, 0x0e, 0x66, 0x92, 0x6c, - 0x45, 0x77, 0x1a, 0x93, 0x02, 0xde, 0x6a, 0xe0, 0x8f, 0x22, 0xab, 0xe5, 0x5d, 0xb1, 0x0a, 0x0b, 0xc7, 0xfe, 0xba, - 0xdf, 0x8f, 0x1d, 0xfb, 0xeb, 0x4b, 0x45, 0xeb, 0xe2, 0x76, 0x03, 0x48, 0x83, 0x01, 0x44, 0x4e, 0xd5, 0x40, 0xe8, - 0x88, 0x62, 0xbe, 0xef, 0xdf, 0xa9, 0xce, 0x22, 0x41, 0xe8, 0x77, 0xea, 0x75, 0xa4, 0x24, 0xa0, 0x53, 0xab, 0xd9, - 0xc9, 0x40, 0x99, 0x7d, 0x40, 0x40, 0x54, 0x37, 0x23, 0x9b, 0x2f, 0xa4, 0x73, 0xb1, 0x0c, 0x1f, 0x3e, 0xa6, 0x10, - 0x50, 0xb8, 0xa3, 0x46, 0xeb, 0x6d, 0x88, 0x04, 0xca, 0x08, 0x45, 0x8c, 0x79, 0xb1, 0x92, 0x84, 0xcc, 0xc7, 0x0b, - 0x14, 0x5c, 0x59, 0x60, 0x57, 0xce, 0x26, 0xc3, 0x22, 0xe2, 0x2c, 0xdc, 0xff, 0xcd, 0x64, 0x41, 0x50, 0x73, 0xe5, - 0x06, 0x72, 0xdc, 0xc9, 0xe4, 0xed, 0x29, 0xaf, 0x86, 0x8a, 0x89, 0x08, 0x02, 0xc3, 0x0d, 0x3f, 0xe3, 0xe3, 0xa3, - 0x05, 0x01, 0x15, 0x99, 0x31, 0x0b, 0xd1, 0x2f, 0x8e, 0xbf, 0x02, 0xd4, 0x98, 0xd1, 0xd1, 0x53, 0x00, 0x85, 0x85, - 0x80, 0xe8, 0x63, 0x90, 0xd1, 0x56, 0xf0, 0xbb, 0x92, 0xbf, 0x5b, 0x27, 0xbe, 0x0b, 0xfd, 0x5a, 0xd1, 0xcb, 0x18, - 0x18, 0x8e, 0x68, 0x72, 0x18, 0xf2, 0xc1, 0x64, 0x00, 0xda, 0x12, 0x67, 0xf7, 0xb5, 0xb4, 0xe2, 0xfa, 0x74, 0xe9, - 0x74, 0xff, 0xa4, 0x3e, 0x48, 0x22, 0x15, 0xac, 0x90, 0xc4, 0x00, 0x42, 0x59, 0xca, 0x6d, 0xb2, 0x04, 0xcb, 0x0a, - 0xbd, 0xa4, 0xb9, 0x46, 0x49, 0xdc, 0xdd, 0x0c, 0x1c, 0xa3, 0x66, 0x9d, 0x86, 0x45, 0xcb, 0x8d, 0x1a, 0xe0, 0x73, - 0x12, 0x56, 0x9a, 0x1b, 0xce, 0x4c, 0x38, 0x67, 0x3a, 0x5c, 0x1d, 0x73, 0xf6, 0x9a, 0x23, 0x18, 0x47, 0x82, 0x37, - 0x1e, 0xba, 0x64, 0x0a, 0x2a, 0x32, 0x65, 0x1c, 0x4c, 0x7b, 0x80, 0x7b, 0xcf, 0xc1, 0x38, 0x8c, 0x0d, 0x6a, 0x43, - 0xea, 0x53, 0xe7, 0x2e, 0x04, 0x82, 0xb4, 0xd6, 0xcb, 0x7c, 0x86, 0xa7, 0x67, 0x84, 0xb2, 0x3f, 0xe4, 0xf0, 0x01, - 0xf0, 0xb2, 0x24, 0x27, 0x13, 0xfe, 0xf4, 0xf1, 0x6e, 0xa0, 0x2a, 0x3e, 0x08, 0x0e, 0xe2, 0x22, 0x3d, 0x08, 0x06, - 0x15, 0xfc, 0x2a, 0xf9, 0x41, 0x2d, 0xc4, 0xc1, 0x65, 0x5c, 0x1e, 0xc4, 0xab, 0xb8, 0xac, 0x0f, 0x6e, 0xb3, 0x7a, - 0x79, 0xa0, 0x3b, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x07, 0xc1, 0xa0, 0xd4, 0x53, 0xbb, 0x62, 0x85, 0x77, - 0x9c, 0xe9, 0x10, 0x65, 0x81, 0x1f, 0x20, 0xcc, 0x3b, 0x0d, 0x80, 0x4f, 0x5d, 0xb3, 0x94, 0x5e, 0x62, 0xb8, 0x81, - 0x6a, 0xba, 0x86, 0x3e, 0x00, 0x8f, 0xbc, 0xa6, 0x31, 0x2c, 0x81, 0xcb, 0xc1, 0x80, 0xac, 0x21, 0x72, 0xc1, 0x9a, - 0x9a, 0x20, 0x0e, 0xe1, 0x5a, 0xda, 0x69, 0x17, 0x3b, 0x14, 0x76, 0xbb, 0x05, 0x44, 0xe5, 0x09, 0xe9, 0xf7, 0xcd, - 0x37, 0xd4, 0xbd, 0x60, 0x2f, 0xc1, 0xfe, 0xaa, 0xac, 0xc3, 0x44, 0x48, 0xcd, 0xf7, 0x15, 0x3b, 0x19, 0xc8, 0x88, - 0xc3, 0x3b, 0x8e, 0x14, 0x6d, 0x54, 0x2e, 0xc3, 0x9e, 0x2c, 0x3d, 0x5f, 0x89, 0x6b, 0x6e, 0xfd, 0xb8, 0x6a, 0x21, - 0xf2, 0x3a, 0x5b, 0x49, 0xf6, 0x6f, 0xc6, 0x15, 0xf7, 0x07, 0xd6, 0x9f, 0xfe, 0x2b, 0xb8, 0xb6, 0x3a, 0xef, 0x7c, - 0xae, 0x11, 0x39, 0x4b, 0x28, 0x97, 0x34, 0x26, 0x0f, 0x6f, 0xe9, 0xfb, 0xdc, 0xea, 0xdb, 0x4c, 0xa7, 0xf6, 0x59, - 0x85, 0x85, 0x0b, 0xd1, 0x8a, 0xe0, 0xd0, 0x10, 0x0b, 0xff, 0x08, 0xd0, 0xd7, 0x3e, 0x53, 0x41, 0x49, 0x9a, 0xf3, - 0x1a, 0xbd, 0x5b, 0x21, 0xe1, 0xa5, 0x62, 0x97, 0x1e, 0x06, 0x52, 0xc6, 0xed, 0xa1, 0x24, 0x4c, 0x4a, 0x5e, 0x84, - 0xf7, 0x5e, 0x7d, 0x93, 0x7b, 0x1e, 0x62, 0xf4, 0x22, 0xc7, 0x4e, 0x40, 0x5b, 0x77, 0x89, 0xce, 0x86, 0x27, 0x6e, - 0xc3, 0x73, 0xd6, 0xa2, 0xd1, 0x74, 0xc9, 0x92, 0x7e, 0x3f, 0x06, 0x13, 0xef, 0x94, 0xe5, 0xf0, 0x2b, 0x5f, 0xd0, - 0x35, 0x03, 0x4c, 0x31, 0x7a, 0x09, 0x09, 0x29, 0x22, 0x91, 0xac, 0xe5, 0x49, 0xf2, 0x89, 0xee, 0x42, 0x70, 0x84, - 0xcb, 0x59, 0x1a, 0x2d, 0xf7, 0x9a, 0x59, 0x20, 0x79, 0x86, 0xbe, 0xab, 0x60, 0x7b, 0x63, 0x17, 0xa4, 0x9c, 0x1f, - 0x57, 0xd3, 0xc1, 0x80, 0x13, 0x05, 0x37, 0x5e, 0x48, 0x71, 0xad, 0x6a, 0x71, 0xc7, 0x30, 0x16, 0xea, 0xb6, 0x88, - 0xc1, 0x01, 0xbb, 0x68, 0x65, 0xb7, 0x0f, 0xb0, 0xab, 0x1c, 0xef, 0x52, 0x65, 0x77, 0x7a, 0xcc, 0xf8, 0xcb, 0x56, - 0x91, 0x4e, 0x5a, 0xed, 0x27, 0xf2, 0x3e, 0x77, 0xd0, 0xe5, 0x72, 0xac, 0x78, 0xcb, 0x41, 0x45, 0x1e, 0xf3, 0x91, - 0xa4, 0xba, 0x9f, 0xe1, 0x08, 0xf3, 0x60, 0xdd, 0xfa, 0x93, 0x43, 0x5d, 0xe0, 0x10, 0x79, 0x52, 0xaf, 0x29, 0xa0, - 0x7b, 0xaf, 0x1e, 0x77, 0xf5, 0xdb, 0xd0, 0x5d, 0xa0, 0x44, 0x3b, 0x15, 0x7b, 0x7e, 0x4c, 0xd4, 0xea, 0x4c, 0x3d, - 0xa1, 0x7f, 0xad, 0xc5, 0xfd, 0x85, 0x76, 0x15, 0xf7, 0xbd, 0xcb, 0x67, 0x1c, 0xea, 0xec, 0x86, 0x50, 0x00, 0xae, - 0xda, 0xd1, 0xa9, 0x6b, 0x43, 0x7a, 0xa9, 0x44, 0x37, 0xc1, 0xc1, 0xf6, 0xfa, 0x8c, 0xa3, 0xe8, 0x47, 0xab, 0x91, - 0x6f, 0xa3, 0xea, 0xb1, 0x18, 0xc4, 0x8f, 0x4b, 0xba, 0x8c, 0xaa, 0xc7, 0xe5, 0x20, 0x7e, 0x2c, 0x9a, 0x66, 0xf7, - 0x5c, 0xd9, 0xdf, 0x47, 0xe4, 0x59, 0x77, 0xf6, 0x52, 0x01, 0x1b, 0x03, 0xcf, 0xae, 0x05, 0x84, 0x53, 0x70, 0x44, - 0xb6, 0x86, 0x3e, 0x74, 0x6e, 0xf7, 0xb1, 0x61, 0x92, 0x20, 0xe8, 0x79, 0x9b, 0x4d, 0xa2, 0xd8, 0x59, 0xff, 0xe8, - 0xc3, 0x29, 0x10, 0xd0, 0xed, 0xb6, 0x59, 0x57, 0x6b, 0x40, 0x31, 0x0d, 0xc7, 0xfc, 0xb0, 0x1c, 0xdd, 0xba, 0xee, - 0xfa, 0x87, 0xe5, 0x68, 0x49, 0x86, 0x13, 0x3d, 0xf9, 0xf1, 0xc9, 0x78, 0x16, 0x47, 0x93, 0xa6, 0xe3, 0xb4, 0x50, - 0xf8, 0xa7, 0xce, 0x2d, 0x14, 0x81, 0x53, 0x31, 0x82, 0x23, 0xa7, 0xca, 0x49, 0xc9, 0xc3, 0xf0, 0x3f, 0xa8, 0x77, - 0xb4, 0x69, 0xaf, 0xe3, 0x3a, 0x59, 0x66, 0xc5, 0x95, 0x0a, 0x1f, 0xae, 0xa2, 0x8b, 0x9b, 0x80, 0x76, 0xce, 0x65, - 0xda, 0xf2, 0xeb, 0xc4, 0xa3, 0x27, 0xb6, 0x66, 0x06, 0xdc, 0xba, 0x1b, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, - 0xc4, 0xdc, 0xfe, 0x55, 0xda, 0xfc, 0x4a, 0xda, 0x67, 0xc9, 0x48, 0xd1, 0x26, 0x23, 0x35, 0x18, 0x61, 0x8a, 0x22, - 0x89, 0xeb, 0xb0, 0x80, 0x20, 0xd8, 0x9f, 0x51, 0x5c, 0x8b, 0xa5, 0x77, 0x1a, 0x84, 0x09, 0xa6, 0x0b, 0xca, 0xaf, - 0x6e, 0xe7, 0xb6, 0xd2, 0x62, 0x8f, 0xe4, 0xf7, 0xb9, 0xb5, 0x5d, 0x51, 0xe4, 0xef, 0xf3, 0x06, 0xd4, 0x03, 0xa2, - 0xdc, 0xd7, 0x47, 0x29, 0x70, 0xd2, 0xe2, 0x86, 0x02, 0xa3, 0x17, 0x74, 0x75, 0x22, 0x77, 0xec, 0xd4, 0x9c, 0xa9, - 0x98, 0xc9, 0xb8, 0xf2, 0x7e, 0xcf, 0xdc, 0x07, 0x4d, 0x41, 0x2b, 0x30, 0xf0, 0xd6, 0x67, 0x3c, 0x3a, 0xd0, 0xdd, - 0x6a, 0x9d, 0x16, 0x6c, 0x16, 0xd4, 0x65, 0xdd, 0xb6, 0xf1, 0xa0, 0x11, 0x07, 0x45, 0xb2, 0x2a, 0x54, 0x4b, 0x78, - 0x22, 0x10, 0x30, 0x65, 0xd7, 0x3c, 0xd2, 0x82, 0x9a, 0xde, 0x84, 0xc2, 0x86, 0x82, 0xbf, 0x52, 0x54, 0xd3, 0x9b, - 0x50, 0x9f, 0x89, 0x53, 0x0c, 0x22, 0x98, 0x11, 0x9b, 0xfd, 0x16, 0x50, 0x7f, 0x6b, 0x46, 0x9b, 0xa6, 0x31, 0xda, - 0x2a, 0xe4, 0x92, 0x22, 0x69, 0xf9, 0x6f, 0xd5, 0x54, 0x50, 0x52, 0xcb, 0x45, 0x6f, 0xe2, 0xbb, 0xe8, 0xf1, 0x4c, - 0x4b, 0x02, 0xa5, 0x5b, 0xee, 0x18, 0xfd, 0x21, 0x0c, 0xf0, 0x88, 0x8e, 0x13, 0x0b, 0xe6, 0x56, 0x27, 0x2c, 0x9b, - 0x57, 0x8b, 0xd1, 0x4a, 0x40, 0xd8, 0xe0, 0x63, 0x96, 0xcd, 0x0b, 0xf5, 0x10, 0xba, 0xc2, 0xd2, 0xb7, 0x60, 0x17, - 0x1b, 0xac, 0x44, 0x15, 0x80, 0xef, 0x05, 0xdd, 0xac, 0x44, 0x15, 0x09, 0xd9, 0xfd, 0xb8, 0xc1, 0x12, 0x64, 0x5a, - 0x29, 0xd3, 0x92, 0x06, 0x0b, 0x02, 0x5f, 0x55, 0x55, 0x3e, 0x24, 0xdb, 0x0a, 0xe4, 0x53, 0x47, 0x0d, 0x38, 0x05, - 0xb2, 0x0a, 0x2c, 0x48, 0x80, 0xca, 0xd0, 0x56, 0x81, 0x69, 0x25, 0xa6, 0xe9, 0x2a, 0x6c, 0x94, 0xd9, 0xa1, 0xd0, - 0xeb, 0x25, 0x9f, 0xc5, 0x83, 0x30, 0x19, 0xc6, 0xe4, 0x31, 0x42, 0xed, 0x1f, 0xe6, 0x51, 0xac, 0xe4, 0x92, 0x2b, - 0xeb, 0x17, 0x7f, 0xfb, 0x09, 0x7b, 0xdd, 0x73, 0x0c, 0x16, 0x60, 0x2d, 0x6d, 0xaf, 0xb3, 0xe2, 0x9d, 0x68, 0x05, - 0xc7, 0xc1, 0x2c, 0xd2, 0x61, 0xd5, 0x91, 0x23, 0xea, 0x8b, 0x5c, 0x7b, 0x17, 0x21, 0x72, 0x90, 0xde, 0x63, 0x80, - 0xdd, 0x08, 0x5f, 0x87, 0xc6, 0xe6, 0x56, 0x55, 0x88, 0xbf, 0x51, 0x22, 0xf1, 0x93, 0x10, 0x1f, 0xd7, 0x2b, 0x99, - 0xab, 0xd6, 0x78, 0xac, 0xaa, 0x19, 0x3c, 0x53, 0xbe, 0xc7, 0xca, 0xbf, 0xb5, 0xdd, 0x1c, 0xe7, 0x3d, 0x78, 0xd0, - 0xba, 0xdf, 0x3a, 0x12, 0x42, 0x73, 0xe5, 0x24, 0x4d, 0x47, 0x8d, 0x8e, 0x99, 0xac, 0x16, 0x95, 0x30, 0xb9, 0x3b, - 0xa5, 0x63, 0xa0, 0xa2, 0x03, 0xb8, 0x96, 0xa8, 0x0e, 0x7a, 0x52, 0xb2, 0x31, 0x1c, 0x71, 0x06, 0x07, 0xed, 0x38, - 0x46, 0xf1, 0x72, 0x2e, 0xc5, 0xcb, 0xf9, 0x09, 0xe3, 0x00, 0xad, 0x05, 0x48, 0xf5, 0x0a, 0xf6, 0x33, 0x97, 0xb0, - 0xc0, 0xfa, 0xce, 0x77, 0x64, 0x80, 0x0c, 0x71, 0xb2, 0x39, 0x4e, 0xf6, 0xb8, 0x51, 0x73, 0x5f, 0xe1, 0xe3, 0xa4, - 0x59, 0x38, 0x75, 0x15, 0xed, 0xba, 0x96, 0xac, 0x98, 0x97, 0x83, 0x09, 0x04, 0x65, 0x29, 0xe6, 0xe5, 0x70, 0xb2, - 0xa0, 0x39, 0xfc, 0x58, 0x78, 0xe8, 0x10, 0xcb, 0x41, 0x02, 0x97, 0xce, 0x1e, 0x03, 0xde, 0x50, 0x28, 0x71, 0x37, - 0xd6, 0x91, 0x63, 0x1d, 0xe5, 0x61, 0x18, 0x03, 0xae, 0xac, 0x15, 0x78, 0xef, 0xbf, 0x3e, 0xfa, 0x80, 0xac, 0xca, - 0x15, 0x5e, 0x8e, 0x72, 0xd7, 0x95, 0x46, 0x5d, 0x52, 0x7a, 0x95, 0x13, 0x3c, 0x95, 0x6c, 0xb7, 0x3d, 0x63, 0x4f, - 0xe5, 0x20, 0xf1, 0x8e, 0x11, 0xbd, 0x98, 0x7a, 0x99, 0x39, 0x81, 0x33, 0xdb, 0x5e, 0xb6, 0x31, 0x3f, 0x76, 0x80, - 0x83, 0x45, 0x10, 0x12, 0x37, 0x84, 0x61, 0x62, 0x27, 0xc5, 0x50, 0x09, 0xe1, 0xba, 0x16, 0x5e, 0xc7, 0x69, 0x19, - 0x83, 0x8b, 0xb4, 0xb2, 0x4d, 0xdc, 0x43, 0xd7, 0x1d, 0x3f, 0xe6, 0x56, 0xc7, 0x68, 0xcb, 0x7c, 0xb8, 0xa3, 0xd3, - 0x07, 0x16, 0x03, 0x50, 0xf7, 0x60, 0x56, 0xb7, 0xcf, 0x24, 0xae, 0x4f, 0xbb, 0x8a, 0x90, 0x08, 0x44, 0x51, 0x2a, - 0x23, 0x4c, 0xff, 0x4e, 0x73, 0x59, 0x4d, 0xeb, 0x07, 0x79, 0xe6, 0x90, 0x67, 0xa1, 0xb3, 0x3d, 0x68, 0xed, 0xef, - 0x06, 0xed, 0xc4, 0x6d, 0xf7, 0xce, 0xff, 0x5b, 0xd6, 0xb5, 0xd5, 0x9a, 0xea, 0x71, 0xbb, 0xfa, 0x81, 0xb7, 0x57, - 0x7b, 0x32, 0x06, 0xcc, 0x4a, 0x38, 0x67, 0x54, 0xc5, 0xcb, 0x8c, 0x57, 0x78, 0x52, 0xad, 0x3c, 0x1f, 0xef, 0xdb, - 0x6c, 0xa4, 0x1f, 0xc8, 0x14, 0x10, 0xcf, 0x6f, 0x53, 0xad, 0x3e, 0x4e, 0x51, 0x02, 0xfe, 0x4e, 0xc5, 0x37, 0xa2, - 0x1f, 0xcd, 0x8b, 0x2b, 0x5e, 0xbf, 0xbd, 0x2d, 0xf4, 0x8b, 0xe7, 0x46, 0xe7, 0x4f, 0x5f, 0x97, 0x2e, 0x74, 0x38, - 0x6a, 0xef, 0xa0, 0xc8, 0x82, 0x55, 0x27, 0x13, 0x2d, 0x6b, 0xab, 0x66, 0x1f, 0x25, 0x5c, 0x4c, 0x54, 0xa3, 0x67, - 0x9d, 0x39, 0x61, 0x4a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x96, 0x0c, 0xd4, 0x69, 0x52, 0x88, 0x1e, 0x56, 0x33, - 0x8c, 0x57, 0x0c, 0xa0, 0x30, 0xa5, 0x04, 0x51, 0xb4, 0x06, 0xc1, 0x40, 0x13, 0xfa, 0xfd, 0xdb, 0x54, 0x65, 0xa0, - 0x45, 0x33, 0x15, 0x20, 0xaa, 0x83, 0x68, 0xab, 0xbc, 0x0c, 0x7f, 0x5c, 0xd2, 0x22, 0xa3, 0x79, 0x45, 0x97, 0x15, - 0x4d, 0x32, 0x7a, 0xc9, 0xa5, 0xa8, 0x78, 0x5d, 0x31, 0x49, 0xdb, 0x35, 0x61, 0xff, 0x97, 0x47, 0xd7, 0x5b, 0xb1, - 0xd6, 0xd0, 0xee, 0x04, 0x19, 0xa1, 0xf9, 0x42, 0x05, 0x21, 0x43, 0xe5, 0x24, 0x74, 0xad, 0x56, 0x78, 0x05, 0x36, - 0x99, 0x66, 0xa3, 0x65, 0x5c, 0x85, 0x81, 0xf9, 0x2a, 0x30, 0x98, 0x1c, 0x98, 0x74, 0xb6, 0xbe, 0x78, 0x26, 0xae, - 0x57, 0xa2, 0xe0, 0x45, 0x2d, 0x21, 0xfa, 0x35, 0xee, 0xbb, 0x8e, 0xab, 0xce, 0xfc, 0x5a, 0xe9, 0x43, 0xdf, 0xba, - 0xac, 0x8d, 0xfd, 0x42, 0xe3, 0x18, 0xec, 0x7c, 0x44, 0x34, 0xa4, 0x41, 0xad, 0x5a, 0x1c, 0xea, 0x00, 0x5d, 0x2a, - 0xa4, 0x90, 0x21, 0x53, 0x99, 0x2c, 0x41, 0xc6, 0x37, 0x7e, 0x2f, 0x44, 0x3d, 0xfa, 0x73, 0xcd, 0xcb, 0xfb, 0x33, - 0x9e, 0x73, 0x1c, 0xa3, 0x20, 0x89, 0x8b, 0x9b, 0xb8, 0x0a, 0x88, 0x6b, 0x79, 0x15, 0x1c, 0xa5, 0x3a, 0x6c, 0xcc, - 0x4e, 0xd5, 0xa8, 0xf5, 0x12, 0xe8, 0x2b, 0x23, 0x7d, 0x63, 0x30, 0x34, 0x11, 0x95, 0xd0, 0xf7, 0x4a, 0xdd, 0xd3, - 0xea, 0x86, 0x01, 0xc4, 0x9f, 0x4b, 0xbd, 0x50, 0xeb, 0xb5, 0x1f, 0x73, 0x43, 0x47, 0x08, 0x1a, 0x7d, 0xd5, 0x2c, - 0x1a, 0xc7, 0x2d, 0x4d, 0x46, 0xc6, 0x8d, 0x36, 0x39, 0xbf, 0x02, 0x19, 0x9f, 0x35, 0x17, 0x9a, 0x34, 0x0d, 0x95, - 0x50, 0x85, 0xd1, 0xe6, 0xce, 0x4b, 0xa7, 0xf7, 0xe0, 0xce, 0xa6, 0xcd, 0x8e, 0x94, 0x4b, 0x63, 0x43, 0x4b, 0x5e, - 0xad, 0x44, 0x51, 0x41, 0x18, 0xe7, 0xde, 0x98, 0x5e, 0xc7, 0x59, 0x51, 0xc7, 0x59, 0x71, 0x5a, 0xad, 0x78, 0x52, - 0xbf, 0x87, 0x5b, 0x9c, 0xb4, 0xba, 0x69, 0x2a, 0xb8, 0xd2, 0x25, 0x07, 0x18, 0x4c, 0x4d, 0xc6, 0x3d, 0xb6, 0x06, - 0x17, 0xf5, 0xef, 0xd1, 0x52, 0x60, 0x2c, 0x54, 0x55, 0x7c, 0x7c, 0x51, 0x89, 0x7c, 0x5d, 0x83, 0x76, 0xf7, 0xb2, - 0x8e, 0x8e, 0x9e, 0xac, 0xee, 0xa6, 0xf2, 0x06, 0x13, 0x3d, 0x39, 0x5a, 0xdd, 0xf5, 0xb2, 0xeb, 0x95, 0x28, 0xeb, - 0xb8, 0xa8, 0xa7, 0x12, 0x91, 0x2c, 0x89, 0xf3, 0x24, 0x9c, 0x8c, 0xc7, 0x5f, 0x1c, 0x0c, 0x0f, 0x20, 0x03, 0x99, - 0xfe, 0x35, 0x94, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x15, 0xf2, 0x6e, 0x17, 0x8d, 0x26, 0x0d, 0xd6, 0x33, 0x4c, - 0xd4, 0xcc, 0x8c, 0xf8, 0xdd, 0x2a, 0x2e, 0x52, 0x88, 0x5f, 0xa7, 0x8a, 0x3f, 0x7a, 0x32, 0xf6, 0xca, 0x37, 0x9f, - 0x3e, 0x6d, 0x7e, 0x6f, 0x74, 0x58, 0x6b, 0xdd, 0xee, 0x67, 0xbf, 0x1f, 0xcb, 0xf9, 0x3e, 0x39, 0x3e, 0x54, 0x3f, - 0x7e, 0x6f, 0x9a, 0xe9, 0xeb, 0x32, 0x9c, 0xff, 0x33, 0x94, 0xf3, 0x79, 0x5a, 0x96, 0xf1, 0x7d, 0x43, 0x16, 0x74, - 0x5d, 0x59, 0x6f, 0x12, 0xea, 0x6c, 0x03, 0x7a, 0x44, 0xa6, 0xeb, 0x8a, 0xc1, 0x37, 0xef, 0xeb, 0x30, 0xe0, 0xd5, - 0x6a, 0xc8, 0x8b, 0x3a, 0xab, 0xef, 0x87, 0x98, 0x27, 0xc0, 0x4f, 0x35, 0x6f, 0xf6, 0xac, 0xd4, 0xc4, 0xe6, 0xb2, - 0xe4, 0xfc, 0x2f, 0x1e, 0x4a, 0xe3, 0xe8, 0x31, 0x1a, 0x47, 0x8f, 0xa9, 0x1c, 0x8c, 0xc9, 0xd7, 0x54, 0x75, 0x66, - 0xf2, 0x35, 0x98, 0x20, 0x65, 0xed, 0x6f, 0xa4, 0x71, 0x62, 0x34, 0xa6, 0x37, 0x2f, 0xf3, 0x6c, 0x05, 0x4c, 0xf0, - 0x52, 0xfd, 0x68, 0x08, 0x7d, 0xcf, 0xdb, 0xd9, 0x47, 0xa3, 0xd1, 0xb3, 0x92, 0x8e, 0x46, 0xa3, 0x8f, 0x59, 0x43, - 0xe8, 0x65, 0xd5, 0xf1, 0xfe, 0x3d, 0xa7, 0x17, 0x22, 0xbd, 0x8f, 0x82, 0x80, 0x2e, 0xb3, 0x34, 0xe5, 0x85, 0x2c, - 0xeb, 0x2c, 0x6d, 0xe7, 0x95, 0x2d, 0x44, 0xe0, 0x1f, 0xd5, 0x46, 0x84, 0x20, 0x22, 0xf4, 0xed, 0x4e, 0xcf, 0x46, - 0xa3, 0xd1, 0x59, 0xaa, 0xab, 0xb5, 0x0c, 0xf9, 0x6b, 0x34, 0x1f, 0xb0, 0x76, 0xf9, 0x60, 0x7d, 0xa3, 0xa3, 0x9d, - 0x1c, 0xfe, 0xf7, 0x70, 0x36, 0x1f, 0x0f, 0xbf, 0x1d, 0x2d, 0x1e, 0x1f, 0xd2, 0x20, 0x70, 0x41, 0xab, 0x43, 0x65, - 0xcd, 0x31, 0x2d, 0x8e, 0xc7, 0x53, 0x52, 0x0c, 0xd8, 0x13, 0xe3, 0x4b, 0xf3, 0xc5, 0x13, 0x40, 0x22, 0x45, 0x11, - 0x6a, 0x60, 0xa5, 0x7f, 0x78, 0x15, 0x79, 0x55, 0x00, 0x3e, 0x9a, 0x89, 0x64, 0xa0, 0xb5, 0x80, 0xe3, 0x08, 0xca, - 0x6b, 0x8c, 0x69, 0x44, 0x8f, 0xb1, 0x4c, 0x47, 0x05, 0x1d, 0x4f, 0xab, 0xdb, 0xac, 0x4e, 0x96, 0x18, 0xd8, 0x28, - 0xae, 0x78, 0xf0, 0x45, 0x10, 0x15, 0xec, 0xe8, 0xe9, 0x54, 0xc2, 0xfb, 0x62, 0x52, 0xca, 0xaf, 0x20, 0xf1, 0xdb, - 0x31, 0x42, 0xa0, 0x12, 0xe5, 0xb1, 0x88, 0x35, 0xbe, 0xcc, 0x45, 0x0c, 0x1e, 0x9c, 0x95, 0xe2, 0x59, 0xcc, 0x49, - 0x60, 0xec, 0x2f, 0x5a, 0xcd, 0x11, 0xd0, 0x9c, 0x50, 0x30, 0x71, 0x58, 0x50, 0xf1, 0xc5, 0x04, 0xbd, 0x82, 0xc0, - 0xad, 0x3a, 0x82, 0xe3, 0xce, 0x58, 0x36, 0xa8, 0xe5, 0x93, 0xb2, 0xc3, 0xf9, 0xff, 0xae, 0xe8, 0x62, 0x70, 0x68, - 0x87, 0xe6, 0xad, 0x72, 0x5f, 0xad, 0x91, 0x51, 0xaa, 0xc3, 0x67, 0x29, 0x31, 0xc6, 0xa7, 0x9c, 0x9d, 0x6c, 0x74, - 0x77, 0x46, 0x75, 0x99, 0x5d, 0x87, 0x44, 0xf5, 0xca, 0x82, 0x62, 0x06, 0x51, 0x36, 0xc2, 0xf5, 0x03, 0xd6, 0x22, - 0x4e, 0x27, 0x6f, 0x78, 0x59, 0x67, 0x89, 0x7c, 0x7f, 0xe3, 0xbd, 0x07, 0x6a, 0x20, 0x1b, 0xf4, 0xae, 0x64, 0x30, - 0xcf, 0x6f, 0x4b, 0x00, 0xed, 0xac, 0x78, 0x79, 0xc3, 0x5d, 0xba, 0x11, 0x04, 0x8d, 0x6d, 0xe6, 0x95, 0x17, 0x6c, - 0x02, 0xbe, 0x7a, 0x57, 0x02, 0xe6, 0x46, 0x08, 0x52, 0x53, 0x08, 0x85, 0x03, 0x17, 0xf8, 0xba, 0x2e, 0xb3, 0x8b, - 0x75, 0xcd, 0x31, 0xd8, 0x47, 0x61, 0xb5, 0x98, 0xd2, 0x09, 0x8f, 0x87, 0x01, 0xfe, 0x08, 0xa8, 0x0c, 0xb8, 0xa1, - 0x3d, 0xec, 0xe0, 0x85, 0xfc, 0x65, 0xdf, 0xc8, 0x3d, 0xc2, 0x5e, 0xa7, 0x21, 0x04, 0xd7, 0xc1, 0x87, 0x00, 0x96, - 0x14, 0xa1, 0x6f, 0xf1, 0x54, 0x0d, 0x83, 0xcb, 0x3c, 0x5b, 0xa9, 0xa4, 0x7a, 0xd4, 0xd1, 0x7c, 0x28, 0xb5, 0x23, - 0x39, 0xa0, 0x4e, 0x7a, 0x8c, 0xe9, 0xa5, 0x4c, 0x97, 0x45, 0x59, 0x23, 0x94, 0x77, 0x6a, 0x62, 0x6c, 0x98, 0x3e, - 0x0e, 0x91, 0x5f, 0xde, 0x95, 0x32, 0xf4, 0x0b, 0x5f, 0x00, 0xf8, 0x15, 0xdc, 0xee, 0x77, 0xe3, 0xbb, 0xc8, 0xec, - 0xe7, 0x9c, 0x1d, 0xfe, 0xf7, 0x3c, 0x1e, 0xfe, 0x35, 0x1e, 0x7e, 0xbb, 0x18, 0x84, 0x43, 0xf3, 0x93, 0x3c, 0x7e, - 0x74, 0x48, 0x5f, 0x72, 0xc3, 0x95, 0xc0, 0xc2, 0xf7, 0x82, 0xdb, 0xc8, 0x95, 0x10, 0x44, 0x01, 0xde, 0x28, 0xec, - 0x6a, 0x9c, 0x00, 0xc0, 0x5f, 0xf0, 0x5f, 0x01, 0x1a, 0x09, 0xd9, 0x8b, 0x06, 0xe8, 0x07, 0xe4, 0xef, 0x93, 0xaf, - 0x3c, 0x03, 0x39, 0x10, 0x4f, 0xc8, 0x18, 0x28, 0x44, 0x95, 0x31, 0x91, 0xb0, 0xbf, 0x26, 0xfb, 0x76, 0xdb, 0x6b, - 0x4b, 0x7e, 0xf0, 0x4b, 0x37, 0xd3, 0x44, 0xcf, 0x3b, 0xdc, 0x50, 0x56, 0x62, 0x15, 0x22, 0x36, 0x9e, 0xfa, 0x95, - 0x33, 0x88, 0x35, 0x79, 0x93, 0x81, 0x0f, 0x83, 0xf9, 0x62, 0x3c, 0x03, 0x69, 0x11, 0xdc, 0x71, 0x4a, 0x7e, 0x99, - 0x81, 0x5b, 0x73, 0x11, 0xe3, 0x05, 0xdb, 0x2c, 0x89, 0x7e, 0xbf, 0x97, 0x67, 0x61, 0xae, 0x70, 0x96, 0xf3, 0x46, - 0x8b, 0xdd, 0x51, 0x27, 0x0c, 0xe2, 0x76, 0x35, 0x04, 0x43, 0x39, 0x04, 0x65, 0x47, 0x5b, 0x6c, 0xbd, 0xa6, 0x9e, - 0x52, 0xf7, 0x56, 0xd6, 0x57, 0x8e, 0xfe, 0x10, 0x59, 0x81, 0x85, 0xb4, 0x6b, 0x8e, 0x55, 0xcd, 0x31, 0xd2, 0x9e, - 0x7e, 0xbf, 0xf2, 0xc8, 0x4f, 0x67, 0xe1, 0x41, 0x20, 0x4b, 0x15, 0x3b, 0x65, 0x51, 0x6e, 0x4a, 0x73, 0xc6, 0xb0, - 0xa1, 0x79, 0x66, 0xe2, 0xba, 0xcc, 0x7a, 0xbd, 0x30, 0x44, 0x87, 0x46, 0x2c, 0x15, 0x6b, 0x83, 0xf0, 0x3e, 0x3a, - 0x61, 0x74, 0x0d, 0xb2, 0xba, 0xf0, 0x9c, 0x13, 0xe4, 0xcb, 0xc0, 0x64, 0x4d, 0x56, 0xeb, 0xe4, 0x84, 0x47, 0x2f, - 0x5f, 0x36, 0x82, 0x06, 0x39, 0x49, 0x51, 0x6f, 0x62, 0x77, 0xec, 0xa3, 0x16, 0x52, 0xe3, 0xa6, 0x99, 0xf6, 0x14, - 0xa9, 0xe8, 0xb1, 0x5e, 0x2d, 0x7f, 0x81, 0x65, 0x81, 0x21, 0x1f, 0x84, 0xf6, 0x14, 0xad, 0xc0, 0x0c, 0x37, 0x26, - 0x83, 0xa6, 0x1f, 0x16, 0x6d, 0x11, 0x3a, 0x23, 0xb7, 0x25, 0x84, 0x6d, 0x1b, 0x84, 0xb5, 0xf3, 0x44, 0xbe, 0x78, - 0xe2, 0x30, 0xc2, 0x21, 0xd7, 0x9b, 0xb9, 0xf2, 0x30, 0xcc, 0xaf, 0x85, 0xdf, 0x3c, 0xd5, 0x5c, 0x27, 0x2a, 0x66, - 0x05, 0xdb, 0xed, 0xb2, 0x22, 0xf8, 0xf7, 0x63, 0x36, 0xc3, 0xbf, 0x59, 0xbf, 0xdf, 0x0b, 0xf1, 0x17, 0xc7, 0xe0, - 0x3d, 0xf3, 0x6a, 0xc1, 0x3e, 0x82, 0x4c, 0x85, 0x44, 0x98, 0x2a, 0x8d, 0xdf, 0x58, 0x0d, 0x16, 0x70, 0xfa, 0x03, - 0x99, 0x0b, 0x33, 0x99, 0xcb, 0x8b, 0x6d, 0xc8, 0x69, 0x6b, 0x9c, 0xb2, 0x51, 0x96, 0x48, 0xd7, 0x85, 0x6c, 0x14, - 0xe7, 0x59, 0x5c, 0xf1, 0x6a, 0xbb, 0x55, 0x87, 0x63, 0x52, 0x72, 0xf4, 0x2b, 0x40, 0x2a, 0x55, 0xb0, 0x8e, 0x54, - 0x3b, 0xfe, 0x22, 0x2c, 0x71, 0x9f, 0xf2, 0x79, 0xb9, 0x30, 0x7b, 0x6b, 0x5e, 0x2e, 0x98, 0xbc, 0x95, 0xf6, 0xc2, - 0x12, 0x9a, 0x57, 0x10, 0xb2, 0xc1, 0x54, 0xc7, 0xa2, 0x35, 0x66, 0xd5, 0xbc, 0x5c, 0x40, 0x18, 0x99, 0x72, 0x01, - 0x36, 0x53, 0xbc, 0x00, 0x2f, 0x92, 0x18, 0x60, 0xe2, 0x62, 0x32, 0x85, 0x78, 0xe6, 0xb2, 0x9c, 0x78, 0xa1, 0xef, - 0x97, 0x89, 0x45, 0xca, 0x80, 0x57, 0x8d, 0x46, 0x13, 0x33, 0x0d, 0x47, 0x9d, 0x20, 0x27, 0x3a, 0xbf, 0x9b, 0x5a, - 0x11, 0x62, 0x4f, 0x1c, 0x01, 0x97, 0x15, 0xd3, 0x85, 0x17, 0x1d, 0x88, 0x31, 0x72, 0x70, 0x8a, 0x4f, 0x0c, 0x8e, - 0xc2, 0xe0, 0xdc, 0x38, 0x27, 0x48, 0x19, 0xc6, 0x64, 0x23, 0xd8, 0xb5, 0x08, 0xab, 0x79, 0xbc, 0x00, 0x65, 0x5d, - 0xbc, 0x00, 0xcb, 0x1a, 0x6d, 0x80, 0x09, 0xf2, 0x2a, 0xee, 0x84, 0x7e, 0xa2, 0xb8, 0x42, 0x84, 0x63, 0xe5, 0xfa, - 0xa8, 0x6c, 0x87, 0xbe, 0xc0, 0xeb, 0xbd, 0x34, 0xc7, 0xcd, 0x7a, 0x2c, 0x10, 0xd8, 0x10, 0x30, 0x36, 0x52, 0x69, - 0xb2, 0xb5, 0xf6, 0x8d, 0x9e, 0x07, 0x3e, 0xcd, 0x46, 0x85, 0xa8, 0xcf, 0x2f, 0x41, 0x84, 0xe2, 0xa2, 0xc1, 0x23, - 0xbf, 0x88, 0x3b, 0x4b, 0xbf, 0x35, 0x2d, 0x2a, 0xd8, 0xc9, 0x06, 0x40, 0xfa, 0x54, 0xb4, 0x28, 0x29, 0xa7, 0x28, - 0x48, 0x63, 0x37, 0x05, 0xac, 0x24, 0x77, 0x01, 0x43, 0xb0, 0xb1, 0x83, 0xca, 0xea, 0x14, 0x11, 0x49, 0x02, 0x91, - 0x15, 0xc3, 0x82, 0xe2, 0xd8, 0x16, 0x88, 0xfa, 0x69, 0xca, 0x32, 0x83, 0xa1, 0xa3, 0xe2, 0x3e, 0x4f, 0x1d, 0x4a, - 0x14, 0x04, 0x54, 0x0d, 0x39, 0x48, 0x6c, 0x4d, 0x03, 0xe1, 0x01, 0x79, 0x44, 0x67, 0xac, 0xbf, 0xcf, 0x3a, 0xcf, - 0x2e, 0x34, 0x47, 0xe5, 0x6a, 0x57, 0xe8, 0x31, 0xc2, 0x93, 0x4c, 0xc3, 0xe4, 0x3b, 0xe7, 0x99, 0x56, 0x53, 0xf4, - 0x1c, 0x7c, 0xb2, 0x53, 0x8c, 0x48, 0xb7, 0x67, 0xd0, 0x75, 0xf0, 0xaa, 0x0e, 0x1b, 0xed, 0x5a, 0x42, 0x48, 0xe8, - 0x5a, 0x14, 0x31, 0xeb, 0x19, 0x03, 0xea, 0xed, 0xb6, 0xa7, 0xe6, 0x6a, 0xff, 0xdc, 0x6d, 0xb7, 0x3d, 0xec, 0xd6, - 0xf3, 0xb4, 0xdb, 0x0a, 0xbc, 0x96, 0x1f, 0xb4, 0xc7, 0x9f, 0xdb, 0xf1, 0xe7, 0x1a, 0xc9, 0xa3, 0xb0, 0x34, 0xd3, - 0xd4, 0x07, 0xe1, 0x70, 0xd3, 0x7b, 0xaf, 0x49, 0xdf, 0x67, 0xa1, 0xa0, 0x97, 0x95, 0x57, 0x5d, 0x63, 0x4d, 0x2a, - 0x1f, 0x5c, 0xff, 0x0f, 0xaf, 0x02, 0x3c, 0xe2, 0xe4, 0xce, 0xde, 0xdb, 0xa0, 0xd2, 0x6b, 0x0b, 0x47, 0x8a, 0xd0, - 0x03, 0x92, 0xb0, 0xaf, 0x65, 0x2d, 0x6e, 0xf3, 0x2c, 0x7b, 0x98, 0x3e, 0xbd, 0x4a, 0x5d, 0xab, 0x7b, 0xbb, 0xcc, - 0x32, 0x7d, 0xe0, 0xd5, 0x14, 0x07, 0x34, 0xea, 0xa2, 0x7d, 0xd7, 0x59, 0x55, 0x81, 0x97, 0x07, 0x5c, 0x9f, 0xcf, - 0xb8, 0x0b, 0x37, 0x77, 0x55, 0xfb, 0x9b, 0xf4, 0x2c, 0x9b, 0x67, 0x8b, 0xed, 0x36, 0xc4, 0xbf, 0x5d, 0x2d, 0xb2, - 0x34, 0x79, 0x0e, 0x3a, 0x3c, 0x8c, 0xdc, 0xc3, 0x54, 0xe3, 0x9c, 0xcd, 0xff, 0xb2, 0xf2, 0x9c, 0x04, 0x4e, 0x81, - 0x5e, 0xcc, 0x1e, 0x81, 0x0c, 0x46, 0x3b, 0xf5, 0x57, 0x33, 0xb5, 0x66, 0x20, 0xfa, 0x56, 0x15, 0x01, 0x8e, 0x2e, - 0x36, 0x12, 0x8d, 0x2c, 0x38, 0x69, 0x08, 0x58, 0x6c, 0x9a, 0xf2, 0x3e, 0x18, 0xda, 0x56, 0x97, 0xf7, 0xce, 0x92, - 0xe6, 0xb8, 0x0e, 0xac, 0x6d, 0xbf, 0x1e, 0x62, 0x5d, 0x76, 0xbd, 0x40, 0xee, 0x97, 0x37, 0xb4, 0x37, 0x6e, 0x12, - 0x98, 0xb5, 0x4d, 0x63, 0x18, 0x3f, 0x53, 0xfa, 0x4f, 0x6a, 0x70, 0xa5, 0xf1, 0xd3, 0x5c, 0x5b, 0x25, 0x98, 0x7d, - 0xe3, 0xf8, 0x0e, 0x40, 0x38, 0x36, 0x97, 0x1e, 0x9f, 0x65, 0x0e, 0x3d, 0x06, 0xa2, 0xa3, 0x3f, 0x2a, 0xec, 0x47, - 0x66, 0xf7, 0xba, 0x01, 0xf0, 0xe6, 0x75, 0xbb, 0xa0, 0x79, 0xb1, 0x80, 0x40, 0xa2, 0x4e, 0x79, 0xa5, 0xe1, 0x33, - 0x63, 0x76, 0x05, 0x64, 0xa8, 0x24, 0x60, 0x93, 0xd4, 0x75, 0x2e, 0xc4, 0xb2, 0xc3, 0xd2, 0x7c, 0x24, 0x61, 0x27, - 0x21, 0xa0, 0xbd, 0x06, 0xc1, 0x2c, 0xf8, 0xaf, 0x60, 0x50, 0x0c, 0x82, 0x28, 0x88, 0x82, 0x80, 0x0c, 0x4a, 0xf8, - 0x85, 0x38, 0x63, 0x04, 0x63, 0x94, 0x40, 0x87, 0xdf, 0x71, 0xe6, 0x32, 0x22, 0x2f, 0xbc, 0x30, 0x96, 0x76, 0x00, - 0x2e, 0x84, 0xc8, 0x79, 0x8c, 0x3e, 0x16, 0xef, 0x38, 0xcb, 0x08, 0x7d, 0xe7, 0x9c, 0xca, 0x8f, 0xb8, 0x17, 0xdc, - 0x6e, 0x77, 0xd8, 0x5e, 0xf2, 0x30, 0xa3, 0xbd, 0x31, 0x7d, 0xc7, 0x49, 0x94, 0x79, 0xce, 0xc3, 0x1c, 0x7a, 0x56, - 0x1b, 0xd6, 0x8a, 0x6a, 0x72, 0x83, 0x62, 0x5d, 0x64, 0x99, 0xac, 0x0c, 0x57, 0xce, 0x69, 0x85, 0xeb, 0xce, 0xac, - 0x17, 0x90, 0x94, 0x55, 0x8a, 0xa5, 0x33, 0xe1, 0xab, 0x4d, 0xcb, 0x9e, 0xb7, 0x4e, 0x21, 0xa7, 0x21, 0x32, 0xfa, - 0xa1, 0x25, 0xa0, 0x9a, 0x56, 0x5c, 0xd5, 0xe0, 0xb2, 0xab, 0xdb, 0xc3, 0x75, 0x7b, 0x74, 0x33, 0x3e, 0x40, 0x8c, - 0x38, 0x8e, 0x2d, 0x03, 0xbb, 0x09, 0x8b, 0x67, 0x63, 0x7d, 0x5f, 0x76, 0xe9, 0xad, 0xad, 0xc5, 0x21, 0xac, 0x3d, - 0x67, 0x85, 0x84, 0x00, 0x69, 0xa9, 0x2b, 0xdd, 0x6e, 0x83, 0x00, 0x06, 0xb8, 0xdf, 0xef, 0x01, 0xd7, 0xaa, 0xd9, - 0x49, 0x7d, 0x6b, 0x36, 0xc4, 0x5e, 0x52, 0x78, 0x0c, 0x44, 0xa9, 0xf8, 0xcf, 0x20, 0xa0, 0x78, 0xee, 0x86, 0x60, - 0x5f, 0xc9, 0x4e, 0x36, 0x65, 0xbf, 0xff, 0xbc, 0xc4, 0x07, 0x94, 0x83, 0x82, 0x58, 0x57, 0xc5, 0xad, 0xd0, 0xec, - 0x93, 0xfc, 0x10, 0xc7, 0x22, 0xcf, 0x42, 0x4b, 0x58, 0x6a, 0x4d, 0x58, 0xb8, 0x64, 0xa4, 0x83, 0x38, 0x68, 0x48, - 0xe7, 0x60, 0xd5, 0x36, 0xd8, 0x70, 0xaf, 0xf7, 0xb2, 0x0a, 0x2b, 0x9a, 0x39, 0xc3, 0xf2, 0xde, 0x01, 0x00, 0xeb, - 0xf5, 0x70, 0xa1, 0x38, 0x64, 0xc2, 0x43, 0x9f, 0xc4, 0x97, 0x86, 0x5d, 0x9f, 0x29, 0x59, 0xc9, 0x68, 0x34, 0xaa, - 0x1b, 0x29, 0xf9, 0x30, 0xdf, 0xbd, 0x69, 0xa1, 0x56, 0x8a, 0x38, 0xe5, 0x29, 0x58, 0x7a, 0x6b, 0x4a, 0x37, 0x5f, - 0xd0, 0x15, 0x2f, 0x52, 0xf9, 0xd3, 0x41, 0x9b, 0xf4, 0x88, 0x6b, 0xe6, 0xeb, 0x2c, 0xcc, 0xf0, 0x43, 0xc0, 0x47, - 0xf3, 0x30, 0xb3, 0xe9, 0x0a, 0x96, 0x16, 0xc4, 0x91, 0x71, 0xc9, 0x43, 0x9b, 0x07, 0xb0, 0xfe, 0xf4, 0x21, 0x89, - 0x9f, 0xc2, 0xcf, 0x99, 0x4e, 0xeb, 0xf8, 0x0c, 0x67, 0x33, 0x2a, 0xe4, 0x8d, 0xa0, 0xfd, 0x1a, 0x12, 0x89, 0x46, - 0x36, 0xf6, 0x18, 0x8a, 0xd6, 0xdd, 0x06, 0xae, 0xfc, 0x86, 0xde, 0xb9, 0x34, 0x08, 0xb0, 0xad, 0xb1, 0x18, 0x38, - 0xe3, 0xf1, 0x07, 0xaa, 0x6a, 0xf4, 0x15, 0x45, 0x37, 0x4c, 0x26, 0x9a, 0x3b, 0x8e, 0xed, 0xa8, 0x76, 0x95, 0xad, - 0x58, 0x61, 0x6c, 0x79, 0xed, 0x5b, 0x5a, 0x9a, 0x12, 0x50, 0x0d, 0x86, 0x3b, 0x01, 0x7c, 0x46, 0x84, 0x3c, 0x10, - 0x44, 0xf7, 0xc1, 0x41, 0x73, 0x96, 0xe0, 0x79, 0x18, 0xc2, 0x1f, 0x58, 0x38, 0xb0, 0x2c, 0x65, 0x3f, 0x97, 0xd3, - 0x18, 0xce, 0xdd, 0x5c, 0xee, 0xf0, 0xd9, 0x12, 0x14, 0x79, 0x72, 0x4e, 0xf5, 0xe5, 0x2b, 0xf7, 0xf6, 0x7b, 0x4c, - 0x30, 0x8f, 0x9e, 0x6d, 0xf8, 0xad, 0xa6, 0xdb, 0xf8, 0xc2, 0xda, 0x81, 0x13, 0xe6, 0xc2, 0x69, 0x2e, 0xb6, 0x4b, - 0x0d, 0x71, 0xd7, 0x78, 0x42, 0x84, 0x57, 0x8a, 0x58, 0x64, 0x9e, 0x4c, 0xc7, 0x60, 0x63, 0xc8, 0x36, 0x95, 0xcf, - 0x94, 0x42, 0xbc, 0x9a, 0xca, 0x0b, 0x53, 0x2b, 0x95, 0x55, 0x1a, 0x61, 0xa6, 0x80, 0x45, 0x95, 0x81, 0xcf, 0x7e, - 0x8d, 0x14, 0xd7, 0xd4, 0xf3, 0x17, 0x2e, 0xdf, 0x4c, 0xb7, 0xd9, 0x7c, 0xfa, 0x32, 0x8f, 0xaf, 0xb6, 0xdb, 0xb0, - 0xfb, 0x05, 0x98, 0x5f, 0x56, 0x52, 0xa3, 0x06, 0x4e, 0x0f, 0x21, 0xfa, 0x39, 0xef, 0xc9, 0x39, 0xb1, 0x9c, 0x5c, - 0xbb, 0x79, 0xb3, 0x9d, 0x14, 0x2d, 0xb0, 0x80, 0x13, 0x17, 0xe9, 0x40, 0x4b, 0x05, 0xa7, 0x2c, 0xe3, 0x9d, 0x4d, - 0x6f, 0x29, 0x15, 0x5e, 0x2d, 0x14, 0x09, 0xa9, 0xed, 0xbd, 0xc4, 0x8c, 0x1a, 0x70, 0x4e, 0xf2, 0x0e, 0x02, 0x4e, - 0x6a, 0xaa, 0xb1, 0x46, 0x71, 0xaa, 0x13, 0x9c, 0x57, 0x6a, 0xe8, 0x12, 0xe5, 0xc4, 0x6d, 0xb7, 0x55, 0xd1, 0x42, - 0x7d, 0x3c, 0xc8, 0x59, 0x22, 0x8f, 0x07, 0x14, 0xba, 0xc8, 0xa3, 0x21, 0x5f, 0x90, 0x52, 0xad, 0x1c, 0xa5, 0x5a, - 0xdd, 0x95, 0x0c, 0x14, 0x72, 0x15, 0xe4, 0x0d, 0x31, 0xee, 0x5a, 0x99, 0xb7, 0xb8, 0x72, 0x42, 0x4a, 0x93, 0xf0, - 0xb9, 0xa5, 0x18, 0x58, 0xc1, 0xde, 0x98, 0xba, 0xc2, 0x25, 0x42, 0xdb, 0xdd, 0x86, 0x98, 0x64, 0xb0, 0x6e, 0xb6, - 0xdb, 0x57, 0x65, 0x38, 0xcf, 0x16, 0x54, 0x8c, 0xb2, 0x14, 0x21, 0xc4, 0xb4, 0x87, 0xae, 0xe9, 0x82, 0x9e, 0x18, - 0x6a, 0xdb, 0xe3, 0x24, 0xe9, 0x62, 0x4d, 0x92, 0x18, 0xc5, 0x17, 0xa2, 0x94, 0x6b, 0x8d, 0x10, 0x3c, 0xdc, 0xff, - 0x48, 0x21, 0x86, 0x9b, 0x5e, 0x77, 0xbf, 0xee, 0xdc, 0x10, 0xff, 0x80, 0x40, 0x02, 0x05, 0x7b, 0x55, 0x8e, 0x2e, - 0xb2, 0x22, 0xc5, 0x9d, 0x2a, 0xa3, 0xe2, 0xca, 0x75, 0xe0, 0xb7, 0xdc, 0xf0, 0xaf, 0x86, 0x28, 0x40, 0x5c, 0xe3, - 0x4a, 0x31, 0x9e, 0xb5, 0xb5, 0x14, 0xc9, 0x28, 0x36, 0x24, 0x2a, 0x9c, 0xa8, 0xe8, 0x2e, 0x4f, 0xa3, 0x7b, 0x68, - 0xd7, 0x20, 0xb8, 0x6a, 0xee, 0x6c, 0xa4, 0xf9, 0x82, 0x10, 0x39, 0x01, 0x02, 0x36, 0xaa, 0x3e, 0xb5, 0x56, 0xd5, - 0xc3, 0xac, 0xf2, 0xb9, 0x3a, 0x88, 0x57, 0x15, 0xf0, 0xb0, 0xce, 0xf6, 0xbe, 0xaa, 0x1c, 0xd6, 0x06, 0xdf, 0x6e, - 0xb7, 0xab, 0x6a, 0x1e, 0x04, 0x0e, 0xa3, 0xf9, 0x9d, 0x94, 0x98, 0xf7, 0xc6, 0x14, 0x56, 0xbc, 0xeb, 0xd2, 0xd6, - 0x4d, 0x6a, 0x8d, 0x05, 0xea, 0x0e, 0xd7, 0x07, 0x3c, 0x4f, 0x81, 0xa3, 0x1d, 0x15, 0x53, 0x61, 0x74, 0xe5, 0xd8, - 0x95, 0x0a, 0x03, 0x43, 0xff, 0x90, 0xb2, 0x0d, 0x98, 0xe3, 0x81, 0xb5, 0x0d, 0xfa, 0x29, 0x49, 0x2d, 0xcc, 0x18, - 0x8d, 0x59, 0xc4, 0xba, 0x8e, 0x8e, 0xb8, 0x8a, 0xde, 0xce, 0xa3, 0xbf, 0x3d, 0x1d, 0xd3, 0x32, 0x2e, 0x52, 0x71, - 0x0d, 0x2a, 0x08, 0x50, 0x86, 0xa0, 0xe1, 0xbf, 0xa2, 0x06, 0xa0, 0x41, 0xb0, 0x03, 0xf0, 0x8f, 0x4e, 0xa7, 0x41, - 0x53, 0x93, 0x8b, 0x49, 0x2a, 0x8b, 0x9c, 0xb5, 0xa1, 0xcc, 0x64, 0x72, 0x48, 0x1e, 0x17, 0x80, 0xe7, 0x88, 0xcd, - 0x92, 0x36, 0x17, 0x72, 0xb3, 0xc9, 0xd7, 0x92, 0x1d, 0xb9, 0xf3, 0x8a, 0xd6, 0x6b, 0x51, 0xd9, 0x49, 0xcc, 0x17, - 0xd3, 0x3b, 0x23, 0x0c, 0x9c, 0xea, 0xd6, 0xdc, 0xee, 0x40, 0xa7, 0x99, 0xfa, 0x74, 0x6e, 0x02, 0xc4, 0x01, 0x86, - 0xeb, 0x6e, 0x7e, 0xbb, 0x20, 0xf4, 0x8e, 0xdd, 0x19, 0xb1, 0xea, 0xad, 0x91, 0x8b, 0xe8, 0xb4, 0xdb, 0xc1, 0x04, - 0x2e, 0xe3, 0xac, 0x34, 0x2f, 0x94, 0xba, 0xa1, 0xec, 0x68, 0x9b, 0x30, 0x9f, 0x77, 0xb4, 0x1b, 0x2e, 0xf8, 0x46, - 0xac, 0x63, 0xdd, 0x90, 0xa6, 0x12, 0x3d, 0x3a, 0x50, 0xdb, 0x21, 0xa0, 0x39, 0x1b, 0xd3, 0x25, 0x40, 0x6d, 0xc2, - 0x7e, 0x59, 0x83, 0x59, 0xca, 0x25, 0xf4, 0xb5, 0xdb, 0x27, 0xf9, 0x52, 0xf6, 0xa4, 0x72, 0x96, 0x28, 0xf8, 0x72, - 0xa4, 0xe0, 0x95, 0x95, 0xf3, 0x58, 0xcf, 0x21, 0xe0, 0xb1, 0xc8, 0x12, 0x9d, 0x93, 0xe2, 0x0a, 0x94, 0xa9, 0x70, - 0x04, 0xea, 0xaa, 0x11, 0x4b, 0x38, 0xc0, 0xed, 0xc5, 0xd3, 0x80, 0x50, 0x90, 0xea, 0xae, 0xcd, 0x8a, 0xbc, 0x63, - 0x27, 0x9b, 0x3b, 0x30, 0x8b, 0xad, 0xd7, 0x55, 0xeb, 0x2b, 0x93, 0x6c, 0x3f, 0x6e, 0x08, 0xb6, 0xdd, 0x91, 0xf2, - 0x85, 0x77, 0xf4, 0x96, 0x6c, 0x6e, 0xfb, 0xfd, 0x10, 0xfa, 0x43, 0xa8, 0xea, 0xd0, 0x5d, 0x67, 0x87, 0xee, 0x5c, - 0xe6, 0xd7, 0xe8, 0xf9, 0xa4, 0x37, 0xc4, 0x07, 0x34, 0xd1, 0xa2, 0xab, 0xf8, 0x1e, 0x36, 0x75, 0x54, 0x53, 0x59, - 0x79, 0x94, 0x50, 0x50, 0x01, 0x67, 0xbc, 0x3a, 0xe3, 0x18, 0xdb, 0x54, 0x3d, 0xbd, 0x53, 0xbc, 0xda, 0x5a, 0xaf, - 0xcd, 0x6a, 0x7d, 0x01, 0x16, 0x01, 0x17, 0x3c, 0xba, 0x56, 0xb4, 0xe4, 0xca, 0x61, 0xea, 0xcf, 0x71, 0x54, 0x82, - 0xcb, 0x38, 0xcb, 0x79, 0x1a, 0xd0, 0x4b, 0xbf, 0xff, 0xa1, 0xb2, 0x95, 0x5a, 0x7a, 0x67, 0xee, 0x4d, 0x48, 0x36, - 0xff, 0x63, 0x03, 0xf5, 0x3a, 0xc4, 0x88, 0xa8, 0x7a, 0x41, 0xbf, 0x65, 0x10, 0x1b, 0x33, 0xa8, 0xd6, 0x49, 0xc2, - 0xab, 0x2a, 0xd0, 0x4a, 0xad, 0x35, 0x5b, 0xeb, 0xf3, 0xec, 0x11, 0x3b, 0x79, 0xd4, 0x63, 0xec, 0x8e, 0xd0, 0x44, - 0xe9, 0x84, 0x74, 0x8d, 0x91, 0xa3, 0x05, 0x52, 0x1d, 0x8a, 0xb2, 0xcb, 0xf0, 0x2d, 0x0a, 0x59, 0xda, 0xfb, 0x5c, - 0x9f, 0xc8, 0xf2, 0x1b, 0x65, 0x74, 0x11, 0xc9, 0x44, 0x90, 0x8d, 0xdf, 0x22, 0x60, 0x2f, 0x34, 0x3b, 0x20, 0x9b, - 0x25, 0x3b, 0xa3, 0xe7, 0xc6, 0x04, 0x06, 0x5e, 0xbf, 0x95, 0x89, 0x7a, 0x94, 0x25, 0xd1, 0x95, 0x46, 0x2e, 0xf7, - 0x21, 0x89, 0xce, 0x43, 0xe2, 0xe6, 0x86, 0xa5, 0x75, 0x13, 0xa2, 0x98, 0x59, 0x6f, 0x78, 0xd9, 0xdd, 0x47, 0xde, - 0xb6, 0xd2, 0x3e, 0xd5, 0x77, 0x26, 0x8d, 0x4c, 0xa1, 0xaf, 0xc3, 0x49, 0xbf, 0x0f, 0x7f, 0x15, 0xfd, 0xc0, 0x5b, - 0x0a, 0xfe, 0x62, 0x8f, 0x48, 0x93, 0xb0, 0x00, 0xe0, 0x08, 0x73, 0x5e, 0xfb, 0x13, 0xf8, 0x88, 0x9d, 0x6c, 0x1e, - 0x85, 0x67, 0xde, 0xcc, 0xdd, 0x87, 0x78, 0xa9, 0x4a, 0x7a, 0xce, 0x3c, 0xe9, 0x81, 0x58, 0x85, 0x7a, 0xbf, 0xde, - 0x31, 0xa3, 0x4f, 0x00, 0x22, 0x75, 0x67, 0x1c, 0x4a, 0xf1, 0x63, 0xdd, 0x65, 0xb2, 0x49, 0x59, 0x9b, 0x89, 0x92, - 0x2a, 0x12, 0x7f, 0x11, 0x40, 0xbf, 0x61, 0x38, 0x1a, 0x80, 0xf7, 0x56, 0x63, 0xaf, 0x87, 0xc6, 0x19, 0x53, 0x4d, - 0xcf, 0x36, 0x6a, 0x79, 0x5b, 0x0a, 0xa1, 0xc7, 0x22, 0xba, 0xb3, 0xc7, 0x62, 0x78, 0x46, 0xdf, 0x42, 0x85, 0xaf, - 0x43, 0x8c, 0xa6, 0x4b, 0x9a, 0x66, 0xba, 0x96, 0x5b, 0xe9, 0x96, 0xd0, 0x1c, 0xa3, 0xf8, 0x38, 0x6d, 0xbb, 0xa7, - 0x5a, 0x68, 0x4f, 0x28, 0x0f, 0xef, 0x68, 0x4d, 0x6f, 0x0d, 0x8b, 0x60, 0x91, 0x96, 0x9d, 0xfc, 0x84, 0x5e, 0x38, - 0x02, 0x93, 0xb2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x33, 0x35, 0x52, 0x0e, 0x47, 0xe1, 0x4b, 0x36, 0x20, - 0x57, 0x50, 0x8b, 0x35, 0x66, 0x27, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x33, 0x29, 0x88, 0x64, 0x44, 0x73, 0x0b, - 0xf1, 0xf4, 0x0f, 0xd0, 0xf4, 0x41, 0x5a, 0x98, 0xd2, 0x35, 0x0a, 0x78, 0x40, 0xdf, 0xd4, 0xef, 0xe7, 0xf8, 0xdc, - 0x38, 0x96, 0x58, 0xd8, 0xe3, 0x25, 0xa1, 0x4b, 0x27, 0x6e, 0x14, 0x48, 0x9b, 0x2d, 0xab, 0x00, 0xac, 0x48, 0x02, - 0x8d, 0x48, 0xd0, 0x52, 0xc7, 0x8a, 0xcb, 0x36, 0x68, 0x40, 0x12, 0x15, 0x14, 0xb2, 0x44, 0x02, 0xf8, 0x61, 0x04, - 0x21, 0x8a, 0x62, 0x10, 0xf7, 0xaa, 0xe5, 0x15, 0x37, 0x54, 0x83, 0x13, 0x45, 0x30, 0xc1, 0x2a, 0x9d, 0x02, 0xb1, - 0x2d, 0xd6, 0x2b, 0xf0, 0xbc, 0xb4, 0x17, 0x49, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x95, 0x4e, 0xdb, 0xe5, 0xed, 0x88, - 0x96, 0x6a, 0x36, 0x77, 0x5e, 0x2c, 0x0c, 0xf7, 0x58, 0xbb, 0xdb, 0x81, 0xf6, 0xc2, 0x7a, 0x47, 0x44, 0x0d, 0x56, - 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xaa, 0x5e, 0x59, 0x26, 0xa0, 0xa6, 0xab, 0xb8, 0x5e, 0x46, 0xd9, 0x08, 0xfe, - 0x6c, 0xb7, 0xc1, 0x61, 0x00, 0x16, 0x90, 0xbf, 0xbc, 0xff, 0x29, 0xc2, 0xf0, 0x4c, 0xbf, 0xbc, 0xff, 0x69, 0xbb, - 0x7d, 0x3a, 0x1e, 0x6b, 0xae, 0xc0, 0xaa, 0x75, 0x80, 0x3f, 0xd0, 0x6c, 0x83, 0x59, 0xb2, 0xdb, 0xed, 0x53, 0xe0, - 0x20, 0x24, 0xdb, 0xa0, 0x77, 0xb1, 0x74, 0xe4, 0x92, 0xac, 0x86, 0xda, 0x91, 0x80, 0x55, 0xb7, 0xc3, 0x52, 0xec, - 0x52, 0x1f, 0x19, 0x82, 0x51, 0x2d, 0xfa, 0x17, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, 0xb2, 0xae, 0x57, 0x55, - 0x74, 0x78, 0x18, 0xaf, 0xb2, 0x51, 0x95, 0xc1, 0x36, 0xaf, 0x6e, 0xae, 0x00, 0x50, 0x21, 0xa0, 0xde, 0xbb, 0x75, - 0x91, 0xe9, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0x8d, 0x6e, 0x72, 0x4a, 0xcc, 0x03, 0xd8, - 0x1c, 0x6e, 0xb7, 0x1e, 0xbf, 0x70, 0x32, 0x7a, 0x3a, 0x5b, 0x66, 0xca, 0xa0, 0x93, 0xeb, 0xfd, 0x4f, 0x22, 0x27, - 0x0d, 0x15, 0x9f, 0x64, 0xfa, 0x22, 0x03, 0x3e, 0x8f, 0xbd, 0xa9, 0x42, 0x97, 0xe5, 0xf2, 0x5a, 0x03, 0x6c, 0x6c, - 0x76, 0x79, 0x3f, 0x4a, 0x39, 0x44, 0xa4, 0x08, 0x8c, 0xba, 0x66, 0x99, 0x11, 0xd7, 0xa6, 0xe2, 0xbe, 0xa5, 0x0a, - 0x7b, 0x53, 0x39, 0xce, 0x2a, 0x5c, 0x3b, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x02, 0x85, 0xa8, 0x1c, 0x8d, 0xe9, 0xac, - 0x40, 0x2a, 0x73, 0x98, 0x50, 0xcc, 0x61, 0xdf, 0xfd, 0x92, 0x5a, 0x73, 0x19, 0x57, 0xb8, 0xf7, 0xc2, 0x95, 0x99, - 0xdc, 0x09, 0x00, 0x45, 0x92, 0xb5, 0xff, 0xfc, 0x09, 0xa9, 0xf1, 0x3f, 0x53, 0xa5, 0x01, 0xe8, 0xfd, 0x0c, 0x35, - 0x59, 0x82, 0x80, 0xad, 0x98, 0xba, 0x68, 0xfa, 0x46, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x15, 0xdb, 0xc8, 0xf8, 0x39, - 0x51, 0x4d, 0x4b, 0x9e, 0xae, 0x8b, 0x34, 0x2e, 0x92, 0xfb, 0x88, 0x37, 0x53, 0x2c, 0x89, 0x55, 0x9a, 0x02, 0xfd, - 0xec, 0x77, 0xe1, 0xa7, 0xd2, 0x33, 0x01, 0xa7, 0x85, 0xbb, 0xad, 0x9c, 0xcd, 0x64, 0x18, 0x67, 0x64, 0xca, 0x25, - 0x62, 0xb7, 0xd1, 0xf7, 0xe8, 0x13, 0xfc, 0xc9, 0xd1, 0x13, 0x42, 0xef, 0xc4, 0xb4, 0x40, 0x50, 0xba, 0x22, 0x35, - 0xae, 0x9a, 0xd8, 0xaf, 0x29, 0x44, 0x71, 0xa8, 0x18, 0x84, 0xee, 0xd4, 0xed, 0x93, 0x7c, 0x9f, 0x29, 0xfb, 0x8d, - 0x2e, 0x5b, 0x90, 0x4d, 0x05, 0x1d, 0x13, 0xd6, 0xdb, 0xd3, 0xd9, 0xb3, 0x33, 0xe7, 0x37, 0x68, 0xc2, 0x41, 0x75, - 0x03, 0xed, 0x2a, 0xc9, 0x34, 0x46, 0xb1, 0x59, 0x8c, 0xb5, 0x1b, 0x13, 0x11, 0x04, 0x9d, 0x2e, 0x66, 0x61, 0xbb, - 0x9d, 0x10, 0x5f, 0x02, 0x09, 0x14, 0xb8, 0x72, 0x51, 0x4e, 0x42, 0x22, 0x2f, 0x64, 0x6a, 0xb2, 0x6e, 0x04, 0x0b, - 0xd4, 0x1a, 0x3b, 0x0a, 0xe8, 0x29, 0x37, 0x4f, 0x01, 0x7d, 0x5f, 0xb2, 0x53, 0x3e, 0x08, 0x86, 0x18, 0x5f, 0x35, - 0xa0, 0xb7, 0x42, 0x3e, 0x82, 0x87, 0x30, 0xb0, 0x5c, 0xf4, 0x65, 0xc9, 0x10, 0x56, 0xe8, 0xcf, 0x94, 0x4d, 0xbe, - 0xfe, 0xc6, 0xce, 0xef, 0xb5, 0x12, 0xb3, 0x83, 0x50, 0xdc, 0x5c, 0x4f, 0x80, 0xf8, 0xd5, 0xfc, 0x1a, 0xac, 0xab, - 0x95, 0xc4, 0xdb, 0x91, 0x3c, 0x54, 0xae, 0x1c, 0xdd, 0x7c, 0x52, 0xe9, 0x4f, 0x20, 0x48, 0x8d, 0x95, 0x94, 0xdb, - 0xef, 0x3e, 0x0a, 0x5b, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xed, 0xad, 0xe4, 0xc2, 0x17, 0xfe, 0x63, 0x9d, 0xef, 0x31, - 0x76, 0x88, 0x38, 0xc3, 0xe9, 0xf7, 0xc1, 0xb0, 0xbd, 0x5b, 0x99, 0x36, 0x24, 0xba, 0x96, 0x1f, 0x01, 0xfd, 0x1f, - 0xab, 0xf1, 0x3b, 0x45, 0x49, 0x5f, 0x12, 0xe7, 0x08, 0x57, 0xc4, 0x2b, 0x34, 0xd5, 0xeb, 0x8d, 0x1b, 0xfa, 0xa6, - 0xd4, 0x2f, 0x94, 0x82, 0xc3, 0xbc, 0xd5, 0x0a, 0x0f, 0x3c, 0xf3, 0xfe, 0xa8, 0x3c, 0x41, 0xf7, 0x6f, 0xb8, 0x37, - 0xfe, 0xa8, 0x58, 0x86, 0x37, 0xe5, 0x2c, 0xd3, 0x77, 0xb8, 0xdb, 0xac, 0x48, 0xc5, 0x2d, 0x63, 0xc1, 0xba, 0x90, - 0xe6, 0xab, 0x69, 0x30, 0xdb, 0x34, 0x91, 0x4c, 0xb6, 0xdf, 0xff, 0xe5, 0x9d, 0xb0, 0xd9, 0x20, 0x38, 0xab, 0x45, - 0x19, 0x5f, 0xf1, 0x60, 0xaa, 0x54, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0x63, 0xb5, 0x77, 0xf0, 0x64, 0xa8, - 0x99, 0x0e, 0x71, 0x6d, 0x74, 0x16, 0xf0, 0x56, 0x8f, 0xe6, 0x69, 0x0d, 0xbb, 0xcc, 0x55, 0x52, 0xfc, 0xd1, 0x92, - 0x64, 0x63, 0xfd, 0x9e, 0x0c, 0xdb, 0xc8, 0x67, 0xae, 0x01, 0x63, 0xe6, 0x56, 0xc8, 0x20, 0x77, 0x3d, 0x60, 0x84, - 0x90, 0x08, 0x54, 0xd6, 0x62, 0xe2, 0xbc, 0xd2, 0xe1, 0x1f, 0x6d, 0x60, 0x9c, 0x18, 0x03, 0xe3, 0x7c, 0x14, 0x21, - 0xa7, 0xa7, 0x7c, 0x90, 0x78, 0xb3, 0xf5, 0x97, 0x2c, 0x91, 0xde, 0x08, 0x42, 0x2f, 0xe0, 0xf7, 0xb8, 0xc5, 0x03, - 0x79, 0xc1, 0x29, 0xed, 0xcd, 0xe9, 0xf0, 0x65, 0x49, 0x86, 0x7f, 0x82, 0x77, 0x57, 0x6c, 0x2e, 0xcb, 0x09, 0x2c, - 0xee, 0xd8, 0x29, 0x9e, 0xe6, 0xb2, 0xc5, 0x09, 0x71, 0x88, 0x45, 0xee, 0x12, 0x0b, 0x18, 0x51, 0xcd, 0x68, 0xfc, - 0x78, 0xf6, 0xf6, 0x8d, 0xc2, 0x6c, 0xca, 0xdd, 0x0f, 0x60, 0x44, 0x95, 0xb4, 0xdd, 0x0c, 0xf8, 0x72, 0x84, 0x06, - 0xdb, 0xa9, 0x1d, 0xec, 0x7e, 0x5f, 0xa7, 0x9d, 0x14, 0x4e, 0x36, 0x2b, 0x06, 0xdd, 0x51, 0xda, 0x2c, 0xa5, 0x41, - 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0xab, 0xc5, 0xaa, 0xce, 0x87, 0xe1, 0x92, 0xc6, 0x46, 0x56, 0x6e, 0x76, 0x13, 0x8e, - 0x6c, 0x02, 0x5c, 0x9f, 0x84, 0xb2, 0xf2, 0xe7, 0xa0, 0x05, 0x9d, 0x09, 0x1c, 0xd1, 0x76, 0x1b, 0x42, 0x04, 0x8e, - 0x72, 0x38, 0x99, 0x85, 0xe5, 0x70, 0x28, 0x07, 0xbe, 0x24, 0x24, 0x7a, 0x53, 0xce, 0xb3, 0x85, 0x44, 0xec, 0x71, - 0x77, 0xd2, 0xaf, 0xa5, 0xe4, 0x94, 0x7b, 0x7f, 0x54, 0x64, 0xf3, 0x5b, 0x8a, 0x31, 0x07, 0xad, 0x66, 0x33, 0x03, - 0x09, 0xeb, 0x69, 0x4d, 0xe4, 0x3a, 0x32, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, 0x75, 0x8b, 0x23, 0xd6, 0xd3, - 0x7a, 0x0f, 0x2a, 0x40, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x5e, 0x56, 0xa1, 0xa0, 0x9c, 0xf8, 0xcc, 0x8c, 0x11, - 0x0d, 0x96, 0x20, 0x24, 0x8d, 0xab, 0xfa, 0xb5, 0x48, 0xb3, 0xcb, 0x0c, 0x10, 0x13, 0xac, 0xff, 0x9c, 0xf0, 0xde, - 0x3c, 0x93, 0xf3, 0xd2, 0x95, 0x38, 0x33, 0x30, 0x1f, 0x5d, 0x6f, 0x69, 0x49, 0xa2, 0x12, 0x68, 0x94, 0xab, 0xe5, - 0xf9, 0xfb, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x69, 0x3b, 0xc4, 0x4f, 0x58, 0x4d, 0x9c, 0xd3, 0xba, 0x96, 0x22, - 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xc8, 0xe1, 0x03, 0x83, 0x0a, 0x2b, 0xf9, 0x29, 0x70, 0xf8, 0x8c, - 0x81, 0xa4, 0xab, 0x45, 0x70, 0x35, 0x3a, 0xc2, 0x8a, 0x32, 0xb5, 0xc4, 0x14, 0x12, 0xdd, 0x7a, 0xa1, 0x35, 0x86, - 0x51, 0x76, 0x15, 0xf9, 0xdf, 0xab, 0xee, 0xfd, 0x51, 0x6d, 0xb7, 0x30, 0xc9, 0x8e, 0xc7, 0x15, 0x6c, 0x6a, 0xd4, - 0x0a, 0xe1, 0xec, 0x9c, 0xd6, 0xa8, 0x1d, 0xeb, 0x85, 0x05, 0x90, 0x07, 0xb0, 0x15, 0xf1, 0x28, 0x83, 0x60, 0x6f, - 0xca, 0x79, 0xb5, 0xb0, 0xa2, 0x1c, 0x21, 0xf1, 0xbe, 0xc4, 0x28, 0xe5, 0x70, 0x15, 0x0b, 0x4b, 0x86, 0xfc, 0xea, - 0xe8, 0xb2, 0x14, 0xd7, 0x20, 0x29, 0xd1, 0x0c, 0x95, 0xe1, 0x75, 0x71, 0xd5, 0x16, 0x84, 0xf6, 0x2e, 0x2a, 0x50, - 0x47, 0x82, 0xe0, 0xc5, 0xab, 0x21, 0x66, 0x1b, 0xb9, 0xbb, 0xa2, 0xbd, 0xe4, 0x80, 0x5a, 0xdd, 0xb5, 0x5d, 0x6f, - 0xd2, 0x36, 0xdb, 0x88, 0x0b, 0xff, 0x82, 0xd2, 0x4f, 0xf9, 0xa0, 0x74, 0xa9, 0x04, 0x6e, 0x7c, 0xb9, 0xc9, 0xb2, - 0xcb, 0x7b, 0x5c, 0xfa, 0xb5, 0x37, 0x7e, 0xfd, 0x7e, 0x4f, 0x2e, 0x04, 0x2f, 0x15, 0x98, 0x6f, 0x97, 0x99, 0xaa, - 0xb5, 0xa6, 0xd4, 0x5c, 0x82, 0x6b, 0x6b, 0x3f, 0x82, 0x8a, 0xb8, 0xae, 0xc8, 0x64, 0x72, 0x80, 0x0e, 0x9c, 0xac, - 0x70, 0x2b, 0x0b, 0xf0, 0xd8, 0x09, 0xc8, 0x76, 0xcb, 0xc3, 0x40, 0x1d, 0x3a, 0x81, 0xbb, 0x25, 0xcf, 0x90, 0x59, - 0x33, 0x8f, 0x3f, 0x2b, 0xc1, 0x3f, 0xb6, 0xe0, 0x27, 0x14, 0x77, 0x1a, 0x99, 0x7f, 0x2b, 0xad, 0x5b, 0xdc, 0xbf, - 0x93, 0x69, 0x42, 0x51, 0x99, 0xd0, 0xb8, 0x95, 0xfe, 0x4b, 0x07, 0x4b, 0x92, 0xd9, 0x3f, 0x08, 0xf8, 0x60, 0xe6, - 0x3d, 0x31, 0xef, 0x49, 0x73, 0xba, 0xb5, 0x82, 0x21, 0x40, 0xa1, 0x9f, 0x93, 0xb9, 0xa6, 0xea, 0xf9, 0xe7, 0x35, - 0x5f, 0x73, 0xbf, 0xc5, 0x26, 0xe9, 0x81, 0x06, 0x3b, 0x79, 0x14, 0xa5, 0xb0, 0x12, 0x75, 0xae, 0x25, 0xea, 0x55, - 0xc3, 0x32, 0x54, 0x27, 0x38, 0x35, 0x4f, 0xd5, 0xb0, 0xfb, 0x89, 0x68, 0xad, 0x24, 0x2d, 0x31, 0x60, 0xad, 0x23, - 0x0f, 0xc9, 0xed, 0x5a, 0xc7, 0x9d, 0x86, 0xba, 0x34, 0x89, 0x12, 0x60, 0x84, 0x0b, 0x70, 0x04, 0xfd, 0x54, 0x86, - 0x1c, 0xae, 0xa9, 0x52, 0xbf, 0xa0, 0x28, 0x79, 0xe2, 0x28, 0x6a, 0x95, 0x22, 0xdd, 0x7c, 0x94, 0x63, 0x37, 0x5c, - 0xe3, 0x84, 0x9c, 0x68, 0xa1, 0xbf, 0x3d, 0x96, 0x72, 0x86, 0x16, 0x0f, 0xf2, 0x04, 0xeb, 0xe5, 0x2d, 0x05, 0x8a, - 0x3e, 0xba, 0x8c, 0xba, 0xe6, 0x15, 0xda, 0xbe, 0x2c, 0xfb, 0xfd, 0xdc, 0xd4, 0x93, 0xb2, 0x93, 0xcd, 0x52, 0xef, - 0x43, 0x54, 0x4c, 0xe1, 0xae, 0x4f, 0x14, 0x7f, 0x15, 0xaa, 0xab, 0xb6, 0xc8, 0xf9, 0x88, 0x23, 0x2e, 0x46, 0x4e, - 0x9a, 0x9f, 0xe5, 0xd4, 0x4b, 0x71, 0xbf, 0xac, 0xe4, 0xd7, 0x4a, 0x5b, 0x31, 0x5a, 0xa0, 0xfe, 0x54, 0xaa, 0xbc, - 0x5f, 0x94, 0x00, 0xf7, 0x54, 0xb1, 0x37, 0x60, 0x5f, 0xa1, 0x10, 0x7e, 0x5b, 0x02, 0xfe, 0x8d, 0xe4, 0x06, 0x8c, - 0x02, 0x03, 0x8c, 0x26, 0xdb, 0x73, 0x9a, 0xc0, 0x01, 0x57, 0x29, 0x15, 0x05, 0xad, 0xf4, 0xd0, 0x50, 0x53, 0x18, - 0x3d, 0x43, 0x19, 0xb7, 0xcc, 0xec, 0xdc, 0x18, 0x3b, 0x2d, 0xf0, 0x3c, 0x7f, 0x3e, 0x27, 0xf4, 0xb0, 0x56, 0x07, - 0xa9, 0xd1, 0x49, 0x74, 0x7f, 0xec, 0xc2, 0xc9, 0xf5, 0xc2, 0x59, 0x36, 0x2c, 0x81, 0xee, 0xc0, 0x05, 0x31, 0xee, - 0xf7, 0x73, 0x38, 0x32, 0xf5, 0xc8, 0x97, 0x2c, 0xa7, 0x31, 0x5b, 0x52, 0xe5, 0x69, 0x77, 0x55, 0x87, 0x39, 0x5d, - 0x1a, 0x19, 0x6f, 0xca, 0x8a, 0x79, 0x0e, 0x1a, 0x49, 0xf8, 0xd3, 0x6d, 0xed, 0x92, 0xce, 0x97, 0x90, 0x01, 0xfe, - 0x80, 0x44, 0x14, 0xb1, 0xaf, 0xff, 0xad, 0xc6, 0x49, 0x3d, 0x51, 0xda, 0xb0, 0x84, 0xae, 0x99, 0xaa, 0x9f, 0x5e, - 0xb2, 0xb5, 0xb7, 0x14, 0xb6, 0xdb, 0xd0, 0x4f, 0x60, 0x8a, 0x73, 0x25, 0xd3, 0x4b, 0xd4, 0x49, 0x01, 0x15, 0x0b, - 0x2f, 0x71, 0xf9, 0xa5, 0x84, 0x42, 0x73, 0xe7, 0xcb, 0x85, 0x56, 0x62, 0x42, 0xab, 0xc4, 0xe7, 0x0f, 0x95, 0xfe, - 0x5a, 0x7b, 0xc4, 0xfd, 0x2b, 0x0d, 0x13, 0x5d, 0x24, 0x2a, 0x44, 0x67, 0xbf, 0x82, 0x2c, 0xa7, 0x02, 0x1c, 0xcb, - 0x33, 0xd1, 0xd0, 0x1f, 0x53, 0x88, 0x83, 0x0e, 0x0d, 0x7a, 0x57, 0x8a, 0xeb, 0xac, 0xe2, 0x21, 0xde, 0x13, 0x1c, - 0xcd, 0xe8, 0x7e, 0x83, 0x0f, 0x65, 0xed, 0xd1, 0xab, 0xc8, 0xc6, 0x51, 0xee, 0x37, 0xbf, 0x56, 0xe1, 0x1c, 0xa2, - 0x55, 0x2e, 0xa8, 0x52, 0x57, 0x5b, 0x00, 0x2a, 0xc7, 0xf6, 0xea, 0x11, 0x9c, 0x6e, 0xea, 0xfa, 0x56, 0x87, 0xd6, - 0x1c, 0x40, 0x98, 0x43, 0xb2, 0x69, 0xb8, 0xda, 0x01, 0xf6, 0x48, 0xac, 0xd7, 0x40, 0x63, 0xed, 0xd6, 0xec, 0xb4, - 0x47, 0x71, 0x98, 0xc8, 0x4c, 0x5b, 0xa4, 0x68, 0x73, 0xb7, 0x4e, 0x8b, 0xa2, 0x0d, 0x9a, 0x21, 0xec, 0xde, 0x75, - 0xf8, 0xba, 0x15, 0x61, 0x7d, 0xbf, 0xed, 0x0b, 0x8c, 0x86, 0x36, 0xd7, 0xee, 0x39, 0x86, 0x6e, 0xd8, 0x60, 0x13, - 0x39, 0x0f, 0x91, 0x0f, 0x33, 0x79, 0x20, 0x8a, 0xc6, 0x18, 0xb0, 0x3d, 0xe2, 0x6a, 0xd3, 0x4a, 0x7e, 0x5e, 0xc6, - 0x9c, 0xed, 0x19, 0xe3, 0x94, 0xd6, 0xd7, 0xb8, 0xe6, 0xb8, 0x2c, 0xa4, 0x6a, 0x8c, 0x67, 0x3c, 0x0c, 0x3b, 0x5f, - 0xe0, 0xce, 0xac, 0x31, 0x78, 0x11, 0x96, 0x4a, 0x76, 0x2a, 0x57, 0x9f, 0xc3, 0x16, 0x47, 0xb3, 0x31, 0xa7, 0xbf, - 0xff, 0x72, 0xc5, 0x17, 0xe8, 0xa6, 0x66, 0xfd, 0x08, 0x82, 0xac, 0x40, 0x87, 0x2c, 0xa9, 0x7a, 0xfc, 0xae, 0x04, - 0x6a, 0x0f, 0xf3, 0xf0, 0x5d, 0xc9, 0x8a, 0xf8, 0x26, 0xbb, 0x8a, 0x6b, 0x51, 0x8e, 0x6e, 0x78, 0x91, 0x8a, 0xd2, - 0x48, 0x8d, 0x83, 0xd3, 0xd5, 0x2a, 0xe7, 0x01, 0x98, 0xca, 0x1b, 0x46, 0xd9, 0x54, 0x96, 0xa9, 0xc1, 0x55, 0xf2, - 0xf4, 0x5a, 0x89, 0xce, 0xab, 0x9b, 0xab, 0x20, 0xc2, 0x5f, 0x17, 0xfa, 0xc7, 0x75, 0x5c, 0x7d, 0x0c, 0x22, 0x63, - 0x53, 0xa7, 0x7f, 0xa0, 0x54, 0x1e, 0xfc, 0xa7, 0x40, 0xa6, 0xfb, 0x5d, 0x09, 0x96, 0xd9, 0xa6, 0xe2, 0xe3, 0x18, - 0x6b, 0x1d, 0x4e, 0xc8, 0x4c, 0x96, 0xe8, 0xbc, 0x4b, 0xd6, 0x25, 0x58, 0xfb, 0x49, 0x2c, 0x63, 0x99, 0x6b, 0x86, - 0x95, 0xc9, 0x8a, 0xf4, 0xac, 0xac, 0xd9, 0x61, 0x68, 0x9c, 0x68, 0xe6, 0xe8, 0x2d, 0xa0, 0x1e, 0xc8, 0xe1, 0x15, - 0x2d, 0xd6, 0xcc, 0xf1, 0xb1, 0xf1, 0x5e, 0x3f, 0x3a, 0xbc, 0x72, 0x04, 0x4a, 0xe6, 0x4e, 0x8e, 0xc2, 0x44, 0xf0, - 0xac, 0xd5, 0xe3, 0x8b, 0x3c, 0x2b, 0x60, 0xe5, 0x4c, 0xc6, 0x63, 0xea, 0x2c, 0xad, 0xd6, 0xcd, 0xd1, 0x22, 0xb9, - 0x66, 0x8f, 0xeb, 0xc7, 0x9c, 0x1c, 0xf2, 0x96, 0xa9, 0x6d, 0xdb, 0x3a, 0xce, 0xd1, 0xe4, 0x4b, 0xd3, 0xfd, 0x6a, - 0x6d, 0x22, 0xa2, 0x4b, 0xe7, 0x3e, 0xeb, 0x15, 0xdc, 0xfa, 0xa6, 0xd0, 0xf4, 0x5a, 0x00, 0x10, 0x9d, 0x32, 0xe0, - 0x2f, 0x59, 0xb1, 0x1e, 0xd5, 0xbc, 0xaa, 0x41, 0xc2, 0x82, 0x22, 0xbc, 0x29, 0xf6, 0xa6, 0xb4, 0x37, 0x4e, 0xc7, - 0x61, 0x07, 0x2e, 0xa6, 0xe8, 0x8e, 0x03, 0x76, 0xfd, 0x5a, 0x2b, 0x1a, 0xa9, 0x5f, 0xb6, 0x2f, 0xb1, 0xea, 0x8b, - 0x52, 0xe6, 0x99, 0x9c, 0x12, 0x8b, 0xdd, 0x56, 0x2e, 0xac, 0xa8, 0xdf, 0x30, 0xe1, 0xd2, 0x95, 0x20, 0x20, 0xd3, - 0x92, 0xf5, 0x4a, 0xbd, 0x8b, 0xc4, 0x1a, 0x08, 0x19, 0x18, 0xbe, 0x06, 0xeb, 0xa2, 0xe2, 0xda, 0x0a, 0xd6, 0xb9, - 0xe7, 0xab, 0x84, 0x42, 0x14, 0x3c, 0xb0, 0x13, 0xf4, 0x43, 0xeb, 0xe6, 0x6d, 0x29, 0x51, 0x06, 0xf1, 0xb8, 0x95, - 0x53, 0x0e, 0x12, 0x08, 0xc0, 0x3d, 0x95, 0x21, 0x38, 0x24, 0xc8, 0x3a, 0xb8, 0x9a, 0x71, 0x04, 0x57, 0x97, 0xce, - 0x5c, 0x5c, 0x03, 0xac, 0x4b, 0x7f, 0x2e, 0x13, 0x5c, 0x58, 0x8d, 0xa8, 0x34, 0x67, 0x9c, 0x62, 0x10, 0x23, 0x43, - 0xd0, 0x57, 0x86, 0xd2, 0x5e, 0x81, 0xa6, 0xf1, 0x9a, 0xad, 0xa4, 0x0f, 0x00, 0xbd, 0x60, 0x2b, 0x69, 0xec, 0x8f, - 0x5f, 0x9f, 0xb3, 0x95, 0x92, 0x06, 0x4f, 0xaf, 0x67, 0x17, 0xb3, 0xf3, 0x01, 0x3b, 0x8a, 0x42, 0x65, 0xc0, 0x10, - 0x58, 0x24, 0xfe, 0x60, 0x10, 0x16, 0xb2, 0x11, 0x83, 0x42, 0x46, 0xc1, 0x72, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, - 0xc3, 0x02, 0x43, 0x5e, 0x79, 0x2f, 0x48, 0x40, 0xa8, 0x2e, 0x0d, 0x5d, 0x1e, 0xc3, 0xe1, 0xe4, 0x60, 0x02, 0xa9, - 0x98, 0x99, 0xc9, 0xc2, 0xd8, 0x98, 0x44, 0x10, 0xef, 0xb4, 0xb3, 0x5e, 0x28, 0xb7, 0xbb, 0xc6, 0x42, 0x8d, 0xc3, - 0xe0, 0xb3, 0x2a, 0x9e, 0x1c, 0x0c, 0xbb, 0x2a, 0xc6, 0x51, 0xb8, 0xd1, 0xca, 0xb7, 0xf3, 0x63, 0x00, 0xaf, 0x3d, - 0x1f, 0xba, 0x72, 0x89, 0xf3, 0xc3, 0x27, 0xe4, 0xf1, 0x13, 0x42, 0xcf, 0xd9, 0xf9, 0x17, 0x4f, 0xe8, 0xb9, 0x24, - 0x27, 0x07, 0x93, 0xe8, 0x86, 0xe9, 0x06, 0x1c, 0x1e, 0xc9, 0x26, 0xd0, 0xab, 0xd1, 0xba, 0x90, 0x0b, 0x4c, 0x39, - 0x34, 0x85, 0xdf, 0x8e, 0x0f, 0x82, 0xc1, 0x4d, 0xbb, 0xe9, 0x37, 0xed, 0xb6, 0x3a, 0x5e, 0x5d, 0x07, 0x47, 0xd1, - 0x6e, 0x31, 0x93, 0x6f, 0xc6, 0x07, 0x76, 0x0e, 0xb0, 0xbe, 0x87, 0xc7, 0x44, 0x37, 0x69, 0x67, 0x54, 0xdc, 0x9a, - 0xbe, 0xc2, 0x3e, 0xf8, 0x45, 0x76, 0xf4, 0x61, 0xf8, 0x6f, 0x75, 0xa2, 0x39, 0xff, 0xe2, 0x08, 0xc8, 0x11, 0xc8, - 0x40, 0xb1, 0x44, 0x30, 0xc3, 0x81, 0xa6, 0x80, 0x82, 0x4c, 0x8d, 0x3b, 0x55, 0xc3, 0x2f, 0x47, 0x4d, 0xce, 0xc8, - 0x0d, 0x4c, 0x0d, 0xb6, 0x05, 0x3f, 0x90, 0xdd, 0x50, 0xdf, 0x28, 0x74, 0x23, 0xe5, 0x64, 0xa6, 0x5f, 0x52, 0xfd, - 0x83, 0xdd, 0x40, 0x00, 0x63, 0x0b, 0x2f, 0x28, 0xd8, 0x97, 0xc7, 0x57, 0x07, 0xb8, 0x8a, 0x00, 0x25, 0x8b, 0x05, - 0x5f, 0x0e, 0xae, 0xd4, 0xe6, 0x3e, 0x08, 0xc8, 0xe0, 0xcb, 0xe0, 0xe4, 0xcb, 0x81, 0x18, 0x04, 0xc7, 0x87, 0x57, - 0x27, 0x81, 0x35, 0xee, 0x87, 0x10, 0x8f, 0xb2, 0xa2, 0x98, 0x69, 0x34, 0x1f, 0xf4, 0x82, 0x92, 0x89, 0xb9, 0xa9, - 0x57, 0x1a, 0x9f, 0xd1, 0x74, 0x6a, 0x90, 0xbf, 0xc3, 0x94, 0xc5, 0xfa, 0x77, 0x30, 0xe1, 0xd7, 0x41, 0x64, 0x83, - 0xa0, 0xce, 0xf2, 0x28, 0xa6, 0x4b, 0x76, 0x5f, 0x85, 0x29, 0x4d, 0x0e, 0x73, 0x42, 0xa2, 0x70, 0x29, 0xc1, 0xf3, - 0xe4, 0xeb, 0x04, 0xe2, 0xb8, 0xda, 0xcf, 0x01, 0xd7, 0x8d, 0xe6, 0x87, 0x09, 0x69, 0x15, 0x61, 0x23, 0xb2, 0x6c, - 0x1a, 0x7a, 0xc9, 0xc2, 0x15, 0xbd, 0x02, 0x66, 0x4a, 0xac, 0xc3, 0x2b, 0xe0, 0xf2, 0xd6, 0xf3, 0xd5, 0x82, 0x5d, - 0x79, 0xd2, 0x37, 0xcd, 0x17, 0x5f, 0x1a, 0x9f, 0x3c, 0xe0, 0x21, 0xad, 0x1f, 0x5e, 0x0a, 0x36, 0x00, 0x37, 0x19, - 0xbf, 0xfd, 0x4e, 0xdc, 0xa9, 0x79, 0x69, 0x4f, 0x31, 0xce, 0x4c, 0x3b, 0x31, 0x69, 0x27, 0xe4, 0xee, 0x7d, 0x7b, - 0x13, 0xeb, 0x93, 0xbd, 0x8a, 0xd6, 0xd2, 0x65, 0xd5, 0x30, 0x24, 0xe5, 0x9a, 0x21, 0x7f, 0x8f, 0x92, 0x53, 0x23, - 0xf0, 0x64, 0x97, 0xbc, 0x4e, 0x96, 0xee, 0x41, 0x65, 0xac, 0x06, 0xcc, 0x31, 0x62, 0x58, 0x28, 0x1c, 0xfb, 0xd7, - 0x19, 0x2b, 0xd7, 0xae, 0x40, 0x23, 0x46, 0xee, 0xed, 0x75, 0xc6, 0x9c, 0x98, 0xab, 0xc9, 0xda, 0x09, 0x55, 0xe7, - 0xa4, 0xe7, 0x2d, 0xde, 0xcb, 0x2a, 0x35, 0xb4, 0x44, 0xf4, 0x60, 0x2c, 0xcd, 0x28, 0x65, 0xa2, 0xd2, 0xa0, 0x91, - 0x8a, 0x8d, 0x6d, 0xf0, 0x4b, 0x70, 0x42, 0xe5, 0x8e, 0x3a, 0xdb, 0xb5, 0x53, 0x2a, 0x1c, 0x60, 0x59, 0xaa, 0x55, - 0xe5, 0x76, 0x99, 0x09, 0x56, 0x0f, 0x82, 0xd1, 0x1f, 0x95, 0x28, 0x66, 0x78, 0x67, 0x64, 0xc1, 0x14, 0xac, 0x04, - 0x65, 0x2d, 0xc3, 0x62, 0xc8, 0x51, 0x8b, 0xa7, 0x7d, 0x52, 0x85, 0xfa, 0xd1, 0x11, 0x24, 0x77, 0xb9, 0x6e, 0x05, - 0xc9, 0x7d, 0x32, 0x7e, 0xa2, 0x06, 0x3a, 0x5d, 0x2b, 0xc7, 0x43, 0x97, 0xdf, 0x46, 0x7c, 0x6d, 0xd5, 0x7b, 0xaa, - 0xb4, 0x0a, 0x55, 0xa0, 0xc4, 0x8a, 0xd2, 0x95, 0x5a, 0xd0, 0xfd, 0x2e, 0x02, 0x60, 0x11, 0x1b, 0xb3, 0xf1, 0xae, - 0x6d, 0x56, 0x08, 0x1a, 0x5d, 0x76, 0xb2, 0x89, 0x07, 0x2c, 0x51, 0xad, 0x1d, 0x4c, 0x68, 0x7c, 0xc2, 0x8a, 0x7e, - 0x3f, 0x3f, 0x01, 0x7a, 0xaa, 0x8c, 0x98, 0x4a, 0x38, 0xf2, 0x3f, 0xb7, 0x22, 0x5d, 0x14, 0xd8, 0xac, 0xc9, 0xbb, - 0x35, 0x96, 0x91, 0xa8, 0xcb, 0x94, 0x2a, 0xaf, 0x72, 0x0c, 0x98, 0xd6, 0xeb, 0x96, 0xe3, 0xca, 0xae, 0xe2, 0xc8, - 0x51, 0x61, 0x19, 0x71, 0x5e, 0x8d, 0xe3, 0xad, 0xc6, 0x37, 0x38, 0xd4, 0x6c, 0xda, 0xa5, 0x3b, 0x84, 0xb0, 0x10, - 0x5e, 0x67, 0x70, 0x1b, 0x51, 0x76, 0x12, 0xa8, 0xbc, 0xd1, 0xd7, 0x09, 0x69, 0x73, 0xbb, 0x5e, 0x3b, 0x06, 0xe9, - 0x44, 0x1f, 0x28, 0xf5, 0x08, 0x5a, 0xa3, 0x58, 0x50, 0x39, 0xe2, 0x91, 0xe5, 0xe1, 0xad, 0x41, 0xac, 0x92, 0x2f, - 0x29, 0x2a, 0x45, 0x03, 0xf4, 0xbf, 0xe4, 0xb7, 0x07, 0xbf, 0xbc, 0xff, 0xe9, 0x8c, 0xc7, 0x65, 0xb2, 0x7c, 0x17, - 0x97, 0xf1, 0x75, 0x15, 0x6e, 0xe4, 0x18, 0xc5, 0x0d, 0x99, 0x56, 0x03, 0x26, 0xf4, 0x4a, 0xf2, 0x77, 0xa5, 0x22, - 0xc4, 0x58, 0x67, 0xb2, 0xae, 0x6a, 0x71, 0xed, 0x55, 0xba, 0x2e, 0x33, 0xfc, 0xb8, 0xe5, 0x73, 0x7a, 0x08, 0x40, - 0x9e, 0xda, 0x85, 0x34, 0x12, 0xaa, 0x10, 0x6d, 0x2e, 0xe2, 0x74, 0x7d, 0x3c, 0xf6, 0xba, 0x5e, 0xb0, 0xa7, 0xe3, - 0xaf, 0xa6, 0xaf, 0xb3, 0x30, 0x1b, 0x54, 0x64, 0x54, 0x2f, 0x79, 0xd1, 0x32, 0xe5, 0x94, 0x26, 0x01, 0xe8, 0xe3, - 0xd9, 0x63, 0xec, 0x68, 0x3c, 0x26, 0x9b, 0xb6, 0x78, 0x80, 0x87, 0xcb, 0x75, 0x58, 0x92, 0x99, 0xaa, 0x23, 0x0a, - 0x0a, 0x7e, 0x57, 0x07, 0x80, 0xe4, 0x68, 0xaa, 0xd2, 0x5c, 0x1a, 0x7b, 0x3a, 0x9e, 0x50, 0x81, 0xdd, 0x0e, 0x49, - 0xe3, 0x54, 0x68, 0x67, 0x5e, 0xb8, 0x1e, 0x45, 0x42, 0xbb, 0x2c, 0xed, 0x54, 0x2a, 0xe4, 0x9e, 0x99, 0xd9, 0xae, - 0x41, 0x0c, 0x86, 0x50, 0xd5, 0x5d, 0x38, 0x75, 0xef, 0x36, 0xd7, 0x98, 0xed, 0x80, 0xf7, 0x1a, 0x34, 0x43, 0xca, - 0x5b, 0xf4, 0x5b, 0x5b, 0x44, 0x43, 0x57, 0x6b, 0x30, 0x2b, 0x46, 0xd9, 0x52, 0x94, 0xae, 0x29, 0x28, 0x05, 0xa3, - 0xcb, 0xb5, 0xb3, 0x70, 0x5f, 0x0b, 0xef, 0xc2, 0x92, 0xa9, 0xd5, 0x22, 0xa5, 0x84, 0xf2, 0xa6, 0xa2, 0xa5, 0x84, - 0x91, 0xd4, 0xf0, 0xd4, 0xae, 0x17, 0x78, 0x9c, 0xe7, 0x41, 0xd4, 0xf2, 0x02, 0x3b, 0xad, 0xc9, 0x29, 0x38, 0x7a, - 0xe9, 0x9c, 0x9a, 0x02, 0xff, 0x98, 0x49, 0x10, 0xd3, 0xa1, 0xbc, 0xdf, 0xe0, 0xe6, 0xff, 0x47, 0xc9, 0x02, 0x87, - 0x6f, 0xbd, 0xc2, 0x6d, 0xf4, 0x8f, 0xd2, 0xa5, 0xa5, 0xcf, 0x84, 0xeb, 0xea, 0xe2, 0x48, 0x7b, 0xb3, 0x51, 0xb2, - 0xcc, 0xf2, 0xf4, 0x8d, 0x48, 0x79, 0x45, 0xa4, 0x09, 0x46, 0xc5, 0x4e, 0x2a, 0xef, 0x86, 0x07, 0x46, 0x8c, 0xde, - 0x8d, 0xef, 0xc7, 0x0c, 0x64, 0xc3, 0x60, 0xf5, 0xcd, 0x52, 0x91, 0xac, 0xaf, 0x01, 0x53, 0x44, 0xca, 0x4f, 0x5e, - 0xe4, 0x1c, 0x9e, 0x42, 0x75, 0xfd, 0x02, 0xb7, 0xb9, 0xca, 0xf5, 0x39, 0xff, 0x31, 0xa3, 0x3f, 0x22, 0xd0, 0x49, - 0xbc, 0x02, 0xb9, 0xc7, 0x33, 0xa8, 0x1b, 0x61, 0x6a, 0x39, 0x06, 0x07, 0x42, 0x34, 0x90, 0xa2, 0x66, 0x81, 0x84, - 0xba, 0xd0, 0xc0, 0x1a, 0xf2, 0x82, 0x39, 0xbc, 0xc8, 0x45, 0xf2, 0x71, 0xaa, 0x7d, 0xe6, 0x87, 0x31, 0xc6, 0x4c, - 0x0e, 0x06, 0x61, 0x3d, 0x0b, 0x86, 0xe3, 0xd1, 0xe4, 0xe8, 0x29, 0x9c, 0xdb, 0xc1, 0x38, 0x20, 0x83, 0xa0, 0xa9, - 0x56, 0x71, 0x41, 0xab, 0x9b, 0x2b, 0x53, 0x06, 0x7e, 0xdc, 0x04, 0x83, 0x7f, 0x94, 0x8e, 0xe2, 0x1d, 0x34, 0x27, - 0xe7, 0x22, 0x04, 0x1b, 0xfb, 0x35, 0x01, 0x49, 0x59, 0x4f, 0xf1, 0x93, 0xea, 0x70, 0x63, 0x52, 0xfb, 0xa7, 0x0f, - 0x2f, 0x38, 0xec, 0x90, 0x40, 0x81, 0x34, 0x9e, 0x66, 0xa3, 0x57, 0x52, 0x91, 0xfb, 0xae, 0xe4, 0x70, 0x67, 0xee, - 0x59, 0xd3, 0x23, 0xab, 0x90, 0xf0, 0xb3, 0x80, 0x1b, 0xf9, 0xab, 0xe2, 0x26, 0xce, 0xb3, 0xf4, 0xc0, 0x7f, 0x73, - 0x50, 0xdd, 0x17, 0x75, 0x7c, 0x37, 0x0a, 0xb4, 0x35, 0x21, 0x77, 0x55, 0x4f, 0x80, 0x9e, 0x00, 0x5b, 0x00, 0x0c, - 0x88, 0x77, 0xcc, 0x4c, 0x66, 0x3c, 0x02, 0x8f, 0x40, 0xdf, 0x07, 0xb2, 0xbc, 0xb7, 0x2e, 0x49, 0xee, 0x66, 0x2a, - 0xcc, 0x55, 0xaf, 0xd8, 0x29, 0xc8, 0x78, 0xb5, 0x15, 0xbb, 0x6e, 0x7d, 0xe6, 0x4d, 0x87, 0x57, 0xe0, 0x85, 0x00, - 0xb7, 0xc8, 0x7e, 0xdf, 0x17, 0x54, 0x56, 0x5a, 0x45, 0xbc, 0x93, 0xdc, 0xa0, 0x7f, 0xbb, 0x33, 0x36, 0x92, 0xe4, - 0x56, 0x0f, 0x0f, 0xa0, 0xca, 0xe4, 0x5c, 0x71, 0x3b, 0x87, 0xa8, 0xad, 0xbb, 0x71, 0xc0, 0x6a, 0x83, 0x76, 0x59, - 0x73, 0x04, 0x17, 0x5e, 0x1c, 0x64, 0x90, 0x13, 0x67, 0x65, 0x24, 0xd5, 0xb8, 0x9a, 0xd4, 0x82, 0x4f, 0xf2, 0x74, - 0x0f, 0x59, 0xea, 0x09, 0x50, 0xe4, 0x38, 0x16, 0x43, 0xba, 0xf1, 0x26, 0xf0, 0xf8, 0xbd, 0x08, 0x41, 0x9a, 0xb6, - 0xdd, 0xfa, 0x23, 0x50, 0x74, 0x0f, 0x4c, 0x41, 0x9a, 0x46, 0x9b, 0x1a, 0x28, 0xa8, 0x3d, 0xd4, 0x48, 0x45, 0x9c, - 0x9d, 0xbc, 0x06, 0x1d, 0x22, 0xf8, 0x7e, 0xa7, 0x59, 0xd5, 0xf1, 0x62, 0x42, 0xf0, 0xe4, 0x7d, 0x71, 0x97, 0x55, - 0x75, 0x15, 0xbd, 0x4f, 0xd1, 0x10, 0x2a, 0x11, 0x45, 0xf4, 0x12, 0xe2, 0xe9, 0x55, 0xf8, 0xbb, 0x8a, 0x7e, 0x4a, - 0x69, 0x9c, 0xa6, 0x98, 0xfe, 0xbc, 0x84, 0x9f, 0xcf, 0x00, 0xd5, 0x11, 0x77, 0x42, 0x74, 0x21, 0xc0, 0x5e, 0x0d, - 0xa2, 0x59, 0xd5, 0x1c, 0x30, 0x34, 0xa3, 0xfb, 0x8a, 0x22, 0x46, 0x1b, 0x66, 0xff, 0xa1, 0x44, 0xa1, 0x90, 0x2c, - 0xe6, 0xd7, 0xca, 0x3c, 0x44, 0x3f, 0x62, 0x91, 0xa7, 0xef, 0x5e, 0xe9, 0x21, 0x8d, 0xee, 0x05, 0x55, 0x5b, 0x1b, - 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xad, 0xe9, 0x79, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, 0x4f, 0xbc, 0x7b, 0xf5, 0x4c, - 0x5a, 0x98, 0x3c, 0xcf, 0x40, 0x71, 0x70, 0xfa, 0xee, 0xd5, 0x6b, 0x91, 0xae, 0x73, 0x1e, 0x9d, 0x0b, 0x24, 0xad, - 0xa7, 0xef, 0x5e, 0xfd, 0x8c, 0xe6, 0x5e, 0x3f, 0x95, 0xf0, 0xfe, 0x25, 0xf0, 0x96, 0x51, 0xbc, 0x86, 0x3e, 0xc9, - 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd4, 0x5a, 0x45, 0xbf, 0xa4, 0x8d, 0x23, 0xad, 0xfa, 0x67, 0xe9, 0x52, 0x3b, 0x47, - 0xc0, 0x73, 0x97, 0x67, 0xc5, 0xc7, 0xc8, 0x88, 0x76, 0x82, 0xe8, 0xcb, 0x83, 0xbb, 0xeb, 0xbc, 0xa8, 0x22, 0x7c, - 0xc1, 0xd0, 0x2e, 0x28, 0x3a, 0x3c, 0xbc, 0xbd, 0xbd, 0x1d, 0xdd, 0x7e, 0x35, 0x12, 0xe5, 0xd5, 0xe1, 0xe4, 0xdb, - 0x6f, 0xbf, 0x3d, 0xc4, 0xb7, 0xc1, 0x97, 0x6d, 0xb7, 0xf7, 0x9a, 0xf0, 0x01, 0x0b, 0x10, 0xa1, 0xfa, 0x4b, 0xb8, - 0xa2, 0x80, 0x16, 0x6e, 0xf0, 0x65, 0xf0, 0xa5, 0x3a, 0x74, 0xbe, 0x3c, 0xae, 0x6e, 0xae, 0x64, 0xf9, 0x5d, 0x25, - 0x1f, 0x8d, 0xc7, 0xe3, 0x43, 0x90, 0x40, 0x7d, 0x39, 0xe0, 0x83, 0xe0, 0x24, 0x18, 0x64, 0x70, 0xa1, 0xa9, 0x6e, - 0xae, 0x4e, 0x02, 0xc7, 0x34, 0xd7, 0x63, 0x11, 0x2d, 0x88, 0x4b, 0x70, 0x78, 0x45, 0x83, 0x2f, 0x03, 0x62, 0x53, - 0xbe, 0x80, 0x94, 0x2f, 0x8e, 0x9e, 0xba, 0x69, 0xff, 0x4b, 0xa6, 0x7d, 0xe5, 0xa6, 0x1d, 0x63, 0xda, 0x57, 0xcf, - 0xdc, 0xb4, 0x13, 0x99, 0xf6, 0xc2, 0x4d, 0xfb, 0xdf, 0xd5, 0x00, 0x52, 0x0f, 0x5c, 0xeb, 0xbf, 0x0b, 0xa7, 0x35, - 0x78, 0x0a, 0x45, 0xd9, 0x75, 0x7c, 0xc5, 0xa1, 0xd1, 0x83, 0xbb, 0xeb, 0x9c, 0x06, 0x03, 0x6c, 0xaf, 0x63, 0xe4, - 0xe1, 0x7c, 0xf0, 0xe5, 0xba, 0xcc, 0xc3, 0xe0, 0xcb, 0x01, 0x16, 0x32, 0xf8, 0x32, 0x20, 0x5f, 0xaa, 0x23, 0xed, - 0xae, 0x62, 0x9b, 0xc0, 0x86, 0x22, 0x1d, 0x9a, 0x00, 0x61, 0xae, 0x34, 0xae, 0xa1, 0x7f, 0x96, 0xdd, 0xd9, 0xf0, - 0x96, 0x28, 0xdd, 0x74, 0x83, 0x86, 0xbe, 0x05, 0xef, 0x04, 0x68, 0x54, 0x14, 0xdc, 0xc4, 0x65, 0x38, 0x1c, 0x56, - 0x37, 0x57, 0x04, 0xec, 0x32, 0x57, 0x3c, 0xae, 0xa3, 0xa0, 0x10, 0x43, 0xf9, 0x33, 0x90, 0x91, 0xaf, 0x02, 0x04, - 0x44, 0x82, 0xff, 0x82, 0x86, 0xbe, 0x13, 0x6c, 0x13, 0x0c, 0x6f, 0xf9, 0xc5, 0xc7, 0xac, 0x1e, 0x4a, 0xd1, 0xe2, - 0x5d, 0x45, 0xe1, 0x07, 0xfc, 0xb5, 0x55, 0x47, 0x7f, 0x82, 0x1b, 0xb7, 0xaf, 0x61, 0x7f, 0x27, 0x2c, 0x8b, 0xfa, - 0x4e, 0xcc, 0xb3, 0xc5, 0xb4, 0x75, 0xa0, 0xbf, 0x15, 0xa4, 0x9e, 0x67, 0x83, 0x60, 0x18, 0x0c, 0xf8, 0x82, 0xbd, - 0x15, 0x73, 0xee, 0x98, 0x4f, 0x3d, 0x12, 0xee, 0x34, 0xcf, 0xb2, 0x01, 0xf8, 0xa6, 0x20, 0x3f, 0x72, 0xf8, 0xdf, - 0xf3, 0x21, 0x0a, 0x0f, 0x07, 0x8f, 0x0e, 0xc9, 0x2c, 0x58, 0xdd, 0xa1, 0x47, 0x67, 0x14, 0x64, 0xc5, 0x92, 0x97, - 0x59, 0xed, 0x2c, 0x95, 0xfb, 0x75, 0xdb, 0xcb, 0x63, 0xef, 0xd9, 0xbc, 0x8a, 0x8b, 0x40, 0x9e, 0x73, 0xa0, 0x78, - 0x43, 0xd9, 0x53, 0xe1, 0x4b, 0x48, 0x95, 0x21, 0x6f, 0x58, 0x0c, 0x58, 0x70, 0xdc, 0x1b, 0x0e, 0x0f, 0x82, 0x81, - 0x55, 0xe7, 0x0e, 0x82, 0x83, 0xe1, 0xf0, 0x24, 0xb0, 0xf7, 0xa1, 0x6c, 0x64, 0xef, 0x8c, 0xb4, 0x64, 0xff, 0x2c, - 0xc3, 0x82, 0x82, 0x78, 0x4c, 0x28, 0xf1, 0x97, 0x02, 0x97, 0x19, 0x00, 0xf4, 0x91, 0x94, 0x80, 0x69, 0x58, 0x99, - 0x01, 0x84, 0xe6, 0xa6, 0x31, 0x3b, 0x07, 0xe6, 0x91, 0x26, 0x20, 0xde, 0x03, 0x8a, 0x01, 0x88, 0x25, 0x01, 0xce, - 0x5d, 0x10, 0xc5, 0xaa, 0x90, 0x47, 0x00, 0x7a, 0x8f, 0x3f, 0x89, 0x2e, 0x05, 0x93, 0x54, 0xac, 0x42, 0x10, 0xc4, - 0xf1, 0xd9, 0x5d, 0xd5, 0x9a, 0x9c, 0x25, 0x3a, 0x98, 0x91, 0x04, 0xd8, 0x10, 0x0d, 0x3b, 0x07, 0xf7, 0x73, 0x50, - 0x7a, 0x18, 0xbd, 0x13, 0x72, 0xc1, 0xf7, 0xdc, 0xb2, 0x50, 0x77, 0x70, 0xf5, 0x84, 0x83, 0xe0, 0x9e, 0x2b, 0x16, - 0x60, 0x54, 0x97, 0xeb, 0xaa, 0xe6, 0xe9, 0x87, 0xfb, 0x15, 0xc4, 0xbe, 0xc3, 0x01, 0x7d, 0x27, 0xf2, 0x2c, 0xb9, - 0x0f, 0xad, 0x3d, 0xd7, 0x46, 0xa6, 0xff, 0xf0, 0xe1, 0xf5, 0x4f, 0x11, 0x88, 0x1c, 0x1b, 0x4d, 0xe9, 0xef, 0x39, - 0x9e, 0x4d, 0x6e, 0x84, 0x27, 0x77, 0x63, 0xdf, 0x73, 0x73, 0x7a, 0xf4, 0xfb, 0x50, 0x37, 0xbd, 0xe7, 0xb3, 0x7b, - 0x3e, 0xb2, 0xc5, 0xa1, 0xba, 0xc2, 0x7e, 0x7d, 0xbb, 0x76, 0x8d, 0x90, 0x1e, 0x9e, 0x67, 0xca, 0xbd, 0xf9, 0x51, - 0x0e, 0x86, 0x41, 0x30, 0x55, 0x42, 0x49, 0x88, 0xba, 0xc1, 0xa4, 0x80, 0x21, 0x3a, 0x50, 0xcb, 0x6a, 0x8a, 0x9c, - 0x9b, 0x1c, 0x59, 0x78, 0x3f, 0x60, 0x4a, 0xe8, 0xe0, 0xe5, 0x90, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc0, 0x6f, 0x15, - 0x30, 0xfd, 0x72, 0x51, 0x59, 0x07, 0xd1, 0x03, 0x30, 0xc6, 0x2d, 0x78, 0x09, 0x5d, 0x61, 0x37, 0x6b, 0x19, 0x15, - 0x03, 0xc1, 0xe3, 0x90, 0x03, 0x74, 0xb0, 0x0b, 0x5a, 0x56, 0x96, 0xf2, 0x56, 0x65, 0x2d, 0x55, 0xe4, 0x65, 0x28, - 0xab, 0x62, 0x89, 0xf9, 0x5e, 0xb0, 0x1f, 0x4a, 0xf4, 0x2c, 0x9f, 0x56, 0x5d, 0xf0, 0x42, 0x28, 0xc1, 0xb2, 0x5d, - 0xef, 0x44, 0x20, 0xea, 0x4c, 0x75, 0xae, 0xfa, 0x0a, 0xc7, 0x8e, 0xa7, 0xaf, 0x45, 0xca, 0x95, 0x09, 0x85, 0xe2, - 0xf3, 0x85, 0xab, 0x98, 0x28, 0xd9, 0x2d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd7, 0x6a, 0x33, 0x48, 0xd1, 0x31, - 0x6f, 0x50, 0x70, 0x2d, 0x15, 0x0a, 0x5a, 0x7b, 0x1b, 0x7f, 0x82, 0x23, 0x37, 0xba, 0x3d, 0xf4, 0x7e, 0xab, 0xe3, - 0xab, 0x37, 0xe8, 0xdb, 0x69, 0x7e, 0x8e, 0x6a, 0xf1, 0xcb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, 0xe0, 0xd2, - 0x42, 0x3d, 0x67, 0xef, 0x4e, 0xdf, 0x80, 0x1f, 0x25, 0xfe, 0xfe, 0xf5, 0xfb, 0xa0, 0x21, 0xd3, 0x78, 0x56, 0xea, - 0x0f, 0x4d, 0x0e, 0x08, 0x4d, 0x62, 0xd3, 0xcc, 0xfb, 0x59, 0xec, 0xb3, 0xef, 0x8a, 0xad, 0xa7, 0xa5, 0x8f, 0x24, - 0xa5, 0xb9, 0x7d, 0x30, 0x20, 0x50, 0x07, 0x88, 0xe4, 0xec, 0x4b, 0x1a, 0x43, 0x9a, 0xcb, 0xec, 0xbb, 0x11, 0xf1, - 0x5e, 0xec, 0x84, 0x10, 0xe3, 0x12, 0x8b, 0x46, 0x0d, 0xf9, 0x8c, 0x47, 0xd2, 0xb0, 0xe8, 0x3d, 0x26, 0x10, 0x6b, - 0x38, 0x2d, 0xdf, 0x23, 0xe6, 0x31, 0xde, 0x0d, 0x94, 0xec, 0x21, 0xca, 0xa8, 0xcd, 0xee, 0x59, 0x7c, 0x7f, 0x5c, - 0x87, 0x99, 0xb1, 0xbc, 0x1c, 0xc2, 0xdf, 0x40, 0x19, 0x80, 0x53, 0x8e, 0x2c, 0x5f, 0xad, 0x37, 0xba, 0x5c, 0x62, - 0x6a, 0x13, 0x41, 0x2c, 0x1e, 0x95, 0x0e, 0x6b, 0x57, 0xa5, 0xaa, 0x5d, 0x6d, 0x7d, 0x26, 0x7a, 0x35, 0x68, 0xe5, - 0xda, 0xf6, 0x78, 0x08, 0x77, 0xa9, 0xa4, 0x15, 0x26, 0xb0, 0x5e, 0x65, 0x15, 0x2a, 0xd8, 0x9c, 0x80, 0x06, 0xd7, - 0x22, 0x05, 0xe0, 0x2c, 0xa5, 0x46, 0xa3, 0x5a, 0xd8, 0x67, 0xe4, 0x7c, 0x16, 0x5b, 0x0b, 0xf1, 0xb4, 0x00, 0x0c, - 0xd7, 0xc7, 0xa0, 0xe4, 0xdd, 0x18, 0x94, 0xd3, 0x8f, 0x12, 0xde, 0x3a, 0x38, 0xaf, 0x96, 0x71, 0x2a, 0x6e, 0x01, - 0x8b, 0x31, 0x70, 0x53, 0xb1, 0x54, 0x27, 0x21, 0x59, 0xf2, 0xe4, 0x23, 0x5a, 0x6d, 0xa4, 0x01, 0x70, 0x95, 0x53, - 0x6d, 0xb9, 0x27, 0x41, 0x42, 0x6d, 0x29, 0x32, 0x21, 0xae, 0xeb, 0x38, 0x59, 0x9e, 0x61, 0x6a, 0xb8, 0x81, 0x5e, - 0x44, 0x81, 0x58, 0xf1, 0x02, 0x48, 0x7a, 0xce, 0xfe, 0x95, 0x29, 0xac, 0xf1, 0x67, 0x02, 0x05, 0x4c, 0x0a, 0x35, - 0x18, 0x2b, 0x65, 0x2f, 0x84, 0x8e, 0xf6, 0x16, 0x04, 0x8d, 0x7d, 0xf9, 0x27, 0xd4, 0xfd, 0x0c, 0x5a, 0x11, 0x7a, - 0x60, 0x88, 0xe2, 0x02, 0x77, 0x68, 0x6a, 0x96, 0x9c, 0x03, 0x8c, 0x58, 0x18, 0xef, 0xb3, 0xc6, 0x6c, 0xf5, 0x67, - 0x4b, 0xc0, 0x36, 0x4d, 0xb5, 0x4f, 0x61, 0x98, 0x10, 0x1d, 0x1b, 0xd8, 0x28, 0x2b, 0xcd, 0x86, 0xd2, 0xed, 0xa4, - 0x4b, 0xe6, 0xb4, 0x70, 0x9a, 0xf7, 0x18, 0x5b, 0x8e, 0x64, 0xee, 0x7e, 0x3f, 0xd4, 0x3f, 0x59, 0x4e, 0x9f, 0xa9, - 0x90, 0xcd, 0xce, 0x78, 0xd0, 0x9c, 0x28, 0x75, 0x55, 0x47, 0x3f, 0xa0, 0x03, 0x30, 0xd3, 0x06, 0x20, 0xd3, 0x06, - 0x9b, 0x76, 0x95, 0xa8, 0xb8, 0x24, 0x61, 0xa9, 0x24, 0xb0, 0xb3, 0x7d, 0xc9, 0xce, 0x26, 0x20, 0x8e, 0xe1, 0xae, - 0xa3, 0xc5, 0x4e, 0x88, 0x0f, 0x6f, 0x71, 0x90, 0x80, 0xa8, 0x43, 0x56, 0x97, 0x90, 0x8d, 0x36, 0x74, 0x71, 0x2f, - 0x4a, 0x61, 0xc2, 0x5a, 0x26, 0x55, 0x89, 0x0e, 0x82, 0x54, 0xed, 0xb6, 0x08, 0x2c, 0x51, 0xb0, 0x03, 0xd8, 0x7b, - 0x3b, 0xea, 0x7a, 0xd4, 0x64, 0x75, 0xf2, 0x25, 0xf8, 0x38, 0xcd, 0xba, 0x0a, 0xd2, 0x0b, 0xbb, 0x2e, 0xd7, 0x3c, - 0x50, 0xb1, 0xa9, 0xa4, 0x31, 0x71, 0x97, 0x16, 0x19, 0xe2, 0x01, 0x63, 0x2c, 0x5d, 0x08, 0xe4, 0x9b, 0xed, 0x8e, - 0x9b, 0x9a, 0x20, 0xf4, 0x13, 0xd6, 0x94, 0xc0, 0x4e, 0x67, 0x7b, 0x6a, 0xfc, 0x7c, 0x40, 0xc4, 0x61, 0x40, 0x81, - 0x64, 0xe3, 0x90, 0xe6, 0x48, 0x5f, 0x90, 0x34, 0x61, 0x60, 0x68, 0xc9, 0x73, 0x82, 0xac, 0x28, 0x74, 0x6c, 0x5d, - 0x95, 0x71, 0xae, 0x08, 0x73, 0xb4, 0xe4, 0x94, 0xf8, 0x9c, 0x20, 0x13, 0xdb, 0xd3, 0x36, 0x3d, 0x19, 0x96, 0x92, - 0x05, 0xfa, 0x57, 0x10, 0x25, 0xf6, 0x4c, 0x33, 0x2a, 0x07, 0xed, 0x02, 0x16, 0x28, 0xe5, 0x7b, 0xd0, 0x78, 0x6b, - 0x68, 0xa3, 0x60, 0x88, 0xed, 0xfe, 0x04, 0xfb, 0xb5, 0x76, 0x5a, 0x97, 0x29, 0x96, 0x93, 0x29, 0x44, 0x7b, 0x21, - 0xfd, 0x1b, 0x45, 0xa2, 0x3b, 0x45, 0x68, 0x12, 0xd6, 0x51, 0xf6, 0xa4, 0x4d, 0x0d, 0xa0, 0xa7, 0x4e, 0xc0, 0xf3, - 0xce, 0xb5, 0x0c, 0xbb, 0x48, 0xf5, 0x57, 0x06, 0x9f, 0x52, 0x0d, 0x82, 0x14, 0xb5, 0x49, 0xc1, 0x9c, 0xd7, 0xa1, - 0xa4, 0xce, 0x9c, 0xb6, 0xcc, 0xa8, 0x3a, 0x2a, 0x42, 0xca, 0x09, 0xfe, 0x93, 0x57, 0x42, 0x11, 0x9b, 0x30, 0xc1, - 0x03, 0x1f, 0xe6, 0x19, 0x36, 0xf0, 0x76, 0xfb, 0x2e, 0x0d, 0x93, 0x36, 0xdb, 0x90, 0x82, 0xb4, 0x42, 0xc7, 0xc5, - 0x80, 0xca, 0x5e, 0xe1, 0x7e, 0xc1, 0x76, 0xd2, 0x14, 0x3c, 0x08, 0xbd, 0x06, 0x26, 0x76, 0x75, 0xf1, 0x75, 0x98, - 0xd0, 0x70, 0x49, 0x95, 0xb3, 0x93, 0x92, 0x34, 0xb7, 0xd7, 0xe5, 0xa5, 0xe9, 0x83, 0x8a, 0x1d, 0xd6, 0x35, 0x3c, - 0xd0, 0x3c, 0xbf, 0x8b, 0x2b, 0xa6, 0x68, 0xa2, 0xb6, 0x1e, 0x92, 0x96, 0x1c, 0xeb, 0x66, 0xba, 0xc2, 0xd5, 0x32, - 0x53, 0xc0, 0xee, 0x02, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x89, 0xcd, 0x66, 0xab, 0x86, 0x4c, 0xf3, - 0x7d, 0xd9, 0x72, 0x1d, 0x10, 0xce, 0x50, 0xdf, 0xdc, 0x25, 0xc7, 0x8a, 0xb6, 0xb9, 0x49, 0x80, 0xe3, 0xed, 0x14, - 0x90, 0x74, 0x2c, 0x41, 0x1b, 0xdf, 0xd2, 0x1d, 0x44, 0xaa, 0xa7, 0x82, 0xee, 0x9d, 0x2f, 0xd2, 0xf8, 0x5f, 0x80, - 0x6d, 0xd4, 0x46, 0x9b, 0x66, 0x65, 0xeb, 0x30, 0x91, 0x16, 0xd6, 0xc8, 0x42, 0x2e, 0xc1, 0x07, 0x73, 0xb7, 0xa9, - 0xd3, 0xd3, 0x0e, 0x22, 0xec, 0x76, 0xd1, 0xe1, 0x11, 0xc6, 0x92, 0x35, 0x48, 0x34, 0xab, 0xb0, 0xa6, 0xfe, 0x72, - 0x88, 0x72, 0xaa, 0x97, 0x4c, 0xb4, 0xa4, 0x2e, 0xa5, 0x88, 0x52, 0x30, 0x37, 0x9e, 0x16, 0x9e, 0x29, 0x21, 0x42, - 0x56, 0x08, 0x0b, 0x54, 0x6b, 0xa0, 0xa5, 0x7c, 0xd0, 0xeb, 0xd0, 0xc9, 0x42, 0x63, 0x0a, 0xa2, 0x8f, 0x48, 0x73, - 0x23, 0x96, 0x8c, 0xee, 0x8e, 0x51, 0x4c, 0x20, 0x54, 0xb5, 0x93, 0x17, 0x56, 0x9f, 0x92, 0x6d, 0x75, 0x10, 0xd7, - 0x98, 0x26, 0x7b, 0x08, 0x6a, 0x8c, 0x82, 0x36, 0xab, 0x1b, 0xfd, 0xa5, 0x0c, 0x5d, 0xbb, 0x70, 0xec, 0x46, 0x49, - 0x04, 0x44, 0x60, 0x75, 0x9a, 0x8a, 0x01, 0x59, 0xe7, 0xb1, 0x8d, 0xd0, 0xa4, 0xba, 0x85, 0x28, 0x6f, 0x54, 0x34, - 0x1f, 0xd7, 0x21, 0xd9, 0x6e, 0xb1, 0x2c, 0xf0, 0x65, 0x3f, 0x5b, 0xef, 0x81, 0xfc, 0x7e, 0xbd, 0xfe, 0x24, 0xe4, - 0xf7, 0xab, 0xec, 0x73, 0x20, 0xbf, 0x5f, 0xaf, 0xff, 0xa7, 0x21, 0xbf, 0xcf, 0xd6, 0x0e, 0xe4, 0xb7, 0x1c, 0x8c, - 0xdf, 0x4a, 0x16, 0xbc, 0x7d, 0x13, 0xd0, 0xe7, 0x82, 0x05, 0x6f, 0x5f, 0xbe, 0x74, 0x84, 0xe9, 0xdf, 0xe9, 0x38, - 0x2f, 0x5a, 0x16, 0x8c, 0xb8, 0x2d, 0xf0, 0x0a, 0xb5, 0x4e, 0x2e, 0x50, 0x51, 0x06, 0xc0, 0xeb, 0xd5, 0x3f, 0xb2, - 0x7a, 0x19, 0x06, 0x87, 0x01, 0x99, 0x59, 0x48, 0xd0, 0xe1, 0x04, 0x6e, 0x6f, 0x68, 0x64, 0x59, 0x7f, 0x16, 0x7c, - 0xf8, 0x68, 0x34, 0x8a, 0xcb, 0x2b, 0xbc, 0xd4, 0xe9, 0x8d, 0x84, 0x80, 0xc7, 0x19, 0xaf, 0x4c, 0x88, 0x88, 0x65, - 0x5c, 0x9d, 0xab, 0xd8, 0x2c, 0x95, 0xd9, 0x8a, 0x10, 0x71, 0xfe, 0x1c, 0x70, 0xea, 0xcd, 0xde, 0x8c, 0xb1, 0x1f, - 0x92, 0x23, 0x56, 0x01, 0x64, 0x9f, 0xad, 0xd5, 0xbb, 0x8b, 0xb8, 0xe2, 0xef, 0xe2, 0x7a, 0xc9, 0xa0, 0x97, 0x70, - 0x17, 0x29, 0x78, 0x52, 0x3b, 0x6c, 0x93, 0x04, 0x2a, 0xcf, 0x14, 0x50, 0x79, 0xc7, 0x7b, 0x1a, 0x9a, 0x61, 0x51, - 0x3e, 0xc0, 0x5a, 0xba, 0x9c, 0x81, 0xd1, 0xe2, 0x8b, 0x1b, 0x5e, 0xd4, 0x3f, 0x01, 0x9e, 0x7a, 0xc1, 0x4b, 0xb8, - 0x25, 0x20, 0x17, 0xeb, 0x39, 0x21, 0xd0, 0xca, 0xf5, 0xec, 0x90, 0x51, 0x63, 0xb4, 0x68, 0xc2, 0xeb, 0x37, 0xde, - 0x84, 0xd0, 0xbb, 0x13, 0x74, 0x45, 0x18, 0x09, 0xef, 0xcf, 0x35, 0x3f, 0xcf, 0xc0, 0x7c, 0xbe, 0x02, 0x28, 0x0d, - 0x84, 0x43, 0x65, 0x52, 0x6e, 0x81, 0x09, 0x1b, 0x6d, 0xae, 0x94, 0xa5, 0x0e, 0x52, 0x29, 0x95, 0x70, 0xba, 0x15, - 0x4d, 0x05, 0xe0, 0x70, 0x47, 0x02, 0xc0, 0x4c, 0x4d, 0x61, 0x10, 0xdd, 0x36, 0xa5, 0x59, 0x1a, 0x59, 0x45, 0x9a, - 0xc5, 0x27, 0xa5, 0x12, 0x74, 0xfa, 0x3c, 0x89, 0x6b, 0x7e, 0x25, 0x4a, 0x08, 0x85, 0xdb, 0x4a, 0x69, 0x0c, 0x16, - 0x80, 0x3c, 0xee, 0xac, 0xcd, 0xd6, 0xac, 0x94, 0x29, 0xe7, 0xc5, 0xfa, 0x9a, 0x97, 0x59, 0x72, 0xbe, 0xcc, 0xaa, - 0x5a, 0x94, 0xf7, 0x6c, 0xae, 0xb2, 0x2e, 0xa2, 0x6a, 0xa4, 0x24, 0x5e, 0xe7, 0x35, 0xbf, 0x5e, 0x41, 0xe8, 0x87, - 0x75, 0x09, 0xac, 0xe7, 0xde, 0x2f, 0x65, 0x64, 0xd2, 0xb0, 0xf3, 0x3b, 0xb2, 0x00, 0xbd, 0x2b, 0xac, 0x11, 0xb9, - 0x00, 0x98, 0x5e, 0x33, 0xa7, 0x92, 0xaa, 0x94, 0xfe, 0x6b, 0x8d, 0x33, 0xef, 0x2f, 0xaa, 0x71, 0x6b, 0xed, 0x19, - 0xad, 0xad, 0x9f, 0x2a, 0xe1, 0x94, 0x80, 0x12, 0xb1, 0x13, 0x5c, 0x31, 0x29, 0x5d, 0x1b, 0xb4, 0x16, 0xb0, 0xac, - 0xc0, 0x1c, 0x59, 0x71, 0x75, 0x7e, 0x2b, 0x65, 0x35, 0x3d, 0x49, 0xcd, 0xd2, 0x28, 0x96, 0x28, 0x42, 0x4b, 0x16, - 0xae, 0x59, 0xb2, 0x27, 0xd7, 0x3a, 0x4a, 0x3c, 0x3c, 0xb0, 0xb8, 0x3d, 0xe8, 0xc7, 0x49, 0x3b, 0x65, 0xbb, 0xdd, - 0xc9, 0x04, 0x6c, 0x48, 0x2b, 0x09, 0x22, 0x83, 0x2c, 0x67, 0xc3, 0x49, 0x04, 0x70, 0x2d, 0x8a, 0x84, 0xfe, 0xb9, - 0xe6, 0x1a, 0xd0, 0x3e, 0x54, 0x5e, 0x85, 0x72, 0x15, 0xcd, 0xc1, 0xce, 0xcb, 0xed, 0x35, 0x04, 0x96, 0xe9, 0x9c, - 0x97, 0xc5, 0xfe, 0x35, 0xa0, 0xcc, 0x91, 0xd5, 0x0b, 0xb2, 0x6f, 0xc6, 0x55, 0xb6, 0x07, 0xa7, 0xb7, 0x35, 0x07, - 0x7b, 0x5b, 0xa3, 0x50, 0x7a, 0x13, 0x1e, 0x0e, 0x9f, 0x8e, 0x8d, 0x3f, 0x03, 0xae, 0x72, 0xf3, 0x5b, 0xee, 0x04, - 0xfb, 0x6c, 0x76, 0x03, 0xf5, 0x5d, 0x22, 0xda, 0x35, 0xd2, 0x6a, 0xcf, 0xb8, 0x35, 0xa4, 0xb1, 0x2b, 0xcd, 0x88, - 0xb9, 0x7e, 0x97, 0x47, 0xeb, 0xf9, 0xa3, 0x4d, 0xa6, 0xaa, 0x6c, 0x7e, 0xcf, 0x4c, 0x50, 0x3c, 0x8f, 0x4c, 0x35, - 0x6a, 0x0d, 0xba, 0x98, 0x74, 0x1d, 0xd9, 0xd4, 0x8c, 0xb2, 0xac, 0x93, 0xd6, 0x8d, 0xe4, 0x23, 0x97, 0x31, 0xc2, - 0xba, 0xb3, 0xf0, 0x3b, 0x9e, 0x84, 0x5d, 0x0d, 0x93, 0xd7, 0x10, 0xdd, 0x05, 0x84, 0xe9, 0x04, 0xe5, 0x43, 0xf8, - 0xfb, 0xa3, 0x8d, 0x4f, 0x3b, 0x9b, 0x43, 0xe7, 0x33, 0xfc, 0x9d, 0xa5, 0xf0, 0xb7, 0x6e, 0x7e, 0xa7, 0x9b, 0x6b, - 0x5e, 0x2f, 0x45, 0x1a, 0x05, 0xef, 0xde, 0x9e, 0x7d, 0x08, 0x14, 0xfc, 0x3b, 0x5e, 0x82, 0xb4, 0xda, 0x5b, 0x03, - 0x4d, 0x81, 0x1a, 0x28, 0x17, 0x57, 0x88, 0x80, 0xa8, 0x20, 0xf4, 0xcf, 0x96, 0xe2, 0xf6, 0x34, 0xcf, 0x5d, 0x4e, - 0x5d, 0x53, 0x77, 0xc5, 0xbc, 0x7a, 0xa4, 0x31, 0x04, 0x81, 0xe3, 0x28, 0xab, 0xce, 0x95, 0x8a, 0x28, 0x3d, 0xbf, - 0xb8, 0x3f, 0x57, 0x62, 0x28, 0x03, 0x41, 0xf9, 0xec, 0xf7, 0xe3, 0x34, 0xbb, 0x39, 0xc0, 0x23, 0x88, 0x05, 0x60, - 0xbf, 0x9f, 0xf3, 0x8b, 0x75, 0x5d, 0x8b, 0x62, 0x58, 0x8a, 0xdb, 0xe0, 0xe4, 0x58, 0x3e, 0xe8, 0x0c, 0xb1, 0x7c, - 0x0c, 0x0e, 0xfe, 0x2b, 0xc9, 0xb3, 0xe4, 0x23, 0x0b, 0x1e, 0x6d, 0x32, 0x76, 0xd2, 0x3a, 0x68, 0xc6, 0x4d, 0x70, - 0x02, 0x6d, 0x3d, 0x38, 0xcd, 0xf3, 0xe3, 0x43, 0xf9, 0xc5, 0xc9, 0xf1, 0x61, 0x9a, 0xdd, 0x9c, 0x38, 0xd1, 0x00, - 0xac, 0x71, 0x2f, 0xe2, 0xae, 0xd9, 0xcb, 0x3b, 0x78, 0xf1, 0x26, 0x3c, 0x34, 0xec, 0x0e, 0x88, 0x8c, 0x74, 0x2c, - 0x15, 0x14, 0x33, 0x85, 0x31, 0x1c, 0xee, 0xdb, 0x6d, 0x68, 0x2c, 0x8f, 0x12, 0x07, 0x96, 0xa7, 0x04, 0x76, 0x08, - 0xb3, 0xd0, 0x84, 0xd0, 0xa4, 0x21, 0xa1, 0x06, 0x0f, 0x8a, 0x09, 0x2d, 0x1b, 0x0a, 0xe7, 0xdd, 0xeb, 0x78, 0xa5, - 0x25, 0x6d, 0x4a, 0x72, 0xa1, 0x5b, 0x3f, 0xf3, 0xc6, 0x31, 0x6a, 0x8f, 0xaa, 0x86, 0xf3, 0xea, 0x15, 0xfb, 0x06, - 0x16, 0x84, 0xab, 0x61, 0x4d, 0x83, 0x16, 0x69, 0x01, 0xe1, 0xa8, 0x2b, 0xd3, 0xe3, 0x34, 0x9c, 0x17, 0x54, 0x2c, - 0x08, 0x3b, 0x09, 0x37, 0xc8, 0xdb, 0x17, 0x54, 0xb2, 0xfa, 0xa2, 0xb1, 0xd8, 0x9a, 0x72, 0x76, 0x4e, 0x1e, 0x6d, - 0x64, 0xcc, 0xde, 0x82, 0x9d, 0xf8, 0xf3, 0x55, 0xc7, 0x17, 0xc3, 0x25, 0x07, 0x27, 0xa0, 0xe0, 0xe0, 0xbf, 0xd2, - 0x8b, 0xdc, 0x4c, 0x8a, 0x5c, 0x91, 0xcb, 0xb8, 0x48, 0x73, 0xfe, 0x21, 0xbe, 0xf8, 0x01, 0xf3, 0x3c, 0xbf, 0xc8, - 0x9f, 0x41, 0x86, 0x26, 0x38, 0x79, 0xb4, 0x49, 0xea, 0xd1, 0x8b, 0x37, 0x1f, 0x5e, 0x7d, 0xf8, 0xe7, 0xf9, 0xb3, - 0xd3, 0x0f, 0x2f, 0xbe, 0x7f, 0xfb, 0xfe, 0xd5, 0x8b, 0xb3, 0xb9, 0xf1, 0xba, 0x95, 0x60, 0x6e, 0x64, 0xb1, 0xdd, - 0xda, 0x7c, 0xbf, 0xbc, 0x79, 0xfe, 0xe2, 0xe5, 0xab, 0x37, 0x2f, 0x9e, 0x37, 0x72, 0x2e, 0xdb, 0x0d, 0x81, 0x1d, - 0x1a, 0x67, 0x05, 0x2f, 0xa1, 0x78, 0x75, 0xbb, 0xc3, 0x66, 0x2b, 0x0c, 0x42, 0xbf, 0xe9, 0x2a, 0x5c, 0x03, 0x2c, - 0xb2, 0x03, 0xb5, 0x59, 0xa0, 0xe1, 0x42, 0x6f, 0x1c, 0x77, 0x89, 0xb9, 0xbd, 0x79, 0x81, 0xdf, 0xbd, 0x17, 0xb7, - 0xba, 0x2b, 0x6a, 0x84, 0x24, 0xbc, 0xd8, 0xec, 0xd9, 0xef, 0xc7, 0xae, 0x48, 0x0f, 0xe5, 0x1e, 0xb2, 0x5c, 0xf8, - 0xd5, 0x04, 0x07, 0xca, 0xbc, 0x30, 0x80, 0xe8, 0x18, 0xc1, 0xc9, 0xf1, 0xa1, 0x9b, 0xfb, 0xe4, 0xf7, 0xe8, 0x27, - 0xa7, 0x73, 0x58, 0x2a, 0x8c, 0x83, 0x9f, 0xb6, 0x73, 0x2c, 0x02, 0x7d, 0xb6, 0x07, 0xa7, 0x5c, 0x41, 0x9a, 0x5c, - 0x09, 0x12, 0x99, 0x49, 0x94, 0x66, 0x33, 0xba, 0xb4, 0xdf, 0xd5, 0x5f, 0xdb, 0x67, 0x14, 0x43, 0xf0, 0xa2, 0x12, - 0x25, 0xd8, 0xb8, 0x38, 0x89, 0x49, 0x0e, 0x82, 0x0f, 0x1e, 0x40, 0xef, 0xda, 0xa1, 0x2e, 0x0e, 0x9c, 0x90, 0x32, - 0xd8, 0xcf, 0x4e, 0xa2, 0x0f, 0xe3, 0x74, 0xd8, 0xfe, 0xd4, 0xe9, 0xee, 0xef, 0xc4, 0xfe, 0x38, 0x50, 0x5d, 0x6c, - 0x11, 0x1d, 0xd3, 0xec, 0xfd, 0x21, 0x49, 0xe6, 0x6f, 0xff, 0x4f, 0x73, 0x4f, 0xbb, 0xdd, 0xb6, 0x71, 0xe5, 0xff, - 0x3e, 0x05, 0x0c, 0xbb, 0x0e, 0x60, 0x03, 0x10, 0x40, 0x8a, 0x92, 0x4c, 0x8a, 0x52, 0x13, 0xdb, 0x39, 0x51, 0xaa, - 0xd4, 0x39, 0x8e, 0xea, 0x6d, 0xa3, 0xe8, 0x98, 0x43, 0x70, 0x48, 0xa2, 0x02, 0x01, 0x1e, 0x00, 0x94, 0xa8, 0xd0, - 0xe8, 0x53, 0xec, 0xff, 0xed, 0x73, 0xec, 0xfe, 0xeb, 0x13, 0xed, 0x23, 0xec, 0xb9, 0x77, 0x3e, 0x30, 0xf8, 0x22, - 0xa9, 0xc4, 0x69, 0xf7, 0xa4, 0xaa, 0x89, 0xc1, 0xcc, 0x60, 0xe6, 0xce, 0xcc, 0x9d, 0xfb, 0x7d, 0x03, 0xeb, 0x3f, - 0x62, 0x6b, 0x46, 0xac, 0x05, 0xb1, 0x6e, 0xd3, 0x9b, 0xbc, 0x71, 0xcd, 0x64, 0xba, 0x1b, 0x4c, 0x89, 0x68, 0x18, - 0x10, 0x37, 0x83, 0x73, 0x33, 0x9c, 0xc6, 0x0f, 0xc4, 0x05, 0x77, 0x45, 0x92, 0x19, 0x15, 0x89, 0x66, 0xc4, 0xdb, - 0x8c, 0x43, 0xc6, 0x2c, 0xc1, 0xcb, 0x30, 0xe8, 0xe3, 0xba, 0xa1, 0x6a, 0x37, 0x02, 0xc2, 0x18, 0x43, 0xf3, 0x09, - 0xb7, 0xac, 0x08, 0x1c, 0x3f, 0x4b, 0xc2, 0x3f, 0xd2, 0x07, 0x20, 0x5e, 0xd3, 0x2c, 0x5e, 0x02, 0xcb, 0x42, 0x66, - 0x5c, 0x04, 0x65, 0x19, 0xe9, 0x7e, 0x1f, 0x84, 0x64, 0x59, 0xb8, 0xe9, 0x81, 0xee, 0x75, 0xb2, 0x78, 0x36, 0x0b, - 0xa9, 0xa1, 0x8b, 0x1c, 0x2a, 0xba, 0x25, 0x3f, 0x73, 0xfe, 0xc4, 0x15, 0x81, 0x4b, 0xcd, 0xbc, 0xed, 0xf0, 0x0a, - 0xe8, 0x51, 0x19, 0xd9, 0x8f, 0x11, 0xf0, 0x28, 0xa2, 0xbe, 0x43, 0x2d, 0x0f, 0x5f, 0xe3, 0x02, 0x39, 0xd8, 0x93, - 0x78, 0x35, 0x0e, 0xa9, 0x8d, 0x07, 0x0a, 0x3e, 0xb9, 0x19, 0xaf, 0xc6, 0x63, 0x48, 0x56, 0xf3, 0xc4, 0xb5, 0x20, - 0xfc, 0x4e, 0x9c, 0x22, 0x5b, 0x9c, 0x9b, 0x03, 0x80, 0xa2, 0x93, 0x95, 0x87, 0xcf, 0xb2, 0x77, 0x82, 0xc4, 0x8b, - 0x7d, 0x20, 0x03, 0x16, 0xb8, 0x01, 0x2f, 0x0c, 0xf5, 0x1f, 0x60, 0x7f, 0xa7, 0xfa, 0xa0, 0x09, 0xb9, 0x0c, 0xaf, - 0xf5, 0x1f, 0x70, 0xb1, 0x30, 0x89, 0xf3, 0x6b, 0x76, 0x3e, 0x74, 0x4b, 0x67, 0xba, 0xff, 0x15, 0xa6, 0x73, 0x00, - 0xd9, 0xf7, 0x9b, 0x80, 0xcc, 0xa2, 0x38, 0xcd, 0x02, 0x5f, 0xbf, 0x19, 0x5c, 0x04, 0xc6, 0xf5, 0x22, 0x33, 0xcc, - 0x1b, 0xcb, 0xcf, 0xd4, 0x4c, 0x30, 0x02, 0x25, 0x63, 0x22, 0x98, 0xb6, 0x4a, 0xea, 0x19, 0xdd, 0x5a, 0x51, 0x20, - 0x7f, 0xac, 0xe4, 0x67, 0x43, 0xa8, 0x57, 0x49, 0x2b, 0x83, 0xf9, 0xb1, 0x74, 0x6c, 0x69, 0x0e, 0x18, 0xc3, 0xf6, - 0x7a, 0xb5, 0x41, 0x62, 0x21, 0x2b, 0xee, 0x63, 0x0c, 0x85, 0x2c, 0xfc, 0x87, 0xd8, 0xf3, 0x13, 0xd5, 0xf6, 0xb5, - 0x74, 0xb3, 0x8f, 0xbe, 0x2c, 0x53, 0x1e, 0x40, 0x21, 0x80, 0xe1, 0x49, 0x14, 0x67, 0x1a, 0xc4, 0xf7, 0x81, 0x2f, - 0x8e, 0xaa, 0xb6, 0x72, 0xbc, 0x57, 0xc3, 0xcc, 0x39, 0xba, 0xf9, 0x0a, 0xaf, 0x57, 0x83, 0x47, 0x79, 0x2b, 0x05, - 0xf2, 0x60, 0x3c, 0x53, 0x0a, 0x0b, 0x98, 0xc5, 0x97, 0xf1, 0x7d, 0x55, 0x1d, 0xf4, 0x7a, 0xb4, 0xfb, 0x76, 0x37, - 0x04, 0x05, 0x2f, 0x92, 0x1b, 0x1a, 0x3c, 0x3f, 0xab, 0x20, 0xa5, 0x2a, 0xa7, 0x0a, 0xed, 0x5f, 0x04, 0x95, 0x94, - 0x81, 0xb9, 0x1c, 0xde, 0x36, 0x80, 0xf4, 0x38, 0x21, 0x30, 0xca, 0x91, 0x6c, 0x95, 0xc9, 0x9f, 0x84, 0xc3, 0x4b, - 0x79, 0xdc, 0xe9, 0x10, 0xa5, 0xb2, 0xf3, 0x60, 0x36, 0xd7, 0xcf, 0x33, 0xbe, 0x23, 0x55, 0x7a, 0xf7, 0x23, 0xbc, - 0xea, 0x37, 0xbd, 0x81, 0x84, 0x54, 0x0d, 0xf5, 0xc3, 0xf8, 0x1e, 0xbc, 0xd9, 0x8b, 0x5e, 0x39, 0x35, 0xdd, 0xda, - 0xb9, 0xf9, 0x52, 0xd6, 0x80, 0xac, 0xe2, 0x66, 0x7f, 0x4b, 0x83, 0xf6, 0x6f, 0x56, 0x7b, 0xb1, 0xe2, 0x47, 0x8d, - 0xc1, 0xfe, 0x2c, 0x63, 0xa8, 0xf4, 0x32, 0x88, 0x86, 0xd1, 0x99, 0x2c, 0x5a, 0x90, 0x35, 0x36, 0x30, 0xcf, 0xeb, - 0x45, 0xfd, 0xc8, 0x8a, 0x87, 0xf1, 0x9e, 0x75, 0x63, 0x6e, 0x78, 0x4c, 0xcf, 0x47, 0x29, 0xcd, 0xce, 0x1b, 0xc6, - 0x02, 0x1b, 0x61, 0xf8, 0x6c, 0x13, 0xe5, 0xa3, 0x7e, 0x4b, 0x15, 0xf6, 0xd6, 0x22, 0xbb, 0x3b, 0x89, 0xb7, 0x76, - 0x12, 0xe7, 0xa3, 0xc7, 0x6c, 0x73, 0x9f, 0xef, 0xf2, 0x70, 0xe0, 0x37, 0x61, 0xfa, 0xb0, 0x71, 0xcf, 0x43, 0x30, - 0xda, 0xd2, 0x6e, 0x4f, 0x70, 0xb7, 0xff, 0xef, 0x7f, 0xfd, 0xe7, 0x7f, 0x17, 0x64, 0xef, 0x38, 0x39, 0x3b, 0xc5, - 0x8c, 0x64, 0x40, 0xc5, 0xe5, 0xa7, 0x07, 0xec, 0x37, 0x16, 0xff, 0x8b, 0x46, 0x45, 0xc4, 0xa8, 0xfe, 0x47, 0x3d, - 0x83, 0x22, 0x8b, 0xbb, 0xc8, 0xa1, 0xae, 0x90, 0xe0, 0x40, 0x43, 0x45, 0xcb, 0x55, 0x86, 0x51, 0xbf, 0x61, 0x1c, - 0x34, 0xd7, 0x35, 0x8c, 0x22, 0x0c, 0xb4, 0x58, 0xc1, 0x0c, 0xe6, 0xba, 0x16, 0x4c, 0xea, 0x65, 0x9c, 0xc9, 0x05, - 0x62, 0x04, 0xa9, 0x38, 0x94, 0x99, 0xc3, 0x63, 0xc2, 0xa7, 0xe3, 0x5b, 0x45, 0xca, 0x0c, 0xc3, 0x47, 0xdd, 0x72, - 0xc3, 0xfd, 0xec, 0xb3, 0x7e, 0x06, 0xfb, 0x4e, 0x73, 0x04, 0xf0, 0x3d, 0x87, 0xed, 0x33, 0x7c, 0xb6, 0x21, 0xc0, - 0xaf, 0xe5, 0x3a, 0x4c, 0xb4, 0xf0, 0x19, 0x2c, 0xa6, 0x07, 0x88, 0x9d, 0x95, 0x6b, 0x68, 0x34, 0x34, 0xe4, 0xa6, - 0x41, 0xcb, 0x24, 0x58, 0x90, 0xe4, 0x81, 0x59, 0x12, 0x59, 0xaa, 0xb9, 0x91, 0xa9, 0x6b, 0x8c, 0x7a, 0x63, 0xf3, - 0x65, 0x84, 0x9c, 0xae, 0xfd, 0x41, 0x96, 0x51, 0x3e, 0x39, 0x81, 0xbe, 0x74, 0xf8, 0xd6, 0x47, 0xfd, 0x25, 0x75, - 0x26, 0x34, 0x23, 0x41, 0xc8, 0x9a, 0x0c, 0x8c, 0xa8, 0x65, 0x36, 0x51, 0x79, 0x36, 0x69, 0x19, 0x65, 0xe3, 0x64, - 0x18, 0x05, 0xc7, 0xc6, 0x8d, 0x33, 0x43, 0x14, 0xda, 0xbc, 0x80, 0xec, 0x9d, 0xb2, 0x97, 0x00, 0xf8, 0x49, 0x7d, - 0x17, 0xe5, 0xed, 0x4b, 0xd4, 0x50, 0xfb, 0xb7, 0x59, 0x36, 0x0a, 0xcb, 0x96, 0xc2, 0xb2, 0xd1, 0xc8, 0x8f, 0x27, - 0xf4, 0xcf, 0xef, 0x2f, 0x64, 0xa6, 0x3f, 0x10, 0x5a, 0x8f, 0xf8, 0x25, 0x12, 0x21, 0x37, 0x91, 0x20, 0x27, 0xc1, - 0x72, 0xf2, 0x69, 0x72, 0xab, 0x25, 0xb9, 0xae, 0x9d, 0xb3, 0x49, 0xd3, 0x09, 0x9b, 0xc9, 0x30, 0xc6, 0x56, 0x49, - 0x7e, 0x7a, 0xc0, 0x6a, 0x33, 0x2a, 0x97, 0x55, 0x02, 0xf8, 0x25, 0x30, 0xeb, 0x02, 0x7c, 0x90, 0x94, 0x78, 0xe8, - 0x15, 0xe2, 0x05, 0x67, 0x81, 0xaa, 0x41, 0xef, 0xbc, 0xcc, 0xb8, 0x60, 0x2b, 0xbd, 0x38, 0xd4, 0x31, 0x04, 0x26, - 0x12, 0xe7, 0x5a, 0xab, 0x9c, 0x9c, 0xa2, 0x13, 0x21, 0xf2, 0xe9, 0xf3, 0x0e, 0x1e, 0x75, 0xa4, 0x00, 0x6b, 0x43, - 0x29, 0xc9, 0x75, 0x6d, 0xc1, 0x19, 0x25, 0x1e, 0x01, 0x0d, 0xc2, 0xa3, 0xb8, 0x70, 0xcf, 0xea, 0xda, 0x82, 0xac, - 0x71, 0xe6, 0xe2, 0x0d, 0x59, 0x1b, 0x1e, 0x7f, 0x55, 0x9c, 0xc9, 0xa8, 0xbc, 0xe0, 0x02, 0xc5, 0x80, 0xef, 0x93, - 0x14, 0xd0, 0xcd, 0xd1, 0xa6, 0xa4, 0x61, 0x71, 0xe7, 0x62, 0x71, 0x27, 0x2d, 0x8b, 0x3b, 0xd9, 0xb2, 0xb8, 0x21, - 0x5f, 0x48, 0x4d, 0x82, 0x2e, 0x41, 0x7f, 0xd6, 0x02, 0x29, 0x32, 0x06, 0xa3, 0xcf, 0x0f, 0x28, 0xc2, 0xc9, 0x4e, - 0x43, 0xb0, 0xe7, 0x6c, 0x81, 0x55, 0x13, 0x5c, 0x14, 0x40, 0xd4, 0x27, 0x2e, 0x8f, 0xab, 0x44, 0xad, 0xd6, 0x1c, - 0xb6, 0xaa, 0x5f, 0xa5, 0x79, 0x43, 0xd6, 0xd0, 0x32, 0xe6, 0x2d, 0x33, 0x9d, 0x6f, 0x99, 0xa9, 0x5f, 0x3a, 0xf3, - 0x7c, 0xda, 0xec, 0xf4, 0xaa, 0x93, 0x62, 0xa4, 0xd0, 0x3a, 0xc3, 0x2d, 0x53, 0xde, 0x87, 0xed, 0xb8, 0x58, 0xd9, - 0x51, 0x4b, 0x92, 0xa6, 0xf7, 0x71, 0x02, 0x4a, 0x62, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x11, 0x44, 0x3c, 0xfe, 0x54, - 0xeb, 0x66, 0x2a, 0xde, 0xab, 0x5b, 0xaa, 0xd3, 0xeb, 0xb1, 0x1a, 0x4b, 0x92, 0x65, 0x34, 0x41, 0xa0, 0x13, 0x48, - 0x54, 0xf0, 0xff, 0x64, 0x9b, 0x35, 0xe0, 0x90, 0xd0, 0x2c, 0xae, 0x03, 0x44, 0xed, 0x4b, 0xe0, 0x83, 0x12, 0x41, - 0x34, 0x2b, 0xb1, 0x2c, 0x13, 0x09, 0x78, 0x4e, 0xdf, 0x24, 0x8a, 0xb7, 0xa5, 0x77, 0x64, 0x3a, 0x4b, 0x32, 0xf9, - 0x01, 0x6c, 0x11, 0x8c, 0x8e, 0x05, 0x7e, 0x05, 0x6a, 0xe4, 0xca, 0x84, 0x31, 0x66, 0x7e, 0x81, 0x24, 0x11, 0x4b, - 0x72, 0xab, 0x4d, 0x70, 0xf8, 0x26, 0xf6, 0xf4, 0x66, 0xd3, 0xc9, 0x0f, 0x66, 0x81, 0x59, 0xc3, 0x9a, 0x80, 0xda, - 0xc2, 0xe1, 0x99, 0x94, 0xc0, 0x84, 0x96, 0x77, 0x64, 0x82, 0xb2, 0xea, 0x1a, 0x52, 0x30, 0xbb, 0x42, 0xbc, 0x35, - 0x4a, 0xe0, 0x76, 0xbb, 0x76, 0x6f, 0xf2, 0xe7, 0x33, 0xfc, 0xe5, 0xdd, 0xe4, 0xcf, 0xc7, 0xf8, 0xab, 0x73, 0x83, - 0xc9, 0x36, 0x1b, 0xc4, 0x7a, 0xca, 0x9c, 0xf5, 0xb3, 0xd2, 0x7e, 0x62, 0x26, 0xb3, 0x8f, 0xd8, 0x36, 0x7c, 0x81, - 0x9f, 0x3e, 0xdb, 0x44, 0xe0, 0x24, 0xae, 0xce, 0x21, 0x75, 0x12, 0x33, 0x6f, 0x2c, 0x9f, 0xb5, 0x94, 0x8f, 0xcd, - 0x7f, 0x31, 0x81, 0x80, 0xbb, 0x24, 0x2e, 0xee, 0x94, 0xb2, 0x50, 0xf2, 0xe3, 0x38, 0x88, 0x48, 0xf2, 0xf0, 0x91, - 0xc9, 0x14, 0x0c, 0xc1, 0x67, 0x4b, 0x61, 0x2b, 0x63, 0x05, 0xcb, 0x1a, 0xfa, 0x4c, 0xd1, 0x49, 0x3d, 0x70, 0x0a, - 0x61, 0xf8, 0x97, 0x44, 0xa1, 0x3d, 0x4b, 0xe2, 0x28, 0xbe, 0x20, 0xa5, 0x0f, 0x7d, 0x7c, 0xb6, 0x31, 0x68, 0xbd, - 0x9b, 0x9a, 0xb8, 0xa2, 0x44, 0x10, 0xc0, 0xf2, 0xa0, 0x68, 0x6b, 0x31, 0x09, 0xfa, 0xa8, 0x82, 0x1f, 0xc7, 0x6b, - 0xfb, 0xd9, 0x26, 0x3b, 0xd7, 0x17, 0x24, 0xb9, 0xa5, 0x13, 0xdb, 0x0f, 0x12, 0x3f, 0xa4, 0x7a, 0x5f, 0x1f, 0x87, - 0x24, 0xba, 0xe5, 0x8f, 0x76, 0xbc, 0xca, 0xd0, 0xa8, 0x66, 0xa7, 0x24, 0x4c, 0xc0, 0x84, 0x09, 0xf0, 0x91, 0x41, - 0x6b, 0x80, 0x82, 0xf6, 0x5a, 0x8a, 0xbf, 0x0b, 0x82, 0xb2, 0xa8, 0x65, 0x81, 0x4d, 0x38, 0xd8, 0xf9, 0x80, 0x93, - 0xbd, 0xa5, 0xe3, 0x7a, 0xe9, 0x96, 0x3a, 0x55, 0xa6, 0xf7, 0x90, 0x59, 0x62, 0x3f, 0x62, 0x0f, 0xbf, 0xfc, 0x73, - 0x50, 0xf2, 0x98, 0xcf, 0x71, 0xe2, 0xb0, 0xfd, 0x83, 0x6a, 0x63, 0x92, 0xa6, 0xab, 0x05, 0x9d, 0x30, 0x7b, 0x82, - 0xf3, 0x62, 0x28, 0x65, 0x46, 0x5c, 0x1d, 0xce, 0x4f, 0xab, 0xce, 0xf1, 0xe1, 0x6b, 0xb0, 0x73, 0x02, 0x62, 0x30, - 0x9e, 0x4e, 0xf5, 0x42, 0xbc, 0xb6, 0xa3, 0x99, 0x77, 0xf8, 0xd3, 0xea, 0xeb, 0xb7, 0xee, 0xd7, 0xb2, 0x71, 0xa4, - 0x9b, 0xf9, 0x48, 0x18, 0x6d, 0x70, 0x9a, 0x56, 0x19, 0xaf, 0x98, 0xd1, 0x94, 0x44, 0xed, 0xd3, 0xb9, 0x2e, 0xed, - 0xb2, 0x25, 0xa5, 0x13, 0xb0, 0xe7, 0xb7, 0x6a, 0xa5, 0x1f, 0x43, 0x7a, 0x47, 0xa5, 0x41, 0x48, 0xfd, 0x63, 0x0d, - 0x2d, 0x30, 0x62, 0x25, 0x37, 0x34, 0xe1, 0x84, 0x95, 0x32, 0xa5, 0x11, 0xce, 0x81, 0xcf, 0x5c, 0xdd, 0xe5, 0x95, - 0x5d, 0x3d, 0xb2, 0x74, 0x65, 0x00, 0xad, 0x23, 0x3b, 0x6f, 0x29, 0xef, 0x63, 0xba, 0xfa, 0xe6, 0xb1, 0x59, 0x9e, - 0xd9, 0x87, 0x08, 0xff, 0x1c, 0x4e, 0x21, 0x6c, 0x7e, 0x43, 0x4a, 0x22, 0x07, 0x6d, 0x10, 0x6b, 0x92, 0x5a, 0xeb, - 0x4c, 0xf0, 0x29, 0x6c, 0xa4, 0xd1, 0x59, 0x40, 0x08, 0x86, 0x1b, 0xd7, 0x46, 0x2b, 0xcf, 0x7c, 0x8c, 0x69, 0xa0, - 0x23, 0x9a, 0xa6, 0xad, 0x00, 0x93, 0x8b, 0x6e, 0xe9, 0x45, 0xed, 0x32, 0x3c, 0x8a, 0x72, 0xcb, 0xb5, 0xe0, 0x56, - 0xc6, 0x09, 0x56, 0xbf, 0x85, 0x18, 0xfe, 0xe3, 0x82, 0x5b, 0xb9, 0x25, 0xb3, 0xb1, 0xce, 0x2d, 0x90, 0xda, 0xde, - 0xdf, 0xeb, 0x7c, 0x50, 0xa5, 0x9b, 0xb2, 0x71, 0x68, 0x46, 0x09, 0xfb, 0xd5, 0xc4, 0xb4, 0xd8, 0x81, 0x18, 0x53, - 0x05, 0xc5, 0xd1, 0xe9, 0x94, 0xfa, 0x59, 0x6a, 0x0a, 0x59, 0xab, 0x8c, 0x39, 0x0d, 0xbe, 0x86, 0x4f, 0x86, 0xfa, - 0x9f, 0x20, 0xf2, 0x86, 0x08, 0xcd, 0xc6, 0x07, 0x24, 0xf8, 0x9d, 0x66, 0x30, 0xb1, 0x1e, 0xcb, 0x20, 0xe2, 0x5f, - 0xf9, 0xf4, 0x49, 0x98, 0x48, 0x94, 0xca, 0x71, 0x68, 0xfc, 0x0a, 0x28, 0xf6, 0x45, 0x2c, 0x6d, 0xe1, 0xb6, 0x23, - 0xa0, 0x6d, 0xc7, 0x77, 0xe3, 0x7d, 0xdd, 0xf3, 0xdc, 0x5c, 0xb7, 0xc0, 0xe3, 0xf3, 0x76, 0xdf, 0x43, 0x8f, 0xad, - 0xba, 0xd0, 0x6a, 0x15, 0x3d, 0xa6, 0x5d, 0xc7, 0x7b, 0xe5, 0xe9, 0x16, 0x33, 0xb4, 0x55, 0x70, 0x9b, 0x1f, 0xdf, - 0xd1, 0xe4, 0x57, 0x4f, 0xa5, 0xdc, 0xf9, 0x7e, 0xe3, 0x39, 0xf2, 0x5c, 0x40, 0xc2, 0x59, 0xbc, 0x7c, 0xc4, 0x14, - 0xba, 0xba, 0xa5, 0xfb, 0x61, 0x9c, 0x52, 0x75, 0x0e, 0x4c, 0x5e, 0xf1, 0x2b, 0x27, 0xf1, 0xfd, 0xfb, 0xb7, 0x3f, - 0xfc, 0xa0, 0x5b, 0x98, 0x3f, 0x38, 0x55, 0x7b, 0xe7, 0x1b, 0x6a, 0x07, 0xf6, 0x6f, 0xdc, 0x77, 0xec, 0x86, 0x61, - 0x7c, 0x65, 0x79, 0xcf, 0xb1, 0xb2, 0xda, 0x96, 0xe3, 0x37, 0x0f, 0xff, 0x32, 0x63, 0x06, 0xf7, 0x9a, 0x57, 0x03, - 0x6e, 0xd8, 0x7e, 0xbd, 0x95, 0x4a, 0x16, 0x41, 0xf4, 0xb1, 0xa1, 0x94, 0xac, 0x1b, 0x4a, 0x51, 0x36, 0x58, 0xc5, - 0x1f, 0xab, 0x78, 0xa1, 0xdc, 0xce, 0x90, 0xfe, 0x7d, 0x17, 0xb8, 0x14, 0x96, 0xe6, 0x57, 0x0c, 0x9a, 0xe7, 0x7f, - 0xa8, 0x8e, 0xba, 0xa1, 0x98, 0xf3, 0x21, 0x12, 0xb6, 0x5c, 0x97, 0xa3, 0xaa, 0xc9, 0xcb, 0x94, 0x9b, 0xda, 0xb8, - 0x59, 0x60, 0xfa, 0xa4, 0x70, 0xbe, 0xd9, 0x51, 0x19, 0x84, 0xb4, 0xb2, 0x76, 0x41, 0x13, 0x6c, 0xed, 0x3d, 0xff, - 0xe7, 0x3f, 0x1c, 0xe7, 0x9f, 0xff, 0xd8, 0x59, 0x15, 0xfa, 0xce, 0x81, 0x1d, 0xde, 0x55, 0x33, 0x1f, 0xa1, 0xd0, - 0x29, 0x1b, 0xbe, 0x1e, 0x8d, 0x06, 0x46, 0x09, 0x64, 0xe0, 0x33, 0x72, 0x5e, 0x2b, 0xe1, 0x78, 0xb5, 0xef, 0x9a, - 0x18, 0xcc, 0x01, 0x1a, 0xca, 0xeb, 0xab, 0x75, 0xb3, 0x33, 0xa7, 0x84, 0x5a, 0x5f, 0xb5, 0x9d, 0x0e, 0xa5, 0x98, - 0xb8, 0x2e, 0x1f, 0x99, 0x3c, 0xc7, 0x00, 0x8c, 0x8b, 0xab, 0x0f, 0x4a, 0x2b, 0x07, 0x7e, 0x36, 0x59, 0x79, 0x7c, - 0xbc, 0xac, 0x32, 0x42, 0xba, 0xd7, 0x08, 0x59, 0xdb, 0xf2, 0x18, 0x79, 0x7f, 0xb5, 0x51, 0xb2, 0x72, 0x31, 0x4e, - 0x0b, 0x45, 0x66, 0x3c, 0xca, 0x08, 0x67, 0x9a, 0xb8, 0x4a, 0xb0, 0xa4, 0xf6, 0xad, 0xa8, 0x2e, 0x94, 0x21, 0xec, - 0x5e, 0xf6, 0x73, 0x3d, 0x8c, 0xef, 0xd1, 0x59, 0x4f, 0xd5, 0x27, 0x73, 0x61, 0xc8, 0x69, 0x9a, 0x25, 0x71, 0x34, - 0x3b, 0xab, 0x5c, 0xde, 0x75, 0x3b, 0x1f, 0x90, 0x60, 0xb1, 0xaa, 0x65, 0xb1, 0x89, 0x3a, 0xca, 0xed, 0x5b, 0xea, - 0x7c, 0xc7, 0x4c, 0x98, 0x6a, 0x42, 0xb9, 0x1c, 0x45, 0xd7, 0x0d, 0x6a, 0x70, 0x95, 0x94, 0x2b, 0xbf, 0x96, 0x8f, - 0x07, 0x1c, 0xae, 0x67, 0xa3, 0x1c, 0x93, 0x1d, 0xbd, 0x6b, 0x33, 0x10, 0xfd, 0x7e, 0xb7, 0x81, 0xe8, 0xd5, 0x5e, - 0x06, 0xa2, 0xdf, 0x7f, 0x76, 0x03, 0xd1, 0x77, 0xaa, 0x81, 0x28, 0x6c, 0xe9, 0xb7, 0x74, 0x2f, 0xab, 0x4d, 0x61, - 0x0d, 0x15, 0xdf, 0xa7, 0x43, 0x8f, 0x53, 0xa6, 0xa9, 0x3f, 0xa7, 0xc0, 0x6d, 0xf3, 0x6d, 0x1a, 0xc6, 0x33, 0xb0, - 0xe0, 0xfc, 0xed, 0x6d, 0x2d, 0xc3, 0x78, 0xa6, 0x5a, 0x5a, 0xa6, 0x3c, 0xdc, 0x73, 0x11, 0xc2, 0x8d, 0x59, 0x37, - 0xba, 0x96, 0x38, 0x7b, 0xf6, 0xa1, 0xa9, 0xa4, 0xb4, 0x97, 0xa6, 0xab, 0x1d, 0x61, 0xff, 0xd8, 0x47, 0xd3, 0x49, - 0xd9, 0xb0, 0xf3, 0x32, 0x96, 0x49, 0x7b, 0x8a, 0x1e, 0xa4, 0x8b, 0x00, 0x0b, 0x12, 0xb3, 0xd1, 0x7f, 0x5a, 0x7b, - 0x5f, 0x5d, 0x7b, 0x83, 0xae, 0x07, 0x91, 0x19, 0x80, 0x57, 0xc3, 0x02, 0x77, 0xd0, 0xed, 0x42, 0xc1, 0xbd, 0x52, - 0xd0, 0x81, 0x82, 0x40, 0x29, 0xe8, 0x41, 0x81, 0xaf, 0x14, 0x1c, 0x41, 0xc1, 0x44, 0x29, 0x38, 0x86, 0x82, 0x3b, - 0x3d, 0xbf, 0x2e, 0x12, 0x39, 0x1d, 0x9b, 0x37, 0x16, 0xe3, 0x0d, 0x44, 0xd9, 0xb1, 0xe5, 0x81, 0x19, 0x23, 0x99, - 0xf5, 0x63, 0x8b, 0xc9, 0xe9, 0xfa, 0x89, 0x75, 0x3f, 0xa7, 0x2c, 0x4a, 0xfc, 0x1b, 0xbc, 0x3a, 0x9c, 0x2c, 0x06, - 0xa7, 0x09, 0x11, 0x7d, 0x45, 0xc0, 0x41, 0xd3, 0x4d, 0x10, 0xbd, 0x0c, 0xe4, 0xca, 0x89, 0x08, 0x36, 0xca, 0x5a, - 0x16, 0xef, 0xd8, 0xe7, 0x6c, 0xb9, 0x05, 0x0a, 0x4b, 0x2e, 0x43, 0x95, 0xef, 0x7d, 0x0e, 0x7b, 0x9e, 0x37, 0x74, - 0xbc, 0x9a, 0x69, 0x97, 0xf1, 0x6c, 0xa7, 0x69, 0x8e, 0xfa, 0x0a, 0x46, 0xa9, 0x33, 0x0d, 0x88, 0x2d, 0xb6, 0x25, - 0xff, 0x16, 0x7b, 0xcc, 0xcb, 0xf5, 0x33, 0x18, 0x9b, 0x96, 0x31, 0xc3, 0x30, 0xf8, 0x0e, 0xc0, 0x48, 0x39, 0xf5, - 0x97, 0x00, 0x67, 0xe5, 0xf9, 0x8a, 0x28, 0xe3, 0x39, 0xfb, 0x8e, 0xa6, 0x29, 0x99, 0x89, 0xfa, 0xf5, 0x71, 0x82, - 0x31, 0x9c, 0x64, 0xa3, 0x10, 0x80, 0x20, 0x13, 0x0b, 0x6a, 0x36, 0x4f, 0x49, 0x7c, 0xaf, 0x81, 0x55, 0x1d, 0x6c, - 0xa8, 0xc2, 0xfe, 0x27, 0x70, 0x60, 0x09, 0xcb, 0x38, 0x08, 0x0e, 0xff, 0x1d, 0x0d, 0xab, 0x85, 0x19, 0x99, 0x55, - 0x8b, 0xd8, 0x3e, 0xc8, 0xd5, 0xb1, 0x49, 0x93, 0x98, 0x52, 0xe1, 0xaf, 0xb1, 0xcb, 0x08, 0xe3, 0xd9, 0x6f, 0x6a, - 0x94, 0xb1, 0xc5, 0x30, 0xe7, 0x36, 0xb5, 0x82, 0x6c, 0xe4, 0x20, 0x8c, 0x35, 0x07, 0x40, 0xd8, 0x8f, 0xb2, 0xb9, - 0x8d, 0x7e, 0xa5, 0x46, 0x27, 0x32, 0x2d, 0x07, 0xd7, 0x76, 0x53, 0xf5, 0xa6, 0xef, 0x27, 0xb3, 0x31, 0x31, 0xbc, - 0xce, 0xb1, 0x25, 0xfe, 0x1c, 0xb7, 0x67, 0xe6, 0xd8, 0x83, 0x36, 0x09, 0xee, 0x36, 0xd3, 0x38, 0xca, 0xec, 0x29, - 0x59, 0x04, 0xe1, 0x43, 0x7f, 0x11, 0x47, 0x71, 0xba, 0x24, 0x3e, 0x1d, 0x14, 0x7c, 0xf1, 0x00, 0xe3, 0xb4, 0x70, - 0x57, 0x61, 0xcf, 0xe9, 0x24, 0x74, 0xc1, 0x5a, 0xcb, 0x30, 0x2c, 0xd3, 0x90, 0xae, 0x73, 0xfe, 0xf9, 0x52, 0x65, - 0x56, 0x15, 0xb7, 0x1c, 0x6b, 0x01, 0x84, 0x25, 0x8f, 0xf1, 0x02, 0x91, 0xcd, 0x06, 0x4b, 0x32, 0xc1, 0xb0, 0xa4, - 0x4e, 0xa7, 0x97, 0xd0, 0x85, 0xe6, 0xf4, 0x5a, 0x3b, 0x4f, 0xe2, 0xfb, 0x33, 0x18, 0x2d, 0x36, 0xb6, 0x53, 0x1a, - 0x4e, 0xf1, 0x8d, 0x8d, 0x6e, 0x65, 0xa2, 0x1f, 0x1b, 0xf9, 0x69, 0xe8, 0x8d, 0x2e, 0x06, 0xf0, 0xba, 0xdf, 0xd1, - 0xdc, 0xc1, 0x22, 0x88, 0x6c, 0x36, 0x9d, 0x63, 0x77, 0xa9, 0xf4, 0xa5, 0xc2, 0xcf, 0xdc, 0x60, 0x75, 0x4f, 0x73, - 0x07, 0xc0, 0x73, 0x4d, 0xc3, 0xf8, 0xbe, 0x3f, 0x0f, 0x26, 0x13, 0x1a, 0x0d, 0x70, 0xcc, 0xb2, 0x90, 0x86, 0x61, - 0xb0, 0x4c, 0x83, 0x74, 0xb0, 0x20, 0x6b, 0xde, 0xeb, 0x61, 0x5b, 0xaf, 0x5d, 0xde, 0x6b, 0x77, 0xef, 0x5e, 0x95, - 0x6e, 0xc0, 0x85, 0x8d, 0xf5, 0xc3, 0x87, 0xd6, 0xd3, 0xdc, 0xca, 0x3c, 0xf7, 0xee, 0x75, 0x99, 0xd0, 0xcd, 0x82, - 0x24, 0xb3, 0x20, 0xea, 0xbb, 0xb9, 0x73, 0xb7, 0x61, 0x1b, 0xe3, 0xe9, 0xc9, 0xc9, 0x49, 0xee, 0x4c, 0xc4, 0x93, - 0x3b, 0x99, 0xe4, 0x8e, 0x2f, 0x9e, 0xa6, 0x53, 0xd7, 0x9d, 0x4e, 0x73, 0x27, 0x10, 0x05, 0xdd, 0x8e, 0x3f, 0xe9, - 0x76, 0x72, 0xe7, 0x5e, 0xa9, 0x91, 0x3b, 0x94, 0x3f, 0x25, 0x74, 0x32, 0xc0, 0x8d, 0xc4, 0xec, 0xbc, 0xfb, 0xc7, - 0xae, 0x9b, 0x23, 0x06, 0xb8, 0x2e, 0xe1, 0x26, 0x14, 0xd9, 0xdc, 0x6c, 0xf6, 0xae, 0xa9, 0x15, 0x9f, 0xf3, 0xfd, - 0xc6, 0x7a, 0x13, 0x92, 0xdc, 0xde, 0x68, 0xca, 0x2c, 0x08, 0x61, 0xd5, 0x36, 0x02, 0x0c, 0xf6, 0xba, 0x0f, 0xf1, - 0xfa, 0x06, 0xe3, 0x38, 0x81, 0x33, 0x9b, 0x90, 0x49, 0xb0, 0x4a, 0xfb, 0x5e, 0x67, 0xb9, 0x16, 0x45, 0x7c, 0xaf, - 0x17, 0x05, 0x78, 0xf6, 0xfa, 0x69, 0x1c, 0x06, 0x13, 0x51, 0xd4, 0x76, 0x96, 0xbc, 0x8e, 0x39, 0xc0, 0x68, 0x15, - 0x01, 0xc6, 0x5c, 0x21, 0x61, 0xa8, 0x39, 0xdd, 0x54, 0xa3, 0x24, 0x45, 0x49, 0xad, 0xe6, 0xa6, 0x0c, 0x2e, 0x18, - 0x99, 0xc2, 0x3b, 0x5c, 0xae, 0xe5, 0x9e, 0xf7, 0x8e, 0x96, 0xeb, 0xfc, 0x0f, 0x0b, 0x3a, 0x09, 0x88, 0x66, 0x14, - 0xbb, 0xc9, 0x73, 0x41, 0x9a, 0x6b, 0x6e, 0x5a, 0xb6, 0xa9, 0x38, 0x16, 0x10, 0xd7, 0xf4, 0x49, 0xb0, 0x58, 0xc6, - 0x49, 0x46, 0xa2, 0x2c, 0xcf, 0x47, 0x37, 0x79, 0x3e, 0xb8, 0x0a, 0x8c, 0xeb, 0xbf, 0x1a, 0xec, 0x9e, 0x66, 0xda, - 0x8f, 0xdc, 0xbc, 0xb1, 0xde, 0x52, 0xd5, 0x52, 0x0a, 0xae, 0x31, 0xb4, 0x92, 0x52, 0x2b, 0xb3, 0x5b, 0xb2, 0x5e, - 0x99, 0x01, 0x59, 0x56, 0x67, 0x96, 0x57, 0xe5, 0x2a, 0x78, 0x03, 0x41, 0x85, 0xb7, 0x74, 0x78, 0xa5, 0x58, 0x5d, - 0x01, 0xb1, 0x82, 0x95, 0x99, 0x53, 0xd1, 0xb3, 0x36, 0x9a, 0xf1, 0xcb, 0xdd, 0x34, 0xe3, 0x8f, 0xd9, 0x3e, 0x34, - 0xe3, 0x97, 0x9f, 0x9d, 0x66, 0x7c, 0x56, 0x77, 0x2a, 0xba, 0x88, 0x87, 0xba, 0x94, 0xd5, 0xc3, 0xd5, 0x94, 0xb0, - 0x70, 0x5d, 0x17, 0xbf, 0xd8, 0x07, 0x48, 0xf4, 0xc6, 0x12, 0x50, 0xb2, 0x9b, 0x1b, 0x68, 0xf1, 0x77, 0xd1, 0xf0, - 0x2f, 0x89, 0xfa, 0x3c, 0x9d, 0x0e, 0xdf, 0xc4, 0x4a, 0x81, 0x7c, 0xe2, 0xf6, 0x0f, 0xa5, 0xd0, 0x2a, 0xec, 0x8d, - 0xb0, 0x6e, 0xc6, 0xe4, 0x33, 0x10, 0x99, 0x81, 0x59, 0xf3, 0x4f, 0xa4, 0xfd, 0xe6, 0xa0, 0x3c, 0x04, 0x43, 0x9a, - 0x52, 0x0b, 0xff, 0xbb, 0x9a, 0x44, 0x70, 0x46, 0x33, 0xee, 0x30, 0xff, 0xd5, 0xc3, 0xc5, 0xc4, 0xb8, 0x88, 0xcd, - 0x3c, 0x48, 0xdf, 0x55, 0xbd, 0xdf, 0xb8, 0x16, 0x65, 0xa8, 0x4e, 0x27, 0xe7, 0x76, 0x93, 0x6a, 0x76, 0x79, 0x78, - 0xcd, 0x9a, 0x9f, 0x97, 0x66, 0xda, 0x57, 0x1b, 0x72, 0x0e, 0xb4, 0x76, 0x19, 0x73, 0xd7, 0xa3, 0x0d, 0xa7, 0x00, - 0x31, 0x71, 0x1f, 0x06, 0x0d, 0x98, 0xb0, 0xe6, 0xc1, 0x24, 0xcf, 0xcd, 0x81, 0x00, 0x84, 0x72, 0xd1, 0xd2, 0x5d, - 0x44, 0x5c, 0x7a, 0x2f, 0xad, 0x03, 0xb8, 0xae, 0x8d, 0x29, 0xd2, 0x2e, 0x40, 0x35, 0xcd, 0xd5, 0x6e, 0x1c, 0x66, - 0xba, 0xc6, 0xc0, 0xc7, 0x4c, 0x16, 0x94, 0x09, 0x81, 0x2e, 0x55, 0xc2, 0x5f, 0xbc, 0x12, 0x05, 0x75, 0xdb, 0x68, - 0x06, 0x1c, 0xd4, 0xad, 0x43, 0x88, 0x0f, 0x21, 0x9e, 0x66, 0x68, 0x87, 0xd7, 0xc1, 0x87, 0x5c, 0x97, 0xb4, 0x1f, - 0x6e, 0x3f, 0x60, 0xcf, 0x96, 0x24, 0xaa, 0xf0, 0x92, 0xbb, 0x6c, 0x7c, 0x81, 0x94, 0x48, 0xef, 0x2d, 0x27, 0xbd, - 0xd7, 0x5e, 0x6c, 0x44, 0x78, 0x9c, 0x8c, 0x2c, 0x6d, 0xe0, 0x1c, 0x11, 0xf7, 0x72, 0x8c, 0xa7, 0x44, 0xe2, 0x19, - 0xac, 0x52, 0xc0, 0x8d, 0xc8, 0x70, 0x22, 0xfe, 0x19, 0xf8, 0xab, 0x24, 0x8d, 0x93, 0xfe, 0x32, 0x0e, 0xa2, 0x8c, - 0x26, 0x39, 0x82, 0xea, 0x1a, 0xe1, 0x23, 0xc0, 0x73, 0xb3, 0x89, 0x97, 0xc4, 0x0f, 0xb2, 0x87, 0xbe, 0xcb, 0x49, - 0x0a, 0x77, 0xc0, 0xa9, 0x03, 0xb7, 0xb1, 0x7e, 0x9f, 0x43, 0xf3, 0x25, 0x12, 0x7e, 0x49, 0x9d, 0x9c, 0x51, 0xb7, - 0xf9, 0x40, 0x79, 0xcb, 0x02, 0x04, 0x01, 0xf9, 0x41, 0x12, 0x7b, 0x06, 0x58, 0x1e, 0x96, 0xda, 0x9d, 0xd0, 0x99, - 0x85, 0x58, 0x1b, 0xc4, 0xeb, 0xe2, 0xcf, 0xe9, 0x99, 0x9a, 0xdb, 0x5c, 0x0c, 0x14, 0x8f, 0xb9, 0xcf, 0xc8, 0xfa, - 0x04, 0xd2, 0xe9, 0x59, 0xfb, 0xd4, 0x1c, 0xd3, 0x69, 0x9c, 0x50, 0x16, 0x4c, 0xda, 0x3b, 0x59, 0xae, 0xf7, 0xef, - 0x7e, 0xfb, 0xf4, 0x9b, 0xfb, 0x89, 0xe2, 0xcc, 0x10, 0x9d, 0x99, 0x3b, 0x7a, 0xab, 0xdf, 0x67, 0x40, 0x1a, 0x32, - 0xc8, 0xfb, 0x2c, 0x6e, 0x5f, 0x5f, 0xd7, 0x07, 0x8d, 0x31, 0xfb, 0x96, 0x31, 0xbf, 0xf3, 0x12, 0x1a, 0x92, 0x2c, - 0xb8, 0x13, 0x34, 0x63, 0xf7, 0x68, 0xb9, 0x16, 0x6b, 0x8c, 0x17, 0xde, 0x23, 0x16, 0xa9, 0x32, 0x14, 0xb1, 0x48, - 0xd5, 0x62, 0x5c, 0xa4, 0x41, 0x6d, 0x36, 0x22, 0x8c, 0x4d, 0xe5, 0xa6, 0xef, 0x2d, 0xd7, 0xea, 0x15, 0x5d, 0x34, - 0x93, 0x37, 0x75, 0x35, 0xfe, 0xe0, 0x22, 0x98, 0x4c, 0x42, 0x9a, 0x97, 0x16, 0xba, 0xbc, 0x96, 0x0a, 0x70, 0x24, - 0x1c, 0xc8, 0x38, 0x8d, 0xc3, 0x55, 0x46, 0x9b, 0xc1, 0xc5, 0x80, 0xd3, 0x71, 0x0b, 0xe0, 0xe0, 0xef, 0xf2, 0x58, - 0x7b, 0x40, 0x6e, 0xc3, 0x36, 0x71, 0x07, 0x10, 0x6e, 0xdc, 0xee, 0x96, 0x87, 0x0e, 0xaf, 0xe4, 0xa0, 0xad, 0x86, - 0x89, 0x58, 0x70, 0x2d, 0x31, 0xec, 0xad, 0x39, 0x1e, 0x2f, 0x93, 0x21, 0x97, 0x65, 0x51, 0x5e, 0x9e, 0xcc, 0x6f, - 0x73, 0xc6, 0x5e, 0x35, 0x9f, 0xb1, 0x57, 0xe2, 0x8c, 0x6d, 0xdf, 0x99, 0x4f, 0xa7, 0x1e, 0xfc, 0x37, 0x28, 0x26, - 0xd4, 0x77, 0xb5, 0xee, 0x72, 0xad, 0x79, 0xcb, 0xb5, 0x66, 0x77, 0x96, 0x6b, 0x0d, 0xbb, 0x46, 0xcb, 0x0a, 0xcb, - 0xe9, 0x98, 0x96, 0xab, 0x41, 0x21, 0xfc, 0xb9, 0xa5, 0x57, 0xde, 0x21, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, - 0xf6, 0xa3, 0xce, 0xce, 0x92, 0x40, 0xda, 0xa6, 0x93, 0x91, 0xf1, 0x98, 0x4e, 0xfa, 0xd3, 0xd8, 0x5f, 0xa5, 0x7f, - 0xe7, 0xe3, 0xe7, 0x40, 0xdc, 0x8a, 0x08, 0x2a, 0xfd, 0x88, 0xa6, 0xa0, 0xef, 0xb8, 0xa3, 0xa2, 0x87, 0x8d, 0x5c, - 0xa7, 0x3e, 0x8b, 0x8d, 0xde, 0x71, 0x0e, 0x1b, 0x36, 0x79, 0x33, 0xa0, 0x7f, 0xb3, 0x55, 0x6a, 0x47, 0x31, 0xbf, - 0x02, 0x2c, 0x5b, 0xc1, 0xf1, 0x78, 0x68, 0xf0, 0xd5, 0x74, 0x4f, 0x9a, 0x87, 0x7b, 0x2d, 0xbe, 0x74, 0x23, 0x2e, - 0x15, 0x7e, 0x6f, 0x71, 0x87, 0xaf, 0xed, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x5b, 0x2e, 0x84, 0xa2, 0xee, 0x9e, - 0x58, 0xfe, 0xe9, 0xab, 0x43, 0xf8, 0x8f, 0x51, 0xf5, 0x3f, 0x66, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xff, 0x81, 0x91, - 0x4a, 0x48, 0x88, 0xef, 0x5f, 0x7f, 0x3a, 0x7d, 0x5c, 0x83, 0xbd, 0x6b, 0x33, 0xa3, 0xa4, 0x6a, 0xed, 0xaf, 0xe2, - 0x18, 0xf2, 0xf6, 0xd6, 0xab, 0x0b, 0xf0, 0x30, 0x17, 0x8f, 0x6c, 0x08, 0x8d, 0x04, 0x1f, 0xc1, 0x94, 0xf1, 0x3a, - 0xb6, 0x61, 0xac, 0xc4, 0xdb, 0x36, 0x56, 0xe2, 0xcd, 0x6e, 0x56, 0xe2, 0xdb, 0xbd, 0x58, 0x89, 0x37, 0x9f, 0x9d, - 0x95, 0x78, 0x5b, 0x67, 0x25, 0xae, 0x62, 0x61, 0x89, 0x6a, 0x5d, 0xac, 0xf8, 0xcf, 0x0f, 0x4c, 0xb7, 0x76, 0x19, - 0x0f, 0x7b, 0x2e, 0x8b, 0x77, 0x7e, 0xf5, 0x8b, 0x19, 0x0b, 0xdc, 0x88, 0xef, 0xd1, 0x30, 0xab, 0x60, 0x2d, 0x38, - 0x66, 0xc7, 0xef, 0x28, 0xc5, 0x61, 0x1c, 0xcd, 0xbe, 0x07, 0xdd, 0x2a, 0x88, 0x03, 0x13, 0xe5, 0x45, 0x90, 0x7e, - 0x1f, 0x2f, 0x57, 0xcb, 0x0b, 0xe8, 0xeb, 0x43, 0x90, 0x06, 0xe3, 0x90, 0xca, 0x30, 0x04, 0xcc, 0x90, 0x8c, 0xcb, - 0xc4, 0xc1, 0x76, 0x53, 0xfc, 0x24, 0x6b, 0xf1, 0x13, 0xad, 0x3b, 0xf9, 0x6f, 0x66, 0xa1, 0xa6, 0x37, 0x33, 0x22, - 0x10, 0xb0, 0xab, 0x32, 0xe8, 0xc7, 0x33, 0x23, 0x57, 0xb1, 0xd9, 0x30, 0x4b, 0x61, 0xb6, 0xd0, 0xda, 0x0f, 0xad, - 0x31, 0x35, 0x2b, 0xd3, 0x92, 0xf1, 0xf7, 0xea, 0x62, 0xf8, 0x45, 0xbc, 0x4a, 0xe9, 0x24, 0xbe, 0x8f, 0x74, 0x2b, - 0x95, 0xae, 0x35, 0xa0, 0xa8, 0x94, 0x6d, 0x30, 0x73, 0xac, 0xd4, 0xcc, 0xe8, 0x90, 0xb8, 0x78, 0xb5, 0xb4, 0x99, - 0xc6, 0xd8, 0xc6, 0x29, 0xea, 0x32, 0xc5, 0xd9, 0x13, 0xc3, 0x88, 0x87, 0x8f, 0x6b, 0x29, 0x2c, 0x2e, 0x62, 0x87, - 0x4b, 0x85, 0x53, 0x23, 0x15, 0xc2, 0x45, 0x11, 0x04, 0xa7, 0x61, 0xe1, 0xf8, 0x1b, 0xe6, 0x12, 0x5e, 0xbc, 0x85, - 0x10, 0x42, 0xf9, 0x8a, 0xaf, 0x07, 0x0f, 0x09, 0xc3, 0x1e, 0x5f, 0x2b, 0x60, 0x7c, 0x77, 0x47, 0x93, 0x90, 0x3c, - 0x18, 0x66, 0x1e, 0x47, 0xdf, 0x01, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0x33, 0x35, 0x35, 0xec, 0xa5, 0xc6, - 0xe0, 0x45, 0xe0, 0xae, 0xa5, 0x8c, 0x00, 0x72, 0x64, 0xcf, 0xe8, 0x5f, 0x2c, 0xf6, 0xef, 0x5f, 0xcd, 0xdc, 0xba, - 0x8c, 0xe5, 0x87, 0xfe, 0xbc, 0xdc, 0xe3, 0x33, 0xcf, 0x9f, 0x3f, 0x69, 0x9f, 0xb6, 0x01, 0xe9, 0xc2, 0x45, 0xe6, - 0x6b, 0xa3, 0xa1, 0xb5, 0xd9, 0x7a, 0x0a, 0x60, 0x14, 0x57, 0xf1, 0xca, 0x9f, 0xa3, 0xc9, 0xe8, 0xe7, 0x9b, 0x6f, - 0x06, 0x7d, 0x62, 0x8a, 0x62, 0x39, 0xf5, 0x4a, 0x51, 0x01, 0x05, 0xfc, 0xfe, 0x5b, 0x88, 0xbe, 0xfb, 0x6f, 0x04, - 0x43, 0x7d, 0xd7, 0x70, 0x2e, 0x3e, 0x78, 0xdc, 0xe6, 0x1d, 0x40, 0x26, 0x5d, 0x1e, 0xd7, 0x46, 0x28, 0xd7, 0x9a, - 0x91, 0x4c, 0x5e, 0x05, 0x9a, 0x1a, 0x43, 0xb2, 0x2d, 0x3c, 0xa6, 0xf8, 0x0a, 0x75, 0x18, 0x9b, 0xce, 0x4d, 0xf6, - 0x2d, 0xca, 0xb1, 0x55, 0x05, 0xc9, 0x70, 0xcb, 0x05, 0x8a, 0xe8, 0xab, 0xfa, 0x6e, 0x11, 0x44, 0x16, 0xa6, 0x80, - 0xa8, 0xbf, 0x21, 0x6b, 0x08, 0x82, 0x0e, 0xc8, 0xad, 0xfa, 0x0a, 0x0a, 0x2d, 0xaa, 0x78, 0x8b, 0x42, 0x9e, 0x37, - 0xbd, 0x11, 0x12, 0x42, 0x8b, 0x37, 0xfa, 0x9d, 0xa6, 0x69, 0x9a, 0x64, 0x23, 0x34, 0xc9, 0x47, 0x60, 0x39, 0xb2, - 0x03, 0xa0, 0x2d, 0xc9, 0x97, 0x6b, 0x56, 0x02, 0x9c, 0x01, 0x98, 0x78, 0xc8, 0x02, 0x1e, 0xe7, 0xb3, 0xe7, 0x8a, - 0x02, 0xc1, 0xd0, 0x43, 0x8c, 0x46, 0x92, 0x40, 0x38, 0xf0, 0xbe, 0x86, 0x0c, 0x3b, 0xbe, 0xe5, 0x92, 0x60, 0xcd, - 0x65, 0x8f, 0xa3, 0x01, 0x6d, 0x0e, 0x08, 0x99, 0x2a, 0x58, 0x10, 0xb4, 0x0e, 0x95, 0xf8, 0xee, 0x16, 0x6d, 0xc0, - 0x8d, 0xc8, 0x17, 0xad, 0xb3, 0x05, 0x8d, 0x56, 0x3a, 0x26, 0x84, 0xc3, 0xe0, 0xe2, 0x50, 0xe7, 0x0d, 0x23, 0xb6, - 0x00, 0xdb, 0x34, 0xb7, 0x9c, 0xb3, 0xbb, 0x30, 0xe2, 0x28, 0x95, 0x58, 0x3e, 0x57, 0x6c, 0x46, 0x1c, 0xb7, 0x55, - 0x6f, 0x08, 0xbe, 0xa4, 0x71, 0xd5, 0x7d, 0x91, 0xd9, 0x14, 0x43, 0x1f, 0x2c, 0x34, 0x0e, 0x17, 0x17, 0x09, 0xb0, - 0x1b, 0xa4, 0xba, 0x68, 0x52, 0x23, 0x43, 0x2a, 0x82, 0xa2, 0xc4, 0xac, 0x77, 0xc3, 0xc7, 0x09, 0x51, 0xc9, 0x5a, - 0xfb, 0xf1, 0x6b, 0xfd, 0xb4, 0x4c, 0xfa, 0x96, 0x3e, 0xb0, 0x8b, 0x84, 0x81, 0xea, 0x96, 0x3e, 0x80, 0x09, 0xdf, - 0x5b, 0x90, 0xa6, 0xe8, 0x5b, 0xd0, 0xb5, 0x05, 0x79, 0x3e, 0x7c, 0x88, 0x54, 0xb7, 0xe5, 0x00, 0xb9, 0xf9, 0x16, - 0x2c, 0x8e, 0x20, 0x86, 0x94, 0xee, 0xe2, 0x10, 0x73, 0x63, 0x79, 0xa3, 0x11, 0xc6, 0x76, 0xc3, 0xd1, 0x30, 0x5f, - 0x78, 0xae, 0x7b, 0x50, 0xab, 0x0f, 0x82, 0xec, 0xa6, 0xda, 0xa6, 0x95, 0x0d, 0x3d, 0xd7, 0x0e, 0x5e, 0x38, 0x9d, - 0x41, 0xed, 0x8e, 0x56, 0x02, 0xc9, 0x8e, 0x50, 0xfc, 0x75, 0xf6, 0x6c, 0x63, 0xa4, 0x2d, 0xe0, 0x2d, 0x8c, 0xcf, - 0x71, 0x6c, 0x39, 0x97, 0x7f, 0x8d, 0xea, 0x57, 0x3f, 0x0b, 0x63, 0xcb, 0x92, 0x1a, 0x8d, 0x20, 0x14, 0xba, 0x01, - 0xc7, 0xe8, 0xf7, 0xda, 0x4b, 0xcd, 0x60, 0xc7, 0xc7, 0x34, 0x47, 0x03, 0x81, 0x51, 0x84, 0x5b, 0x97, 0xda, 0x41, - 0xe5, 0x8b, 0x51, 0x15, 0xc3, 0xf1, 0xa0, 0xcb, 0xb4, 0xd0, 0xe8, 0x6d, 0xa5, 0x16, 0xb0, 0xff, 0x96, 0xeb, 0xd3, - 0x19, 0x43, 0xbc, 0x0f, 0xa8, 0x01, 0x89, 0x13, 0x76, 0x76, 0xb8, 0x5a, 0x96, 0xbb, 0x2b, 0x5f, 0x92, 0xfb, 0x77, - 0x86, 0x97, 0x0e, 0xea, 0xd0, 0x64, 0x7f, 0xcd, 0xd7, 0xdd, 0x23, 0xbb, 0xa4, 0xd1, 0xa4, 0xdc, 0x61, 0xe5, 0xfe, - 0xda, 0xbf, 0xbb, 0x12, 0x46, 0x81, 0x8c, 0x22, 0x71, 0x03, 0x46, 0xc9, 0xe3, 0x08, 0x37, 0x3f, 0x3b, 0x6e, 0xc1, - 0x5e, 0x54, 0x0c, 0x36, 0x60, 0xe1, 0x00, 0x65, 0x33, 0x45, 0x28, 0x0e, 0x61, 0xeb, 0xd1, 0x19, 0xde, 0x10, 0x84, - 0x68, 0xeb, 0x4e, 0xcc, 0x84, 0x69, 0x60, 0xd1, 0x26, 0xe0, 0x81, 0x68, 0xf7, 0x95, 0x5a, 0x07, 0xbb, 0xa5, 0xd6, - 0xd9, 0x2e, 0xa9, 0x35, 0x73, 0x4c, 0xba, 0x4f, 0xc8, 0x52, 0xf1, 0x6d, 0x13, 0xc4, 0xb9, 0xea, 0xe2, 0x56, 0x12, - 0x75, 0xa3, 0x1f, 0x93, 0x68, 0x55, 0xeb, 0x8d, 0x19, 0xfb, 0xa1, 0xf8, 0x5b, 0x61, 0x50, 0x84, 0x42, 0x5d, 0x95, - 0x8d, 0x5f, 0x15, 0xb2, 0x71, 0xc6, 0xd5, 0x14, 0x2e, 0x29, 0x82, 0xfa, 0x57, 0xdc, 0xbd, 0x24, 0x77, 0x50, 0xb8, - 0x7d, 0x15, 0x23, 0x55, 0x1c, 0x99, 0x0a, 0x46, 0x43, 0x71, 0x8f, 0x13, 0x5c, 0x46, 0xd9, 0x4b, 0xae, 0x5c, 0xb5, - 0xf0, 0x63, 0x2a, 0xca, 0x41, 0xea, 0x8e, 0x43, 0x96, 0xc5, 0xea, 0xb6, 0x29, 0x3b, 0xb2, 0xa8, 0xaf, 0x95, 0x4d, - 0x22, 0x3d, 0x4e, 0x18, 0x80, 0x85, 0x98, 0xbe, 0xa2, 0xd7, 0x96, 0x36, 0x10, 0x38, 0xc8, 0x06, 0x07, 0xb9, 0xdd, - 0xd2, 0x79, 0x96, 0x2c, 0xa5, 0xd0, 0xc2, 0xab, 0x32, 0x08, 0x84, 0xef, 0xcd, 0xa6, 0xe1, 0x96, 0xc7, 0x4b, 0x9e, - 0xdf, 0xef, 0x20, 0x5e, 0xd4, 0x5c, 0x55, 0x91, 0x8f, 0x27, 0xd3, 0x66, 0x56, 0xb6, 0x58, 0xb5, 0xde, 0x29, 0x13, - 0xe2, 0x6c, 0xb8, 0x8f, 0x49, 0x59, 0x46, 0xcf, 0x6b, 0xf4, 0xc5, 0x77, 0xf9, 0xd6, 0x49, 0x56, 0x11, 0x26, 0xb6, - 0xb0, 0xb3, 0x84, 0xf8, 0xb7, 0xca, 0x90, 0x85, 0x9c, 0x13, 0x64, 0xc0, 0x65, 0x4d, 0xc1, 0x80, 0x60, 0x1c, 0x58, - 0xda, 0x77, 0x3a, 0xa9, 0x22, 0x7d, 0xe9, 0x3f, 0x75, 0xbb, 0xe4, 0xd5, 0xf4, 0xb0, 0x22, 0x14, 0xed, 0xf4, 0xca, - 0x22, 0xf3, 0x96, 0x71, 0x64, 0xf3, 0xd5, 0x62, 0xbc, 0x51, 0x65, 0xab, 0x8a, 0xc8, 0xb5, 0x2e, 0x66, 0x55, 0x3f, - 0x3b, 0x9d, 0x4e, 0xcb, 0x82, 0x46, 0x57, 0x3b, 0x44, 0x61, 0xe1, 0x53, 0xd7, 0x75, 0xab, 0x63, 0xdf, 0x0e, 0x76, - 0x1b, 0xe5, 0xb6, 0x27, 0x8d, 0x23, 0x46, 0xd8, 0xee, 0x82, 0x5f, 0x1d, 0x1c, 0xb9, 0x53, 0x9c, 0xec, 0x92, 0x59, - 0xc4, 0x80, 0x19, 0x43, 0x04, 0x19, 0x5d, 0xa4, 0x7d, 0x9f, 0xa2, 0x0e, 0xc6, 0x51, 0x0e, 0x34, 0x1a, 0x0e, 0xd8, - 0x33, 0x30, 0x15, 0xf1, 0xc4, 0xae, 0x70, 0x35, 0x94, 0x87, 0xd7, 0x84, 0xf7, 0xe2, 0x23, 0x78, 0x50, 0x36, 0x75, - 0x99, 0x36, 0x4e, 0xab, 0xe7, 0xfe, 0xbe, 0x54, 0x4f, 0x83, 0x0b, 0x70, 0x23, 0x14, 0xda, 0x4c, 0x3e, 0x8b, 0xff, - 0x2f, 0xe5, 0xff, 0xaf, 0x96, 0xeb, 0xb2, 0xfd, 0xc8, 0x09, 0x48, 0xb4, 0x8b, 0xd3, 0xc2, 0x46, 0xdd, 0xb4, 0x07, - 0xa4, 0x95, 0xc1, 0x54, 0x55, 0xa0, 0x83, 0x92, 0xbe, 0x94, 0xfd, 0xa7, 0x41, 0xfc, 0x8e, 0x14, 0x33, 0x2c, 0x71, - 0x21, 0x42, 0x2c, 0x72, 0x57, 0xc2, 0x1c, 0xac, 0x97, 0x27, 0xa8, 0x3f, 0x28, 0xed, 0x09, 0xd0, 0xc6, 0xd7, 0xe6, - 0xb6, 0x97, 0xb8, 0xbf, 0xaa, 0xd7, 0x12, 0x1d, 0x03, 0xc8, 0x3c, 0x38, 0x84, 0x68, 0x48, 0xa0, 0x55, 0x36, 0x37, - 0x1b, 0xa5, 0x7c, 0xab, 0xea, 0xd9, 0xc4, 0xc0, 0xb0, 0xbb, 0xe6, 0x2a, 0xac, 0x6f, 0xa1, 0x2d, 0x80, 0xc9, 0xf2, - 0xed, 0x87, 0xcf, 0x36, 0x2c, 0xb1, 0xba, 0x1f, 0x3d, 0x5c, 0x72, 0xdc, 0xbf, 0x36, 0xde, 0x9d, 0x29, 0x3b, 0xff, - 0x28, 0x5f, 0xfc, 0xb6, 0x51, 0xa0, 0x77, 0x55, 0x92, 0xd0, 0x71, 0xa3, 0xef, 0x8e, 0xb9, 0x57, 0xed, 0x45, 0x10, - 0xed, 0x5f, 0x97, 0xac, 0xf7, 0xae, 0x0b, 0x17, 0xc6, 0xde, 0x95, 0xe1, 0xc6, 0x61, 0x96, 0x0b, 0xd9, 0xf0, 0x5b, - 0x45, 0xa0, 0xa8, 0xfa, 0xef, 0xea, 0xd8, 0x8a, 0x51, 0xf9, 0x57, 0x2b, 0x20, 0x3e, 0xf7, 0xca, 0xee, 0xa2, 0x89, - 0x04, 0x8d, 0xfa, 0xb1, 0x76, 0xa2, 0x1d, 0x77, 0xb5, 0x23, 0x57, 0x67, 0x5c, 0xd8, 0x50, 0xef, 0x75, 0x0a, 0xbf, - 0xbc, 0x43, 0x57, 0x3f, 0x3b, 0x9d, 0x89, 0x4b, 0x62, 0x1a, 0x84, 0x21, 0x43, 0x15, 0x60, 0xfe, 0x7b, 0x4b, 0xcb, - 0x6a, 0x16, 0x56, 0xc6, 0x8d, 0x40, 0x3a, 0xe2, 0x11, 0xce, 0x8e, 0x4f, 0x96, 0x7d, 0x3c, 0x1b, 0x6a, 0x21, 0x18, - 0x70, 0xb2, 0x52, 0xfc, 0x04, 0xdc, 0xc1, 0x63, 0xfd, 0xec, 0x14, 0xe2, 0x97, 0x6a, 0x93, 0xa1, 0xfe, 0x5d, 0xe7, - 0x58, 0xf3, 0x7a, 0x77, 0x76, 0xd7, 0x77, 0x6d, 0xcf, 0x39, 0xd4, 0x5c, 0xe7, 0xc8, 0xee, 0x38, 0xc7, 0x5a, 0xc7, - 0xe9, 0xc1, 0xbf, 0xbe, 0xe7, 0xbc, 0xd2, 0x5c, 0x78, 0xd2, 0x3c, 0xa7, 0x8b, 0xff, 0x76, 0x9c, 0xe3, 0xbb, 0x2e, - 0xbb, 0xe9, 0x89, 0xf4, 0x8e, 0xaa, 0x8c, 0x02, 0x7c, 0x39, 0xf4, 0x83, 0xb3, 0xd3, 0x55, 0x4a, 0xb5, 0xf5, 0x50, - 0x7f, 0xa5, 0x6b, 0xf3, 0x84, 0x4e, 0x87, 0xfa, 0x53, 0xa2, 0x94, 0x7a, 0x27, 0x8d, 0xc5, 0x9d, 0xe3, 0xc6, 0xe2, - 0xee, 0x51, 0x63, 0xf1, 0x61, 0xaf, 0x5c, 0x7c, 0x30, 0x63, 0xaf, 0x94, 0xf4, 0xa1, 0x0b, 0x92, 0x25, 0xc1, 0xda, - 0xf0, 0x34, 0x40, 0xd7, 0x36, 0xfc, 0x73, 0xdc, 0x31, 0x65, 0xab, 0x31, 0xb4, 0x92, 0xd0, 0x38, 0x3e, 0xd1, 0xbc, - 0xa3, 0x6f, 0x3a, 0x47, 0x3e, 0xd4, 0x83, 0x64, 0xb7, 0xf0, 0x77, 0xd7, 0x3d, 0xf1, 0x5d, 0x0d, 0x1a, 0x7a, 0xf0, - 0xdf, 0xbc, 0xd7, 0xf1, 0xd9, 0x83, 0x0b, 0xef, 0x3f, 0x78, 0xc7, 0xa9, 0x6b, 0x7b, 0xf0, 0xdf, 0xcf, 0x52, 0xe5, - 0x0e, 0x0a, 0x7f, 0xb5, 0xdf, 0x43, 0x57, 0xeb, 0x9e, 0xcc, 0x3b, 0xce, 0xab, 0xbb, 0x63, 0xe7, 0x64, 0xee, 0x1d, - 0x7f, 0x60, 0x4f, 0xa1, 0xdd, 0x71, 0x5e, 0xc1, 0xdf, 0x87, 0xae, 0x3b, 0xb7, 0x3d, 0xe7, 0xe4, 0xae, 0xeb, 0x74, - 0x43, 0xfb, 0xc8, 0x39, 0x81, 0xbf, 0x9f, 0x01, 0xbc, 0x00, 0x57, 0x9e, 0x9d, 0x58, 0x83, 0x8d, 0x51, 0xb1, 0xdf, - 0x50, 0x3f, 0xd2, 0x39, 0xd4, 0x7a, 0x87, 0xdf, 0x9c, 0xdc, 0xd9, 0x87, 0x73, 0xaf, 0x73, 0x67, 0xb7, 0xfe, 0xfc, - 0x00, 0x90, 0xdf, 0xbe, 0x70, 0x00, 0x46, 0x4c, 0x47, 0xf4, 0xbb, 0x91, 0x75, 0xd9, 0x26, 0x46, 0x7f, 0xbf, 0x5b, - 0x8c, 0xfe, 0xf5, 0x6a, 0x1f, 0x31, 0xfa, 0xfb, 0xcf, 0x2e, 0x46, 0xbf, 0xac, 0x5a, 0x71, 0xbf, 0xaf, 0xa6, 0x4d, - 0xf8, 0x71, 0x53, 0x25, 0x92, 0x03, 0x62, 0x5c, 0x5f, 0xad, 0x6e, 0x20, 0xe2, 0xd5, 0xfb, 0x78, 0xf8, 0xf5, 0xaa, - 0x64, 0xa2, 0x14, 0x03, 0x06, 0x78, 0x1f, 0x33, 0x0c, 0xf0, 0xa7, 0xd5, 0x10, 0xec, 0x22, 0xf8, 0xad, 0x19, 0x4c, - 0xec, 0x39, 0x09, 0xa7, 0xf2, 0xc6, 0x85, 0x92, 0x01, 0x16, 0x83, 0xdd, 0x3d, 0x5c, 0x26, 0xa0, 0xac, 0x59, 0x2d, - 0xa2, 0xb4, 0x7f, 0xe4, 0x02, 0x9a, 0xef, 0x4c, 0x93, 0xbc, 0xd2, 0xd8, 0x11, 0x31, 0xc2, 0x3e, 0x72, 0xcb, 0xfc, - 0xd6, 0xf7, 0x68, 0xb2, 0xd6, 0xdc, 0xbb, 0x57, 0xef, 0x57, 0x03, 0x5b, 0x10, 0x61, 0xd2, 0x07, 0xc4, 0x46, 0xd3, - 0xfb, 0xb2, 0xe1, 0x58, 0xc5, 0x54, 0xb0, 0x7d, 0xa4, 0x30, 0x92, 0x6a, 0x7b, 0xaf, 0x6c, 0x78, 0xb6, 0x6b, 0x9a, - 0x0d, 0x9f, 0x2f, 0x35, 0xdf, 0x62, 0xf5, 0x26, 0x3b, 0xae, 0x82, 0xaa, 0x92, 0xf4, 0xaf, 0x11, 0x20, 0x05, 0xed, - 0x59, 0x98, 0xc6, 0x15, 0x84, 0x8f, 0xab, 0xe1, 0x6d, 0xec, 0x2a, 0xef, 0x4a, 0x7d, 0xaa, 0xe6, 0x74, 0x2f, 0x36, - 0x48, 0x0f, 0x06, 0x3f, 0x03, 0x61, 0xc3, 0xef, 0xe3, 0x71, 0xac, 0xc2, 0x79, 0xa3, 0xf4, 0xcb, 0x48, 0xed, 0x7c, - 0xee, 0x6d, 0xea, 0xa4, 0x4d, 0xab, 0x21, 0xad, 0x47, 0x17, 0xe2, 0x8e, 0xc6, 0xcf, 0x33, 0xb3, 0xd5, 0x9c, 0x99, - 0x16, 0xa3, 0x65, 0xee, 0xb6, 0xce, 0x44, 0xbd, 0xa7, 0xb0, 0x89, 0x2d, 0xfe, 0xa0, 0xfa, 0x7f, 0x6f, 0xa6, 0x90, - 0xa0, 0xbd, 0x8f, 0x44, 0x84, 0x42, 0x41, 0x75, 0xd0, 0xc6, 0x76, 0xb0, 0xc5, 0xfc, 0x43, 0xed, 0x98, 0x77, 0x82, - 0xb6, 0xba, 0xdb, 0x2c, 0x46, 0xa4, 0x6b, 0xc3, 0xa6, 0xa4, 0x40, 0xf5, 0x7a, 0xc7, 0x96, 0x77, 0x64, 0x39, 0xc7, - 0x3d, 0x33, 0x17, 0x07, 0x4e, 0xed, 0xb2, 0x04, 0x10, 0x30, 0xd9, 0x95, 0xc3, 0x0c, 0xa2, 0x20, 0x0b, 0x48, 0x98, - 0x03, 0xaa, 0x2f, 0xd3, 0xbc, 0x7f, 0x5b, 0xa5, 0x19, 0xcc, 0x51, 0x90, 0x64, 0x68, 0xae, 0x6c, 0x8f, 0x69, 0x76, - 0x4f, 0x69, 0xd4, 0xa2, 0xca, 0xad, 0x5a, 0x3f, 0xff, 0x76, 0xb6, 0xa0, 0x39, 0xb3, 0xb3, 0x18, 0x67, 0x11, 0xdf, - 0x1f, 0xc2, 0x54, 0x37, 0x1f, 0x59, 0x3f, 0xb7, 0x21, 0xdc, 0xbf, 0xed, 0x46, 0xb8, 0x19, 0xdd, 0x07, 0xe1, 0xfe, - 0xed, 0xb3, 0x23, 0xdc, 0x9f, 0x55, 0x84, 0x5b, 0xf2, 0x54, 0x29, 0x64, 0xa2, 0x3f, 0xe0, 0xb3, 0x01, 0xf1, 0xc6, - 0x5f, 0xea, 0x07, 0x8c, 0xbc, 0xd4, 0x95, 0x3c, 0xd0, 0x1f, 0x4a, 0x89, 0xad, 0x90, 0x65, 0xc7, 0xd0, 0xc3, 0x2c, - 0x89, 0x0e, 0xe4, 0x48, 0x76, 0x85, 0xfb, 0x21, 0xf4, 0x79, 0x11, 0x65, 0xa1, 0xf3, 0x9e, 0xb3, 0x25, 0xa0, 0x82, - 0xf8, 0x3a, 0x4e, 0x16, 0x04, 0x83, 0x22, 0xea, 0x98, 0x10, 0x13, 0x1e, 0x5c, 0x70, 0x18, 0xf3, 0xe3, 0x68, 0x22, - 0xe5, 0xe8, 0x74, 0x78, 0xcd, 0xe8, 0x41, 0xfd, 0x81, 0x92, 0x44, 0xb7, 0xd8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xf7, - 0x45, 0xe7, 0xf0, 0xc5, 0x91, 0x0b, 0xff, 0xf3, 0x68, 0x37, 0xb7, 0x78, 0xc5, 0x45, 0x1c, 0x41, 0x4e, 0x1e, 0x51, - 0xb3, 0xad, 0xda, 0x3d, 0xa5, 0xb7, 0x45, 0xad, 0xe3, 0xe6, 0x4a, 0x13, 0xf2, 0x50, 0xd4, 0x69, 0xac, 0x31, 0x8f, - 0x57, 0xca, 0xb0, 0x1a, 0x46, 0x13, 0x44, 0x2b, 0x90, 0x0c, 0x29, 0x35, 0xd4, 0xd7, 0x7c, 0xba, 0xc5, 0xbc, 0x68, - 0x37, 0xbf, 0x29, 0x12, 0x7f, 0x89, 0x04, 0x44, 0x3b, 0x21, 0xc8, 0x85, 0xea, 0x2e, 0xa6, 0x0d, 0xc0, 0x68, 0x6f, - 0x1a, 0xa4, 0xdd, 0x14, 0x0b, 0x44, 0xd8, 0x02, 0x65, 0xc9, 0x2a, 0xf2, 0x0d, 0xfc, 0x49, 0xc6, 0xa9, 0x11, 0x1c, - 0x40, 0x4c, 0x5e, 0xfc, 0xb0, 0x89, 0xab, 0x46, 0xce, 0xdc, 0x22, 0x4b, 0x4a, 0x24, 0x56, 0x85, 0xbc, 0xc8, 0xac, - 0x84, 0xe5, 0x56, 0xc6, 0xa5, 0xb5, 0x87, 0xe4, 0x85, 0x6c, 0xf8, 0x22, 0xb3, 0x20, 0xbf, 0x31, 0x2c, 0xf7, 0xf3, - 0xe7, 0xac, 0x16, 0x64, 0x1c, 0x65, 0xd3, 0x3a, 0xf7, 0x65, 0x96, 0x42, 0x5d, 0x23, 0xb3, 0x58, 0xc7, 0x2c, 0x85, - 0x7d, 0xdf, 0x8a, 0x5f, 0xbe, 0x3c, 0x1b, 0x7a, 0x26, 0xcf, 0x97, 0x5b, 0x4a, 0xee, 0x76, 0xb9, 0x9f, 0x6a, 0xdc, - 0x6c, 0x74, 0xda, 0x5a, 0x06, 0xd1, 0x4c, 0x68, 0xa6, 0x25, 0xf6, 0x82, 0x64, 0x2b, 0x4c, 0x05, 0x46, 0x84, 0x8a, - 0x5a, 0xd4, 0xb9, 0xa3, 0x09, 0xe4, 0xfa, 0x1d, 0xea, 0x5d, 0xc7, 0x75, 0x5c, 0x5d, 0x36, 0x9c, 0x06, 0xb3, 0xe1, - 0x26, 0xce, 0x08, 0xa4, 0xad, 0x0a, 0xe3, 0x19, 0x78, 0x7e, 0x64, 0x41, 0x16, 0x42, 0x0e, 0x24, 0x70, 0x01, 0x59, - 0x30, 0xae, 0x31, 0xe7, 0xf6, 0xb8, 0x24, 0xb9, 0xc5, 0x3c, 0x98, 0xc2, 0xe9, 0x0b, 0x23, 0xcb, 0x7c, 0x07, 0x97, - 0xa1, 0xa1, 0x1b, 0x90, 0x85, 0x95, 0x26, 0xa9, 0xad, 0xda, 0xb7, 0xf7, 0x35, 0x68, 0x63, 0xea, 0x7c, 0x12, 0xd3, - 0x84, 0x2c, 0x20, 0x5d, 0xc0, 0x26, 0xb7, 0x38, 0xa6, 0xd5, 0x39, 0xaa, 0xd5, 0xbc, 0x57, 0x47, 0x96, 0xd6, 0xf1, - 0x2c, 0xcd, 0x05, 0x74, 0xab, 0xe7, 0xd6, 0x26, 0xbf, 0x19, 0xec, 0x52, 0xd1, 0x31, 0xfc, 0xf2, 0x94, 0xcd, 0x83, - 0x29, 0xe7, 0xb8, 0xf0, 0x33, 0x63, 0x41, 0x3d, 0x0d, 0x25, 0x90, 0x7f, 0xc0, 0xc4, 0xf4, 0x57, 0x74, 0x9d, 0x99, - 0x98, 0x23, 0x88, 0x57, 0x09, 0xcc, 0x0d, 0xba, 0xa6, 0x05, 0x91, 0x16, 0x7c, 0xfa, 0x64, 0x04, 0x60, 0x7e, 0x3f, - 0x54, 0xe0, 0x03, 0xcf, 0x66, 0x09, 0x60, 0x41, 0xa1, 0x58, 0x42, 0x60, 0x81, 0x6f, 0x0c, 0xfc, 0x5b, 0x14, 0x8b, - 0x1f, 0x5c, 0xb1, 0xe7, 0x84, 0x24, 0x9a, 0x01, 0x4a, 0x23, 0xd1, 0xac, 0x66, 0x40, 0xc0, 0xbc, 0xeb, 0x2a, 0xa5, - 0x45, 0x57, 0x85, 0x72, 0x3f, 0xfd, 0xea, 0xe1, 0x8a, 0xe5, 0x40, 0x33, 0x74, 0xb8, 0xe5, 0xd0, 0x15, 0xac, 0xd0, - 0x3d, 0xbc, 0x1c, 0x7e, 0x71, 0xba, 0xa0, 0x19, 0x61, 0x82, 0x4b, 0x60, 0xf1, 0x80, 0x1c, 0xd0, 0x7c, 0x91, 0xbf, - 0x98, 0x31, 0x78, 0x13, 0x7a, 0x17, 0xf8, 0x9c, 0x4f, 0xb3, 0x34, 0x7e, 0x4f, 0xd9, 0x68, 0xa3, 0x34, 0xf4, 0x2c, - 0x66, 0x22, 0xeb, 0x13, 0x0c, 0xfd, 0x39, 0x8c, 0x62, 0xfd, 0xec, 0x0b, 0xe9, 0x4d, 0xd4, 0xb6, 0x08, 0x90, 0x88, - 0xf4, 0x3a, 0xa1, 0xe1, 0xdf, 0x87, 0x5f, 0xc0, 0xc5, 0xfd, 0xc5, 0x8d, 0x6e, 0x0e, 0x32, 0x07, 0xf9, 0x98, 0x2f, - 0x1a, 0x12, 0x72, 0x22, 0x8f, 0xca, 0x99, 0xcd, 0xae, 0xc2, 0x6c, 0xc2, 0xef, 0xdd, 0xac, 0x2b, 0xb8, 0xa9, 0x3e, - 0x84, 0xf4, 0x0c, 0xb8, 0x8b, 0x4d, 0x89, 0xe7, 0xf4, 0x06, 0xc8, 0xa0, 0x8e, 0x43, 0xe2, 0xdf, 0x0a, 0x0e, 0x55, - 0x7d, 0xd8, 0x87, 0x17, 0x95, 0x94, 0x5d, 0xe3, 0x5e, 0xc6, 0xad, 0xbc, 0xc1, 0x2f, 0xe3, 0xa7, 0xee, 0xe7, 0x41, - 0x26, 0x99, 0x61, 0x7c, 0xc8, 0xd1, 0x37, 0x16, 0xc6, 0x57, 0xb0, 0x3f, 0xc0, 0xa0, 0x7a, 0x27, 0xdf, 0xf4, 0xee, - 0x3c, 0x77, 0xde, 0xf1, 0x1c, 0x60, 0x73, 0xe6, 0x5d, 0xe7, 0x38, 0xb4, 0xbb, 0xce, 0x31, 0xfc, 0x7d, 0x00, 0xd6, - 0xcb, 0xee, 0x38, 0x87, 0x1f, 0xbc, 0x4e, 0x68, 0x9f, 0x38, 0xc7, 0xf0, 0x77, 0xc9, 0x5a, 0xfd, 0x88, 0x4c, 0x0f, - 0x30, 0x3c, 0x5f, 0x94, 0xb0, 0x80, 0xf2, 0x5b, 0x6a, 0x11, 0xac, 0xd2, 0xf5, 0xd6, 0xa0, 0x89, 0x00, 0x94, 0xa1, - 0x5b, 0x22, 0x4a, 0x60, 0x3a, 0x30, 0xd2, 0x21, 0xcf, 0x6d, 0x21, 0x0c, 0x32, 0x84, 0xd7, 0xa4, 0xc8, 0xbc, 0xd0, - 0x78, 0x8c, 0x78, 0x9b, 0xe6, 0x30, 0xfb, 0x22, 0x69, 0x1a, 0x53, 0x5d, 0xfc, 0x79, 0x89, 0xf1, 0x71, 0xa8, 0x59, - 0xc3, 0x4a, 0x45, 0xe2, 0xce, 0x7c, 0xf7, 0xc0, 0xd1, 0x6f, 0x94, 0xca, 0xc4, 0x51, 0x9f, 0xb5, 0x6f, 0xae, 0xce, - 0x90, 0xbd, 0xff, 0xd2, 0x7e, 0x30, 0x5f, 0x32, 0xeb, 0x47, 0x44, 0xd8, 0x9d, 0x04, 0x89, 0x1c, 0x9e, 0x82, 0xa2, - 0xbd, 0xe6, 0xfc, 0x04, 0x26, 0x64, 0xd8, 0xb9, 0x00, 0x2a, 0xf9, 0x8e, 0x84, 0x8a, 0xe9, 0x85, 0xd2, 0xf2, 0x89, - 0xc4, 0xfc, 0xcf, 0x9f, 0x17, 0x83, 0xb3, 0x2b, 0xe3, 0x3e, 0xf5, 0x7a, 0x70, 0xed, 0xf6, 0x68, 0x77, 0xab, 0x15, - 0xd0, 0xee, 0x10, 0xcd, 0x45, 0x3c, 0x49, 0xa1, 0xe9, 0x17, 0x3a, 0xc6, 0x56, 0x53, 0xa4, 0x9a, 0x86, 0x11, 0xc2, - 0x5b, 0x57, 0x58, 0x1d, 0xdd, 0x1c, 0xa4, 0xfb, 0x84, 0xa5, 0xe6, 0xbc, 0x98, 0x0e, 0xa0, 0xd9, 0x32, 0x8f, 0x1d, - 0x2e, 0x8d, 0xff, 0xee, 0x49, 0xa0, 0x7b, 0x11, 0x68, 0xf8, 0x2a, 0xa7, 0xb5, 0xe4, 0x6e, 0x22, 0xef, 0x55, 0x76, - 0xa1, 0xd2, 0xf4, 0x5c, 0x87, 0x22, 0x48, 0xbd, 0x86, 0xd9, 0x16, 0xa5, 0x79, 0x93, 0xbc, 0x2d, 0x8a, 0x02, 0x2b, - 0x80, 0xc8, 0xef, 0x86, 0x70, 0x75, 0x32, 0x9f, 0x3f, 0x6f, 0xbd, 0x84, 0x98, 0x3a, 0x59, 0x4d, 0x3a, 0xab, 0xab, - 0xf8, 0x4d, 0x57, 0x51, 0x8c, 0xec, 0x17, 0xb1, 0x86, 0xb0, 0xca, 0x62, 0x7b, 0x0f, 0x7f, 0x8e, 0x29, 0xc9, 0x1c, - 0xae, 0x07, 0x31, 0x94, 0xcb, 0xdd, 0xf2, 0x68, 0x17, 0xec, 0xb1, 0x78, 0x18, 0x2d, 0x1e, 0x33, 0xee, 0xd9, 0xe6, - 0xc3, 0x8a, 0xfb, 0x21, 0x43, 0x1f, 0x9f, 0xdc, 0x22, 0x06, 0xca, 0xbb, 0x8c, 0xb0, 0x40, 0x19, 0xea, 0x95, 0x1b, - 0x67, 0x44, 0xa4, 0x38, 0x02, 0xba, 0x7c, 0xd0, 0xa8, 0x30, 0x54, 0x7c, 0x95, 0xcf, 0xde, 0x5d, 0x7d, 0xa9, 0xf1, - 0xfd, 0xcf, 0xf4, 0x5b, 0xc8, 0xc8, 0xb0, 0x5c, 0x17, 0x43, 0x96, 0xeb, 0x42, 0xe3, 0x59, 0x67, 0x20, 0x63, 0x44, - 0x7e, 0xc0, 0x20, 0xa8, 0x6b, 0x34, 0xf2, 0x99, 0xd6, 0x6f, 0xb1, 0x0a, 0xb3, 0x60, 0x49, 0x92, 0xec, 0x00, 0x9a, - 0xda, 0x80, 0xe4, 0xf4, 0x36, 0x0f, 0x66, 0xa6, 0x38, 0x14, 0x42, 0xb5, 0x2c, 0x12, 0x9a, 0xc3, 0x69, 0x10, 0x4a, - 0xc5, 0xa1, 0xf8, 0x00, 0xf1, 0x7d, 0xba, 0xcc, 0x86, 0x3a, 0x59, 0x42, 0xce, 0x13, 0x0c, 0x63, 0x7a, 0x10, 0xfb, - 0x19, 0xcd, 0xec, 0x34, 0x4b, 0x28, 0x59, 0xe8, 0x32, 0x64, 0x67, 0xbd, 0xbf, 0x74, 0x35, 0x5e, 0x04, 0x99, 0x8c, - 0x79, 0xc7, 0x26, 0x08, 0x2a, 0x3c, 0x18, 0x22, 0x84, 0x33, 0x60, 0x20, 0xbc, 0x8c, 0x67, 0x95, 0x1d, 0x55, 0x50, - 0x2e, 0xe7, 0x4a, 0x5c, 0x09, 0x10, 0x8e, 0xfa, 0x71, 0xf8, 0x91, 0x7b, 0x5d, 0xcb, 0xd0, 0x7c, 0xfa, 0xd9, 0x29, - 0x67, 0x6f, 0x35, 0x0c, 0x14, 0xa0, 0xf7, 0x5c, 0x08, 0x36, 0xdb, 0xe6, 0x8f, 0x7d, 0xc0, 0x2b, 0xab, 0x91, 0x15, - 0xfa, 0x97, 0x7c, 0x2c, 0x57, 0x40, 0x08, 0x95, 0x54, 0xbc, 0x73, 0xef, 0x4c, 0x3a, 0x00, 0xe1, 0xa8, 0x90, 0x56, - 0xfa, 0xf4, 0xe9, 0xf5, 0xe8, 0x9f, 0xff, 0x80, 0x14, 0x04, 0x73, 0x4f, 0x78, 0x41, 0x5f, 0xab, 0xb5, 0x38, 0xf5, - 0x69, 0x8d, 0x50, 0xbd, 0x4f, 0x27, 0x22, 0x2a, 0x8c, 0xd8, 0x5a, 0xf9, 0xe8, 0x46, 0x44, 0x6c, 0x82, 0x34, 0x23, - 0xa6, 0xf0, 0xd5, 0x1e, 0xc1, 0xf2, 0x8e, 0x44, 0x88, 0x00, 0xed, 0xa7, 0xf5, 0x57, 0xc7, 0x9a, 0x5e, 0xe4, 0x0e, - 0x68, 0xd0, 0x41, 0xb3, 0x3d, 0x74, 0x76, 0x4a, 0xb8, 0xf0, 0x15, 0xc8, 0x8f, 0xb4, 0x7f, 0x00, 0xd3, 0x9c, 0xc7, - 0x0b, 0xea, 0x04, 0xf1, 0xc1, 0x3d, 0x1d, 0xdb, 0x64, 0x19, 0x30, 0xf9, 0x32, 0xca, 0xdd, 0x34, 0x46, 0xf9, 0x49, - 0x05, 0x2d, 0xa3, 0xaf, 0xf3, 0x02, 0x94, 0x71, 0x01, 0x28, 0xf8, 0x49, 0xce, 0xca, 0x71, 0xf8, 0x1c, 0x91, 0x17, - 0xa2, 0x8c, 0xe5, 0xcf, 0x59, 0x38, 0x3d, 0x11, 0x39, 0xaf, 0x78, 0xb0, 0xe3, 0xe9, 0x54, 0x8d, 0x9d, 0xe7, 0x94, - 0xbf, 0x2f, 0xa1, 0x52, 0xec, 0xd9, 0x78, 0xc9, 0xbe, 0x54, 0xff, 0x84, 0xfc, 0x09, 0xb1, 0x40, 0x78, 0x98, 0x45, - 0x38, 0xcf, 0xb5, 0x18, 0x7c, 0x12, 0x24, 0x4f, 0x59, 0x25, 0x8e, 0x28, 0xaa, 0xd1, 0xd9, 0x5b, 0x48, 0x93, 0x27, - 0xc3, 0x21, 0xc3, 0x63, 0x55, 0x74, 0x06, 0x50, 0x6a, 0xc8, 0x91, 0x01, 0x93, 0xcd, 0xa0, 0xa1, 0xcd, 0x3c, 0xb8, - 0xb0, 0x51, 0x75, 0x3a, 0xf5, 0x31, 0x1e, 0x10, 0xb1, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5f, 0x58, 0x40, 0xe0, - 0xa2, 0x9f, 0x0a, 0x1e, 0xd7, 0xfe, 0xc0, 0x50, 0xb6, 0x1d, 0x92, 0x87, 0x58, 0xd1, 0xac, 0x73, 0x27, 0xfb, 0x4b, - 0x2c, 0xbd, 0x12, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0xb3, 0x00, 0xd4, 0x4f, 0x93, 0x1a, 0xb6, 0x7f, 0xd7, 0x61, 0x52, - 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xf4, 0x00, 0xe6, 0x07, 0x81, - 0x01, 0x4a, 0x94, 0x51, 0x60, 0x42, 0xf4, 0x01, 0x92, 0x32, 0xeb, 0x80, 0x8b, 0x89, 0x20, 0xea, 0x90, 0x73, 0x94, - 0x41, 0x3e, 0x4b, 0x55, 0xea, 0xc4, 0x8a, 0xdb, 0x4c, 0xe5, 0xed, 0xce, 0xc0, 0xf1, 0xa7, 0x15, 0xa6, 0xdf, 0xc8, - 0x07, 0x19, 0x15, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x46, 0xb0, 0x6e, 0xa9, 0x50, 0xec, 0xe3, - 0x6d, 0xb5, 0x0a, 0xd2, 0x48, 0x56, 0x5b, 0x12, 0x43, 0x7f, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, 0x65, - 0x36, 0x84, 0xaa, 0x42, 0xd8, 0x4e, 0x96, 0x4b, 0x56, 0xd9, 0x1c, 0x9c, 0x1e, 0x30, 0xbe, 0xf3, 0x8c, 0xed, 0xb0, - 0xb3, 0x53, 0xb0, 0x2e, 0x64, 0x8b, 0x4e, 0x96, 0x4b, 0xbe, 0xa4, 0xec, 0x17, 0x7b, 0x73, 0x30, 0xcf, 0x16, 0xe1, - 0xd9, 0xff, 0x01, 0xff, 0xd7, 0x9f, 0x05, 0x1b, 0x5f, 0x03, 0x00}; + 0x1e, 0x7f, 0xcb, 0xc7, 0x6c, 0x61, 0x3c, 0x35, 0x6f, 0xaf, 0x16, 0x93, 0xc1, 0xe0, 0xd6, 0xdf, 0xdf, 0xf3, 0x70, + 0x76, 0x3b, 0x67, 0xd7, 0xfc, 0x9e, 0x16, 0xd3, 0x44, 0x35, 0xbd, 0x78, 0x4c, 0xf0, 0xba, 0xf5, 0xfd, 0x89, 0xc5, + 0xff, 0x6a, 0x5f, 0x34, 0x6f, 0xfd, 0x81, 0xb4, 0x46, 0xcb, 0x5d, 0xfd, 0xfd, 0xe3, 0x8a, 0x89, 0x5b, 0x10, 0x2f, + 0xde, 0xdb, 0x9a, 0x86, 0xb7, 0xfc, 0xa3, 0x77, 0xed, 0x4f, 0xaf, 0x75, 0xcc, 0xcd, 0x44, 0x1d, 0x49, 0x6f, 0x2f, + 0x9e, 0xb3, 0x5f, 0xf9, 0x27, 0x79, 0x9c, 0x7c, 0x11, 0x72, 0xd2, 0xde, 0x20, 0x77, 0x13, 0x9d, 0x12, 0xef, 0xdc, + 0x44, 0xc2, 0x82, 0x40, 0x18, 0x8e, 0x9a, 0x3f, 0x4c, 0xca, 0xa9, 0xb7, 0x03, 0x6e, 0x57, 0x6e, 0xeb, 0x9f, 0x6f, + 0x39, 0xe7, 0x8b, 0xe1, 0xe5, 0xf4, 0x5d, 0xb7, 0x4b, 0x8f, 0x8a, 0x66, 0x53, 0x81, 0x6e, 0xb7, 0x18, 0x7b, 0x75, + 0x32, 0xb3, 0xcc, 0x25, 0x5f, 0x7a, 0x57, 0x9b, 0x99, 0xc7, 0xf4, 0x7e, 0x33, 0xcd, 0x90, 0xc8, 0x17, 0x08, 0x99, + 0x0e, 0x87, 0xbb, 0x73, 0x2c, 0x8f, 0x0f, 0xdf, 0x3e, 0x7b, 0x32, 0x78, 0x82, 0x91, 0x5b, 0x56, 0x34, 0xc8, 0x3b, + 0x3e, 0xcc, 0xea, 0xd6, 0x6d, 0xe3, 0xe2, 0xf9, 0xf0, 0x17, 0xc8, 0x1b, 0x74, 0x3d, 0x34, 0x45, 0xb4, 0xca, 0xef, + 0x28, 0xfa, 0x44, 0xc9, 0x41, 0xc7, 0x13, 0xa8, 0x1d, 0x52, 0xe0, 0xbe, 0x7b, 0xc6, 0x41, 0xbf, 0x81, 0xa5, 0xf6, + 0xfb, 0xe7, 0x9f, 0x88, 0x47, 0x1a, 0xc6, 0xfb, 0xfb, 0x30, 0xfa, 0x23, 0x2e, 0x8b, 0x35, 0x9c, 0xae, 0x03, 0xf8, + 0xdc, 0x33, 0x7d, 0xfb, 0xba, 0xf3, 0x7d, 0x3f, 0xf0, 0xb6, 0xfc, 0x86, 0xbd, 0xe3, 0xde, 0xe5, 0xf0, 0xad, 0xff, + 0xec, 0x09, 0x88, 0x4e, 0x30, 0x2e, 0x9f, 0x31, 0x12, 0xb6, 0xa3, 0x18, 0xb5, 0x0a, 0x3f, 0xd7, 0x10, 0xa2, 0xf5, + 0x09, 0x19, 0xbb, 0x20, 0xfd, 0x83, 0x02, 0xf4, 0x13, 0x02, 0xab, 0x49, 0x6a, 0x14, 0x98, 0xc4, 0xb7, 0x35, 0x24, + 0x90, 0x82, 0x05, 0x42, 0x6f, 0xa0, 0xf8, 0x54, 0xf0, 0x77, 0xc3, 0xcf, 0x24, 0xf9, 0x2d, 0x6a, 0x3e, 0x86, 0xbf, + 0x61, 0x68, 0x26, 0xd5, 0x43, 0x5a, 0x47, 0x89, 0xf7, 0x93, 0xbf, 0x8f, 0xc2, 0x4a, 0xa8, 0x63, 0x21, 0x48, 0xc5, + 0x90, 0x0b, 0x71, 0xf1, 0x7c, 0x72, 0x5b, 0x8a, 0xf0, 0x8f, 0x09, 0x3e, 0x93, 0x0b, 0x4d, 0x3e, 0xa3, 0x27, 0x8d, + 0x7c, 0xff, 0x41, 0xbe, 0x2f, 0x3b, 0x35, 0x58, 0xd4, 0x43, 0x7e, 0x5b, 0xbb, 0xef, 0xcb, 0x29, 0x41, 0x8f, 0xec, + 0x07, 0x34, 0x05, 0x03, 0x35, 0x01, 0x29, 0x43, 0x70, 0x0b, 0x57, 0x7d, 0x4f, 0x15, 0xe4, 0xcb, 0xef, 0x7d, 0x16, + 0x32, 0x5c, 0x65, 0x41, 0x48, 0x72, 0xa9, 0x90, 0xc2, 0xc6, 0x6d, 0x3d, 0xf8, 0xac, 0x31, 0x49, 0x24, 0xe4, 0x94, + 0x80, 0x24, 0x69, 0x6f, 0x20, 0x49, 0xc4, 0xf4, 0x1f, 0xae, 0x93, 0xa6, 0x59, 0x49, 0xe9, 0x86, 0x38, 0x55, 0xaf, + 0x91, 0xe6, 0x2c, 0x78, 0xcf, 0x60, 0xe9, 0x48, 0xb1, 0xe2, 0x9d, 0x31, 0x18, 0xeb, 0x60, 0xa1, 0x3b, 0x59, 0xdc, + 0xaf, 0x92, 0x30, 0x8d, 0x44, 0x95, 0x2f, 0x42, 0xfe, 0xfc, 0x97, 0x12, 0x7f, 0xf4, 0x96, 0x06, 0x22, 0x10, 0xfc, + 0x00, 0xad, 0x07, 0xac, 0xf1, 0xe0, 0x27, 0x56, 0x97, 0x61, 0x5e, 0x65, 0x54, 0xde, 0x6c, 0xc7, 0xb6, 0x73, 0xa6, + 0xaa, 0x16, 0x7c, 0x16, 0x86, 0x16, 0xed, 0x6c, 0xd5, 0x9c, 0xdc, 0xe6, 0x0d, 0xbe, 0x33, 0x49, 0x22, 0xb5, 0x94, + 0x44, 0xda, 0xea, 0xfa, 0x74, 0xe9, 0x75, 0x8b, 0x0a, 0x1a, 0x23, 0x40, 0x2f, 0x49, 0x77, 0x95, 0x4f, 0x28, 0x5e, + 0x59, 0x0d, 0xab, 0xe1, 0xa5, 0x43, 0x11, 0xc6, 0xda, 0x9b, 0x2b, 0x79, 0x76, 0x07, 0xd6, 0x23, 0xb4, 0x76, 0x55, + 0xea, 0x10, 0xb6, 0x9f, 0xe8, 0x3d, 0xa7, 0x52, 0x7f, 0x03, 0xaa, 0xc0, 0xa9, 0xa3, 0xa1, 0x3e, 0x6a, 0xa7, 0x90, + 0xed, 0xdc, 0x5b, 0x12, 0x54, 0xae, 0xe4, 0xa6, 0x4a, 0x8b, 0x52, 0xca, 0x94, 0xaf, 0x65, 0xb6, 0xb2, 0xfb, 0x64, + 0x00, 0xf1, 0x6c, 0x50, 0x20, 0xb9, 0xa8, 0xad, 0xe6, 0x20, 0x7d, 0x34, 0x4b, 0x1c, 0x6b, 0x07, 0x85, 0x97, 0x55, + 0x60, 0xe6, 0x32, 0x97, 0xcb, 0x41, 0xc1, 0x72, 0xbd, 0xd5, 0x4c, 0x33, 0xd5, 0x17, 0xb9, 0xbd, 0xcd, 0x78, 0x99, + 0xfe, 0x9b, 0x25, 0x03, 0x1e, 0x5d, 0x3c, 0xf7, 0x03, 0x48, 0x93, 0xbc, 0x0e, 0x90, 0x04, 0x9b, 0x83, 0x5d, 0xec, + 0x30, 0x6c, 0x15, 0x2b, 0x7b, 0xf2, 0x74, 0xb9, 0x43, 0x53, 0x2e, 0x61, 0x24, 0x27, 0xe6, 0x52, 0xea, 0xfb, 0x92, + 0xea, 0x86, 0x82, 0x93, 0x4d, 0x13, 0x50, 0x0a, 0x68, 0xb7, 0xe0, 0xbf, 0xf0, 0xa9, 0xa1, 0xd3, 0x02, 0x2c, 0xb5, + 0xdd, 0x80, 0xff, 0x42, 0xbf, 0xd8, 0x3e, 0xa2, 0x7e, 0x60, 0x1e, 0xec, 0xcd, 0xda, 0xca, 0x18, 0x10, 0x91, 0xb8, + 0x82, 0x3c, 0x12, 0xfc, 0xa0, 0xd8, 0xd3, 0x65, 0xe2, 0xc0, 0x99, 0xe2, 0x62, 0x29, 0xb5, 0x99, 0x79, 0xed, 0xb7, + 0xd4, 0xc4, 0x9b, 0x28, 0x89, 0x0a, 0xdb, 0x21, 0x8d, 0x5e, 0x52, 0xc6, 0x54, 0xc1, 0x86, 0xe8, 0xbe, 0x6e, 0x82, + 0x29, 0xf0, 0xa6, 0xaa, 0x02, 0x22, 0xd4, 0x5e, 0x64, 0x79, 0x7e, 0xd3, 0x05, 0x56, 0x17, 0x7c, 0x6c, 0x4c, 0xb3, + 0x0b, 0x56, 0x72, 0x35, 0x93, 0x3e, 0xf3, 0x76, 0xa0, 0x85, 0xbc, 0xcb, 0xcb, 0xa2, 0x15, 0xba, 0x1e, 0x44, 0x0b, + 0x7f, 0xaf, 0x39, 0x1e, 0x3d, 0xdb, 0x56, 0x53, 0x9b, 0x7d, 0xad, 0xc5, 0x02, 0x19, 0x88, 0x86, 0xbe, 0x90, 0x33, + 0x0a, 0x77, 0x95, 0xe6, 0x6a, 0xb5, 0xaf, 0xca, 0x20, 0x81, 0x89, 0x20, 0x6b, 0x59, 0x78, 0x8f, 0xee, 0xd5, 0x23, + 0xcd, 0x2b, 0x09, 0x9e, 0xb9, 0xf8, 0x0b, 0x00, 0xa1, 0x3c, 0x49, 0xc8, 0x01, 0x39, 0x80, 0xbf, 0xa5, 0x28, 0x95, + 0x06, 0xf8, 0x67, 0x75, 0x39, 0xb6, 0xf5, 0xfd, 0x9d, 0x56, 0x31, 0xb8, 0xfe, 0x7c, 0xdd, 0xf5, 0xac, 0x1d, 0xe2, + 0x5c, 0xd9, 0xea, 0xb5, 0x65, 0x9a, 0xc7, 0x48, 0x5d, 0x03, 0x70, 0x27, 0xd2, 0x23, 0x10, 0xc9, 0x4c, 0x34, 0xc8, + 0xd9, 0x0b, 0x3e, 0x9e, 0x8a, 0xc7, 0xa4, 0xbd, 0xca, 0xf7, 0xcd, 0x85, 0x3e, 0x18, 0x63, 0xdf, 0x82, 0x06, 0xf1, + 0xd1, 0x6a, 0x6b, 0x05, 0x62, 0xbd, 0x55, 0xea, 0x43, 0x37, 0x46, 0x41, 0x07, 0x8f, 0xb8, 0x91, 0x0b, 0x8e, 0xed, + 0xae, 0xad, 0xa7, 0xf4, 0x15, 0x80, 0xb9, 0x0e, 0x54, 0x32, 0x0c, 0x52, 0xe7, 0x89, 0xc2, 0x24, 0x3f, 0x4f, 0x48, + 0x42, 0x44, 0x75, 0xb6, 0x1c, 0xa5, 0xdc, 0xb4, 0x80, 0xcb, 0x8c, 0x0c, 0x30, 0x9b, 0x34, 0xeb, 0x27, 0x97, 0x2f, + 0x41, 0x2a, 0x0d, 0x11, 0xdc, 0xb0, 0xbd, 0x64, 0x74, 0xeb, 0xa8, 0x1b, 0x54, 0x49, 0xe6, 0xfa, 0xcd, 0xed, 0x2c, + 0x52, 0xe6, 0xcd, 0x47, 0x18, 0x6b, 0xf2, 0x21, 0xac, 0x13, 0xfc, 0x36, 0x40, 0x25, 0x7d, 0x2a, 0xbc, 0x68, 0x04, + 0x10, 0xea, 0x3b, 0x55, 0xc6, 0xa7, 0xc2, 0xcb, 0x46, 0x5b, 0x96, 0x51, 0x0a, 0xd5, 0x05, 0xb3, 0x5b, 0xd3, 0x85, + 0xe8, 0x56, 0xd5, 0x40, 0x1b, 0xb8, 0x76, 0x1d, 0x28, 0xa0, 0xa1, 0xda, 0x95, 0x1b, 0x16, 0x80, 0xd5, 0x4c, 0x04, + 0x86, 0xcb, 0xbf, 0xcf, 0x5f, 0xa9, 0x18, 0x9e, 0x7e, 0x3f, 0xf4, 0xf6, 0xdb, 0x20, 0x1a, 0x6d, 0x2f, 0xd9, 0x2e, + 0x88, 0x46, 0xbb, 0xcb, 0x86, 0xd1, 0xef, 0xe7, 0xf4, 0xfb, 0x79, 0x03, 0x3a, 0x12, 0x61, 0xc2, 0xec, 0xf5, 0x1b, + 0xb5, 0x7c, 0xa5, 0xd6, 0xef, 0xd4, 0xf2, 0xa5, 0x1a, 0xde, 0xda, 0x93, 0x44, 0x10, 0x59, 0xaa, 0x9a, 0x07, 0x49, + 0x91, 0x6a, 0xe9, 0x72, 0x8c, 0x16, 0x23, 0x6a, 0x29, 0x6b, 0x8e, 0x75, 0x22, 0xed, 0x1c, 0x94, 0x0c, 0x70, 0xb4, + 0xb8, 0xaa, 0x31, 0xdd, 0xac, 0x68, 0x09, 0xc4, 0x08, 0x2b, 0xdb, 0x72, 0x71, 0x93, 0xfa, 0xe8, 0x9c, 0x7c, 0xdb, + 0x2a, 0xe5, 0xdb, 0x56, 0xf0, 0xfc, 0x2b, 0x0a, 0xe5, 0x92, 0x6b, 0xd7, 0xb2, 0x69, 0xa1, 0x14, 0xca, 0xb8, 0x06, + 0x5b, 0xfb, 0x26, 0x30, 0x64, 0x3e, 0x52, 0xd4, 0xd8, 0x5e, 0x34, 0xca, 0x21, 0xc8, 0xd6, 0xc1, 0xa8, 0x53, 0x16, + 0x2c, 0xbe, 0xdd, 0x21, 0x03, 0x19, 0xe8, 0xa8, 0x6a, 0xe3, 0xd5, 0xce, 0x4a, 0x7f, 0x58, 0x5e, 0x3c, 0x67, 0x89, + 0x95, 0x4e, 0x7e, 0x53, 0xa1, 0x3f, 0x08, 0xd1, 0x37, 0x65, 0xc3, 0xc1, 0x8b, 0x2e, 0xb6, 0x32, 0x20, 0xde, 0x30, + 0xbd, 0xb7, 0xb1, 0x92, 0xe5, 0xae, 0x29, 0x5f, 0xcc, 0x78, 0xc2, 0x71, 0xf4, 0xe5, 0x6a, 0x11, 0xd6, 0x6a, 0x91, + 0x9d, 0x00, 0x0f, 0xad, 0xd5, 0x52, 0xc8, 0xd5, 0x22, 0x9c, 0x99, 0x2e, 0xd4, 0x4c, 0xcf, 0x40, 0xf3, 0x28, 0xd4, + 0x2c, 0x4f, 0x00, 0x0b, 0x5e, 0x98, 0x19, 0x2e, 0xcc, 0x0c, 0xc7, 0x21, 0x35, 0x4e, 0x0f, 0x7a, 0xaf, 0x73, 0xcf, + 0x2d, 0x77, 0xa3, 0xd3, 0x30, 0x6f, 0x47, 0x1b, 0xcc, 0xf1, 0x41, 0x38, 0x81, 0xf8, 0xc0, 0x12, 0x01, 0x7a, 0x34, + 0xac, 0x8e, 0x1a, 0x2a, 0x47, 0xf1, 0x65, 0x01, 0x48, 0x96, 0x04, 0x20, 0xb9, 0x57, 0xe3, 0x5c, 0x5a, 0x7e, 0x5d, + 0x25, 0x21, 0x47, 0x64, 0xbc, 0x94, 0x76, 0xf7, 0x84, 0x97, 0x23, 0x23, 0x34, 0x4f, 0x16, 0xa9, 0x97, 0xb3, 0x8c, + 0x8d, 0x11, 0xb8, 0x28, 0xf4, 0x9b, 0xaa, 0xdf, 0x4f, 0x4b, 0x2f, 0xa7, 0x76, 0x7e, 0x02, 0x7f, 0xcb, 0x53, 0x67, + 0x91, 0x23, 0xe4, 0xd5, 0xc8, 0x24, 0x2c, 0x2f, 0x95, 0x7a, 0xfa, 0x12, 0x66, 0x50, 0x77, 0x6f, 0x14, 0x80, 0x6b, + 0x91, 0x4b, 0xa7, 0xda, 0x12, 0xae, 0x4c, 0xb9, 0xc1, 0x3e, 0x0f, 0x79, 0x4e, 0x42, 0xa8, 0x44, 0x1e, 0x29, 0xac, + 0xfb, 0xf6, 0xc5, 0xf3, 0x89, 0xeb, 0xc3, 0x62, 0xa3, 0x11, 0x1c, 0x0e, 0x00, 0x73, 0x30, 0xf5, 0xa2, 0x01, 0x2f, + 0xd5, 0x9c, 0xf9, 0xe8, 0xe5, 0x84, 0x8d, 0x01, 0x6a, 0x8a, 0x81, 0x53, 0xd6, 0x33, 0xf9, 0xc8, 0xf8, 0x96, 0xf9, + 0x7e, 0x80, 0xef, 0xd6, 0x85, 0x84, 0x7c, 0x50, 0xa8, 0x04, 0x99, 0x42, 0x25, 0x48, 0x0c, 0x2a, 0x41, 0x6c, 0x50, + 0x09, 0x36, 0x0d, 0x5f, 0x4b, 0xe5, 0x6d, 0x04, 0x1c, 0x11, 0x3e, 0xf4, 0x2c, 0x6c, 0xac, 0x50, 0x3c, 0x1b, 0xb3, + 0x31, 0x2b, 0xd4, 0xce, 0x93, 0xcb, 0xa9, 0xd8, 0x59, 0x8c, 0x75, 0x13, 0x59, 0x26, 0x5e, 0x48, 0xd0, 0x71, 0xce, + 0x85, 0x44, 0x5d, 0xfd, 0xdc, 0x7b, 0x49, 0xc6, 0x92, 0x79, 0x43, 0xa3, 0x06, 0xf3, 0xb2, 0xeb, 0x00, 0xa6, 0x25, + 0xdf, 0x16, 0x34, 0x98, 0x4e, 0x95, 0x47, 0xa4, 0x49, 0x50, 0x3b, 0x97, 0x49, 0x91, 0x13, 0xc2, 0x24, 0xe8, 0x95, + 0xe0, 0x37, 0x12, 0xda, 0xff, 0xab, 0x9e, 0xef, 0x80, 0xc1, 0x44, 0xab, 0xe4, 0x0b, 0x58, 0x2d, 0x73, 0xfe, 0x52, + 0x7a, 0x62, 0x23, 0xfe, 0x62, 0x99, 0xc6, 0xa3, 0x2f, 0x6c, 0x88, 0x78, 0x56, 0x2f, 0xd1, 0xb4, 0x04, 0x75, 0x80, + 0x47, 0xf4, 0xd7, 0xe8, 0x8b, 0xe1, 0x4d, 0xe9, 0x6a, 0xa4, 0xae, 0xd9, 0x39, 0xe7, 0x5f, 0x6a, 0x43, 0x84, 0x8c, + 0x69, 0x53, 0x20, 0x19, 0x10, 0x48, 0x32, 0x10, 0x00, 0x98, 0x9a, 0xce, 0xec, 0x15, 0x40, 0x34, 0x10, 0xc0, 0xe3, + 0xbc, 0xe3, 0xf1, 0x23, 0xfd, 0x55, 0x1c, 0xf7, 0x4e, 0xd3, 0xb0, 0xfd, 0x17, 0xa0, 0x29, 0x86, 0x72, 0x3c, 0xdf, + 0x29, 0x48, 0xf6, 0x28, 0x65, 0xe9, 0xaa, 0x89, 0xec, 0x50, 0xac, 0x4f, 0x73, 0xca, 0x42, 0xda, 0x96, 0x63, 0xb4, + 0xc5, 0xfa, 0x31, 0xf2, 0xde, 0xdc, 0xa8, 0xc8, 0x07, 0x3d, 0xb8, 0xbd, 0xbd, 0x7d, 0xdd, 0x63, 0x36, 0xc9, 0x8a, + 0x45, 0xae, 0x22, 0x4e, 0x9c, 0xd6, 0x21, 0x07, 0x0c, 0xc8, 0x49, 0x08, 0x4c, 0x63, 0x5c, 0x2a, 0xd0, 0x41, 0xc9, + 0x72, 0x5e, 0x03, 0xb5, 0x2c, 0x22, 0x6b, 0x80, 0xa8, 0xa6, 0xf9, 0x57, 0x0d, 0xf9, 0x49, 0xd5, 0x9c, 0x52, 0xa8, + 0x7d, 0xc5, 0xc3, 0xea, 0xf4, 0x89, 0x55, 0x9b, 0x18, 0xeb, 0x5f, 0x6b, 0x4f, 0xd0, 0x56, 0xd2, 0x40, 0x7c, 0xe7, + 0xeb, 0xf4, 0x8e, 0x42, 0x77, 0x9c, 0x99, 0x78, 0xaa, 0x02, 0x63, 0xdf, 0xda, 0x11, 0x14, 0x0e, 0x4d, 0xd7, 0x01, + 0x87, 0x69, 0x74, 0xc2, 0xe2, 0x9f, 0xd2, 0x71, 0xf2, 0xa2, 0x56, 0x88, 0x24, 0xff, 0x10, 0x2e, 0x0c, 0x89, 0x05, + 0x79, 0x49, 0xa8, 0x23, 0x32, 0x62, 0x35, 0x2a, 0xd6, 0x42, 0x45, 0xc5, 0x29, 0x1e, 0x6f, 0x15, 0x14, 0x97, 0xa2, + 0x54, 0x29, 0x15, 0xb9, 0x51, 0x29, 0x20, 0x96, 0x0d, 0xbc, 0x5b, 0xc0, 0x01, 0x10, 0x74, 0x96, 0xbb, 0xb5, 0xed, + 0x6e, 0x23, 0xf3, 0x99, 0x69, 0x9e, 0x56, 0x1f, 0xd4, 0xdf, 0xef, 0x97, 0x18, 0x5b, 0xe3, 0xe9, 0xef, 0xdb, 0xb4, + 0xe0, 0xe6, 0x6f, 0x18, 0xa2, 0x3b, 0x40, 0xc4, 0x2c, 0xed, 0xa1, 0x90, 0x05, 0x13, 0x96, 0xa1, 0x2a, 0x4f, 0x39, + 0xea, 0xe5, 0x93, 0x5b, 0x80, 0x50, 0x43, 0xbf, 0x36, 0x3a, 0xd5, 0x55, 0x09, 0xc2, 0xf7, 0x5d, 0xa1, 0x1e, 0x9b, + 0x03, 0x9e, 0x0c, 0x80, 0xbf, 0x22, 0xaf, 0xf5, 0xd8, 0xfe, 0x41, 0x6f, 0xd4, 0x1b, 0x20, 0x88, 0xce, 0x79, 0xe1, + 0x1f, 0x71, 0xae, 0x53, 0x7f, 0xc6, 0x85, 0x20, 0xbe, 0xf5, 0x24, 0xbc, 0x17, 0x67, 0x69, 0x1c, 0x9c, 0xf5, 0x06, + 0xe6, 0x22, 0x50, 0x9c, 0xa5, 0xf9, 0x19, 0x88, 0xe5, 0x88, 0x89, 0x58, 0xb3, 0x3b, 0x80, 0x09, 0x2c, 0x75, 0x1c, + 0xb2, 0xea, 0xd8, 0x7e, 0xff, 0xcd, 0xc8, 0x90, 0xa5, 0x23, 0x0c, 0x8c, 0xfe, 0x5d, 0x81, 0x00, 0x05, 0xcb, 0xcc, + 0xf6, 0x60, 0xd2, 0xd5, 0x9e, 0xd5, 0xf3, 0x66, 0x93, 0x77, 0xf5, 0x8e, 0xd5, 0xb4, 0x9c, 0x9a, 0x56, 0x59, 0x4d, + 0x9b, 0xe4, 0x50, 0x33, 0xd1, 0xef, 0x6b, 0x50, 0xd4, 0x7c, 0x0e, 0x60, 0x6c, 0x98, 0xfc, 0x66, 0x56, 0xcd, 0xfb, + 0x7d, 0x4f, 0x3e, 0x82, 0x5f, 0xc8, 0x56, 0xe6, 0xd6, 0x58, 0x3e, 0x7d, 0x4d, 0x24, 0x66, 0x06, 0xe6, 0xe8, 0xee, + 0x08, 0xdf, 0xeb, 0x46, 0x78, 0x1d, 0x73, 0x85, 0xcd, 0xc4, 0xf4, 0x0d, 0x0c, 0x9e, 0x27, 0x7c, 0x70, 0x91, 0xa3, + 0xbf, 0x91, 0xc3, 0x4c, 0x61, 0x41, 0xce, 0xfd, 0xc9, 0x1b, 0xc4, 0x4b, 0x46, 0x78, 0x07, 0x9d, 0x4e, 0x78, 0x90, + 0xfd, 0xfe, 0x0a, 0x3a, 0xb3, 0x95, 0x4a, 0xd9, 0xaa, 0xa8, 0x4c, 0xd7, 0x75, 0x51, 0x56, 0xd0, 0xb1, 0xf4, 0xf3, + 0x56, 0xc8, 0xcc, 0xfa, 0x99, 0x05, 0xf7, 0xb4, 0x92, 0x00, 0x53, 0xb6, 0x6d, 0xa2, 0x36, 0xf0, 0xb2, 0x2e, 0x3e, + 0x17, 0x78, 0x74, 0xd6, 0x5e, 0x6f, 0x84, 0xda, 0xe7, 0x7c, 0xb4, 0x2e, 0xd6, 0x1e, 0xf8, 0xc1, 0xcc, 0xd2, 0xb9, + 0x22, 0xce, 0xc8, 0xfd, 0xd1, 0xe7, 0x22, 0xcd, 0x29, 0x0f, 0x70, 0x1f, 0x8a, 0xb9, 0xfd, 0x16, 0x48, 0x3f, 0xf4, + 0x16, 0xc8, 0x3e, 0x3a, 0xe7, 0xe4, 0x0d, 0x20, 0xd2, 0x21, 0x0c, 0x6e, 0x45, 0x82, 0x8e, 0x55, 0xc3, 0x5b, 0x0b, + 0xec, 0xb4, 0x97, 0xc6, 0xbd, 0x34, 0x3f, 0x4b, 0xfb, 0x7d, 0x83, 0x9a, 0x99, 0x22, 0x1c, 0x3c, 0xce, 0xc8, 0x45, + 0xd2, 0x82, 0x2d, 0xa5, 0xfd, 0x57, 0x03, 0x47, 0x10, 0xf2, 0xf7, 0x3f, 0x84, 0xf7, 0x04, 0x20, 0x36, 0x69, 0x03, + 0xae, 0x7a, 0x4c, 0x47, 0x63, 0x4b, 0xa2, 0x56, 0x9d, 0x0d, 0x90, 0x38, 0x55, 0x5a, 0x4f, 0xb9, 0x59, 0x53, 0x18, + 0xa4, 0xca, 0x42, 0xfd, 0xc6, 0x7a, 0x32, 0x59, 0xe5, 0x22, 0x23, 0x8e, 0xca, 0xf4, 0xa5, 0x66, 0x04, 0xd3, 0xa5, + 0x9f, 0x2f, 0x60, 0xc9, 0xc6, 0x1f, 0x71, 0xf2, 0x96, 0x80, 0x63, 0x3b, 0x6b, 0x57, 0xd5, 0x2e, 0xc7, 0xad, 0xdd, + 0x1c, 0xe0, 0x7b, 0xbd, 0xd1, 0x68, 0xa4, 0x9d, 0xe3, 0x04, 0x0c, 0x55, 0x4f, 0x2d, 0x85, 0x1e, 0xab, 0x15, 0xa0, + 0x6e, 0x47, 0x2e, 0xb3, 0x64, 0x30, 0x5f, 0x18, 0xc7, 0xaf, 0xcc, 0x47, 0x1f, 0x2f, 0x95, 0xb5, 0xeb, 0x88, 0xaf, + 0xff, 0x20, 0xab, 0xf5, 0x2d, 0xef, 0xaa, 0x26, 0xe0, 0x8b, 0x2a, 0xa0, 0xf4, 0x1b, 0xde, 0x93, 0xbd, 0x8b, 0xaf, + 0xdd, 0x60, 0x97, 0x7c, 0xcb, 0x5b, 0xd4, 0x79, 0xbe, 0x72, 0x70, 0xa3, 0x4a, 0xb7, 0xf7, 0x92, 0x05, 0xae, 0xbd, + 0xa3, 0xa6, 0xb1, 0x9e, 0xf9, 0xd1, 0xc3, 0x22, 0x64, 0x3b, 0x1f, 0x7b, 0x5f, 0x35, 0x4f, 0xcf, 0x1a, 0x7a, 0x93, + 0x1a, 0xfa, 0xd8, 0x8b, 0xb2, 0x7d, 0x6a, 0x1a, 0xd1, 0x6b, 0xd8, 0xd0, 0xc7, 0xde, 0x92, 0x93, 0x43, 0x22, 0xc0, + 0xa9, 0x31, 0x7f, 0x7c, 0x38, 0x9d, 0xe1, 0xef, 0x18, 0x50, 0x09, 0xc4, 0x7c, 0x7a, 0x4c, 0x3b, 0x0a, 0x30, 0xa3, + 0x4a, 0x6f, 0x9f, 0x1e, 0xd8, 0x8e, 0x97, 0xf5, 0xd0, 0xd2, 0xbb, 0x27, 0x47, 0xb7, 0xe3, 0x55, 0x35, 0xbe, 0x94, + 0x43, 0x9e, 0xe7, 0xb3, 0xd1, 0x68, 0x24, 0x0c, 0x24, 0x77, 0xa5, 0x37, 0xb0, 0x02, 0x69, 0x5b, 0x54, 0x1f, 0xca, + 0xa5, 0xb7, 0x53, 0x87, 0x76, 0xe5, 0x4f, 0xf2, 0xc3, 0xa1, 0x18, 0x99, 0x63, 0x1c, 0xc0, 0x4d, 0x0a, 0x25, 0x47, + 0xc9, 0x5a, 0x82, 0xe8, 0x94, 0xc6, 0x53, 0x59, 0xaf, 0xad, 0x88, 0xbc, 0x1a, 0x71, 0x1e, 0x82, 0x1f, 0x3d, 0x50, + 0x8b, 0xbf, 0xd0, 0x82, 0xd8, 0x63, 0x9f, 0x2a, 0xa5, 0x17, 0xbc, 0x2a, 0x20, 0x44, 0xec, 0xef, 0x06, 0xda, 0x41, + 0x09, 0x0e, 0x25, 0xdc, 0x07, 0x84, 0x85, 0x7e, 0xed, 0xe5, 0x33, 0x19, 0xa3, 0xdc, 0x1b, 0x54, 0x73, 0x06, 0x30, + 0x95, 0x3e, 0x03, 0xbf, 0x4b, 0x80, 0x3a, 0xc5, 0xa7, 0xe8, 0x54, 0x6f, 0x1e, 0x36, 0x5d, 0x9f, 0x96, 0x28, 0x8a, + 0xe8, 0xce, 0xcf, 0xc7, 0x80, 0xd8, 0xd9, 0xb5, 0x19, 0x69, 0xd7, 0x7e, 0x83, 0x06, 0x2b, 0x25, 0x89, 0x76, 0x4e, + 0x09, 0xbb, 0x9d, 0x8f, 0x6c, 0xe9, 0x47, 0x29, 0x10, 0x73, 0xc7, 0x89, 0x44, 0xf6, 0x60, 0x23, 0x27, 0x70, 0x8b, + 0xf6, 0x8e, 0x0e, 0x40, 0xe5, 0x46, 0x41, 0x7e, 0x35, 0x47, 0x72, 0xc7, 0x77, 0xbd, 0xef, 0x06, 0xf5, 0xe0, 0xbb, + 0xde, 0x59, 0x4a, 0x72, 0x47, 0x78, 0xa6, 0xa6, 0x84, 0x88, 0xcf, 0xbe, 0x1b, 0xe4, 0x03, 0x3c, 0x4b, 0xb4, 0x48, + 0x8b, 0x84, 0x6a, 0x75, 0x8d, 0x9b, 0xf0, 0x22, 0x91, 0xdc, 0x43, 0xbb, 0xce, 0x23, 0x62, 0x01, 0xc8, 0x58, 0x7c, + 0x36, 0x6f, 0x28, 0xd4, 0xdd, 0xc4, 0x6c, 0xd1, 0x5d, 0x16, 0xfb, 0xfd, 0x6d, 0x9e, 0xd6, 0x3d, 0x1d, 0x1f, 0x83, + 0x2f, 0x48, 0x35, 0x01, 0x1e, 0xed, 0xaf, 0xcd, 0xf1, 0xea, 0xd5, 0xe6, 0x48, 0x59, 0xa8, 0x12, 0xf5, 0x5b, 0xac, + 0x66, 0x3d, 0x84, 0xe1, 0xce, 0x32, 0x63, 0x6d, 0x2f, 0x78, 0x25, 0x67, 0x55, 0x6c, 0x97, 0xe3, 0x2b, 0x96, 0xda, + 0x4a, 0xa2, 0x72, 0xb4, 0x1e, 0x6b, 0x53, 0x8c, 0xfc, 0x4a, 0x21, 0x51, 0x16, 0x1d, 0x5b, 0x0b, 0x05, 0xc4, 0x0b, + 0xd0, 0x97, 0xec, 0x4c, 0x03, 0xac, 0x37, 0x7a, 0x15, 0x11, 0x5a, 0x3e, 0x52, 0xe1, 0x4d, 0x6e, 0xaa, 0xcc, 0xca, + 0x66, 0xd1, 0xee, 0xa7, 0x8a, 0x57, 0x08, 0x56, 0x6f, 0xd4, 0x1e, 0x05, 0xa8, 0x3d, 0xb4, 0x50, 0x06, 0x90, 0xd2, + 0x34, 0x03, 0x40, 0x06, 0x00, 0x99, 0x2a, 0xe2, 0x33, 0x01, 0x2a, 0x6d, 0x75, 0xa3, 0xc0, 0x89, 0xf4, 0x1a, 0x68, + 0x16, 0x58, 0xe9, 0x23, 0x05, 0x19, 0x2c, 0xb6, 0x08, 0xc0, 0xca, 0x91, 0x33, 0x4c, 0x63, 0xc8, 0x36, 0x9a, 0xb8, + 0x24, 0xcd, 0xef, 0xc3, 0x2c, 0x95, 0x78, 0x12, 0x3f, 0xc8, 0x1a, 0x23, 0x00, 0x90, 0xbe, 0x4f, 0x2f, 0x8a, 0x2c, + 0x26, 0x1c, 0x38, 0xeb, 0xa9, 0x83, 0xa2, 0x26, 0xe7, 0x5a, 0xd3, 0xea, 0x59, 0x6d, 0xf2, 0x90, 0x05, 0x3a, 0x7b, + 0x30, 0x26, 0xb5, 0x7c, 0xcf, 0x23, 0xfb, 0x2b, 0xc7, 0x33, 0xc2, 0x77, 0xdd, 0xc1, 0xa9, 0xff, 0x6e, 0x6a, 0x60, + 0x62, 0x4a, 0x00, 0x36, 0x06, 0x47, 0x13, 0xe2, 0x77, 0x3a, 0x26, 0x53, 0x9b, 0x14, 0x81, 0xc0, 0x43, 0xf0, 0x0a, + 0x9e, 0x1b, 0x2e, 0xb7, 0xdc, 0xd8, 0x59, 0xe4, 0x69, 0x02, 0x70, 0xe2, 0x05, 0xdf, 0x02, 0x1c, 0xa7, 0x5e, 0x15, + 0xb2, 0x67, 0xcf, 0xc5, 0x74, 0x36, 0x0f, 0x1e, 0x12, 0xda, 0xbf, 0x98, 0xf0, 0x9b, 0xee, 0x2a, 0xb9, 0x32, 0xb5, + 0xee, 0x4d, 0x74, 0x95, 0xcb, 0x9d, 0x3e, 0xad, 0x38, 0x86, 0x39, 0x83, 0x55, 0x40, 0xce, 0xd9, 0x90, 0xbf, 0x38, + 0x07, 0xc0, 0x96, 0x95, 0xf0, 0x22, 0xfe, 0x22, 0x94, 0xd5, 0x02, 0xb8, 0x47, 0xce, 0x23, 0xf3, 0xcb, 0x57, 0xdb, + 0xa1, 0x9c, 0x53, 0x14, 0xc6, 0x72, 0x6a, 0x5a, 0x52, 0x9c, 0x0e, 0x3d, 0x05, 0x93, 0xa9, 0x2d, 0x7f, 0x6f, 0x13, + 0x97, 0xd9, 0x9b, 0x49, 0x38, 0x5f, 0x47, 0xb6, 0xad, 0x55, 0xf7, 0xd0, 0x0d, 0xc1, 0xa0, 0x8f, 0x11, 0xb4, 0x6c, + 0xae, 0xef, 0xd6, 0x83, 0x81, 0xc2, 0xf6, 0xad, 0xe9, 0xa6, 0x45, 0xa7, 0x38, 0xe0, 0xcc, 0x5a, 0xd7, 0xa8, 0x54, + 0x15, 0x87, 0x5e, 0xf2, 0x6e, 0x59, 0x95, 0x5d, 0x96, 0x5e, 0x08, 0x52, 0xa3, 0xae, 0x22, 0x44, 0x4a, 0xc5, 0x0e, + 0xef, 0xc9, 0xaf, 0x81, 0x89, 0x67, 0x56, 0x8e, 0xd2, 0x78, 0x0e, 0x30, 0x41, 0x0a, 0x7d, 0x53, 0x7e, 0x05, 0xb8, + 0xa1, 0x8b, 0x28, 0xcc, 0xde, 0xc6, 0x55, 0x50, 0x5b, 0x4d, 0xbf, 0x77, 0x70, 0x62, 0xcf, 0xeb, 0x7e, 0x3f, 0x25, + 0x1a, 0x3f, 0x0c, 0xbd, 0xc0, 0xbf, 0xc7, 0xd3, 0x7d, 0x13, 0xa4, 0xe6, 0x95, 0x07, 0x78, 0x45, 0x97, 0x5b, 0x9b, + 0x72, 0x45, 0xe3, 0x62, 0x5e, 0x23, 0x22, 0x7c, 0xea, 0x28, 0xb6, 0xdb, 0xfc, 0x38, 0xb5, 0x31, 0x18, 0x84, 0x70, + 0xdf, 0xca, 0xf8, 0x7d, 0xe2, 0xe5, 0xb3, 0x68, 0x0e, 0x8a, 0xd2, 0x4c, 0x93, 0x84, 0x14, 0xd2, 0x4b, 0x80, 0x3e, + 0x1a, 0x84, 0x5a, 0x5d, 0xf9, 0x47, 0xe2, 0xa5, 0x6a, 0x5a, 0x9b, 0xa7, 0x58, 0xa3, 0x40, 0xcc, 0xa2, 0x79, 0xc3, + 0x32, 0x3a, 0x24, 0xd5, 0xe5, 0xd2, 0x34, 0xe3, 0x0f, 0xab, 0x19, 0xaa, 0x15, 0x47, 0x4d, 0x50, 0xa3, 0x74, 0x03, + 0x17, 0xc0, 0xbf, 0xd3, 0x1d, 0x47, 0x35, 0x8a, 0x14, 0x0d, 0xf8, 0x04, 0x81, 0x61, 0xcd, 0xe6, 0x09, 0x6b, 0x4d, + 0x5d, 0x33, 0xfa, 0x7d, 0x19, 0x27, 0x64, 0x92, 0x90, 0x9c, 0x0f, 0x97, 0xeb, 0x47, 0x52, 0x5d, 0x00, 0xa9, 0x72, + 0xc5, 0x66, 0xbd, 0xde, 0x1c, 0x30, 0x7a, 0x61, 0xfd, 0xc2, 0xc6, 0x15, 0x9c, 0x5f, 0x12, 0xe6, 0xae, 0xfa, 0x11, + 0x66, 0x19, 0x54, 0x01, 0x69, 0x7e, 0x2c, 0x78, 0xf3, 0xdc, 0x05, 0xa2, 0x7e, 0x33, 0x52, 0x17, 0x94, 0x59, 0x3a, + 0xb7, 0x88, 0x40, 0xc0, 0x6b, 0x58, 0x3d, 0x81, 0x64, 0x5f, 0x3e, 0xf6, 0x69, 0x46, 0x81, 0xea, 0x08, 0x40, 0xd9, + 0xac, 0x1f, 0xc2, 0xfe, 0x01, 0xe1, 0x84, 0xfa, 0x9b, 0x37, 0x72, 0xd6, 0x90, 0x3c, 0x90, 0x6a, 0xc2, 0x63, 0x38, + 0x35, 0x16, 0xf8, 0xd2, 0xa2, 0x37, 0x15, 0xbc, 0x26, 0x38, 0xee, 0x05, 0x5a, 0xfb, 0x16, 0x70, 0x84, 0x08, 0x2e, + 0x43, 0x13, 0xa7, 0xbd, 0x5d, 0x2f, 0x40, 0x42, 0x73, 0x0b, 0xe7, 0xfa, 0xda, 0x05, 0x2d, 0x4e, 0x91, 0x93, 0x45, + 0x17, 0x18, 0xe8, 0x82, 0xcc, 0x1b, 0xff, 0xaa, 0x60, 0xe5, 0x02, 0x64, 0x2f, 0x15, 0x2b, 0x89, 0xd8, 0x76, 0xea, + 0x8f, 0x52, 0xd9, 0x6f, 0xcf, 0xac, 0x09, 0xfc, 0x2a, 0xb1, 0x5f, 0x22, 0x93, 0x6f, 0x7a, 0x6c, 0xf2, 0x95, 0xb1, + 0xd0, 0xa9, 0x65, 0x70, 0x4e, 0x8f, 0x0c, 0xce, 0xbd, 0x9d, 0x55, 0x9b, 0x10, 0x86, 0x82, 0x24, 0xd0, 0x74, 0xe9, + 0x61, 0xdd, 0xf4, 0xe7, 0x27, 0x2d, 0x7e, 0xad, 0xda, 0xb7, 0xee, 0xc7, 0x21, 0x76, 0xf1, 0xab, 0xc4, 0x33, 0xec, + 0xa3, 0x3e, 0x70, 0x80, 0xc9, 0x88, 0x89, 0xcb, 0x7e, 0x1f, 0x0a, 0x9b, 0x8d, 0xe7, 0xa3, 0xba, 0xf8, 0xb9, 0x78, + 0x00, 0x28, 0x87, 0x0a, 0xec, 0x72, 0x28, 0x43, 0x19, 0xb1, 0xa9, 0x2d, 0xf7, 0xfc, 0xfe, 0x2a, 0xcc, 0x41, 0xde, + 0xd1, 0x98, 0x38, 0x67, 0x20, 0x86, 0xc1, 0xd7, 0xbf, 0x7b, 0xb2, 0x4f, 0x9b, 0xef, 0xce, 0xe0, 0xbb, 0xa3, 0xb3, + 0x0f, 0xc8, 0x71, 0x73, 0xb6, 0x2e, 0x8b, 0xfb, 0x34, 0x16, 0x67, 0xdf, 0x41, 0xea, 0x77, 0x67, 0x45, 0x79, 0xf6, + 0x9d, 0xaa, 0xcc, 0x77, 0x67, 0xb4, 0xe0, 0x46, 0xbf, 0x5b, 0x13, 0xef, 0x9f, 0x95, 0xa6, 0x3d, 0x5b, 0x42, 0x38, + 0x96, 0x56, 0x3f, 0x82, 0x12, 0x51, 0x91, 0xa2, 0xca, 0x50, 0x56, 0x6b, 0xc7, 0x79, 0x9f, 0x68, 0x78, 0x6c, 0x9a, + 0x90, 0xb8, 0x5a, 0xc2, 0x3a, 0xd4, 0xb3, 0xd3, 0x26, 0xd9, 0x71, 0x1e, 0xa8, 0x03, 0x22, 0xe7, 0x2f, 0xf2, 0xd1, + 0x96, 0xbe, 0x06, 0xdf, 0x3a, 0x1c, 0xf2, 0xd1, 0xce, 0xfc, 0xf4, 0xc9, 0x5a, 0x29, 0x83, 0x8d, 0x14, 0xa3, 0x10, + 0x12, 0xc5, 0x6d, 0x7b, 0x0c, 0x80, 0xff, 0xfd, 0xc3, 0x81, 0x7e, 0xef, 0xe4, 0x6f, 0xb5, 0x5b, 0x5a, 0xf5, 0xfc, + 0xd0, 0x22, 0xcc, 0x78, 0x5d, 0x1b, 0x76, 0xb6, 0xbd, 0x04, 0x94, 0xde, 0x37, 0x0d, 0x6a, 0x8a, 0xe8, 0x27, 0xac, + 0x26, 0x56, 0x71, 0x58, 0x90, 0x12, 0x87, 0x18, 0x8e, 0xd1, 0x0e, 0x3d, 0x4e, 0x17, 0x35, 0x4f, 0xee, 0x3b, 0x64, + 0xdc, 0xfa, 0x3e, 0x20, 0xb9, 0x14, 0xce, 0x3f, 0x78, 0xa1, 0xc1, 0x44, 0x2f, 0xf2, 0xaa, 0xc8, 0xc4, 0x48, 0xd0, + 0x28, 0xbf, 0x25, 0x71, 0xe6, 0x0c, 0x6b, 0x71, 0xa6, 0x10, 0xc2, 0x42, 0x42, 0xe5, 0x2e, 0x4a, 0x4a, 0x0f, 0xce, + 0x9e, 0xec, 0xcb, 0xe6, 0x77, 0xc2, 0x84, 0x18, 0x2d, 0x80, 0x06, 0x67, 0xd7, 0x2e, 0xef, 0x21, 0x2c, 0x73, 0xef, + 0xf7, 0xb7, 0x77, 0x79, 0x01, 0x71, 0x99, 0x67, 0x52, 0xb1, 0x5a, 0x9e, 0x01, 0x4d, 0x9e, 0x88, 0xcf, 0xc2, 0x4a, + 0x4e, 0x83, 0xaa, 0xa3, 0x58, 0xbd, 0x8d, 0xe7, 0x1e, 0xf0, 0x7a, 0xbf, 0x4f, 0x80, 0xc0, 0xdd, 0x67, 0x6f, 0x94, + 0x5b, 0x2a, 0xe9, 0x91, 0xe7, 0x18, 0x22, 0x99, 0x00, 0xaf, 0x33, 0x04, 0x47, 0x0a, 0xab, 0xe7, 0x26, 0xc8, 0x3f, + 0xbe, 0x3e, 0xa1, 0xf8, 0xa2, 0x79, 0x14, 0x35, 0x2c, 0x64, 0x09, 0x1c, 0x0f, 0xc9, 0x2c, 0x9b, 0x23, 0x35, 0x79, + 0xda, 0x9e, 0x22, 0x1d, 0x9d, 0x58, 0xe2, 0xb7, 0x35, 0xa9, 0x5e, 0xa4, 0xc2, 0x2e, 0x69, 0x67, 0x2b, 0x73, 0x2f, + 0x84, 0xa1, 0x4a, 0xb8, 0xf7, 0xba, 0x9e, 0x85, 0x72, 0x53, 0xb4, 0x2a, 0x66, 0x0f, 0x53, 0x62, 0x86, 0x29, 0xd6, + 0x5f, 0xd8, 0xf0, 0x9b, 0xc4, 0x8b, 0xc1, 0x70, 0xbd, 0xe4, 0xe5, 0x6c, 0x63, 0x16, 0xc2, 0xe1, 0xb0, 0x99, 0x14, + 0xb3, 0x25, 0xc4, 0xb6, 0x2e, 0xe7, 0x87, 0x43, 0x57, 0xcb, 0xd6, 0xc2, 0x83, 0x87, 0xaa, 0x85, 0x9b, 0x86, 0xe5, + 0xf0, 0x33, 0x99, 0xc5, 0xd8, 0xbe, 0xc6, 0x67, 0xf6, 0xe7, 0x8b, 0xee, 0x59, 0x82, 0x8c, 0x1b, 0x6b, 0xe0, 0x1a, + 0x9b, 0xb5, 0x3b, 0x5c, 0x8d, 0x80, 0xe4, 0x71, 0x37, 0xfa, 0xbb, 0xb2, 0x93, 0x9c, 0x04, 0x09, 0xa3, 0x15, 0xc2, + 0xef, 0xbe, 0xf1, 0x27, 0x5a, 0xec, 0x41, 0xbb, 0x8d, 0x2d, 0x21, 0xaa, 0x69, 0xcf, 0xe5, 0x4a, 0xb1, 0x34, 0x6f, + 0xa5, 0x0d, 0x99, 0x0f, 0xeb, 0x73, 0xdf, 0xc8, 0x81, 0x82, 0x31, 0xe2, 0xa9, 0x75, 0x10, 0xcd, 0xe6, 0xc0, 0x7d, + 0x81, 0xe6, 0x11, 0x9e, 0x5a, 0x90, 0xa0, 0xcc, 0xda, 0xb0, 0x9f, 0x24, 0x27, 0xcb, 0xe3, 0xf0, 0x2d, 0xfc, 0xcb, + 0x67, 0xd8, 0x24, 0xa6, 0x28, 0x1e, 0x7f, 0xab, 0x14, 0xff, 0x1d, 0x5b, 0x10, 0xc1, 0xda, 0x8d, 0xa8, 0x0d, 0x7f, + 0xc3, 0xbf, 0x85, 0x7d, 0x84, 0xfd, 0x86, 0x26, 0x08, 0x03, 0x58, 0x7f, 0x26, 0x10, 0x17, 0x16, 0x82, 0x04, 0x7f, + 0xab, 0x24, 0xff, 0x9c, 0xf0, 0xd9, 0xa2, 0x04, 0xb2, 0x3a, 0x8c, 0xe2, 0x13, 0x8a, 0x89, 0x42, 0x18, 0x6e, 0x09, + 0xbd, 0xa3, 0xff, 0x46, 0x94, 0x64, 0x93, 0xdc, 0x8a, 0xf5, 0x40, 0x26, 0x49, 0x30, 0xc1, 0xca, 0x0b, 0xe5, 0x4b, + 0xf7, 0x42, 0xa9, 0xb5, 0x16, 0xb4, 0x7e, 0xf9, 0x93, 0xc4, 0x33, 0xa0, 0x7b, 0x20, 0x63, 0xd0, 0x6d, 0x44, 0x35, + 0xc9, 0x31, 0x7d, 0x94, 0xce, 0x33, 0x50, 0x01, 0x9d, 0xad, 0xb3, 0xb0, 0x5e, 0x16, 0xe5, 0xaa, 0x15, 0x1e, 0x2a, + 0x4b, 0x1f, 0xa9, 0xc7, 0x98, 0x17, 0xe6, 0xc9, 0x89, 0x7c, 0xf0, 0x08, 0xd0, 0xf0, 0x28, 0x4f, 0xab, 0x8e, 0xd2, + 0xfa, 0x81, 0x65, 0xc0, 0x08, 0x9c, 0x28, 0x03, 0x1e, 0x61, 0x19, 0x98, 0xa7, 0x5d, 0x86, 0x1a, 0xc4, 0x1a, 0x55, + 0x57, 0x6a, 0x83, 0x39, 0x51, 0x94, 0x7c, 0x8a, 0xa5, 0x15, 0xc6, 0xd0, 0xd4, 0x95, 0x47, 0xd6, 0x4b, 0x4e, 0xd8, + 0x93, 0xdd, 0x40, 0xba, 0x85, 0x8d, 0x02, 0x17, 0x74, 0x2d, 0x4b, 0x94, 0x8b, 0x6e, 0x19, 0x51, 0x26, 0x42, 0xea, + 0x67, 0x0f, 0x67, 0x5a, 0xed, 0x37, 0x76, 0xd2, 0xbe, 0x3d, 0x52, 0xf4, 0x82, 0x81, 0xf8, 0xb4, 0x47, 0x4a, 0x3d, + 0x6b, 0xe4, 0x32, 0xb0, 0xa5, 0x4b, 0x55, 0xcf, 0x7f, 0x83, 0xf2, 0x1d, 0xcc, 0x8c, 0xb3, 0xd9, 0xef, 0x7a, 0x73, + 0x7b, 0xb2, 0xaf, 0x9b, 0xdf, 0x59, 0xaf, 0x07, 0x5b, 0x83, 0x4c, 0x7c, 0xa9, 0xa8, 0xa7, 0xac, 0x42, 0xac, 0xc8, + 0xec, 0x7f, 0x0b, 0xef, 0x77, 0x78, 0x6b, 0x84, 0x66, 0x65, 0x3c, 0xcc, 0x47, 0x4f, 0xf6, 0xa2, 0xf9, 0xbd, 0xb3, + 0x6c, 0x2b, 0x57, 0x25, 0xb3, 0xfd, 0x7e, 0x94, 0x34, 0x67, 0x8f, 0xd7, 0x48, 0xea, 0x00, 0x1f, 0xaf, 0xcf, 0xf0, + 0x91, 0x4a, 0x28, 0xb5, 0xa0, 0xaa, 0x41, 0xeb, 0x63, 0xbf, 0xb7, 0x9e, 0xd3, 0xc7, 0x8f, 0xe5, 0x74, 0x4b, 0x8a, + 0x30, 0x7e, 0x60, 0x30, 0x65, 0x27, 0x4e, 0x5d, 0xf2, 0x66, 0x48, 0xef, 0xba, 0x55, 0x52, 0x97, 0x3d, 0x4a, 0x04, + 0xa1, 0x0e, 0xd6, 0x2f, 0xf6, 0x43, 0x98, 0xd9, 0xa2, 0x3f, 0x6c, 0x56, 0x73, 0x42, 0x41, 0x04, 0x88, 0x56, 0x79, + 0x1f, 0x38, 0x26, 0x09, 0xb3, 0xe6, 0x86, 0x74, 0xeb, 0xcd, 0x95, 0xf6, 0x4a, 0x0a, 0xe8, 0xe7, 0x20, 0x73, 0xfb, + 0xe8, 0x96, 0xab, 0x96, 0x79, 0x2e, 0x6d, 0x39, 0x60, 0xd1, 0x42, 0x74, 0x66, 0xe7, 0xd2, 0xe1, 0xe0, 0x3f, 0xa8, + 0x2b, 0x51, 0x45, 0x04, 0x1d, 0x45, 0x0b, 0x46, 0xab, 0x55, 0xbb, 0x9c, 0x6c, 0x2a, 0x64, 0x4b, 0x22, 0x9c, 0x28, + 0xd9, 0x2b, 0xa1, 0x3e, 0xca, 0xd5, 0x9e, 0x69, 0x88, 0x3f, 0x13, 0xb0, 0x69, 0x83, 0xbf, 0x05, 0xee, 0x65, 0x70, + 0x66, 0xda, 0xa7, 0x61, 0x04, 0x44, 0xe6, 0x10, 0xec, 0xe7, 0x77, 0x3d, 0xa8, 0xe0, 0x41, 0x47, 0xfa, 0xeb, 0x7a, + 0x56, 0xe0, 0x99, 0x7b, 0xe2, 0xf9, 0x9b, 0x13, 0xe9, 0x45, 0x0e, 0x0f, 0x34, 0xf7, 0x61, 0xc6, 0x5f, 0x96, 0x65, + 0xb8, 0x1b, 0x2d, 0xcb, 0x62, 0xe5, 0x45, 0x7a, 0x1f, 0xcf, 0xa4, 0x18, 0x48, 0x74, 0x98, 0x19, 0x5d, 0xc5, 0x3a, + 0xce, 0x61, 0xdc, 0xdb, 0x93, 0xb0, 0x42, 0xfb, 0x67, 0x89, 0xbd, 0x2e, 0x00, 0xc0, 0x21, 0x6b, 0xd0, 0x0a, 0xef, + 0x74, 0x7b, 0xbb, 0xc7, 0x25, 0x25, 0x8a, 0x1b, 0x35, 0x3f, 0xab, 0xa1, 0x65, 0x82, 0x5a, 0x66, 0xdd, 0xc9, 0x64, + 0x8a, 0x24, 0xf0, 0x6d, 0xd8, 0x1b, 0x56, 0xe4, 0xf3, 0x46, 0x6e, 0x0f, 0xef, 0xc2, 0x95, 0x88, 0xb5, 0x05, 0x9d, + 0x74, 0x64, 0x1c, 0xee, 0x85, 0xe6, 0x46, 0xba, 0x7f, 0x52, 0x25, 0x61, 0x29, 0x62, 0xb8, 0x05, 0xb2, 0xbd, 0xda, + 0x56, 0x82, 0x12, 0x48, 0x60, 0x3f, 0x94, 0x62, 0x99, 0x6e, 0x05, 0x80, 0x39, 0xf0, 0x3f, 0x25, 0x0c, 0xa1, 0xbb, + 0xf3, 0x10, 0xaf, 0x1a, 0x79, 0xdf, 0x20, 0x04, 0xfb, 0x6b, 0x90, 0xd3, 0x80, 0x41, 0xa4, 0x18, 0xc9, 0x82, 0x81, + 0x04, 0x20, 0xe7, 0x6b, 0x30, 0xc9, 0x4d, 0x73, 0xcf, 0x0f, 0x72, 0xdd, 0xc1, 0xb4, 0x0f, 0xba, 0x17, 0xd7, 0x9a, + 0xe5, 0xe0, 0x15, 0x13, 0xf1, 0xbf, 0xd7, 0x5e, 0xc9, 0x72, 0x96, 0xf9, 0x8d, 0xb9, 0xe8, 0x64, 0x70, 0xd5, 0x10, + 0x7e, 0x31, 0xcb, 0xe6, 0x3c, 0x9a, 0x65, 0x3a, 0xd4, 0xbf, 0x68, 0x8e, 0x4a, 0x01, 0x0c, 0x75, 0xbc, 0x00, 0x6b, + 0xbc, 0x2b, 0xdd, 0xb4, 0xe2, 0x91, 0xc6, 0x18, 0x05, 0x15, 0x3a, 0x08, 0xfd, 0xbd, 0x06, 0x78, 0x0d, 0x26, 0xb9, + 0x11, 0x2a, 0x1f, 0x5c, 0xd0, 0x0d, 0xdd, 0x72, 0xe5, 0x12, 0xd4, 0xa4, 0x6a, 0xf9, 0xe5, 0x08, 0xf5, 0xae, 0x96, + 0x5c, 0xaa, 0xcd, 0xa7, 0x46, 0x59, 0x23, 0xc8, 0xe4, 0x28, 0xfd, 0x3e, 0xe5, 0xc2, 0xad, 0x8c, 0xc9, 0xfa, 0x70, + 0xf0, 0x0a, 0x6e, 0x6a, 0xfc, 0x3a, 0x27, 0x16, 0x51, 0x7b, 0x48, 0x84, 0xad, 0xdd, 0x0a, 0xdd, 0x7b, 0xdc, 0x28, + 0xcd, 0xa3, 0x6c, 0x13, 0x8b, 0xca, 0xeb, 0x25, 0x60, 0x2d, 0xee, 0x01, 0x19, 0x2a, 0x2d, 0xfd, 0x8a, 0x15, 0x00, + 0x19, 0x20, 0x85, 0x8d, 0x1f, 0x90, 0xf6, 0xea, 0x83, 0x97, 0xfa, 0xfd, 0xbe, 0x31, 0xe5, 0xbf, 0x7f, 0xc8, 0x81, + 0x99, 0x50, 0x94, 0xf5, 0x0e, 0x26, 0x10, 0x5c, 0x3b, 0x49, 0x7b, 0x56, 0xf3, 0x17, 0xeb, 0xda, 0x03, 0x52, 0x2b, + 0xdf, 0x62, 0xae, 0x7a, 0x6d, 0x5f, 0x6c, 0xf6, 0x69, 0x75, 0x63, 0x34, 0x0e, 0x82, 0xa5, 0xd5, 0x5b, 0xad, 0x72, + 0xc8, 0x1b, 0x5e, 0x81, 0x48, 0x65, 0x5d, 0x5d, 0x2b, 0xe7, 0xea, 0x5a, 0x70, 0x24, 0x90, 0x2d, 0x79, 0x0e, 0xff, + 0x85, 0xdc, 0x2b, 0x0f, 0x87, 0xc2, 0xef, 0xf7, 0xd3, 0x19, 0x69, 0x65, 0x81, 0x32, 0x6d, 0x5d, 0x7b, 0xa1, 0x7f, + 0x38, 0xfc, 0x00, 0x5e, 0x23, 0xfe, 0xe1, 0x50, 0xf6, 0xfb, 0x1f, 0xcd, 0x4d, 0xe6, 0x7c, 0xac, 0x94, 0xb2, 0x97, + 0xa8, 0x74, 0x7f, 0x9b, 0xf0, 0xde, 0xff, 0x1e, 0xfd, 0xef, 0xd1, 0x65, 0x4f, 0x05, 0x80, 0x25, 0x7c, 0x86, 0x37, + 0x74, 0xa6, 0x2e, 0xe7, 0x4c, 0xba, 0xbb, 0x2b, 0x3f, 0xf4, 0x9e, 0xc6, 0x87, 0xef, 0xcd, 0x4d, 0x1b, 0x7f, 0xad, + 0x8e, 0x34, 0x09, 0x1d, 0x17, 0xfd, 0xc3, 0xe1, 0x53, 0xa2, 0xf5, 0x69, 0xa9, 0xd2, 0xa7, 0x29, 0xf0, 0x24, 0xc3, + 0x86, 0xeb, 0x16, 0xa6, 0xa3, 0xf9, 0x71, 0xf3, 0x55, 0xf2, 0xe2, 0x2c, 0x85, 0x6b, 0x6f, 0x3e, 0x4b, 0xe7, 0x53, + 0xb0, 0xae, 0x0c, 0xf3, 0x59, 0x3d, 0x0f, 0x20, 0x75, 0x08, 0x69, 0xd6, 0x34, 0xfc, 0x5b, 0xe5, 0x0a, 0xde, 0xda, + 0xe3, 0xdd, 0x60, 0x44, 0xa9, 0x23, 0x7d, 0xd2, 0x86, 0xd0, 0x25, 0x95, 0xfc, 0x47, 0x91, 0xc7, 0x18, 0xb3, 0xf1, + 0x9a, 0xc8, 0x3e, 0x8b, 0xfc, 0x55, 0x01, 0x80, 0x45, 0x80, 0x80, 0x9c, 0xce, 0x1d, 0x49, 0xfc, 0xe7, 0xe4, 0xdb, + 0x3f, 0xa6, 0x4b, 0xfb, 0x50, 0x16, 0x77, 0xa5, 0xa8, 0xaa, 0xa3, 0xd2, 0x76, 0xb6, 0x5c, 0x0f, 0xf4, 0xa1, 0xfd, + 0xbe, 0xa4, 0x0f, 0x4d, 0x31, 0x14, 0x05, 0x6e, 0x8d, 0xbd, 0x69, 0xca, 0x15, 0x4d, 0xf5, 0xc8, 0x58, 0x3f, 0xbf, + 0xdf, 0xbd, 0x8d, 0xbd, 0xd4, 0x0f, 0x52, 0x10, 0x84, 0x35, 0x7e, 0x52, 0x8a, 0x24, 0x70, 0x3e, 0xc3, 0x54, 0xe2, + 0xd3, 0xa5, 0x54, 0xf9, 0xc3, 0x48, 0xf3, 0x61, 0x0a, 0x7a, 0xd9, 0x7f, 0x54, 0x30, 0xff, 0x75, 0x7b, 0xb0, 0x3e, + 0xad, 0xcb, 0x34, 0xaa, 0x88, 0x2a, 0x2f, 0x4c, 0xb5, 0x09, 0x44, 0xf0, 0x17, 0xc2, 0x22, 0xf9, 0xf5, 0xc9, 0x91, + 0xa0, 0x31, 0x93, 0xe5, 0xe3, 0x91, 0xfb, 0x85, 0x7d, 0xe5, 0x3a, 0x9e, 0xff, 0xb9, 0x99, 0xff, 0x03, 0x74, 0x86, + 0x2c, 0x5e, 0x70, 0xcb, 0x60, 0x81, 0xb3, 0x5f, 0xba, 0x7a, 0xc0, 0xdf, 0xcc, 0x13, 0x2f, 0x80, 0x83, 0xf9, 0x05, + 0xba, 0x2a, 0xa6, 0xb3, 0x62, 0x00, 0x04, 0xb6, 0x7e, 0x63, 0xcd, 0x89, 0x37, 0x16, 0xcf, 0x95, 0x5c, 0x10, 0xfa, + 0xba, 0x0a, 0xb3, 0x71, 0x55, 0x6c, 0x2a, 0x51, 0x6c, 0xea, 0x1e, 0xa9, 0x65, 0xf3, 0x69, 0x6d, 0x2b, 0x64, 0x7f, + 0x12, 0x2d, 0xda, 0x2e, 0x43, 0x35, 0x19, 0x65, 0xe9, 0x7a, 0x0a, 0xa4, 0x7a, 0x01, 0x9c, 0x45, 0xe6, 0x95, 0x2f, + 0xce, 0x1e, 0xb0, 0x45, 0xe3, 0x29, 0x30, 0xa2, 0xd2, 0x1f, 0x79, 0x63, 0x74, 0x7a, 0xa2, 0xdf, 0xcf, 0xa7, 0x14, + 0xf2, 0xf5, 0x13, 0x60, 0x72, 0xd5, 0x72, 0x01, 0xfa, 0x32, 0xd4, 0x41, 0x25, 0x4a, 0xad, 0x18, 0x46, 0x2c, 0xfc, + 0x24, 0x90, 0xbd, 0x99, 0x82, 0x9a, 0x55, 0x94, 0x84, 0x4a, 0x54, 0x4a, 0xb6, 0x26, 0xa8, 0xa5, 0xf7, 0x45, 0x51, + 0xef, 0x2b, 0x70, 0x94, 0x8c, 0xb4, 0x59, 0x4e, 0x99, 0x71, 0x51, 0xe6, 0xa2, 0x1f, 0xec, 0xdf, 0x95, 0xe7, 0x37, + 0x32, 0x9f, 0xe5, 0xbe, 0xa3, 0x73, 0xda, 0x8e, 0x0b, 0x94, 0xb9, 0xe5, 0xb4, 0xd5, 0x92, 0xc7, 0xe4, 0x3d, 0x0b, + 0xb6, 0xfd, 0x97, 0x09, 0xf2, 0x2a, 0xc2, 0x7c, 0x42, 0x95, 0xcd, 0x3f, 0x20, 0xcc, 0x16, 0x07, 0xf6, 0xd8, 0x85, + 0x89, 0x48, 0x6f, 0xc1, 0x92, 0x18, 0x66, 0xa5, 0x08, 0xe3, 0x1d, 0x78, 0xff, 0x6c, 0x2a, 0x31, 0x3a, 0x43, 0x27, + 0xf7, 0xb3, 0x87, 0xb4, 0x4e, 0xce, 0xde, 0xbe, 0x3e, 0xfb, 0xae, 0x37, 0x28, 0x46, 0x69, 0x3c, 0xe8, 0x7d, 0x77, + 0xb6, 0xda, 0x00, 0x44, 0xa6, 0x38, 0x8b, 0xc9, 0x94, 0x26, 0xe2, 0x33, 0x32, 0x0c, 0x9e, 0xd5, 0x89, 0x38, 0xa3, + 0x89, 0xe9, 0xbe, 0x46, 0x69, 0xf2, 0xed, 0x28, 0xcc, 0xe1, 0xe5, 0x52, 0x6c, 0x2a, 0x11, 0x83, 0x9d, 0x52, 0xcd, + 0xb3, 0xbc, 0x7d, 0x16, 0xe7, 0xa3, 0x0e, 0x59, 0xa5, 0x03, 0x74, 0x7b, 0x22, 0xed, 0xaa, 0x74, 0x05, 0x84, 0x1e, + 0x00, 0x27, 0x5d, 0xf9, 0xf3, 0x70, 0x10, 0x09, 0x84, 0x5a, 0x30, 0x27, 0xd3, 0x88, 0x6e, 0x48, 0xaf, 0xb0, 0xcf, + 0xc0, 0x2c, 0xa4, 0x34, 0x0f, 0x6e, 0xae, 0x16, 0x2d, 0x77, 0xc5, 0xca, 0x51, 0x58, 0xad, 0x45, 0x54, 0x23, 0xd5, + 0x31, 0x38, 0xef, 0x40, 0x04, 0x80, 0x62, 0x04, 0xcf, 0x78, 0xd4, 0xef, 0x47, 0x2a, 0x28, 0x27, 0xa1, 0x5f, 0x14, + 0xfa, 0xa5, 0x31, 0x28, 0x63, 0xfe, 0x2e, 0xd4, 0xc4, 0x00, 0xf5, 0x96, 0x87, 0x8a, 0x23, 0x00, 0x97, 0x73, 0xc4, + 0x8c, 0xf3, 0x1e, 0x77, 0xd1, 0x38, 0x15, 0xef, 0x84, 0xba, 0x0e, 0x96, 0x0a, 0x75, 0xde, 0xd4, 0x47, 0x7a, 0x4e, + 0x9a, 0x04, 0x0d, 0xe2, 0x06, 0x1e, 0xaf, 0x86, 0x80, 0x6a, 0x25, 0xa4, 0xde, 0x42, 0xa7, 0x54, 0x75, 0x08, 0xac, + 0x01, 0x2e, 0x51, 0xd8, 0x56, 0x98, 0x1c, 0xd1, 0xa6, 0x2c, 0x45, 0x7e, 0xc4, 0x06, 0xed, 0x92, 0x91, 0xa9, 0x83, + 0xcb, 0xe5, 0x72, 0x22, 0xea, 0x5f, 0xf3, 0x2d, 0x80, 0xf3, 0x42, 0x7e, 0x6b, 0x37, 0x5b, 0x26, 0xd9, 0xae, 0x2b, + 0xc3, 0x59, 0x52, 0x8a, 0x6a, 0x5d, 0xe4, 0x55, 0x7a, 0x2f, 0x7e, 0xd6, 0x0f, 0x5d, 0x02, 0x29, 0xf4, 0x23, 0xbd, + 0x6e, 0x37, 0x47, 0xaa, 0x71, 0x74, 0x39, 0xb6, 0xa7, 0xd2, 0x4e, 0xf6, 0xaa, 0xc5, 0x9b, 0x2d, 0x73, 0x25, 0x69, + 0x1c, 0x8b, 0xfc, 0x6d, 0x1e, 0xa7, 0x91, 0x95, 0x1c, 0xfe, 0x1f, 0xde, 0xbe, 0x85, 0xbb, 0x6d, 0x1b, 0x5b, 0xf7, + 0xaf, 0x58, 0xbc, 0xa9, 0x4a, 0x44, 0x90, 0x2c, 0x39, 0x49, 0x67, 0x4a, 0x19, 0xd6, 0x71, 0xf3, 0x68, 0xd3, 0x36, + 0x71, 0x1a, 0xa7, 0x9d, 0xce, 0xe8, 0xea, 0xb8, 0x34, 0x09, 0x5b, 0x6c, 0x68, 0x40, 0x25, 0x29, 0x3f, 0x22, 0xf1, + 0xbf, 0xdf, 0xb5, 0x37, 0x9e, 0xa4, 0x68, 0x27, 0x33, 0xf7, 0xdc, 0xbb, 0xb2, 0x56, 0x2c, 0x82, 0x20, 0xde, 0xd8, + 0xd8, 0xd8, 0x8f, 0x6f, 0xeb, 0x00, 0xd5, 0x2e, 0xf2, 0x95, 0x8b, 0x8d, 0xfc, 0x22, 0x2b, 0x31, 0x60, 0x70, 0xa3, + 0x51, 0xad, 0x50, 0x53, 0x26, 0xf0, 0x85, 0x7c, 0x8f, 0x11, 0xb7, 0x59, 0x99, 0x00, 0xc3, 0x8f, 0x89, 0xfa, 0x92, + 0x9e, 0x42, 0x94, 0x07, 0x15, 0x8f, 0xfb, 0x05, 0x47, 0xc4, 0x6b, 0xab, 0x32, 0x07, 0x26, 0x5b, 0xab, 0x20, 0x11, + 0xec, 0x2e, 0x9b, 0xeb, 0x45, 0xb4, 0x50, 0x77, 0xa1, 0x5e, 0xbc, 0xdd, 0xf6, 0x12, 0x45, 0x07, 0x9c, 0xfc, 0x34, + 0x78, 0x15, 0x67, 0x39, 0x4f, 0xf7, 0x2a, 0xb9, 0xa7, 0x36, 0xd4, 0x9e, 0x72, 0xe6, 0x80, 0x9d, 0xf7, 0x75, 0xb5, + 0xa7, 0xd7, 0xf4, 0x9e, 0x6e, 0xe7, 0x1e, 0x5c, 0x30, 0x70, 0xe7, 0x5e, 0x66, 0xd7, 0x5c, 0xec, 0x81, 0x32, 0xd0, + 0x1a, 0x0f, 0xd4, 0xa2, 0x1a, 0xa9, 0x89, 0xd1, 0x81, 0xab, 0x13, 0x7d, 0x30, 0x07, 0xf4, 0x7b, 0x88, 0x15, 0xde, + 0x7a, 0xbb, 0xd2, 0x07, 0x6d, 0x40, 0x7f, 0x5e, 0x9a, 0x3e, 0xe8, 0x68, 0xf1, 0x2a, 0x24, 0x70, 0x63, 0x48, 0x35, + 0x52, 0xab, 0x91, 0x55, 0xa0, 0x78, 0xc3, 0x5b, 0xbc, 0x3b, 0xd7, 0x92, 0x8d, 0xf7, 0x12, 0x81, 0xbd, 0x32, 0x51, + 0xc5, 0x99, 0x38, 0xf6, 0x52, 0x79, 0xad, 0x9d, 0x64, 0x84, 0xf1, 0x2d, 0x2b, 0xa9, 0xbf, 0x43, 0xcc, 0x2d, 0xd2, + 0x1c, 0x06, 0x2f, 0xc3, 0x8a, 0xcc, 0x78, 0xbf, 0x2f, 0x67, 0x32, 0x2a, 0x67, 0x62, 0xbf, 0x8c, 0x14, 0x42, 0xdb, + 0x7d, 0x22, 0xa0, 0x07, 0x25, 0x40, 0xbe, 0x00, 0xa8, 0x7a, 0x48, 0xf8, 0xf3, 0x90, 0xd4, 0xa7, 0x53, 0xe8, 0x53, + 0x68, 0xeb, 0x15, 0xaf, 0xa0, 0xaa, 0x6e, 0x8c, 0x6c, 0xa3, 0x82, 0x16, 0x8f, 0xe5, 0x59, 0x6d, 0x18, 0x9b, 0x53, + 0xeb, 0x5d, 0x6f, 0x36, 0x98, 0xb2, 0xb9, 0x50, 0xab, 0x30, 0x24, 0xd1, 0x4d, 0xe9, 0x85, 0x0f, 0xb1, 0x58, 0x59, + 0xad, 0xcd, 0x6f, 0x62, 0x7f, 0x64, 0x22, 0xc5, 0xfd, 0x6c, 0x89, 0x73, 0x17, 0x8f, 0xe7, 0x55, 0x5f, 0x6b, 0x69, + 0x91, 0x69, 0xf3, 0x9d, 0xbe, 0x0c, 0x69, 0x2a, 0x6a, 0x48, 0xa3, 0xce, 0x0c, 0xba, 0x6f, 0x97, 0x57, 0x54, 0x23, + 0x4c, 0x80, 0x57, 0x3a, 0x83, 0x6e, 0x34, 0x1e, 0x88, 0xa2, 0x1a, 0x15, 0x6b, 0x21, 0x10, 0x6d, 0x18, 0x72, 0xcc, + 0x2c, 0x21, 0xc9, 0x3e, 0xf1, 0xef, 0x54, 0x70, 0x85, 0x22, 0xbe, 0x31, 0x70, 0xde, 0x95, 0xf5, 0xec, 0xae, 0x23, + 0x3f, 0x27, 0x16, 0x56, 0xfb, 0x0f, 0xcd, 0xa3, 0xd6, 0x38, 0x0b, 0x68, 0x6b, 0x5a, 0xdd, 0x70, 0xb8, 0x47, 0x75, + 0x2c, 0x4a, 0x03, 0x48, 0xec, 0x91, 0xe5, 0xa2, 0x75, 0xcc, 0xa0, 0x01, 0xfd, 0x6d, 0x76, 0xb5, 0xbe, 0x42, 0xd4, + 0xb6, 0x12, 0x59, 0x27, 0xa9, 0xfc, 0x4b, 0xda, 0xa3, 0xae, 0xed, 0xa9, 0xfc, 0x6f, 0xdb, 0x54, 0x39, 0xb4, 0x40, + 0xf2, 0xd8, 0xcd, 0x59, 0xa0, 0x3a, 0x12, 0x44, 0x81, 0xda, 0x7a, 0xc1, 0xd4, 0x3b, 0x65, 0x8a, 0x0e, 0xe4, 0xe7, + 0xc2, 0x9c, 0x61, 0x5f, 0x70, 0xc4, 0x98, 0xa5, 0x12, 0x83, 0xa9, 0x8f, 0x31, 0xaa, 0x69, 0xad, 0x00, 0x5d, 0x3f, + 0xdd, 0xc0, 0x9f, 0xa8, 0xa8, 0xd1, 0x50, 0x6b, 0x24, 0x85, 0xa2, 0x89, 0x0a, 0x3a, 0x96, 0x16, 0x3a, 0x98, 0x42, + 0x27, 0x91, 0xb0, 0x04, 0x34, 0x4c, 0x88, 0x4e, 0x2a, 0xf0, 0xd6, 0x00, 0xce, 0x7c, 0x5c, 0x94, 0xeb, 0x42, 0x1b, + 0xcc, 0xfd, 0x10, 0x5f, 0xf3, 0xd7, 0x2f, 0x9c, 0x51, 0x7d, 0xcb, 0x5a, 0xdf, 0xd3, 0x82, 0xfc, 0x10, 0x72, 0x8a, + 0x0e, 0x4c, 0xec, 0x68, 0x83, 0xc6, 0x18, 0x65, 0xad, 0x43, 0x5d, 0x9c, 0xe8, 0xf8, 0x2b, 0xda, 0x04, 0xef, 0x01, + 0x4f, 0x11, 0x6d, 0x78, 0x28, 0x8c, 0x55, 0x35, 0x3e, 0x95, 0xac, 0xa5, 0x07, 0x2b, 0x78, 0xba, 0x4e, 0x78, 0x08, + 0x7a, 0x24, 0xc2, 0x8e, 0xc2, 0x62, 0x1e, 0x2f, 0xe0, 0x38, 0x29, 0x08, 0xa8, 0x1d, 0xf4, 0x15, 0x7c, 0xbe, 0x40, + 0xf7, 0x57, 0x89, 0x1e, 0x60, 0x68, 0x41, 0xdc, 0x0c, 0x7d, 0x3a, 0xba, 0x8a, 0x57, 0x0d, 0x15, 0x09, 0x9f, 0x17, + 0x60, 0x3b, 0xa4, 0xd4, 0x53, 0xa0, 0x85, 0x4a, 0x94, 0x7e, 0x18, 0xf8, 0x0e, 0x0d, 0x7c, 0xad, 0x75, 0x80, 0x86, + 0x7e, 0xc6, 0x34, 0xb5, 0xce, 0x50, 0xf9, 0xcc, 0xbb, 0x67, 0x46, 0xcb, 0x99, 0x05, 0x63, 0xd0, 0xb7, 0xd1, 0x14, + 0xc5, 0x39, 0xf9, 0x2c, 0x28, 0xe2, 0x34, 0x8b, 0x73, 0xf0, 0xdb, 0x8c, 0x0b, 0xcc, 0x98, 0xc4, 0x15, 0xbf, 0x94, + 0x05, 0x68, 0xbb, 0x73, 0x95, 0x5a, 0xd7, 0x20, 0x20, 0xfb, 0x01, 0xac, 0x5e, 0x1a, 0x3a, 0x2a, 0xe7, 0xdd, 0xa5, + 0x4d, 0x21, 0x62, 0x11, 0x82, 0x4d, 0x33, 0x5d, 0xb2, 0xe3, 0x50, 0x69, 0x73, 0x20, 0xbe, 0x11, 0x1a, 0xf7, 0x4f, + 0xc3, 0xd8, 0x6a, 0x8a, 0xad, 0xdd, 0xdb, 0x76, 0xfb, 0x7b, 0xe9, 0xa5, 0xd3, 0x9c, 0xf4, 0x18, 0xfb, 0xbd, 0x0c, + 0x8b, 0x91, 0xed, 0x08, 0x81, 0x25, 0xe7, 0x7d, 0xea, 0xbf, 0xa2, 0xe5, 0x3c, 0x01, 0xd3, 0x11, 0x1d, 0x21, 0x17, + 0x28, 0x3b, 0x46, 0x71, 0x07, 0x06, 0x57, 0xf4, 0xfb, 0x60, 0x95, 0x61, 0x2e, 0x24, 0x4b, 0x92, 0x32, 0x78, 0x9e, + 0x7a, 0x18, 0xf0, 0x6b, 0xa6, 0xcc, 0x5d, 0x94, 0xf5, 0xe9, 0x92, 0x4c, 0x53, 0x64, 0x20, 0xd6, 0xe1, 0x26, 0x4b, + 0xa3, 0x44, 0x89, 0xc8, 0x96, 0xe8, 0x1f, 0x69, 0x28, 0x96, 0x0e, 0xd7, 0x8b, 0x54, 0x89, 0x50, 0x31, 0x4f, 0xf1, + 0xa4, 0x4e, 0xeb, 0x74, 0x84, 0xf1, 0x26, 0x41, 0x29, 0x57, 0xc3, 0x40, 0x95, 0x54, 0x2f, 0x85, 0x4d, 0xb1, 0xdd, + 0xea, 0x8b, 0x95, 0x98, 0xc7, 0x0b, 0x7c, 0x29, 0x70, 0x14, 0x7f, 0xe2, 0x5e, 0xac, 0x29, 0xb5, 0x3d, 0xa8, 0x1d, + 0x51, 0x42, 0x7f, 0xe2, 0x70, 0x91, 0xf8, 0x4e, 0xea, 0xb8, 0x7f, 0x68, 0x11, 0x72, 0xa6, 0x0e, 0x52, 0xc3, 0x0d, + 0xed, 0x08, 0xff, 0x0d, 0xd7, 0x67, 0x9c, 0xd1, 0x9b, 0x6a, 0x46, 0x8d, 0xdf, 0xeb, 0xe1, 0x19, 0xa3, 0x3e, 0x1b, + 0x38, 0xac, 0x10, 0x85, 0x36, 0xec, 0xa8, 0x54, 0xa2, 0x85, 0xa1, 0x54, 0x7f, 0x09, 0x15, 0x47, 0xdc, 0x99, 0x51, + 0x96, 0x8c, 0x4f, 0xcb, 0x43, 0x31, 0x1d, 0x0c, 0x4a, 0x52, 0x19, 0x0b, 0x3d, 0xb8, 0x1e, 0x78, 0xfe, 0x3d, 0x70, + 0x0b, 0xf1, 0xe0, 0x90, 0xc5, 0x90, 0x1b, 0x70, 0xfc, 0x16, 0x27, 0x57, 0x8d, 0x4a, 0x15, 0xbc, 0x9a, 0xa8, 0x16, + 0xfc, 0x54, 0x86, 0x01, 0xfa, 0x24, 0x05, 0x60, 0x32, 0x98, 0xf2, 0x5b, 0x90, 0x28, 0x9d, 0xa9, 0x1b, 0xd2, 0xaf, + 0xa2, 0xe0, 0x17, 0xbc, 0xe0, 0x22, 0x71, 0x05, 0x58, 0xde, 0xc1, 0xf6, 0x3a, 0xaa, 0xa8, 0x02, 0xe2, 0x35, 0x3d, + 0x8e, 0xb8, 0xf1, 0xfe, 0x33, 0x3d, 0xb6, 0x40, 0xad, 0xd6, 0xb1, 0xc1, 0x67, 0x8e, 0xc1, 0x05, 0x5d, 0x4b, 0x6c, + 0x0d, 0xd5, 0xb0, 0x22, 0x30, 0x70, 0x01, 0x07, 0x61, 0x89, 0xe2, 0xd8, 0x4a, 0x5e, 0x91, 0x86, 0x94, 0xf6, 0x81, + 0xe1, 0x68, 0x93, 0x1c, 0xdf, 0x66, 0xd9, 0x4d, 0xe0, 0x7c, 0xd1, 0x39, 0x69, 0x26, 0x96, 0x0d, 0xde, 0xe7, 0xcd, + 0xf9, 0x75, 0xff, 0x90, 0x50, 0x15, 0xec, 0x86, 0xb7, 0x83, 0xdd, 0x38, 0xe1, 0xd7, 0x5c, 0x2c, 0x74, 0x7c, 0x16, + 0x73, 0xc9, 0xf2, 0x5b, 0xeb, 0xdd, 0x92, 0xa4, 0x56, 0x40, 0xfb, 0x2c, 0x0b, 0x6a, 0x22, 0x00, 0xdd, 0x0f, 0x7f, + 0x81, 0xd0, 0x19, 0xfe, 0xf6, 0x18, 0x5c, 0x91, 0xc2, 0x7b, 0x87, 0x40, 0x58, 0xd3, 0xcd, 0x9d, 0xda, 0x80, 0x2f, + 0xc6, 0xfd, 0x19, 0x53, 0x4f, 0xbf, 0xcd, 0xe4, 0xae, 0xae, 0xdb, 0x23, 0xcb, 0xf0, 0x11, 0xae, 0x14, 0x00, 0xcb, + 0x84, 0xbf, 0x18, 0x5b, 0x52, 0x7d, 0x02, 0x70, 0x6a, 0x3a, 0xa2, 0x4f, 0x10, 0x18, 0x38, 0x25, 0x5a, 0x8c, 0xae, + 0x95, 0x23, 0x9a, 0x41, 0x5a, 0xd3, 0xad, 0x30, 0xde, 0x7a, 0xd0, 0x42, 0xcf, 0x34, 0x9c, 0xf8, 0x0f, 0x9a, 0x79, + 0x55, 0x40, 0x00, 0xad, 0x8c, 0xe0, 0xad, 0xf5, 0xd1, 0x1c, 0x21, 0x3e, 0x61, 0x49, 0x34, 0x61, 0xf1, 0x4c, 0xf1, + 0x63, 0x42, 0x37, 0x4d, 0x6d, 0xd3, 0x07, 0xa4, 0xbf, 0xb8, 0x66, 0xfd, 0x94, 0x65, 0xed, 0xdb, 0x43, 0xc5, 0x8b, + 0x69, 0x33, 0xf8, 0x61, 0xa2, 0x8a, 0xf1, 0xbf, 0xa8, 0x7c, 0xa9, 0x15, 0xc0, 0x30, 0x77, 0xd5, 0xd3, 0xef, 0x37, + 0xb3, 0xe5, 0x40, 0xa8, 0xfc, 0xce, 0x20, 0xe9, 0xd3, 0xf1, 0xfc, 0xc0, 0x26, 0x51, 0x5b, 0xe8, 0xf9, 0xe3, 0x52, + 0x37, 0xa1, 0xf2, 0xda, 0xd4, 0x88, 0x56, 0xc8, 0x50, 0xd9, 0x3a, 0x60, 0x7d, 0xff, 0x10, 0xee, 0x2e, 0x6a, 0x1a, + 0x6a, 0xdd, 0x73, 0xd7, 0xa2, 0xe0, 0xc4, 0x1f, 0x60, 0x2c, 0x2e, 0x24, 0xb5, 0x0e, 0xc2, 0xa4, 0x1f, 0x2d, 0x4e, + 0x72, 0xa3, 0xae, 0x4e, 0xce, 0x14, 0xf3, 0x04, 0x2e, 0xaa, 0x65, 0xdb, 0x5f, 0x51, 0xa9, 0x4b, 0xb9, 0xbd, 0xa2, + 0x34, 0x3d, 0xa4, 0xed, 0x55, 0x9c, 0xb7, 0x05, 0x17, 0xfc, 0x0b, 0x05, 0x17, 0xd6, 0xc1, 0xba, 0xe3, 0x4e, 0xd9, + 0x13, 0x9e, 0x28, 0xd3, 0xda, 0xe0, 0xae, 0x1b, 0x8c, 0x89, 0xb1, 0xdf, 0x5d, 0xf2, 0xe4, 0x23, 0xb2, 0xe0, 0xdf, + 0x65, 0x02, 0x3c, 0x93, 0xdd, 0x2b, 0x95, 0xff, 0x07, 0xff, 0x6a, 0x6b, 0xdf, 0x59, 0xf3, 0x4f, 0xcf, 0x7a, 0xb8, + 0x73, 0x98, 0xfc, 0x00, 0x9d, 0x01, 0xdd, 0x5c, 0xc9, 0x94, 0x03, 0x32, 0x80, 0xb5, 0x48, 0x46, 0x03, 0x3e, 0xb4, + 0xb2, 0x6c, 0xfb, 0x4e, 0xab, 0x0b, 0xc2, 0xbd, 0x04, 0x6e, 0x7a, 0x7f, 0x6d, 0x66, 0xe6, 0x74, 0xad, 0x44, 0xd3, + 0xa5, 0xb1, 0xb5, 0x2c, 0x55, 0xc0, 0xee, 0xf7, 0x9e, 0x64, 0xd3, 0xfc, 0x70, 0x39, 0xcd, 0x2d, 0x75, 0xdb, 0xb8, + 0x65, 0x03, 0x40, 0x88, 0x5d, 0x6b, 0x2b, 0x07, 0x90, 0xdc, 0x1e, 0x84, 0xf0, 0xb5, 0x22, 0xf4, 0x54, 0x89, 0xd0, + 0xa7, 0x69, 0xb3, 0x0f, 0x76, 0x55, 0xad, 0x1b, 0x71, 0x8e, 0x06, 0xa9, 0x66, 0xe4, 0x4f, 0xae, 0x79, 0x71, 0x91, + 0xcb, 0x1b, 0xc0, 0x40, 0x26, 0xb5, 0x51, 0x58, 0x5e, 0x81, 0x3b, 0x3f, 0x3a, 0x8e, 0x33, 0x31, 0xca, 0x31, 0x58, + 0x2b, 0xc2, 0x23, 0xeb, 0xc4, 0x19, 0x80, 0x20, 0xfb, 0x93, 0xa6, 0xe3, 0xb9, 0x16, 0x18, 0xd3, 0x17, 0xb8, 0xab, + 0x9c, 0x1d, 0x6d, 0x72, 0xbb, 0xe8, 0x9b, 0x33, 0xac, 0x3b, 0x52, 0x5a, 0x1b, 0x8b, 0xae, 0x3b, 0x58, 0x6b, 0x06, + 0x6d, 0x11, 0x4a, 0x3e, 0xe4, 0x4e, 0xda, 0x4f, 0x01, 0x0d, 0xce, 0xb2, 0xf4, 0xd6, 0x5a, 0xe5, 0x6f, 0xb4, 0x10, + 0x27, 0x8a, 0xa9, 0x13, 0xdf, 0x44, 0x89, 0x3e, 0x3f, 0x13, 0xe3, 0x06, 0x02, 0xa9, 0x3f, 0x60, 0x50, 0x8d, 0x22, + 0x4c, 0xe0, 0x3a, 0x10, 0xc5, 0xf6, 0x44, 0x6d, 0x2c, 0x47, 0xd0, 0x09, 0x21, 0xde, 0x41, 0x19, 0xc6, 0xea, 0xe2, + 0x40, 0x1b, 0x2c, 0x7d, 0xdd, 0x5a, 0xe7, 0x86, 0x50, 0x18, 0x27, 0x30, 0xc5, 0x20, 0xa9, 0xb3, 0xce, 0x32, 0x41, + 0x95, 0x1d, 0x93, 0xce, 0xfb, 0x00, 0xdd, 0x5d, 0x8b, 0xa6, 0xf8, 0xba, 0x73, 0x07, 0xdd, 0xc7, 0xf5, 0x6b, 0x2d, + 0x72, 0x83, 0x3f, 0x6f, 0x89, 0xb0, 0x08, 0x9c, 0xb5, 0x26, 0x5f, 0x35, 0xc2, 0x81, 0x29, 0xc9, 0x34, 0xec, 0x25, + 0xca, 0xa6, 0x7b, 0xbb, 0xed, 0xf5, 0xee, 0x15, 0x71, 0xf5, 0x18, 0xab, 0xbc, 0x9b, 0xb9, 0xbd, 0x53, 0xad, 0xc5, + 0xee, 0x4d, 0xdb, 0x4f, 0xb1, 0xa3, 0xd6, 0xda, 0xed, 0x86, 0x13, 0x6a, 0xc8, 0xb7, 0xa2, 0x4a, 0xab, 0xd3, 0x8d, + 0x41, 0x3b, 0xc4, 0xb3, 0x16, 0x19, 0xdc, 0x28, 0x5f, 0x38, 0xa1, 0x93, 0x8a, 0xb3, 0xea, 0xd4, 0x05, 0x9b, 0x2b, + 0x5e, 0x2d, 0x65, 0x1a, 0x09, 0x8a, 0x36, 0xe7, 0x51, 0x49, 0x13, 0xb9, 0x16, 0x55, 0x24, 0x6b, 0xd4, 0x8b, 0x5a, + 0x8d, 0x01, 0x02, 0x32, 0x9d, 0x35, 0x3d, 0xa8, 0x82, 0xd9, 0x50, 0x46, 0x72, 0xfa, 0x1e, 0x2c, 0xed, 0x91, 0x63, + 0xad, 0xef, 0xab, 0xb3, 0xc5, 0xb7, 0x7a, 0x42, 0x30, 0x85, 0xd9, 0x03, 0x61, 0xe0, 0x9a, 0xc6, 0x90, 0xd3, 0x2e, + 0x71, 0x59, 0xd3, 0x2d, 0xe1, 0x1e, 0x6e, 0x57, 0xb2, 0x23, 0x37, 0x4f, 0x9a, 0x9b, 0x2b, 0xd8, 0x51, 0x31, 0x1f, + 0x83, 0xf6, 0x4b, 0xaa, 0x6b, 0x97, 0xe6, 0xd6, 0xe3, 0x41, 0x40, 0x83, 0x41, 0x61, 0xf8, 0xd7, 0x89, 0xf1, 0xf0, + 0xa4, 0x01, 0x41, 0x52, 0x2e, 0xc2, 0xb1, 0x6f, 0x44, 0x3f, 0x99, 0xca, 0x43, 0x8e, 0x16, 0xef, 0xd0, 0xea, 0x04, + 0xa2, 0x78, 0x89, 0x50, 0x12, 0xa3, 0x2a, 0x34, 0x22, 0x28, 0x4f, 0xcb, 0x5f, 0xaa, 0xea, 0x10, 0x50, 0x48, 0xfb, + 0x8a, 0x42, 0xd9, 0x26, 0x31, 0x34, 0xc3, 0x2f, 0xe7, 0x93, 0x85, 0x9e, 0x81, 0x81, 0x9c, 0x1f, 0x2c, 0xf4, 0x2c, + 0x0c, 0xe4, 0xfc, 0xc9, 0xa2, 0x76, 0xeb, 0x40, 0x13, 0x10, 0xcf, 0x85, 0xa3, 0x93, 0xd2, 0xaa, 0x6c, 0x01, 0xdd, + 0x3c, 0x44, 0xd0, 0x7f, 0xb2, 0x87, 0xa0, 0x93, 0x0b, 0xed, 0xc8, 0x0d, 0x68, 0x3b, 0x0e, 0x81, 0xbd, 0x62, 0x52, + 0x61, 0x02, 0x10, 0x1d, 0xb2, 0x31, 0x18, 0x62, 0xab, 0x0f, 0x0e, 0xd9, 0x78, 0xea, 0x93, 0x20, 0x60, 0x74, 0x7f, + 0x30, 0x90, 0xe0, 0xb7, 0x78, 0x95, 0x3e, 0xda, 0x08, 0x74, 0xd3, 0x77, 0x77, 0x43, 0xef, 0xe2, 0x0a, 0x4e, 0xd5, + 0xee, 0x9e, 0x84, 0x6e, 0x32, 0xed, 0x00, 0xbd, 0x86, 0xb8, 0x21, 0xbf, 0x32, 0x1a, 0x8d, 0x6c, 0x4a, 0x48, 0x88, + 0xe1, 0x1c, 0x9a, 0x39, 0x2d, 0x97, 0xaf, 0x6e, 0x3d, 0x1b, 0x90, 0x61, 0xa6, 0xb7, 0x4c, 0xd6, 0x0f, 0x50, 0x56, + 0x3d, 0x86, 0x76, 0xe8, 0x3d, 0x72, 0xfc, 0xf0, 0xe0, 0x9b, 0x8c, 0x9f, 0x39, 0x5c, 0x7b, 0x38, 0x17, 0xbe, 0xcb, + 0x9a, 0x91, 0x39, 0x74, 0x9e, 0x7d, 0x1c, 0xef, 0x61, 0x9c, 0x7c, 0x9e, 0x85, 0xf2, 0xc6, 0x6b, 0xfa, 0x1f, 0x95, + 0xde, 0xec, 0x70, 0xc8, 0xe9, 0x0a, 0x56, 0xdc, 0xac, 0x0a, 0x0d, 0x3f, 0x8b, 0xbc, 0x71, 0xc4, 0x6b, 0x12, 0x55, + 0xdd, 0xe7, 0xbd, 0x0d, 0x53, 0xda, 0x31, 0x0e, 0x00, 0x4e, 0xd4, 0xaa, 0x61, 0x57, 0x1a, 0xd7, 0xea, 0x20, 0x86, + 0xa1, 0x84, 0xad, 0x12, 0x47, 0x42, 0xf9, 0x1b, 0x80, 0xb0, 0x18, 0x8a, 0xe3, 0xad, 0x61, 0x7d, 0x80, 0xfd, 0xd0, + 0x05, 0x9a, 0xe6, 0x94, 0x6a, 0x06, 0x00, 0x49, 0xc0, 0x1f, 0x3d, 0xdd, 0x34, 0x54, 0xb6, 0x79, 0x1e, 0x5a, 0x56, + 0x57, 0xf0, 0x40, 0x4f, 0x5d, 0xc9, 0xc0, 0xb8, 0xaa, 0x63, 0x6f, 0x73, 0x7f, 0x7b, 0xb4, 0x8a, 0x7c, 0x67, 0x93, + 0xda, 0x66, 0x55, 0x68, 0xec, 0xe3, 0x09, 0x3d, 0x9d, 0x00, 0xad, 0xd7, 0x96, 0x8a, 0xf6, 0xfb, 0x28, 0x46, 0x8d, + 0x0b, 0x05, 0x56, 0x61, 0x22, 0xc1, 0x21, 0xc2, 0x08, 0xa1, 0xdf, 0x97, 0xe1, 0xc6, 0x17, 0x64, 0x10, 0x0d, 0xd7, + 0xa2, 0xe3, 0x0f, 0x39, 0x5e, 0xb4, 0x2d, 0x55, 0x35, 0x27, 0x4d, 0x5b, 0x02, 0x6f, 0xc2, 0x01, 0xb6, 0xf3, 0x4f, + 0x1b, 0x22, 0x57, 0xe1, 0xa2, 0x84, 0xef, 0x88, 0x6b, 0x41, 0x74, 0x53, 0x9b, 0x7a, 0x1b, 0x76, 0x88, 0x8e, 0xa6, + 0x78, 0x74, 0xc8, 0x3d, 0x77, 0xcf, 0x6d, 0x11, 0xdf, 0x7c, 0x86, 0xdc, 0x35, 0x9d, 0xbd, 0x14, 0x61, 0x50, 0xb7, + 0x6c, 0xa0, 0x58, 0x87, 0x4e, 0x50, 0x80, 0x51, 0x5b, 0x3e, 0x01, 0x1d, 0x1b, 0x0c, 0x2a, 0x82, 0x4f, 0x0a, 0xdb, + 0xa6, 0x41, 0xfe, 0x88, 0x77, 0x43, 0x87, 0xd7, 0x96, 0x3c, 0x10, 0xaf, 0xb0, 0xcf, 0x94, 0x70, 0xff, 0x82, 0x82, + 0xee, 0x28, 0x2f, 0x57, 0x85, 0xab, 0xd2, 0x00, 0x54, 0xd9, 0xf1, 0x5c, 0x6b, 0x4a, 0x5a, 0xc0, 0x4a, 0x49, 0xdd, + 0xf9, 0x4d, 0x44, 0xdc, 0x92, 0xa9, 0x98, 0xad, 0xba, 0x51, 0xe5, 0xa1, 0x44, 0x91, 0x8e, 0x3d, 0xdb, 0x39, 0x58, + 0x03, 0xe0, 0x29, 0x6c, 0x2f, 0xce, 0xb0, 0xa0, 0x8c, 0xcb, 0x96, 0xb9, 0x04, 0x8a, 0xfa, 0x61, 0x9c, 0x97, 0x1d, + 0x5f, 0xee, 0x8e, 0xb6, 0xf7, 0xd0, 0x1b, 0xb1, 0x31, 0x5e, 0x5f, 0x46, 0x4d, 0xbf, 0x78, 0x86, 0x2b, 0x4b, 0x41, + 0x1e, 0x68, 0xaa, 0x47, 0x18, 0x1d, 0x02, 0xd3, 0x94, 0x1f, 0xb1, 0xf1, 0x74, 0x38, 0x34, 0x64, 0xd0, 0x6b, 0x26, + 0xc6, 0xff, 0xfa, 0x02, 0x5a, 0x67, 0x26, 0xae, 0xf1, 0x69, 0xfb, 0x0a, 0x5a, 0xdd, 0xa2, 0x4c, 0xee, 0x0c, 0x0c, + 0x1f, 0x68, 0xc9, 0x14, 0x4c, 0x15, 0xde, 0x10, 0xa9, 0x64, 0x9f, 0x96, 0xd6, 0x61, 0xdf, 0x2e, 0x14, 0x5a, 0x68, + 0xe2, 0x57, 0x19, 0xe2, 0xa7, 0xae, 0x33, 0xff, 0x36, 0xed, 0x53, 0x83, 0x58, 0x58, 0x12, 0xa3, 0x10, 0xbf, 0x38, + 0x55, 0xb6, 0x13, 0x42, 0x05, 0xc4, 0x43, 0xd7, 0xba, 0x71, 0x24, 0x55, 0xec, 0x49, 0xa1, 0xf1, 0xd4, 0x70, 0xdf, + 0x0b, 0x1d, 0xb3, 0x0e, 0xb3, 0xb8, 0xcd, 0x1a, 0x49, 0x8d, 0x71, 0x2a, 0x4c, 0x70, 0x4a, 0xb9, 0x8a, 0x04, 0x46, + 0xc7, 0xb3, 0x85, 0x41, 0x54, 0x49, 0x4c, 0x32, 0xb6, 0x16, 0xc2, 0xc4, 0xae, 0x73, 0x85, 0x69, 0xea, 0x22, 0xf5, + 0x9b, 0x81, 0xc9, 0x82, 0x86, 0xfc, 0x1e, 0x8d, 0xd6, 0x54, 0x4d, 0x01, 0x86, 0x71, 0x94, 0x6a, 0xfc, 0x5b, 0x84, + 0xda, 0x0c, 0x03, 0x00, 0xdb, 0xbc, 0x93, 0x99, 0xa8, 0x5e, 0x0b, 0x84, 0x40, 0x73, 0xf6, 0x53, 0x45, 0xb5, 0x33, + 0x0b, 0x46, 0xd1, 0x6e, 0xaf, 0x7c, 0x3e, 0x70, 0x42, 0x79, 0xac, 0x2e, 0x50, 0xaf, 0x64, 0xf1, 0x46, 0xa6, 0xbc, + 0x15, 0x17, 0x73, 0x4f, 0xb2, 0x0f, 0xf9, 0x08, 0xce, 0x2b, 0x74, 0x2a, 0x37, 0xdb, 0x44, 0x99, 0x25, 0x49, 0xc6, + 0x02, 0x63, 0xf3, 0x12, 0xcc, 0xa4, 0x66, 0xc6, 0xf0, 0x6b, 0x08, 0x2e, 0xb6, 0x73, 0x12, 0x6e, 0xee, 0xe7, 0x81, + 0x21, 0x34, 0xb9, 0x68, 0x89, 0x86, 0xad, 0x1d, 0xaf, 0x27, 0xd7, 0x84, 0xfb, 0xb0, 0x11, 0x6b, 0x32, 0xc6, 0xb8, + 0x36, 0x37, 0xb2, 0x7e, 0xb4, 0xc0, 0x83, 0x31, 0x65, 0xfd, 0x09, 0x64, 0x5a, 0x49, 0x59, 0xe7, 0x0b, 0x23, 0x66, + 0x52, 0x89, 0xde, 0xed, 0x1b, 0x9f, 0xd5, 0x5d, 0x44, 0xfd, 0xd6, 0x7e, 0x4f, 0xea, 0xe1, 0xce, 0x7f, 0x50, 0x58, + 0x83, 0xca, 0x88, 0xcb, 0x88, 0xf2, 0xcc, 0x81, 0x6e, 0x9a, 0x14, 0x71, 0x7a, 0xb6, 0x8a, 0x8b, 0x92, 0xa7, 0x50, + 0xa9, 0xa6, 0x6e, 0x51, 0x6f, 0x02, 0xf6, 0x86, 0x48, 0x92, 0xac, 0xa5, 0xb1, 0x15, 0xbb, 0x34, 0x48, 0xcf, 0xbd, + 0x61, 0x96, 0x5e, 0x55, 0x68, 0x48, 0x4b, 0xbd, 0xb3, 0x50, 0xc9, 0xfc, 0x15, 0xff, 0x19, 0xd4, 0x0a, 0x74, 0xb4, + 0x49, 0x31, 0x9e, 0x03, 0x23, 0xbe, 0x1b, 0xc1, 0xea, 0x01, 0xe2, 0xa2, 0x09, 0x4a, 0xbd, 0x23, 0x76, 0xfc, 0xdc, + 0xe4, 0xe1, 0x5d, 0xc8, 0x39, 0x83, 0x4f, 0x1f, 0x66, 0x89, 0x5a, 0xeb, 0x48, 0x8c, 0xd4, 0x0c, 0xa0, 0xe9, 0xa0, + 0xcc, 0x79, 0x2c, 0x82, 0x59, 0xcf, 0x24, 0x46, 0x3d, 0xae, 0x7f, 0x81, 0x86, 0xda, 0x6f, 0x56, 0x96, 0x67, 0xd5, + 0xdd, 0x97, 0x70, 0x60, 0x53, 0x5b, 0x41, 0x8f, 0xd7, 0x95, 0xbc, 0xbc, 0x54, 0xdd, 0xf6, 0x0b, 0x31, 0x72, 0xba, + 0xc6, 0xb5, 0x74, 0x5e, 0x2d, 0x58, 0xaf, 0x3b, 0xdd, 0x2c, 0xee, 0x66, 0x19, 0x0d, 0x84, 0xb5, 0x9d, 0x4f, 0x34, + 0x7f, 0xd6, 0x6c, 0xbb, 0x8f, 0xb7, 0x20, 0x66, 0x01, 0x00, 0xa4, 0x07, 0x51, 0xb0, 0xcc, 0x52, 0x1e, 0x50, 0x79, + 0x1f, 0x47, 0x59, 0x28, 0xbd, 0x9c, 0x65, 0xfc, 0xb4, 0x69, 0xac, 0x75, 0x56, 0x28, 0x43, 0x6b, 0xa3, 0x3b, 0x5d, + 0x65, 0x88, 0xed, 0x27, 0x71, 0xb6, 0x00, 0xf7, 0xc7, 0x0c, 0x85, 0x86, 0xce, 0x32, 0xd2, 0x44, 0xc3, 0x77, 0xdd, + 0x33, 0xc8, 0x28, 0x4e, 0xd6, 0x79, 0x25, 0xdd, 0xe8, 0xb3, 0x36, 0x12, 0xe6, 0x1e, 0xa2, 0x5f, 0xc5, 0xe0, 0x51, + 0xee, 0xf3, 0xda, 0xe8, 0x64, 0x5a, 0x46, 0xda, 0x9d, 0x9f, 0xd4, 0xcb, 0x2c, 0xd5, 0x3a, 0x6c, 0x9f, 0x61, 0x6f, + 0x8d, 0x49, 0x6f, 0x42, 0x6a, 0x18, 0x89, 0xcf, 0x67, 0xd4, 0x08, 0x01, 0x6d, 0x39, 0xfe, 0x0e, 0x9f, 0x61, 0x68, + 0x0a, 0x2c, 0x55, 0xdc, 0xc2, 0x6e, 0xf8, 0x9a, 0x4f, 0x56, 0x2d, 0x00, 0x11, 0xac, 0x7c, 0xbd, 0x8b, 0x57, 0x42, + 0x7d, 0xa6, 0xcd, 0x00, 0x90, 0x05, 0xa5, 0xdc, 0xf1, 0x53, 0x2a, 0x1d, 0x2c, 0x51, 0xb4, 0xbd, 0x9c, 0xbe, 0xd1, + 0xb1, 0xf1, 0x43, 0x7a, 0x2e, 0x60, 0xbb, 0x90, 0xdf, 0xba, 0x57, 0x2f, 0x51, 0x91, 0xda, 0x36, 0xeb, 0x01, 0xbe, + 0xdc, 0xa0, 0x49, 0x18, 0x41, 0x99, 0x32, 0x05, 0x30, 0xb8, 0xa9, 0x46, 0xc1, 0xa4, 0xd5, 0x48, 0xd8, 0x52, 0x4f, + 0xb2, 0xdc, 0xf4, 0xc1, 0xa9, 0xee, 0x11, 0xf4, 0x68, 0x87, 0x93, 0x96, 0xfd, 0x5a, 0xc1, 0xd1, 0xc9, 0xd5, 0x10, + 0x35, 0xf3, 0x5e, 0xdb, 0x91, 0x21, 0xe5, 0x32, 0x0c, 0x04, 0x53, 0x8e, 0x79, 0x7a, 0x6c, 0x3d, 0x23, 0xa2, 0x07, + 0xce, 0x3e, 0xd3, 0xad, 0xba, 0x92, 0x80, 0xe8, 0xf8, 0xcd, 0xd3, 0xd7, 0x57, 0xf1, 0xa5, 0x41, 0x51, 0x6a, 0x58, + 0xc4, 0x28, 0xd3, 0xbe, 0x4a, 0xc2, 0xe0, 0xfd, 0xfa, 0xfe, 0x67, 0x95, 0xa5, 0xf6, 0x7b, 0xb0, 0xb1, 0xa2, 0xaa, + 0x5f, 0x4b, 0x5e, 0x34, 0x05, 0x58, 0xf7, 0x59, 0xa2, 0x40, 0xee, 0xf7, 0x36, 0xcd, 0x7c, 0x13, 0x35, 0x6e, 0x36, + 0xac, 0x37, 0xae, 0xdb, 0xa5, 0xb6, 0x64, 0x47, 0x56, 0x22, 0x67, 0x16, 0x83, 0x19, 0x3f, 0x2a, 0x0c, 0x4a, 0xc3, + 0x06, 0x55, 0xa9, 0xf8, 0xbd, 0x11, 0xc1, 0xa9, 0x63, 0x55, 0x61, 0x4c, 0x03, 0x66, 0x5b, 0x51, 0x6b, 0x50, 0x07, + 0xa5, 0xb4, 0x35, 0x51, 0xd8, 0x7e, 0x67, 0x05, 0x35, 0xbf, 0xff, 0x69, 0x0c, 0xf9, 0x9a, 0x52, 0x50, 0x49, 0xc0, + 0xce, 0xa0, 0xd1, 0x53, 0x25, 0x0c, 0xa4, 0x20, 0x78, 0x02, 0x94, 0x2f, 0xa2, 0xc6, 0x6a, 0xb7, 0xaf, 0x4e, 0x8d, + 0xd1, 0x16, 0x10, 0x5a, 0x48, 0x8f, 0x2e, 0xfb, 0xb8, 0x8d, 0x75, 0x20, 0xf1, 0xe0, 0x04, 0xdb, 0xb9, 0xba, 0x46, + 0x23, 0xa1, 0xf9, 0x43, 0xa3, 0x01, 0xaf, 0x69, 0x05, 0x0a, 0xf5, 0x1c, 0x47, 0x43, 0x67, 0x87, 0x14, 0x44, 0x6c, + 0xd0, 0xc2, 0xbe, 0x7b, 0x3e, 0x34, 0xfb, 0x7a, 0x9e, 0x2c, 0x48, 0x4d, 0xa5, 0xfb, 0xdc, 0x2d, 0x21, 0x6b, 0xd5, + 0xa1, 0xac, 0x3c, 0xc0, 0xf1, 0x42, 0xc9, 0xfc, 0x1d, 0x26, 0x35, 0x4a, 0x63, 0x42, 0x63, 0xc4, 0x02, 0x96, 0x04, + 0xed, 0xf5, 0x40, 0xfd, 0x32, 0x08, 0x15, 0xce, 0xf4, 0x44, 0xe2, 0x53, 0xca, 0xd5, 0xa7, 0x05, 0xa9, 0xa7, 0x05, + 0x73, 0xa0, 0x97, 0xbe, 0x95, 0x5f, 0xd9, 0xf8, 0x68, 0x77, 0xef, 0x9a, 0x0b, 0xeb, 0x18, 0x82, 0x61, 0x0b, 0xbf, + 0x39, 0x35, 0x05, 0x60, 0xc3, 0x63, 0x5d, 0x96, 0x6f, 0xd4, 0x44, 0x66, 0x71, 0x48, 0x22, 0x90, 0x6c, 0x37, 0x37, + 0xb7, 0x11, 0x6c, 0x7b, 0x0b, 0xb5, 0xa1, 0xfe, 0xf2, 0xb6, 0xfb, 0x3d, 0xc3, 0xcb, 0x3d, 0xb9, 0x77, 0xd3, 0x86, + 0xf2, 0x87, 0xfb, 0x57, 0xc9, 0xff, 0x55, 0x25, 0xf7, 0x5b, 0x65, 0xd6, 0x6d, 0xf1, 0x7e, 0xd7, 0x71, 0xcb, 0x31, + 0x1a, 0x04, 0xd6, 0x14, 0x18, 0x48, 0x4f, 0x1a, 0xd3, 0x44, 0x87, 0x54, 0x66, 0xcc, 0xe0, 0xd1, 0x05, 0x68, 0x0e, + 0xd3, 0x79, 0x1e, 0x03, 0x70, 0x80, 0x7f, 0xe4, 0x11, 0xea, 0x9f, 0xce, 0xf3, 0xe0, 0x2c, 0x18, 0x94, 0x83, 0x40, + 0x7f, 0xe2, 0x9a, 0x13, 0x2c, 0x40, 0xe7, 0x16, 0x33, 0x08, 0x36, 0x69, 0xcd, 0x1c, 0xe2, 0xc3, 0x64, 0x3a, 0x18, + 0xc4, 0x64, 0x03, 0x20, 0x7d, 0xf1, 0xc2, 0x3a, 0x07, 0x15, 0x7a, 0x41, 0xb6, 0xea, 0x2e, 0x9a, 0x15, 0x7b, 0xd5, + 0x4e, 0xf3, 0x7e, 0x3f, 0x9f, 0x97, 0x83, 0xa0, 0x51, 0x61, 0x61, 0xbc, 0xff, 0x68, 0xf3, 0x4b, 0xa3, 0x93, 0x26, + 0x18, 0xa6, 0xf6, 0x18, 0xd5, 0x2b, 0x9e, 0x66, 0xb4, 0x71, 0x3b, 0x56, 0xca, 0x17, 0x10, 0xc5, 0x03, 0x43, 0xd6, + 0xca, 0xbb, 0x73, 0xf0, 0xba, 0xdc, 0x78, 0x73, 0x44, 0x01, 0x76, 0x53, 0x18, 0x27, 0x35, 0x17, 0x5d, 0xd4, 0xc4, + 0x33, 0xd8, 0xe9, 0xea, 0xad, 0x44, 0xab, 0xf1, 0x5e, 0xbc, 0x6b, 0x36, 0xfe, 0x56, 0xee, 0xe9, 0x32, 0xf7, 0x2e, + 0x00, 0x71, 0x76, 0x2f, 0xae, 0xf6, 0xb0, 0xd4, 0xbd, 0x60, 0x60, 0x91, 0x43, 0xda, 0xd5, 0xea, 0xa1, 0x88, 0xd4, + 0x79, 0x0c, 0x06, 0x4c, 0xa6, 0x21, 0x35, 0x99, 0xf6, 0x0a, 0x05, 0x69, 0x63, 0xad, 0x05, 0xb4, 0xe1, 0xb0, 0xd8, + 0xb1, 0x1b, 0x76, 0xa7, 0x5b, 0x87, 0x42, 0x09, 0xa3, 0x57, 0xd7, 0xcd, 0x43, 0xad, 0xe1, 0x89, 0xa0, 0x07, 0xd5, + 0x68, 0x3f, 0x3d, 0x94, 0x27, 0xed, 0xb1, 0x00, 0x17, 0x3d, 0x7c, 0xf9, 0x52, 0xe0, 0x45, 0x7b, 0x07, 0x79, 0xce, + 0x7c, 0xaa, 0x7c, 0x10, 0x1b, 0x6e, 0x19, 0x3e, 0xb4, 0x8f, 0x6f, 0x05, 0x32, 0xa9, 0x3b, 0x9a, 0xda, 0xda, 0x1d, + 0x8d, 0x63, 0x02, 0xfd, 0xa6, 0x1c, 0xa5, 0x4c, 0x4c, 0x2d, 0x4b, 0x76, 0xd4, 0xcb, 0x95, 0x37, 0x54, 0xca, 0x8e, + 0x96, 0x6d, 0xce, 0x2f, 0x6d, 0x24, 0xf4, 0xfb, 0xda, 0x1d, 0x08, 0xdf, 0xa8, 0xf5, 0x86, 0xbc, 0x6c, 0x88, 0x58, + 0x0e, 0x31, 0x03, 0xc7, 0x0b, 0xa9, 0x5c, 0xbb, 0x8b, 0xa6, 0xaa, 0x6e, 0x67, 0x2b, 0x17, 0xb4, 0xc4, 0x5b, 0x29, + 0xb0, 0x8a, 0xd4, 0xe9, 0xf5, 0x54, 0xe2, 0x7d, 0x1f, 0xc5, 0xf6, 0x23, 0x60, 0x1b, 0x1b, 0x47, 0x63, 0xe3, 0x16, + 0xb1, 0xc1, 0x57, 0x51, 0x45, 0x0b, 0x0e, 0x10, 0xdc, 0x6d, 0x49, 0x2d, 0xcd, 0x1c, 0xe2, 0xbe, 0xe2, 0x01, 0xda, + 0x77, 0x71, 0xc4, 0xa9, 0x00, 0xdb, 0xba, 0xd6, 0x39, 0xab, 0xe5, 0x80, 0xcd, 0x44, 0xcf, 0x3f, 0xad, 0x1a, 0x89, + 0x18, 0x56, 0xd9, 0x48, 0x59, 0xa1, 0x3d, 0x28, 0x5d, 0xc2, 0xc5, 0x17, 0xe0, 0x65, 0xfb, 0x7e, 0x65, 0xf7, 0xd9, + 0x12, 0xfb, 0x87, 0x79, 0xd5, 0x04, 0x8f, 0xbc, 0xc6, 0xdb, 0x7b, 0x98, 0xf8, 0x52, 0x29, 0x84, 0x57, 0x29, 0x0d, + 0x25, 0x00, 0x83, 0x24, 0xa8, 0xe1, 0x4a, 0xdb, 0x66, 0x90, 0xca, 0x18, 0x76, 0xb7, 0x7a, 0xab, 0xff, 0xd3, 0x2a, + 0x5c, 0x54, 0xb2, 0x18, 0x93, 0x40, 0xe7, 0x54, 0xcb, 0x4d, 0x4c, 0xc1, 0xb3, 0x5d, 0x72, 0x04, 0x0a, 0x3b, 0x01, + 0xdc, 0x50, 0xc2, 0x7e, 0xc5, 0xdb, 0x50, 0xce, 0x5e, 0x59, 0xc9, 0x93, 0xdb, 0x97, 0x54, 0xd0, 0x84, 0x4c, 0x85, + 0xdd, 0xbf, 0xad, 0x0d, 0xfb, 0x22, 0x94, 0x23, 0x29, 0x70, 0x71, 0xd0, 0x39, 0x80, 0xfd, 0x41, 0x2e, 0x63, 0xf3, + 0x99, 0xf4, 0xfb, 0xea, 0xfd, 0xf3, 0x3c, 0x4b, 0x3e, 0xee, 0xbc, 0x37, 0x3c, 0xcd, 0x92, 0x01, 0x95, 0x88, 0xa9, + 0x75, 0x55, 0x0c, 0x97, 0xda, 0xc5, 0xb8, 0x41, 0x32, 0xe2, 0x7b, 0xa9, 0x43, 0x8c, 0x18, 0x5f, 0x64, 0x87, 0xa4, + 0xe4, 0x74, 0x59, 0x77, 0xf6, 0x5c, 0x8b, 0x66, 0xd0, 0x18, 0x6e, 0xc7, 0x7b, 0x49, 0xaf, 0x00, 0x15, 0x15, 0xba, + 0x67, 0x81, 0x6b, 0x78, 0x73, 0x49, 0x34, 0xb6, 0xf4, 0xb4, 0x25, 0x1a, 0xb8, 0x57, 0x26, 0x24, 0xd5, 0xc6, 0x01, + 0x16, 0xb1, 0xae, 0x3f, 0x86, 0x12, 0x80, 0x5a, 0x0d, 0xd2, 0x2b, 0x7d, 0x45, 0xa8, 0x4a, 0x42, 0x30, 0x3a, 0x91, + 0xf0, 0x32, 0xa0, 0x71, 0x66, 0x12, 0x2d, 0x6c, 0x70, 0x40, 0x5f, 0x54, 0x26, 0xd1, 0xd8, 0x90, 0x07, 0xb4, 0xb2, + 0x69, 0x00, 0x83, 0x0f, 0x92, 0x24, 0xfa, 0x7a, 0x69, 0x92, 0x40, 0x50, 0x82, 0xf2, 0x0d, 0xfa, 0x4b, 0xe9, 0xf9, + 0x58, 0xfe, 0xcb, 0x3b, 0x94, 0x7e, 0x08, 0x25, 0xc8, 0x14, 0x75, 0xc5, 0x34, 0x63, 0x47, 0x59, 0xb7, 0x31, 0x89, + 0xe7, 0x69, 0x77, 0x5b, 0x28, 0x97, 0x2e, 0xf0, 0x2b, 0xcb, 0x10, 0xc7, 0xfa, 0x79, 0xbc, 0x62, 0xc7, 0x21, 0xd7, + 0x78, 0xe9, 0xcf, 0xe3, 0x15, 0xce, 0x10, 0xad, 0x5a, 0x09, 0x44, 0xf9, 0xaf, 0xda, 0xc0, 0x21, 0xee, 0x13, 0x0c, + 0x72, 0x51, 0x79, 0x0f, 0x04, 0xf2, 0xb6, 0x82, 0x88, 0x34, 0xb3, 0xeb, 0x30, 0x22, 0xd5, 0x4e, 0x92, 0xf9, 0xf2, + 0x47, 0x99, 0x09, 0xef, 0x1b, 0x78, 0x6c, 0x36, 0xcb, 0xa6, 0x98, 0x2f, 0x54, 0x30, 0x07, 0xf7, 0x89, 0x8a, 0x4b, + 0x51, 0xf9, 0x4f, 0xd8, 0x05, 0x2f, 0xc6, 0x83, 0xd7, 0x6b, 0x04, 0xd8, 0xaf, 0xfc, 0x27, 0x6f, 0xcc, 0xde, 0x5a, + 0x37, 0xbe, 0xcc, 0x44, 0x7c, 0xe0, 0xa3, 0x5b, 0xca, 0x47, 0x77, 0x5e, 0xa6, 0x3f, 0x1b, 0x50, 0x22, 0xa3, 0xb2, + 0xe2, 0xab, 0x15, 0x4f, 0x67, 0xb7, 0x49, 0x94, 0x8d, 0x2a, 0x2e, 0x60, 0x7a, 0xc1, 0xf1, 0x2e, 0x59, 0x9f, 0x67, + 0xc9, 0x6b, 0x88, 0x3d, 0xb0, 0x92, 0x0a, 0x8b, 0x1f, 0x96, 0x99, 0x5a, 0xcc, 0x42, 0x56, 0x52, 0xf0, 0x60, 0x76, + 0x9d, 0x44, 0x6f, 0x97, 0x1e, 0x92, 0x9a, 0x99, 0xb2, 0x4d, 0xed, 0x08, 0xb5, 0xf1, 0x75, 0xa4, 0x1b, 0x6d, 0x01, + 0x00, 0xf7, 0x6c, 0x91, 0x46, 0x92, 0x89, 0xe1, 0xa4, 0x66, 0xdc, 0xa4, 0x17, 0x98, 0x1a, 0xd7, 0xac, 0xa2, 0x89, + 0xb3, 0x90, 0x01, 0xbd, 0x3f, 0xe0, 0xe5, 0xe0, 0x73, 0x06, 0xf7, 0x1f, 0xb4, 0x06, 0x2e, 0x0f, 0x8b, 0x7e, 0x5f, + 0x1e, 0x16, 0xdb, 0x6d, 0x79, 0x14, 0xf7, 0xfb, 0xf2, 0x28, 0x36, 0xfc, 0x83, 0x52, 0x6c, 0x1b, 0x73, 0x83, 0x84, + 0xe6, 0x12, 0xa2, 0x16, 0x8d, 0xe0, 0x0f, 0xcd, 0x72, 0x2e, 0xa2, 0xfc, 0x30, 0xe9, 0xf7, 0x7b, 0xcb, 0x99, 0x18, + 0xe4, 0xc3, 0x24, 0xca, 0x87, 0x89, 0xe7, 0x84, 0xf8, 0x9b, 0xe7, 0x84, 0xa8, 0x68, 0xe0, 0x0a, 0xce, 0x0c, 0x40, + 0x14, 0xf0, 0xe9, 0x1f, 0xd5, 0xb5, 0x14, 0xba, 0x96, 0x58, 0xd5, 0x92, 0xe8, 0x0a, 0x6a, 0x76, 0x5d, 0x84, 0x25, + 0x96, 0x42, 0x97, 0xec, 0xcf, 0x25, 0xf0, 0x44, 0x39, 0xaf, 0x36, 0xc0, 0xc0, 0x46, 0x78, 0xe7, 0x30, 0xe1, 0x24, + 0xd6, 0x35, 0xa0, 0x9d, 0x6e, 0x6a, 0x7a, 0x41, 0x57, 0xf4, 0x12, 0xf9, 0xd9, 0x0b, 0x30, 0x58, 0x3a, 0x64, 0xf9, + 0x74, 0x30, 0xb8, 0x20, 0x2b, 0x56, 0xce, 0xc3, 0x78, 0x10, 0xae, 0x67, 0xf9, 0xf0, 0x22, 0xba, 0x20, 0xe4, 0xab, + 0x62, 0x41, 0x7b, 0xab, 0x51, 0xf9, 0x31, 0x83, 0xe0, 0x7e, 0xe9, 0x2c, 0xcc, 0x4c, 0x9c, 0x8f, 0xd5, 0xe8, 0x96, + 0xae, 0x20, 0x7e, 0x0d, 0xdc, 0x48, 0x48, 0x04, 0x1d, 0xb9, 0xa4, 0x2b, 0xba, 0xa6, 0xd2, 0xcc, 0x30, 0x86, 0xe8, + 0xb6, 0xc7, 0x49, 0x02, 0x8e, 0xc9, 0xae, 0xf8, 0x68, 0xac, 0x0a, 0xef, 0xfa, 0x8e, 0xd0, 0x5e, 0x2f, 0x71, 0x83, + 0xf4, 0x5d, 0x7b, 0x90, 0x80, 0x11, 0x19, 0xa9, 0x81, 0x32, 0x23, 0x23, 0xa9, 0x99, 0x54, 0x1c, 0x92, 0xd8, 0x1f, + 0x12, 0x35, 0x0e, 0x89, 0x3f, 0x0e, 0xb9, 0x1e, 0x07, 0xe4, 0xee, 0x97, 0x6c, 0x4c, 0x53, 0x36, 0xa6, 0x6b, 0x35, + 0x2a, 0xf4, 0x8a, 0x9e, 0x6b, 0xea, 0x78, 0xc6, 0xde, 0xc0, 0x81, 0x3d, 0x08, 0xf3, 0x59, 0x3c, 0x7c, 0x13, 0xbd, + 0x21, 0xe4, 0x2b, 0x49, 0xaf, 0xd5, 0xa5, 0x0c, 0xc2, 0x20, 0x5e, 0x81, 0x73, 0xa9, 0x0b, 0x75, 0x72, 0x65, 0x76, + 0x1c, 0x3e, 0x5d, 0x36, 0x9e, 0xce, 0x21, 0xa2, 0x0f, 0x5a, 0xa9, 0xf4, 0xfb, 0xe1, 0x05, 0x2b, 0xe7, 0x67, 0xe1, + 0x98, 0x00, 0x0e, 0x8f, 0x1e, 0xce, 0x8b, 0xd1, 0x2d, 0xbd, 0x18, 0xdd, 0x11, 0xb0, 0xf0, 0x1a, 0x4f, 0xd7, 0x87, + 0x2c, 0x9e, 0x0e, 0x06, 0x6b, 0xa4, 0xea, 0x2a, 0xf7, 0x9a, 0x2c, 0xe8, 0x05, 0x4e, 0x04, 0x01, 0x86, 0x3e, 0x13, + 0x6b, 0x43, 0xc3, 0xdf, 0x30, 0xf8, 0xf8, 0x8e, 0x5d, 0x8c, 0xee, 0xe8, 0x2d, 0x7b, 0xb3, 0x1d, 0x4f, 0x81, 0x99, + 0x5a, 0xcd, 0xc2, 0xbb, 0xc3, 0xcb, 0xd9, 0x25, 0xbb, 0x8b, 0xee, 0x8e, 0xa0, 0xa1, 0x57, 0xec, 0x0e, 0x01, 0x97, + 0xd2, 0xc7, 0xcb, 0xc1, 0x1b, 0xb2, 0x3f, 0x18, 0xa4, 0x24, 0x0a, 0xaf, 0x43, 0xaf, 0x95, 0x6f, 0xe8, 0x1d, 0xa1, + 0x2b, 0x76, 0x8b, 0xa3, 0x71, 0xc9, 0xf0, 0x83, 0x73, 0x76, 0x57, 0x5f, 0x87, 0xde, 0x6e, 0x4e, 0x44, 0x27, 0x88, + 0x11, 0xfa, 0x1a, 0x38, 0x9a, 0xe5, 0xc2, 0x4c, 0xc0, 0x93, 0xb9, 0xc8, 0x68, 0x51, 0x68, 0x06, 0xe2, 0xac, 0x04, + 0xc4, 0x92, 0xa8, 0xfb, 0xcd, 0x46, 0x67, 0xb0, 0x9c, 0xfb, 0xfd, 0x5e, 0x65, 0xe8, 0x01, 0x22, 0x67, 0x76, 0xd2, + 0x83, 0x9e, 0x4f, 0x0f, 0xf0, 0x13, 0xbd, 0x6a, 0x10, 0x27, 0xf3, 0xbb, 0x65, 0xf4, 0x9b, 0x47, 0x1f, 0x7e, 0xe8, + 0xa6, 0x3c, 0x22, 0xff, 0xf7, 0x29, 0x4f, 0x99, 0x47, 0x6f, 0x2a, 0x0f, 0x04, 0xcf, 0x5b, 0x93, 0x4a, 0x23, 0x51, + 0x8d, 0xce, 0x56, 0x31, 0x68, 0x23, 0x51, 0xdb, 0xa0, 0x9f, 0xd0, 0xc2, 0x0a, 0x22, 0xe4, 0x1c, 0xbc, 0x00, 0x83, + 0x54, 0x08, 0x95, 0xa3, 0x16, 0x25, 0x1a, 0x82, 0xe4, 0xb2, 0xe4, 0x2a, 0x7c, 0x0e, 0xa1, 0xea, 0xf4, 0x71, 0x26, + 0xc2, 0x86, 0x1e, 0x87, 0x3e, 0x00, 0xfc, 0xaf, 0x3b, 0xe4, 0xa2, 0xe4, 0x97, 0x78, 0x36, 0xb7, 0x09, 0x46, 0xc1, + 0x12, 0xd1, 0x0c, 0x6d, 0x83, 0xd8, 0x8f, 0x25, 0xc1, 0x7a, 0x24, 0x8d, 0x47, 0xa5, 0x39, 0x22, 0xfc, 0x28, 0x3e, + 0x8a, 0x9e, 0xc6, 0x86, 0x44, 0x72, 0x24, 0x91, 0x7c, 0x00, 0x84, 0x93, 0xa0, 0xbf, 0xb8, 0x6b, 0xb2, 0x6b, 0x21, + 0x31, 0xe8, 0x4f, 0x4b, 0xa6, 0x65, 0xf7, 0xaa, 0xc7, 0xbe, 0x22, 0xc8, 0x1d, 0xd3, 0x7f, 0x79, 0x7d, 0xf8, 0xe7, + 0x12, 0x67, 0xd0, 0x7a, 0xbe, 0xa8, 0xce, 0xcc, 0xbc, 0xc1, 0x8d, 0xbc, 0x2e, 0x6b, 0xd7, 0xe5, 0x0b, 0xbe, 0xc7, + 0x6f, 0x2b, 0x2e, 0xd2, 0x72, 0xef, 0x97, 0xaa, 0x8d, 0xe7, 0x54, 0xae, 0x57, 0x2e, 0xce, 0x8a, 0x32, 0x4e, 0xf5, + 0xa4, 0x2e, 0xc6, 0x1a, 0xb6, 0xe1, 0xf7, 0x88, 0xba, 0x92, 0x96, 0xa3, 0xa7, 0x94, 0xab, 0x66, 0xca, 0xc5, 0x3a, + 0xcf, 0x7f, 0xde, 0x49, 0xc5, 0x29, 0x6e, 0xa6, 0x20, 0x55, 0x6a, 0xb9, 0x80, 0xea, 0x39, 0x6a, 0xb9, 0x5b, 0x9a, + 0x1d, 0xe0, 0xdc, 0x36, 0xd5, 0xc7, 0xca, 0xec, 0xc2, 0x4b, 0x6e, 0xdc, 0x9f, 0x4c, 0x19, 0x16, 0x8c, 0x42, 0x9b, + 0x55, 0x57, 0xda, 0xbe, 0xd0, 0x3a, 0x0d, 0xc3, 0x95, 0x1f, 0x2f, 0x20, 0x5d, 0xc0, 0x38, 0x5e, 0x94, 0x4c, 0x8c, + 0xdb, 0xa3, 0xb7, 0x82, 0xf8, 0x92, 0xad, 0x40, 0xc0, 0x5c, 0xc3, 0xdb, 0x75, 0x1d, 0x6d, 0xf7, 0xc4, 0x29, 0xa3, + 0x72, 0x15, 0x8b, 0xef, 0xe3, 0x95, 0x81, 0x4c, 0x56, 0xc7, 0x63, 0x63, 0x4c, 0xa7, 0x3f, 0x25, 0xa1, 0x5f, 0x08, + 0x05, 0x9f, 0xf5, 0xd2, 0xca, 0x93, 0xdb, 0xc3, 0x32, 0xae, 0xd1, 0x2b, 0x71, 0xa5, 0xfb, 0x66, 0xa4, 0x90, 0x7a, + 0xe4, 0xab, 0xa6, 0x80, 0xde, 0x8c, 0x7d, 0x33, 0x15, 0xe6, 0xed, 0x9e, 0x31, 0x57, 0x08, 0x56, 0xaa, 0xec, 0xf6, + 0x9d, 0x1a, 0x53, 0x31, 0x83, 0x29, 0xb6, 0x9d, 0xc5, 0xa4, 0x5b, 0xf9, 0xa7, 0x9d, 0xfb, 0x65, 0xde, 0xe1, 0xae, + 0xa8, 0xdf, 0x02, 0x17, 0x9a, 0x15, 0x65, 0xd5, 0x96, 0x0d, 0xdb, 0xc6, 0x1b, 0x59, 0x28, 0x36, 0xc0, 0xb2, 0xe7, + 0xbe, 0x85, 0x07, 0x88, 0x9b, 0x70, 0xcf, 0x2e, 0x6a, 0xb8, 0x31, 0x7c, 0x59, 0x49, 0xbe, 0x2b, 0x8d, 0xb9, 0xf4, + 0xa9, 0xd2, 0xc4, 0x70, 0xb2, 0x18, 0x71, 0x91, 0x2e, 0xea, 0xcc, 0xae, 0x85, 0xcf, 0x78, 0x19, 0xce, 0xf9, 0xc2, + 0xe8, 0xa6, 0x74, 0xe9, 0x05, 0x8b, 0x75, 0xa7, 0x37, 0x2b, 0x8d, 0x95, 0x12, 0x71, 0x6b, 0x96, 0x09, 0x94, 0xa5, + 0xac, 0x95, 0xf0, 0xa6, 0x68, 0xd9, 0x4a, 0x1a, 0x79, 0xcf, 0x1c, 0xdc, 0xc7, 0x7e, 0x40, 0x4c, 0x64, 0x13, 0x98, + 0x14, 0x0d, 0x1d, 0xd0, 0xae, 0xba, 0xf0, 0xcd, 0xa8, 0x07, 0x83, 0xdc, 0x92, 0x44, 0xac, 0x20, 0xc5, 0x0a, 0xd6, + 0x35, 0x2b, 0xe6, 0xf9, 0x82, 0x5e, 0x30, 0x39, 0x4f, 0x17, 0x74, 0xc5, 0xe4, 0x7c, 0x8d, 0x37, 0xa1, 0x0b, 0x38, + 0x21, 0xc9, 0x26, 0x56, 0x0a, 0xd8, 0x0b, 0xbc, 0xbc, 0xe1, 0x99, 0xaa, 0x69, 0xd9, 0xa5, 0xe2, 0x00, 0xe3, 0xf3, + 0x32, 0x0c, 0xcb, 0xe1, 0x05, 0x58, 0x4b, 0xec, 0x87, 0xab, 0x39, 0x5f, 0xa8, 0xdf, 0x10, 0x70, 0x3e, 0x09, 0x15, + 0xbb, 0x60, 0xf7, 0x02, 0x99, 0x5e, 0xcd, 0xf9, 0x42, 0x8d, 0x84, 0x2e, 0xf8, 0xca, 0x1a, 0x9b, 0xc4, 0x9e, 0xa0, + 0x65, 0x16, 0xcf, 0xc7, 0x8b, 0x28, 0xae, 0x61, 0x19, 0x9e, 0xaa, 0x99, 0x69, 0xc9, 0x7f, 0x12, 0xb5, 0xa1, 0x89, + 0xbe, 0xc1, 0x2a, 0xf2, 0x87, 0xc7, 0x47, 0x97, 0x40, 0xc6, 0xce, 0xae, 0x64, 0xe6, 0x43, 0xdf, 0x47, 0x06, 0xf7, + 0xdc, 0x94, 0x33, 0xae, 0x82, 0x44, 0x19, 0xb8, 0x7b, 0x35, 0x4b, 0xc6, 0x5a, 0x84, 0xef, 0x1e, 0x15, 0x45, 0x9f, + 0x49, 0xd3, 0x80, 0xee, 0x23, 0xc1, 0x1c, 0xe8, 0xbd, 0x42, 0x87, 0xcb, 0x6a, 0x9b, 0x09, 0xf8, 0x8b, 0x04, 0xf9, + 0xad, 0xd0, 0xab, 0x1a, 0x83, 0x2a, 0xda, 0x45, 0x2c, 0xfd, 0xfb, 0x88, 0x1f, 0x65, 0xf3, 0x2f, 0x73, 0x8f, 0x57, + 0x12, 0x06, 0x3f, 0xa4, 0x66, 0x93, 0xcc, 0xdb, 0x2b, 0xf6, 0x3d, 0x74, 0xd4, 0xa3, 0xd6, 0x78, 0x5f, 0xbd, 0xe0, + 0x14, 0x62, 0x94, 0x50, 0x74, 0x12, 0x0c, 0xe0, 0x76, 0x09, 0x29, 0xee, 0x06, 0xbb, 0x69, 0x5e, 0xf3, 0xa2, 0xe0, + 0x7c, 0x5d, 0x55, 0x81, 0x1f, 0xd0, 0x70, 0xbe, 0xd8, 0x0d, 0x61, 0x38, 0xa6, 0xad, 0x6b, 0x18, 0x84, 0x19, 0xc3, + 0x48, 0x08, 0x5e, 0xff, 0xa2, 0x27, 0x34, 0x89, 0x57, 0xdf, 0xf1, 0x4f, 0x19, 0x2f, 0x14, 0x91, 0x06, 0x11, 0x52, + 0x37, 0xf1, 0x8d, 0x4c, 0x93, 0x02, 0x0a, 0x01, 0x46, 0x01, 0x95, 0xd8, 0xd0, 0x54, 0xfc, 0xad, 0x16, 0x1f, 0xfc, + 0xd4, 0x74, 0x3c, 0x1a, 0xd7, 0xad, 0xce, 0xa8, 0xa0, 0x33, 0xd0, 0xa3, 0x56, 0xd4, 0xd3, 0xa0, 0x95, 0x60, 0x1a, + 0x69, 0xde, 0xba, 0x87, 0xc0, 0x2b, 0xd3, 0xe2, 0x9d, 0x07, 0x74, 0x73, 0xe6, 0x83, 0x27, 0x8f, 0xe9, 0x99, 0x43, + 0x4f, 0xae, 0xd8, 0x51, 0xd5, 0x43, 0xed, 0xbd, 0x19, 0xa1, 0xa0, 0xdf, 0xc7, 0x14, 0xe8, 0x46, 0x50, 0x7b, 0x57, + 0xf7, 0x1f, 0xcb, 0x5d, 0x0e, 0xdf, 0x71, 0x96, 0x1b, 0xc0, 0x52, 0x91, 0xb5, 0x02, 0x8f, 0x02, 0xd4, 0xa5, 0x32, + 0x84, 0x2d, 0xe6, 0x70, 0xa8, 0xec, 0x56, 0xad, 0x86, 0x92, 0x1c, 0x96, 0x23, 0x70, 0x08, 0x5d, 0x97, 0x83, 0x72, + 0xb4, 0xcc, 0xaa, 0xf7, 0xf8, 0x5b, 0xb3, 0x0e, 0x49, 0x76, 0x1f, 0xeb, 0xc0, 0x2d, 0xeb, 0x30, 0xfd, 0x68, 0x90, + 0x02, 0xd0, 0x64, 0x23, 0x70, 0x09, 0xc0, 0x7b, 0xfb, 0x8f, 0x08, 0xb5, 0x32, 0xbd, 0x97, 0xb1, 0x50, 0xdf, 0x37, + 0x92, 0xa0, 0x84, 0x66, 0x42, 0xe5, 0x58, 0x0a, 0xde, 0x79, 0xa4, 0x73, 0x52, 0x67, 0xe2, 0x3d, 0x88, 0xd3, 0xc2, + 0x07, 0xf6, 0x16, 0x04, 0xe7, 0x2c, 0xe8, 0x1d, 0xde, 0x66, 0xb5, 0xd4, 0x46, 0x0f, 0x14, 0xc0, 0xef, 0x06, 0x77, + 0x08, 0xf2, 0xd5, 0x18, 0xae, 0x95, 0xbc, 0x09, 0xf9, 0xb0, 0xa0, 0x07, 0x64, 0x60, 0x9f, 0xc5, 0x30, 0xa6, 0x07, + 0xe4, 0xd0, 0x3e, 0x4b, 0x37, 0x80, 0x03, 0xa9, 0x47, 0x95, 0x1e, 0x40, 0x83, 0x7e, 0xb7, 0x2d, 0xb2, 0x24, 0xeb, + 0xc7, 0xd2, 0x28, 0x62, 0xa0, 0x4a, 0x10, 0x51, 0x8b, 0x7f, 0x3e, 0x98, 0xeb, 0x0e, 0x73, 0x81, 0x30, 0x07, 0x03, + 0x0e, 0xe2, 0x36, 0x08, 0xcd, 0x01, 0xb3, 0xb9, 0x8d, 0x04, 0xbd, 0xb3, 0x86, 0x99, 0x1d, 0xfd, 0xe1, 0x56, 0x82, + 0x6f, 0xb2, 0xd6, 0xa8, 0xf3, 0xe2, 0x10, 0x08, 0x82, 0x37, 0x85, 0xaa, 0xf6, 0xaa, 0x07, 0x36, 0xde, 0xaa, 0x1f, + 0xdb, 0xed, 0x78, 0x2a, 0xdc, 0xb5, 0x5f, 0x50, 0x38, 0xf9, 0x94, 0xfc, 0xeb, 0xbd, 0xc9, 0xe0, 0xc0, 0xc8, 0xf0, + 0xa5, 0xb7, 0x7f, 0xe1, 0x6b, 0x2d, 0xdd, 0x13, 0x83, 0x92, 0x3c, 0x3e, 0x50, 0xf4, 0xef, 0x5e, 0x59, 0xf9, 0xd4, + 0x4e, 0xff, 0x76, 0x6b, 0xd6, 0xe7, 0xe1, 0x68, 0xb2, 0xdd, 0xf6, 0xb4, 0x81, 0x2b, 0xd5, 0x2a, 0x04, 0xec, 0x42, + 0x49, 0xf6, 0x0f, 0x20, 0x2a, 0x42, 0x33, 0xee, 0x66, 0xd9, 0x90, 0xc8, 0xf8, 0x71, 0x3a, 0xcb, 0x86, 0x60, 0x87, + 0x7b, 0x51, 0x89, 0xcb, 0x51, 0x6b, 0x83, 0xd3, 0xb3, 0x24, 0x84, 0x50, 0x0e, 0x58, 0xd9, 0xad, 0xfa, 0x73, 0xa7, + 0xcc, 0x84, 0xd4, 0x64, 0x75, 0x3b, 0xa5, 0x7b, 0x98, 0xe6, 0x7b, 0x66, 0x04, 0x07, 0xdc, 0xdb, 0x5f, 0xf5, 0xc7, + 0x30, 0xc9, 0x34, 0x39, 0x45, 0xf2, 0x8b, 0xf4, 0x14, 0x92, 0x76, 0xe8, 0xa9, 0x22, 0x80, 0x13, 0x6a, 0x3f, 0x86, + 0xdf, 0x30, 0xee, 0xdf, 0x35, 0x5f, 0xbb, 0xa9, 0x88, 0x9e, 0x52, 0x2c, 0x53, 0x93, 0xd3, 0x24, 0x2b, 0x12, 0x88, + 0xda, 0xa8, 0x9a, 0x11, 0x3d, 0x71, 0x31, 0x1f, 0x15, 0xe1, 0xf3, 0x6a, 0xfd, 0x9f, 0x21, 0x7c, 0x46, 0xe1, 0x06, + 0x70, 0x79, 0xc5, 0xe5, 0x79, 0xf8, 0xec, 0x29, 0xdd, 0x9b, 0x7c, 0x73, 0x40, 0xf7, 0x0e, 0x9e, 0x3c, 0x23, 0x00, + 0x8b, 0x76, 0x79, 0x1e, 0x1e, 0x3c, 0x7b, 0x46, 0xf7, 0xbe, 0xfd, 0x96, 0xee, 0x4d, 0x9e, 0x1c, 0x34, 0xd2, 0x26, + 0xcf, 0xbe, 0xa5, 0x7b, 0xdf, 0x3c, 0x6d, 0xa4, 0x1d, 0x8c, 0x9f, 0xd1, 0xbd, 0xbf, 0x7f, 0x63, 0xd2, 0xfe, 0x06, + 0xd9, 0xbe, 0x3d, 0xc0, 0xff, 0x4c, 0xda, 0xe4, 0xd9, 0x13, 0xba, 0x37, 0x19, 0x43, 0x25, 0xcf, 0x5c, 0x25, 0xe3, + 0x09, 0x7c, 0xfc, 0x04, 0xfe, 0xfb, 0x1b, 0x09, 0x16, 0xb4, 0x92, 0x2c, 0x17, 0xa8, 0x3f, 0x43, 0x11, 0x27, 0xaa, + 0x26, 0x12, 0x1e, 0x62, 0x66, 0xf5, 0x4d, 0x1c, 0x06, 0xc4, 0xa5, 0x43, 0x41, 0x74, 0x6f, 0x3c, 0x7a, 0x46, 0x02, + 0x1f, 0x9e, 0xee, 0xc6, 0x07, 0x19, 0xcb, 0xc5, 0x3c, 0xfb, 0x2a, 0x37, 0xb1, 0x15, 0x3c, 0x00, 0xab, 0x8f, 0x7e, + 0xae, 0x4a, 0xce, 0xb3, 0xaf, 0x2a, 0xb9, 0x9b, 0xeb, 0xf7, 0x16, 0xa0, 0xbc, 0xbf, 0x6a, 0xd9, 0x4d, 0xa1, 0x42, + 0xa7, 0xb5, 0x46, 0x9f, 0x7d, 0xc4, 0xf4, 0xc1, 0xc0, 0xbb, 0x61, 0xff, 0xb4, 0x53, 0x4e, 0xeb, 0x1b, 0x8d, 0x42, + 0x8d, 0xca, 0x43, 0xc2, 0x8e, 0xa0, 0xe8, 0xc1, 0x00, 0x78, 0x02, 0x0f, 0xf7, 0xed, 0xdf, 0x2c, 0xe3, 0x63, 0x47, + 0x19, 0xbf, 0xa0, 0x0c, 0x01, 0x8d, 0x7a, 0x98, 0xdd, 0xf4, 0xb0, 0xd1, 0xad, 0x5e, 0xb2, 0x54, 0x27, 0x53, 0xd3, + 0x33, 0xd8, 0xd7, 0xba, 0x96, 0x7b, 0x46, 0x14, 0x2d, 0x2f, 0xf6, 0x52, 0x3e, 0xab, 0xd8, 0x4f, 0x4b, 0x54, 0x6f, + 0x45, 0x8d, 0x37, 0x32, 0x9b, 0x55, 0xec, 0x7b, 0xf3, 0x06, 0xb8, 0x19, 0xf6, 0xbb, 0x7a, 0xf2, 0x03, 0x67, 0x70, + 0x69, 0xdb, 0xa3, 0x4c, 0x8c, 0x00, 0x2b, 0x20, 0x03, 0x07, 0x1e, 0x00, 0x1d, 0xf4, 0x47, 0x7b, 0xbb, 0x55, 0x29, + 0xcd, 0x3e, 0x5b, 0x18, 0x40, 0xc3, 0xbc, 0x4d, 0x5c, 0xd9, 0xff, 0x6a, 0xc8, 0x4b, 0x50, 0xb8, 0xd5, 0x2c, 0x6f, + 0xa7, 0x30, 0x84, 0x10, 0xfc, 0x71, 0xc9, 0x00, 0x70, 0x20, 0xc0, 0x60, 0xac, 0x65, 0x40, 0xcd, 0x96, 0x8f, 0x36, + 0x5c, 0xa9, 0x27, 0x81, 0x33, 0xb8, 0x90, 0x45, 0xc2, 0x4f, 0xb4, 0xd8, 0x1f, 0xad, 0x1f, 0x7d, 0xdf, 0x1e, 0x0f, + 0xd6, 0xbe, 0xc7, 0x47, 0xfa, 0xb3, 0xc6, 0x75, 0x60, 0xd3, 0xf2, 0x8d, 0x17, 0xb5, 0x95, 0x78, 0x94, 0xc0, 0x1b, + 0x98, 0x88, 0x14, 0x06, 0xa9, 0x16, 0x38, 0x06, 0xe5, 0x8d, 0x85, 0x58, 0xaa, 0xae, 0x6e, 0xb0, 0x05, 0x91, 0x21, + 0x78, 0xb8, 0xfd, 0x6b, 0xa9, 0x02, 0x47, 0xf5, 0xfb, 0x5c, 0xfa, 0x6e, 0x4f, 0xc6, 0x8e, 0x1c, 0xa7, 0x7e, 0x2a, + 0x1c, 0xfc, 0x37, 0xa9, 0x6b, 0x63, 0xb9, 0x92, 0x32, 0xcb, 0xb2, 0xb0, 0xa3, 0x50, 0xcb, 0x3d, 0x2a, 0x0f, 0x92, + 0x2f, 0xe4, 0x10, 0xc9, 0x02, 0xa3, 0x50, 0x90, 0xe1, 0x84, 0x8a, 0xd1, 0x5a, 0x94, 0xcb, 0xec, 0xa2, 0x0a, 0x37, + 0x4a, 0xa1, 0xcc, 0x29, 0xfa, 0x76, 0x83, 0x03, 0x09, 0x89, 0xb2, 0xf2, 0x6d, 0xfc, 0x36, 0x44, 0xb0, 0x3a, 0xae, + 0x6d, 0xa1, 0xb8, 0xb7, 0x3f, 0x79, 0xda, 0xc5, 0x1f, 0x19, 0x17, 0x50, 0x17, 0x8b, 0x69, 0x38, 0xb1, 0xb1, 0x6f, + 0xdc, 0x17, 0x56, 0xd3, 0x03, 0x50, 0xdf, 0xa5, 0x12, 0x23, 0xa8, 0xaf, 0x8c, 0x7d, 0x6c, 0x8f, 0x31, 0x39, 0x83, + 0x58, 0xc3, 0x2a, 0x67, 0xa6, 0xfa, 0x46, 0xd8, 0x11, 0x00, 0x37, 0x42, 0x6b, 0x14, 0x04, 0x1e, 0xaf, 0x42, 0x3c, + 0x2f, 0x55, 0xf8, 0xd6, 0x8c, 0xd0, 0x31, 0x78, 0x53, 0xd9, 0x46, 0x66, 0xd2, 0x17, 0x0c, 0x9a, 0x63, 0x5b, 0x47, + 0x61, 0xb5, 0x95, 0x65, 0x47, 0x00, 0x37, 0x90, 0x1d, 0x9a, 0x8b, 0xe7, 0xac, 0x9a, 0x67, 0x8b, 0xc8, 0x04, 0x05, + 0x5c, 0x0a, 0xcb, 0xa0, 0x7d, 0xba, 0x47, 0xb6, 0xe3, 0x10, 0xba, 0xe1, 0x3e, 0x82, 0xf1, 0xb4, 0x9b, 0x82, 0x15, + 0x44, 0x23, 0xc4, 0xc3, 0x8c, 0x59, 0x7c, 0xaf, 0x34, 0xe5, 0xa9, 0x6a, 0x09, 0x04, 0x8e, 0x42, 0xa8, 0x8b, 0x5d, + 0xa3, 0x04, 0x97, 0xa9, 0x11, 0xcc, 0x60, 0xc7, 0x8e, 0xd4, 0x76, 0xc9, 0x39, 0x1d, 0xaa, 0x29, 0x2d, 0xf5, 0x94, + 0x6a, 0x5f, 0x43, 0x31, 0x2f, 0xd1, 0x43, 0x0f, 0x5c, 0x0f, 0xb4, 0x43, 0x5e, 0x49, 0x27, 0x26, 0x82, 0x4e, 0xab, + 0x4d, 0xd8, 0xb9, 0x91, 0x6e, 0x59, 0x8d, 0xbc, 0x63, 0x68, 0x76, 0xc4, 0x4b, 0x3f, 0x50, 0x17, 0x40, 0x84, 0xdc, + 0xdb, 0x22, 0x73, 0x44, 0xb3, 0xac, 0x7c, 0x05, 0x65, 0x71, 0xc4, 0xd6, 0x15, 0x70, 0x2d, 0x05, 0x93, 0x4b, 0x1e, + 0xf1, 0x14, 0x11, 0x01, 0x8f, 0x95, 0x76, 0x7d, 0xa7, 0x25, 0x84, 0x66, 0x29, 0x10, 0x37, 0x17, 0xc5, 0xb9, 0xb6, + 0x81, 0x2c, 0x80, 0xbe, 0xfd, 0x9c, 0x5d, 0x79, 0xe1, 0x60, 0x37, 0x57, 0x99, 0x78, 0xc1, 0x2f, 0x32, 0xc1, 0x53, + 0x04, 0xbb, 0xba, 0x35, 0x0f, 0xdc, 0xb1, 0x6d, 0x60, 0xf9, 0xf6, 0x1d, 0x2c, 0x98, 0x32, 0xd4, 0x4a, 0x89, 0x4c, + 0x44, 0x02, 0x32, 0xfb, 0xcc, 0xdd, 0x9b, 0x4c, 0xbc, 0x89, 0x6f, 0xc1, 0x9b, 0xa2, 0xc1, 0x4f, 0x8f, 0xce, 0xf1, + 0x4b, 0x44, 0x12, 0x85, 0x18, 0xb6, 0x18, 0x11, 0x0b, 0x91, 0x63, 0xc7, 0x84, 0x72, 0x25, 0x68, 0x6d, 0x0d, 0x81, + 0x17, 0x7f, 0x5a, 0x75, 0xef, 0x2a, 0x13, 0xc6, 0x3e, 0xe3, 0x2a, 0xbe, 0x65, 0xa5, 0x02, 0xb3, 0xc0, 0x38, 0xf7, + 0x6d, 0x29, 0xc9, 0x55, 0x26, 0x8c, 0x80, 0xe4, 0x2a, 0xbe, 0xa5, 0x4d, 0x19, 0x87, 0xb6, 0xa2, 0xf3, 0xe2, 0xfc, + 0xee, 0x0e, 0xbf, 0xc4, 0x50, 0x2b, 0xe3, 0x7e, 0x1f, 0x24, 0x66, 0xd2, 0x36, 0x65, 0x26, 0x23, 0xa9, 0xd1, 0x42, + 0x2a, 0xca, 0x07, 0x13, 0xb2, 0xbb, 0x52, 0x2d, 0x23, 0x6a, 0xbf, 0x0a, 0xc5, 0x6c, 0x1c, 0x4d, 0x08, 0x9d, 0x74, + 0xac, 0x77, 0xd3, 0x5a, 0xc8, 0x34, 0x7a, 0x16, 0x79, 0x3e, 0x9d, 0x05, 0xab, 0xa6, 0xc5, 0x21, 0xe3, 0xd3, 0x62, + 0x30, 0x20, 0xda, 0xa5, 0x70, 0x83, 0xf5, 0x80, 0x29, 0x8d, 0x8b, 0xb7, 0x66, 0x5a, 0xfd, 0x4a, 0xaa, 0x90, 0xf4, + 0x9e, 0x01, 0x49, 0x26, 0x5d, 0xb0, 0x5b, 0x90, 0x28, 0x7a, 0xfe, 0x77, 0x6a, 0x0b, 0xee, 0x7a, 0x30, 0x36, 0xa3, + 0xfb, 0x7a, 0xc6, 0x7f, 0xa8, 0x6d, 0x41, 0xd4, 0xa7, 0x92, 0xf5, 0x3a, 0x12, 0x55, 0xc8, 0x45, 0xf8, 0xd9, 0xd1, + 0x10, 0x43, 0x54, 0x7b, 0x2c, 0x10, 0xeb, 0xab, 0x73, 0x5e, 0xe0, 0xf4, 0x33, 0x77, 0xb9, 0x82, 0x6d, 0x41, 0x2b, + 0x43, 0xa3, 0xde, 0xc6, 0x6f, 0x23, 0x7b, 0x59, 0xd0, 0x45, 0xbe, 0x40, 0x21, 0x6b, 0x1e, 0x86, 0xd5, 0xb0, 0x3d, + 0x88, 0x64, 0xbf, 0x3d, 0x09, 0x8d, 0xc6, 0xc0, 0x02, 0xd9, 0xa1, 0x11, 0xb8, 0x08, 0xad, 0xfc, 0xed, 0x10, 0x5c, + 0xb8, 0x2c, 0x22, 0xcb, 0x50, 0xc7, 0x6f, 0x6a, 0x37, 0x41, 0xf5, 0x0a, 0x9d, 0xa6, 0xb0, 0x2a, 0x65, 0x92, 0x0f, + 0xbf, 0x5e, 0xc9, 0x02, 0x33, 0x79, 0x5d, 0xf6, 0xe8, 0x6b, 0xbb, 0xbd, 0x03, 0x53, 0xb0, 0xee, 0x93, 0xf7, 0xf5, + 0xe3, 0xce, 0x9e, 0x80, 0x51, 0xac, 0xca, 0xd1, 0x14, 0x52, 0x6a, 0x1f, 0x94, 0xfa, 0x63, 0xb8, 0x14, 0x9a, 0x63, + 0xb7, 0x80, 0x49, 0xc0, 0x3e, 0x43, 0xaa, 0xc7, 0xb4, 0x63, 0x9f, 0xa3, 0x0d, 0x2c, 0x09, 0x38, 0xfc, 0xa3, 0x4c, + 0xd6, 0xfe, 0xd5, 0x5d, 0xa4, 0xcd, 0x90, 0x2d, 0xf3, 0x05, 0xf0, 0xf9, 0xb0, 0x6b, 0xa3, 0x12, 0x65, 0x13, 0x91, + 0xa4, 0xb0, 0xe5, 0x31, 0x48, 0x7b, 0x14, 0xd3, 0x55, 0xc1, 0x93, 0x0c, 0xa5, 0x14, 0x89, 0xf6, 0x09, 0xce, 0xe1, + 0x0d, 0xee, 0x47, 0x15, 0x10, 0x5e, 0x85, 0x9c, 0x8e, 0x52, 0xaa, 0x2d, 0x60, 0x14, 0xf5, 0x00, 0x51, 0x5e, 0x06, + 0x72, 0xbc, 0xed, 0x76, 0x42, 0x57, 0x6c, 0x39, 0x9c, 0x50, 0x24, 0x25, 0x97, 0x58, 0xee, 0x15, 0xe8, 0x3c, 0xce, + 0x59, 0xef, 0x25, 0x60, 0x11, 0x9c, 0xc1, 0xdf, 0x98, 0xd0, 0x6b, 0xf8, 0x9b, 0x13, 0xfa, 0x86, 0x85, 0x57, 0xc3, + 0x4b, 0xb2, 0x1f, 0xa6, 0x83, 0x89, 0x12, 0x8c, 0xdd, 0xb1, 0x65, 0x19, 0xaa, 0xc4, 0xd5, 0xfe, 0x05, 0x79, 0x7c, + 0x41, 0x6f, 0xe9, 0x0d, 0x3d, 0xa5, 0x27, 0x40, 0xf8, 0xef, 0x0e, 0x27, 0x7c, 0x38, 0x79, 0xda, 0xef, 0xf7, 0xce, + 0xfb, 0xfd, 0xde, 0x99, 0x31, 0xa0, 0xd0, 0xbb, 0xe8, 0xb2, 0xa6, 0xfa, 0xd7, 0x55, 0xbd, 0x98, 0x9e, 0xa8, 0x8d, + 0x9b, 0xf0, 0x2c, 0x0f, 0xaf, 0xf6, 0xef, 0xc8, 0x10, 0x1f, 0x2f, 0x72, 0x29, 0x8b, 0xf0, 0x72, 0xff, 0x8e, 0xd0, + 0x93, 0x23, 0xd0, 0x9b, 0x62, 0x7d, 0x27, 0x8f, 0xef, 0x74, 0x6d, 0x84, 0xbe, 0x0c, 0x13, 0xd8, 0x26, 0xb7, 0xcc, + 0xde, 0xb5, 0x27, 0x63, 0x88, 0x65, 0x72, 0xe7, 0x95, 0x77, 0xf7, 0xf8, 0x96, 0xec, 0xdf, 0x82, 0xa7, 0xa8, 0x25, + 0x7f, 0xb3, 0xf0, 0x86, 0xb5, 0x6a, 0x78, 0x7c, 0x47, 0x4f, 0x5b, 0x8d, 0x78, 0x7c, 0x47, 0xa2, 0xf0, 0x86, 0x5d, + 0xd2, 0x53, 0x76, 0x45, 0xe8, 0x79, 0xbf, 0x7f, 0xd6, 0xef, 0xcb, 0x7e, 0xff, 0xa7, 0x38, 0x0c, 0xe3, 0x61, 0x41, + 0xf6, 0x25, 0xbd, 0xdb, 0x9f, 0xf0, 0x27, 0x64, 0x16, 0xea, 0xe6, 0xab, 0x05, 0x67, 0x55, 0xde, 0x2a, 0xd7, 0x1d, + 0x05, 0x6b, 0x85, 0x3b, 0xa6, 0x9e, 0x4e, 0xe8, 0x0d, 0x2b, 0xe8, 0x29, 0x8b, 0x49, 0x74, 0x0d, 0xad, 0x38, 0x9f, + 0x15, 0xd1, 0x0d, 0x3d, 0x65, 0x67, 0xb3, 0x38, 0x3a, 0xa5, 0x27, 0x2c, 0x1f, 0x4e, 0x20, 0xef, 0xe9, 0xf0, 0x86, + 0xec, 0x9f, 0x90, 0x28, 0x3c, 0xd1, 0xbf, 0xef, 0xe8, 0x25, 0x0f, 0x4f, 0xa8, 0x57, 0xcd, 0x09, 0x31, 0xd5, 0x37, + 0x6a, 0x3f, 0x21, 0x91, 0x3f, 0x98, 0x27, 0xd6, 0x9e, 0xe6, 0x91, 0xa3, 0x8d, 0x69, 0x19, 0x82, 0xbe, 0xb9, 0x0c, + 0x6f, 0x08, 0x99, 0x36, 0xc7, 0x0e, 0x06, 0x74, 0xf6, 0x28, 0x4a, 0x08, 0xbd, 0xf1, 0x4b, 0xbd, 0xc1, 0x31, 0x34, + 0x23, 0xa4, 0xd2, 0x4e, 0x31, 0x0d, 0xd7, 0xc1, 0x6b, 0x0d, 0xd6, 0x71, 0xde, 0xef, 0x87, 0xeb, 0x7e, 0x1f, 0x22, + 0xdd, 0x17, 0x33, 0x13, 0xdb, 0xcd, 0x91, 0x4d, 0x7a, 0x03, 0xda, 0xff, 0xd7, 0x83, 0x01, 0x74, 0xc6, 0x2b, 0x29, + 0xbc, 0x19, 0xbc, 0x7e, 0x7c, 0x47, 0x54, 0x1d, 0x05, 0x15, 0x32, 0x2c, 0xe8, 0x1b, 0x9a, 0x01, 0xe0, 0xd7, 0xeb, + 0xc1, 0x80, 0x44, 0xe6, 0x33, 0x32, 0x7d, 0x7d, 0x78, 0x32, 0x1d, 0x0c, 0x5e, 0x9b, 0x6d, 0xf2, 0x96, 0xdd, 0x53, + 0x0a, 0xac, 0xbf, 0xb3, 0x7e, 0xff, 0xed, 0x51, 0x4c, 0xce, 0x0b, 0x1e, 0x7f, 0x9c, 0x36, 0xdb, 0xf2, 0xd6, 0x45, + 0x55, 0x3b, 0xeb, 0xf7, 0xd7, 0xfd, 0xfe, 0x29, 0x60, 0x17, 0xcd, 0x9c, 0xaf, 0x27, 0x48, 0x5b, 0xe6, 0x8e, 0x22, + 0x69, 0x92, 0x43, 0x63, 0x68, 0x5b, 0xac, 0xda, 0x36, 0xeb, 0xc8, 0xc0, 0xe2, 0xa8, 0x59, 0x51, 0x5c, 0x93, 0x28, + 0xec, 0x9d, 0x6d, 0xb7, 0xa7, 0x8c, 0xb1, 0x98, 0x80, 0xf4, 0xc3, 0x7f, 0x7d, 0x5a, 0x37, 0x62, 0x88, 0x09, 0x89, + 0xcc, 0xe6, 0x66, 0x69, 0x0f, 0x81, 0x88, 0xc3, 0xa6, 0x7f, 0x6f, 0xee, 0xe5, 0xa2, 0x76, 0x7c, 0xeb, 0x2f, 0x00, + 0x42, 0x24, 0x59, 0xc8, 0x67, 0x38, 0x06, 0x65, 0x06, 0x40, 0xe6, 0x91, 0x9a, 0x79, 0x09, 0x20, 0xc0, 0x64, 0xbb, + 0x1d, 0x8d, 0xc7, 0x13, 0x5a, 0xb0, 0xd1, 0xdf, 0x9e, 0x3d, 0xae, 0x1e, 0x87, 0x41, 0x30, 0xc8, 0x48, 0x4b, 0x4f, + 0x61, 0x17, 0x6b, 0xb5, 0x0f, 0x46, 0xf0, 0x9a, 0x7d, 0xbc, 0xce, 0xbe, 0x98, 0x7d, 0x44, 0xc2, 0xda, 0x60, 0x1c, + 0xb9, 0x48, 0x5b, 0x7a, 0xbb, 0x7b, 0x18, 0x4c, 0x2e, 0xd2, 0xcf, 0xb0, 0x9d, 0x3e, 0xff, 0xe6, 0xc1, 0x78, 0xc2, + 0xc1, 0xe8, 0x2e, 0x0a, 0xfa, 0x4c, 0xdb, 0x6e, 0x2b, 0xff, 0x12, 0xf8, 0x16, 0x53, 0x41, 0xc7, 0x66, 0x59, 0xb8, + 0x41, 0x45, 0xd4, 0xd1, 0x32, 0xa8, 0x6a, 0x65, 0x3b, 0x07, 0xd4, 0x12, 0xab, 0x32, 0x71, 0x0b, 0x0c, 0x43, 0x86, + 0xba, 0xdc, 0xe3, 0xea, 0x5f, 0xbc, 0x90, 0x06, 0x3e, 0xc3, 0x89, 0x08, 0x3d, 0x6e, 0x8d, 0xfb, 0xdc, 0x9a, 0xf8, + 0x0c, 0xb7, 0x56, 0x22, 0x89, 0x35, 0xb0, 0xa4, 0xe6, 0x72, 0x94, 0xb0, 0xa3, 0x92, 0xf1, 0x59, 0x19, 0x25, 0x34, + 0x86, 0x07, 0xc9, 0xc4, 0x4c, 0x46, 0x09, 0xda, 0x27, 0xba, 0x08, 0x83, 0x7f, 0x01, 0x66, 0x3f, 0xcd, 0xe1, 0xaf, + 0x24, 0xd3, 0xe4, 0x10, 0x02, 0x42, 0x1c, 0x8e, 0x67, 0x71, 0x38, 0x26, 0x51, 0x72, 0x04, 0x4f, 0xf0, 0x5f, 0x11, + 0x8e, 0x49, 0xad, 0xef, 0x30, 0x52, 0x5d, 0x6e, 0x13, 0x06, 0x70, 0x65, 0xe3, 0xd9, 0x24, 0xb2, 0xd2, 0x5d, 0xf9, + 0x78, 0x34, 0x7e, 0x46, 0xa6, 0x71, 0x28, 0x07, 0x09, 0xa1, 0xe0, 0xdd, 0x1b, 0x96, 0xc3, 0x44, 0xc3, 0xb3, 0x01, + 0x9b, 0x57, 0x3a, 0x36, 0x4f, 0xc2, 0x09, 0x08, 0xc3, 0x84, 0x1c, 0xeb, 0x3d, 0x48, 0x29, 0xfa, 0x3c, 0xc7, 0x7e, + 0xea, 0x23, 0x08, 0xb3, 0xa3, 0x96, 0x8a, 0xaf, 0x00, 0xe8, 0x12, 0x07, 0x87, 0xda, 0x33, 0x5f, 0xcc, 0xc2, 0xd2, + 0xa3, 0x52, 0xa6, 0xba, 0x7d, 0xd1, 0xa0, 0xfc, 0xa6, 0x41, 0xfb, 0x82, 0x0c, 0x26, 0xb4, 0x3c, 0x9a, 0xf0, 0x27, + 0x10, 0xc0, 0xa3, 0x11, 0xf1, 0x4b, 0xe1, 0xc4, 0x40, 0x78, 0x15, 0x64, 0xa0, 0xd2, 0x5a, 0x35, 0x66, 0x64, 0x2b, + 0xde, 0x83, 0x30, 0x29, 0x7b, 0x37, 0x72, 0x9d, 0xa7, 0x10, 0x15, 0x6c, 0x9d, 0x57, 0x7b, 0x97, 0x60, 0xc9, 0x1e, + 0x57, 0x10, 0x27, 0x6c, 0xbd, 0x02, 0xec, 0xdc, 0x47, 0x9b, 0xb2, 0xde, 0x53, 0xdf, 0xed, 0x61, 0xcb, 0xe1, 0x55, + 0x25, 0xf7, 0x26, 0xe3, 0xf1, 0x78, 0xf4, 0x07, 0x1c, 0x1d, 0x40, 0x68, 0x49, 0x64, 0xf8, 0x64, 0x80, 0xc6, 0x5d, + 0x57, 0xdc, 0x1b, 0x17, 0x8a, 0xb2, 0xd2, 0xc9, 0x84, 0x80, 0xf8, 0xd9, 0xf4, 0x0d, 0xf6, 0x15, 0xd7, 0xf1, 0x4f, + 0x76, 0x3f, 0x31, 0x2b, 0x5a, 0xad, 0xd4, 0xd1, 0xbb, 0x93, 0xd3, 0xd7, 0x1f, 0x5e, 0xff, 0xf6, 0xf2, 0xec, 0xf5, + 0xdb, 0x57, 0xaf, 0xdf, 0xbe, 0xfe, 0xf0, 0xcf, 0x07, 0x18, 0x6c, 0xdf, 0x56, 0xc4, 0x8e, 0xbd, 0x77, 0x8f, 0xf1, + 0x6a, 0xf1, 0x85, 0xb3, 0x07, 0xee, 0x16, 0x0b, 0xb0, 0x09, 0x86, 0x5b, 0x10, 0x54, 0x33, 0x1a, 0x95, 0xbe, 0x27, + 0x20, 0xa3, 0x51, 0x21, 0x1b, 0x0f, 0x2b, 0xb6, 0x42, 0x2e, 0xde, 0x31, 0x1c, 0x7c, 0x64, 0x7f, 0x2b, 0xce, 0x84, + 0xdb, 0xd1, 0xd6, 0xac, 0x08, 0xf8, 0x7c, 0xad, 0x45, 0xe5, 0x71, 0x21, 0x6a, 0x6f, 0xdb, 0xe7, 0x90, 0x50, 0x8f, + 0xc8, 0x75, 0xf0, 0xbe, 0x0d, 0xb2, 0xc7, 0x47, 0xde, 0x93, 0xf2, 0x0c, 0xf5, 0x39, 0x1a, 0x3e, 0x6a, 0x3c, 0xa3, + 0x13, 0x73, 0x6d, 0x74, 0xa8, 0x67, 0x05, 0xec, 0x6f, 0x25, 0xc6, 0x86, 0x68, 0x0f, 0x29, 0x62, 0x7d, 0x38, 0xdd, + 0xef, 0xee, 0xcd, 0xe8, 0x7b, 0x38, 0x7e, 0x94, 0x6a, 0x02, 0x69, 0x51, 0xa0, 0x74, 0x65, 0xc8, 0x6d, 0xcf, 0xc2, + 0xc2, 0xfc, 0x0c, 0x1b, 0x04, 0xd0, 0x5e, 0x76, 0x2c, 0x09, 0x34, 0x8b, 0xd7, 0xba, 0xfe, 0x79, 0xf9, 0x32, 0xd1, + 0xce, 0x17, 0xdf, 0x42, 0x88, 0x61, 0xff, 0x8a, 0xd0, 0x98, 0x70, 0x37, 0xc9, 0xee, 0xd2, 0x62, 0xee, 0x55, 0x57, + 0x31, 0x1e, 0x77, 0xf7, 0x5c, 0x29, 0x9a, 0xb7, 0x2e, 0xb0, 0x07, 0x6a, 0x5e, 0xc7, 0x4b, 0x16, 0x02, 0x36, 0xe3, + 0xbe, 0x5d, 0x24, 0xce, 0xef, 0x9d, 0x4e, 0xc8, 0xfe, 0xc1, 0x94, 0x0f, 0x59, 0x49, 0xc5, 0x80, 0x95, 0xf5, 0x0e, + 0x35, 0xe7, 0x6d, 0x42, 0x2e, 0x76, 0x69, 0xb8, 0x18, 0xf2, 0x87, 0x2e, 0x49, 0x1f, 0x78, 0xc3, 0xa1, 0xda, 0x36, + 0x17, 0x43, 0x9a, 0x72, 0xba, 0x4b, 0x65, 0x40, 0x88, 0x74, 0x15, 0x57, 0xa4, 0xd6, 0x47, 0x55, 0xea, 0x24, 0x1d, + 0xd7, 0xd9, 0xe6, 0x33, 0x97, 0x6c, 0x75, 0xbb, 0xf6, 0xaf, 0xd5, 0xed, 0x0b, 0x33, 0x90, 0xbf, 0x3f, 0x11, 0xd5, + 0xc4, 0x40, 0x74, 0x01, 0x15, 0xfc, 0x13, 0xbc, 0x3c, 0x79, 0xa4, 0x15, 0xa0, 0xf7, 0x9d, 0x1d, 0x5d, 0x7b, 0xbc, + 0x31, 0x8b, 0xad, 0x25, 0xce, 0x59, 0xe5, 0x3b, 0xcb, 0xab, 0xb2, 0x15, 0xba, 0x8e, 0x60, 0xbf, 0x84, 0x1d, 0x7d, + 0xf7, 0xb6, 0x01, 0x10, 0xa5, 0xb0, 0x72, 0x67, 0xbf, 0xf0, 0xce, 0x7e, 0x61, 0xcf, 0x7e, 0xbb, 0x09, 0x94, 0x0f, + 0x2b, 0xb4, 0xec, 0x95, 0x14, 0x95, 0x69, 0xf2, 0xb8, 0xa9, 0xcb, 0x42, 0x5a, 0xcc, 0xf7, 0x2d, 0xed, 0x7a, 0x3a, + 0xa6, 0x12, 0xd5, 0x23, 0x3f, 0x60, 0xab, 0xf6, 0x4b, 0xf2, 0xf0, 0x3d, 0xf3, 0x7f, 0xf6, 0x06, 0x79, 0xdf, 0xdd, + 0xee, 0xff, 0xe6, 0x42, 0x07, 0xb7, 0xb5, 0x54, 0x78, 0xea, 0xea, 0xb8, 0xc0, 0xbb, 0x5a, 0xfa, 0xf0, 0x5d, 0xed, + 0x5d, 0xa6, 0x97, 0x5d, 0x05, 0xa8, 0x41, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0xa9, 0xad, 0x42, 0xe3, 0x84, 0x43, 0x68, + 0x0f, 0xef, 0xe0, 0x02, 0x39, 0x2c, 0x21, 0xf4, 0x63, 0x65, 0x04, 0x80, 0x3e, 0x8b, 0x7d, 0xc2, 0xc3, 0x8c, 0x0c, + 0x7c, 0x89, 0x5f, 0x29, 0x7d, 0x71, 0xf1, 0xfe, 0x4e, 0x66, 0x82, 0x5e, 0x25, 0x36, 0xbb, 0x94, 0xed, 0x98, 0x1f, + 0xfe, 0x17, 0x18, 0x0d, 0xc2, 0x6b, 0x4b, 0xb6, 0x2f, 0x3a, 0x66, 0xb9, 0x82, 0xa3, 0xb6, 0x74, 0x65, 0x96, 0xad, + 0xeb, 0x67, 0x35, 0xcc, 0xf4, 0x99, 0x72, 0x02, 0xb2, 0x2f, 0xe4, 0xee, 0xa7, 0xba, 0x62, 0x41, 0x8e, 0x26, 0xe3, + 0x29, 0x11, 0x83, 0x41, 0x2b, 0xf9, 0x10, 0x93, 0x87, 0xc3, 0x1d, 0xe6, 0x52, 0xe8, 0x7e, 0x78, 0x7d, 0x80, 0xfa, + 0x1a, 0x5b, 0x92, 0x6c, 0x2a, 0xf6, 0x17, 0x98, 0xc5, 0x02, 0x71, 0x74, 0xf0, 0x8b, 0xf3, 0x05, 0x80, 0x2c, 0xc3, + 0x32, 0xd3, 0xc2, 0xa2, 0x32, 0x55, 0x3e, 0xb2, 0x05, 0x93, 0x87, 0xe3, 0x99, 0xdf, 0x73, 0xc7, 0xe0, 0x10, 0x12, + 0x4d, 0xac, 0xf1, 0x8b, 0x9f, 0x05, 0xe3, 0x38, 0x94, 0x47, 0xb2, 0xf1, 0x5d, 0x49, 0xa2, 0xb1, 0x31, 0x55, 0xd6, + 0x57, 0x89, 0x6a, 0x98, 0x90, 0xc7, 0x05, 0xd9, 0x2f, 0xe8, 0xd2, 0x1f, 0x4b, 0x4c, 0xdf, 0x8f, 0xf7, 0x27, 0x63, + 0xf2, 0x38, 0x7e, 0x3c, 0x31, 0x70, 0xc3, 0x7e, 0x8e, 0x7c, 0xb8, 0x24, 0xfb, 0xcd, 0x2a, 0xc1, 0x14, 0xd5, 0xf4, + 0xcc, 0xaf, 0x24, 0x19, 0x2c, 0x07, 0xe9, 0xe3, 0x56, 0x5e, 0xac, 0x55, 0x8f, 0xf7, 0xfa, 0x90, 0x4f, 0x89, 0x68, + 0xdc, 0x18, 0xd6, 0xf4, 0x2a, 0xfe, 0x53, 0x16, 0x51, 0x29, 0x01, 0x91, 0x10, 0xd4, 0xdb, 0xd9, 0x45, 0x96, 0xc4, + 0x22, 0x8d, 0xd2, 0x9a, 0xd0, 0xf4, 0x88, 0x4d, 0xc6, 0xb3, 0x94, 0xa5, 0x87, 0x93, 0x67, 0xb3, 0xc9, 0xb3, 0xe8, + 0x60, 0x1c, 0xa5, 0x83, 0x01, 0x24, 0x1f, 0x8c, 0xc1, 0xc5, 0x0e, 0x7e, 0xb3, 0x03, 0x18, 0xba, 0x23, 0x64, 0x09, + 0x0b, 0x68, 0xda, 0x97, 0x35, 0x49, 0x0f, 0xe7, 0x85, 0xea, 0x49, 0x7c, 0x4b, 0xd7, 0x9e, 0x83, 0x8b, 0xdf, 0xc2, + 0x0b, 0xd7, 0xc2, 0x8b, 0xdd, 0x16, 0x0a, 0x4d, 0xb6, 0x0b, 0xf9, 0xff, 0xe3, 0x86, 0x71, 0xdf, 0x5d, 0xc2, 0x2c, + 0xae, 0xeb, 0x6c, 0xb4, 0x2a, 0x64, 0x25, 0xe1, 0x36, 0xa1, 0x44, 0x61, 0xa3, 0x78, 0xb5, 0xca, 0xb5, 0x8b, 0xd8, + 0xbc, 0xa2, 0x00, 0xee, 0x02, 0x71, 0x8a, 0x81, 0x85, 0x36, 0x06, 0x72, 0x9f, 0x78, 0x21, 0x99, 0x55, 0xfb, 0x98, + 0x7b, 0xe4, 0x9f, 0x21, 0x18, 0xa3, 0x8a, 0xa3, 0xf1, 0x4c, 0x61, 0x5d, 0x7c, 0x4e, 0xde, 0xfb, 0x6f, 0x1c, 0x45, + 0xf6, 0x68, 0x06, 0x3d, 0x41, 0xe4, 0x3c, 0xe2, 0xec, 0xc9, 0xe4, 0x65, 0xe0, 0x7e, 0x06, 0x2b, 0xfd, 0x75, 0xb7, + 0x19, 0x6b, 0xdb, 0xa3, 0x7b, 0x61, 0x84, 0xa2, 0x9f, 0xf0, 0x9d, 0xa9, 0x17, 0x70, 0x09, 0xd5, 0xc0, 0xae, 0x2f, + 0x2f, 0x79, 0x09, 0x20, 0x42, 0x99, 0xe8, 0xf7, 0x7b, 0x7f, 0x1a, 0x68, 0xd2, 0x92, 0x17, 0x6f, 0x32, 0x61, 0x9d, + 0x71, 0xa0, 0xa9, 0x40, 0xfd, 0x3f, 0x56, 0xf6, 0x99, 0x8e, 0xc9, 0xcc, 0x7f, 0x1c, 0x4e, 0x48, 0xd4, 0x7c, 0x4d, + 0x3e, 0x73, 0x9a, 0x7e, 0xe6, 0x8a, 0xf6, 0x1f, 0xc8, 0xcc, 0x0d, 0x87, 0x0c, 0xf5, 0x97, 0x8e, 0x79, 0x32, 0x7a, + 0x9d, 0x98, 0x1d, 0x09, 0x56, 0xcd, 0x20, 0x0a, 0x7b, 0x01, 0x0f, 0xea, 0x5a, 0x16, 0x4f, 0x61, 0xf6, 0x41, 0x8d, + 0x28, 0x0e, 0xd9, 0x78, 0x16, 0xca, 0x70, 0x02, 0xf6, 0xbd, 0x93, 0x31, 0xdc, 0x07, 0x64, 0xf8, 0xb1, 0x0a, 0xb1, + 0x73, 0x90, 0xf6, 0xb1, 0x42, 0xc5, 0x04, 0x40, 0x04, 0x42, 0xde, 0x7e, 0x5f, 0xaa, 0x24, 0x7c, 0x5d, 0x62, 0x4a, + 0xa1, 0x3e, 0xf8, 0x4f, 0xa4, 0xea, 0x8e, 0xe9, 0x57, 0xeb, 0xc7, 0x9f, 0x09, 0xc5, 0xa7, 0xbb, 0x94, 0xf8, 0x16, + 0x82, 0x3b, 0x4b, 0xd0, 0x41, 0x54, 0x68, 0xc6, 0xf6, 0x30, 0xbf, 0x2b, 0xee, 0xe7, 0x77, 0xc5, 0xff, 0x3b, 0x7e, + 0x57, 0x3c, 0xc4, 0x18, 0x56, 0x16, 0x1a, 0x7e, 0x16, 0x8c, 0x83, 0xe8, 0x3f, 0xe7, 0x13, 0xef, 0xe5, 0xa9, 0xaf, + 0x32, 0x31, 0xbd, 0x87, 0x69, 0xf6, 0x09, 0x0a, 0xc2, 0x2a, 0xee, 0xd2, 0x93, 0x75, 0x65, 0x6f, 0xad, 0x64, 0x88, + 0x79, 0x1e, 0x60, 0x8d, 0xc2, 0xca, 0x03, 0xba, 0x47, 0xd5, 0x06, 0x71, 0x22, 0x78, 0x18, 0x33, 0x2b, 0x7d, 0xdf, + 0x6e, 0x8d, 0x0a, 0xf3, 0x41, 0x2e, 0x0a, 0xb2, 0x9b, 0x8f, 0x67, 0xe3, 0x28, 0xc4, 0x06, 0xfc, 0xc7, 0x8c, 0x55, + 0x43, 0x36, 0xdf, 0xc9, 0x48, 0xed, 0x98, 0x3c, 0x4d, 0x76, 0x49, 0xef, 0x80, 0x77, 0xc8, 0xcf, 0xeb, 0x8f, 0x61, + 0x21, 0x0d, 0xbf, 0x25, 0x2f, 0xe3, 0x22, 0xab, 0x96, 0x57, 0x59, 0x82, 0x4c, 0x17, 0xbc, 0xf8, 0x62, 0xa6, 0xcb, + 0xfb, 0x58, 0x1f, 0x30, 0x9e, 0x52, 0xbc, 0x6e, 0x88, 0xd2, 0xd7, 0x2d, 0xcf, 0x0a, 0x75, 0x79, 0x52, 0x31, 0xdb, + 0xb3, 0x12, 0x9c, 0x4e, 0xc1, 0x04, 0x5f, 0xff, 0x74, 0xbd, 0x8f, 0x01, 0x17, 0x14, 0x6a, 0x4e, 0x0b, 0xb9, 0x32, + 0x58, 0x4e, 0x16, 0xba, 0x13, 0x30, 0x43, 0xa5, 0xc0, 0x0b, 0x14, 0xfc, 0x45, 0x03, 0x23, 0xfa, 0xca, 0xfd, 0x26, + 0x03, 0x83, 0x74, 0x69, 0x4e, 0x84, 0xb1, 0xe3, 0x76, 0x8a, 0xb4, 0x15, 0xe5, 0x8c, 0xb3, 0xf7, 0xea, 0x4a, 0x01, + 0x06, 0x78, 0x9b, 0x9b, 0xe8, 0x3c, 0x41, 0xaf, 0x05, 0xa5, 0xf3, 0x06, 0xee, 0x66, 0x19, 0x19, 0xe1, 0xe2, 0xe3, + 0xca, 0x63, 0xc1, 0x3d, 0xfb, 0x85, 0x58, 0x1a, 0xcd, 0x34, 0x18, 0xb3, 0x79, 0xc1, 0x02, 0x85, 0x0a, 0x14, 0x58, + 0xce, 0xb4, 0xa5, 0x69, 0x35, 0xe4, 0xfb, 0x07, 0x68, 0x6d, 0x5a, 0x0d, 0xf8, 0xfe, 0x41, 0x1d, 0x65, 0x87, 0x90, + 0xe5, 0xc8, 0xcf, 0xa0, 0x5e, 0xd7, 0x91, 0x49, 0x31, 0xd9, 0xfd, 0xfa, 0x52, 0x7f, 0x54, 0x37, 0xe0, 0xfa, 0x01, + 0x08, 0x60, 0x03, 0x70, 0x08, 0x54, 0x83, 0xa5, 0x11, 0xc1, 0xa2, 0x4c, 0xa1, 0x7d, 0x0d, 0xbd, 0x37, 0x1a, 0xfe, + 0x0b, 0xdc, 0x45, 0xe4, 0xca, 0xff, 0x04, 0x81, 0xbf, 0xa2, 0x4c, 0x2b, 0x53, 0xfc, 0x4f, 0xb4, 0x7a, 0x85, 0x72, + 0xd6, 0xb4, 0xe6, 0x83, 0x68, 0x4d, 0x84, 0x6a, 0xc6, 0x10, 0xfc, 0x5b, 0x59, 0xa6, 0x2d, 0x55, 0x95, 0xfa, 0xd0, + 0x78, 0xad, 0x15, 0xce, 0xf2, 0x71, 0xe4, 0xbd, 0xc6, 0xd0, 0xb1, 0x89, 0xb3, 0x94, 0x53, 0xa9, 0xb3, 0x4f, 0xfb, + 0x32, 0x72, 0x80, 0xd3, 0x09, 0x1b, 0x4f, 0x93, 0x43, 0x39, 0x4d, 0x1c, 0x64, 0x7e, 0xce, 0x30, 0xb2, 0xaa, 0x01, + 0x61, 0x51, 0x36, 0x94, 0xb6, 0x00, 0x93, 0x9c, 0x10, 0x32, 0xc5, 0x50, 0x14, 0xf9, 0x48, 0xf7, 0xc3, 0x7a, 0xb3, + 0xba, 0x2f, 0xde, 0x69, 0x80, 0xd3, 0x30, 0x81, 0x40, 0xe0, 0x45, 0x7c, 0x93, 0x89, 0x4b, 0xf0, 0x18, 0x1e, 0xc0, + 0x97, 0xe0, 0x26, 0x97, 0xb2, 0xdf, 0xab, 0x30, 0xc7, 0xb5, 0x05, 0x0c, 0x1a, 0xac, 0x1e, 0x44, 0x87, 0x4b, 0x69, + 0xb3, 0xab, 0x00, 0xb1, 0x31, 0x85, 0x58, 0x16, 0x6c, 0x6d, 0xd9, 0xb3, 0xef, 0x55, 0xd3, 0xd0, 0x3a, 0xe1, 0x58, + 0x5c, 0xe6, 0x10, 0x45, 0x65, 0x10, 0x83, 0x3b, 0x92, 0xc7, 0xe7, 0x3d, 0x12, 0xe1, 0x05, 0x01, 0xb7, 0xb2, 0x58, + 0x86, 0x2b, 0xba, 0x1c, 0xdd, 0xd2, 0xf5, 0xe8, 0x86, 0x8e, 0xe9, 0xe4, 0xef, 0x63, 0xb0, 0xc8, 0xd6, 0xa9, 0x77, + 0x74, 0x3d, 0x5a, 0xd2, 0x6f, 0xc7, 0xf4, 0xe0, 0x6f, 0x60, 0xc2, 0x87, 0x87, 0x09, 0xbd, 0x00, 0xc7, 0x2e, 0x52, + 0xa3, 0xa7, 0xa6, 0x6f, 0x70, 0x58, 0x8d, 0xf2, 0x21, 0x1f, 0xe5, 0x94, 0x8f, 0x8a, 0x61, 0x35, 0x02, 0x4f, 0xc7, + 0x6a, 0xc8, 0x47, 0x15, 0xe5, 0xa3, 0xf3, 0x61, 0x35, 0x3a, 0x27, 0xcd, 0xa6, 0xbf, 0xae, 0xf8, 0x55, 0xc9, 0x52, + 0xd8, 0x16, 0xb0, 0x7c, 0x3d, 0xaf, 0xa8, 0xd4, 0x5f, 0xd5, 0xe6, 0x64, 0xb6, 0x9c, 0xbd, 0xbd, 0xee, 0x72, 0x62, + 0xf1, 0xb8, 0x6d, 0x3a, 0x5c, 0x7d, 0x39, 0x51, 0x27, 0xbd, 0x42, 0x7e, 0x18, 0x4f, 0x85, 0x3a, 0x87, 0xc0, 0x4c, + 0x62, 0x16, 0xc6, 0x0c, 0x9b, 0xa9, 0xd3, 0x40, 0x81, 0x93, 0x8d, 0x3c, 0x17, 0xc5, 0x6c, 0x94, 0x53, 0x78, 0x1f, + 0x13, 0x12, 0x09, 0x38, 0xab, 0x8e, 0xaa, 0x51, 0x01, 0x31, 0x47, 0x58, 0x88, 0x8f, 0xd0, 0x2f, 0xf5, 0x91, 0x87, + 0x04, 0x9e, 0x61, 0x5f, 0x8b, 0x41, 0x0c, 0x47, 0xbc, 0xad, 0xac, 0x9a, 0x85, 0x09, 0x54, 0x56, 0x0d, 0x4b, 0x53, + 0x59, 0x41, 0xb3, 0x51, 0xe5, 0x57, 0x56, 0xe1, 0x18, 0x25, 0x84, 0x44, 0xa5, 0xae, 0x0c, 0xd4, 0x27, 0x09, 0x0b, + 0x4b, 0x5d, 0xd9, 0xb9, 0xfa, 0xe8, 0xdc, 0xaf, 0xec, 0x1c, 0x5c, 0x48, 0x07, 0x89, 0x7f, 0x95, 0xca, 0xd3, 0xf6, + 0x75, 0xb0, 0xb1, 0xaa, 0xe8, 0x86, 0xdf, 0x56, 0x45, 0x1c, 0x95, 0xd4, 0xc5, 0x80, 0xc6, 0x85, 0x11, 0x49, 0xaa, + 0xd7, 0x28, 0xf8, 0x43, 0x82, 0xa8, 0x34, 0x06, 0xaf, 0xce, 0xa4, 0x6b, 0xa5, 0x56, 0x54, 0x0c, 0xca, 0x41, 0x01, + 0xf7, 0xa7, 0xbc, 0xb5, 0x90, 0xbe, 0x87, 0x88, 0xca, 0x50, 0xde, 0xe0, 0x1f, 0x18, 0x3c, 0x99, 0xad, 0xd2, 0x30, + 0x19, 0xdd, 0xd1, 0x78, 0xb4, 0x44, 0x38, 0x18, 0xb6, 0x4e, 0x15, 0xde, 0xfa, 0x05, 0xa4, 0xdf, 0xd2, 0x78, 0x74, + 0x43, 0x53, 0x6b, 0x73, 0x6a, 0xa0, 0xae, 0x7a, 0x63, 0x7a, 0x1b, 0xc1, 0xeb, 0xbb, 0x68, 0x49, 0x61, 0x2b, 0x1d, + 0xe7, 0xd9, 0xa5, 0x88, 0x52, 0x8a, 0x08, 0x84, 0x6b, 0x44, 0x0e, 0x5c, 0x6a, 0xb4, 0xc1, 0xf5, 0x00, 0xca, 0xd0, + 0x70, 0x81, 0xcb, 0x41, 0x3c, 0x5a, 0x7a, 0x64, 0x6a, 0xa9, 0x2f, 0xb2, 0x08, 0x1f, 0xed, 0x6c, 0xb4, 0x14, 0xcf, + 0x88, 0x85, 0x71, 0x05, 0x43, 0xa8, 0x0b, 0x2b, 0x4d, 0x41, 0xd2, 0x05, 0x8e, 0xec, 0x85, 0x45, 0x15, 0x6e, 0xc0, + 0xb4, 0xe8, 0x0e, 0xcc, 0xa3, 0x40, 0xe1, 0xe0, 0x12, 0xa4, 0x9f, 0x50, 0xb6, 0x73, 0x94, 0x26, 0x87, 0x37, 0x41, + 0xe9, 0xce, 0x04, 0x21, 0xed, 0xea, 0x26, 0x5b, 0xd2, 0x37, 0xd8, 0xde, 0xa1, 0x53, 0x51, 0x41, 0xf5, 0xb9, 0x05, + 0x93, 0x25, 0x1b, 0x84, 0x2d, 0x61, 0x7a, 0xa6, 0xd7, 0x80, 0x3d, 0xbd, 0x7f, 0xb0, 0x33, 0xdf, 0xc5, 0xec, 0xd3, + 0x7e, 0x19, 0x8d, 0x95, 0x05, 0x6f, 0x6e, 0x89, 0xdd, 0x92, 0x8d, 0xa7, 0xcb, 0xc3, 0x72, 0xba, 0x44, 0x62, 0x67, + 0xe8, 0x16, 0xe3, 0xf3, 0xe5, 0x82, 0x26, 0x78, 0xb6, 0xb1, 0x6a, 0xbe, 0x34, 0x68, 0x29, 0x29, 0xc3, 0xf5, 0xb6, + 0x44, 0xff, 0x7f, 0x75, 0xf1, 0x4b, 0x01, 0x5e, 0x82, 0xb1, 0x00, 0x10, 0xee, 0xc1, 0xb4, 0x20, 0xb5, 0x51, 0x36, + 0x96, 0x69, 0x98, 0xe2, 0x22, 0x30, 0x29, 0xfd, 0x7e, 0x98, 0xb3, 0x94, 0x78, 0xd0, 0xa1, 0xee, 0xd4, 0x4e, 0x7d, + 0x21, 0x08, 0xf0, 0x48, 0xea, 0x1c, 0x9b, 0xfc, 0x7d, 0x3c, 0x0b, 0xd4, 0x40, 0x04, 0x51, 0x76, 0x88, 0x8f, 0x18, + 0xb8, 0x28, 0xd2, 0x71, 0x3b, 0x5d, 0x11, 0x17, 0xbb, 0xc7, 0x2c, 0xc4, 0x49, 0xc2, 0x5c, 0xb3, 0x6c, 0xc8, 0xaa, + 0x08, 0x13, 0x74, 0x61, 0x60, 0x96, 0x37, 0x64, 0xd5, 0xfe, 0x01, 0x44, 0x6a, 0xb5, 0x65, 0xac, 0xba, 0xca, 0xf8, + 0x16, 0x80, 0xac, 0x19, 0x63, 0x07, 0x7f, 0x1b, 0xcf, 0xd4, 0x37, 0x51, 0xc8, 0x8f, 0x0e, 0xfe, 0x06, 0xc9, 0x87, + 0xdf, 0x22, 0x33, 0x07, 0xc9, 0x8d, 0x82, 0x2e, 0x9b, 0xb3, 0xae, 0xa1, 0x34, 0x71, 0xed, 0x95, 0x7a, 0xed, 0x49, + 0xb3, 0xf6, 0x0a, 0x74, 0xa7, 0x36, 0xbc, 0x87, 0xb2, 0x9d, 0x05, 0x13, 0x74, 0x34, 0xbb, 0x03, 0x1d, 0xbc, 0x53, + 0x04, 0xbd, 0x4c, 0x42, 0xe3, 0x11, 0xaa, 0x8c, 0x7a, 0x61, 0x47, 0x76, 0xb3, 0x2e, 0x99, 0x67, 0xc0, 0x1c, 0xdb, + 0x73, 0x48, 0x0c, 0x73, 0x75, 0x50, 0xa7, 0xac, 0x1c, 0xe6, 0x78, 0x00, 0xaf, 0x99, 0x1c, 0x8a, 0x41, 0xae, 0x51, + 0xbe, 0x2f, 0x58, 0x31, 0x2c, 0x07, 0xb9, 0xe6, 0x66, 0xa6, 0xcd, 0xd8, 0xb4, 0x89, 0x0e, 0xcf, 0xbc, 0x62, 0x47, + 0xab, 0x1e, 0xf0, 0xb1, 0xe0, 0xc9, 0xec, 0x7b, 0x3e, 0xbe, 0x01, 0x4e, 0x66, 0x73, 0x1b, 0x2d, 0xe9, 0x5d, 0x94, + 0xd2, 0x9b, 0x68, 0x4d, 0x97, 0xd1, 0x85, 0x31, 0x31, 0x4e, 0x6a, 0x38, 0x07, 0xa0, 0x55, 0x00, 0x89, 0xa7, 0x7e, + 0xbd, 0xe7, 0x49, 0x15, 0x2e, 0x69, 0x0a, 0x6e, 0xc3, 0xbe, 0x7d, 0xe6, 0x95, 0x2f, 0x91, 0xda, 0x20, 0xc6, 0x9a, + 0x35, 0x54, 0xdc, 0x78, 0xeb, 0x3e, 0x12, 0x35, 0xec, 0x5c, 0x17, 0x9b, 0xa8, 0x1a, 0x4e, 0xa6, 0x25, 0x20, 0xb6, + 0x96, 0xc3, 0xa1, 0x3b, 0x42, 0x76, 0x8f, 0x1f, 0x1d, 0xe8, 0xb9, 0x27, 0x2d, 0xb6, 0x6d, 0xcb, 0x1f, 0x18, 0xc2, + 0x94, 0x7e, 0xfe, 0xc8, 0x07, 0xc4, 0x8a, 0x4b, 0x38, 0x1b, 0x81, 0x3a, 0x5a, 0xa1, 0xd3, 0xef, 0x55, 0x58, 0xe8, + 0x03, 0x7c, 0x73, 0x1b, 0x25, 0xf4, 0x2e, 0xca, 0x3d, 0xb2, 0xb6, 0xac, 0x99, 0x9c, 0x9e, 0x65, 0x21, 0x6f, 0x1f, + 0xe8, 0xe5, 0x02, 0x40, 0xb4, 0x06, 0xb1, 0x2f, 0x75, 0x3d, 0x00, 0xa7, 0x21, 0x34, 0x09, 0x8d, 0xe0, 0xaa, 0x82, + 0x30, 0x02, 0xae, 0x24, 0xfc, 0x0d, 0x26, 0x2a, 0xf0, 0x05, 0xb8, 0xc8, 0xa4, 0x69, 0xce, 0x83, 0xda, 0x1f, 0xc9, + 0xd3, 0xa2, 0xed, 0xed, 0x0a, 0xa3, 0x09, 0xc6, 0x9e, 0x68, 0x9f, 0x47, 0xca, 0x51, 0x5c, 0x24, 0x61, 0x36, 0xba, + 0x55, 0xe7, 0x39, 0xcd, 0x46, 0x77, 0xfa, 0x57, 0x45, 0xc7, 0xf4, 0x3b, 0x1d, 0xd0, 0x46, 0x49, 0xdf, 0x3a, 0xce, + 0x06, 0xb4, 0x5e, 0x2c, 0x8d, 0xff, 0xb5, 0x1c, 0xdd, 0x52, 0x39, 0xba, 0xf3, 0x2d, 0xa9, 0x26, 0xd3, 0xe2, 0x50, + 0xa0, 0x21, 0x55, 0xe7, 0xf7, 0x05, 0xf0, 0x73, 0xa5, 0xf1, 0x9d, 0x36, 0xdf, 0x7b, 0xed, 0x3f, 0xef, 0xe4, 0x09, + 0x14, 0x4b, 0x54, 0xb0, 0x6a, 0x04, 0x76, 0xec, 0xeb, 0x3c, 0x2e, 0xcc, 0x28, 0xc5, 0xd4, 0x9a, 0xf4, 0x63, 0xe0, + 0x8a, 0x69, 0xaf, 0x00, 0x57, 0xcb, 0xed, 0x56, 0xc5, 0xd0, 0x84, 0x3d, 0x3b, 0x86, 0xa8, 0xe7, 0xc6, 0x31, 0x4a, + 0x36, 0xdc, 0x03, 0x62, 0x2d, 0xf3, 0x56, 0x2e, 0x01, 0x09, 0xbc, 0xf5, 0x30, 0x29, 0x00, 0x63, 0xb0, 0x5c, 0x12, + 0x9d, 0xc7, 0x43, 0x9f, 0x50, 0x2f, 0x34, 0xea, 0x84, 0x6c, 0x6c, 0x09, 0x1c, 0x7f, 0x58, 0x1f, 0x02, 0xc1, 0xab, + 0x3c, 0xd7, 0x5f, 0x69, 0x5d, 0x7f, 0xa9, 0xf4, 0xdc, 0xb1, 0x5c, 0xd7, 0xcf, 0xda, 0xd4, 0xe8, 0x15, 0x58, 0xf8, + 0x6e, 0x94, 0x79, 0x24, 0xb7, 0x08, 0xa9, 0x0a, 0xac, 0xd4, 0x2d, 0x24, 0x98, 0x7f, 0x25, 0x67, 0xab, 0x32, 0x5f, + 0x3d, 0xf2, 0xa0, 0x9c, 0x4d, 0x4f, 0x7f, 0x43, 0x82, 0x76, 0xd7, 0x91, 0xe6, 0xf1, 0x16, 0x1d, 0x3e, 0xbb, 0xd6, + 0x12, 0x73, 0x27, 0x51, 0xf1, 0x7c, 0x0a, 0xd8, 0xea, 0x45, 0x76, 0xa5, 0x7c, 0xac, 0x76, 0x71, 0xfc, 0xcc, 0xf9, + 0x13, 0x57, 0xe1, 0x5a, 0x34, 0x94, 0x20, 0xe0, 0xcd, 0x61, 0xec, 0x0a, 0x55, 0x40, 0x43, 0x73, 0x03, 0xc7, 0xb9, + 0x1a, 0x56, 0x9a, 0x80, 0x69, 0x29, 0x8f, 0x0e, 0x70, 0x68, 0xf2, 0xa8, 0xdd, 0x34, 0xac, 0x0c, 0x5d, 0x6b, 0xf4, + 0xb9, 0xad, 0x74, 0xc6, 0x9b, 0x0d, 0xdf, 0x3f, 0x18, 0x54, 0xf8, 0x93, 0x34, 0x47, 0xa3, 0x9d, 0x1b, 0xee, 0x34, + 0x02, 0x33, 0x57, 0x72, 0x45, 0x76, 0x47, 0xc9, 0xcb, 0xef, 0xe9, 0x85, 0x05, 0xf4, 0xe7, 0x3f, 0x17, 0x13, 0x4e, + 0x5a, 0x62, 0x42, 0xb4, 0x74, 0xd0, 0xa2, 0x83, 0x1d, 0xe5, 0x95, 0x7d, 0x89, 0x97, 0xce, 0xf1, 0xbf, 0xaf, 0xc7, + 0xda, 0x55, 0x20, 0xb4, 0x3a, 0xb9, 0xdf, 0x9e, 0x2c, 0x10, 0x35, 0xa0, 0x9a, 0x5d, 0x95, 0xa3, 0x4c, 0x3b, 0x2b, + 0xb2, 0x69, 0xc8, 0x5c, 0x77, 0xb3, 0x34, 0x6c, 0x26, 0x3b, 0x16, 0x96, 0x19, 0x06, 0x6b, 0xa7, 0x8a, 0x3e, 0x07, + 0x2d, 0x3f, 0x82, 0x17, 0x4d, 0xe5, 0x99, 0xcf, 0x66, 0x19, 0xf1, 0x02, 0x9d, 0x73, 0x2a, 0x16, 0x4d, 0xe9, 0x58, + 0xb9, 0xdd, 0x96, 0x68, 0x2c, 0x51, 0x46, 0x41, 0x50, 0xdb, 0x20, 0xec, 0xba, 0x74, 0x4f, 0xfa, 0xb4, 0x8b, 0x4f, + 0x2b, 0xd0, 0xf7, 0xf8, 0x3e, 0x03, 0x89, 0xa9, 0x27, 0x79, 0xa8, 0x1a, 0xcd, 0xd1, 0xc9, 0xb3, 0x38, 0xd5, 0xf8, + 0xfc, 0x4a, 0x76, 0xd6, 0xbc, 0x5b, 0x8d, 0x29, 0xfe, 0x23, 0x75, 0xfb, 0xce, 0x65, 0x68, 0xa2, 0xbf, 0x96, 0x07, + 0x2d, 0x85, 0x05, 0xc7, 0x6d, 0xe3, 0xaf, 0xdf, 0x66, 0x0e, 0x31, 0x2c, 0x5d, 0x0e, 0x6f, 0x42, 0x87, 0xee, 0xae, + 0xb2, 0x33, 0xd7, 0x07, 0xd4, 0xa9, 0x8b, 0x75, 0x1b, 0x50, 0xb2, 0xe4, 0xdd, 0x3a, 0x3d, 0xb1, 0xd2, 0x77, 0xfb, + 0xe1, 0xce, 0x3c, 0x6a, 0x76, 0x77, 0xbb, 0x9d, 0x90, 0xb6, 0x7d, 0x30, 0xde, 0x97, 0xb0, 0x10, 0xe7, 0x1d, 0xb6, + 0xf7, 0x7d, 0x58, 0x3d, 0xe6, 0x83, 0x5f, 0x70, 0x9c, 0x61, 0xf4, 0x33, 0x65, 0xe8, 0xf3, 0xaa, 0x90, 0x57, 0xaa, + 0x53, 0xbe, 0xd0, 0xad, 0x65, 0xea, 0xfd, 0x36, 0x7e, 0xdb, 0x0a, 0x10, 0xe3, 0x75, 0xc5, 0x4a, 0xf1, 0x86, 0x56, + 0x18, 0xd7, 0xc0, 0x6d, 0x72, 0xa8, 0xa5, 0x5a, 0x20, 0xea, 0xf2, 0x93, 0xc7, 0x3c, 0x32, 0xea, 0x4c, 0xf8, 0xee, + 0x31, 0xf7, 0xa5, 0x6b, 0xbb, 0x4d, 0xfc, 0x5c, 0xd3, 0xf6, 0x77, 0x07, 0xba, 0xa3, 0x75, 0x0f, 0x37, 0xcf, 0xe6, + 0xe7, 0x91, 0xf9, 0x62, 0x80, 0xcd, 0xda, 0x65, 0x5c, 0x76, 0x0c, 0xf7, 0xbd, 0xe9, 0xc1, 0x58, 0x40, 0x20, 0x31, + 0x43, 0x2f, 0x03, 0x17, 0xb8, 0xc0, 0x5d, 0x61, 0xc0, 0x10, 0xd7, 0xb4, 0xe4, 0x4c, 0x5b, 0xd9, 0xfa, 0xc8, 0xdb, + 0xa8, 0x10, 0xac, 0xeb, 0x8e, 0x9b, 0x24, 0x87, 0xe0, 0x84, 0x2d, 0xf7, 0xbe, 0xf6, 0xda, 0x19, 0xfe, 0x63, 0x20, + 0x9c, 0x5b, 0xa2, 0x67, 0xd4, 0xf6, 0x58, 0xab, 0x7b, 0x0d, 0xaf, 0x72, 0x17, 0x79, 0xd6, 0x6f, 0xe6, 0xa5, 0x61, + 0x5f, 0xf0, 0x5a, 0x0a, 0x0e, 0x8d, 0xed, 0x56, 0xb8, 0xc5, 0xe2, 0x1d, 0xad, 0x56, 0xd6, 0xda, 0x6a, 0xaf, 0x95, + 0x8a, 0xde, 0xbf, 0xe6, 0x38, 0x71, 0x96, 0xc2, 0xf6, 0xc3, 0x87, 0x0b, 0x76, 0x4d, 0x00, 0x83, 0x16, 0x93, 0x05, + 0x4a, 0x50, 0xc9, 0x5a, 0xd5, 0x6e, 0xa7, 0xc4, 0x2f, 0xf7, 0x8b, 0x2e, 0xb3, 0x9d, 0xc7, 0xaf, 0x9b, 0xb4, 0xcf, + 0x7c, 0x8e, 0x7e, 0x98, 0xdf, 0x59, 0x27, 0x25, 0x67, 0x18, 0xd7, 0xf2, 0xff, 0xab, 0xe8, 0x65, 0x91, 0xa5, 0xd1, + 0xc6, 0xf0, 0x60, 0x36, 0xd4, 0xa6, 0x0f, 0x8d, 0x51, 0xb9, 0x65, 0xa3, 0x88, 0x68, 0x75, 0x0b, 0x82, 0x19, 0xc5, + 0x7d, 0x89, 0x36, 0xaf, 0x54, 0x59, 0x78, 0x87, 0xcf, 0x6c, 0xf4, 0x86, 0xed, 0x09, 0xa1, 0x7c, 0xf7, 0xb4, 0x30, + 0xab, 0x96, 0x8a, 0x06, 0xdb, 0x25, 0xbc, 0x8b, 0x51, 0xa5, 0x9f, 0x30, 0xd9, 0xb2, 0x60, 0xaa, 0xff, 0xdf, 0x17, + 0x59, 0xda, 0xa6, 0xe8, 0xc0, 0x74, 0x36, 0x7d, 0x3a, 0xe9, 0x06, 0xd7, 0x19, 0xb0, 0x88, 0x60, 0x4b, 0x85, 0xe3, + 0x51, 0x6a, 0x37, 0x48, 0x98, 0x08, 0x6e, 0xa2, 0x5e, 0x76, 0xb4, 0x4c, 0xc9, 0xaa, 0x80, 0xe7, 0x57, 0xae, 0x32, + 0x1d, 0x47, 0x43, 0xbf, 0x7f, 0x95, 0x9a, 0xd0, 0xaf, 0xd4, 0x4b, 0x55, 0x9c, 0x87, 0x51, 0x75, 0xa8, 0x30, 0x46, + 0x4b, 0x9a, 0xc2, 0x31, 0x98, 0x5d, 0x84, 0x29, 0x5e, 0xce, 0x36, 0x09, 0xfb, 0x82, 0x81, 0x5c, 0x6a, 0x83, 0x7a, + 0x4d, 0x89, 0xd6, 0xac, 0xbd, 0x99, 0x53, 0x42, 0x2f, 0x58, 0xe9, 0xdf, 0x85, 0xd6, 0x20, 0x50, 0x94, 0xcd, 0x94, + 0xe9, 0xb9, 0x6e, 0xe7, 0x05, 0x4d, 0x68, 0x41, 0x57, 0xa4, 0x06, 0x7d, 0xaf, 0x93, 0xb3, 0xa3, 0x93, 0x9d, 0x99, + 0xf5, 0x98, 0x15, 0xc3, 0xc9, 0x34, 0x86, 0x6b, 0x5a, 0xec, 0xae, 0x69, 0xcb, 0xe6, 0x8d, 0xab, 0xb1, 0x71, 0x1a, + 0xb4, 0x0b, 0xa4, 0x6d, 0x9a, 0xdb, 0x4f, 0x3d, 0x6e, 0x7f, 0x5d, 0xb3, 0xe5, 0xb4, 0xb7, 0xde, 0x6e, 0x7b, 0x29, + 0xd8, 0x88, 0x7a, 0x7c, 0xfc, 0x5a, 0x49, 0xd7, 0x2d, 0x97, 0x9f, 0xc2, 0xb3, 0xc7, 0xd7, 0x2f, 0x7d, 0x70, 0x39, + 0x5a, 0xb5, 0xb9, 0xfb, 0xe5, 0x2e, 0xb2, 0xdc, 0x17, 0x0d, 0x2d, 0xd7, 0x33, 0xd4, 0x24, 0xcf, 0x46, 0x7b, 0x87, + 0x5a, 0xb0, 0x9c, 0x75, 0x13, 0x9e, 0x18, 0xec, 0xd8, 0xab, 0xc6, 0xe6, 0xa8, 0xcc, 0x25, 0xab, 0x41, 0x02, 0x7d, + 0x92, 0x67, 0x9a, 0xfe, 0x41, 0x86, 0xf9, 0xe8, 0x96, 0xe6, 0x80, 0x2b, 0x56, 0xd9, 0x4b, 0x06, 0xa9, 0xab, 0xf6, + 0x12, 0x57, 0xbe, 0xc2, 0x21, 0xd9, 0xe0, 0x93, 0x61, 0xaa, 0x3e, 0xbb, 0xe4, 0xc1, 0xff, 0xdb, 0xaa, 0x55, 0x7a, + 0x6e, 0x92, 0x1b, 0x8e, 0x7f, 0x9d, 0xb4, 0x7d, 0x4c, 0x0c, 0x12, 0xf0, 0xd4, 0x2e, 0x86, 0x6a, 0x54, 0x15, 0xb1, + 0x28, 0x73, 0x13, 0x73, 0xec, 0xde, 0xae, 0xa1, 0x83, 0x32, 0xf8, 0x75, 0xc3, 0x27, 0xe6, 0x0e, 0x6c, 0x05, 0x3a, + 0x3a, 0xd1, 0x5c, 0x86, 0x99, 0xb9, 0x0c, 0xd3, 0xae, 0xad, 0x02, 0xc3, 0xab, 0xb6, 0x4a, 0xa2, 0x5c, 0x8d, 0x7a, + 0xdc, 0xcc, 0x52, 0xb3, 0x17, 0x79, 0xf7, 0x9a, 0xf4, 0x24, 0xfe, 0x74, 0xe9, 0xc9, 0xeb, 0x61, 0x40, 0xe4, 0x97, + 0x2c, 0x0d, 0xd7, 0x28, 0x08, 0x4e, 0xad, 0x76, 0x20, 0xcd, 0x47, 0x80, 0xcc, 0x8f, 0xd3, 0xf0, 0x9d, 0x16, 0xe7, + 0x90, 0x8d, 0xd2, 0x38, 0xb1, 0xa5, 0x51, 0x0f, 0xc1, 0x9d, 0xf7, 0x8a, 0xc7, 0x10, 0xf8, 0xf0, 0x03, 0x6e, 0x06, + 0x15, 0xdd, 0x96, 0x98, 0x28, 0x6d, 0x1e, 0x75, 0xcb, 0x47, 0x0d, 0xa1, 0x92, 0x95, 0xe1, 0xc5, 0xd0, 0xde, 0x1d, + 0x81, 0x51, 0xe5, 0x04, 0x32, 0xc3, 0x62, 0xff, 0x60, 0x98, 0x2a, 0x41, 0xd1, 0x50, 0x0e, 0x97, 0x28, 0x07, 0xc4, + 0x24, 0x10, 0x18, 0x15, 0x83, 0x54, 0x57, 0xa6, 0x5e, 0x0c, 0x52, 0x7d, 0xab, 0x22, 0xf5, 0x59, 0x16, 0x56, 0x54, + 0xb7, 0x88, 0x8e, 0xe9, 0x50, 0xd2, 0xa5, 0xd9, 0xa9, 0xb9, 0x96, 0x5e, 0xa8, 0xe5, 0xf8, 0x5c, 0xa7, 0xc1, 0x28, + 0x9e, 0xba, 0x14, 0xfd, 0x56, 0xed, 0x67, 0xff, 0x2d, 0xa6, 0xd4, 0x88, 0x4d, 0xed, 0x2d, 0x62, 0x58, 0xb5, 0x1f, + 0xb2, 0x2a, 0x07, 0xed, 0x2e, 0x28, 0x1b, 0x2b, 0xe3, 0x3c, 0xdf, 0x08, 0x66, 0x0e, 0xda, 0xc6, 0xaa, 0xe9, 0x43, + 0x6f, 0xc4, 0xa8, 0xbd, 0x31, 0xd5, 0xb8, 0x27, 0xf0, 0xd3, 0x06, 0x4d, 0xf7, 0x22, 0xcf, 0x51, 0x8f, 0xbc, 0xfb, + 0x9f, 0x39, 0xb2, 0x33, 0xf9, 0x2c, 0x96, 0x49, 0xdd, 0x3e, 0x26, 0xc1, 0x42, 0xd5, 0x31, 0xba, 0x70, 0x23, 0x53, + 0xda, 0xcf, 0x9d, 0xe9, 0x47, 0x3c, 0x93, 0x87, 0xed, 0xd0, 0xa8, 0x2f, 0x0d, 0x6b, 0x49, 0x11, 0xf5, 0x05, 0xbd, + 0x35, 0xd5, 0xd1, 0x01, 0xf5, 0x3a, 0x02, 0xab, 0x2b, 0xda, 0xa0, 0x06, 0x60, 0x32, 0xae, 0x6d, 0x6d, 0x3e, 0x07, + 0x53, 0x5b, 0x55, 0xc1, 0x33, 0xba, 0x2b, 0x94, 0xee, 0x4d, 0xea, 0xba, 0x35, 0xc4, 0x16, 0x30, 0x20, 0x70, 0xa3, + 0xa7, 0xa6, 0x3f, 0x68, 0xa2, 0x02, 0xd0, 0xa0, 0x71, 0x3b, 0xd3, 0x39, 0x12, 0xfd, 0x4e, 0x6d, 0xda, 0x66, 0xaa, + 0x57, 0x95, 0x0f, 0xa0, 0xe2, 0xcf, 0xd2, 0xd9, 0x85, 0x19, 0xb1, 0x00, 0xc6, 0x3d, 0x70, 0xa6, 0x7a, 0xc7, 0x19, + 0x58, 0x4f, 0xe4, 0x79, 0x56, 0xf2, 0x44, 0x0a, 0x98, 0x11, 0x79, 0x75, 0x25, 0x05, 0x0c, 0x83, 0x1a, 0x00, 0xb4, + 0x68, 0x2e, 0xa3, 0x09, 0x7f, 0x52, 0xd3, 0xfb, 0xf2, 0xf0, 0x27, 0x3a, 0xd7, 0x37, 0xe3, 0x1a, 0x0c, 0x95, 0xd7, + 0x15, 0xdf, 0xc9, 0xf4, 0x0d, 0x7f, 0xea, 0x65, 0x5a, 0xca, 0x75, 0xb1, 0x93, 0xe5, 0xc9, 0x37, 0xfc, 0x99, 0xce, + 0x73, 0xf0, 0xb4, 0xa6, 0x69, 0x7c, 0xb7, 0x93, 0xe5, 0xef, 0xdf, 0x3c, 0xb5, 0x79, 0x9e, 0x8c, 0x6b, 0x7a, 0xc3, + 0xf9, 0x47, 0x97, 0x69, 0xa2, 0xab, 0x1a, 0x3f, 0xfd, 0xbb, 0xcd, 0xf5, 0xb4, 0xa6, 0x57, 0x52, 0x54, 0xcb, 0x9d, + 0xa2, 0x0e, 0xbe, 0x39, 0xf8, 0x3b, 0xff, 0xc6, 0x74, 0xef, 0xa0, 0xa6, 0x7f, 0xad, 0xe3, 0xa2, 0xe2, 0xc5, 0x4e, + 0x71, 0x7f, 0xfb, 0xfb, 0xdf, 0x9f, 0xda, 0x8c, 0x4f, 0x6b, 0x7a, 0xc7, 0xe3, 0x8e, 0xb6, 0x4f, 0x9e, 0x3d, 0xe5, + 0x7f, 0xab, 0x6b, 0xfa, 0x2b, 0xf3, 0x83, 0xa3, 0x1e, 0x67, 0x9e, 0x1e, 0x3e, 0x91, 0x4d, 0xd4, 0x80, 0xa1, 0x87, + 0x06, 0x90, 0x4b, 0xab, 0xa6, 0xb9, 0xc7, 0x2b, 0x17, 0xdc, 0xbe, 0xcf, 0xe2, 0x34, 0x5e, 0xc1, 0x41, 0xb0, 0x41, + 0xe3, 0xac, 0x02, 0x38, 0x55, 0xe0, 0x3d, 0xa3, 0x92, 0x66, 0xa5, 0xfc, 0x07, 0xe7, 0x1f, 0x61, 0xd0, 0x10, 0xd2, + 0x46, 0x45, 0x06, 0x3a, 0x59, 0xe9, 0xc8, 0x46, 0xe8, 0xbf, 0xd9, 0x8c, 0x83, 0xe3, 0xc3, 0xe8, 0xf5, 0xfb, 0x61, + 0xc1, 0x44, 0x58, 0x10, 0x42, 0xff, 0x0c, 0x0b, 0x70, 0x28, 0x29, 0x98, 0x97, 0xcf, 0xf8, 0x9e, 0x6b, 0xa3, 0xb0, + 0x10, 0x44, 0x77, 0x91, 0x7d, 0x40, 0xd5, 0xa3, 0xef, 0xd0, 0x0d, 0xf1, 0xb2, 0xc2, 0x82, 0xa1, 0x55, 0x0d, 0xcc, + 0x10, 0x14, 0xff, 0x86, 0x87, 0x12, 0x7c, 0xe2, 0x01, 0x3e, 0x7a, 0x4c, 0x66, 0x5c, 0x5d, 0x6b, 0x4f, 0x2e, 0xc2, + 0x82, 0x06, 0xba, 0xed, 0x10, 0x74, 0x20, 0xf2, 0x5f, 0x80, 0xa7, 0xc0, 0xc0, 0x87, 0x85, 0x5d, 0xca, 0x5d, 0x7f, + 0xf5, 0x5f, 0x0d, 0xeb, 0xe8, 0xc2, 0x8f, 0xfe, 0x6a, 0x5d, 0xd8, 0x33, 0x32, 0x95, 0x87, 0xe5, 0x70, 0x32, 0x1d, + 0x0c, 0xa4, 0x8b, 0xe3, 0x76, 0x9c, 0xcd, 0x7f, 0x9d, 0xcb, 0xc5, 0x02, 0x75, 0xdf, 0x38, 0xaf, 0x33, 0xfd, 0x37, + 0xd2, 0xce, 0x07, 0x6f, 0x8e, 0x7f, 0x3f, 0x3b, 0x3d, 0x7e, 0x05, 0xce, 0x07, 0x1f, 0x5e, 0x7e, 0xff, 0xf2, 0xbd, + 0x0a, 0xee, 0xae, 0xe6, 0xbc, 0xdf, 0x77, 0x52, 0x9f, 0x90, 0x0f, 0x2b, 0xb2, 0x1f, 0xc6, 0x8f, 0x0b, 0x65, 0xf4, + 0x40, 0x0e, 0x99, 0x85, 0x42, 0x86, 0x2a, 0x6a, 0xfb, 0xbb, 0x1c, 0x4e, 0x3c, 0x30, 0x8b, 0xbb, 0x86, 0x08, 0xd7, + 0x6f, 0xb9, 0x0d, 0xb2, 0x26, 0x8f, 0xbc, 0x7e, 0x70, 0x32, 0x95, 0x8e, 0x2d, 0x2c, 0x18, 0x94, 0x0d, 0x6d, 0x3a, + 0xce, 0xe6, 0xc5, 0xc2, 0xb6, 0xcb, 0x2d, 0x90, 0x51, 0x9a, 0x5d, 0x5c, 0x84, 0x0a, 0xba, 0xfa, 0x08, 0x34, 0x00, + 0xa6, 0x51, 0x85, 0x6b, 0x11, 0x9f, 0xf9, 0xe5, 0x47, 0x63, 0xaf, 0x79, 0xb7, 0xa8, 0x7b, 0x32, 0xcd, 0xaa, 0x1a, + 0x03, 0x3a, 0x98, 0x50, 0xee, 0x06, 0xdd, 0x04, 0x93, 0x51, 0x6d, 0xf9, 0x75, 0x5e, 0x2d, 0x4c, 0x73, 0xdc, 0x30, + 0x54, 0x5e, 0xc9, 0x6b, 0xd9, 0x40, 0x64, 0x20, 0x19, 0x86, 0x3d, 0x1a, 0xa3, 0x48, 0x7d, 0x6f, 0xd7, 0x3b, 0x7e, + 0x93, 0x4b, 0x88, 0xa6, 0x98, 0x81, 0x74, 0xfe, 0x58, 0x28, 0xe7, 0x72, 0xc9, 0xf8, 0x5c, 0x2c, 0x8e, 0xc0, 0xed, + 0x7c, 0x2e, 0x16, 0x11, 0x06, 0xe5, 0xcb, 0x20, 0x56, 0x09, 0xd8, 0xbd, 0x38, 0x08, 0xdf, 0x4e, 0x68, 0x03, 0xbb, + 0x81, 0x24, 0x1b, 0x94, 0x76, 0xa5, 0x21, 0xca, 0x9d, 0xf2, 0x68, 0x83, 0xc8, 0x43, 0xac, 0x9a, 0x57, 0x6d, 0x4f, + 0x36, 0x73, 0x31, 0xc1, 0x55, 0x16, 0x33, 0x39, 0x8d, 0x0f, 0x59, 0x31, 0x8d, 0xa1, 0x94, 0x38, 0x4d, 0xc3, 0x98, + 0x4e, 0xa8, 0x20, 0x24, 0x61, 0x7c, 0x1e, 0x2f, 0x68, 0x82, 0x52, 0x82, 0x10, 0x42, 0x7e, 0x8c, 0xd0, 0x36, 0x07, + 0x96, 0xbc, 0xdd, 0x7e, 0x9e, 0x7e, 0x6e, 0xc7, 0x70, 0x19, 0x15, 0xa1, 0x1b, 0x74, 0xd6, 0xf0, 0x6f, 0x44, 0x05, + 0x8d, 0xb1, 0x62, 0x08, 0x02, 0x5e, 0x60, 0x54, 0xc2, 0x82, 0xc4, 0xac, 0x82, 0x28, 0x02, 0xe5, 0x3c, 0x5e, 0xb0, + 0x82, 0x36, 0x6d, 0x4e, 0x63, 0x6d, 0x12, 0xd4, 0x73, 0x58, 0x6a, 0x7b, 0x52, 0xa9, 0x10, 0x7b, 0x7c, 0x26, 0xa2, + 0x6b, 0x6d, 0x68, 0x00, 0x28, 0x50, 0x4a, 0x2e, 0x7e, 0xf3, 0xe5, 0x1e, 0x6e, 0x0a, 0xfa, 0x9f, 0x6d, 0x4c, 0xb4, + 0xb3, 0x5c, 0x1d, 0x7a, 0xf3, 0x05, 0x8d, 0xf3, 0x1c, 0x42, 0xb1, 0x19, 0x04, 0x72, 0x91, 0x55, 0x10, 0xd1, 0xe2, + 0x2e, 0x30, 0x21, 0xe1, 0xa0, 0x4d, 0xbf, 0x42, 0x6a, 0x43, 0x4c, 0xae, 0x3c, 0x31, 0xb0, 0xdb, 0x2a, 0x41, 0xc0, + 0x91, 0x9e, 0x67, 0x9f, 0x9a, 0x18, 0x6b, 0x9a, 0x9a, 0x99, 0x78, 0x1b, 0x0a, 0xd1, 0xa0, 0x05, 0xd1, 0x0c, 0xde, + 0x3f, 0x57, 0x1c, 0xaf, 0x3a, 0xf0, 0x03, 0xde, 0xb9, 0x38, 0xf3, 0x6a, 0xe6, 0x11, 0x39, 0xf5, 0x51, 0x8e, 0xe8, + 0x97, 0x3c, 0xac, 0x46, 0x3a, 0x19, 0x63, 0x25, 0x71, 0xd0, 0xdb, 0x60, 0xc1, 0x9c, 0xd0, 0x15, 0x0f, 0x2d, 0x1f, + 0xff, 0x0a, 0x99, 0x8c, 0x92, 0x1a, 0x2b, 0xba, 0xd2, 0x62, 0xc4, 0x79, 0x0d, 0xb3, 0x34, 0x59, 0xd1, 0xc5, 0x42, + 0x93, 0x66, 0xa1, 0x4c, 0x03, 0x7c, 0x02, 0x2d, 0x46, 0xee, 0xa1, 0xa6, 0x0d, 0x84, 0x86, 0xdd, 0x21, 0xe0, 0x23, + 0xf7, 0xd0, 0xe1, 0xff, 0xe7, 0xd9, 0x05, 0x22, 0xed, 0xcd, 0x4d, 0x64, 0x3c, 0x52, 0x37, 0x70, 0x50, 0x8c, 0x8f, + 0x7d, 0x33, 0xf1, 0x0b, 0x67, 0xf4, 0x21, 0xa9, 0x7c, 0x87, 0x0f, 0x96, 0x3f, 0xde, 0xd4, 0xcc, 0xca, 0x08, 0xd6, + 0xc3, 0x76, 0x8b, 0x0b, 0xa2, 0xed, 0x02, 0x48, 0x3d, 0xe3, 0xd5, 0xc2, 0x37, 0x5e, 0x8d, 0xef, 0x31, 0x5e, 0x75, + 0x67, 0x6a, 0x98, 0x93, 0x0d, 0xea, 0xb3, 0x94, 0x3c, 0x3f, 0x47, 0x99, 0x60, 0xd3, 0xe5, 0xac, 0xa4, 0x2a, 0x95, + 0xd0, 0x5e, 0xec, 0x67, 0x8c, 0x6f, 0x09, 0xc6, 0x59, 0x71, 0x18, 0x09, 0x54, 0xa5, 0x92, 0x3a, 0xec, 0x15, 0xa0, + 0x1e, 0x83, 0xf7, 0x06, 0x43, 0xd4, 0xc8, 0xd8, 0x4d, 0x1b, 0x08, 0x0d, 0x8d, 0xf5, 0x68, 0xcf, 0x5a, 0x8f, 0x6e, + 0xb7, 0x95, 0xf1, 0xb7, 0x93, 0xeb, 0x22, 0x41, 0x54, 0x61, 0x35, 0x9a, 0x00, 0x6f, 0x9a, 0xd8, 0xdb, 0x92, 0x53, + 0x5a, 0x60, 0xf8, 0xec, 0x3f, 0xc3, 0xd2, 0xa9, 0x24, 0x4a, 0x32, 0x2b, 0xa3, 0x81, 0x3b, 0x07, 0x5f, 0xc4, 0x15, + 0xac, 0x01, 0x88, 0xe4, 0x88, 0x1e, 0xae, 0x7f, 0x86, 0xd2, 0x65, 0x96, 0x64, 0x26, 0x21, 0x33, 0x17, 0x69, 0x3b, + 0xeb, 0x60, 0xe2, 0x4c, 0x6a, 0xbd, 0xb1, 0x90, 0x43, 0x83, 0xfc, 0x00, 0xca, 0x10, 0x87, 0x4f, 0x3e, 0x98, 0x50, + 0xa9, 0x42, 0xa9, 0x36, 0xba, 0xd9, 0x0d, 0xbc, 0xf2, 0x21, 0xbb, 0xe2, 0x65, 0x15, 0x5f, 0xad, 0x8c, 0x25, 0x31, + 0x67, 0xf7, 0xb9, 0xed, 0x51, 0x61, 0x5e, 0xbd, 0x7d, 0xf9, 0xfd, 0x71, 0xe3, 0xd5, 0x2e, 0xe2, 0x68, 0x08, 0xb6, + 0x15, 0x63, 0x8c, 0xde, 0xe2, 0xd3, 0x60, 0xa2, 0x5c, 0x23, 0xd0, 0xbb, 0x14, 0xf4, 0xdb, 0x5f, 0xea, 0x09, 0x78, + 0xc5, 0xf5, 0xf2, 0x4b, 0x3e, 0x02, 0x96, 0xa8, 0xd0, 0xb3, 0xc2, 0xdc, 0xac, 0xcc, 0xee, 0xed, 0x56, 0x64, 0xa6, + 0x5d, 0x69, 0x64, 0x20, 0x5e, 0x6d, 0x87, 0xb1, 0x70, 0xe9, 0x9a, 0x6e, 0x07, 0xbb, 0x5a, 0x7a, 0x96, 0xc8, 0xdb, + 0x6d, 0x09, 0x1d, 0xb2, 0x03, 0xee, 0xbd, 0x8c, 0x6f, 0xe1, 0x65, 0xe9, 0x75, 0xb3, 0x19, 0x3c, 0x01, 0xcc, 0x84, + 0x0b, 0x67, 0x59, 0x1c, 0x33, 0x9e, 0x84, 0x2a, 0x36, 0x57, 0x43, 0xe4, 0xad, 0x08, 0xad, 0xd9, 0x5f, 0xa1, 0x18, + 0x81, 0xdd, 0xc9, 0xe9, 0xc7, 0x6c, 0x35, 0x5b, 0x02, 0x6a, 0xfe, 0x55, 0x26, 0x80, 0xe6, 0xda, 0xb5, 0x60, 0x9b, + 0x42, 0x9b, 0xeb, 0xfa, 0x79, 0xbc, 0x8a, 0x13, 0x50, 0xdd, 0x80, 0xb7, 0xc8, 0x9d, 0x16, 0x5d, 0x19, 0x74, 0x51, + 0xfa, 0x40, 0x39, 0x96, 0x14, 0x3a, 0xfa, 0xde, 0x13, 0xea, 0xdc, 0x33, 0x80, 0x4b, 0x1a, 0x35, 0x4f, 0xb5, 0x94, + 0xb1, 0x00, 0x58, 0xe8, 0x60, 0xa6, 0xc8, 0x56, 0x74, 0x6b, 0x30, 0x29, 0xe0, 0xad, 0x01, 0xfe, 0x10, 0x59, 0xa5, + 0xee, 0x8a, 0x65, 0x58, 0x7a, 0xf6, 0xd7, 0xfd, 0x7e, 0xec, 0xd9, 0x5f, 0x5f, 0x68, 0x5a, 0x17, 0xb7, 0x1b, 0x40, + 0x6a, 0x0c, 0x20, 0x72, 0xac, 0x07, 0xc2, 0x44, 0x14, 0x6b, 0xfa, 0xfe, 0x1d, 0x9b, 0x2c, 0x0a, 0x84, 0x7e, 0xa7, + 0x5e, 0x4f, 0x4a, 0x02, 0x3a, 0xb5, 0x8a, 0x1d, 0x0d, 0xb4, 0xd9, 0x07, 0x04, 0x44, 0xf5, 0x33, 0xb2, 0xf9, 0x42, + 0x39, 0x17, 0xab, 0xf0, 0xe1, 0x63, 0x0a, 0x01, 0x85, 0x3b, 0x6a, 0x74, 0xde, 0x86, 0x48, 0xa0, 0xac, 0x50, 0xc4, + 0x9a, 0x17, 0x6b, 0x49, 0xc8, 0x7c, 0xbc, 0x40, 0xc1, 0x95, 0x03, 0x76, 0xe5, 0x6c, 0x32, 0x2c, 0x23, 0xce, 0xc2, + 0xfb, 0xbf, 0x99, 0x2c, 0x08, 0x6a, 0xae, 0xfc, 0x40, 0x8e, 0x3b, 0x99, 0x1a, 0x7b, 0xaa, 0x51, 0x83, 0x60, 0x32, + 0x82, 0xc0, 0x70, 0xc3, 0x2f, 0xf8, 0xf8, 0x60, 0x41, 0x40, 0x45, 0x66, 0xcd, 0x42, 0xcc, 0x8b, 0xc3, 0x27, 0x80, + 0x1a, 0x33, 0x3a, 0x78, 0x06, 0xa0, 0xb0, 0x10, 0x10, 0x7d, 0x0c, 0x32, 0x5a, 0x01, 0xbf, 0x85, 0xfa, 0xdd, 0x3a, + 0xf1, 0x7d, 0xe8, 0x57, 0x41, 0x2f, 0x62, 0x60, 0x38, 0xa2, 0xc9, 0x7e, 0xc8, 0x07, 0x93, 0x01, 0x68, 0x4b, 0xbc, + 0xdd, 0xd7, 0xd2, 0x8a, 0x9b, 0xd3, 0xa5, 0xd3, 0xfd, 0x93, 0x36, 0x41, 0x12, 0xa9, 0x64, 0xa5, 0x22, 0x06, 0x10, + 0xca, 0x52, 0x6d, 0x93, 0x25, 0x58, 0x56, 0x98, 0x25, 0xcd, 0x0d, 0x4a, 0xe2, 0xee, 0x66, 0xe0, 0x18, 0x35, 0xeb, + 0x38, 0x2c, 0x5b, 0x6e, 0xd4, 0x00, 0x9f, 0x93, 0xb0, 0xc2, 0xde, 0x70, 0x66, 0xd2, 0x3b, 0xd3, 0xe1, 0xea, 0x98, + 0xb3, 0x37, 0x1c, 0xc1, 0x38, 0x12, 0xbc, 0xf1, 0xd0, 0x25, 0xd3, 0x50, 0x91, 0x29, 0xe3, 0x60, 0xda, 0x03, 0xdc, + 0x7b, 0x0e, 0xc6, 0x61, 0x6c, 0x50, 0x59, 0x52, 0x9f, 0x7a, 0x77, 0x21, 0x10, 0xa4, 0xb5, 0x5e, 0xe6, 0x33, 0x3c, + 0x3d, 0x23, 0x94, 0xfd, 0x21, 0x87, 0x2f, 0xc0, 0x8e, 0x82, 0x1c, 0x4d, 0xf8, 0xb3, 0xc7, 0xbb, 0x81, 0xaa, 0xf8, + 0x20, 0xd8, 0x8b, 0x45, 0xba, 0x17, 0x0c, 0x04, 0xfc, 0x2a, 0xf8, 0x5e, 0x25, 0xe5, 0xde, 0x45, 0x5c, 0xec, 0xc5, + 0xab, 0xb8, 0xa8, 0xf6, 0x6e, 0xb2, 0x6a, 0xb9, 0x67, 0x3a, 0x04, 0xd0, 0xbc, 0xc1, 0x20, 0x1e, 0x04, 0x7b, 0xc1, + 0xa0, 0x30, 0x53, 0xbb, 0x62, 0x65, 0xe3, 0x38, 0x33, 0x21, 0xca, 0x82, 0x66, 0x80, 0xb0, 0xc6, 0x69, 0x00, 0x7c, + 0xea, 0x9a, 0xa5, 0xf4, 0x02, 0xc3, 0x0d, 0x88, 0xe9, 0x1a, 0xfa, 0x00, 0x3c, 0xf2, 0x9a, 0xc6, 0xb0, 0x04, 0x2e, + 0x06, 0x03, 0xb2, 0x86, 0xc8, 0x05, 0x6b, 0x6a, 0x83, 0x38, 0x84, 0x6b, 0x65, 0xa7, 0xbd, 0x0b, 0xcc, 0xb4, 0xdd, + 0x02, 0xa2, 0xf2, 0x84, 0xf4, 0xfb, 0xf6, 0x1b, 0xea, 0x5f, 0xb0, 0x97, 0x60, 0x7f, 0x55, 0x54, 0x61, 0x22, 0x95, + 0xe6, 0xfb, 0x92, 0x1d, 0x0d, 0x54, 0xc4, 0xe1, 0x1d, 0x47, 0x8a, 0x36, 0x2a, 0x97, 0x65, 0x4f, 0x96, 0x0d, 0x5f, + 0x89, 0x2b, 0xee, 0xfc, 0xb8, 0x2a, 0x29, 0xf3, 0x2a, 0x5b, 0x29, 0xf6, 0x6f, 0xc6, 0x35, 0xf7, 0x07, 0xd6, 0x9f, + 0xcd, 0x57, 0x70, 0x6d, 0xf5, 0xde, 0x35, 0xb9, 0x46, 0xe4, 0x2c, 0xa1, 0x5c, 0x52, 0xdb, 0x3c, 0xbc, 0xa5, 0xef, + 0xf3, 0xab, 0x6f, 0x33, 0x9d, 0xc6, 0x67, 0x15, 0x16, 0x2e, 0x44, 0x2b, 0x82, 0x43, 0x43, 0x2e, 0x9a, 0x47, 0x80, + 0xb9, 0xf6, 0xd9, 0x0a, 0x0a, 0x52, 0x9f, 0x55, 0xe8, 0xdd, 0x0a, 0x09, 0xaf, 0x34, 0xbb, 0xf4, 0x30, 0x90, 0x32, + 0x6e, 0x0f, 0x2d, 0x61, 0xd2, 0xf2, 0x22, 0xbc, 0xf7, 0x9a, 0x9b, 0xdc, 0x8b, 0x10, 0xa3, 0x17, 0x79, 0x76, 0x02, + 0xc6, 0xba, 0x4b, 0x76, 0x36, 0x3c, 0xf1, 0x1b, 0x9e, 0xb3, 0x16, 0x8d, 0xa6, 0x4b, 0x96, 0xf4, 0xfb, 0x31, 0x98, + 0x78, 0xa7, 0x2c, 0x87, 0x5f, 0xf9, 0x82, 0xae, 0x19, 0x60, 0x8a, 0xd1, 0x0b, 0x48, 0x48, 0x11, 0x89, 0x64, 0xad, + 0x4e, 0x92, 0xcf, 0x74, 0x17, 0x80, 0xd1, 0x2f, 0x66, 0x69, 0xb4, 0xbc, 0xd7, 0xcc, 0x02, 0xc9, 0x33, 0xf4, 0x5d, + 0x07, 0xdb, 0x1b, 0xfb, 0x20, 0xe5, 0xfc, 0x50, 0x4c, 0x07, 0x03, 0x4e, 0x34, 0xdc, 0x78, 0xa9, 0xc4, 0xb5, 0xba, + 0xc5, 0x1d, 0xc3, 0x58, 0xea, 0xdb, 0x22, 0x06, 0x07, 0xec, 0xa2, 0x95, 0xdd, 0x3e, 0xc0, 0xbe, 0x72, 0xbc, 0x4b, + 0x95, 0xdd, 0xe9, 0x31, 0xd3, 0x5c, 0xb6, 0x9a, 0x74, 0x52, 0x71, 0x3f, 0x91, 0x6f, 0x72, 0x07, 0x5d, 0x2e, 0xc7, + 0x9a, 0xb7, 0x1c, 0x80, 0x8a, 0x7e, 0xa4, 0xa8, 0xee, 0x17, 0x38, 0xc2, 0x3c, 0x58, 0xb7, 0xf9, 0x64, 0xdf, 0x14, + 0x38, 0x44, 0x9e, 0xb4, 0xd1, 0x14, 0xd0, 0xbd, 0x8b, 0xc7, 0x5d, 0xfd, 0xb6, 0x74, 0x17, 0x28, 0xd1, 0x4e, 0xc5, + 0x0d, 0x3f, 0x26, 0xea, 0x74, 0xa6, 0x0d, 0xa1, 0x7f, 0x65, 0xc4, 0xfd, 0xa5, 0x71, 0x15, 0x6f, 0x7a, 0x97, 0xcf, + 0x38, 0xd4, 0xd9, 0x0d, 0xa1, 0x00, 0x5c, 0xb5, 0xa7, 0x53, 0x37, 0x86, 0xf4, 0x4a, 0x89, 0x6e, 0x83, 0x83, 0xdd, + 0xeb, 0x33, 0x8e, 0xa2, 0x1f, 0xa3, 0x46, 0xbe, 0x89, 0xc4, 0x63, 0x39, 0x88, 0x1f, 0x17, 0x74, 0x19, 0x89, 0xc7, + 0xc5, 0x20, 0x7e, 0x2c, 0xeb, 0x7a, 0xf7, 0x5c, 0xb9, 0xbf, 0x8f, 0xc8, 0xb3, 0xee, 0xec, 0xa5, 0x12, 0x36, 0x06, + 0x9e, 0x5d, 0x0b, 0x08, 0xa7, 0xe0, 0x89, 0x6c, 0x2d, 0x7d, 0xe8, 0xdc, 0xee, 0x63, 0xcb, 0x24, 0x41, 0xd0, 0xf3, + 0x36, 0x9b, 0x44, 0xb1, 0xb3, 0xcd, 0xa3, 0x0f, 0xa7, 0x40, 0x42, 0xb7, 0xdb, 0x66, 0x5d, 0xad, 0x01, 0xc5, 0x34, + 0x1c, 0xf3, 0xfd, 0x62, 0x74, 0xe3, 0xbb, 0xeb, 0xef, 0x17, 0xa3, 0x25, 0x19, 0x4e, 0xcc, 0xe4, 0xc7, 0x47, 0xe3, + 0x59, 0x1c, 0x4d, 0xea, 0x8e, 0xd3, 0x42, 0xe3, 0x9f, 0x7a, 0xb7, 0x50, 0x04, 0x4e, 0xc5, 0x08, 0x8e, 0x9c, 0x0a, + 0xe5, 0xa4, 0xd4, 0xc0, 0xf0, 0xdf, 0xab, 0x76, 0xb4, 0x69, 0x6f, 0xe2, 0x2a, 0x59, 0x66, 0xe2, 0x52, 0x87, 0x0f, + 0xd7, 0xd1, 0xc5, 0x6d, 0x40, 0x3b, 0xef, 0x32, 0xed, 0xf8, 0x75, 0xd2, 0xa0, 0x27, 0xae, 0x66, 0x06, 0xdc, 0xba, + 0x1f, 0xa1, 0x19, 0x02, 0xa3, 0xe5, 0xf9, 0x3b, 0xc4, 0xdc, 0xfe, 0x4d, 0xd9, 0xfc, 0x2a, 0xda, 0xe7, 0xc8, 0x48, + 0xd9, 0x26, 0x23, 0x15, 0x18, 0x61, 0x4a, 0x91, 0xc4, 0x55, 0x08, 0x81, 0xec, 0xbf, 0xa4, 0xb8, 0x16, 0x4b, 0xef, + 0x35, 0x08, 0x13, 0x6c, 0x17, 0xb4, 0x5f, 0xdd, 0xce, 0x6d, 0xa5, 0xc5, 0x1e, 0xa9, 0xef, 0x73, 0x67, 0xbb, 0xa2, + 0xc9, 0xdf, 0x97, 0x0d, 0x68, 0x03, 0x88, 0xf2, 0xbe, 0x3e, 0x2a, 0x81, 0x93, 0x11, 0x37, 0x94, 0x18, 0xbd, 0xa0, + 0xab, 0x13, 0xb9, 0x67, 0xa7, 0xe6, 0x4d, 0xc5, 0x4c, 0xc5, 0x95, 0x6f, 0xf6, 0xcc, 0x7f, 0x30, 0x14, 0x54, 0x80, + 0x81, 0xb7, 0x39, 0xe3, 0xd1, 0x81, 0xee, 0xc6, 0xe8, 0xb4, 0x60, 0xb3, 0xa0, 0x2e, 0xeb, 0xa6, 0x8d, 0x07, 0x8d, + 0x38, 0x28, 0x8a, 0x55, 0xa1, 0x46, 0xc2, 0x13, 0x81, 0x80, 0x29, 0xbb, 0xe2, 0x91, 0x11, 0xd4, 0xf4, 0x26, 0x14, + 0x36, 0x14, 0xfc, 0x55, 0xa2, 0x9a, 0xde, 0x84, 0x36, 0x99, 0x38, 0xcd, 0x20, 0x82, 0x19, 0xb1, 0xdd, 0x6f, 0x01, + 0x6d, 0x6e, 0xcd, 0x68, 0x53, 0xd7, 0x56, 0x5b, 0x85, 0x5c, 0x52, 0xa4, 0x2c, 0xff, 0x9d, 0x9a, 0x0a, 0x4a, 0x6a, + 0xb9, 0xe8, 0x4d, 0x9a, 0x2e, 0x7a, 0x3c, 0x33, 0x92, 0x40, 0xe5, 0x96, 0x3b, 0x46, 0x7f, 0x08, 0x0b, 0x3c, 0x62, + 0xe2, 0xc4, 0x82, 0xb9, 0xd5, 0x11, 0xcb, 0xe6, 0x62, 0x31, 0x5a, 0x49, 0x08, 0x1b, 0x7c, 0xc8, 0xb2, 0x79, 0xa9, + 0x1f, 0x42, 0x5f, 0x58, 0x7a, 0x02, 0x76, 0xb1, 0xc1, 0x4a, 0x96, 0x01, 0xf8, 0x5e, 0xd0, 0xcd, 0x4a, 0x96, 0x91, + 0x54, 0xdd, 0x8f, 0x6b, 0x2c, 0x41, 0xa5, 0x15, 0x2a, 0x2d, 0xa9, 0xb1, 0x20, 0xf0, 0x55, 0xd5, 0xe5, 0x43, 0xb2, + 0xab, 0x40, 0x3d, 0x75, 0xd4, 0x80, 0x53, 0xa0, 0xaa, 0xc0, 0x82, 0x24, 0xa8, 0x0c, 0x5d, 0x15, 0x98, 0x56, 0x60, + 0x9a, 0xa9, 0xc2, 0x45, 0x99, 0x1d, 0x4a, 0xb3, 0x5e, 0xf2, 0x59, 0x3c, 0x08, 0x93, 0x61, 0x4c, 0x1e, 0x23, 0xd4, + 0xfe, 0x7e, 0x1e, 0xc5, 0x5a, 0x2e, 0xb9, 0x72, 0x7e, 0xf1, 0x37, 0x9f, 0xb1, 0xd7, 0x3d, 0xc3, 0x60, 0x01, 0xce, + 0xd2, 0xf6, 0x2a, 0x13, 0xef, 0x64, 0x2b, 0x38, 0x0e, 0x66, 0x51, 0x0e, 0xab, 0x9e, 0x1c, 0xd1, 0x5c, 0xe4, 0xda, + 0xbb, 0x08, 0x91, 0x83, 0xcc, 0x1e, 0x03, 0xec, 0x46, 0xf8, 0x3a, 0xb4, 0x36, 0xb7, 0xba, 0x42, 0xfc, 0x8d, 0x12, + 0x89, 0x9f, 0xa5, 0xfc, 0xb8, 0x5e, 0xa9, 0x5c, 0x95, 0xc1, 0x63, 0xd5, 0xcd, 0xe0, 0x99, 0xf6, 0x3d, 0xd6, 0xfe, + 0xad, 0xed, 0xe6, 0x78, 0xef, 0xc1, 0x83, 0xd6, 0xff, 0xd6, 0x93, 0x10, 0xda, 0x2b, 0x27, 0xa9, 0x3b, 0x6a, 0xf4, + 0xcc, 0x64, 0x8d, 0xa8, 0x84, 0xa9, 0xdd, 0xa9, 0x1c, 0x03, 0x35, 0x1d, 0xc0, 0xb5, 0x44, 0x4d, 0xd0, 0x93, 0x82, + 0x8d, 0xe1, 0x88, 0xb3, 0x38, 0x68, 0x87, 0x31, 0x8a, 0x97, 0x73, 0x25, 0x5e, 0xce, 0x8f, 0x18, 0x07, 0x68, 0x2d, + 0x40, 0xaa, 0xd7, 0xb0, 0x9f, 0xb9, 0x82, 0x05, 0x36, 0x77, 0xbe, 0x03, 0x0b, 0x64, 0x88, 0x93, 0xcd, 0x71, 0xb2, + 0xc7, 0xb5, 0x9e, 0x7b, 0x81, 0x8f, 0x93, 0x7a, 0xe1, 0xd5, 0x55, 0xb6, 0xeb, 0x5a, 0xb2, 0x72, 0x5e, 0x0c, 0x26, + 0x10, 0x94, 0xa5, 0x9c, 0x17, 0xc3, 0xc9, 0x82, 0xe6, 0xf0, 0x63, 0xd1, 0x40, 0x87, 0x58, 0x0e, 0x12, 0xb8, 0x74, + 0xf6, 0x18, 0xf0, 0x86, 0x52, 0x8b, 0xbb, 0xb1, 0x8e, 0x1c, 0xeb, 0x28, 0xf6, 0xc3, 0x18, 0x70, 0x65, 0x9d, 0xc0, + 0xfb, 0xfe, 0xeb, 0x63, 0x13, 0x90, 0x55, 0xbb, 0xc2, 0xab, 0x51, 0xee, 0xba, 0xd2, 0xe8, 0x4b, 0x4a, 0x4f, 0x78, + 0xc1, 0x53, 0xc9, 0x76, 0xdb, 0x33, 0x70, 0xb6, 0xc4, 0x43, 0xe2, 0x1d, 0x23, 0x7a, 0x31, 0x6d, 0x64, 0xe6, 0x04, + 0xce, 0x6c, 0x77, 0xd9, 0xc6, 0xfc, 0xd8, 0x01, 0x0e, 0x16, 0x41, 0x48, 0xdc, 0x10, 0x86, 0x89, 0x1d, 0x95, 0x43, + 0x2d, 0x84, 0xeb, 0x5a, 0x78, 0x1d, 0xa7, 0x65, 0x0c, 0x2e, 0xd2, 0xda, 0x36, 0xf1, 0x1e, 0xba, 0xee, 0xf9, 0x31, + 0xb7, 0x3a, 0x46, 0x5b, 0x48, 0xbf, 0x1d, 0x9d, 0xde, 0x73, 0x18, 0x80, 0xa6, 0x07, 0xb3, 0xaa, 0x7d, 0x26, 0x71, + 0x73, 0xda, 0x09, 0x42, 0x22, 0x10, 0x45, 0xe9, 0x8c, 0x30, 0xfd, 0x3b, 0xcd, 0x65, 0x15, 0xad, 0x1e, 0xe4, 0x99, + 0x43, 0x9e, 0x85, 0xde, 0xf6, 0xa0, 0x55, 0x73, 0x37, 0x18, 0x27, 0x6e, 0xb7, 0x77, 0xfe, 0xdf, 0xb2, 0xae, 0xad, + 0xd6, 0x88, 0xc7, 0xed, 0xea, 0x07, 0x8d, 0xbd, 0xda, 0x53, 0x31, 0x60, 0x56, 0xd2, 0x3b, 0xa3, 0x4a, 0x5e, 0x64, + 0xbc, 0xc4, 0x93, 0x6a, 0xd5, 0xf0, 0xf1, 0xbe, 0xc9, 0x46, 0xe6, 0x81, 0x4c, 0x01, 0xf1, 0xfc, 0x26, 0x35, 0xea, + 0xe3, 0x14, 0x25, 0xe0, 0xef, 0x74, 0x7c, 0x23, 0xfa, 0xd1, 0xbe, 0xb8, 0xe4, 0xd5, 0xc9, 0x8d, 0x30, 0x2f, 0x5e, + 0x58, 0x9d, 0x3f, 0x7d, 0x53, 0xf8, 0xd0, 0xe1, 0xa8, 0xbd, 0x83, 0x22, 0x4b, 0x26, 0x8e, 0x26, 0x46, 0xd6, 0x26, + 0x66, 0x1f, 0x15, 0x5c, 0x4c, 0x54, 0xa1, 0x67, 0x9d, 0x3d, 0x61, 0x0a, 0xd0, 0x37, 0x8e, 0x51, 0xc9, 0x18, 0x16, + 0x0c, 0xd4, 0x69, 0x4a, 0x88, 0x1e, 0x8a, 0x19, 0xc6, 0x2b, 0x06, 0x50, 0x98, 0x42, 0x81, 0x28, 0x3a, 0xfb, 0x70, + 0xa0, 0x09, 0xfd, 0xfe, 0x4d, 0xaa, 0x33, 0xd0, 0xb2, 0x9e, 0x4a, 0x10, 0xd5, 0x41, 0xb4, 0x55, 0x5e, 0x84, 0x3f, + 0x2e, 0x69, 0x99, 0xd1, 0xa5, 0xa0, 0xa9, 0xa0, 0x49, 0x46, 0x2f, 0xb8, 0x12, 0x15, 0x5f, 0x08, 0xa6, 0x68, 0xbb, + 0x21, 0xec, 0xff, 0x6a, 0xd0, 0xf5, 0x56, 0xac, 0x35, 0xb4, 0x3b, 0x41, 0x46, 0x68, 0xbe, 0xd0, 0x41, 0xc8, 0x50, + 0x39, 0x09, 0x5d, 0xab, 0x34, 0x5e, 0x81, 0x4b, 0xa6, 0xd9, 0x68, 0x19, 0x97, 0x61, 0x60, 0xbf, 0x0a, 0x2c, 0x26, + 0x07, 0x26, 0x9d, 0xae, 0xcf, 0x9f, 0xcb, 0xab, 0x95, 0x14, 0x5c, 0x54, 0x0a, 0xa2, 0xdf, 0xe0, 0xbe, 0x9b, 0xb8, + 0xea, 0xac, 0x59, 0x2b, 0x7d, 0xe8, 0x5b, 0x9f, 0xb5, 0x71, 0x5f, 0x18, 0x1c, 0x83, 0x9d, 0x8f, 0x88, 0x81, 0x34, + 0xa8, 0x74, 0x8b, 0x43, 0x13, 0xa0, 0x4b, 0x87, 0x14, 0xb2, 0x64, 0x2a, 0x53, 0x25, 0xa8, 0xf8, 0xc6, 0xef, 0xa5, + 0xac, 0x46, 0x7f, 0xad, 0x79, 0x71, 0x77, 0xca, 0x73, 0x8e, 0x63, 0x14, 0x24, 0xb1, 0xb8, 0x8e, 0xcb, 0x80, 0xf8, + 0x96, 0x57, 0xc1, 0x41, 0x6a, 0xc2, 0xc6, 0xec, 0x54, 0x8d, 0x5a, 0x2f, 0x89, 0xbe, 0x32, 0xca, 0x37, 0x06, 0x43, + 0x13, 0x51, 0x05, 0x7d, 0xaf, 0xd5, 0x3d, 0xad, 0x6e, 0x58, 0x40, 0xfc, 0xb9, 0xd2, 0x0b, 0xb5, 0x5e, 0x37, 0x63, + 0x6e, 0x98, 0x08, 0x41, 0xa3, 0x27, 0xf5, 0xa2, 0xf6, 0xdc, 0xd2, 0x54, 0x64, 0xdc, 0x68, 0x93, 0xf3, 0x4b, 0x90, + 0xf1, 0x39, 0x73, 0xa1, 0x49, 0x5d, 0x53, 0x05, 0x55, 0x18, 0x6d, 0x6e, 0x1b, 0xe9, 0xf4, 0x0e, 0xdc, 0xd9, 0x8c, + 0xd9, 0x91, 0x76, 0x69, 0xac, 0x69, 0xc1, 0xcb, 0x95, 0x14, 0x25, 0x84, 0x71, 0xee, 0x8d, 0xe9, 0x55, 0x9c, 0x89, + 0x2a, 0xce, 0xc4, 0x71, 0xb9, 0xe2, 0x49, 0xf5, 0x1e, 0x6e, 0x71, 0xca, 0xea, 0xa6, 0x2e, 0xe1, 0x4a, 0x97, 0xec, + 0x61, 0x30, 0x35, 0x15, 0xf7, 0xd8, 0x19, 0x5c, 0x54, 0x7f, 0x44, 0x4b, 0x89, 0xb1, 0x50, 0x75, 0xf1, 0xf1, 0x79, + 0x29, 0xf3, 0x75, 0x05, 0xda, 0xdd, 0x8b, 0x2a, 0x3a, 0x78, 0xba, 0xba, 0x9d, 0xaa, 0x1b, 0x4c, 0xf4, 0xf4, 0x60, + 0x75, 0xdb, 0xcb, 0xae, 0x56, 0xb2, 0xa8, 0x62, 0x51, 0x4d, 0x15, 0x22, 0x59, 0x12, 0xe7, 0x49, 0x38, 0x19, 0x8f, + 0xbf, 0xda, 0x1b, 0xee, 0x41, 0x06, 0x32, 0xfd, 0x34, 0x54, 0x2e, 0x47, 0xc3, 0xc9, 0x78, 0x3c, 0x95, 0xea, 0x6e, + 0x17, 0x8d, 0x26, 0x35, 0xd6, 0x33, 0x4c, 0xf4, 0xcc, 0x8c, 0xf8, 0xed, 0x2a, 0x16, 0x29, 0xc4, 0xaf, 0xd3, 0xc5, + 0x1f, 0x3c, 0x1d, 0x37, 0xca, 0xb7, 0x9f, 0x3e, 0xab, 0xff, 0xa8, 0x4d, 0x58, 0x6b, 0xd3, 0xee, 0xe7, 0x7f, 0x1c, + 0xaa, 0xf9, 0x3e, 0x3a, 0xdc, 0xd7, 0x3f, 0xfe, 0xa8, 0xeb, 0xe9, 0x9b, 0x22, 0x9c, 0xff, 0x33, 0x54, 0xf3, 0x79, + 0x5c, 0x14, 0xf1, 0x5d, 0x0d, 0x91, 0x3c, 0x85, 0xf3, 0x26, 0xa1, 0xde, 0x36, 0xa0, 0x07, 0x64, 0x7a, 0x21, 0x18, + 0x7c, 0xf3, 0xbe, 0x0a, 0x03, 0x5e, 0xae, 0x86, 0x5c, 0x54, 0x59, 0x75, 0x37, 0xc4, 0x3c, 0x01, 0x7e, 0x6a, 0x78, + 0xb3, 0xe7, 0x85, 0x21, 0x36, 0x17, 0x05, 0xe7, 0x9f, 0x78, 0xa8, 0x8c, 0xa3, 0xc7, 0x68, 0x1c, 0x3d, 0xa6, 0x6a, + 0x30, 0x26, 0xdf, 0x50, 0xdd, 0x99, 0xc9, 0x37, 0x60, 0x82, 0x94, 0xb5, 0xbf, 0x51, 0xc6, 0x89, 0xd1, 0x98, 0x5e, + 0xbf, 0xca, 0xb3, 0x15, 0x30, 0xc1, 0x4b, 0xfd, 0xa3, 0x26, 0xf4, 0x3d, 0x6f, 0x67, 0x1f, 0x8d, 0x46, 0xcf, 0x0b, + 0x3a, 0x1a, 0x8d, 0x3e, 0x66, 0x35, 0xa1, 0x2b, 0xd1, 0xf1, 0xfe, 0x3d, 0xa7, 0xe7, 0x32, 0xbd, 0x8b, 0x82, 0x80, + 0x2e, 0xb3, 0x34, 0xe5, 0x42, 0x95, 0x75, 0x9a, 0xb6, 0xf3, 0xaa, 0x16, 0x22, 0xf0, 0x8f, 0x6e, 0x23, 0x42, 0x10, + 0x11, 0x7a, 0xb2, 0xd3, 0xb3, 0xd1, 0x68, 0x74, 0x9a, 0x9a, 0x6a, 0x1d, 0x43, 0xfe, 0x06, 0xcd, 0x07, 0x9c, 0x5d, + 0x3e, 0x58, 0xdf, 0x98, 0x68, 0x27, 0xfb, 0xff, 0x3d, 0x9c, 0xcd, 0xc7, 0xc3, 0x6f, 0x47, 0x8b, 0xc7, 0xfb, 0x34, + 0x08, 0x7c, 0xd0, 0xea, 0x50, 0x5b, 0x73, 0x4c, 0xcb, 0xc3, 0xf1, 0x94, 0x94, 0x03, 0xf6, 0xd4, 0xfa, 0xd2, 0x7c, + 0xf5, 0x14, 0x90, 0x48, 0x51, 0x84, 0x1a, 0x38, 0xe9, 0x1f, 0x5e, 0x45, 0x5e, 0x0b, 0xc0, 0x47, 0xb3, 0x91, 0x0c, + 0x8c, 0x16, 0x70, 0x1c, 0x41, 0x79, 0xb5, 0x35, 0x8d, 0xe8, 0x31, 0x96, 0x99, 0xa8, 0xa0, 0xe3, 0x69, 0x79, 0x93, + 0x55, 0xc9, 0x12, 0x03, 0x1b, 0xc5, 0x25, 0x0f, 0xbe, 0x0a, 0xa2, 0x92, 0x1d, 0x3c, 0x9b, 0x2a, 0x78, 0x5f, 0x4c, + 0x4a, 0xf9, 0x25, 0x24, 0x7e, 0x3b, 0x46, 0x08, 0x54, 0xa2, 0x3d, 0x16, 0xb1, 0xc6, 0x57, 0xb9, 0x8c, 0xc1, 0x83, + 0xb3, 0xd4, 0x3c, 0x8b, 0x3d, 0x09, 0xac, 0xfd, 0x45, 0xab, 0x39, 0x12, 0x9a, 0x13, 0x4a, 0x26, 0xf7, 0x4b, 0x2a, + 0xbf, 0x9a, 0xa0, 0x57, 0x10, 0xb8, 0x55, 0x47, 0x70, 0xdc, 0x59, 0xcb, 0x06, 0xbd, 0x7c, 0x52, 0xb6, 0x3f, 0xff, + 0xdf, 0x25, 0x5d, 0x0c, 0xf6, 0xdd, 0xd0, 0x9c, 0x68, 0xf7, 0xd5, 0x0a, 0x19, 0xa5, 0x2a, 0x7c, 0x9e, 0x12, 0x6b, + 0x7c, 0xca, 0xd9, 0xd1, 0xc6, 0x74, 0x67, 0x54, 0x15, 0xd9, 0x55, 0x48, 0x74, 0xaf, 0x1c, 0x28, 0x66, 0x10, 0x65, + 0x23, 0x5c, 0x3f, 0x60, 0x2d, 0xe2, 0x75, 0xf2, 0x9a, 0x17, 0x55, 0x96, 0xa8, 0xf7, 0xd7, 0x8d, 0xf7, 0x40, 0x0d, + 0x54, 0x83, 0xde, 0x15, 0x0c, 0xe6, 0xf9, 0xa4, 0x00, 0xd0, 0xce, 0x92, 0x17, 0xd7, 0xdc, 0xa7, 0x1b, 0x41, 0x50, + 0xbb, 0x66, 0x5e, 0x36, 0x82, 0x4d, 0xc0, 0x57, 0xef, 0x0a, 0xc0, 0xdc, 0x08, 0x41, 0x6a, 0x0a, 0xa1, 0x70, 0xe0, + 0x02, 0x5f, 0x55, 0x45, 0x76, 0xbe, 0xae, 0x38, 0x06, 0xfb, 0xf0, 0xe2, 0x26, 0x2a, 0x27, 0x3c, 0x1e, 0x06, 0xf8, + 0x23, 0xa0, 0x2a, 0xe0, 0x86, 0xf1, 0xb0, 0x83, 0x17, 0xea, 0x97, 0x7b, 0xa3, 0xf6, 0x08, 0x7b, 0x93, 0x86, 0x10, + 0x5c, 0x07, 0x1f, 0x02, 0x58, 0x52, 0x84, 0x9e, 0xe0, 0xa9, 0x1a, 0x06, 0x17, 0x79, 0xb6, 0xd2, 0x49, 0xd5, 0xa8, + 0xa3, 0xf9, 0x50, 0x6a, 0x47, 0x72, 0x40, 0xbd, 0xf4, 0x18, 0xd3, 0x0b, 0x95, 0xae, 0x8a, 0x72, 0x46, 0x28, 0xef, + 0xf4, 0xc4, 0xb8, 0x30, 0x7d, 0x1c, 0x22, 0xbf, 0xbc, 0x2b, 0x54, 0xe8, 0x17, 0xbe, 0x00, 0xf0, 0x2b, 0xb8, 0xdd, + 0xef, 0xc6, 0x77, 0x51, 0xd9, 0xcf, 0x38, 0xdb, 0xff, 0xef, 0x79, 0x3c, 0xfc, 0x34, 0x1e, 0x7e, 0xbb, 0x18, 0x84, + 0x43, 0xfb, 0x93, 0x3c, 0x7e, 0xb4, 0x4f, 0x5f, 0x71, 0xcb, 0x95, 0xc0, 0xc2, 0x6f, 0x04, 0xb7, 0x51, 0x2b, 0x21, + 0x88, 0x02, 0xbc, 0x51, 0xb8, 0xd5, 0x38, 0x01, 0x80, 0xbf, 0xe0, 0xbf, 0x02, 0x34, 0x12, 0x72, 0x17, 0x0d, 0xd0, + 0x0f, 0xa8, 0xdf, 0x47, 0x4f, 0x1a, 0x06, 0x72, 0x20, 0x9e, 0x50, 0x31, 0x50, 0x88, 0x2e, 0x63, 0xa2, 0x60, 0x7f, + 0x6d, 0xf6, 0xed, 0xb6, 0xd7, 0x96, 0xfc, 0xe0, 0x97, 0x7e, 0xa6, 0x89, 0x99, 0x77, 0xb8, 0xa1, 0xac, 0xe4, 0x2a, + 0x44, 0x6c, 0x3c, 0xfd, 0x2b, 0x67, 0x10, 0x6b, 0xf2, 0x3a, 0x03, 0x1f, 0x06, 0xfb, 0xc5, 0x78, 0x06, 0x6c, 0x03, + 0xdc, 0x71, 0x0a, 0x7e, 0x91, 0x81, 0x5b, 0xb3, 0x88, 0xf1, 0x82, 0x6d, 0x97, 0x44, 0xbf, 0xdf, 0xcb, 0xb3, 0x30, + 0xd7, 0x38, 0xcb, 0x79, 0x6d, 0xc4, 0xee, 0xa8, 0x13, 0x06, 0x71, 0xbb, 0x1e, 0x82, 0xa1, 0x1a, 0x82, 0xa2, 0xa3, + 0x2d, 0xae, 0x5e, 0x5b, 0x4f, 0x61, 0x7a, 0xab, 0xea, 0x2b, 0x46, 0x7f, 0xca, 0x4c, 0x60, 0x21, 0xed, 0x9a, 0x63, + 0x5d, 0x73, 0x8c, 0xb4, 0xa7, 0xdf, 0x17, 0x0d, 0xf2, 0xd3, 0x59, 0x78, 0x10, 0xa8, 0x52, 0xe5, 0x4e, 0x59, 0x94, + 0xdb, 0xd2, 0xbc, 0x31, 0xac, 0x69, 0x9e, 0xd9, 0xb8, 0x2e, 0xb3, 0x5e, 0x2f, 0x0c, 0xd1, 0xa1, 0x11, 0x4b, 0xc5, + 0xda, 0x20, 0xbc, 0x8f, 0x49, 0x18, 0x5d, 0x81, 0xac, 0x2e, 0x3c, 0xe3, 0x04, 0xf9, 0x32, 0x30, 0x59, 0x53, 0xd5, + 0x7a, 0x39, 0xe1, 0xb1, 0x91, 0x2f, 0x1b, 0x41, 0x83, 0xbc, 0xa4, 0xa8, 0x37, 0x71, 0x3b, 0xf6, 0x51, 0x0b, 0xa9, + 0x71, 0x53, 0x4f, 0x7b, 0x9a, 0x54, 0xf4, 0x58, 0xaf, 0x52, 0xbf, 0xc0, 0xb2, 0xc0, 0x92, 0x0f, 0x42, 0x7b, 0x9a, + 0x56, 0x60, 0x86, 0x6b, 0x9b, 0xc1, 0xd0, 0x0f, 0x87, 0xb6, 0x08, 0x9d, 0x51, 0xdb, 0x12, 0xc2, 0xb6, 0x0d, 0xc2, + 0xca, 0x7b, 0x22, 0x5f, 0x3d, 0xf5, 0x18, 0xe1, 0x90, 0x9b, 0xcd, 0x2c, 0x1a, 0x18, 0xe6, 0x57, 0xb2, 0xd9, 0x3c, + 0xdd, 0x5c, 0x2f, 0x2a, 0xa6, 0x80, 0xed, 0xb6, 0x12, 0x04, 0xff, 0x7e, 0xcc, 0x66, 0xf8, 0x37, 0xeb, 0xf7, 0x7b, + 0x21, 0xfe, 0xe2, 0x18, 0xbc, 0x67, 0x2e, 0x16, 0xec, 0x23, 0xc8, 0x54, 0x48, 0x84, 0xa9, 0xca, 0xf8, 0x8d, 0x55, + 0x60, 0x01, 0x67, 0x3e, 0x50, 0xb9, 0x30, 0x93, 0xbd, 0xbc, 0xb8, 0x86, 0x1c, 0xb7, 0xc6, 0x29, 0x1b, 0x65, 0x89, + 0x72, 0x5d, 0xc8, 0x46, 0x71, 0x9e, 0xc5, 0x25, 0x2f, 0xb7, 0x5b, 0x7d, 0x38, 0x26, 0x05, 0x07, 0xf6, 0x54, 0x51, + 0xa9, 0x92, 0x75, 0xa4, 0xba, 0xf1, 0x97, 0x61, 0x81, 0xfb, 0x94, 0xcf, 0x0b, 0x43, 0x23, 0xf6, 0xe0, 0xf2, 0xce, + 0xd4, 0xad, 0xb4, 0x17, 0x16, 0xd0, 0xbc, 0x92, 0x90, 0x0d, 0xa6, 0x7a, 0x16, 0xad, 0x31, 0x13, 0xf3, 0x62, 0x01, + 0x61, 0x64, 0x8a, 0x05, 0xd8, 0x4c, 0x71, 0x01, 0x5e, 0x24, 0x31, 0xc0, 0xc4, 0xc5, 0x64, 0x0a, 0xf1, 0xcc, 0x55, + 0x39, 0xf1, 0xc2, 0xdc, 0x2f, 0x13, 0x87, 0x94, 0x01, 0xaf, 0x6a, 0x83, 0x26, 0x66, 0x1b, 0x8e, 0x3a, 0x41, 0x4e, + 0x4c, 0x7e, 0x3f, 0x55, 0x10, 0xe2, 0x4e, 0x1c, 0x09, 0x97, 0x15, 0xdb, 0x85, 0x97, 0x1d, 0x88, 0x31, 0x6a, 0x70, + 0xca, 0xcf, 0x0c, 0x8e, 0xc6, 0xe0, 0xdc, 0x78, 0x27, 0x48, 0x11, 0xc6, 0x64, 0x23, 0xd9, 0x95, 0x0c, 0xc5, 0x3c, + 0x5e, 0x80, 0xb2, 0x2e, 0x5e, 0x80, 0x65, 0x8d, 0x31, 0xc0, 0x04, 0x79, 0x15, 0xf7, 0x42, 0x3f, 0x51, 0x5c, 0x21, + 0xd2, 0xb3, 0x72, 0x7d, 0x54, 0xb4, 0x43, 0x5f, 0xe0, 0xf5, 0x5e, 0x99, 0xe3, 0x66, 0x3d, 0x16, 0x48, 0x6c, 0x08, + 0x18, 0x1b, 0xe9, 0x34, 0xd5, 0x5a, 0xf7, 0xc6, 0xcc, 0x03, 0x9f, 0x66, 0x23, 0x21, 0xab, 0xb3, 0x0b, 0x10, 0xa1, + 0xf8, 0x68, 0xf0, 0xc8, 0x2f, 0xe2, 0xce, 0x32, 0x6f, 0x6d, 0x8b, 0x4a, 0x76, 0xb4, 0x01, 0x90, 0x3e, 0x1d, 0x2d, + 0x4a, 0xc9, 0x29, 0x4a, 0x52, 0xbb, 0x4d, 0x01, 0x2b, 0xc9, 0x5f, 0xc0, 0x10, 0x6c, 0x6c, 0x4f, 0x38, 0x9d, 0x22, + 0xc4, 0x27, 0x9a, 0x22, 0xb2, 0x62, 0x58, 0x52, 0x1c, 0xdb, 0x12, 0x51, 0x3f, 0x6d, 0x59, 0x76, 0x30, 0x4c, 0x54, + 0xdc, 0x17, 0xa9, 0x47, 0x89, 0x82, 0x80, 0xea, 0x21, 0x07, 0x89, 0xad, 0x6d, 0x20, 0x3c, 0x20, 0x8f, 0xe8, 0x8d, + 0xf5, 0xf7, 0x59, 0xe7, 0xd9, 0x85, 0xe6, 0xa8, 0x5c, 0xef, 0x0a, 0x33, 0x46, 0x78, 0x92, 0x19, 0x98, 0x7c, 0xef, + 0x3c, 0x33, 0x6a, 0x8a, 0x9e, 0x87, 0x4f, 0x76, 0x8c, 0x11, 0xe9, 0xee, 0x19, 0x74, 0x13, 0xbc, 0xaa, 0xc3, 0x46, + 0xbb, 0x52, 0x10, 0x12, 0xa6, 0x16, 0x4d, 0xcc, 0x7a, 0xd6, 0x80, 0x7a, 0xbb, 0xed, 0xe9, 0xb9, 0xba, 0x7f, 0xee, + 0xb6, 0xdb, 0x1e, 0x76, 0xeb, 0x45, 0xda, 0x6d, 0x05, 0x5e, 0xa9, 0x0f, 0xda, 0xe3, 0xcf, 0xdd, 0xf8, 0x73, 0x83, + 0xe4, 0x51, 0x3a, 0x9a, 0x69, 0xeb, 0x83, 0x70, 0xb8, 0xe9, 0x5d, 0xa3, 0x49, 0xdf, 0x67, 0xa1, 0xa4, 0x2b, 0xd1, + 0xa8, 0xae, 0x76, 0x26, 0x95, 0x0f, 0xae, 0xff, 0x87, 0x57, 0x01, 0x1e, 0x71, 0x6a, 0x67, 0xdf, 0xdb, 0xa0, 0xa2, + 0xd1, 0x16, 0x8e, 0x14, 0xa1, 0x07, 0x24, 0xe1, 0xbe, 0x96, 0xb5, 0xb8, 0xcd, 0xd3, 0xec, 0x61, 0xfa, 0xf4, 0x3a, + 0xf5, 0xad, 0xee, 0xdd, 0x32, 0xcb, 0xcc, 0x81, 0x57, 0x51, 0x1c, 0xd0, 0xa8, 0x8b, 0xf6, 0x5d, 0x65, 0x65, 0x09, + 0x5e, 0x1e, 0x70, 0x7d, 0x3e, 0xe5, 0x3e, 0xdc, 0xdc, 0x65, 0xd5, 0xdc, 0xa4, 0xa7, 0xd9, 0x3c, 0x5b, 0x6c, 0xb7, + 0x21, 0xfe, 0xed, 0x6a, 0x91, 0xa3, 0xc9, 0x73, 0xd0, 0xe1, 0x61, 0xe4, 0x1e, 0xa6, 0x1b, 0xe7, 0x6d, 0xfe, 0x4f, + 0xa2, 0xe1, 0x24, 0x70, 0x0c, 0xf4, 0x62, 0xf6, 0x08, 0x64, 0x30, 0xc6, 0xa9, 0x5f, 0xcc, 0xf4, 0x9a, 0x81, 0xe8, + 0x5b, 0x22, 0x02, 0x1c, 0x5d, 0x6c, 0x24, 0x1a, 0x59, 0x70, 0x52, 0x13, 0xb0, 0xd8, 0xb4, 0xe5, 0x7d, 0xb0, 0xb4, + 0xad, 0x2a, 0xee, 0xbc, 0x25, 0xcd, 0x71, 0x1d, 0x38, 0xdb, 0x7e, 0x33, 0xc4, 0xa6, 0xec, 0x6a, 0x81, 0xdc, 0x2f, + 0xaf, 0x69, 0x6f, 0x5c, 0x27, 0x30, 0x6b, 0x9b, 0xda, 0x32, 0x7e, 0xb6, 0xf4, 0x9f, 0xf5, 0xe0, 0x2a, 0xe3, 0xa7, + 0xb9, 0xb1, 0x4a, 0xb0, 0xfb, 0xc6, 0xf3, 0x1d, 0x80, 0x70, 0x6c, 0x3e, 0x3d, 0x3e, 0xcd, 0x3c, 0x7a, 0x0c, 0x44, + 0xc7, 0x7c, 0x54, 0xba, 0x8f, 0xec, 0xee, 0xf5, 0x03, 0xe0, 0xcd, 0xab, 0x76, 0x41, 0xf3, 0x72, 0x01, 0x81, 0x44, + 0xbd, 0xf2, 0x0a, 0xcb, 0x67, 0xc6, 0xec, 0x12, 0xc8, 0x50, 0x41, 0xc0, 0x26, 0xa9, 0xeb, 0x5c, 0x88, 0x55, 0x87, + 0x95, 0xf9, 0x48, 0xc2, 0x8e, 0x42, 0x34, 0xe7, 0x0c, 0x66, 0xc1, 0x7f, 0x05, 0x83, 0x72, 0x10, 0x44, 0x41, 0x14, + 0x04, 0x64, 0x50, 0xc0, 0x2f, 0xc4, 0x19, 0x23, 0x18, 0xa3, 0x04, 0x3a, 0xfc, 0x8e, 0x33, 0x9f, 0x11, 0x79, 0xd9, + 0x08, 0x63, 0xe9, 0x06, 0xe0, 0x5c, 0xca, 0x9c, 0xc7, 0xe8, 0x63, 0xf1, 0x8e, 0xb3, 0x8c, 0xd0, 0x77, 0xde, 0xa9, + 0xfc, 0x88, 0x37, 0x82, 0xdb, 0xed, 0x0e, 0xdb, 0x2b, 0x1e, 0x66, 0xb4, 0x37, 0xa6, 0xef, 0x38, 0x89, 0xb2, 0x86, + 0xf3, 0x30, 0x87, 0x9e, 0x55, 0x96, 0xb5, 0xa2, 0x86, 0xdc, 0xa0, 0x58, 0x17, 0x59, 0x26, 0x27, 0xc3, 0x55, 0x73, + 0x2a, 0x70, 0xdd, 0xd9, 0xf5, 0x02, 0x92, 0x32, 0xa1, 0x59, 0x3a, 0x1b, 0xbe, 0xda, 0xb6, 0xec, 0x45, 0xeb, 0x14, + 0xf2, 0x1a, 0xa2, 0xa2, 0x1f, 0x3a, 0x02, 0x6a, 0x68, 0xc5, 0x65, 0x05, 0x2e, 0xbb, 0xa6, 0x3d, 0xdc, 0xb4, 0xc7, + 0x34, 0xe3, 0x03, 0xc4, 0x88, 0xe3, 0xd8, 0x32, 0xb0, 0x9b, 0x70, 0x78, 0x36, 0xce, 0xf7, 0x65, 0x97, 0xde, 0xba, + 0x5a, 0x3c, 0xc2, 0xda, 0xf3, 0x56, 0x48, 0x08, 0x90, 0x96, 0xa6, 0xd2, 0xed, 0x36, 0x08, 0x60, 0x80, 0xfb, 0xfd, + 0x1e, 0x70, 0xad, 0x86, 0x9d, 0x34, 0xb7, 0x66, 0x4b, 0xec, 0x15, 0x85, 0xc7, 0x40, 0x94, 0x9a, 0xff, 0x0c, 0x02, + 0x8a, 0xe7, 0x6e, 0x08, 0xf6, 0x95, 0xec, 0x68, 0x53, 0xf4, 0xfb, 0x2f, 0x0a, 0x7c, 0x40, 0x39, 0x28, 0x88, 0x75, + 0x75, 0xdc, 0x0a, 0xc3, 0x3e, 0xa9, 0x0f, 0x71, 0x2c, 0xf2, 0x2c, 0x74, 0x84, 0xa5, 0x32, 0x84, 0x85, 0x2b, 0x46, + 0x3a, 0x88, 0x83, 0x9a, 0x74, 0x0e, 0x56, 0xe5, 0x82, 0x0d, 0xf7, 0x7a, 0x9f, 0x00, 0x16, 0x3c, 0xf3, 0x86, 0xe5, + 0xbd, 0x07, 0x00, 0xd6, 0xeb, 0xe1, 0x42, 0x71, 0x2f, 0x5f, 0x35, 0xd0, 0x27, 0xf1, 0xa5, 0x65, 0xd7, 0x67, 0x5a, + 0x56, 0x32, 0x1a, 0x8d, 0xaa, 0x5a, 0x49, 0x3e, 0x1c, 0x79, 0x69, 0xa1, 0x56, 0xca, 0x38, 0xe5, 0x29, 0x58, 0x7a, + 0x1b, 0x4a, 0x37, 0x5f, 0xd0, 0x15, 0x17, 0xa9, 0xfa, 0xe9, 0xa1, 0x4d, 0x36, 0x88, 0x6b, 0xd6, 0xd4, 0x59, 0xd8, + 0xe1, 0x87, 0x80, 0x8f, 0xf6, 0x61, 0xe6, 0xd2, 0x35, 0x2c, 0x2d, 0x88, 0x23, 0xe3, 0x82, 0x87, 0x2e, 0x0f, 0x60, + 0xfd, 0x99, 0x43, 0x12, 0x3f, 0x85, 0x9f, 0x33, 0x93, 0xd6, 0xf1, 0x19, 0xce, 0x66, 0x54, 0xaa, 0x1b, 0x41, 0xfb, + 0x35, 0x24, 0x12, 0x83, 0x6c, 0xdc, 0x60, 0x28, 0x5a, 0x77, 0x1b, 0xb8, 0xf2, 0x5b, 0x7a, 0xe7, 0xd3, 0x20, 0xc0, + 0xb6, 0xc6, 0x62, 0x00, 0x30, 0x14, 0x7f, 0xa0, 0xaa, 0xc6, 0x5c, 0x51, 0x4c, 0xc3, 0x54, 0xa2, 0xbd, 0xe3, 0xb8, + 0x8e, 0x1a, 0x57, 0x59, 0xc1, 0x4a, 0x6b, 0xcb, 0xeb, 0xde, 0xd2, 0xc2, 0x96, 0x80, 0x6a, 0x30, 0xdc, 0x09, 0xe0, + 0x33, 0x22, 0xd5, 0x81, 0x20, 0xbb, 0x0f, 0x0e, 0x9a, 0xb3, 0x04, 0xcf, 0xc3, 0x10, 0xfe, 0xc0, 0xc2, 0x81, 0x65, + 0xa9, 0xfa, 0xb9, 0x9c, 0xc6, 0x70, 0xee, 0xe6, 0x6a, 0x87, 0xcf, 0x96, 0xa0, 0xc8, 0x53, 0x73, 0x6a, 0x2e, 0x5f, + 0x79, 0x63, 0xbf, 0xc7, 0x04, 0xf3, 0x98, 0xd9, 0x86, 0xdf, 0x7a, 0xba, 0xad, 0x2f, 0xac, 0x1b, 0x38, 0x69, 0x2f, + 0x9c, 0xf6, 0x62, 0xbb, 0x34, 0x10, 0x77, 0x75, 0x43, 0x88, 0xf0, 0x5a, 0x13, 0x8b, 0xac, 0x21, 0xd3, 0xb1, 0xd8, + 0x18, 0xaa, 0x4d, 0xc5, 0x73, 0xad, 0x10, 0x2f, 0xa7, 0xea, 0xc2, 0xd4, 0x4a, 0x65, 0xc2, 0x20, 0xcc, 0x94, 0xb0, + 0xa8, 0x32, 0xf0, 0xd9, 0xaf, 0x90, 0xe2, 0xda, 0x7a, 0xde, 0xe2, 0xf2, 0xcd, 0x4c, 0x9b, 0xed, 0xa7, 0xaf, 0xf2, + 0xf8, 0x72, 0xbb, 0x0d, 0xbb, 0x5f, 0x80, 0xf9, 0x65, 0xa9, 0x34, 0x6a, 0xe0, 0xf4, 0x10, 0xa2, 0x9f, 0xf3, 0x3d, + 0x39, 0x27, 0x8e, 0x93, 0x6b, 0x37, 0x6f, 0xb6, 0x93, 0x62, 0x04, 0x16, 0x70, 0xe2, 0x22, 0x1d, 0x68, 0xa9, 0xe0, + 0xb4, 0x65, 0xbc, 0xb7, 0xe9, 0x1d, 0xa5, 0xc2, 0xab, 0x85, 0x26, 0x21, 0x95, 0xbb, 0x97, 0xd8, 0x51, 0x03, 0xce, + 0x49, 0xdd, 0x41, 0xc0, 0x49, 0x4d, 0x37, 0xd6, 0x2a, 0x4e, 0x4d, 0x82, 0xf7, 0x4a, 0x0f, 0x5d, 0xa2, 0x9d, 0xb8, + 0xdd, 0xb6, 0x2a, 0x5b, 0xa8, 0x8f, 0x7b, 0x39, 0x4b, 0xd4, 0xf1, 0x80, 0x42, 0x17, 0x75, 0x34, 0xe4, 0x0b, 0x52, + 0xe8, 0x95, 0xa3, 0x55, 0xab, 0xbb, 0x92, 0x81, 0x52, 0xad, 0x82, 0xbc, 0x26, 0xd6, 0x5d, 0x2b, 0x6b, 0x2c, 0xae, + 0x9c, 0x90, 0xc2, 0x26, 0x7c, 0x69, 0x29, 0x16, 0x56, 0xb0, 0x37, 0xa6, 0xbe, 0x70, 0x89, 0xd0, 0x76, 0xb7, 0x21, + 0x26, 0x19, 0xac, 0x9b, 0xed, 0xf6, 0x75, 0x11, 0xce, 0xb3, 0x05, 0x95, 0xa3, 0x2c, 0x45, 0x08, 0x31, 0xe3, 0xa1, + 0x6b, 0xbb, 0x60, 0x26, 0x86, 0xba, 0xf6, 0x78, 0x49, 0xa6, 0x58, 0x9b, 0x24, 0x47, 0xf1, 0xb9, 0x2c, 0xd4, 0x5a, + 0x23, 0x04, 0x0f, 0xf7, 0x3f, 0x53, 0x88, 0xe1, 0x66, 0xd6, 0xdd, 0x6f, 0x3b, 0x37, 0xc4, 0x3f, 0x21, 0x90, 0x40, + 0xc9, 0x5e, 0x17, 0xa3, 0xf3, 0x4c, 0xa4, 0xb8, 0x53, 0x55, 0x54, 0x5c, 0xb5, 0x0e, 0x9a, 0x2d, 0xb7, 0xf7, 0x62, + 0x4b, 0x14, 0x20, 0xae, 0xb1, 0xd0, 0x8c, 0x67, 0xe5, 0x2c, 0x45, 0x32, 0x8a, 0x0d, 0x89, 0x4a, 0x2f, 0x2a, 0xba, + 0xcf, 0xd3, 0x98, 0x1e, 0xba, 0x35, 0x08, 0xae, 0x9a, 0x3b, 0x1b, 0x69, 0xbe, 0x20, 0x44, 0x4d, 0x80, 0x84, 0x8d, + 0x6a, 0x4e, 0xad, 0x4b, 0xf1, 0x30, 0xab, 0x7c, 0xa6, 0x0f, 0xe2, 0x4b, 0x01, 0x3c, 0xac, 0xb7, 0xbd, 0xaf, 0x84, + 0xc7, 0xda, 0xe0, 0xdb, 0xed, 0xf6, 0x52, 0xcc, 0x83, 0xc0, 0x63, 0x34, 0xbf, 0x53, 0x12, 0xf3, 0xde, 0x98, 0xc2, + 0x8a, 0xf7, 0x5d, 0xda, 0xba, 0x49, 0xad, 0xb5, 0x40, 0xdd, 0xe1, 0xfa, 0x80, 0xe7, 0x29, 0x71, 0xb4, 0xa3, 0x72, + 0x2a, 0xad, 0xae, 0x1c, 0xbb, 0x22, 0x30, 0x30, 0xf4, 0x0f, 0x29, 0xdb, 0x80, 0x39, 0x1e, 0x58, 0xdb, 0xa0, 0x9f, + 0x92, 0xd2, 0xc2, 0x8c, 0xd1, 0x98, 0x45, 0xae, 0xab, 0xe8, 0x80, 0xeb, 0xe8, 0xed, 0x3c, 0xfa, 0xdb, 0xb3, 0x31, + 0x2d, 0x62, 0x91, 0xca, 0x2b, 0x50, 0x41, 0x80, 0x32, 0x04, 0x0d, 0xff, 0x35, 0x35, 0x00, 0x0d, 0x82, 0x1b, 0x80, + 0x7f, 0x74, 0x3a, 0x0d, 0xda, 0x9a, 0x7c, 0x4c, 0x52, 0x55, 0xe4, 0xac, 0x0d, 0x65, 0xa6, 0x92, 0x43, 0xf2, 0xb8, + 0x04, 0x3c, 0x47, 0x6c, 0x96, 0xb2, 0xb9, 0x50, 0x9b, 0x4d, 0xbd, 0x56, 0xec, 0xc8, 0x6d, 0xa3, 0x68, 0xb3, 0x16, + 0xb5, 0x9d, 0xc4, 0x7c, 0x31, 0xbd, 0xb5, 0xc2, 0xc0, 0xa9, 0x69, 0xcd, 0xcd, 0x0e, 0x74, 0x9a, 0xad, 0xcf, 0xe4, + 0x26, 0x40, 0x1c, 0x60, 0xb8, 0x6e, 0xe7, 0x37, 0x0b, 0x42, 0x6f, 0xd9, 0xad, 0x15, 0xab, 0xde, 0x58, 0xb9, 0x88, + 0x49, 0xbb, 0x19, 0x4c, 0xe0, 0x32, 0xce, 0x0a, 0xfb, 0x42, 0xab, 0x1b, 0x8a, 0x8e, 0xb6, 0x49, 0xfb, 0x79, 0x47, + 0xbb, 0xe1, 0x82, 0x6f, 0xc5, 0x3a, 0xce, 0x0d, 0x69, 0xaa, 0xd0, 0xa3, 0x03, 0xbd, 0x1d, 0x02, 0x9a, 0xb3, 0x31, + 0x5d, 0xd2, 0x14, 0x2f, 0xd0, 0x74, 0x0d, 0x66, 0x29, 0x17, 0xd0, 0xd7, 0x6e, 0x9f, 0xe4, 0x0b, 0xd5, 0x13, 0xe1, + 0x2d, 0x51, 0xf0, 0xe5, 0x48, 0xc1, 0x2b, 0x2b, 0xe7, 0xb1, 0x99, 0x43, 0xc0, 0x63, 0x51, 0x25, 0x7a, 0x27, 0xc5, + 0x25, 0x28, 0x53, 0xe1, 0x08, 0x34, 0x55, 0x23, 0x96, 0x70, 0x80, 0xdb, 0x8b, 0xa7, 0x01, 0xa1, 0x20, 0xd5, 0x5d, + 0xdb, 0x15, 0x79, 0xcb, 0x8e, 0x36, 0xb7, 0x60, 0x16, 0x5b, 0xad, 0xcb, 0xd6, 0x57, 0x36, 0xd9, 0x7d, 0x5c, 0x13, + 0x6c, 0xbb, 0xb7, 0x41, 0xc2, 0x5b, 0x7a, 0x43, 0x36, 0x37, 0xfd, 0x7e, 0x08, 0xfd, 0x21, 0x54, 0x77, 0xe8, 0xb6, + 0xb3, 0x43, 0xb7, 0x3e, 0xf3, 0x6b, 0xf5, 0x7c, 0xca, 0x1b, 0xe2, 0x03, 0x9a, 0x68, 0xd1, 0x55, 0x7c, 0x07, 0x9b, + 0x3a, 0xaa, 0xa8, 0xaa, 0x3c, 0x4a, 0x28, 0xa8, 0x80, 0x33, 0x5e, 0x9e, 0x72, 0x8c, 0x6d, 0xaa, 0x9f, 0xde, 0x69, + 0x5e, 0x6d, 0x6d, 0xd6, 0x66, 0xb9, 0x3e, 0x07, 0x8b, 0x80, 0x73, 0x1e, 0x5d, 0x69, 0x5a, 0x72, 0xe9, 0x31, 0xf5, + 0x67, 0x38, 0x2a, 0xc1, 0x45, 0x9c, 0xe5, 0x3c, 0x0d, 0xe8, 0x45, 0xb3, 0xff, 0xa1, 0xb6, 0x95, 0x5a, 0x36, 0xce, + 0xdc, 0xeb, 0x90, 0x6c, 0xfe, 0xc7, 0x06, 0xea, 0x4d, 0x88, 0x11, 0x51, 0xcd, 0x82, 0x3e, 0x61, 0x10, 0x1b, 0x33, + 0x28, 0xd7, 0x49, 0xc2, 0xcb, 0x32, 0x30, 0x4a, 0xad, 0x35, 0x5b, 0x9b, 0xf3, 0xec, 0x11, 0x3b, 0x7a, 0xd4, 0x63, + 0xec, 0x96, 0xd0, 0x44, 0xeb, 0x84, 0x4c, 0x8d, 0x91, 0xa7, 0x05, 0xd2, 0x1d, 0x8a, 0xb2, 0x8b, 0xf0, 0x04, 0x85, + 0x2c, 0xed, 0x7d, 0x6e, 0x4e, 0x64, 0xf5, 0x8d, 0x36, 0xba, 0x88, 0x54, 0x22, 0xc8, 0xc6, 0x6f, 0x10, 0xb0, 0x17, + 0x9a, 0x1d, 0x90, 0xcd, 0x92, 0x9d, 0xd2, 0x33, 0x6b, 0x02, 0x03, 0xaf, 0x4f, 0x54, 0xa2, 0x19, 0x65, 0x45, 0x74, + 0x95, 0x91, 0xcb, 0x5d, 0x48, 0xa2, 0xb3, 0x90, 0xf8, 0xb9, 0x61, 0x69, 0x5d, 0x87, 0x28, 0x66, 0x36, 0x1b, 0x5e, + 0x75, 0xf7, 0x51, 0x63, 0x5b, 0x19, 0x9f, 0xea, 0x5b, 0x9b, 0x46, 0xa6, 0xd0, 0xd7, 0xe1, 0xa4, 0xdf, 0x87, 0xbf, + 0x9a, 0x7e, 0xe0, 0x2d, 0x05, 0x7f, 0xb1, 0x47, 0xa4, 0x4e, 0x58, 0x00, 0x70, 0x84, 0x39, 0xaf, 0x9a, 0x13, 0xf8, + 0x88, 0x1d, 0x6d, 0x1e, 0x85, 0xa7, 0x8d, 0x99, 0xbb, 0x0b, 0xf1, 0x52, 0x95, 0xf4, 0xbc, 0x79, 0x32, 0x03, 0xb1, + 0x0a, 0xcd, 0x7e, 0xbd, 0x65, 0x56, 0x9f, 0x00, 0x44, 0xea, 0xd6, 0x3a, 0x94, 0xe2, 0xc7, 0xa6, 0xcb, 0x64, 0x93, + 0xb2, 0x36, 0x13, 0xa5, 0x54, 0x24, 0xcd, 0x45, 0x00, 0xfd, 0x86, 0xe1, 0xa8, 0x01, 0xde, 0x5b, 0x8f, 0xbd, 0x19, + 0x1a, 0x6f, 0x4c, 0x0d, 0x3d, 0xdb, 0xe8, 0xe5, 0xed, 0x28, 0x84, 0x19, 0x8b, 0xe8, 0xd6, 0x1d, 0x8b, 0xe1, 0x29, + 0x3d, 0x81, 0x0a, 0xdf, 0x84, 0x18, 0x4d, 0x97, 0xd4, 0xf5, 0x74, 0xad, 0xb6, 0xd2, 0x0d, 0xa1, 0x39, 0x46, 0xf1, + 0xf1, 0xda, 0x76, 0x47, 0x8d, 0xd0, 0x9e, 0x50, 0x1e, 0xde, 0xd2, 0x8a, 0xde, 0x58, 0x16, 0xc1, 0xc9, 0x8f, 0xbd, + 0xfc, 0x84, 0x9e, 0x7b, 0x02, 0x93, 0xa2, 0xad, 0x01, 0xfc, 0x01, 0xf5, 0xc3, 0x59, 0x3d, 0xb5, 0x52, 0x0e, 0x4f, + 0xe1, 0x4b, 0x36, 0x20, 0x57, 0xd0, 0x8b, 0x35, 0x66, 0x47, 0x31, 0xe8, 0xa0, 0x76, 0x76, 0x87, 0x37, 0x29, 0x65, + 0x88, 0xd6, 0x77, 0x0e, 0xe2, 0xe9, 0x1f, 0xa0, 0xe9, 0x83, 0xb4, 0x30, 0xa5, 0x6b, 0x14, 0xf0, 0x80, 0xbe, 0xa9, + 0xdf, 0xcf, 0xf1, 0xb9, 0xf6, 0x2c, 0xb1, 0xb0, 0xc7, 0x4b, 0x42, 0x97, 0x5e, 0xdc, 0x28, 0x90, 0x36, 0x3b, 0x56, + 0x01, 0x58, 0x91, 0x04, 0x1a, 0x91, 0x80, 0xa5, 0x8e, 0x27, 0x2e, 0xdb, 0xa0, 0x01, 0x49, 0x54, 0x52, 0xc8, 0x12, + 0x49, 0xe0, 0x87, 0x11, 0x84, 0x28, 0x8a, 0x41, 0xdc, 0xab, 0x97, 0x57, 0x5c, 0x53, 0x03, 0x4e, 0x14, 0xc1, 0x04, + 0xeb, 0x74, 0x0a, 0xc4, 0x56, 0xac, 0x57, 0xe0, 0x79, 0xe9, 0x38, 0x71, 0x64, 0x09, 0xd0, 0x20, 0xcd, 0x97, 0x4e, + 0xbb, 0xe5, 0xed, 0x89, 0x96, 0x2a, 0x36, 0xf7, 0x5e, 0x2c, 0x2c, 0xf7, 0x58, 0xf9, 0xdb, 0x81, 0xf6, 0xc2, 0x6a, + 0x47, 0x44, 0x0d, 0x56, 0x76, 0x6d, 0xbb, 0x36, 0x94, 0x86, 0xea, 0x5e, 0x39, 0x26, 0xa0, 0xa2, 0xab, 0xb8, 0x5a, + 0x46, 0xd9, 0x08, 0xfe, 0x6c, 0xb7, 0xc1, 0x7e, 0x00, 0x16, 0x90, 0xbf, 0xbe, 0xff, 0x39, 0xc2, 0xf0, 0x4c, 0xbf, + 0xbe, 0xff, 0x79, 0xbb, 0x7d, 0x36, 0x1e, 0x1b, 0xae, 0xc0, 0xa9, 0x75, 0x80, 0x3f, 0x30, 0x6c, 0x83, 0x5d, 0xb2, + 0xdb, 0xed, 0x33, 0xe0, 0x20, 0x14, 0xdb, 0x60, 0x76, 0xb1, 0x72, 0xe4, 0x52, 0xac, 0x86, 0xde, 0x91, 0x80, 0x55, + 0xb7, 0xc3, 0x52, 0xec, 0x52, 0x1f, 0x15, 0x82, 0x51, 0x2f, 0xfa, 0x97, 0x9d, 0x02, 0x4b, 0x0a, 0xa6, 0xab, 0xc1, + 0xb2, 0xaa, 0x56, 0x65, 0xb4, 0xbf, 0x1f, 0xaf, 0xb2, 0x51, 0x99, 0xc1, 0x36, 0x2f, 0xaf, 0x2f, 0x01, 0x50, 0x21, + 0xa0, 0x8d, 0x77, 0x6b, 0x91, 0x99, 0x17, 0x0b, 0xba, 0xcc, 0x70, 0x4d, 0x82, 0xd9, 0x41, 0xce, 0xad, 0x6e, 0x72, + 0x4a, 0xec, 0x03, 0xd8, 0x1c, 0x6e, 0xb7, 0x0d, 0x7e, 0xe1, 0x68, 0xf4, 0x6c, 0xb6, 0xcc, 0xb4, 0x41, 0x27, 0x37, + 0xfb, 0x9f, 0x44, 0x5e, 0x1a, 0x2a, 0x3e, 0xc9, 0xf4, 0x65, 0x06, 0x7c, 0x1e, 0x7b, 0x2b, 0x42, 0x9f, 0xe5, 0x6a, + 0xb4, 0x06, 0xd8, 0xd8, 0xec, 0xe2, 0x6e, 0x94, 0x72, 0x88, 0x48, 0x11, 0x58, 0x75, 0xcd, 0x32, 0x23, 0xbe, 0x4d, + 0xc5, 0x5d, 0x4b, 0x15, 0xf6, 0x56, 0x78, 0xce, 0x2a, 0xdc, 0x38, 0xca, 0xf4, 0x26, 0x51, 0xf8, 0x12, 0x85, 0xa8, + 0x1c, 0x8d, 0xe9, 0x9c, 0x40, 0x2a, 0xf3, 0x98, 0x50, 0xcc, 0xe1, 0xde, 0xfd, 0x9a, 0x3a, 0x73, 0x19, 0x5f, 0xb8, + 0xf7, 0xd2, 0x97, 0x99, 0xdc, 0x4a, 0x00, 0x45, 0x52, 0xb5, 0xff, 0xf2, 0x19, 0xa9, 0xf1, 0x3f, 0x53, 0xad, 0x01, + 0xe8, 0xfd, 0x02, 0x35, 0x39, 0x82, 0x80, 0xad, 0x98, 0xfa, 0x68, 0xfa, 0x56, 0x32, 0xff, 0x01, 0x75, 0x3b, 0x82, + 0x6d, 0x54, 0xfc, 0x9c, 0xa8, 0xa2, 0x05, 0x4f, 0xd7, 0x22, 0x8d, 0x45, 0x72, 0x17, 0xf1, 0x7a, 0x8a, 0x25, 0x31, + 0x1b, 0x21, 0xeb, 0x97, 0x66, 0x17, 0x7e, 0x2e, 0x1a, 0x26, 0xe0, 0xb4, 0xf4, 0xb7, 0x95, 0xb7, 0x99, 0x2c, 0xe3, + 0x8c, 0x4c, 0xb9, 0x42, 0xec, 0xb6, 0xfa, 0x1e, 0x73, 0x82, 0x3f, 0x3d, 0x78, 0x4a, 0xe8, 0xad, 0x9c, 0x96, 0x08, + 0x4a, 0x27, 0x52, 0xeb, 0xaa, 0x89, 0xfd, 0x9a, 0x42, 0x14, 0x07, 0xc1, 0x20, 0x74, 0xa7, 0x69, 0x9f, 0xe2, 0xfb, + 0x6c, 0xd9, 0x6f, 0x4d, 0xd9, 0x92, 0x6c, 0x04, 0x74, 0x4c, 0x3a, 0x6f, 0x4f, 0x6f, 0xcf, 0xce, 0xbc, 0xdf, 0xa0, + 0x09, 0x07, 0xd5, 0x0d, 0xb4, 0xab, 0x20, 0xd3, 0x18, 0xc5, 0x66, 0x31, 0xd6, 0x6e, 0x4d, 0x44, 0x10, 0x74, 0xba, + 0x9c, 0x85, 0xed, 0x76, 0x42, 0x7c, 0x09, 0x24, 0x50, 0xe0, 0xca, 0x45, 0x39, 0x09, 0x89, 0xba, 0x90, 0xe9, 0xc9, + 0xba, 0x96, 0x2c, 0xd0, 0x6b, 0xec, 0x20, 0xa0, 0xc7, 0xdc, 0x3e, 0x05, 0xf4, 0x7d, 0xc1, 0x8e, 0xf9, 0x20, 0x18, + 0x62, 0x7c, 0xd5, 0x80, 0xde, 0x48, 0xf5, 0x08, 0x1e, 0xc2, 0xc0, 0x72, 0xd1, 0x57, 0x05, 0x43, 0x58, 0xa1, 0xbf, + 0x52, 0x36, 0xf9, 0xe6, 0xef, 0x6e, 0x7e, 0xcf, 0xb5, 0x98, 0x1d, 0x84, 0xe2, 0xf6, 0x7a, 0x02, 0xc4, 0xaf, 0xe2, + 0x57, 0x60, 0x5d, 0xad, 0x25, 0xde, 0x6e, 0x7a, 0xfe, 0x14, 0xbe, 0x1c, 0xdd, 0x7e, 0x52, 0x9a, 0x4f, 0x20, 0x48, + 0x8d, 0x93, 0x94, 0xbb, 0xef, 0x3e, 0x4a, 0x57, 0x11, 0x8c, 0x16, 0x20, 0xd6, 0xdd, 0x5b, 0xc9, 0x59, 0x53, 0xf8, + 0x8f, 0x75, 0xbe, 0xc7, 0xd8, 0x21, 0xf2, 0x14, 0xa7, 0xbf, 0x01, 0x86, 0x7d, 0xe7, 0xdf, 0xca, 0xac, 0x21, 0xd1, + 0xb9, 0xfa, 0x08, 0xe8, 0xff, 0x58, 0x8f, 0xdf, 0x31, 0x4a, 0xfa, 0x92, 0x38, 0x47, 0xb8, 0x22, 0x5e, 0xa2, 0xa9, + 0x5e, 0x6f, 0x5c, 0xd3, 0x4f, 0x85, 0x79, 0xa1, 0x15, 0x1c, 0xf6, 0xad, 0x51, 0x78, 0xe0, 0x99, 0xf7, 0x9b, 0x68, + 0x08, 0xba, 0x7f, 0xc7, 0xbd, 0xf1, 0x9b, 0x60, 0x19, 0xde, 0x94, 0xb3, 0xcc, 0xdc, 0xe1, 0x6e, 0x32, 0x91, 0xca, + 0x1b, 0xc6, 0x82, 0xb5, 0x50, 0xe6, 0xab, 0x69, 0x30, 0xdb, 0xd4, 0x91, 0x4a, 0x76, 0xdf, 0xbf, 0x6d, 0x9c, 0xb0, + 0xd9, 0x20, 0x38, 0xad, 0x64, 0x11, 0x5f, 0xf2, 0x60, 0xaa, 0x55, 0x14, 0x59, 0xd6, 0xef, 0x67, 0x80, 0x0c, 0xe3, + 0xb4, 0x77, 0xf0, 0x64, 0xa9, 0x99, 0x09, 0x71, 0x6d, 0x75, 0x16, 0xf0, 0xd6, 0x8c, 0xe6, 0x71, 0x05, 0xbb, 0xcc, + 0x57, 0x52, 0xfc, 0xd9, 0x92, 0x64, 0x63, 0xfd, 0x0d, 0x19, 0xb6, 0x95, 0xcf, 0x9c, 0x03, 0xc6, 0xcc, 0x8d, 0x54, + 0x41, 0xee, 0x7a, 0xc0, 0x08, 0x21, 0x11, 0x10, 0xce, 0x62, 0xe2, 0x4e, 0x98, 0xf0, 0x8f, 0x2e, 0x30, 0x4e, 0x8c, + 0x81, 0x71, 0x3e, 0xca, 0x90, 0xd3, 0x63, 0x3e, 0x48, 0x1a, 0xb3, 0xf5, 0xa7, 0x2a, 0x91, 0x5e, 0x4b, 0x42, 0xcf, + 0xe0, 0xf7, 0xb8, 0xc5, 0x03, 0x35, 0x82, 0x53, 0xba, 0x9b, 0xd3, 0xfe, 0xab, 0x82, 0x0c, 0xff, 0x02, 0xef, 0xae, + 0xd8, 0x5e, 0x96, 0x13, 0x58, 0xdc, 0xb1, 0x57, 0x3c, 0xcd, 0x55, 0x8b, 0x13, 0xe2, 0x11, 0x8b, 0xdc, 0x27, 0x16, + 0x30, 0xa2, 0x86, 0xd1, 0xf8, 0xf1, 0xf4, 0xe4, 0xad, 0xc6, 0x6c, 0xca, 0xfd, 0x0f, 0x60, 0x44, 0xb5, 0xb4, 0xdd, + 0x0e, 0xf8, 0x72, 0x84, 0x06, 0xdb, 0xa9, 0x1b, 0xec, 0x7e, 0xdf, 0xa4, 0x1d, 0x95, 0x5e, 0x36, 0x27, 0x06, 0xdd, + 0x51, 0xda, 0x2c, 0x95, 0x41, 0x6d, 0x57, 0xe1, 0x68, 0x3e, 0x6b, 0xc4, 0xaa, 0xde, 0x87, 0xe1, 0x92, 0xc6, 0x56, + 0x56, 0x6e, 0x77, 0x13, 0x8e, 0x6c, 0x02, 0x5c, 0x9f, 0x82, 0xb2, 0x6a, 0xce, 0x41, 0x0b, 0x3a, 0x13, 0x38, 0xa2, + 0xed, 0x36, 0x84, 0x08, 0x1c, 0xc5, 0x70, 0x32, 0x0b, 0x8b, 0xe1, 0x50, 0x0d, 0x7c, 0x41, 0x48, 0xf4, 0xa9, 0x98, + 0x67, 0x0b, 0x85, 0xd8, 0xe3, 0xef, 0xa4, 0xdf, 0x0a, 0xc5, 0x29, 0xf7, 0x7e, 0x13, 0x64, 0xf3, 0x7b, 0x8a, 0x31, + 0x07, 0x9d, 0x66, 0x33, 0x03, 0x09, 0xeb, 0x71, 0x45, 0xd4, 0x3a, 0xb2, 0xb3, 0x01, 0xaa, 0x58, 0x34, 0x85, 0x05, + 0x75, 0x8b, 0x27, 0xd6, 0x33, 0x7a, 0x0f, 0x2a, 0x41, 0x54, 0x0b, 0x76, 0x63, 0xb8, 0xd6, 0x3e, 0x89, 0x50, 0x52, + 0x4e, 0x9a, 0xcc, 0x8c, 0x15, 0x0d, 0x16, 0x20, 0x24, 0x8d, 0xcb, 0xea, 0x8d, 0x4c, 0xb3, 0x8b, 0x0c, 0x10, 0x13, + 0x9c, 0xff, 0x9c, 0x6c, 0xbc, 0x79, 0xae, 0xe6, 0xa5, 0x2b, 0x71, 0x66, 0x61, 0x3e, 0xba, 0xde, 0xd2, 0x82, 0x44, + 0x05, 0xd0, 0x28, 0x5f, 0xcb, 0xf3, 0xd3, 0x8e, 0x55, 0xc8, 0xee, 0x87, 0x53, 0x65, 0x3b, 0xc4, 0x8f, 0x58, 0x45, + 0xbc, 0xd3, 0xba, 0x52, 0x22, 0x8d, 0x8e, 0xb6, 0x01, 0x31, 0x6c, 0xd9, 0xb7, 0xa8, 0xe1, 0x83, 0x30, 0x83, 0x4e, + 0xf2, 0x83, 0x9e, 0xd1, 0xb1, 0x35, 0x90, 0xf4, 0xb5, 0x08, 0xbe, 0x46, 0x47, 0x3a, 0x51, 0xa6, 0x91, 0x98, 0x42, + 0xa2, 0x5f, 0x2f, 0xb4, 0xc6, 0x32, 0xca, 0xbe, 0x22, 0xff, 0x7b, 0xdd, 0xbd, 0xdf, 0xc4, 0x76, 0x0b, 0x93, 0xec, + 0x79, 0x5c, 0xc1, 0xa6, 0x46, 0xad, 0x10, 0xce, 0xce, 0x71, 0x85, 0xda, 0xb1, 0x5e, 0x58, 0x02, 0x79, 0x00, 0x5b, + 0x91, 0x06, 0x65, 0x90, 0xec, 0x53, 0x31, 0x17, 0x0b, 0x27, 0xca, 0x91, 0x0a, 0xef, 0x4b, 0x8e, 0x52, 0x0e, 0x57, + 0xb1, 0xb0, 0x60, 0xc8, 0xaf, 0x8e, 0x2e, 0x0a, 0x79, 0x05, 0x92, 0x12, 0xc3, 0x50, 0x59, 0x5e, 0x17, 0x57, 0x6d, + 0x49, 0x68, 0xef, 0x0c, 0x40, 0x58, 0x0a, 0x10, 0xbc, 0x34, 0x6a, 0x88, 0xd9, 0x46, 0xed, 0xae, 0xe8, 0x5e, 0x72, + 0x40, 0x9d, 0xee, 0xda, 0xad, 0x37, 0x65, 0x9b, 0x6d, 0xc5, 0x85, 0x7f, 0x42, 0xe9, 0xc7, 0x7c, 0x50, 0xf8, 0x54, + 0x02, 0x37, 0xbe, 0xda, 0x64, 0xd9, 0xc5, 0x1d, 0x2e, 0xfd, 0xaa, 0x31, 0x7e, 0xfd, 0x7e, 0x4f, 0x2d, 0x84, 0x46, + 0x2a, 0x30, 0xdf, 0x3e, 0x33, 0x55, 0x19, 0x4d, 0xa9, 0xbd, 0x04, 0x57, 0xce, 0x7e, 0x04, 0x15, 0x71, 0x5d, 0x91, + 0xc9, 0xd4, 0x00, 0xed, 0x79, 0x59, 0xe1, 0x56, 0x16, 0xe0, 0xb1, 0x13, 0x90, 0xed, 0x96, 0x87, 0x81, 0x3e, 0x74, + 0x02, 0x7f, 0x4b, 0x9e, 0x22, 0xb3, 0x66, 0x1f, 0x7f, 0xd1, 0x82, 0x7f, 0x6c, 0xc1, 0xcf, 0x28, 0xee, 0xb4, 0x32, + 0xff, 0x56, 0x5a, 0xb7, 0xb8, 0x7f, 0x27, 0xd3, 0x84, 0xa2, 0x32, 0xa1, 0xf6, 0x2b, 0xfd, 0x97, 0x09, 0x96, 0xa4, + 0xb2, 0x7f, 0x90, 0xf0, 0xc1, 0xac, 0xf1, 0xc4, 0x1a, 0x4f, 0x86, 0xd3, 0xad, 0x34, 0x0c, 0x01, 0x0a, 0xfd, 0xbc, + 0xcc, 0x15, 0xd5, 0xcf, 0xbf, 0xac, 0xf9, 0x9a, 0x37, 0x5b, 0x6c, 0x93, 0x1e, 0x68, 0xb0, 0x97, 0x47, 0x53, 0x0a, + 0x27, 0x51, 0xe7, 0x46, 0xa2, 0x2e, 0x6a, 0x96, 0xa1, 0x3a, 0xc1, 0xab, 0x79, 0xaa, 0x87, 0xbd, 0x99, 0x88, 0xd6, + 0x4a, 0xca, 0x12, 0x03, 0xd6, 0x3a, 0xf2, 0x90, 0xdc, 0xad, 0x75, 0xdc, 0x69, 0xa8, 0x4b, 0x53, 0x28, 0x01, 0x56, + 0xb8, 0x00, 0x47, 0xd0, 0xcf, 0x45, 0xc8, 0xe1, 0x9a, 0xaa, 0xf4, 0x0b, 0x9a, 0x92, 0x27, 0x9e, 0xa2, 0x56, 0x2b, + 0xd2, 0xed, 0x47, 0x39, 0x76, 0xc3, 0x37, 0x4e, 0xc8, 0x89, 0x11, 0xfa, 0xbb, 0x63, 0x29, 0x67, 0x68, 0xf1, 0xa0, + 0x4e, 0xb0, 0x5e, 0xde, 0x52, 0xa0, 0x98, 0xa3, 0xcb, 0xaa, 0x6b, 0x5e, 0xa3, 0xed, 0xcb, 0xb2, 0xdf, 0xcf, 0x6d, + 0x3d, 0x29, 0x3b, 0xda, 0x2c, 0xcd, 0x3e, 0x44, 0xc5, 0x14, 0xee, 0xfa, 0x44, 0xf3, 0x57, 0xa1, 0xbe, 0x6a, 0xcb, + 0x9c, 0x8f, 0x38, 0xe2, 0x62, 0xe4, 0xa4, 0xfe, 0x45, 0x4d, 0xbd, 0x12, 0xf7, 0xab, 0x4a, 0xbe, 0x13, 0xc6, 0x8a, + 0xd1, 0x01, 0xf5, 0xa7, 0x4a, 0xe5, 0xfd, 0xb2, 0x00, 0xb8, 0x27, 0xc1, 0x3e, 0x81, 0x7d, 0x85, 0x46, 0xf8, 0x6d, + 0x09, 0xf8, 0x37, 0x8a, 0x1b, 0xb0, 0x0a, 0x0c, 0x30, 0x9a, 0x6c, 0xcf, 0x69, 0x02, 0x07, 0x9c, 0xd0, 0x2a, 0x0a, + 0x2a, 0xcc, 0xd0, 0x50, 0x5b, 0x18, 0x3d, 0x45, 0x19, 0xb7, 0xca, 0xec, 0xdd, 0x18, 0x3b, 0x2d, 0xf0, 0x1a, 0xfe, + 0x7c, 0x5e, 0xe8, 0x61, 0xa3, 0x0e, 0xd2, 0xa3, 0x93, 0x98, 0xfe, 0xb8, 0x85, 0x93, 0x9b, 0x85, 0xb3, 0xac, 0x59, + 0x02, 0xdd, 0x81, 0x0b, 0x62, 0xdc, 0xef, 0xe7, 0x70, 0x64, 0x9a, 0x91, 0x2f, 0x58, 0x4e, 0x63, 0xb6, 0xa4, 0xda, + 0xd3, 0xee, 0xb2, 0x0a, 0x73, 0xba, 0xb4, 0x32, 0xde, 0x94, 0x81, 0xca, 0x68, 0xbb, 0x0d, 0xe1, 0x4f, 0xb7, 0xb5, + 0x4b, 0x3a, 0x5f, 0x42, 0x06, 0xf8, 0x03, 0x12, 0x51, 0xc4, 0xbe, 0xfe, 0xb7, 0x1a, 0xa7, 0xf4, 0x44, 0x69, 0xcd, + 0x12, 0xba, 0x66, 0xba, 0x7e, 0x7a, 0xc1, 0xd6, 0x8d, 0xa5, 0xb0, 0xdd, 0x86, 0xcd, 0x04, 0xa6, 0x39, 0x57, 0x32, + 0xbd, 0x40, 0x9d, 0x14, 0x50, 0xb1, 0xf0, 0x02, 0x97, 0x5f, 0x4a, 0x28, 0x34, 0x77, 0xbe, 0x5c, 0x18, 0x25, 0x26, + 0xb4, 0x4a, 0x7e, 0xf9, 0x50, 0x99, 0xaf, 0x8d, 0x47, 0xdc, 0xbf, 0xd2, 0x30, 0x31, 0x45, 0xa2, 0x42, 0x74, 0xf6, + 0x1b, 0xc8, 0x72, 0x04, 0xe0, 0x58, 0x9e, 0xca, 0x9a, 0xfe, 0x98, 0x42, 0x1c, 0x74, 0x68, 0xd0, 0xbb, 0x42, 0x5e, + 0x65, 0x25, 0x0f, 0xf1, 0x9e, 0xe0, 0x69, 0x46, 0xef, 0x37, 0xf8, 0xd0, 0xd6, 0x1e, 0x3d, 0x41, 0x36, 0x9e, 0x72, + 0xbf, 0xfe, 0x4e, 0x84, 0x73, 0x88, 0x56, 0xb9, 0xa0, 0x5a, 0x5d, 0xed, 0x00, 0xa8, 0x3c, 0xdb, 0xab, 0x47, 0x70, + 0xba, 0xe9, 0xeb, 0x5b, 0x15, 0x3a, 0x73, 0x00, 0x69, 0x0f, 0xc9, 0xba, 0xe6, 0x7a, 0x07, 0xb8, 0x23, 0xb1, 0x5a, + 0x03, 0x8d, 0x75, 0x5b, 0xb3, 0xd3, 0x1e, 0xc5, 0x63, 0x22, 0x33, 0x63, 0x91, 0x62, 0xcc, 0xdd, 0x3a, 0x2d, 0x8a, + 0x36, 0x68, 0x86, 0xb0, 0x7b, 0xd7, 0xe1, 0xeb, 0x56, 0x84, 0xf5, 0xfb, 0x6d, 0x5f, 0x60, 0x34, 0x8c, 0xb9, 0x76, + 0xcf, 0x33, 0x74, 0xc3, 0x06, 0xdb, 0xc8, 0x79, 0x88, 0x7c, 0x98, 0xa9, 0x03, 0x51, 0xd6, 0xd6, 0x80, 0xed, 0x11, + 0xd7, 0x9b, 0x56, 0xf1, 0xf3, 0x2a, 0xe6, 0x6c, 0xcf, 0x1a, 0xa7, 0xb4, 0xbe, 0xc6, 0x35, 0xc7, 0x55, 0x21, 0xa2, + 0xb6, 0x9e, 0xf1, 0x30, 0xec, 0x7c, 0x81, 0x3b, 0xb3, 0xc2, 0xe0, 0x45, 0x58, 0x2a, 0xd9, 0xa9, 0x5c, 0x7f, 0x0e, + 0x5b, 0x1c, 0xa4, 0xf2, 0xa5, 0xd7, 0xdf, 0x7f, 0xf9, 0xe2, 0x0b, 0x74, 0x53, 0x73, 0x7e, 0x04, 0x41, 0x26, 0xd0, + 0x21, 0x4b, 0xa9, 0x1e, 0xbf, 0x2b, 0x80, 0xda, 0xc3, 0x3c, 0x7c, 0x57, 0x30, 0x11, 0x5f, 0x67, 0x97, 0x71, 0x25, + 0x8b, 0xd1, 0x35, 0x17, 0xa9, 0x2c, 0xac, 0xd4, 0x38, 0x38, 0x5e, 0xad, 0x72, 0x1e, 0x80, 0xa9, 0xbc, 0x65, 0x94, + 0x6d, 0x65, 0x99, 0x1e, 0x5c, 0x2d, 0x4f, 0xaf, 0xb4, 0xe8, 0xbc, 0xbc, 0xbe, 0x0c, 0x22, 0xfc, 0x75, 0x6e, 0x7e, + 0x5c, 0xc5, 0xe5, 0xc7, 0x20, 0xb2, 0x36, 0x75, 0xe6, 0x07, 0x4a, 0xe5, 0xc1, 0x7f, 0x0a, 0x64, 0xba, 0xdf, 0x15, + 0x60, 0x99, 0x6d, 0x2b, 0x3e, 0x8c, 0xb1, 0xd6, 0xe1, 0x84, 0xcc, 0x54, 0x89, 0xde, 0xbb, 0x64, 0x5d, 0x80, 0xb5, + 0x9f, 0xc2, 0x32, 0x56, 0xb9, 0x66, 0x58, 0x99, 0xaa, 0xc8, 0xcc, 0xca, 0x9a, 0xed, 0x87, 0xd6, 0x89, 0x66, 0x8e, + 0xde, 0x02, 0xfa, 0x81, 0xec, 0x5f, 0xd2, 0x72, 0xcd, 0x3c, 0x1f, 0x9b, 0xc6, 0xeb, 0x47, 0xfb, 0x97, 0x6e, 0xc1, + 0xde, 0xda, 0x3b, 0x39, 0x0a, 0x13, 0xc1, 0xb3, 0xd6, 0x8c, 0x2f, 0xf2, 0xac, 0x80, 0x95, 0x33, 0x19, 0x8f, 0xa9, + 0xb7, 0xb4, 0x5a, 0x37, 0x47, 0x87, 0xe4, 0x9a, 0x3d, 0xae, 0x1e, 0x73, 0xb2, 0xcf, 0x5b, 0xa6, 0xb6, 0x6d, 0xeb, + 0x38, 0x4f, 0x93, 0xaf, 0x4c, 0xf7, 0xc5, 0xda, 0x46, 0x44, 0x57, 0xce, 0x7d, 0xce, 0x2b, 0xb8, 0xf5, 0x4d, 0x69, + 0xe8, 0xb5, 0x04, 0x20, 0x3a, 0x6d, 0xc0, 0x5f, 0xb0, 0x72, 0x3d, 0xaa, 0x78, 0x59, 0x81, 0x84, 0x05, 0x45, 0x78, + 0x53, 0xec, 0x4d, 0xe1, 0x6e, 0x9c, 0x9e, 0xc3, 0x0e, 0x5c, 0x4c, 0xd1, 0x1d, 0x27, 0x26, 0xb3, 0xd2, 0x68, 0x45, + 0x23, 0xfd, 0xcb, 0xf5, 0x25, 0xd6, 0x7d, 0xd1, 0xca, 0x3c, 0x9b, 0x53, 0x61, 0xb1, 0xbb, 0xca, 0xa5, 0x13, 0xf5, + 0x5b, 0x26, 0x5c, 0xb9, 0x12, 0x04, 0x64, 0x5a, 0xb0, 0x5e, 0x61, 0x76, 0x91, 0x5c, 0x03, 0x21, 0x03, 0xc3, 0xd7, + 0x60, 0x2d, 0x4a, 0x6e, 0xac, 0x60, 0xbd, 0x7b, 0xbe, 0x4e, 0x10, 0x52, 0xf0, 0xc0, 0x4d, 0xd0, 0x0f, 0xad, 0x9b, + 0xb7, 0xa3, 0x44, 0x19, 0xc4, 0xe3, 0xd6, 0x4e, 0x39, 0x48, 0x20, 0x00, 0xf7, 0x54, 0x85, 0xe0, 0x50, 0x20, 0xeb, + 0xe0, 0x6a, 0xc6, 0x11, 0x5c, 0x5d, 0x39, 0x73, 0x71, 0x03, 0xb0, 0xae, 0xfc, 0xb9, 0x6c, 0x70, 0x61, 0x3d, 0xa2, + 0xca, 0x9c, 0x71, 0x8a, 0x41, 0x8c, 0x2c, 0x41, 0x5f, 0x59, 0x4a, 0x7b, 0x09, 0x9a, 0xc6, 0x2b, 0xb6, 0x52, 0x3e, + 0x00, 0xf4, 0x9c, 0xad, 0x94, 0xb1, 0x3f, 0x7e, 0x7d, 0xc6, 0x56, 0x5a, 0x1a, 0x3c, 0xbd, 0x9a, 0x9d, 0xcf, 0xce, + 0x06, 0xec, 0x20, 0x0a, 0xb5, 0x01, 0x43, 0xe0, 0x90, 0xf8, 0x83, 0x41, 0xa8, 0xf1, 0x4e, 0x06, 0x2a, 0x20, 0x16, + 0xf1, 0x78, 0x6c, 0xc4, 0xcd, 0x0a, 0xc7, 0x43, 0x0c, 0x7e, 0xd5, 0x7c, 0x41, 0x02, 0x42, 0x4d, 0x69, 0xe8, 0xf2, + 0x18, 0x0e, 0x27, 0x7b, 0x13, 0x48, 0xc5, 0xcc, 0x4c, 0x15, 0xc6, 0xc6, 0x24, 0x82, 0x78, 0xa7, 0x9d, 0xf5, 0x42, + 0xb9, 0xdd, 0x35, 0x1a, 0xc8, 0x95, 0xc1, 0x17, 0x55, 0x3c, 0xd9, 0x1b, 0x76, 0x55, 0x8c, 0xa3, 0x70, 0x6d, 0x94, + 0x6f, 0x67, 0x87, 0x00, 0x5e, 0x7b, 0x36, 0xf4, 0xe5, 0x12, 0x67, 0xfb, 0x4f, 0xc9, 0xe3, 0xa7, 0x84, 0x9e, 0xb1, + 0xb3, 0xaf, 0x9e, 0xd2, 0x33, 0x45, 0x4e, 0xf6, 0x26, 0xd1, 0x35, 0xb3, 0x98, 0x2f, 0x07, 0xaa, 0x09, 0xf4, 0x72, + 0xb4, 0x16, 0x6a, 0x81, 0x69, 0x87, 0xa6, 0xf0, 0xdb, 0xf1, 0x5e, 0x30, 0xb8, 0x6e, 0x37, 0xfd, 0xba, 0xdd, 0x56, + 0xcf, 0xab, 0x6b, 0xef, 0x20, 0xda, 0x2d, 0x66, 0xf2, 0xf7, 0xf1, 0x9e, 0x9b, 0x03, 0xac, 0xef, 0xe1, 0x31, 0x31, + 0x4d, 0xda, 0x19, 0x15, 0xbf, 0xa6, 0x27, 0xd8, 0x87, 0x66, 0x91, 0x1d, 0x7d, 0x18, 0xfe, 0x5b, 0x9d, 0xa8, 0xcf, + 0xbe, 0x3a, 0x00, 0x72, 0x04, 0x32, 0x50, 0x2c, 0x11, 0xcc, 0x70, 0xa0, 0x29, 0xa0, 0x20, 0xd3, 0xe3, 0x4e, 0xf5, + 0xf0, 0xab, 0x51, 0x53, 0x33, 0x72, 0x0d, 0x53, 0x83, 0x6d, 0xc1, 0x0f, 0x54, 0x37, 0xf4, 0x37, 0x1a, 0xdd, 0x48, + 0x3b, 0x99, 0x99, 0x97, 0xd4, 0xc6, 0x75, 0xbb, 0x86, 0x00, 0xc6, 0x0e, 0x5e, 0x50, 0xb2, 0xaf, 0x0f, 0x2f, 0xf7, + 0x70, 0x15, 0x01, 0x4a, 0x16, 0x0b, 0xbe, 0x1e, 0x5c, 0xea, 0xcd, 0xbd, 0x17, 0x90, 0xc1, 0xd7, 0xc1, 0xd1, 0xd7, + 0x03, 0x39, 0x08, 0x0e, 0xf7, 0x2f, 0x8f, 0x02, 0x67, 0xdc, 0x0f, 0x21, 0x1e, 0x55, 0x45, 0x31, 0x13, 0xa6, 0x8a, + 0xc4, 0xd6, 0x9e, 0xdb, 0x7a, 0x95, 0xf1, 0x19, 0x4d, 0xa7, 0x16, 0xf9, 0x3b, 0x4c, 0x59, 0x6c, 0x7e, 0x07, 0x13, + 0x7e, 0x15, 0x44, 0x2e, 0x08, 0xea, 0x2c, 0x8f, 0x62, 0xba, 0x64, 0xb7, 0x22, 0x4c, 0x69, 0xb2, 0x9f, 0x13, 0x12, + 0x85, 0x4b, 0x05, 0x9e, 0xa7, 0x5e, 0x27, 0x10, 0xc7, 0xd5, 0x7d, 0x7e, 0x2b, 0xc2, 0x25, 0xcd, 0xf7, 0x13, 0xd2, + 0x2a, 0xc2, 0x45, 0x64, 0xd9, 0xd4, 0xf4, 0x82, 0x85, 0x2b, 0x7a, 0x09, 0xcc, 0x94, 0x5c, 0x87, 0x97, 0xc0, 0xe5, + 0xad, 0xe7, 0xab, 0x05, 0xbb, 0x6c, 0x48, 0xdf, 0x0c, 0x5f, 0x7c, 0x61, 0x7d, 0xf2, 0x80, 0x87, 0x74, 0x7e, 0x78, + 0x29, 0xd8, 0x00, 0x5c, 0x67, 0xfc, 0xe6, 0x3b, 0x79, 0xab, 0xe7, 0xa5, 0x3d, 0xc5, 0x38, 0x33, 0xed, 0xc4, 0xa4, + 0x9d, 0x90, 0xfb, 0xf7, 0xed, 0x4d, 0x6c, 0x4e, 0xf6, 0x32, 0x5a, 0x2b, 0x97, 0x55, 0xcb, 0x90, 0x14, 0x6b, 0x86, + 0xfc, 0x3d, 0x4a, 0x4e, 0xad, 0xc0, 0x93, 0x5d, 0xf0, 0x2a, 0x59, 0xfa, 0x07, 0x95, 0xb5, 0x1a, 0xb0, 0xc7, 0x88, + 0x65, 0xa1, 0x70, 0xec, 0xdf, 0x64, 0xac, 0x58, 0xfb, 0x02, 0x8d, 0x18, 0xb9, 0xb7, 0x37, 0x19, 0xf3, 0x62, 0xae, + 0x26, 0x6b, 0x2f, 0x54, 0x9d, 0x97, 0x9e, 0xb7, 0x78, 0x2f, 0xa7, 0xd4, 0x30, 0x12, 0xd1, 0xbd, 0xb1, 0x32, 0xa3, + 0x54, 0x89, 0x5a, 0x83, 0x46, 0x04, 0x1b, 0xbb, 0xe0, 0x97, 0xe0, 0x84, 0xca, 0x3d, 0x75, 0xb6, 0x6f, 0xa7, 0x54, + 0x7a, 0xc0, 0xb2, 0xd4, 0xa8, 0xca, 0xdd, 0x32, 0x93, 0xac, 0x1a, 0x04, 0xa3, 0x3f, 0x4b, 0x29, 0x66, 0x78, 0x67, + 0x64, 0xc1, 0x14, 0xac, 0x04, 0x55, 0x2d, 0xc3, 0x72, 0xc8, 0x51, 0x8b, 0x67, 0x7c, 0x52, 0xa5, 0xfe, 0xd1, 0x11, + 0x24, 0x77, 0xb9, 0x6e, 0x05, 0xc9, 0x7d, 0x3a, 0x7e, 0xaa, 0x07, 0x3a, 0x5d, 0x6b, 0xc7, 0x43, 0x9f, 0xdf, 0x46, + 0x7c, 0x6d, 0xdd, 0x7b, 0xaa, 0xb5, 0x0a, 0x65, 0xa0, 0xc5, 0x8a, 0xca, 0x95, 0x5a, 0xd2, 0xfb, 0x5d, 0x04, 0xc0, + 0x22, 0x36, 0x66, 0xe3, 0x5d, 0xdb, 0xac, 0x10, 0x34, 0xba, 0xec, 0x68, 0x13, 0x0f, 0x58, 0xa2, 0x5b, 0x3b, 0x98, + 0xd0, 0xf8, 0x88, 0x95, 0xfd, 0x7e, 0x7e, 0x04, 0xf4, 0x54, 0x1b, 0x31, 0x15, 0x70, 0xe4, 0x7f, 0x69, 0x45, 0xa6, + 0x28, 0xb0, 0x59, 0x53, 0x77, 0x6b, 0x2c, 0x23, 0xd1, 0x97, 0x29, 0x5d, 0x9e, 0xf0, 0x0c, 0x98, 0xd6, 0xeb, 0x96, + 0xe3, 0xca, 0xae, 0xe2, 0xc8, 0x53, 0x61, 0x59, 0x71, 0x5e, 0x85, 0xe3, 0xad, 0xc7, 0x37, 0xd8, 0x37, 0x6c, 0xda, + 0x85, 0x3f, 0x84, 0xb0, 0x10, 0xde, 0x64, 0x70, 0x1b, 0xd1, 0x76, 0x12, 0xa8, 0xbc, 0x31, 0xd7, 0x09, 0x65, 0x73, + 0xbb, 0x5e, 0x7b, 0x06, 0xe9, 0xc4, 0x1c, 0x28, 0xd5, 0x08, 0x5a, 0xa3, 0x59, 0x50, 0x35, 0xe2, 0x91, 0xe3, 0xe1, + 0x9d, 0x41, 0xac, 0x96, 0x2f, 0x69, 0x2a, 0x45, 0x03, 0x30, 0x2e, 0x80, 0xcb, 0xd3, 0xaf, 0xef, 0x7f, 0x3e, 0xe5, + 0x71, 0x91, 0x2c, 0xdf, 0xc5, 0x45, 0x7c, 0x55, 0x86, 0x1b, 0x35, 0x46, 0x71, 0x4d, 0xa6, 0x62, 0xc0, 0xa4, 0x59, + 0x49, 0xcd, 0x5d, 0xa9, 0x09, 0x31, 0xd6, 0x99, 0xac, 0xcb, 0x4a, 0x5e, 0x35, 0x2a, 0x5d, 0x17, 0x19, 0x7e, 0xdc, + 0xf2, 0x39, 0xdd, 0x07, 0x20, 0x4f, 0xe3, 0x42, 0x1a, 0x49, 0x5d, 0x88, 0x31, 0x17, 0xf1, 0xba, 0x3e, 0x1e, 0x37, + 0xba, 0x5e, 0xb2, 0x67, 0xe3, 0x27, 0xd3, 0x37, 0x59, 0x98, 0x0d, 0x04, 0x19, 0x55, 0x4b, 0x2e, 0x5a, 0xa6, 0x9c, + 0xca, 0x24, 0x00, 0x7d, 0x3c, 0x7b, 0x8c, 0x1d, 0x8c, 0xc7, 0x64, 0xd3, 0x16, 0x0f, 0xf0, 0x70, 0xb9, 0x0e, 0x0b, + 0x32, 0xd3, 0x75, 0x44, 0x81, 0xe0, 0xb7, 0x55, 0x00, 0x48, 0x8e, 0xb6, 0x2a, 0xc3, 0xa5, 0xb1, 0x67, 0xe3, 0x09, + 0x95, 0xd8, 0xed, 0x90, 0xd4, 0x5e, 0x85, 0x6e, 0xe6, 0xa5, 0xef, 0x51, 0x24, 0x8d, 0xcb, 0xd2, 0x4e, 0xa5, 0x52, + 0xed, 0x99, 0x99, 0xeb, 0x1a, 0xc4, 0x60, 0x08, 0x75, 0xdd, 0xa5, 0x57, 0xf7, 0x6e, 0x73, 0xad, 0xd9, 0x0e, 0x78, + 0xaf, 0x41, 0x33, 0x94, 0xbc, 0xc5, 0xbc, 0x75, 0x45, 0xd4, 0x74, 0xb5, 0x06, 0xb3, 0x62, 0x94, 0x2d, 0x45, 0xe9, + 0x9a, 0x82, 0x52, 0x30, 0xba, 0x58, 0x7b, 0x0b, 0xf7, 0x8d, 0x6c, 0x5c, 0x58, 0x32, 0xbd, 0x5a, 0x94, 0x94, 0x50, + 0xdd, 0x54, 0x8c, 0x94, 0x30, 0x52, 0x1a, 0x9e, 0xca, 0xf7, 0x02, 0x8f, 0xf3, 0x3c, 0x88, 0x5a, 0x5e, 0x60, 0xc7, + 0x15, 0x39, 0x06, 0x47, 0x2f, 0x93, 0xd3, 0x50, 0xe0, 0x1f, 0x33, 0x05, 0x62, 0x3a, 0x54, 0xf7, 0x1b, 0xdc, 0xfc, + 0xff, 0x28, 0x58, 0xe0, 0xf1, 0xad, 0x97, 0xb8, 0x8d, 0xfe, 0x51, 0xf8, 0xb4, 0xf4, 0xb9, 0xf4, 0x5d, 0x5d, 0x3c, + 0x69, 0x6f, 0x36, 0x4a, 0x96, 0x59, 0x9e, 0xbe, 0x95, 0x29, 0x07, 0x91, 0x19, 0x5a, 0x83, 0xb2, 0x23, 0xd1, 0xb8, + 0xe1, 0x81, 0x11, 0x63, 0xe3, 0xc6, 0xf7, 0x63, 0x06, 0xb2, 0x61, 0xb0, 0xfa, 0x66, 0xa9, 0x4c, 0xd6, 0x57, 0x80, + 0x29, 0xa2, 0xe4, 0x27, 0x2f, 0x73, 0x0e, 0x4f, 0xa1, 0xbe, 0x7e, 0x81, 0xdb, 0x5c, 0xe9, 0xfb, 0x9c, 0xff, 0x98, + 0xd1, 0x1f, 0x11, 0xe8, 0x24, 0x5e, 0x81, 0xdc, 0xe3, 0x39, 0xd4, 0x8d, 0x30, 0xb5, 0x1c, 0x83, 0x03, 0x21, 0x1a, + 0x88, 0xa8, 0x58, 0xa0, 0xa0, 0x2e, 0x0c, 0xb0, 0x86, 0xba, 0x60, 0x0e, 0xcf, 0x73, 0x99, 0x7c, 0x9c, 0x1a, 0x9f, + 0xf9, 0x61, 0x8c, 0x31, 0x93, 0x83, 0x41, 0x58, 0xcd, 0x82, 0xe1, 0x78, 0x34, 0x39, 0x78, 0x06, 0xe7, 0x76, 0x30, + 0x0e, 0xc8, 0x20, 0xa8, 0xcb, 0x55, 0x2c, 0x68, 0x79, 0x7d, 0x69, 0xcb, 0xc0, 0x8f, 0xeb, 0x60, 0xf0, 0x8f, 0xc2, + 0x53, 0xbc, 0x83, 0xe6, 0xe4, 0x4c, 0x86, 0x60, 0x63, 0xbf, 0x26, 0x20, 0x29, 0xeb, 0x69, 0x7e, 0x52, 0x1f, 0x6e, + 0x4c, 0x69, 0xff, 0xcc, 0xe1, 0x05, 0x87, 0x1d, 0x12, 0x28, 0x90, 0xc6, 0xd3, 0x6c, 0xf4, 0x5a, 0x29, 0x72, 0xdf, + 0x15, 0x1c, 0xee, 0xcc, 0x3d, 0x67, 0x7a, 0xe4, 0x14, 0x12, 0xcd, 0x2c, 0xe0, 0x46, 0xfe, 0x5a, 0x5c, 0xc7, 0x79, + 0x96, 0xee, 0x35, 0xdf, 0xec, 0x95, 0x77, 0xa2, 0x8a, 0x6f, 0x47, 0x81, 0xb1, 0x26, 0xe4, 0xbe, 0xea, 0x09, 0xd0, + 0x13, 0x60, 0x0b, 0x80, 0x01, 0xf1, 0x8e, 0x99, 0xc9, 0x8c, 0x47, 0xe0, 0x11, 0xd8, 0xf4, 0x81, 0x2c, 0xee, 0x9c, + 0x4b, 0x92, 0xbf, 0x99, 0x4a, 0x7b, 0xd5, 0x2b, 0x77, 0x0a, 0xb2, 0x5e, 0x6d, 0xe5, 0xae, 0x5b, 0x9f, 0x7d, 0xd3, + 0xe1, 0x15, 0x78, 0x2e, 0xc1, 0x2d, 0xb2, 0xdf, 0x6f, 0x0a, 0x2a, 0x85, 0x51, 0x11, 0xef, 0x24, 0xd7, 0xe8, 0xdf, + 0xee, 0x8d, 0x8d, 0x22, 0xb9, 0xe5, 0xc3, 0x03, 0xa8, 0x33, 0x79, 0x57, 0xdc, 0xce, 0x21, 0x6a, 0xeb, 0x6e, 0x3c, + 0xb0, 0xda, 0xa0, 0x5d, 0xd6, 0x1c, 0xc1, 0x85, 0x17, 0x7b, 0x19, 0x8c, 0x05, 0xce, 0xca, 0x48, 0xa9, 0x71, 0x0d, + 0xa9, 0x05, 0x9f, 0xe4, 0xe9, 0x3d, 0x64, 0xa9, 0x27, 0x41, 0x91, 0xe3, 0x59, 0x0c, 0x99, 0xc6, 0xdb, 0xc0, 0xe3, + 0x77, 0x32, 0x04, 0x69, 0xda, 0x76, 0xdb, 0x1c, 0x81, 0xb2, 0x7b, 0x60, 0x4a, 0x52, 0xd7, 0xc6, 0xd4, 0x40, 0x43, + 0xed, 0xa1, 0x46, 0x2a, 0xe2, 0xec, 0xe8, 0x0d, 0xe8, 0x10, 0xc1, 0xf7, 0x3b, 0xcd, 0xca, 0x8e, 0x17, 0x13, 0x82, + 0x27, 0xef, 0xcb, 0xdb, 0xac, 0xac, 0xca, 0xe8, 0x7d, 0x8a, 0x86, 0x50, 0x89, 0x14, 0xd1, 0x2b, 0x88, 0xa7, 0x57, + 0xe2, 0xef, 0x32, 0xfa, 0x39, 0xa5, 0x71, 0x9a, 0x62, 0xfa, 0x8b, 0x02, 0x7e, 0x3e, 0x07, 0x54, 0x47, 0xdc, 0x09, + 0xd1, 0xb9, 0x04, 0x7b, 0x35, 0x88, 0x66, 0x55, 0x71, 0xc0, 0xd0, 0x8c, 0x6e, 0x05, 0x45, 0x8c, 0x36, 0xcc, 0xfe, + 0x43, 0x81, 0x42, 0x21, 0x55, 0xcc, 0x77, 0xc2, 0x3e, 0x44, 0x3f, 0x62, 0x91, 0xc7, 0xef, 0x5e, 0x9b, 0x21, 0x8d, + 0xee, 0x24, 0xd5, 0x5b, 0x1b, 0x8f, 0x2d, 0x0c, 0x5c, 0x16, 0x5d, 0xae, 0xe9, 0x59, 0xbc, 0xca, 0xa2, 0x0d, 0xe0, + 0x4f, 0xbc, 0x7b, 0xfd, 0x5c, 0x59, 0x98, 0xbc, 0xc8, 0x40, 0x71, 0x70, 0xfc, 0xee, 0xf5, 0x1b, 0x99, 0xae, 0x73, + 0x1e, 0x9d, 0x49, 0x24, 0xad, 0xc7, 0xef, 0x5e, 0xff, 0x82, 0xe6, 0x5e, 0x3f, 0x17, 0xf0, 0xfe, 0x15, 0xf0, 0x96, + 0x51, 0xbc, 0x86, 0x3e, 0xa9, 0xdf, 0xc9, 0x1a, 0x3b, 0xe5, 0xd5, 0x5a, 0x46, 0xbf, 0xa6, 0xb5, 0x27, 0xad, 0xfa, + 0x67, 0xe1, 0x53, 0x3b, 0x4f, 0xc0, 0x73, 0x9b, 0x67, 0xe2, 0x63, 0x64, 0x45, 0x3b, 0x41, 0xf4, 0xf5, 0xde, 0xed, + 0x55, 0x2e, 0xca, 0x08, 0x5f, 0x30, 0xb4, 0x0b, 0x8a, 0xf6, 0xf7, 0x6f, 0x6e, 0x6e, 0x46, 0x37, 0x4f, 0x46, 0xb2, + 0xb8, 0xdc, 0x9f, 0x7c, 0xfb, 0xed, 0xb7, 0xfb, 0xf8, 0x36, 0xf8, 0xba, 0xed, 0xf6, 0x5e, 0x11, 0x3e, 0x60, 0x01, + 0x22, 0x54, 0x7f, 0x0d, 0x57, 0x14, 0xd0, 0xc2, 0x0d, 0xbe, 0x0e, 0xbe, 0xd6, 0x87, 0xce, 0xd7, 0x87, 0xe5, 0xf5, + 0xa5, 0x2a, 0xbf, 0xab, 0xe4, 0x83, 0xf1, 0x78, 0xbc, 0x0f, 0x12, 0xa8, 0xaf, 0x07, 0x7c, 0x10, 0x1c, 0x05, 0x83, + 0x0c, 0x2e, 0x34, 0xe5, 0xf5, 0xe5, 0x51, 0xe0, 0x99, 0xe6, 0x36, 0x58, 0x44, 0x07, 0xe2, 0x12, 0xec, 0x5f, 0xd2, + 0xe0, 0xeb, 0x80, 0xb8, 0x94, 0xaf, 0x20, 0xe5, 0xab, 0x83, 0x67, 0x7e, 0xda, 0xff, 0x52, 0x69, 0x4f, 0xfc, 0xb4, + 0x43, 0x4c, 0x7b, 0xf2, 0xdc, 0x4f, 0x3b, 0x52, 0x69, 0x2f, 0xfd, 0xb4, 0xff, 0x5d, 0x0e, 0x20, 0x75, 0xcf, 0xb7, + 0xfe, 0x3b, 0xf7, 0x5a, 0x83, 0xa7, 0x50, 0x94, 0x5d, 0xc5, 0x97, 0x1c, 0x1a, 0x3d, 0xb8, 0xbd, 0xca, 0x69, 0x30, + 0xc0, 0xf6, 0x7a, 0x26, 0x21, 0xde, 0x07, 0x5f, 0xaf, 0x8b, 0x3c, 0x0c, 0xbe, 0x1e, 0x60, 0x21, 0x83, 0xaf, 0x03, + 0xf2, 0xb5, 0x31, 0x90, 0x11, 0x6c, 0x13, 0xb8, 0x50, 0xa4, 0x43, 0x1b, 0x20, 0xcc, 0x97, 0xc6, 0xd5, 0xf4, 0xaf, + 0xa2, 0x3b, 0x1b, 0xde, 0x12, 0x95, 0x9b, 0x6e, 0x50, 0xd3, 0x13, 0xf0, 0x4e, 0x80, 0x46, 0x45, 0xc1, 0x75, 0x5c, + 0x84, 0xc3, 0x61, 0x79, 0x7d, 0x49, 0xc0, 0x2e, 0x73, 0xc5, 0xe3, 0x2a, 0x0a, 0x84, 0x1c, 0xaa, 0x9f, 0x81, 0x8a, + 0x7c, 0x15, 0x20, 0x20, 0x12, 0xfc, 0x17, 0xd4, 0xf4, 0x9d, 0x64, 0x9b, 0x60, 0x78, 0xc3, 0xcf, 0x3f, 0x66, 0xd5, + 0x50, 0x89, 0x16, 0xaf, 0x05, 0x85, 0x1f, 0xf0, 0xd7, 0x55, 0x1d, 0xfd, 0x05, 0x6e, 0xdc, 0x4d, 0x0d, 0xfb, 0x3b, + 0xe9, 0x58, 0xd4, 0x77, 0x72, 0x9e, 0x2d, 0xa6, 0xad, 0x03, 0xfd, 0x44, 0x92, 0x6a, 0x9e, 0x0d, 0x82, 0x61, 0x30, + 0xe0, 0x0b, 0x76, 0x22, 0xe7, 0xdc, 0x33, 0x9f, 0x7a, 0x24, 0xfd, 0x69, 0x9e, 0x65, 0x03, 0xf0, 0x4d, 0x41, 0x7e, + 0x64, 0xff, 0xbf, 0xe7, 0x43, 0x14, 0x1e, 0x0e, 0x1e, 0xed, 0x93, 0x59, 0xb0, 0xba, 0x45, 0x8f, 0xce, 0x28, 0xc8, + 0xc4, 0x92, 0x17, 0x59, 0xe5, 0x2d, 0x95, 0xbb, 0x75, 0xdb, 0xcb, 0xe3, 0xde, 0xb3, 0x79, 0x15, 0x8b, 0x40, 0x9d, + 0x73, 0xa0, 0x78, 0x43, 0xd9, 0x53, 0xd9, 0x94, 0x90, 0x6a, 0x43, 0xde, 0xb0, 0x1c, 0xb0, 0xe0, 0xb0, 0x37, 0x1c, + 0xee, 0x05, 0x03, 0xa7, 0xce, 0x1d, 0x04, 0x7b, 0xc3, 0xe1, 0x51, 0xe0, 0xee, 0x43, 0xd9, 0xc8, 0xdd, 0x19, 0x69, + 0xc1, 0xfe, 0x59, 0x84, 0x25, 0x05, 0xf1, 0x98, 0xd4, 0xe2, 0x2f, 0x0d, 0x2e, 0x33, 0x00, 0xe8, 0x23, 0x25, 0x01, + 0x33, 0xb0, 0x32, 0x03, 0x08, 0xcd, 0x4d, 0x63, 0x76, 0x06, 0xcc, 0x23, 0x70, 0xcc, 0x23, 0x64, 0x1c, 0x00, 0xb1, + 0x24, 0xc0, 0xb9, 0x0b, 0xa2, 0x58, 0x17, 0xf2, 0x08, 0x40, 0xef, 0xf1, 0x27, 0x31, 0xa5, 0x60, 0x92, 0x8e, 0x55, + 0x08, 0x82, 0x38, 0x3e, 0xbb, 0x16, 0xad, 0xc9, 0x59, 0xa2, 0x83, 0x19, 0x49, 0x80, 0x0d, 0x31, 0xb0, 0x73, 0x70, + 0x3f, 0x07, 0xa5, 0x87, 0xd5, 0x3b, 0x21, 0x17, 0x7c, 0xc7, 0x3d, 0xd9, 0x2c, 0x5c, 0x3d, 0xe1, 0x20, 0xb8, 0xe3, + 0x9a, 0x05, 0x18, 0x55, 0xc5, 0xba, 0xac, 0x78, 0xfa, 0xe1, 0x6e, 0x05, 0xb1, 0xef, 0x70, 0x40, 0xdf, 0xc9, 0x3c, + 0x4b, 0xee, 0x42, 0x67, 0xcf, 0xb5, 0x51, 0xe9, 0x3f, 0x7c, 0x78, 0xf3, 0x73, 0x04, 0x22, 0xc7, 0xda, 0x50, 0xfa, + 0x3b, 0x8e, 0x67, 0x93, 0x1f, 0xe1, 0xc9, 0xdf, 0xd8, 0x77, 0xdc, 0x9e, 0x1e, 0xfd, 0x3e, 0xd4, 0x4d, 0xef, 0xf8, + 0xec, 0x8e, 0x8f, 0x5c, 0x71, 0xa8, 0xae, 0x70, 0x5f, 0xdf, 0xac, 0x7d, 0x23, 0xa4, 0x87, 0xe7, 0x99, 0xf2, 0xc6, + 0xfc, 0x68, 0x07, 0xc3, 0x20, 0x98, 0x6a, 0xa1, 0x24, 0x44, 0xdd, 0x60, 0x4a, 0xc0, 0x10, 0xed, 0xe9, 0x65, 0x35, + 0x45, 0xce, 0x4d, 0x8d, 0x2c, 0xbc, 0x1f, 0x30, 0x2d, 0x74, 0x68, 0xe4, 0x50, 0x7e, 0x70, 0x38, 0x61, 0xcc, 0xc2, + 0x6f, 0x95, 0x30, 0xfd, 0x6a, 0x51, 0x39, 0x07, 0xd1, 0x3d, 0x30, 0xc6, 0x15, 0xbc, 0x80, 0xae, 0xb0, 0xeb, 0xb5, + 0x8a, 0x8a, 0x81, 0xe0, 0x71, 0xc8, 0x01, 0x7a, 0xd8, 0x05, 0x2d, 0x2b, 0x4b, 0x75, 0xab, 0x72, 0x96, 0x2a, 0xea, + 0x32, 0x94, 0x95, 0xb1, 0xc2, 0x7c, 0x2f, 0xd9, 0x0f, 0x05, 0x7a, 0x96, 0x4f, 0x45, 0x17, 0xbc, 0x10, 0x4a, 0xb0, + 0x5c, 0xd7, 0x3b, 0x11, 0x88, 0x3a, 0x3f, 0xf4, 0xae, 0xfa, 0x1a, 0xc7, 0x8e, 0xa7, 0x6f, 0x64, 0xca, 0xb5, 0x09, + 0x85, 0xe6, 0xf3, 0xa5, 0xaf, 0x98, 0x28, 0xd8, 0x0d, 0xf4, 0xab, 0x6d, 0xa3, 0xcf, 0xee, 0xd6, 0x7a, 0x33, 0x28, + 0xd1, 0x31, 0xaf, 0x51, 0x70, 0xad, 0x14, 0x0a, 0x46, 0x7b, 0x1b, 0x7f, 0x86, 0x23, 0xb7, 0xba, 0x3d, 0xf4, 0x7e, + 0xab, 0xe2, 0xcb, 0xb7, 0xe8, 0xdb, 0x69, 0x7f, 0x8e, 0x2a, 0xf9, 0xeb, 0x6a, 0x05, 0x3e, 0x54, 0x10, 0x59, 0xc4, + 0xe2, 0xd2, 0x42, 0x3d, 0xa7, 0xef, 0x8e, 0xdf, 0x82, 0x1f, 0x25, 0xfe, 0xfe, 0xed, 0xfb, 0xa0, 0x26, 0xd3, 0x78, + 0x56, 0x98, 0x0f, 0x6d, 0x0e, 0x08, 0x4d, 0xe2, 0xd2, 0xec, 0xfb, 0x59, 0xdc, 0x64, 0xdf, 0x35, 0x5b, 0x4f, 0x8b, + 0x26, 0x92, 0x94, 0xe1, 0xf6, 0xc1, 0x80, 0x40, 0x1f, 0x20, 0x8a, 0xb3, 0x2f, 0x68, 0x0c, 0x69, 0x3e, 0xb3, 0xef, + 0x47, 0xc4, 0x7b, 0xb9, 0x13, 0x42, 0x8c, 0x2b, 0x2c, 0x1a, 0x3d, 0xe4, 0x33, 0x1e, 0x29, 0xc3, 0xa2, 0xf7, 0x98, + 0x40, 0x9c, 0xe1, 0xb4, 0x7a, 0x8f, 0x98, 0xc7, 0x78, 0x37, 0xd0, 0xb2, 0x87, 0x28, 0xa3, 0x2e, 0x7b, 0xc3, 0xe2, + 0xfb, 0xe3, 0x3a, 0xcc, 0xac, 0xe5, 0xe5, 0x10, 0xfe, 0x06, 0xda, 0x00, 0x9c, 0x72, 0x64, 0xf9, 0x2a, 0xb3, 0xd1, + 0xd5, 0x12, 0xd3, 0x9b, 0x08, 0x62, 0xf1, 0xe8, 0x74, 0x58, 0xbb, 0x3a, 0x55, 0xef, 0x6a, 0xe7, 0x33, 0xd1, 0xab, + 0x40, 0x2b, 0xd7, 0xb6, 0xc7, 0x43, 0xb8, 0x4b, 0x2d, 0xad, 0xb0, 0x11, 0xe5, 0x5c, 0x3c, 0xdd, 0x39, 0x36, 0x27, + 0xa0, 0xc1, 0x95, 0x4c, 0x01, 0x38, 0x4b, 0xab, 0xd1, 0xa8, 0x11, 0xf6, 0x59, 0x39, 0x9f, 0xc3, 0xd6, 0x42, 0x3c, + 0x2d, 0x00, 0xc3, 0x6d, 0x62, 0x50, 0xf2, 0x6e, 0x0c, 0xca, 0xe9, 0x47, 0x05, 0x6f, 0x1d, 0x9c, 0x95, 0xcb, 0x38, + 0x95, 0x37, 0x80, 0xc5, 0x18, 0xf8, 0xa9, 0x58, 0xaa, 0x97, 0x90, 0x2c, 0x79, 0xf2, 0x11, 0xad, 0x36, 0xd2, 0x00, + 0xb8, 0xca, 0xa9, 0xb1, 0xdc, 0x53, 0x20, 0xa1, 0xae, 0x14, 0x95, 0x10, 0x57, 0x55, 0x9c, 0x2c, 0x4f, 0x31, 0x35, + 0xdc, 0x40, 0x2f, 0xa2, 0x40, 0xae, 0xb8, 0x00, 0x92, 0x9e, 0xb3, 0x7f, 0x65, 0x1a, 0x6b, 0xfc, 0xb9, 0x44, 0x01, + 0x93, 0x46, 0x0d, 0xc6, 0x4a, 0xd9, 0x4b, 0x69, 0xa2, 0xbd, 0x05, 0x41, 0xed, 0x5e, 0xfe, 0x05, 0x75, 0x3f, 0x87, + 0x56, 0x84, 0x0d, 0x30, 0x44, 0x79, 0x8e, 0x3b, 0x34, 0xb5, 0x4b, 0xce, 0x03, 0x46, 0x74, 0xde, 0x67, 0xb5, 0xdd, + 0xea, 0xcf, 0x97, 0x80, 0x6d, 0x9a, 0x1a, 0x9f, 0xc2, 0x30, 0x21, 0x26, 0x36, 0xb0, 0x55, 0x56, 0xda, 0x0d, 0x65, + 0xda, 0x49, 0x97, 0xcc, 0x6b, 0xe1, 0x34, 0xef, 0x31, 0xb6, 0x1c, 0xa9, 0xdc, 0xfd, 0x7e, 0x68, 0x7e, 0xb2, 0x9c, + 0x3e, 0xd7, 0x21, 0x9b, 0xbd, 0xf1, 0xa0, 0x39, 0xd1, 0xea, 0xaa, 0x8e, 0x7e, 0x40, 0x07, 0x60, 0xa6, 0x2d, 0x40, + 0xa6, 0x0b, 0x36, 0xed, 0x2b, 0x51, 0x71, 0x49, 0xc2, 0x52, 0x49, 0x60, 0x67, 0x37, 0x25, 0x3b, 0x9b, 0x80, 0x78, + 0x86, 0xbb, 0x9e, 0x16, 0x3b, 0x21, 0x4d, 0x78, 0x8b, 0xbd, 0x04, 0x44, 0x1d, 0xaa, 0xba, 0x84, 0x6c, 0x8c, 0xa1, + 0x8b, 0x7f, 0x51, 0x0a, 0x13, 0xd6, 0x32, 0xa9, 0x4a, 0x4c, 0x10, 0xa4, 0x72, 0xb7, 0x45, 0x60, 0x89, 0x82, 0x1d, + 0xc0, 0xde, 0xbb, 0x51, 0x37, 0xa3, 0xa6, 0xaa, 0x53, 0x2f, 0xc1, 0xc7, 0x69, 0xd6, 0x55, 0x90, 0x59, 0xd8, 0x55, + 0xb1, 0xe6, 0x81, 0x8e, 0x4d, 0xa5, 0x8c, 0x89, 0xbb, 0xb4, 0xc8, 0x10, 0x0f, 0x18, 0x63, 0xe9, 0x42, 0x20, 0xdf, + 0x6c, 0x77, 0xdc, 0xf4, 0x04, 0xa1, 0x9f, 0xb0, 0xa1, 0x04, 0x6e, 0x3a, 0xdb, 0x53, 0xd3, 0xcc, 0x07, 0x44, 0x1c, + 0x06, 0x14, 0x48, 0x36, 0x0e, 0x69, 0x8e, 0xf4, 0x05, 0x49, 0x13, 0x06, 0x86, 0x56, 0x3c, 0x27, 0xc8, 0x8a, 0x42, + 0xcf, 0xd6, 0x55, 0x1b, 0xe7, 0xca, 0x30, 0x47, 0x4b, 0x4e, 0x85, 0xcf, 0x09, 0x32, 0xb1, 0x7b, 0xda, 0x66, 0x26, + 0xc3, 0x51, 0xb2, 0xc0, 0xfc, 0x0a, 0xa2, 0xc4, 0x9d, 0x69, 0x56, 0xe5, 0x60, 0x5c, 0xc0, 0x02, 0xad, 0x7c, 0x0f, + 0xea, 0xc6, 0x1a, 0xda, 0x68, 0x18, 0x62, 0xb7, 0x3f, 0xc1, 0x7e, 0xad, 0x9d, 0xd6, 0x65, 0x8a, 0xe5, 0x65, 0x0a, + 0xd1, 0x5e, 0xc8, 0xfc, 0x46, 0x91, 0xe8, 0x4e, 0x11, 0x86, 0x84, 0x75, 0x94, 0x3d, 0x69, 0x53, 0x03, 0xe8, 0xa9, + 0x17, 0xf0, 0xbc, 0x73, 0x2d, 0xc3, 0x2e, 0xd2, 0xfd, 0x55, 0xc1, 0xa7, 0x74, 0x83, 0x20, 0x45, 0x6f, 0x52, 0x30, + 0xe7, 0xf5, 0x28, 0xa9, 0x37, 0xa7, 0x2d, 0x33, 0xaa, 0x8e, 0x8a, 0x90, 0x72, 0x82, 0xff, 0xe4, 0xa5, 0xd4, 0xc4, + 0x26, 0x4c, 0xf0, 0xc0, 0x87, 0x79, 0x86, 0x0d, 0xbc, 0xdd, 0xbe, 0x4b, 0xc3, 0xa4, 0xcd, 0x36, 0xa4, 0x20, 0xad, + 0x30, 0x71, 0x31, 0xa0, 0xb2, 0xd7, 0xb8, 0x5f, 0xb0, 0x9d, 0x34, 0x05, 0x0f, 0xc2, 0x46, 0x03, 0x13, 0xb7, 0xba, + 0xf8, 0x3a, 0x4c, 0x68, 0xb8, 0xa4, 0xda, 0xd9, 0x49, 0x4b, 0x9a, 0xdb, 0xeb, 0xf2, 0xc2, 0xf6, 0x41, 0xc7, 0x0e, + 0xeb, 0x1a, 0x1e, 0x68, 0x5e, 0xb3, 0x8b, 0x2b, 0xa6, 0x69, 0xa2, 0xb1, 0x1e, 0x52, 0x96, 0x1c, 0xeb, 0x7a, 0xba, + 0xc2, 0xd5, 0x32, 0xd3, 0xc0, 0xee, 0x12, 0x2f, 0xf4, 0x80, 0x87, 0x1d, 0xae, 0x48, 0x74, 0x81, 0xcd, 0x66, 0xab, + 0x9a, 0x4c, 0xf3, 0xfb, 0xb2, 0xe5, 0x26, 0x20, 0x9c, 0xa5, 0xbe, 0xb9, 0x4f, 0x8e, 0x35, 0x6d, 0xf3, 0x93, 0x00, + 0xc7, 0xdb, 0x2b, 0x20, 0xe9, 0x58, 0x82, 0x2e, 0xbe, 0xa5, 0x3f, 0x88, 0xd4, 0x4c, 0x05, 0xbd, 0x77, 0xbe, 0x48, + 0xdd, 0xfc, 0x02, 0x6c, 0xa3, 0x36, 0xc6, 0x34, 0x2b, 0x5b, 0x87, 0x89, 0xb2, 0xb0, 0x46, 0x16, 0x72, 0x09, 0x3e, + 0x98, 0xbb, 0x4d, 0x9d, 0x1e, 0x77, 0x10, 0x61, 0xbf, 0x8b, 0x1e, 0x8f, 0x30, 0x56, 0xac, 0x41, 0x62, 0x58, 0x85, + 0x35, 0x6d, 0x2e, 0x87, 0x28, 0xa7, 0x66, 0xc9, 0x44, 0x4b, 0xea, 0x53, 0x8a, 0x28, 0x05, 0x73, 0xe3, 0x69, 0xd9, + 0x30, 0x25, 0x44, 0xc8, 0x0a, 0xe9, 0x80, 0x6a, 0x2d, 0xb4, 0x54, 0x13, 0xf4, 0x3a, 0xf4, 0xb2, 0xd0, 0x98, 0x82, + 0xe8, 0x23, 0x32, 0xdc, 0x88, 0x23, 0xa3, 0xbb, 0x63, 0x14, 0x13, 0x08, 0x55, 0xed, 0xe5, 0x85, 0xd5, 0xa7, 0x65, + 0x5b, 0x1d, 0xc4, 0x15, 0x22, 0xdf, 0x77, 0x13, 0xd4, 0x18, 0x05, 0x6d, 0x4e, 0x37, 0xfa, 0x6b, 0x11, 0xfa, 0x76, + 0xe1, 0xd8, 0x8d, 0x82, 0x48, 0x88, 0xc0, 0xea, 0x35, 0x15, 0x03, 0xb2, 0xce, 0x63, 0x17, 0xa1, 0x49, 0x77, 0x0b, + 0x51, 0xde, 0xa8, 0xac, 0x3f, 0xae, 0x43, 0xb2, 0xdd, 0x62, 0x59, 0xe0, 0xcb, 0x7e, 0xba, 0xbe, 0x07, 0xf2, 0xfb, + 0xcd, 0xfa, 0xb3, 0x90, 0xdf, 0xaf, 0xb3, 0x2f, 0x81, 0xfc, 0x7e, 0xb3, 0xfe, 0x9f, 0x86, 0xfc, 0x3e, 0x5d, 0x7b, + 0x90, 0xdf, 0x6a, 0x30, 0x7e, 0x2f, 0x58, 0x70, 0xf2, 0x36, 0xa0, 0x2f, 0x24, 0x0b, 0x4e, 0x5e, 0xbd, 0xf2, 0x8d, + 0x40, 0x84, 0x46, 0xae, 0x37, 0xb2, 0x60, 0xc4, 0x6d, 0x81, 0x57, 0xa8, 0x75, 0xf2, 0x81, 0x8a, 0x32, 0x00, 0x5e, + 0x2f, 0xff, 0x91, 0x55, 0xcb, 0x30, 0xd8, 0x0f, 0xc8, 0xcc, 0x41, 0x82, 0x0e, 0x27, 0x70, 0x7b, 0x43, 0x23, 0xcb, + 0xea, 0x8b, 0xe0, 0xc3, 0x47, 0xa3, 0x51, 0x5c, 0x5c, 0xe2, 0xa5, 0xce, 0x6c, 0x24, 0x04, 0x3c, 0xce, 0x78, 0x69, + 0x43, 0x44, 0x2c, 0xe3, 0xf2, 0x4c, 0xc7, 0x66, 0x29, 0xed, 0x56, 0x84, 0x88, 0xf3, 0x67, 0x80, 0x53, 0x6f, 0xf7, + 0x66, 0x8c, 0xfd, 0x50, 0x1c, 0xb1, 0x0e, 0x20, 0xfb, 0x7c, 0xad, 0xdf, 0x9d, 0xc7, 0x25, 0x7f, 0x17, 0x57, 0x4b, + 0x06, 0xbd, 0x84, 0xbb, 0x88, 0xe0, 0x49, 0xe5, 0xb1, 0x4d, 0x0a, 0xa8, 0x3c, 0xd3, 0x40, 0xe5, 0x1d, 0xef, 0x69, + 0x68, 0x87, 0x45, 0xfb, 0x00, 0x1b, 0xe9, 0x72, 0x06, 0x46, 0x8b, 0x2f, 0xaf, 0xb9, 0xa8, 0x7e, 0x06, 0x3c, 0x75, + 0xc1, 0x0b, 0xb8, 0x25, 0x20, 0x17, 0xdb, 0x70, 0x42, 0xa0, 0xc2, 0xf7, 0xec, 0x50, 0x51, 0x63, 0x8c, 0x68, 0xa2, + 0xd1, 0x6f, 0xbc, 0x09, 0xa1, 0x77, 0x27, 0xe8, 0x8a, 0x30, 0x12, 0xde, 0x5f, 0x6b, 0x7e, 0x96, 0x81, 0xf9, 0xbc, + 0x00, 0x28, 0x0d, 0x84, 0x43, 0x65, 0x4a, 0x6e, 0x81, 0x09, 0x1b, 0x63, 0xae, 0x94, 0xa5, 0x1e, 0x52, 0x29, 0x55, + 0x70, 0xba, 0x82, 0xa6, 0x12, 0x70, 0xb8, 0x23, 0x09, 0x60, 0xa6, 0xb6, 0x30, 0x88, 0x6e, 0x9b, 0xd2, 0x2c, 0x8d, + 0x9c, 0x22, 0xcd, 0xe1, 0x93, 0x52, 0x05, 0x3a, 0x7d, 0x96, 0xc4, 0x15, 0xbf, 0x94, 0x05, 0x84, 0xc2, 0x6d, 0xa5, + 0x50, 0xa4, 0xdf, 0x67, 0x62, 0x7d, 0xc5, 0x8b, 0x2c, 0x39, 0x5b, 0x66, 0x65, 0x05, 0xf9, 0xe6, 0xfa, 0xf4, 0x5b, + 0xd4, 0xd3, 0x02, 0xe7, 0x4d, 0x4d, 0x0a, 0x33, 0xf3, 0x78, 0xac, 0x76, 0x3a, 0xa8, 0x57, 0xbd, 0xd7, 0x06, 0xfb, + 0xbd, 0x39, 0xd1, 0xe3, 0xd6, 0x7a, 0xb0, 0x9a, 0xd4, 0x66, 0xaa, 0x82, 0x38, 0x02, 0xea, 0xc0, 0x8e, 0x70, 0x16, + 0x53, 0xba, 0xb6, 0x08, 0x2a, 0x60, 0xed, 0x80, 0x39, 0x32, 0x71, 0x79, 0x76, 0xa3, 0xe4, 0x27, 0x3d, 0x45, 0x61, + 0xd2, 0x28, 0x56, 0xc8, 0x3e, 0x4b, 0x16, 0xae, 0x59, 0x72, 0x4f, 0xae, 0x75, 0x94, 0x34, 0x30, 0xba, 0xe2, 0xf6, + 0x40, 0x1c, 0x26, 0xed, 0x94, 0xed, 0x76, 0x27, 0x13, 0xb0, 0x06, 0xad, 0x24, 0x88, 0xd6, 0xb1, 0x9c, 0x0d, 0x27, + 0x11, 0x40, 0xa8, 0x68, 0xb2, 0xf6, 0xd7, 0x9a, 0x1b, 0x90, 0xf9, 0x50, 0x7b, 0xfa, 0x39, 0x91, 0xbc, 0x1e, 0x59, + 0xcf, 0x38, 0x4e, 0x4f, 0xfb, 0x1c, 0x0c, 0xb3, 0xfc, 0x21, 0x81, 0x48, 0x30, 0x9d, 0xd3, 0xb3, 0x98, 0x6a, 0x33, + 0x61, 0xc3, 0xa3, 0xd0, 0x2f, 0xfb, 0x4e, 0x03, 0xe0, 0x26, 0x3c, 0x1c, 0x3e, 0x1b, 0x93, 0x5a, 0xdb, 0xac, 0xe3, + 0x02, 0xb2, 0xbf, 0xd5, 0x22, 0x73, 0xcf, 0x76, 0xa1, 0xd1, 0xa6, 0xb7, 0x41, 0xbb, 0x46, 0x2a, 0xee, 0xe9, 0x7e, + 0x4d, 0x6a, 0xb7, 0x60, 0xac, 0x04, 0xe9, 0x0f, 0x75, 0x6a, 0x9d, 0x3d, 0xda, 0x64, 0xba, 0xca, 0xfa, 0x8f, 0xcc, + 0xc6, 0x9b, 0x6b, 0x50, 0x80, 0x5a, 0x2f, 0x25, 0x1f, 0xee, 0xad, 0x23, 0x9b, 0x9e, 0x18, 0x96, 0x75, 0x92, 0x91, + 0x91, 0x7a, 0xe4, 0x2a, 0xfc, 0x56, 0x77, 0x16, 0x7e, 0xcb, 0x93, 0xb0, 0xab, 0x61, 0x8a, 0xc3, 0x37, 0x5d, 0x40, + 0x04, 0x4c, 0x90, 0xeb, 0x87, 0x7f, 0x3c, 0xda, 0x34, 0xc9, 0x52, 0xbd, 0xef, 0x7d, 0x86, 0xbf, 0xb3, 0x14, 0xfe, + 0x56, 0xf5, 0x1f, 0x74, 0x73, 0xc5, 0xab, 0xa5, 0x4c, 0xa3, 0xe0, 0xdd, 0xc9, 0xe9, 0x87, 0x40, 0x23, 0xab, 0xe3, + 0xfd, 0xc2, 0x68, 0x94, 0x0d, 0x86, 0x13, 0x68, 0x58, 0x72, 0x79, 0x89, 0xe0, 0x82, 0x1a, 0x9d, 0xfe, 0x74, 0x29, + 0x6f, 0x8e, 0xf3, 0xdc, 0x67, 0x82, 0x0d, 0xe1, 0xd4, 0x7c, 0x61, 0x83, 0xea, 0x84, 0x20, 0xcb, 0x1b, 0x65, 0xe5, + 0x99, 0xd6, 0xbe, 0xa4, 0x67, 0xe7, 0x77, 0x67, 0x5a, 0xc2, 0x63, 0xd1, 0x1d, 0x9f, 0xff, 0x71, 0x98, 0x66, 0xd7, + 0x7b, 0x48, 0xdd, 0x59, 0x00, 0xa6, 0xf1, 0x39, 0x3f, 0x5f, 0x57, 0x95, 0x14, 0xc3, 0x42, 0xde, 0x04, 0x47, 0x87, + 0xea, 0xc1, 0x64, 0x88, 0xd5, 0x63, 0xb0, 0xf7, 0x5f, 0x49, 0x9e, 0x25, 0x1f, 0x59, 0xf0, 0x68, 0x93, 0xb1, 0xa3, + 0x16, 0x0d, 0x1f, 0xd7, 0xc1, 0x11, 0xb4, 0x75, 0xef, 0x38, 0xcf, 0x0f, 0xf7, 0xd5, 0x17, 0x47, 0x87, 0xfb, 0x69, + 0x76, 0x7d, 0xe4, 0x01, 0xed, 0x3b, 0xbb, 0x59, 0x84, 0x34, 0x73, 0xf7, 0x62, 0x70, 0x90, 0x4d, 0x78, 0x68, 0x39, + 0x09, 0x90, 0xc6, 0x98, 0x30, 0x25, 0x28, 0xc1, 0x09, 0x63, 0x38, 0x37, 0xb7, 0xdb, 0xd0, 0x1a, 0xf5, 0x24, 0x1e, + 0xe2, 0x4d, 0x01, 0x9c, 0x06, 0x66, 0xa1, 0x09, 0xa1, 0x49, 0x4d, 0x42, 0x83, 0xcb, 0x13, 0x13, 0x5a, 0xd4, 0x14, + 0x8e, 0x92, 0x37, 0xf1, 0xca, 0x08, 0xb1, 0xb4, 0x50, 0xc0, 0xb4, 0x7e, 0xd6, 0x18, 0xc7, 0xa8, 0x3d, 0xaa, 0x06, + 0x29, 0xab, 0x57, 0xde, 0x37, 0xb0, 0x20, 0xb7, 0x0c, 0x2b, 0x1a, 0xb4, 0x28, 0x04, 0xc8, 0x1d, 0x7d, 0x71, 0x19, + 0xa7, 0xe1, 0xbc, 0xa4, 0x72, 0x41, 0xd8, 0x51, 0xb8, 0x41, 0xb6, 0xb9, 0x54, 0x54, 0x38, 0x92, 0xb5, 0x83, 0xad, + 0x54, 0xb3, 0x73, 0xf4, 0x68, 0x23, 0x10, 0x29, 0xb1, 0x64, 0x47, 0xcd, 0xf9, 0xaa, 0xe2, 0xf3, 0xe1, 0x92, 0x83, + 0x7f, 0x4d, 0xb0, 0xf7, 0x5f, 0xe9, 0x79, 0x6e, 0x27, 0x45, 0xad, 0xc8, 0x65, 0x2c, 0xd2, 0x9c, 0x7f, 0x88, 0xcf, + 0x7f, 0xc0, 0x3c, 0x2f, 0xce, 0xf3, 0xe7, 0x90, 0xa1, 0x0e, 0x8e, 0x1e, 0x6d, 0x92, 0x6a, 0xf4, 0xf2, 0xed, 0x87, + 0xd7, 0x1f, 0xfe, 0x79, 0xf6, 0xfc, 0xf8, 0xc3, 0xcb, 0xef, 0x4f, 0xde, 0xbf, 0x7e, 0x79, 0x3a, 0xb7, 0x0e, 0xad, + 0x0a, 0x27, 0x8d, 0x2c, 0xb6, 0x5b, 0x97, 0xef, 0xd7, 0xb7, 0x2f, 0x5e, 0xbe, 0x7a, 0xfd, 0xf6, 0xe5, 0x8b, 0x5a, + 0xcd, 0x65, 0xbb, 0x21, 0xb0, 0x43, 0xe3, 0x4c, 0xf0, 0x02, 0x8a, 0xd7, 0xd1, 0x1a, 0xb1, 0xd9, 0x1a, 0xde, 0xaf, + 0xd9, 0x74, 0x1d, 0x09, 0x01, 0x16, 0xd9, 0x9e, 0xde, 0x2c, 0xd0, 0x70, 0x69, 0x36, 0x8e, 0xbf, 0xc4, 0xfc, 0xde, + 0xbc, 0xc4, 0xef, 0xde, 0xcb, 0x1b, 0xd3, 0x15, 0x3d, 0x42, 0x0a, 0xb9, 0x6b, 0xf6, 0xfc, 0x8f, 0x43, 0x5f, 0x5a, + 0x86, 0x22, 0x05, 0x55, 0x2e, 0xfc, 0xaa, 0x83, 0x3d, 0x6d, 0xb9, 0x17, 0x40, 0xe0, 0x89, 0xe0, 0xe8, 0x70, 0xdf, + 0xcf, 0x7d, 0xf4, 0x47, 0xf4, 0xb3, 0xd7, 0x39, 0x2c, 0x15, 0xc6, 0xa1, 0x99, 0xb6, 0x73, 0xba, 0x41, 0x68, 0x24, + 0x77, 0xfe, 0xa9, 0x15, 0x64, 0xc8, 0x95, 0x24, 0x91, 0x9d, 0x44, 0x65, 0x91, 0x62, 0x4a, 0xfb, 0x43, 0xff, 0x75, + 0x7d, 0xc6, 0x1b, 0x3e, 0x17, 0xa5, 0x2c, 0x02, 0xe8, 0x47, 0x3b, 0x5e, 0xc4, 0x9e, 0x17, 0x97, 0x05, 0x7b, 0xd4, + 0x49, 0xde, 0x61, 0x44, 0xf6, 0xdb, 0x9f, 0x7a, 0x1d, 0xfb, 0x83, 0xb8, 0x1f, 0x7b, 0xba, 0x33, 0x2d, 0xf2, 0x62, + 0x1b, 0x78, 0x7f, 0x5c, 0x8f, 0xf9, 0x49, 0x46, 0xff, 0x21, 0xe9, 0x65, 0x4c, 0xaf, 0x62, 0x7a, 0x2a, 0x16, 0x75, + 0xe7, 0xec, 0xd8, 0x98, 0x31, 0x94, 0x4f, 0x43, 0x40, 0x9e, 0xd0, 0xf7, 0x01, 0xcd, 0x25, 0x67, 0x23, 0xad, 0x2b, + 0xfb, 0x10, 0x17, 0x97, 0xdc, 0x84, 0x6a, 0x31, 0x6f, 0x2b, 0x3d, 0x2a, 0xc4, 0x1b, 0x16, 0x80, 0x65, 0xe9, 0x69, + 0x93, 0x82, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xae, 0xad, 0xac, 0xe4, 0x0a, 0x78, 0xf5, 0xff, 0xd3, + 0xdc, 0xb3, 0x2e, 0xb7, 0x6d, 0x5c, 0xfd, 0xbf, 0x4f, 0x01, 0xc3, 0xae, 0x03, 0xd8, 0x00, 0x04, 0x90, 0xa2, 0x28, + 0x93, 0x22, 0x95, 0xc4, 0x76, 0xa6, 0xea, 0x28, 0x71, 0xc6, 0x56, 0x3d, 0x6d, 0x14, 0x8d, 0x08, 0x82, 0x4b, 0x12, + 0x35, 0x08, 0x60, 0x00, 0x50, 0xa2, 0x42, 0xa3, 0xcf, 0xd2, 0x67, 0xe9, 0x93, 0x7d, 0x73, 0xce, 0x5e, 0xb0, 0xb8, + 0x91, 0x54, 0xec, 0xb4, 0xdf, 0xa4, 0xaa, 0x89, 0xc5, 0xee, 0x62, 0xf7, 0xec, 0xee, 0xd9, 0x73, 0x3f, 0xee, 0x82, + 0xc9, 0x5e, 0x0c, 0x8d, 0x1c, 0xf6, 0xb9, 0xcf, 0x9f, 0x89, 0x85, 0x5b, 0x12, 0x08, 0x3e, 0x2b, 0x8b, 0x16, 0x8b, + 0x80, 0x68, 0x2a, 0x4f, 0x1e, 0xa2, 0x1a, 0xe2, 0x33, 0xe7, 0x4f, 0x6c, 0x1e, 0xb1, 0x53, 0xcf, 0xdb, 0x8e, 0x16, + 0x9f, 0x31, 0x11, 0x21, 0xed, 0x28, 0xe5, 0x8a, 0xb2, 0xd9, 0x3b, 0x54, 0x6f, 0xb0, 0x75, 0x29, 0x8e, 0xae, 0x39, + 0x8b, 0xd6, 0xd3, 0x80, 0x98, 0xb8, 0xdd, 0xe1, 0x93, 0xdb, 0xe9, 0x7a, 0x3a, 0x85, 0x2c, 0x2d, 0x4f, 0x6c, 0x03, + 0xe2, 0xce, 0x44, 0x29, 0xf2, 0x83, 0xb9, 0x3e, 0x84, 0x49, 0x59, 0x59, 0x75, 0xf8, 0x60, 0x2b, 0x02, 0xa2, 0x1e, + 0xfa, 0x81, 0x0c, 0x78, 0xbf, 0x86, 0x53, 0x3b, 0x52, 0x3f, 0xc0, 0xee, 0x4b, 0xd5, 0x61, 0xd3, 0xd1, 0x1f, 0x5d, + 0xab, 0x1f, 0x10, 0xc6, 0x98, 0xbd, 0xf8, 0x35, 0xdd, 0xbd, 0xaa, 0xa1, 0x52, 0xa5, 0xf7, 0x1a, 0xf3, 0x18, 0x80, + 0xd0, 0xf7, 0x8d, 0xef, 0x2e, 0xc2, 0x28, 0xcd, 0x7c, 0x4f, 0xbd, 0x19, 0x5e, 0xf8, 0xda, 0xf5, 0x2a, 0xd3, 0xf4, + 0x1b, 0xc3, 0xcb, 0xe4, 0x14, 0x28, 0x1c, 0x61, 0x62, 0x06, 0x94, 0xb6, 0x4a, 0xf2, 0x09, 0xda, 0x59, 0x91, 0xa3, + 0x66, 0xac, 0xe4, 0x65, 0x23, 0xa8, 0x57, 0xc9, 0xa7, 0x82, 0x89, 0xa1, 0x54, 0x6c, 0xa9, 0x0f, 0x29, 0xa7, 0xf2, + 0x7a, 0xbd, 0xc5, 0xab, 0x3c, 0x2b, 0x6e, 0x4b, 0x8c, 0x01, 0xcc, 0x1d, 0x67, 0xe8, 0xf3, 0x13, 0xd9, 0xe8, 0xb3, + 0x74, 0xef, 0x4e, 0xbe, 0x2b, 0xd3, 0x05, 0x70, 0x7f, 0x83, 0xc5, 0x45, 0x18, 0x65, 0x0a, 0x04, 0xb6, 0x81, 0x2f, + 0x4e, 0xaa, 0x46, 0x62, 0xac, 0x57, 0x4d, 0xcf, 0x19, 0x32, 0xf8, 0x1e, 0x2f, 0x3f, 0x8d, 0x85, 0x37, 0x2b, 0x45, + 0xb0, 0xa0, 0xcc, 0x42, 0x08, 0x0b, 0x98, 0x45, 0x97, 0xd1, 0x7d, 0x55, 0x0f, 0xf2, 0x7a, 0xb2, 0xff, 0xee, 0xd5, + 0x38, 0x99, 0xcc, 0xb3, 0xfa, 0x69, 0x2c, 0x31, 0x29, 0x27, 0x74, 0x2a, 0x67, 0x0a, 0x0d, 0x3f, 0x38, 0x0d, 0x93, + 0x81, 0x9d, 0x18, 0xde, 0x05, 0x80, 0x92, 0xd8, 0x35, 0x3d, 0xc9, 0x6f, 0x79, 0xea, 0x64, 0x9e, 0xb8, 0x58, 0xba, + 0x9c, 0x01, 0xbb, 0x86, 0xf1, 0x3a, 0xc3, 0x50, 0xbb, 0x30, 0x00, 0x92, 0xab, 0x0a, 0x86, 0xee, 0x04, 0x2c, 0x5d, + 0x90, 0x89, 0xb9, 0xaa, 0xf8, 0xb3, 0x7a, 0x19, 0x23, 0x7a, 0x01, 0x79, 0x21, 0x7e, 0x47, 0x41, 0x15, 0x3c, 0x26, + 0x6c, 0x1a, 0x9e, 0x51, 0xc4, 0xa9, 0xd7, 0x3c, 0x54, 0xe8, 0x34, 0x60, 0x06, 0x8f, 0xf6, 0x33, 0xd4, 0x82, 0xc6, + 0xc9, 0x42, 0xf8, 0xcd, 0xd2, 0x34, 0x27, 0xcf, 0xb6, 0x61, 0x7e, 0xfe, 0x6c, 0x9b, 0xe6, 0xa3, 0x67, 0x5b, 0x17, + 0x28, 0xb9, 0x5c, 0x85, 0x89, 0x16, 0x8e, 0x3a, 0xc5, 0xf4, 0x60, 0x53, 0xd1, 0x72, 0x05, 0x35, 0xf5, 0x23, 0xa6, + 0x8f, 0x8f, 0x13, 0x7f, 0xe5, 0x26, 0x0f, 0x54, 0x7d, 0x6f, 0xc8, 0x3a, 0x7e, 0x5d, 0x55, 0x28, 0x5e, 0xa7, 0xf3, + 0xa5, 0x28, 0x5e, 0x55, 0xbe, 0x15, 0x65, 0x84, 0x4d, 0x4e, 0xe8, 0x30, 0xe1, 0x5b, 0xb7, 0xea, 0x4b, 0x62, 0xcd, + 0x48, 0xe6, 0xfa, 0x01, 0x6d, 0x32, 0xe4, 0xc9, 0xe9, 0x6b, 0xb3, 0x49, 0xcb, 0xb3, 0x09, 0xcb, 0xdb, 0x05, 0x27, + 0x43, 0x31, 0x3e, 0x1d, 0x37, 0xce, 0x0c, 0x93, 0x56, 0x35, 0x2f, 0x20, 0x7d, 0xf7, 0x5f, 0x85, 0x3e, 0x01, 0xe8, + 0x87, 0x00, 0x7d, 0x12, 0x7a, 0xd1, 0x8c, 0xfc, 0xed, 0xfd, 0x85, 0xc8, 0x92, 0x05, 0x02, 0x9f, 0x09, 0xdb, 0x87, + 0x29, 0x92, 0x0b, 0x09, 0x92, 0x0a, 0x34, 0x9f, 0x95, 0x22, 0x76, 0x4c, 0x92, 0xab, 0xca, 0x39, 0x1d, 0x3b, 0x99, + 0xd1, 0x51, 0x8f, 0x22, 0x6c, 0x95, 0xe4, 0x67, 0x47, 0xb4, 0x36, 0xbd, 0xdc, 0x68, 0x25, 0x00, 0x43, 0x02, 0x33, + 0x2c, 0xa0, 0x00, 0x09, 0x3d, 0x47, 0x4e, 0xc1, 0x3f, 0x58, 0x2b, 0x14, 0xab, 0x3b, 0xe7, 0x65, 0xca, 0x04, 0x5b, + 0xa9, 0xe3, 0x33, 0x4c, 0xd1, 0x05, 0xd7, 0x33, 0x04, 0xf5, 0x38, 0x3b, 0xa2, 0x8f, 0x4a, 0xe5, 0x00, 0x14, 0x9d, + 0x70, 0x4e, 0x6e, 0xc0, 0x3a, 0x78, 0xd4, 0xc9, 0x80, 0x8c, 0xf0, 0x50, 0xea, 0xe6, 0xaa, 0xb2, 0x62, 0x94, 0x10, + 0x8b, 0x1e, 0x04, 0xa1, 0x05, 0x6c, 0x38, 0xaa, 0xaa, 0xb2, 0x72, 0x37, 0x38, 0x73, 0xfe, 0xc6, 0xdd, 0x68, 0x0e, + 0x7b, 0x55, 0x1c, 0xad, 0xb4, 0x7c, 0xb4, 0x3c, 0xb6, 0xb8, 0xe0, 0x37, 0x20, 0x18, 0xe9, 0x25, 0xea, 0x63, 0x1b, + 0x16, 0x77, 0xc9, 0x17, 0x77, 0xd6, 0xb2, 0xb8, 0xb3, 0x1d, 0x8b, 0x1b, 0xb0, 0x85, 0x54, 0x04, 0xe8, 0x12, 0xf4, + 0x05, 0x13, 0xc0, 0x63, 0x74, 0xc5, 0x80, 0x9d, 0x33, 0x84, 0x93, 0x99, 0x06, 0x60, 0x0b, 0xd5, 0x02, 0xab, 0x26, + 0xb8, 0x48, 0x80, 0xa8, 0x4f, 0x5c, 0x9c, 0x3a, 0x3e, 0x6f, 0x48, 0xb9, 0xa9, 0x05, 0xd5, 0xf9, 0xc2, 0x2e, 0xa5, + 0xe9, 0xc4, 0xb5, 0x65, 0xcb, 0x4c, 0x97, 0x3b, 0x66, 0xea, 0x95, 0x8e, 0x2e, 0x9b, 0x36, 0x3d, 0x84, 0xf2, 0xa4, + 0x60, 0x0f, 0x82, 0x7d, 0x28, 0x6e, 0x99, 0xf2, 0x3e, 0x6c, 0x47, 0xa9, 0xd2, 0x8e, 0x8a, 0xdd, 0x34, 0xbd, 0x8f, + 0x12, 0x50, 0xb0, 0x40, 0x37, 0x8f, 0xdb, 0x52, 0x2b, 0x3f, 0x64, 0xb1, 0x5b, 0x5a, 0x37, 0x53, 0xf1, 0x5e, 0xde, + 0x52, 0x9d, 0x5e, 0x8f, 0xd6, 0x88, 0xdd, 0x2c, 0x23, 0x09, 0x02, 0xdd, 0x85, 0x20, 0xdf, 0xff, 0x4f, 0xb6, 0x59, + 0x03, 0x0e, 0x09, 0xf4, 0x02, 0xab, 0x23, 0x86, 0x8e, 0x81, 0x94, 0x4a, 0xf8, 0xbd, 0x2b, 0xc5, 0x81, 0x4b, 0x04, + 0xe0, 0x7f, 0xc2, 0xe3, 0xaa, 0x25, 0x92, 0xa7, 0x92, 0x73, 0xa2, 0x5b, 0xb1, 0x3b, 0xfb, 0x00, 0x7a, 0x3c, 0xad, + 0x63, 0x80, 0x4d, 0xae, 0x1c, 0xf5, 0x2d, 0xa1, 0xb4, 0x9d, 0x57, 0x20, 0x49, 0xc4, 0x92, 0xcc, 0xe2, 0x09, 0x9c, + 0x25, 0x5d, 0x73, 0x7e, 0xb3, 0xed, 0xe4, 0x47, 0x0b, 0x5f, 0xaf, 0x61, 0x4d, 0x40, 0x6d, 0xc1, 0x68, 0x2c, 0x58, + 0xac, 0xc0, 0x70, 0x4e, 0x74, 0x10, 0xf4, 0x5e, 0x43, 0xfa, 0x52, 0x9b, 0xf3, 0xaf, 0x93, 0x04, 0x2e, 0xa9, 0x6b, + 0xfb, 0x26, 0x7f, 0xbe, 0xc0, 0x5f, 0xce, 0x4d, 0xfe, 0x7c, 0x8a, 0xbf, 0x3a, 0x37, 0x98, 0xa8, 0xae, 0x81, 0x6f, + 0x97, 0xe6, 0xac, 0x8e, 0x4b, 0xfb, 0x89, 0x9a, 0x9b, 0x3d, 0x62, 0xdb, 0xb0, 0x05, 0x7e, 0xfa, 0x6c, 0x9b, 0x82, + 0x83, 0xa5, 0x3c, 0x87, 0xd0, 0x4a, 0xf4, 0xbc, 0xb1, 0x7c, 0xd1, 0x52, 0x3e, 0xd5, 0xff, 0xcb, 0xf7, 0x3c, 0xee, + 0x92, 0xa8, 0xb8, 0x53, 0xca, 0x52, 0x87, 0xdb, 0xa9, 0x1f, 0xba, 0xc9, 0xc3, 0x2d, 0xe5, 0x26, 0x34, 0x4e, 0xaa, + 0x0b, 0x69, 0x0a, 0xa5, 0x26, 0xcb, 0xda, 0xad, 0x4c, 0x92, 0xe7, 0x3e, 0xb0, 0x8b, 0x7e, 0xf4, 0xf7, 0x44, 0xa2, + 0xd2, 0x4a, 0xfc, 0x26, 0x5b, 0x90, 0xd2, 0x87, 0x6e, 0x9f, 0x6d, 0x35, 0x52, 0xef, 0xa6, 0x32, 0xdb, 0x0a, 0x19, + 0x08, 0xcb, 0x83, 0xbc, 0xeb, 0x6a, 0xe6, 0x0f, 0x50, 0x7d, 0x35, 0x8d, 0x36, 0xe6, 0xb3, 0x6d, 0x76, 0xae, 0xae, + 0xdc, 0xe4, 0x13, 0x99, 0x99, 0x9e, 0x9f, 0x78, 0x01, 0x51, 0x07, 0xea, 0x34, 0x70, 0xc3, 0x4f, 0xec, 0xd1, 0x8c, + 0xd6, 0x19, 0x2a, 0xa4, 0xf7, 0xb2, 0xba, 0x1c, 0x26, 0x54, 0x42, 0x87, 0xb4, 0x69, 0x03, 0x14, 0x94, 0xd7, 0x42, + 0xbe, 0x55, 0xd0, 0x85, 0x45, 0x2d, 0x03, 0xec, 0x29, 0x41, 0x47, 0x0e, 0x0e, 0xaa, 0x86, 0x8a, 0xeb, 0xa5, 0x1a, + 0xf2, 0x54, 0xa9, 0x6c, 0x52, 0x64, 0x58, 0xbc, 0xc5, 0x1e, 0x7e, 0xff, 0xe7, 0x68, 0xee, 0xeb, 0xc3, 0x3f, 0xc7, + 0x68, 0xbc, 0xf6, 0x0f, 0xca, 0x8d, 0xdd, 0x34, 0x5d, 0xaf, 0xc8, 0x8c, 0xea, 0xe2, 0xce, 0x8b, 0xa1, 0x94, 0x69, + 0x79, 0x79, 0x38, 0xbf, 0xae, 0x3b, 0xfd, 0xe3, 0xd7, 0x60, 0x23, 0x00, 0x34, 0x5d, 0x34, 0x9f, 0xab, 0x05, 0x57, + 0xbd, 0xa7, 0x99, 0x73, 0xfc, 0xeb, 0xfa, 0x87, 0xb7, 0xf6, 0x0f, 0xa2, 0x71, 0xa8, 0xea, 0xf9, 0x84, 0x2b, 0x3c, + 0x19, 0x69, 0x2a, 0x8d, 0x97, 0xcf, 0x68, 0xee, 0x86, 0xed, 0xd3, 0xb9, 0x2e, 0xed, 0xb2, 0x98, 0x90, 0x19, 0xd8, + 0xc2, 0x1a, 0xb5, 0xd2, 0xdb, 0x80, 0xdc, 0x11, 0xa1, 0x4c, 0xad, 0x7f, 0xac, 0xa1, 0x05, 0x46, 0x7b, 0x63, 0x4a, + 0x5a, 0x46, 0x58, 0x49, 0x53, 0x9a, 0xe0, 0x1c, 0xd8, 0xcc, 0xe5, 0x5d, 0x5e, 0xd9, 0xd5, 0x13, 0x43, 0x95, 0x06, + 0xd0, 0x3a, 0xb2, 0xf3, 0x96, 0xf2, 0x01, 0xa6, 0x7a, 0x6e, 0x1e, 0x9b, 0xe1, 0xe8, 0x03, 0x88, 0x8e, 0xcd, 0xe0, + 0x14, 0xc0, 0xe6, 0xd7, 0x0a, 0x01, 0x44, 0x1b, 0xc4, 0x9a, 0xc4, 0x52, 0x2a, 0x95, 0x77, 0x70, 0xfb, 0x42, 0x34, + 0xb4, 0xe5, 0x92, 0x9f, 0xc6, 0xb5, 0x51, 0xca, 0x33, 0x9f, 0x62, 0x0a, 0xd5, 0x90, 0xa4, 0x69, 0x2b, 0xc0, 0xc4, + 0xa2, 0x1b, 0x6a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0xb0, 0x0d, 0xb8, 0x95, 0x71, 0x82, 0xd5, 0x6f, 0x21, 0x86, + 0xbf, 0x5d, 0x31, 0x0b, 0x91, 0x64, 0x31, 0x55, 0x99, 0xf6, 0xbe, 0xed, 0xfd, 0xbd, 0xca, 0x06, 0x55, 0xba, 0x29, + 0x1b, 0x87, 0xa6, 0x95, 0xb0, 0x5f, 0x4d, 0x40, 0x83, 0x1d, 0xf0, 0x31, 0x55, 0x50, 0x1c, 0x99, 0xcf, 0x89, 0x97, + 0xa5, 0x3a, 0x17, 0xd7, 0x88, 0x78, 0xad, 0xe0, 0xa7, 0xf3, 0x64, 0xa4, 0xfe, 0x04, 0x5e, 0xeb, 0x3c, 0xac, 0x11, + 0x1b, 0x10, 0x67, 0x5b, 0x9a, 0xc1, 0x44, 0x7b, 0x2c, 0x83, 0x88, 0x7d, 0x05, 0xd2, 0x71, 0x37, 0x94, 0xe3, 0xd0, + 0xd8, 0x15, 0x50, 0xec, 0x8b, 0x48, 0xd8, 0x91, 0xec, 0x46, 0x40, 0xbb, 0x8e, 0xef, 0xd6, 0xf9, 0xa1, 0xe7, 0xd8, + 0xb9, 0x6a, 0x80, 0xb7, 0xd4, 0xa7, 0x43, 0x0f, 0x3d, 0xb6, 0xea, 0x42, 0xab, 0x75, 0xf8, 0x98, 0x76, 0x1d, 0xe7, + 0x95, 0xa3, 0x1a, 0xd4, 0x48, 0x4d, 0xc2, 0x6d, 0x5e, 0x74, 0x47, 0x92, 0x2f, 0x9e, 0x4a, 0xb9, 0xf3, 0xc3, 0xc6, + 0x73, 0xe2, 0xd8, 0x80, 0x84, 0xb3, 0x28, 0x7e, 0xc4, 0x14, 0xba, 0xaa, 0xa1, 0x7a, 0x41, 0x94, 0x12, 0x79, 0x0e, + 0x54, 0xec, 0xf0, 0x85, 0x93, 0xf8, 0xf9, 0xfd, 0xdb, 0x0f, 0x1f, 0x54, 0x03, 0x73, 0x6f, 0xa6, 0x72, 0xef, 0x6c, + 0x43, 0xed, 0xc1, 0xfe, 0x8d, 0xfb, 0x8e, 0xde, 0x30, 0x94, 0xaf, 0x2c, 0xef, 0x39, 0x5a, 0x56, 0xdb, 0x72, 0xec, + 0xe6, 0x61, 0x5f, 0xa6, 0xcc, 0xe0, 0x41, 0xf3, 0x6a, 0xc0, 0x0d, 0xbb, 0xaf, 0xb7, 0x52, 0xc9, 0xca, 0x0f, 0x6f, + 0x1b, 0x4a, 0xdd, 0x4d, 0x43, 0x29, 0x70, 0x53, 0x35, 0x5c, 0xb5, 0x8e, 0x56, 0xd2, 0xed, 0x0c, 0xa9, 0x93, 0xf7, + 0x81, 0x4b, 0x62, 0x69, 0xbe, 0x60, 0xd0, 0x2c, 0x76, 0x7a, 0x75, 0xd4, 0x0d, 0xc5, 0x8c, 0x0f, 0x11, 0xb0, 0xf5, + 0x02, 0x30, 0xb1, 0x23, 0xb2, 0x1e, 0xac, 0x4c, 0xb9, 0x09, 0x03, 0x59, 0xa9, 0x13, 0x4a, 0x61, 0xde, 0x66, 0x64, + 0x15, 0x93, 0xc4, 0xcd, 0xd6, 0x09, 0xb9, 0x0d, 0xa2, 0xfb, 0x27, 0x85, 0x01, 0xfb, 0x9e, 0xca, 0x4b, 0x7f, 0xb1, + 0x14, 0xb5, 0xcf, 0x35, 0x32, 0x12, 0x0b, 0xb8, 0xf3, 0x03, 0xf9, 0x7f, 0xfe, 0x6d, 0x59, 0xff, 0xf9, 0xf7, 0xde, + 0xaa, 0xd0, 0x7d, 0x3e, 0x31, 0xb2, 0xd1, 0x01, 0xfb, 0xa2, 0xf9, 0x4b, 0x65, 0x98, 0x37, 0xd7, 0xa9, 0x2d, 0x02, + 0xbc, 0xaf, 0x2d, 0x41, 0xad, 0xb0, 0xbc, 0x6f, 0x1e, 0x35, 0x30, 0x98, 0xd7, 0xde, 0x91, 0x41, 0xa5, 0x2f, 0x1a, + 0xda, 0x44, 0x1f, 0x1c, 0xb4, 0x22, 0xbf, 0x1f, 0xc2, 0xfb, 0xe6, 0xf0, 0x85, 0xc3, 0x67, 0xa2, 0xc1, 0xd7, 0x93, + 0x89, 0xc8, 0xe6, 0x26, 0x37, 0x05, 0xa3, 0xfa, 0xf3, 0x5a, 0x09, 0xbb, 0x3c, 0x07, 0xb6, 0x4e, 0xbd, 0xdd, 0x47, + 0xaf, 0x27, 0x68, 0xfe, 0x75, 0x36, 0x4d, 0x0a, 0x62, 0xa5, 0x15, 0xb5, 0x51, 0xf3, 0xed, 0x5a, 0xa7, 0x35, 0xbc, + 0x06, 0xa5, 0x98, 0xe2, 0x2b, 0x9f, 0xe8, 0xc6, 0xeb, 0x09, 0x93, 0xed, 0x30, 0x8b, 0xd3, 0x41, 0x75, 0x6b, 0x33, + 0xc9, 0x68, 0x09, 0xe8, 0x86, 0x42, 0x35, 0x2e, 0x58, 0x99, 0x14, 0xa2, 0x34, 0x14, 0xa9, 0x03, 0x53, 0x3f, 0xc9, + 0x31, 0xc3, 0xc8, 0xbb, 0x36, 0xab, 0xac, 0x9f, 0xf7, 0x5b, 0x65, 0x5d, 0x1d, 0x64, 0x95, 0xf5, 0xf3, 0x57, 0xb7, + 0xca, 0x7a, 0x27, 0x5b, 0x65, 0xc1, 0x22, 0xbe, 0x25, 0x07, 0x99, 0x4a, 0x71, 0x3b, 0x89, 0xe8, 0x3e, 0x1d, 0x39, + 0x8c, 0xa4, 0x4d, 0xbd, 0x25, 0x01, 0x36, 0x9d, 0xad, 0x4a, 0x10, 0x2d, 0xc0, 0x6c, 0xea, 0x8f, 0x37, 0x70, 0x0a, + 0xa2, 0x85, 0x6c, 0xde, 0x14, 0xb2, 0x18, 0xab, 0x45, 0xdc, 0x24, 0x6a, 0x52, 0x64, 0x1b, 0x3c, 0xca, 0x92, 0x79, + 0xac, 0x4b, 0x79, 0xa4, 0x85, 0xbd, 0x58, 0x87, 0x1b, 0x1d, 0x0d, 0xd0, 0x5e, 0x49, 0x34, 0xec, 0xbc, 0xe4, 0xd1, + 0x24, 0xe4, 0x1e, 0x84, 0x5d, 0x2e, 0x8d, 0xcc, 0xb0, 0x55, 0x7f, 0xdd, 0x38, 0xdf, 0x5f, 0x3b, 0xc3, 0xae, 0x03, + 0xee, 0xd0, 0xc0, 0xe4, 0x61, 0x81, 0x3d, 0xec, 0x76, 0xa1, 0xe0, 0x5e, 0x2a, 0xe8, 0x40, 0x81, 0x2f, 0x15, 0xf4, + 0xa0, 0xc0, 0x93, 0x0a, 0x4e, 0xa0, 0x60, 0x26, 0x15, 0xf4, 0xa1, 0xe0, 0x4e, 0xcd, 0xaf, 0x43, 0x31, 0xdc, 0xbe, + 0x7e, 0x63, 0x50, 0xa6, 0x82, 0x97, 0xf5, 0x0d, 0x07, 0xec, 0x94, 0xdc, 0xc5, 0x20, 0x32, 0xa8, 0x80, 0x6f, 0x90, + 0x18, 0xf7, 0x4b, 0x42, 0x43, 0x33, 0xbf, 0xc1, 0x3b, 0xc7, 0xca, 0x22, 0xb0, 0x54, 0xe6, 0x21, 0x0f, 0x38, 0x1c, + 0x14, 0x55, 0x07, 0x99, 0xcd, 0x50, 0xac, 0x1c, 0x0f, 0x1b, 0x21, 0xad, 0x65, 0xf1, 0x8e, 0x7e, 0xce, 0x14, 0x5b, + 0xa0, 0xb0, 0xf1, 0xd0, 0x64, 0xc1, 0xe0, 0xd7, 0xd0, 0xf4, 0xbf, 0x21, 0xd3, 0xf5, 0x42, 0xb9, 0x8c, 0x16, 0x7b, + 0x95, 0xf6, 0xf2, 0x2b, 0x18, 0xa5, 0x4a, 0x35, 0x20, 0x26, 0xdf, 0x96, 0xec, 0x5b, 0xf4, 0x31, 0x2f, 0xd7, 0xcf, + 0x60, 0x6c, 0x4a, 0x46, 0x4d, 0x46, 0xe0, 0x3b, 0x00, 0x23, 0x49, 0x6b, 0x7e, 0x09, 0x70, 0x96, 0x9e, 0xaf, 0x5c, + 0x69, 0x3c, 0xe3, 0x1f, 0x49, 0x9a, 0xba, 0x0b, 0x5e, 0xbf, 0x3e, 0x4e, 0x30, 0x93, 0x11, 0xfc, 0x17, 0x02, 0x10, + 0x84, 0x69, 0x7e, 0xcd, 0x1a, 0x22, 0x89, 0xee, 0x15, 0xb0, 0xb7, 0x81, 0x0d, 0x55, 0x58, 0x06, 0xf8, 0x16, 0x2c, + 0x61, 0x59, 0x87, 0x0f, 0x87, 0xff, 0x8e, 0x04, 0xd5, 0xc2, 0xcc, 0x5d, 0x54, 0x8b, 0xe8, 0x3e, 0xc8, 0xe5, 0xb1, + 0x09, 0x15, 0x7a, 0xa9, 0xf0, 0x4b, 0x74, 0xc2, 0x41, 0xb4, 0xf8, 0x43, 0x15, 0xc2, 0x3b, 0x14, 0xf9, 0x1f, 0x42, + 0xc3, 0xcf, 0x26, 0x16, 0xc2, 0x58, 0xb1, 0x00, 0x84, 0x83, 0x30, 0x5b, 0x9a, 0xe8, 0xcc, 0xa5, 0x75, 0x42, 0xdd, + 0xb0, 0x70, 0x6d, 0xb7, 0x55, 0x17, 0xd6, 0x41, 0xb2, 0x98, 0xba, 0x9a, 0xd3, 0xe9, 0x1b, 0xfc, 0xcf, 0xb2, 0x7b, + 0x7a, 0x8e, 0x3d, 0x28, 0x33, 0xff, 0x6e, 0x3b, 0x8f, 0xc2, 0xcc, 0x9c, 0xbb, 0x2b, 0x3f, 0x78, 0x18, 0xac, 0xa2, + 0x30, 0x4a, 0x63, 0xd7, 0x23, 0xc3, 0x82, 0xa1, 0x1e, 0x62, 0x70, 0x04, 0xe6, 0x9f, 0xe7, 0x58, 0x9d, 0x84, 0xac, + 0x68, 0x6b, 0x11, 0xfb, 0x60, 0x1e, 0x90, 0x4d, 0xce, 0x3e, 0x5f, 0xaa, 0x4c, 0xab, 0xe2, 0x96, 0xa3, 0x2d, 0x80, + 0x22, 0x65, 0x81, 0x15, 0x20, 0x9c, 0xd0, 0x30, 0x76, 0x67, 0x18, 0x0b, 0xd0, 0xea, 0xf4, 0x12, 0xb2, 0x52, 0xac, + 0x5e, 0x6b, 0xe7, 0x49, 0x74, 0x3f, 0x86, 0xd1, 0x62, 0x63, 0x33, 0x25, 0xc1, 0x1c, 0xdf, 0x98, 0xe8, 0xcb, 0xc1, + 0xfb, 0x31, 0x91, 0x11, 0x87, 0xde, 0xc8, 0x6a, 0x08, 0xaf, 0x07, 0x1d, 0xc5, 0x1e, 0xae, 0xfc, 0xd0, 0xa4, 0xd3, + 0xe9, 0xdb, 0xb1, 0xd4, 0x97, 0x0c, 0x3f, 0x7d, 0x8b, 0xd5, 0x1d, 0xc5, 0x1e, 0x02, 0xb3, 0x36, 0x0f, 0xa2, 0xfb, + 0xc1, 0xd2, 0x9f, 0xcd, 0x48, 0x38, 0xc4, 0x31, 0x8b, 0x42, 0x12, 0x04, 0x7e, 0x9c, 0xfa, 0xe9, 0x70, 0xe5, 0x6e, + 0x58, 0xaf, 0xc7, 0x6d, 0xbd, 0x76, 0x59, 0xaf, 0xdd, 0x83, 0x7b, 0x95, 0xba, 0x01, 0xbf, 0x11, 0xda, 0x0f, 0x1b, + 0x5a, 0x4f, 0xb1, 0x2b, 0xf3, 0x3c, 0xb8, 0xd7, 0x38, 0x21, 0xdb, 0x95, 0x9b, 0x2c, 0xfc, 0x70, 0x60, 0xe7, 0xd6, + 0xdd, 0x96, 0x6e, 0x8c, 0xa7, 0xa7, 0xa7, 0xa7, 0xb9, 0x35, 0xe3, 0x4f, 0xf6, 0x6c, 0x96, 0x5b, 0x1e, 0x7f, 0x9a, + 0xcf, 0x6d, 0x7b, 0x3e, 0xcf, 0x2d, 0x9f, 0x17, 0x74, 0x3b, 0xde, 0xac, 0xdb, 0xc9, 0xad, 0x7b, 0xa9, 0x46, 0x6e, + 0x11, 0xf6, 0x94, 0x90, 0xd9, 0x10, 0x37, 0x12, 0x35, 0xe4, 0x1c, 0xf4, 0x6d, 0x3b, 0x47, 0x0c, 0x70, 0x5d, 0xc2, + 0x4d, 0x28, 0xeb, 0xb9, 0xd9, 0x1e, 0x5c, 0x53, 0x29, 0x3e, 0xe7, 0x79, 0x8d, 0xf5, 0x66, 0x6e, 0xf2, 0xe9, 0x46, + 0x91, 0x66, 0xe1, 0xba, 0xb4, 0xda, 0x96, 0x83, 0xc1, 0xdc, 0x0c, 0x20, 0x48, 0xd6, 0x70, 0x1a, 0x25, 0x70, 0x66, + 0x13, 0x77, 0xe6, 0xaf, 0xd3, 0x81, 0xd3, 0x89, 0x37, 0xbc, 0x88, 0xed, 0xf5, 0xa2, 0x00, 0xcf, 0xde, 0x20, 0x8d, + 0x02, 0x7f, 0xc6, 0x8b, 0xda, 0xce, 0x92, 0xd3, 0xd1, 0x87, 0xe8, 0x22, 0xee, 0x63, 0xa0, 0x03, 0x37, 0x08, 0x14, + 0xab, 0x9b, 0x2a, 0xc4, 0x4d, 0x51, 0xc4, 0xab, 0xd8, 0x29, 0x85, 0x0b, 0xba, 0x83, 0x3b, 0xc7, 0xf1, 0x46, 0xec, + 0x79, 0xe7, 0x24, 0xde, 0xe4, 0xdf, 0xae, 0xc8, 0xcc, 0x77, 0x15, 0xad, 0xd8, 0x4d, 0x8e, 0x0d, 0x62, 0x60, 0x7d, + 0xdb, 0xb2, 0x4d, 0xf9, 0xb1, 0x80, 0x60, 0x82, 0x4f, 0xfc, 0x55, 0x1c, 0x25, 0x99, 0x1b, 0x66, 0x79, 0x3e, 0xb9, + 0xc9, 0xf3, 0xe1, 0x95, 0xaf, 0x5d, 0xff, 0x43, 0xa3, 0xf7, 0x34, 0x55, 0x9b, 0xe4, 0xfa, 0x8d, 0xf1, 0x96, 0xc8, + 0x56, 0x1a, 0x70, 0x8d, 0xa1, 0x85, 0x86, 0x5c, 0x99, 0xde, 0x92, 0xf5, 0xca, 0x14, 0xc8, 0xa2, 0x3a, 0xb5, 0xfa, + 0x28, 0x57, 0xc1, 0x1b, 0x08, 0x2a, 0xbc, 0x25, 0xa3, 0x2b, 0xc9, 0xe2, 0x03, 0x88, 0x15, 0xac, 0x4c, 0x2d, 0xf9, + 0x9f, 0xb5, 0xd1, 0x8c, 0xdf, 0xed, 0xa7, 0x19, 0x7f, 0xc9, 0x0e, 0xa1, 0x19, 0xbf, 0xfb, 0xea, 0x34, 0xe3, 0xb3, + 0xba, 0x25, 0xff, 0x45, 0x34, 0x52, 0x85, 0x90, 0x1f, 0xae, 0xa6, 0x84, 0xc6, 0xc8, 0xb9, 0xf8, 0xdd, 0x86, 0xf7, + 0xbc, 0x37, 0x9a, 0xf5, 0x8d, 0xde, 0xdc, 0x20, 0x8f, 0x7d, 0x17, 0x8e, 0xfe, 0x9e, 0xc8, 0xcf, 0xf3, 0xf9, 0xe8, + 0x4d, 0x24, 0x15, 0x88, 0x27, 0x66, 0xff, 0x50, 0x8a, 0x67, 0x40, 0xdf, 0x70, 0xbb, 0x47, 0xcc, 0xf8, 0x00, 0xee, + 0xd0, 0xd4, 0xce, 0x77, 0x26, 0xec, 0xbd, 0x86, 0xe5, 0x21, 0x68, 0xc2, 0xc8, 0x92, 0x3b, 0xbd, 0xd4, 0x44, 0x89, + 0x0b, 0x92, 0x31, 0x2f, 0xd5, 0xef, 0x1f, 0x2e, 0x66, 0xda, 0x45, 0xa4, 0xe7, 0x7e, 0xfa, 0xae, 0xea, 0x72, 0xc2, + 0xd4, 0x2f, 0x23, 0x79, 0x3a, 0x39, 0xb3, 0xd9, 0x92, 0x53, 0x3a, 0xc3, 0x6b, 0xda, 0xfc, 0xbc, 0x34, 0xd3, 0x81, + 0xdc, 0x90, 0xa5, 0x96, 0xaa, 0x5d, 0xc6, 0xcc, 0xde, 0x7f, 0xcb, 0x28, 0x40, 0xcc, 0x96, 0x85, 0x9e, 0xba, 0x33, + 0xda, 0xdc, 0x9f, 0xe5, 0xb9, 0x3e, 0xe4, 0x80, 0x90, 0x2e, 0x5a, 0xb2, 0x8f, 0x88, 0x4b, 0xef, 0x85, 0x59, 0x01, + 0x53, 0xd2, 0x51, 0x0d, 0xdc, 0x05, 0xe8, 0xb4, 0x99, 0xbe, 0x8e, 0xc1, 0x4c, 0x55, 0x28, 0xf8, 0xa8, 0xad, 0x83, + 0x34, 0x21, 0x50, 0xc2, 0x0a, 0xf8, 0xf3, 0x57, 0xbc, 0xa0, 0x6e, 0x35, 0x49, 0x81, 0x83, 0x4a, 0x79, 0xf0, 0xab, + 0xe7, 0x72, 0x6d, 0x8a, 0x76, 0x58, 0x1d, 0x7c, 0xc8, 0x55, 0x41, 0xfb, 0xe1, 0xf6, 0x1b, 0x9f, 0x1d, 0x41, 0x83, + 0x71, 0x45, 0x77, 0xbf, 0xc7, 0x26, 0x10, 0x48, 0x89, 0xf4, 0xde, 0xb0, 0xd2, 0x7b, 0xe5, 0xc5, 0x96, 0xc7, 0xa4, + 0xc8, 0xdc, 0xd8, 0x04, 0x16, 0x1f, 0x71, 0x2f, 0xc3, 0x78, 0x52, 0xf8, 0x8b, 0xe1, 0x3a, 0x05, 0xdc, 0x88, 0x8c, + 0x2a, 0xe2, 0x9f, 0xa1, 0xb7, 0x4e, 0xd2, 0x28, 0x19, 0xc4, 0x91, 0x1f, 0x66, 0x24, 0xc9, 0x11, 0x54, 0xd7, 0x08, + 0x1f, 0x0e, 0x9e, 0x9b, 0x6d, 0x14, 0xbb, 0x9e, 0x9f, 0x3d, 0x0c, 0x6c, 0x46, 0x52, 0xd8, 0x43, 0x46, 0x1d, 0xd8, + 0x8d, 0xf5, 0x07, 0x0c, 0x9a, 0x2f, 0x91, 0xf0, 0x4b, 0xea, 0xe4, 0x8c, 0xbc, 0xcd, 0x87, 0xd2, 0x5b, 0x1a, 0x95, + 0x03, 0xc8, 0x0f, 0x37, 0x31, 0x17, 0x80, 0xe5, 0x61, 0xa9, 0xed, 0x19, 0x59, 0x18, 0x88, 0xb5, 0x41, 0x2e, 0xcf, + 0xff, 0xac, 0x9e, 0xae, 0xd8, 0xcd, 0xc5, 0x40, 0xf1, 0xe8, 0x87, 0x8c, 0x6c, 0xe0, 0x42, 0x0e, 0x2b, 0xe3, 0x90, + 0x9a, 0x53, 0x32, 0x8f, 0x12, 0x42, 0x23, 0xb8, 0x3a, 0xa7, 0xf1, 0xe6, 0xf0, 0xee, 0x77, 0x4f, 0xbf, 0xb9, 0x9f, + 0x30, 0xca, 0x34, 0xde, 0x99, 0xbe, 0xa7, 0xb7, 0xfa, 0x7d, 0x06, 0xa4, 0x21, 0x85, 0xbc, 0x47, 0x83, 0x65, 0x0d, + 0x54, 0x75, 0xd8, 0x18, 0x28, 0x2b, 0x8e, 0xd8, 0x9d, 0x97, 0x90, 0xc0, 0xcd, 0xfc, 0x3b, 0x4e, 0x33, 0x76, 0x4f, + 0xe2, 0x0d, 0x5f, 0x63, 0xbc, 0xf0, 0x1e, 0xb1, 0x48, 0x95, 0xa1, 0xf0, 0x45, 0xaa, 0x16, 0xe3, 0x22, 0x0d, 0x6b, + 0xb3, 0xe1, 0xb1, 0x23, 0x2a, 0x37, 0x7d, 0x2f, 0xde, 0xc8, 0x57, 0x74, 0xd1, 0x4c, 0xdc, 0xd4, 0xd5, 0xa0, 0x5f, + 0x2b, 0x7f, 0x36, 0x0b, 0x48, 0x5e, 0x5a, 0xe8, 0xf2, 0x5a, 0x4a, 0xc0, 0x11, 0x70, 0x70, 0xa7, 0x69, 0x14, 0xac, + 0x33, 0xd2, 0x0c, 0x2e, 0x0a, 0x9c, 0x8e, 0x5d, 0x00, 0x07, 0x7f, 0x97, 0xc7, 0xda, 0x03, 0x72, 0x1b, 0xb6, 0x89, + 0x3d, 0x84, 0x18, 0xbf, 0x66, 0xb7, 0x3c, 0x74, 0x78, 0x25, 0x06, 0x6d, 0x34, 0x4c, 0xc4, 0x80, 0x6b, 0x89, 0x62, + 0x6f, 0xc5, 0x72, 0x58, 0x99, 0x88, 0x73, 0x2a, 0x8a, 0xf2, 0xf2, 0x64, 0xfe, 0x98, 0x33, 0xf6, 0xaa, 0xf9, 0x8c, + 0xbd, 0xe2, 0x67, 0x6c, 0xf7, 0xce, 0x7c, 0x3a, 0x77, 0xe0, 0xbf, 0x61, 0x31, 0xa1, 0x81, 0xad, 0x74, 0xe3, 0x8d, + 0xe2, 0xc4, 0x1b, 0xc5, 0xec, 0xc4, 0x1b, 0x05, 0xbb, 0x46, 0x93, 0x0c, 0xc3, 0xea, 0xe8, 0x86, 0xad, 0x40, 0x21, + 0xfc, 0xd9, 0xa5, 0x57, 0xce, 0x31, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, 0xee, 0xa3, 0x4e, 0xcf, 0x12, 0x47, + 0xda, 0xba, 0x95, 0xb9, 0xd3, 0x29, 0x99, 0x0d, 0xe6, 0x91, 0xb7, 0x4e, 0xff, 0xc5, 0xc6, 0xcf, 0x80, 0xb8, 0x13, + 0x11, 0x54, 0xfa, 0xe1, 0x4d, 0x41, 0x51, 0x72, 0x47, 0x78, 0x0f, 0x5b, 0xb1, 0x4e, 0x03, 0x1a, 0x90, 0xb8, 0x63, + 0x1d, 0x37, 0x6c, 0xf2, 0x66, 0x40, 0xff, 0x61, 0xab, 0xd4, 0x8e, 0x62, 0xbe, 0x00, 0x2c, 0x3b, 0xc1, 0xf1, 0x78, + 0x68, 0xb0, 0xd5, 0xb4, 0x4f, 0x9b, 0x87, 0x7b, 0xcd, 0xbf, 0x74, 0xc3, 0x2f, 0x15, 0x76, 0x6f, 0x31, 0x57, 0x90, + 0xdd, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x3b, 0x2e, 0x84, 0xa2, 0xee, 0x81, 0x58, 0xfe, 0xe9, 0xab, 0x63, 0xf8, + 0x8f, 0x52, 0xf5, 0xbf, 0x64, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xf6, 0x9a, 0x92, 0x4a, 0x48, 0x88, 0x1f, 0x5e, 0x7f, + 0x3e, 0x7f, 0x5c, 0x83, 0x83, 0x6b, 0x53, 0x6b, 0xa6, 0x6a, 0xed, 0xef, 0xa3, 0x08, 0x92, 0x65, 0xd6, 0xab, 0x73, + 0xf0, 0x50, 0xf3, 0xf2, 0x6c, 0x04, 0x8d, 0x38, 0x1f, 0x41, 0xb5, 0xf8, 0x2a, 0xb6, 0xa1, 0xac, 0xc4, 0xdb, 0x36, + 0x56, 0xe2, 0xcd, 0x7e, 0x56, 0xe2, 0xaf, 0x07, 0xb1, 0x12, 0x6f, 0xbe, 0x3a, 0x2b, 0xf1, 0xb6, 0xce, 0x4a, 0x5c, + 0x45, 0xdc, 0x84, 0xd5, 0xb8, 0x58, 0xb3, 0x9f, 0x1f, 0xa9, 0x52, 0xee, 0x32, 0x1a, 0xf5, 0x6c, 0x1a, 0x64, 0xf8, + 0xea, 0x77, 0x33, 0x16, 0xb8, 0x11, 0xdf, 0xa3, 0x45, 0x57, 0xc1, 0x5a, 0x30, 0xcc, 0x8e, 0xdf, 0x91, 0x8a, 0x83, + 0x28, 0x5c, 0xfc, 0x0c, 0x4a, 0x59, 0x10, 0x07, 0x26, 0xd2, 0x0b, 0x3f, 0xfd, 0x39, 0x8a, 0xd7, 0xf1, 0x05, 0xf4, + 0xf5, 0xd1, 0x4f, 0xfd, 0x69, 0x40, 0x84, 0xef, 0x2f, 0xb5, 0x40, 0x63, 0x32, 0x71, 0x30, 0xfa, 0xe4, 0x3f, 0xdd, + 0x0d, 0xff, 0x89, 0x66, 0xa1, 0xec, 0x37, 0x35, 0x6d, 0x53, 0x9b, 0x19, 0x11, 0xae, 0x04, 0x94, 0x06, 0xfd, 0x78, + 0x66, 0xe4, 0x2a, 0xd2, 0x1b, 0x66, 0xc9, 0xed, 0x1d, 0x5a, 0xfb, 0x21, 0x35, 0xa6, 0x66, 0xad, 0x1b, 0x22, 0xe8, + 0x55, 0x5d, 0x0c, 0xbf, 0x8a, 0xd6, 0x29, 0x99, 0x45, 0xf7, 0xa1, 0x6a, 0x84, 0xc2, 0xac, 0x1f, 0x34, 0x9c, 0xa2, + 0x0d, 0xa6, 0x6b, 0xfc, 0x80, 0x84, 0x72, 0x94, 0x68, 0x2a, 0x64, 0x0b, 0x5d, 0xc7, 0x26, 0x55, 0x35, 0x9b, 0x38, + 0x45, 0x55, 0xe4, 0x15, 0x7a, 0xa2, 0x69, 0xd1, 0xe8, 0x71, 0x2d, 0xb9, 0xa9, 0x46, 0x64, 0x31, 0xa9, 0x70, 0xaa, + 0x85, 0x5c, 0xb8, 0xc8, 0x23, 0x4f, 0x34, 0x2c, 0x1c, 0x7b, 0x43, 0x9d, 0x45, 0x8b, 0xb7, 0x10, 0xb7, 0x23, 0x5f, + 0xb3, 0xf5, 0x60, 0x71, 0x18, 0xe8, 0xe3, 0x6b, 0x09, 0x8c, 0xef, 0xee, 0x48, 0x12, 0xb8, 0x0f, 0x9a, 0x9e, 0x47, + 0xe1, 0x8f, 0x00, 0x80, 0x37, 0xd1, 0x7d, 0x28, 0x57, 0xc0, 0xf4, 0x28, 0x0d, 0x7b, 0xa9, 0x31, 0x62, 0x08, 0xb8, + 0x8a, 0x48, 0x23, 0x80, 0xc4, 0xb4, 0x0b, 0xf2, 0x77, 0x83, 0xfe, 0xfb, 0x0f, 0x3d, 0x37, 0x2e, 0x23, 0xf1, 0xa1, + 0xbf, 0xc5, 0x07, 0x7c, 0xe6, 0xf9, 0xf3, 0x27, 0xed, 0xd3, 0x2e, 0x27, 0x44, 0x6f, 0x68, 0xad, 0xb7, 0x9e, 0x02, + 0x18, 0xc5, 0x55, 0xb4, 0xf6, 0x96, 0x68, 0x6b, 0xfa, 0xf5, 0xe6, 0x9b, 0x41, 0x9f, 0x98, 0x17, 0x54, 0x4c, 0xbd, + 0x52, 0x54, 0x40, 0x01, 0xbf, 0xff, 0x16, 0x42, 0x5e, 0xfe, 0x0f, 0xc1, 0x50, 0xdf, 0x35, 0x8c, 0x8b, 0xf7, 0x1f, + 0xb7, 0x79, 0x87, 0x90, 0xbe, 0x92, 0x05, 0x93, 0xe0, 0xca, 0xb5, 0x66, 0x24, 0x93, 0x57, 0x81, 0x26, 0x07, 0x6e, + 0x6b, 0x8b, 0x49, 0xc7, 0xbf, 0x42, 0x2c, 0xca, 0xa6, 0x33, 0x5b, 0x7f, 0x83, 0x30, 0x6c, 0x55, 0x41, 0x32, 0xcc, + 0xe4, 0x81, 0x20, 0xfa, 0xaa, 0xbe, 0x5b, 0xf9, 0xa1, 0x81, 0x71, 0xd7, 0xeb, 0x6f, 0xdc, 0x0d, 0x44, 0x1e, 0x06, + 0xe4, 0x56, 0x7d, 0x05, 0x85, 0x86, 0xec, 0xa9, 0x06, 0xc9, 0x95, 0xd4, 0x46, 0x48, 0x70, 0x2d, 0xde, 0xe4, 0x4f, + 0x8a, 0xa2, 0x28, 0x82, 0x8d, 0x50, 0x04, 0x1f, 0x81, 0xe5, 0xc8, 0x0e, 0x80, 0xb6, 0x24, 0x8f, 0x37, 0xb4, 0x04, + 0x38, 0x03, 0xd4, 0xc9, 0xf2, 0x02, 0x16, 0x5c, 0xaf, 0x67, 0xf3, 0x02, 0xce, 0xd0, 0x43, 0x60, 0x34, 0x37, 0x81, + 0x18, 0xbc, 0x03, 0x05, 0x19, 0x76, 0x7c, 0xcb, 0x24, 0xc1, 0x8a, 0x4d, 0x1f, 0x27, 0x43, 0xd2, 0x1c, 0x85, 0x2d, + 0x94, 0xb0, 0x20, 0x68, 0x1d, 0x2a, 0x41, 0x95, 0x0d, 0xd2, 0x80, 0x1b, 0x91, 0x2f, 0xda, 0x64, 0x2b, 0x12, 0xae, + 0x55, 0xcc, 0xc2, 0x84, 0x51, 0xf1, 0xa0, 0xce, 0x1b, 0x4a, 0x6c, 0x01, 0xb6, 0x69, 0x6e, 0xb9, 0xa4, 0x77, 0x61, + 0xca, 0x50, 0xaa, 0x6b, 0x78, 0x4c, 0xb1, 0x99, 0x32, 0xdc, 0x56, 0xbd, 0x21, 0xd8, 0x92, 0x46, 0x55, 0xd7, 0x29, + 0x6a, 0x8c, 0x0c, 0x7d, 0xd0, 0x78, 0x14, 0x4c, 0x5c, 0xc4, 0xc1, 0xae, 0xb9, 0xd5, 0x45, 0x13, 0x1a, 0x19, 0xb7, + 0x22, 0x28, 0x4a, 0xf4, 0x7a, 0x37, 0x6c, 0x9c, 0x10, 0x0a, 0xa8, 0xb5, 0x1f, 0xaf, 0xd6, 0x4f, 0xcb, 0xa4, 0x3f, + 0x91, 0x07, 0x7a, 0x91, 0x50, 0x50, 0x7d, 0x22, 0x0f, 0x60, 0xfb, 0xf7, 0x16, 0xa4, 0x29, 0xea, 0x0e, 0x74, 0x6d, + 0x40, 0x70, 0x7d, 0x0f, 0xc2, 0x43, 0xed, 0x38, 0x40, 0x76, 0xbe, 0x03, 0x8b, 0x23, 0x88, 0x21, 0x8f, 0x32, 0x3f, + 0xc4, 0xcc, 0xca, 0x5e, 0x6b, 0x84, 0xb1, 0xd9, 0x70, 0x34, 0xf4, 0x17, 0x8e, 0x6d, 0x1f, 0xd5, 0xea, 0x83, 0x20, + 0xbb, 0xa9, 0xb6, 0x6e, 0x64, 0x23, 0xc7, 0x36, 0xfd, 0x17, 0x56, 0x67, 0x58, 0xbb, 0xa3, 0xa5, 0xe8, 0x8d, 0x13, + 0x14, 0x7f, 0x8d, 0x9f, 0x6d, 0xb5, 0xda, 0x81, 0xd4, 0xab, 0x56, 0xeb, 0x38, 0xb6, 0x9c, 0xc9, 0xbf, 0x26, 0xf5, + 0xab, 0x9f, 0xc6, 0x8e, 0xa4, 0x99, 0x44, 0x26, 0x10, 0x7f, 0x58, 0x83, 0x63, 0xf4, 0x67, 0xe5, 0xa5, 0xa2, 0xd1, + 0xe3, 0xa3, 0xeb, 0x13, 0x91, 0xa0, 0x9a, 0xbb, 0x75, 0xc9, 0x1d, 0x54, 0xbe, 0x98, 0x56, 0x31, 0x1c, 0x8b, 0x74, + 0x4a, 0x0a, 0x8d, 0xde, 0x4e, 0x6a, 0x01, 0xfb, 0x6f, 0xb9, 0x3e, 0xad, 0x29, 0x44, 0x02, 0x80, 0x1a, 0x10, 0xad, + 0x7c, 0x6f, 0x87, 0xeb, 0xb8, 0xdc, 0x5d, 0xf9, 0x92, 0x3c, 0xbc, 0x33, 0xbc, 0x74, 0x50, 0x87, 0x26, 0xfa, 0x6b, + 0xbe, 0xee, 0x1e, 0xd9, 0x25, 0x09, 0x67, 0xe5, 0x0e, 0x2b, 0xf7, 0xd7, 0xe1, 0xdd, 0x95, 0x30, 0x0a, 0x84, 0xf1, + 0x8f, 0x1a, 0x30, 0x4a, 0x1e, 0x85, 0xb8, 0xf9, 0xe9, 0x71, 0xf3, 0x0f, 0xa2, 0x62, 0xb0, 0x01, 0x8d, 0xc1, 0x25, + 0x9a, 0x49, 0x42, 0x71, 0x88, 0x15, 0x8d, 0x8e, 0xb8, 0x1a, 0x27, 0x44, 0x5b, 0x77, 0x62, 0xc6, 0x6d, 0x0a, 0x8b, + 0x36, 0x3e, 0x8b, 0xfe, 0x78, 0xa8, 0xd4, 0xda, 0xdf, 0x2f, 0xb5, 0xce, 0xf6, 0x49, 0xad, 0xa9, 0x47, 0xd3, 0x7d, + 0xe2, 0xc6, 0x92, 0x53, 0x1c, 0x27, 0xce, 0x65, 0xdf, 0xb8, 0x92, 0xa8, 0x1b, 0x1d, 0xa0, 0x78, 0xab, 0x5a, 0x6f, + 0xd4, 0x4a, 0x10, 0xc5, 0xdf, 0x12, 0x83, 0xc2, 0x15, 0xea, 0xb2, 0x6c, 0xfc, 0xaa, 0x90, 0x8d, 0x53, 0xae, 0xa6, + 0xf0, 0x65, 0xe1, 0xd4, 0xbf, 0xe4, 0x27, 0x26, 0xb8, 0x83, 0xc2, 0x5f, 0xac, 0x18, 0xa9, 0xe4, 0x01, 0x55, 0x30, + 0x1a, 0x92, 0x5f, 0x1d, 0xe7, 0x32, 0xca, 0xee, 0x75, 0xe5, 0xaa, 0x85, 0x03, 0x54, 0x51, 0x0e, 0x52, 0x77, 0x1c, + 0xb2, 0x28, 0x96, 0xb7, 0x4d, 0xd9, 0x03, 0x46, 0x7e, 0x2d, 0x6d, 0x12, 0xe1, 0xaa, 0x42, 0x01, 0xcc, 0xc5, 0xf4, + 0x15, 0xbd, 0xb6, 0xb0, 0x81, 0xc0, 0x41, 0x36, 0x78, 0xd6, 0xed, 0x97, 0xce, 0xd3, 0x0c, 0x05, 0x85, 0x16, 0x5e, + 0x96, 0x41, 0x20, 0x7c, 0x6f, 0xb6, 0x0d, 0xb7, 0x3c, 0x5e, 0xf2, 0xec, 0x7e, 0x07, 0xf1, 0xa2, 0x62, 0xcb, 0x8a, + 0x7c, 0x3c, 0x99, 0x26, 0x35, 0xcf, 0xc5, 0xaa, 0xf5, 0x4e, 0xa9, 0x10, 0x67, 0xcb, 0x9c, 0x53, 0xca, 0x32, 0x7a, + 0x56, 0x63, 0xc0, 0xbf, 0xcb, 0xb6, 0x4e, 0xb2, 0x0e, 0x31, 0x9a, 0xbc, 0x99, 0x25, 0xae, 0xf7, 0x49, 0x1a, 0x32, + 0x97, 0x73, 0x82, 0x0c, 0xb8, 0xac, 0x29, 0x18, 0xba, 0x18, 0x7c, 0x91, 0x0c, 0xac, 0x4e, 0x2a, 0x49, 0x5f, 0x06, + 0x4f, 0xed, 0xae, 0xfb, 0x6a, 0x7e, 0x5c, 0x11, 0x8a, 0x76, 0x7a, 0x65, 0x91, 0x79, 0xcb, 0x38, 0xb2, 0xe5, 0x7a, + 0x35, 0xdd, 0xca, 0xb2, 0x55, 0x49, 0xe4, 0x5a, 0x17, 0xb3, 0xca, 0x9f, 0x9d, 0xcf, 0xe7, 0x65, 0x41, 0xa3, 0xad, + 0x1c, 0xa3, 0xb0, 0xf0, 0xa9, 0x6d, 0xdb, 0xd5, 0xb1, 0xef, 0x06, 0xbb, 0x89, 0x72, 0xdb, 0xd3, 0xc6, 0x11, 0x23, + 0x6c, 0xf7, 0xc1, 0xaf, 0x0e, 0x8e, 0xdc, 0x2a, 0x4e, 0x76, 0xc9, 0x2c, 0x62, 0x48, 0x8d, 0x21, 0xfc, 0x8c, 0xac, + 0xd2, 0x81, 0x47, 0x50, 0x07, 0x63, 0x49, 0x07, 0x1a, 0x0d, 0x07, 0xcc, 0x05, 0x98, 0x8a, 0x38, 0x7c, 0x57, 0xd8, + 0x0a, 0xca, 0xc3, 0x6b, 0xc2, 0x7b, 0xfe, 0x11, 0x3c, 0x28, 0xdb, 0xba, 0x4c, 0x1b, 0xa7, 0xd5, 0xb3, 0xff, 0x5c, + 0xaa, 0xa7, 0xc0, 0x05, 0xb8, 0xe5, 0x0a, 0x6d, 0x2a, 0x9f, 0xc5, 0xff, 0x17, 0xf2, 0xff, 0x57, 0xf1, 0xa6, 0x6c, + 0x3f, 0x72, 0x0a, 0x12, 0xed, 0xe2, 0xb4, 0xd0, 0x51, 0x37, 0xed, 0x01, 0x61, 0x65, 0x30, 0x97, 0x15, 0xe8, 0xa0, + 0xa4, 0x2f, 0xa5, 0xdc, 0x68, 0x10, 0xbf, 0x23, 0xc5, 0x0c, 0x4b, 0x5c, 0x88, 0x10, 0x8b, 0x84, 0x71, 0x30, 0x07, + 0xe3, 0xe5, 0x29, 0xea, 0x0f, 0x4a, 0x7b, 0x02, 0xb4, 0xf1, 0xb5, 0xb9, 0x1d, 0x24, 0xee, 0xaf, 0xea, 0xb5, 0x78, + 0xc7, 0x00, 0x32, 0x07, 0x0e, 0x21, 0x1a, 0x12, 0x28, 0x95, 0xcd, 0x4d, 0x47, 0x29, 0xde, 0xca, 0x7a, 0x36, 0x3e, + 0x30, 0xec, 0xae, 0xb9, 0x0a, 0xed, 0x9b, 0x6b, 0x0b, 0x60, 0xb2, 0x6c, 0xfb, 0xe1, 0xb3, 0x09, 0x4b, 0x2c, 0xef, + 0x47, 0x07, 0x97, 0x1c, 0xf7, 0xaf, 0x89, 0x77, 0x67, 0x4a, 0xcf, 0x3f, 0xca, 0x17, 0xff, 0xda, 0x28, 0xd0, 0xbb, + 0x2a, 0x49, 0xe8, 0x98, 0xb5, 0x78, 0x47, 0x3f, 0xa8, 0xf6, 0xca, 0x0f, 0x0f, 0xaf, 0xeb, 0x6e, 0x0e, 0xae, 0x0b, + 0x17, 0xc6, 0xc1, 0x95, 0xe1, 0xc6, 0xa1, 0x96, 0x0b, 0xd9, 0xe8, 0xaf, 0x92, 0x40, 0x51, 0x76, 0xfc, 0x55, 0xb1, + 0x15, 0xa5, 0xf2, 0xaf, 0xd6, 0x40, 0x7c, 0x1e, 0x94, 0x52, 0x41, 0xe1, 0x59, 0xd1, 0xd4, 0xbe, 0x72, 0xaa, 0xf4, + 0xbb, 0xca, 0x89, 0xad, 0x52, 0x2e, 0x6c, 0xa4, 0xf6, 0x3a, 0x85, 0x43, 0xdf, 0xb1, 0xad, 0x8e, 0xcf, 0x16, 0xfc, + 0x92, 0x98, 0xfb, 0x41, 0x40, 0x51, 0x45, 0x9a, 0x25, 0xd1, 0x27, 0x52, 0x56, 0xb3, 0xd0, 0x32, 0x66, 0x04, 0xd2, + 0xe1, 0x8f, 0x70, 0x76, 0x3c, 0x37, 0x1e, 0xe0, 0xd9, 0x90, 0x0b, 0xc1, 0x80, 0x93, 0x96, 0xe2, 0x27, 0xe0, 0x0e, + 0x9e, 0xaa, 0xe3, 0x33, 0x08, 0x1a, 0xa8, 0xcc, 0x46, 0xea, 0x8f, 0x9d, 0xbe, 0xe2, 0xf4, 0xee, 0xcc, 0xae, 0x67, + 0x9b, 0x8e, 0x75, 0xac, 0xd8, 0xd6, 0x89, 0xd9, 0xb1, 0xfa, 0x4a, 0xc7, 0xea, 0xc1, 0xbf, 0x9e, 0x63, 0xbd, 0x52, + 0x6c, 0x78, 0x52, 0x1c, 0xab, 0x8b, 0xff, 0x76, 0xac, 0xfe, 0x5d, 0x97, 0xde, 0xf4, 0xae, 0x70, 0xab, 0xaa, 0x8c, + 0x02, 0x9c, 0x40, 0xd4, 0xa3, 0xf1, 0xd9, 0x3a, 0x25, 0xca, 0x66, 0xa4, 0xbe, 0x52, 0x95, 0x65, 0x42, 0xe6, 0x23, + 0xf5, 0xa9, 0x2b, 0x95, 0x3a, 0xa7, 0x8d, 0xc5, 0x9d, 0x7e, 0x63, 0x71, 0xf7, 0xa4, 0xb1, 0xf8, 0xb8, 0x57, 0x2e, + 0x3e, 0x5a, 0xd0, 0x57, 0x52, 0xce, 0xbe, 0x95, 0x9b, 0x25, 0xfe, 0x46, 0x73, 0x14, 0x40, 0xd7, 0x26, 0xfc, 0xd3, + 0xef, 0xe8, 0xa2, 0xd5, 0x14, 0x5a, 0x09, 0x68, 0xf4, 0x4f, 0x15, 0xe7, 0xe4, 0x2f, 0x9d, 0x13, 0x0f, 0xea, 0x41, + 0x86, 0x49, 0xf8, 0xbb, 0xeb, 0x9e, 0x7a, 0xb6, 0x02, 0x0d, 0x1d, 0xf8, 0x6f, 0xd9, 0xeb, 0x78, 0xf4, 0xc1, 0x86, + 0xf7, 0x1f, 0x9d, 0x7e, 0x6a, 0x9b, 0x0e, 0xfc, 0xf7, 0x9b, 0x50, 0xb9, 0x83, 0xc2, 0x5f, 0xee, 0xf7, 0xd8, 0x56, + 0xba, 0xa7, 0xcb, 0x8e, 0xf5, 0xea, 0xae, 0x6f, 0x9d, 0x2e, 0x9d, 0xfe, 0x47, 0xfa, 0x14, 0x98, 0x1d, 0xeb, 0x15, + 0xfc, 0x7d, 0xec, 0xda, 0x4b, 0xd3, 0xb1, 0x4e, 0xef, 0xba, 0x56, 0x37, 0x30, 0x4f, 0xac, 0x53, 0xf8, 0xfb, 0x0d, + 0xc0, 0x0b, 0x70, 0x65, 0x29, 0x41, 0x15, 0xd8, 0x18, 0x15, 0xfb, 0x0d, 0xf9, 0x23, 0x9d, 0x63, 0xa5, 0x77, 0xfc, + 0x97, 0xd3, 0x3b, 0xf3, 0x78, 0xe9, 0x74, 0xee, 0xcc, 0xd6, 0x9f, 0x1f, 0x01, 0xf2, 0xbb, 0x17, 0x0e, 0xc0, 0x88, + 0x39, 0x40, 0xfe, 0x34, 0x31, 0x2e, 0xdb, 0xc4, 0xe8, 0xef, 0xf7, 0x8b, 0xd1, 0x7f, 0x58, 0x1f, 0x22, 0x46, 0x7f, + 0xff, 0xd5, 0xc5, 0xe8, 0x97, 0x55, 0x2b, 0xee, 0xf7, 0xd5, 0x58, 0xe5, 0xbf, 0x6c, 0xab, 0x44, 0xb2, 0xef, 0x6a, + 0xd7, 0x57, 0xeb, 0x1b, 0x88, 0xb6, 0xf3, 0x3e, 0x1a, 0xfd, 0xb0, 0x2e, 0x99, 0x28, 0x45, 0x80, 0x01, 0xde, 0x47, + 0x14, 0x03, 0xfc, 0xb6, 0x1e, 0x81, 0x5d, 0x04, 0xbb, 0x35, 0xfd, 0x99, 0xb9, 0x74, 0x83, 0xb9, 0xb8, 0x71, 0xa1, + 0x64, 0x88, 0xc5, 0x60, 0x33, 0x0f, 0x97, 0x09, 0x28, 0x6b, 0xd6, 0xab, 0x30, 0x1d, 0x9c, 0xd8, 0x80, 0xe6, 0x3b, + 0xf3, 0x24, 0xaf, 0x34, 0xb6, 0x78, 0x7c, 0xa2, 0x5b, 0x66, 0xd3, 0xdf, 0xfa, 0x1e, 0x4d, 0xd6, 0x9a, 0x7b, 0x77, + 0xea, 0xfd, 0x2a, 0x60, 0x0b, 0xc2, 0x4d, 0xfa, 0x80, 0xd8, 0x68, 0x7a, 0x5f, 0x36, 0x1c, 0xab, 0x98, 0x0a, 0xb6, + 0x8f, 0x14, 0x46, 0x52, 0x6d, 0xef, 0x94, 0x0d, 0xcf, 0xf6, 0x4d, 0xb3, 0xe1, 0xf3, 0xa5, 0xe6, 0x3b, 0xac, 0xde, + 0x44, 0xc7, 0x55, 0x50, 0x55, 0x32, 0x6d, 0x35, 0x02, 0xa4, 0xa0, 0x3d, 0x0b, 0xd3, 0xb8, 0x82, 0xf0, 0xb1, 0x15, + 0xbc, 0x8d, 0x6d, 0xe9, 0x5d, 0xa9, 0x4f, 0xd9, 0x9c, 0xee, 0xc5, 0x16, 0xe9, 0x41, 0xff, 0x37, 0x20, 0x6c, 0xd8, + 0x7d, 0x3c, 0x8d, 0x64, 0x38, 0x6f, 0xa5, 0x7e, 0x29, 0xa9, 0x9d, 0x2f, 0x9d, 0x6d, 0x9d, 0xb4, 0x69, 0x35, 0xa4, + 0x75, 0xc8, 0x8a, 0xdf, 0xd1, 0xf8, 0x79, 0x6a, 0xb6, 0x9a, 0x53, 0xd3, 0x62, 0xb4, 0xcc, 0xdd, 0xd5, 0x19, 0xaf, + 0xf7, 0x14, 0x36, 0xb1, 0xc1, 0x1e, 0x64, 0xc7, 0xf1, 0xed, 0x1c, 0xb2, 0x22, 0x0f, 0x90, 0x88, 0x90, 0x28, 0xa8, + 0x0e, 0xda, 0xd8, 0x0e, 0x77, 0x98, 0x7f, 0xc8, 0x1d, 0xb3, 0x4e, 0xd0, 0x56, 0x77, 0x97, 0xc5, 0x88, 0x70, 0x6d, + 0xd8, 0x96, 0x14, 0xa8, 0x4e, 0xaf, 0x6f, 0x38, 0x27, 0x86, 0xd5, 0xef, 0xe9, 0x39, 0x3f, 0x70, 0x72, 0x97, 0x25, + 0x80, 0x80, 0xc9, 0xae, 0x18, 0xa6, 0x1f, 0xfa, 0x99, 0xef, 0x06, 0x39, 0xa0, 0xfa, 0x32, 0xcd, 0xfb, 0xcf, 0x75, + 0x9a, 0xc1, 0x1c, 0x39, 0x49, 0x86, 0xe6, 0xca, 0xe6, 0x94, 0x64, 0xf7, 0x84, 0x84, 0x2d, 0xaa, 0xdc, 0xaa, 0xf5, + 0xf3, 0x1f, 0x67, 0x0b, 0x9a, 0x53, 0x3b, 0x8b, 0x69, 0x16, 0xb2, 0xfd, 0xc1, 0x4d, 0x75, 0xf3, 0x89, 0xf1, 0x53, + 0x1b, 0xc2, 0xfd, 0xe7, 0x7e, 0x84, 0x9b, 0x91, 0x43, 0x10, 0xee, 0x3f, 0xbf, 0x3a, 0xc2, 0xfd, 0x49, 0x46, 0xb8, + 0x25, 0x4f, 0x95, 0x42, 0x26, 0xfa, 0x01, 0x9f, 0x35, 0x08, 0xf2, 0xfb, 0x52, 0x3d, 0xa2, 0xe4, 0xa5, 0x2a, 0x25, + 0x5f, 0xfd, 0x58, 0xca, 0x26, 0x83, 0x2c, 0x3b, 0x06, 0x25, 0xa5, 0x99, 0x2b, 0x20, 0x31, 0xa9, 0x48, 0xb1, 0x0d, + 0x7d, 0x5e, 0x84, 0x59, 0x60, 0xbd, 0x67, 0x6c, 0x09, 0xa8, 0x20, 0x7e, 0x88, 0x92, 0x95, 0x8b, 0x01, 0xd9, 0x54, + 0xcc, 0x42, 0x07, 0x0f, 0x36, 0x78, 0x47, 0x79, 0x51, 0x38, 0x13, 0x72, 0x74, 0x32, 0xba, 0xa6, 0xf4, 0xa0, 0xfa, + 0x40, 0xdc, 0x44, 0x35, 0xe8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xfb, 0x45, 0xe7, 0xf8, 0xc5, 0x89, 0x0d, 0xff, 0x73, + 0x48, 0x37, 0x37, 0x58, 0xc5, 0x55, 0x14, 0x42, 0x22, 0x0c, 0x5e, 0xb3, 0xad, 0xda, 0x3d, 0x21, 0x9f, 0x8a, 0x5a, + 0xfd, 0xe6, 0x4a, 0x33, 0xf7, 0xa1, 0xa8, 0xd3, 0x58, 0x63, 0x19, 0xad, 0xa5, 0x61, 0x35, 0x8c, 0xc6, 0x0f, 0xd7, + 0x20, 0x19, 0x92, 0x6a, 0xc8, 0xaf, 0xd9, 0x74, 0x8b, 0x79, 0x91, 0x6e, 0x7e, 0x53, 0x64, 0xdb, 0xe1, 0x59, 0x3f, + 0xf6, 0x42, 0x90, 0x09, 0xd5, 0x6d, 0x8c, 0xd5, 0x8d, 0xf9, 0x66, 0x14, 0xc8, 0x75, 0x57, 0xa4, 0x54, 0xc7, 0x05, + 0xca, 0x92, 0x75, 0xe8, 0xd1, 0xac, 0xe9, 0xee, 0x34, 0xd5, 0xfc, 0x23, 0x88, 0xd6, 0x89, 0x1f, 0xd6, 0x71, 0xd5, + 0xdc, 0xb1, 0x5d, 0xa4, 0x26, 0x48, 0xf9, 0xaa, 0xb8, 0x2f, 0x32, 0x23, 0xa1, 0x09, 0x4d, 0x71, 0x69, 0xcd, 0x91, + 0xfb, 0x42, 0x34, 0x7c, 0x91, 0x19, 0x90, 0x54, 0x14, 0x96, 0xfb, 0xf9, 0x73, 0x5a, 0x0b, 0xd2, 0xfc, 0xd1, 0x69, + 0x9d, 0x7b, 0x22, 0x35, 0x98, 0xaa, 0xb8, 0x8b, 0x48, 0xc5, 0xd4, 0x60, 0x03, 0xcf, 0x88, 0x5e, 0xbe, 0x1c, 0x8f, + 0x1c, 0x9d, 0x25, 0xa9, 0x2c, 0x65, 0x54, 0xba, 0x3c, 0x4c, 0x35, 0xae, 0x37, 0x3a, 0x6d, 0xc5, 0x7e, 0xb8, 0xe0, + 0x9a, 0x69, 0x81, 0xbd, 0x20, 0xc3, 0x01, 0x55, 0x81, 0xb9, 0x5c, 0x45, 0xcd, 0xeb, 0xdc, 0x91, 0x04, 0x12, 0x6c, + 0x8e, 0xd4, 0xae, 0x65, 0x5b, 0xb6, 0x2a, 0x1a, 0xce, 0xfd, 0xc5, 0x68, 0x1b, 0x65, 0x2e, 0xe4, 0x8a, 0x09, 0xa2, + 0x05, 0x78, 0x7e, 0x64, 0x7e, 0x16, 0x40, 0xe2, 0x11, 0x70, 0x01, 0x59, 0x51, 0xae, 0x31, 0x67, 0xf6, 0xb8, 0x6e, + 0xf2, 0x09, 0x93, 0xcf, 0x71, 0xa7, 0x2f, 0x0c, 0x49, 0xf3, 0x23, 0x5c, 0x86, 0x9a, 0xaa, 0x41, 0xea, 0x43, 0x92, + 0xa4, 0xa6, 0x6c, 0xdf, 0x3e, 0x50, 0xa0, 0x0d, 0xa4, 0x25, 0xc7, 0x0e, 0xe6, 0x89, 0xbb, 0x82, 0x18, 0xdd, 0xdb, + 0xdc, 0x60, 0x98, 0x56, 0x65, 0xa8, 0x56, 0x71, 0x5e, 0x9d, 0x18, 0x4a, 0xc7, 0x31, 0x14, 0x1b, 0xd0, 0xad, 0x9a, + 0x1b, 0xdb, 0xfc, 0x66, 0xb8, 0x4f, 0x45, 0x47, 0xf1, 0xcb, 0x53, 0x3a, 0x0f, 0xaa, 0x9c, 0x63, 0xc2, 0xcf, 0x8c, + 0x06, 0x14, 0xd4, 0xa4, 0xe8, 0xd9, 0x3e, 0x15, 0xd3, 0x5f, 0x91, 0x4d, 0xa6, 0x63, 0x62, 0x0e, 0x56, 0xc5, 0xd7, + 0xb7, 0xe8, 0x9a, 0xe6, 0x87, 0x8a, 0xff, 0xf9, 0xb3, 0xe6, 0x83, 0xf9, 0xfd, 0x48, 0x82, 0x0f, 0x3c, 0xeb, 0x25, + 0x80, 0xf9, 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0xcc, 0x7f, 0x30, 0xc5, 0x9e, 0x15, 0xb8, + 0xe1, 0x02, 0x50, 0x9a, 0x1b, 0x2e, 0x6a, 0x06, 0x04, 0xd4, 0xbb, 0xae, 0x52, 0x5a, 0x74, 0x55, 0x28, 0xf7, 0xd3, + 0xef, 0x1f, 0xae, 0x68, 0xe2, 0x21, 0x48, 0x72, 0xed, 0xce, 0xd0, 0x15, 0xac, 0xd0, 0x3d, 0xbc, 0x1c, 0x7d, 0x73, + 0xb6, 0x22, 0x99, 0x4b, 0x05, 0x97, 0xc0, 0xe2, 0x01, 0x39, 0xa0, 0x78, 0x3c, 0x69, 0x28, 0x65, 0xf0, 0x66, 0xe4, + 0xce, 0xf7, 0x18, 0x9f, 0x66, 0x28, 0xec, 0x9e, 0x32, 0xd1, 0x46, 0x69, 0xe4, 0x18, 0xd4, 0x44, 0xd6, 0x73, 0x31, + 0xec, 0xe0, 0x28, 0x8c, 0xd4, 0xf1, 0x37, 0xc2, 0x9b, 0xa8, 0x6d, 0x11, 0x20, 0xfb, 0xdf, 0x75, 0x42, 0x82, 0x7f, + 0x8d, 0xbe, 0x81, 0x8b, 0xfb, 0x9b, 0x1b, 0x55, 0x1f, 0x66, 0x16, 0xf2, 0x31, 0xdf, 0x34, 0x64, 0xc1, 0x43, 0x1e, + 0x95, 0x31, 0x9b, 0x5d, 0x89, 0xd9, 0x84, 0xdf, 0xfb, 0x59, 0xd7, 0xf1, 0x19, 0x5e, 0x68, 0x63, 0xe0, 0x2e, 0xb6, + 0x25, 0x9e, 0xd3, 0x19, 0x22, 0x83, 0x3a, 0x0d, 0x5c, 0xef, 0x13, 0xe7, 0x50, 0xe5, 0x87, 0x43, 0x78, 0x51, 0x41, + 0xd9, 0x35, 0xee, 0x65, 0xdc, 0xca, 0x5b, 0xfc, 0x32, 0x7e, 0xea, 0x7e, 0xe9, 0x67, 0x82, 0x19, 0xc6, 0x87, 0x1c, + 0xb4, 0x39, 0x38, 0xbe, 0x82, 0xfd, 0x01, 0x06, 0xd5, 0x39, 0xfd, 0x4b, 0xef, 0xce, 0xb1, 0x97, 0x1d, 0xc7, 0x02, + 0x36, 0x67, 0xd9, 0xb5, 0xfa, 0x81, 0xd9, 0xb5, 0xfa, 0xf0, 0xf7, 0x11, 0x58, 0x2f, 0xb3, 0x63, 0x1d, 0x7f, 0x74, + 0x3a, 0x81, 0x79, 0x6a, 0xf5, 0xe1, 0xef, 0x92, 0xb6, 0xfa, 0x05, 0x99, 0x1e, 0x60, 0x78, 0xbe, 0x29, 0x61, 0x01, + 0xe9, 0xb7, 0xd0, 0x22, 0x18, 0xa5, 0xeb, 0xad, 0x41, 0x13, 0x01, 0x28, 0x43, 0x35, 0x78, 0x94, 0xc0, 0x70, 0xa8, + 0x41, 0x5a, 0x6e, 0x0c, 0x28, 0xcf, 0x0d, 0x32, 0xc2, 0x22, 0xc5, 0x7c, 0xfb, 0x31, 0x62, 0x6d, 0x9a, 0x03, 0x70, + 0xf3, 0x4c, 0x45, 0x54, 0x75, 0xf1, 0xb7, 0x18, 0x03, 0xeb, 0xf0, 0x90, 0xe1, 0x12, 0x56, 0x2a, 0xb2, 0xe5, 0xe5, + 0xfb, 0x07, 0x8e, 0x7e, 0xa3, 0x44, 0x64, 0x6b, 0xf9, 0xaa, 0x7d, 0x33, 0x75, 0x86, 0xe8, 0xfd, 0xf7, 0xf6, 0x83, + 0x49, 0x4a, 0x69, 0x3f, 0x3c, 0xba, 0xe7, 0xcc, 0x4f, 0xc4, 0xf0, 0x24, 0x14, 0xed, 0x34, 0x47, 0x2e, 0xd7, 0x21, + 0xad, 0xc5, 0x05, 0x50, 0xc9, 0x77, 0x6e, 0x20, 0x99, 0x5e, 0x48, 0x2d, 0x9f, 0x08, 0xcc, 0xff, 0xfc, 0x79, 0x31, + 0x38, 0xb3, 0x32, 0xee, 0x33, 0xa7, 0x07, 0xd7, 0x6e, 0x8f, 0x74, 0x77, 0x5a, 0x01, 0xed, 0x0f, 0x0f, 0x5b, 0xc4, + 0x93, 0xe4, 0x9a, 0x7e, 0xae, 0x63, 0x6c, 0x35, 0x45, 0xaa, 0x69, 0x18, 0x21, 0xb0, 0x6e, 0x85, 0xd5, 0x51, 0xf5, + 0x61, 0xc8, 0x15, 0x66, 0xe1, 0x8e, 0x90, 0xb8, 0x8c, 0x17, 0x53, 0x01, 0x34, 0x3b, 0xe6, 0xb1, 0xc7, 0xa5, 0xf1, + 0x7f, 0x3d, 0x09, 0x74, 0x2f, 0x02, 0x0d, 0x5f, 0xe5, 0xb4, 0x96, 0xdc, 0x4d, 0xc4, 0xbd, 0x4a, 0x2f, 0x54, 0x92, + 0x9e, 0xab, 0x50, 0x04, 0xf9, 0x8e, 0x30, 0xc5, 0x99, 0x30, 0x6f, 0x12, 0xb7, 0x45, 0x51, 0x60, 0xf8, 0x10, 0x13, + 0x5a, 0xe3, 0xae, 0x4e, 0xfa, 0xf3, 0xe7, 0xad, 0x97, 0x10, 0x55, 0x27, 0xcb, 0x99, 0x1e, 0x55, 0x19, 0xbf, 0xa9, + 0x32, 0x8a, 0x11, 0xfd, 0x22, 0xd6, 0xe0, 0x56, 0x59, 0x74, 0xef, 0xe1, 0xcf, 0x29, 0x71, 0x33, 0x8b, 0xe9, 0x41, + 0x34, 0xe9, 0x72, 0x37, 0x1c, 0xd2, 0x05, 0x7b, 0x2c, 0x16, 0x7f, 0x8b, 0x05, 0x9b, 0x7b, 0xb6, 0xfd, 0xb8, 0x66, + 0x7e, 0xc8, 0xd0, 0xc7, 0x67, 0xbb, 0x08, 0x9e, 0xf2, 0x2e, 0x73, 0x69, 0x84, 0x0d, 0xf9, 0xca, 0x8d, 0x32, 0x97, + 0xe7, 0x15, 0x01, 0xba, 0x7c, 0xd8, 0xa8, 0x30, 0x94, 0x7c, 0x95, 0xc7, 0xef, 0xae, 0xbe, 0x53, 0xd8, 0xfe, 0xa7, + 0xfa, 0x2d, 0x64, 0x64, 0x68, 0x14, 0xfc, 0x11, 0x8d, 0x82, 0xaf, 0xb0, 0xb4, 0x12, 0x10, 0x4b, 0x3e, 0x3f, 0xa2, + 0x10, 0x54, 0x15, 0x12, 0x7a, 0x54, 0xeb, 0xb7, 0x5a, 0x07, 0x99, 0x1f, 0xbb, 0x49, 0x76, 0x04, 0x4d, 0x4d, 0x40, + 0x72, 0x6a, 0x9b, 0x07, 0x33, 0x55, 0x1c, 0x72, 0xa1, 0x5a, 0x16, 0x72, 0xcd, 0xe1, 0xdc, 0x0f, 0x84, 0xe2, 0x90, + 0x7f, 0xc0, 0xf5, 0x3c, 0x12, 0x67, 0x23, 0xd5, 0x8d, 0x21, 0x1b, 0x02, 0xc6, 0x37, 0x3e, 0x8a, 0xbc, 0x8c, 0x64, + 0x66, 0x9a, 0x25, 0xc4, 0x5d, 0xa9, 0x22, 0xd6, 0x67, 0xbd, 0xbf, 0x74, 0x3d, 0x5d, 0xf9, 0x99, 0x08, 0x96, 0x47, + 0x27, 0x08, 0x2a, 0x3c, 0x18, 0xe2, 0x78, 0x92, 0x33, 0x10, 0x5e, 0x46, 0x8b, 0xca, 0x8e, 0x2a, 0x28, 0x97, 0x73, + 0x0c, 0xc5, 0xca, 0x22, 0xe0, 0xcf, 0xd0, 0x23, 0xe7, 0x96, 0x79, 0x5d, 0x8b, 0x98, 0x7e, 0xea, 0xf8, 0x8c, 0xb1, + 0xb7, 0x0a, 0x06, 0x0a, 0x50, 0x7b, 0x36, 0x04, 0x9b, 0x6d, 0xf3, 0xc7, 0x3e, 0x62, 0x95, 0xe1, 0x6a, 0xa2, 0x3d, + 0x63, 0xdc, 0x6f, 0x3a, 0x96, 0x2b, 0x20, 0x84, 0x4a, 0x2a, 0xde, 0xa5, 0x33, 0x16, 0x0e, 0x40, 0x38, 0x2a, 0xa4, + 0x95, 0x3e, 0x7f, 0x7e, 0x3d, 0xf9, 0xcf, 0xbf, 0x21, 0x38, 0xf9, 0xd2, 0xe1, 0x5e, 0xd0, 0xd7, 0x72, 0x2d, 0x46, + 0x7d, 0x1a, 0x13, 0x54, 0xef, 0x93, 0x19, 0x0f, 0x0b, 0xc2, 0xb7, 0x56, 0x3e, 0xb9, 0xe1, 0xa1, 0x9e, 0x20, 0x01, + 0x81, 0xce, 0x7d, 0xb5, 0x27, 0xb0, 0xbc, 0x13, 0x1e, 0x22, 0x40, 0xf9, 0x75, 0xf3, 0x7d, 0x1f, 0xb2, 0xf4, 0xd6, + 0xf2, 0x02, 0x48, 0x03, 0xc4, 0x3d, 0x34, 0x3e, 0x73, 0x99, 0xf0, 0x15, 0xc8, 0x8f, 0x74, 0x70, 0x04, 0xd3, 0x5c, + 0x46, 0x2b, 0x62, 0xf9, 0xd1, 0xd1, 0x3d, 0x99, 0x9a, 0x6e, 0xec, 0x53, 0xf9, 0x32, 0xca, 0xdd, 0x14, 0x4a, 0xf9, + 0x09, 0x05, 0x2d, 0xa5, 0xaf, 0xf3, 0x02, 0x94, 0x51, 0x01, 0x28, 0xf8, 0xe9, 0x8e, 0xcb, 0x01, 0xfc, 0x2c, 0x1e, + 0x31, 0xbe, 0x8c, 0xe5, 0xcf, 0x69, 0x1c, 0x3e, 0x1e, 0x72, 0xaf, 0x78, 0x30, 0xa3, 0xf9, 0x5c, 0x0e, 0xba, 0x67, + 0x95, 0xbf, 0x2f, 0xa0, 0x52, 0xec, 0xd9, 0x28, 0xa6, 0x5f, 0xaa, 0x7f, 0x42, 0xfc, 0x84, 0x6c, 0xb9, 0x2c, 0x3e, + 0x23, 0x9c, 0xe7, 0x5a, 0xf0, 0x3e, 0x01, 0x92, 0xa7, 0xb4, 0x12, 0x43, 0x14, 0xd5, 0xc8, 0xd0, 0x2d, 0xa4, 0xc9, + 0x93, 0xd1, 0x88, 0xe2, 0xb1, 0x2a, 0x3a, 0x03, 0x28, 0x35, 0x44, 0xcf, 0x87, 0xc9, 0x66, 0xd0, 0xd0, 0xa4, 0x1e, + 0x5c, 0xd8, 0xa8, 0x3a, 0x9d, 0xfa, 0x18, 0x8f, 0x5c, 0xbe, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5b, 0x58, 0x40, + 0xe0, 0xbc, 0x9f, 0x0a, 0x1e, 0x57, 0xbe, 0xa5, 0x28, 0xdb, 0x0c, 0xdc, 0x87, 0x48, 0xd2, 0xac, 0x33, 0x27, 0xfb, + 0x4b, 0x2c, 0xbd, 0xe2, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0x22, 0x90, 0xd7, 0x4f, 0x93, 0x1c, 0x32, 0x7c, 0xdf, 0x61, + 0x92, 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xec, 0x08, 0xe6, 0x07, + 0x81, 0x01, 0x4a, 0x94, 0x91, 0xaf, 0x43, 0xf4, 0x01, 0x37, 0xa5, 0xd6, 0x01, 0x17, 0x33, 0x4e, 0xd4, 0x21, 0xe7, + 0x28, 0xa2, 0x83, 0x96, 0xaa, 0xd4, 0x89, 0x15, 0xbb, 0x99, 0xca, 0xdb, 0x1f, 0xb1, 0xff, 0xb7, 0x35, 0x86, 0xeb, + 0xcf, 0x87, 0x19, 0xe1, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x4a, 0xb0, 0xee, 0xa8, 0x50, 0xec, + 0xe3, 0x5d, 0xb5, 0x0a, 0xd2, 0x48, 0x54, 0x8b, 0x5d, 0x4d, 0x7d, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, + 0x65, 0x36, 0x82, 0xaa, 0x5c, 0xd8, 0xee, 0xc6, 0x31, 0xad, 0xac, 0x0f, 0xcf, 0x8e, 0x28, 0xdf, 0x39, 0xa6, 0x3b, + 0x6c, 0x7c, 0x06, 0xd6, 0x85, 0x74, 0xd1, 0xdd, 0x38, 0x66, 0x4b, 0x4a, 0x7f, 0xd1, 0x37, 0x47, 0xcb, 0x6c, 0x15, + 0x8c, 0xff, 0x0f, 0x00, 0xa3, 0x9b, 0x76, 0x11, 0x5a, 0x03, 0x00}; } // namespace web_server } // namespace esphome From fcdf36e991342e29213f07c4f09fd639c83d7e54 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 21 May 2024 11:07:20 +1200 Subject: [PATCH 244/313] Bump version to 2024.5.2 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 9d2b8b78ea..48b8aa8656 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.1" +__version__ = "2024.5.2" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 76abf2200cb297e1b89abaf44d8997f047848d95 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Tue, 21 May 2024 20:08:53 -0500 Subject: [PATCH 245/313] Uncouple safe_mode from OTA (#6759) --- CODEOWNERS | 2 +- esphome/components/esphome/ota/__init__.py | 30 ++--- .../components/esphome/ota/ota_esphome.cpp | 98 +------------- esphome/components/esphome/ota/ota_esphome.h | 27 +--- esphome/components/ota/__init__.py | 4 +- esphome/components/safe_mode/__init__.py | 53 +++++++- .../components/safe_mode/button/__init__.py | 13 +- .../safe_mode/button/safe_mode_button.cpp | 6 +- .../safe_mode/button/safe_mode_button.h | 6 +- esphome/components/safe_mode/safe_mode.cpp | 125 ++++++++++++++++++ esphome/components/safe_mode/safe_mode.h | 44 ++++++ .../components/safe_mode/switch/__init__.py | 13 +- .../safe_mode/switch/safe_mode_switch.cpp | 9 +- .../safe_mode/switch/safe_mode_switch.h | 6 +- esphome/cpp_helpers.py | 17 +-- tests/components/ota/common.yaml | 3 - tests/components/safe_mode/common.yaml | 6 +- tests/test1.yaml | 7 +- tests/test2.yaml | 4 +- tests/test3.yaml | 6 +- tests/test4.yaml | 3 +- 21 files changed, 282 insertions(+), 200 deletions(-) create mode 100644 esphome/components/safe_mode/safe_mode.cpp create mode 100644 esphome/components/safe_mode/safe_mode.h diff --git a/CODEOWNERS b/CODEOWNERS index dc6c8caa87..22e581275b 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -306,7 +306,7 @@ esphome/components/rp2040_pwm/* @jesserockz esphome/components/rpi_dpi_rgb/* @clydebarrow esphome/components/rtl87xx/* @kuba2k2 esphome/components/rtttl/* @glmnet -esphome/components/safe_mode/* @jsuanet @paulmonigatti +esphome/components/safe_mode/* @jsuanet @kbx81 @paulmonigatti esphome/components/scd4x/* @martgras @sjtrny esphome/components/script/* @esphome/core esphome/components/sdm_meter/* @jesserockz @polyfaces diff --git a/esphome/components/esphome/ota/__init__.py b/esphome/components/esphome/ota/__init__.py index abe9323b53..c5903974c2 100644 --- a/esphome/components/esphome/ota/__init__.py +++ b/esphome/components/esphome/ota/__init__.py @@ -1,19 +1,16 @@ -from esphome.cpp_generator import RawExpression import esphome.codegen as cg import esphome.config_validation as cv from esphome.components.ota import BASE_OTA_SCHEMA, ota_to_code, OTAComponent from esphome.const import ( CONF_ID, CONF_NUM_ATTEMPTS, - CONF_OTA, CONF_PASSWORD, CONF_PORT, CONF_REBOOT_TIMEOUT, CONF_SAFE_MODE, CONF_VERSION, - KEY_PAST_SAFE_MODE, ) -from esphome.core import CORE, coroutine_with_priority +from esphome.core import coroutine_with_priority CODEOWNERS = ["@esphome/core"] @@ -28,7 +25,6 @@ CONFIG_SCHEMA = ( cv.Schema( { cv.GenerateID(): cv.declare_id(ESPHomeOTAComponent), - cv.Optional(CONF_SAFE_MODE, default=True): cv.boolean, cv.Optional(CONF_VERSION, default=2): cv.one_of(1, 2, int=True), cv.SplitDefault( CONF_PORT, @@ -39,10 +35,15 @@ CONFIG_SCHEMA = ( rtl87xx=8892, ): cv.port, cv.Optional(CONF_PASSWORD): cv.string, - cv.Optional( - CONF_REBOOT_TIMEOUT, default="5min" - ): cv.positive_time_period_milliseconds, - cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int, + cv.Optional(CONF_NUM_ATTEMPTS): cv.invalid( + f"'{CONF_SAFE_MODE}' (and its related configuration variables) has moved from 'ota' to its own component. See https://esphome.io/components/safe_mode" + ), + cv.Optional(CONF_REBOOT_TIMEOUT): cv.invalid( + f"'{CONF_SAFE_MODE}' (and its related configuration variables) has moved from 'ota' to its own component. See https://esphome.io/components/safe_mode" + ), + cv.Optional(CONF_SAFE_MODE): cv.invalid( + f"'{CONF_SAFE_MODE}' (and its related configuration variables) has moved from 'ota' to its own component. See https://esphome.io/components/safe_mode" + ), } ) .extend(BASE_OTA_SCHEMA) @@ -50,10 +51,8 @@ CONFIG_SCHEMA = ( ) -@coroutine_with_priority(50.0) +@coroutine_with_priority(52.0) async def to_code(config): - CORE.data[CONF_OTA] = {} - var = cg.new_Pvariable(config[CONF_ID]) await ota_to_code(var, config) cg.add(var.set_port(config[CONF_PORT])) @@ -63,10 +62,3 @@ async def to_code(config): cg.add_define("USE_OTA_VERSION", config[CONF_VERSION]) await cg.register_component(var, config) - - if config[CONF_SAFE_MODE]: - condition = var.should_enter_safe_mode( - config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT] - ) - cg.add(RawExpression(f"if ({condition}) return")) - CORE.data[CONF_OTA][KEY_PAST_SAFE_MODE] = True diff --git a/esphome/components/esphome/ota/ota_esphome.cpp b/esphome/components/esphome/ota/ota_esphome.cpp index f2f1cfc6a8..9d5044aaeb 100644 --- a/esphome/components/esphome/ota/ota_esphome.cpp +++ b/esphome/components/esphome/ota/ota_esphome.cpp @@ -78,23 +78,9 @@ void ESPHomeOTAComponent::dump_config() { ESP_LOGCONFIG(TAG, " Password configured"); } #endif - if (this->has_safe_mode_ && this->safe_mode_rtc_value_ > 1 && - this->safe_mode_rtc_value_ != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { - ESP_LOGW(TAG, "Last reset occurred too quickly; safe mode will be invoked in %" PRIu32 " restarts", - this->safe_mode_num_attempts_ - this->safe_mode_rtc_value_); - } } -void ESPHomeOTAComponent::loop() { - this->handle_(); - - if (this->has_safe_mode_ && (millis() - this->safe_mode_start_time_) > this->safe_mode_enable_time_) { - this->has_safe_mode_ = false; - // successful boot, reset counter - ESP_LOGI(TAG, "Boot seems successful; resetting boot loop counter"); - this->clean_rtc(); - } -} +void ESPHomeOTAComponent::loop() { this->handle_(); } static const uint8_t FEATURE_SUPPORTS_COMPRESSION = 0x01; @@ -423,86 +409,4 @@ bool ESPHomeOTAComponent::writeall_(const uint8_t *buf, size_t len) { float ESPHomeOTAComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; } uint16_t ESPHomeOTAComponent::get_port() const { return this->port_; } void ESPHomeOTAComponent::set_port(uint16_t port) { this->port_ = port; } - -void ESPHomeOTAComponent::set_safe_mode_pending(const bool &pending) { - if (!this->has_safe_mode_) - return; - - uint32_t current_rtc = this->read_rtc_(); - - if (pending && current_rtc != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { - ESP_LOGI(TAG, "Device will enter safe mode on next boot"); - this->write_rtc_(ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC); - } - - if (!pending && current_rtc == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) { - ESP_LOGI(TAG, "Safe mode pending has been cleared"); - this->clean_rtc(); - } -} -bool ESPHomeOTAComponent::get_safe_mode_pending() { - return this->has_safe_mode_ && this->read_rtc_() == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC; -} - -bool ESPHomeOTAComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time) { - this->has_safe_mode_ = true; - this->safe_mode_start_time_ = millis(); - this->safe_mode_enable_time_ = enable_time; - this->safe_mode_num_attempts_ = num_attempts; - this->rtc_ = global_preferences->make_preference(233825507UL, false); - this->safe_mode_rtc_value_ = this->read_rtc_(); - - bool is_manual_safe_mode = this->safe_mode_rtc_value_ == ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC; - - if (is_manual_safe_mode) { - ESP_LOGI(TAG, "Safe mode has been entered manually"); - } else { - ESP_LOGCONFIG(TAG, "There have been %" PRIu32 " suspected unsuccessful boot attempts", this->safe_mode_rtc_value_); - } - - if (this->safe_mode_rtc_value_ >= num_attempts || is_manual_safe_mode) { - this->clean_rtc(); - - if (!is_manual_safe_mode) { - ESP_LOGE(TAG, "Boot loop detected. Proceeding to safe mode"); - } - - this->status_set_error(); - this->set_timeout(enable_time, []() { - ESP_LOGE(TAG, "No OTA attempt made, restarting"); - App.reboot(); - }); - - // Delay here to allow power to stabilise before Wi-Fi/Ethernet is initialised. - delay(300); // NOLINT - App.setup(); - - ESP_LOGI(TAG, "Waiting for OTA attempt"); - - return true; - } else { - // increment counter - this->write_rtc_(this->safe_mode_rtc_value_ + 1); - return false; - } -} - -void ESPHomeOTAComponent::write_rtc_(uint32_t val) { - this->rtc_.save(&val); - global_preferences->sync(); -} - -uint32_t ESPHomeOTAComponent::read_rtc_() { - uint32_t val; - if (!this->rtc_.load(&val)) - return 0; - return val; -} - -void ESPHomeOTAComponent::clean_rtc() { this->write_rtc_(0); } - -void ESPHomeOTAComponent::on_safe_shutdown() { - if (this->has_safe_mode_ && this->read_rtc_() != ESPHomeOTAComponent::ENTER_SAFE_MODE_MAGIC) - this->clean_rtc(); -} } // namespace esphome diff --git a/esphome/components/esphome/ota/ota_esphome.h b/esphome/components/esphome/ota/ota_esphome.h index e8f36f05ca..42629b4346 100644 --- a/esphome/components/esphome/ota/ota_esphome.h +++ b/esphome/components/esphome/ota/ota_esphome.h @@ -15,17 +15,9 @@ class ESPHomeOTAComponent : public ota::OTAComponent { void set_auth_password(const std::string &password) { password_ = password; } #endif // USE_OTA_PASSWORD - /// Manually set the port OTA should listen on. + /// Manually set the port OTA should listen on void set_port(uint16_t port); - bool should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time); - - /// Set to true if the next startup will enter safe mode - void set_safe_mode_pending(const bool &pending); - bool get_safe_mode_pending(); - - // ========== INTERNAL METHODS ========== - // (In most use cases you won't need these) void setup() override; void dump_config() override; float get_setup_priority() const override; @@ -33,14 +25,7 @@ class ESPHomeOTAComponent : public ota::OTAComponent { uint16_t get_port() const; - void clean_rtc(); - - void on_safe_shutdown() override; - protected: - void write_rtc_(uint32_t val); - uint32_t read_rtc_(); - void handle_(); bool readall_(uint8_t *buf, size_t len); bool writeall_(const uint8_t *buf, size_t len); @@ -53,16 +38,6 @@ class ESPHomeOTAComponent : public ota::OTAComponent { std::unique_ptr server_; std::unique_ptr client_; - - bool has_safe_mode_{false}; ///< stores whether safe mode can be enabled - uint32_t safe_mode_start_time_; ///< stores when safe mode was enabled - uint32_t safe_mode_enable_time_{60000}; ///< The time safe mode should be on for - uint32_t safe_mode_rtc_value_; - uint8_t safe_mode_num_attempts_; - ESPPreferenceObject rtc_; - - static const uint32_t ENTER_SAFE_MODE_MAGIC = - 0x5afe5afe; ///< a magic number to indicate that safe mode should be entered on next boot }; } // namespace esphome diff --git a/esphome/components/ota/__init__.py b/esphome/components/ota/__init__.py index 3d2956931c..4e447bfb2d 100644 --- a/esphome/components/ota/__init__.py +++ b/esphome/components/ota/__init__.py @@ -6,7 +6,7 @@ from esphome.core import CORE, coroutine_with_priority from esphome.const import CONF_ESPHOME, CONF_OTA, CONF_PLATFORM, CONF_TRIGGER_ID CODEOWNERS = ["@esphome/core"] -AUTO_LOAD = ["md5"] +AUTO_LOAD = ["md5", "safe_mode"] IS_PLATFORM_COMPONENT = True @@ -76,7 +76,7 @@ BASE_OTA_SCHEMA = cv.Schema( ) -@coroutine_with_priority(51.0) +@coroutine_with_priority(54.0) async def to_code(config): cg.add_define("USE_OTA") diff --git a/esphome/components/safe_mode/__init__.py b/esphome/components/safe_mode/__init__.py index ab884bfee4..7f227d7dd1 100644 --- a/esphome/components/safe_mode/__init__.py +++ b/esphome/components/safe_mode/__init__.py @@ -1,5 +1,56 @@ +from esphome.cpp_generator import RawExpression import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.const import ( + CONF_DISABLED, + CONF_ID, + CONF_NUM_ATTEMPTS, + CONF_REBOOT_TIMEOUT, + CONF_SAFE_MODE, + KEY_PAST_SAFE_MODE, +) +from esphome.core import CORE, coroutine_with_priority -CODEOWNERS = ["@paulmonigatti", "@jsuanet"] + +CODEOWNERS = ["@paulmonigatti", "@jsuanet", "@kbx81"] safe_mode_ns = cg.esphome_ns.namespace("safe_mode") +SafeModeComponent = safe_mode_ns.class_("SafeModeComponent", cg.Component) + + +def _remove_id_if_disabled(value): + value = value.copy() + if value[CONF_DISABLED]: + value.pop(CONF_ID) + return value + + +CONFIG_SCHEMA = cv.All( + cv.Schema( + { + cv.GenerateID(): cv.declare_id(SafeModeComponent), + cv.Optional(CONF_DISABLED, default=False): cv.boolean, + cv.Optional(CONF_NUM_ATTEMPTS, default="10"): cv.positive_not_null_int, + cv.Optional( + CONF_REBOOT_TIMEOUT, default="5min" + ): cv.positive_time_period_milliseconds, + } + ).extend(cv.COMPONENT_SCHEMA), + _remove_id_if_disabled, +) + + +@coroutine_with_priority(50.0) +async def to_code(config): + if config[CONF_DISABLED]: + return + + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + + condition = var.should_enter_safe_mode( + config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT] + ) + cg.add(RawExpression(f"if ({condition}) return")) + CORE.data[CONF_SAFE_MODE] = {} + CORE.data[CONF_SAFE_MODE][KEY_PAST_SAFE_MODE] = True diff --git a/esphome/components/safe_mode/button/__init__.py b/esphome/components/safe_mode/button/__init__.py index bd51d2e038..5662db8f7e 100644 --- a/esphome/components/safe_mode/button/__init__.py +++ b/esphome/components/safe_mode/button/__init__.py @@ -1,16 +1,15 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import button -from esphome.components.esphome.ota import ESPHomeOTAComponent from esphome.const import ( - CONF_ESPHOME, + CONF_SAFE_MODE, DEVICE_CLASS_RESTART, ENTITY_CATEGORY_CONFIG, ICON_RESTART_ALERT, ) -from .. import safe_mode_ns +from .. import safe_mode_ns, SafeModeComponent -DEPENDENCIES = ["ota.esphome"] +DEPENDENCIES = ["safe_mode"] SafeModeButton = safe_mode_ns.class_("SafeModeButton", button.Button, cg.Component) @@ -21,7 +20,7 @@ CONFIG_SCHEMA = ( entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_RESTART_ALERT, ) - .extend({cv.GenerateID(CONF_ESPHOME): cv.use_id(ESPHomeOTAComponent)}) + .extend({cv.GenerateID(CONF_SAFE_MODE): cv.use_id(SafeModeComponent)}) .extend(cv.COMPONENT_SCHEMA) ) @@ -30,5 +29,5 @@ async def to_code(config): var = await button.new_button(config) await cg.register_component(var, config) - ota = await cg.get_variable(config[CONF_ESPHOME]) - cg.add(var.set_ota(ota)) + safe_mode_component = await cg.get_variable(config[CONF_SAFE_MODE]) + cg.add(var.set_safe_mode(safe_mode_component)) diff --git a/esphome/components/safe_mode/button/safe_mode_button.cpp b/esphome/components/safe_mode/button/safe_mode_button.cpp index d513b79c12..261688807a 100644 --- a/esphome/components/safe_mode/button/safe_mode_button.cpp +++ b/esphome/components/safe_mode/button/safe_mode_button.cpp @@ -8,11 +8,13 @@ namespace safe_mode { static const char *const TAG = "safe_mode.button"; -void SafeModeButton::set_ota(esphome::ESPHomeOTAComponent *ota) { this->ota_ = ota; } +void SafeModeButton::set_safe_mode(SafeModeComponent *safe_mode_component) { + this->safe_mode_component_ = safe_mode_component; +} void SafeModeButton::press_action() { ESP_LOGI(TAG, "Restarting device in safe mode..."); - this->ota_->set_safe_mode_pending(true); + this->safe_mode_component_->set_safe_mode_pending(true); // Let MQTT settle a bit delay(100); // NOLINT diff --git a/esphome/components/safe_mode/button/safe_mode_button.h b/esphome/components/safe_mode/button/safe_mode_button.h index a306735b7f..fea0955abb 100644 --- a/esphome/components/safe_mode/button/safe_mode_button.h +++ b/esphome/components/safe_mode/button/safe_mode_button.h @@ -1,7 +1,7 @@ #pragma once #include "esphome/components/button/button.h" -#include "esphome/components/esphome/ota/ota_esphome.h" +#include "esphome/components/safe_mode/safe_mode.h" #include "esphome/core/component.h" namespace esphome { @@ -10,10 +10,10 @@ namespace safe_mode { class SafeModeButton : public button::Button, public Component { public: void dump_config() override; - void set_ota(esphome::ESPHomeOTAComponent *ota); + void set_safe_mode(SafeModeComponent *safe_mode_component); protected: - esphome::ESPHomeOTAComponent *ota_; + SafeModeComponent *safe_mode_component_; void press_action() override; }; diff --git a/esphome/components/safe_mode/safe_mode.cpp b/esphome/components/safe_mode/safe_mode.cpp new file mode 100644 index 0000000000..06772ae1e0 --- /dev/null +++ b/esphome/components/safe_mode/safe_mode.cpp @@ -0,0 +1,125 @@ +#include "safe_mode.h" + +#include "esphome/core/application.h" +#include "esphome/core/hal.h" +#include "esphome/core/log.h" +#include "esphome/core/util.h" + +#include +#include +#include + +namespace esphome { +namespace safe_mode { + +static const char *const TAG = "safe_mode"; + +void SafeModeComponent::dump_config() { + ESP_LOGCONFIG(TAG, "Safe Mode:"); + ESP_LOGCONFIG(TAG, " Invoke after %u boot attempts", this->safe_mode_num_attempts_); + ESP_LOGCONFIG(TAG, " Remain in safe mode for %" PRIu32 " seconds", + this->safe_mode_enable_time_ / 1000); // because milliseconds + + if (this->safe_mode_rtc_value_ > 1 && this->safe_mode_rtc_value_ != SafeModeComponent::ENTER_SAFE_MODE_MAGIC) { + auto remaining_restarts = this->safe_mode_num_attempts_ - this->safe_mode_rtc_value_; + if (remaining_restarts) { + ESP_LOGW(TAG, "Last reset occurred too quickly; safe mode will be invoked in %" PRIu32 " restarts", + remaining_restarts); + } else { + ESP_LOGW(TAG, "SAFE MODE IS ACTIVE"); + } + } +} + +float SafeModeComponent::get_setup_priority() const { return setup_priority::AFTER_WIFI; } + +void SafeModeComponent::loop() { + if (!this->boot_successful_ && (millis() - this->safe_mode_start_time_) > this->safe_mode_enable_time_) { + // successful boot, reset counter + ESP_LOGI(TAG, "Boot seems successful; resetting boot loop counter"); + this->clean_rtc(); + this->boot_successful_ = true; + } +} + +void SafeModeComponent::set_safe_mode_pending(const bool &pending) { + uint32_t current_rtc = this->read_rtc_(); + + if (pending && current_rtc != SafeModeComponent::ENTER_SAFE_MODE_MAGIC) { + ESP_LOGI(TAG, "Device will enter safe mode on next boot"); + this->write_rtc_(SafeModeComponent::ENTER_SAFE_MODE_MAGIC); + } + + if (!pending && current_rtc == SafeModeComponent::ENTER_SAFE_MODE_MAGIC) { + ESP_LOGI(TAG, "Safe mode pending has been cleared"); + this->clean_rtc(); + } +} + +bool SafeModeComponent::get_safe_mode_pending() { + return this->read_rtc_() == SafeModeComponent::ENTER_SAFE_MODE_MAGIC; +} + +bool SafeModeComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time) { + this->safe_mode_start_time_ = millis(); + this->safe_mode_enable_time_ = enable_time; + this->safe_mode_num_attempts_ = num_attempts; + this->rtc_ = global_preferences->make_preference(233825507UL, false); + this->safe_mode_rtc_value_ = this->read_rtc_(); + + bool is_manual_safe_mode = this->safe_mode_rtc_value_ == SafeModeComponent::ENTER_SAFE_MODE_MAGIC; + + if (is_manual_safe_mode) { + ESP_LOGI(TAG, "Safe mode invoked manually"); + } else { + ESP_LOGCONFIG(TAG, "There have been %" PRIu32 " suspected unsuccessful boot attempts", this->safe_mode_rtc_value_); + } + + if (this->safe_mode_rtc_value_ >= num_attempts || is_manual_safe_mode) { + this->clean_rtc(); + + if (!is_manual_safe_mode) { + ESP_LOGE(TAG, "Boot loop detected. Proceeding to safe mode"); + } + + this->status_set_error(); + this->set_timeout(enable_time, []() { + ESP_LOGW(TAG, "Safe mode enable time has elapsed -- restarting"); + App.reboot(); + }); + + // Delay here to allow power to stabilize before Wi-Fi/Ethernet is initialised + delay(300); // NOLINT + App.setup(); + + ESP_LOGW(TAG, "SAFE MODE IS ACTIVE"); + + return true; + } else { + // increment counter + this->write_rtc_(this->safe_mode_rtc_value_ + 1); + return false; + } +} + +void SafeModeComponent::write_rtc_(uint32_t val) { + this->rtc_.save(&val); + global_preferences->sync(); +} + +uint32_t SafeModeComponent::read_rtc_() { + uint32_t val; + if (!this->rtc_.load(&val)) + return 0; + return val; +} + +void SafeModeComponent::clean_rtc() { this->write_rtc_(0); } + +void SafeModeComponent::on_safe_shutdown() { + if (this->read_rtc_() != SafeModeComponent::ENTER_SAFE_MODE_MAGIC) + this->clean_rtc(); +} + +} // namespace safe_mode +} // namespace esphome diff --git a/esphome/components/safe_mode/safe_mode.h b/esphome/components/safe_mode/safe_mode.h new file mode 100644 index 0000000000..6c7450a6ff --- /dev/null +++ b/esphome/components/safe_mode/safe_mode.h @@ -0,0 +1,44 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/helpers.h" +#include "esphome/core/preferences.h" + +namespace esphome { +namespace safe_mode { + +/// SafeModeComponent provides a safe way to recover from repeated boot failures +class SafeModeComponent : public Component { + public: + bool should_enter_safe_mode(uint8_t num_attempts, uint32_t enable_time); + + /// Set to true if the next startup will enter safe mode + void set_safe_mode_pending(const bool &pending); + bool get_safe_mode_pending(); + + void dump_config() override; + float get_setup_priority() const override; + void loop() override; + + void clean_rtc(); + + void on_safe_shutdown() override; + + protected: + void write_rtc_(uint32_t val); + uint32_t read_rtc_(); + + bool boot_successful_{false}; ///< set to true after boot is considered successful + uint32_t safe_mode_start_time_; ///< stores when safe mode was enabled + uint32_t safe_mode_enable_time_{60000}; ///< The time safe mode should remain active for + uint32_t safe_mode_rtc_value_; + uint8_t safe_mode_num_attempts_; + ESPPreferenceObject rtc_; + + static const uint32_t ENTER_SAFE_MODE_MAGIC = + 0x5afe5afe; ///< a magic number to indicate that safe mode should be entered on next boot +}; + +} // namespace safe_mode +} // namespace esphome diff --git a/esphome/components/safe_mode/switch/__init__.py b/esphome/components/safe_mode/switch/__init__.py index 0f8e500482..7271358149 100644 --- a/esphome/components/safe_mode/switch/__init__.py +++ b/esphome/components/safe_mode/switch/__init__.py @@ -1,15 +1,14 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import switch -from esphome.components.esphome.ota import ESPHomeOTAComponent from esphome.const import ( - CONF_ESPHOME, + CONF_SAFE_MODE, ENTITY_CATEGORY_CONFIG, ICON_RESTART_ALERT, ) -from .. import safe_mode_ns +from .. import safe_mode_ns, SafeModeComponent -DEPENDENCIES = ["ota.esphome"] +DEPENDENCIES = ["safe_mode"] SafeModeSwitch = safe_mode_ns.class_("SafeModeSwitch", switch.Switch, cg.Component) @@ -20,7 +19,7 @@ CONFIG_SCHEMA = ( entity_category=ENTITY_CATEGORY_CONFIG, icon=ICON_RESTART_ALERT, ) - .extend({cv.GenerateID(CONF_ESPHOME): cv.use_id(ESPHomeOTAComponent)}) + .extend({cv.GenerateID(CONF_SAFE_MODE): cv.use_id(SafeModeComponent)}) .extend(cv.COMPONENT_SCHEMA) ) @@ -29,5 +28,5 @@ async def to_code(config): var = await switch.new_switch(config) await cg.register_component(var, config) - ota = await cg.get_variable(config[CONF_ESPHOME]) - cg.add(var.set_ota(ota)) + safe_mode_component = await cg.get_variable(config[CONF_SAFE_MODE]) + cg.add(var.set_safe_mode(safe_mode_component)) diff --git a/esphome/components/safe_mode/switch/safe_mode_switch.cpp b/esphome/components/safe_mode/switch/safe_mode_switch.cpp index 71408df140..13b35ed210 100644 --- a/esphome/components/safe_mode/switch/safe_mode_switch.cpp +++ b/esphome/components/safe_mode/switch/safe_mode_switch.cpp @@ -6,9 +6,11 @@ namespace esphome { namespace safe_mode { -static const char *const TAG = "safe_mode_switch"; +static const char *const TAG = "safe_mode.switch"; -void SafeModeSwitch::set_ota(esphome::ESPHomeOTAComponent *ota) { this->ota_ = ota; } +void SafeModeSwitch::set_safe_mode(SafeModeComponent *safe_mode_component) { + this->safe_mode_component_ = safe_mode_component; +} void SafeModeSwitch::write_state(bool state) { // Acknowledge @@ -16,13 +18,14 @@ void SafeModeSwitch::write_state(bool state) { if (state) { ESP_LOGI(TAG, "Restarting device in safe mode..."); - this->ota_->set_safe_mode_pending(true); + this->safe_mode_component_->set_safe_mode_pending(true); // Let MQTT settle a bit delay(100); // NOLINT App.safe_reboot(); } } + void SafeModeSwitch::dump_config() { LOG_SWITCH("", "Safe Mode Switch", this); } } // namespace safe_mode diff --git a/esphome/components/safe_mode/switch/safe_mode_switch.h b/esphome/components/safe_mode/switch/safe_mode_switch.h index 5bd15a44de..24e660c803 100644 --- a/esphome/components/safe_mode/switch/safe_mode_switch.h +++ b/esphome/components/safe_mode/switch/safe_mode_switch.h @@ -1,6 +1,6 @@ #pragma once -#include "esphome/components/esphome/ota/ota_esphome.h" +#include "esphome/components/safe_mode/safe_mode.h" #include "esphome/components/switch/switch.h" #include "esphome/core/component.h" @@ -10,10 +10,10 @@ namespace safe_mode { class SafeModeSwitch : public switch_::Switch, public Component { public: void dump_config() override; - void set_ota(esphome::ESPHomeOTAComponent *ota); + void set_safe_mode(SafeModeComponent *safe_mode_component); protected: - esphome::ESPHomeOTAComponent *ota_; + SafeModeComponent *safe_mode_component_; void write_state(bool state) override; }; diff --git a/esphome/cpp_helpers.py b/esphome/cpp_helpers.py index ce494e5d9d..825224bb9d 100644 --- a/esphome/cpp_helpers.py +++ b/esphome/cpp_helpers.py @@ -3,12 +3,9 @@ import logging from esphome.const import ( CONF_DISABLED_BY_DEFAULT, CONF_ENTITY_CATEGORY, - CONF_ESPHOME, CONF_ICON, CONF_INTERNAL, CONF_NAME, - CONF_OTA, - CONF_PLATFORM, CONF_SAFE_MODE, CONF_SETUP_PRIORITY, CONF_TYPE_ID, @@ -141,22 +138,12 @@ async def build_registry_list(registry, config): async def past_safe_mode(): - ota_conf = {} - for ota_item in CORE.config.get(CONF_OTA, []): - if ota_item[CONF_PLATFORM] == CONF_ESPHOME: - ota_conf = ota_item - break - - if not ota_conf: - return - - safe_mode_enabled = ota_conf[CONF_SAFE_MODE] - if not safe_mode_enabled: + if CONF_SAFE_MODE not in CORE.config: return def _safe_mode_generator(): while True: - if CORE.data.get(CONF_OTA, {}).get(KEY_PAST_SAFE_MODE, False): + if CORE.data.get(CONF_SAFE_MODE, {}).get(KEY_PAST_SAFE_MODE, False): return yield diff --git a/tests/components/ota/common.yaml b/tests/components/ota/common.yaml index 4910e2d891..1433dada1f 100644 --- a/tests/components/ota/common.yaml +++ b/tests/components/ota/common.yaml @@ -4,11 +4,8 @@ wifi: ota: - platform: esphome - safe_mode: true password: "superlongpasswordthatnoonewillknow" port: 3286 - reboot_timeout: 2min - num_attempts: 5 on_begin: then: - logger.log: "OTA start" diff --git a/tests/components/safe_mode/common.yaml b/tests/components/safe_mode/common.yaml index 1dfc516254..9c1d1ad3f9 100644 --- a/tests/components/safe_mode/common.yaml +++ b/tests/components/safe_mode/common.yaml @@ -2,9 +2,9 @@ wifi: ssid: MySSID password: password1 -ota: - - platform: esphome - safe_mode: true +safe_mode: + num_attempts: 3 + reboot_timeout: 2min button: - platform: safe_mode diff --git a/tests/test1.yaml b/tests/test1.yaml index dc46b55c44..2a20a1bb45 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -264,13 +264,14 @@ uart: parity: EVEN baud_rate: 9600 +safe_mode: + num_attempts: 3 + reboot_timeout: 2min + ota: - platform: esphome - safe_mode: true password: "superlongpasswordthatnoonewillknow" port: 3286 - reboot_timeout: 2min - num_attempts: 5 on_state_change: then: lambda: >- diff --git a/tests/test2.yaml b/tests/test2.yaml index 54ff4807a3..92977697c1 100644 --- a/tests/test2.yaml +++ b/tests/test2.yaml @@ -79,11 +79,11 @@ uart: sequence: - lambda: UARTDebug::log_hex(direction, bytes, ':'); +safe_mode: + ota: - platform: esphome - safe_mode: true port: 3286 - num_attempts: 15 logger: level: DEBUG diff --git a/tests/test3.yaml b/tests/test3.yaml index 7554d4bcb2..d10413b142 100644 --- a/tests/test3.yaml +++ b/tests/test3.yaml @@ -327,11 +327,13 @@ modbus: vbus: uart_id: uart_4 +safe_mode: + num_attempts: 5 + reboot_timeout: 10min + ota: - platform: esphome - safe_mode: true port: 3286 - reboot_timeout: 15min logger: hardware_uart: UART1 diff --git a/tests/test4.yaml b/tests/test4.yaml index 86beee81c6..c9e8a27317 100644 --- a/tests/test4.yaml +++ b/tests/test4.yaml @@ -102,9 +102,10 @@ uart: baud_rate: 1200 parity: EVEN +safe_mode: + ota: - platform: esphome - safe_mode: true port: 3286 logger: From 1ca7c2d7ddc44f8debe288a98fbca3e40796f5cf Mon Sep 17 00:00:00 2001 From: Jeroen van Oort Date: Wed, 22 May 2024 06:17:32 +0200 Subject: [PATCH 246/313] Add support for acting as Modbus server (#4874) Co-authored-by: Jeroen van Oort Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/modbus/__init__.py | 35 ++++++++++++ esphome/components/modbus/modbus.cpp | 27 ++++++--- esphome/components/modbus/modbus.h | 9 +++ .../components/modbus_controller/__init__.py | 52 +++++++++++++++-- .../modbus_controller/modbus_controller.cpp | 57 +++++++++++++++++-- .../modbus_controller/modbus_controller.h | 22 +++++++ .../modbus_controller/test.esp32.yaml | 22 ++++++- 7 files changed, 203 insertions(+), 21 deletions(-) diff --git a/esphome/components/modbus/__init__.py b/esphome/components/modbus/__init__.py index 6fea7033f2..ae0c818c28 100644 --- a/esphome/components/modbus/__init__.py +++ b/esphome/components/modbus/__init__.py @@ -1,5 +1,9 @@ +from __future__ import annotations +from typing import Literal + import esphome.codegen as cg import esphome.config_validation as cv +import esphome.final_validate as fv from esphome.cpp_helpers import gpio_pin_expression from esphome.components import uart from esphome.const import ( @@ -17,13 +21,21 @@ Modbus = modbus_ns.class_("Modbus", cg.Component, uart.UARTDevice) ModbusDevice = modbus_ns.class_("ModbusDevice") MULTI_CONF = True +CONF_ROLE = "role" CONF_MODBUS_ID = "modbus_id" CONF_SEND_WAIT_TIME = "send_wait_time" +ModbusRole = modbus_ns.enum("ModbusRole") +MODBUS_ROLES = { + "client": ModbusRole.CLIENT, + "server": ModbusRole.SERVER, +} + CONFIG_SCHEMA = ( cv.Schema( { cv.GenerateID(): cv.declare_id(Modbus), + cv.Optional(CONF_ROLE, default="client"): cv.enum(MODBUS_ROLES), cv.Optional(CONF_FLOW_CONTROL_PIN): pins.gpio_output_pin_schema, cv.Optional( CONF_SEND_WAIT_TIME, default="250ms" @@ -43,6 +55,7 @@ async def to_code(config): await uart.register_uart_device(var, config) + cg.add(var.set_role(config[CONF_ROLE])) if CONF_FLOW_CONTROL_PIN in config: pin = await gpio_pin_expression(config[CONF_FLOW_CONTROL_PIN]) cg.add(var.set_flow_control_pin(pin)) @@ -62,6 +75,28 @@ def modbus_device_schema(default_address): return cv.Schema(schema) +def final_validate_modbus_device( + name: str, *, role: Literal["server", "client"] | None = None +): + def validate_role(value): + assert role in MODBUS_ROLES + if value != role: + raise cv.Invalid(f"Component {name} requires role to be {role}") + return value + + def validate_hub(hub_config): + hub_schema = {} + if role is not None: + hub_schema[cv.Required(CONF_ROLE)] = validate_role + + return cv.Schema(hub_schema, extra=cv.ALLOW_EXTRA)(hub_config) + + return cv.Schema( + {cv.Required(CONF_MODBUS_ID): fv.id_declaration_match_schema(validate_hub)}, + extra=cv.ALLOW_EXTRA, + ) + + async def register_modbus_device(var, config): parent = await cg.get_variable(config[CONF_MODBUS_ID]) cg.add(var.set_parent(parent)) diff --git a/esphome/components/modbus/modbus.cpp b/esphome/components/modbus/modbus.cpp index 137fb0b26b..f8dd4c18b9 100644 --- a/esphome/components/modbus/modbus.cpp +++ b/esphome/components/modbus/modbus.cpp @@ -77,7 +77,13 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) { ESP_LOGD(TAG, "Modbus user-defined function %02X found", function_code); } else { - // the response for write command mirrors the requests and data startes at offset 2 instead of 3 for read commands + // data starts at 2 and length is 4 for read registers commands + if (this->role == ModbusRole::SERVER && (function_code == 0x3 || function_code == 0x4)) { + data_offset = 2; + data_len = 4; + } + + // the response for write command mirrors the requests and data starts at offset 2 instead of 3 for read commands if (function_code == 0x5 || function_code == 0x06 || function_code == 0xF || function_code == 0x10) { data_offset = 2; data_len = 4; @@ -123,6 +129,9 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) { // Ignore modbus exception not related to a pending command ESP_LOGD(TAG, "Ignoring Modbus error - not expecting a response"); } + } else if (this->role == ModbusRole::SERVER && (function_code == 0x3 || function_code == 0x4)) { + device->on_modbus_read_registers(function_code, uint16_t(data[1]) | (uint16_t(data[0]) << 8), + uint16_t(data[3]) | (uint16_t(data[2]) << 8)); } else { device->on_modbus_data(data); } @@ -164,16 +173,18 @@ void Modbus::send(uint8_t address, uint8_t function_code, uint16_t start_address std::vector data; data.push_back(address); data.push_back(function_code); - data.push_back(start_address >> 8); - data.push_back(start_address >> 0); - if (function_code != 0x5 && function_code != 0x6) { - data.push_back(number_of_entities >> 8); - data.push_back(number_of_entities >> 0); + if (this->role == ModbusRole::CLIENT) { + data.push_back(start_address >> 8); + data.push_back(start_address >> 0); + if (function_code != 0x5 && function_code != 0x6) { + data.push_back(number_of_entities >> 8); + data.push_back(number_of_entities >> 0); + } } if (payload != nullptr) { - if (function_code == 0xF || function_code == 0x10) { // Write multiple - data.push_back(payload_len); // Byte count is required for write + if (this->role == ModbusRole::SERVER || function_code == 0xF || function_code == 0x10) { // Write multiple + data.push_back(payload_len); // Byte count is required for write } else { payload_len = 2; // Write single register or coil } diff --git a/esphome/components/modbus/modbus.h b/esphome/components/modbus/modbus.h index dd8732c6e9..4a78ed4aab 100644 --- a/esphome/components/modbus/modbus.h +++ b/esphome/components/modbus/modbus.h @@ -8,6 +8,11 @@ namespace esphome { namespace modbus { +enum ModbusRole { + CLIENT, + SERVER, +}; + class ModbusDevice; class Modbus : public uart::UARTDevice, public Component { @@ -27,11 +32,14 @@ class Modbus : public uart::UARTDevice, public Component { void send(uint8_t address, uint8_t function_code, uint16_t start_address, uint16_t number_of_entities, uint8_t payload_len = 0, const uint8_t *payload = nullptr); void send_raw(const std::vector &payload); + void set_role(ModbusRole role) { this->role = role; } void set_flow_control_pin(GPIOPin *flow_control_pin) { this->flow_control_pin_ = flow_control_pin; } uint8_t waiting_for_response{0}; void set_send_wait_time(uint16_t time_in_ms) { send_wait_time_ = time_in_ms; } void set_disable_crc(bool disable_crc) { disable_crc_ = disable_crc; } + ModbusRole role; + protected: GPIOPin *flow_control_pin_{nullptr}; @@ -50,6 +58,7 @@ class ModbusDevice { void set_address(uint8_t address) { address_ = address; } virtual void on_modbus_data(const std::vector &data) = 0; virtual void on_modbus_error(uint8_t function_code, uint8_t exception_code) {} + virtual void on_modbus_read_registers(uint8_t function_code, uint16_t start_address, uint16_t number_of_registers){}; void send(uint8_t function, uint16_t start_address, uint16_t number_of_entities, uint8_t payload_len = 0, const uint8_t *payload = nullptr) { this->parent_->send(this->address_, function, start_address, number_of_entities, payload_len, payload); diff --git a/esphome/components/modbus_controller/__init__.py b/esphome/components/modbus_controller/__init__.py index 8703771c3a..b8ab48fcc6 100644 --- a/esphome/components/modbus_controller/__init__.py +++ b/esphome/components/modbus_controller/__init__.py @@ -23,6 +23,8 @@ CODEOWNERS = ["@martgras"] AUTO_LOAD = ["modbus"] +CONF_READ_LAMBDA = "read_lambda" +CONF_SERVER_REGISTERS = "server_registers" MULTI_CONF = True modbus_controller_ns = cg.esphome_ns.namespace("modbus_controller") @@ -31,6 +33,7 @@ ModbusController = modbus_controller_ns.class_( ) SensorItem = modbus_controller_ns.struct("SensorItem") +ServerRegister = modbus_controller_ns.struct("ServerRegister") ModbusFunctionCode_ns = modbus_controller_ns.namespace("ModbusFunctionCode") ModbusFunctionCode = ModbusFunctionCode_ns.enum("ModbusFunctionCode") @@ -94,10 +97,18 @@ TYPE_REGISTER_MAP = { "FP32_R": 2, } -MULTI_CONF = True - _LOGGER = logging.getLogger(__name__) +ModbusServerRegisterSchema = cv.Schema( + { + cv.GenerateID(): cv.declare_id(ServerRegister), + cv.Required(CONF_ADDRESS): cv.positive_int, + cv.Optional(CONF_VALUE_TYPE, default="U_WORD"): cv.enum(SENSOR_VALUE_TYPE), + cv.Required(CONF_READ_LAMBDA): cv.returning_lambda, + } +) + + CONFIG_SCHEMA = cv.All( cv.Schema( { @@ -106,6 +117,9 @@ CONFIG_SCHEMA = cv.All( CONF_COMMAND_THROTTLE, default="0ms" ): cv.positive_time_period_milliseconds, cv.Optional(CONF_OFFLINE_SKIP_UPDATES, default=0): cv.positive_int, + cv.Optional( + CONF_SERVER_REGISTERS, + ): cv.ensure_list(ModbusServerRegisterSchema), } ) .extend(cv.polling_component_schema("60s")) @@ -154,6 +168,17 @@ def validate_modbus_register(config): return config +def _final_validate(config): + if CONF_SERVER_REGISTERS in config: + return modbus.final_validate_modbus_device("modbus_controller", role="server")( + config + ) + return config + + +FINAL_VALIDATE_SCHEMA = _final_validate + + def modbus_calc_properties(config): byte_offset = 0 reg_count = 0 @@ -183,7 +208,7 @@ def modbus_calc_properties(config): async def add_modbus_base_properties( - var, config, sensor_type, lamdba_param_type=cg.float_, lamdba_return_type=float + var, config, sensor_type, lambda_param_type=cg.float_, lambda_return_type=float ): if CONF_CUSTOM_COMMAND in config: cg.add(var.set_custom_data(config[CONF_CUSTOM_COMMAND])) @@ -196,13 +221,13 @@ async def add_modbus_base_properties( config[CONF_LAMBDA], [ (sensor_type.operator("ptr"), "item"), - (lamdba_param_type, "x"), + (lambda_param_type, "x"), ( cg.std_vector.template(cg.uint8).operator("const").operator("ref"), "data", ), ], - return_type=cg.optional.template(lamdba_return_type), + return_type=cg.optional.template(lambda_return_type), ) cg.add(var.set_template(template_)) @@ -211,6 +236,23 @@ async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) cg.add(var.set_command_throttle(config[CONF_COMMAND_THROTTLE])) cg.add(var.set_offline_skip_updates(config[CONF_OFFLINE_SKIP_UPDATES])) + if CONF_SERVER_REGISTERS in config: + for server_register in config[CONF_SERVER_REGISTERS]: + cg.add( + var.add_server_register( + cg.new_Pvariable( + server_register[CONF_ID], + server_register[CONF_ADDRESS], + server_register[CONF_VALUE_TYPE], + TYPE_REGISTER_MAP[server_register[CONF_VALUE_TYPE]], + await cg.process_lambda( + server_register[CONF_READ_LAMBDA], + [], + return_type=cg.float_, + ), + ) + ) + ) await register_modbus_device(var, config) diff --git a/esphome/components/modbus_controller/modbus_controller.cpp b/esphome/components/modbus_controller/modbus_controller.cpp index 7565dc5e1b..9f73988b03 100644 --- a/esphome/components/modbus_controller/modbus_controller.cpp +++ b/esphome/components/modbus_controller/modbus_controller.cpp @@ -7,10 +7,7 @@ namespace modbus_controller { static const char *const TAG = "modbus_controller"; -void ModbusController::setup() { - // Modbus::setup(); - this->create_register_ranges_(); -} +void ModbusController::setup() { this->create_register_ranges_(); } /* To work with the existing modbus class and avoid polling for responses a command queue is used. @@ -102,6 +99,51 @@ void ModbusController::on_modbus_error(uint8_t function_code, uint8_t exception_ } } +void ModbusController::on_modbus_read_registers(uint8_t function_code, uint16_t start_address, + uint16_t number_of_registers) { + ESP_LOGD(TAG, + "Received read holding/input registers for device 0x%X. FC: 0x%X. Start address: 0x%X. Number of registers: " + "0x%X.", + this->address_, function_code, start_address, number_of_registers); + + std::vector sixteen_bit_response; + for (uint16_t current_address = start_address; current_address < start_address + number_of_registers;) { + bool found = false; + for (auto *server_register : this->server_registers_) { + if (server_register->address == current_address) { + float value = server_register->read_lambda(); + + ESP_LOGD(TAG, "Matched register. Address: 0x%02X. Value type: %zu. Register count: %u. Value: %0.1f.", + server_register->address, static_cast(server_register->value_type), + server_register->register_count, value); + number_to_payload(sixteen_bit_response, value, server_register->value_type); + current_address += server_register->register_count; + found = true; + break; + } + } + + if (!found) { + ESP_LOGW(TAG, "Could not match any register to address %02X. Sending exception response.", current_address); + std::vector error_response; + error_response.push_back(this->address_); + error_response.push_back(0x81); + error_response.push_back(0x02); + this->send_raw(error_response); + return; + } + } + + std::vector response; + for (auto v : sixteen_bit_response) { + auto decoded_value = decode_value(v); + response.push_back(decoded_value[0]); + response.push_back(decoded_value[1]); + } + + this->send(function_code, start_address, number_of_registers, response.size(), response.data()); +} + SensorSet ModbusController::find_sensors_(ModbusRegisterType register_type, uint16_t start_address) const { auto reg_it = find_if(begin(register_ranges_), end(register_ranges_), [=](RegisterRange const &r) { return (r.start_address == start_address && r.register_type == register_type); @@ -190,7 +232,7 @@ void ModbusController::update() { // walk through the sensors and determine the register ranges to read size_t ModbusController::create_register_ranges_() { register_ranges_.clear(); - if (sensorset_.empty()) { + if (this->parent_->role == modbus::ModbusRole::CLIENT && sensorset_.empty()) { ESP_LOGW(TAG, "No sensors registered"); return 0; } @@ -309,6 +351,11 @@ void ModbusController::dump_config() { ESP_LOGCONFIG(TAG, " Range type=%zu start=0x%X count=%d skip_updates=%d", static_cast(it.register_type), it.start_address, it.register_count, it.skip_updates); } + ESP_LOGCONFIG(TAG, "server registers"); + for (auto &r : server_registers_) { + ESP_LOGCONFIG(TAG, " Address=0x%02X value_type=%zu register_count=%u", r->address, + static_cast(r->value_type), r->register_count); + } #endif } diff --git a/esphome/components/modbus_controller/modbus_controller.h b/esphome/components/modbus_controller/modbus_controller.h index a389375523..9b7d59c93f 100644 --- a/esphome/components/modbus_controller/modbus_controller.h +++ b/esphome/components/modbus_controller/modbus_controller.h @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace esphome { @@ -251,6 +252,21 @@ class SensorItem { bool force_new_range{false}; }; +class ServerRegister { + public: + ServerRegister(uint16_t address, SensorValueType value_type, uint8_t register_count, + std::function read_lambda) { + this->address = address; + this->value_type = value_type; + this->register_count = register_count; + this->read_lambda = std::move(read_lambda); + } + uint16_t address; + SensorValueType value_type; + uint8_t register_count; + std::function read_lambda; +}; + // ModbusController::create_register_ranges_ tries to optimize register range // for this the sensors must be ordered by register_type, start_address and bitmask class SensorItemsComparator { @@ -418,10 +434,14 @@ class ModbusController : public PollingComponent, public modbus::ModbusDevice { void queue_command(const ModbusCommandItem &command); /// Registers a sensor with the controller. Called by esphomes code generator void add_sensor_item(SensorItem *item) { sensorset_.insert(item); } + /// Registers a server register with the controller. Called by esphomes code generator + void add_server_register(ServerRegister *server_register) { server_registers_.push_back(server_register); } /// called when a modbus response was parsed without errors void on_modbus_data(const std::vector &data) override; /// called when a modbus error response was received void on_modbus_error(uint8_t function_code, uint8_t exception_code) override; + /// called when a modbus request (function code 3 or 4) was parsed without errors + void on_modbus_read_registers(uint8_t function_code, uint16_t start_address, uint16_t number_of_registers) final; /// default delegate called by process_modbus_data when a response has retrieved from the incoming queue void on_register_data(ModbusRegisterType register_type, uint16_t start_address, const std::vector &data); /// default delegate called by process_modbus_data when a response for a write response has retrieved from the @@ -452,6 +472,8 @@ class ModbusController : public PollingComponent, public modbus::ModbusDevice { void dump_sensors_(); /// Collection of all sensors for this component SensorSet sensorset_; + /// Collection of all server registers for this component + std::vector server_registers_; /// Continuous range of modbus registers std::vector register_ranges_; /// Hold the pending requests to be sent diff --git a/tests/components/modbus_controller/test.esp32.yaml b/tests/components/modbus_controller/test.esp32.yaml index c5fe3fd057..3e022b10ab 100644 --- a/tests/components/modbus_controller/test.esp32.yaml +++ b/tests/components/modbus_controller/test.esp32.yaml @@ -1,14 +1,30 @@ uart: - - id: uart_modbus + - id: uart_modbus_client tx_pin: 17 rx_pin: 16 baud_rate: 9600 + - id: uart_modbus_server + tx_pin: 1 + rx_pin: 3 + baud_rate: 9600 modbus: - id: mod_bus1 - flow_control_pin: 15 + - id: mod_bus1 + uart_id: uart_modbus_client + flow_control_pin: 15 + - id: mod_bus2 + uart_id: uart_modbus_server + role: server modbus_controller: - id: modbus_controller1 address: 0x2 modbus_id: mod_bus1 + - id: modbus_controller2 + address: 0x2 + modbus_id: mod_bus2 + server_registers: + - address: 0x0000 + value_type: S_DWORD_R + read_lambda: |- + return 42.3; From 9a6fde21ee2fa4049e8c12760b8a12cf49cf4c94 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 22 May 2024 14:43:13 -0500 Subject: [PATCH 247/313] Add on_safe_mode trigger (#6790) --- esphome/components/safe_mode/__init__.py | 14 ++++++++++++++ esphome/components/safe_mode/automation.h | 17 +++++++++++++++++ esphome/components/safe_mode/safe_mode.cpp | 2 ++ esphome/components/safe_mode/safe_mode.h | 5 +++++ tests/components/safe_mode/common.yaml | 2 ++ 5 files changed, 40 insertions(+) create mode 100644 esphome/components/safe_mode/automation.h diff --git a/esphome/components/safe_mode/__init__.py b/esphome/components/safe_mode/__init__.py index 7f227d7dd1..92b285e279 100644 --- a/esphome/components/safe_mode/__init__.py +++ b/esphome/components/safe_mode/__init__.py @@ -7,15 +7,20 @@ from esphome.const import ( CONF_NUM_ATTEMPTS, CONF_REBOOT_TIMEOUT, CONF_SAFE_MODE, + CONF_TRIGGER_ID, KEY_PAST_SAFE_MODE, ) from esphome.core import CORE, coroutine_with_priority +from esphome import automation CODEOWNERS = ["@paulmonigatti", "@jsuanet", "@kbx81"] +CONF_ON_SAFE_MODE = "on_safe_mode" + safe_mode_ns = cg.esphome_ns.namespace("safe_mode") SafeModeComponent = safe_mode_ns.class_("SafeModeComponent", cg.Component) +SafeModeTrigger = safe_mode_ns.class_("SafeModeTrigger", automation.Trigger.template()) def _remove_id_if_disabled(value): @@ -34,6 +39,11 @@ CONFIG_SCHEMA = cv.All( cv.Optional( CONF_REBOOT_TIMEOUT, default="5min" ): cv.positive_time_period_milliseconds, + cv.Optional(CONF_ON_SAFE_MODE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SafeModeTrigger), + } + ), } ).extend(cv.COMPONENT_SCHEMA), _remove_id_if_disabled, @@ -48,6 +58,10 @@ async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) + for conf in config.get(CONF_ON_SAFE_MODE, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) + condition = var.should_enter_safe_mode( config[CONF_NUM_ATTEMPTS], config[CONF_REBOOT_TIMEOUT] ) diff --git a/esphome/components/safe_mode/automation.h b/esphome/components/safe_mode/automation.h new file mode 100644 index 0000000000..d1388449ee --- /dev/null +++ b/esphome/components/safe_mode/automation.h @@ -0,0 +1,17 @@ +#pragma once +#include "safe_mode.h" + +#include "esphome/core/automation.h" + +namespace esphome { +namespace safe_mode { + +class SafeModeTrigger : public Trigger<> { + public: + explicit SafeModeTrigger(SafeModeComponent *parent) { + parent->add_on_safe_mode_callback([this, parent]() { trigger(); }); + } +}; + +} // namespace safe_mode +} // namespace esphome diff --git a/esphome/components/safe_mode/safe_mode.cpp b/esphome/components/safe_mode/safe_mode.cpp index 06772ae1e0..6934dcb9d9 100644 --- a/esphome/components/safe_mode/safe_mode.cpp +++ b/esphome/components/safe_mode/safe_mode.cpp @@ -94,6 +94,8 @@ bool SafeModeComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t en ESP_LOGW(TAG, "SAFE MODE IS ACTIVE"); + this->safe_mode_callback_.call(); + return true; } else { // increment counter diff --git a/esphome/components/safe_mode/safe_mode.h b/esphome/components/safe_mode/safe_mode.h index 6c7450a6ff..0ec3c29529 100644 --- a/esphome/components/safe_mode/safe_mode.h +++ b/esphome/components/safe_mode/safe_mode.h @@ -25,6 +25,10 @@ class SafeModeComponent : public Component { void on_safe_shutdown() override; + void add_on_safe_mode_callback(std::function &&callback) { + this->safe_mode_callback_.add(std::move(callback)); + } + protected: void write_rtc_(uint32_t val); uint32_t read_rtc_(); @@ -35,6 +39,7 @@ class SafeModeComponent : public Component { uint32_t safe_mode_rtc_value_; uint8_t safe_mode_num_attempts_; ESPPreferenceObject rtc_; + CallbackManager safe_mode_callback_{}; static const uint32_t ENTER_SAFE_MODE_MAGIC = 0x5afe5afe; ///< a magic number to indicate that safe mode should be entered on next boot diff --git a/tests/components/safe_mode/common.yaml b/tests/components/safe_mode/common.yaml index 9c1d1ad3f9..ce8bf2f0cf 100644 --- a/tests/components/safe_mode/common.yaml +++ b/tests/components/safe_mode/common.yaml @@ -5,6 +5,8 @@ wifi: safe_mode: num_attempts: 3 reboot_timeout: 2min + on_safe_mode: + - logger.log: Time for safe mode button: - platform: safe_mode From 7f9383c83b1a4758b3950bf91333222d4ba40ca3 Mon Sep 17 00:00:00 2001 From: Penny Wood Date: Thu, 23 May 2024 05:31:56 +0800 Subject: [PATCH 248/313] [sx1509] Output open drain pin mode (#6788) --- esphome/components/sx1509/__init__.py | 4 ++ esphome/components/sx1509/sx1509.cpp | 56 ++++++++++++++----- .../components/sx1509/test.esp32-c3-idf.yaml | 18 ++++++ tests/components/sx1509/test.esp32-c3.yaml | 18 ++++++ tests/components/sx1509/test.esp32-idf.yaml | 18 ++++++ tests/components/sx1509/test.esp32.yaml | 18 ++++++ tests/components/sx1509/test.esp8266.yaml | 18 ++++++ tests/components/sx1509/test.rp2040.yaml | 18 ++++++ 8 files changed, 155 insertions(+), 13 deletions(-) diff --git a/esphome/components/sx1509/__init__.py b/esphome/components/sx1509/__init__.py index faef940125..e4f79dc2bc 100644 --- a/esphome/components/sx1509/__init__.py +++ b/esphome/components/sx1509/__init__.py @@ -11,6 +11,7 @@ from esphome.const import ( CONF_OUTPUT, CONF_PULLDOWN, CONF_PULLUP, + CONF_OPEN_DRAIN, ) CONF_KEYPAD = "keypad" @@ -79,6 +80,8 @@ def validate_mode(value): raise cv.Invalid("Pulldown only available with input") if value[CONF_PULLUP] and value[CONF_PULLDOWN]: raise cv.Invalid("Can only have one of pullup or pulldown") + if value[CONF_OPEN_DRAIN] and not value[CONF_OUTPUT]: + raise cv.Invalid("Open drain available only with output") return value @@ -94,6 +97,7 @@ SX1509_PIN_SCHEMA = cv.All( cv.Optional(CONF_PULLUP, default=False): cv.boolean, cv.Optional(CONF_PULLDOWN, default=False): cv.boolean, cv.Optional(CONF_OUTPUT, default=False): cv.boolean, + cv.Optional(CONF_OPEN_DRAIN, default=False): cv.boolean, }, validate_mode, ), diff --git a/esphome/components/sx1509/sx1509.cpp b/esphome/components/sx1509/sx1509.cpp index ee90e0e410..855a90bacd 100644 --- a/esphome/components/sx1509/sx1509.cpp +++ b/esphome/components/sx1509/sx1509.cpp @@ -86,33 +86,63 @@ void SX1509Component::digital_write(uint8_t pin, bool bit_value) { } void SX1509Component::pin_mode(uint8_t pin, gpio::Flags flags) { + ESP_LOGI(TAG, "Configuring pin %u with flags %x", pin, flags); + + uint16_t temp_word = 0; + this->read_byte_16(REG_DIR_B, &this->ddr_mask_); - if (flags == gpio::FLAG_OUTPUT) { + if (flags & gpio::FLAG_OUTPUT) { + // Always disable input buffer + this->read_byte_16(REG_INPUT_DISABLE_B, &temp_word); + temp_word |= (1 << pin); + this->write_byte_16(REG_INPUT_DISABLE_B, temp_word); + + if (flags & gpio::FLAG_OPEN_DRAIN) { + // Pullup must be disabled for open drain mode + this->read_byte_16(REG_PULL_UP_B, &temp_word); + temp_word &= ~(1 << pin); + this->write_byte_16(REG_PULL_UP_B, temp_word); + this->read_byte_16(REG_OPEN_DRAIN_B, &temp_word); + temp_word |= (1 << pin); + this->write_byte_16(REG_OPEN_DRAIN_B, temp_word); + ESP_LOGD(TAG, "Open drain output mode set for %u", pin); + } else { + ESP_LOGD(TAG, "Output Mode for %u", pin); + } + + // Set direction to output this->ddr_mask_ &= ~(1 << pin); + this->write_byte_16(REG_DIR_B, this->ddr_mask_); } else { - this->ddr_mask_ |= (1 << pin); + ESP_LOGD(TAG, "Input Mode for %u", pin); - uint16_t temp_pullup; - this->read_byte_16(REG_PULL_UP_B, &temp_pullup); - uint16_t temp_pulldown; - this->read_byte_16(REG_PULL_DOWN_B, &temp_pulldown); + // Always enable input buffer + this->read_byte_16(REG_INPUT_DISABLE_B, &temp_word); + temp_word &= ~(1 << pin); + this->write_byte_16(REG_INPUT_DISABLE_B, temp_word); + // Pullup + this->read_byte_16(REG_PULL_UP_B, &temp_word); if (flags & gpio::FLAG_PULLUP) { - temp_pullup |= (1 << pin); + temp_word |= (1 << pin); } else { - temp_pullup &= ~(1 << pin); + temp_word &= ~(1 << pin); } + this->write_byte_16(REG_PULL_UP_B, temp_word); + // Pulldown + this->read_byte_16(REG_PULL_DOWN_B, &temp_word); if (flags & gpio::FLAG_PULLDOWN) { - temp_pulldown |= (1 << pin); + temp_word |= (1 << pin); } else { - temp_pulldown &= ~(1 << pin); + temp_word &= ~(1 << pin); } + this->write_byte_16(REG_PULL_DOWN_B, temp_word); - this->write_byte_16(REG_PULL_UP_B, temp_pullup); - this->write_byte_16(REG_PULL_DOWN_B, temp_pulldown); + // Set direction to input + this->ddr_mask_ |= (1 << pin); + this->write_byte_16(REG_DIR_B, this->ddr_mask_); } - this->write_byte_16(REG_DIR_B, this->ddr_mask_); } void SX1509Component::setup_led_driver(uint8_t pin) { diff --git a/tests/components/sx1509/test.esp32-c3-idf.yaml b/tests/components/sx1509/test.esp32-c3-idf.yaml index ced849b3df..0397812880 100644 --- a/tests/components/sx1509/test.esp32-c3-idf.yaml +++ b/tests/components/sx1509/test.esp32-c3-idf.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true diff --git a/tests/components/sx1509/test.esp32-c3.yaml b/tests/components/sx1509/test.esp32-c3.yaml index ced849b3df..0397812880 100644 --- a/tests/components/sx1509/test.esp32-c3.yaml +++ b/tests/components/sx1509/test.esp32-c3.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true diff --git a/tests/components/sx1509/test.esp32-idf.yaml b/tests/components/sx1509/test.esp32-idf.yaml index 1698f2abc4..aa1d161a43 100644 --- a/tests/components/sx1509/test.esp32-idf.yaml +++ b/tests/components/sx1509/test.esp32-idf.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true diff --git a/tests/components/sx1509/test.esp32.yaml b/tests/components/sx1509/test.esp32.yaml index 1698f2abc4..aa1d161a43 100644 --- a/tests/components/sx1509/test.esp32.yaml +++ b/tests/components/sx1509/test.esp32.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true diff --git a/tests/components/sx1509/test.esp8266.yaml b/tests/components/sx1509/test.esp8266.yaml index ced849b3df..0397812880 100644 --- a/tests/components/sx1509/test.esp8266.yaml +++ b/tests/components/sx1509/test.esp8266.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true diff --git a/tests/components/sx1509/test.rp2040.yaml b/tests/components/sx1509/test.rp2040.yaml index ced849b3df..0397812880 100644 --- a/tests/components/sx1509/test.rp2040.yaml +++ b/tests/components/sx1509/test.rp2040.yaml @@ -13,3 +13,21 @@ binary_sensor: pin: sx1509: sx1509_hub number: 3 + +switch: + - platform: gpio + name: GPIO SX1509 Test Out Open Drain + pin: + sx1509: sx1509_hub + number: 0 + mode: + output: true + open_drain: true + + - platform: gpio + name: GPIO SX1509 Test Out Standard + pin: + sx1509: sx1509_hub + number: 1 + mode: + output: true From 4ab7a5d964c5a2d956e873292ef061d21d8ddf66 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 23 May 2024 17:04:33 +1200 Subject: [PATCH 249/313] [ledc] Change some logging lines from debug to verbose (#6796) --- esphome/components/ledc/ledc_output.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/ledc/ledc_output.cpp b/esphome/components/ledc/ledc_output.cpp index 0533143d37..1040ac25b6 100644 --- a/esphome/components/ledc/ledc_output.cpp +++ b/esphome/components/ledc/ledc_output.cpp @@ -52,12 +52,12 @@ float ledc_min_frequency_for_bit_depth(uint8_t bit_depth, bool low_frequency) { } optional ledc_bit_depth_for_frequency(float frequency) { - ESP_LOGD(TAG, "Calculating resolution bit-depth for frequency %f", frequency); + ESP_LOGV(TAG, "Calculating resolution bit-depth for frequency %f", frequency); for (int i = MAX_RES_BITS; i >= 1; i--) { const float min_frequency = ledc_min_frequency_for_bit_depth(i, (frequency < 100)); const float max_frequency = ledc_max_frequency_for_bit_depth(i); if (min_frequency <= frequency && frequency <= max_frequency) { - ESP_LOGD(TAG, "Resolution calculated as %d", i); + ESP_LOGV(TAG, "Resolution calculated as %d", i); return i; } } From aed0593793d8595d3e32737ffe77805dd02e1f95 Mon Sep 17 00:00:00 2001 From: Pavlo Dudnytskyi Date: Thu, 23 May 2024 23:07:39 +0200 Subject: [PATCH 250/313] [haier] ``text_sensor`` and ``button`` platforms (#6780) --- CODEOWNERS | 4 + esphome/components/haier/automation.h | 4 +- .../haier/binary_sensor/__init__.py | 1 + esphome/components/haier/button/__init__.py | 41 ++++++ .../components/haier/button/self_cleaning.cpp | 9 ++ .../components/haier/button/self_cleaning.h | 18 +++ .../haier/button/steri_cleaning.cpp | 9 ++ .../components/haier/button/steri_cleaning.h | 18 +++ esphome/components/haier/climate.py | 7 +- esphome/components/haier/haier_base.cpp | 3 +- esphome/components/haier/haier_base.h | 3 +- esphome/components/haier/hon_climate.cpp | 130 +++++++++++------- esphome/components/haier/hon_climate.h | 59 ++++---- esphome/components/haier/hon_packet.h | 5 +- esphome/components/haier/sensor/__init__.py | 1 + .../components/haier/text_sensor/__init__.py | 54 ++++++++ platformio.ini | 2 +- tests/components/haier/test.esp32-c3-idf.yaml | 18 +++ tests/components/haier/test.esp32-c3.yaml | 18 +++ tests/components/haier/test.esp32-idf.yaml | 18 +++ tests/components/haier/test.esp32.yaml | 18 +++ tests/components/haier/test.esp8266.yaml | 18 +++ tests/components/haier/test.rp2040.yaml | 18 +++ 23 files changed, 396 insertions(+), 80 deletions(-) create mode 100644 esphome/components/haier/button/__init__.py create mode 100644 esphome/components/haier/button/self_cleaning.cpp create mode 100644 esphome/components/haier/button/self_cleaning.h create mode 100644 esphome/components/haier/button/steri_cleaning.cpp create mode 100644 esphome/components/haier/button/steri_cleaning.h create mode 100644 esphome/components/haier/text_sensor/__init__.py diff --git a/CODEOWNERS b/CODEOWNERS index 22e581275b..e099ca42ac 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -152,6 +152,10 @@ esphome/components/grove_tb6612fng/* @max246 esphome/components/growatt_solar/* @leeuwte esphome/components/gt911/* @clydebarrow @jesserockz esphome/components/haier/* @paveldn +esphome/components/haier/binary_sensor/* @paveldn +esphome/components/haier/button/* @paveldn +esphome/components/haier/sensor/* @paveldn +esphome/components/haier/text_sensor/* @paveldn esphome/components/havells_solar/* @sourabhjaiswal esphome/components/hbridge/fan/* @WeekendWarrior esphome/components/hbridge/light/* @DotNetDann diff --git a/esphome/components/haier/automation.h b/esphome/components/haier/automation.h index 84e4554db8..55df7ecc1d 100644 --- a/esphome/components/haier/automation.h +++ b/esphome/components/haier/automation.h @@ -46,7 +46,7 @@ template class BeeperOffAction : public Action { template class VerticalAirflowAction : public Action { public: VerticalAirflowAction(HonClimate *parent) : parent_(parent) {} - TEMPLATABLE_VALUE(AirflowVerticalDirection, direction) + TEMPLATABLE_VALUE(hon_protocol::VerticalSwingMode, direction) void play(Ts... x) { this->parent_->set_vertical_airflow(this->direction_.value(x...)); } protected: @@ -56,7 +56,7 @@ template class VerticalAirflowAction : public Action { template class HorizontalAirflowAction : public Action { public: HorizontalAirflowAction(HonClimate *parent) : parent_(parent) {} - TEMPLATABLE_VALUE(AirflowHorizontalDirection, direction) + TEMPLATABLE_VALUE(hon_protocol::HorizontalSwingMode, direction) void play(Ts... x) { this->parent_->set_horizontal_airflow(this->direction_.value(x...)); } protected: diff --git a/esphome/components/haier/binary_sensor/__init__.py b/esphome/components/haier/binary_sensor/__init__.py index 4f72560a7b..8e9d5ec578 100644 --- a/esphome/components/haier/binary_sensor/__init__.py +++ b/esphome/components/haier/binary_sensor/__init__.py @@ -11,6 +11,7 @@ from ..climate import ( HonClimate, ) +CODEOWNERS = ["@paveldn"] BinarySensorTypeEnum = HonClimate.enum("SubBinarySensorType", True) # Haier sensors diff --git a/esphome/components/haier/button/__init__.py b/esphome/components/haier/button/__init__.py new file mode 100644 index 0000000000..efe6180aaf --- /dev/null +++ b/esphome/components/haier/button/__init__.py @@ -0,0 +1,41 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import button +from ..climate import ( + CONF_HAIER_ID, + HonClimate, + haier_ns, +) + +CODEOWNERS = ["@paveldn"] +SelfCleaningButton = haier_ns.class_("SelfCleaningButton", button.Button) +SteriCleaningButton = haier_ns.class_("SteriCleaningButton", button.Button) + + +# Haier buttons +CONF_SELF_CLEANING = "self_cleaning" +CONF_STERI_CLEANING = "steri_cleaning" + +# Additional icons +ICON_SPRAY_BOTTLE = "mdi:spray-bottle" + +CONFIG_SCHEMA = cv.Schema( + { + cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate), + cv.Optional(CONF_SELF_CLEANING): button.button_schema( + SelfCleaningButton, + icon=ICON_SPRAY_BOTTLE, + ), + cv.Optional(CONF_STERI_CLEANING): button.button_schema( + SteriCleaningButton, + icon=ICON_SPRAY_BOTTLE, + ), + } +) + + +async def to_code(config): + for button_type in [CONF_SELF_CLEANING, CONF_STERI_CLEANING]: + if conf := config.get(button_type): + btn = await button.new_button(conf) + await cg.register_parented(btn, config[CONF_HAIER_ID]) diff --git a/esphome/components/haier/button/self_cleaning.cpp b/esphome/components/haier/button/self_cleaning.cpp new file mode 100644 index 0000000000..128726036e --- /dev/null +++ b/esphome/components/haier/button/self_cleaning.cpp @@ -0,0 +1,9 @@ +#include "self_cleaning.h" + +namespace esphome { +namespace haier { + +void SelfCleaningButton::press_action() { this->parent_->start_self_cleaning(); } + +} // namespace haier +} // namespace esphome diff --git a/esphome/components/haier/button/self_cleaning.h b/esphome/components/haier/button/self_cleaning.h new file mode 100644 index 0000000000..308fb70f06 --- /dev/null +++ b/esphome/components/haier/button/self_cleaning.h @@ -0,0 +1,18 @@ +#pragma once + +#include "esphome/components/button/button.h" +#include "../hon_climate.h" + +namespace esphome { +namespace haier { + +class SelfCleaningButton : public button::Button, public Parented { + public: + SelfCleaningButton() = default; + + protected: + void press_action() override; +}; + +} // namespace haier +} // namespace esphome diff --git a/esphome/components/haier/button/steri_cleaning.cpp b/esphome/components/haier/button/steri_cleaning.cpp new file mode 100644 index 0000000000..02b723f1a4 --- /dev/null +++ b/esphome/components/haier/button/steri_cleaning.cpp @@ -0,0 +1,9 @@ +#include "steri_cleaning.h" + +namespace esphome { +namespace haier { + +void SteriCleaningButton::press_action() { this->parent_->start_steri_cleaning(); } + +} // namespace haier +} // namespace esphome diff --git a/esphome/components/haier/button/steri_cleaning.h b/esphome/components/haier/button/steri_cleaning.h new file mode 100644 index 0000000000..6cad313fb3 --- /dev/null +++ b/esphome/components/haier/button/steri_cleaning.h @@ -0,0 +1,18 @@ +#pragma once + +#include "esphome/components/button/button.h" +#include "../hon_climate.h" + +namespace esphome { +namespace haier { + +class SteriCleaningButton : public button::Button, public Parented { + public: + SteriCleaningButton() = default; + + protected: + void press_action() override; +}; + +} // namespace haier +} // namespace esphome diff --git a/esphome/components/haier/climate.py b/esphome/components/haier/climate.py index b16244fd90..1562708a4f 100644 --- a/esphome/components/haier/climate.py +++ b/esphome/components/haier/climate.py @@ -55,6 +55,7 @@ PROTOCOL_HON = "HON" PROTOCOL_SMARTAIR2 = "SMARTAIR2" haier_ns = cg.esphome_ns.namespace("haier") +hon_protocol_ns = haier_ns.namespace("hon_protocol") HaierClimateBase = haier_ns.class_( "HaierClimateBase", uart.UARTDevice, climate.Climate, cg.Component ) @@ -63,7 +64,7 @@ Smartair2Climate = haier_ns.class_("Smartair2Climate", HaierClimateBase) CONF_HAIER_ID = "haier_id" -AirflowVerticalDirection = haier_ns.enum("AirflowVerticalDirection", True) +AirflowVerticalDirection = hon_protocol_ns.enum("VerticalSwingMode", True) AIRFLOW_VERTICAL_DIRECTION_OPTIONS = { "HEALTH_UP": AirflowVerticalDirection.HEALTH_UP, "MAX_UP": AirflowVerticalDirection.MAX_UP, @@ -73,7 +74,7 @@ AIRFLOW_VERTICAL_DIRECTION_OPTIONS = { "HEALTH_DOWN": AirflowVerticalDirection.HEALTH_DOWN, } -AirflowHorizontalDirection = haier_ns.enum("AirflowHorizontalDirection", True) +AirflowHorizontalDirection = hon_protocol_ns.enum("HorizontalSwingMode", True) AIRFLOW_HORIZONTAL_DIRECTION_OPTIONS = { "MAX_LEFT": AirflowHorizontalDirection.MAX_LEFT, "LEFT": AirflowHorizontalDirection.LEFT, @@ -483,4 +484,4 @@ async def to_code(config): trigger, [(cg.uint8, "code"), (cg.const_char_ptr, "message")], conf ) # https://github.com/paveldn/HaierProtocol - cg.add_library("pavlodn/HaierProtocol", "0.9.25") + cg.add_library("pavlodn/HaierProtocol", "0.9.28") diff --git a/esphome/components/haier/haier_base.cpp b/esphome/components/haier/haier_base.cpp index a3f68bb081..1fca3dfb85 100644 --- a/esphome/components/haier/haier_base.cpp +++ b/esphome/components/haier/haier_base.cpp @@ -234,6 +234,7 @@ void HaierClimateBase::setup() { this->haier_protocol_.set_default_timeout_handler( std::bind(&esphome::haier::HaierClimateBase::timeout_default_handler_, this, std::placeholders::_1)); this->set_handlers(); + this->initialization(); } void HaierClimateBase::dump_config() { @@ -326,7 +327,7 @@ ClimateTraits HaierClimateBase::traits() { return traits_; } void HaierClimateBase::control(const ClimateCall &call) { ESP_LOGD("Control", "Control call"); - if (this->protocol_phase_ < ProtocolPhases::IDLE) { + if (!this->valid_connection()) { ESP_LOGW(TAG, "Can't send control packet, first poll answer not received"); return; // cancel the control, we cant do it without a poll answer. } diff --git a/esphome/components/haier/haier_base.h b/esphome/components/haier/haier_base.h index 504c841e5f..f261a106a2 100644 --- a/esphome/components/haier/haier_base.h +++ b/esphome/components/haier/haier_base.h @@ -44,7 +44,7 @@ class HaierClimateBase : public esphome::Component, void set_supported_modes(const std::set &modes); void set_supported_swing_modes(const std::set &modes); void set_supported_presets(const std::set &presets); - bool valid_connection() { return this->protocol_phase_ >= ProtocolPhases::IDLE; }; + bool valid_connection() const { return this->protocol_phase_ >= ProtocolPhases::IDLE; }; size_t available() noexcept override { return esphome::uart::UARTDevice::available(); }; size_t read_array(uint8_t *data, size_t len) noexcept override { return esphome::uart::UARTDevice::read_array(data, len) ? len : 0; @@ -80,6 +80,7 @@ class HaierClimateBase : public esphome::Component, virtual void process_phase(std::chrono::steady_clock::time_point now) = 0; virtual haier_protocol::HaierMessage get_control_message() = 0; virtual haier_protocol::HaierMessage get_power_message(bool state) = 0; + virtual void initialization(){}; virtual bool prepare_pending_action(); virtual void process_protocol_reset(); esphome::climate::ClimateTraits traits() override; diff --git a/esphome/components/haier/hon_climate.cpp b/esphome/components/haier/hon_climate.cpp index 9933cb4c8f..903f7964da 100644 --- a/esphome/components/haier/hon_climate.cpp +++ b/esphome/components/haier/hon_climate.cpp @@ -19,38 +19,6 @@ constexpr uint8_t CONTROL_MESSAGE_RETRIES = 5; constexpr std::chrono::milliseconds CONTROL_MESSAGE_RETRIES_INTERVAL = std::chrono::milliseconds(500); constexpr size_t ALARM_STATUS_REQUEST_INTERVAL_MS = 600000; -hon_protocol::VerticalSwingMode get_vertical_swing_mode(AirflowVerticalDirection direction) { - switch (direction) { - case AirflowVerticalDirection::HEALTH_UP: - return hon_protocol::VerticalSwingMode::HEALTH_UP; - case AirflowVerticalDirection::MAX_UP: - return hon_protocol::VerticalSwingMode::MAX_UP; - case AirflowVerticalDirection::UP: - return hon_protocol::VerticalSwingMode::UP; - case AirflowVerticalDirection::DOWN: - return hon_protocol::VerticalSwingMode::DOWN; - case AirflowVerticalDirection::HEALTH_DOWN: - return hon_protocol::VerticalSwingMode::HEALTH_DOWN; - default: - return hon_protocol::VerticalSwingMode::CENTER; - } -} - -hon_protocol::HorizontalSwingMode get_horizontal_swing_mode(AirflowHorizontalDirection direction) { - switch (direction) { - case AirflowHorizontalDirection::MAX_LEFT: - return hon_protocol::HorizontalSwingMode::MAX_LEFT; - case AirflowHorizontalDirection::LEFT: - return hon_protocol::HorizontalSwingMode::LEFT; - case AirflowHorizontalDirection::RIGHT: - return hon_protocol::HorizontalSwingMode::RIGHT; - case AirflowHorizontalDirection::MAX_RIGHT: - return hon_protocol::HorizontalSwingMode::MAX_RIGHT; - default: - return hon_protocol::HorizontalSwingMode::CENTER; - } -} - HonClimate::HonClimate() : cleaning_status_(CleaningState::NO_CLEANING), got_valid_outdoor_temp_(false), active_alarms_{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -66,17 +34,21 @@ void HonClimate::set_beeper_state(bool state) { this->beeper_status_ = state; } bool HonClimate::get_beeper_state() const { return this->beeper_status_; } -AirflowVerticalDirection HonClimate::get_vertical_airflow() const { return this->vertical_direction_; }; +esphome::optional HonClimate::get_vertical_airflow() const { + return this->current_vertical_swing_; +}; -void HonClimate::set_vertical_airflow(AirflowVerticalDirection direction) { - this->vertical_direction_ = direction; +void HonClimate::set_vertical_airflow(hon_protocol::VerticalSwingMode direction) { + this->pending_vertical_direction_ = direction; this->force_send_control_ = true; } -AirflowHorizontalDirection HonClimate::get_horizontal_airflow() const { return this->horizontal_direction_; } +esphome::optional HonClimate::get_horizontal_airflow() const { + return this->current_horizontal_swing_; +} -void HonClimate::set_horizontal_airflow(AirflowHorizontalDirection direction) { - this->horizontal_direction_ = direction; +void HonClimate::set_horizontal_airflow(hon_protocol::HorizontalSwingMode direction) { + this->pending_horizontal_direction_ = direction; this->force_send_control_ = true; } @@ -148,6 +120,11 @@ haier_protocol::HandlerError HonClimate::get_device_version_answer_handler_(haie this->hvac_hardware_info_.value().hardware_version_ = std::string(tmp); strncpy(tmp, answr->device_name, 8); this->hvac_hardware_info_.value().device_name_ = std::string(tmp); +#ifdef USE_TEXT_SENSOR + this->update_sub_text_sensor_(SubTextSensorType::APPLIANCE_NAME, this->hvac_hardware_info_.value().device_name_); + this->update_sub_text_sensor_(SubTextSensorType::PROTOCOL_VERSION, + this->hvac_hardware_info_.value().protocol_version_); +#endif this->hvac_hardware_info_.value().functions_[0] = (answr->functions[1] & 0x01) != 0; // interactive mode support this->hvac_hardware_info_.value().functions_[1] = (answr->functions[1] & 0x02) != 0; // controller-device mode support @@ -488,6 +465,19 @@ haier_protocol::HaierMessage HonClimate::get_power_message(bool state) { } } +void HonClimate::initialization() { + constexpr uint32_t restore_settings_version = 0xE834D8DCUL; + this->rtc_ = global_preferences->make_preference(this->get_object_id_hash() ^ restore_settings_version); + HonSettings recovered; + if (this->rtc_.load(&recovered)) { + this->settings_ = recovered; + } else { + this->settings_ = {hon_protocol::VerticalSwingMode::CENTER, hon_protocol::HorizontalSwingMode::CENTER}; + } + this->current_vertical_swing_ = this->settings_.last_vertiacal_swing; + this->current_horizontal_swing_ = this->settings_.last_horizontal_swing; +} + haier_protocol::HaierMessage HonClimate::get_control_message() { uint8_t control_out_buffer[sizeof(hon_protocol::HaierPacketControl)]; memcpy(control_out_buffer, this->last_status_message_.get(), sizeof(hon_protocol::HaierPacketControl)); @@ -560,16 +550,16 @@ haier_protocol::HaierMessage HonClimate::get_control_message() { if (climate_control.swing_mode.has_value()) { switch (climate_control.swing_mode.value()) { case CLIMATE_SWING_OFF: - out_data->horizontal_swing_mode = (uint8_t) get_horizontal_swing_mode(this->horizontal_direction_); - out_data->vertical_swing_mode = (uint8_t) get_vertical_swing_mode(this->vertical_direction_); + out_data->horizontal_swing_mode = (uint8_t) this->settings_.last_horizontal_swing; + out_data->vertical_swing_mode = (uint8_t) this->settings_.last_vertiacal_swing; break; case CLIMATE_SWING_VERTICAL: - out_data->horizontal_swing_mode = (uint8_t) get_horizontal_swing_mode(this->horizontal_direction_); + out_data->horizontal_swing_mode = (uint8_t) this->settings_.last_horizontal_swing; out_data->vertical_swing_mode = (uint8_t) hon_protocol::VerticalSwingMode::AUTO; break; case CLIMATE_SWING_HORIZONTAL: out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::AUTO; - out_data->vertical_swing_mode = (uint8_t) get_vertical_swing_mode(this->vertical_direction_); + out_data->vertical_swing_mode = (uint8_t) this->settings_.last_vertiacal_swing; break; case CLIMATE_SWING_BOTH: out_data->horizontal_swing_mode = (uint8_t) hon_protocol::HorizontalSwingMode::AUTO; @@ -631,11 +621,14 @@ haier_protocol::HaierMessage HonClimate::get_control_message() { break; } } - } else { - if (out_data->vertical_swing_mode != (uint8_t) hon_protocol::VerticalSwingMode::AUTO) - out_data->vertical_swing_mode = (uint8_t) get_vertical_swing_mode(this->vertical_direction_); - if (out_data->horizontal_swing_mode != (uint8_t) hon_protocol::HorizontalSwingMode::AUTO) - out_data->horizontal_swing_mode = (uint8_t) get_horizontal_swing_mode(this->horizontal_direction_); + } + if (this->pending_vertical_direction_.has_value()) { + out_data->vertical_swing_mode = (uint8_t) this->pending_vertical_direction_.value(); + this->pending_vertical_direction_.reset(); + } + if (this->pending_horizontal_direction_.has_value()) { + out_data->horizontal_swing_mode = (uint8_t) this->pending_horizontal_direction_.value(); + this->pending_horizontal_direction_.reset(); } out_data->beeper_status = ((!this->beeper_status_) || (!has_hvac_settings)) ? 1 : 0; control_out_buffer[4] = 0; // This byte should be cleared before setting values @@ -737,6 +730,33 @@ void HonClimate::update_sub_binary_sensor_(SubBinarySensorType type, uint8_t val } #endif // USE_BINARY_SENSOR +#ifdef USE_TEXT_SENSOR +void HonClimate::set_sub_text_sensor(SubTextSensorType type, text_sensor::TextSensor *sens) { + this->sub_text_sensors_[(size_t) type] = sens; + switch (type) { + case SubTextSensorType::APPLIANCE_NAME: + if (this->hvac_hardware_info_.has_value()) + sens->publish_state(this->hvac_hardware_info_.value().device_name_); + break; + case SubTextSensorType::PROTOCOL_VERSION: + if (this->hvac_hardware_info_.has_value()) + sens->publish_state(this->hvac_hardware_info_.value().protocol_version_); + break; + case SubTextSensorType::CLEANING_STATUS: + sens->publish_state(this->get_cleaning_status_text()); + break; + default: + break; + } +} + +void HonClimate::update_sub_text_sensor_(SubTextSensorType type, const std::string &value) { + size_t index = (size_t) type; + if (this->sub_text_sensors_[index] != nullptr) + this->sub_text_sensors_[index]->publish_state(value); +} +#endif // USE_TEXT_SENSOR + haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t *packet_buffer, uint8_t size) { size_t expected_size = 2 + sizeof(hon_protocol::HaierPacketControl) + sizeof(hon_protocol::HaierPacketSensors) + this->extra_control_packet_bytes_; @@ -896,6 +916,9 @@ haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t * PendingAction({ActionRequest::TURN_POWER_OFF, esphome::optional()}); } this->cleaning_status_ = new_cleaning; +#ifdef USE_TEXT_SENSOR + this->update_sub_text_sensor_(SubTextSensorType::CLEANING_STATUS, this->get_cleaning_status_text()); +#endif // USE_TEXT_SENSOR } } { @@ -941,6 +964,19 @@ haier_protocol::HandlerError HonClimate::process_status_message_(const uint8_t * this->swing_mode = CLIMATE_SWING_OFF; } } + // Saving last known non auto mode for vertical and horizontal swing + this->current_vertical_swing_ = (hon_protocol::VerticalSwingMode) packet.control.vertical_swing_mode; + this->current_horizontal_swing_ = (hon_protocol::HorizontalSwingMode) packet.control.horizontal_swing_mode; + bool save_settings = ((this->current_vertical_swing_.value() != hon_protocol::VerticalSwingMode::AUTO) && + (this->current_vertical_swing_.value() != hon_protocol::VerticalSwingMode::AUTO_SPECIAL) && + (this->current_vertical_swing_.value() != this->settings_.last_vertiacal_swing)) || + ((this->current_horizontal_swing_.value() != hon_protocol::HorizontalSwingMode::AUTO) && + (this->current_horizontal_swing_.value() != this->settings_.last_horizontal_swing)); + if (save_settings) { + this->settings_.last_vertiacal_swing = this->current_vertical_swing_.value(); + this->settings_.last_horizontal_swing = this->current_horizontal_swing_.value(); + this->rtc_.save(&this->settings_); + } should_publish = should_publish || (old_swing_mode != this->swing_mode); } this->last_valid_status_timestamp_ = std::chrono::steady_clock::now(); diff --git a/esphome/components/haier/hon_climate.h b/esphome/components/haier/hon_climate.h index c4fae20a98..7b4fcee6b9 100644 --- a/esphome/components/haier/hon_climate.h +++ b/esphome/components/haier/hon_climate.h @@ -7,29 +7,16 @@ #ifdef USE_BINARY_SENSOR #include "esphome/components/binary_sensor/binary_sensor.h" #endif +#ifdef USE_TEXT_SENSOR +#include "esphome/components/text_sensor/text_sensor.h" +#endif #include "esphome/core/automation.h" #include "haier_base.h" +#include "hon_packet.h" namespace esphome { namespace haier { -enum class AirflowVerticalDirection : uint8_t { - HEALTH_UP = 0, - MAX_UP = 1, - UP = 2, - CENTER = 3, - DOWN = 4, - HEALTH_DOWN = 5, -}; - -enum class AirflowHorizontalDirection : uint8_t { - MAX_LEFT = 0, - LEFT = 1, - CENTER = 2, - RIGHT = 3, - MAX_RIGHT = 4, -}; - enum class CleaningState : uint8_t { NO_CLEANING = 0, SELF_CLEAN = 1, @@ -38,6 +25,11 @@ enum class CleaningState : uint8_t { enum class HonControlMethod { MONITOR_ONLY = 0, SET_GROUP_PARAMETERS, SET_SINGLE_PARAMETER }; +struct HonSettings { + hon_protocol::VerticalSwingMode last_vertiacal_swing; + hon_protocol::HorizontalSwingMode last_horizontal_swing; +}; + class HonClimate : public HaierClimateBase { #ifdef USE_SENSOR public: @@ -80,6 +72,20 @@ class HonClimate : public HaierClimateBase { protected: void update_sub_binary_sensor_(SubBinarySensorType type, uint8_t value); binary_sensor::BinarySensor *sub_binary_sensors_[(size_t) SubBinarySensorType::SUB_BINARY_SENSOR_TYPE_COUNT]{nullptr}; +#endif +#ifdef USE_TEXT_SENSOR + public: + enum class SubTextSensorType { + CLEANING_STATUS = 0, + PROTOCOL_VERSION, + APPLIANCE_NAME, + SUB_TEXT_SENSOR_TYPE_COUNT, + }; + void set_sub_text_sensor(SubTextSensorType type, text_sensor::TextSensor *sens); + + protected: + void update_sub_text_sensor_(SubTextSensorType type, const std::string &value); + text_sensor::TextSensor *sub_text_sensors_[(size_t) SubTextSensorType::SUB_TEXT_SENSOR_TYPE_COUNT]{nullptr}; #endif public: HonClimate(); @@ -89,10 +95,10 @@ class HonClimate : public HaierClimateBase { void dump_config() override; void set_beeper_state(bool state); bool get_beeper_state() const; - AirflowVerticalDirection get_vertical_airflow() const; - void set_vertical_airflow(AirflowVerticalDirection direction); - AirflowHorizontalDirection get_horizontal_airflow() const; - void set_horizontal_airflow(AirflowHorizontalDirection direction); + esphome::optional get_vertical_airflow() const; + void set_vertical_airflow(hon_protocol::VerticalSwingMode direction); + esphome::optional get_horizontal_airflow() const; + void set_horizontal_airflow(hon_protocol::HorizontalSwingMode direction); std::string get_cleaning_status_text() const; CleaningState get_cleaning_status() const; void start_self_cleaning(); @@ -108,6 +114,7 @@ class HonClimate : public HaierClimateBase { void process_phase(std::chrono::steady_clock::time_point now) override; haier_protocol::HaierMessage get_control_message() override; haier_protocol::HaierMessage get_power_message(bool state) override; + void initialization() override; bool prepare_pending_action() override; void process_protocol_reset() override; bool should_get_big_data_(); @@ -147,9 +154,9 @@ class HonClimate : public HaierClimateBase { bool beeper_status_; CleaningState cleaning_status_; bool got_valid_outdoor_temp_; - AirflowVerticalDirection vertical_direction_; - AirflowHorizontalDirection horizontal_direction_; - esphome::optional hvac_hardware_info_; + esphome::optional pending_vertical_direction_{}; + esphome::optional pending_horizontal_direction_{}; + esphome::optional hvac_hardware_info_{}; uint8_t active_alarms_[8]; int extra_control_packet_bytes_; HonControlMethod control_method_; @@ -159,6 +166,10 @@ class HonClimate : public HaierClimateBase { float active_alarm_count_{NAN}; std::chrono::steady_clock::time_point last_alarm_request_; int big_data_sensors_{0}; + esphome::optional current_vertical_swing_{}; + esphome::optional current_horizontal_swing_{}; + HonSettings settings_; + ESPPreferenceObject rtc_; }; class HaierAlarmStartTrigger : public Trigger { diff --git a/esphome/components/haier/hon_packet.h b/esphome/components/haier/hon_packet.h index bbca7bb653..a03ac2831f 100644 --- a/esphome/components/haier/hon_packet.h +++ b/esphome/components/haier/hon_packet.h @@ -13,7 +13,10 @@ enum class VerticalSwingMode : uint8_t { UP = 0x04, CENTER = 0x06, DOWN = 0x08, - AUTO = 0x0C + MAX_DOWN = 0x0A, + AUTO = 0x0C, + // Auto for special modes + AUTO_SPECIAL = 0x0E }; enum class HorizontalSwingMode : uint8_t { diff --git a/esphome/components/haier/sensor/__init__.py b/esphome/components/haier/sensor/__init__.py index 01f997baa5..b2717631e0 100644 --- a/esphome/components/haier/sensor/__init__.py +++ b/esphome/components/haier/sensor/__init__.py @@ -31,6 +31,7 @@ from ..climate import ( HonClimate, ) +CODEOWNERS = ["@paveldn"] SensorTypeEnum = HonClimate.enum("SubSensorType", True) # Haier sensors diff --git a/esphome/components/haier/text_sensor/__init__.py b/esphome/components/haier/text_sensor/__init__.py new file mode 100644 index 0000000000..528b70d83e --- /dev/null +++ b/esphome/components/haier/text_sensor/__init__.py @@ -0,0 +1,54 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome.components import text_sensor +from esphome.const import ( + ENTITY_CATEGORY_DIAGNOSTIC, + ENTITY_CATEGORY_NONE, +) +from ..climate import ( + CONF_HAIER_ID, + HonClimate, +) + +CODEOWNERS = ["@paveldn"] +TextSensorTypeEnum = HonClimate.enum("SubTextSensorType", True) + +# Haier text sensors +CONF_CLEANING_STATUS = "cleaning_status" +CONF_PROTOCOL_VERSION = "protocol_version" +CONF_APPLIANCE_NAME = "appliance_name" + +# Additional icons +ICON_SPRAY_BOTTLE = "mdi:spray-bottle" +ICON_TEXT_BOX = "mdi:text-box-outline" + +TEXT_SENSOR_TYPES = { + CONF_CLEANING_STATUS: text_sensor.text_sensor_schema( + icon=ICON_SPRAY_BOTTLE, + entity_category=ENTITY_CATEGORY_NONE, + ), + CONF_PROTOCOL_VERSION: text_sensor.text_sensor_schema( + icon=ICON_TEXT_BOX, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + ), + CONF_APPLIANCE_NAME: text_sensor.text_sensor_schema( + icon=ICON_TEXT_BOX, + entity_category=ENTITY_CATEGORY_DIAGNOSTIC, + ), +} + +CONFIG_SCHEMA = cv.Schema( + { + cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate), + } +).extend({cv.Optional(type): schema for type, schema in TEXT_SENSOR_TYPES.items()}) + + +async def to_code(config): + paren = await cg.get_variable(config[CONF_HAIER_ID]) + + for type, _ in TEXT_SENSOR_TYPES.items(): + if conf := config.get(type): + sens = await text_sensor.new_text_sensor(conf) + text_sensor_type = getattr(TextSensorTypeEnum, type.upper()) + cg.add(paren.set_sub_text_sensor(text_sensor_type, sens)) diff --git a/platformio.ini b/platformio.ini index d342b32b02..65c742cf91 100644 --- a/platformio.ini +++ b/platformio.ini @@ -39,7 +39,7 @@ lib_deps = bblanchon/ArduinoJson@6.18.5 ; json wjtje/qr-code-generator-library@1.7.0 ; qr_code functionpointer/arduino-MLX90393@1.0.0 ; mlx90393 - pavlodn/HaierProtocol@0.9.25 ; haier + pavlodn/HaierProtocol@0.9.28 ; haier ; This is using the repository until a new release is published to PlatformIO https://github.com/Sensirion/arduino-gas-index-algorithm.git#3.2.1 ; Sensirion Gas Index Algorithm Arduino Library build_flags = diff --git a/tests/components/haier/test.esp32-c3-idf.yaml b/tests/components/haier/test.esp32-c3-idf.yaml index 72cfb781a7..fed573bd1d 100644 --- a/tests/components/haier/test.esp32-c3-idf.yaml +++ b/tests/components/haier/test.esp32-c3-idf.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version diff --git a/tests/components/haier/test.esp32-c3.yaml b/tests/components/haier/test.esp32-c3.yaml index 72cfb781a7..fed573bd1d 100644 --- a/tests/components/haier/test.esp32-c3.yaml +++ b/tests/components/haier/test.esp32-c3.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version diff --git a/tests/components/haier/test.esp32-idf.yaml b/tests/components/haier/test.esp32-idf.yaml index d3eeb04d65..efff532d25 100644 --- a/tests/components/haier/test.esp32-idf.yaml +++ b/tests/components/haier/test.esp32-idf.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version diff --git a/tests/components/haier/test.esp32.yaml b/tests/components/haier/test.esp32.yaml index d3eeb04d65..efff532d25 100644 --- a/tests/components/haier/test.esp32.yaml +++ b/tests/components/haier/test.esp32.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version diff --git a/tests/components/haier/test.esp8266.yaml b/tests/components/haier/test.esp8266.yaml index 72cfb781a7..fed573bd1d 100644 --- a/tests/components/haier/test.esp8266.yaml +++ b/tests/components/haier/test.esp8266.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version diff --git a/tests/components/haier/test.rp2040.yaml b/tests/components/haier/test.rp2040.yaml index 72cfb781a7..fed573bd1d 100644 --- a/tests/components/haier/test.rp2040.yaml +++ b/tests/components/haier/test.rp2040.yaml @@ -93,3 +93,21 @@ binary_sensor: name: Haier Indoor Fan Status outdoor_fan_status: name: Haier Outdoor Fan Status + +button: + - platform: haier + haier_id: haier_ac + self_cleaning: + name: Haier start self cleaning + steri_cleaning: + name: Haier start 56°C steri-cleaning + +text_sensor: + - platform: haier + haier_id: haier_ac + appliance_name: + name: Haier appliance name + cleaning_status: + name: Haier cleaning status + protocol_version: + name: Haier protocol version From c2d67659f3a2bca35cc5ca97708470c9e9f46fd5 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Thu, 23 May 2024 23:08:28 +0200 Subject: [PATCH 251/313] mpr121: Add GPIO support (#6776) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/mpr121/__init__.py | 88 ++++++++++++++++++- .../__init__.py} | 7 +- .../binary_sensor/mpr121_binary_sensor.cpp | 20 +++++ .../binary_sensor/mpr121_binary_sensor.h | 26 ++++++ esphome/components/mpr121/mpr121.cpp | 87 ++++++++++++++++-- esphome/components/mpr121/mpr121.h | 68 ++++++++++---- tests/components/mpr121/common.yaml | 41 +++++++++ .../components/mpr121/test.esp32-c3-idf.yaml | 29 +----- tests/components/mpr121/test.esp32-c3.yaml | 29 +----- tests/components/mpr121/test.esp32-idf.yaml | 29 +----- tests/components/mpr121/test.esp32.yaml | 29 +----- tests/components/mpr121/test.esp8266.yaml | 29 +----- tests/components/mpr121/test.rp2040.yaml | 29 +----- tests/test3.1.yaml | 27 ------ 14 files changed, 332 insertions(+), 206 deletions(-) rename esphome/components/mpr121/{binary_sensor.py => binary_sensor/__init__.py} (82%) create mode 100644 esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp create mode 100644 esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h create mode 100644 tests/components/mpr121/common.yaml diff --git a/esphome/components/mpr121/__init__.py b/esphome/components/mpr121/__init__.py index dabfb47ad6..1f8e804e88 100644 --- a/esphome/components/mpr121/__init__.py +++ b/esphome/components/mpr121/__init__.py @@ -1,19 +1,32 @@ import esphome.codegen as cg import esphome.config_validation as cv +import esphome.final_validate as fv +from esphome import pins from esphome.components import i2c -from esphome.const import CONF_ID +from esphome.const import ( + CONF_BINARY_SENSOR, + CONF_CHANNEL, + CONF_ID, + CONF_INPUT, + CONF_INVERTED, + CONF_MODE, + CONF_NUMBER, + CONF_OUTPUT, +) CONF_TOUCH_THRESHOLD = "touch_threshold" CONF_RELEASE_THRESHOLD = "release_threshold" CONF_TOUCH_DEBOUNCE = "touch_debounce" CONF_RELEASE_DEBOUNCE = "release_debounce" +CONF_MAX_TOUCH_CHANNEL = "max_touch_channel" +CONF_MPR121 = "mpr121" +CONF_MPR121_ID = "mpr121_id" DEPENDENCIES = ["i2c"] -AUTO_LOAD = ["binary_sensor"] mpr121_ns = cg.esphome_ns.namespace("mpr121") -CONF_MPR121_ID = "mpr121_id" MPR121Component = mpr121_ns.class_("MPR121Component", cg.Component, i2c.I2CDevice) +MPR121GPIOPin = mpr121_ns.class_("MPR121GPIOPin", cg.GPIOPin) MULTI_CONF = True CONFIG_SCHEMA = ( @@ -28,6 +41,7 @@ CONFIG_SCHEMA = ( cv.Optional(CONF_RELEASE_THRESHOLD, default=0x06): cv.int_range( min=0x05, max=0x30 ), + cv.Optional(CONF_MAX_TOUCH_CHANNEL): cv.int_range(min=3, max=11), } ) .extend(cv.COMPONENT_SCHEMA) @@ -35,11 +49,79 @@ CONFIG_SCHEMA = ( ) +def _final_validate(config): + fconf = fv.full_config.get() + max_touch_channel = 3 + if (binary_sensors := fconf.get(CONF_BINARY_SENSOR)) is not None: + for binary_sensor in binary_sensors: + if binary_sensor.get(CONF_MPR121_ID) == config[CONF_ID]: + max_touch_channel = max(max_touch_channel, binary_sensor[CONF_CHANNEL]) + if max_touch_channel_in_config := config.get(CONF_MAX_TOUCH_CHANNEL): + if max_touch_channel != max_touch_channel_in_config: + raise cv.Invalid( + "Max touch channel must equal the highest binary sensor channel or be removed for auto calculation", + path=[CONF_MAX_TOUCH_CHANNEL], + ) + path = fconf.get_path_for_id(config[CONF_ID])[:-1] + this_config = fconf.get_config_for_path(path) + this_config[CONF_MAX_TOUCH_CHANNEL] = max_touch_channel + + +FINAL_VALIDATE_SCHEMA = _final_validate + + async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) cg.add(var.set_touch_debounce(config[CONF_TOUCH_DEBOUNCE])) cg.add(var.set_release_debounce(config[CONF_RELEASE_DEBOUNCE])) cg.add(var.set_touch_threshold(config[CONF_TOUCH_THRESHOLD])) cg.add(var.set_release_threshold(config[CONF_RELEASE_THRESHOLD])) + cg.add(var.set_max_touch_channel(config[CONF_MAX_TOUCH_CHANNEL])) await cg.register_component(var, config) await i2c.register_i2c_device(var, config) + + +def validate_mode(value): + if bool(value[CONF_INPUT]) == bool(value[CONF_OUTPUT]): + raise cv.Invalid("Mode must be either input or output") + return value + + +# https://www.nxp.com/docs/en/data-sheet/MPR121.pdf, page 4 +# +# Among the 12 electrode inputs, 8 inputs are designed as multifunctional pins. When these pins are +# not configured as electrodes, they may be used to drive LEDs or used for general purpose input or +# output. +MPR121_GPIO_PIN_SCHEMA = pins.gpio_base_schema( + MPR121GPIOPin, + cv.int_range(min=4, max=11), + modes=[CONF_INPUT, CONF_OUTPUT], + mode_validator=validate_mode, +).extend( + { + cv.Required(CONF_MPR121): cv.use_id(MPR121Component), + } +) + + +def mpr121_pin_final_validate(pin_config, parent_config): + if pin_config[CONF_NUMBER] <= parent_config[CONF_MAX_TOUCH_CHANNEL]: + raise cv.Invalid( + "Pin number must be higher than the max touch channel of the MPR121 component", + ) + + +@pins.PIN_SCHEMA_REGISTRY.register( + CONF_MPR121, MPR121_GPIO_PIN_SCHEMA, mpr121_pin_final_validate +) +async def mpr121_gpio_pin_to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + parent = await cg.get_variable(config[CONF_MPR121]) + + cg.add(var.set_parent(parent)) + + num = config[CONF_NUMBER] + cg.add(var.set_pin(num)) + cg.add(var.set_inverted(config[CONF_INVERTED])) + cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE]))) + return var diff --git a/esphome/components/mpr121/binary_sensor.py b/esphome/components/mpr121/binary_sensor/__init__.py similarity index 82% rename from esphome/components/mpr121/binary_sensor.py rename to esphome/components/mpr121/binary_sensor/__init__.py index 131fbcfc5b..292c631c37 100644 --- a/esphome/components/mpr121/binary_sensor.py +++ b/esphome/components/mpr121/binary_sensor/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor from esphome.const import CONF_CHANNEL -from . import ( +from .. import ( mpr121_ns, MPR121Component, CONF_MPR121_ID, @@ -11,9 +11,9 @@ from . import ( ) DEPENDENCIES = ["mpr121"] -MPR121Channel = mpr121_ns.class_("MPR121Channel", binary_sensor.BinarySensor) +MPR121BinarySensor = mpr121_ns.class_("MPR121BinarySensor", binary_sensor.BinarySensor) -CONFIG_SCHEMA = binary_sensor.binary_sensor_schema(MPR121Channel).extend( +CONFIG_SCHEMA = binary_sensor.binary_sensor_schema(MPR121BinarySensor).extend( { cv.GenerateID(CONF_MPR121_ID): cv.use_id(MPR121Component), cv.Required(CONF_CHANNEL): cv.int_range(min=0, max=11), @@ -27,6 +27,7 @@ async def to_code(config): var = await binary_sensor.new_binary_sensor(config) hub = await cg.get_variable(config[CONF_MPR121_ID]) cg.add(var.set_channel(config[CONF_CHANNEL])) + cg.register_parented(var, hub) if CONF_TOUCH_THRESHOLD in config: cg.add(var.set_touch_threshold(config[CONF_TOUCH_THRESHOLD])) diff --git a/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp b/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp new file mode 100644 index 0000000000..dce0e73b9a --- /dev/null +++ b/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp @@ -0,0 +1,20 @@ +#include "mpr121_binary_sensor.h" + +namespace esphome { +namespace mpr121 { + +void MPR121BinarySensor::setup() { + uint8_t touch_threshold = this->touch_threshold_.value_or(this->parent_->get_touch_threshold()); + this->parent_->write_byte(MPR121_TOUCHTH_0 + 2 * this->channel_, touch_threshold); + + uint8_t release_threshold = this->release_threshold_.value_or(this->parent_->get_release_threshold()); + this->parent_->write_byte(MPR121_RELEASETH_0 + 2 * this->channel_, release_threshold); +} + +void MPR121BinarySensor::process(uint16_t data) { + bool new_state = data & (1 << this->channel_); + this->publish_state(new_state); +} + +} // namespace mpr121 +} // namespace esphome diff --git a/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h b/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h new file mode 100644 index 0000000000..577ba82893 --- /dev/null +++ b/esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h @@ -0,0 +1,26 @@ +#pragma once + +#include "esphome/components/binary_sensor/binary_sensor.h" + +#include "../mpr121.h" + +namespace esphome { +namespace mpr121 { + +class MPR121BinarySensor : public binary_sensor::BinarySensor, public MPR121Channel, public Parented { + public: + void set_channel(uint8_t channel) { this->channel_ = channel; } + void set_touch_threshold(uint8_t touch_threshold) { this->touch_threshold_ = touch_threshold; }; + void set_release_threshold(uint8_t release_threshold) { this->release_threshold_ = release_threshold; }; + + void setup() override; + void process(uint16_t data) override; + + protected: + uint8_t channel_{0}; + optional touch_threshold_{}; + optional release_threshold_{}; +}; + +} // namespace mpr121 +} // namespace esphome diff --git a/esphome/components/mpr121/mpr121.cpp b/esphome/components/mpr121/mpr121.cpp index 7ba3da7b4d..de364c59ff 100644 --- a/esphome/components/mpr121/mpr121.cpp +++ b/esphome/components/mpr121/mpr121.cpp @@ -1,6 +1,9 @@ #include "mpr121.h" -#include "esphome/core/log.h" + +#include + #include "esphome/core/hal.h" +#include "esphome/core/log.h" namespace esphome { namespace mpr121 { @@ -20,10 +23,7 @@ void MPR121Component::setup() { // set touch sensitivity for all 12 channels for (auto *channel : this->channels_) { - this->write_byte(MPR121_TOUCHTH_0 + 2 * channel->channel_, - channel->touch_threshold_.value_or(this->touch_threshold_)); - this->write_byte(MPR121_RELEASETH_0 + 2 * channel->channel_, - channel->release_threshold_.value_or(this->release_threshold_)); + channel->setup(); } this->write_byte(MPR121_MHDR, 0x01); this->write_byte(MPR121_NHDR, 0x01); @@ -44,8 +44,15 @@ void MPR121Component::setup() { this->write_byte(MPR121_CONFIG1, 0x10); // 0.5uS encoding, 1ms period this->write_byte(MPR121_CONFIG2, 0x20); - // start with first 5 bits of baseline tracking - this->write_byte(MPR121_ECR, 0x8F); + + // Write the Electrode Configuration Register + // * Highest 2 bits is "Calibration Lock", which we set to a value corresponding to 5 bits. + // * The 2 bits below is "Proximity Enable" and are left at 0. + // * The 4 least significant bits control how many electrodes are enabled. Electrodes are enabled + // as a range, starting at 0 up to the highest channel index used. + this->write_byte(MPR121_ECR, 0x80 | (this->max_touch_channel_ + 1)); + + this->flush_gpio_(); } void MPR121Component::set_touch_debounce(uint8_t debounce) { @@ -86,6 +93,72 @@ void MPR121Component::loop() { for (auto *channel : this->channels_) channel->process(val); + + this->read_byte(MPR121_GPIODATA, &this->gpio_input_); +} + +bool MPR121Component::digital_read(uint8_t ionum) { return (this->gpio_input_ & (1 << ionum)) != 0; } + +void MPR121Component::digital_write(uint8_t ionum, bool value) { + if (value) { + this->gpio_output_ |= (1 << ionum); + } else { + this->gpio_output_ &= ~(1 << ionum); + } + this->flush_gpio_(); +} + +void MPR121Component::pin_mode(uint8_t ionum, gpio::Flags flags) { + this->gpio_enable_ |= (1 << ionum); + if (flags & gpio::FLAG_INPUT) { + this->gpio_direction_ &= ~(1 << ionum); + } else if (flags & gpio::FLAG_OUTPUT) { + this->gpio_direction_ |= 1 << ionum; + } + this->flush_gpio_(); +} + +bool MPR121Component::flush_gpio_() { + if (this->is_failed()) { + return false; + } + + // TODO: The CTL registers can configure internal pullup/pulldown resistors. + this->write_byte(MPR121_GPIOCTL0, 0x00); + this->write_byte(MPR121_GPIOCTL1, 0x00); + this->write_byte(MPR121_GPIOEN, this->gpio_enable_); + this->write_byte(MPR121_GPIODIR, this->gpio_direction_); + + if (!this->write_byte(MPR121_GPIODATA, this->gpio_output_)) { + this->status_set_warning(); + return false; + } + + this->status_clear_warning(); + return true; +} + +void MPR121GPIOPin::setup() { this->pin_mode(this->flags_); } + +void MPR121GPIOPin::pin_mode(gpio::Flags flags) { + assert(this->pin_ >= 4); + this->parent_->pin_mode(this->pin_ - 4, flags); +} + +bool MPR121GPIOPin::digital_read() { + assert(this->pin_ >= 4); + return this->parent_->digital_read(this->pin_ - 4) != this->inverted_; +} + +void MPR121GPIOPin::digital_write(bool value) { + assert(this->pin_ >= 4); + this->parent_->digital_write(this->pin_ - 4, value != this->inverted_); +} + +std::string MPR121GPIOPin::dump_summary() const { + char buffer[32]; + snprintf(buffer, sizeof(buffer), "ELE%u on MPR121", this->pin_); + return buffer; } } // namespace mpr121 diff --git a/esphome/components/mpr121/mpr121.h b/esphome/components/mpr121/mpr121.h index 8b7735fa28..f2dc2fe9c9 100644 --- a/esphome/components/mpr121/mpr121.h +++ b/esphome/components/mpr121/mpr121.h @@ -1,8 +1,10 @@ #pragma once #include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/hal.h" + #include "esphome/components/i2c/i2c.h" -#include "esphome/components/binary_sensor/binary_sensor.h" #include @@ -39,6 +41,9 @@ enum { MPR121_UPLIMIT = 0x7D, MPR121_LOWLIMIT = 0x7E, MPR121_TARGETLIMIT = 0x7F, + MPR121_GPIOCTL0 = 0x73, + MPR121_GPIOCTL1 = 0x74, + MPR121_GPIODATA = 0x75, MPR121_GPIODIR = 0x76, MPR121_GPIOEN = 0x77, MPR121_GPIOSET = 0x78, @@ -47,19 +52,10 @@ enum { MPR121_SOFTRESET = 0x80, }; -class MPR121Channel : public binary_sensor::BinarySensor { - friend class MPR121Component; - +class MPR121Channel { public: - void set_channel(uint8_t channel) { channel_ = channel; } - void process(uint16_t data) { this->publish_state(static_cast(data & (1 << this->channel_))); } - void set_touch_threshold(uint8_t touch_threshold) { this->touch_threshold_ = touch_threshold; }; - void set_release_threshold(uint8_t release_threshold) { this->release_threshold_ = release_threshold; }; - - protected: - uint8_t channel_{0}; - optional touch_threshold_{}; - optional release_threshold_{}; + virtual void setup() = 0; + virtual void process(uint16_t data) = 0; }; class MPR121Component : public Component, public i2c::I2CDevice { @@ -69,23 +65,63 @@ class MPR121Component : public Component, public i2c::I2CDevice { void set_release_debounce(uint8_t debounce); void set_touch_threshold(uint8_t touch_threshold) { this->touch_threshold_ = touch_threshold; }; void set_release_threshold(uint8_t release_threshold) { this->release_threshold_ = release_threshold; }; - uint8_t get_touch_threshold() { return this->touch_threshold_; }; - uint8_t get_release_threshold() { return this->release_threshold_; }; + uint8_t get_touch_threshold() const { return this->touch_threshold_; }; + uint8_t get_release_threshold() const { return this->release_threshold_; }; void setup() override; void dump_config() override; - float get_setup_priority() const override { return setup_priority::DATA; } + float get_setup_priority() const override { return setup_priority::IO; } void loop() override; + void set_max_touch_channel(uint8_t max_touch_channel) { this->max_touch_channel_ = max_touch_channel; } + + // GPIO helper functions. + bool digital_read(uint8_t ionum); + void digital_write(uint8_t ionum, bool value); + void pin_mode(uint8_t ionum, gpio::Flags flags); + protected: std::vector channels_{}; uint8_t debounce_{0}; uint8_t touch_threshold_{}; uint8_t release_threshold_{}; + uint8_t max_touch_channel_{3}; enum ErrorCode { NONE = 0, COMMUNICATION_FAILED, WRONG_CHIP_STATE, } error_code_{NONE}; + + bool flush_gpio_(); + + /// The enable mask - zero means high Z, 1 means GPIO usage + uint8_t gpio_enable_{0x00}; + /// Mask for the pin mode - 1 means output, 0 means input + uint8_t gpio_direction_{0x00}; + /// The mask to write as output state - 1 means HIGH, 0 means LOW + uint8_t gpio_output_{0x00}; + /// The mask to read as input state - 1 means HIGH, 0 means LOW + uint8_t gpio_input_{0x00}; +}; + +/// Helper class to expose a MPR121 pin as an internal input GPIO pin. +class MPR121GPIOPin : public GPIOPin { + public: + void setup() override; + void pin_mode(gpio::Flags flags) override; + bool digital_read() override; + void digital_write(bool value) override; + std::string dump_summary() const override; + + void set_parent(MPR121Component *parent) { this->parent_ = parent; } + void set_pin(uint8_t pin) { this->pin_ = pin; } + void set_inverted(bool inverted) { this->inverted_ = inverted; } + void set_flags(gpio::Flags flags) { this->flags_ = flags; } + + protected: + MPR121Component *parent_; + uint8_t pin_; + bool inverted_; + gpio::Flags flags_; }; } // namespace mpr121 diff --git a/tests/components/mpr121/common.yaml b/tests/components/mpr121/common.yaml new file mode 100644 index 0000000000..fcf61b57f3 --- /dev/null +++ b/tests/components/mpr121/common.yaml @@ -0,0 +1,41 @@ +i2c: + - id: i2c_mpr121 + scl: ${i2c_scl} + sda: ${i2c_sda} + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: mpr121 + id: touchkey0 + name: touchkey0 + channel: 0 + - platform: mpr121 + id: bin1 + name: touchkey1 + channel: 1 + - platform: mpr121 + id: bin2 + name: touchkey2 + channel: 2 + - platform: mpr121 + id: bin3 + name: touchkey3 + channel: 6 + +output: + - platform: gpio + id: gpio1 + pin: + mpr121: mpr121_first + number: 7 + mode: OUTPUT + - platform: gpio + id: gpio2 + pin: + mpr121: mpr121_first + number: 11 + mode: OUTPUT + inverted: true diff --git a/tests/components/mpr121/test.esp32-c3-idf.yaml b/tests/components/mpr121/test.esp32-c3-idf.yaml index 517e092560..d7ae0d5161 100644 --- a/tests/components/mpr121/test.esp32-c3-idf.yaml +++ b/tests/components/mpr121/test.esp32-c3-idf.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/components/mpr121/test.esp32-c3.yaml b/tests/components/mpr121/test.esp32-c3.yaml index 517e092560..d7ae0d5161 100644 --- a/tests/components/mpr121/test.esp32-c3.yaml +++ b/tests/components/mpr121/test.esp32-c3.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/components/mpr121/test.esp32-idf.yaml b/tests/components/mpr121/test.esp32-idf.yaml index 96996fd8ee..1037d5d35b 100644 --- a/tests/components/mpr121/test.esp32-idf.yaml +++ b/tests/components/mpr121/test.esp32-idf.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 16 - sda: 17 +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/components/mpr121/test.esp32.yaml b/tests/components/mpr121/test.esp32.yaml index 96996fd8ee..1037d5d35b 100644 --- a/tests/components/mpr121/test.esp32.yaml +++ b/tests/components/mpr121/test.esp32.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 16 - sda: 17 +substitutions: + i2c_scl: GPIO16 + i2c_sda: GPIO17 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/components/mpr121/test.esp8266.yaml b/tests/components/mpr121/test.esp8266.yaml index 517e092560..d7ae0d5161 100644 --- a/tests/components/mpr121/test.esp8266.yaml +++ b/tests/components/mpr121/test.esp8266.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/components/mpr121/test.rp2040.yaml b/tests/components/mpr121/test.rp2040.yaml index 517e092560..d7ae0d5161 100644 --- a/tests/components/mpr121/test.rp2040.yaml +++ b/tests/components/mpr121/test.rp2040.yaml @@ -1,26 +1,5 @@ -i2c: - - id: i2c_mpr121 - scl: 5 - sda: 4 +substitutions: + i2c_scl: GPIO5 + i2c_sda: GPIO4 -mpr121: - id: mpr121_first - address: 0x5A - -binary_sensor: - - platform: mpr121 - id: touchkey0 - name: touchkey0 - channel: 0 - - platform: mpr121 - id: bin1 - name: touchkey1 - channel: 1 - - platform: mpr121 - id: bin2 - name: touchkey2 - channel: 2 - - platform: mpr121 - id: bin3 - name: touchkey3 - channel: 3 +<<: !include common.yaml diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml index a7d8dcb3f4..018a4d94f3 100644 --- a/tests/test3.1.yaml +++ b/tests/test3.1.yaml @@ -344,10 +344,6 @@ apds9960: address: 0x20 update_interval: 60s -mpr121: - id: mpr121_first - address: 0x5A - binary_sensor: - platform: apds9960 direction: up @@ -371,25 +367,6 @@ binary_sensor: direction: right name: APDS9960 Right - - platform: mpr121 - id: touchkey0 - channel: 0 - name: touchkey0 - - platform: mpr121 - channel: 1 - name: touchkey1 - id: bin1 - - platform: mpr121 - channel: 2 - name: touchkey2 - id: bin2 - - platform: mpr121 - channel: 3 - name: touchkey3 - id: bin3 - on_press: - then: - - switch.toggle: mpr121_toggle - platform: ttp229_lsf channel: 1 name: TTP229 LSF Test @@ -443,10 +420,6 @@ grove_tb6612fng: address: 0x14 switch: - - platform: template - name: mpr121_toggle - id: mpr121_toggle - optimistic: true - platform: gpio id: gpio_switch1 pin: From 9d03f472335be2c696547c8484421dba8252f145 Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Thu, 23 May 2024 23:11:34 +0200 Subject: [PATCH 252/313] [nextion] Add basic functions to Intelligent series (#6791) --- esphome/components/nextion/nextion.h | 67 +++++++++++++++++++ .../components/nextion/nextion_commands.cpp | 20 +++++- 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/esphome/components/nextion/nextion.h b/esphome/components/nextion/nextion.h index dfa74f644d..4546baa4d8 100644 --- a/esphome/components/nextion/nextion.h +++ b/esphome/components/nextion/nextion.h @@ -952,6 +952,73 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe */ bool set_protocol_reparse_mode(bool active_mode); + // ======== Nextion Intelligent Series ======== + + /** + * Set the video id of a component. + * @param component The component name. + * @param vid_id The video ID. + * + * Example: + * ```cpp + * it.set_component_vid("textview", 1); + * ``` + * + * This will change the video id of the component `textview`. + * + * Note: Requires Nextion Intelligent series display. + */ + void set_component_vid(const char *component, uint8_t vid_id); + + /** + * Set the drag availability of a component. + * @param component The component name. + * @param drag False: Drag not available, True: Drag available. + * + * Example: + * ```cpp + * it.set_component_drag("textview", true); + * ``` + * + * This will enable drag to the component `textview`. + * + * Note: Requires Nextion Intelligent series display. + */ + void set_component_drag(const char *component, bool drag); + + /** + * Set the opaqueness (fading) of a component. + * @param component The component name. + * @param aph An integer between 0 and 127 related to the opaqueness/fading level. + * + * Example: + * ```cpp + * it.set_component_aph("textview", 64); + * ``` + * + * This will set the opaqueness level of the component `textview` to 64. + * + * Note: Requires Nextion Intelligent series display. + */ + void set_component_aph(const char *component, uint8_t aph); + + /** + * Set the position of a component. + * @param component The component name. + * @param x The new X (horizontal) coordinate for the component. + * @param y The new Y (vertical) coordinate for the component. + * + * Example: + * ```cpp + * it.set_component_aph("textview", 64, 35); + * ``` + * + * This will move the component `textview` to the column 64 of row 35 of the display. + * + * Note: Requires Nextion Intelligent series display. + */ + void set_component_position(const char *component, uint32_t x, uint32_t y); + // ========== INTERNAL METHODS ========== // (In most use cases you won't need these) void register_touch_component(NextionComponentBase *obj) { this->touch_.push_back(obj); } diff --git a/esphome/components/nextion/nextion_commands.cpp b/esphome/components/nextion/nextion_commands.cpp index fdd6c74d99..398e9dd502 100644 --- a/esphome/components/nextion/nextion_commands.cpp +++ b/esphome/components/nextion/nextion_commands.cpp @@ -148,7 +148,25 @@ void Nextion::set_component_pic(const char *component, uint8_t pic_id) { } void Nextion::set_component_picc(const char *component, uint8_t pic_id) { - this->add_no_result_to_queue_with_printf_("set_component_pic", "%s.picc=%" PRIu8, component, pic_id); + this->add_no_result_to_queue_with_printf_("set_component_picc", "%s.picc=%" PRIu8, component, pic_id); +} + +// Set video +void Nextion::set_component_vid(const char *component, uint8_t vid_id) { + this->add_no_result_to_queue_with_printf_("set_component_vid", "%s.vid=%" PRIu8, component, vid_id); +} + +void Nextion::set_component_drag(const char *component, bool drag) { + this->add_no_result_to_queue_with_printf_("set_component_drag", "%s.drag=%i", component, drag ? 1 : 0); +} + +void Nextion::set_component_aph(const char *component, uint8_t aph) { + this->add_no_result_to_queue_with_printf_("set_component_aph", "%s.aph=%" PRIu8, component, aph); +} + +void Nextion::set_component_position(const char *component, uint32_t x, uint32_t y) { + this->add_no_result_to_queue_with_printf_("set_component_position_x", "%s.x=%" PRIu32, component, x); + this->add_no_result_to_queue_with_printf_("set_component_position_y", "%s.y=%" PRIu32, component, y); } void Nextion::set_component_text_printf(const char *component, const char *format, ...) { From 863bee28d9649f3179b75b3a5ebb833d9c7232a5 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Sat, 25 May 2024 07:42:24 +1200 Subject: [PATCH 253/313] [voice_assistant] Don't allocate buffers until starting the microphone for the first time (#6800) --- .../voice_assistant/voice_assistant.cpp | 96 +++++++++++++++---- .../voice_assistant/voice_assistant.h | 4 + 2 files changed, 83 insertions(+), 17 deletions(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 109e52f8eb..59ba39c527 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -71,6 +71,12 @@ void VoiceAssistant::setup() { ESP_LOGCONFIG(TAG, "Setting up Voice Assistant..."); global_voice_assistant = this; +} + +bool VoiceAssistant::allocate_buffers_() { + if (this->send_buffer_ != nullptr) { + return true; // Already allocated + } #ifdef USE_SPEAKER if (this->speaker_ != nullptr) { @@ -78,8 +84,7 @@ void VoiceAssistant::setup() { this->speaker_buffer_ = speaker_allocator.allocate(SPEAKER_BUFFER_SIZE); if (this->speaker_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate speaker buffer"); - this->mark_failed(); - return; + return false; } } #endif @@ -88,8 +93,7 @@ void VoiceAssistant::setup() { this->input_buffer_ = allocator.allocate(INPUT_BUFFER_SIZE); if (this->input_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate input buffer"); - this->mark_failed(); - return; + return false; } #ifdef USE_ESP_ADF @@ -99,17 +103,71 @@ void VoiceAssistant::setup() { this->ring_buffer_ = RingBuffer::create(BUFFER_SIZE * sizeof(int16_t)); if (this->ring_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate ring buffer"); - this->mark_failed(); - return; + return false; } ExternalRAMAllocator send_allocator(ExternalRAMAllocator::ALLOW_FAILURE); this->send_buffer_ = send_allocator.allocate(SEND_BUFFER_SIZE); if (send_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate send buffer"); - this->mark_failed(); - return; + return false; } + + return true; +} + +void VoiceAssistant::clear_buffers_() { + if (this->send_buffer_ != nullptr) { + memset(this->send_buffer_, 0, SEND_BUFFER_SIZE); + } + + if (this->input_buffer_ != nullptr) { + memset(this->input_buffer_, 0, INPUT_BUFFER_SIZE * sizeof(int16_t)); + } + + if (this->ring_buffer_ != nullptr) { + this->ring_buffer_->reset(); + } + +#ifdef USE_SPEAKER + if (this->speaker_buffer_ != nullptr) { + memset(this->speaker_buffer_, 0, SPEAKER_BUFFER_SIZE); + + this->speaker_buffer_size_ = 0; + this->speaker_buffer_index_ = 0; + this->speaker_bytes_received_ = 0; + } +#endif +} + +void VoiceAssistant::deallocate_buffers_() { + ExternalRAMAllocator send_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + send_deallocator.deallocate(this->send_buffer_, SEND_BUFFER_SIZE); + this->send_buffer_ = nullptr; + + if (this->ring_buffer_ != nullptr) { + this->ring_buffer_.reset(); + this->ring_buffer_ = nullptr; + } + +#ifdef USE_ESP_ADF + if (this->vad_instance_ != nullptr) { + vad_destroy(this->vad_instance_); + this->vad_instance_ = nullptr; + } +#endif + + ExternalRAMAllocator input_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + input_deallocator.deallocate(this->input_buffer_, INPUT_BUFFER_SIZE); + this->input_buffer_ = nullptr; + +#ifdef USE_SPEAKER + if (this->speaker_buffer_ != nullptr) { + ExternalRAMAllocator speaker_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + speaker_deallocator.deallocate(this->speaker_buffer_, SPEAKER_BUFFER_SIZE); + this->speaker_buffer_ = nullptr; + } +#endif } int VoiceAssistant::read_microphone_() { @@ -138,14 +196,13 @@ void VoiceAssistant::loop() { } this->continuous_ = false; this->signal_stop_(); + this->clear_buffers_(); return; } switch (this->state_) { case State::IDLE: { if (this->continuous_ && this->desired_state_ == State::IDLE) { this->idle_trigger_->trigger(); - - this->ring_buffer_->reset(); #ifdef USE_ESP_ADF if (this->use_wake_word_) { this->set_state_(State::START_MICROPHONE, State::WAIT_FOR_VAD); @@ -161,8 +218,15 @@ void VoiceAssistant::loop() { } case State::START_MICROPHONE: { ESP_LOGD(TAG, "Starting Microphone"); - memset(this->send_buffer_, 0, SEND_BUFFER_SIZE); - memset(this->input_buffer_, 0, INPUT_BUFFER_SIZE * sizeof(int16_t)); + if (!this->allocate_buffers_()) { + this->status_set_error("Failed to allocate buffers"); + return; + } + if (this->status_has_error()) { + this->status_clear_error(); + } + this->clear_buffers_(); + this->mic_->start(); this->high_freq_.start(); this->set_state_(State::STARTING_MICROPHONE); @@ -343,10 +407,9 @@ void VoiceAssistant::loop() { this->speaker_->stop(); this->cancel_timeout("speaker-timeout"); this->cancel_timeout("playing"); - this->speaker_buffer_size_ = 0; - this->speaker_buffer_index_ = 0; - this->speaker_bytes_received_ = 0; - memset(this->speaker_buffer_, 0, SPEAKER_BUFFER_SIZE); + + this->clear_buffers_(); + this->wait_for_stream_end_ = false; this->stream_ended_ = false; @@ -507,7 +570,6 @@ void VoiceAssistant::request_start(bool continuous, bool silence_detection) { if (this->state_ == State::IDLE) { this->continuous_ = continuous; this->silence_detection_ = silence_detection; - this->ring_buffer_->reset(); #ifdef USE_ESP_ADF if (this->use_wake_word_) { this->set_state_(State::START_MICROPHONE, State::WAIT_FOR_VAD); diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index 1c0ea12f4f..17141365d4 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -151,6 +151,10 @@ class VoiceAssistant : public Component { void set_wake_word(const std::string &wake_word) { this->wake_word_ = wake_word; } protected: + bool allocate_buffers_(); + void clear_buffers_(); + void deallocate_buffers_(); + int read_microphone_(); void set_state_(State state); void set_state_(State state, State desired_state); From 04db724295e4e5a537e1532b426a9c64bc19a7aa Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Sat, 25 May 2024 07:42:24 +1200 Subject: [PATCH 254/313] [voice_assistant] Don't allocate buffers until starting the microphone for the first time (#6800) --- .../voice_assistant/voice_assistant.cpp | 96 +++++++++++++++---- .../voice_assistant/voice_assistant.h | 4 + 2 files changed, 83 insertions(+), 17 deletions(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 109e52f8eb..59ba39c527 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -71,6 +71,12 @@ void VoiceAssistant::setup() { ESP_LOGCONFIG(TAG, "Setting up Voice Assistant..."); global_voice_assistant = this; +} + +bool VoiceAssistant::allocate_buffers_() { + if (this->send_buffer_ != nullptr) { + return true; // Already allocated + } #ifdef USE_SPEAKER if (this->speaker_ != nullptr) { @@ -78,8 +84,7 @@ void VoiceAssistant::setup() { this->speaker_buffer_ = speaker_allocator.allocate(SPEAKER_BUFFER_SIZE); if (this->speaker_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate speaker buffer"); - this->mark_failed(); - return; + return false; } } #endif @@ -88,8 +93,7 @@ void VoiceAssistant::setup() { this->input_buffer_ = allocator.allocate(INPUT_BUFFER_SIZE); if (this->input_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate input buffer"); - this->mark_failed(); - return; + return false; } #ifdef USE_ESP_ADF @@ -99,17 +103,71 @@ void VoiceAssistant::setup() { this->ring_buffer_ = RingBuffer::create(BUFFER_SIZE * sizeof(int16_t)); if (this->ring_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate ring buffer"); - this->mark_failed(); - return; + return false; } ExternalRAMAllocator send_allocator(ExternalRAMAllocator::ALLOW_FAILURE); this->send_buffer_ = send_allocator.allocate(SEND_BUFFER_SIZE); if (send_buffer_ == nullptr) { ESP_LOGW(TAG, "Could not allocate send buffer"); - this->mark_failed(); - return; + return false; } + + return true; +} + +void VoiceAssistant::clear_buffers_() { + if (this->send_buffer_ != nullptr) { + memset(this->send_buffer_, 0, SEND_BUFFER_SIZE); + } + + if (this->input_buffer_ != nullptr) { + memset(this->input_buffer_, 0, INPUT_BUFFER_SIZE * sizeof(int16_t)); + } + + if (this->ring_buffer_ != nullptr) { + this->ring_buffer_->reset(); + } + +#ifdef USE_SPEAKER + if (this->speaker_buffer_ != nullptr) { + memset(this->speaker_buffer_, 0, SPEAKER_BUFFER_SIZE); + + this->speaker_buffer_size_ = 0; + this->speaker_buffer_index_ = 0; + this->speaker_bytes_received_ = 0; + } +#endif +} + +void VoiceAssistant::deallocate_buffers_() { + ExternalRAMAllocator send_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + send_deallocator.deallocate(this->send_buffer_, SEND_BUFFER_SIZE); + this->send_buffer_ = nullptr; + + if (this->ring_buffer_ != nullptr) { + this->ring_buffer_.reset(); + this->ring_buffer_ = nullptr; + } + +#ifdef USE_ESP_ADF + if (this->vad_instance_ != nullptr) { + vad_destroy(this->vad_instance_); + this->vad_instance_ = nullptr; + } +#endif + + ExternalRAMAllocator input_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + input_deallocator.deallocate(this->input_buffer_, INPUT_BUFFER_SIZE); + this->input_buffer_ = nullptr; + +#ifdef USE_SPEAKER + if (this->speaker_buffer_ != nullptr) { + ExternalRAMAllocator speaker_deallocator(ExternalRAMAllocator::ALLOW_FAILURE); + speaker_deallocator.deallocate(this->speaker_buffer_, SPEAKER_BUFFER_SIZE); + this->speaker_buffer_ = nullptr; + } +#endif } int VoiceAssistant::read_microphone_() { @@ -138,14 +196,13 @@ void VoiceAssistant::loop() { } this->continuous_ = false; this->signal_stop_(); + this->clear_buffers_(); return; } switch (this->state_) { case State::IDLE: { if (this->continuous_ && this->desired_state_ == State::IDLE) { this->idle_trigger_->trigger(); - - this->ring_buffer_->reset(); #ifdef USE_ESP_ADF if (this->use_wake_word_) { this->set_state_(State::START_MICROPHONE, State::WAIT_FOR_VAD); @@ -161,8 +218,15 @@ void VoiceAssistant::loop() { } case State::START_MICROPHONE: { ESP_LOGD(TAG, "Starting Microphone"); - memset(this->send_buffer_, 0, SEND_BUFFER_SIZE); - memset(this->input_buffer_, 0, INPUT_BUFFER_SIZE * sizeof(int16_t)); + if (!this->allocate_buffers_()) { + this->status_set_error("Failed to allocate buffers"); + return; + } + if (this->status_has_error()) { + this->status_clear_error(); + } + this->clear_buffers_(); + this->mic_->start(); this->high_freq_.start(); this->set_state_(State::STARTING_MICROPHONE); @@ -343,10 +407,9 @@ void VoiceAssistant::loop() { this->speaker_->stop(); this->cancel_timeout("speaker-timeout"); this->cancel_timeout("playing"); - this->speaker_buffer_size_ = 0; - this->speaker_buffer_index_ = 0; - this->speaker_bytes_received_ = 0; - memset(this->speaker_buffer_, 0, SPEAKER_BUFFER_SIZE); + + this->clear_buffers_(); + this->wait_for_stream_end_ = false; this->stream_ended_ = false; @@ -507,7 +570,6 @@ void VoiceAssistant::request_start(bool continuous, bool silence_detection) { if (this->state_ == State::IDLE) { this->continuous_ = continuous; this->silence_detection_ = silence_detection; - this->ring_buffer_->reset(); #ifdef USE_ESP_ADF if (this->use_wake_word_) { this->set_state_(State::START_MICROPHONE, State::WAIT_FOR_VAD); diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index 1c0ea12f4f..17141365d4 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -151,6 +151,10 @@ class VoiceAssistant : public Component { void set_wake_word(const std::string &wake_word) { this->wake_word_ = wake_word; } protected: + bool allocate_buffers_(); + void clear_buffers_(); + void deallocate_buffers_(); + int read_microphone_(); void set_state_(State state); void set_state_(State state, State desired_state); From af755380b7e8f8b90cfd1f45c9dcbf09bb94c101 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Sat, 25 May 2024 08:14:39 +1200 Subject: [PATCH 255/313] Bump version to 2024.5.3 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 48b8aa8656..0c53287909 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.2" +__version__ = "2024.5.3" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 6d341ce4e7f41c09d723f9663e61e0c0dd51d159 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 27 May 2024 07:15:05 +1200 Subject: [PATCH 256/313] [web_server_base] Bump ESPAsyncWebServer-esphome to 3.2.2 (#6797) Co-authored-by: Samuel Sieb --- esphome/components/web_server_base/__init__.py | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/web_server_base/__init__.py b/esphome/components/web_server_base/__init__.py index 1970b5a0c5..4f894619b0 100644 --- a/esphome/components/web_server_base/__init__.py +++ b/esphome/components/web_server_base/__init__.py @@ -37,4 +37,4 @@ async def to_code(config): cg.add_library("FS", None) cg.add_library("Update", None) # https://github.com/esphome/ESPAsyncWebServer/blob/master/library.json - cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.2.0") + cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.2.2") diff --git a/platformio.ini b/platformio.ini index 65c742cf91..fd0ae7c6d8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -58,7 +58,7 @@ lib_deps = SPI ; spi (Arduino built-in) Wire ; i2c (Arduino built-int) heman/AsyncMqttClient-esphome@1.0.0 ; mqtt - esphome/ESPAsyncWebServer-esphome@3.2.0 ; web_server_base + esphome/ESPAsyncWebServer-esphome@3.2.2 ; web_server_base fastled/FastLED@3.3.2 ; fastled_base mikalhart/TinyGPSPlus@1.0.2 ; gps freekode/TM1651@1.0.1 ; tm1651 From 4125b48b86a4da0ba27704ab11f2033a8275540c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C5=A1o=20Domadenik?= Date: Sun, 26 May 2024 21:23:00 +0200 Subject: [PATCH 257/313] Fix incorrect naming of the AdaFruit MagTag display. (#6810) --- esphome/components/waveshare_epaper/display.py | 4 ++-- .../components/waveshare_epaper/waveshare_epaper.cpp | 12 ++++++------ .../components/waveshare_epaper/waveshare_epaper.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/esphome/components/waveshare_epaper/display.py b/esphome/components/waveshare_epaper/display.py index bba60efc0a..9ad948e915 100644 --- a/esphome/components/waveshare_epaper/display.py +++ b/esphome/components/waveshare_epaper/display.py @@ -48,7 +48,7 @@ WaveshareEPaper2P9InBV3 = waveshare_epaper_ns.class_( WaveshareEPaper2P9InV2R2 = waveshare_epaper_ns.class_( "WaveshareEPaper2P9InV2R2", WaveshareEPaper ) -GDEY029T94 = waveshare_epaper_ns.class_("GDEY029T94", WaveshareEPaper) +GDEW029T5 = waveshare_epaper_ns.class_("GDEW029T5", WaveshareEPaper) WaveshareEPaper2P9InDKE = waveshare_epaper_ns.class_( "WaveshareEPaper2P9InDKE", WaveshareEPaper ) @@ -110,7 +110,7 @@ MODELS = { "2.13in-ttgo-b74": ("a", WaveshareEPaperTypeAModel.TTGO_EPAPER_2_13_IN_B74), "2.90in": ("a", WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN), "2.90inv2": ("a", WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN_V2), - "gdey029t94": ("c", GDEY029T94), + "gdew029t5": ("c", GDEW029T5), "2.70in": ("b", WaveshareEPaper2P7In), "2.70in-b": ("b", WaveshareEPaper2P7InB), "2.70in-bv2": ("b", WaveshareEPaper2P7InBV2), diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.cpp b/esphome/components/waveshare_epaper/waveshare_epaper.cpp index 7224aa44ed..5428f4ec80 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.cpp +++ b/esphome/components/waveshare_epaper/waveshare_epaper.cpp @@ -1514,7 +1514,7 @@ void WaveshareEPaper2P9InV2R2::set_full_update_every(uint32_t full_update_every) // - https://github.com/adafruit/Adafruit_EPD/blob/master/src/panels/ThinkInk_290_Grayscale4_T5.h // ======================================================== -void GDEY029T94::initialize() { +void GDEW029T5::initialize() { // from https://www.waveshare.com/w/upload/b/bb/2.9inch-e-paper-b-specification.pdf, page 37 // EPD hardware init start this->reset_(); @@ -1560,7 +1560,7 @@ void GDEY029T94::initialize() { // EPD hardware init end } -void HOT GDEY029T94::display() { +void HOT GDEW029T5::display() { // COMMAND DATA START TRANSMISSION 2 (B/W only) this->command(0x13); delay(2); @@ -1580,11 +1580,11 @@ void HOT GDEY029T94::display() { // NOTE: power off < deep sleep this->command(0x02); } -int GDEY029T94::get_width_internal() { return 128; } -int GDEY029T94::get_height_internal() { return 296; } -void GDEY029T94::dump_config() { +int GDEW029T5::get_width_internal() { return 128; } +int GDEW029T5::get_height_internal() { return 296; } +void GDEW029T5::dump_config() { LOG_DISPLAY("", "Waveshare E-Paper (Good Display)", this); - ESP_LOGCONFIG(TAG, " Model: 2.9in Greyscale GDEY029T94"); + ESP_LOGCONFIG(TAG, " Model: 2.9in Greyscale GDEW029T5"); LOG_PIN(" Reset Pin: ", this->reset_pin_); LOG_PIN(" DC Pin: ", this->dc_pin_); LOG_PIN(" Busy Pin: ", this->busy_pin_); diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.h b/esphome/components/waveshare_epaper/waveshare_epaper.h index 3c4470c30c..4a5844ae88 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.h +++ b/esphome/components/waveshare_epaper/waveshare_epaper.h @@ -227,7 +227,7 @@ class WaveshareEPaper2P7InBV2 : public WaveshareEPaperBWR { int get_height_internal() override; }; -class GDEY029T94 : public WaveshareEPaper { +class GDEW029T5 : public WaveshareEPaper { public: void initialize() override; From 17c6bf57cdcdffe00af8578ec1c4fd3e00e6d451 Mon Sep 17 00:00:00 2001 From: august huber Date: Sun, 26 May 2024 15:40:38 -0400 Subject: [PATCH 258/313] [tuya] add support for extended services (#6808) --- esphome/components/tuya/tuya.cpp | 24 ++++++++++++++++++++++++ esphome/components/tuya/tuya.h | 7 +++++++ 2 files changed, 31 insertions(+) diff --git a/esphome/components/tuya/tuya.cpp b/esphome/components/tuya/tuya.cpp index 1cc9681d09..402953bb3b 100644 --- a/esphome/components/tuya/tuya.cpp +++ b/esphome/components/tuya/tuya.cpp @@ -269,6 +269,30 @@ void Tuya::handle_command_(uint8_t command, uint8_t version, const uint8_t *buff ESP_LOGV(TAG, "Network status requested, reported as %i", wifi_status); break; } + case TuyaCommandType::EXTENDED_SERVICES: { + uint8_t subcommand = buffer[0]; + switch ((TuyaExtendedServicesCommandType) subcommand) { + case TuyaExtendedServicesCommandType::RESET_NOTIFICATION: { + this->send_command_( + TuyaCommand{.cmd = TuyaCommandType::EXTENDED_SERVICES, + .payload = std::vector{ + static_cast(TuyaExtendedServicesCommandType::RESET_NOTIFICATION), 0x00}}); + ESP_LOGV(TAG, "Reset status notification enabled"); + break; + } + case TuyaExtendedServicesCommandType::MODULE_RESET: { + ESP_LOGE(TAG, "EXTENDED_SERVICES::MODULE_RESET is not handled"); + break; + } + case TuyaExtendedServicesCommandType::UPDATE_IN_PROGRESS: { + ESP_LOGE(TAG, "EXTENDED_SERVICES::UPDATE_IN_PROGRESS is not handled"); + break; + } + default: + ESP_LOGE(TAG, "Invalid extended services subcommand (0x%02X) received", subcommand); + } + break; + } default: ESP_LOGE(TAG, "Invalid command (0x%02X) received", command); } diff --git a/esphome/components/tuya/tuya.h b/esphome/components/tuya/tuya.h index 7dc405e3dd..6db417d474 100644 --- a/esphome/components/tuya/tuya.h +++ b/esphome/components/tuya/tuya.h @@ -60,6 +60,13 @@ enum class TuyaCommandType : uint8_t { WIFI_RSSI = 0x24, VACUUM_MAP_UPLOAD = 0x28, GET_NETWORK_STATUS = 0x2B, + EXTENDED_SERVICES = 0x34, +}; + +enum class TuyaExtendedServicesCommandType : uint8_t { + RESET_NOTIFICATION = 0x04, + MODULE_RESET = 0x05, + UPDATE_IN_PROGRESS = 0x0A, }; enum class TuyaInitState : uint8_t { From e285196709771e22a42b2eb0c69add723d546ca5 Mon Sep 17 00:00:00 2001 From: august huber Date: Sun, 26 May 2024 15:41:29 -0400 Subject: [PATCH 259/313] fix libretiny regression from #6715 (#6806) --- esphome/components/debug/debug_libretiny.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/debug/debug_libretiny.cpp b/esphome/components/debug/debug_libretiny.cpp index 725cd870ca..c3418cf96c 100644 --- a/esphome/components/debug/debug_libretiny.cpp +++ b/esphome/components/debug/debug_libretiny.cpp @@ -12,7 +12,7 @@ std::string DebugComponent::get_reset_reason_() { return lt_get_reboot_reason_na uint32_t DebugComponent::get_free_heap_() { return lt_heap_get_free(); } void DebugComponent::get_device_info_(std::string &device_info) { - reset_reason = get_reset_reason_(); + str::string reset_reason = get_reset_reason_(); ESP_LOGD(TAG, "LibreTiny Version: %s", lt_get_version()); ESP_LOGD(TAG, "Chip: %s (%04x) @ %u MHz", lt_cpu_get_model_name(), lt_cpu_get_model(), lt_cpu_get_freq_mhz()); ESP_LOGD(TAG, "Chip ID: 0x%06X", lt_cpu_get_mac_id()); From 6e4fd428e72ec5fb4d04802de1d0f8c65f1c961d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Poczkodi?= Date: Mon, 27 May 2024 22:19:22 +0200 Subject: [PATCH 260/313] [helpers] Move Base64 string to cpp (#6819) --- esphome/core/helpers.cpp | 4 ++++ esphome/core/helpers.h | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index fdc0eed774..dee771d4e9 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -433,6 +433,10 @@ int8_t step_to_accuracy_decimals(float step) { return str.length() - dot_pos - 1; } +static const std::string BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + static inline bool is_base64(char c) { return (isalnum(c) || (c == '+') || (c == '/')); } std::string base64_encode(const std::vector &buf) { return base64_encode(buf.data(), buf.size()); } diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 809e7d6767..4af840f77b 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -435,10 +435,6 @@ std::string value_accuracy_to_string(float value, int8_t accuracy_decimals); /// Derive accuracy in decimals from an increment step. int8_t step_to_accuracy_decimals(float step); -static const std::string BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - std::string base64_encode(const uint8_t *buf, size_t buf_len); std::string base64_encode(const std::vector &buf); From 54b51269ab465fb4f8f849f1f52b6b42977635c8 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 27 May 2024 07:15:05 +1200 Subject: [PATCH 261/313] [web_server_base] Bump ESPAsyncWebServer-esphome to 3.2.2 (#6797) Co-authored-by: Samuel Sieb --- esphome/components/web_server_base/__init__.py | 2 +- platformio.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/esphome/components/web_server_base/__init__.py b/esphome/components/web_server_base/__init__.py index 1970b5a0c5..4f894619b0 100644 --- a/esphome/components/web_server_base/__init__.py +++ b/esphome/components/web_server_base/__init__.py @@ -37,4 +37,4 @@ async def to_code(config): cg.add_library("FS", None) cg.add_library("Update", None) # https://github.com/esphome/ESPAsyncWebServer/blob/master/library.json - cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.2.0") + cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.2.2") diff --git a/platformio.ini b/platformio.ini index d342b32b02..67a631dda8 100644 --- a/platformio.ini +++ b/platformio.ini @@ -58,7 +58,7 @@ lib_deps = SPI ; spi (Arduino built-in) Wire ; i2c (Arduino built-int) heman/AsyncMqttClient-esphome@1.0.0 ; mqtt - esphome/ESPAsyncWebServer-esphome@3.2.0 ; web_server_base + esphome/ESPAsyncWebServer-esphome@3.2.2 ; web_server_base fastled/FastLED@3.3.2 ; fastled_base mikalhart/TinyGPSPlus@1.0.2 ; gps freekode/TM1651@1.0.1 ; tm1651 From f07479419c30e3ae89fcdefff254601dbdedd36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Poczkodi?= Date: Mon, 27 May 2024 22:19:22 +0200 Subject: [PATCH 262/313] [helpers] Move Base64 string to cpp (#6819) --- esphome/core/helpers.cpp | 4 ++++ esphome/core/helpers.h | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index fdc0eed774..dee771d4e9 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -433,6 +433,10 @@ int8_t step_to_accuracy_decimals(float step) { return str.length() - dot_pos - 1; } +static const std::string BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + static inline bool is_base64(char c) { return (isalnum(c) || (c == '+') || (c == '/')); } std::string base64_encode(const std::vector &buf) { return base64_encode(buf.data(), buf.size()); } diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 809e7d6767..4af840f77b 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -435,10 +435,6 @@ std::string value_accuracy_to_string(float value, int8_t accuracy_decimals); /// Derive accuracy in decimals from an increment step. int8_t step_to_accuracy_decimals(float step); -static const std::string BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789+/"; - std::string base64_encode(const uint8_t *buf, size_t buf_len); std::string base64_encode(const std::vector &buf); From 4cd4b168b44e073c3e874ba625cc10b3bb7c9bae Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Tue, 28 May 2024 08:29:19 +1200 Subject: [PATCH 263/313] Bump version to 2024.5.4 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index 0c53287909..ad5858dcf3 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.3" +__version__ = "2024.5.4" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 497cf8742f495918ed368eafdeafe72d53c5b9e2 Mon Sep 17 00:00:00 2001 From: pimdo <38102897+pimdo@users.noreply.github.com> Date: Tue, 28 May 2024 02:42:59 +0100 Subject: [PATCH 264/313] Make i2s_audio compatible with IDF 5+ (#6534) * Update i2s_audio.cpp Replace usage of I2S_NUM_MAX with I2S_NUM_1 * Update i2s_audio_microphone.cpp Replace I2S_MCLK_MULTIPLE_DEFAULT with I2S_MCLK_MULTIPLE_256 * Update i2s_audio_speaker.cpp Replace I2S_MCLK_MULTIPLE_DEFAULT with I2S_MCLK_MULTIPLE_256 * Update voice_assistant.cpp Fix msg.event_type format * check SOC_I2S_NUM for c3 * use I2S_NUM_AUTO * Update i2s_audio.cpp * Couple tweaks * Why did they take away I2S_NUM_MAX Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --------- Co-authored-by: Keith Burzinski Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/i2s_audio/i2s_audio.cpp | 4 ++++ .../components/i2s_audio/microphone/i2s_audio_microphone.cpp | 2 +- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp | 2 +- esphome/components/voice_assistant/voice_assistant.cpp | 5 +++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/esphome/components/i2s_audio/i2s_audio.cpp b/esphome/components/i2s_audio/i2s_audio.cpp index c1a608c064..ad73b383fe 100644 --- a/esphome/components/i2s_audio/i2s_audio.cpp +++ b/esphome/components/i2s_audio/i2s_audio.cpp @@ -9,6 +9,10 @@ namespace i2s_audio { static const char *const TAG = "i2s_audio"; +#if defined(USE_ESP_IDF) && (ESP_IDF_VERSION_MAJOR >= 5) +static const uint8_t I2S_NUM_MAX = SOC_I2S_NUM; // because IDF 5+ took this away :( +#endif + void I2SAudioComponent::setup() { static i2s_port_t next_port_num = I2S_NUM_0; diff --git a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp index 1475df0975..a672348d85 100644 --- a/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +++ b/esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp @@ -57,7 +57,7 @@ void I2SAudioMicrophone::start_() { .use_apll = this->use_apll_, .tx_desc_auto_clear = false, .fixed_mclk = 0, - .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, + .mclk_multiple = I2S_MCLK_MULTIPLE_256, .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT, }; diff --git a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp index 95e63035fe..69536742cb 100644 --- a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +++ b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp @@ -51,7 +51,7 @@ void I2SAudioSpeaker::player_task(void *params) { .use_apll = false, .tx_desc_auto_clear = true, .fixed_mclk = I2S_PIN_NO_CHANGE, - .mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, + .mclk_multiple = I2S_MCLK_MULTIPLE_256, .bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT, }; #if SOC_I2S_SUPPORTS_DAC diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 59ba39c527..712a0ab137 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -4,6 +4,7 @@ #include "esphome/core/log.h" +#include #include namespace esphome { @@ -622,7 +623,7 @@ void VoiceAssistant::signal_stop_() { } void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { - ESP_LOGD(TAG, "Event Type: %d", msg.event_type); + ESP_LOGD(TAG, "Event Type: %" PRId32, msg.event_type); switch (msg.event_type) { case api::enums::VOICE_ASSISTANT_RUN_START: ESP_LOGD(TAG, "Assist Pipeline running"); @@ -785,7 +786,7 @@ void VoiceAssistant::on_event(const api::VoiceAssistantEventResponse &msg) { this->defer([this]() { this->stt_vad_end_trigger_->trigger(); }); break; default: - ESP_LOGD(TAG, "Unhandled event type: %d", msg.event_type); + ESP_LOGD(TAG, "Unhandled event type: %" PRId32, msg.event_type); break; } } From db6f6f0cb7d1df10ac10b37e6dac46a0747406b7 Mon Sep 17 00:00:00 2001 From: DAVe3283 Date: Tue, 28 May 2024 13:40:34 -0600 Subject: [PATCH 265/313] Fix compile errors on ESP32-C6 with latest ESP-IDF (#6822) * Use PRI macros to fix ESP32-C6 compile * Fix compile error on latest ESP-IDF framework & platform --- esphome/components/ade7880/ade7880.cpp | 23 +++++++------- .../components/ade7953_base/ade7953_base.cpp | 3 +- .../fingerprint_grow/fingerprint_grow.cpp | 14 ++++----- esphome/components/he60r/he60r.cpp | 3 +- esphome/components/mhz19/mhz19.cpp | 5 +-- .../remote_base/abbwelcome_protocol.h | 4 ++- .../remote_base/byronsx_protocol.cpp | 22 +++++++------ .../remote_base/drayton_protocol.cpp | 17 +++++----- .../remote_base/keeloq_protocol.cpp | 31 ++++++++++--------- .../uart/uart_component_esp_idf.cpp | 2 +- esphome/components/xgzp68xx/xgzp68xx.cpp | 5 +-- 11 files changed, 73 insertions(+), 56 deletions(-) diff --git a/esphome/components/ade7880/ade7880.cpp b/esphome/components/ade7880/ade7880.cpp index 31b72d51a6..a03f1227f1 100644 --- a/esphome/components/ade7880/ade7880.cpp +++ b/esphome/components/ade7880/ade7880.cpp @@ -10,6 +10,7 @@ #include "ade7880.h" #include "ade7880_registers.h" #include "esphome/core/log.h" +#include namespace esphome { namespace ade7880 { @@ -156,7 +157,7 @@ void ADE7880::update() { }); } - ESP_LOGD(TAG, "update took %u ms", millis() - start); + ESP_LOGD(TAG, "update took %" PRIu32 " ms", millis() - start); } void ADE7880::dump_config() { @@ -176,9 +177,9 @@ void ADE7880::dump_config() { LOG_SENSOR(" ", "Forward Active Energy", this->channel_a_->forward_active_energy); LOG_SENSOR(" ", "Reverse Active Energy", this->channel_a_->reverse_active_energy); ESP_LOGCONFIG(TAG, " Calibration:"); - ESP_LOGCONFIG(TAG, " Current: %u", this->channel_a_->current_gain_calibration); - ESP_LOGCONFIG(TAG, " Voltage: %d", this->channel_a_->voltage_gain_calibration); - ESP_LOGCONFIG(TAG, " Power: %d", this->channel_a_->power_gain_calibration); + ESP_LOGCONFIG(TAG, " Current: %" PRId32, this->channel_a_->current_gain_calibration); + ESP_LOGCONFIG(TAG, " Voltage: %" PRId32, this->channel_a_->voltage_gain_calibration); + ESP_LOGCONFIG(TAG, " Power: %" PRId32, this->channel_a_->power_gain_calibration); ESP_LOGCONFIG(TAG, " Phase Angle: %u", this->channel_a_->phase_angle_calibration); } @@ -192,9 +193,9 @@ void ADE7880::dump_config() { LOG_SENSOR(" ", "Forward Active Energy", this->channel_b_->forward_active_energy); LOG_SENSOR(" ", "Reverse Active Energy", this->channel_b_->reverse_active_energy); ESP_LOGCONFIG(TAG, " Calibration:"); - ESP_LOGCONFIG(TAG, " Current: %u", this->channel_b_->current_gain_calibration); - ESP_LOGCONFIG(TAG, " Voltage: %d", this->channel_b_->voltage_gain_calibration); - ESP_LOGCONFIG(TAG, " Power: %d", this->channel_b_->power_gain_calibration); + ESP_LOGCONFIG(TAG, " Current: %" PRId32, this->channel_b_->current_gain_calibration); + ESP_LOGCONFIG(TAG, " Voltage: %" PRId32, this->channel_b_->voltage_gain_calibration); + ESP_LOGCONFIG(TAG, " Power: %" PRId32, this->channel_b_->power_gain_calibration); ESP_LOGCONFIG(TAG, " Phase Angle: %u", this->channel_b_->phase_angle_calibration); } @@ -208,9 +209,9 @@ void ADE7880::dump_config() { LOG_SENSOR(" ", "Forward Active Energy", this->channel_c_->forward_active_energy); LOG_SENSOR(" ", "Reverse Active Energy", this->channel_c_->reverse_active_energy); ESP_LOGCONFIG(TAG, " Calibration:"); - ESP_LOGCONFIG(TAG, " Current: %u", this->channel_c_->current_gain_calibration); - ESP_LOGCONFIG(TAG, " Voltage: %d", this->channel_c_->voltage_gain_calibration); - ESP_LOGCONFIG(TAG, " Power: %d", this->channel_c_->power_gain_calibration); + ESP_LOGCONFIG(TAG, " Current: %" PRId32, this->channel_c_->current_gain_calibration); + ESP_LOGCONFIG(TAG, " Voltage: %" PRId32, this->channel_c_->voltage_gain_calibration); + ESP_LOGCONFIG(TAG, " Power: %" PRId32, this->channel_c_->power_gain_calibration); ESP_LOGCONFIG(TAG, " Phase Angle: %u", this->channel_c_->phase_angle_calibration); } @@ -218,7 +219,7 @@ void ADE7880::dump_config() { ESP_LOGCONFIG(TAG, " Neutral:"); LOG_SENSOR(" ", "Current", this->channel_n_->current); ESP_LOGCONFIG(TAG, " Calibration:"); - ESP_LOGCONFIG(TAG, " Current: %u", this->channel_n_->current_gain_calibration); + ESP_LOGCONFIG(TAG, " Current: %" PRId32, this->channel_n_->current_gain_calibration); } LOG_I2C_DEVICE(this); diff --git a/esphome/components/ade7953_base/ade7953_base.cpp b/esphome/components/ade7953_base/ade7953_base.cpp index 862f5567a8..79161c5676 100644 --- a/esphome/components/ade7953_base/ade7953_base.cpp +++ b/esphome/components/ade7953_base/ade7953_base.cpp @@ -1,5 +1,6 @@ #include "ade7953_base.h" #include "esphome/core/log.h" +#include namespace esphome { namespace ade7953_base { @@ -105,7 +106,7 @@ void ADE7953::update() { this->last_update_ = now; // prevent DIV/0 pf = ADE_WATTSEC_POWER_FACTOR * (diff < 10 ? 10 : diff) / 1000; - ESP_LOGVV(TAG, "ADE7953::update() diff=%d pf=%f", diff, pf); + ESP_LOGVV(TAG, "ADE7953::update() diff=%" PRIu32 " pf=%f", diff, pf); } // Apparent power diff --git a/esphome/components/fingerprint_grow/fingerprint_grow.cpp b/esphome/components/fingerprint_grow/fingerprint_grow.cpp index bd0817350a..8f58db9159 100644 --- a/esphome/components/fingerprint_grow/fingerprint_grow.cpp +++ b/esphome/components/fingerprint_grow/fingerprint_grow.cpp @@ -541,34 +541,34 @@ void FingerprintGrowComponent::dump_config() { ESP_LOGCONFIG(TAG, " Sensor Power Pin: %s", this->has_power_pin_ ? this->sensor_power_pin_->dump_summary().c_str() : "None"); if (this->idle_period_to_sleep_ms_ < UINT32_MAX) { - ESP_LOGCONFIG(TAG, " Idle Period to Sleep: %u ms", this->idle_period_to_sleep_ms_); + ESP_LOGCONFIG(TAG, " Idle Period to Sleep: %" PRIu32 " ms", this->idle_period_to_sleep_ms_); } else { ESP_LOGCONFIG(TAG, " Idle Period to Sleep: Never"); } LOG_UPDATE_INTERVAL(this); if (this->fingerprint_count_sensor_) { LOG_SENSOR(" ", "Fingerprint Count", this->fingerprint_count_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint16_t) this->fingerprint_count_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %u", (uint16_t) this->fingerprint_count_sensor_->get_state()); } if (this->status_sensor_) { LOG_SENSOR(" ", "Status", this->status_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint8_t) this->status_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %u", (uint8_t) this->status_sensor_->get_state()); } if (this->capacity_sensor_) { LOG_SENSOR(" ", "Capacity", this->capacity_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint16_t) this->capacity_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %u", (uint16_t) this->capacity_sensor_->get_state()); } if (this->security_level_sensor_) { LOG_SENSOR(" ", "Security Level", this->security_level_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint8_t) this->security_level_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %u", (uint8_t) this->security_level_sensor_->get_state()); } if (this->last_finger_id_sensor_) { LOG_SENSOR(" ", "Last Finger ID", this->last_finger_id_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint32_t) this->last_finger_id_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %" PRIu32, (uint32_t) this->last_finger_id_sensor_->get_state()); } if (this->last_confidence_sensor_) { LOG_SENSOR(" ", "Last Confidence", this->last_confidence_sensor_); - ESP_LOGCONFIG(TAG, " Current Value: %d", (uint32_t) this->last_confidence_sensor_->get_state()); + ESP_LOGCONFIG(TAG, " Current Value: %" PRIu32, (uint32_t) this->last_confidence_sensor_->get_state()); } } diff --git a/esphome/components/he60r/he60r.cpp b/esphome/components/he60r/he60r.cpp index d6e6122b1b..96ad1f04be 100644 --- a/esphome/components/he60r/he60r.cpp +++ b/esphome/components/he60r/he60r.cpp @@ -1,6 +1,7 @@ #include "he60r.h" #include "esphome/core/hal.h" #include "esphome/core/log.h" +#include namespace esphome { namespace he60r { @@ -127,7 +128,7 @@ void HE60rCover::update_() { if (toggles_needed_ != 0) { if ((this->counter_++ & 0x3) == 0) { toggles_needed_--; - ESP_LOGD(TAG, "Writing byte 0x30, still needed=%d", toggles_needed_); + ESP_LOGD(TAG, "Writing byte 0x30, still needed=%" PRIu32, toggles_needed_); this->write_byte(TOGGLE_BYTE); } else { this->write_byte(QUERY_BYTE); diff --git a/esphome/components/mhz19/mhz19.cpp b/esphome/components/mhz19/mhz19.cpp index 019f6cee51..574aee1bd5 100644 --- a/esphome/components/mhz19/mhz19.cpp +++ b/esphome/components/mhz19/mhz19.cpp @@ -1,5 +1,6 @@ #include "mhz19.h" #include "esphome/core/log.h" +#include namespace esphome { namespace mhz19 { @@ -32,7 +33,7 @@ void MHZ19Component::update() { uint32_t now_ms = millis(); uint32_t warmup_ms = this->warmup_seconds_ * 1000; if (now_ms < warmup_ms) { - ESP_LOGW(TAG, "MHZ19 warming up, %ds left", (warmup_ms - now_ms) / 1000); + ESP_LOGW(TAG, "MHZ19 warming up, %" PRIu32 " s left", (warmup_ms - now_ms) / 1000); this->status_set_warning(); return; } @@ -110,7 +111,7 @@ void MHZ19Component::dump_config() { ESP_LOGCONFIG(TAG, " Automatic baseline calibration disabled on boot"); } - ESP_LOGCONFIG(TAG, " Warmup seconds: %ds", this->warmup_seconds_); + ESP_LOGCONFIG(TAG, " Warmup time: %" PRIu32 " s", this->warmup_seconds_); } } // namespace mhz19 diff --git a/esphome/components/remote_base/abbwelcome_protocol.h b/esphome/components/remote_base/abbwelcome_protocol.h index 0493993926..f2d0f5b547 100644 --- a/esphome/components/remote_base/abbwelcome_protocol.h +++ b/esphome/components/remote_base/abbwelcome_protocol.h @@ -4,6 +4,7 @@ #include "esphome/core/helpers.h" #include "remote_base.h" #include +#include #include #include @@ -144,7 +145,8 @@ class ABBWelcomeData { std::string to_string(uint8_t max_print_bytes = 255) const { std::string info; if (this->is_valid()) { - info = str_sprintf(this->get_three_byte_address() ? "[%06X %s %06X] Type: %02X" : "[%04X %s %04X] Type: %02X", + info = str_sprintf(this->get_three_byte_address() ? "[%06" PRIX32 " %s %06" PRIX32 "] Type: %02X" + : "[%04" PRIX32 " %s %04" PRIX32 "] Type: %02X", this->get_source_address(), this->get_retransmission() ? "»" : ">", this->get_destination_address(), this->get_message_type()); if (this->get_data_size()) diff --git a/esphome/components/remote_base/byronsx_protocol.cpp b/esphome/components/remote_base/byronsx_protocol.cpp index 3096283b30..2d4c60ff8b 100644 --- a/esphome/components/remote_base/byronsx_protocol.cpp +++ b/esphome/components/remote_base/byronsx_protocol.cpp @@ -1,5 +1,6 @@ #include "byronsx_protocol.h" #include "esphome/core/log.h" +#include namespace esphome { namespace remote_base { @@ -57,7 +58,7 @@ void ByronSXProtocol::encode(RemoteTransmitData *dst, const ByronSXData &data) { out_data <<= NBITS_COMMAND; out_data |= data.command; - ESP_LOGV(TAG, "Send ByronSX: out_data %03x", out_data); + ESP_LOGV(TAG, "Send ByronSX: out_data %03" PRIx32, out_data); // Initial Mark start bit dst->mark(1 * BIT_TIME_US); @@ -90,13 +91,16 @@ optional ByronSXProtocol::decode(RemoteReceiveData src) { return {}; } - ESP_LOGVV(TAG, "%3d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", src.size(), src.peek(0), - src.peek(1), src.peek(2), src.peek(3), src.peek(4), src.peek(5), src.peek(6), src.peek(7), src.peek(8), - src.peek(9), src.peek(10), src.peek(11), src.peek(12), src.peek(13), src.peek(14), src.peek(15), - src.peek(16), src.peek(17), src.peek(18), src.peek(19)); + ESP_LOGVV(TAG, + "%3" PRId32 ": %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 + " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 + " %" PRId32 " %" PRId32 " %" PRId32, + src.size(), src.peek(0), src.peek(1), src.peek(2), src.peek(3), src.peek(4), src.peek(5), src.peek(6), + src.peek(7), src.peek(8), src.peek(9), src.peek(10), src.peek(11), src.peek(12), src.peek(13), src.peek(14), + src.peek(15), src.peek(16), src.peek(17), src.peek(18), src.peek(19)); - ESP_LOGVV(TAG, " %d %d %d %d %d %d", src.peek(20), src.peek(21), src.peek(22), src.peek(23), src.peek(24), - src.peek(25)); + ESP_LOGVV(TAG, " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32, src.peek(20), + src.peek(21), src.peek(22), src.peek(23), src.peek(24), src.peek(25)); // Read data bits uint32_t out_data = 0; @@ -107,10 +111,10 @@ optional ByronSXProtocol::decode(RemoteReceiveData src) { } else if (src.expect_space(BIT_TIME_US) && src.expect_mark(2 * BIT_TIME_US)) { out_data |= 0 << bit; } else { - ESP_LOGV(TAG, "Decode ByronSX: Fail 2, %2d %08x", bit, out_data); + ESP_LOGV(TAG, "Decode ByronSX: Fail 2, %2d %08" PRIx32, bit, out_data); return {}; } - ESP_LOGVV(TAG, "Decode ByronSX: Data, %2d %08x", bit, out_data); + ESP_LOGVV(TAG, "Decode ByronSX: Data, %2d %08" PRIx32, bit, out_data); } // last bit followed by a long space diff --git a/esphome/components/remote_base/drayton_protocol.cpp b/esphome/components/remote_base/drayton_protocol.cpp index acfb7a0f16..73c0fb116c 100644 --- a/esphome/components/remote_base/drayton_protocol.cpp +++ b/esphome/components/remote_base/drayton_protocol.cpp @@ -151,12 +151,12 @@ optional DraytonProtocol::decode(RemoteReceiveData src) { // Look for sync pulse, after. If sucessful index points to space of sync symbol while (src.size() - src.get_index() >= MIN_RX_SRC) { - ESP_LOGVV(TAG, "Decode Drayton: sync search %d, %" PRId32 " %" PRId32, src.size() - src.get_index(), src.peek(), - src.peek(1)); + ESP_LOGVV(TAG, "Decode Drayton: sync search %" PRIu32 ", %" PRId32 " %" PRId32, src.size() - src.get_index(), + src.peek(), src.peek(1)); if (src.peek_mark(2 * BIT_TIME_US) && (src.peek_space(2 * BIT_TIME_US, 1) || src.peek_space(3 * BIT_TIME_US, 1))) { src.advance(1); - ESP_LOGVV(TAG, "Decode Drayton: Found SYNC, - %d", src.get_index()); + ESP_LOGVV(TAG, "Decode Drayton: Found SYNC, - %" PRIu32, src.get_index()); break; } else { src.advance(2); @@ -174,14 +174,16 @@ optional DraytonProtocol::decode(RemoteReceiveData src) { // Checks next bit to leave index pointing correctly uint32_t out_data = 0; uint8_t bit = NDATABITS - 1; - ESP_LOGVV(TAG, "Decode Drayton: first bit %d %" PRId32 ", %" PRId32, src.peek(0), src.peek(1), src.peek(2)); + ESP_LOGVV(TAG, "Decode Drayton: first bit %" PRId32 " %" PRId32 ", %" PRId32, src.peek(0), src.peek(1), + src.peek(2)); if (src.expect_space(3 * BIT_TIME_US) && (src.expect_mark(BIT_TIME_US) || src.peek_mark(2 * BIT_TIME_US))) { out_data |= 0 << bit; } else if (src.expect_space(2 * BIT_TIME_US) && src.expect_mark(BIT_TIME_US) && (src.expect_space(BIT_TIME_US) || src.peek_space(2 * BIT_TIME_US))) { out_data |= 1 << bit; } else { - ESP_LOGV(TAG, "Decode Drayton: Fail 2, - %d %d %d", src.peek(-1), src.peek(0), src.peek(1)); + ESP_LOGV(TAG, "Decode Drayton: Fail 2, - %" PRId32 " %" PRId32 " %" PRId32, src.peek(-1), src.peek(0), + src.peek(1)); continue; } @@ -202,7 +204,8 @@ optional DraytonProtocol::decode(RemoteReceiveData src) { } if (bit > 0) { - ESP_LOGVV(TAG, "Decode Drayton: Fail 3, %d %" PRId32 " %" PRId32, src.peek(-1), src.peek(0), src.peek(1)); + ESP_LOGVV(TAG, "Decode Drayton: Fail 3, %" PRId32 " %" PRId32 " %" PRId32, src.peek(-1), src.peek(0), + src.peek(1)); continue; } @@ -214,7 +217,7 @@ optional DraytonProtocol::decode(RemoteReceiveData src) { continue; } - ESP_LOGV(TAG, "Decode Drayton: Data, %2d %08x", bit, out_data); + ESP_LOGV(TAG, "Decode Drayton: Data, %2d %08" PRIx32, bit, out_data); out.channel = (uint8_t) (out_data & 0x1F); out_data >>= NBITS_CHANNEL; diff --git a/esphome/components/remote_base/keeloq_protocol.cpp b/esphome/components/remote_base/keeloq_protocol.cpp index 09d9ea4f53..72540c37f1 100644 --- a/esphome/components/remote_base/keeloq_protocol.cpp +++ b/esphome/components/remote_base/keeloq_protocol.cpp @@ -52,7 +52,7 @@ void KeeloqProtocol::encode(RemoteTransmitData *dst, const KeeloqData &data) { // Encrypted field out_data = data.encrypted; - ESP_LOGV(TAG, "Send Keeloq: Encrypted data %04x", out_data); + ESP_LOGV(TAG, "Send Keeloq: Encrypted data %04" PRIx32, out_data); for (uint32_t mask = 1, cnt = 0; cnt < NBITS_ENCRYPTED_DATA; cnt++, mask <<= 1) { if (out_data & mask) { @@ -68,7 +68,7 @@ void KeeloqProtocol::encode(RemoteTransmitData *dst, const KeeloqData &data) { out_data = (data.command & 0x0f); out_data <<= NBITS_SERIAL; out_data |= data.address; - ESP_LOGV(TAG, "Send Keeloq: Fixed data %04x", out_data); + ESP_LOGV(TAG, "Send Keeloq: Fixed data %04" PRIx32, out_data); for (uint32_t mask = 1, cnt = 0; cnt < (NBITS_FIXED_DATA - 2); cnt++, mask <<= 1) { if (out_data & mask) { @@ -111,21 +111,24 @@ optional KeeloqProtocol::decode(RemoteReceiveData src) { return {}; } - ESP_LOGVV(TAG, "%2d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", src.size(), src.peek(0), - src.peek(1), src.peek(2), src.peek(3), src.peek(4), src.peek(5), src.peek(6), src.peek(7), src.peek(8), - src.peek(9), src.peek(10), src.peek(11), src.peek(12), src.peek(13), src.peek(14), src.peek(15), - src.peek(16), src.peek(17), src.peek(18), src.peek(19)); + ESP_LOGVV(TAG, + "%2" PRId32 ": %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 + " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 " %" PRId32 + " %" PRId32 " %" PRId32 " %" PRId32, + src.size(), src.peek(0), src.peek(1), src.peek(2), src.peek(3), src.peek(4), src.peek(5), src.peek(6), + src.peek(7), src.peek(8), src.peek(9), src.peek(10), src.peek(11), src.peek(12), src.peek(13), src.peek(14), + src.peek(15), src.peek(16), src.peek(17), src.peek(18), src.peek(19)); // Check preamble bits int8_t bit = NBITS_PREAMBLE - 1; while (--bit >= 0) { if (!src.expect_mark(BIT_TIME_US) || !src.expect_space(BIT_TIME_US)) { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 1, %d %d", bit + 1, src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 1, %d %" PRId32, bit + 1, src.peek()); return {}; } } if (!src.expect_mark(BIT_TIME_US) || !src.expect_space(10 * BIT_TIME_US)) { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 1, %d %d", bit + 1, src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 1, %d %" PRId32, bit + 1, src.peek()); return {}; } @@ -137,11 +140,11 @@ optional KeeloqProtocol::decode(RemoteReceiveData src) { } else if (src.expect_mark(BIT_TIME_US) && src.expect_space(2 * BIT_TIME_US)) { out_data |= 1 << bit; } else { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 2, %d %d", src.get_index(), src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 2, %" PRIu32 " %" PRId32, src.get_index(), src.peek()); return {}; } } - ESP_LOGVV(TAG, "Decode KeeLoq: Data, %d %08x", bit, out_data); + ESP_LOGVV(TAG, "Decode KeeLoq: Data, %d %08" PRIx32, bit, out_data); out.encrypted = out_data; // Read Serial Number and Button Status @@ -152,11 +155,11 @@ optional KeeloqProtocol::decode(RemoteReceiveData src) { } else if (src.expect_mark(BIT_TIME_US) && src.expect_space(2 * BIT_TIME_US)) { out_data |= 1 << bit; } else { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 3, %d %d", src.get_index(), src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 3, %" PRIu32 " %" PRId32, src.get_index(), src.peek()); return {}; } } - ESP_LOGVV(TAG, "Decode KeeLoq: Data, %2d %08x", bit, out_data); + ESP_LOGVV(TAG, "Decode KeeLoq: Data, %2d %08" PRIx32, bit, out_data); out.command = (out_data >> 28) & 0xf; out.address = out_data & 0xfffffff; @@ -166,7 +169,7 @@ optional KeeloqProtocol::decode(RemoteReceiveData src) { } else if (src.expect_mark(BIT_TIME_US) && src.expect_space(2 * BIT_TIME_US)) { out.vlow = true; } else { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 4, %08x", src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 4, %" PRId32, src.peek()); return {}; } @@ -176,7 +179,7 @@ optional KeeloqProtocol::decode(RemoteReceiveData src) { } else if (src.expect_mark(BIT_TIME_US) && src.peek_space_at_least(2 * BIT_TIME_US)) { out.repeat = true; } else { - ESP_LOGV(TAG, "Decode KeeLoq: Fail 5, %08x", src.peek()); + ESP_LOGV(TAG, "Decode KeeLoq: Fail 5, %" PRId32, src.peek()); return {}; } diff --git a/esphome/components/uart/uart_component_esp_idf.cpp b/esphome/components/uart/uart_component_esp_idf.cpp index 2dd6ab105f..c66753b0c4 100644 --- a/esphome/components/uart/uart_component_esp_idf.cpp +++ b/esphome/components/uart/uart_component_esp_idf.cpp @@ -69,7 +69,7 @@ void IDFUARTComponent::setup() { this->mark_failed(); return; } - this->uart_num_ = next_uart_num++; + this->uart_num_ = static_cast(next_uart_num++); ESP_LOGCONFIG(TAG, "Setting up UART %u...", this->uart_num_); this->lock_ = xSemaphoreCreateMutex(); diff --git a/esphome/components/xgzp68xx/xgzp68xx.cpp b/esphome/components/xgzp68xx/xgzp68xx.cpp index ea3583c3c5..dff00fb696 100644 --- a/esphome/components/xgzp68xx/xgzp68xx.cpp +++ b/esphome/components/xgzp68xx/xgzp68xx.cpp @@ -3,6 +3,7 @@ #include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/components/i2c/i2c.h" +#include namespace esphome { namespace xgzp68xx { @@ -37,8 +38,8 @@ void XGZP68XXComponent::update() { temperature_raw = encode_uint16(data[3], data[4]); // Convert the pressure data to hPa - ESP_LOGV(TAG, "Got raw pressure=%d, raw temperature=%d ", pressure_raw, temperature_raw); - ESP_LOGV(TAG, "K value is %d ", this->k_value_); + ESP_LOGV(TAG, "Got raw pressure=%" PRIu32 ", raw temperature=%u", pressure_raw, temperature_raw); + ESP_LOGV(TAG, "K value is %u", this->k_value_); // The most significant bit of both pressure and temperature will be 1 to indicate a negative value. // This is directly from the datasheet, and the calculations below will handle this. From 06996def725aececb406739857f59873f72271ca Mon Sep 17 00:00:00 2001 From: DAVe3283 Date: Tue, 28 May 2024 14:44:47 -0600 Subject: [PATCH 266/313] Use uint8_t instead of uint32_t for 8-bit values on mitsubishi (#6824) This solves some printf formatting issues on ESP-IDF and saves RAM on all platforms. --- esphome/components/mitsubishi/mitsubishi.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/components/mitsubishi/mitsubishi.cpp b/esphome/components/mitsubishi/mitsubishi.cpp index 081c24a050..fd57adc586 100644 --- a/esphome/components/mitsubishi/mitsubishi.cpp +++ b/esphome/components/mitsubishi/mitsubishi.cpp @@ -6,7 +6,7 @@ namespace mitsubishi { static const char *const TAG = "mitsubishi.climate"; -const uint32_t MITSUBISHI_OFF = 0x00; +const uint8_t MITSUBISHI_OFF = 0x00; const uint8_t MITSUBISHI_MODE_AUTO = 0x20; const uint8_t MITSUBISHI_MODE_COOL = 0x18; @@ -109,8 +109,8 @@ void MitsubishiClimate::transmit_state() { // Byte 15: HVAC specfic, i.e. POWERFUL, SMART SET, PLASMA, always 0x00 // Byte 16: Constant 0x00 // Byte 17: Checksum: SUM[Byte0...Byte16] - uint32_t remote_state[18] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + uint8_t remote_state[18] = {0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; switch (this->mode) { case climate::CLIMATE_MODE_HEAT: @@ -249,7 +249,7 @@ void MitsubishiClimate::transmit_state() { data->set_carrier_frequency(38000); // repeat twice - for (uint16_t r = 0; r < 2; r++) { + for (uint8_t r = 0; r < 2; r++) { // Header data->mark(MITSUBISHI_HEADER_MARK); data->space(MITSUBISHI_HEADER_SPACE); From 2b691ad5adde275544f1e7896463083a84f028af Mon Sep 17 00:00:00 2001 From: Frederik <5511687+fightforlife@users.noreply.github.com> Date: Wed, 29 May 2024 00:02:45 +0200 Subject: [PATCH 267/313] Make SPI Ethernet (W5500) compatible with ESP-IDF v5 (#6778) * change MAC PHY init order according to IDF examples * add idfv5 specific w5500 config init * esp_mac.h needs to be included directly starting with idf5 * Header fix * Couple tweaks --------- Co-authored-by: Keith Burzinski --- esphome/components/ethernet/ethernet_component.cpp | 8 ++++++-- esphome/components/ethernet/ethernet_component.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 3af462d593..2a4e5cbad3 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -98,11 +98,15 @@ void EthernetComponent::setup() { .post_cb = nullptr, }; +#if USE_ESP_IDF && (ESP_IDF_VERSION_MAJOR >= 5) + eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(host, &devcfg); +#else spi_device_handle_t spi_handle = nullptr; err = spi_bus_add_device(host, &devcfg, &spi_handle); ESPHL_ERROR_CHECK(err, "SPI bus add device error"); eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(spi_handle); +#endif w5500_config.int_gpio_num = this->interrupt_pin_; phy_config.phy_addr = this->phy_addr_spi_; phy_config.reset_gpio_num = this->reset_pin_; @@ -614,14 +618,14 @@ void EthernetComponent::rtl8201_set_rmii_mode_(esp_eth_mac_t *mac) { err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); - ESP_LOGV(TAG, "Hardware default RTL8201 RMII Mode Register is: 0x%04X", phy_rmii_mode); + ESP_LOGV(TAG, "Hardware default RTL8201 RMII Mode Register is: 0x%04" PRIX32, phy_rmii_mode); err = mac->write_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, 0x1FFA); ESPHL_ERROR_CHECK(err, "Setting Register 16 RMII Mode Setting failed"); err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); - ESP_LOGV(TAG, "Setting RTL8201 RMII Mode Register to: 0x%04X", phy_rmii_mode); + ESP_LOGV(TAG, "Setting RTL8201 RMII Mode Register to: 0x%04" PRIX32, phy_rmii_mode); err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x0); ESPHL_ERROR_CHECK(err, "Setting Page 0 failed"); diff --git a/esphome/components/ethernet/ethernet_component.h b/esphome/components/ethernet/ethernet_component.h index 6276885fd1..3705e3e06a 100644 --- a/esphome/components/ethernet/ethernet_component.h +++ b/esphome/components/ethernet/ethernet_component.h @@ -10,6 +10,7 @@ #include "esp_eth.h" #include "esp_eth_mac.h" #include "esp_netif.h" +#include "esp_mac.h" namespace esphome { namespace ethernet { From ec3164f80058c43ea21d7bc5c7f62bdf7679703f Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Wed, 29 May 2024 14:36:49 +1000 Subject: [PATCH 268/313] [wake_on_lan] Make component platform independent (#6815) --- CODEOWNERS | 2 +- .../components/socket/lwip_raw_tcp_impl.cpp | 3 +- esphome/components/wake_on_lan/__init__.py | 2 +- esphome/components/wake_on_lan/button.py | 34 +++++---- .../components/wake_on_lan/wake_on_lan.cpp | 70 +++++++++++++------ esphome/components/wake_on_lan/wake_on_lan.h | 15 ++-- .../wake_on_lan/test.esp32-c3-idf.yaml | 1 + .../wake_on_lan/test.esp32-idf.yaml | 1 + 8 files changed, 84 insertions(+), 44 deletions(-) create mode 100644 tests/components/wake_on_lan/test.esp32-c3-idf.yaml create mode 100644 tests/components/wake_on_lan/test.esp32-idf.yaml diff --git a/CODEOWNERS b/CODEOWNERS index e099ca42ac..8b6143859a 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -414,7 +414,7 @@ esphome/components/veml3235/* @kbx81 esphome/components/veml7700/* @latonita esphome/components/version/* @esphome/core esphome/components/voice_assistant/* @jesserockz -esphome/components/wake_on_lan/* @willwill2will54 +esphome/components/wake_on_lan/* @clydebarrow @willwill2will54 esphome/components/waveshare_epaper/* @clydebarrow esphome/components/web_server_base/* @OttoWinter esphome/components/web_server_idf/* @dentra diff --git a/esphome/components/socket/lwip_raw_tcp_impl.cpp b/esphome/components/socket/lwip_raw_tcp_impl.cpp index bd59b81caa..1d998902ff 100644 --- a/esphome/components/socket/lwip_raw_tcp_impl.cpp +++ b/esphome/components/socket/lwip_raw_tcp_impl.cpp @@ -469,7 +469,8 @@ class LWIPRawImpl : public Socket { } ssize_t sendto(const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) override { // return ::sendto(fd_, buf, len, flags, to, tolen); - return 0; + errno = ENOSYS; + return -1; } int setblocking(bool blocking) override { if (pcb_ == nullptr) { diff --git a/esphome/components/wake_on_lan/__init__.py b/esphome/components/wake_on_lan/__init__.py index 3548fb02f4..90539e5d3c 100644 --- a/esphome/components/wake_on_lan/__init__.py +++ b/esphome/components/wake_on_lan/__init__.py @@ -1 +1 @@ -CODEOWNERS = ["@willwill2will54"] +CODEOWNERS = ["@willwill2will54", "@clydebarrow"] diff --git a/esphome/components/wake_on_lan/button.py b/esphome/components/wake_on_lan/button.py index 778ea60cfa..b09e87e811 100644 --- a/esphome/components/wake_on_lan/button.py +++ b/esphome/components/wake_on_lan/button.py @@ -2,6 +2,16 @@ import esphome.codegen as cg from esphome.components import button import esphome.config_validation as cv from esphome.const import CONF_ID +from esphome.core import CORE + +DEPENDENCIES = ["network"] + + +def AUTO_LOAD(): + if CORE.is_esp8266 or CORE.is_rp2040: + return [] + return ["socket"] + CONF_TARGET_MAC_ADDRESS = "target_mac_address" @@ -9,25 +19,19 @@ wake_on_lan_ns = cg.esphome_ns.namespace("wake_on_lan") WakeOnLanButton = wake_on_lan_ns.class_("WakeOnLanButton", button.Button, cg.Component) -DEPENDENCIES = ["network"] - -CONFIG_SCHEMA = cv.All( +CONFIG_SCHEMA = ( button.button_schema(WakeOnLanButton) .extend(cv.COMPONENT_SCHEMA) .extend( - cv.Schema( - { - cv.Required(CONF_TARGET_MAC_ADDRESS): cv.mac_address, - } - ), - ), - cv.only_with_arduino, + { + cv.Required(CONF_TARGET_MAC_ADDRESS): cv.mac_address, + } + ) ) -def to_code(config): +async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) - - yield cg.add(var.set_macaddr(*config[CONF_TARGET_MAC_ADDRESS].parts)) - yield cg.register_component(var, config) - yield button.register_button(var, config) + cg.add(var.set_macaddr(*config[CONF_TARGET_MAC_ADDRESS].parts)) + await cg.register_component(var, config) + await button.register_button(var, config) diff --git a/esphome/components/wake_on_lan/wake_on_lan.cpp b/esphome/components/wake_on_lan/wake_on_lan.cpp index f414bf6c71..080e1bbac8 100644 --- a/esphome/components/wake_on_lan/wake_on_lan.cpp +++ b/esphome/components/wake_on_lan/wake_on_lan.cpp @@ -1,5 +1,3 @@ -#ifdef USE_ARDUINO - #include "wake_on_lan.h" #include "esphome/core/log.h" #include "esphome/components/network/ip_address.h" @@ -22,40 +20,68 @@ void WakeOnLanButton::set_macaddr(uint8_t a, uint8_t b, uint8_t c, uint8_t d, ui void WakeOnLanButton::dump_config() { LOG_BUTTON("", "Wake-on-LAN Button", this); - ESP_LOGCONFIG(TAG, " Target MAC address: %02X:%02X:%02X:%02X:%02X:%02X", macaddr_[0], macaddr_[1], macaddr_[2], - macaddr_[3], macaddr_[4], macaddr_[5]); + ESP_LOGCONFIG(TAG, " Target MAC address: %02X:%02X:%02X:%02X:%02X:%02X", this->macaddr_[0], this->macaddr_[1], + this->macaddr_[2], this->macaddr_[3], this->macaddr_[4], this->macaddr_[5]); } void WakeOnLanButton::press_action() { + if (!network::is_connected()) { + ESP_LOGW(TAG, "Network not connected"); + return; + } ESP_LOGI(TAG, "Sending Wake-on-LAN Packet..."); - bool begin_status = false; - bool end_status = false; +#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS) + struct sockaddr_storage saddr {}; + auto addr_len = + socket::set_sockaddr(reinterpret_cast(&saddr), sizeof(saddr), "255.255.255.255", this->port_); + uint8_t buffer[6 + sizeof this->macaddr_ * 16]; + memcpy(buffer, PREFIX, sizeof(PREFIX)); + for (size_t i = 0; i != 16; i++) { + memcpy(buffer + i * sizeof(this->macaddr_) + sizeof(PREFIX), this->macaddr_, sizeof(this->macaddr_)); + } + if (this->broadcast_socket_->sendto(buffer, sizeof(buffer), 0, reinterpret_cast(&saddr), + addr_len) <= 0) + ESP_LOGW(TAG, "sendto() error %d", errno); +#else IPAddress broadcast = IPAddress(255, 255, 255, 255); -#ifdef USE_ESP8266 for (auto ip : esphome::network::get_ip_addresses()) { if (ip.is_ip4()) { - begin_status = this->udp_client_.beginPacketMulticast(broadcast, 9, ip, 128); - break; + if (this->udp_client_.beginPacketMulticast(broadcast, 9, ip, 128) != 0) { + this->udp_client_.write(PREFIX, 6); + for (size_t i = 0; i < 16; i++) { + this->udp_client_.write(macaddr_, 6); + } + if (this->udp_client_.endPacket() != 0) + return; + ESP_LOGW(TAG, "WOL broadcast failed"); + return; + } } } + ESP_LOGW(TAG, "No ip4 addresses to broadcast to"); #endif -#ifdef USE_ESP32 - begin_status = this->udp_client_.beginPacket(broadcast, 9); -#endif +} - if (begin_status) { - this->udp_client_.write(PREFIX, 6); - for (size_t i = 0; i < 16; i++) { - this->udp_client_.write(macaddr_, 6); - } - end_status = this->udp_client_.endPacket(); +void WakeOnLanButton::setup() { +#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS) + this->broadcast_socket_ = socket::socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (this->broadcast_socket_ == nullptr) { + this->mark_failed(); + this->status_set_error("Could not create socket"); + return; } - if (!begin_status || end_status) { - ESP_LOGE(TAG, "Sending Wake-on-LAN Packet Failed!"); + int enable = 1; + auto err = this->broadcast_socket_->setsockopt(SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)); + if (err != 0) { + this->status_set_warning("Socket unable to set reuseaddr"); + // we can still continue } + err = this->broadcast_socket_->setsockopt(SOL_SOCKET, SO_BROADCAST, &enable, sizeof(int)); + if (err != 0) { + this->status_set_warning("Socket unable to set broadcast"); + } +#endif } } // namespace wake_on_lan } // namespace esphome - -#endif diff --git a/esphome/components/wake_on_lan/wake_on_lan.h b/esphome/components/wake_on_lan/wake_on_lan.h index 72f900e3fa..42cb3a9268 100644 --- a/esphome/components/wake_on_lan/wake_on_lan.h +++ b/esphome/components/wake_on_lan/wake_on_lan.h @@ -1,10 +1,12 @@ #pragma once -#ifdef USE_ARDUINO - #include "esphome/components/button/button.h" #include "esphome/core/component.h" +#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS) +#include "esphome/components/socket/socket.h" +#else #include "WiFiUdp.h" +#endif namespace esphome { namespace wake_on_lan { @@ -14,14 +16,19 @@ class WakeOnLanButton : public button::Button, public Component { void set_macaddr(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t e, uint8_t f); void dump_config() override; + void setup() override; + float get_setup_priority() const override { return setup_priority::AFTER_WIFI; } protected: +#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS) + std::unique_ptr broadcast_socket_{}; +#else WiFiUDP udp_client_{}; +#endif void press_action() override; + uint16_t port_{9}; uint8_t macaddr_[6]; }; } // namespace wake_on_lan } // namespace esphome - -#endif diff --git a/tests/components/wake_on_lan/test.esp32-c3-idf.yaml b/tests/components/wake_on_lan/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..dade44d145 --- /dev/null +++ b/tests/components/wake_on_lan/test.esp32-c3-idf.yaml @@ -0,0 +1 @@ +<<: !include common.yaml diff --git a/tests/components/wake_on_lan/test.esp32-idf.yaml b/tests/components/wake_on_lan/test.esp32-idf.yaml new file mode 100644 index 0000000000..dade44d145 --- /dev/null +++ b/tests/components/wake_on_lan/test.esp32-idf.yaml @@ -0,0 +1 @@ +<<: !include common.yaml From bff24e297774d7f79deea30c9cdaed4bc23e47d4 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Wed, 29 May 2024 00:05:19 -0500 Subject: [PATCH 269/313] Fix a bunch of components for IDF 5 compatibility and #6802 (#6805) --- esphome/components/ade7880/ade7880.cpp | 1 + .../components/ade7953_base/ade7953_base.cpp | 1 + esphome/components/ags10/ags10.cpp | 4 +- .../components/ct_clamp/ct_clamp_sensor.cpp | 5 ++- .../fingerprint_grow/fingerprint_grow.cpp | 2 +- esphome/components/he60r/he60r.cpp | 7 ++-- esphome/components/htu31d/htu31d.cpp | 4 +- .../components/ina2xx_base/ina2xx_base.cpp | 8 ++-- esphome/components/jsn_sr04t/jsn_sr04t.cpp | 4 +- esphome/components/mhz19/mhz19.cpp | 1 + .../micro_wake_word/micro_wake_word.cpp | 3 +- .../remote_base/byronsx_protocol.cpp | 1 + .../remote_base/drayton_protocol.cpp | 2 + esphome/components/sonoff_d1/sonoff_d1.cpp | 3 +- esphome/components/weikai/weikai.cpp | 4 +- esphome/components/wl_134/wl_134.cpp | 4 +- esphome/components/xgzp68xx/xgzp68xx.cpp | 1 + .../remote_receiver/esp32-common.yaml | 40 +++++++++---------- 18 files changed, 55 insertions(+), 40 deletions(-) diff --git a/esphome/components/ade7880/ade7880.cpp b/esphome/components/ade7880/ade7880.cpp index a03f1227f1..4a45b3b321 100644 --- a/esphome/components/ade7880/ade7880.cpp +++ b/esphome/components/ade7880/ade7880.cpp @@ -10,6 +10,7 @@ #include "ade7880.h" #include "ade7880_registers.h" #include "esphome/core/log.h" + #include namespace esphome { diff --git a/esphome/components/ade7953_base/ade7953_base.cpp b/esphome/components/ade7953_base/ade7953_base.cpp index 79161c5676..2511b4e04c 100644 --- a/esphome/components/ade7953_base/ade7953_base.cpp +++ b/esphome/components/ade7953_base/ade7953_base.cpp @@ -1,5 +1,6 @@ #include "ade7953_base.h" #include "esphome/core/log.h" + #include namespace esphome { diff --git a/esphome/components/ags10/ags10.cpp b/esphome/components/ags10/ags10.cpp index dfaa00e2e9..422380da83 100644 --- a/esphome/components/ags10/ags10.cpp +++ b/esphome/components/ags10/ags10.cpp @@ -1,5 +1,7 @@ #include "ags10.h" +#include + namespace esphome { namespace ags10 { static const char *const TAG = "ags10"; @@ -35,7 +37,7 @@ void AGS10Component::setup() { auto resistance = this->read_resistance_(); if (resistance) { - ESP_LOGD(TAG, "AGS10 Sensor Resistance: 0x%08X", *resistance); + ESP_LOGD(TAG, "AGS10 Sensor Resistance: 0x%08" PRIX32, *resistance); if (this->resistance_ != nullptr) { this->resistance_->publish_state(*resistance); } diff --git a/esphome/components/ct_clamp/ct_clamp_sensor.cpp b/esphome/components/ct_clamp/ct_clamp_sensor.cpp index d555befcde..0aa0258a9b 100644 --- a/esphome/components/ct_clamp/ct_clamp_sensor.cpp +++ b/esphome/components/ct_clamp/ct_clamp_sensor.cpp @@ -1,6 +1,7 @@ #include "ct_clamp_sensor.h" #include "esphome/core/log.h" +#include #include namespace esphome { @@ -37,8 +38,8 @@ void CTClampSensor::update() { float rms_ac = 0; if (rms_ac_squared > 0) rms_ac = std::sqrt(rms_ac_squared); - ESP_LOGD(TAG, "'%s' - Raw AC Value: %.3fA after %d different samples (%d SPS)", this->name_.c_str(), rms_ac, - this->num_samples_, 1000 * this->num_samples_ / this->sample_duration_); + ESP_LOGD(TAG, "'%s' - Raw AC Value: %.3fA after %" PRIu32 " different samples (%" PRIu32 " SPS)", + this->name_.c_str(), rms_ac, this->num_samples_, 1000 * this->num_samples_ / this->sample_duration_); this->publish_state(rms_ac); }); diff --git a/esphome/components/fingerprint_grow/fingerprint_grow.cpp b/esphome/components/fingerprint_grow/fingerprint_grow.cpp index 8f58db9159..c2cab368c9 100644 --- a/esphome/components/fingerprint_grow/fingerprint_grow.cpp +++ b/esphome/components/fingerprint_grow/fingerprint_grow.cpp @@ -377,7 +377,7 @@ uint8_t FingerprintGrowComponent::transfer_(std::vector *p_data_buffer) this->write((uint8_t) (wire_length >> 8)); this->write((uint8_t) (wire_length & 0xFF)); - uint16_t sum = ((wire_length) >> 8) + ((wire_length) &0xFF) + COMMAND; + uint16_t sum = (wire_length >> 8) + (wire_length & 0xFF) + COMMAND; for (auto data : *p_data_buffer) { this->write(data); sum += data; diff --git a/esphome/components/he60r/he60r.cpp b/esphome/components/he60r/he60r.cpp index 96ad1f04be..05f3f528a5 100644 --- a/esphome/components/he60r/he60r.cpp +++ b/esphome/components/he60r/he60r.cpp @@ -1,6 +1,7 @@ #include "he60r.h" #include "esphome/core/hal.h" #include "esphome/core/log.h" + #include namespace esphome { @@ -125,10 +126,10 @@ void HE60rCover::process_rx_(uint8_t data) { } void HE60rCover::update_() { - if (toggles_needed_ != 0) { + if (this->toggles_needed_ != 0) { if ((this->counter_++ & 0x3) == 0) { - toggles_needed_--; - ESP_LOGD(TAG, "Writing byte 0x30, still needed=%" PRIu32, toggles_needed_); + this->toggles_needed_--; + ESP_LOGD(TAG, "Writing byte 0x30, still needed=%" PRIu32, this->toggles_needed_); this->write_byte(TOGGLE_BYTE); } else { this->write_byte(QUERY_BYTE); diff --git a/esphome/components/htu31d/htu31d.cpp b/esphome/components/htu31d/htu31d.cpp index 928250a5b2..bf4689d837 100644 --- a/esphome/components/htu31d/htu31d.cpp +++ b/esphome/components/htu31d/htu31d.cpp @@ -12,6 +12,8 @@ #include "esphome/core/helpers.h" #include "esphome/core/log.h" +#include + namespace esphome { namespace htu31d { @@ -204,7 +206,7 @@ uint32_t HTU31DComponent::read_serial_num_() { return 0; } - ESP_LOGD(TAG, "Found serial: 0x%X", serial); + ESP_LOGD(TAG, "Found serial: 0x%" PRIX32, serial); return serial; } diff --git a/esphome/components/ina2xx_base/ina2xx_base.cpp b/esphome/components/ina2xx_base/ina2xx_base.cpp index 5d947d0537..924bf91e5e 100644 --- a/esphome/components/ina2xx_base/ina2xx_base.cpp +++ b/esphome/components/ina2xx_base/ina2xx_base.cpp @@ -483,7 +483,7 @@ bool INA2XX::read_power_w_(float &power_out) { uint64_t power_reading{0}; auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_POWER, 3, power_reading); - ESP_LOGV(TAG, "read_power_w_ ret=%s, reading_lsb=%d", OKFAILED(ret), (uint32_t) power_reading); + ESP_LOGV(TAG, "read_power_w_ ret=%s, reading_lsb=%" PRIu32, OKFAILED(ret), (uint32_t) power_reading); if (ret) { power_out = this->cfg_.power_coeff * this->current_lsb_ * (float) power_reading; } @@ -503,8 +503,8 @@ bool INA2XX::read_energy_(double &joules_out, double &watt_hours_out) { uint64_t previous_energy = this->energy_overflows_count_ * (((uint64_t) 1) << 40); auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_ENERGY, 5, joules_reading); - ESP_LOGV(TAG, "read_energy_j_ ret=%s, reading_lsb=0x%" PRIX64 ", current_lsb=%f, overflow_cnt=%d", OKFAILED(ret), - joules_reading, this->current_lsb_, this->energy_overflows_count_); + ESP_LOGV(TAG, "read_energy_j_ ret=%s, reading_lsb=0x%" PRIX64 ", current_lsb=%f, overflow_cnt=%" PRIu32, + OKFAILED(ret), joules_reading, this->current_lsb_, this->energy_overflows_count_); if (ret) { joules_out = this->cfg_.energy_coeff * this->current_lsb_ * (double) joules_reading + (double) previous_energy; watt_hours_out = joules_out / 3600.0; @@ -528,7 +528,7 @@ bool INA2XX::read_charge_(double &coulombs_out, double &_hours_out) { auto ret = this->read_unsigned_((uint8_t) RegisterMap::REG_CHARGE, 5, raw); coulombs_reading = this->two_complement_(raw, 40); - ESP_LOGV(TAG, "read_charge_c_ ret=%d, curr_charge=%f + 39-bit overflow_cnt=%d", ret, coulombs_reading, + ESP_LOGV(TAG, "read_charge_c_ ret=%d, curr_charge=%f + 39-bit overflow_cnt=%" PRIu32, ret, coulombs_reading, this->charge_overflows_count_); if (ret) { coulombs_out = this->current_lsb_ * (double) coulombs_reading + (double) previous_charge; diff --git a/esphome/components/jsn_sr04t/jsn_sr04t.cpp b/esphome/components/jsn_sr04t/jsn_sr04t.cpp index 70e21a137d..b96bf8f762 100644 --- a/esphome/components/jsn_sr04t/jsn_sr04t.cpp +++ b/esphome/components/jsn_sr04t/jsn_sr04t.cpp @@ -2,8 +2,6 @@ #include "esphome/core/helpers.h" #include "esphome/core/log.h" -#include - // Very basic support for JSN_SR04T V3.0 distance sensor in mode 2 namespace esphome { @@ -38,7 +36,7 @@ void Jsnsr04tComponent::check_buffer_() { uint16_t distance = encode_uint16(this->buffer_[1], this->buffer_[2]); if (distance > 250) { float meters = distance / 1000.0f; - ESP_LOGV(TAG, "Distance from sensor: %" PRIu32 "mm, %.3fm", distance, meters); + ESP_LOGV(TAG, "Distance from sensor: %umm, %.3fm", distance, meters); this->publish_state(meters); } else { ESP_LOGW(TAG, "Invalid data read from sensor: %s", format_hex_pretty(this->buffer_).c_str()); diff --git a/esphome/components/mhz19/mhz19.cpp b/esphome/components/mhz19/mhz19.cpp index 574aee1bd5..c3c8120362 100644 --- a/esphome/components/mhz19/mhz19.cpp +++ b/esphome/components/mhz19/mhz19.cpp @@ -1,5 +1,6 @@ #include "mhz19.h" #include "esphome/core/log.h" + #include namespace esphome { diff --git a/esphome/components/micro_wake_word/micro_wake_word.cpp b/esphome/components/micro_wake_word/micro_wake_word.cpp index f637f8b2bb..5a89708127 100644 --- a/esphome/components/micro_wake_word/micro_wake_word.cpp +++ b/esphome/components/micro_wake_word/micro_wake_word.cpp @@ -20,6 +20,7 @@ #include #include +#include #include namespace esphome { @@ -316,7 +317,7 @@ float MicroWakeWord::perform_streaming_inference_() { return false; } - ESP_LOGV(TAG, "Streaming Inference Latency=%u ms", (millis() - prior_invoke)); + ESP_LOGV(TAG, "Streaming Inference Latency=%" PRIu32 " ms", (millis() - prior_invoke)); TfLiteTensor *output = this->streaming_interpreter_->output(0); diff --git a/esphome/components/remote_base/byronsx_protocol.cpp b/esphome/components/remote_base/byronsx_protocol.cpp index 2d4c60ff8b..6bfa4b7ff9 100644 --- a/esphome/components/remote_base/byronsx_protocol.cpp +++ b/esphome/components/remote_base/byronsx_protocol.cpp @@ -1,5 +1,6 @@ #include "byronsx_protocol.h" #include "esphome/core/log.h" + #include namespace esphome { diff --git a/esphome/components/remote_base/drayton_protocol.cpp b/esphome/components/remote_base/drayton_protocol.cpp index 73c0fb116c..da2e985af0 100644 --- a/esphome/components/remote_base/drayton_protocol.cpp +++ b/esphome/components/remote_base/drayton_protocol.cpp @@ -1,6 +1,8 @@ #include "drayton_protocol.h" #include "esphome/core/log.h" +#include + namespace esphome { namespace remote_base { diff --git a/esphome/components/sonoff_d1/sonoff_d1.cpp b/esphome/components/sonoff_d1/sonoff_d1.cpp index 6ae80296fd..e70ec7b70d 100644 --- a/esphome/components/sonoff_d1/sonoff_d1.cpp +++ b/esphome/components/sonoff_d1/sonoff_d1.cpp @@ -128,7 +128,8 @@ bool SonoffD1Output::read_ack_(const uint8_t *cmd, const size_t len) { // Expected acknowledgement from rf chip uint8_t ref_buffer[7] = {0xAA, 0x55, cmd[2], cmd[3], 0x00, 0x00, 0x00}; uint8_t buffer[sizeof(ref_buffer)] = {0}; - uint32_t pos = 0, buf_len = sizeof(ref_buffer); + uint32_t pos = 0; + size_t buf_len = sizeof(ref_buffer); // Update the reference checksum this->populate_checksum_(ref_buffer, sizeof(ref_buffer)); diff --git a/esphome/components/weikai/weikai.cpp b/esphome/components/weikai/weikai.cpp index a04bc0a574..00bce9bcff 100644 --- a/esphome/components/weikai/weikai.cpp +++ b/esphome/components/weikai/weikai.cpp @@ -375,8 +375,8 @@ void WeikaiChannel::set_baudrate_() { this->parent_->page1_ = false; // switch back to page 0 this->reg(WKREG_SPAGE) = 0; - ESP_LOGV(TAG, " Crystal=%d baudrate=%d => registers [%d %d %d]", this->parent_->crystal_, this->baud_rate_, - baud_high, baud_low, baud_dec); + ESP_LOGV(TAG, " Crystal=%" PRId32 " baudrate=%" PRId32 " => registers [%d %d %d]", this->parent_->crystal_, + this->baud_rate_, baud_high, baud_low, baud_dec); } inline bool WeikaiChannel::tx_fifo_is_not_empty_() { return this->reg(WKREG_FSR) & FSR_TFDAT; } diff --git a/esphome/components/wl_134/wl_134.cpp b/esphome/components/wl_134/wl_134.cpp index 3ffa0c63ce..403f8bd1b3 100644 --- a/esphome/components/wl_134/wl_134.cpp +++ b/esphome/components/wl_134/wl_134.cpp @@ -1,6 +1,8 @@ #include "wl_134.h" #include "esphome/core/log.h" +#include + namespace esphome { namespace wl_134 { @@ -71,7 +73,7 @@ Wl134Component::Rfid134Error Wl134Component::read_packet_() { ESP_LOGV(TAG, "isData: %s", reading.isData ? "true" : "false"); ESP_LOGV(TAG, "isAnimal: %s", reading.isAnimal ? "true" : "false"); ESP_LOGV(TAG, "Reserved0: %d", reading.reserved0); - ESP_LOGV(TAG, "Reserved1: %d", reading.reserved1); + ESP_LOGV(TAG, "Reserved1: %" PRId32, reading.reserved1); char buf[20]; sprintf(buf, "%03d%012lld", reading.country, reading.id); diff --git a/esphome/components/xgzp68xx/xgzp68xx.cpp b/esphome/components/xgzp68xx/xgzp68xx.cpp index dff00fb696..ad6217845d 100644 --- a/esphome/components/xgzp68xx/xgzp68xx.cpp +++ b/esphome/components/xgzp68xx/xgzp68xx.cpp @@ -3,6 +3,7 @@ #include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/components/i2c/i2c.h" + #include namespace esphome { diff --git a/tests/components/remote_receiver/esp32-common.yaml b/tests/components/remote_receiver/esp32-common.yaml index c3987f8cd9..7e5d2cce32 100644 --- a/tests/components/remote_receiver/esp32-common.yaml +++ b/tests/components/remote_receiver/esp32-common.yaml @@ -32,8 +32,8 @@ remote_receiver: on_coolix: then: - logger.log: - format: "on_coolix: %u %u" - args: ["x.first", "x.second"] + format: "on_coolix: %lu %lu" + args: ["long(x.first)", "long(x.second)"] on_dish: then: - logger.log: @@ -52,13 +52,13 @@ remote_receiver: on_jvc: then: - logger.log: - format: "on_jvc: %u" - args: ["x.data"] + format: "on_jvc: %lu" + args: ["long(x.data)"] on_keeloq: then: - logger.log: - format: "on_keeloq: %u %u %u" - args: ["x.encrypted", "x.address", "x.command"] + format: "on_keeloq: %lu %lu %u" + args: ["long(x.encrypted)", "long(x.address)", "x.command"] on_haier: then: - logger.log: @@ -67,13 +67,13 @@ remote_receiver: on_lg: then: - logger.log: - format: "on_lg: %u %u" - args: ["x.data", "x.nbits"] + format: "on_lg: %lu %u" + args: ["long(x.data)", "x.nbits"] on_magiquest: then: - logger.log: - format: "on_magiquest: %u %u" - args: ["x.magnitude", "x.wand_id"] + format: "on_magiquest: %u %lu" + args: ["x.magnitude", "long(x.wand_id)"] on_midea: then: - logger.log: @@ -87,13 +87,13 @@ remote_receiver: on_nexa: then: - logger.log: - format: "on_nexa: %u %u %u %u %u" - args: ["x.device", "x.group", "x.state", "x.channel", "x.level"] + format: "on_nexa: %lu %u %u %u %u" + args: ["long(x.device)", "x.group", "x.state", "x.channel", "x.level"] on_panasonic: then: - logger.log: - format: "on_panasonic: %u %u" - args: ["x.address", "x.command"] + format: "on_panasonic: %u %lu" + args: ["x.address", "long(x.command)"] on_pioneer: then: - logger.log: @@ -107,8 +107,8 @@ remote_receiver: on_raw: then: - logger.log: - format: "on_raw: %u" - args: ["x.front()"] + format: "on_raw: %lu" + args: ["long(x.front())"] on_rc5: then: - logger.log: @@ -132,13 +132,13 @@ remote_receiver: on_samsung36: then: - logger.log: - format: "on_samsung36: %u %u" - args: ["x.address", "x.command"] + format: "on_samsung36: %u %lu" + args: ["x.address", "long(x.command)"] on_sony: then: - logger.log: - format: "on_sony: %u %u" - args: ["x.data", "x.nbits"] + format: "on_sony: %lu %u" + args: ["long(x.data)", "x.nbits"] on_toshiba_ac: then: - logger.log: From 60433c5e645690f358be94c2e3136aecfd84fa59 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 17:09:13 +1200 Subject: [PATCH 270/313] Bump docker/login-action from 3.1.0 to 3.2.0 (#6823) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 47dc217bf7..563d485b6a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,12 +96,12 @@ jobs: uses: docker/setup-qemu-action@v3.0.0 - name: Log in to docker hub - uses: docker/login-action@v3.1.0 + uses: docker/login-action@v3.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log in to the GitHub container registry - uses: docker/login-action@v3.1.0 + uses: docker/login-action@v3.2.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -188,13 +188,13 @@ jobs: - name: Log in to docker hub if: matrix.registry == 'dockerhub' - uses: docker/login-action@v3.1.0 + uses: docker/login-action@v3.2.0 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log in to the GitHub container registry if: matrix.registry == 'ghcr' - uses: docker/login-action@v3.1.0 + uses: docker/login-action@v3.2.0 with: registry: ghcr.io username: ${{ github.actor }} From 6d5d382f3db98e2a9997fed9e62811f91bad06f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 17:10:47 +1200 Subject: [PATCH 271/313] Bump pytest-cov from 4.1.0 to 5.0.0 (#6580) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_test.txt b/requirements_test.txt index ae833841ca..0052e7545c 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -6,7 +6,7 @@ pre-commit # Unit tests pytest==8.2.0 -pytest-cov==4.1.0 +pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-asyncio==0.23.6 asyncmock==0.4.2 From 439fd9471863e4bf12cdc5e11b098ab0b7b96874 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 17:11:02 +1200 Subject: [PATCH 272/313] Bump peter-evans/create-pull-request from 6.0.4 to 6.0.5 (#6635) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/sync-device-classes.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sync-device-classes.yml b/.github/workflows/sync-device-classes.yml index 9a8c9d1753..e65e851f3c 100644 --- a/.github/workflows/sync-device-classes.yml +++ b/.github/workflows/sync-device-classes.yml @@ -36,7 +36,7 @@ jobs: python ./script/sync-device_class.py - name: Commit changes - uses: peter-evans/create-pull-request@v6.0.4 + uses: peter-evans/create-pull-request@v6.0.5 with: commit-message: "Synchronise Device Classes from Home Assistant" committer: esphomebot From 5ae32e81c360a73f7ebe14d330d6e9d58eac324a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 May 2024 17:11:34 +1200 Subject: [PATCH 273/313] Bump black from 24.4.0 to 24.4.2 (#6646) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- requirements_test.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 418716e4f4..74acfa1c1d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/psf/black-pre-commit-mirror - rev: 24.2.0 + rev: 24.4.2 hooks: - id: black args: diff --git a/requirements_test.txt b/requirements_test.txt index 0052e7545c..94abe1cd76 100644 --- a/requirements_test.txt +++ b/requirements_test.txt @@ -1,6 +1,6 @@ pylint==3.1.0 flake8==7.0.0 # also change in .pre-commit-config.yaml when updating -black==24.4.0 # also change in .pre-commit-config.yaml when updating +black==24.4.2 # also change in .pre-commit-config.yaml when updating pyupgrade==3.15.2 # also change in .pre-commit-config.yaml when updating pre-commit From 854d3f2e4a919c27f723d940295f0adec1614168 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 13:09:19 +1200 Subject: [PATCH 274/313] [voice_assistant] Timers (#6821) Co-authored-by: Keith Burzinski --- esphome/components/api/api.proto | 19 ++++ esphome/components/api/api_connection.cpp | 9 ++ esphome/components/api/api_connection.h | 1 + esphome/components/api/api_pb2.cpp | 92 +++++++++++++++++++ esphome/components/api/api_pb2.h | 23 +++++ esphome/components/api/api_pb2_service.cpp | 13 +++ esphome/components/api/api_pb2_service.h | 3 + .../components/voice_assistant/__init__.py | 66 +++++++++++++ .../voice_assistant/voice_assistant.cpp | 53 +++++++++++ .../voice_assistant/voice_assistant.h | 42 +++++++++ 10 files changed, 321 insertions(+) diff --git a/esphome/components/api/api.proto b/esphome/components/api/api.proto index 774ca7ed9b..0becec2348 100644 --- a/esphome/components/api/api.proto +++ b/esphome/components/api/api.proto @@ -1517,6 +1517,25 @@ message VoiceAssistantAudio { bool end = 2; } +enum VoiceAssistantTimerEvent { + VOICE_ASSISTANT_TIMER_STARTED = 0; + VOICE_ASSISTANT_TIMER_UPDATED = 1; + VOICE_ASSISTANT_TIMER_CANCELLED = 2; + VOICE_ASSISTANT_TIMER_FINISHED = 3; +} + +message VoiceAssistantTimerEventResponse { + option (id) = 115; + option (source) = SOURCE_CLIENT; + option (ifdef) = "USE_VOICE_ASSISTANT"; + + VoiceAssistantTimerEvent event_type = 1; + string timer_id = 2; + string name = 3; + uint32 total_seconds = 4; + uint32 seconds_left = 5; + bool is_active = 6; +} // ==================== ALARM CONTROL PANEL ==================== enum AlarmControlPanelState { diff --git a/esphome/components/api/api_connection.cpp b/esphome/components/api/api_connection.cpp index 2804dba31f..253f04aa39 100644 --- a/esphome/components/api/api_connection.cpp +++ b/esphome/components/api/api_connection.cpp @@ -1193,6 +1193,15 @@ void APIConnection::on_voice_assistant_audio(const VoiceAssistantAudio &msg) { voice_assistant::global_voice_assistant->on_audio(msg); } }; +void APIConnection::on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) { + if (voice_assistant::global_voice_assistant != nullptr) { + if (voice_assistant::global_voice_assistant->get_api_connection() != this) { + return; + } + + voice_assistant::global_voice_assistant->on_timer_event(msg); + } +}; #endif diff --git a/esphome/components/api/api_connection.h b/esphome/components/api/api_connection.h index ee466c5d10..293da17fa4 100644 --- a/esphome/components/api/api_connection.h +++ b/esphome/components/api/api_connection.h @@ -150,6 +150,7 @@ class APIConnection : public APIServerConnection { void on_voice_assistant_response(const VoiceAssistantResponse &msg) override; void on_voice_assistant_event_response(const VoiceAssistantEventResponse &msg) override; void on_voice_assistant_audio(const VoiceAssistantAudio &msg) override; + void on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &msg) override; #endif #ifdef USE_ALARM_CONTROL_PANEL diff --git a/esphome/components/api/api_pb2.cpp b/esphome/components/api/api_pb2.cpp index a48087e348..9db6482c49 100644 --- a/esphome/components/api/api_pb2.cpp +++ b/esphome/components/api/api_pb2.cpp @@ -475,6 +475,22 @@ template<> const char *proto_enum_to_string(enums::V } #endif #ifdef HAS_PROTO_MESSAGE_DUMP +template<> const char *proto_enum_to_string(enums::VoiceAssistantTimerEvent value) { + switch (value) { + case enums::VOICE_ASSISTANT_TIMER_STARTED: + return "VOICE_ASSISTANT_TIMER_STARTED"; + case enums::VOICE_ASSISTANT_TIMER_UPDATED: + return "VOICE_ASSISTANT_TIMER_UPDATED"; + case enums::VOICE_ASSISTANT_TIMER_CANCELLED: + return "VOICE_ASSISTANT_TIMER_CANCELLED"; + case enums::VOICE_ASSISTANT_TIMER_FINISHED: + return "VOICE_ASSISTANT_TIMER_FINISHED"; + default: + return "UNKNOWN"; + } +} +#endif +#ifdef HAS_PROTO_MESSAGE_DUMP template<> const char *proto_enum_to_string(enums::AlarmControlPanelState value) { switch (value) { case enums::ALARM_STATE_DISARMED: @@ -6857,6 +6873,82 @@ void VoiceAssistantAudio::dump_to(std::string &out) const { out.append("}"); } #endif +bool VoiceAssistantTimerEventResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { + switch (field_id) { + case 1: { + this->event_type = value.as_enum(); + return true; + } + case 4: { + this->total_seconds = value.as_uint32(); + return true; + } + case 5: { + this->seconds_left = value.as_uint32(); + return true; + } + case 6: { + this->is_active = value.as_bool(); + return true; + } + default: + return false; + } +} +bool VoiceAssistantTimerEventResponse::decode_length(uint32_t field_id, ProtoLengthDelimited value) { + switch (field_id) { + case 2: { + this->timer_id = value.as_string(); + return true; + } + case 3: { + this->name = value.as_string(); + return true; + } + default: + return false; + } +} +void VoiceAssistantTimerEventResponse::encode(ProtoWriteBuffer buffer) const { + buffer.encode_enum(1, this->event_type); + buffer.encode_string(2, this->timer_id); + buffer.encode_string(3, this->name); + buffer.encode_uint32(4, this->total_seconds); + buffer.encode_uint32(5, this->seconds_left); + buffer.encode_bool(6, this->is_active); +} +#ifdef HAS_PROTO_MESSAGE_DUMP +void VoiceAssistantTimerEventResponse::dump_to(std::string &out) const { + __attribute__((unused)) char buffer[64]; + out.append("VoiceAssistantTimerEventResponse {\n"); + out.append(" event_type: "); + out.append(proto_enum_to_string(this->event_type)); + out.append("\n"); + + out.append(" timer_id: "); + out.append("'").append(this->timer_id).append("'"); + out.append("\n"); + + out.append(" name: "); + out.append("'").append(this->name).append("'"); + out.append("\n"); + + out.append(" total_seconds: "); + sprintf(buffer, "%" PRIu32, this->total_seconds); + out.append(buffer); + out.append("\n"); + + out.append(" seconds_left: "); + sprintf(buffer, "%" PRIu32, this->seconds_left); + out.append(buffer); + out.append("\n"); + + out.append(" is_active: "); + out.append(YESNO(this->is_active)); + out.append("\n"); + out.append("}"); +} +#endif bool ListEntitiesAlarmControlPanelResponse::decode_varint(uint32_t field_id, ProtoVarInt value) { switch (field_id) { case 6: { diff --git a/esphome/components/api/api_pb2.h b/esphome/components/api/api_pb2.h index 807b150d82..54cbd20559 100644 --- a/esphome/components/api/api_pb2.h +++ b/esphome/components/api/api_pb2.h @@ -191,6 +191,12 @@ enum VoiceAssistantEvent : uint32_t { VOICE_ASSISTANT_TTS_STREAM_START = 98, VOICE_ASSISTANT_TTS_STREAM_END = 99, }; +enum VoiceAssistantTimerEvent : uint32_t { + VOICE_ASSISTANT_TIMER_STARTED = 0, + VOICE_ASSISTANT_TIMER_UPDATED = 1, + VOICE_ASSISTANT_TIMER_CANCELLED = 2, + VOICE_ASSISTANT_TIMER_FINISHED = 3, +}; enum AlarmControlPanelState : uint32_t { ALARM_STATE_DISARMED = 0, ALARM_STATE_ARMED_HOME = 1, @@ -1775,6 +1781,23 @@ class VoiceAssistantAudio : public ProtoMessage { bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; bool decode_varint(uint32_t field_id, ProtoVarInt value) override; }; +class VoiceAssistantTimerEventResponse : public ProtoMessage { + public: + enums::VoiceAssistantTimerEvent event_type{}; + std::string timer_id{}; + std::string name{}; + uint32_t total_seconds{0}; + uint32_t seconds_left{0}; + bool is_active{false}; + void encode(ProtoWriteBuffer buffer) const override; +#ifdef HAS_PROTO_MESSAGE_DUMP + void dump_to(std::string &out) const override; +#endif + + protected: + bool decode_length(uint32_t field_id, ProtoLengthDelimited value) override; + bool decode_varint(uint32_t field_id, ProtoVarInt value) override; +}; class ListEntitiesAlarmControlPanelResponse : public ProtoMessage { public: std::string object_id{}; diff --git a/esphome/components/api/api_pb2_service.cpp b/esphome/components/api/api_pb2_service.cpp index 093fe917e0..7c95bb03ad 100644 --- a/esphome/components/api/api_pb2_service.cpp +++ b/esphome/components/api/api_pb2_service.cpp @@ -484,6 +484,8 @@ bool APIServerConnectionBase::send_voice_assistant_audio(const VoiceAssistantAud return this->send_message_(msg, 106); } #endif +#ifdef USE_VOICE_ASSISTANT +#endif #ifdef USE_ALARM_CONTROL_PANEL bool APIServerConnectionBase::send_list_entities_alarm_control_panel_response( const ListEntitiesAlarmControlPanelResponse &msg) { @@ -1093,6 +1095,17 @@ bool APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, ESP_LOGVV(TAG, "on_date_time_command_request: %s", msg.dump().c_str()); #endif this->on_date_time_command_request(msg); +#endif + break; + } + case 115: { +#ifdef USE_VOICE_ASSISTANT + VoiceAssistantTimerEventResponse msg; + msg.decode(msg_data, msg_size); +#ifdef HAS_PROTO_MESSAGE_DUMP + ESP_LOGVV(TAG, "on_voice_assistant_timer_event_response: %s", msg.dump().c_str()); +#endif + this->on_voice_assistant_timer_event_response(msg); #endif break; } diff --git a/esphome/components/api/api_pb2_service.h b/esphome/components/api/api_pb2_service.h index 196d904aca..2f8a2b3def 100644 --- a/esphome/components/api/api_pb2_service.h +++ b/esphome/components/api/api_pb2_service.h @@ -244,6 +244,9 @@ class APIServerConnectionBase : public ProtoService { bool send_voice_assistant_audio(const VoiceAssistantAudio &msg); virtual void on_voice_assistant_audio(const VoiceAssistantAudio &value){}; #endif +#ifdef USE_VOICE_ASSISTANT + virtual void on_voice_assistant_timer_event_response(const VoiceAssistantTimerEventResponse &value){}; +#endif #ifdef USE_ALARM_CONTROL_PANEL bool send_list_entities_alarm_control_panel_response(const ListEntitiesAlarmControlPanelResponse &msg); #endif diff --git a/esphome/components/voice_assistant/__init__.py b/esphome/components/voice_assistant/__init__.py index 3ba0c58ce4..c18f0a6850 100644 --- a/esphome/components/voice_assistant/__init__.py +++ b/esphome/components/voice_assistant/__init__.py @@ -44,6 +44,12 @@ CONF_VOLUME_MULTIPLIER = "volume_multiplier" CONF_WAKE_WORD = "wake_word" +CONF_ON_TIMER_STARTED = "on_timer_started" +CONF_ON_TIMER_UPDATED = "on_timer_updated" +CONF_ON_TIMER_CANCELLED = "on_timer_cancelled" +CONF_ON_TIMER_FINISHED = "on_timer_finished" +CONF_ON_TIMER_TICK = "on_timer_tick" + voice_assistant_ns = cg.esphome_ns.namespace("voice_assistant") VoiceAssistant = voice_assistant_ns.class_("VoiceAssistant", cg.Component) @@ -64,6 +70,8 @@ ConnectedCondition = voice_assistant_ns.class_( "ConnectedCondition", automation.Condition, cg.Parented.template(VoiceAssistant) ) +Timer = voice_assistant_ns.struct("Timer") + def tts_stream_validate(config): if CONF_SPEAKER not in config and ( @@ -131,6 +139,21 @@ CONFIG_SCHEMA = cv.All( single=True ), cv.Optional(CONF_ON_IDLE): automation.validate_automation(single=True), + cv.Optional(CONF_ON_TIMER_STARTED): automation.validate_automation( + single=True + ), + cv.Optional(CONF_ON_TIMER_UPDATED): automation.validate_automation( + single=True + ), + cv.Optional(CONF_ON_TIMER_CANCELLED): automation.validate_automation( + single=True + ), + cv.Optional(CONF_ON_TIMER_FINISHED): automation.validate_automation( + single=True + ), + cv.Optional(CONF_ON_TIMER_TICK): automation.validate_automation( + single=True + ), } ).extend(cv.COMPONENT_SCHEMA), tts_stream_validate, @@ -270,6 +293,49 @@ async def to_code(config): config[CONF_ON_IDLE], ) + has_timers = False + if on_timer_started := config.get(CONF_ON_TIMER_STARTED): + await automation.build_automation( + var.get_timer_started_trigger(), + [(Timer, "timer")], + on_timer_started, + ) + has_timers = True + + if on_timer_updated := config.get(CONF_ON_TIMER_UPDATED): + await automation.build_automation( + var.get_timer_updated_trigger(), + [(Timer, "timer")], + on_timer_updated, + ) + has_timers = True + + if on_timer_cancelled := config.get(CONF_ON_TIMER_CANCELLED): + await automation.build_automation( + var.get_timer_cancelled_trigger(), + [(Timer, "timer")], + on_timer_cancelled, + ) + has_timers = True + + if on_timer_finished := config.get(CONF_ON_TIMER_FINISHED): + await automation.build_automation( + var.get_timer_finished_trigger(), + [(Timer, "timer")], + on_timer_finished, + ) + has_timers = True + + if on_timer_tick := config.get(CONF_ON_TIMER_TICK): + await automation.build_automation( + var.get_timer_tick_trigger(), + [(cg.std_vector.template(Timer), "timers")], + on_timer_tick, + ) + has_timers = True + + cg.add(var.set_has_timers(has_timers)) + cg.add_define("USE_VOICE_ASSISTANT") diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 712a0ab137..0bd8194190 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -798,12 +798,65 @@ void VoiceAssistant::on_audio(const api::VoiceAssistantAudio &msg) { this->speaker_buffer_index_ += msg.data.length(); this->speaker_buffer_size_ += msg.data.length(); this->speaker_bytes_received_ += msg.data.length(); + ESP_LOGD(TAG, "Received audio: %d bytes from API", msg.data.length()); } else { ESP_LOGE(TAG, "Cannot receive audio, buffer is full"); } #endif } +void VoiceAssistant::on_timer_event(const api::VoiceAssistantTimerEventResponse &msg) { + Timer timer = { + .id = msg.timer_id, + .name = msg.name, + .total_seconds = msg.total_seconds, + .seconds_left = msg.seconds_left, + .is_active = msg.is_active, + }; + this->timers_[timer.id] = timer; + ESP_LOGD(TAG, "Timer Event"); + ESP_LOGD(TAG, " Type: %d", msg.event_type); + ESP_LOGD(TAG, " %s", timer.to_string().c_str()); + + switch (msg.event_type) { + case api::enums::VOICE_ASSISTANT_TIMER_STARTED: + this->timer_started_trigger_->trigger(timer); + break; + case api::enums::VOICE_ASSISTANT_TIMER_UPDATED: + this->timer_updated_trigger_->trigger(timer); + break; + case api::enums::VOICE_ASSISTANT_TIMER_CANCELLED: + this->timer_cancelled_trigger_->trigger(timer); + this->timers_.erase(timer.id); + break; + case api::enums::VOICE_ASSISTANT_TIMER_FINISHED: + this->timer_finished_trigger_->trigger(timer); + this->timers_.erase(timer.id); + break; + } + + if (this->timers_.empty()) { + this->cancel_interval("timer-event"); + this->timer_tick_running_ = false; + } else if (!this->timer_tick_running_) { + this->set_interval("timer-event", 1000, [this]() { this->timer_tick_(); }); + this->timer_tick_running_ = true; + } +} + +void VoiceAssistant::timer_tick_() { + std::vector res; + res.reserve(this->timers_.size()); + for (auto &pair : this->timers_) { + auto &timer = pair.second; + if (timer.is_active && timer.seconds_left > 0) { + timer.seconds_left--; + } + res.push_back(timer); + } + this->timer_tick_trigger_->trigger(res); +} + VoiceAssistant *global_voice_assistant = nullptr; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) } // namespace voice_assistant diff --git a/esphome/components/voice_assistant/voice_assistant.h b/esphome/components/voice_assistant/voice_assistant.h index 17141365d4..a160972e22 100644 --- a/esphome/components/voice_assistant/voice_assistant.h +++ b/esphome/components/voice_assistant/voice_assistant.h @@ -24,6 +24,9 @@ #include #endif +#include +#include + namespace esphome { namespace voice_assistant { @@ -36,6 +39,7 @@ enum VoiceAssistantFeature : uint32_t { FEATURE_VOICE_ASSISTANT = 1 << 0, FEATURE_SPEAKER = 1 << 1, FEATURE_API_AUDIO = 1 << 2, + FEATURE_TIMERS = 1 << 3, }; enum class State { @@ -59,6 +63,20 @@ enum AudioMode : uint8_t { AUDIO_MODE_API, }; +struct Timer { + std::string id; + std::string name; + uint32_t total_seconds; + uint32_t seconds_left; + bool is_active; + + std::string to_string() const { + return str_sprintf("Timer(id=%s, name=%s, total_seconds=%" PRIu32 ", seconds_left=%" PRIu32 ", is_active=%s)", + this->id.c_str(), this->name.c_str(), this->total_seconds, this->seconds_left, + YESNO(this->is_active)); + } +}; + class VoiceAssistant : public Component { public: void setup() override; @@ -100,6 +118,11 @@ class VoiceAssistant : public Component { flags |= VoiceAssistantFeature::FEATURE_SPEAKER; } #endif + + if (this->has_timers_) { + flags |= VoiceAssistantFeature::FEATURE_TIMERS; + } + return flags; } @@ -108,6 +131,7 @@ class VoiceAssistant : public Component { void on_event(const api::VoiceAssistantEventResponse &msg); void on_audio(const api::VoiceAssistantAudio &msg); + void on_timer_event(const api::VoiceAssistantTimerEventResponse &msg); bool is_running() const { return this->state_ != State::IDLE; } void set_continuous(bool continuous) { this->continuous_ = continuous; } @@ -150,6 +174,14 @@ class VoiceAssistant : public Component { void set_wake_word(const std::string &wake_word) { this->wake_word_ = wake_word; } + Trigger *get_timer_started_trigger() const { return this->timer_started_trigger_; } + Trigger *get_timer_updated_trigger() const { return this->timer_updated_trigger_; } + Trigger *get_timer_cancelled_trigger() const { return this->timer_cancelled_trigger_; } + Trigger *get_timer_finished_trigger() const { return this->timer_finished_trigger_; } + Trigger> *get_timer_tick_trigger() const { return this->timer_tick_trigger_; } + void set_has_timers(bool has_timers) { this->has_timers_ = has_timers; } + const std::unordered_map &get_timers() const { return this->timers_; } + protected: bool allocate_buffers_(); void clear_buffers_(); @@ -186,6 +218,16 @@ class VoiceAssistant : public Component { api::APIConnection *api_client_{nullptr}; + std::unordered_map timers_; + void timer_tick_(); + Trigger *timer_started_trigger_ = new Trigger(); + Trigger *timer_finished_trigger_ = new Trigger(); + Trigger *timer_updated_trigger_ = new Trigger(); + Trigger *timer_cancelled_trigger_ = new Trigger(); + Trigger> *timer_tick_trigger_ = new Trigger>(); + bool has_timers_{false}; + bool timer_tick_running_{false}; + microphone::Microphone *mic_{nullptr}; #ifdef USE_SPEAKER void write_speaker_(); From a7fc1a62981cf6ae51c2f44d71185c3d89071927 Mon Sep 17 00:00:00 2001 From: RFDarter Date: Thu, 30 May 2024 03:54:20 +0200 Subject: [PATCH 275/313] [web_server] add entity sorting for v3 (#6445) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../alarm_control_panel/__init__.py | 7 + esphome/components/binary_sensor/__init__.py | 127 ++++++----- esphome/components/button/__init__.py | 31 ++- esphome/components/climate/__init__.py | 185 ++++++++-------- esphome/components/cover/__init__.py | 67 +++--- esphome/components/datetime/__init__.py | 30 ++- esphome/components/fan/__init__.py | 137 ++++++------ esphome/components/light/__init__.py | 59 ++--- esphome/components/lock/__init__.py | 39 ++-- esphome/components/number/__init__.py | 50 +++-- esphome/components/select/__init__.py | 31 ++- esphome/components/sensor/__init__.py | 87 ++++---- esphome/components/switch/__init__.py | 43 ++-- esphome/components/text/__init__.py | 33 +-- esphome/components/text_sensor/__init__.py | 51 +++-- esphome/components/valve/__init__.py | 55 +++-- esphome/components/web_server/__init__.py | 58 +++++ esphome/components/web_server/web_server.cpp | 204 ++++++++++++------ esphome/components/web_server/web_server.h | 9 + esphome/const.py | 2 + 20 files changed, 802 insertions(+), 503 deletions(-) diff --git a/esphome/components/alarm_control_panel/__init__.py b/esphome/components/alarm_control_panel/__init__.py index 35d239c267..7ad4358011 100644 --- a/esphome/components/alarm_control_panel/__init__.py +++ b/esphome/components/alarm_control_panel/__init__.py @@ -1,5 +1,6 @@ import esphome.codegen as cg import esphome.config_validation as cv +from esphome.components import web_server from esphome import automation from esphome.automation import maybe_simple_id from esphome.core import CORE, coroutine_with_priority @@ -8,6 +9,7 @@ from esphome.const import ( CONF_ON_STATE, CONF_TRIGGER_ID, CONF_CODE, + CONF_WEB_SERVER_ID, ) from esphome.cpp_helpers import setup_entity @@ -76,6 +78,8 @@ AlarmControlPanelCondition = alarm_control_panel_ns.class_( ) ALARM_CONTROL_PANEL_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( + web_server.WEBSERVER_SORTING_SCHEMA +).extend( { cv.GenerateID(): cv.declare_id(AlarmControlPanel), cv.Optional(CONF_ON_STATE): automation.validate_automation( @@ -185,6 +189,9 @@ async def setup_alarm_control_panel_core_(var, config): for conf in config.get(CONF_ON_READY, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) async def register_alarm_control_panel(var, config): diff --git a/esphome/components/binary_sensor/__init__.py b/esphome/components/binary_sensor/__init__.py index 2f788d7103..11a1887206 100644 --- a/esphome/components/binary_sensor/__init__.py +++ b/esphome/components/binary_sensor/__init__.py @@ -4,7 +4,7 @@ from esphome.cpp_generator import MockObjClass from esphome.cpp_helpers import setup_entity from esphome import automation, core from esphome.automation import Condition, maybe_simple_id -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DELAY, CONF_DEVICE_CLASS, @@ -27,6 +27,7 @@ from esphome.const import ( CONF_TIMING, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_CARBON_MONOXIDE, @@ -385,70 +386,76 @@ def validate_click_timing(value): return value -BINARY_SENSOR_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(BinarySensor), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id( - mqtt.MQTTBinarySensorComponent - ), - cv.Optional(CONF_PUBLISH_INITIAL_STATE): cv.boolean, - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - cv.Optional(CONF_FILTERS): validate_filters, - cv.Optional(CONF_ON_PRESS): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PressTrigger), - } - ), - cv.Optional(CONF_ON_RELEASE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ReleaseTrigger), - } - ), - cv.Optional(CONF_ON_CLICK): cv.All( - automation.validate_automation( +BINARY_SENSOR_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(BinarySensor), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id( + mqtt.MQTTBinarySensorComponent + ), + cv.Optional(CONF_PUBLISH_INITIAL_STATE): cv.boolean, + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + cv.Optional(CONF_FILTERS): validate_filters, + cv.Optional(CONF_ON_PRESS): automation.validate_automation( { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ClickTrigger), - cv.Optional( - CONF_MIN_LENGTH, default="50ms" - ): cv.positive_time_period_milliseconds, - cv.Optional( - CONF_MAX_LENGTH, default="350ms" - ): cv.positive_time_period_milliseconds, + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(PressTrigger), } ), - validate_click_timing, - ), - cv.Optional(CONF_ON_DOUBLE_CLICK): cv.All( - automation.validate_automation( + cv.Optional(CONF_ON_RELEASE): automation.validate_automation( { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(DoubleClickTrigger), - cv.Optional( - CONF_MIN_LENGTH, default="50ms" - ): cv.positive_time_period_milliseconds, - cv.Optional( - CONF_MAX_LENGTH, default="350ms" - ): cv.positive_time_period_milliseconds, + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ReleaseTrigger), } ), - validate_click_timing, - ), - cv.Optional(CONF_ON_MULTI_CLICK): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(MultiClickTrigger), - cv.Required(CONF_TIMING): cv.All( - [parse_multi_click_timing_str], validate_multi_click_timing + cv.Optional(CONF_ON_CLICK): cv.All( + automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ClickTrigger), + cv.Optional( + CONF_MIN_LENGTH, default="50ms" + ): cv.positive_time_period_milliseconds, + cv.Optional( + CONF_MAX_LENGTH, default="350ms" + ): cv.positive_time_period_milliseconds, + } ), - cv.Optional( - CONF_INVALID_COOLDOWN, default="1s" - ): cv.positive_time_period_milliseconds, - } - ), - cv.Optional(CONF_ON_STATE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger), - } - ), - } + validate_click_timing, + ), + cv.Optional(CONF_ON_DOUBLE_CLICK): cv.All( + automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + DoubleClickTrigger + ), + cv.Optional( + CONF_MIN_LENGTH, default="50ms" + ): cv.positive_time_period_milliseconds, + cv.Optional( + CONF_MAX_LENGTH, default="350ms" + ): cv.positive_time_period_milliseconds, + } + ), + validate_click_timing, + ), + cv.Optional(CONF_ON_MULTI_CLICK): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(MultiClickTrigger), + cv.Required(CONF_TIMING): cv.All( + [parse_multi_click_timing_str], validate_multi_click_timing + ), + cv.Optional( + CONF_INVALID_COOLDOWN, default="1s" + ): cv.positive_time_period_milliseconds, + } + ), + cv.Optional(CONF_ON_STATE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger), + } + ), + } + ) ) _UNDEF = object() @@ -536,6 +543,10 @@ async def setup_binary_sensor_core_(var, config): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_binary_sensor(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/button/__init__.py b/esphome/components/button/__init__.py index 5dcbf7ad01..773ab9d37f 100644 --- a/esphome/components/button/__init__.py +++ b/esphome/components/button/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DEVICE_CLASS, CONF_ENTITY_CATEGORY, @@ -11,6 +11,7 @@ from esphome.const import ( CONF_ON_PRESS, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, DEVICE_CLASS_EMPTY, DEVICE_CLASS_IDENTIFY, DEVICE_CLASS_RESTART, @@ -43,16 +44,20 @@ ButtonPressTrigger = button_ns.class_( validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_") -BUTTON_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTButtonComponent), - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - cv.Optional(CONF_ON_PRESS): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ButtonPressTrigger), - } - ), - } +BUTTON_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTButtonComponent), + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + cv.Optional(CONF_ON_PRESS): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ButtonPressTrigger), + } + ), + } + ) ) _UNDEF = object() @@ -92,6 +97,10 @@ async def setup_button_core_(var, config): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_button(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/climate/__init__.py b/esphome/components/climate/__init__.py index 7b0a27feae..ccd7a3da4e 100644 --- a/esphome/components/climate/__init__.py +++ b/esphome/components/climate/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.cpp_helpers import setup_entity from esphome import automation -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ACTION_STATE_TOPIC, CONF_AWAY, @@ -44,6 +44,7 @@ from esphome.const import ( CONF_TRIGGER_ID, CONF_VISUAL, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, ) from esphome.core import CORE, coroutine_with_priority @@ -150,93 +151,97 @@ VISUAL_TEMPERATURE_STEP_SCHEMA = cv.Any( ), ) -CLIMATE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(Climate), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTClimateComponent), - cv.Optional(CONF_VISUAL, default={}): cv.Schema( - { - cv.Optional(CONF_MIN_TEMPERATURE): cv.temperature, - cv.Optional(CONF_MAX_TEMPERATURE): cv.temperature, - cv.Optional(CONF_TEMPERATURE_STEP): VISUAL_TEMPERATURE_STEP_SCHEMA, - cv.Optional(CONF_MIN_HUMIDITY): cv.percentage_int, - cv.Optional(CONF_MAX_HUMIDITY): cv.percentage_int, - } - ), - cv.Optional(CONF_ACTION_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_AWAY_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_AWAY_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_CURRENT_TEMPERATURE_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_CURRENT_HUMIDITY_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_FAN_MODE_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_FAN_MODE_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_MODE_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_MODE_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_PRESET_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_PRESET_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_SWING_MODE_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_SWING_MODE_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_HUMIDITY_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_TARGET_HUMIDITY_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_ON_CONTROL): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ControlTrigger), - } - ), - cv.Optional(CONF_ON_STATE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger), - } - ), - } +CLIMATE_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(Climate), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTClimateComponent), + cv.Optional(CONF_VISUAL, default={}): cv.Schema( + { + cv.Optional(CONF_MIN_TEMPERATURE): cv.temperature, + cv.Optional(CONF_MAX_TEMPERATURE): cv.temperature, + cv.Optional(CONF_TEMPERATURE_STEP): VISUAL_TEMPERATURE_STEP_SCHEMA, + cv.Optional(CONF_MIN_HUMIDITY): cv.percentage_int, + cv.Optional(CONF_MAX_HUMIDITY): cv.percentage_int, + } + ), + cv.Optional(CONF_ACTION_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_AWAY_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_AWAY_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_CURRENT_TEMPERATURE_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_CURRENT_HUMIDITY_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_FAN_MODE_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_FAN_MODE_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_MODE_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_MODE_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_PRESET_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_PRESET_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_SWING_MODE_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_SWING_MODE_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_HIGH_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_LOW_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_TEMPERATURE_LOW_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_HUMIDITY_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_TARGET_HUMIDITY_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_ON_CONTROL): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ControlTrigger), + } + ), + cv.Optional(CONF_ON_STATE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(StateTrigger), + } + ), + } + ) ) @@ -403,6 +408,10 @@ async def setup_climate_core_(var, config): trigger, [(ClimateCall.operator("ref"), "x")], conf ) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_climate(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/cover/__init__.py b/esphome/components/cover/__init__.py index 8e0371017d..313b2c5928 100644 --- a/esphome/components/cover/__init__.py +++ b/esphome/components/cover/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id, Condition -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ID, CONF_DEVICE_CLASS, @@ -16,6 +16,7 @@ from esphome.const import ( CONF_TILT_STATE_TOPIC, CONF_STOP, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_TRIGGER_ID, DEVICE_CLASS_AWNING, DEVICE_CLASS_BLIND, @@ -88,34 +89,38 @@ CoverClosedTrigger = cover_ns.class_( CONF_ON_CLOSED = "on_closed" -COVER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(Cover), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTCoverComponent), - cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), - cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_TILT_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_TILT_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_ON_OPEN): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverOpenTrigger), - } - ), - cv.Optional(CONF_ON_CLOSED): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverClosedTrigger), - } - ), - } +COVER_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(Cover), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTCoverComponent), + cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), + cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_TILT_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_TILT_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_ON_OPEN): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverOpenTrigger), + } + ), + cv.Optional(CONF_ON_CLOSED): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(CoverClosedTrigger), + } + ), + } + ) ) @@ -132,6 +137,10 @@ async def setup_cover_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) diff --git a/esphome/components/datetime/__init__.py b/esphome/components/datetime/__init__.py index 262f1e2315..c118216a2d 100644 --- a/esphome/components/datetime/__init__.py +++ b/esphome/components/datetime/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.components import mqtt, time +from esphome.components import mqtt, web_server, time from esphome.const import ( CONF_ID, CONF_ON_TIME, @@ -11,6 +11,7 @@ from esphome.const import ( CONF_TRIGGER_ID, CONF_TYPE, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_DATE, CONF_DATETIME, CONF_TIME, @@ -63,16 +64,20 @@ DATETIME_MODES = [ ] -_DATETIME_SCHEMA = cv.Schema( - { - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(DateTimeStateTrigger), - } - ), - cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock), - } -).extend(cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)) +_DATETIME_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(DateTimeStateTrigger), + } + ), + cv.GenerateID(CONF_TIME_ID): cv.use_id(time.RealTimeClock), + } + ) +) def date_schema(class_: MockObjClass) -> cv.Schema: @@ -128,6 +133,9 @@ async def setup_datetime_core_(var, config): if (mqtt_id := config.get(CONF_MQTT_ID)) is not None: mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) for conf in config.get(CONF_ON_VALUE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(cg.ESPTime, "x")], conf) diff --git a/esphome/components/fan/__init__.py b/esphome/components/fan/__init__.py index 14cf6cc9c9..847a59baa1 100644 --- a/esphome/components/fan/__init__.py +++ b/esphome/components/fan/__init__.py @@ -2,10 +2,11 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_OSCILLATING, CONF_OSCILLATION_COMMAND_TOPIC, CONF_OSCILLATION_STATE_TOPIC, @@ -79,67 +80,75 @@ FanPresetSetTrigger = fan_ns.class_( FanIsOnCondition = fan_ns.class_("FanIsOnCondition", automation.Condition.template()) FanIsOffCondition = fan_ns.class_("FanIsOffCondition", automation.Condition.template()) -FAN_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(Fan), - cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum( - RESTORE_MODES, upper=True, space="_" - ), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTFanComponent), - cv.Optional(CONF_OSCILLATION_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_OSCILLATION_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_SPEED_LEVEL_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_SPEED_LEVEL_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_SPEED_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.publish_topic - ), - cv.Optional(CONF_SPEED_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_ON_STATE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanStateTrigger), - } - ), - cv.Optional(CONF_ON_TURN_ON): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanTurnOnTrigger), - } - ), - cv.Optional(CONF_ON_TURN_OFF): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanTurnOffTrigger), - } - ), - cv.Optional(CONF_ON_DIRECTION_SET): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanDirectionSetTrigger), - } - ), - cv.Optional(CONF_ON_OSCILLATING_SET): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanOscillatingSetTrigger), - } - ), - cv.Optional(CONF_ON_SPEED_SET): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanSpeedSetTrigger), - } - ), - cv.Optional(CONF_ON_PRESET_SET): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanPresetSetTrigger), - } - ), - } +FAN_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(Fan), + cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum( + RESTORE_MODES, upper=True, space="_" + ), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTFanComponent), + cv.Optional(CONF_OSCILLATION_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_OSCILLATION_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_SPEED_LEVEL_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_SPEED_LEVEL_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_SPEED_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.publish_topic + ), + cv.Optional(CONF_SPEED_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_ON_STATE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanStateTrigger), + } + ), + cv.Optional(CONF_ON_TURN_ON): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanTurnOnTrigger), + } + ), + cv.Optional(CONF_ON_TURN_OFF): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanTurnOffTrigger), + } + ), + cv.Optional(CONF_ON_DIRECTION_SET): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + FanDirectionSetTrigger + ), + } + ), + cv.Optional(CONF_ON_OSCILLATING_SET): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + FanOscillatingSetTrigger + ), + } + ), + cv.Optional(CONF_ON_SPEED_SET): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanSpeedSetTrigger), + } + ), + cv.Optional(CONF_ON_PRESET_SET): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FanPresetSetTrigger), + } + ), + } + ) ) _PRESET_MODES_SCHEMA = cv.All( @@ -209,6 +218,10 @@ async def setup_fan_core_(var, config): if (speed_command_topic := config.get(CONF_SPEED_COMMAND_TOPIC)) is not None: cg.add(mqtt_.set_custom_speed_command_topic(speed_command_topic)) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + for conf in config.get(CONF_ON_STATE, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [(Fan.operator("ptr"), "x")], conf) diff --git a/esphome/components/light/__init__.py b/esphome/components/light/__init__.py index fdc4676758..161b4d8cd9 100644 --- a/esphome/components/light/__init__.py +++ b/esphome/components/light/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv import esphome.automation as auto -from esphome.components import mqtt, power_supply +from esphome.components import mqtt, power_supply, web_server from esphome.const import ( CONF_COLOR_CORRECT, CONF_DEFAULT_TRANSITION_LENGTH, @@ -10,6 +10,7 @@ from esphome.const import ( CONF_GAMMA_CORRECT, CONF_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_POWER_SUPPLY, CONF_RESTORE_MODE, CONF_ON_TURN_OFF, @@ -56,29 +57,35 @@ RESTORE_MODES = { "RESTORE_AND_ON": LightRestoreMode.LIGHT_RESTORE_AND_ON, } -LIGHT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(LightState), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTJSONLightComponent), - cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum( - RESTORE_MODES, upper=True, space="_" - ), - cv.Optional(CONF_ON_TURN_ON): auto.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOnTrigger), - } - ), - cv.Optional(CONF_ON_TURN_OFF): auto.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOffTrigger), - } - ), - cv.Optional(CONF_ON_STATE): auto.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightStateTrigger), - } - ), - } +LIGHT_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(LightState), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id( + mqtt.MQTTJSONLightComponent + ), + cv.Optional(CONF_RESTORE_MODE, default="ALWAYS_OFF"): cv.enum( + RESTORE_MODES, upper=True, space="_" + ), + cv.Optional(CONF_ON_TURN_ON): auto.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOnTrigger), + } + ), + cv.Optional(CONF_ON_TURN_OFF): auto.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightTurnOffTrigger), + } + ), + cv.Optional(CONF_ON_STATE): auto.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LightStateTrigger), + } + ), + } + ) ) BINARY_LIGHT_SCHEMA = LIGHT_SCHEMA.extend( @@ -173,6 +180,10 @@ async def setup_light_core_(light_var, output_var, config): mqtt_ = cg.new_Pvariable(mqtt_id, light_var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, light_var, config) + async def register_light(output_var, config): light_var = cg.new_Pvariable(config[CONF_ID], output_var) diff --git a/esphome/components/lock/__init__.py b/esphome/components/lock/__init__.py index 457ffa278a..c2d6054ed9 100644 --- a/esphome/components/lock/__init__.py +++ b/esphome/components/lock/__init__.py @@ -2,13 +2,14 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import Condition, maybe_simple_id -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ID, CONF_ON_LOCK, CONF_ON_UNLOCK, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, ) from esphome.core import CORE, coroutine_with_priority from esphome.cpp_helpers import setup_entity @@ -30,20 +31,24 @@ LockCondition = lock_ns.class_("LockCondition", Condition) LockLockTrigger = lock_ns.class_("LockLockTrigger", automation.Trigger.template()) LockUnlockTrigger = lock_ns.class_("LockUnlockTrigger", automation.Trigger.template()) -LOCK_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTLockComponent), - cv.Optional(CONF_ON_LOCK): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LockLockTrigger), - } - ), - cv.Optional(CONF_ON_UNLOCK): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LockUnlockTrigger), - } - ), - } +LOCK_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTLockComponent), + cv.Optional(CONF_ON_LOCK): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LockLockTrigger), + } + ), + cv.Optional(CONF_ON_UNLOCK): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LockUnlockTrigger), + } + ), + } + ) ) @@ -61,6 +66,10 @@ async def setup_lock_core_(var, config): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_lock(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/number/__init__.py b/esphome/components/number/__init__.py index 8c3b15d22d..303535c138 100644 --- a/esphome/components/number/__init__.py +++ b/esphome/components/number/__init__.py @@ -2,6 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.components import mqtt +from esphome.components import web_server from esphome.const import ( CONF_ABOVE, CONF_BELOW, @@ -18,6 +19,7 @@ from esphome.const import ( CONF_VALUE, CONF_OPERATION, CONF_CYCLE, + CONF_WEB_SERVER_ID, DEVICE_CLASS_APPARENT_POWER, DEVICE_CLASS_AQI, DEVICE_CLASS_ATMOSPHERIC_PRESSURE, @@ -167,26 +169,30 @@ NUMBER_OPERATION_OPTIONS = { validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_") validate_unit_of_measurement = cv.string_strict -NUMBER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTNumberComponent), - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(NumberStateTrigger), - } - ), - cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValueRangeTrigger), - cv.Optional(CONF_ABOVE): cv.templatable(cv.float_), - cv.Optional(CONF_BELOW): cv.templatable(cv.float_), - }, - cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW), - ), - cv.Optional(CONF_UNIT_OF_MEASUREMENT): validate_unit_of_measurement, - cv.Optional(CONF_MODE, default="AUTO"): cv.enum(NUMBER_MODES, upper=True), - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - } +NUMBER_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTNumberComponent), + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(NumberStateTrigger), + } + ), + cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValueRangeTrigger), + cv.Optional(CONF_ABOVE): cv.templatable(cv.float_), + cv.Optional(CONF_BELOW): cv.templatable(cv.float_), + }, + cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW), + ), + cv.Optional(CONF_UNIT_OF_MEASUREMENT): validate_unit_of_measurement, + cv.Optional(CONF_MODE, default="AUTO"): cv.enum(NUMBER_MODES, upper=True), + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + } + ) ) _UNDEF = object() @@ -248,6 +254,10 @@ async def setup_number_core_( mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_number( var, config, *, min_value: float, max_value: float, step: float diff --git a/esphome/components/select/__init__.py b/esphome/components/select/__init__.py index 1d234d5617..073fbef1d4 100644 --- a/esphome/components/select/__init__.py +++ b/esphome/components/select/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ENTITY_CATEGORY, CONF_ICON, @@ -10,6 +10,7 @@ from esphome.const import ( CONF_OPTION, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_CYCLE, CONF_MODE, CONF_OPERATION, @@ -47,16 +48,20 @@ SELECT_OPERATION_OPTIONS = { } -SELECT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSelectComponent), - cv.GenerateID(): cv.declare_id(Select), - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SelectStateTrigger), - } - ), - } +SELECT_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSelectComponent), + cv.GenerateID(): cv.declare_id(Select), + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SelectStateTrigger), + } + ), + } + ) ) _UNDEF = object() @@ -99,6 +104,10 @@ async def setup_select_core_(var, config, *, options: list[str]): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_select(var, config, *, options: list[str]): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py index ef5c4cc645..6077f5dc1f 100644 --- a/esphome/components/sensor/__init__.py +++ b/esphome/components/sensor/__init__.py @@ -3,7 +3,7 @@ import math import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DEVICE_CLASS, CONF_ABOVE, @@ -31,6 +31,7 @@ from esphome.const import ( CONF_UNIT_OF_MEASUREMENT, CONF_WINDOW_SIZE, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_FORCE_UPDATE, CONF_VALUE, CONF_MIN_VALUE, @@ -252,43 +253,49 @@ validate_accuracy_decimals = cv.int_ validate_icon = cv.icon validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_") -SENSOR_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSensorComponent), - cv.GenerateID(): cv.declare_id(Sensor), - cv.Optional(CONF_UNIT_OF_MEASUREMENT): validate_unit_of_measurement, - cv.Optional(CONF_ACCURACY_DECIMALS): validate_accuracy_decimals, - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - cv.Optional(CONF_STATE_CLASS): validate_state_class, - cv.Optional(CONF_ENTITY_CATEGORY): sensor_entity_category, - cv.Optional("last_reset_type"): cv.invalid( - "last_reset_type has been removed since 2021.9.0. state_class: total_increasing should be used for total values." - ), - cv.Optional(CONF_FORCE_UPDATE, default=False): cv.boolean, - cv.Optional(CONF_EXPIRE_AFTER): cv.All( - cv.requires_component("mqtt"), - cv.Any(None, cv.positive_time_period_milliseconds), - ), - cv.Optional(CONF_FILTERS): validate_filters, - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorStateTrigger), - } - ), - cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorRawStateTrigger), - } - ), - cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValueRangeTrigger), - cv.Optional(CONF_ABOVE): cv.templatable(cv.float_), - cv.Optional(CONF_BELOW): cv.templatable(cv.float_), - }, - cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW), - ), - } +SENSOR_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSensorComponent), + cv.GenerateID(): cv.declare_id(Sensor), + cv.Optional(CONF_UNIT_OF_MEASUREMENT): validate_unit_of_measurement, + cv.Optional(CONF_ACCURACY_DECIMALS): validate_accuracy_decimals, + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + cv.Optional(CONF_STATE_CLASS): validate_state_class, + cv.Optional(CONF_ENTITY_CATEGORY): sensor_entity_category, + cv.Optional("last_reset_type"): cv.invalid( + "last_reset_type has been removed since 2021.9.0. state_class: total_increasing should be used for total values." + ), + cv.Optional(CONF_FORCE_UPDATE, default=False): cv.boolean, + cv.Optional(CONF_EXPIRE_AFTER): cv.All( + cv.requires_component("mqtt"), + cv.Any(None, cv.positive_time_period_milliseconds), + ), + cv.Optional(CONF_FILTERS): validate_filters, + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SensorStateTrigger), + } + ), + cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + SensorRawStateTrigger + ), + } + ), + cv.Optional(CONF_ON_VALUE_RANGE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValueRangeTrigger), + cv.Optional(CONF_ABOVE): cv.templatable(cv.float_), + cv.Optional(CONF_BELOW): cv.templatable(cv.float_), + }, + cv.has_at_least_one_key(CONF_ABOVE, CONF_BELOW), + ), + } + ) ) _UNDEF = object() @@ -772,6 +779,10 @@ async def setup_sensor_core_(var, config): else: cg.add(mqtt_.set_expire_after(expire_after)) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_sensor(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/switch/__init__.py b/esphome/components/switch/__init__.py index e997ec7ca5..3539d0e34e 100644 --- a/esphome/components/switch/__init__.py +++ b/esphome/components/switch/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import Condition, maybe_simple_id -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DEVICE_CLASS, CONF_ENTITY_CATEGORY, @@ -10,6 +10,7 @@ from esphome.const import ( CONF_ID, CONF_INVERTED, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_ON_TURN_OFF, CONF_ON_TURN_ON, CONF_RESTORE_MODE, @@ -64,22 +65,26 @@ SwitchTurnOffTrigger = switch_ns.class_( validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True) -_SWITCH_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSwitchComponent), - cv.Optional(CONF_INVERTED): cv.boolean, - cv.Optional(CONF_ON_TURN_ON): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOnTrigger), - } - ), - cv.Optional(CONF_ON_TURN_OFF): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOffTrigger), - } - ), - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - } +_SWITCH_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTSwitchComponent), + cv.Optional(CONF_INVERTED): cv.boolean, + cv.Optional(CONF_ON_TURN_ON): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOnTrigger), + } + ), + cv.Optional(CONF_ON_TURN_OFF): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SwitchTurnOffTrigger), + } + ), + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + } + ) ) _UNDEF = object() @@ -151,6 +156,10 @@ async def setup_switch_core_(var, config): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + if (device_class := config.get(CONF_DEVICE_CLASS)) is not None: cg.add(var.set_device_class(device_class)) diff --git a/esphome/components/text/__init__.py b/esphome/components/text/__init__.py index 4ca055a730..5a8e763495 100644 --- a/esphome/components/text/__init__.py +++ b/esphome/components/text/__init__.py @@ -2,13 +2,14 @@ from typing import Optional import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_ID, CONF_MODE, CONF_ON_VALUE, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_VALUE, ) @@ -38,17 +39,21 @@ TEXT_MODES = { "PASSWORD": TextMode.TEXT_MODE_PASSWORD, # to be implemented for keys, passwords, etc. } -TEXT_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTextComponent), - cv.GenerateID(): cv.declare_id(Text), - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(TextStateTrigger), - } - ), - cv.Required(CONF_MODE): cv.enum(TEXT_MODES, upper=True), - } +TEXT_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTextComponent), + cv.GenerateID(): cv.declare_id(Text), + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(TextStateTrigger), + } + ), + cv.Required(CONF_MODE): cv.enum(TEXT_MODES, upper=True), + } + ) ) @@ -77,6 +82,10 @@ async def setup_text_core_( mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_text( var, diff --git a/esphome/components/text_sensor/__init__.py b/esphome/components/text_sensor/__init__.py index 6c28b57b3d..f4e795924c 100644 --- a/esphome/components/text_sensor/__init__.py +++ b/esphome/components/text_sensor/__init__.py @@ -1,7 +1,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DEVICE_CLASS, CONF_ENTITY_CATEGORY, @@ -12,6 +12,7 @@ from esphome.const import ( CONF_ON_RAW_VALUE, CONF_TRIGGER_ID, CONF_MQTT_ID, + CONF_WEB_SERVER_ID, CONF_STATE, CONF_FROM, CONF_TO, @@ -124,25 +125,31 @@ async def map_filter_to_code(config, filter_id): validate_device_class = cv.one_of(*DEVICE_CLASSES, lower=True, space="_") -TEXT_SENSOR_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMPONENT_SCHEMA).extend( - { - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTextSensor), - cv.GenerateID(): cv.declare_id(TextSensor), - cv.Optional(CONF_DEVICE_CLASS): validate_device_class, - cv.Optional(CONF_FILTERS): validate_filters, - cv.Optional(CONF_ON_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(TextSensorStateTrigger), - } - ), - cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( - TextSensorStateRawTrigger - ), - } - ), - } +TEXT_SENSOR_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMPONENT_SCHEMA) + .extend( + { + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTTextSensor), + cv.GenerateID(): cv.declare_id(TextSensor), + cv.Optional(CONF_DEVICE_CLASS): validate_device_class, + cv.Optional(CONF_FILTERS): validate_filters, + cv.Optional(CONF_ON_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + TextSensorStateTrigger + ), + } + ), + cv.Optional(CONF_ON_RAW_VALUE): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id( + TextSensorStateRawTrigger + ), + } + ), + } + ) ) _UNDEF = object() @@ -205,6 +212,10 @@ async def setup_text_sensor_core_(var, config): mqtt_ = cg.new_Pvariable(mqtt_id, var) await mqtt.register_mqtt_component(mqtt_, config) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_text_sensor(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/valve/__init__.py b/esphome/components/valve/__init__.py index ea6bfc6055..c03d13fec8 100644 --- a/esphome/components/valve/__init__.py +++ b/esphome/components/valve/__init__.py @@ -2,7 +2,7 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.automation import maybe_simple_id, Condition -from esphome.components import mqtt +from esphome.components import mqtt, web_server from esphome.const import ( CONF_DEVICE_CLASS, CONF_ID, @@ -14,6 +14,7 @@ from esphome.const import ( CONF_STATE, CONF_STOP, CONF_TRIGGER_ID, + CONF_WEB_SERVER_ID, DEVICE_CLASS_EMPTY, DEVICE_CLASS_GAS, DEVICE_CLASS_WATER, @@ -70,28 +71,32 @@ ValveClosedTrigger = valve_ns.class_( CONF_ON_CLOSED = "on_closed" -VALVE_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA).extend( - { - cv.GenerateID(): cv.declare_id(Valve), - cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTValveComponent), - cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), - cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All( - cv.requires_component("mqtt"), cv.subscribe_topic - ), - cv.Optional(CONF_ON_OPEN): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveOpenTrigger), - } - ), - cv.Optional(CONF_ON_CLOSED): automation.validate_automation( - { - cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveClosedTrigger), - } - ), - } +VALVE_SCHEMA = ( + cv.ENTITY_BASE_SCHEMA.extend(web_server.WEBSERVER_SORTING_SCHEMA) + .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA) + .extend( + { + cv.GenerateID(): cv.declare_id(Valve), + cv.OnlyWith(CONF_MQTT_ID, "mqtt"): cv.declare_id(mqtt.MQTTValveComponent), + cv.Optional(CONF_DEVICE_CLASS): cv.one_of(*DEVICE_CLASSES, lower=True), + cv.Optional(CONF_POSITION_COMMAND_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_POSITION_STATE_TOPIC): cv.All( + cv.requires_component("mqtt"), cv.subscribe_topic + ), + cv.Optional(CONF_ON_OPEN): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveOpenTrigger), + } + ), + cv.Optional(CONF_ON_CLOSED): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ValveClosedTrigger), + } + ), + } + ) ) @@ -119,6 +124,10 @@ async def setup_valve_core_(var, config): mqtt_.set_custom_position_command_topic(position_command_topic_config) ) + if (webserver_id := config.get(CONF_WEB_SERVER_ID)) is not None: + web_server_ = await cg.get_variable(webserver_id) + web_server.add_entity_to_sorting_list(web_server_, var, config) + async def register_valve(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/web_server/__init__.py b/esphome/components/web_server/__init__.py index fa614fb5a6..232ab40d10 100644 --- a/esphome/components/web_server/__init__.py +++ b/esphome/components/web_server/__init__.py @@ -1,6 +1,9 @@ +from __future__ import annotations + import gzip import esphome.codegen as cg import esphome.config_validation as cv +import esphome.final_validate as fv from esphome.components import web_server_base from esphome.components.web_server_base import CONF_WEB_SERVER_BASE_ID from esphome.const import ( @@ -19,6 +22,8 @@ from esphome.const import ( CONF_LOG, CONF_VERSION, CONF_LOCAL, + CONF_WEB_SERVER_ID, + CONF_WEB_SERVER_SORTING_WEIGHT, PLATFORM_ESP32, PLATFORM_ESP8266, PLATFORM_BK72XX, @@ -64,6 +69,46 @@ def validate_ota(config): return config +def _validate_no_sorting_weight( + webserver_version: int, config: dict, path: list[str] | None = None +) -> None: + if path is None: + path = [] + if CONF_WEB_SERVER_SORTING_WEIGHT in config: + raise cv.FinalExternalInvalid( + f"Sorting weight on entities is not supported in web_server version {webserver_version}", + path=path + [CONF_WEB_SERVER_SORTING_WEIGHT], + ) + for p, value in config.items(): + if isinstance(value, dict): + _validate_no_sorting_weight(webserver_version, value, path + [p]) + elif isinstance(value, list): + for i, item in enumerate(value): + if isinstance(item, dict): + _validate_no_sorting_weight(webserver_version, item, path + [p, i]) + + +def _final_validate_sorting_weight(config): + if (webserver_version := config.get(CONF_VERSION)) != 3: + _validate_no_sorting_weight(webserver_version, fv.full_config.get()) + + return config + + +FINAL_VALIDATE_SCHEMA = _final_validate_sorting_weight + + +WEBSERVER_SORTING_SCHEMA = cv.Schema( + { + cv.OnlyWith(CONF_WEB_SERVER_ID, "web_server"): cv.use_id(WebServer), + cv.Optional(CONF_WEB_SERVER_SORTING_WEIGHT): cv.All( + cv.requires_component("web_server"), + cv.float_, + ), + } +) + + CONFIG_SCHEMA = cv.All( cv.Schema( { @@ -108,6 +153,19 @@ CONFIG_SCHEMA = cv.All( ) +def add_entity_to_sorting_list(web_server, entity, config): + sorting_weight = 50 + if CONF_WEB_SERVER_SORTING_WEIGHT in config: + sorting_weight = config[CONF_WEB_SERVER_SORTING_WEIGHT] + + cg.add( + web_server.add_entity_to_sorting_list( + entity, + sorting_weight, + ) + ) + + def build_index_html(config) -> str: html = "" css_include = config.get(CONF_CSS_INCLUDE) diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index d72307991f..5bb36f9600 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -435,7 +435,7 @@ void WebServer::handle_sensor_request(AsyncWebServerRequest *request, const UrlM request->send(404); } std::string WebServer::sensor_json(sensor::Sensor *obj, float value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { + return json::build_json([this, obj, value, start_config](JsonObject root) { std::string state; if (std::isnan(value)) { state = "NA"; @@ -446,6 +446,9 @@ std::string WebServer::sensor_json(sensor::Sensor *obj, float value, JsonDetail } set_json_icon_state_value(root, obj, "sensor-" + obj->get_object_id(), state, value, start_config); if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } if (!obj->get_unit_of_measurement().empty()) root["uom"] = obj->get_unit_of_measurement(); } @@ -471,8 +474,13 @@ void WebServer::handle_text_sensor_request(AsyncWebServerRequest *request, const } std::string WebServer::text_sensor_json(text_sensor::TextSensor *obj, const std::string &value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { + return json::build_json([this, obj, value, start_config](JsonObject root) { set_json_icon_state_value(root, obj, "text_sensor-" + obj->get_object_id(), value, value, start_config); + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif @@ -483,14 +491,6 @@ void WebServer::on_switch_update(switch_::Switch *obj, bool state) { return; this->events_.send(this->switch_json(obj, state, DETAIL_STATE).c_str(), "state"); } -std::string WebServer::switch_json(switch_::Switch *obj, bool value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { - set_json_icon_state_value(root, obj, "switch-" + obj->get_object_id(), value ? "ON" : "OFF", value, start_config); - if (start_config == DETAIL_ALL) { - root["assumed_state"] = obj->assumed_state(); - } - }); -} void WebServer::handle_switch_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (switch_::Switch *obj : App.get_switches()) { if (obj->get_object_id() != match.id) @@ -515,14 +515,20 @@ void WebServer::handle_switch_request(AsyncWebServerRequest *request, const UrlM } request->send(404); } +std::string WebServer::switch_json(switch_::Switch *obj, bool value, JsonDetail start_config) { + return json::build_json([this, obj, value, start_config](JsonObject root) { + set_json_icon_state_value(root, obj, "switch-" + obj->get_object_id(), value ? "ON" : "OFF", value, start_config); + if (start_config == DETAIL_ALL) { + root["assumed_state"] = obj->assumed_state(); + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_BUTTON -std::string WebServer::button_json(button::Button *obj, JsonDetail start_config) { - return json::build_json( - [obj, start_config](JsonObject root) { set_json_id(root, obj, "button-" + obj->get_object_id(), start_config); }); -} - void WebServer::handle_button_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (button::Button *obj : App.get_buttons()) { if (obj->get_object_id() != match.id) @@ -538,6 +544,16 @@ void WebServer::handle_button_request(AsyncWebServerRequest *request, const UrlM } request->send(404); } +std::string WebServer::button_json(button::Button *obj, JsonDetail start_config) { + return json::build_json([this, obj, start_config](JsonObject root) { + set_json_id(root, obj, "button-" + obj->get_object_id(), start_config); + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_BINARY_SENSOR @@ -546,12 +562,6 @@ void WebServer::on_binary_sensor_update(binary_sensor::BinarySensor *obj, bool s return; this->events_.send(this->binary_sensor_json(obj, state, DETAIL_STATE).c_str(), "state"); } -std::string WebServer::binary_sensor_json(binary_sensor::BinarySensor *obj, bool value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { - set_json_icon_state_value(root, obj, "binary_sensor-" + obj->get_object_id(), value ? "ON" : "OFF", value, - start_config); - }); -} void WebServer::handle_binary_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (binary_sensor::BinarySensor *obj : App.get_binary_sensors()) { if (obj->get_object_id() != match.id) @@ -562,6 +572,17 @@ void WebServer::handle_binary_sensor_request(AsyncWebServerRequest *request, con } request->send(404); } +std::string WebServer::binary_sensor_json(binary_sensor::BinarySensor *obj, bool value, JsonDetail start_config) { + return json::build_json([this, obj, value, start_config](JsonObject root) { + set_json_icon_state_value(root, obj, "binary_sensor-" + obj->get_object_id(), value ? "ON" : "OFF", value, + start_config); + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_FAN @@ -570,19 +591,6 @@ void WebServer::on_fan_update(fan::Fan *obj) { return; this->events_.send(this->fan_json(obj, DETAIL_STATE).c_str(), "state"); } -std::string WebServer::fan_json(fan::Fan *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { - set_json_icon_state_value(root, obj, "fan-" + obj->get_object_id(), obj->state ? "ON" : "OFF", obj->state, - start_config); - const auto traits = obj->get_traits(); - if (traits.supports_speed()) { - root["speed_level"] = obj->speed; - root["speed_count"] = traits.supported_speed_count(); - } - if (obj->get_traits().supports_oscillation()) - root["oscillation"] = obj->oscillating; - }); -} void WebServer::handle_fan_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (fan::Fan *obj : App.get_fans()) { if (obj->get_object_id() != match.id) @@ -635,6 +643,24 @@ void WebServer::handle_fan_request(AsyncWebServerRequest *request, const UrlMatc } request->send(404); } +std::string WebServer::fan_json(fan::Fan *obj, JsonDetail start_config) { + return json::build_json([this, obj, start_config](JsonObject root) { + set_json_icon_state_value(root, obj, "fan-" + obj->get_object_id(), obj->state ? "ON" : "OFF", obj->state, + start_config); + const auto traits = obj->get_traits(); + if (traits.supports_speed()) { + root["speed_level"] = obj->speed; + root["speed_count"] = traits.supported_speed_count(); + } + if (obj->get_traits().supports_oscillation()) + root["oscillation"] = obj->oscillating; + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_LIGHT @@ -729,7 +755,7 @@ void WebServer::handle_light_request(AsyncWebServerRequest *request, const UrlMa request->send(404); } std::string WebServer::light_json(light::LightState *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_id(root, obj, "light-" + obj->get_object_id(), start_config); root["state"] = obj->remote_values.is_on() ? "ON" : "OFF"; @@ -740,6 +766,9 @@ std::string WebServer::light_json(light::LightState *obj, JsonDetail start_confi for (auto const &option : obj->get_effects()) { opt.add(option->get_name()); } + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } } }); } @@ -803,7 +832,7 @@ void WebServer::handle_cover_request(AsyncWebServerRequest *request, const UrlMa request->send(404); } std::string WebServer::cover_json(cover::Cover *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_icon_state_value(root, obj, "cover-" + obj->get_object_id(), obj->is_fully_closed() ? "CLOSED" : "OPEN", obj->position, start_config); root["current_operation"] = cover::cover_operation_to_str(obj->current_operation); @@ -812,6 +841,11 @@ std::string WebServer::cover_json(cover::Cover *obj, JsonDetail start_config) { root["position"] = obj->position; if (obj->get_traits().get_supports_tilt()) root["tilt"] = obj->tilt; + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif @@ -852,7 +886,7 @@ void WebServer::handle_number_request(AsyncWebServerRequest *request, const UrlM } std::string WebServer::number_json(number::Number *obj, float value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { + return json::build_json([this, obj, value, start_config](JsonObject root) { set_json_id(root, obj, "number-" + obj->get_object_id(), start_config); if (start_config == DETAIL_ALL) { root["min_value"] = @@ -864,6 +898,9 @@ std::string WebServer::number_json(number::Number *obj, float value, JsonDetail root["mode"] = (int) obj->traits.get_mode(); if (!obj->traits.get_unit_of_measurement().empty()) root["uom"] = obj->traits.get_unit_of_measurement(); + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } } if (std::isnan(value)) { root["value"] = "\"NaN\""; @@ -919,11 +956,16 @@ void WebServer::handle_date_request(AsyncWebServerRequest *request, const UrlMat } std::string WebServer::date_json(datetime::DateEntity *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_id(root, obj, "date-" + obj->get_object_id(), start_config); std::string value = str_sprintf("%d-%02d-%02d", obj->year, obj->month, obj->day); root["value"] = value; root["state"] = value; + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif // USE_DATETIME_DATE @@ -967,11 +1009,16 @@ void WebServer::handle_time_request(AsyncWebServerRequest *request, const UrlMat request->send(404); } std::string WebServer::time_json(datetime::TimeEntity *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_id(root, obj, "time-" + obj->get_object_id(), start_config); std::string value = str_sprintf("%02d:%02d:%02d", obj->hour, obj->minute, obj->second); root["value"] = value; root["state"] = value; + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif // USE_DATETIME_TIME @@ -1015,12 +1062,17 @@ void WebServer::handle_datetime_request(AsyncWebServerRequest *request, const Ur request->send(404); } std::string WebServer::datetime_json(datetime::DateTimeEntity *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_id(root, obj, "datetime-" + obj->get_object_id(), start_config); std::string value = str_sprintf("%d-%02d-%02d %02d:%02d:%02d", obj->year, obj->month, obj->day, obj->hour, obj->minute, obj->second); root["value"] = value; root["state"] = value; + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif // USE_DATETIME_DATETIME @@ -1060,11 +1112,8 @@ void WebServer::handle_text_request(AsyncWebServerRequest *request, const UrlMat } std::string WebServer::text_json(text::Text *obj, const std::string &value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { + return json::build_json([this, obj, value, start_config](JsonObject root) { set_json_id(root, obj, "text-" + obj->get_object_id(), start_config); - if (start_config == DETAIL_ALL) { - root["mode"] = (int) obj->traits.get_mode(); - } root["min_length"] = obj->traits.get_min_length(); root["max_length"] = obj->traits.get_max_length(); root["pattern"] = obj->traits.get_pattern(); @@ -1074,6 +1123,12 @@ std::string WebServer::text_json(text::Text *obj, const std::string &value, Json root["state"] = value; } root["value"] = value; + if (start_config == DETAIL_ALL) { + root["mode"] = (int) obj->traits.get_mode(); + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } }); } #endif @@ -1119,13 +1174,16 @@ void WebServer::handle_select_request(AsyncWebServerRequest *request, const UrlM request->send(404); } std::string WebServer::select_json(select::Select *obj, const std::string &value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { + return json::build_json([this, obj, value, start_config](JsonObject root) { set_json_icon_state_value(root, obj, "select-" + obj->get_object_id(), value, value, start_config); if (start_config == DETAIL_ALL) { JsonArray opt = root.createNestedArray("option"); for (auto &option : obj->traits.get_options()) { opt.add(option); } + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } } }); } @@ -1140,7 +1198,6 @@ void WebServer::on_climate_update(climate::Climate *obj) { return; this->events_.send(this->climate_json(obj, DETAIL_STATE).c_str(), "state"); } - void WebServer::handle_climate_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (auto *obj : App.get_climates()) { if (obj->get_object_id() != match.id) @@ -1188,9 +1245,8 @@ void WebServer::handle_climate_request(AsyncWebServerRequest *request, const Url } request->send(404); } - std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_id(root, obj, "climate-" + obj->get_object_id(), start_config); const auto traits = obj->get_traits(); int8_t target_accuracy = traits.get_target_temperature_accuracy_decimals(); @@ -1227,6 +1283,9 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf for (auto const &custom_preset : traits.get_supported_custom_presets()) opt.add(custom_preset); } + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } } bool has_state = false; @@ -1283,12 +1342,6 @@ void WebServer::on_lock_update(lock::Lock *obj) { return; this->events_.send(this->lock_json(obj, obj->state, DETAIL_STATE).c_str(), "state"); } -std::string WebServer::lock_json(lock::Lock *obj, lock::LockState value, JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { - set_json_icon_state_value(root, obj, "lock-" + obj->get_object_id(), lock::lock_state_to_string(value), value, - start_config); - }); -} void WebServer::handle_lock_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (lock::Lock *obj : App.get_locks()) { if (obj->get_object_id() != match.id) @@ -1313,6 +1366,17 @@ void WebServer::handle_lock_request(AsyncWebServerRequest *request, const UrlMat } request->send(404); } +std::string WebServer::lock_json(lock::Lock *obj, lock::LockState value, JsonDetail start_config) { + return json::build_json([this, obj, value, start_config](JsonObject root) { + set_json_icon_state_value(root, obj, "lock-" + obj->get_object_id(), lock::lock_state_to_string(value), value, + start_config); + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_VALVE @@ -1366,13 +1430,16 @@ void WebServer::handle_valve_request(AsyncWebServerRequest *request, const UrlMa request->send(404); } std::string WebServer::valve_json(valve::Valve *obj, JsonDetail start_config) { - return json::build_json([obj, start_config](JsonObject root) { + return json::build_json([this, obj, start_config](JsonObject root) { set_json_icon_state_value(root, obj, "valve-" + obj->get_object_id(), obj->is_fully_closed() ? "CLOSED" : "OPEN", obj->position, start_config); root["current_operation"] = valve::valve_operation_to_str(obj->current_operation); if (obj->get_traits().get_supports_position()) root["position"] = obj->position; + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } }); } #endif @@ -1383,15 +1450,6 @@ void WebServer::on_alarm_control_panel_update(alarm_control_panel::AlarmControlP return; this->events_.send(this->alarm_control_panel_json(obj, obj->get_state(), DETAIL_STATE).c_str(), "state"); } -std::string WebServer::alarm_control_panel_json(alarm_control_panel::AlarmControlPanel *obj, - alarm_control_panel::AlarmControlPanelState value, - JsonDetail start_config) { - return json::build_json([obj, value, start_config](JsonObject root) { - char buf[16]; - set_json_icon_state_value(root, obj, "alarm-control-panel-" + obj->get_object_id(), - PSTR_LOCAL(alarm_control_panel_state_to_string(value)), value, start_config); - }); -} void WebServer::handle_alarm_control_panel_request(AsyncWebServerRequest *request, const UrlMatch &match) { for (alarm_control_panel::AlarmControlPanel *obj : App.get_alarm_control_panels()) { if (obj->get_object_id() != match.id) @@ -1405,6 +1463,20 @@ void WebServer::handle_alarm_control_panel_request(AsyncWebServerRequest *reques } request->send(404); } +std::string WebServer::alarm_control_panel_json(alarm_control_panel::AlarmControlPanel *obj, + alarm_control_panel::AlarmControlPanelState value, + JsonDetail start_config) { + return json::build_json([this, obj, value, start_config](JsonObject root) { + char buf[16]; + set_json_icon_state_value(root, obj, "alarm-control-panel-" + obj->get_object_id(), + PSTR_LOCAL(alarm_control_panel_state_to_string(value)), value, start_config); + if (start_config == DETAIL_ALL) { + if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) { + root["sorting_weight"] = this->sorting_entitys_[obj].weight; + } + } + }); +} #endif #ifdef USE_EVENT @@ -1709,6 +1781,10 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) { bool WebServer::isRequestHandlerTrivial() { return false; } +void WebServer::add_entity_to_sorting_list(EntityBase *entity, float weight) { + this->sorting_entitys_[entity] = SortingComponents{weight}; +} + void WebServer::schedule_(std::function &&f) { #ifdef USE_ESP32 xSemaphoreTake(this->to_schedule_lock_, portMAX_DELAY); diff --git a/esphome/components/web_server/web_server.h b/esphome/components/web_server/web_server.h index dda14a7e05..0fb40e2c33 100644 --- a/esphome/components/web_server/web_server.h +++ b/esphome/components/web_server/web_server.h @@ -5,8 +5,10 @@ #include "esphome/components/web_server_base/web_server_base.h" #include "esphome/core/component.h" #include "esphome/core/controller.h" +#include "esphome/core/entity_base.h" #include +#include #ifdef USE_ESP32 #include #include @@ -39,6 +41,10 @@ struct UrlMatch { bool valid; ///< Whether this match is valid }; +struct SortingComponents { + float weight; +}; + enum JsonDetail { DETAIL_ALL, DETAIL_STATE }; /** This class allows users to create a web server with their ESP nodes. @@ -320,12 +326,15 @@ class WebServer : public Controller, public Component, public AsyncWebHandler { /// This web handle is not trivial. bool isRequestHandlerTrivial() override; + void add_entity_to_sorting_list(EntityBase *entity, float weight); + protected: void schedule_(std::function &&f); friend ListEntitiesIterator; web_server_base::WebServerBase *base_; AsyncEventSource events_{"/events"}; ListEntitiesIterator entities_iterator_; + std::map sorting_entitys_; #if USE_WEBSERVER_VERSION == 1 const char *css_url_{nullptr}; const char *js_url_{nullptr}; diff --git a/esphome/const.py b/esphome/const.py index 616b686052..1aafffb5d0 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -904,6 +904,8 @@ CONF_WARM_WHITE = "warm_white" CONF_WARM_WHITE_COLOR_TEMPERATURE = "warm_white_color_temperature" CONF_WATCHDOG_THRESHOLD = "watchdog_threshold" CONF_WEB_SERVER = "web_server" +CONF_WEB_SERVER_ID = "web_server_id" +CONF_WEB_SERVER_SORTING_WEIGHT = "web_server_sorting_weight" CONF_WEIGHT = "weight" CONF_WHILE = "while" CONF_WHITE = "white" From c130ddbe9cabcfa88ade0d489414aecc82850548 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Wed, 29 May 2024 20:58:13 -0500 Subject: [PATCH 276/313] [micro_wake_word] Ensure model string is Path (#6826) --- esphome/components/micro_wake_word/__init__.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/esphome/components/micro_wake_word/__init__.py b/esphome/components/micro_wake_word/__init__.py index 9073d103f1..def2808e54 100644 --- a/esphome/components/micro_wake_word/__init__.py +++ b/esphome/components/micro_wake_word/__init__.py @@ -329,11 +329,14 @@ async def to_code(config): file: Path = base_dir / h.hexdigest()[:8] / model_config[CONF_FILE] elif model_config[CONF_TYPE] == TYPE_LOCAL: - file = model_config[CONF_PATH] + file = Path(model_config[CONF_PATH]) elif model_config[CONF_TYPE] == TYPE_HTTP: file = _compute_local_file_path(model_config) / "manifest.json" + else: + raise ValueError("Unsupported config type: {model_config[CONF_TYPE]}") + manifest, data = _load_model_data(file) rhs = [HexInt(x) for x in data] From 9de8eaff24f63a0acc25fdc555babfc3b54c7b27 Mon Sep 17 00:00:00 2001 From: Erdem Date: Thu, 30 May 2024 08:31:09 +0300 Subject: [PATCH 277/313] Fix DHT reading timing for SI7021 on ESP32 (#6604) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- esphome/components/dht/dht.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/esphome/components/dht/dht.cpp b/esphome/components/dht/dht.cpp index 5112092073..db1c851d5f 100644 --- a/esphome/components/dht/dht.cpp +++ b/esphome/components/dht/dht.cpp @@ -86,9 +86,14 @@ bool HOT IRAM_ATTR DHT::read_sensor_(float *temperature, float *humidity, bool r if (this->model_ == DHT_MODEL_DHT11) { delayMicroseconds(18000); } else if (this->model_ == DHT_MODEL_SI7021) { +#ifdef USE_ESP8266 delayMicroseconds(500); this->pin_->digital_write(true); delayMicroseconds(40); +#else + delayMicroseconds(400); + this->pin_->digital_write(true); +#endif } else if (this->model_ == DHT_MODEL_DHT22_TYPE2) { delayMicroseconds(2000); } else if (this->model_ == DHT_MODEL_AM2120 || this->model_ == DHT_MODEL_AM2302) { From 63fc8ab10a52fc118c89218e40ccc919877a19f9 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 19:59:15 +1200 Subject: [PATCH 278/313] [core] Const-ify some Component fields (#6831) --- esphome/core/component.cpp | 8 ++++---- esphome/core/component.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/esphome/core/component.cpp b/esphome/core/component.cpp index 594e8ff7df..ae73a451d9 100644 --- a/esphome/core/component.cpp +++ b/esphome/core/component.cpp @@ -1,11 +1,11 @@ #include "esphome/core/component.h" +#include +#include #include "esphome/core/application.h" #include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" -#include -#include namespace esphome { @@ -140,8 +140,8 @@ void Component::set_retry(uint32_t initial_wait_time, uint8_t max_attempts, std: float backoff_increase_factor) { // NOLINT App.scheduler.set_retry(this, "", initial_wait_time, max_attempts, std::move(f), backoff_increase_factor); } -bool Component::is_failed() { return (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED; } -bool Component::is_ready() { +bool Component::is_failed() const { return (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED; } +bool Component::is_ready() const { return (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_LOOP || (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_SETUP; } diff --git a/esphome/core/component.h b/esphome/core/component.h index e6ffe96d1e..a6bd8f81ac 100644 --- a/esphome/core/component.h +++ b/esphome/core/component.h @@ -118,9 +118,9 @@ class Component { */ virtual void mark_failed(); - bool is_failed(); + bool is_failed() const; - bool is_ready(); + bool is_ready() const; virtual bool can_proceed(); From 8aba890e6974b40fffa14271b63371d179949733 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 20:00:09 +1200 Subject: [PATCH 279/313] [voice_assistant] Half the microphone ringbuffer size (#6830) --- esphome/components/voice_assistant/voice_assistant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 0bd8194190..c2fd14fbd5 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -18,7 +18,7 @@ static const char *const TAG = "voice_assistant"; static const size_t SAMPLE_RATE_HZ = 16000; static const size_t INPUT_BUFFER_SIZE = 32 * SAMPLE_RATE_HZ / 1000; // 32ms * 16kHz / 1000ms -static const size_t BUFFER_SIZE = 1024 * SAMPLE_RATE_HZ / 1000; +static const size_t BUFFER_SIZE = 512 * SAMPLE_RATE_HZ / 1000; static const size_t SEND_BUFFER_SIZE = INPUT_BUFFER_SIZE * sizeof(int16_t); static const size_t RECEIVE_SIZE = 1024; static const size_t SPEAKER_BUFFER_SIZE = 16 * RECEIVE_SIZE; From dd2788133683cc7485008559de7d1a4b7ae21825 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 20:01:39 +1200 Subject: [PATCH 280/313] [i2s_speaker] Add buffer allocation failure checks (#6829) --- .../i2s_audio/speaker/i2s_audio_speaker.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp index 69536742cb..546c2c98f7 100644 --- a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +++ b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp @@ -19,10 +19,27 @@ void I2SAudioSpeaker::setup() { ESP_LOGCONFIG(TAG, "Setting up I2S Audio Speaker..."); this->buffer_queue_ = xQueueCreate(BUFFER_COUNT, sizeof(DataEvent)); + if (this->buffer_queue_ == nullptr) { + ESP_LOGE(TAG, "Failed to create buffer queue"); + this->mark_failed(); + return; + } + this->event_queue_ = xQueueCreate(BUFFER_COUNT, sizeof(TaskEvent)); + if (this->event_queue_ == nullptr) { + ESP_LOGE(TAG, "Failed to create event queue"); + this->mark_failed(); + return; + } } -void I2SAudioSpeaker::start() { this->state_ = speaker::STATE_STARTING; } +void I2SAudioSpeaker::start() { + if (this->is_failed()) { + ESP_LOGE(TAG, "Cannot start audio, speaker failed to setup"); + return; + } + this->state_ = speaker::STATE_STARTING; +} void I2SAudioSpeaker::start_() { if (!this->parent_->try_lock()) { return; // Waiting for another i2s component to return lock @@ -141,6 +158,8 @@ void I2SAudioSpeaker::player_task(void *params) { } void I2SAudioSpeaker::stop() { + if (this->is_failed()) + return; if (this->state_ == speaker::STATE_STOPPED) return; if (this->state_ == speaker::STATE_STARTING) { @@ -200,6 +219,10 @@ void I2SAudioSpeaker::loop() { } size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length) { + if (this->is_failed()) { + ESP_LOGE(TAG, "Cannot play audio, speaker failed to setup"); + return 0; + } if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) { this->start(); } From 8dfe1d52203e5ab6d07baaea74b981bf3c6cab98 Mon Sep 17 00:00:00 2001 From: Anton Viktorov Date: Thu, 30 May 2024 08:46:52 +0000 Subject: [PATCH 281/313] LTR-303, LTR-329, LTR-553, LTR-556, LTR-559, LTR-659 Series of Lite-On Light (ALS) and Proximity(PS) sensors (#6076) * LTR303 and LTR329 light sensors * LTR303 tidy up * LTR303 unused var * LTR303 tidy up + test * LTR303 auto sensitivity mode * LTR303 auto sensitivity mode tidy * LTR303 State machine version * LTR303 name fix * publish split * minor * new definitions for LTR * als-ps test * als-ps test * als-ps test * ps options * ps options * trgger bug fixed * trgger bug fixed * Minor comments * ltr303->ltr_als_ps * codeowners, tests * tidy up * tidy up * tidy up * gain enum name fix * auto gain fix * tweaks * new style tests * als/ps separate init * logd->logv * reconfiguration count changed * old-style tests removed * const py * ambient light const in vmel7700 and ltr390 * Update esphome/components/ltr_als_ps/ltr_als_ps.cpp Co-authored-by: Keith Burzinski * Apply suggestions from code review Co-authored-by: Keith Burzinski * remove commented code --------- Co-authored-by: Keith Burzinski --- CODEOWNERS | 1 + esphome/components/ltr390/sensor.py | 8 +- esphome/components/ltr_als_ps/__init__.py | 1 + esphome/components/ltr_als_ps/ltr_als_ps.cpp | 519 ++++++++++++++++++ esphome/components/ltr_als_ps/ltr_als_ps.h | 184 +++++++ .../components/ltr_als_ps/ltr_definitions.h | 275 ++++++++++ esphome/components/ltr_als_ps/sensor.py | 271 +++++++++ esphome/components/veml7700/sensor.py | 8 +- esphome/const.py | 1 + tests/components/ltr_als_ps/common.yaml | 11 + .../ltr_als_ps/test.esp32-c3-idf.yaml | 6 + .../components/ltr_als_ps/test.esp32-c3.yaml | 6 + .../components/ltr_als_ps/test.esp32-idf.yaml | 6 + tests/components/ltr_als_ps/test.esp32.yaml | 6 + tests/components/ltr_als_ps/test.esp8266.yaml | 6 + tests/components/ltr_als_ps/test.rp2040.yaml | 6 + 16 files changed, 1307 insertions(+), 8 deletions(-) create mode 100644 esphome/components/ltr_als_ps/__init__.py create mode 100644 esphome/components/ltr_als_ps/ltr_als_ps.cpp create mode 100644 esphome/components/ltr_als_ps/ltr_als_ps.h create mode 100644 esphome/components/ltr_als_ps/ltr_definitions.h create mode 100644 esphome/components/ltr_als_ps/sensor.py create mode 100644 tests/components/ltr_als_ps/common.yaml create mode 100644 tests/components/ltr_als_ps/test.esp32-c3-idf.yaml create mode 100644 tests/components/ltr_als_ps/test.esp32-c3.yaml create mode 100644 tests/components/ltr_als_ps/test.esp32-idf.yaml create mode 100644 tests/components/ltr_als_ps/test.esp32.yaml create mode 100644 tests/components/ltr_als_ps/test.esp8266.yaml create mode 100644 tests/components/ltr_als_ps/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 8b6143859a..0dc5339193 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -210,6 +210,7 @@ esphome/components/lilygo_t5_47/touchscreen/* @jesserockz esphome/components/lock/* @esphome/core esphome/components/logger/* @esphome/core esphome/components/ltr390/* @sjtrny +esphome/components/ltr_als_ps/* @latonita esphome/components/matrix_keypad/* @ssieb esphome/components/max31865/* @DAVe3283 esphome/components/max44009/* @berfenger diff --git a/esphome/components/ltr390/sensor.py b/esphome/components/ltr390/sensor.py index fe8cad00b6..8b2676599c 100644 --- a/esphome/components/ltr390/sensor.py +++ b/esphome/components/ltr390/sensor.py @@ -2,14 +2,15 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import i2c, sensor from esphome.const import ( - CONF_ID, + CONF_AMBIENT_LIGHT, CONF_GAIN, + CONF_ID, CONF_LIGHT, CONF_RESOLUTION, - UNIT_LUX, - ICON_BRIGHTNESS_5, DEVICE_CLASS_EMPTY, DEVICE_CLASS_ILLUMINANCE, + ICON_BRIGHTNESS_5, + UNIT_LUX, ) CODEOWNERS = ["@sjtrny"] @@ -21,7 +22,6 @@ LTR390Component = ltr390_ns.class_( "LTR390Component", cg.PollingComponent, i2c.I2CDevice ) -CONF_AMBIENT_LIGHT = "ambient_light" CONF_UV_INDEX = "uv_index" CONF_UV = "uv" CONF_WINDOW_CORRECTION_FACTOR = "window_correction_factor" diff --git a/esphome/components/ltr_als_ps/__init__.py b/esphome/components/ltr_als_ps/__init__.py new file mode 100644 index 0000000000..dd06cfffea --- /dev/null +++ b/esphome/components/ltr_als_ps/__init__.py @@ -0,0 +1 @@ +CODEOWNERS = ["@latonita"] diff --git a/esphome/components/ltr_als_ps/ltr_als_ps.cpp b/esphome/components/ltr_als_ps/ltr_als_ps.cpp new file mode 100644 index 0000000000..ae299c9b66 --- /dev/null +++ b/esphome/components/ltr_als_ps/ltr_als_ps.cpp @@ -0,0 +1,519 @@ +#include "ltr_als_ps.h" +#include "esphome/core/application.h" +#include "esphome/core/log.h" +#include "esphome/core/helpers.h" + +using esphome::i2c::ErrorCode; + +namespace esphome { +namespace ltr_als_ps { + +static const char *const TAG = "ltr_als_ps"; + +static const uint8_t MAX_TRIES = 5; + +template T get_next(const T (&array)[size], const T val) { + size_t i = 0; + size_t idx = -1; + while (idx == -1 && i < size) { + if (array[i] == val) { + idx = i; + break; + } + i++; + } + if (idx == -1 || i + 1 >= size) + return val; + return array[i + 1]; +} + +template T get_prev(const T (&array)[size], const T val) { + size_t i = size - 1; + size_t idx = -1; + while (idx == -1 && i > 0) { + if (array[i] == val) { + idx = i; + break; + } + i--; + } + if (idx == -1 || i == 0) + return val; + return array[i - 1]; +} + +static uint16_t get_itime_ms(IntegrationTime time) { + static const uint16_t ALS_INT_TIME[8] = {100, 50, 200, 400, 150, 250, 300, 350}; + return ALS_INT_TIME[time & 0b111]; +} + +static uint16_t get_meas_time_ms(MeasurementRepeatRate rate) { + static const uint16_t ALS_MEAS_RATE[8] = {50, 100, 200, 500, 1000, 2000, 2000, 2000}; + return ALS_MEAS_RATE[rate & 0b111]; +} + +static float get_gain_coeff(AlsGain gain) { + static const float ALS_GAIN[8] = {1, 2, 4, 8, 0, 0, 48, 96}; + return ALS_GAIN[gain & 0b111]; +} + +static float get_ps_gain_coeff(PsGain gain) { + static const float PS_GAIN[4] = {16, 0, 32, 64}; + return PS_GAIN[gain & 0b11]; +} + +void LTRAlsPsComponent::setup() { + ESP_LOGCONFIG(TAG, "Setting up LTR-303/329/55x/659"); + // As per datasheet we need to wait at least 100ms after power on to get ALS chip responsive + this->set_timeout(100, [this]() { this->state_ = State::DELAYED_SETUP; }); +} + +void LTRAlsPsComponent::dump_config() { + auto get_device_type = [](LtrType typ) { + switch (typ) { + case LtrType::LTR_TYPE_ALS_ONLY: + return "ALS only"; + case LtrType::LTR_TYPE_PS_ONLY: + return "PS only"; + case LtrType::LTR_TYPE_ALS_AND_PS: + return "ALS + PS"; + default: + return "Unknown"; + } + }; + + LOG_I2C_DEVICE(this); + ESP_LOGCONFIG(TAG, " Device type: %s", get_device_type(this->ltr_type_)); + if (this->is_als_()) { + ESP_LOGCONFIG(TAG, " Automatic mode: %s", ONOFF(this->automatic_mode_enabled_)); + ESP_LOGCONFIG(TAG, " Gain: %.0fx", get_gain_coeff(this->gain_)); + ESP_LOGCONFIG(TAG, " Integration time: %d ms", get_itime_ms(this->integration_time_)); + ESP_LOGCONFIG(TAG, " Measurement repeat rate: %d ms", get_meas_time_ms(this->repeat_rate_)); + ESP_LOGCONFIG(TAG, " Glass attenuation factor: %f", this->glass_attenuation_factor_); + LOG_SENSOR(" ", "ALS calculated lux", this->ambient_light_sensor_); + LOG_SENSOR(" ", "CH1 Infrared counts", this->infrared_counts_sensor_); + LOG_SENSOR(" ", "CH0 Visible+IR counts", this->full_spectrum_counts_sensor_); + LOG_SENSOR(" ", "Actual gain", this->actual_gain_sensor_); + } + if (this->is_ps_()) { + ESP_LOGCONFIG(TAG, " Proximity gain: %.0fx", get_ps_gain_coeff(this->ps_gain_)); + ESP_LOGCONFIG(TAG, " Proximity cooldown time: %d s", this->ps_cooldown_time_s_); + ESP_LOGCONFIG(TAG, " Proximity high threshold: %d", this->ps_threshold_high_); + ESP_LOGCONFIG(TAG, " Proximity low threshold: %d", this->ps_threshold_low_); + LOG_SENSOR(" ", "Proximity counts", this->proximity_counts_sensor_); + } + LOG_UPDATE_INTERVAL(this); + + if (this->is_failed()) { + ESP_LOGE(TAG, "Communication with I2C LTR-303/329/55x/659 failed!"); + } +} + +void LTRAlsPsComponent::update() { + ESP_LOGV(TAG, "Updating"); + if (this->is_ready() && this->state_ == State::IDLE) { + ESP_LOGV(TAG, "Initiating new data collection"); + + this->state_ = this->automatic_mode_enabled_ ? State::COLLECTING_DATA_AUTO : State::WAITING_FOR_DATA; + + this->als_readings_.ch0 = 0; + this->als_readings_.ch1 = 0; + this->als_readings_.gain = this->gain_; + this->als_readings_.integration_time = this->integration_time_; + this->als_readings_.lux = 0; + this->als_readings_.number_of_adjustments = 0; + + } else { + ESP_LOGV(TAG, "Component not ready yet"); + } +} + +void LTRAlsPsComponent::loop() { + ErrorCode err = i2c::ERROR_OK; + static uint8_t tries{0}; + + switch (this->state_) { + case State::DELAYED_SETUP: + err = this->write(nullptr, 0); + if (err != i2c::ERROR_OK) { + ESP_LOGV(TAG, "i2c connection failed"); + this->mark_failed(); + } + this->configure_reset_(); + if (this->is_als_()) { + this->configure_als_(); + this->configure_integration_time_(this->integration_time_); + } + if (this->is_ps_()) { + this->configure_ps_(); + } + + this->state_ = State::IDLE; + break; + + case State::IDLE: + if (this->is_ps_()) { + check_and_trigger_ps_(); + } + break; + + case State::WAITING_FOR_DATA: + if (this->is_als_data_ready_(this->als_readings_) == DataAvail::DATA_OK) { + tries = 0; + ESP_LOGV(TAG, "Reading sensor data having gain = %.0fx, time = %d ms", get_gain_coeff(this->als_readings_.gain), + get_itime_ms(this->als_readings_.integration_time)); + this->read_sensor_data_(this->als_readings_); + this->state_ = State::DATA_COLLECTED; + this->apply_lux_calculation_(this->als_readings_); + } else if (tries >= MAX_TRIES) { + ESP_LOGW(TAG, "Can't get data after several tries."); + tries = 0; + this->status_set_warning(); + this->state_ = State::IDLE; + return; + } else { + tries++; + } + break; + + case State::COLLECTING_DATA_AUTO: + case State::DATA_COLLECTED: + // first measurement in auto mode (COLLECTING_DATA_AUTO state) require device reconfiguration + if (this->state_ == State::COLLECTING_DATA_AUTO || this->are_adjustments_required_(this->als_readings_)) { + this->state_ = State::ADJUSTMENT_IN_PROGRESS; + ESP_LOGD(TAG, "Reconfiguring sensitivity: gain = %.0fx, time = %d ms", get_gain_coeff(this->als_readings_.gain), + get_itime_ms(this->als_readings_.integration_time)); + this->configure_integration_time_(this->als_readings_.integration_time); + this->configure_gain_(this->als_readings_.gain); + // if sensitivity adjustment needed - need to wait for first data samples after setting new parameters + this->set_timeout(2 * get_meas_time_ms(this->repeat_rate_), + [this]() { this->state_ = State::WAITING_FOR_DATA; }); + } else { + this->state_ = State::READY_TO_PUBLISH; + } + break; + + case State::ADJUSTMENT_IN_PROGRESS: + // nothing to be done, just waiting for the timeout + break; + + case State::READY_TO_PUBLISH: + this->publish_data_part_1_(this->als_readings_); + this->state_ = State::KEEP_PUBLISHING; + break; + + case State::KEEP_PUBLISHING: + this->publish_data_part_2_(this->als_readings_); + this->status_clear_warning(); + this->state_ = State::IDLE; + break; + + default: + break; + } +} + +void LTRAlsPsComponent::check_and_trigger_ps_() { + static uint32_t last_high_trigger_time{0}; + static uint32_t last_low_trigger_time{0}; + uint16_t ps_data = this->read_ps_data_(); + uint32_t now = millis(); + + if (ps_data != this->ps_readings_) { + this->ps_readings_ = ps_data; + // Higher values - object is closer to sensor + if (ps_data > this->ps_threshold_high_ && now - last_high_trigger_time >= this->ps_cooldown_time_s_ * 1000) { + last_high_trigger_time = now; + ESP_LOGV(TAG, "Proximity high threshold triggered. Value = %d, Trigger level = %d", ps_data, + this->ps_threshold_high_); + this->on_ps_high_trigger_callback_.call(); + } else if (ps_data < this->ps_threshold_low_ && now - last_low_trigger_time >= this->ps_cooldown_time_s_ * 1000) { + last_low_trigger_time = now; + ESP_LOGV(TAG, "Proximity low threshold triggered. Value = %d, Trigger level = %d", ps_data, + this->ps_threshold_low_); + this->on_ps_low_trigger_callback_.call(); + } + } +} + +bool LTRAlsPsComponent::check_part_number_() { + uint8_t manuf_id = this->reg((uint8_t) CommandRegisters::MANUFAC_ID).get(); + if (manuf_id != 0x05) { // 0x05 is Lite-On Semiconductor Corp. ID + ESP_LOGW(TAG, "Unknown manufacturer ID: 0x%02X", manuf_id); + this->mark_failed(); + return false; + } + + // Things getting not really funny here, we can't identify device type by part number ID + // ======================== ========= ===== ================= + // Device Part ID Rev Capabilities + // ======================== ========= ===== ================= + // Ltr-329/ltr-303 0x0a 0x00 Als 16b + // Ltr-553/ltr-556/ltr-556 0x09 0x02 Als 16b + Ps 11b diff nm sens + // Ltr-659 0x09 0x02 Ps 11b and ps gain + // + // There are other devices which might potentially work with default settings, + // but registers layout is different and we can't use them properly. For ex. ltr-558 + + PartIdRegister part_id{0}; + part_id.raw = this->reg((uint8_t) CommandRegisters::PART_ID).get(); + if (part_id.part_number_id != 0x0a && part_id.part_number_id != 0x09) { + ESP_LOGW(TAG, "Unknown part number ID: 0x%02X. It might not work properly.", part_id.part_number_id); + this->status_set_warning(); + return true; + } + return true; +} + +void LTRAlsPsComponent::configure_reset_() { + ESP_LOGV(TAG, "Resetting"); + + AlsControlRegister als_ctrl{0}; + als_ctrl.sw_reset = true; + this->reg((uint8_t) CommandRegisters::ALS_CONTR) = als_ctrl.raw; + delay(2); + + uint8_t tries = MAX_TRIES; + do { + ESP_LOGV(TAG, "Waiting for chip to reset"); + delay(2); + als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get(); + } while (als_ctrl.sw_reset && tries--); // while sw reset bit is on - keep waiting + + if (als_ctrl.sw_reset) { + ESP_LOGW(TAG, "Reset timed out"); + } +} + +void LTRAlsPsComponent::configure_als_() { + AlsControlRegister als_ctrl{0}; + + als_ctrl.sw_reset = false; + als_ctrl.active_mode = true; + als_ctrl.gain = this->gain_; + + ESP_LOGV(TAG, "Setting active mode and gain reg 0x%02X", als_ctrl.raw); + this->reg((uint8_t) CommandRegisters::ALS_CONTR) = als_ctrl.raw; + delay(5); + + uint8_t tries = MAX_TRIES; + do { + ESP_LOGV(TAG, "Waiting for device to become active..."); + delay(2); + als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get(); + } while (!als_ctrl.active_mode && tries--); // while active mode is not set - keep waiting + + if (!als_ctrl.active_mode) { + ESP_LOGW(TAG, "Failed to activate device"); + } +} + +void LTRAlsPsComponent::configure_ps_() { + PsMeasurementRateRegister ps_meas{0}; + ps_meas.ps_measurement_rate = PsMeasurementRate::PS_MEAS_RATE_50MS; + this->reg((uint8_t) CommandRegisters::PS_MEAS_RATE) = ps_meas.raw; + + PsControlRegister ps_ctrl{0}; + ps_ctrl.ps_mode_active = true; + ps_ctrl.ps_mode_xxx = true; + this->reg((uint8_t) CommandRegisters::PS_CONTR) = ps_ctrl.raw; +} + +uint16_t LTRAlsPsComponent::read_ps_data_() { + AlsPsStatusRegister als_status{0}; + als_status.raw = this->reg((uint8_t) CommandRegisters::ALS_PS_STATUS).get(); + if (!als_status.ps_new_data || als_status.data_invalid) { + return this->ps_readings_; + } + + uint8_t ps_low = this->reg((uint8_t) CommandRegisters::PS_DATA_0).get(); + PsData1Register ps_high; + ps_high.raw = this->reg((uint8_t) CommandRegisters::PS_DATA_1).get(); + + uint16_t val = encode_uint16(ps_high.ps_data_high, ps_low); + if (ps_high.ps_saturation_flag) { + return 0x7ff; // full 11 bit range + } + return val; +} + +void LTRAlsPsComponent::configure_gain_(AlsGain gain) { + AlsControlRegister als_ctrl{0}; + als_ctrl.active_mode = true; + als_ctrl.gain = gain; + this->reg((uint8_t) CommandRegisters::ALS_CONTR) = als_ctrl.raw; + delay(2); + + AlsControlRegister read_als_ctrl{0}; + read_als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get(); + if (read_als_ctrl.gain != gain) { + ESP_LOGW(TAG, "Failed to set gain. We will try one more time."); + this->reg((uint8_t) CommandRegisters::ALS_CONTR) = als_ctrl.raw; + delay(2); + } +} + +void LTRAlsPsComponent::configure_integration_time_(IntegrationTime time) { + MeasurementRateRegister meas{0}; + meas.measurement_repeat_rate = this->repeat_rate_; + meas.integration_time = time; + this->reg((uint8_t) CommandRegisters::MEAS_RATE) = meas.raw; + delay(2); + + MeasurementRateRegister read_meas{0}; + read_meas.raw = this->reg((uint8_t) CommandRegisters::MEAS_RATE).get(); + if (read_meas.integration_time != time) { + ESP_LOGW(TAG, "Failed to set integration time. We will try one more time."); + this->reg((uint8_t) CommandRegisters::MEAS_RATE) = meas.raw; + delay(2); + } +} + +DataAvail LTRAlsPsComponent::is_als_data_ready_(AlsReadings &data) { + AlsPsStatusRegister als_status{0}; + + als_status.raw = this->reg((uint8_t) CommandRegisters::ALS_PS_STATUS).get(); + if (!als_status.als_new_data) + return DataAvail::NO_DATA; + + if (als_status.data_invalid) { + ESP_LOGW(TAG, "Data available but not valid"); + return DataAvail::BAD_DATA; + } + ESP_LOGV(TAG, "Data ready, reported gain is %.0f", get_gain_coeff(als_status.gain)); + if (data.gain != als_status.gain) { + ESP_LOGW(TAG, "Actual gain differs from requested (%.0f)", get_gain_coeff(data.gain)); + return DataAvail::BAD_DATA; + } + return DataAvail::DATA_OK; +} + +void LTRAlsPsComponent::read_sensor_data_(AlsReadings &data) { + data.ch1 = 0; + data.ch0 = 0; + uint8_t ch1_0 = this->reg((uint8_t) CommandRegisters::ALS_DATA_CH1_0).get(); + uint8_t ch1_1 = this->reg((uint8_t) CommandRegisters::ALS_DATA_CH1_1).get(); + uint8_t ch0_0 = this->reg((uint8_t) CommandRegisters::ALS_DATA_CH0_0).get(); + uint8_t ch0_1 = this->reg((uint8_t) CommandRegisters::ALS_DATA_CH0_1).get(); + data.ch1 = encode_uint16(ch1_1, ch1_0); + data.ch0 = encode_uint16(ch0_1, ch0_0); + + ESP_LOGV(TAG, "Got sensor data: CH1 = %d, CH0 = %d", data.ch1, data.ch0); +} + +bool LTRAlsPsComponent::are_adjustments_required_(AlsReadings &data) { + if (!this->automatic_mode_enabled_) + return false; + + if (data.number_of_adjustments > 15) { + // sometimes sensors fail to change sensitivity. this prevents us from infinite loop + ESP_LOGW(TAG, "Too many sensitivity adjustments done. Apparently, sensor reconfiguration fails. Stopping."); + return false; + } + data.number_of_adjustments++; + + // Recommended thresholds as per datasheet + static const uint16_t LOW_INTENSITY_THRESHOLD = 1000; + static const uint16_t HIGH_INTENSITY_THRESHOLD = 30000; + static const AlsGain GAINS[GAINS_COUNT] = {GAIN_1, GAIN_2, GAIN_4, GAIN_8, GAIN_48, GAIN_96}; + static const IntegrationTime INT_TIMES[TIMES_COUNT] = { + INTEGRATION_TIME_50MS, INTEGRATION_TIME_100MS, INTEGRATION_TIME_150MS, INTEGRATION_TIME_200MS, + INTEGRATION_TIME_250MS, INTEGRATION_TIME_300MS, INTEGRATION_TIME_350MS, INTEGRATION_TIME_400MS}; + + if (data.ch0 <= LOW_INTENSITY_THRESHOLD) { + AlsGain next_gain = get_next(GAINS, data.gain); + if (next_gain != data.gain) { + data.gain = next_gain; + ESP_LOGV(TAG, "Low illuminance. Increasing gain."); + return true; + } + IntegrationTime next_time = get_next(INT_TIMES, data.integration_time); + if (next_time != data.integration_time) { + data.integration_time = next_time; + ESP_LOGV(TAG, "Low illuminance. Increasing integration time."); + return true; + } + } else if (data.ch0 >= HIGH_INTENSITY_THRESHOLD) { + AlsGain prev_gain = get_prev(GAINS, data.gain); + if (prev_gain != data.gain) { + data.gain = prev_gain; + ESP_LOGV(TAG, "High illuminance. Decreasing gain."); + return true; + } + IntegrationTime prev_time = get_prev(INT_TIMES, data.integration_time); + if (prev_time != data.integration_time) { + data.integration_time = prev_time; + ESP_LOGV(TAG, "High illuminance. Decreasing integration time."); + return true; + } + } else { + ESP_LOGD(TAG, "Illuminance is sufficient."); + return false; + } + ESP_LOGD(TAG, "Can't adjust sensitivity anymore."); + return false; +} + +void LTRAlsPsComponent::apply_lux_calculation_(AlsReadings &data) { + if ((data.ch0 == 0xFFFF) || (data.ch1 == 0xFFFF)) { + ESP_LOGW(TAG, "Sensors got saturated"); + data.lux = 0.0f; + return; + } + + if ((data.ch0 == 0x0000) && (data.ch1 == 0x0000)) { + ESP_LOGW(TAG, "Sensors blacked out"); + data.lux = 0.0f; + return; + } + + float ch0 = data.ch0; + float ch1 = data.ch1; + float ratio = ch1 / (ch0 + ch1); + float als_gain = get_gain_coeff(data.gain); + float als_time = ((float) get_itime_ms(data.integration_time)) / 100.0f; + float inv_pfactor = this->glass_attenuation_factor_; + float lux = 0.0f; + + if (ratio < 0.45) { + lux = (1.7743 * ch0 + 1.1059 * ch1); + } else if (ratio < 0.64 && ratio >= 0.45) { + lux = (4.2785 * ch0 - 1.9548 * ch1); + } else if (ratio < 0.85 && ratio >= 0.64) { + lux = (0.5926 * ch0 + 0.1185 * ch1); + } else { + ESP_LOGW(TAG, "Impossible ch1/(ch0 + ch1) ratio"); + lux = 0.0f; + } + lux = inv_pfactor * lux / als_gain / als_time; + data.lux = lux; + + ESP_LOGV(TAG, "Lux calculation: ratio %.3f, gain %.0fx, int time %.1f, inv_pfactor %.3f, lux %.3f", ratio, als_gain, + als_time, inv_pfactor, lux); +} + +void LTRAlsPsComponent::publish_data_part_1_(AlsReadings &data) { + if (this->proximity_counts_sensor_ != nullptr) { + this->proximity_counts_sensor_->publish_state(this->ps_readings_); + } + if (this->ambient_light_sensor_ != nullptr) { + this->ambient_light_sensor_->publish_state(data.lux); + } + if (this->infrared_counts_sensor_ != nullptr) { + this->infrared_counts_sensor_->publish_state(data.ch1); + } + if (this->full_spectrum_counts_sensor_ != nullptr) { + this->full_spectrum_counts_sensor_->publish_state(data.ch0); + } +} + +void LTRAlsPsComponent::publish_data_part_2_(AlsReadings &data) { + if (this->actual_gain_sensor_ != nullptr) { + this->actual_gain_sensor_->publish_state(get_gain_coeff(data.gain)); + } + if (this->actual_integration_time_sensor_ != nullptr) { + this->actual_integration_time_sensor_->publish_state(get_itime_ms(data.integration_time)); + } +} +} // namespace ltr_als_ps +} // namespace esphome diff --git a/esphome/components/ltr_als_ps/ltr_als_ps.h b/esphome/components/ltr_als_ps/ltr_als_ps.h new file mode 100644 index 0000000000..4cbbcea54c --- /dev/null +++ b/esphome/components/ltr_als_ps/ltr_als_ps.h @@ -0,0 +1,184 @@ +#pragma once + +#include "esphome/components/i2c/i2c.h" +#include "esphome/components/sensor/sensor.h" +#include "esphome/core/component.h" +#include "esphome/core/optional.h" +#include "esphome/core/automation.h" + +#include "ltr_definitions.h" + +namespace esphome { +namespace ltr_als_ps { + +enum DataAvail : uint8_t { NO_DATA, BAD_DATA, DATA_OK }; + +enum LtrType : uint8_t { + LTR_TYPE_UNKNOWN = 0, + LTR_TYPE_ALS_ONLY = 1, + LTR_TYPE_PS_ONLY = 2, + LTR_TYPE_ALS_AND_PS = 3, +}; + +class LTRAlsPsComponent : public PollingComponent, public i2c::I2CDevice { + public: + // + // EspHome framework functions + // + float get_setup_priority() const override { return setup_priority::DATA; } + void setup() override; + void dump_config() override; + void update() override; + void loop() override; + + // Configuration setters : General + // + void set_ltr_type(LtrType type) { this->ltr_type_ = type; } + + // Configuration setters : ALS + // + void set_als_auto_mode(bool enable) { this->automatic_mode_enabled_ = enable; } + void set_als_gain(AlsGain gain) { this->gain_ = gain; } + void set_als_integration_time(IntegrationTime time) { this->integration_time_ = time; } + void set_als_meas_repeat_rate(MeasurementRepeatRate rate) { this->repeat_rate_ = rate; } + void set_als_glass_attenuation_factor(float factor) { this->glass_attenuation_factor_ = factor; } + + // Configuration setters : PS + // + void set_ps_high_threshold(uint16_t threshold) { this->ps_threshold_high_ = threshold; } + void set_ps_low_threshold(uint16_t threshold) { this->ps_threshold_low_ = threshold; } + void set_ps_cooldown_time_s(uint16_t time) { this->ps_cooldown_time_s_ = time; } + void set_ps_gain(PsGain gain) { this->ps_gain_ = gain; } + + // Sensors setters + // + void set_ambient_light_sensor(sensor::Sensor *sensor) { this->ambient_light_sensor_ = sensor; } + void set_full_spectrum_counts_sensor(sensor::Sensor *sensor) { this->full_spectrum_counts_sensor_ = sensor; } + void set_infrared_counts_sensor(sensor::Sensor *sensor) { this->infrared_counts_sensor_ = sensor; } + void set_actual_gain_sensor(sensor::Sensor *sensor) { this->actual_gain_sensor_ = sensor; } + void set_actual_integration_time_sensor(sensor::Sensor *sensor) { this->actual_integration_time_sensor_ = sensor; } + void set_proximity_counts_sensor(sensor::Sensor *sensor) { this->proximity_counts_sensor_ = sensor; } + + protected: + // + // Internal state machine, used to split all the actions into + // small steps in loop() to make sure we are not blocking execution + // + enum class State : uint8_t { + NOT_INITIALIZED, + DELAYED_SETUP, + IDLE, + WAITING_FOR_DATA, + COLLECTING_DATA_AUTO, + DATA_COLLECTED, + ADJUSTMENT_IN_PROGRESS, + READY_TO_PUBLISH, + KEEP_PUBLISHING + } state_{State::NOT_INITIALIZED}; + + LtrType ltr_type_{LtrType::LTR_TYPE_ALS_ONLY}; + + // + // Current measurements data + // + struct AlsReadings { + uint16_t ch0{0}; + uint16_t ch1{0}; + AlsGain gain{AlsGain::GAIN_1}; + IntegrationTime integration_time{IntegrationTime::INTEGRATION_TIME_100MS}; + float lux{0.0f}; + uint8_t number_of_adjustments{0}; + } als_readings_; + uint16_t ps_readings_{0xfffe}; + + inline bool is_als_() const { + return this->ltr_type_ == LtrType::LTR_TYPE_ALS_ONLY || this->ltr_type_ == LtrType::LTR_TYPE_ALS_AND_PS; + } + inline bool is_ps_() const { + return this->ltr_type_ == LtrType::LTR_TYPE_PS_ONLY || this->ltr_type_ == LtrType::LTR_TYPE_ALS_AND_PS; + } + + // + // Device interaction and data manipulation + // + bool check_part_number_(); + + void configure_reset_(); + void configure_als_(); + void configure_integration_time_(IntegrationTime time); + void configure_gain_(AlsGain gain); + DataAvail is_als_data_ready_(AlsReadings &data); + void read_sensor_data_(AlsReadings &data); + bool are_adjustments_required_(AlsReadings &data); + void apply_lux_calculation_(AlsReadings &data); + void publish_data_part_1_(AlsReadings &data); + void publish_data_part_2_(AlsReadings &data); + + void configure_ps_(); + uint16_t read_ps_data_(); + void check_and_trigger_ps_(); + + // + // Component configuration + // + bool automatic_mode_enabled_{true}; + AlsGain gain_{AlsGain::GAIN_1}; + IntegrationTime integration_time_{IntegrationTime::INTEGRATION_TIME_100MS}; + MeasurementRepeatRate repeat_rate_{MeasurementRepeatRate::REPEAT_RATE_500MS}; + float glass_attenuation_factor_{1.0}; + + uint16_t ps_cooldown_time_s_{5}; + PsGain ps_gain_{PsGain::PS_GAIN_16}; + uint16_t ps_threshold_high_{0xffff}; + uint16_t ps_threshold_low_{0x0000}; + + // + // Sensors for publishing data + // + sensor::Sensor *infrared_counts_sensor_{nullptr}; // direct reading CH1, infrared only + sensor::Sensor *full_spectrum_counts_sensor_{nullptr}; // direct reading CH0, infrared + visible light + sensor::Sensor *ambient_light_sensor_{nullptr}; // calculated lux + sensor::Sensor *actual_gain_sensor_{nullptr}; // actual gain of reading + sensor::Sensor *actual_integration_time_sensor_{nullptr}; // actual integration time + sensor::Sensor *proximity_counts_sensor_{nullptr}; // proximity sensor + + bool is_any_als_sensor_enabled_() const { + return this->ambient_light_sensor_ != nullptr || this->full_spectrum_counts_sensor_ != nullptr || + this->infrared_counts_sensor_ != nullptr || this->actual_gain_sensor_ != nullptr || + this->actual_integration_time_sensor_ != nullptr; + } + bool is_any_ps_sensor_enabled_() const { return this->proximity_counts_sensor_ != nullptr; } + + // + // Trigger section for the automations + // + friend class LTRPsHighTrigger; + friend class LTRPsLowTrigger; + + CallbackManager on_ps_high_trigger_callback_; + CallbackManager on_ps_low_trigger_callback_; + + void add_on_ps_high_trigger_callback_(std::function callback) { + this->on_ps_high_trigger_callback_.add(std::move(callback)); + } + + void add_on_ps_low_trigger_callback_(std::function callback) { + this->on_ps_low_trigger_callback_.add(std::move(callback)); + } +}; + +class LTRPsHighTrigger : public Trigger<> { + public: + explicit LTRPsHighTrigger(LTRAlsPsComponent *parent) { + parent->add_on_ps_high_trigger_callback_([this]() { this->trigger(); }); + } +}; + +class LTRPsLowTrigger : public Trigger<> { + public: + explicit LTRPsLowTrigger(LTRAlsPsComponent *parent) { + parent->add_on_ps_low_trigger_callback_([this]() { this->trigger(); }); + } +}; +} // namespace ltr_als_ps +} // namespace esphome diff --git a/esphome/components/ltr_als_ps/ltr_definitions.h b/esphome/components/ltr_als_ps/ltr_definitions.h new file mode 100644 index 0000000000..739445e9a0 --- /dev/null +++ b/esphome/components/ltr_als_ps/ltr_definitions.h @@ -0,0 +1,275 @@ +#pragma once + +#include + +namespace esphome { +namespace ltr_als_ps { + +enum class CommandRegisters : uint8_t { + ALS_CONTR = 0x80, // ALS operation mode control and SW reset + PS_CONTR = 0x81, // PS operation mode control + PS_LED = 0x82, // PS LED pulse frequency control + PS_N_PULSES = 0x83, // PS number of pulses control + PS_MEAS_RATE = 0x84, // PS measurement rate in active mode + MEAS_RATE = 0x85, // ALS measurement rate in active mode + PART_ID = 0x86, // Part Number ID and Revision ID + MANUFAC_ID = 0x87, // Manufacturer ID + ALS_DATA_CH1_0 = 0x88, // ALS measurement CH1 data, lower byte - infrared only + ALS_DATA_CH1_1 = 0x89, // ALS measurement CH1 data, upper byte - infrared only + ALS_DATA_CH0_0 = 0x8A, // ALS measurement CH0 data, lower byte - visible + infrared + ALS_DATA_CH0_1 = 0x8B, // ALS measurement CH0 data, upper byte - visible + infrared + ALS_PS_STATUS = 0x8C, // ALS PS new data status + PS_DATA_0 = 0x8D, // PS measurement data, lower byte + PS_DATA_1 = 0x8E, // PS measurement data, upper byte + ALS_PS_INTERRUPT = 0x8F, // Interrupt status + PS_THRES_UP_0 = 0x90, // PS interrupt upper threshold, lower byte + PS_THRES_UP_1 = 0x91, // PS interrupt upper threshold, upper byte + PS_THRES_LOW_0 = 0x92, // PS interrupt lower threshold, lower byte + PS_THRES_LOW_1 = 0x93, // PS interrupt lower threshold, upper byte + PS_OFFSET_1 = 0x94, // PS offset, upper byte + PS_OFFSET_0 = 0x95, // PS offset, lower byte + // 0x96 - reserved + ALS_THRES_UP_0 = 0x97, // ALS interrupt upper threshold, lower byte + ALS_THRES_UP_1 = 0x98, // ALS interrupt upper threshold, upper byte + ALS_THRES_LOW_0 = 0x99, // ALS interrupt lower threshold, lower byte + ALS_THRES_LOW_1 = 0x9A, // ALS interrupt lower threshold, upper byte + // 0x9B - reserved + // 0x9C - reserved + // 0x9D - reserved + INTERRUPT_PERSIST = 0x9E // Interrupt persistence filter +}; + +// ALS Sensor gain levels +enum AlsGain : uint8_t { + GAIN_1 = 0, // default + GAIN_2 = 1, + GAIN_4 = 2, + GAIN_8 = 3, + GAIN_48 = 6, + GAIN_96 = 7, +}; +static const uint8_t GAINS_COUNT = 6; + +// ALS Sensor integration times +enum IntegrationTime : uint8_t { + INTEGRATION_TIME_100MS = 0, // default + INTEGRATION_TIME_50MS = 1, + INTEGRATION_TIME_200MS = 2, + INTEGRATION_TIME_400MS = 3, + INTEGRATION_TIME_150MS = 4, + INTEGRATION_TIME_250MS = 5, + INTEGRATION_TIME_300MS = 6, + INTEGRATION_TIME_350MS = 7 +}; +static const uint8_t TIMES_COUNT = 8; + +// ALS Sensor measurement repeat rate +enum MeasurementRepeatRate { + REPEAT_RATE_50MS = 0, + REPEAT_RATE_100MS = 1, + REPEAT_RATE_200MS = 2, + REPEAT_RATE_500MS = 3, // default + REPEAT_RATE_1000MS = 4, + REPEAT_RATE_2000MS = 5 +}; + +// PS Sensor gain levels +enum PsGain : uint8_t { + PS_GAIN_16 = 0, // default + PS_GAIN_32 = 2, + PS_GAIN_64 = 3, +}; + +// PS Mode +enum PsMode : uint8_t { + PS_MODE_STANDBY_00 = 0, // default + PS_MODE_STANDBY_01 = 1, + PS_MODE_ACTIVE_10 = 2, + PS_MODE_ACTIVE_11 = 3, +}; + +// LED Pulse Modulation Frequency +enum PsLedFreq : uint8_t { + PS_LED_FREQ_30KHZ = 0, + PS_LED_FREQ_40KHZ = 1, + PS_LED_FREQ_50KHZ = 2, + PS_LED_FREQ_60KHZ = 3, // default + PS_LED_FREQ_70KHZ = 4, + PS_LED_FREQ_80KHZ = 5, + PS_LED_FREQ_90KHZ = 6, + PS_LED_FREQ_100KHZ = 7, +}; + +// LED current duty +enum PsLedDuty : uint8_t { + PS_LED_DUTY_25 = 0, + PS_LED_DUTY_50 = 1, + PS_LED_DUTY_75 = 2, + PS_LED_DUTY_100 = 3, // default +}; + +// LED pulsed current level +enum PsLedCurrent : uint8_t { + PS_LED_CURRENT_5MA = 0, + PS_LED_CURRENT_10MA = 1, + PS_LED_CURRENT_20MA = 2, + PS_LED_CURRENT_50MA = 3, + PS_LED_CURRENT_100MA = 4, // default + PS_LED_CURRENT_100MA1 = 5, + PS_LED_CURRENT_100MA2 = 6, + PS_LED_CURRENT_100MA3 = 7, +}; + +// PS measurement rate +enum PsMeasurementRate : uint8_t { + PS_MEAS_RATE_50MS = 0, + PS_MEAS_RATE_70MS = 1, + PS_MEAS_RATE_100MS = 2, + PS_MEAS_RATE_200MS = 3, + PS_MEAS_RATE_500MS = 4, // default + PS_MEAS_RATE_1000MS = 5, + PS_MEAS_RATE_2000MS = 6, + PS_MEAS_RATE_2000MS1 = 7, + PS_MEAS_RATE_10MS = 8, +}; + +// +// ALS_CONTR Register (0x80) +// +union AlsControlRegister { + uint8_t raw; + struct { + bool active_mode : 1; + bool sw_reset : 1; + AlsGain gain : 3; + uint8_t reserved : 3; + } __attribute__((packed)); +}; + +// +// PS_CONTR Register (0x81) +// +union PsControlRegister { + uint8_t raw; + struct { + bool ps_mode_xxx : 1; + bool ps_mode_active : 1; + PsGain ps_gain : 2; // only LTR-659/558 + bool reserved_4 : 1; + bool ps_saturation_indicator_enable : 1; + bool reserved_6 : 1; + bool reserved_7 : 1; + } __attribute__((packed)); +}; + +// +// PS_LED Register (0x82) +// +union PsLedRegister { + uint8_t raw; + struct { + PsLedCurrent ps_led_current : 3; + PsLedDuty ps_led_duty : 2; + PsLedFreq ps_led_freq : 3; + } __attribute__((packed)); +}; + +// +// PS_N_PULSES Register (0x83) +// +union PsNPulsesRegister { + uint8_t raw; + struct { + uint8_t number_of_pulses : 4; + uint8_t reserved : 4; + } __attribute__((packed)); +}; + +// +// PS_MEAS_RATE Register (0x84) +// +union PsMeasurementRateRegister { + uint8_t raw; + struct { + PsMeasurementRate ps_measurement_rate : 4; + uint8_t reserved : 4; + } __attribute__((packed)); +}; + +// +// ALS_MEAS_RATE Register (0x85) +// +union MeasurementRateRegister { + uint8_t raw; + struct { + MeasurementRepeatRate measurement_repeat_rate : 3; + IntegrationTime integration_time : 3; + bool reserved_6 : 1; + bool reserved_7 : 1; + } __attribute__((packed)); +}; + +// +// PART_ID Register (0x86) (Read Only) +// +union PartIdRegister { + uint8_t raw; + struct { + uint8_t part_number_id : 4; + uint8_t revision_id : 4; + } __attribute__((packed)); +}; + +// +// ALS_PS_STATUS Register (0x8C) (Read Only) +// +union AlsPsStatusRegister { + uint8_t raw; + struct { + bool ps_new_data : 1; // 0 - old data, 1 - new data + bool ps_interrupt : 1; // 0 - interrupt signal not active, 1 - interrupt signal active + bool als_new_data : 1; // 0 - old data, 1 - new data + bool als_interrupt : 1; // 0 - interrupt signal not active, 1 - interrupt signal active + AlsGain gain : 3; // current ALS gain + bool data_invalid : 1; + } __attribute__((packed)); +}; + +// +// PS_DATA_1 Register (0x8E) (Read Only) +// +union PsData1Register { + uint8_t raw; + struct { + uint8_t ps_data_high : 3; + uint8_t reserved : 4; + bool ps_saturation_flag : 1; + } __attribute__((packed)); +}; + +// +// INTERRUPT Register (0x8F) (Read Only) +// +union InterruptRegister { + uint8_t raw; + struct { + bool ps_interrupt : 1; + bool als_interrupt : 1; + bool interrupt_polarity : 1; // 0 - active low (default), 1 - active high + uint8_t reserved : 5; + } __attribute__((packed)); +}; + +// +// INTERRUPT_PERSIST Register (0x9E) +// +union InterruptPersistRegister { + uint8_t raw; + struct { + uint8_t als_persist : 4; // 0 - every ALS cycle, 1 - every 2 ALS cycles, ... 15 - every 16 ALS cycles + uint8_t ps_persist : 4; // 0 - every PS cycle, 1 - every 2 PS cycles, ... 15 - every 16 PS cycles + } __attribute__((packed)); +}; + +} // namespace ltr_als_ps +} // namespace esphome diff --git a/esphome/components/ltr_als_ps/sensor.py b/esphome/components/ltr_als_ps/sensor.py new file mode 100644 index 0000000000..ac9f7e6788 --- /dev/null +++ b/esphome/components/ltr_als_ps/sensor.py @@ -0,0 +1,271 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import automation +from esphome.components import i2c, sensor +from esphome.const import ( + CONF_ACTUAL_GAIN, + CONF_AMBIENT_LIGHT, + CONF_AUTO_MODE, + CONF_GAIN, + CONF_GLASS_ATTENUATION_FACTOR, + CONF_ID, + CONF_INTEGRATION_TIME, + CONF_NAME, + CONF_REPEAT, + CONF_TRIGGER_ID, + CONF_TYPE, + DEVICE_CLASS_DISTANCE, + DEVICE_CLASS_ILLUMINANCE, + ICON_BRIGHTNESS_5, + ICON_BRIGHTNESS_6, + ICON_TIMER, + STATE_CLASS_MEASUREMENT, + UNIT_LUX, + UNIT_MILLISECOND, +) + +CODEOWNERS = ["@latonita"] +DEPENDENCIES = ["i2c"] + +CONF_ACTUAL_INTEGRATION_TIME = "actual_integration_time" +CONF_FULL_SPECTRUM_COUNTS = "full_spectrum_counts" +CONF_INFRARED_COUNTS = "infrared_counts" +CONF_ON_PS_HIGH_THRESHOLD = "on_ps_high_threshold" +CONF_ON_PS_LOW_THRESHOLD = "on_ps_low_threshold" +CONF_PS_COOLDOWN = "ps_cooldown" +CONF_PS_COUNTS = "ps_counts" +CONF_PS_GAIN = "ps_gain" +CONF_PS_HIGH_THRESHOLD = "ps_high_threshold" +CONF_PS_LOW_THRESHOLD = "ps_low_threshold" +ICON_BRIGHTNESS_7 = "mdi:brightness-7" +ICON_GAIN = "mdi:multiplication" +ICON_PROXIMITY = "mdi:hand-wave-outline" +UNIT_COUNTS = "#" + +ltr_als_ps_ns = cg.esphome_ns.namespace("ltr_als_ps") + +LTRAlsPsComponent = ltr_als_ps_ns.class_( + "LTRAlsPsComponent", cg.PollingComponent, i2c.I2CDevice +) + +LtrType = ltr_als_ps_ns.enum("LtrType") +LTR_TYPES = { + "ALS": LtrType.LTR_TYPE_ALS_ONLY, + "PS": LtrType.LTR_TYPE_PS_ONLY, + "ALS_PS": LtrType.LTR_TYPE_ALS_AND_PS, +} + +AlsGain = ltr_als_ps_ns.enum("AlsGain") +ALS_GAINS = { + "1X": AlsGain.GAIN_1, + "2X": AlsGain.GAIN_2, + "4X": AlsGain.GAIN_4, + "8X": AlsGain.GAIN_8, + "48X": AlsGain.GAIN_48, + "96X": AlsGain.GAIN_96, +} + +IntegrationTime = ltr_als_ps_ns.enum("IntegrationTime") +INTEGRATION_TIMES = { + 50: IntegrationTime.INTEGRATION_TIME_50MS, + 100: IntegrationTime.INTEGRATION_TIME_100MS, + 150: IntegrationTime.INTEGRATION_TIME_150MS, + 200: IntegrationTime.INTEGRATION_TIME_200MS, + 250: IntegrationTime.INTEGRATION_TIME_250MS, + 300: IntegrationTime.INTEGRATION_TIME_300MS, + 350: IntegrationTime.INTEGRATION_TIME_350MS, + 400: IntegrationTime.INTEGRATION_TIME_400MS, +} + +MeasurementRepeatRate = ltr_als_ps_ns.enum("MeasurementRepeatRate") +MEASUREMENT_REPEAT_RATES = { + 50: MeasurementRepeatRate.REPEAT_RATE_50MS, + 100: MeasurementRepeatRate.REPEAT_RATE_100MS, + 200: MeasurementRepeatRate.REPEAT_RATE_200MS, + 500: MeasurementRepeatRate.REPEAT_RATE_500MS, + 1000: MeasurementRepeatRate.REPEAT_RATE_1000MS, + 2000: MeasurementRepeatRate.REPEAT_RATE_2000MS, +} + +PsGain = ltr_als_ps_ns.enum("PsGain") +PS_GAINS = { + "16X": PsGain.PS_GAIN_16, + "32X": PsGain.PS_GAIN_32, + "64X": PsGain.PS_GAIN_64, +} + +LTRPsHighTrigger = ltr_als_ps_ns.class_( + "LTRPsHighTrigger", automation.Trigger.template() +) +LTRPsLowTrigger = ltr_als_ps_ns.class_("LTRPsLowTrigger", automation.Trigger.template()) + + +def validate_integration_time(value): + value = cv.positive_time_period_milliseconds(value).total_milliseconds + return cv.enum(INTEGRATION_TIMES, int=True)(value) + + +def validate_repeat_rate(value): + value = cv.positive_time_period_milliseconds(value).total_milliseconds + return cv.enum(MEASUREMENT_REPEAT_RATES, int=True)(value) + + +def validate_time_and_repeat_rate(config): + integraton_time = config[CONF_INTEGRATION_TIME] + repeat_rate = config[CONF_REPEAT] + if integraton_time > repeat_rate: + raise cv.Invalid( + f"Measurement repeat rate ({repeat_rate}ms) shall be greater or equal to integration time ({integraton_time}ms)" + ) + return config + + +CONFIG_SCHEMA = cv.All( + cv.Schema( + { + cv.GenerateID(): cv.declare_id(LTRAlsPsComponent), + cv.Optional(CONF_TYPE, default="ALS_PS"): cv.enum(LTR_TYPES, upper=True), + cv.Optional(CONF_AUTO_MODE, default=True): cv.boolean, + cv.Optional(CONF_GAIN, default="1X"): cv.enum(ALS_GAINS, upper=True), + cv.Optional( + CONF_INTEGRATION_TIME, default="100ms" + ): validate_integration_time, + cv.Optional(CONF_REPEAT, default="500ms"): validate_repeat_rate, + cv.Optional(CONF_GLASS_ATTENUATION_FACTOR, default=1.0): cv.float_range( + min=1.0 + ), + cv.Optional( + CONF_PS_COOLDOWN, default="5s" + ): cv.positive_time_period_seconds, + cv.Optional(CONF_PS_GAIN, default="16X"): cv.enum(PS_GAINS, upper=True), + cv.Optional(CONF_PS_HIGH_THRESHOLD, default=65535): cv.int_range( + min=0, max=65535 + ), + cv.Optional(CONF_PS_LOW_THRESHOLD, default=0): cv.int_range( + min=0, max=65535 + ), + cv.Optional(CONF_ON_PS_HIGH_THRESHOLD): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LTRPsHighTrigger), + } + ), + cv.Optional(CONF_ON_PS_LOW_THRESHOLD): automation.validate_automation( + { + cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(LTRPsLowTrigger), + } + ), + cv.Optional(CONF_AMBIENT_LIGHT): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_LUX, + icon=ICON_BRIGHTNESS_6, + accuracy_decimals=1, + device_class=DEVICE_CLASS_ILLUMINANCE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_INFRARED_COUNTS): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_COUNTS, + icon=ICON_BRIGHTNESS_5, + accuracy_decimals=0, + device_class=DEVICE_CLASS_ILLUMINANCE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_FULL_SPECTRUM_COUNTS): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_COUNTS, + icon=ICON_BRIGHTNESS_7, + accuracy_decimals=0, + device_class=DEVICE_CLASS_ILLUMINANCE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_PS_COUNTS): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_COUNTS, + icon=ICON_PROXIMITY, + accuracy_decimals=0, + device_class=DEVICE_CLASS_DISTANCE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_ACTUAL_GAIN): cv.maybe_simple_value( + sensor.sensor_schema( + icon=ICON_GAIN, + accuracy_decimals=0, + device_class=DEVICE_CLASS_ILLUMINANCE, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + cv.Optional(CONF_ACTUAL_INTEGRATION_TIME): cv.maybe_simple_value( + sensor.sensor_schema( + unit_of_measurement=UNIT_MILLISECOND, + icon=ICON_TIMER, + accuracy_decimals=0, + state_class=STATE_CLASS_MEASUREMENT, + ), + key=CONF_NAME, + ), + } + ) + .extend(cv.polling_component_schema("60s")) + .extend(i2c.i2c_device_schema(0x29)), + validate_time_and_repeat_rate, +) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + await i2c.register_i2c_device(var, config) + + if als_config := config.get(CONF_AMBIENT_LIGHT): + sens = await sensor.new_sensor(als_config) + cg.add(var.set_ambient_light_sensor(sens)) + + if infrared_cnt_config := config.get(CONF_INFRARED_COUNTS): + sens = await sensor.new_sensor(infrared_cnt_config) + cg.add(var.set_infrared_counts_sensor(sens)) + + if full_spect_cnt_config := config.get(CONF_FULL_SPECTRUM_COUNTS): + sens = await sensor.new_sensor(full_spect_cnt_config) + cg.add(var.set_full_spectrum_counts_sensor(sens)) + + if act_gain_config := config.get(CONF_ACTUAL_GAIN): + sens = await sensor.new_sensor(act_gain_config) + cg.add(var.set_actual_gain_sensor(sens)) + + if act_itime_config := config.get(CONF_ACTUAL_INTEGRATION_TIME): + sens = await sensor.new_sensor(act_itime_config) + cg.add(var.set_actual_integration_time_sensor(sens)) + + if prox_cnt_config := config.get(CONF_PS_COUNTS): + sens = await sensor.new_sensor(prox_cnt_config) + cg.add(var.set_proximity_counts_sensor(sens)) + + for prox_high_tr in config.get(CONF_ON_PS_HIGH_THRESHOLD, []): + trigger = cg.new_Pvariable(prox_high_tr[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], prox_high_tr) + + for prox_low_tr in config.get(CONF_ON_PS_LOW_THRESHOLD, []): + trigger = cg.new_Pvariable(prox_low_tr[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], prox_low_tr) + + cg.add(var.set_ltr_type(config[CONF_TYPE])) + + cg.add(var.set_als_auto_mode(config[CONF_AUTO_MODE])) + cg.add(var.set_als_gain(config[CONF_GAIN])) + cg.add(var.set_als_integration_time(config[CONF_INTEGRATION_TIME])) + cg.add(var.set_als_meas_repeat_rate(config[CONF_REPEAT])) + cg.add(var.set_als_glass_attenuation_factor(config[CONF_GLASS_ATTENUATION_FACTOR])) + + cg.add(var.set_ps_cooldown_time_s(config[CONF_PS_COOLDOWN])) + cg.add(var.set_ps_gain(config[CONF_PS_GAIN])) + cg.add(var.set_ps_high_threshold(config[CONF_PS_HIGH_THRESHOLD])) + cg.add(var.set_ps_low_threshold(config[CONF_PS_LOW_THRESHOLD])) diff --git a/esphome/components/veml7700/sensor.py b/esphome/components/veml7700/sensor.py index 7ce05b47e4..7b0f75e70c 100644 --- a/esphome/components/veml7700/sensor.py +++ b/esphome/components/veml7700/sensor.py @@ -3,6 +3,7 @@ import esphome.config_validation as cv from esphome.components import i2c, sensor from esphome.const import ( CONF_ACTUAL_GAIN, + CONF_AMBIENT_LIGHT, CONF_AUTO_MODE, CONF_FULL_SPECTRUM, CONF_GAIN, @@ -11,13 +12,13 @@ from esphome.const import ( CONF_INFRARED, CONF_INTEGRATION_TIME, CONF_NAME, - UNIT_LUX, - UNIT_MILLISECOND, + DEVICE_CLASS_ILLUMINANCE, ICON_BRIGHTNESS_5, ICON_BRIGHTNESS_6, ICON_TIMER, - DEVICE_CLASS_ILLUMINANCE, STATE_CLASS_MEASUREMENT, + UNIT_LUX, + UNIT_MILLISECOND, ) CODEOWNERS = ["@latonita"] @@ -28,7 +29,6 @@ ICON_MULTIPLICATION = "mdi:multiplication" ICON_BRIGHTNESS_7 = "mdi:brightness-7" CONF_ACTUAL_INTEGRATION_TIME = "actual_integration_time" -CONF_AMBIENT_LIGHT = "ambient_light" CONF_AMBIENT_LIGHT_COUNTS = "ambient_light_counts" CONF_FULL_SPECTRUM_COUNTS = "full_spectrum_counts" CONF_LUX_COMPENSATION = "lux_compensation" diff --git a/esphome/const.py b/esphome/const.py index 1aafffb5d0..ed0a9b1f64 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -49,6 +49,7 @@ CONF_AFTER = "after" CONF_ALLOW_OTHER_USES = "allow_other_uses" CONF_ALPHA = "alpha" CONF_ALTITUDE = "altitude" +CONF_AMBIENT_LIGHT = "ambient_light" CONF_ANALOG = "analog" CONF_AND = "and" CONF_ANGLE = "angle" diff --git a/tests/components/ltr_als_ps/common.yaml b/tests/components/ltr_als_ps/common.yaml new file mode 100644 index 0000000000..aa5c8abed7 --- /dev/null +++ b/tests/components/ltr_als_ps/common.yaml @@ -0,0 +1,11 @@ +sensor: + - platform: ltr_als_ps + address: 0x23 + i2c_id: i2c_als_ps + gain: 1x + integration_time: 100ms + ps_cooldown: 5 s + ambient_light: "Ambient light" + full_spectrum_counts: "Full spectrum counts" + infrared_counts: "Infrared counts" + actual_gain: "Actual gain" diff --git a/tests/components/ltr_als_ps/test.esp32-c3-idf.yaml b/tests/components/ltr_als_ps/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..d64d70f018 --- /dev/null +++ b/tests/components/ltr_als_ps/test.esp32-c3-idf.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 5 + sda: 4 + +<<: !include common.yaml diff --git a/tests/components/ltr_als_ps/test.esp32-c3.yaml b/tests/components/ltr_als_ps/test.esp32-c3.yaml new file mode 100644 index 0000000000..d64d70f018 --- /dev/null +++ b/tests/components/ltr_als_ps/test.esp32-c3.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 5 + sda: 4 + +<<: !include common.yaml diff --git a/tests/components/ltr_als_ps/test.esp32-idf.yaml b/tests/components/ltr_als_ps/test.esp32-idf.yaml new file mode 100644 index 0000000000..2349292a64 --- /dev/null +++ b/tests/components/ltr_als_ps/test.esp32-idf.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 16 + sda: 17 + +<<: !include common.yaml diff --git a/tests/components/ltr_als_ps/test.esp32.yaml b/tests/components/ltr_als_ps/test.esp32.yaml new file mode 100644 index 0000000000..2349292a64 --- /dev/null +++ b/tests/components/ltr_als_ps/test.esp32.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 16 + sda: 17 + +<<: !include common.yaml diff --git a/tests/components/ltr_als_ps/test.esp8266.yaml b/tests/components/ltr_als_ps/test.esp8266.yaml new file mode 100644 index 0000000000..d64d70f018 --- /dev/null +++ b/tests/components/ltr_als_ps/test.esp8266.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 5 + sda: 4 + +<<: !include common.yaml diff --git a/tests/components/ltr_als_ps/test.rp2040.yaml b/tests/components/ltr_als_ps/test.rp2040.yaml new file mode 100644 index 0000000000..d64d70f018 --- /dev/null +++ b/tests/components/ltr_als_ps/test.rp2040.yaml @@ -0,0 +1,6 @@ +i2c: + - id: i2c_als_ps + scl: 5 + sda: 4 + +<<: !include common.yaml From 2894a138e78418d2f61845fca6832053ca48292a Mon Sep 17 00:00:00 2001 From: NonaSuomy Date: Fri, 31 May 2024 01:13:11 -0400 Subject: [PATCH 282/313] Update const.py added missing millimeter (#6834) * Update const.py added missing millimeter Added missing millimeter * Fixed UNIT_MILLIMETER in multiple locations. --- esphome/components/a02yyuw/sensor.py | 4 ++-- esphome/components/hydreon_rgxx/sensor.py | 8 ++++---- esphome/components/mopeka_pro_check/sensor.py | 3 +-- esphome/components/mopeka_std_check/sensor.py | 3 +-- esphome/const.py | 1 + 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/esphome/components/a02yyuw/sensor.py b/esphome/components/a02yyuw/sensor.py index 5232b04546..d491a51be9 100644 --- a/esphome/components/a02yyuw/sensor.py +++ b/esphome/components/a02yyuw/sensor.py @@ -4,11 +4,11 @@ from esphome.const import ( STATE_CLASS_MEASUREMENT, ICON_ARROW_EXPAND_VERTICAL, DEVICE_CLASS_DISTANCE, + UNIT_MILLIMETER, ) CODEOWNERS = ["@TH-Braemer"] DEPENDENCIES = ["uart"] -UNIT_MILLIMETERS = "mm" a02yyuw_ns = cg.esphome_ns.namespace("a02yyuw") A02yyuwComponent = a02yyuw_ns.class_( @@ -17,7 +17,7 @@ A02yyuwComponent = a02yyuw_ns.class_( CONFIG_SCHEMA = sensor.sensor_schema( A02yyuwComponent, - unit_of_measurement=UNIT_MILLIMETERS, + unit_of_measurement=UNIT_MILLIMETER, icon=ICON_ARROW_EXPAND_VERTICAL, accuracy_decimals=0, state_class=STATE_CLASS_MEASUREMENT, diff --git a/esphome/components/hydreon_rgxx/sensor.py b/esphome/components/hydreon_rgxx/sensor.py index 72b74bf624..fb2099c85e 100644 --- a/esphome/components/hydreon_rgxx/sensor.py +++ b/esphome/components/hydreon_rgxx/sensor.py @@ -12,13 +12,13 @@ from esphome.const import ( STATE_CLASS_MEASUREMENT, STATE_CLASS_TOTAL_INCREASING, UNIT_CELSIUS, + UNIT_MILLIMETER, ICON_THERMOMETER, ) from . import RGModel, RG15Resolution, HydreonRGxxComponent UNIT_INTENSITY = "intensity" -UNIT_MILLIMETERS = "mm" UNIT_MILLIMETERS_PER_HOUR = "mm/h" CONF_ACC = "acc" @@ -85,19 +85,19 @@ CONFIG_SCHEMA = cv.All( ), cv.Optional(CONF_RESOLUTION): cv.enum(RG15_RESOLUTION, upper=False), cv.Optional(CONF_ACC): sensor.sensor_schema( - unit_of_measurement=UNIT_MILLIMETERS, + unit_of_measurement=UNIT_MILLIMETER, accuracy_decimals=2, device_class=DEVICE_CLASS_PRECIPITATION, state_class=STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_EVENT_ACC): sensor.sensor_schema( - unit_of_measurement=UNIT_MILLIMETERS, + unit_of_measurement=UNIT_MILLIMETER, accuracy_decimals=2, device_class=DEVICE_CLASS_PRECIPITATION, state_class=STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_TOTAL_ACC): sensor.sensor_schema( - unit_of_measurement=UNIT_MILLIMETERS, + unit_of_measurement=UNIT_MILLIMETER, accuracy_decimals=2, device_class=DEVICE_CLASS_PRECIPITATION, state_class=STATE_CLASS_TOTAL_INCREASING, diff --git a/esphome/components/mopeka_pro_check/sensor.py b/esphome/components/mopeka_pro_check/sensor.py index 51a515ef0c..0ba33e94de 100644 --- a/esphome/components/mopeka_pro_check/sensor.py +++ b/esphome/components/mopeka_pro_check/sensor.py @@ -12,6 +12,7 @@ from esphome.const import ( CONF_TEMPERATURE, DEVICE_CLASS_TEMPERATURE, UNIT_CELSIUS, + UNIT_MILLIMETER, STATE_CLASS_MEASUREMENT, CONF_BATTERY_LEVEL, DEVICE_CLASS_BATTERY, @@ -25,8 +26,6 @@ ICON_PROPANE_TANK = "mdi:propane-tank" TANK_TYPE_CUSTOM = "CUSTOM" -UNIT_MILLIMETER = "mm" - def small_distance(value): """small_distance is stored in mm""" diff --git a/esphome/components/mopeka_std_check/sensor.py b/esphome/components/mopeka_std_check/sensor.py index bbba798e95..ac745cf3d5 100644 --- a/esphome/components/mopeka_std_check/sensor.py +++ b/esphome/components/mopeka_std_check/sensor.py @@ -12,6 +12,7 @@ from esphome.const import ( CONF_TEMPERATURE, DEVICE_CLASS_TEMPERATURE, UNIT_CELSIUS, + UNIT_MILLIMETER, STATE_CLASS_MEASUREMENT, CONF_BATTERY_LEVEL, DEVICE_CLASS_BATTERY, @@ -26,8 +27,6 @@ ICON_PROPANE_TANK = "mdi:propane-tank" TANK_TYPE_CUSTOM = "CUSTOM" -UNIT_MILLIMETER = "mm" - def small_distance(value): """small_distance is stored in mm""" diff --git a/esphome/const.py b/esphome/const.py index ed0a9b1f64..dcb353ab1c 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1035,6 +1035,7 @@ UNIT_MICROSIEMENS_PER_CENTIMETER = "µS/cm" UNIT_MICROSILVERTS_PER_HOUR = "µSv/h" UNIT_MICROTESLA = "µT" UNIT_MILLIGRAMS_PER_CUBIC_METER = "mg/m³" +UNIT_MILLIMETER = "mm" UNIT_MILLISECOND = "ms" UNIT_MILLISIEMENS_PER_CENTIMETER = "mS/cm" UNIT_MINUTE = "min" From 1f301df51d4389f16e6a059c2ac87186c9631be8 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Fri, 31 May 2024 00:49:11 -0500 Subject: [PATCH 283/313] Fix log message in VA for IDF 5 (#6839) --- esphome/components/voice_assistant/voice_assistant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index c2fd14fbd5..e4fd2f2e9d 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -815,7 +815,7 @@ void VoiceAssistant::on_timer_event(const api::VoiceAssistantTimerEventResponse }; this->timers_[timer.id] = timer; ESP_LOGD(TAG, "Timer Event"); - ESP_LOGD(TAG, " Type: %d", msg.event_type); + ESP_LOGD(TAG, " Type: %" PRId32, msg.event_type); ESP_LOGD(TAG, " %s", timer.to_string().c_str()); switch (msg.event_type) { From 41e13fa6f437cac86916a99cf45ef8ce1a627d44 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 31 May 2024 17:49:48 -0700 Subject: [PATCH 284/313] Replace random non-ascii-print characters with standard substitutes (#6840) --- esphome/components/api/custom_api_device.h | 2 +- esphome/components/ethernet/ethernet_component.cpp | 8 ++++---- esphome/components/feedback/feedback_cover.cpp | 4 ++-- esphome/components/max6956/max6956.h | 2 +- esphome/components/ntc/sensor.py | 2 +- esphome/components/wifi/wifi_component.cpp | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/esphome/components/api/custom_api_device.h b/esphome/components/api/custom_api_device.h index 9f125a6149..845a35fc54 100644 --- a/esphome/components/api/custom_api_device.h +++ b/esphome/components/api/custom_api_device.h @@ -105,7 +105,7 @@ class CustomAPIDevice { /** Subscribe to the state (or attribute state) of an entity from Home Assistant. * * Usage: - *å + * * ```cpp * void setup() override { * subscribe_homeassistant_state(&CustomNativeAPI::on_state_changed, "sensor.weather_forecast"); diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 2a4e5cbad3..087a3b1750 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -576,11 +576,11 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { /* * Bit 7 is `RMII Reference Clock Select`. Default is `0`. * KSZ8081RNA: - * 0 - clock input to XI (Pin 8) is 25 MHz for RMII – 25 MHz clock mode. - * 1 - clock input to XI (Pin 8) is 50 MHz for RMII – 50 MHz clock mode. + * 0 - clock input to XI (Pin 8) is 25 MHz for RMII - 25 MHz clock mode. + * 1 - clock input to XI (Pin 8) is 50 MHz for RMII - 50 MHz clock mode. * KSZ8081RND: - * 0 - clock input to XI (Pin 8) is 50 MHz for RMII – 50 MHz clock mode. - * 1 - clock input to XI (Pin 8) is 25 MHz (driven clock only, not a crystal) for RMII – 25 MHz clock mode. + * 0 - clock input to XI (Pin 8) is 50 MHz for RMII - 50 MHz clock mode. + * 1 - clock input to XI (Pin 8) is 25 MHz (driven clock only, not a crystal) for RMII - 25 MHz clock mode. */ if ((phy_control_2 & (1 << 7)) != (1 << 7)) { phy_control_2 |= 1 << 7; diff --git a/esphome/components/feedback/feedback_cover.cpp b/esphome/components/feedback/feedback_cover.cpp index 117c626f58..fa3166ba65 100644 --- a/esphome/components/feedback/feedback_cover.cpp +++ b/esphome/components/feedback/feedback_cover.cpp @@ -244,7 +244,7 @@ void FeedbackCover::loop() { // update current position at requested interval, regardless of who started the movement // so that we also update UI if there was an external movement - // don´t save intermediate positions + // don't save intermediate positions if (now - this->last_publish_time_ > this->update_interval_) { this->publish_state(false); this->last_publish_time_ = now; @@ -274,7 +274,7 @@ void FeedbackCover::control(const CoverCall &call) { if (pos == this->position) { // already at target, - // for covers with built in end stop, if we don´t have sensors we should send the command again + // for covers with built in end stop, if we don't have sensors we should send the command again // to make sure the assumed state is not wrong if (this->has_built_in_endstop_ && ((pos == COVER_OPEN #ifdef USE_BINARY_SENSOR diff --git a/esphome/components/max6956/max6956.h b/esphome/components/max6956/max6956.h index 141164ab30..759fa45b07 100644 --- a/esphome/components/max6956/max6956.h +++ b/esphome/components/max6956/max6956.h @@ -29,7 +29,7 @@ enum MAX6956GPIORegisters { MAX6956_PORT_CONFIG_START = 0x09, // Port Configuration P7, P6, P5, P4 MAX6956_CURRENT_START = 0x12, // Current054 MAX6956_1PORT_VALUE_START = 0x20, // Port 0 only (virtual port, no action) - MAX6956_8PORTS_VALUE_START = 0x44, // 8 ports 4–11 (data bits D0–D7) + MAX6956_8PORTS_VALUE_START = 0x44, // 8 ports 4-11 (data bits D0-D7) }; enum MAX6956GPIOFlag { FLAG_LED = 0x20 }; diff --git a/esphome/components/ntc/sensor.py b/esphome/components/ntc/sensor.py index 06fc55fc43..961511fe00 100644 --- a/esphome/components/ntc/sensor.py +++ b/esphome/components/ntc/sensor.py @@ -100,7 +100,7 @@ def process_calibration(value): elif isinstance(value, list): if len(value) != 3: raise cv.Invalid( - "Steinhart–Hart Calibration must consist of exactly three values" + "Steinhart-Hart Calibration must consist of exactly three values" ) value = cv.Schema([validate_calibration_parameter])(value) a, b, c = calc_steinhart_hart(value) diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 2f34f2b05b..1359e0b7c5 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -58,7 +58,7 @@ void WiFiComponent::setup() { void WiFiComponent::start() { ESP_LOGCONFIG(TAG, "Starting WiFi..."); - ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty().c_str()); + ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty().c_str()); this->last_connected_ = millis(); uint32_t hash = this->has_sta() ? fnv1_hash(App.get_compilation_time()) : 88491487UL; From 2beb1f033611c0984c3c4d11734e967cc8a1416f Mon Sep 17 00:00:00 2001 From: Simone Rossetto Date: Sat, 1 Jun 2024 04:36:51 +0200 Subject: [PATCH 285/313] Wireguard support for bk72 microcontrollers (#6842) * Bump esp_wireguard to v0.4.1 * add support for bk72 microcontrollers (thanks to kuba2k2) * fix compilation error using esp-idf v5 (thanks to kbx81) * fix crash on vpn disconnection with alive tcp connection (thanks to jefftharris) * Disable ipv6 for bk72 wireguard test * Completely remove ipv6 entry from bk72 wg test --- esphome/components/wireguard/__init__.py | 2 +- platformio.ini | 8 +-- tests/components/wireguard/test.bk72xx.yaml | 59 +++++++++++++++++++++ 3 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 tests/components/wireguard/test.bk72xx.yaml diff --git a/esphome/components/wireguard/__init__.py b/esphome/components/wireguard/__init__.py index 7612c7d964..177ad6d356 100644 --- a/esphome/components/wireguard/__init__.py +++ b/esphome/components/wireguard/__init__.py @@ -122,7 +122,7 @@ async def to_code(config): # the '+1' modifier is relative to the device's own address that will # be automatically added to the provided list. cg.add_build_flag(f"-DCONFIG_WIREGUARD_MAX_SRC_IPS={len(allowed_ips) + 1}") - cg.add_library("droscy/esp_wireguard", "0.4.0") + cg.add_library("droscy/esp_wireguard", "0.4.1") await cg.register_component(var, config) diff --git a/platformio.ini b/platformio.ini index fd0ae7c6d8..6b34b2f05d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -94,7 +94,7 @@ lib_deps = ESP8266mDNS ; mdns (Arduino built-in) DNSServer ; captive_portal (Arduino built-in) crankyoldgit/IRremoteESP8266@~2.8.4 ; heatpumpir - droscy/esp_wireguard@0.4.0 ; wireguard + droscy/esp_wireguard@0.4.1 ; wireguard build_flags = ${common:arduino.build_flags} -Wno-nonnull-compare @@ -124,7 +124,7 @@ lib_deps = DNSServer ; captive_portal (Arduino built-in) esphome/ESP32-audioI2S@2.0.7 ; i2s_audio crankyoldgit/IRremoteESP8266@~2.8.4 ; heatpumpir - droscy/esp_wireguard@0.4.0 ; wireguard + droscy/esp_wireguard@0.4.1 ; wireguard build_flags = ${common:arduino.build_flags} -DUSE_ESP32 @@ -143,7 +143,7 @@ framework = espidf lib_deps = ${common:idf.lib_deps} espressif/esp32-camera@1.0.0 ; esp32_camera - droscy/esp_wireguard@0.4.0 ; wireguard + droscy/esp_wireguard@0.4.1 ; wireguard build_flags = ${common:idf.build_flags} -Wno-nonnull-compare @@ -174,6 +174,8 @@ build_flags = extends = common:arduino platform = libretiny framework = arduino +lib_deps = + droscy/esp_wireguard@0.4.1 ; wireguard build_flags = ${common:arduino.build_flags} -DUSE_LIBRETINY diff --git a/tests/components/wireguard/test.bk72xx.yaml b/tests/components/wireguard/test.bk72xx.yaml new file mode 100644 index 0000000000..85325139a9 --- /dev/null +++ b/tests/components/wireguard/test.bk72xx.yaml @@ -0,0 +1,59 @@ +wifi: + ssid: "MySSID1" + password: "password1" + +time: + - platform: sntp + +wireguard: + address: 172.16.34.100 + netmask: 255.255.255.0 + # NEVER use the following keys for your vpn, they are now public! + private_key: wPBMxtNYH3mChicrbpsRpZIasIdPq3yZuthn23FbGG8= + peer_public_key: Hs2JfikvYU03/Kv3YoAs1hrUIPPTEkpsZKSPUljE9yc= + peer_preshared_key: 20fjM5GRnSolGPC5SRj9ljgIUyQfruv0B0bvLl3Yt60= + peer_endpoint: wg.server.example + peer_persistent_keepalive: 25s + peer_allowed_ips: + - 172.16.34.0/24 + - 192.168.4.0/24 + +binary_sensor: + - platform: wireguard + status: + name: 'WireGuard Status' + enabled: + name: 'WireGuard Enabled' + +sensor: + - platform: wireguard + latest_handshake: + name: 'WireGuard Latest Handshake' + +text_sensor: + - platform: wireguard + address: + name: 'WireGuard Address' + +button: + - platform: template + name: 'Toggle WireGuard' + entity_category: config + on_press: + - if: + condition: wireguard.enabled + then: + - wireguard.disable: + else: + - wireguard.enable: + + - platform: template + name: 'Log WireGuard status' + entity_category: config + on_press: + - if: + condition: wireguard.peer_online + then: + - logger.log: 'wireguard remote peer is online' + else: + - logger.log: 'wireguard remote peer is offline' From 2353b2b5e1e66874a84f5f0e1e2ae0fff5780407 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Sat, 1 Jun 2024 18:40:50 -0400 Subject: [PATCH 286/313] Add messages when WiFi and Ethernet components set 'warning' flag. (#6850) --- esphome/components/ethernet/ethernet_component.cpp | 2 +- esphome/components/wifi/wifi_component.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 087a3b1750..7672dc2dcb 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -410,7 +410,7 @@ void EthernetComponent::start_connect_() { global_eth_component->ipv6_count_ = 0; #endif /* USE_NETWORK_IPV6 */ this->connect_begin_ = millis(); - this->status_set_warning(); + this->status_set_warning("waiting for IP configuration"); esp_err_t err; err = esp_netif_set_hostname(this->eth_netif_, App.get_name().c_str()); diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index 1359e0b7c5..8c40f87879 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -135,7 +135,7 @@ void WiFiComponent::loop() { switch (this->state_) { case WIFI_COMPONENT_STATE_COOLDOWN: { - this->status_set_warning(); + this->status_set_warning("waiting to reconnect"); if (millis() - this->action_started_ > 5000) { if (this->fast_connect_ || this->retry_hidden_) { this->start_connecting(this->sta_[0], false); @@ -146,13 +146,13 @@ void WiFiComponent::loop() { break; } case WIFI_COMPONENT_STATE_STA_SCANNING: { - this->status_set_warning(); + this->status_set_warning("scanning for networks"); this->check_scanning_finished(); break; } case WIFI_COMPONENT_STATE_STA_CONNECTING: case WIFI_COMPONENT_STATE_STA_CONNECTING_2: { - this->status_set_warning(); + this->status_set_warning("associating to network"); this->check_connecting_finished(); break; } From b8d2a6f574e4f49d12d3e677220c9dd92a364aae Mon Sep 17 00:00:00 2001 From: Jimmy Hedman Date: Mon, 3 Jun 2024 05:23:49 +0200 Subject: [PATCH 287/313] [sntp] fix for ESP-IDF > 5.0 (#6769) * Make sntp work with ESP-IDF >= 5.0 * Set operatingmode on other than ESP-IDF --------- Co-authored-by: Keith Burzinski --- esphome/components/sntp/sntp_component.cpp | 23 +++++++++------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/esphome/components/sntp/sntp_component.cpp b/esphome/components/sntp/sntp_component.cpp index 6a60e8d5c1..a0e791be75 100644 --- a/esphome/components/sntp/sntp_component.cpp +++ b/esphome/components/sntp/sntp_component.cpp @@ -1,16 +1,11 @@ #include "sntp_component.h" #include "esphome/core/log.h" -#if defined(USE_ESP32) || defined(USE_LIBRETINY) -#include "lwip/apps/sntp.h" #ifdef USE_ESP_IDF #include "esp_sntp.h" -#endif -#endif -#ifdef USE_ESP8266 +#elif USE_ESP8266 #include "sntp.h" -#endif -#ifdef USE_RP2040 +#else #include "lwip/apps/sntp.h" #endif @@ -27,14 +22,14 @@ static const char *const TAG = "sntp"; void SNTPComponent::setup() { #ifndef USE_HOST ESP_LOGCONFIG(TAG, "Setting up SNTP..."); -#if defined(USE_ESP32) || defined(USE_LIBRETINY) - if (sntp_enabled()) { - sntp_stop(); +#if defined(USE_ESP_IDF) + if (esp_sntp_enabled()) { + esp_sntp_stop(); } - sntp_setoperatingmode(SNTP_OPMODE_POLL); -#endif -#ifdef USE_ESP8266 + esp_sntp_setoperatingmode(ESP_SNTP_OPMODE_POLL); +#else sntp_stop(); + sntp_setoperatingmode(SNTP_OPMODE_POLL); #endif sntp_setservername(0, strdup(this->server_1_.c_str())); @@ -45,7 +40,7 @@ void SNTPComponent::setup() { sntp_setservername(2, strdup(this->server_3_.c_str())); } #ifdef USE_ESP_IDF - sntp_set_sync_interval(this->get_update_interval()); + esp_sntp_set_sync_interval(this->get_update_interval()); #endif sntp_init(); From 05491e756bb76c43c669009ac7afb5da877b5ee1 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Mon, 3 Jun 2024 18:34:47 -0700 Subject: [PATCH 288/313] Avoid unsafe git error when container user and file config volume permissions don't match (#6843) --- docker/Dockerfile | 3 +++ script/setup | 5 ----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 3c661b7e1c..f6234235f7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -100,6 +100,9 @@ RUN --mount=type=tmpfs,target=/root/.cargo if [ "$TARGETARCH$TARGETVARIANT" = "a --break-system-packages --no-cache-dir -r /requirements.txt -r /requirements_optional.txt \ && /platformio_install_deps.py /platformio.ini --libraries +# Avoid unsafe git error when container user and file config volume permissions don't match +RUN git config --system --add safe.directory '/config/*' + # ======================= docker-type image ======================= FROM base AS docker diff --git a/script/setup b/script/setup index 1a18a6a9ea..aeb1b39bc1 100755 --- a/script/setup +++ b/script/setup @@ -13,11 +13,6 @@ if [ ! -n "$DEVCONTAINER" ] && [ ! -n "$VIRTUAL_ENV" ] && [ ! "$ESPHOME_NO_VENV" source $location fi -# Avoid unsafe git error when running inside devcontainer -if [ -n "$DEVCONTAINER" ]; then - git config --global --add safe.directory "$PWD" -fi - pip3 install -r requirements.txt -r requirements_optional.txt -r requirements_test.txt -r requirements_dev.txt pip3 install setuptools wheel pip3 install -e ".[dev,test,displays]" --config-settings editable_mode=compat From 78b48209aa2456e05bc2c94357e58809d9c7403f Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Mon, 3 Jun 2024 19:57:05 -0700 Subject: [PATCH 289/313] Add Ethernet MAC address to ethernet_info (#6835) --- .../ethernet/ethernet_component.cpp | 54 +++++++++++++------ .../components/ethernet/ethernet_component.h | 4 ++ .../ethernet_info_text_sensor.cpp | 1 + .../ethernet_info/ethernet_info_text_sensor.h | 7 +++ .../components/ethernet_info/text_sensor.py | 11 ++++ tests/components/ethernet_info/common.yaml | 2 + 6 files changed, 63 insertions(+), 16 deletions(-) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 7672dc2dcb..6bb9732fef 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -28,6 +28,13 @@ EthernetComponent *global_eth_component; // NOLINT(cppcoreguidelines-avoid-non- return; \ } +#define ESPHL_ERROR_CHECK_RET(err, message, ret) \ + if ((err) != ESP_OK) { \ + ESP_LOGE(TAG, message ": (%d) %s", err, esp_err_to_name(err)); \ + this->mark_failed(); \ + return ret; \ + } + EthernetComponent::EthernetComponent() { global_eth_component = this; } void EthernetComponent::setup() { @@ -498,22 +505,9 @@ void EthernetComponent::dump_connect_params_() { } #endif /* USE_NETWORK_IPV6 */ - esp_err_t err; - - uint8_t mac[6]; - err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_MAC_ADDR, &mac); - ESPHL_ERROR_CHECK(err, "ETH_CMD_G_MAC error"); - ESP_LOGCONFIG(TAG, " MAC Address: %02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - - eth_duplex_t duplex_mode; - err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_DUPLEX_MODE, &duplex_mode); - ESPHL_ERROR_CHECK(err, "ETH_CMD_G_DUPLEX_MODE error"); - ESP_LOGCONFIG(TAG, " Is Full Duplex: %s", YESNO(duplex_mode == ETH_DUPLEX_FULL)); - - eth_speed_t speed; - err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_SPEED, &speed); - ESPHL_ERROR_CHECK(err, "ETH_CMD_G_SPEED error"); - ESP_LOGCONFIG(TAG, " Link Speed: %u", speed == ETH_SPEED_100M ? 100 : 10); + ESP_LOGCONFIG(TAG, " MAC Address: %s", this->get_eth_mac_address_pretty().c_str()); + ESP_LOGCONFIG(TAG, " Is Full Duplex: %s", YESNO(this->get_duplex_mode() == ETH_DUPLEX_FULL)); + ESP_LOGCONFIG(TAG, " Link Speed: %u", this->get_link_speed() == ETH_SPEED_100M ? 100 : 10); } #ifdef USE_ETHERNET_SPI @@ -546,6 +540,34 @@ std::string EthernetComponent::get_use_address() const { void EthernetComponent::set_use_address(const std::string &use_address) { this->use_address_ = use_address; } +void EthernetComponent::get_eth_mac_address_raw(uint8_t *mac) { + esp_err_t err; + err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_MAC_ADDR, mac); + ESPHL_ERROR_CHECK(err, "ETH_CMD_G_MAC error"); +} + +std::string EthernetComponent::get_eth_mac_address_pretty() { + uint8_t mac[6]; + get_mac_address_raw(mac); + return str_snprintf("%02X:%02X:%02X:%02X:%02X:%02X", 17, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); +} + +eth_duplex_t EthernetComponent::get_duplex_mode() { + esp_err_t err; + eth_duplex_t duplex_mode; + err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_DUPLEX_MODE, &duplex_mode); + ESPHL_ERROR_CHECK_RET(err, "ETH_CMD_G_DUPLEX_MODE error", ETH_DUPLEX_HALF); + return duplex_mode; +} + +eth_speed_t EthernetComponent::get_link_speed() { + esp_err_t err; + eth_speed_t speed; + err = esp_eth_ioctl(this->eth_handle_, ETH_CMD_G_SPEED, &speed); + ESPHL_ERROR_CHECK_RET(err, "ETH_CMD_G_SPEED error", ETH_SPEED_10M); + return speed; +} + bool EthernetComponent::powerdown() { ESP_LOGI(TAG, "Powering down ethernet PHY"); if (this->phy_ == nullptr) { diff --git a/esphome/components/ethernet/ethernet_component.h b/esphome/components/ethernet/ethernet_component.h index 3705e3e06a..e57aa5fe12 100644 --- a/esphome/components/ethernet/ethernet_component.h +++ b/esphome/components/ethernet/ethernet_component.h @@ -74,6 +74,10 @@ class EthernetComponent : public Component { network::IPAddress get_dns_address(uint8_t num); std::string get_use_address() const; void set_use_address(const std::string &use_address); + void get_eth_mac_address_raw(uint8_t *mac); + std::string get_eth_mac_address_pretty(); + eth_duplex_t get_duplex_mode(); + eth_speed_t get_link_speed(); bool powerdown(); protected: diff --git a/esphome/components/ethernet_info/ethernet_info_text_sensor.cpp b/esphome/components/ethernet_info/ethernet_info_text_sensor.cpp index c8b2b5885b..329fb9113a 100644 --- a/esphome/components/ethernet_info/ethernet_info_text_sensor.cpp +++ b/esphome/components/ethernet_info/ethernet_info_text_sensor.cpp @@ -10,6 +10,7 @@ static const char *const TAG = "ethernet_info"; void IPAddressEthernetInfo::dump_config() { LOG_TEXT_SENSOR("", "EthernetInfo IPAddress", this); } void DNSAddressEthernetInfo::dump_config() { LOG_TEXT_SENSOR("", "EthernetInfo DNS Address", this); } +void MACAddressEthernetInfo::dump_config() { LOG_TEXT_SENSOR("", "EthernetInfo MAC Address", this); } } // namespace ethernet_info } // namespace esphome diff --git a/esphome/components/ethernet_info/ethernet_info_text_sensor.h b/esphome/components/ethernet_info/ethernet_info_text_sensor.h index 82a7dcf56e..94eed886e5 100644 --- a/esphome/components/ethernet_info/ethernet_info_text_sensor.h +++ b/esphome/components/ethernet_info/ethernet_info_text_sensor.h @@ -59,6 +59,13 @@ class DNSAddressEthernetInfo : public PollingComponent, public text_sensor::Text std::string last_results_; }; +class MACAddressEthernetInfo : public Component, public text_sensor::TextSensor { + public: + void setup() override { this->publish_state(ethernet::global_eth_component->get_eth_mac_address_pretty()); } + std::string unique_id() override { return get_mac_address() + "-ethernetinfo-mac"; } + void dump_config() override; +}; + } // namespace ethernet_info } // namespace esphome diff --git a/esphome/components/ethernet_info/text_sensor.py b/esphome/components/ethernet_info/text_sensor.py index 292673c182..a545475870 100644 --- a/esphome/components/ethernet_info/text_sensor.py +++ b/esphome/components/ethernet_info/text_sensor.py @@ -4,6 +4,7 @@ from esphome.components import text_sensor from esphome.const import ( CONF_IP_ADDRESS, CONF_DNS_ADDRESS, + CONF_MAC_ADDRESS, ENTITY_CATEGORY_DIAGNOSTIC, ) @@ -19,6 +20,10 @@ DNSAddressEthernetInfo = ethernet_info_ns.class_( "DNSAddressEthernetInfo", text_sensor.TextSensor, cg.PollingComponent ) +MACAddressEthernetInfo = ethernet_info_ns.class_( + "MACAddressEthernetInfo", text_sensor.TextSensor, cg.PollingComponent +) + CONFIG_SCHEMA = cv.Schema( { cv.Optional(CONF_IP_ADDRESS): text_sensor.text_sensor_schema( @@ -36,6 +41,9 @@ CONFIG_SCHEMA = cv.Schema( cv.Optional(CONF_DNS_ADDRESS): text_sensor.text_sensor_schema( DNSAddressEthernetInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC ).extend(cv.polling_component_schema("1s")), + cv.Optional(CONF_MAC_ADDRESS): text_sensor.text_sensor_schema( + MACAddressEthernetInfo, entity_category=ENTITY_CATEGORY_DIAGNOSTIC + ), } ) @@ -51,3 +59,6 @@ async def to_code(config): if conf := config.get(CONF_DNS_ADDRESS): dns_info = await text_sensor.new_text_sensor(config[CONF_DNS_ADDRESS]) await cg.register_component(dns_info, config[CONF_DNS_ADDRESS]) + if conf := config.get(CONF_MAC_ADDRESS): + mac_info = await text_sensor.new_text_sensor(config[CONF_MAC_ADDRESS]) + await cg.register_component(mac_info, config[CONF_MAC_ADDRESS]) diff --git a/tests/components/ethernet_info/common.yaml b/tests/components/ethernet_info/common.yaml index dade4d7ca5..d9a6f515b1 100644 --- a/tests/components/ethernet_info/common.yaml +++ b/tests/components/ethernet_info/common.yaml @@ -17,3 +17,5 @@ text_sensor: name: IP Address dns_address: name: DNS Address + mac_address: + name: MAC Address From cdf83c5d8c1f8ff99d77b63b04177d253feecbb3 Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:09:46 +1000 Subject: [PATCH 290/313] Add host time platform; remove host support from sntp. (#6854) --- CODEOWNERS | 3 +- esphome/components/host/__init__.py | 2 +- esphome/components/host/time/__init__.py | 20 +++++++++++ esphome/components/host/time/host_time.h | 15 +++++++++ esphome/components/sntp/sntp_component.cpp | 4 +-- esphome/components/sntp/time.py | 39 ++++++++++++++++------ tests/components/host/common.yaml | 7 +--- tests/components/sntp/test.bk72xx.yaml | 1 + 8 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 esphome/components/host/time/__init__.py create mode 100644 esphome/components/host/time/host_time.h create mode 100644 tests/components/sntp/test.bk72xx.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 0dc5339193..82f61c3b80 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -167,7 +167,8 @@ esphome/components/homeassistant/* @OttoWinter esphome/components/honeywell_hih_i2c/* @Benichou34 esphome/components/honeywellabp/* @RubyBailey esphome/components/honeywellabp2_i2c/* @jpfaff -esphome/components/host/* @esphome/core +esphome/components/host/* @clydebarrow @esphome/core +esphome/components/host/time/* @clydebarrow esphome/components/hrxl_maxsonar_wr/* @netmikey esphome/components/hte501/* @Stock-M esphome/components/htu31d/* @betterengineering diff --git a/esphome/components/host/__init__.py b/esphome/components/host/__init__.py index 3bd3b6b172..39e418c9ea 100644 --- a/esphome/components/host/__init__.py +++ b/esphome/components/host/__init__.py @@ -16,7 +16,7 @@ from .const import KEY_HOST # force import gpio to register pin schema from .gpio import host_pin_to_code # noqa -CODEOWNERS = ["@esphome/core"] +CODEOWNERS = ["@esphome/core", "@clydebarrow"] AUTO_LOAD = ["network"] diff --git a/esphome/components/host/time/__init__.py b/esphome/components/host/time/__init__.py new file mode 100644 index 0000000000..76a88d98a1 --- /dev/null +++ b/esphome/components/host/time/__init__.py @@ -0,0 +1,20 @@ +import esphome.codegen as cg +from esphome.const import CONF_ID +import esphome.config_validation as cv +from esphome.components import time as time_ + +CODEOWNERS = ["@clydebarrow"] + +time_ns = cg.esphome_ns.namespace("host") +HostTime = time_ns.class_("HostTime", time_.RealTimeClock) +CONFIG_SCHEMA = time_.TIME_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(HostTime), + } +).extend(cv.COMPONENT_SCHEMA) + + +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await cg.register_component(var, config) + await time_.register_time(var, config) diff --git a/esphome/components/host/time/host_time.h b/esphome/components/host/time/host_time.h new file mode 100644 index 0000000000..4f1473b809 --- /dev/null +++ b/esphome/components/host/time/host_time.h @@ -0,0 +1,15 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/components/time/real_time_clock.h" + +namespace esphome { +namespace host { + +class HostTime : public time::RealTimeClock { + public: + void update() override {} +}; + +} // namespace host +} // namespace esphome diff --git a/esphome/components/sntp/sntp_component.cpp b/esphome/components/sntp/sntp_component.cpp index a0e791be75..4ded98d483 100644 --- a/esphome/components/sntp/sntp_component.cpp +++ b/esphome/components/sntp/sntp_component.cpp @@ -20,7 +20,6 @@ namespace sntp { static const char *const TAG = "sntp"; void SNTPComponent::setup() { -#ifndef USE_HOST ESP_LOGCONFIG(TAG, "Setting up SNTP..."); #if defined(USE_ESP_IDF) if (esp_sntp_enabled()) { @@ -44,7 +43,6 @@ void SNTPComponent::setup() { #endif sntp_init(); -#endif } void SNTPComponent::dump_config() { ESP_LOGCONFIG(TAG, "SNTP Time:"); @@ -54,7 +52,7 @@ void SNTPComponent::dump_config() { ESP_LOGCONFIG(TAG, " Timezone: '%s'", this->timezone_.c_str()); } void SNTPComponent::update() { -#if !defined(USE_ESP_IDF) && !defined(USE_HOST) +#if !defined(USE_ESP_IDF) // force resync if (sntp_enabled()) { sntp_stop(); diff --git a/esphome/components/sntp/time.py b/esphome/components/sntp/time.py index b1362f5421..7cc82e3dff 100644 --- a/esphome/components/sntp/time.py +++ b/esphome/components/sntp/time.py @@ -2,24 +2,41 @@ from esphome.components import time as time_ import esphome.config_validation as cv import esphome.codegen as cg from esphome.core import CORE -from esphome.const import CONF_ID, CONF_SERVERS - +from esphome.const import ( + CONF_ID, + CONF_SERVERS, + PLATFORM_ESP32, + PLATFORM_ESP8266, + PLATFORM_RP2040, + PLATFORM_RTL87XX, + PLATFORM_BK72XX, +) DEPENDENCIES = ["network"] sntp_ns = cg.esphome_ns.namespace("sntp") SNTPComponent = sntp_ns.class_("SNTPComponent", time_.RealTimeClock) - DEFAULT_SERVERS = ["0.pool.ntp.org", "1.pool.ntp.org", "2.pool.ntp.org"] -CONFIG_SCHEMA = time_.TIME_SCHEMA.extend( - { - cv.GenerateID(): cv.declare_id(SNTPComponent), - cv.Optional(CONF_SERVERS, default=DEFAULT_SERVERS): cv.All( - cv.ensure_list(cv.Any(cv.domain, cv.hostname)), cv.Length(min=1, max=3) - ), - } -).extend(cv.COMPONENT_SCHEMA) +CONFIG_SCHEMA = cv.All( + time_.TIME_SCHEMA.extend( + { + cv.GenerateID(): cv.declare_id(SNTPComponent), + cv.Optional(CONF_SERVERS, default=DEFAULT_SERVERS): cv.All( + cv.ensure_list(cv.Any(cv.domain, cv.hostname)), cv.Length(min=1, max=3) + ), + } + ).extend(cv.COMPONENT_SCHEMA), + cv.only_on( + [ + PLATFORM_ESP32, + PLATFORM_ESP8266, + PLATFORM_RP2040, + PLATFORM_BK72XX, + PLATFORM_RTL87XX, + ] + ), +) async def to_code(config): diff --git a/tests/components/host/common.yaml b/tests/components/host/common.yaml index 3d14c190a6..fca0c5d597 100644 --- a/tests/components/host/common.yaml +++ b/tests/components/host/common.yaml @@ -1,15 +1,10 @@ time: - - platform: sntp + - platform: host id: esptime timezone: Australia/Sydney logger: level: VERBOSE - logs: - lvgl: INFO - display: DEBUG - sensor: INFO - vnc: DEBUG host: mac_address: "62:23:45:AF:B3:DD" diff --git a/tests/components/sntp/test.bk72xx.yaml b/tests/components/sntp/test.bk72xx.yaml new file mode 100644 index 0000000000..dade44d145 --- /dev/null +++ b/tests/components/sntp/test.bk72xx.yaml @@ -0,0 +1 @@ +<<: !include common.yaml From 2d56d8d84feb8df4341725bfe0a409a44b5305a8 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 3 Jun 2024 22:10:44 -0500 Subject: [PATCH 291/313] [wireguard] Implement workaround for crash on IDF 5+ (#6846) --- esphome/components/wireguard/__init__.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/esphome/components/wireguard/__init__.py b/esphome/components/wireguard/__init__.py index 177ad6d356..5d5f620b51 100644 --- a/esphome/components/wireguard/__init__.py +++ b/esphome/components/wireguard/__init__.py @@ -7,7 +7,10 @@ from esphome.const import ( CONF_TIME_ID, CONF_ADDRESS, CONF_REBOOT_TIMEOUT, + KEY_CORE, + KEY_FRAMEWORK_VERSION, ) +from esphome.components.esp32 import CORE, add_idf_sdkconfig_option from esphome.components import time from esphome.core import TimePeriod from esphome import automation @@ -117,6 +120,13 @@ async def to_code(config): if config[CONF_REQUIRE_CONNECTION_TO_PROCEED]: cg.add(var.disable_auto_proceed()) + # Workaround for crash on IDF 5+ + # See https://github.com/trombik/esp_wireguard/issues/33#issuecomment-1568503651 + if CORE.using_esp_idf and CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION] >= cv.Version( + 5, 0, 0 + ): + add_idf_sdkconfig_option("CONFIG_LWIP_PPP_SUPPORT", True) + # This flag is added here because the esp_wireguard library statically # set the size of its allowed_ips list at compile time using this value; # the '+1' modifier is relative to the device's own address that will From eb75778f84e32eed1f5a497471f86bb964906166 Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 3 Jun 2024 22:18:20 -0500 Subject: [PATCH 292/313] [improv_serial] Fix for IDF 4.4.7 (#6855) --- esphome/components/improv_serial/improv_serial_component.cpp | 1 + esphome/components/improv_serial/improv_serial_component.h | 1 + 2 files changed, 2 insertions(+) diff --git a/esphome/components/improv_serial/improv_serial_component.cpp b/esphome/components/improv_serial/improv_serial_component.cpp index 40297bee68..2937720496 100644 --- a/esphome/components/improv_serial/improv_serial_component.cpp +++ b/esphome/components/improv_serial/improv_serial_component.cpp @@ -109,6 +109,7 @@ void ImprovSerialComponent::write_data_(std::vector &data) { #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3) case logger::UART_SELECTION_USB_SERIAL_JTAG: usb_serial_jtag_write_bytes((char *) data.data(), data.size(), 20 / portTICK_PERIOD_MS); + usb_serial_jtag_ll_txfifo_flush(); // fixes for issue in IDF 4.4.7 break; #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 default: diff --git a/esphome/components/improv_serial/improv_serial_component.h b/esphome/components/improv_serial/improv_serial_component.h index 8583d0762b..f737f93d86 100644 --- a/esphome/components/improv_serial/improv_serial_component.h +++ b/esphome/components/improv_serial/improv_serial_component.h @@ -17,6 +17,7 @@ #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3) || \ defined(USE_ESP32_VARIANT_ESP32H2) #include +#include #endif #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) #include From 69d38f61371f4f0548b50bedd1ca48784fa51028 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:02:18 +1200 Subject: [PATCH 293/313] [ft5x06] Interrupt pin and code quality improvements (#6851) Co-authored-by: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> --- .../components/ft5x06/touchscreen/__init__.py | 8 +- .../ft5x06/touchscreen/ft5x06_touchscreen.cpp | 102 ++++++++++++++++++ .../ft5x06/touchscreen/ft5x06_touchscreen.h | 94 ++-------------- 3 files changed, 119 insertions(+), 85 deletions(-) create mode 100644 esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp diff --git a/esphome/components/ft5x06/touchscreen/__init__.py b/esphome/components/ft5x06/touchscreen/__init__.py index adeeac0d1a..4ceb50c709 100644 --- a/esphome/components/ft5x06/touchscreen/__init__.py +++ b/esphome/components/ft5x06/touchscreen/__init__.py @@ -1,8 +1,9 @@ +from esphome import pins import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import i2c, touchscreen -from esphome.const import CONF_ID +from esphome.const import CONF_ID, CONF_INTERRUPT_PIN from .. import ft5x06_ns FT5x06ButtonListener = ft5x06_ns.class_("FT5x06ButtonListener") @@ -16,6 +17,7 @@ FT5x06Touchscreen = ft5x06_ns.class_( CONFIG_SCHEMA = touchscreen.TOUCHSCREEN_SCHEMA.extend( { cv.GenerateID(): cv.declare_id(FT5x06Touchscreen), + cv.Optional(CONF_INTERRUPT_PIN): pins.internal_gpio_input_pin_schema, } ).extend(i2c.i2c_device_schema(0x48)) @@ -24,3 +26,7 @@ async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await i2c.register_i2c_device(var, config) await touchscreen.register_touchscreen(var, config) + + if interrupt_pin := config.get(CONF_INTERRUPT_PIN): + pin = await cg.gpio_pin_expression(interrupt_pin) + cg.add(var.set_interrupt_pin(pin)) diff --git a/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp b/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp new file mode 100644 index 0000000000..bd603fdc10 --- /dev/null +++ b/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp @@ -0,0 +1,102 @@ +#include "ft5x06_touchscreen.h" + +#include "esphome/core/log.h" + +namespace esphome { +namespace ft5x06 { + +static const char *const TAG = "ft5x06.touchscreen"; + +void FT5x06Touchscreen::setup() { + ESP_LOGCONFIG(TAG, "Setting up FT5x06 Touchscreen..."); + if (this->interrupt_pin_ != nullptr) { + this->interrupt_pin_->setup(); + this->interrupt_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP); + this->interrupt_pin_->setup(); + this->attach_interrupt_(this->interrupt_pin_, gpio::INTERRUPT_FALLING_EDGE); + } + + // wait 200ms after reset. + this->set_timeout(200, [this] { this->continue_setup_(); }); +} + +void FT5x06Touchscreen::continue_setup_() { + uint8_t data[4]; + if (!this->set_mode_(FT5X06_OP_MODE)) + return; + + if (!this->err_check_(this->read_register(FT5X06_VENDOR_ID_REG, data, 1), "Read Vendor ID")) + return; + switch (data[0]) { + case FT5X06_ID_1: + case FT5X06_ID_2: + case FT5X06_ID_3: + this->vendor_id_ = (VendorId) data[0]; + ESP_LOGD(TAG, "Read vendor ID 0x%X", data[0]); + break; + + default: + ESP_LOGE(TAG, "Unknown vendor ID 0x%X", data[0]); + this->mark_failed(); + return; + } + // reading the chip registers to get max x/y does not seem to work. + if (this->display_ != nullptr) { + if (this->x_raw_max_ == this->x_raw_min_) { + this->x_raw_max_ = this->display_->get_native_width(); + } + if (this->y_raw_max_ == this->y_raw_min_) { + this->y_raw_max_ = this->display_->get_native_height(); + } + } + ESP_LOGCONFIG(TAG, "FT5x06 Touchscreen setup complete"); +} + +void FT5x06Touchscreen::update_touches() { + uint8_t touch_cnt; + uint8_t data[MAX_TOUCHES][6]; + + if (!this->read_byte(FT5X06_TD_STATUS, &touch_cnt) || touch_cnt > MAX_TOUCHES) { + ESP_LOGW(TAG, "Failed to read status"); + return; + } + if (touch_cnt == 0) + return; + + if (!this->read_bytes(FT5X06_TOUCH_DATA, (uint8_t *) data, touch_cnt * 6)) { + ESP_LOGW(TAG, "Failed to read touch data"); + return; + } + for (uint8_t i = 0; i != touch_cnt; i++) { + uint8_t status = data[i][0] >> 6; + uint8_t id = data[i][2] >> 3; + uint16_t x = encode_uint16(data[i][0] & 0x0F, data[i][1]); + uint16_t y = encode_uint16(data[i][2] & 0xF, data[i][3]); + + ESP_LOGD(TAG, "Read %X status, id: %d, pos %d/%d", status, id, x, y); + if (status == 0 || status == 2) { + this->add_raw_touch_position_(id, x, y); + } + } +} + +void FT5x06Touchscreen::dump_config() { + ESP_LOGCONFIG(TAG, "FT5x06 Touchscreen:"); + ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_); + ESP_LOGCONFIG(TAG, " Vendor ID: 0x%X", (int) this->vendor_id_); +} + +bool FT5x06Touchscreen::err_check_(i2c::ErrorCode err, const char *msg) { + if (err != i2c::ERROR_OK) { + this->mark_failed(); + ESP_LOGE(TAG, "%s failed - err 0x%X", msg, err); + return false; + } + return true; +} +bool FT5x06Touchscreen::set_mode_(FTMode mode) { + return this->err_check_(this->write_register(FT5X06_MODE_REG, (uint8_t *) &mode, 1), "Set mode"); +} + +} // namespace ft5x06 +} // namespace esphome diff --git a/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h b/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h index 7ddd2e44d7..23e5a0c49f 100644 --- a/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h +++ b/esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h @@ -3,14 +3,12 @@ #include "esphome/components/i2c/i2c.h" #include "esphome/components/touchscreen/touchscreen.h" #include "esphome/core/component.h" +#include "esphome/core/gpio.h" #include "esphome/core/hal.h" -#include "esphome/core/log.h" namespace esphome { namespace ft5x06 { -static const char *const TAG = "ft5x06.touchscreen"; - enum VendorId { FT5X06_ID_UNKNOWN = 0, FT5X06_ID_1 = 0x51, @@ -39,91 +37,19 @@ static const size_t MAX_TOUCHES = 5; // max number of possible touches reported class FT5x06Touchscreen : public touchscreen::Touchscreen, public i2c::I2CDevice { public: - void setup() override { - esph_log_config(TAG, "Setting up FT5x06 Touchscreen..."); - // wait 200ms after reset. - this->set_timeout(200, [this] { this->continue_setup_(); }); - } + void setup() override; + void dump_config() override; + void update_touches() override; - void continue_setup_(void) { - uint8_t data[4]; - if (!this->set_mode_(FT5X06_OP_MODE)) - return; - - if (!this->err_check_(this->read_register(FT5X06_VENDOR_ID_REG, data, 1), "Read Vendor ID")) - return; - switch (data[0]) { - case FT5X06_ID_1: - case FT5X06_ID_2: - case FT5X06_ID_3: - this->vendor_id_ = (VendorId) data[0]; - esph_log_d(TAG, "Read vendor ID 0x%X", data[0]); - break; - - default: - esph_log_e(TAG, "Unknown vendor ID 0x%X", data[0]); - this->mark_failed(); - return; - } - // reading the chip registers to get max x/y does not seem to work. - if (this->display_ != nullptr) { - if (this->x_raw_max_ == this->x_raw_min_) { - this->x_raw_max_ = this->display_->get_native_width(); - } - if (this->y_raw_max_ == this->y_raw_min_) { - this->y_raw_max_ = this->display_->get_native_height(); - } - } - esph_log_config(TAG, "FT5x06 Touchscreen setup complete"); - } - - void update_touches() override { - uint8_t touch_cnt; - uint8_t data[MAX_TOUCHES][6]; - - if (!this->read_byte(FT5X06_TD_STATUS, &touch_cnt) || touch_cnt > MAX_TOUCHES) { - esph_log_w(TAG, "Failed to read status"); - return; - } - if (touch_cnt == 0) - return; - - if (!this->read_bytes(FT5X06_TOUCH_DATA, (uint8_t *) data, touch_cnt * 6)) { - esph_log_w(TAG, "Failed to read touch data"); - return; - } - for (uint8_t i = 0; i != touch_cnt; i++) { - uint8_t status = data[i][0] >> 6; - uint8_t id = data[i][2] >> 3; - uint16_t x = encode_uint16(data[i][0] & 0x0F, data[i][1]); - uint16_t y = encode_uint16(data[i][2] & 0xF, data[i][3]); - - esph_log_d(TAG, "Read %X status, id: %d, pos %d/%d", status, id, x, y); - if (status == 0 || status == 2) { - this->add_raw_touch_position_(id, x, y); - } - } - } - - void dump_config() override { - esph_log_config(TAG, "FT5x06 Touchscreen:"); - esph_log_config(TAG, " Address: 0x%02X", this->address_); - esph_log_config(TAG, " Vendor ID: 0x%X", (int) this->vendor_id_); - } + void set_interrupt_pin(InternalGPIOPin *interrupt_pin) { this->interrupt_pin_ = interrupt_pin; } protected: - bool err_check_(i2c::ErrorCode err, const char *msg) { - if (err != i2c::ERROR_OK) { - this->mark_failed(); - esph_log_e(TAG, "%s failed - err 0x%X", msg, err); - return false; - } - return true; - } - bool set_mode_(FTMode mode) { - return this->err_check_(this->write_register(FT5X06_MODE_REG, (uint8_t *) &mode, 1), "Set mode"); - } + void continue_setup_(); + bool err_check_(i2c::ErrorCode err, const char *msg); + bool set_mode_(FTMode mode); VendorId vendor_id_{FT5X06_ID_UNKNOWN}; + + InternalGPIOPin *interrupt_pin_{nullptr}; }; } // namespace ft5x06 From ac9f57600db0f44a9a1b048e5228d6b67df29d50 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 20:00:09 +1200 Subject: [PATCH 294/313] [voice_assistant] Half the microphone ringbuffer size (#6830) --- esphome/components/voice_assistant/voice_assistant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index 59ba39c527..421bca9afb 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -17,7 +17,7 @@ static const char *const TAG = "voice_assistant"; static const size_t SAMPLE_RATE_HZ = 16000; static const size_t INPUT_BUFFER_SIZE = 32 * SAMPLE_RATE_HZ / 1000; // 32ms * 16kHz / 1000ms -static const size_t BUFFER_SIZE = 1024 * SAMPLE_RATE_HZ / 1000; +static const size_t BUFFER_SIZE = 512 * SAMPLE_RATE_HZ / 1000; static const size_t SEND_BUFFER_SIZE = INPUT_BUFFER_SIZE * sizeof(int16_t); static const size_t RECEIVE_SIZE = 1024; static const size_t SPEAKER_BUFFER_SIZE = 16 * RECEIVE_SIZE; From ce4a3d995006a6f2b0a7afbee2f47c9807f54831 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Thu, 30 May 2024 20:01:39 +1200 Subject: [PATCH 295/313] [i2s_speaker] Add buffer allocation failure checks (#6829) --- .../i2s_audio/speaker/i2s_audio_speaker.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp index 95e63035fe..7f03a43da4 100644 --- a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +++ b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp @@ -19,10 +19,27 @@ void I2SAudioSpeaker::setup() { ESP_LOGCONFIG(TAG, "Setting up I2S Audio Speaker..."); this->buffer_queue_ = xQueueCreate(BUFFER_COUNT, sizeof(DataEvent)); + if (this->buffer_queue_ == nullptr) { + ESP_LOGE(TAG, "Failed to create buffer queue"); + this->mark_failed(); + return; + } + this->event_queue_ = xQueueCreate(BUFFER_COUNT, sizeof(TaskEvent)); + if (this->event_queue_ == nullptr) { + ESP_LOGE(TAG, "Failed to create event queue"); + this->mark_failed(); + return; + } } -void I2SAudioSpeaker::start() { this->state_ = speaker::STATE_STARTING; } +void I2SAudioSpeaker::start() { + if (this->is_failed()) { + ESP_LOGE(TAG, "Cannot start audio, speaker failed to setup"); + return; + } + this->state_ = speaker::STATE_STARTING; +} void I2SAudioSpeaker::start_() { if (!this->parent_->try_lock()) { return; // Waiting for another i2s component to return lock @@ -141,6 +158,8 @@ void I2SAudioSpeaker::player_task(void *params) { } void I2SAudioSpeaker::stop() { + if (this->is_failed()) + return; if (this->state_ == speaker::STATE_STOPPED) return; if (this->state_ == speaker::STATE_STARTING) { @@ -200,6 +219,10 @@ void I2SAudioSpeaker::loop() { } size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length) { + if (this->is_failed()) { + ESP_LOGE(TAG, "Cannot play audio, speaker failed to setup"); + return 0; + } if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) { this->start(); } From 388b2c2de0e92f4f5a8d18379e651a266b3750fa Mon Sep 17 00:00:00 2001 From: Keith Burzinski Date: Mon, 3 Jun 2024 22:18:20 -0500 Subject: [PATCH 296/313] [improv_serial] Fix for IDF 4.4.7 (#6855) --- esphome/components/improv_serial/improv_serial_component.cpp | 1 + esphome/components/improv_serial/improv_serial_component.h | 1 + 2 files changed, 2 insertions(+) diff --git a/esphome/components/improv_serial/improv_serial_component.cpp b/esphome/components/improv_serial/improv_serial_component.cpp index 40297bee68..2937720496 100644 --- a/esphome/components/improv_serial/improv_serial_component.cpp +++ b/esphome/components/improv_serial/improv_serial_component.cpp @@ -109,6 +109,7 @@ void ImprovSerialComponent::write_data_(std::vector &data) { #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3) case logger::UART_SELECTION_USB_SERIAL_JTAG: usb_serial_jtag_write_bytes((char *) data.data(), data.size(), 20 / portTICK_PERIOD_MS); + usb_serial_jtag_ll_txfifo_flush(); // fixes for issue in IDF 4.4.7 break; #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 default: diff --git a/esphome/components/improv_serial/improv_serial_component.h b/esphome/components/improv_serial/improv_serial_component.h index 8583d0762b..f737f93d86 100644 --- a/esphome/components/improv_serial/improv_serial_component.h +++ b/esphome/components/improv_serial/improv_serial_component.h @@ -17,6 +17,7 @@ #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S3) || \ defined(USE_ESP32_VARIANT_ESP32H2) #include +#include #endif #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) #include From 664ee56dc5c3170bab8722dea504cbf072e95ccb Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 5 Jun 2024 15:51:29 +1200 Subject: [PATCH 297/313] Bump version to 2024.5.5 --- esphome/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/const.py b/esphome/const.py index ad5858dcf3..658773b3db 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -1,6 +1,6 @@ """Constants used by esphome.""" -__version__ = "2024.5.4" +__version__ = "2024.5.5" ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_" VALID_SUBSTITUTIONS_CHARACTERS = ( From 594856899a657ce5787f00d3432982869d29a8e9 Mon Sep 17 00:00:00 2001 From: Nate Clark Date: Wed, 5 Jun 2024 02:51:56 -0400 Subject: [PATCH 298/313] [ethernet] Add config option to set arbitrary PHY register values (#6836) --- esphome/components/ethernet/__init__.py | 29 ++++++++++ .../ethernet/ethernet_component.cpp | 58 +++++++------------ .../components/ethernet/ethernet_component.h | 12 +++- 3 files changed, 60 insertions(+), 39 deletions(-) diff --git a/esphome/components/ethernet/__init__.py b/esphome/components/ethernet/__init__.py index ade94cb9f5..697436415b 100644 --- a/esphome/components/ethernet/__init__.py +++ b/esphome/components/ethernet/__init__.py @@ -11,6 +11,7 @@ from esphome.components.esp32.const import ( from esphome.const import ( CONF_DOMAIN, CONF_ID, + CONF_VALUE, CONF_MANUAL_IP, CONF_STATIC_IP, CONF_TYPE, @@ -26,6 +27,8 @@ from esphome.const import ( CONF_INTERRUPT_PIN, CONF_RESET_PIN, CONF_SPI, + CONF_PAGE_ID, + CONF_ADDRESS, ) from esphome.core import CORE, coroutine_with_priority from esphome.components.network import IPAddress @@ -36,11 +39,13 @@ DEPENDENCIES = ["esp32"] AUTO_LOAD = ["network"] ethernet_ns = cg.esphome_ns.namespace("ethernet") +PHYRegister = ethernet_ns.struct("PHYRegister") CONF_PHY_ADDR = "phy_addr" CONF_MDC_PIN = "mdc_pin" CONF_MDIO_PIN = "mdio_pin" CONF_CLK_MODE = "clk_mode" CONF_POWER_PIN = "power_pin" +CONF_PHY_REGISTERS = "phy_registers" CONF_CLOCK_SPEED = "clock_speed" @@ -117,6 +122,13 @@ BASE_SCHEMA = cv.Schema( } ).extend(cv.COMPONENT_SCHEMA) +PHY_REGISTER_SCHEMA = cv.Schema( + { + cv.Required(CONF_ADDRESS): cv.hex_int, + cv.Required(CONF_VALUE): cv.hex_int, + cv.Optional(CONF_PAGE_ID): cv.hex_int, + } +) RMII_SCHEMA = BASE_SCHEMA.extend( cv.Schema( { @@ -127,6 +139,7 @@ RMII_SCHEMA = BASE_SCHEMA.extend( ), cv.Optional(CONF_PHY_ADDR, default=0): cv.int_range(min=0, max=31), cv.Optional(CONF_POWER_PIN): pins.internal_gpio_output_pin_number, + cv.Optional(CONF_PHY_REGISTERS): cv.ensure_list(PHY_REGISTER_SCHEMA), } ) ) @@ -198,6 +211,15 @@ def manual_ip(config): ) +def phy_register(address: int, value: int, page: int): + return cg.StructInitializer( + PHYRegister, + ("address", address), + ("value", value), + ("page", page), + ) + + @coroutine_with_priority(60.0) async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) @@ -225,6 +247,13 @@ async def to_code(config): cg.add(var.set_clk_mode(*CLK_MODES[config[CONF_CLK_MODE]])) if CONF_POWER_PIN in config: cg.add(var.set_power_pin(config[CONF_POWER_PIN])) + for register_value in config.get(CONF_PHY_REGISTERS, []): + reg = phy_register( + register_value.get(CONF_ADDRESS), + register_value.get(CONF_VALUE), + register_value.get(CONF_PAGE_ID), + ) + cg.add(var.add_phy_register(reg)) cg.add(var.set_type(ETHERNET_TYPES[config[CONF_TYPE]])) cg.add(var.set_use_address(config[CONF_USE_ADDRESS])) diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 6bb9732fef..75bdd29be7 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -195,9 +195,9 @@ void EthernetComponent::setup() { // KSZ8081RNA default is incorrect. It expects a 25MHz clock instead of the 50MHz we provide. this->ksz8081_set_clock_reference_(mac); } - if (this->type_ == ETHERNET_TYPE_RTL8201 && this->clk_mode_ == EMAC_CLK_EXT_IN) { - // Change in default behavior of RTL8201FI may require register setting to enable external clock - this->rtl8201_set_rmii_mode_(mac); + + for (const auto &phy_register : this->phy_registers_) { + this->write_phy_register_(mac, phy_register); } #endif @@ -527,6 +527,7 @@ void EthernetComponent::set_clk_mode(emac_rmii_clock_mode_t clk_mode, emac_rmii_ this->clk_mode_ = clk_mode; this->clk_gpio_ = clk_gpio; } +void EthernetComponent::add_phy_register(PHYRegister register_value) { this->phy_registers_.push_back(register_value); } #endif void EthernetComponent::set_type(EthernetType type) { this->type_ = type; } void EthernetComponent::set_manual_ip(const ManualIP &manual_ip) { this->manual_ip_ = manual_ip; } @@ -613,44 +614,27 @@ void EthernetComponent::ksz8081_set_clock_reference_(esp_eth_mac_t *mac) { ESP_LOGVV(TAG, "KSZ8081 PHY Control 2: %s", format_hex_pretty((u_int8_t *) &phy_control_2, 2).c_str()); } } -constexpr uint8_t RTL8201_RMSR_REG_ADDR = 0x10; -void EthernetComponent::rtl8201_set_rmii_mode_(esp_eth_mac_t *mac) { + +void EthernetComponent::write_phy_register_(esp_eth_mac_t *mac, PHYRegister register_data) { esp_err_t err; - uint32_t phy_rmii_mode; - err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x07); - ESPHL_ERROR_CHECK(err, "Setting Page 7 failed"); + constexpr uint8_t eth_phy_psr_reg_addr = 0x1F; - /* - * RTL8201 RMII Mode Setting Register (RMSR) - * Page 7 Register 16 - * - * bit 0 Reserved 0 - * bit 1 Rg_rmii_rxdsel 1 (default) - * bit 2 Rg_rmii_rxdv_sel: 0 (default) - * bit 3 RMII Mode: 1 (RMII Mode) - * bit 4~7 Rg_rmii_rx_offset: 1111 (default) - * bit 8~11 Rg_rmii_tx_offset: 1111 (default) - * bit 12 Rg_rmii_clkdir: 1 (Input) - * bit 13~15 Reserved 000 - * - * Binary: 0001 1111 1111 1010 - * Hex: 0x1FFA - * - */ + if (this->type_ == ETHERNET_TYPE_RTL8201 && register_data.page) { + ESP_LOGD(TAG, "Select PHY Register Page: 0x%02" PRIX32, register_data.page); + err = mac->write_phy_reg(mac, this->phy_addr_, eth_phy_psr_reg_addr, register_data.page); + ESPHL_ERROR_CHECK(err, "Select PHY Register page failed"); + } - err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); - ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); - ESP_LOGV(TAG, "Hardware default RTL8201 RMII Mode Register is: 0x%04" PRIX32, phy_rmii_mode); + ESP_LOGD(TAG, "Writing to PHY Register Address: 0x%02" PRIX32, register_data.address); + ESP_LOGD(TAG, "Writing to PHY Register Value: 0x%04" PRIX32, register_data.value); + err = mac->write_phy_reg(mac, this->phy_addr_, register_data.address, register_data.value); + ESPHL_ERROR_CHECK(err, "Writing PHY Register failed"); - err = mac->write_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, 0x1FFA); - ESPHL_ERROR_CHECK(err, "Setting Register 16 RMII Mode Setting failed"); - - err = mac->read_phy_reg(mac, this->phy_addr_, RTL8201_RMSR_REG_ADDR, &(phy_rmii_mode)); - ESPHL_ERROR_CHECK(err, "Read PHY RMSR Register failed"); - ESP_LOGV(TAG, "Setting RTL8201 RMII Mode Register to: 0x%04" PRIX32, phy_rmii_mode); - - err = mac->write_phy_reg(mac, this->phy_addr_, 0x1f, 0x0); - ESPHL_ERROR_CHECK(err, "Setting Page 0 failed"); + if (this->type_ == ETHERNET_TYPE_RTL8201 && register_data.page) { + ESP_LOGD(TAG, "Select PHY Register Page 0x%02" PRIX32, 0x0); + err = mac->write_phy_reg(mac, this->phy_addr_, eth_phy_psr_reg_addr, 0x0); + ESPHL_ERROR_CHECK(err, "Select PHY Register Page 0 failed"); + } } #endif diff --git a/esphome/components/ethernet/ethernet_component.h b/esphome/components/ethernet/ethernet_component.h index e57aa5fe12..f0fe6cab87 100644 --- a/esphome/components/ethernet/ethernet_component.h +++ b/esphome/components/ethernet/ethernet_component.h @@ -35,6 +35,12 @@ struct ManualIP { network::IPAddress dns2; ///< The second DNS server. 0.0.0.0 for default. }; +struct PHYRegister { + uint32_t address; + uint32_t value; + uint32_t page; +}; + enum class EthernetComponentState { STOPPED, CONNECTING, @@ -66,6 +72,7 @@ class EthernetComponent : public Component { void set_mdc_pin(uint8_t mdc_pin); void set_mdio_pin(uint8_t mdio_pin); void set_clk_mode(emac_rmii_clock_mode_t clk_mode, emac_rmii_clock_gpio_t clk_gpio); + void add_phy_register(PHYRegister register_value); #endif void set_type(EthernetType type); void set_manual_ip(const ManualIP &manual_ip); @@ -91,8 +98,8 @@ class EthernetComponent : public Component { void dump_connect_params_(); /// @brief Set `RMII Reference Clock Select` bit for KSZ8081. void ksz8081_set_clock_reference_(esp_eth_mac_t *mac); - /// @brief Set `RMII Mode Setting Register` for RTL8201. - void rtl8201_set_rmii_mode_(esp_eth_mac_t *mac); + /// @brief Set arbitratry PHY registers from config. + void write_phy_register_(esp_eth_mac_t *mac, PHYRegister register_data); std::string use_address_; #ifdef USE_ETHERNET_SPI @@ -111,6 +118,7 @@ class EthernetComponent : public Component { uint8_t mdio_pin_{18}; emac_rmii_clock_mode_t clk_mode_{EMAC_CLK_EXT_IN}; emac_rmii_clock_gpio_t clk_gpio_{EMAC_CLK_IN_GPIO}; + std::vector phy_registers_{}; #endif EthernetType type_{ETHERNET_TYPE_UNKNOWN}; optional manual_ip_{}; From f36a96c8e20c3b593f7dc48ba9f74e2c1fafe97e Mon Sep 17 00:00:00 2001 From: svxa <59204027+svxa@users.noreply.github.com> Date: Wed, 5 Jun 2024 09:35:19 +0200 Subject: [PATCH 299/313] Add carrier_frequency option to remote_transmitter.transmit_aeha (#6792) --- esphome/components/remote_base/__init__.py | 14 +++++++++++++- esphome/components/remote_base/aeha_protocol.cpp | 1 - esphome/components/remote_base/aeha_protocol.h | 2 ++ .../remote_transmitter/common-buttons.yaml | 1 + tests/test1.yaml | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/esphome/components/remote_base/__init__.py b/esphome/components/remote_base/__init__.py index 9d49026aa3..3d1c10a092 100644 --- a/esphome/components/remote_base/__init__.py +++ b/esphome/components/remote_base/__init__.py @@ -1769,7 +1769,17 @@ def aeha_dumper(var, config): pass -@register_action("aeha", AEHAAction, AEHA_SCHEMA) +@register_action( + "aeha", + AEHAAction, + AEHA_SCHEMA.extend( + { + cv.Optional(CONF_CARRIER_FREQUENCY, default="38000Hz"): cv.All( + cv.frequency, cv.int_ + ), + } + ), +) async def aeha_action(var, config, args): template_ = await cg.templatable(config[CONF_ADDRESS], args, cg.uint16) cg.add(var.set_address(template_)) @@ -1777,6 +1787,8 @@ async def aeha_action(var, config, args): config[CONF_DATA], args, cg.std_vector.template(cg.uint8) ) cg.add(var.set_data(template_)) + templ = await cg.templatable(config[CONF_CARRIER_FREQUENCY], args, cg.uint32) + cg.add(var.set_carrier_frequency(templ)) # Haier diff --git a/esphome/components/remote_base/aeha_protocol.cpp b/esphome/components/remote_base/aeha_protocol.cpp index 40bdadf634..04fe731817 100644 --- a/esphome/components/remote_base/aeha_protocol.cpp +++ b/esphome/components/remote_base/aeha_protocol.cpp @@ -16,7 +16,6 @@ static const uint16_t BIT_ZERO_LOW_US = BITWISE; static const uint16_t TRAILER = BITWISE; void AEHAProtocol::encode(RemoteTransmitData *dst, const AEHAData &data) { - dst->set_carrier_frequency(38000); dst->reserve(2 + 32 + (data.data.size() * 2) + 1); dst->item(HEADER_HIGH_US, HEADER_LOW_US); diff --git a/esphome/components/remote_base/aeha_protocol.h b/esphome/components/remote_base/aeha_protocol.h index c41f3f8df1..51718eefcb 100644 --- a/esphome/components/remote_base/aeha_protocol.h +++ b/esphome/components/remote_base/aeha_protocol.h @@ -30,12 +30,14 @@ template class AEHAAction : public RemoteTransmitterActionBase, data) + TEMPLATABLE_VALUE(uint32_t, carrier_frequency); void set_data(const std::vector &data) { data_ = data; } void encode(RemoteTransmitData *dst, Ts... x) override { AEHAData data{}; data.address = this->address_.value(x...); data.data = this->data_.value(x...); + dst->set_carrier_frequency(this->carrier_frequency_.value(x...)); AEHAProtocol().encode(dst, data); } }; diff --git a/tests/components/remote_transmitter/common-buttons.yaml b/tests/components/remote_transmitter/common-buttons.yaml index e727017e85..c6a2453b20 100644 --- a/tests/components/remote_transmitter/common-buttons.yaml +++ b/tests/components/remote_transmitter/common-buttons.yaml @@ -118,6 +118,7 @@ button: on_press: remote_transmitter.transmit_aeha: address: 0x8008 + carrier_frequency: 36700Hz data: [ 0x00, diff --git a/tests/test1.yaml b/tests/test1.yaml index 2a20a1bb45..c49ff307e5 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -2906,6 +2906,7 @@ switch: turn_on_action: remote_transmitter.transmit_aeha: address: 0x8008 + carrier_frequency: 36700Hz data: [ 0x00, From c52d5c02791850317bc9302ef86a18fec6b01dd2 Mon Sep 17 00:00:00 2001 From: Will Rouesnel Date: Wed, 5 Jun 2024 17:52:19 +1000 Subject: [PATCH 300/313] Add `invert_position_report` to `tuya.cover` (#6020) --- esphome/components/tuya/cover/__init__.py | 3 +++ esphome/components/tuya/cover/tuya_cover.cpp | 9 ++++++--- esphome/components/tuya/cover/tuya_cover.h | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/esphome/components/tuya/cover/__init__.py b/esphome/components/tuya/cover/__init__.py index f886c7030f..2dd66f814d 100644 --- a/esphome/components/tuya/cover/__init__.py +++ b/esphome/components/tuya/cover/__init__.py @@ -16,6 +16,7 @@ CONF_DIRECTION_DATAPOINT = "direction_datapoint" CONF_POSITION_DATAPOINT = "position_datapoint" CONF_POSITION_REPORT_DATAPOINT = "position_report_datapoint" CONF_INVERT_POSITION = "invert_position" +CONF_INVERT_POSITION_REPORT = "invert_position_report" TuyaCover = tuya_ns.class_("TuyaCover", cover.Cover, cg.Component) @@ -47,6 +48,7 @@ CONFIG_SCHEMA = cv.All( cv.Optional(CONF_MIN_VALUE, default=0): cv.int_, cv.Optional(CONF_MAX_VALUE, default=100): cv.int_, cv.Optional(CONF_INVERT_POSITION, default=False): cv.boolean, + cv.Optional(CONF_INVERT_POSITION_REPORT, default=False): cv.boolean, cv.Optional(CONF_RESTORE_MODE, default="RESTORE"): cv.enum( RESTORE_MODES, upper=True ), @@ -71,6 +73,7 @@ async def to_code(config): cg.add(var.set_min_value(config[CONF_MIN_VALUE])) cg.add(var.set_max_value(config[CONF_MAX_VALUE])) cg.add(var.set_invert_position(config[CONF_INVERT_POSITION])) + cg.add(var.set_invert_position_report(config[CONF_INVERT_POSITION_REPORT])) cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE])) paren = await cg.get_variable(config[CONF_TUYA_ID]) cg.add(var.set_tuya_parent(paren)) diff --git a/esphome/components/tuya/cover/tuya_cover.cpp b/esphome/components/tuya/cover/tuya_cover.cpp index fcb961f45e..14bf937cf7 100644 --- a/esphome/components/tuya/cover/tuya_cover.cpp +++ b/esphome/components/tuya/cover/tuya_cover.cpp @@ -51,7 +51,7 @@ void TuyaCover::setup() { return; } auto pos = float(datapoint.value_uint - this->min_value_) / this->value_range_; - this->position = 1.0f - pos; + this->position = this->invert_position_report_ ? pos : 1.0f - pos; this->publish_state(); }); } @@ -62,7 +62,7 @@ void TuyaCover::control(const cover::CoverCall &call) { this->parent_->force_set_enum_datapoint_value(*this->control_id_, COMMAND_STOP); } else { auto pos = this->position; - pos = 1.0f - pos; + pos = this->invert_position_report_ ? pos : 1.0f - pos; auto position_int = static_cast(pos * this->value_range_); position_int = position_int + this->min_value_; @@ -78,7 +78,7 @@ void TuyaCover::control(const cover::CoverCall &call) { this->parent_->force_set_enum_datapoint_value(*this->control_id_, COMMAND_CLOSE); } } else { - pos = 1.0f - pos; + pos = this->invert_position_report_ ? pos : 1.0f - pos; auto position_int = static_cast(pos * this->value_range_); position_int = position_int + this->min_value_; @@ -112,6 +112,9 @@ void TuyaCover::dump_config() { ESP_LOGCONFIG(TAG, " Configured as Inverted, but direction_datapoint isn't configured"); } } + if (this->invert_position_report_) { + ESP_LOGCONFIG(TAG, " Position Reporting Inverted"); + } if (this->control_id_.has_value()) { ESP_LOGCONFIG(TAG, " Control has datapoint ID %u", *this->control_id_); } diff --git a/esphome/components/tuya/cover/tuya_cover.h b/esphome/components/tuya/cover/tuya_cover.h index 87c72b0e66..bb5a00bc59 100644 --- a/esphome/components/tuya/cover/tuya_cover.h +++ b/esphome/components/tuya/cover/tuya_cover.h @@ -25,6 +25,7 @@ class TuyaCover : public cover::Cover, public Component { void set_min_value(uint32_t min_value) { min_value_ = min_value; } void set_max_value(uint32_t max_value) { max_value_ = max_value; } void set_invert_position(bool invert_position) { invert_position_ = invert_position; } + void set_invert_position_report(bool invert_position_report) { invert_position_report_ = invert_position_report; } void set_restore_mode(TuyaCoverRestoreMode restore_mode) { restore_mode_ = restore_mode; } protected: @@ -42,6 +43,7 @@ class TuyaCover : public cover::Cover, public Component { uint32_t max_value_; uint32_t value_range_; bool invert_position_; + bool invert_position_report_; }; } // namespace tuya From cc217d8a83a049d259b163fd01e38141373b3e9d Mon Sep 17 00:00:00 2001 From: zry98 Date: Wed, 5 Jun 2024 10:11:19 +0200 Subject: [PATCH 301/313] [Tuya Climate] Support both datapoint and pins for active state (#6789) --- esphome/components/tuya/climate/__init__.py | 15 ++-- .../components/tuya/climate/tuya_climate.cpp | 76 +++++++++++-------- 2 files changed, 52 insertions(+), 39 deletions(-) diff --git a/esphome/components/tuya/climate/__init__.py b/esphome/components/tuya/climate/__init__.py index 56eb377ed7..363e7c764b 100644 --- a/esphome/components/tuya/climate/__init__.py +++ b/esphome/components/tuya/climate/__init__.py @@ -189,8 +189,6 @@ CONFIG_SCHEMA = cv.All( cv.has_at_least_one_key(CONF_TARGET_TEMPERATURE_DATAPOINT, CONF_SWITCH_DATAPOINT), validate_temperature_multipliers, validate_cooling_values, - cv.has_at_most_one_key(CONF_ACTIVE_STATE, CONF_HEATING_STATE_PIN), - cv.has_at_most_one_key(CONF_ACTIVE_STATE, CONF_COOLING_STATE_PIN), ) @@ -207,6 +205,12 @@ async def to_code(config): if switch_datapoint := config.get(CONF_SWITCH_DATAPOINT): cg.add(var.set_switch_id(switch_datapoint)) + if heating_state_pin_config := config.get(CONF_HEATING_STATE_PIN): + heating_state_pin = await cg.gpio_pin_expression(heating_state_pin_config) + cg.add(var.set_heating_state_pin(heating_state_pin)) + if cooling_state_pin_config := config.get(CONF_COOLING_STATE_PIN): + cooling_state_pin = await cg.gpio_pin_expression(cooling_state_pin_config) + cg.add(var.set_cooling_state_pin(cooling_state_pin)) if active_state_config := config.get(CONF_ACTIVE_STATE): cg.add(var.set_active_state_id(active_state_config.get(CONF_DATAPOINT))) if (heating_value := active_state_config.get(CONF_HEATING_VALUE)) is not None: @@ -217,13 +221,6 @@ async def to_code(config): cg.add(var.set_active_state_drying_value(drying_value)) if (fanonly_value := active_state_config.get(CONF_FANONLY_VALUE)) is not None: cg.add(var.set_active_state_fanonly_value(fanonly_value)) - else: - if heating_state_pin_config := config.get(CONF_HEATING_STATE_PIN): - heating_state_pin = await cg.gpio_pin_expression(heating_state_pin_config) - cg.add(var.set_heating_state_pin(heating_state_pin)) - if cooling_state_pin_config := config.get(CONF_COOLING_STATE_PIN): - cooling_state_pin = await cg.gpio_pin_expression(cooling_state_pin_config) - cg.add(var.set_cooling_state_pin(cooling_state_pin)) if target_temperature_datapoint := config.get(CONF_TARGET_TEMPERATURE_DATAPOINT): cg.add(var.set_target_temperature_id(target_temperature_datapoint)) diff --git a/esphome/components/tuya/climate/tuya_climate.cpp b/esphome/components/tuya/climate/tuya_climate.cpp index 274e19a69e..7827a4e3ab 100644 --- a/esphome/components/tuya/climate/tuya_climate.cpp +++ b/esphome/components/tuya/climate/tuya_climate.cpp @@ -24,6 +24,14 @@ void TuyaClimate::setup() { this->publish_state(); }); } + if (this->heating_state_pin_ != nullptr) { + this->heating_state_pin_->setup(); + this->heating_state_ = this->heating_state_pin_->digital_read(); + } + if (this->cooling_state_pin_ != nullptr) { + this->cooling_state_pin_->setup(); + this->cooling_state_ = this->cooling_state_pin_->digital_read(); + } if (this->active_state_id_.has_value()) { this->parent_->register_listener(*this->active_state_id_, [this](const TuyaDatapoint &datapoint) { ESP_LOGV(TAG, "MCU reported active state is: %u", datapoint.value_enum); @@ -31,15 +39,6 @@ void TuyaClimate::setup() { this->compute_state_(); this->publish_state(); }); - } else { - if (this->heating_state_pin_ != nullptr) { - this->heating_state_pin_->setup(); - this->heating_state_ = this->heating_state_pin_->digital_read(); - } - if (this->cooling_state_pin_ != nullptr) { - this->cooling_state_pin_->setup(); - this->cooling_state_ = this->cooling_state_pin_->digital_read(); - } } if (this->target_temperature_id_.has_value()) { this->parent_->register_listener(*this->target_temperature_id_, [this](const TuyaDatapoint &datapoint) { @@ -113,9 +112,6 @@ void TuyaClimate::setup() { } void TuyaClimate::loop() { - if (this->active_state_id_.has_value()) - return; - bool state_changed = false; if (this->heating_state_pin_ != nullptr) { bool heating_state = this->heating_state_pin_->digital_read(); @@ -147,14 +143,18 @@ void TuyaClimate::control(const climate::ClimateCall &call) { this->parent_->set_boolean_datapoint_value(*this->switch_id_, switch_state); const climate::ClimateMode new_mode = *call.get_mode(); - if (new_mode == climate::CLIMATE_MODE_HEAT && this->supports_heat_) { - this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_heating_value_); - } else if (new_mode == climate::CLIMATE_MODE_COOL && this->supports_cool_) { - this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_cooling_value_); - } else if (new_mode == climate::CLIMATE_MODE_DRY && this->active_state_drying_value_.has_value()) { - this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_drying_value_); - } else if (new_mode == climate::CLIMATE_MODE_FAN_ONLY && this->active_state_fanonly_value_.has_value()) { - this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_fanonly_value_); + if (this->active_state_id_.has_value()) { + if (new_mode == climate::CLIMATE_MODE_HEAT && this->supports_heat_) { + this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_heating_value_); + } else if (new_mode == climate::CLIMATE_MODE_COOL && this->supports_cool_) { + this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_cooling_value_); + } else if (new_mode == climate::CLIMATE_MODE_DRY && this->active_state_drying_value_.has_value()) { + this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_drying_value_); + } else if (new_mode == climate::CLIMATE_MODE_FAN_ONLY && this->active_state_fanonly_value_.has_value()) { + this->parent_->set_enum_datapoint_value(*this->active_state_id_, *this->active_state_fanonly_value_); + } + } else { + ESP_LOGW(TAG, "Active state (mode) datapoint not configured"); } } @@ -422,7 +422,32 @@ void TuyaClimate::compute_state_() { } climate::ClimateAction target_action = climate::CLIMATE_ACTION_IDLE; - if (this->active_state_id_.has_value()) { + if (this->heating_state_pin_ != nullptr || this->cooling_state_pin_ != nullptr) { + // Use state from input pins + if (this->heating_state_) { + target_action = climate::CLIMATE_ACTION_HEATING; + this->mode = climate::CLIMATE_MODE_HEAT; + } else if (this->cooling_state_) { + target_action = climate::CLIMATE_ACTION_COOLING; + this->mode = climate::CLIMATE_MODE_COOL; + } + if (this->active_state_id_.has_value()) { + // Both are available, use MCU datapoint as mode + if (this->supports_heat_ && this->active_state_heating_value_.has_value() && + this->active_state_ == this->active_state_heating_value_) { + this->mode = climate::CLIMATE_MODE_HEAT; + } else if (this->supports_cool_ && this->active_state_cooling_value_.has_value() && + this->active_state_ == this->active_state_cooling_value_) { + this->mode = climate::CLIMATE_MODE_COOL; + } else if (this->active_state_drying_value_.has_value() && + this->active_state_ == this->active_state_drying_value_) { + this->mode = climate::CLIMATE_MODE_DRY; + } else if (this->active_state_fanonly_value_.has_value() && + this->active_state_ == this->active_state_fanonly_value_) { + this->mode = climate::CLIMATE_MODE_FAN_ONLY; + } + } + } else if (this->active_state_id_.has_value()) { // Use state from MCU datapoint if (this->supports_heat_ && this->active_state_heating_value_.has_value() && this->active_state_ == this->active_state_heating_value_) { @@ -441,15 +466,6 @@ void TuyaClimate::compute_state_() { target_action = climate::CLIMATE_ACTION_FAN; this->mode = climate::CLIMATE_MODE_FAN_ONLY; } - } else if (this->heating_state_pin_ != nullptr || this->cooling_state_pin_ != nullptr) { - // Use state from input pins - if (this->heating_state_) { - target_action = climate::CLIMATE_ACTION_HEATING; - this->mode = climate::CLIMATE_MODE_HEAT; - } else if (this->cooling_state_) { - target_action = climate::CLIMATE_ACTION_COOLING; - this->mode = climate::CLIMATE_MODE_COOL; - } } else { // Fallback to active state calc based on temp and hysteresis const float temp_diff = this->target_temperature - this->current_temperature; From 7143e9cd9e2073351cfd239e242e2132a36eec0b Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 6 Jun 2024 05:27:06 +1000 Subject: [PATCH 302/313] [config] Allow file: scheme for git external components (#6844) --- esphome/config_validation.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 5fc72921e1..7259e3c062 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -1949,13 +1949,13 @@ def url(value): except ValueError as e: raise Invalid("Not a valid URL") from e - if not parsed.scheme or not parsed.netloc: - raise Invalid("Expected a URL scheme and host") - return parsed.geturl() + if parsed.scheme and parsed.netloc or parsed.scheme == "file": + return parsed.geturl() + raise Invalid("Expected a file scheme or a URL scheme with host") def git_ref(value): - if re.match(r"[a-zA-Z0-9\-_.\./]+", value) is None: + if re.match(r"[a-zA-Z0-9_./-]+", value) is None: raise Invalid("Not a valid git ref") return value From 8ef4aaa70eac95656f2742b7e57d1010cfb235b5 Mon Sep 17 00:00:00 2001 From: Olivier ARCHER Date: Thu, 6 Jun 2024 04:35:28 +0200 Subject: [PATCH 303/313] [ota] http_request update platform (#5586) Co-authored-by: Keith Burzinski Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Co-authored-by: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> --- CODEOWNERS | 1 + .../components/http_request/ota/__init__.py | 189 +++++++++++ .../components/http_request/ota/automation.h | 42 +++ .../http_request/ota/ota_http_request.cpp | 293 ++++++++++++++++++ .../http_request/ota/ota_http_request.h | 72 +++++ .../ota/ota_http_request_arduino.cpp | 134 ++++++++ .../ota/ota_http_request_arduino.h | 42 +++ .../http_request/ota/ota_http_request_idf.cpp | 86 +++++ .../http_request/ota/ota_http_request_idf.h | 24 ++ .../components/http_request/ota/watchdog.cpp | 71 +++++ .../components/http_request/ota/watchdog.h | 27 ++ esphome/core/defines.h | 1 + .../{common.yaml => common_http_request.yaml} | 4 - tests/components/http_request/common_ota.yaml | 36 +++ .../http_request/test-nossl.esp8266.yaml | 38 +++ .../http_request/test.esp32-c3-idf.yaml | 4 + .../http_request/test.esp32-c3.yaml | 7 +- .../http_request/test.esp32-idf.yaml | 4 + tests/components/http_request/test.esp32.yaml | 7 +- .../components/http_request/test.esp8266.yaml | 7 +- .../components/http_request/test.rp2040.yaml | 4 + 21 files changed, 1083 insertions(+), 10 deletions(-) create mode 100644 esphome/components/http_request/ota/__init__.py create mode 100644 esphome/components/http_request/ota/automation.h create mode 100644 esphome/components/http_request/ota/ota_http_request.cpp create mode 100644 esphome/components/http_request/ota/ota_http_request.h create mode 100644 esphome/components/http_request/ota/ota_http_request_arduino.cpp create mode 100644 esphome/components/http_request/ota/ota_http_request_arduino.h create mode 100644 esphome/components/http_request/ota/ota_http_request_idf.cpp create mode 100644 esphome/components/http_request/ota/ota_http_request_idf.h create mode 100644 esphome/components/http_request/ota/watchdog.cpp create mode 100644 esphome/components/http_request/ota/watchdog.h rename tests/components/http_request/{common.yaml => common_http_request.yaml} (95%) create mode 100644 tests/components/http_request/common_ota.yaml create mode 100644 tests/components/http_request/test-nossl.esp8266.yaml create mode 100644 tests/components/http_request/test.esp32-c3-idf.yaml create mode 100644 tests/components/http_request/test.esp32-idf.yaml create mode 100644 tests/components/http_request/test.rp2040.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 82f61c3b80..90574ca9ba 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -171,6 +171,7 @@ esphome/components/host/* @clydebarrow @esphome/core esphome/components/host/time/* @clydebarrow esphome/components/hrxl_maxsonar_wr/* @netmikey esphome/components/hte501/* @Stock-M +esphome/components/http_request/ota/* @oarcher esphome/components/htu31d/* @betterengineering esphome/components/hydreon_rgxx/* @functionpointer esphome/components/hyt271/* @Philippe12 diff --git a/esphome/components/http_request/ota/__init__.py b/esphome/components/http_request/ota/__init__.py new file mode 100644 index 0000000000..6a56fac83a --- /dev/null +++ b/esphome/components/http_request/ota/__init__.py @@ -0,0 +1,189 @@ +import esphome.codegen as cg +import esphome.config_validation as cv +from esphome import automation +from esphome.const import ( + CONF_ESP8266_DISABLE_SSL_SUPPORT, + CONF_ID, + CONF_PASSWORD, + CONF_TIMEOUT, + CONF_URL, + CONF_USERNAME, +) +from esphome.components import esp32 +from esphome.components.ota import BASE_OTA_SCHEMA, ota_to_code, OTAComponent +from esphome.core import CORE, coroutine_with_priority +from .. import http_request_ns + +CODEOWNERS = ["@oarcher"] + +AUTO_LOAD = ["md5"] +DEPENDENCIES = ["network"] + +CONF_MD5 = "md5" +CONF_MD5_URL = "md5_url" +CONF_VERIFY_SSL = "verify_ssl" +CONF_WATCHDOG_TIMEOUT = "watchdog_timeout" + +OtaHttpRequestComponent = http_request_ns.class_( + "OtaHttpRequestComponent", OTAComponent +) +OtaHttpRequestComponentArduino = http_request_ns.class_( + "OtaHttpRequestComponentArduino", OtaHttpRequestComponent +) +OtaHttpRequestComponentIDF = http_request_ns.class_( + "OtaHttpRequestComponentIDF", OtaHttpRequestComponent +) +OtaHttpRequestComponentFlashAction = http_request_ns.class_( + "OtaHttpRequestComponentFlashAction", automation.Action +) + + +def validate_ssl_verification(config): + error_message = "" + + if CORE.is_esp32: + if not CORE.using_esp_idf and config[CONF_VERIFY_SSL]: + error_message = "ESPHome supports certificate verification only via ESP-IDF" + + if CORE.is_rp2040 and config[CONF_VERIFY_SSL]: + error_message = "ESPHome does not support certificate verification in Arduino" + + if ( + CORE.is_esp8266 + and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT] + and config[CONF_VERIFY_SSL] + ): + error_message = "ESPHome does not support certificate verification in Arduino" + + if len(error_message) > 0: + raise cv.Invalid( + f"{error_message}. Set '{CONF_VERIFY_SSL}: false' to skip certificate validation and allow less secure HTTPS connections." + ) + + return config + + +def _declare_request_class(value): + if CORE.using_esp_idf: + return cv.declare_id(OtaHttpRequestComponentIDF)(value) + + if CORE.is_esp8266 or CORE.is_esp32 or CORE.is_rp2040: + return cv.declare_id(OtaHttpRequestComponentArduino)(value) + return NotImplementedError + + +CONFIG_SCHEMA = cv.All( + cv.Schema( + { + cv.GenerateID(): _declare_request_class, + cv.SplitDefault(CONF_ESP8266_DISABLE_SSL_SUPPORT, esp8266=False): cv.All( + cv.only_on_esp8266, cv.boolean + ), + cv.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, + cv.Optional( + CONF_TIMEOUT, default="5min" + ): cv.positive_time_period_milliseconds, + cv.Optional(CONF_WATCHDOG_TIMEOUT): cv.All( + cv.Any(cv.only_on_esp32, cv.only_on_rp2040), + cv.positive_not_null_time_period, + cv.positive_time_period_milliseconds, + ), + } + ) + .extend(BASE_OTA_SCHEMA) + .extend(cv.COMPONENT_SCHEMA), + cv.require_framework_version( + esp8266_arduino=cv.Version(2, 5, 1), + esp32_arduino=cv.Version(0, 0, 0), + esp_idf=cv.Version(0, 0, 0), + rp2040_arduino=cv.Version(0, 0, 0), + ), + validate_ssl_verification, +) + + +@coroutine_with_priority(52.0) +async def to_code(config): + var = cg.new_Pvariable(config[CONF_ID]) + await ota_to_code(var, config) + + cg.add(var.set_timeout(config[CONF_TIMEOUT])) + + if timeout_ms := config.get(CONF_WATCHDOG_TIMEOUT): + cg.add_define( + "USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT", + timeout_ms, + ) + + if CORE.is_esp8266 and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT]: + cg.add_define("USE_HTTP_REQUEST_ESP8266_HTTPS") + + if CORE.is_esp32: + if CORE.using_esp_idf: + esp32.add_idf_sdkconfig_option( + "CONFIG_MBEDTLS_CERTIFICATE_BUNDLE", + config.get(CONF_VERIFY_SSL), + ) + esp32.add_idf_sdkconfig_option( + "CONFIG_ESP_TLS_INSECURE", + not config.get(CONF_VERIFY_SSL), + ) + esp32.add_idf_sdkconfig_option( + "CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY", + not config.get(CONF_VERIFY_SSL), + ) + else: + cg.add_library("WiFiClientSecure", None) + cg.add_library("HTTPClient", None) + if CORE.is_esp8266: + cg.add_library("ESP8266HTTPClient", None) + if CORE.is_rp2040 and CORE.using_arduino: + cg.add_library("HTTPClient", None) + + await cg.register_component(var, config) + + +OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA = cv.All( + cv.Schema( + { + cv.GenerateID(): cv.use_id(OtaHttpRequestComponent), + cv.Optional(CONF_MD5_URL): cv.templatable(cv.url), + cv.Optional(CONF_MD5): cv.templatable(cv.string), + cv.Optional(CONF_PASSWORD): cv.templatable(cv.string), + cv.Optional(CONF_USERNAME): cv.templatable(cv.string), + cv.Required(CONF_URL): cv.templatable(cv.url), + } + ), + cv.has_exactly_one_key(CONF_MD5, CONF_MD5_URL), +) + + +@automation.register_action( + "ota_http_request.flash", + OtaHttpRequestComponentFlashAction, + OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA, +) +async def ota_http_request_action_to_code(config, action_id, template_arg, args): + paren = await cg.get_variable(config[CONF_ID]) + var = cg.new_Pvariable(action_id, template_arg, paren) + + if md5_url := config.get(CONF_MD5_URL): + template_ = await cg.templatable(md5_url, args, cg.std_string) + cg.add(var.set_md5_url(template_)) + + if md5_str := config.get(CONF_MD5): + template_ = await cg.templatable(md5_str, args, cg.std_string) + cg.add(var.set_md5(template_)) + + if password_str := config.get(CONF_PASSWORD): + template_ = await cg.templatable(password_str, args, cg.std_string) + cg.add(var.set_password(template_)) + + if username_str := config.get(CONF_USERNAME): + template_ = await cg.templatable(username_str, args, cg.std_string) + cg.add(var.set_username(template_)) + + template_ = await cg.templatable(config[CONF_URL], args, cg.std_string) + cg.add(var.set_url(template_)) + + return var diff --git a/esphome/components/http_request/ota/automation.h b/esphome/components/http_request/ota/automation.h new file mode 100644 index 0000000000..d4c21f1c72 --- /dev/null +++ b/esphome/components/http_request/ota/automation.h @@ -0,0 +1,42 @@ +#pragma once +#include "ota_http_request.h" + +#include "esphome/core/automation.h" + +namespace esphome { +namespace http_request { + +template class OtaHttpRequestComponentFlashAction : public Action { + public: + OtaHttpRequestComponentFlashAction(OtaHttpRequestComponent *parent) : parent_(parent) {} + TEMPLATABLE_VALUE(std::string, md5_url) + TEMPLATABLE_VALUE(std::string, md5) + TEMPLATABLE_VALUE(std::string, password) + TEMPLATABLE_VALUE(std::string, url) + TEMPLATABLE_VALUE(std::string, username) + + void play(Ts... x) override { + if (this->md5_url_.has_value()) { + this->parent_->set_md5_url(this->md5_url_.value(x...)); + } + if (this->md5_.has_value()) { + this->parent_->set_md5(this->md5_.value(x...)); + } + if (this->password_.has_value()) { + this->parent_->set_password(this->password_.value(x...)); + } + if (this->username_.has_value()) { + this->parent_->set_username(this->username_.value(x...)); + } + this->parent_->set_url(this->url_.value(x...)); + + this->parent_->flash(); + // Normally never reached due to reboot + } + + protected: + OtaHttpRequestComponent *parent_; +}; + +} // namespace http_request +} // namespace esphome diff --git a/esphome/components/http_request/ota/ota_http_request.cpp b/esphome/components/http_request/ota/ota_http_request.cpp new file mode 100644 index 0000000000..cf0816c858 --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request.cpp @@ -0,0 +1,293 @@ +#include "ota_http_request.h" +#include "watchdog.h" + +#include "esphome/core/application.h" +#include "esphome/core/defines.h" +#include "esphome/core/log.h" + +#include "esphome/components/md5/md5.h" +#include "esphome/components/ota/ota_backend_arduino_esp32.h" +#include "esphome/components/ota/ota_backend_arduino_esp8266.h" +#include "esphome/components/ota/ota_backend_arduino_rp2040.h" +#include "esphome/components/ota/ota_backend_esp_idf.h" +#include "esphome/components/ota/ota_backend.h" + +namespace esphome { +namespace http_request { + +void OtaHttpRequestComponent::setup() { +#ifdef USE_OTA_STATE_CALLBACK + ota::register_ota_platform(this); +#endif +} + +void OtaHttpRequestComponent::dump_config() { + ESP_LOGCONFIG(TAG, "Over-The-Air updates via HTTP request:"); + ESP_LOGCONFIG(TAG, " Timeout: %llus", this->timeout_ / 1000); +#ifdef USE_ESP8266 +#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS + ESP_LOGCONFIG(TAG, " ESP8266 SSL support: No"); +#else + ESP_LOGCONFIG(TAG, " ESP8266 SSL support: Yes"); +#endif +#endif +#ifdef CONFIG_MBEDTLS_CERTIFICATE_BUNDLE + ESP_LOGCONFIG(TAG, " TLS server verification: Yes"); +#else + ESP_LOGCONFIG(TAG, " TLS server verification: No"); +#endif +#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT + ESP_LOGCONFIG(TAG, " Watchdog timeout: %ds", USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT / 1000); +#endif +}; + +void OtaHttpRequestComponent::set_md5_url(const std::string &url) { + if (!this->validate_url_(url)) { + this->md5_url_.clear(); // URL was not valid; prevent flashing until it is + return; + } + this->md5_url_ = url; + this->md5_expected_.clear(); // to be retrieved later +} + +void OtaHttpRequestComponent::set_url(const std::string &url) { + if (!this->validate_url_(url)) { + this->url_.clear(); // URL was not valid; prevent flashing until it is + return; + } + this->url_ = url; +} + +bool OtaHttpRequestComponent::check_status() { + // status can be -1, or HTTP status code + if (this->status_ < 100) { + ESP_LOGE(TAG, "HTTP server did not respond (error %d)", this->status_); + return false; + } + if (this->status_ >= 310) { + ESP_LOGE(TAG, "HTTP error %d", this->status_); + return false; + } + ESP_LOGV(TAG, "HTTP status %d", this->status_); + return true; +} + +void OtaHttpRequestComponent::flash() { + if (this->url_.empty()) { + ESP_LOGE(TAG, "URL not set; cannot start update"); + return; + } + + ESP_LOGI(TAG, "Starting update..."); +#ifdef USE_OTA_STATE_CALLBACK + this->state_callback_.call(ota::OTA_STARTED, 0.0f, 0); +#endif + + auto ota_status = this->do_ota_(); + + switch (ota_status) { + case ota::OTA_RESPONSE_OK: +#ifdef USE_OTA_STATE_CALLBACK + this->state_callback_.call(ota::OTA_COMPLETED, 100.0f, ota_status); +#endif + delay(10); + App.safe_reboot(); + break; + + default: +#ifdef USE_OTA_STATE_CALLBACK + this->state_callback_.call(ota::OTA_ERROR, 0.0f, ota_status); +#endif + this->md5_computed_.clear(); // will be reset at next attempt + this->md5_expected_.clear(); // will be reset at next attempt + break; + } +} + +void OtaHttpRequestComponent::cleanup_(std::unique_ptr backend) { + if (this->update_started_) { + ESP_LOGV(TAG, "Aborting OTA backend"); + backend->abort(); + } + ESP_LOGV(TAG, "Aborting HTTP connection"); + this->http_end(); +}; + +uint8_t OtaHttpRequestComponent::do_ota_() { + uint8_t buf[this->http_recv_buffer_ + 1]; + uint32_t last_progress = 0; + uint32_t update_start_time = millis(); + md5::MD5Digest md5_receive; + std::unique_ptr md5_receive_str(new char[33]); + + if (this->md5_expected_.empty() && !this->http_get_md5_()) { + return OTA_MD5_INVALID; + } + + ESP_LOGD(TAG, "MD5 expected: %s", this->md5_expected_.c_str()); + + auto url_with_auth = this->get_url_with_auth_(this->url_); + if (url_with_auth.empty()) { + return OTA_BAD_URL; + } + ESP_LOGVV(TAG, "url_with_auth: %s", url_with_auth.c_str()); + ESP_LOGI(TAG, "Connecting to: %s", this->url_.c_str()); + this->http_init(url_with_auth); + if (!this->check_status()) { + this->http_end(); + return OTA_CONNECTION_ERROR; + } + + // we will compute MD5 on the fly for verification -- Arduino OTA seems to ignore it + md5_receive.init(); + ESP_LOGV(TAG, "MD5Digest initialized"); + + ESP_LOGV(TAG, "OTA backend begin"); + auto backend = ota::make_ota_backend(); + auto error_code = backend->begin(this->body_length_); + if (error_code != ota::OTA_RESPONSE_OK) { + ESP_LOGW(TAG, "backend->begin error: %d", error_code); + this->cleanup_(std::move(backend)); + return error_code; + } + + this->bytes_read_ = 0; + while (this->bytes_read_ < this->body_length_) { + // read a maximum of chunk_size bytes into buf. (real read size returned) + int bufsize = this->http_read(buf, this->http_recv_buffer_); + ESP_LOGVV(TAG, "bytes_read_ = %u, body_length_ = %u, bufsize = %i", this->bytes_read_, this->body_length_, bufsize); + + // feed watchdog and give other tasks a chance to run + App.feed_wdt(); + yield(); + + if (bufsize < 0) { + ESP_LOGE(TAG, "Stream closed"); + this->cleanup_(std::move(backend)); + return OTA_CONNECTION_ERROR; + } else if (bufsize > 0 && bufsize <= this->http_recv_buffer_) { + // add read bytes to MD5 + md5_receive.add(buf, bufsize); + + // write bytes to OTA backend + this->update_started_ = true; + error_code = backend->write(buf, bufsize); + if (error_code != ota::OTA_RESPONSE_OK) { + // error code explanation available at + // https://github.com/esphome/esphome/blob/dev/esphome/components/ota/ota_backend.h + ESP_LOGE(TAG, "Error code (%02X) writing binary data to flash at offset %d and size %d", error_code, + this->bytes_read_ - bufsize, this->body_length_); + this->cleanup_(std::move(backend)); + return error_code; + } + } + + uint32_t now = millis(); + if ((now - last_progress > 1000) or (this->bytes_read_ == this->body_length_)) { + last_progress = now; + float percentage = this->bytes_read_ * 100.0f / this->body_length_; + ESP_LOGD(TAG, "Progress: %0.1f%%", percentage); +#ifdef USE_OTA_STATE_CALLBACK + this->state_callback_.call(ota::OTA_IN_PROGRESS, percentage, 0); +#endif + } + } // while + + ESP_LOGI(TAG, "Done in %.0f seconds", float(millis() - update_start_time) / 1000); + + // verify MD5 is as expected and act accordingly + md5_receive.calculate(); + md5_receive.get_hex(md5_receive_str.get()); + this->md5_computed_ = md5_receive_str.get(); + if (strncmp(this->md5_computed_.c_str(), this->md5_expected_.c_str(), MD5_SIZE) != 0) { + ESP_LOGE(TAG, "MD5 computed: %s - Aborting due to MD5 mismatch", this->md5_computed_.c_str()); + this->cleanup_(std::move(backend)); + return ota::OTA_RESPONSE_ERROR_MD5_MISMATCH; + } else { + backend->set_update_md5(md5_receive_str.get()); + } + + this->http_end(); + + // feed watchdog and give other tasks a chance to run + App.feed_wdt(); + yield(); + delay(100); // NOLINT + + error_code = backend->end(); + if (error_code != ota::OTA_RESPONSE_OK) { + ESP_LOGW(TAG, "Error ending update! error_code: %d", error_code); + this->cleanup_(std::move(backend)); + return error_code; + } + + ESP_LOGI(TAG, "Update complete"); + return ota::OTA_RESPONSE_OK; +} + +std::string OtaHttpRequestComponent::get_url_with_auth_(const std::string &url) { + if (this->username_.empty() || this->password_.empty()) { + return url; + } + + auto start_char = url.find("://"); + if ((start_char == std::string::npos) || (start_char < 4)) { + ESP_LOGE(TAG, "Incorrect URL prefix"); + return {}; + } + + ESP_LOGD(TAG, "Using basic HTTP authentication"); + + start_char += 3; // skip '://' characters + auto url_with_auth = + url.substr(0, start_char) + this->username_ + ":" + this->password_ + "@" + url.substr(start_char); + return url_with_auth; +} + +bool OtaHttpRequestComponent::http_get_md5_() { + if (this->md5_url_.empty()) { + return false; + } + + auto url_with_auth = this->get_url_with_auth_(this->md5_url_); + if (url_with_auth.empty()) { + return false; + } + + ESP_LOGVV(TAG, "url_with_auth: %s", url_with_auth.c_str()); + ESP_LOGI(TAG, "Connecting to: %s", this->md5_url_.c_str()); + this->http_init(url_with_auth); + if (!this->check_status()) { + this->http_end(); + return false; + } + int length = this->body_length_; + if (length < 0) { + this->http_end(); + return false; + } + if (length < MD5_SIZE) { + ESP_LOGE(TAG, "MD5 file must be %u bytes; %u bytes reported by HTTP server. Aborting", MD5_SIZE, + this->body_length_); + this->http_end(); + return false; + } + + this->bytes_read_ = 0; + this->md5_expected_.resize(MD5_SIZE); + auto read_len = this->http_read((uint8_t *) this->md5_expected_.data(), MD5_SIZE); + this->http_end(); + + return read_len == MD5_SIZE; +} + +bool OtaHttpRequestComponent::validate_url_(const std::string &url) { + if ((url.length() < 8) || (url.find("http") != 0) || (url.find("://") == std::string::npos)) { + ESP_LOGE(TAG, "URL is invalid and/or must be prefixed with 'http://' or 'https://'"); + return false; + } + return true; +} + +} // namespace http_request +} // namespace esphome diff --git a/esphome/components/http_request/ota/ota_http_request.h b/esphome/components/http_request/ota/ota_http_request.h new file mode 100644 index 0000000000..9fbdf2ec25 --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request.h @@ -0,0 +1,72 @@ +#pragma once + +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/components/ota/ota_backend.h" + +#include +#include +#include + +namespace esphome { +namespace http_request { + +static const char *const TAG = "http_request.ota"; +static const uint8_t MD5_SIZE = 32; + +enum OtaHttpRequestError : uint8_t { + OTA_MD5_INVALID = 0x10, + OTA_BAD_URL = 0x11, + OTA_CONNECTION_ERROR = 0x12, +}; + +class OtaHttpRequestComponent : public ota::OTAComponent { + public: + void setup() override; + void dump_config() override; + float get_setup_priority() const override { return setup_priority::AFTER_WIFI; } + + void set_md5_url(const std::string &md5_url); + void set_md5(const std::string &md5) { this->md5_expected_ = md5; } + void set_password(const std::string &password) { this->password_ = password; } + void set_timeout(const uint64_t timeout) { this->timeout_ = timeout; } + void set_url(const std::string &url); + void set_username(const std::string &username) { this->username_ = username; } + + std::string md5_computed() { return this->md5_computed_; } + std::string md5_expected() { return this->md5_expected_; } + + bool check_status(); + + void flash(); + + virtual void http_init(const std::string &url){}; + virtual int http_read(uint8_t *buf, size_t len) { return 0; }; + virtual void http_end(){}; + + protected: + void cleanup_(std::unique_ptr backend); + uint8_t do_ota_(); + std::string get_url_with_auth_(const std::string &url); + bool http_get_md5_(); + bool secure_() { return this->url_.find("https:") != std::string::npos; }; + bool validate_url_(const std::string &url); + + std::string md5_computed_{}; + std::string md5_expected_{}; + std::string md5_url_{}; + std::string password_{}; + std::string username_{}; + std::string url_{}; + size_t body_length_ = 0; + size_t bytes_read_ = 0; + int status_ = -1; + uint64_t timeout_ = 0; + bool update_started_ = false; + const uint16_t http_recv_buffer_ = 256; // the firmware GET chunk size + const uint16_t max_http_recv_buffer_ = 512; // internal max http buffer size must be > HTTP_RECV_BUFFER_ (TLS + // overhead) and must be a power of two from 512 to 4096 +}; + +} // namespace http_request +} // namespace esphome diff --git a/esphome/components/http_request/ota/ota_http_request_arduino.cpp b/esphome/components/http_request/ota/ota_http_request_arduino.cpp new file mode 100644 index 0000000000..d1dc638d5e --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request_arduino.cpp @@ -0,0 +1,134 @@ +#include "ota_http_request.h" +#include "watchdog.h" + +#ifdef USE_ARDUINO +#include "ota_http_request_arduino.h" +#include "esphome/core/defines.h" +#include "esphome/core/log.h" +#include "esphome/core/application.h" +#include "esphome/components/network/util.h" +#include "esphome/components/md5/md5.h" + +namespace esphome { +namespace http_request { + +struct Header { + const char *name; + const char *value; +}; + +void OtaHttpRequestComponentArduino::http_init(const std::string &url) { + const char *header_keys[] = {"Content-Length", "Content-Type"}; + const size_t header_count = sizeof(header_keys) / sizeof(header_keys[0]); + watchdog::WatchdogManager wdts; + +#ifdef USE_ESP8266 + if (this->stream_ptr_ == nullptr && this->set_stream_ptr_()) { + ESP_LOGE(TAG, "Unable to set client"); + return; + } +#endif // USE_ESP8266 + +#ifdef USE_RP2040 + this->client_.setInsecure(); +#endif + + App.feed_wdt(); + +#if defined(USE_ESP32) || defined(USE_RP2040) + this->status_ = this->client_.begin(url.c_str()); +#endif +#ifdef USE_ESP8266 + this->client_.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); + this->status_ = this->client_.begin(*this->stream_ptr_, url.c_str()); +#endif + + if (!this->status_) { + this->client_.end(); + return; + } + + this->client_.setReuse(true); + + // returned needed headers must be collected before the requests + this->client_.collectHeaders(header_keys, header_count); + + // HTTP GET + this->status_ = this->client_.GET(); + + this->body_length_ = (size_t) this->client_.getSize(); + +#if defined(USE_ESP32) || defined(USE_RP2040) + if (this->stream_ptr_ == nullptr) { + this->set_stream_ptr_(); + } +#endif +} + +int OtaHttpRequestComponentArduino::http_read(uint8_t *buf, const size_t max_len) { +#ifdef USE_ESP8266 +#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(3, 1, 0) // && USE_ARDUINO_VERSION_CODE < VERSION_CODE(?, ?, ?) + if (!this->secure_()) { + ESP_LOGW(TAG, "Using HTTP on Arduino version >= 3.1 is **very** slow. Consider setting framework version to 3.0.2 " + "in your YAML, or use HTTPS"); + } +#endif // USE_ARDUINO_VERSION_CODE +#endif // USE_ESP8266 + + watchdog::WatchdogManager wdts; + + // Since arduino8266 >= 3.1 using this->stream_ptr_ is broken (https://github.com/esp8266/Arduino/issues/9035) + WiFiClient *stream_ptr = this->client_.getStreamPtr(); + if (stream_ptr == nullptr) { + ESP_LOGE(TAG, "Stream pointer vanished!"); + return -1; + } + + int available_data = stream_ptr->available(); + int bufsize = std::min((int) max_len, available_data); + if (bufsize > 0) { + stream_ptr->readBytes(buf, bufsize); + this->bytes_read_ += bufsize; + buf[bufsize] = '\0'; // not fed to ota + } + + return bufsize; +} + +void OtaHttpRequestComponentArduino::http_end() { + watchdog::WatchdogManager wdts; + this->client_.end(); +} + +int OtaHttpRequestComponentArduino::set_stream_ptr_() { +#ifdef USE_ESP8266 +#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS + if (this->secure_()) { + ESP_LOGV(TAG, "ESP8266 HTTPS connection with WiFiClientSecure"); + this->stream_ptr_ = std::make_unique(); + WiFiClientSecure *secure_client = static_cast(this->stream_ptr_.get()); + secure_client->setBufferSizes(this->max_http_recv_buffer_, 512); + secure_client->setInsecure(); + } else { + this->stream_ptr_ = std::make_unique(); + } +#else + ESP_LOGV(TAG, "ESP8266 HTTP connection with WiFiClient"); + if (this->secure_()) { + ESP_LOGE(TAG, "Can't use HTTPS connection with esp8266_disable_ssl_support"); + return -1; + } + this->stream_ptr_ = std::make_unique(); +#endif // USE_HTTP_REQUEST_ESP8266_HTTPS +#endif // USE_ESP8266 + +#if defined(USE_ESP32) || defined(USE_RP2040) + this->stream_ptr_ = std::unique_ptr(this->client_.getStreamPtr()); +#endif + return 0; +} + +} // namespace http_request +} // namespace esphome + +#endif // USE_ARDUINO diff --git a/esphome/components/http_request/ota/ota_http_request_arduino.h b/esphome/components/http_request/ota/ota_http_request_arduino.h new file mode 100644 index 0000000000..02bc046520 --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request_arduino.h @@ -0,0 +1,42 @@ +#pragma once + +#include "ota_http_request.h" + +#ifdef USE_ARDUINO +#include "esphome/core/automation.h" +#include "esphome/core/component.h" +#include "esphome/core/defines.h" + +#include +#include +#include + +#if defined(USE_ESP32) || defined(USE_RP2040) +#include +#endif +#ifdef USE_ESP8266 +#include +#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS +#include +#endif +#endif + +namespace esphome { +namespace http_request { + +class OtaHttpRequestComponentArduino : public OtaHttpRequestComponent { + public: + void http_init(const std::string &url) override; + int http_read(uint8_t *buf, size_t len) override; + void http_end() override; + + protected: + int set_stream_ptr_(); + HTTPClient client_{}; + std::unique_ptr stream_ptr_; +}; + +} // namespace http_request +} // namespace esphome + +#endif // USE_ARDUINO diff --git a/esphome/components/http_request/ota/ota_http_request_idf.cpp b/esphome/components/http_request/ota/ota_http_request_idf.cpp new file mode 100644 index 0000000000..9fa565d9bb --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request_idf.cpp @@ -0,0 +1,86 @@ +#include "ota_http_request_idf.h" +#include "watchdog.h" + +#ifdef USE_ESP_IDF +#include "esphome/core/application.h" +#include "esphome/core/defines.h" +#include "esphome/core/log.h" +#include "esphome/components/md5/md5.h" +#include "esphome/components/network/util.h" + +#include "esp_event.h" +#include "esp_http_client.h" +#include "esp_idf_version.h" +#include "esp_log.h" +#include "esp_netif.h" +#include "esp_system.h" +#include "esp_task_wdt.h" +#include "esp_tls.h" + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "nvs_flash.h" + +#include +#include +#include +#include +#include +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE +#include "esp_crt_bundle.h" +#endif + +namespace esphome { +namespace http_request { + +void OtaHttpRequestComponentIDF::http_init(const std::string &url) { + App.feed_wdt(); +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" + esp_http_client_config_t config = {nullptr}; + config.url = url.c_str(); + config.method = HTTP_METHOD_GET; + config.timeout_ms = (int) this->timeout_; + config.buffer_size = this->max_http_recv_buffer_; + config.auth_type = HTTP_AUTH_TYPE_BASIC; + config.max_authorization_retries = -1; +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE + if (this->secure_()) { + config.crt_bundle_attach = esp_crt_bundle_attach; + } +#endif +#pragma GCC diagnostic pop + + watchdog::WatchdogManager wdts; + this->client_ = esp_http_client_init(&config); + if ((this->status_ = esp_http_client_open(this->client_, 0)) == ESP_OK) { + this->body_length_ = esp_http_client_fetch_headers(this->client_); + this->status_ = esp_http_client_get_status_code(this->client_); + } +} + +int OtaHttpRequestComponentIDF::http_read(uint8_t *buf, const size_t max_len) { + watchdog::WatchdogManager wdts; + int bufsize = std::min(max_len, this->body_length_ - this->bytes_read_); + + App.feed_wdt(); + int read_len = esp_http_client_read(this->client_, (char *) buf, bufsize); + if (read_len > 0) { + this->bytes_read_ += bufsize; + buf[bufsize] = '\0'; // not fed to ota + } + + return read_len; +} + +void OtaHttpRequestComponentIDF::http_end() { + watchdog::WatchdogManager wdts; + + esp_http_client_close(this->client_); + esp_http_client_cleanup(this->client_); +} + +} // namespace http_request +} // namespace esphome + +#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/ota/ota_http_request_idf.h b/esphome/components/http_request/ota/ota_http_request_idf.h new file mode 100644 index 0000000000..9783b2a3e1 --- /dev/null +++ b/esphome/components/http_request/ota/ota_http_request_idf.h @@ -0,0 +1,24 @@ +#pragma once + +#include "ota_http_request.h" + +#ifdef USE_ESP_IDF +#include "esp_http_client.h" + +namespace esphome { +namespace http_request { + +class OtaHttpRequestComponentIDF : public OtaHttpRequestComponent { + public: + void http_init(const std::string &url) override; + int http_read(uint8_t *buf, size_t len) override; + void http_end() override; + + protected: + esp_http_client_handle_t client_{}; +}; + +} // namespace http_request +} // namespace esphome + +#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/ota/watchdog.cpp b/esphome/components/http_request/ota/watchdog.cpp new file mode 100644 index 0000000000..663c9afaac --- /dev/null +++ b/esphome/components/http_request/ota/watchdog.cpp @@ -0,0 +1,71 @@ +#include "watchdog.h" + +#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT + +#include "esphome/core/application.h" +#include "esphome/core/log.h" + +#include +#include +#ifdef USE_ESP32 +#include "esp_idf_version.h" +#include "esp_task_wdt.h" +#endif +#ifdef USE_RP2040 +#include "hardware/watchdog.h" +#include "pico/stdlib.h" +#endif + +namespace esphome { +namespace http_request { +namespace watchdog { + +static const char *const TAG = "watchdog.http_request.ota"; + +WatchdogManager::WatchdogManager() { + this->saved_timeout_ms_ = this->get_timeout_(); + this->set_timeout_(USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT); +} + +WatchdogManager::~WatchdogManager() { this->set_timeout_(this->saved_timeout_ms_); } + +void WatchdogManager::set_timeout_(uint32_t timeout_ms) { + ESP_LOGV(TAG, "Adjusting WDT to %" PRIu32 "ms", timeout_ms); +#ifdef USE_ESP32 +#if ESP_IDF_VERSION_MAJOR >= 5 + esp_task_wdt_config_t wdt_config = { + .timeout_ms = timeout_ms, + .idle_core_mask = 0x03, + .trigger_panic = true, + }; + esp_task_wdt_reconfigure(&wdt_config); +#else + esp_task_wdt_init(timeout_ms, true); +#endif // ESP_IDF_VERSION_MAJOR +#endif // USE_ESP32 + +#ifdef USE_RP2040 + watchdog_enable(timeout_ms, true); +#endif +} + +uint32_t WatchdogManager::get_timeout_() { + uint32_t timeout_ms = 0; + +#ifdef USE_ESP32 + timeout_ms = (uint32_t) CONFIG_ESP_TASK_WDT_TIMEOUT_S * 1000; +#endif // USE_ESP32 + +#ifdef USE_RP2040 + timeout_ms = watchdog_get_count() / 1000; +#endif + + ESP_LOGVV(TAG, "get_timeout: %" PRIu32 "ms", timeout_ms); + + return timeout_ms; +} + +} // namespace watchdog +} // namespace http_request +} // namespace esphome +#endif diff --git a/esphome/components/http_request/ota/watchdog.h b/esphome/components/http_request/ota/watchdog.h new file mode 100644 index 0000000000..0a09dcd6fa --- /dev/null +++ b/esphome/components/http_request/ota/watchdog.h @@ -0,0 +1,27 @@ +#pragma once + +#include "esphome/core/defines.h" + +#include + +namespace esphome { +namespace http_request { +namespace watchdog { + +class WatchdogManager { +#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT + public: + WatchdogManager(); + ~WatchdogManager(); + + private: + uint32_t get_timeout_(); + void set_timeout_(uint32_t timeout_ms); + + uint32_t saved_timeout_ms_{0}; +#endif +}; + +} // namespace watchdog +} // namespace http_request +} // namespace esphome diff --git a/esphome/core/defines.h b/esphome/core/defines.h index c2ad0f641c..76b6af6592 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -33,6 +33,7 @@ #define USE_GRAPH #define USE_GRAPHICAL_DISPLAY_MENU #define USE_HOMEASSISTANT_TIME +#define USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT 8000 // NOLINT #define USE_JSON #define USE_LIGHT #define USE_LOCK diff --git a/tests/components/http_request/common.yaml b/tests/components/http_request/common_http_request.yaml similarity index 95% rename from tests/components/http_request/common.yaml rename to tests/components/http_request/common_http_request.yaml index 848fe3f509..b00768c736 100644 --- a/tests/components/http_request/common.yaml +++ b/tests/components/http_request/common_http_request.yaml @@ -28,10 +28,6 @@ esphome: body: "Some data" verify_ssl: false -wifi: - ssid: MySSID - password: password1 - http_request: useragent: esphome/tagreader timeout: 10s diff --git a/tests/components/http_request/common_ota.yaml b/tests/components/http_request/common_ota.yaml new file mode 100644 index 0000000000..10e7d54c3f --- /dev/null +++ b/tests/components/http_request/common_ota.yaml @@ -0,0 +1,36 @@ +wifi: + ssid: MySSID + password: password1 + +ota: + - platform: http_request + verify_ssl: ${verify_ssl} + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: 'ESP_LOGD("ota", "State %d", state);' + +button: + - platform: template + name: Firmware update + on_press: + then: + - ota_http_request.flash: + md5_url: http://my.ha.net:8123/local/esphome/firmware.md5 + url: http://my.ha.net:8123/local/esphome/firmware.bin + - logger.log: "This message should be not displayed (reboot)" diff --git a/tests/components/http_request/test-nossl.esp8266.yaml b/tests/components/http_request/test-nossl.esp8266.yaml new file mode 100644 index 0000000000..65116d5550 --- /dev/null +++ b/tests/components/http_request/test-nossl.esp8266.yaml @@ -0,0 +1,38 @@ +<<: !include common_http_request.yaml + +wifi: + ssid: MySSID + password: password1 + +ota: + - platform: http_request + esp8266_disable_ssl_support: true + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: 'ESP_LOGD("ota", "State %d", state);' + +button: + - platform: template + name: Firmware update + on_press: + then: + - ota_http_request.flash: + md5_url: http://my.ha.net:8123/local/esphome/firmware.md5 + url: http://my.ha.net:8123/local/esphome/firmware.bin + - logger.log: "This message should be not displayed (reboot)" diff --git a/tests/components/http_request/test.esp32-c3-idf.yaml b/tests/components/http_request/test.esp32-c3-idf.yaml new file mode 100644 index 0000000000..da629e83a9 --- /dev/null +++ b/tests/components/http_request/test.esp32-c3-idf.yaml @@ -0,0 +1,4 @@ +substitutions: + verify_ssl: "true" + +<<: !include common_ota.yaml diff --git a/tests/components/http_request/test.esp32-c3.yaml b/tests/components/http_request/test.esp32-c3.yaml index 25cb37a0b4..1f597bb500 100644 --- a/tests/components/http_request/test.esp32-c3.yaml +++ b/tests/components/http_request/test.esp32-c3.yaml @@ -1,2 +1,5 @@ -packages: - common: !include common.yaml +substitutions: + verify_ssl: "false" + +<<: !include common_http_request.yaml +<<: !include common_ota.yaml diff --git a/tests/components/http_request/test.esp32-idf.yaml b/tests/components/http_request/test.esp32-idf.yaml new file mode 100644 index 0000000000..da629e83a9 --- /dev/null +++ b/tests/components/http_request/test.esp32-idf.yaml @@ -0,0 +1,4 @@ +substitutions: + verify_ssl: "true" + +<<: !include common_ota.yaml diff --git a/tests/components/http_request/test.esp32.yaml b/tests/components/http_request/test.esp32.yaml index 25cb37a0b4..1f597bb500 100644 --- a/tests/components/http_request/test.esp32.yaml +++ b/tests/components/http_request/test.esp32.yaml @@ -1,2 +1,5 @@ -packages: - common: !include common.yaml +substitutions: + verify_ssl: "false" + +<<: !include common_http_request.yaml +<<: !include common_ota.yaml diff --git a/tests/components/http_request/test.esp8266.yaml b/tests/components/http_request/test.esp8266.yaml index 25cb37a0b4..1f597bb500 100644 --- a/tests/components/http_request/test.esp8266.yaml +++ b/tests/components/http_request/test.esp8266.yaml @@ -1,2 +1,5 @@ -packages: - common: !include common.yaml +substitutions: + verify_ssl: "false" + +<<: !include common_http_request.yaml +<<: !include common_ota.yaml diff --git a/tests/components/http_request/test.rp2040.yaml b/tests/components/http_request/test.rp2040.yaml new file mode 100644 index 0000000000..077e4d82da --- /dev/null +++ b/tests/components/http_request/test.rp2040.yaml @@ -0,0 +1,4 @@ +substitutions: + verify_ssl: "false" + +<<: !include common_ota.yaml From ccab57fc583189976248b7574eb4ca448860b16a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:30:49 +1200 Subject: [PATCH 304/313] [logger] Fix defines for development (#6870) * [logger] Fix defines for development * Set debugging flags for rp2040 --- esphome/components/logger/__init__.py | 27 ++++++++++++++++++++------- esphome/core/defines.h | 9 +++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/esphome/components/logger/__init__.py b/esphome/components/logger/__init__.py index c05f3d54aa..99aa39c4ba 100644 --- a/esphome/components/logger/__init__.py +++ b/esphome/components/logger/__init__.py @@ -112,11 +112,18 @@ HARDWARE_UART_TO_UART_SELECTION = { } HARDWARE_UART_TO_SERIAL = { - UART0: cg.global_ns.Serial, - UART0_SWAP: cg.global_ns.Serial, - UART1: cg.global_ns.Serial1, - UART2: cg.global_ns.Serial2, - DEFAULT: cg.global_ns.Serial, + PLATFORM_ESP8266: { + UART0: cg.global_ns.Serial, + UART0_SWAP: cg.global_ns.Serial, + UART1: cg.global_ns.Serial1, + UART2: cg.global_ns.Serial2, + DEFAULT: cg.global_ns.Serial, + }, + PLATFORM_RP2040: { + UART0: cg.global_ns.Serial1, + UART1: cg.global_ns.Serial2, + USB_CDC: cg.global_ns.Serial, + }, } is_log_level = cv.one_of(*LOG_LEVELS, upper=True) @@ -244,8 +251,14 @@ async def to_code(config): is_at_least_very_verbose = this_severity >= very_verbose_severity has_serial_logging = baud_rate != 0 - if CORE.is_esp8266 and has_serial_logging and is_at_least_verbose: - debug_serial_port = HARDWARE_UART_TO_SERIAL[config.get(CONF_HARDWARE_UART)] + if ( + (CORE.is_esp8266 or CORE.is_rp2040) + and has_serial_logging + and is_at_least_verbose + ): + debug_serial_port = HARDWARE_UART_TO_SERIAL[CORE.target_platform][ + config.get(CONF_HARDWARE_UART) + ] cg.add_build_flag(f"-DDEBUG_ESP_PORT={debug_serial_port}") cg.add_build_flag("-DLWIP_DEBUG") DEBUG_COMPONENTS = { diff --git a/esphome/core/defines.h b/esphome/core/defines.h index 76b6af6592..affcd78089 100644 --- a/esphome/core/defines.h +++ b/esphome/core/defines.h @@ -101,6 +101,14 @@ #ifdef USE_ESP_IDF #define USE_ESP_IDF_VERSION_CODE VERSION_CODE(4, 4, 2) #endif + +#if defined(USE_ESP32_VARIANT_ESP32S2) +#define USE_LOGGER_USB_CDC +#elif defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C3) || \ + defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) +#define USE_LOGGER_USB_CDC +#define USE_LOGGER_USB_SERIAL_JTAG +#endif #endif // ESP8266-specific feature flags @@ -123,6 +131,7 @@ #ifdef USE_RP2040 #define USE_ARDUINO_VERSION_CODE VERSION_CODE(3, 3, 0) +#define USE_LOGGER_USB_CDC #define USE_SOCKET_IMPL_LWIP_TCP #define USE_SPI #endif From 276eea2b69f71a91dd87c672ad8c72d8883592a3 Mon Sep 17 00:00:00 2001 From: Pieter Viljoen Date: Fri, 7 Jun 2024 12:36:07 -0700 Subject: [PATCH 305/313] [docker] Avoid unsafe git error when container user and file config volume permissions don't match (#6873) --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index f6234235f7..36be700f55 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -101,7 +101,7 @@ RUN --mount=type=tmpfs,target=/root/.cargo if [ "$TARGETARCH$TARGETVARIANT" = "a && /platformio_install_deps.py /platformio.ini --libraries # Avoid unsafe git error when container user and file config volume permissions don't match -RUN git config --system --add safe.directory '/config/*' +RUN git config --system --add safe.directory '*' # ======================= docker-type image ======================= From 861a23d039cdc3900087958fb0586bffd790fd7c Mon Sep 17 00:00:00 2001 From: RFDarter Date: Fri, 7 Jun 2024 21:37:05 +0200 Subject: [PATCH 306/313] [datetime] Add logs on DateCall perform (#6868) --- esphome/components/datetime/date_entity.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/esphome/components/datetime/date_entity.cpp b/esphome/components/datetime/date_entity.cpp index 19399c1e59..b5bcef43af 100644 --- a/esphome/components/datetime/date_entity.cpp +++ b/esphome/components/datetime/date_entity.cpp @@ -80,6 +80,17 @@ void DateCall::validate_() { void DateCall::perform() { this->validate_(); + ESP_LOGD(TAG, "'%s' - Setting", this->parent_->get_name().c_str()); + + if (this->year_.has_value()) { + ESP_LOGD(TAG, " Year: %d", *this->year_); + } + if (this->month_.has_value()) { + ESP_LOGD(TAG, " Month: %d", *this->month_); + } + if (this->day_.has_value()) { + ESP_LOGD(TAG, " Day: %d", *this->day_); + } this->parent_->control(*this); } From 8718e15a6a6dc56323e8e1ce1163da8b6eec9e9f Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Fri, 7 Jun 2024 21:43:22 +0200 Subject: [PATCH 307/313] fix: arduino media player sets wrong state for announcements (#6849) Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com> --- .../i2s_audio/media_player/i2s_audio_media_player.cpp | 11 ++++++++--- .../i2s_audio/media_player/i2s_audio_media_player.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp index 1890e27bdf..ef494fac2e 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp @@ -27,6 +27,11 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { this->start(); } } + + if (this->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING) { + this->is_announcement_ = true; + } + if (call.get_volume().has_value()) { this->volume = call.get_volume().value(); this->set_volume_(volume); @@ -171,9 +176,8 @@ void I2SAudioMediaPlayer::start_() { if (this->current_url_.has_value()) { this->audio_->connecttohost(this->current_url_.value().c_str()); this->state = media_player::MEDIA_PLAYER_STATE_PLAYING; - if (this->is_announcement_.has_value()) { - this->state = this->is_announcement_.value() ? media_player::MEDIA_PLAYER_STATE_ANNOUNCING - : media_player::MEDIA_PLAYER_STATE_PLAYING; + if (this->is_announcement_) { + this->state = media_player::MEDIA_PLAYER_STATE_ANNOUNCING; } this->publish_state(); } @@ -202,6 +206,7 @@ void I2SAudioMediaPlayer::stop_() { this->high_freq_.stop(); this->state = media_player::MEDIA_PLAYER_STATE_IDLE; this->publish_state(); + this->is_announcement_ = false; } media_player::MediaPlayerTraits I2SAudioMediaPlayer::get_traits() { diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h index d7d9b1f74a..5afe778122 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.h @@ -78,7 +78,7 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer, HighFrequencyLoopRequester high_freq_; optional current_url_{}; - optional is_announcement_{}; + bool is_announcement_{false}; }; } // namespace i2s_audio From d77ea461571e338ee1344f56e225fd4de26d66c7 Mon Sep 17 00:00:00 2001 From: RFDarter Date: Fri, 7 Jun 2024 22:29:10 +0200 Subject: [PATCH 308/313] [datetime] datetime-datetime strptime support value string without seconds (#6867) --- esphome/core/time.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/esphome/core/time.cpp b/esphome/core/time.cpp index add671701f..f7aa4fdddb 100644 --- a/esphome/core/time.cpp +++ b/esphome/core/time.cpp @@ -84,6 +84,16 @@ bool ESPTime::strptime(const std::string &time_to_parse, ESPTime &esp_time) { esp_time.hour = hour; esp_time.minute = minute; esp_time.second = second; + } else if (sscanf(time_to_parse.c_str(), "%04hu-%02hhu-%02hhu %02hhu:%02hhu %n", &year, &month, &day, // NOLINT + &hour, // NOLINT + &minute, &num) == 5 && // NOLINT + num == time_to_parse.size()) { + esp_time.year = year; + esp_time.month = month; + esp_time.day_of_month = day; + esp_time.hour = hour; + esp_time.minute = minute; + esp_time.second = 0; } else if (sscanf(time_to_parse.c_str(), "%02hhu:%02hhu:%02hhu %n", &hour, &minute, &second, &num) == 3 && // NOLINT num == time_to_parse.size()) { esp_time.hour = hour; From 38b7bed2faa522e7e065d8362d6ea0bcaf1c64d5 Mon Sep 17 00:00:00 2001 From: esphomebot Date: Sat, 8 Jun 2024 21:55:57 +1200 Subject: [PATCH 309/313] Update webserver local assets to 20240608-093147 (#6874) --- .../components/web_server/server_index_v2.h | 1231 +++++++++-------- .../components/web_server/server_index_v3.h | 721 +++++----- 2 files changed, 977 insertions(+), 975 deletions(-) diff --git a/esphome/components/web_server/server_index_v2.h b/esphome/components/web_server/server_index_v2.h index 31c2d1fd85..7417f37015 100644 --- a/esphome/components/web_server/server_index_v2.h +++ b/esphome/components/web_server/server_index_v2.h @@ -11,623 +11,624 @@ namespace web_server { const uint8_t INDEX_GZ[] PROGMEM = { 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcd, 0x7d, 0xd9, 0x92, 0xdb, 0x46, 0xb6, 0xe0, 0xf3, - 0xdc, 0xaf, 0x40, 0xc1, 0xd5, 0x25, 0x64, 0x33, 0x89, 0x22, 0x59, 0xda, 0x0c, 0x56, 0x92, 0x5d, 0x2a, 0xc9, 0x2d, - 0xbb, 0xb5, 0xd8, 0x2a, 0xc9, 0x6e, 0x9b, 0x66, 0x57, 0xa1, 0x88, 0x24, 0x99, 0x16, 0x88, 0xa4, 0x13, 0xc9, 0x5a, + 0xdc, 0xaf, 0x40, 0xa5, 0xab, 0x4b, 0xc8, 0x66, 0x12, 0x45, 0xb2, 0xb4, 0x19, 0xac, 0x24, 0xbb, 0x54, 0x92, 0x5b, + 0x76, 0x6b, 0xb1, 0x55, 0x92, 0xdd, 0x36, 0xcd, 0xae, 0x42, 0x11, 0x49, 0x32, 0x2d, 0x10, 0x49, 0x03, 0xc9, 0x5a, 0x4c, 0xe2, 0xc6, 0x7c, 0xc0, 0x44, 0x4c, 0xc4, 0x3c, 0xcd, 0xcb, 0xc4, 0xdc, 0x87, 0xf9, 0x88, 0x79, 0xbe, 0x9f, 0x72, 0x7f, 0x60, 0xe6, 0x13, 0x26, 0x4e, 0x2e, 0x40, 0x82, 0x4b, 0xa9, 0xbc, 0xdc, 0x1b, 0x13, 0x0a, 0x49, 0x44, - 0xae, 0x27, 0x4f, 0x9e, 0x3c, 0x7b, 0x02, 0xc7, 0x7b, 0x09, 0x1f, 0xc9, 0xdb, 0x39, 0xf5, 0xa6, 0x72, 0x96, 0xf6, - 0x8e, 0xcd, 0xbf, 0x34, 0x4e, 0x7a, 0xc7, 0x29, 0xcb, 0x3e, 0x7a, 0x82, 0xa6, 0x84, 0x8d, 0x78, 0xe6, 0x4d, 0x05, - 0x1d, 0x93, 0x24, 0x96, 0x71, 0xc4, 0x66, 0xf1, 0x84, 0x7a, 0x87, 0xbd, 0xe3, 0x19, 0x95, 0xb1, 0x37, 0x9a, 0xc6, - 0x22, 0xa7, 0x92, 0x7c, 0x78, 0xff, 0x45, 0xf3, 0x69, 0xef, 0x38, 0x1f, 0x09, 0x36, 0x97, 0x1e, 0x0c, 0x49, 0x66, - 0x3c, 0x59, 0xa4, 0xb4, 0x77, 0x78, 0x78, 0x7d, 0x7d, 0x1d, 0xfe, 0x94, 0xff, 0xd3, 0x88, 0x67, 0xb9, 0xf4, 0x5e, - 0x91, 0x6b, 0x96, 0x25, 0xfc, 0x1a, 0x53, 0x49, 0x5e, 0x85, 0x67, 0xd3, 0x38, 0xe1, 0xd7, 0xef, 0x38, 0x97, 0x07, - 0x07, 0x81, 0x7e, 0xbc, 0x3d, 0x3d, 0x3b, 0x23, 0x84, 0x5c, 0x71, 0x96, 0x78, 0xad, 0xd5, 0xaa, 0x2a, 0x0c, 0xb3, - 0x58, 0xb2, 0x2b, 0xaa, 0xbb, 0xa0, 0x83, 0x03, 0x3f, 0x4e, 0xf8, 0x5c, 0xd2, 0xe4, 0x4c, 0xde, 0xa6, 0xf4, 0x6c, - 0x4a, 0xa9, 0xcc, 0x7d, 0x96, 0x79, 0xcf, 0xf9, 0x68, 0x31, 0xa3, 0x99, 0x0c, 0xe7, 0x82, 0x4b, 0x0e, 0x90, 0x1c, - 0x1c, 0xf8, 0x82, 0xce, 0xd3, 0x78, 0x44, 0xa1, 0xfe, 0xf4, 0xec, 0xac, 0xea, 0x51, 0x35, 0xc2, 0x4c, 0x92, 0xb3, - 0xdb, 0xd9, 0x25, 0x4f, 0x03, 0x84, 0x53, 0x49, 0x32, 0x7a, 0xed, 0x7d, 0x47, 0xe3, 0x8f, 0xaf, 0xe3, 0x79, 0x77, - 0x94, 0xc6, 0x79, 0xee, 0x5d, 0xca, 0xa5, 0x5a, 0x82, 0x58, 0x8c, 0x24, 0x17, 0x81, 0xc4, 0x14, 0x33, 0xb4, 0x64, - 0xe3, 0x40, 0x4e, 0x59, 0x1e, 0x9e, 0xef, 0x8f, 0xf2, 0xfc, 0x1d, 0xcd, 0x17, 0xa9, 0xdc, 0x27, 0x7b, 0x2d, 0xcc, - 0xf6, 0x08, 0x61, 0x12, 0xc9, 0xa9, 0xe0, 0xd7, 0xde, 0x0b, 0x21, 0xb8, 0x08, 0xfc, 0xd3, 0xb3, 0x33, 0xdd, 0xc2, - 0x63, 0xb9, 0x97, 0x71, 0xe9, 0x95, 0xe3, 0xc5, 0x97, 0x29, 0x0d, 0xbd, 0x0f, 0x39, 0xf5, 0x2e, 0x16, 0x59, 0x1e, - 0x8f, 0xe9, 0xe9, 0xd9, 0xd9, 0x85, 0xc7, 0x85, 0x77, 0x31, 0xca, 0xf3, 0x0b, 0x8f, 0x65, 0xb9, 0xa4, 0x71, 0x12, - 0xfa, 0xa8, 0xab, 0x26, 0x1b, 0xe5, 0xf9, 0x7b, 0x7a, 0x23, 0x89, 0xc4, 0xea, 0x51, 0x12, 0x5a, 0x4c, 0xa8, 0xf4, - 0xf2, 0x72, 0x5d, 0x01, 0x5a, 0xa6, 0x54, 0x7a, 0x92, 0xa8, 0x7a, 0xde, 0xd5, 0xb8, 0xa7, 0xfa, 0x51, 0x76, 0xd9, - 0x38, 0xa0, 0xf2, 0xe0, 0x40, 0x96, 0x78, 0x46, 0x7a, 0x69, 0x1e, 0x23, 0x74, 0xcf, 0x96, 0x1d, 0x1c, 0xd0, 0x30, - 0xa5, 0xd9, 0x44, 0x4e, 0x09, 0x21, 0xed, 0x2e, 0x3b, 0x38, 0x08, 0x24, 0x49, 0x65, 0x38, 0xa1, 0x32, 0xa0, 0x08, - 0xe1, 0xaa, 0xf7, 0xc1, 0x41, 0xa0, 0x91, 0xc0, 0x89, 0x46, 0x5c, 0x0d, 0xc7, 0x28, 0x34, 0xd8, 0x3f, 0xbb, 0xcd, - 0x46, 0x81, 0x0b, 0x3f, 0xc2, 0xec, 0xe0, 0x20, 0x95, 0x61, 0x0e, 0x23, 0x62, 0x89, 0x50, 0x21, 0xa8, 0x5c, 0x88, - 0xcc, 0x93, 0x85, 0xe4, 0x67, 0x52, 0xb0, 0x6c, 0x12, 0xa0, 0xa5, 0x2d, 0x73, 0x3a, 0x16, 0x85, 0x06, 0xf7, 0x6b, - 0x49, 0x04, 0xe9, 0xc1, 0x8c, 0x97, 0x32, 0x80, 0x5d, 0xe4, 0x63, 0x4f, 0x10, 0xe2, 0xe7, 0xaa, 0xaf, 0xdf, 0x17, - 0x91, 0x68, 0xf8, 0x3e, 0xd6, 0x50, 0x62, 0x26, 0x11, 0xfe, 0x48, 0x02, 0x81, 0xc3, 0x30, 0x94, 0x88, 0xf4, 0x96, - 0x16, 0x2b, 0xc2, 0x59, 0x67, 0x5f, 0x0c, 0x5a, 0xc3, 0x48, 0x86, 0x82, 0x26, 0x8b, 0x11, 0x0d, 0x02, 0x86, 0x73, - 0x9c, 0x21, 0xd2, 0x63, 0x8d, 0x80, 0x93, 0x1e, 0x6c, 0x37, 0xaf, 0xef, 0x35, 0x21, 0x7b, 0x2d, 0x64, 0x60, 0xe4, - 0x16, 0x40, 0xc0, 0xb0, 0x81, 0x87, 0x13, 0xe2, 0x67, 0x8b, 0xd9, 0x25, 0x15, 0x7e, 0xd9, 0xac, 0x5b, 0x23, 0x8b, - 0x45, 0x4e, 0xbd, 0x51, 0x9e, 0x7b, 0xe3, 0x45, 0x36, 0x92, 0x8c, 0x67, 0x9e, 0xdf, 0xe0, 0x0d, 0x5f, 0x93, 0x43, - 0x49, 0x0d, 0x3e, 0x2a, 0x50, 0x90, 0xa3, 0x86, 0x18, 0x64, 0x8d, 0xf6, 0x10, 0x03, 0x94, 0xa8, 0x6b, 0xc6, 0x33, - 0x08, 0xa0, 0x58, 0xc0, 0x1a, 0x0b, 0xfc, 0x41, 0xc2, 0x2a, 0xd5, 0x12, 0xa9, 0xec, 0x8b, 0x70, 0xf3, 0xa0, 0x10, - 0x19, 0xce, 0xe2, 0x79, 0x40, 0x49, 0x8f, 0x2a, 0xe2, 0x8a, 0xb3, 0x11, 0xc0, 0x5a, 0xdb, 0xb7, 0x3e, 0x8d, 0x68, - 0x58, 0x91, 0x14, 0x8a, 0x64, 0x38, 0xe6, 0xe2, 0x45, 0x3c, 0x9a, 0x42, 0xbf, 0x92, 0x60, 0x12, 0x7b, 0xde, 0x46, - 0x82, 0xc6, 0x92, 0xbe, 0x48, 0x29, 0x3c, 0x05, 0xbe, 0xea, 0xe9, 0x23, 0x9c, 0x93, 0x57, 0x61, 0xca, 0xe4, 0x1b, - 0x9e, 0x8d, 0x68, 0x37, 0x77, 0xa8, 0x8b, 0xc1, 0xbe, 0x9f, 0x48, 0x29, 0xd8, 0xe5, 0x42, 0xd2, 0xc0, 0xcf, 0xa0, - 0x85, 0x8f, 0x73, 0x84, 0x59, 0x28, 0xe9, 0x8d, 0x3c, 0xe5, 0x99, 0xa4, 0x99, 0x24, 0xd4, 0x22, 0x15, 0x8b, 0x30, - 0x9e, 0xcf, 0x69, 0x96, 0x9c, 0x4e, 0x59, 0x9a, 0x04, 0x0c, 0x15, 0xa8, 0xc0, 0xb1, 0x24, 0xb0, 0x46, 0xd2, 0x13, - 0x11, 0xfc, 0xb3, 0x7b, 0x35, 0x81, 0x24, 0x3d, 0x75, 0x28, 0x28, 0xf1, 0xfd, 0xee, 0x98, 0x8b, 0xc0, 0xac, 0xc0, - 0xe3, 0x63, 0x4f, 0xc2, 0x1c, 0xef, 0x16, 0x29, 0xcd, 0x11, 0x6d, 0x10, 0x56, 0x6e, 0xa3, 0x41, 0xf0, 0xd7, 0x40, - 0xf1, 0x05, 0x0a, 0x04, 0x8a, 0x44, 0xf7, 0x2a, 0x16, 0xde, 0x17, 0xe6, 0x44, 0xfd, 0x64, 0xb9, 0xd9, 0x54, 0x92, - 0x9f, 0x42, 0x29, 0x16, 0xb9, 0xa4, 0xc9, 0xfb, 0xdb, 0x39, 0xcd, 0xf1, 0x4b, 0x49, 0xa6, 0xb2, 0x3f, 0x95, 0x21, - 0x9d, 0xcd, 0xe5, 0xed, 0x99, 0x62, 0x8c, 0x91, 0xef, 0xe3, 0x11, 0xb4, 0x14, 0x34, 0x1e, 0x01, 0x33, 0x33, 0xd8, - 0xfa, 0x9a, 0xa7, 0xb7, 0x63, 0x96, 0xa6, 0x67, 0x8b, 0xf9, 0x9c, 0x0b, 0x89, 0xff, 0x4a, 0x96, 0x92, 0x57, 0xa8, - 0x81, 0xbd, 0x5c, 0xe6, 0xd7, 0x4c, 0x8e, 0xa6, 0x81, 0x44, 0xcb, 0x51, 0x9c, 0x53, 0xef, 0x19, 0xe7, 0x29, 0x8d, - 0xb3, 0x48, 0x10, 0xd1, 0x7f, 0x29, 0xa3, 0x6c, 0x91, 0xa6, 0xdd, 0x4b, 0x41, 0xe3, 0x8f, 0x5d, 0x55, 0xfd, 0xf6, - 0xf2, 0x27, 0x3a, 0x92, 0x91, 0xfa, 0x7d, 0x22, 0x44, 0x7c, 0x0b, 0x0d, 0x09, 0x81, 0x66, 0x7d, 0x11, 0x7d, 0x75, - 0xf6, 0xf6, 0x4d, 0xa8, 0x0f, 0x09, 0x1b, 0xdf, 0x06, 0xa2, 0x3c, 0x78, 0xa2, 0xc0, 0x63, 0xc1, 0x67, 0x6b, 0x53, - 0x6b, 0xac, 0x89, 0xee, 0x0e, 0x10, 0x28, 0x11, 0x7b, 0x7a, 0x68, 0x17, 0x82, 0x37, 0x8a, 0xe6, 0xa1, 0x92, 0x98, - 0x79, 0xe1, 0x9f, 0x48, 0x17, 0x07, 0x02, 0xdd, 0x0d, 0xad, 0x14, 0xb7, 0x4b, 0x4a, 0x14, 0x9c, 0x73, 0x90, 0x30, - 0x00, 0xe3, 0x28, 0x96, 0xa3, 0xe9, 0x92, 0xaa, 0xc1, 0x0a, 0x0b, 0x31, 0x2d, 0x0a, 0x7c, 0x5d, 0xd2, 0xbb, 0xdc, - 0x23, 0x44, 0x28, 0x46, 0x45, 0xe4, 0x6a, 0x25, 0x08, 0x11, 0x08, 0x7f, 0x47, 0x96, 0xb1, 0x5d, 0x4f, 0xb4, 0xd7, - 0xc2, 0x70, 0x2e, 0x23, 0xcd, 0x5d, 0xf0, 0x88, 0x67, 0x57, 0x54, 0x48, 0x2a, 0xa2, 0xbf, 0x62, 0x41, 0xc7, 0x29, - 0x40, 0xb1, 0xd7, 0xc6, 0xd3, 0x38, 0x3f, 0x9d, 0xc6, 0xd9, 0x84, 0x26, 0xd1, 0xb5, 0x2c, 0xf0, 0xdf, 0x89, 0x3f, - 0x66, 0x59, 0x9c, 0xb2, 0x5f, 0x68, 0xe2, 0x1b, 0x69, 0x70, 0xe2, 0xd1, 0x1b, 0x49, 0xb3, 0x24, 0xf7, 0x5e, 0xbe, - 0x7f, 0xfd, 0xca, 0xec, 0x63, 0x4d, 0x40, 0xa0, 0x65, 0xbe, 0x98, 0x53, 0x11, 0x20, 0x6c, 0x04, 0xc4, 0x0b, 0xa6, - 0x98, 0xe3, 0xeb, 0x78, 0xae, 0x4b, 0x58, 0xfe, 0x61, 0x9e, 0xc4, 0x92, 0x7e, 0x4d, 0xb3, 0x84, 0x65, 0x13, 0xb2, - 0xd7, 0xd6, 0xe5, 0xd3, 0xd8, 0x54, 0x24, 0x65, 0xd1, 0xf9, 0xfe, 0x8b, 0x54, 0xad, 0xbb, 0x7c, 0x5c, 0x04, 0xa8, - 0xc8, 0x65, 0x2c, 0xd9, 0xc8, 0x8b, 0x93, 0xe4, 0xcb, 0x8c, 0x49, 0xa6, 0x00, 0x14, 0xb0, 0x3d, 0x40, 0xa2, 0x54, - 0x8b, 0x0a, 0x0b, 0x78, 0x80, 0x70, 0x10, 0x18, 0x01, 0x30, 0x45, 0x66, 0xbf, 0x0e, 0x0e, 0x2a, 0x76, 0xdf, 0xa7, - 0x91, 0xae, 0x24, 0x83, 0x21, 0x0a, 0xe7, 0x8b, 0x1c, 0x36, 0xda, 0x4e, 0x01, 0xd2, 0x85, 0x5f, 0xe6, 0x54, 0x5c, - 0xd1, 0xa4, 0x24, 0x8e, 0x3c, 0x40, 0xcb, 0xb5, 0x39, 0xcc, 0xb1, 0x90, 0x64, 0x30, 0xec, 0xba, 0x7c, 0x9b, 0x1a, - 0x3a, 0x17, 0x7c, 0x4e, 0x85, 0x64, 0x34, 0x2f, 0x59, 0x49, 0x00, 0x52, 0xb4, 0x64, 0x27, 0x39, 0xb1, 0xeb, 0x9b, - 0x07, 0x0c, 0x53, 0x54, 0x63, 0x18, 0x56, 0xd0, 0xbe, 0xb8, 0x52, 0x12, 0x23, 0xc7, 0x0c, 0x61, 0xa9, 0x21, 0xcd, - 0x11, 0x2a, 0x10, 0x96, 0x16, 0x5c, 0xcd, 0x8a, 0xcc, 0x6c, 0xb7, 0x20, 0xaa, 0xc9, 0x77, 0x4a, 0x54, 0x03, 0x43, - 0x8b, 0x25, 0x3d, 0x38, 0x08, 0x68, 0x58, 0x12, 0x05, 0xd9, 0x6b, 0x9b, 0x3d, 0x72, 0x90, 0xb5, 0x03, 0x6c, 0x98, - 0x58, 0x62, 0x8a, 0xf0, 0x1e, 0x0d, 0x33, 0x7e, 0x32, 0x1a, 0xd1, 0x3c, 0xe7, 0xe2, 0xe0, 0x60, 0x4f, 0xb5, 0x2f, - 0xb5, 0x09, 0xd8, 0xc3, 0xb7, 0xd7, 0x59, 0x05, 0x01, 0xaa, 0x24, 0xac, 0x91, 0x0b, 0x12, 0xe4, 0x94, 0x52, 0x38, - 0xfc, 0xbe, 0x55, 0x3c, 0x22, 0xff, 0xfc, 0xdc, 0x6f, 0x48, 0x6c, 0xd0, 0x30, 0xa1, 0x76, 0xea, 0xdb, 0xe7, 0x54, - 0xab, 0x56, 0x4a, 0xf1, 0xd8, 0xc0, 0x8c, 0x3e, 0x3f, 0x61, 0x42, 0xc7, 0x2c, 0x73, 0x96, 0x5d, 0x03, 0x09, 0x4b, - 0x9c, 0xa3, 0xc2, 0xd9, 0xd0, 0xad, 0x43, 0x2b, 0x9d, 0x46, 0xef, 0xdc, 0x72, 0xa2, 0xf4, 0x08, 0x67, 0x1b, 0x07, - 0x74, 0x58, 0x60, 0x85, 0x7a, 0xbb, 0x9a, 0x4c, 0x01, 0x3a, 0x90, 0xc3, 0xae, 0xa9, 0x27, 0xb9, 0xc6, 0x9c, 0xa0, - 0x3f, 0x2f, 0x68, 0x2e, 0x35, 0x1d, 0x07, 0x12, 0x67, 0x98, 0xa1, 0x02, 0x8e, 0xdb, 0x98, 0x4d, 0x16, 0x02, 0xd4, - 0x1d, 0x38, 0x8a, 0x34, 0x5b, 0xcc, 0xa8, 0x7d, 0xda, 0x06, 0xdb, 0xdb, 0x39, 0x08, 0xc4, 0x1c, 0x68, 0xfa, 0x6e, - 0x72, 0x02, 0x58, 0x25, 0x5a, 0xad, 0xbe, 0xb3, 0x83, 0x54, 0x5b, 0x59, 0xaa, 0x68, 0x6b, 0x7b, 0xf2, 0x77, 0x64, - 0xe4, 0xf1, 0x5e, 0x5b, 0x43, 0xff, 0xf7, 0x21, 0xd9, 0x6b, 0x95, 0x14, 0x6c, 0x70, 0xaa, 0x81, 0xd1, 0x28, 0x7c, - 0xab, 0x07, 0x42, 0x4a, 0xba, 0xd7, 0x88, 0x25, 0x9c, 0x6e, 0xd0, 0xe9, 0x94, 0x0c, 0x40, 0xcf, 0x08, 0xa7, 0xc3, - 0x5d, 0xc4, 0x64, 0xb9, 0x41, 0x20, 0x37, 0xeb, 0x2a, 0xa6, 0x71, 0x55, 0x67, 0x1a, 0x6b, 0x8b, 0xf0, 0xe7, 0x65, - 0x17, 0xbf, 0xa4, 0x31, 0x73, 0xcc, 0xab, 0x2a, 0xcc, 0x14, 0x30, 0xd5, 0x92, 0x9c, 0x21, 0xde, 0xc4, 0x33, 0x9a, - 0x07, 0x14, 0xe1, 0x5d, 0x0d, 0x34, 0x71, 0x42, 0x93, 0xa1, 0x23, 0x36, 0x73, 0x10, 0x9b, 0x0c, 0x69, 0xad, 0xac, - 0x7e, 0xdc, 0x72, 0x4c, 0x07, 0xf9, 0xb0, 0x52, 0xe6, 0x9c, 0xc5, 0x2b, 0x79, 0x6c, 0xa8, 0xdb, 0xe2, 0x4f, 0x97, - 0x69, 0xa4, 0x29, 0xa5, 0x21, 0x47, 0x78, 0xaf, 0xb5, 0xbe, 0x8f, 0xb6, 0x55, 0xb5, 0xc6, 0xc1, 0x10, 0xf6, 0x41, - 0x89, 0x8b, 0x90, 0xe5, 0xea, 0xff, 0xda, 0x39, 0x03, 0xb4, 0x9d, 0x01, 0x59, 0x84, 0xe3, 0x34, 0x96, 0x41, 0xfb, - 0xb0, 0x05, 0x9a, 0xe8, 0x15, 0x05, 0x69, 0x82, 0xd0, 0xe6, 0x52, 0x68, 0xb8, 0xc8, 0xf2, 0x29, 0x1b, 0xcb, 0x20, - 0x96, 0x8a, 0xa1, 0xd0, 0x34, 0xa7, 0x9e, 0xac, 0xe9, 0xc3, 0x8a, 0xd9, 0xc4, 0x40, 0x6a, 0xa5, 0xf2, 0x45, 0x2d, - 0xa4, 0x8a, 0x69, 0x01, 0x6f, 0xa8, 0x74, 0xe9, 0x8a, 0xc7, 0xd8, 0xd6, 0x0c, 0xf4, 0xc5, 0x76, 0x5f, 0x8f, 0x18, - 0x19, 0x56, 0xc0, 0x1c, 0x95, 0x95, 0x45, 0x2e, 0x7f, 0x30, 0x85, 0x32, 0x94, 0xfc, 0x15, 0xbf, 0xa6, 0xe2, 0x34, - 0x06, 0xe0, 0x23, 0xdd, 0xbd, 0xd0, 0x62, 0x40, 0x71, 0x7b, 0xd9, 0xb5, 0xf4, 0x72, 0xae, 0x16, 0xfe, 0xb5, 0xe0, - 0x33, 0x96, 0x53, 0xd0, 0xd4, 0x34, 0xfe, 0x33, 0x38, 0x65, 0xea, 0x38, 0x82, 0xa8, 0xa1, 0x25, 0x7d, 0x9d, 0xbc, - 0xaa, 0xd3, 0xd7, 0xf9, 0xfe, 0x8b, 0x89, 0x65, 0x7f, 0xf5, 0x43, 0x8c, 0x70, 0x60, 0xec, 0x09, 0x47, 0xca, 0x85, - 0x53, 0x64, 0xc4, 0xfb, 0x6a, 0x25, 0x1d, 0xb3, 0xad, 0xa6, 0x2b, 0x52, 0x7d, 0x6c, 0x50, 0x11, 0x27, 0x09, 0x68, - 0x75, 0x82, 0xa7, 0xa9, 0x23, 0xa8, 0x30, 0xeb, 0x96, 0xa2, 0xe9, 0x7c, 0xff, 0xc5, 0xd9, 0x5d, 0xd2, 0x09, 0xea, - 0x5d, 0x01, 0x65, 0x01, 0xcd, 0x12, 0x2a, 0xc0, 0x8c, 0x74, 0x76, 0xcb, 0xc8, 0xd8, 0x53, 0x9e, 0x65, 0x74, 0x24, - 0x69, 0x02, 0x56, 0x0a, 0x23, 0x32, 0x9c, 0xf2, 0x5c, 0x96, 0x85, 0x15, 0xf4, 0xcc, 0x81, 0x9e, 0x85, 0xa3, 0x38, - 0x4d, 0x03, 0x6d, 0x91, 0xcc, 0xf8, 0x15, 0xdd, 0x02, 0x75, 0xb7, 0x06, 0x72, 0x39, 0x0c, 0x75, 0x86, 0xa1, 0x61, - 0x3e, 0x4f, 0xd9, 0x88, 0x96, 0x82, 0xeb, 0x2c, 0x64, 0x59, 0x42, 0x6f, 0x80, 0x8f, 0xa0, 0x5e, 0xaf, 0xd7, 0xc2, - 0x6d, 0x54, 0x68, 0x84, 0x2f, 0x37, 0x10, 0x7b, 0x87, 0xc8, 0x04, 0x22, 0x23, 0xbd, 0xe5, 0x36, 0x7e, 0x40, 0x91, - 0x23, 0x27, 0x99, 0xb5, 0xac, 0x34, 0x6f, 0x46, 0x38, 0xa1, 0x29, 0x95, 0xd4, 0xf2, 0x72, 0xd0, 0x9f, 0xf5, 0xd1, - 0x7d, 0x57, 0xe2, 0xaf, 0x24, 0x27, 0x7b, 0xca, 0xec, 0x9e, 0xe7, 0xa5, 0xa5, 0x5e, 0x6d, 0x4f, 0x85, 0xed, 0xbe, - 0xd4, 0xdb, 0x13, 0x4b, 0x19, 0x8f, 0xa6, 0xda, 0x44, 0x0f, 0x36, 0x96, 0x54, 0x8d, 0x61, 0xf8, 0x7a, 0x79, 0x88, - 0x3e, 0x58, 0x30, 0xb7, 0xa1, 0xe0, 0xcc, 0x30, 0x05, 0x0a, 0x56, 0x9f, 0xde, 0xb6, 0xd3, 0x38, 0x4d, 0x2f, 0xe3, - 0xd1, 0xc7, 0x3a, 0xf5, 0x57, 0x64, 0x40, 0xd6, 0xb9, 0xb1, 0x53, 0xe5, 0xb0, 0x2c, 0x77, 0xdd, 0x96, 0x4b, 0xd7, - 0x0e, 0x4a, 0xb0, 0xd7, 0xaa, 0xc8, 0xbe, 0xbe, 0xd1, 0x3b, 0xa9, 0x5d, 0x41, 0xc4, 0xcc, 0xca, 0x02, 0xe0, 0x02, - 0x9f, 0xa4, 0x38, 0xcb, 0x0f, 0x0c, 0xdd, 0x81, 0xad, 0x51, 0xac, 0x01, 0x22, 0xd1, 0xb2, 0x48, 0x58, 0xbe, 0x1b, - 0x03, 0x7f, 0x08, 0x94, 0xcf, 0x9d, 0x19, 0xee, 0x0b, 0x68, 0xc9, 0xe3, 0x8c, 0xca, 0x5c, 0x42, 0x66, 0xb4, 0x09, - 0xcb, 0x68, 0xfe, 0x06, 0x9a, 0x8b, 0xa2, 0xf7, 0xb7, 0xba, 0x0a, 0x74, 0x32, 0x80, 0x22, 0xef, 0xba, 0xca, 0x44, - 0x8d, 0x02, 0x0c, 0x4f, 0x65, 0x4a, 0xe4, 0x66, 0x35, 0xe3, 0xd1, 0xa8, 0xeb, 0xda, 0xfe, 0x36, 0x2c, 0x97, 0x93, - 0x20, 0x08, 0x72, 0xb0, 0xdf, 0xac, 0x5e, 0x5f, 0x2d, 0x22, 0xdf, 0x58, 0x44, 0x1e, 0x3a, 0x46, 0x16, 0xaa, 0x68, - 0xd9, 0xe9, 0x1e, 0xfd, 0x15, 0xb9, 0x8d, 0x40, 0x59, 0x0d, 0x81, 0x3f, 0xa3, 0x92, 0xdd, 0xa6, 0x44, 0x62, 0x6e, - 0x0c, 0x1c, 0x43, 0x69, 0xc0, 0x30, 0xaa, 0x2e, 0x19, 0xd2, 0x47, 0xa3, 0x66, 0xec, 0x66, 0x98, 0xa3, 0x35, 0xcd, - 0xbe, 0x28, 0x0c, 0x8e, 0x28, 0x32, 0x7b, 0x53, 0x53, 0x89, 0x1d, 0xac, 0xe0, 0x8c, 0x18, 0x35, 0x58, 0x6b, 0x3d, - 0xeb, 0xb8, 0x29, 0xc7, 0x85, 0x83, 0x5a, 0xa1, 0xa6, 0xa6, 0x4f, 0x5a, 0xc5, 0x2a, 0x43, 0x78, 0x6a, 0x35, 0x52, - 0x5e, 0xad, 0x9b, 0x10, 0xdf, 0x7a, 0x23, 0xfc, 0xfe, 0xb2, 0x66, 0x12, 0x46, 0x4e, 0xb3, 0x22, 0x02, 0x96, 0xca, - 0xb7, 0xa1, 0x7b, 0x1b, 0xcd, 0xd4, 0xc6, 0x71, 0x10, 0xce, 0x5d, 0x84, 0x3b, 0x98, 0xcd, 0x34, 0xe7, 0xca, 0x86, - 0x64, 0x5a, 0xef, 0x1b, 0x50, 0xcc, 0xf5, 0x3e, 0x6c, 0x20, 0x71, 0x5d, 0xf1, 0x54, 0x24, 0x08, 0x06, 0x6c, 0x0e, - 0xca, 0x9d, 0x2b, 0x1f, 0x02, 0x80, 0x9d, 0xad, 0x56, 0x1b, 0x44, 0xb7, 0x55, 0xff, 0x44, 0x61, 0x65, 0x14, 0xae, - 0x56, 0xd7, 0x12, 0x05, 0x46, 0xf3, 0xc5, 0x14, 0xf5, 0x2d, 0xc7, 0x3d, 0x79, 0x05, 0xad, 0x94, 0x22, 0x5a, 0x95, - 0x94, 0x26, 0x43, 0x9d, 0x66, 0xeb, 0xfb, 0x24, 0x1d, 0xb6, 0x7d, 0xba, 0xc1, 0xbd, 0x54, 0xa1, 0x11, 0xd3, 0xd5, - 0x92, 0x4f, 0xcd, 0xd0, 0x0c, 0x21, 0x14, 0xe5, 0xca, 0x8a, 0xd9, 0xdb, 0x66, 0x58, 0x1e, 0x1c, 0xe4, 0xce, 0x40, - 0xe7, 0x25, 0x9b, 0xf8, 0x29, 0x00, 0x91, 0x9c, 0xdf, 0x66, 0x4a, 0x77, 0xf9, 0xc9, 0x0a, 0xa1, 0x0d, 0xb3, 0xb4, - 0xd5, 0x05, 0x6b, 0x3c, 0xbe, 0x8e, 0x99, 0xf4, 0xca, 0x51, 0xb4, 0x35, 0x1e, 0x50, 0xb4, 0x34, 0xaa, 0x46, 0x28, - 0x28, 0x28, 0x8f, 0xc0, 0x13, 0xac, 0x0a, 0xad, 0xe9, 0x7e, 0x34, 0xa5, 0xe0, 0x08, 0xb6, 0x5a, 0x44, 0x69, 0x17, - 0xee, 0x19, 0x29, 0x62, 0x06, 0xde, 0x0e, 0x7b, 0xb1, 0xde, 0xbd, 0x66, 0x07, 0xcc, 0xa9, 0x18, 0x73, 0x31, 0xb3, - 0x75, 0xc5, 0xda, 0xb3, 0xe1, 0x8c, 0x6c, 0x1c, 0x6c, 0x1d, 0xdb, 0xa8, 0xff, 0xdd, 0x35, 0xa3, 0xbb, 0x32, 0xd7, - 0x6b, 0xa2, 0xb4, 0x94, 0xbe, 0xda, 0x1f, 0x68, 0x29, 0x33, 0x77, 0xcd, 0x7b, 0xe3, 0x4c, 0xed, 0x6a, 0x87, 0xc9, - 0x5e, 0xbb, 0x5b, 0xda, 0x7c, 0x96, 0x1a, 0xba, 0xda, 0xb1, 0x61, 0x44, 0x2a, 0x5f, 0xa4, 0x89, 0x01, 0x96, 0x21, - 0x4c, 0x0d, 0x1d, 0x5d, 0xb3, 0x34, 0xad, 0x4a, 0x7f, 0x0d, 0x5f, 0xcf, 0x0d, 0x5f, 0xcf, 0x2c, 0x5f, 0x07, 0x4e, - 0x01, 0x7c, 0x5d, 0x0f, 0x57, 0x75, 0xcf, 0x36, 0x4e, 0x67, 0xa6, 0x39, 0x7a, 0xae, 0xec, 0x68, 0x98, 0x6f, 0x61, - 0x21, 0x40, 0xa5, 0xe6, 0xf5, 0x31, 0x30, 0x4e, 0x18, 0x30, 0x00, 0xb5, 0x0b, 0x93, 0xba, 0x2e, 0x8a, 0x8f, 0x01, - 0xc2, 0x79, 0x41, 0x4b, 0xca, 0x3e, 0x79, 0x01, 0x4e, 0x3a, 0x67, 0x39, 0x20, 0xc4, 0x54, 0xf1, 0xaf, 0x52, 0xa2, - 0xec, 0xea, 0x98, 0x59, 0x5d, 0x6e, 0x57, 0x07, 0x9c, 0xbe, 0x5a, 0x5d, 0x72, 0x37, 0xaf, 0x57, 0xcb, 0x63, 0xe5, - 0xf2, 0xaa, 0xfd, 0x5e, 0xad, 0x82, 0xb5, 0x12, 0xf0, 0xdf, 0x1b, 0x13, 0x45, 0x94, 0xa3, 0x03, 0x0f, 0x70, 0x31, - 0x03, 0x05, 0x85, 0x5e, 0x74, 0x29, 0xe2, 0x5e, 0x7d, 0xca, 0xc1, 0xa3, 0xdc, 0xf4, 0xba, 0xff, 0x29, 0x9f, 0xcd, - 0x41, 0x1b, 0x5b, 0x23, 0xe9, 0x09, 0x35, 0x13, 0x56, 0xf5, 0xc5, 0x96, 0xb2, 0x5a, 0x1f, 0x75, 0x1e, 0x6b, 0xd4, - 0x54, 0xda, 0xcb, 0x7b, 0xad, 0x62, 0x51, 0x16, 0x95, 0x8c, 0x63, 0x9b, 0x53, 0xe5, 0x74, 0xdd, 0x25, 0x63, 0x2b, - 0xde, 0x06, 0x4c, 0xf3, 0x61, 0x06, 0xbc, 0xce, 0x61, 0x3f, 0x96, 0xdc, 0xdd, 0xfd, 0x2f, 0x2a, 0xe4, 0x2c, 0x8b, - 0x35, 0xf4, 0x2d, 0x8b, 0xe2, 0x44, 0x1b, 0xd9, 0xf8, 0x64, 0xb7, 0x35, 0x5c, 0xd5, 0x19, 0x63, 0x71, 0x30, 0xc4, - 0x27, 0x9b, 0xaa, 0x23, 0x59, 0xce, 0x78, 0x42, 0x23, 0x9f, 0xcf, 0x69, 0xe6, 0x17, 0xe0, 0x55, 0x35, 0x7b, 0x3f, - 0x92, 0xc1, 0xf2, 0x5d, 0xdd, 0xbd, 0x1a, 0x9d, 0x14, 0xe0, 0xfd, 0xfa, 0x62, 0xd3, 0xf1, 0xfa, 0x2d, 0x15, 0xb9, - 0x52, 0x44, 0x4b, 0x9d, 0xf6, 0x8b, 0x4a, 0x2c, 0x7d, 0x11, 0xed, 0x6c, 0x5f, 0x99, 0x20, 0x7e, 0x3b, 0x7c, 0x1c, - 0x1e, 0xf9, 0x48, 0xb9, 0x85, 0xbf, 0x32, 0x07, 0xfe, 0xb9, 0x75, 0x0b, 0xbf, 0x20, 0xcf, 0xeb, 0x5e, 0xe1, 0x44, - 0x92, 0x17, 0xfd, 0x17, 0xd6, 0x62, 0xe6, 0x29, 0x1b, 0xdd, 0x06, 0x7e, 0xca, 0x64, 0x13, 0x42, 0x6f, 0x3e, 0x5e, - 0xea, 0x0a, 0x70, 0x29, 0x2a, 0x77, 0x76, 0x61, 0x6d, 0x3d, 0x2c, 0x25, 0xf1, 0xf7, 0x53, 0x26, 0xf7, 0x7d, 0x3c, - 0x23, 0x17, 0xf0, 0x63, 0x7f, 0x19, 0xbc, 0x8e, 0xe5, 0x34, 0x14, 0x71, 0x96, 0xf0, 0x59, 0x80, 0x1a, 0xbe, 0x8f, - 0xc2, 0x5c, 0xd9, 0x1b, 0x9f, 0xa3, 0x62, 0xff, 0x02, 0xdf, 0x48, 0xe2, 0xf7, 0xfd, 0xc6, 0x0c, 0xbf, 0x91, 0xe4, - 0xe2, 0x78, 0x7f, 0x79, 0x23, 0x8b, 0xde, 0x05, 0xbe, 0x29, 0x3d, 0xf6, 0xf8, 0x6b, 0x12, 0x20, 0xd2, 0xbb, 0x31, - 0xd0, 0x9c, 0xf2, 0x99, 0xf6, 0xdc, 0xfb, 0x08, 0x7f, 0x80, 0xb8, 0x8a, 0xa8, 0xb8, 0x8d, 0x09, 0xad, 0xec, 0x11, - 0x9f, 0x2b, 0x17, 0x81, 0x7f, 0x70, 0xe0, 0x94, 0x95, 0xaa, 0x02, 0x3e, 0x91, 0xa4, 0x66, 0x90, 0xe3, 0xf7, 0x2a, - 0x42, 0x73, 0x22, 0x03, 0x81, 0xec, 0x30, 0x81, 0xf5, 0x43, 0x9b, 0xa3, 0x29, 0x06, 0xda, 0xc3, 0x10, 0x32, 0x49, - 0x45, 0x2c, 0xb9, 0x18, 0x22, 0x57, 0xfd, 0xc0, 0x7f, 0x23, 0x17, 0x03, 0xef, 0x3f, 0xfd, 0xd3, 0x8f, 0xe3, 0x1f, - 0xc5, 0xf0, 0x02, 0xbf, 0x25, 0x87, 0xc7, 0x41, 0x3f, 0x0a, 0xf6, 0x9a, 0xcd, 0xd5, 0x8f, 0x87, 0x83, 0x7f, 0xc4, - 0xcd, 0x5f, 0x4e, 0x9a, 0x3f, 0x0c, 0xd1, 0x2a, 0xf8, 0xf1, 0xb0, 0x3f, 0x30, 0x4f, 0x83, 0x7f, 0xf4, 0x7e, 0xcc, - 0x87, 0x7f, 0xd6, 0x85, 0xfb, 0x08, 0x1d, 0x4e, 0xf0, 0x42, 0x92, 0xc3, 0x66, 0xb3, 0x77, 0x38, 0xc1, 0x73, 0x49, - 0x0e, 0xe1, 0xff, 0x4b, 0xf2, 0x8e, 0x4e, 0x5e, 0xdc, 0xcc, 0x83, 0x8b, 0xde, 0x6a, 0x7f, 0xf9, 0xb7, 0x02, 0x46, - 0x1d, 0xfc, 0xe3, 0xc7, 0x1f, 0x73, 0xff, 0x41, 0x8f, 0x1c, 0x0e, 0x1b, 0x28, 0x80, 0xd2, 0x3f, 0x13, 0xf5, 0x6f, - 0xd0, 0x8f, 0x06, 0xff, 0x30, 0x50, 0xf8, 0x0f, 0x7e, 0xbc, 0x38, 0xee, 0x91, 0xe1, 0x2a, 0xf0, 0x57, 0x0f, 0xd0, - 0x0a, 0xa1, 0xd5, 0x3e, 0xba, 0xc0, 0xfe, 0xc4, 0x47, 0x78, 0x22, 0xc9, 0xe1, 0x83, 0xc3, 0x09, 0xbe, 0x92, 0xe4, - 0xd0, 0x3f, 0x9c, 0xe0, 0x17, 0x92, 0x1c, 0xfe, 0x23, 0xe8, 0x47, 0xda, 0xc3, 0xb6, 0x52, 0xee, 0x8d, 0x15, 0x04, - 0x37, 0x62, 0x41, 0xe3, 0x95, 0x64, 0x32, 0xa5, 0x68, 0xff, 0x90, 0xe1, 0x33, 0x85, 0xa6, 0x40, 0x82, 0x13, 0x06, - 0x6c, 0xbb, 0x60, 0x79, 0x0e, 0x9b, 0x0d, 0x34, 0xb3, 0x1f, 0x09, 0xac, 0xfd, 0x00, 0x79, 0x24, 0xf1, 0x55, 0x9c, - 0x2e, 0x68, 0x1e, 0xd1, 0x02, 0xe1, 0x11, 0x39, 0x93, 0x41, 0x1b, 0xe1, 0x77, 0x12, 0x7e, 0x74, 0x10, 0x3e, 0x33, - 0x01, 0x4c, 0x38, 0xc8, 0x9a, 0xa8, 0x32, 0xae, 0x35, 0x16, 0x1f, 0xe1, 0xf9, 0x96, 0x4a, 0x39, 0x05, 0xef, 0x02, - 0xc2, 0xe3, 0x5a, 0xb8, 0x13, 0x5f, 0x13, 0x4b, 0x12, 0xef, 0x05, 0xa5, 0xdf, 0xc5, 0xe9, 0x47, 0x2a, 0x82, 0x1b, - 0xdc, 0xee, 0x7c, 0x8e, 0x95, 0x0b, 0x7a, 0xaf, 0x8d, 0xba, 0x65, 0xac, 0xea, 0x54, 0xea, 0x18, 0x01, 0x08, 0xd9, - 0xba, 0x2f, 0x06, 0x76, 0x7c, 0x4f, 0x6c, 0x38, 0xac, 0x44, 0x7c, 0xed, 0xa3, 0x7a, 0x5c, 0x94, 0x65, 0x57, 0x71, - 0xca, 0x12, 0x4f, 0xd2, 0xd9, 0x3c, 0x8d, 0x25, 0xf5, 0xcc, 0x7a, 0xbd, 0x18, 0x06, 0xf2, 0x4b, 0x95, 0x21, 0x71, - 0x0c, 0xce, 0xc4, 0x06, 0x9c, 0xe0, 0xac, 0x04, 0x10, 0x9d, 0x32, 0x6a, 0xc7, 0xeb, 0x2a, 0xf8, 0xb5, 0x1e, 0xdf, - 0x6b, 0xb6, 0xc1, 0x11, 0x36, 0x54, 0xe2, 0x39, 0xc7, 0x19, 0x01, 0x21, 0xda, 0xe9, 0xfb, 0xc7, 0xf9, 0xd5, 0xa4, - 0xe7, 0x43, 0x6c, 0x86, 0x93, 0xb7, 0xca, 0x2f, 0x04, 0x0d, 0xa6, 0xa4, 0xd5, 0x9d, 0x1e, 0xd3, 0xee, 0xb4, 0xd1, - 0xb0, 0x3a, 0x74, 0x4a, 0xc4, 0x60, 0xaa, 0xbb, 0xc7, 0x38, 0xc1, 0x0b, 0xd2, 0x6c, 0xe3, 0x09, 0x69, 0xa9, 0x2e, - 0xdd, 0xc9, 0x71, 0x6a, 0xa6, 0x39, 0x38, 0x08, 0x78, 0x98, 0xc6, 0xb9, 0xfc, 0x12, 0x8c, 0x7d, 0x32, 0xc1, 0x09, - 0xe1, 0x21, 0xbd, 0xa1, 0xa3, 0x20, 0x45, 0x38, 0x31, 0x9c, 0x06, 0x75, 0xd1, 0x84, 0x38, 0xcd, 0xc0, 0x88, 0x20, - 0x6f, 0xfb, 0xc9, 0xa0, 0x3d, 0x24, 0x84, 0xf8, 0x7b, 0xcd, 0xa6, 0xdf, 0xe7, 0x64, 0x21, 0x23, 0x28, 0x71, 0x54, - 0x65, 0x32, 0x87, 0xa2, 0x8e, 0x53, 0x14, 0xbc, 0x90, 0xa1, 0xa4, 0xb9, 0x0c, 0xa0, 0x18, 0xcc, 0xff, 0xdc, 0x12, - 0xb6, 0x7f, 0x7c, 0xe8, 0x37, 0xa0, 0x54, 0x11, 0x27, 0xc2, 0x9c, 0x5c, 0xa2, 0x28, 0x19, 0x1c, 0x0d, 0x5d, 0xfe, - 0xaf, 0x0a, 0x61, 0xf2, 0xcb, 0x7e, 0x32, 0x68, 0xa9, 0xc9, 0x7b, 0x7e, 0x3f, 0xe0, 0x24, 0xd7, 0x0a, 0x5a, 0x3f, - 0x8f, 0xde, 0xaa, 0xa5, 0xa2, 0xc8, 0x00, 0x67, 0xe6, 0x5d, 0x90, 0x66, 0x27, 0x0a, 0x16, 0xee, 0x22, 0x9a, 0x30, - 0x99, 0xc1, 0x02, 0x8e, 0x09, 0xb4, 0xc7, 0x9c, 0xc0, 0x8c, 0x55, 0xb7, 0xcb, 0xc8, 0x3c, 0x3f, 0xf0, 0x1f, 0xf4, - 0xaf, 0x64, 0x34, 0x91, 0x7a, 0xfa, 0x2b, 0xb9, 0x5a, 0xc1, 0xff, 0x13, 0xd9, 0xe7, 0xe4, 0x52, 0x15, 0x2d, 0x4c, - 0xd1, 0x1c, 0x8a, 0xde, 0x46, 0x00, 0x2a, 0xce, 0x4b, 0x25, 0x4b, 0xef, 0xc9, 0x15, 0x51, 0xb0, 0x1f, 0x1c, 0x88, - 0xc1, 0xb4, 0xd1, 0x1e, 0x82, 0x7f, 0x5f, 0xc8, 0xfc, 0x3b, 0x26, 0xa7, 0x81, 0x7f, 0xd8, 0xf3, 0x51, 0xdf, 0xf7, - 0x60, 0x6b, 0xbb, 0x59, 0x83, 0x68, 0x0c, 0xa7, 0x8d, 0x37, 0x32, 0x5a, 0xf4, 0x48, 0xab, 0x1f, 0x30, 0xe3, 0xcf, - 0x43, 0x38, 0x35, 0x8c, 0xb3, 0x85, 0x17, 0xa8, 0x21, 0x65, 0xc3, 0x3e, 0x2f, 0x50, 0x63, 0xd6, 0xb8, 0x42, 0x51, - 0xda, 0x98, 0x35, 0x82, 0x05, 0x21, 0xa4, 0xd9, 0x29, 0xbb, 0x59, 0xe9, 0x37, 0x45, 0xd1, 0x95, 0x75, 0x76, 0x0e, - 0xd4, 0x71, 0xc8, 0x1a, 0x81, 0x18, 0xd0, 0xe1, 0x6a, 0xe5, 0x1f, 0xf7, 0x7b, 0x3e, 0x6a, 0x04, 0x96, 0xd0, 0x0e, - 0x2d, 0xa5, 0x21, 0x84, 0xd9, 0xb0, 0x30, 0xa1, 0xa4, 0x97, 0xb5, 0xb0, 0xd1, 0xb2, 0x3a, 0xec, 0x0e, 0x0f, 0xa0, - 0x45, 0x69, 0xc7, 0x68, 0x7d, 0x75, 0x0e, 0xcb, 0xb4, 0xc4, 0x9c, 0x91, 0x16, 0xe6, 0xc4, 0xfa, 0xae, 0xa7, 0x44, - 0x56, 0x04, 0x9f, 0x92, 0xaa, 0x39, 0x1e, 0xc4, 0x38, 0x19, 0x92, 0xd7, 0xda, 0x1e, 0xe9, 0x5a, 0xbf, 0x38, 0x4d, - 0xc9, 0xcb, 0xb5, 0xe8, 0x6d, 0x0c, 0xb1, 0x95, 0xeb, 0x70, 0xb4, 0x10, 0x82, 0x66, 0xf2, 0x0d, 0x4f, 0x8c, 0x9a, - 0x46, 0x53, 0xb0, 0x94, 0x20, 0x2c, 0x8b, 0x41, 0x47, 0xeb, 0xd8, 0x93, 0xb1, 0xd8, 0xa8, 0x9e, 0x90, 0x85, 0x56, - 0x9f, 0x54, 0xb0, 0xb6, 0x3b, 0x31, 0x76, 0x71, 0x80, 0xf0, 0xc2, 0x44, 0x71, 0x83, 0x30, 0x0c, 0x27, 0xe1, 0x08, - 0xaa, 0x61, 0x82, 0x1c, 0x15, 0xea, 0x1c, 0x05, 0x39, 0xb9, 0x0e, 0x33, 0x7a, 0xa3, 0x66, 0x0d, 0x50, 0x25, 0x99, - 0xed, 0xf1, 0x3a, 0x9e, 0x76, 0x15, 0xbb, 0xc9, 0xc3, 0x8c, 0x27, 0x14, 0xd0, 0x03, 0x71, 0x7b, 0x53, 0x34, 0x8d, - 0x73, 0x37, 0x3e, 0x55, 0xc1, 0x37, 0x70, 0x9d, 0xd7, 0x13, 0xf0, 0xf8, 0x2a, 0x5d, 0xab, 0x6c, 0xac, 0xdd, 0xe0, - 0x08, 0xb1, 0x71, 0x30, 0x09, 0x21, 0xae, 0xa7, 0x48, 0x48, 0x82, 0x29, 0x37, 0x71, 0x89, 0x6a, 0x56, 0x8e, 0x79, - 0x45, 0x92, 0x01, 0x6f, 0x34, 0x94, 0x17, 0x7a, 0xa1, 0x49, 0x62, 0x82, 0xf0, 0x55, 0x79, 0xb6, 0x6c, 0xbb, 0xb7, - 0x92, 0xd4, 0xa7, 0x0a, 0xae, 0xea, 0xee, 0xdc, 0x86, 0x94, 0x48, 0x79, 0x0a, 0x65, 0x30, 0x43, 0xf8, 0x19, 0x39, - 0x0c, 0x06, 0x61, 0xff, 0x2f, 0x43, 0xd4, 0x0f, 0xc2, 0x3f, 0xa3, 0x43, 0xcd, 0x39, 0xae, 0x50, 0x37, 0xd5, 0x73, - 0x2c, 0x55, 0xfc, 0xb2, 0x8d, 0x95, 0x27, 0x31, 0xca, 0x70, 0x16, 0xcf, 0x68, 0xf4, 0x0c, 0x0e, 0xb9, 0x25, 0x9c, - 0xb7, 0x12, 0x03, 0x25, 0x45, 0xcf, 0x0c, 0x2f, 0x09, 0xfd, 0xfe, 0x2b, 0x59, 0x3e, 0xf5, 0xfd, 0xfe, 0xf3, 0xea, - 0xe9, 0x2f, 0x7e, 0xff, 0x17, 0x19, 0xfd, 0x5c, 0x18, 0x6f, 0x77, 0x6d, 0x8e, 0xc7, 0x76, 0x8e, 0x42, 0x6f, 0x8d, - 0x83, 0xbb, 0x05, 0xda, 0x74, 0x74, 0x4c, 0x50, 0xc1, 0xc6, 0x25, 0x33, 0xca, 0x43, 0x19, 0x4f, 0x00, 0xa9, 0xce, - 0x1e, 0xe4, 0x6e, 0x5c, 0xbf, 0x5a, 0x31, 0x90, 0x8a, 0xa5, 0x57, 0x40, 0xe6, 0xa4, 0xd7, 0x42, 0xcb, 0x5a, 0x5b, - 0xa5, 0x33, 0xd5, 0xe3, 0xe8, 0x25, 0x9f, 0xbe, 0x22, 0xad, 0xee, 0xd5, 0xf1, 0xa4, 0x7b, 0xd5, 0x68, 0xa0, 0xdc, - 0x92, 0xd6, 0x62, 0x70, 0x35, 0xc4, 0x5f, 0x83, 0x53, 0xcf, 0xa5, 0x25, 0x5c, 0x5b, 0x5e, 0xc7, 0x2c, 0xaf, 0xd1, - 0xc8, 0x0a, 0xd4, 0x75, 0xba, 0x4e, 0x74, 0xd7, 0xa2, 0xd0, 0x38, 0x59, 0x27, 0xb5, 0xa7, 0x48, 0x95, 0x40, 0x32, - 0x14, 0x21, 0xe4, 0x46, 0xa2, 0xad, 0xa3, 0xc2, 0x98, 0xd0, 0x5d, 0x9d, 0x59, 0x60, 0x9f, 0x5a, 0x4a, 0x04, 0x80, - 0x05, 0xe8, 0x5a, 0x7a, 0x82, 0x67, 0x78, 0xd1, 0x68, 0x2b, 0x32, 0x6f, 0xb6, 0xbb, 0xf5, 0xb1, 0x9e, 0x54, 0x63, - 0xe1, 0x45, 0x83, 0xcc, 0x4a, 0x2c, 0x15, 0x59, 0xa3, 0x51, 0xd4, 0x83, 0x9d, 0xf6, 0xe4, 0xd6, 0x02, 0x10, 0x37, - 0xeb, 0x49, 0x19, 0x56, 0xc2, 0x56, 0x32, 0x95, 0x85, 0x2c, 0xcb, 0xa8, 0x00, 0x29, 0x4a, 0x24, 0x66, 0x45, 0x51, - 0x49, 0x76, 0x10, 0xa3, 0x98, 0x12, 0x01, 0x9c, 0x47, 0xd9, 0x5d, 0x38, 0xc3, 0x1c, 0x4f, 0x15, 0xdf, 0x20, 0x84, - 0x9c, 0xd9, 0x74, 0x16, 0xa9, 0x78, 0x50, 0x4a, 0x98, 0x23, 0x93, 0x72, 0x42, 0xc3, 0xf3, 0xfd, 0x53, 0x7e, 0xa7, - 0x4d, 0x36, 0x60, 0xc3, 0x48, 0x35, 0x4b, 0x0d, 0xe7, 0x8a, 0xc9, 0x87, 0x40, 0xa2, 0x32, 0x3a, 0x12, 0x2a, 0x06, - 0xf8, 0x9c, 0x09, 0xaa, 0x74, 0xf0, 0x7d, 0x6b, 0xf7, 0xa5, 0x75, 0x05, 0x32, 0x75, 0xbd, 0x37, 0x80, 0xc8, 0x18, - 0x9c, 0x3b, 0x19, 0xd9, 0x68, 0x76, 0xbe, 0x7f, 0xf2, 0x76, 0x9b, 0x0d, 0xbc, 0x5a, 0x19, 0xeb, 0x57, 0xe9, 0x36, - 0x38, 0xae, 0x20, 0x4d, 0xcd, 0x8f, 0x28, 0x48, 0x95, 0x8a, 0x14, 0x07, 0x02, 0xa8, 0xe8, 0x7c, 0xff, 0xe4, 0x7d, - 0x20, 0x94, 0x6f, 0x09, 0x61, 0x77, 0xd9, 0x01, 0x27, 0xc1, 0x94, 0x50, 0xa4, 0xd7, 0x5e, 0xb2, 0x2e, 0xee, 0x08, - 0xf0, 0x68, 0xaa, 0x2a, 0xc1, 0x82, 0x18, 0xb0, 0x21, 0x49, 0x0d, 0x06, 0x48, 0x8a, 0x70, 0x5a, 0xb3, 0xcb, 0x08, - 0x6c, 0x80, 0x9a, 0xeb, 0x0c, 0x76, 0x22, 0xd4, 0xaa, 0x1f, 0xc2, 0xa9, 0x9a, 0x55, 0x16, 0x5a, 0x78, 0x3c, 0xdb, - 0xc8, 0x4a, 0xab, 0xcc, 0xd1, 0x6f, 0xc1, 0x76, 0xb2, 0x0f, 0x6f, 0x88, 0xb5, 0x24, 0x4c, 0xc1, 0x73, 0x9b, 0x3e, - 0x76, 0xbe, 0x7f, 0xf2, 0xda, 0x64, 0x90, 0xcd, 0x63, 0xcb, 0xef, 0x37, 0x4c, 0xcc, 0x93, 0xd7, 0x61, 0x55, 0xab, - 0x1a, 0x9f, 0xef, 0x9f, 0x7c, 0xd8, 0xd6, 0x0c, 0xca, 0x8b, 0x45, 0x65, 0xe3, 0x2b, 0xf8, 0x96, 0x34, 0x8d, 0x96, - 0x46, 0x38, 0x44, 0xac, 0xc0, 0x4a, 0x20, 0x45, 0x79, 0x51, 0xba, 0x46, 0x9e, 0xe3, 0x8c, 0xa8, 0x30, 0x50, 0x7d, - 0xd7, 0x8c, 0x9a, 0xc7, 0x78, 0x76, 0x36, 0xe2, 0x73, 0xba, 0x23, 0x36, 0x74, 0x83, 0x42, 0x36, 0x83, 0xd4, 0x19, - 0x05, 0x3a, 0xc3, 0x7b, 0x2d, 0xd4, 0xad, 0x8b, 0xaf, 0x4c, 0x11, 0x29, 0xaf, 0xc9, 0x16, 0x3c, 0x25, 0x2d, 0x9c, - 0x92, 0x16, 0x8e, 0x49, 0x3e, 0x68, 0x69, 0x01, 0xd1, 0x8d, 0xcb, 0x71, 0xb5, 0x98, 0x81, 0xac, 0x30, 0x73, 0x5a, - 0xb5, 0x00, 0x4e, 0xba, 0xb1, 0xf2, 0x3d, 0x2a, 0x99, 0x9e, 0x28, 0xb2, 0x78, 0x1f, 0x70, 0xcc, 0xd5, 0xc0, 0x67, - 0xec, 0x32, 0x85, 0xc4, 0x12, 0x58, 0x15, 0x96, 0x28, 0x2a, 0x9b, 0xb6, 0x4d, 0xd3, 0x38, 0x54, 0xfb, 0xc4, 0x71, - 0x1c, 0x02, 0xe7, 0xc6, 0xb1, 0xc9, 0xc3, 0xc9, 0x37, 0xbb, 0x3c, 0x3e, 0x38, 0x08, 0x74, 0xa7, 0x2f, 0x65, 0xc0, - 0x6d, 0x7d, 0x15, 0xb9, 0xfb, 0x56, 0xf3, 0x8a, 0x04, 0x29, 0xf8, 0x1b, 0x8d, 0x74, 0x58, 0x40, 0x18, 0x3a, 0x88, - 0xeb, 0x18, 0xb4, 0xc0, 0x2b, 0x5d, 0xaf, 0xbe, 0xfc, 0x46, 0xa3, 0x8c, 0xd2, 0xd6, 0xb1, 0x75, 0x83, 0xb3, 0xe2, - 0x2a, 0x28, 0x53, 0x7f, 0x5a, 0x1b, 0xf9, 0x52, 0x16, 0x04, 0xc4, 0x5c, 0x9a, 0x65, 0x76, 0x31, 0xce, 0x91, 0x60, - 0xd0, 0xee, 0x4b, 0x93, 0xb5, 0x80, 0x55, 0x76, 0x95, 0x69, 0x64, 0xd9, 0x59, 0x07, 0x45, 0xb6, 0x11, 0x44, 0xa5, - 0xa0, 0x51, 0xa3, 0x30, 0xe4, 0xfd, 0x7e, 0x33, 0xe7, 0x12, 0xe7, 0xc8, 0x38, 0xb9, 0x14, 0x14, 0x0a, 0x59, 0x9d, - 0x12, 0x29, 0x2f, 0xc9, 0x7c, 0x37, 0xc9, 0x9f, 0x38, 0x24, 0xff, 0x8c, 0x50, 0x87, 0xfc, 0xb5, 0x8b, 0x23, 0xe4, - 0xc6, 0xb9, 0x90, 0xdb, 0xaa, 0xd3, 0x39, 0x01, 0x27, 0x5a, 0x1d, 0xa3, 0xb5, 0xb0, 0xe2, 0x0e, 0x86, 0xe2, 0x9e, - 0x10, 0xe5, 0x86, 0xc4, 0x36, 0x06, 0x1c, 0x54, 0x41, 0x35, 0x98, 0x7a, 0x9b, 0x4f, 0xcf, 0xe5, 0x80, 0x27, 0x1f, - 0xee, 0x8e, 0x87, 0x9e, 0xce, 0x37, 0x4f, 0xae, 0x93, 0xfb, 0x09, 0xab, 0x76, 0x0e, 0x6e, 0x3d, 0x13, 0x14, 0xe6, - 0x2f, 0xe3, 0xd8, 0x75, 0xe6, 0xb3, 0x76, 0x08, 0xad, 0xfc, 0x03, 0x68, 0xdb, 0x6d, 0xd5, 0x82, 0x3a, 0xc3, 0x02, - 0x3f, 0xd2, 0x19, 0xa8, 0xb1, 0xd8, 0xc1, 0x3e, 0x4e, 0x54, 0x03, 0x9a, 0x25, 0xdb, 0xab, 0x9f, 0x15, 0x86, 0x4c, - 0x34, 0x68, 0x68, 0x09, 0xfc, 0x4f, 0x93, 0x3c, 0xd0, 0x8d, 0x92, 0x0b, 0x80, 0xa0, 0xb9, 0xc2, 0x53, 0x85, 0x30, - 0xdf, 0xaf, 0xbc, 0xef, 0x2f, 0xf7, 0x08, 0x99, 0x57, 0xde, 0xc7, 0x77, 0x55, 0xea, 0x15, 0x90, 0x05, 0x8a, 0xc0, - 0x7c, 0x2c, 0x0b, 0x74, 0xf8, 0xf2, 0xcc, 0x36, 0x57, 0x26, 0x64, 0x58, 0x69, 0xdc, 0x4e, 0x68, 0x53, 0xb9, 0xe5, - 0x74, 0xbd, 0x45, 0xc3, 0x5a, 0xed, 0x3e, 0xd4, 0xbe, 0x97, 0x0a, 0x46, 0x78, 0x7e, 0xaf, 0x5a, 0xdb, 0x71, 0x8b, - 0x8f, 0xeb, 0xf9, 0x2b, 0x6b, 0x9b, 0x12, 0xb2, 0x2c, 0xa7, 0x42, 0x3e, 0xa3, 0x63, 0x2e, 0x20, 0x66, 0x51, 0xe2, - 0x04, 0x15, 0xfb, 0x8e, 0xdf, 0x4e, 0xad, 0xcf, 0x09, 0x14, 0xac, 0x2d, 0x50, 0xfd, 0xfa, 0xa8, 0x82, 0xd6, 0xe7, - 0xeb, 0xbd, 0xe6, 0x07, 0x07, 0x1f, 0x2a, 0x34, 0x19, 0x28, 0x15, 0x14, 0x0e, 0xd3, 0xd2, 0x2a, 0x8d, 0x89, 0xe4, - 0xee, 0x07, 0xa5, 0x13, 0xc0, 0x32, 0x0c, 0x97, 0xf7, 0xbc, 0x24, 0xb2, 0x98, 0xac, 0xb3, 0x78, 0xe3, 0x9c, 0x60, - 0xae, 0xe1, 0x02, 0x1c, 0x1e, 0x4c, 0x6d, 0xed, 0x2d, 0xca, 0xab, 0x64, 0xd8, 0x12, 0x86, 0x53, 0x40, 0x56, 0xa0, - 0xcc, 0x10, 0x87, 0x02, 0xb7, 0x9a, 0x25, 0xa7, 0xa0, 0x57, 0x4e, 0x71, 0x1e, 0x4e, 0x21, 0xfd, 0xb5, 0x76, 0x64, - 0x11, 0xc2, 0x3a, 0x31, 0xc7, 0x49, 0x25, 0x38, 0x79, 0xb9, 0xcd, 0xa5, 0x6c, 0x89, 0x9a, 0x2a, 0xa9, 0xa3, 0x5a, - 0xa0, 0xb2, 0x43, 0x78, 0x15, 0x30, 0xa3, 0xb8, 0xd9, 0xb8, 0x19, 0x30, 0xe0, 0x67, 0x32, 0xd0, 0xc1, 0x28, 0x90, - 0x19, 0x3c, 0x5c, 0x04, 0xb5, 0xa9, 0xbb, 0x5c, 0x75, 0xc3, 0x06, 0x71, 0x53, 0x17, 0x4d, 0x5c, 0xc5, 0xf5, 0x4e, - 0x2b, 0x5e, 0x3a, 0xd6, 0x19, 0xd4, 0xd2, 0x72, 0xc1, 0x2a, 0x91, 0xc4, 0x59, 0xfe, 0x58, 0x27, 0x45, 0x97, 0x8d, - 0x30, 0x55, 0x60, 0xbc, 0x54, 0x7b, 0x40, 0x0b, 0xa0, 0xaf, 0xe5, 0x89, 0x74, 0x76, 0xd4, 0x3a, 0xb1, 0xd5, 0x9c, - 0x8e, 0xd4, 0x7f, 0x07, 0xa9, 0x2e, 0xeb, 0x67, 0xfe, 0xa5, 0x92, 0x85, 0x0c, 0xe7, 0x35, 0xc6, 0x9e, 0x29, 0xc6, - 0x8e, 0x40, 0x4f, 0xb3, 0x89, 0xdf, 0x7d, 0x93, 0xf1, 0xc2, 0x8c, 0x94, 0x33, 0x24, 0xf6, 0x75, 0x19, 0x2d, 0x77, - 0x7e, 0xaf, 0xed, 0x46, 0xc4, 0x08, 0x64, 0x01, 0x61, 0xc3, 0xd9, 0x33, 0x84, 0xf3, 0x46, 0xa3, 0x9b, 0x1f, 0xd3, - 0xca, 0x49, 0x52, 0xc1, 0xc8, 0x20, 0xa0, 0x0b, 0x04, 0x5f, 0x93, 0xa1, 0x10, 0xf2, 0xb7, 0x99, 0xd9, 0x39, 0xf8, - 0xda, 0x4f, 0xde, 0x05, 0x2e, 0x57, 0x73, 0xdb, 0x96, 0x41, 0x53, 0x58, 0x4f, 0x50, 0x05, 0x5c, 0xbe, 0xbe, 0x3b, - 0xc1, 0x03, 0xe0, 0xde, 0x6b, 0x63, 0x48, 0x45, 0x43, 0x5d, 0xa9, 0x59, 0x42, 0x79, 0xfa, 0xba, 0xa8, 0xca, 0x4a, - 0x74, 0x27, 0xeb, 0xca, 0xca, 0x98, 0x95, 0x24, 0x2f, 0x8a, 0x9c, 0x56, 0xe1, 0xfd, 0xb5, 0xf4, 0x4b, 0x25, 0x5c, - 0x36, 0xbd, 0xed, 0xa7, 0x73, 0x22, 0xb1, 0x43, 0xa8, 0x5f, 0xef, 0x8a, 0x7d, 0x54, 0x60, 0xc2, 0xb9, 0x36, 0x42, - 0xf1, 0xe7, 0x6d, 0x42, 0x11, 0x67, 0xe6, 0xc8, 0x2b, 0x81, 0xd8, 0xbe, 0x87, 0x40, 0x34, 0x6e, 0x76, 0x2b, 0x13, - 0x41, 0x1d, 0xa9, 0xc9, 0xc4, 0xfa, 0x96, 0x92, 0x0c, 0x33, 0xb3, 0x1b, 0xbd, 0xce, 0x6a, 0xc5, 0x06, 0x2d, 0x70, - 0x23, 0xf9, 0x3e, 0xfc, 0x6c, 0xeb, 0x9f, 0x0e, 0x27, 0xd6, 0x6e, 0xe0, 0x80, 0x95, 0x26, 0x0b, 0x0a, 0x21, 0xc1, - 0x39, 0x50, 0x49, 0x59, 0x8a, 0xa6, 0x0d, 0x05, 0x19, 0x02, 0x27, 0xac, 0x0c, 0x33, 0x01, 0xc4, 0x4a, 0x56, 0x18, - 0x03, 0x32, 0xd8, 0x9a, 0xfb, 0x67, 0xcd, 0xcb, 0x4f, 0x6b, 0xa2, 0x35, 0xb9, 0xa2, 0xd5, 0x87, 0x5a, 0xbe, 0x81, - 0x81, 0xc0, 0xe8, 0x87, 0x7b, 0xca, 0x04, 0xad, 0x44, 0x39, 0x72, 0xe5, 0x10, 0x6e, 0x81, 0x13, 0x6d, 0xef, 0x83, - 0x8e, 0xf0, 0x6e, 0x91, 0x26, 0x98, 0x3b, 0x74, 0xfd, 0x92, 0xc8, 0x1a, 0x2b, 0x99, 0x12, 0x63, 0x29, 0xe1, 0x58, - 0x91, 0xa9, 0x24, 0xd9, 0xa0, 0x35, 0x04, 0x05, 0xb4, 0x9b, 0x1e, 0x67, 0x95, 0x09, 0x9c, 0x36, 0x1a, 0x28, 0xb6, - 0xb3, 0x4e, 0x07, 0xac, 0x91, 0x0e, 0x31, 0xc5, 0xa9, 0x36, 0x4c, 0xce, 0x0e, 0x0e, 0x82, 0xb8, 0x9a, 0x77, 0x90, - 0x0e, 0x11, 0xe6, 0xab, 0x55, 0xa0, 0xc0, 0x8a, 0xd1, 0x6a, 0x15, 0xbb, 0x60, 0xa9, 0x6a, 0xe8, 0x36, 0xef, 0x4b, - 0x32, 0x57, 0x02, 0x70, 0x0e, 0x10, 0x36, 0x48, 0x10, 0x1b, 0xf7, 0x5e, 0x0c, 0xee, 0xa8, 0x46, 0x36, 0x48, 0x1b, - 0xed, 0xa1, 0xc3, 0xb8, 0x06, 0xe9, 0x90, 0xc4, 0x05, 0x3f, 0x38, 0xd8, 0xcb, 0x8d, 0x88, 0xfc, 0x09, 0x44, 0xd9, - 0x4f, 0x4a, 0xb2, 0xe8, 0x01, 0xdd, 0xdd, 0x58, 0x77, 0x06, 0x94, 0x14, 0x65, 0xb6, 0xd5, 0xb6, 0xab, 0x65, 0x41, - 0x94, 0x8d, 0xb0, 0x09, 0x06, 0xf7, 0xc1, 0xb2, 0x2f, 0xc9, 0xfc, 0x95, 0x2c, 0x73, 0xac, 0x7f, 0xde, 0x9a, 0x59, - 0x1d, 0x86, 0x61, 0x2c, 0x26, 0x2a, 0x96, 0x61, 0xc3, 0xb0, 0x8a, 0xf8, 0x8f, 0x0c, 0x98, 0xce, 0xc4, 0x83, 0x72, - 0xae, 0x21, 0xd1, 0xe0, 0x5b, 0xd5, 0xc6, 0xde, 0x25, 0xf9, 0x69, 0xab, 0x97, 0x41, 0x43, 0xf2, 0xfc, 0xb7, 0x42, - 0xf2, 0xd0, 0x40, 0xa2, 0xc9, 0x63, 0x0d, 0x67, 0x3b, 0x70, 0xf1, 0x93, 0x5c, 0xc3, 0xd9, 0x6e, 0xdc, 0x5a, 0x4c, - 0xfd, 0xb2, 0x0b, 0x3e, 0x87, 0x37, 0x68, 0x40, 0xab, 0x02, 0x07, 0xca, 0x47, 0xeb, 0xba, 0x97, 0x66, 0xa5, 0x20, - 0x4c, 0x25, 0x09, 0x58, 0xfd, 0x00, 0x54, 0xda, 0xa8, 0x63, 0xf8, 0xb2, 0x68, 0x8e, 0x1c, 0x97, 0x40, 0x3d, 0x75, - 0x05, 0xc8, 0xc9, 0x78, 0xdb, 0xe7, 0x07, 0x07, 0x60, 0x1b, 0x80, 0x12, 0x17, 0x8e, 0xe2, 0xb9, 0x5c, 0x08, 0x50, - 0xa5, 0x72, 0xfb, 0x1b, 0x8a, 0xe1, 0x16, 0x88, 0x2a, 0x83, 0x1f, 0x50, 0x30, 0x8f, 0xf3, 0x9c, 0x5d, 0xe9, 0x32, - 0xf3, 0x1b, 0x73, 0x62, 0x49, 0x39, 0xd7, 0x3a, 0x61, 0x86, 0xba, 0x99, 0xa1, 0xd3, 0x3a, 0xda, 0x5e, 0x5c, 0xd1, - 0x4c, 0xbe, 0x62, 0xb9, 0xa4, 0x19, 0x2c, 0xbf, 0xa2, 0x38, 0x58, 0x51, 0x8e, 0xe0, 0xc0, 0xd6, 0x7a, 0xc5, 0x49, - 0x72, 0x67, 0x17, 0x59, 0xd7, 0x81, 0xa6, 0x71, 0x96, 0xa4, 0x7a, 0x12, 0x37, 0x9f, 0xd1, 0xe6, 0x70, 0x96, 0x2d, - 0xdd, 0x7c, 0x9a, 0x4a, 0xd9, 0x50, 0xdc, 0x3d, 0x60, 0xc4, 0x4a, 0x02, 0x2b, 0x3d, 0xef, 0xd4, 0x5a, 0x20, 0xe2, - 0xbd, 0x63, 0x13, 0xdc, 0x95, 0x60, 0xe9, 0x70, 0xd4, 0xb0, 0x0e, 0xa7, 0xa5, 0x9b, 0x2f, 0xb7, 0x5e, 0x69, 0xdb, - 0x26, 0x1c, 0x14, 0x9d, 0x3c, 0xde, 0x6d, 0x59, 0xbd, 0xb6, 0x92, 0xc3, 0x4a, 0x0b, 0x76, 0x5f, 0xc6, 0x8c, 0x96, - 0x96, 0xbc, 0x90, 0x3d, 0x8a, 0xfb, 0x92, 0x3c, 0x87, 0x3b, 0x43, 0x2f, 0xe5, 0x2c, 0x5d, 0xbb, 0x1a, 0xd3, 0xdd, - 0x2f, 0xb5, 0xff, 0x7d, 0x19, 0xbc, 0xc4, 0xef, 0x21, 0xb0, 0xfb, 0x55, 0xd5, 0x7c, 0x33, 0xa0, 0xfb, 0x55, 0x85, - 0xa0, 0xaf, 0xa2, 0x8d, 0x76, 0x4e, 0x20, 0xb7, 0x13, 0x3e, 0x0d, 0x5b, 0xbe, 0xd5, 0x96, 0x7e, 0xd6, 0x61, 0x24, - 0x9d, 0x69, 0xa9, 0xce, 0x03, 0xae, 0xf2, 0xd4, 0x20, 0x5f, 0xae, 0x6e, 0x21, 0x51, 0x93, 0x61, 0xa8, 0x75, 0xf8, - 0x5d, 0xdb, 0x63, 0x64, 0x4c, 0xa6, 0xed, 0x8c, 0xaf, 0x63, 0x21, 0xf7, 0xe1, 0x94, 0xf1, 0x8d, 0x7b, 0x78, 0x53, - 0x02, 0x1e, 0xb4, 0xfb, 0x4d, 0xe1, 0x18, 0xdb, 0xb9, 0xbe, 0x07, 0xe4, 0x8e, 0x4f, 0xb8, 0xd5, 0xdd, 0xea, 0x56, - 0xc6, 0xd7, 0x60, 0xff, 0x23, 0x3c, 0xb5, 0x97, 0xe3, 0xa8, 0xe1, 0xc0, 0x34, 0x5a, 0x16, 0xa5, 0x53, 0x80, 0x6b, - 0xe5, 0x4d, 0x20, 0xcc, 0x0b, 0x15, 0xe0, 0xfe, 0x01, 0x7f, 0x63, 0x58, 0xe2, 0xb8, 0xe4, 0x38, 0x27, 0xf7, 0xe5, - 0x88, 0x1a, 0xfc, 0x32, 0x7e, 0x0f, 0x74, 0xac, 0x28, 0xb4, 0xb0, 0x54, 0xf4, 0x9c, 0x9b, 0x85, 0xec, 0x4c, 0x4b, - 0xc5, 0xb4, 0x4c, 0xa9, 0x51, 0xd3, 0x6c, 0xc9, 0xe3, 0xb4, 0x56, 0xb6, 0x2c, 0x4f, 0x55, 0x6d, 0x5e, 0xb4, 0x03, - 0x8b, 0x55, 0x68, 0x71, 0xb5, 0x0a, 0xea, 0xa8, 0x26, 0xcc, 0x89, 0x64, 0x20, 0xcc, 0x9c, 0x8c, 0x8a, 0x9a, 0x66, - 0xad, 0xfb, 0x04, 0x68, 0x3d, 0xa1, 0xc8, 0xea, 0xe6, 0x35, 0x38, 0x5c, 0x17, 0x82, 0xee, 0xee, 0xfa, 0x14, 0xb0, - 0x5e, 0x5d, 0x39, 0x91, 0x83, 0xa1, 0x9f, 0xcb, 0x54, 0xd9, 0x2a, 0xa7, 0x75, 0x0b, 0x7e, 0xd1, 0x1d, 0xc9, 0xb2, - 0x06, 0x75, 0x9b, 0xf5, 0x4e, 0xb2, 0xd1, 0x73, 0xbe, 0x2b, 0xd9, 0xa8, 0xa6, 0xed, 0xee, 0xb5, 0xd0, 0xdd, 0x69, - 0xa9, 0x7a, 0xae, 0xed, 0x4d, 0x7e, 0xc3, 0x74, 0x6d, 0xa0, 0x4d, 0x8d, 0x66, 0xcb, 0x55, 0xce, 0x8a, 0x62, 0x5c, - 0x5e, 0x26, 0x50, 0xb9, 0x3b, 0x63, 0x4d, 0xff, 0xc6, 0x6a, 0x54, 0xd7, 0x71, 0x83, 0x1f, 0xc8, 0x24, 0xe5, 0x97, - 0x71, 0xfa, 0x1e, 0xe6, 0xab, 0x2a, 0x5f, 0xde, 0x26, 0x22, 0x96, 0xd4, 0x70, 0x97, 0x0a, 0x86, 0x1f, 0x1c, 0x18, - 0x7e, 0xd0, 0x7c, 0xba, 0xea, 0x8f, 0x97, 0xaf, 0xca, 0x01, 0xa2, 0x71, 0x61, 0x59, 0xc6, 0xb9, 0xdc, 0x3e, 0xc7, - 0x3a, 0x0b, 0x3b, 0x2f, 0x59, 0xd8, 0xb9, 0x0c, 0xd6, 0x87, 0x0a, 0x82, 0x6f, 0xb6, 0x8f, 0xb2, 0xc9, 0xd9, 0xbe, - 0xa9, 0x0e, 0xfe, 0x37, 0xd1, 0x9d, 0x7d, 0x1c, 0x2e, 0x77, 0x14, 0x1e, 0xa9, 0x74, 0x15, 0x0d, 0xf2, 0x3b, 0x48, - 0x3b, 0x90, 0xa4, 0xe7, 0xdc, 0x39, 0xa8, 0xe4, 0x94, 0x4d, 0x04, 0x0a, 0x46, 0x8b, 0x5c, 0xf2, 0x99, 0x19, 0x33, - 0x37, 0xd7, 0x8c, 0x54, 0x25, 0xb8, 0xa2, 0x55, 0xb4, 0x3d, 0xaa, 0x5f, 0xe4, 0x5a, 0x7e, 0x64, 0x59, 0x12, 0xe5, - 0xd8, 0x48, 0x91, 0x3c, 0xca, 0x0a, 0x62, 0x93, 0x8d, 0x37, 0xeb, 0xf0, 0x98, 0x65, 0x2c, 0x9f, 0x52, 0x11, 0x70, - 0xb4, 0xdc, 0x35, 0x19, 0x87, 0x80, 0x8c, 0x9e, 0x0c, 0x7f, 0x5b, 0x5d, 0xf8, 0x0b, 0x61, 0x34, 0xf0, 0x03, 0xcd, - 0xa8, 0x9c, 0xf2, 0x04, 0x12, 0x53, 0xc2, 0xa4, 0xbc, 0xd1, 0x74, 0x70, 0xb0, 0x17, 0xf8, 0xca, 0x2d, 0x01, 0x57, - 0xbf, 0xdd, 0x1a, 0xd4, 0x5f, 0xc2, 0xf5, 0x9c, 0x6a, 0x6a, 0x8a, 0x96, 0x74, 0xfd, 0x26, 0x8b, 0x0c, 0x3f, 0xd2, - 0x5b, 0x2c, 0x50, 0x51, 0x44, 0x1a, 0x6a, 0x7f, 0xcc, 0x68, 0x9a, 0xf8, 0xf8, 0x23, 0xbd, 0x8d, 0xca, 0xdb, 0xe2, - 0xea, 0x72, 0xb3, 0xda, 0x40, 0x9f, 0x5f, 0x67, 0x3e, 0xae, 0x26, 0x89, 0x96, 0x05, 0xe6, 0x82, 0x4d, 0x80, 0x38, - 0xff, 0x46, 0x6f, 0x23, 0x3d, 0x1e, 0x73, 0x2e, 0xeb, 0xa1, 0xa5, 0x45, 0x7d, 0xe8, 0x14, 0xbb, 0xdb, 0x60, 0x0c, - 0x8a, 0x81, 0xea, 0x3b, 0x24, 0xb5, 0x76, 0x95, 0x79, 0x88, 0x50, 0x71, 0xdf, 0xa5, 0xe0, 0x2f, 0x5c, 0xd1, 0x26, - 0x6b, 0xa9, 0xaf, 0x6b, 0x9d, 0x28, 0x74, 0xa8, 0x72, 0x3d, 0xce, 0x03, 0x61, 0x4f, 0x9d, 0xb9, 0x83, 0xe0, 0x38, - 0xc2, 0xbe, 0x90, 0x66, 0xd0, 0xe8, 0x5b, 0x9d, 0x12, 0x52, 0x45, 0x92, 0x5e, 0x57, 0xfd, 0xbc, 0xf3, 0x00, 0xf0, - 0x0e, 0x29, 0x2d, 0xb1, 0xba, 0x8e, 0x59, 0xd8, 0x74, 0xd1, 0xef, 0x24, 0x09, 0x96, 0x76, 0x09, 0x91, 0x70, 0xb1, - 0x28, 0x0b, 0xa0, 0x42, 0x43, 0x5f, 0x3a, 0x03, 0x90, 0x8d, 0x03, 0xb6, 0x21, 0x35, 0x33, 0x25, 0x35, 0x43, 0x07, - 0xe3, 0x3b, 0xa4, 0x24, 0x55, 0xc8, 0x50, 0x4a, 0xa4, 0x12, 0x7a, 0x66, 0x73, 0x0d, 0x09, 0xb9, 0x1b, 0x5a, 0x5e, - 0x9f, 0xd3, 0x7b, 0x9e, 0xd5, 0xc0, 0x0a, 0xd4, 0x38, 0xa8, 0x88, 0x60, 0x49, 0x54, 0x37, 0x28, 0xac, 0x3b, 0x47, - 0xd8, 0xfc, 0xd6, 0x80, 0x87, 0x76, 0x59, 0xc4, 0xa2, 0x24, 0x98, 0xa2, 0xa5, 0x08, 0xa6, 0x38, 0x83, 0x7c, 0x44, - 0x5e, 0x94, 0xf0, 0x53, 0x77, 0x37, 0x6a, 0xd9, 0xca, 0xdb, 0xaf, 0xf8, 0x81, 0x32, 0x2f, 0x21, 0x47, 0x13, 0x0b, - 0xcb, 0x53, 0x44, 0xa0, 0xee, 0xda, 0x39, 0xdb, 0xf6, 0x95, 0x49, 0xd1, 0x31, 0x80, 0x7d, 0x27, 0x83, 0xa5, 0xb3, - 0x0a, 0xf7, 0x2e, 0xb7, 0xb9, 0xf2, 0x67, 0x82, 0x7d, 0x55, 0x12, 0x69, 0x90, 0x93, 0x35, 0x89, 0x73, 0x77, 0xae, - 0xe5, 0xcf, 0x0b, 0x2a, 0x6e, 0xcf, 0x28, 0xe4, 0x3a, 0x73, 0xb8, 0xeb, 0x5b, 0x6d, 0x43, 0x95, 0xa7, 0xde, 0xcf, - 0x94, 0xb2, 0x52, 0xd4, 0x2f, 0x01, 0xae, 0x5f, 0x11, 0x2c, 0x54, 0xb4, 0xd1, 0x71, 0xc4, 0xe8, 0xd3, 0x42, 0x77, - 0x5e, 0x9e, 0xa4, 0x5d, 0x06, 0xfe, 0xb5, 0x0a, 0xd3, 0x26, 0x58, 0x80, 0xb9, 0x7b, 0x21, 0x75, 0x90, 0x0f, 0xd7, - 0xbd, 0x32, 0x50, 0x04, 0xe1, 0xbb, 0x6c, 0xf7, 0x52, 0xb7, 0x65, 0xcd, 0xee, 0x5e, 0x6a, 0x2d, 0xe8, 0xa7, 0x52, - 0x7e, 0xb0, 0x99, 0xa7, 0xbc, 0xbc, 0xcc, 0x8a, 0x02, 0x15, 0x00, 0xde, 0xf7, 0xdd, 0x20, 0xf8, 0xde, 0x24, 0x0d, - 0x86, 0x10, 0x8b, 0x3d, 0x4b, 0xb9, 0x65, 0xe2, 0xd5, 0xfc, 0xdf, 0x6f, 0xcc, 0xff, 0xbd, 0x73, 0xe5, 0x14, 0x4c, - 0xa3, 0x49, 0x46, 0x13, 0xcb, 0x3a, 0x91, 0x26, 0x40, 0xa5, 0xb7, 0xe5, 0x92, 0x7c, 0xbc, 0x88, 0x40, 0xe3, 0x5a, - 0x8e, 0x79, 0x26, 0x9b, 0xe3, 0x78, 0xc6, 0xd2, 0xdb, 0x68, 0xc1, 0x9a, 0x33, 0x9e, 0xf1, 0x7c, 0x1e, 0x8f, 0x28, - 0xce, 0x6f, 0x73, 0x49, 0x67, 0xcd, 0x05, 0xc3, 0x2f, 0x69, 0x7a, 0x45, 0x25, 0x1b, 0xc5, 0xd8, 0x3f, 0x11, 0x2c, - 0x4e, 0xbd, 0x37, 0xb1, 0x10, 0xfc, 0xda, 0xc7, 0xef, 0xf8, 0x25, 0x97, 0x1c, 0xbf, 0xbd, 0xb9, 0x9d, 0xd0, 0x0c, - 0x7f, 0xb8, 0x5c, 0x64, 0x72, 0x81, 0xf3, 0x38, 0xcb, 0x9b, 0x39, 0x15, 0x6c, 0xdc, 0x1d, 0xf1, 0x94, 0x8b, 0x26, - 0xa4, 0x6c, 0xcf, 0x68, 0x94, 0xb2, 0xc9, 0x54, 0x7a, 0x49, 0x2c, 0x3e, 0x76, 0x9b, 0xcd, 0xb9, 0x60, 0xb3, 0x58, - 0xdc, 0x36, 0x55, 0x8b, 0xe8, 0xb3, 0xd6, 0x51, 0xfc, 0xf9, 0xf8, 0x61, 0x57, 0x8a, 0x38, 0xcb, 0x19, 0x6c, 0x53, - 0x14, 0xa7, 0xa9, 0x77, 0xf4, 0xa8, 0x35, 0xcb, 0xf7, 0x74, 0x20, 0x2f, 0xce, 0x64, 0x71, 0x81, 0x3f, 0x02, 0xdc, - 0xe1, 0xa5, 0xcc, 0xf0, 0xe5, 0x42, 0x4a, 0x9e, 0x2d, 0x47, 0x0b, 0x91, 0x73, 0x11, 0xcd, 0x39, 0xcb, 0x24, 0x15, - 0xdd, 0x4b, 0x2e, 0x12, 0x2a, 0x9a, 0x22, 0x4e, 0xd8, 0x22, 0x8f, 0x1e, 0xce, 0x6f, 0xba, 0xa0, 0x59, 0x4c, 0x04, - 0x5f, 0x64, 0x89, 0x99, 0x8b, 0x65, 0x53, 0x2a, 0x98, 0x74, 0x2b, 0xd4, 0x2b, 0x4c, 0xa2, 0x94, 0x65, 0x34, 0x16, - 0xcd, 0x09, 0x74, 0x06, 0xb3, 0xa8, 0x95, 0xd0, 0x09, 0x16, 0x93, 0xcb, 0x38, 0x68, 0x77, 0x9e, 0x60, 0xfb, 0x37, - 0x7c, 0x84, 0xbc, 0xd6, 0xf6, 0xe2, 0x76, 0xab, 0xf5, 0x27, 0xd4, 0x5d, 0x9b, 0x45, 0x01, 0x14, 0xb5, 0xe7, 0x37, - 0x5e, 0xce, 0x21, 0xa7, 0x6d, 0x5b, 0xcf, 0xee, 0x3c, 0x4e, 0x20, 0x21, 0x38, 0xea, 0xcc, 0x6f, 0x0a, 0x58, 0x5d, - 0xa4, 0x93, 0x4c, 0xcd, 0x22, 0xcd, 0xd3, 0xf2, 0xb7, 0x42, 0xfc, 0x74, 0x3b, 0xc4, 0x1d, 0x0b, 0x71, 0x85, 0xf5, - 0x66, 0xb2, 0x10, 0x2a, 0xb6, 0x1a, 0xb5, 0x73, 0x0d, 0xc8, 0x94, 0x5f, 0x51, 0x61, 0xe1, 0x50, 0x0f, 0xbf, 0x19, - 0x8c, 0xce, 0x76, 0x30, 0x9e, 0x7e, 0x0a, 0x0c, 0x91, 0x25, 0xcb, 0xfa, 0xbe, 0xb6, 0x05, 0x9d, 0x75, 0xa7, 0x14, - 0xe8, 0x29, 0xea, 0xc0, 0xef, 0x6b, 0x96, 0xc8, 0xa9, 0xfe, 0xa9, 0xc8, 0xf9, 0x5a, 0xd7, 0x3d, 0x6a, 0xb5, 0xf4, - 0x73, 0xce, 0x7e, 0xa1, 0x51, 0x3b, 0x84, 0x06, 0xc5, 0x05, 0xfe, 0x5b, 0x79, 0x99, 0xb7, 0xce, 0x3d, 0xf1, 0x0f, - 0xee, 0x2d, 0x5f, 0x27, 0x49, 0xb1, 0xba, 0x11, 0x8d, 0x85, 0x95, 0x95, 0x5a, 0xf8, 0x80, 0xdb, 0x4e, 0x9d, 0x27, - 0xc2, 0x7a, 0xe5, 0x2d, 0x4e, 0xd6, 0xff, 0x41, 0xe7, 0x5d, 0x44, 0x10, 0xe9, 0x70, 0x92, 0x0d, 0x79, 0x37, 0xeb, - 0x91, 0x56, 0x37, 0x6b, 0x36, 0x51, 0xc0, 0x89, 0x18, 0x64, 0x26, 0x3d, 0x2f, 0x60, 0x7d, 0xae, 0x8c, 0xed, 0x1c, - 0x45, 0x1c, 0xae, 0x9a, 0xae, 0x56, 0x55, 0x18, 0x80, 0xa9, 0xeb, 0x1a, 0x7f, 0x93, 0xa6, 0x01, 0xce, 0x1d, 0x4e, - 0x9e, 0xd9, 0x17, 0xbb, 0x08, 0xcb, 0x2b, 0x52, 0x3e, 0x52, 0x98, 0x0b, 0xe7, 0xb1, 0x9c, 0x82, 0x97, 0xa2, 0x14, - 0x3f, 0x55, 0x12, 0x93, 0x7f, 0xe8, 0xa3, 0xbe, 0x28, 0x33, 0xdc, 0x20, 0x93, 0x4f, 0x14, 0x30, 0xca, 0x37, 0x92, - 0xc0, 0x88, 0xf8, 0x17, 0xa2, 0x6d, 0x3a, 0x6b, 0xd1, 0x8d, 0xef, 0x6b, 0xd1, 0xd1, 0x4c, 0x32, 0x95, 0xbb, 0x6d, - 0x23, 0x0e, 0xd3, 0x38, 0x3f, 0x1f, 0xe9, 0xbb, 0x92, 0x79, 0x75, 0x33, 0x20, 0x56, 0xd0, 0x6b, 0x23, 0x8d, 0x0a, - 0x65, 0x8f, 0x7e, 0x2f, 0x77, 0xda, 0x27, 0xe2, 0x2e, 0xfb, 0xa4, 0x5c, 0x78, 0xce, 0x17, 0x62, 0x04, 0xe1, 0x48, - 0x23, 0xf5, 0x36, 0x1d, 0x37, 0xbe, 0x52, 0x31, 0x7c, 0x2c, 0x9d, 0x4c, 0x50, 0x89, 0x99, 0xfb, 0x52, 0x09, 0xaa, - 0x42, 0x5e, 0xfa, 0xbe, 0x86, 0x11, 0x71, 0x76, 0x49, 0x20, 0xb3, 0x13, 0x95, 0xd4, 0x18, 0x64, 0xa4, 0x97, 0x85, - 0x8b, 0x8c, 0xfd, 0xbc, 0xa0, 0xe7, 0x0c, 0x74, 0x4d, 0x16, 0xb2, 0x44, 0xc5, 0x9a, 0x40, 0xf6, 0x35, 0xdb, 0x10, - 0xbc, 0x60, 0x89, 0xde, 0x98, 0x4c, 0x55, 0x9a, 0xdc, 0x26, 0xbf, 0xe9, 0x83, 0xbf, 0x18, 0xb4, 0x03, 0x86, 0x13, - 0x3e, 0x8b, 0x59, 0x16, 0x29, 0x97, 0x6f, 0x39, 0x58, 0x04, 0xad, 0x31, 0x4b, 0xa2, 0xcc, 0x6c, 0x4f, 0x1b, 0x85, - 0x3f, 0x71, 0x96, 0xa9, 0xae, 0x45, 0x97, 0x2b, 0x84, 0x6a, 0xf4, 0x11, 0x8b, 0xe0, 0x13, 0x2d, 0xd7, 0x38, 0xc2, - 0x6e, 0x75, 0x79, 0xed, 0xbc, 0xb6, 0x03, 0xad, 0xb5, 0x8d, 0xd2, 0x46, 0x00, 0x5f, 0x2f, 0xcd, 0xb9, 0x90, 0x41, - 0x30, 0xc5, 0x29, 0x22, 0xbd, 0xa9, 0x72, 0x76, 0x1d, 0xa7, 0xea, 0xbf, 0x7e, 0xb3, 0x1d, 0xb5, 0x4b, 0xf3, 0xbd, - 0x76, 0x1b, 0x58, 0x27, 0x47, 0x99, 0x1b, 0xa5, 0x6a, 0x19, 0xe5, 0x6f, 0xbd, 0xd4, 0xea, 0xb9, 0x5c, 0x2e, 0x36, - 0xc7, 0x4d, 0x8b, 0xaa, 0xa0, 0x06, 0x84, 0x0a, 0x16, 0xed, 0x98, 0x0a, 0x15, 0xd5, 0xba, 0x4b, 0x55, 0xf2, 0x42, - 0x8b, 0xe8, 0xf3, 0xfd, 0xa5, 0x30, 0x33, 0x16, 0x17, 0xcc, 0x3a, 0x99, 0xea, 0x24, 0x57, 0x18, 0x8c, 0x38, 0x7a, - 0xe8, 0xb6, 0x66, 0x1a, 0x96, 0x5b, 0x22, 0xb6, 0xd2, 0x6d, 0xa8, 0x1f, 0xa9, 0x20, 0x55, 0xb8, 0x6b, 0x63, 0x00, - 0xc8, 0xd5, 0xdb, 0x06, 0x18, 0x98, 0xad, 0xb9, 0xb4, 0x4b, 0x00, 0x6d, 0x6c, 0x4c, 0xe1, 0x22, 0xcd, 0xc5, 0xfe, - 0xf2, 0x1b, 0x59, 0x1c, 0x3a, 0x4d, 0xd5, 0x6f, 0x96, 0xc0, 0xff, 0x20, 0x01, 0x97, 0x5a, 0x29, 0x8d, 0xfc, 0xaf, - 0xdf, 0x9e, 0xbd, 0xf7, 0xf1, 0x25, 0x4f, 0x6e, 0x23, 0x5f, 0x8a, 0x05, 0xf5, 0x0b, 0x14, 0xca, 0x29, 0xcd, 0xca, - 0x97, 0xf1, 0xf0, 0x94, 0x86, 0x29, 0x9f, 0xe8, 0x4b, 0x99, 0xeb, 0x46, 0xf2, 0xe8, 0xe2, 0x58, 0xbd, 0x64, 0xaa, - 0x77, 0x2c, 0xf5, 0xeb, 0xbd, 0xa4, 0x80, 0x9f, 0x3d, 0x08, 0xa1, 0x1c, 0x1f, 0xca, 0xa9, 0x7a, 0x38, 0x83, 0x03, - 0xa3, 0x9e, 0xf6, 0x97, 0x1b, 0xc4, 0xd4, 0x87, 0x21, 0xa6, 0x3d, 0xbd, 0x84, 0x5c, 0xb5, 0xba, 0x88, 0x46, 0x17, - 0x17, 0xc5, 0xf1, 0x21, 0x8c, 0x75, 0x68, 0xc7, 0x05, 0x08, 0x6d, 0xff, 0x92, 0xc0, 0xe0, 0x65, 0x43, 0x82, 0xf4, - 0x60, 0x08, 0x98, 0x37, 0xe9, 0xc1, 0x22, 0x81, 0xc0, 0xa0, 0x77, 0x52, 0x96, 0xa8, 0x13, 0xab, 0x8b, 0x76, 0x41, - 0xa0, 0x1b, 0x56, 0x74, 0xaf, 0xbd, 0xa9, 0xd5, 0xfe, 0x5a, 0x90, 0x12, 0x17, 0xba, 0x0b, 0x04, 0xff, 0x2b, 0xc8, - 0x8e, 0x0f, 0x35, 0x1e, 0x2e, 0xdc, 0x57, 0x9b, 0xe8, 0xd7, 0x0e, 0x94, 0xd8, 0x1a, 0xe4, 0x12, 0x7f, 0x94, 0xf8, - 0xe3, 0x85, 0x6a, 0x6a, 0x85, 0x11, 0x68, 0x49, 0x20, 0xb4, 0x5b, 0x56, 0xeb, 0x18, 0xf1, 0x34, 0x8d, 0xe7, 0x39, - 0x8d, 0xec, 0x0f, 0x23, 0x97, 0x40, 0xbc, 0x6d, 0x2a, 0x02, 0x26, 0xbd, 0xe6, 0x14, 0xd4, 0x85, 0x4d, 0x2d, 0xe5, - 0x2a, 0x16, 0x41, 0xb3, 0x39, 0x6a, 0x5e, 0x4e, 0x50, 0x21, 0xa7, 0x4b, 0x57, 0xaa, 0x3d, 0x6e, 0xb5, 0xba, 0x90, - 0x0b, 0xd9, 0x8c, 0x53, 0x36, 0xc9, 0xa2, 0x94, 0x8e, 0x65, 0x21, 0xe1, 0x96, 0xda, 0xd2, 0xaa, 0x11, 0x61, 0xe7, - 0x91, 0xa0, 0x33, 0x2f, 0x84, 0x7f, 0xef, 0x9e, 0xb8, 0x90, 0x49, 0x94, 0xc9, 0x69, 0x53, 0x65, 0xdd, 0xc2, 0x9d, - 0x01, 0x39, 0xad, 0x3d, 0x2f, 0x9d, 0x89, 0x46, 0x14, 0x54, 0xac, 0x42, 0x0a, 0x4f, 0x4e, 0xb1, 0x14, 0x6e, 0xbb, - 0x0c, 0x2d, 0x37, 0x56, 0xb0, 0x29, 0xe9, 0x8f, 0x50, 0x91, 0x2b, 0xc5, 0x78, 0xb3, 0xb1, 0x55, 0x97, 0xea, 0x4f, - 0x1b, 0xe8, 0x73, 0x14, 0xbb, 0x42, 0x3b, 0x96, 0x97, 0xba, 0xc7, 0x7d, 0x90, 0x59, 0x53, 0x39, 0xb1, 0xdb, 0x03, - 0x15, 0x2c, 0x9b, 0x2f, 0xe4, 0x40, 0x39, 0xb5, 0x05, 0x5c, 0x90, 0x18, 0x62, 0xa7, 0x04, 0x70, 0x30, 0x5c, 0x6a, - 0x60, 0x46, 0x71, 0x3a, 0x0a, 0x00, 0x22, 0xaf, 0xe9, 0x3d, 0x15, 0x74, 0x86, 0xba, 0x33, 0x96, 0x35, 0x75, 0xdd, - 0x23, 0x47, 0x2d, 0x09, 0x9f, 0xc0, 0x53, 0x11, 0xaa, 0xd1, 0xb0, 0xca, 0x5d, 0xdd, 0x82, 0xcb, 0x8b, 0x61, 0x51, - 0x74, 0x85, 0x0c, 0x06, 0xaf, 0x03, 0x34, 0xc4, 0xbf, 0x38, 0x2f, 0x67, 0xf1, 0xed, 0x51, 0xf1, 0x71, 0x07, 0xed, - 0x68, 0xe2, 0x9e, 0x05, 0xd5, 0xec, 0x17, 0x02, 0x0d, 0xdf, 0x05, 0x3e, 0xcd, 0xe7, 0x4d, 0xcd, 0xbb, 0x9a, 0x8a, - 0x64, 0x7d, 0xe8, 0x8a, 0x8c, 0xa7, 0xf6, 0x7b, 0xb9, 0x54, 0x6c, 0xc9, 0x5c, 0xd2, 0xd0, 0xce, 0x84, 0x61, 0x79, - 0xa9, 0xc7, 0x3c, 0xbb, 0xd7, 0x78, 0x50, 0x8d, 0x9f, 0x5c, 0x9c, 0xd4, 0x79, 0x1c, 0xf0, 0xa5, 0xf2, 0x05, 0x76, - 0x71, 0x9a, 0xc2, 0x84, 0x17, 0x56, 0x7d, 0x71, 0x5f, 0xfa, 0x31, 0x90, 0xc3, 0x00, 0x15, 0xe6, 0x9c, 0x3e, 0x53, - 0x2a, 0xa5, 0xf3, 0xd6, 0xbc, 0x3d, 0x69, 0x83, 0x45, 0x5a, 0xfa, 0x32, 0x08, 0x77, 0xd7, 0xf2, 0xa2, 0xbb, 0x15, - 0xef, 0xd2, 0x0a, 0xa9, 0xa7, 0x16, 0x44, 0x7c, 0x91, 0x25, 0xbe, 0xf7, 0x97, 0x51, 0xca, 0x46, 0x1f, 0x89, 0xbf, - 0xbf, 0x0c, 0xd0, 0xe6, 0xb5, 0x47, 0xc5, 0x15, 0x2c, 0xc3, 0x46, 0x75, 0x47, 0x7a, 0x16, 0x3a, 0xbc, 0x58, 0xbf, - 0x15, 0xc7, 0xef, 0xed, 0x2f, 0x81, 0xf1, 0xe8, 0x79, 0x7a, 0x17, 0xc5, 0x79, 0xf5, 0xae, 0xab, 0x0a, 0x0a, 0x40, - 0xb3, 0x2e, 0xf7, 0x14, 0x51, 0x11, 0xff, 0x93, 0x94, 0xe6, 0x7b, 0x9a, 0xa9, 0x01, 0x9c, 0xd2, 0xf0, 0x37, 0xdf, - 0xfb, 0x4b, 0x59, 0x46, 0x4b, 0x8f, 0x86, 0x4a, 0xc9, 0x20, 0x3e, 0xcc, 0x05, 0x66, 0x6c, 0x98, 0x50, 0x19, 0xb3, - 0x54, 0x77, 0xe9, 0x5a, 0x03, 0x7c, 0x6d, 0x45, 0xab, 0x55, 0x5e, 0x5f, 0x0b, 0xab, 0x63, 0x50, 0xad, 0xec, 0xf8, - 0xb0, 0x82, 0x5b, 0xad, 0x4c, 0x9d, 0x49, 0x37, 0x34, 0x58, 0xad, 0x50, 0xd7, 0x79, 0x7f, 0x19, 0xa9, 0x6b, 0x43, - 0x00, 0x20, 0x37, 0x00, 0x42, 0xd0, 0x5a, 0x5f, 0x8b, 0x09, 0x52, 0xc2, 0x43, 0x19, 0x8b, 0x09, 0x95, 0x6b, 0x88, - 0x4d, 0x75, 0x8e, 0x6a, 0xd7, 0x06, 0xa8, 0x37, 0xa0, 0x8d, 0xeb, 0xd0, 0x5e, 0x00, 0xd2, 0xfb, 0xfb, 0x4b, 0x56, - 0x90, 0xfd, 0x25, 0xcd, 0x46, 0x3c, 0xa1, 0x1f, 0xde, 0x7d, 0x09, 0x97, 0x1c, 0x79, 0x06, 0x86, 0xc5, 0x14, 0x81, - 0xe0, 0x54, 0x9b, 0xa3, 0x45, 0x08, 0x57, 0x22, 0x44, 0x73, 0x02, 0x4f, 0xcd, 0xa5, 0x40, 0x2c, 0x7c, 0xaf, 0xaf, - 0x21, 0xa7, 0x89, 0x86, 0x99, 0x64, 0xaa, 0x17, 0x2f, 0x8e, 0x0f, 0x75, 0x6b, 0x2d, 0x02, 0x74, 0x23, 0x40, 0x82, - 0x3a, 0xa7, 0x15, 0x0e, 0x20, 0xaf, 0xd9, 0xc5, 0x43, 0xc2, 0xae, 0x4a, 0x62, 0x53, 0x17, 0xa8, 0x7a, 0xc7, 0x69, - 0x7c, 0x49, 0xd3, 0xde, 0xfe, 0x32, 0x5b, 0xad, 0x5a, 0xc5, 0xf1, 0xa1, 0x7e, 0xf4, 0x8e, 0x15, 0xdf, 0xd0, 0x2f, - 0xbc, 0x54, 0x5b, 0x0c, 0xb7, 0x12, 0x21, 0xdb, 0xd3, 0xa6, 0x39, 0x45, 0x66, 0x80, 0xc2, 0xf7, 0x54, 0x82, 0x85, - 0x6a, 0x54, 0x2a, 0x44, 0x85, 0xef, 0xb1, 0x64, 0xb3, 0x2c, 0x97, 0x74, 0x0e, 0xa5, 0xd3, 0xd5, 0xaa, 0x5d, 0xf8, - 0xde, 0x8c, 0x65, 0xf0, 0x94, 0xad, 0x56, 0xea, 0xc2, 0xdf, 0x8c, 0x65, 0x41, 0x0b, 0xc8, 0xd6, 0xf7, 0x66, 0xf1, - 0x8d, 0x5a, 0xb0, 0xad, 0x89, 0x6f, 0x82, 0xb6, 0xa9, 0x0a, 0x4b, 0xfc, 0xe4, 0x40, 0x71, 0xd5, 0x8e, 0xa6, 0x66, - 0x47, 0x13, 0xbc, 0xd0, 0x57, 0x99, 0x48, 0x90, 0x90, 0x74, 0xfb, 0x8e, 0x26, 0x76, 0x47, 0x17, 0x3b, 0x76, 0x74, - 0x71, 0xc7, 0x8e, 0xc6, 0x66, 0xf7, 0xbc, 0x12, 0x77, 0x7c, 0xb5, 0x6a, 0xb7, 0x2a, 0xec, 0x1d, 0x1f, 0x26, 0xec, - 0x0a, 0x76, 0x03, 0xd4, 0x3c, 0xc9, 0x66, 0x74, 0x3b, 0x51, 0xd6, 0x51, 0x4c, 0x7f, 0x15, 0x26, 0x2b, 0x2c, 0x64, - 0x75, 0x2c, 0xb8, 0x74, 0x5d, 0xc6, 0xdc, 0xfe, 0x48, 0xca, 0x66, 0x80, 0x87, 0x1c, 0xf0, 0x30, 0x35, 0x78, 0xb8, - 0x28, 0xce, 0x41, 0x24, 0xa8, 0xe5, 0xdc, 0x8b, 0xf4, 0xa0, 0xb5, 0xdf, 0xdb, 0x4d, 0x62, 0x10, 0x0d, 0xbf, 0xe6, - 0x22, 0xf1, 0x23, 0xdd, 0xf4, 0x57, 0x61, 0x66, 0xc6, 0x32, 0x93, 0x5b, 0xb5, 0x93, 0xb4, 0xaa, 0x7a, 0x97, 0xc0, - 0x3a, 0x8f, 0x1e, 0xe9, 0x16, 0xf3, 0x58, 0x4a, 0x2a, 0x32, 0x43, 0xa8, 0xbe, 0xff, 0xff, 0x05, 0xd1, 0x6d, 0x61, - 0x23, 0xb1, 0x65, 0x23, 0x96, 0xde, 0x8c, 0x7e, 0x6e, 0x58, 0xbc, 0x96, 0x46, 0x7b, 0x95, 0xc2, 0x7a, 0x8b, 0x5c, - 0x1b, 0x41, 0x17, 0x81, 0xc9, 0xb2, 0x98, 0xd1, 0xe4, 0x5c, 0xf1, 0xe3, 0xfe, 0xe8, 0xc2, 0xe8, 0xa7, 0x6b, 0xd2, - 0xad, 0xea, 0x80, 0xfd, 0x1f, 0x17, 0x9d, 0x27, 0x0f, 0x4f, 0x7d, 0xac, 0x59, 0x3a, 0x1f, 0x8f, 0x7d, 0x54, 0x78, - 0xf7, 0xeb, 0xd6, 0x7e, 0xf8, 0xe3, 0xe2, 0x8b, 0x17, 0xad, 0x2f, 0xca, 0xce, 0x99, 0x8f, 0x8a, 0x0b, 0x13, 0xce, - 0xb7, 0x92, 0xc9, 0x81, 0xd7, 0xae, 0x68, 0x1c, 0x67, 0xbb, 0x97, 0x33, 0x70, 0x97, 0x93, 0xcf, 0x29, 0x4d, 0xb0, - 0xef, 0xf9, 0x78, 0xa3, 0xf4, 0x3c, 0xa5, 0x57, 0xd4, 0xbe, 0x68, 0x70, 0xcb, 0x64, 0x5b, 0x7a, 0x8c, 0xf8, 0x22, - 0x93, 0x26, 0xaf, 0xc1, 0x70, 0x56, 0x67, 0x49, 0x17, 0x6a, 0x0d, 0xae, 0x49, 0x70, 0xab, 0xc5, 0x5a, 0x5d, 0x58, - 0x15, 0x17, 0xd8, 0x77, 0x00, 0xd8, 0x09, 0x59, 0x7f, 0x47, 0x79, 0xd4, 0xc2, 0xad, 0x5d, 0xb0, 0xe1, 0x36, 0x8a, - 0x7c, 0x7f, 0x68, 0xf1, 0xa4, 0x5c, 0x93, 0xb5, 0xf7, 0x43, 0xec, 0xc4, 0xd7, 0x27, 0x31, 0x70, 0x29, 0x60, 0xb0, - 0x8c, 0xe6, 0xf9, 0x4e, 0x04, 0x94, 0x9b, 0x88, 0xfd, 0xaa, 0xb5, 0xbf, 0x63, 0x14, 0xdc, 0xc2, 0x70, 0xc2, 0x14, - 0xc0, 0x65, 0x80, 0xd4, 0xb4, 0xa2, 0xe3, 0x31, 0x1d, 0x95, 0x9e, 0x5d, 0x08, 0x75, 0x8d, 0x59, 0x2a, 0x21, 0xe2, - 0xa3, 0x42, 0x31, 0xfe, 0x1b, 0x9e, 0x51, 0x1f, 0xd9, 0xe4, 0x4d, 0x03, 0xbf, 0x11, 0xf7, 0xdb, 0xe1, 0xd1, 0x23, - 0xd6, 0x61, 0x31, 0xb3, 0xac, 0x56, 0xd6, 0xab, 0x53, 0x2b, 0xaf, 0x23, 0x92, 0x2b, 0xb7, 0xcd, 0xae, 0x03, 0x74, - 0xbf, 0x63, 0xb2, 0x6c, 0x7f, 0xf1, 0xa8, 0xdd, 0x2a, 0x7c, 0xec, 0xc3, 0x70, 0xf7, 0x3d, 0x25, 0xaa, 0xd7, 0x11, - 0xf4, 0x5a, 0x64, 0xbf, 0xa6, 0x5f, 0xa7, 0xfd, 0x79, 0xdb, 0xc7, 0xfa, 0xbd, 0x01, 0xa8, 0x28, 0x99, 0xc1, 0x08, - 0x7c, 0x9d, 0xbf, 0x7b, 0x29, 0xf5, 0xc1, 0xef, 0x07, 0xcf, 0xe3, 0x76, 0xcb, 0xc7, 0x7e, 0x2e, 0xf9, 0xfc, 0x57, - 0x2c, 0xe1, 0xc8, 0xc7, 0xfe, 0x28, 0xe5, 0x39, 0x75, 0xd7, 0xa0, 0xb5, 0xd7, 0xdf, 0xbf, 0x08, 0x0d, 0xd1, 0x5c, - 0xd0, 0x3c, 0xf7, 0xdc, 0xf1, 0x0d, 0x29, 0x7d, 0x82, 0x61, 0x6e, 0xa5, 0xb8, 0x9c, 0x4a, 0x85, 0x17, 0x7d, 0xa5, - 0xdf, 0xa5, 0x2a, 0x5d, 0xb6, 0x41, 0x6c, 0x4a, 0x04, 0x94, 0x8c, 0x4d, 0x2b, 0x53, 0x9f, 0x9c, 0x79, 0xcb, 0xd1, - 0xd3, 0x13, 0xeb, 0x10, 0xf0, 0xe6, 0x04, 0xb5, 0x92, 0x19, 0xcb, 0xce, 0xb7, 0x94, 0xc6, 0x37, 0x5b, 0x4a, 0x41, - 0x43, 0x2b, 0xa1, 0x33, 0x6f, 0x9b, 0xf9, 0x34, 0xd6, 0x2b, 0x3d, 0xc7, 0x05, 0x31, 0x51, 0x6e, 0xca, 0x4f, 0x40, - 0xea, 0x6c, 0x83, 0x1a, 0xe1, 0xb7, 0x4f, 0x07, 0x25, 0xbf, 0x6a, 0x3a, 0x7a, 0xf3, 0xe9, 0x3d, 0x77, 0x14, 0x9b, - 0xdf, 0x81, 0x7d, 0x73, 0x73, 0x7c, 0x1d, 0xfd, 0x5b, 0x8a, 0x8d, 0xee, 0x51, 0x6e, 0xc1, 0x28, 0x65, 0xb3, 0x6a, - 0x17, 0x36, 0xc1, 0x54, 0x4a, 0x07, 0xa4, 0x0f, 0xb9, 0x83, 0x68, 0xed, 0xe3, 0x1c, 0x2e, 0x45, 0xc2, 0x9b, 0x27, - 0x16, 0x82, 0x9e, 0xa7, 0xfc, 0x7a, 0xfd, 0x4d, 0x5a, 0xbb, 0x1b, 0x4f, 0xd9, 0x64, 0xea, 0xdc, 0x74, 0xa2, 0xa4, - 0x44, 0xfd, 0x9d, 0x13, 0x14, 0xff, 0xfa, 0x2f, 0x61, 0xf8, 0xaf, 0xff, 0xf2, 0xc9, 0xa6, 0x30, 0x7c, 0x71, 0x81, - 0x65, 0x35, 0xec, 0x6e, 0x02, 0xdf, 0x3e, 0x53, 0x1d, 0xe7, 0xdb, 0xdb, 0x6c, 0x6c, 0x02, 0xd4, 0x6f, 0x6c, 0xc1, - 0x46, 0xa1, 0x3e, 0x00, 0xde, 0x6f, 0x01, 0x0c, 0xd6, 0xf5, 0x49, 0xc8, 0xa0, 0xd1, 0xef, 0x02, 0xed, 0x02, 0x45, - 0xf7, 0xda, 0x91, 0xdf, 0x8e, 0xe1, 0x4f, 0xad, 0xe1, 0x77, 0x82, 0x6f, 0x3c, 0x02, 0xa3, 0x8b, 0x8b, 0x32, 0xa5, - 0xcd, 0xed, 0x0a, 0x57, 0xe6, 0xfb, 0x1b, 0x25, 0x46, 0xf6, 0x47, 0x2d, 0xd4, 0x53, 0x17, 0xf2, 0xc8, 0xe8, 0xe2, - 0x35, 0xbc, 0x27, 0xe7, 0xf8, 0x52, 0x58, 0x97, 0xea, 0x1d, 0xfc, 0x19, 0x86, 0xa8, 0xaf, 0x4a, 0x0d, 0xba, 0xc1, - 0x9c, 0xa1, 0x14, 0x34, 0x7e, 0x00, 0x13, 0x8f, 0x2e, 0x8c, 0x7d, 0x77, 0xaa, 0x1d, 0x1f, 0xd1, 0x3a, 0x69, 0x1b, - 0x87, 0x48, 0x0d, 0xe9, 0xd8, 0x7b, 0xaf, 0xf0, 0xa5, 0x1a, 0xd3, 0xca, 0x9e, 0x56, 0xce, 0x25, 0x50, 0xe5, 0x2f, - 0x0a, 0x15, 0x18, 0xff, 0xeb, 0xae, 0xd8, 0xdd, 0xdf, 0x3f, 0x1d, 0xbb, 0xe3, 0xf7, 0x8a, 0xdd, 0xfd, 0xfd, 0x0f, - 0x8f, 0xdd, 0xfd, 0xd5, 0x8d, 0xdd, 0xc1, 0x26, 0x7e, 0x79, 0xaf, 0xf8, 0x9a, 0x8d, 0x7d, 0xf0, 0xeb, 0x9c, 0xb4, - 0x8d, 0x26, 0x9b, 0xf2, 0x09, 0x04, 0xd7, 0xfe, 0xfd, 0x63, 0x65, 0x29, 0x9f, 0xb8, 0x91, 0x32, 0x78, 0x4f, 0x2a, - 0x84, 0xc6, 0xba, 0x36, 0xa6, 0x65, 0xa2, 0x53, 0xad, 0xf2, 0x0e, 0x48, 0xf3, 0xa1, 0x7d, 0x67, 0x81, 0x1f, 0x95, - 0xef, 0x1d, 0x6a, 0xe1, 0x8e, 0x8d, 0x5f, 0x45, 0x2a, 0xf4, 0x55, 0x76, 0xec, 0x34, 0xec, 0x05, 0x07, 0x77, 0x84, - 0xae, 0x7d, 0xaf, 0x8a, 0xbe, 0xef, 0xbe, 0xf4, 0x7f, 0xbc, 0x69, 0x3f, 0x1b, 0xb4, 0xbb, 0x47, 0xed, 0x99, 0x1f, - 0xf9, 0x20, 0xa5, 0x54, 0x41, 0xab, 0x7b, 0x74, 0x04, 0x05, 0xd7, 0x4e, 0x41, 0x07, 0x0a, 0x98, 0x53, 0xf0, 0x08, - 0x0a, 0x46, 0x4e, 0xc1, 0x63, 0x28, 0x48, 0x9c, 0x82, 0x27, 0x50, 0x70, 0xe5, 0x17, 0x03, 0x56, 0x82, 0xfb, 0x04, - 0x0d, 0xb1, 0x36, 0x1e, 0x6c, 0xd9, 0x13, 0xdc, 0x86, 0xa0, 0x59, 0x3c, 0x51, 0xb9, 0x3e, 0xe0, 0x82, 0x8b, 0x38, - 0xbe, 0x9e, 0xd2, 0x2c, 0x82, 0xb0, 0xe5, 0x73, 0x25, 0x63, 0x42, 0xc9, 0xdf, 0xb3, 0x19, 0xb5, 0x5f, 0xa8, 0xb0, - 0x78, 0xf0, 0x7c, 0x34, 0x68, 0x0d, 0x8b, 0x6e, 0xb9, 0x73, 0x3a, 0xda, 0x66, 0xf2, 0x3e, 0xf4, 0x5e, 0x56, 0x75, - 0x7a, 0xba, 0x66, 0xb9, 0xe7, 0x3b, 0xa2, 0x36, 0x8e, 0x3b, 0x60, 0x9c, 0xf2, 0xeb, 0xe6, 0x8d, 0xdf, 0xdb, 0x1e, - 0xc9, 0x01, 0x88, 0xca, 0x48, 0x8e, 0x5a, 0x53, 0xf9, 0xf4, 0x3e, 0x9e, 0x94, 0xbf, 0x5f, 0xd3, 0x3c, 0x8f, 0x27, - 0xa6, 0xe5, 0xee, 0xc8, 0x8d, 0x02, 0xd1, 0x8d, 0xda, 0x58, 0x20, 0x20, 0xfa, 0x02, 0x9b, 0x05, 0xe6, 0xb4, 0x09, - 0xc6, 0x00, 0x76, 0xea, 0x71, 0x1c, 0x35, 0x7d, 0xbd, 0x48, 0xc6, 0x93, 0xaa, 0xe0, 0x78, 0x2e, 0xa8, 0x2a, 0xd5, - 0x18, 0x2e, 0x8e, 0x0f, 0xa1, 0x40, 0x57, 0xef, 0x88, 0xd7, 0x58, 0xdb, 0x7d, 0x77, 0xd4, 0xc6, 0xb3, 0xf1, 0x1a, - 0x37, 0xc3, 0xa5, 0x4c, 0x6f, 0xd9, 0x8c, 0x12, 0x7c, 0xd6, 0x1e, 0xc1, 0x1f, 0x13, 0x83, 0xf8, 0x6c, 0x3c, 0x1e, - 0xdf, 0x19, 0xbf, 0xf9, 0x2c, 0x19, 0xd3, 0x0e, 0x7d, 0xd4, 0x85, 0xec, 0x87, 0xa6, 0xf1, 0xfa, 0xb7, 0x0b, 0x85, - 0xbb, 0xe5, 0xfd, 0x1a, 0x43, 0x80, 0x40, 0x4e, 0x97, 0xf7, 0x8f, 0xe5, 0x14, 0x73, 0x41, 0x97, 0xb3, 0x58, 0x4c, - 0x58, 0x16, 0xb5, 0x8a, 0xf0, 0xca, 0x04, 0x3f, 0x3e, 0x7b, 0xfa, 0xf4, 0x69, 0x11, 0x26, 0xf6, 0xa9, 0x95, 0x24, - 0x45, 0x38, 0x5a, 0x96, 0xcb, 0x68, 0xb5, 0xc6, 0xe3, 0x22, 0x64, 0xb6, 0xe0, 0xa8, 0x33, 0x4a, 0x8e, 0x3a, 0x45, - 0x78, 0xed, 0xb4, 0x28, 0x42, 0x6a, 0x9e, 0x04, 0x4d, 0x6a, 0x29, 0x14, 0x4f, 0x5a, 0xad, 0x22, 0xd4, 0x84, 0xb6, - 0x04, 0x8b, 0x48, 0xff, 0x8c, 0xe2, 0x85, 0xe4, 0xc0, 0x92, 0xbb, 0x5c, 0x06, 0x83, 0x73, 0xf3, 0x7a, 0x0a, 0xfd, - 0x29, 0x87, 0x02, 0x0d, 0xf1, 0x97, 0x6e, 0x98, 0x02, 0x88, 0x59, 0x85, 0x27, 0xb8, 0x8d, 0x62, 0xd4, 0xaa, 0x81, - 0xb2, 0x54, 0xf5, 0x97, 0x84, 0x57, 0xd1, 0x0b, 0xe0, 0x3f, 0xd0, 0x52, 0xbf, 0x47, 0x4d, 0xd2, 0x1d, 0x5c, 0x9f, - 0xd2, 0x4f, 0x72, 0xfd, 0xdb, 0xfb, 0x30, 0x7d, 0x4a, 0xff, 0x68, 0xa6, 0x6f, 0x5e, 0x36, 0xaa, 0x99, 0xbe, 0x66, - 0x6b, 0x33, 0x49, 0xfc, 0xd1, 0x94, 0x8e, 0x3e, 0x5e, 0xf2, 0x9b, 0x26, 0x1c, 0x09, 0xe1, 0x2b, 0x7e, 0xba, 0xff, - 0x5b, 0xd3, 0x2d, 0xec, 0x60, 0xce, 0x97, 0x20, 0x94, 0xd8, 0x7c, 0x9b, 0x11, 0xff, 0xad, 0x35, 0xab, 0x74, 0xc9, - 0x78, 0x4c, 0xfc, 0xb7, 0xe3, 0xb1, 0x6f, 0x2f, 0xd9, 0xc5, 0x92, 0xaa, 0x56, 0x6f, 0x6a, 0x25, 0xaa, 0xd5, 0x17, - 0x5f, 0xb8, 0x65, 0x6e, 0x81, 0x09, 0x72, 0xb8, 0x01, 0x0d, 0x53, 0x93, 0xb0, 0x1c, 0x8e, 0x1a, 0x7c, 0xa0, 0xa2, - 0xfe, 0x96, 0x3f, 0x51, 0x7b, 0x21, 0x73, 0x09, 0xf0, 0x96, 0xb7, 0x48, 0xaf, 0xdf, 0x30, 0x9f, 0x50, 0x9b, 0xf0, - 0xf6, 0xec, 0xf6, 0xcb, 0x24, 0x98, 0x49, 0x54, 0xb0, 0xfc, 0x6d, 0xb6, 0x76, 0x7b, 0x44, 0xc3, 0x48, 0x88, 0xbb, - 0xac, 0x42, 0xf2, 0xc9, 0x24, 0x85, 0x4f, 0x84, 0x2c, 0x6b, 0x6f, 0x1e, 0xd5, 0xdd, 0xfb, 0xb5, 0xf5, 0x46, 0x6e, - 0x47, 0xf3, 0x9e, 0x4e, 0xf5, 0xc5, 0x22, 0x9d, 0x75, 0x7c, 0x65, 0x3e, 0x5d, 0xa3, 0x2c, 0xb2, 0xa5, 0xe1, 0xff, - 0x4b, 0x9d, 0xab, 0x2a, 0x21, 0x4f, 0x43, 0x0f, 0x9c, 0x14, 0x85, 0xc9, 0xf2, 0x4f, 0x58, 0x3e, 0x87, 0x37, 0x62, - 0xea, 0x9e, 0xf4, 0x53, 0x2c, 0x3c, 0xbf, 0x76, 0x22, 0x09, 0xb5, 0xed, 0x2a, 0x6c, 0x28, 0x41, 0xfb, 0x6a, 0x67, - 0xb2, 0xf0, 0x8d, 0xcb, 0xd7, 0x22, 0xd1, 0xf7, 0x34, 0x3e, 0x75, 0x8c, 0xc3, 0x59, 0x21, 0xf8, 0x5d, 0xcb, 0x0d, - 0xb1, 0x55, 0xb6, 0xa0, 0x70, 0x23, 0x65, 0xaa, 0x46, 0x63, 0x4b, 0xf9, 0xe5, 0xf3, 0x79, 0x9c, 0x69, 0x36, 0x4a, - 0x7c, 0xcd, 0x0f, 0xf6, 0x97, 0xd5, 0xce, 0x17, 0xbe, 0x05, 0x5b, 0x13, 0x6f, 0xef, 0xf8, 0x10, 0x3a, 0xf4, 0xbc, - 0x1a, 0xe8, 0xd9, 0x86, 0x3b, 0xff, 0x13, 0x81, 0xf5, 0x8b, 0x30, 0xbf, 0xc6, 0x61, 0x7e, 0xed, 0xfd, 0x79, 0xd9, - 0xbc, 0xa6, 0x97, 0x1f, 0x99, 0x6c, 0xca, 0x78, 0xde, 0x04, 0x85, 0x5f, 0xf9, 0xe5, 0x0c, 0x7b, 0x56, 0xe9, 0x61, - 0xfa, 0x8e, 0x7c, 0x77, 0x91, 0x43, 0xfc, 0x5d, 0xa9, 0xad, 0x51, 0xc6, 0x33, 0xda, 0xad, 0xa7, 0x01, 0xba, 0xe1, - 0x5c, 0x8b, 0xad, 0xe1, 0x92, 0x43, 0xbc, 0x5e, 0xde, 0x46, 0x2d, 0xc3, 0xd6, 0x5b, 0x36, 0x56, 0xdb, 0xda, 0xda, - 0x3e, 0x32, 0xc8, 0x6d, 0x28, 0xe9, 0x25, 0x36, 0x63, 0xd6, 0xbb, 0x62, 0xce, 0x9f, 0x4a, 0x8a, 0x03, 0x6f, 0x9e, - 0xfd, 0xeb, 0x64, 0x13, 0xae, 0x17, 0xab, 0xa4, 0xb8, 0xfb, 0x40, 0x16, 0xc5, 0x63, 0x49, 0x05, 0xbe, 0x4f, 0xcb, - 0x4b, 0x75, 0x7f, 0x65, 0x09, 0x62, 0x26, 0x6a, 0x3f, 0x9d, 0xdf, 0xdc, 0x7f, 0xf8, 0xbb, 0x97, 0x5f, 0x18, 0x1c, - 0xd9, 0xf7, 0xb9, 0xf8, 0x7e, 0x17, 0x0e, 0x42, 0x1a, 0xdf, 0x46, 0x2c, 0x53, 0x32, 0xef, 0x12, 0x5c, 0x72, 0xdd, - 0x39, 0x37, 0xd9, 0x9d, 0x82, 0xa6, 0xea, 0xe3, 0x6d, 0x66, 0x2b, 0x8e, 0x1e, 0xcf, 0x6f, 0xec, 0x6e, 0xb4, 0xd7, - 0xb2, 0x36, 0xff, 0xd0, 0xe4, 0xcc, 0xdd, 0xd9, 0xa0, 0xf5, 0x04, 0xc3, 0x47, 0xf3, 0x9b, 0xae, 0x16, 0xb4, 0x4d, - 0xa1, 0xa1, 0x6a, 0xcd, 0x6f, 0xdc, 0xf4, 0xd4, 0x6a, 0x20, 0x2f, 0x3c, 0xca, 0x3d, 0x1a, 0xe7, 0xb4, 0x0b, 0x6f, - 0xac, 0x66, 0xa3, 0x38, 0x35, 0xc2, 0x7c, 0xc6, 0x92, 0x24, 0xa5, 0x5d, 0x2b, 0xaf, 0xbd, 0xf6, 0x63, 0xc8, 0xee, - 0x74, 0xb7, 0xac, 0xbe, 0x2b, 0x0e, 0xf2, 0x4a, 0x3c, 0xc5, 0x97, 0x39, 0x4f, 0xe1, 0x73, 0x11, 0x5b, 0xd1, 0x69, - 0xd2, 0x1e, 0x5b, 0x15, 0xf2, 0xd4, 0xef, 0xfa, 0x5a, 0x1e, 0xb5, 0xfe, 0xd4, 0x55, 0x1b, 0xde, 0xea, 0x4a, 0x3e, - 0x8f, 0x9a, 0x47, 0xf5, 0x85, 0x40, 0x55, 0xb9, 0x04, 0xbc, 0x65, 0x59, 0x18, 0xa4, 0x95, 0xe6, 0xd3, 0x5e, 0xd8, - 0x36, 0x65, 0x6a, 0x00, 0x78, 0xb5, 0x72, 0x59, 0x54, 0xd4, 0x17, 0xf3, 0xef, 0x73, 0x5a, 0x3e, 0xdf, 0x7e, 0x5a, - 0x3e, 0xb7, 0xa7, 0xe5, 0x6e, 0x8a, 0xfd, 0x6c, 0xdc, 0x86, 0x3f, 0xdd, 0x6a, 0x41, 0x51, 0xcb, 0x3b, 0x9a, 0xdf, - 0x78, 0xa0, 0xa7, 0x35, 0x3b, 0xf3, 0x1b, 0x9d, 0x9c, 0x0b, 0x61, 0x83, 0x16, 0xa4, 0xab, 0xe2, 0x96, 0x07, 0x85, - 0xf0, 0xb7, 0x55, 0xab, 0x6a, 0x3f, 0x84, 0x3a, 0xe8, 0xf5, 0x68, 0xb3, 0xae, 0x73, 0xf7, 0xa1, 0x8d, 0x32, 0x2e, - 0x83, 0xc8, 0x72, 0x63, 0x14, 0xca, 0xf8, 0xf2, 0x92, 0x26, 0xd1, 0x98, 0x8f, 0x16, 0xf9, 0x3f, 0x1b, 0xf8, 0x0d, - 0x12, 0xef, 0x3c, 0xd2, 0x6b, 0xe3, 0xd8, 0xae, 0x3a, 0x55, 0xd8, 0x8e, 0xb0, 0x2c, 0xf7, 0x29, 0xca, 0x47, 0x71, - 0x4a, 0x83, 0x4e, 0xf8, 0x70, 0xcb, 0x21, 0xf8, 0x0f, 0xd9, 0x9b, 0xad, 0x8b, 0xf9, 0xbd, 0xc8, 0xb8, 0x13, 0x09, - 0xbf, 0x0a, 0x07, 0xee, 0x1e, 0xb6, 0x9e, 0x6e, 0x07, 0x77, 0x60, 0x67, 0x1a, 0x5a, 0xa1, 0x60, 0xe4, 0x4e, 0x42, - 0xc7, 0xf1, 0x22, 0x95, 0x77, 0x8f, 0xba, 0x8b, 0x32, 0x36, 0x46, 0xbd, 0x83, 0xa1, 0x57, 0x6d, 0xef, 0xc9, 0xa5, - 0x3f, 0xfb, 0xfc, 0x21, 0xfc, 0xd1, 0x99, 0x46, 0xb7, 0x95, 0xae, 0xae, 0x6d, 0x55, 0xd0, 0xd5, 0xf7, 0x6b, 0xca, - 0xb8, 0x16, 0xe1, 0x4a, 0x1f, 0xbf, 0x6f, 0x6b, 0xd0, 0x2a, 0xef, 0xd5, 0xdc, 0x68, 0x59, 0xbf, 0xaa, 0xf5, 0xaf, - 0x1b, 0xfc, 0x9e, 0x6d, 0x47, 0x5a, 0x73, 0xad, 0xb7, 0x35, 0x5f, 0xaf, 0xdb, 0x68, 0x6c, 0x31, 0xae, 0xda, 0xef, - 0x93, 0xdb, 0xd2, 0x44, 0xd1, 0x81, 0x40, 0xb0, 0x52, 0xf6, 0xb5, 0x95, 0xc2, 0x28, 0x79, 0x00, 0xef, 0x8e, 0xf5, - 0x6e, 0x66, 0x69, 0x96, 0x13, 0x7f, 0x2a, 0xe5, 0x3c, 0xd2, 0x9f, 0x3b, 0xbd, 0x3e, 0x0a, 0xb9, 0x98, 0x1c, 0x76, - 0x5a, 0xad, 0x16, 0xbc, 0xf3, 0xd3, 0xf7, 0xae, 0x18, 0xbd, 0x7e, 0xc6, 0x6f, 0x88, 0xff, 0xc4, 0x7b, 0xea, 0x3d, - 0x39, 0xf2, 0x1e, 0x3d, 0xf6, 0x3d, 0xc5, 0xce, 0x89, 0xff, 0xe4, 0xc8, 0xf7, 0x34, 0x3b, 0x27, 0xfe, 0xa3, 0xc7, - 0x7e, 0xef, 0x78, 0x62, 0x55, 0x32, 0xb8, 0x34, 0xa8, 0xf5, 0x9d, 0x5c, 0x0a, 0xfe, 0x91, 0xd6, 0x0f, 0xae, 0x2e, - 0x33, 0xb9, 0x68, 0x1d, 0xfb, 0x08, 0xa7, 0x77, 0x14, 0xcf, 0x23, 0x45, 0x14, 0x6e, 0x21, 0xb8, 0x65, 0x74, 0xa9, - 0x9a, 0x02, 0xd4, 0xcc, 0x4b, 0xbf, 0x77, 0x0c, 0x79, 0xe3, 0x5e, 0x42, 0xfc, 0xd7, 0x9d, 0x27, 0x5e, 0xfb, 0xf1, - 0x55, 0xf3, 0xe1, 0xa8, 0xd5, 0x6c, 0x7b, 0xed, 0x66, 0x27, 0x7c, 0xe2, 0x75, 0xf4, 0xbf, 0x5e, 0xcb, 0x3b, 0xf2, - 0xda, 0xe1, 0x13, 0xef, 0xc8, 0xeb, 0x84, 0x4f, 0xae, 0x1e, 0xea, 0x7c, 0x82, 0xd8, 0x3f, 0xec, 0x1d, 0xc3, 0xa7, - 0x2b, 0x6f, 0x88, 0xff, 0xb9, 0xaf, 0x3f, 0x10, 0xeb, 0x7f, 0xe6, 0x96, 0xb6, 0x9f, 0x6e, 0x2d, 0xee, 0x3c, 0xd9, - 0x5a, 0x7c, 0xf4, 0x78, 0x6b, 0xf1, 0xc3, 0x47, 0xf5, 0xe2, 0xc3, 0x89, 0xae, 0x2a, 0x4f, 0x39, 0xf1, 0x67, 0xb1, - 0x14, 0xec, 0x26, 0x68, 0x7b, 0x2d, 0xaf, 0xe5, 0x35, 0xe1, 0xbf, 0x27, 0x1d, 0x54, 0xf6, 0xba, 0x84, 0x5e, 0xe5, - 0x2a, 0x9f, 0x3c, 0xf5, 0xda, 0x8f, 0x5f, 0x76, 0x1e, 0x8f, 0xa0, 0x9d, 0x5a, 0x68, 0xdb, 0x6b, 0x5f, 0x1d, 0x3d, - 0x1d, 0xb5, 0x3c, 0xe8, 0xd8, 0x86, 0x3f, 0xd3, 0x47, 0x9d, 0x91, 0x7e, 0x68, 0x41, 0xfd, 0xb7, 0xed, 0x27, 0x79, - 0xab, 0xd9, 0x86, 0x3f, 0xbf, 0x94, 0x1a, 0x31, 0xe8, 0xe3, 0xee, 0xb8, 0x0f, 0x5b, 0xde, 0xd1, 0xd3, 0x69, 0x27, - 0xfc, 0xfc, 0xea, 0x49, 0xf8, 0x74, 0xda, 0x7e, 0xf2, 0xad, 0x7e, 0x4a, 0x9b, 0x9d, 0xf0, 0x73, 0xf8, 0xfb, 0xed, - 0x51, 0x6b, 0xda, 0x6c, 0x87, 0x4f, 0xaf, 0x8e, 0xc2, 0xa3, 0xb4, 0xf9, 0x38, 0x7c, 0x0a, 0x7f, 0xab, 0xe1, 0xa6, - 0x7c, 0x46, 0x7d, 0x0f, 0xf6, 0x7b, 0xcd, 0xdc, 0x72, 0xe7, 0xe8, 0x3c, 0xf4, 0x1e, 0x3d, 0x7c, 0xf9, 0xf4, 0xaa, - 0xf9, 0x70, 0xda, 0xee, 0x5c, 0x35, 0x77, 0xfe, 0xfc, 0x16, 0x10, 0x6f, 0x06, 0x8e, 0x29, 0x5c, 0xe0, 0xb1, 0x88, - 0x53, 0xef, 0x9f, 0x7d, 0x80, 0xf3, 0x5d, 0xe6, 0xb5, 0xf8, 0xb4, 0x79, 0x9d, 0xd1, 0xfb, 0xd8, 0xd7, 0xe2, 0x0f, - 0xb7, 0xaf, 0x73, 0xba, 0xe6, 0x54, 0xbd, 0x95, 0x1b, 0x66, 0xf4, 0xba, 0xed, 0xf5, 0x4e, 0x06, 0x03, 0x06, 0xdf, - 0x39, 0x2a, 0xba, 0xb7, 0xf0, 0x8a, 0x6b, 0xd7, 0xdb, 0xc0, 0xe1, 0x20, 0xdf, 0x4a, 0x7d, 0x92, 0xf9, 0x2e, 0x84, - 0xa4, 0x9f, 0x46, 0xc8, 0xb7, 0xf7, 0xc1, 0x47, 0xfa, 0x87, 0xe3, 0x83, 0xbb, 0xf8, 0xa8, 0xf9, 0x79, 0x95, 0x3d, - 0xab, 0xec, 0xd1, 0x33, 0xf5, 0x1c, 0xc0, 0x1d, 0x8f, 0x86, 0x7f, 0x48, 0xa1, 0x28, 0xf7, 0x75, 0x5c, 0xe1, 0xcd, - 0xaf, 0x71, 0x49, 0xeb, 0x0b, 0x5d, 0xc4, 0x37, 0xc6, 0xff, 0x1c, 0xbe, 0x65, 0x60, 0x1f, 0xae, 0xf4, 0x15, 0x63, - 0xe2, 0x77, 0xc2, 0x56, 0xd8, 0x2a, 0x1d, 0x07, 0x70, 0x89, 0x8f, 0x2c, 0xb9, 0x8c, 0xe1, 0x73, 0x9a, 0x29, 0x9f, - 0xa8, 0x0f, 0x6f, 0xc2, 0xeb, 0xce, 0xd5, 0x27, 0x50, 0xf5, 0x9b, 0xe6, 0x23, 0xdf, 0x37, 0x57, 0xff, 0xe1, 0x92, - 0xd8, 0x37, 0x70, 0x91, 0xce, 0x7a, 0xac, 0x67, 0x60, 0x53, 0xbf, 0xa6, 0x09, 0x8b, 0x03, 0x3f, 0x98, 0x0b, 0x3a, - 0xa6, 0x22, 0x6f, 0xd6, 0x6e, 0x97, 0xa9, 0x8b, 0x65, 0xc8, 0xb7, 0x1f, 0x6e, 0x14, 0xf0, 0xfa, 0x5e, 0x32, 0x30, - 0x5e, 0x2d, 0xdf, 0xa8, 0xf9, 0x7e, 0x81, 0x6d, 0x89, 0x00, 0x8e, 0x5e, 0xa9, 0x06, 0xbe, 0xd6, 0x0d, 0xda, 0x61, - 0xe7, 0x11, 0xd2, 0xbc, 0x04, 0x5e, 0x8b, 0xfa, 0x7d, 0xd0, 0x3c, 0x6a, 0xfd, 0x09, 0x39, 0xdd, 0xca, 0x81, 0x86, - 0xc6, 0xa9, 0x23, 0xaa, 0x0f, 0xde, 0xd6, 0xaf, 0xfe, 0xf9, 0x9a, 0x22, 0x3e, 0xd3, 0x6b, 0x87, 0x17, 0xac, 0x9a, - 0xf8, 0xa1, 0xbe, 0xc0, 0x3e, 0x66, 0x93, 0xc0, 0xfd, 0x9c, 0xa9, 0x7e, 0xed, 0xaa, 0xfa, 0x0a, 0x32, 0x2a, 0xaa, - 0x26, 0x02, 0x2d, 0x95, 0x2f, 0x9e, 0x65, 0x9e, 0x58, 0xad, 0x02, 0x01, 0x8e, 0x58, 0xe2, 0xe0, 0x14, 0x9e, 0x51, - 0x0d, 0xc9, 0x02, 0x97, 0x00, 0x29, 0x04, 0x13, 0xa1, 0xff, 0xaf, 0x8a, 0xed, 0x0f, 0xe3, 0x5e, 0x09, 0xd3, 0x38, - 0x9b, 0x00, 0x15, 0xc6, 0xd9, 0x64, 0xc3, 0x79, 0xa3, 0xc3, 0x09, 0x6b, 0xa5, 0xd5, 0x50, 0x95, 0x93, 0x26, 0x7f, - 0x76, 0xfb, 0xde, 0xbc, 0x9f, 0xc9, 0x07, 0x1f, 0xa8, 0xf2, 0x7d, 0x57, 0xef, 0x92, 0x6d, 0x90, 0x07, 0xfa, 0x03, - 0xe1, 0x2a, 0x21, 0x0d, 0xa4, 0x1f, 0x5c, 0xea, 0xf3, 0x8c, 0xcd, 0x43, 0x7c, 0x2d, 0xfb, 0x12, 0x7a, 0xc5, 0x46, - 0x46, 0x84, 0x61, 0xcf, 0x5c, 0x6c, 0x6e, 0xaa, 0xad, 0x21, 0x6d, 0xac, 0xad, 0xfe, 0x51, 0xac, 0x32, 0x8c, 0x49, - 0xc6, 0xfd, 0xde, 0x83, 0xf2, 0xeb, 0x8c, 0xbb, 0x36, 0x01, 0xbe, 0x5a, 0x3e, 0x10, 0x34, 0xfd, 0x67, 0xf2, 0x00, - 0xbe, 0x5b, 0xfe, 0x60, 0x08, 0x9f, 0xcc, 0x0e, 0x95, 0x28, 0x78, 0x50, 0x7d, 0xbe, 0x1c, 0xf8, 0x60, 0xe3, 0x66, - 0x96, 0xe2, 0xfb, 0x8a, 0x6f, 0x23, 0xaa, 0x3b, 0x8f, 0x2a, 0x51, 0xdd, 0x79, 0xe4, 0x4a, 0xcf, 0xb6, 0xd7, 0xee, - 0x84, 0x8f, 0x1c, 0x01, 0x70, 0xd5, 0x84, 0xff, 0x6b, 0x22, 0xe0, 0x61, 0xf8, 0xa8, 0x94, 0x01, 0xaf, 0xda, 0x9d, - 0xf0, 0x48, 0x8b, 0x9b, 0x4e, 0xf8, 0xe8, 0x07, 0xc5, 0xa0, 0x35, 0x73, 0xae, 0x1f, 0x88, 0x2d, 0xa1, 0x1a, 0x9d, - 0x54, 0xe7, 0xe3, 0xa0, 0xfc, 0x06, 0x9c, 0x39, 0x9f, 0xc6, 0x25, 0xf4, 0x3c, 0x16, 0xf0, 0x21, 0x8e, 0xfa, 0xd9, - 0xad, 0xd5, 0xe1, 0x1a, 0xbf, 0xd8, 0x32, 0x05, 0x9c, 0x70, 0x1f, 0xbb, 0x37, 0x83, 0xe1, 0x5a, 0xad, 0x7a, 0x6d, - 0xb1, 0x7d, 0x7b, 0xdb, 0x6e, 0xd2, 0xd6, 0x0d, 0xed, 0x1b, 0xe2, 0x14, 0xb3, 0x60, 0xea, 0x15, 0xf1, 0x6a, 0x92, - 0x2f, 0x93, 0x62, 0x7d, 0x7e, 0xc8, 0xed, 0x13, 0xdc, 0xb9, 0x1c, 0x4d, 0xab, 0x04, 0xf4, 0x84, 0xc1, 0x75, 0xf6, - 0xa2, 0xb0, 0xa0, 0xd7, 0x9c, 0x81, 0x15, 0x96, 0x14, 0xbf, 0xa0, 0x79, 0xdf, 0x87, 0x22, 0x3f, 0xf2, 0x95, 0x23, - 0xc9, 0x2f, 0x3f, 0x46, 0x52, 0x12, 0x76, 0x55, 0x80, 0xd5, 0x25, 0x12, 0x38, 0xb5, 0x80, 0x1f, 0x1f, 0x1d, 0x1c, - 0xec, 0x3c, 0x2f, 0x4a, 0x1b, 0x83, 0xb5, 0x56, 0x1f, 0x31, 0x70, 0x59, 0x91, 0xef, 0x22, 0xba, 0x1c, 0x57, 0xa1, - 0x10, 0x19, 0x3c, 0x5d, 0xd2, 0x58, 0x86, 0x71, 0xa6, 0x53, 0x14, 0x1c, 0x86, 0x85, 0xdb, 0xf4, 0x08, 0x15, 0x5c, - 0xc6, 0xce, 0x57, 0x4a, 0xcd, 0x39, 0xe7, 0x32, 0xb6, 0x57, 0xfd, 0x32, 0x59, 0xcb, 0x85, 0x9f, 0x76, 0x7a, 0x6f, - 0xdf, 0x9f, 0x78, 0xfa, 0x78, 0x1e, 0x1f, 0x4e, 0x3b, 0xbd, 0x63, 0x65, 0x99, 0xeb, 0x8b, 0x42, 0x44, 0x5f, 0x14, - 0xf2, 0xcc, 0xa5, 0x31, 0x88, 0xd7, 0x14, 0x87, 0x7a, 0xd9, 0xbe, 0x47, 0xb3, 0x91, 0xf6, 0x29, 0xce, 0x16, 0xa9, - 0x64, 0xf0, 0x0a, 0xde, 0x43, 0xe8, 0xda, 0x84, 0x0d, 0x2b, 0x13, 0x4d, 0xad, 0x86, 0x23, 0x33, 0xeb, 0x81, 0x1c, - 0xb3, 0x94, 0xda, 0xd4, 0x52, 0x33, 0x54, 0x99, 0xf9, 0xbc, 0xd9, 0x3a, 0x5f, 0x5c, 0xce, 0x98, 0xf4, 0x6d, 0x7e, - 0xf6, 0x07, 0xd3, 0xe1, 0x58, 0x4d, 0xd5, 0xbb, 0x28, 0x8c, 0x8b, 0xd4, 0x7e, 0x6e, 0x64, 0xed, 0x03, 0xef, 0x7a, - 0xf5, 0x46, 0x42, 0xc0, 0x8d, 0x9f, 0xe9, 0x51, 0xaf, 0x74, 0x4a, 0xba, 0x75, 0xc5, 0xf1, 0xe1, 0xf4, 0xa8, 0x77, - 0x11, 0xcd, 0xcd, 0x78, 0xaf, 0xf8, 0xc6, 0xc7, 0xe2, 0x4b, 0x8e, 0xd9, 0x57, 0xa9, 0xed, 0xfa, 0x0e, 0xa5, 0x01, - 0x78, 0xc4, 0x53, 0xbf, 0x77, 0x6c, 0x94, 0x01, 0x4f, 0x05, 0x5d, 0xfd, 0x47, 0x2d, 0x9b, 0x2d, 0x9f, 0x72, 0xa5, - 0x2d, 0xe9, 0x2e, 0xce, 0x24, 0x35, 0xbf, 0xee, 0xb4, 0xdd, 0x3b, 0x8e, 0x8d, 0x9a, 0x09, 0xcc, 0x23, 0x8f, 0x0e, - 0xa1, 0x33, 0xe8, 0x72, 0x21, 0xe3, 0x87, 0xd7, 0xf4, 0xb2, 0x19, 0xcf, 0x59, 0xe5, 0x44, 0x05, 0xa5, 0xa3, 0x9c, - 0x92, 0x57, 0x33, 0xc1, 0xcf, 0x78, 0x6d, 0x91, 0x8a, 0x85, 0x17, 0xc6, 0x43, 0xab, 0x74, 0x75, 0x1a, 0x4b, 0xdf, - 0xd3, 0x1c, 0xde, 0x7a, 0x72, 0x8d, 0xec, 0x2d, 0xfc, 0xde, 0xbf, 0xfd, 0x8f, 0xff, 0x65, 0x9c, 0xb3, 0xc7, 0x87, - 0xd3, 0xb6, 0x1d, 0x6b, 0x0d, 0xd1, 0xc5, 0x31, 0x5c, 0x30, 0xab, 0xa2, 0x89, 0xf4, 0xa6, 0x39, 0x11, 0x2c, 0x69, - 0x4e, 0xe3, 0x74, 0xec, 0xf7, 0x76, 0x23, 0xc8, 0xbd, 0x59, 0x62, 0xa0, 0xae, 0x17, 0x01, 0x09, 0xfe, 0xa6, 0xbb, - 0x11, 0x36, 0xc5, 0x5e, 0x9d, 0x56, 0xf7, 0xa6, 0x44, 0x75, 0xa0, 0x6a, 0xb7, 0x25, 0x84, 0xf9, 0x2a, 0x91, 0x61, - 0x6a, 0xa2, 0x76, 0x49, 0xa2, 0xf0, 0xbd, 0x32, 0x1a, 0xf2, 0x7f, 0xff, 0xe7, 0x7f, 0xf9, 0x6f, 0xf6, 0x11, 0x82, - 0x1c, 0xff, 0xf6, 0xdf, 0xff, 0xf3, 0xff, 0xf9, 0xdf, 0xff, 0x15, 0x12, 0xeb, 0x4d, 0x20, 0x44, 0xf1, 0x09, 0xaf, - 0x8a, 0x82, 0x68, 0x86, 0xe1, 0x41, 0x32, 0xda, 0x8c, 0xe5, 0x92, 0x8d, 0xea, 0xd7, 0x26, 0xce, 0xd4, 0x84, 0xea, - 0xb0, 0x19, 0xe8, 0xd4, 0xa1, 0x2d, 0x2a, 0x1a, 0xa9, 0xa1, 0x5c, 0xd1, 0x62, 0x71, 0x7c, 0x08, 0xf8, 0xbe, 0xdf, - 0x4d, 0xb3, 0xb0, 0xdc, 0x8e, 0xa5, 0x75, 0xfd, 0x41, 0x49, 0x51, 0x95, 0x7b, 0xe0, 0x94, 0x5f, 0xc2, 0x63, 0xd4, - 0x71, 0x8a, 0xd5, 0xee, 0xd5, 0xfa, 0x74, 0x7f, 0x5a, 0xe4, 0x92, 0x8d, 0x01, 0xe5, 0xda, 0xc1, 0xa8, 0xe2, 0x9f, - 0x4d, 0x50, 0xff, 0xd2, 0xdb, 0x42, 0x8d, 0xa2, 0x6d, 0xc6, 0x87, 0x4f, 0xff, 0x54, 0xfc, 0x65, 0x06, 0x4a, 0x96, - 0x17, 0xcc, 0xe2, 0x1b, 0x63, 0x49, 0x3e, 0x6e, 0xb5, 0xe6, 0x37, 0x68, 0x59, 0xcd, 0x80, 0x77, 0x4d, 0xa6, 0x9c, - 0x92, 0xee, 0x80, 0x2a, 0x70, 0x5a, 0xfa, 0x3f, 0x5b, 0x1e, 0x38, 0x51, 0xbd, 0x56, 0x51, 0xfc, 0x79, 0xa9, 0x5c, - 0x70, 0xec, 0x17, 0x08, 0x70, 0x1a, 0x6f, 0xe5, 0x25, 0x77, 0x17, 0xb7, 0x74, 0x7a, 0x75, 0x74, 0xaf, 0x69, 0x7b, - 0xf3, 0x02, 0x95, 0x1b, 0xa0, 0x75, 0x43, 0xab, 0x0f, 0x21, 0x58, 0x3a, 0x6d, 0xe3, 0x69, 0x67, 0x59, 0x0e, 0x2f, - 0x25, 0x9f, 0xb9, 0x11, 0x59, 0x1a, 0xd3, 0x11, 0x1d, 0x5b, 0x2f, 0xaf, 0xa9, 0xd7, 0xd1, 0xd6, 0x62, 0x7a, 0xb4, - 0x65, 0x2e, 0x03, 0x92, 0x8a, 0xc4, 0x7a, 0xad, 0xe2, 0x33, 0x38, 0x81, 0xcb, 0x71, 0xca, 0x63, 0x19, 0x29, 0x82, - 0xed, 0xba, 0x71, 0xdd, 0x18, 0xd8, 0x0c, 0x5f, 0x3a, 0xf0, 0x74, 0x75, 0x53, 0xf0, 0xb7, 0xd6, 0xaf, 0xb9, 0x15, - 0xa1, 0xea, 0xee, 0x0e, 0xa5, 0xdd, 0x35, 0xdf, 0x9a, 0x70, 0xe9, 0x9b, 0x9a, 0x9f, 0xc3, 0xc8, 0x98, 0x0e, 0xda, - 0x5e, 0xaf, 0x45, 0xb5, 0xae, 0xfd, 0x4a, 0x06, 0xbe, 0x02, 0xd3, 0x5f, 0x6f, 0xa5, 0x0a, 0xa1, 0xd5, 0x1b, 0xf2, - 0x6d, 0x69, 0x05, 0xc5, 0xf3, 0xb9, 0x6a, 0x88, 0xba, 0xc7, 0x87, 0x5a, 0x79, 0x05, 0xee, 0xa1, 0x72, 0x01, 0x74, - 0xe8, 0xdd, 0x34, 0x32, 0x47, 0x41, 0xff, 0x32, 0x41, 0x79, 0xf8, 0x5c, 0x55, 0xef, 0xff, 0x01, 0xb9, 0x37, 0x65, - 0xfc, 0x3f, 0x86, 0x00, 0x00}; + 0xae, 0x27, 0x4f, 0x9e, 0x3c, 0x7b, 0x02, 0xc7, 0x7b, 0xb1, 0x18, 0xc9, 0xdb, 0x39, 0xf3, 0xa6, 0x72, 0x96, 0xf4, + 0x8e, 0xcd, 0xbf, 0x2c, 0x8a, 0x7b, 0xc7, 0x09, 0x4f, 0x3f, 0x7a, 0x19, 0x4b, 0x28, 0x1f, 0x89, 0xd4, 0x9b, 0x66, + 0x6c, 0x4c, 0xe3, 0x48, 0x46, 0x21, 0x9f, 0x45, 0x13, 0xe6, 0x1d, 0xf6, 0x8e, 0x67, 0x4c, 0x46, 0xde, 0x68, 0x1a, + 0x65, 0x39, 0x93, 0xf4, 0xc3, 0xfb, 0x2f, 0x9a, 0x4f, 0x7b, 0xc7, 0xf9, 0x28, 0xe3, 0x73, 0xe9, 0xc1, 0x90, 0x74, + 0x26, 0xe2, 0x45, 0xc2, 0x7a, 0x87, 0x87, 0xd7, 0xd7, 0xd7, 0xc1, 0x4f, 0xf9, 0x3f, 0x8d, 0x44, 0x9a, 0x4b, 0xef, + 0x15, 0xbd, 0xe6, 0x69, 0x2c, 0xae, 0x09, 0x93, 0xf4, 0x55, 0x70, 0x36, 0x8d, 0x62, 0x71, 0xfd, 0x4e, 0x08, 0x79, + 0x70, 0xe0, 0xeb, 0xc7, 0xdb, 0xd3, 0xb3, 0x33, 0x4a, 0xe9, 0x95, 0xe0, 0xb1, 0xd7, 0x5a, 0xad, 0xaa, 0xc2, 0x20, + 0x8d, 0x24, 0xbf, 0x62, 0xba, 0x0b, 0x3e, 0x38, 0x40, 0x51, 0x2c, 0xe6, 0x92, 0xc5, 0x67, 0xf2, 0x36, 0x61, 0x67, + 0x53, 0xc6, 0x64, 0x8e, 0x78, 0xea, 0x3d, 0x17, 0xa3, 0xc5, 0x8c, 0xa5, 0x32, 0x98, 0x67, 0x42, 0x0a, 0x80, 0xe4, + 0xe0, 0x00, 0x65, 0x6c, 0x9e, 0x44, 0x23, 0x06, 0xf5, 0xa7, 0x67, 0x67, 0x55, 0x8f, 0xaa, 0x11, 0xe1, 0x92, 0x9e, + 0xdd, 0xce, 0x2e, 0x45, 0xe2, 0x63, 0x92, 0x48, 0x9a, 0xb2, 0x6b, 0xef, 0x3b, 0x16, 0x7d, 0x7c, 0x1d, 0xcd, 0xbb, + 0xa3, 0x24, 0xca, 0x73, 0xef, 0x52, 0x2e, 0xd5, 0x12, 0xb2, 0xc5, 0x48, 0x8a, 0xcc, 0x97, 0x84, 0x11, 0x8e, 0x97, + 0x7c, 0xec, 0xcb, 0x29, 0xcf, 0x83, 0xf3, 0xfd, 0x51, 0x9e, 0xbf, 0x63, 0xf9, 0x22, 0x91, 0xfb, 0x74, 0xaf, 0x45, + 0xf8, 0x1e, 0xa5, 0x5c, 0x62, 0x39, 0xcd, 0xc4, 0xb5, 0xf7, 0x22, 0xcb, 0x44, 0xe6, 0xa3, 0xd3, 0xb3, 0x33, 0xdd, + 0xc2, 0xe3, 0xb9, 0x97, 0x0a, 0xe9, 0x95, 0xe3, 0x45, 0x97, 0x09, 0x0b, 0xbc, 0x0f, 0x39, 0xf3, 0x2e, 0x16, 0x69, + 0x1e, 0x8d, 0xd9, 0xe9, 0xd9, 0xd9, 0x85, 0x27, 0x32, 0xef, 0x62, 0x94, 0xe7, 0x17, 0x1e, 0x4f, 0x73, 0xc9, 0xa2, + 0x38, 0x40, 0xb8, 0xab, 0x26, 0x1b, 0xe5, 0xf9, 0x7b, 0x76, 0x23, 0xa9, 0x24, 0xea, 0x51, 0x52, 0x56, 0x4c, 0x98, + 0xf4, 0xf2, 0x72, 0x5d, 0x3e, 0x5e, 0x26, 0x4c, 0x7a, 0x92, 0xaa, 0x7a, 0xd1, 0xd5, 0xb8, 0x67, 0xfa, 0x51, 0x76, + 0xf9, 0xd8, 0x67, 0xf2, 0xe0, 0x40, 0x96, 0x78, 0xc6, 0x7a, 0x69, 0x1e, 0xa7, 0x6c, 0xcf, 0x96, 0x1d, 0x1c, 0xb0, + 0x20, 0x61, 0xe9, 0x44, 0x4e, 0x29, 0xa5, 0xed, 0x2e, 0x3f, 0x38, 0xf0, 0x25, 0x4d, 0x64, 0x30, 0x61, 0xd2, 0x67, + 0x18, 0x93, 0xaa, 0xf7, 0xc1, 0x81, 0xaf, 0x91, 0x20, 0xa8, 0x46, 0x5c, 0x0d, 0xc7, 0x38, 0x30, 0xd8, 0x3f, 0xbb, + 0x4d, 0x47, 0xbe, 0x0b, 0x3f, 0x26, 0xfc, 0xe0, 0x20, 0x91, 0x41, 0x0e, 0x23, 0x12, 0x89, 0x71, 0x91, 0x31, 0xb9, + 0xc8, 0x52, 0x4f, 0x16, 0x52, 0x9c, 0xc9, 0x8c, 0xa7, 0x13, 0x1f, 0x2f, 0x6d, 0x99, 0xd3, 0xb1, 0x28, 0x34, 0xb8, + 0x5f, 0x4b, 0x9a, 0xd1, 0x1e, 0xcc, 0x78, 0x29, 0x7d, 0xd8, 0x45, 0x31, 0xf6, 0x32, 0x4a, 0x51, 0xae, 0xfa, 0xa2, + 0x7e, 0x16, 0x66, 0x0d, 0x84, 0x88, 0x86, 0x92, 0x70, 0x89, 0xc9, 0x47, 0xea, 0x67, 0x24, 0x08, 0x02, 0x89, 0x69, + 0x6f, 0x69, 0xb1, 0x92, 0x39, 0xeb, 0xec, 0x67, 0x83, 0xd6, 0x30, 0x94, 0x41, 0xc6, 0xe2, 0xc5, 0x88, 0xf9, 0x3e, + 0x27, 0x39, 0x49, 0x31, 0xed, 0xf1, 0x86, 0x2f, 0x68, 0x0f, 0xb6, 0x5b, 0xd4, 0xf7, 0x9a, 0xd2, 0xbd, 0x16, 0x36, + 0x30, 0x0a, 0x0b, 0x20, 0x60, 0xd8, 0xc0, 0x23, 0x28, 0x45, 0xe9, 0x62, 0x76, 0xc9, 0x32, 0x54, 0x36, 0xeb, 0xd6, + 0xc8, 0x62, 0x91, 0x33, 0x6f, 0x94, 0xe7, 0xde, 0x78, 0x91, 0x8e, 0x24, 0x17, 0xa9, 0x87, 0x1a, 0xa2, 0x81, 0x34, + 0x39, 0x94, 0xd4, 0x80, 0x70, 0x81, 0xfd, 0x1c, 0x37, 0xb2, 0x41, 0xda, 0x68, 0x0f, 0x09, 0x40, 0x89, 0xbb, 0x66, + 0x3c, 0x83, 0x00, 0x46, 0x32, 0x58, 0x63, 0x41, 0x3e, 0x48, 0x58, 0xa5, 0x5a, 0x22, 0x93, 0xfd, 0x2c, 0xd8, 0x3c, + 0x28, 0x54, 0x06, 0xb3, 0x68, 0xee, 0x33, 0xda, 0x63, 0x8a, 0xb8, 0xa2, 0x74, 0x04, 0xb0, 0xd6, 0xf6, 0xad, 0xcf, + 0x42, 0x16, 0x54, 0x24, 0x85, 0x43, 0x19, 0x8c, 0x45, 0xf6, 0x22, 0x1a, 0x4d, 0xa1, 0x5f, 0x49, 0x30, 0xb1, 0x3d, + 0x6f, 0xa3, 0x8c, 0x45, 0x92, 0xbd, 0x48, 0x18, 0x3c, 0xf9, 0x48, 0xf5, 0x44, 0x98, 0xe4, 0xf4, 0x55, 0x90, 0x70, + 0xf9, 0x46, 0xa4, 0x23, 0xd6, 0xcd, 0x1d, 0xea, 0xe2, 0xb0, 0xef, 0x27, 0x52, 0x66, 0xfc, 0x72, 0x21, 0x99, 0x8f, + 0x52, 0x68, 0x81, 0x48, 0x8e, 0x09, 0x0f, 0x24, 0xbb, 0x91, 0xa7, 0x22, 0x95, 0x2c, 0x95, 0x94, 0x59, 0xa4, 0x92, + 0x2c, 0x88, 0xe6, 0x73, 0x96, 0xc6, 0xa7, 0x53, 0x9e, 0xc4, 0x3e, 0xc7, 0x05, 0x2e, 0x48, 0x24, 0x29, 0xac, 0x91, + 0xf6, 0xb2, 0x10, 0xfe, 0xd9, 0xbd, 0x1a, 0x5f, 0xd2, 0x9e, 0x3a, 0x14, 0x8c, 0x22, 0xd4, 0x1d, 0x8b, 0xcc, 0x37, + 0x2b, 0xf0, 0xc4, 0xd8, 0x93, 0x30, 0xc7, 0xbb, 0x45, 0xc2, 0x72, 0xcc, 0x1a, 0x94, 0x97, 0xdb, 0x68, 0x10, 0xfc, + 0x35, 0x50, 0x7c, 0x81, 0xfd, 0x0c, 0x87, 0x59, 0xf7, 0x2a, 0xca, 0xbc, 0x2f, 0xcc, 0x89, 0xfa, 0xc9, 0x72, 0xb3, + 0xa9, 0xa4, 0x3f, 0x05, 0x32, 0x5b, 0xe4, 0x92, 0xc5, 0xef, 0x6f, 0xe7, 0x2c, 0x27, 0xef, 0x25, 0x9d, 0xca, 0xfe, + 0x54, 0x06, 0x6c, 0x36, 0x97, 0xb7, 0x67, 0x8a, 0x31, 0x86, 0x08, 0x91, 0x11, 0xb4, 0xcc, 0x58, 0x34, 0x02, 0x66, + 0x66, 0xb0, 0xf5, 0xb5, 0x48, 0x6e, 0xc7, 0x3c, 0x49, 0xce, 0x16, 0xf3, 0xb9, 0xc8, 0x24, 0xf9, 0x2b, 0x5d, 0x4a, + 0x51, 0xa1, 0x06, 0xf6, 0x72, 0x99, 0x5f, 0x73, 0x39, 0x9a, 0xfa, 0x12, 0x2f, 0x47, 0x51, 0xce, 0xbc, 0x67, 0x42, + 0x24, 0x2c, 0x4a, 0xc3, 0x8c, 0x66, 0xfd, 0xf7, 0x32, 0x4c, 0x17, 0x49, 0xd2, 0xbd, 0xcc, 0x58, 0xf4, 0xb1, 0xab, + 0xaa, 0xdf, 0x5e, 0xfe, 0xc4, 0x46, 0x32, 0x54, 0xbf, 0x4f, 0xb2, 0x2c, 0xba, 0x85, 0x86, 0x94, 0x42, 0xb3, 0x7e, + 0x16, 0x7e, 0x75, 0xf6, 0xf6, 0x4d, 0xa0, 0x0f, 0x09, 0x1f, 0xdf, 0xfa, 0x59, 0x79, 0xf0, 0xb2, 0x82, 0x8c, 0x33, + 0x31, 0x5b, 0x9b, 0x5a, 0x63, 0x2d, 0xeb, 0xee, 0x00, 0x81, 0xd1, 0x6c, 0x4f, 0x0f, 0xed, 0x42, 0xf0, 0x46, 0xd1, + 0x3c, 0x54, 0x52, 0x33, 0x2f, 0xfc, 0x13, 0xea, 0x62, 0x3f, 0xc3, 0x77, 0x43, 0x2b, 0xb3, 0xdb, 0x25, 0xa3, 0x0a, + 0xce, 0x39, 0x48, 0x18, 0x80, 0x71, 0x14, 0xc9, 0xd1, 0x74, 0xc9, 0xd4, 0x60, 0x85, 0x85, 0x98, 0x15, 0x05, 0xb9, + 0x2e, 0xe9, 0x5d, 0xee, 0x51, 0x9a, 0x29, 0x46, 0x45, 0xe5, 0x6a, 0x95, 0x51, 0x9a, 0x61, 0xf2, 0x1d, 0x5d, 0x46, + 0x76, 0x3d, 0xe1, 0x5e, 0x8b, 0xc0, 0xb9, 0x0c, 0x35, 0x77, 0x21, 0x23, 0x91, 0x5e, 0xb1, 0x4c, 0xb2, 0x2c, 0xfc, + 0x2b, 0xc9, 0xd8, 0x38, 0x01, 0x28, 0xf6, 0xda, 0x64, 0x1a, 0xe5, 0xa7, 0xd3, 0x28, 0x9d, 0xb0, 0x38, 0xbc, 0x96, + 0x05, 0xf9, 0x3b, 0x45, 0x63, 0x9e, 0x46, 0x09, 0xff, 0x85, 0xc5, 0xc8, 0x48, 0x83, 0x13, 0x8f, 0xdd, 0x48, 0x96, + 0xc6, 0xb9, 0xf7, 0xf2, 0xfd, 0xeb, 0x57, 0x66, 0x1f, 0x6b, 0x02, 0x02, 0x2f, 0xf3, 0xc5, 0x9c, 0x65, 0x3e, 0x26, + 0x46, 0x40, 0xbc, 0xe0, 0x8a, 0x39, 0xbe, 0x8e, 0xe6, 0xba, 0x84, 0xe7, 0x1f, 0xe6, 0x71, 0x24, 0xd9, 0xd7, 0x2c, + 0x8d, 0x79, 0x3a, 0xa1, 0x7b, 0x6d, 0x5d, 0x3e, 0x8d, 0x4c, 0x45, 0x5c, 0x16, 0x9d, 0xef, 0xbf, 0x48, 0xd4, 0xba, + 0xcb, 0xc7, 0x85, 0x8f, 0x8b, 0x5c, 0x46, 0x92, 0x8f, 0xbc, 0x28, 0x8e, 0xbf, 0x4c, 0xb9, 0xe4, 0x0a, 0xc0, 0x0c, + 0xb6, 0x07, 0x48, 0x94, 0x69, 0x51, 0x61, 0x01, 0xf7, 0x31, 0xf1, 0x7d, 0x23, 0x00, 0xa6, 0xd8, 0xec, 0xd7, 0xc1, + 0x41, 0xc5, 0xee, 0xfb, 0x2c, 0xd4, 0x95, 0x74, 0x30, 0xc4, 0xc1, 0x7c, 0x91, 0xc3, 0x46, 0xdb, 0x29, 0x40, 0xba, + 0x88, 0xcb, 0x9c, 0x65, 0x57, 0x2c, 0x2e, 0x89, 0x23, 0xf7, 0xf1, 0x72, 0x6d, 0x0e, 0x73, 0x2c, 0x24, 0x1d, 0x0c, + 0xbb, 0x2e, 0xdf, 0x66, 0x86, 0xce, 0x33, 0x31, 0x67, 0x99, 0xe4, 0x2c, 0x2f, 0x59, 0x89, 0x0f, 0x52, 0xb4, 0x64, + 0x27, 0x39, 0xb5, 0xeb, 0x9b, 0xfb, 0x9c, 0x30, 0x5c, 0x63, 0x18, 0x56, 0xd0, 0xbe, 0xb8, 0x52, 0x12, 0x23, 0x27, + 0x1c, 0x13, 0xa9, 0x21, 0xcd, 0x31, 0x2e, 0x30, 0x91, 0x16, 0x5c, 0xcd, 0x8a, 0xcc, 0x6c, 0xb7, 0x20, 0xaa, 0xe9, + 0x77, 0x4a, 0x54, 0x03, 0x43, 0x8b, 0x24, 0x3b, 0x38, 0xf0, 0x59, 0x50, 0x12, 0x05, 0xdd, 0x6b, 0x9b, 0x3d, 0x72, + 0x90, 0xb5, 0x03, 0x6c, 0x98, 0x58, 0x12, 0x86, 0xc9, 0x1e, 0x0b, 0x52, 0x71, 0x32, 0x1a, 0xb1, 0x3c, 0x17, 0xd9, + 0xc1, 0xc1, 0x9e, 0x6a, 0x5f, 0x6a, 0x13, 0xb0, 0x87, 0x6f, 0xaf, 0xd3, 0x0a, 0x02, 0x5c, 0x49, 0x58, 0x23, 0x17, + 0x24, 0xc8, 0x29, 0xa5, 0x70, 0xa0, 0xbe, 0x55, 0x3c, 0x42, 0x74, 0x7e, 0x8e, 0x1a, 0x92, 0x18, 0x34, 0x4c, 0x98, + 0x9d, 0xfa, 0xf6, 0x39, 0xd3, 0xaa, 0x95, 0x52, 0x3c, 0x36, 0x30, 0xa3, 0xcf, 0x4f, 0x10, 0xb3, 0x31, 0x4f, 0x9d, + 0x65, 0xd7, 0x40, 0x22, 0x92, 0xe4, 0xb8, 0x70, 0x36, 0x74, 0xeb, 0xd0, 0x4a, 0xa7, 0xd1, 0x3b, 0xb7, 0x9c, 0x28, + 0x3d, 0xc2, 0xd9, 0xc6, 0x01, 0x1b, 0x16, 0x44, 0xa1, 0xde, 0xae, 0x26, 0x55, 0x80, 0x0e, 0xe4, 0xb0, 0x6b, 0xea, + 0x69, 0xae, 0x31, 0x97, 0xb1, 0x9f, 0x17, 0x2c, 0x97, 0x9a, 0x8e, 0x7d, 0x49, 0x52, 0xc2, 0x71, 0x01, 0xc7, 0x6d, + 0xcc, 0x27, 0x8b, 0x0c, 0xd4, 0x1d, 0x38, 0x8a, 0x2c, 0x5d, 0xcc, 0x98, 0x7d, 0xda, 0x06, 0xdb, 0xdb, 0x39, 0x08, + 0xc4, 0x1c, 0x68, 0xfa, 0x6e, 0x72, 0x02, 0x58, 0x25, 0x5e, 0xad, 0xbe, 0xb3, 0x83, 0x54, 0x5b, 0x59, 0xaa, 0x68, + 0x6b, 0x7b, 0xf2, 0x77, 0x6c, 0xe4, 0xf1, 0x5e, 0x5b, 0x43, 0xff, 0xf7, 0x21, 0xdd, 0x6b, 0x95, 0x14, 0x6c, 0x70, + 0xaa, 0x81, 0xd1, 0x28, 0x7c, 0xab, 0x07, 0xc2, 0x4a, 0xba, 0xd7, 0x88, 0x25, 0x98, 0x6e, 0xd0, 0xe9, 0x94, 0x0e, + 0x40, 0xcf, 0x08, 0xa6, 0xc3, 0x5d, 0xc4, 0x64, 0xb9, 0x81, 0x2f, 0x37, 0xeb, 0x2a, 0xa6, 0x71, 0x55, 0x67, 0x1a, + 0x6b, 0x8b, 0x40, 0xf3, 0xb2, 0x0b, 0x2a, 0x69, 0xcc, 0x1c, 0xf3, 0xaa, 0x8a, 0x70, 0x05, 0x4c, 0xb5, 0x24, 0x67, + 0x88, 0x37, 0xd1, 0x8c, 0xe5, 0x3e, 0xc3, 0x64, 0x57, 0x03, 0x4d, 0x9c, 0xd0, 0x64, 0xe8, 0x88, 0xcd, 0x1c, 0xc4, + 0x26, 0xc7, 0x5a, 0x2b, 0xab, 0x1f, 0xb7, 0x9c, 0xb0, 0x41, 0x3e, 0xac, 0x94, 0x39, 0x67, 0xf1, 0x4a, 0x1e, 0x1b, + 0xea, 0xb6, 0xf8, 0xd3, 0x65, 0x1a, 0x69, 0x4a, 0x69, 0xc8, 0x31, 0xd9, 0x6b, 0xad, 0xef, 0xa3, 0x6d, 0x55, 0xad, + 0x71, 0x30, 0x84, 0x7d, 0x50, 0xe2, 0x22, 0xe0, 0xb9, 0xfa, 0xbf, 0x76, 0xce, 0x00, 0x6d, 0x67, 0x40, 0x16, 0xc1, + 0x38, 0x89, 0xa4, 0xdf, 0x3e, 0x6c, 0x81, 0x26, 0x7a, 0xc5, 0x40, 0x9a, 0x60, 0xbc, 0xb9, 0x14, 0x16, 0x2c, 0xd2, + 0x7c, 0xca, 0xc7, 0xd2, 0x8f, 0xa4, 0x62, 0x28, 0x2c, 0xc9, 0x99, 0x27, 0x6b, 0xfa, 0xb0, 0x62, 0x36, 0x11, 0x90, + 0x5a, 0xa9, 0x7c, 0x31, 0x0b, 0xa9, 0x62, 0x5a, 0xc0, 0x1b, 0x2a, 0x5d, 0xba, 0xe2, 0x31, 0xb6, 0x35, 0x07, 0x7d, + 0xb1, 0xdd, 0xd7, 0x23, 0x86, 0x86, 0x15, 0x70, 0x47, 0x65, 0xe5, 0xa1, 0xcb, 0x1f, 0x4c, 0xa1, 0x0c, 0xa4, 0x78, + 0x25, 0xae, 0x59, 0x76, 0x1a, 0x01, 0xf0, 0xa1, 0xee, 0x5e, 0x68, 0x31, 0xa0, 0xb8, 0xbd, 0xec, 0x5a, 0x7a, 0x39, + 0x57, 0x0b, 0xff, 0x3a, 0x13, 0x33, 0x9e, 0x33, 0xd0, 0xd4, 0x34, 0xfe, 0x53, 0x38, 0x65, 0xea, 0x38, 0x82, 0xa8, + 0x61, 0x25, 0x7d, 0x9d, 0xbc, 0xaa, 0xd3, 0xd7, 0xf9, 0xfe, 0x8b, 0x89, 0x65, 0x7f, 0xf5, 0x43, 0x8c, 0x89, 0x6f, + 0xec, 0x09, 0x47, 0xca, 0x05, 0x53, 0x6c, 0xc4, 0xfb, 0x6a, 0x25, 0x1d, 0xb3, 0xad, 0xa6, 0x2b, 0x32, 0x7d, 0x6c, + 0x70, 0x11, 0xc5, 0x31, 0x68, 0x75, 0x99, 0x48, 0x12, 0x47, 0x50, 0x11, 0xde, 0x2d, 0x45, 0xd3, 0xf9, 0xfe, 0x8b, + 0xb3, 0xbb, 0xa4, 0x13, 0xd4, 0xbb, 0x02, 0xca, 0x02, 0x9a, 0xc6, 0x2c, 0x03, 0x33, 0xd2, 0xd9, 0x2d, 0x23, 0x63, + 0x4f, 0x45, 0x9a, 0xb2, 0x91, 0x64, 0x31, 0x58, 0x29, 0x9c, 0xca, 0x60, 0x2a, 0x72, 0x59, 0x16, 0x56, 0xd0, 0x73, + 0x07, 0x7a, 0x1e, 0x8c, 0xa2, 0x24, 0xf1, 0xb5, 0x45, 0x32, 0x13, 0x57, 0x6c, 0x0b, 0xd4, 0xdd, 0x1a, 0xc8, 0xe5, + 0x30, 0xcc, 0x19, 0x86, 0x05, 0xf9, 0x3c, 0xe1, 0x23, 0x56, 0x0a, 0xae, 0xb3, 0x80, 0xa7, 0x31, 0xbb, 0x01, 0x3e, + 0x82, 0x7b, 0xbd, 0x5e, 0x8b, 0xb4, 0x71, 0xa1, 0x11, 0xbe, 0xdc, 0x40, 0xec, 0x1d, 0x22, 0x13, 0x88, 0x8c, 0xf6, + 0x96, 0xdb, 0xf8, 0x01, 0xc3, 0x8e, 0x9c, 0xe4, 0xd6, 0xb2, 0xd2, 0xbc, 0x19, 0x93, 0x98, 0x25, 0x4c, 0x32, 0xcb, + 0xcb, 0x41, 0x7f, 0xd6, 0x47, 0xf7, 0x5d, 0x89, 0xbf, 0x92, 0x9c, 0xec, 0x29, 0xb3, 0x7b, 0x9e, 0x97, 0x96, 0x7a, + 0xb5, 0x3d, 0x15, 0xb6, 0xfb, 0x52, 0x6f, 0x4f, 0x24, 0x65, 0x34, 0x9a, 0x6a, 0x13, 0xdd, 0xdf, 0x58, 0x52, 0x35, + 0x86, 0xe1, 0xeb, 0xe5, 0x21, 0xfa, 0x60, 0xc1, 0xdc, 0x86, 0x82, 0x33, 0xc3, 0x14, 0x18, 0x58, 0x7d, 0x7a, 0xdb, + 0x4e, 0xa3, 0x24, 0xb9, 0x8c, 0x46, 0x1f, 0xeb, 0xd4, 0x5f, 0x91, 0x01, 0x5d, 0xe7, 0xc6, 0x4e, 0x95, 0xc3, 0xb2, + 0xdc, 0x75, 0x5b, 0x2e, 0x5d, 0x3b, 0x28, 0xfe, 0x5e, 0xab, 0x22, 0xfb, 0xfa, 0x46, 0xef, 0xa4, 0x76, 0x05, 0x11, + 0x37, 0x2b, 0xf3, 0x81, 0x0b, 0x7c, 0x92, 0xe2, 0x2c, 0x3f, 0x30, 0x74, 0x07, 0xb6, 0x46, 0xb1, 0x06, 0x88, 0xc4, + 0xcb, 0x22, 0xe6, 0xf9, 0x6e, 0x0c, 0xfc, 0x21, 0x50, 0x3e, 0x77, 0x66, 0xb8, 0x2f, 0xa0, 0x25, 0x8f, 0x33, 0x2a, + 0x73, 0x09, 0x99, 0xd1, 0x26, 0x2c, 0xa3, 0xf9, 0x1b, 0x68, 0x2e, 0x8a, 0xde, 0xdf, 0xea, 0x2a, 0xd0, 0xc9, 0x00, + 0x8a, 0xbc, 0xeb, 0x2a, 0x13, 0x35, 0x0a, 0x30, 0x3c, 0x95, 0x2b, 0x91, 0x9b, 0xd6, 0x8c, 0x47, 0xa3, 0xae, 0x6b, + 0xfb, 0xdb, 0xb0, 0x5c, 0x41, 0x7d, 0xdf, 0xcf, 0xc1, 0x7e, 0xb3, 0x7a, 0x7d, 0xb5, 0x88, 0x7c, 0x63, 0x11, 0x79, + 0xe0, 0x18, 0x59, 0xb8, 0xa2, 0x65, 0xa7, 0x7b, 0xf8, 0x57, 0xec, 0x36, 0x02, 0x65, 0x35, 0x00, 0xfe, 0x8c, 0x4b, + 0x76, 0x9b, 0x50, 0x49, 0x84, 0x31, 0x70, 0x0c, 0xa5, 0x01, 0xc3, 0xa8, 0xba, 0xa4, 0x58, 0x1f, 0x8d, 0x9a, 0xb1, + 0x9b, 0x12, 0x81, 0xd7, 0x34, 0xfb, 0xa2, 0x30, 0x38, 0x62, 0xd8, 0xec, 0x4d, 0x4d, 0x25, 0x76, 0xb0, 0x42, 0x52, + 0x6a, 0xd4, 0x60, 0xad, 0xf5, 0xac, 0xe3, 0xa6, 0x1c, 0x17, 0x0e, 0x6a, 0x85, 0x9a, 0x9a, 0x3e, 0x69, 0x15, 0xab, + 0x14, 0x93, 0xa9, 0xd5, 0x48, 0x45, 0xb5, 0x6e, 0x4a, 0x91, 0xf5, 0x46, 0xa0, 0xfe, 0xb2, 0x66, 0x12, 0x86, 0x4e, + 0xb3, 0x22, 0x04, 0x96, 0x2a, 0xb6, 0xa1, 0x7b, 0x1b, 0xcd, 0xd4, 0xc6, 0x71, 0x10, 0x2e, 0x5c, 0x84, 0x3b, 0x98, + 0x4d, 0x35, 0xe7, 0x4a, 0x87, 0x74, 0x5a, 0xef, 0xeb, 0x33, 0x22, 0xf4, 0x3e, 0x6c, 0x20, 0x71, 0x5d, 0xf1, 0x54, + 0x24, 0x08, 0x06, 0x6c, 0x0e, 0xca, 0x9d, 0x2b, 0x1f, 0x7c, 0x80, 0x9d, 0xaf, 0x56, 0x1b, 0x44, 0xb7, 0x55, 0xff, + 0xc4, 0x41, 0x65, 0x14, 0xae, 0x56, 0xd7, 0x12, 0xfb, 0x46, 0xf3, 0x25, 0x0c, 0xf7, 0x2d, 0xc7, 0x3d, 0x79, 0x05, + 0xad, 0x94, 0x22, 0x5a, 0x95, 0x94, 0x26, 0x43, 0x9d, 0x66, 0xeb, 0xfb, 0x24, 0x1d, 0xb6, 0x7d, 0xba, 0xc1, 0xbd, + 0x54, 0xa1, 0x11, 0xd3, 0xd5, 0x92, 0x4f, 0xcd, 0xd0, 0x1c, 0x63, 0x1c, 0xe6, 0xca, 0x8a, 0xd9, 0xdb, 0x66, 0x58, + 0x1e, 0x1c, 0xe4, 0xce, 0x40, 0xe7, 0x25, 0x9b, 0xf8, 0xc9, 0x07, 0x91, 0x9c, 0xdf, 0xa6, 0x4a, 0x77, 0xf9, 0xc9, + 0x0a, 0xa1, 0x0d, 0xb3, 0xb4, 0xd5, 0x05, 0x6b, 0x3c, 0xba, 0x8e, 0xb8, 0xf4, 0xca, 0x51, 0xb4, 0x35, 0xee, 0x33, + 0xbc, 0x34, 0xaa, 0x46, 0x90, 0x31, 0x50, 0x1e, 0x81, 0x27, 0x58, 0x15, 0x5a, 0xd3, 0xfd, 0x68, 0xca, 0xc0, 0x11, + 0x6c, 0xb5, 0x88, 0xd2, 0x2e, 0xdc, 0x33, 0x52, 0xc4, 0x0c, 0xbc, 0x1d, 0xf6, 0x62, 0xbd, 0x7b, 0xcd, 0x0e, 0x98, + 0xb3, 0x6c, 0x2c, 0xb2, 0x99, 0xad, 0x2b, 0xd6, 0x9e, 0x0d, 0x67, 0xe4, 0x63, 0x7f, 0xeb, 0xd8, 0x46, 0xfd, 0xef, + 0xae, 0x19, 0xdd, 0x95, 0xb9, 0x5e, 0x13, 0xa5, 0xa5, 0xf4, 0xd5, 0xfe, 0x40, 0x4b, 0x99, 0xb9, 0x6b, 0xde, 0x1b, + 0x67, 0x6a, 0x57, 0x3b, 0x4c, 0xf6, 0xda, 0xdd, 0xd2, 0xe6, 0xb3, 0xd4, 0xd0, 0xd5, 0x8e, 0x0d, 0x23, 0x52, 0xc5, + 0x22, 0x89, 0x0d, 0xb0, 0x1c, 0x13, 0x66, 0xe8, 0xe8, 0x9a, 0x27, 0x49, 0x55, 0xfa, 0x6b, 0xf8, 0x7a, 0x6e, 0xf8, + 0x7a, 0x6a, 0xf9, 0x3a, 0x70, 0x0a, 0xe0, 0xeb, 0x7a, 0xb8, 0xaa, 0x7b, 0xba, 0x71, 0x3a, 0x53, 0xcd, 0xd1, 0x73, + 0x65, 0x47, 0xc3, 0x7c, 0x0b, 0x0b, 0x01, 0x2e, 0x35, 0xaf, 0x8f, 0xbe, 0x71, 0xc2, 0x80, 0x01, 0xa8, 0x5d, 0x98, + 0xcc, 0x75, 0x51, 0x7c, 0xf4, 0x31, 0xc9, 0x0b, 0x56, 0x52, 0xf6, 0xc9, 0x0b, 0x70, 0xd2, 0x39, 0xcb, 0x01, 0x21, + 0xa6, 0x8a, 0x7f, 0x95, 0x12, 0x65, 0x57, 0xc7, 0xcd, 0xea, 0x72, 0xbb, 0x3a, 0xe0, 0xf4, 0xd5, 0xea, 0xe2, 0xbb, + 0x79, 0xbd, 0x5a, 0x1e, 0x2f, 0x97, 0x57, 0xed, 0xf7, 0x6a, 0xe5, 0xaf, 0x95, 0x80, 0xff, 0xde, 0x98, 0x28, 0x59, + 0x39, 0x3a, 0xf0, 0x00, 0x17, 0x33, 0x50, 0x50, 0xe8, 0x45, 0x97, 0x22, 0xee, 0xd5, 0xa7, 0x1c, 0x3c, 0xca, 0x4d, + 0xaf, 0xfb, 0x9f, 0x8a, 0xd9, 0x1c, 0xb4, 0xb1, 0x35, 0x92, 0x9e, 0x30, 0x33, 0x61, 0x55, 0x5f, 0x6c, 0x29, 0xab, + 0xf5, 0x51, 0xe7, 0xb1, 0x46, 0x4d, 0xa5, 0xbd, 0xbc, 0xd7, 0x2a, 0x16, 0x65, 0x51, 0xc9, 0x38, 0xb6, 0x39, 0x55, + 0x4e, 0xd7, 0x5d, 0x32, 0xb6, 0xe2, 0xad, 0xcf, 0x35, 0x1f, 0xe6, 0xc0, 0xeb, 0x1c, 0xf6, 0x63, 0xc9, 0xdd, 0xdd, + 0xff, 0xa2, 0x42, 0xce, 0xb2, 0x58, 0x43, 0xdf, 0xb2, 0x28, 0x4e, 0xb4, 0x91, 0x4d, 0x4e, 0x76, 0x5b, 0xc3, 0x55, + 0x9d, 0x31, 0x16, 0x07, 0x43, 0x72, 0xb2, 0xa9, 0x3a, 0xd2, 0xe5, 0x4c, 0xc4, 0x2c, 0x44, 0x62, 0xce, 0x52, 0x54, + 0x80, 0x57, 0xd5, 0xec, 0xfd, 0x48, 0xfa, 0xcb, 0x77, 0x75, 0xf7, 0x6a, 0x78, 0x52, 0x80, 0xf7, 0xeb, 0x8b, 0x4d, + 0xc7, 0xeb, 0xb7, 0x2c, 0xcb, 0x95, 0x22, 0x5a, 0xea, 0xb4, 0x5f, 0x54, 0x62, 0xe9, 0x8b, 0x70, 0x67, 0xfb, 0xca, + 0x04, 0x41, 0xed, 0xe0, 0x71, 0x70, 0x84, 0xb0, 0x72, 0x0b, 0x7f, 0x65, 0x0e, 0xfc, 0x73, 0xeb, 0x16, 0x7e, 0x41, + 0x9f, 0xd7, 0xbd, 0xc2, 0xb1, 0xa4, 0x2f, 0xfa, 0x2f, 0xac, 0xc5, 0x2c, 0x12, 0x3e, 0xba, 0xf5, 0x51, 0xc2, 0x65, + 0x13, 0x42, 0x6f, 0x88, 0x2c, 0x75, 0x05, 0xb8, 0x14, 0x95, 0x3b, 0xbb, 0xb0, 0xb6, 0x1e, 0x91, 0x92, 0xa2, 0xfd, + 0x84, 0xcb, 0x7d, 0x44, 0x66, 0xf4, 0x02, 0x7e, 0xec, 0x2f, 0xfd, 0xd7, 0x91, 0x9c, 0x06, 0x59, 0x94, 0xc6, 0x62, + 0xe6, 0xe3, 0x06, 0x42, 0x38, 0xc8, 0x95, 0xbd, 0xf1, 0x39, 0x2e, 0xf6, 0x2f, 0xc8, 0x8d, 0xa4, 0xa8, 0x8f, 0x1a, + 0x33, 0xf2, 0x52, 0xd2, 0x8b, 0xe3, 0xfd, 0xe5, 0x8d, 0x2c, 0x7a, 0x17, 0xe4, 0xa6, 0xf4, 0xd8, 0x93, 0xaf, 0xa9, + 0x8f, 0x69, 0xef, 0xc6, 0x40, 0x73, 0x2a, 0x66, 0xda, 0x73, 0x8f, 0x30, 0xf9, 0x00, 0x71, 0x95, 0xac, 0xe2, 0x36, + 0x26, 0xb4, 0xb2, 0x47, 0x91, 0x50, 0x2e, 0x02, 0x74, 0x70, 0xe0, 0x94, 0x95, 0xaa, 0x02, 0x39, 0x91, 0xb4, 0x66, + 0x90, 0x93, 0x37, 0x2a, 0x42, 0x73, 0x22, 0xfd, 0x0c, 0xdb, 0x61, 0x7c, 0xeb, 0x87, 0x36, 0x47, 0x33, 0x1b, 0x68, + 0x0f, 0x43, 0xc0, 0x25, 0xcb, 0x22, 0x29, 0xb2, 0x21, 0x76, 0xd5, 0x0f, 0xf2, 0x37, 0x7a, 0x31, 0xf0, 0xfe, 0xd3, + 0x3f, 0xfd, 0x38, 0xfe, 0x31, 0x1b, 0x5e, 0x90, 0xb7, 0xf4, 0xf0, 0xd8, 0xef, 0x87, 0xfe, 0x5e, 0xb3, 0xb9, 0xfa, + 0xf1, 0x70, 0xf0, 0x8f, 0xa8, 0xf9, 0xcb, 0x49, 0xf3, 0x87, 0x21, 0x5e, 0xf9, 0x3f, 0x1e, 0xf6, 0x07, 0xe6, 0x69, + 0xf0, 0x8f, 0xde, 0x8f, 0xf9, 0xf0, 0xcf, 0xba, 0x70, 0x1f, 0xe3, 0xc3, 0x09, 0x59, 0x48, 0x7a, 0xd8, 0x6c, 0xf6, + 0x0e, 0x27, 0x64, 0x2e, 0xe9, 0x21, 0xfc, 0x7f, 0x49, 0xdf, 0xb1, 0xc9, 0x8b, 0x9b, 0xb9, 0x7f, 0xd1, 0x5b, 0xed, + 0x2f, 0xff, 0x56, 0xc0, 0xa8, 0x83, 0x7f, 0xfc, 0xf8, 0x63, 0x8e, 0x1e, 0xf4, 0xe8, 0xe1, 0xb0, 0x81, 0x7d, 0x28, + 0xfd, 0x33, 0x55, 0xff, 0xfa, 0xfd, 0x70, 0xf0, 0x0f, 0x03, 0x05, 0x7a, 0xf0, 0xe3, 0xc5, 0x71, 0x8f, 0x0e, 0x57, + 0x3e, 0x5a, 0x3d, 0xc0, 0x2b, 0x8c, 0x57, 0xfb, 0xf8, 0x82, 0xa0, 0x09, 0xc2, 0x64, 0x22, 0xe9, 0xe1, 0x83, 0xc3, + 0x09, 0xb9, 0x92, 0xf4, 0x10, 0x1d, 0x4e, 0xc8, 0x0b, 0x49, 0x0f, 0xff, 0xe1, 0xf7, 0x43, 0xed, 0x61, 0x5b, 0x29, + 0xf7, 0xc6, 0x0a, 0x82, 0x1b, 0x51, 0xc6, 0xa2, 0x95, 0xe4, 0x32, 0x61, 0x78, 0xff, 0x90, 0x93, 0x33, 0x85, 0x26, + 0x5f, 0x82, 0x13, 0x06, 0x6c, 0x3b, 0x7f, 0x79, 0x0e, 0x9b, 0x0d, 0x34, 0xb3, 0x1f, 0x66, 0x44, 0xfb, 0x01, 0xf2, + 0x50, 0x92, 0xab, 0x28, 0x59, 0xb0, 0x3c, 0x64, 0x05, 0x26, 0x23, 0x7a, 0x26, 0xfd, 0x36, 0x26, 0xef, 0x24, 0xfc, + 0xe8, 0x60, 0x72, 0x66, 0x02, 0x98, 0x70, 0x90, 0x35, 0x51, 0xa5, 0x42, 0x6b, 0x2c, 0x08, 0x93, 0xf9, 0x96, 0x4a, + 0x39, 0x05, 0xef, 0x02, 0x26, 0xe3, 0x5a, 0xb8, 0x93, 0x5c, 0x53, 0x4b, 0x12, 0xef, 0x33, 0xc6, 0xbe, 0x8b, 0x92, + 0x8f, 0x2c, 0xf3, 0x6f, 0x48, 0xbb, 0xf3, 0x39, 0x51, 0x2e, 0xe8, 0xbd, 0x36, 0xee, 0x96, 0xb1, 0xaa, 0x53, 0xa9, + 0x63, 0x04, 0x20, 0x64, 0xeb, 0xbe, 0x18, 0xd8, 0xf1, 0xbd, 0x6c, 0xc3, 0x61, 0x95, 0x45, 0xd7, 0x08, 0xd7, 0xe3, + 0xa2, 0x3c, 0xbd, 0x8a, 0x12, 0x1e, 0x7b, 0x92, 0xcd, 0xe6, 0x49, 0x24, 0x99, 0x67, 0xd6, 0xeb, 0x45, 0x30, 0x10, + 0x2a, 0x55, 0x86, 0xd8, 0x31, 0x38, 0x63, 0x1b, 0x70, 0x82, 0xb3, 0xe2, 0x43, 0x74, 0xca, 0xa8, 0x1d, 0xaf, 0xab, + 0xe0, 0xd7, 0x7a, 0x7c, 0xaf, 0xd9, 0x06, 0x47, 0xd8, 0x50, 0x89, 0xe7, 0x9c, 0xa4, 0x14, 0x84, 0x68, 0xa7, 0x8f, + 0x8e, 0xf3, 0xab, 0x49, 0x0f, 0x41, 0x6c, 0x46, 0xd0, 0xb7, 0xca, 0x2f, 0x04, 0x0d, 0xa6, 0xb4, 0xd5, 0x9d, 0x1e, + 0xb3, 0xee, 0xb4, 0xd1, 0xb0, 0x3a, 0x74, 0x42, 0xb3, 0xc1, 0x54, 0x77, 0x8f, 0x48, 0x4c, 0x16, 0xb4, 0xd9, 0x26, + 0x13, 0xda, 0x52, 0x5d, 0xba, 0x93, 0xe3, 0xc4, 0x4c, 0x73, 0x70, 0xe0, 0x8b, 0x20, 0x89, 0x72, 0xf9, 0x25, 0x18, + 0xfb, 0x74, 0x42, 0x62, 0x2a, 0x02, 0x76, 0xc3, 0x46, 0x7e, 0x82, 0x49, 0x6c, 0x38, 0x0d, 0xee, 0xe2, 0x09, 0x75, + 0x9a, 0x81, 0x11, 0x41, 0xdf, 0xf6, 0xe3, 0x41, 0x7b, 0x48, 0x29, 0x45, 0x7b, 0xcd, 0x26, 0xea, 0x0b, 0xba, 0x90, + 0x21, 0x94, 0x38, 0xaa, 0x32, 0x9d, 0x43, 0x51, 0xc7, 0x29, 0xf2, 0x5f, 0xc8, 0x40, 0xb2, 0x5c, 0xfa, 0x50, 0x0c, + 0xe6, 0x7f, 0x6e, 0x09, 0x1b, 0x1d, 0x1f, 0xa2, 0x06, 0x94, 0x2a, 0xe2, 0xc4, 0x44, 0xd0, 0x4b, 0x1c, 0xc6, 0x83, + 0xa3, 0xa1, 0xcb, 0xff, 0x55, 0x21, 0x4c, 0x7e, 0xd9, 0x8f, 0x07, 0x2d, 0x35, 0x79, 0x0f, 0xf5, 0x7d, 0x41, 0x73, + 0xad, 0xa0, 0xf5, 0xf3, 0xf0, 0xad, 0x5a, 0x2a, 0x0e, 0x0d, 0x70, 0x66, 0xde, 0x05, 0x6d, 0x76, 0x42, 0x7f, 0xe1, + 0x2e, 0xa2, 0x09, 0x93, 0x19, 0x2c, 0x90, 0x88, 0x42, 0x7b, 0x22, 0x28, 0xcc, 0x58, 0x75, 0xbb, 0x0c, 0xcd, 0xf3, + 0x03, 0xf4, 0xa0, 0x7f, 0x25, 0xc3, 0x89, 0xd4, 0xd3, 0x5f, 0xc9, 0xd5, 0x0a, 0xfe, 0x9f, 0xc8, 0xbe, 0xa0, 0x97, + 0xaa, 0x68, 0x61, 0x8a, 0xe6, 0x50, 0xf4, 0x36, 0x04, 0x50, 0x49, 0x5e, 0x2a, 0x59, 0x7a, 0x4f, 0xae, 0xa8, 0x82, + 0xfd, 0xe0, 0x20, 0x1b, 0x4c, 0x1b, 0xed, 0x21, 0xf8, 0xf7, 0x33, 0x99, 0x7f, 0xc7, 0xe5, 0xd4, 0x47, 0x87, 0x3d, + 0x84, 0xfb, 0xc8, 0x83, 0xad, 0xed, 0xa6, 0x0d, 0xaa, 0x31, 0x9c, 0x34, 0x5e, 0xca, 0x70, 0xd1, 0xa3, 0xad, 0xbe, + 0xcf, 0x8d, 0x3f, 0x0f, 0x93, 0xc4, 0x30, 0xce, 0x16, 0x59, 0xe0, 0x86, 0x94, 0x0d, 0xfb, 0xbc, 0xc0, 0x8d, 0x59, + 0xe3, 0x0a, 0x87, 0x49, 0x63, 0xd6, 0xf0, 0x17, 0x94, 0xd2, 0x66, 0xa7, 0xec, 0x66, 0xa5, 0xdf, 0x14, 0x87, 0x57, + 0xd6, 0xd9, 0x39, 0x50, 0xc7, 0x21, 0x6d, 0xf8, 0xd9, 0x80, 0x0d, 0x57, 0x2b, 0x74, 0xdc, 0xef, 0x21, 0xdc, 0xf0, + 0x2d, 0xa1, 0x1d, 0x5a, 0x4a, 0xc3, 0x98, 0xf0, 0x61, 0x61, 0x42, 0x49, 0xef, 0x6b, 0x61, 0xa3, 0x65, 0x75, 0xd8, + 0x1d, 0x1e, 0xc0, 0x8a, 0xd2, 0x8e, 0xd1, 0xfa, 0xea, 0x1c, 0x96, 0x69, 0x89, 0x39, 0xa5, 0x2d, 0x22, 0xa8, 0xf5, + 0x5d, 0x4f, 0xa9, 0xac, 0x08, 0x3e, 0xa1, 0x55, 0x73, 0x32, 0x88, 0x48, 0x3c, 0xa4, 0xaf, 0xb5, 0x3d, 0xd2, 0xb5, + 0x7e, 0x71, 0x96, 0xd0, 0xf7, 0x6b, 0xd1, 0xdb, 0x08, 0x62, 0x2b, 0xd7, 0xc1, 0x68, 0x91, 0x65, 0x2c, 0x95, 0x6f, + 0x44, 0x6c, 0xd4, 0x34, 0x96, 0x80, 0xa5, 0x04, 0x61, 0x59, 0x02, 0x3a, 0x5a, 0xc7, 0x9e, 0x8c, 0xc5, 0x46, 0xf5, + 0x84, 0x2e, 0xb4, 0xfa, 0xa4, 0x82, 0xb5, 0xdd, 0x89, 0xb1, 0x8b, 0x7d, 0x4c, 0x16, 0x26, 0x8a, 0xeb, 0x07, 0x41, + 0x30, 0x09, 0x46, 0x50, 0x0d, 0x13, 0xe4, 0xb8, 0x50, 0xe7, 0xc8, 0xcf, 0xe9, 0x75, 0x90, 0xb2, 0x1b, 0x35, 0xab, + 0x8f, 0x2b, 0xc9, 0x6c, 0x8f, 0xd7, 0xf1, 0xb4, 0xab, 0xd8, 0x4d, 0x1e, 0xa4, 0x22, 0x66, 0x80, 0x1e, 0x88, 0xdb, + 0x9b, 0xa2, 0x69, 0x94, 0xbb, 0xf1, 0xa9, 0x0a, 0xbe, 0x81, 0xeb, 0xbc, 0x9e, 0x80, 0xc7, 0x57, 0xe9, 0x5a, 0x65, + 0x63, 0xed, 0x06, 0xc7, 0x98, 0x8f, 0xfd, 0x49, 0x00, 0x71, 0x3d, 0x45, 0x42, 0x12, 0x4c, 0xb9, 0x89, 0x4b, 0x54, + 0xb3, 0x72, 0xcc, 0x2b, 0x1a, 0x0f, 0x44, 0xa3, 0xa1, 0xbc, 0xd0, 0x0b, 0x4d, 0x12, 0x13, 0x4c, 0xae, 0xca, 0xb3, + 0x65, 0xdb, 0xbd, 0x95, 0xb4, 0x3e, 0x95, 0x7f, 0x55, 0x77, 0xe7, 0x36, 0xa4, 0xc4, 0xca, 0x53, 0x28, 0xfd, 0x19, + 0x26, 0xcf, 0xe8, 0xa1, 0x3f, 0x08, 0xfa, 0x7f, 0x19, 0xe2, 0xbe, 0x1f, 0xfc, 0x19, 0x1f, 0x6a, 0xce, 0x71, 0x85, + 0xbb, 0x89, 0x9e, 0x63, 0xa9, 0xe2, 0x97, 0x6d, 0xa2, 0x3c, 0x89, 0x61, 0x4a, 0xd2, 0x68, 0xc6, 0xc2, 0x67, 0x70, + 0xc8, 0x2d, 0xe1, 0xbc, 0x95, 0x04, 0x28, 0x29, 0x7c, 0x66, 0x78, 0x49, 0x80, 0xfa, 0xaf, 0x64, 0xf9, 0xd4, 0x47, + 0xfd, 0xe7, 0xd5, 0xd3, 0x5f, 0x50, 0xff, 0x17, 0x19, 0xfe, 0x5c, 0x18, 0x6f, 0x77, 0x6d, 0x8e, 0xc7, 0x76, 0x8e, + 0x42, 0x6f, 0x8d, 0x83, 0xbb, 0x05, 0xde, 0x74, 0x74, 0x4c, 0x70, 0xc1, 0xc7, 0x25, 0x33, 0xca, 0x03, 0x19, 0x4d, + 0x00, 0xa9, 0xce, 0x1e, 0xe4, 0x6e, 0x5c, 0xbf, 0x5a, 0x31, 0x90, 0x8a, 0xa5, 0x57, 0x40, 0xe6, 0xa4, 0xd7, 0xc2, + 0xcb, 0x5a, 0x5b, 0xa5, 0x33, 0xd5, 0xe3, 0xe8, 0x25, 0x9f, 0xbe, 0xa2, 0xad, 0xee, 0xd5, 0xf1, 0xa4, 0x7b, 0xd5, + 0x68, 0xe0, 0xdc, 0x92, 0xd6, 0x62, 0x70, 0x35, 0x24, 0x5f, 0x83, 0x53, 0xcf, 0xa5, 0x25, 0x52, 0x5b, 0x5e, 0xc7, + 0x2c, 0xaf, 0xd1, 0x48, 0x0b, 0xdc, 0x75, 0xba, 0x4e, 0x74, 0xd7, 0xa2, 0xd0, 0x38, 0x59, 0x27, 0xb5, 0xa7, 0x58, + 0x95, 0x40, 0x32, 0x14, 0xa5, 0xf4, 0x46, 0xe2, 0xad, 0xa3, 0xc2, 0x98, 0xd0, 0x5d, 0x9d, 0x59, 0x60, 0x9f, 0x5a, + 0x4a, 0xf8, 0x80, 0x05, 0xe8, 0x5a, 0x7a, 0x82, 0x67, 0x64, 0xd1, 0x68, 0x2b, 0x32, 0x6f, 0xb6, 0xbb, 0xf5, 0xb1, + 0x9e, 0x54, 0x63, 0x91, 0x45, 0x83, 0xce, 0x4a, 0x2c, 0x15, 0x69, 0xa3, 0x51, 0xd4, 0x83, 0x9d, 0xf6, 0xe4, 0xd6, + 0x02, 0x10, 0x37, 0xeb, 0x49, 0x19, 0x56, 0xc2, 0x56, 0x32, 0x95, 0x07, 0x3c, 0x4d, 0x59, 0x06, 0x52, 0x94, 0x4a, + 0xc2, 0x8b, 0xa2, 0x92, 0xec, 0x20, 0x46, 0x09, 0xa3, 0x19, 0x70, 0x1e, 0x65, 0x77, 0x91, 0x94, 0x08, 0x32, 0x55, + 0x7c, 0x83, 0x52, 0x7a, 0x66, 0xd3, 0x59, 0xa4, 0xe2, 0x41, 0x09, 0xe5, 0x8e, 0x4c, 0xca, 0x29, 0x0b, 0xce, 0xf7, + 0x4f, 0xc5, 0x9d, 0x36, 0xd9, 0x80, 0x0f, 0x43, 0xd5, 0x2c, 0x31, 0x9c, 0x2b, 0xa2, 0x1f, 0x7c, 0x89, 0xcb, 0xe8, + 0x48, 0xa0, 0x18, 0xe0, 0x73, 0x9e, 0x31, 0xa5, 0x83, 0xef, 0x5b, 0xbb, 0x2f, 0xa9, 0x2b, 0x90, 0x89, 0xeb, 0xbd, + 0x01, 0x44, 0x46, 0xe0, 0xdc, 0x49, 0xe9, 0x46, 0xb3, 0xf3, 0xfd, 0x93, 0xb7, 0xdb, 0x6c, 0xe0, 0xd5, 0xca, 0x58, + 0xbf, 0x4a, 0xb7, 0x21, 0x51, 0x05, 0x69, 0x62, 0x7e, 0x84, 0x7e, 0xa2, 0x54, 0xa4, 0xc8, 0xcf, 0x80, 0x8a, 0xce, + 0xf7, 0x4f, 0xde, 0xfb, 0x99, 0xf2, 0x2d, 0x61, 0xe2, 0x2e, 0xdb, 0x17, 0xd4, 0x9f, 0x52, 0x86, 0xf5, 0xda, 0x4b, + 0xd6, 0x25, 0x1c, 0x01, 0x1e, 0x4e, 0x55, 0x25, 0x58, 0x10, 0x03, 0x3e, 0xa4, 0x89, 0xc1, 0x00, 0x4d, 0x30, 0x49, + 0x6a, 0x76, 0x19, 0x85, 0x0d, 0x50, 0x73, 0x9d, 0xc1, 0x4e, 0x04, 0x5a, 0xf5, 0xc3, 0x24, 0x51, 0xb3, 0xca, 0x42, + 0x0b, 0x8f, 0x67, 0x1b, 0x59, 0x69, 0x95, 0x39, 0xfa, 0x2d, 0xd8, 0x4e, 0xf6, 0xe1, 0x0d, 0xb5, 0x96, 0x84, 0x29, + 0x78, 0x6e, 0xd3, 0xc7, 0xce, 0xf7, 0x4f, 0x5e, 0x9b, 0x0c, 0xb2, 0x79, 0x64, 0xf9, 0xfd, 0x86, 0x89, 0x79, 0xf2, + 0x3a, 0xa8, 0x6a, 0x55, 0xe3, 0xf3, 0xfd, 0x93, 0x0f, 0xdb, 0x9a, 0x41, 0x79, 0xb1, 0xa8, 0x6c, 0x7c, 0x05, 0xdf, + 0x92, 0x25, 0xe1, 0xd2, 0x08, 0x87, 0x90, 0x17, 0x44, 0x09, 0xa4, 0x30, 0x2f, 0x4a, 0xd7, 0xc8, 0x73, 0x92, 0x52, + 0x15, 0x06, 0xaa, 0xef, 0x9a, 0x51, 0xf3, 0xb8, 0x48, 0xcf, 0x46, 0x62, 0xce, 0x76, 0xc4, 0x86, 0x6e, 0x70, 0xc0, + 0x67, 0x90, 0x3a, 0xa3, 0x40, 0xe7, 0x64, 0xaf, 0x85, 0xbb, 0x75, 0xf1, 0x95, 0x2a, 0x22, 0x15, 0x35, 0xd9, 0x42, + 0xa6, 0xb4, 0x45, 0x12, 0xda, 0x22, 0x11, 0xcd, 0x07, 0x2d, 0x2d, 0x20, 0xba, 0x51, 0x39, 0xae, 0x16, 0x33, 0x90, + 0x15, 0x66, 0x4e, 0xab, 0x16, 0xc0, 0x71, 0x37, 0x52, 0xbe, 0x47, 0x25, 0xd3, 0x63, 0x45, 0x16, 0x6f, 0x7c, 0x41, + 0x84, 0x1a, 0xf8, 0x8c, 0x5f, 0x26, 0x90, 0x58, 0x02, 0xab, 0x22, 0x12, 0x87, 0x65, 0xd3, 0xb6, 0x69, 0x1a, 0x05, + 0x6a, 0x9f, 0x04, 0x89, 0x02, 0xe0, 0xdc, 0x24, 0x32, 0x79, 0x38, 0xf9, 0x66, 0x97, 0xc7, 0x07, 0x07, 0xbe, 0xee, + 0xf4, 0xa5, 0xf4, 0x85, 0xad, 0xaf, 0x22, 0x77, 0xdf, 0x6a, 0x5e, 0x11, 0x63, 0x05, 0x7f, 0xa3, 0x91, 0x0c, 0x0b, + 0x08, 0x43, 0xfb, 0x51, 0x1d, 0x83, 0x16, 0x78, 0xa5, 0xeb, 0xd5, 0x97, 0xdf, 0x68, 0x94, 0x51, 0xda, 0x3a, 0xb6, + 0x6e, 0x48, 0x5a, 0x5c, 0xf9, 0x65, 0xea, 0x4f, 0x6b, 0x23, 0x5f, 0xca, 0x82, 0x80, 0xb9, 0x4b, 0xb3, 0xdc, 0x2e, + 0xc6, 0x39, 0x12, 0x1c, 0xda, 0x7d, 0x69, 0xb2, 0x16, 0x88, 0xca, 0xae, 0x32, 0x8d, 0x2c, 0x3b, 0xeb, 0xe0, 0xd0, + 0x36, 0x82, 0xa8, 0x14, 0x34, 0x6a, 0x14, 0x86, 0xbc, 0xdf, 0x6c, 0xe6, 0x5c, 0x92, 0x1c, 0x1b, 0x27, 0x97, 0x82, + 0x42, 0x21, 0xab, 0x53, 0x22, 0xe5, 0x25, 0x9d, 0xef, 0x26, 0xf9, 0x13, 0x87, 0xe4, 0x9f, 0x51, 0xe6, 0x90, 0xbf, + 0x76, 0x71, 0x04, 0xc2, 0x38, 0x17, 0x72, 0x5b, 0x75, 0x3a, 0xa7, 0xe0, 0x44, 0xab, 0x63, 0xb4, 0x16, 0x56, 0xdc, + 0xc1, 0x50, 0xdc, 0x13, 0xa2, 0xdc, 0x90, 0xc4, 0xc6, 0x80, 0xfd, 0x2a, 0xa8, 0x06, 0x53, 0x6f, 0xf3, 0xe9, 0xb9, + 0x1c, 0xf0, 0xe4, 0xc3, 0xdd, 0xf1, 0xd0, 0xd3, 0xf9, 0xe6, 0xc9, 0x75, 0x72, 0x3f, 0x61, 0xd5, 0xce, 0xc1, 0xad, + 0x67, 0x82, 0xc2, 0xfc, 0x65, 0x1c, 0xbb, 0xce, 0x7c, 0xd6, 0x0e, 0xa1, 0x95, 0x7f, 0x00, 0x6d, 0xbb, 0xad, 0x5a, + 0x30, 0x67, 0x58, 0xe0, 0x47, 0x3a, 0x03, 0x35, 0xca, 0x76, 0xb0, 0x8f, 0x13, 0xd5, 0x80, 0xa5, 0xf1, 0xf6, 0xea, + 0x67, 0x85, 0x21, 0x13, 0x0d, 0x1a, 0x5e, 0x02, 0xff, 0xd3, 0x24, 0x0f, 0x74, 0xa3, 0xe4, 0x02, 0x20, 0x68, 0xae, + 0xf0, 0x54, 0x21, 0x0c, 0xa1, 0xca, 0xfb, 0xfe, 0x72, 0x8f, 0xd2, 0x79, 0xe5, 0x7d, 0x7c, 0x57, 0xa5, 0x5e, 0x01, + 0x59, 0xe0, 0x10, 0xcc, 0xc7, 0xb2, 0x40, 0x87, 0x2f, 0xcf, 0x6c, 0x73, 0x65, 0x42, 0x06, 0x95, 0xc6, 0xed, 0x84, + 0x36, 0x95, 0x5b, 0x4e, 0xd7, 0x5b, 0x34, 0xac, 0xd5, 0xee, 0x43, 0xed, 0x1b, 0xa9, 0x60, 0x84, 0xe7, 0xf7, 0xaa, + 0xb5, 0x1d, 0xb7, 0xf8, 0xb8, 0x9e, 0xbf, 0xb2, 0xb6, 0x29, 0x01, 0x4f, 0x73, 0x96, 0xc9, 0x67, 0x6c, 0x2c, 0x32, + 0x88, 0x59, 0x94, 0x38, 0xc1, 0xc5, 0xbe, 0xe3, 0xb7, 0x53, 0xeb, 0x73, 0x02, 0x05, 0x6b, 0x0b, 0x54, 0xbf, 0x3e, + 0xaa, 0xa0, 0xf5, 0xf9, 0x7a, 0xaf, 0xf9, 0xc1, 0xc1, 0x87, 0x0a, 0x4d, 0x06, 0x4a, 0x05, 0x85, 0xc3, 0xb4, 0xb4, + 0x4a, 0x63, 0x22, 0xb9, 0xfb, 0x7e, 0xe9, 0x04, 0xb0, 0x0c, 0xc3, 0xe5, 0x3d, 0x2f, 0xa9, 0x2c, 0x26, 0xeb, 0x2c, + 0xde, 0x38, 0x27, 0xb8, 0x6b, 0xb8, 0x00, 0x87, 0x07, 0x53, 0x5b, 0x7b, 0x8b, 0xf2, 0x2a, 0x19, 0xb6, 0x84, 0xe1, + 0x14, 0x90, 0xe5, 0x2b, 0x33, 0xc4, 0xa1, 0xc0, 0xad, 0x66, 0xc9, 0x29, 0xe8, 0x95, 0x53, 0x92, 0x07, 0x53, 0x48, + 0x7f, 0xad, 0x1d, 0x59, 0x8c, 0x89, 0x4e, 0xcc, 0x71, 0x52, 0x09, 0x4e, 0x5e, 0x6e, 0x73, 0x29, 0x5b, 0xa2, 0x66, + 0x4a, 0xea, 0xa8, 0x16, 0xb8, 0xec, 0x10, 0x5c, 0xf9, 0xdc, 0x28, 0x6e, 0x36, 0x6e, 0x06, 0x0c, 0xf8, 0x99, 0xf4, + 0x75, 0x30, 0x0a, 0x64, 0x86, 0x08, 0x16, 0x7e, 0x6d, 0xea, 0xae, 0x50, 0xdd, 0x88, 0x41, 0xdc, 0xd4, 0x45, 0x93, + 0x50, 0x71, 0xbd, 0xd3, 0x8a, 0x97, 0x8e, 0x75, 0x06, 0xb5, 0xb4, 0x5c, 0xb0, 0x4a, 0x24, 0x71, 0x96, 0x3f, 0xd6, + 0x49, 0xd1, 0x65, 0x23, 0xc2, 0x14, 0x18, 0xef, 0xd5, 0x1e, 0xb0, 0x02, 0xfe, 0x5f, 0x9e, 0x48, 0x67, 0x47, 0xad, + 0x13, 0x5b, 0xcd, 0xe9, 0x48, 0xfd, 0x77, 0x90, 0xea, 0xb2, 0x7e, 0xe6, 0x5f, 0x2a, 0x59, 0xc8, 0x49, 0x5e, 0x63, + 0xec, 0xa9, 0x62, 0xec, 0x18, 0xf4, 0x34, 0x9b, 0xf8, 0xdd, 0x37, 0x19, 0x2f, 0xdc, 0x48, 0x39, 0x43, 0x62, 0x5f, + 0x97, 0xd1, 0x72, 0xe7, 0xf7, 0xda, 0x6e, 0x84, 0x9c, 0x42, 0x16, 0x10, 0x31, 0x9c, 0x3d, 0xc5, 0x24, 0x6f, 0x34, + 0xba, 0xf9, 0x31, 0xab, 0x9c, 0x24, 0x15, 0x8c, 0x1c, 0x02, 0xba, 0x40, 0xf0, 0x35, 0x19, 0x0a, 0x21, 0x7f, 0x9b, + 0x99, 0x9d, 0x83, 0xaf, 0xfd, 0xe4, 0x9d, 0xef, 0x72, 0x35, 0xb7, 0x6d, 0x19, 0x34, 0x85, 0xf5, 0xf8, 0x55, 0xc0, + 0xe5, 0xeb, 0xbb, 0x13, 0x3c, 0x00, 0xee, 0xbd, 0x36, 0x81, 0x54, 0x34, 0xdc, 0x95, 0x9a, 0x25, 0x94, 0xa7, 0xaf, + 0x8b, 0xab, 0xac, 0x44, 0x77, 0xb2, 0xae, 0xac, 0x8c, 0x59, 0x49, 0xf3, 0xa2, 0xc8, 0x59, 0x15, 0xde, 0x5f, 0x4b, + 0xbf, 0x54, 0xc2, 0x65, 0xd3, 0xdb, 0x7e, 0x3a, 0xa7, 0x92, 0x38, 0x84, 0xfa, 0xf5, 0xae, 0xd8, 0x47, 0x05, 0x26, + 0x9c, 0x6b, 0x23, 0x14, 0x7f, 0xde, 0x26, 0x14, 0x49, 0x6a, 0x8e, 0xbc, 0x12, 0x88, 0xed, 0x7b, 0x08, 0x44, 0xe3, + 0x66, 0xb7, 0x32, 0x11, 0xd4, 0x91, 0x9a, 0x4c, 0xac, 0x6f, 0x29, 0x4d, 0x09, 0x37, 0xbb, 0xd1, 0xeb, 0xac, 0x56, + 0x7c, 0xd0, 0x02, 0x37, 0x12, 0x42, 0xf0, 0xb3, 0xad, 0x7f, 0x3a, 0x9c, 0x58, 0xbb, 0x81, 0x7d, 0x5e, 0x9a, 0x2c, + 0x38, 0x80, 0x04, 0x67, 0x5f, 0x25, 0x65, 0x29, 0x9a, 0x36, 0x14, 0x64, 0x08, 0x9c, 0xf2, 0x32, 0xcc, 0x04, 0x10, + 0x2b, 0x59, 0x61, 0x0c, 0x48, 0x7f, 0x6b, 0xee, 0x9f, 0x35, 0x2f, 0x3f, 0xad, 0x89, 0xd6, 0xe4, 0x8a, 0x56, 0x1f, + 0x6a, 0xf9, 0x06, 0x06, 0x02, 0xa3, 0x1f, 0xee, 0x29, 0x13, 0xb4, 0x12, 0xe5, 0xd8, 0x95, 0x43, 0xa4, 0x05, 0x4e, + 0xb4, 0xbd, 0x0f, 0x3a, 0xc2, 0xbb, 0x45, 0x9a, 0x10, 0xe1, 0xd0, 0xf5, 0x4b, 0x2a, 0x6b, 0xac, 0x64, 0x4a, 0x8d, + 0xa5, 0x44, 0x22, 0x45, 0xa6, 0x92, 0xa6, 0x83, 0xd6, 0x10, 0x14, 0xd0, 0x6e, 0x72, 0x9c, 0x56, 0x26, 0x70, 0xd2, + 0x68, 0xe0, 0xc8, 0xce, 0x3a, 0x1d, 0xf0, 0x46, 0x32, 0x24, 0x8c, 0x24, 0xda, 0x30, 0x39, 0x3b, 0x38, 0xf0, 0xa3, + 0x6a, 0xde, 0x41, 0x32, 0xc4, 0x44, 0xac, 0x56, 0xbe, 0x02, 0x2b, 0xc2, 0xab, 0x55, 0xe4, 0x82, 0xa5, 0xaa, 0xa1, + 0xdb, 0xbc, 0x2f, 0xe9, 0x5c, 0x09, 0xc0, 0x39, 0x40, 0xd8, 0xa0, 0x7e, 0x64, 0xdc, 0x7b, 0x11, 0xb8, 0xa3, 0x1a, + 0xe9, 0x20, 0x69, 0xb4, 0x87, 0x0e, 0xe3, 0x1a, 0x24, 0x43, 0x1a, 0x15, 0xe2, 0xe0, 0x60, 0x2f, 0x37, 0x22, 0xf2, + 0x27, 0x10, 0x65, 0x3f, 0x29, 0xc9, 0xa2, 0x07, 0x74, 0x77, 0x63, 0xdd, 0x19, 0x50, 0x52, 0x94, 0xd9, 0x56, 0xdb, + 0xae, 0x96, 0x05, 0x51, 0x36, 0x22, 0x26, 0x18, 0xdc, 0x07, 0xcb, 0xbe, 0x24, 0xf3, 0x57, 0xb2, 0xcc, 0xb1, 0xfe, + 0x79, 0x6b, 0x66, 0x75, 0x10, 0x04, 0x51, 0x36, 0x51, 0xb1, 0x0c, 0x1b, 0x86, 0x55, 0xc4, 0x7f, 0x64, 0xc0, 0x74, + 0x26, 0x1e, 0x94, 0x73, 0x0d, 0xa9, 0x06, 0xdf, 0xaa, 0x36, 0xf6, 0x2e, 0xc9, 0x4f, 0x5b, 0xbd, 0x0c, 0x1a, 0x92, + 0xe7, 0xbf, 0x15, 0x92, 0x87, 0x06, 0x12, 0x4d, 0x1e, 0x6b, 0x38, 0xdb, 0x81, 0x8b, 0x9f, 0xe4, 0x1a, 0xce, 0x76, + 0xe3, 0xd6, 0x62, 0xea, 0x97, 0x5d, 0xf0, 0x39, 0xbc, 0x41, 0x03, 0x5a, 0x15, 0x38, 0x50, 0x3e, 0x5a, 0xd7, 0xbd, + 0x34, 0x2b, 0x05, 0x61, 0x2a, 0xa9, 0xcf, 0xeb, 0x07, 0xa0, 0xd2, 0x46, 0x1d, 0xc3, 0x97, 0x87, 0x73, 0xec, 0xb8, + 0x04, 0xea, 0xa9, 0x2b, 0x40, 0x4e, 0xc6, 0xdb, 0x3e, 0x3f, 0x38, 0x00, 0xdb, 0x00, 0x94, 0xb8, 0x60, 0x14, 0xcd, + 0xe5, 0x22, 0x03, 0x55, 0x2a, 0xb7, 0xbf, 0xa1, 0x18, 0x6e, 0x81, 0xa8, 0x32, 0xf8, 0x01, 0x05, 0xf3, 0x28, 0xcf, + 0xf9, 0x95, 0x2e, 0x33, 0xbf, 0x89, 0xa0, 0x96, 0x94, 0x73, 0xad, 0x13, 0xa6, 0xb8, 0x9b, 0x1a, 0x3a, 0xad, 0xa3, + 0xed, 0xc5, 0x15, 0x4b, 0xe5, 0x2b, 0x9e, 0x4b, 0x96, 0xc2, 0xf2, 0x2b, 0x8a, 0x83, 0x15, 0xe5, 0x18, 0x0e, 0x6c, + 0xad, 0x57, 0x14, 0xc7, 0x77, 0x76, 0x91, 0x75, 0x1d, 0x68, 0x1a, 0xa5, 0x71, 0xa2, 0x27, 0x71, 0xf3, 0x19, 0x6d, + 0x0e, 0x67, 0xd9, 0xd2, 0xcd, 0xa7, 0xa9, 0x94, 0x0d, 0xc5, 0xdd, 0x7d, 0x4e, 0xad, 0x24, 0xb0, 0xd2, 0xf3, 0x4e, + 0xad, 0x05, 0x22, 0xde, 0x3b, 0x36, 0xc1, 0x5d, 0x09, 0x91, 0x0e, 0x47, 0x0d, 0xea, 0x70, 0x5a, 0xba, 0xf9, 0x72, + 0xeb, 0x95, 0xb6, 0x6d, 0xc2, 0x41, 0xd1, 0xc9, 0xe3, 0xdd, 0x96, 0xd5, 0x6b, 0x2b, 0x39, 0xac, 0xb4, 0xe0, 0xf7, + 0x65, 0xcc, 0x78, 0x69, 0xc9, 0x0b, 0xdb, 0xa3, 0xb8, 0x2f, 0xe9, 0x73, 0xb8, 0x33, 0xf4, 0x52, 0xce, 0x92, 0xb5, + 0xab, 0x31, 0xdd, 0xfd, 0x52, 0xfb, 0xdf, 0x97, 0xfe, 0x7b, 0xf2, 0x06, 0x02, 0xbb, 0x5f, 0x55, 0xcd, 0x37, 0x03, + 0xba, 0x5f, 0x55, 0x08, 0xfa, 0x2a, 0xdc, 0x68, 0xe7, 0x04, 0x72, 0x3b, 0xc1, 0xd3, 0xa0, 0x85, 0xac, 0xb6, 0xf4, + 0xb3, 0x0e, 0x23, 0xe9, 0x4c, 0x4b, 0x75, 0x1e, 0x48, 0x95, 0xa7, 0x06, 0xf9, 0x72, 0x75, 0x0b, 0x89, 0x99, 0x0c, + 0x43, 0xad, 0xc3, 0xef, 0xda, 0x1e, 0x23, 0x63, 0x52, 0x6d, 0x67, 0x7c, 0x1d, 0x65, 0x72, 0x1f, 0x4e, 0x99, 0xd8, + 0xb8, 0x87, 0x37, 0xa5, 0xe0, 0x41, 0xbb, 0xdf, 0x14, 0x8e, 0xb1, 0x9d, 0xeb, 0x7b, 0x40, 0xee, 0xf8, 0x54, 0x58, + 0xdd, 0xad, 0x6e, 0x65, 0x7c, 0x0d, 0xf6, 0x3f, 0x26, 0x53, 0x7b, 0x39, 0x8e, 0x19, 0x0e, 0xcc, 0xc2, 0x65, 0x51, + 0x3a, 0x05, 0x84, 0x56, 0xde, 0x32, 0x4c, 0x44, 0xa1, 0x02, 0xdc, 0x3f, 0x90, 0x6f, 0x0c, 0x4b, 0x1c, 0x97, 0x1c, + 0xe7, 0xe4, 0xbe, 0x1c, 0x51, 0x83, 0x5f, 0xc6, 0xef, 0x81, 0x8e, 0x15, 0x85, 0x16, 0x96, 0x8a, 0x9e, 0x0b, 0xb3, + 0x90, 0x9d, 0x69, 0xa9, 0x84, 0x95, 0x29, 0x35, 0x6a, 0x9a, 0x2d, 0x79, 0x9c, 0xd6, 0xca, 0x96, 0xe5, 0xa9, 0xaa, + 0xcd, 0x8b, 0x77, 0x60, 0xb1, 0x0a, 0x2d, 0xae, 0x56, 0x7e, 0x1d, 0xd5, 0x94, 0x3b, 0x91, 0x0c, 0x4c, 0xb8, 0x93, + 0x51, 0x51, 0xd3, 0xac, 0x75, 0x1f, 0x1f, 0xaf, 0x27, 0x14, 0x59, 0xdd, 0xbc, 0x06, 0x87, 0xeb, 0x42, 0xd0, 0xdd, + 0x5d, 0x9f, 0x02, 0xd1, 0xab, 0x2b, 0x27, 0x72, 0x30, 0xf4, 0x73, 0x99, 0x2a, 0x5b, 0xe5, 0xb4, 0x6e, 0xc1, 0x2f, + 0xbe, 0x23, 0x59, 0xd6, 0xa0, 0x6e, 0xb3, 0xde, 0x49, 0x36, 0x7a, 0x2e, 0x76, 0x25, 0x1b, 0xd5, 0xb4, 0xdd, 0xbd, + 0x16, 0xbe, 0x3b, 0x2d, 0x55, 0xcf, 0xb5, 0xbd, 0xc9, 0x6f, 0x98, 0xae, 0x0d, 0xb4, 0xa9, 0xd1, 0x6c, 0xb9, 0xca, + 0x59, 0x51, 0x8c, 0xcb, 0xcb, 0x04, 0x2a, 0x77, 0x67, 0xac, 0xe9, 0xdf, 0x58, 0x8d, 0xea, 0x3a, 0xae, 0xff, 0x03, + 0x9d, 0x24, 0xe2, 0x32, 0x4a, 0xde, 0xc3, 0x7c, 0x55, 0xe5, 0xcb, 0xdb, 0x38, 0x8b, 0x24, 0x33, 0xdc, 0xa5, 0x82, + 0xe1, 0x07, 0x07, 0x86, 0x1f, 0x34, 0x9f, 0xae, 0xfa, 0x93, 0xe5, 0xab, 0x72, 0x80, 0x70, 0x5c, 0x58, 0x96, 0x71, + 0x2e, 0xb7, 0xcf, 0xb1, 0xce, 0xc2, 0xce, 0x4b, 0x16, 0x76, 0x2e, 0xfd, 0xf5, 0xa1, 0x7c, 0xff, 0x9b, 0xed, 0xa3, + 0x6c, 0x72, 0xb6, 0x6f, 0xaa, 0x83, 0xff, 0x4d, 0x78, 0x67, 0x1f, 0x87, 0xcb, 0x1d, 0x05, 0x47, 0x2a, 0x5d, 0x45, + 0x83, 0xfc, 0x0e, 0xd2, 0x0e, 0x24, 0xed, 0x39, 0x77, 0x0e, 0x2a, 0x39, 0x65, 0x13, 0x81, 0xfc, 0xd1, 0x22, 0x97, + 0x62, 0x66, 0xc6, 0xcc, 0xcd, 0x35, 0x23, 0x55, 0x09, 0xae, 0x68, 0x15, 0x6d, 0x0f, 0xeb, 0x17, 0xb9, 0x96, 0x1f, + 0x79, 0x1a, 0x87, 0x39, 0x31, 0x52, 0x24, 0x0f, 0xd3, 0x82, 0xda, 0x64, 0xe3, 0xcd, 0x3a, 0x32, 0xe6, 0x29, 0xcf, + 0xa7, 0x2c, 0xf3, 0x05, 0x5e, 0xee, 0x9a, 0x4c, 0x40, 0x40, 0x46, 0x4f, 0x46, 0xbe, 0xad, 0x2e, 0xfc, 0x05, 0x30, + 0x1a, 0xf8, 0x81, 0x66, 0x4c, 0x4e, 0x45, 0x0c, 0x89, 0x29, 0x41, 0x5c, 0xde, 0x68, 0x3a, 0x38, 0xd8, 0xf3, 0x91, + 0x72, 0x4b, 0xc0, 0xd5, 0x6f, 0xb7, 0x06, 0xf7, 0x97, 0x70, 0x3d, 0xa7, 0x9a, 0x9a, 0xe1, 0x25, 0x5b, 0xbf, 0xc9, + 0x22, 0x83, 0x8f, 0xec, 0x96, 0x64, 0xb8, 0x28, 0x42, 0x0d, 0x35, 0x1a, 0x73, 0x96, 0xc4, 0x88, 0x7c, 0x64, 0xb7, + 0x61, 0x79, 0x5b, 0x5c, 0x5d, 0x6e, 0x56, 0x1b, 0x88, 0xc4, 0x75, 0x8a, 0x48, 0x35, 0x49, 0xb8, 0x2c, 0x88, 0xc8, + 0xf8, 0x04, 0x88, 0xf3, 0x6f, 0xec, 0x36, 0xd4, 0xe3, 0x71, 0xe7, 0xb2, 0x1e, 0x5e, 0x5a, 0xd4, 0x07, 0x4e, 0xb1, + 0xbb, 0x0d, 0xc6, 0xa0, 0x18, 0xa8, 0xbe, 0x43, 0x5a, 0x6b, 0x57, 0x99, 0x87, 0x18, 0x17, 0xf7, 0x5d, 0x0a, 0xf9, + 0xc2, 0x15, 0x6d, 0xb2, 0x96, 0xfa, 0xba, 0xd6, 0x89, 0x41, 0x87, 0x2a, 0xd7, 0xe3, 0xdc, 0xcf, 0xec, 0xa9, 0x33, + 0x77, 0x10, 0x1c, 0x47, 0xd8, 0x17, 0xd2, 0x0c, 0x1a, 0x7e, 0xab, 0x53, 0x42, 0xaa, 0x48, 0xd2, 0xeb, 0xaa, 0x9f, + 0x77, 0xee, 0x03, 0xde, 0x21, 0xa5, 0x25, 0x52, 0xd7, 0x31, 0x0b, 0x9b, 0x2e, 0xfa, 0x9d, 0xa4, 0xfe, 0xd2, 0x2e, + 0x21, 0xcc, 0x5c, 0x2c, 0xca, 0x02, 0xa8, 0xd0, 0xd0, 0x97, 0xce, 0x00, 0xe4, 0x63, 0x9f, 0x6f, 0x48, 0xcd, 0x54, + 0x49, 0xcd, 0xc0, 0xc1, 0xf8, 0x0e, 0x29, 0xc9, 0x14, 0x32, 0x94, 0x12, 0xa9, 0x84, 0x9e, 0xd9, 0x5c, 0x43, 0x42, + 0xee, 0x86, 0x96, 0xd7, 0xe7, 0xf4, 0x9e, 0xa7, 0x35, 0xb0, 0x7c, 0x35, 0x0e, 0x2e, 0x42, 0x58, 0x12, 0xd3, 0x0d, + 0x0a, 0xeb, 0xce, 0xc9, 0x6c, 0x7e, 0xab, 0x2f, 0x02, 0xbb, 0x2c, 0x6a, 0x51, 0xe2, 0x4f, 0xf1, 0x32, 0xf3, 0xa7, + 0x24, 0x85, 0x7c, 0x44, 0x51, 0x94, 0xf0, 0x33, 0x77, 0x37, 0x6a, 0xd9, 0xca, 0xdb, 0xaf, 0xf8, 0x81, 0x32, 0x2f, + 0x21, 0x47, 0x93, 0x64, 0x96, 0xa7, 0x64, 0xbe, 0xba, 0x6b, 0xe7, 0x6c, 0xdb, 0x57, 0x26, 0x45, 0xc7, 0x00, 0xf6, + 0x9d, 0xf4, 0x97, 0xce, 0x2a, 0xdc, 0xbb, 0xdc, 0xe6, 0xca, 0x9f, 0x09, 0xf6, 0x55, 0x49, 0xa4, 0x7e, 0x4e, 0xd7, + 0x24, 0xce, 0xdd, 0xb9, 0x96, 0x3f, 0x2f, 0x58, 0x76, 0x7b, 0xc6, 0x20, 0xd7, 0x59, 0xc0, 0x5d, 0xdf, 0x6a, 0x1b, + 0xaa, 0x3c, 0xf5, 0x7e, 0xaa, 0x94, 0x95, 0xa2, 0x7e, 0x09, 0x70, 0xfd, 0x8a, 0x60, 0xa1, 0xa2, 0x8d, 0x8e, 0x23, + 0x46, 0x9f, 0x16, 0xb6, 0xf3, 0xf2, 0x24, 0xeb, 0x72, 0xf0, 0xaf, 0x55, 0x98, 0x36, 0xc1, 0x02, 0x22, 0xdc, 0x0b, + 0xa9, 0x83, 0x7c, 0xb8, 0xee, 0x95, 0x81, 0x22, 0x08, 0xdf, 0xa5, 0xbb, 0x97, 0xba, 0x2d, 0x6b, 0x76, 0xf7, 0x52, + 0x6b, 0x41, 0x3f, 0x95, 0xf2, 0x43, 0xcc, 0x3c, 0xe5, 0xe5, 0x65, 0x5e, 0x14, 0xb8, 0x00, 0xf0, 0xbe, 0xef, 0xfa, + 0xfe, 0xf7, 0x26, 0x69, 0x30, 0x80, 0x58, 0xec, 0x59, 0x22, 0x2c, 0x13, 0xaf, 0xe6, 0xff, 0x7e, 0x63, 0xfe, 0xef, + 0x9d, 0x2b, 0xa7, 0x60, 0x1a, 0x4d, 0x52, 0x16, 0x5b, 0xd6, 0x89, 0x35, 0x01, 0x2a, 0xbd, 0x2d, 0x97, 0xf4, 0xe3, + 0x45, 0x08, 0x1a, 0xd7, 0x72, 0x2c, 0x52, 0xd9, 0x1c, 0x47, 0x33, 0x9e, 0xdc, 0x86, 0x0b, 0xde, 0x9c, 0x89, 0x54, + 0xe4, 0xf3, 0x68, 0xc4, 0x48, 0x7e, 0x9b, 0x4b, 0x36, 0x6b, 0x2e, 0x38, 0x79, 0xc9, 0x92, 0x2b, 0x26, 0xf9, 0x28, + 0x22, 0xe8, 0x24, 0xe3, 0x51, 0xe2, 0xbd, 0x89, 0xb2, 0x4c, 0x5c, 0x23, 0xf2, 0x4e, 0x5c, 0x0a, 0x29, 0xc8, 0xdb, + 0x9b, 0xdb, 0x09, 0x4b, 0xc9, 0x87, 0xcb, 0x45, 0x2a, 0x17, 0x24, 0x8f, 0xd2, 0xbc, 0x99, 0xb3, 0x8c, 0x8f, 0xbb, + 0x23, 0x91, 0x88, 0xac, 0x09, 0x29, 0xdb, 0x33, 0x16, 0x26, 0x7c, 0x32, 0x95, 0x5e, 0x1c, 0x65, 0x1f, 0xbb, 0xcd, + 0xe6, 0x3c, 0xe3, 0xb3, 0x28, 0xbb, 0x6d, 0xaa, 0x16, 0xe1, 0x67, 0xad, 0xa3, 0xe8, 0xf3, 0xf1, 0xc3, 0xae, 0xcc, + 0xa2, 0x34, 0xe7, 0xb0, 0x4d, 0x61, 0x94, 0x24, 0xde, 0xd1, 0xa3, 0xd6, 0x2c, 0xdf, 0xd3, 0x81, 0xbc, 0x28, 0x95, + 0xc5, 0x05, 0xf9, 0x08, 0x70, 0x07, 0x97, 0x32, 0x25, 0x97, 0x0b, 0x29, 0x45, 0xba, 0x1c, 0x2d, 0xb2, 0x5c, 0x64, + 0xe1, 0x5c, 0xf0, 0x54, 0xb2, 0xac, 0x7b, 0x29, 0xb2, 0x98, 0x65, 0xcd, 0x2c, 0x8a, 0xf9, 0x22, 0x0f, 0x1f, 0xce, + 0x6f, 0xba, 0xa0, 0x59, 0x4c, 0x32, 0xb1, 0x48, 0x63, 0x33, 0x17, 0x4f, 0xa7, 0x2c, 0xe3, 0xd2, 0xad, 0x50, 0xaf, + 0x30, 0x09, 0x13, 0x9e, 0xb2, 0x28, 0x6b, 0x4e, 0xa0, 0x33, 0x98, 0x45, 0xad, 0x98, 0x4d, 0x48, 0x36, 0xb9, 0x8c, + 0xfc, 0x76, 0xe7, 0x09, 0xb1, 0x7f, 0x83, 0x47, 0xd8, 0x6b, 0x6d, 0x2f, 0x6e, 0xb7, 0x5a, 0x7f, 0xc2, 0xdd, 0xb5, + 0x59, 0x14, 0x40, 0x61, 0x7b, 0x7e, 0xe3, 0xe5, 0x02, 0x72, 0xda, 0xb6, 0xf5, 0xec, 0xce, 0xa3, 0x18, 0x12, 0x82, + 0xc3, 0xce, 0xfc, 0xa6, 0x80, 0xd5, 0x85, 0x3a, 0xc9, 0xd4, 0x2c, 0xd2, 0x3c, 0x2d, 0x7f, 0x2b, 0xc4, 0x4f, 0xb7, + 0x43, 0xdc, 0xb1, 0x10, 0x57, 0x58, 0x6f, 0xc6, 0x8b, 0x4c, 0xc5, 0x56, 0xc3, 0x76, 0xae, 0x01, 0x99, 0x8a, 0x2b, + 0x96, 0x59, 0x38, 0xd4, 0xc3, 0x6f, 0x06, 0xa3, 0xb3, 0x1d, 0x8c, 0xa7, 0x9f, 0x02, 0x23, 0x4b, 0xe3, 0x65, 0x7d, + 0x5f, 0xdb, 0x19, 0x9b, 0x75, 0xa7, 0x0c, 0xe8, 0x29, 0xec, 0xc0, 0xef, 0x6b, 0x1e, 0xcb, 0xa9, 0xfe, 0xa9, 0xc8, + 0xf9, 0x5a, 0xd7, 0x3d, 0x6a, 0xb5, 0xf4, 0x73, 0xce, 0x7f, 0x61, 0x61, 0x3b, 0x80, 0x06, 0xc5, 0x05, 0xf9, 0x5b, + 0x79, 0x99, 0xb7, 0xce, 0x3d, 0xc9, 0x0f, 0xee, 0x2d, 0x5f, 0x27, 0x49, 0xb1, 0xba, 0x11, 0x4d, 0x32, 0x2b, 0x2b, + 0xb5, 0xf0, 0x01, 0xb7, 0x9d, 0x3a, 0x4f, 0x94, 0xf7, 0xca, 0x5b, 0x9c, 0xbc, 0xff, 0x83, 0xce, 0xbb, 0x08, 0x21, + 0xd2, 0xe1, 0x24, 0x1b, 0x8a, 0x6e, 0xda, 0xa3, 0xad, 0x6e, 0xda, 0x6c, 0x62, 0x5f, 0xd0, 0x6c, 0x90, 0x9a, 0xf4, + 0x3c, 0x9f, 0xf7, 0x85, 0x32, 0xb6, 0x73, 0x1c, 0x0a, 0xb8, 0x6a, 0xba, 0x5a, 0x55, 0x61, 0x00, 0xae, 0xae, 0x6b, + 0xfc, 0x4d, 0x9a, 0x06, 0x24, 0x77, 0x38, 0x79, 0x6a, 0x5f, 0xec, 0x92, 0x59, 0x5e, 0x91, 0x88, 0x91, 0xc2, 0x5c, + 0x30, 0x8f, 0xe4, 0x14, 0xbc, 0x14, 0xa5, 0xf8, 0xa9, 0x92, 0x98, 0xd0, 0x21, 0xc2, 0xfd, 0xac, 0xcc, 0x70, 0x83, + 0x4c, 0xbe, 0xac, 0x80, 0x51, 0xbe, 0x91, 0x14, 0x46, 0x24, 0xbf, 0x50, 0x6d, 0xd3, 0x59, 0x8b, 0x6e, 0x7c, 0x5f, + 0x8b, 0x8e, 0xa5, 0x92, 0xab, 0xdc, 0x6d, 0x1b, 0x71, 0x98, 0x46, 0xf9, 0xf9, 0x48, 0xdf, 0x95, 0xcc, 0xab, 0x9b, + 0x01, 0x91, 0x82, 0x5e, 0x1b, 0x69, 0x2c, 0x53, 0xf6, 0xe8, 0xf7, 0x72, 0xa7, 0x7d, 0x92, 0xdd, 0x65, 0x9f, 0x94, + 0x0b, 0xcf, 0xc5, 0x22, 0x1b, 0x41, 0x38, 0xd2, 0x48, 0xbd, 0x4d, 0xc7, 0x0d, 0x52, 0x2a, 0x06, 0x22, 0xd2, 0xc9, + 0x04, 0x95, 0x84, 0xbb, 0x2f, 0x95, 0x60, 0x2a, 0xe4, 0xa5, 0xef, 0x6b, 0x18, 0x11, 0x67, 0x97, 0x04, 0x32, 0x3b, + 0x56, 0x49, 0x8d, 0x7e, 0x4a, 0x7b, 0x69, 0xb0, 0x48, 0xf9, 0xcf, 0x0b, 0x76, 0xce, 0x41, 0xd7, 0xe4, 0x01, 0x8f, + 0x55, 0xac, 0x09, 0x64, 0x5f, 0xb3, 0x0d, 0xc1, 0x0b, 0x1e, 0xeb, 0x8d, 0x49, 0x55, 0xa5, 0xc9, 0x6d, 0x42, 0x4d, + 0x04, 0xfe, 0x62, 0xd0, 0x0e, 0x38, 0x89, 0xc5, 0x2c, 0xe2, 0x69, 0xa8, 0x5c, 0xbe, 0xe5, 0x60, 0x21, 0xb4, 0x26, + 0x3c, 0x0e, 0x53, 0xb3, 0x3d, 0x6d, 0x1c, 0xfc, 0x24, 0x78, 0xaa, 0xba, 0x16, 0x5d, 0xa1, 0x10, 0xaa, 0xd1, 0x47, + 0x2d, 0x82, 0x4f, 0xb4, 0x5c, 0x13, 0x98, 0xb8, 0xd5, 0xe5, 0xb5, 0xf3, 0xda, 0x0e, 0xb4, 0xd6, 0x36, 0x4a, 0x1b, + 0x01, 0x62, 0xbd, 0x34, 0x17, 0x99, 0xf4, 0xfd, 0x29, 0x49, 0x30, 0xed, 0x4d, 0x95, 0xb3, 0xeb, 0x38, 0x51, 0xff, + 0xf5, 0x9b, 0xed, 0xb0, 0x5d, 0x9a, 0xef, 0xb5, 0xdb, 0xc0, 0x3a, 0x39, 0xca, 0xdc, 0x28, 0x55, 0xcb, 0x28, 0x7f, + 0xeb, 0xa5, 0x56, 0xcf, 0xe5, 0x72, 0x89, 0x39, 0x6e, 0x5a, 0x54, 0xf9, 0x35, 0x20, 0x54, 0xb0, 0x68, 0xc7, 0x54, + 0xb8, 0xa8, 0xd6, 0x5d, 0xaa, 0x92, 0x17, 0x5a, 0x44, 0x9f, 0xef, 0x2f, 0x33, 0x33, 0x63, 0x71, 0xc1, 0xad, 0x93, + 0xa9, 0x4e, 0x72, 0x85, 0xc1, 0x88, 0xa3, 0x87, 0x6e, 0x6b, 0xa6, 0x61, 0xb9, 0xa5, 0xd9, 0x56, 0xba, 0x0d, 0xf4, + 0x23, 0xcb, 0x68, 0x15, 0xee, 0xda, 0x18, 0x00, 0x72, 0xf5, 0xb6, 0x01, 0x06, 0x66, 0x6b, 0x2e, 0xed, 0x12, 0x40, + 0x1b, 0x1b, 0x33, 0xb8, 0x48, 0x73, 0xb1, 0xbf, 0xfc, 0x46, 0x16, 0x87, 0x4e, 0x53, 0xf5, 0x9b, 0xc7, 0xf0, 0x3f, + 0x48, 0xc0, 0xa5, 0x56, 0x4a, 0x43, 0xf4, 0xf5, 0xdb, 0xb3, 0xf7, 0x88, 0x5c, 0x8a, 0xf8, 0x36, 0x44, 0x32, 0x5b, + 0x30, 0x54, 0xe0, 0x40, 0x4e, 0x59, 0x5a, 0xbe, 0x8c, 0x47, 0x24, 0x2c, 0x48, 0xc4, 0x44, 0x5f, 0xca, 0x5c, 0x37, + 0x92, 0x47, 0x17, 0xc7, 0xea, 0x25, 0x53, 0xbd, 0x63, 0xa9, 0x5f, 0xef, 0x25, 0x33, 0xf8, 0xd9, 0x83, 0x10, 0xca, + 0xf1, 0xa1, 0x9c, 0xaa, 0x87, 0x33, 0x38, 0x30, 0xea, 0x69, 0x7f, 0xb9, 0x41, 0x4c, 0x7d, 0x18, 0x62, 0xda, 0xd3, + 0x4b, 0xc8, 0x55, 0xab, 0x8b, 0x70, 0x74, 0x71, 0x51, 0x1c, 0x1f, 0xc2, 0x58, 0x87, 0x76, 0x5c, 0x80, 0xd0, 0xf6, + 0x2f, 0x09, 0x0c, 0x5e, 0x36, 0x94, 0xd1, 0x1e, 0x0c, 0x01, 0xf3, 0xc6, 0x3d, 0x58, 0x24, 0x10, 0x18, 0xf4, 0x8e, + 0xcb, 0x12, 0x75, 0x62, 0x75, 0xd1, 0x2e, 0x08, 0x74, 0xc3, 0x8a, 0xee, 0xb5, 0x37, 0xb5, 0xda, 0x5f, 0x0b, 0x52, + 0xec, 0x42, 0x77, 0x81, 0xe1, 0x7f, 0x05, 0xd9, 0xf1, 0xa1, 0xc6, 0xc3, 0x85, 0xfb, 0x6a, 0x13, 0xfd, 0xda, 0x81, + 0x12, 0x5b, 0x83, 0x5c, 0x92, 0x8f, 0x92, 0x7c, 0xbc, 0x50, 0x4d, 0xad, 0x30, 0x02, 0x2d, 0x09, 0x84, 0x76, 0xcb, + 0x6a, 0x1d, 0x23, 0x91, 0x24, 0xd1, 0x3c, 0x67, 0xa1, 0xfd, 0x61, 0xe4, 0x12, 0x88, 0xb7, 0x4d, 0x45, 0xc0, 0xa4, + 0xd7, 0x9c, 0x82, 0xba, 0xb0, 0xa9, 0xa5, 0x5c, 0x45, 0x99, 0xdf, 0x6c, 0x8e, 0x9a, 0x97, 0x13, 0x5c, 0xc8, 0xe9, + 0xd2, 0x95, 0x6a, 0x8f, 0x5b, 0xad, 0x2e, 0xe4, 0x42, 0x36, 0xa3, 0x84, 0x4f, 0xd2, 0x30, 0x61, 0x63, 0x59, 0x48, + 0xb8, 0xa5, 0xb6, 0xb4, 0x6a, 0x44, 0xd0, 0x79, 0x94, 0xb1, 0x99, 0x17, 0xc0, 0xbf, 0x77, 0x4f, 0x5c, 0xc8, 0x38, + 0x4c, 0xe5, 0xb4, 0xa9, 0xb2, 0x6e, 0xe1, 0xce, 0x80, 0x9c, 0xd6, 0x9e, 0x97, 0xce, 0x44, 0x23, 0x06, 0x2a, 0x56, + 0x21, 0x33, 0x4f, 0x4e, 0x89, 0xcc, 0xdc, 0x76, 0x29, 0x5e, 0x6e, 0xac, 0x60, 0x53, 0xd2, 0x1f, 0xe1, 0x22, 0x57, + 0x8a, 0xf1, 0x66, 0x63, 0xab, 0x2e, 0xd5, 0x9f, 0x36, 0xd0, 0xe7, 0x28, 0x76, 0x85, 0x76, 0x2c, 0x2f, 0x75, 0x8f, + 0xfb, 0x20, 0xb3, 0xa6, 0x72, 0x12, 0xb7, 0x07, 0x2e, 0x78, 0x3a, 0x5f, 0xc8, 0x81, 0x72, 0x6a, 0x67, 0x70, 0x41, + 0x62, 0x48, 0x9c, 0x12, 0xc0, 0xc1, 0x70, 0xa9, 0x81, 0x19, 0x45, 0xc9, 0xc8, 0x07, 0x88, 0xbc, 0xa6, 0xf7, 0x34, + 0x63, 0x33, 0xdc, 0x9d, 0xf1, 0xb4, 0xa9, 0xeb, 0x1e, 0x39, 0x6a, 0x49, 0xf0, 0x04, 0x9e, 0x8a, 0x40, 0x8d, 0x46, + 0x54, 0xee, 0xea, 0x16, 0x5c, 0x5e, 0x0c, 0x8b, 0xa2, 0x9b, 0x49, 0x7f, 0xf0, 0xda, 0xc7, 0x43, 0xf2, 0x8b, 0xf3, + 0x72, 0x16, 0x64, 0x8f, 0x0a, 0x22, 0x1d, 0xbc, 0xa3, 0x89, 0x7b, 0x16, 0x54, 0xb3, 0x5f, 0x28, 0x34, 0x7c, 0xe7, + 0x23, 0x96, 0xcf, 0x9b, 0x9a, 0x77, 0x35, 0x15, 0xc9, 0x22, 0xe8, 0x8a, 0x8d, 0xa7, 0xf6, 0x7b, 0xb9, 0x54, 0x6c, + 0xc9, 0x5c, 0xd2, 0xd0, 0xce, 0x84, 0x61, 0x79, 0xa9, 0xc7, 0x3c, 0xbb, 0xd7, 0x78, 0x70, 0x8d, 0x9f, 0x5c, 0x9c, + 0xd4, 0x79, 0x1c, 0xf0, 0xa5, 0xf2, 0x05, 0x76, 0x51, 0x92, 0xc0, 0x84, 0x17, 0x56, 0x7d, 0x71, 0x5f, 0xfa, 0x31, + 0x90, 0x43, 0x1f, 0x17, 0xe6, 0x9c, 0x3e, 0x53, 0x2a, 0xa5, 0xf3, 0xd6, 0xbc, 0x3d, 0x69, 0x83, 0x45, 0x5a, 0xfa, + 0x72, 0x08, 0x77, 0xd7, 0xf2, 0xa2, 0xbb, 0x15, 0xef, 0xd2, 0x0a, 0xa9, 0xa7, 0x16, 0x44, 0x51, 0x96, 0xc6, 0xc8, + 0xfb, 0xcb, 0x28, 0xe1, 0xa3, 0x8f, 0x14, 0xed, 0x2f, 0x7d, 0xbc, 0x79, 0xed, 0x51, 0x71, 0x05, 0xcb, 0xb0, 0x71, + 0xdd, 0x91, 0x9e, 0x06, 0x0e, 0x2f, 0xd6, 0x6f, 0xc5, 0x41, 0xbd, 0xfd, 0x25, 0x30, 0x1e, 0x3d, 0x4f, 0xef, 0xa2, + 0x38, 0xaf, 0xde, 0x75, 0x55, 0x41, 0x01, 0x68, 0xd6, 0xe5, 0x9e, 0x22, 0x2a, 0x8a, 0x3e, 0x49, 0x69, 0xc8, 0xd3, + 0x4c, 0x0d, 0xe0, 0x94, 0x86, 0xbf, 0x21, 0xef, 0x2f, 0x65, 0x19, 0x2b, 0x3d, 0x1a, 0x2a, 0x25, 0x83, 0x22, 0x98, + 0x0b, 0xcc, 0xd8, 0x20, 0x66, 0x32, 0xe2, 0x89, 0xee, 0xd2, 0xb5, 0x06, 0xf8, 0xda, 0x8a, 0x56, 0xab, 0xbc, 0xbe, + 0x16, 0x5e, 0xc7, 0xa0, 0x5a, 0xd9, 0xf1, 0x61, 0x05, 0xb7, 0x5a, 0x99, 0x3a, 0x93, 0x6e, 0x68, 0xb0, 0x5a, 0xa1, + 0xae, 0xf3, 0xfe, 0x32, 0x52, 0xd7, 0x86, 0x00, 0x40, 0x61, 0x00, 0x84, 0xa0, 0xb5, 0xbe, 0x16, 0xe3, 0x27, 0x54, + 0x04, 0x32, 0xca, 0x26, 0x4c, 0xae, 0x21, 0x36, 0xd1, 0x39, 0xaa, 0x5d, 0x1b, 0xa0, 0xde, 0x80, 0x36, 0xaa, 0x43, + 0x7b, 0x01, 0x48, 0xef, 0xef, 0x2f, 0x79, 0x41, 0xf7, 0x97, 0x2c, 0x1d, 0x89, 0x98, 0x7d, 0x78, 0xf7, 0x25, 0x5c, + 0x72, 0x14, 0x29, 0x18, 0x16, 0x53, 0x0c, 0x82, 0x53, 0x6d, 0x8e, 0x16, 0x21, 0x42, 0x89, 0x10, 0xcd, 0x09, 0x3c, + 0x35, 0x97, 0x02, 0xb1, 0x40, 0x5e, 0x5f, 0x43, 0xce, 0x62, 0x0d, 0x33, 0x4d, 0x55, 0x2f, 0x51, 0x1c, 0x1f, 0xea, + 0xd6, 0x5a, 0x04, 0xe8, 0x46, 0x80, 0x04, 0x75, 0x4e, 0x2b, 0x1c, 0x40, 0x5e, 0xb3, 0x8b, 0x87, 0x98, 0x5f, 0x95, + 0xc4, 0xa6, 0x2e, 0x50, 0xf5, 0x8e, 0x93, 0xe8, 0x92, 0x25, 0xbd, 0xfd, 0x65, 0xba, 0x5a, 0xb5, 0x8a, 0xe3, 0x43, + 0xfd, 0xe8, 0x1d, 0x2b, 0xbe, 0xa1, 0x5f, 0x78, 0xa9, 0xb6, 0x18, 0x6e, 0x25, 0x42, 0xb6, 0xa7, 0x4d, 0x73, 0x0a, + 0xcd, 0x00, 0x05, 0xf2, 0x54, 0x82, 0x85, 0x6a, 0x54, 0x2a, 0x44, 0x05, 0xf2, 0x78, 0xbc, 0x59, 0x96, 0x4b, 0x36, + 0x87, 0xd2, 0xe9, 0x6a, 0xd5, 0x2e, 0x90, 0x37, 0xe3, 0x29, 0x3c, 0xa5, 0xab, 0x95, 0xba, 0xf0, 0x37, 0xe3, 0xa9, + 0xdf, 0x02, 0xb2, 0x45, 0xde, 0x2c, 0xba, 0x51, 0x0b, 0xb6, 0x35, 0xd1, 0x8d, 0xdf, 0x36, 0x55, 0x41, 0x89, 0x9f, + 0x1c, 0x28, 0xae, 0xda, 0xd1, 0xc4, 0xec, 0x68, 0x4c, 0x16, 0xfa, 0x2a, 0x13, 0xf5, 0x63, 0x9a, 0x6c, 0xdf, 0xd1, + 0xd8, 0xee, 0xe8, 0x62, 0xc7, 0x8e, 0x2e, 0xee, 0xd8, 0xd1, 0xc8, 0xec, 0x9e, 0x57, 0xe2, 0x4e, 0xac, 0x56, 0xed, + 0x56, 0x85, 0xbd, 0xe3, 0xc3, 0x98, 0x5f, 0xc1, 0x6e, 0x80, 0x9a, 0x27, 0xf9, 0x8c, 0x6d, 0x27, 0xca, 0x3a, 0x8a, + 0xd9, 0xaf, 0xc2, 0x64, 0x85, 0x85, 0xb4, 0x8e, 0x05, 0x97, 0xae, 0xcb, 0x98, 0xdb, 0x1f, 0x49, 0xd9, 0x1c, 0xf0, + 0x90, 0x03, 0x1e, 0xa6, 0xf6, 0x05, 0x98, 0x3e, 0x7a, 0x8f, 0x08, 0xf2, 0x90, 0x25, 0xeb, 0x8b, 0xe2, 0x1c, 0x64, + 0x84, 0x5a, 0xdf, 0xbd, 0x68, 0x11, 0x5a, 0xa3, 0xde, 0x6e, 0x9a, 0x83, 0xf0, 0xf8, 0xb5, 0xc8, 0x62, 0x14, 0xea, + 0xa6, 0xbf, 0x0a, 0x55, 0x33, 0x9e, 0x9a, 0x64, 0xab, 0x9d, 0xb4, 0x56, 0xd5, 0xbb, 0x14, 0xd7, 0x79, 0xf4, 0x48, + 0xb7, 0x98, 0x47, 0x52, 0xb2, 0x2c, 0x35, 0x94, 0x8b, 0xd0, 0xff, 0x17, 0x54, 0xb8, 0x85, 0xaf, 0x44, 0x76, 0x03, + 0x2c, 0x01, 0x1a, 0x85, 0xdd, 0xf0, 0x7c, 0x2d, 0x9e, 0xf6, 0x2a, 0x0d, 0xf6, 0x16, 0xbb, 0x46, 0x83, 0x2e, 0x02, + 0x1b, 0x66, 0x31, 0x63, 0xf1, 0xb9, 0x62, 0xd0, 0xfd, 0xd1, 0x85, 0x51, 0x58, 0xd7, 0xc4, 0x5d, 0xd5, 0x81, 0xa0, + 0x1f, 0x17, 0x9d, 0x27, 0x0f, 0x4f, 0x11, 0xd1, 0x3c, 0x5e, 0x8c, 0xc7, 0x08, 0x17, 0xde, 0xfd, 0xba, 0xb5, 0x1f, + 0xfe, 0xb8, 0xf8, 0xe2, 0x45, 0xeb, 0x8b, 0xb2, 0x73, 0x0a, 0x44, 0x64, 0xe2, 0xfb, 0x56, 0x54, 0x39, 0xf0, 0xda, + 0x15, 0x8d, 0xa3, 0x74, 0xf7, 0x72, 0x06, 0xee, 0x72, 0xf2, 0x39, 0x63, 0x31, 0x10, 0x27, 0xd9, 0x28, 0x3d, 0x4f, + 0xd8, 0x15, 0xb3, 0x6f, 0x1e, 0xdc, 0x32, 0xd9, 0x96, 0x1e, 0x23, 0xb1, 0x48, 0xa5, 0x49, 0x74, 0x30, 0xac, 0xd6, + 0x59, 0xd2, 0x85, 0x5a, 0x83, 0x6b, 0x23, 0xdc, 0x6a, 0x39, 0x57, 0x97, 0x5e, 0xc5, 0x05, 0x41, 0x0e, 0x00, 0x3b, + 0x21, 0xeb, 0xef, 0x28, 0x0f, 0x5b, 0xa4, 0xb5, 0x0b, 0x36, 0xd2, 0xc6, 0x21, 0x42, 0x43, 0x8b, 0x27, 0xe5, 0xab, + 0xac, 0xbd, 0x30, 0x62, 0x27, 0xbe, 0x3e, 0x89, 0x81, 0xcb, 0x0c, 0x06, 0x4b, 0x59, 0x9e, 0xef, 0x44, 0x40, 0xb9, + 0x89, 0x04, 0x55, 0xad, 0xd1, 0x8e, 0x51, 0x48, 0x8b, 0xc0, 0x09, 0x53, 0x00, 0x97, 0x11, 0x53, 0xd3, 0x8a, 0x8d, + 0xc7, 0x6c, 0x54, 0xba, 0x7a, 0x21, 0xf6, 0x35, 0xe6, 0x89, 0x84, 0x10, 0x90, 0x8a, 0xcd, 0xa0, 0x37, 0x22, 0x65, + 0x08, 0xdb, 0x6c, 0x4e, 0x03, 0xbf, 0x91, 0xff, 0xdb, 0xe1, 0xd1, 0x23, 0xd6, 0x61, 0x31, 0xb3, 0xac, 0x56, 0xd6, + 0xcd, 0x53, 0x2b, 0xaf, 0x23, 0x52, 0x28, 0x3f, 0xce, 0xae, 0x03, 0x74, 0xbf, 0x63, 0xb2, 0x6c, 0x7f, 0xf1, 0xa8, + 0xdd, 0x2a, 0x10, 0x41, 0x30, 0xdc, 0x7d, 0x4f, 0x89, 0xea, 0x75, 0x04, 0xbd, 0x16, 0xe9, 0xaf, 0xe9, 0xd7, 0x69, + 0x7f, 0xde, 0x46, 0x44, 0xbf, 0x48, 0x00, 0x17, 0x25, 0x33, 0x18, 0x81, 0xf3, 0xf3, 0x77, 0x2f, 0xa5, 0x3e, 0xf8, + 0xfd, 0xe0, 0x79, 0xdc, 0x6e, 0x21, 0x82, 0x72, 0x29, 0xe6, 0xbf, 0x62, 0x09, 0x47, 0x88, 0xa0, 0x51, 0x22, 0x72, + 0xe6, 0xae, 0x41, 0xab, 0xb3, 0xbf, 0x7f, 0x11, 0x1a, 0xa2, 0x79, 0xc6, 0xf2, 0xdc, 0x73, 0xc7, 0x37, 0xa4, 0xf4, + 0x09, 0x86, 0xb9, 0x95, 0xe2, 0x72, 0x26, 0x15, 0x5e, 0xf4, 0x1d, 0x7f, 0x97, 0xaa, 0x74, 0xd9, 0x06, 0xb1, 0x29, + 0x11, 0x50, 0x32, 0x36, 0xad, 0x5d, 0x7d, 0x72, 0xe6, 0x2d, 0x47, 0x4f, 0x4f, 0xac, 0x63, 0xc2, 0x9b, 0x13, 0xd4, + 0x4a, 0x66, 0x3c, 0x3d, 0xdf, 0x52, 0x1a, 0xdd, 0x6c, 0x29, 0x05, 0x95, 0xad, 0x84, 0xce, 0xbc, 0x7e, 0xe6, 0xd3, + 0x58, 0xaf, 0x14, 0x1f, 0x17, 0xc4, 0x58, 0xf9, 0x2d, 0x3f, 0x01, 0xa9, 0xb3, 0x0d, 0x6a, 0x84, 0xdf, 0x3e, 0x1d, + 0x94, 0xfc, 0x9a, 0xe9, 0xca, 0x51, 0x7e, 0xdf, 0x0a, 0xa1, 0xb4, 0x09, 0xfe, 0xeb, 0xe4, 0x57, 0xad, 0x95, 0xdd, + 0x7c, 0x9a, 0xe0, 0x1c, 0xad, 0xea, 0x77, 0x6c, 0xbd, 0xb9, 0xc7, 0xbe, 0xbe, 0xf7, 0x5b, 0x8a, 0x8d, 0xe2, 0x53, + 0xee, 0xff, 0x28, 0xe1, 0xb3, 0x8a, 0x04, 0x36, 0xc1, 0x54, 0x1a, 0x0f, 0x24, 0x33, 0xb9, 0x83, 0x68, 0xd5, 0xe7, + 0x1c, 0xae, 0x68, 0xc2, 0x7b, 0x30, 0x16, 0x19, 0x3b, 0x4f, 0xc4, 0xf5, 0xfa, 0x7b, 0xbd, 0x76, 0x37, 0x9e, 0xf2, + 0xc9, 0xd4, 0xb9, 0x77, 0xc5, 0x68, 0xb9, 0x09, 0x77, 0x4e, 0x50, 0xfc, 0xeb, 0xbf, 0x04, 0xc1, 0xbf, 0xfe, 0xcb, + 0x27, 0x9b, 0xc2, 0xf0, 0xc5, 0x05, 0x91, 0xd5, 0xb0, 0xbb, 0x4f, 0xd7, 0xf6, 0x99, 0xea, 0x38, 0xdf, 0xde, 0x66, + 0x63, 0x13, 0xa0, 0x7e, 0x63, 0x0b, 0x36, 0x0a, 0xf5, 0xe9, 0xf3, 0x7e, 0x0b, 0x60, 0xb0, 0xae, 0x4f, 0x42, 0x06, + 0x8d, 0x7e, 0x17, 0x68, 0x17, 0x38, 0xbc, 0xd7, 0x8e, 0xfc, 0x76, 0x0c, 0x7f, 0x6a, 0x0d, 0xbf, 0x13, 0x7c, 0xe3, + 0x9f, 0x18, 0x5d, 0x5c, 0x94, 0x09, 0x76, 0x6e, 0x57, 0xb8, 0xc0, 0xdf, 0xdf, 0x28, 0x31, 0x8a, 0x47, 0xd8, 0xc2, + 0x3d, 0x75, 0x3d, 0x90, 0x8e, 0x2e, 0x5e, 0xc3, 0x5b, 0x7b, 0x8e, 0x2f, 0x33, 0xeb, 0xe0, 0xbd, 0x43, 0x38, 0xc0, + 0x10, 0xf5, 0x55, 0xa9, 0x41, 0x37, 0x24, 0x03, 0x94, 0x82, 0xb9, 0x01, 0x60, 0x92, 0xd1, 0x85, 0xb1, 0x36, 0x4f, + 0xb5, 0x1b, 0x26, 0x5c, 0x27, 0x6d, 0xe3, 0x9e, 0xa9, 0x21, 0x9d, 0x78, 0xef, 0x15, 0xbe, 0x54, 0x63, 0x56, 0x59, + 0xf7, 0xca, 0xd5, 0x05, 0x76, 0xc4, 0x45, 0xa1, 0xc2, 0xf4, 0x7f, 0xdd, 0x15, 0x49, 0xfc, 0xfb, 0xa7, 0x23, 0x89, + 0xe2, 0x5e, 0x91, 0xc4, 0xbf, 0xff, 0xe1, 0x91, 0xc4, 0xbf, 0xba, 0x91, 0x44, 0xd8, 0xc4, 0x2f, 0xef, 0x15, 0xed, + 0xb3, 0x91, 0x18, 0x71, 0x9d, 0xd3, 0xb6, 0x51, 0xa3, 0x13, 0x31, 0x81, 0x50, 0xdf, 0xbf, 0x7f, 0xe4, 0x2e, 0x11, + 0x13, 0x37, 0x6e, 0x07, 0x6f, 0x6d, 0x85, 0x40, 0x5d, 0xd7, 0x46, 0xd8, 0x4c, 0xac, 0xac, 0x55, 0xde, 0x48, 0x69, + 0x3e, 0xb4, 0x6f, 0x50, 0x40, 0x61, 0xf9, 0x16, 0xa4, 0x16, 0xe9, 0xd8, 0x68, 0x5a, 0xa8, 0x02, 0x71, 0x65, 0xc7, + 0x4e, 0xc3, 0x5e, 0xb7, 0x70, 0x47, 0xe8, 0xda, 0xb7, 0xbc, 0xe8, 0xdb, 0xf7, 0x4b, 0xf4, 0xe3, 0x4d, 0xfb, 0xd9, + 0xa0, 0xdd, 0x3d, 0x6a, 0xcf, 0x50, 0x88, 0x40, 0x44, 0xaa, 0x82, 0x56, 0xf7, 0xe8, 0x08, 0x0a, 0xae, 0x9d, 0x82, + 0x0e, 0x14, 0x70, 0xa7, 0xe0, 0x11, 0x14, 0x8c, 0x9c, 0x82, 0xc7, 0x50, 0x10, 0x3b, 0x05, 0x4f, 0xa0, 0xe0, 0x0a, + 0x15, 0x03, 0x5e, 0x82, 0xfb, 0x04, 0x0f, 0x89, 0xb6, 0x5c, 0x6c, 0xd9, 0x13, 0xd2, 0x86, 0x10, 0x5e, 0x34, 0x51, + 0x99, 0x47, 0xe0, 0x10, 0x0c, 0x05, 0xb9, 0x9e, 0xb2, 0x34, 0x84, 0x20, 0xea, 0x73, 0x25, 0x63, 0x02, 0x29, 0xde, + 0xf3, 0x19, 0xb3, 0xdf, 0xcb, 0xb0, 0x78, 0xf0, 0x10, 0x1e, 0xb4, 0x86, 0x45, 0xb7, 0xdc, 0x39, 0x1d, 0xfb, 0x33, + 0x59, 0x28, 0x7a, 0x2f, 0xab, 0x3a, 0x3d, 0x5d, 0xb3, 0xdc, 0xf3, 0x1d, 0x31, 0x24, 0xc7, 0x17, 0x31, 0x4e, 0xc4, + 0x75, 0xf3, 0x06, 0xf5, 0xb6, 0xc7, 0x95, 0x00, 0xa2, 0x32, 0xae, 0xa4, 0xd6, 0x54, 0x3e, 0xbd, 0x8f, 0x26, 0xe5, + 0xef, 0xd7, 0x2c, 0xcf, 0xa3, 0x89, 0x69, 0xb9, 0x3b, 0x8e, 0xa4, 0x40, 0x74, 0x63, 0x48, 0x16, 0x08, 0x88, 0x05, + 0xc1, 0x66, 0x81, 0x2d, 0x6f, 0x42, 0x43, 0x80, 0x9d, 0x7a, 0x54, 0x49, 0x4d, 0x5f, 0x2f, 0x92, 0xd1, 0xa4, 0x2a, + 0x38, 0x9e, 0x67, 0x4c, 0x95, 0x6a, 0x0c, 0x17, 0xc7, 0x87, 0x50, 0xa0, 0xab, 0x77, 0x44, 0x8f, 0xac, 0xe3, 0x60, + 0x77, 0x0c, 0xc9, 0xb3, 0xd1, 0x23, 0x37, 0xdf, 0xa6, 0x4c, 0xb6, 0xd9, 0x8c, 0x59, 0x7c, 0xd6, 0x1e, 0xc1, 0x1f, + 0x13, 0x11, 0xf9, 0x6c, 0x3c, 0x1e, 0xdf, 0x19, 0x4d, 0xfa, 0x2c, 0x1e, 0xb3, 0x0e, 0x7b, 0xd4, 0x85, 0x5c, 0x8c, + 0xa6, 0x89, 0x41, 0xb4, 0x0b, 0x85, 0xbb, 0xe5, 0xfd, 0x1a, 0x43, 0xb8, 0x42, 0x4e, 0x97, 0xf7, 0x8f, 0x2c, 0x15, + 0xf3, 0x8c, 0x2d, 0x67, 0x51, 0x36, 0xe1, 0x69, 0xd8, 0x2a, 0x82, 0x2b, 0x13, 0x8a, 0xf9, 0xec, 0xe9, 0xd3, 0xa7, + 0x45, 0x10, 0xdb, 0xa7, 0x56, 0x1c, 0x17, 0xc1, 0x68, 0x59, 0x2e, 0xa3, 0xd5, 0x1a, 0x8f, 0x8b, 0x80, 0xdb, 0x82, + 0xa3, 0xce, 0x28, 0x3e, 0xea, 0x14, 0xc1, 0xb5, 0xd3, 0xa2, 0x08, 0x98, 0x79, 0xca, 0x58, 0x5c, 0x4b, 0xe8, 0x78, + 0xd2, 0x6a, 0x15, 0x81, 0x26, 0xb4, 0x25, 0x98, 0x63, 0xfa, 0x67, 0x18, 0x2d, 0xa4, 0x00, 0x96, 0xdc, 0x15, 0xd2, + 0x1f, 0x9c, 0x9b, 0x97, 0x65, 0xe8, 0x0f, 0x4b, 0x14, 0x78, 0x48, 0xbe, 0x74, 0x83, 0x26, 0x40, 0xcc, 0x2a, 0x58, + 0x22, 0x6c, 0x4c, 0xa5, 0x56, 0x0d, 0x94, 0xa5, 0xaa, 0xbf, 0xa4, 0xa2, 0x8a, 0xa5, 0x00, 0xff, 0x81, 0x96, 0xfa, + 0xad, 0x6e, 0x92, 0xed, 0xe0, 0xfa, 0x8c, 0x7d, 0x92, 0xeb, 0xdf, 0xde, 0x87, 0xe9, 0x33, 0xf6, 0x47, 0x33, 0x7d, + 0xf3, 0xea, 0x53, 0xcd, 0xf4, 0x35, 0x5b, 0x9b, 0x49, 0x8a, 0x46, 0x53, 0x36, 0xfa, 0x78, 0x29, 0x6e, 0x9a, 0x70, + 0x24, 0x32, 0xa4, 0xf8, 0xe9, 0xfe, 0x6f, 0x4d, 0xfe, 0xb0, 0x83, 0x39, 0xdf, 0xa5, 0x50, 0x62, 0xf3, 0x6d, 0x4a, + 0xd1, 0x5b, 0x6b, 0xd3, 0xe9, 0x92, 0xf1, 0x98, 0xa2, 0xb7, 0xe3, 0x31, 0xb2, 0x57, 0xfe, 0x22, 0xc9, 0x54, 0xab, + 0x37, 0xb5, 0x12, 0xd5, 0xea, 0x8b, 0x2f, 0xdc, 0x32, 0xb7, 0xc0, 0x84, 0x5c, 0xdc, 0xf0, 0x8a, 0xa9, 0x89, 0x79, + 0x0e, 0x47, 0x0d, 0x3e, 0x97, 0x51, 0x7f, 0xe7, 0x60, 0x56, 0x7b, 0x3d, 0x74, 0x09, 0xf0, 0x96, 0x77, 0x5a, 0xaf, + 0xdf, 0x77, 0x9f, 0x30, 0x9b, 0x7e, 0xf7, 0xec, 0xf6, 0xcb, 0xd8, 0x9f, 0x49, 0x5c, 0xf0, 0xfc, 0x6d, 0xba, 0x76, + 0x97, 0x45, 0xc3, 0x48, 0xa9, 0xbb, 0xac, 0x42, 0x8a, 0xc9, 0x24, 0x81, 0x0f, 0x96, 0x2c, 0x6b, 0xef, 0x41, 0xd5, + 0xdd, 0xfb, 0xb5, 0xf5, 0x86, 0x6e, 0x47, 0xf3, 0xd6, 0x50, 0xf5, 0xfd, 0x24, 0x9d, 0x03, 0x7d, 0x65, 0x3e, 0xa4, + 0xa3, 0xcc, 0xc1, 0xa5, 0xe1, 0xff, 0x4b, 0x9d, 0x39, 0x2b, 0x21, 0x6b, 0x44, 0x0f, 0x1c, 0x17, 0x85, 0xb9, 0x73, + 0x10, 0xf3, 0x7c, 0x0e, 0xef, 0xe7, 0xd4, 0x3d, 0xd9, 0xa7, 0x58, 0x78, 0x7e, 0xed, 0xc4, 0x35, 0x6a, 0xdb, 0x55, + 0xd8, 0xc0, 0x86, 0x76, 0x14, 0xcf, 0x64, 0x81, 0x8c, 0xbf, 0xd9, 0x22, 0x11, 0x79, 0x1a, 0x9f, 0x3a, 0xe2, 0xe2, + 0xac, 0x10, 0x9c, 0xbe, 0xe5, 0x86, 0xd8, 0x2a, 0x5b, 0x50, 0xb8, 0x71, 0x3b, 0x55, 0xa3, 0xb1, 0xa5, 0xa2, 0x04, + 0xf9, 0x3c, 0x4a, 0x35, 0x1b, 0xa5, 0x48, 0xf3, 0x83, 0xfd, 0x65, 0xb5, 0xf3, 0x05, 0xb2, 0x60, 0x6b, 0xe2, 0xed, + 0x1d, 0x1f, 0x42, 0x87, 0x9e, 0x57, 0x03, 0x3d, 0xdd, 0x08, 0x2e, 0x7c, 0x22, 0xcc, 0x7f, 0x11, 0xe4, 0xd7, 0x24, + 0xc8, 0xaf, 0xbd, 0x3f, 0x2f, 0x9b, 0xd7, 0xec, 0xf2, 0x23, 0x97, 0x4d, 0x19, 0xcd, 0x9b, 0xa0, 0xf0, 0x2b, 0xa7, + 0xa0, 0x61, 0xcf, 0x2a, 0x59, 0x4d, 0xdf, 0xd8, 0xef, 0x2e, 0x72, 0xc8, 0x06, 0x50, 0x6a, 0x6b, 0x98, 0x8a, 0x94, + 0x75, 0xeb, 0x49, 0x89, 0x6e, 0x70, 0xd9, 0x62, 0x6b, 0xb8, 0x14, 0x90, 0x3d, 0x20, 0x6f, 0xc3, 0x96, 0x61, 0xeb, + 0x2d, 0x1b, 0x39, 0x6e, 0x6d, 0x6d, 0x1f, 0x1a, 0xe4, 0x36, 0x94, 0xf4, 0xca, 0x36, 0x23, 0xe8, 0xbb, 0x22, 0xe0, + 0x9f, 0x4a, 0xd1, 0x03, 0x57, 0xa2, 0xfd, 0xeb, 0xe4, 0x36, 0xae, 0x17, 0xab, 0x14, 0xbd, 0xfb, 0x40, 0x16, 0x46, + 0x63, 0xc9, 0x32, 0x72, 0x9f, 0x96, 0x97, 0xea, 0x36, 0xcd, 0x12, 0xc4, 0x4c, 0xd8, 0x7e, 0x3a, 0xbf, 0xb9, 0xff, + 0xf0, 0x77, 0x2f, 0xbf, 0x30, 0x38, 0xb2, 0x6f, 0x97, 0x41, 0xa8, 0x0b, 0x07, 0x21, 0x89, 0x6e, 0x43, 0x9e, 0x2a, + 0x99, 0x77, 0x09, 0xfe, 0xc0, 0xee, 0x5c, 0x98, 0x5c, 0xd3, 0x8c, 0x25, 0xea, 0x53, 0x72, 0x66, 0x2b, 0x8e, 0x1e, + 0xcf, 0x6f, 0xec, 0x6e, 0xb4, 0xd7, 0x72, 0x48, 0xff, 0xd0, 0x54, 0xd1, 0xdd, 0xb9, 0xa9, 0xf5, 0x74, 0xc7, 0x47, + 0xf3, 0x9b, 0xae, 0x16, 0xb4, 0xcd, 0x4c, 0x43, 0xd5, 0x9a, 0xdf, 0xb8, 0xc9, 0xb2, 0xd5, 0x40, 0x5e, 0x70, 0x94, + 0x7b, 0x2c, 0xca, 0x59, 0x17, 0xde, 0x9f, 0xcd, 0x47, 0x51, 0x62, 0x84, 0xf9, 0x8c, 0xc7, 0x71, 0xc2, 0xba, 0x56, + 0x5e, 0x7b, 0xed, 0xc7, 0x90, 0x6b, 0xea, 0x6e, 0x59, 0x7d, 0x57, 0x1c, 0xe4, 0x95, 0x78, 0x8a, 0x2e, 0x73, 0x91, + 0xc0, 0xc7, 0x2b, 0xb6, 0xa2, 0xd3, 0x24, 0x61, 0xb6, 0x2a, 0xe4, 0xa9, 0xdf, 0xf5, 0xb5, 0x3c, 0x6a, 0xfd, 0xa9, + 0xab, 0x36, 0xbc, 0xd5, 0x95, 0x62, 0x1e, 0x36, 0x8f, 0xea, 0x0b, 0x81, 0xaa, 0x72, 0x09, 0x64, 0xcb, 0xb2, 0x08, + 0x48, 0x2b, 0xcd, 0xa7, 0xbd, 0xa0, 0x6d, 0xca, 0xd4, 0x00, 0xf0, 0xa2, 0xe7, 0xb2, 0xa8, 0xa8, 0x2f, 0xe6, 0xdf, + 0xe7, 0xb4, 0x7c, 0xbe, 0xfd, 0xb4, 0x7c, 0x6e, 0x4f, 0xcb, 0xdd, 0x14, 0xfb, 0xd9, 0xb8, 0x0d, 0x7f, 0xba, 0xd5, + 0x82, 0xc2, 0x96, 0x77, 0x34, 0xbf, 0xf1, 0x40, 0x4f, 0x6b, 0x76, 0xe6, 0x37, 0x3a, 0x55, 0x18, 0x62, 0x16, 0x2d, + 0x48, 0x9e, 0x25, 0x2d, 0x0f, 0x0a, 0xe1, 0x6f, 0xab, 0x56, 0xd5, 0x7e, 0x08, 0x75, 0xd0, 0xeb, 0xd1, 0x66, 0x5d, + 0xe7, 0xee, 0x43, 0x1b, 0xa6, 0x42, 0xfa, 0xa1, 0xe5, 0xc6, 0x38, 0x90, 0xd1, 0xe5, 0x25, 0x8b, 0xc3, 0xb1, 0x18, + 0x2d, 0xf2, 0x7f, 0x36, 0xf0, 0x1b, 0x24, 0xde, 0x79, 0xa4, 0xd7, 0xc6, 0xb1, 0x5d, 0x75, 0xe2, 0xb2, 0x1d, 0x61, + 0x59, 0xee, 0x53, 0x98, 0x8f, 0xa2, 0x84, 0xf9, 0x9d, 0xe0, 0xe1, 0x96, 0x43, 0xf0, 0x1f, 0xb2, 0x37, 0x5b, 0x17, + 0xf3, 0x7b, 0x91, 0x71, 0x27, 0x12, 0x7e, 0x15, 0x0e, 0xdc, 0x3d, 0x6c, 0x3d, 0xdd, 0x0e, 0xee, 0xc0, 0xce, 0x34, + 0xb4, 0x42, 0xc1, 0xc8, 0x9d, 0x98, 0x8d, 0xa3, 0x45, 0x22, 0xef, 0x1e, 0x75, 0x17, 0x65, 0x6c, 0x8c, 0x7a, 0x07, + 0x43, 0xaf, 0xda, 0xde, 0x93, 0x4b, 0x7f, 0xf6, 0xf9, 0x43, 0xf8, 0xa3, 0xf3, 0x9e, 0x6e, 0x2b, 0x5d, 0x5d, 0xdb, + 0xaa, 0xa0, 0xab, 0xef, 0xd7, 0x94, 0x71, 0x2d, 0xc2, 0x95, 0x3e, 0x7e, 0xdf, 0xd6, 0xa0, 0x55, 0xde, 0xab, 0xb9, + 0xd1, 0xb2, 0x7e, 0x55, 0xeb, 0x5f, 0x37, 0xf8, 0x3d, 0xdb, 0x8e, 0xb4, 0xe6, 0x5a, 0x6f, 0x6b, 0xbe, 0xa5, 0xb7, + 0xd1, 0xd8, 0x62, 0x5c, 0xb5, 0xdf, 0xa7, 0xb7, 0xa5, 0x89, 0xa2, 0xa3, 0x90, 0x60, 0xa5, 0xec, 0x6b, 0x2b, 0x85, + 0x33, 0xfa, 0x00, 0xde, 0x64, 0xeb, 0xdd, 0xcc, 0x92, 0x34, 0xa7, 0x68, 0x2a, 0xe5, 0x3c, 0xd4, 0x1f, 0x5f, 0xbd, + 0x3e, 0x0a, 0x44, 0x36, 0x39, 0xec, 0xb4, 0x5a, 0x2d, 0x78, 0x03, 0x29, 0xf2, 0xae, 0x38, 0xbb, 0x7e, 0x26, 0x6e, + 0x28, 0x7a, 0xe2, 0x3d, 0xf5, 0x9e, 0x1c, 0x79, 0x8f, 0x1e, 0x23, 0x4f, 0xb1, 0x73, 0x8a, 0x9e, 0x1c, 0x21, 0x4f, + 0xb3, 0x73, 0x8a, 0x1e, 0x3d, 0x46, 0xbd, 0xe3, 0x89, 0x55, 0xc9, 0xe0, 0x0a, 0xa3, 0xd6, 0x77, 0x72, 0x99, 0x89, + 0x8f, 0xac, 0x7e, 0x70, 0x75, 0x99, 0xc9, 0x8c, 0xeb, 0xd8, 0x47, 0x38, 0xbd, 0xa3, 0x68, 0x1e, 0x2a, 0xa2, 0x70, + 0x0b, 0xc1, 0x2d, 0xa3, 0x4b, 0xd5, 0x14, 0xa0, 0x66, 0x5e, 0xa2, 0xde, 0x31, 0x64, 0xb1, 0x7b, 0x31, 0x45, 0xaf, + 0x3b, 0x4f, 0xbc, 0xf6, 0xe3, 0xab, 0xe6, 0xc3, 0x51, 0xab, 0xd9, 0xf6, 0xda, 0xcd, 0x4e, 0xf0, 0xc4, 0xeb, 0xe8, + 0x7f, 0xbd, 0x96, 0x77, 0xe4, 0xb5, 0x83, 0x27, 0xde, 0x91, 0xd7, 0x09, 0x9e, 0x5c, 0x3d, 0xd4, 0xc9, 0x0c, 0x11, + 0x3a, 0xec, 0x1d, 0xc3, 0x87, 0x34, 0x6f, 0x28, 0xfa, 0x1c, 0xe9, 0xcf, 0xd5, 0xa2, 0xcf, 0xdc, 0xd2, 0xf6, 0xd3, + 0xad, 0xc5, 0x9d, 0x27, 0x5b, 0x8b, 0x8f, 0x1e, 0x6f, 0x2d, 0x7e, 0xf8, 0xa8, 0x5e, 0x7c, 0x38, 0xd1, 0x55, 0xe5, + 0x29, 0xa7, 0x68, 0x16, 0xc9, 0x8c, 0xdf, 0xf8, 0x6d, 0xaf, 0xe5, 0xb5, 0xbc, 0x26, 0xfc, 0xf7, 0xa4, 0x83, 0xcb, + 0x5e, 0x97, 0xd0, 0xab, 0x5c, 0xe5, 0x93, 0xa7, 0x5e, 0xfb, 0xf1, 0xcb, 0xce, 0xe3, 0x11, 0xb4, 0x53, 0x0b, 0x6d, + 0x7b, 0xed, 0xab, 0xa3, 0xa7, 0xa3, 0x96, 0x07, 0x1d, 0xdb, 0xf0, 0x67, 0xfa, 0xa8, 0x33, 0xd2, 0x0f, 0x2d, 0xa8, + 0xff, 0xb6, 0xfd, 0x24, 0x6f, 0x35, 0xdb, 0xf0, 0xe7, 0x97, 0x52, 0x23, 0x06, 0x7d, 0xdc, 0x1d, 0xf7, 0x61, 0xcb, + 0x3b, 0x7a, 0x3a, 0xed, 0x04, 0x9f, 0x5f, 0x3d, 0x09, 0x9e, 0x4e, 0xdb, 0x4f, 0xbe, 0xd5, 0x4f, 0x49, 0xb3, 0x13, + 0x7c, 0x0e, 0x7f, 0xbf, 0x3d, 0x6a, 0x4d, 0x9b, 0xed, 0xe0, 0xe9, 0xd5, 0x51, 0x70, 0x94, 0x34, 0x1f, 0x07, 0x4f, + 0xe1, 0x6f, 0x35, 0xdc, 0x54, 0xcc, 0x18, 0xf2, 0x60, 0xbf, 0xd7, 0xcc, 0x2d, 0x77, 0x8e, 0xce, 0x43, 0xef, 0xd1, + 0xc3, 0x97, 0x4f, 0xaf, 0x9a, 0x0f, 0xa7, 0xed, 0xce, 0x55, 0x73, 0xe7, 0xcf, 0x6f, 0x01, 0xf1, 0x66, 0xe0, 0x88, + 0xc1, 0x75, 0x22, 0x8b, 0x38, 0xf5, 0x36, 0xdc, 0x07, 0x24, 0xdf, 0x65, 0x5e, 0x67, 0x9f, 0x36, 0xaf, 0x53, 0x76, + 0x1f, 0xfb, 0x3a, 0xfb, 0xc3, 0xed, 0xeb, 0x9c, 0xad, 0x39, 0x55, 0x6f, 0xe5, 0x86, 0x19, 0xbd, 0x6e, 0x7b, 0xbd, + 0x93, 0xfe, 0x80, 0xc3, 0x57, 0x97, 0x8a, 0xee, 0x2d, 0xbc, 0x70, 0xdb, 0xf5, 0x36, 0x08, 0x38, 0xc8, 0xb7, 0x52, + 0x9f, 0x64, 0xb1, 0x0b, 0x21, 0xc9, 0xa7, 0x11, 0xf2, 0xed, 0x7d, 0xf0, 0x91, 0xfc, 0xe1, 0xf8, 0x10, 0x2e, 0x3e, + 0x6a, 0x7e, 0x5e, 0x65, 0xcf, 0x2a, 0x7b, 0xf4, 0x4c, 0x3d, 0xfb, 0x70, 0xe3, 0xa4, 0x81, 0x0e, 0x19, 0x14, 0xe5, + 0x48, 0xc7, 0x15, 0x5e, 0xfe, 0x1a, 0x97, 0xb4, 0xbe, 0x5e, 0x46, 0x91, 0x31, 0xfe, 0xe7, 0xf0, 0x65, 0x05, 0xfb, + 0x70, 0xa5, 0x2f, 0x3c, 0x53, 0xd4, 0x09, 0x5a, 0x41, 0xab, 0x74, 0x1c, 0xc0, 0x95, 0x42, 0xba, 0x14, 0x32, 0x82, + 0x8f, 0x7b, 0x26, 0x62, 0xa2, 0x3e, 0x03, 0x0a, 0x2f, 0x5f, 0x57, 0x1f, 0x64, 0xd5, 0xef, 0xbd, 0x0f, 0x11, 0x32, + 0x2f, 0x22, 0x80, 0x2b, 0x6b, 0xdf, 0xc0, 0xb5, 0x3e, 0xeb, 0xb1, 0x9e, 0x81, 0x4d, 0xfd, 0x9a, 0xc5, 0x3c, 0xf2, + 0x91, 0x3f, 0xcf, 0xd8, 0x98, 0x65, 0x79, 0xb3, 0x76, 0xd7, 0x4d, 0x5d, 0x73, 0xc3, 0xc8, 0x7e, 0x46, 0x32, 0x83, + 0x97, 0x09, 0xd3, 0x81, 0xf1, 0x6a, 0x21, 0xa3, 0xe6, 0xa3, 0x82, 0xd8, 0x92, 0x0c, 0x38, 0x7a, 0xa5, 0x1a, 0x20, + 0xad, 0x1b, 0xb4, 0x83, 0xce, 0x23, 0xac, 0x79, 0x09, 0xbc, 0xa4, 0xf5, 0x7b, 0xbf, 0x79, 0xd4, 0xfa, 0x13, 0x76, + 0xba, 0x95, 0x03, 0x0d, 0x8d, 0x53, 0x27, 0xab, 0x3e, 0xbf, 0x5b, 0xbf, 0x88, 0x88, 0x34, 0x45, 0x7c, 0xa6, 0xd7, + 0x0e, 0xaf, 0x7b, 0x35, 0xf1, 0x43, 0x7d, 0x9d, 0x7e, 0xcc, 0x27, 0xbe, 0xfb, 0x71, 0x55, 0xfd, 0x12, 0x58, 0xf5, + 0x4d, 0x66, 0x5c, 0x54, 0x4d, 0x32, 0xbc, 0x54, 0xbe, 0x78, 0x9e, 0x7a, 0xd9, 0x6a, 0xe5, 0x67, 0xe0, 0x88, 0xa5, + 0x0e, 0x4e, 0xe1, 0x19, 0xd7, 0x90, 0x9c, 0x91, 0x12, 0x20, 0x85, 0x60, 0x9a, 0xe9, 0xff, 0xab, 0x62, 0xfb, 0xc3, + 0xb8, 0x57, 0x82, 0x24, 0x4a, 0x27, 0x40, 0x85, 0x51, 0x3a, 0xd9, 0x70, 0xde, 0xe8, 0x70, 0xc2, 0x5a, 0x69, 0x35, + 0x54, 0xe5, 0xa4, 0xc9, 0x9f, 0xdd, 0xbe, 0x37, 0x6f, 0x8b, 0x42, 0xe0, 0x03, 0x55, 0xbe, 0xef, 0xea, 0xcd, 0xb6, + 0x0d, 0xfa, 0x40, 0x7f, 0xae, 0x5c, 0x65, 0xc3, 0x81, 0xf4, 0x83, 0x2b, 0x86, 0x9e, 0xb1, 0x79, 0x28, 0xd2, 0xb2, + 0x2f, 0x66, 0x57, 0x7c, 0x64, 0x44, 0x18, 0xf1, 0xcc, 0x35, 0xeb, 0xa6, 0xda, 0x1a, 0xda, 0x26, 0xda, 0xea, 0x1f, + 0x45, 0x2a, 0xdf, 0x99, 0xa6, 0x02, 0xf5, 0x1e, 0x94, 0xdf, 0x8a, 0xdc, 0xb5, 0x09, 0xf0, 0x0d, 0xf5, 0x41, 0xc6, + 0x92, 0x7f, 0xa6, 0x0f, 0xe0, 0x2b, 0xea, 0x0f, 0x86, 0xf0, 0x01, 0xef, 0x40, 0x89, 0x82, 0x07, 0xd5, 0xc7, 0xd4, + 0x81, 0x0f, 0x36, 0x6e, 0x66, 0x09, 0xb9, 0xaf, 0xf8, 0x36, 0xa2, 0xba, 0xf3, 0xa8, 0x12, 0xd5, 0x9d, 0x47, 0xae, + 0xf4, 0x6c, 0x7b, 0xed, 0x4e, 0xf0, 0xc8, 0x11, 0x00, 0x57, 0x4d, 0xf8, 0xbf, 0x26, 0x02, 0x1e, 0x06, 0x8f, 0x4a, + 0x19, 0xf0, 0xaa, 0xdd, 0x09, 0x8e, 0xb4, 0xb8, 0xe9, 0x04, 0x8f, 0x7e, 0x50, 0x0c, 0x5a, 0x33, 0xe7, 0xfa, 0x81, + 0xd8, 0x12, 0xaa, 0xd1, 0x19, 0x7d, 0x88, 0xf8, 0xe5, 0x17, 0xe9, 0xcc, 0xf9, 0x34, 0x2e, 0xa1, 0xe7, 0x51, 0x06, + 0x9f, 0x05, 0xa9, 0x9f, 0xdd, 0x5a, 0x1d, 0xa9, 0xf1, 0x8b, 0x2d, 0x53, 0xc0, 0x09, 0x47, 0xc4, 0xbd, 0xa7, 0x0c, + 0x97, 0x7c, 0xd5, 0x4b, 0x94, 0xed, 0xbb, 0xe4, 0x76, 0x93, 0xb6, 0x6e, 0x68, 0xdf, 0x57, 0xa7, 0x98, 0x05, 0x57, + 0x2f, 0xac, 0x57, 0x93, 0x7c, 0x19, 0x17, 0xeb, 0xf3, 0x43, 0x62, 0x61, 0x26, 0x9c, 0xab, 0xda, 0xac, 0x4a, 0x87, + 0x8f, 0x39, 0x5c, 0xae, 0x2f, 0x0a, 0x0b, 0x7a, 0xcd, 0x19, 0x58, 0x61, 0x49, 0xf1, 0x0b, 0x96, 0xf7, 0x11, 0x14, + 0xa1, 0x10, 0x29, 0x47, 0x12, 0x2a, 0x3f, 0x8d, 0x52, 0x12, 0x76, 0x55, 0x40, 0xd4, 0x95, 0x16, 0x38, 0xb5, 0x80, + 0x1f, 0x84, 0x0f, 0x0e, 0x76, 0x9e, 0x17, 0xa5, 0x8d, 0xc1, 0x5a, 0xab, 0x4f, 0x2a, 0xb8, 0xac, 0x08, 0xb9, 0x88, + 0x2e, 0xc7, 0x55, 0x28, 0xc4, 0x06, 0x4f, 0x97, 0x2c, 0x92, 0x41, 0x94, 0xea, 0x14, 0x05, 0x87, 0x61, 0x91, 0x36, + 0x3b, 0xc2, 0x85, 0x90, 0x91, 0xf3, 0xcd, 0x54, 0x73, 0xce, 0x85, 0x8c, 0xec, 0xc5, 0xc3, 0x54, 0xd6, 0x32, 0xf3, + 0xa7, 0x9d, 0xde, 0xdb, 0xf7, 0x27, 0x9e, 0x3e, 0x9e, 0xc7, 0x87, 0xd3, 0x4e, 0xef, 0x58, 0x59, 0xe6, 0xfa, 0xda, + 0x12, 0xd5, 0xd7, 0x96, 0x3c, 0x73, 0x85, 0x0d, 0xe2, 0x35, 0xc5, 0xa1, 0x5e, 0x36, 0xf2, 0x58, 0x3a, 0xd2, 0x3e, + 0xc5, 0xd9, 0x22, 0x91, 0x1c, 0x5e, 0x08, 0x7c, 0x08, 0x5d, 0x9b, 0xb0, 0x61, 0x65, 0x96, 0xab, 0xd5, 0x70, 0x64, + 0x6a, 0x3d, 0x90, 0x63, 0x9e, 0x30, 0x9b, 0xd7, 0x6a, 0x86, 0x2a, 0xf3, 0xb0, 0x37, 0x5b, 0xe7, 0x8b, 0xcb, 0x19, + 0x97, 0xc8, 0x66, 0x8b, 0x7f, 0x30, 0x1d, 0x8e, 0xd5, 0x54, 0xbd, 0x8b, 0xc2, 0xb8, 0x48, 0xed, 0xc7, 0x4f, 0xd6, + 0x3e, 0x37, 0xaf, 0x57, 0x6f, 0x24, 0x04, 0xdc, 0x3f, 0x9a, 0x1e, 0xf5, 0x4a, 0xa7, 0xa4, 0x5b, 0x57, 0x1c, 0x1f, + 0x4e, 0x8f, 0x7a, 0x17, 0xe1, 0xdc, 0x8c, 0xf7, 0x4a, 0x6c, 0x7c, 0xba, 0xbe, 0xe4, 0x98, 0x7d, 0x95, 0x68, 0xaf, + 0x6f, 0x74, 0x1a, 0x80, 0x47, 0x22, 0x41, 0xbd, 0x63, 0xa3, 0x0c, 0x78, 0x2a, 0xe8, 0x8a, 0x1e, 0xb5, 0x6c, 0xee, + 0x7e, 0x22, 0x94, 0xb6, 0xa4, 0xbb, 0x38, 0x93, 0xd4, 0xfc, 0xba, 0xd3, 0x76, 0xef, 0x38, 0x32, 0x6a, 0x26, 0x30, + 0x8f, 0x3c, 0x3c, 0x84, 0xce, 0xa0, 0xcb, 0x05, 0x5c, 0x1c, 0x5e, 0xb3, 0xcb, 0x66, 0x34, 0xe7, 0x95, 0x13, 0x15, + 0x94, 0x8e, 0x72, 0x4a, 0x51, 0xcd, 0x04, 0x3f, 0xa3, 0xb5, 0x45, 0x2a, 0x16, 0x5e, 0x18, 0x0f, 0xad, 0xd2, 0xd5, + 0x59, 0x24, 0x91, 0xa7, 0x39, 0xbc, 0xf5, 0xe4, 0x1a, 0xd9, 0x5b, 0xa0, 0xde, 0xbf, 0xfd, 0x8f, 0xff, 0x65, 0x9c, + 0xb3, 0xc7, 0x87, 0xd3, 0xb6, 0x1d, 0x6b, 0x0d, 0xd1, 0xc5, 0x31, 0x5c, 0x77, 0xab, 0xa2, 0x89, 0xec, 0xa6, 0x39, + 0xc9, 0x78, 0xdc, 0x9c, 0x46, 0xc9, 0x18, 0xf5, 0x76, 0x23, 0xc8, 0xbd, 0xe7, 0x62, 0xa0, 0xae, 0x17, 0x01, 0x09, + 0xfe, 0xa6, 0x9b, 0x1a, 0x36, 0xe1, 0x5f, 0x9d, 0x56, 0xf7, 0xde, 0x46, 0x75, 0xa0, 0x6a, 0x77, 0x37, 0x32, 0xf3, + 0x8d, 0x24, 0xc3, 0xd4, 0xb2, 0xda, 0x95, 0x8d, 0x02, 0x79, 0x65, 0x34, 0xe4, 0xff, 0xfe, 0xcf, 0xff, 0xf2, 0xdf, + 0xec, 0x23, 0x04, 0x39, 0xfe, 0xed, 0xbf, 0xff, 0xe7, 0xff, 0xf3, 0xbf, 0xff, 0x2b, 0xa4, 0xf9, 0x9b, 0x40, 0x88, + 0xe2, 0x13, 0x5e, 0x15, 0x05, 0xd1, 0x0c, 0xc3, 0x83, 0x4c, 0xb8, 0x19, 0xcf, 0x25, 0x1f, 0xd5, 0x2f, 0x71, 0x9c, + 0xa9, 0x09, 0xd5, 0x61, 0x33, 0xd0, 0xa9, 0x43, 0x5b, 0x54, 0x34, 0x52, 0x43, 0xb9, 0xa2, 0xc5, 0xe2, 0xf8, 0x10, + 0xf0, 0x7d, 0xbf, 0x7b, 0x6f, 0x41, 0xb9, 0x1d, 0x4b, 0xeb, 0xfa, 0x83, 0x92, 0xa2, 0x2a, 0xf7, 0xc0, 0x29, 0xbf, + 0x84, 0xc7, 0xb0, 0xe3, 0x14, 0xab, 0xdd, 0xab, 0xf5, 0xe9, 0xfe, 0xb4, 0xc8, 0x25, 0x1f, 0x03, 0xca, 0xb5, 0x83, + 0x51, 0xc5, 0x3f, 0x9b, 0xa0, 0xfe, 0x25, 0xb7, 0x85, 0x1a, 0x45, 0xdb, 0x8c, 0x0f, 0x9f, 0xfe, 0xa9, 0xf8, 0xcb, + 0x0c, 0x94, 0x2c, 0xcf, 0x9f, 0x45, 0x37, 0xc6, 0x92, 0x7c, 0xdc, 0x6a, 0xcd, 0x6f, 0xf0, 0xb2, 0x9a, 0x81, 0xec, + 0x9a, 0x4c, 0x39, 0x25, 0xdd, 0x01, 0x55, 0xe0, 0xb4, 0xf4, 0x7f, 0xb6, 0x3c, 0x70, 0xa2, 0x7a, 0xad, 0xa2, 0xf8, + 0xf3, 0x52, 0xb9, 0xe0, 0xf8, 0x2f, 0x10, 0xe0, 0x34, 0xde, 0xca, 0x4b, 0xe1, 0x2e, 0x6e, 0xe9, 0xf4, 0xea, 0xe8, + 0x5e, 0xd3, 0xf6, 0xe6, 0x75, 0x2e, 0x37, 0x40, 0xeb, 0x86, 0x56, 0x1f, 0x42, 0xb0, 0x74, 0xda, 0x26, 0xd3, 0xce, + 0xb2, 0x1c, 0x5e, 0x4a, 0x31, 0x73, 0x23, 0xb2, 0x2c, 0x62, 0x23, 0x36, 0xb6, 0x5e, 0x5e, 0x53, 0xaf, 0xa3, 0xad, + 0xc5, 0xf4, 0x68, 0xcb, 0x5c, 0x06, 0x24, 0x15, 0x89, 0xf5, 0x5a, 0xc5, 0x67, 0x70, 0x02, 0x97, 0xe3, 0x44, 0x44, + 0x32, 0x54, 0x04, 0xdb, 0x75, 0xe3, 0xba, 0x11, 0xb0, 0x19, 0xb1, 0x74, 0xe0, 0xe9, 0xea, 0xa6, 0xe0, 0x6f, 0xad, + 0x5f, 0xba, 0x2b, 0x02, 0xd5, 0xdd, 0x1d, 0x4a, 0xbb, 0x6b, 0xbe, 0x35, 0xe1, 0xd2, 0x97, 0x35, 0x3f, 0x87, 0x91, + 0x31, 0x1d, 0xbc, 0xbd, 0x5e, 0x8b, 0x6a, 0x5d, 0xfb, 0x95, 0xf4, 0x91, 0x02, 0x13, 0xad, 0xb7, 0x52, 0x85, 0xd0, + 0xea, 0x25, 0xfd, 0xb6, 0xb4, 0x82, 0xa2, 0xf9, 0x5c, 0x35, 0xc4, 0xdd, 0xe3, 0x43, 0xad, 0xbc, 0x02, 0xf7, 0x50, + 0xb9, 0x00, 0x3a, 0xf4, 0x6e, 0x1a, 0x99, 0xa3, 0xa0, 0x7f, 0x99, 0xa0, 0x3c, 0x7c, 0x3c, 0xab, 0xf7, 0xff, 0x00, + 0x08, 0x50, 0x84, 0x3d, 0xcd, 0x86, 0x00, 0x00}; } // namespace web_server } // namespace esphome diff --git a/esphome/components/web_server/server_index_v3.h b/esphome/components/web_server/server_index_v3.h index f2f278b08f..f649a9385e 100644 --- a/esphome/components/web_server/server_index_v3.h +++ b/esphome/components/web_server/server_index_v3.h @@ -3632,366 +3632,367 @@ const uint8_t INDEX_GZ[] PROGMEM = { 0xe7, 0xec, 0xd8, 0x98, 0x31, 0x94, 0x4f, 0x43, 0x40, 0x9e, 0xd0, 0xf7, 0x01, 0xcd, 0x25, 0x67, 0x23, 0xad, 0x2b, 0xfb, 0x10, 0x17, 0x97, 0xdc, 0x84, 0x6a, 0x31, 0x6f, 0x2b, 0x3d, 0x2a, 0xc4, 0x1b, 0x16, 0x80, 0x65, 0xe9, 0x69, 0x93, 0x82, 0x6c, 0x94, 0x54, 0x45, 0xfe, 0x13, 0xbf, 0x03, 0xae, 0xad, 0xac, 0xe4, 0x0a, 0x78, 0xf5, 0xff, 0xd3, - 0xdc, 0xb3, 0x2e, 0xb7, 0x6d, 0x5c, 0xfd, 0xbf, 0x4f, 0x01, 0xc3, 0xae, 0x03, 0xd8, 0x00, 0x04, 0x90, 0xa2, 0x28, - 0x93, 0x22, 0x95, 0xc4, 0x76, 0xa6, 0xea, 0x28, 0x71, 0xc6, 0x56, 0x3d, 0x6d, 0x14, 0x8d, 0x08, 0x82, 0x4b, 0x12, - 0x35, 0x08, 0x60, 0x00, 0x50, 0xa2, 0x42, 0xa3, 0xcf, 0xd2, 0x67, 0xe9, 0x93, 0x7d, 0x73, 0xce, 0x5e, 0xb0, 0xb8, - 0x91, 0x54, 0xec, 0xb4, 0xdf, 0xa4, 0xaa, 0x89, 0xc5, 0xee, 0x62, 0xf7, 0xec, 0xee, 0xd9, 0x73, 0x3f, 0xee, 0x82, - 0xc9, 0x5e, 0x0c, 0x8d, 0x1c, 0xf6, 0xb9, 0xcf, 0x9f, 0x89, 0x85, 0x5b, 0x12, 0x08, 0x3e, 0x2b, 0x8b, 0x16, 0x8b, - 0x80, 0x68, 0x2a, 0x4f, 0x1e, 0xa2, 0x1a, 0xe2, 0x33, 0xe7, 0x4f, 0x6c, 0x1e, 0xb1, 0x53, 0xcf, 0xdb, 0x8e, 0x16, - 0x9f, 0x31, 0x11, 0x21, 0xed, 0x28, 0xe5, 0x8a, 0xb2, 0xd9, 0x3b, 0x54, 0x6f, 0xb0, 0x75, 0x29, 0x8e, 0xae, 0x39, - 0x8b, 0xd6, 0xd3, 0x80, 0x98, 0xb8, 0xdd, 0xe1, 0x93, 0xdb, 0xe9, 0x7a, 0x3a, 0x85, 0x2c, 0x2d, 0x4f, 0x6c, 0x03, - 0xe2, 0xce, 0x44, 0x29, 0xf2, 0x83, 0xb9, 0x3e, 0x84, 0x49, 0x59, 0x59, 0x75, 0xf8, 0x60, 0x2b, 0x02, 0xa2, 0x1e, - 0xfa, 0x81, 0x0c, 0x78, 0xbf, 0x86, 0x53, 0x3b, 0x52, 0x3f, 0xc0, 0xee, 0x4b, 0xd5, 0x61, 0xd3, 0xd1, 0x1f, 0x5d, - 0xab, 0x1f, 0x10, 0xc6, 0x98, 0xbd, 0xf8, 0x35, 0xdd, 0xbd, 0xaa, 0xa1, 0x52, 0xa5, 0xf7, 0x1a, 0xf3, 0x18, 0x80, - 0xd0, 0xf7, 0x8d, 0xef, 0x2e, 0xc2, 0x28, 0xcd, 0x7c, 0x4f, 0xbd, 0x19, 0x5e, 0xf8, 0xda, 0xf5, 0x2a, 0xd3, 0xf4, - 0x1b, 0xc3, 0xcb, 0xe4, 0x14, 0x28, 0x1c, 0x61, 0x62, 0x06, 0x94, 0xb6, 0x4a, 0xf2, 0x09, 0xda, 0x59, 0x91, 0xa3, - 0x66, 0xac, 0xe4, 0x65, 0x23, 0xa8, 0x57, 0xc9, 0xa7, 0x82, 0x89, 0xa1, 0x54, 0x6c, 0xa9, 0x0f, 0x29, 0xa7, 0xf2, - 0x7a, 0xbd, 0xc5, 0xab, 0x3c, 0x2b, 0x6e, 0x4b, 0x8c, 0x01, 0xcc, 0x1d, 0x67, 0xe8, 0xf3, 0x13, 0xd9, 0xe8, 0xb3, - 0x74, 0xef, 0x4e, 0xbe, 0x2b, 0xd3, 0x05, 0x70, 0x7f, 0x83, 0xc5, 0x45, 0x18, 0x65, 0x0a, 0x04, 0xb6, 0x81, 0x2f, - 0x4e, 0xaa, 0x46, 0x62, 0xac, 0x57, 0x4d, 0xcf, 0x19, 0x32, 0xf8, 0x1e, 0x2f, 0x3f, 0x8d, 0x85, 0x37, 0x2b, 0x45, - 0xb0, 0xa0, 0xcc, 0x42, 0x08, 0x0b, 0x98, 0x45, 0x97, 0xd1, 0x7d, 0x55, 0x0f, 0xf2, 0x7a, 0xb2, 0xff, 0xee, 0xd5, - 0x38, 0x99, 0xcc, 0xb3, 0xfa, 0x69, 0x2c, 0x31, 0x29, 0x27, 0x74, 0x2a, 0x67, 0x0a, 0x0d, 0x3f, 0x38, 0x0d, 0x93, - 0x81, 0x9d, 0x18, 0xde, 0x05, 0x80, 0x92, 0xd8, 0x35, 0x3d, 0xc9, 0x6f, 0x79, 0xea, 0x64, 0x9e, 0xb8, 0x58, 0xba, - 0x9c, 0x01, 0xbb, 0x86, 0xf1, 0x3a, 0xc3, 0x50, 0xbb, 0x30, 0x00, 0x92, 0xab, 0x0a, 0x86, 0xee, 0x04, 0x2c, 0x5d, - 0x90, 0x89, 0xb9, 0xaa, 0xf8, 0xb3, 0x7a, 0x19, 0x23, 0x7a, 0x01, 0x79, 0x21, 0x7e, 0x47, 0x41, 0x15, 0x3c, 0x26, - 0x6c, 0x1a, 0x9e, 0x51, 0xc4, 0xa9, 0xd7, 0x3c, 0x54, 0xe8, 0x34, 0x60, 0x06, 0x8f, 0xf6, 0x33, 0xd4, 0x82, 0xc6, - 0xc9, 0x42, 0xf8, 0xcd, 0xd2, 0x34, 0x27, 0xcf, 0xb6, 0x61, 0x7e, 0xfe, 0x6c, 0x9b, 0xe6, 0xa3, 0x67, 0x5b, 0x17, - 0x28, 0xb9, 0x5c, 0x85, 0x89, 0x16, 0x8e, 0x3a, 0xc5, 0xf4, 0x60, 0x53, 0xd1, 0x72, 0x05, 0x35, 0xf5, 0x23, 0xa6, - 0x8f, 0x8f, 0x13, 0x7f, 0xe5, 0x26, 0x0f, 0x54, 0x7d, 0x6f, 0xc8, 0x3a, 0x7e, 0x5d, 0x55, 0x28, 0x5e, 0xa7, 0xf3, - 0xa5, 0x28, 0x5e, 0x55, 0xbe, 0x15, 0x65, 0x84, 0x4d, 0x4e, 0xe8, 0x30, 0xe1, 0x5b, 0xb7, 0xea, 0x4b, 0x62, 0xcd, - 0x48, 0xe6, 0xfa, 0x01, 0x6d, 0x32, 0xe4, 0xc9, 0xe9, 0x6b, 0xb3, 0x49, 0xcb, 0xb3, 0x09, 0xcb, 0xdb, 0x05, 0x27, - 0x43, 0x31, 0x3e, 0x1d, 0x37, 0xce, 0x0c, 0x93, 0x56, 0x35, 0x2f, 0x20, 0x7d, 0xf7, 0x5f, 0x85, 0x3e, 0x01, 0xe8, - 0x87, 0x00, 0x7d, 0x12, 0x7a, 0xd1, 0x8c, 0xfc, 0xed, 0xfd, 0x85, 0xc8, 0x92, 0x05, 0x02, 0x9f, 0x09, 0xdb, 0x87, - 0x29, 0x92, 0x0b, 0x09, 0x92, 0x0a, 0x34, 0x9f, 0x95, 0x22, 0x76, 0x4c, 0x92, 0xab, 0xca, 0x39, 0x1d, 0x3b, 0x99, - 0xd1, 0x51, 0x8f, 0x22, 0x6c, 0x95, 0xe4, 0x67, 0x47, 0xb4, 0x36, 0xbd, 0xdc, 0x68, 0x25, 0x00, 0x43, 0x02, 0x33, - 0x2c, 0xa0, 0x00, 0x09, 0x3d, 0x47, 0x4e, 0xc1, 0x3f, 0x58, 0x2b, 0x14, 0xab, 0x3b, 0xe7, 0x65, 0xca, 0x04, 0x5b, - 0xa9, 0xe3, 0x33, 0x4c, 0xd1, 0x05, 0xd7, 0x33, 0x04, 0xf5, 0x38, 0x3b, 0xa2, 0x8f, 0x4a, 0xe5, 0x00, 0x14, 0x9d, - 0x70, 0x4e, 0x6e, 0xc0, 0x3a, 0x78, 0xd4, 0xc9, 0x80, 0x8c, 0xf0, 0x50, 0xea, 0xe6, 0xaa, 0xb2, 0x62, 0x94, 0x10, - 0x8b, 0x1e, 0x04, 0xa1, 0x05, 0x6c, 0x38, 0xaa, 0xaa, 0xb2, 0x72, 0x37, 0x38, 0x73, 0xfe, 0xc6, 0xdd, 0x68, 0x0e, - 0x7b, 0x55, 0x1c, 0xad, 0xb4, 0x7c, 0xb4, 0x3c, 0xb6, 0xb8, 0xe0, 0x37, 0x20, 0x18, 0xe9, 0x25, 0xea, 0x63, 0x1b, - 0x16, 0x77, 0xc9, 0x17, 0x77, 0xd6, 0xb2, 0xb8, 0xb3, 0x1d, 0x8b, 0x1b, 0xb0, 0x85, 0x54, 0x04, 0xe8, 0x12, 0xf4, - 0x05, 0x13, 0xc0, 0x63, 0x74, 0xc5, 0x80, 0x9d, 0x33, 0x84, 0x93, 0x99, 0x06, 0x60, 0x0b, 0xd5, 0x02, 0xab, 0x26, - 0xb8, 0x48, 0x80, 0xa8, 0x4f, 0x5c, 0x9c, 0x3a, 0x3e, 0x6f, 0x48, 0xb9, 0xa9, 0x05, 0xd5, 0xf9, 0xc2, 0x2e, 0xa5, - 0xe9, 0xc4, 0xb5, 0x65, 0xcb, 0x4c, 0x97, 0x3b, 0x66, 0xea, 0x95, 0x8e, 0x2e, 0x9b, 0x36, 0x3d, 0x84, 0xf2, 0xa4, - 0x60, 0x0f, 0x82, 0x7d, 0x28, 0x6e, 0x99, 0xf2, 0x3e, 0x6c, 0x47, 0xa9, 0xd2, 0x8e, 0x8a, 0xdd, 0x34, 0xbd, 0x8f, - 0x12, 0x50, 0xb0, 0x40, 0x37, 0x8f, 0xdb, 0x52, 0x2b, 0x3f, 0x64, 0xb1, 0x5b, 0x5a, 0x37, 0x53, 0xf1, 0x5e, 0xde, - 0x52, 0x9d, 0x5e, 0x8f, 0xd6, 0x88, 0xdd, 0x2c, 0x23, 0x09, 0x02, 0xdd, 0x85, 0x20, 0xdf, 0xff, 0x4f, 0xb6, 0x59, - 0x03, 0x0e, 0x09, 0xf4, 0x02, 0xab, 0x23, 0x86, 0x8e, 0x81, 0x94, 0x4a, 0xf8, 0xbd, 0x2b, 0xc5, 0x81, 0x4b, 0x04, - 0xe0, 0x7f, 0xc2, 0xe3, 0xaa, 0x25, 0x92, 0xa7, 0x92, 0x73, 0xa2, 0x5b, 0xb1, 0x3b, 0xfb, 0x00, 0x7a, 0x3c, 0xad, - 0x63, 0x80, 0x4d, 0xae, 0x1c, 0xf5, 0x2d, 0xa1, 0xb4, 0x9d, 0x57, 0x20, 0x49, 0xc4, 0x92, 0xcc, 0xe2, 0x09, 0x9c, - 0x25, 0x5d, 0x73, 0x7e, 0xb3, 0xed, 0xe4, 0x47, 0x0b, 0x5f, 0xaf, 0x61, 0x4d, 0x40, 0x6d, 0xc1, 0x68, 0x2c, 0x58, - 0xac, 0xc0, 0x70, 0x4e, 0x74, 0x10, 0xf4, 0x5e, 0x43, 0xfa, 0x52, 0x9b, 0xf3, 0xaf, 0x93, 0x04, 0x2e, 0xa9, 0x6b, - 0xfb, 0x26, 0x7f, 0xbe, 0xc0, 0x5f, 0xce, 0x4d, 0xfe, 0x7c, 0x8a, 0xbf, 0x3a, 0x37, 0x98, 0xa8, 0xae, 0x81, 0x6f, - 0x97, 0xe6, 0xac, 0x8e, 0x4b, 0xfb, 0x89, 0x9a, 0x9b, 0x3d, 0x62, 0xdb, 0xb0, 0x05, 0x7e, 0xfa, 0x6c, 0x9b, 0x82, - 0x83, 0xa5, 0x3c, 0x87, 0xd0, 0x4a, 0xf4, 0xbc, 0xb1, 0x7c, 0xd1, 0x52, 0x3e, 0xd5, 0xff, 0xcb, 0xf7, 0x3c, 0xee, - 0x92, 0xa8, 0xb8, 0x53, 0xca, 0x52, 0x87, 0xdb, 0xa9, 0x1f, 0xba, 0xc9, 0xc3, 0x2d, 0xe5, 0x26, 0x34, 0x4e, 0xaa, - 0x0b, 0x69, 0x0a, 0xa5, 0x26, 0xcb, 0xda, 0xad, 0x4c, 0x92, 0xe7, 0x3e, 0xb0, 0x8b, 0x7e, 0xf4, 0xf7, 0x44, 0xa2, - 0xd2, 0x4a, 0xfc, 0x26, 0x5b, 0x90, 0xd2, 0x87, 0x6e, 0x9f, 0x6d, 0x35, 0x52, 0xef, 0xa6, 0x32, 0xdb, 0x0a, 0x19, - 0x08, 0xcb, 0x83, 0xbc, 0xeb, 0x6a, 0xe6, 0x0f, 0x50, 0x7d, 0x35, 0x8d, 0x36, 0xe6, 0xb3, 0x6d, 0x76, 0xae, 0xae, - 0xdc, 0xe4, 0x13, 0x99, 0x99, 0x9e, 0x9f, 0x78, 0x01, 0x51, 0x07, 0xea, 0x34, 0x70, 0xc3, 0x4f, 0xec, 0xd1, 0x8c, - 0xd6, 0x19, 0x2a, 0xa4, 0xf7, 0xb2, 0xba, 0x1c, 0x26, 0x54, 0x42, 0x87, 0xb4, 0x69, 0x03, 0x14, 0x94, 0xd7, 0x42, - 0xbe, 0x55, 0xd0, 0x85, 0x45, 0x2d, 0x03, 0xec, 0x29, 0x41, 0x47, 0x0e, 0x0e, 0xaa, 0x86, 0x8a, 0xeb, 0xa5, 0x1a, - 0xf2, 0x54, 0xa9, 0x6c, 0x52, 0x64, 0x58, 0xbc, 0xc5, 0x1e, 0x7e, 0xff, 0xe7, 0x68, 0xee, 0xeb, 0xc3, 0x3f, 0xc7, - 0x68, 0xbc, 0xf6, 0x0f, 0xca, 0x8d, 0xdd, 0x34, 0x5d, 0xaf, 0xc8, 0x8c, 0xea, 0xe2, 0xce, 0x8b, 0xa1, 0x94, 0x69, - 0x79, 0x79, 0x38, 0xbf, 0xae, 0x3b, 0xfd, 0xe3, 0xd7, 0x60, 0x23, 0x00, 0x34, 0x5d, 0x34, 0x9f, 0xab, 0x05, 0x57, - 0xbd, 0xa7, 0x99, 0x73, 0xfc, 0xeb, 0xfa, 0x87, 0xb7, 0xf6, 0x0f, 0xa2, 0x71, 0xa8, 0xea, 0xf9, 0x84, 0x2b, 0x3c, - 0x19, 0x69, 0x2a, 0x8d, 0x97, 0xcf, 0x68, 0xee, 0x86, 0xed, 0xd3, 0xb9, 0x2e, 0xed, 0xb2, 0x98, 0x90, 0x19, 0xd8, - 0xc2, 0x1a, 0xb5, 0xd2, 0xdb, 0x80, 0xdc, 0x11, 0xa1, 0x4c, 0xad, 0x7f, 0xac, 0xa1, 0x05, 0x46, 0x7b, 0x63, 0x4a, - 0x5a, 0x46, 0x58, 0x49, 0x53, 0x9a, 0xe0, 0x1c, 0xd8, 0xcc, 0xe5, 0x5d, 0x5e, 0xd9, 0xd5, 0x13, 0x43, 0x95, 0x06, - 0xd0, 0x3a, 0xb2, 0xf3, 0x96, 0xf2, 0x01, 0xa6, 0x7a, 0x6e, 0x1e, 0x9b, 0xe1, 0xe8, 0x03, 0x88, 0x8e, 0xcd, 0xe0, - 0x14, 0xc0, 0xe6, 0xd7, 0x0a, 0x01, 0x44, 0x1b, 0xc4, 0x9a, 0xc4, 0x52, 0x2a, 0x95, 0x77, 0x70, 0xfb, 0x42, 0x34, - 0xb4, 0xe5, 0x92, 0x9f, 0xc6, 0xb5, 0x51, 0xca, 0x33, 0x9f, 0x62, 0x0a, 0xd5, 0x90, 0xa4, 0x69, 0x2b, 0xc0, 0xc4, - 0xa2, 0x1b, 0x6a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0xb0, 0x0d, 0xb8, 0x95, 0x71, 0x82, 0xd5, 0x6f, 0x21, 0x86, - 0xbf, 0x5d, 0x31, 0x0b, 0x91, 0x64, 0x31, 0x55, 0x99, 0xf6, 0xbe, 0xed, 0xfd, 0xbd, 0xca, 0x06, 0x55, 0xba, 0x29, - 0x1b, 0x87, 0xa6, 0x95, 0xb0, 0x5f, 0x4d, 0x40, 0x83, 0x1d, 0xf0, 0x31, 0x55, 0x50, 0x1c, 0x99, 0xcf, 0x89, 0x97, - 0xa5, 0x3a, 0x17, 0xd7, 0x88, 0x78, 0xad, 0xe0, 0xa7, 0xf3, 0x64, 0xa4, 0xfe, 0x04, 0x5e, 0xeb, 0x3c, 0xac, 0x11, - 0x1b, 0x10, 0x67, 0x5b, 0x9a, 0xc1, 0x44, 0x7b, 0x2c, 0x83, 0x88, 0x7d, 0x05, 0xd2, 0x71, 0x37, 0x94, 0xe3, 0xd0, - 0xd8, 0x15, 0x50, 0xec, 0x8b, 0x48, 0xd8, 0x91, 0xec, 0x46, 0x40, 0xbb, 0x8e, 0xef, 0xd6, 0xf9, 0xa1, 0xe7, 0xd8, - 0xb9, 0x6a, 0x80, 0xb7, 0xd4, 0xa7, 0x43, 0x0f, 0x3d, 0xb6, 0xea, 0x42, 0xab, 0x75, 0xf8, 0x98, 0x76, 0x1d, 0xe7, - 0x95, 0xa3, 0x1a, 0xd4, 0x48, 0x4d, 0xc2, 0x6d, 0x5e, 0x74, 0x47, 0x92, 0x2f, 0x9e, 0x4a, 0xb9, 0xf3, 0xc3, 0xc6, - 0x73, 0xe2, 0xd8, 0x80, 0x84, 0xb3, 0x28, 0x7e, 0xc4, 0x14, 0xba, 0xaa, 0xa1, 0x7a, 0x41, 0x94, 0x12, 0x79, 0x0e, - 0x54, 0xec, 0xf0, 0x85, 0x93, 0xf8, 0xf9, 0xfd, 0xdb, 0x0f, 0x1f, 0x54, 0x03, 0x73, 0x6f, 0xa6, 0x72, 0xef, 0x6c, - 0x43, 0xed, 0xc1, 0xfe, 0x8d, 0xfb, 0x8e, 0xde, 0x30, 0x94, 0xaf, 0x2c, 0xef, 0x39, 0x5a, 0x56, 0xdb, 0x72, 0xec, - 0xe6, 0x61, 0x5f, 0xa6, 0xcc, 0xe0, 0x41, 0xf3, 0x6a, 0xc0, 0x0d, 0xbb, 0xaf, 0xb7, 0x52, 0xc9, 0xca, 0x0f, 0x6f, - 0x1b, 0x4a, 0xdd, 0x4d, 0x43, 0x29, 0x70, 0x53, 0x35, 0x5c, 0xb5, 0x8e, 0x56, 0xd2, 0xed, 0x0c, 0xa9, 0x93, 0xf7, - 0x81, 0x4b, 0x62, 0x69, 0xbe, 0x60, 0xd0, 0x2c, 0x76, 0x7a, 0x75, 0xd4, 0x0d, 0xc5, 0x8c, 0x0f, 0x11, 0xb0, 0xf5, - 0x02, 0x30, 0xb1, 0x23, 0xb2, 0x1e, 0xac, 0x4c, 0xb9, 0x09, 0x03, 0x59, 0xa9, 0x13, 0x4a, 0x61, 0xde, 0x66, 0x64, - 0x15, 0x93, 0xc4, 0xcd, 0xd6, 0x09, 0xb9, 0x0d, 0xa2, 0xfb, 0x27, 0x85, 0x01, 0xfb, 0x9e, 0xca, 0x4b, 0x7f, 0xb1, - 0x14, 0xb5, 0xcf, 0x35, 0x32, 0x12, 0x0b, 0xb8, 0xf3, 0x03, 0xf9, 0x7f, 0xfe, 0x6d, 0x59, 0xff, 0xf9, 0xf7, 0xde, - 0xaa, 0xd0, 0x7d, 0x3e, 0x31, 0xb2, 0xd1, 0x01, 0xfb, 0xa2, 0xf9, 0x4b, 0x65, 0x98, 0x37, 0xd7, 0xa9, 0x2d, 0x02, - 0xbc, 0xaf, 0x2d, 0x41, 0xad, 0xb0, 0xbc, 0x6f, 0x1e, 0x35, 0x30, 0x98, 0xd7, 0xde, 0x91, 0x41, 0xa5, 0x2f, 0x1a, - 0xda, 0x44, 0x1f, 0x1c, 0xb4, 0x22, 0xbf, 0x1f, 0xc2, 0xfb, 0xe6, 0xf0, 0x85, 0xc3, 0x67, 0xa2, 0xc1, 0xd7, 0x93, - 0x89, 0xc8, 0xe6, 0x26, 0x37, 0x05, 0xa3, 0xfa, 0xf3, 0x5a, 0x09, 0xbb, 0x3c, 0x07, 0xb6, 0x4e, 0xbd, 0xdd, 0x47, - 0xaf, 0x27, 0x68, 0xfe, 0x75, 0x36, 0x4d, 0x0a, 0x62, 0xa5, 0x15, 0xb5, 0x51, 0xf3, 0xed, 0x5a, 0xa7, 0x35, 0xbc, - 0x06, 0xa5, 0x98, 0xe2, 0x2b, 0x9f, 0xe8, 0xc6, 0xeb, 0x09, 0x93, 0xed, 0x30, 0x8b, 0xd3, 0x41, 0x75, 0x6b, 0x33, - 0xc9, 0x68, 0x09, 0xe8, 0x86, 0x42, 0x35, 0x2e, 0x58, 0x99, 0x14, 0xa2, 0x34, 0x14, 0xa9, 0x03, 0x53, 0x3f, 0xc9, - 0x31, 0xc3, 0xc8, 0xbb, 0x36, 0xab, 0xac, 0x9f, 0xf7, 0x5b, 0x65, 0x5d, 0x1d, 0x64, 0x95, 0xf5, 0xf3, 0x57, 0xb7, - 0xca, 0x7a, 0x27, 0x5b, 0x65, 0xc1, 0x22, 0xbe, 0x25, 0x07, 0x99, 0x4a, 0x71, 0x3b, 0x89, 0xe8, 0x3e, 0x1d, 0x39, - 0x8c, 0xa4, 0x4d, 0xbd, 0x25, 0x01, 0x36, 0x9d, 0xad, 0x4a, 0x10, 0x2d, 0xc0, 0x6c, 0xea, 0x8f, 0x37, 0x70, 0x0a, - 0xa2, 0x85, 0x6c, 0xde, 0x14, 0xb2, 0x18, 0xab, 0x45, 0xdc, 0x24, 0x6a, 0x52, 0x64, 0x1b, 0x3c, 0xca, 0x92, 0x79, - 0xac, 0x4b, 0x79, 0xa4, 0x85, 0xbd, 0x58, 0x87, 0x1b, 0x1d, 0x0d, 0xd0, 0x5e, 0x49, 0x34, 0xec, 0xbc, 0xe4, 0xd1, - 0x24, 0xe4, 0x1e, 0x84, 0x5d, 0x2e, 0x8d, 0xcc, 0xb0, 0x55, 0x7f, 0xdd, 0x38, 0xdf, 0x5f, 0x3b, 0xc3, 0xae, 0x03, - 0xee, 0xd0, 0xc0, 0xe4, 0x61, 0x81, 0x3d, 0xec, 0x76, 0xa1, 0xe0, 0x5e, 0x2a, 0xe8, 0x40, 0x81, 0x2f, 0x15, 0xf4, - 0xa0, 0xc0, 0x93, 0x0a, 0x4e, 0xa0, 0x60, 0x26, 0x15, 0xf4, 0xa1, 0xe0, 0x4e, 0xcd, 0xaf, 0x43, 0x31, 0xdc, 0xbe, - 0x7e, 0x63, 0x50, 0xa6, 0x82, 0x97, 0xf5, 0x0d, 0x07, 0xec, 0x94, 0xdc, 0xc5, 0x20, 0x32, 0xa8, 0x80, 0x6f, 0x90, - 0x18, 0xf7, 0x4b, 0x42, 0x43, 0x33, 0xbf, 0xc1, 0x3b, 0xc7, 0xca, 0x22, 0xb0, 0x54, 0xe6, 0x21, 0x0f, 0x38, 0x1c, - 0x14, 0x55, 0x07, 0x99, 0xcd, 0x50, 0xac, 0x1c, 0x0f, 0x1b, 0x21, 0xad, 0x65, 0xf1, 0x8e, 0x7e, 0xce, 0x14, 0x5b, - 0xa0, 0xb0, 0xf1, 0xd0, 0x64, 0xc1, 0xe0, 0xd7, 0xd0, 0xf4, 0xbf, 0x21, 0xd3, 0xf5, 0x42, 0xb9, 0x8c, 0x16, 0x7b, - 0x95, 0xf6, 0xf2, 0x2b, 0x18, 0xa5, 0x4a, 0x35, 0x20, 0x26, 0xdf, 0x96, 0xec, 0x5b, 0xf4, 0x31, 0x2f, 0xd7, 0xcf, - 0x60, 0x6c, 0x4a, 0x46, 0x4d, 0x46, 0xe0, 0x3b, 0x00, 0x23, 0x49, 0x6b, 0x7e, 0x09, 0x70, 0x96, 0x9e, 0xaf, 0x5c, - 0x69, 0x3c, 0xe3, 0x1f, 0x49, 0x9a, 0xba, 0x0b, 0x5e, 0xbf, 0x3e, 0x4e, 0x30, 0x93, 0x11, 0xfc, 0x17, 0x02, 0x10, - 0x84, 0x69, 0x7e, 0xcd, 0x1a, 0x22, 0x89, 0xee, 0x15, 0xb0, 0xb7, 0x81, 0x0d, 0x55, 0x58, 0x06, 0xf8, 0x16, 0x2c, - 0x61, 0x59, 0x87, 0x0f, 0x87, 0xff, 0x8e, 0x04, 0xd5, 0xc2, 0xcc, 0x5d, 0x54, 0x8b, 0xe8, 0x3e, 0xc8, 0xe5, 0xb1, - 0x09, 0x15, 0x7a, 0xa9, 0xf0, 0x4b, 0x74, 0xc2, 0x41, 0xb4, 0xf8, 0x43, 0x15, 0xc2, 0x3b, 0x14, 0xf9, 0x1f, 0x42, - 0xc3, 0xcf, 0x26, 0x16, 0xc2, 0x58, 0xb1, 0x00, 0x84, 0x83, 0x30, 0x5b, 0x9a, 0xe8, 0xcc, 0xa5, 0x75, 0x42, 0xdd, - 0xb0, 0x70, 0x6d, 0xb7, 0x55, 0x17, 0xd6, 0x41, 0xb2, 0x98, 0xba, 0x9a, 0xd3, 0xe9, 0x1b, 0xfc, 0xcf, 0xb2, 0x7b, - 0x7a, 0x8e, 0x3d, 0x28, 0x33, 0xff, 0x6e, 0x3b, 0x8f, 0xc2, 0xcc, 0x9c, 0xbb, 0x2b, 0x3f, 0x78, 0x18, 0xac, 0xa2, - 0x30, 0x4a, 0x63, 0xd7, 0x23, 0xc3, 0x82, 0xa1, 0x1e, 0x62, 0x70, 0x04, 0xe6, 0x9f, 0xe7, 0x58, 0x9d, 0x84, 0xac, - 0x68, 0x6b, 0x11, 0xfb, 0x60, 0x1e, 0x90, 0x4d, 0xce, 0x3e, 0x5f, 0xaa, 0x4c, 0xab, 0xe2, 0x96, 0xa3, 0x2d, 0x80, - 0x22, 0x65, 0x81, 0x15, 0x20, 0x9c, 0xd0, 0x30, 0x76, 0x67, 0x18, 0x0b, 0xd0, 0xea, 0xf4, 0x12, 0xb2, 0x52, 0xac, - 0x5e, 0x6b, 0xe7, 0x49, 0x74, 0x3f, 0x86, 0xd1, 0x62, 0x63, 0x33, 0x25, 0xc1, 0x1c, 0xdf, 0x98, 0xe8, 0xcb, 0xc1, - 0xfb, 0x31, 0x91, 0x11, 0x87, 0xde, 0xc8, 0x6a, 0x08, 0xaf, 0x07, 0x1d, 0xc5, 0x1e, 0xae, 0xfc, 0xd0, 0xa4, 0xd3, - 0xe9, 0xdb, 0xb1, 0xd4, 0x97, 0x0c, 0x3f, 0x7d, 0x8b, 0xd5, 0x1d, 0xc5, 0x1e, 0x02, 0xb3, 0x36, 0x0f, 0xa2, 0xfb, - 0xc1, 0xd2, 0x9f, 0xcd, 0x48, 0x38, 0xc4, 0x31, 0x8b, 0x42, 0x12, 0x04, 0x7e, 0x9c, 0xfa, 0xe9, 0x70, 0xe5, 0x6e, - 0x58, 0xaf, 0xc7, 0x6d, 0xbd, 0x76, 0x59, 0xaf, 0xdd, 0x83, 0x7b, 0x95, 0xba, 0x01, 0xbf, 0x11, 0xda, 0x0f, 0x1b, - 0x5a, 0x4f, 0xb1, 0x2b, 0xf3, 0x3c, 0xb8, 0xd7, 0x38, 0x21, 0xdb, 0x95, 0x9b, 0x2c, 0xfc, 0x70, 0x60, 0xe7, 0xd6, - 0xdd, 0x96, 0x6e, 0x8c, 0xa7, 0xa7, 0xa7, 0xa7, 0xb9, 0x35, 0xe3, 0x4f, 0xf6, 0x6c, 0x96, 0x5b, 0x1e, 0x7f, 0x9a, - 0xcf, 0x6d, 0x7b, 0x3e, 0xcf, 0x2d, 0x9f, 0x17, 0x74, 0x3b, 0xde, 0xac, 0xdb, 0xc9, 0xad, 0x7b, 0xa9, 0x46, 0x6e, - 0x11, 0xf6, 0x94, 0x90, 0xd9, 0x10, 0x37, 0x12, 0x35, 0xe4, 0x1c, 0xf4, 0x6d, 0x3b, 0x47, 0x0c, 0x70, 0x5d, 0xc2, - 0x4d, 0x28, 0xeb, 0xb9, 0xd9, 0x1e, 0x5c, 0x53, 0x29, 0x3e, 0xe7, 0x79, 0x8d, 0xf5, 0x66, 0x6e, 0xf2, 0xe9, 0x46, - 0x91, 0x66, 0xe1, 0xba, 0xb4, 0xda, 0x96, 0x83, 0xc1, 0xdc, 0x0c, 0x20, 0x48, 0xd6, 0x70, 0x1a, 0x25, 0x70, 0x66, - 0x13, 0x77, 0xe6, 0xaf, 0xd3, 0x81, 0xd3, 0x89, 0x37, 0xbc, 0x88, 0xed, 0xf5, 0xa2, 0x00, 0xcf, 0xde, 0x20, 0x8d, - 0x02, 0x7f, 0xc6, 0x8b, 0xda, 0xce, 0x92, 0xd3, 0xd1, 0x87, 0xe8, 0x22, 0xee, 0x63, 0xa0, 0x03, 0x37, 0x08, 0x14, - 0xab, 0x9b, 0x2a, 0xc4, 0x4d, 0x51, 0xc4, 0xab, 0xd8, 0x29, 0x85, 0x0b, 0xba, 0x83, 0x3b, 0xc7, 0xf1, 0x46, 0xec, - 0x79, 0xe7, 0x24, 0xde, 0xe4, 0xdf, 0xae, 0xc8, 0xcc, 0x77, 0x15, 0xad, 0xd8, 0x4d, 0x8e, 0x0d, 0x62, 0x60, 0x7d, - 0xdb, 0xb2, 0x4d, 0xf9, 0xb1, 0x80, 0x60, 0x82, 0x4f, 0xfc, 0x55, 0x1c, 0x25, 0x99, 0x1b, 0x66, 0x79, 0x3e, 0xb9, - 0xc9, 0xf3, 0xe1, 0x95, 0xaf, 0x5d, 0xff, 0x43, 0xa3, 0xf7, 0x34, 0x55, 0x9b, 0xe4, 0xfa, 0x8d, 0xf1, 0x96, 0xc8, - 0x56, 0x1a, 0x70, 0x8d, 0xa1, 0x85, 0x86, 0x5c, 0x99, 0xde, 0x92, 0xf5, 0xca, 0x14, 0xc8, 0xa2, 0x3a, 0xb5, 0xfa, - 0x28, 0x57, 0xc1, 0x1b, 0x08, 0x2a, 0xbc, 0x25, 0xa3, 0x2b, 0xc9, 0xe2, 0x03, 0x88, 0x15, 0xac, 0x4c, 0x2d, 0xf9, - 0x9f, 0xb5, 0xd1, 0x8c, 0xdf, 0xed, 0xa7, 0x19, 0x7f, 0xc9, 0x0e, 0xa1, 0x19, 0xbf, 0xfb, 0xea, 0x34, 0xe3, 0xb3, - 0xba, 0x25, 0xff, 0x45, 0x34, 0x52, 0x85, 0x90, 0x1f, 0xae, 0xa6, 0x84, 0xc6, 0xc8, 0xb9, 0xf8, 0xdd, 0x86, 0xf7, - 0xbc, 0x37, 0x9a, 0xf5, 0x8d, 0xde, 0xdc, 0x20, 0x8f, 0x7d, 0x17, 0x8e, 0xfe, 0x9e, 0xc8, 0xcf, 0xf3, 0xf9, 0xe8, - 0x4d, 0x24, 0x15, 0x88, 0x27, 0x66, 0xff, 0x50, 0x8a, 0x67, 0x40, 0xdf, 0x70, 0xbb, 0x47, 0xcc, 0xf8, 0x00, 0xee, - 0xd0, 0xd4, 0xce, 0x77, 0x26, 0xec, 0xbd, 0x86, 0xe5, 0x21, 0x68, 0xc2, 0xc8, 0x92, 0x3b, 0xbd, 0xd4, 0x44, 0x89, - 0x0b, 0x92, 0x31, 0x2f, 0xd5, 0xef, 0x1f, 0x2e, 0x66, 0xda, 0x45, 0xa4, 0xe7, 0x7e, 0xfa, 0xae, 0xea, 0x72, 0xc2, - 0xd4, 0x2f, 0x23, 0x79, 0x3a, 0x39, 0xb3, 0xd9, 0x92, 0x53, 0x3a, 0xc3, 0x6b, 0xda, 0xfc, 0xbc, 0x34, 0xd3, 0x81, - 0xdc, 0x90, 0xa5, 0x96, 0xaa, 0x5d, 0xc6, 0xcc, 0xde, 0x7f, 0xcb, 0x28, 0x40, 0xcc, 0x96, 0x85, 0x9e, 0xba, 0x33, - 0xda, 0xdc, 0x9f, 0xe5, 0xb9, 0x3e, 0xe4, 0x80, 0x90, 0x2e, 0x5a, 0xb2, 0x8f, 0x88, 0x4b, 0xef, 0x85, 0x59, 0x01, - 0x53, 0xd2, 0x51, 0x0d, 0xdc, 0x05, 0xe8, 0xb4, 0x99, 0xbe, 0x8e, 0xc1, 0x4c, 0x55, 0x28, 0xf8, 0xa8, 0xad, 0x83, - 0x34, 0x21, 0x50, 0xc2, 0x0a, 0xf8, 0xf3, 0x57, 0xbc, 0xa0, 0x6e, 0x35, 0x49, 0x81, 0x83, 0x4a, 0x79, 0xf0, 0xab, - 0xe7, 0x72, 0x6d, 0x8a, 0x76, 0x58, 0x1d, 0x7c, 0xc8, 0x55, 0x41, 0xfb, 0xe1, 0xf6, 0x1b, 0x9f, 0x1d, 0x41, 0x83, - 0x71, 0x45, 0x77, 0xbf, 0xc7, 0x26, 0x10, 0x48, 0x89, 0xf4, 0xde, 0xb0, 0xd2, 0x7b, 0xe5, 0xc5, 0x96, 0xc7, 0xa4, - 0xc8, 0xdc, 0xd8, 0x04, 0x16, 0x1f, 0x71, 0x2f, 0xc3, 0x78, 0x52, 0xf8, 0x8b, 0xe1, 0x3a, 0x05, 0xdc, 0x88, 0x8c, - 0x2a, 0xe2, 0x9f, 0xa1, 0xb7, 0x4e, 0xd2, 0x28, 0x19, 0xc4, 0x91, 0x1f, 0x66, 0x24, 0xc9, 0x11, 0x54, 0xd7, 0x08, - 0x1f, 0x0e, 0x9e, 0x9b, 0x6d, 0x14, 0xbb, 0x9e, 0x9f, 0x3d, 0x0c, 0x6c, 0x46, 0x52, 0xd8, 0x43, 0x46, 0x1d, 0xd8, - 0x8d, 0xf5, 0x07, 0x0c, 0x9a, 0x2f, 0x91, 0xf0, 0x4b, 0xea, 0xe4, 0x8c, 0xbc, 0xcd, 0x87, 0xd2, 0x5b, 0x1a, 0x95, - 0x03, 0xc8, 0x0f, 0x37, 0x31, 0x17, 0x80, 0xe5, 0x61, 0xa9, 0xed, 0x19, 0x59, 0x18, 0x88, 0xb5, 0x41, 0x2e, 0xcf, - 0xff, 0xac, 0x9e, 0xae, 0xd8, 0xcd, 0xc5, 0x40, 0xf1, 0xe8, 0x87, 0x8c, 0x6c, 0xe0, 0x42, 0x0e, 0x2b, 0xe3, 0x90, - 0x9a, 0x53, 0x32, 0x8f, 0x12, 0x42, 0x23, 0xb8, 0x3a, 0xa7, 0xf1, 0xe6, 0xf0, 0xee, 0x77, 0x4f, 0xbf, 0xb9, 0x9f, - 0x30, 0xca, 0x34, 0xde, 0x99, 0xbe, 0xa7, 0xb7, 0xfa, 0x7d, 0x06, 0xa4, 0x21, 0x85, 0xbc, 0x47, 0x83, 0x65, 0x0d, - 0x54, 0x75, 0xd8, 0x18, 0x28, 0x2b, 0x8e, 0xd8, 0x9d, 0x97, 0x90, 0xc0, 0xcd, 0xfc, 0x3b, 0x4e, 0x33, 0x76, 0x4f, - 0xe2, 0x0d, 0x5f, 0x63, 0xbc, 0xf0, 0x1e, 0xb1, 0x48, 0x95, 0xa1, 0xf0, 0x45, 0xaa, 0x16, 0xe3, 0x22, 0x0d, 0x6b, - 0xb3, 0xe1, 0xb1, 0x23, 0x2a, 0x37, 0x7d, 0x2f, 0xde, 0xc8, 0x57, 0x74, 0xd1, 0x4c, 0xdc, 0xd4, 0xd5, 0xa0, 0x5f, - 0x2b, 0x7f, 0x36, 0x0b, 0x48, 0x5e, 0x5a, 0xe8, 0xf2, 0x5a, 0x4a, 0xc0, 0x11, 0x70, 0x70, 0xa7, 0x69, 0x14, 0xac, - 0x33, 0xd2, 0x0c, 0x2e, 0x0a, 0x9c, 0x8e, 0x5d, 0x00, 0x07, 0x7f, 0x97, 0xc7, 0xda, 0x03, 0x72, 0x1b, 0xb6, 0x89, - 0x3d, 0x84, 0x18, 0xbf, 0x66, 0xb7, 0x3c, 0x74, 0x78, 0x25, 0x06, 0x6d, 0x34, 0x4c, 0xc4, 0x80, 0x6b, 0x89, 0x62, - 0x6f, 0xc5, 0x72, 0x58, 0x99, 0x88, 0x73, 0x2a, 0x8a, 0xf2, 0xf2, 0x64, 0xfe, 0x98, 0x33, 0xf6, 0xaa, 0xf9, 0x8c, - 0xbd, 0xe2, 0x67, 0x6c, 0xf7, 0xce, 0x7c, 0x3a, 0x77, 0xe0, 0xbf, 0x61, 0x31, 0xa1, 0x81, 0xad, 0x74, 0xe3, 0x8d, - 0xe2, 0xc4, 0x1b, 0xc5, 0xec, 0xc4, 0x1b, 0x05, 0xbb, 0x46, 0x93, 0x0c, 0xc3, 0xea, 0xe8, 0x86, 0xad, 0x40, 0x21, - 0xfc, 0xd9, 0xa5, 0x57, 0xce, 0x31, 0xbc, 0x83, 0x56, 0xbd, 0xfa, 0xbb, 0xce, 0xee, 0xa3, 0x4e, 0xcf, 0x12, 0x47, - 0xda, 0xba, 0x95, 0xb9, 0xd3, 0x29, 0x99, 0x0d, 0xe6, 0x91, 0xb7, 0x4e, 0xff, 0xc5, 0xc6, 0xcf, 0x80, 0xb8, 0x13, - 0x11, 0x54, 0xfa, 0xe1, 0x4d, 0x41, 0x51, 0x72, 0x47, 0x78, 0x0f, 0x5b, 0xb1, 0x4e, 0x03, 0x1a, 0x90, 0xb8, 0x63, - 0x1d, 0x37, 0x6c, 0xf2, 0x66, 0x40, 0xff, 0x61, 0xab, 0xd4, 0x8e, 0x62, 0xbe, 0x00, 0x2c, 0x3b, 0xc1, 0xf1, 0x78, - 0x68, 0xb0, 0xd5, 0xb4, 0x4f, 0x9b, 0x87, 0x7b, 0xcd, 0xbf, 0x74, 0xc3, 0x2f, 0x15, 0x76, 0x6f, 0x31, 0x57, 0x90, - 0xdd, 0xbd, 0xb6, 0xed, 0x91, 0x5a, 0xaf, 0x3b, 0x2e, 0x84, 0xa2, 0xee, 0x81, 0x58, 0xfe, 0xe9, 0xab, 0x63, 0xf8, - 0x8f, 0x52, 0xf5, 0xbf, 0x64, 0x4d, 0x84, 0xfa, 0x45, 0xd9, 0xf6, 0x9a, 0x92, 0x4a, 0x48, 0x88, 0x1f, 0x5e, 0x7f, - 0x3e, 0x7f, 0x5c, 0x83, 0x83, 0x6b, 0x53, 0x6b, 0xa6, 0x6a, 0xed, 0xef, 0xa3, 0x08, 0x92, 0x65, 0xd6, 0xab, 0x73, - 0xf0, 0x50, 0xf3, 0xf2, 0x6c, 0x04, 0x8d, 0x38, 0x1f, 0x41, 0xb5, 0xf8, 0x2a, 0xb6, 0xa1, 0xac, 0xc4, 0xdb, 0x36, - 0x56, 0xe2, 0xcd, 0x7e, 0x56, 0xe2, 0xaf, 0x07, 0xb1, 0x12, 0x6f, 0xbe, 0x3a, 0x2b, 0xf1, 0xb6, 0xce, 0x4a, 0x5c, - 0x45, 0xdc, 0x84, 0xd5, 0xb8, 0x58, 0xb3, 0x9f, 0x1f, 0xa9, 0x52, 0xee, 0x32, 0x1a, 0xf5, 0x6c, 0x1a, 0x64, 0xf8, - 0xea, 0x77, 0x33, 0x16, 0xb8, 0x11, 0xdf, 0xa3, 0x45, 0x57, 0xc1, 0x5a, 0x30, 0xcc, 0x8e, 0xdf, 0x91, 0x8a, 0x83, - 0x28, 0x5c, 0xfc, 0x0c, 0x4a, 0x59, 0x10, 0x07, 0x26, 0xd2, 0x0b, 0x3f, 0xfd, 0x39, 0x8a, 0xd7, 0xf1, 0x05, 0xf4, - 0xf5, 0xd1, 0x4f, 0xfd, 0x69, 0x40, 0x84, 0xef, 0x2f, 0xb5, 0x40, 0x63, 0x32, 0x71, 0x30, 0xfa, 0xe4, 0x3f, 0xdd, - 0x0d, 0xff, 0x89, 0x66, 0xa1, 0xec, 0x37, 0x35, 0x6d, 0x53, 0x9b, 0x19, 0x11, 0xae, 0x04, 0x94, 0x06, 0xfd, 0x78, - 0x66, 0xe4, 0x2a, 0xd2, 0x1b, 0x66, 0xc9, 0xed, 0x1d, 0x5a, 0xfb, 0x21, 0x35, 0xa6, 0x66, 0xad, 0x1b, 0x22, 0xe8, - 0x55, 0x5d, 0x0c, 0xbf, 0x8a, 0xd6, 0x29, 0x99, 0x45, 0xf7, 0xa1, 0x6a, 0x84, 0xc2, 0xac, 0x1f, 0x34, 0x9c, 0xa2, - 0x0d, 0xa6, 0x6b, 0xfc, 0x80, 0x84, 0x72, 0x94, 0x68, 0x2a, 0x64, 0x0b, 0x5d, 0xc7, 0x26, 0x55, 0x35, 0x9b, 0x38, - 0x45, 0x55, 0xe4, 0x15, 0x7a, 0xa2, 0x69, 0xd1, 0xe8, 0x71, 0x2d, 0xb9, 0xa9, 0x46, 0x64, 0x31, 0xa9, 0x70, 0xaa, - 0x85, 0x5c, 0xb8, 0xc8, 0x23, 0x4f, 0x34, 0x2c, 0x1c, 0x7b, 0x43, 0x9d, 0x45, 0x8b, 0xb7, 0x10, 0xb7, 0x23, 0x5f, - 0xb3, 0xf5, 0x60, 0x71, 0x18, 0xe8, 0xe3, 0x6b, 0x09, 0x8c, 0xef, 0xee, 0x48, 0x12, 0xb8, 0x0f, 0x9a, 0x9e, 0x47, - 0xe1, 0x8f, 0x00, 0x80, 0x37, 0xd1, 0x7d, 0x28, 0x57, 0xc0, 0xf4, 0x28, 0x0d, 0x7b, 0xa9, 0x31, 0x62, 0x08, 0xb8, - 0x8a, 0x48, 0x23, 0x80, 0xc4, 0xb4, 0x0b, 0xf2, 0x77, 0x83, 0xfe, 0xfb, 0x0f, 0x3d, 0x37, 0x2e, 0x23, 0xf1, 0xa1, - 0xbf, 0xc5, 0x07, 0x7c, 0xe6, 0xf9, 0xf3, 0x27, 0xed, 0xd3, 0x2e, 0x27, 0x44, 0x6f, 0x68, 0xad, 0xb7, 0x9e, 0x02, - 0x18, 0xc5, 0x55, 0xb4, 0xf6, 0x96, 0x68, 0x6b, 0xfa, 0xf5, 0xe6, 0x9b, 0x41, 0x9f, 0x98, 0x17, 0x54, 0x4c, 0xbd, - 0x52, 0x54, 0x40, 0x01, 0xbf, 0xff, 0x16, 0x42, 0x5e, 0xfe, 0x0f, 0xc1, 0x50, 0xdf, 0x35, 0x8c, 0x8b, 0xf7, 0x1f, - 0xb7, 0x79, 0x87, 0x90, 0xbe, 0x92, 0x05, 0x93, 0xe0, 0xca, 0xb5, 0x66, 0x24, 0x93, 0x57, 0x81, 0x26, 0x07, 0x6e, - 0x6b, 0x8b, 0x49, 0xc7, 0xbf, 0x42, 0x2c, 0xca, 0xa6, 0x33, 0x5b, 0x7f, 0x83, 0x30, 0x6c, 0x55, 0x41, 0x32, 0xcc, - 0xe4, 0x81, 0x20, 0xfa, 0xaa, 0xbe, 0x5b, 0xf9, 0xa1, 0x81, 0x71, 0xd7, 0xeb, 0x6f, 0xdc, 0x0d, 0x44, 0x1e, 0x06, - 0xe4, 0x56, 0x7d, 0x05, 0x85, 0x86, 0xec, 0xa9, 0x06, 0xc9, 0x95, 0xd4, 0x46, 0x48, 0x70, 0x2d, 0xde, 0xe4, 0x4f, - 0x8a, 0xa2, 0x28, 0x82, 0x8d, 0x50, 0x04, 0x1f, 0x81, 0xe5, 0xc8, 0x0e, 0x80, 0xb6, 0x24, 0x8f, 0x37, 0xb4, 0x04, - 0x38, 0x03, 0xd4, 0xc9, 0xf2, 0x02, 0x16, 0x5c, 0xaf, 0x67, 0xf3, 0x02, 0xce, 0xd0, 0x43, 0x60, 0x34, 0x37, 0x81, - 0x18, 0xbc, 0x03, 0x05, 0x19, 0x76, 0x7c, 0xcb, 0x24, 0xc1, 0x8a, 0x4d, 0x1f, 0x27, 0x43, 0xd2, 0x1c, 0x85, 0x2d, - 0x94, 0xb0, 0x20, 0x68, 0x1d, 0x2a, 0x41, 0x95, 0x0d, 0xd2, 0x80, 0x1b, 0x91, 0x2f, 0xda, 0x64, 0x2b, 0x12, 0xae, - 0x55, 0xcc, 0xc2, 0x84, 0x51, 0xf1, 0xa0, 0xce, 0x1b, 0x4a, 0x6c, 0x01, 0xb6, 0x69, 0x6e, 0xb9, 0xa4, 0x77, 0x61, - 0xca, 0x50, 0xaa, 0x6b, 0x78, 0x4c, 0xb1, 0x99, 0x32, 0xdc, 0x56, 0xbd, 0x21, 0xd8, 0x92, 0x46, 0x55, 0xd7, 0x29, - 0x6a, 0x8c, 0x0c, 0x7d, 0xd0, 0x78, 0x14, 0x4c, 0x5c, 0xc4, 0xc1, 0xae, 0xb9, 0xd5, 0x45, 0x13, 0x1a, 0x19, 0xb7, - 0x22, 0x28, 0x4a, 0xf4, 0x7a, 0x37, 0x6c, 0x9c, 0x10, 0x0a, 0xa8, 0xb5, 0x1f, 0xaf, 0xd6, 0x4f, 0xcb, 0xa4, 0x3f, - 0x91, 0x07, 0x7a, 0x91, 0x50, 0x50, 0x7d, 0x22, 0x0f, 0x60, 0xfb, 0xf7, 0x16, 0xa4, 0x29, 0xea, 0x0e, 0x74, 0x6d, - 0x40, 0x70, 0x7d, 0x0f, 0xc2, 0x43, 0xed, 0x38, 0x40, 0x76, 0xbe, 0x03, 0x8b, 0x23, 0x88, 0x21, 0x8f, 0x32, 0x3f, - 0xc4, 0xcc, 0xca, 0x5e, 0x6b, 0x84, 0xb1, 0xd9, 0x70, 0x34, 0xf4, 0x17, 0x8e, 0x6d, 0x1f, 0xd5, 0xea, 0x83, 0x20, - 0xbb, 0xa9, 0xb6, 0x6e, 0x64, 0x23, 0xc7, 0x36, 0xfd, 0x17, 0x56, 0x67, 0x58, 0xbb, 0xa3, 0xa5, 0xe8, 0x8d, 0x13, - 0x14, 0x7f, 0x8d, 0x9f, 0x6d, 0xb5, 0xda, 0x81, 0xd4, 0xab, 0x56, 0xeb, 0x38, 0xb6, 0x9c, 0xc9, 0xbf, 0x26, 0xf5, - 0xab, 0x9f, 0xc6, 0x8e, 0xa4, 0x99, 0x44, 0x26, 0x10, 0x7f, 0x58, 0x83, 0x63, 0xf4, 0x67, 0xe5, 0xa5, 0xa2, 0xd1, - 0xe3, 0xa3, 0xeb, 0x13, 0x91, 0xa0, 0x9a, 0xbb, 0x75, 0xc9, 0x1d, 0x54, 0xbe, 0x98, 0x56, 0x31, 0x1c, 0x8b, 0x74, - 0x4a, 0x0a, 0x8d, 0xde, 0x4e, 0x6a, 0x01, 0xfb, 0x6f, 0xb9, 0x3e, 0xad, 0x29, 0x44, 0x02, 0x80, 0x1a, 0x10, 0xad, - 0x7c, 0x6f, 0x87, 0xeb, 0xb8, 0xdc, 0x5d, 0xf9, 0x92, 0x3c, 0xbc, 0x33, 0xbc, 0x74, 0x50, 0x87, 0x26, 0xfa, 0x6b, - 0xbe, 0xee, 0x1e, 0xd9, 0x25, 0x09, 0x67, 0xe5, 0x0e, 0x2b, 0xf7, 0xd7, 0xe1, 0xdd, 0x95, 0x30, 0x0a, 0x84, 0xf1, - 0x8f, 0x1a, 0x30, 0x4a, 0x1e, 0x85, 0xb8, 0xf9, 0xe9, 0x71, 0xf3, 0x0f, 0xa2, 0x62, 0xb0, 0x01, 0x8d, 0xc1, 0x25, - 0x9a, 0x49, 0x42, 0x71, 0x88, 0x15, 0x8d, 0x8e, 0xb8, 0x1a, 0x27, 0x44, 0x5b, 0x77, 0x62, 0xc6, 0x6d, 0x0a, 0x8b, - 0x36, 0x3e, 0x8b, 0xfe, 0x78, 0xa8, 0xd4, 0xda, 0xdf, 0x2f, 0xb5, 0xce, 0xf6, 0x49, 0xad, 0xa9, 0x47, 0xd3, 0x7d, - 0xe2, 0xc6, 0x92, 0x53, 0x1c, 0x27, 0xce, 0x65, 0xdf, 0xb8, 0x92, 0xa8, 0x1b, 0x1d, 0xa0, 0x78, 0xab, 0x5a, 0x6f, - 0xd4, 0x4a, 0x10, 0xc5, 0xdf, 0x12, 0x83, 0xc2, 0x15, 0xea, 0xb2, 0x6c, 0xfc, 0xaa, 0x90, 0x8d, 0x53, 0xae, 0xa6, - 0xf0, 0x65, 0xe1, 0xd4, 0xbf, 0xe4, 0x27, 0x26, 0xb8, 0x83, 0xc2, 0x5f, 0xac, 0x18, 0xa9, 0xe4, 0x01, 0x55, 0x30, - 0x1a, 0x92, 0x5f, 0x1d, 0xe7, 0x32, 0xca, 0xee, 0x75, 0xe5, 0xaa, 0x85, 0x03, 0x54, 0x51, 0x0e, 0x52, 0x77, 0x1c, - 0xb2, 0x28, 0x96, 0xb7, 0x4d, 0xd9, 0x03, 0x46, 0x7e, 0x2d, 0x6d, 0x12, 0xe1, 0xaa, 0x42, 0x01, 0xcc, 0xc5, 0xf4, - 0x15, 0xbd, 0xb6, 0xb0, 0x81, 0xc0, 0x41, 0x36, 0x78, 0xd6, 0xed, 0x97, 0xce, 0xd3, 0x0c, 0x05, 0x85, 0x16, 0x5e, - 0x96, 0x41, 0x20, 0x7c, 0x6f, 0xb6, 0x0d, 0xb7, 0x3c, 0x5e, 0xf2, 0xec, 0x7e, 0x07, 0xf1, 0xa2, 0x62, 0xcb, 0x8a, - 0x7c, 0x3c, 0x99, 0x26, 0x35, 0xcf, 0xc5, 0xaa, 0xf5, 0x4e, 0xa9, 0x10, 0x67, 0xcb, 0x9c, 0x53, 0xca, 0x32, 0x7a, - 0x56, 0x63, 0xc0, 0xbf, 0xcb, 0xb6, 0x4e, 0xb2, 0x0e, 0x31, 0x9a, 0xbc, 0x99, 0x25, 0xae, 0xf7, 0x49, 0x1a, 0x32, - 0x97, 0x73, 0x82, 0x0c, 0xb8, 0xac, 0x29, 0x18, 0xba, 0x18, 0x7c, 0x91, 0x0c, 0xac, 0x4e, 0x2a, 0x49, 0x5f, 0x06, - 0x4f, 0xed, 0xae, 0xfb, 0x6a, 0x7e, 0x5c, 0x11, 0x8a, 0x76, 0x7a, 0x65, 0x91, 0x79, 0xcb, 0x38, 0xb2, 0xe5, 0x7a, - 0x35, 0xdd, 0xca, 0xb2, 0x55, 0x49, 0xe4, 0x5a, 0x17, 0xb3, 0xca, 0x9f, 0x9d, 0xcf, 0xe7, 0x65, 0x41, 0xa3, 0xad, - 0x1c, 0xa3, 0xb0, 0xf0, 0xa9, 0x6d, 0xdb, 0xd5, 0xb1, 0xef, 0x06, 0xbb, 0x89, 0x72, 0xdb, 0xd3, 0xc6, 0x11, 0x23, - 0x6c, 0xf7, 0xc1, 0xaf, 0x0e, 0x8e, 0xdc, 0x2a, 0x4e, 0x76, 0xc9, 0x2c, 0x62, 0x48, 0x8d, 0x21, 0xfc, 0x8c, 0xac, - 0xd2, 0x81, 0x47, 0x50, 0x07, 0x63, 0x49, 0x07, 0x1a, 0x0d, 0x07, 0xcc, 0x05, 0x98, 0x8a, 0x38, 0x7c, 0x57, 0xd8, - 0x0a, 0xca, 0xc3, 0x6b, 0xc2, 0x7b, 0xfe, 0x11, 0x3c, 0x28, 0xdb, 0xba, 0x4c, 0x1b, 0xa7, 0xd5, 0xb3, 0xff, 0x5c, - 0xaa, 0xa7, 0xc0, 0x05, 0xb8, 0xe5, 0x0a, 0x6d, 0x2a, 0x9f, 0xc5, 0xff, 0x17, 0xf2, 0xff, 0x57, 0xf1, 0xa6, 0x6c, - 0x3f, 0x72, 0x0a, 0x12, 0xed, 0xe2, 0xb4, 0xd0, 0x51, 0x37, 0xed, 0x01, 0x61, 0x65, 0x30, 0x97, 0x15, 0xe8, 0xa0, - 0xa4, 0x2f, 0xa5, 0xdc, 0x68, 0x10, 0xbf, 0x23, 0xc5, 0x0c, 0x4b, 0x5c, 0x88, 0x10, 0x8b, 0x84, 0x71, 0x30, 0x07, - 0xe3, 0xe5, 0x29, 0xea, 0x0f, 0x4a, 0x7b, 0x02, 0xb4, 0xf1, 0xb5, 0xb9, 0x1d, 0x24, 0xee, 0xaf, 0xea, 0xb5, 0x78, - 0xc7, 0x00, 0x32, 0x07, 0x0e, 0x21, 0x1a, 0x12, 0x28, 0x95, 0xcd, 0x4d, 0x47, 0x29, 0xde, 0xca, 0x7a, 0x36, 0x3e, - 0x30, 0xec, 0xae, 0xb9, 0x0a, 0xed, 0x9b, 0x6b, 0x0b, 0x60, 0xb2, 0x6c, 0xfb, 0xe1, 0xb3, 0x09, 0x4b, 0x2c, 0xef, - 0x47, 0x07, 0x97, 0x1c, 0xf7, 0xaf, 0x89, 0x77, 0x67, 0x4a, 0xcf, 0x3f, 0xca, 0x17, 0xff, 0xda, 0x28, 0xd0, 0xbb, - 0x2a, 0x49, 0xe8, 0x98, 0xb5, 0x78, 0x47, 0x3f, 0xa8, 0xf6, 0xca, 0x0f, 0x0f, 0xaf, 0xeb, 0x6e, 0x0e, 0xae, 0x0b, - 0x17, 0xc6, 0xc1, 0x95, 0xe1, 0xc6, 0xa1, 0x96, 0x0b, 0xd9, 0xe8, 0xaf, 0x92, 0x40, 0x51, 0x76, 0xfc, 0x55, 0xb1, - 0x15, 0xa5, 0xf2, 0xaf, 0xd6, 0x40, 0x7c, 0x1e, 0x94, 0x52, 0x41, 0xe1, 0x59, 0xd1, 0xd4, 0xbe, 0x72, 0xaa, 0xf4, - 0xbb, 0xca, 0x89, 0xad, 0x52, 0x2e, 0x6c, 0xa4, 0xf6, 0x3a, 0x85, 0x43, 0xdf, 0xb1, 0xad, 0x8e, 0xcf, 0x16, 0xfc, - 0x92, 0x98, 0xfb, 0x41, 0x40, 0x51, 0x45, 0x9a, 0x25, 0xd1, 0x27, 0x52, 0x56, 0xb3, 0xd0, 0x32, 0x66, 0x04, 0xd2, - 0xe1, 0x8f, 0x70, 0x76, 0x3c, 0x37, 0x1e, 0xe0, 0xd9, 0x90, 0x0b, 0xc1, 0x80, 0x93, 0x96, 0xe2, 0x27, 0xe0, 0x0e, - 0x9e, 0xaa, 0xe3, 0x33, 0x08, 0x1a, 0xa8, 0xcc, 0x46, 0xea, 0x8f, 0x9d, 0xbe, 0xe2, 0xf4, 0xee, 0xcc, 0xae, 0x67, - 0x9b, 0x8e, 0x75, 0xac, 0xd8, 0xd6, 0x89, 0xd9, 0xb1, 0xfa, 0x4a, 0xc7, 0xea, 0xc1, 0xbf, 0x9e, 0x63, 0xbd, 0x52, - 0x6c, 0x78, 0x52, 0x1c, 0xab, 0x8b, 0xff, 0x76, 0xac, 0xfe, 0x5d, 0x97, 0xde, 0xf4, 0xae, 0x70, 0xab, 0xaa, 0x8c, - 0x02, 0x9c, 0x40, 0xd4, 0xa3, 0xf1, 0xd9, 0x3a, 0x25, 0xca, 0x66, 0xa4, 0xbe, 0x52, 0x95, 0x65, 0x42, 0xe6, 0x23, - 0xf5, 0xa9, 0x2b, 0x95, 0x3a, 0xa7, 0x8d, 0xc5, 0x9d, 0x7e, 0x63, 0x71, 0xf7, 0xa4, 0xb1, 0xf8, 0xb8, 0x57, 0x2e, - 0x3e, 0x5a, 0xd0, 0x57, 0x52, 0xce, 0xbe, 0x95, 0x9b, 0x25, 0xfe, 0x46, 0x73, 0x14, 0x40, 0xd7, 0x26, 0xfc, 0xd3, - 0xef, 0xe8, 0xa2, 0xd5, 0x14, 0x5a, 0x09, 0x68, 0xf4, 0x4f, 0x15, 0xe7, 0xe4, 0x2f, 0x9d, 0x13, 0x0f, 0xea, 0x41, - 0x86, 0x49, 0xf8, 0xbb, 0xeb, 0x9e, 0x7a, 0xb6, 0x02, 0x0d, 0x1d, 0xf8, 0x6f, 0xd9, 0xeb, 0x78, 0xf4, 0xc1, 0x86, - 0xf7, 0x1f, 0x9d, 0x7e, 0x6a, 0x9b, 0x0e, 0xfc, 0xf7, 0x9b, 0x50, 0xb9, 0x83, 0xc2, 0x5f, 0xee, 0xf7, 0xd8, 0x56, - 0xba, 0xa7, 0xcb, 0x8e, 0xf5, 0xea, 0xae, 0x6f, 0x9d, 0x2e, 0x9d, 0xfe, 0x47, 0xfa, 0x14, 0x98, 0x1d, 0xeb, 0x15, - 0xfc, 0x7d, 0xec, 0xda, 0x4b, 0xd3, 0xb1, 0x4e, 0xef, 0xba, 0x56, 0x37, 0x30, 0x4f, 0xac, 0x53, 0xf8, 0xfb, 0x0d, - 0xc0, 0x0b, 0x70, 0x65, 0x29, 0x41, 0x15, 0xd8, 0x18, 0x15, 0xfb, 0x0d, 0xf9, 0x23, 0x9d, 0x63, 0xa5, 0x77, 0xfc, - 0x97, 0xd3, 0x3b, 0xf3, 0x78, 0xe9, 0x74, 0xee, 0xcc, 0xd6, 0x9f, 0x1f, 0x01, 0xf2, 0xbb, 0x17, 0x0e, 0xc0, 0x88, - 0x39, 0x40, 0xfe, 0x34, 0x31, 0x2e, 0xdb, 0xc4, 0xe8, 0xef, 0xf7, 0x8b, 0xd1, 0x7f, 0x58, 0x1f, 0x22, 0x46, 0x7f, - 0xff, 0xd5, 0xc5, 0xe8, 0x97, 0x55, 0x2b, 0xee, 0xf7, 0xd5, 0x58, 0xe5, 0xbf, 0x6c, 0xab, 0x44, 0xb2, 0xef, 0x6a, - 0xd7, 0x57, 0xeb, 0x1b, 0x88, 0xb6, 0xf3, 0x3e, 0x1a, 0xfd, 0xb0, 0x2e, 0x99, 0x28, 0x45, 0x80, 0x01, 0xde, 0x47, - 0x14, 0x03, 0xfc, 0xb6, 0x1e, 0x81, 0x5d, 0x04, 0xbb, 0x35, 0xfd, 0x99, 0xb9, 0x74, 0x83, 0xb9, 0xb8, 0x71, 0xa1, - 0x64, 0x88, 0xc5, 0x60, 0x33, 0x0f, 0x97, 0x09, 0x28, 0x6b, 0xd6, 0xab, 0x30, 0x1d, 0x9c, 0xd8, 0x80, 0xe6, 0x3b, - 0xf3, 0x24, 0xaf, 0x34, 0xb6, 0x78, 0x7c, 0xa2, 0x5b, 0x66, 0xd3, 0xdf, 0xfa, 0x1e, 0x4d, 0xd6, 0x9a, 0x7b, 0x77, - 0xea, 0xfd, 0x2a, 0x60, 0x0b, 0xc2, 0x4d, 0xfa, 0x80, 0xd8, 0x68, 0x7a, 0x5f, 0x36, 0x1c, 0xab, 0x98, 0x0a, 0xb6, - 0x8f, 0x14, 0x46, 0x52, 0x6d, 0xef, 0x94, 0x0d, 0xcf, 0xf6, 0x4d, 0xb3, 0xe1, 0xf3, 0xa5, 0xe6, 0x3b, 0xac, 0xde, - 0x44, 0xc7, 0x55, 0x50, 0x55, 0x32, 0x6d, 0x35, 0x02, 0xa4, 0xa0, 0x3d, 0x0b, 0xd3, 0xb8, 0x82, 0xf0, 0xb1, 0x15, - 0xbc, 0x8d, 0x6d, 0xe9, 0x5d, 0xa9, 0x4f, 0xd9, 0x9c, 0xee, 0xc5, 0x16, 0xe9, 0x41, 0xff, 0x37, 0x20, 0x6c, 0xd8, - 0x7d, 0x3c, 0x8d, 0x64, 0x38, 0x6f, 0xa5, 0x7e, 0x29, 0xa9, 0x9d, 0x2f, 0x9d, 0x6d, 0x9d, 0xb4, 0x69, 0x35, 0xa4, - 0x75, 0xc8, 0x8a, 0xdf, 0xd1, 0xf8, 0x79, 0x6a, 0xb6, 0x9a, 0x53, 0xd3, 0x62, 0xb4, 0xcc, 0xdd, 0xd5, 0x19, 0xaf, - 0xf7, 0x14, 0x36, 0xb1, 0xc1, 0x1e, 0x64, 0xc7, 0xf1, 0xed, 0x1c, 0xb2, 0x22, 0x0f, 0x90, 0x88, 0x90, 0x28, 0xa8, - 0x0e, 0xda, 0xd8, 0x0e, 0x77, 0x98, 0x7f, 0xc8, 0x1d, 0xb3, 0x4e, 0xd0, 0x56, 0x77, 0x97, 0xc5, 0x88, 0x70, 0x6d, - 0xd8, 0x96, 0x14, 0xa8, 0x4e, 0xaf, 0x6f, 0x38, 0x27, 0x86, 0xd5, 0xef, 0xe9, 0x39, 0x3f, 0x70, 0x72, 0x97, 0x25, - 0x80, 0x80, 0xc9, 0xae, 0x18, 0xa6, 0x1f, 0xfa, 0x99, 0xef, 0x06, 0x39, 0xa0, 0xfa, 0x32, 0xcd, 0xfb, 0xcf, 0x75, - 0x9a, 0xc1, 0x1c, 0x39, 0x49, 0x86, 0xe6, 0xca, 0xe6, 0x94, 0x64, 0xf7, 0x84, 0x84, 0x2d, 0xaa, 0xdc, 0xaa, 0xf5, - 0xf3, 0x1f, 0x67, 0x0b, 0x9a, 0x53, 0x3b, 0x8b, 0x69, 0x16, 0xb2, 0xfd, 0xc1, 0x4d, 0x75, 0xf3, 0x89, 0xf1, 0x53, - 0x1b, 0xc2, 0xfd, 0xe7, 0x7e, 0x84, 0x9b, 0x91, 0x43, 0x10, 0xee, 0x3f, 0xbf, 0x3a, 0xc2, 0xfd, 0x49, 0x46, 0xb8, - 0x25, 0x4f, 0x95, 0x42, 0x26, 0xfa, 0x01, 0x9f, 0x35, 0x08, 0xf2, 0xfb, 0x52, 0x3d, 0xa2, 0xe4, 0xa5, 0x2a, 0x25, - 0x5f, 0xfd, 0x58, 0xca, 0x26, 0x83, 0x2c, 0x3b, 0x06, 0x25, 0xa5, 0x99, 0x2b, 0x20, 0x31, 0xa9, 0x48, 0xb1, 0x0d, - 0x7d, 0x5e, 0x84, 0x59, 0x60, 0xbd, 0x67, 0x6c, 0x09, 0xa8, 0x20, 0x7e, 0x88, 0x92, 0x95, 0x8b, 0x01, 0xd9, 0x54, - 0xcc, 0x42, 0x07, 0x0f, 0x36, 0x78, 0x47, 0x79, 0x51, 0x38, 0x13, 0x72, 0x74, 0x32, 0xba, 0xa6, 0xf4, 0xa0, 0xfa, - 0x40, 0xdc, 0x44, 0x35, 0xe8, 0x6b, 0x58, 0xdc, 0x17, 0x5d, 0xfb, 0x45, 0xe7, 0xf8, 0xc5, 0x89, 0x0d, 0xff, 0x73, - 0x48, 0x37, 0x37, 0x58, 0xc5, 0x55, 0x14, 0x42, 0x22, 0x0c, 0x5e, 0xb3, 0xad, 0xda, 0x3d, 0x21, 0x9f, 0x8a, 0x5a, - 0xfd, 0xe6, 0x4a, 0x33, 0xf7, 0xa1, 0xa8, 0xd3, 0x58, 0x63, 0x19, 0xad, 0xa5, 0x61, 0x35, 0x8c, 0xc6, 0x0f, 0xd7, - 0x20, 0x19, 0x92, 0x6a, 0xc8, 0xaf, 0xd9, 0x74, 0x8b, 0x79, 0x91, 0x6e, 0x7e, 0x53, 0x64, 0xdb, 0xe1, 0x59, 0x3f, - 0xf6, 0x42, 0x90, 0x09, 0xd5, 0x6d, 0x8c, 0xd5, 0x8d, 0xf9, 0x66, 0x14, 0xc8, 0x75, 0x57, 0xa4, 0x54, 0xc7, 0x05, - 0xca, 0x92, 0x75, 0xe8, 0xd1, 0xac, 0xe9, 0xee, 0x34, 0xd5, 0xfc, 0x23, 0x88, 0xd6, 0x89, 0x1f, 0xd6, 0x71, 0xd5, - 0xdc, 0xb1, 0x5d, 0xa4, 0x26, 0x48, 0xf9, 0xaa, 0xb8, 0x2f, 0x32, 0x23, 0xa1, 0x09, 0x4d, 0x71, 0x69, 0xcd, 0x91, - 0xfb, 0x42, 0x34, 0x7c, 0x91, 0x19, 0x90, 0x54, 0x14, 0x96, 0xfb, 0xf9, 0x73, 0x5a, 0x0b, 0xd2, 0xfc, 0xd1, 0x69, - 0x9d, 0x7b, 0x22, 0x35, 0x98, 0xaa, 0xb8, 0x8b, 0x48, 0xc5, 0xd4, 0x60, 0x03, 0xcf, 0x88, 0x5e, 0xbe, 0x1c, 0x8f, - 0x1c, 0x9d, 0x25, 0xa9, 0x2c, 0x65, 0x54, 0xba, 0x3c, 0x4c, 0x35, 0xae, 0x37, 0x3a, 0x6d, 0xc5, 0x7e, 0xb8, 0xe0, - 0x9a, 0x69, 0x81, 0xbd, 0x20, 0xc3, 0x01, 0x55, 0x81, 0xb9, 0x5c, 0x45, 0xcd, 0xeb, 0xdc, 0x91, 0x04, 0x12, 0x6c, - 0x8e, 0xd4, 0xae, 0x65, 0x5b, 0xb6, 0x2a, 0x1a, 0xce, 0xfd, 0xc5, 0x68, 0x1b, 0x65, 0x2e, 0xe4, 0x8a, 0x09, 0xa2, - 0x05, 0x78, 0x7e, 0x64, 0x7e, 0x16, 0x40, 0xe2, 0x11, 0x70, 0x01, 0x59, 0x51, 0xae, 0x31, 0x67, 0xf6, 0xb8, 0x6e, - 0xf2, 0x09, 0x93, 0xcf, 0x71, 0xa7, 0x2f, 0x0c, 0x49, 0xf3, 0x23, 0x5c, 0x86, 0x9a, 0xaa, 0x41, 0xea, 0x43, 0x92, - 0xa4, 0xa6, 0x6c, 0xdf, 0x3e, 0x50, 0xa0, 0x0d, 0xa4, 0x25, 0xc7, 0x0e, 0xe6, 0x89, 0xbb, 0x82, 0x18, 0xdd, 0xdb, - 0xdc, 0x60, 0x98, 0x56, 0x65, 0xa8, 0x56, 0x71, 0x5e, 0x9d, 0x18, 0x4a, 0xc7, 0x31, 0x14, 0x1b, 0xd0, 0xad, 0x9a, - 0x1b, 0xdb, 0xfc, 0x66, 0xb8, 0x4f, 0x45, 0x47, 0xf1, 0xcb, 0x53, 0x3a, 0x0f, 0xaa, 0x9c, 0x63, 0xc2, 0xcf, 0x8c, - 0x06, 0x14, 0xd4, 0xa4, 0xe8, 0xd9, 0x3e, 0x15, 0xd3, 0x5f, 0x91, 0x4d, 0xa6, 0x63, 0x62, 0x0e, 0x56, 0xc5, 0xd7, - 0xb7, 0xe8, 0x9a, 0xe6, 0x87, 0x8a, 0xff, 0xf9, 0xb3, 0xe6, 0x83, 0xf9, 0xfd, 0x48, 0x82, 0x0f, 0x3c, 0xeb, 0x25, - 0x80, 0xf9, 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0xcc, 0x7f, 0x30, 0xc5, 0x9e, 0x15, 0xb8, - 0xe1, 0x02, 0x50, 0x9a, 0x1b, 0x2e, 0x6a, 0x06, 0x04, 0xd4, 0xbb, 0xae, 0x52, 0x5a, 0x74, 0x55, 0x28, 0xf7, 0xd3, - 0xef, 0x1f, 0xae, 0x68, 0xe2, 0x21, 0x48, 0x72, 0xed, 0xce, 0xd0, 0x15, 0xac, 0xd0, 0x3d, 0xbc, 0x1c, 0x7d, 0x73, - 0xb6, 0x22, 0x99, 0x4b, 0x05, 0x97, 0xc0, 0xe2, 0x01, 0x39, 0xa0, 0x78, 0x3c, 0x69, 0x28, 0x65, 0xf0, 0x66, 0xe4, - 0xce, 0xf7, 0x18, 0x9f, 0x66, 0x28, 0xec, 0x9e, 0x32, 0xd1, 0x46, 0x69, 0xe4, 0x18, 0xd4, 0x44, 0xd6, 0x73, 0x31, - 0xec, 0xe0, 0x28, 0x8c, 0xd4, 0xf1, 0x37, 0xc2, 0x9b, 0xa8, 0x6d, 0x11, 0x20, 0xfb, 0xdf, 0x75, 0x42, 0x82, 0x7f, - 0x8d, 0xbe, 0x81, 0x8b, 0xfb, 0x9b, 0x1b, 0x55, 0x1f, 0x66, 0x16, 0xf2, 0x31, 0xdf, 0x34, 0x64, 0xc1, 0x43, 0x1e, - 0x95, 0x31, 0x9b, 0x5d, 0x89, 0xd9, 0x84, 0xdf, 0xfb, 0x59, 0xd7, 0xf1, 0x19, 0x5e, 0x68, 0x63, 0xe0, 0x2e, 0xb6, - 0x25, 0x9e, 0xd3, 0x19, 0x22, 0x83, 0x3a, 0x0d, 0x5c, 0xef, 0x13, 0xe7, 0x50, 0xe5, 0x87, 0x43, 0x78, 0x51, 0x41, - 0xd9, 0x35, 0xee, 0x65, 0xdc, 0xca, 0x5b, 0xfc, 0x32, 0x7e, 0xea, 0x7e, 0xe9, 0x67, 0x82, 0x19, 0xc6, 0x87, 0x1c, - 0xb4, 0x39, 0x38, 0xbe, 0x82, 0xfd, 0x01, 0x06, 0xd5, 0x39, 0xfd, 0x4b, 0xef, 0xce, 0xb1, 0x97, 0x1d, 0xc7, 0x02, - 0x36, 0x67, 0xd9, 0xb5, 0xfa, 0x81, 0xd9, 0xb5, 0xfa, 0xf0, 0xf7, 0x11, 0x58, 0x2f, 0xb3, 0x63, 0x1d, 0x7f, 0x74, - 0x3a, 0x81, 0x79, 0x6a, 0xf5, 0xe1, 0xef, 0x92, 0xb6, 0xfa, 0x05, 0x99, 0x1e, 0x60, 0x78, 0xbe, 0x29, 0x61, 0x01, - 0xe9, 0xb7, 0xd0, 0x22, 0x18, 0xa5, 0xeb, 0xad, 0x41, 0x13, 0x01, 0x28, 0x43, 0x35, 0x78, 0x94, 0xc0, 0x70, 0xa8, - 0x41, 0x5a, 0x6e, 0x0c, 0x28, 0xcf, 0x0d, 0x32, 0xc2, 0x22, 0xc5, 0x7c, 0xfb, 0x31, 0x62, 0x6d, 0x9a, 0x03, 0x70, - 0xf3, 0x4c, 0x45, 0x54, 0x75, 0xf1, 0xb7, 0x18, 0x03, 0xeb, 0xf0, 0x90, 0xe1, 0x12, 0x56, 0x2a, 0xb2, 0xe5, 0xe5, - 0xfb, 0x07, 0x8e, 0x7e, 0xa3, 0x44, 0x64, 0x6b, 0xf9, 0xaa, 0x7d, 0x33, 0x75, 0x86, 0xe8, 0xfd, 0xf7, 0xf6, 0x83, - 0x49, 0x4a, 0x69, 0x3f, 0x3c, 0xba, 0xe7, 0xcc, 0x4f, 0xc4, 0xf0, 0x24, 0x14, 0xed, 0x34, 0x47, 0x2e, 0xd7, 0x21, - 0xad, 0xc5, 0x05, 0x50, 0xc9, 0x77, 0x6e, 0x20, 0x99, 0x5e, 0x48, 0x2d, 0x9f, 0x08, 0xcc, 0xff, 0xfc, 0x79, 0x31, - 0x38, 0xb3, 0x32, 0xee, 0x33, 0xa7, 0x07, 0xd7, 0x6e, 0x8f, 0x74, 0x77, 0x5a, 0x01, 0xed, 0x0f, 0x0f, 0x5b, 0xc4, - 0x93, 0xe4, 0x9a, 0x7e, 0xae, 0x63, 0x6c, 0x35, 0x45, 0xaa, 0x69, 0x18, 0x21, 0xb0, 0x6e, 0x85, 0xd5, 0x51, 0xf5, - 0x61, 0xc8, 0x15, 0x66, 0xe1, 0x8e, 0x90, 0xb8, 0x8c, 0x17, 0x53, 0x01, 0x34, 0x3b, 0xe6, 0xb1, 0xc7, 0xa5, 0xf1, - 0x7f, 0x3d, 0x09, 0x74, 0x2f, 0x02, 0x0d, 0x5f, 0xe5, 0xb4, 0x96, 0xdc, 0x4d, 0xc4, 0xbd, 0x4a, 0x2f, 0x54, 0x92, - 0x9e, 0xab, 0x50, 0x04, 0xf9, 0x8e, 0x30, 0xc5, 0x99, 0x30, 0x6f, 0x12, 0xb7, 0x45, 0x51, 0x60, 0xf8, 0x10, 0x13, - 0x5a, 0xe3, 0xae, 0x4e, 0xfa, 0xf3, 0xe7, 0xad, 0x97, 0x10, 0x55, 0x27, 0xcb, 0x99, 0x1e, 0x55, 0x19, 0xbf, 0xa9, - 0x32, 0x8a, 0x11, 0xfd, 0x22, 0xd6, 0xe0, 0x56, 0x59, 0x74, 0xef, 0xe1, 0xcf, 0x29, 0x71, 0x33, 0x8b, 0xe9, 0x41, - 0x34, 0xe9, 0x72, 0x37, 0x1c, 0xd2, 0x05, 0x7b, 0x2c, 0x16, 0x7f, 0x8b, 0x05, 0x9b, 0x7b, 0xb6, 0xfd, 0xb8, 0x66, - 0x7e, 0xc8, 0xd0, 0xc7, 0x67, 0xbb, 0x08, 0x9e, 0xf2, 0x2e, 0x73, 0x69, 0x84, 0x0d, 0xf9, 0xca, 0x8d, 0x32, 0x97, - 0xe7, 0x15, 0x01, 0xba, 0x7c, 0xd8, 0xa8, 0x30, 0x94, 0x7c, 0x95, 0xc7, 0xef, 0xae, 0xbe, 0x53, 0xd8, 0xfe, 0xa7, - 0xfa, 0x2d, 0x64, 0x64, 0x68, 0x14, 0xfc, 0x11, 0x8d, 0x82, 0xaf, 0xb0, 0xb4, 0x12, 0x10, 0x4b, 0x3e, 0x3f, 0xa2, - 0x10, 0x54, 0x15, 0x12, 0x7a, 0x54, 0xeb, 0xb7, 0x5a, 0x07, 0x99, 0x1f, 0xbb, 0x49, 0x76, 0x04, 0x4d, 0x4d, 0x40, - 0x72, 0x6a, 0x9b, 0x07, 0x33, 0x55, 0x1c, 0x72, 0xa1, 0x5a, 0x16, 0x72, 0xcd, 0xe1, 0xdc, 0x0f, 0x84, 0xe2, 0x90, - 0x7f, 0xc0, 0xf5, 0x3c, 0x12, 0x67, 0x23, 0xd5, 0x8d, 0x21, 0x1b, 0x02, 0xc6, 0x37, 0x3e, 0x8a, 0xbc, 0x8c, 0x64, - 0x66, 0x9a, 0x25, 0xc4, 0x5d, 0xa9, 0x22, 0xd6, 0x67, 0xbd, 0xbf, 0x74, 0x3d, 0x5d, 0xf9, 0x99, 0x08, 0x96, 0x47, - 0x27, 0x08, 0x2a, 0x3c, 0x18, 0xe2, 0x78, 0x92, 0x33, 0x10, 0x5e, 0x46, 0x8b, 0xca, 0x8e, 0x2a, 0x28, 0x97, 0x73, - 0x0c, 0xc5, 0xca, 0x22, 0xe0, 0xcf, 0xd0, 0x23, 0xe7, 0x96, 0x79, 0x5d, 0x8b, 0x98, 0x7e, 0xea, 0xf8, 0x8c, 0xb1, - 0xb7, 0x0a, 0x06, 0x0a, 0x50, 0x7b, 0x36, 0x04, 0x9b, 0x6d, 0xf3, 0xc7, 0x3e, 0x62, 0x95, 0xe1, 0x6a, 0xa2, 0x3d, - 0x63, 0xdc, 0x6f, 0x3a, 0x96, 0x2b, 0x20, 0x84, 0x4a, 0x2a, 0xde, 0xa5, 0x33, 0x16, 0x0e, 0x40, 0x38, 0x2a, 0xa4, - 0x95, 0x3e, 0x7f, 0x7e, 0x3d, 0xf9, 0xcf, 0xbf, 0x21, 0x38, 0xf9, 0xd2, 0xe1, 0x5e, 0xd0, 0xd7, 0x72, 0x2d, 0x46, - 0x7d, 0x1a, 0x13, 0x54, 0xef, 0x93, 0x19, 0x0f, 0x0b, 0xc2, 0xb7, 0x56, 0x3e, 0xb9, 0xe1, 0xa1, 0x9e, 0x20, 0x01, - 0x81, 0xce, 0x7d, 0xb5, 0x27, 0xb0, 0xbc, 0x13, 0x1e, 0x22, 0x40, 0xf9, 0x75, 0xf3, 0x7d, 0x1f, 0xb2, 0xf4, 0xd6, - 0xf2, 0x02, 0x48, 0x03, 0xc4, 0x3d, 0x34, 0x3e, 0x73, 0x99, 0xf0, 0x15, 0xc8, 0x8f, 0x74, 0x70, 0x04, 0xd3, 0x5c, - 0x46, 0x2b, 0x62, 0xf9, 0xd1, 0xd1, 0x3d, 0x99, 0x9a, 0x6e, 0xec, 0x53, 0xf9, 0x32, 0xca, 0xdd, 0x14, 0x4a, 0xf9, - 0x09, 0x05, 0x2d, 0xa5, 0xaf, 0xf3, 0x02, 0x94, 0x51, 0x01, 0x28, 0xf8, 0xe9, 0x8e, 0xcb, 0x01, 0xfc, 0x2c, 0x1e, - 0x31, 0xbe, 0x8c, 0xe5, 0xcf, 0x69, 0x1c, 0x3e, 0x1e, 0x72, 0xaf, 0x78, 0x30, 0xa3, 0xf9, 0x5c, 0x0e, 0xba, 0x67, - 0x95, 0xbf, 0x2f, 0xa0, 0x52, 0xec, 0xd9, 0x28, 0xa6, 0x5f, 0xaa, 0x7f, 0x42, 0xfc, 0x84, 0x6c, 0xb9, 0x2c, 0x3e, - 0x23, 0x9c, 0xe7, 0x5a, 0xf0, 0x3e, 0x01, 0x92, 0xa7, 0xb4, 0x12, 0x43, 0x14, 0xd5, 0xc8, 0xd0, 0x2d, 0xa4, 0xc9, - 0x93, 0xd1, 0x88, 0xe2, 0xb1, 0x2a, 0x3a, 0x03, 0x28, 0x35, 0x44, 0xcf, 0x87, 0xc9, 0x66, 0xd0, 0xd0, 0xa4, 0x1e, - 0x5c, 0xd8, 0xa8, 0x3a, 0x9d, 0xfa, 0x18, 0x8f, 0x5c, 0xbe, 0xbf, 0x4a, 0x3b, 0x10, 0x76, 0x16, 0x5b, 0x58, 0x40, - 0xe0, 0xbc, 0x9f, 0x0a, 0x1e, 0x57, 0xbe, 0xa5, 0x28, 0xdb, 0x0c, 0xdc, 0x87, 0x48, 0xd2, 0xac, 0x33, 0x27, 0xfb, - 0x4b, 0x2c, 0xbd, 0xe2, 0xce, 0x6d, 0xb5, 0x93, 0x24, 0x22, 0x90, 0xd7, 0x4f, 0x93, 0x1c, 0x32, 0x7c, 0xdf, 0x61, - 0x92, 0xeb, 0x96, 0x27, 0x83, 0xd8, 0x31, 0x2f, 0x0e, 0x5a, 0xe9, 0x25, 0x9e, 0xfb, 0xfc, 0xec, 0x08, 0xe6, 0x07, - 0x81, 0x01, 0x4a, 0x94, 0x91, 0xaf, 0x43, 0xf4, 0x01, 0x37, 0xa5, 0xd6, 0x01, 0x17, 0x33, 0x4e, 0xd4, 0x21, 0xe7, - 0x28, 0xa2, 0x83, 0x96, 0xaa, 0xd4, 0x89, 0x15, 0xbb, 0x99, 0xca, 0xdb, 0x1f, 0xb1, 0xff, 0xb7, 0x35, 0x86, 0xeb, - 0xcf, 0x87, 0x19, 0xe1, 0x7e, 0xb7, 0x97, 0x59, 0x8b, 0x6b, 0x6e, 0x5b, 0x15, 0x4a, 0xb0, 0xee, 0xa8, 0x50, 0xec, - 0xe3, 0x5d, 0xb5, 0x0a, 0xd2, 0x48, 0x54, 0x8b, 0x5d, 0x4d, 0x7d, 0x8a, 0x3b, 0xbe, 0x56, 0x1b, 0x4b, 0xa1, 0xde, - 0x65, 0x36, 0x82, 0xaa, 0x5c, 0xd8, 0xee, 0xc6, 0x31, 0xad, 0xac, 0x0f, 0xcf, 0x8e, 0x28, 0xdf, 0x39, 0xa6, 0x3b, - 0x6c, 0x7c, 0x06, 0xd6, 0x85, 0x74, 0xd1, 0xdd, 0x38, 0x66, 0x4b, 0x4a, 0x7f, 0xd1, 0x37, 0x47, 0xcb, 0x6c, 0x15, - 0x8c, 0xff, 0x0f, 0x00, 0xa3, 0x9b, 0x76, 0x11, 0x5a, 0x03, 0x00}; + 0xdc, 0xd3, 0x2f, 0xb7, 0x8d, 0x1b, 0xff, 0x7f, 0x9f, 0x82, 0x61, 0xd2, 0x1c, 0x99, 0x90, 0x34, 0x29, 0x59, 0xb6, + 0x23, 0x59, 0xf6, 0xdd, 0x25, 0xb9, 0xa9, 0x3b, 0xbe, 0xcb, 0x4d, 0xe2, 0x66, 0xda, 0xf3, 0x79, 0x2c, 0x4a, 0x82, + 0x24, 0x36, 0x14, 0xa9, 0x21, 0x29, 0x5b, 0x3e, 0x85, 0x7d, 0x96, 0x3e, 0x4b, 0x9f, 0xec, 0x37, 0xbb, 0x0b, 0x80, + 0xe0, 0x87, 0x3e, 0x7c, 0xc9, 0xb5, 0xbf, 0xb9, 0xba, 0x11, 0x41, 0x00, 0x04, 0x16, 0xc0, 0x62, 0xbf, 0xd7, 0x9f, + 0x72, 0xd9, 0x8b, 0x65, 0xb0, 0xfd, 0x3e, 0xf7, 0xf9, 0x33, 0x73, 0x70, 0x4b, 0x02, 0xc1, 0xe7, 0x64, 0xf1, 0x74, + 0x1a, 0x32, 0x43, 0x17, 0xc9, 0x43, 0x74, 0x4b, 0x7e, 0xe6, 0xfc, 0x89, 0x2b, 0x22, 0x76, 0x9a, 0xf9, 0xa6, 0xa3, + 0x25, 0x66, 0xcc, 0x64, 0x48, 0x3b, 0xa2, 0x5c, 0x51, 0x36, 0x7b, 0x87, 0xea, 0x0d, 0xbe, 0x2e, 0xc5, 0xd1, 0xb5, + 0xc7, 0xf1, 0x72, 0x18, 0x32, 0x1b, 0xb7, 0x3b, 0x7c, 0x72, 0x3d, 0x5c, 0x0e, 0x87, 0x90, 0xa5, 0xe5, 0x89, 0x6b, + 0x41, 0xdc, 0x99, 0x38, 0x45, 0x7e, 0x30, 0x37, 0x7b, 0x30, 0x29, 0x27, 0xab, 0x0e, 0x1f, 0x6c, 0x45, 0x40, 0xd4, + 0x43, 0x1f, 0xc8, 0x80, 0xf7, 0x6b, 0x38, 0xb5, 0x7d, 0xfd, 0x03, 0xec, 0xbe, 0x54, 0xef, 0x35, 0x1d, 0xfd, 0xfe, + 0xb5, 0xfe, 0x01, 0x61, 0x8c, 0xd9, 0x8b, 0x5f, 0xd3, 0xee, 0xd5, 0x2d, 0x9d, 0x94, 0xde, 0x4b, 0xcc, 0x63, 0x00, + 0x42, 0xdf, 0x37, 0x81, 0x3f, 0x8d, 0xe2, 0x34, 0x0b, 0x46, 0xfa, 0x4d, 0xef, 0x22, 0x30, 0xae, 0xe7, 0x99, 0x61, + 0xde, 0x58, 0xa3, 0x4c, 0x4d, 0x81, 0x22, 0x10, 0x26, 0x66, 0x40, 0xd9, 0x54, 0x49, 0x3d, 0x41, 0x5b, 0x2b, 0x0a, + 0xd4, 0x8c, 0x95, 0x46, 0x59, 0x1f, 0xea, 0x55, 0xf2, 0xa9, 0x60, 0x62, 0x28, 0x1d, 0x5b, 0x9a, 0x3d, 0xe2, 0x54, + 0x5e, 0x2f, 0xd7, 0x78, 0x95, 0x67, 0xc5, 0x6d, 0x89, 0x31, 0x80, 0x85, 0xe3, 0x0c, 0x3d, 0x3f, 0x51, 0x8d, 0x3e, + 0x4b, 0xf7, 0xee, 0xe0, 0xbb, 0x32, 0x5d, 0x00, 0xf7, 0x37, 0x58, 0x5c, 0x44, 0x71, 0xa6, 0x41, 0x60, 0x1b, 0xf8, + 0xe2, 0xa0, 0x6a, 0x24, 0xc6, 0x7b, 0x35, 0xcc, 0x9c, 0x23, 0x83, 0xef, 0xf1, 0xf2, 0x33, 0x78, 0x78, 0xb3, 0x52, + 0x04, 0x0b, 0x62, 0x16, 0x22, 0x58, 0xc0, 0x2c, 0xbe, 0x8c, 0xef, 0xab, 0x7a, 0x90, 0xd7, 0x83, 0xdd, 0x77, 0xaf, + 0x21, 0xc8, 0x64, 0x91, 0xd5, 0xcf, 0xe0, 0x89, 0x49, 0x05, 0xa1, 0x53, 0x39, 0x53, 0x68, 0xf8, 0x21, 0x68, 0x98, + 0x0c, 0xec, 0xc4, 0xf0, 0x2e, 0x00, 0x94, 0xc4, 0xaf, 0xe9, 0x41, 0x7e, 0x2b, 0x52, 0x27, 0x8b, 0xc4, 0xc5, 0xca, + 0xe5, 0x0c, 0xd8, 0x35, 0x5a, 0x2c, 0x33, 0x0c, 0xb5, 0x0b, 0x03, 0x60, 0xb9, 0xae, 0x61, 0xe8, 0x4e, 0xc0, 0xd2, + 0x05, 0x99, 0x98, 0xeb, 0x5a, 0x30, 0xae, 0x97, 0x71, 0xa2, 0x17, 0x90, 0x17, 0xe2, 0x77, 0x14, 0x54, 0xc1, 0x63, + 0xc2, 0xa7, 0x31, 0xb2, 0x8a, 0x38, 0xf5, 0xc6, 0x08, 0x15, 0x3a, 0x0d, 0x98, 0x61, 0x44, 0xfd, 0xf4, 0x8c, 0xb0, + 0x71, 0xb2, 0x10, 0x7e, 0xb3, 0x34, 0xcd, 0xc1, 0xb3, 0x75, 0x94, 0x9f, 0x3f, 0x5b, 0xa7, 0x79, 0xff, 0xd9, 0xda, + 0x97, 0xb6, 0x02, 0xfa, 0x95, 0x4e, 0x86, 0x02, 0x03, 0x04, 0xc3, 0x20, 0xbf, 0x2d, 0x3c, 0x77, 0x8a, 0xf9, 0xc2, + 0x2e, 0xa3, 0x72, 0x0d, 0x55, 0xf7, 0x7d, 0xae, 0xa0, 0x5f, 0x24, 0xc1, 0xdc, 0x4f, 0x1e, 0x48, 0x9f, 0x6f, 0xa9, + 0x4a, 0x7f, 0x53, 0xd7, 0x08, 0xd1, 0x13, 0x00, 0x08, 0xe7, 0xeb, 0xda, 0xb7, 0xb2, 0x8c, 0xf1, 0xd9, 0x4a, 0xa5, + 0x26, 0x7c, 0xeb, 0x56, 0x7f, 0xc9, 0x9c, 0x31, 0xcb, 0xfc, 0x20, 0xa4, 0x26, 0x3d, 0x91, 0xad, 0xbe, 0x36, 0xbd, + 0xb4, 0x3c, 0xbd, 0xa8, 0xbc, 0x7f, 0x70, 0x32, 0x74, 0x05, 0xd0, 0xb8, 0x71, 0x66, 0x98, 0xc5, 0xaa, 0x79, 0x45, + 0xe9, 0xdd, 0x7f, 0x75, 0x39, 0x18, 0x2c, 0x47, 0x04, 0xcb, 0xc1, 0xa2, 0x51, 0x3c, 0x66, 0x7f, 0x7b, 0x7f, 0x21, + 0xd3, 0x66, 0x81, 0x04, 0x68, 0xc0, 0x37, 0x66, 0x8a, 0xf4, 0x43, 0x82, 0xb4, 0x03, 0x25, 0xb8, 0xd2, 0xe4, 0x16, + 0x4a, 0x72, 0x5d, 0x3b, 0xa7, 0xb1, 0xb3, 0x31, 0x8d, 0xba, 0x1f, 0x63, 0xab, 0x24, 0x3f, 0x3d, 0xa0, 0xda, 0x74, + 0xdb, 0x51, 0x25, 0x00, 0x43, 0x02, 0x33, 0x2c, 0xa0, 0x00, 0x19, 0x3e, 0xfb, 0x5e, 0xc1, 0x50, 0x38, 0x73, 0x94, + 0xb3, 0x7b, 0xe7, 0x65, 0x52, 0x05, 0x5b, 0xe9, 0x67, 0xa7, 0x98, 0xb3, 0x0b, 0xee, 0x6b, 0x88, 0xf2, 0x71, 0x7a, + 0x40, 0x8f, 0x5a, 0xe5, 0x44, 0x14, 0x9d, 0x08, 0xd6, 0xae, 0xcb, 0x3b, 0x78, 0xd4, 0x51, 0x81, 0x14, 0xf1, 0x50, + 0xea, 0xe7, 0xba, 0x36, 0xe7, 0xa4, 0x11, 0x0f, 0x27, 0x04, 0xb1, 0x06, 0x5c, 0x38, 0xbb, 0xba, 0x36, 0xf7, 0x57, + 0x38, 0x73, 0xf1, 0xc6, 0x5f, 0x19, 0x1e, 0x7f, 0x55, 0x9c, 0xb5, 0xb4, 0x7c, 0xd6, 0x46, 0x7c, 0x71, 0xc1, 0x91, + 0x40, 0x72, 0xd6, 0x33, 0x54, 0xd0, 0x36, 0x2c, 0xee, 0x4c, 0x2c, 0xee, 0x78, 0xc3, 0xe2, 0x8e, 0xb7, 0x2c, 0x6e, + 0xc8, 0x17, 0x52, 0x93, 0xa0, 0x4b, 0xd0, 0x39, 0x4c, 0x02, 0x8f, 0x13, 0x1a, 0x5d, 0x7e, 0xce, 0x10, 0x4e, 0x76, + 0x1a, 0x82, 0x71, 0xd4, 0x06, 0x58, 0x35, 0xc1, 0x45, 0x01, 0x44, 0x7d, 0xe2, 0xf2, 0xd4, 0x89, 0x79, 0x43, 0x0e, + 0x4e, 0x23, 0xac, 0xce, 0x17, 0x76, 0x29, 0xe5, 0x17, 0x37, 0x66, 0x1b, 0x66, 0x3a, 0xdb, 0x32, 0xd3, 0x51, 0xe9, + 0xe8, 0xf2, 0x69, 0xd3, 0x21, 0x54, 0x27, 0x05, 0x7b, 0x10, 0x0c, 0x46, 0x71, 0xcb, 0x94, 0xf7, 0xe1, 0x66, 0x1c, + 0xab, 0xec, 0xa8, 0x85, 0x9f, 0xa6, 0xf7, 0x71, 0x02, 0x1a, 0x17, 0xe8, 0xe6, 0x71, 0x5b, 0x6a, 0x1e, 0x44, 0x3c, + 0x98, 0xcb, 0xc6, 0xcd, 0x54, 0xbc, 0x57, 0xb7, 0x54, 0xab, 0xd3, 0xa1, 0x1a, 0x0b, 0x3f, 0xcb, 0x58, 0x82, 0x40, + 0xf7, 0x21, 0xea, 0xf7, 0xff, 0x93, 0x6d, 0xd6, 0x80, 0x43, 0x42, 0x05, 0xab, 0x23, 0x86, 0x5e, 0x00, 0x6d, 0x95, + 0x88, 0x8b, 0x58, 0x09, 0x0c, 0x97, 0x48, 0xc0, 0xff, 0x84, 0xc7, 0xd5, 0x48, 0x14, 0xd7, 0x25, 0xef, 0xc8, 0x74, + 0x16, 0xfe, 0xf8, 0x03, 0x28, 0xf6, 0x8c, 0x96, 0x05, 0x46, 0xba, 0x6a, 0x18, 0xb8, 0x84, 0x88, 0xbd, 0x51, 0x81, + 0x24, 0x11, 0x4b, 0x72, 0x13, 0x28, 0xf0, 0x9e, 0xf4, 0xed, 0xc9, 0xcd, 0xba, 0x95, 0x1f, 0x4c, 0x03, 0xb3, 0x86, + 0x35, 0x01, 0xb5, 0x85, 0xfd, 0x33, 0xc9, 0x73, 0x85, 0x96, 0x77, 0x64, 0x82, 0xe4, 0xf7, 0x1a, 0xf2, 0x99, 0xba, + 0x82, 0xa1, 0x1d, 0x24, 0x70, 0x6b, 0x5d, 0xbb, 0x37, 0xf9, 0xf3, 0x29, 0xfe, 0xf2, 0x6e, 0xf2, 0xe7, 0x43, 0xfc, + 0xd5, 0xba, 0xc1, 0xcc, 0x75, 0x0d, 0x8c, 0xbc, 0x32, 0x67, 0xfd, 0xac, 0xb4, 0x9f, 0xc8, 0xfe, 0xec, 0x11, 0xdb, + 0x86, 0x2f, 0xf0, 0xd3, 0x67, 0xeb, 0x14, 0x3c, 0x2e, 0xd5, 0x39, 0x44, 0x4e, 0x62, 0xe6, 0x8d, 0xe5, 0xd3, 0x0d, + 0xe5, 0x43, 0xf3, 0xbf, 0x7c, 0xf1, 0xe3, 0x2e, 0x89, 0x8b, 0x3b, 0xa5, 0x2c, 0x86, 0xb8, 0x1d, 0x06, 0x91, 0x9f, + 0x3c, 0xdc, 0x12, 0x7b, 0x61, 0x08, 0xda, 0x5d, 0x8a, 0x57, 0x88, 0xbc, 0x2c, 0xab, 0xbb, 0x32, 0x45, 0xc0, 0xfb, + 0xc0, 0x2f, 0xfa, 0xfe, 0xdf, 0x13, 0x85, 0x6c, 0x2b, 0x31, 0xa0, 0x7c, 0x41, 0x4a, 0x1f, 0xba, 0x7d, 0xb6, 0x36, + 0x58, 0xbd, 0x9b, 0xca, 0x6c, 0x2b, 0x74, 0x21, 0x2c, 0x0f, 0x32, 0xb3, 0xf3, 0x71, 0xd0, 0x45, 0x7d, 0xd6, 0x30, + 0x5e, 0xd9, 0xcf, 0xd6, 0xd9, 0xb9, 0x3e, 0xf7, 0x93, 0x4f, 0x6c, 0x6c, 0x8f, 0x82, 0x64, 0x14, 0x32, 0xbd, 0xab, + 0x0f, 0x43, 0x3f, 0xfa, 0xc4, 0x1f, 0xed, 0x78, 0x99, 0xa1, 0x86, 0x7a, 0x27, 0xef, 0x2b, 0x60, 0x42, 0x22, 0x3b, + 0x24, 0x56, 0x1b, 0xa0, 0xa0, 0xbd, 0x96, 0x02, 0xaf, 0x82, 0x50, 0x2c, 0x6a, 0x59, 0x60, 0x60, 0x09, 0x4a, 0x73, + 0xf0, 0x58, 0xb5, 0x74, 0x5c, 0x2f, 0xdd, 0x52, 0xa7, 0x4a, 0xc2, 0x4a, 0x99, 0x72, 0xf1, 0x16, 0x7b, 0xf8, 0xfd, + 0x9f, 0xa3, 0x64, 0xd8, 0xfb, 0x7f, 0x4e, 0xf6, 0xf2, 0x65, 0x33, 0x84, 0x52, 0x9b, 0x3c, 0x25, 0x1e, 0xf1, 0x71, + 0x4e, 0x60, 0x6e, 0xfe, 0xb4, 0xda, 0xd8, 0x4f, 0xd3, 0xe5, 0x9c, 0x8d, 0x49, 0x33, 0x78, 0x5e, 0x0c, 0xaa, 0xcc, + 0x59, 0xa8, 0x03, 0xfb, 0x75, 0xd9, 0x3a, 0x3e, 0x7c, 0x0d, 0x16, 0x0b, 0x40, 0x50, 0xc6, 0x93, 0x89, 0x5e, 0xf0, + 0xf8, 0x3b, 0x9a, 0x79, 0x87, 0xbf, 0x2e, 0x7f, 0x78, 0xeb, 0xfe, 0x20, 0x1b, 0x47, 0x40, 0x18, 0x0b, 0xf5, 0x2b, + 0xa7, 0x8b, 0x95, 0xf1, 0x8a, 0x19, 0x4d, 0xfc, 0x68, 0xf3, 0x74, 0xae, 0x4b, 0x5b, 0x7c, 0xc1, 0xd8, 0x18, 0x08, + 0x6e, 0xab, 0x56, 0x7a, 0x1b, 0xb2, 0x3b, 0x26, 0x55, 0xbb, 0xf5, 0x8f, 0x35, 0xb4, 0xc0, 0xd8, 0x73, 0x5c, 0x65, + 0xcc, 0xa9, 0x3a, 0x65, 0x4a, 0x03, 0x9c, 0x03, 0x9f, 0xb9, 0x7a, 0xc4, 0x2a, 0x47, 0x6a, 0x60, 0xe9, 0xca, 0x00, + 0x36, 0x8e, 0xec, 0x7c, 0x43, 0x79, 0x17, 0x13, 0x4f, 0x37, 0x8f, 0xcd, 0xf2, 0xcc, 0x2e, 0xc4, 0xea, 0xe6, 0x70, + 0x0a, 0xe1, 0xe4, 0x19, 0x85, 0x38, 0x64, 0x13, 0xc4, 0x9a, 0x84, 0x64, 0x3a, 0x49, 0x5f, 0x84, 0xb5, 0x23, 0x9a, + 0xfd, 0x0a, 0x39, 0x54, 0xe3, 0xda, 0x68, 0xe5, 0x99, 0x0f, 0x31, 0xa1, 0x6b, 0xc4, 0xd2, 0x74, 0x23, 0xc0, 0xe4, + 0xa2, 0x5b, 0x7a, 0x51, 0xbb, 0x0c, 0x8f, 0xa2, 0xdc, 0x72, 0x2d, 0x20, 0x09, 0x70, 0x82, 0xd5, 0x6f, 0xe1, 0xf5, + 0x72, 0x3b, 0xe7, 0xf6, 0x2a, 0xc9, 0x74, 0xa8, 0x73, 0x5b, 0x82, 0x4d, 0xef, 0xef, 0x75, 0x3e, 0xa8, 0xd2, 0x35, + 0xdd, 0x38, 0x34, 0xa3, 0x84, 0x7a, 0x6b, 0xe2, 0x22, 0xec, 0x40, 0x8c, 0xa9, 0x82, 0x5f, 0xd9, 0x64, 0xc2, 0x46, + 0x59, 0x6a, 0x0a, 0xe1, 0x91, 0x8c, 0x1e, 0x0b, 0x5e, 0x43, 0x4f, 0xfa, 0xfa, 0x4f, 0xe0, 0x43, 0x2f, 0x82, 0x2c, + 0xf1, 0x01, 0x09, 0x9e, 0xa9, 0x19, 0x4c, 0xd4, 0x63, 0x19, 0x44, 0xfc, 0x2b, 0x90, 0x1c, 0xbc, 0xa1, 0x1c, 0x87, + 0xc6, 0xef, 0x9f, 0x62, 0x5f, 0xc4, 0xd2, 0xaa, 0x65, 0x3b, 0x2a, 0xda, 0x76, 0x7c, 0xd7, 0xde, 0x0f, 0x1d, 0xcf, + 0xcd, 0x75, 0x0b, 0x7c, 0xb7, 0x3e, 0xed, 0x7b, 0xe8, 0xb1, 0x55, 0x1b, 0x5a, 0x2d, 0xa3, 0xc7, 0xb4, 0x6b, 0x79, + 0xaf, 0x3c, 0xdd, 0x22, 0x93, 0x39, 0x05, 0xb7, 0x8d, 0xe2, 0x3b, 0x96, 0x7c, 0xf1, 0x54, 0xca, 0x9d, 0xef, 0x37, + 0x9e, 0x23, 0xcf, 0x05, 0x24, 0x9c, 0xc5, 0x8b, 0x47, 0x4c, 0xa1, 0xad, 0x5b, 0xfa, 0x28, 0x8c, 0x53, 0xa6, 0xce, + 0x81, 0x84, 0x20, 0x5f, 0x38, 0x89, 0x9f, 0xdf, 0xbf, 0xfd, 0xf0, 0x41, 0xb7, 0x30, 0x13, 0x68, 0xaa, 0xf6, 0xce, + 0x37, 0xd4, 0x0e, 0xec, 0xdf, 0xb8, 0xef, 0xe8, 0x86, 0x21, 0xa6, 0xb6, 0xbc, 0xe7, 0xa8, 0xac, 0xb6, 0xe5, 0xf8, + 0xcd, 0xc3, 0xbf, 0x4c, 0x9c, 0xe8, 0x5e, 0xf3, 0x6a, 0xc0, 0x0d, 0xdb, 0xaf, 0xb7, 0x52, 0xc9, 0x3c, 0x88, 0x6e, + 0x1b, 0x4a, 0xfd, 0x55, 0x43, 0x29, 0xb0, 0x72, 0x35, 0x5c, 0xb5, 0x8c, 0xe7, 0x0a, 0x69, 0x00, 0x89, 0x9c, 0x77, + 0x81, 0x4b, 0xe1, 0xa7, 0xbe, 0x60, 0xd0, 0x3c, 0x92, 0x7b, 0x75, 0xd4, 0x0d, 0xc5, 0x9c, 0x09, 0x92, 0xb0, 0x1d, + 0x85, 0x60, 0xf0, 0xc7, 0x54, 0xad, 0x5c, 0x99, 0x6c, 0x94, 0xe6, 0xba, 0x4a, 0x27, 0x44, 0xde, 0xde, 0x66, 0x6c, + 0xbe, 0x60, 0x89, 0x9f, 0x2d, 0x13, 0x76, 0x1b, 0xc6, 0xf7, 0x4f, 0x0a, 0x73, 0xfa, 0x1d, 0x95, 0x67, 0xc1, 0x74, + 0x26, 0x6b, 0x9f, 0x1b, 0xac, 0x2f, 0x17, 0x70, 0xeb, 0x07, 0xf2, 0xff, 0xfc, 0xdb, 0x71, 0xfe, 0xf3, 0xef, 0x9d, + 0x55, 0xa1, 0xfb, 0x7c, 0x60, 0x65, 0xfd, 0x3d, 0xf6, 0x45, 0xf3, 0x97, 0xca, 0x30, 0x6f, 0xae, 0x53, 0x5b, 0x04, + 0x78, 0x5f, 0x5b, 0x82, 0x5a, 0x61, 0x79, 0xdf, 0x3c, 0x6a, 0x60, 0x30, 0xaf, 0x9d, 0x23, 0x83, 0x4a, 0x5f, 0x34, + 0xb4, 0x81, 0xd9, 0xdd, 0x6b, 0x45, 0x7e, 0x3f, 0x84, 0x77, 0xcd, 0xe1, 0x0b, 0x87, 0xcf, 0xe5, 0x92, 0xaf, 0x07, + 0x03, 0x99, 0x5b, 0x4e, 0x6d, 0x0a, 0x26, 0xfe, 0xe7, 0xb5, 0x12, 0x7e, 0x79, 0x76, 0x5d, 0x93, 0x7c, 0xef, 0xfb, + 0xaf, 0x07, 0x68, 0x8c, 0x76, 0x3a, 0x4c, 0x0a, 0x62, 0x65, 0x23, 0x6a, 0x23, 0x63, 0xf2, 0x5a, 0xa7, 0x35, 0xbc, + 0x06, 0xa5, 0x98, 0x70, 0x2c, 0x1f, 0x98, 0xd6, 0xeb, 0x01, 0x17, 0x2c, 0x71, 0xfb, 0xd7, 0x6e, 0x75, 0x6b, 0x73, + 0xb1, 0x6c, 0x09, 0xe8, 0x96, 0x46, 0xfa, 0x1f, 0xac, 0xcc, 0x0a, 0x39, 0x1e, 0x0a, 0xf8, 0x41, 0xa2, 0x30, 0xc8, + 0x31, 0xdf, 0xc9, 0xbb, 0x4d, 0x36, 0x62, 0x3f, 0xef, 0xb6, 0x11, 0xbb, 0xda, 0xcb, 0x46, 0xec, 0xe7, 0xaf, 0x6e, + 0x23, 0xf6, 0x4e, 0xb5, 0x11, 0x83, 0x45, 0x7c, 0xcb, 0xf6, 0x32, 0xdc, 0x12, 0x56, 0x1b, 0xf1, 0x7d, 0xda, 0xf7, + 0x38, 0x49, 0x9b, 0x8e, 0x66, 0x0c, 0x64, 0x04, 0x7c, 0x55, 0xc2, 0x78, 0x0a, 0x46, 0x5c, 0x7f, 0xbc, 0xb9, 0x55, + 0x18, 0x4f, 0x55, 0x63, 0xab, 0x88, 0x47, 0x7c, 0x2d, 0xa2, 0x38, 0x91, 0x81, 0x93, 0x6b, 0x89, 0x98, 0x4f, 0xf6, + 0xa1, 0xa9, 0x64, 0xb5, 0x96, 0xd6, 0x6b, 0x2d, 0x61, 0x02, 0xd5, 0x45, 0xeb, 0x29, 0xd9, 0xb0, 0xf5, 0x52, 0xc4, + 0xb6, 0x50, 0x7b, 0x90, 0x56, 0xc2, 0x14, 0x27, 0x62, 0xad, 0xff, 0xba, 0xf2, 0xbe, 0xbf, 0xf6, 0x7a, 0x6d, 0x0f, + 0x9c, 0xb3, 0x81, 0xc3, 0xc4, 0x02, 0xb7, 0xd7, 0x6e, 0x43, 0xc1, 0xbd, 0x52, 0xd0, 0x82, 0x82, 0x40, 0x29, 0xe8, + 0x40, 0xc1, 0x48, 0x29, 0x38, 0x82, 0x82, 0xb1, 0x52, 0x70, 0x0c, 0x05, 0x77, 0x7a, 0x7e, 0x1d, 0xc9, 0xe1, 0x1e, + 0x9b, 0x37, 0x16, 0x31, 0x15, 0xa2, 0xec, 0xd8, 0xf2, 0xc0, 0x6a, 0xca, 0x9f, 0x76, 0x63, 0x8b, 0xa4, 0x8b, 0xdd, + 0xc4, 0xba, 0x9f, 0x31, 0x0a, 0x14, 0xfd, 0x06, 0xef, 0x1c, 0x27, 0x8b, 0xc1, 0x6e, 0x5a, 0x04, 0x60, 0x10, 0x70, + 0xd0, 0x74, 0x13, 0x04, 0x46, 0x3d, 0xb9, 0x72, 0x22, 0x88, 0x85, 0xb2, 0x96, 0xc5, 0x3b, 0xfa, 0x9c, 0x2d, 0xb7, + 0x40, 0x61, 0x71, 0x62, 0xa8, 0x52, 0xc9, 0xaf, 0x61, 0x77, 0xf0, 0x86, 0x0d, 0x97, 0x53, 0xed, 0x32, 0x9e, 0xee, + 0x34, 0x21, 0x50, 0x5f, 0xc1, 0x28, 0x75, 0x52, 0xbf, 0xd8, 0x62, 0x5b, 0xf2, 0x6f, 0xd1, 0x63, 0x5e, 0xae, 0x9f, + 0xc1, 0xd8, 0xb4, 0x8c, 0x0c, 0x58, 0xe0, 0x3b, 0x00, 0x23, 0x45, 0x87, 0x7f, 0x09, 0x70, 0x56, 0x9e, 0xaf, 0x7c, + 0x65, 0x3c, 0x67, 0x3f, 0xb2, 0x34, 0xf5, 0xa7, 0xa2, 0x7e, 0x7d, 0x9c, 0x60, 0xb4, 0x23, 0xf9, 0x2f, 0x04, 0x20, + 0x48, 0xf2, 0x82, 0x9a, 0x6d, 0x46, 0x12, 0xdf, 0x6b, 0x60, 0xfd, 0x03, 0x1b, 0xaa, 0xb0, 0x53, 0x08, 0x1c, 0x58, + 0xc2, 0xb2, 0x45, 0x01, 0x1c, 0xfe, 0x3b, 0x16, 0x56, 0x0b, 0x33, 0x7f, 0x5a, 0x2d, 0xa2, 0x7d, 0x90, 0xab, 0x63, + 0x93, 0x0a, 0xfd, 0x52, 0xe1, 0x97, 0x68, 0xa8, 0xc3, 0x78, 0xfa, 0x87, 0xaa, 0xa7, 0xb7, 0x98, 0x15, 0x7c, 0x88, + 0xac, 0x20, 0x1b, 0x38, 0x08, 0x63, 0xcd, 0x01, 0x10, 0x76, 0xa3, 0x6c, 0x66, 0xa3, 0x6b, 0x99, 0xd1, 0x8a, 0x4c, + 0xcb, 0xc1, 0xb5, 0x5d, 0x57, 0x1d, 0x6a, 0xbb, 0xc9, 0x74, 0xe8, 0x1b, 0x5e, 0xeb, 0xd8, 0x12, 0x7f, 0x8e, 0xdb, + 0x31, 0x73, 0xec, 0x41, 0x1b, 0x07, 0x77, 0xeb, 0x49, 0x1c, 0x65, 0xf6, 0xc4, 0x9f, 0x07, 0xe1, 0x43, 0x77, 0x1e, + 0x47, 0x71, 0xba, 0xf0, 0x47, 0xac, 0x57, 0x30, 0xd4, 0x3d, 0x0c, 0xd5, 0xc0, 0xbd, 0x05, 0x3d, 0xa7, 0x95, 0xb0, + 0x39, 0xb5, 0x96, 0x91, 0x18, 0x26, 0x21, 0x5b, 0xe5, 0xfc, 0xf3, 0xa5, 0xca, 0x54, 0x15, 0xb7, 0x1c, 0xb5, 0x00, + 0x8a, 0x94, 0x87, 0x79, 0x80, 0xe0, 0x46, 0xbd, 0x85, 0x3f, 0xc6, 0xc8, 0x84, 0x4e, 0xab, 0x93, 0xb0, 0xb9, 0xe6, + 0x74, 0x36, 0x76, 0x9e, 0xc4, 0xf7, 0x67, 0x30, 0x5a, 0x6c, 0x6c, 0xa7, 0x2c, 0x9c, 0xe0, 0x1b, 0x1b, 0x3d, 0x4b, + 0x44, 0x3f, 0x36, 0x32, 0xe2, 0xd0, 0x1b, 0x9b, 0xf7, 0xe0, 0x75, 0xb7, 0xa5, 0xb9, 0xbd, 0x79, 0x10, 0xd9, 0x34, + 0x9d, 0x63, 0x77, 0xa1, 0xf4, 0xa5, 0xc2, 0xcf, 0x5c, 0x63, 0x75, 0x4f, 0x73, 0x7b, 0xc0, 0xac, 0x4d, 0xc2, 0xf8, + 0xbe, 0x3b, 0x0b, 0xc6, 0x63, 0x16, 0xf5, 0x70, 0xcc, 0xb2, 0x90, 0x85, 0x61, 0xb0, 0x48, 0x83, 0xb4, 0x37, 0xf7, + 0x57, 0xbc, 0xd7, 0xc3, 0x4d, 0xbd, 0xb6, 0x79, 0xaf, 0xed, 0xbd, 0x7b, 0x55, 0xba, 0x01, 0x2f, 0x16, 0xea, 0x87, + 0x0f, 0xad, 0xa3, 0xb9, 0x95, 0x79, 0xee, 0xdd, 0xeb, 0x22, 0x61, 0xeb, 0xb9, 0x9f, 0x4c, 0x83, 0xa8, 0xeb, 0xe6, + 0xce, 0xdd, 0x9a, 0x36, 0xc6, 0xd3, 0x93, 0x93, 0x93, 0xdc, 0x19, 0x8b, 0x27, 0x77, 0x3c, 0xce, 0x9d, 0x91, 0x78, + 0x9a, 0x4c, 0x5c, 0x77, 0x32, 0xc9, 0x9d, 0x40, 0x14, 0xb4, 0x5b, 0xa3, 0x71, 0xbb, 0x95, 0x3b, 0xf7, 0x4a, 0x8d, + 0xdc, 0x61, 0xfc, 0x29, 0x61, 0xe3, 0x1e, 0x6e, 0x24, 0x32, 0x2b, 0xed, 0x1e, 0xbb, 0x6e, 0x8e, 0x18, 0xe0, 0xba, + 0x84, 0x9b, 0x50, 0xd6, 0x73, 0xb3, 0xde, 0xbb, 0xa6, 0x56, 0x7c, 0x6e, 0x34, 0x6a, 0xac, 0x37, 0xf6, 0x93, 0x4f, + 0x37, 0x9a, 0x32, 0x0b, 0xdf, 0xa7, 0x6a, 0x6b, 0x01, 0x06, 0x7b, 0xd5, 0x85, 0x90, 0x5d, 0xbd, 0x61, 0x9c, 0xc0, + 0x99, 0x4d, 0xfc, 0x71, 0xb0, 0x4c, 0xbb, 0x5e, 0x6b, 0xb1, 0x12, 0x45, 0x7c, 0xaf, 0x17, 0x05, 0x78, 0xf6, 0xba, + 0x69, 0x1c, 0x06, 0x63, 0x51, 0xb4, 0xe9, 0x2c, 0x79, 0x2d, 0xb3, 0x87, 0x0e, 0xeb, 0x01, 0x86, 0x5d, 0xf0, 0xc3, + 0x50, 0x73, 0xda, 0xa9, 0xc6, 0xfc, 0x14, 0xe5, 0xcb, 0x9a, 0x9b, 0x12, 0x5c, 0xd0, 0x39, 0xdd, 0x3b, 0x5c, 0xac, + 0xe4, 0x9e, 0xf7, 0x8e, 0x16, 0xab, 0xfc, 0xdb, 0x39, 0x1b, 0x07, 0xbe, 0x66, 0x14, 0xbb, 0xc9, 0x73, 0x41, 0x06, + 0x6d, 0xae, 0x37, 0x6c, 0x53, 0x71, 0x2c, 0x20, 0xb4, 0xe1, 0x93, 0x60, 0xbe, 0x88, 0x93, 0xcc, 0x8f, 0xb2, 0x3c, + 0x1f, 0xdc, 0xe4, 0x79, 0xef, 0x2a, 0x30, 0xae, 0xff, 0x61, 0xd0, 0x3d, 0x4d, 0x3a, 0x9b, 0xdc, 0xbc, 0xb1, 0xde, + 0x32, 0xd5, 0x66, 0x04, 0xae, 0x31, 0xb4, 0x17, 0x51, 0x2b, 0xd3, 0x2d, 0x59, 0xaf, 0x4c, 0x40, 0x96, 0xd5, 0xc9, + 0x06, 0xa5, 0x5c, 0x05, 0x6f, 0x20, 0xa8, 0xf0, 0x96, 0xf5, 0xaf, 0x14, 0xfb, 0x13, 0x20, 0x56, 0xb0, 0x32, 0xf9, + 0x15, 0x3c, 0xdb, 0x44, 0x33, 0x7e, 0xb7, 0x9b, 0x66, 0xfc, 0x25, 0xdb, 0x87, 0x66, 0xfc, 0xee, 0xab, 0xd3, 0x8c, + 0xcf, 0xea, 0x7e, 0x05, 0x17, 0x71, 0x5f, 0x97, 0x1a, 0x06, 0xb8, 0x9a, 0x12, 0x8a, 0xd8, 0x73, 0xf1, 0xbb, 0xdd, + 0x00, 0x44, 0x6f, 0x94, 0x83, 0x8e, 0x6e, 0x6e, 0x90, 0xc7, 0xbe, 0x8b, 0xfa, 0x7f, 0x4f, 0xd4, 0xe7, 0xc9, 0xa4, + 0xff, 0x26, 0x56, 0x0a, 0xe4, 0x13, 0x37, 0xbe, 0x28, 0x45, 0x57, 0xa0, 0x37, 0xc2, 0x0a, 0x13, 0xf3, 0x4f, 0x80, + 0x73, 0x36, 0x59, 0x1d, 0x8f, 0xa5, 0xf5, 0x59, 0xaf, 0x3c, 0x04, 0x43, 0x9a, 0x7c, 0x0a, 0x17, 0x9c, 0x9a, 0x28, + 0x71, 0xca, 0x32, 0xee, 0x33, 0xfb, 0xfd, 0xc3, 0xc5, 0xd8, 0xb8, 0x88, 0xcd, 0x3c, 0x48, 0xdf, 0x55, 0x1d, 0x60, + 0xb8, 0xee, 0xa7, 0xaf, 0x4e, 0x27, 0xe7, 0x16, 0x64, 0x6a, 0x82, 0x69, 0x78, 0x4d, 0xcd, 0xcf, 0x4b, 0x33, 0xed, + 0xaa, 0x0d, 0x79, 0xa2, 0xab, 0xda, 0x65, 0xcc, 0xbd, 0x0f, 0xd6, 0x9c, 0x02, 0xc4, 0xdc, 0x5d, 0xe8, 0x37, 0x3c, + 0xa6, 0xe6, 0xc1, 0x38, 0xcf, 0xcd, 0x9e, 0x00, 0x84, 0x72, 0xd1, 0xb2, 0x5d, 0x44, 0x5c, 0x7a, 0x2f, 0x6d, 0x1a, + 0xb8, 0x86, 0x90, 0xd4, 0x7f, 0x17, 0xa0, 0x50, 0xe7, 0xca, 0x42, 0x0e, 0x33, 0x5d, 0x23, 0xf0, 0x91, 0xa1, 0x85, + 0x32, 0x21, 0xd0, 0x00, 0x4b, 0xf8, 0x8b, 0x57, 0xa2, 0xa0, 0x6e, 0xc3, 0x49, 0xc0, 0x41, 0x8b, 0x00, 0xf0, 0xf2, + 0x17, 0x72, 0x6d, 0x42, 0x3b, 0xbc, 0x0e, 0x3e, 0xe4, 0xba, 0xa4, 0xfd, 0x70, 0xfb, 0x9d, 0x9d, 0x1e, 0x40, 0x83, + 0xb3, 0x8a, 0xe1, 0xc0, 0x0e, 0x0b, 0x45, 0x20, 0x25, 0xd2, 0x7b, 0xcb, 0x49, 0xef, 0xb5, 0x17, 0x6b, 0x11, 0x21, + 0x23, 0xf3, 0x17, 0x36, 0xb0, 0xf8, 0x88, 0x7b, 0x39, 0xc6, 0x53, 0x82, 0x71, 0xf4, 0x96, 0x29, 0xe0, 0x46, 0x64, + 0x54, 0x11, 0xff, 0xf4, 0x46, 0xcb, 0x24, 0x8d, 0x93, 0xee, 0x22, 0x0e, 0xa2, 0x8c, 0x25, 0x39, 0x82, 0xea, 0x1a, + 0xe1, 0x23, 0xc0, 0x73, 0xb3, 0x8e, 0x17, 0xfe, 0x28, 0xc8, 0x1e, 0xba, 0x2e, 0x27, 0x29, 0xdc, 0x1e, 0xa7, 0x0e, + 0xdc, 0xc6, 0xfa, 0x5d, 0x0e, 0xcd, 0x97, 0x48, 0xf8, 0x25, 0x75, 0x72, 0x46, 0xdd, 0xe6, 0x3d, 0xe5, 0x2d, 0xc5, + 0x08, 0x01, 0xf2, 0xc3, 0x4f, 0xec, 0x29, 0x60, 0x79, 0x58, 0x6a, 0x77, 0xcc, 0xa6, 0x16, 0x62, 0x6d, 0x90, 0xcb, + 0x8b, 0x3f, 0xa7, 0x63, 0x6a, 0x6e, 0x73, 0x31, 0x50, 0x3c, 0xe6, 0x3e, 0x23, 0xeb, 0xfa, 0x90, 0x51, 0xcb, 0xda, + 0xa7, 0xe6, 0x90, 0x4d, 0xe2, 0x84, 0x51, 0x3c, 0x59, 0xef, 0x64, 0xb1, 0xda, 0xbf, 0xfb, 0xed, 0xd3, 0x6f, 0xee, + 0x27, 0x8a, 0x33, 0x43, 0x74, 0x66, 0xee, 0xe8, 0xad, 0x7e, 0x9f, 0x01, 0x69, 0x48, 0x90, 0x1f, 0x51, 0xe8, 0xae, + 0xae, 0xae, 0xf7, 0x1a, 0xc3, 0x76, 0x2d, 0x62, 0x7e, 0xe7, 0x25, 0x2c, 0xf4, 0xb3, 0xe0, 0x4e, 0xd0, 0x8c, 0xed, + 0xa3, 0xc5, 0x4a, 0xac, 0x31, 0x5e, 0x78, 0x8f, 0x58, 0xa4, 0xca, 0x50, 0xc4, 0x22, 0x55, 0x8b, 0x71, 0x91, 0x7a, + 0xb5, 0xd9, 0x88, 0x48, 0x16, 0x95, 0x9b, 0xbe, 0xb3, 0x58, 0xa9, 0x57, 0x74, 0xd1, 0x4c, 0xde, 0xd4, 0xd5, 0x10, + 0x64, 0xf3, 0x60, 0x3c, 0x0e, 0x59, 0x5e, 0x5a, 0xe8, 0xf2, 0x5a, 0x2a, 0xc0, 0x91, 0x70, 0xf0, 0x87, 0x69, 0x1c, + 0x2e, 0x33, 0xd6, 0x0c, 0x2e, 0x02, 0x4e, 0xcb, 0x2d, 0x80, 0x83, 0xbf, 0xcb, 0x63, 0xed, 0x00, 0xb9, 0x0d, 0xdb, + 0xc4, 0xed, 0x41, 0xc4, 0x61, 0xbb, 0x5d, 0x1e, 0x3a, 0xbc, 0x92, 0x83, 0xb6, 0x1a, 0x26, 0x62, 0xc1, 0xb5, 0x44, + 0xd8, 0x5b, 0x73, 0x3c, 0x5e, 0x26, 0xa3, 0xae, 0xca, 0xa2, 0xbc, 0x3c, 0x99, 0x3f, 0xe6, 0x8c, 0xbd, 0x6a, 0x3e, + 0x63, 0xaf, 0xc4, 0x19, 0xdb, 0xbe, 0x33, 0x9f, 0x4e, 0x3c, 0xf8, 0xaf, 0x57, 0x4c, 0xa8, 0xeb, 0x6a, 0xed, 0xc5, + 0x4a, 0xf3, 0x16, 0x2b, 0xcd, 0x6e, 0x2d, 0x56, 0x1a, 0x76, 0x8d, 0xf6, 0x20, 0x96, 0xd3, 0x32, 0x2d, 0x57, 0x83, + 0x42, 0xf8, 0x73, 0x4b, 0xaf, 0xbc, 0x43, 0x78, 0x07, 0xad, 0x3a, 0xf5, 0x77, 0xad, 0xed, 0x47, 0x9d, 0xce, 0x92, + 0x40, 0xda, 0xa6, 0x93, 0xf9, 0xc3, 0x21, 0x1b, 0x77, 0x27, 0xf1, 0x68, 0x99, 0xfe, 0x8b, 0x8f, 0x9f, 0x03, 0x71, + 0x2b, 0x22, 0xa8, 0xf4, 0x23, 0x9a, 0x82, 0xa2, 0xe4, 0x8e, 0x89, 0x1e, 0xd6, 0x72, 0x9d, 0xba, 0x14, 0x1e, 0xb9, + 0xe5, 0x1c, 0x36, 0x6c, 0xf2, 0x66, 0x40, 0xff, 0x61, 0xab, 0xb4, 0x19, 0xc5, 0x7c, 0x01, 0x58, 0xb6, 0x82, 0xe3, + 0xf1, 0xd0, 0xe0, 0xab, 0xe9, 0x9e, 0x34, 0x0f, 0xf7, 0x5a, 0x7c, 0xe9, 0x46, 0x5c, 0x2a, 0xfc, 0xde, 0xe2, 0x8e, + 0x29, 0xdb, 0x7b, 0xdd, 0xb4, 0x47, 0x6a, 0xbd, 0x6e, 0xb9, 0x10, 0x8a, 0xba, 0x7b, 0x62, 0xf9, 0xa7, 0xaf, 0x0e, + 0xe1, 0x3f, 0xa2, 0xea, 0x7f, 0xc9, 0x9a, 0x08, 0xf5, 0x8b, 0xb2, 0x25, 0x38, 0x91, 0x4a, 0x48, 0x88, 0xef, 0x5f, + 0x7f, 0x32, 0x79, 0x5c, 0x83, 0xbd, 0x6b, 0x93, 0x29, 0x55, 0xb5, 0xf6, 0xf7, 0x71, 0x0c, 0xa9, 0x3b, 0xeb, 0xd5, + 0x05, 0x78, 0xc8, 0xd8, 0x3d, 0xeb, 0x43, 0x23, 0xc1, 0x47, 0x90, 0x16, 0x5f, 0xc7, 0x36, 0xc4, 0x4a, 0xbc, 0xdd, + 0xc4, 0x4a, 0xbc, 0xd9, 0xcd, 0x4a, 0xfc, 0x75, 0x2f, 0x56, 0xe2, 0xcd, 0x57, 0x67, 0x25, 0xde, 0xd6, 0x59, 0x89, + 0xab, 0x58, 0xd8, 0xcf, 0x5a, 0x17, 0x4b, 0xfe, 0xf3, 0x23, 0x29, 0xe5, 0x2e, 0xe3, 0x7e, 0xc7, 0xa5, 0x90, 0xc7, + 0x57, 0xbf, 0x9b, 0xb1, 0xc0, 0x8d, 0xf8, 0x1e, 0xcd, 0xc9, 0x0a, 0xd6, 0x82, 0x63, 0x76, 0xfc, 0x8e, 0x52, 0x1c, + 0xc6, 0xd1, 0xf4, 0x67, 0x50, 0xca, 0x82, 0x38, 0x30, 0x51, 0x5e, 0x04, 0xe9, 0xcf, 0xf1, 0x62, 0xb9, 0xb8, 0x80, + 0xbe, 0x3e, 0x06, 0x69, 0x30, 0x0c, 0x99, 0xf4, 0x44, 0x26, 0xf3, 0x37, 0x2e, 0x13, 0x07, 0x8b, 0x53, 0xf1, 0xd3, + 0x5f, 0x89, 0x9f, 0x68, 0x93, 0xca, 0x7f, 0x93, 0x5d, 0x9d, 0xde, 0xcc, 0x88, 0x08, 0x25, 0xa0, 0x32, 0xe8, 0xc7, + 0x33, 0x23, 0x57, 0xb1, 0xd9, 0x30, 0x4b, 0x61, 0xef, 0xb0, 0xb1, 0x1f, 0x56, 0x63, 0x6a, 0x96, 0xa6, 0x25, 0x43, + 0x70, 0xd5, 0xc5, 0xf0, 0xf3, 0x78, 0x99, 0xb2, 0x71, 0x7c, 0x1f, 0xe9, 0x56, 0x24, 0x9d, 0x0c, 0x40, 0xc3, 0x29, + 0xdb, 0x60, 0xf2, 0xc8, 0x0f, 0x48, 0x28, 0xc7, 0x89, 0xa1, 0x43, 0xee, 0xd2, 0xe5, 0xc2, 0x26, 0x55, 0xb3, 0x8d, + 0x53, 0xd4, 0x65, 0x96, 0xa3, 0x27, 0x86, 0x11, 0xf7, 0x1f, 0xd7, 0x52, 0x98, 0x6a, 0xc4, 0x0e, 0x97, 0x0a, 0xa7, + 0x46, 0x24, 0x84, 0x8b, 0x22, 0x0e, 0x46, 0xc3, 0xc2, 0xf1, 0x37, 0xe4, 0xba, 0x5a, 0xbc, 0x85, 0x28, 0x22, 0xf9, + 0x92, 0xaf, 0x07, 0x8f, 0x0a, 0x41, 0x8f, 0xaf, 0x15, 0x30, 0xbe, 0xbb, 0x63, 0x49, 0xe8, 0x3f, 0x18, 0x66, 0x1e, + 0x47, 0x3f, 0x02, 0x00, 0xde, 0xc4, 0xf7, 0x91, 0x5a, 0x01, 0x93, 0xb5, 0x34, 0xec, 0xa5, 0xc6, 0xf8, 0x25, 0xe0, + 0xb8, 0xa2, 0x8c, 0x00, 0xd2, 0xe4, 0x4e, 0xd9, 0xdf, 0x2d, 0xfa, 0xf7, 0x1f, 0x66, 0x6e, 0x5d, 0xc6, 0xf2, 0x43, + 0x7f, 0x5b, 0xec, 0xf1, 0x99, 0xe7, 0xcf, 0x9f, 0x6c, 0x9e, 0x76, 0x39, 0x3d, 0x7b, 0x43, 0x6b, 0x73, 0xe3, 0x29, + 0x80, 0x51, 0x5c, 0xc5, 0xcb, 0xd1, 0x0c, 0x0d, 0x5d, 0xbf, 0xde, 0x7c, 0x33, 0xe8, 0x13, 0xb3, 0x94, 0xca, 0xa9, + 0x57, 0x8a, 0x0a, 0x28, 0xe0, 0xf7, 0xdf, 0x42, 0x00, 0xce, 0xff, 0x21, 0x18, 0xea, 0xbb, 0x86, 0x73, 0xf1, 0xc1, + 0xe3, 0x36, 0x6f, 0x0f, 0x92, 0x69, 0xf2, 0xd0, 0x16, 0x42, 0xb9, 0xd6, 0x8c, 0x64, 0xf2, 0x2a, 0xd0, 0xd4, 0x30, + 0x72, 0x9b, 0x22, 0xe4, 0x89, 0xaf, 0x30, 0x87, 0xd8, 0x74, 0xee, 0x68, 0x60, 0x31, 0x8e, 0xad, 0x2a, 0x48, 0x86, + 0x9b, 0x3c, 0x30, 0x44, 0x5f, 0xd5, 0x77, 0xf3, 0x20, 0xb2, 0x30, 0x0a, 0x7c, 0xfd, 0x8d, 0xbf, 0x82, 0x38, 0xc8, + 0x80, 0xdc, 0xaa, 0xaf, 0xa0, 0xd0, 0x52, 0xfd, 0xe6, 0x20, 0xd5, 0x93, 0xde, 0x08, 0x09, 0xa1, 0xc5, 0x1b, 0xfc, + 0x49, 0xd3, 0x34, 0x4d, 0xb2, 0x11, 0x9a, 0xe4, 0x23, 0xb0, 0x1c, 0xd9, 0x01, 0xd0, 0x96, 0xe4, 0x8b, 0x15, 0x95, + 0x00, 0x67, 0x80, 0x3a, 0x59, 0x51, 0xc0, 0x43, 0xfd, 0x75, 0x5c, 0x51, 0x20, 0x18, 0x7a, 0x08, 0xd3, 0xe6, 0x27, + 0x10, 0x11, 0xb8, 0xab, 0x21, 0xc3, 0x8e, 0x6f, 0xb9, 0x24, 0x58, 0x73, 0xe9, 0x71, 0xd0, 0x63, 0xcd, 0x31, 0xe1, + 0x22, 0x05, 0x0b, 0x82, 0xd6, 0xa1, 0x12, 0xe2, 0xd9, 0x62, 0x0d, 0xb8, 0x11, 0xf9, 0xa2, 0x55, 0x36, 0x67, 0xd1, + 0x52, 0xc7, 0x9c, 0x50, 0x18, 0xa3, 0x0f, 0xea, 0xbc, 0x21, 0x62, 0x0b, 0xb0, 0x4d, 0x73, 0xcb, 0x19, 0xdd, 0x85, + 0x29, 0x47, 0xa9, 0xbe, 0x35, 0xe2, 0x8a, 0xcd, 0x94, 0xe3, 0xb6, 0xea, 0x0d, 0xc1, 0x97, 0x34, 0xae, 0x3a, 0x72, + 0x91, 0x25, 0x34, 0xf4, 0x41, 0xd1, 0x31, 0xb8, 0xb8, 0x48, 0x80, 0xdd, 0xf0, 0xab, 0x8b, 0x26, 0x35, 0x32, 0x7e, + 0x45, 0x50, 0x94, 0x98, 0xf5, 0x6e, 0xf8, 0x38, 0x21, 0x30, 0xd1, 0xc6, 0x7e, 0x46, 0xb5, 0x7e, 0x36, 0x4c, 0xfa, + 0x13, 0x7b, 0xa0, 0x8b, 0x84, 0x40, 0xf5, 0x89, 0x3d, 0x80, 0xed, 0xdf, 0x5b, 0x90, 0xa6, 0xe8, 0x5b, 0xd0, 0xb5, + 0x05, 0xa1, 0xfe, 0x47, 0x10, 0xac, 0x6a, 0xcb, 0x01, 0x72, 0xf3, 0x2d, 0x58, 0x1c, 0x41, 0x0c, 0x59, 0x9d, 0xc5, + 0x21, 0xe6, 0x26, 0xfe, 0x46, 0x23, 0x8c, 0xed, 0x86, 0xa3, 0x61, 0xbe, 0xf0, 0x5c, 0xf7, 0xa0, 0x56, 0x1f, 0x04, + 0xd9, 0x4d, 0xb5, 0x4d, 0x2b, 0xeb, 0x7b, 0xae, 0x1d, 0xbc, 0x70, 0x5a, 0xbd, 0xda, 0x1d, 0xad, 0xc4, 0x92, 0x1c, + 0xa0, 0xf8, 0xeb, 0xec, 0xd9, 0xda, 0xa8, 0x1d, 0x48, 0xb3, 0x6a, 0x32, 0x8f, 0x63, 0xcb, 0xb9, 0xfc, 0x6b, 0x50, + 0xbf, 0xfa, 0x29, 0x92, 0x25, 0xe5, 0x35, 0x19, 0x40, 0x34, 0x64, 0x03, 0x8e, 0xd1, 0x9f, 0xb5, 0x97, 0x9a, 0x41, + 0xc7, 0xc7, 0x34, 0x07, 0x32, 0x5d, 0xb6, 0xf0, 0x29, 0x53, 0x3b, 0xa8, 0x7c, 0x31, 0xad, 0x62, 0x38, 0x1e, 0x77, + 0x95, 0x15, 0x1a, 0xbd, 0xad, 0xd4, 0x02, 0xf6, 0xbf, 0xe1, 0xfa, 0x74, 0x86, 0x10, 0x97, 0x00, 0x6a, 0x40, 0xec, + 0xf4, 0x9d, 0x1d, 0x2e, 0x17, 0xe5, 0xee, 0xca, 0x97, 0xe4, 0xfe, 0x9d, 0xe1, 0xa5, 0x83, 0x3a, 0x34, 0xd9, 0x5f, + 0xf3, 0x75, 0xf7, 0xc8, 0x2e, 0x59, 0x34, 0x2e, 0x77, 0x58, 0xb9, 0xbf, 0xf6, 0xef, 0xae, 0x84, 0x51, 0x20, 0xa9, + 0x40, 0xdc, 0x80, 0x51, 0xf2, 0x38, 0xc2, 0xcd, 0x4f, 0xc7, 0x2d, 0xd8, 0x8b, 0x8a, 0xc1, 0x06, 0x14, 0x11, 0x4c, + 0x36, 0x53, 0x84, 0xe2, 0x10, 0xb9, 0x1a, 0xdd, 0x82, 0x0d, 0x41, 0x88, 0x6e, 0xdc, 0x89, 0x99, 0xb0, 0x29, 0x2c, + 0xda, 0x04, 0x3c, 0x16, 0xe5, 0xbe, 0x52, 0xeb, 0x60, 0xb7, 0xd4, 0x3a, 0xdb, 0x25, 0xb5, 0x26, 0x77, 0xaa, 0xfb, + 0xc4, 0x5f, 0x28, 0x1e, 0x79, 0x82, 0x38, 0x57, 0x1d, 0xf3, 0x4a, 0xa2, 0x6e, 0xf4, 0xbe, 0x12, 0xad, 0x6a, 0xbd, + 0x91, 0x95, 0x20, 0x8a, 0xbf, 0x15, 0x06, 0x45, 0x28, 0xd4, 0x55, 0xd9, 0xf8, 0x55, 0x21, 0x1b, 0x27, 0xae, 0xa6, + 0x70, 0xa4, 0x11, 0xd4, 0xbf, 0xe2, 0xa4, 0x26, 0xb9, 0x83, 0xc2, 0x59, 0xad, 0x18, 0xa9, 0xe2, 0x7e, 0x55, 0x30, + 0x1a, 0x8a, 0x53, 0x9f, 0xe0, 0x32, 0xca, 0xbe, 0x7d, 0xe5, 0xaa, 0x85, 0xf7, 0x55, 0x51, 0x0e, 0x52, 0x77, 0x1c, + 0xb2, 0x2c, 0x56, 0xb7, 0x4d, 0xd9, 0xfd, 0x46, 0x7d, 0xad, 0x6c, 0x12, 0xe9, 0x27, 0x43, 0x00, 0x16, 0x62, 0xfa, + 0x8a, 0x5e, 0x5b, 0xda, 0x40, 0xe0, 0x20, 0x1b, 0xdc, 0xfa, 0x76, 0x4b, 0xe7, 0x29, 0x5f, 0x42, 0xa1, 0x85, 0x57, + 0x65, 0x10, 0x08, 0xdf, 0x9b, 0x75, 0xc3, 0x2d, 0x8f, 0x97, 0x3c, 0xbf, 0xdf, 0x41, 0xbc, 0xa8, 0xb9, 0xaa, 0x22, + 0x1f, 0x4f, 0xa6, 0x4d, 0xe6, 0xb9, 0x58, 0xb5, 0xde, 0x29, 0x09, 0x71, 0xd6, 0xdc, 0x33, 0xa6, 0x2c, 0xa3, 0xe7, + 0x35, 0xba, 0xe2, 0xbb, 0x7c, 0xeb, 0x24, 0xcb, 0x08, 0x63, 0xdb, 0xdb, 0x59, 0xe2, 0x8f, 0x3e, 0x29, 0x43, 0x16, + 0x72, 0x4e, 0x90, 0x01, 0x97, 0x35, 0x05, 0x3d, 0x1f, 0x43, 0x41, 0xb2, 0xae, 0xd3, 0x4a, 0x15, 0xe9, 0x4b, 0xf7, + 0xa9, 0xdb, 0xf6, 0x5f, 0x4d, 0x0e, 0x2b, 0x42, 0xd1, 0x56, 0xa7, 0x2c, 0x32, 0xdf, 0x30, 0x8e, 0x6c, 0xb6, 0x9c, + 0x0f, 0xd7, 0xaa, 0x6c, 0x55, 0x11, 0xb9, 0xd6, 0xc5, 0xac, 0xea, 0x67, 0x27, 0x93, 0x49, 0x59, 0xd0, 0xe8, 0x6a, + 0x87, 0x28, 0x2c, 0x7c, 0xea, 0xba, 0x6e, 0x75, 0xec, 0xdb, 0xc1, 0x6e, 0xa3, 0xdc, 0xf6, 0xa4, 0x71, 0xc4, 0x08, + 0xdb, 0x5d, 0xf0, 0xab, 0x83, 0x23, 0x77, 0x8a, 0x93, 0x5d, 0x32, 0x8b, 0xe8, 0x91, 0x31, 0x44, 0x90, 0xb1, 0x79, + 0xda, 0x1d, 0x31, 0xd4, 0xc1, 0x38, 0xca, 0x81, 0x46, 0xc3, 0x01, 0x7b, 0x0a, 0xa6, 0x22, 0x9e, 0xd8, 0x15, 0xae, + 0x86, 0xf2, 0xf0, 0x9a, 0xf0, 0x5e, 0x7c, 0x04, 0x0f, 0xca, 0xba, 0x2e, 0xd3, 0xc6, 0x69, 0x75, 0xdc, 0x3f, 0x97, + 0xea, 0x69, 0x70, 0x01, 0xae, 0x85, 0x42, 0x9b, 0xe4, 0xb3, 0xf8, 0xff, 0x52, 0xfe, 0xff, 0x6a, 0xb1, 0x2a, 0xdb, + 0x8f, 0x9c, 0x80, 0x44, 0xbb, 0x38, 0x2d, 0x34, 0xea, 0xa6, 0x3d, 0x20, 0xad, 0x0c, 0x26, 0xaa, 0x02, 0x1d, 0x94, + 0xf4, 0xa5, 0x04, 0x20, 0x0d, 0xe2, 0x77, 0xa4, 0x98, 0x61, 0x89, 0x0b, 0x11, 0x62, 0x91, 0xbe, 0x0e, 0xe6, 0x60, + 0xbd, 0x3c, 0x41, 0xfd, 0x41, 0x69, 0x4f, 0x80, 0x36, 0xbe, 0x36, 0xb7, 0xbd, 0xc4, 0xfd, 0x55, 0xbd, 0x96, 0xe8, + 0x18, 0x40, 0xe6, 0xc1, 0x21, 0x44, 0x43, 0x02, 0xad, 0xb2, 0xb9, 0x69, 0x94, 0xf2, 0xad, 0xaa, 0x67, 0x13, 0x03, + 0xc3, 0xee, 0x9a, 0xab, 0x50, 0xdf, 0x42, 0x5b, 0x00, 0x93, 0xe5, 0xdb, 0x0f, 0x9f, 0x6d, 0x58, 0x62, 0x75, 0x3f, + 0x7a, 0xb8, 0xe4, 0xb8, 0x7f, 0x6d, 0xbc, 0x3b, 0x53, 0x3a, 0xff, 0x28, 0x5f, 0xfc, 0x6b, 0xa3, 0x40, 0xef, 0xaa, + 0x24, 0xa1, 0xe3, 0xd6, 0xe2, 0x2d, 0x73, 0xaf, 0xda, 0xf3, 0x20, 0xda, 0xbf, 0xae, 0xbf, 0xda, 0xbb, 0x2e, 0x5c, + 0x18, 0x7b, 0x57, 0x86, 0x1b, 0x87, 0x2c, 0x17, 0xb2, 0xfe, 0x5f, 0x15, 0x81, 0xa2, 0xea, 0x75, 0xac, 0x63, 0x2b, + 0xa2, 0xf2, 0xaf, 0x96, 0x40, 0x7c, 0xee, 0x95, 0xe0, 0x41, 0x13, 0x39, 0xda, 0xf4, 0x63, 0xed, 0x44, 0x3b, 0x6e, + 0x6b, 0x47, 0xae, 0x4e, 0x5c, 0x58, 0x5f, 0xef, 0xb4, 0x0a, 0x6f, 0xc2, 0x43, 0x57, 0x3f, 0x3b, 0x9d, 0x8a, 0x4b, + 0x62, 0x12, 0x84, 0x21, 0xa1, 0x8a, 0x34, 0x4b, 0xe2, 0x4f, 0xac, 0xac, 0x66, 0xa1, 0x32, 0x6e, 0x04, 0xd2, 0x12, + 0x8f, 0x70, 0x76, 0x46, 0xfe, 0xa2, 0x8b, 0x67, 0x43, 0x2d, 0x04, 0x03, 0x4e, 0x2a, 0xc5, 0x4f, 0xc0, 0x1d, 0x3c, + 0xd4, 0xcf, 0x4e, 0x21, 0x84, 0xa1, 0x36, 0xee, 0xeb, 0x3f, 0xb6, 0x8e, 0x35, 0xaf, 0x73, 0x67, 0xb7, 0x47, 0xae, + 0xed, 0x39, 0x87, 0x9a, 0xeb, 0x1c, 0xd9, 0x2d, 0xe7, 0x58, 0x6b, 0x39, 0x1d, 0xf8, 0x77, 0xe4, 0x39, 0xaf, 0x34, + 0x17, 0x9e, 0x34, 0xcf, 0x69, 0xe3, 0xbf, 0x2d, 0xe7, 0xf8, 0xae, 0x4d, 0x37, 0xbd, 0x2f, 0xdd, 0xaa, 0x2a, 0xa3, + 0x00, 0x27, 0x10, 0xfd, 0xe0, 0xec, 0x74, 0x99, 0x32, 0x6d, 0xd5, 0xd7, 0x5f, 0xe9, 0xda, 0x2c, 0x61, 0x93, 0xbe, + 0xfe, 0xd4, 0x57, 0x4a, 0xbd, 0x93, 0xc6, 0xe2, 0xd6, 0x71, 0x63, 0x71, 0xfb, 0xa8, 0xb1, 0xf8, 0xb0, 0x53, 0x2e, + 0x3e, 0x98, 0xd2, 0x2b, 0x25, 0x83, 0xe0, 0xdc, 0xcf, 0x92, 0x60, 0x65, 0x78, 0x1a, 0xa0, 0x6b, 0x1b, 0xfe, 0x39, + 0x6e, 0x99, 0xb2, 0xd5, 0x10, 0x5a, 0x49, 0x68, 0x1c, 0x9f, 0x68, 0xde, 0xd1, 0x5f, 0x5a, 0x47, 0x23, 0xa8, 0x07, + 0xf9, 0x2e, 0xe1, 0xef, 0xae, 0x7d, 0x32, 0x72, 0x35, 0x68, 0xe8, 0xc1, 0x7f, 0xb3, 0x4e, 0x6b, 0x44, 0x0f, 0x2e, + 0xbc, 0xff, 0xe8, 0x1d, 0xa7, 0xae, 0xed, 0xc1, 0x7f, 0xbf, 0x49, 0x95, 0x3b, 0x28, 0xfc, 0xd5, 0x7e, 0x0f, 0x5d, + 0xad, 0x7d, 0x32, 0x6b, 0x39, 0xaf, 0xee, 0x8e, 0x9d, 0x93, 0x99, 0x77, 0xfc, 0x91, 0x9e, 0x42, 0xbb, 0xe5, 0xbc, + 0x82, 0xbf, 0x8f, 0x6d, 0x77, 0x66, 0x7b, 0xce, 0xc9, 0x5d, 0xdb, 0x69, 0x87, 0xf6, 0x91, 0x73, 0x02, 0x7f, 0xbf, + 0x01, 0x78, 0x01, 0xae, 0x3c, 0x41, 0xa9, 0x06, 0x1b, 0xa3, 0x62, 0xbf, 0xa1, 0x7e, 0xa4, 0x75, 0xa8, 0x75, 0x0e, + 0xff, 0x72, 0x72, 0x67, 0x1f, 0xce, 0xbc, 0xd6, 0x9d, 0xbd, 0xf1, 0xe7, 0x47, 0x80, 0xfc, 0xf6, 0x85, 0x03, 0x30, + 0x62, 0x46, 0x92, 0x3f, 0x0d, 0xac, 0xcb, 0x4d, 0x62, 0xf4, 0xf7, 0xbb, 0xc5, 0xe8, 0x3f, 0x2c, 0xf7, 0x11, 0xa3, + 0xbf, 0xff, 0xea, 0x62, 0xf4, 0xcb, 0xaa, 0x15, 0xf7, 0xfb, 0x6a, 0xe4, 0xf4, 0x5f, 0xd6, 0x55, 0x22, 0x39, 0xf0, + 0x8d, 0xeb, 0xab, 0xe5, 0x0d, 0xc4, 0xfe, 0x79, 0x1f, 0xf7, 0x7f, 0x58, 0x96, 0x4c, 0x94, 0x62, 0xc0, 0x00, 0xef, + 0x63, 0xc2, 0x00, 0xbf, 0x2d, 0xfb, 0x60, 0x17, 0xc1, 0x6f, 0xcd, 0x60, 0x6c, 0xcf, 0xfc, 0x70, 0x22, 0x6f, 0x5c, + 0x28, 0xe9, 0x61, 0x31, 0xd8, 0xcc, 0xc3, 0x65, 0x02, 0xca, 0x9a, 0xe5, 0x3c, 0x4a, 0xbb, 0x47, 0x2e, 0xa0, 0xf9, + 0xd6, 0x24, 0xc9, 0x2b, 0x8d, 0x1d, 0x11, 0x2d, 0xe9, 0x96, 0xdb, 0xf4, 0x6f, 0x7c, 0x8f, 0x26, 0x6b, 0xcd, 0xbd, + 0x7b, 0xf5, 0x7e, 0x35, 0xb0, 0x05, 0x11, 0x26, 0x7d, 0x40, 0x6c, 0x34, 0xbd, 0x2f, 0x1b, 0x8e, 0x55, 0x4c, 0x05, + 0x37, 0x8f, 0x14, 0x46, 0x52, 0x6d, 0xef, 0x95, 0x0d, 0xcf, 0x76, 0x4d, 0xb3, 0xe1, 0xf3, 0xa5, 0xe6, 0x5b, 0xac, + 0xde, 0x64, 0xc7, 0x55, 0x50, 0x55, 0xf2, 0x7e, 0x35, 0x02, 0xa4, 0xa0, 0x3d, 0x0b, 0xd3, 0xb8, 0x82, 0xf0, 0x71, + 0x35, 0xbc, 0x8d, 0x5d, 0xe5, 0x5d, 0xa9, 0x4f, 0xd5, 0x9c, 0xee, 0xc5, 0x1a, 0xe9, 0xc1, 0xe0, 0x37, 0x20, 0x6c, + 0xf8, 0x7d, 0x3c, 0x8c, 0x55, 0x38, 0xaf, 0x95, 0x7e, 0x89, 0xd4, 0xce, 0x67, 0xde, 0xba, 0x4e, 0xda, 0x6c, 0x34, + 0xa4, 0xf5, 0xd8, 0x5c, 0xdc, 0xd1, 0xf8, 0x79, 0x32, 0x5b, 0xcd, 0xc9, 0xb4, 0x18, 0x2d, 0x73, 0xb7, 0x75, 0x26, + 0xea, 0x3d, 0x85, 0x4d, 0x6c, 0xf1, 0x07, 0xd5, 0x6b, 0x7d, 0x3d, 0x81, 0x1c, 0xcd, 0x5d, 0x24, 0x22, 0x14, 0x0a, + 0xaa, 0x85, 0x36, 0xb6, 0xbd, 0x2d, 0xe6, 0x1f, 0x6a, 0xc7, 0xbc, 0x13, 0xb4, 0xd5, 0xdd, 0x66, 0x31, 0x22, 0x5d, + 0x1b, 0xd6, 0x25, 0x05, 0xaa, 0xd7, 0x39, 0xb6, 0xbc, 0x23, 0xcb, 0x39, 0xee, 0x98, 0xb9, 0x38, 0x70, 0x6a, 0x97, + 0x25, 0x80, 0x80, 0xc9, 0xae, 0x1c, 0x66, 0x10, 0x05, 0x59, 0xe0, 0x87, 0x39, 0xa0, 0xfa, 0x32, 0xcd, 0xfb, 0xcf, + 0x65, 0x9a, 0xc1, 0x1c, 0x05, 0x49, 0x86, 0xe6, 0xca, 0xf6, 0x90, 0x65, 0xf7, 0x8c, 0x45, 0x1b, 0x54, 0xb9, 0x55, + 0xeb, 0xe7, 0x3f, 0xce, 0x16, 0x34, 0x27, 0x3b, 0x8b, 0x61, 0x16, 0xf1, 0xfd, 0x21, 0x4c, 0x75, 0xf3, 0x81, 0xf5, + 0xd3, 0x26, 0x84, 0xfb, 0xcf, 0xdd, 0x08, 0x37, 0x63, 0xfb, 0x20, 0xdc, 0x7f, 0x7e, 0x75, 0x84, 0xfb, 0x93, 0x8a, + 0x70, 0x4b, 0x9e, 0x2a, 0x85, 0x4c, 0xf4, 0x03, 0x3e, 0x1b, 0x10, 0x72, 0xf8, 0xa5, 0x7e, 0x40, 0xe4, 0xa5, 0xae, + 0xa4, 0x82, 0xfd, 0x58, 0xca, 0x6d, 0x83, 0x2c, 0x3b, 0x86, 0x48, 0xa5, 0x3c, 0x1a, 0x90, 0x26, 0x55, 0x26, 0xfc, + 0x86, 0x3e, 0x2f, 0xa2, 0x2c, 0x74, 0xde, 0x73, 0xb6, 0x04, 0x54, 0x10, 0x3f, 0xc4, 0xc9, 0xdc, 0xc7, 0xf0, 0x70, + 0x3a, 0xe6, 0xc4, 0x83, 0x07, 0x17, 0xbc, 0xa3, 0x46, 0x71, 0x34, 0x96, 0x72, 0x74, 0xd6, 0xbf, 0x26, 0x7a, 0x50, + 0x7f, 0x60, 0x7e, 0xa2, 0x5b, 0xf4, 0x1a, 0x16, 0xf7, 0x45, 0xdb, 0x7d, 0xd1, 0x3a, 0x7c, 0x71, 0xe4, 0xc2, 0xff, + 0x3c, 0xd6, 0xce, 0x2d, 0x5e, 0x71, 0x1e, 0x47, 0x90, 0x96, 0x43, 0xd4, 0xdc, 0x54, 0xed, 0x9e, 0xb1, 0x4f, 0x45, + 0xad, 0xe3, 0xe6, 0x4a, 0x63, 0xff, 0xa1, 0xa8, 0xd3, 0x58, 0x63, 0x16, 0x2f, 0x95, 0x61, 0x35, 0x8c, 0x26, 0x88, + 0x96, 0x20, 0x19, 0x52, 0x6a, 0xa8, 0xaf, 0xf9, 0x74, 0x8b, 0x79, 0xb1, 0x76, 0x7e, 0x53, 0xe4, 0xfe, 0x11, 0x39, + 0x48, 0x76, 0x42, 0x90, 0x0b, 0xd5, 0x5d, 0x8c, 0x1c, 0x8e, 0xd9, 0x6f, 0x34, 0xc8, 0xbc, 0x57, 0x24, 0x78, 0xc7, + 0x05, 0xca, 0x92, 0x65, 0x34, 0xa2, 0x1c, 0xee, 0xfe, 0x30, 0x35, 0x82, 0x03, 0x88, 0x1d, 0x8a, 0x1f, 0x36, 0x71, + 0xd5, 0xfc, 0x33, 0xb7, 0x48, 0x94, 0x90, 0x8a, 0x55, 0xf1, 0x5f, 0x64, 0x56, 0x42, 0xe9, 0x55, 0x71, 0x69, 0xed, + 0xbe, 0xff, 0x42, 0x36, 0x7c, 0x91, 0x59, 0x90, 0xe2, 0x14, 0x96, 0xfb, 0xf9, 0x73, 0xaa, 0x05, 0x49, 0x07, 0x69, + 0x5a, 0xe7, 0xa3, 0x22, 0xf8, 0x98, 0xe6, 0x4f, 0x63, 0x8a, 0x3f, 0xd6, 0x1d, 0x59, 0xf1, 0xcb, 0x97, 0x67, 0x7d, + 0xcf, 0xe4, 0x29, 0x33, 0x4b, 0xf9, 0x9d, 0x2e, 0xf7, 0x53, 0x8d, 0x9b, 0x8d, 0x4e, 0x5b, 0x8b, 0x20, 0x9a, 0x0a, + 0xcd, 0xb4, 0xc4, 0x5e, 0x90, 0x6f, 0x81, 0x54, 0x60, 0xbe, 0x50, 0x51, 0x8b, 0x3a, 0x77, 0x2c, 0x81, 0x74, 0x9f, + 0x7d, 0xbd, 0xed, 0xb8, 0x8e, 0xab, 0xcb, 0x86, 0x93, 0x60, 0xda, 0x5f, 0xc7, 0x99, 0x0f, 0x99, 0x6b, 0xc2, 0x78, + 0x0a, 0x9e, 0x1f, 0x59, 0x90, 0x85, 0x90, 0x06, 0x05, 0x5c, 0x40, 0xe6, 0xc4, 0x35, 0xe6, 0xdc, 0x1e, 0xd7, 0x4f, + 0x3e, 0x61, 0x2a, 0x3c, 0xe1, 0xf4, 0x85, 0xf1, 0x70, 0x7e, 0x84, 0xcb, 0xd0, 0xd0, 0x0d, 0x48, 0xc4, 0xc8, 0x92, + 0xd4, 0x56, 0xed, 0xdb, 0xbb, 0x1a, 0xb4, 0x81, 0x24, 0xe9, 0xd8, 0xc1, 0x24, 0xf1, 0xe7, 0x10, 0x31, 0x7c, 0x9d, + 0x5b, 0x1c, 0xd3, 0xea, 0x1c, 0xd5, 0x6a, 0xde, 0xab, 0x23, 0x4b, 0x6b, 0x79, 0x96, 0xe6, 0x02, 0xba, 0xd5, 0x73, + 0x6b, 0x9d, 0xdf, 0xf4, 0x76, 0xa9, 0xe8, 0x08, 0xbf, 0x3c, 0xa5, 0x79, 0x90, 0x72, 0x8e, 0x0b, 0x3f, 0x33, 0x0a, + 0x6f, 0x68, 0x28, 0xb1, 0xbc, 0x03, 0x12, 0xd3, 0x5f, 0xb1, 0x55, 0x66, 0x62, 0x9a, 0x10, 0x5e, 0x25, 0x30, 0xd7, + 0xe8, 0x9a, 0x16, 0x44, 0x5a, 0xf0, 0xf9, 0xb3, 0x11, 0x80, 0xf9, 0x7d, 0x5f, 0x81, 0x0f, 0x3c, 0x9b, 0x25, 0x80, + 0x05, 0x85, 0x62, 0x09, 0x81, 0x05, 0xbe, 0x31, 0xf0, 0x6f, 0x51, 0x2c, 0x7e, 0x70, 0xc5, 0x9e, 0x13, 0xfa, 0xd1, + 0x14, 0x50, 0x9a, 0x1f, 0x4d, 0x6b, 0x06, 0x04, 0xe4, 0x5d, 0x57, 0x29, 0x2d, 0xba, 0x2a, 0x94, 0xfb, 0xe9, 0xf7, + 0x0f, 0x57, 0x94, 0x06, 0x09, 0x52, 0x6e, 0xfb, 0x63, 0x74, 0x05, 0x2b, 0x74, 0x0f, 0x2f, 0xfb, 0xdf, 0x9c, 0xce, + 0x59, 0xe6, 0x93, 0xe0, 0x12, 0x58, 0x3c, 0x20, 0x07, 0xb4, 0x91, 0x48, 0x61, 0x4a, 0x0c, 0xde, 0x98, 0xdd, 0x05, + 0x23, 0xce, 0xa7, 0x59, 0x1a, 0xbf, 0xa7, 0x6c, 0xb4, 0x51, 0xea, 0x7b, 0x16, 0x99, 0xc8, 0x8e, 0x7c, 0x0c, 0x82, + 0xd8, 0x8f, 0x62, 0xfd, 0xec, 0x1b, 0xe9, 0x4d, 0xb4, 0x69, 0x11, 0x20, 0x17, 0xe1, 0x75, 0xc2, 0xc2, 0x7f, 0xf5, + 0xbf, 0x81, 0x8b, 0xfb, 0x9b, 0x1b, 0xdd, 0xec, 0x65, 0x0e, 0xf2, 0x31, 0xdf, 0x34, 0xe4, 0xe4, 0x43, 0x1e, 0x95, + 0x33, 0x9b, 0x6d, 0x85, 0xd9, 0x84, 0xdf, 0xbb, 0x59, 0xd7, 0xb3, 0x53, 0xbc, 0xd0, 0xce, 0x80, 0xbb, 0x58, 0x97, + 0x78, 0x4e, 0xaf, 0x87, 0x0c, 0xea, 0x30, 0xf4, 0x47, 0x9f, 0x04, 0x87, 0xaa, 0x3e, 0xec, 0xc3, 0x8b, 0x4a, 0xca, + 0xae, 0x71, 0x2f, 0xe3, 0x56, 0x5e, 0xe3, 0x97, 0xf1, 0x53, 0xf7, 0xb3, 0x20, 0x93, 0xcc, 0x30, 0x3e, 0xe4, 0xa0, + 0xcd, 0xc1, 0xf1, 0x15, 0xec, 0x0f, 0x30, 0xa8, 0xde, 0xc9, 0x5f, 0x3a, 0x77, 0x9e, 0x3b, 0x6b, 0x79, 0x0e, 0xb0, + 0x39, 0xb3, 0xb6, 0x73, 0x1c, 0xda, 0x6d, 0xe7, 0x18, 0xfe, 0x3e, 0x02, 0xeb, 0x65, 0xb7, 0x9c, 0xc3, 0x8f, 0x5e, + 0x2b, 0xb4, 0x4f, 0x9c, 0x63, 0xf8, 0xbb, 0xa4, 0x56, 0xbf, 0x20, 0xd3, 0x03, 0x0c, 0xcf, 0x37, 0x25, 0x2c, 0xa0, + 0xfc, 0x96, 0x5a, 0x04, 0xab, 0x74, 0xbd, 0x35, 0x68, 0x22, 0x00, 0x65, 0xe8, 0x96, 0x08, 0x51, 0x18, 0xf5, 0x0c, + 0x48, 0x12, 0x8e, 0xe1, 0xed, 0x85, 0x41, 0x46, 0x54, 0x24, 0xbc, 0xdf, 0x7c, 0x8c, 0x78, 0x9b, 0xe6, 0x70, 0xe0, + 0x22, 0x6f, 0x12, 0xa9, 0x2e, 0xfe, 0xb6, 0xc0, 0x10, 0x3b, 0x22, 0x80, 0xb9, 0x82, 0x95, 0x8a, 0xdc, 0x7d, 0xf9, + 0xee, 0x81, 0xa3, 0xdf, 0x28, 0x93, 0xb9, 0x63, 0xbe, 0x6a, 0xdf, 0x5c, 0x9d, 0x21, 0x7b, 0xff, 0xbd, 0xfd, 0x60, + 0xca, 0x54, 0xea, 0x47, 0xc4, 0x1a, 0x1d, 0x07, 0x89, 0x1c, 0x9e, 0x82, 0xa2, 0xbd, 0xe6, 0x38, 0xea, 0x26, 0x24, + 0xd9, 0xb8, 0x00, 0x2a, 0xf9, 0xce, 0x0f, 0x15, 0xd3, 0x0b, 0xa5, 0xe5, 0x13, 0x89, 0xf9, 0x9f, 0x3f, 0x2f, 0x06, + 0x67, 0x57, 0xc6, 0x7d, 0xea, 0x75, 0xe0, 0xda, 0xed, 0xb0, 0xf6, 0x56, 0x2b, 0xa0, 0xdd, 0xc1, 0x6a, 0x8b, 0x60, + 0x96, 0x42, 0xd3, 0x2f, 0x74, 0x8c, 0x1b, 0x4d, 0x91, 0x6a, 0x1a, 0x46, 0x08, 0xf3, 0x5b, 0x61, 0x75, 0x74, 0xb3, + 0x17, 0x09, 0x85, 0x59, 0xb4, 0x25, 0x40, 0x2f, 0xe7, 0xc5, 0x74, 0x00, 0xcd, 0x96, 0x79, 0xec, 0x70, 0x69, 0xfc, + 0x5f, 0x4f, 0x02, 0xdd, 0x8b, 0x40, 0xc3, 0x57, 0x39, 0xad, 0x25, 0x77, 0x13, 0x79, 0xaf, 0xd2, 0x85, 0xca, 0xd2, + 0x73, 0x1d, 0x8a, 0x20, 0xfb, 0x12, 0x26, 0x5c, 0x93, 0xe6, 0x4d, 0xf2, 0xb6, 0x28, 0x0a, 0xac, 0x00, 0x22, 0x54, + 0x1b, 0xc2, 0xd5, 0xc9, 0x7c, 0xfe, 0x7c, 0xe3, 0x25, 0x44, 0xea, 0x64, 0x35, 0xef, 0xa4, 0xae, 0xe2, 0x37, 0x5d, + 0x45, 0x31, 0xb2, 0x5f, 0xc4, 0x1a, 0xc2, 0x2a, 0x8b, 0xf6, 0x1e, 0xfe, 0x1c, 0x32, 0x3f, 0x73, 0xb8, 0x1e, 0xc4, + 0x50, 0x2e, 0x77, 0xcb, 0x63, 0x6d, 0xb0, 0xc7, 0xe2, 0x91, 0xb8, 0x78, 0xa4, 0xbb, 0x67, 0xeb, 0x8f, 0x4b, 0xee, + 0x87, 0x0c, 0x7d, 0x7c, 0x76, 0x8b, 0xe0, 0x29, 0xef, 0x32, 0x9f, 0x22, 0x6c, 0xa8, 0x57, 0x6e, 0x9c, 0xf9, 0x22, + 0xcb, 0x09, 0xd0, 0xe5, 0xbd, 0x46, 0x85, 0xa1, 0xe2, 0xab, 0x7c, 0xf6, 0xee, 0xea, 0x3b, 0x8d, 0xef, 0x7f, 0xd2, + 0x6f, 0x21, 0x23, 0x43, 0x31, 0xf9, 0xfb, 0x14, 0x93, 0x5f, 0xe3, 0x49, 0x2e, 0x20, 0xb2, 0x7d, 0x7e, 0x40, 0x10, + 0xd4, 0x35, 0x16, 0x8d, 0x48, 0xeb, 0x37, 0x5f, 0x86, 0x59, 0xb0, 0xf0, 0x93, 0xec, 0x00, 0x9a, 0xda, 0x80, 0xe4, + 0xf4, 0x4d, 0x1e, 0xcc, 0xa4, 0x38, 0x14, 0x42, 0xb5, 0x2c, 0x12, 0x9a, 0xc3, 0x49, 0x10, 0x4a, 0xc5, 0xa1, 0xf8, + 0x80, 0x3f, 0x1a, 0xb1, 0x45, 0xd6, 0xd7, 0xfd, 0x05, 0xe4, 0x66, 0xc0, 0x68, 0xcb, 0x07, 0xf1, 0x28, 0x63, 0x99, + 0x9d, 0x66, 0x09, 0xf3, 0xe7, 0xba, 0x0c, 0x34, 0x5a, 0xef, 0x2f, 0x5d, 0x0e, 0xe7, 0x41, 0x26, 0x23, 0xf5, 0xd1, + 0x04, 0x41, 0x85, 0x07, 0x43, 0x3c, 0x1b, 0xe4, 0x1c, 0x84, 0x97, 0xf1, 0xb4, 0xb2, 0xa3, 0x0a, 0xca, 0xe5, 0x1c, + 0xe3, 0xc0, 0xf2, 0x78, 0xfc, 0x63, 0xf4, 0xc8, 0xb9, 0xe5, 0x5e, 0xd7, 0x32, 0xa0, 0xa0, 0x7e, 0x76, 0xca, 0xd9, + 0x5b, 0x0d, 0x03, 0x05, 0xe8, 0x1d, 0x17, 0x22, 0xdd, 0x6e, 0xf2, 0xc7, 0x3e, 0xe0, 0x95, 0xe1, 0x6a, 0xa2, 0x9e, + 0x31, 0x0a, 0x39, 0x8d, 0xe5, 0x0a, 0x08, 0xa1, 0x92, 0x8a, 0x77, 0xe6, 0x9d, 0x49, 0x07, 0x20, 0x1c, 0x15, 0xd2, + 0x4a, 0x9f, 0x3f, 0xbf, 0x1e, 0xfc, 0xe7, 0xdf, 0x10, 0x2a, 0x7d, 0xe6, 0x09, 0x2f, 0xe8, 0x6b, 0xb5, 0x16, 0xa7, + 0x3e, 0xad, 0x01, 0xaa, 0xf7, 0xd9, 0x58, 0x84, 0x05, 0x11, 0x5b, 0x2b, 0x1f, 0xdc, 0x88, 0x50, 0x4f, 0x90, 0x0e, + 0xc1, 0x14, 0xbe, 0xda, 0x03, 0x58, 0xde, 0x81, 0x08, 0x11, 0xa0, 0xfd, 0xba, 0xfa, 0xfe, 0x18, 0x42, 0x01, 0xd7, + 0xb2, 0x14, 0x28, 0x03, 0xc4, 0x3d, 0x74, 0x76, 0xea, 0x73, 0xe1, 0x2b, 0x90, 0x1f, 0x69, 0xf7, 0x00, 0xa6, 0x39, + 0x8b, 0xe7, 0xcc, 0x09, 0xe2, 0x83, 0x7b, 0x36, 0xb4, 0xfd, 0x45, 0x40, 0xf2, 0x65, 0x94, 0xbb, 0x69, 0x44, 0xf9, + 0x49, 0x05, 0x2d, 0xd1, 0xd7, 0x79, 0x01, 0xca, 0xb8, 0x00, 0x14, 0xfc, 0xf4, 0xcf, 0xca, 0xd1, 0x03, 0x1d, 0x11, + 0xbf, 0xbe, 0x8c, 0xe5, 0xcf, 0x29, 0x08, 0xa0, 0x88, 0xf7, 0x57, 0x3c, 0xd8, 0xf1, 0x64, 0xa2, 0x46, 0xfc, 0x73, + 0xca, 0xdf, 0x97, 0x50, 0x29, 0xf6, 0x6c, 0xbc, 0xa0, 0x2f, 0xd5, 0x3f, 0x21, 0x7f, 0x42, 0xee, 0x5e, 0x1e, 0x1c, + 0x12, 0xce, 0x73, 0x2d, 0x72, 0xa0, 0x04, 0xc9, 0x53, 0xaa, 0xc4, 0x11, 0x45, 0x35, 0x4e, 0xf5, 0x06, 0xd2, 0xe4, + 0x49, 0xbf, 0x4f, 0x78, 0xac, 0x8a, 0xce, 0x00, 0x4a, 0x0d, 0xb1, 0xfc, 0x61, 0xb2, 0x19, 0x34, 0xb4, 0xc9, 0x83, + 0x0b, 0x1b, 0x55, 0xa7, 0x53, 0x1f, 0xe3, 0x81, 0x2f, 0xf6, 0x57, 0x69, 0x07, 0xc2, 0xce, 0xe2, 0x0b, 0x0b, 0x08, + 0x5c, 0xf4, 0x53, 0xc1, 0xe3, 0xda, 0xb7, 0x84, 0xb2, 0xed, 0xd0, 0x7f, 0x88, 0x15, 0xcd, 0x3a, 0x77, 0xb2, 0xbf, + 0xc4, 0xd2, 0x2b, 0xe1, 0xdc, 0x56, 0x3b, 0x49, 0x32, 0x1e, 0x7a, 0xfd, 0x34, 0xa9, 0x01, 0xcc, 0x77, 0x1d, 0x26, + 0xb5, 0x6e, 0x79, 0x32, 0x88, 0x1d, 0xf3, 0xe2, 0xa0, 0x95, 0x5e, 0xe2, 0xb9, 0xcf, 0x4f, 0x0f, 0x60, 0x7e, 0x10, + 0x18, 0xa0, 0x44, 0x19, 0x05, 0x26, 0x44, 0x1f, 0xf0, 0x53, 0xb2, 0x0e, 0xb8, 0x18, 0x0b, 0xa2, 0x0e, 0x39, 0x47, + 0x19, 0x9a, 0xb4, 0x54, 0xa5, 0x4e, 0xac, 0xb8, 0xcd, 0x54, 0xde, 0xee, 0xfc, 0x01, 0xbf, 0x2d, 0x31, 0x79, 0x40, + 0xde, 0xcb, 0x98, 0xf0, 0xbb, 0xbd, 0xcc, 0x36, 0xb8, 0xe6, 0x6e, 0xaa, 0x42, 0x04, 0xeb, 0x96, 0x0a, 0xc5, 0x3e, + 0xde, 0x56, 0xab, 0x20, 0x8d, 0x64, 0xb5, 0x85, 0x6f, 0xe8, 0x4f, 0x71, 0xc7, 0xd7, 0x6a, 0x63, 0x29, 0xd4, 0xbb, + 0xcc, 0xfa, 0x50, 0x55, 0x08, 0xdb, 0xfd, 0xc5, 0x82, 0x2a, 0x9b, 0xbd, 0xd3, 0x03, 0xe2, 0x3b, 0xcf, 0x68, 0x87, + 0x9d, 0x9d, 0x82, 0x75, 0x21, 0x2d, 0xba, 0xbf, 0x58, 0xf0, 0x25, 0xa5, 0x5f, 0xf4, 0xe6, 0x60, 0x96, 0xcd, 0xc3, + 0xb3, 0xff, 0x03, 0x1c, 0x2a, 0x1a, 0x60, 0x9f, 0x5a, 0x03, 0x00}; } // namespace web_server } // namespace esphome From 618102fe8c6d1fcafa51d2a0e025e08a1a14588d Mon Sep 17 00:00:00 2001 From: Mischa Siekmann <45062894+gnumpi@users.noreply.github.com> Date: Sun, 9 Jun 2024 08:34:21 +0200 Subject: [PATCH 310/313] fix: arduino media player still sets wrong state. (#6875) --- .../i2s_audio/media_player/i2s_audio_media_player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp index ef494fac2e..5140a923b4 100644 --- a/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +++ b/esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp @@ -28,7 +28,7 @@ void I2SAudioMediaPlayer::control(const media_player::MediaPlayerCall &call) { } } - if (this->state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING) { + if (play_state == media_player::MEDIA_PLAYER_STATE_ANNOUNCING) { this->is_announcement_ = true; } From 7b45498de67ccdf10271e61577c66b5e216bc6db Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 10 Jun 2024 08:15:29 +1200 Subject: [PATCH 311/313] [http_request] Add esp-idf and rp2040 support (#3256) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement http_request component for esp-idf * Fix ifdefs * Lint * clang * Set else to fail with error message * Use unique_ptr * Fix * Tidy up casting, explicit HttpResponse lifetime (#3265) Co-authored-by: Daniel Cousens * Remove unique_ptr wrapper * Fix * Use reference * Add duration code into new split files * Add config for tx/rx buffer on idf * Fix * Try reserve response data with rx buffer size * Update http_request.h * Move client cleanup to be earlier * Move capture_response to bool on struct and remove global * Fix returns * Change quotes to brackets * Rework http request * Remove http request from old test yamls * Update component tests * Validate md5 length when hardcoded string * Linting * Add duration_ms to container * More lint * const * Remove default arguments and add helper functions for get and post * Add virtual destructor to HttpContainer * Undo const HEADER_KEYS * 🤦 * Update esphome/components/http_request/ota/ota_http_request.cpp Co-authored-by: Keith Burzinski * Update esphome/components/http_request/ota/ota_http_request.cpp Co-authored-by: Keith Burzinski * lint * Move header keys inline * Add missing WatchdogManagers * CAPS * Fix "follow redirects" string in config dump * IDF 5+ fix --------- Co-authored-by: Daniel Cousens <413395+dcousens@users.noreply.github.com> Co-authored-by: Daniel Cousens Co-authored-by: Keith Burzinski --- esphome/codegen.py | 1 + esphome/components/http_request/__init__.py | 137 +++++++++++---- .../components/http_request/http_request.cpp | 132 +------------- .../components/http_request/http_request.h | 141 +++++++++------ .../http_request/http_request_arduino.cpp | 161 ++++++++++++++++++ .../http_request/http_request_arduino.h | 40 +++++ .../http_request/http_request_idf.cpp | 155 +++++++++++++++++ .../http_request/http_request_idf.h | 34 ++++ .../components/http_request/ota/__init__.py | 109 ++---------- .../http_request/ota/ota_http_request.cpp | 110 +++++------- .../http_request/ota/ota_http_request.h | 24 +-- .../ota/ota_http_request_arduino.cpp | 134 --------------- .../ota/ota_http_request_arduino.h | 42 ----- .../http_request/ota/ota_http_request_idf.cpp | 86 ---------- .../http_request/ota/ota_http_request_idf.h | 24 --- .../http_request/{ota => }/watchdog.cpp | 19 ++- .../http_request/{ota => }/watchdog.h | 5 +- esphome/cpp_types.py | 1 + tests/components/http_request/common.yaml | 75 ++++++++ .../http_request/common_http_request.yaml | 33 ---- tests/components/http_request/common_ota.yaml | 36 ---- .../http_request/test-nossl.esp8266.yaml | 40 +---- .../http_request/test.esp32-c3-idf.yaml | 2 +- .../http_request/test.esp32-c3.yaml | 3 +- .../http_request/test.esp32-idf.yaml | 2 +- tests/components/http_request/test.esp32.yaml | 3 +- .../components/http_request/test.esp8266.yaml | 3 +- .../components/http_request/test.rp2040.yaml | 2 +- tests/test1.yaml | 29 ---- tests/test3.1.yaml | 24 --- tests/test7.yaml | 23 +-- 31 files changed, 748 insertions(+), 882 deletions(-) create mode 100644 esphome/components/http_request/http_request_arduino.cpp create mode 100644 esphome/components/http_request/http_request_arduino.h create mode 100644 esphome/components/http_request/http_request_idf.cpp create mode 100644 esphome/components/http_request/http_request_idf.h delete mode 100644 esphome/components/http_request/ota/ota_http_request_arduino.cpp delete mode 100644 esphome/components/http_request/ota/ota_http_request_arduino.h delete mode 100644 esphome/components/http_request/ota/ota_http_request_idf.cpp delete mode 100644 esphome/components/http_request/ota/ota_http_request_idf.h rename esphome/components/http_request/{ota => }/watchdog.cpp (79%) rename esphome/components/http_request/{ota => }/watchdog.h (84%) create mode 100644 tests/components/http_request/common.yaml delete mode 100644 tests/components/http_request/common_http_request.yaml delete mode 100644 tests/components/http_request/common_ota.yaml diff --git a/esphome/codegen.py b/esphome/codegen.py index dc17f28a03..b552490129 100644 --- a/esphome/codegen.py +++ b/esphome/codegen.py @@ -58,6 +58,7 @@ from esphome.cpp_types import ( # noqa bool_, int_, std_ns, + std_shared_ptr, std_string, std_vector, uint8, diff --git a/esphome/components/http_request/__init__.py b/esphome/components/http_request/__init__.py index 0c3e249512..37487ec9a7 100644 --- a/esphome/components/http_request/__init__.py +++ b/esphome/components/http_request/__init__.py @@ -1,9 +1,8 @@ -import urllib.parse as urlparse - import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.const import ( + __version__, CONF_ID, CONF_TIMEOUT, CONF_METHOD, @@ -12,67 +11,91 @@ from esphome.const import ( CONF_ESP8266_DISABLE_SSL_SUPPORT, ) from esphome.core import Lambda, CORE +from esphome.components import esp32 DEPENDENCIES = ["network"] AUTO_LOAD = ["json"] http_request_ns = cg.esphome_ns.namespace("http_request") HttpRequestComponent = http_request_ns.class_("HttpRequestComponent", cg.Component) +HttpRequestArduino = http_request_ns.class_("HttpRequestArduino", HttpRequestComponent) +HttpRequestIDF = http_request_ns.class_("HttpRequestIDF", HttpRequestComponent) + +HttpContainer = http_request_ns.class_("HttpContainer") + HttpRequestSendAction = http_request_ns.class_( "HttpRequestSendAction", automation.Action ) HttpRequestResponseTrigger = http_request_ns.class_( - "HttpRequestResponseTrigger", automation.Trigger + "HttpRequestResponseTrigger", + automation.Trigger.template( + cg.std_shared_ptr.template(HttpContainer), cg.std_string + ), ) -CONF_HEADERS = "headers" +CONF_HTTP_REQUEST_ID = "http_request_id" + CONF_USERAGENT = "useragent" -CONF_BODY = "body" -CONF_JSON = "json" CONF_VERIFY_SSL = "verify_ssl" -CONF_ON_RESPONSE = "on_response" CONF_FOLLOW_REDIRECTS = "follow_redirects" CONF_REDIRECT_LIMIT = "redirect_limit" +CONF_WATCHDOG_TIMEOUT = "watchdog_timeout" + +CONF_MAX_RESPONSE_BUFFER_SIZE = "max_response_buffer_size" +CONF_ON_RESPONSE = "on_response" +CONF_HEADERS = "headers" +CONF_BODY = "body" +CONF_JSON = "json" +CONF_CAPTURE_RESPONSE = "capture_response" def validate_url(value): - value = cv.string(value) - try: - parsed = list(urlparse.urlparse(value)) - except Exception as err: - raise cv.Invalid("Invalid URL") from err - - if not parsed[0] or not parsed[1]: - raise cv.Invalid("URL must have a URL scheme and host") - - if parsed[0] not in ["http", "https"]: - raise cv.Invalid("Scheme must be http or https") - - if not parsed[2]: - parsed[2] = "/" - - return urlparse.urlunparse(parsed) + value = cv.url(value) + if value.startswith("http://") or value.startswith("https://"): + return value + raise cv.Invalid("URL must start with 'http://' or 'https://'") -def validate_secure_url(config): - url_ = config[CONF_URL] +def validate_ssl_verification(config): + error_message = "" + + if CORE.is_esp32: + if not CORE.using_esp_idf and config[CONF_VERIFY_SSL]: + error_message = "ESPHome supports certificate verification only via ESP-IDF" + + if CORE.is_rp2040 and config[CONF_VERIFY_SSL]: + error_message = "ESPHome does not support certificate verification on RP2040" + if ( - config.get(CONF_VERIFY_SSL) - and not isinstance(url_, Lambda) - and url_.lower().startswith("https:") + CORE.is_esp8266 + and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT] + and config[CONF_VERIFY_SSL] ): + error_message = "ESPHome does not support certificate verification on ESP8266" + + if len(error_message) > 0: raise cv.Invalid( - "Currently ESPHome doesn't support SSL verification. " - "Set 'verify_ssl: false' to make insecure HTTPS requests." + f"{error_message}. Set '{CONF_VERIFY_SSL}: false' to skip certificate validation and allow less secure HTTPS connections." ) + return config +def _declare_request_class(value): + if CORE.using_esp_idf: + return cv.declare_id(HttpRequestIDF)(value) + if CORE.is_esp8266 or CORE.is_esp32 or CORE.is_rp2040: + return cv.declare_id(HttpRequestArduino)(value) + return NotImplementedError + + CONFIG_SCHEMA = cv.All( cv.Schema( { - cv.GenerateID(): cv.declare_id(HttpRequestComponent), - cv.Optional(CONF_USERAGENT, "ESPHome"): cv.string, + cv.GenerateID(): _declare_request_class, + cv.Optional( + CONF_USERAGENT, f"ESPHome/{__version__} (https://esphome.io)" + ): cv.string, cv.Optional(CONF_FOLLOW_REDIRECTS, True): cv.boolean, cv.Optional(CONF_REDIRECT_LIMIT, 3): cv.int_, cv.Optional( @@ -81,12 +104,21 @@ CONFIG_SCHEMA = cv.All( cv.SplitDefault(CONF_ESP8266_DISABLE_SSL_SUPPORT, esp8266=False): cv.All( cv.only_on_esp8266, cv.boolean ), + cv.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, + cv.Optional(CONF_WATCHDOG_TIMEOUT): cv.All( + cv.Any(cv.only_on_esp32, cv.only_on_rp2040), + cv.positive_not_null_time_period, + cv.positive_time_period_milliseconds, + ), } ).extend(cv.COMPONENT_SCHEMA), cv.require_framework_version( esp8266_arduino=cv.Version(2, 5, 1), esp32_arduino=cv.Version(0, 0, 0), + esp_idf=cv.Version(0, 0, 0), + rp2040_arduino=cv.Version(0, 0, 0), ), + validate_ssl_verification, ) @@ -100,11 +132,30 @@ async def to_code(config): if CORE.is_esp8266 and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT]: cg.add_define("USE_HTTP_REQUEST_ESP8266_HTTPS") + if timeout_ms := config.get(CONF_WATCHDOG_TIMEOUT): + cg.add(var.set_watchdog_timeout(timeout_ms)) + if CORE.is_esp32: - cg.add_library("WiFiClientSecure", None) - cg.add_library("HTTPClient", None) + if CORE.using_esp_idf: + esp32.add_idf_sdkconfig_option( + "CONFIG_MBEDTLS_CERTIFICATE_BUNDLE", + config.get(CONF_VERIFY_SSL), + ) + esp32.add_idf_sdkconfig_option( + "CONFIG_ESP_TLS_INSECURE", + not config.get(CONF_VERIFY_SSL), + ) + esp32.add_idf_sdkconfig_option( + "CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY", + not config.get(CONF_VERIFY_SSL), + ) + else: + cg.add_library("WiFiClientSecure", None) + cg.add_library("HTTPClient", None) if CORE.is_esp8266: cg.add_library("ESP8266HTTPClient", None) + if CORE.is_rp2040 and CORE.using_arduino: + cg.add_library("HTTPClient", None) await cg.register_component(var, config) @@ -116,12 +167,16 @@ HTTP_REQUEST_ACTION_SCHEMA = cv.Schema( cv.Optional(CONF_HEADERS): cv.All( cv.Schema({cv.string: cv.templatable(cv.string)}) ), - cv.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, + cv.Optional(CONF_VERIFY_SSL): cv.invalid( + f"{CONF_VERIFY_SSL} has moved to the base component configuration." + ), + cv.Optional(CONF_CAPTURE_RESPONSE, default=False): cv.boolean, cv.Optional(CONF_ON_RESPONSE): automation.validate_automation( {cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(HttpRequestResponseTrigger)} ), + cv.Optional(CONF_MAX_RESPONSE_BUFFER_SIZE, default="1kB"): cv.validate_bytes, } -).add_extra(validate_secure_url) +) HTTP_REQUEST_GET_ACTION_SCHEMA = automation.maybe_conf( CONF_URL, HTTP_REQUEST_ACTION_SCHEMA.extend( @@ -173,6 +228,9 @@ async def http_request_action_to_code(config, action_id, template_arg, args): template_ = await cg.templatable(config[CONF_URL], args, cg.std_string) cg.add(var.set_url(template_)) cg.add(var.set_method(config[CONF_METHOD])) + cg.add(var.set_capture_response(config[CONF_CAPTURE_RESPONSE])) + cg.add(var.set_max_response_buffer_size(config[CONF_MAX_RESPONSE_BUFFER_SIZE])) + if CONF_BODY in config: template_ = await cg.templatable(config[CONF_BODY], args, cg.std_string) cg.add(var.set_body(template_)) @@ -196,7 +254,12 @@ async def http_request_action_to_code(config, action_id, template_arg, args): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) cg.add(var.register_response_trigger(trigger)) await automation.build_automation( - trigger, [(int, "status_code"), (cg.uint32, "duration_ms")], conf + trigger, + [ + (cg.std_shared_ptr.template(HttpContainer), "response"), + (cg.std_string, "body"), + ], + conf, ) return var diff --git a/esphome/components/http_request/http_request.cpp b/esphome/components/http_request/http_request.cpp index 46894a9afd..be8bef006e 100644 --- a/esphome/components/http_request/http_request.cpp +++ b/esphome/components/http_request/http_request.cpp @@ -1,9 +1,8 @@ -#ifdef USE_ARDUINO - #include "http_request.h" -#include "esphome/core/defines.h" + #include "esphome/core/log.h" -#include "esphome/components/network/util.h" + +#include namespace esphome { namespace http_request { @@ -14,131 +13,12 @@ void HttpRequestComponent::dump_config() { ESP_LOGCONFIG(TAG, "HTTP Request:"); ESP_LOGCONFIG(TAG, " Timeout: %ums", this->timeout_); ESP_LOGCONFIG(TAG, " User-Agent: %s", this->useragent_); - ESP_LOGCONFIG(TAG, " Follow Redirects: %d", this->follow_redirects_); + ESP_LOGCONFIG(TAG, " Follow redirects: %s", YESNO(this->follow_redirects_)); ESP_LOGCONFIG(TAG, " Redirect limit: %d", this->redirect_limit_); -} - -void HttpRequestComponent::set_url(std::string url) { - this->url_ = std::move(url); - this->secure_ = this->url_.compare(0, 6, "https:") == 0; - - if (!this->last_url_.empty() && this->url_ != this->last_url_) { - // Close connection if url has been changed - this->client_.setReuse(false); - this->client_.end(); + if (this->watchdog_timeout_ > 0) { + ESP_LOGCONFIG(TAG, " Watchdog Timeout: %" PRIu32 "ms", this->watchdog_timeout_); } - this->client_.setReuse(true); -} - -void HttpRequestComponent::send(const std::vector &response_triggers) { - if (!network::is_connected()) { - this->client_.end(); - this->status_set_warning(); - ESP_LOGW(TAG, "HTTP Request failed; Not connected to network"); - return; - } - - bool begin_status = false; - const String url = this->url_.c_str(); -#if defined(USE_ESP32) || (defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 6, 0)) -#if defined(USE_ESP32) || USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 7, 0) - if (this->follow_redirects_) { - this->client_.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS); - } else { - this->client_.setFollowRedirects(HTTPC_DISABLE_FOLLOW_REDIRECTS); - } -#else - this->client_.setFollowRedirects(this->follow_redirects_); -#endif - this->client_.setRedirectLimit(this->redirect_limit_); -#endif -#if defined(USE_ESP32) - begin_status = this->client_.begin(url); -#elif defined(USE_ESP8266) - begin_status = this->client_.begin(*this->get_wifi_client_(), url); -#endif - - if (!begin_status) { - this->client_.end(); - this->status_set_warning(); - ESP_LOGW(TAG, "HTTP Request failed at the begin phase. Please check the configuration"); - return; - } - - this->client_.setTimeout(this->timeout_); -#if defined(USE_ESP32) - this->client_.setConnectTimeout(this->timeout_); -#endif - if (this->useragent_ != nullptr) { - this->client_.setUserAgent(this->useragent_); - } - for (const auto &header : this->headers_) { - this->client_.addHeader(header.name, header.value, false, true); - } - - uint32_t start_time = millis(); - int http_code = this->client_.sendRequest(this->method_, this->body_.c_str()); - uint32_t duration = millis() - start_time; - for (auto *trigger : response_triggers) - trigger->process(http_code, duration); - - if (http_code < 0) { - ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s; Duration: %u ms", this->url_.c_str(), - HTTPClient::errorToString(http_code).c_str(), duration); - this->status_set_warning(); - return; - } - - if (http_code < 200 || http_code >= 300) { - ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Code: %d; Duration: %u ms", this->url_.c_str(), http_code, duration); - this->status_set_warning(); - return; - } - - this->status_clear_warning(); - ESP_LOGD(TAG, "HTTP Request completed; URL: %s; Code: %d; Duration: %u ms", this->url_.c_str(), http_code, duration); -} - -#ifdef USE_ESP8266 -std::shared_ptr HttpRequestComponent::get_wifi_client_() { -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS - if (this->secure_) { - if (this->wifi_client_secure_ == nullptr) { - this->wifi_client_secure_ = std::make_shared(); - this->wifi_client_secure_->setInsecure(); - this->wifi_client_secure_->setBufferSizes(512, 512); - } - return this->wifi_client_secure_; - } -#endif - - if (this->wifi_client_ == nullptr) { - this->wifi_client_ = std::make_shared(); - } - return this->wifi_client_; -} -#endif - -void HttpRequestComponent::close() { - this->last_url_ = this->url_; - this->client_.end(); -} - -const char *HttpRequestComponent::get_string() { -#if defined(ESP32) - // The static variable is here because HTTPClient::getString() returns a String on ESP32, - // and we need something to keep a buffer alive. - static String str; -#else - // However on ESP8266, HTTPClient::getString() returns a String& to a member variable. - // Leaving this the default so that any new platform either doesn't copy, or encounters a compilation error. - auto & -#endif - str = this->client_.getString(); - return str.c_str(); } } // namespace http_request } // namespace esphome - -#endif // USE_ARDUINO diff --git a/esphome/components/http_request/http_request.h b/esphome/components/http_request/http_request.h index b885de18e6..df6bc7dea7 100644 --- a/esphome/components/http_request/http_request.h +++ b/esphome/components/http_request/http_request.h @@ -1,27 +1,18 @@ #pragma once -#ifdef USE_ARDUINO - -#include "esphome/components/json/json_util.h" -#include "esphome/core/automation.h" -#include "esphome/core/component.h" -#include "esphome/core/defines.h" - #include #include #include #include #include -#ifdef USE_ESP32 -#include -#endif -#ifdef USE_ESP8266 -#include -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS -#include -#endif -#endif +#include "esphome/components/json/json_util.h" +#include "esphome/core/application.h" +#include "esphome/core/automation.h" +#include "esphome/core/component.h" +#include "esphome/core/defines.h" +#include "esphome/core/helpers.h" +#include "esphome/core/log.h" namespace esphome { namespace http_request { @@ -31,9 +22,32 @@ struct Header { const char *value; }; -class HttpRequestResponseTrigger : public Trigger { +class HttpRequestComponent; + +class HttpContainer : public Parented { public: - void process(int32_t status_code, uint32_t duration_ms) { this->trigger(status_code, duration_ms); } + virtual ~HttpContainer() = default; + size_t content_length; + int status_code; + uint32_t duration_ms; + + virtual int read(uint8_t *buf, size_t max_len) = 0; + virtual void end() = 0; + + void set_secure(bool secure) { this->secure_ = secure; } + + size_t get_bytes_read() const { return this->bytes_read_; } + + protected: + size_t bytes_read_{0}; + bool secure_{false}; +}; + +class HttpRequestResponseTrigger : public Trigger, std::string> { + public: + void process(std::shared_ptr container, std::string response_body) { + this->trigger(std::move(container), std::move(response_body)); + } }; class HttpRequestComponent : public Component { @@ -41,37 +55,33 @@ class HttpRequestComponent : public Component { void dump_config() override; float get_setup_priority() const override { return setup_priority::AFTER_WIFI; } - void set_url(std::string url); - void set_method(const char *method) { this->method_ = method; } void set_useragent(const char *useragent) { this->useragent_ = useragent; } void set_timeout(uint16_t timeout) { this->timeout_ = timeout; } + void set_watchdog_timeout(uint32_t watchdog_timeout) { this->watchdog_timeout_ = watchdog_timeout; } + uint32_t get_watchdog_timeout() const { return this->watchdog_timeout_; } void set_follow_redirects(bool follow_redirects) { this->follow_redirects_ = follow_redirects; } void set_redirect_limit(uint16_t limit) { this->redirect_limit_ = limit; } - void set_body(const std::string &body) { this->body_ = body; } - void set_headers(std::list

headers) { this->headers_ = std::move(headers); } - void send(const std::vector &response_triggers); - void close(); - const char *get_string(); + + std::shared_ptr get(std::string url) { return this->start(std::move(url), "GET", "", {}); } + std::shared_ptr get(std::string url, std::list
headers) { + return this->start(std::move(url), "GET", "", std::move(headers)); + } + std::shared_ptr post(std::string url, std::string body) { + return this->start(std::move(url), "POST", std::move(body), {}); + } + std::shared_ptr post(std::string url, std::string body, std::list
headers) { + return this->start(std::move(url), "POST", std::move(body), std::move(headers)); + } + + virtual std::shared_ptr start(std::string url, std::string method, std::string body, + std::list
headers) = 0; protected: - HTTPClient client_{}; - std::string url_; - std::string last_url_; - const char *method_; const char *useragent_{nullptr}; - bool secure_; bool follow_redirects_; uint16_t redirect_limit_; uint16_t timeout_{5000}; - std::string body_; - std::list
headers_; -#ifdef USE_ESP8266 - std::shared_ptr wifi_client_; -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS - std::shared_ptr wifi_client_secure_; -#endif - std::shared_ptr get_wifi_client_(); -#endif + uint32_t watchdog_timeout_{0}; }; template class HttpRequestSendAction : public Action { @@ -80,6 +90,7 @@ template class HttpRequestSendAction : public Action { TEMPLATABLE_VALUE(std::string, url) TEMPLATABLE_VALUE(const char *, method) TEMPLATABLE_VALUE(std::string, body) + TEMPLATABLE_VALUE(bool, capture_response) void add_header(const char *key, TemplatableValue value) { this->headers_.insert({key, value}); } @@ -89,19 +100,22 @@ template class HttpRequestSendAction : public Action { void register_response_trigger(HttpRequestResponseTrigger *trigger) { this->response_triggers_.push_back(trigger); } + void set_max_response_buffer_size(size_t max_response_buffer_size) { + this->max_response_buffer_size_ = max_response_buffer_size; + } + void play(Ts... x) override { - this->parent_->set_url(this->url_.value(x...)); - this->parent_->set_method(this->method_.value(x...)); + std::string body; if (this->body_.has_value()) { - this->parent_->set_body(this->body_.value(x...)); + body = this->body_.value(x...); } if (!this->json_.empty()) { auto f = std::bind(&HttpRequestSendAction::encode_json_, this, x..., std::placeholders::_1); - this->parent_->set_body(json::build_json(f)); + body = json::build_json(f); } if (this->json_func_ != nullptr) { auto f = std::bind(&HttpRequestSendAction::encode_json_func_, this, x..., std::placeholders::_1); - this->parent_->set_body(json::build_json(f)); + body = json::build_json(f); } std::list
headers; for (const auto &item : this->headers_) { @@ -111,10 +125,37 @@ template class HttpRequestSendAction : public Action { header.value = val.value(x...); headers.push_back(header); } - this->parent_->set_headers(headers); - this->parent_->send(this->response_triggers_); - this->parent_->close(); - this->parent_->set_body(""); + + auto container = this->parent_->start(this->url_.value(x...), this->method_.value(x...), body, headers); + + if (container == nullptr) { + return; + } + + size_t content_length = container->content_length; + size_t max_length = std::min(content_length, this->max_response_buffer_size_); + + std::string response_body; + if (this->capture_response_.value(x...)) { + ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); + uint8_t *buf = allocator.allocate(max_length); + if (buf != nullptr) { + size_t read_index = 0; + while (container->get_bytes_read() < max_length) { + int read = container->read(buf + read_index, std::min(max_length - read_index, 512)); + App.feed_wdt(); + yield(); + read_index += read; + } + response_body.reserve(read_index); + response_body.assign((char *) buf, read_index); + } + } + + for (auto *trigger : this->response_triggers_) { + trigger->process(container, response_body); + } + container->end(); } protected: @@ -130,9 +171,9 @@ template class HttpRequestSendAction : public Action { std::map> json_{}; std::function json_func_{nullptr}; std::vector response_triggers_; + + size_t max_response_buffer_size_{SIZE_MAX}; }; } // namespace http_request } // namespace esphome - -#endif // USE_ARDUINO diff --git a/esphome/components/http_request/http_request_arduino.cpp b/esphome/components/http_request/http_request_arduino.cpp new file mode 100644 index 0000000000..248a85a439 --- /dev/null +++ b/esphome/components/http_request/http_request_arduino.cpp @@ -0,0 +1,161 @@ +#include "http_request_arduino.h" + +#ifdef USE_ARDUINO + +#include "esphome/components/network/util.h" +#include "esphome/core/application.h" +#include "esphome/core/defines.h" +#include "esphome/core/log.h" + +#include "watchdog.h" + +namespace esphome { +namespace http_request { + +static const char *const TAG = "http_request.arduino"; + +std::shared_ptr HttpRequestArduino::start(std::string url, std::string method, std::string body, + std::list
headers) { + if (!network::is_connected()) { + this->status_momentary_error("failed", 1000); + ESP_LOGW(TAG, "HTTP Request failed; Not connected to network"); + return nullptr; + } + + std::shared_ptr container = std::make_shared(); + container->set_parent(this); + + const uint32_t start = millis(); + + bool secure = url.find("https:") != std::string::npos; + container->set_secure(secure); + + watchdog::WatchdogManager wdm(this->get_watchdog_timeout()); + +#if defined(USE_ESP8266) + std::unique_ptr stream_ptr; +#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS + if (secure) { + ESP_LOGV(TAG, "ESP8266 HTTPS connection with WiFiClientSecure"); + stream_ptr = std::make_unique(); + WiFiClientSecure *secure_client = static_cast(stream_ptr.get()); + secure_client->setBufferSizes(512, 512); + secure_client->setInsecure(); + } else { + stream_ptr = std::make_unique(); + } +#else + ESP_LOGV(TAG, "ESP8266 HTTP connection with WiFiClient"); + if (secure) { + ESP_LOGE(TAG, "Can't use HTTPS connection with esp8266_disable_ssl_support"); + return nullptr; + } + stream_ptr = std::make_unique(); +#endif // USE_HTTP_REQUEST_ESP8266_HTTPS + +#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(3, 1, 0) // && USE_ARDUINO_VERSION_CODE < VERSION_CODE(?, ?, ?) + if (!secure) { + ESP_LOGW(TAG, "Using HTTP on Arduino version >= 3.1 is **very** slow. Consider setting framework version to 3.0.2 " + "in your YAML, or use HTTPS"); + } +#endif // USE_ARDUINO_VERSION_CODE + + container->client_.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); + bool status = container->client_.begin(*stream_ptr, url.c_str()); + +#elif defined(USE_RP2040) + if (secure) { + container->client_.setInsecure(); + } + bool status = container->client_.begin(url.c_str()); +#elif defined(USE_ESP32) + bool status = container->client_.begin(url.c_str()); +#endif + + App.feed_wdt(); + + if (!status) { + ESP_LOGW(TAG, "HTTP Request failed; URL: %s", url.c_str()); + container->end(); + this->status_momentary_error("failed", 1000); + return nullptr; + } + + container->client_.setReuse(true); + container->client_.setTimeout(this->timeout_); +#if defined(USE_ESP32) + container->client_.setConnectTimeout(this->timeout_); +#endif + + if (this->useragent_ != nullptr) { + container->client_.setUserAgent(this->useragent_); + } + for (const auto &header : headers) { + container->client_.addHeader(header.name, header.value, false, true); + } + + // returned needed headers must be collected before the requests + static const char *header_keys[] = {"Content-Length", "Content-Type"}; + static const size_t HEADER_COUNT = sizeof(header_keys) / sizeof(header_keys[0]); + container->client_.collectHeaders(header_keys, HEADER_COUNT); + + container->status_code = container->client_.sendRequest(method.c_str(), body.c_str()); + if (container->status_code < 0) { + ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s", url.c_str(), + HTTPClient::errorToString(container->status_code).c_str()); + this->status_momentary_error("failed", 1000); + container->end(); + return nullptr; + } + + if (container->status_code < 200 || container->status_code >= 300) { + ESP_LOGE(TAG, "HTTP Request failed; URL: %s; Code: %d", url.c_str(), container->status_code); + this->status_momentary_error("failed", 1000); + container->end(); + return nullptr; + } + + int content_length = container->client_.getSize(); + ESP_LOGD(TAG, "Content-Length: %d", content_length); + container->content_length = (size_t) content_length; + container->duration_ms = millis() - start; + + return container; +} + +int HttpContainerArduino::read(uint8_t *buf, size_t max_len) { + const uint32_t start = millis(); + watchdog::WatchdogManager wdm(this->parent_->get_watchdog_timeout()); + + WiFiClient *stream_ptr = this->client_.getStreamPtr(); + if (stream_ptr == nullptr) { + ESP_LOGE(TAG, "Stream pointer vanished!"); + return -1; + } + + int available_data = stream_ptr->available(); + int bufsize = std::min(max_len, std::min(this->content_length - this->bytes_read_, (size_t) available_data)); + + if (bufsize == 0) { + this->duration_ms += (millis() - start); + return 0; + } + + App.feed_wdt(); + int read_len = stream_ptr->readBytes(buf, bufsize); + this->bytes_read_ += read_len; + + this->duration_ms += (millis() - start); + + return read_len; +} + +void HttpContainerArduino::end() { + watchdog::WatchdogManager wdm(this->parent_->get_watchdog_timeout()); + this->client_.end(); +} + +} // namespace http_request +} // namespace esphome + +#endif // USE_ARDUINO diff --git a/esphome/components/http_request/http_request_arduino.h b/esphome/components/http_request/http_request_arduino.h new file mode 100644 index 0000000000..dfdf4a35e2 --- /dev/null +++ b/esphome/components/http_request/http_request_arduino.h @@ -0,0 +1,40 @@ +#pragma once + +#include "http_request.h" + +#ifdef USE_ARDUINO + +#if defined(USE_ESP32) || defined(USE_RP2040) +#include +#endif +#ifdef USE_ESP8266 +#include +#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS +#include +#endif +#endif + +namespace esphome { +namespace http_request { + +class HttpRequestArduino; +class HttpContainerArduino : public HttpContainer { + public: + int read(uint8_t *buf, size_t max_len) override; + void end() override; + + protected: + friend class HttpRequestArduino; + HTTPClient client_{}; +}; + +class HttpRequestArduino : public HttpRequestComponent { + public: + std::shared_ptr start(std::string url, std::string method, std::string body, + std::list
headers) override; +}; + +} // namespace http_request +} // namespace esphome + +#endif // USE_ARDUINO diff --git a/esphome/components/http_request/http_request_idf.cpp b/esphome/components/http_request/http_request_idf.cpp new file mode 100644 index 0000000000..138e0438f4 --- /dev/null +++ b/esphome/components/http_request/http_request_idf.cpp @@ -0,0 +1,155 @@ +#include "http_request_idf.h" + +#ifdef USE_ESP_IDF + +#include "esphome/components/network/util.h" +#include "esphome/core/application.h" +#include "esphome/core/defines.h" +#include "esphome/core/log.h" + +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE +#include "esp_crt_bundle.h" +#endif + +#include "watchdog.h" + +namespace esphome { +namespace http_request { + +static const char *const TAG = "http_request.idf"; + +std::shared_ptr HttpRequestIDF::start(std::string url, std::string method, std::string body, + std::list
headers) { + if (!network::is_connected()) { + this->status_momentary_error("failed", 1000); + ESP_LOGE(TAG, "HTTP Request failed; Not connected to network"); + return nullptr; + } + + esp_http_client_method_t method_idf; + if (method == "GET") { + method_idf = HTTP_METHOD_GET; + } else if (method == "POST") { + method_idf = HTTP_METHOD_POST; + } else if (method == "PUT") { + method_idf = HTTP_METHOD_PUT; + } else if (method == "DELETE") { + method_idf = HTTP_METHOD_DELETE; + } else if (method == "PATCH") { + method_idf = HTTP_METHOD_PATCH; + } else { + this->status_momentary_error("failed", 1000); + ESP_LOGE(TAG, "HTTP Request failed; Unsupported method"); + return nullptr; + } + + bool secure = url.find("https:") != std::string::npos; + + esp_http_client_config_t config = {}; + + config.url = url.c_str(); + config.method = method_idf; + config.timeout_ms = this->timeout_; + config.disable_auto_redirect = !this->follow_redirects_; + config.max_redirection_count = this->redirect_limit_; +#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE + if (secure) { + config.crt_bundle_attach = esp_crt_bundle_attach; + } +#endif + + if (this->useragent_ != nullptr) { + config.user_agent = this->useragent_; + } + + const uint32_t start = millis(); + watchdog::WatchdogManager wdm(this->get_watchdog_timeout()); + + esp_http_client_handle_t client = esp_http_client_init(&config); + + std::shared_ptr container = std::make_shared(client); + container->set_parent(this); + + container->set_secure(secure); + + for (const auto &header : headers) { + esp_http_client_set_header(client, header.name, header.value); + } + + int body_len = body.length(); + + esp_err_t err = esp_http_client_open(client, body_len); + if (err != ESP_OK) { + this->status_momentary_error("failed", 1000); + ESP_LOGE(TAG, "HTTP Request failed: %s", esp_err_to_name(err)); + esp_http_client_cleanup(client); + return nullptr; + } + + if (body_len > 0) { + int write_left = body_len; + int write_index = 0; + const char *buf = body.c_str(); + while (body_len > 0) { + int written = esp_http_client_write(client, buf + write_index, write_left); + if (written < 0) { + err = ESP_FAIL; + break; + } + write_left -= written; + write_index += written; + } + } + + if (err != ESP_OK) { + this->status_momentary_error("failed", 1000); + ESP_LOGE(TAG, "HTTP Request failed: %s", esp_err_to_name(err)); + esp_http_client_cleanup(client); + return nullptr; + } + + container->content_length = esp_http_client_fetch_headers(client); + const auto status_code = esp_http_client_get_status_code(client); + container->status_code = status_code; + + if (status_code < 200 || status_code >= 300) { + ESP_LOGE(TAG, "HTTP Request failed; URL: %s; Code: %d", url.c_str(), status_code); + this->status_momentary_error("failed", 1000); + esp_http_client_cleanup(client); + return nullptr; + } + container->duration_ms = millis() - start; + return container; +} + +int HttpContainerIDF::read(uint8_t *buf, size_t max_len) { + const uint32_t start = millis(); + watchdog::WatchdogManager wdm(this->parent_->get_watchdog_timeout()); + + int bufsize = std::min(max_len, this->content_length - this->bytes_read_); + + if (bufsize == 0) { + this->duration_ms += (millis() - start); + return 0; + } + + App.feed_wdt(); + int read_len = esp_http_client_read(this->client_, (char *) buf, bufsize); + this->bytes_read_ += read_len; + + this->duration_ms += (millis() - start); + + return read_len; +} + +void HttpContainerIDF::end() { + watchdog::WatchdogManager wdm(this->parent_->get_watchdog_timeout()); + + esp_http_client_close(this->client_); + esp_http_client_cleanup(this->client_); +} + +} // namespace http_request +} // namespace esphome + +#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/http_request_idf.h b/esphome/components/http_request/http_request_idf.h new file mode 100644 index 0000000000..79f850a636 --- /dev/null +++ b/esphome/components/http_request/http_request_idf.h @@ -0,0 +1,34 @@ +#pragma once + +#include "http_request.h" + +#ifdef USE_ESP_IDF + +#include +#include +#include +#include + +namespace esphome { +namespace http_request { + +class HttpContainerIDF : public HttpContainer { + public: + HttpContainerIDF(esp_http_client_handle_t client) : client_(client) {} + int read(uint8_t *buf, size_t max_len) override; + void end() override; + + protected: + esp_http_client_handle_t client_; +}; + +class HttpRequestIDF : public HttpRequestComponent { + public: + std::shared_ptr start(std::string url, std::string method, std::string body, + std::list
headers) override; +}; + +} // namespace http_request +} // namespace esphome + +#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/ota/__init__.py b/esphome/components/http_request/ota/__init__.py index 6a56fac83a..0ef1fc2348 100644 --- a/esphome/components/http_request/ota/__init__.py +++ b/esphome/components/http_request/ota/__init__.py @@ -2,92 +2,35 @@ import esphome.codegen as cg import esphome.config_validation as cv from esphome import automation from esphome.const import ( - CONF_ESP8266_DISABLE_SSL_SUPPORT, CONF_ID, CONF_PASSWORD, - CONF_TIMEOUT, CONF_URL, CONF_USERNAME, ) -from esphome.components import esp32 from esphome.components.ota import BASE_OTA_SCHEMA, ota_to_code, OTAComponent -from esphome.core import CORE, coroutine_with_priority -from .. import http_request_ns +from esphome.core import coroutine_with_priority +from .. import CONF_HTTP_REQUEST_ID, http_request_ns, HttpRequestComponent CODEOWNERS = ["@oarcher"] AUTO_LOAD = ["md5"] -DEPENDENCIES = ["network"] +DEPENDENCIES = ["network", "http_request"] CONF_MD5 = "md5" CONF_MD5_URL = "md5_url" -CONF_VERIFY_SSL = "verify_ssl" -CONF_WATCHDOG_TIMEOUT = "watchdog_timeout" OtaHttpRequestComponent = http_request_ns.class_( "OtaHttpRequestComponent", OTAComponent ) -OtaHttpRequestComponentArduino = http_request_ns.class_( - "OtaHttpRequestComponentArduino", OtaHttpRequestComponent -) -OtaHttpRequestComponentIDF = http_request_ns.class_( - "OtaHttpRequestComponentIDF", OtaHttpRequestComponent -) OtaHttpRequestComponentFlashAction = http_request_ns.class_( "OtaHttpRequestComponentFlashAction", automation.Action ) - -def validate_ssl_verification(config): - error_message = "" - - if CORE.is_esp32: - if not CORE.using_esp_idf and config[CONF_VERIFY_SSL]: - error_message = "ESPHome supports certificate verification only via ESP-IDF" - - if CORE.is_rp2040 and config[CONF_VERIFY_SSL]: - error_message = "ESPHome does not support certificate verification in Arduino" - - if ( - CORE.is_esp8266 - and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT] - and config[CONF_VERIFY_SSL] - ): - error_message = "ESPHome does not support certificate verification in Arduino" - - if len(error_message) > 0: - raise cv.Invalid( - f"{error_message}. Set '{CONF_VERIFY_SSL}: false' to skip certificate validation and allow less secure HTTPS connections." - ) - - return config - - -def _declare_request_class(value): - if CORE.using_esp_idf: - return cv.declare_id(OtaHttpRequestComponentIDF)(value) - - if CORE.is_esp8266 or CORE.is_esp32 or CORE.is_rp2040: - return cv.declare_id(OtaHttpRequestComponentArduino)(value) - return NotImplementedError - - CONFIG_SCHEMA = cv.All( cv.Schema( { - cv.GenerateID(): _declare_request_class, - cv.SplitDefault(CONF_ESP8266_DISABLE_SSL_SUPPORT, esp8266=False): cv.All( - cv.only_on_esp8266, cv.boolean - ), - cv.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, - cv.Optional( - CONF_TIMEOUT, default="5min" - ): cv.positive_time_period_milliseconds, - cv.Optional(CONF_WATCHDOG_TIMEOUT): cv.All( - cv.Any(cv.only_on_esp32, cv.only_on_rp2040), - cv.positive_not_null_time_period, - cv.positive_time_period_milliseconds, - ), + cv.GenerateID(): cv.declare_id(OtaHttpRequestComponent), + cv.GenerateID(CONF_HTTP_REQUEST_ID): cv.use_id(HttpRequestComponent), } ) .extend(BASE_OTA_SCHEMA) @@ -98,7 +41,6 @@ CONFIG_SCHEMA = cv.All( esp_idf=cv.Version(0, 0, 0), rp2040_arduino=cv.Version(0, 0, 0), ), - validate_ssl_verification, ) @@ -106,41 +48,8 @@ CONFIG_SCHEMA = cv.All( async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await ota_to_code(var, config) - - cg.add(var.set_timeout(config[CONF_TIMEOUT])) - - if timeout_ms := config.get(CONF_WATCHDOG_TIMEOUT): - cg.add_define( - "USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT", - timeout_ms, - ) - - if CORE.is_esp8266 and not config[CONF_ESP8266_DISABLE_SSL_SUPPORT]: - cg.add_define("USE_HTTP_REQUEST_ESP8266_HTTPS") - - if CORE.is_esp32: - if CORE.using_esp_idf: - esp32.add_idf_sdkconfig_option( - "CONFIG_MBEDTLS_CERTIFICATE_BUNDLE", - config.get(CONF_VERIFY_SSL), - ) - esp32.add_idf_sdkconfig_option( - "CONFIG_ESP_TLS_INSECURE", - not config.get(CONF_VERIFY_SSL), - ) - esp32.add_idf_sdkconfig_option( - "CONFIG_ESP_TLS_SKIP_SERVER_CERT_VERIFY", - not config.get(CONF_VERIFY_SSL), - ) - else: - cg.add_library("WiFiClientSecure", None) - cg.add_library("HTTPClient", None) - if CORE.is_esp8266: - cg.add_library("ESP8266HTTPClient", None) - if CORE.is_rp2040 and CORE.using_arduino: - cg.add_library("HTTPClient", None) - await cg.register_component(var, config) + await cg.register_parented(var, config[CONF_HTTP_REQUEST_ID]) OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA = cv.All( @@ -148,7 +57,9 @@ OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA = cv.All( { cv.GenerateID(): cv.use_id(OtaHttpRequestComponent), cv.Optional(CONF_MD5_URL): cv.templatable(cv.url), - cv.Optional(CONF_MD5): cv.templatable(cv.string), + cv.Optional(CONF_MD5): cv.templatable( + cv.All(cv.string, cv.Length(min=32, max=32)) + ), cv.Optional(CONF_PASSWORD): cv.templatable(cv.string), cv.Optional(CONF_USERNAME): cv.templatable(cv.string), cv.Required(CONF_URL): cv.templatable(cv.url), @@ -159,7 +70,7 @@ OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA = cv.All( @automation.register_action( - "ota_http_request.flash", + "ota.http_request.flash", OtaHttpRequestComponentFlashAction, OTA_HTTP_REQUEST_FLASH_ACTION_SCHEMA, ) diff --git a/esphome/components/http_request/ota/ota_http_request.cpp b/esphome/components/http_request/ota/ota_http_request.cpp index cf0816c858..a41f552baf 100644 --- a/esphome/components/http_request/ota/ota_http_request.cpp +++ b/esphome/components/http_request/ota/ota_http_request.cpp @@ -1,16 +1,16 @@ #include "ota_http_request.h" -#include "watchdog.h" +#include "../watchdog.h" #include "esphome/core/application.h" #include "esphome/core/defines.h" #include "esphome/core/log.h" #include "esphome/components/md5/md5.h" +#include "esphome/components/ota/ota_backend.h" #include "esphome/components/ota/ota_backend_arduino_esp32.h" #include "esphome/components/ota/ota_backend_arduino_esp8266.h" #include "esphome/components/ota/ota_backend_arduino_rp2040.h" #include "esphome/components/ota/ota_backend_esp_idf.h" -#include "esphome/components/ota/ota_backend.h" namespace esphome { namespace http_request { @@ -21,25 +21,7 @@ void OtaHttpRequestComponent::setup() { #endif } -void OtaHttpRequestComponent::dump_config() { - ESP_LOGCONFIG(TAG, "Over-The-Air updates via HTTP request:"); - ESP_LOGCONFIG(TAG, " Timeout: %llus", this->timeout_ / 1000); -#ifdef USE_ESP8266 -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS - ESP_LOGCONFIG(TAG, " ESP8266 SSL support: No"); -#else - ESP_LOGCONFIG(TAG, " ESP8266 SSL support: Yes"); -#endif -#endif -#ifdef CONFIG_MBEDTLS_CERTIFICATE_BUNDLE - ESP_LOGCONFIG(TAG, " TLS server verification: Yes"); -#else - ESP_LOGCONFIG(TAG, " TLS server verification: No"); -#endif -#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT - ESP_LOGCONFIG(TAG, " Watchdog timeout: %ds", USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT / 1000); -#endif -}; +void OtaHttpRequestComponent::dump_config() { ESP_LOGCONFIG(TAG, "Over-The-Air updates via HTTP request"); }; void OtaHttpRequestComponent::set_md5_url(const std::string &url) { if (!this->validate_url_(url)) { @@ -58,20 +40,6 @@ void OtaHttpRequestComponent::set_url(const std::string &url) { this->url_ = url; } -bool OtaHttpRequestComponent::check_status() { - // status can be -1, or HTTP status code - if (this->status_ < 100) { - ESP_LOGE(TAG, "HTTP server did not respond (error %d)", this->status_); - return false; - } - if (this->status_ >= 310) { - ESP_LOGE(TAG, "HTTP error %d", this->status_); - return false; - } - ESP_LOGV(TAG, "HTTP status %d", this->status_); - return true; -} - void OtaHttpRequestComponent::flash() { if (this->url_.empty()) { ESP_LOGE(TAG, "URL not set; cannot start update"); @@ -104,17 +72,18 @@ void OtaHttpRequestComponent::flash() { } } -void OtaHttpRequestComponent::cleanup_(std::unique_ptr backend) { +void OtaHttpRequestComponent::cleanup_(std::unique_ptr backend, + const std::shared_ptr &container) { if (this->update_started_) { ESP_LOGV(TAG, "Aborting OTA backend"); backend->abort(); } ESP_LOGV(TAG, "Aborting HTTP connection"); - this->http_end(); + container->end(); }; uint8_t OtaHttpRequestComponent::do_ota_() { - uint8_t buf[this->http_recv_buffer_ + 1]; + uint8_t buf[OtaHttpRequestComponent::HTTP_RECV_BUFFER + 1]; uint32_t last_progress = 0; uint32_t update_start_time = millis(); md5::MD5Digest md5_receive; @@ -132,9 +101,10 @@ uint8_t OtaHttpRequestComponent::do_ota_() { } ESP_LOGVV(TAG, "url_with_auth: %s", url_with_auth.c_str()); ESP_LOGI(TAG, "Connecting to: %s", this->url_.c_str()); - this->http_init(url_with_auth); - if (!this->check_status()) { - this->http_end(); + + auto container = this->parent_->get(url_with_auth); + + if (container == nullptr) { return OTA_CONNECTION_ERROR; } @@ -144,18 +114,18 @@ uint8_t OtaHttpRequestComponent::do_ota_() { ESP_LOGV(TAG, "OTA backend begin"); auto backend = ota::make_ota_backend(); - auto error_code = backend->begin(this->body_length_); + auto error_code = backend->begin(container->content_length); if (error_code != ota::OTA_RESPONSE_OK) { ESP_LOGW(TAG, "backend->begin error: %d", error_code); - this->cleanup_(std::move(backend)); + this->cleanup_(std::move(backend), container); return error_code; } - this->bytes_read_ = 0; - while (this->bytes_read_ < this->body_length_) { + while (container->get_bytes_read() < container->content_length) { // read a maximum of chunk_size bytes into buf. (real read size returned) - int bufsize = this->http_read(buf, this->http_recv_buffer_); - ESP_LOGVV(TAG, "bytes_read_ = %u, body_length_ = %u, bufsize = %i", this->bytes_read_, this->body_length_, bufsize); + int bufsize = container->read(buf, OtaHttpRequestComponent::HTTP_RECV_BUFFER); + ESP_LOGVV(TAG, "bytes_read_ = %u, body_length_ = %u, bufsize = %i", container->get_bytes_read(), + container->content_length, bufsize); // feed watchdog and give other tasks a chance to run App.feed_wdt(); @@ -163,9 +133,9 @@ uint8_t OtaHttpRequestComponent::do_ota_() { if (bufsize < 0) { ESP_LOGE(TAG, "Stream closed"); - this->cleanup_(std::move(backend)); + this->cleanup_(std::move(backend), container); return OTA_CONNECTION_ERROR; - } else if (bufsize > 0 && bufsize <= this->http_recv_buffer_) { + } else if (bufsize > 0 && bufsize <= OtaHttpRequestComponent::HTTP_RECV_BUFFER) { // add read bytes to MD5 md5_receive.add(buf, bufsize); @@ -176,16 +146,16 @@ uint8_t OtaHttpRequestComponent::do_ota_() { // error code explanation available at // https://github.com/esphome/esphome/blob/dev/esphome/components/ota/ota_backend.h ESP_LOGE(TAG, "Error code (%02X) writing binary data to flash at offset %d and size %d", error_code, - this->bytes_read_ - bufsize, this->body_length_); - this->cleanup_(std::move(backend)); + container->get_bytes_read() - bufsize, container->content_length); + this->cleanup_(std::move(backend), container); return error_code; } } uint32_t now = millis(); - if ((now - last_progress > 1000) or (this->bytes_read_ == this->body_length_)) { + if ((now - last_progress > 1000) or (container->get_bytes_read() == container->content_length)) { last_progress = now; - float percentage = this->bytes_read_ * 100.0f / this->body_length_; + float percentage = container->get_bytes_read() * 100.0f / container->content_length; ESP_LOGD(TAG, "Progress: %0.1f%%", percentage); #ifdef USE_OTA_STATE_CALLBACK this->state_callback_.call(ota::OTA_IN_PROGRESS, percentage, 0); @@ -201,13 +171,13 @@ uint8_t OtaHttpRequestComponent::do_ota_() { this->md5_computed_ = md5_receive_str.get(); if (strncmp(this->md5_computed_.c_str(), this->md5_expected_.c_str(), MD5_SIZE) != 0) { ESP_LOGE(TAG, "MD5 computed: %s - Aborting due to MD5 mismatch", this->md5_computed_.c_str()); - this->cleanup_(std::move(backend)); + this->cleanup_(std::move(backend), container); return ota::OTA_RESPONSE_ERROR_MD5_MISMATCH; } else { backend->set_update_md5(md5_receive_str.get()); } - this->http_end(); + container->end(); // feed watchdog and give other tasks a chance to run App.feed_wdt(); @@ -217,7 +187,7 @@ uint8_t OtaHttpRequestComponent::do_ota_() { error_code = backend->end(); if (error_code != ota::OTA_RESPONSE_OK) { ESP_LOGW(TAG, "Error ending update! error_code: %d", error_code); - this->cleanup_(std::move(backend)); + this->cleanup_(std::move(backend), container); return error_code; } @@ -256,28 +226,32 @@ bool OtaHttpRequestComponent::http_get_md5_() { ESP_LOGVV(TAG, "url_with_auth: %s", url_with_auth.c_str()); ESP_LOGI(TAG, "Connecting to: %s", this->md5_url_.c_str()); - this->http_init(url_with_auth); - if (!this->check_status()) { - this->http_end(); + auto container = this->parent_->get(url_with_auth); + if (container == nullptr) { + ESP_LOGE(TAG, "Failed to connect to MD5 URL"); return false; } - int length = this->body_length_; - if (length < 0) { - this->http_end(); + size_t length = container->content_length; + if (length == 0) { + container->end(); return false; } if (length < MD5_SIZE) { - ESP_LOGE(TAG, "MD5 file must be %u bytes; %u bytes reported by HTTP server. Aborting", MD5_SIZE, - this->body_length_); - this->http_end(); + ESP_LOGE(TAG, "MD5 file must be %u bytes; %u bytes reported by HTTP server. Aborting", MD5_SIZE, length); + container->end(); return false; } - this->bytes_read_ = 0; this->md5_expected_.resize(MD5_SIZE); - auto read_len = this->http_read((uint8_t *) this->md5_expected_.data(), MD5_SIZE); - this->http_end(); + int read_len = 0; + while (container->get_bytes_read() < MD5_SIZE) { + read_len = container->read((uint8_t *) this->md5_expected_.data(), MD5_SIZE); + App.feed_wdt(); + yield(); + } + container->end(); + ESP_LOGV(TAG, "Read len: %u, MD5 expected: %u", read_len, MD5_SIZE); return read_len == MD5_SIZE; } diff --git a/esphome/components/http_request/ota/ota_http_request.h b/esphome/components/http_request/ota/ota_http_request.h index 9fbdf2ec25..91c7085517 100644 --- a/esphome/components/http_request/ota/ota_http_request.h +++ b/esphome/components/http_request/ota/ota_http_request.h @@ -1,13 +1,16 @@ #pragma once +#include "esphome/components/ota/ota_backend.h" #include "esphome/core/component.h" #include "esphome/core/defines.h" -#include "esphome/components/ota/ota_backend.h" +#include "esphome/core/helpers.h" #include #include #include +#include "../http_request.h" + namespace esphome { namespace http_request { @@ -20,7 +23,7 @@ enum OtaHttpRequestError : uint8_t { OTA_CONNECTION_ERROR = 0x12, }; -class OtaHttpRequestComponent : public ota::OTAComponent { +class OtaHttpRequestComponent : public ota::OTAComponent, public Parented { public: void setup() override; void dump_config() override; @@ -29,27 +32,19 @@ class OtaHttpRequestComponent : public ota::OTAComponent { void set_md5_url(const std::string &md5_url); void set_md5(const std::string &md5) { this->md5_expected_ = md5; } void set_password(const std::string &password) { this->password_ = password; } - void set_timeout(const uint64_t timeout) { this->timeout_ = timeout; } void set_url(const std::string &url); void set_username(const std::string &username) { this->username_ = username; } std::string md5_computed() { return this->md5_computed_; } std::string md5_expected() { return this->md5_expected_; } - bool check_status(); - void flash(); - virtual void http_init(const std::string &url){}; - virtual int http_read(uint8_t *buf, size_t len) { return 0; }; - virtual void http_end(){}; - protected: - void cleanup_(std::unique_ptr backend); + void cleanup_(std::unique_ptr backend, const std::shared_ptr &container); uint8_t do_ota_(); std::string get_url_with_auth_(const std::string &url); bool http_get_md5_(); - bool secure_() { return this->url_.find("https:") != std::string::npos; }; bool validate_url_(const std::string &url); std::string md5_computed_{}; @@ -58,14 +53,9 @@ class OtaHttpRequestComponent : public ota::OTAComponent { std::string password_{}; std::string username_{}; std::string url_{}; - size_t body_length_ = 0; - size_t bytes_read_ = 0; int status_ = -1; - uint64_t timeout_ = 0; bool update_started_ = false; - const uint16_t http_recv_buffer_ = 256; // the firmware GET chunk size - const uint16_t max_http_recv_buffer_ = 512; // internal max http buffer size must be > HTTP_RECV_BUFFER_ (TLS - // overhead) and must be a power of two from 512 to 4096 + static const uint16_t HTTP_RECV_BUFFER = 256; // the firmware GET chunk size }; } // namespace http_request diff --git a/esphome/components/http_request/ota/ota_http_request_arduino.cpp b/esphome/components/http_request/ota/ota_http_request_arduino.cpp deleted file mode 100644 index d1dc638d5e..0000000000 --- a/esphome/components/http_request/ota/ota_http_request_arduino.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#include "ota_http_request.h" -#include "watchdog.h" - -#ifdef USE_ARDUINO -#include "ota_http_request_arduino.h" -#include "esphome/core/defines.h" -#include "esphome/core/log.h" -#include "esphome/core/application.h" -#include "esphome/components/network/util.h" -#include "esphome/components/md5/md5.h" - -namespace esphome { -namespace http_request { - -struct Header { - const char *name; - const char *value; -}; - -void OtaHttpRequestComponentArduino::http_init(const std::string &url) { - const char *header_keys[] = {"Content-Length", "Content-Type"}; - const size_t header_count = sizeof(header_keys) / sizeof(header_keys[0]); - watchdog::WatchdogManager wdts; - -#ifdef USE_ESP8266 - if (this->stream_ptr_ == nullptr && this->set_stream_ptr_()) { - ESP_LOGE(TAG, "Unable to set client"); - return; - } -#endif // USE_ESP8266 - -#ifdef USE_RP2040 - this->client_.setInsecure(); -#endif - - App.feed_wdt(); - -#if defined(USE_ESP32) || defined(USE_RP2040) - this->status_ = this->client_.begin(url.c_str()); -#endif -#ifdef USE_ESP8266 - this->client_.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); - this->status_ = this->client_.begin(*this->stream_ptr_, url.c_str()); -#endif - - if (!this->status_) { - this->client_.end(); - return; - } - - this->client_.setReuse(true); - - // returned needed headers must be collected before the requests - this->client_.collectHeaders(header_keys, header_count); - - // HTTP GET - this->status_ = this->client_.GET(); - - this->body_length_ = (size_t) this->client_.getSize(); - -#if defined(USE_ESP32) || defined(USE_RP2040) - if (this->stream_ptr_ == nullptr) { - this->set_stream_ptr_(); - } -#endif -} - -int OtaHttpRequestComponentArduino::http_read(uint8_t *buf, const size_t max_len) { -#ifdef USE_ESP8266 -#if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(3, 1, 0) // && USE_ARDUINO_VERSION_CODE < VERSION_CODE(?, ?, ?) - if (!this->secure_()) { - ESP_LOGW(TAG, "Using HTTP on Arduino version >= 3.1 is **very** slow. Consider setting framework version to 3.0.2 " - "in your YAML, or use HTTPS"); - } -#endif // USE_ARDUINO_VERSION_CODE -#endif // USE_ESP8266 - - watchdog::WatchdogManager wdts; - - // Since arduino8266 >= 3.1 using this->stream_ptr_ is broken (https://github.com/esp8266/Arduino/issues/9035) - WiFiClient *stream_ptr = this->client_.getStreamPtr(); - if (stream_ptr == nullptr) { - ESP_LOGE(TAG, "Stream pointer vanished!"); - return -1; - } - - int available_data = stream_ptr->available(); - int bufsize = std::min((int) max_len, available_data); - if (bufsize > 0) { - stream_ptr->readBytes(buf, bufsize); - this->bytes_read_ += bufsize; - buf[bufsize] = '\0'; // not fed to ota - } - - return bufsize; -} - -void OtaHttpRequestComponentArduino::http_end() { - watchdog::WatchdogManager wdts; - this->client_.end(); -} - -int OtaHttpRequestComponentArduino::set_stream_ptr_() { -#ifdef USE_ESP8266 -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS - if (this->secure_()) { - ESP_LOGV(TAG, "ESP8266 HTTPS connection with WiFiClientSecure"); - this->stream_ptr_ = std::make_unique(); - WiFiClientSecure *secure_client = static_cast(this->stream_ptr_.get()); - secure_client->setBufferSizes(this->max_http_recv_buffer_, 512); - secure_client->setInsecure(); - } else { - this->stream_ptr_ = std::make_unique(); - } -#else - ESP_LOGV(TAG, "ESP8266 HTTP connection with WiFiClient"); - if (this->secure_()) { - ESP_LOGE(TAG, "Can't use HTTPS connection with esp8266_disable_ssl_support"); - return -1; - } - this->stream_ptr_ = std::make_unique(); -#endif // USE_HTTP_REQUEST_ESP8266_HTTPS -#endif // USE_ESP8266 - -#if defined(USE_ESP32) || defined(USE_RP2040) - this->stream_ptr_ = std::unique_ptr(this->client_.getStreamPtr()); -#endif - return 0; -} - -} // namespace http_request -} // namespace esphome - -#endif // USE_ARDUINO diff --git a/esphome/components/http_request/ota/ota_http_request_arduino.h b/esphome/components/http_request/ota/ota_http_request_arduino.h deleted file mode 100644 index 02bc046520..0000000000 --- a/esphome/components/http_request/ota/ota_http_request_arduino.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "ota_http_request.h" - -#ifdef USE_ARDUINO -#include "esphome/core/automation.h" -#include "esphome/core/component.h" -#include "esphome/core/defines.h" - -#include -#include -#include - -#if defined(USE_ESP32) || defined(USE_RP2040) -#include -#endif -#ifdef USE_ESP8266 -#include -#ifdef USE_HTTP_REQUEST_ESP8266_HTTPS -#include -#endif -#endif - -namespace esphome { -namespace http_request { - -class OtaHttpRequestComponentArduino : public OtaHttpRequestComponent { - public: - void http_init(const std::string &url) override; - int http_read(uint8_t *buf, size_t len) override; - void http_end() override; - - protected: - int set_stream_ptr_(); - HTTPClient client_{}; - std::unique_ptr stream_ptr_; -}; - -} // namespace http_request -} // namespace esphome - -#endif // USE_ARDUINO diff --git a/esphome/components/http_request/ota/ota_http_request_idf.cpp b/esphome/components/http_request/ota/ota_http_request_idf.cpp deleted file mode 100644 index 9fa565d9bb..0000000000 --- a/esphome/components/http_request/ota/ota_http_request_idf.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#include "ota_http_request_idf.h" -#include "watchdog.h" - -#ifdef USE_ESP_IDF -#include "esphome/core/application.h" -#include "esphome/core/defines.h" -#include "esphome/core/log.h" -#include "esphome/components/md5/md5.h" -#include "esphome/components/network/util.h" - -#include "esp_event.h" -#include "esp_http_client.h" -#include "esp_idf_version.h" -#include "esp_log.h" -#include "esp_netif.h" -#include "esp_system.h" -#include "esp_task_wdt.h" -#include "esp_tls.h" - -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "nvs_flash.h" - -#include -#include -#include -#include -#include -#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE -#include "esp_crt_bundle.h" -#endif - -namespace esphome { -namespace http_request { - -void OtaHttpRequestComponentIDF::http_init(const std::string &url) { - App.feed_wdt(); -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wmissing-field-initializers" - esp_http_client_config_t config = {nullptr}; - config.url = url.c_str(); - config.method = HTTP_METHOD_GET; - config.timeout_ms = (int) this->timeout_; - config.buffer_size = this->max_http_recv_buffer_; - config.auth_type = HTTP_AUTH_TYPE_BASIC; - config.max_authorization_retries = -1; -#if CONFIG_MBEDTLS_CERTIFICATE_BUNDLE - if (this->secure_()) { - config.crt_bundle_attach = esp_crt_bundle_attach; - } -#endif -#pragma GCC diagnostic pop - - watchdog::WatchdogManager wdts; - this->client_ = esp_http_client_init(&config); - if ((this->status_ = esp_http_client_open(this->client_, 0)) == ESP_OK) { - this->body_length_ = esp_http_client_fetch_headers(this->client_); - this->status_ = esp_http_client_get_status_code(this->client_); - } -} - -int OtaHttpRequestComponentIDF::http_read(uint8_t *buf, const size_t max_len) { - watchdog::WatchdogManager wdts; - int bufsize = std::min(max_len, this->body_length_ - this->bytes_read_); - - App.feed_wdt(); - int read_len = esp_http_client_read(this->client_, (char *) buf, bufsize); - if (read_len > 0) { - this->bytes_read_ += bufsize; - buf[bufsize] = '\0'; // not fed to ota - } - - return read_len; -} - -void OtaHttpRequestComponentIDF::http_end() { - watchdog::WatchdogManager wdts; - - esp_http_client_close(this->client_); - esp_http_client_cleanup(this->client_); -} - -} // namespace http_request -} // namespace esphome - -#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/ota/ota_http_request_idf.h b/esphome/components/http_request/ota/ota_http_request_idf.h deleted file mode 100644 index 9783b2a3e1..0000000000 --- a/esphome/components/http_request/ota/ota_http_request_idf.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include "ota_http_request.h" - -#ifdef USE_ESP_IDF -#include "esp_http_client.h" - -namespace esphome { -namespace http_request { - -class OtaHttpRequestComponentIDF : public OtaHttpRequestComponent { - public: - void http_init(const std::string &url) override; - int http_read(uint8_t *buf, size_t len) override; - void http_end() override; - - protected: - esp_http_client_handle_t client_{}; -}; - -} // namespace http_request -} // namespace esphome - -#endif // USE_ESP_IDF diff --git a/esphome/components/http_request/ota/watchdog.cpp b/esphome/components/http_request/watchdog.cpp similarity index 79% rename from esphome/components/http_request/ota/watchdog.cpp rename to esphome/components/http_request/watchdog.cpp index 663c9afaac..e609feb4dd 100644 --- a/esphome/components/http_request/ota/watchdog.cpp +++ b/esphome/components/http_request/watchdog.cpp @@ -1,7 +1,5 @@ #include "watchdog.h" -#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT - #include "esphome/core/application.h" #include "esphome/core/log.h" @@ -20,14 +18,22 @@ namespace esphome { namespace http_request { namespace watchdog { -static const char *const TAG = "watchdog.http_request.ota"; +static const char *const TAG = "http_request.watchdog"; -WatchdogManager::WatchdogManager() { +WatchdogManager::WatchdogManager(uint32_t timeout_ms) : timeout_ms_(timeout_ms) { + if (timeout_ms == 0) { + return; + } this->saved_timeout_ms_ = this->get_timeout_(); - this->set_timeout_(USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT); + this->set_timeout_(timeout_ms); } -WatchdogManager::~WatchdogManager() { this->set_timeout_(this->saved_timeout_ms_); } +WatchdogManager::~WatchdogManager() { + if (this->timeout_ms_ == 0) { + return; + } + this->set_timeout_(this->saved_timeout_ms_); +} void WatchdogManager::set_timeout_(uint32_t timeout_ms) { ESP_LOGV(TAG, "Adjusting WDT to %" PRIu32 "ms", timeout_ms); @@ -68,4 +74,3 @@ uint32_t WatchdogManager::get_timeout_() { } // namespace watchdog } // namespace http_request } // namespace esphome -#endif diff --git a/esphome/components/http_request/ota/watchdog.h b/esphome/components/http_request/watchdog.h similarity index 84% rename from esphome/components/http_request/ota/watchdog.h rename to esphome/components/http_request/watchdog.h index 0a09dcd6fa..9b54ae6c82 100644 --- a/esphome/components/http_request/ota/watchdog.h +++ b/esphome/components/http_request/watchdog.h @@ -9,9 +9,8 @@ namespace http_request { namespace watchdog { class WatchdogManager { -#ifdef USE_HTTP_REQUEST_OTA_WATCHDOG_TIMEOUT public: - WatchdogManager(); + WatchdogManager(uint32_t timeout_ms); ~WatchdogManager(); private: @@ -19,7 +18,7 @@ class WatchdogManager { void set_timeout_(uint32_t timeout_ms); uint32_t saved_timeout_ms_{0}; -#endif + uint32_t timeout_ms_{0}; }; } // namespace watchdog diff --git a/esphome/cpp_types.py b/esphome/cpp_types.py index 0f1b7f236b..bd79d3b2f9 100644 --- a/esphome/cpp_types.py +++ b/esphome/cpp_types.py @@ -8,6 +8,7 @@ double = global_ns.namespace("double") bool_ = global_ns.namespace("bool") int_ = global_ns.namespace("int") std_ns = global_ns.namespace("std") +std_shared_ptr = std_ns.class_("shared_ptr") std_string = std_ns.class_("string") std_vector = std_ns.class_("vector") uint8 = global_ns.namespace("uint8_t") diff --git a/tests/components/http_request/common.yaml b/tests/components/http_request/common.yaml new file mode 100644 index 0000000000..2b6996c0b9 --- /dev/null +++ b/tests/components/http_request/common.yaml @@ -0,0 +1,75 @@ +substitutions: + verify_ssl: "true" + +wifi: + ssid: MySSID + password: password1 + +esphome: + on_boot: + then: + - http_request.get: + url: https://esphome.io + headers: + Content-Type: application/json + on_response: + then: + - logger.log: + format: "Response status: %d, Duration: %u ms" + args: + - response->status_code + - response->duration_ms + - http_request.post: + url: https://esphome.io + headers: + Content-Type: application/json + json: + key: value + - http_request.send: + method: PUT + url: https://esphome.io + headers: + Content-Type: application/json + body: "Some data" + +http_request: + useragent: esphome/tagreader + timeout: 10s + verify_ssl: ${verify_ssl} + +ota: + - platform: http_request + on_begin: + then: + - logger.log: "OTA start" + on_progress: + then: + - logger.log: + format: "OTA progress %0.1f%%" + args: ["x"] + on_end: + then: + - logger.log: "OTA end" + on_error: + then: + - logger.log: + format: "OTA update error %d" + args: ["x"] + on_state_change: + then: + lambda: 'ESP_LOGD("ota", "State %d", state);' + +button: + - platform: template + name: Firmware update + on_press: + then: + - ota.http_request.flash: + md5_url: http://my.ha.net:8123/local/esphome/firmware.md5 + url: http://my.ha.net:8123/local/esphome/firmware.bin + + - ota.http_request.flash: + md5: 0123456789abcdef0123456789abcdef + url: http://my.ha.net:8123/local/esphome/firmware.bin + + - logger.log: "This message should be not displayed (reboot)" diff --git a/tests/components/http_request/common_http_request.yaml b/tests/components/http_request/common_http_request.yaml deleted file mode 100644 index b00768c736..0000000000 --- a/tests/components/http_request/common_http_request.yaml +++ /dev/null @@ -1,33 +0,0 @@ -esphome: - on_boot: - then: - - http_request.get: - url: https://esphome.io - headers: - Content-Type: application/json - verify_ssl: false - on_response: - then: - - logger.log: - format: 'Response status: %d, Duration: %u ms' - args: - - status_code - - duration_ms - - http_request.post: - url: https://esphome.io - headers: - Content-Type: application/json - json: - key: value - verify_ssl: false - - http_request.send: - method: PUT - url: https://esphome.io - headers: - Content-Type: application/json - body: "Some data" - verify_ssl: false - -http_request: - useragent: esphome/tagreader - timeout: 10s diff --git a/tests/components/http_request/common_ota.yaml b/tests/components/http_request/common_ota.yaml deleted file mode 100644 index 10e7d54c3f..0000000000 --- a/tests/components/http_request/common_ota.yaml +++ /dev/null @@ -1,36 +0,0 @@ -wifi: - ssid: MySSID - password: password1 - -ota: - - platform: http_request - verify_ssl: ${verify_ssl} - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: 'ESP_LOGD("ota", "State %d", state);' - -button: - - platform: template - name: Firmware update - on_press: - then: - - ota_http_request.flash: - md5_url: http://my.ha.net:8123/local/esphome/firmware.md5 - url: http://my.ha.net:8123/local/esphome/firmware.bin - - logger.log: "This message should be not displayed (reboot)" diff --git a/tests/components/http_request/test-nossl.esp8266.yaml b/tests/components/http_request/test-nossl.esp8266.yaml index 65116d5550..9fc4706c89 100644 --- a/tests/components/http_request/test-nossl.esp8266.yaml +++ b/tests/components/http_request/test-nossl.esp8266.yaml @@ -1,38 +1,4 @@ -<<: !include common_http_request.yaml +<<: !include common.yaml -wifi: - ssid: MySSID - password: password1 - -ota: - - platform: http_request - esp8266_disable_ssl_support: true - on_begin: - then: - - logger.log: "OTA start" - on_progress: - then: - - logger.log: - format: "OTA progress %0.1f%%" - args: ["x"] - on_end: - then: - - logger.log: "OTA end" - on_error: - then: - - logger.log: - format: "OTA update error %d" - args: ["x"] - on_state_change: - then: - lambda: 'ESP_LOGD("ota", "State %d", state);' - -button: - - platform: template - name: Firmware update - on_press: - then: - - ota_http_request.flash: - md5_url: http://my.ha.net:8123/local/esphome/firmware.md5 - url: http://my.ha.net:8123/local/esphome/firmware.bin - - logger.log: "This message should be not displayed (reboot)" +http_request: + esp8266_disable_ssl_support: true diff --git a/tests/components/http_request/test.esp32-c3-idf.yaml b/tests/components/http_request/test.esp32-c3-idf.yaml index da629e83a9..ee2f5aa59b 100644 --- a/tests/components/http_request/test.esp32-c3-idf.yaml +++ b/tests/components/http_request/test.esp32-c3-idf.yaml @@ -1,4 +1,4 @@ substitutions: verify_ssl: "true" -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/components/http_request/test.esp32-c3.yaml b/tests/components/http_request/test.esp32-c3.yaml index 1f597bb500..c1937b5a10 100644 --- a/tests/components/http_request/test.esp32-c3.yaml +++ b/tests/components/http_request/test.esp32-c3.yaml @@ -1,5 +1,4 @@ substitutions: verify_ssl: "false" -<<: !include common_http_request.yaml -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/components/http_request/test.esp32-idf.yaml b/tests/components/http_request/test.esp32-idf.yaml index da629e83a9..ee2f5aa59b 100644 --- a/tests/components/http_request/test.esp32-idf.yaml +++ b/tests/components/http_request/test.esp32-idf.yaml @@ -1,4 +1,4 @@ substitutions: verify_ssl: "true" -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/components/http_request/test.esp32.yaml b/tests/components/http_request/test.esp32.yaml index 1f597bb500..c1937b5a10 100644 --- a/tests/components/http_request/test.esp32.yaml +++ b/tests/components/http_request/test.esp32.yaml @@ -1,5 +1,4 @@ substitutions: verify_ssl: "false" -<<: !include common_http_request.yaml -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/components/http_request/test.esp8266.yaml b/tests/components/http_request/test.esp8266.yaml index 1f597bb500..c1937b5a10 100644 --- a/tests/components/http_request/test.esp8266.yaml +++ b/tests/components/http_request/test.esp8266.yaml @@ -1,5 +1,4 @@ substitutions: verify_ssl: "false" -<<: !include common_http_request.yaml -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/components/http_request/test.rp2040.yaml b/tests/components/http_request/test.rp2040.yaml index 077e4d82da..c1937b5a10 100644 --- a/tests/components/http_request/test.rp2040.yaml +++ b/tests/components/http_request/test.rp2040.yaml @@ -1,4 +1,4 @@ substitutions: verify_ssl: "false" -<<: !include common_ota.yaml +<<: !include common.yaml diff --git a/tests/test1.yaml b/tests/test1.yaml index c49ff307e5..2dacfda536 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -25,31 +25,6 @@ esphome: then: - lambda: >- ESP_LOGV("main", "ON LOOP!"); - - http_request.get: - url: https://esphome.io - headers: - Content-Type: application/json - verify_ssl: false - - http_request.post: - url: https://esphome.io - verify_ssl: false - json: - key: !lambda |- - return id(${textname}_text).state; - greeting: Hello World - - http_request.send: - method: PUT - url: https://esphome.io - headers: - Content-Type: application/json - body: Some data - verify_ssl: false - on_response: - then: - - logger.log: - format: "Response status: %d" - args: - - status_code build_path: build/test1 packages: @@ -84,10 +59,6 @@ network: mdns: disabled: false -http_request: - useragent: esphome/device - timeout: 10s - mqtt: broker: "192.168.178.84" port: 1883 diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml index 018a4d94f3..c3b078fe67 100644 --- a/tests/test3.1.yaml +++ b/tests/test3.1.yaml @@ -447,26 +447,6 @@ switch: switches: - id: custom_switch name: Custom Switch - on_turn_on: - - http_request.get: - url: https://esphome.io - headers: - Content-Type: application/json - verify_ssl: false - - http_request.post: - url: https://esphome.io - verify_ssl: false - json: - key: !lambda |- - return id(custom_text_sensor).state; - greeting: Hello World - - http_request.send: - method: PUT - url: https://esphome.io - headers: - Content-Type: application/json - body: Some data - verify_ssl: false - platform: template name: open_vent id: open_vent @@ -722,10 +702,6 @@ display: lambda: |- it.printdigit("hello"); -http_request: - useragent: esphome/device - timeout: 10s - button: - platform: output id: output_button diff --git a/tests/test7.yaml b/tests/test7.yaml index b22fbfbcb4..ac193eae4e 100644 --- a/tests/test7.yaml +++ b/tests/test7.yaml @@ -1,7 +1,7 @@ # Tests for ESP32-C3 boards which use toolchain-riscv32-esp --- wifi: - ssid: 'ssid' + ssid: "ssid" network: enable_ipv6: true @@ -12,31 +12,12 @@ esp32: type: arduino esphome: - name: 'on-response-test' - on_boot: - then: - - http_request.send: - method: PUT - url: https://esphome.io - headers: - Content-Type: application/json - body: Some data - verify_ssl: false - on_response: - then: - - logger.log: - format: "Response status: %d" - args: - - status_code + name: test7 logger: debug: -http_request: - useragent: esphome/tagreader - timeout: 10s - sensor: - platform: adc id: adc_sensor_p4 From 6de79d6cfbdf42b5fdc9b1f880b86210900dab5a Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:22:41 +1200 Subject: [PATCH 312/313] [i2s_speaker] A few fixes (#6872) --- .../i2s_audio/speaker/i2s_audio_speaker.cpp | 40 +++++++++++++++---- .../i2s_audio/speaker/i2s_audio_speaker.h | 2 +- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp index 546c2c98f7..6b07ecb1b6 100644 --- a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +++ b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp @@ -38,15 +38,22 @@ void I2SAudioSpeaker::start() { ESP_LOGE(TAG, "Cannot start audio, speaker failed to setup"); return; } + if (this->task_created_) { + ESP_LOGW(TAG, "Called start while task has been already created."); + return; + } this->state_ = speaker::STATE_STARTING; } void I2SAudioSpeaker::start_() { + if (this->task_created_) { + return; + } if (!this->parent_->try_lock()) { return; // Waiting for another i2s component to return lock } - this->state_ = speaker::STATE_RUNNING; xTaskCreate(I2SAudioSpeaker::player_task, "speaker_task", 8192, (void *) this, 1, &this->player_task_handle_); + this->task_created_ = true; } void I2SAudioSpeaker::player_task(void *params) { @@ -131,7 +138,16 @@ void I2SAudioSpeaker::player_task(void *params) { (10 / portTICK_PERIOD_MS)); if (err != ESP_OK) { event = {.type = TaskEventType::WARNING, .err = err}; - xQueueSend(this_speaker->event_queue_, &event, portMAX_DELAY); + if (xQueueSend(this_speaker->event_queue_, &event, 10 / portTICK_PERIOD_MS) != pdTRUE) { + ESP_LOGW(TAG, "Failed to send WARNING event"); + } + continue; + } + if (bytes_written != sizeof(sample)) { + event = {.type = TaskEventType::WARNING, .err = ESP_FAIL}; + if (xQueueSend(this_speaker->event_queue_, &event, 10 / portTICK_PERIOD_MS) != pdTRUE) { + ESP_LOGW(TAG, "Failed to send WARNING event"); + } continue; } remaining--; @@ -139,18 +155,25 @@ void I2SAudioSpeaker::player_task(void *params) { } event.type = TaskEventType::PLAYING; - xQueueSend(this_speaker->event_queue_, &event, portMAX_DELAY); + event.err = current; + if (xQueueSend(this_speaker->event_queue_, &event, 10 / portTICK_PERIOD_MS) != pdTRUE) { + ESP_LOGW(TAG, "Failed to send PLAYING event"); + } + } + + event.type = TaskEventType::STOPPING; + if (xQueueSend(this_speaker->event_queue_, &event, 10 / portTICK_PERIOD_MS) != pdTRUE) { + ESP_LOGW(TAG, "Failed to send STOPPING event"); } i2s_zero_dma_buffer(this_speaker->parent_->get_port()); - event.type = TaskEventType::STOPPING; - xQueueSend(this_speaker->event_queue_, &event, portMAX_DELAY); - i2s_driver_uninstall(this_speaker->parent_->get_port()); event.type = TaskEventType::STOPPED; - xQueueSend(this_speaker->event_queue_, &event, portMAX_DELAY); + if (xQueueSend(this_speaker->event_queue_, &event, 10 / portTICK_PERIOD_MS) != pdTRUE) { + ESP_LOGW(TAG, "Failed to send STOPPED event"); + } while (true) { delay(10); @@ -181,6 +204,7 @@ void I2SAudioSpeaker::watch_() { break; case TaskEventType::STARTED: ESP_LOGD(TAG, "Started I2S Audio Speaker"); + this->state_ = speaker::STATE_RUNNING; break; case TaskEventType::STOPPING: ESP_LOGD(TAG, "Stopping I2S Audio Speaker"); @@ -191,6 +215,7 @@ void I2SAudioSpeaker::watch_() { case TaskEventType::STOPPED: this->state_ = speaker::STATE_STOPPED; vTaskDelete(this->player_task_handle_); + this->task_created_ = false; this->player_task_handle_ = nullptr; this->parent_->unlock(); xQueueReset(this->buffer_queue_); @@ -208,7 +233,6 @@ void I2SAudioSpeaker::loop() { switch (this->state_) { case speaker::STATE_STARTING: this->start_(); - break; case speaker::STATE_RUNNING: case speaker::STATE_STOPPING: this->watch_(); diff --git a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.h b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.h index 20c36a69d3..1800feaeec 100644 --- a/esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +++ b/esphome/components/i2s_audio/speaker/i2s_audio_speaker.h @@ -60,7 +60,6 @@ class I2SAudioSpeaker : public Component, public speaker::Speaker, public I2SAud protected: void start_(); - // void stop_(); void watch_(); static void player_task(void *params); @@ -70,6 +69,7 @@ class I2SAudioSpeaker : public Component, public speaker::Speaker, public I2SAud QueueHandle_t event_queue_; uint8_t dout_pin_{0}; + bool task_created_{false}; #if SOC_I2S_SUPPORTS_DAC i2s_dac_mode_t internal_dac_mode_{I2S_DAC_CHANNEL_DISABLE}; From dceab6ce29493e67caaa8cdadf8cf7f4df063635 Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:22:55 +1200 Subject: [PATCH 313/313] [voice_assistant] Write less data to speaker each loop (#6877) --- esphome/components/voice_assistant/voice_assistant.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/esphome/components/voice_assistant/voice_assistant.cpp b/esphome/components/voice_assistant/voice_assistant.cpp index e4fd2f2e9d..1fa8236cf4 100644 --- a/esphome/components/voice_assistant/voice_assistant.cpp +++ b/esphome/components/voice_assistant/voice_assistant.cpp @@ -428,14 +428,15 @@ void VoiceAssistant::loop() { #ifdef USE_SPEAKER void VoiceAssistant::write_speaker_() { if (this->speaker_buffer_size_ > 0) { - size_t written = this->speaker_->play(this->speaker_buffer_, this->speaker_buffer_size_); + size_t write_chunk = std::min(this->speaker_buffer_size_, 4 * 1024); + size_t written = this->speaker_->play(this->speaker_buffer_, write_chunk); if (written > 0) { memmove(this->speaker_buffer_, this->speaker_buffer_ + written, this->speaker_buffer_size_ - written); this->speaker_buffer_size_ -= written; this->speaker_buffer_index_ -= written; this->set_timeout("speaker-timeout", 5000, [this]() { this->speaker_->stop(); }); } else { - ESP_LOGD(TAG, "Speaker buffer full, trying again next loop"); + ESP_LOGV(TAG, "Speaker buffer full, trying again next loop"); } } } @@ -798,7 +799,7 @@ void VoiceAssistant::on_audio(const api::VoiceAssistantAudio &msg) { this->speaker_buffer_index_ += msg.data.length(); this->speaker_buffer_size_ += msg.data.length(); this->speaker_bytes_received_ += msg.data.length(); - ESP_LOGD(TAG, "Received audio: %d bytes from API", msg.data.length()); + ESP_LOGV(TAG, "Received audio: %" PRId32 " bytes from API", msg.data.length()); } else { ESP_LOGE(TAG, "Cannot receive audio, buffer is full"); }